diff -Nru lxd-3.0.2/client/interfaces.go lxd-3.0.3/client/interfaces.go --- lxd-3.0.2/client/interfaces.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/interfaces.go 2018-11-22 20:52:32.000000000 +0000 @@ -69,6 +69,7 @@ RequireAuthenticated(authenticated bool) IsClustered() (clustered bool) UseTarget(name string) (client ContainerServer) + UseProject(name string) (client ContainerServer) // Certificate functions GetCertificateFingerprints() (fingerprints []string, err error) @@ -154,6 +155,7 @@ GetNetworks() (networks []api.Network, err error) GetNetwork(name string) (network *api.Network, ETag string, err error) GetNetworkLeases(name string) (leases []api.NetworkLease, err error) + GetNetworkState(name string) (state *api.NetworkState, err error) CreateNetwork(network api.NetworksPost) (err error) UpdateNetwork(name string, network api.NetworkPut, ETag string) (err error) RenameNetwork(name string, network api.NetworkPost) (err error) @@ -176,6 +178,15 @@ RenameProfile(name string, profile api.ProfilePost) (err error) DeleteProfile(name string) (err error) + // Project functions + GetProjectNames() (names []string, err error) + GetProjects() (projects []api.Project, err error) + GetProject(name string) (project *api.Project, ETag string, err error) + CreateProject(project api.ProjectsPost) (err error) + UpdateProject(name string, project api.ProjectPut, ETag string) (err error) + RenameProject(name string, project api.ProjectPost) (op Operation, err error) + DeleteProject(name string) (err error) + // Storage pool functions ("storage" API extension) GetStoragePoolNames() (names []string, err error) GetStoragePools() (pools []api.StoragePool, err error) @@ -197,6 +208,15 @@ MoveStoragePoolVolume(pool string, source ContainerServer, sourcePool string, volume api.StorageVolume, args *StoragePoolVolumeMoveArgs) (op RemoteOperation, err error) MigrateStoragePoolVolume(pool string, volume api.StorageVolumePost) (op Operation, err error) + // Storage volume snapshot functions ("storage_api_volume_snapshots" API extension) + CreateStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshot api.StorageVolumeSnapshotsPost) (op Operation, err error) + DeleteStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string) (op Operation, err error) + GetStoragePoolVolumeSnapshotNames(pool string, volumeType string, volumeName string) (names []string, err error) + GetStoragePoolVolumeSnapshots(pool string, volumeType string, volumeName string) (snapshots []api.StorageVolumeSnapshot, err error) + GetStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string) (snapshot *api.StorageVolumeSnapshot, ETag string, err error) + RenameStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string, snapshot api.StorageVolumeSnapshotPost) (op Operation, err error) + UpdateStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string, volume api.StorageVolumeSnapshotPut, ETag string) (err error) + // Cluster functions ("cluster" API extensions) GetCluster() (cluster *api.Cluster, ETag string, err error) UpdateCluster(cluster api.ClusterPut, ETag string) (op Operation, err error) @@ -218,6 +238,7 @@ Certificate string Protocol string URL string + Project string } // The ContainerBackupArgs struct is used when creating a container from a backup @@ -319,6 +340,9 @@ // The transfer mode, can be "pull" (default), "push" or "relay" Mode string + + // API extension: storage_api_volume_snapshots + VolumeOnly bool } // The StoragePoolVolumeMoveArgs struct is used to pass additional options @@ -340,6 +364,10 @@ // The transfer mode, can be "pull" (default), "push" or "relay" Mode string + + // API extension: container_incremental_copy + // Perform an incremental copy + Refresh bool } // The ContainerSnapshotCopyArgs struct is used to pass additional options during container copy diff -Nru lxd-3.0.2/client/lxd_cluster.go lxd-3.0.3/client/lxd_cluster.go --- lxd-3.0.2/client/lxd_cluster.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd_cluster.go 2018-11-22 20:52:32.000000000 +0000 @@ -23,12 +23,18 @@ return cluster, etag, nil } -// UpdateCluster requests to bootstrap a new cluster +// UpdateCluster requests to bootstrap a new cluster or join an existing one. func (r *ProtocolLXD) UpdateCluster(cluster api.ClusterPut, ETag string) (Operation, error) { if !r.HasExtension("clustering") { return nil, fmt.Errorf("The server is missing the required \"clustering\" API extension") } + if cluster.ServerAddress != "" || cluster.ClusterPassword != "" || len(cluster.MemberConfig) > 0 { + if !r.HasExtension("clustering_join") { + return nil, fmt.Errorf("The server is missing the required \"clustering_join\" API extension") + } + } + op, _, err := r.queryOperation("PUT", "/cluster", cluster, "") if err != nil { return nil, err diff -Nru lxd-3.0.2/client/lxd_containers.go lxd-3.0.3/client/lxd_containers.go --- lxd-3.0.2/client/lxd_containers.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd_containers.go 2018-11-22 20:52:32.000000000 +0000 @@ -267,6 +267,16 @@ return nil, fmt.Errorf("The source server is missing the required \"container_push_target\" API extension") } + if args.Refresh { + if !r.HasExtension("container_incremental_copy") { + return nil, fmt.Errorf("The target server is missing the required \"container_incremental_copy\" API extension") + } + + if !source.HasExtension("container_incremental_copy") { + return nil, fmt.Errorf("The source server is missing the required \"container_incremental_copy\" API extension") + } + } + // Allow overriding the target name if args.Name != "" { req.Name = args.Name @@ -274,6 +284,7 @@ req.Source.Live = args.Live req.Source.ContainerOnly = args.ContainerOnly + req.Source.Refresh = args.Refresh } if req.Source.Live { @@ -287,11 +298,20 @@ destInfo, err := r.GetConnectionInfo() if err != nil { - return nil, fmt.Errorf("Failed to get source connection info: %v", err) + return nil, fmt.Errorf("Failed to get destination connection info: %v", err) } // Optimization for the local copy case if destInfo.URL == sourceInfo.URL && !r.IsClustered() { + // Project handling + if destInfo.Project != sourceInfo.Project { + if !r.HasExtension("container_copy_project") { + return nil, fmt.Errorf("The server is missing the required \"container_copy_project\" API extension") + } + + req.Source.Project = sourceInfo.Project + } + // Local copy source fields req.Source.Type = "copy" req.Source.Source = container.Name @@ -334,11 +354,13 @@ // Create the container req.Source.Type = "migration" req.Source.Mode = "push" + req.Source.Refresh = args.Refresh op, err := r.CreateContainer(req) if err != nil { return nil, err } + opAPI := op.Get() targetSecrets := map[string]string{} @@ -757,6 +779,11 @@ return nil, nil, err } + requestURL, err = r.setQueryAttributes(requestURL) + if err != nil { + return nil, nil, err + } + req, err := http.NewRequest("GET", requestURL, nil) if err != nil { return nil, nil, err @@ -836,7 +863,14 @@ } // Prepare the HTTP request - req, err := http.NewRequest("POST", fmt.Sprintf("%s/1.0/containers/%s/files?path=%s", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(path)), args.Content) + requestURL := fmt.Sprintf("%s/1.0/containers/%s/files?path=%s", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(path)) + + requestURL, err := r.setQueryAttributes(requestURL) + if err != nil { + return err + } + + req, err := http.NewRequest("POST", requestURL, args.Content) if err != nil { return err } @@ -1283,6 +1317,12 @@ func (r *ProtocolLXD) GetContainerLogfile(name string, filename string) (io.ReadCloser, error) { // Prepare the HTTP request url := fmt.Sprintf("%s/1.0/containers/%s/logs/%s", r.httpHost, url.QueryEscape(name), url.QueryEscape(filename)) + + url, err := r.setQueryAttributes(url) + if err != nil { + return nil, err + } + req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err @@ -1377,6 +1417,12 @@ } url := fmt.Sprintf("%s/1.0/containers/%s/metadata/templates?path=%s", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(templateName)) + + url, err := r.setQueryAttributes(url) + if err != nil { + return nil, err + } + req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err @@ -1388,7 +1434,7 @@ } // Send the request - resp, err := r.http.Do(req) + resp, err := r.do(req) if err != nil { return nil, err } @@ -1420,6 +1466,12 @@ } url := fmt.Sprintf("%s/1.0/containers/%s/metadata/templates?path=%s", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(templateName)) + + url, err := r.setQueryAttributes(url) + if err != nil { + return err + } + req, err := http.NewRequest(httpMethod, url, content) if err != nil { return err @@ -1432,7 +1484,7 @@ } // Send the request - resp, err := r.http.Do(req) + resp, err := r.do(req) // Check the return value for a cleaner error if resp.StatusCode != http.StatusOK { _, _, err := lxdParseResponse(resp) @@ -1532,6 +1584,12 @@ // Prepare the HTTP request url := fmt.Sprintf("%s/1.0/containers/%s/console", r.httpHost, url.QueryEscape(containerName)) + + url, err := r.setQueryAttributes(url) + if err != nil { + return nil, err + } + req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err @@ -1689,6 +1747,9 @@ // Build the URL uri := fmt.Sprintf("%s/1.0/containers/%s/backups/%s/export", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(name)) + if r.project != "" { + uri += fmt.Sprintf("?project=%s", url.QueryEscape(r.project)) + } // Prepare the download request request, err := http.NewRequest("GET", uri, nil) diff -Nru lxd-3.0.2/client/lxd_events.go lxd-3.0.3/client/lxd_events.go --- lxd-3.0.2/client/lxd_events.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd_events.go 2018-11-22 20:52:32.000000000 +0000 @@ -2,6 +2,8 @@ import ( "encoding/json" + "fmt" + "time" "github.com/lxc/lxd/shared" ) @@ -30,7 +32,7 @@ r.eventListeners = []*EventListener{} // Setup a new connection with LXD - conn, err := r.websocket("/events") + conn, err := r.websocket(fmt.Sprintf("/events?project=%s", r.project)) if err != nil { return nil, err } @@ -38,9 +40,17 @@ // Add the listener r.eventListeners = append(r.eventListeners, &listener) - // And spawn the listener + // Spawn a watcher that will close the websocket connection after all + // listeners are gone. + stopCh := make(chan struct{}, 0) go func() { for { + select { + case <-time.After(time.Minute): + case <-stopCh: + break + } + r.eventListenersLock.Lock() if len(r.eventListeners) == 0 { // We don't need the connection anymore, disconnect @@ -51,7 +61,12 @@ break } r.eventListenersLock.Unlock() + } + }() + // Spawn the listener + go func() { + for { _, data, err := conn.ReadMessage() if err != nil { // Prevent anything else from interacting with the listeners @@ -67,6 +82,10 @@ // And remove them all from the list r.eventListeners = []*EventListener{} + + conn.Close() + close(stopCh) + return } diff -Nru lxd-3.0.2/client/lxd.go lxd-3.0.3/client/lxd.go --- lxd-3.0.2/client/lxd.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd.go 2018-11-22 20:52:32.000000000 +0000 @@ -38,6 +38,7 @@ requireAuthenticated bool clusterTarget string + project string } // GetConnectionInfo returns the basic connection information used to interact with the server @@ -46,6 +47,10 @@ info.Certificate = r.httpCertificate info.Protocol = "lxd" info.URL = r.httpHost + info.Project = r.project + if info.Project == "" { + info.Project = "default" + } urls := []string{} if r.httpProtocol == "https" { @@ -224,27 +229,43 @@ return lxdParseResponse(resp) } -func (r *ProtocolLXD) query(method string, path string, data interface{}, ETag string) (*api.Response, string, error) { - // Generate the URL - url := fmt.Sprintf("%s/1.0%s", r.httpHost, path) - +func (r *ProtocolLXD) setQueryAttributes(uri string) (string, error) { // Parse the full URI - fields, err := neturl.Parse(url) + fields, err := neturl.Parse(uri) if err != nil { - return nil, "", err + return "", err } - // Extract query fields and update for cluster targeting + // Extract query fields and update for cluster targeting or project values := fields.Query() if r.clusterTarget != "" { if values.Get("target") == "" { values.Set("target", r.clusterTarget) } } + + if r.project != "" { + if values.Get("project") == "" { + values.Set("project", r.project) + } + } fields.RawQuery = values.Encode() + return fields.String(), nil +} + +func (r *ProtocolLXD) query(method string, path string, data interface{}, ETag string) (*api.Response, string, error) { + // Generate the URL + url := fmt.Sprintf("%s/1.0%s", r.httpHost, path) + + // Add project/target + url, err := r.setQueryAttributes(url) + if err != nil { + return nil, "", err + } + // Run the actual query - return r.rawQuery(method, fields.String(), data, ETag) + return r.rawQuery(method, url, data, ETag) } func (r *ProtocolLXD) queryStruct(method string, path string, data interface{}, ETag string, target interface{}) (string, error) { diff -Nru lxd-3.0.2/client/lxd_images.go lxd-3.0.3/client/lxd_images.go --- lxd-3.0.2/client/lxd_images.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd_images.go 2018-11-22 20:52:32.000000000 +0000 @@ -79,8 +79,17 @@ // Build the API path path := fmt.Sprintf("/images/%s", url.QueryEscape(fingerprint)) + var err error + path, err = r.setQueryAttributes(path) + if err != nil { + return nil, "", err + } + if secret != "" { - path = fmt.Sprintf("%s?secret=%s", path, url.QueryEscape(secret)) + path, err = setQueryParam(path, "secret", secret) + if err != nil { + return nil, "", err + } } // Fetch the raw value @@ -99,9 +108,17 @@ return nil, fmt.Errorf("No file requested") } + uri := fmt.Sprintf("/1.0/images/%s/export", url.QueryEscape(fingerprint)) + + var err error + uri, err = r.setQueryAttributes(uri) + if err != nil { + return nil, err + } + // Attempt to download from host if secret == "" && shared.PathExists("/dev/lxd/sock") && os.Geteuid() == 0 { - unixURI := fmt.Sprintf("http://unix.socket/1.0/images/%s/export", url.QueryEscape(fingerprint)) + unixURI := fmt.Sprintf("http://unix.socket%s", uri) // Setup the HTTP client devlxdHTTP, err := unixHTTPClient(nil, "/dev/lxd/sock") @@ -114,9 +131,12 @@ } // Build the URL - uri := fmt.Sprintf("%s/1.0/images/%s/export", r.httpHost, url.QueryEscape(fingerprint)) + uri = fmt.Sprintf("%s%s", r.httpHost, uri) if secret != "" { - uri = fmt.Sprintf("%s?secret=%s", uri, url.QueryEscape(secret)) + uri, err = setQueryParam(uri, "secret", secret) + if err != nil { + return nil, err + } } return lxdDownloadImage(fingerprint, uri, r.httpUserAgent, r.http, req) @@ -391,7 +411,11 @@ } // Prepare the HTTP request - reqURL := fmt.Sprintf("%s/1.0/images", r.httpHost) + reqURL, err := r.setQueryAttributes(fmt.Sprintf("%s/1.0/images", r.httpHost)) + if err != nil { + return nil, err + } + req, err := http.NewRequest("POST", reqURL, body) if err != nil { return nil, err diff -Nru lxd-3.0.2/client/lxd_networks.go lxd-3.0.3/client/lxd_networks.go --- lxd-3.0.2/client/lxd_networks.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd_networks.go 2018-11-22 20:52:32.000000000 +0000 @@ -83,6 +83,23 @@ return leases, nil } +// GetNetworkState returns metrics and information on the running network +func (r *ProtocolLXD) GetNetworkState(name string) (*api.NetworkState, error) { + if !r.HasExtension("network_state") { + return nil, fmt.Errorf("The server is missing the required \"network_state\" API extension") + } + + state := api.NetworkState{} + + // Fetch the raw value + _, err := r.queryStruct("GET", fmt.Sprintf("/networks/%s/state", url.QueryEscape(name)), nil, "", &state) + if err != nil { + return nil, err + } + + return &state, nil +} + // CreateNetwork defines a new network using the provided Network struct func (r *ProtocolLXD) CreateNetwork(network api.NetworksPost) error { if !r.HasExtension("network") { diff -Nru lxd-3.0.2/client/lxd_profiles.go lxd-3.0.3/client/lxd_profiles.go --- lxd-3.0.2/client/lxd_profiles.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd_profiles.go 2018-11-22 20:52:32.000000000 +0000 @@ -24,7 +24,7 @@ names := []string{} for _, url := range urls { fields := strings.Split(url, "/profiles/") - names = append(names, fields[len(fields)-1]) + names = append(names, strings.Split(fields[len(fields)-1], "?")[0]) } return names, nil diff -Nru lxd-3.0.2/client/lxd_projects.go lxd-3.0.3/client/lxd_projects.go --- lxd-3.0.2/client/lxd_projects.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/client/lxd_projects.go 2018-11-22 20:52:32.000000000 +0000 @@ -0,0 +1,129 @@ +package lxd + +import ( + "fmt" + "net/url" + "strings" + + "github.com/lxc/lxd/shared/api" +) + +// Project handling functions + +// GetProjectNames returns a list of available project names +func (r *ProtocolLXD) GetProjectNames() ([]string, error) { + if !r.HasExtension("projects") { + return nil, fmt.Errorf("The server is missing the required \"projects\" API extension") + } + + urls := []string{} + + // Fetch the raw value + _, err := r.queryStruct("GET", "/projects", nil, "", &urls) + if err != nil { + return nil, err + } + + // Parse it + names := []string{} + for _, url := range urls { + fields := strings.Split(url, "/projects/") + names = append(names, fields[len(fields)-1]) + } + + return names, nil +} + +// GetProjects returns a list of available Project structs +func (r *ProtocolLXD) GetProjects() ([]api.Project, error) { + if !r.HasExtension("projects") { + return nil, fmt.Errorf("The server is missing the required \"projects\" API extension") + } + + projects := []api.Project{} + + // Fetch the raw value + _, err := r.queryStruct("GET", "/projects?recursion=1", nil, "", &projects) + if err != nil { + return nil, err + } + + return projects, nil +} + +// GetProject returns a Project entry for the provided name +func (r *ProtocolLXD) GetProject(name string) (*api.Project, string, error) { + if !r.HasExtension("projects") { + return nil, "", fmt.Errorf("The server is missing the required \"projects\" API extension") + } + + project := api.Project{} + + // Fetch the raw value + etag, err := r.queryStruct("GET", fmt.Sprintf("/projects/%s", url.QueryEscape(name)), nil, "", &project) + if err != nil { + return nil, "", err + } + + return &project, etag, nil +} + +// CreateProject defines a new container project +func (r *ProtocolLXD) CreateProject(project api.ProjectsPost) error { + if !r.HasExtension("projects") { + return fmt.Errorf("The server is missing the required \"projects\" API extension") + } + + // Send the request + _, _, err := r.query("POST", "/projects", project, "") + if err != nil { + return err + } + + return nil +} + +// UpdateProject updates the project to match the provided Project struct +func (r *ProtocolLXD) UpdateProject(name string, project api.ProjectPut, ETag string) error { + if !r.HasExtension("projects") { + return fmt.Errorf("The server is missing the required \"projects\" API extension") + } + + // Send the request + _, _, err := r.query("PUT", fmt.Sprintf("/projects/%s", url.QueryEscape(name)), project, ETag) + if err != nil { + return err + } + + return nil +} + +// RenameProject renames an existing project entry +func (r *ProtocolLXD) RenameProject(name string, project api.ProjectPost) (Operation, error) { + if !r.HasExtension("projects") { + return nil, fmt.Errorf("The server is missing the required \"projects\" API extension") + } + + // Send the request + op, _, err := r.queryOperation("POST", fmt.Sprintf("/projects/%s", url.QueryEscape(name)), project, "") + if err != nil { + return nil, err + } + + return op, nil +} + +// DeleteProject deletes a project +func (r *ProtocolLXD) DeleteProject(name string) error { + if !r.HasExtension("projects") { + return fmt.Errorf("The server is missing the required \"projects\" API extension") + } + + // Send the request + _, _, err := r.query("DELETE", fmt.Sprintf("/projects/%s", url.QueryEscape(name)), nil, "") + if err != nil { + return err + } + + return nil +} diff -Nru lxd-3.0.2/client/lxd_server.go lxd-3.0.3/client/lxd_server.go --- lxd-3.0.2/client/lxd_server.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd_server.go 2018-11-22 20:52:32.000000000 +0000 @@ -89,6 +89,23 @@ return &resources, nil } +// UseProject returns a client that will use a specific project. +func (r *ProtocolLXD) UseProject(name string) ContainerServer { + return &ProtocolLXD{ + server: r.server, + http: r.http, + httpCertificate: r.httpCertificate, + httpHost: r.httpHost, + httpProtocol: r.httpProtocol, + httpUserAgent: r.httpUserAgent, + bakeryClient: r.bakeryClient, + bakeryInteractor: r.bakeryInteractor, + requireAuthenticated: r.requireAuthenticated, + clusterTarget: r.clusterTarget, + project: name, + } +} + // UseTarget returns a client that will target a specific cluster member. // Use this member-specific operations such as specific container // placement, preparing a new storage pool or network, ... @@ -103,6 +120,7 @@ bakeryClient: r.bakeryClient, bakeryInteractor: r.bakeryInteractor, requireAuthenticated: r.requireAuthenticated, + project: r.project, clusterTarget: name, } } diff -Nru lxd-3.0.2/client/lxd_storage_volumes.go lxd-3.0.3/client/lxd_storage_volumes.go --- lxd-3.0.2/client/lxd_storage_volumes.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/lxd_storage_volumes.go 2018-11-22 20:52:32.000000000 +0000 @@ -85,6 +85,147 @@ return nil } +// CreateStoragePoolVolumeSnapshot defines a new storage volume +func (r *ProtocolLXD) CreateStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshot api.StorageVolumeSnapshotsPost) (Operation, error) { + if !r.HasExtension("storage_api_volume_snapshots") { + return nil, fmt.Errorf("The server is missing the required \"storage_api_volume_snapshots\" API extension") + } + + // Send the request + path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/snapshots", + url.QueryEscape(pool), + url.QueryEscape(volumeType), + url.QueryEscape(volumeName)) + op, _, err := r.queryOperation("POST", path, snapshot, "") + if err != nil { + return nil, err + } + + return op, nil +} + +// GetStoragePoolVolumeSnapshotNames returns a list of snapshot names for the +// storage volume +func (r *ProtocolLXD) GetStoragePoolVolumeSnapshotNames(pool string, volumeType string, volumeName string) ([]string, error) { + if !r.HasExtension("storage_api_volume_snapshots") { + return nil, fmt.Errorf("The server is missing the required \"storage_api_volume_snapshots\" API extension") + } + + urls := []string{} + + // Send the request + path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/snapshots", + url.QueryEscape(pool), + url.QueryEscape(volumeType), + url.QueryEscape(volumeName)) + _, err := r.queryStruct("GET", path, nil, "", &urls) + if err != nil { + return nil, err + } + + // Parse it + names := []string{} + for _, uri := range urls { + fields := strings.Split(uri, path) + names = append(names, fields[len(fields)-1]) + } + + return names, nil +} + +// GetStoragePoolVolumeSnapshots returns a list of snapshots for the storage +// volume +func (r *ProtocolLXD) GetStoragePoolVolumeSnapshots(pool string, volumeType string, volumeName string) ([]api.StorageVolumeSnapshot, error) { + if !r.HasExtension("storage_api_volume_snapshots") { + return nil, fmt.Errorf("The server is missing the required \"storage_api_volume_snapshots\" API extension") + } + + snapshots := []api.StorageVolumeSnapshot{} + + path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/snapshots?recursion=1", + url.QueryEscape(pool), + url.QueryEscape(volumeType), + url.QueryEscape(volumeName)) + _, err := r.queryStruct("GET", path, nil, "", &snapshots) + if err != nil { + return nil, err + } + + return snapshots, nil +} + +// GetStoragePoolVolumeSnapshot returns a snapshots for the storage volume +func (r *ProtocolLXD) GetStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string) (*api.StorageVolumeSnapshot, string, error) { + if !r.HasExtension("storage_api_volume_snapshots") { + return nil, "", fmt.Errorf("The server is missing the required \"storage_api_volume_snapshots\" API extension") + } + + snapshot := api.StorageVolumeSnapshot{} + + path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/snapshots/%s", + url.QueryEscape(pool), + url.QueryEscape(volumeType), + url.QueryEscape(volumeName), + url.QueryEscape(snapshotName)) + etag, err := r.queryStruct("GET", path, nil, "", &snapshot) + if err != nil { + return nil, "", err + } + + return &snapshot, etag, nil +} + +// RenameStoragePoolVolumeSnapshot renames a storage volume snapshot +func (r *ProtocolLXD) RenameStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string, snapshot api.StorageVolumeSnapshotPost) (Operation, error) { + if !r.HasExtension("storage_api_volume_snapshots") { + return nil, fmt.Errorf("The server is missing the required \"storage_api_volume_snapshots\" API extension") + } + + path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/snapshots/%s", url.QueryEscape(pool), url.QueryEscape(volumeType), url.QueryEscape(volumeName), url.QueryEscape(snapshotName)) + // Send the request + op, _, err := r.queryOperation("POST", path, snapshot, "") + if err != nil { + return nil, err + } + + return op, nil +} + +// DeleteStoragePoolVolumeSnapshot deletes a storage volume snapshot +func (r *ProtocolLXD) DeleteStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string) (Operation, error) { + if !r.HasExtension("storage_api_volume_snapshots") { + return nil, fmt.Errorf("The server is missing the required \"storage_api_volume_snapshots\" API extension") + } + + // Send the request + path := fmt.Sprintf( + "/storage-pools/%s/volumes/%s/%s/snapshots/%s", + url.QueryEscape(pool), url.QueryEscape(volumeType), url.QueryEscape(volumeName), url.QueryEscape(snapshotName)) + + op, _, err := r.queryOperation("DELETE", path, nil, "") + if err != nil { + return nil, err + } + + return op, nil +} + +// UpdateStoragePoolVolumeSnapshot updates the volume to match the provided StoragePoolVolume struct +func (r *ProtocolLXD) UpdateStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string, volume api.StorageVolumeSnapshotPut, ETag string) error { + if !r.HasExtension("storage_api_volume_snapshots") { + return fmt.Errorf("The server is missing the required \"storage_api_volume_snapshots\" API extension") + } + + // Send the request + path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/snapshots/%s", url.QueryEscape(pool), url.QueryEscape(volumeType), url.QueryEscape(volumeName), url.QueryEscape(snapshotName)) + _, _, err := r.queryOperation("PUT", path, volume, ETag) + if err != nil { + return err + } + + return nil +} + // MigrateStoragePoolVolume requests that LXD prepares for a storage volume migration func (r *ProtocolLXD) MigrateStoragePoolVolume(pool string, volume api.StorageVolumePost) (Operation, error) { if !r.HasExtension("storage_api_remote_volume_handling") { @@ -220,13 +361,18 @@ return nil, fmt.Errorf("The server is missing the required \"storage_api_local_volume_handling\" API extension") } + if args != nil && args.VolumeOnly && !r.HasExtension("storage_api_volume_snapshots") { + return nil, fmt.Errorf("The target server is missing the required \"storage_api_volume_snapshots\" API extension") + } + req := api.StorageVolumesPost{ Name: args.Name, Type: volume.Type, Source: api.StorageVolumeSource{ - Name: volume.Name, - Type: "copy", - Pool: sourcePool, + Name: volume.Name, + Type: "copy", + Pool: sourcePool, + VolumeOnly: args.VolumeOnly, }, } @@ -411,6 +557,10 @@ return fmt.Errorf("The server is missing the required \"storage\" API extension") } + if volume.Restore != "" && !r.HasExtension("storage_api_volume_snapshots") { + return fmt.Errorf("The server is missing the required \"storage_api_volume_snapshots\" API extension") + } + // Send the request path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s", url.QueryEscape(pool), url.QueryEscape(volType), url.QueryEscape(name)) _, _, err := r.query("PUT", path, volume, ETag) diff -Nru lxd-3.0.2/client/operations.go lxd-3.0.3/client/operations.go --- lxd-3.0.2/client/operations.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/operations.go 2018-11-22 20:52:32.000000000 +0000 @@ -83,11 +83,6 @@ // Refresh pulls the current version of the operation and updates the struct func (op *operation) Refresh() error { - // Don't bother with a manual update if we are listening for events - if op.handlerReady { - return nil - } - // Get the current version of the operation newOp, _, err := op.r.GetOperation(op.ID) if err != nil { @@ -136,6 +131,7 @@ if op.handlerReady { return nil } + op.handlerReady = true // Get a new listener if op.listener == nil { @@ -152,12 +148,6 @@ _, err := op.listener.AddHandler([]string{"operation"}, func(data interface{}) { <-chReady - // Get an operation struct out of this data - newOp := op.extractOperation(data) - if newOp == nil { - return - } - // We don't want concurrency while processing events op.handlerLock.Lock() defer op.handlerLock.Unlock() @@ -167,6 +157,12 @@ return } + // Get an operation struct out of this data + newOp := op.extractOperation(data) + if newOp == nil { + return + } + // Update the struct op.Operation = *newOp @@ -232,8 +228,6 @@ op.listener.Disconnect() op.listener = nil close(op.chActive) - - op.handlerReady = true close(chReady) if op.Err != "" { @@ -244,7 +238,6 @@ } // Start processing background updates - op.handlerReady = true close(chReady) return nil diff -Nru lxd-3.0.2/client/simplestreams_images.go lxd-3.0.3/client/simplestreams_images.go --- lxd-3.0.2/client/simplestreams_images.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/simplestreams_images.go 2018-11-22 20:52:32.000000000 +0000 @@ -84,6 +84,11 @@ size, err := shared.DownloadFileSha256(r.http, r.httpUserAgent, req.ProgressHandler, req.Canceler, filename, url, sha256, target) if err != nil { + // Handle cancelation + if err.Error() == "net/http: request canceled" { + return -1, err + } + // Try over https url = fmt.Sprintf("%s/%s", r.httpHost, path) size, err = shared.DownloadFileSha256(r.http, r.httpUserAgent, req.ProgressHandler, req.Canceler, filename, url, sha256, target) diff -Nru lxd-3.0.2/client/util.go lxd-3.0.3/client/util.go --- lxd-3.0.2/client/util.go 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/client/util.go 2018-11-22 20:52:32.000000000 +0000 @@ -1,11 +1,13 @@ package lxd import ( + "crypto/tls" "fmt" "io" "net" "net/http" "net/url" + "os" "strings" "github.com/lxc/lxd/shared" @@ -18,6 +20,11 @@ return nil, err } + // Support disabling of strict ciphers + if shared.IsTrue(os.Getenv("LXD_INSECURE_TLS")) { + tlsConfig.CipherSuites = nil + } + // Define the http transport transport := &http.Transport{ TLSClientConfig: tlsConfig, @@ -31,6 +38,54 @@ transport.Proxy = proxy } + // Special TLS handling + transport.DialTLS = func(network string, addr string) (net.Conn, error) { + tlsDial := func(network string, addr string, config *tls.Config, resetName bool) (net.Conn, error) { + // TCP connection + conn, err := transport.Dial(network, addr) + if err != nil { + return nil, err + } + + // Setup TLS + if resetName { + hostName, _, err := net.SplitHostPort(addr) + if err != nil { + hostName = addr + } + + config = config.Clone() + config.ServerName = hostName + } + tlsConn := tls.Client(conn, config) + + // Validate the connection + err = tlsConn.Handshake() + if err != nil { + conn.Close() + return nil, err + } + + if !config.InsecureSkipVerify { + err := tlsConn.VerifyHostname(config.ServerName) + if err != nil { + conn.Close() + return nil, err + } + } + + return tlsConn, nil + } + + conn, err := tlsDial(network, addr, transport.TLSClientConfig, false) + if err != nil { + // We may have gotten redirected to a non-LXD machine + return tlsDial(network, addr, transport.TLSClientConfig, true) + } + + return conn, nil + } + // Define the http client if client == nil { client = &http.Client{} @@ -110,9 +165,24 @@ } // Check if successful - if err == nil { - return nil + if err != nil { + return fmt.Errorf("%s: %s", msg, err) } - return fmt.Errorf("%s: %s", msg, err) + return nil +} + +// Set the value of a query parameter in the given URI. +func setQueryParam(uri, param, value string) (string, error) { + fields, err := url.Parse(uri) + if err != nil { + return "", err + } + + values := fields.Query() + values.Set(param, url.QueryEscape(value)) + + fields.RawQuery = values.Encode() + + return fields.String(), nil } diff -Nru lxd-3.0.2/contributing.md lxd-3.0.3/contributing.md --- lxd-3.0.2/contributing.md 2018-08-16 19:07:15.000000000 +0000 +++ lxd-3.0.3/contributing.md 2018-11-22 20:52:32.000000000 +0000 @@ -1,4 +1,5 @@ -# Pull requests: +# Contributing +## Pull requests: Changes to this project should be proposed as pull requests on Github at: @@ -7,7 +8,7 @@ be merged in the main branch. -# License and copyright: +## License and copyright: By default, any contribution to this project is made under the Apache 2.0 license. @@ -16,7 +17,7 @@ (no copyright assignment). -# Developer Certificate of Origin: +## Developer Certificate of Origin: To improve tracking of contributions to this project we use the DCO 1.1 and use a "sign-off" procedure for all changes going into the branch. diff -Nru lxd-3.0.2/debian/changelog lxd-3.0.3/debian/changelog --- lxd-3.0.2/debian/changelog 2018-09-10 19:19:06.000000000 +0000 +++ lxd-3.0.3/debian/changelog 2018-11-23 18:58:51.000000000 +0000 @@ -1,3 +1,200 @@ +lxd (3.0.3-0ubuntu1~18.04.1) bionic; urgency=medium + + * New upstream bugfix release (LP: #1804876) + - doc: add note about ignoring mount options + - shared/idmap: test fcaps support + - Add a few missing rows.Close() calls + - lxd/patches: Profiles are in the cluster db + - lxd/storage/ceph: Only freeze container if running + - lxc: Only target if --target is passed + - shared: Return decompressor in DetectCompression + - lxd/containers: Don't return nil on Storage calls + - tests: Fix mode of proxy.sh + - shared/api: Don't re-define fields + - lxd/storage/btrfs: Fix clearing quotas + - lxd/containers: Also use apply_quota for CEPH + - lxd/containers: Simplify and fix pool update logic + - Add NodeIsOutdated() db API to check is a node is outdated + - Trigger whatever is in the LXD_CLUSTER_UPDATE var is node is outdated + - lxd/images: Add missing cleanup code + - lxd/containers: Fix bad function name + - tests: Avoid err == nil pattern + - lxd: Don't mask database errors + - Honor the CC environment variable when invoking go install + - client: Avoid err == nil pattern + - lxd/profiles: Don't list snapshots in UsedBy + - Make database queries timeout after 10s if cluster db is unavail + - tests: Fix pki with newer easyrsa + - lxd/db: Fix internal DB test + - doc: Fix and improve the description + - operations: return true if operation is done before timeout + - lxd/containers: Avoid root device name conflict + - lxd/import: Add root disk if needed + - global: Advertise rsync features + - lxd/db: Use NoSuchObject consistently + - proxy: Only log errors + - lxd/import: Don't delete container on import failure + - i18n: Update translation templates + - Support --domain flag for lxc remote + - Add configurable macaroon expiry + - Support Candid domain validation + - Update Candid docs + - Update i18n + - lxd: Rename API endpoints + - network_linux: add netns_getifaddrs() + - main_checkfeature: check kernel for netnsid support + - network: add NetworkGetCounters() + - container_lxc: switch to NetnsGetifaddrs() + - shared: Add network state API + - api: Add extended cluster join API + - lxd/init: Fix struct conflict + - lxc: Identify snapshots when listed + - shared/version: Support detecting ChromeOS versions + - lxd/containers: Force bring up of SRIOV parent + - netns_getifaddrs: fix argument passing + - netnsid_getifaddrs: fix check for netnsid support + - doc: Fix storage API endpoints + - container_lxc: handle network retrieval smarter + - shared: Add storage volume snapshot support + - client: Add storage volume snapshot support + - netns_getifaddrs: don't print useless info + - shared/api: Fix StorageVolumeSource struct + - Makefile: Set LDFLAGS for dqlite + - lxd: Fix handling of CGroup-V2 systems + - tree-wide: pass -std=gnu11 -Wvla + - lxd/containers: Rework exec FD handling + - Added optional ?target= to /containers POST documentation + - lxd/storage/lvm: Don't un-necessarily start/stop storage + - lxd/storage/ceph: Don't un-necessarily mount snapshots + - lxd/containers: Fix cleanup on create failure + - shared/network: Don't crash on VPN devices + - lxd/containers: Fix bad nvidia information parsing + - netns_getifaddrs: fix network stats retrieval + - network: Fix counters on non-ethernet interfaces + - doc: Add configuration for readthedocs + - storage: Fix error strings + - lxd/storage/btrfs: Don't fail deleting pools on misisng disk + - Split code in 2 seperate files + - network: provide #ifdefs for RTM_* requests + - Document LVM support for storage quotas + - candid: Cleanup code a bit + - network: fix netns_get_nsid() signature + - apparmor: Allow cgroupv2 in cgns + - candid: Fix client when using https candid server + - lxd-p2c: Fix static build + - config: Add support for PEM encrypted keys + - lxc: Setup password helper + - lxc/config: Only setup needed connection args + - lxc/config: More TLS optimizations + - i18n: Update translation templates + - macro: add SOL_NETLINK + - macro: add NETLINK_DUMP_STRICT_CHK + - netns_ifaddrs: check for NETLINK_DUMP_STRICT_CHK + - Fix Potential Event Race + - devices: Fix bad disk limits + - Fix root disk limits on container startup + - checkfeature: Rework structure + - checkfeature: simplify is_netnsid_aware() check + - checkfeature: Avoid double line break + - checkfeature: dial logging down from to debug + - lxc/progress: Add terminal detection + - doc: Rework backup documentation + - client: Add GetNetworkState + - client: Add extended cluster join API + - client: Add UseProject + - shared/api: Add projects + - client: Add support for projects + - lxc/config: Add support for projects + - Change query.SelectObjects signature to support a prepared statement + - Add query.SelectURIs convenience for getting API resource URIs + - Add cluster statements registry + - api: Add Project.Config reference + - Improve some error messages around container creation + - Lookup for the "target" API parameter only in the URL query string + - Automatically add ?project=x query param to image server + - Improve error reporting when creating a container + - Change ContainerStorageRead() to take a container object + - Improve error messages around LVM volume creation + - Change Storage.ContainerUmount to accept a container vs a container name + - lxd/init: Update for current client package + - lxc/progress: Don't print empty lines + - candid: Improve domain validation and pubkey + - lxd/images: Fix parsing of public property + - client: Always use the "do()" wrapper + - client: Fix URLs with missing project/target + - Improve error messages + - lxd/containers: Fix cluster shutdown + - i18n: Update Japanese translation + - idmap: use global variable for vfs3 fcaps support + - checkfeature: check for vfs3 fscaps support + - lxd/db: Fix bad limits.cpu + - shared: Add limits.cpu validator + - doc: add the appropriate titles to some documents + - shared/network: Allow TLS1.3 + - global: Implement LXD_INSECURE_TLS env variable + - netns_getifaddrs: simplify + - Fix bad check for recursive mounts + - Prevent event listeners from lying around even after Disconnect() + - client: Support creating project-bound container using remote image + - client: Filter lifecycle and operations events by project + - client: Make container backups code honor projects + - client: Make GET /profiles return only profiles for the project + - Bump Go versions and use '.x' to always get latest patch versions + - Update build instruction + - doc: Bump to 1.10 or higher everywhere + - Don't expire lxd.log by accident + - lxd/storage: Fix importing preseed dump + - lxd/migration: Use current idmap instead of next + - lxd/db: Send raft/dqlite logging to debug + - lxd/daemon: Clarify early loggging + - checkfeature: Don't log error on missing feature + - lxd/daemon: Improve logging of inherited fds + - shared/logging: Improve logfile output + - lxd/daemon: Don't mention MAAS unless configured + - exec: Expose command, env and mode in metadata + - client: Fix cancelation of image download + - Detect and shrink large boltdb files + - lxd/daemon: Fix build + - loop: retry on EBUSY + - lxd/storage: Improve loop device errors + - lxd/containers: Detect root disk pool changes + - doc: Update cloud-init network documentation + - client: Fix error handling in operations + - lxd/containers: Prevent duplicate profiles + - lxc/copy: --container-only is meaningless for snapshots + - shared/api: Add support for incremental container copy + - client: Add support for incremental container copy + - doc: Add kernel.keys.maxkeys to production-setup + - lxd/storage/dir: Don't fail when quota are set + - lxd: Handle AppArmor policy cache directory + - test: Support AppArmor policy cache directory + - lxd/containers: Respect optional=true for disks + - use empty usb vendorid to pass through all usb devices + - doc: Add usb_optional_vendorid API extension + - lxc/image: Fix rootfs file handling on snap + - lxd/containers: Properly clear static leases + - shared/api: Support copy between projects + - client: Support copy between projects + - lxc/config: Allow overriding the current project + - rsync: Tweak transfer options (delete & compress) + - lxd/daemon: Improve logging of kernel features + - lxd: Register background tasks as operations + - lxc: Switch all progress op handling to cancelable + - Increase go-dqlite client timeout when not-clustered + - lxd: Rework task handling + - lxd/migration: Fix CRIU rsync option negotiation + - lxd/storage/btrfs: Tweak errors + - lxd/init: Better handle disk sizes + - lxd/db: Avoid un-needed query on container move + - i18n: Update translation templates + - Add StorageVolumeIsAvailable to check if a Ceph volume can be attached + - Wire StorageVolumeIsAvailable to containerValidDevices + - Add integration test + + * Bump standards to 4.2.1 + + -- Stéphane Graber Fri, 23 Nov 2018 13:58:51 -0500 + lxd (3.0.2-0ubuntu1~18.04.1) bionic; urgency=medium * New upstream bugfix release (LP: #1788280): diff -Nru lxd-3.0.2/debian/control lxd-3.0.3/debian/control --- lxd-3.0.2/debian/control 2018-09-10 19:17:35.000000000 +0000 +++ lxd-3.0.3/debian/control 2018-11-23 18:58:51.000000000 +0000 @@ -2,7 +2,7 @@ Section: admin Priority: optional Maintainer: Ubuntu Developers -Standards-Version: 4.2.0 +Standards-Version: 4.2.1 Homepage: https://linuxcontainers.org/ Vcs-Git: https://github.com/lxc/lxd-pkg-ubuntu Vcs-Browser: https://github.com/lxc/lxd-pkg-ubuntu diff -Nru lxd-3.0.2/debian/.git-dpm lxd-3.0.3/debian/.git-dpm --- lxd-3.0.2/debian/.git-dpm 2018-09-10 19:17:36.000000000 +0000 +++ lxd-3.0.3/debian/.git-dpm 2018-11-23 18:55:47.000000000 +0000 @@ -1,8 +1,8 @@ # see git-dpm(1) from git-dpm package -81b0a2f5bd92de97866326335aab0e4c8887c1c9 -81b0a2f5bd92de97866326335aab0e4c8887c1c9 -0c9cee7ff16aeb39bb2c5b3db6a1011d1344c6e4 -0c9cee7ff16aeb39bb2c5b3db6a1011d1344c6e4 -lxd_3.0.2.orig.tar.gz -1e1130f47083ad179676fd9256c579b320b88a97 -21543159 +b0e7d2d6d2172c1f517114d95056fb4cc63772e6 +b0e7d2d6d2172c1f517114d95056fb4cc63772e6 +b0e7d2d6d2172c1f517114d95056fb4cc63772e6 +b0e7d2d6d2172c1f517114d95056fb4cc63772e6 +lxd_3.0.3.orig.tar.gz +31ddb6bf8918fc8ebdf362d11142430756902ff0 +22309140 diff -Nru lxd-3.0.2/debian/patches/0001-shared-idmap-test-fcaps-support.patch lxd-3.0.3/debian/patches/0001-shared-idmap-test-fcaps-support.patch --- lxd-3.0.2/debian/patches/0001-shared-idmap-test-fcaps-support.patch 2018-09-10 19:17:36.000000000 +0000 +++ lxd-3.0.3/debian/patches/0001-shared-idmap-test-fcaps-support.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,125 +0,0 @@ -From ea2c0d8a161e880ffb59dcb18932e97c34286965 Mon Sep 17 00:00:00 2001 -From: Christian Brauner -Date: Fri, 17 Aug 2018 17:03:23 +0200 -Subject: shared/idmap: test fcaps support -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Christian Brauner -Signed-off-by: Stéphane Graber ---- - shared/idmap/idmapset_linux.go | 17 +++++++++-- - shared/idmap/shift_linux.go | 53 ++++++++++++++++++++++++++++++++++ - 2 files changed, 67 insertions(+), 3 deletions(-) - -diff --git a/shared/idmap/idmapset_linux.go b/shared/idmap/idmapset_linux.go -index ea3779384..d6e7bdf49 100644 ---- a/shared/idmap/idmapset_linux.go -+++ b/shared/idmap/idmapset_linux.go -@@ -469,6 +469,14 @@ func (m IdmapSet) ShiftFromNs(uid int64, gid int64) (int64, int64) { - } - - func (set *IdmapSet) doUidshiftIntoContainer(dir string, testmode bool, how string, skipper func(dir string, absPath string, fi os.FileInfo) bool) error { -+ v3Caps := true -+ if how == "in" { -+ if !supportsV3Fcaps(dir) { -+ logger.Debugf("System doesn't support unprivileged file capabilities") -+ v3Caps = false -+ } -+ } -+ - // Expand any symlink before the final path component - tmp := filepath.Dir(dir) - tmp, err := filepath.EvalSymlinks(tmp) -@@ -546,9 +554,12 @@ func (set *IdmapSet) doUidshiftIntoContainer(dir string, testmode bool, how stri - if how == "in" { - rootUid, _ = set.ShiftIntoNs(0, 0) - } -- err = SetCaps(path, caps, rootUid) -- if err != nil { -- logger.Warnf("Unable to set file capabilities on %s", path) -+ -+ if how != "in" || v3Caps { -+ err = SetCaps(path, caps, rootUid) -+ if err != nil { -+ logger.Warnf("Unable to set file capabilities on %s", path) -+ } - } - } - } -diff --git a/shared/idmap/shift_linux.go b/shared/idmap/shift_linux.go -index 920789a4c..9045fe395 100644 ---- a/shared/idmap/shift_linux.go -+++ b/shared/idmap/shift_linux.go -@@ -5,6 +5,10 @@ package idmap - - import ( - "fmt" -+ "io/ioutil" -+ "os" -+ "os/exec" -+ "syscall" - "unsafe" - - "github.com/lxc/lxd/shared" -@@ -70,6 +74,20 @@ int set_vfs_ns_caps(char *path, char *caps, ssize_t len, uint32_t uid) - return setxattr(path, "security.capability", &ns_xattr, sizeof(ns_xattr), 0); - } - -+int set_dummy_fs_ns_caps(const char *path) -+{ -+ #define __raise_cap_permitted(x, ns_cap_data) ns_cap_data.data[(x)>>5].permitted |= (1<<((x)&31)) -+ -+ struct vfs_ns_cap_data ns_xattr; -+ -+ memset(&ns_xattr, 0, sizeof(ns_xattr)); -+ __raise_cap_permitted(CAP_NET_RAW, ns_xattr); -+ ns_xattr.magic_etc |= VFS_CAP_REVISION_3 | VFS_CAP_FLAGS_EFFECTIVE; -+ ns_xattr.rootid = BE32_TO_LE32(1000000); -+ -+ return setxattr(path, "security.capability", &ns_xattr, sizeof(ns_xattr), 0); -+} -+ - int shiftowner(char *basepath, char *path, int uid, int gid) - { - int fd, ret; -@@ -279,3 +297,38 @@ func shiftAclType(path string, aclType _Ctype_acl_type_t, shiftIds func(uid int6 - - return nil - } -+ -+func supportsV3Fcaps(prefix string) bool { -+ tmpfile, err := ioutil.TempFile(prefix, ".lxd_fcaps_v3_") -+ if err != nil { -+ return false -+ } -+ tmpfile.Close() -+ defer os.Remove(tmpfile.Name()) -+ -+ err = os.Chmod(tmpfile.Name(), 0001) -+ if err != nil { -+ return false -+ } -+ -+ cpath := C.CString(tmpfile.Name()) -+ defer C.free(unsafe.Pointer(cpath)) -+ -+ r := C.set_dummy_fs_ns_caps(cpath) -+ if r != 0 { -+ return false -+ } -+ -+ cmd := exec.Command(tmpfile.Name()) -+ err = cmd.Run() -+ if err != nil { -+ errno, isErrno := shared.GetErrno(err) -+ if isErrno && (errno == syscall.ERANGE || errno == syscall.EOVERFLOW) { -+ return false -+ } -+ -+ return true -+ } -+ -+ return true -+} diff -Nru lxd-3.0.2/debian/patches/0002-Add-a-few-missing-rows.Close-calls.patch lxd-3.0.3/debian/patches/0002-Add-a-few-missing-rows.Close-calls.patch --- lxd-3.0.2/debian/patches/0002-Add-a-few-missing-rows.Close-calls.patch 2018-09-10 19:17:36.000000000 +0000 +++ lxd-3.0.3/debian/patches/0002-Add-a-few-missing-rows.Close-calls.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -From dc28fc62c233c00ca010381aa644c9e51fa0b311 Mon Sep 17 00:00:00 2001 -From: Free Ekanayaka -Date: Mon, 20 Aug 2018 11:58:14 +0200 -Subject: Add a few missing rows.Close() calls - -Signed-off-by: Free Ekanayaka ---- - lxd/api_internal.go | 2 ++ - lxd/db/migration.go | 6 ++++++ - lxd/db/node/update.go | 2 +- - lxd/db/query/dump.go | 1 + - lxd/db/schema/query.go | 3 +++ - 5 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/lxd/api_internal.go b/lxd/api_internal.go -index dcfc667fb..84b67dfea 100644 ---- a/lxd/api_internal.go -+++ b/lxd/api_internal.go -@@ -255,12 +255,14 @@ func internalSQLPost(d *Daemon, r *http.Request) Response { - - func internalSQLSelect(tx *sql.Tx, query string, result *internalSQLResult) error { - result.Type = "select" -+ - rows, err := tx.Query(query) - if err != nil { - return errors.Wrap(err, "Failed to execute query") - } - - defer rows.Close() -+ - result.Columns, err = rows.Columns() - if err != nil { - return errors.Wrap(err, "Failed to fetch colume names") -diff --git a/lxd/db/migration.go b/lxd/db/migration.go -index ee769f53c..f889c661f 100644 ---- a/lxd/db/migration.go -+++ b/lxd/db/migration.go -@@ -51,12 +51,15 @@ DELETE FROM storage_volumes_config WHERE storage_volume_id NOT IN (SELECT id FRO - logger.Debugf("Loading data from table %s", table) - data := [][]interface{}{} - stmt := fmt.Sprintf("SELECT * FROM %s", table) -+ - rows, err := tx.Query(stmt) - if err != nil { - return nil, errors.Wrapf(err, "failed to fetch rows from %s", table) - } -+ - columns, err := rows.Columns() - if err != nil { -+ rows.Close() - return nil, errors.Wrapf(err, "failed to get columns of %s", table) - } - dump.Schema[table] = columns -@@ -69,14 +72,17 @@ DELETE FROM storage_volumes_config WHERE storage_volume_id NOT IN (SELECT id FRO - } - err := rows.Scan(row...) - if err != nil { -+ rows.Close() - return nil, errors.Wrapf(err, "failed to scan row from %s", table) - } - data = append(data, values) - } - err = rows.Err() - if err != nil { -+ rows.Close() - return nil, errors.Wrapf(err, "error while fetching rows from %s", table) - } -+ rows.Close() - - dump.Data[table] = data - } -diff --git a/lxd/db/node/update.go b/lxd/db/node/update.go -index 4ffdf936d..65ba00f88 100644 ---- a/lxd/db/node/update.go -+++ b/lxd/db/node/update.go -@@ -725,11 +725,11 @@ PRAGMA foreign_keys=ON; -- Make sure we turn integrity checks back on.` - if err != nil { - return err - } -+ defer rows.Close() - - var tablestodelete []string - var rowidtodelete []int - -- defer rows.Close() - for rows.Next() { - var tablename string - var rowid int -diff --git a/lxd/db/query/dump.go b/lxd/db/query/dump.go -index 3aa12933c..0a0cb3625 100644 ---- a/lxd/db/query/dump.go -+++ b/lxd/db/query/dump.go -@@ -86,6 +86,7 @@ func dumpTable(tx *sql.Tx, table, schema string) (string, error) { - if err != nil { - return "", errors.Wrap(err, "failed to fetch rows") - } -+ defer rows.Close() - - // Figure column names - columns, err := rows.Columns() -diff --git a/lxd/db/schema/query.go b/lxd/db/schema/query.go -index 3c4b84dbc..9919c78f6 100644 ---- a/lxd/db/schema/query.go -+++ b/lxd/db/schema/query.go -@@ -22,15 +22,18 @@ SELECT COUNT(name) FROM sqlite_master WHERE type = 'table' AND name = 'schema' - return false, err - } - defer rows.Close() -+ - if !rows.Next() { - return false, fmt.Errorf("schema table query returned no rows") - } - - var count int -+ - err = rows.Scan(&count) - if err != nil { - return false, err - } -+ - return count == 1, nil - } - diff -Nru lxd-3.0.2/debian/patches/0003-lxd-patches-Profiles-are-in-the-cluster-db.patch lxd-3.0.3/debian/patches/0003-lxd-patches-Profiles-are-in-the-cluster-db.patch --- lxd-3.0.2/debian/patches/0003-lxd-patches-Profiles-are-in-the-cluster-db.patch 2018-09-10 19:17:36.000000000 +0000 +++ lxd-3.0.3/debian/patches/0003-lxd-patches-Profiles-are-in-the-cluster-db.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -From cec9d8fd59af1b6df31fa3bf29f50610ca441349 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?St=C3=A9phane=20Graber?= -Date: Tue, 21 Aug 2018 12:20:10 -0400 -Subject: lxd/patches: Profiles are in the cluster db -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Stéphane Graber ---- - lxd/patches.go | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lxd/patches.go b/lxd/patches.go -index 2ab1b5b38..874fe2e56 100644 ---- a/lxd/patches.go -+++ b/lxd/patches.go -@@ -1766,7 +1766,7 @@ func updatePoolPropertyForAllObjects(d *Daemon, poolName string, allcontainers [ - // This is nasty, but we need to clear the profiles config and - // devices in order to add the new root device including the - // newly added storage pool. -- tx, err := d.db.Begin() -+ tx, err := d.cluster.Begin() - if err != nil { - return err - } diff -Nru lxd-3.0.2/debian/patches/0004-lxd-storage-ceph-Only-freeze-container-if-running.patch lxd-3.0.3/debian/patches/0004-lxd-storage-ceph-Only-freeze-container-if-running.patch --- lxd-3.0.2/debian/patches/0004-lxd-storage-ceph-Only-freeze-container-if-running.patch 2018-09-10 19:17:36.000000000 +0000 +++ lxd-3.0.3/debian/patches/0004-lxd-storage-ceph-Only-freeze-container-if-running.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -From 81b0a2f5bd92de97866326335aab0e4c8887c1c9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?St=C3=A9phane=20Graber?= -Date: Tue, 21 Aug 2018 13:17:51 -0400 -Subject: lxd/storage/ceph: Only freeze container if running -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Stéphane Graber ---- - lxd/storage_ceph.go | 21 ++++++++++++--------- - 1 file changed, 12 insertions(+), 9 deletions(-) - -diff --git a/lxd/storage_ceph.go b/lxd/storage_ceph.go -index 90f197b5d..a2e8a2d4f 100644 ---- a/lxd/storage_ceph.go -+++ b/lxd/storage_ceph.go -@@ -1504,16 +1504,19 @@ func (s *storageCeph) ContainerGetUsage(container container) (int64, error) { - } - - func (s *storageCeph) ContainerSnapshotCreate(snapshotContainer container, sourceContainer container) error { -- // This is costly but we need to ensure that all cached data has -- // been committed to disk. If we don't then the rbd snapshot of -- // the underlying filesystem can be inconsistent or - worst case -- // - empty. -- syscall.Sync() - containerMntPoint := getContainerMountPoint(s.pool.Name, sourceContainer.Name()) -- msg, fsFreezeErr := shared.TryRunCommand("fsfreeze", "--freeze", containerMntPoint) -- logger.Debugf("Trying to freeze the filesystem: %s: %s", msg, fsFreezeErr) -- if fsFreezeErr == nil { -- defer shared.TryRunCommand("fsfreeze", "--unfreeze", containerMntPoint) -+ if shared.IsMountPoint(containerMntPoint) { -+ // This is costly but we need to ensure that all cached data has -+ // been committed to disk. If we don't then the rbd snapshot of -+ // the underlying filesystem can be inconsistent or - worst case -+ // - empty. -+ syscall.Sync() -+ -+ msg, fsFreezeErr := shared.TryRunCommand("fsfreeze", "--freeze", containerMntPoint) -+ logger.Debugf("Trying to freeze the filesystem: %s: %s", msg, fsFreezeErr) -+ if fsFreezeErr == nil { -+ defer shared.TryRunCommand("fsfreeze", "--unfreeze", containerMntPoint) -+ } - } - - return s.doContainerSnapshotCreate(snapshotContainer.Name(), sourceContainer.Name()) diff -Nru lxd-3.0.2/debian/patches/series lxd-3.0.3/debian/patches/series --- lxd-3.0.2/debian/patches/series 2018-09-10 19:17:36.000000000 +0000 +++ lxd-3.0.3/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -0001-shared-idmap-test-fcaps-support.patch -0002-Add-a-few-missing-rows.Close-calls.patch -0003-lxd-patches-Profiles-are-in-the-cluster-db.patch -0004-lxd-storage-ceph-Only-freeze-container-if-running.patch diff -Nru lxd-3.0.2/dist/dqlite/src/conn.c lxd-3.0.3/dist/dqlite/src/conn.c --- lxd-3.0.2/dist/dqlite/src/conn.c 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/src/conn.c 2018-11-22 20:54:12.000000000 +0000 @@ -609,7 +609,7 @@ dqlite__transitions); dqlite__request_init(&c->request); - dqlite__gateway_init(&c->gateway, &callbacks, cluster, options); + dqlite__gateway_init(&c->gateway, &callbacks, cluster, logger, options); dqlite__response_init(&c->response); c->fd = fd; diff -Nru lxd-3.0.2/dist/dqlite/src/file.c lxd-3.0.3/dist/dqlite/src/file.c --- lxd-3.0.2/dist/dqlite/src/file.c 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/src/file.c 2018-11-22 20:54:12.000000000 +0000 @@ -53,7 +53,7 @@ } /* Open the file */ - file = sqlite3_malloc(sizeof(*file)); + file = sqlite3_malloc(vfs->szOsFile); if (file == NULL) { rc = SQLITE_NOMEM; goto err; @@ -188,7 +188,7 @@ } /* Open the file */ - file = (sqlite3_file *)sqlite3_malloc(sizeof(*file)); + file = (sqlite3_file *)sqlite3_malloc(vfs->szOsFile); if (file == NULL) { rc = SQLITE_NOMEM; goto err; diff -Nru lxd-3.0.2/dist/dqlite/src/format.h lxd-3.0.3/dist/dqlite/src/format.h --- lxd-3.0.2/dist/dqlite/src/format.h 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/src/format.h 2018-11-22 20:54:12.000000000 +0000 @@ -33,6 +33,10 @@ /* Number of reader marks in the wal index header. */ #define DQLITE__FORMAT_WAL_NREADER 5 +/* Lock index given the offset I in the aReadMark array. See the equivalent + * WAL_READ_LOCK definition in the wal.c file of the SQLite source code. */ +#define DQLITE__FORMAT_WAL_READ_LOCK(I) (3+(I)) + /* Given the page size, calculate the size of a full WAL frame (frame header * plus page data). */ #define dqlite__format_wal_calc_frame_size(PAGE_SIZE) \ diff -Nru lxd-3.0.2/dist/dqlite/src/gateway.c lxd-3.0.3/dist/dqlite/src/gateway.c --- lxd-3.0.2/dist/dqlite/src/gateway.c 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/src/gateway.c 2018-11-22 20:54:12.000000000 +0000 @@ -65,24 +65,20 @@ /* Check each mark and associated lock. This logic is similar to the one * in the walCheckpoint function of wal.c, in the SQLite code. */ - for (i = 1; i < DQLITE__FORMAT_WAL_NREADER; i++) { - if (mx_frame > read_marks[i]) { - /* This read mark is set, let's check if it's also - * locked. */ - int flags = SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE; - - rc = file->pMethods->xShmLock(file, i, 1, flags); - if (rc == SQLITE_BUSY) { - /* It's locked. Let's postpone the checkpoint - * for now. */ - return SQLITE_OK; - } + for (i = 0; i < SQLITE_SHM_NLOCK; i++) { + int flags = SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE; - /* Not locked. Let's release the lock we just - * acquired. */ - flags = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE; - file->pMethods->xShmLock(file, i, 1, flags); + rc = file->pMethods->xShmLock(file, i, 1, flags); + if (rc == SQLITE_BUSY) { + /* It's locked. Let's postpone the checkpoint + * for now. */ + return SQLITE_OK; } + + /* Not locked. Let's release the lock we just + * acquired. */ + flags = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE; + file->pMethods->xShmLock(file, i, 1, flags); } /* Attempt to perfom a checkpoint across all nodes. @@ -318,6 +314,7 @@ } else { dqlite__error_printf(&g->error, stmt->error); dqlite__gateway_failure(g, ctx, rc); + sqlite3_reset(stmt->stmt); } } @@ -335,6 +332,8 @@ rc = dqlite__stmt_query(stmt, &ctx->response.message); if (rc != SQLITE_ROW && rc != SQLITE_DONE) { + sqlite3_reset(stmt->stmt); + /* Finalize the statement if needed. */ if (ctx->cleanup == DQLITE__GATEWAY_CLEANUP_FINALIZE) { dqlite__db_finalize(db, stmt); @@ -600,12 +599,14 @@ void dqlite__gateway_init(struct dqlite__gateway * g, struct dqlite__gateway_cbs *callbacks, struct dqlite_cluster * cluster, + struct dqlite_logger * logger, struct dqlite__options * options) { int i; assert(g != NULL); assert(cluster != NULL); + assert(logger != NULL); assert(options != NULL); assert(callbacks != NULL); assert(callbacks->xFlush != NULL); @@ -620,6 +621,7 @@ memcpy(&g->callbacks, callbacks, sizeof *callbacks); g->cluster = cluster; + g->logger = logger; g->options = options; /* Reset all request contexts in the buffer */ diff -Nru lxd-3.0.2/dist/dqlite/src/gateway.h lxd-3.0.3/dist/dqlite/src/gateway.h --- lxd-3.0.2/dist/dqlite/src/gateway.h 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/src/gateway.h 2018-11-22 20:54:12.000000000 +0000 @@ -73,6 +73,7 @@ struct dqlite__gateway_cbs callbacks; /* User callbacks */ dqlite_cluster * cluster; /* Cluster API implementation */ struct dqlite__options * options; /* Configuration options */ + struct dqlite_logger * logger; /* Logger to use */ /* Buffer holding responses for in-progress requests. Clients are * expected to issue one SQL request at a time and wait for the @@ -95,6 +96,7 @@ void dqlite__gateway_init(struct dqlite__gateway * g, struct dqlite__gateway_cbs *callbacks, struct dqlite_cluster * cluster, + struct dqlite_logger * logger, struct dqlite__options * options); void dqlite__gateway_close(struct dqlite__gateway *g); diff -Nru lxd-3.0.2/dist/dqlite/src/stmt.c lxd-3.0.3/dist/dqlite/src/stmt.c --- lxd-3.0.2/dist/dqlite/src/stmt.c 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/src/stmt.c 2018-11-22 20:54:12.000000000 +0000 @@ -57,6 +57,7 @@ uint64_t null; text_t text; int err; + uint64_t flag; assert(s != NULL); @@ -111,6 +112,13 @@ } break; + case DQLITE_BOOLEAN: + err = dqlite__message_body_get_uint64(message, &flag); + if (err == 0 || err == DQLITE_EOM) { + *rc = sqlite3_bind_int64(s->stmt, i, flag == 0 ? 0 : 1); + } + break; + default: dqlite__error_printf(&s->error, "unknown type %d", type); return DQLITE_PROTO; diff -Nru lxd-3.0.2/dist/dqlite/src/vfs.c lxd-3.0.3/dist/dqlite/src/vfs.c --- lxd-3.0.2/dist/dqlite/src/vfs.c 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/src/vfs.c 2018-11-22 20:54:12.000000000 +0000 @@ -415,10 +415,11 @@ /* Implementation of the abstract sqlite3_file base class. */ struct dqlite__vfs_file { - sqlite3_file base; /* Base class. Must be first. */ - struct dqlite__vfs_root - *root; /* Pointer to our volatile VFS instance data. */ + sqlite3_file base; /* Base class. Must be first. */ + struct dqlite__vfs_root * root; /* Pointer to volatile VFS data. */ struct dqlite__vfs_content *content; /* Handle to the file content. */ + int flags; /* Flags passed to xOpen */ + sqlite3_file * temp; /* For temp-files, actual VFS. */ }; /* Root of the volatile file system. Contains pointers to the content @@ -611,11 +612,61 @@ return SQLITE_OK; } +static int dqlite__vfs_delete_content(struct dqlite__vfs_root *root, + const char * filename) +{ + struct dqlite__vfs_content *content; + int content_index; + int rc; + + /* Check if the file exists. */ + content_index = + dqlite__vfs_root_content_lookup(root, filename, &content); + if (content == NULL) { + root->error = ENOENT; + rc = SQLITE_IOERR_DELETE_NOENT; + goto err; + } + + /* Check that there are no consumers of this file. */ + if (content->refcount > 0) { + root->error = EBUSY; + pthread_mutex_unlock(&root->mutex); + rc = SQLITE_IOERR_DELETE; + goto err; + } + + /* Free all memory allocated for this file. */ + dqlite__vfs_content_destroy(content); + + /* Reset the file content slot. */ + *(root->contents + content_index) = NULL; + + pthread_mutex_unlock(&root->mutex); + + return SQLITE_OK; + +err: + assert(rc != SQLITE_OK); + + return rc; +} + static int dqlite__vfs_close(sqlite3_file *file) { struct dqlite__vfs_file *f = (struct dqlite__vfs_file *)file; struct dqlite__vfs_root *root = (struct dqlite__vfs_root *)(f->root); + if (f->temp != NULL) { + int rc; + + /* Close the actual temporary file. */ + rc = f->temp->pMethods->xClose(f->temp); + sqlite3_free(f->temp); + + return rc; + } + pthread_mutex_lock(&root->mutex); assert(f->content->refcount); @@ -628,6 +679,10 @@ f->content->shm = NULL; } + if (f->flags & SQLITE_OPEN_DELETEONCLOSE) { + dqlite__vfs_delete_content(root, f->content->filename); + } + pthread_mutex_unlock(&root->mutex); return SQLITE_OK; @@ -646,6 +701,12 @@ assert(buf != NULL); assert(amount > 0); assert(f != NULL); + + if (f->temp != NULL) { + /* Read from the actual temporary file. */ + return f->temp->pMethods->xRead(f->temp, buf, amount, offset); + } + assert(f->content != NULL); assert(f->content->filename != NULL); assert(f->content->refcount > 0); @@ -815,6 +876,12 @@ assert(buf != NULL); assert(amount > 0); assert(f != NULL); + + if (f->temp != NULL) { + /* Write to the actual temporary file. */ + return f->temp->pMethods->xWrite(f->temp, buf, amount, offset); + } + assert(f->content != NULL); assert(f->content->filename != NULL); assert(f->content->refcount > 0); @@ -1382,6 +1449,28 @@ return SQLITE_OK; } +static const sqlite3_io_methods dqlite__io_methods = { + 2, // iVersion + dqlite__vfs_close, // xClose + dqlite__vfs_read, // xRead + dqlite__vfs_write, // xWrite + dqlite__vfs_truncate, // xTruncate + dqlite__vfs_sync, // xSync + dqlite__vfs_file_size, // xFileSize + dqlite__vfs_lock, // xLock + dqlite__vfs_unlock, // xUnlock + dqlite__vfs_check_reserved_lock, // xCheckReservedLock + dqlite__vfs_file_control, // xFileControl + dqlite__vfs_sector_size, // xSectorSize + dqlite__vfs_device_characteristics, // xDeviceCharacteristics + dqlite__vfs_shm_map, // xShmMap + dqlite__vfs_shm_lock, // xShmLock + dqlite__vfs_shm_barrier, // xShmBarrier + dqlite__vfs_shm_unmap, // xShmUnmap + 0, + 0, +}; + static int dqlite__vfs_open(sqlite3_vfs * vfs, const char * filename, sqlite3_file *file, @@ -1392,9 +1481,8 @@ struct dqlite__vfs_file * f; struct dqlite__vfs_content *content; - int free_slot = - -1; /* Index of a free slot in the root->acontent array. */ - int exists = 0; /* Whether the file exists already. */ + int free_slot = -1; /* Index of a free slot in root->acontent. */ + int exists = 0; /* Whether the file exists already. */ int type; /* File content type (e.g. database or WAL). */ int rc; /* Return code. */ @@ -1406,7 +1494,6 @@ assert(vfs != NULL); assert(vfs->pAppData != NULL); assert(file != NULL); - assert(filename != NULL); (void)out_flags; @@ -1416,6 +1503,42 @@ /* This signals SQLite to not call Close() in case we return an error. */ f->base.pMethods = 0; + f->temp = NULL; + + /* Save the flags */ + f->flags = flags; + + /* From SQLite documentation: + * + * If the zFilename parameter to xOpen is a NULL pointer then xOpen + * must invent its own temporary name for the file. Whenever the + * xFilename parameter is NULL it will also be the case that the + * flags parameter will include SQLITE_OPEN_DELETEONCLOSE. + */ + if (filename == NULL) { + assert(flags & SQLITE_OPEN_DELETEONCLOSE); + + /* Open an actual temporary file. */ + vfs = sqlite3_vfs_find("unix"); + assert(vfs != NULL); + + f->temp = sqlite3_malloc(vfs->szOsFile); + if (f->temp == NULL) { + root->error = ENOENT; + return SQLITE_CANTOPEN; + } + rc = vfs->xOpen(vfs, NULL, f->temp, flags, out_flags); + if (rc != SQLITE_OK) { + sqlite3_free(f->temp); + return rc; + } + + f->base.pMethods = &dqlite__io_methods; + f->root = NULL; + f->content = NULL; + + return SQLITE_OK; + } pthread_mutex_lock(&root->mutex); @@ -1493,29 +1616,7 @@ } // Populate the new file handle. - static const sqlite3_io_methods io = { - 2, // iVersion - dqlite__vfs_close, // xClose - dqlite__vfs_read, // xRead - dqlite__vfs_write, // xWrite - dqlite__vfs_truncate, // xTruncate - dqlite__vfs_sync, // xSync - dqlite__vfs_file_size, // xFileSize - dqlite__vfs_lock, // xLock - dqlite__vfs_unlock, // xUnlock - dqlite__vfs_check_reserved_lock, // xCheckReservedLock - dqlite__vfs_file_control, // xFileControl - dqlite__vfs_sector_size, // xSectorSize - dqlite__vfs_device_characteristics, // xDeviceCharacteristics - dqlite__vfs_shm_map, // xShmMap - dqlite__vfs_shm_lock, // xShmLock - dqlite__vfs_shm_barrier, // xShmBarrier - dqlite__vfs_shm_unmap, // xShmUnmap - 0, - 0, - }; - - f->base.pMethods = &io; + f->base.pMethods = &dqlite__io_methods; f->root = root; f->content = content; @@ -1540,10 +1641,8 @@ const char * filename, int dir_sync) { - struct dqlite__vfs_root * root; - struct dqlite__vfs_content *content; - int content_index; - int rc; + struct dqlite__vfs_root *root; + int rc; assert(vfs != NULL); assert(vfs->pAppData != NULL); @@ -1554,35 +1653,7 @@ pthread_mutex_lock(&root->mutex); - /* Check if the file exists. */ - content_index = - dqlite__vfs_root_content_lookup(root, filename, &content); - if (content == NULL) { - root->error = ENOENT; - rc = SQLITE_IOERR_DELETE_NOENT; - goto err; - } - - /* Check that there are no consumers of this file. */ - if (content->refcount > 0) { - root->error = EBUSY; - pthread_mutex_unlock(&root->mutex); - rc = SQLITE_IOERR_DELETE; - goto err; - } - - /* Free all memory allocated for this file. */ - dqlite__vfs_content_destroy(content); - - /* Reset the file content slot. */ - *(root->contents + content_index) = NULL; - - pthread_mutex_unlock(&root->mutex); - - return SQLITE_OK; - -err: - assert(rc != SQLITE_OK); + rc = dqlite__vfs_delete_content(root, filename); pthread_mutex_unlock(&root->mutex); diff -Nru lxd-3.0.2/dist/dqlite/test/test_gateway.c lxd-3.0.3/dist/dqlite/test/test_gateway.c --- lxd-3.0.2/dist/dqlite/test/test_gateway.c 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/test/test_gateway.c 2018-11-22 20:54:12.000000000 +0000 @@ -1,9 +1,11 @@ #include #include "../include/dqlite.h" + #include "../src/gateway.h" #include "../src/options.h" #include "../src/response.h" +#include "../src/format.h" #include "cluster.h" #include "replication.h" @@ -141,7 +143,7 @@ f->gateway = munit_malloc(sizeof *f->gateway); dqlite__gateway_init( - f->gateway, &callbacks, test_cluster(), f->options); + f->gateway, &callbacks, test_cluster(), test_logger(), f->options); #ifdef DQLITE_EXPERIMENTAL rc = dqlite__gateway_start(f->gateway, 0); @@ -1212,6 +1214,102 @@ return MUNIT_OK; } +/* If the number of frames in the WAL reaches the configured threshold, but a + * read transaction holding a shared lock on the WAL is in progress, no + * checkpoint is triggered. */ +static MunitResult test_checkpoint_busy(const MunitParameter params[], + void * data) +{ + struct fixture * f = data; + sqlite3_file * file = munit_malloc(f->vfs->szOsFile); + uint32_t db1_id; + struct dqlite__db db2; + struct dqlite__stmt *stmt2; + uint64_t last_insert_id; + uint64_t rows_affected; + uint32_t stmt_id; + int err; + int rc; + int flags; + sqlite3_int64 size; + + (void)params; + + __open(f, &db1_id); + __prepare(f, db1_id, "BEGIN", &stmt_id); + __exec(f, db1_id, stmt_id); + + f->request->type = DQLITE_REQUEST_EXEC_SQL; + f->request->exec_sql.db_id = db1_id; + f->request->exec_sql.sql = + "CREATE TABLE test (n INT); INSERT INTO test VALUES(1)"; + + err = dqlite__gateway_handle(f->gateway, f->request); + munit_assert_int(err, ==, 0); + + dqlite__gateway_flushed(f->gateway, f->response); + + __prepare(f, db1_id, "COMMIT", &stmt_id); + __exec(f, db1_id, stmt_id); + + /* Manually open a new connection to the same database and start a read + * transaction. */ + dqlite__db_init(&db2); + flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE; + rc = dqlite__db_open(&db2, + "test.db", + flags, + f->gateway->options->vfs, + f->gateway->options->page_size, + f->gateway->options->wal_replication); + munit_assert_int(rc, ==, 0); + + rc = dqlite__db_prepare(&db2, "BEGIN", &stmt2); + munit_assert_int(rc, ==, 0); + + rc = dqlite__stmt_exec(stmt2, &last_insert_id, &rows_affected); + munit_assert_int(rc, ==, 0); + + rc = dqlite__db_prepare(&db2, "SELECT * FROM test", &stmt2); + munit_assert_int(rc, ==, 0); + + rc = dqlite__stmt_exec(stmt2, &last_insert_id, &rows_affected); + munit_assert_int(rc, ==, SQLITE_ROW); + + /* Lower the checkpoint threshold. */ + f->gateway->options->checkpoint_threshold = 1; + + /* Execute a new write transaction on the first connection. */ + __prepare(f, db1_id, "BEGIN", &stmt_id); + __exec(f, db1_id, stmt_id); + + f->request->type = DQLITE_REQUEST_EXEC_SQL; + f->request->exec_sql.db_id = db1_id; + f->request->exec_sql.sql = "INSERT INTO test VALUES(1)"; + + err = dqlite__gateway_handle(f->gateway, f->request); + munit_assert_int(err, ==, 0); + + dqlite__gateway_flushed(f->gateway, f->response); + + __prepare(f, db1_id, "COMMIT", &stmt_id); + __exec(f, db1_id, stmt_id); + + /* The WAL file did not get truncated. */ + flags = SQLITE_OPEN_READONLY | SQLITE_OPEN_WAL; + rc = f->vfs->xOpen(f->vfs, "test.db-wal", file, flags, &flags); + munit_assert_int(rc, ==, 0); + + rc = file->pMethods->xFileSize(file, &size); + munit_assert_int(rc, ==, 0); + + munit_assert_int(dqlite__format_wal_calc_pages(4096, size), ==, 3); + + dqlite__db_close(&db2); + + return MUNIT_OK; +} + /* Interrupt a query request that does not need its statement to be finalized */ static MunitResult test_interrupt(const MunitParameter params[], void *data) { @@ -1472,6 +1570,7 @@ NULL}, {"/max-requests", test_max_requests, setup, tear_down, 0, NULL}, {"/checkpoint", test_checkpoint, setup, tear_down, 0, NULL}, + {"/checkpoint-busy", test_checkpoint_busy, setup, tear_down, 0, NULL}, {"/interrupt", test_interrupt, setup, tear_down, 0, NULL}, {"/interrupt/finalize", test_interrupt_finalize, setup, tear_down, 0, NULL}, {"/interrupt/no-request", diff -Nru lxd-3.0.2/dist/dqlite/test/test_vfs.c lxd-3.0.3/dist/dqlite/test/test_vfs.c --- lxd-3.0.2/dist/dqlite/test/test_vfs.c 2018-08-20 23:48:52.000000000 +0000 +++ lxd-3.0.3/dist/dqlite/test/test_vfs.c 2018-11-22 20:54:12.000000000 +0000 @@ -510,6 +510,40 @@ return MUNIT_OK; } +/* Open a temporary file. */ +static MunitResult test_open_tmp(const MunitParameter params[], void *data) +{ + sqlite3_vfs * vfs = data; + sqlite3_file *file = munit_malloc(vfs->szOsFile); + int flags = 0; + char buf[16]; + int rc; + + (void)params; + + flags |= SQLITE_OPEN_CREATE; + flags |= SQLITE_OPEN_READWRITE; + flags |= SQLITE_OPEN_TEMP_JOURNAL; + flags |= SQLITE_OPEN_DELETEONCLOSE; + + rc = vfs->xOpen(vfs, NULL, file, flags, &flags); + munit_assert_int(rc, ==, SQLITE_OK); + + rc = file->pMethods->xWrite(file, "hello", 5, 0); + munit_assert_int(rc, ==, SQLITE_OK); + + memset(buf, 0, sizeof buf); + rc = file->pMethods->xRead(file, buf, 5, 0); + munit_assert_int(rc, ==, SQLITE_OK); + + munit_assert_string_equal(buf, "hello"); + + rc = file->pMethods->xClose(file); + munit_assert_int(rc, ==, SQLITE_OK); + + return MUNIT_OK; +} + static MunitTest dqlite__vfs_open_tests[] = { {"/exclusive", test_open_exclusive, setup, tear_down, 0, NULL}, {"/again", test_open_again, setup, tear_down, 0, NULL}, @@ -521,6 +555,7 @@ {"/oom", test_open_oom, setup, tear_down, 0, NULL}, {"/oom-filename", test_open_oom_filename, setup, tear_down, 0, NULL}, {"/oom-wal", test_open_oom_wal, setup, tear_down, 0, NULL}, + {"/tmp", test_open_tmp, setup, tear_down, 0, NULL}, {NULL, NULL, NULL, NULL, 0, NULL}, }; @@ -1413,10 +1448,11 @@ static MunitResult test_shm_lock_release_unix(const MunitParameter params[], void * data) { - sqlite3_vfs * vfs = sqlite3_vfs_find("unix"); - sqlite3_file * file = munit_malloc(vfs->szOsFile); - int flags = SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB; - const char * dir = test_dir_setup(); + sqlite3_vfs * vfs = sqlite3_vfs_find("unix"); + sqlite3_file *file = munit_malloc(vfs->szOsFile); + int flags = + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB; + const char * dir = test_dir_setup(); char path[256]; volatile void *region; int rc; @@ -1425,10 +1461,12 @@ (void)data; sprintf(path, "%s/test.db", dir); + path[strlen(path) + 1] = 0; + rc = vfs->xOpen(vfs, path, file, flags, &flags); munit_assert_int(rc, ==, 0); - rc = file->pMethods->xShmMap(file, 0, 512, 1, ®ion); + rc = file->pMethods->xShmMap(file, 0, 4096, 1, ®ion); munit_assert_int(rc, ==, 0); flags = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE; @@ -1762,7 +1800,7 @@ /* A shared lock is held on the second read mark (read locks start at * 3). */ - munit_assert_true(__shm_shared_lock_held(db2, 4)); + munit_assert_true(__shm_shared_lock_held(db2, 3 + 1)); /* Start a write transaction on db1 */ __db_exec(db1, "BEGIN"); @@ -1788,7 +1826,7 @@ munit_assert_int(__wal_idx_mx_frame(db1), ==, 6); /* The old read lock is still in place. */ - munit_assert_true(__shm_shared_lock_held(db2, 4)); + munit_assert_true(__shm_shared_lock_held(db2, 3 + 1)); /* Start a read transaction on db1 */ __db_exec(db1, "BEGIN"); @@ -1806,10 +1844,111 @@ munit_assert_uint32(read_marks[4], ==, 0xffffffff); /* The old read lock is still in place. */ - munit_assert_true(__shm_shared_lock_held(db2, 4)); + munit_assert_true(__shm_shared_lock_held(db2, 3 + 1)); /* The new read lock is in place as well. */ - munit_assert_true(__shm_shared_lock_held(db2, 5)); + munit_assert_true(__shm_shared_lock_held(db2, 3 + 2)); + + __db_close(db1); + __db_close(db2); + + sqlite3_vfs_unregister(vfs); + + return SQLITE_OK; +} + +/* Full checkpoints are possible only when no read mark is set. */ +static MunitResult test_integration_checkpoint(const MunitParameter params[], + void * data) +{ + sqlite3_vfs * vfs; + sqlite3 * db1; + sqlite3 * db2; + sqlite3_file *file1; /* main DB file */ + sqlite3_file *file2; /* WAL file */ + sqlite_int64 size; + uint32_t * read_marks; + unsigned mx_frame; + char stmt[128]; + int log, ckpt; + int i; + int rv; + + (void)params; + + vfs = data; + + sqlite3_vfs_register(vfs, 0); + + db1 = __db_open(); + + __db_exec(db1, "CREATE TABLE test (n INT)"); + + /* Insert a few rows so we grow the size of the WAL. */ + __db_exec(db1, "BEGIN"); + + for (i = 0; i < 500; i++) { + sprintf(stmt, "INSERT INTO test(n) VALUES(%d)", i); + __db_exec(db1, stmt); + } + + __db_exec(db1, "COMMIT"); + + /* Get the file objects for the main database and the WAL. */ + rv = sqlite3_file_control( + db1, "main", SQLITE_FCNTL_FILE_POINTER, &file1); + munit_assert_int(rv, ==, 0); + + rv = sqlite3_file_control( + db1, "main", SQLITE_FCNTL_JOURNAL_POINTER, &file2); + munit_assert_int(rv, ==, 0); + + /* The WAL file has now 13 pages */ + rv = file2->pMethods->xFileSize(file2, &size); + munit_logf(MUNIT_LOG_INFO, "size %lld", size); + munit_assert_int(dqlite__format_wal_calc_pages(512, size), ==, 13); + + mx_frame = __wal_idx_mx_frame(db1); + munit_assert_int(mx_frame, ==, 13); + + /* Start a read transaction on a different connection, acquiring a + * shared lock on all WAL pages. */ + db2 = __db_open(); + __db_exec(db2, "BEGIN"); + __db_exec(db2, "SELECT * FROM test"); + + read_marks = __wal_idx_read_marks(db1); + munit_assert_int(read_marks[1], ==, 13); + + rv = file1->pMethods->xShmLock(file1, 3 + 1, 1, SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE); + munit_assert_int(rv, ==, SQLITE_BUSY); + + munit_assert_true(__shm_shared_lock_held(db1, 3 + 1)); + + /* Execute a new write transaction, deleting some of the pages we + * inserted and creating new ones. */ + __db_exec(db1, "BEGIN"); + __db_exec(db1, "DELETE FROM test WHERE n > 200"); + + for (i = 0; i < 1000; i++) { + sprintf(stmt, "INSERT INTO test(n) VALUES(%d)", i); + __db_exec(db1, stmt); + } + + __db_exec(db1, "COMMIT"); + + /* Since there's a shared read lock, a full checkpoint will fail. */ + rv = sqlite3_wal_checkpoint_v2( + db1, "main", SQLITE_CHECKPOINT_TRUNCATE, &log, &ckpt); + munit_assert_int(rv, !=, 0); + + /* If we complete the read transaction the shared lock is realeased and + * the checkpoint succeeds. */ + __db_exec(db2, "COMMIT"); + + rv = sqlite3_wal_checkpoint_v2( + db1, "main", SQLITE_CHECKPOINT_TRUNCATE, &log, &ckpt); + munit_assert_int(rv, ==, 0); __db_close(db1); __db_close(db2); @@ -1822,6 +1961,7 @@ static MunitTest dqlite__vfs_integration_tests[] = { {"/db", test_integration_db, setup, tear_down, 0, NULL}, {"/wal", test_integration_wal, setup, tear_down, 0, NULL}, + {"/checkpoint", test_integration_checkpoint, setup, tear_down, 0, NULL}, {NULL, NULL, NULL, NULL, 0, NULL}, }; diff -Nru lxd-3.0.2/dist/MANIFEST lxd-3.0.3/dist/MANIFEST --- lxd-3.0.2/dist/MANIFEST 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/MANIFEST 2018-11-22 20:54:17.000000000 +0000 @@ -1,66 +1,67 @@ -./dqlite: f160665d9e50e39d156591546732a2e0b3712f73 -./sqlite: c94dbda1a570c1ab180e7694afd3cc7116268c06 -./src/github.com/armon/go-metrics: 3c58d8115a78a6879e5df75ae900846768d36895 +./dqlite: 9d8ea2e126e8214cf3ec8842ca29011bc19fb678 +./sqlite: a5a555e13a80463104233dbde67709123a97c27b +./src/github.com/armon/go-metrics: f0300d1749da6fa982027e449ec0c7a145510c3c ./src/github.com/boltdb/bolt: fd01fc79c553a8e99d512a07e8e0c63d4a3ccfc5 -./src/github.com/CanonicalLtd/candidclient: 6504df157e74a5f4b54dd720e5352e164e0f1882 -./src/github.com/CanonicalLtd/go-dqlite: 47bd5161b9a44a6d57b31b78ccc0621056cf5b7e +./src/github.com/CanonicalLtd/candidclient: 8d331dd5664bea29ab3762e226b14cfc49fbe22a +./src/github.com/CanonicalLtd/go-dqlite: db80752439abf27c03ad4c0cf37d11fe24f53710 ./src/github.com/CanonicalLtd/raft-http: 4c2dd679d3b46c11b250d63ae43467d4c4ab0962 ./src/github.com/CanonicalLtd/raft-membership: 3846634b0164affd0b3dfba1fdd7f9da6387e501 ./src/github.com/CanonicalLtd/raft-test: c3345b5e43c2b542007a11093afbbfecedd41648 ./src/github.com/cpuguy83/go-md2man: 691ee98543af2f262f35fbb54bdd42f00b9b9cc5 ./src/github.com/dustinkirkland/golang-petname: d3c2ba80e75eeef10c5cf2fc76d2c809637376b3 ./src/github.com/flosch/pongo2: 24195e6d38b06020d7a92c7b11960cf2e7cad2f2 -./src/github.com/gogo/protobuf: 476a2e96f315dddcec331f89af7cdf0d51cd84b5 -./src/github.com/golang/protobuf: aa810b61a9c79d51363740d207bb46cf8e620ed5 -./src/github.com/gorilla/mux: e48e440e4c92e3251d812f8ce7858944dfa3331c -./src/github.com/gorilla/websocket: 3ff3320c2a1756a3691521efc290b4701575147c +./src/github.com/gogo/protobuf: 07eab6a8298cf32fac45cceaac59424f98421bbc +./src/github.com/golang/protobuf: 882cf97a83ad205fd22af574246a3bc647d7a7d2 +./src/github.com/google/uuid: 9b3b1e0f5f99ae461456d768e7d301a7acdaa2d8 +./src/github.com/gorilla/mux: 3d80bc801bb034e17cae38591335b3b1110f1c47 +./src/github.com/gorilla/websocket: 483fb8d7c32fcb4b5636cd293a92e3935932e2f4 ./src/github.com/gosexy/gettext: 74466a0a0c4a62fea38f44aa161d4bbfbe79dd6b -./src/github.com/hashicorp/go-immutable-radix: 7f3cd4390caab3250a57f30efdb2a65dd7649ecf -./src/github.com/hashicorp/golang-lru: 0fb14efe8c47ae851c0034ed7a448854d3d34cf3 +./src/github.com/hashicorp/go-immutable-radix: 27df80928bb34bb1b0d6d0e01b9e679902e7a6b5 +./src/github.com/hashicorp/golang-lru: 20f1fb78b0740ba8c3cb143a61e86ba5c8669768 ./src/github.com/hashicorp/go-msgpack: fa3f63826f7c23912c15263591e65d54d080b458 -./src/github.com/hashicorp/logutils: 0dc08b1671f34c4250ce212759ebd880f743d883 +./src/github.com/hashicorp/logutils: a335183dfd075f638afcc820c90591ca3c97eba6 +./src/github.com/hashicorp/raft: 82694fb663be3ffa7769961ee9a65e4c39ebbf2c ./src/github.com/hashicorp/raft-boltdb: 6e5ba93211eaf8d9a2ad7e41ffad8c6f160f9fe3 -./src/github.com/hashicorp/raft: da92cfe76e0c1c9b94bbc9d884ec4b2b3b90b699 ./src/github.com/juju/clock: bab88fc672997ef02d03f85310182d97a93dee21 ./src/github.com/juju/collections: 9be91dc79b7c185fa8b08e7ceceee40562055c83 -./src/github.com/juju/errors: 22422dad46e14561a0854ad42497a75af9b61909 +./src/github.com/juju/errors: 089d3ea4e4d597bd98acac068193d341983326a3 ./src/github.com/juju/go4: 40d72ab9641a2a8c36a9c46a51e28367115c8e59 -./src/github.com/juju/gomaasapi: abe11904dd8cd40f0777b7704ae60348a876542e +./src/github.com/juju/gomaasapi: 8a8cec793ba70659ba95f1b9a491ba807169bfc3 ./src/github.com/juju/httprequest: 77d36ac4b71a6095506c0617d5881846478558cb ./src/github.com/juju/loggo: 584905176618da46b895b176c721b02c476b6993 ./src/github.com/juju/persistent-cookiejar: d5e5a8405ef9633c84af42fbcc734ec8dd73c198 ./src/github.com/juju/schema: e4f08199aa80d3194008c0bd2e14ef5edc0e6be6 ./src/github.com/juju/utils: bf9cc5bdd62dabc40b7f634b39a5e2dc44d44c45 ./src/github.com/juju/version: b64dbd566305c836274f0268fa59183a52906b36 -./src/github.com/juju/webbrowser: 54b8c57083b4afb7dc75da7f13e2967b2606a507 -./src/github.com/julienschmidt/httprouter: 348b672cd90d8190f8240323e372ecd1e66b59dc +./src/github.com/juju/webbrowser: efb9432b2bcb671b0cf2237468e209d10e2ac373 +./src/github.com/julienschmidt/httprouter: 26a05976f9bf5c3aa992cc20e8588c359418ee58 ./src/github.com/mattn/go-colorable: efa589957cd060542a26d2dd7832fd6a6c6c3ade -./src/github.com/mattn/go-isatty: 6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c -./src/github.com/mattn/go-runewidth: ce7b0b5c7b45a81508558cd1dba6bb1e4ddb51bb -./src/github.com/mattn/go-sqlite3: b3511bfdd742af558b54eb6160aca9446d762a19 +./src/github.com/mattn/go-isatty: 3fb116b820352b7f0c281308a4d6250c22d94e27 +./src/github.com/mattn/go-runewidth: c88d7e5f2e24de48a200a2655ac8a0910be9a0f7 +./src/github.com/mattn/go-sqlite3: 6a9185d7b1f12363e2c904449d374b63b6093b16 ./src/github.com/mpvl/subtest: f6e4cfd4b9ea1beb9fb5d53afba8c30804a02ae7 -./src/github.com/olekukonko/tablewriter: d4647c9c7a84d847478d890b816b7d8b62b0b279 -./src/github.com/pborman/uuid: c65b2f87fee37d1c7854c9164a450713c28d50cd -./src/github.com/pkg/errors: 816c9085562cd7ee03e7f8188a1cfd942858cded +./src/github.com/olekukonko/tablewriter: e6d60cf7ba1f42d86d54cdf5508611c4aafb3970 +./src/github.com/pborman/uuid: 8b1b92947f46224e3b97bb1a3a5b0382be00d31e +./src/github.com/pkg/errors: 059132a15dd08d6704c67711dae0cf35ab991756 ./src/github.com/Rican7/retry: 272ad122d6e5ce1be757544007cf8bcd1c9c9ab0 ./src/github.com/rogpeppe/fastuuid: 6724a57986aff9bff1a1770e9347036def7c89f6 ./src/github.com/ryanfaerman/fsm: 3dc1bc0980272fd56d81167a48a641dab8356e29 -./src/github.com/spf13/cobra: ff0d02e8555041edecbd0ce27f32c6ea4b214483 -./src/github.com/spf13/pflag: 947b89bd1b7dabfed991ac30e1a56f5193f0c88b -./src/github.com/stretchr/testify: f35b8ab0b5a2cef36673838d662e249dd9c94686 -./src/github.com/syndtr/gocapability: 33e07d32887e1e06b7c025f27ce52f62c7990bc0 -./src/golang.org/x/crypto: 614d502a4dac94afa3a6ce146bd1736da82514c6 -./src/golang.org/x/net: aaf60122140d3fcf75376d319f0554393160eb50 -./src/golang.org/x/sys: 1a700e749ce29638d0bbcb531cce1094ea096bd3 -./src/gopkg.in/CanonicalLtd/candidclient.v1: 6504df157e74a5f4b54dd720e5352e164e0f1882 +./src/github.com/spf13/cobra: fe5e611709b0c57fa4a89136deaa8e1d4004d053 +./src/github.com/spf13/pflag: aea12ed6721610dc6ed40141676d7ab0a1dac9e9 +./src/github.com/stretchr/testify: 8019298d9fa5a04fc2ad10ae03349df3483096a6 +./src/github.com/syndtr/gocapability: d98352740cb2c55f81556b63d4a1ec64c5a319c2 +./src/golang.org/x/crypto: 3d3f9f413869b949e48070b5bc593aa22cc2b8f2 +./src/golang.org/x/net: adae6a3d119ae4890b46832a2e88a95adc62b8e7 +./src/golang.org/x/sys: 62eef0e2fa9b2c385f7b2778e763486da6880d37 +./src/gopkg.in/CanonicalLtd/candidclient.v1: 8d331dd5664bea29ab3762e226b14cfc49fbe22a ./src/gopkg.in/errgo.v1: b20caedf0710d0988e92b5f2d76843ad1f231f2d ./src/gopkg.in/httprequest.v1: a1015531595ff2ed1a0c126b55da352e6923eaac ./src/gopkg.in/juju/environschema.v1: 7359fc7857abe2b11b5b3e23811a9c64cb6b01e0 ./src/gopkg.in/juju/names.v2: fd59336b4621bc2a70bf96d9e2f49954115ad19b -./src/gopkg.in/lxc/go-lxc.v2: 1c13b43ccb43defbf04a8b4b931e4bb18fd481e6 -./src/gopkg.in/macaroon-bakery.v2: 94012773d2874a067572bd16d7d11ae02968b47b +./src/gopkg.in/lxc/go-lxc.v2: 0aadfc37157c2e3f0e63bedd10f8615e66e91cad +./src/gopkg.in/macaroon-bakery.v2: a0743b6619d68bbf8dc5cabbb49738b846f06080 ./src/gopkg.in/macaroon.v2: bed2a428da6e56d950bed5b41fcbae3141e5b0d0 ./src/gopkg.in/mgo.v2: 9856a29383ce1c59f308dd1cf0363a79b5bef6b5 -./src/gopkg.in/retry.v1: a39ed324609b84adb77c705baa0909b409fbafcd +./src/gopkg.in/retry.v1: 87155f248cf6ea9e38ae7613f9ea1e5bb397ac83 ./src/gopkg.in/tomb.v2: d5d1b5820637886def9eef33e03a27a9f166942c ./src/gopkg.in/yaml.v2: 5420a8b6744d3b0345ab293f6fcba19c978f1183 diff -Nru lxd-3.0.2/dist/sqlite/autoconf/configure.ac lxd-3.0.3/dist/sqlite/autoconf/configure.ac --- lxd-3.0.2/dist/sqlite/autoconf/configure.ac 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/autoconf/configure.ac 2018-11-22 20:54:16.000000000 +0000 @@ -29,6 +29,7 @@ AC_FUNC_STRERROR_R AC_CONFIG_FILES([Makefile sqlite3.pc]) +BUILD_CFLAGS= AC_SUBST(BUILD_CFLAGS) #------------------------------------------------------------------------- @@ -86,13 +87,11 @@ AC_ARG_ENABLE(threadsafe, [AS_HELP_STRING( [--enable-threadsafe], [build a thread-safe library [default=yes]])], [], [enable_threadsafe=yes]) -THREADSAFE_FLAGS=-DSQLITE_THREADSAFE=0 if test x"$enable_threadsafe" != "xno"; then - THREADSAFE_FLAGS="-D_REENTRANT=1 -DSQLITE_THREADSAFE=1" + BUILD_CFLAGS="$BUILD_CFLAGS -D_REENTRANT=1 -DSQLITE_THREADSAFE=1" AC_SEARCH_LIBS(pthread_create, pthread) AC_SEARCH_LIBS(pthread_mutexattr_init, pthread) fi -AC_SUBST(THREADSAFE_FLAGS) #----------------------------------------------------------------------- #----------------------------------------------------------------------- @@ -104,11 +103,32 @@ if test x"$enable_dynamic_extensions" != "xno"; then AC_SEARCH_LIBS(dlopen, dl) else - DYNAMIC_EXTENSION_FLAGS=-DSQLITE_OMIT_LOAD_EXTENSION=1 + BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_OMIT_LOAD_EXTENSION=1" fi AC_MSG_CHECKING([for whether to support dynamic extensions]) AC_MSG_RESULT($enable_dynamic_extensions) -AC_SUBST(DYNAMIC_EXTENSION_FLAGS) +#----------------------------------------------------------------------- + +#----------------------------------------------------------------------- +# --enable-fts4 +# +AC_ARG_ENABLE(fts4, [AS_HELP_STRING( + [--enable-fts4], [include fts4 support [default=yes]])], + [], [enable_fts4=yes]) +if test x"$enable_fts4" = "xyes"; then + BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_FTS4" +fi +#----------------------------------------------------------------------- + +#----------------------------------------------------------------------- +# --enable-fts3 +# +AC_ARG_ENABLE(fts3, [AS_HELP_STRING( + [--enable-fts3], [include fts3 support [default=no]])], + [], []) +if test x"$enable_fts3" = "xyes" -a x"$enable_fts4" = "xno"; then + BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_FTS3" +fi #----------------------------------------------------------------------- #----------------------------------------------------------------------- @@ -119,9 +139,8 @@ [], [enable_fts5=yes]) if test x"$enable_fts5" = "xyes"; then AC_SEARCH_LIBS(log, m) - FTS5_FLAGS=-DSQLITE_ENABLE_FTS5 + BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_FTS5" fi -AC_SUBST(FTS5_FLAGS) #----------------------------------------------------------------------- #----------------------------------------------------------------------- @@ -129,11 +148,21 @@ # AC_ARG_ENABLE(json1, [AS_HELP_STRING( [--enable-json1], [include json1 support [default=yes]])], - [], [enable_json1=yes]) + [],[enable_json1=yes]) if test x"$enable_json1" = "xyes"; then - JSON1_FLAGS=-DSQLITE_ENABLE_JSON1 + BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_JSON1" +fi +#----------------------------------------------------------------------- + +#----------------------------------------------------------------------- +# --enable-rtree +# +AC_ARG_ENABLE(rtree, [AS_HELP_STRING( + [--enable-rtree], [include rtree support [default=yes]])], + [], [enable_rtree=yes]) +if test x"$enable_rtree" = "xyes"; then + BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_RTREE" fi -AC_SUBST(JSON1_FLAGS) #----------------------------------------------------------------------- #----------------------------------------------------------------------- @@ -141,11 +170,10 @@ # AC_ARG_ENABLE(session, [AS_HELP_STRING( [--enable-session], [enable the session extension [default=no]])], - [], [enable_session=no]) + [], []) if test x"$enable_session" = "xyes"; then - SESSION_FLAGS="-DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK" + BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK" fi -AC_SUBST(SESSION_FLAGS) #----------------------------------------------------------------------- #----------------------------------------------------------------------- @@ -153,11 +181,11 @@ # AC_ARG_ENABLE(debug, [AS_HELP_STRING( [--enable-debug], [build with debugging features enabled [default=no]])], - [], [enable_session=no]) + [], []) if test x"$enable_debug" = "xyes"; then - DEBUG_FLAGS="-DSQLITE_DEBUG -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE" + BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_DEBUG -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE" + CFLAGS="-g -O0" fi -AC_SUBST(DEBUG_FLAGS) #----------------------------------------------------------------------- #----------------------------------------------------------------------- @@ -177,9 +205,8 @@ AC_CHECK_FUNCS(posix_fallocate) AC_CHECK_HEADERS(zlib.h,[ - AC_SEARCH_LIBS(deflate,z,[ZLIB_FLAGS="-DSQLITE_HAVE_ZLIB"]) + AC_SEARCH_LIBS(deflate,z,[BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_HAVE_ZLIB"]) ]) -AC_SUBST(ZLIB_FLAGS) AC_SEARCH_LIBS(system,,,[SHELL_CFLAGS="-DSQLITE_NOHAVE_SYSTEM"]) AC_SUBST(SHELL_CFLAGS) diff -Nru lxd-3.0.2/dist/sqlite/autoconf/Makefile.am lxd-3.0.3/dist/sqlite/autoconf/Makefile.am --- lxd-3.0.2/dist/sqlite/autoconf/Makefile.am 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/autoconf/Makefile.am 2018-11-22 20:54:16.000000000 +0000 @@ -1,6 +1,5 @@ -AM_CFLAGS = @THREADSAFE_FLAGS@ @DYNAMIC_EXTENSION_FLAGS@ @FTS5_FLAGS@ @JSON1_FLAGS@ @ZLIB_FLAGS@ @SESSION_FLAGS@ -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE @DEBUG_FLAGS@ - +AM_CFLAGS = @BUILD_CFLAGS@ lib_LTLIBRARIES = libsqlite3.la libsqlite3_la_SOURCES = sqlite3.c libsqlite3_la_LDFLAGS = -no-undefined -version-info 8:6:8 diff -Nru lxd-3.0.2/dist/sqlite/autoconf/Makefile.msc lxd-3.0.3/dist/sqlite/autoconf/Makefile.msc --- lxd-3.0.2/dist/sqlite/autoconf/Makefile.msc 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/autoconf/Makefile.msc 2018-11-22 20:54:16.000000000 +0000 @@ -277,6 +277,12 @@ !IF $(MINIMAL_AMALGAMATION)==0 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_GEOPOLY=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_JSON1=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBSTAT_VTAB=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_INTROSPECTION_PRAGMAS=1 !ENDIF OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1 !ENDIF @@ -928,10 +934,9 @@ # when the shell is not being dynamically linked. # !IF $(DYNAMIC_SHELL)==0 && $(FOR_WIN10)==0 -SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_STMTVTAB -SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_DBSTAT_VTAB -SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC -DSQLITE_INTROSPECTION_PRAGMAS -SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_RTREE +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_FTS4=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 !ENDIF diff -Nru lxd-3.0.2/dist/sqlite/configure lxd-3.0.3/dist/sqlite/configure --- lxd-3.0.2/dist/sqlite/configure 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/configure 2018-11-22 20:54:16.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sqlite 3.24.0. +# Generated by GNU Autoconf 2.69 for sqlite 3.25.3. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -726,8 +726,8 @@ # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.24.0' -PACKAGE_STRING='sqlite 3.24.0' +PACKAGE_VERSION='3.25.3' +PACKAGE_STRING='sqlite 3.25.3' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -911,6 +911,7 @@ enable_fts5 enable_json1 enable_update_limit +enable_geopoly enable_rtree enable_session enable_wal_replication @@ -1467,7 +1468,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.24.0 to adapt to many kinds of systems. +\`configure' configures sqlite 3.25.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1532,7 +1533,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.24.0:";; + short | recursive ) echo "Configuration of sqlite 3.25.3:";; esac cat <<\_ACEOF @@ -1565,6 +1566,7 @@ --enable-fts5 Enable the FTS5 extension --enable-json1 Enable the JSON1 extension --enable-update-limit Enable the UPDATE/DELETE LIMIT clause + --enable-geopoly Enable the GEOPOLY extension --enable-rtree Enable the RTREE extension --enable-session Enable the SESSION extension --enable-wal-replication @@ -1661,7 +1663,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.24.0 +sqlite configure 3.25.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2080,7 +2082,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.24.0, which was +It was created by sqlite $as_me 3.25.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3938,13 +3940,13 @@ else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:3935: $ac_compile\"" >&5) + (eval echo "\"\$as_me:3937: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:3938: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:3940: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:3941: output\"" >&5) + (eval echo "\"\$as_me:3943: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -5150,7 +5152,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5147 "configure"' > conftest.$ac_ext + echo '#line 5149 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -6675,11 +6677,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6672: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6674: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6676: \$? = $ac_status" >&5 + echo "$as_me:6678: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7014,11 +7016,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7011: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7013: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7015: \$? = $ac_status" >&5 + echo "$as_me:7017: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7119,11 +7121,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7116: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7118: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7120: \$? = $ac_status" >&5 + echo "$as_me:7122: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -7174,11 +7176,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7171: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7173: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7175: \$? = $ac_status" >&5 + echo "$as_me:7177: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -9554,7 +9556,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 9551 "configure" +#line 9553 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -9650,7 +9652,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 9647 "configure" +#line 9649 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10461,8 +10463,6 @@ # Check whether --enable-threadsafe was given. if test "${enable_threadsafe+set}" = set; then : enableval=$enable_threadsafe; -else - enable_threadsafe=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support threadsafe operation" >&5 @@ -11255,12 +11255,10 @@ # check for debug enabled # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; use_debug=$enableval -else - use_debug=no + enableval=$enable_debug; fi -if test "${use_debug}" = "yes" ; then +if test "${enable_debug}" = "yes" ; then TARGET_DEBUG="-DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0" else TARGET_DEBUG="-DNDEBUG" @@ -11271,12 +11269,10 @@ # See whether we should use the amalgamation to build # Check whether --enable-amalgamation was given. if test "${enable_amalgamation+set}" = set; then : - enableval=$enable_amalgamation; use_amalgamation=$enableval -else - use_amalgamation=yes + enableval=$enable_amalgamation; fi -if test "${use_amalgamation}" != "yes" ; then +if test "${enable_amalgamation}" == "no" ; then USE_AMALGAMATION=0 fi @@ -11359,12 +11355,12 @@ # See whether we should allow loadable extensions # Check whether --enable-load-extension was given. if test "${enable_load_extension+set}" = set; then : - enableval=$enable_load_extension; use_loadextension=$enableval + enableval=$enable_load_extension; else - use_loadextension=yes + enable_load_extension=yes fi -if test "${use_loadextension}" = "yes" ; then +if test "${enable_load_extension}" = "yes" ; then OPT_FEATURE_FLAGS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 $as_echo_n "checking for library containing dlopen... " >&6; } @@ -11431,9 +11427,7 @@ # # Check whether --enable-memsys5 was given. if test "${enable_memsys5+set}" = set; then : - enableval=$enable_memsys5; enable_memsys5=yes -else - enable_memsys5=no + enableval=$enable_memsys5; fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support MEMSYS5" >&5 @@ -11448,9 +11442,7 @@ fi # Check whether --enable-memsys3 was given. if test "${enable_memsys3+set}" = set; then : - enableval=$enable_memsys3; enable_memsys3=yes -else - enable_memsys3=no + enableval=$enable_memsys3; fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support MEMSYS3" >&5 @@ -11468,9 +11460,7 @@ # See whether we should enable Full Text Search extensions # Check whether --enable-fts3 was given. if test "${enable_fts3+set}" = set; then : - enableval=$enable_fts3; enable_fts3=yes -else - enable_fts3=no + enableval=$enable_fts3; fi if test "${enable_fts3}" = "yes" ; then @@ -11478,9 +11468,7 @@ fi # Check whether --enable-fts4 was given. if test "${enable_fts4+set}" = set; then : - enableval=$enable_fts4; enable_fts4=yes -else - enable_fts4=no + enableval=$enable_fts4; fi if test "${enable_fts4}" = "yes" ; then @@ -11544,9 +11532,7 @@ fi # Check whether --enable-fts5 was given. if test "${enable_fts5+set}" = set; then : - enableval=$enable_fts5; enable_fts5=yes -else - enable_fts5=no + enableval=$enable_fts5; fi if test "${enable_fts5}" = "yes" ; then @@ -11613,9 +11599,7 @@ # See whether we should enable JSON1 # Check whether --enable-json1 was given. if test "${enable_json1+set}" = set; then : - enableval=$enable_json1; enable_json1=yes -else - enable_json1=no + enableval=$enable_json1; fi if test "${enable_json1}" = "yes" ; then @@ -11627,9 +11611,7 @@ # statements. # Check whether --enable-update-limit was given. if test "${enable_update_limit+set}" = set; then : - enableval=$enable_update_limit; enable_udlimit=yes -else - enable_udlimit=no + enableval=$enable_update_limit; fi if test "${enable_udlimit}" = "yes" ; then @@ -11637,12 +11619,24 @@ fi ######### +# See whether we should enable GEOPOLY +# Check whether --enable-geopoly was given. +if test "${enable_geopoly+set}" = set; then : + enableval=$enable_geopoly; enable_geopoly=yes +else + enable_geopoly=no +fi + +if test "${enable_geopoly}" = "yes" ; then + OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_GEOPOLY" + enable_rtree=yes +fi + +######### # See whether we should enable RTREE # Check whether --enable-rtree was given. if test "${enable_rtree+set}" = set; then : - enableval=$enable_rtree; enable_rtree=yes -else - enable_rtree=no + enableval=$enable_rtree; fi if test "${enable_rtree}" = "yes" ; then @@ -11653,9 +11647,7 @@ # See whether we should enable the SESSION extension # Check whether --enable-session was given. if test "${enable_session+set}" = set; then : - enableval=$enable_session; enable_session=yes -else - enable_session=no + enableval=$enable_session; fi if test "${enable_session}" = "yes" ; then @@ -11744,9 +11736,7 @@ # See whether we should use GCOV # Check whether --enable-gcov was given. if test "${enable_gcov+set}" = set; then : - enableval=$enable_gcov; use_gcov=$enableval -else - use_gcov=no + enableval=$enable_gcov; fi if test "${use_gcov}" = "yes" ; then @@ -12274,7 +12264,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.24.0, which was +This file was extended by sqlite $as_me 3.25.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -12340,7 +12330,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sqlite config.status 3.24.0 +sqlite config.status 3.25.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru lxd-3.0.2/dist/sqlite/configure.ac lxd-3.0.3/dist/sqlite/configure.ac --- lxd-3.0.2/dist/sqlite/configure.ac 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/configure.ac 2018-11-22 20:54:16.000000000 +0000 @@ -182,7 +182,7 @@ # Do we want to support multithreaded use of sqlite # AC_ARG_ENABLE(threadsafe, -AC_HELP_STRING([--disable-threadsafe],[Disable mutexing]),,enable_threadsafe=yes) +AC_HELP_STRING([--disable-threadsafe],[Disable mutexing])) AC_MSG_CHECKING([whether to support threadsafe operation]) if test "$enable_threadsafe" = "no"; then SQLITE_THREADSAFE=0 @@ -557,9 +557,8 @@ ######### # check for debug enabled -AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug],[enable debugging & verbose explain]), - [use_debug=$enableval],[use_debug=no]) -if test "${use_debug}" = "yes" ; then +AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug],[enable debugging & verbose explain])) +if test "${enable_debug}" = "yes" ; then TARGET_DEBUG="-DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0" else TARGET_DEBUG="-DNDEBUG" @@ -569,9 +568,8 @@ ######### # See whether we should use the amalgamation to build AC_ARG_ENABLE(amalgamation, AC_HELP_STRING([--disable-amalgamation], - [Disable the amalgamation and instead build all files separately]), - [use_amalgamation=$enableval],[use_amalgamation=yes]) -if test "${use_amalgamation}" != "yes" ; then + [Disable the amalgamation and instead build all files separately])) +if test "${enable_amalgamation}" == "no" ; then USE_AMALGAMATION=0 fi AC_SUBST(USE_AMALGAMATION) @@ -585,9 +583,8 @@ ######### # See whether we should allow loadable extensions AC_ARG_ENABLE(load-extension, AC_HELP_STRING([--disable-load-extension], - [Disable loading of external extensions]), - [use_loadextension=$enableval],[use_loadextension=yes]) -if test "${use_loadextension}" = "yes" ; then + [Disable loading of external extensions]),,[enable_load_extension=yes]) +if test "${enable_load_extension}" = "yes" ; then OPT_FEATURE_FLAGS="" AC_SEARCH_LIBS(dlopen, dl) else @@ -598,8 +595,7 @@ # Do we want to support memsys3 and/or memsys5 # AC_ARG_ENABLE(memsys5, - AC_HELP_STRING([--enable-memsys5],[Enable MEMSYS5]), - [enable_memsys5=yes],[enable_memsys5=no]) + AC_HELP_STRING([--enable-memsys5],[Enable MEMSYS5])) AC_MSG_CHECKING([whether to support MEMSYS5]) if test "${enable_memsys5}" = "yes"; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS5" @@ -608,8 +604,7 @@ AC_MSG_RESULT([no]) fi AC_ARG_ENABLE(memsys3, - AC_HELP_STRING([--enable-memsys3],[Enable MEMSYS3]), - [enable_memsys3=yes],[enable_memsys3=no]) + AC_HELP_STRING([--enable-memsys3],[Enable MEMSYS3])) AC_MSG_CHECKING([whether to support MEMSYS3]) if test "${enable_memsys3}" = "yes" -a "${enable_memsys5}" = "no"; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS3" @@ -621,21 +616,18 @@ ######### # See whether we should enable Full Text Search extensions AC_ARG_ENABLE(fts3, AC_HELP_STRING([--enable-fts3], - [Enable the FTS3 extension]), - [enable_fts3=yes],[enable_fts3=no]) + [Enable the FTS3 extension])) if test "${enable_fts3}" = "yes" ; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS3" fi AC_ARG_ENABLE(fts4, AC_HELP_STRING([--enable-fts4], - [Enable the FTS4 extension]), - [enable_fts4=yes],[enable_fts4=no]) + [Enable the FTS4 extension])) if test "${enable_fts4}" = "yes" ; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS4" AC_SEARCH_LIBS([log],[m]) fi AC_ARG_ENABLE(fts5, AC_HELP_STRING([--enable-fts5], - [Enable the FTS5 extension]), - [enable_fts5=yes],[enable_fts5=no]) + [Enable the FTS5 extension])) if test "${enable_fts5}" = "yes" ; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS5" AC_SEARCH_LIBS([log],[m]) @@ -643,9 +635,7 @@ ######### # See whether we should enable JSON1 -AC_ARG_ENABLE(json1, AC_HELP_STRING([--enable-json1], - [Enable the JSON1 extension]), - [enable_json1=yes],[enable_json1=no]) +AC_ARG_ENABLE(json1, AC_HELP_STRING([--enable-json1],[Enable the JSON1 extension])) if test "${enable_json1}" = "yes" ; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_JSON1" fi @@ -654,17 +644,25 @@ # See whether we should enable the LIMIT clause on UPDATE and DELETE # statements. AC_ARG_ENABLE(update-limit, AC_HELP_STRING([--enable-update-limit], - [Enable the UPDATE/DELETE LIMIT clause]), - [enable_udlimit=yes],[enable_udlimit=no]) + [Enable the UPDATE/DELETE LIMIT clause])) if test "${enable_udlimit}" = "yes" ; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT" fi ######### +# See whether we should enable GEOPOLY +AC_ARG_ENABLE(geopoly, AC_HELP_STRING([--enable-geopoly], + [Enable the GEOPOLY extension]), + [enable_geopoly=yes],[enable_geopoly=no]) +if test "${enable_geopoly}" = "yes" ; then + OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_GEOPOLY" + enable_rtree=yes +fi + +######### # See whether we should enable RTREE AC_ARG_ENABLE(rtree, AC_HELP_STRING([--enable-rtree], - [Enable the RTREE extension]), - [enable_rtree=yes],[enable_rtree=no]) + [Enable the RTREE extension])) if test "${enable_rtree}" = "yes" ; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_RTREE" fi @@ -672,8 +670,7 @@ ######### # See whether we should enable the SESSION extension AC_ARG_ENABLE(session, AC_HELP_STRING([--enable-session], - [Enable the SESSION extension]), - [enable_session=yes],[enable_session=no]) + [Enable the SESSION extension])) if test "${enable_session}" = "yes" ; then OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_SESSION" OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_PREUPDATE_HOOK" @@ -751,8 +748,7 @@ ######### # See whether we should use GCOV AC_ARG_ENABLE(gcov, AC_HELP_STRING([--enable-gcov], - [Enable coverage testing using gcov]), - [use_gcov=$enableval],[use_gcov=no]) + [Enable coverage testing using gcov])) if test "${use_gcov}" = "yes" ; then USE_GCOV=1 else diff -Nru lxd-3.0.2/dist/sqlite/doc/F2FS.txt lxd-3.0.3/dist/sqlite/doc/F2FS.txt --- lxd-3.0.2/dist/sqlite/doc/F2FS.txt 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/doc/F2FS.txt 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,87 @@ + +SQLite's OS layer contains the following definitions used in F2FS related +calls: + +#define F2FS_IOCTL_MAGIC 0xf5 +#define F2FS_IOC_START_ATOMIC_WRITE _IO(F2FS_IOCTL_MAGIC, 1) +#define F2FS_IOC_COMMIT_ATOMIC_WRITE _IO(F2FS_IOCTL_MAGIC, 2) +#define F2FS_IOC_START_VOLATILE_WRITE _IO(F2FS_IOCTL_MAGIC, 3) +#define F2FS_IOC_ABORT_VOLATILE_WRITE _IO(F2FS_IOCTL_MAGIC, 5) +#define F2FS_IOC_GET_FEATURES _IOR(F2FS_IOCTL_MAGIC, 12, u32) +#define F2FS_FEATURE_ATOMIC_WRITE 0x0004 + +After opening a database file on Linux (including Android), SQLite determines +whether or not a file supports F2FS atomic commits as follows: + + u32 flags = 0; + rc = ioctl(fd, F2FS_IOC_GET_FEATURES, &flags); + if( rc==0 && (flags & F2FS_FEATURE_ATOMIC_WRITE) ){ + /* File supports F2FS atomic commits */ + }else{ + /* File does NOT support F2FS atomic commits */ + } + +where "fd" is the file-descriptor open on the database file. + +Usually, when writing to a database file that supports atomic commits, SQLite +accumulates the entire transaction in heap memory, deferring all writes to the +db file until the transaction is committed. + +When it is time to commit a transaction on a file that supports atomic +commits, SQLite does: + + /* Take an F_WRLCK lock on the database file. This prevents any other + ** SQLite clients from reading or writing the file until the lock + ** is released. */ + rc = fcntl(fd, F_SETLK, ...); + if( rc!=0 ) goto failed; + + rc = ioctl(fd, F2FS_IOC_START_ATOMIC_WRITE); + if( rc!=0 ) goto fallback_to_legacy_journal_commit; + + foreach (dirty page){ + rc = write(fd, ...dirty page...); + if( rc!=0 ){ + ioctl(fd, F2FS_IOC_ABORT_VOLATILE_WRITE); + goto fallback_to_legacy_journal_commit; + } + } + + rc = ioctl(fd, F2FS_IOC_COMMIT_ATOMIC_WRITE); + if( rc!=0 ){ + ioctl(fd, F2FS_IOC_ABORT_VOLATILE_WRITE); + goto fallback_to_legacy_journal_commit; + } + + /* If we get there, the transaction has been successfully + ** committed to persistent storage. The following call + ** relinquishes the F_WRLCK lock. */ + fcntl(fd, F_SETLK, ...); + +Assumptions: + +1. After either of the F2FS_IOC_ABORT_VOLATILE_WRITE calls return, + the database file is in the state that it was in before + F2FS_IOC_START_ATOMIC_WRITE was invoked. Even if the ioctl() + fails - we're ignoring the return code. + + This is true regardless of the type of error that occurred in + ioctl() or write(). + +2. If the system fails before the F2FS_IOC_COMMIT_ATOMIC_WRITE is + completed, then following a reboot the database file is in the + state that it was in before F2FS_IOC_START_ATOMIC_WRITE was invoked. + Or, if the write was commited right before the system failed, in a + state indicating that all write() calls were successfully committed + to persistent storage before the failure occurred. + +3. If the process crashes before the F2FS_IOC_COMMIT_ATOMIC_WRITE is + completed then the file is automatically restored to the state that + it was in before F2FS_IOC_START_ATOMIC_WRITE was called. This occurs + before the posix advisory lock is automatically dropped - there is + no chance that another client will be able to read the file in a + half-committed state before the rollback operation occurs. + + + + diff -Nru lxd-3.0.2/dist/sqlite/ext/expert/expert1.test lxd-3.0.3/dist/sqlite/ext/expert/expert1.test --- lxd-3.0.2/dist/sqlite/ext/expert/expert1.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/expert/expert1.test 2018-11-22 20:54:16.000000000 +0000 @@ -332,7 +332,7 @@ reset_db -do_execsql_test 3.0 { +do_execsql_test 4.0 { CREATE TABLE t1(a, b); CREATE TABLE t2(c, d); @@ -342,7 +342,7 @@ WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<100) INSERT INTO t2 SELECT (i-1)/20, (i-1)/5 FROM s; } -do_candidates_test 3.1 { +do_candidates_test 4.1 { SELECT * FROM t1,t2 WHERE (b=? OR a=?) AND (c=? OR d=?) } { CREATE INDEX t1_idx_00000062 ON t1(b); -- stat1: 100 20 @@ -351,14 +351,14 @@ CREATE INDEX t2_idx_00000064 ON t2(d); -- stat1: 100 5 } -do_candidates_test 3.2 { +do_candidates_test 4.2 { SELECT * FROM t1,t2 WHERE a=? AND b=? AND c=? AND d=? } { CREATE INDEX t1_idx_000123a7 ON t1(a, b); -- stat1: 100 50 17 CREATE INDEX t2_idx_0001295b ON t2(c, d); -- stat1: 100 20 5 } -do_execsql_test 3.2 { +do_execsql_test 4.3 { CREATE INDEX t1_idx_00000061 ON t1(a); -- stat1: 100 50 CREATE INDEX t1_idx_00000062 ON t1(b); -- stat1: 100 20 CREATE INDEX t1_idx_000123a7 ON t1(a, b); -- stat1: 100 50 16 diff -Nru lxd-3.0.2/dist/sqlite/ext/fts3/fts3.c lxd-3.0.3/dist/sqlite/ext/fts3/fts3.c --- lxd-3.0.2/dist/sqlite/ext/fts3/fts3.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts3/fts3.c 2018-11-22 20:54:16.000000000 +0000 @@ -1821,7 +1821,7 @@ const char *zCsr = zNode; /* Cursor to iterate through node */ const char *zEnd = &zCsr[nNode];/* End of interior node buffer */ char *zBuffer = 0; /* Buffer to load terms into */ - int nAlloc = 0; /* Size of allocated buffer */ + i64 nAlloc = 0; /* Size of allocated buffer */ int isFirstTerm = 1; /* True when processing first term on page */ sqlite3_int64 iChild; /* Block id of child node to descend to */ @@ -1859,14 +1859,14 @@ zCsr += fts3GetVarint32(zCsr, &nSuffix); assert( nPrefix>=0 && nSuffix>=0 ); - if( &zCsr[nSuffix]>zEnd ){ + if( nPrefix>zCsr-zNode || nSuffix>zEnd-zCsr ){ rc = FTS_CORRUPT_VTAB; goto finish_scan; } - if( nPrefix+nSuffix>nAlloc ){ + if( (i64)nPrefix+nSuffix>nAlloc ){ char *zNew; - nAlloc = (nPrefix+nSuffix) * 2; - zNew = (char *)sqlite3_realloc(zBuffer, nAlloc); + nAlloc = ((i64)nPrefix+nSuffix) * 2; + zNew = (char *)sqlite3_realloc64(zBuffer, nAlloc); if( !zNew ){ rc = SQLITE_NOMEM; goto finish_scan; @@ -3808,7 +3808,7 @@ int rc = SQLITE_OK; UNUSED_PARAMETER(iSavepoint); assert( ((Fts3Table *)pVtab)->inTransaction ); - assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint ); + assert( ((Fts3Table *)pVtab)->mxSavepoint <= iSavepoint ); TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint ); if( ((Fts3Table *)pVtab)->bIgnoreSavepoint==0 ){ rc = fts3SyncMethod(pVtab); diff -Nru lxd-3.0.2/dist/sqlite/ext/fts3/fts3_write.c lxd-3.0.3/dist/sqlite/ext/fts3/fts3_write.c --- lxd-3.0.2/dist/sqlite/ext/fts3/fts3_write.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts3/fts3_write.c 2018-11-22 20:54:16.000000000 +0000 @@ -1374,15 +1374,19 @@ ** safe (no risk of overread) even if the node data is corrupted. */ pNext += fts3GetVarint32(pNext, &nPrefix); pNext += fts3GetVarint32(pNext, &nSuffix); - if( nPrefix<0 || nSuffix<=0 - || &pNext[nSuffix]>&pReader->aNode[pReader->nNode] + if( nSuffix<=0 + || (&pReader->aNode[pReader->nNode] - pNext)pReader->nTermAlloc ){ return FTS_CORRUPT_VTAB; } - if( nPrefix+nSuffix>pReader->nTermAlloc ){ - int nNew = (nPrefix+nSuffix)*2; - char *zNew = sqlite3_realloc(pReader->zTerm, nNew); + /* Both nPrefix and nSuffix were read by fts3GetVarint32() and so are + ** between 0 and 0x7FFFFFFF. But the sum of the two may cause integer + ** overflow - hence the (i64) casts. */ + if( (i64)nPrefix+nSuffix>(i64)pReader->nTermAlloc ){ + i64 nNew = ((i64)nPrefix+nSuffix)*2; + char *zNew = sqlite3_realloc64(pReader->zTerm, nNew); if( !zNew ){ return SQLITE_NOMEM; } @@ -1404,7 +1408,7 @@ ** b-tree node. And that the final byte of the doclist is 0x00. If either ** of these statements is untrue, then the data structure is corrupt. */ - if( &pReader->aDoclist[pReader->nDoclist]>&pReader->aNode[pReader->nNode] + if( (&pReader->aNode[pReader->nNode] - pReader->aDoclist)nDoclist || (pReader->nPopulate==0 && pReader->aDoclist[pReader->nDoclist-1]) ){ return FTS_CORRUPT_VTAB; @@ -3730,6 +3734,9 @@ } p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &nSuffix); + if( nPrefix>p->iOff || nSuffix>p->nNode-p->iOff ){ + return SQLITE_CORRUPT_VTAB; + } blobGrowBuffer(&p->term, nPrefix+nSuffix, &rc); if( rc==SQLITE_OK ){ memcpy(&p->term.a[nPrefix], &p->aNode[p->iOff], nSuffix); @@ -3737,6 +3744,9 @@ p->iOff += nSuffix; if( p->iChild==0 ){ p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &p->nDoclist); + if( (p->nNode-p->iOff)nDoclist ){ + return SQLITE_CORRUPT_VTAB; + } p->aDoclist = &p->aNode[p->iOff]; p->iOff += p->nDoclist; } @@ -3744,7 +3754,6 @@ } assert( p->iOff<=p->nNode ); - return rc; } diff -Nru lxd-3.0.2/dist/sqlite/ext/fts3/unicode/mkunicode.tcl lxd-3.0.3/dist/sqlite/ext/fts3/unicode/mkunicode.tcl --- lxd-3.0.2/dist/sqlite/ext/fts3/unicode/mkunicode.tcl 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts3/unicode/mkunicode.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -529,6 +529,263 @@ puts "\}" } +proc code {txt} { + set txt [string trimright $txt] + set txt [string trimleft $txt "\n"] + set n [expr {[string length $txt] - [string length [string trim $txt]]}] + set ret "" + foreach L [split $txt "\n"] { + append ret "[string range $L $n end]\n" + } + return [uplevel "subst -nocommands {$ret}"] +} + +proc intarray {lInt} { + set ret "" + set n [llength $lInt] + for {set i 0} {$i < $n} {incr i 10} { + append ret "\n " + foreach int [lrange $lInt $i [expr $i+9]] { + append ret [format "%-7s" "$int, "] + } + } + append ret "\n " + set ret +} + +proc categories_switch {Cvar first lSecond} { + upvar $Cvar C + set ret "" + append ret "case '$first':\n" + append ret " switch( zCat\[1\] ){\n" + foreach s $lSecond { + append ret " case '$s': aArray\[$C($first$s)\] = 1; break;\n" + } + append ret " case '*': \n" + foreach s $lSecond { + append ret " aArray\[$C($first$s)\] = 1;\n" + } + append ret " break;\n" + append ret " default: return 1;" + append ret " }\n" + append ret " break;\n" +} + +# Argument is a list. Each element of which is itself a list of two elements: +# +# * the codepoint +# * the category +# +# List elements are sorted in order of codepoint. +# +proc print_categories {lMap} { + set categories { + Cc Cf Cn Cs + Ll Lm Lo Lt Lu + Mc Me Mn + Nd Nl No + Pc Pd Pe Pf Pi Po Ps + Sc Sk Sm So + Zl Zp Zs + + LC Co + } + + for {set i 0} {$i < [llength $categories]} {incr i} { + set C([lindex $categories $i]) [expr 1+$i] + } + + set caseC [categories_switch C C {c f n s o}] + set caseL [categories_switch C L {l m o t u C}] + set caseM [categories_switch C M {c e n}] + set caseN [categories_switch C N {d l o}] + set caseP [categories_switch C P {c d e f i o s}] + set caseS [categories_switch C S {c k m o}] + set caseZ [categories_switch C Z {l p s}] + + set nCat [expr [llength [array names C]] + 1] + puts [code { + int sqlite3Fts5UnicodeNCat(void) { + return $nCat; + } + + int sqlite3Fts5UnicodeCatParse(const char *zCat, u8 *aArray){ + aArray[0] = 1; + switch( zCat[0] ){ + $caseC + $caseL + $caseM + $caseN + $caseP + $caseS + $caseZ + } + return 0; + } + }] + + set nRepeat 0 + set first [lindex $lMap 0 0] + set class [lindex $lMap 0 1] + set prev -1 + + set CASE(0) "Lu" + set CASE(1) "Ll" + + foreach m $lMap { + foreach {codepoint cl} $m {} + set codepoint [expr "0x$codepoint"] + if {$codepoint>=(1<<20)} continue + + set bNew 0 + if {$codepoint!=($prev+1)} { + set bNew 1 + } elseif { + $cl==$class || ($class=="LC" && $cl==$CASE([expr $nRepeat & 0x01])) + } { + incr nRepeat + } elseif {$class=="Lu" && $nRepeat==1 && $cl=="Ll"} { + set class LC + incr nRepeat + } else { + set bNew 1 + } + if {$bNew} { + lappend lEntries [list $first $class $nRepeat] + set nRepeat 1 + set first $codepoint + set class $cl + } + set prev $codepoint + } + if {$nRepeat>0} { + lappend lEntries [list $first $class $nRepeat] + } + + set aBlock [list 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + set aMap [list] + foreach e $lEntries { + foreach {cp class nRepeat} $e {} + set block [expr ($cp>>16)] + if {$block>0 && [lindex $aBlock $block]==0} { + for {set i 1} {$i<=$block} {incr i} { + if {[lindex $aBlock $i]==0} { + lset aBlock $i [llength $aMap] + } + } + } + lappend aMap [expr {$cp & 0xFFFF}] + lappend aData [expr {($nRepeat << 5) + $C($class)}] + } + for {set i 1} {$i<[llength $aBlock]} {incr i} { + if {[lindex $aBlock $i]==0} { + lset aBlock $i [llength $aMap] + } + } + + set aBlockArray [intarray $aBlock] + set aMapArray [intarray $aMap] + set aDataArray [intarray $aData] + puts [code { + static u16 aFts5UnicodeBlock[] = {$aBlockArray}; + static u16 aFts5UnicodeMap[] = {$aMapArray}; + static u16 aFts5UnicodeData[] = {$aDataArray}; + + int sqlite3Fts5UnicodeCategory(int iCode) { + int iRes = -1; + int iHi; + int iLo; + int ret; + u16 iKey; + + if( iCode>=(1<<20) ){ + return 0; + } + iLo = aFts5UnicodeBlock[(iCode>>16)]; + iHi = aFts5UnicodeBlock[1+(iCode>>16)]; + iKey = (iCode & 0xFFFF); + while( iHi>iLo ){ + int iTest = (iHi + iLo) / 2; + assert( iTest>=iLo && iTest=aFts5UnicodeMap[iTest] ){ + iRes = iTest; + iLo = iTest+1; + }else{ + iHi = iTest; + } + } + + if( iRes<0 ) return 0; + if( iKey>=(aFts5UnicodeMap[iRes]+(aFts5UnicodeData[iRes]>>5)) ) return 0; + ret = aFts5UnicodeData[iRes] & 0x1F; + if( ret!=$C(LC) ) return ret; + return ((iKey - aFts5UnicodeMap[iRes]) & 0x01) ? $C(Ll) : $C(Lu); + } + + void sqlite3Fts5UnicodeAscii(u8 *aArray, u8 *aAscii){ + int i = 0; + int iTbl = 0; + while( i<128 ){ + int bToken = aArray[ aFts5UnicodeData[iTbl] & 0x1F ]; + int n = (aFts5UnicodeData[iTbl] >> 5) + i; + for(; i<128 && i" puts "" puts "int main(int argc, char **argv)\{" - puts " int r1, r2;" + puts " int r1, r2, r3;" puts " int code;" + puts " r3 = 0;" puts " r1 = isalnum_test(&code);" puts " if( r1 ) printf(\"isalnum(): Problem with code %d\\n\",code);" puts " else printf(\"isalnum(): test passed\\n\");" puts " r2 = fold_test(&code);" puts " if( r2 ) printf(\"fold(): Problem with code %d\\n\",code);" puts " else printf(\"fold(): test passed\\n\");" - puts " return (r1 || r2);" + if {$::generate_fts5_code} { + puts " r3 = categories_test(&code);" + puts " if( r3 ) printf(\"categories(): Problem with code %d\\n\",code);" + puts " else printf(\"categories(): test passed\\n\");" + } + puts " return (r1 || r2 || r3);" puts "\}" } @@ -651,10 +914,18 @@ print_fileheader +if {$::generate_test_code} { + puts "typedef unsigned short int u16;" + puts "typedef unsigned char u8;" + puts "#include " +} + # Print the isalnum() function to stdout. # set lRange [an_load_separator_ranges] -print_isalnum ${function_prefix}UnicodeIsalnum $lRange +if {$generate_fts5_code==0} { + print_isalnum ${function_prefix}UnicodeIsalnum $lRange +} # Leave a gap between the two generated C functions. # @@ -677,12 +948,21 @@ # print_fold ${function_prefix}UnicodeFold +if {$generate_fts5_code} { + puts "" + puts "" + print_categories [cc_load_unicodedata_text ${unicodedata.txt}] +} + # Print the test routines and main() function to stdout, if -test # was specified. # if {$::generate_test_code} { - print_test_isalnum ${function_prefix}UnicodeIsalnum $lRange + if {$generate_fts5_code==0} { + print_test_isalnum ${function_prefix}UnicodeIsalnum $lRange + } print_fold_test ${function_prefix}UnicodeFold $mappings + print_test_categories [cc_load_unicodedata_text ${unicodedata.txt}] print_test_main } diff -Nru lxd-3.0.2/dist/sqlite/ext/fts3/unicode/parseunicode.tcl lxd-3.0.3/dist/sqlite/ext/fts3/unicode/parseunicode.tcl --- lxd-3.0.2/dist/sqlite/ext/fts3/unicode/parseunicode.tcl 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts3/unicode/parseunicode.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -143,4 +143,40 @@ } } +proc cc_load_unicodedata_text {zName} { + set fd [open $zName] + set lField { + code + character_name + general_category + canonical_combining_classes + bidirectional_category + character_decomposition_mapping + decimal_digit_value + digit_value + numeric_value + mirrored + unicode_1_name + iso10646_comment_field + uppercase_mapping + lowercase_mapping + titlecase_mapping + } + set lRet [list] + + while { ![eof $fd] } { + set line [gets $fd] + if {$line == ""} continue + + set fields [split $line ";"] + if {[llength $fields] != [llength $lField]} { error "parse error: $line" } + foreach $lField $fields {} + + lappend lRet [list $code $general_category] + } + + close $fd + set lRet +} + diff -Nru lxd-3.0.2/dist/sqlite/ext/fts5/fts5_expr.c lxd-3.0.3/dist/sqlite/ext/fts5/fts5_expr.c --- lxd-3.0.2/dist/sqlite/ext/fts5/fts5_expr.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts5/fts5_expr.c 2018-11-22 20:54:16.000000000 +0000 @@ -36,6 +36,7 @@ #include void sqlite3Fts5ParserTrace(FILE*, char*); #endif +int sqlite3Fts5ParserFallback(int); struct Fts5Expr { @@ -2540,14 +2541,19 @@ sqlite3_value **apVal /* Function arguments */ ){ int iCode; + u8 aArr[32]; if( nArg!=1 ){ sqlite3_result_error(pCtx, "wrong number of arguments to function fts5_isalnum", -1 ); return; } + memset(aArr, 0, sizeof(aArr)); + sqlite3Fts5UnicodeCatParse("L*", aArr); + sqlite3Fts5UnicodeCatParse("N*", aArr); + sqlite3Fts5UnicodeCatParse("Co", aArr); iCode = sqlite3_value_int(apVal[0]); - sqlite3_result_int(pCtx, sqlite3Fts5UnicodeIsalnum(iCode)); + sqlite3_result_int(pCtx, aArr[sqlite3Fts5UnicodeCategory(iCode)]); } static void fts5ExprFold( @@ -2591,10 +2597,12 @@ rc = sqlite3_create_function(db, p->z, -1, SQLITE_UTF8, pCtx, p->x, 0, 0); } - /* Avoid a warning indicating that sqlite3Fts5ParserTrace() is unused */ + /* Avoid warnings indicating that sqlite3Fts5ParserTrace() and + ** sqlite3Fts5ParserFallback() are unused */ #ifndef NDEBUG (void)sqlite3Fts5ParserTrace; #endif + (void)sqlite3Fts5ParserFallback; return rc; } diff -Nru lxd-3.0.2/dist/sqlite/ext/fts5/fts5.h lxd-3.0.3/dist/sqlite/ext/fts5/fts5.h --- lxd-3.0.2/dist/sqlite/ext/fts5/fts5.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts5/fts5.h 2018-11-22 20:54:16.000000000 +0000 @@ -444,7 +444,7 @@ ** This way, even if the tokenizer does not provide synonyms ** when tokenizing query text (it should not - to do would be ** inefficient), it doesn't matter if the user queries for -** 'first + place' or '1st + place', as there are entires in the +** 'first + place' or '1st + place', as there are entries in the ** FTS index corresponding to both forms of the first token. ** ** @@ -472,7 +472,7 @@ ** extra data to the FTS index or require FTS5 to query for multiple terms, ** so it is efficient in terms of disk space and query speed. However, it ** does not support prefix queries very well. If, as suggested above, the -** token "first" is subsituted for "1st" by the tokenizer, then the query: +** token "first" is substituted for "1st" by the tokenizer, then the query: ** ** ** ... MATCH '1s*' diff -Nru lxd-3.0.2/dist/sqlite/ext/fts5/fts5_index.c lxd-3.0.3/dist/sqlite/ext/fts5/fts5_index.c --- lxd-3.0.2/dist/sqlite/ext/fts5/fts5_index.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts5/fts5_index.c 2018-11-22 20:54:16.000000000 +0000 @@ -5261,7 +5261,10 @@ for(i=0; i=nByte ) return 0; /* Input contains fewer than nChar chars */ if( (unsigned char)p[n++]>=0xc0 ){ - while( (p[n] & 0xc0)==0x80 ) n++; + while( (p[n] & 0xc0)==0x80 ){ + n++; + if( n>=nByte ) break; + } } } return n; diff -Nru lxd-3.0.2/dist/sqlite/ext/fts5/fts5Int.h lxd-3.0.3/dist/sqlite/ext/fts5/fts5Int.h --- lxd-3.0.2/dist/sqlite/ext/fts5/fts5Int.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts5/fts5Int.h 2018-11-22 20:54:16.000000000 +0000 @@ -784,9 +784,12 @@ /************************************************************************** ** Interface to automatically generated code in fts5_unicode2.c. */ -int sqlite3Fts5UnicodeIsalnum(int c); int sqlite3Fts5UnicodeIsdiacritic(int c); int sqlite3Fts5UnicodeFold(int c, int bRemoveDiacritic); + +int sqlite3Fts5UnicodeCatParse(const char*, u8*); +int sqlite3Fts5UnicodeCategory(int iCode); +void sqlite3Fts5UnicodeAscii(u8*, u8*); /* ** End of interface to code in fts5_unicode2.c. **************************************************************************/ diff -Nru lxd-3.0.2/dist/sqlite/ext/fts5/fts5_main.c lxd-3.0.3/dist/sqlite/ext/fts5/fts5_main.c --- lxd-3.0.2/dist/sqlite/ext/fts5/fts5_main.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts5/fts5_main.c 2018-11-22 20:54:16.000000000 +0000 @@ -280,7 +280,7 @@ case FTS5_SAVEPOINT: assert( p->ts.eState==1 ); assert( iSavepoint>=0 ); - assert( iSavepoint>p->ts.iSavepoint ); + assert( iSavepoint>=p->ts.iSavepoint ); p->ts.iSavepoint = iSavepoint; break; @@ -1205,6 +1205,13 @@ assert( nVal==0 && pMatch==0 && bOrderByRank==0 && bDesc==0 ); assert( pCsr->iLastRowid==LARGEST_INT64 ); assert( pCsr->iFirstRowid==SMALLEST_INT64 ); + if( pTab->pSortCsr->bDesc ){ + pCsr->iLastRowid = pTab->pSortCsr->iFirstRowid; + pCsr->iFirstRowid = pTab->pSortCsr->iLastRowid; + }else{ + pCsr->iLastRowid = pTab->pSortCsr->iLastRowid; + pCsr->iFirstRowid = pTab->pSortCsr->iFirstRowid; + } pCsr->ePlan = FTS5_PLAN_SOURCE; pCsr->pExpr = pTab->pSortCsr->pExpr; rc = fts5CursorFirst(pTab, pCsr, bDesc); diff -Nru lxd-3.0.2/dist/sqlite/ext/fts5/fts5_tokenize.c lxd-3.0.3/dist/sqlite/ext/fts5/fts5_tokenize.c --- lxd-3.0.2/dist/sqlite/ext/fts5/fts5_tokenize.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts5/fts5_tokenize.c 2018-11-22 20:54:16.000000000 +0000 @@ -237,6 +237,8 @@ int bRemoveDiacritic; /* True if remove_diacritics=1 is set */ int nException; int *aiException; + + unsigned char aCategory[32]; /* True for token char categories */ }; static int fts5UnicodeAddExceptions( @@ -261,7 +263,7 @@ if( iCode<128 ){ p->aTokenChar[iCode] = (unsigned char)bTokenChars; }else{ - bToken = sqlite3Fts5UnicodeIsalnum(iCode); + bToken = p->aCategory[sqlite3Fts5UnicodeCategory(iCode)]; assert( (bToken==0 || bToken==1) ); assert( (bTokenChars==0 || bTokenChars==1) ); if( bToken!=bTokenChars && sqlite3Fts5UnicodeIsdiacritic(iCode)==0 ){ @@ -322,6 +324,21 @@ return; } +static int unicodeSetCategories(Unicode61Tokenizer *p, const char *zCat){ + const char *z = zCat; + + while( *z ){ + while( *z==' ' || *z=='\t' ) z++; + if( *z && sqlite3Fts5UnicodeCatParse(z, p->aCategory) ){ + return SQLITE_ERROR; + } + while( *z!=' ' && *z!='\t' && *z!='\0' ) z++; + } + + sqlite3Fts5UnicodeAscii(p->aCategory, p->aTokenChar); + return SQLITE_OK; +} + /* ** Create a "unicode61" tokenizer. */ @@ -340,15 +357,28 @@ }else{ p = (Unicode61Tokenizer*)sqlite3_malloc(sizeof(Unicode61Tokenizer)); if( p ){ + const char *zCat = "L* N* Co"; int i; memset(p, 0, sizeof(Unicode61Tokenizer)); - memcpy(p->aTokenChar, aAsciiTokenChar, sizeof(aAsciiTokenChar)); + p->bRemoveDiacritic = 1; p->nFold = 64; p->aFold = sqlite3_malloc(p->nFold * sizeof(char)); if( p->aFold==0 ){ rc = SQLITE_NOMEM; } + + /* Search for a "categories" argument */ + for(i=0; rc==SQLITE_OK && iaCategory[sqlite3Fts5UnicodeCategory(iCode)] + ^ fts5UnicodeIsException(p, iCode) + ); } static int fts5UnicodeTokenize( diff -Nru lxd-3.0.2/dist/sqlite/ext/fts5/fts5_unicode2.c lxd-3.0.3/dist/sqlite/ext/fts5/fts5_unicode2.c --- lxd-3.0.2/dist/sqlite/ext/fts5/fts5_unicode2.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/fts5/fts5_unicode2.c 2018-11-22 20:54:16.000000000 +0000 @@ -18,135 +18,6 @@ #include -/* -** Return true if the argument corresponds to a unicode codepoint -** classified as either a letter or a number. Otherwise false. -** -** The results are undefined if the value passed to this function -** is less than zero. -*/ -int sqlite3Fts5UnicodeIsalnum(int c){ - /* Each unsigned integer in the following array corresponds to a contiguous - ** range of unicode codepoints that are not either letters or numbers (i.e. - ** codepoints for which this function should return 0). - ** - ** The most significant 22 bits in each 32-bit value contain the first - ** codepoint in the range. The least significant 10 bits are used to store - ** the size of the range (always at least 1). In other words, the value - ** ((C<<22) + N) represents a range of N codepoints starting with codepoint - ** C. It is not possible to represent a range larger than 1023 codepoints - ** using this format. - */ - static const unsigned int aEntry[] = { - 0x00000030, 0x0000E807, 0x00016C06, 0x0001EC2F, 0x0002AC07, - 0x0002D001, 0x0002D803, 0x0002EC01, 0x0002FC01, 0x00035C01, - 0x0003DC01, 0x000B0804, 0x000B480E, 0x000B9407, 0x000BB401, - 0x000BBC81, 0x000DD401, 0x000DF801, 0x000E1002, 0x000E1C01, - 0x000FD801, 0x00120808, 0x00156806, 0x00162402, 0x00163C01, - 0x00164437, 0x0017CC02, 0x00180005, 0x00181816, 0x00187802, - 0x00192C15, 0x0019A804, 0x0019C001, 0x001B5001, 0x001B580F, - 0x001B9C07, 0x001BF402, 0x001C000E, 0x001C3C01, 0x001C4401, - 0x001CC01B, 0x001E980B, 0x001FAC09, 0x001FD804, 0x00205804, - 0x00206C09, 0x00209403, 0x0020A405, 0x0020C00F, 0x00216403, - 0x00217801, 0x0023901B, 0x00240004, 0x0024E803, 0x0024F812, - 0x00254407, 0x00258804, 0x0025C001, 0x00260403, 0x0026F001, - 0x0026F807, 0x00271C02, 0x00272C03, 0x00275C01, 0x00278802, - 0x0027C802, 0x0027E802, 0x00280403, 0x0028F001, 0x0028F805, - 0x00291C02, 0x00292C03, 0x00294401, 0x0029C002, 0x0029D401, - 0x002A0403, 0x002AF001, 0x002AF808, 0x002B1C03, 0x002B2C03, - 0x002B8802, 0x002BC002, 0x002C0403, 0x002CF001, 0x002CF807, - 0x002D1C02, 0x002D2C03, 0x002D5802, 0x002D8802, 0x002DC001, - 0x002E0801, 0x002EF805, 0x002F1803, 0x002F2804, 0x002F5C01, - 0x002FCC08, 0x00300403, 0x0030F807, 0x00311803, 0x00312804, - 0x00315402, 0x00318802, 0x0031FC01, 0x00320802, 0x0032F001, - 0x0032F807, 0x00331803, 0x00332804, 0x00335402, 0x00338802, - 0x00340802, 0x0034F807, 0x00351803, 0x00352804, 0x00355C01, - 0x00358802, 0x0035E401, 0x00360802, 0x00372801, 0x00373C06, - 0x00375801, 0x00376008, 0x0037C803, 0x0038C401, 0x0038D007, - 0x0038FC01, 0x00391C09, 0x00396802, 0x003AC401, 0x003AD006, - 0x003AEC02, 0x003B2006, 0x003C041F, 0x003CD00C, 0x003DC417, - 0x003E340B, 0x003E6424, 0x003EF80F, 0x003F380D, 0x0040AC14, - 0x00412806, 0x00415804, 0x00417803, 0x00418803, 0x00419C07, - 0x0041C404, 0x0042080C, 0x00423C01, 0x00426806, 0x0043EC01, - 0x004D740C, 0x004E400A, 0x00500001, 0x0059B402, 0x005A0001, - 0x005A6C02, 0x005BAC03, 0x005C4803, 0x005CC805, 0x005D4802, - 0x005DC802, 0x005ED023, 0x005F6004, 0x005F7401, 0x0060000F, - 0x0062A401, 0x0064800C, 0x0064C00C, 0x00650001, 0x00651002, - 0x0066C011, 0x00672002, 0x00677822, 0x00685C05, 0x00687802, - 0x0069540A, 0x0069801D, 0x0069FC01, 0x006A8007, 0x006AA006, - 0x006C0005, 0x006CD011, 0x006D6823, 0x006E0003, 0x006E840D, - 0x006F980E, 0x006FF004, 0x00709014, 0x0070EC05, 0x0071F802, - 0x00730008, 0x00734019, 0x0073B401, 0x0073C803, 0x00770027, - 0x0077F004, 0x007EF401, 0x007EFC03, 0x007F3403, 0x007F7403, - 0x007FB403, 0x007FF402, 0x00800065, 0x0081A806, 0x0081E805, - 0x00822805, 0x0082801A, 0x00834021, 0x00840002, 0x00840C04, - 0x00842002, 0x00845001, 0x00845803, 0x00847806, 0x00849401, - 0x00849C01, 0x0084A401, 0x0084B801, 0x0084E802, 0x00850005, - 0x00852804, 0x00853C01, 0x00864264, 0x00900027, 0x0091000B, - 0x0092704E, 0x00940200, 0x009C0475, 0x009E53B9, 0x00AD400A, - 0x00B39406, 0x00B3BC03, 0x00B3E404, 0x00B3F802, 0x00B5C001, - 0x00B5FC01, 0x00B7804F, 0x00B8C00C, 0x00BA001A, 0x00BA6C59, - 0x00BC00D6, 0x00BFC00C, 0x00C00005, 0x00C02019, 0x00C0A807, - 0x00C0D802, 0x00C0F403, 0x00C26404, 0x00C28001, 0x00C3EC01, - 0x00C64002, 0x00C6580A, 0x00C70024, 0x00C8001F, 0x00C8A81E, - 0x00C94001, 0x00C98020, 0x00CA2827, 0x00CB003F, 0x00CC0100, - 0x01370040, 0x02924037, 0x0293F802, 0x02983403, 0x0299BC10, - 0x029A7C01, 0x029BC008, 0x029C0017, 0x029C8002, 0x029E2402, - 0x02A00801, 0x02A01801, 0x02A02C01, 0x02A08C09, 0x02A0D804, - 0x02A1D004, 0x02A20002, 0x02A2D011, 0x02A33802, 0x02A38012, - 0x02A3E003, 0x02A4980A, 0x02A51C0D, 0x02A57C01, 0x02A60004, - 0x02A6CC1B, 0x02A77802, 0x02A8A40E, 0x02A90C01, 0x02A93002, - 0x02A97004, 0x02A9DC03, 0x02A9EC01, 0x02AAC001, 0x02AAC803, - 0x02AADC02, 0x02AAF802, 0x02AB0401, 0x02AB7802, 0x02ABAC07, - 0x02ABD402, 0x02AF8C0B, 0x03600001, 0x036DFC02, 0x036FFC02, - 0x037FFC01, 0x03EC7801, 0x03ECA401, 0x03EEC810, 0x03F4F802, - 0x03F7F002, 0x03F8001A, 0x03F88007, 0x03F8C023, 0x03F95013, - 0x03F9A004, 0x03FBFC01, 0x03FC040F, 0x03FC6807, 0x03FCEC06, - 0x03FD6C0B, 0x03FF8007, 0x03FFA007, 0x03FFE405, 0x04040003, - 0x0404DC09, 0x0405E411, 0x0406400C, 0x0407402E, 0x040E7C01, - 0x040F4001, 0x04215C01, 0x04247C01, 0x0424FC01, 0x04280403, - 0x04281402, 0x04283004, 0x0428E003, 0x0428FC01, 0x04294009, - 0x0429FC01, 0x042CE407, 0x04400003, 0x0440E016, 0x04420003, - 0x0442C012, 0x04440003, 0x04449C0E, 0x04450004, 0x04460003, - 0x0446CC0E, 0x04471404, 0x045AAC0D, 0x0491C004, 0x05BD442E, - 0x05BE3C04, 0x074000F6, 0x07440027, 0x0744A4B5, 0x07480046, - 0x074C0057, 0x075B0401, 0x075B6C01, 0x075BEC01, 0x075C5401, - 0x075CD401, 0x075D3C01, 0x075DBC01, 0x075E2401, 0x075EA401, - 0x075F0C01, 0x07BBC002, 0x07C0002C, 0x07C0C064, 0x07C2800F, - 0x07C2C40E, 0x07C3040F, 0x07C3440F, 0x07C4401F, 0x07C4C03C, - 0x07C5C02B, 0x07C7981D, 0x07C8402B, 0x07C90009, 0x07C94002, - 0x07CC0021, 0x07CCC006, 0x07CCDC46, 0x07CE0014, 0x07CE8025, - 0x07CF1805, 0x07CF8011, 0x07D0003F, 0x07D10001, 0x07D108B6, - 0x07D3E404, 0x07D4003E, 0x07D50004, 0x07D54018, 0x07D7EC46, - 0x07D9140B, 0x07DA0046, 0x07DC0074, 0x38000401, 0x38008060, - 0x380400F0, - }; - static const unsigned int aAscii[4] = { - 0xFFFFFFFF, 0xFC00FFFF, 0xF8000001, 0xF8000001, - }; - - if( (unsigned int)c<128 ){ - return ( (aAscii[c >> 5] & (1 << (c & 0x001F)))==0 ); - }else if( (unsigned int)c<(1<<22) ){ - unsigned int key = (((unsigned int)c)<<10) | 0x000003FF; - int iRes = 0; - int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1; - int iLo = 0; - while( iHi>=iLo ){ - int iTest = (iHi + iLo) / 2; - if( key >= aEntry[iTest] ){ - iRes = iTest; - iLo = iTest+1; - }else{ - iHi = iTest-1; - } - } - assert( aEntry[0]=aEntry[iRes] ); - return (((unsigned int)c) >= ((aEntry[iRes]>>10) + (aEntry[iRes]&0x3FF))); - } - return 1; -} /* @@ -358,3 +229,536 @@ return ret; } + + +#if 0 +int sqlite3Fts5UnicodeNCat(void) { + return 32; +} +#endif + +int sqlite3Fts5UnicodeCatParse(const char *zCat, u8 *aArray){ + aArray[0] = 1; + switch( zCat[0] ){ + case 'C': + switch( zCat[1] ){ + case 'c': aArray[1] = 1; break; + case 'f': aArray[2] = 1; break; + case 'n': aArray[3] = 1; break; + case 's': aArray[4] = 1; break; + case 'o': aArray[31] = 1; break; + case '*': + aArray[1] = 1; + aArray[2] = 1; + aArray[3] = 1; + aArray[4] = 1; + aArray[31] = 1; + break; + default: return 1; } + break; + + case 'L': + switch( zCat[1] ){ + case 'l': aArray[5] = 1; break; + case 'm': aArray[6] = 1; break; + case 'o': aArray[7] = 1; break; + case 't': aArray[8] = 1; break; + case 'u': aArray[9] = 1; break; + case 'C': aArray[30] = 1; break; + case '*': + aArray[5] = 1; + aArray[6] = 1; + aArray[7] = 1; + aArray[8] = 1; + aArray[9] = 1; + aArray[30] = 1; + break; + default: return 1; } + break; + + case 'M': + switch( zCat[1] ){ + case 'c': aArray[10] = 1; break; + case 'e': aArray[11] = 1; break; + case 'n': aArray[12] = 1; break; + case '*': + aArray[10] = 1; + aArray[11] = 1; + aArray[12] = 1; + break; + default: return 1; } + break; + + case 'N': + switch( zCat[1] ){ + case 'd': aArray[13] = 1; break; + case 'l': aArray[14] = 1; break; + case 'o': aArray[15] = 1; break; + case '*': + aArray[13] = 1; + aArray[14] = 1; + aArray[15] = 1; + break; + default: return 1; } + break; + + case 'P': + switch( zCat[1] ){ + case 'c': aArray[16] = 1; break; + case 'd': aArray[17] = 1; break; + case 'e': aArray[18] = 1; break; + case 'f': aArray[19] = 1; break; + case 'i': aArray[20] = 1; break; + case 'o': aArray[21] = 1; break; + case 's': aArray[22] = 1; break; + case '*': + aArray[16] = 1; + aArray[17] = 1; + aArray[18] = 1; + aArray[19] = 1; + aArray[20] = 1; + aArray[21] = 1; + aArray[22] = 1; + break; + default: return 1; } + break; + + case 'S': + switch( zCat[1] ){ + case 'c': aArray[23] = 1; break; + case 'k': aArray[24] = 1; break; + case 'm': aArray[25] = 1; break; + case 'o': aArray[26] = 1; break; + case '*': + aArray[23] = 1; + aArray[24] = 1; + aArray[25] = 1; + aArray[26] = 1; + break; + default: return 1; } + break; + + case 'Z': + switch( zCat[1] ){ + case 'l': aArray[27] = 1; break; + case 'p': aArray[28] = 1; break; + case 's': aArray[29] = 1; break; + case '*': + aArray[27] = 1; + aArray[28] = 1; + aArray[29] = 1; + break; + default: return 1; } + break; + + } + return 0; +} + +static u16 aFts5UnicodeBlock[] = { + 0, 1471, 1753, 1760, 1760, 1760, 1760, 1760, 1760, 1760, + 1760, 1760, 1760, 1760, 1760, 1763, 1765, + }; +static u16 aFts5UnicodeMap[] = { + 0, 32, 33, 36, 37, 40, 41, 42, 43, 44, + 45, 46, 48, 58, 60, 63, 65, 91, 92, 93, + 94, 95, 96, 97, 123, 124, 125, 126, 127, 160, + 161, 162, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 180, 181, 182, 184, 185, + 186, 187, 188, 191, 192, 215, 216, 223, 247, 248, + 256, 312, 313, 329, 330, 377, 383, 385, 387, 388, + 391, 394, 396, 398, 402, 403, 405, 406, 409, 412, + 414, 415, 417, 418, 423, 427, 428, 431, 434, 436, + 437, 440, 442, 443, 444, 446, 448, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 477, 478, 496, + 497, 498, 499, 500, 503, 505, 506, 564, 570, 572, + 573, 575, 577, 580, 583, 584, 592, 660, 661, 688, + 706, 710, 722, 736, 741, 748, 749, 750, 751, 768, + 880, 884, 885, 886, 890, 891, 894, 900, 902, 903, + 904, 908, 910, 912, 913, 931, 940, 975, 977, 978, + 981, 984, 1008, 1012, 1014, 1015, 1018, 1020, 1021, 1072, + 1120, 1154, 1155, 1160, 1162, 1217, 1231, 1232, 1329, 1369, + 1370, 1377, 1417, 1418, 1423, 1425, 1470, 1471, 1472, 1473, + 1475, 1476, 1478, 1479, 1488, 1520, 1523, 1536, 1542, 1545, + 1547, 1548, 1550, 1552, 1563, 1566, 1568, 1600, 1601, 1611, + 1632, 1642, 1646, 1648, 1649, 1748, 1749, 1750, 1757, 1758, + 1759, 1765, 1767, 1769, 1770, 1774, 1776, 1786, 1789, 1791, + 1792, 1807, 1808, 1809, 1810, 1840, 1869, 1958, 1969, 1984, + 1994, 2027, 2036, 2038, 2039, 2042, 2048, 2070, 2074, 2075, + 2084, 2085, 2088, 2089, 2096, 2112, 2137, 2142, 2208, 2210, + 2276, 2304, 2307, 2308, 2362, 2363, 2364, 2365, 2366, 2369, + 2377, 2381, 2382, 2384, 2385, 2392, 2402, 2404, 2406, 2416, + 2417, 2418, 2425, 2433, 2434, 2437, 2447, 2451, 2474, 2482, + 2486, 2492, 2493, 2494, 2497, 2503, 2507, 2509, 2510, 2519, + 2524, 2527, 2530, 2534, 2544, 2546, 2548, 2554, 2555, 2561, + 2563, 2565, 2575, 2579, 2602, 2610, 2613, 2616, 2620, 2622, + 2625, 2631, 2635, 2641, 2649, 2654, 2662, 2672, 2674, 2677, + 2689, 2691, 2693, 2703, 2707, 2730, 2738, 2741, 2748, 2749, + 2750, 2753, 2759, 2761, 2763, 2765, 2768, 2784, 2786, 2790, + 2800, 2801, 2817, 2818, 2821, 2831, 2835, 2858, 2866, 2869, + 2876, 2877, 2878, 2879, 2880, 2881, 2887, 2891, 2893, 2902, + 2903, 2908, 2911, 2914, 2918, 2928, 2929, 2930, 2946, 2947, + 2949, 2958, 2962, 2969, 2972, 2974, 2979, 2984, 2990, 3006, + 3008, 3009, 3014, 3018, 3021, 3024, 3031, 3046, 3056, 3059, + 3065, 3066, 3073, 3077, 3086, 3090, 3114, 3125, 3133, 3134, + 3137, 3142, 3146, 3157, 3160, 3168, 3170, 3174, 3192, 3199, + 3202, 3205, 3214, 3218, 3242, 3253, 3260, 3261, 3262, 3263, + 3264, 3270, 3271, 3274, 3276, 3285, 3294, 3296, 3298, 3302, + 3313, 3330, 3333, 3342, 3346, 3389, 3390, 3393, 3398, 3402, + 3405, 3406, 3415, 3424, 3426, 3430, 3440, 3449, 3450, 3458, + 3461, 3482, 3507, 3517, 3520, 3530, 3535, 3538, 3542, 3544, + 3570, 3572, 3585, 3633, 3634, 3636, 3647, 3648, 3654, 3655, + 3663, 3664, 3674, 3713, 3716, 3719, 3722, 3725, 3732, 3737, + 3745, 3749, 3751, 3754, 3757, 3761, 3762, 3764, 3771, 3773, + 3776, 3782, 3784, 3792, 3804, 3840, 3841, 3844, 3859, 3860, + 3861, 3864, 3866, 3872, 3882, 3892, 3893, 3894, 3895, 3896, + 3897, 3898, 3899, 3900, 3901, 3902, 3904, 3913, 3953, 3967, + 3968, 3973, 3974, 3976, 3981, 3993, 4030, 4038, 4039, 4046, + 4048, 4053, 4057, 4096, 4139, 4141, 4145, 4146, 4152, 4153, + 4155, 4157, 4159, 4160, 4170, 4176, 4182, 4184, 4186, 4190, + 4193, 4194, 4197, 4199, 4206, 4209, 4213, 4226, 4227, 4229, + 4231, 4237, 4238, 4239, 4240, 4250, 4253, 4254, 4256, 4295, + 4301, 4304, 4347, 4348, 4349, 4682, 4688, 4696, 4698, 4704, + 4746, 4752, 4786, 4792, 4800, 4802, 4808, 4824, 4882, 4888, + 4957, 4960, 4969, 4992, 5008, 5024, 5120, 5121, 5741, 5743, + 5760, 5761, 5787, 5788, 5792, 5867, 5870, 5888, 5902, 5906, + 5920, 5938, 5941, 5952, 5970, 5984, 5998, 6002, 6016, 6068, + 6070, 6071, 6078, 6086, 6087, 6089, 6100, 6103, 6104, 6107, + 6108, 6109, 6112, 6128, 6144, 6150, 6151, 6155, 6158, 6160, + 6176, 6211, 6212, 6272, 6313, 6314, 6320, 6400, 6432, 6435, + 6439, 6441, 6448, 6450, 6451, 6457, 6464, 6468, 6470, 6480, + 6512, 6528, 6576, 6593, 6600, 6608, 6618, 6622, 6656, 6679, + 6681, 6686, 6688, 6741, 6742, 6743, 6744, 6752, 6753, 6754, + 6755, 6757, 6765, 6771, 6783, 6784, 6800, 6816, 6823, 6824, + 6912, 6916, 6917, 6964, 6965, 6966, 6971, 6972, 6973, 6978, + 6979, 6981, 6992, 7002, 7009, 7019, 7028, 7040, 7042, 7043, + 7073, 7074, 7078, 7080, 7082, 7083, 7084, 7086, 7088, 7098, + 7142, 7143, 7144, 7146, 7149, 7150, 7151, 7154, 7164, 7168, + 7204, 7212, 7220, 7222, 7227, 7232, 7245, 7248, 7258, 7288, + 7294, 7360, 7376, 7379, 7380, 7393, 7394, 7401, 7405, 7406, + 7410, 7412, 7413, 7424, 7468, 7531, 7544, 7545, 7579, 7616, + 7676, 7680, 7830, 7838, 7936, 7944, 7952, 7960, 7968, 7976, + 7984, 7992, 8000, 8008, 8016, 8025, 8027, 8029, 8031, 8033, + 8040, 8048, 8064, 8072, 8080, 8088, 8096, 8104, 8112, 8118, + 8120, 8124, 8125, 8126, 8127, 8130, 8134, 8136, 8140, 8141, + 8144, 8150, 8152, 8157, 8160, 8168, 8173, 8178, 8182, 8184, + 8188, 8189, 8192, 8203, 8208, 8214, 8216, 8217, 8218, 8219, + 8221, 8222, 8223, 8224, 8232, 8233, 8234, 8239, 8240, 8249, + 8250, 8251, 8255, 8257, 8260, 8261, 8262, 8263, 8274, 8275, + 8276, 8277, 8287, 8288, 8298, 8304, 8305, 8308, 8314, 8317, + 8318, 8319, 8320, 8330, 8333, 8334, 8336, 8352, 8400, 8413, + 8417, 8418, 8421, 8448, 8450, 8451, 8455, 8456, 8458, 8459, + 8462, 8464, 8467, 8468, 8469, 8470, 8472, 8473, 8478, 8484, + 8485, 8486, 8487, 8488, 8489, 8490, 8494, 8495, 8496, 8500, + 8501, 8505, 8506, 8508, 8510, 8512, 8517, 8519, 8522, 8523, + 8524, 8526, 8527, 8528, 8544, 8579, 8581, 8585, 8592, 8597, + 8602, 8604, 8608, 8609, 8611, 8612, 8614, 8615, 8622, 8623, + 8654, 8656, 8658, 8659, 8660, 8661, 8692, 8960, 8968, 8972, + 8992, 8994, 9001, 9002, 9003, 9084, 9085, 9115, 9140, 9180, + 9186, 9216, 9280, 9312, 9372, 9450, 9472, 9655, 9656, 9665, + 9666, 9720, 9728, 9839, 9840, 9985, 10088, 10089, 10090, 10091, + 10092, 10093, 10094, 10095, 10096, 10097, 10098, 10099, 10100, 10101, + 10102, 10132, 10176, 10181, 10182, 10183, 10214, 10215, 10216, 10217, + 10218, 10219, 10220, 10221, 10222, 10223, 10224, 10240, 10496, 10627, + 10628, 10629, 10630, 10631, 10632, 10633, 10634, 10635, 10636, 10637, + 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646, 10647, + 10648, 10649, 10712, 10713, 10714, 10715, 10716, 10748, 10749, 10750, + 11008, 11056, 11077, 11079, 11088, 11264, 11312, 11360, 11363, 11365, + 11367, 11374, 11377, 11378, 11380, 11381, 11383, 11388, 11390, 11393, + 11394, 11492, 11493, 11499, 11503, 11506, 11513, 11517, 11518, 11520, + 11559, 11565, 11568, 11631, 11632, 11647, 11648, 11680, 11688, 11696, + 11704, 11712, 11720, 11728, 11736, 11744, 11776, 11778, 11779, 11780, + 11781, 11782, 11785, 11786, 11787, 11788, 11789, 11790, 11799, 11800, + 11802, 11803, 11804, 11805, 11806, 11808, 11809, 11810, 11811, 11812, + 11813, 11814, 11815, 11816, 11817, 11818, 11823, 11824, 11834, 11904, + 11931, 12032, 12272, 12288, 12289, 12292, 12293, 12294, 12295, 12296, + 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 12306, + 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, + 12318, 12320, 12321, 12330, 12334, 12336, 12337, 12342, 12344, 12347, + 12348, 12349, 12350, 12353, 12441, 12443, 12445, 12447, 12448, 12449, + 12539, 12540, 12543, 12549, 12593, 12688, 12690, 12694, 12704, 12736, + 12784, 12800, 12832, 12842, 12872, 12880, 12881, 12896, 12928, 12938, + 12977, 12992, 13056, 13312, 19893, 19904, 19968, 40908, 40960, 40981, + 40982, 42128, 42192, 42232, 42238, 42240, 42508, 42509, 42512, 42528, + 42538, 42560, 42606, 42607, 42608, 42611, 42612, 42622, 42623, 42624, + 42655, 42656, 42726, 42736, 42738, 42752, 42775, 42784, 42786, 42800, + 42802, 42864, 42865, 42873, 42878, 42888, 42889, 42891, 42896, 42912, + 43000, 43002, 43003, 43010, 43011, 43014, 43015, 43019, 43020, 43043, + 43045, 43047, 43048, 43056, 43062, 43064, 43065, 43072, 43124, 43136, + 43138, 43188, 43204, 43214, 43216, 43232, 43250, 43256, 43259, 43264, + 43274, 43302, 43310, 43312, 43335, 43346, 43359, 43360, 43392, 43395, + 43396, 43443, 43444, 43446, 43450, 43452, 43453, 43457, 43471, 43472, + 43486, 43520, 43561, 43567, 43569, 43571, 43573, 43584, 43587, 43588, + 43596, 43597, 43600, 43612, 43616, 43632, 43633, 43639, 43642, 43643, + 43648, 43696, 43697, 43698, 43701, 43703, 43705, 43710, 43712, 43713, + 43714, 43739, 43741, 43742, 43744, 43755, 43756, 43758, 43760, 43762, + 43763, 43765, 43766, 43777, 43785, 43793, 43808, 43816, 43968, 44003, + 44005, 44006, 44008, 44009, 44011, 44012, 44013, 44016, 44032, 55203, + 55216, 55243, 55296, 56191, 56319, 57343, 57344, 63743, 63744, 64112, + 64256, 64275, 64285, 64286, 64287, 64297, 64298, 64312, 64318, 64320, + 64323, 64326, 64434, 64467, 64830, 64831, 64848, 64914, 65008, 65020, + 65021, 65024, 65040, 65047, 65048, 65049, 65056, 65072, 65073, 65075, + 65077, 65078, 65079, 65080, 65081, 65082, 65083, 65084, 65085, 65086, + 65087, 65088, 65089, 65090, 65091, 65092, 65093, 65095, 65096, 65097, + 65101, 65104, 65108, 65112, 65113, 65114, 65115, 65116, 65117, 65118, + 65119, 65122, 65123, 65124, 65128, 65129, 65130, 65136, 65142, 65279, + 65281, 65284, 65285, 65288, 65289, 65290, 65291, 65292, 65293, 65294, + 65296, 65306, 65308, 65311, 65313, 65339, 65340, 65341, 65342, 65343, + 65344, 65345, 65371, 65372, 65373, 65374, 65375, 65376, 65377, 65378, + 65379, 65380, 65382, 65392, 65393, 65438, 65440, 65474, 65482, 65490, + 65498, 65504, 65506, 65507, 65508, 65509, 65512, 65513, 65517, 65529, + 65532, 0, 13, 40, 60, 63, 80, 128, 256, 263, + 311, 320, 373, 377, 394, 400, 464, 509, 640, 672, + 768, 800, 816, 833, 834, 842, 896, 927, 928, 968, + 976, 977, 1024, 1064, 1104, 1184, 2048, 2056, 2058, 2103, + 2108, 2111, 2135, 2136, 2304, 2326, 2335, 2336, 2367, 2432, + 2494, 2560, 2561, 2565, 2572, 2576, 2581, 2585, 2616, 2623, + 2624, 2640, 2656, 2685, 2687, 2816, 2873, 2880, 2904, 2912, + 2936, 3072, 3680, 4096, 4097, 4098, 4099, 4152, 4167, 4178, + 4198, 4224, 4226, 4227, 4272, 4275, 4279, 4281, 4283, 4285, + 4286, 4304, 4336, 4352, 4355, 4391, 4396, 4397, 4406, 4416, + 4480, 4482, 4483, 4531, 4534, 4543, 4545, 4549, 4560, 5760, + 5803, 5804, 5805, 5806, 5808, 5814, 5815, 5824, 8192, 9216, + 9328, 12288, 26624, 28416, 28496, 28497, 28559, 28563, 45056, 53248, + 53504, 53545, 53605, 53607, 53610, 53613, 53619, 53627, 53635, 53637, + 53644, 53674, 53678, 53760, 53826, 53829, 54016, 54112, 54272, 54298, + 54324, 54350, 54358, 54376, 54402, 54428, 54430, 54434, 54437, 54441, + 54446, 54454, 54459, 54461, 54469, 54480, 54506, 54532, 54535, 54541, + 54550, 54558, 54584, 54587, 54592, 54598, 54602, 54610, 54636, 54662, + 54688, 54714, 54740, 54766, 54792, 54818, 54844, 54870, 54896, 54922, + 54952, 54977, 54978, 55003, 55004, 55010, 55035, 55036, 55061, 55062, + 55068, 55093, 55094, 55119, 55120, 55126, 55151, 55152, 55177, 55178, + 55184, 55209, 55210, 55235, 55236, 55242, 55246, 60928, 60933, 60961, + 60964, 60967, 60969, 60980, 60985, 60987, 60994, 60999, 61001, 61003, + 61005, 61009, 61012, 61015, 61017, 61019, 61021, 61023, 61025, 61028, + 61031, 61036, 61044, 61049, 61054, 61056, 61067, 61089, 61093, 61099, + 61168, 61440, 61488, 61600, 61617, 61633, 61649, 61696, 61712, 61744, + 61808, 61926, 61968, 62016, 62032, 62208, 62256, 62263, 62336, 62368, + 62406, 62432, 62464, 62528, 62530, 62713, 62720, 62784, 62800, 62971, + 63045, 63104, 63232, 0, 42710, 42752, 46900, 46912, 47133, 63488, + 1, 32, 256, 0, 65533, + }; +static u16 aFts5UnicodeData[] = { + 1025, 61, 117, 55, 117, 54, 50, 53, 57, 53, + 49, 85, 333, 85, 121, 85, 841, 54, 53, 50, + 56, 48, 56, 837, 54, 57, 50, 57, 1057, 61, + 53, 151, 58, 53, 56, 58, 39, 52, 57, 34, + 58, 56, 58, 57, 79, 56, 37, 85, 56, 47, + 39, 51, 111, 53, 745, 57, 233, 773, 57, 261, + 1822, 37, 542, 37, 1534, 222, 69, 73, 37, 126, + 126, 73, 69, 137, 37, 73, 37, 105, 101, 73, + 37, 73, 37, 190, 158, 37, 126, 126, 73, 37, + 126, 94, 37, 39, 94, 69, 135, 41, 40, 37, + 41, 40, 37, 41, 40, 37, 542, 37, 606, 37, + 41, 40, 37, 126, 73, 37, 1886, 197, 73, 37, + 73, 69, 126, 105, 37, 286, 2181, 39, 869, 582, + 152, 390, 472, 166, 248, 38, 56, 38, 568, 3596, + 158, 38, 56, 94, 38, 101, 53, 88, 41, 53, + 105, 41, 73, 37, 553, 297, 1125, 94, 37, 105, + 101, 798, 133, 94, 57, 126, 94, 37, 1641, 1541, + 1118, 58, 172, 75, 1790, 478, 37, 2846, 1225, 38, + 213, 1253, 53, 49, 55, 1452, 49, 44, 53, 76, + 53, 76, 53, 44, 871, 103, 85, 162, 121, 85, + 55, 85, 90, 364, 53, 85, 1031, 38, 327, 684, + 333, 149, 71, 44, 3175, 53, 39, 236, 34, 58, + 204, 70, 76, 58, 140, 71, 333, 103, 90, 39, + 469, 34, 39, 44, 967, 876, 2855, 364, 39, 333, + 1063, 300, 70, 58, 117, 38, 711, 140, 38, 300, + 38, 108, 38, 172, 501, 807, 108, 53, 39, 359, + 876, 108, 42, 1735, 44, 42, 44, 39, 106, 268, + 138, 44, 74, 39, 236, 327, 76, 85, 333, 53, + 38, 199, 231, 44, 74, 263, 71, 711, 231, 39, + 135, 44, 39, 106, 140, 74, 74, 44, 39, 42, + 71, 103, 76, 333, 71, 87, 207, 58, 55, 76, + 42, 199, 71, 711, 231, 71, 71, 71, 44, 106, + 76, 76, 108, 44, 135, 39, 333, 76, 103, 44, + 76, 42, 295, 103, 711, 231, 71, 167, 44, 39, + 106, 172, 76, 42, 74, 44, 39, 71, 76, 333, + 53, 55, 44, 74, 263, 71, 711, 231, 71, 167, + 44, 39, 42, 44, 42, 140, 74, 74, 44, 44, + 42, 71, 103, 76, 333, 58, 39, 207, 44, 39, + 199, 103, 135, 71, 39, 71, 71, 103, 391, 74, + 44, 74, 106, 106, 44, 39, 42, 333, 111, 218, + 55, 58, 106, 263, 103, 743, 327, 167, 39, 108, + 138, 108, 140, 76, 71, 71, 76, 333, 239, 58, + 74, 263, 103, 743, 327, 167, 44, 39, 42, 44, + 170, 44, 74, 74, 76, 74, 39, 71, 76, 333, + 71, 74, 263, 103, 1319, 39, 106, 140, 106, 106, + 44, 39, 42, 71, 76, 333, 207, 58, 199, 74, + 583, 775, 295, 39, 231, 44, 106, 108, 44, 266, + 74, 53, 1543, 44, 71, 236, 55, 199, 38, 268, + 53, 333, 85, 71, 39, 71, 39, 39, 135, 231, + 103, 39, 39, 71, 135, 44, 71, 204, 76, 39, + 167, 38, 204, 333, 135, 39, 122, 501, 58, 53, + 122, 76, 218, 333, 335, 58, 44, 58, 44, 58, + 44, 54, 50, 54, 50, 74, 263, 1159, 460, 42, + 172, 53, 76, 167, 364, 1164, 282, 44, 218, 90, + 181, 154, 85, 1383, 74, 140, 42, 204, 42, 76, + 74, 76, 39, 333, 213, 199, 74, 76, 135, 108, + 39, 106, 71, 234, 103, 140, 423, 44, 74, 76, + 202, 44, 39, 42, 333, 106, 44, 90, 1225, 41, + 41, 1383, 53, 38, 10631, 135, 231, 39, 135, 1319, + 135, 1063, 135, 231, 39, 135, 487, 1831, 135, 2151, + 108, 309, 655, 519, 346, 2727, 49, 19847, 85, 551, + 61, 839, 54, 50, 2407, 117, 110, 423, 135, 108, + 583, 108, 85, 583, 76, 423, 103, 76, 1671, 76, + 42, 236, 266, 44, 74, 364, 117, 38, 117, 55, + 39, 44, 333, 335, 213, 49, 149, 108, 61, 333, + 1127, 38, 1671, 1319, 44, 39, 2247, 935, 108, 138, + 76, 106, 74, 44, 202, 108, 58, 85, 333, 967, + 167, 1415, 554, 231, 74, 333, 47, 1114, 743, 76, + 106, 85, 1703, 42, 44, 42, 236, 44, 42, 44, + 74, 268, 202, 332, 44, 333, 333, 245, 38, 213, + 140, 42, 1511, 44, 42, 172, 42, 44, 170, 44, + 74, 231, 333, 245, 346, 300, 314, 76, 42, 967, + 42, 140, 74, 76, 42, 44, 74, 71, 333, 1415, + 44, 42, 76, 106, 44, 42, 108, 74, 149, 1159, + 266, 268, 74, 76, 181, 333, 103, 333, 967, 198, + 85, 277, 108, 53, 428, 42, 236, 135, 44, 135, + 74, 44, 71, 1413, 2022, 421, 38, 1093, 1190, 1260, + 140, 4830, 261, 3166, 261, 265, 197, 201, 261, 265, + 261, 265, 197, 201, 261, 41, 41, 41, 94, 229, + 265, 453, 261, 264, 261, 264, 261, 264, 165, 69, + 137, 40, 56, 37, 120, 101, 69, 137, 40, 120, + 133, 69, 137, 120, 261, 169, 120, 101, 69, 137, + 40, 88, 381, 162, 209, 85, 52, 51, 54, 84, + 51, 54, 52, 277, 59, 60, 162, 61, 309, 52, + 51, 149, 80, 117, 57, 54, 50, 373, 57, 53, + 48, 341, 61, 162, 194, 47, 38, 207, 121, 54, + 50, 38, 335, 121, 54, 50, 422, 855, 428, 139, + 44, 107, 396, 90, 41, 154, 41, 90, 37, 105, + 69, 105, 37, 58, 41, 90, 57, 169, 218, 41, + 58, 41, 58, 41, 58, 137, 58, 37, 137, 37, + 135, 37, 90, 69, 73, 185, 94, 101, 58, 57, + 90, 37, 58, 527, 1134, 94, 142, 47, 185, 186, + 89, 154, 57, 90, 57, 90, 57, 250, 57, 1018, + 89, 90, 57, 58, 57, 1018, 8601, 282, 153, 666, + 89, 250, 54, 50, 2618, 57, 986, 825, 1306, 217, + 602, 1274, 378, 1935, 2522, 719, 5882, 57, 314, 57, + 1754, 281, 3578, 57, 4634, 3322, 54, 50, 54, 50, + 54, 50, 54, 50, 54, 50, 54, 50, 54, 50, + 975, 1434, 185, 54, 50, 1017, 54, 50, 54, 50, + 54, 50, 54, 50, 54, 50, 537, 8218, 4217, 54, + 50, 54, 50, 54, 50, 54, 50, 54, 50, 54, + 50, 54, 50, 54, 50, 54, 50, 54, 50, 54, + 50, 2041, 54, 50, 54, 50, 1049, 54, 50, 8281, + 1562, 697, 90, 217, 346, 1513, 1509, 126, 73, 69, + 254, 105, 37, 94, 37, 94, 165, 70, 105, 37, + 3166, 37, 218, 158, 108, 94, 149, 47, 85, 1221, + 37, 37, 1799, 38, 53, 44, 743, 231, 231, 231, + 231, 231, 231, 231, 231, 1036, 85, 52, 51, 52, + 51, 117, 52, 51, 53, 52, 51, 309, 49, 85, + 49, 53, 52, 51, 85, 52, 51, 54, 50, 54, + 50, 54, 50, 54, 50, 181, 38, 341, 81, 858, + 2874, 6874, 410, 61, 117, 58, 38, 39, 46, 54, + 50, 54, 50, 54, 50, 54, 50, 54, 50, 90, + 54, 50, 54, 50, 54, 50, 54, 50, 49, 54, + 82, 58, 302, 140, 74, 49, 166, 90, 110, 38, + 39, 53, 90, 2759, 76, 88, 70, 39, 49, 2887, + 53, 102, 39, 1319, 3015, 90, 143, 346, 871, 1178, + 519, 1018, 335, 986, 271, 58, 495, 1050, 335, 1274, + 495, 2042, 8218, 39, 39, 2074, 39, 39, 679, 38, + 36583, 1786, 1287, 198, 85, 8583, 38, 117, 519, 333, + 71, 1502, 39, 44, 107, 53, 332, 53, 38, 798, + 44, 2247, 334, 76, 213, 760, 294, 88, 478, 69, + 2014, 38, 261, 190, 350, 38, 88, 158, 158, 382, + 70, 37, 231, 44, 103, 44, 135, 44, 743, 74, + 76, 42, 154, 207, 90, 55, 58, 1671, 149, 74, + 1607, 522, 44, 85, 333, 588, 199, 117, 39, 333, + 903, 268, 85, 743, 364, 74, 53, 935, 108, 42, + 1511, 44, 74, 140, 74, 44, 138, 437, 38, 333, + 85, 1319, 204, 74, 76, 74, 76, 103, 44, 263, + 44, 42, 333, 149, 519, 38, 199, 122, 39, 42, + 1543, 44, 39, 108, 71, 76, 167, 76, 39, 44, + 39, 71, 38, 85, 359, 42, 76, 74, 85, 39, + 70, 42, 44, 199, 199, 199, 231, 231, 1127, 74, + 44, 74, 44, 74, 53, 42, 44, 333, 39, 39, + 743, 1575, 36, 68, 68, 36, 63, 63, 11719, 3399, + 229, 165, 39, 44, 327, 57, 423, 167, 39, 71, + 71, 3463, 536, 11623, 54, 50, 2055, 1735, 391, 55, + 58, 524, 245, 54, 50, 53, 236, 53, 81, 80, + 54, 50, 54, 50, 54, 50, 54, 50, 54, 50, + 54, 50, 54, 50, 54, 50, 85, 54, 50, 149, + 112, 117, 149, 49, 54, 50, 54, 50, 54, 50, + 117, 57, 49, 121, 53, 55, 85, 167, 4327, 34, + 117, 55, 117, 54, 50, 53, 57, 53, 49, 85, + 333, 85, 121, 85, 841, 54, 53, 50, 56, 48, + 56, 837, 54, 57, 50, 57, 54, 50, 53, 54, + 50, 85, 327, 38, 1447, 70, 999, 199, 199, 199, + 103, 87, 57, 56, 58, 87, 58, 153, 90, 98, + 90, 391, 839, 615, 71, 487, 455, 3943, 117, 1455, + 314, 1710, 143, 570, 47, 410, 1466, 44, 935, 1575, + 999, 143, 551, 46, 263, 46, 967, 53, 1159, 263, + 53, 174, 1289, 1285, 2503, 333, 199, 39, 1415, 71, + 39, 743, 53, 271, 711, 207, 53, 839, 53, 1799, + 71, 39, 108, 76, 140, 135, 103, 871, 108, 44, + 271, 309, 935, 79, 53, 1735, 245, 711, 271, 615, + 271, 2343, 1007, 42, 44, 42, 1703, 492, 245, 655, + 333, 76, 42, 1447, 106, 140, 74, 76, 85, 34, + 149, 807, 333, 108, 1159, 172, 42, 268, 333, 149, + 76, 42, 1543, 106, 300, 74, 135, 149, 333, 1383, + 44, 42, 44, 74, 204, 42, 44, 333, 28135, 3182, + 149, 34279, 18215, 2215, 39, 1482, 140, 422, 71, 7898, + 1274, 1946, 74, 108, 122, 202, 258, 268, 90, 236, + 986, 140, 1562, 2138, 108, 58, 2810, 591, 841, 837, + 841, 229, 581, 841, 837, 41, 73, 41, 73, 137, + 265, 133, 37, 229, 357, 841, 837, 73, 137, 265, + 233, 837, 73, 137, 169, 41, 233, 837, 841, 837, + 841, 837, 841, 837, 841, 837, 841, 837, 841, 901, + 809, 57, 805, 57, 197, 809, 57, 805, 57, 197, + 809, 57, 805, 57, 197, 809, 57, 805, 57, 197, + 809, 57, 805, 57, 197, 94, 1613, 135, 871, 71, + 39, 39, 327, 135, 39, 39, 39, 39, 39, 39, + 103, 71, 39, 39, 39, 39, 39, 39, 71, 39, + 135, 231, 135, 135, 39, 327, 551, 103, 167, 551, + 89, 1434, 3226, 506, 474, 506, 506, 367, 1018, 1946, + 1402, 954, 1402, 314, 90, 1082, 218, 2266, 666, 1210, + 186, 570, 2042, 58, 5850, 154, 2010, 154, 794, 2266, + 378, 2266, 3738, 39, 39, 39, 39, 39, 39, 17351, + 34, 3074, 7692, 63, 63, + }; + +int sqlite3Fts5UnicodeCategory(int iCode) { + int iRes = -1; + int iHi; + int iLo; + int ret; + u16 iKey; + + if( iCode>=(1<<20) ){ + return 0; + } + iLo = aFts5UnicodeBlock[(iCode>>16)]; + iHi = aFts5UnicodeBlock[1+(iCode>>16)]; + iKey = (iCode & 0xFFFF); + while( iHi>iLo ){ + int iTest = (iHi + iLo) / 2; + assert( iTest>=iLo && iTest=aFts5UnicodeMap[iTest] ){ + iRes = iTest; + iLo = iTest+1; + }else{ + iHi = iTest; + } + } + + if( iRes<0 ) return 0; + if( iKey>=(aFts5UnicodeMap[iRes]+(aFts5UnicodeData[iRes]>>5)) ) return 0; + ret = aFts5UnicodeData[iRes] & 0x1F; + if( ret!=30 ) return ret; + return ((iKey - aFts5UnicodeMap[iRes]) & 0x01) ? 5 : 9; +} + +void sqlite3Fts5UnicodeAscii(u8 *aArray, u8 *aAscii){ + int i = 0; + int iTbl = 0; + while( i<128 ){ + int bToken = aArray[ aFts5UnicodeData[iTbl] & 0x1F ]; + int n = (aFts5UnicodeData[iTbl] >> 5) + i; + for(; i<128 && i0 && eSeek==LSM_SEEK_GE && aPtr[0].pPg==0 ){ res = 0; } + for(i=1; i<=nRhs; i++){ + segmentPtrReset(&aPtr[i], LSM_SEGMENTPTR_FREE_THRESHOLD); + } } if( res>=0 ){ int bHit = 0; /* True if at least one rhs is not EOF */ int iPtr = (int)*piPgno; int i; + segmentPtrReset(&aPtr[0], LSM_SEGMENTPTR_FREE_THRESHOLD); for(i=1; rc==LSM_OK && i<=nRhs && bStop==0; i++){ SegmentPtr *pPtr = &aPtr[i]; iOut = 0; @@ -2868,7 +2873,7 @@ int rc = LSM_OK; int i; - pCsr->flags &= ~(CURSOR_NEXT_OK | CURSOR_PREV_OK); + pCsr->flags &= ~(CURSOR_NEXT_OK | CURSOR_PREV_OK | CURSOR_SEEK_EQ); pCsr->flags |= (bLast ? CURSOR_PREV_OK : CURSOR_NEXT_OK); pCsr->iFree = 0; diff -Nru lxd-3.0.2/dist/sqlite/ext/lsm1/lsm-test/lsmtest1.c lxd-3.0.3/dist/sqlite/ext/lsm1/lsm-test/lsmtest1.c --- lxd-3.0.2/dist/sqlite/ext/lsm1/lsm-test/lsmtest1.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/lsm1/lsm-test/lsmtest1.c 2018-11-22 20:54:16.000000000 +0000 @@ -274,6 +274,7 @@ int rc = LSM_OK; Datasource *pData; TestDb *pDb; + int iToggle = 0; /* Start the test case, open a database and allocate the datasource. */ pDb = testOpen(zSystem, 1, &rc); @@ -287,8 +288,11 @@ testWriteDatasourceRange(pDb, pData, i, p->nVerify, &rc); i += p->nVerify; + if( iToggle ) testBegin(pDb, 1, &rc); /* Check that the db content is correct. */ testDbContents(pDb, pData, p->nRow, 0, i-1, p->nTest, p->bTestScan, &rc); + if( iToggle ) testCommit(pDb, 0, &rc); + iToggle = (iToggle+1)%2; if( bRecover ){ testReopenRecover(&pDb, &rc); diff -Nru lxd-3.0.2/dist/sqlite/ext/lsm1/lsm-test/lsmtest_tdb3.c lxd-3.0.3/dist/sqlite/ext/lsm1/lsm-test/lsmtest_tdb3.c --- lxd-3.0.2/dist/sqlite/ext/lsm1/lsm-test/lsmtest_tdb3.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/lsm1/lsm-test/lsmtest_tdb3.c 2018-11-22 20:54:16.000000000 +0000 @@ -617,8 +617,12 @@ if( pKey==0 ) return LSM_OK; - rc = lsm_csr_open(pDb->db, &csr); - if( rc!=LSM_OK ) return rc; + if( pDb->pCsr==0 ){ + rc = lsm_csr_open(pDb->db, &csr); + if( rc!=LSM_OK ) return rc; + }else{ + csr = pDb->pCsr; + } rc = lsm_csr_seek(csr, pKey, nKey, LSM_SEEK_EQ); if( rc==LSM_OK ){ @@ -638,7 +642,9 @@ *pnVal = -1; } } - lsm_csr_close(csr); + if( pDb->pCsr==0 ){ + lsm_csr_close(csr); + } return rc; } @@ -652,10 +658,28 @@ ){ LsmDb *pDb = (LsmDb *)pTestDb; lsm_cursor *csr; + lsm_cursor *csr2 = 0; int rc; - rc = lsm_csr_open(pDb->db, &csr); - if( rc!=LSM_OK ) return rc; + if( pDb->pCsr==0 ){ + rc = lsm_csr_open(pDb->db, &csr); + if( rc!=LSM_OK ) return rc; + }else{ + rc = LSM_OK; + csr = pDb->pCsr; + } + + /* To enhance testing, if both pLast and pFirst are defined, seek the + ** cursor to the "end" boundary here. Then the next block seeks it to + ** the "start" ready for the scan. The point is to test that cursors + ** can be reused. */ + if( pLast && pFirst ){ + if( bReverse ){ + rc = lsm_csr_seek(csr, pFirst, nFirst, LSM_SEEK_LE); + }else{ + rc = lsm_csr_seek(csr, pLast, nLast, LSM_SEEK_GE); + } + } if( bReverse ){ if( pLast ){ @@ -696,7 +720,9 @@ } } - lsm_csr_close(csr); + if( pDb->pCsr==0 ){ + lsm_csr_close(csr); + } return rc; } @@ -762,6 +788,7 @@ #define TEST_MT_MIN_CKPT -4 #define TEST_MT_MAX_CKPT -5 + int test_lsm_config_str( LsmDb *pLsm, lsm_db *db, diff -Nru lxd-3.0.2/dist/sqlite/ext/misc/completion.c lxd-3.0.3/dist/sqlite/ext/misc/completion.c --- lxd-3.0.2/dist/sqlite/ext/misc/completion.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/misc/completion.c 2018-11-22 20:54:16.000000000 +0000 @@ -365,7 +365,7 @@ pCur->zPrefix = sqlite3_mprintf("%s", sqlite3_value_text(argv[iArg])); if( pCur->zPrefix==0 ) return SQLITE_NOMEM; } - iArg++; + iArg = 1; } if( idxNum & 2 ){ pCur->nLine = sqlite3_value_bytes(argv[iArg]); @@ -373,7 +373,6 @@ pCur->zLine = sqlite3_mprintf("%s", sqlite3_value_text(argv[iArg])); if( pCur->zLine==0 ) return SQLITE_NOMEM; } - iArg++; } if( pCur->zLine!=0 && pCur->zPrefix==0 ){ int i = pCur->nLine; diff -Nru lxd-3.0.2/dist/sqlite/ext/misc/dbdump.c lxd-3.0.3/dist/sqlite/ext/misc/dbdump.c --- lxd-3.0.2/dist/sqlite/ext/misc/dbdump.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/misc/dbdump.c 2018-11-22 20:54:16.000000000 +0000 @@ -485,7 +485,15 @@ } case SQLITE_FLOAT: { double r = sqlite3_column_double(pStmt,i); - output_formatted(p, "%!.20g", r); + sqlite3_uint64 ur; + memcpy(&ur,&r,sizeof(r)); + if( ur==0x7ff0000000000000LL ){ + p->xCallback("1e999", p->pArg); + }else if( ur==0xfff0000000000000LL ){ + p->xCallback("-1e999", p->pArg); + }else{ + output_formatted(p, "%!.20g", r); + } break; } case SQLITE_NULL: { diff -Nru lxd-3.0.2/dist/sqlite/ext/misc/fileio.c lxd-3.0.3/dist/sqlite/ext/misc/fileio.c --- lxd-3.0.2/dist/sqlite/ext/misc/fileio.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/misc/fileio.c 2018-11-22 20:54:16.000000000 +0000 @@ -204,7 +204,7 @@ extern LPWSTR sqlite3_win32_utf8_to_unicode(const char*); zUnicodeName = sqlite3_win32_utf8_to_unicode(zPath); if( zUnicodeName ){ - memset(&fd, 0, sizeof(WIN32_FIND_DATA)); + memset(&fd, 0, sizeof(WIN32_FIND_DATAW)); hFindFile = FindFirstFileW(zUnicodeName, &fd); if( hFindFile!=NULL ){ pStatBuf->st_ctime = (time_t)fileTimeToUnixTime(&fd.ftCreationTime); diff -Nru lxd-3.0.2/dist/sqlite/ext/misc/json1.c lxd-3.0.3/dist/sqlite/ext/misc/json1.c --- lxd-3.0.2/dist/sqlite/ext/misc/json1.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/misc/json1.c 2018-11-22 20:54:16.000000000 +0000 @@ -172,6 +172,7 @@ u8 nErr; /* Number of errors seen */ u16 iDepth; /* Nesting depth */ int nJson; /* Length of the zJson string in bytes */ + u32 iHold; /* Replace cache line with the lowest iHold value */ }; /* @@ -976,7 +977,8 @@ /* ** Magic number used for the JSON parse cache in sqlite3_get_auxdata() */ -#define JSON_CACHE_ID (-429938) +#define JSON_CACHE_ID (-429938) /* First cache entry */ +#define JSON_CACHE_SZ 4 /* Max number of cache entries */ /* ** Obtain a complete parse of the JSON found in the first argument @@ -988,16 +990,42 @@ */ static JsonParse *jsonParseCached( sqlite3_context *pCtx, - sqlite3_value **argv + sqlite3_value **argv, + sqlite3_context *pErrCtx ){ const char *zJson = (const char*)sqlite3_value_text(argv[0]); int nJson = sqlite3_value_bytes(argv[0]); JsonParse *p; + JsonParse *pMatch = 0; + int iKey; + int iMinKey = 0; + u32 iMinHold = 0xffffffff; + u32 iMaxHold = 0; if( zJson==0 ) return 0; - p = (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID); - if( p && p->nJson==nJson && memcmp(p->zJson,zJson,nJson)==0 ){ - p->nErr = 0; - return p; /* The cached entry matches, so return it */ + for(iKey=0; iKeynJson==nJson + && memcmp(p->zJson,zJson,nJson)==0 + ){ + p->nErr = 0; + pMatch = p; + }else if( p->iHoldiHold; + iMinKey = iKey; + } + if( p->iHold>iMaxHold ){ + iMaxHold = p->iHold; + } + } + if( pMatch ){ + pMatch->nErr = 0; + pMatch->iHold = iMaxHold+1; + return pMatch; } p = sqlite3_malloc( sizeof(*p) + nJson + 1 ); if( p==0 ){ @@ -1007,13 +1035,15 @@ memset(p, 0, sizeof(*p)); p->zJson = (char*)&p[1]; memcpy((char*)p->zJson, zJson, nJson+1); - if( jsonParse(p, pCtx, p->zJson) ){ + if( jsonParse(p, pErrCtx, p->zJson) ){ sqlite3_free(p); return 0; } p->nJson = nJson; - sqlite3_set_auxdata(pCtx, JSON_CACHE_ID, p, (void(*)(void*))jsonParseFree); - return (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID); + p->iHold = iMaxHold+1; + sqlite3_set_auxdata(pCtx, JSON_CACHE_ID+iMinKey, p, + (void(*)(void*))jsonParseFree); + return (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID+iMinKey); } /* @@ -1386,7 +1416,7 @@ u32 i; JsonNode *pNode; - p = jsonParseCached(ctx, argv); + p = jsonParseCached(ctx, argv, ctx); if( p==0 ) return; assert( p->nNode ); if( argc==2 ){ @@ -1427,7 +1457,7 @@ int i; if( argc<2 ) return; - p = jsonParseCached(ctx, argv); + p = jsonParseCached(ctx, argv, ctx); if( p==0 ) return; jsonInit(&jx, ctx); jsonAppendChar(&jx, '['); @@ -1734,22 +1764,21 @@ int argc, sqlite3_value **argv ){ - JsonParse x; /* The parse */ + JsonParse *p; /* The parse */ const char *zPath; JsonNode *pNode; - if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; - assert( x.nNode ); + p = jsonParseCached(ctx, argv, ctx); + if( p==0 ) return; if( argc==2 ){ zPath = (const char*)sqlite3_value_text(argv[1]); - pNode = jsonLookup(&x, zPath, 0, ctx); + pNode = jsonLookup(p, zPath, 0, ctx); }else{ - pNode = x.aNode; + pNode = p->aNode; } if( pNode ){ sqlite3_result_text(ctx, jsonType[pNode->eType], -1, SQLITE_STATIC); } - jsonParseReset(&x); } /* @@ -1763,15 +1792,10 @@ int argc, sqlite3_value **argv ){ - JsonParse x; /* The parse */ - int rc = 0; - + JsonParse *p; /* The parse */ UNUSED_PARAM(argc); - if( jsonParse(&x, 0, (const char*)sqlite3_value_text(argv[0]))==0 ){ - rc = 1; - } - jsonParseReset(&x); - sqlite3_result_int(ctx, rc); + p = jsonParseCached(ctx, argv, 0); + sqlite3_result_int(ctx, p!=0); } @@ -1802,7 +1826,7 @@ jsonAppendValue(pStr, argv[0]); } } -static void jsonArrayFinal(sqlite3_context *ctx){ +static void jsonArrayCompute(sqlite3_context *ctx, int isFinal){ JsonString *pStr; pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); if( pStr ){ @@ -1811,16 +1835,66 @@ if( pStr->bErr ){ if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx); assert( pStr->bStatic ); - }else{ - sqlite3_result_text(ctx, pStr->zBuf, pStr->nUsed, + }else if( isFinal ){ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free); pStr->bStatic = 1; + }else{ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); + pStr->nUsed--; } }else{ sqlite3_result_text(ctx, "[]", 2, SQLITE_STATIC); } sqlite3_result_subtype(ctx, JSON_SUBTYPE); } +static void jsonArrayValue(sqlite3_context *ctx){ + jsonArrayCompute(ctx, 0); +} +static void jsonArrayFinal(sqlite3_context *ctx){ + jsonArrayCompute(ctx, 1); +} + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** This method works for both json_group_array() and json_group_object(). +** It works by removing the first element of the group by searching forward +** to the first comma (",") that is not within a string and deleting all +** text through that comma. +*/ +static void jsonGroupInverse( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + int i; + int inStr = 0; + char *z; + JsonString *pStr; + UNUSED_PARAM(argc); + UNUSED_PARAM(argv); + pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); +#ifdef NEVER + /* pStr is always non-NULL since jsonArrayStep() or jsonObjectStep() will + ** always have been called to initalize it */ + if( NEVER(!pStr) ) return; +#endif + z = pStr->zBuf; + for(i=1; z[i]!=',' || inStr; i++){ + assert( inUsed ); + if( z[i]=='"' ){ + inStr = !inStr; + }else if( z[i]=='\\' ){ + i++; + } + } + pStr->nUsed -= i; + memmove(&z[1], &z[i+1], (size_t)pStr->nUsed-1); +} +#else +# define jsonGroupInverse 0 +#endif + /* ** json_group_obj(NAME,VALUE) @@ -1852,7 +1926,7 @@ jsonAppendValue(pStr, argv[1]); } } -static void jsonObjectFinal(sqlite3_context *ctx){ +static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){ JsonString *pStr; pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); if( pStr ){ @@ -1860,16 +1934,26 @@ if( pStr->bErr ){ if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx); assert( pStr->bStatic ); - }else{ - sqlite3_result_text(ctx, pStr->zBuf, pStr->nUsed, + }else if( isFinal ){ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free); pStr->bStatic = 1; + }else{ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); + pStr->nUsed--; } }else{ sqlite3_result_text(ctx, "{}", 2, SQLITE_STATIC); } sqlite3_result_subtype(ctx, JSON_SUBTYPE); } +static void jsonObjectValue(sqlite3_context *ctx){ + jsonObjectCompute(ctx, 0); +} +static void jsonObjectFinal(sqlite3_context *ctx){ + jsonObjectCompute(ctx, 1); +} + #ifndef SQLITE_OMIT_VIRTUALTABLE @@ -2377,9 +2461,12 @@ int nArg; void (*xStep)(sqlite3_context*,int,sqlite3_value**); void (*xFinal)(sqlite3_context*); + void (*xValue)(sqlite3_context*); } aAgg[] = { - { "json_group_array", 1, jsonArrayStep, jsonArrayFinal }, - { "json_group_object", 2, jsonObjectStep, jsonObjectFinal }, + { "json_group_array", 1, + jsonArrayStep, jsonArrayFinal, jsonArrayValue }, + { "json_group_object", 2, + jsonObjectStep, jsonObjectFinal, jsonObjectValue }, }; #ifndef SQLITE_OMIT_VIRTUALTABLE static const struct { @@ -2396,11 +2483,14 @@ (void*)&aFunc[i].flag, aFunc[i].xFunc, 0, 0); } +#ifndef SQLITE_OMIT_WINDOWFUNC for(i=0; i0 && z[j-1]==' ' ){ j--; } - if( i>0 && z[j-1]!=';' ){ z[j++] = ';'; } + if( j>0 && z[j-1]!=';' ){ z[j++] = ';'; } z[j] = 0; /* Make a second pass converting "in(...)" where the "..." is not a diff -Nru lxd-3.0.2/dist/sqlite/ext/rbu/rbu.c lxd-3.0.3/dist/sqlite/ext/rbu/rbu.c --- lxd-3.0.2/dist/sqlite/ext/rbu/rbu.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/rbu/rbu.c 2018-11-22 20:54:16.000000000 +0000 @@ -78,13 +78,13 @@ const char *zTarget; /* Target database to apply RBU to */ const char *zRbu; /* Database containing RBU */ char zBuf[200]; /* Buffer for printf() */ - char *zErrmsg; /* Error message, if any */ + char *zErrmsg = 0; /* Error message, if any */ sqlite3rbu *pRbu; /* RBU handle */ int nStep = 0; /* Maximum number of step() calls */ int nStatStep = 0; /* Report stats after this many step calls */ int bVacuum = 0; const char *zPreSql = 0; - int rc; + int rc = SQLITE_OK; sqlite3_int64 nProgress = 0; int nArgc = argc-2; @@ -126,11 +126,11 @@ report_rbu_vfs(pRbu); if( zPreSql && pRbu ){ - sqlite3 *db = sqlite3rbu_db(pRbu, 0); - rc = sqlite3_exec(db, zPreSql, 0, 0, 0); + sqlite3 *dbMain = sqlite3rbu_db(pRbu, 0); + rc = sqlite3_exec(dbMain, zPreSql, 0, 0, 0); if( rc==SQLITE_OK ){ - sqlite3 *db = sqlite3rbu_db(pRbu, 1); - rc = sqlite3_exec(db, zPreSql, 0, 0, 0); + sqlite3 *dbRbu = sqlite3rbu_db(pRbu, 1); + rc = sqlite3_exec(dbRbu, zPreSql, 0, 0, 0); } } diff -Nru lxd-3.0.2/dist/sqlite/ext/rtree/geopoly.c lxd-3.0.3/dist/sqlite/ext/rtree/geopoly.c --- lxd-3.0.2/dist/sqlite/ext/rtree/geopoly.c 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/rtree/geopoly.c 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,1659 @@ +/* +** 2018-05-25 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file implements an alternative R-Tree virtual table that +** uses polygons to express the boundaries of 2-dimensional objects. +** +** This file is #include-ed onto the end of "rtree.c" so that it has +** access to all of the R-Tree internals. +*/ +#include + +/* Enable -DGEOPOLY_ENABLE_DEBUG for debugging facilities */ +#ifdef GEOPOLY_ENABLE_DEBUG + static int geo_debug = 0; +# define GEODEBUG(X) if(geo_debug)printf X +#else +# define GEODEBUG(X) +#endif + +#ifndef JSON_NULL /* The following stuff repeats things found in json1 */ +/* +** Versions of isspace(), isalnum() and isdigit() to which it is safe +** to pass signed char values. +*/ +#ifdef sqlite3Isdigit + /* Use the SQLite core versions if this routine is part of the + ** SQLite amalgamation */ +# define safe_isdigit(x) sqlite3Isdigit(x) +# define safe_isalnum(x) sqlite3Isalnum(x) +# define safe_isxdigit(x) sqlite3Isxdigit(x) +#else + /* Use the standard library for separate compilation */ +#include /* amalgamator: keep */ +# define safe_isdigit(x) isdigit((unsigned char)(x)) +# define safe_isalnum(x) isalnum((unsigned char)(x)) +# define safe_isxdigit(x) isxdigit((unsigned char)(x)) +#endif + +/* +** Growing our own isspace() routine this way is twice as fast as +** the library isspace() function. +*/ +static const char geopolyIsSpace[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; +#define safe_isspace(x) (geopolyIsSpace[(unsigned char)x]) +#endif /* JSON NULL - back to original code */ + +/* Compiler and version */ +#ifndef GCC_VERSION +#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC) +# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) +#else +# define GCC_VERSION 0 +#endif +#endif +#ifndef MSVC_VERSION +#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC) +# define MSVC_VERSION _MSC_VER +#else +# define MSVC_VERSION 0 +#endif +#endif + +/* Datatype for coordinates +*/ +typedef float GeoCoord; + +/* +** Internal representation of a polygon. +** +** The polygon consists of a sequence of vertexes. There is a line +** segment between each pair of vertexes, and one final segment from +** the last vertex back to the first. (This differs from the GeoJSON +** standard in which the final vertex is a repeat of the first.) +** +** The polygon follows the right-hand rule. The area to the right of +** each segment is "outside" and the area to the left is "inside". +** +** The on-disk representation consists of a 4-byte header followed by +** the values. The 4-byte header is: +** +** encoding (1 byte) 0=big-endian, 1=little-endian +** nvertex (3 bytes) Number of vertexes as a big-endian integer +*/ +typedef struct GeoPoly GeoPoly; +struct GeoPoly { + int nVertex; /* Number of vertexes */ + unsigned char hdr[4]; /* Header for on-disk representation */ + GeoCoord a[2]; /* 2*nVertex values. X (longitude) first, then Y */ +}; + +/* +** State of a parse of a GeoJSON input. +*/ +typedef struct GeoParse GeoParse; +struct GeoParse { + const unsigned char *z; /* Unparsed input */ + int nVertex; /* Number of vertexes in a[] */ + int nAlloc; /* Space allocated to a[] */ + int nErr; /* Number of errors encountered */ + GeoCoord *a; /* Array of vertexes. From sqlite3_malloc64() */ +}; + +/* Do a 4-byte byte swap */ +static void geopolySwab32(unsigned char *a){ + unsigned char t = a[0]; + a[0] = a[3]; + a[3] = t; + t = a[1]; + a[1] = a[2]; + a[2] = t; +} + +/* Skip whitespace. Return the next non-whitespace character. */ +static char geopolySkipSpace(GeoParse *p){ + while( p->z[0] && safe_isspace(p->z[0]) ) p->z++; + return p->z[0]; +} + +/* Parse out a number. Write the value into *pVal if pVal!=0. +** return non-zero on success and zero if the next token is not a number. +*/ +static int geopolyParseNumber(GeoParse *p, GeoCoord *pVal){ + char c = geopolySkipSpace(p); + const unsigned char *z = p->z; + int j = 0; + int seenDP = 0; + int seenE = 0; + if( c=='-' ){ + j = 1; + c = z[j]; + } + if( c=='0' && z[j+1]>='0' && z[j+1]<='9' ) return 0; + for(;; j++){ + c = z[j]; + if( c>='0' && c<='9' ) continue; + if( c=='.' ){ + if( z[j-1]=='-' ) return 0; + if( seenDP ) return 0; + seenDP = 1; + continue; + } + if( c=='e' || c=='E' ){ + if( z[j-1]<'0' ) return 0; + if( seenE ) return -1; + seenDP = seenE = 1; + c = z[j+1]; + if( c=='+' || c=='-' ){ + j++; + c = z[j+1]; + } + if( c<'0' || c>'9' ) return 0; + continue; + } + break; + } + if( z[j-1]<'0' ) return 0; + if( pVal ) *pVal = (GeoCoord)atof((const char*)p->z); + p->z += j; + return 1; +} + +/* +** If the input is a well-formed JSON array of coordinates with at least +** four coordinates and where each coordinate is itself a two-value array, +** then convert the JSON into a GeoPoly object and return a pointer to +** that object. +** +** If any error occurs, return NULL. +*/ +static GeoPoly *geopolyParseJson(const unsigned char *z, int *pRc){ + GeoParse s; + int rc = SQLITE_OK; + memset(&s, 0, sizeof(s)); + s.z = z; + if( geopolySkipSpace(&s)=='[' ){ + s.z++; + while( geopolySkipSpace(&s)=='[' ){ + int ii = 0; + char c; + s.z++; + if( s.nVertex>=s.nAlloc ){ + GeoCoord *aNew; + s.nAlloc = s.nAlloc*2 + 16; + aNew = sqlite3_realloc64(s.a, s.nAlloc*sizeof(GeoCoord)*2 ); + if( aNew==0 ){ + rc = SQLITE_NOMEM; + s.nErr++; + break; + } + s.a = aNew; + } + while( geopolyParseNumber(&s, ii<=1 ? &s.a[s.nVertex*2+ii] : 0) ){ + ii++; + if( ii==2 ) s.nVertex++; + c = geopolySkipSpace(&s); + s.z++; + if( c==',' ) continue; + if( c==']' && ii>=2 ) break; + s.nErr++; + rc = SQLITE_ERROR; + goto parse_json_err; + } + if( geopolySkipSpace(&s)==',' ){ + s.z++; + continue; + } + break; + } + if( geopolySkipSpace(&s)==']' + && s.nVertex>=4 + && s.a[0]==s.a[s.nVertex*2-2] + && s.a[1]==s.a[s.nVertex*2-1] + && (s.z++, geopolySkipSpace(&s)==0) + ){ + int nByte; + GeoPoly *pOut; + int x = 1; + s.nVertex--; /* Remove the redundant vertex at the end */ + nByte = sizeof(GeoPoly) * s.nVertex*2*sizeof(GeoCoord); + pOut = sqlite3_malloc64( nByte ); + x = 1; + if( pOut==0 ) goto parse_json_err; + pOut->nVertex = s.nVertex; + memcpy(pOut->a, s.a, s.nVertex*2*sizeof(GeoCoord)); + pOut->hdr[0] = *(unsigned char*)&x; + pOut->hdr[1] = (s.nVertex>>16)&0xff; + pOut->hdr[2] = (s.nVertex>>8)&0xff; + pOut->hdr[3] = s.nVertex&0xff; + sqlite3_free(s.a); + if( pRc ) *pRc = SQLITE_OK; + return pOut; + }else{ + s.nErr++; + rc = SQLITE_ERROR; + } + } +parse_json_err: + if( pRc ) *pRc = rc; + sqlite3_free(s.a); + return 0; +} + +/* +** Given a function parameter, try to interpret it as a polygon, either +** in the binary format or JSON text. Compute a GeoPoly object and +** return a pointer to that object. Or if the input is not a well-formed +** polygon, put an error message in sqlite3_context and return NULL. +*/ +static GeoPoly *geopolyFuncParam( + sqlite3_context *pCtx, /* Context for error messages */ + sqlite3_value *pVal, /* The value to decode */ + int *pRc /* Write error here */ +){ + GeoPoly *p = 0; + int nByte; + if( sqlite3_value_type(pVal)==SQLITE_BLOB + && (nByte = sqlite3_value_bytes(pVal))>=(4+6*sizeof(GeoCoord)) + ){ + const unsigned char *a = sqlite3_value_blob(pVal); + int nVertex; + nVertex = (a[1]<<16) + (a[2]<<8) + a[3]; + if( (a[0]==0 || a[0]==1) + && (nVertex*2*sizeof(GeoCoord) + 4)==(unsigned int)nByte + ){ + p = sqlite3_malloc64( sizeof(*p) + (nVertex-1)*2*sizeof(GeoCoord) ); + if( p==0 ){ + if( pRc ) *pRc = SQLITE_NOMEM; + if( pCtx ) sqlite3_result_error_nomem(pCtx); + }else{ + int x = 1; + p->nVertex = nVertex; + memcpy(p->hdr, a, nByte); + if( a[0] != *(unsigned char*)&x ){ + int ii; + for(ii=0; iia[ii]); + } + p->hdr[0] ^= 1; + } + } + } + if( pRc ) *pRc = SQLITE_OK; + return p; + }else if( sqlite3_value_type(pVal)==SQLITE_TEXT ){ + const unsigned char *zJson = sqlite3_value_text(pVal); + if( zJson==0 ){ + if( pRc ) *pRc = SQLITE_NOMEM; + return 0; + } + return geopolyParseJson(zJson, pRc); + }else{ + if( pRc ) *pRc = SQLITE_ERROR; + return 0; + } +} + +/* +** Implementation of the geopoly_blob(X) function. +** +** If the input is a well-formed Geopoly BLOB or JSON string +** then return the BLOB representation of the polygon. Otherwise +** return NULL. +*/ +static void geopolyBlobFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + +/* +** SQL function: geopoly_json(X) +** +** Interpret X as a polygon and render it as a JSON array +** of coordinates. Or, if X is not a valid polygon, return NULL. +*/ +static void geopolyJsonFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + sqlite3 *db = sqlite3_context_db_handle(context); + sqlite3_str *x = sqlite3_str_new(db); + int i; + sqlite3_str_append(x, "[", 1); + for(i=0; inVertex; i++){ + sqlite3_str_appendf(x, "[%!g,%!g],", p->a[i*2], p->a[i*2+1]); + } + sqlite3_str_appendf(x, "[%!g,%!g]]", p->a[0], p->a[1]); + sqlite3_result_text(context, sqlite3_str_finish(x), -1, sqlite3_free); + sqlite3_free(p); + } +} + +/* +** SQL function: geopoly_svg(X, ....) +** +** Interpret X as a polygon and render it as a SVG . +** Additional arguments are added as attributes to the . +*/ +static void geopolySvgFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + sqlite3 *db = sqlite3_context_db_handle(context); + sqlite3_str *x = sqlite3_str_new(db); + int i; + char cSep = '\''; + sqlite3_str_appendf(x, "a[i*2], p->a[i*2+1]); + cSep = ' '; + } + sqlite3_str_appendf(x, " %g,%g'", p->a[0], p->a[1]); + for(i=1; i"); + sqlite3_result_text(context, sqlite3_str_finish(x), -1, sqlite3_free); + sqlite3_free(p); + } +} + +/* +** SQL Function: geopoly_xform(poly, A, B, C, D, E, F) +** +** Transform and/or translate a polygon as follows: +** +** x1 = A*x0 + B*y0 + E +** y1 = C*x0 + D*y0 + F +** +** For a translation: +** +** geopoly_xform(poly, 1, 0, 0, 1, x-offset, y-offset) +** +** Rotate by R around the point (0,0): +** +** geopoly_xform(poly, cos(R), sin(R), -sin(R), cos(R), 0, 0) +*/ +static void geopolyXformFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + double A = sqlite3_value_double(argv[1]); + double B = sqlite3_value_double(argv[2]); + double C = sqlite3_value_double(argv[3]); + double D = sqlite3_value_double(argv[4]); + double E = sqlite3_value_double(argv[5]); + double F = sqlite3_value_double(argv[6]); + GeoCoord x1, y1, x0, y0; + int ii; + if( p ){ + for(ii=0; iinVertex; ii++){ + x0 = p->a[ii*2]; + y0 = p->a[ii*2+1]; + x1 = (GeoCoord)(A*x0 + B*y0 + E); + y1 = (GeoCoord)(C*x0 + D*y0 + F); + p->a[ii*2] = x1; + p->a[ii*2+1] = y1; + } + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + +/* +** Implementation of the geopoly_area(X) function. +** +** If the input is a well-formed Geopoly BLOB then return the area +** enclosed by the polygon. If the polygon circulates clockwise instead +** of counterclockwise (as it should) then return the negative of the +** enclosed area. Otherwise return NULL. +*/ +static void geopolyAreaFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + double rArea = 0.0; + int ii; + for(ii=0; iinVertex-1; ii++){ + rArea += (p->a[ii*2] - p->a[ii*2+2]) /* (x0 - x1) */ + * (p->a[ii*2+1] + p->a[ii*2+3]) /* (y0 + y1) */ + * 0.5; + } + rArea += (p->a[ii*2] - p->a[0]) /* (xN - x0) */ + * (p->a[ii*2+1] + p->a[1]) /* (yN + y0) */ + * 0.5; + sqlite3_result_double(context, rArea); + sqlite3_free(p); + } +} + +/* +** If pPoly is a polygon, compute its bounding box. Then: +** +** (1) if aCoord!=0 store the bounding box in aCoord, returning NULL +** (2) otherwise, compute a GeoPoly for the bounding box and return the +** new GeoPoly +** +** If pPoly is NULL but aCoord is not NULL, then compute a new GeoPoly from +** the bounding box in aCoord and return a pointer to that GeoPoly. +*/ +static GeoPoly *geopolyBBox( + sqlite3_context *context, /* For recording the error */ + sqlite3_value *pPoly, /* The polygon */ + RtreeCoord *aCoord, /* Results here */ + int *pRc /* Error code here */ +){ + GeoPoly *pOut = 0; + GeoPoly *p; + float mnX, mxX, mnY, mxY; + if( pPoly==0 && aCoord!=0 ){ + p = 0; + mnX = aCoord[0].f; + mxX = aCoord[1].f; + mnY = aCoord[2].f; + mxY = aCoord[3].f; + goto geopolyBboxFill; + }else{ + p = geopolyFuncParam(context, pPoly, pRc); + } + if( p ){ + int ii; + mnX = mxX = p->a[0]; + mnY = mxY = p->a[1]; + for(ii=1; iinVertex; ii++){ + double r = p->a[ii*2]; + if( rmxX ) mxX = (float)r; + r = p->a[ii*2+1]; + if( rmxY ) mxY = (float)r; + } + if( pRc ) *pRc = SQLITE_OK; + if( aCoord==0 ){ + geopolyBboxFill: + pOut = sqlite3_realloc(p, sizeof(GeoPoly)+sizeof(GeoCoord)*6); + if( pOut==0 ){ + sqlite3_free(p); + if( context ) sqlite3_result_error_nomem(context); + if( pRc ) *pRc = SQLITE_NOMEM; + return 0; + } + pOut->nVertex = 4; + ii = 1; + pOut->hdr[0] = *(unsigned char*)ⅈ + pOut->hdr[1] = 0; + pOut->hdr[2] = 0; + pOut->hdr[3] = 4; + pOut->a[0] = mnX; + pOut->a[1] = mnY; + pOut->a[2] = mxX; + pOut->a[3] = mnY; + pOut->a[4] = mxX; + pOut->a[5] = mxY; + pOut->a[6] = mnX; + pOut->a[7] = mxY; + }else{ + sqlite3_free(p); + aCoord[0].f = mnX; + aCoord[1].f = mxX; + aCoord[2].f = mnY; + aCoord[3].f = mxY; + } + } + return pOut; +} + +/* +** Implementation of the geopoly_bbox(X) SQL function. +*/ +static void geopolyBBoxFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyBBox(context, argv[0], 0, 0); + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + +/* +** State vector for the geopoly_group_bbox() aggregate function. +*/ +typedef struct GeoBBox GeoBBox; +struct GeoBBox { + int isInit; + RtreeCoord a[4]; +}; + + +/* +** Implementation of the geopoly_group_bbox(X) aggregate SQL function. +*/ +static void geopolyBBoxStep( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + RtreeCoord a[4]; + int rc = SQLITE_OK; + (void)geopolyBBox(context, argv[0], a, &rc); + if( rc==SQLITE_OK ){ + GeoBBox *pBBox; + pBBox = (GeoBBox*)sqlite3_aggregate_context(context, sizeof(*pBBox)); + if( pBBox==0 ) return; + if( pBBox->isInit==0 ){ + pBBox->isInit = 1; + memcpy(pBBox->a, a, sizeof(RtreeCoord)*4); + }else{ + if( a[0].f < pBBox->a[0].f ) pBBox->a[0] = a[0]; + if( a[1].f > pBBox->a[1].f ) pBBox->a[1] = a[1]; + if( a[2].f < pBBox->a[2].f ) pBBox->a[2] = a[2]; + if( a[3].f > pBBox->a[3].f ) pBBox->a[3] = a[3]; + } + } +} +static void geopolyBBoxFinal( + sqlite3_context *context +){ + GeoPoly *p; + GeoBBox *pBBox; + pBBox = (GeoBBox*)sqlite3_aggregate_context(context, 0); + if( pBBox==0 ) return; + p = geopolyBBox(context, 0, pBBox->a, 0); + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + + +/* +** Determine if point (x0,y0) is beneath line segment (x1,y1)->(x2,y2). +** Returns: +** +** +2 x0,y0 is on the line segement +** +** +1 x0,y0 is beneath line segment +** +** 0 x0,y0 is not on or beneath the line segment or the line segment +** is vertical and x0,y0 is not on the line segment +** +** The left-most coordinate min(x1,x2) is not considered to be part of +** the line segment for the purposes of this analysis. +*/ +static int pointBeneathLine( + double x0, double y0, + double x1, double y1, + double x2, double y2 +){ + double y; + if( x0==x1 && y0==y1 ) return 2; + if( x1x2 ) return 0; + }else if( x1>x2 ){ + if( x0<=x2 || x0>x1 ) return 0; + }else{ + /* Vertical line segment */ + if( x0!=x1 ) return 0; + if( y0y1 && y0>y2 ) return 0; + return 2; + } + y = y1 + (y2-y1)*(x0-x1)/(x2-x1); + if( y0==y ) return 2; + if( y0nVertex-1; ii++){ + v = pointBeneathLine(x0,y0,p1->a[ii*2],p1->a[ii*2+1], + p1->a[ii*2+2],p1->a[ii*2+3]); + if( v==2 ) break; + cnt += v; + } + if( v!=2 ){ + v = pointBeneathLine(x0,y0,p1->a[ii*2],p1->a[ii*2+1], + p1->a[0],p1->a[1]); + } + if( v==2 ){ + sqlite3_result_int(context, 1); + }else if( ((v+cnt)&1)==0 ){ + sqlite3_result_int(context, 0); + }else{ + sqlite3_result_int(context, 2); + } + sqlite3_free(p1); +} + +/* Forward declaration */ +static int geopolyOverlap(GeoPoly *p1, GeoPoly *p2); + +/* +** SQL function: geopoly_within(P1,P2) +** +** Return +2 if P1 and P2 are the same polygon +** Return +1 if P2 is contained within P1 +** Return 0 if any part of P2 is on the outside of P1 +** +*/ +static void geopolyWithinFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0); + GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0); + if( p1 && p2 ){ + int x = geopolyOverlap(p1, p2); + if( x<0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_int(context, x==2 ? 1 : x==4 ? 2 : 0); + } + } + sqlite3_free(p1); + sqlite3_free(p2); +} + +/* Objects used by the overlap algorihm. */ +typedef struct GeoEvent GeoEvent; +typedef struct GeoSegment GeoSegment; +typedef struct GeoOverlap GeoOverlap; +struct GeoEvent { + double x; /* X coordinate at which event occurs */ + int eType; /* 0 for ADD, 1 for REMOVE */ + GeoSegment *pSeg; /* The segment to be added or removed */ + GeoEvent *pNext; /* Next event in the sorted list */ +}; +struct GeoSegment { + double C, B; /* y = C*x + B */ + double y; /* Current y value */ + float y0; /* Initial y value */ + unsigned char side; /* 1 for p1, 2 for p2 */ + unsigned int idx; /* Which segment within the side */ + GeoSegment *pNext; /* Next segment in a list sorted by y */ +}; +struct GeoOverlap { + GeoEvent *aEvent; /* Array of all events */ + GeoSegment *aSegment; /* Array of all segments */ + int nEvent; /* Number of events */ + int nSegment; /* Number of segments */ +}; + +/* +** Add a single segment and its associated events. +*/ +static void geopolyAddOneSegment( + GeoOverlap *p, + GeoCoord x0, + GeoCoord y0, + GeoCoord x1, + GeoCoord y1, + unsigned char side, + unsigned int idx +){ + GeoSegment *pSeg; + GeoEvent *pEvent; + if( x0==x1 ) return; /* Ignore vertical segments */ + if( x0>x1 ){ + GeoCoord t = x0; + x0 = x1; + x1 = t; + t = y0; + y0 = y1; + y1 = t; + } + pSeg = p->aSegment + p->nSegment; + p->nSegment++; + pSeg->C = (y1-y0)/(x1-x0); + pSeg->B = y1 - x1*pSeg->C; + pSeg->y0 = y0; + pSeg->side = side; + pSeg->idx = idx; + pEvent = p->aEvent + p->nEvent; + p->nEvent++; + pEvent->x = x0; + pEvent->eType = 0; + pEvent->pSeg = pSeg; + pEvent = p->aEvent + p->nEvent; + p->nEvent++; + pEvent->x = x1; + pEvent->eType = 1; + pEvent->pSeg = pSeg; +} + + + +/* +** Insert all segments and events for polygon pPoly. +*/ +static void geopolyAddSegments( + GeoOverlap *p, /* Add segments to this Overlap object */ + GeoPoly *pPoly, /* Take all segments from this polygon */ + unsigned char side /* The side of pPoly */ +){ + unsigned int i; + GeoCoord *x; + for(i=0; i<(unsigned)pPoly->nVertex-1; i++){ + x = pPoly->a + (i*2); + geopolyAddOneSegment(p, x[0], x[1], x[2], x[3], side, i); + } + x = pPoly->a + (i*2); + geopolyAddOneSegment(p, x[0], x[1], pPoly->a[0], pPoly->a[1], side, i); +} + +/* +** Merge two lists of sorted events by X coordinate +*/ +static GeoEvent *geopolyEventMerge(GeoEvent *pLeft, GeoEvent *pRight){ + GeoEvent head, *pLast; + head.pNext = 0; + pLast = &head; + while( pRight && pLeft ){ + if( pRight->x <= pLeft->x ){ + pLast->pNext = pRight; + pLast = pRight; + pRight = pRight->pNext; + }else{ + pLast->pNext = pLeft; + pLast = pLeft; + pLeft = pLeft->pNext; + } + } + pLast->pNext = pRight ? pRight : pLeft; + return head.pNext; +} + +/* +** Sort an array of nEvent event objects into a list. +*/ +static GeoEvent *geopolySortEventsByX(GeoEvent *aEvent, int nEvent){ + int mx = 0; + int i, j; + GeoEvent *p; + GeoEvent *a[50]; + for(i=0; ipNext = 0; + for(j=0; j=mx ) mx = j+1; + } + p = 0; + for(i=0; iy - pLeft->y; + if( r==0.0 ) r = pRight->C - pLeft->C; + if( r<0.0 ){ + pLast->pNext = pRight; + pLast = pRight; + pRight = pRight->pNext; + }else{ + pLast->pNext = pLeft; + pLast = pLeft; + pLeft = pLeft->pNext; + } + } + pLast->pNext = pRight ? pRight : pLeft; + return head.pNext; +} + +/* +** Sort a list of GeoSegments in order of increasing Y and in the event of +** a tie, increasing C (slope). +*/ +static GeoSegment *geopolySortSegmentsByYAndC(GeoSegment *pList){ + int mx = 0; + int i; + GeoSegment *p; + GeoSegment *a[50]; + while( pList ){ + p = pList; + pList = pList->pNext; + p->pNext = 0; + for(i=0; i=mx ) mx = i+1; + } + p = 0; + for(i=0; inVertex + p2->nVertex + 2; + GeoOverlap *p; + int nByte; + GeoEvent *pThisEvent; + double rX; + int rc = 0; + int needSort = 0; + GeoSegment *pActive = 0; + GeoSegment *pSeg; + unsigned char aOverlap[4]; + + nByte = sizeof(GeoEvent)*nVertex*2 + + sizeof(GeoSegment)*nVertex + + sizeof(GeoOverlap); + p = sqlite3_malloc( nByte ); + if( p==0 ) return -1; + p->aEvent = (GeoEvent*)&p[1]; + p->aSegment = (GeoSegment*)&p->aEvent[nVertex*2]; + p->nEvent = p->nSegment = 0; + geopolyAddSegments(p, p1, 1); + geopolyAddSegments(p, p2, 2); + pThisEvent = geopolySortEventsByX(p->aEvent, p->nEvent); + rX = pThisEvent->x==0.0 ? -1.0 : 0.0; + memset(aOverlap, 0, sizeof(aOverlap)); + while( pThisEvent ){ + if( pThisEvent->x!=rX ){ + GeoSegment *pPrev = 0; + int iMask = 0; + GEODEBUG(("Distinct X: %g\n", pThisEvent->x)); + rX = pThisEvent->x; + if( needSort ){ + GEODEBUG(("SORT\n")); + pActive = geopolySortSegmentsByYAndC(pActive); + needSort = 0; + } + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + if( pPrev ){ + if( pPrev->y!=pSeg->y ){ + GEODEBUG(("MASK: %d\n", iMask)); + aOverlap[iMask] = 1; + } + } + iMask ^= pSeg->side; + pPrev = pSeg; + } + pPrev = 0; + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + double y = pSeg->C*rX + pSeg->B; + GEODEBUG(("Segment %d.%d %g->%g\n", pSeg->side, pSeg->idx, pSeg->y, y)); + pSeg->y = y; + if( pPrev ){ + if( pPrev->y>pSeg->y && pPrev->side!=pSeg->side ){ + rc = 1; + GEODEBUG(("Crossing: %d.%d and %d.%d\n", + pPrev->side, pPrev->idx, + pSeg->side, pSeg->idx)); + goto geopolyOverlapDone; + }else if( pPrev->y!=pSeg->y ){ + GEODEBUG(("MASK: %d\n", iMask)); + aOverlap[iMask] = 1; + } + } + iMask ^= pSeg->side; + pPrev = pSeg; + } + } + GEODEBUG(("%s %d.%d C=%g B=%g\n", + pThisEvent->eType ? "RM " : "ADD", + pThisEvent->pSeg->side, pThisEvent->pSeg->idx, + pThisEvent->pSeg->C, + pThisEvent->pSeg->B)); + if( pThisEvent->eType==0 ){ + /* Add a segment */ + pSeg = pThisEvent->pSeg; + pSeg->y = pSeg->y0; + pSeg->pNext = pActive; + pActive = pSeg; + needSort = 1; + }else{ + /* Remove a segment */ + if( pActive==pThisEvent->pSeg ){ + pActive = pActive->pNext; + }else{ + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + if( pSeg->pNext==pThisEvent->pSeg ){ + pSeg->pNext = pSeg->pNext->pNext; + break; + } + } + } + } + pThisEvent = pThisEvent->pNext; + } + if( aOverlap[3]==0 ){ + rc = 0; + }else if( aOverlap[1]!=0 && aOverlap[2]==0 ){ + rc = 3; + }else if( aOverlap[1]==0 && aOverlap[2]!=0 ){ + rc = 2; + }else if( aOverlap[1]==0 && aOverlap[2]==0 ){ + rc = 4; + }else{ + rc = 1; + } + +geopolyOverlapDone: + sqlite3_free(p); + return rc; +} + +/* +** SQL function: geopoly_overlap(P1,P2) +** +** Determine whether or not P1 and P2 overlap. Return value: +** +** 0 The two polygons are disjoint +** 1 They overlap +** 2 P1 is completely contained within P2 +** 3 P2 is completely contained within P1 +** 4 P1 and P2 are the same polygon +** NULL Either P1 or P2 or both are not valid polygons +*/ +static void geopolyOverlapFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0); + GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0); + if( p1 && p2 ){ + int x = geopolyOverlap(p1, p2); + if( x<0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_int(context, x); + } + } + sqlite3_free(p1); + sqlite3_free(p2); +} + +/* +** Enable or disable debugging output +*/ +static void geopolyDebugFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ +#ifdef GEOPOLY_ENABLE_DEBUG + geo_debug = sqlite3_value_int(argv[0]); +#endif +} + +/* +** This function is the implementation of both the xConnect and xCreate +** methods of the geopoly virtual table. +** +** argv[0] -> module name +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> column names... +*/ +static int geopolyInit( + sqlite3 *db, /* Database connection */ + void *pAux, /* One of the RTREE_COORD_* constants */ + int argc, const char *const*argv, /* Parameters to CREATE TABLE statement */ + sqlite3_vtab **ppVtab, /* OUT: New virtual table */ + char **pzErr, /* OUT: Error message, if any */ + int isCreate /* True for xCreate, false for xConnect */ +){ + int rc = SQLITE_OK; + Rtree *pRtree; + int nDb; /* Length of string argv[1] */ + int nName; /* Length of string argv[2] */ + sqlite3_str *pSql; + char *zSql; + int ii; + + sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + + /* Allocate the sqlite3_vtab structure */ + nDb = (int)strlen(argv[1]); + nName = (int)strlen(argv[2]); + pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2); + if( !pRtree ){ + return SQLITE_NOMEM; + } + memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2); + pRtree->nBusy = 1; + pRtree->base.pModule = &rtreeModule; + pRtree->zDb = (char *)&pRtree[1]; + pRtree->zName = &pRtree->zDb[nDb+1]; + pRtree->eCoordType = RTREE_COORD_REAL32; + pRtree->nDim = 2; + pRtree->nDim2 = 4; + memcpy(pRtree->zDb, argv[1], nDb); + memcpy(pRtree->zName, argv[2], nName); + + + /* Create/Connect to the underlying relational database schema. If + ** that is successful, call sqlite3_declare_vtab() to configure + ** the r-tree table schema. + */ + pSql = sqlite3_str_new(db); + sqlite3_str_appendf(pSql, "CREATE TABLE x(_shape"); + pRtree->nAux = 1; /* Add one for _shape */ + pRtree->nAuxNotNull = 1; /* The _shape column is always not-null */ + for(ii=3; iinAux++; + sqlite3_str_appendf(pSql, ",%s", argv[ii]); + } + sqlite3_str_appendf(pSql, ");"); + zSql = sqlite3_str_finish(pSql); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else if( SQLITE_OK!=(rc = sqlite3_declare_vtab(db, zSql)) ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + } + sqlite3_free(zSql); + if( rc ) goto geopolyInit_fail; + pRtree->nBytesPerCell = 8 + pRtree->nDim2*4; + + /* Figure out the node size to use. */ + rc = getNodeSize(db, pRtree, isCreate, pzErr); + if( rc ) goto geopolyInit_fail; + rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate); + if( rc ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + goto geopolyInit_fail; + } + + *ppVtab = (sqlite3_vtab *)pRtree; + return SQLITE_OK; + +geopolyInit_fail: + if( rc==SQLITE_OK ) rc = SQLITE_ERROR; + assert( *ppVtab==0 ); + assert( pRtree->nBusy==1 ); + rtreeRelease(pRtree); + return rc; +} + + +/* +** GEOPOLY virtual table module xCreate method. +*/ +static int geopolyCreate( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return geopolyInit(db, pAux, argc, argv, ppVtab, pzErr, 1); +} + +/* +** GEOPOLY virtual table module xConnect method. +*/ +static int geopolyConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return geopolyInit(db, pAux, argc, argv, ppVtab, pzErr, 0); +} + + +/* +** GEOPOLY virtual table module xFilter method. +** +** Query plans: +** +** 1 rowid lookup +** 2 search for objects overlapping the same bounding box +** that contains polygon argv[0] +** 3 search for objects overlapping the same bounding box +** that contains polygon argv[0] +** 4 full table scan +*/ +static int geopolyFilter( + sqlite3_vtab_cursor *pVtabCursor, /* The cursor to initialize */ + int idxNum, /* Query plan */ + const char *idxStr, /* Not Used */ + int argc, sqlite3_value **argv /* Parameters to the query plan */ +){ + Rtree *pRtree = (Rtree *)pVtabCursor->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + RtreeNode *pRoot = 0; + int rc = SQLITE_OK; + int iCell = 0; + sqlite3_stmt *pStmt; + + rtreeReference(pRtree); + + /* Reset the cursor to the same state as rtreeOpen() leaves it in. */ + freeCursorConstraints(pCsr); + sqlite3_free(pCsr->aPoint); + pStmt = pCsr->pReadAux; + memset(pCsr, 0, sizeof(RtreeCursor)); + pCsr->base.pVtab = (sqlite3_vtab*)pRtree; + pCsr->pReadAux = pStmt; + + pCsr->iStrategy = idxNum; + if( idxNum==1 ){ + /* Special case - lookup by rowid. */ + RtreeNode *pLeaf; /* Leaf on which the required cell resides */ + RtreeSearchPoint *p; /* Search point for the leaf */ + i64 iRowid = sqlite3_value_int64(argv[0]); + i64 iNode = 0; + rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode); + if( rc==SQLITE_OK && pLeaf!=0 ){ + p = rtreeSearchPointNew(pCsr, RTREE_ZERO, 0); + assert( p!=0 ); /* Always returns pCsr->sPoint */ + pCsr->aNode[0] = pLeaf; + p->id = iNode; + p->eWithin = PARTLY_WITHIN; + rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &iCell); + p->iCell = (u8)iCell; + RTREE_QUEUE_TRACE(pCsr, "PUSH-F1:"); + }else{ + pCsr->atEOF = 1; + } + }else{ + /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array + ** with the configured constraints. + */ + rc = nodeAcquire(pRtree, 1, 0, &pRoot); + if( rc==SQLITE_OK && idxNum<=3 ){ + RtreeCoord bbox[4]; + RtreeConstraint *p; + assert( argc==1 ); + geopolyBBox(0, argv[0], bbox, &rc); + if( rc ){ + goto geopoly_filter_end; + } + pCsr->aConstraint = p = sqlite3_malloc(sizeof(RtreeConstraint)*4); + pCsr->nConstraint = 4; + if( p==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*4); + memset(pCsr->anQueue, 0, sizeof(u32)*(pRtree->iDepth + 1)); + if( idxNum==2 ){ + /* Overlap query */ + p->op = 'B'; + p->iCoord = 0; + p->u.rValue = bbox[1].f; + p++; + p->op = 'D'; + p->iCoord = 1; + p->u.rValue = bbox[0].f; + p++; + p->op = 'B'; + p->iCoord = 2; + p->u.rValue = bbox[3].f; + p++; + p->op = 'D'; + p->iCoord = 3; + p->u.rValue = bbox[2].f; + }else{ + /* Within query */ + p->op = 'D'; + p->iCoord = 0; + p->u.rValue = bbox[0].f; + p++; + p->op = 'B'; + p->iCoord = 1; + p->u.rValue = bbox[1].f; + p++; + p->op = 'D'; + p->iCoord = 2; + p->u.rValue = bbox[2].f; + p++; + p->op = 'B'; + p->iCoord = 3; + p->u.rValue = bbox[3].f; + } + } + } + if( rc==SQLITE_OK ){ + RtreeSearchPoint *pNew; + pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, (u8)(pRtree->iDepth+1)); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + goto geopoly_filter_end; + } + pNew->id = 1; + pNew->iCell = 0; + pNew->eWithin = PARTLY_WITHIN; + assert( pCsr->bPoint==1 ); + pCsr->aNode[0] = pRoot; + pRoot = 0; + RTREE_QUEUE_TRACE(pCsr, "PUSH-Fm:"); + rc = rtreeStepToLeaf(pCsr); + } + } + +geopoly_filter_end: + nodeRelease(pRtree, pRoot); + rtreeRelease(pRtree); + return rc; +} + +/* +** Rtree virtual table module xBestIndex method. There are three +** table scan strategies to choose from (in order from most to +** least desirable): +** +** idxNum idxStr Strategy +** ------------------------------------------------ +** 1 "rowid" Direct lookup by rowid. +** 2 "rtree" R-tree overlap query using geopoly_overlap() +** 3 "rtree" R-tree within query using geopoly_within() +** 4 "fullscan" full-table scan. +** ------------------------------------------------ +*/ +static int geopolyBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ + int ii; + int iRowidTerm = -1; + int iFuncTerm = -1; + int idxNum = 0; + + for(ii=0; iinConstraint; ii++){ + struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii]; + if( !p->usable ) continue; + if( p->iColumn<0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){ + iRowidTerm = ii; + break; + } + if( p->iColumn==0 && p->op>=SQLITE_INDEX_CONSTRAINT_FUNCTION ){ + /* p->op==SQLITE_INDEX_CONSTRAINT_FUNCTION for geopoly_overlap() + ** p->op==(SQLITE_INDEX_CONTRAINT_FUNCTION+1) for geopoly_within(). + ** See geopolyFindFunction() */ + iFuncTerm = ii; + idxNum = p->op - SQLITE_INDEX_CONSTRAINT_FUNCTION + 2; + } + } + + if( iRowidTerm>=0 ){ + pIdxInfo->idxNum = 1; + pIdxInfo->idxStr = "rowid"; + pIdxInfo->aConstraintUsage[iRowidTerm].argvIndex = 1; + pIdxInfo->aConstraintUsage[iRowidTerm].omit = 1; + pIdxInfo->estimatedCost = 30.0; + pIdxInfo->estimatedRows = 1; + pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE; + return SQLITE_OK; + } + if( iFuncTerm>=0 ){ + pIdxInfo->idxNum = idxNum; + pIdxInfo->idxStr = "rtree"; + pIdxInfo->aConstraintUsage[iFuncTerm].argvIndex = 1; + pIdxInfo->aConstraintUsage[iFuncTerm].omit = 0; + pIdxInfo->estimatedCost = 300.0; + pIdxInfo->estimatedRows = 10; + return SQLITE_OK; + } + pIdxInfo->idxNum = 4; + pIdxInfo->idxStr = "fullscan"; + pIdxInfo->estimatedCost = 3000000.0; + pIdxInfo->estimatedRows = 100000; + return SQLITE_OK; +} + + +/* +** GEOPOLY virtual table module xColumn method. +*/ +static int geopolyColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ + Rtree *pRtree = (Rtree *)cur->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)cur; + RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); + int rc = SQLITE_OK; + RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); + + if( rc ) return rc; + if( p==0 ) return SQLITE_OK; + if( i==0 && sqlite3_vtab_nochange(ctx) ) return SQLITE_OK; + if( i<=pRtree->nAux ){ + if( !pCsr->bAuxValid ){ + if( pCsr->pReadAux==0 ){ + rc = sqlite3_prepare_v3(pRtree->db, pRtree->zReadAuxSql, -1, 0, + &pCsr->pReadAux, 0); + if( rc ) return rc; + } + sqlite3_bind_int64(pCsr->pReadAux, 1, + nodeGetRowid(pRtree, pNode, p->iCell)); + rc = sqlite3_step(pCsr->pReadAux); + if( rc==SQLITE_ROW ){ + pCsr->bAuxValid = 1; + }else{ + sqlite3_reset(pCsr->pReadAux); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + return rc; + } + } + sqlite3_result_value(ctx, sqlite3_column_value(pCsr->pReadAux, i+2)); + } + return SQLITE_OK; +} + + +/* +** The xUpdate method for GEOPOLY module virtual tables. +** +** For DELETE: +** +** argv[0] = the rowid to be deleted +** +** For INSERT: +** +** argv[0] = SQL NULL +** argv[1] = rowid to insert, or an SQL NULL to select automatically +** argv[2] = _shape column +** argv[3] = first application-defined column.... +** +** For UPDATE: +** +** argv[0] = rowid to modify. Never NULL +** argv[1] = rowid after the change. Never NULL +** argv[2] = new value for _shape +** argv[3] = new value for first application-defined column.... +*/ +static int geopolyUpdate( + sqlite3_vtab *pVtab, + int nData, + sqlite3_value **aData, + sqlite_int64 *pRowid +){ + Rtree *pRtree = (Rtree *)pVtab; + int rc = SQLITE_OK; + RtreeCell cell; /* New cell to insert if nData>1 */ + i64 oldRowid; /* The old rowid */ + int oldRowidValid; /* True if oldRowid is valid */ + i64 newRowid; /* The new rowid */ + int newRowidValid; /* True if newRowid is valid */ + int coordChange = 0; /* Change in coordinates */ + + if( pRtree->nNodeRef ){ + /* Unable to write to the btree while another cursor is reading from it, + ** since the write might do a rebalance which would disrupt the read + ** cursor. */ + return SQLITE_LOCKED_VTAB; + } + rtreeReference(pRtree); + assert(nData>=1); + + oldRowidValid = sqlite3_value_type(aData[0])!=SQLITE_NULL;; + oldRowid = oldRowidValid ? sqlite3_value_int64(aData[0]) : 0; + newRowidValid = nData>1 && sqlite3_value_type(aData[1])!=SQLITE_NULL; + newRowid = newRowidValid ? sqlite3_value_int64(aData[1]) : 0; + cell.iRowid = newRowid; + + if( nData>1 /* not a DELETE */ + && (!oldRowidValid /* INSERT */ + || !sqlite3_value_nochange(aData[2]) /* UPDATE _shape */ + || oldRowid!=newRowid) /* Rowid change */ + ){ + geopolyBBox(0, aData[2], cell.aCoord, &rc); + if( rc ){ + if( rc==SQLITE_ERROR ){ + pVtab->zErrMsg = + sqlite3_mprintf("_shape does not contain a valid polygon"); + } + goto geopoly_update_end; + } + coordChange = 1; + + /* If a rowid value was supplied, check if it is already present in + ** the table. If so, the constraint has failed. */ + if( newRowidValid && (!oldRowidValid || oldRowid!=newRowid) ){ + int steprc; + sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); + steprc = sqlite3_step(pRtree->pReadRowid); + rc = sqlite3_reset(pRtree->pReadRowid); + if( SQLITE_ROW==steprc ){ + if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){ + rc = rtreeDeleteRowid(pRtree, cell.iRowid); + }else{ + rc = rtreeConstraintError(pRtree, 0); + } + } + } + } + + /* If aData[0] is not an SQL NULL value, it is the rowid of a + ** record to delete from the r-tree table. The following block does + ** just that. + */ + if( rc==SQLITE_OK && (nData==1 || (coordChange && oldRowidValid)) ){ + rc = rtreeDeleteRowid(pRtree, oldRowid); + } + + /* If the aData[] array contains more than one element, elements + ** (aData[2]..aData[argc-1]) contain a new record to insert into + ** the r-tree structure. + */ + if( rc==SQLITE_OK && nData>1 && coordChange ){ + /* Insert the new record into the r-tree */ + RtreeNode *pLeaf = 0; + if( !newRowidValid ){ + rc = rtreeNewRowid(pRtree, &cell.iRowid); + } + *pRowid = cell.iRowid; + if( rc==SQLITE_OK ){ + rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf); + } + if( rc==SQLITE_OK ){ + int rc2; + pRtree->iReinsertHeight = -1; + rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); + rc2 = nodeRelease(pRtree, pLeaf); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + } + + /* Change the data */ + if( rc==SQLITE_OK && nData>1 ){ + sqlite3_stmt *pUp = pRtree->pWriteAux; + int jj; + int nChange = 0; + sqlite3_bind_int64(pUp, 1, cell.iRowid); + assert( pRtree->nAux>=1 ); + if( sqlite3_value_nochange(aData[2]) ){ + sqlite3_bind_null(pUp, 2); + }else{ + sqlite3_bind_value(pUp, 2, aData[2]); + nChange = 1; + } + for(jj=1; jjnAux; jj++){ + nChange++; + sqlite3_bind_value(pUp, jj+2, aData[jj+2]); + } + if( nChange ){ + sqlite3_step(pUp); + rc = sqlite3_reset(pUp); + } + } + +geopoly_update_end: + rtreeRelease(pRtree); + return rc; +} + +/* +** Report that geopoly_overlap() is an overloaded function suitable +** for use in xBestIndex. +*/ +static int geopolyFindFunction( + sqlite3_vtab *pVtab, + int nArg, + const char *zName, + void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), + void **ppArg +){ + if( sqlite3_stricmp(zName, "geopoly_overlap")==0 ){ + *pxFunc = geopolyOverlapFunc; + *ppArg = 0; + return SQLITE_INDEX_CONSTRAINT_FUNCTION; + } + if( sqlite3_stricmp(zName, "geopoly_within")==0 ){ + *pxFunc = geopolyWithinFunc; + *ppArg = 0; + return SQLITE_INDEX_CONSTRAINT_FUNCTION+1; + } + return 0; +} + + +static sqlite3_module geopolyModule = { + 2, /* iVersion */ + geopolyCreate, /* xCreate - create a table */ + geopolyConnect, /* xConnect - connect to an existing table */ + geopolyBestIndex, /* xBestIndex - Determine search strategy */ + rtreeDisconnect, /* xDisconnect - Disconnect from a table */ + rtreeDestroy, /* xDestroy - Drop a table */ + rtreeOpen, /* xOpen - open a cursor */ + rtreeClose, /* xClose - close a cursor */ + geopolyFilter, /* xFilter - configure scan constraints */ + rtreeNext, /* xNext - advance a cursor */ + rtreeEof, /* xEof */ + geopolyColumn, /* xColumn - read data */ + rtreeRowid, /* xRowid - read data */ + geopolyUpdate, /* xUpdate - write data */ + rtreeBeginTransaction, /* xBegin - begin transaction */ + rtreeEndTransaction, /* xSync - sync transaction */ + rtreeEndTransaction, /* xCommit - commit transaction */ + rtreeEndTransaction, /* xRollback - rollback transaction */ + geopolyFindFunction, /* xFindFunction - function overloading */ + rtreeRename, /* xRename - rename the table */ + rtreeSavepoint, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ +}; + +static int sqlite3_geopoly_init(sqlite3 *db){ + int rc = SQLITE_OK; + static const struct { + void (*xFunc)(sqlite3_context*,int,sqlite3_value**); + int nArg; + const char *zName; + } aFunc[] = { + { geopolyAreaFunc, 1, "geopoly_area" }, + { geopolyBlobFunc, 1, "geopoly_blob" }, + { geopolyJsonFunc, 1, "geopoly_json" }, + { geopolySvgFunc, -1, "geopoly_svg" }, + { geopolyWithinFunc, 2, "geopoly_within" }, + { geopolyContainsPointFunc, 3, "geopoly_contains_point" }, + { geopolyOverlapFunc, 2, "geopoly_overlap" }, + { geopolyDebugFunc, 1, "geopoly_debug" }, + { geopolyBBoxFunc, 1, "geopoly_bbox" }, + { geopolyXformFunc, 7, "geopoly_xform" }, + }; + static const struct { + void (*xStep)(sqlite3_context*,int,sqlite3_value**); + void (*xFinal)(sqlite3_context*); + const char *zName; + } aAgg[] = { + { geopolyBBoxStep, geopolyBBoxFinal, "geopoly_group_bbox" }, + }; + int i; + for(i=0; ipWriteRowid, 1); sqlite3_bind_null(pRtree->pWriteRowid, 2); @@ -3180,7 +3181,7 @@ /* Figure out the rowid of the new row. */ if( bHaveRowid==0 ){ - rc = newRowid(pRtree, &cell.iRowid); + rc = rtreeNewRowid(pRtree, &cell.iRowid); } *pRowid = cell.iRowid; @@ -3272,7 +3273,7 @@ */ static int rtreeSavepoint(sqlite3_vtab *pVtab, int iSavepoint){ Rtree *pRtree = (Rtree *)pVtab; - int iwt = pRtree->inWrTrans; + u8 iwt = pRtree->inWrTrans; UNUSED_PARAMETER(iSavepoint); pRtree->inWrTrans = 0; nodeBlobReset(pRtree); @@ -3453,7 +3454,11 @@ sqlite3_str_appendf(p, "UPDATE \"%w\".\"%w_rowid\"SET ", zDb, zPrefix); for(ii=0; iinAux; ii++){ if( ii ) sqlite3_str_append(p, ",", 1); - sqlite3_str_appendf(p,"a%d=?%d",ii,ii+2); + if( iinAuxNotNull ){ + sqlite3_str_appendf(p,"a%d=coalesce(?%d,a%d)",ii,ii+2,ii); + }else{ + sqlite3_str_appendf(p,"a%d=?%d",ii,ii+2); + } } sqlite3_str_appendf(p, " WHERE rowid=?1"); zSql = sqlite3_str_finish(p); @@ -4222,6 +4227,10 @@ } } +/* Conditionally include the geopoly code */ +#ifdef SQLITE_ENABLE_GEOPOLY +# include "geopoly.c" +#endif /* ** Register the r-tree module with database handle db. This creates the @@ -4251,6 +4260,11 @@ void *c = (void *)RTREE_COORD_INT32; rc = sqlite3_create_module_v2(db, "rtree_i32", &rtreeModule, c, 0); } +#ifdef SQLITE_ENABLE_GEOPOLY + if( rc==SQLITE_OK ){ + rc = sqlite3_geopoly_init(db); + } +#endif return rc; } diff -Nru lxd-3.0.2/dist/sqlite/ext/rtree/util/randomshape.tcl lxd-3.0.3/dist/sqlite/ext/rtree/util/randomshape.tcl --- lxd-3.0.2/dist/sqlite/ext/rtree/util/randomshape.tcl 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/rtree/util/randomshape.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,87 @@ +#!/usr/bin/tclsh +# +# This script generates a cluster of random polygons that are useful +# for testing the geopoly extension. +# +# Usage: +# +# tclsh randomshape.tcl | tee x.sql | sqlite3 >x.html +# +# The output files are x.sql and x.html. Run the above multiple times +# until an interesting "x.html" file is found, then use the "x.sql" inputs +# to construct test cases. +# +proc randomenclosure {cx cy p1 p2 p3 p4} { + set r 0 + set pi 3.145926 + set pi2 [expr {$pi*2}] + set x0 [expr {$cx + rand()*$p3 + $p4}] + set ans "\[\[$x0,$cy\]" + while {1} { + set r [expr {$r+$p1+$p2*rand()}] + if {$r>=$pi2} break + set m [expr {rand()*$p3 + $p4}] + set x [expr {$cx+$m*cos($r)}] + set y [expr {$cy+$m*sin($r)}] + append ans ",\[$x,$y\]" + } + append ans ",\[$x0,$cy\]\]" + return $ans +} +proc randomshape1 {} { + set cx [expr {100+int(rand()*800)}] + set cy [expr {100+int(rand()*600)}] + set p1 [expr {rand()*0.1}] + set p2 [expr {rand()*0.5+0.5}] + set p3 [expr {rand()*100+25}] + set p4 [expr {rand()*25}] + return [randomenclosure $cx $cy $p1 $p2 $p3 $p4] +} +proc randomshape1_sm {} { + set cx [expr {100+int(rand()*800)}] + set cy [expr {100+int(rand()*600)}] + set p1 [expr {rand()*0.1}] + set p2 [expr {rand()*0.5+0.5}] + set p3 [expr {rand()*10+25}] + set p4 [expr {rand()*5}] + return [randomenclosure $cx $cy $p1 $p2 $p3 $p4] +} +proc randomshape2 {} { + set cx [expr {400+int(rand()*200)}] + set cy [expr {300+int(rand()*200)}] + set p1 [expr {rand()*0.05}] + set p2 [expr {rand()*0.5+0.5}] + set p3 [expr {rand()*50+200}] + set p4 [expr {rand()*50+100}] + return [randomenclosure $cx $cy $p1 $p2 $p3 $p4] +} +proc randomcolor {} { + set n [expr {int(rand()*5)}] + return [lindex {red orange green blue purple} $n] +} + +puts {.print ''} +puts {.print ''} +puts {CREATE TABLE t1(poly,clr);} +puts {CREATE TABLE t2(poly,clr);} +for {set i 0} {$i<30} {incr i} { + puts "INSERT INTO t1(rowid,poly,clr)" + puts " VALUES($i,'[randomshape1]','[randomcolor]');" +} +for {set i 30} {$i<80} {incr i} { + puts "INSERT INTO t1(rowid,poly,clr)" + puts " VALUES($i,'[randomshape1_sm]','[randomcolor]');" +} +for {set i 100} {$i<105} {incr i} { + puts "INSERT INTO t2(rowid,poly,clr)" + puts " VALUES($i,'[randomshape2]','[randomcolor]');" +} + +puts {DELETE FROM t1 WHERE geopoly_json(poly) IS NULL;} +puts {SELECT geopoly_svg(poly, + printf('style="fill:none;stroke:%s;stroke-width:1;"',clr)) + FROM t1;} +puts {SELECT geopoly_svg(poly, + printf('style="fill:none;stroke:%s;stroke-width:2;"',clr)) + FROM t2;} +puts {.print ''} diff -Nru lxd-3.0.2/dist/sqlite/ext/rtree/visual01.txt lxd-3.0.3/dist/sqlite/ext/rtree/visual01.txt --- lxd-3.0.2/dist/sqlite/ext/rtree/visual01.txt 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/rtree/visual01.txt 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,589 @@ +#!sqlite3 +# +# This is a visual test case for the geopoly virtual table. +# +# Run this script in the sqlite3 CLI, and redirect output into an +# HTML file. This display the HTML in a webbrowser. +# + +/* Test data. +** Lots of shapes to be displayed over a 1000x800 canvas. +*/ +CREATE TEMP TABLE basis(name TEXT, jshape TEXT); +INSERT INTO basis(name,jshape) VALUES + ('box-20','[[0,0],[20,0],[20,20],[0,20],[0,0]]'), + ('house-70','[[0,0],[50,0],[50,50],[25,70],[0,50],[0,0]]'), + ('line-40','[[0,0],[40,0],[40,5],[0,5],[0,0]]'), + ('line-80','[[0,0],[80,0],[80,7],[0,7],[0,0]]'), + ('arrow-50','[[0,0],[25,25],[0,50],[15,25],[0,0]]'), + ('triangle-30','[[0,0],[30,0],[15,30],[0,0]]'), + ('angle-30','[[0,0],[30,0],[30,30],[26,30],[26,4],[0,4],[0,0]]'), + ('star-10','[[1,0],[5,2],[9,0],[7,4],[10,8],[7,7],[5,10],[3,7],[0,8],[3,4],[1,0]]'); +CREATE TEMP TABLE xform(A,B,C,D,clr); +INSERT INTO xform(A,B,clr) VALUES + (1,0,'black'), + (0.707,0.707,'blue'), + (0.5,0.866,'red'), + (-0.866,0.5,'green'); +CREATE TEMP TABLE xyoff(id1,id2,xoff,yoff,PRIMARY KEY(id1,id2,xoff,yoff)) + WITHOUT ROWID; +INSERT INTO xyoff VALUES(1,1,811,659); +INSERT INTO xyoff VALUES(1,1,235,550); +INSERT INTO xyoff VALUES(1,1,481,620); +INSERT INTO xyoff VALUES(1,1,106,494); +INSERT INTO xyoff VALUES(1,1,487,106); +INSERT INTO xyoff VALUES(1,1,817,595); +INSERT INTO xyoff VALUES(1,1,240,504); +INSERT INTO xyoff VALUES(1,1,806,457); +INSERT INTO xyoff VALUES(1,1,608,107); +INSERT INTO xyoff VALUES(1,1,768,662); +INSERT INTO xyoff VALUES(1,2,808,528); +INSERT INTO xyoff VALUES(1,2,768,528); +INSERT INTO xyoff VALUES(1,2,771,171); +INSERT INTO xyoff VALUES(1,2,275,671); +INSERT INTO xyoff VALUES(1,2,326,336); +INSERT INTO xyoff VALUES(1,2,690,688); +INSERT INTO xyoff VALUES(1,2,597,239); +INSERT INTO xyoff VALUES(1,2,317,528); +INSERT INTO xyoff VALUES(1,2,366,223); +INSERT INTO xyoff VALUES(1,2,621,154); +INSERT INTO xyoff VALUES(1,3,829,469); +INSERT INTO xyoff VALUES(1,3,794,322); +INSERT INTO xyoff VALUES(1,3,358,387); +INSERT INTO xyoff VALUES(1,3,184,444); +INSERT INTO xyoff VALUES(1,3,729,500); +INSERT INTO xyoff VALUES(1,3,333,523); +INSERT INTO xyoff VALUES(1,3,117,595); +INSERT INTO xyoff VALUES(1,3,496,201); +INSERT INTO xyoff VALUES(1,3,818,601); +INSERT INTO xyoff VALUES(1,3,541,343); +INSERT INTO xyoff VALUES(1,4,603,248); +INSERT INTO xyoff VALUES(1,4,761,649); +INSERT INTO xyoff VALUES(1,4,611,181); +INSERT INTO xyoff VALUES(1,4,607,233); +INSERT INTO xyoff VALUES(1,4,860,206); +INSERT INTO xyoff VALUES(1,4,310,231); +INSERT INTO xyoff VALUES(1,4,727,539); +INSERT INTO xyoff VALUES(1,4,660,661); +INSERT INTO xyoff VALUES(1,4,403,133); +INSERT INTO xyoff VALUES(1,4,619,331); +INSERT INTO xyoff VALUES(2,1,712,578); +INSERT INTO xyoff VALUES(2,1,567,313); +INSERT INTO xyoff VALUES(2,1,231,423); +INSERT INTO xyoff VALUES(2,1,490,175); +INSERT INTO xyoff VALUES(2,1,898,353); +INSERT INTO xyoff VALUES(2,1,589,483); +INSERT INTO xyoff VALUES(2,1,188,462); +INSERT INTO xyoff VALUES(2,1,720,106); +INSERT INTO xyoff VALUES(2,1,793,380); +INSERT INTO xyoff VALUES(2,1,154,396); +INSERT INTO xyoff VALUES(2,2,324,218); +INSERT INTO xyoff VALUES(2,2,120,327); +INSERT INTO xyoff VALUES(2,2,655,133); +INSERT INTO xyoff VALUES(2,2,516,603); +INSERT INTO xyoff VALUES(2,2,529,572); +INSERT INTO xyoff VALUES(2,2,481,212); +INSERT INTO xyoff VALUES(2,2,802,107); +INSERT INTO xyoff VALUES(2,2,234,509); +INSERT INTO xyoff VALUES(2,2,501,269); +INSERT INTO xyoff VALUES(2,2,349,553); +INSERT INTO xyoff VALUES(2,3,495,685); +INSERT INTO xyoff VALUES(2,3,897,372); +INSERT INTO xyoff VALUES(2,3,350,681); +INSERT INTO xyoff VALUES(2,3,832,257); +INSERT INTO xyoff VALUES(2,3,778,149); +INSERT INTO xyoff VALUES(2,3,683,426); +INSERT INTO xyoff VALUES(2,3,693,217); +INSERT INTO xyoff VALUES(2,3,746,317); +INSERT INTO xyoff VALUES(2,3,805,369); +INSERT INTO xyoff VALUES(2,3,336,585); +INSERT INTO xyoff VALUES(2,4,890,255); +INSERT INTO xyoff VALUES(2,4,556,565); +INSERT INTO xyoff VALUES(2,4,865,555); +INSERT INTO xyoff VALUES(2,4,230,293); +INSERT INTO xyoff VALUES(2,4,247,251); +INSERT INTO xyoff VALUES(2,4,730,563); +INSERT INTO xyoff VALUES(2,4,318,282); +INSERT INTO xyoff VALUES(2,4,220,431); +INSERT INTO xyoff VALUES(2,4,828,336); +INSERT INTO xyoff VALUES(2,4,278,525); +INSERT INTO xyoff VALUES(3,1,324,656); +INSERT INTO xyoff VALUES(3,1,625,362); +INSERT INTO xyoff VALUES(3,1,155,570); +INSERT INTO xyoff VALUES(3,1,267,433); +INSERT INTO xyoff VALUES(3,1,599,121); +INSERT INTO xyoff VALUES(3,1,873,498); +INSERT INTO xyoff VALUES(3,1,789,520); +INSERT INTO xyoff VALUES(3,1,656,378); +INSERT INTO xyoff VALUES(3,1,831,601); +INSERT INTO xyoff VALUES(3,1,256,471); +INSERT INTO xyoff VALUES(3,2,332,258); +INSERT INTO xyoff VALUES(3,2,305,463); +INSERT INTO xyoff VALUES(3,2,796,341); +INSERT INTO xyoff VALUES(3,2,830,229); +INSERT INTO xyoff VALUES(3,2,413,271); +INSERT INTO xyoff VALUES(3,2,269,140); +INSERT INTO xyoff VALUES(3,2,628,441); +INSERT INTO xyoff VALUES(3,2,747,643); +INSERT INTO xyoff VALUES(3,2,584,435); +INSERT INTO xyoff VALUES(3,2,784,314); +INSERT INTO xyoff VALUES(3,3,722,233); +INSERT INTO xyoff VALUES(3,3,815,421); +INSERT INTO xyoff VALUES(3,3,401,267); +INSERT INTO xyoff VALUES(3,3,451,650); +INSERT INTO xyoff VALUES(3,3,329,485); +INSERT INTO xyoff VALUES(3,3,878,370); +INSERT INTO xyoff VALUES(3,3,162,616); +INSERT INTO xyoff VALUES(3,3,844,183); +INSERT INTO xyoff VALUES(3,3,161,216); +INSERT INTO xyoff VALUES(3,3,176,676); +INSERT INTO xyoff VALUES(3,4,780,128); +INSERT INTO xyoff VALUES(3,4,566,121); +INSERT INTO xyoff VALUES(3,4,646,120); +INSERT INTO xyoff VALUES(3,4,223,557); +INSERT INTO xyoff VALUES(3,4,251,117); +INSERT INTO xyoff VALUES(3,4,139,209); +INSERT INTO xyoff VALUES(3,4,813,597); +INSERT INTO xyoff VALUES(3,4,454,538); +INSERT INTO xyoff VALUES(3,4,616,198); +INSERT INTO xyoff VALUES(3,4,210,159); +INSERT INTO xyoff VALUES(4,1,208,415); +INSERT INTO xyoff VALUES(4,1,326,665); +INSERT INTO xyoff VALUES(4,1,612,133); +INSERT INTO xyoff VALUES(4,1,537,513); +INSERT INTO xyoff VALUES(4,1,638,438); +INSERT INTO xyoff VALUES(4,1,808,269); +INSERT INTO xyoff VALUES(4,1,552,121); +INSERT INTO xyoff VALUES(4,1,100,189); +INSERT INTO xyoff VALUES(4,1,643,664); +INSERT INTO xyoff VALUES(4,1,726,378); +INSERT INTO xyoff VALUES(4,2,478,409); +INSERT INTO xyoff VALUES(4,2,497,507); +INSERT INTO xyoff VALUES(4,2,233,148); +INSERT INTO xyoff VALUES(4,2,587,237); +INSERT INTO xyoff VALUES(4,2,604,166); +INSERT INTO xyoff VALUES(4,2,165,455); +INSERT INTO xyoff VALUES(4,2,320,258); +INSERT INTO xyoff VALUES(4,2,353,496); +INSERT INTO xyoff VALUES(4,2,347,495); +INSERT INTO xyoff VALUES(4,2,166,622); +INSERT INTO xyoff VALUES(4,3,461,332); +INSERT INTO xyoff VALUES(4,3,685,278); +INSERT INTO xyoff VALUES(4,3,427,594); +INSERT INTO xyoff VALUES(4,3,467,346); +INSERT INTO xyoff VALUES(4,3,125,548); +INSERT INTO xyoff VALUES(4,3,597,680); +INSERT INTO xyoff VALUES(4,3,820,445); +INSERT INTO xyoff VALUES(4,3,144,330); +INSERT INTO xyoff VALUES(4,3,557,434); +INSERT INTO xyoff VALUES(4,3,254,315); +INSERT INTO xyoff VALUES(4,4,157,339); +INSERT INTO xyoff VALUES(4,4,249,220); +INSERT INTO xyoff VALUES(4,4,391,323); +INSERT INTO xyoff VALUES(4,4,589,429); +INSERT INTO xyoff VALUES(4,4,859,592); +INSERT INTO xyoff VALUES(4,4,337,680); +INSERT INTO xyoff VALUES(4,4,410,288); +INSERT INTO xyoff VALUES(4,4,636,596); +INSERT INTO xyoff VALUES(4,4,734,433); +INSERT INTO xyoff VALUES(4,4,559,549); +INSERT INTO xyoff VALUES(5,1,549,607); +INSERT INTO xyoff VALUES(5,1,584,498); +INSERT INTO xyoff VALUES(5,1,699,116); +INSERT INTO xyoff VALUES(5,1,525,524); +INSERT INTO xyoff VALUES(5,1,304,667); +INSERT INTO xyoff VALUES(5,1,302,232); +INSERT INTO xyoff VALUES(5,1,403,149); +INSERT INTO xyoff VALUES(5,1,824,403); +INSERT INTO xyoff VALUES(5,1,697,203); +INSERT INTO xyoff VALUES(5,1,293,689); +INSERT INTO xyoff VALUES(5,2,199,275); +INSERT INTO xyoff VALUES(5,2,395,393); +INSERT INTO xyoff VALUES(5,2,657,642); +INSERT INTO xyoff VALUES(5,2,200,655); +INSERT INTO xyoff VALUES(5,2,882,234); +INSERT INTO xyoff VALUES(5,2,483,565); +INSERT INTO xyoff VALUES(5,2,755,640); +INSERT INTO xyoff VALUES(5,2,810,305); +INSERT INTO xyoff VALUES(5,2,731,655); +INSERT INTO xyoff VALUES(5,2,466,690); +INSERT INTO xyoff VALUES(5,3,563,584); +INSERT INTO xyoff VALUES(5,3,491,117); +INSERT INTO xyoff VALUES(5,3,779,292); +INSERT INTO xyoff VALUES(5,3,375,637); +INSERT INTO xyoff VALUES(5,3,253,553); +INSERT INTO xyoff VALUES(5,3,797,514); +INSERT INTO xyoff VALUES(5,3,229,480); +INSERT INTO xyoff VALUES(5,3,257,194); +INSERT INTO xyoff VALUES(5,3,449,555); +INSERT INTO xyoff VALUES(5,3,849,630); +INSERT INTO xyoff VALUES(5,4,329,286); +INSERT INTO xyoff VALUES(5,4,640,197); +INSERT INTO xyoff VALUES(5,4,104,150); +INSERT INTO xyoff VALUES(5,4,438,272); +INSERT INTO xyoff VALUES(5,4,773,226); +INSERT INTO xyoff VALUES(5,4,441,650); +INSERT INTO xyoff VALUES(5,4,242,340); +INSERT INTO xyoff VALUES(5,4,301,435); +INSERT INTO xyoff VALUES(5,4,171,397); +INSERT INTO xyoff VALUES(5,4,541,619); +INSERT INTO xyoff VALUES(6,1,651,301); +INSERT INTO xyoff VALUES(6,1,637,137); +INSERT INTO xyoff VALUES(6,1,765,643); +INSERT INTO xyoff VALUES(6,1,173,296); +INSERT INTO xyoff VALUES(6,1,263,192); +INSERT INTO xyoff VALUES(6,1,791,302); +INSERT INTO xyoff VALUES(6,1,860,601); +INSERT INTO xyoff VALUES(6,1,780,445); +INSERT INTO xyoff VALUES(6,1,462,214); +INSERT INTO xyoff VALUES(6,1,802,207); +INSERT INTO xyoff VALUES(6,2,811,685); +INSERT INTO xyoff VALUES(6,2,533,531); +INSERT INTO xyoff VALUES(6,2,390,614); +INSERT INTO xyoff VALUES(6,2,260,580); +INSERT INTO xyoff VALUES(6,2,116,377); +INSERT INTO xyoff VALUES(6,2,860,458); +INSERT INTO xyoff VALUES(6,2,438,590); +INSERT INTO xyoff VALUES(6,2,604,562); +INSERT INTO xyoff VALUES(6,2,241,242); +INSERT INTO xyoff VALUES(6,2,667,298); +INSERT INTO xyoff VALUES(6,3,787,698); +INSERT INTO xyoff VALUES(6,3,868,521); +INSERT INTO xyoff VALUES(6,3,412,587); +INSERT INTO xyoff VALUES(6,3,640,131); +INSERT INTO xyoff VALUES(6,3,748,410); +INSERT INTO xyoff VALUES(6,3,257,244); +INSERT INTO xyoff VALUES(6,3,411,195); +INSERT INTO xyoff VALUES(6,3,464,356); +INSERT INTO xyoff VALUES(6,3,157,339); +INSERT INTO xyoff VALUES(6,3,434,505); +INSERT INTO xyoff VALUES(6,4,480,671); +INSERT INTO xyoff VALUES(6,4,519,228); +INSERT INTO xyoff VALUES(6,4,404,513); +INSERT INTO xyoff VALUES(6,4,120,538); +INSERT INTO xyoff VALUES(6,4,403,663); +INSERT INTO xyoff VALUES(6,4,477,677); +INSERT INTO xyoff VALUES(6,4,690,154); +INSERT INTO xyoff VALUES(6,4,606,498); +INSERT INTO xyoff VALUES(6,4,430,665); +INSERT INTO xyoff VALUES(6,4,499,273); +INSERT INTO xyoff VALUES(7,1,118,526); +INSERT INTO xyoff VALUES(7,1,817,522); +INSERT INTO xyoff VALUES(7,1,388,638); +INSERT INTO xyoff VALUES(7,1,181,265); +INSERT INTO xyoff VALUES(7,1,442,332); +INSERT INTO xyoff VALUES(7,1,475,282); +INSERT INTO xyoff VALUES(7,1,722,633); +INSERT INTO xyoff VALUES(7,1,104,394); +INSERT INTO xyoff VALUES(7,1,631,262); +INSERT INTO xyoff VALUES(7,1,372,392); +INSERT INTO xyoff VALUES(7,2,600,413); +INSERT INTO xyoff VALUES(7,2,386,223); +INSERT INTO xyoff VALUES(7,2,839,174); +INSERT INTO xyoff VALUES(7,2,293,410); +INSERT INTO xyoff VALUES(7,2,281,391); +INSERT INTO xyoff VALUES(7,2,859,387); +INSERT INTO xyoff VALUES(7,2,478,347); +INSERT INTO xyoff VALUES(7,2,646,690); +INSERT INTO xyoff VALUES(7,2,713,234); +INSERT INTO xyoff VALUES(7,2,199,588); +INSERT INTO xyoff VALUES(7,3,389,256); +INSERT INTO xyoff VALUES(7,3,349,542); +INSERT INTO xyoff VALUES(7,3,363,345); +INSERT INTO xyoff VALUES(7,3,751,302); +INSERT INTO xyoff VALUES(7,3,423,386); +INSERT INTO xyoff VALUES(7,3,267,444); +INSERT INTO xyoff VALUES(7,3,243,182); +INSERT INTO xyoff VALUES(7,3,453,658); +INSERT INTO xyoff VALUES(7,3,126,345); +INSERT INTO xyoff VALUES(7,3,120,472); +INSERT INTO xyoff VALUES(7,4,359,654); +INSERT INTO xyoff VALUES(7,4,339,516); +INSERT INTO xyoff VALUES(7,4,710,452); +INSERT INTO xyoff VALUES(7,4,810,560); +INSERT INTO xyoff VALUES(7,4,644,692); +INSERT INTO xyoff VALUES(7,4,826,327); +INSERT INTO xyoff VALUES(7,4,465,462); +INSERT INTO xyoff VALUES(7,4,310,456); +INSERT INTO xyoff VALUES(7,4,577,613); +INSERT INTO xyoff VALUES(7,4,502,555); +INSERT INTO xyoff VALUES(8,1,601,620); +INSERT INTO xyoff VALUES(8,1,372,683); +INSERT INTO xyoff VALUES(8,1,758,399); +INSERT INTO xyoff VALUES(8,1,485,552); +INSERT INTO xyoff VALUES(8,1,159,563); +INSERT INTO xyoff VALUES(8,1,536,303); +INSERT INTO xyoff VALUES(8,1,122,263); +INSERT INTO xyoff VALUES(8,1,836,435); +INSERT INTO xyoff VALUES(8,1,544,146); +INSERT INTO xyoff VALUES(8,1,270,277); +INSERT INTO xyoff VALUES(8,2,849,281); +INSERT INTO xyoff VALUES(8,2,563,242); +INSERT INTO xyoff VALUES(8,2,704,463); +INSERT INTO xyoff VALUES(8,2,102,165); +INSERT INTO xyoff VALUES(8,2,797,524); +INSERT INTO xyoff VALUES(8,2,612,426); +INSERT INTO xyoff VALUES(8,2,345,372); +INSERT INTO xyoff VALUES(8,2,820,376); +INSERT INTO xyoff VALUES(8,2,789,156); +INSERT INTO xyoff VALUES(8,2,321,466); +INSERT INTO xyoff VALUES(8,3,150,332); +INSERT INTO xyoff VALUES(8,3,136,152); +INSERT INTO xyoff VALUES(8,3,468,528); +INSERT INTO xyoff VALUES(8,3,409,192); +INSERT INTO xyoff VALUES(8,3,820,216); +INSERT INTO xyoff VALUES(8,3,847,249); +INSERT INTO xyoff VALUES(8,3,801,267); +INSERT INTO xyoff VALUES(8,3,181,670); +INSERT INTO xyoff VALUES(8,3,398,563); +INSERT INTO xyoff VALUES(8,3,439,576); +INSERT INTO xyoff VALUES(8,4,123,309); +INSERT INTO xyoff VALUES(8,4,190,496); +INSERT INTO xyoff VALUES(8,4,571,531); +INSERT INTO xyoff VALUES(8,4,290,255); +INSERT INTO xyoff VALUES(8,4,244,412); +INSERT INTO xyoff VALUES(8,4,264,596); +INSERT INTO xyoff VALUES(8,4,253,420); +INSERT INTO xyoff VALUES(8,4,847,536); +INSERT INTO xyoff VALUES(8,4,120,288); +INSERT INTO xyoff VALUES(8,4,331,639); + +/* Create the geopoly object from test data above */ +CREATE VIRTUAL TABLE geo1 USING geopoly(type,clr); +INSERT INTO geo1(_shape,type,clr) + SELECT geopoly_xform(jshape,A,B,-B,A,xoff,yoff), basis.name, xform.clr + FROM basis, xform, xyoff + WHERE xyoff.id1=basis.rowid AND xyoff.id2=xform.rowid; + + +/* Query polygon */ +CREATE TEMP TABLE querypoly(poly JSON, clr TEXT); +INSERT INTO querypoly(clr, poly) VALUES + ('orange', '[[300,300],[400,350],[500,250],[480,500],[400,480],[300,550],[280,450],[320,400],[280,350],[300,300]]'); + +/* Generate the HTML */ +.print '' +.print '

Everything

' +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',clr) + ) + FROM geo1; +SELECT geopoly_svg(poly, + printf('style="fill:%s;fill-opacity:0.5;"',clr) + ) + FROM querypoly; +.print '' + +.print '

Overlap Query

' +.print '
'
+.print 'SELECT *'
+.print '  FROM geo1, querypoly'
+.print ' WHERE geopoly_overlap(_shape, poly);'
+.print 
+EXPLAIN QUERY PLAN
+SELECT geopoly_svg(_shape,
+         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
+       )
+  FROM geo1, querypoly
+ WHERE geopoly_overlap(_shape, poly);
+.print '
' +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ) + FROM geo1, querypoly + WHERE geopoly_overlap(_shape, poly); +SELECT geopoly_svg(poly, + printf('style="fill:%s;fill-opacity:0.5;"',clr) + ) + FROM querypoly; +.print '' + +.print '

Overlap Query And Result Bounding Box

' +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ) + FROM geo1, querypoly + WHERE geopoly_overlap(_shape, poly); +SELECT geopoly_svg(geopoly_bbox(poly), + 'style="fill:none;stroke:black;stroke-width:3"' + ) + FROM querypoly; +SELECT geopoly_svg(poly, + printf('style="fill:%s;fill-opacity:0.5;"',clr) + ) + FROM querypoly; +SELECT geopoly_svg(geopoly_group_bbox(_shape), + 'style="fill:none;stroke:red;stroke-width:3"' + ) + FROM geo1, querypoly + WHERE geopoly_overlap(_shape, poly); +.print '' + +.print '

Bounding-Box Overlap Query

' +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ), + geopoly_svg(geopoly_bbox(_shape), + 'style="fill:none;stroke:black;stroke-width:1"' + ) + FROM geo1, querypoly + WHERE geopoly_overlap(geopoly_bbox(_shape), geopoly_bbox(poly)); +SELECT geopoly_svg(poly, + printf('style="fill:%s;fill-opacity:0.5;"',clr) + ) + FROM querypoly; +SELECT geopoly_svg(geopoly_bbox(poly), + 'style="fill:none;stroke:black;stroke-width:3"' + ) + FROM querypoly; +.print '' + +.print '

Within Query

' +.print '
'
+.print 'SELECT *'
+.print '  FROM geo1, querypoly'
+.print ' WHERE geopoly_within(_shape, poly);'
+.print 
+EXPLAIN QUERY PLAN
+SELECT geopoly_svg(_shape,
+         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
+       )
+  FROM geo1, querypoly
+ WHERE geopoly_within(_shape, poly);
+.print '
' +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ) + FROM geo1, querypoly + WHERE geopoly_within(_shape, poly); +SELECT geopoly_svg(poly, + printf('style="fill:%s;fill-opacity:0.5;"',clr) + ) + FROM querypoly; +.print '' + +.print '

Bounding-Box WITHIN Query

' +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ), + geopoly_svg(geopoly_bbox(_shape), + 'style="fill:none;stroke:black;stroke-width:1"' + ) + FROM geo1, querypoly + WHERE geopoly_within(geopoly_bbox(_shape), geopoly_bbox(poly)); +SELECT geopoly_svg(poly, + printf('style="fill:%s;fill-opacity:0.5;"',clr) + ) + FROM querypoly; +SELECT geopoly_svg(geopoly_bbox(poly), + 'style="fill:none;stroke:black;stroke-width:3"' + ) + FROM querypoly; +.print '' + +.print '

Not Overlap Query

' +.print '
'
+.print 'SELECT *'
+.print '  FROM geo1, querypoly'
+.print ' WHERE NOT geopoly_overlap(_shape, poly);'
+.print 
+EXPLAIN QUERY PLAN
+SELECT geopoly_svg(_shape,
+         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
+       )
+  FROM geo1, querypoly
+ WHERE NOT geopoly_overlap(_shape, poly);
+.print '
' +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ) + FROM geo1, querypoly + WHERE NOT geopoly_overlap(_shape, poly); +SELECT geopoly_svg(poly, + printf('style="fill:%s;fill-opacity:0.5;"',clr) + ) + FROM querypoly; +.print '' + +.print '

Not Within Query

' +.print '
'
+.print 'SELECT *'
+.print '  FROM geo1, querypoly'
+.print ' WHERE NOT geopoly_within(_shape, poly);'
+.print 
+EXPLAIN QUERY PLAN
+SELECT geopoly_svg(_shape,
+         printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr)
+       )
+  FROM geo1, querypoly
+ WHERE NOT geopoly_within(_shape, poly);
+.print '
' +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ) + FROM geo1, querypoly + WHERE NOT geopoly_within(_shape, poly); +SELECT geopoly_svg(poly, + printf('style="fill:%s;fill-opacity:0.5;"',clr) + ) + FROM querypoly; +.print '' + +.print '

Color-Change For Overlapping Elements

' +BEGIN; +UPDATE geo1 + SET clr=CASE WHEN rowid IN (SELECT geo1.rowid FROM geo1, querypoly + WHERE geopoly_overlap(_shape,poly)) + THEN 'red' ELSE 'blue' END; +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ) + FROM geo1; +SELECT geopoly_svg(poly,'style="fill:none;stroke:black;stroke-width:2"') + FROM querypoly; +ROLLBACK; +.print '' + +.print '

Color-Change And Move Overlapping Elements

' +BEGIN; +UPDATE geo1 + SET clr=CASE WHEN rowid IN (SELECT geo1.rowid FROM geo1, querypoly + WHERE geopoly_overlap(_shape,poly)) + THEN 'red' ELSE '#76ccff' END; +UPDATE geo1 + SET _shape=geopoly_xform(_shape,1,0,0,1,300,0) + WHERE geopoly_overlap(_shape,(SELECT poly FROM querypoly)); +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ) + FROM geo1; +SELECT geopoly_svg(poly,'style="fill:none;stroke:black;stroke-width:2"') + FROM querypoly; +--ROLLBACK; +.print '' + + +.print '

Overlap With Translated Query Polygon

' +UPDATE querypoly SET poly=geopoly_xform(poly,1,0,0,1,300,0); +.print '' +SELECT geopoly_svg(_shape, + printf('style="fill:none;stroke:%s;stroke-width:1"',geo1.clr) + ) + FROM geo1 + WHERE geopoly_overlap(_shape,(SELECT poly FROM querypoly)); +SELECT geopoly_svg(poly,'style="fill:none;stroke:black;stroke-width:2"') + FROM querypoly; +ROLLBACK; +.print '' + +.print '' diff -Nru lxd-3.0.2/dist/sqlite/ext/userauth/userauth.c lxd-3.0.3/dist/sqlite/ext/userauth/userauth.c --- lxd-3.0.2/dist/sqlite/ext/userauth/userauth.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/ext/userauth/userauth.c 2018-11-22 20:54:16.000000000 +0000 @@ -210,7 +210,7 @@ db->auth.nAuthPW = nPW; rc = sqlite3UserAuthCheckLogin(db, "main", &authLevel); db->auth.authLevel = authLevel; - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); if( rc ){ return rc; /* OOM error, I/O error, etc. */ } diff -Nru lxd-3.0.2/dist/sqlite/main.mk lxd-3.0.3/dist/sqlite/main.mk --- lxd-3.0.2/dist/sqlite/main.mk 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/main.mk 2018-11-22 20:54:16.000000000 +0000 @@ -75,7 +75,7 @@ update.o upsert.o userauth.o util.o vacuum.o \ vdbeapi.o vdbeaux.o vdbeblob.o vdbemem.o vdbesort.o \ vdbetrace.o wal.o walker.o where.o wherecode.o whereexpr.o \ - utf.o vtab.o + utf.o vtab.o window.o LIBOBJ += sqlite3session.o @@ -182,7 +182,8 @@ $(TOP)/src/where.c \ $(TOP)/src/wherecode.c \ $(TOP)/src/whereexpr.c \ - $(TOP)/src/whereInt.h + $(TOP)/src/whereInt.h \ + $(TOP)/src/window.c # Source code for extensions # @@ -228,7 +229,8 @@ SRC += \ $(TOP)/ext/rtree/sqlite3rtree.h \ $(TOP)/ext/rtree/rtree.h \ - $(TOP)/ext/rtree/rtree.c + $(TOP)/ext/rtree/rtree.c \ + $(TOP)/ext/rtree/geopoly.c SRC += \ $(TOP)/ext/session/sqlite3session.c \ $(TOP)/ext/session/sqlite3session.h @@ -349,6 +351,7 @@ $(TOP)/src/test_vfs.c \ $(TOP)/src/test_walreplication.c \ $(TOP)/src/test_windirent.c \ + $(TOP)/src/test_window.c \ $(TOP)/src/test_wsd.c # Extensions to be statically loaded. @@ -474,7 +477,8 @@ $(TOP)/ext/fts3/fts3_hash.h \ $(TOP)/ext/fts3/fts3_tokenizer.h EXTHDR += \ - $(TOP)/ext/rtree/rtree.h + $(TOP)/ext/rtree/rtree.h \ + $(TOP)/ext/rtree/geopoly.c EXTHDR += \ $(TOP)/ext/icu/sqliteicu.h EXTHDR += \ @@ -997,6 +1001,10 @@ $(TCC) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -o rollback-test$(EXE) \ $(TOP)/tool/rollback-test.c sqlite3.o $(THREADLIB) +atrc$(EXE): $(TOP)/test/atrc.c sqlite3.o + $(TCC) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -o atrc$(EXE) \ + $(TOP)/test/atrc.c sqlite3.o $(THREADLIB) + LogEst$(EXE): $(TOP)/tool/logest.c sqlite3.h $(TCC) -o LogEst$(EXE) $(TOP)/tool/logest.c diff -Nru lxd-3.0.2/dist/sqlite/Makefile.in lxd-3.0.3/dist/sqlite/Makefile.in --- lxd-3.0.2/dist/sqlite/Makefile.in 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/Makefile.in 2018-11-22 20:54:16.000000000 +0000 @@ -190,7 +190,7 @@ update.lo upsert.lo util.lo vacuum.lo \ vdbe.lo vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbesort.lo \ vdbetrace.lo wal.lo walker.lo where.lo wherecode.lo whereexpr.lo \ - utf.lo vtab.lo + window.lo utf.lo vtab.lo # Object files for the amalgamation. # @@ -304,7 +304,8 @@ $(TOP)/src/where.c \ $(TOP)/src/wherecode.c \ $(TOP)/src/whereexpr.c \ - $(TOP)/src/whereInt.h + $(TOP)/src/whereInt.h \ + $(TOP)/src/window.c # Source code for extensions # @@ -349,7 +350,8 @@ $(TOP)/ext/icu/icu.c SRC += \ $(TOP)/ext/rtree/rtree.h \ - $(TOP)/ext/rtree/rtree.c + $(TOP)/ext/rtree/rtree.c \ + $(TOP)/ext/rtree/geopoly.c SRC += \ $(TOP)/ext/session/sqlite3session.c \ $(TOP)/ext/session/sqlite3session.h @@ -419,6 +421,7 @@ $(TOP)/src/test_vfs.c \ $(TOP)/src/test_walreplication.c \ $(TOP)/src/test_windirent.c \ + $(TOP)/src/test_window.c \ $(TOP)/src/test_wsd.c \ $(TOP)/ext/fts3/fts3_term.c \ $(TOP)/ext/fts3/fts3_test.c \ @@ -494,6 +497,7 @@ $(TOP)/src/where.c \ $(TOP)/src/wherecode.c \ $(TOP)/src/whereexpr.c \ + $(TOP)/src/window.c \ parse.c \ $(TOP)/ext/fts3/fts3.c \ $(TOP)/ext/fts3/fts3_aux.c \ @@ -550,7 +554,8 @@ $(TOP)/ext/fts3/fts3_hash.h \ $(TOP)/ext/fts3/fts3_tokenizer.h EXTHDR += \ - $(TOP)/ext/rtree/rtree.h + $(TOP)/ext/rtree/rtree.h \ + $(TOP)/ext/rtree/geopoly.c EXTHDR += \ $(TOP)/ext/icu/sqliteicu.h EXTHDR += \ @@ -968,6 +973,9 @@ whereexpr.lo: $(TOP)/src/whereexpr.c $(HDR) $(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/whereexpr.c +window.lo: $(TOP)/src/window.c $(HDR) + $(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/window.c + tclsqlite.lo: $(TOP)/src/tclsqlite.c $(HDR) $(LTCOMPILE) -DUSE_TCL_STUBS=1 -c $(TOP)/src/tclsqlite.c @@ -1271,6 +1279,9 @@ rollback-test$(TEXE): $(TOP)/tool/rollback-test.c sqlite3.lo $(LTLINK) -o $@ $(TOP)/tool/rollback-test.c sqlite3.lo $(TLIBS) +atrc$(TEXX): $(TOP)/test/atrc.c sqlite3.lo + $(LTLINK) -o $@ $(TOP)/test/atrc.c sqlite3.lo $(TLIBS) + LogEst$(TEXE): $(TOP)/tool/logest.c sqlite3.h $(LTLINK) -I. -o $@ $(TOP)/tool/logest.c diff -Nru lxd-3.0.2/dist/sqlite/Makefile.msc lxd-3.0.3/dist/sqlite/Makefile.msc --- lxd-3.0.2/dist/sqlite/Makefile.msc 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/Makefile.msc 2018-11-22 20:54:16.000000000 +0000 @@ -339,6 +339,12 @@ !IF $(MINIMAL_AMALGAMATION)==0 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_GEOPOLY=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_JSON1=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBSTAT_VTAB=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_INTROSPECTION_PRAGMAS=1 !ENDIF OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1 !ENDIF @@ -620,6 +626,10 @@ !IFNDEF SHELL_CORE_SRC !IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0 SHELL_CORE_SRC = +# <> +!ELSEIF $(USE_AMALGAMATION)==0 +SHELL_CORE_SRC = +# <> !ELSE SHELL_CORE_SRC = $(SQLITE3C) !ENDIF @@ -630,6 +640,10 @@ !IFNDEF SHELL_CORE_DEP !IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0 SHELL_CORE_DEP = $(SQLITE3DLL) +# <> +!ELSEIF $(USE_AMALGAMATION)==0 +SHELL_CORE_DEP = libsqlite3.lib +# <> !ELSE SHELL_CORE_DEP = !ENDIF @@ -649,6 +663,10 @@ !IFNDEF SHELL_CORE_LIB !IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0 SHELL_CORE_LIB = $(SQLITE3LIB) +# <> +!ELSEIF $(USE_AMALGAMATION)==0 +SHELL_CORE_LIB = libsqlite3.lib +# <> !ELSE SHELL_CORE_LIB = !ENDIF @@ -1184,19 +1202,19 @@ fts3_tokenize_vtab.lo fts3_unicode.lo fts3_unicode2.lo fts3_write.lo \ fts5.lo \ func.lo global.lo hash.lo \ - icu.lo insert.lo legacy.lo loadext.lo \ + icu.lo insert.lo json1.lo legacy.lo loadext.lo \ main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo \ memdb.lo memjournal.lo \ mutex.lo mutex_noop.lo mutex_unix.lo mutex_w32.lo \ notify.lo opcodes.lo os.lo os_unix.lo os_win.lo \ pager.lo pcache.lo pcache1.lo pragma.lo prepare.lo printf.lo \ random.lo resolve.lo rowset.lo rtree.lo \ - sqlite3session.lo select.lo sqlite3rbu.lo status.lo \ + sqlite3session.lo select.lo sqlite3rbu.lo status.lo stmt.lo \ table.lo threads.lo tokenize.lo treeview.lo trigger.lo \ update.lo upsert.lo util.lo vacuum.lo \ vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbesort.lo \ vdbetrace.lo wal.lo walker.lo where.lo wherecode.lo whereexpr.lo \ - utf.lo vtab.lo + window.lo utf.lo vtab.lo # <> # Object files for the amalgamation. @@ -1307,7 +1325,8 @@ $(TOP)\src\walker.c \ $(TOP)\src\where.c \ $(TOP)\src\wherecode.c \ - $(TOP)\src\whereexpr.c + $(TOP)\src\whereexpr.c \ + $(TOP)\src\window.c # Core miscellaneous files. # @@ -1400,6 +1419,7 @@ $(TOP)\ext\fts3\fts3_tokenizer.h \ $(TOP)\ext\icu\sqliteicu.h \ $(TOP)\ext\rtree\rtree.h \ + $(TOP)\ext\rtree\geopoly.c \ $(TOP)\ext\rbu\sqlite3rbu.h \ $(TOP)\ext\session\sqlite3session.h @@ -1479,6 +1499,7 @@ $(TOP)\src\test_vfs.c \ $(TOP)/src/test_walreplication.c \ $(TOP)\src\test_windirent.c \ + $(TOP)\src\test_window.c \ $(TOP)\src\test_wsd.c \ $(TOP)\ext\fts3\fts3_term.c \ $(TOP)\ext\fts3\fts3_test.c \ @@ -1574,7 +1595,8 @@ $(TOP)\ext\fts3\fts3_hash.h \ $(TOP)\ext\fts3\fts3_tokenizer.h EXTHDR = $(EXTHDR) \ - $(TOP)\ext\rtree\rtree.h + $(TOP)\ext\rtree\rtree.h \ + $(TOP)\ext\rtree\geopoly.c EXTHDR = $(EXTHDR) \ $(TOP)\ext\icu\sqliteicu.h EXTHDR = $(EXTHDR) \ @@ -1608,10 +1630,9 @@ # when the shell is not being dynamically linked. # !IF $(DYNAMIC_SHELL)==0 && $(FOR_WIN10)==0 -SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_STMTVTAB -SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_DBSTAT_VTAB -SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC -DSQLITE_INTROSPECTION_PRAGMAS -SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_RTREE +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_FTS4=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 !ENDIF # <> @@ -1696,8 +1717,8 @@ srcck1.exe: $(TOP)\tool\srcck1.c $(BCC) $(NO_WARN) -Fe$@ $(TOP)\tool\srcck1.c -sourcetest: srcck1.exe sqlite3.c - srcck1.exe sqlite3.c +sourcetest: srcck1.exe $(SQLITE3C) + srcck1.exe $(SQLITE3C) fuzzershell.exe: $(TOP)\tool\fuzzershell.c $(SQLITE3C) $(SQLITE3H) $(LTLINK) $(NO_WARN) $(FUZZERSHELL_COMPILE_OPTS) $(TOP)\tool\fuzzershell.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) @@ -2047,6 +2068,9 @@ whereexpr.lo: $(TOP)\src\whereexpr.c $(HDR) $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\whereexpr.c +window.lo: $(TOP)\src\window.c $(HDR) + $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\window.c + tclsqlite.lo: $(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP) $(LTCOMPILE) $(NO_WARN) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c @@ -2180,6 +2204,12 @@ fts3_write.lo: $(TOP)\ext\fts3\fts3_write.c $(HDR) $(EXTHDR) $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_write.c +json1.lo: $(TOP)\ext\misc\json1.c $(HDR) $(EXTHDR) + $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\misc\json1.c + +stmt.lo: $(TOP)\ext\misc\stmt.c $(HDR) $(EXTHDR) + $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\misc\stmt.c + rtree.lo: $(TOP)\ext\rtree\rtree.c $(HDR) $(EXTHDR) $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c @@ -2262,9 +2292,9 @@ TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_CORE $(NO_WARN) TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERIES_CONSTRAINT_VERIFY=1 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_DEFAULT_PAGE_SIZE=1024 -TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB -TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB -TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_JSON1 +TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1 +TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB=1 +TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_JSON1=1 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) $(TEST_CCONV_OPTS) TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2) @@ -2420,6 +2450,10 @@ $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \ $(TOP)\tool\rollback-test.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) +atrc.exe: $(TOP)\test\atrc.c $(SQLITE3C) $(SQLITE3H) + $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \ + $(TOP)\test\atrc.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) + LogEst.exe: $(TOP)\tool\logest.c $(SQLITE3H) $(LTLINK) $(NO_WARN) $(TOP)\tool\LogEst.c /link $(LDFLAGS) $(LTLINKOPTS) @@ -2451,7 +2485,6 @@ del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL # <> - del /Q sqlite3.c sqlite3.h 2>NUL del /Q opcodes.c opcodes.h 2>NUL del /Q lemon.* lempar.c parse.* 2>NUL del /Q mksourceid.* mkkeywordhash.* keywordhash.h 2>NUL @@ -2468,7 +2501,7 @@ del /Q changeset.exe 2>NUL del /Q showjournal.exe showstat4.exe showwal.exe speedtest1.exe 2>NUL del /Q mptester.exe wordcount.exe rbu.exe srcck1.exe 2>NUL - del /Q sqlite3.c sqlite3-*.c 2>NUL + del /Q sqlite3.c sqlite3-*.c sqlite3.h 2>NUL del /Q sqlite3rc.h 2>NUL del /Q shell.c sqlite3ext.h sqlite3session.h 2>NUL del /Q sqlite3_analyzer.exe sqlite3_analyzer.c 2>NUL diff -Nru lxd-3.0.2/dist/sqlite/manifest lxd-3.0.3/dist/sqlite/manifest --- lxd-3.0.2/dist/sqlite/manifest 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/manifest 2018-11-22 20:54:16.000000000 +0000 @@ -1 +1 @@ -D 2018-08-01T13:22:18 +D 2018-11-06T15:39:02 diff -Nru lxd-3.0.2/dist/sqlite/manifest.uuid lxd-3.0.3/dist/sqlite/manifest.uuid --- lxd-3.0.2/dist/sqlite/manifest.uuid 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/manifest.uuid 2018-11-22 20:54:16.000000000 +0000 @@ -1 +1 @@ -c94dbda1a570c1ab180e7694afd3cc7116268c06 \ No newline at end of file +a5a555e13a80463104233dbde67709123a97c27b \ No newline at end of file diff -Nru lxd-3.0.2/dist/sqlite/README.md lxd-3.0.3/dist/sqlite/README.md --- lxd-3.0.2/dist/sqlite/README.md 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/README.md 2018-11-22 20:54:16.000000000 +0000 @@ -1,7 +1,8 @@

SQLite Source Repository

-This repository contains the complete source code for the SQLite database -engine. Some test scripts are also included. However, many other test scripts +This repository contains the complete source code for the +[SQLite database engine](https://sqlite.org/). Some test scripts +are also included. However, many other test scripts and most of the documentation are managed separately. SQLite [does not use Git](https://sqlite.org/whynotgit.html). diff -Nru lxd-3.0.2/dist/sqlite/src/alter.c lxd-3.0.3/dist/sqlite/src/alter.c --- lxd-3.0.2/dist/sqlite/src/alter.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/alter.c 2018-11-22 20:54:16.000000000 +0000 @@ -20,366 +20,63 @@ */ #ifndef SQLITE_OMIT_ALTERTABLE - -/* -** This function is used by SQL generated to implement the -** ALTER TABLE command. The first argument is the text of a CREATE TABLE or -** CREATE INDEX command. The second is a table name. The table name in -** the CREATE TABLE or CREATE INDEX statement is replaced with the third -** argument and the result returned. Examples: -** -** sqlite_rename_table('CREATE TABLE abc(a, b, c)', 'def') -** -> 'CREATE TABLE def(a, b, c)' -** -** sqlite_rename_table('CREATE INDEX i ON abc(a)', 'def') -** -> 'CREATE INDEX i ON def(a, b, c)' -*/ -static void renameTableFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - unsigned char const *zSql = sqlite3_value_text(argv[0]); - unsigned char const *zTableName = sqlite3_value_text(argv[1]); - - int token; - Token tname; - unsigned char const *zCsr = zSql; - int len = 0; - char *zRet; - - sqlite3 *db = sqlite3_context_db_handle(context); - - UNUSED_PARAMETER(NotUsed); - - /* The principle used to locate the table name in the CREATE TABLE - ** statement is that the table name is the first non-space token that - ** is immediately followed by a TK_LP or TK_USING token. - */ - if( zSql ){ - do { - if( !*zCsr ){ - /* Ran out of input before finding an opening bracket. Return NULL. */ - return; - } - - /* Store the token that zCsr points to in tname. */ - tname.z = (char*)zCsr; - tname.n = len; - - /* Advance zCsr to the next token. Store that token type in 'token', - ** and its length in 'len' (to be used next iteration of this loop). - */ - do { - zCsr += len; - len = sqlite3GetToken(zCsr, &token); - } while( token==TK_SPACE ); - assert( len>0 ); - } while( token!=TK_LP && token!=TK_USING ); - - zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", (int)(((u8*)tname.z) - zSql), - zSql, zTableName, tname.z+tname.n); - sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC); - } -} - -/* -** This C function implements an SQL user function that is used by SQL code -** generated by the ALTER TABLE ... RENAME command to modify the definition -** of any foreign key constraints that use the table being renamed as the -** parent table. It is passed three arguments: -** -** 1) The complete text of the CREATE TABLE statement being modified, -** 2) The old name of the table being renamed, and -** 3) The new name of the table being renamed. -** -** It returns the new CREATE TABLE statement. For example: -** -** sqlite_rename_parent('CREATE TABLE t1(a REFERENCES t2)', 't2', 't3') -** -> 'CREATE TABLE t1(a REFERENCES t3)' -*/ -#ifndef SQLITE_OMIT_FOREIGN_KEY -static void renameParentFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - sqlite3 *db = sqlite3_context_db_handle(context); - char *zOutput = 0; - char *zResult; - unsigned char const *zInput = sqlite3_value_text(argv[0]); - unsigned char const *zOld = sqlite3_value_text(argv[1]); - unsigned char const *zNew = sqlite3_value_text(argv[2]); - - unsigned const char *z; /* Pointer to token */ - int n; /* Length of token z */ - int token; /* Type of token */ - - UNUSED_PARAMETER(NotUsed); - if( zInput==0 || zOld==0 ) return; - for(z=zInput; *z; z=z+n){ - n = sqlite3GetToken(z, &token); - if( token==TK_REFERENCES ){ - char *zParent; - do { - z += n; - n = sqlite3GetToken(z, &token); - }while( token==TK_SPACE ); - - if( token==TK_ILLEGAL ) break; - zParent = sqlite3DbStrNDup(db, (const char *)z, n); - if( zParent==0 ) break; - sqlite3Dequote(zParent); - if( 0==sqlite3StrICmp((const char *)zOld, zParent) ){ - char *zOut = sqlite3MPrintf(db, "%s%.*s\"%w\"", - (zOutput?zOutput:""), (int)(z-zInput), zInput, (const char *)zNew - ); - sqlite3DbFree(db, zOutput); - zOutput = zOut; - zInput = &z[n]; - } - sqlite3DbFree(db, zParent); - } - } - - zResult = sqlite3MPrintf(db, "%s%s", (zOutput?zOutput:""), zInput), - sqlite3_result_text(context, zResult, -1, SQLITE_DYNAMIC); - sqlite3DbFree(db, zOutput); -} -#endif - -#ifndef SQLITE_OMIT_TRIGGER -/* This function is used by SQL generated to implement the -** ALTER TABLE command. The first argument is the text of a CREATE TRIGGER -** statement. The second is a table name. The table name in the CREATE -** TRIGGER statement is replaced with the third argument and the result -** returned. This is analagous to renameTableFunc() above, except for CREATE -** TRIGGER, not CREATE INDEX and CREATE TABLE. -*/ -static void renameTriggerFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - unsigned char const *zSql = sqlite3_value_text(argv[0]); - unsigned char const *zTableName = sqlite3_value_text(argv[1]); - - int token; - Token tname; - int dist = 3; - unsigned char const *zCsr = zSql; - int len = 0; - char *zRet; - sqlite3 *db = sqlite3_context_db_handle(context); - - UNUSED_PARAMETER(NotUsed); - - /* The principle used to locate the table name in the CREATE TRIGGER - ** statement is that the table name is the first token that is immediately - ** preceded by either TK_ON or TK_DOT and immediately followed by one - ** of TK_WHEN, TK_BEGIN or TK_FOR. - */ - if( zSql ){ - do { - - if( !*zCsr ){ - /* Ran out of input before finding the table name. Return NULL. */ - return; - } - - /* Store the token that zCsr points to in tname. */ - tname.z = (char*)zCsr; - tname.n = len; - - /* Advance zCsr to the next token. Store that token type in 'token', - ** and its length in 'len' (to be used next iteration of this loop). - */ - do { - zCsr += len; - len = sqlite3GetToken(zCsr, &token); - }while( token==TK_SPACE ); - assert( len>0 ); - - /* Variable 'dist' stores the number of tokens read since the most - ** recent TK_DOT or TK_ON. This means that when a WHEN, FOR or BEGIN - ** token is read and 'dist' equals 2, the condition stated above - ** to be met. - ** - ** Note that ON cannot be a database, table or column name, so - ** there is no need to worry about syntax like - ** "CREATE TRIGGER ... ON ON.ON BEGIN ..." etc. - */ - dist++; - if( token==TK_DOT || token==TK_ON ){ - dist = 0; - } - } while( dist!=2 || (token!=TK_WHEN && token!=TK_FOR && token!=TK_BEGIN) ); - - /* Variable tname now contains the token that is the old table-name - ** in the CREATE TRIGGER statement. - */ - zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", (int)(((u8*)tname.z) - zSql), - zSql, zTableName, tname.z+tname.n); - sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC); - } -} -#endif /* !SQLITE_OMIT_TRIGGER */ - -/* -** Register built-in functions used to help implement ALTER TABLE -*/ -void sqlite3AlterFunctions(void){ - static FuncDef aAlterTableFuncs[] = { - FUNCTION(sqlite_rename_table, 2, 0, 0, renameTableFunc), -#ifndef SQLITE_OMIT_TRIGGER - FUNCTION(sqlite_rename_trigger, 2, 0, 0, renameTriggerFunc), -#endif -#ifndef SQLITE_OMIT_FOREIGN_KEY - FUNCTION(sqlite_rename_parent, 3, 0, 0, renameParentFunc), -#endif - }; - sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs)); -} - /* -** This function is used to create the text of expressions of the form: -** -** name= OR name= OR ... +** Parameter zName is the name of a table that is about to be altered +** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN). +** If the table is a system table, this function leaves an error message +** in pParse->zErr (system tables may not be altered) and returns non-zero. ** -** If argument zWhere is NULL, then a pointer string containing the text -** "name=" is returned, where is the quoted version -** of the string passed as argument zConstant. The returned buffer is -** allocated using sqlite3DbMalloc(). It is the responsibility of the -** caller to ensure that it is eventually freed. -** -** If argument zWhere is not NULL, then the string returned is -** " OR name=", where is the contents of zWhere. -** In this case zWhere is passed to sqlite3DbFree() before returning. -** -*/ -static char *whereOrName(sqlite3 *db, char *zWhere, char *zConstant){ - char *zNew; - if( !zWhere ){ - zNew = sqlite3MPrintf(db, "name=%Q", zConstant); - }else{ - zNew = sqlite3MPrintf(db, "%s OR name=%Q", zWhere, zConstant); - sqlite3DbFree(db, zWhere); - } - return zNew; -} - -#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) -/* -** Generate the text of a WHERE expression which can be used to select all -** tables that have foreign key constraints that refer to table pTab (i.e. -** constraints for which pTab is the parent table) from the sqlite_master -** table. -*/ -static char *whereForeignKeys(Parse *pParse, Table *pTab){ - FKey *p; - char *zWhere = 0; - for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ - zWhere = whereOrName(pParse->db, zWhere, p->pFrom->zName); - } - return zWhere; -} -#endif - -/* -** Generate the text of a WHERE expression which can be used to select all -** temporary triggers on table pTab from the sqlite_temp_master table. If -** table pTab has no temporary triggers, or is itself stored in the -** temporary database, NULL is returned. +** Or, if zName is not a system table, zero is returned. */ -static char *whereTempTriggers(Parse *pParse, Table *pTab){ - Trigger *pTrig; - char *zWhere = 0; - const Schema *pTempSchema = pParse->db->aDb[1].pSchema; /* Temp db schema */ - - /* If the table is not located in the temp-db (in which case NULL is - ** returned, loop through the tables list of triggers. For each trigger - ** that is not part of the temp-db schema, add a clause to the WHERE - ** expression being built up in zWhere. - */ - if( pTab->pSchema!=pTempSchema ){ - sqlite3 *db = pParse->db; - for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){ - if( pTrig->pSchema==pTempSchema ){ - zWhere = whereOrName(db, zWhere, pTrig->zName); - } - } - } - if( zWhere ){ - char *zNew = sqlite3MPrintf(pParse->db, "type='trigger' AND (%s)", zWhere); - sqlite3DbFree(pParse->db, zWhere); - zWhere = zNew; +static int isSystemTable(Parse *pParse, const char *zName){ + if( 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ + sqlite3ErrorMsg(pParse, "table %s may not be altered", zName); + return 1; } - return zWhere; + return 0; } /* -** Generate code to drop and reload the internal representation of table -** pTab from the database, including triggers and temporary triggers. -** Argument zName is the name of the table in the database schema at -** the time the generated code is executed. This can be different from -** pTab->zName if this function is being called to code part of an -** "ALTER TABLE RENAME TO" statement. +** Generate code to verify that the schemas of database zDb and, if +** bTemp is not true, database "temp", can still be parsed. This is +** called at the end of the generation of an ALTER TABLE ... RENAME ... +** statement to ensure that the operation has not rendered any schema +** objects unusable. */ -static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){ - Vdbe *v; - char *zWhere; - int iDb; /* Index of database containing pTab */ -#ifndef SQLITE_OMIT_TRIGGER - Trigger *pTrig; -#endif - - v = sqlite3GetVdbe(pParse); - if( NEVER(v==0) ) return; - assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - assert( iDb>=0 ); - -#ifndef SQLITE_OMIT_TRIGGER - /* Drop any table triggers from the internal schema. */ - for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){ - int iTrigDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema); - assert( iTrigDb==iDb || iTrigDb==1 ); - sqlite3VdbeAddOp4(v, OP_DropTrigger, iTrigDb, 0, 0, pTrig->zName, 0); - } -#endif - - /* Drop the table and index from the internal schema. */ - sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0); - - /* Reload the table, index and permanent trigger schemas. */ - zWhere = sqlite3MPrintf(pParse->db, "tbl_name=%Q", zName); - if( !zWhere ) return; - sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere); +static void renameTestSchema(Parse *pParse, const char *zDb, int bTemp){ + sqlite3NestedParse(pParse, + "SELECT 1 " + "FROM \"%w\".%s " + "WHERE name NOT LIKE 'sqlite_%%'" + " AND sql NOT LIKE 'create virtual%%'" + " AND sqlite_rename_test(%Q, sql, type, name, %d)=NULL ", + zDb, MASTER_NAME, + zDb, bTemp + ); -#ifndef SQLITE_OMIT_TRIGGER - /* Now, if the table is not stored in the temp database, reload any temp - ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined. - */ - if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){ - sqlite3VdbeAddParseSchemaOp(v, 1, zWhere); + if( bTemp==0 ){ + sqlite3NestedParse(pParse, + "SELECT 1 " + "FROM temp.%s " + "WHERE name NOT LIKE 'sqlite_%%'" + " AND sql NOT LIKE 'create virtual%%'" + " AND sqlite_rename_test(%Q, sql, type, name, 1)=NULL ", + MASTER_NAME, zDb + ); } -#endif } /* -** Parameter zName is the name of a table that is about to be altered -** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN). -** If the table is a system table, this function leaves an error message -** in pParse->zErr (system tables may not be altered) and returns non-zero. -** -** Or, if zName is not a system table, zero is returned. +** Generate code to reload the schema for database iDb. And, if iDb!=1, for +** the temp database as well. */ -static int isSystemTable(Parse *pParse, const char *zName){ - if( 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ - sqlite3ErrorMsg(pParse, "table %s may not be altered", zName); - return 1; +static void renameReloadSchema(Parse *pParse, int iDb){ + Vdbe *v = pParse->pVdbe; + if( v ){ + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, iDb, 0); + if( iDb!=1 ) sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, 1, 0); } - return 0; } /* @@ -399,9 +96,6 @@ int nTabName; /* Number of UTF-8 characters in zTabName */ const char *zTabName; /* Original name of the table */ Vdbe *v; -#ifndef SQLITE_OMIT_TRIGGER - char *zWhere = 0; /* Where clause to locate temp triggers */ -#endif VTable *pVTab = 0; /* Non-zero if this is a v-tab with an xRename() */ u32 savedDbFlags; /* Saved value of db->mDbFlags */ @@ -474,52 +168,25 @@ if( v==0 ){ goto exit_rename_table; } - sqlite3BeginWriteOperation(pParse, pVTab!=0, iDb); - sqlite3ChangeCookie(pParse, iDb); - - /* If this is a virtual table, invoke the xRename() function if - ** one is defined. The xRename() callback will modify the names - ** of any resources used by the v-table implementation (including other - ** SQLite tables) that are identified by the name of the virtual table. - */ -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( pVTab ){ - int i = ++pParse->nMem; - sqlite3VdbeLoadString(v, i, zName); - sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB); - sqlite3MayAbort(pParse); - } -#endif /* figure out how many UTF-8 characters are in zName */ zTabName = pTab->zName; nTabName = sqlite3Utf8CharLen(zTabName, -1); -#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) - if( db->flags&SQLITE_ForeignKeys ){ - /* If foreign-key support is enabled, rewrite the CREATE TABLE - ** statements corresponding to all child tables of foreign key constraints - ** for which the renamed table is the parent table. */ - if( (zWhere=whereForeignKeys(pParse, pTab))!=0 ){ - sqlite3NestedParse(pParse, - "UPDATE \"%w\".%s SET " - "sql = sqlite_rename_parent(sql, %Q, %Q) " - "WHERE %s;", zDb, MASTER_NAME, zTabName, zName, zWhere); - sqlite3DbFree(db, zWhere); - } - } -#endif + /* Rewrite all CREATE TABLE, INDEX, TRIGGER or VIEW statements in + ** the schema to use the new table name. */ + sqlite3NestedParse(pParse, + "UPDATE \"%w\".%s SET " + "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, %d) " + "WHERE (type!='index' OR tbl_name=%Q COLLATE nocase)" + "AND name NOT LIKE 'sqlite_%%'" + , zDb, MASTER_NAME, zDb, zTabName, zName, (iDb==1), zTabName + ); - /* Modify the sqlite_master table to use the new table name. */ + /* Update the tbl_name and name columns of the sqlite_master table + ** as required. */ sqlite3NestedParse(pParse, "UPDATE %Q.%s SET " -#ifdef SQLITE_OMIT_TRIGGER - "sql = sqlite_rename_table(sql, %Q), " -#else - "sql = CASE " - "WHEN type = 'trigger' THEN sqlite_rename_trigger(sql, %Q)" - "ELSE sqlite_rename_table(sql, %Q) END, " -#endif "tbl_name = %Q, " "name = CASE " "WHEN type='table' THEN %Q " @@ -528,11 +195,9 @@ "ELSE name END " "WHERE tbl_name=%Q COLLATE nocase AND " "(type='table' OR type='index' OR type='trigger');", - zDb, MASTER_NAME, zName, zName, zName, -#ifndef SQLITE_OMIT_TRIGGER - zName, -#endif - zName, nTabName, zTabName + zDb, MASTER_NAME, + zName, zName, zName, + nTabName, zTabName ); #ifndef SQLITE_OMIT_AUTOINCREMENT @@ -546,35 +211,37 @@ } #endif -#ifndef SQLITE_OMIT_TRIGGER - /* If there are TEMP triggers on this table, modify the sqlite_temp_master - ** table. Don't do this if the table being ALTERed is itself located in - ** the temp database. - */ - if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){ + /* If the table being renamed is not itself part of the temp database, + ** edit view and trigger definitions within the temp database + ** as required. */ + if( iDb!=1 ){ sqlite3NestedParse(pParse, "UPDATE sqlite_temp_master SET " - "sql = sqlite_rename_trigger(sql, %Q), " - "tbl_name = %Q " - "WHERE %s;", zName, zName, zWhere); - sqlite3DbFree(db, zWhere); + "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, 1), " + "tbl_name = " + "CASE WHEN tbl_name=%Q COLLATE nocase AND " + " sqlite_rename_test(%Q, sql, type, name, 1) " + "THEN %Q ELSE tbl_name END " + "WHERE type IN ('view', 'trigger')" + , zDb, zTabName, zName, zTabName, zDb, zName); } -#endif -#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) - if( db->flags&SQLITE_ForeignKeys ){ - FKey *p; - for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ - Table *pFrom = p->pFrom; - if( pFrom!=pTab ){ - reloadTableSchema(pParse, p->pFrom, pFrom->zName); - } - } + /* If this is a virtual table, invoke the xRename() function if + ** one is defined. The xRename() callback will modify the names + ** of any resources used by the v-table implementation (including other + ** SQLite tables) that are identified by the name of the virtual table. + */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pVTab ){ + int i = ++pParse->nMem; + sqlite3VdbeLoadString(v, i, zName); + sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB); + sqlite3MayAbort(pParse); } #endif - /* Drop and reload the internal table schema. */ - reloadTableSchema(pParse, pTab, zName); + renameReloadSchema(pParse, iDb); + renameTestSchema(pParse, zDb, iDb==1); exit_rename_table: sqlite3SrcListDelete(db, pSrc); @@ -600,12 +267,11 @@ Column *pCol; /* The new column */ Expr *pDflt; /* Default value for the new column */ sqlite3 *db; /* The database connection; */ - Vdbe *v = pParse->pVdbe; /* The prepared statement under construction */ + Vdbe *v; /* The prepared statement under construction */ int r1; /* Temporary registers */ db = pParse->db; if( pParse->nErr || db->mallocFailed ) return; - assert( v!=0 ); pNew = pParse->pNewTable; assert( pNew ); @@ -700,17 +366,20 @@ ** from less than 3 to 4, as that will corrupt any preexisting DESC ** index. */ - r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT); - sqlite3VdbeUsesBtree(v, iDb); - sqlite3VdbeAddOp2(v, OP_AddImm, r1, -2); - sqlite3VdbeAddOp2(v, OP_IfPos, r1, sqlite3VdbeCurrentAddr(v)+2); - VdbeCoverage(v); - sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, 3); - sqlite3ReleaseTempReg(pParse, r1); + v = sqlite3GetVdbe(pParse); + if( v ){ + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT); + sqlite3VdbeUsesBtree(v, iDb); + sqlite3VdbeAddOp2(v, OP_AddImm, r1, -2); + sqlite3VdbeAddOp2(v, OP_IfPos, r1, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, 3); + sqlite3ReleaseTempReg(pParse, r1); + } - /* Reload the schema of the modified table. */ - reloadTableSchema(pParse, pTab, pTab->zName); + /* Reload the table definition */ + renameReloadSchema(pParse, iDb); } /* @@ -731,7 +400,6 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ Table *pNew; Table *pTab; - Vdbe *v; int iDb; int i; int nAlloc; @@ -795,14 +463,1140 @@ pNew->addColOffset = pTab->addColOffset; pNew->nTabRef = 1; - /* Begin a transaction and increment the schema cookie. */ - sqlite3BeginWriteOperation(pParse, 0, iDb); - v = sqlite3GetVdbe(pParse); - if( !v ) goto exit_begin_add_column; - sqlite3ChangeCookie(pParse, iDb); - exit_begin_add_column: sqlite3SrcListDelete(db, pSrc); return; } + +/* +** Parameter pTab is the subject of an ALTER TABLE ... RENAME COLUMN +** command. This function checks if the table is a view or virtual +** table (columns of views or virtual tables may not be renamed). If so, +** it loads an error message into pParse and returns non-zero. +** +** Or, if pTab is not a view or virtual table, zero is returned. +*/ +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) +static int isRealTable(Parse *pParse, Table *pTab){ + const char *zType = 0; +#ifndef SQLITE_OMIT_VIEW + if( pTab->pSelect ){ + zType = "view"; + } +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + zType = "virtual table"; + } +#endif + if( zType ){ + sqlite3ErrorMsg( + pParse, "cannot rename columns of %s \"%s\"", zType, pTab->zName + ); + return 1; + } + return 0; +} +#else /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ +# define isRealTable(x,y) (0) +#endif + +/* +** Handles the following parser reduction: +** +** cmd ::= ALTER TABLE pSrc RENAME COLUMN pOld TO pNew +*/ +void sqlite3AlterRenameColumn( + Parse *pParse, /* Parsing context */ + SrcList *pSrc, /* Table being altered. pSrc->nSrc==1 */ + Token *pOld, /* Name of column being changed */ + Token *pNew /* New column name */ +){ + sqlite3 *db = pParse->db; /* Database connection */ + Table *pTab; /* Table being updated */ + int iCol; /* Index of column being renamed */ + char *zOld = 0; /* Old column name */ + char *zNew = 0; /* New column name */ + const char *zDb; /* Name of schema containing the table */ + int iSchema; /* Index of the schema */ + int bQuote; /* True to quote the new name */ + + /* Locate the table to be altered */ + pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]); + if( !pTab ) goto exit_rename_column; + + /* Cannot alter a system table */ + if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ) goto exit_rename_column; + if( SQLITE_OK!=isRealTable(pParse, pTab) ) goto exit_rename_column; + + /* Which schema holds the table to be altered */ + iSchema = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iSchema>=0 ); + zDb = db->aDb[iSchema].zDbSName; + +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Invoke the authorization callback. */ + if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ + goto exit_rename_column; + } +#endif + + /* Make sure the old name really is a column name in the table to be + ** altered. Set iCol to be the index of the column being renamed */ + zOld = sqlite3NameFromToken(db, pOld); + if( !zOld ) goto exit_rename_column; + for(iCol=0; iColnCol; iCol++){ + if( 0==sqlite3StrICmp(pTab->aCol[iCol].zName, zOld) ) break; + } + if( iCol==pTab->nCol ){ + sqlite3ErrorMsg(pParse, "no such column: \"%s\"", zOld); + goto exit_rename_column; + } + + /* Do the rename operation using a recursive UPDATE statement that + ** uses the sqlite_rename_column() SQL function to compute the new + ** CREATE statement text for the sqlite_master table. + */ + zNew = sqlite3NameFromToken(db, pNew); + if( !zNew ) goto exit_rename_column; + assert( pNew->n>0 ); + bQuote = sqlite3Isquote(pNew->z[0]); + sqlite3NestedParse(pParse, + "UPDATE \"%w\".%s SET " + "sql = sqlite_rename_column(sql, type, name, %Q, %Q, %d, %Q, %d, %d) " + "WHERE name NOT LIKE 'sqlite_%%' AND (type != 'index' OR tbl_name = %Q)" + " AND sql NOT LIKE 'create virtual%%'", + zDb, MASTER_NAME, + zDb, pTab->zName, iCol, zNew, bQuote, iSchema==1, + pTab->zName + ); + + sqlite3NestedParse(pParse, + "UPDATE temp.%s SET " + "sql = sqlite_rename_column(sql, type, name, %Q, %Q, %d, %Q, %d, 1) " + "WHERE type IN ('trigger', 'view')", + MASTER_NAME, + zDb, pTab->zName, iCol, zNew, bQuote + ); + + /* Drop and reload the database schema. */ + renameReloadSchema(pParse, iSchema); + renameTestSchema(pParse, zDb, iSchema==1); + + exit_rename_column: + sqlite3SrcListDelete(db, pSrc); + sqlite3DbFree(db, zOld); + sqlite3DbFree(db, zNew); + return; +} + +/* +** Each RenameToken object maps an element of the parse tree into +** the token that generated that element. The parse tree element +** might be one of: +** +** * A pointer to an Expr that represents an ID +** * The name of a table column in Column.zName +** +** A list of RenameToken objects can be constructed during parsing. +** Each new object is created by sqlite3RenameTokenMap(). +** As the parse tree is transformed, the sqlite3RenameTokenRemap() +** routine is used to keep the mapping current. +** +** After the parse finishes, renameTokenFind() routine can be used +** to look up the actual token value that created some element in +** the parse tree. +*/ +struct RenameToken { + void *p; /* Parse tree element created by token t */ + Token t; /* The token that created parse tree element p */ + RenameToken *pNext; /* Next is a list of all RenameToken objects */ +}; + +/* +** The context of an ALTER TABLE RENAME COLUMN operation that gets passed +** down into the Walker. +*/ +typedef struct RenameCtx RenameCtx; +struct RenameCtx { + RenameToken *pList; /* List of tokens to overwrite */ + int nList; /* Number of tokens in pList */ + int iCol; /* Index of column being renamed */ + Table *pTab; /* Table being ALTERed */ + const char *zOld; /* Old column name */ +}; + +#ifdef SQLITE_DEBUG +/* +** This function is only for debugging. It performs two tasks: +** +** 1. Checks that pointer pPtr does not already appear in the +** rename-token list. +** +** 2. Dereferences each pointer in the rename-token list. +** +** The second is most effective when debugging under valgrind or +** address-sanitizer or similar. If any of these pointers no longer +** point to valid objects, an exception is raised by the memory-checking +** tool. +** +** The point of this is to prevent comparisons of invalid pointer values. +** Even though this always seems to work, it is undefined according to the +** C standard. Example of undefined comparison: +** +** sqlite3_free(x); +** if( x==y ) ... +** +** Technically, as x no longer points into a valid object or to the byte +** following a valid object, it may not be used in comparison operations. +*/ +static void renameTokenCheckAll(Parse *pParse, void *pPtr){ + if( pParse->nErr==0 && pParse->db->mallocFailed==0 ){ + RenameToken *p; + u8 i = 0; + for(p=pParse->pRename; p; p=p->pNext){ + if( p->p ){ + assert( p->p!=pPtr ); + i += *(u8*)(p->p); + } + } + } +} +#else +# define renameTokenCheckAll(x,y) +#endif + +/* +** Add a new RenameToken object mapping parse tree element pPtr into +** token *pToken to the Parse object currently under construction. +** +** Return a copy of pPtr. +*/ +void *sqlite3RenameTokenMap(Parse *pParse, void *pPtr, Token *pToken){ + RenameToken *pNew; + assert( pPtr || pParse->db->mallocFailed ); + renameTokenCheckAll(pParse, pPtr); + pNew = sqlite3DbMallocZero(pParse->db, sizeof(RenameToken)); + if( pNew ){ + pNew->p = pPtr; + pNew->t = *pToken; + pNew->pNext = pParse->pRename; + pParse->pRename = pNew; + } + + return pPtr; +} + +/* +** It is assumed that there is already a RenameToken object associated +** with parse tree element pFrom. This function remaps the associated token +** to parse tree element pTo. +*/ +void sqlite3RenameTokenRemap(Parse *pParse, void *pTo, void *pFrom){ + RenameToken *p; + renameTokenCheckAll(pParse, pTo); + for(p=pParse->pRename; p; p=p->pNext){ + if( p->p==pFrom ){ + p->p = pTo; + break; + } + } +} + +/* +** Walker callback used by sqlite3RenameExprUnmap(). +*/ +static int renameUnmapExprCb(Walker *pWalker, Expr *pExpr){ + Parse *pParse = pWalker->pParse; + sqlite3RenameTokenRemap(pParse, 0, (void*)pExpr); + return WRC_Continue; +} + +/* +** Remove all nodes that are part of expression pExpr from the rename list. +*/ +void sqlite3RenameExprUnmap(Parse *pParse, Expr *pExpr){ + Walker sWalker; + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = renameUnmapExprCb; + sqlite3WalkExpr(&sWalker, pExpr); +} + +/* +** Remove all nodes that are part of expression-list pEList from the +** rename list. +*/ +void sqlite3RenameExprlistUnmap(Parse *pParse, ExprList *pEList){ + if( pEList ){ + int i; + Walker sWalker; + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = renameUnmapExprCb; + sqlite3WalkExprList(&sWalker, pEList); + for(i=0; inExpr; i++){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pEList->a[i].zName); + } + } +} + +/* +** Free the list of RenameToken objects given in the second argument +*/ +static void renameTokenFree(sqlite3 *db, RenameToken *pToken){ + RenameToken *pNext; + RenameToken *p; + for(p=pToken; p; p=pNext){ + pNext = p->pNext; + sqlite3DbFree(db, p); + } +} + +/* +** Search the Parse object passed as the first argument for a RenameToken +** object associated with parse tree element pPtr. If found, remove it +** from the Parse object and add it to the list maintained by the +** RenameCtx object passed as the second argument. +*/ +static void renameTokenFind(Parse *pParse, struct RenameCtx *pCtx, void *pPtr){ + RenameToken **pp; + assert( pPtr!=0 ); + for(pp=&pParse->pRename; (*pp); pp=&(*pp)->pNext){ + if( (*pp)->p==pPtr ){ + RenameToken *pToken = *pp; + *pp = pToken->pNext; + pToken->pNext = pCtx->pList; + pCtx->pList = pToken; + pCtx->nList++; + break; + } + } +} + +/* +** This is a Walker select callback. It does nothing. It is only required +** because without a dummy callback, sqlite3WalkExpr() and similar do not +** descend into sub-select statements. +*/ +static int renameColumnSelectCb(Walker *pWalker, Select *p){ + UNUSED_PARAMETER(pWalker); + UNUSED_PARAMETER(p); + return WRC_Continue; +} + +/* +** This is a Walker expression callback. +** +** For every TK_COLUMN node in the expression tree, search to see +** if the column being references is the column being renamed by an +** ALTER TABLE statement. If it is, then attach its associated +** RenameToken object to the list of RenameToken objects being +** constructed in RenameCtx object at pWalker->u.pRename. +*/ +static int renameColumnExprCb(Walker *pWalker, Expr *pExpr){ + RenameCtx *p = pWalker->u.pRename; + if( pExpr->op==TK_TRIGGER + && pExpr->iColumn==p->iCol + && pWalker->pParse->pTriggerTab==p->pTab + ){ + renameTokenFind(pWalker->pParse, p, (void*)pExpr); + }else if( pExpr->op==TK_COLUMN + && pExpr->iColumn==p->iCol + && p->pTab==pExpr->pTab + ){ + renameTokenFind(pWalker->pParse, p, (void*)pExpr); + } + return WRC_Continue; +} + +/* +** The RenameCtx contains a list of tokens that reference a column that +** is being renamed by an ALTER TABLE statement. Return the "last" +** RenameToken in the RenameCtx and remove that RenameToken from the +** RenameContext. "Last" means the last RenameToken encountered when +** the input SQL is parsed from left to right. Repeated calls to this routine +** return all column name tokens in the order that they are encountered +** in the SQL statement. +*/ +static RenameToken *renameColumnTokenNext(RenameCtx *pCtx){ + RenameToken *pBest = pCtx->pList; + RenameToken *pToken; + RenameToken **pp; + + for(pToken=pBest->pNext; pToken; pToken=pToken->pNext){ + if( pToken->t.z>pBest->t.z ) pBest = pToken; + } + for(pp=&pCtx->pList; *pp!=pBest; pp=&(*pp)->pNext); + *pp = pBest->pNext; + + return pBest; +} + +/* +** An error occured while parsing or otherwise processing a database +** object (either pParse->pNewTable, pNewIndex or pNewTrigger) as part of an +** ALTER TABLE RENAME COLUMN program. The error message emitted by the +** sub-routine is currently stored in pParse->zErrMsg. This function +** adds context to the error message and then stores it in pCtx. +*/ +static void renameColumnParseError( + sqlite3_context *pCtx, + int bPost, + sqlite3_value *pType, + sqlite3_value *pObject, + Parse *pParse +){ + const char *zT = (const char*)sqlite3_value_text(pType); + const char *zN = (const char*)sqlite3_value_text(pObject); + char *zErr; + + zErr = sqlite3_mprintf("error in %s %s%s: %s", + zT, zN, (bPost ? " after rename" : ""), + pParse->zErrMsg + ); + sqlite3_result_error(pCtx, zErr, -1); + sqlite3_free(zErr); +} + +/* +** For each name in the the expression-list pEList (i.e. each +** pEList->a[i].zName) that matches the string in zOld, extract the +** corresponding rename-token from Parse object pParse and add it +** to the RenameCtx pCtx. +*/ +static void renameColumnElistNames( + Parse *pParse, + RenameCtx *pCtx, + ExprList *pEList, + const char *zOld +){ + if( pEList ){ + int i; + for(i=0; inExpr; i++){ + char *zName = pEList->a[i].zName; + if( 0==sqlite3_stricmp(zName, zOld) ){ + renameTokenFind(pParse, pCtx, (void*)zName); + } + } + } +} + +/* +** For each name in the the id-list pIdList (i.e. each pIdList->a[i].zName) +** that matches the string in zOld, extract the corresponding rename-token +** from Parse object pParse and add it to the RenameCtx pCtx. +*/ +static void renameColumnIdlistNames( + Parse *pParse, + RenameCtx *pCtx, + IdList *pIdList, + const char *zOld +){ + if( pIdList ){ + int i; + for(i=0; inId; i++){ + char *zName = pIdList->a[i].zName; + if( 0==sqlite3_stricmp(zName, zOld) ){ + renameTokenFind(pParse, pCtx, (void*)zName); + } + } + } +} + +/* +** Parse the SQL statement zSql using Parse object (*p). The Parse object +** is initialized by this function before it is used. +*/ +static int renameParseSql( + Parse *p, /* Memory to use for Parse object */ + const char *zDb, /* Name of schema SQL belongs to */ + int bTable, /* 1 -> RENAME TABLE, 0 -> RENAME COLUMN */ + sqlite3 *db, /* Database handle */ + const char *zSql, /* SQL to parse */ + int bTemp /* True if SQL is from temp schema */ +){ + int rc; + char *zErr = 0; + + db->init.iDb = bTemp ? 1 : sqlite3FindDbName(db, zDb); + + /* Parse the SQL statement passed as the first argument. If no error + ** occurs and the parse does not result in a new table, index or + ** trigger object, the database must be corrupt. */ + memset(p, 0, sizeof(Parse)); + p->eParseMode = (bTable ? PARSE_MODE_RENAME_TABLE : PARSE_MODE_RENAME_COLUMN); + p->db = db; + p->nQueryLoop = 1; + rc = sqlite3RunParser(p, zSql, &zErr); + assert( p->zErrMsg==0 ); + assert( rc!=SQLITE_OK || zErr==0 ); + assert( (0!=p->pNewTable) + (0!=p->pNewIndex) + (0!=p->pNewTrigger)<2 ); + p->zErrMsg = zErr; + if( db->mallocFailed ) rc = SQLITE_NOMEM; + if( rc==SQLITE_OK + && p->pNewTable==0 && p->pNewIndex==0 && p->pNewTrigger==0 + ){ + rc = SQLITE_CORRUPT_BKPT; + } + +#ifdef SQLITE_DEBUG + /* Ensure that all mappings in the Parse.pRename list really do map to + ** a part of the input string. */ + if( rc==SQLITE_OK ){ + int nSql = sqlite3Strlen30(zSql); + RenameToken *pToken; + for(pToken=p->pRename; pToken; pToken=pToken->pNext){ + assert( pToken->t.z>=zSql && &pToken->t.z[pToken->t.n]<=&zSql[nSql] ); + } + } +#endif + + db->init.iDb = 0; + return rc; +} + +/* +** This function edits SQL statement zSql, replacing each token identified +** by the linked list pRename with the text of zNew. If argument bQuote is +** true, then zNew is always quoted first. If no error occurs, the result +** is loaded into context object pCtx as the result. +** +** Or, if an error occurs (i.e. an OOM condition), an error is left in +** pCtx and an SQLite error code returned. +*/ +static int renameEditSql( + sqlite3_context *pCtx, /* Return result here */ + RenameCtx *pRename, /* Rename context */ + const char *zSql, /* SQL statement to edit */ + const char *zNew, /* New token text */ + int bQuote /* True to always quote token */ +){ + int nNew = sqlite3Strlen30(zNew); + int nSql = sqlite3Strlen30(zSql); + sqlite3 *db = sqlite3_context_db_handle(pCtx); + int rc = SQLITE_OK; + char *zQuot; + char *zOut; + int nQuot; + + /* Set zQuot to point to a buffer containing a quoted copy of the + ** identifier zNew. If the corresponding identifier in the original + ** ALTER TABLE statement was quoted (bQuote==1), then set zNew to + ** point to zQuot so that all substitutions are made using the + ** quoted version of the new column name. */ + zQuot = sqlite3MPrintf(db, "\"%w\"", zNew); + if( zQuot==0 ){ + return SQLITE_NOMEM; + }else{ + nQuot = sqlite3Strlen30(zQuot); + } + if( bQuote ){ + zNew = zQuot; + nNew = nQuot; + } + + /* At this point pRename->pList contains a list of RenameToken objects + ** corresponding to all tokens in the input SQL that must be replaced + ** with the new column name. All that remains is to construct and + ** return the edited SQL string. */ + assert( nQuot>=nNew ); + zOut = sqlite3DbMallocZero(db, nSql + pRename->nList*nQuot + 1); + if( zOut ){ + int nOut = nSql; + memcpy(zOut, zSql, nSql); + while( pRename->pList ){ + int iOff; /* Offset of token to replace in zOut */ + RenameToken *pBest = renameColumnTokenNext(pRename); + + u32 nReplace; + const char *zReplace; + if( sqlite3IsIdChar(*pBest->t.z) ){ + nReplace = nNew; + zReplace = zNew; + }else{ + nReplace = nQuot; + zReplace = zQuot; + } + + iOff = pBest->t.z - zSql; + if( pBest->t.n!=nReplace ){ + memmove(&zOut[iOff + nReplace], &zOut[iOff + pBest->t.n], + nOut - (iOff + pBest->t.n) + ); + nOut += nReplace - pBest->t.n; + zOut[nOut] = '\0'; + } + memcpy(&zOut[iOff], zReplace, nReplace); + sqlite3DbFree(db, pBest); + } + + sqlite3_result_text(pCtx, zOut, -1, SQLITE_TRANSIENT); + sqlite3DbFree(db, zOut); + }else{ + rc = SQLITE_NOMEM; + } + + sqlite3_free(zQuot); + return rc; +} + +/* +** Resolve all symbols in the trigger at pParse->pNewTrigger, assuming +** it was read from the schema of database zDb. Return SQLITE_OK if +** successful. Otherwise, return an SQLite error code and leave an error +** message in the Parse object. +*/ +static int renameResolveTrigger(Parse *pParse, const char *zDb){ + sqlite3 *db = pParse->db; + Trigger *pNew = pParse->pNewTrigger; + TriggerStep *pStep; + NameContext sNC; + int rc = SQLITE_OK; + + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + assert( pNew->pTabSchema ); + pParse->pTriggerTab = sqlite3FindTable(db, pNew->table, + db->aDb[sqlite3SchemaToIndex(db, pNew->pTabSchema)].zDbSName + ); + pParse->eTriggerOp = pNew->op; + + /* Resolve symbols in WHEN clause */ + if( pNew->pWhen ){ + rc = sqlite3ResolveExprNames(&sNC, pNew->pWhen); + } + + for(pStep=pNew->step_list; rc==SQLITE_OK && pStep; pStep=pStep->pNext){ + if( pStep->pSelect ){ + sqlite3SelectPrep(pParse, pStep->pSelect, &sNC); + if( pParse->nErr ) rc = pParse->rc; + } + if( rc==SQLITE_OK && pStep->zTarget ){ + Table *pTarget = sqlite3LocateTable(pParse, 0, pStep->zTarget, zDb); + if( pTarget==0 ){ + rc = SQLITE_ERROR; + }else if( SQLITE_OK==(rc = sqlite3ViewGetColumnNames(pParse, pTarget)) ){ + SrcList sSrc; + memset(&sSrc, 0, sizeof(sSrc)); + sSrc.nSrc = 1; + sSrc.a[0].zName = pStep->zTarget; + sSrc.a[0].pTab = pTarget; + sNC.pSrcList = &sSrc; + if( pStep->pWhere ){ + rc = sqlite3ResolveExprNames(&sNC, pStep->pWhere); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprListNames(&sNC, pStep->pExprList); + } + assert( !pStep->pUpsert || (!pStep->pWhere && !pStep->pExprList) ); + if( pStep->pUpsert ){ + Upsert *pUpsert = pStep->pUpsert; + assert( rc==SQLITE_OK ); + pUpsert->pUpsertSrc = &sSrc; + sNC.uNC.pUpsert = pUpsert; + sNC.ncFlags = NC_UUpsert; + rc = sqlite3ResolveExprListNames(&sNC, pUpsert->pUpsertTarget); + if( rc==SQLITE_OK ){ + ExprList *pUpsertSet = pUpsert->pUpsertSet; + rc = sqlite3ResolveExprListNames(&sNC, pUpsertSet); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertWhere); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertTargetWhere); + } + sNC.ncFlags = 0; + } + } + } + } + return rc; +} + +/* +** Invoke sqlite3WalkExpr() or sqlite3WalkSelect() on all Select or Expr +** objects that are part of the trigger passed as the second argument. +*/ +static void renameWalkTrigger(Walker *pWalker, Trigger *pTrigger){ + TriggerStep *pStep; + + /* Find tokens to edit in WHEN clause */ + sqlite3WalkExpr(pWalker, pTrigger->pWhen); + + /* Find tokens to edit in trigger steps */ + for(pStep=pTrigger->step_list; pStep; pStep=pStep->pNext){ + sqlite3WalkSelect(pWalker, pStep->pSelect); + sqlite3WalkExpr(pWalker, pStep->pWhere); + sqlite3WalkExprList(pWalker, pStep->pExprList); + if( pStep->pUpsert ){ + Upsert *pUpsert = pStep->pUpsert; + sqlite3WalkExprList(pWalker, pUpsert->pUpsertTarget); + sqlite3WalkExprList(pWalker, pUpsert->pUpsertSet); + sqlite3WalkExpr(pWalker, pUpsert->pUpsertWhere); + sqlite3WalkExpr(pWalker, pUpsert->pUpsertTargetWhere); + } + } +} + +/* +** Free the contents of Parse object (*pParse). Do not free the memory +** occupied by the Parse object itself. +*/ +static void renameParseCleanup(Parse *pParse){ + sqlite3 *db = pParse->db; + if( pParse->pVdbe ){ + sqlite3VdbeFinalize(pParse->pVdbe); + } + sqlite3DeleteTable(db, pParse->pNewTable); + if( pParse->pNewIndex ) sqlite3FreeIndex(db, pParse->pNewIndex); + sqlite3DeleteTrigger(db, pParse->pNewTrigger); + sqlite3DbFree(db, pParse->zErrMsg); + renameTokenFree(db, pParse->pRename); + sqlite3ParserReset(pParse); +} + +/* +** SQL function: +** +** sqlite_rename_column(zSql, iCol, bQuote, zNew, zTable, zOld) +** +** 0. zSql: SQL statement to rewrite +** 1. type: Type of object ("table", "view" etc.) +** 2. object: Name of object +** 3. Database: Database name (e.g. "main") +** 4. Table: Table name +** 5. iCol: Index of column to rename +** 6. zNew: New column name +** 7. bQuote: Non-zero if the new column name should be quoted. +** 8. bTemp: True if zSql comes from temp schema +** +** Do a column rename operation on the CREATE statement given in zSql. +** The iCol-th column (left-most is 0) of table zTable is renamed from zCol +** into zNew. The name should be quoted if bQuote is true. +** +** This function is used internally by the ALTER TABLE RENAME COLUMN command. +** Though accessible to application code, it is not intended for use by +** applications. The existance of this function, and the way it works, +** is subject to change without notice. +** +** If any of the parameters are out-of-bounds, then simply return NULL. +** An out-of-bounds parameter can only occur when the application calls +** this function directly. The parameters will always be well-formed when +** this routine is invoked by the bytecode for a legitimate ALTER TABLE +** statement. +*/ +static void renameColumnFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + RenameCtx sCtx; + const char *zSql = (const char*)sqlite3_value_text(argv[0]); + const char *zDb = (const char*)sqlite3_value_text(argv[3]); + const char *zTable = (const char*)sqlite3_value_text(argv[4]); + int iCol = sqlite3_value_int(argv[5]); + const char *zNew = (const char*)sqlite3_value_text(argv[6]); + int bQuote = sqlite3_value_int(argv[7]); + int bTemp = sqlite3_value_int(argv[8]); + const char *zOld; + int rc; + Parse sParse; + Walker sWalker; + Index *pIdx; + int i; + Table *pTab; +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; +#endif + + UNUSED_PARAMETER(NotUsed); + if( zSql==0 ) return; + if( zTable==0 ) return; + if( zNew==0 ) return; + if( iCol<0 ) return; + sqlite3BtreeEnterAll(db); + pTab = sqlite3FindTable(db, zTable, zDb); + if( pTab==0 || iCol>=pTab->nCol ){ + sqlite3BtreeLeaveAll(db); + return; + } + zOld = pTab->aCol[iCol].zName; + memset(&sCtx, 0, sizeof(sCtx)); + sCtx.iCol = ((iCol==pTab->iPKey) ? -1 : iCol); + +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = 0; +#endif + rc = renameParseSql(&sParse, zDb, 0, db, zSql, bTemp); + + /* Find tokens that need to be replaced. */ + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = &sParse; + sWalker.xExprCallback = renameColumnExprCb; + sWalker.xSelectCallback = renameColumnSelectCb; + sWalker.u.pRename = &sCtx; + + sCtx.pTab = pTab; + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + if( sParse.pNewTable ){ + Select *pSelect = sParse.pNewTable->pSelect; + if( pSelect ){ + sParse.rc = SQLITE_OK; + sqlite3SelectPrep(&sParse, sParse.pNewTable->pSelect, 0); + rc = (db->mallocFailed ? SQLITE_NOMEM : sParse.rc); + if( rc==SQLITE_OK ){ + sqlite3WalkSelect(&sWalker, pSelect); + } + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + }else{ + /* A regular table */ + int bFKOnly = sqlite3_stricmp(zTable, sParse.pNewTable->zName); + FKey *pFKey; + assert( sParse.pNewTable->pSelect==0 ); + sCtx.pTab = sParse.pNewTable; + if( bFKOnly==0 ){ + renameTokenFind( + &sParse, &sCtx, (void*)sParse.pNewTable->aCol[iCol].zName + ); + if( sCtx.iCol<0 ){ + renameTokenFind(&sParse, &sCtx, (void*)&sParse.pNewTable->iPKey); + } + sqlite3WalkExprList(&sWalker, sParse.pNewTable->pCheck); + for(pIdx=sParse.pNewTable->pIndex; pIdx; pIdx=pIdx->pNext){ + sqlite3WalkExprList(&sWalker, pIdx->aColExpr); + } + } + + for(pFKey=sParse.pNewTable->pFKey; pFKey; pFKey=pFKey->pNextFrom){ + for(i=0; inCol; i++){ + if( bFKOnly==0 && pFKey->aCol[i].iFrom==iCol ){ + renameTokenFind(&sParse, &sCtx, (void*)&pFKey->aCol[i]); + } + if( 0==sqlite3_stricmp(pFKey->zTo, zTable) + && 0==sqlite3_stricmp(pFKey->aCol[i].zCol, zOld) + ){ + renameTokenFind(&sParse, &sCtx, (void*)pFKey->aCol[i].zCol); + } + } + } + } + }else if( sParse.pNewIndex ){ + sqlite3WalkExprList(&sWalker, sParse.pNewIndex->aColExpr); + sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere); + }else{ + /* A trigger */ + TriggerStep *pStep; + rc = renameResolveTrigger(&sParse, (bTemp ? 0 : zDb)); + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + + for(pStep=sParse.pNewTrigger->step_list; pStep; pStep=pStep->pNext){ + if( pStep->zTarget ){ + Table *pTarget = sqlite3LocateTable(&sParse, 0, pStep->zTarget, zDb); + if( pTarget==pTab ){ + if( pStep->pUpsert ){ + ExprList *pUpsertSet = pStep->pUpsert->pUpsertSet; + renameColumnElistNames(&sParse, &sCtx, pUpsertSet, zOld); + } + renameColumnIdlistNames(&sParse, &sCtx, pStep->pIdList, zOld); + renameColumnElistNames(&sParse, &sCtx, pStep->pExprList, zOld); + } + } + } + + + /* Find tokens to edit in UPDATE OF clause */ + if( sParse.pTriggerTab==pTab ){ + renameColumnIdlistNames(&sParse, &sCtx,sParse.pNewTrigger->pColumns,zOld); + } + + /* Find tokens to edit in various expressions and selects */ + renameWalkTrigger(&sWalker, sParse.pNewTrigger); + } + + assert( rc==SQLITE_OK ); + rc = renameEditSql(context, &sCtx, zSql, zNew, bQuote); + +renameColumnFunc_done: + if( rc!=SQLITE_OK ){ + if( sParse.zErrMsg ){ + renameColumnParseError(context, 0, argv[1], argv[2], &sParse); + }else{ + sqlite3_result_error_code(context, rc); + } + } + + renameParseCleanup(&sParse); + renameTokenFree(db, sCtx.pList); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + sqlite3BtreeLeaveAll(db); +} + +/* +** Walker expression callback used by "RENAME TABLE". +*/ +static int renameTableExprCb(Walker *pWalker, Expr *pExpr){ + RenameCtx *p = pWalker->u.pRename; + if( pExpr->op==TK_COLUMN && p->pTab==pExpr->pTab ){ + renameTokenFind(pWalker->pParse, p, (void*)&pExpr->pTab); + } + return WRC_Continue; +} + +/* +** Walker select callback used by "RENAME TABLE". +*/ +static int renameTableSelectCb(Walker *pWalker, Select *pSelect){ + int i; + RenameCtx *p = pWalker->u.pRename; + SrcList *pSrc = pSelect->pSrc; + for(i=0; inSrc; i++){ + struct SrcList_item *pItem = &pSrc->a[i]; + if( pItem->pTab==p->pTab ){ + renameTokenFind(pWalker->pParse, p, pItem->zName); + } + } + + return WRC_Continue; +} + + +/* +** This C function implements an SQL user function that is used by SQL code +** generated by the ALTER TABLE ... RENAME command to modify the definition +** of any foreign key constraints that use the table being renamed as the +** parent table. It is passed three arguments: +** +** 0: The database containing the table being renamed. +** 1. type: Type of object ("table", "view" etc.) +** 2. object: Name of object +** 3: The complete text of the schema statement being modified, +** 4: The old name of the table being renamed, and +** 5: The new name of the table being renamed. +** 6: True if the schema statement comes from the temp db. +** +** It returns the new schema statement. For example: +** +** sqlite_rename_table('main', 'CREATE TABLE t1(a REFERENCES t2)','t2','t3',0) +** -> 'CREATE TABLE t1(a REFERENCES t3)' +*/ +static void renameTableFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + const char *zDb = (const char*)sqlite3_value_text(argv[0]); + const char *zInput = (const char*)sqlite3_value_text(argv[3]); + const char *zOld = (const char*)sqlite3_value_text(argv[4]); + const char *zNew = (const char*)sqlite3_value_text(argv[5]); + int bTemp = sqlite3_value_int(argv[6]); + UNUSED_PARAMETER(NotUsed); + + if( zInput && zOld && zNew ){ + Parse sParse; + int rc; + int bQuote = 1; + RenameCtx sCtx; + Walker sWalker; + +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; + db->xAuth = 0; +#endif + + sqlite3BtreeEnterAll(db); + + memset(&sCtx, 0, sizeof(RenameCtx)); + sCtx.pTab = sqlite3FindTable(db, zOld, zDb); + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = &sParse; + sWalker.xExprCallback = renameTableExprCb; + sWalker.xSelectCallback = renameTableSelectCb; + sWalker.u.pRename = &sCtx; + + rc = renameParseSql(&sParse, zDb, 1, db, zInput, bTemp); + + if( rc==SQLITE_OK ){ + int isLegacy = (db->flags & SQLITE_LegacyAlter); + if( sParse.pNewTable ){ + Table *pTab = sParse.pNewTable; + + if( pTab->pSelect ){ + if( isLegacy==0 ){ + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = &sParse; + + sqlite3SelectPrep(&sParse, pTab->pSelect, &sNC); + if( sParse.nErr ) rc = sParse.rc; + sqlite3WalkSelect(&sWalker, pTab->pSelect); + } + }else{ + /* Modify any FK definitions to point to the new table. */ +#ifndef SQLITE_OMIT_FOREIGN_KEY + if( db->flags & SQLITE_ForeignKeys ){ + FKey *pFKey; + for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){ + if( sqlite3_stricmp(pFKey->zTo, zOld)==0 ){ + renameTokenFind(&sParse, &sCtx, (void*)pFKey->zTo); + } + } + } +#endif + + /* If this is the table being altered, fix any table refs in CHECK + ** expressions. Also update the name that appears right after the + ** "CREATE [VIRTUAL] TABLE" bit. */ + if( sqlite3_stricmp(zOld, pTab->zName)==0 ){ + sCtx.pTab = pTab; + if( isLegacy==0 ){ + sqlite3WalkExprList(&sWalker, pTab->pCheck); + } + renameTokenFind(&sParse, &sCtx, pTab->zName); + } + } + } + + else if( sParse.pNewIndex ){ + renameTokenFind(&sParse, &sCtx, sParse.pNewIndex->zName); + if( isLegacy==0 ){ + sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere); + } + } + +#ifndef SQLITE_OMIT_TRIGGER + else{ + Trigger *pTrigger = sParse.pNewTrigger; + TriggerStep *pStep; + if( 0==sqlite3_stricmp(sParse.pNewTrigger->table, zOld) + && sCtx.pTab->pSchema==pTrigger->pTabSchema + ){ + renameTokenFind(&sParse, &sCtx, sParse.pNewTrigger->table); + } + + if( isLegacy==0 ){ + rc = renameResolveTrigger(&sParse, bTemp ? 0 : zDb); + if( rc==SQLITE_OK ){ + renameWalkTrigger(&sWalker, pTrigger); + for(pStep=pTrigger->step_list; pStep; pStep=pStep->pNext){ + if( pStep->zTarget && 0==sqlite3_stricmp(pStep->zTarget, zOld) ){ + renameTokenFind(&sParse, &sCtx, pStep->zTarget); + } + } + } + } + } +#endif + } + + if( rc==SQLITE_OK ){ + rc = renameEditSql(context, &sCtx, zInput, zNew, bQuote); + } + if( rc!=SQLITE_OK ){ + if( sParse.zErrMsg ){ + renameColumnParseError(context, 0, argv[1], argv[2], &sParse); + }else{ + sqlite3_result_error_code(context, rc); + } + } + + renameParseCleanup(&sParse); + renameTokenFree(db, sCtx.pList); + sqlite3BtreeLeaveAll(db); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + } + + return; +} + +/* +** An SQL user function that checks that there are no parse or symbol +** resolution problems in a CREATE TRIGGER|TABLE|VIEW|INDEX statement. +** After an ALTER TABLE .. RENAME operation is performed and the schema +** reloaded, this function is called on each SQL statement in the schema +** to ensure that it is still usable. +** +** 0: Database name ("main", "temp" etc.). +** 1: SQL statement. +** 2: Object type ("view", "table", "trigger" or "index"). +** 3: Object name. +** 4: True if object is from temp schema. +** +** Unless it finds an error, this function normally returns NULL. However, it +** returns integer value 1 if: +** +** * the SQL argument creates a trigger, and +** * the table that the trigger is attached to is in database zDb. +*/ +static void renameTableTest( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + char const *zDb = (const char*)sqlite3_value_text(argv[0]); + char const *zInput = (const char*)sqlite3_value_text(argv[1]); + int bTemp = sqlite3_value_int(argv[4]); + int isLegacy = (db->flags & SQLITE_LegacyAlter); + +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; + db->xAuth = 0; +#endif + + UNUSED_PARAMETER(NotUsed); + if( zDb && zInput ){ + int rc; + Parse sParse; + rc = renameParseSql(&sParse, zDb, 1, db, zInput, bTemp); + if( rc==SQLITE_OK ){ + if( isLegacy==0 && sParse.pNewTable && sParse.pNewTable->pSelect ){ + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = &sParse; + sqlite3SelectPrep(&sParse, sParse.pNewTable->pSelect, &sNC); + if( sParse.nErr ) rc = sParse.rc; + } + + else if( sParse.pNewTrigger ){ + if( isLegacy==0 ){ + rc = renameResolveTrigger(&sParse, bTemp ? 0 : zDb); + } + if( rc==SQLITE_OK ){ + int i1 = sqlite3SchemaToIndex(db, sParse.pNewTrigger->pTabSchema); + int i2 = sqlite3FindDbName(db, zDb); + if( i1==i2 ) sqlite3_result_int(context, 1); + } + } + } + + if( rc!=SQLITE_OK ){ + renameColumnParseError(context, 1, argv[2], argv[3], &sParse); + } + renameParseCleanup(&sParse); + } + +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif +} + +/* +** Register built-in functions used to help implement ALTER TABLE +*/ +void sqlite3AlterFunctions(void){ + static FuncDef aAlterTableFuncs[] = { + FUNCTION(sqlite_rename_column, 9, 0, 0, renameColumnFunc), + FUNCTION(sqlite_rename_table, 7, 0, 0, renameTableFunc), + FUNCTION(sqlite_rename_test, 5, 0, 0, renameTableTest), + }; + sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs)); +} #endif /* SQLITE_ALTER_TABLE */ diff -Nru lxd-3.0.2/dist/sqlite/src/analyze.c lxd-3.0.3/dist/sqlite/src/analyze.c --- lxd-3.0.2/dist/sqlite/src/analyze.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/analyze.c 2018-11-22 20:54:16.000000000 +0000 @@ -485,6 +485,7 @@ 0, /* pNext */ statInit, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "stat_init", /* zName */ {0} }; @@ -801,6 +802,7 @@ 0, /* pNext */ statPush, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "stat_push", /* zName */ {0} }; @@ -952,6 +954,7 @@ 0, /* pNext */ statGet, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "stat_get", /* zName */ {0} }; @@ -1271,10 +1274,7 @@ callStatGet(v, regStat4, STAT_GET_NLT, regLt); callStatGet(v, regStat4, STAT_GET_NDLT, regDLt); sqlite3VdbeAddOp4Int(v, seekOp, iTabCur, addrNext, regSampleRowid, 0); - /* We know that the regSampleRowid row exists because it was read by - ** the previous loop. Thus the not-found jump of seekOp will never - ** be taken */ - VdbeCoverageNeverTaken(v); + VdbeCoverage(v); #ifdef SQLITE_ENABLE_STAT3 sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iTabCur, 0, regSample); #else @@ -1914,7 +1914,7 @@ /* Load the statistics from the sqlite_stat4 table. */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 - if( rc==SQLITE_OK && OptimizationEnabled(db, SQLITE_Stat34) ){ + if( rc==SQLITE_OK ){ db->lookaside.bDisable++; rc = loadStat4(db, sInfo.zDatabase); db->lookaside.bDisable--; diff -Nru lxd-3.0.2/dist/sqlite/src/attach.c lxd-3.0.3/dist/sqlite/src/attach.c --- lxd-3.0.2/dist/sqlite/src/attach.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/attach.c 2018-11-22 20:54:16.000000000 +0000 @@ -414,6 +414,7 @@ 0, /* pNext */ detachFunc, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "sqlite_detach", /* zName */ {0} }; @@ -433,6 +434,7 @@ 0, /* pNext */ attachFunc, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "sqlite_attach", /* zName */ {0} }; diff -Nru lxd-3.0.2/dist/sqlite/src/auth.c lxd-3.0.3/dist/sqlite/src/auth.c --- lxd-3.0.2/dist/sqlite/src/auth.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/auth.c 2018-11-22 20:54:16.000000000 +0000 @@ -78,7 +78,7 @@ sqlite3_mutex_enter(db->mutex); db->xAuth = (sqlite3_xauth)xAuth; db->pAuthArg = pArg; - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); sqlite3_mutex_leave(db->mutex); return SQLITE_OK; } @@ -207,7 +207,7 @@ /* Don't do any authorization checks if the database is initialising ** or if the parser is being invoked from within sqlite3_declare_vtab. */ - if( db->init.busy || IN_DECLARE_VTAB ){ + if( db->init.busy || IN_SPECIAL_PARSE ){ return SQLITE_OK; } diff -Nru lxd-3.0.2/dist/sqlite/src/backup.c lxd-3.0.3/dist/sqlite/src/backup.c --- lxd-3.0.2/dist/sqlite/src/backup.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/backup.c 2018-11-22 20:54:16.000000000 +0000 @@ -400,7 +400,7 @@ ** before this function exits. */ if( rc==SQLITE_OK && 0==sqlite3BtreeIsInReadTrans(p->pSrc) ){ - rc = sqlite3BtreeBeginTrans(p->pSrc, 0); + rc = sqlite3BtreeBeginTrans(p->pSrc, 0, 0); bCloseTrans = 1; } @@ -416,10 +416,10 @@ /* Lock the destination database, if it is not locked already. */ if( SQLITE_OK==rc && p->bDestLocked==0 - && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2)) + && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2, + (int*)&p->iDestSchema)) ){ p->bDestLocked = 1; - sqlite3BtreeGetMeta(p->pDest, BTREE_SCHEMA_VERSION, &p->iDestSchema); } /* Do not allow backup if the destination database is in WAL mode diff -Nru lxd-3.0.2/dist/sqlite/src/btree.c lxd-3.0.3/dist/sqlite/src/btree.c --- lxd-3.0.2/dist/sqlite/src/btree.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/btree.c 2018-11-22 20:54:16.000000000 +0000 @@ -3300,7 +3300,7 @@ ** when A already has a read lock, we encourage A to give up and let B ** proceed. */ -int sqlite3BtreeBeginTrans(Btree *p, int wrflag){ +int sqlite3BtreeBeginTrans(Btree *p, int wrflag, int *pSchemaVersion){ BtShared *pBt = p->pBt; int rc = SQLITE_OK; @@ -3316,6 +3316,12 @@ } assert( pBt->inTransaction==TRANS_WRITE || IfNotOmitAV(pBt->bDoTruncate)==0 ); + if( (p->db->flags & SQLITE_ResetDatabase) + && sqlite3PagerIsreadonly(pBt->pPager)==0 + ){ + pBt->btsFlags &= ~BTS_READ_ONLY; + } + /* Write transactions are not possible on a read-only database */ if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){ rc = SQLITE_READONLY; @@ -3375,6 +3381,11 @@ rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db)); if( rc==SQLITE_OK ){ rc = newDatabase(pBt); + }else if( rc==SQLITE_BUSY_SNAPSHOT && pBt->inTransaction==TRANS_NONE ){ + /* if there was no transaction opened when this function was + ** called and SQLITE_BUSY_SNAPSHOT is returned, change the error + ** code to SQLITE_BUSY. */ + rc = SQLITE_BUSY; } } } @@ -3426,14 +3437,18 @@ } } - trans_begun: - if( rc==SQLITE_OK && wrflag ){ - /* This call makes sure that the pager has the correct number of - ** open savepoints. If the second parameter is greater than 0 and - ** the sub-journal is not already open, then it will be opened here. - */ - rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint); + if( rc==SQLITE_OK ){ + if( pSchemaVersion ){ + *pSchemaVersion = get4byte(&pBt->pPage1->aData[40]); + } + if( wrflag ){ + /* This call makes sure that the pager has the correct number of + ** open savepoints. If the second parameter is greater than 0 and + ** the sub-journal is not already open, then it will be opened here. + */ + rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint); + } } btreeIntegrity(p); @@ -5180,6 +5195,23 @@ return rc; } +/* +** This function is a no-op if cursor pCur does not point to a valid row. +** Otherwise, if pCur is valid, configure it so that the next call to +** sqlite3BtreeNext() is a no-op. +*/ +#ifndef SQLITE_OMIT_WINDOWFUNC +void sqlite3BtreeSkipNext(BtCursor *pCur){ + /* We believe that the cursor must always be in the valid state when + ** this routine is called, but the proof is difficult, so we add an + ** ALWaYS() test just in case we are wrong. */ + if( ALWAYS(pCur->eState==CURSOR_VALID) ){ + pCur->eState = CURSOR_SKIPNEXT; + pCur->skipNext = 1; + } +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + /* Move the cursor to the last entry in the table. Return SQLITE_OK ** on success. Set *pRes to 0 if the cursor actually points to something ** or set *pRes to 1 if the table is empty. @@ -5584,7 +5616,16 @@ pPage = pCur->pPage; idx = ++pCur->ix; - assert( pPage->isInit ); + if( !pPage->isInit ){ + /* The only known way for this to happen is for there to be a + ** recursive SQL function that does a DELETE operation as part of a + ** SELECT which deletes content out from under an active cursor + ** in a corrupt database file where the table being DELETE-ed from + ** has pages in common with the table being queried. See TH3 + ** module cov1/btree78.test testcase 220 (2018-06-08) for an + ** example. */ + return SQLITE_CORRUPT_BKPT; + } /* If the database file is corrupt, it is possible for the value of idx ** to be invalid here. This can only occur if a second cursor modifies @@ -9296,8 +9337,7 @@ ** Also check that the page number is in bounds. */ static int checkRef(IntegrityCk *pCheck, Pgno iPage){ - if( iPage==0 ) return 1; - if( iPage>pCheck->nPage ){ + if( iPage>pCheck->nPage || iPage==0 ){ checkAppendMsg(pCheck, "invalid page number %d", iPage); return 1; } @@ -9352,17 +9392,12 @@ ){ int i; int expected = N; - int iFirst = iPage; - while( N-- > 0 && pCheck->mxErr ){ + int nErrAtStart = pCheck->nErr; + while( iPage!=0 && pCheck->mxErr ){ DbPage *pOvflPage; unsigned char *pOvflData; - if( iPage<1 ){ - checkAppendMsg(pCheck, - "%d of %d pages missing from overflow list starting at %d", - N+1, expected, iFirst); - break; - } if( checkRef(pCheck, iPage) ) break; + N--; if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage, 0) ){ checkAppendMsg(pCheck, "failed to get page %d", iPage); break; @@ -9406,10 +9441,12 @@ #endif iPage = get4byte(pOvflData); sqlite3PagerUnref(pOvflPage); - - if( isFreeList && N<(iPage!=0) ){ - checkAppendMsg(pCheck, "free-page count in header is too small"); - } + } + if( N && nErrAtStart==pCheck->nErr ){ + checkAppendMsg(pCheck, + "%s is %d but should be %d", + isFreeList ? "size" : "overflow list length", + expected-N, expected); } } #endif /* SQLITE_OMIT_INTEGRITY_CHECK */ @@ -9803,6 +9840,24 @@ /* Check all the tables. */ +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + int mx = 0; + int mxInHdr; + for(i=0; (int)ipPage1->aData[52]); + if( mx!=mxInHdr ){ + checkAppendMsg(&sCheck, + "max rootpage (%d) disagrees with header (%d)", + mx, mxInHdr + ); + } + }else if( get4byte(&pBt->pPage1->aData[64])!=0 ){ + checkAppendMsg(&sCheck, + "incremental_vacuum enabled with a max rootpage of zero" + ); + } +#endif testcase( pBt->db->flags & SQLITE_CellSizeCk ); pBt->db->flags &= ~SQLITE_CellSizeCk; for(i=0; (int)ibtsFlags &= ~BTS_NO_WAL; if( iVersion==1 ) pBt->btsFlags |= BTS_NO_WAL; - rc = sqlite3BtreeBeginTrans(pBtree, 0); + rc = sqlite3BtreeBeginTrans(pBtree, 0, 0); if( rc==SQLITE_OK ){ u8 *aData = pBt->pPage1->aData; if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){ - rc = sqlite3BtreeBeginTrans(pBtree, 2); + rc = sqlite3BtreeBeginTrans(pBtree, 2, 0); if( rc==SQLITE_OK ){ rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); if( rc==SQLITE_OK ){ diff -Nru lxd-3.0.2/dist/sqlite/src/btree.h lxd-3.0.3/dist/sqlite/src/btree.h --- lxd-3.0.2/dist/sqlite/src/btree.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/btree.h 2018-11-22 20:54:16.000000000 +0000 @@ -78,7 +78,7 @@ int sqlite3BtreeGetReserveNoMutex(Btree *p); int sqlite3BtreeSetAutoVacuum(Btree *, int); int sqlite3BtreeGetAutoVacuum(Btree *); -int sqlite3BtreeBeginTrans(Btree*,int); +int sqlite3BtreeBeginTrans(Btree*,int,int*); int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster); int sqlite3BtreeCommitPhaseTwo(Btree*, int); int sqlite3BtreeCommit(Btree*); @@ -301,6 +301,9 @@ int sqlite3BtreeInsert(BtCursor*, const BtreePayload *pPayload, int flags, int seekResult); int sqlite3BtreeFirst(BtCursor*, int *pRes); +#ifndef SQLITE_OMIT_WINDOWFUNC +void sqlite3BtreeSkipNext(BtCursor*); +#endif int sqlite3BtreeLast(BtCursor*, int *pRes); int sqlite3BtreeNext(BtCursor*, int flags); int sqlite3BtreeEof(BtCursor*); diff -Nru lxd-3.0.2/dist/sqlite/src/build.c lxd-3.0.3/dist/sqlite/src/build.c --- lxd-3.0.2/dist/sqlite/src/build.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/build.c 2018-11-22 20:54:16.000000000 +0000 @@ -225,7 +225,6 @@ /* Get the VDBE program ready for execution */ if( v && pParse->nErr==0 && !db->mallocFailed ){ - assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */ /* A minimum of one cursor is required if autoincrement is used * See ticket [a696379c1f08866] */ if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1; @@ -440,7 +439,7 @@ /* ** Reclaim the memory used by an index */ -static void freeIndex(sqlite3 *db, Index *p){ +void sqlite3FreeIndex(sqlite3 *db, Index *p){ #ifndef SQLITE_OMIT_ANALYZE sqlite3DeleteIndexSamples(db, p); #endif @@ -480,7 +479,7 @@ p->pNext = pIndex->pNext; } } - freeIndex(db, pIndex); + sqlite3FreeIndex(db, pIndex); } db->mDbFlags |= DBFLAG_SchemaChange; } @@ -626,7 +625,7 @@ assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); assert( pOld==pIndex || pOld==0 ); } - freeIndex(db, pIndex); + sqlite3FreeIndex(db, pIndex); } /* Delete any foreign keys attached to this table. */ @@ -784,7 +783,7 @@ return -1; } }else{ - assert( db->init.iDb==0 || db->init.busy + assert( db->init.iDb==0 || db->init.busy || IN_RENAME_OBJECT || (db->mDbFlags & DBFLAG_Vacuum)!=0); iDb = db->init.iDb; *pUnqual = pName1; @@ -879,6 +878,9 @@ } if( !OMIT_TEMPDB && isTemp ) iDb = 1; zName = sqlite3NameFromToken(db, pName); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)zName, pName); + } } pParse->sNameToken = *pName; if( zName==0 ) return; @@ -914,7 +916,7 @@ ** and types will be used, so there is no need to test for namespace ** collisions. */ - if( !IN_DECLARE_VTAB ){ + if( !IN_SPECIAL_PARSE ){ char *zDb = db->aDb[iDb].zDbSName; if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ goto begin_table_error; @@ -1073,6 +1075,7 @@ } z = sqlite3DbMallocRaw(db, pName->n + pType->n + 2); if( z==0 ) return; + if( IN_RENAME_OBJECT ) sqlite3RenameTokenMap(pParse, (void*)z, pName); memcpy(z, pName->z, pName->n); z[pName->n] = 0; sqlite3Dequote(z); @@ -1279,6 +1282,9 @@ sqlite3DbFree(db, x.u.zToken); } } + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprUnmap(pParse, pExpr); + } sqlite3ExprDelete(db, pExpr); } @@ -1370,6 +1376,9 @@ && sqlite3StrICmp(sqlite3ColumnType(pCol,""), "INTEGER")==0 && sortOrder!=SQLITE_SO_DESC ){ + if( IN_RENAME_OBJECT && pList ){ + sqlite3RenameTokenRemap(pParse, &pTab->iPKey, pList->a[0].pExpr); + } pTab->iPKey = iCol; pTab->keyConf = (u8)onError; assert( autoInc==0 || autoInc==1 ); @@ -1695,6 +1704,31 @@ return 0; } +/* Recompute the colNotIdxed field of the Index. +** +** colNotIdxed is a bitmask that has a 0 bit representing each indexed +** columns that are within the first 63 columns of the table. The +** high-order bit of colNotIdxed is always 1. All unindexed columns +** of the table have a 1. +** +** The colNotIdxed mask is AND-ed with the SrcList.a[].colUsed mask +** to determine if the index is covering index. +*/ +static void recomputeColumnsNotIndexed(Index *pIdx){ + Bitmask m = 0; + int j; + for(j=pIdx->nColumn-1; j>=0; j--){ + int x = pIdx->aiColumn[j]; + if( x>=0 ){ + testcase( x==BMS-1 ); + testcase( x==BMS-2 ); + if( xcolNotIdxed = ~m; + assert( (pIdx->colNotIdxed>>63)==1 ); +} + /* ** This routine runs at the end of parsing a CREATE TABLE statement that ** has a WITHOUT ROWID clause. The job of this routine is to convert both @@ -1737,10 +1771,6 @@ } } - /* The remaining transformations only apply to b-tree tables, not to - ** virtual tables */ - if( IN_DECLARE_VTAB ) return; - /* Convert the P3 operand of the OP_CreateBtree opcode from BTREE_INTKEY ** into BTREE_BLOBKEY. */ @@ -1763,7 +1793,7 @@ assert( pParse->pNewTable==pTab ); sqlite3CreateIndex(pParse, 0, 0, 0, pList, pTab->keyConf, 0, 0, 0, 0, SQLITE_IDXTYPE_PRIMARYKEY); - if( db->mallocFailed ) return; + if( db->mallocFailed || pParse->nErr ) return; pPk = sqlite3PrimaryKeyIndex(pTab); pTab->iPKey = -1; }else{ @@ -1843,6 +1873,7 @@ }else{ pPk->nColumn = pTab->nCol; } + recomputeColumnsNotIndexed(pPk); } /* @@ -2146,7 +2177,12 @@ ** allocated rather than point to the input string - which means that ** they will persist after the current sqlite3_exec() call returns. */ - p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + if( IN_RENAME_OBJECT ){ + p->pSelect = pSelect; + pSelect = 0; + }else{ + p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + } p->pCheck = sqlite3ExprListDup(db, pCNames, EXPRDUP_REDUCE); if( db->mallocFailed ) goto create_view_fail; @@ -2171,6 +2207,9 @@ create_view_fail: sqlite3SelectDelete(db, pSelect); + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprlistUnmap(pParse, pCNames); + } sqlite3ExprListDelete(db, pCNames); return; } @@ -2244,6 +2283,10 @@ assert( pTable->pSelect ); pSel = sqlite3SelectDup(db, pTable->pSelect, 0); if( pSel ){ +#ifndef SQLITE_OMIT_ALTERTABLE + u8 eParseMode = pParse->eParseMode; + pParse->eParseMode = PARSE_MODE_NORMAL; +#endif n = pParse->nTab; sqlite3SrcListAssignCursors(pParse, pSel->pSrc); pTable->nCol = -1; @@ -2289,10 +2332,18 @@ sqlite3DeleteTable(db, pSelTab); sqlite3SelectDelete(db, pSel); db->lookaside.bDisable--; +#ifndef SQLITE_OMIT_ALTERTABLE + pParse->eParseMode = eParseMode; +#endif } else { nErr++; } pTable->pSchema->schemaFlags |= DB_UnresetViews; + if( db->mallocFailed ){ + sqlite3DeleteColumnNames(db, pTable); + pTable->aCol = 0; + pTable->nCol = 0; + } #endif /* SQLITE_OMIT_VIEW */ return nErr; } @@ -2631,8 +2682,10 @@ v = sqlite3GetVdbe(pParse); if( v ){ sqlite3BeginWriteOperation(pParse, 1, iDb); - sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName); - sqlite3FkDropTable(pParse, pName, pTab); + if( !isView ){ + sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName); + sqlite3FkDropTable(pParse, pName, pTab); + } sqlite3CodeDropTable(pParse, pTab, iDb, isView); } @@ -2707,6 +2760,9 @@ pFKey->pNextFrom = p->pFKey; z = (char*)&pFKey->aCol[nCol]; pFKey->zTo = z; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)z, pTo); + } memcpy(z, pTo->z, pTo->n); z[pTo->n] = 0; sqlite3Dequote(z); @@ -2729,12 +2785,18 @@ pFromCol->a[i].zName); goto fk_end; } + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, &pFKey->aCol[i], pFromCol->a[i].zName); + } } } if( pToCol ){ for(i=0; ia[i].zName); pFKey->aCol[i].zCol = z; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, z, pToCol->a[i].zName); + } memcpy(z, pToCol->a[i].zName, n); z[n] = 0; z += n+1; @@ -3067,21 +3129,23 @@ if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ goto exit_create_index; } - if( !db->init.busy ){ - if( sqlite3FindTable(db, zName, 0)!=0 ){ - sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); + if( !IN_RENAME_OBJECT ){ + if( !db->init.busy ){ + if( sqlite3FindTable(db, zName, 0)!=0 ){ + sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); + goto exit_create_index; + } + } + if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){ + if( !ifNotExist ){ + sqlite3ErrorMsg(pParse, "index %s already exists", zName); + }else{ + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); + } goto exit_create_index; } } - if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){ - if( !ifNotExist ){ - sqlite3ErrorMsg(pParse, "index %s already exists", zName); - }else{ - assert( !db->init.busy ); - sqlite3CodeVerifySchema(pParse, iDb); - } - goto exit_create_index; - } }else{ int n; Index *pLoop; @@ -3096,13 +3160,13 @@ ** The following statement converts "sqlite3_autoindex..." into ** "sqlite3_butoindex..." in order to make the names distinct. ** The "vtab_err.test" test demonstrates the need of this statement. */ - if( IN_DECLARE_VTAB ) zName[7]++; + if( IN_SPECIAL_PARSE ) zName[7]++; } /* Check for authorization to create an index. */ #ifndef SQLITE_OMIT_AUTHORIZATION - { + if( !IN_RENAME_OBJECT ){ const char *zDb = pDb->zDbSName; if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){ goto exit_create_index; @@ -3189,7 +3253,12 @@ ** TODO: Issue a warning if the table primary key is used as part of the ** index key. */ - for(i=0, pListItem=pList->a; inExpr; i++, pListItem++){ + pListItem = pList->a; + if( IN_RENAME_OBJECT ){ + pIndex->aColExpr = pList; + pList = 0; + } + for(i=0; inKeyCol; i++, pListItem++){ Expr *pCExpr; /* The i-th index expression */ int requestedSortOrder; /* ASC or DESC on the i-th expression */ const char *zColl; /* Collation sequence name */ @@ -3205,12 +3274,8 @@ goto exit_create_index; } if( pIndex->aColExpr==0 ){ - ExprList *pCopy = sqlite3ExprListDup(db, pList, 0); - pIndex->aColExpr = pCopy; - if( !db->mallocFailed ){ - assert( pCopy!=0 ); - pListItem = &pCopy->a[i]; - } + pIndex->aColExpr = pList; + pList = 0; } j = XN_EXPR; pIndex->aiColumn[i] = XN_EXPR; @@ -3276,6 +3341,7 @@ ** it as a covering index */ assert( HasRowid(pTab) || pTab->iPKey<0 || sqlite3ColumnOfIndex(pIndex, pTab->iPKey)>=0 ); + recomputeColumnsNotIndexed(pIndex); if( pTblName!=0 && pIndex->nColumn>=pTab->nCol ){ pIndex->isCovering = 1; for(j=0; jnCol; j++){ @@ -3348,98 +3414,101 @@ } } - /* Link the new Index structure to its table and to the other - ** in-memory database structures. - */ - assert( pParse->nErr==0 ); - if( db->init.busy ){ - Index *p; - assert( !IN_DECLARE_VTAB ); - assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); - p = sqlite3HashInsert(&pIndex->pSchema->idxHash, - pIndex->zName, pIndex); - if( p ){ - assert( p==pIndex ); /* Malloc must have failed */ - sqlite3OomFault(db); - goto exit_create_index; - } - db->mDbFlags |= DBFLAG_SchemaChange; - if( pTblName!=0 ){ - pIndex->tnum = db->init.newTnum; - } - } + if( !IN_RENAME_OBJECT ){ - /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the - ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then - ** emit code to allocate the index rootpage on disk and make an entry for - ** the index in the sqlite_master table and populate the index with - ** content. But, do not do this if we are simply reading the sqlite_master - ** table to parse the schema, or if this index is the PRIMARY KEY index - ** of a WITHOUT ROWID table. - ** - ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY - ** or UNIQUE index in a CREATE TABLE statement. Since the table - ** has just been created, it contains no data and the index initialization - ** step can be skipped. - */ - else if( HasRowid(pTab) || pTblName!=0 ){ - Vdbe *v; - char *zStmt; - int iMem = ++pParse->nMem; - - v = sqlite3GetVdbe(pParse); - if( v==0 ) goto exit_create_index; - - sqlite3BeginWriteOperation(pParse, 1, iDb); - - /* Create the rootpage for the index using CreateIndex. But before - ** doing so, code a Noop instruction and store its address in - ** Index.tnum. This is required in case this index is actually a - ** PRIMARY KEY and the table is actually a WITHOUT ROWID table. In - ** that case the convertToWithoutRowidTable() routine will replace - ** the Noop with a Goto to jump over the VDBE code generated below. */ - pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop); - sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, iMem, BTREE_BLOBKEY); - - /* Gather the complete text of the CREATE INDEX statement into - ** the zStmt variable + /* Link the new Index structure to its table and to the other + ** in-memory database structures. */ - if( pStart ){ - int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n; - if( pName->z[n-1]==';' ) n--; - /* A named index with an explicit CREATE INDEX statement */ - zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s", - onError==OE_None ? "" : " UNIQUE", n, pName->z); - }else{ - /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */ - /* zStmt = sqlite3MPrintf(""); */ - zStmt = 0; + assert( pParse->nErr==0 ); + if( db->init.busy ){ + Index *p; + assert( !IN_SPECIAL_PARSE ); + assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); + p = sqlite3HashInsert(&pIndex->pSchema->idxHash, + pIndex->zName, pIndex); + if( p ){ + assert( p==pIndex ); /* Malloc must have failed */ + sqlite3OomFault(db); + goto exit_create_index; + } + db->mDbFlags |= DBFLAG_SchemaChange; + if( pTblName!=0 ){ + pIndex->tnum = db->init.newTnum; + } } - /* Add an entry in sqlite_master for this index + /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the + ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then + ** emit code to allocate the index rootpage on disk and make an entry for + ** the index in the sqlite_master table and populate the index with + ** content. But, do not do this if we are simply reading the sqlite_master + ** table to parse the schema, or if this index is the PRIMARY KEY index + ** of a WITHOUT ROWID table. + ** + ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY + ** or UNIQUE index in a CREATE TABLE statement. Since the table + ** has just been created, it contains no data and the index initialization + ** step can be skipped. */ - sqlite3NestedParse(pParse, - "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);", - db->aDb[iDb].zDbSName, MASTER_NAME, - pIndex->zName, - pTab->zName, - iMem, - zStmt - ); - sqlite3DbFree(db, zStmt); + else if( HasRowid(pTab) || pTblName!=0 ){ + Vdbe *v; + char *zStmt; + int iMem = ++pParse->nMem; + + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto exit_create_index; + + sqlite3BeginWriteOperation(pParse, 1, iDb); + + /* Create the rootpage for the index using CreateIndex. But before + ** doing so, code a Noop instruction and store its address in + ** Index.tnum. This is required in case this index is actually a + ** PRIMARY KEY and the table is actually a WITHOUT ROWID table. In + ** that case the convertToWithoutRowidTable() routine will replace + ** the Noop with a Goto to jump over the VDBE code generated below. */ + pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop); + sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, iMem, BTREE_BLOBKEY); - /* Fill the index with data and reparse the schema. Code an OP_Expire - ** to invalidate all pre-compiled statements. - */ - if( pTblName ){ - sqlite3RefillIndex(pParse, pIndex, iMem); - sqlite3ChangeCookie(pParse, iDb); - sqlite3VdbeAddParseSchemaOp(v, iDb, - sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName)); - sqlite3VdbeAddOp0(v, OP_Expire); - } + /* Gather the complete text of the CREATE INDEX statement into + ** the zStmt variable + */ + if( pStart ){ + int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n; + if( pName->z[n-1]==';' ) n--; + /* A named index with an explicit CREATE INDEX statement */ + zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s", + onError==OE_None ? "" : " UNIQUE", n, pName->z); + }else{ + /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */ + /* zStmt = sqlite3MPrintf(""); */ + zStmt = 0; + } + + /* Add an entry in sqlite_master for this index + */ + sqlite3NestedParse(pParse, + "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);", + db->aDb[iDb].zDbSName, MASTER_NAME, + pIndex->zName, + pTab->zName, + iMem, + zStmt + ); + sqlite3DbFree(db, zStmt); - sqlite3VdbeJumpHere(v, pIndex->tnum); + /* Fill the index with data and reparse the schema. Code an OP_Expire + ** to invalidate all pre-compiled statements. + */ + if( pTblName ){ + sqlite3RefillIndex(pParse, pIndex, iMem); + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(v, iDb, + sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName)); + sqlite3VdbeAddOp2(v, OP_Expire, 0, 1); + } + + sqlite3VdbeJumpHere(v, pIndex->tnum); + } } /* When adding an index to the list of indices for a table, make @@ -3463,10 +3532,15 @@ } pIndex = 0; } + else if( IN_RENAME_OBJECT ){ + assert( pParse->pNewIndex==0 ); + pParse->pNewIndex = pIndex; + pIndex = 0; + } /* Clean up before exiting */ exit_create_index: - if( pIndex ) freeIndex(db, pIndex); + if( pIndex ) sqlite3FreeIndex(db, pIndex); sqlite3ExprDelete(db, pPIWhere); sqlite3ExprListDelete(db, pList); sqlite3SrcListDelete(db, pTblName); @@ -3635,7 +3709,8 @@ ** ** A new IdList is returned, or NULL if malloc() fails. */ -IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){ +IdList *sqlite3IdListAppend(Parse *pParse, IdList *pList, Token *pToken){ + sqlite3 *db = pParse->db; int i; if( pList==0 ){ pList = sqlite3DbMallocZero(db, sizeof(IdList) ); @@ -3653,6 +3728,9 @@ return 0; } pList->a[i].zName = sqlite3NameFromToken(db, pToken); + if( IN_RENAME_OBJECT && pList->a[i].zName ){ + sqlite3RenameTokenMap(pParse, (void*)pList->a[i].zName, pToken); + } return pList; } @@ -3899,6 +3977,12 @@ } assert( p->nSrc>0 ); pItem = &p->a[p->nSrc-1]; + assert( (pTable==0)==(pDatabase==0) ); + assert( pItem->zName==0 || pDatabase!=0 ); + if( IN_RENAME_OBJECT && pItem->zName ){ + Token *pToken = (ALWAYS(pDatabase) && pDatabase->z) ? pDatabase : pTable; + sqlite3RenameTokenMap(pParse, pItem->zName, pToken); + } assert( pAlias!=0 ); if( pAlias->n ){ pItem->zAlias = sqlite3NameFromToken(db, pAlias); diff -Nru lxd-3.0.2/dist/sqlite/src/ctime.c lxd-3.0.3/dist/sqlite/src/ctime.c --- lxd-3.0.2/dist/sqlite/src/ctime.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/ctime.c 2018-11-22 20:54:16.000000000 +0000 @@ -30,6 +30,12 @@ #define CTIMEOPT_VAL_(opt) #opt #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) +/* Like CTIMEOPT_VAL, but especially for SQLITE_DEFAULT_LOOKASIDE. This +** option requires a separate macro because legal values contain a single +** comma. e.g. (-DSQLITE_DEFAULT_LOOKASIDE="100,100") */ +#define CTIMEOPT_VAL2_(opt1,opt2) #opt1 "," #opt2 +#define CTIMEOPT_VAL2(opt) CTIMEOPT_VAL2_(opt) + /* ** An array of names of all compile-time options. This array should ** be sorted A-Z. @@ -113,7 +119,7 @@ "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE), #endif #ifdef SQLITE_DEFAULT_LOOKASIDE - "DEFAULT_LOOKASIDE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOOKASIDE), + "DEFAULT_LOOKASIDE=" CTIMEOPT_VAL2(SQLITE_DEFAULT_LOOKASIDE), #endif #if SQLITE_DEFAULT_MEMSTATUS "DEFAULT_MEMSTATUS", diff -Nru lxd-3.0.2/dist/sqlite/src/dbpage.c lxd-3.0.3/dist/sqlite/src/dbpage.c --- lxd-3.0.2/dist/sqlite/src/dbpage.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/dbpage.c 2018-11-22 20:54:16.000000000 +0000 @@ -369,7 +369,7 @@ int i; for(i=0; inDb; i++){ Btree *pBt = db->aDb[i].pBt; - if( pBt ) sqlite3BtreeBeginTrans(pBt, 1); + if( pBt ) sqlite3BtreeBeginTrans(pBt, 1, 0); } return SQLITE_OK; } diff -Nru lxd-3.0.2/dist/sqlite/src/delete.c lxd-3.0.3/dist/sqlite/src/delete.c --- lxd-3.0.2/dist/sqlite/src/delete.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/delete.c 2018-11-22 20:54:16.000000000 +0000 @@ -463,9 +463,8 @@ } iKey = iPk; }else{ - iKey = pParse->nMem + 1; - iKey = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iTabCur, iKey, 0); - if( iKey>pParse->nMem ) pParse->nMem = iKey; + iKey = ++pParse->nMem; + sqlite3ExprCodeGetColumnOfTable(v, pTab, iTabCur, -1, iKey); } if( eOnePass!=ONEPASS_OFF ){ @@ -898,7 +897,6 @@ if( pIdx->pPartIdxWhere ){ *piPartIdxLabel = sqlite3VdbeMakeLabel(v); pParse->iSelfTab = iDataCur + 1; - sqlite3ExprCachePush(pParse); sqlite3ExprIfFalseDup(pParse, pIdx->pPartIdxWhere, *piPartIdxLabel, SQLITE_JUMPIFNULL); pParse->iSelfTab = 0; @@ -945,6 +943,5 @@ void sqlite3ResolvePartIdxLabel(Parse *pParse, int iLabel){ if( iLabel ){ sqlite3VdbeResolveLabel(pParse->pVdbe, iLabel); - sqlite3ExprCachePop(pParse); } } diff -Nru lxd-3.0.2/dist/sqlite/src/expr.c lxd-3.0.3/dist/sqlite/src/expr.c --- lxd-3.0.2/dist/sqlite/src/expr.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/expr.c 2018-11-22 20:54:16.000000000 +0000 @@ -141,14 +141,6 @@ while( p ){ int op = p->op; if( p->flags & EP_Generic ) break; - if( op==TK_CAST || op==TK_UPLUS ){ - p = p->pLeft; - continue; - } - if( op==TK_COLLATE || (op==TK_REGISTER && p->op2==TK_COLLATE) ){ - pColl = sqlite3GetCollSeq(pParse, ENC(db), 0, p->u.zToken); - break; - } if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER || op==TK_TRIGGER) && p->pTab!=0 @@ -162,6 +154,14 @@ } break; } + if( op==TK_CAST || op==TK_UPLUS ){ + p = p->pLeft; + continue; + } + if( op==TK_COLLATE || (op==TK_REGISTER && p->op2==TK_COLLATE) ){ + pColl = sqlite3GetCollSeq(pParse, ENC(db), 0, p->u.zToken); + break; + } if( p->flags & EP_Collate ){ if( p->pLeft && (p->pLeft->flags & EP_Collate)!=0 ){ p = p->pLeft; @@ -581,7 +581,6 @@ Expr *pL, *pR; int r1, r2; assert( i>=0 && i0 ) sqlite3ExprCachePush(pParse); r1 = exprVectorRegister(pParse, pLeft, i, regLeft, &pL, ®Free1); r2 = exprVectorRegister(pParse, pRight, i, regRight, &pR, ®Free2); codeCompare(pParse, pL, pR, opx, r1, r2, dest, p5); @@ -593,7 +592,6 @@ testcase(op==OP_Ne); VdbeCoverageIf(v,op==OP_Ne); sqlite3ReleaseTempReg(pParse, regFree1); sqlite3ReleaseTempReg(pParse, regFree2); - if( i>0 ) sqlite3ExprCachePop(pParse); if( i==nLeft-1 ){ break; } @@ -941,7 +939,12 @@ ** Construct a new expression node for a function with multiple ** arguments. */ -Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){ +Expr *sqlite3ExprFunction( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* Argument list */ + Token *pToken, /* Name of the function */ + int eDistinct /* SF_Distinct or SF_ALL or 0 */ +){ Expr *pNew; sqlite3 *db = pParse->db; assert( pToken ); @@ -950,10 +953,14 @@ sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */ return 0; } + if( pList && pList->nExpr > pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ + sqlite3ErrorMsg(pParse, "too many arguments on function %T", pToken); + } pNew->x.pList = pList; ExprSetProperty(pNew, EP_HasFunc); assert( !ExprHasProperty(pNew, EP_xIsSelect) ); sqlite3ExprSetHeightAndFlags(pParse, pNew); + if( eDistinct==SF_Distinct ) ExprSetProperty(pNew, EP_Distinct); return pNew; } @@ -1063,6 +1070,9 @@ }else{ sqlite3ExprListDelete(db, p->x.pList); } + if( !ExprHasProperty(p, EP_Reduced) ){ + sqlite3WindowDelete(db, p->pWin); + } } if( ExprHasProperty(p, EP_MemToken) ) sqlite3DbFree(db, p->u.zToken); if( !ExprHasProperty(p, EP_Static) ){ @@ -1111,7 +1121,7 @@ ** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size ** (unreduced) Expr objects as they or originally constructed by the parser. ** During expression analysis, extra information is computed and moved into -** later parts of teh Expr object and that extra information might get chopped +** later parts of the Expr object and that extra information might get chopped ** off if the expression is reduced. Note also that it does not work to ** make an EXPRDUP_REDUCE copy of a reduced expression. It is only legal ** to reduce a pristine expression tree from the parser. The implementation @@ -1123,7 +1133,11 @@ assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */ assert( EXPR_FULLSIZE<=0xfff ); assert( (0xfff & (EP_Reduced|EP_TokenOnly))==0 ); - if( 0==flags || p->op==TK_SELECT_COLUMN ){ + if( 0==flags || p->op==TK_SELECT_COLUMN +#ifndef SQLITE_OMIT_WINDOWFUNC + || p->pWin +#endif + ){ nSize = EXPR_FULLSIZE; }else{ assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); @@ -1251,18 +1265,22 @@ } /* Fill in pNew->pLeft and pNew->pRight. */ + zAlloc += dupedExprNodeSize(p, dupFlags); if( ExprHasProperty(pNew, EP_Reduced|EP_TokenOnly) ){ - zAlloc += dupedExprNodeSize(p, dupFlags); if( !ExprHasProperty(pNew, EP_TokenOnly|EP_Leaf) ){ pNew->pLeft = p->pLeft ? exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc) : 0; pNew->pRight = p->pRight ? exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc) : 0; } - if( pzBuffer ){ - *pzBuffer = zAlloc; - } }else{ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(p, EP_Reduced|EP_TokenOnly) ){ + pNew->pWin = 0; + }else{ + pNew->pWin = sqlite3WindowDup(db, pNew, p->pWin); + } +#endif /* SQLITE_OMIT_WINDOWFUNC */ if( !ExprHasProperty(p, EP_TokenOnly|EP_Leaf) ){ if( pNew->op==TK_SELECT_COLUMN ){ pNew->pLeft = p->pLeft; @@ -1274,6 +1292,9 @@ pNew->pRight = sqlite3ExprDup(db, p->pRight, 0); } } + if( pzBuffer ){ + *pzBuffer = zAlloc; + } } return pNew; } @@ -1469,7 +1490,11 @@ pNew->addrOpenEphm[1] = -1; pNew->nSelectRow = p->nSelectRow; pNew->pWith = withDup(db, p->pWith); - sqlite3SelectSetName(pNew, p->zSelName); +#ifndef SQLITE_OMIT_WINDOWFUNC + pNew->pWin = 0; + pNew->pWinDefn = sqlite3WindowListDup(db, p->pWinDefn); +#endif + pNew->selId = p->selId; *pp = pNew; pp = &pNew->pPrior; pNext = pNew; @@ -1641,6 +1666,9 @@ assert( pItem->zName==0 ); pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n); if( dequote ) sqlite3Dequote(pItem->zName); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)pItem->zName, pName); + } } } @@ -1821,6 +1849,9 @@ testcase( pExpr->op==TK_COLUMN ); testcase( pExpr->op==TK_AGG_FUNCTION ); testcase( pExpr->op==TK_AGG_COLUMN ); + if( ExprHasProperty(pExpr, EP_FixedCol) && pWalker->eCode!=2 ){ + return WRC_Continue; + } if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){ return WRC_Continue; } @@ -1876,10 +1907,17 @@ } /* -** Walk an expression tree. Return non-zero if the expression is constant -** that does no originate from the ON or USING clauses of a join. -** Return 0 if it involves variables or function calls or terms from -** an ON or USING clause. +** Walk an expression tree. Return non-zero if +** +** (1) the expression is constant, and +** (2) the expression does originate in the ON or USING clause +** of a LEFT JOIN, and +** (3) the expression does not contain any EP_FixedCol TK_COLUMN +** operands created by the constant propagation optimization. +** +** When this routine returns true, it indicates that the expression +** can be added to the pParse->pConstExpr list and evaluated once when +** the prepared statement starts up. See sqlite3ExprCodeAtInit(). */ int sqlite3ExprIsConstantNotJoin(Expr *p){ return exprIsConst(p, 2, 0); @@ -1909,7 +1947,7 @@ Expr *p = pGroupBy->a[i].pExpr; if( sqlite3ExprCompare(0, pExpr, p, -1)<2 ){ CollSeq *pColl = sqlite3ExprNNCollSeq(pWalker->pParse, p); - if( sqlite3_stricmp("BINARY", pColl->zName)==0 ){ + if( sqlite3IsBinary(pColl) ){ return WRC_Prune; } } @@ -2331,7 +2369,8 @@ sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead); eType = IN_INDEX_ROWID; - + ExplainQueryPlan((pParse, 0, + "USING ROWID SEARCH ON TABLE %s FOR IN-OPERATOR",pTab->zName)); sqlite3VdbeJumpHere(v, iAddr); }else{ Index *pIdx; /* Iterator variable */ @@ -2590,7 +2629,6 @@ int rReg = 0; /* Register storing resulting */ Vdbe *v = sqlite3GetVdbe(pParse); if( NEVER(v==0) ) return 0; - sqlite3ExprCachePush(pParse); /* The evaluation of the IN/EXISTS/SELECT must be repeated every time it ** is encountered if any of the following is true: @@ -2726,7 +2764,6 @@ sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3); }else{ sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1); - sqlite3ExprCacheAffinityChange(pParse, r3, 1); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pExpr->iTable, r2, r3, 1); } } @@ -2807,7 +2844,6 @@ if( jmpIfDynamic>=0 ){ sqlite3VdbeJumpHere(v, jmpIfDynamic); } - sqlite3ExprCachePop(pParse); return rReg; } @@ -2926,7 +2962,6 @@ ** aiMap[] array contains a mapping from the original LHS field order to ** the field order that matches the RHS index. */ - sqlite3ExprCachePush(pParse); rLhsOrig = exprCodeVector(pParse, pLeft, &iDummy); for(i=0; idb, aiMap); @@ -3153,145 +3187,6 @@ } } -/* -** Erase column-cache entry number i -*/ -static void cacheEntryClear(Parse *pParse, int i){ - if( pParse->aColCache[i].tempReg ){ - if( pParse->nTempRegaTempReg) ){ - pParse->aTempReg[pParse->nTempReg++] = pParse->aColCache[i].iReg; - } - } - pParse->nColCache--; - if( inColCache ){ - pParse->aColCache[i] = pParse->aColCache[pParse->nColCache]; - } -} - - -/* -** Record in the column cache that a particular column from a -** particular table is stored in a particular register. -*/ -void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){ - int i; - int minLru; - int idxLru; - struct yColCache *p; - - /* Unless an error has occurred, register numbers are always positive. */ - assert( iReg>0 || pParse->nErr || pParse->db->mallocFailed ); - assert( iCol>=-1 && iCol<32768 ); /* Finite column numbers */ - - /* The SQLITE_ColumnCache flag disables the column cache. This is used - ** for testing only - to verify that SQLite always gets the same answer - ** with and without the column cache. - */ - if( OptimizationDisabled(pParse->db, SQLITE_ColumnCache) ) return; - - /* First replace any existing entry. - ** - ** Actually, the way the column cache is currently used, we are guaranteed - ** that the object will never already be in cache. Verify this guarantee. - */ -#ifndef NDEBUG - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - assert( p->iTable!=iTab || p->iColumn!=iCol ); - } -#endif - - /* If the cache is already full, delete the least recently used entry */ - if( pParse->nColCache>=SQLITE_N_COLCACHE ){ - minLru = 0x7fffffff; - idxLru = -1; - for(i=0, p=pParse->aColCache; ilrulru; - } - } - p = &pParse->aColCache[idxLru]; - }else{ - p = &pParse->aColCache[pParse->nColCache++]; - } - - /* Add the new entry to the end of the cache */ - p->iLevel = pParse->iCacheLevel; - p->iTable = iTab; - p->iColumn = iCol; - p->iReg = iReg; - p->tempReg = 0; - p->lru = pParse->iCacheCnt++; -} - -/* -** Indicate that registers between iReg..iReg+nReg-1 are being overwritten. -** Purge the range of registers from the column cache. -*/ -void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){ - int i = 0; - while( inColCache ){ - struct yColCache *p = &pParse->aColCache[i]; - if( p->iReg >= iReg && p->iReg < iReg+nReg ){ - cacheEntryClear(pParse, i); - }else{ - i++; - } - } -} - -/* -** Remember the current column cache context. Any new entries added -** added to the column cache after this call are removed when the -** corresponding pop occurs. -*/ -void sqlite3ExprCachePush(Parse *pParse){ - pParse->iCacheLevel++; -#ifdef SQLITE_DEBUG - if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ - printf("PUSH to %d\n", pParse->iCacheLevel); - } -#endif -} - -/* -** Remove from the column cache any entries that were added since the -** the previous sqlite3ExprCachePush operation. In other words, restore -** the cache to the state it was in prior the most recent Push. -*/ -void sqlite3ExprCachePop(Parse *pParse){ - int i = 0; - assert( pParse->iCacheLevel>=1 ); - pParse->iCacheLevel--; -#ifdef SQLITE_DEBUG - if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ - printf("POP to %d\n", pParse->iCacheLevel); - } -#endif - while( inColCache ){ - if( pParse->aColCache[i].iLevel>pParse->iCacheLevel ){ - cacheEntryClear(pParse, i); - }else{ - i++; - } - } -} - -/* -** When a cached column is reused, make sure that its register is -** no longer available as a temp register. ticket #3879: that same -** register might be in the cache in multiple places, so be sure to -** get them all. -*/ -static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - if( p->iReg==iReg ){ - p->tempReg = 0; - } - } -} /* Generate code that will load into register regOut a value that is ** appropriate for the iIdxCol-th column of index pIdx. @@ -3347,12 +3242,7 @@ /* ** Generate code that will extract the iColumn-th column from -** table pTab and store the column value in a register. -** -** An effort is made to store the column value in register iReg. This -** is not garanteeed for GetColumn() - the result can be stored in -** any register. But the result is guaranteed to land in register iReg -** for GetColumnToReg(). +** table pTab and store the column value in register iReg. ** ** There must be an open cursor to pTab in iTable when this routine ** is called. If iColumn<0 then code is generated that extracts the rowid. @@ -3366,95 +3256,22 @@ u8 p5 /* P5 value for OP_Column + FLAGS */ ){ Vdbe *v = pParse->pVdbe; - int i; - struct yColCache *p; - - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - if( p->iTable==iTable && p->iColumn==iColumn ){ - p->lru = pParse->iCacheCnt++; - sqlite3ExprCachePinRegister(pParse, p->iReg); - return p->iReg; - } - } assert( v!=0 ); sqlite3ExprCodeGetColumnOfTable(v, pTab, iTable, iColumn, iReg); if( p5 ){ sqlite3VdbeChangeP5(v, p5); - }else{ - sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg); } return iReg; } -void sqlite3ExprCodeGetColumnToReg( - Parse *pParse, /* Parsing and code generating context */ - Table *pTab, /* Description of the table we are reading from */ - int iColumn, /* Index of the table column */ - int iTable, /* The cursor pointing to the table */ - int iReg /* Store results here */ -){ - int r1 = sqlite3ExprCodeGetColumn(pParse, pTab, iColumn, iTable, iReg, 0); - if( r1!=iReg ) sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, r1, iReg); -} - - -/* -** Clear all column cache entries. -*/ -void sqlite3ExprCacheClear(Parse *pParse){ - int i; - -#ifdef SQLITE_DEBUG - if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ - printf("CLEAR\n"); - } -#endif - for(i=0; inColCache; i++){ - if( pParse->aColCache[i].tempReg - && pParse->nTempRegaTempReg) - ){ - pParse->aTempReg[pParse->nTempReg++] = pParse->aColCache[i].iReg; - } - } - pParse->nColCache = 0; -} - -/* -** Record the fact that an affinity change has occurred on iCount -** registers starting with iStart. -*/ -void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){ - sqlite3ExprCacheRemove(pParse, iStart, iCount); -} /* ** Generate code to move content from registers iFrom...iFrom+nReg-1 -** over to iTo..iTo+nReg-1. Keep the column cache up-to-date. +** over to iTo..iTo+nReg-1. */ void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){ assert( iFrom>=iTo+nReg || iFrom+nReg<=iTo ); sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg); - sqlite3ExprCacheRemove(pParse, iFrom, nReg); -} - -#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) -/* -** Return true if any register in the range iFrom..iTo (inclusive) -** is used as part of the column cache. -** -** This routine is used within assert() and testcase() macros only -** and does not appear in a normal build. -*/ -static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - int r = p->iReg; - if( r>=iFrom && r<=iTo ) return 1; /*NO_TEST*/ - } - return 0; } -#endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */ - /* ** Convert a scalar expression node to a TK_REGISTER referencing @@ -3553,6 +3370,28 @@ } case TK_COLUMN: { int iTab = pExpr->iTable; + if( ExprHasProperty(pExpr, EP_FixedCol) ){ + /* This COLUMN expression is really a constant due to WHERE clause + ** constraints, and that constant is coded by the pExpr->pLeft + ** expresssion. However, make sure the constant has the correct + ** datatype by applying the Affinity of the table column to the + ** constant. + */ + int iReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft,target); + int aff = sqlite3TableColumnAffinity(pExpr->pTab, pExpr->iColumn); + if( aff!=SQLITE_AFF_BLOB ){ + static const char zAff[] = "B\000C\000D\000E"; + assert( SQLITE_AFF_BLOB=='A' ); + assert( SQLITE_AFF_TEXT=='B' ); + if( iReg!=target ){ + sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target); + iReg = target; + } + sqlite3VdbeAddOp4(v, OP_Affinity, iReg, 1, 0, + &zAff[(aff-'B')*2], P4_STATIC); + } + return iReg; + } if( iTab<0 ){ if( pParse->iSelfTab<0 ){ /* Generating CHECK constraints or inserting into partial index */ @@ -3633,8 +3472,6 @@ } sqlite3VdbeAddOp2(v, OP_Cast, target, sqlite3AffinityType(pExpr->u.zToken, 0)); - testcase( usedAsColumnCache(pParse, inReg, inReg) ); - sqlite3ExprCacheAffinityChange(pParse, inReg, 1); return inReg; } #endif /* SQLITE_OMIT_CAST */ @@ -3778,6 +3615,12 @@ u8 enc = ENC(db); /* The text encoding used by this database */ CollSeq *pColl = 0; /* A collating sequence */ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) && pExpr->pWin ){ + return pExpr->pWin->regResult; + } +#endif + if( ConstFactorOk(pParse) && sqlite3ExprIsConstantNotJoin(pExpr) ){ /* SQL functions can be expensive. So try to move constant functions ** out of the inner loop, even if that means an extra OP_Copy. */ @@ -3814,10 +3657,7 @@ for(i=1; ia[i].pExpr, target); - sqlite3ExprCachePop(pParse); } sqlite3VdbeResolveLabel(v, endCoalesce); break; @@ -3883,10 +3723,8 @@ } } - sqlite3ExprCachePush(pParse); /* Ticket 2ea2425d34be */ sqlite3ExprCodeExprList(pParse, pFarg, r1, 0, SQLITE_ECEL_DUP|SQLITE_ECEL_FACTOR); - sqlite3ExprCachePop(pParse); /* Ticket 2ea2425d34be */ }else{ r1 = 0; } @@ -3903,7 +3741,7 @@ ** "glob(B,A). We want to use the A in "A glob B" to test ** for function overloading. But we use the B term in "glob(B,A)". */ - if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){ + if( nFarg>=2 && ExprHasProperty(pExpr, EP_InfixFunc) ){ pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr); }else if( nFarg>0 ){ pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr); @@ -4059,9 +3897,7 @@ case TK_IF_NULL_ROW: { int addrINR; addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable); - sqlite3ExprCachePush(pParse); inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); - sqlite3ExprCachePop(pParse); sqlite3VdbeJumpHere(v, addrINR); sqlite3VdbeChangeP3(v, addrINR, inReg); break; @@ -4098,7 +3934,6 @@ Expr opCompare; /* The X==Ei expression */ Expr *pX; /* The X expression */ Expr *pTest = 0; /* X==Ei (form A) or just Ei (form B) */ - VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; ) assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList ); assert(pExpr->x.pList->nExpr > 0); @@ -4122,7 +3957,6 @@ regFree1 = 0; } for(i=0; iop==TK_COLUMN ); sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target); sqlite3VdbeGoto(v, endLabel); - sqlite3ExprCachePop(pParse); sqlite3VdbeResolveLabel(v, nextCase); } if( (nExpr&1)!=0 ){ - sqlite3ExprCachePush(pParse); sqlite3ExprCode(pParse, pEList->a[nExpr-1].pExpr, target); - sqlite3ExprCachePop(pParse); }else{ sqlite3VdbeAddOp2(v, OP_Null, 0, target); } - assert( pParse->db->mallocFailed || pParse->nErr>0 - || pParse->iCacheLevel==iCacheLevel ); sqlite3VdbeResolveLabel(v, endLabel); break; } @@ -4296,7 +4125,7 @@ ** might choose to code the expression at initialization time. */ void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){ - if( pParse->okConstFactor && sqlite3ExprIsConstant(pExpr) ){ + if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pExpr) ){ sqlite3ExprCodeAtInit(pParse, pExpr, target); }else{ sqlite3ExprCode(pParse, pExpr, target); @@ -4378,7 +4207,9 @@ }else{ sqlite3VdbeAddOp2(v, copyOp, j+srcReg-1, target+i); } - }else if( (flags & SQLITE_ECEL_FACTOR)!=0 && sqlite3ExprIsConstant(pExpr) ){ + }else if( (flags & SQLITE_ECEL_FACTOR)!=0 + && sqlite3ExprIsConstantNotJoin(pExpr) + ){ sqlite3ExprCodeAtInit(pParse, pExpr, target+i); }else{ int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); @@ -4504,18 +4335,14 @@ int d2 = sqlite3VdbeMakeLabel(v); testcase( jumpIfNull==0 ); sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL); - sqlite3ExprCachePush(pParse); sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3VdbeResolveLabel(v, d2); - sqlite3ExprCachePop(pParse); break; } case TK_OR: { testcase( jumpIfNull==0 ); sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); - sqlite3ExprCachePush(pParse); sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); - sqlite3ExprCachePop(pParse); break; } case TK_NOT: { @@ -4674,19 +4501,15 @@ case TK_AND: { testcase( jumpIfNull==0 ); sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); - sqlite3ExprCachePush(pParse); sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); - sqlite3ExprCachePop(pParse); break; } case TK_OR: { int d2 = sqlite3VdbeMakeLabel(v); testcase( jumpIfNull==0 ); sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL); - sqlite3ExprCachePush(pParse); sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3VdbeResolveLabel(v, d2); - sqlite3ExprCachePop(pParse); break; } case TK_NOT: { @@ -4908,7 +4731,8 @@ if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2; if( ALWAYS((combinedFlags & EP_TokenOnly)==0) ){ if( combinedFlags & EP_xIsSelect ) return 2; - if( sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2; + if( (combinedFlags & EP_FixedCol)==0 + && sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2; if( sqlite3ExprCompare(pParse, pA->pRight, pB->pRight, iTab) ) return 2; if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList, iTab) ) return 2; assert( (combinedFlags & EP_Reduced)==0 ); @@ -4917,6 +4741,21 @@ if( pA->iTable!=pB->iTable && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2; } +#ifndef SQLITE_OMIT_WINDOWFUNC + /* Justification for the assert(): + ** window functions have p->op==TK_FUNCTION but aggregate functions + ** have p->op==TK_AGG_FUNCTION. So any comparison between an aggregate + ** function and a window function should have failed before reaching + ** this point. And, it is not possible to have a window function and + ** a scalar function with the same name and number of arguments. So + ** if we reach this point, either A and B both window functions or + ** neither are a window functions. */ + assert( (pA->pWin==0)==(pB->pWin==0) ); + + if( pA->pWin!=0 ){ + if( sqlite3WindowCompare(pParse,pA->pWin,pB->pWin)!=0 ) return 2; + } +#endif } return 0; } @@ -5007,18 +4846,15 @@ /* ** This is the Expr node callback for sqlite3ExprImpliesNotNullRow(). ** If the expression node requires that the table at pWalker->iCur -** have a non-NULL column, then set pWalker->eCode to 1 and abort. +** have one or more non-NULL column, then set pWalker->eCode to 1 and abort. +** +** This routine controls an optimization. False positives (setting +** pWalker->eCode to 1 when it should not be) are deadly, but false-negatives +** (never setting pWalker->eCode) is a harmless missed optimization. */ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ - /* This routine is only called for WHERE clause expressions and so it - ** cannot have any TK_AGG_COLUMN entries because those are only found - ** in HAVING clauses. We can get a TK_AGG_FUNCTION in a WHERE clause, - ** but that is an illegal construct and the query will be rejected at - ** a later stage of processing, so the TK_AGG_FUNCTION case does not - ** need to be considered here. */ - assert( pExpr->op!=TK_AGG_COLUMN ); + testcase( pExpr->op==TK_AGG_COLUMN ); testcase( pExpr->op==TK_AGG_FUNCTION ); - if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune; switch( pExpr->op ){ case TK_ISNOT: @@ -5438,21 +5274,9 @@ /* ** Deallocate a register, making available for reuse for some other ** purpose. -** -** If a register is currently being used by the column cache, then -** the deallocation is deferred until the column cache line that uses -** the register becomes stale. */ void sqlite3ReleaseTempReg(Parse *pParse, int iReg){ if( iReg && pParse->nTempRegaTempReg) ){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - if( p->iReg==iReg ){ - p->tempReg = 1; - return; - } - } pParse->aTempReg[pParse->nTempReg++] = iReg; } } @@ -5466,7 +5290,6 @@ i = pParse->iRangeReg; n = pParse->nRangeReg; if( nReg<=n ){ - assert( !usedAsColumnCache(pParse, i, i+n-1) ); pParse->iRangeReg += nReg; pParse->nRangeReg -= nReg; }else{ @@ -5480,7 +5303,6 @@ sqlite3ReleaseTempReg(pParse, iReg); return; } - sqlite3ExprCacheRemove(pParse, iReg, nReg); if( nReg>pParse->nRangeReg ){ pParse->nRangeReg = nReg; pParse->iRangeReg = iReg; diff -Nru lxd-3.0.2/dist/sqlite/src/fkey.c lxd-3.0.3/dist/sqlite/src/fkey.c --- lxd-3.0.2/dist/sqlite/src/fkey.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/fkey.c 2018-11-22 20:54:16.000000000 +0000 @@ -710,11 +710,12 @@ */ void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){ sqlite3 *db = pParse->db; - if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) && !pTab->pSelect ){ + if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) ){ int iSkip = 0; Vdbe *v = sqlite3GetVdbe(pParse); assert( v ); /* VDBE has already been allocated */ + assert( pTab->pSelect==0 ); /* Not a view */ if( sqlite3FkReferences(pTab)==0 ){ /* Search for a deferred foreign key constraint for which this table ** is the child table. If one cannot be found, return without diff -Nru lxd-3.0.2/dist/sqlite/src/func.c lxd-3.0.3/dist/sqlite/src/func.c --- lxd-3.0.2/dist/sqlite/src/func.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/func.c 2018-11-22 20:54:16.000000000 +0000 @@ -1505,7 +1505,7 @@ i64 v = sqlite3_value_int64(argv[0]); p->rSum += v; if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){ - p->overflow = 1; + p->approx = p->overflow = 1; } }else{ p->rSum += sqlite3_value_double(argv[0]); @@ -1513,6 +1513,32 @@ } } } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){ + SumCtx *p; + int type; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + p = sqlite3_aggregate_context(context, sizeof(*p)); + type = sqlite3_value_numeric_type(argv[0]); + /* p is always non-NULL because sumStep() will have been called first + ** to initialize it */ + if( ALWAYS(p) && type!=SQLITE_NULL ){ + assert( p->cnt>0 ); + p->cnt--; + assert( type==SQLITE_INTEGER || p->approx ); + if( type==SQLITE_INTEGER && p->approx==0 ){ + i64 v = sqlite3_value_int64(argv[0]); + p->rSum -= v; + p->iSum -= v; + }else{ + p->rSum -= sqlite3_value_double(argv[0]); + } + } +} +#else +# define sumInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ static void sumFinalize(sqlite3_context *context){ SumCtx *p; p = sqlite3_aggregate_context(context, 0); @@ -1547,6 +1573,9 @@ typedef struct CountCtx CountCtx; struct CountCtx { i64 n; +#ifdef SQLITE_DEBUG + int bInverse; /* True if xInverse() ever called */ +#endif }; /* @@ -1564,7 +1593,7 @@ ** sure it still operates correctly, verify that its count agrees with our ** internal count when using count(*) and when the total count can be ** expressed as a 32-bit integer. */ - assert( argc==1 || p==0 || p->n>0x7fffffff + assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse || p->n==sqlite3_aggregate_count(context) ); #endif } @@ -1573,6 +1602,21 @@ p = sqlite3_aggregate_context(context, 0); sqlite3_result_int64(context, p ? p->n : 0); } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){ + CountCtx *p; + p = sqlite3_aggregate_context(ctx, sizeof(*p)); + /* p is always non-NULL since countStep() will have been called first */ + if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){ + p->n--; +#ifdef SQLITE_DEBUG + p->bInverse = 1; +#endif + } +} +#else +# define countInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ /* ** Routines to implement min() and max() aggregate functions. @@ -1589,7 +1633,7 @@ pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest)); if( !pBest ) return; - if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ + if( sqlite3_value_type(pArg)==SQLITE_NULL ){ if( pBest->flags ) sqlite3SkipAccumulatorLoad(context); }else if( pBest->flags ){ int max; @@ -1615,16 +1659,26 @@ sqlite3VdbeMemCopy(pBest, pArg); } } -static void minMaxFinalize(sqlite3_context *context){ +static void minMaxValueFinalize(sqlite3_context *context, int bValue){ sqlite3_value *pRes; pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0); if( pRes ){ if( pRes->flags ){ sqlite3_result_value(context, pRes); } - sqlite3VdbeMemRelease(pRes); + if( bValue==0 ) sqlite3VdbeMemRelease(pRes); } } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void minMaxValue(sqlite3_context *context){ + minMaxValueFinalize(context, 1); +} +#else +# define minMaxValue 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ +static void minMaxFinalize(sqlite3_context *context){ + minMaxValueFinalize(context, 0); +} /* ** group_concat(EXPR, ?SEPARATOR?) @@ -1661,6 +1715,38 @@ if( zVal ) sqlite3_str_append(pAccum, zVal, nVal); } } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void groupConcatInverse( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int n; + StrAccum *pAccum; + assert( argc==1 || argc==2 ); + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum)); + /* pAccum is always non-NULL since groupConcatStep() will have always + ** run frist to initialize it */ + if( ALWAYS(pAccum) ){ + n = sqlite3_value_bytes(argv[0]); + if( argc==2 ){ + n += sqlite3_value_bytes(argv[1]); + }else{ + n++; + } + if( n>=(int)pAccum->nChar ){ + pAccum->nChar = 0; + }else{ + pAccum->nChar -= n; + memmove(pAccum->zText, &pAccum->zText[n], pAccum->nChar); + } + if( pAccum->nChar==0 ) pAccum->mxAlloc = 0; + } +} +#else +# define groupConcatInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ static void groupConcatFinalize(sqlite3_context *context){ StrAccum *pAccum; pAccum = sqlite3_aggregate_context(context, 0); @@ -1675,6 +1761,24 @@ } } } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void groupConcatValue(sqlite3_context *context){ + sqlite3_str *pAccum; + pAccum = (sqlite3_str*)sqlite3_aggregate_context(context, 0); + if( pAccum ){ + if( pAccum->accError==SQLITE_TOOBIG ){ + sqlite3_result_error_toobig(context); + }else if( pAccum->accError==SQLITE_NOMEM ){ + sqlite3_result_error_nomem(context); + }else{ + const char *zText = sqlite3_str_value(pAccum); + sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT); + } + } +} +#else +# define groupConcatValue 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ /* ** This routine does per-connection function registration. Most @@ -1712,10 +1816,10 @@ }else{ pInfo = (struct compareInfo*)&likeInfoNorm; } - sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0); - sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0); + sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0); + sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0); sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, - (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0); + (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0, 0, 0); setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE); setLikeOptFlag(db, "like", caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE); @@ -1824,11 +1928,11 @@ FUNCTION(trim, 2, 3, 0, trimFunc ), FUNCTION(min, -1, 0, 1, minmaxFunc ), FUNCTION(min, 0, 0, 1, 0 ), - AGGREGATE2(min, 1, 0, 1, minmaxStep, minMaxFinalize, + WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0, SQLITE_FUNC_MINMAX ), FUNCTION(max, -1, 1, 1, minmaxFunc ), FUNCTION(max, 0, 1, 1, 0 ), - AGGREGATE2(max, 1, 1, 1, minmaxStep, minMaxFinalize, + WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0, SQLITE_FUNC_MINMAX ), FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), @@ -1859,14 +1963,17 @@ FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ), FUNCTION(substr, 2, 0, 0, substrFunc ), FUNCTION(substr, 3, 0, 0, substrFunc ), - AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ), - AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ), - AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ), - AGGREGATE2(count, 0, 0, 0, countStep, countFinalize, - SQLITE_FUNC_COUNT ), - AGGREGATE(count, 1, 0, 0, countStep, countFinalize ), - AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize), - AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize), + WAGGREGATE(sum, 1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0), + WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0), + WAGGREGATE(avg, 1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0), + WAGGREGATE(count, 0,0,0, countStep, + countFinalize, countFinalize, countInverse, SQLITE_FUNC_COUNT ), + WAGGREGATE(count, 1,0,0, countStep, + countFinalize, countFinalize, countInverse, 0 ), + WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep, + groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), + WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep, + groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), #ifdef SQLITE_CASE_SENSITIVE_LIKE @@ -1886,6 +1993,7 @@ #ifndef SQLITE_OMIT_ALTERTABLE sqlite3AlterFunctions(); #endif + sqlite3WindowFunctions(); #if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4) sqlite3AnalyzeFunctions(); #endif diff -Nru lxd-3.0.2/dist/sqlite/src/insert.c lxd-3.0.3/dist/sqlite/src/insert.c --- lxd-3.0.2/dist/sqlite/src/insert.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/insert.c 2018-11-22 20:54:16.000000000 +0000 @@ -1179,44 +1179,6 @@ } /* -** An instance of the ConstraintAddr object remembers the byte-code addresses -** for sections of the constraint checks that deal with uniqueness constraints -** on the rowid and on the upsert constraint. -** -** This information is passed into checkReorderConstraintChecks() to insert -** some OP_Goto operations so that the rowid and upsert constraints occur -** in the correct order relative to other constraints. -*/ -typedef struct ConstraintAddr ConstraintAddr; -struct ConstraintAddr { - int ipkTop; /* Subroutine for rowid constraint check */ - int upsertTop; /* Label for upsert constraint check subroutine */ - int upsertTop2; /* Copy of upsertTop not cleared by the call */ - int upsertBtm; /* upsert constraint returns to this label */ - int ipkBtm; /* Return opcode rowid constraint check */ -}; - -/* -** Generate any OP_Goto operations needed to cause constraints to be -** run that haven't already been run. -*/ -static void reorderConstraintChecks(Vdbe *v, ConstraintAddr *p){ - if( p->upsertTop ){ - testcase( sqlite3VdbeLabelHasBeenResolved(v, p->upsertTop) ); - sqlite3VdbeGoto(v, p->upsertTop); - VdbeComment((v, "call upsert subroutine")); - sqlite3VdbeResolveLabel(v, p->upsertBtm); - p->upsertTop = 0; - } - if( p->ipkTop ){ - sqlite3VdbeGoto(v, p->ipkTop); - VdbeComment((v, "call rowid unique-check subroutine")); - sqlite3VdbeJumpHere(v, p->ipkBtm); - p->ipkTop = 0; - } -} - -/* ** Generate code to do constraint checks prior to an INSERT or an UPDATE ** on table pTab. ** @@ -1325,11 +1287,13 @@ int addr1; /* Address of jump instruction */ int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */ int nPkField; /* Number of fields in PRIMARY KEY. 1 for ROWID tables */ - ConstraintAddr sAddr;/* Address information for constraint reordering */ Index *pUpIdx = 0; /* Index to which to apply the upsert */ u8 isUpdate; /* True if this is an UPDATE operation */ u8 bAffinityDone = 0; /* True if the OP_Affinity operation has been run */ int upsertBypass = 0; /* Address of Goto to bypass upsert subroutine */ + int upsertJump = 0; /* Address of Goto that jumps into upsert subroutine */ + int ipkTop = 0; /* Top of the IPK uniqueness check */ + int ipkBottom = 0; /* OP_Goto at the end of the IPK uniqueness check */ isUpdate = regOldData!=0; db = pParse->db; @@ -1337,7 +1301,6 @@ assert( v!=0 ); assert( pTab->pSelect==0 ); /* This table is not a VIEW */ nCol = pTab->nCol; - memset(&sAddr, 0, sizeof(sAddr)); /* pPk is the PRIMARY KEY index for WITHOUT ROWID tables and NULL for ** normal rowid tables. nPkField is the number of key fields in the @@ -1441,8 +1404,8 @@ /* UNIQUE and PRIMARY KEY constraints should be handled in the following ** order: ** - ** (1) OE_Abort, OE_Fail, OE_Rollback, OE_Ignore - ** (2) OE_Update + ** (1) OE_Update + ** (2) OE_Abort, OE_Fail, OE_Rollback, OE_Ignore ** (3) OE_Replace ** ** OE_Fail and OE_Ignore must happen before any changes are made. @@ -1451,6 +1414,11 @@ ** could happen in any order, but they are grouped up front for ** convenience. ** + ** 2018-08-14: Ticket https://www.sqlite.org/src/info/908f001483982c43 + ** The order of constraints used to have OE_Update as (2) and OE_Abort + ** and so forth as (1). But apparently PostgreSQL checks the OE_Update + ** constraint before any others, so it had to be moved. + ** ** Constraint checking code is generated in this order: ** (A) The rowid constraint ** (B) Unique index constraints that do not have OE_Replace as their @@ -1470,11 +1438,10 @@ overrideError = OE_Ignore; pUpsert = 0; }else if( (pUpIdx = pUpsert->pUpsertIdx)!=0 ){ - /* If the constraint-target is on some column other than - ** then ROWID, then we might need to move the UPSERT around - ** so that it occurs in the correct order. */ - sAddr.upsertTop = sAddr.upsertTop2 = sqlite3VdbeMakeLabel(v); - sAddr.upsertBtm = sqlite3VdbeMakeLabel(v); + /* If the constraint-target uniqueness check must be run first. + ** Jump to that uniqueness check now */ + upsertJump = sqlite3VdbeAddOp0(v, OP_Goto); + VdbeComment((v, "UPSERT constraint goes first")); } } @@ -1506,16 +1473,12 @@ ** to defer the running of the rowid conflict checking until after ** the UNIQUE constraints have run. */ - assert( OE_Update>OE_Replace ); - assert( OE_Ignore=OE_Replace - && (pUpsert || onError!=overrideError) - && pTab->pIndex + if( onError==OE_Replace /* IPK rule is REPLACE */ + && onError!=overrideError /* Rules for other contraints are different */ + && pTab->pIndex /* There exist other constraints */ ){ - sAddr.ipkTop = sqlite3VdbeAddOp0(v, OP_Goto)+1; + ipkTop = sqlite3VdbeAddOp0(v, OP_Goto)+1; + VdbeComment((v, "defer IPK REPLACE until last")); } if( isUpdate ){ @@ -1610,9 +1573,9 @@ } } sqlite3VdbeResolveLabel(v, addrRowidOk); - if( sAddr.ipkTop ){ - sAddr.ipkBtm = sqlite3VdbeAddOp0(v, OP_Goto); - sqlite3VdbeJumpHere(v, sAddr.ipkTop-1); + if( ipkTop ){ + ipkBottom = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeJumpHere(v, ipkTop-1); } } @@ -1631,18 +1594,18 @@ if( aRegIdx[ix]==0 ) continue; /* Skip indices that do not change */ if( pUpIdx==pIdx ){ - addrUniqueOk = sAddr.upsertBtm; + addrUniqueOk = upsertJump+1; upsertBypass = sqlite3VdbeGoto(v, 0); VdbeComment((v, "Skip upsert subroutine")); - sqlite3VdbeResolveLabel(v, sAddr.upsertTop2); + sqlite3VdbeJumpHere(v, upsertJump); }else{ addrUniqueOk = sqlite3VdbeMakeLabel(v); } - VdbeNoopComment((v, "uniqueness check for %s", pIdx->zName)); - if( bAffinityDone==0 ){ + if( bAffinityDone==0 && (pUpIdx==0 || pUpIdx==pIdx) ){ sqlite3TableAffinity(v, pTab, regNewData+1); bAffinityDone = 1; } + VdbeNoopComment((v, "uniqueness check for %s", pIdx->zName)); iThisCur = iIdxCur+ix; @@ -1713,15 +1676,6 @@ } } - /* Invoke subroutines to handle IPK replace and upsert prior to running - ** the first REPLACE constraint check. */ - if( onError==OE_Replace ){ - testcase( sAddr.ipkTop ); - testcase( sAddr.upsertTop - && sqlite3VdbeLabelHasBeenResolved(v,sAddr.upsertTop) ); - reorderConstraintChecks(v, &sAddr); - } - /* Collision detection may be omitted if all of the following are true: ** (1) The conflict resolution algorithm is REPLACE ** (2) The table is a WITHOUT ROWID table @@ -1742,7 +1696,6 @@ } /* Check to see if the new index entry will be unique */ - sqlite3ExprCachePush(pParse); sqlite3VdbeVerifyAbortable(v, onError); sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk, regIdx, pIdx->nKeyCol); VdbeCoverage(v); @@ -1844,19 +1797,21 @@ } } if( pUpIdx==pIdx ){ + sqlite3VdbeGoto(v, upsertJump+1); sqlite3VdbeJumpHere(v, upsertBypass); }else{ sqlite3VdbeResolveLabel(v, addrUniqueOk); } - sqlite3ExprCachePop(pParse); if( regR!=regIdx ) sqlite3ReleaseTempRange(pParse, regR, nPkField); + } + /* If the IPK constraint is a REPLACE, run it last */ + if( ipkTop ){ + sqlite3VdbeGoto(v, ipkTop+1); + VdbeComment((v, "Do IPK REPLACE")); + sqlite3VdbeJumpHere(v, ipkBottom); } - testcase( sAddr.ipkTop!=0 ); - testcase( sAddr.upsertTop - && sqlite3VdbeLabelHasBeenResolved(v,sAddr.upsertTop) ); - reorderConstraintChecks(v, &sAddr); - + *pbMayReplace = seenReplace; VdbeModuleComment((v, "END: GenCnstCks(%d)", seenReplace)); } @@ -1952,7 +1907,6 @@ sqlite3SetMakeRecordP5(v, pTab); if( !bAffinityDone ){ sqlite3TableAffinity(v, pTab, 0); - sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol); } if( pParse->nested ){ pik_flags = 0; diff -Nru lxd-3.0.2/dist/sqlite/src/loadext.c lxd-3.0.3/dist/sqlite/src/loadext.c --- lxd-3.0.2/dist/sqlite/src/loadext.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/loadext.c 2018-11-22 20:54:16.000000000 +0000 @@ -449,7 +449,9 @@ sqlite3_str_reset, sqlite3_str_errcode, sqlite3_str_length, - sqlite3_str_value + sqlite3_str_value, + /* Version 3.25.0 and later */ + sqlite3_create_window_function }; /* diff -Nru lxd-3.0.2/dist/sqlite/src/main.c lxd-3.0.3/dist/sqlite/src/main.c --- lxd-3.0.2/dist/sqlite/src/main.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/main.c 2018-11-22 20:54:16.000000000 +0000 @@ -849,7 +849,7 @@ db->flags &= ~aFlagOp[i].mask; } if( oldFlags!=db->flags ){ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); } if( pRes ){ *pRes = (db->flags & aFlagOp[i].mask)!=0; @@ -911,6 +911,15 @@ } /* +** Return true if CollSeq is the default built-in BINARY. +*/ +int sqlite3IsBinary(const CollSeq *p){ + assert( p==0 || p->xCmp!=binCollFunc || p->pUser!=0 + || strcmp(p->zName,"BINARY")==0 ); + return p==0 || (p->xCmp==binCollFunc && p->pUser==0); +} + +/* ** Another built-in collating sequence: NOCASE. ** ** This collating sequence is intended to be used for "case independent @@ -1031,7 +1040,7 @@ sqlite3BtreeEnterAll(db); for(i=0; inDb; i++){ Schema *pSchema = db->aDb[i].pSchema; - if( db->aDb[i].pSchema ){ + if( pSchema ){ for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){ Table *pTab = (Table *)sqliteHashData(p); if( IsVirtual(pTab) ) sqlite3VtabDisconnect(db, pTab); @@ -1291,8 +1300,8 @@ sqlite3VtabRollback(db); sqlite3EndBenignMalloc(); - if( (db->mDbFlags&DBFLAG_SchemaChange)!=0 && db->init.busy==0 ){ - sqlite3ExpirePreparedStatements(db); + if( schemaChange ){ + sqlite3ExpirePreparedStatements(db, 0); sqlite3ResetAllSchemasOfConnection(db); } sqlite3BtreeLeaveAll(db); @@ -1320,6 +1329,7 @@ switch( rc ){ case SQLITE_OK: zName = "SQLITE_OK"; break; case SQLITE_ERROR: zName = "SQLITE_ERROR"; break; + case SQLITE_ERROR_SNAPSHOT: zName = "SQLITE_ERROR_SNAPSHOT"; break; case SQLITE_INTERNAL: zName = "SQLITE_INTERNAL"; break; case SQLITE_PERM: zName = "SQLITE_PERM"; break; case SQLITE_ABORT: zName = "SQLITE_ABORT"; break; @@ -1683,6 +1693,8 @@ void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), void (*xStep)(sqlite3_context*,int,sqlite3_value **), void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value **), FuncDestructor *pDestructor ){ FuncDef *p; @@ -1690,12 +1702,14 @@ int extraFlags; assert( sqlite3_mutex_held(db->mutex) ); - if( zFunctionName==0 || - (xSFunc && (xFinal || xStep)) || - (!xSFunc && (xFinal && !xStep)) || - (!xSFunc && (!xFinal && xStep)) || - (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) || - (255<(nName = sqlite3Strlen30( zFunctionName))) ){ + assert( xValue==0 || xSFunc==0 ); + if( zFunctionName==0 /* Must have a valid name */ + || (xSFunc!=0 && xFinal!=0) /* Not both xSFunc and xFinal */ + || ((xFinal==0)!=(xStep==0)) /* Both or neither of xFinal and xStep */ + || ((xValue==0)!=(xInverse==0)) /* Both or neither of xValue, xInverse */ + || (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) + || (255<(nName = sqlite3Strlen30( zFunctionName))) + ){ return SQLITE_MISUSE_BKPT; } @@ -1716,10 +1730,10 @@ }else if( enc==SQLITE_ANY ){ int rc; rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8|extraFlags, - pUserData, xSFunc, xStep, xFinal, pDestructor); + pUserData, xSFunc, xStep, xFinal, xValue, xInverse, pDestructor); if( rc==SQLITE_OK ){ rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE|extraFlags, - pUserData, xSFunc, xStep, xFinal, pDestructor); + pUserData, xSFunc, xStep, xFinal, xValue, xInverse, pDestructor); } if( rc!=SQLITE_OK ){ return rc; @@ -1736,14 +1750,14 @@ ** operation to continue but invalidate all precompiled statements. */ p = sqlite3FindFunction(db, zFunctionName, nArg, (u8)enc, 0); - if( p && (p->funcFlags & SQLITE_FUNC_ENCMASK)==enc && p->nArg==nArg ){ + if( p && (p->funcFlags & SQLITE_FUNC_ENCMASK)==(u32)enc && p->nArg==nArg ){ if( db->nVdbeActive ){ sqlite3ErrorWithMsg(db, SQLITE_BUSY, "unable to delete/modify user-function due to active statements"); assert( !db->mallocFailed ); return SQLITE_BUSY; }else{ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); } } @@ -1765,38 +1779,32 @@ testcase( p->funcFlags & SQLITE_DETERMINISTIC ); p->xSFunc = xSFunc ? xSFunc : xStep; p->xFinalize = xFinal; + p->xValue = xValue; + p->xInverse = xInverse; p->pUserData = pUserData; p->nArg = (u16)nArg; return SQLITE_OK; } /* -** Create new user functions. +** Worker function used by utf-8 APIs that create new functions: +** +** sqlite3_create_function() +** sqlite3_create_function_v2() +** sqlite3_create_window_function() */ -int sqlite3_create_function( - sqlite3 *db, - const char *zFunc, - int nArg, - int enc, - void *p, - void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), - void (*xStep)(sqlite3_context*,int,sqlite3_value **), - void (*xFinal)(sqlite3_context*) -){ - return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xSFunc, xStep, - xFinal, 0); -} - -int sqlite3_create_function_v2( +static int createFunctionApi( sqlite3 *db, const char *zFunc, int nArg, int enc, void *p, - void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), - void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xSFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*), - void (*xDestroy)(void *) + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*) ){ int rc = SQLITE_ERROR; FuncDestructor *pArg = 0; @@ -1818,7 +1826,9 @@ pArg->xDestroy = xDestroy; pArg->pUserData = p; } - rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xSFunc, xStep, xFinal, pArg); + rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, + xSFunc, xStep, xFinal, xValue, xInverse, pArg + ); if( pArg && pArg->nRef==0 ){ assert( rc!=SQLITE_OK ); xDestroy(p); @@ -1831,6 +1841,52 @@ return rc; } +/* +** Create new user functions. +*/ +int sqlite3_create_function( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, xSFunc, xStep, + xFinal, 0, 0, 0); +} +int sqlite3_create_function_v2( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + void (*xDestroy)(void *) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, xSFunc, xStep, + xFinal, 0, 0, xDestroy); +} +int sqlite3_create_window_function( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value **), + void (*xDestroy)(void *) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, 0, xStep, + xFinal, xValue, xInverse, xDestroy); +} + #ifndef SQLITE_OMIT_UTF16 int sqlite3_create_function16( sqlite3 *db, @@ -1851,7 +1907,7 @@ sqlite3_mutex_enter(db->mutex); assert( !db->mallocFailed ); zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE); - rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xSFunc,xStep,xFinal,0); + rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xSFunc,xStep,xFinal,0,0,0); sqlite3DbFree(db, zFunc8); rc = sqlite3ApiExit(db, rc); sqlite3_mutex_leave(db->mutex); @@ -2880,7 +2936,7 @@ "unable to delete/modify collation sequence due to active statements"); return SQLITE_BUSY; } - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); /* If collation sequence pColl was created directly by a call to ** sqlite3_create_collation, and not generated by synthCollSeq(), @@ -3369,6 +3425,7 @@ db->nDb = 2; db->magic = SQLITE_MAGIC_BUSY; db->aDb = db->aDbStatic; + db->lookaside.bDisable = 1; assert( sizeof(db->aLimit)==sizeof(aHardLimit) ); memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit)); @@ -4069,6 +4126,9 @@ }else if( op==SQLITE_FCNTL_JOURNAL_POINTER ){ *(sqlite3_file**)pArg = sqlite3PagerJrnlFile(pPager); rc = SQLITE_OK; + }else if( op==SQLITE_FCNTL_DATA_VERSION ){ + *(unsigned int*)pArg = sqlite3PagerDataVersion(pPager); + rc = SQLITE_OK; }else{ rc = sqlite3OsFileControl(fd, op, pArg); } @@ -4332,7 +4392,8 @@ */ case SQLITE_TESTCTRL_VDBE_COVERAGE: { #ifdef SQLITE_VDBE_COVERAGE - typedef void (*branch_callback)(void*,int,u8,u8); + typedef void (*branch_callback)(void*,unsigned int, + unsigned char,unsigned char); sqlite3GlobalConfig.xVdbeBranch = va_arg(ap,branch_callback); sqlite3GlobalConfig.pVdbeBranchArg = va_arg(ap,void*); #endif @@ -4519,7 +4580,7 @@ if( iDb==0 || iDb>1 ){ Btree *pBt = db->aDb[iDb].pBt; if( 0==sqlite3BtreeIsInTrans(pBt) ){ - rc = sqlite3BtreeBeginTrans(pBt, 0); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); if( rc==SQLITE_OK ){ rc = sqlite3PagerSnapshotGet(sqlite3BtreePager(pBt), ppSnapshot); } @@ -4554,11 +4615,29 @@ iDb = sqlite3FindDbName(db, zDb); if( iDb==0 || iDb>1 ){ Btree *pBt = db->aDb[iDb].pBt; - if( 0==sqlite3BtreeIsInReadTrans(pBt) ){ - rc = sqlite3PagerSnapshotOpen(sqlite3BtreePager(pBt), pSnapshot); + if( sqlite3BtreeIsInTrans(pBt)==0 ){ + Pager *pPager = sqlite3BtreePager(pBt); + int bUnlock = 0; + if( sqlite3BtreeIsInReadTrans(pBt) ){ + if( db->nVdbeActive==0 ){ + rc = sqlite3PagerSnapshotCheck(pPager, pSnapshot); + if( rc==SQLITE_OK ){ + bUnlock = 1; + rc = sqlite3BtreeCommit(pBt); + } + } + }else{ + rc = SQLITE_OK; + } + if( rc==SQLITE_OK ){ + rc = sqlite3PagerSnapshotOpen(pPager, pSnapshot); + } if( rc==SQLITE_OK ){ - rc = sqlite3BtreeBeginTrans(pBt, 0); - sqlite3PagerSnapshotOpen(sqlite3BtreePager(pBt), 0); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); + sqlite3PagerSnapshotOpen(pPager, 0); + } + if( bUnlock ){ + sqlite3PagerSnapshotUnlock(pPager); } } } @@ -4589,7 +4668,7 @@ if( iDb==0 || iDb>1 ){ Btree *pBt = db->aDb[iDb].pBt; if( 0==sqlite3BtreeIsInReadTrans(pBt) ){ - rc = sqlite3BtreeBeginTrans(pBt, 0); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); if( rc==SQLITE_OK ){ rc = sqlite3PagerSnapshotRecover(sqlite3BtreePager(pBt)); sqlite3BtreeCommit(pBt); diff -Nru lxd-3.0.2/dist/sqlite/src/memdb.c lxd-3.0.3/dist/sqlite/src/memdb.c --- lxd-3.0.2/dist/sqlite/src/memdb.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/memdb.c 2018-11-22 20:54:16.000000000 +0000 @@ -16,8 +16,8 @@ ** This file also implements interface sqlite3_serialize() and ** sqlite3_deserialize(). */ -#ifdef SQLITE_ENABLE_DESERIALIZE #include "sqliteInt.h" +#ifdef SQLITE_ENABLE_DESERIALIZE /* ** Forward declaration of objects used by this utility diff -Nru lxd-3.0.2/dist/sqlite/src/os.c lxd-3.0.3/dist/sqlite/src/os.c --- lxd-3.0.2/dist/sqlite/src/os.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/os.c 2018-11-22 20:54:16.000000000 +0000 @@ -410,9 +410,12 @@ ** Unregister a VFS so that it is no longer accessible. */ int sqlite3_vfs_unregister(sqlite3_vfs *pVfs){ -#if SQLITE_THREADSAFE - sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); + MUTEX_LOGIC(sqlite3_mutex *mutex;) +#ifndef SQLITE_OMIT_AUTOINIT + int rc = sqlite3_initialize(); + if( rc ) return rc; #endif + MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); ) sqlite3_mutex_enter(mutex); vfsUnlink(pVfs); sqlite3_mutex_leave(mutex); diff -Nru lxd-3.0.2/dist/sqlite/src/os_unix.c lxd-3.0.3/dist/sqlite/src/os_unix.c --- lxd-3.0.2/dist/sqlite/src/os_unix.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/os_unix.c 2018-11-22 20:54:16.000000000 +0000 @@ -521,7 +521,11 @@ #define osLstat ((int(*)(const char*,struct stat*))aSyscall[27].pCurrent) #if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE) +# ifdef __ANDROID__ + { "ioctl", (sqlite3_syscall_ptr)(int(*)(int, int, ...))ioctl, 0 }, +# else { "ioctl", (sqlite3_syscall_ptr)ioctl, 0 }, +# endif #else { "ioctl", (sqlite3_syscall_ptr)0, 0 }, #endif @@ -702,12 +706,25 @@ ** unixEnterMutex() ** assert( unixMutexHeld() ); ** unixEnterLeave() +** +** To prevent deadlock, the global unixBigLock must must be acquired +** before the unixInodeInfo.pLockMutex mutex, if both are held. It is +** OK to get the pLockMutex without holding unixBigLock first, but if +** that happens, the unixBigLock mutex must not be acquired until after +** pLockMutex is released. +** +** OK: enter(unixBigLock), enter(pLockInfo) +** OK: enter(unixBigLock) +** OK: enter(pLockInfo) +** ERROR: enter(pLockInfo), enter(unixBigLock) */ static sqlite3_mutex *unixBigLock = 0; static void unixEnterMutex(void){ + assert( sqlite3_mutex_notheld(unixBigLock) ); /* Not a recursive mutex */ sqlite3_mutex_enter(unixBigLock); } static void unixLeaveMutex(void){ + assert( sqlite3_mutex_held(unixBigLock) ); sqlite3_mutex_leave(unixBigLock); } #ifdef SQLITE_DEBUG @@ -1108,16 +1125,34 @@ ** A single inode can have multiple file descriptors, so each unixFile ** structure contains a pointer to an instance of this object and this ** object keeps a count of the number of unixFile pointing to it. +** +** Mutex rules: +** +** (1) Only the pLockMutex mutex must be held in order to read or write +** any of the locking fields: +** nShared, nLock, eFileLock, bProcessLock, pUnused +** +** (2) When nRef>0, then the following fields are unchanging and can +** be read (but not written) without holding any mutex: +** fileId, pLockMutex +** +** (3) With the exceptions above, all the fields may only be read +** or written while holding the global unixBigLock mutex. +** +** Deadlock prevention: The global unixBigLock mutex may not +** be acquired while holding the pLockMutex mutex. If both unixBigLock +** and pLockMutex are needed, then unixBigLock must be acquired first. */ struct unixInodeInfo { struct unixFileId fileId; /* The lookup key */ - int nShared; /* Number of SHARED locks held */ - unsigned char eFileLock; /* One of SHARED_LOCK, RESERVED_LOCK etc. */ - unsigned char bProcessLock; /* An exclusive process lock is held */ + sqlite3_mutex *pLockMutex; /* Hold this mutex for... */ + int nShared; /* Number of SHARED locks held */ + int nLock; /* Number of outstanding file locks */ + unsigned char eFileLock; /* One of SHARED_LOCK, RESERVED_LOCK etc. */ + unsigned char bProcessLock; /* An exclusive process lock is held */ + UnixUnusedFd *pUnused; /* Unused file descriptors to close */ int nRef; /* Number of pointers to this structure */ unixShmNode *pShmNode; /* Shared memory associated with this inode */ - int nLock; /* Number of outstanding file locks */ - UnixUnusedFd *pUnused; /* Unused file descriptors to close */ unixInodeInfo *pNext; /* List of all unixInodeInfo objects */ unixInodeInfo *pPrev; /* .... doubly linked */ #if SQLITE_ENABLE_LOCKING_STYLE @@ -1133,7 +1168,21 @@ ** A lists of all unixInodeInfo objects. */ static unixInodeInfo *inodeList = 0; /* All unixInodeInfo objects */ -static unsigned int nUnusedFd = 0; /* Total unused file descriptors */ + +#ifdef SQLITE_DEBUG +/* +** True if the inode mutex is held, or not. Used only within assert() +** to help verify correct mutex usage. +*/ +int unixFileMutexHeld(unixFile *pFile){ + assert( pFile->pInode ); + return sqlite3_mutex_held(pFile->pInode->pLockMutex); +} +int unixFileMutexNotheld(unixFile *pFile){ + assert( pFile->pInode ); + return sqlite3_mutex_notheld(pFile->pInode->pLockMutex); +} +#endif /* ** @@ -1239,11 +1288,11 @@ unixInodeInfo *pInode = pFile->pInode; UnixUnusedFd *p; UnixUnusedFd *pNext; + assert( unixFileMutexHeld(pFile) ); for(p=pInode->pUnused; p; p=pNext){ pNext = p->pNext; robust_close(pFile, p->fd, __LINE__); sqlite3_free(p); - nUnusedFd--; } pInode->pUnused = 0; } @@ -1257,11 +1306,14 @@ static void releaseInodeInfo(unixFile *pFile){ unixInodeInfo *pInode = pFile->pInode; assert( unixMutexHeld() ); + assert( unixFileMutexNotheld(pFile) ); if( ALWAYS(pInode) ){ pInode->nRef--; if( pInode->nRef==0 ){ assert( pInode->pShmNode==0 ); + sqlite3_mutex_enter(pInode->pLockMutex); closePendingFds(pFile); + sqlite3_mutex_leave(pInode->pLockMutex); if( pInode->pPrev ){ assert( pInode->pPrev->pNext==pInode ); pInode->pPrev->pNext = pInode->pNext; @@ -1273,10 +1325,10 @@ assert( pInode->pNext->pPrev==pInode ); pInode->pNext->pPrev = pInode->pPrev; } + sqlite3_mutex_free(pInode->pLockMutex); sqlite3_free(pInode); } } - assert( inodeList!=0 || nUnusedFd==0 ); } /* @@ -1346,7 +1398,6 @@ #else fileId.ino = (u64)statbuf.st_ino; #endif - assert( inodeList!=0 || nUnusedFd==0 ); pInode = inodeList; while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){ pInode = pInode->pNext; @@ -1358,6 +1409,13 @@ } memset(pInode, 0, sizeof(*pInode)); memcpy(&pInode->fileId, &fileId, sizeof(fileId)); + if( sqlite3GlobalConfig.bCoreMutex ){ + pInode->pLockMutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pInode->pLockMutex==0 ){ + sqlite3_free(pInode); + return SQLITE_NOMEM_BKPT; + } + } pInode->nRef = 1; pInode->pNext = inodeList; pInode->pPrev = 0; @@ -1436,7 +1494,7 @@ assert( pFile ); assert( pFile->eFileLock<=SHARED_LOCK ); - unixEnterMutex(); /* Because pFile->pInode is shared across threads */ + sqlite3_mutex_enter(pFile->pInode->pLockMutex); /* Check if a thread in this process holds such a lock */ if( pFile->pInode->eFileLock>SHARED_LOCK ){ @@ -1461,7 +1519,7 @@ } #endif - unixLeaveMutex(); + sqlite3_mutex_leave(pFile->pInode->pLockMutex); OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved)); *pResOut = reserved; @@ -1527,8 +1585,8 @@ static int unixFileLock(unixFile *pFile, struct flock *pLock){ int rc; unixInodeInfo *pInode = pFile->pInode; - assert( unixMutexHeld() ); assert( pInode!=0 ); + assert( sqlite3_mutex_held(pInode->pLockMutex) ); if( (pFile->ctrlFlags & (UNIXFILE_EXCL|UNIXFILE_RDONLY))==UNIXFILE_EXCL ){ if( pInode->bProcessLock==0 ){ struct flock lock; @@ -1647,8 +1705,8 @@ /* This mutex is needed because pFile->pInode is shared across threads */ - unixEnterMutex(); pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); /* If some thread using this PID has a lock via a different unixFile* ** handle that precludes the requested lock, return BUSY. @@ -1791,7 +1849,7 @@ } end_lock: - unixLeaveMutex(); + sqlite3_mutex_leave(pInode->pLockMutex); OSTRACE(("LOCK %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock), rc==SQLITE_OK ? "ok" : "failed")); return rc; @@ -1804,11 +1862,11 @@ static void setPendingFd(unixFile *pFile){ unixInodeInfo *pInode = pFile->pInode; UnixUnusedFd *p = pFile->pPreallocatedUnused; + assert( unixFileMutexHeld(pFile) ); p->pNext = pInode->pUnused; pInode->pUnused = p; pFile->h = -1; pFile->pPreallocatedUnused = 0; - nUnusedFd++; } /* @@ -1839,8 +1897,8 @@ if( pFile->eFileLock<=eFileLock ){ return SQLITE_OK; } - unixEnterMutex(); pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); assert( pInode->nShared!=0 ); if( pFile->eFileLock>SHARED_LOCK ){ assert( pInode->eFileLock==pFile->eFileLock ); @@ -1966,14 +2024,14 @@ */ pInode->nLock--; assert( pInode->nLock>=0 ); - if( pInode->nLock==0 ){ - closePendingFds(pFile); - } + if( pInode->nLock==0 ) closePendingFds(pFile); } end_unlock: - unixLeaveMutex(); - if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock; + sqlite3_mutex_leave(pInode->pLockMutex); + if( rc==SQLITE_OK ){ + pFile->eFileLock = eFileLock; + } return rc; } @@ -2044,15 +2102,20 @@ static int unixClose(sqlite3_file *id){ int rc = SQLITE_OK; unixFile *pFile = (unixFile *)id; + unixInodeInfo *pInode = pFile->pInode; + + assert( pInode!=0 ); verifyDbFile(pFile); unixUnlock(id, NO_LOCK); + assert( unixFileMutexNotheld(pFile) ); unixEnterMutex(); /* unixFile.pInode is always valid here. Otherwise, a different close ** routine (e.g. nolockClose()) would be called instead. */ assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 ); - if( ALWAYS(pFile->pInode) && pFile->pInode->nLock ){ + sqlite3_mutex_enter(pInode->pLockMutex); + if( pInode->nLock ){ /* If there are outstanding locks, do not actually close the file just ** yet because that would clear those locks. Instead, add the file ** descriptor to pInode->pUnused list. It will be automatically closed @@ -2060,6 +2123,7 @@ */ setPendingFd(pFile); } + sqlite3_mutex_leave(pInode->pLockMutex); releaseInodeInfo(pFile); rc = closeUnixFile(id); unixLeaveMutex(); @@ -2657,6 +2721,7 @@ unixFile *pFile = (unixFile*)id; semXUnlock(id, NO_LOCK); assert( pFile ); + assert( unixFileMutexNotheld(pFile) ); unixEnterMutex(); releaseInodeInfo(pFile); unixLeaveMutex(); @@ -2771,8 +2836,7 @@ *pResOut = 1; return SQLITE_OK; } - unixEnterMutex(); /* Because pFile->pInode is shared across threads */ - + sqlite3_mutex_enter(pFile->pInode->pLockMutex); /* Check if a thread in this process holds such a lock */ if( pFile->pInode->eFileLock>SHARED_LOCK ){ reserved = 1; @@ -2796,7 +2860,7 @@ } } - unixLeaveMutex(); + sqlite3_mutex_leave(pFile->pInode->pLockMutex); OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved)); *pResOut = reserved; @@ -2859,8 +2923,8 @@ /* This mutex is needed because pFile->pInode is shared across threads */ - unixEnterMutex(); pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); /* If some thread using this PID has a lock via a different unixFile* ** handle that precludes the requested lock, return BUSY. @@ -2996,7 +3060,7 @@ } afp_end_lock: - unixLeaveMutex(); + sqlite3_mutex_leave(pInode->pLockMutex); OSTRACE(("LOCK %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock), rc==SQLITE_OK ? "ok" : "failed")); return rc; @@ -3028,8 +3092,8 @@ if( pFile->eFileLock<=eFileLock ){ return SQLITE_OK; } - unixEnterMutex(); pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); assert( pInode->nShared!=0 ); if( pFile->eFileLock>SHARED_LOCK ){ assert( pInode->eFileLock==pFile->eFileLock ); @@ -3098,14 +3162,14 @@ if( rc==SQLITE_OK ){ pInode->nLock--; assert( pInode->nLock>=0 ); - if( pInode->nLock==0 ){ - closePendingFds(pFile); - } + if( pInode->nLock==0 ) closePendingFds(pFile); } } - unixLeaveMutex(); - if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock; + sqlite3_mutex_leave(pInode->pLockMutex); + if( rc==SQLITE_OK ){ + pFile->eFileLock = eFileLock; + } return rc; } @@ -3117,14 +3181,20 @@ unixFile *pFile = (unixFile*)id; assert( id!=0 ); afpUnlock(id, NO_LOCK); + assert( unixFileMutexNotheld(pFile) ); unixEnterMutex(); - if( pFile->pInode && pFile->pInode->nLock ){ - /* If there are outstanding locks, do not actually close the file just - ** yet because that would clear those locks. Instead, add the file - ** descriptor to pInode->aPending. It will be automatically closed when - ** the last lock is cleared. - */ - setPendingFd(pFile); + if( pFile->pInode ){ + unixInodeInfo *pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); + if( pInode->nLock ){ + /* If there are outstanding locks, do not actually close the file just + ** yet because that would clear those locks. Instead, add the file + ** descriptor to pInode->aPending. It will be automatically closed when + ** the last lock is cleared. + */ + setPendingFd(pFile); + } + sqlite3_mutex_leave(pInode->pLockMutex); } releaseInodeInfo(pFile); sqlite3_free(pFile->lockingContext); @@ -4430,6 +4500,7 @@ /* Check to see if a unixShmNode object already exists. Reuse an existing ** one if present. Create a new one if necessary. */ + assert( unixFileMutexNotheld(pDbFd) ); unixEnterMutex(); pInode = pDbFd->pInode; pShmNode = pInode->pShmNode; @@ -4812,6 +4883,9 @@ ){ UNUSED_PARAMETER(fd); sqlite3MemoryBarrier(); /* compiler-defined memory barrier */ + assert( fd->pMethods->xLock==nolockLock + || unixFileMutexNotheld((unixFile*)fd) + ); unixEnterMutex(); /* Also mutex, for redundancy */ unixLeaveMutex(); } @@ -4853,6 +4927,7 @@ /* If pShmNode->nRef has reached 0, then close the underlying ** shared-memory file, too */ + assert( unixFileMutexNotheld(pDbFd) ); unixEnterMutex(); assert( pShmNode->nRef>0 ); pShmNode->nRef--; @@ -5179,7 +5254,7 @@ IOMETHODS( nolockIoFinder, /* Finder function name */ nolockIoMethods, /* sqlite3_io_methods object name */ - 3, /* shared memory is disabled */ + 3, /* shared memory and mmap are enabled */ nolockClose, /* xClose method */ nolockLock, /* xLock method */ nolockUnlock, /* xUnlock method */ @@ -5675,7 +5750,7 @@ ** ** Even if a subsequent open() call does succeed, the consequences of ** not searching for a reusable file descriptor are not dire. */ - if( nUnusedFd>0 && 0==osStat(zPath, &sStat) ){ + if( inodeList!=0 && 0==osStat(zPath, &sStat) ){ unixInodeInfo *pInode; pInode = inodeList; @@ -5685,12 +5760,14 @@ } if( pInode ){ UnixUnusedFd **pp; + assert( sqlite3_mutex_notheld(pInode->pLockMutex) ); + sqlite3_mutex_enter(pInode->pLockMutex); for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext)); pUnused = *pp; if( pUnused ){ - nUnusedFd--; *pp = pUnused->pNext; } + sqlite3_mutex_leave(pInode->pLockMutex); } } unixLeaveMutex(); diff -Nru lxd-3.0.2/dist/sqlite/src/os_win.c lxd-3.0.3/dist/sqlite/src/os_win.c --- lxd-3.0.2/dist/sqlite/src/os_win.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/os_win.c 2018-11-22 20:54:16.000000000 +0000 @@ -2904,6 +2904,9 @@ winFile *pFile = (winFile*)id; /* File handle object */ int rc = SQLITE_OK; /* Return code for this function */ DWORD lastErrno; +#if SQLITE_MAX_MMAP_SIZE>0 + sqlite3_int64 oldMmapSize; +#endif assert( pFile ); SimulateIOError(return SQLITE_IOERR_TRUNCATE); @@ -2919,6 +2922,15 @@ nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; } +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->pMapRegion ){ + oldMmapSize = pFile->mmapSize; + }else{ + oldMmapSize = 0; + } + winUnmapfile(pFile); +#endif + /* SetEndOfFile() returns non-zero when successful, or zero when it fails. */ if( winSeekFile(pFile, nByte) ){ rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno, @@ -2931,12 +2943,12 @@ } #if SQLITE_MAX_MMAP_SIZE>0 - /* If the file was truncated to a size smaller than the currently - ** mapped region, reduce the effective mapping size as well. SQLite will - ** use read() and write() to access data beyond this point from now on. - */ - if( pFile->pMapRegion && nBytemmapSize ){ - pFile->mmapSize = nByte; + if( rc==SQLITE_OK && oldMmapSize>0 ){ + if( oldMmapSize>nByte ){ + winMapfile(pFile, -1); + }else{ + winMapfile(pFile, oldMmapSize); + } } #endif diff -Nru lxd-3.0.2/dist/sqlite/src/pager.c lxd-3.0.3/dist/sqlite/src/pager.c --- lxd-3.0.2/dist/sqlite/src/pager.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/pager.c 2018-11-22 20:54:16.000000000 +0000 @@ -1002,8 +1002,12 @@ ** to "print *pPager" in gdb: ** ** (gdb) printf "%s", print_pager_state(pPager) +** +** This routine has external linkage in order to suppress compiler warnings +** about an unused function. It is enclosed within SQLITE_DEBUG and so does +** not appear in normal builds. */ -static char *print_pager_state(Pager *p){ +char *print_pager_state(Pager *p){ static char zRet[1024]; sqlite3_snprintf(1024, zRet, @@ -1769,7 +1773,6 @@ ** Return the pPager->iDataVersion value */ u32 sqlite3PagerDataVersion(Pager *pPager){ - assert( pPager->eState>PAGER_OPEN ); return pPager->iDataVersion; } @@ -6495,9 +6498,10 @@ ** backup in progress needs to be restarted. */ sqlite3BackupRestart(pPager->pBackup); }else{ + PgHdr *pList; if( pagerUseWal(pPager) ){ - PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache); PgHdr *pPageOne = 0; + pList = sqlite3PcacheDirtyList(pPager->pPCache); if( pList==0 ){ /* Must have at least one page for the WAL commit flag. ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */ @@ -6518,14 +6522,14 @@ ** should be used. No rollback journal is created if batch-atomic-write ** is enabled. */ - sqlite3_file *fd = pPager->fd; #ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE - const int bBatch = zMaster==0 /* An SQLITE_IOCAP_BATCH_ATOMIC commit */ + sqlite3_file *fd = pPager->fd; + int bBatch = zMaster==0 /* An SQLITE_IOCAP_BATCH_ATOMIC commit */ && (sqlite3OsDeviceCharacteristics(fd) & SQLITE_IOCAP_BATCH_ATOMIC) && !pPager->noSync && sqlite3JournalIsInMemory(pPager->jfd); #else -# define bBatch 0 +# define bBatch 0 #endif #ifdef SQLITE_ENABLE_ATOMIC_WRITE @@ -6577,15 +6581,16 @@ } } } -#else +#else /* SQLITE_ENABLE_ATOMIC_WRITE */ #ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE if( zMaster ){ rc = sqlite3JournalCreate(pPager->jfd); if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + assert( bBatch==0 ); } #endif rc = pager_incr_changecounter(pPager, 0); -#endif +#endif /* !SQLITE_ENABLE_ATOMIC_WRITE */ if( rc!=SQLITE_OK ) goto commit_phase_one_exit; /* Write the master journal name into the journal file. If a master @@ -6609,24 +6614,36 @@ rc = syncJournal(pPager, 0); if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + pList = sqlite3PcacheDirtyList(pPager->pPCache); +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE if( bBatch ){ - /* The pager is now in DBMOD state. But regardless of what happens - ** next, attempting to play the journal back into the database would - ** be unsafe. Close it now to make sure that does not happen. */ - sqlite3OsClose(pPager->jfd); rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, 0); - if( rc!=SQLITE_OK ) goto commit_phase_one_exit; - } - rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache)); - if( bBatch ){ if( rc==SQLITE_OK ){ - rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); + rc = pager_write_pagelist(pPager, pList); + if( rc==SQLITE_OK ){ + rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); + } + if( rc!=SQLITE_OK ){ + sqlite3OsFileControlHint(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0); + } } - if( rc!=SQLITE_OK ){ - sqlite3OsFileControlHint(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0); + + if( (rc&0xFF)==SQLITE_IOERR && rc!=SQLITE_IOERR_NOMEM ){ + rc = sqlite3JournalCreate(pPager->jfd); + if( rc!=SQLITE_OK ){ + sqlite3OsClose(pPager->jfd); + goto commit_phase_one_exit; + } + bBatch = 0; + }else{ + sqlite3OsClose(pPager->jfd); } } +#endif /* SQLITE_ENABLE_BATCH_ATOMIC_WRITE */ + if( bBatch==0 ){ + rc = pager_write_pagelist(pPager, pList); + } if( rc!=SQLITE_OK ){ assert( rc!=SQLITE_IOERR_BLOCKED ); goto commit_phase_one_exit; @@ -7378,13 +7395,6 @@ int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){ u8 eOld = pPager->journalMode; /* Prior journalmode */ -#ifdef SQLITE_DEBUG - /* The print_pager_state() routine is intended to be used by the debugger - ** only. We invoke it once here to suppress a compiler warning. */ - print_pager_state(pPager); -#endif - - /* The eMode parameter is always valid */ assert( eMode==PAGER_JOURNALMODE_DELETE || eMode==PAGER_JOURNALMODE_TRUNCATE @@ -7753,6 +7763,38 @@ } return rc; } + +/* +** The caller currently has a read transaction open on the database. +** If this is not a WAL database, SQLITE_ERROR is returned. Otherwise, +** this function takes a SHARED lock on the CHECKPOINTER slot and then +** checks if the snapshot passed as the second argument is still +** available. If so, SQLITE_OK is returned. +** +** If the snapshot is not available, SQLITE_ERROR is returned. Or, if +** the CHECKPOINTER lock cannot be obtained, SQLITE_BUSY. If any error +** occurs (any value other than SQLITE_OK is returned), the CHECKPOINTER +** lock is released before returning. +*/ +int sqlite3PagerSnapshotCheck(Pager *pPager, sqlite3_snapshot *pSnapshot){ + int rc; + if( pPager->pWal ){ + rc = sqlite3WalSnapshotCheck(pPager->pWal, pSnapshot); + }else{ + rc = SQLITE_ERROR; + } + return rc; +} + +/* +** Release a lock obtained by an earlier successful call to +** sqlite3PagerSnapshotCheck(). +*/ +void sqlite3PagerSnapshotUnlock(Pager *pPager){ + assert( pPager->pWal ); + return sqlite3WalSnapshotUnlock(pPager->pWal); +} + #endif /* SQLITE_ENABLE_SNAPSHOT */ #ifdef SQLITE_ENABLE_WAL_REPLICATION diff -Nru lxd-3.0.2/dist/sqlite/src/pager.h lxd-3.0.3/dist/sqlite/src/pager.h --- lxd-3.0.2/dist/sqlite/src/pager.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/pager.h 2018-11-22 20:54:16.000000000 +0000 @@ -186,6 +186,8 @@ int sqlite3PagerSnapshotGet(Pager *pPager, sqlite3_snapshot **ppSnapshot); int sqlite3PagerSnapshotOpen(Pager *pPager, sqlite3_snapshot *pSnapshot); int sqlite3PagerSnapshotRecover(Pager *pPager); + int sqlite3PagerSnapshotCheck(Pager *pPager, sqlite3_snapshot *pSnapshot); + void sqlite3PagerSnapshotUnlock(Pager *pPager); # endif #ifdef SQLITE_ENABLE_WAL_REPLICATION int sqlite3PagerWalReplicationGet(Pager*, int*, sqlite3_wal_replication**); diff -Nru lxd-3.0.2/dist/sqlite/src/parse.y lxd-3.0.3/dist/sqlite/src/parse.y --- lxd-3.0.2/dist/sqlite/src/parse.y 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/parse.y 2018-11-22 20:54:16.000000000 +0000 @@ -99,6 +99,8 @@ */ struct TrigEvent { int a; IdList * b; }; +struct FrameBound { int eType; Expr *pExpr; }; + /* ** Disable lookaside memory allocation for objects that might be ** shared across database connections. @@ -209,11 +211,14 @@ CONFLICT DATABASE DEFERRED DESC DETACH DO EACH END EXCLUSIVE EXPLAIN FAIL FOR IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN - QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW + QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW ROWS ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT %ifdef SQLITE_OMIT_COMPOUND_SELECT EXCEPT INTERSECT UNION %endif SQLITE_OMIT_COMPOUND_SELECT +%ifndef SQLITE_OMIT_WINDOWFUNC + CURRENT FOLLOWING PARTITION PRECEDING RANGE UNBOUNDED +%endif SQLITE_OMIT_WINDOWFUNC REINDEX RENAME CTIME_KW IF . %wildcard ANY. @@ -320,7 +325,7 @@ sqlite3ExprIdToTrueFalse(p); testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) ); } - sqlite3AddDefaultValue(pParse,p,X.z,X.z+X.n); + sqlite3AddDefaultValue(pParse,p,X.z,X.z+X.n); } // In addition to the type name, we also care about the primary key and @@ -526,36 +531,26 @@ multiselect_op(A) ::= UNION ALL. {A = TK_ALL;} multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP; /*A-overwrites-OP*/} %endif SQLITE_OMIT_COMPOUND_SELECT -oneselect(A) ::= SELECT(S) distinct(D) selcollist(W) from(X) where_opt(Y) - groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). { -#if SELECTTRACE_ENABLED - Token s = S; /*A-overwrites-S*/ -#endif + +oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y) + groupby_opt(P) having_opt(Q) + orderby_opt(Z) limit_opt(L). { A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L); -#if SELECTTRACE_ENABLED - /* Populate the Select.zSelName[] string that is used to help with - ** query planner debugging, to differentiate between multiple Select - ** objects in a complex query. - ** - ** If the SELECT keyword is immediately followed by a C-style comment - ** then extract the first few alphanumeric characters from within that - ** comment to be the zSelName value. Otherwise, the label is #N where - ** is an integer that is incremented with each SELECT statement seen. - */ - if( A!=0 ){ - const char *z = s.z+6; - int i; - sqlite3_snprintf(sizeof(A->zSelName), A->zSelName,"#%d",++pParse->nSelect); - while( z[0]==' ' ) z++; - if( z[0]=='/' && z[1]=='*' ){ - z += 2; - while( z[0]==' ' ) z++; - for(i=0; sqlite3Isalnum(z[i]); i++){} - sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "%.*s", i, z); - } +} +%ifndef SQLITE_OMIT_WINDOWFUNC +oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y) + groupby_opt(P) having_opt(Q) window_clause(R) + orderby_opt(Z) limit_opt(L). { + A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L); + if( A ){ + A->pWinDefn = R; + }else{ + sqlite3WindowListDelete(pParse->db, R); } -#endif /* SELECTRACE_ENABLED */ } +%endif + + oneselect(A) ::= values(A). %type values {Select*} @@ -563,7 +558,7 @@ values(A) ::= VALUES LP nexprlist(X) RP. { A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0); } -values(A) ::= values(A) COMMA LP exprlist(Y) RP. { +values(A) ::= values(A) COMMA LP nexprlist(Y) RP. { Select *pRight, *pLeft = A; pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0); if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue; @@ -688,10 +683,14 @@ %type fullname {SrcList*} %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);} -fullname(A) ::= nm(X). - {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/} -fullname(A) ::= nm(X) DOT nm(Y). - {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/} +fullname(A) ::= nm(X). { + A = sqlite3SrcListAppend(pParse->db,0,&X,0); + if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &X); +} +fullname(A) ::= nm(X) DOT nm(Y). { + A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); + if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &Y); +} %type xfullname {SrcList*} %destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);} @@ -913,9 +912,9 @@ idlist_opt(A) ::= . {A = 0;} idlist_opt(A) ::= LP idlist(X) RP. {A = X;} idlist(A) ::= idlist(A) COMMA nm(Y). - {A = sqlite3IdListAppend(pParse->db,A,&Y);} + {A = sqlite3IdListAppend(pParse,A,&Y);} idlist(A) ::= nm(Y). - {A = sqlite3IdListAppend(pParse->db,0,&Y); /*A-overwrites-Y*/} + {A = sqlite3IdListAppend(pParse,0,&Y); /*A-overwrites-Y*/} /////////////////////////// Expression Processing ///////////////////////////// // @@ -934,10 +933,21 @@ static Expr *tokenExpr(Parse *pParse, int op, Token t){ Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1); if( p ){ - memset(p, 0, sizeof(Expr)); + /* memset(p, 0, sizeof(Expr)); */ p->op = (u8)op; + p->affinity = 0; p->flags = EP_Leaf; p->iAgg = -1; + p->pLeft = p->pRight = 0; + p->x.pList = 0; + p->pAggInfo = 0; + p->pTab = 0; + p->op2 = 0; + p->iTable = 0; + p->iColumn = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + p->pWin = 0; +#endif p->u.zToken = (char*)&p[1]; memcpy(p->u.zToken, t.z, t.n); p->u.zToken[t.n] = 0; @@ -948,9 +958,13 @@ #if SQLITE_MAX_EXPR_DEPTH>0 p->nHeight = 1; #endif + if( IN_RENAME_OBJECT ){ + return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t); + } } return p; } + } expr(A) ::= term(A). @@ -960,6 +974,10 @@ expr(A) ::= nm(X) DOT nm(Y). { Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1); Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)temp2, &Y); + sqlite3RenameTokenMap(pParse, (void*)temp1, &X); + } A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); } expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). { @@ -967,6 +985,10 @@ Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1); Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &Z, 1); Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)temp3, &Z); + sqlite3RenameTokenMap(pParse, (void*)temp2, &Y); + } A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); } term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/} @@ -1003,20 +1025,28 @@ sqlite3ExprAttachSubtrees(pParse->db, A, E, 0); } %endif SQLITE_OMIT_CAST + + expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP. { - if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ - sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X); - } - A = sqlite3ExprFunction(pParse, Y, &X); - if( D==SF_Distinct && A ){ - A->flags |= EP_Distinct; - } + A = sqlite3ExprFunction(pParse, Y, &X, D); } expr(A) ::= id(X) LP STAR RP. { - A = sqlite3ExprFunction(pParse, 0, &X); + A = sqlite3ExprFunction(pParse, 0, &X, 0); +} + +%ifndef SQLITE_OMIT_WINDOWFUNC +expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP over_clause(Z). { + A = sqlite3ExprFunction(pParse, Y, &X, D); + sqlite3WindowAttach(pParse, A, Z); } +expr(A) ::= id(X) LP STAR RP over_clause(Z). { + A = sqlite3ExprFunction(pParse, 0, &X, 0); + sqlite3WindowAttach(pParse, A, Z); +} +%endif + term(A) ::= CTIME_KW(OP). { - A = sqlite3ExprFunction(pParse, 0, &OP); + A = sqlite3ExprFunction(pParse, 0, &OP, 0); } expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. { @@ -1050,7 +1080,7 @@ OP.n &= 0x7fffffff; pList = sqlite3ExprListAppend(pParse,0, Y); pList = sqlite3ExprListAppend(pParse,pList, A); - A = sqlite3ExprFunction(pParse, pList, &OP); + A = sqlite3ExprFunction(pParse, pList, &OP, 0); if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); if( A ) A->flags |= EP_InfixFunc; } @@ -1061,7 +1091,7 @@ pList = sqlite3ExprListAppend(pParse,0, Y); pList = sqlite3ExprListAppend(pParse,pList, A); pList = sqlite3ExprListAppend(pParse,pList, E); - A = sqlite3ExprFunction(pParse, pList, &OP); + A = sqlite3ExprFunction(pParse, pList, &OP, 0); if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); if( A ) A->flags |= EP_InfixFunc; } @@ -1074,7 +1104,7 @@ ** unary TK_ISNULL or TK_NOTNULL expression. */ static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){ sqlite3 *db = pParse->db; - if( pA && pY && pY->op==TK_NULL ){ + if( pA && pY && pY->op==TK_NULL && !IN_RENAME_OBJECT ){ pA->op = (u8)op; sqlite3ExprDelete(db, pA->pRight); pA->pRight = 0; @@ -1101,10 +1131,10 @@ {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/} expr(A) ::= BITNOT(B) expr(X). {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/} -expr(A) ::= MINUS expr(X). [BITNOT] - {A = sqlite3PExpr(pParse, TK_UMINUS, X, 0);} -expr(A) ::= PLUS expr(X). [BITNOT] - {A = sqlite3PExpr(pParse, TK_UPLUS, X, 0);} +expr(A) ::= PLUS|MINUS(B) expr(X). [BITNOT] { + A = sqlite3PExpr(pParse, @B==TK_PLUS ? TK_UPLUS : TK_UMINUS, X, 0); + /*A-overwrites-B*/ +} %type between_op {int} between_op(A) ::= BETWEEN. {A = 0;} @@ -1257,6 +1287,9 @@ sqlite3CreateIndex(pParse, &X, &D, sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U, &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF); + if( IN_RENAME_OBJECT && pParse->pNewIndex ){ + sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &Y); + } } %type uniqueflag {int} @@ -1442,16 +1475,16 @@ // UPDATE trigger_cmd(A) ::= UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z) scanpt(E). - {A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R, B.z, E);} + {A = sqlite3TriggerUpdateStep(pParse, &X, Y, Z, R, B.z, E);} // INSERT trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). { - A = sqlite3TriggerInsertStep(pParse->db,&X,F,S,R,U,B,Z);/*A-overwrites-R*/ + A = sqlite3TriggerInsertStep(pParse,&X,F,S,R,U,B,Z);/*A-overwrites-R*/ } // DELETE trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E). - {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y, B.z, E);} + {A = sqlite3TriggerDeleteStep(pParse, &X, Y, B.z, E);} // SELECT trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E). @@ -1529,8 +1562,13 @@ disableLookaside(pParse); sqlite3AlterBeginAddColumn(pParse, X); } +cmd ::= ALTER TABLE fullname(X) RENAME kwcolumn_opt nm(Y) TO nm(Z). { + sqlite3AlterRenameColumn(pParse, X, &Y, &Z); +} + kwcolumn_opt ::= . kwcolumn_opt ::= COLUMNKW. + %endif SQLITE_OMIT_ALTERTABLE //////////////////////// CREATE VIRTUAL TABLE ... ///////////////////////////// @@ -1570,3 +1608,108 @@ A = sqlite3WithAdd(pParse, A, &X, Y, Z); } %endif SQLITE_OMIT_CTE + +//////////////////////// WINDOW FUNCTION EXPRESSIONS ///////////////////////// +// These must be at the end of this file. Specifically, the rules that +// introduce tokens WINDOW, OVER and FILTER must appear last. This causes +// the integer values assigned to these tokens to be larger than all other +// tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL. +// +%ifndef SQLITE_OMIT_WINDOWFUNC +%type windowdefn_list {Window*} +%destructor windowdefn_list {sqlite3WindowListDelete(pParse->db, $$);} +windowdefn_list(A) ::= windowdefn(Z). { A = Z; } +windowdefn_list(A) ::= windowdefn_list(Y) COMMA windowdefn(Z). { + assert( Z!=0 ); + Z->pNextWin = Y; + A = Z; +} + +%type windowdefn {Window*} +%destructor windowdefn {sqlite3WindowDelete(pParse->db, $$);} +windowdefn(A) ::= nm(X) AS window(Y). { + if( ALWAYS(Y) ){ + Y->zName = sqlite3DbStrNDup(pParse->db, X.z, X.n); + } + A = Y; +} + +%type window {Window*} +%destructor window {sqlite3WindowDelete(pParse->db, $$);} + +%type frame_opt {Window*} +%destructor frame_opt {sqlite3WindowDelete(pParse->db, $$);} + +%type part_opt {ExprList*} +%destructor part_opt {sqlite3ExprListDelete(pParse->db, $$);} + +%type filter_opt {Expr*} +%destructor filter_opt {sqlite3ExprDelete(pParse->db, $$);} + +%type range_or_rows {int} + +%type frame_bound {struct FrameBound} +%destructor frame_bound {sqlite3ExprDelete(pParse->db, $$.pExpr);} +%type frame_bound_s {struct FrameBound} +%destructor frame_bound_s {sqlite3ExprDelete(pParse->db, $$.pExpr);} +%type frame_bound_e {struct FrameBound} +%destructor frame_bound_e {sqlite3ExprDelete(pParse->db, $$.pExpr);} + +window(A) ::= LP part_opt(X) orderby_opt(Y) frame_opt(Z) RP. { + A = Z; + if( ALWAYS(A) ){ + A->pPartition = X; + A->pOrderBy = Y; + } +} + +part_opt(A) ::= PARTITION BY nexprlist(X). { A = X; } +part_opt(A) ::= . { A = 0; } + +frame_opt(A) ::= . { + A = sqlite3WindowAlloc(pParse, TK_RANGE, TK_UNBOUNDED, 0, TK_CURRENT, 0); +} +frame_opt(A) ::= range_or_rows(X) frame_bound_s(Y). { + A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, TK_CURRENT, 0); +} +frame_opt(A) ::= range_or_rows(X) BETWEEN frame_bound_s(Y) AND frame_bound_e(Z). { + A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, Z.eType, Z.pExpr); +} + +range_or_rows(A) ::= RANGE. { A = TK_RANGE; } +range_or_rows(A) ::= ROWS. { A = TK_ROWS; } + + +frame_bound_s(A) ::= frame_bound(X). { A = X; } +frame_bound_s(A) ::= UNBOUNDED PRECEDING. {A.eType = TK_UNBOUNDED; A.pExpr = 0;} +frame_bound_e(A) ::= frame_bound(X). { A = X; } +frame_bound_e(A) ::= UNBOUNDED FOLLOWING. {A.eType = TK_UNBOUNDED; A.pExpr = 0;} + +frame_bound(A) ::= expr(X) PRECEDING. { A.eType = TK_PRECEDING; A.pExpr = X; } +frame_bound(A) ::= CURRENT ROW. { A.eType = TK_CURRENT ; A.pExpr = 0; } +frame_bound(A) ::= expr(X) FOLLOWING. { A.eType = TK_FOLLOWING; A.pExpr = X; } + +%type window_clause {Window*} +%destructor window_clause {sqlite3WindowListDelete(pParse->db, $$);} +window_clause(A) ::= WINDOW windowdefn_list(B). { A = B; } + +%type over_clause {Window*} +%destructor over_clause {sqlite3WindowDelete(pParse->db, $$);} +over_clause(A) ::= filter_opt(W) OVER window(Z). { + A = Z; + assert( A!=0 ); + A->pFilter = W; +} +over_clause(A) ::= filter_opt(W) OVER nm(Z). { + A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( A ){ + A->zName = sqlite3DbStrNDup(pParse->db, Z.z, Z.n); + A->pFilter = W; + }else{ + sqlite3ExprDelete(pParse->db, W); + } +} + +filter_opt(A) ::= . { A = 0; } +filter_opt(A) ::= FILTER LP WHERE expr(X) RP. { A = X; } +%endif /* SQLITE_OMIT_WINDOWFUNC */ diff -Nru lxd-3.0.2/dist/sqlite/src/pragma.c lxd-3.0.3/dist/sqlite/src/pragma.c --- lxd-3.0.2/dist/sqlite/src/pragma.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/pragma.c 2018-11-22 20:54:16.000000000 +0000 @@ -1550,7 +1550,6 @@ if( pTab->tnum<1 ) continue; /* Skip VIEWs or VIRTUAL TABLEs */ pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); - sqlite3ExprCacheClear(pParse); sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0, 1, 0, &iDataCur, &iIdxCur); /* reg[7] counts the number of entries in the table. @@ -1564,6 +1563,11 @@ assert( sqlite3NoTempsInRange(pParse,1,7+j) ); sqlite3VdbeAddOp2(v, OP_Rewind, iDataCur, 0); VdbeCoverage(v); loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1); + if( !isQuick ){ + /* Sanity check on record header decoding */ + sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nCol-1, 3); + sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); + } /* Verify that all NOT NULL columns really are NOT NULL */ for(j=0; jnCol; j++){ char *zErr; @@ -1588,7 +1592,6 @@ char *zErr; int k; pParse->iSelfTab = iDataCur + 1; - sqlite3ExprCachePush(pParse); for(k=pCheck->nExpr-1; k>0; k--){ sqlite3ExprIfFalse(pParse, pCheck->a[k].pExpr, addrCkFault, 0); } @@ -1601,14 +1604,10 @@ sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); integrityCheckResultRow(v); sqlite3VdbeResolveLabel(v, addrCkOk); - sqlite3ExprCachePop(pParse); } sqlite3ExprListDelete(db, pCheck); } if( !isQuick ){ /* Omit the remaining tests for quick_check */ - /* Sanity check on record header decoding */ - sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nCol-1, 3); - sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); /* Validate index entries for the current row */ for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ int jmp2, jmp3, jmp4, jmp5; @@ -2223,7 +2222,6 @@ } if( i==0 ){ sqlite3_str_appendf(&acc, "(\"%s\"", pPragma->zName); - cSep = ','; i++; } j = 0; diff -Nru lxd-3.0.2/dist/sqlite/src/pragma.h lxd-3.0.3/dist/sqlite/src/pragma.h --- lxd-3.0.2/dist/sqlite/src/pragma.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/pragma.h 2018-11-22 20:54:16.000000000 +0000 @@ -393,6 +393,11 @@ /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "legacy_alter_table", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_LegacyAlter }, {/* zName: */ "legacy_file_format", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, @@ -646,4 +651,4 @@ /* iArg: */ SQLITE_WriteSchema }, #endif }; -/* Number of pragmas: 60 on by default, 77 total. */ +/* Number of pragmas: 61 on by default, 78 total. */ diff -Nru lxd-3.0.2/dist/sqlite/src/prepare.c lxd-3.0.3/dist/sqlite/src/prepare.c --- lxd-3.0.2/dist/sqlite/src/prepare.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/prepare.c 2018-11-22 20:54:16.000000000 +0000 @@ -25,15 +25,23 @@ const char *zExtra /* Error information */ ){ sqlite3 *db = pData->db; - if( !db->mallocFailed && (db->flags & SQLITE_WriteSchema)==0 ){ + if( db->mallocFailed ){ + pData->rc = SQLITE_NOMEM_BKPT; + }else if( pData->pzErrMsg[0]!=0 ){ + /* A error message has already been generated. Do not overwrite it */ + }else if( pData->mInitFlags & INITFLAG_AlterTable ){ + *pData->pzErrMsg = sqlite3DbStrDup(db, zExtra); + pData->rc = SQLITE_ERROR; + }else if( db->flags & SQLITE_WriteSchema ){ + pData->rc = SQLITE_CORRUPT_BKPT; + }else{ char *z; if( zObj==0 ) zObj = "?"; z = sqlite3MPrintf(db, "malformed database schema (%s)", zObj); if( zExtra && zExtra[0] ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra); - sqlite3DbFree(db, *pData->pzErrMsg); *pData->pzErrMsg = z; + pData->rc = SQLITE_CORRUPT_BKPT; } - pData->rc = db->mallocFailed ? SQLITE_NOMEM_BKPT : SQLITE_CORRUPT_BKPT; } /* @@ -85,7 +93,7 @@ rc = db->errCode; assert( (rc&0xFF)==(rcp&0xFF) ); db->init.iDb = saved_iDb; - assert( saved_iDb==0 || (db->mDbFlags & DBFLAG_Vacuum)!=0 ); + /* assert( saved_iDb==0 || (db->mDbFlags & DBFLAG_Vacuum)!=0 ); */ if( SQLITE_OK!=rc ){ if( db->init.orphanTrigger ){ assert( iDb==1 ); @@ -132,7 +140,7 @@ ** auxiliary databases. Return one of the SQLITE_ error codes to ** indicate success or failure. */ -static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ +int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg, u32 mFlags){ int rc; int i; #ifndef SQLITE_OMIT_DEPRECATED @@ -167,6 +175,7 @@ initData.iDb = iDb; initData.rc = SQLITE_OK; initData.pzErrMsg = pzErrMsg; + initData.mInitFlags = mFlags; sqlite3InitCallback(&initData, 3, (char **)azArg, 0); if( initData.rc ){ rc = initData.rc; @@ -188,7 +197,7 @@ ** will be closed before this function returns. */ sqlite3BtreeEnter(pDb->pBt); if( !sqlite3BtreeIsInReadTrans(pDb->pBt) ){ - rc = sqlite3BtreeBeginTrans(pDb->pBt, 0); + rc = sqlite3BtreeBeginTrans(pDb->pBt, 0, 0); if( rc!=SQLITE_OK ){ sqlite3SetString(pzErrMsg, db, sqlite3ErrStr(rc)); goto initone_error_out; @@ -373,14 +382,14 @@ assert( db->nDb>0 ); /* Do the main schema first */ if( !DbHasProperty(db, 0, DB_SchemaLoaded) ){ - rc = sqlite3InitOne(db, 0, pzErrMsg); + rc = sqlite3InitOne(db, 0, pzErrMsg, 0); if( rc ) return rc; } /* All other schemas after the main schema. The "temp" schema must be last */ for(i=db->nDb-1; i>0; i--){ assert( i==1 || sqlite3BtreeHoldsMutex(db->aDb[i].pBt) ); if( !DbHasProperty(db, i, DB_SchemaLoaded) ){ - rc = sqlite3InitOne(db, i, pzErrMsg); + rc = sqlite3InitOne(db, i, pzErrMsg, 0); if( rc ) return rc; } } @@ -433,7 +442,7 @@ ** on the b-tree database, open one now. If a transaction is opened, it ** will be closed immediately after reading the meta-value. */ if( !sqlite3BtreeIsInReadTrans(pBt) ){ - rc = sqlite3BtreeBeginTrans(pBt, 0); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ sqlite3OomFault(db); } diff -Nru lxd-3.0.2/dist/sqlite/src/printf.c lxd-3.0.3/dist/sqlite/src/printf.c --- lxd-3.0.2/dist/sqlite/src/printf.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/printf.c 2018-11-22 20:54:16.000000000 +0000 @@ -686,7 +686,12 @@ if( bufpt==0 ){ bufpt = ""; }else if( xtype==etDYNSTRING ){ - if( pAccum->nChar==0 && pAccum->mxAlloc && width==0 && precision<0 ){ + if( pAccum->nChar==0 + && pAccum->mxAlloc + && width==0 + && precision<0 + && pAccum->accError==0 + ){ /* Special optimization for sqlite3_mprintf("%z..."): ** Extend an existing memory allocation rather than creating ** a new one. */ diff -Nru lxd-3.0.2/dist/sqlite/src/resolve.c lxd-3.0.3/dist/sqlite/src/resolve.c --- lxd-3.0.2/dist/sqlite/src/resolve.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/resolve.c 2018-11-22 20:54:16.000000000 +0000 @@ -264,6 +264,9 @@ if( sqlite3StrICmp(zTabName, zTab)!=0 ){ continue; } + if( IN_RENAME_OBJECT && pItem->zAlias ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)&pExpr->pTab); + } } if( 0==(cntTab++) ){ pMatch = pItem; @@ -349,9 +352,15 @@ #ifndef SQLITE_OMIT_UPSERT if( pExpr->iTable==2 ){ testcase( iCol==(-1) ); - pExpr->iTable = pNC->uNC.pUpsert->regData + iCol; - eNewExprOp = TK_REGISTER; - ExprSetProperty(pExpr, EP_Alias); + if( IN_RENAME_OBJECT ){ + pExpr->iColumn = iCol; + pExpr->pTab = pTab; + eNewExprOp = TK_COLUMN; + }else{ + pExpr->iTable = pNC->uNC.pUpsert->regData + iCol; + eNewExprOp = TK_REGISTER; + ExprSetProperty(pExpr, EP_Alias); + } }else #endif /* SQLITE_OMIT_UPSERT */ { @@ -436,6 +445,9 @@ cnt = 1; pMatch = 0; assert( zTab==0 && zDb==0 ); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pExpr); + } goto lookupname_end; } } @@ -663,17 +675,24 @@ zTable = 0; zColumn = pExpr->u.zToken; }else{ + Expr *pLeft = pExpr->pLeft; notValid(pParse, pNC, "the \".\" operator", NC_IdxExpr); pRight = pExpr->pRight; if( pRight->op==TK_ID ){ zDb = 0; - zTable = pExpr->pLeft->u.zToken; - zColumn = pRight->u.zToken; }else{ assert( pRight->op==TK_DOT ); - zDb = pExpr->pLeft->u.zToken; - zTable = pRight->pLeft->u.zToken; - zColumn = pRight->pRight->u.zToken; + zDb = pLeft->u.zToken; + pLeft = pRight->pLeft; + pRight = pRight->pRight; + } + zTable = pLeft->u.zToken; + zColumn = pRight->u.zToken; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, (void*)pExpr, (void*)pRight); + } + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, (void*)&pExpr->pTab, (void*)pLeft); } } return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr); @@ -756,40 +775,95 @@ NC_IdxExpr|NC_PartIdx); } } - if( is_agg && (pNC->ncFlags & NC_AllowAgg)==0 ){ - sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId); - pNC->nErr++; - is_agg = 0; - }else if( no_such_func && pParse->db->init.busy==0 + + if( 0==IN_RENAME_OBJECT ){ +#ifndef SQLITE_OMIT_WINDOWFUNC + assert( is_agg==0 || (pDef->funcFlags & SQLITE_FUNC_MINMAX) + || (pDef->xValue==0 && pDef->xInverse==0) + || (pDef->xValue && pDef->xInverse && pDef->xSFunc && pDef->xFinalize) + ); + if( pDef && pDef->xValue==0 && pExpr->pWin ){ + sqlite3ErrorMsg(pParse, + "%.*s() may not be used as a window function", nId, zId + ); + pNC->nErr++; + }else if( + (is_agg && (pNC->ncFlags & NC_AllowAgg)==0) + || (is_agg && (pDef->funcFlags & SQLITE_FUNC_WINDOW) && !pExpr->pWin) + || (is_agg && pExpr->pWin && (pNC->ncFlags & NC_AllowWin)==0) + ){ + const char *zType; + if( (pDef->funcFlags & SQLITE_FUNC_WINDOW) || pExpr->pWin ){ + zType = "window"; + }else{ + zType = "aggregate"; + } + sqlite3ErrorMsg(pParse, "misuse of %s function %.*s()",zType,nId,zId); + pNC->nErr++; + is_agg = 0; + } +#else + if( (is_agg && (pNC->ncFlags & NC_AllowAgg)==0) ){ + sqlite3ErrorMsg(pParse,"misuse of aggregate function %.*s()",nId,zId); + pNC->nErr++; + is_agg = 0; + } +#endif + else if( no_such_func && pParse->db->init.busy==0 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION - && pParse->explain==0 + && pParse->explain==0 #endif - ){ - sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId); - pNC->nErr++; - }else if( wrong_num_args ){ - sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()", - nId, zId); - pNC->nErr++; + ){ + sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId); + pNC->nErr++; + }else if( wrong_num_args ){ + sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()", + nId, zId); + pNC->nErr++; + } + if( is_agg ){ +#ifndef SQLITE_OMIT_WINDOWFUNC + pNC->ncFlags &= ~(pExpr->pWin ? NC_AllowWin : NC_AllowAgg); +#else + pNC->ncFlags &= ~NC_AllowAgg; +#endif + } } - if( is_agg ) pNC->ncFlags &= ~NC_AllowAgg; sqlite3WalkExprList(pWalker, pList); if( is_agg ){ - NameContext *pNC2 = pNC; - pExpr->op = TK_AGG_FUNCTION; - pExpr->op2 = 0; - while( pNC2 && !sqlite3FunctionUsesThisSrc(pExpr, pNC2->pSrcList) ){ - pExpr->op2++; - pNC2 = pNC2->pNext; - } - assert( pDef!=0 ); - if( pNC2 ){ - assert( SQLITE_FUNC_MINMAX==NC_MinMaxAgg ); - testcase( (pDef->funcFlags & SQLITE_FUNC_MINMAX)!=0 ); - pNC2->ncFlags |= NC_HasAgg | (pDef->funcFlags & SQLITE_FUNC_MINMAX); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pExpr->pWin ){ + Select *pSel = pNC->pWinSelect; + sqlite3WalkExprList(pWalker, pExpr->pWin->pPartition); + sqlite3WalkExprList(pWalker, pExpr->pWin->pOrderBy); + sqlite3WalkExpr(pWalker, pExpr->pWin->pFilter); + sqlite3WindowUpdate(pParse, pSel->pWinDefn, pExpr->pWin, pDef); + if( 0==pSel->pWin + || 0==sqlite3WindowCompare(pParse, pSel->pWin, pExpr->pWin) + ){ + pExpr->pWin->pNextWin = pSel->pWin; + pSel->pWin = pExpr->pWin; + } + pNC->ncFlags |= NC_AllowWin; + }else +#endif /* SQLITE_OMIT_WINDOWFUNC */ + { + NameContext *pNC2 = pNC; + pExpr->op = TK_AGG_FUNCTION; + pExpr->op2 = 0; + while( pNC2 && !sqlite3FunctionUsesThisSrc(pExpr, pNC2->pSrcList) ){ + pExpr->op2++; + pNC2 = pNC2->pNext; + } + assert( pDef!=0 ); + if( pNC2 ){ + assert( SQLITE_FUNC_MINMAX==NC_MinMaxAgg ); + testcase( (pDef->funcFlags & SQLITE_FUNC_MINMAX)!=0 ); + pNC2->ncFlags |= NC_HasAgg | (pDef->funcFlags & SQLITE_FUNC_MINMAX); + } + pNC->ncFlags |= NC_AllowAgg; } - pNC->ncFlags |= NC_AllowAgg; } /* FIX ME: Compute pExpr->affinity based on the expected return ** type of the function @@ -1190,6 +1264,19 @@ } for(j=0; jpEList->nExpr; j++){ if( sqlite3ExprCompare(0, pE, pSelect->pEList->a[j].pExpr, -1)==0 ){ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pE->pWin ){ + /* Since this window function is being changed into a reference + ** to the same window function the result set, remove the instance + ** of this window function from the Select.pWin list. */ + Window **pp; + for(pp=&pSelect->pWin; *pp; pp=&(*pp)->pNextWin){ + if( *pp==pE->pWin ){ + *pp = (*pp)->pNextWin; + } + } + } +#endif pItem->u.x.iOrderByCol = j+1; } } @@ -1246,6 +1333,7 @@ */ memset(&sNC, 0, sizeof(sNC)); sNC.pParse = pParse; + sNC.pWinSelect = p; if( sqlite3ResolveExprNames(&sNC, p->pLimit) ){ return WRC_Abort; } @@ -1294,12 +1382,13 @@ /* Set up the local name-context to pass to sqlite3ResolveExprNames() to ** resolve the result-set expression list. */ - sNC.ncFlags = NC_AllowAgg; + sNC.ncFlags = NC_AllowAgg|NC_AllowWin; sNC.pSrcList = p->pSrc; sNC.pNext = pOuterNC; /* Resolve names in the result set. */ if( sqlite3ResolveExprListNames(&sNC, p->pEList) ) return WRC_Abort; + sNC.ncFlags &= ~NC_AllowWin; /* If there are no aggregate functions in the result-set, and no GROUP BY ** expression, do not allow aggregates in any of the other expressions. @@ -1348,7 +1437,7 @@ ** outer queries */ sNC.pNext = 0; - sNC.ncFlags |= NC_AllowAgg; + sNC.ncFlags |= NC_AllowAgg|NC_AllowWin; /* If this is a converted compound query, move the ORDER BY clause from ** the sub-query back to the parent query. At this point each term @@ -1379,6 +1468,7 @@ if( db->mallocFailed ){ return WRC_Abort; } + sNC.ncFlags &= ~NC_AllowWin; /* Resolve the GROUP BY clause. At the same time, make sure ** the GROUP BY clause does not contain aggregate functions. diff -Nru lxd-3.0.2/dist/sqlite/src/rowset.c lxd-3.0.3/dist/sqlite/src/rowset.c --- lxd-3.0.2/dist/sqlite/src/rowset.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/rowset.c 2018-11-22 20:54:16.000000000 +0000 @@ -124,30 +124,23 @@ #define ROWSET_NEXT 0x02 /* True if sqlite3RowSetNext() has been called */ /* -** Turn bulk memory into a RowSet object. N bytes of memory -** are available at pSpace. The db pointer is used as a memory context -** for any subsequent allocations that need to occur. -** Return a pointer to the new RowSet object. -** -** It must be the case that N is sufficient to make a Rowset. If not -** an assertion fault occurs. -** -** If N is larger than the minimum, use the surplus as an initial -** allocation of entries available to be filled. +** Allocate a RowSet object. Return NULL if a memory allocation +** error occurs. */ -RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsigned int N){ - RowSet *p; - assert( N >= ROUND8(sizeof(*p)) ); - p = pSpace; - p->pChunk = 0; - p->db = db; - p->pEntry = 0; - p->pLast = 0; - p->pForest = 0; - p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p); - p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry)); - p->rsFlags = ROWSET_SORTED; - p->iBatch = 0; +RowSet *sqlite3RowSetInit(sqlite3 *db){ + RowSet *p = sqlite3DbMallocRawNN(db, sizeof(*p)); + if( p ){ + int N = sqlite3DbMallocSize(db, p); + p->pChunk = 0; + p->db = db; + p->pEntry = 0; + p->pLast = 0; + p->pForest = 0; + p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p); + p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry)); + p->rsFlags = ROWSET_SORTED; + p->iBatch = 0; + } return p; } @@ -156,7 +149,8 @@ ** the RowSet has allocated over its lifetime. This routine is ** the destructor for the RowSet. */ -void sqlite3RowSetClear(RowSet *p){ +void sqlite3RowSetClear(void *pArg){ + RowSet *p = (RowSet*)pArg; struct RowSetChunk *pChunk, *pNextChunk; for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){ pNextChunk = pChunk->pNextChunk; @@ -171,6 +165,16 @@ } /* +** Deallocate all chunks from a RowSet. This frees all memory that +** the RowSet has allocated over its lifetime. This routine is +** the destructor for the RowSet. +*/ +void sqlite3RowSetDelete(void *pArg){ + sqlite3RowSetClear(pArg); + sqlite3DbFree(((RowSet*)pArg)->db, pArg); +} + +/* ** Allocate a new RowSetEntry object that is associated with the ** given RowSet. Return a pointer to the new and completely uninitialized ** objected. diff -Nru lxd-3.0.2/dist/sqlite/src/select.c lxd-3.0.3/dist/sqlite/src/select.c --- lxd-3.0.2/dist/sqlite/src/select.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/select.c 2018-11-22 20:54:16.000000000 +0000 @@ -21,7 +21,7 @@ /***/ int sqlite3SelectTrace = 0; # define SELECTTRACE(K,P,S,X) \ if(sqlite3SelectTrace&(K)) \ - sqlite3DebugPrintf("%s/%d/%p: ",(S)->zSelName,(P)->addrExplain,(S)),\ + sqlite3DebugPrintf("%u/%d/%p: ",(S)->selId,(P)->addrExplain,(S)),\ sqlite3DebugPrintf X #else # define SELECTTRACE(K,P,S,X) @@ -68,8 +68,8 @@ int labelBkOut; /* Start label for the block-output subroutine */ int addrSortIndex; /* Address of the OP_SorterOpen or OP_OpenEphemeral */ int labelDone; /* Jump here when done, ex: LIMIT reached */ + int labelOBLopt; /* Jump here when sorter is full */ u8 sortFlags; /* Zero or more SORTFLAG_* bits */ - u8 bOrderedInnerLoop; /* ORDER BY correctly sorts the inner loop */ #ifdef SQLITE_ENABLE_SORTER_REFERENCES u8 nDefer; /* Number of valid entries in aDefer[] */ struct DeferredCsr { @@ -96,6 +96,11 @@ sqlite3ExprDelete(db, p->pHaving); sqlite3ExprListDelete(db, p->pOrderBy); sqlite3ExprDelete(db, p->pLimit); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( OK_IF_ALWAYS_TRUE(p->pWinDefn) ){ + sqlite3WindowListDelete(db, p->pWinDefn); + } +#endif if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith); if( bFree ) sqlite3DbFreeNN(db, p); p = pPrior; @@ -146,9 +151,7 @@ pNew->selFlags = selFlags; pNew->iLimit = 0; pNew->iOffset = 0; -#if SELECTTRACE_ENABLED - pNew->zSelName[0] = 0; -#endif + pNew->selId = ++pParse->nSelect; pNew->addrOpenEphm[0] = -1; pNew->addrOpenEphm[1] = -1; pNew->nSelectRow = 0; @@ -162,6 +165,10 @@ pNew->pNext = 0; pNew->pLimit = pLimit; pNew->pWith = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + pNew->pWin = 0; + pNew->pWinDefn = 0; +#endif if( pParse->db->mallocFailed ) { clearSelect(pParse->db, pNew, pNew!=&standin); pNew = 0; @@ -172,17 +179,6 @@ return pNew; } -#if SELECTTRACE_ENABLED -/* -** Set the name of a Select object -*/ -void sqlite3SelectSetName(Select *p, const char *zName){ - if( p && zName ){ - sqlite3_snprintf(sizeof(p->zSelName), p->zSelName, "%s", zName); - } -} -#endif - /* ** Delete the given Select structure and all of its substructures. @@ -529,14 +525,6 @@ return 0; } -/* Forward reference */ -static KeyInfo *keyInfoFromExprList( - Parse *pParse, /* Parsing context */ - ExprList *pList, /* Form the KeyInfo object from this ExprList */ - int iStart, /* Begin with this column of pList */ - int nExtra /* Add this many extra columns to the end */ -); - /* ** An instance of this object holds information (beyond pParse and pSelect) ** needed to load the next result row that is to be added to the sorter. @@ -678,7 +666,7 @@ memset(pKI->aSortOrder, 0, pKI->nKeyField); /* Makes OP_Jump testable */ sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO); testcase( pKI->nAllField > pKI->nKeyField+2 ); - pOp->p4.pKeyInfo = keyInfoFromExprList(pParse, pSort->pOrderBy, nOBSat, + pOp->p4.pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pSort->pOrderBy,nOBSat, pKI->nAllField-pKI->nKeyField-1); addrJmp = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v); @@ -705,10 +693,10 @@ ** than LIMIT+OFFSET items in the sorter. ** ** If the new record does not need to be inserted into the sorter, - ** jump to the next iteration of the loop. Or, if the - ** pSort->bOrderedInnerLoop flag is set to indicate that the inner - ** loop delivers items in sorted order, jump to the next iteration - ** of the outer loop. + ** jump to the next iteration of the loop. If the pSort->labelOBLopt + ** value is not zero, then it is a label of where to jump. Otherwise, + ** just bypass the row insert logic. See the header comment on the + ** sqlite3WhereOrderByLimitOptLabel() function for additional info. */ int iCsr = pSort->iECursor; sqlite3VdbeAddOp2(v, OP_IfNotZero, iLimit, sqlite3VdbeCurrentAddr(v)+4); @@ -730,9 +718,8 @@ sqlite3VdbeAddOp4Int(v, op, pSort->iECursor, regRecord, regBase+nOBSat, nBase-nOBSat); if( iSkip ){ - assert( pSort->bOrderedInnerLoop==0 || pSort->bOrderedInnerLoop==1 ); sqlite3VdbeChangeP2(v, iSkip, - sqlite3VdbeCurrentAddr(v) + pSort->bOrderedInnerLoop); + pSort->labelOBLopt ? pSort->labelOBLopt : sqlite3VdbeCurrentAddr(v)); } } @@ -1161,7 +1148,6 @@ assert( sqlite3Strlen30(pDest->zAffSdst)==nResultCol ); sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, nResultCol, r1, pDest->zAffSdst, nResultCol); - sqlite3ExprCacheAffinityChange(pParse, regResult, nResultCol); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, nResultCol); sqlite3ReleaseTempReg(pParse, r1); } @@ -1205,7 +1191,6 @@ sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); }else{ sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nResultCol); - sqlite3ExprCacheAffinityChange(pParse, regResult, nResultCol); } break; } @@ -1348,7 +1333,7 @@ ** function is responsible for seeing that this structure is eventually ** freed. */ -static KeyInfo *keyInfoFromExprList( +KeyInfo *sqlite3KeyInfoFromExprList( Parse *pParse, /* Parsing context */ ExprList *pList, /* Form the KeyInfo object from this ExprList */ int iStart, /* Begin with this column of pList */ @@ -1562,7 +1547,6 @@ assert( nColumn==sqlite3Strlen30(pDest->zAffSdst) ); sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, nColumn, regRowid, pDest->zAffSdst, nColumn); - sqlite3ExprCacheAffinityChange(pParse, regRow, nColumn); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, regRowid, regRow, nColumn); break; } @@ -1577,7 +1561,6 @@ testcase( eDest==SRT_Coroutine ); if( eDest==SRT_Output ){ sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iSdst, nColumn); - sqlite3ExprCacheAffinityChange(pParse, pDest->iSdst, nColumn); }else{ sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); } @@ -2178,7 +2161,6 @@ ** The current implementation interprets "LIMIT 0" to mean ** no rows. */ - sqlite3ExprCacheClear(pParse); if( pLimit ){ assert( pLimit->op==TK_LIMIT ); assert( pLimit->pLeft!=0 ); @@ -2336,6 +2318,13 @@ Expr *pLimit; /* Saved LIMIT and OFFSET */ int regLimit, regOffset; /* Registers used by LIMIT and OFFSET */ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ){ + sqlite3ErrorMsg(pParse, "cannot use window functions in recursive queries"); + return; + } +#endif + /* Obtain authorization to do a recursive query */ if( sqlite3AuthCheck(pParse, SQLITE_RECURSIVE, 0, 0, 0) ) return; @@ -2964,7 +2953,6 @@ r1 = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, r1, pDest->zAffSdst, pIn->nSdst); - sqlite3ExprCacheAffinityChange(pParse, pIn->iSdst, pIn->nSdst); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pDest->iSDParm, r1, pIn->iSdst, pIn->nSdst); sqlite3ReleaseTempReg(pParse, r1); @@ -3007,7 +2995,6 @@ default: { assert( pDest->eDest==SRT_Output ); sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iSdst, pIn->nSdst); - sqlite3ExprCacheAffinityChange(pParse, pIn->iSdst, pIn->nSdst); break; } } @@ -3462,7 +3449,7 @@ Expr *pCopy = pSubst->pEList->a[pExpr->iColumn].pExpr; Expr ifNullRow; assert( pSubst->pEList!=0 && pExpr->iColumnpEList->nExpr ); - assert( pExpr->pLeft==0 && pExpr->pRight==0 ); + assert( pExpr->pRight==0 ); if( sqlite3ExprIsVector(pCopy) ){ sqlite3VectorErrorMsg(pSubst->pParse, pCopy); }else{ @@ -3676,6 +3663,10 @@ ** "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily ** return the value X for which Y was maximal.) ** +** (25) If either the subquery or the parent query contains a window +** function in the select list or ORDER BY clause, flattening +** is not attempted. +** ** ** In this routine, the "p" parameter is a pointer to the outer query. ** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query @@ -3719,6 +3710,10 @@ pSub = pSubitem->pSelect; assert( pSub!=0 ); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin || pSub->pWin ) return 0; /* Restriction (25) */ +#endif + pSubSrc = pSub->pSrc; assert( pSubSrc ); /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants, @@ -3829,8 +3824,8 @@ assert( (p->selFlags & SF_Recursive)==0 || pSub->pPrior==0 ); /***** If we reach this point, flattening is permitted. *****/ - SELECTTRACE(1,pParse,p,("flatten %s.%p from term %d\n", - pSub->zSelName, pSub, iFrom)); + SELECTTRACE(1,pParse,p,("flatten %u.%p from term %d\n", + pSub->selId, pSub, iFrom)); /* Authorize the subquery */ pParse->zAuthContext = pSubitem->zName; @@ -3881,7 +3876,6 @@ p->pPrior = 0; p->pLimit = 0; pNew = sqlite3SelectDup(db, p, 0); - sqlite3SelectSetName(pNew, pSub->zSelName); p->pLimit = pLimit; p->pOrderBy = pOrderBy; p->pSrc = pSrc; @@ -3894,7 +3888,7 @@ pNew->pNext = p; p->pPrior = pNew; SELECTTRACE(2,pParse,p,("compound-subquery flattener" - " creates %s.%p as peer\n",pNew->zSelName, pNew)); + " creates %u as peer\n",pNew->selId)); } if( db->mallocFailed ) return 1; } @@ -4079,7 +4073,183 @@ } #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ +/* +** A structure to keep track of all of the column values that are fixed to +** a known value due to WHERE clause constraints of the form COLUMN=VALUE. +*/ +typedef struct WhereConst WhereConst; +struct WhereConst { + Parse *pParse; /* Parsing context */ + int nConst; /* Number for COLUMN=CONSTANT terms */ + int nChng; /* Number of times a constant is propagated */ + Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */ +}; + +/* +** Add a new entry to the pConst object. Except, do not add duplicate +** pColumn entires. +*/ +static void constInsert( + WhereConst *pConst, /* The WhereConst into which we are inserting */ + Expr *pColumn, /* The COLUMN part of the constraint */ + Expr *pValue /* The VALUE part of the constraint */ +){ + int i; + assert( pColumn->op==TK_COLUMN ); + + /* 2018-10-25 ticket [cf5ed20f] + ** Make sure the same pColumn is not inserted more than once */ + for(i=0; inConst; i++){ + const Expr *pExpr = pConst->apExpr[i*2]; + assert( pExpr->op==TK_COLUMN ); + if( pExpr->iTable==pColumn->iTable + && pExpr->iColumn==pColumn->iColumn + ){ + return; /* Already present. Return without doing anything. */ + } + } + + pConst->nConst++; + pConst->apExpr = sqlite3DbReallocOrFree(pConst->pParse->db, pConst->apExpr, + pConst->nConst*2*sizeof(Expr*)); + if( pConst->apExpr==0 ){ + pConst->nConst = 0; + }else{ + if( ExprHasProperty(pValue, EP_FixedCol) ) pValue = pValue->pLeft; + pConst->apExpr[pConst->nConst*2-2] = pColumn; + pConst->apExpr[pConst->nConst*2-1] = pValue; + } +} +/* +** Find all terms of COLUMN=VALUE or VALUE=COLUMN in pExpr where VALUE +** is a constant expression and where the term must be true because it +** is part of the AND-connected terms of the expression. For each term +** found, add it to the pConst structure. +*/ +static void findConstInWhere(WhereConst *pConst, Expr *pExpr){ + Expr *pRight, *pLeft; + if( pExpr==0 ) return; + if( ExprHasProperty(pExpr, EP_FromJoin) ) return; + if( pExpr->op==TK_AND ){ + findConstInWhere(pConst, pExpr->pRight); + findConstInWhere(pConst, pExpr->pLeft); + return; + } + if( pExpr->op!=TK_EQ ) return; + pRight = pExpr->pRight; + pLeft = pExpr->pLeft; + assert( pRight!=0 ); + assert( pLeft!=0 ); + if( pRight->op==TK_COLUMN + && !ExprHasProperty(pRight, EP_FixedCol) + && sqlite3ExprIsConstant(pLeft) + && sqlite3IsBinary(sqlite3BinaryCompareCollSeq(pConst->pParse,pLeft,pRight)) + ){ + constInsert(pConst, pRight, pLeft); + }else + if( pLeft->op==TK_COLUMN + && !ExprHasProperty(pLeft, EP_FixedCol) + && sqlite3ExprIsConstant(pRight) + && sqlite3IsBinary(sqlite3BinaryCompareCollSeq(pConst->pParse,pLeft,pRight)) + ){ + constInsert(pConst, pLeft, pRight); + } +} + +/* +** This is a Walker expression callback. pExpr is a candidate expression +** to be replaced by a value. If pExpr is equivalent to one of the +** columns named in pWalker->u.pConst, then overwrite it with its +** corresponding value. +*/ +static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){ + int i; + WhereConst *pConst; + if( pExpr->op!=TK_COLUMN ) return WRC_Continue; + if( ExprHasProperty(pExpr, EP_FixedCol) ) return WRC_Continue; + pConst = pWalker->u.pConst; + for(i=0; inConst; i++){ + Expr *pColumn = pConst->apExpr[i*2]; + if( pColumn==pExpr ) continue; + if( pColumn->iTable!=pExpr->iTable ) continue; + if( pColumn->iColumn!=pExpr->iColumn ) continue; + /* A match is found. Add the EP_FixedCol property */ + pConst->nChng++; + ExprClearProperty(pExpr, EP_Leaf); + ExprSetProperty(pExpr, EP_FixedCol); + assert( pExpr->pLeft==0 ); + pExpr->pLeft = sqlite3ExprDup(pConst->pParse->db, pConst->apExpr[i*2+1], 0); + break; + } + return WRC_Prune; +} + +/* +** The WHERE-clause constant propagation optimization. +** +** If the WHERE clause contains terms of the form COLUMN=CONSTANT or +** CONSTANT=COLUMN that must be tree (in other words, if the terms top-level +** AND-connected terms that are not part of a ON clause from a LEFT JOIN) +** then throughout the query replace all other occurrences of COLUMN +** with CONSTANT within the WHERE clause. +** +** For example, the query: +** +** SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=t1.a AND t3.c=t2.b +** +** Is transformed into +** +** SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=39 AND t3.c=39 +** +** Return true if any transformations where made and false if not. +** +** Implementation note: Constant propagation is tricky due to affinity +** and collating sequence interactions. Consider this example: +** +** CREATE TABLE t1(a INT,b TEXT); +** INSERT INTO t1 VALUES(123,'0123'); +** SELECT * FROM t1 WHERE a=123 AND b=a; +** SELECT * FROM t1 WHERE a=123 AND b=123; +** +** The two SELECT statements above should return different answers. b=a +** is alway true because the comparison uses numeric affinity, but b=123 +** is false because it uses text affinity and '0123' is not the same as '123'. +** To work around this, the expression tree is not actually changed from +** "b=a" to "b=123" but rather the "a" in "b=a" is tagged with EP_FixedCol +** and the "123" value is hung off of the pLeft pointer. Code generator +** routines know to generate the constant "123" instead of looking up the +** column value. Also, to avoid collation problems, this optimization is +** only attempted if the "a=123" term uses the default BINARY collation. +*/ +static int propagateConstants( + Parse *pParse, /* The parsing context */ + Select *p /* The query in which to propagate constants */ +){ + WhereConst x; + Walker w; + int nChng = 0; + x.pParse = pParse; + do{ + x.nConst = 0; + x.nChng = 0; + x.apExpr = 0; + findConstInWhere(&x, p->pWhere); + if( x.nConst ){ + memset(&w, 0, sizeof(w)); + w.pParse = pParse; + w.xExprCallback = propagateConstantExprRewrite; + w.xSelectCallback = sqlite3SelectWalkNoop; + w.xSelectCallback2 = 0; + w.walkerDepth = 0; + w.u.pConst = &x; + sqlite3WalkExpr(&w, p->pWhere); + sqlite3DbFree(x.pParse->db, x.apExpr); + nChng += x.nChng; + } + }while( x.nChng ); + return nChng; +} #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) /* @@ -4109,7 +4279,7 @@ ** (2) The inner query is the recursive part of a common table expression. ** ** (3) The inner query has a LIMIT clause (since the changes to the WHERE -** close would change the meaning of the LIMIT). +** clause would change the meaning of the LIMIT). ** ** (4) The inner query is the right operand of a LEFT JOIN and the ** expression to be pushed down does not come from the ON clause @@ -4128,6 +4298,10 @@ ** But if the (b2=2) term were to be pushed down into the bb subquery, ** then the (1,1,NULL) row would be suppressed. ** +** (6) The inner query features one or more window-functions (since +** changes to the WHERE clause of the inner query could change the +** window over which window functions are calculated). +** ** Return 0 if no changes are made and non-zero if one or more WHERE clause ** terms are duplicated into the subquery. */ @@ -4143,6 +4317,10 @@ if( pWhere==0 ) return 0; if( pSubq->selFlags & SF_Recursive ) return 0; /* restriction (2) */ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pSubq->pWin ) return 0; /* restriction (6) */ +#endif + #ifdef SQLITE_DEBUG /* Only the first term of a compound can have a WITH clause. But make ** sure no other terms are marked SF_Recursive in case something changes @@ -4589,6 +4767,35 @@ #endif /* +** The SrcList_item structure passed as the second argument represents a +** sub-query in the FROM clause of a SELECT statement. This function +** allocates and populates the SrcList_item.pTab object. If successful, +** SQLITE_OK is returned. Otherwise, if an OOM error is encountered, +** SQLITE_NOMEM. +*/ +int sqlite3ExpandSubquery(Parse *pParse, struct SrcList_item *pFrom){ + Select *pSel = pFrom->pSelect; + Table *pTab; + + assert( pSel ); + pFrom->pTab = pTab = sqlite3DbMallocZero(pParse->db, sizeof(Table)); + if( pTab==0 ) return SQLITE_NOMEM; + pTab->nTabRef = 1; + if( pFrom->zAlias ){ + pTab->zName = sqlite3DbStrDup(pParse->db, pFrom->zAlias); + }else{ + pTab->zName = sqlite3MPrintf(pParse->db, "subquery_%u", pSel->selId); + } + while( pSel->pPrior ){ pSel = pSel->pPrior; } + sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol); + pTab->iPKey = -1; + pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); + pTab->tabFlags |= TF_Ephemeral; + + return SQLITE_OK; +} + +/* ** This routine is a Walker callback for "expanding" a SELECT statement. ** "Expanding" means to do the following: ** @@ -4660,19 +4867,7 @@ assert( pSel!=0 ); assert( pFrom->pTab==0 ); if( sqlite3WalkSelect(pWalker, pSel) ) return WRC_Abort; - pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table)); - if( pTab==0 ) return WRC_Abort; - pTab->nTabRef = 1; - if( pFrom->zAlias ){ - pTab->zName = sqlite3DbStrDup(db, pFrom->zAlias); - }else{ - pTab->zName = sqlite3MPrintf(db, "subquery_%p", (void*)pTab); - } - while( pSel->pPrior ){ pSel = pSel->pPrior; } - sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol); - pTab->iPKey = -1; - pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); - pTab->tabFlags |= TF_Ephemeral; + if( sqlite3ExpandSubquery(pParse, pFrom) ) return WRC_Abort; #endif }else{ /* An ordinary table or view name in the FROM clause */ @@ -4695,7 +4890,6 @@ if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort; assert( pFrom->pSelect==0 ); pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0); - sqlite3SelectSetName(pFrom->pSelect, pTab->zName); nCol = pTab->nCol; pTab->nCol = -1; sqlite3WalkSelect(pWalker, pFrom->pSelect); @@ -4973,7 +5167,7 @@ struct SrcList_item *pFrom; assert( p->selFlags & SF_Resolved ); - assert( (p->selFlags & SF_HasTypeInfo)==0 ); + if( p->selFlags & SF_HasTypeInfo ) return; p->selFlags |= SF_HasTypeInfo; pParse = pWalker->pParse; pTabList = p->pSrc; @@ -5076,7 +5270,7 @@ "argument"); pFunc->iDistinct = -1; }else{ - KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList, 0, 0); + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pE->x.pList,0,0); sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0, (char*)pKeyInfo, P4_KEYINFO); } @@ -5100,11 +5294,17 @@ } } + /* ** Update the accumulator memory cells for an aggregate based on ** the current cursor position. +** +** If regAcc is non-zero and there are no min() or max() aggregates +** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator +** registers i register regAcc contains 0. The caller will take care +** of setting and clearing regAcc. */ -static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){ +static void updateAccumulator(Parse *pParse, int regAcc, AggInfo *pAggInfo){ Vdbe *v = pParse->pVdbe; int i; int regHit = 0; @@ -5147,36 +5347,24 @@ if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ); } - sqlite3VdbeAddOp3(v, OP_AggStep0, 0, regAgg, pF->iMem); + sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, pF->iMem); sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); sqlite3VdbeChangeP5(v, (u8)nArg); - sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg); sqlite3ReleaseTempRange(pParse, regAgg, nArg); if( addrNext ){ sqlite3VdbeResolveLabel(v, addrNext); - sqlite3ExprCacheClear(pParse); } } - - /* Before populating the accumulator registers, clear the column cache. - ** Otherwise, if any of the required column values are already present - ** in registers, sqlite3ExprCode() may use OP_SCopy to copy the value - ** to pC->iMem. But by the time the value is used, the original register - ** may have been used, invalidating the underlying buffer holding the - ** text or blob value. See ticket [883034dcb5]. - ** - ** Another solution would be to change the OP_SCopy used to copy cached - ** values to an OP_Copy. - */ + if( regHit==0 && pAggInfo->nAccumulator ){ + regHit = regAcc; + } if( regHit ){ addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v); } - sqlite3ExprCacheClear(pParse); for(i=0, pC=pAggInfo->aCol; inAccumulator; i++, pC++){ sqlite3ExprCode(pParse, pC->pExpr, pC->iMem); } pAggInfo->directMode = 0; - sqlite3ExprCacheClear(pParse); if( addrHitTest ){ sqlite3VdbeJumpHere(v, addrHitTest); } @@ -5306,6 +5494,7 @@ ** The transformation only works if all of the following are true: ** ** * The subquery is a UNION ALL of two or more terms +** * The subquery does not have a LIMIT clause ** * There is no WHERE or GROUP BY or HAVING clauses on the subqueries ** * The outer query is a simple count(*) ** @@ -5329,6 +5518,7 @@ do{ if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */ if( pSub->pWhere ) return 0; /* No WHERE clause */ + if( pSub->pLimit ) return 0; /* No LIMIT clause */ if( pSub->selFlags & SF_Aggregate ) return 0; /* Not an aggregate */ pSub = pSub->pPrior; /* Repeat over compound */ }while( pSub ); @@ -5441,14 +5631,10 @@ p->selFlags &= ~SF_Distinct; } sqlite3SelectPrep(pParse, p, 0); - memset(&sSort, 0, sizeof(sSort)); - sSort.pOrderBy = p->pOrderBy; - pTabList = p->pSrc; if( pParse->nErr || db->mallocFailed ){ goto select_end; } assert( p->pEList!=0 ); - isAgg = (p->selFlags & SF_Aggregate)!=0; #if SELECTTRACE_ENABLED if( sqlite3SelectTrace & 0x104 ){ SELECTTRACE(0x104,pParse,p, ("after name resolution:\n")); @@ -5460,6 +5646,22 @@ generateColumnNames(pParse, p); } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( sqlite3WindowRewrite(pParse, p) ){ + goto select_end; + } +#if SELECTTRACE_ENABLED + if( sqlite3SelectTrace & 0x108 ){ + SELECTTRACE(0x104,pParse,p, ("after window rewrite:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif +#endif /* SQLITE_OMIT_WINDOWFUNC */ + pTabList = p->pSrc; + isAgg = (p->selFlags & SF_Aggregate)!=0; + memset(&sSort, 0, sizeof(sSort)); + sSort.pOrderBy = p->pOrderBy; + /* Try to various optimizations (flattening subqueries, and strength ** reduction of join operators) in the FROM clause up into the main query */ @@ -5559,6 +5761,35 @@ } #endif + /* Do the WHERE-clause constant propagation optimization if this is + ** a join. No need to speed time on this operation for non-join queries + ** as the equivalent optimization will be handled by query planner in + ** sqlite3WhereBegin(). + */ + if( pTabList->nSrc>1 + && OptimizationEnabled(db, SQLITE_PropagateConst) + && propagateConstants(pParse, p) + ){ +#if SELECTTRACE_ENABLED + if( sqlite3SelectTrace & 0x100 ){ + SELECTTRACE(0x100,pParse,p,("After constant propagation:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + }else{ + SELECTTRACE(0x100,pParse,p,("Constant propagation not helpful\n")); + } + +#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION + if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView) + && countOfViewOptimization(pParse, p) + ){ + if( db->mallocFailed ) goto select_end; + pEList = p->pEList; + pTabList = p->pSrc; + } +#endif + /* For each term in the FROM clause, do two things: ** (1) Authorized unreferenced tables ** (2) Generate code for all sub-queries @@ -5632,7 +5863,8 @@ ){ #if SELECTTRACE_ENABLED if( sqlite3SelectTrace & 0x100 ){ - SELECTTRACE(0x100,pParse,p,("After WHERE-clause push-down:\n")); + SELECTTRACE(0x100,pParse,p, + ("After WHERE-clause push-down into subquery %d:\n", pSub->selId)); sqlite3TreeViewSelect(0, p, 0); } #endif @@ -5666,7 +5898,7 @@ VdbeComment((v, "%s", pItem->pTab->zName)); pItem->addrFillSub = addrTop; sqlite3SelectDestInit(&dest, SRT_Coroutine, pItem->regReturn); - ExplainQueryPlan((pParse, 1, "CO-ROUTINE 0x%p", pSub)); + ExplainQueryPlan((pParse, 1, "CO-ROUTINE %u", pSub->selId)); sqlite3Select(pParse, pSub, &dest); pItem->pTab->nRowLogEst = pSub->nSelectRow; pItem->fg.viaCoroutine = 1; @@ -5705,7 +5937,7 @@ pSub->nSelectRow = pPrior->pSelect->nSelectRow; }else{ sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); - ExplainQueryPlan((pParse, 1, "MATERIALIZE 0x%p", pSub)); + ExplainQueryPlan((pParse, 1, "MATERIALIZE %u", pSub->selId)); sqlite3Select(pParse, pSub, &dest); } pItem->pTab->nRowLogEst = pSub->nSelectRow; @@ -5736,16 +5968,6 @@ } #endif -#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION - if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView) - && countOfViewOptimization(pParse, p) - ){ - if( db->mallocFailed ) goto select_end; - pEList = p->pEList; - pTabList = p->pSrc; - } -#endif - /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and ** if the select-list is the same as the ORDER BY list, then this query ** can be rewritten as a GROUP BY. In other words, this: @@ -5789,7 +6011,8 @@ */ if( sSort.pOrderBy ){ KeyInfo *pKeyInfo; - pKeyInfo = keyInfoFromExprList(pParse, sSort.pOrderBy, 0, pEList->nExpr); + pKeyInfo = sqlite3KeyInfoFromExprList( + pParse, sSort.pOrderBy, 0, pEList->nExpr); sSort.iECursor = pParse->nTab++; sSort.addrSortIndex = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, @@ -5823,9 +6046,9 @@ if( p->selFlags & SF_Distinct ){ sDistinct.tabTnct = pParse->nTab++; sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, - sDistinct.tabTnct, 0, 0, - (char*)keyInfoFromExprList(pParse, p->pEList,0,0), - P4_KEYINFO); + sDistinct.tabTnct, 0, 0, + (char*)sqlite3KeyInfoFromExprList(pParse, p->pEList,0,0), + P4_KEYINFO); sqlite3VdbeChangeP5(v, BTREE_UNORDERED); sDistinct.eTnctType = WHERE_DISTINCT_UNORDERED; }else{ @@ -5834,9 +6057,16 @@ if( !isAgg && pGroupBy==0 ){ /* No aggregate functions and no GROUP BY clause */ - u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0); + u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0) + | (p->selFlags & SF_FixedLimit); +#ifndef SQLITE_OMIT_WINDOWFUNC + Window *pWin = p->pWin; /* Master window object (or NULL) */ + if( pWin ){ + sqlite3WindowCodeInit(pParse, pWin); + } +#endif assert( WHERE_USE_LIMIT==SF_FixedLimit ); - wctrlFlags |= p->selFlags & SF_FixedLimit; + /* Begin the database scan. */ SELECTTRACE(1,pParse,p,("WhereBegin\n")); @@ -5851,7 +6081,7 @@ } if( sSort.pOrderBy ){ sSort.nOBSat = sqlite3WhereIsOrdered(pWInfo); - sSort.bOrderedInnerLoop = sqlite3WhereOrderedInnerLoop(pWInfo); + sSort.labelOBLopt = sqlite3WhereOrderByLimitOptLabel(pWInfo); if( sSort.nOBSat==sSort.pOrderBy->nExpr ){ sSort.pOrderBy = 0; } @@ -5865,15 +6095,37 @@ sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex); } - /* Use the standard inner loop. */ assert( p->pEList==pEList ); - selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, - sqlite3WhereContinueLabel(pWInfo), - sqlite3WhereBreakLabel(pWInfo)); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pWin ){ + int addrGosub = sqlite3VdbeMakeLabel(v); + int iCont = sqlite3VdbeMakeLabel(v); + int iBreak = sqlite3VdbeMakeLabel(v); + int regGosub = ++pParse->nMem; + + sqlite3WindowCodeStep(pParse, p, pWInfo, regGosub, addrGosub); + + sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak); + sqlite3VdbeResolveLabel(v, addrGosub); + VdbeNoopComment((v, "inner-loop subroutine")); + sSort.labelOBLopt = 0; + selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, iCont, iBreak); + sqlite3VdbeResolveLabel(v, iCont); + sqlite3VdbeAddOp1(v, OP_Return, regGosub); + VdbeComment((v, "end inner-loop subroutine")); + sqlite3VdbeResolveLabel(v, iBreak); + }else +#endif /* SQLITE_OMIT_WINDOWFUNC */ + { + /* Use the standard inner loop. */ + selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, + sqlite3WhereContinueLabel(pWInfo), + sqlite3WhereBreakLabel(pWInfo)); - /* End the database scan loop. - */ - sqlite3WhereEnd(pWInfo); + /* End the database scan loop. + */ + sqlite3WhereEnd(pWInfo); + } }else{ /* This case when there exist aggregate functions or a GROUP BY clause ** or both */ @@ -6002,7 +6254,7 @@ ** will be converted into a Noop. */ sAggInfo.sortingIdx = pParse->nTab++; - pKeyInfo = keyInfoFromExprList(pParse, pGroupBy, 0, sAggInfo.nColumn); + pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pGroupBy,0,sAggInfo.nColumn); addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, sAggInfo.sortingIdx, sAggInfo.nSortingColumn, 0, (char*)pKeyInfo, P4_KEYINFO); @@ -6021,8 +6273,6 @@ pParse->nMem += pGroupBy->nExpr; sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag); VdbeComment((v, "clear abort flag")); - sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); - VdbeComment((v, "indicate accumulator empty")); sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1); /* Begin a loop that will extract all source rows in GROUP BY order. @@ -6068,15 +6318,14 @@ } } regBase = sqlite3GetTempRange(pParse, nCol); - sqlite3ExprCacheClear(pParse); sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); j = nGroupBy; for(i=0; iiSorterColumn>=j ){ int r1 = j + regBase; - sqlite3ExprCodeGetColumnToReg(pParse, - pCol->pTab, pCol->iColumn, pCol->iTable, r1); + sqlite3ExprCodeGetColumnOfTable(v, + pCol->pTab, pCol->iTable, pCol->iColumn, r1); j++; } } @@ -6092,8 +6341,6 @@ sqlite3VdbeAddOp2(v, OP_SorterSort, sAggInfo.sortingIdx, addrEnd); VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v); sAggInfo.useSortingIdx = 1; - sqlite3ExprCacheClear(pParse); - } /* If the index or temporary table used by the GROUP BY sort @@ -6116,7 +6363,6 @@ ** from the previous row currently stored in a0, a1, a2... */ addrTopOfLoop = sqlite3VdbeCurrentAddr(v); - sqlite3ExprCacheClear(pParse); if( groupBySort ){ sqlite3VdbeAddOp3(v, OP_SorterData, sAggInfo.sortingIdx, sortOut, sortPTab); @@ -6155,7 +6401,7 @@ ** the current row */ sqlite3VdbeJumpHere(v, addr1); - updateAccumulator(pParse, &sAggInfo); + updateAccumulator(pParse, iUseFlag, &sAggInfo); sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); VdbeComment((v, "indicate data in accumulator")); @@ -6207,6 +6453,8 @@ */ sqlite3VdbeResolveLabel(v, addrReset); resetAccumulator(pParse, &sAggInfo); + sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); + VdbeComment((v, "indicate accumulator empty")); sqlite3VdbeAddOp1(v, OP_Return, regReset); } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ @@ -6272,6 +6520,23 @@ }else #endif /* SQLITE_OMIT_BTREECOUNT */ { + int regAcc = 0; /* "populate accumulators" flag */ + + /* If there are accumulator registers but no min() or max() functions, + ** allocate register regAcc. Register regAcc will contain 0 the first + ** time the inner loop runs, and 1 thereafter. The code generated + ** by updateAccumulator() only updates the accumulator registers if + ** regAcc contains 0. */ + if( sAggInfo.nAccumulator ){ + for(i=0; ifuncFlags&SQLITE_FUNC_NEEDCOLL ) break; + } + if( i==sAggInfo.nFunc ){ + regAcc = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regAcc); + } + } + /* This case runs if the aggregate has no GROUP BY clause. The ** processing is much simpler since there is only a single row ** of output. @@ -6293,7 +6558,8 @@ if( pWInfo==0 ){ goto select_end; } - updateAccumulator(pParse, &sAggInfo); + updateAccumulator(pParse, regAcc, &sAggInfo); + if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); if( sqlite3WhereIsOrdered(pWInfo)>0 ){ sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo)); VdbeComment((v, "%s() by index", diff -Nru lxd-3.0.2/dist/sqlite/src/shell.c.in lxd-3.0.3/dist/sqlite/src/shell.c.in --- lxd-3.0.2/dist/sqlite/src/shell.c.in 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/shell.c.in 2018-11-22 20:54:16.000000000 +0000 @@ -79,12 +79,15 @@ #if (!defined(_WIN32) && !defined(WIN32)) || defined(__MINGW32__) # include # include +# define GETPID getpid # if defined(__MINGW32__) # define DIRENT dirent # ifndef S_ISLNK # define S_ISLNK(mode) (0) # endif # endif +#else +# define GETPID (int)GetCurrentProcessId #endif #include #include @@ -565,7 +568,7 @@ if( n+100>nLine ){ nLine = nLine*2 + 100; zLine = realloc(zLine, nLine); - if( zLine==0 ) return 0; + if( zLine==0 ) shell_out_of_memory(); } if( fgets(&zLine[n], nLine - n, in)==0 ){ if( n==0 ){ @@ -592,10 +595,7 @@ int nTrans = strlen30(zTrans)+1; if( nTrans>nLine ){ zLine = realloc(zLine, nTrans); - if( zLine==0 ){ - sqlite3_free(zTrans); - return 0; - } + if( zLine==0 ) shell_out_of_memory(); } memcpy(zLine, zTrans, nTrans); sqlite3_free(zTrans); @@ -742,10 +742,7 @@ if( p->n+len>=p->nAlloc ){ p->nAlloc = p->nAlloc*2 + len + 20; p->z = realloc(p->z, p->nAlloc); - if( p->z==0 ){ - memset(p, 0, sizeof(*p)); - return; - } + if( p->z==0 ) shell_out_of_memory(); } if( quote ){ @@ -1187,6 +1184,7 @@ char *zCmd = 0; int bBin; int rc; + int hasCRNL = 0; FILE *f = 0; sqlite3_int64 sz; sqlite3_int64 x; @@ -1218,6 +1216,8 @@ } } bBin = sqlite3_value_type(argv[0])==SQLITE_BLOB; + /* When writing the file to be edited, do \n to \r\n conversions on systems + ** that want \r\n line endings */ f = fopen(zTempFile, bBin ? "wb" : "w"); if( f==0 ){ sqlite3_result_error(context, "edit() cannot open temp file", -1); @@ -1227,6 +1227,9 @@ if( bBin ){ x = fwrite(sqlite3_value_blob(argv[0]), 1, sz, f); }else{ + const char *z = (const char*)sqlite3_value_text(argv[0]); + /* Remember whether or not the value originally contained \r\n */ + if( z && strstr(z,"\r\n")!=0 ) hasCRNL = 1; x = fwrite(sqlite3_value_text(argv[0]), 1, sz, f); } fclose(f); @@ -1246,7 +1249,7 @@ sqlite3_result_error(context, "EDITOR returned non-zero", -1); goto edit_func_end; } - f = fopen(zTempFile, bBin ? "rb" : "r"); + f = fopen(zTempFile, "rb"); if( f==0 ){ sqlite3_result_error(context, "edit() cannot reopen temp file after edit", -1); @@ -1260,12 +1263,7 @@ sqlite3_result_error_nomem(context); goto edit_func_end; } - if( bBin ){ - x = fread(p, 1, sz, f); - }else{ - x = fread(p, 1, sz, f); - p[sz] = 0; - } + x = fread(p, 1, sz, f); fclose(f); f = 0; if( x!=sz ){ @@ -1275,6 +1273,20 @@ if( bBin ){ sqlite3_result_blob64(context, p, sz, sqlite3_free); }else{ + int i, j; + if( hasCRNL ){ + /* If the original contains \r\n then do no conversions back to \n */ + j = sz; + }else{ + /* If the file did not originally contain \r\n then convert any new + ** \r\n back into \n */ + for(i=j=0; ipStmt, i); - sqlite3_snprintf(50,z,"%!.20g", r); - raw_printf(p->out, "%s", z); + sqlite3_uint64 ur; + memcpy(&ur,&r,sizeof(r)); + if( ur==0x7ff0000000000000LL ){ + raw_printf(p->out, "1e999"); + }else if( ur==0xfff0000000000000LL ){ + raw_printf(p->out, "-1e999"); + }else{ + sqlite3_snprintf(50,z,"%!.20g", r); + raw_printf(p->out, "%s", z); + } }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){ const void *pBlob = sqlite3_column_blob(p->pStmt, i); int nBlob = sqlite3_column_bytes(p->pStmt, i); @@ -2567,8 +2587,7 @@ int nAlloc = 0; /* Allocated size of p->aiIndent[], abYield */ int iOp; /* Index of operation in p->aiIndent[] */ - const char *azNext[] = { "Next", "Prev", "VPrev", "VNext", "SorterNext", - "NextIfOpen", "PrevIfOpen", 0 }; + const char *azNext[] = { "Next", "Prev", "VPrev", "VNext", "SorterNext", 0 }; const char *azYield[] = { "Yield", "SeekLT", "SeekGT", "RowSetRead", "Rewind", 0 }; const char *azGoto[] = { "Goto", 0 }; @@ -2618,7 +2637,9 @@ } nAlloc += 100; p->aiIndent = (int*)sqlite3_realloc64(p->aiIndent, nAlloc*sizeof(int)); + if( p->aiIndent==0 ) shell_out_of_memory(); abYield = (int*)sqlite3_realloc64(abYield, nAlloc*sizeof(int)); + if( abYield==0 ) shell_out_of_memory(); } abYield[iOp] = str_in_array(zOp, azYield); p->aiIndent[iOp] = 0; @@ -2972,6 +2993,7 @@ /* Reprepare pStmt before reactiving trace modes */ sqlite3_finalize(pStmt); sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( pArg ) pArg->pStmt = pStmt; } restore_debug_trace_modes(); } @@ -4346,6 +4368,7 @@ "SELECT total(length(sql)) FROM %s" }, }; int i; + unsigned iDataVersion; char *zSchemaTab; char *zDb = nArg>=2 ? azArg[1] : "main"; sqlite3_stmt *pStmt = 0; @@ -4398,6 +4421,8 @@ utf8_printf(p->out, "%-20s %d\n", aQuery[i].zName, val); } sqlite3_free(zSchemaTab); + sqlite3_file_control(p->db, zDb, SQLITE_FCNTL_DATA_VERSION, &iDataVersion); + utf8_printf(p->out, "%-20s %u\n", "data version", iDataVersion); return 0; } @@ -5284,7 +5309,8 @@ "SELECT " " ($dir || name)," " writefile(($dir || name), %s, mode, mtime) " - "FROM %s WHERE (%s) AND (data IS NULL OR $dirOnly = 0)"; + "FROM %s WHERE (%s) AND (data IS NULL OR $dirOnly = 0)" + " AND name NOT GLOB '*..[/\\]*'"; const char *azExtraArg[] = { "sqlar_uncompress(data, sz)", @@ -5853,7 +5879,8 @@ const char *zLike = 0; int i; int savedShowHeader = p->showHeader; - ShellClearFlag(p, SHFLG_PreserveRowid|SHFLG_Newlines); + int savedShellFlags = p->shellFlgs; + ShellClearFlag(p, SHFLG_PreserveRowid|SHFLG_Newlines|SHFLG_Echo); for(i=1; idb, "RELEASE dump;", 0, 0, 0); raw_printf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n"); p->showHeader = savedShowHeader; + p->shellFlgs = savedShellFlags; }else if( c=='e' && strncmp(azArg[0], "echo", n)==0 ){ @@ -8334,6 +8362,23 @@ stdin_is_interactive = isatty(0); stdout_is_console = isatty(1); +#if !defined(_WIN32_WCE) + if( getenv("SQLITE_DEBUG_BREAK") ){ + if( isatty(0) && isatty(2) ){ + fprintf(stderr, + "attach debugger to process %d and press any key to continue.\n", + GETPID()); + fgetc(stdin); + }else{ +#if defined(_WIN32) || defined(WIN32) + DebugBreak(); +#elif defined(SIGTRAP) + raise(SIGTRAP); +#endif + } + } +#endif + #if USE_SYSTEM_SQLITE+0!=1 if( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,60)!=0 ){ utf8_printf(stderr, "SQLite header and source version mismatch\n%s\n%s\n", diff -Nru lxd-3.0.2/dist/sqlite/src/sqlite3ext.h lxd-3.0.3/dist/sqlite/src/sqlite3ext.h --- lxd-3.0.2/dist/sqlite/src/sqlite3ext.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/sqlite3ext.h 2018-11-22 20:54:16.000000000 +0000 @@ -310,6 +310,12 @@ int (*str_errcode)(sqlite3_str*); int (*str_length)(sqlite3_str*); char *(*str_value)(sqlite3_str*); + int (*create_window_function)(sqlite3*,const char*,int,int,void*, + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInv)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*)); }; /* @@ -595,6 +601,8 @@ #define sqlite3_str_errcode sqlite3_api->str_errcode #define sqlite3_str_length sqlite3_api->str_length #define sqlite3_str_value sqlite3_api->str_value +/* Version 3.25.0 and later */ +#define sqlite3_create_window_function sqlite3_api->create_window_function #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) diff -Nru lxd-3.0.2/dist/sqlite/src/sqlite.h.in lxd-3.0.3/dist/sqlite/src/sqlite.h.in --- lxd-3.0.2/dist/sqlite/src/sqlite.h.in 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/sqlite.h.in 2018-11-22 20:54:16.000000000 +0000 @@ -472,6 +472,7 @@ */ #define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8)) #define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8)) +#define SQLITE_ERROR_SNAPSHOT (SQLITE_ERROR | (3<<8)) #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) @@ -513,6 +514,7 @@ #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) #define SQLITE_CANTOPEN_CONVPATH (SQLITE_CANTOPEN | (4<<8)) +#define SQLITE_CANTOPEN_DIRTYWAL (SQLITE_CANTOPEN | (5<<8)) /* Not Used */ #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8)) #define SQLITE_CORRUPT_SEQUENCE (SQLITE_CORRUPT | (2<<8)) #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8)) @@ -888,7 +890,8 @@ **
  • [[SQLITE_FCNTL_PERSIST_WAL]] ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the ** persistent [WAL | Write Ahead Log] setting. By default, the auxiliary -** write ahead log and shared memory files used for transaction control +** write ahead log ([WAL file]) and shared memory +** files used for transaction control ** are automatically deleted when the latest connection to the database ** closes. Setting persistent WAL mode causes those files to persist after ** close. Persisting the files is useful when other processes that do not @@ -1074,6 +1077,26 @@ ** a file lock using the xLock or xShmLock methods of the VFS to wait ** for up to M milliseconds before failing, where M is the single ** unsigned integer parameter. +** +**
  • [[SQLITE_FCNTL_DATA_VERSION]] +** The [SQLITE_FCNTL_DATA_VERSION] opcode is used to detect changes to +** a database file. The argument is a pointer to a 32-bit unsigned integer. +** The "data version" for the pager is written into the pointer. The +** "data version" changes whenever any change occurs to the corresponding +** database file, either through SQL statements on the same database +** connection or through transactions committed by separate database +** connections possibly in other processes. The [sqlite3_total_changes()] +** interface can be used to find if any database on the connection has changed, +** but that interface responds to changes on TEMP as well as MAIN and does +** not provide a mechanism to detect changes to MAIN only. Also, the +** [sqlite3_total_changes()] interface responds to internal changes only and +** omits changes made by other database connections. The +** [PRAGMA data_version] command provide a mechanism to detect changes to +** a single attached database that occur due to other database connections, +** but omits changes implemented by the database connection on which it is +** called. This file control is the only mechanism to detect changes that +** happen either internally or externally and that are associated with +** a particular attached database. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -1109,6 +1132,7 @@ #define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32 #define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33 #define SQLITE_FCNTL_LOCK_TIMEOUT 34 +#define SQLITE_FCNTL_DATA_VERSION 35 /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE @@ -2123,6 +2147,12 @@ ** with no schema and no content. The following process works even for ** a badly corrupted database file: **
      +**
    1. If the database connection is newly opened, make sure it has read the +** database schema by preparing then discarding some query against the +** database, or calling sqlite3_table_column_metadata(), ignoring any +** errors. This step is only necessary if the application desires to keep +** the database in WAL mode after the reset if it was in WAL mode before +** the reset. **
    2. sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0); **
    3. [sqlite3_exec](db, "[VACUUM]", 0, 0, 0); **
    4. sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0); @@ -2271,12 +2301,17 @@ ** program, the value returned reflects the number of rows modified by the ** previous INSERT, UPDATE or DELETE statement within the same trigger. ** -** See also the [sqlite3_total_changes()] interface, the -** [count_changes pragma], and the [changes() SQL function]. -** ** If a separate thread makes changes on the same database connection ** while [sqlite3_changes()] is running then the value returned ** is unpredictable and not meaningful. +** +** See also: +**
        +**
      • the [sqlite3_total_changes()] interface +**
      • the [count_changes pragma] +**
      • the [changes() SQL function] +**
      • the [data_version pragma] +**
      */ int sqlite3_changes(sqlite3*); @@ -2294,13 +2329,26 @@ ** count, but those made as part of REPLACE constraint resolution are ** not. ^Changes to a view that are intercepted by INSTEAD OF triggers ** are not counted. -** -** See also the [sqlite3_changes()] interface, the -** [count_changes pragma], and the [total_changes() SQL function]. ** +** This the [sqlite3_total_changes(D)] interface only reports the number +** of rows that changed due to SQL statement run against database +** connection D. Any changes by other database connections are ignored. +** To detect changes against a database file from other database +** connections use the [PRAGMA data_version] command or the +** [SQLITE_FCNTL_DATA_VERSION] [file control]. +** ** If a separate thread makes changes on the same database connection ** while [sqlite3_total_changes()] is running then the value ** returned is unpredictable and not meaningful. +** +** See also: +**
        +**
      • the [sqlite3_changes()] interface +**
      • the [count_changes pragma] +**
      • the [changes() SQL function] +**
      • the [data_version pragma] +**
      • the [SQLITE_FCNTL_DATA_VERSION] [file control] +**
      */ int sqlite3_total_changes(sqlite3*); @@ -3356,13 +3404,24 @@ ** [database connection] D failed, then the sqlite3_errcode(D) interface ** returns the numeric [result code] or [extended result code] for that ** API call. -** If the most recent API call was successful, -** then the return value from sqlite3_errcode() is undefined. ** ^The sqlite3_extended_errcode() ** interface is the same except that it always returns the ** [extended result code] even when extended result codes are ** disabled. ** +** The values returned by sqlite3_errcode() and/or +** sqlite3_extended_errcode() might change with each API call. +** Except, there are some interfaces that are guaranteed to never +** change the value of the error code. The error-code preserving +** interfaces are: +** +**
        +**
      • sqlite3_errcode() +**
      • sqlite3_extended_errcode() +**
      • sqlite3_errmsg() +**
      • sqlite3_errmsg16() +**
      +** ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language ** text that describes the error, as either UTF-8 or UTF-16 respectively. ** ^(Memory to hold the error message string is managed internally. @@ -4516,11 +4575,25 @@ ** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** -** ^(If a memory allocation error occurs during the evaluation of any -** of these routines, a default value is returned. The default value -** is either the integer 0, the floating point number 0.0, or a NULL -** pointer. Subsequent calls to [sqlite3_errcode()] will return -** [SQLITE_NOMEM].)^ +** As long as the input parameters are correct, these routines will only +** fail if an out-of-memory error occurs during a format conversion. +** Only the following subset of interfaces are subject to out-of-memory +** errors: +** +**
        +**
      • sqlite3_column_blob() +**
      • sqlite3_column_text() +**
      • sqlite3_column_text16() +**
      • sqlite3_column_bytes() +**
      • sqlite3_column_bytes16() +**
      +** +** If an out-of-memory error occurs, then the return value from these +** routines is the same as if the column had contained an SQL NULL value. +** Valid SQL NULL returns can be distinguished from out-of-memory errors +** by invoking the [sqlite3_errcode()] immediately after the suspect +** return value is obtained and before any +** other SQLite interface is called on the same [database connection]. */ const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); double sqlite3_column_double(sqlite3_stmt*, int iCol); @@ -4597,11 +4670,13 @@ ** ** ^These functions (collectively known as "function creation routines") ** are used to add SQL functions or aggregates or to redefine the behavior -** of existing SQL functions or aggregates. The only differences between -** these routines are the text encoding expected for -** the second parameter (the name of the function being created) -** and the presence or absence of a destructor callback for -** the application data pointer. +** of existing SQL functions or aggregates. The only differences between +** the three "sqlite3_create_function*" routines are the text encoding +** expected for the second parameter (the name of the function being +** created) and the presence or absence of a destructor callback for +** the application data pointer. Function sqlite3_create_window_function() +** is similar, but allows the user to supply the extra callback functions +** needed by [aggregate window functions]. ** ** ^The first parameter is the [database connection] to which the SQL ** function is to be added. ^If an application uses more than one database @@ -4647,7 +4722,8 @@ ** ^(The fifth parameter is an arbitrary pointer. The implementation of the ** function can gain access to this pointer using [sqlite3_user_data()].)^ ** -** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are +** ^The sixth, seventh and eighth parameters passed to the three +** "sqlite3_create_function*" functions, xFunc, xStep and xFinal, are ** pointers to C-language functions that implement the SQL function or ** aggregate. ^A scalar SQL function requires an implementation of the xFunc ** callback only; NULL pointers must be passed as the xStep and xFinal @@ -4656,15 +4732,24 @@ ** SQL function or aggregate, pass NULL pointers for all three function ** callbacks. ** -** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL, -** then it is destructor for the application data pointer. -** The destructor is invoked when the function is deleted, either by being -** overloaded or when the database connection closes.)^ -** ^The destructor is also invoked if the call to -** sqlite3_create_function_v2() fails. -** ^When the destructor callback of the tenth parameter is invoked, it -** is passed a single argument which is a copy of the application data -** pointer which was the fifth parameter to sqlite3_create_function_v2(). +** ^The sixth, seventh, eighth and ninth parameters (xStep, xFinal, xValue +** and xInverse) passed to sqlite3_create_window_function are pointers to +** C-language callbacks that implement the new function. xStep and xFinal +** must both be non-NULL. xValue and xInverse may either both be NULL, in +** which case a regular aggregate function is created, or must both be +** non-NULL, in which case the new function may be used as either an aggregate +** or aggregate window function. More details regarding the implementation +** of aggregate window functions are +** [user-defined window functions|available here]. +** +** ^(If the final parameter to sqlite3_create_function_v2() or +** sqlite3_create_window_function() is not NULL, then it is destructor for +** the application data pointer. The destructor is invoked when the function +** is deleted, either by being overloaded or when the database connection +** closes.)^ ^The destructor is also invoked if the call to +** sqlite3_create_function_v2() fails. ^When the destructor callback is +** invoked, it is passed a single argument which is a copy of the application +** data pointer which was the fifth parameter to sqlite3_create_function_v2(). ** ** ^It is permitted to register multiple implementations of the same ** functions with the same name but with either differing numbers of @@ -4717,6 +4802,18 @@ void (*xFinal)(sqlite3_context*), void(*xDestroy)(void*) ); +int sqlite3_create_window_function( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int eTextRep, + void *pApp, + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*) +); /* ** CAPI3REF: Text Encodings @@ -4859,6 +4956,28 @@ ** ** These routines must be called from the same thread as ** the SQL function that supplied the [sqlite3_value*] parameters. +** +** As long as the input parameter is correct, these routines can only +** fail if an out-of-memory error occurs during a format conversion. +** Only the following subset of interfaces are subject to out-of-memory +** errors: +** +**
        +**
      • sqlite3_value_blob() +**
      • sqlite3_value_text() +**
      • sqlite3_value_text16() +**
      • sqlite3_value_text16le() +**
      • sqlite3_value_text16be() +**
      • sqlite3_value_bytes() +**
      • sqlite3_value_bytes16() +**
      +** +** If an out-of-memory error occurs, then the return value from these +** routines is the same as if the column had contained an SQL NULL value. +** Valid SQL NULL returns can be distinguished from out-of-memory errors +** by invoking the [sqlite3_errcode()] immediately after the suspect +** return value is obtained and before any +** other SQLite interface is called on the same [database connection]. */ const void *sqlite3_value_blob(sqlite3_value*); double sqlite3_value_double(sqlite3_value*); @@ -6325,6 +6444,7 @@ #define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70 #define SQLITE_INDEX_CONSTRAINT_ISNULL 71 #define SQLITE_INDEX_CONSTRAINT_IS 72 +#define SQLITE_INDEX_CONSTRAINT_FUNCTION 150 /* ** CAPI3REF: Register A Virtual Table Implementation @@ -7001,6 +7121,7 @@ /* ** CAPI3REF: Low-Level Control Of Database Files ** METHOD: sqlite3 +** KEYWORDS: {file control} ** ** ^The [sqlite3_file_control()] interface makes a direct call to the ** xFileControl method for the [sqlite3_io_methods] object associated @@ -7015,11 +7136,18 @@ ** the xFileControl method. ^The return value of the xFileControl ** method becomes the return value of this routine. ** +** A few opcodes for [sqlite3_file_control()] are handled directly +** by the SQLite core and never invoke the +** sqlite3_io_methods.xFileControl method. ** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes ** a pointer to the underlying [sqlite3_file] object to be written into -** the space pointed to by the 4th parameter. ^The [SQLITE_FCNTL_FILE_POINTER] -** case is a short-circuit path which does not actually invoke the -** underlying sqlite3_io_methods.xFileControl method. +** the space pointed to by the 4th parameter. The +** [SQLITE_FCNTL_JOURNAL_POINTER] works similarly except that it returns +** the [sqlite3_file] object associated with the journal file instead of +** the main database. The [SQLITE_FCNTL_VFS_POINTER] opcode returns +** a pointer to the underlying [sqlite3_vfs] object for the file. +** The [SQLITE_FCNTL_DATA_VERSION] returns the data version counter +** from the pager. ** ** ^If the second parameter (zDbName) does not match the name of any ** open database file, then SQLITE_ERROR is returned. ^This error @@ -8838,7 +8966,6 @@ /* ** CAPI3REF: Database Snapshot ** KEYWORDS: {snapshot} {sqlite3_snapshot} -** EXPERIMENTAL ** ** An instance of the snapshot object records the state of a [WAL mode] ** database for some specific point in history. @@ -8855,11 +8982,6 @@ ** version of the database file so that it is possible to later open a new read ** transaction that sees that historical version of the database rather than ** the most recent version. -** -** The constructor for this object is [sqlite3_snapshot_get()]. The -** [sqlite3_snapshot_open()] method causes a fresh read transaction to refer -** to an historical snapshot (if possible). The destructor for -** sqlite3_snapshot objects is [sqlite3_snapshot_free()]. */ typedef struct sqlite3_snapshot { unsigned char hidden[48]; @@ -8867,7 +8989,7 @@ /* ** CAPI3REF: Record A Database Snapshot -** EXPERIMENTAL +** CONSTRUCTOR: sqlite3_snapshot ** ** ^The [sqlite3_snapshot_get(D,S,P)] interface attempts to make a ** new [sqlite3_snapshot] object that records the current state of @@ -8883,7 +9005,7 @@ ** in this case. ** **
        -**
      • The database handle must be in [autocommit mode]. +**
      • The database handle must not be in [autocommit mode]. ** **
      • Schema S of [database connection] D must be a [WAL mode] database. ** @@ -8906,7 +9028,7 @@ ** to avoid a memory leak. ** ** The [sqlite3_snapshot_get()] interface is only available when the -** SQLITE_ENABLE_SNAPSHOT compile-time option is used. +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ SQLITE_EXPERIMENTAL int sqlite3_snapshot_get( sqlite3 *db, @@ -8916,24 +9038,35 @@ /* ** CAPI3REF: Start a read transaction on an historical snapshot -** EXPERIMENTAL +** METHOD: sqlite3_snapshot +** +** ^The [sqlite3_snapshot_open(D,S,P)] interface either starts a new read +** transaction or upgrades an existing one for schema S of +** [database connection] D such that the read transaction refers to +** historical [snapshot] P, rather than the most recent change to the +** database. ^The [sqlite3_snapshot_open()] interface returns SQLITE_OK +** on success or an appropriate [error code] if it fails. +** +** ^In order to succeed, the database connection must not be in +** [autocommit mode] when [sqlite3_snapshot_open(D,S,P)] is called. If there +** is already a read transaction open on schema S, then the database handle +** must have no active statements (SELECT statements that have been passed +** to sqlite3_step() but not sqlite3_reset() or sqlite3_finalize()). +** SQLITE_ERROR is returned if either of these conditions is violated, or +** if schema S does not exist, or if the snapshot object is invalid. +** +** ^A call to sqlite3_snapshot_open() will fail to open if the specified +** snapshot has been overwritten by a [checkpoint]. In this case +** SQLITE_ERROR_SNAPSHOT is returned. +** +** If there is already a read transaction open when this function is +** invoked, then the same read transaction remains open (on the same +** database snapshot) if SQLITE_ERROR, SQLITE_BUSY or SQLITE_ERROR_SNAPSHOT +** is returned. If another error code - for example SQLITE_PROTOCOL or an +** SQLITE_IOERR error code - is returned, then the final state of the +** read transaction is undefined. If SQLITE_OK is returned, then the +** read transaction is now open on database snapshot P. ** -** ^The [sqlite3_snapshot_open(D,S,P)] interface starts a -** read transaction for schema S of -** [database connection] D such that the read transaction -** refers to historical [snapshot] P, rather than the most -** recent change to the database. -** ^The [sqlite3_snapshot_open()] interface returns SQLITE_OK on success -** or an appropriate [error code] if it fails. -** -** ^In order to succeed, a call to [sqlite3_snapshot_open(D,S,P)] must be -** the first operation following the [BEGIN] that takes the schema S -** out of [autocommit mode]. -** ^In other words, schema S must not currently be in -** a transaction for [sqlite3_snapshot_open(D,S,P)] to work, but the -** database connection D must be out of [autocommit mode]. -** ^A [snapshot] will fail to open if it has been overwritten by a -** [checkpoint]. ** ^(A call to [sqlite3_snapshot_open(D,S,P)] will fail if the ** database connection D does not know that the database file for ** schema S is in [WAL mode]. A database connection might not know @@ -8944,7 +9077,7 @@ ** database connection in order to make it ready to use snapshots.) ** ** The [sqlite3_snapshot_open()] interface is only available when the -** SQLITE_ENABLE_SNAPSHOT compile-time option is used. +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ SQLITE_EXPERIMENTAL int sqlite3_snapshot_open( sqlite3 *db, @@ -8954,20 +9087,20 @@ /* ** CAPI3REF: Destroy a snapshot -** EXPERIMENTAL +** DESTRUCTOR: sqlite3_snapshot ** ** ^The [sqlite3_snapshot_free(P)] interface destroys [sqlite3_snapshot] P. ** The application must eventually free every [sqlite3_snapshot] object ** using this routine to avoid a memory leak. ** ** The [sqlite3_snapshot_free()] interface is only available when the -** SQLITE_ENABLE_SNAPSHOT compile-time option is used. +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ SQLITE_EXPERIMENTAL void sqlite3_snapshot_free(sqlite3_snapshot*); /* ** CAPI3REF: Compare the ages of two snapshot handles. -** EXPERIMENTAL +** METHOD: sqlite3_snapshot ** ** The sqlite3_snapshot_cmp(P1, P2) interface is used to compare the ages ** of two valid snapshot handles. @@ -8986,6 +9119,9 @@ ** Otherwise, this API returns a negative value if P1 refers to an older ** snapshot than P2, zero if the two handles refer to the same database ** snapshot, and a positive value if P1 is a newer snapshot than P2. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_SNAPSHOT] option. */ SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( sqlite3_snapshot *p1, @@ -8994,23 +9130,26 @@ /* ** CAPI3REF: Recover snapshots from a wal file -** EXPERIMENTAL +** METHOD: sqlite3_snapshot ** -** If all connections disconnect from a database file but do not perform -** a checkpoint, the existing wal file is opened along with the database -** file the next time the database is opened. At this point it is only -** possible to successfully call sqlite3_snapshot_open() to open the most -** recent snapshot of the database (the one at the head of the wal file), -** even though the wal file may contain other valid snapshots for which -** clients have sqlite3_snapshot handles. +** If a [WAL file] remains on disk after all database connections close +** (either through the use of the [SQLITE_FCNTL_PERSIST_WAL] [file control] +** or because the last process to have the database opened exited without +** calling [sqlite3_close()]) and a new connection is subsequently opened +** on that database and [WAL file], the [sqlite3_snapshot_open()] interface +** will only be able to open the last transaction added to the WAL file +** even though the WAL file contains other valid transactions. ** -** This function attempts to scan the wal file associated with database zDb +** This function attempts to scan the WAL file associated with database zDb ** of database handle db and make all valid snapshots available to ** sqlite3_snapshot_open(). It is an error if there is already a read -** transaction open on the database, or if the database is not a wal mode +** transaction open on the database, or if the database is not a WAL mode ** database. ** ** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_SNAPSHOT] option. */ SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); @@ -9121,7 +9260,7 @@ ** in the P argument is held in memory obtained from [sqlite3_malloc64()] ** and that SQLite should take ownership of this memory and automatically ** free it when it has finished using it. Without this flag, the caller -** is resposible for freeing any dynamically allocated memory. +** is responsible for freeing any dynamically allocated memory. ** ** The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to ** grow the size of the database using calls to [sqlite3_realloc64()]. This diff -Nru lxd-3.0.2/dist/sqlite/src/sqliteInt.h lxd-3.0.3/dist/sqlite/src/sqliteInt.h --- lxd-3.0.2/dist/sqlite/src/sqliteInt.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/sqliteInt.h 2018-11-22 20:54:16.000000000 +0000 @@ -791,7 +791,8 @@ # if defined(__SIZEOF_POINTER__) # define SQLITE_PTRSIZE __SIZEOF_POINTER__ # elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(_M_ARM) || defined(__arm__) || defined(__x86) + defined(_M_ARM) || defined(__arm__) || defined(__x86) || \ + (defined(__TOS_AIX__) && !defined(__64BIT__)) # define SQLITE_PTRSIZE 4 # else # define SQLITE_PTRSIZE 8 @@ -832,7 +833,7 @@ # if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ - defined(__arm__) + defined(__arm__) || defined(_M_ARM64) # define SQLITE_BYTEORDER 1234 # elif defined(sparc) || defined(__ppc__) # define SQLITE_BYTEORDER 4321 @@ -1087,6 +1088,7 @@ typedef struct Parse Parse; typedef struct PreUpdate PreUpdate; typedef struct PrintfArguments PrintfArguments; +typedef struct RenameToken RenameToken; typedef struct RowSet RowSet; typedef struct Savepoint Savepoint; typedef struct Select Select; @@ -1107,8 +1109,35 @@ typedef struct VtabCtx VtabCtx; typedef struct Walker Walker; typedef struct WhereInfo WhereInfo; +typedef struct Window Window; typedef struct With With; + +/* +** The bitmask datatype defined below is used for various optimizations. +** +** Changing this from a 64-bit to a 32-bit type limits the number of +** tables in a join to 32 instead of 64. But it also reduces the size +** of the library by 738 bytes on ix86. +*/ +#ifdef SQLITE_BITMASK_TYPE + typedef SQLITE_BITMASK_TYPE Bitmask; +#else + typedef u64 Bitmask; +#endif + +/* +** The number of bits in a Bitmask. "BMS" means "BitMask Size". +*/ +#define BMS ((int)(sizeof(Bitmask)*8)) + +/* +** A bit in a Bitmask +*/ +#define MASKBIT(n) (((Bitmask)1)<<(n)) +#define MASKBIT32(n) (((unsigned int)1)<<(n)) +#define ALLBITS ((Bitmask)-1) + /* A VList object records a mapping between parameters/variables/wildcards ** in the SQL statement (such as $abc, @pqr, or :xyz) and the integer ** variable number associated with that parameter. See the format description @@ -1507,6 +1536,7 @@ #define SQLITE_EnableQPSG 0x00800000 /* Query Planner Stability Guarantee*/ #define SQLITE_TriggerEQP 0x01000000 /* Show trigger EXPLAIN QUERY PLAN */ #define SQLITE_ResetDatabase 0x02000000 /* Reset the database */ +#define SQLITE_LegacyAlter 0x04000000 /* Legacy ALTER TABLE behaviour */ /* Flags used only if debugging */ #ifdef SQLITE_DEBUG @@ -1531,7 +1561,7 @@ ** selectively disable various optimizations. */ #define SQLITE_QueryFlattener 0x0001 /* Query flattening */ -#define SQLITE_ColumnCache 0x0002 /* Column cache */ + /* 0x0002 available for reuse */ #define SQLITE_GroupByOrder 0x0004 /* GROUPBY cover of ORDERBY */ #define SQLITE_FactorOutConst 0x0008 /* Constant factoring */ #define SQLITE_DistinctOpt 0x0010 /* DISTINCT using indexes */ @@ -1545,6 +1575,8 @@ /* TH3 expects the Stat34 ^^^^^^ value to be 0x0800. Don't change it */ #define SQLITE_PushDown 0x1000 /* The push-down optimization */ #define SQLITE_SimplifyJoin 0x2000 /* Convert LEFT JOIN to JOIN */ +#define SQLITE_SkipScan 0x4000 /* Skip-scans */ +#define SQLITE_PropagateConst 0x8000 /* The constant propagation opt */ #define SQLITE_AllOpts 0xffff /* All optimizations */ /* @@ -1583,11 +1615,13 @@ */ struct FuncDef { i8 nArg; /* Number of arguments. -1 means unlimited */ - u16 funcFlags; /* Some combination of SQLITE_FUNC_* */ + u32 funcFlags; /* Some combination of SQLITE_FUNC_* */ void *pUserData; /* User data parameter */ FuncDef *pNext; /* Next function with same name */ void (*xSFunc)(sqlite3_context*,int,sqlite3_value**); /* func or agg-step */ void (*xFinalize)(sqlite3_context*); /* Agg finalizer */ + void (*xValue)(sqlite3_context*); /* Current agg value */ + void (*xInverse)(sqlite3_context*,int,sqlite3_value**); /* inverse agg-step */ const char *zName; /* SQL name of the function. */ union { FuncDef *pHash; /* Next with a different name but the same hash */ @@ -1644,6 +1678,8 @@ ** single query - might change over time */ #define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */ #define SQLITE_FUNC_OFFSET 0x8000 /* Built-in sqlite_offset() function */ +#define SQLITE_FUNC_WINDOW 0x10000 /* Built-in window-only function */ +#define SQLITE_FUNC_WINDOW_SIZE 0x20000 /* Requires partition size as arg. */ /* ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are @@ -1678,6 +1714,12 @@ ** are interpreted in the same way as the first 4 parameters to ** FUNCTION(). ** +** WFUNCTION(zName, nArg, iArg, xStep, xFinal, xValue, xInverse) +** Used to create an aggregate function definition implemented by +** the C functions xStep and xFinal. The first four parameters +** are interpreted in the same way as the first 4 parameters to +** FUNCTION(). +** ** LIKEFUNC(zName, nArg, pArg, flags) ** Used to create a scalar function definition of a function zName ** that accepts nArg arguments and is implemented by a call to C @@ -1688,31 +1730,35 @@ */ #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} } #define VFUNCTION(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} } #define DFUNCTION(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8, \ - 0, 0, xFunc, 0, #zName, {0} } + 0, 0, xFunc, 0, 0, 0, #zName, {0} } #define PURE_DATE(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|SQLITE_FUNC_CONSTANT, \ - (void*)&sqlite3Config, 0, xFunc, 0, #zName, {0} } + (void*)&sqlite3Config, 0, xFunc, 0, 0, 0, #zName, {0} } #define FUNCTION2(zName, nArg, iArg, bNC, xFunc, extraFlags) \ {nArg,SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL)|extraFlags,\ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} } #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ - pArg, 0, xFunc, 0, #zName, } + pArg, 0, xFunc, 0, 0, 0, #zName, } #define LIKEFUNC(zName, nArg, arg, flags) \ {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|flags, \ - (void *)arg, 0, likeFunc, 0, #zName, {0} } -#define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \ + (void *)arg, 0, likeFunc, 0, 0, 0, #zName, {0} } +#define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal, xValue) \ {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL), \ - SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}} + SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,xValue,0,#zName, {0}} #define AGGREGATE2(zName, nArg, arg, nc, xStep, xFinal, extraFlags) \ {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|extraFlags, \ - SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}} + SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,xFinal,0,#zName, {0}} + +#define WAGGREGATE(zName, nArg, arg, nc, xStep, xFinal, xValue, xInverse, f) \ + {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|f, \ + SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,xValue,xInverse,#zName, {0}} /* ** All current savepoints are stored in a linked list starting at @@ -2198,6 +2244,7 @@ tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this index */ tRowcnt nRowEst0; /* Non-logarithmic number of rows in the index */ #endif + Bitmask colNotIdxed; /* 0 for unindexed columns in pTab */ }; /* @@ -2236,9 +2283,11 @@ ** Each token coming out of the lexer is an instance of ** this structure. Tokens are also used as part of an expression. ** -** Note if Token.z==0 then Token.dyn and Token.n are undefined and -** may contain random values. Do not make any assumptions about Token.dyn -** and Token.n when Token.z==0. +** The memory that "z" points to is owned by other objects. Take care +** that the owner of the "z" string does not deallocate the string before +** the Token goes out of scope! Very often, the "z" points to some place +** in the middle of the Parse.zSql text. But it might also point to a +** static string. */ struct Token { const char *z; /* Text of the token. Not NULL-terminated! */ @@ -2413,6 +2462,9 @@ AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */ Table *pTab; /* Table for TK_COLUMN expressions. Can be NULL ** for a column of an index on an expression */ +#ifndef SQLITE_OMIT_WINDOWFUNC + Window *pWin; /* Window definition for window functions */ +#endif }; /* @@ -2421,7 +2473,7 @@ #define EP_FromJoin 0x000001 /* Originates in ON/USING clause of outer join */ #define EP_Agg 0x000002 /* Contains one or more aggregate functions */ #define EP_HasFunc 0x000004 /* Contains one or more functions of any kind */ - /* 0x000008 // available for use */ +#define EP_FixedCol 0x000008 /* TK_Column with a known fixed value */ #define EP_Distinct 0x000010 /* Aggregate function with DISTINCT keyword */ #define EP_VarSelect 0x000020 /* pSelect is correlated, not constant */ #define EP_DblQuoted 0x000040 /* token.z was originally in "..." */ @@ -2544,31 +2596,6 @@ }; /* -** The bitmask datatype defined below is used for various optimizations. -** -** Changing this from a 64-bit to a 32-bit type limits the number of -** tables in a join to 32 instead of 64. But it also reduces the size -** of the library by 738 bytes on ix86. -*/ -#ifdef SQLITE_BITMASK_TYPE - typedef SQLITE_BITMASK_TYPE Bitmask; -#else - typedef u64 Bitmask; -#endif - -/* -** The number of bits in a Bitmask. "BMS" means "BitMask Size". -*/ -#define BMS ((int)(sizeof(Bitmask)*8)) - -/* -** A bit in a Bitmask -*/ -#define MASKBIT(n) (((Bitmask)1)<<(n)) -#define MASKBIT32(n) (((unsigned int)1)<<(n)) -#define ALLBITS ((Bitmask)-1) - -/* ** The following structure describes the FROM clause of a SELECT statement. ** Each table or subquery in the FROM clause is a separate element of ** the SrcList.a[] array. @@ -2699,6 +2726,7 @@ int nRef; /* Number of names resolved by this context */ int nErr; /* Number of errors encountered while resolving names */ u16 ncFlags; /* Zero or more NC_* flags defined below */ + Select *pWinSelect; /* SELECT statement for any window functions */ }; /* @@ -2721,6 +2749,7 @@ #define NC_UUpsert 0x0200 /* True if uNC.pUpsert is used */ #define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */ #define NC_Complex 0x2000 /* True if a function or subquery seen */ +#define NC_AllowWin 0x4000 /* Window functions are allowed here */ /* ** An instance of the following object describes a single ON CONFLICT @@ -2775,9 +2804,7 @@ LogEst nSelectRow; /* Estimated number of result rows */ u32 selFlags; /* Various SF_* values */ int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */ -#if SELECTTRACE_ENABLED - char zSelName[12]; /* Symbolic name of this SELECT use for debugging */ -#endif + u32 selId; /* Unique identifier number for this SELECT */ int addrOpenEphm[2]; /* OP_OpenEphem opcodes related to this select */ SrcList *pSrc; /* The FROM clause */ Expr *pWhere; /* The WHERE clause */ @@ -2788,6 +2815,10 @@ Select *pNext; /* Next select to the left in a compound */ Expr *pLimit; /* LIMIT expression. NULL means not used. */ With *pWith; /* WITH clause attached to this select. Or NULL. */ +#ifndef SQLITE_OMIT_WINDOWFUNC + Window *pWin; /* List of window functions */ + Window *pWinDefn; /* List of named window definitions */ +#endif }; /* @@ -2932,13 +2963,6 @@ }; /* -** Size of the column cache -*/ -#ifndef SQLITE_N_COLCACHE -# define SQLITE_N_COLCACHE 10 -#endif - -/* ** At least one instance of the following structure is created for each ** trigger that may be fired while parsing an INSERT, UPDATE or DELETE ** statement. All such objects are stored in the linked list headed at @@ -3013,7 +3037,6 @@ u8 hasCompound; /* Need to invoke convertCompoundSelectToSubquery() */ u8 okConstFactor; /* OK to factor out constants */ u8 disableLookaside; /* Number of times lookaside has been disabled */ - u8 nColCache; /* Number of entries in aColCache[] */ int nRangeReg; /* Size of the temporary register block */ int iRangeReg; /* First register in temporary register block */ int nErr; /* Number of errors seen */ @@ -3023,8 +3046,6 @@ int szOpAlloc; /* Bytes of memory space allocated for Vdbe.aOp[] */ int iSelfTab; /* Table associated with an index on expr, or negative ** of the base register during check-constraint eval */ - int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */ - int iCacheCnt; /* Counter used to generate aColCache[].lru values */ int nLabel; /* Number of labels used */ int *aLabel; /* Space to hold the labels */ ExprList *pConstExpr;/* Constant expressions */ @@ -3034,9 +3055,7 @@ int regRowid; /* Register holding rowid of CREATE TABLE entry */ int regRoot; /* Register holding root page number for new objects */ int nMaxArg; /* Max args passed to user function by sub-program */ -#if SELECTTRACE_ENABLED - int nSelect; /* Number of SELECT statements seen */ -#endif + int nSelect; /* Number of SELECT stmts. Counter for Select.selId */ #ifndef SQLITE_OMIT_SHARED_CACHE int nTableLock; /* Number of locks in aTableLock */ TableLock *aTableLock; /* Required table locks for shared-cache mode */ @@ -3056,17 +3075,9 @@ ** Fields above must be initialized to zero. The fields that follow, ** down to the beginning of the recursive section, do not need to be ** initialized as they will be set before being used. The boundary is - ** determined by offsetof(Parse,aColCache). + ** determined by offsetof(Parse,aTempReg). **************************************************************************/ - struct yColCache { - int iTable; /* Table cursor number */ - i16 iColumn; /* Table column number */ - u8 tempReg; /* iReg is a temp register that needs to be freed */ - int iLevel; /* Nesting level */ - int iReg; /* Reg with value of this column. 0 means none. */ - int lru; /* Least recently used entry has the smallest value */ - } aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */ int aTempReg[8]; /* Holding area for temporary registers */ Token sNameToken; /* Token with unqualified schema object name */ @@ -3081,8 +3092,10 @@ ynVar nVar; /* Number of '?' variables seen in the SQL so far */ u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */ u8 explain; /* True if the EXPLAIN flag is found on the query */ +#if !(defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_OMIT_ALTERTABLE)) + u8 eParseMode; /* PARSE_MODE_XXX constant */ +#endif #ifndef SQLITE_OMIT_VIRTUALTABLE - u8 declareVtab; /* True if inside sqlite3_declare_vtab() */ int nVtabLock; /* Number of virtual tables to lock */ #endif int nHeight; /* Expression tree height of current sub-select */ @@ -3093,6 +3106,7 @@ Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */ const char *zTail; /* All SQL text past the last semicolon parsed */ Table *pNewTable; /* A table being constructed by CREATE TABLE */ + Index *pNewIndex; /* An index being constructed by CREATE INDEX */ Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */ const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */ #ifndef SQLITE_OMIT_VIRTUALTABLE @@ -3103,12 +3117,20 @@ TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */ With *pWith; /* Current WITH clause, or NULL */ With *pWithToFree; /* Free this WITH object at the end of the parse */ +#ifndef SQLITE_OMIT_ALTERTABLE + RenameToken *pRename; /* Tokens subject to renaming by ALTER TABLE */ +#endif }; +#define PARSE_MODE_NORMAL 0 +#define PARSE_MODE_DECLARE_VTAB 1 +#define PARSE_MODE_RENAME_COLUMN 2 +#define PARSE_MODE_RENAME_TABLE 3 + /* ** Sizes and pointers of various parts of the Parse object. */ -#define PARSE_HDR_SZ offsetof(Parse,aColCache) /* Recursive part w/o aColCache*/ +#define PARSE_HDR_SZ offsetof(Parse,aTempReg) /* Recursive part w/o aColCache*/ #define PARSE_RECURSE_SZ offsetof(Parse,sLastToken) /* Recursive part */ #define PARSE_TAIL_SZ (sizeof(Parse)-PARSE_RECURSE_SZ) /* Non-recursive part */ #define PARSE_TAIL(X) (((char*)(X))+PARSE_RECURSE_SZ) /* Pointer to tail */ @@ -3119,7 +3141,19 @@ #ifdef SQLITE_OMIT_VIRTUALTABLE #define IN_DECLARE_VTAB 0 #else - #define IN_DECLARE_VTAB (pParse->declareVtab) + #define IN_DECLARE_VTAB (pParse->eParseMode==PARSE_MODE_DECLARE_VTAB) +#endif + +#if defined(SQLITE_OMIT_ALTERTABLE) + #define IN_RENAME_OBJECT 0 +#else + #define IN_RENAME_OBJECT (pParse->eParseMode>=PARSE_MODE_RENAME_COLUMN) +#endif + +#if defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_OMIT_ALTERTABLE) + #define IN_SPECIAL_PARSE 0 +#else + #define IN_SPECIAL_PARSE (pParse->eParseMode!=PARSE_MODE_NORMAL) #endif /* @@ -3145,6 +3179,7 @@ */ #define OPFLAG_NCHANGE 0x01 /* OP_Insert: Set to update db->nChange */ /* Also used in P2 (not P5) of OP_Delete */ +#define OPFLAG_NOCHNG 0x01 /* OP_VColumn nochange for UPDATE */ #define OPFLAG_EPHEM 0x01 /* OP_Column: Ephemeral output is ok */ #define OPFLAG_LASTROWID 0x20 /* Set to update db->lastRowid */ #define OPFLAG_ISUPDATE 0x04 /* This OP_Insert is an sql UPDATE */ @@ -3298,9 +3333,15 @@ char **pzErrMsg; /* Error message stored here */ int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */ int rc; /* Result code stored here */ + u32 mInitFlags; /* Flags controlling error messages */ } InitData; /* +** Allowed values for mInitFlags +*/ +#define INITFLAG_AlterTable 0x0001 /* This is a reparse after ALTER TABLE */ + +/* ** Structure containing global configuration data for the SQLite library. ** ** This structure also contains some state information. @@ -3350,7 +3391,7 @@ /* The following callback (if not NULL) is invoked on every VDBE branch ** operation. Set the callback using SQLITE_TESTCTRL_VDBE_COVERAGE. */ - void (*xVdbeBranch)(void*,int iSrcLine,u8 eThis,u8 eMx); /* Callback */ + void (*xVdbeBranch)(void*,unsigned iSrcLine,u8 eThis,u8 eMx); /* Callback */ void *pVdbeBranchArg; /* 1st argument */ #endif #ifndef SQLITE_UNTESTABLE @@ -3401,6 +3442,9 @@ struct IdxExprTrans *pIdxTrans; /* Convert idxed expr to column */ ExprList *pGroupBy; /* GROUP BY clause */ Select *pSelect; /* HAVING to WHERE clause ctx */ + struct WindowRewrite *pRewrite; /* Window rewrite context */ + struct WhereConst *pConst; /* WHERE clause constants */ + struct RenameCtx *pRename; /* RENAME COLUMN context */ } u; }; @@ -3452,6 +3496,68 @@ #endif /* SQLITE_DEBUG */ /* +** This object is used in varioius ways, all related to window functions +** +** (1) A single instance of this structure is attached to the +** the Expr.pWin field for each window function in an expression tree. +** This object holds the information contained in the OVER clause, +** plus additional fields used during code generation. +** +** (2) All window functions in a single SELECT form a linked-list +** attached to Select.pWin. The Window.pFunc and Window.pExpr +** fields point back to the expression that is the window function. +** +** (3) The terms of the WINDOW clause of a SELECT are instances of this +** object on a linked list attached to Select.pWinDefn. +** +** The uses (1) and (2) are really the same Window object that just happens +** to be accessible in two different ways. Use (3) is are separate objects. +*/ +struct Window { + char *zName; /* Name of window (may be NULL) */ + ExprList *pPartition; /* PARTITION BY clause */ + ExprList *pOrderBy; /* ORDER BY clause */ + u8 eType; /* TK_RANGE or TK_ROWS */ + u8 eStart; /* UNBOUNDED, CURRENT, PRECEDING or FOLLOWING */ + u8 eEnd; /* UNBOUNDED, CURRENT, PRECEDING or FOLLOWING */ + Expr *pStart; /* Expression for " PRECEDING" */ + Expr *pEnd; /* Expression for " FOLLOWING" */ + Window *pNextWin; /* Next window function belonging to this SELECT */ + Expr *pFilter; /* The FILTER expression */ + FuncDef *pFunc; /* The function */ + int iEphCsr; /* Partition buffer or Peer buffer */ + int regAccum; + int regResult; + int csrApp; /* Function cursor (used by min/max) */ + int regApp; /* Function register (also used by min/max) */ + int regPart; /* First in a set of registers holding PARTITION BY + ** and ORDER BY values for the window */ + Expr *pOwner; /* Expression object this window is attached to */ + int nBufferCol; /* Number of columns in buffer table */ + int iArgCol; /* Offset of first argument for this function */ +}; + +#ifndef SQLITE_OMIT_WINDOWFUNC +void sqlite3WindowDelete(sqlite3*, Window*); +void sqlite3WindowListDelete(sqlite3 *db, Window *p); +Window *sqlite3WindowAlloc(Parse*, int, int, Expr*, int , Expr*); +void sqlite3WindowAttach(Parse*, Expr*, Window*); +int sqlite3WindowCompare(Parse*, Window*, Window*); +void sqlite3WindowCodeInit(Parse*, Window*); +void sqlite3WindowCodeStep(Parse*, Select*, WhereInfo*, int, int); +int sqlite3WindowRewrite(Parse*, Select*); +int sqlite3ExpandSubquery(Parse*, struct SrcList_item*); +void sqlite3WindowUpdate(Parse*, Window*, Window*, FuncDef*); +Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p); +Window *sqlite3WindowListDup(sqlite3 *db, Window *p); +void sqlite3WindowFunctions(void); +#else +# define sqlite3WindowDelete(a,b) +# define sqlite3WindowFunctions() +# define sqlite3WindowAttach(a,b,c) +#endif + +/* ** Assuming zIn points to the first byte of a UTF-8 character, ** advance zIn to point to the first byte of the next UTF-8 character. */ @@ -3538,9 +3644,7 @@ # define sqlite3Tolower(x) tolower((unsigned char)(x)) # define sqlite3Isquote(x) ((x)=='"'||(x)=='\''||(x)=='['||(x)=='`') #endif -#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS int sqlite3IsIdChar(u8); -#endif /* ** Internal function prototypes @@ -3665,6 +3769,10 @@ void sqlite3TreeViewExprList(TreeView*, const ExprList*, u8, const char*); void sqlite3TreeViewSelect(TreeView*, const Select*, u8); void sqlite3TreeViewWith(TreeView*, const With*, u8); +#ifndef SQLITE_OMIT_WINDOWFUNC + void sqlite3TreeViewWindow(TreeView*, const Window*, u8); + void sqlite3TreeViewWinFunc(TreeView*, const Window*, u8); +#endif #endif @@ -3689,7 +3797,7 @@ Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*); void sqlite3PExprAddSelect(Parse*, Expr*, Select*); Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*); -Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*); +Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int); void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); void sqlite3ExprDelete(sqlite3*, Expr*); ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); @@ -3701,6 +3809,7 @@ u32 sqlite3ExprListFlags(const ExprList*); int sqlite3Init(sqlite3*, char**); int sqlite3InitCallback(void*, int, char**, char**); +int sqlite3InitOne(sqlite3*, int, char**, u32); void sqlite3Pragma(Parse*,Token*,Token*,Token*,int); #ifndef SQLITE_OMIT_VIRTUALTABLE Module *sqlite3PragmaVtabRegister(sqlite3*,const char *zName); @@ -3750,8 +3859,9 @@ int sqlite3BitvecBuiltinTest(int,int*); #endif -RowSet *sqlite3RowSetInit(sqlite3*, void*, unsigned int); -void sqlite3RowSetClear(RowSet*); +RowSet *sqlite3RowSetInit(sqlite3*); +void sqlite3RowSetDelete(void*); +void sqlite3RowSetClear(void*); void sqlite3RowSetInsert(RowSet*, i64); int sqlite3RowSetTest(RowSet*, int iBatch, i64); int sqlite3RowSetNext(RowSet*, i64*); @@ -3770,6 +3880,7 @@ void sqlite3DropTable(Parse*, SrcList*, int, int); void sqlite3CodeDropTable(Parse*, Table*, int, int); void sqlite3DeleteTable(sqlite3*, Table*); +void sqlite3FreeIndex(sqlite3*, Index*); #ifndef SQLITE_OMIT_AUTOINCREMENT void sqlite3AutoincrementBegin(Parse *pParse); void sqlite3AutoincrementEnd(Parse *pParse); @@ -3779,7 +3890,7 @@ #endif void sqlite3Insert(Parse*, SrcList*, Select*, IdList*, int, Upsert*); void *sqlite3ArrayAllocate(sqlite3*,void*,int,int*,int*); -IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*); +IdList *sqlite3IdListAppend(Parse*, IdList*, Token*); int sqlite3IdListIndex(IdList*,const char*); SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int); SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*); @@ -3814,7 +3925,7 @@ LogEst sqlite3WhereOutputRowCount(WhereInfo*); int sqlite3WhereIsDistinct(WhereInfo*); int sqlite3WhereIsOrdered(WhereInfo*); -int sqlite3WhereOrderedInnerLoop(WhereInfo*); +int sqlite3WhereOrderByLimitOptLabel(WhereInfo*); int sqlite3WhereIsSorted(WhereInfo*); int sqlite3WhereContinueLabel(WhereInfo*); int sqlite3WhereBreakLabel(WhereInfo*); @@ -3824,15 +3935,8 @@ #define ONEPASS_MULTI 2 /* ONEPASS is valid for multiple rows */ void sqlite3ExprCodeLoadIndexColumn(Parse*, Index*, int, int, int); int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int, u8); -void sqlite3ExprCodeGetColumnToReg(Parse*, Table*, int, int, int); void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int); void sqlite3ExprCodeMove(Parse*, int, int, int); -void sqlite3ExprCacheStore(Parse*, int, int, int); -void sqlite3ExprCachePush(Parse*); -void sqlite3ExprCachePop(Parse*); -void sqlite3ExprCacheRemove(Parse*, int, int); -void sqlite3ExprCacheClear(Parse*); -void sqlite3ExprCacheAffinityChange(Parse*, int, int); void sqlite3ExprCode(Parse*, Expr*, int); void sqlite3ExprCodeCopy(Parse*, Expr*, int); void sqlite3ExprCodeFactorable(Parse*, Expr*, int); @@ -3920,11 +4024,6 @@ SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int); IdList *sqlite3IdListDup(sqlite3*,IdList*); Select *sqlite3SelectDup(sqlite3*,Select*,int); -#if SELECTTRACE_ENABLED -void sqlite3SelectSetName(Select*,const char*); -#else -# define sqlite3SelectSetName(A,B) -#endif void sqlite3InsertBuiltinFuncs(FuncDef*,int); FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,u8,u8); void sqlite3RegisterBuiltinFunctions(void); @@ -3953,12 +4052,12 @@ void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*); TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*, const char*,const char*); - TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*, + TriggerStep *sqlite3TriggerInsertStep(Parse*,Token*, IdList*, Select*,u8,Upsert*, const char*,const char*); - TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8, + TriggerStep *sqlite3TriggerUpdateStep(Parse*,Token*,ExprList*, Expr*, u8, const char*,const char*); - TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*, + TriggerStep *sqlite3TriggerDeleteStep(Parse*,Token*, Expr*, const char*,const char*); void sqlite3DeleteTrigger(sqlite3*, Trigger*); void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*); @@ -4073,6 +4172,7 @@ const char *sqlite3ErrStr(int); int sqlite3ReadSchema(Parse *pParse); CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int); +int sqlite3IsBinary(const CollSeq*); CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName); CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr); CollSeq *sqlite3ExprNNCollSeq(Parse *pParse, Expr *pExpr); @@ -4125,9 +4225,10 @@ void sqlite3Reindex(Parse*, Token*, Token*); void sqlite3AlterFunctions(void); void sqlite3AlterRenameTable(Parse*, SrcList*, Token*); +void sqlite3AlterRenameColumn(Parse*, SrcList*, Token*, Token*); int sqlite3GetToken(const unsigned char *, int *); void sqlite3NestedParse(Parse*, const char*, ...); -void sqlite3ExpirePreparedStatements(sqlite3*); +void sqlite3ExpirePreparedStatements(sqlite3*, int); int sqlite3CodeSubselect(Parse*, Expr *, int, int); void sqlite3SelectPrep(Parse*, Select*, NameContext*); void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p); @@ -4140,6 +4241,10 @@ void sqlite3ColumnDefault(Vdbe *, Table *, int, int); void sqlite3AlterFinishAddColumn(Parse *, Token *); void sqlite3AlterBeginAddColumn(Parse *, SrcList *); +void *sqlite3RenameTokenMap(Parse*, void*, Token*); +void sqlite3RenameTokenRemap(Parse*, void *pTo, void *pFrom); +void sqlite3RenameExprUnmap(Parse*, Expr*); +void sqlite3RenameExprlistUnmap(Parse*, ExprList*); CollSeq *sqlite3GetCollSeq(Parse*, u8, CollSeq *, const char*); char sqlite3AffinityType(const char*, Column*); void sqlite3Analyze(Parse*, Token*, Token*); @@ -4158,12 +4263,17 @@ void sqlite3KeyInfoUnref(KeyInfo*); KeyInfo *sqlite3KeyInfoRef(KeyInfo*); KeyInfo *sqlite3KeyInfoOfIndex(Parse*, Index*); +KeyInfo *sqlite3KeyInfoFromExprList(Parse*, ExprList*, int, int); + #ifdef SQLITE_DEBUG int sqlite3KeyInfoIsWriteable(KeyInfo*); #endif int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, void (*)(sqlite3_context*,int,sqlite3_value **), - void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*), + void (*)(sqlite3_context*,int,sqlite3_value **), + void (*)(sqlite3_context*), + void (*)(sqlite3_context*), + void (*)(sqlite3_context*,int,sqlite3_value **), FuncDestructor *pDestructor ); void sqlite3NoopDestructor(void*); @@ -4204,6 +4314,7 @@ void sqlite3ParserFree(void*, void(*)(void*)); #endif void sqlite3Parser(void*, int, Token); +int sqlite3ParserFallback(int); #ifdef YYTRACKMAXSTACKDEPTH int sqlite3ParserStackPeak(void*); #endif diff -Nru lxd-3.0.2/dist/sqlite/src/tclsqlite.c lxd-3.0.3/dist/sqlite/src/tclsqlite.c --- lxd-3.0.2/dist/sqlite/src/tclsqlite.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/tclsqlite.c 2018-11-22 20:54:16.000000000 +0000 @@ -60,6 +60,7 @@ /* Used to get the current process ID */ #if !defined(_WIN32) +# include # include # define GETPID getpid #elif !defined(_WIN32_WCE) @@ -69,6 +70,8 @@ # endif # include # endif +# include +# define isatty(h) _isatty(h) # define GETPID (int)GetCurrentProcessId #endif @@ -3494,6 +3497,7 @@ flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX; #endif + if( objc==1 ) return sqliteCmdUsage(interp, objv); if( objc==2 ){ zArg = Tcl_GetStringFromObj(objv[1], 0); if( strcmp(zArg,"-version")==0 ){ @@ -3733,11 +3737,19 @@ #endif #if !defined(_WIN32_WCE) - if( getenv("BREAK") ){ - fprintf(stderr, - "attach debugger to process %d and press any key to continue.\n", - GETPID()); - fgetc(stdin); + if( getenv("SQLITE_DEBUG_BREAK") ){ + if( isatty(0) && isatty(2) ){ + fprintf(stderr, + "attach debugger to process %d and press any key to continue.\n", + GETPID()); + fgetc(stdin); + }else{ +#if defined(_WIN32) || defined(WIN32) + DebugBreak(); +#elif defined(SIGTRAP) + raise(SIGTRAP); +#endif + } } #endif diff -Nru lxd-3.0.2/dist/sqlite/src/test1.c lxd-3.0.3/dist/sqlite/src/test1.c --- lxd-3.0.2/dist/sqlite/src/test1.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/test1.c 2018-11-22 20:54:16.000000000 +0000 @@ -2393,6 +2393,8 @@ if( rc!=SQLITE_OK ){ Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1)); return TCL_ERROR; + }else{ + Tcl_ResetResult(interp); } return TCL_OK; } @@ -5685,6 +5687,44 @@ } /* +** tclcmd: file_control_data_version DB DBNAME +** +** This TCL command runs the sqlite3_file_control with the +** SQLITE_FCNTL_DATA_VERSION opcode, returning the result. +*/ +static int SQLITE_TCLAPI file_control_data_version( + ClientData clientData, /* Pointer to sqlite3_enable_XXX function */ + Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ + int objc, /* Number of arguments */ + Tcl_Obj *CONST objv[] /* Command arguments */ +){ + unsigned int iVers; /* data version */ + char *zDb; /* Db name ("main", "temp" etc.) */ + sqlite3 *db; /* Database handle */ + int rc; /* file_control() return code */ + char zBuf[100]; + + if( objc!=3 && objc!=2 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB [DBNAME]"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ){ + return TCL_ERROR; + } + zDb = objc==3 ? Tcl_GetString(objv[2]) : NULL; + + rc = sqlite3_file_control(db, zDb, SQLITE_FCNTL_DATA_VERSION, (void *)&iVers); + if( rc ){ + Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC); + return TCL_ERROR; + }else{ + sqlite3_snprintf(sizeof(zBuf),zBuf,"%u",iVers); + Tcl_SetResult(interp, (char *)zBuf, TCL_VOLATILE); + return TCL_OK; + } +} + +/* ** tclcmd: file_control_chunksize_test DB DBNAME SIZE ** ** This TCL command runs the sqlite3_file_control interface and @@ -6944,7 +6984,6 @@ { "all", SQLITE_AllOpts }, { "none", 0 }, { "query-flattener", SQLITE_QueryFlattener }, - { "column-cache", SQLITE_ColumnCache }, { "groupby-order", SQLITE_GroupByOrder }, { "factor-constants", SQLITE_FactorOutConst }, { "distinct-opt", SQLITE_DistinctOpt }, @@ -6954,6 +6993,7 @@ { "omit-noop-join", SQLITE_OmitNoopJoin }, { "stat3", SQLITE_Stat34 }, { "stat4", SQLITE_Stat34 }, + { "skip-scan", SQLITE_SkipScan }, }; if( objc!=4 ){ @@ -7699,6 +7739,7 @@ { "file_control_lockproxy_test", file_control_lockproxy_test, 0 }, { "file_control_chunksize_test", file_control_chunksize_test, 0 }, { "file_control_sizehint_test", file_control_sizehint_test, 0 }, + { "file_control_data_version", file_control_data_version, 0 }, #if SQLITE_OS_WIN { "file_control_win32_av_retry", file_control_win32_av_retry, 0 }, { "file_control_win32_get_handle", file_control_win32_get_handle, 0 }, @@ -7799,6 +7840,9 @@ extern int sqlite3_fts3_enable_parentheses; #endif #endif +#if defined(SQLITE_ENABLE_SELECTTRACE) + extern int sqlite3SelectTrace; +#endif for(i=0; ipVfs->pAppData; if( op==SQLITE_FCNTL_PRAGMA ){ char **argv = (char**)pArg; if( sqlite3_stricmp(argv[1],"error")==0 ){ @@ -535,11 +537,34 @@ return rc; } if( sqlite3_stricmp(argv[1], "filename")==0 ){ - argv[0] = sqlite3_mprintf("%s", p->zFilename); + argv[0] = sqlite3_mprintf("%s", pFd->zFilename); return SQLITE_OK; } } - return sqlite3OsFileControl(p->pReal, op, pArg); + if( p->pScript && (p->mask&TESTVFS_FCNTL_MASK) ){ + struct Fcntl { + int iFnctl; + const char *zFnctl; + } aF[] = { + { SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, "BEGIN_ATOMIC_WRITE" }, + { SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, "COMMIT_ATOMIC_WRITE" }, + }; + int i; + for(i=0; izFilename, -1), + Tcl_NewStringObj(aF[i].zFnctl, -1), + 0, 0 + ); + tvfsResultCode(p, &rc); + if( rc ) return rc; + } + } + return sqlite3OsFileControl(pFd->pReal, op, pArg); } /* @@ -1160,6 +1185,7 @@ { "xUnlock", TESTVFS_UNLOCK_MASK }, { "xLock", TESTVFS_LOCK_MASK }, { "xCheckReservedLock", TESTVFS_CKLOCK_MASK }, + { "xFileControl", TESTVFS_FCNTL_MASK }, }; Tcl_Obj **apElem = 0; int nElem = 0; diff -Nru lxd-3.0.2/dist/sqlite/src/test_window.c lxd-3.0.3/dist/sqlite/src/test_window.c --- lxd-3.0.2/dist/sqlite/src/test_window.c 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/test_window.c 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,349 @@ +/* +** 2018 June 17 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +*/ + +#include "sqlite3.h" + +#ifdef SQLITE_TEST + +#include "sqliteInt.h" +#include + +extern int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb); +extern const char *sqlite3ErrName(int); + +typedef struct TestWindow TestWindow; +struct TestWindow { + Tcl_Obj *xStep; + Tcl_Obj *xFinal; + Tcl_Obj *xValue; + Tcl_Obj *xInverse; + Tcl_Interp *interp; +}; + +typedef struct TestWindowCtx TestWindowCtx; +struct TestWindowCtx { + Tcl_Obj *pVal; +}; + +static void doTestWindowStep( + int bInverse, + sqlite3_context *ctx, + int nArg, + sqlite3_value **apArg +){ + int i; + TestWindow *p = (TestWindow*)sqlite3_user_data(ctx); + Tcl_Obj *pEval = Tcl_DuplicateObj(bInverse ? p->xInverse : p->xStep); + TestWindowCtx *pCtx = sqlite3_aggregate_context(ctx, sizeof(TestWindowCtx)); + + Tcl_IncrRefCount(pEval); + if( pCtx ){ + const char *zResult; + int rc; + if( pCtx->pVal ){ + Tcl_ListObjAppendElement(p->interp, pEval, Tcl_DuplicateObj(pCtx->pVal)); + }else{ + Tcl_ListObjAppendElement(p->interp, pEval, Tcl_NewStringObj("", -1)); + } + for(i=0; iinterp, pEval, pArg); + } + rc = Tcl_EvalObjEx(p->interp, pEval, TCL_EVAL_GLOBAL); + if( rc!=TCL_OK ){ + zResult = Tcl_GetStringResult(p->interp); + sqlite3_result_error(ctx, zResult, -1); + }else{ + if( pCtx->pVal ) Tcl_DecrRefCount(pCtx->pVal); + pCtx->pVal = Tcl_DuplicateObj(Tcl_GetObjResult(p->interp)); + Tcl_IncrRefCount(pCtx->pVal); + } + } + Tcl_DecrRefCount(pEval); +} + +static void doTestWindowFinalize(int bValue, sqlite3_context *ctx){ + TestWindow *p = (TestWindow*)sqlite3_user_data(ctx); + Tcl_Obj *pEval = Tcl_DuplicateObj(bValue ? p->xValue : p->xFinal); + TestWindowCtx *pCtx = sqlite3_aggregate_context(ctx, sizeof(TestWindowCtx)); + + Tcl_IncrRefCount(pEval); + if( pCtx ){ + const char *zResult; + int rc; + if( pCtx->pVal ){ + Tcl_ListObjAppendElement(p->interp, pEval, Tcl_DuplicateObj(pCtx->pVal)); + }else{ + Tcl_ListObjAppendElement(p->interp, pEval, Tcl_NewStringObj("", -1)); + } + + rc = Tcl_EvalObjEx(p->interp, pEval, TCL_EVAL_GLOBAL); + zResult = Tcl_GetStringResult(p->interp); + if( rc!=TCL_OK ){ + sqlite3_result_error(ctx, zResult, -1); + }else{ + sqlite3_result_text(ctx, zResult, -1, SQLITE_TRANSIENT); + } + + if( bValue==0 ){ + if( pCtx->pVal ) Tcl_DecrRefCount(pCtx->pVal); + pCtx->pVal = 0; + } + } + Tcl_DecrRefCount(pEval); +} + +static void testWindowStep( + sqlite3_context *ctx, + int nArg, + sqlite3_value **apArg +){ + doTestWindowStep(0, ctx, nArg, apArg); +} +static void testWindowInverse( + sqlite3_context *ctx, + int nArg, + sqlite3_value **apArg +){ + doTestWindowStep(1, ctx, nArg, apArg); +} + +static void testWindowFinal(sqlite3_context *ctx){ + doTestWindowFinalize(0, ctx); +} +static void testWindowValue(sqlite3_context *ctx){ + doTestWindowFinalize(1, ctx); +} + +static void testWindowDestroy(void *pCtx){ + ckfree(pCtx); +} + +/* +** Usage: sqlite3_create_window_function DB NAME XSTEP XFINAL XVALUE XINVERSE +*/ +static int SQLITE_TCLAPI test_create_window( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + TestWindow *pNew; + sqlite3 *db; + const char *zName; + int rc; + + if( objc!=7 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB NAME XSTEP XFINAL XVALUE XINVERSE"); + return TCL_ERROR; + } + + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; + zName = Tcl_GetString(objv[2]); + pNew = (TestWindow*)ckalloc(sizeof(TestWindow)); + memset(pNew, 0, sizeof(TestWindow)); + pNew->xStep = Tcl_DuplicateObj(objv[3]); + pNew->xFinal = Tcl_DuplicateObj(objv[4]); + pNew->xValue = Tcl_DuplicateObj(objv[5]); + pNew->xInverse = Tcl_DuplicateObj(objv[6]); + pNew->interp = interp; + + Tcl_IncrRefCount(pNew->xStep); + Tcl_IncrRefCount(pNew->xFinal); + Tcl_IncrRefCount(pNew->xValue); + Tcl_IncrRefCount(pNew->xInverse); + + rc = sqlite3_create_window_function(db, zName, -1, SQLITE_UTF8, (void*)pNew, + testWindowStep, testWindowFinal, testWindowValue, testWindowInverse, + testWindowDestroy + ); + if( rc!=SQLITE_OK ){ + Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1)); + return TCL_ERROR; + } + + return TCL_OK; +} + +static int SQLITE_TCLAPI test_create_window_misuse( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + sqlite3 *db; + int rc; + + if( objc!=2 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; + + rc = sqlite3_create_window_function(db, "fff", -1, SQLITE_UTF8, 0, + 0, testWindowFinal, testWindowValue, testWindowInverse, + 0 + ); + if( rc!=SQLITE_MISUSE ) goto error; + rc = sqlite3_create_window_function(db, "fff", -1, SQLITE_UTF8, 0, + testWindowStep, 0, testWindowValue, testWindowInverse, + 0 + ); + if( rc!=SQLITE_MISUSE ) goto error; + rc = sqlite3_create_window_function(db, "fff", -1, SQLITE_UTF8, 0, + testWindowStep, testWindowFinal, 0, testWindowInverse, + 0 + ); + if( rc!=SQLITE_MISUSE ) goto error; + rc = sqlite3_create_window_function(db, "fff", -1, SQLITE_UTF8, 0, + testWindowStep, testWindowFinal, testWindowValue, 0, + 0 + ); + if( rc!=SQLITE_MISUSE ) goto error; + + return TCL_OK; + + error: + Tcl_SetObjResult(interp, Tcl_NewStringObj("misuse test error", -1)); + return TCL_ERROR; +} + +/* +** xStep for sumint(). +*/ +static void sumintStep( + sqlite3_context *ctx, + int nArg, + sqlite3_value *apArg[] +){ + sqlite3_int64 *pInt; + + assert( nArg==1 ); + if( sqlite3_value_type(apArg[0])!=SQLITE_INTEGER ){ + sqlite3_result_error(ctx, "invalid argument", -1); + return; + } + pInt = (sqlite3_int64*)sqlite3_aggregate_context(ctx, sizeof(sqlite3_int64)); + if( pInt ){ + *pInt += sqlite3_value_int64(apArg[0]); + } +} + +/* +** xInverse for sumint(). +*/ +static void sumintInverse( + sqlite3_context *ctx, + int nArg, + sqlite3_value *apArg[] +){ + sqlite3_int64 *pInt; + pInt = (sqlite3_int64*)sqlite3_aggregate_context(ctx, sizeof(sqlite3_int64)); + *pInt -= sqlite3_value_int64(apArg[0]); +} + +/* +** xFinal for sumint(). +*/ +static void sumintFinal(sqlite3_context *ctx){ + sqlite3_int64 res = 0; + sqlite3_int64 *pInt; + pInt = (sqlite3_int64*)sqlite3_aggregate_context(ctx, 0); + if( pInt ) res = *pInt; + sqlite3_result_int64(ctx, res); +} + +/* +** xValue for sumint(). +*/ +static void sumintValue(sqlite3_context *ctx){ + sqlite3_int64 res = 0; + sqlite3_int64 *pInt; + pInt = (sqlite3_int64*)sqlite3_aggregate_context(ctx, 0); + if( pInt ) res = *pInt; + sqlite3_result_int64(ctx, res); +} + +static int SQLITE_TCLAPI test_create_sumint( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + sqlite3 *db; + int rc; + + if( objc!=2 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; + + rc = sqlite3_create_window_function(db, "sumint", 1, SQLITE_UTF8, 0, + sumintStep, sumintFinal, sumintValue, sumintInverse, + 0 + ); + + if( rc!=SQLITE_OK ){ + Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1)); + return TCL_ERROR; + } + return TCL_OK; +} + +static int SQLITE_TCLAPI test_override_sum( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + sqlite3 *db; + int rc; + + if( objc!=2 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; + + rc = sqlite3_create_function(db, "sum", -1, SQLITE_UTF8, 0, + 0, sumintStep, sumintFinal + ); + + if( rc!=SQLITE_OK ){ + Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1)); + return TCL_ERROR; + } + return TCL_OK; +} + +int Sqlitetest_window_Init(Tcl_Interp *interp){ + static struct { + char *zName; + Tcl_ObjCmdProc *xProc; + int clientData; + } aObjCmd[] = { + { "sqlite3_create_window_function", test_create_window, 0 }, + { "test_create_window_function_misuse", test_create_window_misuse, 0 }, + { "test_create_sumint", test_create_sumint, 0 }, + { "test_override_sum", test_override_sum, 0 }, + }; + int i; + for(i=0; i=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) #endif -/* Make the IdChar function accessible from ctime.c */ -#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +/* Make the IdChar function accessible from ctime.c and alter.c */ int sqlite3IsIdChar(u8 c){ return IdChar(c); } -#endif +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Return the id of the next token in string (*pz). Before returning, set +** (*pz) to point to the byte following the parsed token. +*/ +static int getToken(const unsigned char **pz){ + const unsigned char *z = *pz; + int t; /* Token type to return */ + do { + z += sqlite3GetToken(z, &t); + }while( t==TK_SPACE ); + if( t==TK_ID + || t==TK_STRING + || t==TK_JOIN_KW + || t==TK_WINDOW + || t==TK_OVER + || sqlite3ParserFallback(t)==TK_ID + ){ + t = TK_ID; + } + *pz = z; + return t; +} + +/* +** The following three functions are called immediately after the tokenizer +** reads the keywords WINDOW, OVER and FILTER, respectively, to determine +** whether the token should be treated as a keyword or an SQL identifier. +** This cannot be handled by the usual lemon %fallback method, due to +** the ambiguity in some constructions. e.g. +** +** SELECT sum(x) OVER ... +** +** In the above, "OVER" might be a keyword, or it might be an alias for the +** sum(x) expression. If a "%fallback ID OVER" directive were added to +** grammar, then SQLite would always treat "OVER" as an alias, making it +** impossible to call a window-function without a FILTER clause. +** +** WINDOW is treated as a keyword if: +** +** * the following token is an identifier, or a keyword that can fallback +** to being an identifier, and +** * the token after than one is TK_AS. +** +** OVER is a keyword if: +** +** * the previous token was TK_RP, and +** * the next token is either TK_LP or an identifier. +** +** FILTER is a keyword if: +** +** * the previous token was TK_RP, and +** * the next token is TK_LP. +*/ +static int analyzeWindowKeyword(const unsigned char *z){ + int t; + t = getToken(&z); + if( t!=TK_ID ) return TK_ID; + t = getToken(&z); + if( t!=TK_AS ) return TK_ID; + return TK_WINDOW; +} +static int analyzeOverKeyword(const unsigned char *z, int lastToken){ + if( lastToken==TK_RP ){ + int t = getToken(&z); + if( t==TK_LP || t==TK_ID ) return TK_OVER; + } + return TK_ID; +} +static int analyzeFilterKeyword(const unsigned char *z, int lastToken){ + if( lastToken==TK_RP && getToken(&z)==TK_LP ){ + return TK_FILTER; + } + return TK_ID; +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ /* ** Return the length (in bytes) of the token that begins at z[0]. @@ -456,6 +531,10 @@ i = 1; break; } + case CC_NUL: { + *tokenType = TK_ILLEGAL; + return 0; + } default: { *tokenType = TK_ILLEGAL; return 1; @@ -509,47 +588,64 @@ assert( pParse->nVar==0 ); assert( pParse->pVList==0 ); while( 1 ){ - if( zSql[0]!=0 ){ - n = sqlite3GetToken((u8*)zSql, &tokenType); - mxSqlLen -= n; - if( mxSqlLen<0 ){ - pParse->rc = SQLITE_TOOBIG; - break; - } - }else{ - /* Upon reaching the end of input, call the parser two more times - ** with tokens TK_SEMI and 0, in that order. */ - if( lastTokenParsed==TK_SEMI ){ - tokenType = 0; - }else if( lastTokenParsed==0 ){ - break; - }else{ - tokenType = TK_SEMI; - } - n = 0; + n = sqlite3GetToken((u8*)zSql, &tokenType); + mxSqlLen -= n; + if( mxSqlLen<0 ){ + pParse->rc = SQLITE_TOOBIG; + break; } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( tokenType>=TK_WINDOW ){ + assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER + || tokenType==TK_ILLEGAL || tokenType==TK_WINDOW + ); +#else if( tokenType>=TK_SPACE ){ assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL ); +#endif /* SQLITE_OMIT_WINDOWFUNC */ if( db->u1.isInterrupted ){ pParse->rc = SQLITE_INTERRUPT; break; } - if( tokenType==TK_ILLEGAL ){ + if( tokenType==TK_SPACE ){ + zSql += n; + continue; + } + if( zSql[0]==0 ){ + /* Upon reaching the end of input, call the parser two more times + ** with tokens TK_SEMI and 0, in that order. */ + if( lastTokenParsed==TK_SEMI ){ + tokenType = 0; + }else if( lastTokenParsed==0 ){ + break; + }else{ + tokenType = TK_SEMI; + } + n = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + }else if( tokenType==TK_WINDOW ){ + assert( n==6 ); + tokenType = analyzeWindowKeyword((const u8*)&zSql[6]); + }else if( tokenType==TK_OVER ){ + assert( n==4 ); + tokenType = analyzeOverKeyword((const u8*)&zSql[4], lastTokenParsed); + }else if( tokenType==TK_FILTER ){ + assert( n==6 ); + tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed); +#endif /* SQLITE_OMIT_WINDOWFUNC */ + }else{ sqlite3ErrorMsg(pParse, "unrecognized token: \"%.*s\"", n, zSql); break; } - zSql += n; - }else{ - pParse->sLastToken.z = zSql; - pParse->sLastToken.n = n; - sqlite3Parser(pEngine, tokenType, pParse->sLastToken); - lastTokenParsed = tokenType; - zSql += n; - if( pParse->rc!=SQLITE_OK || db->mallocFailed ) break; } + pParse->sLastToken.z = zSql; + pParse->sLastToken.n = n; + sqlite3Parser(pEngine, tokenType, pParse->sLastToken); + lastTokenParsed = tokenType; + zSql += n; + if( pParse->rc!=SQLITE_OK || db->mallocFailed ) break; } assert( nErr==0 ); - pParse->zTail = zSql; #ifdef YYTRACKMAXSTACKDEPTH sqlite3_mutex_enter(sqlite3MallocMutex()); sqlite3StatusHighwater(SQLITE_STATUS_PARSER_STACK, @@ -571,10 +667,12 @@ assert( pzErrMsg!=0 ); if( pParse->zErrMsg ){ *pzErrMsg = pParse->zErrMsg; - sqlite3_log(pParse->rc, "%s", *pzErrMsg); + sqlite3_log(pParse->rc, "%s in \"%s\"", + *pzErrMsg, pParse->zTail); pParse->zErrMsg = 0; nErr++; } + pParse->zTail = zSql; if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){ sqlite3VdbeDelete(pParse->pVdbe); pParse->pVdbe = 0; @@ -590,16 +688,18 @@ sqlite3_free(pParse->apVtabLock); #endif - if( !IN_DECLARE_VTAB ){ + if( !IN_SPECIAL_PARSE ){ /* If the pParse->declareVtab flag is set, do not delete any table ** structure built up in pParse->pNewTable. The calling code (see vtab.c) ** will take responsibility for freeing the Table structure. */ sqlite3DeleteTable(db, pParse->pNewTable); } + if( !IN_RENAME_OBJECT ){ + sqlite3DeleteTrigger(db, pParse->pNewTrigger); + } if( pParse->pWithToFree ) sqlite3WithDelete(db, pParse->pWithToFree); - sqlite3DeleteTrigger(db, pParse->pNewTrigger); sqlite3DbFree(db, pParse->pVList); while( pParse->pAinc ){ AutoincInfo *p = pParse->pAinc; diff -Nru lxd-3.0.2/dist/sqlite/src/treeview.c lxd-3.0.3/dist/sqlite/src/treeview.c --- lxd-3.0.2/dist/sqlite/src/treeview.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/treeview.c 2018-11-22 20:54:16.000000000 +0000 @@ -139,21 +139,13 @@ sqlite3TreeViewPush(pView, 1); } do{ -#if SELECTTRACE_ENABLED sqlite3TreeViewLine(pView, - "SELECT%s%s (%s/%p) selFlags=0x%x nSelectRow=%d", + "SELECT%s%s (%u/%p) selFlags=0x%x nSelectRow=%d", ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""), ((p->selFlags & SF_Aggregate) ? " agg_flag" : ""), - p->zSelName, p, p->selFlags, + p->selId, p, p->selFlags, (int)p->nSelectRow ); -#else - sqlite3TreeViewLine(pView, "SELECT%s%s (0x%p) selFlags=0x%x nSelectRow=%d", - ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""), - ((p->selFlags & SF_Aggregate) ? " agg_flag" : ""), p, p->selFlags, - (int)p->nSelectRow - ); -#endif if( cnt++ ) sqlite3TreeViewPop(pView); if( p->pPrior ){ n = 1000; @@ -165,8 +157,23 @@ if( p->pHaving ) n++; if( p->pOrderBy ) n++; if( p->pLimit ) n++; +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ) n++; + if( p->pWinDefn ) n++; +#endif } sqlite3TreeViewExprList(pView, p->pEList, (n--)>0, "result-set"); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ){ + Window *pX; + pView = sqlite3TreeViewPush(pView, (n--)>0); + sqlite3TreeViewLine(pView, "window-functions"); + for(pX=p->pWin; pX; pX=pX->pNextWin){ + sqlite3TreeViewWinFunc(pView, pX, pX->pNextWin!=0); + } + sqlite3TreeViewPop(pView); + } +#endif if( p->pSrc && p->pSrc->nSrc ){ int i; pView = sqlite3TreeViewPush(pView, (n--)>0); @@ -216,6 +223,16 @@ sqlite3TreeViewExpr(pView, p->pHaving, 0); sqlite3TreeViewPop(pView); } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWinDefn ){ + Window *pX; + sqlite3TreeViewItem(pView, "WINDOW", (n--)>0); + for(pX=p->pWinDefn; pX; pX=pX->pNextWin){ + sqlite3TreeViewWindow(pView, pX, pX->pNextWin!=0); + } + sqlite3TreeViewPop(pView); + } +#endif if( p->pOrderBy ){ sqlite3TreeViewExprList(pView, p->pOrderBy, (n--)>0, "ORDERBY"); } @@ -243,6 +260,83 @@ sqlite3TreeViewPop(pView); } +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a description of starting or stopping bounds +*/ +void sqlite3TreeViewBound( + TreeView *pView, /* View context */ + u8 eBound, /* UNBOUNDED, CURRENT, PRECEDING, FOLLOWING */ + Expr *pExpr, /* Value for PRECEDING or FOLLOWING */ + u8 moreToFollow /* True if more to follow */ +){ + switch( eBound ){ + case TK_UNBOUNDED: { + sqlite3TreeViewItem(pView, "UNBOUNDED", moreToFollow); + sqlite3TreeViewPop(pView); + break; + } + case TK_CURRENT: { + sqlite3TreeViewItem(pView, "CURRENT", moreToFollow); + sqlite3TreeViewPop(pView); + break; + } + case TK_PRECEDING: { + sqlite3TreeViewItem(pView, "PRECEDING", moreToFollow); + sqlite3TreeViewExpr(pView, pExpr, 0); + sqlite3TreeViewPop(pView); + break; + } + case TK_FOLLOWING: { + sqlite3TreeViewItem(pView, "FOLLOWING", moreToFollow); + sqlite3TreeViewExpr(pView, pExpr, 0); + sqlite3TreeViewPop(pView); + break; + } + } +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a human-readable explanation for a Window object +*/ +void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){ + pView = sqlite3TreeViewPush(pView, more); + if( pWin->zName ){ + sqlite3TreeViewLine(pView, "OVER %s", pWin->zName); + }else{ + sqlite3TreeViewLine(pView, "OVER"); + } + if( pWin->pPartition ){ + sqlite3TreeViewExprList(pView, pWin->pPartition, 1, "PARTITION-BY"); + } + if( pWin->pOrderBy ){ + sqlite3TreeViewExprList(pView, pWin->pOrderBy, 1, "ORDER-BY"); + } + if( pWin->eType ){ + sqlite3TreeViewItem(pView, pWin->eType==TK_RANGE ? "RANGE" : "ROWS", 0); + sqlite3TreeViewBound(pView, pWin->eStart, pWin->pStart, 1); + sqlite3TreeViewBound(pView, pWin->eEnd, pWin->pEnd, 0); + sqlite3TreeViewPop(pView); + } + sqlite3TreeViewPop(pView); +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a human-readable explanation for a Window Function object +*/ +void sqlite3TreeViewWinFunc(TreeView *pView, const Window *pWin, u8 more){ + pView = sqlite3TreeViewPush(pView, more); + sqlite3TreeViewLine(pView, "WINFUNC %s(%d)", + pWin->pFunc->zName, pWin->pFunc->nArg); + sqlite3TreeViewWindow(pView, pWin, 0); + sqlite3TreeViewPop(pView); +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + /* ** Generate a human-readable explanation of an expression tree. */ @@ -280,6 +374,9 @@ sqlite3TreeViewLine(pView, "{%d:%d}%s", pExpr->iTable, pExpr->iColumn, zFlgs); } + if( ExprHasProperty(pExpr, EP_FixedCol) ){ + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + } break; } case TK_INTEGER: { @@ -393,10 +490,17 @@ case TK_AGG_FUNCTION: case TK_FUNCTION: { ExprList *pFarg; /* List of function arguments */ + Window *pWin; if( ExprHasProperty(pExpr, EP_TokenOnly) ){ pFarg = 0; + pWin = 0; }else{ pFarg = pExpr->x.pList; +#ifndef SQLITE_OMIT_WINDOWFUNC + pWin = pExpr->pWin; +#else + pWin = 0; +#endif } if( pExpr->op==TK_AGG_FUNCTION ){ sqlite3TreeViewLine(pView, "AGG_FUNCTION%d %Q", @@ -405,8 +509,13 @@ sqlite3TreeViewLine(pView, "FUNCTION %Q", pExpr->u.zToken); } if( pFarg ){ - sqlite3TreeViewExprList(pView, pFarg, 0, 0); + sqlite3TreeViewExprList(pView, pFarg, pWin!=0, 0); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pWin ){ + sqlite3TreeViewWindow(pView, pWin, 0); } +#endif break; } #ifndef SQLITE_OMIT_SUBQUERY diff -Nru lxd-3.0.2/dist/sqlite/src/trigger.c lxd-3.0.3/dist/sqlite/src/trigger.c --- lxd-3.0.2/dist/sqlite/src/trigger.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/trigger.c 2018-11-22 20:54:16.000000000 +0000 @@ -181,14 +181,16 @@ goto trigger_cleanup; } assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); - if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),zName) ){ - if( !noErr ){ - sqlite3ErrorMsg(pParse, "trigger %T already exists", pName); - }else{ - assert( !db->init.busy ); - sqlite3CodeVerifySchema(pParse, iDb); + if( !IN_RENAME_OBJECT ){ + if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),zName) ){ + if( !noErr ){ + sqlite3ErrorMsg(pParse, "trigger %T already exists", pName); + }else{ + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); + } + goto trigger_cleanup; } - goto trigger_cleanup; } /* Do not create a trigger on a system table */ @@ -212,7 +214,7 @@ } #ifndef SQLITE_OMIT_AUTHORIZATION - { + if( !IN_RENAME_OBJECT ){ int iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); int code = SQLITE_CREATE_TRIGGER; const char *zDb = db->aDb[iTabDb].zDbSName; @@ -246,8 +248,15 @@ pTrigger->pTabSchema = pTab->pSchema; pTrigger->op = (u8)op; pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER; - pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); - pTrigger->pColumns = sqlite3IdListDup(db, pColumns); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, pTrigger->table, pTableName->a[0].zName); + pTrigger->pWhen = pWhen; + pWhen = 0; + }else{ + pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); + } + pTrigger->pColumns = pColumns; + pColumns = 0; assert( pParse->pNewTrigger==0 ); pParse->pNewTrigger = pTrigger; @@ -296,6 +305,14 @@ goto triggerfinish_cleanup; } +#ifndef SQLITE_OMIT_ALTERTABLE + if( IN_RENAME_OBJECT ){ + assert( !db->init.busy ); + pParse->pNewTrigger = pTrig; + pTrig = 0; + }else +#endif + /* if we are not initializing, ** build the sqlite_master entry */ @@ -337,7 +354,7 @@ triggerfinish_cleanup: sqlite3DeleteTrigger(db, pTrig); - assert( !pParse->pNewTrigger ); + assert( IN_RENAME_OBJECT || !pParse->pNewTrigger ); sqlite3DeleteTriggerStep(db, pStepList); } @@ -384,12 +401,13 @@ ** If an OOM error occurs, NULL is returned and db->mallocFailed is set. */ static TriggerStep *triggerStepAllocate( - sqlite3 *db, /* Database connection */ + Parse *pParse, /* Parser context */ u8 op, /* Trigger opcode */ Token *pName, /* The target name */ const char *zStart, /* Start of SQL text */ const char *zEnd /* End of SQL text */ ){ + sqlite3 *db = pParse->db; TriggerStep *pTriggerStep; pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n + 1); @@ -400,6 +418,9 @@ pTriggerStep->zTarget = z; pTriggerStep->op = op; pTriggerStep->zSpan = triggerSpanDup(db, zStart, zEnd); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, pTriggerStep->zTarget, pName); + } } return pTriggerStep; } @@ -412,7 +433,7 @@ ** body of a trigger. */ TriggerStep *sqlite3TriggerInsertStep( - sqlite3 *db, /* The database connection */ + Parse *pParse, /* Parser */ Token *pTableName, /* Name of the table into which we insert */ IdList *pColumn, /* List of columns in pTableName to insert into */ Select *pSelect, /* A SELECT statement that supplies values */ @@ -421,13 +442,19 @@ const char *zStart, /* Start of SQL text */ const char *zEnd /* End of SQL text */ ){ + sqlite3 *db = pParse->db; TriggerStep *pTriggerStep; assert(pSelect != 0 || db->mallocFailed); - pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName, zStart, zEnd); + pTriggerStep = triggerStepAllocate(pParse, TK_INSERT, pTableName,zStart,zEnd); if( pTriggerStep ){ - pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + if( IN_RENAME_OBJECT ){ + pTriggerStep->pSelect = pSelect; + pSelect = 0; + }else{ + pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + } pTriggerStep->pIdList = pColumn; pTriggerStep->pUpsert = pUpsert; pTriggerStep->orconf = orconf; @@ -448,7 +475,7 @@ ** sees an UPDATE statement inside the body of a CREATE TRIGGER. */ TriggerStep *sqlite3TriggerUpdateStep( - sqlite3 *db, /* The database connection */ + Parse *pParse, /* Parser */ Token *pTableName, /* Name of the table to be updated */ ExprList *pEList, /* The SET clause: list of column and new values */ Expr *pWhere, /* The WHERE clause */ @@ -456,12 +483,20 @@ const char *zStart, /* Start of SQL text */ const char *zEnd /* End of SQL text */ ){ + sqlite3 *db = pParse->db; TriggerStep *pTriggerStep; - pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName, zStart, zEnd); + pTriggerStep = triggerStepAllocate(pParse, TK_UPDATE, pTableName,zStart,zEnd); if( pTriggerStep ){ - pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); - pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + if( IN_RENAME_OBJECT ){ + pTriggerStep->pExprList = pEList; + pTriggerStep->pWhere = pWhere; + pEList = 0; + pWhere = 0; + }else{ + pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); + pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + } pTriggerStep->orconf = orconf; } sqlite3ExprListDelete(db, pEList); @@ -475,17 +510,23 @@ ** sees a DELETE statement inside the body of a CREATE TRIGGER. */ TriggerStep *sqlite3TriggerDeleteStep( - sqlite3 *db, /* Database connection */ + Parse *pParse, /* Parser */ Token *pTableName, /* The table from which rows are deleted */ Expr *pWhere, /* The WHERE clause */ const char *zStart, /* Start of SQL text */ const char *zEnd /* End of SQL text */ ){ + sqlite3 *db = pParse->db; TriggerStep *pTriggerStep; - pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName, zStart, zEnd); + pTriggerStep = triggerStepAllocate(pParse, TK_DELETE, pTableName,zStart,zEnd); if( pTriggerStep ){ - pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + if( IN_RENAME_OBJECT ){ + pTriggerStep->pWhere = pWhere; + pWhere = 0; + }else{ + pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + } pTriggerStep->orconf = OE_Default; } sqlite3ExprDelete(db, pWhere); diff -Nru lxd-3.0.2/dist/sqlite/src/update.c lxd-3.0.3/dist/sqlite/src/update.c --- lxd-3.0.2/dist/sqlite/src/update.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/update.c 2018-11-22 20:54:16.000000000 +0000 @@ -523,7 +523,7 @@ if( !isView && aiCurOnePass[0]!=iDataCur && aiCurOnePass[1]!=iDataCur ){ assert( pPk ); sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelBreak, regKey,nKey); - VdbeCoverageNeverTaken(v); + VdbeCoverage(v); } if( eOnePass!=ONEPASS_SINGLE ){ labelContinue = sqlite3VdbeMakeLabel(v); @@ -610,13 +610,7 @@ */ testcase( i==31 ); testcase( i==32 ); - sqlite3ExprCodeGetColumnToReg(pParse, pTab, i, iDataCur, regNew+i); - if( tmask & TRIGGER_BEFORE ){ - /* This value will be recomputed in After-BEFORE-trigger-reload-loop - ** below, so make sure that it is not cached and reused. - ** Ticket d85fffd6ffe856092ed8daefa811b1e399706b28. */ - sqlite3ExprCacheRemove(pParse, regNew+i, 1); - } + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, regNew+i); }else{ sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i); } @@ -869,7 +863,7 @@ sqlite3ExprCode(pParse, pChanges->a[aXRef[i]].pExpr, regArg+2+i); }else{ sqlite3VdbeAddOp3(v, OP_VColumn, iCsr, i, regArg+2+i); - sqlite3VdbeChangeP5(v, 1); /* Enable sqlite3_vtab_nochange() */ + sqlite3VdbeChangeP5(v, OPFLAG_NOCHNG);/* Enable sqlite3_vtab_nochange() */ } } if( HasRowid(pTab) ){ diff -Nru lxd-3.0.2/dist/sqlite/src/upsert.c lxd-3.0.3/dist/sqlite/src/upsert.c --- lxd-3.0.2/dist/sqlite/src/upsert.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/upsert.c 2018-11-22 20:54:16.000000000 +0000 @@ -204,10 +204,12 @@ Vdbe *v = pParse->pVdbe; sqlite3 *db = pParse->db; SrcList *pSrc; /* FROM clause for the UPDATE */ - int iDataCur = pUpsert->iDataCur; + int iDataCur; assert( v!=0 ); + assert( pUpsert!=0 ); VdbeNoopComment((v, "Begin DO UPDATE of UPSERT")); + iDataCur = pUpsert->iDataCur; if( pIdx && iCur!=iDataCur ){ if( HasRowid(pTab) ){ int regRowid = sqlite3GetTempReg(pParse); diff -Nru lxd-3.0.2/dist/sqlite/src/vacuum.c lxd-3.0.3/dist/sqlite/src/vacuum.c --- lxd-3.0.2/dist/sqlite/src/vacuum.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vacuum.c 2018-11-22 20:54:16.000000000 +0000 @@ -224,7 +224,7 @@ */ rc = execSql(db, pzErrMsg, "BEGIN"); if( rc!=SQLITE_OK ) goto end_of_vacuum; - rc = sqlite3BtreeBeginTrans(pMain, 2); + rc = sqlite3BtreeBeginTrans(pMain, 2, 0); if( rc!=SQLITE_OK ) goto end_of_vacuum; /* Do not attempt to change the page size for a WAL database */ diff -Nru lxd-3.0.2/dist/sqlite/src/vdbeapi.c lxd-3.0.3/dist/sqlite/src/vdbeapi.c --- lxd-3.0.2/dist/sqlite/src/vdbeapi.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vdbeapi.c 2018-11-22 20:54:16.000000000 +0000 @@ -970,7 +970,7 @@ /* .xDel = */ (void(*)(void*))0, #ifdef SQLITE_DEBUG /* .pScopyFrom = */ (Mem*)0, - /* .pFiller = */ (void*)0, + /* .mScopyFlags= */ 0, #endif }; return &nullMem; diff -Nru lxd-3.0.2/dist/sqlite/src/vdbeaux.c lxd-3.0.3/dist/sqlite/src/vdbeaux.c --- lxd-3.0.2/dist/sqlite/src/vdbeaux.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vdbeaux.c 2018-11-22 20:54:16.000000000 +0000 @@ -193,14 +193,6 @@ #endif #ifdef SQLITE_DEBUG if( p->db->flags & SQLITE_VdbeAddopTrace ){ - int jj, kk; - Parse *pParse = p->pParse; - for(jj=kk=0; jjnColCache; jj++){ - struct yColCache *x = pParse->aColCache + jj; - printf(" r[%d]={%d:%d}", x->iReg, x->iTable, x->iColumn); - kk++; - } - if( kk ) printf("\n"); sqlite3VdbePrintOp(0, i, &p->aOp[i]); test_addop_breakpoint(); } @@ -324,7 +316,7 @@ void sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){ if( pParse->explain==2 ){ char *zMsg; - Vdbe *v = pParse->pVdbe; + Vdbe *v; va_list ap; int iThis; va_start(ap, zFmt); @@ -445,19 +437,6 @@ } } -#ifdef SQLITE_COVERAGE_TEST -/* -** Return TRUE if and only if the label x has already been resolved. -** Return FALSE (zero) if label x is still unresolved. -** -** This routine is only used inside of testcase() macros, and so it -** only exists when measuring test coverage. -*/ -int sqlite3VdbeLabelHasBeenResolved(Vdbe *v, int x){ - return v->pParse->aLabel && v->pParse->aLabel[ADDR(x)]>=0; -} -#endif /* SQLITE_COVERAGE_TEST */ - /* ** Mark the VDBE as one that can only be run one time. */ @@ -689,7 +668,6 @@ break; } case OP_Next: - case OP_NextIfOpen: case OP_SorterNext: { pOp->p4.xAdvance = sqlite3BtreeNext; pOp->p4type = P4_ADVANCE; @@ -699,8 +677,7 @@ assert( pOp->p2>=0 ); break; } - case OP_Prev: - case OP_PrevIfOpen: { + case OP_Prev: { pOp->p4.xAdvance = sqlite3BtreePrevious; pOp->p4type = P4_ADVANCE; /* The code generator never codes any of these opcodes as a jump @@ -1615,7 +1592,7 @@ /* ** Print a single opcode. This routine is used for debugging only. */ -void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){ +void sqlite3VdbePrintOp(FILE *pOut, int pc, VdbeOp *pOp){ char *zP4; char zPtr[50]; char zCom[100]; @@ -1684,9 +1661,8 @@ */ testcase( p->flags & MEM_Agg ); testcase( p->flags & MEM_Dyn ); - testcase( p->flags & MEM_Frame ); - testcase( p->flags & MEM_RowSet ); - if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){ + testcase( p->xDel==sqlite3VdbeFrameMemDel ); + if( p->flags&(MEM_Agg|MEM_Dyn) ){ sqlite3VdbeMemRelease(p); }else if( p->szMalloc ){ sqlite3DbFreeNN(db, p->zMalloc); @@ -1698,6 +1674,35 @@ } } +#ifdef SQLITE_DEBUG +/* +** Verify that pFrame is a valid VdbeFrame pointer. Return true if it is +** and false if something is wrong. +** +** This routine is intended for use inside of assert() statements only. +*/ +int sqlite3VdbeFrameIsValid(VdbeFrame *pFrame){ + if( pFrame->iFrameMagic!=SQLITE_FRAME_MAGIC ) return 0; + return 1; +} +#endif + + +/* +** This is a destructor on a Mem object (which is really an sqlite3_value) +** that deletes the Frame object that is attached to it as a blob. +** +** This routine does not delete the Frame right away. It merely adds the +** frame to a list of frames to be deleted when the Vdbe halts. +*/ +void sqlite3VdbeFrameMemDel(void *pArg){ + VdbeFrame *pFrame = (VdbeFrame*)pArg; + assert( sqlite3VdbeFrameIsValid(pFrame) ); + pFrame->pParent = pFrame->v->pDelFrame; + pFrame->v->pDelFrame = pFrame; +} + + /* ** Delete a VdbeFrame object and its contents. VdbeFrame objects are ** allocated by the OP_Program opcode in sqlite3VdbeExec(). @@ -1706,6 +1711,7 @@ int i; Mem *aMem = VdbeFrameMem(p); VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem]; + assert( sqlite3VdbeFrameIsValid(p) ); for(i=0; inChildCsr; i++){ sqlite3VdbeFreeCursor(p->v, apCsr[i]); } @@ -3002,7 +3008,7 @@ */ sqlite3VdbeHalt(p); - /* If the VDBE has be run even partially, then transfer the error code + /* If the VDBE has been run even partially, then transfer the error code ** and error message from the VDBE into the main database structure. But ** if the VDBE has just been set to run but has not actually executed any ** instructions yet, leave the main database error information unchanged. @@ -3914,7 +3920,7 @@ ** is less than, equal to, or greater than the second, respectively. ** If one blob is a prefix of the other, then the shorter is the lessor. */ -static SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){ +SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){ int c; int n1 = pB1->n; int n2 = pB2->n; @@ -3984,7 +3990,7 @@ f1 = pMem1->flags; f2 = pMem2->flags; combined_flags = f1|f2; - assert( (combined_flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem1) && !sqlite3VdbeMemIsRowSet(pMem2) ); /* If one value is NULL, it is less than the other. If both values ** are NULL, return 0. @@ -4129,7 +4135,7 @@ u32 idx1; /* Offset of first type in header */ int rc = 0; /* Return value */ Mem *pRhs = pPKey2->aMem; /* Next field of pPKey2 to compare */ - KeyInfo *pKeyInfo = pPKey2->pKeyInfo; + KeyInfo *pKeyInfo; const unsigned char *aKey1 = (const unsigned char *)pKey1; Mem mem1; @@ -4224,7 +4230,7 @@ if( (d1+mem1.n) > (unsigned)nKey1 ){ pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; return 0; /* Corruption */ - }else if( pKeyInfo->aColl[i] ){ + }else if( (pKeyInfo = pPKey2->pKeyInfo)->aColl[i] ){ mem1.enc = pKeyInfo->enc; mem1.db = pKeyInfo->db; mem1.flags = MEM_Str; @@ -4275,7 +4281,7 @@ } if( rc!=0 ){ - if( pKeyInfo->aSortOrder[i] ){ + if( pPKey2->pKeyInfo->aSortOrder[i] ){ rc = -rc; } assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, rc) ); @@ -4284,10 +4290,11 @@ } i++; + if( i==pPKey2->nField ) break; pRhs++; d1 += sqlite3VdbeSerialTypeLen(serial_type); idx1 += sqlite3VarintLen(serial_type); - }while( idx1<(unsigned)szHdr1 && inField && d1<=(unsigned)nKey1 ); + }while( idx1<(unsigned)szHdr1 && d1<=(unsigned)nKey1 ); /* No memory allocation is ever used on mem1. Prove this using ** the following assert(). If the assert() fails, it indicates a @@ -4299,7 +4306,7 @@ ** value. */ assert( CORRUPT_DB || vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, pPKey2->default_rc) - || pKeyInfo->db->mallocFailed + || pPKey2->pKeyInfo->db->mallocFailed ); pPKey2->eqSeen = 1; return pPKey2->default_rc; @@ -4550,7 +4557,9 @@ (void)getVarint32((u8*)m.z, szHdr); testcase( szHdr==3 ); testcase( szHdr==m.n ); - if( unlikely(szHdr<3 || (int)szHdr>m.n) ){ + testcase( szHdr>0x7fffffff ); + assert( m.n>=0 ); + if( unlikely(szHdr<3 || szHdr>(unsigned)m.n) ){ goto idx_rowid_corruption; } @@ -4625,7 +4634,7 @@ if( rc ){ return rc; } - *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked); + *res = sqlite3VdbeRecordCompareWithSkip(m.n, m.z, pUnpacked, 0); sqlite3VdbeMemRelease(&m); return SQLITE_OK; } @@ -4657,11 +4666,19 @@ ** programs obsolete. Removing user-defined functions or collating ** sequences, or changing an authorization function are the types of ** things that make prepared statements obsolete. +** +** If iCode is 1, then expiration is advisory. The statement should +** be reprepared before being restarted, but if it is already running +** it is allowed to run to completion. +** +** Internally, this function just sets the Vdbe.expired flag on all +** prepared statements. The flag is set to 1 for an immediate expiration +** and set to 2 for an advisory expiration. */ -void sqlite3ExpirePreparedStatements(sqlite3 *db){ +void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){ Vdbe *p; for(p = db->pVdbe; p; p=p->pNext){ - p->expired = 1; + p->expired = iCode+1; } } diff -Nru lxd-3.0.2/dist/sqlite/src/vdbe.c lxd-3.0.3/dist/sqlite/src/vdbe.c --- lxd-3.0.2/dist/sqlite/src/vdbe.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vdbe.c 2018-11-22 20:54:16.000000000 +0000 @@ -122,32 +122,56 @@ ** feature is used for test suite validation only and does not appear an ** production builds. ** -** M is an integer, 2 or 3, that indices how many different ways the -** branch can go. It is usually 2. "I" is the direction the branch -** goes. 0 means falls through. 1 means branch is taken. 2 means the -** second alternative branch is taken. +** M is an integer between 2 and 4. 2 indicates a ordinary two-way +** branch (I=0 means fall through and I=1 means taken). 3 indicates +** a 3-way branch where the third way is when one of the operands is +** NULL. 4 indicates the OP_Jump instruction which has three destinations +** depending on whether the first operand is less than, equal to, or greater +** than the second. ** ** iSrcLine is the source code line (from the __LINE__ macro) that -** generated the VDBE instruction. This instrumentation assumes that all -** source code is in a single file (the amalgamation). Special values 1 -** and 2 for the iSrcLine parameter mean that this particular branch is -** always taken or never taken, respectively. +** generated the VDBE instruction combined with flag bits. The source +** code line number is in the lower 24 bits of iSrcLine and the upper +** 8 bytes are flags. The lower three bits of the flags indicate +** values for I that should never occur. For example, if the branch is +** always taken, the flags should be 0x05 since the fall-through and +** alternate branch are never taken. If a branch is never taken then +** flags should be 0x06 since only the fall-through approach is allowed. +** +** Bit 0x04 of the flags indicates an OP_Jump opcode that is only +** interested in equal or not-equal. In other words, I==0 and I==2 +** should be treated the same. +** +** Since only a line number is retained, not the filename, this macro +** only works for amalgamation builds. But that is ok, since these macros +** should be no-ops except for special builds used to measure test coverage. */ #if !defined(SQLITE_VDBE_COVERAGE) # define VdbeBranchTaken(I,M) #else # define VdbeBranchTaken(I,M) vdbeTakeBranch(pOp->iSrcLine,I,M) - static void vdbeTakeBranch(int iSrcLine, u8 I, u8 M){ - if( iSrcLine<=2 && ALWAYS(iSrcLine>0) ){ - M = iSrcLine; - /* Assert the truth of VdbeCoverageAlwaysTaken() and - ** VdbeCoverageNeverTaken() */ - assert( (M & I)==I ); - }else{ - if( sqlite3GlobalConfig.xVdbeBranch==0 ) return; /*NO_TEST*/ - sqlite3GlobalConfig.xVdbeBranch(sqlite3GlobalConfig.pVdbeBranchArg, - iSrcLine,I,M); + static void vdbeTakeBranch(u32 iSrcLine, u8 I, u8 M){ + u8 mNever; + assert( I<=2 ); /* 0: fall through, 1: taken, 2: alternate taken */ + assert( M<=4 ); /* 2: two-way branch, 3: three-way branch, 4: OP_Jump */ + assert( I> 24; + assert( (I & mNever)==0 ); + if( sqlite3GlobalConfig.xVdbeBranch==0 ) return; /*NO_TEST*/ + I |= mNever; + if( M==2 ) I |= 0x04; + if( M==4 ){ + I |= 0x08; + if( (mNever&0x08)!=0 && (I&0x05)!=0) I |= 0x05; /*NO_TEST*/ } + sqlite3GlobalConfig.xVdbeBranch(sqlite3GlobalConfig.pVdbeBranchArg, + iSrcLine&0xffffff, I, M); } #endif @@ -478,7 +502,7 @@ }else if( p->flags & MEM_Real ){ printf(" r:%g", p->u.r); #endif - }else if( p->flags & MEM_RowSet ){ + }else if( sqlite3VdbeMemIsRowSet(p) ){ printf(" (rowset)"); }else{ char zBuf[200]; @@ -1143,6 +1167,9 @@ assert( pOp->p3<=(p->nMem+1 - p->nCursor) ); pOut->flags = nullFlag = pOp->p1 ? (MEM_Null|MEM_Cleared) : MEM_Null; pOut->n = 0; +#ifdef SQLITE_DEBUG + pOut->uTemp = 0; +#endif while( cnt>0 ){ pOut++; memAboutToChange(p, pOut); @@ -1264,6 +1291,7 @@ pOut = &aMem[pOp->p2]; assert( pOut!=pIn1 ); while( 1 ){ + memAboutToChange(p, pOut); sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); Deephemeralize(pOut); #ifdef SQLITE_DEBUG @@ -1296,7 +1324,8 @@ assert( pOut!=pIn1 ); sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); #ifdef SQLITE_DEBUG - if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1; + pOut->pScopyFrom = pIn1; + pOut->mScopyFlags = pIn1->flags; #endif break; } @@ -1930,7 +1959,12 @@ if( (flags1 | flags3)&MEM_Str ){ if( (flags1 & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){ applyNumericAffinity(pIn1,0); - testcase( flags3!=pIn3->flags ); /* Possible if pIn1==pIn3 */ + assert( flags3==pIn3->flags ); + /* testcase( flags3!=pIn3->flags ); + ** this used to be possible with pIn1==pIn3, but not since + ** the column cache was removed. The following assignment + ** is essentially a no-op. But, it provides defense-in-depth + ** in case our analysis is incorrect, so it is left in. */ flags3 = pIn3->flags; } if( (flags3 & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){ @@ -2144,11 +2178,11 @@ */ case OP_Jump: { /* jump */ if( iCompare<0 ){ - VdbeBranchTaken(0,3); pOp = &aOp[pOp->p1 - 1]; + VdbeBranchTaken(0,4); pOp = &aOp[pOp->p1 - 1]; }else if( iCompare==0 ){ - VdbeBranchTaken(1,3); pOp = &aOp[pOp->p2 - 1]; + VdbeBranchTaken(1,4); pOp = &aOp[pOp->p2 - 1]; }else{ - VdbeBranchTaken(2,3); pOp = &aOp[pOp->p3 - 1]; + VdbeBranchTaken(2,4); pOp = &aOp[pOp->p3 - 1]; } break; } @@ -2245,7 +2279,7 @@ } /* Opcode: BitNot P1 P2 * * * -** Synopsis: r[P1]= ~r[P1] +** Synopsis: r[P2]= ~r[P1] ** ** Interpret the content of register P1 as an integer. Store the ** ones-complement of the P1 value into register P2. If P1 holds @@ -3060,7 +3094,7 @@ } } if( isSchemaChange ){ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); sqlite3ResetAllSchemasOfConnection(db); db->mDbFlags |= DBFLAG_SchemaChange; } @@ -3202,8 +3236,7 @@ */ case OP_Transaction: { Btree *pBt; - int iMeta; - int iGen; + int iMeta = 0; assert( p->bIsReader ); assert( p->readOnly==0 || pOp->p2==0 ); @@ -3216,7 +3249,7 @@ pBt = db->aDb[pOp->p1].pBt; if( pBt ){ - rc = sqlite3BtreeBeginTrans(pBt, pOp->p2); + rc = sqlite3BtreeBeginTrans(pBt, pOp->p2, &iMeta); testcase( rc==SQLITE_BUSY_SNAPSHOT ); testcase( rc==SQLITE_BUSY_RECOVERY ); if( rc!=SQLITE_OK ){ @@ -3249,19 +3282,17 @@ p->nStmtDefCons = db->nDeferredCons; p->nStmtDefImmCons = db->nDeferredImmCons; } - - /* Gather the schema version number for checking: + } + assert( pOp->p5==0 || pOp->p4type==P4_INT32 ); + if( pOp->p5 + && (iMeta!=pOp->p3 + || db->aDb[pOp->p1].pSchema->iGeneration!=pOp->p4.i) + ){ + /* ** IMPLEMENTATION-OF: R-03189-51135 As each SQL statement runs, the schema ** version is checked to ensure that the schema has not changed since the ** SQL statement was prepared. */ - sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&iMeta); - iGen = db->aDb[pOp->p1].pSchema->iGeneration; - }else{ - iGen = iMeta = 0; - } - assert( pOp->p5==0 || pOp->p4type==P4_INT32 ); - if( pOp->p5 && (iMeta!=pOp->p3 || iGen!=pOp->p4.i) ){ sqlite3DbFree(db, p->zErrMsg); p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed"); /* If the schema-cookie from the database file matches the cookie @@ -3352,7 +3383,7 @@ if( pOp->p1==1 ){ /* Invalidate all prepared statements whenever the TEMP database ** schema is changed. Ticket #1644 */ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); p->expired = 0; } if( rc ) goto abort_due_to_error; @@ -3370,59 +3401,78 @@ ** values need not be contiguous but all P1 values should be small integers. ** It is an error for P1 to be negative. ** -** If P5!=0 then use the content of register P2 as the root page, not -** the value of P2 itself. -** -** There will be a read lock on the database whenever there is an -** open cursor. If the database was unlocked prior to this instruction -** then a read lock is acquired as part of this instruction. A read -** lock allows other processes to read the database but prohibits -** any other process from modifying the database. The read lock is -** released when all cursors are closed. If this instruction attempts -** to get a read lock but fails, the script terminates with an -** SQLITE_BUSY error code. +** Allowed P5 bits: +**
          +**
        • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxGT) +**
        ** ** The P4 value may be either an integer (P4_INT32) or a pointer to ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo -** structure, then said structure defines the content and collating -** sequence of the index being opened. Otherwise, if P4 is an integer -** value, it is set to the number of columns in the table. +** object, then table being opened must be an [index b-tree] where the +** KeyInfo object defines the content and collating +** sequence of that index b-tree. Otherwise, if P4 is an integer +** value, then the table being opened must be a [table b-tree] with a +** number of columns no less than the value of P4. ** ** See also: OpenWrite, ReopenIdx */ /* Opcode: ReopenIdx P1 P2 P3 P4 P5 ** Synopsis: root=P2 iDb=P3 ** -** The ReopenIdx opcode works exactly like ReadOpen except that it first -** checks to see if the cursor on P1 is already open with a root page -** number of P2 and if it is this opcode becomes a no-op. In other words, +** The ReopenIdx opcode works like OP_OpenRead except that it first +** checks to see if the cursor on P1 is already open on the same +** b-tree and if it is this opcode becomes a no-op. In other words, ** if the cursor is already open, do not reopen it. ** -** The ReopenIdx opcode may only be used with P5==0 and with P4 being -** a P4_KEYINFO object. Furthermore, the P3 value must be the same as -** every other ReopenIdx or OpenRead for the same cursor number. +** The ReopenIdx opcode may only be used with P5==0 or P5==OPFLAG_SEEKEQ +** and with P4 being a P4_KEYINFO object. Furthermore, the P3 value must +** be the same as every other ReopenIdx or OpenRead for the same cursor +** number. +** +** Allowed P5 bits: +**
          +**
        • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxGT) +**
        ** -** See the OpenRead opcode documentation for additional information. +** See also: OP_OpenRead, OP_OpenWrite */ /* Opcode: OpenWrite P1 P2 P3 P4 P5 ** Synopsis: root=P2 iDb=P3 ** ** Open a read/write cursor named P1 on the table or index whose root -** page is P2. Or if P5!=0 use the content of register P2 to find the -** root page. +** page is P2 (or whose root page is held in register P2 if the +** OPFLAG_P2ISREG bit is set in P5 - see below). ** ** The P4 value may be either an integer (P4_INT32) or a pointer to ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo -** structure, then said structure defines the content and collating -** sequence of the index being opened. Otherwise, if P4 is an integer -** value, it is set to the number of columns in the table, or to the -** largest index of any column of the table that is actually used. -** -** This instruction works just like OpenRead except that it opens the cursor -** in read/write mode. For a given table, there can be one or more read-only -** cursors or a single read/write cursor but not both. +** object, then table being opened must be an [index b-tree] where the +** KeyInfo object defines the content and collating +** sequence of that index b-tree. Otherwise, if P4 is an integer +** value, then the table being opened must be a [table b-tree] with a +** number of columns no less than the value of P4. +** +** Allowed P5 bits: +**
          +**
        • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxGT) +**
        • 0x08 OPFLAG_FORDELETE: This cursor is used only to seek +** and subsequently delete entries in an index btree. This is a +** hint to the storage engine that the storage engine is allowed to +** ignore. The hint is not used by the official SQLite b*tree storage +** engine, but is used by COMDB2. +**
        • 0x10 OPFLAG_P2ISREG: Use the content of register P2 +** as the root page, not the value of P2 itself. +**
        ** -** See also OpenRead. +** This instruction works like OpenRead except that it opens the cursor +** in read/write mode. +** +** See also: OP_OpenRead, OP_ReopenIdx */ case OP_ReopenIdx: { int nField; @@ -3451,7 +3501,7 @@ assert( pOp->opcode==OP_OpenRead || pOp->opcode==OP_ReopenIdx || p->readOnly==0 ); - if( p->expired ){ + if( p->expired==1 ){ rc = SQLITE_ABORT_ROLLBACK; goto abort_due_to_error; } @@ -3478,6 +3528,7 @@ if( pOp->p5 & OPFLAG_P2ISREG ){ assert( p2>0 ); assert( p2<=(p->nMem+1 - p->nCursor) ); + assert( pOp->opcode==OP_OpenWrite ); pIn2 = &aMem[p2]; assert( memIsValid(pIn2) ); assert( (pIn2->flags & MEM_Int)!=0 ); @@ -3606,7 +3657,7 @@ rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBtx, BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags); if( rc==SQLITE_OK ){ - rc = sqlite3BtreeBeginTrans(pCx->pBtx, 1); + rc = sqlite3BtreeBeginTrans(pCx->pBtx, 1, 0); } if( rc==SQLITE_OK ){ /* If a transient index is required, create it by calling @@ -3833,10 +3884,10 @@ ** ** See also: Found, NotFound, SeekGt, SeekGe, SeekLt */ -case OP_SeekLT: /* jump, in3 */ -case OP_SeekLE: /* jump, in3 */ -case OP_SeekGE: /* jump, in3 */ -case OP_SeekGT: { /* jump, in3 */ +case OP_SeekLT: /* jump, in3, group */ +case OP_SeekLE: /* jump, in3, group */ +case OP_SeekGE: /* jump, in3, group */ +case OP_SeekGT: { /* jump, in3, group */ int res; /* Comparison result */ int oc; /* Opcode */ VdbeCursor *pC; /* The cursor to seek */ @@ -4014,6 +4065,25 @@ break; } +/* Opcode: SeekHit P1 P2 * * * +** Synopsis: seekHit=P2 +** +** Set the seekHit flag on cursor P1 to the value in P2. +** The seekHit flag is used by the IfNoHope opcode. +** +** P1 must be a valid b-tree cursor. P2 must be a boolean value, +** either 0 or 1. +*/ +case OP_SeekHit: { + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pOp->p2==0 || pOp->p2==1 ); + pC->seekHit = pOp->p2 & 1; + break; +} + /* Opcode: Found P1 P2 P3 P4 * ** Synopsis: key=r[P3@P4] ** @@ -4048,7 +4118,34 @@ ** advanced in either direction. In other words, the Next and Prev ** opcodes do not work after this operation. ** -** See also: Found, NotExists, NoConflict +** See also: Found, NotExists, NoConflict, IfNoHope +*/ +/* Opcode: IfNoHope P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** Register P3 is the first of P4 registers that form an unpacked +** record. +** +** Cursor P1 is on an index btree. If the seekHit flag is set on P1, then +** this opcode is a no-op. But if the seekHit flag of P1 is clear, then +** check to see if there is any entry in P1 that matches the +** prefix identified by P3 and P4. If no entry matches the prefix, +** jump to P2. Otherwise fall through. +** +** This opcode behaves like OP_NotFound if the seekHit +** flag is clear and it behaves like OP_Noop if the seekHit flag is set. +** +** This opcode is used in IN clause processing for a multi-column key. +** If an IN clause is attached to an element of the key other than the +** left-most element, and if there are no matches on the most recent +** seek over the whole key, then it might be that one of the key element +** to the left is prohibiting a match, and hence there is "no hope" of +** any match regardless of how many IN clause elements are checked. +** In such a case, we abandon the IN clause search early, using this +** opcode. The opcode name comes from the fact that the +** jump is taken if there is "no hope" of achieving a match. +** +** See also: NotFound, SeekHit */ /* Opcode: NoConflict P1 P2 P3 P4 * ** Synopsis: key=r[P3@P4] @@ -4073,6 +4170,14 @@ ** ** See also: NotFound, Found, NotExists */ +case OP_IfNoHope: { /* jump, in3 */ + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + if( pC->seekHit ) break; + /* Fall through into OP_NotFound */ +} case OP_NoConflict: /* jump, in3 */ case OP_NotFound: /* jump, in3 */ case OP_Found: { /* jump, in3 */ @@ -4210,18 +4315,26 @@ pIn3 = &aMem[pOp->p3]; if( (pIn3->flags & MEM_Int)==0 ){ + /* Make sure pIn3->u.i contains a valid integer representation of + ** the key value, but do not change the datatype of the register, as + ** other parts of the perpared statement might be depending on the + ** current datatype. */ + u16 origFlags = pIn3->flags; + int isNotInt; applyAffinity(pIn3, SQLITE_AFF_NUMERIC, encoding); - if( (pIn3->flags & MEM_Int)==0 ) goto jump_to_p2; + isNotInt = (pIn3->flags & MEM_Int)==0; + pIn3->flags = origFlags; + if( isNotInt ) goto jump_to_p2; } /* Fall through into OP_NotExists */ case OP_NotExists: /* jump, in3 */ pIn3 = &aMem[pOp->p3]; - assert( pIn3->flags & MEM_Int ); + assert( (pIn3->flags & MEM_Int)!=0 || pOp->opcode==OP_SeekRowid ); assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; assert( pC!=0 ); #ifdef SQLITE_DEBUG - pC->seekOp = 0; + pC->seekOp = OP_SeekRowid; #endif assert( pC->isTable ); assert( pC->eCurType==CURTYPE_BTREE ); @@ -4875,6 +4988,9 @@ assert( pC->uc.pCursor!=0 ); sqlite3BtreeClearCursor(pC->uc.pCursor); } +#ifdef SQLITE_DEBUG + if( pC->seekOp==0 ) pC->seekOp = OP_NullRow; +#endif break; } @@ -4993,7 +5109,7 @@ p->aCounter[SQLITE_STMTSTATUS_SORT]++; /* Fall through into OP_Rewind */ } -/* Opcode: Rewind P1 P2 * * * +/* Opcode: Rewind P1 P2 * * P5 ** ** The next use of the Rowid or Column or Next instruction for P1 ** will refer to the first entry in the database table or index. @@ -5001,6 +5117,10 @@ ** If the table or index is not empty, fall through to the following ** instruction. ** +** If P5 is non-zero and the table is not empty, then the "skip-next" +** flag is set on the cursor so that the next OP_Next instruction +** executed on it is a no-op. +** ** This opcode leaves the cursor configured to move in forward order, ** from the beginning toward the end. In other words, the cursor is ** configured to use Next, not Prev. @@ -5025,6 +5145,9 @@ pCrsr = pC->uc.pCursor; assert( pCrsr ); rc = sqlite3BtreeFirst(pCrsr, &res); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pOp->p5 ) sqlite3BtreeSkipNext(pCrsr); +#endif pC->deferredMoveto = 0; pC->cacheStatus = CACHE_STALE; } @@ -5061,12 +5184,7 @@ ** If P5 is positive and the jump is taken, then event counter ** number P5-1 in the prepared statement is incremented. ** -** See also: Prev, NextIfOpen -*/ -/* Opcode: NextIfOpen P1 P2 P3 P4 P5 -** -** This opcode works just like Next except that if cursor P1 is not -** open it behaves a no-op. +** See also: Prev */ /* Opcode: Prev P1 P2 P3 P4 P5 ** @@ -5094,11 +5212,6 @@ ** If P5 is positive and the jump is taken, then event counter ** number P5-1 in the prepared statement is incremented. */ -/* Opcode: PrevIfOpen P1 P2 P3 P4 P5 -** -** This opcode works just like Prev except that if cursor P1 is not -** open it behaves a no-op. -*/ /* Opcode: SorterNext P1 P2 * * P5 ** ** This opcode works just like OP_Next except that P1 must be a @@ -5113,10 +5226,6 @@ assert( isSorter(pC) ); rc = sqlite3VdbeSorterNext(db, pC); goto next_tail; -case OP_PrevIfOpen: /* jump */ -case OP_NextIfOpen: /* jump */ - if( p->apCsr[pOp->p1]==0 ) break; - /* Fall through */ case OP_Prev: /* jump */ case OP_Next: /* jump */ assert( pOp->p1>=0 && pOp->p1nCursor ); @@ -5127,17 +5236,17 @@ assert( pC->eCurType==CURTYPE_BTREE ); assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext ); assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious ); - assert( pOp->opcode!=OP_NextIfOpen || pOp->p4.xAdvance==sqlite3BtreeNext ); - assert( pOp->opcode!=OP_PrevIfOpen || pOp->p4.xAdvance==sqlite3BtreePrevious); - /* The Next opcode is only used after SeekGT, SeekGE, and Rewind. + /* The Next opcode is only used after SeekGT, SeekGE, Rewind, and Found. ** The Prev opcode is only used after SeekLT, SeekLE, and Last. */ - assert( pOp->opcode!=OP_Next || pOp->opcode!=OP_NextIfOpen + assert( pOp->opcode!=OP_Next || pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE - || pC->seekOp==OP_Rewind || pC->seekOp==OP_Found); - assert( pOp->opcode!=OP_Prev || pOp->opcode!=OP_PrevIfOpen + || pC->seekOp==OP_Rewind || pC->seekOp==OP_Found + || pC->seekOp==OP_NullRow); + assert( pOp->opcode!=OP_Prev || pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE - || pC->seekOp==OP_Last ); + || pC->seekOp==OP_Last + || pC->seekOp==OP_NullRow); rc = pOp->p4.xAdvance(pC->uc.pCursor, pOp->p3); next_tail: @@ -5420,7 +5529,13 @@ } r.aMem = &aMem[pOp->p3]; #ifdef SQLITE_DEBUG - { int i; for(i=0; ip3+i, &aMem[pOp->p3+i]); + } + } #endif res = 0; /* Not needed. Only used to silence a warning. */ rc = sqlite3VdbeIdxKeyCompare(db, pC, &r, &res); @@ -5607,7 +5722,8 @@ /* Opcode: ParseSchema P1 * * P4 * ** ** Read and parse all entries from the SQLITE_MASTER table of database P1 -** that match the WHERE clause P4. +** that match the WHERE clause P4. If P4 is a NULL pointer, then the +** entire schema for P1 is reparsed. ** ** This opcode invokes the parser to create a new virtual machine, ** then runs the new virtual machine. It is thus a re-entrant opcode. @@ -5631,11 +5747,22 @@ iDb = pOp->p1; assert( iDb>=0 && iDbnDb ); assert( DbHasProperty(db, iDb, DB_SchemaLoaded) ); - /* Used to be a conditional */ { + +#ifndef SQLITE_OMIT_ALTERTABLE + if( pOp->p4.z==0 ){ + sqlite3SchemaClear(db->aDb[iDb].pSchema); + db->mDbFlags &= ~DBFLAG_SchemaKnownOk; + rc = sqlite3InitOne(db, iDb, &p->zErrMsg, INITFLAG_AlterTable); + db->mDbFlags |= DBFLAG_SchemaChange; + p->expired = 0; + }else +#endif + { zMaster = MASTER_NAME; initData.db = db; initData.iDb = pOp->p1; initData.pzErrMsg = &p->zErrMsg; + initData.mInitFlags = 0; zSql = sqlite3MPrintf(db, "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid", db->aDb[iDb].zDbSName, zMaster, pOp->p4.z); @@ -5788,11 +5915,11 @@ pIn1 = &aMem[pOp->p1]; pIn2 = &aMem[pOp->p2]; assert( (pIn2->flags & MEM_Int)!=0 ); - if( (pIn1->flags & MEM_RowSet)==0 ){ - sqlite3VdbeMemSetRowSet(pIn1); - if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem; + if( (pIn1->flags & MEM_Blob)==0 ){ + if( sqlite3VdbeMemSetRowSet(pIn1) ) goto no_mem; } - sqlite3RowSetInsert(pIn1->u.pRowSet, pIn2->u.i); + assert( sqlite3VdbeMemIsRowSet(pIn1) ); + sqlite3RowSetInsert((RowSet*)pIn1->z, pIn2->u.i); break; } @@ -5808,8 +5935,9 @@ i64 val; pIn1 = &aMem[pOp->p1]; - if( (pIn1->flags & MEM_RowSet)==0 - || sqlite3RowSetNext(pIn1->u.pRowSet, &val)==0 + assert( (pIn1->flags & MEM_Blob)==0 || sqlite3VdbeMemIsRowSet(pIn1) ); + if( (pIn1->flags & MEM_Blob)==0 + || sqlite3RowSetNext((RowSet*)pIn1->z, &val)==0 ){ /* The boolean index is empty */ sqlite3VdbeMemSetNull(pIn1); @@ -5858,20 +5986,19 @@ /* If there is anything other than a rowset object in memory cell P1, ** delete it now and initialize P1 with an empty rowset */ - if( (pIn1->flags & MEM_RowSet)==0 ){ - sqlite3VdbeMemSetRowSet(pIn1); - if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem; + if( (pIn1->flags & MEM_Blob)==0 ){ + if( sqlite3VdbeMemSetRowSet(pIn1) ) goto no_mem; } - + assert( sqlite3VdbeMemIsRowSet(pIn1) ); assert( pOp->p4type==P4_INT32 ); assert( iSet==-1 || iSet>=0 ); if( iSet ){ - exists = sqlite3RowSetTest(pIn1->u.pRowSet, iSet, pIn3->u.i); + exists = sqlite3RowSetTest((RowSet*)pIn1->z, iSet, pIn3->u.i); VdbeBranchTaken(exists!=0,2); if( exists ) goto jump_to_p2; } if( iSet>=0 ){ - sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i); + sqlite3RowSetInsert((RowSet*)pIn1->z, pIn3->u.i); } break; } @@ -5935,7 +6062,7 @@ ** of the current program, and the memory required at runtime to execute ** the trigger program. If this trigger has been fired before, then pRt ** is already allocated. Otherwise, it must be initialized. */ - if( (pRt->flags&MEM_Frame)==0 ){ + if( (pRt->flags&MEM_Blob)==0 ){ /* SubProgram.nMem is set to the number of memory cells used by the ** program stored in SubProgram.aOp. As well as these, one memory ** cell is required for each cursor used by the program. Set local @@ -5953,8 +6080,10 @@ goto no_mem; } sqlite3VdbeMemRelease(pRt); - pRt->flags = MEM_Frame; - pRt->u.pFrame = pFrame; + pRt->flags = MEM_Blob|MEM_Dyn; + pRt->z = (char*)pFrame; + pRt->n = nByte; + pRt->xDel = sqlite3VdbeFrameMemDel; pFrame->v = p; pFrame->nChildMem = nMem; @@ -5970,6 +6099,9 @@ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS pFrame->anExec = p->anExec; #endif +#ifdef SQLITE_DEBUG + pFrame->iFrameMagic = SQLITE_FRAME_MAGIC; +#endif pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem]; for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){ @@ -5977,7 +6109,8 @@ pMem->db = db; } }else{ - pFrame = pRt->u.pFrame; + pFrame = (VdbeFrame*)pRt->z; + assert( pRt->xDel==sqlite3VdbeFrameMemDel ); assert( pProgram->nMem+pProgram->nCsr==pFrame->nChildMem || (pProgram->nCsr==0 && pProgram->nMem+1==pFrame->nChildMem) ); assert( pProgram->nCsr==pFrame->nChildCsr ); @@ -6206,24 +6339,35 @@ } -/* Opcode: AggStep0 * P2 P3 P4 P5 +/* Opcode: AggStep * P2 P3 P4 P5 ** Synopsis: accum=r[P3] step(r[P2@P5]) ** -** Execute the step function for an aggregate. The -** function has P5 arguments. P4 is a pointer to the FuncDef -** structure that specifies the function. Register P3 is the +** Execute the xStep function for an aggregate. +** The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the ** accumulator. ** ** The P5 arguments are taken from register P2 and its ** successors. */ -/* Opcode: AggStep * P2 P3 P4 P5 +/* Opcode: AggInverse * P2 P3 P4 P5 +** Synopsis: accum=r[P3] inverse(r[P2@P5]) +** +** Execute the xInverse function for an aggregate. +** The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the +** accumulator. +** +** The P5 arguments are taken from register P2 and its +** successors. +*/ +/* Opcode: AggStep1 P1 P2 P3 P4 P5 ** Synopsis: accum=r[P3] step(r[P2@P5]) ** -** Execute the step function for an aggregate. The -** function has P5 arguments. P4 is a pointer to an sqlite3_context -** object that is used to run the function. Register P3 is -** as the accumulator. +** Execute the xStep (if P1==0) or xInverse (if P1!=0) function for an +** aggregate. The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the +** accumulator. ** ** The P5 arguments are taken from register P2 and its ** successors. @@ -6234,7 +6378,8 @@ ** sqlite3_context only happens once, instead of on each call to the ** step function. */ -case OP_AggStep0: { +case OP_AggInverse: +case OP_AggStep: { int n; sqlite3_context *pCtx; @@ -6257,10 +6402,14 @@ pCtx->argc = n; pOp->p4type = P4_FUNCCTX; pOp->p4.pCtx = pCtx; - pOp->opcode = OP_AggStep; + + /* OP_AggInverse must have P1==1 and OP_AggStep must have P1==0 */ + assert( pOp->p1==(pOp->opcode==OP_AggInverse) ); + + pOp->opcode = OP_AggStep1; /* Fall through into OP_AggStep */ } -case OP_AggStep: { +case OP_AggStep1: { int i; sqlite3_context *pCtx; Mem *pMem; @@ -6269,6 +6418,17 @@ pCtx = pOp->p4.pCtx; pMem = &aMem[pOp->p3]; +#ifdef SQLITE_DEBUG + if( pOp->p1 ){ + /* This is an OP_AggInverse call. Verify that xStep has always + ** been called at least once prior to any xInverse call. */ + assert( pMem->uTemp==0x1122e0e3 ); + }else{ + /* This is an OP_AggStep call. Mark it as such. */ + pMem->uTemp = 0x1122e0e3; + } +#endif + /* If this function is inside of a trigger, the register array in aMem[] ** might change from one evaluation to the next. The next block of code ** checks to see if the register array has changed, and if so it @@ -6289,7 +6449,13 @@ assert( pCtx->pOut->flags==MEM_Null ); assert( pCtx->isError==0 ); assert( pCtx->skipFlag==0 ); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pOp->p1 ){ + (pCtx->pFunc->xInverse)(pCtx,pCtx->argc,pCtx->argv); + }else +#endif (pCtx->pFunc->xSFunc)(pCtx,pCtx->argc,pCtx->argv); /* IMP: R-24505-23230 */ + if( pCtx->isError ){ if( pCtx->isError>0 ){ sqlite3VdbeError(p, "%s", sqlite3_value_text(pCtx->pOut)); @@ -6314,22 +6480,46 @@ /* Opcode: AggFinal P1 P2 * P4 * ** Synopsis: accum=r[P1] N=P2 ** -** Execute the finalizer function for an aggregate. P1 is -** the memory location that is the accumulator for the aggregate. +** P1 is the memory location that is the accumulator for an aggregate +** or window function. Execute the finalizer function +** for an aggregate and store the result in P1. +** +** P2 is the number of arguments that the step function takes and +** P4 is a pointer to the FuncDef for this function. The P2 +** argument is not used by this opcode. It is only there to disambiguate +** functions that can take varying numbers of arguments. The +** P4 argument is only needed for the case where +** the step function was not previously called. +*/ +/* Opcode: AggValue * P2 P3 P4 * +** Synopsis: r[P3]=value N=P2 +** +** Invoke the xValue() function and store the result in register P3. ** ** P2 is the number of arguments that the step function takes and ** P4 is a pointer to the FuncDef for this function. The P2 ** argument is not used by this opcode. It is only there to disambiguate ** functions that can take varying numbers of arguments. The -** P4 argument is only needed for the degenerate case where +** P4 argument is only needed for the case where ** the step function was not previously called. */ +case OP_AggValue: case OP_AggFinal: { Mem *pMem; assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); + assert( pOp->p3==0 || pOp->opcode==OP_AggValue ); pMem = &aMem[pOp->p1]; assert( (pMem->flags & ~(MEM_Null|MEM_Agg))==0 ); - rc = sqlite3VdbeMemFinalize(pMem, pOp->p4.pFunc); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pOp->p3 ){ + rc = sqlite3VdbeMemAggValue(pMem, &aMem[pOp->p3], pOp->p4.pFunc); + pMem = &aMem[pOp->p3]; + }else +#endif + { + rc = sqlite3VdbeMemFinalize(pMem, pOp->p4.pFunc); + } + if( rc ){ sqlite3VdbeError(p, "%s", sqlite3_value_text(pMem)); goto abort_due_to_error; @@ -6524,7 +6714,7 @@ } #endif -/* Opcode: Expire P1 * * * * +/* Opcode: Expire P1 P2 * * * ** ** Cause precompiled statements to expire. When an expired statement ** is executed using sqlite3_step() it will either automatically @@ -6533,12 +6723,19 @@ ** ** If P1 is 0, then all SQL statements become expired. If P1 is non-zero, ** then only the currently executing statement is expired. +** +** If P2 is 0, then SQL statements are expired immediately. If P2 is 1, +** then running SQL statements are allowed to continue to run to completion. +** The P2==1 case occurs when a CREATE INDEX or similar schema change happens +** that might help the statement run faster but which does not affect the +** correctness of operation. */ case OP_Expire: { + assert( pOp->p2==0 || pOp->p2==1 ); if( !pOp->p1 ){ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, pOp->p2); }else{ - p->expired = 1; + p->expired = pOp->p2+1; } break; } @@ -6760,10 +6957,11 @@ ** ** If the VColumn opcode is being used to fetch the value of ** an unchanging column during an UPDATE operation, then the P5 -** value is 1. Otherwise, P5 is 0. The P5 value is returned -** by sqlite3_vtab_nochange() routine and can be used -** by virtual table implementations to return special "no-change" -** marks which can be more efficient, depending on the virtual table. +** value is OPFLAG_NOCHNG. This will cause the sqlite3_vtab_nochange() +** function to return true inside the xColumn method of the virtual +** table implementation. The P5 column might also contain other +** bits (OPFLAG_LENGTHARG or OPFLAG_TYPEOFARG) but those bits are +** unused by OP_VColumn. */ case OP_VColumn: { sqlite3_vtab *pVtab; @@ -6785,7 +6983,8 @@ assert( pModule->xColumn ); memset(&sContext, 0, sizeof(sContext)); sContext.pOut = pDest; - if( pOp->p5 ){ + testcase( (pOp->p5 & OPFLAG_NOCHNG)==0 && pOp->p5!=0 ); + if( pOp->p5 & OPFLAG_NOCHNG ){ sqlite3VdbeMemSetNull(pDest); pDest->flags = MEM_Null|MEM_Zero; pDest->u.nZero = 0; @@ -6862,7 +7061,10 @@ case OP_VRename: { sqlite3_vtab *pVtab; Mem *pName; - + int isLegacy; + + isLegacy = (db->flags & SQLITE_LegacyAlter); + db->flags |= SQLITE_LegacyAlter; pVtab = pOp->p4.pVtab->pVtab; pName = &aMem[pOp->p1]; assert( pVtab->pModule->xRename ); @@ -6876,6 +7078,7 @@ rc = sqlite3VdbeChangeEncoding(pName, SQLITE_UTF8); if( rc ) goto abort_due_to_error; rc = pVtab->pModule->xRename(pVtab, pName->z); + if( isLegacy==0 ) db->flags &= ~SQLITE_LegacyAlter; sqlite3VtabImportErrmsg(p, pVtab); p->expired = 0; if( rc ) goto abort_due_to_error; @@ -6924,6 +7127,7 @@ || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace ); assert( p->readOnly==0 ); + if( db->mallocFailed ) goto no_mem; sqlite3VdbeIncrWriteCounter(p, 0); pVtab = pOp->p4.pVtab->pVtab; if( pVtab==0 || NEVER(pVtab->pModule==0) ){ @@ -7045,8 +7249,8 @@ ** ** See also: Function0, AggStep, AggFinal */ -case OP_PureFunc0: -case OP_Function0: { +case OP_PureFunc0: /* group */ +case OP_Function0: { /* group */ int n; sqlite3_context *pCtx; @@ -7070,8 +7274,8 @@ pOp->opcode += 2; /* Fall through into OP_Function */ } -case OP_PureFunc: -case OP_Function: { +case OP_PureFunc: /* group */ +case OP_Function: { /* group */ int i; sqlite3_context *pCtx; diff -Nru lxd-3.0.2/dist/sqlite/src/vdbe.h lxd-3.0.3/dist/sqlite/src/vdbe.h --- lxd-3.0.2/dist/sqlite/src/vdbe.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vdbe.h 2018-11-22 20:54:16.000000000 +0000 @@ -73,7 +73,8 @@ u64 cycles; /* Total time spent executing this instruction */ #endif #ifdef SQLITE_VDBE_COVERAGE - int iSrcLine; /* Source-code line that generated this opcode */ + u32 iSrcLine; /* Source-code line that generated this opcode + ** with flags in the upper 8 bits */ #endif }; typedef struct VdbeOp VdbeOp; @@ -237,9 +238,6 @@ void sqlite3VdbeMakeReady(Vdbe*,Parse*); int sqlite3VdbeFinalize(Vdbe*); void sqlite3VdbeResolveLabel(Vdbe*, int); -#ifdef SQLITE_COVERAGE_TEST - int sqlite3VdbeLabelHasBeenResolved(Vdbe*,int); -#endif int sqlite3VdbeCurrentAddr(Vdbe*); #ifdef SQLITE_DEBUG int sqlite3VdbeAssertMayAbort(Vdbe *, int); @@ -261,6 +259,7 @@ char *sqlite3VdbeExpandSql(Vdbe*, const char*); #endif int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*); +int sqlite3BlobCompare(const Mem*, const Mem*); void sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,UnpackedRecord*); int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*); @@ -316,23 +315,52 @@ ** ** VdbeCoverageNeverTaken(v) // Previous branch is never taken ** +** VdbeCoverageNeverNull(v) // Previous three-way branch is only +** // taken on the first two ways. The +** // NULL option is not possible +** +** VdbeCoverageEqNe(v) // Previous OP_Jump is only interested +** // in distingishing equal and not-equal. +** ** Every VDBE branch operation must be tagged with one of the macros above. ** If not, then when "make test" is run with -DSQLITE_VDBE_COVERAGE and ** -DSQLITE_DEBUG then an ALWAYS() will fail in the vdbeTakeBranch() ** routine in vdbe.c, alerting the developer to the missed tag. +** +** During testing, the test application will invoke +** sqlite3_test_control(SQLITE_TESTCTRL_VDBE_COVERAGE,...) to set a callback +** routine that is invoked as each bytecode branch is taken. The callback +** contains the sqlite3.c source line number ov the VdbeCoverage macro and +** flags to indicate whether or not the branch was taken. The test application +** is responsible for keeping track of this and reporting byte-code branches +** that are never taken. +** +** See the VdbeBranchTaken() macro and vdbeTakeBranch() function in the +** vdbe.c source file for additional information. */ #ifdef SQLITE_VDBE_COVERAGE void sqlite3VdbeSetLineNumber(Vdbe*,int); # define VdbeCoverage(v) sqlite3VdbeSetLineNumber(v,__LINE__) # define VdbeCoverageIf(v,x) if(x)sqlite3VdbeSetLineNumber(v,__LINE__) -# define VdbeCoverageAlwaysTaken(v) sqlite3VdbeSetLineNumber(v,2); -# define VdbeCoverageNeverTaken(v) sqlite3VdbeSetLineNumber(v,1); +# define VdbeCoverageAlwaysTaken(v) \ + sqlite3VdbeSetLineNumber(v,__LINE__|0x5000000); +# define VdbeCoverageNeverTaken(v) \ + sqlite3VdbeSetLineNumber(v,__LINE__|0x6000000); +# define VdbeCoverageNeverNull(v) \ + sqlite3VdbeSetLineNumber(v,__LINE__|0x4000000); +# define VdbeCoverageNeverNullIf(v,x) \ + if(x)sqlite3VdbeSetLineNumber(v,__LINE__|0x4000000); +# define VdbeCoverageEqNe(v) \ + sqlite3VdbeSetLineNumber(v,__LINE__|0x8000000); # define VDBE_OFFSET_LINENO(x) (__LINE__+x) #else # define VdbeCoverage(v) # define VdbeCoverageIf(v,x) # define VdbeCoverageAlwaysTaken(v) # define VdbeCoverageNeverTaken(v) +# define VdbeCoverageNeverNull(v) +# define VdbeCoverageNeverNullIf(v,x) +# define VdbeCoverageEqNe(v) # define VDBE_OFFSET_LINENO(x) 0 #endif @@ -342,4 +370,8 @@ # define sqlite3VdbeScanStatus(a,b,c,d,e) #endif +#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) +void sqlite3VdbePrintOp(FILE*, int, VdbeOp*); +#endif + #endif /* SQLITE_VDBE_H */ diff -Nru lxd-3.0.2/dist/sqlite/src/vdbeInt.h lxd-3.0.3/dist/sqlite/src/vdbeInt.h --- lxd-3.0.2/dist/sqlite/src/vdbeInt.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vdbeInt.h 2018-11-22 20:54:16.000000000 +0000 @@ -85,6 +85,7 @@ Bool isEphemeral:1; /* True for an ephemeral table */ Bool useRandomRowid:1; /* Generate new record numbers semi-randomly */ Bool isOrdered:1; /* True if the table is not BTREE_UNORDERED */ + Bool seekHit:1; /* See the OP_SeekHit and OP_IfNoHope opcodes */ Btree *pBtx; /* Separate file holding temporary table */ i64 seqCount; /* Sequence counter */ int *aAltMap; /* Mapping from table to index column numbers */ @@ -168,6 +169,9 @@ void *token; /* Copy of SubProgram.token */ i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */ AuxData *pAuxData; /* Linked list of auxdata allocations */ +#if SQLITE_DEBUG + u32 iFrameMagic; /* magic number for sanity checking */ +#endif int nCursor; /* Number of entries in apCsr */ int pc; /* Program Counter in parent (calling) frame */ int nOp; /* Size of aOp array */ @@ -178,6 +182,13 @@ int nDbChange; /* Value of db->nChange */ }; +/* Magic number for sanity checking on VdbeFrame objects */ +#define SQLITE_FRAME_MAGIC 0x879fb71e + +/* +** Return a pointer to the array of registers allocated for use +** by a VdbeFrame. +*/ #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))]) /* @@ -192,8 +203,6 @@ int nZero; /* Extra zero bytes when MEM_Zero and MEM_Blob set */ const char *zPType; /* Pointer type when MEM_Term|MEM_Subtype|MEM_Null */ FuncDef *pDef; /* Used only when flags==MEM_Agg */ - RowSet *pRowSet; /* Used only when flags==MEM_RowSet */ - VdbeFrame *pFrame; /* Used when flags==MEM_Frame */ } u; u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */ u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */ @@ -208,7 +217,7 @@ void (*xDel)(void*);/* Destructor for Mem.z - only valid if MEM_Dyn */ #ifdef SQLITE_DEBUG Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */ - void *pFiller; /* So that sizeof(Mem) is a multiple of 8 */ + u16 mScopyFlags; /* flags value immediately after the shallow copy */ #endif }; @@ -237,8 +246,8 @@ #define MEM_Real 0x0008 /* Value is a real number */ #define MEM_Blob 0x0010 /* Value is a BLOB */ #define MEM_AffMask 0x001f /* Mask of affinity bits */ -#define MEM_RowSet 0x0020 /* Value is a RowSet object */ -#define MEM_Frame 0x0040 /* Value is a VdbeFrame object */ +/* Available 0x0020 */ +/* Available 0x0040 */ #define MEM_Undefined 0x0080 /* Value is undefined */ #define MEM_Cleared 0x0100 /* NULL set by OP_Null, not from data */ #define MEM_TypeMask 0xc1ff /* Mask of type bits */ @@ -265,7 +274,7 @@ ** that needs to be deallocated to avoid a leak. */ #define VdbeMemDynamic(X) \ - (((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame))!=0) + (((X)->flags&(MEM_Agg|MEM_Dyn))!=0) /* ** Clear any existing type flags from a Mem and replace them with f @@ -385,9 +394,9 @@ u8 errorAction; /* Recovery action to do in case of an error */ u8 minWriteFileFormat; /* Minimum file format for writable database files */ u8 prepFlags; /* SQLITE_PREPARE_* flags */ - bft expired:1; /* True if the VM needs to be recompiled */ - bft doingRerun:1; /* True if rerunning after an auto-reprepare */ + bft expired:2; /* 1: recompile VM immediately 2: when convenient */ bft explain:2; /* True if EXPLAIN present on SQL command */ + bft doingRerun:1; /* True if rerunning after an auto-reprepare */ bft changeCntOn:1; /* True to update the change-counter */ bft runOnlyOnce:1; /* Automatically expire on reset */ bft usesStmtJournal:1; /* True if uses a statement journal */ @@ -448,9 +457,6 @@ void sqliteVdbePopStack(Vdbe*,int); int sqlite3VdbeCursorMoveto(VdbeCursor**, int*); int sqlite3VdbeCursorRestore(VdbeCursor*); -#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) -void sqlite3VdbePrintOp(FILE*, int, Op*); -#endif u32 sqlite3VdbeSerialTypeLen(u32); u8 sqlite3VdbeOneByteSerialTypeLen(u8); u32 sqlite3VdbeSerialType(Mem*, int, u32*); @@ -481,7 +487,10 @@ void sqlite3VdbeMemInit(Mem*,sqlite3*,u16); void sqlite3VdbeMemSetNull(Mem*); void sqlite3VdbeMemSetZeroBlob(Mem*,int); -void sqlite3VdbeMemSetRowSet(Mem*); +#ifdef SQLITE_DEBUG +int sqlite3VdbeMemIsRowSet(const Mem*); +#endif +int sqlite3VdbeMemSetRowSet(Mem*); int sqlite3VdbeMemMakeWriteable(Mem*); int sqlite3VdbeMemStringify(Mem*, u8, u8); i64 sqlite3VdbeIntValue(Mem*); @@ -495,11 +504,18 @@ int sqlite3VdbeMemFromBtree(BtCursor*,u32,u32,Mem*); void sqlite3VdbeMemRelease(Mem *p); int sqlite3VdbeMemFinalize(Mem*, FuncDef*); +#ifndef SQLITE_OMIT_WINDOWFUNC +int sqlite3VdbeMemAggValue(Mem*, Mem*, FuncDef*); +#endif const char *sqlite3OpcodeName(int); int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve); int sqlite3VdbeMemClearAndResize(Mem *pMem, int n); int sqlite3VdbeCloseStatement(Vdbe *, int); -void sqlite3VdbeFrameDelete(VdbeFrame*); +#ifdef SQLITE_DEBUG +int sqlite3VdbeFrameIsValid(VdbeFrame*); +#endif +void sqlite3VdbeFrameMemDel(void*); /* Destructor on Mem */ +void sqlite3VdbeFrameDelete(VdbeFrame*); /* Actually deletes the Frame */ int sqlite3VdbeFrameRestore(VdbeFrame *); #ifdef SQLITE_ENABLE_PREUPDATE_HOOK void sqlite3VdbePreUpdateHook(Vdbe*,VdbeCursor*,int,const char*,Table*,i64,int); diff -Nru lxd-3.0.2/dist/sqlite/src/vdbemem.c lxd-3.0.3/dist/sqlite/src/vdbemem.c --- lxd-3.0.2/dist/sqlite/src/vdbemem.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vdbemem.c 2018-11-22 20:54:16.000000000 +0000 @@ -42,8 +42,7 @@ if( p->flags & MEM_Null ){ /* Cannot be both MEM_Null and some other type */ - assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob - |MEM_RowSet|MEM_Frame|MEM_Agg))==0 ); + assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob|MEM_Agg))==0 ); /* If MEM_Null is set, then either the value is a pure NULL (the usual ** case) or it is a pointer set using sqlite3_bind_pointer() or @@ -156,7 +155,7 @@ #ifndef SQLITE_OMIT_UTF16 int rc; #endif - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE || desiredEnc==SQLITE_UTF16BE ); if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){ @@ -189,7 +188,7 @@ */ SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){ assert( sqlite3VdbeCheckMemInvariants(pMem) ); - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); testcase( pMem->db==0 ); /* If the bPreserve flag is set to true, then the memory cell must already @@ -277,7 +276,7 @@ */ int sqlite3VdbeMemMakeWriteable(Mem *pMem){ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); if( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ){ if( ExpandBlob(pMem) ) return SQLITE_NOMEM; if( pMem->szMalloc==0 || pMem->z!=pMem->zMalloc ){ @@ -302,7 +301,7 @@ int nByte; assert( pMem->flags & MEM_Zero ); assert( pMem->flags&MEM_Blob ); - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); /* Set nByte to the number of bytes required to store the expanded blob. */ @@ -357,7 +356,7 @@ assert( !(fg&MEM_Zero) ); assert( !(fg&(MEM_Str|MEM_Blob)) ); assert( fg&(MEM_Int|MEM_Real) ); - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( EIGHT_BYTE_ALIGNMENT(pMem) ); @@ -416,6 +415,35 @@ } /* +** Memory cell pAccum contains the context of an aggregate function. +** This routine calls the xValue method for that function and stores +** the results in memory cell pMem. +** +** SQLITE_ERROR is returned if xValue() reports an error. SQLITE_OK +** otherwise. +*/ +#ifndef SQLITE_OMIT_WINDOWFUNC +int sqlite3VdbeMemAggValue(Mem *pAccum, Mem *pOut, FuncDef *pFunc){ + sqlite3_context ctx; + Mem t; + assert( pFunc!=0 ); + assert( pFunc->xValue!=0 ); + assert( (pAccum->flags & MEM_Null)!=0 || pFunc==pAccum->u.pDef ); + assert( pAccum->db==0 || sqlite3_mutex_held(pAccum->db->mutex) ); + memset(&ctx, 0, sizeof(ctx)); + memset(&t, 0, sizeof(t)); + t.flags = MEM_Null; + t.db = pAccum->db; + sqlite3VdbeMemSetNull(pOut); + ctx.pOut = pOut; + ctx.pMem = pAccum; + ctx.pFunc = pFunc; + pFunc->xValue(&ctx); + return ctx.isError; +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* ** If the memory cell contains a value that must be freed by ** invoking the external callback in Mem.xDel, then this routine ** will free that value. It also sets Mem.flags to MEM_Null. @@ -433,15 +461,8 @@ testcase( p->flags & MEM_Dyn ); } if( p->flags&MEM_Dyn ){ - assert( (p->flags&MEM_RowSet)==0 ); assert( p->xDel!=SQLITE_DYNAMIC && p->xDel!=0 ); p->xDel((void *)p->z); - }else if( p->flags&MEM_RowSet ){ - sqlite3RowSetClear(p->u.pRowSet); - }else if( p->flags&MEM_Frame ){ - VdbeFrame *pFrame = p->u.pFrame; - pFrame->pParent = pFrame->v->pDelFrame; - pFrame->v->pDelFrame = pFrame; } p->flags = MEM_Null; } @@ -589,7 +610,7 @@ void sqlite3VdbeIntegerAffinity(Mem *pMem){ i64 ix; assert( pMem->flags & MEM_Real ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); assert( EIGHT_BYTE_ALIGNMENT(pMem) ); @@ -616,7 +637,7 @@ */ int sqlite3VdbeMemIntegerify(Mem *pMem){ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( EIGHT_BYTE_ALIGNMENT(pMem) ); pMem->u.i = sqlite3VdbeIntValue(pMem); @@ -834,26 +855,36 @@ } #endif +#ifdef SQLITE_DEBUG +/* +** Return true if the Mem holds a RowSet object. This routine is intended +** for use inside of assert() statements. +*/ +int sqlite3VdbeMemIsRowSet(const Mem *pMem){ + return (pMem->flags&(MEM_Blob|MEM_Dyn))==(MEM_Blob|MEM_Dyn) + && pMem->xDel==sqlite3RowSetDelete; +} +#endif + /* ** Delete any previous value and set the value of pMem to be an ** empty boolean index. +** +** Return SQLITE_OK on success and SQLITE_NOMEM if a memory allocation +** error occurs. */ -void sqlite3VdbeMemSetRowSet(Mem *pMem){ +int sqlite3VdbeMemSetRowSet(Mem *pMem){ sqlite3 *db = pMem->db; + RowSet *p; assert( db!=0 ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); sqlite3VdbeMemRelease(pMem); - pMem->zMalloc = sqlite3DbMallocRawNN(db, 64); - if( db->mallocFailed ){ - pMem->flags = MEM_Null; - pMem->szMalloc = 0; - }else{ - assert( pMem->zMalloc ); - pMem->szMalloc = sqlite3DbMallocSize(db, pMem->zMalloc); - pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, pMem->szMalloc); - assert( pMem->u.pRowSet!=0 ); - pMem->flags = MEM_RowSet; - } + p = sqlite3RowSetInit(db); + if( p==0 ) return SQLITE_NOMEM; + pMem->z = (char*)p; + pMem->flags = MEM_Blob|MEM_Dyn; + pMem->xDel = sqlite3RowSetDelete; + return SQLITE_OK; } /* @@ -886,7 +917,21 @@ Mem *pX; for(i=0, pX=pVdbe->aMem; inMem; i++, pX++){ if( pX->pScopyFrom==pMem ){ - pX->flags |= MEM_Undefined; + /* If pX is marked as a shallow copy of pMem, then verify that + ** no significant changes have been made to pX since the OP_SCopy. + ** A significant change would indicated a missed call to this + ** function for pX. Minor changes, such as adding or removing a + ** dual type, are allowed, as long as the underlying value is the + ** same. */ + u16 mFlags = pMem->flags & pX->flags & pX->mScopyFlags; + assert( (mFlags&MEM_Int)==0 || pMem->u.i==pX->u.i ); + assert( (mFlags&MEM_Real)==0 || pMem->u.r==pX->u.r ); + assert( (mFlags&MEM_Str)==0 || (pMem->n==pX->n && pMem->z==pX->z) ); + assert( (mFlags&MEM_Blob)==0 || sqlite3BlobCompare(pMem,pX)==0 ); + + /* pMem is the register that is changing. But also mark pX as + ** undefined so that we can quickly detect the shallow-copy error */ + pX->flags = MEM_Undefined; pX->pScopyFrom = 0; } } @@ -907,7 +952,7 @@ sqlite3VdbeMemShallowCopy(pTo, pFrom, eType); } void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){ - assert( (pFrom->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pFrom) ); assert( pTo->db==pFrom->db ); if( VdbeMemDynamic(pTo) ){ vdbeClrCopy(pTo,pFrom,srcType); return; } memcpy(pTo, pFrom, MEMCELLSIZE); @@ -925,7 +970,7 @@ int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){ int rc = SQLITE_OK; - assert( (pFrom->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pFrom) ); if( VdbeMemDynamic(pTo) ) vdbeMemClearExternAndSetNull(pTo); memcpy(pTo, pFrom, MEMCELLSIZE); pTo->flags &= ~MEM_Dyn; @@ -983,7 +1028,7 @@ u16 flags = 0; /* New value for pMem->flags */ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); /* If z is a NULL pointer, set pMem to contain an SQL NULL. */ if( !z ){ @@ -1105,7 +1150,7 @@ /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() ** that both the BtShared and database handle mutexes are held. */ - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); zData = (char *)sqlite3BtreePayloadFetch(pCur, &available); assert( zData!=0 ); @@ -1129,7 +1174,7 @@ assert( pVal!=0 ); assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) ); assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); - assert( (pVal->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pVal) ); assert( (pVal->flags & (MEM_Null))==0 ); if( pVal->flags & (MEM_Blob|MEM_Str) ){ if( ExpandBlob(pVal) ) return 0; @@ -1172,7 +1217,7 @@ if( !pVal ) return 0; assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) ); assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); - assert( (pVal->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pVal) ); if( (pVal->flags&(MEM_Str|MEM_Term))==(MEM_Str|MEM_Term) && pVal->enc==enc ){ assert( sqlite3VdbeMemConsistentDualRep(pVal) ); return pVal->z; @@ -1739,11 +1784,11 @@ int iCol, /* Column to extract */ sqlite3_value **ppVal /* OUT: Extracted value */ ){ - u32 t; /* a column type code */ + u32 t = 0; /* a column type code */ int nHdr; /* Size of the header in the record */ int iHdr; /* Next unread header byte */ int iField; /* Next unread data byte */ - int szField; /* Size of the current data field */ + int szField = 0; /* Size of the current data field */ int i; /* Column index */ u8 *a = (u8*)pRec; /* Typecast byte array */ Mem *pMem = *ppVal; /* Write result into this Mem object */ diff -Nru lxd-3.0.2/dist/sqlite/src/vdbesort.c lxd-3.0.3/dist/sqlite/src/vdbesort.c --- lxd-3.0.2/dist/sqlite/src/vdbesort.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vdbesort.c 2018-11-22 20:54:16.000000000 +0000 @@ -2107,7 +2107,11 @@ ){ int rc = SQLITE_OK; /* Return code */ int i; /* For looping over PmaReader objects */ - int nTree = pMerger->nTree; + int nTree; /* Number of subtrees to merge */ + + /* Failure to allocate the merge would have been detected prior to + ** invoking this routine */ + assert( pMerger!=0 ); /* eMode is always INCRINIT_NORMAL in single-threaded mode */ assert( SQLITE_MAX_WORKER_THREADS>0 || eMode==INCRINIT_NORMAL ); @@ -2116,6 +2120,7 @@ assert( pMerger->pTask==0 ); pMerger->pTask = pTask; + nTree = pMerger->nTree; for(i=0; i0 && eMode==INCRINIT_ROOT ){ /* PmaReaders should be normally initialized in order, as if they are diff -Nru lxd-3.0.2/dist/sqlite/src/vtab.c lxd-3.0.3/dist/sqlite/src/vtab.c --- lxd-3.0.2/dist/sqlite/src/vtab.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/vtab.c 2018-11-22 20:54:16.000000000 +0000 @@ -262,7 +262,7 @@ assert( sqlite3_mutex_held(db->mutex) ); if( p ){ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); do { VTable *pNext = p->pNext; sqlite3VtabUnlock(p); @@ -758,7 +758,7 @@ assert( IsVirtual(pTab) ); memset(&sParse, 0, sizeof(sParse)); - sParse.declareVtab = 1; + sParse.eParseMode = PARSE_MODE_DECLARE_VTAB; sParse.db = db; sParse.nQueryLoop = 1; if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable, &zErr) @@ -799,7 +799,7 @@ sqlite3DbFree(db, zErr); rc = SQLITE_ERROR; } - sParse.declareVtab = 0; + sParse.eParseMode = PARSE_MODE_NORMAL; if( sParse.pVdbe ){ sqlite3VdbeFinalize(sParse.pVdbe); diff -Nru lxd-3.0.2/dist/sqlite/src/wal.c lxd-3.0.3/dist/sqlite/src/wal.c --- lxd-3.0.2/dist/sqlite/src/wal.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/wal.c 2018-11-22 20:54:16.000000000 +0000 @@ -259,6 +259,18 @@ #endif /* +** WAL mode depends on atomic aligned 32-bit loads and stores in a few +** places. The following macros try to make this explicit. +*/ +#if GCC_VESRION>=5004000 +# define AtomicLoad(PTR) __atomic_load_n((PTR),__ATOMIC_RELAXED) +# define AtomicStore(PTR,VAL) __atomic_store_n((PTR),(VAL),__ATOMIC_RELAXED) +#else +# define AtomicLoad(PTR) (*(PTR)) +# define AtomicStore(PTR,VAL) (*(PTR) = (VAL)) +#endif + +/* ** The maximum (and only) versions of the wal and wal-index formats ** that may be interpreted by this version of SQLite. ** @@ -880,48 +892,51 @@ return (iPriorHash+1)&(HASHTABLE_NSLOT-1); } +/* +** An instance of the WalHashLoc object is used to describe the location +** of a page hash table in the wal-index. This becomes the return value +** from walHashGet(). +*/ +typedef struct WalHashLoc WalHashLoc; +struct WalHashLoc { + volatile ht_slot *aHash; /* Start of the wal-index hash table */ + volatile u32 *aPgno; /* aPgno[1] is the page of first frame indexed */ + u32 iZero; /* One less than the frame number of first indexed*/ +}; + /* ** Return pointers to the hash table and page number array stored on ** page iHash of the wal-index. The wal-index is broken into 32KB pages ** numbered starting from 0. ** -** Set output variable *paHash to point to the start of the hash table -** in the wal-index file. Set *piZero to one less than the frame +** Set output variable pLoc->aHash to point to the start of the hash table +** in the wal-index file. Set pLoc->iZero to one less than the frame ** number of the first frame indexed by this hash table. If a ** slot in the hash table is set to N, it refers to frame number -** (*piZero+N) in the log. +** (pLoc->iZero+N) in the log. ** -** Finally, set *paPgno so that *paPgno[1] is the page number of the -** first frame indexed by the hash table, frame (*piZero+1). +** Finally, set pLoc->aPgno so that pLoc->aPgno[1] is the page number of the +** first frame indexed by the hash table, frame (pLoc->iZero+1). */ static int walHashGet( Wal *pWal, /* WAL handle */ int iHash, /* Find the iHash'th table */ - volatile ht_slot **paHash, /* OUT: Pointer to hash index */ - volatile u32 **paPgno, /* OUT: Pointer to page number array */ - u32 *piZero /* OUT: Frame associated with *paPgno[0] */ + WalHashLoc *pLoc /* OUT: Hash table location */ ){ int rc; /* Return code */ - volatile u32 *aPgno; - rc = walIndexPage(pWal, iHash, &aPgno); + rc = walIndexPage(pWal, iHash, &pLoc->aPgno); assert( rc==SQLITE_OK || iHash>0 ); if( rc==SQLITE_OK ){ - u32 iZero; - volatile ht_slot *aHash; - - aHash = (volatile ht_slot *)&aPgno[HASHTABLE_NPAGE]; + pLoc->aHash = (volatile ht_slot *)&pLoc->aPgno[HASHTABLE_NPAGE]; if( iHash==0 ){ - aPgno = &aPgno[WALINDEX_HDR_SIZE/sizeof(u32)]; - iZero = 0; + pLoc->aPgno = &pLoc->aPgno[WALINDEX_HDR_SIZE/sizeof(u32)]; + pLoc->iZero = 0; }else{ - iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE; + pLoc->iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE; } - - *paPgno = &aPgno[-1]; - *paHash = aHash; - *piZero = iZero; + pLoc->aPgno = &pLoc->aPgno[-1]; } return rc; } @@ -967,9 +982,7 @@ ** actually needed. */ static void walCleanupHash(Wal *pWal){ - volatile ht_slot *aHash = 0; /* Pointer to hash table to clear */ - volatile u32 *aPgno = 0; /* Page number array for hash table */ - u32 iZero = 0; /* frame == (aHash[x]+iZero) */ + WalHashLoc sLoc; /* Hash table location */ int iLimit = 0; /* Zero values greater than this */ int nByte; /* Number of bytes to zero in aPgno[] */ int i; /* Used to iterate through aHash[] */ @@ -987,24 +1000,24 @@ */ assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) ); assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] ); - walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &aHash, &aPgno, &iZero); + walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &sLoc); /* Zero all hash-table entries that correspond to frame numbers greater ** than pWal->hdr.mxFrame. */ - iLimit = pWal->hdr.mxFrame - iZero; + iLimit = pWal->hdr.mxFrame - sLoc.iZero; assert( iLimit>0 ); for(i=0; iiLimit ){ - aHash[i] = 0; + if( sLoc.aHash[i]>iLimit ){ + sLoc.aHash[i] = 0; } } /* Zero the entries in the aPgno array that correspond to frames with ** frame numbers greater than pWal->hdr.mxFrame. */ - nByte = (int)((char *)aHash - (char *)&aPgno[iLimit+1]); - memset((void *)&aPgno[iLimit+1], 0, nByte); + nByte = (int)((char *)sLoc.aHash - (char *)&sLoc.aPgno[iLimit+1]); + memset((void *)&sLoc.aPgno[iLimit+1], 0, nByte); #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT /* Verify that the every entry in the mapping region is still reachable @@ -1014,10 +1027,10 @@ int j; /* Loop counter */ int iKey; /* Hash key */ for(j=1; j<=iLimit; j++){ - for(iKey=walHash(aPgno[j]); aHash[iKey]; iKey=walNextHash(iKey)){ - if( aHash[iKey]==j ) break; + for(iKey=walHash(sLoc.aPgno[j]);sLoc.aHash[iKey];iKey=walNextHash(iKey)){ + if( sLoc.aHash[iKey]==j ) break; } - assert( aHash[iKey]==j ); + assert( sLoc.aHash[iKey]==j ); } } #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */ @@ -1030,11 +1043,9 @@ */ static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){ int rc; /* Return code */ - u32 iZero = 0; /* One less than frame number of aPgno[1] */ - volatile u32 *aPgno = 0; /* Page number array */ - volatile ht_slot *aHash = 0; /* Hash table */ + WalHashLoc sLoc; /* Wal-index hash table location */ - rc = walHashGet(pWal, walFramePage(iFrame), &aHash, &aPgno, &iZero); + rc = walHashGet(pWal, walFramePage(iFrame), &sLoc); /* Assuming the wal-index file was successfully mapped, populate the ** page number array and hash table entry. @@ -1044,15 +1055,16 @@ int idx; /* Value to write to hash-table slot */ int nCollide; /* Number of hash collisions */ - idx = iFrame - iZero; + idx = iFrame - sLoc.iZero; assert( idx <= HASHTABLE_NSLOT/2 + 1 ); /* If this is the first entry to be added to this hash-table, zero the ** entire hash table and aPgno[] array before proceeding. */ if( idx==1 ){ - int nByte = (int)((u8 *)&aHash[HASHTABLE_NSLOT] - (u8 *)&aPgno[1]); - memset((void*)&aPgno[1], 0, nByte); + int nByte = (int)((u8 *)&sLoc.aHash[HASHTABLE_NSLOT] + - (u8 *)&sLoc.aPgno[1]); + memset((void*)&sLoc.aPgno[1], 0, nByte); } /* If the entry in aPgno[] is already set, then the previous writer @@ -1061,18 +1073,18 @@ ** Remove the remnants of that writers uncommitted transaction from ** the hash-table before writing any new entries. */ - if( aPgno[idx] ){ + if( sLoc.aPgno[idx] ){ walCleanupHash(pWal); - assert( !aPgno[idx] ); + assert( !sLoc.aPgno[idx] ); } /* Write the aPgno[] array entry and the hash-table slot. */ nCollide = idx; - for(iKey=walHash(iPage); aHash[iKey]; iKey=walNextHash(iKey)){ + for(iKey=walHash(iPage); sLoc.aHash[iKey]; iKey=walNextHash(iKey)){ if( (nCollide--)==0 ) return SQLITE_CORRUPT_BKPT; } - aPgno[idx] = iPage; - aHash[iKey] = (ht_slot)idx; + sLoc.aPgno[idx] = iPage; + sLoc.aHash[iKey] = (ht_slot)idx; #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT /* Verify that the number of entries in the hash table exactly equals @@ -1081,7 +1093,7 @@ { int i; /* Loop counter */ int nEntry = 0; /* Number of entries in the hash table */ - for(i=0; iaSegment[p->nSegment])[iZero]; - iZero++; + aIndex = &((ht_slot *)&p->aSegment[p->nSegment])[sLoc.iZero]; + sLoc.iZero++; for(j=0; jaSegment[i].iZero = iZero; + walMergesort((u32 *)sLoc.aPgno, aTmp, aIndex, &nEntry); + p->aSegment[i].iZero = sLoc.iZero; p->aSegment[i].nEntry = nEntry; p->aSegment[i].aIndex = aIndex; - p->aSegment[i].aPgno = (u32 *)aPgno; + p->aSegment[i].aPgno = (u32 *)sLoc.aPgno; } } sqlite3_free(aTmp); @@ -1835,7 +1847,6 @@ if( pIter && (rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(0),1))==SQLITE_OK ){ - i64 nSize; /* Current size of database file */ u32 nBackfill = pInfo->nBackfill; pInfo->nBackfillAttempted = mxSafeFrame; @@ -1848,6 +1859,7 @@ */ if( rc==SQLITE_OK ){ i64 nReq = ((i64)mxPage * szPage); + i64 nSize; /* Current size of database file */ rc = sqlite3OsFileSize(pWal->pDbFd, &nSize); if( rc==SQLITE_OK && nSizepDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq); @@ -2555,7 +2567,7 @@ } #endif for(i=1; iaReadMark[i]; + u32 thisMark = AtomicLoad(pInfo->aReadMark+i); if( mxReadMark<=thisMark && thisMark<=mxFrame ){ assert( thisMark!=READMARK_NOT_USED ); mxReadMark = thisMark; @@ -2568,7 +2580,7 @@ for(i=1; iaReadMark[i] = mxFrame; + mxReadMark = AtomicStore(pInfo->aReadMark+i,mxFrame); mxI = i; walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); break; @@ -2620,9 +2632,9 @@ ** we can guarantee that the checkpointer that set nBackfill could not ** see any pages past pWal->hdr.mxFrame, this problem does not come up. */ - pWal->minFrame = pInfo->nBackfill+1; + pWal->minFrame = AtomicLoad(&pInfo->nBackfill)+1; walShmBarrier(pWal); - if( pInfo->aReadMark[mxI]!=mxReadMark + if( AtomicLoad(pInfo->aReadMark+mxI)!=mxReadMark || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){ walUnlockShared(pWal, WAL_READ_LOCK(mxI)); @@ -2673,16 +2685,14 @@ }else{ u32 i = pInfo->nBackfillAttempted; for(i=pInfo->nBackfillAttempted; i>pInfo->nBackfill; i--){ - volatile ht_slot *dummy; - volatile u32 *aPgno; /* Array of page numbers */ - u32 iZero; /* Frame corresponding to aPgno[0] */ + WalHashLoc sLoc; /* Hash table location */ u32 pgno; /* Page number in db file */ i64 iDbOff; /* Offset of db file entry */ i64 iWalOff; /* Offset of wal file entry */ - rc = walHashGet(pWal, walFramePage(i), &dummy, &aPgno, &iZero); + rc = walHashGet(pWal, walFramePage(i), &sLoc); if( rc!=SQLITE_OK ) break; - pgno = aPgno[i-iZero]; + pgno = sLoc.aPgno[i-sLoc.iZero]; iDbOff = (i64)(pgno-1) * szPage; if( iDbOff+szPage<=szDb ){ @@ -2723,7 +2733,7 @@ ** ** If the database contents have changes since the previous read ** transaction, then *pChanged is set to 1 before returning. The -** Pager layer will use this to know that is cache is stale and +** Pager layer will use this to know that its cache is stale and ** needs to be flushed. */ int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ @@ -2785,7 +2795,7 @@ /* Check that the wal file has not been wrapped. Assuming that it has ** not, also check that no checkpointer has attempted to checkpoint any ** frames beyond pSnapshot->mxFrame. If either of these conditions are - ** true, return SQLITE_BUSY_SNAPSHOT. Otherwise, overwrite pWal->hdr + ** true, return SQLITE_ERROR_SNAPSHOT. Otherwise, overwrite pWal->hdr ** with *pSnapshot and set *pChanged as appropriate for opening the ** snapshot. */ if( !memcmp(pSnapshot->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)) @@ -2795,11 +2805,12 @@ memcpy(&pWal->hdr, pSnapshot, sizeof(WalIndexHdr)); *pChanged = bChanged; }else{ - rc = SQLITE_BUSY_SNAPSHOT; + rc = SQLITE_ERROR_SNAPSHOT; } /* Release the shared CKPT lock obtained above. */ walUnlockShared(pWal, WAL_CKPT_LOCK); + pWal->minFrame = 1; } @@ -2883,21 +2894,20 @@ */ iMinHash = walFramePage(pWal->minFrame); for(iHash=walFramePage(iLast); iHash>=iMinHash; iHash--){ - volatile ht_slot *aHash; /* Pointer to hash table */ - volatile u32 *aPgno; /* Pointer to array of page numbers */ - u32 iZero; /* Frame number corresponding to aPgno[0] */ + WalHashLoc sLoc; /* Hash table location */ int iKey; /* Hash slot index */ int nCollide; /* Number of hash collisions remaining */ int rc; /* Error code */ - rc = walHashGet(pWal, iHash, &aHash, &aPgno, &iZero); + rc = walHashGet(pWal, iHash, &sLoc); if( rc!=SQLITE_OK ){ return rc; } nCollide = HASHTABLE_NSLOT; - for(iKey=walHash(pgno); aHash[iKey]; iKey=walNextHash(iKey)){ - u32 iFrame = aHash[iKey] + iZero; - if( iFrame<=iLast && iFrame>=pWal->minFrame && aPgno[aHash[iKey]]==pgno ){ + for(iKey=walHash(pgno); sLoc.aHash[iKey]; iKey=walNextHash(iKey)){ + u32 iFrame = sLoc.aHash[iKey] + sLoc.iZero; + if( iFrame<=iLast && iFrame>=pWal->minFrame + && sLoc.aPgno[sLoc.aHash[iKey]]==pgno ){ assert( iFrame>iRead || CORRUPT_DB ); iRead = iFrame; } @@ -3772,6 +3782,43 @@ if( pHdr1->mxFrame>pHdr2->mxFrame ) return +1; return 0; } + +/* +** The caller currently has a read transaction open on the database. +** This function takes a SHARED lock on the CHECKPOINTER slot and then +** checks if the snapshot passed as the second argument is still +** available. If so, SQLITE_OK is returned. +** +** If the snapshot is not available, SQLITE_ERROR is returned. Or, if +** the CHECKPOINTER lock cannot be obtained, SQLITE_BUSY. If any error +** occurs (any value other than SQLITE_OK is returned), the CHECKPOINTER +** lock is released before returning. +*/ +int sqlite3WalSnapshotCheck(Wal *pWal, sqlite3_snapshot *pSnapshot){ + int rc; + rc = walLockShared(pWal, WAL_CKPT_LOCK); + if( rc==SQLITE_OK ){ + WalIndexHdr *pNew = (WalIndexHdr*)pSnapshot; + if( memcmp(pNew->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)) + || pNew->mxFramenBackfillAttempted + ){ + rc = SQLITE_ERROR_SNAPSHOT; + walUnlockShared(pWal, WAL_CKPT_LOCK); + } + } + return rc; +} + +/* +** Release a lock obtained by an earlier successful call to +** sqlite3WalSnapshotCheck(). +*/ +void sqlite3WalSnapshotUnlock(Wal *pWal){ + assert( pWal ); + walUnlockShared(pWal, WAL_CKPT_LOCK); +} + + #endif /* SQLITE_ENABLE_SNAPSHOT */ #ifdef SQLITE_ENABLE_ZIPVFS diff -Nru lxd-3.0.2/dist/sqlite/src/wal.h lxd-3.0.3/dist/sqlite/src/wal.h --- lxd-3.0.2/dist/sqlite/src/wal.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/wal.h 2018-11-22 20:54:16.000000000 +0000 @@ -132,6 +132,8 @@ int sqlite3WalSnapshotGet(Wal *pWal, sqlite3_snapshot **ppSnapshot); void sqlite3WalSnapshotOpen(Wal *pWal, sqlite3_snapshot *pSnapshot); int sqlite3WalSnapshotRecover(Wal *pWal); +int sqlite3WalSnapshotCheck(Wal *pWal, sqlite3_snapshot *pSnapshot); +void sqlite3WalSnapshotUnlock(Wal *pWal); #endif #ifdef SQLITE_ENABLE_ZIPVFS diff -Nru lxd-3.0.2/dist/sqlite/src/walker.c lxd-3.0.3/dist/sqlite/src/walker.c --- lxd-3.0.2/dist/sqlite/src/walker.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/walker.c 2018-11-22 20:54:16.000000000 +0000 @@ -54,6 +54,14 @@ }else if( pExpr->x.pList ){ if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( !ExprHasProperty(pExpr, EP_Reduced) && pExpr->pWin ){ + Window *pWin = pExpr->pWin; + if( sqlite3WalkExprList(pWalker, pWin->pPartition) ) return WRC_Abort; + if( sqlite3WalkExprList(pWalker, pWin->pOrderBy) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, pWin->pFilter) ) return WRC_Abort; + } +#endif } break; } diff -Nru lxd-3.0.2/dist/sqlite/src/where.c lxd-3.0.3/dist/sqlite/src/where.c --- lxd-3.0.2/dist/sqlite/src/where.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/where.c 2018-11-22 20:54:16.000000000 +0000 @@ -67,15 +67,38 @@ } /* -** Return TRUE if the innermost loop of the WHERE clause implementation -** returns rows in ORDER BY order for complete run of the inner loop. -** -** Across multiple iterations of outer loops, the output rows need not be -** sorted. As long as rows are sorted for just the innermost loop, this -** routine can return TRUE. -*/ -int sqlite3WhereOrderedInnerLoop(WhereInfo *pWInfo){ - return pWInfo->bOrderedInnerLoop; +** In the ORDER BY LIMIT optimization, if the inner-most loop is known +** to emit rows in increasing order, and if the last row emitted by the +** inner-most loop did not fit within the sorter, then we can skip all +** subsequent rows for the current iteration of the inner loop (because they +** will not fit in the sorter either) and continue with the second inner +** loop - the loop immediately outside the inner-most. +** +** When a row does not fit in the sorter (because the sorter already +** holds LIMIT+OFFSET rows that are smaller), then a jump is made to the +** label returned by this function. +** +** If the ORDER BY LIMIT optimization applies, the jump destination should +** be the continuation for the second-inner-most loop. If the ORDER BY +** LIMIT optimization does not apply, then the jump destination should +** be the continuation for the inner-most loop. +** +** It is always safe for this routine to return the continuation of the +** inner-most loop, in the sense that a correct answer will result. +** Returning the continuation the second inner loop is an optimization +** that might make the code run a little faster, but should not change +** the final answer. +*/ +int sqlite3WhereOrderByLimitOptLabel(WhereInfo *pWInfo){ + WhereLevel *pInner; + if( !pWInfo->bOrderedInnerLoop ){ + /* The ORDER BY LIMIT optimization does not apply. Jump to the + ** continuation of the inner-most loop. */ + return pWInfo->iContinue; + } + pInner = &pWInfo->a[pWInfo->nLevel-1]; + assert( pInner->addrNxt!=0 ); + return pInner->addrNxt; } /* @@ -802,7 +825,6 @@ VdbeComment((v, "for %s", pTable->zName)); /* Fill the automatic index with content */ - sqlite3ExprCachePush(pParse); pTabItem = &pWC->pWInfo->pTabList->a[pLevel->iFrom]; if( pTabItem->fg.viaCoroutine ){ int regYield = pTabItem->regReturn; @@ -810,7 +832,7 @@ sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pTabItem->addrFillSub); addrTop = sqlite3VdbeAddOp1(v, OP_Yield, regYield); VdbeCoverage(v); - VdbeComment((v, "next row of \"%s\"", pTabItem->pTab->zName)); + VdbeComment((v, "next row of %s", pTabItem->pTab->zName)); }else{ addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v); } @@ -839,7 +861,6 @@ sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX); sqlite3VdbeJumpHere(v, addrTop); sqlite3ReleaseTempReg(pParse, regRecord); - sqlite3ExprCachePop(pParse); /* Jump here when skipping the initialization */ sqlite3VdbeJumpHere(v, addrInit); @@ -945,6 +966,20 @@ testcase( pTerm->eOperator & WO_ALL ); if( (pTerm->eOperator & ~(WO_EQUIV))==0 ) continue; if( pTerm->wtFlags & TERM_VNULL ) continue; + if( (pSrc->fg.jointype & JT_LEFT)!=0 + && !ExprHasProperty(pTerm->pExpr, EP_FromJoin) + && (pTerm->eOperator & (WO_IS|WO_ISNULL)) + ){ + /* An "IS" term in the WHERE clause where the virtual table is the rhs + ** of a LEFT JOIN. Do not pass this term to the virtual table + ** implementation, as this can lead to incorrect results from SQL such + ** as: + ** + ** "LEFT JOIN vtab WHERE vtab.col IS NULL" */ + testcase( pTerm->eOperator & WO_ISNULL ); + testcase( pTerm->eOperator & WO_IS ); + continue; + } assert( pTerm->u.leftColumn>=(-1) ); pIdxCons[j].iColumn = pTerm->u.leftColumn; pIdxCons[j].iTermOffset = i; @@ -1436,7 +1471,9 @@ Index *p = pLoop->u.btree.pIndex; int nEq = pLoop->u.btree.nEq; - if( p->nSample>0 && nEqnSampleCol ){ + if( p->nSample>0 && nEqnSampleCol + && OptimizationEnabled(pParse->db, SQLITE_Stat34) + ){ if( nEq==pBuilder->nRecValid ){ UnpackedRecord *pRec = pBuilder->pRec; tRowcnt a[2]; @@ -2451,7 +2488,6 @@ if( eOp & WO_IN ){ Expr *pExpr = pTerm->pExpr; - pNew->wsFlags |= WHERE_COLUMN_IN; if( ExprHasProperty(pExpr, EP_xIsSelect) ){ /* "x IN (SELECT ...)": TUNING: the SELECT returns 25 rows */ int i; @@ -2471,6 +2507,42 @@ assert( nIn>0 ); /* RHS always has 2 or more terms... The parser ** changes "x IN (?)" into "x=?". */ } + if( pProbe->hasStat1 ){ + LogEst M, logK, safetyMargin; + /* Let: + ** N = the total number of rows in the table + ** K = the number of entries on the RHS of the IN operator + ** M = the number of rows in the table that match terms to the + ** to the left in the same index. If the IN operator is on + ** the left-most index column, M==N. + ** + ** Given the definitions above, it is better to omit the IN operator + ** from the index lookup and instead do a scan of the M elements, + ** testing each scanned row against the IN operator separately, if: + ** + ** M*log(K) < K*log(N) + ** + ** Our estimates for M, K, and N might be inaccurate, so we build in + ** a safety margin of 2 (LogEst: 10) that favors using the IN operator + ** with the index, as using an index has better worst-case behavior. + ** If we do not have real sqlite_stat1 data, always prefer to use + ** the index. + */ + M = pProbe->aiRowLogEst[saved_nEq]; + logK = estLog(nIn); + safetyMargin = 10; /* TUNING: extra weight for indexed IN */ + if( M + logK + safetyMargin < nIn + rLogSize ){ + WHERETRACE(0x40, + ("Scan preferred over IN operator on column %d of \"%s\" (%d<%d)\n", + saved_nEq, pProbe->zName, M+logK+10, nIn+rLogSize)); + continue; + }else{ + WHERETRACE(0x40, + ("IN operator preferred on column %d of \"%s\" (%d>=%d)\n", + saved_nEq, pProbe->zName, M+logK+10, nIn+rLogSize)); + } + } + pNew->wsFlags |= WHERE_COLUMN_IN; }else if( eOp & (WO_EQ|WO_IS) ){ int iCol = pProbe->aiColumn[saved_nEq]; pNew->wsFlags |= WHERE_COLUMN_EQ; @@ -2549,6 +2621,7 @@ && pProbe->nSample && pNew->u.btree.nEq<=pProbe->nSampleCol && ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect)) + && OptimizationEnabled(db, SQLITE_Stat34) ){ Expr *pExpr = pTerm->pExpr; if( (eOp & (WO_EQ|WO_ISNULL|WO_IS))!=0 ){ @@ -2637,6 +2710,7 @@ if( saved_nEq==saved_nSkip && saved_nEq+1nKeyCol && pProbe->noSkipScan==0 + && OptimizationEnabled(db, SQLITE_SkipScan) && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */ && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK ){ @@ -2700,24 +2774,6 @@ return 0; } -/* -** Return a bitmask where 1s indicate that the corresponding column of -** the table is used by an index. Only the first 63 columns are considered. -*/ -static Bitmask columnsInIndex(Index *pIdx){ - Bitmask m = 0; - int j; - for(j=pIdx->nColumn-1; j>=0; j--){ - int x = pIdx->aiColumn[j]; - if( x>=0 ){ - testcase( x==BMS-1 ); - testcase( x==BMS-2 ); - if( xwsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; m = 0; }else{ - m = pSrc->colUsed & ~columnsInIndex(pProbe); + m = pSrc->colUsed & pProbe->colNotIdxed; pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED; } @@ -3184,7 +3240,7 @@ if( pX->pLeft ){ pC = sqlite3BinaryCompareCollSeq(pHidden->pParse, pX->pLeft, pX->pRight); } - zRet = (pC ? pC->zName : "BINARY"); + zRet = (pC ? pC->zName : sqlite3StrBINARY); } return zRet; } @@ -3500,7 +3556,7 @@ { rc = whereLoopAddBtree(pBuilder, mPrereq); } - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK && pBuilder->pWC->hasOr ){ rc = whereLoopAddOr(pBuilder, mPrereq, mUnusable); } mPrior |= pNew->maskSelf; @@ -4035,7 +4091,11 @@ pWInfo, nRowEst, nOrderBy, isOrdered ); } - rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]); + /* TUNING: Add a small extra penalty (5) to sorting as an + ** extra encouragment to the query planner to select a plan + ** where the rows emerge in the correct order without any sorting + ** required. */ + rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]) + 5; WHERETRACE(0x002, ("---- sort cost=%-3d (%d/%d) increases cost %3d to %-3d\n", @@ -4225,6 +4285,7 @@ pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; } } + pWInfo->bOrderedInnerLoop = 0; if( pWInfo->pOrderBy ){ if( pWInfo->wctrlFlags & WHERE_DISTINCTBY ){ if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){ @@ -4336,7 +4397,7 @@ } if( j!=pIdx->nKeyCol ) continue; pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_ONEROW|WHERE_INDEXED; - if( pIdx->isCovering || (pItem->colUsed & ~columnsInIndex(pIdx))==0 ){ + if( pIdx->isCovering || (pItem->colUsed & pIdx->colNotIdxed)==0 ){ pLoop->wsFlags |= WHERE_IDX_ONLY; } pLoop->nLTerm = j; @@ -5017,6 +5078,26 @@ } /* +** Part of sqlite3WhereEnd() will rewrite opcodes to reference the +** index rather than the main table. In SQLITE_DEBUG mode, we want +** to trace those changes if PRAGMA vdbe_addoptrace=on. This routine +** does that. +*/ +#ifndef SQLITE_DEBUG +# define OpcodeRewriteTrace(D,K,P) /* no-op */ +#else +# define OpcodeRewriteTrace(D,K,P) sqlite3WhereOpcodeRewriteTrace(D,K,P) + static void sqlite3WhereOpcodeRewriteTrace( + sqlite3 *db, + int pc, + VdbeOp *pOp + ){ + if( (db->flags & SQLITE_VdbeAddopTrace)==0 ) return; + sqlite3VdbePrintOp(0, pc, pOp); + } +#endif + +/* ** Generate the end of the WHERE loop. See comments on ** sqlite3WhereBegin() for additional information. */ @@ -5032,7 +5113,6 @@ /* Generate loop termination code. */ VdbeModuleComment((v, "End WHERE-core")); - sqlite3ExprCacheClear(pParse); for(i=pWInfo->nLevel-1; i>=0; i--){ int addr; pLevel = &pWInfo->a[i]; @@ -5083,10 +5163,17 @@ for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){ sqlite3VdbeJumpHere(v, pIn->addrInTop+1); if( pIn->eEndLoopOp!=OP_Noop ){ + if( pIn->nPrefix ){ + assert( pLoop->wsFlags & WHERE_IN_EARLYOUT ); + sqlite3VdbeAddOp4Int(v, OP_IfNoHope, pLevel->iIdxCur, + sqlite3VdbeCurrentAddr(v)+2, + pIn->iBase, pIn->nPrefix); + VdbeCoverage(v); + } sqlite3VdbeAddOp2(v, pIn->eEndLoopOp, pIn->iCur, pIn->addrInTop); VdbeCoverage(v); - VdbeCoverageIf(v, pIn->eEndLoopOp==OP_PrevIfOpen); - VdbeCoverageIf(v, pIn->eEndLoopOp==OP_NextIfOpen); + VdbeCoverageIf(v, pIn->eEndLoopOp==OP_Prev); + VdbeCoverageIf(v, pIn->eEndLoopOp==OP_Next); } sqlite3VdbeJumpHere(v, pIn->addrInTop-1); } @@ -5177,6 +5264,11 @@ ){ last = sqlite3VdbeCurrentAddr(v); k = pLevel->addrBody; +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_VdbeAddopTrace ){ + printf("TRANSLATE opcodes in range %d..%d\n", k, last-1); + } +#endif pOp = sqlite3VdbeGetOp(v, k); for(; kp1!=pLevel->iTabCur ) continue; @@ -5196,16 +5288,22 @@ if( x>=0 ){ pOp->p2 = x; pOp->p1 = pLevel->iIdxCur; + OpcodeRewriteTrace(db, k, pOp); } assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 || x>=0 || pWInfo->eOnePass ); }else if( pOp->opcode==OP_Rowid ){ pOp->p1 = pLevel->iIdxCur; pOp->opcode = OP_IdxRowid; + OpcodeRewriteTrace(db, k, pOp); }else if( pOp->opcode==OP_IfNullRow ){ pOp->p1 = pLevel->iIdxCur; + OpcodeRewriteTrace(db, k, pOp); } } +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_VdbeAddopTrace ) printf("TRANSLATE complete\n"); +#endif } } diff -Nru lxd-3.0.2/dist/sqlite/src/wherecode.c lxd-3.0.3/dist/sqlite/src/wherecode.c --- lxd-3.0.2/dist/sqlite/src/wherecode.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/wherecode.c 2018-11-22 20:54:16.000000000 +0000 @@ -150,7 +150,7 @@ sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH); sqlite3_str_appendall(&str, isSearch ? "SEARCH" : "SCAN"); if( pItem->pSelect ){ - sqlite3_str_appendf(&str, " SUBQUERY 0x%p", pItem->pSelect); + sqlite3_str_appendf(&str, " SUBQUERY %u", pItem->pSelect->selId); }else{ sqlite3_str_appendf(&str, " TABLE %s", pItem->zName); } @@ -347,7 +347,6 @@ /* Code the OP_Affinity opcode if there is anything left to do. */ if( n>0 ){ sqlite3VdbeAddOp4(v, OP_Affinity, base, n, 0, zAff, n); - sqlite3ExprCacheAffinityChange(pParse, base, n); } } @@ -426,7 +425,7 @@ for(i=iEq; inLTerm; i++){ if( pLoop->aLTerm[i]->pExpr==pX ){ int iField = pLoop->aLTerm[i]->iField - 1; - assert( pOrigRhs->a[iField].pExpr!=0 ); + if( pOrigRhs->a[iField].pExpr==0 ) continue; /* Duplicate PK column */ pRhs = sqlite3ExprListAppend(pParse, pRhs, pOrigRhs->a[iField].pExpr); pOrigRhs->a[iField].pExpr = 0; assert( pOrigLhs->a[iField].pExpr!=0 ); @@ -591,7 +590,14 @@ sqlite3VdbeAddOp1(v, OP_IsNull, iOut); VdbeCoverage(v); if( i==iEq ){ pIn->iCur = iTab; - pIn->eEndLoopOp = bRev ? OP_PrevIfOpen : OP_NextIfOpen; + pIn->eEndLoopOp = bRev ? OP_Prev : OP_Next; + if( iEq>0 && (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 ){ + pIn->iBase = iReg - i; + pIn->nPrefix = i; + pLoop->wsFlags |= WHERE_IN_EARLYOUT; + }else{ + pIn->nPrefix = 0; + } }else{ pIn->eEndLoopOp = OP_Noop; } @@ -878,11 +884,8 @@ struct CCurHint *pHint = pWalker->u.pCCurHint; if( pExpr->op==TK_COLUMN ){ if( pExpr->iTable!=pHint->iTabCur ){ - Vdbe *v = pWalker->pParse->pVdbe; int reg = ++pWalker->pParse->nMem; /* Register for column value */ - sqlite3ExprCodeGetColumnOfTable( - v, pExpr->pTab, pExpr->iTable, pExpr->iColumn, reg - ); + sqlite3ExprCode(pWalker->pParse, pExpr, reg); pExpr->op = TK_REGISTER; pExpr->iTable = reg; }else if( pHint->pIdx!=0 ){ @@ -1235,7 +1238,7 @@ sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pTabItem->addrFillSub); pLevel->p2 = sqlite3VdbeAddOp2(v, OP_Yield, regYield, addrBrk); VdbeCoverage(v); - VdbeComment((v, "next row of \"%s\"", pTabItem->pTab->zName)); + VdbeComment((v, "next row of %s", pTabItem->pTab->zName)); pLevel->op = OP_Goto; }else @@ -1249,7 +1252,6 @@ int nConstraint = pLoop->nLTerm; int iIn; /* Counter for IN constraints */ - sqlite3ExprCachePush(pParse); iReg = sqlite3GetTempRange(pParse, nConstraint+2); addrNotFound = pLevel->addrBrk; for(j=0; jaddrNxt; sqlite3VdbeAddOp3(v, OP_SeekRowid, iCur, addrNxt, iRowidReg); VdbeCoverage(v); - sqlite3ExprCacheAffinityChange(pParse, iRowidReg, 1); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); - VdbeComment((v, "pk")); pLevel->op = OP_Noop; }else if( (pLoop->wsFlags & WHERE_IPK)!=0 && (pLoop->wsFlags & WHERE_COLUMN_RANGE)!=0 @@ -1418,7 +1416,6 @@ VdbeCoverageIf(v, pX->op==TK_LE); VdbeCoverageIf(v, pX->op==TK_LT); VdbeCoverageIf(v, pX->op==TK_GE); - sqlite3ExprCacheAffinityChange(pParse, r1, 1); sqlite3ReleaseTempReg(pParse, rTemp); }else{ sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrHalt); @@ -1453,7 +1450,6 @@ if( testOp!=OP_Noop ){ iRowidReg = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg); VdbeCoverageIf(v, testOp==OP_Le); VdbeCoverageIf(v, testOp==OP_Lt); @@ -1658,6 +1654,9 @@ ** above has already left the cursor sitting on the correct row, ** so no further seeking is needed */ }else{ + if( pLoop->wsFlags & WHERE_IN_EARLYOUT ){ + sqlite3VdbeAddOp1(v, OP_SeekHit, iIdxCur); + } op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev]; assert( op!=0 ); sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint); @@ -1676,7 +1675,6 @@ nConstraint = nEq; if( pRangeEnd ){ Expr *pRight = pRangeEnd->pExpr->pRight; - sqlite3ExprCacheRemove(pParse, regBase+nEq, 1); codeExprOrVector(pParse, pRight, regBase+nEq, nTop); whereLikeOptimizationStringFixup(v, pLevel, pRangeEnd); if( (pRangeEnd->wtFlags & TERM_VNULL)==0 @@ -1701,7 +1699,6 @@ } }else if( bStopAtNull ){ sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); - sqlite3ExprCacheRemove(pParse, regBase+nEq, 1); endEq = 0; nConstraint++; } @@ -1721,6 +1718,10 @@ testcase( op==OP_IdxLE ); VdbeCoverageIf(v, op==OP_IdxLE ); } + if( pLoop->wsFlags & WHERE_IN_EARLYOUT ){ + sqlite3VdbeAddOp2(v, OP_SeekHit, iIdxCur, 1); + } + /* Seek the table cursor, if required */ if( omitTable ){ /* pIdx is a covering index. No need to access the main table. */ @@ -1731,7 +1732,6 @@ )){ iRowidReg = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, iRowidReg); VdbeCoverage(v); }else{ @@ -1966,23 +1966,23 @@ ** row will be skipped in subsequent sub-WHERE clauses. */ if( (pWInfo->wctrlFlags & WHERE_DUPLICATES_OK)==0 ){ - int r; int iSet = ((ii==pOrWc->nTerm-1)?-1:ii); if( HasRowid(pTab) ){ - r = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, regRowid, 0); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, -1, regRowid); jmp1 = sqlite3VdbeAddOp4Int(v, OP_RowSetTest, regRowset, 0, - r,iSet); + regRowid, iSet); VdbeCoverage(v); }else{ Index *pPk = sqlite3PrimaryKeyIndex(pTab); int nPk = pPk->nKeyCol; int iPk; + int r; /* Read the PK into an array of temp registers. */ r = sqlite3GetTempRange(pParse, nPk); for(iPk=0; iPkaiColumn[iPk]; - sqlite3ExprCodeGetColumnToReg(pParse, pTab, iCol, iCur, r+iPk); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol, r+iPk); } /* Check if the temp table already contains this key. If so, @@ -2215,7 +2215,6 @@ pLevel->addrFirst = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin); VdbeComment((v, "record LEFT JOIN hit")); - sqlite3ExprCacheClear(pParse); for(pTerm=pWC->a, j=0; jnTerm; j++, pTerm++){ testcase( pTerm->wtFlags & TERM_VIRTUAL ); testcase( pTerm->wtFlags & TERM_CODED ); diff -Nru lxd-3.0.2/dist/sqlite/src/whereexpr.c lxd-3.0.3/dist/sqlite/src/whereexpr.c --- lxd-3.0.2/dist/sqlite/src/whereexpr.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/whereexpr.c 2018-11-22 20:54:16.000000000 +0000 @@ -194,18 +194,18 @@ int *pisComplete, /* True if the only wildcard is % in the last character */ int *pnoCase /* True if uppercase is equivalent to lowercase */ ){ - const u8 *z = 0; /* String on RHS of LIKE operator */ + const u8 *z = 0; /* String on RHS of LIKE operator */ Expr *pRight, *pLeft; /* Right and left size of LIKE operator */ ExprList *pList; /* List of operands to the LIKE operator */ - int c; /* One character in z[] */ + u8 c; /* One character in z[] */ int cnt; /* Number of non-wildcard prefix characters */ - char wc[4]; /* Wildcard characters */ + u8 wc[4]; /* Wildcard characters */ sqlite3 *db = pParse->db; /* Database connection */ sqlite3_value *pVal = 0; int op; /* Opcode of pRight */ int rc; /* Result code to return */ - if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){ + if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, (char*)wc) ){ return 0; } #ifdef SQLITE_EBCDIC @@ -230,23 +230,6 @@ } if( z ){ - /* If the RHS begins with a digit or a minus sign, then the LHS must - ** be an ordinary column (not a virtual table column) with TEXT affinity. - ** Otherwise the LHS might be numeric and "lhs >= rhs" would be false - ** even though "lhs LIKE rhs" is true. But if the RHS does not start - ** with a digit or '-', then "lhs LIKE rhs" will always be false if - ** the LHS is numeric and so the optimization still works. - */ - if( sqlite3Isdigit(z[0]) || z[0]=='-' ){ - if( pLeft->op!=TK_COLUMN - || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT - || IsVirtual(pLeft->pTab) /* Value might be numeric */ - ){ - sqlite3ValueFree(pVal); - return 0; - } - } - /* Count the number of prefix characters prior to the first wildcard */ cnt = 0; while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){ @@ -256,11 +239,13 @@ /* The optimization is possible only if (1) the pattern does not begin ** with a wildcard and if (2) the non-wildcard prefix does not end with - ** an (illegal 0xff) character. The second condition is necessary so + ** an (illegal 0xff) character, or (3) the pattern does not consist of + ** a single escape character. The second condition is necessary so ** that we can increment the prefix key to find an upper bound for the - ** range search. - */ - if( cnt!=0 && 255!=(u8)z[cnt-1] ){ + ** range search. The third is because the caller assumes that the pattern + ** consists of at least one character after all escapes have been + ** removed. */ + if( cnt!=0 && 255!=(u8)z[cnt-1] && (cnt>1 || z[0]!=wc[3]) ){ Expr *pPrefix; /* A "complete" match if the pattern ends with "*" or "%" */ @@ -277,6 +262,32 @@ zNew[iTo++] = zNew[iFrom]; } zNew[iTo] = 0; + + /* If the RHS begins with a digit or a minus sign, then the LHS must be + ** an ordinary column (not a virtual table column) with TEXT affinity. + ** Otherwise the LHS might be numeric and "lhs >= rhs" would be false + ** even though "lhs LIKE rhs" is true. But if the RHS does not start + ** with a digit or '-', then "lhs LIKE rhs" will always be false if + ** the LHS is numeric and so the optimization still works. + ** + ** 2018-09-10 ticket c94369cae9b561b1f996d0054bfab11389f9d033 + ** The RHS pattern must not be '/%' because the termination condition + ** will then become "x<'0'" and if the affinity is numeric, will then + ** be converted into "x<0", which is incorrect. + */ + if( sqlite3Isdigit(zNew[0]) + || zNew[0]=='-' + || (zNew[0]+1=='0' && iTo==1) + ){ + if( pLeft->op!=TK_COLUMN + || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT + || IsVirtual(pLeft->pTab) /* Value might be numeric */ + ){ + sqlite3ExprDelete(db, pPrefix); + sqlite3ValueFree(pVal); + return 0; + } + } } *ppPrefix = pPrefix; @@ -338,6 +349,7 @@ ** If the expression matches none of the patterns above, return 0. */ static int isAuxiliaryVtabOperator( + sqlite3 *db, /* Parsing context */ Expr *pExpr, /* Test this expression */ unsigned char *peOp2, /* OUT: 0 for MATCH, or else an op2 value */ Expr **ppLeft, /* Column expression to left of MATCH/op2 */ @@ -361,16 +373,54 @@ if( pList==0 || pList->nExpr!=2 ){ return 0; } + + /* Built-in operators MATCH, GLOB, LIKE, and REGEXP attach to a + ** virtual table on their second argument, which is the same as + ** the left-hand side operand in their in-fix form. + ** + ** vtab_column MATCH expression + ** MATCH(expression,vtab_column) + */ pCol = pList->a[1].pExpr; - if( pCol->op!=TK_COLUMN || !IsVirtual(pCol->pTab) ){ - return 0; + if( pCol->op==TK_COLUMN && IsVirtual(pCol->pTab) ){ + for(i=0; iu.zToken, aOp[i].zOp)==0 ){ + *peOp2 = aOp[i].eOp2; + *ppRight = pList->a[0].pExpr; + *ppLeft = pCol; + return 1; + } + } } - for(i=0; iu.zToken, aOp[i].zOp)==0 ){ - *peOp2 = aOp[i].eOp2; - *ppRight = pList->a[0].pExpr; - *ppLeft = pCol; - return 1; + + /* We can also match against the first column of overloaded + ** functions where xFindFunction returns a value of at least + ** SQLITE_INDEX_CONSTRAINT_FUNCTION. + ** + ** OVERLOADED(vtab_column,expression) + ** + ** Historically, xFindFunction expected to see lower-case function + ** names. But for this use case, xFindFunction is expected to deal + ** with function names in an arbitrary case. + */ + pCol = pList->a[0].pExpr; + if( pCol->op==TK_COLUMN && IsVirtual(pCol->pTab) ){ + sqlite3_vtab *pVtab; + sqlite3_module *pMod; + void (*xNotUsed)(sqlite3_context*,int,sqlite3_value**); + void *pNotUsed; + pVtab = sqlite3GetVTable(db, pCol->pTab)->pVtab; + assert( pVtab!=0 ); + assert( pVtab->pModule!=0 ); + pMod = (sqlite3_module *)pVtab->pModule; + if( pMod->xFindFunction!=0 ){ + i = pMod->xFindFunction(pVtab,2, pExpr->u.zToken, &xNotUsed, &pNotUsed); + if( i>=SQLITE_INDEX_CONSTRAINT_FUNCTION ){ + *peOp2 = i; + *ppRight = pList->a[1].pExpr; + *ppLeft = pCol; + return 1; + } } } }else if( pExpr->op==TK_NE || pExpr->op==TK_ISNOT || pExpr->op==TK_NOTNULL ){ @@ -672,7 +722,12 @@ ** empty. */ pOrInfo->indexable = indexable; - pTerm->eOperator = indexable==0 ? 0 : WO_OR; + if( indexable ){ + pTerm->eOperator = WO_OR; + pWC->hasOr = 1; + }else{ + pTerm->eOperator = WO_OR; + } /* For a two-way OR, attempt to implementation case 2. */ @@ -813,7 +868,7 @@ idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC); testcase( idxNew==0 ); exprAnalyze(pSrc, pWC, idxNew); - pTerm = &pWC->a[idxTerm]; + /* pTerm = &pWC->a[idxTerm]; // would be needed if pTerm where used again */ markTermAsChild(pWC, idxNew, idxTerm); }else{ sqlite3ExprListDelete(db, pList); @@ -852,7 +907,7 @@ return 0; } pColl = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight); - if( pColl==0 || sqlite3StrICmp(pColl->zName, "BINARY")==0 ) return 1; + if( sqlite3IsBinary(pColl) ) return 1; return sqlite3ExprCollSeqMatch(pParse, pExpr->pLeft, pExpr->pRight); } @@ -1011,7 +1066,7 @@ pTerm->prereqRight = sqlite3WhereExprUsage(pMaskSet, pExpr->pRight); } pMaskSet->bVarSelect = 0; - prereqAll = sqlite3WhereExprUsage(pMaskSet, pExpr); + prereqAll = sqlite3WhereExprUsageNN(pMaskSet, pExpr); if( pMaskSet->bVarSelect ) pTerm->wtFlags |= TERM_VARSELECT; if( ExprHasProperty(pExpr, EP_FromJoin) ){ Bitmask x = sqlite3WhereGetMask(pMaskSet, pExpr->iRightJoinTable); @@ -1193,7 +1248,7 @@ } *pC = c + 1; } - zCollSeqName = noCase ? "NOCASE" : "BINARY"; + zCollSeqName = noCase ? "NOCASE" : sqlite3StrBINARY; pNewExpr1 = sqlite3ExprDup(db, pLeft, 0); pNewExpr1 = sqlite3PExpr(pParse, TK_GE, sqlite3ExprAddCollateString(pParse,pNewExpr1,zCollSeqName), @@ -1230,7 +1285,7 @@ */ if( pWC->op==TK_AND ){ Expr *pRight = 0, *pLeft = 0; - int res = isAuxiliaryVtabOperator(pExpr, &eOp2, &pLeft, &pRight); + int res = isAuxiliaryVtabOperator(db, pExpr, &eOp2, &pLeft, &pRight); while( res-- > 0 ){ int idxNew; WhereTerm *pNewTerm; @@ -1327,6 +1382,7 @@ if( pExpr->op==TK_NOTNULL && pExpr->pLeft->op==TK_COLUMN && pExpr->pLeft->iColumn>=0 + && !ExprHasProperty(pExpr, EP_FromJoin) && OptimizationEnabled(db, SQLITE_Stat34) ){ Expr *pNewExpr; @@ -1404,6 +1460,7 @@ WhereInfo *pWInfo /* The WHERE processing context */ ){ pWC->pWInfo = pWInfo; + pWC->hasOr = 0; pWC->pOuter = 0; pWC->nTerm = 0; pWC->nSlot = ArraySize(pWC->aStatic); @@ -1440,17 +1497,18 @@ ** a bitmask indicating which tables are used in that expression ** tree. */ -Bitmask sqlite3WhereExprUsage(WhereMaskSet *pMaskSet, Expr *p){ +Bitmask sqlite3WhereExprUsageNN(WhereMaskSet *pMaskSet, Expr *p){ Bitmask mask; - if( p==0 ) return 0; - if( p->op==TK_COLUMN ){ + if( p->op==TK_COLUMN && !ExprHasProperty(p, EP_FixedCol) ){ return sqlite3WhereGetMask(pMaskSet, p->iTable); + }else if( ExprHasProperty(p, EP_TokenOnly|EP_Leaf) ){ + assert( p->op!=TK_IF_NULL_ROW ); + return 0; } mask = (p->op==TK_IF_NULL_ROW) ? sqlite3WhereGetMask(pMaskSet, p->iTable) : 0; - assert( !ExprHasProperty(p, EP_TokenOnly) ); - if( p->pLeft ) mask |= sqlite3WhereExprUsage(pMaskSet, p->pLeft); + if( p->pLeft ) mask |= sqlite3WhereExprUsageNN(pMaskSet, p->pLeft); if( p->pRight ){ - mask |= sqlite3WhereExprUsage(pMaskSet, p->pRight); + mask |= sqlite3WhereExprUsageNN(pMaskSet, p->pRight); assert( p->x.pList==0 ); }else if( ExprHasProperty(p, EP_xIsSelect) ){ if( ExprHasProperty(p, EP_VarSelect) ) pMaskSet->bVarSelect = 1; @@ -1460,6 +1518,9 @@ } return mask; } +Bitmask sqlite3WhereExprUsage(WhereMaskSet *pMaskSet, Expr *p){ + return p ? sqlite3WhereExprUsageNN(pMaskSet,p) : 0; +} Bitmask sqlite3WhereExprListUsage(WhereMaskSet *pMaskSet, ExprList *pList){ int i; Bitmask mask = 0; diff -Nru lxd-3.0.2/dist/sqlite/src/whereInt.h lxd-3.0.3/dist/sqlite/src/whereInt.h --- lxd-3.0.2/dist/sqlite/src/whereInt.h 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/whereInt.h 2018-11-22 20:54:16.000000000 +0000 @@ -82,6 +82,8 @@ struct InLoop { int iCur; /* The VDBE cursor used by this IN operator */ int addrInTop; /* Top of the IN loop */ + int iBase; /* Base register of multi-key index record */ + int nPrefix; /* Number of prior entires in the key */ u8 eEndLoopOp; /* IN Loop terminator. OP_Next or OP_Prev */ } *aInLoop; /* Information about each nested IN operator */ } in; /* Used when pWLoop->wsFlags&WHERE_IN_ABLE */ @@ -320,6 +322,7 @@ WhereInfo *pWInfo; /* WHERE clause processing context */ WhereClause *pOuter; /* Outer conjunction */ u8 op; /* Split operator. TK_AND or TK_OR */ + u8 hasOr; /* True if any a[].eOperator is WO_OR */ int nTerm; /* Number of terms */ int nSlot; /* Number of entries in a[] */ WhereTerm *a; /* Each a[] describes a term of the WHERE cluase */ @@ -493,6 +496,7 @@ void sqlite3WhereClauseClear(WhereClause*); void sqlite3WhereSplit(WhereClause*,Expr*,u8); Bitmask sqlite3WhereExprUsage(WhereMaskSet*, Expr*); +Bitmask sqlite3WhereExprUsageNN(WhereMaskSet*, Expr*); Bitmask sqlite3WhereExprListUsage(WhereMaskSet*, ExprList*); void sqlite3WhereExprAnalyze(SrcList*, WhereClause*); void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereClause*); @@ -555,3 +559,4 @@ #define WHERE_SKIPSCAN 0x00008000 /* Uses the skip-scan algorithm */ #define WHERE_UNQ_WANTED 0x00010000 /* WHERE_ONEROW would have been helpful*/ #define WHERE_PARTIALIDX 0x00020000 /* The automatic index is partial */ +#define WHERE_IN_EARLYOUT 0x00040000 /* Perhaps quit IN loops early */ diff -Nru lxd-3.0.2/dist/sqlite/src/window.c lxd-3.0.3/dist/sqlite/src/window.c --- lxd-3.0.2/dist/sqlite/src/window.c 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/src/window.c 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,2252 @@ +/* +** 2018 May 08 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +*/ +#include "sqliteInt.h" + +#ifndef SQLITE_OMIT_WINDOWFUNC + +/* +** SELECT REWRITING +** +** Any SELECT statement that contains one or more window functions in +** either the select list or ORDER BY clause (the only two places window +** functions may be used) is transformed by function sqlite3WindowRewrite() +** in order to support window function processing. For example, with the +** schema: +** +** CREATE TABLE t1(a, b, c, d, e, f, g); +** +** the statement: +** +** SELECT a+1, max(b) OVER (PARTITION BY c ORDER BY d) FROM t1 ORDER BY e; +** +** is transformed to: +** +** SELECT a+1, max(b) OVER (PARTITION BY c ORDER BY d) FROM ( +** SELECT a, e, c, d, b FROM t1 ORDER BY c, d +** ) ORDER BY e; +** +** The flattening optimization is disabled when processing this transformed +** SELECT statement. This allows the implementation of the window function +** (in this case max()) to process rows sorted in order of (c, d), which +** makes things easier for obvious reasons. More generally: +** +** * FROM, WHERE, GROUP BY and HAVING clauses are all moved to +** the sub-query. +** +** * ORDER BY, LIMIT and OFFSET remain part of the parent query. +** +** * Terminals from each of the expression trees that make up the +** select-list and ORDER BY expressions in the parent query are +** selected by the sub-query. For the purposes of the transformation, +** terminals are column references and aggregate functions. +** +** If there is more than one window function in the SELECT that uses +** the same window declaration (the OVER bit), then a single scan may +** be used to process more than one window function. For example: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d), +** min(e) OVER (PARTITION BY c ORDER BY d) +** FROM t1; +** +** is transformed in the same way as the example above. However: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d), +** min(e) OVER (PARTITION BY a ORDER BY b) +** FROM t1; +** +** Must be transformed to: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d) FROM ( +** SELECT e, min(e) OVER (PARTITION BY a ORDER BY b), c, d, b FROM +** SELECT a, e, c, d, b FROM t1 ORDER BY a, b +** ) ORDER BY c, d +** ) ORDER BY e; +** +** so that both min() and max() may process rows in the order defined by +** their respective window declarations. +** +** INTERFACE WITH SELECT.C +** +** When processing the rewritten SELECT statement, code in select.c calls +** sqlite3WhereBegin() to begin iterating through the results of the +** sub-query, which is always implemented as a co-routine. It then calls +** sqlite3WindowCodeStep() to process rows and finish the scan by calling +** sqlite3WhereEnd(). +** +** sqlite3WindowCodeStep() generates VM code so that, for each row returned +** by the sub-query a sub-routine (OP_Gosub) coded by select.c is invoked. +** When the sub-routine is invoked: +** +** * The results of all window-functions for the row are stored +** in the associated Window.regResult registers. +** +** * The required terminal values are stored in the current row of +** temp table Window.iEphCsr. +** +** In some cases, depending on the window frame and the specific window +** functions invoked, sqlite3WindowCodeStep() caches each entire partition +** in a temp table before returning any rows. In other cases it does not. +** This detail is encapsulated within this file, the code generated by +** select.c is the same in either case. +** +** BUILT-IN WINDOW FUNCTIONS +** +** This implementation features the following built-in window functions: +** +** row_number() +** rank() +** dense_rank() +** percent_rank() +** cume_dist() +** ntile(N) +** lead(expr [, offset [, default]]) +** lag(expr [, offset [, default]]) +** first_value(expr) +** last_value(expr) +** nth_value(expr, N) +** +** These are the same built-in window functions supported by Postgres. +** Although the behaviour of aggregate window functions (functions that +** can be used as either aggregates or window funtions) allows them to +** be implemented using an API, built-in window functions are much more +** esoteric. Additionally, some window functions (e.g. nth_value()) +** may only be implemented by caching the entire partition in memory. +** As such, some built-in window functions use the same API as aggregate +** window functions and some are implemented directly using VDBE +** instructions. Additionally, for those functions that use the API, the +** window frame is sometimes modified before the SELECT statement is +** rewritten. For example, regardless of the specified window frame, the +** row_number() function always uses: +** +** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** See sqlite3WindowUpdate() for details. +** +** As well as some of the built-in window functions, aggregate window +** functions min() and max() are implemented using VDBE instructions if +** the start of the window frame is declared as anything other than +** UNBOUNDED PRECEDING. +*/ + +/* +** Implementation of built-in window function row_number(). Assumes that the +** window frame has been coerced to: +** +** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void row_numberStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + i64 *p = (i64*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ) (*p)++; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void row_numberValueFunc(sqlite3_context *pCtx){ + i64 *p = (i64*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + sqlite3_result_int64(pCtx, (p ? *p : 0)); +} + +/* +** Context object type used by rank(), dense_rank(), percent_rank() and +** cume_dist(). +*/ +struct CallCount { + i64 nValue; + i64 nStep; + i64 nTotal; +}; + +/* +** Implementation of built-in window function dense_rank(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void dense_rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ) p->nStep = 1; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void dense_rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nStep ){ + p->nValue++; + p->nStep = 0; + } + sqlite3_result_int64(pCtx, p->nValue); + } +} + +/* +** Implementation of built-in window function rank(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + p->nStep++; + if( p->nValue==0 ){ + p->nValue = p->nStep; + } + } + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + sqlite3_result_int64(pCtx, p->nValue); + p->nValue = 0; + } +} + +/* +** Implementation of built-in window function percent_rank(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void percent_rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + UNUSED_PARAMETER(nArg); assert( nArg==1 ); + + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal==0 ){ + p->nTotal = sqlite3_value_int64(apArg[0]); + } + p->nStep++; + if( p->nValue==0 ){ + p->nValue = p->nStep; + } + } +} +static void percent_rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal>1 ){ + double r = (double)(p->nValue-1) / (double)(p->nTotal-1); + sqlite3_result_double(pCtx, r); + }else{ + sqlite3_result_double(pCtx, 0.0); + } + p->nValue = 0; + } +} + +/* +** Implementation of built-in window function cume_dist(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void cume_distStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + assert( nArg==1 ); UNUSED_PARAMETER(nArg); + + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal==0 ){ + p->nTotal = sqlite3_value_int64(apArg[0]); + } + p->nStep++; + } +} +static void cume_distValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->nTotal ){ + double r = (double)(p->nStep) / (double)(p->nTotal); + sqlite3_result_double(pCtx, r); + } +} + +/* +** Context object for ntile() window function. +*/ +struct NtileCtx { + i64 nTotal; /* Total rows in partition */ + i64 nParam; /* Parameter passed to ntile(N) */ + i64 iRow; /* Current row */ +}; + +/* +** Implementation of ntile(). This assumes that the window frame has +** been coerced to: +** +** ROWS UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void ntileStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct NtileCtx *p; + assert( nArg==2 ); UNUSED_PARAMETER(nArg); + p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal==0 ){ + p->nParam = sqlite3_value_int64(apArg[0]); + p->nTotal = sqlite3_value_int64(apArg[1]); + if( p->nParam<=0 ){ + sqlite3_result_error( + pCtx, "argument of ntile must be a positive integer", -1 + ); + } + } + p->iRow++; + } +} +static void ntileValueFunc(sqlite3_context *pCtx){ + struct NtileCtx *p; + p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->nParam>0 ){ + int nSize = (p->nTotal / p->nParam); + if( nSize==0 ){ + sqlite3_result_int64(pCtx, p->iRow); + }else{ + i64 nLarge = p->nTotal - p->nParam*nSize; + i64 iSmall = nLarge*(nSize+1); + i64 iRow = p->iRow-1; + + assert( (nLarge*(nSize+1) + (p->nParam-nLarge)*nSize)==p->nTotal ); + + if( iRowpVal); + p->pVal = sqlite3_value_dup(apArg[0]); + if( p->pVal==0 ){ + sqlite3_result_error_nomem(pCtx); + }else{ + p->nVal++; + } + } +} +static void last_valueInvFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct LastValueCtx *p; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( ALWAYS(p) ){ + p->nVal--; + if( p->nVal==0 ){ + sqlite3_value_free(p->pVal); + p->pVal = 0; + } + } +} +static void last_valueValueFunc(sqlite3_context *pCtx){ + struct LastValueCtx *p; + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->pVal ){ + sqlite3_result_value(pCtx, p->pVal); + } +} +static void last_valueFinalizeFunc(sqlite3_context *pCtx){ + struct LastValueCtx *p; + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->pVal ){ + sqlite3_result_value(pCtx, p->pVal); + sqlite3_value_free(p->pVal); + p->pVal = 0; + } +} + +/* +** Static names for the built-in window function names. These static +** names are used, rather than string literals, so that FuncDef objects +** can be associated with a particular window function by direct +** comparison of the zName pointer. Example: +** +** if( pFuncDef->zName==row_valueName ){ ... } +*/ +static const char row_numberName[] = "row_number"; +static const char dense_rankName[] = "dense_rank"; +static const char rankName[] = "rank"; +static const char percent_rankName[] = "percent_rank"; +static const char cume_distName[] = "cume_dist"; +static const char ntileName[] = "ntile"; +static const char last_valueName[] = "last_value"; +static const char nth_valueName[] = "nth_value"; +static const char first_valueName[] = "first_value"; +static const char leadName[] = "lead"; +static const char lagName[] = "lag"; + +/* +** No-op implementations of xStep() and xFinalize(). Used as place-holders +** for built-in window functions that never call those interfaces. +** +** The noopValueFunc() is called but is expected to do nothing. The +** noopStepFunc() is never called, and so it is marked with NO_TEST to +** let the test coverage routine know not to expect this function to be +** invoked. +*/ +static void noopStepFunc( /*NO_TEST*/ + sqlite3_context *p, /*NO_TEST*/ + int n, /*NO_TEST*/ + sqlite3_value **a /*NO_TEST*/ +){ /*NO_TEST*/ + UNUSED_PARAMETER(p); /*NO_TEST*/ + UNUSED_PARAMETER(n); /*NO_TEST*/ + UNUSED_PARAMETER(a); /*NO_TEST*/ + assert(0); /*NO_TEST*/ +} /*NO_TEST*/ +static void noopValueFunc(sqlite3_context *p){ UNUSED_PARAMETER(p); /*no-op*/ } + +/* Window functions that use all window interfaces: xStep, xFinal, +** xValue, and xInverse */ +#define WINDOWFUNCALL(name,nArg,extra) { \ + nArg, (SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + name ## StepFunc, name ## FinalizeFunc, name ## ValueFunc, \ + name ## InvFunc, name ## Name, {0} \ +} + +/* Window functions that are implemented using bytecode and thus have +** no-op routines for their methods */ +#define WINDOWFUNCNOOP(name,nArg,extra) { \ + nArg, (SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + noopStepFunc, noopValueFunc, noopValueFunc, \ + noopStepFunc, name ## Name, {0} \ +} + +/* Window functions that use all window interfaces: xStep, the +** same routine for xFinalize and xValue and which never call +** xInverse. */ +#define WINDOWFUNCX(name,nArg,extra) { \ + nArg, (SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + name ## StepFunc, name ## ValueFunc, name ## ValueFunc, \ + noopStepFunc, name ## Name, {0} \ +} + + +/* +** Register those built-in window functions that are not also aggregates. +*/ +void sqlite3WindowFunctions(void){ + static FuncDef aWindowFuncs[] = { + WINDOWFUNCX(row_number, 0, 0), + WINDOWFUNCX(dense_rank, 0, 0), + WINDOWFUNCX(rank, 0, 0), + WINDOWFUNCX(percent_rank, 0, SQLITE_FUNC_WINDOW_SIZE), + WINDOWFUNCX(cume_dist, 0, SQLITE_FUNC_WINDOW_SIZE), + WINDOWFUNCX(ntile, 1, SQLITE_FUNC_WINDOW_SIZE), + WINDOWFUNCALL(last_value, 1, 0), + WINDOWFUNCNOOP(nth_value, 2, 0), + WINDOWFUNCNOOP(first_value, 1, 0), + WINDOWFUNCNOOP(lead, 1, 0), + WINDOWFUNCNOOP(lead, 2, 0), + WINDOWFUNCNOOP(lead, 3, 0), + WINDOWFUNCNOOP(lag, 1, 0), + WINDOWFUNCNOOP(lag, 2, 0), + WINDOWFUNCNOOP(lag, 3, 0), + }; + sqlite3InsertBuiltinFuncs(aWindowFuncs, ArraySize(aWindowFuncs)); +} + +/* +** This function is called immediately after resolving the function name +** for a window function within a SELECT statement. Argument pList is a +** linked list of WINDOW definitions for the current SELECT statement. +** Argument pFunc is the function definition just resolved and pWin +** is the Window object representing the associated OVER clause. This +** function updates the contents of pWin as follows: +** +** * If the OVER clause refered to a named window (as in "max(x) OVER win"), +** search list pList for a matching WINDOW definition, and update pWin +** accordingly. If no such WINDOW clause can be found, leave an error +** in pParse. +** +** * If the function is a built-in window function that requires the +** window to be coerced (see "BUILT-IN WINDOW FUNCTIONS" at the top +** of this file), pWin is updated here. +*/ +void sqlite3WindowUpdate( + Parse *pParse, + Window *pList, /* List of named windows for this SELECT */ + Window *pWin, /* Window frame to update */ + FuncDef *pFunc /* Window function definition */ +){ + if( pWin->zName && pWin->eType==0 ){ + Window *p; + for(p=pList; p; p=p->pNextWin){ + if( sqlite3StrICmp(p->zName, pWin->zName)==0 ) break; + } + if( p==0 ){ + sqlite3ErrorMsg(pParse, "no such window: %s", pWin->zName); + return; + } + pWin->pPartition = sqlite3ExprListDup(pParse->db, p->pPartition, 0); + pWin->pOrderBy = sqlite3ExprListDup(pParse->db, p->pOrderBy, 0); + pWin->pStart = sqlite3ExprDup(pParse->db, p->pStart, 0); + pWin->pEnd = sqlite3ExprDup(pParse->db, p->pEnd, 0); + pWin->eStart = p->eStart; + pWin->eEnd = p->eEnd; + pWin->eType = p->eType; + } + if( pFunc->funcFlags & SQLITE_FUNC_WINDOW ){ + sqlite3 *db = pParse->db; + if( pWin->pFilter ){ + sqlite3ErrorMsg(pParse, + "FILTER clause may only be used with aggregate window functions" + ); + }else + if( pFunc->zName==row_numberName || pFunc->zName==ntileName ){ + sqlite3ExprDelete(db, pWin->pStart); + sqlite3ExprDelete(db, pWin->pEnd); + pWin->pStart = pWin->pEnd = 0; + pWin->eType = TK_ROWS; + pWin->eStart = TK_UNBOUNDED; + pWin->eEnd = TK_CURRENT; + }else + + if( pFunc->zName==dense_rankName || pFunc->zName==rankName + || pFunc->zName==percent_rankName || pFunc->zName==cume_distName + ){ + sqlite3ExprDelete(db, pWin->pStart); + sqlite3ExprDelete(db, pWin->pEnd); + pWin->pStart = pWin->pEnd = 0; + pWin->eType = TK_RANGE; + pWin->eStart = TK_UNBOUNDED; + pWin->eEnd = TK_CURRENT; + } + } + pWin->pFunc = pFunc; +} + +/* +** Context object passed through sqlite3WalkExprList() to +** selectWindowRewriteExprCb() by selectWindowRewriteEList(). +*/ +typedef struct WindowRewrite WindowRewrite; +struct WindowRewrite { + Window *pWin; + SrcList *pSrc; + ExprList *pSub; + Select *pSubSelect; /* Current sub-select, if any */ +}; + +/* +** Callback function used by selectWindowRewriteEList(). If necessary, +** this function appends to the output expression-list and updates +** expression (*ppExpr) in place. +*/ +static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ + struct WindowRewrite *p = pWalker->u.pRewrite; + Parse *pParse = pWalker->pParse; + + /* If this function is being called from within a scalar sub-select + ** that used by the SELECT statement being processed, only process + ** TK_COLUMN expressions that refer to it (the outer SELECT). Do + ** not process aggregates or window functions at all, as they belong + ** to the scalar sub-select. */ + if( p->pSubSelect ){ + if( pExpr->op!=TK_COLUMN ){ + return WRC_Continue; + }else{ + int nSrc = p->pSrc->nSrc; + int i; + for(i=0; iiTable==p->pSrc->a[i].iCursor ) break; + } + if( i==nSrc ) return WRC_Continue; + } + } + + switch( pExpr->op ){ + + case TK_FUNCTION: + if( pExpr->pWin==0 ){ + break; + }else{ + Window *pWin; + for(pWin=p->pWin; pWin; pWin=pWin->pNextWin){ + if( pExpr->pWin==pWin ){ + assert( pWin->pOwner==pExpr ); + return WRC_Prune; + } + } + } + /* Fall through. */ + + case TK_AGG_FUNCTION: + case TK_COLUMN: { + Expr *pDup = sqlite3ExprDup(pParse->db, pExpr, 0); + p->pSub = sqlite3ExprListAppend(pParse, p->pSub, pDup); + if( p->pSub ){ + assert( ExprHasProperty(pExpr, EP_Static)==0 ); + ExprSetProperty(pExpr, EP_Static); + sqlite3ExprDelete(pParse->db, pExpr); + ExprClearProperty(pExpr, EP_Static); + memset(pExpr, 0, sizeof(Expr)); + + pExpr->op = TK_COLUMN; + pExpr->iColumn = p->pSub->nExpr-1; + pExpr->iTable = p->pWin->iEphCsr; + } + + break; + } + + default: /* no-op */ + break; + } + + return WRC_Continue; +} +static int selectWindowRewriteSelectCb(Walker *pWalker, Select *pSelect){ + struct WindowRewrite *p = pWalker->u.pRewrite; + Select *pSave = p->pSubSelect; + if( pSave==pSelect ){ + return WRC_Continue; + }else{ + p->pSubSelect = pSelect; + sqlite3WalkSelect(pWalker, pSelect); + p->pSubSelect = pSave; + } + return WRC_Prune; +} + + +/* +** Iterate through each expression in expression-list pEList. For each: +** +** * TK_COLUMN, +** * aggregate function, or +** * window function with a Window object that is not a member of the +** Window list passed as the second argument (pWin). +** +** Append the node to output expression-list (*ppSub). And replace it +** with a TK_COLUMN that reads the (N-1)th element of table +** pWin->iEphCsr, where N is the number of elements in (*ppSub) after +** appending the new one. +*/ +static void selectWindowRewriteEList( + Parse *pParse, + Window *pWin, + SrcList *pSrc, + ExprList *pEList, /* Rewrite expressions in this list */ + ExprList **ppSub /* IN/OUT: Sub-select expression-list */ +){ + Walker sWalker; + WindowRewrite sRewrite; + + memset(&sWalker, 0, sizeof(Walker)); + memset(&sRewrite, 0, sizeof(WindowRewrite)); + + sRewrite.pSub = *ppSub; + sRewrite.pWin = pWin; + sRewrite.pSrc = pSrc; + + sWalker.pParse = pParse; + sWalker.xExprCallback = selectWindowRewriteExprCb; + sWalker.xSelectCallback = selectWindowRewriteSelectCb; + sWalker.u.pRewrite = &sRewrite; + + (void)sqlite3WalkExprList(&sWalker, pEList); + + *ppSub = sRewrite.pSub; +} + +/* +** Append a copy of each expression in expression-list pAppend to +** expression list pList. Return a pointer to the result list. +*/ +static ExprList *exprListAppendList( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to append. Might be NULL */ + ExprList *pAppend /* List of values to append. Might be NULL */ +){ + if( pAppend ){ + int i; + int nInit = pList ? pList->nExpr : 0; + for(i=0; inExpr; i++){ + Expr *pDup = sqlite3ExprDup(pParse->db, pAppend->a[i].pExpr, 0); + pList = sqlite3ExprListAppend(pParse, pList, pDup); + if( pList ) pList->a[nInit+i].sortOrder = pAppend->a[i].sortOrder; + } + } + return pList; +} + +/* +** If the SELECT statement passed as the second argument does not invoke +** any SQL window functions, this function is a no-op. Otherwise, it +** rewrites the SELECT statement so that window function xStep functions +** are invoked in the correct order as described under "SELECT REWRITING" +** at the top of this file. +*/ +int sqlite3WindowRewrite(Parse *pParse, Select *p){ + int rc = SQLITE_OK; + if( p->pWin ){ + Vdbe *v = sqlite3GetVdbe(pParse); + sqlite3 *db = pParse->db; + Select *pSub = 0; /* The subquery */ + SrcList *pSrc = p->pSrc; + Expr *pWhere = p->pWhere; + ExprList *pGroupBy = p->pGroupBy; + Expr *pHaving = p->pHaving; + ExprList *pSort = 0; + + ExprList *pSublist = 0; /* Expression list for sub-query */ + Window *pMWin = p->pWin; /* Master window object */ + Window *pWin; /* Window object iterator */ + + p->pSrc = 0; + p->pWhere = 0; + p->pGroupBy = 0; + p->pHaving = 0; + + /* Create the ORDER BY clause for the sub-select. This is the concatenation + ** of the window PARTITION and ORDER BY clauses. Then, if this makes it + ** redundant, remove the ORDER BY from the parent SELECT. */ + pSort = sqlite3ExprListDup(db, pMWin->pPartition, 0); + pSort = exprListAppendList(pParse, pSort, pMWin->pOrderBy); + if( pSort && p->pOrderBy ){ + if( sqlite3ExprListCompare(pSort, p->pOrderBy, -1)==0 ){ + sqlite3ExprListDelete(db, p->pOrderBy); + p->pOrderBy = 0; + } + } + + /* Assign a cursor number for the ephemeral table used to buffer rows. + ** The OpenEphemeral instruction is coded later, after it is known how + ** many columns the table will have. */ + pMWin->iEphCsr = pParse->nTab++; + + selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, &pSublist); + selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, &pSublist); + pMWin->nBufferCol = (pSublist ? pSublist->nExpr : 0); + + /* Append the PARTITION BY and ORDER BY expressions to the to the + ** sub-select expression list. They are required to figure out where + ** boundaries for partitions and sets of peer rows lie. */ + pSublist = exprListAppendList(pParse, pSublist, pMWin->pPartition); + pSublist = exprListAppendList(pParse, pSublist, pMWin->pOrderBy); + + /* Append the arguments passed to each window function to the + ** sub-select expression list. Also allocate two registers for each + ** window function - one for the accumulator, another for interim + ** results. */ + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + pWin->iArgCol = (pSublist ? pSublist->nExpr : 0); + pSublist = exprListAppendList(pParse, pSublist, pWin->pOwner->x.pList); + if( pWin->pFilter ){ + Expr *pFilter = sqlite3ExprDup(db, pWin->pFilter, 0); + pSublist = sqlite3ExprListAppend(pParse, pSublist, pFilter); + } + pWin->regAccum = ++pParse->nMem; + pWin->regResult = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + } + + /* If there is no ORDER BY or PARTITION BY clause, and the window + ** function accepts zero arguments, and there are no other columns + ** selected (e.g. "SELECT row_number() OVER () FROM t1"), it is possible + ** that pSublist is still NULL here. Add a constant expression here to + ** keep everything legal in this case. + */ + if( pSublist==0 ){ + pSublist = sqlite3ExprListAppend(pParse, 0, + sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[0], 0) + ); + } + + pSub = sqlite3SelectNew( + pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0 + ); + p->pSrc = sqlite3SrcListAppend(db, 0, 0, 0); + assert( p->pSrc || db->mallocFailed ); + if( p->pSrc ){ + p->pSrc->a[0].pSelect = pSub; + sqlite3SrcListAssignCursors(pParse, p->pSrc); + if( sqlite3ExpandSubquery(pParse, &p->pSrc->a[0]) ){ + rc = SQLITE_NOMEM; + }else{ + pSub->selFlags |= SF_Expanded; + p->selFlags &= ~SF_Aggregate; + sqlite3SelectPrep(pParse, pSub, 0); + } + + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pMWin->iEphCsr, pSublist->nExpr); + }else{ + sqlite3SelectDelete(db, pSub); + } + if( db->mallocFailed ) rc = SQLITE_NOMEM; + } + + return rc; +} + +/* +** Free the Window object passed as the second argument. +*/ +void sqlite3WindowDelete(sqlite3 *db, Window *p){ + if( p ){ + sqlite3ExprDelete(db, p->pFilter); + sqlite3ExprListDelete(db, p->pPartition); + sqlite3ExprListDelete(db, p->pOrderBy); + sqlite3ExprDelete(db, p->pEnd); + sqlite3ExprDelete(db, p->pStart); + sqlite3DbFree(db, p->zName); + sqlite3DbFree(db, p); + } +} + +/* +** Free the linked list of Window objects starting at the second argument. +*/ +void sqlite3WindowListDelete(sqlite3 *db, Window *p){ + while( p ){ + Window *pNext = p->pNextWin; + sqlite3WindowDelete(db, p); + p = pNext; + } +} + +/* +** The argument expression is an PRECEDING or FOLLOWING offset. The +** value should be a non-negative integer. If the value is not a +** constant, change it to NULL. The fact that it is then a non-negative +** integer will be caught later. But it is important not to leave +** variable values in the expression tree. +*/ +static Expr *sqlite3WindowOffsetExpr(Parse *pParse, Expr *pExpr){ + if( 0==sqlite3ExprIsConstant(pExpr) ){ + sqlite3ExprDelete(pParse->db, pExpr); + pExpr = sqlite3ExprAlloc(pParse->db, TK_NULL, 0, 0); + } + return pExpr; +} + +/* +** Allocate and return a new Window object describing a Window Definition. +*/ +Window *sqlite3WindowAlloc( + Parse *pParse, /* Parsing context */ + int eType, /* Frame type. TK_RANGE or TK_ROWS */ + int eStart, /* Start type: CURRENT, PRECEDING, FOLLOWING, UNBOUNDED */ + Expr *pStart, /* Start window size if TK_PRECEDING or FOLLOWING */ + int eEnd, /* End type: CURRENT, FOLLOWING, TK_UNBOUNDED, PRECEDING */ + Expr *pEnd /* End window size if TK_FOLLOWING or PRECEDING */ +){ + Window *pWin = 0; + + /* Parser assures the following: */ + assert( eType==TK_RANGE || eType==TK_ROWS ); + assert( eStart==TK_CURRENT || eStart==TK_PRECEDING + || eStart==TK_UNBOUNDED || eStart==TK_FOLLOWING ); + assert( eEnd==TK_CURRENT || eEnd==TK_FOLLOWING + || eEnd==TK_UNBOUNDED || eEnd==TK_PRECEDING ); + assert( (eStart==TK_PRECEDING || eStart==TK_FOLLOWING)==(pStart!=0) ); + assert( (eEnd==TK_FOLLOWING || eEnd==TK_PRECEDING)==(pEnd!=0) ); + + + /* If a frame is declared "RANGE" (not "ROWS"), then it may not use + ** either " PRECEDING" or " FOLLOWING". + */ + if( eType==TK_RANGE && (pStart!=0 || pEnd!=0) ){ + sqlite3ErrorMsg(pParse, "RANGE must use only UNBOUNDED or CURRENT ROW"); + goto windowAllocErr; + } + + /* Additionally, the + ** starting boundary type may not occur earlier in the following list than + ** the ending boundary type: + ** + ** UNBOUNDED PRECEDING + ** PRECEDING + ** CURRENT ROW + ** FOLLOWING + ** UNBOUNDED FOLLOWING + ** + ** The parser ensures that "UNBOUNDED PRECEDING" cannot be used as an ending + ** boundary, and than "UNBOUNDED FOLLOWING" cannot be used as a starting + ** frame boundary. + */ + if( (eStart==TK_CURRENT && eEnd==TK_PRECEDING) + || (eStart==TK_FOLLOWING && (eEnd==TK_PRECEDING || eEnd==TK_CURRENT)) + ){ + sqlite3ErrorMsg(pParse, "unsupported frame delimiter for ROWS"); + goto windowAllocErr; + } + + pWin = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( pWin==0 ) goto windowAllocErr; + pWin->eType = eType; + pWin->eStart = eStart; + pWin->eEnd = eEnd; + pWin->pEnd = sqlite3WindowOffsetExpr(pParse, pEnd); + pWin->pStart = sqlite3WindowOffsetExpr(pParse, pStart); + return pWin; + +windowAllocErr: + sqlite3ExprDelete(pParse->db, pEnd); + sqlite3ExprDelete(pParse->db, pStart); + return 0; +} + +/* +** Attach window object pWin to expression p. +*/ +void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){ + if( p ){ + /* This routine is only called for the parser. If pWin was not + ** allocated due to an OOM, then the parser would fail before ever + ** invoking this routine */ + if( ALWAYS(pWin) ){ + p->pWin = pWin; + pWin->pOwner = p; + if( p->flags & EP_Distinct ){ + sqlite3ErrorMsg(pParse, + "DISTINCT is not supported for window functions"); + } + } + }else{ + sqlite3WindowDelete(pParse->db, pWin); + } +} + +/* +** Return 0 if the two window objects are identical, or non-zero otherwise. +** Identical window objects can be processed in a single scan. +*/ +int sqlite3WindowCompare(Parse *pParse, Window *p1, Window *p2){ + if( p1->eType!=p2->eType ) return 1; + if( p1->eStart!=p2->eStart ) return 1; + if( p1->eEnd!=p2->eEnd ) return 1; + if( sqlite3ExprCompare(pParse, p1->pStart, p2->pStart, -1) ) return 1; + if( sqlite3ExprCompare(pParse, p1->pEnd, p2->pEnd, -1) ) return 1; + if( sqlite3ExprListCompare(p1->pPartition, p2->pPartition, -1) ) return 1; + if( sqlite3ExprListCompare(p1->pOrderBy, p2->pOrderBy, -1) ) return 1; + return 0; +} + + +/* +** This is called by code in select.c before it calls sqlite3WhereBegin() +** to begin iterating through the sub-query results. It is used to allocate +** and initialize registers and cursors used by sqlite3WindowCodeStep(). +*/ +void sqlite3WindowCodeInit(Parse *pParse, Window *pMWin){ + Window *pWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int nPart = (pMWin->pPartition ? pMWin->pPartition->nExpr : 0); + nPart += (pMWin->pOrderBy ? pMWin->pOrderBy->nExpr : 0); + if( nPart ){ + pMWin->regPart = pParse->nMem+1; + pParse->nMem += nPart; + sqlite3VdbeAddOp3(v, OP_Null, 0, pMWin->regPart, pMWin->regPart+nPart-1); + } + + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *p = pWin->pFunc; + if( (p->funcFlags & SQLITE_FUNC_MINMAX) && pWin->eStart!=TK_UNBOUNDED ){ + /* The inline versions of min() and max() require a single ephemeral + ** table and 3 registers. The registers are used as follows: + ** + ** regApp+0: slot to copy min()/max() argument to for MakeRecord + ** regApp+1: integer value used to ensure keys are unique + ** regApp+2: output of MakeRecord + */ + ExprList *pList = pWin->pOwner->x.pList; + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pList, 0, 0); + pWin->csrApp = pParse->nTab++; + pWin->regApp = pParse->nMem+1; + pParse->nMem += 3; + if( pKeyInfo && pWin->pFunc->zName[1]=='i' ){ + assert( pKeyInfo->aSortOrder[0]==0 ); + pKeyInfo->aSortOrder[0] = 1; + } + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pWin->csrApp, 2); + sqlite3VdbeAppendP4(v, pKeyInfo, P4_KEYINFO); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + else if( p->zName==nth_valueName || p->zName==first_valueName ){ + /* Allocate two registers at pWin->regApp. These will be used to + ** store the start and end index of the current frame. */ + assert( pMWin->iEphCsr ); + pWin->regApp = pParse->nMem+1; + pWin->csrApp = pParse->nTab++; + pParse->nMem += 2; + sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr); + } + else if( p->zName==leadName || p->zName==lagName ){ + assert( pMWin->iEphCsr ); + pWin->csrApp = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr); + } + } +} + +/* +** A "PRECEDING " (eCond==0) or "FOLLOWING " (eCond==1) or the +** value of the second argument to nth_value() (eCond==2) has just been +** evaluated and the result left in register reg. This function generates VM +** code to check that the value is a non-negative integer and throws an +** exception if it is not. +*/ +static void windowCheckIntValue(Parse *pParse, int reg, int eCond){ + static const char *azErr[] = { + "frame starting offset must be a non-negative integer", + "frame ending offset must be a non-negative integer", + "second argument to nth_value must be a positive integer" + }; + static int aOp[] = { OP_Ge, OP_Ge, OP_Gt }; + Vdbe *v = sqlite3GetVdbe(pParse); + int regZero = sqlite3GetTempReg(pParse); + assert( eCond==0 || eCond==1 || eCond==2 ); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regZero); + sqlite3VdbeAddOp2(v, OP_MustBeInt, reg, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverageIf(v, eCond==0); + VdbeCoverageIf(v, eCond==1); + VdbeCoverageIf(v, eCond==2); + sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg); + VdbeCoverageNeverNullIf(v, eCond==0); + VdbeCoverageNeverNullIf(v, eCond==1); + VdbeCoverageNeverNullIf(v, eCond==2); + sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_ERROR, OE_Abort); + sqlite3VdbeAppendP4(v, (void*)azErr[eCond], P4_STATIC); + sqlite3ReleaseTempReg(pParse, regZero); +} + +/* +** Return the number of arguments passed to the window-function associated +** with the object passed as the only argument to this function. +*/ +static int windowArgCount(Window *pWin){ + ExprList *pList = pWin->pOwner->x.pList; + return (pList ? pList->nExpr : 0); +} + +/* +** Generate VM code to invoke either xStep() (if bInverse is 0) or +** xInverse (if bInverse is non-zero) for each window function in the +** linked list starting at pMWin. Or, for built-in window functions +** that do not use the standard function API, generate the required +** inline VM code. +** +** If argument csr is greater than or equal to 0, then argument reg is +** the first register in an array of registers guaranteed to be large +** enough to hold the array of arguments for each function. In this case +** the arguments are extracted from the current row of csr into the +** array of registers before invoking OP_AggStep or OP_AggInverse +** +** Or, if csr is less than zero, then the array of registers at reg is +** already populated with all columns from the current row of the sub-query. +** +** If argument regPartSize is non-zero, then it is a register containing the +** number of rows in the current partition. +*/ +static void windowAggStep( + Parse *pParse, + Window *pMWin, /* Linked list of window functions */ + int csr, /* Read arguments from this cursor */ + int bInverse, /* True to invoke xInverse instead of xStep */ + int reg, /* Array of registers */ + int regPartSize /* Register containing size of partition */ +){ + Vdbe *v = sqlite3GetVdbe(pParse); + Window *pWin; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + int flags = pWin->pFunc->funcFlags; + int regArg; + int nArg = windowArgCount(pWin); + + if( csr>=0 ){ + int i; + for(i=0; iiArgCol+i, reg+i); + } + regArg = reg; + if( flags & SQLITE_FUNC_WINDOW_SIZE ){ + if( nArg==0 ){ + regArg = regPartSize; + }else{ + sqlite3VdbeAddOp2(v, OP_SCopy, regPartSize, reg+nArg); + } + nArg++; + } + }else{ + assert( !(flags & SQLITE_FUNC_WINDOW_SIZE) ); + regArg = reg + pWin->iArgCol; + } + + if( (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX) + && pWin->eStart!=TK_UNBOUNDED + ){ + int addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, regArg); + VdbeCoverage(v); + if( bInverse==0 ){ + sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1, 1); + sqlite3VdbeAddOp2(v, OP_SCopy, regArg, pWin->regApp); + sqlite3VdbeAddOp3(v, OP_MakeRecord, pWin->regApp, 2, pWin->regApp+2); + sqlite3VdbeAddOp2(v, OP_IdxInsert, pWin->csrApp, pWin->regApp+2); + }else{ + sqlite3VdbeAddOp4Int(v, OP_SeekGE, pWin->csrApp, 0, regArg, 1); + VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp1(v, OP_Delete, pWin->csrApp); + sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); + } + sqlite3VdbeJumpHere(v, addrIsNull); + }else if( pWin->regApp ){ + assert( pWin->pFunc->zName==nth_valueName + || pWin->pFunc->zName==first_valueName + ); + assert( bInverse==0 || bInverse==1 ); + sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1-bInverse, 1); + }else if( pWin->pFunc->zName==leadName + || pWin->pFunc->zName==lagName + ){ + /* no-op */ + }else{ + int addrIf = 0; + if( pWin->pFilter ){ + int regTmp; + assert( nArg==0 || nArg==pWin->pOwner->x.pList->nExpr ); + assert( nArg || pWin->pOwner->x.pList==0 ); + if( csr>0 ){ + regTmp = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp); + }else{ + regTmp = regArg + nArg; + } + addrIf = sqlite3VdbeAddOp3(v, OP_IfNot, regTmp, 0, 1); + VdbeCoverage(v); + if( csr>0 ){ + sqlite3ReleaseTempReg(pParse, regTmp); + } + } + if( pWin->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ + CollSeq *pColl; + assert( nArg>0 ); + pColl = sqlite3ExprNNCollSeq(pParse, pWin->pOwner->x.pList->a[0].pExpr); + sqlite3VdbeAddOp4(v, OP_CollSeq, 0,0,0, (const char*)pColl, P4_COLLSEQ); + } + sqlite3VdbeAddOp3(v, bInverse? OP_AggInverse : OP_AggStep, + bInverse, regArg, pWin->regAccum); + sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u8)nArg); + if( addrIf ) sqlite3VdbeJumpHere(v, addrIf); + } + } +} + +/* +** Generate VM code to invoke either xValue() (bFinal==0) or xFinalize() +** (bFinal==1) for each window function in the linked list starting at +** pMWin. Or, for built-in window-functions that do not use the standard +** API, generate the equivalent VM code. +*/ +static void windowAggFinal(Parse *pParse, Window *pMWin, int bFinal){ + Vdbe *v = sqlite3GetVdbe(pParse); + Window *pWin; + + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + if( (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX) + && pWin->eStart!=TK_UNBOUNDED + ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + sqlite3VdbeAddOp1(v, OP_Last, pWin->csrApp); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Column, pWin->csrApp, 0, pWin->regResult); + sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); + if( bFinal ){ + sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp); + } + }else if( pWin->regApp ){ + }else{ + if( bFinal ){ + sqlite3VdbeAddOp2(v, OP_AggFinal, pWin->regAccum, windowArgCount(pWin)); + sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF); + sqlite3VdbeAddOp2(v, OP_Copy, pWin->regAccum, pWin->regResult); + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + }else{ + sqlite3VdbeAddOp3(v, OP_AggValue, pWin->regAccum, windowArgCount(pWin), + pWin->regResult); + sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF); + } + } + } +} + +/* +** This function generates VM code to invoke the sub-routine at address +** lblFlushPart once for each partition with the entire partition cached in +** the Window.iEphCsr temp table. +*/ +static void windowPartitionCache( + Parse *pParse, + Select *p, /* The rewritten SELECT statement */ + WhereInfo *pWInfo, /* WhereInfo to call WhereEnd() on */ + int regFlushPart, /* Register to use with Gosub lblFlushPart */ + int lblFlushPart, /* Subroutine to Gosub to */ + int *pRegSize /* OUT: Register containing partition size */ +){ + Window *pMWin = p->pWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int iSubCsr = p->pSrc->a[0].iCursor; + int nSub = p->pSrc->a[0].pTab->nCol; + int k; + + int reg = pParse->nMem+1; + int regRecord = reg+nSub; + int regRowid = regRecord+1; + + *pRegSize = regRowid; + pParse->nMem += nSub + 2; + + /* Load the column values for the row returned by the sub-select + ** into an array of registers starting at reg. */ + for(k=0; kpPartition ){ + int addr; + ExprList *pPart = pMWin->pPartition; + int nPart = pPart->nExpr; + int regNewPart = reg + pMWin->nBufferCol; + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pPart, 0, 0); + + addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPart, pMWin->regPart,nPart); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + sqlite3VdbeAddOp3(v, OP_Jump, addr+2, addr+4, addr+2); + VdbeCoverageEqNe(v); + sqlite3VdbeAddOp3(v, OP_Copy, regNewPart, pMWin->regPart, nPart-1); + sqlite3VdbeAddOp2(v, OP_Gosub, regFlushPart, lblFlushPart); + VdbeComment((v, "call flush_partition")); + } + + /* Buffer the current row in the ephemeral table. */ + sqlite3VdbeAddOp2(v, OP_NewRowid, pMWin->iEphCsr, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, pMWin->iEphCsr, regRecord, regRowid); + + /* End of the input loop */ + sqlite3WhereEnd(pWInfo); + + /* Invoke "flush_partition" to deal with the final (or only) partition */ + sqlite3VdbeAddOp2(v, OP_Gosub, regFlushPart, lblFlushPart); + VdbeComment((v, "call flush_partition")); +} + +/* +** Invoke the sub-routine at regGosub (generated by code in select.c) to +** return the current row of Window.iEphCsr. If all window functions are +** aggregate window functions that use the standard API, a single +** OP_Gosub instruction is all that this routine generates. Extra VM code +** for per-row processing is only generated for the following built-in window +** functions: +** +** nth_value() +** first_value() +** lag() +** lead() +*/ +static void windowReturnOneRow( + Parse *pParse, + Window *pMWin, + int regGosub, + int addrGosub +){ + Vdbe *v = sqlite3GetVdbe(pParse); + Window *pWin; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pFunc; + if( pFunc->zName==nth_valueName + || pFunc->zName==first_valueName + ){ + int csr = pWin->csrApp; + int lbl = sqlite3VdbeMakeLabel(v); + int tmpReg = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + + if( pFunc->zName==nth_valueName ){ + sqlite3VdbeAddOp3(v, OP_Column, pMWin->iEphCsr, pWin->iArgCol+1,tmpReg); + windowCheckIntValue(pParse, tmpReg, 2); + }else{ + sqlite3VdbeAddOp2(v, OP_Integer, 1, tmpReg); + } + sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg); + sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg); + VdbeCoverageNeverNull(v); + sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, 0, tmpReg); + VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult); + sqlite3VdbeResolveLabel(v, lbl); + sqlite3ReleaseTempReg(pParse, tmpReg); + } + else if( pFunc->zName==leadName || pFunc->zName==lagName ){ + int nArg = pWin->pOwner->x.pList->nExpr; + int iEph = pMWin->iEphCsr; + int csr = pWin->csrApp; + int lbl = sqlite3VdbeMakeLabel(v); + int tmpReg = sqlite3GetTempReg(pParse); + + if( nArg<3 ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + }else{ + sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+2, pWin->regResult); + } + sqlite3VdbeAddOp2(v, OP_Rowid, iEph, tmpReg); + if( nArg<2 ){ + int val = (pFunc->zName==leadName ? 1 : -1); + sqlite3VdbeAddOp2(v, OP_AddImm, tmpReg, val); + }else{ + int op = (pFunc->zName==leadName ? OP_Add : OP_Subtract); + int tmpReg2 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+1, tmpReg2); + sqlite3VdbeAddOp3(v, op, tmpReg2, tmpReg, tmpReg); + sqlite3ReleaseTempReg(pParse, tmpReg2); + } + + sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, lbl, tmpReg); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult); + sqlite3VdbeResolveLabel(v, lbl); + sqlite3ReleaseTempReg(pParse, tmpReg); + } + } + sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub); +} + +/* +** Invoke the code generated by windowReturnOneRow() and, optionally, the +** xInverse() function for each window function, for one or more rows +** from the Window.iEphCsr temp table. This routine generates VM code +** similar to: +** +** while( regCtr>0 ){ +** regCtr--; +** windowReturnOneRow() +** if( bInverse ){ +** AggInverse +** } +** Next (Window.iEphCsr) +** } +*/ +static void windowReturnRows( + Parse *pParse, + Window *pMWin, /* List of window functions */ + int regCtr, /* Register containing number of rows */ + int regGosub, /* Register for Gosub addrGosub */ + int addrGosub, /* Address of sub-routine for ReturnOneRow */ + int regInvArg, /* Array of registers for xInverse args */ + int regInvSize /* Register containing size of partition */ +){ + int addr; + Vdbe *v = sqlite3GetVdbe(pParse); + windowAggFinal(pParse, pMWin, 0); + addr = sqlite3VdbeAddOp3(v, OP_IfPos, regCtr, sqlite3VdbeCurrentAddr(v)+2 ,1); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); + windowReturnOneRow(pParse, pMWin, regGosub, addrGosub); + if( regInvArg ){ + windowAggStep(pParse, pMWin, pMWin->iEphCsr, 1, regInvArg, regInvSize); + } + sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, addr); + VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addr+1); /* The OP_Goto */ +} + +/* +** Generate code to set the accumulator register for each window function +** in the linked list passed as the second argument to NULL. And perform +** any equivalent initialization required by any built-in window functions +** in the list. +*/ +static int windowInitAccum(Parse *pParse, Window *pMWin){ + Vdbe *v = sqlite3GetVdbe(pParse); + int regArg; + int nArg = 0; + Window *pWin; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pFunc; + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + nArg = MAX(nArg, windowArgCount(pWin)); + if( pFunc->zName==nth_valueName + || pFunc->zName==first_valueName + ){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + + if( (pFunc->funcFlags & SQLITE_FUNC_MINMAX) && pWin->csrApp ){ + assert( pWin->eStart!=TK_UNBOUNDED ); + sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + } + regArg = pParse->nMem+1; + pParse->nMem += nArg; + return regArg; +} + + +/* +** This function does the work of sqlite3WindowCodeStep() for all "ROWS" +** window frame types except for "BETWEEN UNBOUNDED PRECEDING AND CURRENT +** ROW". Pseudo-code for each follows. +** +** ROWS BETWEEN PRECEDING AND FOLLOWING +** +** ... +** if( new partition ){ +** Gosub flush_partition +** } +** Insert (record in eph-table) +** sqlite3WhereEnd() +** Gosub flush_partition +** +** flush_partition: +** Once { +** OpenDup (iEphCsr -> csrStart) +** OpenDup (iEphCsr -> csrEnd) +** } +** regStart = // PRECEDING expression +** regEnd = // FOLLOWING expression +** if( regStart<0 || regEnd<0 ){ error! } +** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done +** Next(csrEnd) // if EOF skip Aggstep +** Aggstep (csrEnd) +** if( (regEnd--)<=0 ){ +** AggFinal (xValue) +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** if( (regStart--)<=0 ){ +** AggInverse (csrStart) +** Next(csrStart) +** } +** } +** flush_partition_done: +** ResetSorter (csr) +** Return +** +** ROWS BETWEEN PRECEDING AND CURRENT ROW +** ROWS BETWEEN CURRENT ROW AND FOLLOWING +** ROWS BETWEEN UNBOUNDED PRECEDING AND FOLLOWING +** +** These are similar to the above. For "CURRENT ROW", intialize the +** register to 0. For "UNBOUNDED PRECEDING" to infinity. +** +** ROWS BETWEEN PRECEDING AND UNBOUNDED FOLLOWING +** ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING +** +** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done +** while( 1 ){ +** Next(csrEnd) // Exit while(1) at EOF +** Aggstep (csrEnd) +** } +** while( 1 ){ +** AggFinal (xValue) +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** if( (regStart--)<=0 ){ +** AggInverse (csrStart) +** Next(csrStart) +** } +** } +** +** For the "CURRENT ROW AND UNBOUNDED FOLLOWING" case, the final if() +** condition is always true (as if regStart were initialized to 0). +** +** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING +** +** This is the only RANGE case handled by this routine. It modifies the +** second while( 1 ) loop in "ROWS BETWEEN CURRENT ... UNBOUNDED..." to +** be: +** +** while( 1 ){ +** AggFinal (xValue) +** while( 1 ){ +** regPeer++ +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** if( new peer ) break; +** } +** while( (regPeer--)>0 ){ +** AggInverse (csrStart) +** Next(csrStart) +** } +** } +** +** ROWS BETWEEN FOLLOWING AND FOLLOWING +** +** regEnd = regEnd - regStart +** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done +** Aggstep (csrEnd) +** Next(csrEnd) // if EOF fall-through +** if( (regEnd--)<=0 ){ +** if( (regStart--)<=0 ){ +** AggFinal (xValue) +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** } +** AggInverse (csrStart) +** Next (csrStart) +** } +** +** ROWS BETWEEN PRECEDING AND PRECEDING +** +** Replace the bit after "Rewind" in the above with: +** +** if( (regEnd--)<=0 ){ +** AggStep (csrEnd) +** Next (csrEnd) +** } +** AggFinal (xValue) +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** if( (regStart--)<=0 ){ +** AggInverse (csr2) +** Next (csr2) +** } +** +*/ +static void windowCodeRowExprStep( + Parse *pParse, + Select *p, + WhereInfo *pWInfo, + int regGosub, + int addrGosub +){ + Window *pMWin = p->pWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int regFlushPart; /* Register for "Gosub flush_partition" */ + int lblFlushPart; /* Label for "Gosub flush_partition" */ + int lblFlushDone; /* Label for "Gosub flush_partition_done" */ + + int regArg; + int addr; + int csrStart = pParse->nTab++; + int csrEnd = pParse->nTab++; + int regStart; /* Value of PRECEDING */ + int regEnd; /* Value of FOLLOWING */ + int addrGoto; + int addrTop; + int addrIfPos1 = 0; + int addrIfPos2 = 0; + int regSize = 0; + + assert( pMWin->eStart==TK_PRECEDING + || pMWin->eStart==TK_CURRENT + || pMWin->eStart==TK_FOLLOWING + || pMWin->eStart==TK_UNBOUNDED + ); + assert( pMWin->eEnd==TK_FOLLOWING + || pMWin->eEnd==TK_CURRENT + || pMWin->eEnd==TK_UNBOUNDED + || pMWin->eEnd==TK_PRECEDING + ); + + /* Allocate register and label for the "flush_partition" sub-routine. */ + regFlushPart = ++pParse->nMem; + lblFlushPart = sqlite3VdbeMakeLabel(v); + lblFlushDone = sqlite3VdbeMakeLabel(v); + + regStart = ++pParse->nMem; + regEnd = ++pParse->nMem; + + windowPartitionCache(pParse, p, pWInfo, regFlushPart, lblFlushPart, ®Size); + + addrGoto = sqlite3VdbeAddOp0(v, OP_Goto); + + /* Start of "flush_partition" */ + sqlite3VdbeResolveLabel(v, lblFlushPart); + sqlite3VdbeAddOp2(v, OP_Once, 0, sqlite3VdbeCurrentAddr(v)+3); + VdbeCoverage(v); + VdbeComment((v, "Flush_partition subroutine")); + sqlite3VdbeAddOp2(v, OP_OpenDup, csrStart, pMWin->iEphCsr); + sqlite3VdbeAddOp2(v, OP_OpenDup, csrEnd, pMWin->iEphCsr); + + /* If either regStart or regEnd are not non-negative integers, throw + ** an exception. */ + if( pMWin->pStart ){ + sqlite3ExprCode(pParse, pMWin->pStart, regStart); + windowCheckIntValue(pParse, regStart, 0); + } + if( pMWin->pEnd ){ + sqlite3ExprCode(pParse, pMWin->pEnd, regEnd); + windowCheckIntValue(pParse, regEnd, 1); + } + + /* If this is "ROWS FOLLOWING AND ROWS FOLLOWING", do: + ** + ** if( regEndpEnd && pMWin->eStart==TK_FOLLOWING ){ + assert( pMWin->pStart!=0 ); + assert( pMWin->eEnd==TK_FOLLOWING ); + sqlite3VdbeAddOp3(v, OP_Ge, regStart, sqlite3VdbeCurrentAddr(v)+2, regEnd); + VdbeCoverageNeverNull(v); + sqlite3VdbeAddOp2(v, OP_Copy, regSize, regStart); + sqlite3VdbeAddOp3(v, OP_Subtract, regStart, regEnd, regEnd); + } + + if( pMWin->pStart && pMWin->eEnd==TK_PRECEDING ){ + assert( pMWin->pEnd!=0 ); + assert( pMWin->eStart==TK_PRECEDING ); + sqlite3VdbeAddOp3(v, OP_Le, regStart, sqlite3VdbeCurrentAddr(v)+3, regEnd); + VdbeCoverageNeverNull(v); + sqlite3VdbeAddOp2(v, OP_Copy, regSize, regStart); + sqlite3VdbeAddOp2(v, OP_Copy, regSize, regEnd); + } + + /* Initialize the accumulator register for each window function to NULL */ + regArg = windowInitAccum(pParse, pMWin); + + sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr, lblFlushDone); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Rewind, csrStart, lblFlushDone); + VdbeCoverageNeverTaken(v); + sqlite3VdbeChangeP5(v, 1); + sqlite3VdbeAddOp2(v, OP_Rewind, csrEnd, lblFlushDone); + VdbeCoverageNeverTaken(v); + sqlite3VdbeChangeP5(v, 1); + + /* Invoke AggStep function for each window function using the row that + ** csrEnd currently points to. Or, if csrEnd is already at EOF, + ** do nothing. */ + addrTop = sqlite3VdbeCurrentAddr(v); + if( pMWin->eEnd==TK_PRECEDING ){ + addrIfPos1 = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0 , 1); + VdbeCoverage(v); + } + sqlite3VdbeAddOp2(v, OP_Next, csrEnd, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + addr = sqlite3VdbeAddOp0(v, OP_Goto); + windowAggStep(pParse, pMWin, csrEnd, 0, regArg, regSize); + if( pMWin->eEnd==TK_UNBOUNDED ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop); + sqlite3VdbeJumpHere(v, addr); + addrTop = sqlite3VdbeCurrentAddr(v); + }else{ + sqlite3VdbeJumpHere(v, addr); + if( pMWin->eEnd==TK_PRECEDING ){ + sqlite3VdbeJumpHere(v, addrIfPos1); + } + } + + if( pMWin->eEnd==TK_FOLLOWING ){ + addrIfPos1 = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0 , 1); + VdbeCoverage(v); + } + if( pMWin->eStart==TK_FOLLOWING ){ + addrIfPos2 = sqlite3VdbeAddOp3(v, OP_IfPos, regStart, 0 , 1); + VdbeCoverage(v); + } + windowAggFinal(pParse, pMWin, 0); + windowReturnOneRow(pParse, pMWin, regGosub, addrGosub); + sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Goto, 0, lblFlushDone); + if( pMWin->eStart==TK_FOLLOWING ){ + sqlite3VdbeJumpHere(v, addrIfPos2); + } + + if( pMWin->eStart==TK_CURRENT + || pMWin->eStart==TK_PRECEDING + || pMWin->eStart==TK_FOLLOWING + ){ + int lblSkipInverse = sqlite3VdbeMakeLabel(v);; + if( pMWin->eStart==TK_PRECEDING ){ + sqlite3VdbeAddOp3(v, OP_IfPos, regStart, lblSkipInverse, 1); + VdbeCoverage(v); + } + if( pMWin->eStart==TK_FOLLOWING ){ + sqlite3VdbeAddOp2(v, OP_Next, csrStart, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Goto, 0, lblSkipInverse); + }else{ + sqlite3VdbeAddOp2(v, OP_Next, csrStart, sqlite3VdbeCurrentAddr(v)+1); + VdbeCoverageAlwaysTaken(v); + } + windowAggStep(pParse, pMWin, csrStart, 1, regArg, regSize); + sqlite3VdbeResolveLabel(v, lblSkipInverse); + } + if( pMWin->eEnd==TK_FOLLOWING ){ + sqlite3VdbeJumpHere(v, addrIfPos1); + } + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop); + + /* flush_partition_done: */ + sqlite3VdbeResolveLabel(v, lblFlushDone); + sqlite3VdbeAddOp1(v, OP_ResetSorter, pMWin->iEphCsr); + sqlite3VdbeAddOp1(v, OP_Return, regFlushPart); + VdbeComment((v, "end flush_partition subroutine")); + + /* Jump to here to skip over flush_partition */ + sqlite3VdbeJumpHere(v, addrGoto); +} + +/* +** This function does the work of sqlite3WindowCodeStep() for cases that +** would normally be handled by windowCodeDefaultStep() when there are +** one or more built-in window-functions that require the entire partition +** to be cached in a temp table before any rows can be returned. Additionally. +** "RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING" is always handled by +** this function. +** +** Pseudo-code corresponding to the VM code generated by this function +** for each type of window follows. +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** flush_partition: +** Once { +** OpenDup (iEphCsr -> csrLead) +** } +** Integer ctr 0 +** foreach row (csrLead){ +** if( new peer ){ +** AggFinal (xValue) +** for(i=0; i csrLead) +** } +** foreach row (csrLead) { +** AggStep (csrLead) +** } +** foreach row (iEphCsr) { +** Gosub addrGosub +** } +** +** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING +** +** flush_partition: +** Once { +** OpenDup (iEphCsr -> csrLead) +** } +** foreach row (csrLead){ +** AggStep (csrLead) +** } +** Rewind (csrLead) +** Integer ctr 0 +** foreach row (csrLead){ +** if( new peer ){ +** AggFinal (xValue) +** for(i=0; ipWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int k; + int addr; + ExprList *pPart = pMWin->pPartition; + ExprList *pOrderBy = pMWin->pOrderBy; + int nPeer = pOrderBy ? pOrderBy->nExpr : 0; + int regNewPeer; + + int addrGoto; /* Address of Goto used to jump flush_par.. */ + int addrNext; /* Jump here for next iteration of loop */ + int regFlushPart; + int lblFlushPart; + int csrLead; + int regCtr; + int regArg; /* Register array to martial function args */ + int regSize; + int lblEmpty; + int bReverse = pMWin->pOrderBy && pMWin->eStart==TK_CURRENT + && pMWin->eEnd==TK_UNBOUNDED; + + assert( (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT) + || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_UNBOUNDED) + || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_CURRENT) + || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED) + ); + + lblEmpty = sqlite3VdbeMakeLabel(v); + regNewPeer = pParse->nMem+1; + pParse->nMem += nPeer; + + /* Allocate register and label for the "flush_partition" sub-routine. */ + regFlushPart = ++pParse->nMem; + lblFlushPart = sqlite3VdbeMakeLabel(v); + + csrLead = pParse->nTab++; + regCtr = ++pParse->nMem; + + windowPartitionCache(pParse, p, pWInfo, regFlushPart, lblFlushPart, ®Size); + addrGoto = sqlite3VdbeAddOp0(v, OP_Goto); + + /* Start of "flush_partition" */ + sqlite3VdbeResolveLabel(v, lblFlushPart); + sqlite3VdbeAddOp2(v, OP_Once, 0, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_OpenDup, csrLead, pMWin->iEphCsr); + + /* Initialize the accumulator register for each window function to NULL */ + regArg = windowInitAccum(pParse, pMWin); + + sqlite3VdbeAddOp2(v, OP_Integer, 0, regCtr); + sqlite3VdbeAddOp2(v, OP_Rewind, csrLead, lblEmpty); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr, lblEmpty); + VdbeCoverageNeverTaken(v); + + if( bReverse ){ + int addr2 = sqlite3VdbeCurrentAddr(v); + windowAggStep(pParse, pMWin, csrLead, 0, regArg, regSize); + sqlite3VdbeAddOp2(v, OP_Next, csrLead, addr2); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Rewind, csrLead, lblEmpty); + VdbeCoverageNeverTaken(v); + } + addrNext = sqlite3VdbeCurrentAddr(v); + + if( pOrderBy && (pMWin->eEnd==TK_CURRENT || pMWin->eStart==TK_CURRENT) ){ + int bCurrent = (pMWin->eStart==TK_CURRENT); + int addrJump = 0; /* Address of OP_Jump below */ + if( pMWin->eType==TK_RANGE ){ + int iOff = pMWin->nBufferCol + (pPart ? pPart->nExpr : 0); + int regPeer = pMWin->regPart + (pPart ? pPart->nExpr : 0); + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOrderBy, 0, 0); + for(k=0; kiEphCsr); + sqlite3VdbeAddOp1(v, OP_Return, regFlushPart); + + /* Jump to here to skip over flush_partition */ + sqlite3VdbeJumpHere(v, addrGoto); +} + + +/* +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** ... +** if( new partition ){ +** AggFinal (xFinalize) +** Gosub addrGosub +** ResetSorter eph-table +** } +** else if( new peer ){ +** AggFinal (xValue) +** Gosub addrGosub +** ResetSorter eph-table +** } +** AggStep +** Insert (record into eph-table) +** sqlite3WhereEnd() +** AggFinal (xFinalize) +** Gosub addrGosub +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +** +** As above, except take no action for a "new peer". Invoke +** the sub-routine once only for each partition. +** +** RANGE BETWEEN CURRENT ROW AND CURRENT ROW +** +** As above, except that the "new peer" condition is handled in the +** same way as "new partition" (so there is no "else if" block). +** +** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** As above, except assume every row is a "new peer". +*/ +static void windowCodeDefaultStep( + Parse *pParse, + Select *p, + WhereInfo *pWInfo, + int regGosub, + int addrGosub +){ + Window *pMWin = p->pWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int k; + int iSubCsr = p->pSrc->a[0].iCursor; + int nSub = p->pSrc->a[0].pTab->nCol; + int reg = pParse->nMem+1; + int regRecord = reg+nSub; + int regRowid = regRecord+1; + int addr; + ExprList *pPart = pMWin->pPartition; + ExprList *pOrderBy = pMWin->pOrderBy; + + assert( pMWin->eType==TK_RANGE + || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT) + ); + + assert( (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT) + || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_UNBOUNDED) + || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_CURRENT) + || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED && !pOrderBy) + ); + + if( pMWin->eEnd==TK_UNBOUNDED ){ + pOrderBy = 0; + } + + pParse->nMem += nSub + 2; + + /* Load the individual column values of the row returned by + ** the sub-select into an array of registers. */ + for(k=0; knExpr : 0); + int addrGoto = 0; + int addrJump = 0; + int nPeer = (pOrderBy ? pOrderBy->nExpr : 0); + + if( pPart ){ + int regNewPart = reg + pMWin->nBufferCol; + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pPart, 0, 0); + addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPart, pMWin->regPart,nPart); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + addrJump = sqlite3VdbeAddOp3(v, OP_Jump, addr+2, 0, addr+2); + VdbeCoverageEqNe(v); + windowAggFinal(pParse, pMWin, 1); + if( pOrderBy ){ + addrGoto = sqlite3VdbeAddOp0(v, OP_Goto); + } + } + + if( pOrderBy ){ + int regNewPeer = reg + pMWin->nBufferCol + nPart; + int regPeer = pMWin->regPart + nPart; + + if( addrJump ) sqlite3VdbeJumpHere(v, addrJump); + if( pMWin->eType==TK_RANGE ){ + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOrderBy, 0, 0); + addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPeer, regPeer, nPeer); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + addrJump = sqlite3VdbeAddOp3(v, OP_Jump, addr+2, 0, addr+2); + VdbeCoverage(v); + }else{ + addrJump = 0; + } + windowAggFinal(pParse, pMWin, pMWin->eStart==TK_CURRENT); + if( addrGoto ) sqlite3VdbeJumpHere(v, addrGoto); + } + + sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr,sqlite3VdbeCurrentAddr(v)+3); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub); + sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)-1); + VdbeCoverage(v); + + sqlite3VdbeAddOp1(v, OP_ResetSorter, pMWin->iEphCsr); + sqlite3VdbeAddOp3( + v, OP_Copy, reg+pMWin->nBufferCol, pMWin->regPart, nPart+nPeer-1 + ); + + if( addrJump ) sqlite3VdbeJumpHere(v, addrJump); + } + + /* Invoke step function for window functions */ + windowAggStep(pParse, pMWin, -1, 0, reg, 0); + + /* Buffer the current row in the ephemeral table. */ + if( pMWin->nBufferCol>0 ){ + sqlite3VdbeAddOp3(v, OP_MakeRecord, reg, pMWin->nBufferCol, regRecord); + }else{ + sqlite3VdbeAddOp2(v, OP_Blob, 0, regRecord); + sqlite3VdbeAppendP4(v, (void*)"", 0); + } + sqlite3VdbeAddOp2(v, OP_NewRowid, pMWin->iEphCsr, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, pMWin->iEphCsr, regRecord, regRowid); + + /* End the database scan loop. */ + sqlite3WhereEnd(pWInfo); + + windowAggFinal(pParse, pMWin, 1); + sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr,sqlite3VdbeCurrentAddr(v)+3); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub); + sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)-1); + VdbeCoverage(v); +} + +/* +** Allocate and return a duplicate of the Window object indicated by the +** third argument. Set the Window.pOwner field of the new object to +** pOwner. +*/ +Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p){ + Window *pNew = 0; + if( p ){ + pNew = sqlite3DbMallocZero(db, sizeof(Window)); + if( pNew ){ + pNew->zName = sqlite3DbStrDup(db, p->zName); + pNew->pFilter = sqlite3ExprDup(db, p->pFilter, 0); + pNew->pPartition = sqlite3ExprListDup(db, p->pPartition, 0); + pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, 0); + pNew->eType = p->eType; + pNew->eEnd = p->eEnd; + pNew->eStart = p->eStart; + pNew->pStart = sqlite3ExprDup(db, p->pStart, 0); + pNew->pEnd = sqlite3ExprDup(db, p->pEnd, 0); + pNew->pOwner = pOwner; + } + } + return pNew; +} + +/* +** Return a copy of the linked list of Window objects passed as the +** second argument. +*/ +Window *sqlite3WindowListDup(sqlite3 *db, Window *p){ + Window *pWin; + Window *pRet = 0; + Window **pp = &pRet; + + for(pWin=p; pWin; pWin=pWin->pNextWin){ + *pp = sqlite3WindowDup(db, 0, pWin); + if( *pp==0 ) break; + pp = &((*pp)->pNextWin); + } + + return pRet; +} + +/* +** sqlite3WhereBegin() has already been called for the SELECT statement +** passed as the second argument when this function is invoked. It generates +** code to populate the Window.regResult register for each window function and +** invoke the sub-routine at instruction addrGosub once for each row. +** This function calls sqlite3WhereEnd() before returning. +*/ +void sqlite3WindowCodeStep( + Parse *pParse, /* Parse context */ + Select *p, /* Rewritten SELECT statement */ + WhereInfo *pWInfo, /* Context returned by sqlite3WhereBegin() */ + int regGosub, /* Register for OP_Gosub */ + int addrGosub /* OP_Gosub here to return each row */ +){ + Window *pMWin = p->pWin; + + /* There are three different functions that may be used to do the work + ** of this one, depending on the window frame and the specific built-in + ** window functions used (if any). + ** + ** windowCodeRowExprStep() handles all "ROWS" window frames, except for: + ** + ** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ** + ** The exception is because windowCodeRowExprStep() implements all window + ** frame types by caching the entire partition in a temp table, and + ** "ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW" is easy enough to + ** implement without such a cache. + ** + ** windowCodeCacheStep() is used for: + ** + ** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ** + ** It is also used for anything not handled by windowCodeRowExprStep() + ** that invokes a built-in window function that requires the entire + ** partition to be cached in a temp table before any rows are returned + ** (e.g. nth_value() or percent_rank()). + ** + ** Finally, assuming there is no built-in window function that requires + ** the partition to be cached, windowCodeDefaultStep() is used for: + ** + ** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ** RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ** RANGE BETWEEN CURRENT ROW AND CURRENT ROW + ** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ** + ** windowCodeDefaultStep() is the only one of the three functions that + ** does not cache each partition in a temp table before beginning to + ** return rows. + */ + if( pMWin->eType==TK_ROWS + && (pMWin->eStart!=TK_UNBOUNDED||pMWin->eEnd!=TK_CURRENT||!pMWin->pOrderBy) + ){ + VdbeModuleComment((pParse->pVdbe, "Begin RowExprStep()")); + windowCodeRowExprStep(pParse, p, pWInfo, regGosub, addrGosub); + }else{ + Window *pWin; + int bCache = 0; /* True to use CacheStep() */ + + if( pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED ){ + bCache = 1; + }else{ + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pFunc; + if( (pFunc->funcFlags & SQLITE_FUNC_WINDOW_SIZE) + || (pFunc->zName==nth_valueName) + || (pFunc->zName==first_valueName) + || (pFunc->zName==leadName) + || (pFunc->zName==lagName) + ){ + bCache = 1; + break; + } + } + } + + /* Otherwise, call windowCodeDefaultStep(). */ + if( bCache ){ + VdbeModuleComment((pParse->pVdbe, "Begin CacheStep()")); + windowCodeCacheStep(pParse, p, pWInfo, regGosub, addrGosub); + }else{ + VdbeModuleComment((pParse->pVdbe, "Begin DefaultStep()")); + windowCodeDefaultStep(pParse, p, pWInfo, regGosub, addrGosub); + } + } +} + +#endif /* SQLITE_OMIT_WINDOWFUNC */ diff -Nru lxd-3.0.2/dist/sqlite/test/aggnested.test lxd-3.0.3/dist/sqlite/test/aggnested.test --- lxd-3.0.2/dist/sqlite/test/aggnested.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/aggnested.test 2018-11-22 20:54:16.000000000 +0000 @@ -65,7 +65,7 @@ t1.* FROM t1; } -} {A,B,B 3 33 333 3333} +} {A,B,B 1 11 111 1111} db2 close ##################### Test cases for ticket [bfbf38e5e9956ac69f] ############ diff -Nru lxd-3.0.2/dist/sqlite/test/all.test lxd-3.0.3/dist/sqlite/test/all.test --- lxd-3.0.2/dist/sqlite/test/all.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/all.test 2018-11-22 20:54:16.000000000 +0000 @@ -16,6 +16,7 @@ run_test_suite full +ifcapable rbu { run_test_suite rbu } run_test_suite no_optimization run_test_suite memsubsys1 run_test_suite memsubsys2 diff -Nru lxd-3.0.2/dist/sqlite/test/alter4.test lxd-3.0.3/dist/sqlite/test/alter4.test --- lxd-3.0.2/dist/sqlite/test/alter4.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/alter4.test 2018-11-22 20:54:16.000000000 +0000 @@ -394,4 +394,32 @@ } } {ok} +reset_db +do_execsql_test alter4-11.0 { + CREATE TABLE t1(c INTEGER PRIMARY KEY, d); + PRAGMA foreign_keys = on; + ALTER TABLE t1 ADD COLUMN e; +} + +do_execsql_test alter4-11.1 { + ALTER TABLE t1 ADD COLUMN f REFERENCES t1; +} + +do_catchsql_test alter4-11.2 { + ALTER TABLE t1 ADD COLUMN g REFERENCES t1 DEFAULT 4; +} {1 {Cannot add a REFERENCES column with non-NULL default value}} + +do_catchsql_test alter4-11.3 { + ALTER TABLE t2 ADD COLUMN g; +} {1 {no such table: t2}} + +ifcapable fts5 { + do_execsql_test alter4-11.4 { + CREATE VIRTUAL TABLE fff USING fts5(f); + } + do_catchsql_test alter4-11.2 { + ALTER TABLE fff ADD COLUMN g; + } {1 {virtual tables may not be altered}} +} + finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/alterauth.test lxd-3.0.3/dist/sqlite/test/alterauth.test --- lxd-3.0.2/dist/sqlite/test/alterauth.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/alterauth.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,72 @@ +# 2018 September 2 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#************************************************************************* +# + +set testdir [file dirname $argv0] + +source $testdir/tester.tcl + +# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. +ifcapable !altertable { + finish_test + return +} +set testprefix alterauth + +set ::auth [list] +proc xAuth {type args} { + if {$type == "SQLITE_ALTER_TABLE"} { + lappend ::auth [concat $type [lrange $args 0 3]] + } + return SQLITE_OK +} +db auth xAuth + +do_execsql_test 1.0 { CREATE TABLE t1(a, b, c); } + +do_test 1.1 { + set ::auth [list] + execsql { ALTER TABLE t1 RENAME TO t2 } + set ::auth +} {{SQLITE_ALTER_TABLE main t1 {} {}}} + +do_test 1.2 { + set ::auth [list] + execsql { ALTER TABLE t2 RENAME c TO ccc } + set ::auth +} {{SQLITE_ALTER_TABLE main t2 {} {}}} + +do_test 1.3 { + set ::auth [list] + execsql { ALTER TABLE t2 ADD COLUMN d } + set ::auth +} {{SQLITE_ALTER_TABLE main t2 {} {}}} + +proc xAuth {type args} { + if {$type == "SQLITE_ALTER_TABLE"} { + return SQLITE_DENY + } + return SQLITE_OK +} + +do_test 2.1 { + catchsql { ALTER TABLE t2 RENAME TO t3 } +} {1 {not authorized}} + +do_test 2.2 { + catchsql { ALTER TABLE t2 RENAME d TO ddd } +} {1 {not authorized}} + +do_test 2.3 { + catchsql { ALTER TABLE t2 ADD COLUMN e } +} {1 {not authorized}} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/altercol.test lxd-3.0.3/dist/sqlite/test/altercol.test --- lxd-3.0.2/dist/sqlite/test/altercol.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/altercol.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,772 @@ +# 2009 February 2 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#************************************************************************* +# This file implements regression tests for SQLite library. The +# focus of this script is testing that SQLite can handle a subtle +# file format change that may be used in the future to implement +# "ALTER TABLE ... RENAME COLUMN ... TO". +# +# $Id: alter4.test,v 1.1 2009/02/02 18:03:22 drh Exp $ +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix altercol + +# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. +ifcapable !altertable { + finish_test + return +} + +# Drop all the tables and views in the 'main' database of database connect +# [db]. Sort the objects by name before dropping them. +# +proc drop_all_tables_and_views {db} { + set SQL { + SELECT name, type FROM sqlite_master + WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%' + ORDER BY 1 + } + foreach {z t} [db eval $SQL] { + db eval "DROP $t $z" + } +} + +foreach {tn before after} { + 1 {CREATE TABLE t1(a INTEGER, b TEXT, c BLOB)} + {CREATE TABLE t1(a INTEGER, d TEXT, c BLOB)} + + 2 {CREATE TABLE t1(a INTEGER, x TEXT, "b" BLOB)} + {CREATE TABLE t1(a INTEGER, x TEXT, "d" BLOB)} + + 3 {CREATE TABLE t1(a INTEGER, b TEXT, c BLOB, CHECK(b!=''))} + {CREATE TABLE t1(a INTEGER, d TEXT, c BLOB, CHECK(d!=''))} + + 4 {CREATE TABLE t1(a INTEGER, b TEXT, c BLOB, CHECK(t1.b!=''))} + {CREATE TABLE t1(a INTEGER, d TEXT, c BLOB, CHECK(t1.d!=''))} + + 5 {CREATE TABLE t1(a INTEGER, b TEXT, c BLOB, CHECK( coalesce(b,c) ))} + {CREATE TABLE t1(a INTEGER, d TEXT, c BLOB, CHECK( coalesce(d,c) ))} + + 6 {CREATE TABLE t1(a INTEGER, "b"TEXT, c BLOB, CHECK( coalesce(b,c) ))} + {CREATE TABLE t1(a INTEGER, "d"TEXT, c BLOB, CHECK( coalesce(d,c) ))} + + 7 {CREATE TABLE t1(a INTEGER, b TEXT, c BLOB, PRIMARY KEY(b, c))} + {CREATE TABLE t1(a INTEGER, d TEXT, c BLOB, PRIMARY KEY(d, c))} + + 8 {CREATE TABLE t1(a INTEGER, b TEXT PRIMARY KEY, c BLOB)} + {CREATE TABLE t1(a INTEGER, d TEXT PRIMARY KEY, c BLOB)} + + 9 {CREATE TABLE t1(a, b TEXT, c, PRIMARY KEY(a, b), UNIQUE("B"))} + {CREATE TABLE t1(a, d TEXT, c, PRIMARY KEY(a, d), UNIQUE("d"))} + + 10 {CREATE TABLE t1(a, b, c); CREATE INDEX t1i ON t1(a, c)} + {{CREATE TABLE t1(a, d, c)} {CREATE INDEX t1i ON t1(a, c)}} + + 11 {CREATE TABLE t1(a, b, c); CREATE INDEX t1i ON t1(b, c)} + {{CREATE TABLE t1(a, d, c)} {CREATE INDEX t1i ON t1(d, c)}} + + 12 {CREATE TABLE t1(a, b, c); CREATE INDEX t1i ON t1(b+b+b+b, c) WHERE b>0} + {{CREATE TABLE t1(a, d, c)} {CREATE INDEX t1i ON t1(d+d+d+d, c) WHERE d>0}} + + 13 {CREATE TABLE t1(a, b, c, FOREIGN KEY (b) REFERENCES t2)} + {CREATE TABLE t1(a, d, c, FOREIGN KEY (d) REFERENCES t2)} + + 14 {CREATE TABLE t1(a INTEGER, b TEXT, c BLOB, PRIMARY KEY(b))} + {CREATE TABLE t1(a INTEGER, d TEXT, c BLOB, PRIMARY KEY(d))} + + 15 {CREATE TABLE t1(a INTEGER, b INTEGER, c BLOB, PRIMARY KEY(b))} + {CREATE TABLE t1(a INTEGER, d INTEGER, c BLOB, PRIMARY KEY(d))} + + 16 {CREATE TABLE t1(a INTEGER, b INTEGER PRIMARY KEY, c BLOB)} + {CREATE TABLE t1(a INTEGER, d INTEGER PRIMARY KEY, c BLOB)} + + 17 {CREATE TABLE t1(a INTEGER, b INTEGER PRIMARY KEY, c BLOB, FOREIGN KEY (b) REFERENCES t2)} + {CREATE TABLE t1(a INTEGER, d INTEGER PRIMARY KEY, c BLOB, FOREIGN KEY (d) REFERENCES t2)} + +} { + reset_db + do_execsql_test 1.$tn.0 $before + + do_execsql_test 1.$tn.1 { + INSERT INTO t1 VALUES(1, 2, 3); + } + + do_execsql_test 1.$tn.2 { + ALTER TABLE t1 RENAME COLUMN b TO d; + } + + do_execsql_test 1.$tn.3 { + SELECT * FROM t1; + } {1 2 3} + + if {[string first INDEX $before]>0} { + set res $after + } else { + set res [list $after] + } + do_execsql_test 1.$tn.4 { + SELECT sql FROM sqlite_master WHERE tbl_name='t1' AND sql!='' + } $res +} + +#------------------------------------------------------------------------- +# +do_execsql_test 2.0 { + CREATE TABLE t3(a, b, c, d, e, f, g, h, i, j, k, l, m, FOREIGN KEY (b, c, d, e, f, g, h, i, j, k, l, m) REFERENCES t4); +} + +sqlite3 db2 test.db +do_execsql_test -db db2 2.1 { SELECT b FROM t3 } + +do_execsql_test 2.2 { + ALTER TABLE t3 RENAME b TO biglongname; + SELECT sql FROM sqlite_master WHERE name='t3'; +} {{CREATE TABLE t3(a, biglongname, c, d, e, f, g, h, i, j, k, l, m, FOREIGN KEY (biglongname, c, d, e, f, g, h, i, j, k, l, m) REFERENCES t4)}} + +do_execsql_test -db db2 2.3 { SELECT biglongname FROM t3 } + +#------------------------------------------------------------------------- +# +do_execsql_test 3.0 { + CREATE TABLE t4(x, y, z); + CREATE TRIGGER ttt AFTER INSERT ON t4 WHEN new.y<0 BEGIN + SELECT x, y, z FROM t4; + DELETE FROM t4 WHERE y=32; + UPDATE t4 SET x=y+1, y=0 WHERE y=32; + INSERT INTO t4(x, y, z) SELECT 4, 5, 6 WHERE 0; + END; + INSERT INTO t4 VALUES(3, 2, 1); +} + +do_execsql_test 3.1 { + ALTER TABLE t4 RENAME y TO abc; + SELECT sql FROM sqlite_master WHERE name='t4'; +} {{CREATE TABLE t4(x, abc, z)}} + +do_execsql_test 3.2 { + SELECT * FROM t4; +} {3 2 1} + +do_execsql_test 3.3 { INSERT INTO t4 VALUES(6, 5, 4); } {} + +do_execsql_test 3.4 { SELECT sql FROM sqlite_master WHERE type='trigger' } { +{CREATE TRIGGER ttt AFTER INSERT ON t4 WHEN new.abc<0 BEGIN + SELECT x, abc, z FROM t4; + DELETE FROM t4 WHERE abc=32; + UPDATE t4 SET x=abc+1, abc=0 WHERE abc=32; + INSERT INTO t4(x, abc, z) SELECT 4, 5, 6 WHERE 0; + END} +} + +#------------------------------------------------------------------------- +# +do_execsql_test 4.0 { + CREATE TABLE c1(a, b, FOREIGN KEY (a, b) REFERENCES p1(c, d)); + CREATE TABLE p1(c, d, PRIMARY KEY(c, d)); + PRAGMA foreign_keys = 1; + INSERT INTO p1 VALUES(1, 2); + INSERT INTO p1 VALUES(3, 4); +} + +do_execsql_test 4.1 { + ALTER TABLE p1 RENAME d TO "silly name"; + SELECT sql FROM sqlite_master WHERE name IN ('c1', 'p1'); +} { + {CREATE TABLE c1(a, b, FOREIGN KEY (a, b) REFERENCES p1(c, "silly name"))} + {CREATE TABLE p1(c, "silly name", PRIMARY KEY(c, "silly name"))} +} + +do_execsql_test 4.2 { INSERT INTO c1 VALUES(1, 2); } + +do_execsql_test 4.3 { + CREATE TABLE c2(a, b, FOREIGN KEY (a, b) REFERENCES p1); +} + +do_execsql_test 4.4 { + ALTER TABLE p1 RENAME "silly name" TO reasonable; + SELECT sql FROM sqlite_master WHERE name IN ('c1', 'c2', 'p1'); +} { + {CREATE TABLE c1(a, b, FOREIGN KEY (a, b) REFERENCES p1(c, "reasonable"))} + {CREATE TABLE p1(c, "reasonable", PRIMARY KEY(c, "reasonable"))} + {CREATE TABLE c2(a, b, FOREIGN KEY (a, b) REFERENCES p1)} +} + +#------------------------------------------------------------------------- + +do_execsql_test 5.0 { + CREATE TABLE t5(a, b, c); + CREATE INDEX t5a ON t5(a); + INSERT INTO t5 VALUES(1, 2, 3), (4, 5, 6); + ANALYZE; +} + +do_execsql_test 5.1 { + ALTER TABLE t5 RENAME b TO big; + SELECT big FROM t5; +} {2 5} + +do_catchsql_test 6.1 { + ALTER TABLE sqlite_stat1 RENAME tbl TO thetable; +} {1 {table sqlite_stat1 may not be altered}} + +#------------------------------------------------------------------------- +# +do_execsql_test 6.0 { + CREATE TABLE blob( + rid INTEGER PRIMARY KEY, + rcvid INTEGER, + size INTEGER, + uuid TEXT UNIQUE NOT NULL, + content BLOB, + CHECK( length(uuid)>=40 AND rid>0 ) + ); +} + +do_execsql_test 6.1 { + ALTER TABLE "blob" RENAME COLUMN "rid" TO "a1"; +} + +do_catchsql_test 6.2 { + ALTER TABLE "blob" RENAME COLUMN "a1" TO [where]; +} {0 {}} + +do_execsql_test 6.3 { + SELECT "where" FROM blob; +} {} + +#------------------------------------------------------------------------- +# Triggers. +# +db close +db2 close +reset_db +do_execsql_test 7.0 { + CREATE TABLE c(x); + INSERT INTO c VALUES(0); + CREATE TABLE t6("col a", "col b", "col c"); + CREATE TRIGGER zzz AFTER UPDATE OF "col a", "col c" ON t6 BEGIN + UPDATE c SET x=x+1; + END; +} + +do_execsql_test 7.1.1 { + INSERT INTO t6 VALUES(0, 0, 0); + UPDATE t6 SET "col c" = 1; + SELECT * FROM c; +} {1} + +do_execsql_test 7.1.2 { + ALTER TABLE t6 RENAME "col c" TO "col 3"; +} + +do_execsql_test 7.1.3 { + UPDATE t6 SET "col 3" = 0; + SELECT * FROM c; +} {2} + +#------------------------------------------------------------------------- +# Views. +# +reset_db +do_execsql_test 8.0 { + CREATE TABLE a1(x INTEGER, y TEXT, z BLOB, PRIMARY KEY(x)); + CREATE TABLE a2(a, b, c); + CREATE VIEW v1 AS SELECT x, y, z FROM a1; +} + +do_execsql_test 8.1 { + ALTER TABLE a1 RENAME y TO yyy; + SELECT sql FROM sqlite_master WHERE type='view'; +} {{CREATE VIEW v1 AS SELECT x, yyy, z FROM a1}} + +do_execsql_test 8.2.1 { + DROP VIEW v1; + CREATE VIEW v2 AS SELECT x, x+x, a, a+a FROM a1, a2; +} {} +do_execsql_test 8.2.2 { + ALTER TABLE a1 RENAME x TO xxx; +} +do_execsql_test 8.2.3 { + SELECT sql FROM sqlite_master WHERE type='view'; +} {{CREATE VIEW v2 AS SELECT xxx, xxx+xxx, a, a+a FROM a1, a2}} + +do_execsql_test 8.3.1 { + DROP TABLE a2; + DROP VIEW v2; + CREATE TABLE a2(a INTEGER PRIMARY KEY, b, c); + CREATE VIEW v2 AS SELECT xxx, xxx+xxx, a, a+a FROM a1, a2; +} {} +do_execsql_test 8.3.2 { + ALTER TABLE a1 RENAME xxx TO x; +} +do_execsql_test 8.3.3 { + SELECT sql FROM sqlite_master WHERE type='view'; +} {{CREATE VIEW v2 AS SELECT x, x+x, a, a+a FROM a1, a2}} + +do_execsql_test 8.4.0 { + CREATE TABLE b1(a, b, c); + CREATE TABLE b2(x, y, z); +} + +do_execsql_test 8.4.1 { + CREATE VIEW vvv AS SELECT c+c || coalesce(c, c) FROM b1, b2 WHERE x=c GROUP BY c HAVING c>0; + ALTER TABLE b1 RENAME c TO "a;b"; + SELECT sql FROM sqlite_master WHERE name='vvv'; +} {{CREATE VIEW vvv AS SELECT "a;b"+"a;b" || coalesce("a;b", "a;b") FROM b1, b2 WHERE x="a;b" GROUP BY "a;b" HAVING "a;b">0}} + +do_execsql_test 8.4.2 { + CREATE VIEW www AS SELECT b FROM b1 UNION ALL SELECT y FROM b2; + ALTER TABLE b1 RENAME b TO bbb; + SELECT sql FROM sqlite_master WHERE name='www'; +} {{CREATE VIEW www AS SELECT bbb FROM b1 UNION ALL SELECT y FROM b2}} + +db collate nocase {string compare} + +do_execsql_test 8.4.3 { + CREATE VIEW xxx AS SELECT a FROM b1 UNION SELECT x FROM b2 ORDER BY 1 COLLATE nocase; +} + +do_execsql_test 8.4.4 { + ALTER TABLE b2 RENAME x TO hello; + SELECT sql FROM sqlite_master WHERE name='xxx'; +} {{CREATE VIEW xxx AS SELECT a FROM b1 UNION SELECT hello FROM b2 ORDER BY 1 COLLATE nocase}} + +do_catchsql_test 8.4.5 { + CREATE VIEW zzz AS SELECT george, ringo FROM b1; + ALTER TABLE b1 RENAME a TO aaa; +} {1 {error in view zzz: no such column: george}} + +#------------------------------------------------------------------------- +# More triggers. +# +proc do_rename_column_test {tn old new lSchema} { + for {set i 0} {$i < 2} {incr i} { + drop_all_tables_and_views db + + set lSorted [list] + foreach sql $lSchema { + execsql $sql + lappend lSorted [string trim $sql] + } + set lSorted [lsort $lSorted] + + do_execsql_test $tn.$i.1 { + SELECT sql FROM sqlite_master WHERE sql!='' ORDER BY 1 + } $lSorted + + if {$i==1} { + db close + sqlite3 db test.db + } + + do_execsql_test $tn.$i.2 "ALTER TABLE t1 RENAME $old TO $new" + + do_execsql_test $tn.$i.3 { + SELECT sql FROM sqlite_master ORDER BY 1 + } [string map [list $old $new] $lSorted] + } +} + +foreach {tn old new lSchema} { + 1 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_) } + { CREATE TRIGGER AFTER INSERT ON t1 BEGIN + SELECT _x_ FROM t1; + END } + } + + 2 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_) } + { CREATE TABLE t2(c, d, e) } + { CREATE TRIGGER ttt AFTER INSERT ON t2 BEGIN + SELECT _x_ FROM t1; + END } + } + + 3 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_ INTEGER, PRIMARY KEY(_x_), CHECK(_x_>0)) } + { CREATE TABLE t2(c, d, e) } + { CREATE TRIGGER ttt AFTER UPDATE ON t1 BEGIN + INSERT INTO t2 VALUES(new.a, new.b, new._x_); + END } + } + + 4 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_ INTEGER, PRIMARY KEY(_x_), CHECK(_x_>0)) } + { CREATE TRIGGER ttt AFTER UPDATE ON t1 BEGIN + INSERT INTO t1 VALUES(new.a, new.b, new._x_) + ON CONFLICT (_x_) WHERE _x_>10 DO UPDATE SET _x_ = _x_+1; + END } + } + + 4 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_ INTEGER, PRIMARY KEY(_x_), CHECK(_x_>0)) } + { CREATE TRIGGER ttt AFTER UPDATE ON t1 BEGIN + INSERT INTO t1 VALUES(new.a, new.b, new._x_) + ON CONFLICT (_x_) WHERE _x_>10 DO NOTHING; + END } + } +} { + do_rename_column_test 9.$tn $old $new $lSchema +} + +#------------------------------------------------------------------------- +# Test that views can be edited even if there are missing collation +# sequences or user defined functions. +# +reset_db + +ifcapable vtab { + foreach {tn old new lSchema} { + 1 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_) } + { CREATE VIEW s1 AS SELECT a, b, _x_ FROM t1 WHERE _x_='abc' COLLATE xyz } + } + + 2 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_) } + { CREATE VIEW v1 AS SELECT a, b, _x_ FROM t1 WHERE scalar(_x_) } + } + + 3 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_) } + { CREATE VIEW v1 AS SELECT a, b, _x_ FROM t1 WHERE _x_ = unicode(1, 2, 3) } + } + + 4 _x_ _xxx_ { + { CREATE TABLE t1(a, b, _x_) } + { CREATE VIRTUAL TABLE e1 USING echo(t1) } + } + } { + register_echo_module db + do_rename_column_test 10.$tn $old $new $lSchema + } + + #-------------------------------------------------------------------------- + # Test that if a view or trigger refers to a virtual table for which the + # module is not available, RENAME COLUMN cannot proceed. + # + reset_db + register_echo_module db + do_execsql_test 11.0 { + CREATE TABLE x1(a, b, c); + CREATE VIRTUAL TABLE e1 USING echo(x1); + } + db close + sqlite3 db test.db + + do_execsql_test 11.1 { + ALTER TABLE x1 RENAME b TO bbb; + SELECT sql FROM sqlite_master; + } { {CREATE TABLE x1(a, bbb, c)} {CREATE VIRTUAL TABLE e1 USING echo(x1)} } + + do_execsql_test 11.2 { + CREATE VIEW v1 AS SELECT e1.*, x1.c FROM e1, x1; + } + + do_catchsql_test 11.3 { + ALTER TABLE x1 RENAME c TO ccc; + } {1 {error in view v1: no such module: echo}} +} + +#------------------------------------------------------------------------- +# Test some error conditions: +# +# 1. Renaming a column of a system table, +# 2. Renaming a column of a VIEW, +# 3. Renaming a column of a virtual table. +# 4. Renaming a column that does not exist. +# 5. Renaming a column of a table that does not exist. +# +reset_db +do_execsql_test 12.1.1 { + CREATE TABLE t1(a, b); + CREATE INDEX t1a ON t1(a); + INSERT INTO t1 VALUES(1, 1), (2, 2), (3, 4); + ANALYZE; +} +do_catchsql_test 12.1.2 { + ALTER TABLE sqlite_stat1 RENAME idx TO theindex; +} {1 {table sqlite_stat1 may not be altered}} +do_execsql_test 12.1.3 { + SELECT sql FROM sqlite_master WHERE tbl_name = 'sqlite_stat1' +} {{CREATE TABLE sqlite_stat1(tbl,idx,stat)}} + +do_execsql_test 12.2.1 { + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE VIEW v2(c, d) AS SELECT * FROM t1; +} +do_catchsql_test 12.2.2 { + ALTER TABLE v1 RENAME a TO z; +} {1 {cannot rename columns of view "v1"}} +do_catchsql_test 12.2.3 { + ALTER TABLE v2 RENAME c TO y; +} {1 {cannot rename columns of view "v2"}} + +ifcapable fts5 { + do_execsql_test 12.3.1 { + CREATE VIRTUAL TABLE ft USING fts5(a, b, c); + } + do_catchsql_test 12.3.2 { + ALTER TABLE ft RENAME a TO z; + } {1 {cannot rename columns of virtual table "ft"}} +} + +do_execsql_test 12.4.1 { + CREATE TABLE t2(x, y, z); +} +do_catchsql_test 12.4.2 { + ALTER TABLE t2 RENAME COLUMN a TO b; +} {1 {no such column: "a"}} + +do_catchsql_test 12.5.1 { + ALTER TABLE t3 RENAME COLUMN a TO b; +} {1 {no such table: t3}} + +#------------------------------------------------------------------------- +# Test the effect of some parse/resolve errors. +# +reset_db +do_execsql_test 13.1.1 { + CREATE TABLE x1(i INTEGER, t TEXT UNIQUE); + CREATE TRIGGER tr1 AFTER INSERT ON x1 BEGIN + SELECT * FROM nosuchtable; + END; +} + +do_catchsql_test 13.1.2 { + ALTER TABLE x1 RENAME COLUMN t TO ttt; +} {1 {error in trigger tr1: no such table: main.nosuchtable}} + +do_execsql_test 13.1.3 { + DROP TRIGGER tr1; + CREATE INDEX x1i ON x1(i); + SELECT sql FROM sqlite_master WHERE name='x1i'; +} {{CREATE INDEX x1i ON x1(i)}} + +do_execsql_test 13.1.4 { + PRAGMA writable_schema = 1; + UPDATE sqlite_master SET sql = 'CREATE INDEX x1i ON x1(j)' WHERE name='x1i'; +} {} + +do_catchsql_test 13.1.5 { + ALTER TABLE x1 RENAME COLUMN t TO ttt; +} {1 {error in index x1i: no such column: j}} + +do_execsql_test 13.1.6 { + UPDATE sqlite_master SET sql = '' WHERE name='x1i'; +} {} + +do_catchsql_test 13.1.7 { + ALTER TABLE x1 RENAME COLUMN t TO ttt; +} {1 {database disk image is malformed}} + +do_execsql_test 13.1.8 { + DELETE FROM sqlite_master WHERE name = 'x1i'; +} + +do_execsql_test 13.2.0 { + CREATE TABLE data(x UNIQUE, y, z); +} +foreach {tn trigger error} { + 1 { + CREATE TRIGGER tr1 AFTER INSERT ON x1 BEGIN + UPDATE data SET x=x+1 WHERE zzz=new.i; + END; + } {no such column: zzz} + + 2 { + CREATE TRIGGER tr1 AFTER INSERT ON x1 BEGIN + INSERT INTO data(x, y) VALUES(new.i, new.t, 1) + ON CONFLICT (x) DO UPDATE SET z=zz+1; + END; + } {no such column: zz} + + 3 { + CREATE TRIGGER tr1 AFTER INSERT ON x1 BEGIN + INSERT INTO x1(i, t) VALUES(new.i+1, new.t||'1') + ON CONFLICT (tttttt) DO UPDATE SET t=i+1; + END; + } {no such column: tttttt} + + 4 { + CREATE TRIGGER tr1 AFTER INSERT ON x1 BEGIN + INSERT INTO nosuchtable VALUES(new.i, new.t); + END; + } {no such table: main.nosuchtable} +} { + do_execsql_test 13.2.$tn.1 " + DROP TRIGGER IF EXISTS tr1; + $trigger + " + + do_catchsql_test 13.2.$tn.2 { + ALTER TABLE x1 RENAME COLUMN t TO ttt; + } "1 {error in trigger tr1: $error}" +} + +#------------------------------------------------------------------------- +# Passing invalid parameters directly to sqlite_rename_column(). +# +do_execsql_test 14.1 { + CREATE TABLE ddd(sql, type, object, db, tbl, icol, znew, bquote); + INSERT INTO ddd VALUES( + 'CREATE TABLE x1(i INTEGER, t TEXT)', + 'table', 'x1', 'main', 'x1', -1, 'zzz', 0 + ), ( + 'CREATE TABLE x1(i INTEGER, t TEXT)', + 'table', 'x1', 'main', 'x1', 2, 'zzz', 0 + ), ( + 'CREATE TABLE x1(i INTEGER, t TEXT)', + 'table', 'x1', 'main', 'notable', 0, 'zzz', 0 + ), ( + 'CREATE TABLE x1(i INTEGER, t TEXT)', + 'table', 'x1', 'main', 'ddd', -1, 'zzz', 0 + ); +} {} + +do_execsql_test 14.2 { + SELECT + sqlite_rename_column(sql, type, object, db, tbl, icol, znew, bquote, 0) + FROM ddd; +} {{} {} {} {}} + +#------------------------------------------------------------------------- +# +reset_db +do_execsql_test 15.0 { + CREATE TABLE xxx(a, b, c); + SELECT a AS d FROM xxx WHERE d=0; +} + +do_execsql_test 15.1 { + CREATE VIEW vvv AS SELECT a AS d FROM xxx WHERE d=0; + ALTER TABLE xxx RENAME a TO xyz; +} + +do_execsql_test 15.2 { + SELECT sql FROM sqlite_master WHERE type='view'; +} {{CREATE VIEW vvv AS SELECT xyz AS d FROM xxx WHERE d=0}} + +#------------------------------------------------------------------------- +# +do_execsql_test 16.1.0 { + CREATE TABLE t1(a,b,c); + CREATE TABLE t2(d,e,f); + INSERT INTO t1 VALUES(1,2,3); + INSERT INTO t2 VALUES(4,5,6); + CREATE VIEW v4 AS SELECT a, d FROM t1, t2; + SELECT * FROM v4; +} {1 4} + +do_catchsql_test 16.1.1 { + ALTER TABLE t2 RENAME d TO a; +} {1 {error in view v4 after rename: ambiguous column name: a}} + +do_execsql_test 16.1.2 { + SELECT * FROM v4; +} {1 4} + +do_execsql_test 16.1.3 { + CREATE UNIQUE INDEX t2d ON t2(d); + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(new.a, new.b, new.c) + ON CONFLICT(d) DO UPDATE SET f = excluded.f; + END; +} + +do_execsql_test 16.1.4 { + INSERT INTO t1 VALUES(4, 8, 456); + SELECT * FROM t2; +} {4 5 456} + +do_execsql_test 16.1.5 { + ALTER TABLE t2 RENAME COLUMN f TO "big f"; + INSERT INTO t1 VALUES(4, 0, 20456); + SELECT * FROM t2; +} {4 5 20456} + +do_execsql_test 16.1.6 { + ALTER TABLE t1 RENAME COLUMN c TO "big c"; + INSERT INTO t1 VALUES(4, 0, 0); + SELECT * FROM t2; +} {4 5 0} + +do_execsql_test 16.2.1 { + CREATE VIEW temp.v5 AS SELECT "big c" FROM t1; + SELECT * FROM v5; +} {3 456 20456 0} + +do_execsql_test 16.2.2 { + ALTER TABLE t1 RENAME COLUMN "big c" TO reallybigc; +} {} + +do_execsql_test 16.2.3 { + SELECT * FROM v5; +} {3 456 20456 0} + +#------------------------------------------------------------------------- +# +do_execsql_test 17.0 { + CREATE TABLE u7(x, y, z); + CREATE TRIGGER u7t AFTER INSERT ON u7 BEGIN + INSERT INTO u8 VALUES(new.x, new.y, new.z); + END; +} {} +do_catchsql_test 17.1 { + ALTER TABLE u7 RENAME x TO xxx; +} {1 {error in trigger u7t: no such table: main.u8}} + +do_execsql_test 17.2 { + CREATE TEMP TABLE uu7(x, y, z); + CREATE TRIGGER uu7t AFTER INSERT ON uu7 BEGIN + INSERT INTO u8 VALUES(new.x, new.y, new.z); + END; +} {} +do_catchsql_test 17.3 { + ALTER TABLE uu7 RENAME x TO xxx; +} {1 {error in trigger uu7t: no such table: u8}} + +reset_db +forcedelete test.db2 +do_execsql_test 18.0 { + ATTACH 'test.db2' AS aux; + CREATE TABLE t1(a); + CREATE TABLE aux.log(v); + CREATE TEMP TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO log VALUES(new.a); + END; + INSERT INTO t1 VALUES(111); + SELECT v FROM log; +} {111} + +do_execsql_test 18.1 { + ALTER TABLE t1 RENAME a TO b; +} + +reset_db +do_execsql_test 19.0 { + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + CREATE VIEW v2(e) AS SELECT coalesce(t2.c,t1.a) FROM t1, t2 WHERE t1.b=t2.d; +} + +do_execsql_test 19.1 { + ALTER TABLE t1 RENAME a TO f; + SELECT sql FROM sqlite_master WHERE name = 'v2'; +} { + {CREATE VIEW v2(e) AS SELECT coalesce(t2.c,t1.f) FROM t1, t2 WHERE t1.b=t2.d} +} + + + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/alterlegacy.test lxd-3.0.3/dist/sqlite/test/alterlegacy.test --- lxd-3.0.2/dist/sqlite/test/alterlegacy.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/alterlegacy.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,470 @@ +# 2018 September 20 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#************************************************************************* +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix alterlegacy + +# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. +ifcapable !altertable { + finish_test + return +} + +do_execsql_test 1.0 { + PRAGMA legacy_alter_table = 1; + CREATE TABLE t1(a, b, CHECK(t1.a != t1.b)); + CREATE TABLE t2(a, b); + CREATE INDEX t2expr ON t2(a) WHERE t2.b>0; +} + +do_execsql_test 1.1 { + SELECT sql FROM sqlite_master +} { + {CREATE TABLE t1(a, b, CHECK(t1.a != t1.b))} + {CREATE TABLE t2(a, b)} + {CREATE INDEX t2expr ON t2(a) WHERE t2.b>0} +} + +# Legacy behavior is to corrupt the schema in this case, as the table name in +# the CHECK constraint is incorrect after "t1" is renamed. This version is +# slightly different - it rejects the change and rolls back the transaction. +do_catchsql_test 1.2 { + ALTER TABLE t1 RENAME TO t1new; +} {1 {no such column: t1.a}} + +do_execsql_test 1.3 { + CREATE TABLE t3(c, d); + ALTER TABLE t3 RENAME TO t3new; + DROP TABLE t3new; +} + +do_execsql_test 1.4 { + SELECT sql FROM sqlite_master +} { + {CREATE TABLE t1(a, b, CHECK(t1.a != t1.b))} + {CREATE TABLE t2(a, b)} + {CREATE INDEX t2expr ON t2(a) WHERE t2.b>0} +} + + +do_catchsql_test 1.3 { + ALTER TABLE t2 RENAME TO t2new; +} {1 {no such column: t2.b}} +do_execsql_test 1.4 { + SELECT sql FROM sqlite_master +} { + {CREATE TABLE t1(a, b, CHECK(t1.a != t1.b))} + {CREATE TABLE t2(a, b)} + {CREATE INDEX t2expr ON t2(a) WHERE t2.b>0} +} + + +#------------------------------------------------------------------------- +reset_db +ifcapable vtab { + register_echo_module db + + do_execsql_test 2.0 { + PRAGMA legacy_alter_table = 1; + CREATE TABLE abc(a, b, c); + INSERT INTO abc VALUES(1, 2, 3); + CREATE VIRTUAL TABLE eee USING echo('abc'); + SELECT * FROM eee; + } {1 2 3} + + do_execsql_test 2.1 { + ALTER TABLE eee RENAME TO fff; + SELECT * FROM fff; + } {1 2 3} + + db close + sqlite3 db test.db + + do_catchsql_test 2.2 { + ALTER TABLE fff RENAME TO ggg; + } {1 {no such module: echo}} +} + +#------------------------------------------------------------------------- +reset_db + +do_execsql_test 3.0 { + PRAGMA legacy_alter_table = 1; + CREATE TABLE txx(a, b, c); + INSERT INTO txx VALUES(1, 2, 3); + CREATE VIEW vvv AS SELECT main.txx.a, txx.b, c FROM txx; + CREATE VIEW uuu AS SELECT main.one.a, one.b, c FROM txx AS one; + CREATE VIEW temp.ttt AS SELECT main.txx.a, txx.b, one.b, main.one.a FROM txx AS one, txx; +} + +do_execsql_test 3.1.1 { + SELECT * FROM vvv; +} {1 2 3} +do_execsql_test 3.1.2a { + ALTER TABLE txx RENAME TO "t xx"; +} +do_catchsql_test 3.1.2b { + SELECT * FROM vvv; +} {1 {no such table: main.txx}} +do_execsql_test 3.1.3 { + SELECT sql FROM sqlite_master WHERE name='vvv'; +} {{CREATE VIEW vvv AS SELECT main.txx.a, txx.b, c FROM txx}} + + +do_catchsql_test 3.2.1 { + SELECT * FROM uuu; +} {1 {no such table: main.txx}} +do_execsql_test 3.2.2 { + SELECT sql FROM sqlite_master WHERE name='uuu';; +} {{CREATE VIEW uuu AS SELECT main.one.a, one.b, c FROM txx AS one}} + +do_catchsql_test 3.3.1 { + SELECT * FROM ttt; +} {1 {no such table: txx}} +do_execsql_test 3.3.2 { + SELECT sql FROM sqlite_temp_master WHERE name='ttt'; +} {{CREATE VIEW ttt AS SELECT main.txx.a, txx.b, one.b, main.one.a FROM txx AS one, txx}} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 4.0 { + PRAGMA legacy_alter_table = 1; + CREATE table t1(x, y); + CREATE table t2(a, b); + + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + SELECT t1.x, * FROM t1, t2; + INSERT INTO t2 VALUES(new.x, new.y); + END; +} + +do_execsql_test 4.1 { + INSERT INTO t1 VALUES(1, 1); + ALTER TABLE t1 RENAME TO t11; +} +do_catchsql_test 4.1a { + INSERT INTO t11 VALUES(2, 2); +} {1 {no such table: main.t1}} +do_execsql_test 4.1b { + ALTER TABLE t11 RENAME TO t1; + ALTER TABLE t2 RENAME TO t22; +} +do_catchsql_test 4.1c { + INSERT INTO t1 VALUES(3, 3); +} {1 {no such table: main.t2}} + +proc squish {a} { + string trim [regsub -all {[[:space:]][[:space:]]*} $a { }] +} +db func squish squish +do_test 4.2 { + execsql { SELECT squish(sql) FROM sqlite_master WHERE name = 'tr1' } +} [list [squish { + CREATE TRIGGER tr1 AFTER INSERT ON "t1" BEGIN + SELECT t1.x, * FROM t1, t2; + INSERT INTO t2 VALUES(new.x, new.y); + END +}]] + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 5.0 { + PRAGMA legacy_alter_table = 1; + CREATE TABLE t9(a, b, c); + CREATE TABLE t10(a, b, c); + CREATE TEMP TABLE t9(a, b, c); + + CREATE TRIGGER temp.t9t AFTER INSERT ON temp.t9 BEGIN + INSERT INTO t10 VALUES(new.a, new.b, new.c); + END; + + INSERT INTO temp.t9 VALUES(1, 2, 3); + SELECT * FROM t10; +} {1 2 3} + +do_execsql_test 5.1 { + ALTER TABLE temp.t9 RENAME TO 't1234567890' +} + +do_execsql_test 5.2 { + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t2 VALUES(3, 4); + CREATE VIEW v AS SELECT one.a, one.b, t2.a, t2.b FROM t1 AS one, t2; + SELECT * FROM v; +} {1 2 3 4} + +do_execsql_test 5.3 { + ALTER TABLE t2 RENAME TO one; +} {} + +do_catchsql_test 5.4 { + SELECT * FROM v +} {1 {no such table: main.t2}} + +do_execsql_test 5.5 { + ALTER TABLE one RENAME TO t2; + DROP VIEW v; + CREATE VIEW temp.vv AS SELECT one.a, one.b, t2.a, t2.b FROM t1 AS one, t2; + SELECT * FROM vv; +} {1 2 3 4} + +do_execsql_test 5.6 { + ALTER TABLE t2 RENAME TO one; +} {} +do_catchsql_test 5.7 { + SELECT * FROM vv +} {1 {no such table: t2}} + +#------------------------------------------------------------------------- + +ifcapable vtab { + register_tcl_module db + proc tcl_command {method args} { + switch -- $method { + xConnect { + return "CREATE TABLE t1(a, b, c)" + } + } + return {} + } + + do_execsql_test 6.0 { + CREATE VIRTUAL TABLE x1 USING tcl(tcl_command); + } + + do_execsql_test 6.1 { + ALTER TABLE x1 RENAME TO x2; + SELECT sql FROM sqlite_master WHERE name = 'x2' + } {{CREATE VIRTUAL TABLE "x2" USING tcl(tcl_command)}} + + do_execsql_test 7.1 { + CREATE TABLE ddd(db, sql, zOld, zNew, bTemp); + INSERT INTO ddd VALUES( + 'main', 'CREATE TABLE x1(i INTEGER, t TEXT)', 'ddd', NULL, 0 + ), ( + 'main', 'CREATE TABLE x1(i INTEGER, t TEXT)', NULL, 'eee', 0 + ), ( + 'main', NULL, 'ddd', 'eee', 0 + ); + } {} +} + +#------------------------------------------------------------------------- +# +reset_db +forcedelete test.db2 +do_execsql_test 8.1 { + PRAGMA legacy_alter_table = 1; + ATTACH 'test.db2' AS aux; + PRAGMA foreign_keys = on; + CREATE TABLE aux.p1(a INTEGER PRIMARY KEY, b); + CREATE TABLE aux.c1(x INTEGER PRIMARY KEY, y REFERENCES p1(a)); + INSERT INTO aux.p1 VALUES(1, 1); + INSERT INTO aux.p1 VALUES(2, 2); + INSERT INTO aux.c1 VALUES(NULL, 2); + CREATE TABLE aux.c2(x INTEGER PRIMARY KEY, y REFERENCES c1(a)); +} + +do_execsql_test 8.2 { + ALTER TABLE aux.p1 RENAME TO ppp; +} + +do_execsql_test 8.2 { + INSERT INTO aux.c1 VALUES(NULL, 1); + SELECT sql FROM aux.sqlite_master WHERE name = 'c1'; +} {{CREATE TABLE c1(x INTEGER PRIMARY KEY, y REFERENCES "ppp"(a))}} + +reset_db +do_execsql_test 9.0 { + PRAGMA legacy_alter_table = 1; + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t2; +} +do_execsql_test 9.1 { + ALTER TABLE t1 RENAME TO t3; +} {} +do_execsql_test 9.1b { + ALTER TABLE t3 RENAME TO t1; +} {} +do_execsql_test 9.2 { + DROP VIEW v1; + CREATE TRIGGER tr AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(new.a); + END; +} +do_execsql_test 9.3 { + ALTER TABLE t1 RENAME TO t3; +} {} + +forcedelete test.db2 +do_execsql_test 9.4 { + ALTER TABLE t3 RENAME TO t1; + DROP TRIGGER tr; + + ATTACH 'test.db2' AS aux; + CREATE TRIGGER tr AFTER INSERT ON t1 WHEN new.a IS NULL BEGIN SELECT 1, 2, 3; END; + + CREATE TABLE aux.t1(x); + CREATE TEMP TRIGGER tr AFTER INSERT ON aux.t1 BEGIN SELECT 1, 2, 3; END; +} +do_execsql_test 9.5 { + ALTER TABLE main.t1 RENAME TO t3; +} +do_execsql_test 9.6 { + SELECT sql FROM sqlite_temp_master; + SELECT sql FROM sqlite_master WHERE type='trigger'; +} { + {CREATE TRIGGER tr AFTER INSERT ON aux.t1 BEGIN SELECT 1, 2, 3; END} + {CREATE TRIGGER tr AFTER INSERT ON "t3" WHEN new.a IS NULL BEGIN SELECT 1, 2, 3; END} +} + +#------------------------------------------------------------------------- +reset_db +ifcapable fts5 { + do_execsql_test 10.0 { + PRAGMA legacy_alter_table = 1; + CREATE VIRTUAL TABLE fff USING fts5(x, y, z); + } + + do_execsql_test 10.1 { + BEGIN; + INSERT INTO fff VALUES('a', 'b', 'c'); + ALTER TABLE fff RENAME TO ggg; + COMMIT; + } + + do_execsql_test 10.2 { + SELECT * FROM ggg; + } {a b c} +} + +#------------------------------------------------------------------------- +reset_db +forcedelete test.db2 +db func trigger trigger +set ::trigger [list] +proc trigger {args} { + lappend ::trigger $args +} +do_execsql_test 11.0 { + PRAGMA legacy_alter_table = 1; + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t1(a, b, c); + CREATE TABLE main.t1(a, b, c); + CREATE TEMP TRIGGER tr AFTER INSERT ON aux.t1 BEGIN + SELECT trigger(new.a, new.b, new.c); + END; +} + +do_execsql_test 11.1 { + INSERT INTO main.t1 VALUES(1, 2, 3); + INSERT INTO aux.t1 VALUES(4, 5, 6); +} +do_test 11.2 { set ::trigger } {{4 5 6}} + +do_execsql_test 11.3 { + SELECT name, tbl_name FROM sqlite_temp_master; +} {tr t1} + +do_execsql_test 11.4 { + ALTER TABLE main.t1 RENAME TO t2; + SELECT name, tbl_name FROM sqlite_temp_master; +} {tr t1} + +do_execsql_test 11.5 { + ALTER TABLE aux.t1 RENAME TO t2; + SELECT name, tbl_name FROM sqlite_temp_master; +} {tr t2} + +do_execsql_test 11.6 { + INSERT INTO aux.t2 VALUES(7, 8, 9); +} +do_test 11.7 { set ::trigger } {{4 5 6} {7 8 9}} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 12.0 { + PRAGMA legacy_alter_table = 1; + CREATE TABLE t1(a); + CREATE TABLE t2(w); + CREATE TRIGGER temp.r1 AFTER INSERT ON main.t2 BEGIN + INSERT INTO t1(a) VALUES(new.w); + END; + CREATE TEMP TABLE t2(x); +} + +do_execsql_test 12.1 { + ALTER TABLE main.t2 RENAME TO t3; +} + +do_execsql_test 12.2 { + INSERT INTO t3 VALUES('WWW'); + SELECT * FROM t1; +} {WWW} + + +#------------------------------------------------------------------------- +reset_db + +ifcapable rtree { + do_execsql_test 14.0 { + PRAGMA legacy_alter_table = 1; + CREATE VIRTUAL TABLE rt USING rtree(id, minx, maxx, miny, maxy); + + CREATE TABLE "mytable" ( "fid" INTEGER PRIMARY KEY, "geom" BLOB); + + CREATE TRIGGER tr1 AFTER UPDATE OF "geom" ON "mytable" + WHEN OLD."fid" = NEW."fid" AND NEW."geom" IS NULL BEGIN + DELETE FROM rt WHERE id = OLD."fid"; + END; + + INSERT INTO mytable VALUES(1, X'abcd'); + } + + do_execsql_test 14.1 { + UPDATE mytable SET geom = X'1234' + } + + do_execsql_test 14.2 { + ALTER TABLE mytable RENAME TO mytable_renamed; + } + + do_execsql_test 14.3 { + CREATE TRIGGER tr2 AFTER INSERT ON mytable_renamed BEGIN + DELETE FROM rt WHERE id=(SELECT min(id) FROM rt); + END; + } + + do_execsql_test 14.4 { + ALTER TABLE mytable_renamed RENAME TO mytable2; + } +} + +reset_db +do_execsql_test 14.5 { + PRAGMA legacy_alter_table = 1; + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE TRIGGER xyz AFTER INSERT ON t1 BEGIN + SELECT a, b FROM v1; + END; +} +do_execsql_test 14.6 { + ALTER TABLE t1 RENAME TO tt1; +} + + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/altermalloc2.test lxd-3.0.3/dist/sqlite/test/altermalloc2.test --- lxd-3.0.2/dist/sqlite/test/altermalloc2.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/altermalloc2.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,101 @@ +# 2018 August 20 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#************************************************************************* +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +source $testdir/malloc_common.tcl +set testprefix altermalloc2 + +# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. +ifcapable !altertable { + finish_test + return +} + +do_execsql_test 1.0 { + CREATE TABLE t1(abcd, efgh); +} +faultsim_save_and_close + +do_faultsim_test 1 -prep { + faultsim_restore_and_reopen +} -body { + execsql { + ALTER TABLE t1 RENAME abcd TO dcba + } +} -test { + faultsim_test_result {0 {}} +} + +catch {db close} +forcedelete test.db +sqlite3 db test.db +do_execsql_test 2.0 { + PRAGMA encoding = 'utf-16'; + CREATE TABLE t1(abcd, efgh); +} +faultsim_save_and_close + +do_faultsim_test 2 -prep { + faultsim_restore_and_reopen +} -body { + execsql { + ALTER TABLE t1 RENAME abcd TO dcba + } +} -test { + faultsim_test_result {0 {}} +} + + +reset_db +do_execsql_test 3.0 { + CREATE TABLE t1(abcd, efgh); + CREATE VIEW v1 AS SELECT * FROM t1 WHERE abcd>efgh; +} +faultsim_save_and_close + +do_faultsim_test 3 -prep { + faultsim_restore_and_reopen +} -body { + execsql { + ALTER TABLE t1 RENAME abcd TO dcba + } +} -test { + faultsim_test_result {0 {}} +} + +reset_db +do_execsql_test 4.0 { + CREATE TABLE rr(a, b); + CREATE VIEW vv AS SELECT * FROM rr; + + CREATE TRIGGER vv1 INSTEAD OF INSERT ON vv BEGIN + SELECT 1, 2, 3; + END; + CREATE TRIGGER tr1 AFTER INSERT ON rr BEGIN + INSERT INTO vv VALUES(new.a, new.b); + END; +} {} + +faultsim_save_and_close +do_faultsim_test 4 -faults oom-* -prep { + faultsim_restore_and_reopen + execsql { SELECT * FROM sqlite_master } +} -body { + execsql { + ALTER TABLE rr RENAME a TO c; + } +} -test { + faultsim_test_result {0 {}} +} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/altertab2.test lxd-3.0.3/dist/sqlite/test/altertab2.test --- lxd-3.0.2/dist/sqlite/test/altertab2.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/altertab2.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,46 @@ +# 2018 September 30 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#************************************************************************* +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix altertab + +# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. +ifcapable !altertable { + finish_test + return +} + +ifcapable fts5 { + do_execsql_test 1.0 { + CREATE TABLE rr(a, b); + CREATE VIRTUAL TABLE ff USING fts5(a, b); + CREATE TRIGGER tr1 AFTER INSERT ON rr BEGIN + INSERT INTO ff VALUES(new.a, new.b); + END; + INSERT INTO rr VALUES('hello', 'world'); + SELECT * FROM ff; + } {hello world} + + do_execsql_test 1.1 { + ALTER TABLE ff RENAME TO ffff; + } + + do_execsql_test 1.2 { + INSERT INTO rr VALUES('in', 'tcl'); + SELECT * FROM ffff; + } {hello world in tcl} +} + + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/altertab.test lxd-3.0.3/dist/sqlite/test/altertab.test --- lxd-3.0.2/dist/sqlite/test/altertab.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/altertab.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,465 @@ +# 2018 August 24 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#************************************************************************* +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix altertab + +# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. +ifcapable !altertable { + finish_test + return +} + +do_execsql_test 1.0 { + CREATE TABLE t1(a, b, CHECK(t1.a != t1.b)); + + CREATE TABLE t2(a, b); + CREATE INDEX t2expr ON t2(a) WHERE t2.b>0; +} + +do_execsql_test 1.1 { + SELECT sql FROM sqlite_master +} { + {CREATE TABLE t1(a, b, CHECK(t1.a != t1.b))} + {CREATE TABLE t2(a, b)} + {CREATE INDEX t2expr ON t2(a) WHERE t2.b>0} +} + +do_execsql_test 1.2 { + ALTER TABLE t1 RENAME TO t1new; +} + +do_execsql_test 1.3 { + CREATE TABLE t3(c, d); + ALTER TABLE t3 RENAME TO t3new; + DROP TABLE t3new; +} + +do_execsql_test 1.4 { + SELECT sql FROM sqlite_master +} { + {CREATE TABLE "t1new"(a, b, CHECK("t1new".a != "t1new".b))} + {CREATE TABLE t2(a, b)} + {CREATE INDEX t2expr ON t2(a) WHERE t2.b>0} +} + + +do_execsql_test 1.3 { + ALTER TABLE t2 RENAME TO t2new; +} +do_execsql_test 1.4 { + SELECT sql FROM sqlite_master +} { + {CREATE TABLE "t1new"(a, b, CHECK("t1new".a != "t1new".b))} + {CREATE TABLE "t2new"(a, b)} + {CREATE INDEX t2expr ON "t2new"(a) WHERE "t2new".b>0} +} + + +#------------------------------------------------------------------------- +reset_db +ifcapable vtab { + register_echo_module db + + do_execsql_test 2.0 { + CREATE TABLE abc(a, b, c); + INSERT INTO abc VALUES(1, 2, 3); + CREATE VIRTUAL TABLE eee USING echo('abc'); + SELECT * FROM eee; + } {1 2 3} + + do_execsql_test 2.1 { + ALTER TABLE eee RENAME TO fff; + SELECT * FROM fff; + } {1 2 3} + + db close + sqlite3 db test.db + + do_catchsql_test 2.2 { + ALTER TABLE fff RENAME TO ggg; + } {1 {no such module: echo}} +} + +#------------------------------------------------------------------------- +reset_db + +do_execsql_test 3.0 { + CREATE TABLE txx(a, b, c); + INSERT INTO txx VALUES(1, 2, 3); + CREATE VIEW vvv AS SELECT main.txx.a, txx.b, c FROM txx; + CREATE VIEW uuu AS SELECT main.one.a, one.b, c FROM txx AS one; + CREATE VIEW temp.ttt AS SELECT main.txx.a, txx.b, one.b, main.one.a FROM txx AS one, txx; +} + +do_execsql_test 3.1.1 { + SELECT * FROM vvv; +} {1 2 3} +do_execsql_test 3.1.2 { + ALTER TABLE txx RENAME TO "t xx"; + SELECT * FROM vvv; +} {1 2 3} +do_execsql_test 3.1.3 { + SELECT sql FROM sqlite_master WHERE name='vvv'; +} {{CREATE VIEW vvv AS SELECT main."t xx".a, "t xx".b, c FROM "t xx"}} + + +do_execsql_test 3.2.1 { + SELECT * FROM uuu; +} {1 2 3} +do_execsql_test 3.2.2 { + SELECT sql FROM sqlite_master WHERE name='uuu';; +} {{CREATE VIEW uuu AS SELECT main.one.a, one.b, c FROM "t xx" AS one}} + +do_execsql_test 3.3.1 { + SELECT * FROM ttt; +} {1 2 2 1} +do_execsql_test 3.3.2 { + SELECT sql FROM sqlite_temp_master WHERE name='ttt'; +} {{CREATE VIEW ttt AS SELECT main."t xx".a, "t xx".b, one.b, main.one.a FROM "t xx" AS one, "t xx"}} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 4.0 { + CREATE table t1(x, y); + CREATE table t2(a, b); + + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + SELECT t1.x, * FROM t1, t2; + INSERT INTO t2 VALUES(new.x, new.y); + END; +} + +do_execsql_test 4.1 { + INSERT INTO t1 VALUES(1, 1); + ALTER TABLE t1 RENAME TO t11; + INSERT INTO t11 VALUES(2, 2); + ALTER TABLE t2 RENAME TO t22; + INSERT INTO t11 VALUES(3, 3); +} + +proc squish {a} { + string trim [regsub -all {[[:space:]][[:space:]]*} $a { }] +} +db func squish squish +do_test 4.2 { + execsql { SELECT squish(sql) FROM sqlite_master WHERE name = 'tr1' } +} [list [squish { + CREATE TRIGGER tr1 AFTER INSERT ON "t11" BEGIN + SELECT "t11".x, * FROM "t11", "t22"; + INSERT INTO "t22" VALUES(new.x, new.y); + END +}]] + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 5.0 { + CREATE TABLE t9(a, b, c); + CREATE TABLE t10(a, b, c); + CREATE TEMP TABLE t9(a, b, c); + + CREATE TRIGGER temp.t9t AFTER INSERT ON temp.t9 BEGIN + INSERT INTO t10 VALUES(new.a, new.b, new.c); + END; + + INSERT INTO temp.t9 VALUES(1, 2, 3); + SELECT * FROM t10; +} {1 2 3} + +do_execsql_test 5.1 { + ALTER TABLE temp.t9 RENAME TO 't1234567890' +} + +do_execsql_test 5.2 { + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t2 VALUES(3, 4); + CREATE VIEW v AS SELECT one.a, one.b, t2.a, t2.b FROM t1 AS one, t2; + SELECT * FROM v; +} {1 2 3 4} + +do_catchsql_test 5.3 { + ALTER TABLE t2 RENAME TO one; +} {1 {error in view v after rename: ambiguous column name: one.a}} + +do_execsql_test 5.4 { + SELECT * FROM v +} {1 2 3 4} + +do_execsql_test 5.5 { + DROP VIEW v; + CREATE VIEW temp.vv AS SELECT one.a, one.b, t2.a, t2.b FROM t1 AS one, t2; + SELECT * FROM vv; +} {1 2 3 4} + +do_catchsql_test 5.6 { + ALTER TABLE t2 RENAME TO one; +} {1 {error in view vv after rename: ambiguous column name: one.a}} + +#------------------------------------------------------------------------- + +ifcapable vtab { + register_tcl_module db + proc tcl_command {method args} { + switch -- $method { + xConnect { + return "CREATE TABLE t1(a, b, c)" + } + } + return {} + } + + do_execsql_test 6.0 { + CREATE VIRTUAL TABLE x1 USING tcl(tcl_command); + } + + do_execsql_test 6.1 { + ALTER TABLE x1 RENAME TO x2; + SELECT sql FROM sqlite_master WHERE name = 'x2' + } {{CREATE VIRTUAL TABLE "x2" USING tcl(tcl_command)}} + + do_execsql_test 7.1 { + CREATE TABLE ddd(db, sql, zOld, zNew, bTemp); + INSERT INTO ddd VALUES( + 'main', 'CREATE TABLE x1(i INTEGER, t TEXT)', 'ddd', NULL, 0 + ), ( + 'main', 'CREATE TABLE x1(i INTEGER, t TEXT)', NULL, 'eee', 0 + ), ( + 'main', NULL, 'ddd', 'eee', 0 + ); + } {} + + do_execsql_test 7.2 { + SELECT + sqlite_rename_table(db, 0, 0, sql, zOld, zNew, bTemp) + FROM ddd; + } {{} {} {}} +} + +#------------------------------------------------------------------------- +# +reset_db +forcedelete test.db2 +do_execsql_test 8.1 { + ATTACH 'test.db2' AS aux; + PRAGMA foreign_keys = on; + CREATE TABLE aux.p1(a INTEGER PRIMARY KEY, b); + CREATE TABLE aux.c1(x INTEGER PRIMARY KEY, y REFERENCES p1(a)); + INSERT INTO aux.p1 VALUES(1, 1); + INSERT INTO aux.p1 VALUES(2, 2); + INSERT INTO aux.c1 VALUES(NULL, 2); + CREATE TABLE aux.c2(x INTEGER PRIMARY KEY, y REFERENCES c1(a)); +} + +do_execsql_test 8.2 { + ALTER TABLE aux.p1 RENAME TO ppp; +} + +do_execsql_test 8.2 { + INSERT INTO aux.c1 VALUES(NULL, 1); + SELECT sql FROM aux.sqlite_master WHERE name = 'c1'; +} {{CREATE TABLE c1(x INTEGER PRIMARY KEY, y REFERENCES "ppp"(a))}} + +reset_db +do_execsql_test 9.0 { + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t2; +} +do_catchsql_test 9.1 { + ALTER TABLE t1 RENAME TO t3; +} {1 {error in view v1: no such table: main.t2}} +do_execsql_test 9.2 { + DROP VIEW v1; + CREATE TRIGGER tr AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(new.a); + END; +} +do_catchsql_test 9.3 { + ALTER TABLE t1 RENAME TO t3; +} {1 {error in trigger tr: no such table: main.t2}} + +forcedelete test.db2 +do_execsql_test 9.4 { + DROP TRIGGER tr; + + ATTACH 'test.db2' AS aux; + CREATE TRIGGER tr AFTER INSERT ON t1 WHEN new.a IS NULL BEGIN SELECT 1, 2, 3; END; + + CREATE TABLE aux.t1(x); + CREATE TEMP TRIGGER tr AFTER INSERT ON aux.t1 BEGIN SELECT 1, 2, 3; END; +} +do_execsql_test 9.5 { + ALTER TABLE main.t1 RENAME TO t3; +} +do_execsql_test 9.6 { + SELECT sql FROM sqlite_temp_master; + SELECT sql FROM sqlite_master WHERE type='trigger'; +} { + {CREATE TRIGGER tr AFTER INSERT ON aux.t1 BEGIN SELECT 1, 2, 3; END} + {CREATE TRIGGER tr AFTER INSERT ON "t3" WHEN new.a IS NULL BEGIN SELECT 1, 2, 3; END} +} + +#------------------------------------------------------------------------- +reset_db +ifcapable fts5 { + do_execsql_test 10.0 { + CREATE VIRTUAL TABLE fff USING fts5(x, y, z); + } + + do_execsql_test 10.1 { + BEGIN; + INSERT INTO fff VALUES('a', 'b', 'c'); + ALTER TABLE fff RENAME TO ggg; + COMMIT; + } + + do_execsql_test 10.2 { + SELECT * FROM ggg; + } {a b c} +} + +#------------------------------------------------------------------------- +reset_db +forcedelete test.db2 +db func trigger trigger +set ::trigger [list] +proc trigger {args} { + lappend ::trigger $args +} +do_execsql_test 11.0 { + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t1(a, b, c); + CREATE TABLE main.t1(a, b, c); + CREATE TEMP TRIGGER tr AFTER INSERT ON aux.t1 BEGIN + SELECT trigger(new.a, new.b, new.c); + END; +} + +do_execsql_test 11.1 { + INSERT INTO main.t1 VALUES(1, 2, 3); + INSERT INTO aux.t1 VALUES(4, 5, 6); +} +do_test 11.2 { set ::trigger } {{4 5 6}} + +do_execsql_test 11.3 { + SELECT name, tbl_name FROM sqlite_temp_master; +} {tr t1} + +do_execsql_test 11.4 { + ALTER TABLE main.t1 RENAME TO t2; + SELECT name, tbl_name FROM sqlite_temp_master; +} {tr t1} + +do_execsql_test 11.5 { + ALTER TABLE aux.t1 RENAME TO t2; + SELECT name, tbl_name FROM sqlite_temp_master; +} {tr t2} + +do_execsql_test 11.6 { + INSERT INTO aux.t2 VALUES(7, 8, 9); +} +do_test 11.7 { set ::trigger } {{4 5 6} {7 8 9}} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 12.0 { + CREATE TABLE t1(a); + CREATE TABLE t2(w); + CREATE TRIGGER temp.r1 AFTER INSERT ON main.t2 BEGIN + INSERT INTO t1(a) VALUES(new.w); + END; + CREATE TEMP TABLE t2(x); +} + +do_execsql_test 12.1 { + ALTER TABLE main.t2 RENAME TO t3; +} + +do_execsql_test 12.2 { + INSERT INTO t3 VALUES('WWW'); + SELECT * FROM t1; +} {WWW} + + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 13.0 { + CREATE TABLE t1(x, y); + CREATE TABLE t2(a, b); + CREATE TABLE log(c); + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO log SELECT y FROM t1, t2; + END; +} + +do_execsql_test 13.1 { + INSERT INTO t1 VALUES(1, 2); +} + +do_catchsql_test 13.2 { + ALTER TABLE t2 RENAME b TO y; +} {1 {error in trigger tr1 after rename: ambiguous column name: y}} + +#------------------------------------------------------------------------- +reset_db + +ifcapable rtree { + do_execsql_test 14.0 { + CREATE VIRTUAL TABLE rt USING rtree(id, minx, maxx, miny, maxy); + + CREATE TABLE "mytable" ( "fid" INTEGER PRIMARY KEY, "geom" BLOB); + + CREATE TRIGGER tr1 AFTER UPDATE OF "geom" ON "mytable" + WHEN OLD."fid" = NEW."fid" AND NEW."geom" IS NULL BEGIN + DELETE FROM rt WHERE id = OLD."fid"; + END; + + INSERT INTO mytable VALUES(1, X'abcd'); + } + + do_execsql_test 14.1 { + UPDATE mytable SET geom = X'1234' + } + + do_execsql_test 14.2 { + ALTER TABLE mytable RENAME TO mytable_renamed; + } + + do_execsql_test 14.3 { + CREATE TRIGGER tr2 AFTER INSERT ON mytable_renamed BEGIN + DELETE FROM rt WHERE id=(SELECT min(id) FROM rt); + END; + } + + do_execsql_test 14.4 { + ALTER TABLE mytable_renamed RENAME TO mytable2; + } +} + +reset_db +do_execsql_test 14.5 { + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE TRIGGER xyz AFTER INSERT ON t1 BEGIN + SELECT a, b FROM v1; + END; +} +do_execsql_test 14.6 { + ALTER TABLE t1 RENAME TO tt1; +} + + + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/alter.test lxd-3.0.3/dist/sqlite/test/alter.test --- lxd-3.0.2/dist/sqlite/test/alter.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/alter.test 2018-11-22 20:54:16.000000000 +0000 @@ -681,21 +681,21 @@ } {1 18 2 9} #-------------------------------------------------------------------------- -# alter-9.X - Special test: Make sure the sqlite_rename_trigger() and +# alter-9.X - Special test: Make sure the sqlite_rename_column() and # rename_table() functions do not crash when handed bad input. # -ifcapable trigger { - do_test alter-9.1 { - execsql {SELECT SQLITE_RENAME_TRIGGER(0,0)} - } {{}} -} -do_test alter-9.2 { - execsql { - SELECT SQLITE_RENAME_TABLE(0,0); - SELECT SQLITE_RENAME_TABLE(10,20); - SELECT SQLITE_RENAME_TABLE('foo', 'foo'); - } -} {{} {} {}} +do_test alter-9.1 { + execsql {SELECT SQLITE_RENAME_COLUMN(0,0,0,0,0,0,0,0,0)} +} {{}} +foreach {tn sql} { + 1 { SELECT SQLITE_RENAME_TABLE(0,0,0,0,0,0,0) } + 2 { SELECT SQLITE_RENAME_TABLE(10,20,30,40,50,60,70) } + 3 { SELECT SQLITE_RENAME_TABLE('foo','foo','foo','foo','foo','foo','foo') } +} { + do_test alter-9.2.$tn { + catch { execsql $sql } + } 1 +} #------------------------------------------------------------------------ # alter-10.X - Make sure ALTER TABLE works with multi-byte UTF-8 characters @@ -875,51 +875,23 @@ SELECT * FROM t16a_rn ORDER BY a; } {abc 1.25 99 xyzzy cba 5.5 98 fizzle} -#------------------------------------------------------------------------- -# Verify that NULL values into the internal-use-only sqlite_rename_*() -# functions do not cause problems. +# 2018-09-16 ticket b41031ea2b5372378cb3d2d43cf9fe2a4a5c2510 # -do_execsql_test alter-17.1 { - SELECT sqlite_rename_table('CREATE TABLE xyz(a,b,c)','abc'); -} {{CREATE TABLE "abc"(a,b,c)}} -do_execsql_test alter-17.2 { - SELECT sqlite_rename_table('CREATE TABLE xyz(a,b,c)',NULL); -} {{CREATE TABLE "(NULL)"(a,b,c)}} -do_execsql_test alter-17.3 { - SELECT sqlite_rename_table(NULL,'abc'); -} {{}} -do_execsql_test alter-17.4 { - SELECT sqlite_rename_trigger('CREATE TRIGGER r1 ON xyz WHEN','abc'); -} {{CREATE TRIGGER r1 ON "abc" WHEN}} -do_execsql_test alter-17.5 { - SELECT sqlite_rename_trigger('CREATE TRIGGER r1 ON xyz WHEN',NULL); -} {{CREATE TRIGGER r1 ON "(NULL)" WHEN}} -do_execsql_test alter-17.6 { - SELECT sqlite_rename_trigger(NULL,'abc'); -} {{}} -do_execsql_test alter-17.7 { - SELECT sqlite_rename_parent('CREATE TABLE t1(a REFERENCES "xyzzy")', - 'xyzzy','lmnop'); -} {{CREATE TABLE t1(a REFERENCES "lmnop")}} -do_execsql_test alter-17.8 { - SELECT sqlite_rename_parent('CREATE TABLE t1(a REFERENCES "xyzzy")', - 'xyzzy',NULL); -} {{CREATE TABLE t1(a REFERENCES "(NULL)")}} -do_execsql_test alter-17.9 { - SELECT sqlite_rename_parent('CREATE TABLE t1(a REFERENCES "xyzzy")', - NULL, 'lmnop'); -} {{}} -do_execsql_test alter-17.10 { - SELECT sqlite_rename_parent(NULL,'abc','xyz'); -} {{}} -do_execsql_test alter-17.11 { - SELECT sqlite_rename_parent('create references ''','abc','xyz'); -} {{create references '}} -do_execsql_test alter-17.12 { - SELECT sqlite_rename_parent('create references "abc"123" ','abc','xyz'); -} {{create references "xyz"123" }} -do_execsql_test alter-17.13 { - SELECT sqlite_rename_parent("references '''",'abc','xyz'); -} {{references '''}} +ifcapable rtree { + db close + sqlite3 db :memory: + do_execsql_test alter-17.100 { + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + CREATE VIRTUAL TABLE t2 USING rtree(id,x0,x1); + INSERT INTO t1 VALUES(1,'apple'),(2,'fig'),(3,'pear'); + INSERT INTO t2 VALUES(1,1.0,2.0),(2,2.0,3.0),(3,1.5,3.5); + CREATE TRIGGER r1 AFTER UPDATE ON t1 BEGIN + DELETE FROM t2 WHERE id = OLD.a; + END; + ALTER TABLE t1 RENAME TO t3; + UPDATE t3 SET b='peach' WHERE a=2; + SELECT * FROM t2 ORDER BY 1; + } {1 1.0 2.0 3 1.5 3.5} +} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/atomic2.test lxd-3.0.3/dist/sqlite/test/atomic2.test --- lxd-3.0.2/dist/sqlite/test/atomic2.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/atomic2.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,95 @@ +# 2018-07-15 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. The +# focus of this file is testing that if an IO error is encountered +# as part of an atomic F2FS commit, an attempt is made to commit the +# transaction using a legacy journal commit. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +source $testdir/malloc_common.tcl +set ::testprefix atomic2 + +db close +if {[atomic_batch_write test.db]==0} { + puts "No f2fs atomic-batch-write support. Skipping tests..." + finish_test + return +} + +reset_db + +do_execsql_test 1.0 { + CREATE TABLE t1(x, y); + CREATE INDEX i1x ON t1(x); + CREATE INDEX i2x ON t1(y); + + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 ) + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM s; +} + +set setup [list \ + -injectstart at_injectstart \ + -injectstop at_injectstop \ +] + +set ::at_fail 0 +set ::at_nfail 0 + +proc at_injectstart {iFail} { + set ::at_fail $iFail + set ::at_nfail 0 +} +proc at_injectstop {} { + set ::at_fail 0 + return $::at_nfail +} + +proc at_vfs_callback {method file z args} { + if {$::at_fail>0} { + incr ::at_fail -1 + if {$::at_fail==0} { + incr ::at_nfail + return SQLITE_IOERR + } elseif {$method=="xFileControl" && $z=="COMMIT_ATOMIC_WRITE"} { + set ::at_fail 0 + } + } + return SQLITE_OK +} + +testvfs tvfs -default 1 +tvfs script at_vfs_callback +tvfs filter {xFileControl xWrite} + +faultsim_save_and_close + +do_one_faultsim_test 2.0 {*}$setup -prep { + faultsim_restore_and_reopen +} -body { + execsql { + WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 ) + INSERT INTO t1 SELECT randomblob(400), randomblob(400) FROM s; + } +} -test { + faultsim_test_result {0 {}} + + set res [execsql {SELECT count(*) FROM t1; PRAGMA integrity_check}] + if {$res!="200 ok"} { + error "expected {200 ok}, got $res" + } +} + +db close +tvfs delete + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/atrc.c lxd-3.0.3/dist/sqlite/test/atrc.c --- lxd-3.0.2/dist/sqlite/test/atrc.c 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/atrc.c 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,150 @@ +/* +** This program generates a script that stresses the ALTER TABLE statement. +** Compile like this: +** +** gcc -g -c sqlite3.c +** gcc -g -o atrc atrc.c sqlite3.o -ldl -lpthread +** +** Run the program this way: +** +** ./atrc DATABASE | ./sqlite3 DATABASE +** +** This program "atrc" generates a script that can be fed into an ordinary +** command-line shell. The script performs many ALTER TABLE statements, +** runs ".schema --indent" and "PRAGMA integrity_check;", does more +** ALTER TABLE statements to restore the original schema, and then +** runs "PRAGMA integrity_check" again. Every table and column has its +** name changed. The entire script is contained within BEGIN...ROLLBACK +** so that no changes are ever actually made to the database. +*/ +#include "sqlite3.h" +#include + +/* +** Generate the text of ALTER TABLE statements that will rename +** every column in table zTable to a generic name composed from +** zColPrefix and a sequential number. The generated text is +** appended pConvert. If pUndo is not NULL, then SQL text that +** will undo the change is appended to pUndo. +** +** The table to be converted must be in the "main" schema. +*/ +int rename_all_columns_of_table( + sqlite3 *db, /* Database connection */ + const char *zTab, /* Table whose columns should all be renamed */ + const char *zColPrefix, /* Prefix for new column names */ + sqlite3_str *pConvert, /* Append ALTER TABLE statements here */ + sqlite3_str *pUndo /* SQL to undo the change, if not NULL */ +){ + sqlite3_stmt *pStmt; + int rc; + int cnt = 0; + + rc = sqlite3_prepare_v2(db, + "SELECT name FROM pragma_table_info(?1);", + -1, &pStmt, 0); + if( rc ) return rc; + sqlite3_bind_text(pStmt, 1, zTab, -1, SQLITE_STATIC); + while( sqlite3_step(pStmt)==SQLITE_ROW ){ + const char *zCol = (const char*)sqlite3_column_text(pStmt, 0); + cnt++; + sqlite3_str_appendf(pConvert, + "ALTER TABLE \"%w\" RENAME COLUMN \"%w\" TO \"%w%d\";\n", + zTab, zCol, zColPrefix, cnt + ); + if( pUndo ){ + sqlite3_str_appendf(pUndo, + "ALTER TABLE \"%w\" RENAME COLUMN \"%w%d\" TO \"%w\";\n", + zTab, zColPrefix, cnt, zCol + ); + } + } + sqlite3_finalize(pStmt); + return SQLITE_OK; +} + +/* Rename all tables and their columns in the main database +*/ +int rename_all_tables( + sqlite3 *db, /* Database connection */ + sqlite3_str *pConvert, /* Append SQL to do the rename here */ + sqlite3_str *pUndo /* Append SQL to undo the rename here */ +){ + sqlite3_stmt *pStmt; + int rc; + int cnt = 0; + + rc = sqlite3_prepare_v2(db, + "SELECT name FROM sqlite_master WHERE type='table'" + " AND name NOT LIKE 'sqlite_%';", + -1, &pStmt, 0); + if( rc ) return rc; + while( sqlite3_step(pStmt)==SQLITE_ROW ){ + const char *zTab = (const char*)sqlite3_column_text(pStmt, 0); + char *zNewTab; + char zPrefix[2]; + + zPrefix[0] = (cnt%26) + 'a'; + zPrefix[1] = 0; + zNewTab = sqlite3_mprintf("tx%d", ++cnt); + if( pUndo ){ + sqlite3_str_appendf(pUndo, + "ALTER TABLE \"%s\" RENAME TO \"%w\";\n", + zNewTab, zTab + ); + } + rename_all_columns_of_table(db, zTab, zPrefix, pConvert, pUndo); + sqlite3_str_appendf(pConvert, + "ALTER TABLE \"%w\" RENAME TO \"%s\";\n", + zTab, zNewTab + ); + sqlite3_free(zNewTab); + } + sqlite3_finalize(pStmt); + return SQLITE_OK; +} + +/* +** Generate a script that does this: +** +** (1) Start a transaction +** (2) Rename all tables and columns to use generic names. +** (3) Print the schema after this rename +** (4) Run pragma integrity_check +** (5) Do more ALTER TABLE statements to change the names back +** (6) Run pragma integrity_check again +** (7) Rollback the transaction +*/ +int main(int argc, char **argv){ + sqlite3 *db; + int rc; + sqlite3_str *pConvert; + sqlite3_str *pUndo; + char *zDbName; + char *zSql1, *zSql2; + if( argc!=2 ){ + fprintf(stderr, "Usage: %s DATABASE\n", argv[0]); + } + zDbName = argv[1]; + rc = sqlite3_open(zDbName, &db); + if( rc ){ + fprintf(stderr, "sqlite3_open() returns %d\n", rc); + return 1; + } + pConvert = sqlite3_str_new(db); + pUndo = sqlite3_str_new(db); + rename_all_tables(db, pConvert, pUndo); + zSql1 = sqlite3_str_finish(pConvert); + zSql2 = sqlite3_str_finish(pUndo); + sqlite3_close(db); + printf("BEGIN;\n"); + printf("%s", zSql1); + sqlite3_free(zSql1); + printf(".schema --indent\n"); + printf("PRAGMA integrity_check;\n"); + printf("%s", zSql2); + sqlite3_free(zSql2); + printf("PRAGMA integrity_check;\n"); + printf("ROLLBACK;\n"); + return 0; +} diff -Nru lxd-3.0.2/dist/sqlite/test/auth.test lxd-3.0.3/dist/sqlite/test/auth.test --- lxd-3.0.2/dist/sqlite/test/auth.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/auth.test 2018-11-22 20:54:16.000000000 +0000 @@ -2133,6 +2133,75 @@ } {1 {not authorized}} } ;# ifcapable cte +# +# db eval {SELECT sql FROM temp.sqlite_master} {puts "TEMP: $sql;"} +# db eval {SELECT sql FROM main.sqlite_master} {puts "MAIN: $sql;"} +# +# MAIN: CREATE TABLE "t2"(a,b,c); +# MAIN: CREATE TABLE t4(a,b,c); +# MAIN: CREATE INDEX t4i1 ON t4(a); +# MAIN: CREATE INDEX t4i2 ON t4(b,a,c); +# MAIN: CREATE TABLE sqlite_stat1(tbl,idx,stat); +# MAIN: CREATE TABLE t1(a,b); +# +ifcapable altertable&&vtab { + do_test 1.350 { + proc auth {code arg1 arg2 arg3 arg4 args} { + if {$code=="SQLITE_ALTER_TABLE"} { + set ::authargs [list $arg1 $arg2 $arg3 $arg4] + return SQLITE_OK + } + return SQLITE_OK + } + catchsql { + ALTER TABLE t1 RENAME COLUMN b TO bcdefg; + } + } {0 {}} + do_execsql_test auth-1.351 { + SELECT name FROM pragma_table_info('t1') ORDER BY cid; + } {a bcdefg} + do_test auth-1.352 { + set authargs + } {main t1 {} {}} + do_test 1.353 { + proc auth {code arg1 arg2 arg3 arg4 args} { + if {$code=="SQLITE_ALTER_TABLE"} { + set ::authargs [list $arg1 $arg2 $arg3 $arg4] + return SQLITE_IGNORE + } + return SQLITE_OK + } + catchsql { + ALTER TABLE t1 RENAME COLUMN bcdefg TO b; + } + } {0 {}} + do_execsql_test auth-1.354 { + SELECT name FROM pragma_table_info('t1') ORDER BY cid; + } {a bcdefg} + do_test auth-1.355 { + set authargs + } {main t1 {} {}} + do_test 1.356 { + proc auth {code arg1 arg2 arg3 arg4 args} { + if {$code=="SQLITE_ALTER_TABLE"} { + set ::authargs [list $arg1 $arg2 $arg3 $arg4] + return SQLITE_DENY + } + return SQLITE_OK + } + catchsql { + ALTER TABLE t1 RENAME COLUMN bcdefg TO b; + } + } {1 {not authorized}} + do_execsql_test auth-1.356 { + SELECT name FROM pragma_table_info('t1') ORDER BY cid; + } {a bcdefg} + do_test auth-1.357 { + set authargs + } {main t1 {} {}} +} + + do_test auth-2.1 { proc auth {code arg1 arg2 arg3 arg4 args} { if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} { @@ -2529,7 +2598,8 @@ # invocation with no column name specified, compilation fails. # set ::authargs [list] -proc auth {op a b c d} { +proc auth {op args} { + foreach {a b c d} $args break lappend ::authargs $op $a $b $c $d if {$op == "SQLITE_READ"} { return "SQLITE_DENY" } return "SQLITE_OK" diff -Nru lxd-3.0.2/dist/sqlite/test/bestindex6.test lxd-3.0.3/dist/sqlite/test/bestindex6.test --- lxd-3.0.2/dist/sqlite/test/bestindex6.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/bestindex6.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,109 @@ +# 2018-09-09 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix bestindex6 + +ifcapable !vtab { + finish_test + return +} + +register_tcl_module db + +proc vtab_command {src method args} { + switch -- $method { + xConnect { + return [db one {SELECT sql FROM sqlite_master where name = $src}] + } + + xBestIndex { + set clist [lindex $args 0] + set wlist 1 + + set iCons 0 + set ret [list] + foreach cons $clist { + catch { array unset C } + array set C $cons + + if {$C(usable)} { + set col [db one { + SELECT name FROM pragma_table_info($src) WHERE cid=$C(column) + }] + switch $C(op) { + isnull { + lappend wlist "$col IS NULL" + lappend ret omit $iCons + } + eq { + lappend wlist "$col = %$iCons%" + lappend ret omit $iCons + } + } + } + incr iCons + } + #puts "xBestIndex: $ret" + lappend ret idxStr [join $wlist " AND "] + return $ret + } + + xFilter { + foreach {idxnum idxstr aa} $args {} + set map [list] + for {set iCons 0} {$iCons < [llength $aa]} {incr iCons} { + lappend map %$iCons% [lindex $aa $iCons] + } + set ret [list sql \ + "SELECT rowid, * FROM $src WHERE [string map $map $idxstr]" + ] + # puts "xFilter: $ret" + return $ret + } + + } + + return {} +} + +do_execsql_test 1.0 { + CREATE TABLE t1(id int, value text); + CREATE TABLE t2(ctx int, id int, value text); + + INSERT INTO t1 VALUES(1,'try'); + INSERT INTO t2 VALUES(1,1,'good'); + INSERT INTO t2 VALUES(2,2,'evil'); + + CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); + CREATE VIRTUAL TABLE vt2 USING tcl(vtab_command t2); +} + +do_execsql_test 1.1 { + select * from t2 left join t1 on t1.id=t2.ctx where t1.value is null; +} {2 2 evil {} {}} + +do_execsql_test 1.2 { + select * from vt2 left join vt1 on vt1.id=vt2.ctx where vt1.value is null; +} {2 2 evil {} {}} + +unset -nocomplain xxx +do_execsql_test 1.3 { + select * from vt2 left join vt1 on vt1.id=vt2.ctx where vt1.value is $xxx; +} {2 2 evil {} {}} + +do_execsql_test 1.4 { + select * from t2 left join vt1 on vt1.id=t2.ctx where vt1.value = 3 +} {} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/btree02.test lxd-3.0.3/dist/sqlite/test/btree02.test --- lxd-3.0.2/dist/sqlite/test/btree02.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/btree02.test 2018-11-22 20:54:16.000000000 +0000 @@ -33,6 +33,8 @@ db eval BEGIN set i 0 db eval {SELECT a, ax, b, cnt FROM t1 CROSS JOIN t3 WHERE b IS NOT NULL} { + if {$a==""} {set a 0} + if {$b==""} {set b 0} db eval {INSERT INTO t2(x,y) VALUES($b,$cnt)} # puts "a,b,cnt = ($a,$b,$cnt)" incr i @@ -47,6 +49,6 @@ db eval {COMMIT; BEGIN} } db one {COMMIT; SELECT count(*) FROM t1;} -} {20} +} {27} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/corrupt2.test lxd-3.0.3/dist/sqlite/test/corrupt2.test --- lxd-3.0.2/dist/sqlite/test/corrupt2.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/corrupt2.test 2018-11-22 20:54:16.000000000 +0000 @@ -591,7 +591,7 @@ do_execsql_test 14.3 { PRAGMA integrity_check; } {{*** in database main *** -Main freelist: free-page count in header is too small}} +Main freelist: size is 3 but should be 2}} # Use 2 of the free pages on the free-list. # @@ -603,7 +603,7 @@ do_execsql_test 14.5 { PRAGMA integrity_check; } {{*** in database main *** -Page 3 is never used}} +Main freelist: size is 1 but should be 0}} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/corrupt3.test lxd-3.0.3/dist/sqlite/test/corrupt3.test --- lxd-3.0.2/dist/sqlite/test/corrupt3.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/corrupt3.test 2018-11-22 20:54:16.000000000 +0000 @@ -67,8 +67,7 @@ integrity_check corrupt3-1.6 # Make the overflow chain loop back on itself. See if the -# corruption is detected. (Actually, the last pointer in -# an overflow chain is ignored, so this is not an error.) +# corruption is detected. # do_test corrupt3-1.7 { db close @@ -78,7 +77,12 @@ SELECT x FROM t1 } } [list 0 $bigstring] -integrity_check corrupt3-1.8 +do_test corrupt3-1.8 { + catchsql { + PRAGMA integrity_check + } +} {0 {{*** in database main *** +On tree page 2 cell 0: 2nd reference to page 3}}} # Change the pointer for the first page of the overflow # change to be a non-existant page. @@ -111,7 +115,7 @@ PRAGMA integrity_check } } {0 {{*** in database main *** -On tree page 2 cell 0: 1 of 1 pages missing from overflow list starting at 0 +On tree page 2 cell 0: overflow list length is 0 but should be 1 Page 3 is never used}}} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/countofview.test lxd-3.0.3/dist/sqlite/test/countofview.test --- lxd-3.0.2/dist/sqlite/test/countofview.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/countofview.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,44 @@ +# 2018-08-04 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +source $testdir/malloc_common.tcl +set testprefix countofview + +do_execsql_test 1.0 { + CREATE TABLE t2(c); + CREATE TABLE t3(f); + + INSERT INTO t2 VALUES(1), (2); + INSERT INTO t3 VALUES(3); +} + +do_execsql_test 1.1 { + select c from t2 union all select f from t3 limit 1 offset 1 +} {2} + +do_execsql_test 1.2 { + select count(*) from ( + select c from t2 union all select f from t3 limit 1 offset 1 + ) +} {1} + +do_execsql_test 1.3 { + select count(*) from ( + select c from t2 union all select f from t3 + ) +} {3} + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/cursorhint2.test lxd-3.0.3/dist/sqlite/test/cursorhint2.test --- lxd-3.0.2/dist/sqlite/test/cursorhint2.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/cursorhint2.test 2018-11-22 20:54:16.000000000 +0000 @@ -186,4 +186,19 @@ x2 {EQ(c0,r[2])} } +reset_db +do_execsql_test 3.0 { + CREATE TABLE t1 (i1 TEXT); + CREATE TABLE t2 (i2 TEXT UNIQUE); + INSERT INTO t1 VALUES('0'); + INSERT INTO t2 VALUES('0'); +} + +do_extract_hints_test 3.1 { + SELECT * FROM t1 CROSS JOIN t2 WHERE (t1.i1 = t2.i2) AND t2.i2 = 1; +} { + t1 {EQ(c0,r[1])} t2 EQ(c0,1) +} + + finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/dataversion1.test lxd-3.0.3/dist/sqlite/test/dataversion1.test --- lxd-3.0.2/dist/sqlite/test/dataversion1.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/dataversion1.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,87 @@ +# 2018-07-18 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# Test case for SQLITE_FCNTL_DATA_VERSION +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +# Construct a database and get its initial data version +sqlite3 db test.db +do_test dataversion1-100 { + db eval { + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES(99); + SELECT * FROM t1; + } +} {99} +set dv1 [file_control_data_version db main] + +# The data version does not change by ATTACH or by changes to +# other schemas within the same connection. +# +do_test dataversion1-101 { + db eval { + ATTACH ':memory:' AS aux1; + CREATE TABLE aux1.t2(y); + CREATE TEMP TABLE t3(z); + } + file_control_data_version db main +} $dv1 + +# The data version does change when SQL modifies the table +do_test dataversion1-110 { + db eval { + UPDATE t1 SET x=x+1; + } + set dv2 [file_control_data_version db] + expr {$::dv1==$dv2} +} {0} + +# But the data version is constant if there are changes to other +# schemas +set dv1 [file_control_data_version db main] +do_test dataversion1-120 { + db eval { + UPDATE t2 SET y=y+1; + } + file_control_data_version db +} $dv1 + +# Changes to the database via another connection are not detected +# until there is a read transaction. +# +sqlite3 db2 test.db +do_test dataversion1-130 { + db2 eval { + SELECT * FROM t1 + } +} {100} +do_test dataversion1-131 { + file_control_data_version db +} $dv1 +do_test dataversion1-132 { + db2 eval { + UPDATE t1 SET x=x+1; + } + set dv2 [file_control_data_version db] + expr {$::dv1==$dv2} +} {1} +do_test dataversion1-133 { + db eval {SELECT * FROM t1} + set dv2 [file_control_data_version db] + expr {$::dv1==$dv2} +} {0} + + + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/e_createtable.test lxd-3.0.3/dist/sqlite/test/e_createtable.test --- lxd-3.0.2/dist/sqlite/test/e_createtable.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/e_createtable.test 2018-11-22 20:54:16.000000000 +0000 @@ -883,8 +883,8 @@ ); } {} -# EVIDENCE-OF: R-18415-27776 For the purposes of the DEFAULT clause, an -# expression is considered constant if it does contains no sub-queries, +# EVIDENCE-OF: R-33440-07331 For the purposes of the DEFAULT clause, an +# expression is considered constant if it contains no sub-queries, # column or table references, bound parameters, or string literals # enclosed in double-quotes instead of single-quotes. # diff -Nru lxd-3.0.2/dist/sqlite/test/eqp.test lxd-3.0.3/dist/sqlite/test/eqp.test --- lxd-3.0.2/dist/sqlite/test/eqp.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/eqp.test 2018-11-22 20:54:16.000000000 +0000 @@ -743,10 +743,84 @@ `--SCAN TABLE t1 } - - - - - +# 2018-08-16: While working on Fossil I discovered that EXPLAIN QUERY PLAN +# did not describe IN operators implemented using a ROWID lookup. These +# test cases ensure that problem as been fixed. +# +do_execsql_test 9.0 { + -- Schema from Fossil 2018-08-16 + CREATE TABLE forumpost( + fpid INTEGER PRIMARY KEY, + froot INT, + fprev INT, + firt INT, + fmtime REAL + ); + CREATE INDEX forumthread ON forumpost(froot,fmtime); + CREATE TABLE blob( + rid INTEGER PRIMARY KEY, + rcvid INTEGER, + size INTEGER, + uuid TEXT UNIQUE NOT NULL, + content BLOB, + CHECK( length(uuid)>=40 AND rid>0 ) + ); + CREATE TABLE event( + type TEXT, + mtime DATETIME, + objid INTEGER PRIMARY KEY, + tagid INTEGER, + uid INTEGER REFERENCES user, + bgcolor TEXT, + euser TEXT, + user TEXT, + ecomment TEXT, + comment TEXT, + brief TEXT, + omtime DATETIME + ); + CREATE INDEX event_i1 ON event(mtime); + CREATE TABLE private(rid INTEGER PRIMARY KEY); +} +do_eqp_test 9.1 { + WITH thread(age,duration,cnt,root,last) AS ( + SELECT + julianday('now') - max(fmtime) AS age, + max(fmtime) - min(fmtime) AS duration, + sum(fprev IS NULL) AS msg_count, + froot, + (SELECT fpid FROM forumpost + WHERE froot=x.froot + AND fpid NOT IN private + ORDER BY fmtime DESC LIMIT 1) + FROM forumpost AS x + WHERE fpid NOT IN private --- Ensure this table mentioned in EQP output! + GROUP BY froot + ORDER BY 1 LIMIT 26 OFFSET 5 + ) + SELECT + thread.age, + thread.duration, + thread.cnt, + blob.uuid, + substr(event.comment,instr(event.comment,':')+1) + FROM thread, blob, event + WHERE blob.rid=thread.last + AND event.objid=thread.last + ORDER BY 1; +} { + QUERY PLAN + |--MATERIALIZE xxxxxx + | |--SCAN TABLE forumpost AS x USING INDEX forumthread + | |--USING ROWID SEARCH ON TABLE private FOR IN-OPERATOR + | |--CORRELATED SCALAR SUBQUERY + | | |--SEARCH TABLE forumpost USING COVERING INDEX forumthread (froot=?) + | | `--USING ROWID SEARCH ON TABLE private FOR IN-OPERATOR + | `--USE TEMP B-TREE FOR ORDER BY + |--SCAN SUBQUERY xxxxxx + |--SEARCH TABLE blob USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE event USING INTEGER PRIMARY KEY (rowid=?) + `--USE TEMP B-TREE FOR ORDER BY +} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/e_select.test lxd-3.0.3/dist/sqlite/test/e_select.test --- lxd-3.0.2/dist/sqlite/test/e_select.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/e_select.test 2018-11-22 20:54:16.000000000 +0000 @@ -801,7 +801,7 @@ 4 "SELECT z2.* FROM z1,z2 LIMIT 1" {{} 21} 5 "SELECT z2.*, z1.* FROM z1,z2 LIMIT 1" {{} 21 51.65 -59.58 belfries} - 6 "SELECT count(*), * FROM z1" {6 63 born -26} + 6 "SELECT count(*), * FROM z1" {6 51.65 -59.58 belfries} 7 "SELECT max(a), * FROM z1" {63 63 born -26} 8 "SELECT *, min(a) FROM z1" {-5 {} 75 -5} @@ -939,13 +939,13 @@ INSERT INTO a2 VALUES(10, 4); } {} do_select_tests e_select-4.6 { - 1 "SELECT one, two, count(*) FROM a1" {4 10 4} - 2 "SELECT one, two, count(*) FROM a1 WHERE one<3" {2 3 2} + 1 "SELECT one, two, count(*) FROM a1" {1 1 4} + 2 "SELECT one, two, count(*) FROM a1 WHERE one<3" {1 1 2} 3 "SELECT one, two, count(*) FROM a1 WHERE one>3" {4 10 1} - 4 "SELECT *, count(*) FROM a1 JOIN a2" {4 10 10 4 16} - 5 "SELECT *, sum(three) FROM a1 NATURAL JOIN a2" {3 6 2 3} - 6 "SELECT *, sum(three) FROM a1 NATURAL JOIN a2" {3 6 2 3} - 7 "SELECT group_concat(three, ''), a1.* FROM a1 NATURAL JOIN a2" {12 3 6} + 4 "SELECT *, count(*) FROM a1 JOIN a2" {1 1 1 1 16} + 5 "SELECT *, sum(three) FROM a1 NATURAL JOIN a2" {1 1 1 3} + 6 "SELECT *, sum(three) FROM a1 NATURAL JOIN a2" {1 1 1 3} + 7 "SELECT group_concat(three, ''), a1.* FROM a1 NATURAL JOIN a2" {12 1 1} } # EVIDENCE-OF: R-04486-07266 Or, if the dataset contains zero rows, then @@ -1128,7 +1128,7 @@ 2.1 "SELECT up FROM c1 GROUP BY up HAVING down>10" {y} 2.2 "SELECT up FROM c1 GROUP BY up HAVING up='y'" {y} - 2.3 "SELECT i, j FROM c2 GROUP BY i>4 HAVING i>6" {9 36} + 2.3 "SELECT i, j FROM c2 GROUP BY i>4 HAVING j>6" {5 10} } # EVIDENCE-OF: R-23927-54081 Each expression in the result-set is then @@ -1154,12 +1154,12 @@ # for the same row. # do_select_tests e_select-4.15 { - 1 "SELECT i, j FROM c2 GROUP BY i%2" {8 28 9 36} - 2 "SELECT i, j FROM c2 GROUP BY i%2 HAVING j<30" {8 28} - 3 "SELECT i, j FROM c2 GROUP BY i%2 HAVING j>30" {9 36} - 4 "SELECT i, j FROM c2 GROUP BY i%2 HAVING j>30" {9 36} + 1 "SELECT i, j FROM c2 GROUP BY i%2" {2 1 1 0} + 2 "SELECT i, j FROM c2 GROUP BY i%2 HAVING j<30" {2 1 1 0} + 3 "SELECT i, j FROM c2 GROUP BY i%2 HAVING j>30" {} + 4 "SELECT i, j FROM c2 GROUP BY i%2 HAVING j>30" {} 5 "SELECT count(*), i, k FROM c2 NATURAL JOIN c3 GROUP BY substr(k, 1, 1)" - {2 5 boron 2 2 helium 1 3 lithium} + {2 4 beryllium 2 1 hydrogen 1 3 lithium} } # EVIDENCE-OF: R-19334-12811 Each group of input dataset rows diff -Nru lxd-3.0.2/dist/sqlite/test/fkey2.test lxd-3.0.3/dist/sqlite/test/fkey2.test --- lxd-3.0.2/dist/sqlite/test/fkey2.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/fkey2.test 2018-11-22 20:54:16.000000000 +0000 @@ -983,7 +983,9 @@ # Test the sqlite_rename_parent() function directly. # proc test_rename_parent {zCreate zOld zNew} { - db eval {SELECT sqlite_rename_parent($zCreate, $zOld, $zNew)} + db eval {SELECT sqlite_rename_table( + 'main', 'table', 't1', $zCreate, $zOld, $zNew, 0 + )} } do_test fkey2-14.2.1.1 { test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3 diff -Nru lxd-3.0.2/dist/sqlite/test/fts3ao.test lxd-3.0.3/dist/sqlite/test/fts3ao.test --- lxd-3.0.2/dist/sqlite/test/fts3ao.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/fts3ao.test 2018-11-22 20:54:16.000000000 +0000 @@ -93,7 +93,7 @@ } } {1 {SQL logic error}} do_test fts3ao-2.10 { - execsql { SELECT rowid, snippet(fts_t1) FROM fts_t1 WHERE a MATCH 'four'; } + execsql { SELECT rowid, snippet( fts_t1 ) FROM fts_t1 WHERE a MATCH 'four'; } } {1 {one three four}} do_test fts3ao-2.11 { execsql { SELECT tbl_name FROM sqlite_master WHERE type = 'table'} diff -Nru lxd-3.0.2/dist/sqlite/test/fts3corrupt4.test lxd-3.0.3/dist/sqlite/test/fts3corrupt4.test --- lxd-3.0.2/dist/sqlite/test/fts3corrupt4.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/fts3corrupt4.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,147 @@ +# 2006 September 9 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#************************************************************************* +# This file implements regression tests for SQLite library. The +# focus of this script is testing the FTS3 module. +# +# $Id: fts3aa.test,v 1.1 2007/08/20 17:38:42 shess Exp $ +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix fts3corrupt4 + +# If SQLITE_ENABLE_FTS3 is defined, omit this file. +ifcapable !fts3 { + finish_test + return +} + +do_execsql_test 1.0 { + BEGIN; + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft VALUES('aback'); + INSERT INTO ft VALUES('abaft'); + INSERT INTO ft VALUES('abandon'); + COMMIT; +} + +proc blob {a} { binary decode hex $a } +db func blob blob + +do_execsql_test 1.1 { + SELECT quote(root) FROM ft_segdir; +} {X'0005616261636B03010200030266740302020003046E646F6E03030200'} + +do_execsql_test 1.2 { + UPDATE ft_segdir SET root = blob( + '0005616261636B03010200 FFFFFFFF0702 66740302020003046E646F6E03030200' + ); +} + +do_catchsql_test 1.3 { + SELECT * FROM ft WHERE ft MATCH 'abandon'; +} {1 {database disk image is malformed}} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 2.0.0 { + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft(ft) VALUES('nodesize=32'); +} +do_test 2.0.1 { + for {set i 0} {$i < 12} {incr i} { + execsql { + BEGIN; + INSERT INTO ft VALUES('abc' || $i); + INSERT INTO ft VALUES('abc' || $i || 'x' ); + INSERT INTO ft VALUES('abc' || $i || 'xx' ); + COMMIT + } + } + execsql { + SELECT count(*) FROM ft_segdir; + SELECT count(*) FROM ft_segments; + } +} {12 0} + +do_execsql_test 2.1 { + INSERT INTO ft(ft) VALUES('merge=1,4'); + SELECT count(*) FROM ft_segdir; + SELECT count(*) FROM ft_segments; +} {12 3} + +do_execsql_test 2.2 { + SELECT quote(block) FROM ft_segments WHERE blockid=2 +} {X'00056162633130031F0200'} + +db func blob blob +do_execsql_test 2.3.1 { + UPDATE ft_segments SET block = + blob('00056162633130031F0200 FFFFFFFF07FF55 66740302020003046E646F6E03030200') + WHERE blockid=2; +} {} +do_catchsql_test 2.3.2 { + INSERT INTO ft(ft) VALUES('merge=1,4'); +} {1 {database disk image is malformed}} + +do_execsql_test 2.4.1 { + UPDATE ft_segments SET block = + blob('00056162633130031F0200 02FFFFFFFF07 66740302020003046E646F6E03030200') + WHERE blockid=2; +} {} +do_catchsql_test 2.4.2 { + INSERT INTO ft(ft) VALUES('merge=1,4'); +} {1 {database disk image is malformed}} + +do_execsql_test 2.5.1 { + UPDATE ft_segments SET block = + blob('00056162633130031F0200 0202 6674 FFFFFF070302020003046E646F6E030200') + WHERE blockid=2; +} {} +do_catchsql_test 2.5.2 { + INSERT INTO ft(ft) VALUES('merge=1,4'); +} {1 {database disk image is malformed}} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 3.0.0 { + CREATE VIRTUAL TABLE ft USING fts3; + INSERT INTO ft(ft) VALUES('nodesize=32'); +} +do_test 3.0.1 { + execsql BEGIN + for {set i 0} {$i < 20} {incr i} { + execsql { INSERT INTO ft VALUES('abc' || $i) } + } + execsql { + COMMIT; + SELECT count(*) FROM ft_segdir; + SELECT count(*) FROM ft_segments; + } +} {1 5} + +do_execsql_test 3.1 { + SELECT quote(root) FROM ft_segdir +} {X'0101056162633132040136030132030136'} + +db func blob blob +do_execsql_test 3.2 { + UPDATE ft_segdir + SET root = blob('0101056162633132FFFFFFFF070236030132030136'); +} + +do_catchsql_test 3.1 { + SELECT * FROM ft WHERE ft MATCH 'abc20' +} {1 {database disk image is malformed}} + +finish_test + + diff -Nru lxd-3.0.2/dist/sqlite/test/fuzzcheck.c lxd-3.0.3/dist/sqlite/test/fuzzcheck.c --- lxd-3.0.2/dist/sqlite/test/fuzzcheck.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/fuzzcheck.c 2018-11-22 20:54:16.000000000 +0000 @@ -806,7 +806,7 @@ " --export-db DIR Write databases to files(s) in DIR. Works with --dbid\n" " --export-sql DIR Write SQL to file(s) in DIR. Also works with --sqlid\n" " --help Show this help text\n" -" -q|--quiet Reduced output\n" +" --info Show information about SOURCE-DB w/o running tests\n" " --limit-mem N Limit memory used by test SQLite instance to N bytes\n" " --limit-vdbe Panic if any test runs for more than 100,000 cycles\n" " --load-sql ARGS... Load SQL scripts fron files into SOURCE-DB\n" @@ -816,6 +816,7 @@ " --native-malloc Turn off MEMSYS3/5 and Lookaside\n" " --oss-fuzz Enable OSS-FUZZ testing\n" " --prng-seed N Seed value for the PRGN inside of SQLite\n" +" -q|--quiet Reduced output\n" " --rebuild Rebuild and vacuum the database file\n" " --result-trace Show the results of each SQL command\n" " --sqlid N Use only SQL where sqlid=N\n" @@ -841,6 +842,7 @@ int nativeFlag = 0; /* --native-vfs */ int rebuildFlag = 0; /* --rebuild */ int vdbeLimitFlag = 0; /* --limit-vdbe */ + int infoFlag = 0; /* --info */ int timeoutTest = 0; /* undocumented --timeout-test flag */ int runFlags = 0; /* Flags sent to runSql() */ char *zMsg = 0; /* Add this message */ @@ -897,6 +899,9 @@ showHelp(); return 0; }else + if( strcmp(z,"info")==0 ){ + infoFlag = 1; + }else if( strcmp(z,"limit-mem")==0 ){ #if !defined(SQLITE_ENABLE_MEMSYS3) && !defined(SQLITE_ENABLE_MEMSYS5) fatalError("the %s option requires -DSQLITE_ENABLE_MEMSYS5 or _MEMSYS3", @@ -996,6 +1001,42 @@ fatalError("cannot open source database %s - %s", azSrcDb[iSrcDb], sqlite3_errmsg(db)); } + + /* Print the description, if there is one */ + if( infoFlag ){ + int n; + zDbName = azSrcDb[iSrcDb]; + i = (int)strlen(zDbName) - 1; + while( i>0 && zDbName[i-1]!='/' && zDbName[i-1]!='\\' ){ i--; } + zDbName += i; + sqlite3_prepare_v2(db, "SELECT msg FROM readme", -1, &pStmt, 0); + if( pStmt && sqlite3_step(pStmt)==SQLITE_ROW ){ + printf("%s: %s", zDbName, sqlite3_column_text(pStmt,0)); + }else{ + printf("%s: (empty \"readme\")", zDbName); + } + sqlite3_finalize(pStmt); + sqlite3_prepare_v2(db, "SELECT count(*) FROM db", -1, &pStmt, 0); + if( pStmt + && sqlite3_step(pStmt)==SQLITE_ROW + && (n = sqlite3_column_int(pStmt,0))>0 + ){ + printf(" - %d DBs", n); + } + sqlite3_finalize(pStmt); + sqlite3_prepare_v2(db, "SELECT count(*) FROM xsql", -1, &pStmt, 0); + if( pStmt + && sqlite3_step(pStmt)==SQLITE_ROW + && (n = sqlite3_column_int(pStmt,0))>0 + ){ + printf(" - %d scripts", n); + } + sqlite3_finalize(pStmt); + printf("\n"); + sqlite3_close(db); + continue; + } + rc = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS db(\n" " dbid INTEGER PRIMARY KEY, -- database id\n" Binary files /tmp/tmpFI_IKS/h2sb17DNh6/lxd-3.0.2/dist/sqlite/test/fuzzdata2.db and /tmp/tmpFI_IKS/U7GtJmTrmm/lxd-3.0.3/dist/sqlite/test/fuzzdata2.db differ Binary files /tmp/tmpFI_IKS/h2sb17DNh6/lxd-3.0.2/dist/sqlite/test/fuzzdata4.db and /tmp/tmpFI_IKS/U7GtJmTrmm/lxd-3.0.3/dist/sqlite/test/fuzzdata4.db differ Binary files /tmp/tmpFI_IKS/h2sb17DNh6/lxd-3.0.2/dist/sqlite/test/fuzzdata5.db and /tmp/tmpFI_IKS/U7GtJmTrmm/lxd-3.0.3/dist/sqlite/test/fuzzdata5.db differ diff -Nru lxd-3.0.2/dist/sqlite/test/in6.test lxd-3.0.3/dist/sqlite/test/in6.test --- lxd-3.0.2/dist/sqlite/test/in6.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/in6.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,80 @@ +# 2018-06-07 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# A multi-key index that uses an IN operator on one of the keys other +# than the left-most key is able to abort the IN-operator loop early +# if key terms further to the left do not match. +# +# Call this the "multikey-IN-operator early-out optimization" or +# just "IN-early-out" optimization for short. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix in6 + +do_test in6-1.1 { + db eval { + CREATE TABLE t1(a,b,c,d); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b,c,d) + SELECT 100, 200+x/2, 300+x/5, x FROM c; + CREATE INDEX t1abc ON t1(a,b,c); + ANALYZE; + UPDATE sqlite_stat1 SET stat='1000000 500000 500 50'; + ANALYZE sqlite_master; + } + set ::sqlite_search_count 0 + db eval { + SELECT d FROM t1 + WHERE a=99 + AND b IN (200,205,201,204) + AND c IN (304,302,309,308); + } +} {} +do_test in6-1.2 { + set ::sqlite_search_count +} {0} ;# Without the IN-early-out optimization, this value would be 15 + +# The multikey-IN-operator early-out optimization does not apply +# when the IN operator is on the left-most column of the index. +# +do_test in6-1.3 { + db eval { + EXPLAIN + SELECT d FROM t1 + WHERE a IN (98,99,100,101) + AND b=200 AND c=300; + } +} {~/(IfNoHope|SeekHit)/} + +set sqlite_search_count 0 +do_execsql_test in6-1.4 { + SELECT d FROM t1 + WHERE a=100 + AND b IN (200,201,202,204) + AND c IN (300,302,301,305) + ORDER BY +d; +} {1 2 3 4 5 8 9} +do_test in6-1.5 { + set ::sqlite_search_count +} {39} + +do_execsql_test in6-2.1 { + CREATE TABLE t2(e INT UNIQUE, f TEXT); + SELECT d, f FROM t1 LEFT JOIN t2 ON (e=d) + WHERE a=100 + AND b IN (200,201,202,204) + AND c IN (300,302,301,305) + ORDER BY +d; +} {1 {} 2 {} 3 {} 4 {} 5 {} 8 {} 9 {}} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/insert.test lxd-3.0.3/dist/sqlite/test/insert.test --- lxd-3.0.2/dist/sqlite/test/insert.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/insert.test 2018-11-22 20:54:16.000000000 +0000 @@ -435,6 +435,19 @@ SELECT * FROM t12c; } {one xyzzy two} +# 2018-06-11. From OSSFuzz. A column cache malfunction in +# the constraint checking on an index of expressions causes +# an assertion fault in a REPLACE. Ticket +# https://www.sqlite.org/src/info/c2432ef9089ee73b +# +do_execsql_test insert-13.1 { + DROP TABLE IF EXISTS t13; + CREATE TABLE t13(a INTEGER PRIMARY KEY,b UNIQUE); + CREATE INDEX t13x1 ON t13(-b=b); + INSERT INTO t13 VALUES(1,5),(6,2); + REPLACE INTO t13 SELECT b,0 FROM t13; + SELECT * FROM t13 ORDER BY +b; +} {2 0 6 2 1 5} integrity_check insert-99.0 diff -Nru lxd-3.0.2/dist/sqlite/test/json103.test lxd-3.0.3/dist/sqlite/test/json103.test --- lxd-3.0.2/dist/sqlite/test/json103.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/json103.test 2018-11-22 20:54:16.000000000 +0000 @@ -75,4 +75,24 @@ FROM t1; } {{[1,"abc"]} {[{"x":1},{"x":"abc"}]}} +# json_group_array() and json_group_object() work as window functions. +# +ifcapable windowfunc { + do_execsql_test json103-400 { + CREATE TABLE t4(x); + INSERT INTO t4 VALUES + (1), + ('a,b'), + (3), + ('x"y'), + (5), + (6), + (7); + SELECT json_group_array(x) OVER (ROWS 2 PRECEDING) FROM t4; + } {{[1]} {[1,"a,b"]} {[1,"a,b",3]} {["a,b",3,"x\"y"]} {[3,"x\"y",5]} {["x\"y",5,6]} {[5,6,7]}} + do_execsql_test json103-410 { + SELECT json_group_object(rowid, x) OVER (ROWS 2 PRECEDING) FROM t4; + } {{{"1":1}} {{"1":1,"2":"a,b"}} {{"1":1,"2":"a,b","3":3}} {{"2":"a,b","3":3,"4":"x\"y"}} {{"3":3,"4":"x\"y","5":5}} {{"4":"x\"y","5":5,"6":6}} {{"5":5,"6":6,"7":7}}} +} + finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/like3.test lxd-3.0.3/dist/sqlite/test/like3.test --- lxd-3.0.2/dist/sqlite/test/like3.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/like3.test 2018-11-22 20:54:16.000000000 +0000 @@ -112,4 +112,68 @@ SELECT quote(x) FROM t4 WHERE x LIKE 'ab%' ORDER BY +x ASC; } {'abc' 'abd' 'abe' X'616263' X'616264' X'616265'} +# 2018-09-10 ticket https://www.sqlite.org/src/tktview/c94369cae9b561b1f996 +# The like optimization fails for a column with numeric affinity if +# the pattern '/%' or begins with the escape character. +# +do_execsql_test like3-5.100 { + CREATE TABLE t5a(x INT UNIQUE COLLATE nocase); + INSERT INTO t5a(x) VALUES('/abc'),(123),(-234); + SELECT x FROM t5a WHERE x LIKE '/%'; +} {/abc} +do_eqp_test like3-5.101 { + SELECT x FROM t5a WHERE x LIKE '/%'; +} { + QUERY PLAN + `--SCAN TABLE t5a +} +do_execsql_test like3-5.110 { + SELECT x FROM t5a WHERE x LIKE '/a%'; +} {/abc} +do_eqp_test like3-5.111 { + SELECT x FROM t5a WHERE x LIKE '/a%'; +} { + QUERY PLAN + `--SEARCH TABLE t5a USING COVERING INDEX sqlite_autoindex_t5a_1 (x>? AND x? AND x10 && $z<100} } {1} do_test lookaside-2.3 { + db eval {SELECT 1} sqlite3_db_config_lookaside db 0 50 50 } {5} ;# SQLITE_BUSY do_test lookaside-2.4 { diff -Nru lxd-3.0.2/dist/sqlite/test/mmap1.test lxd-3.0.3/dist/sqlite/test/mmap1.test --- lxd-3.0.2/dist/sqlite/test/mmap1.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/mmap1.test 2018-11-22 20:54:16.000000000 +0000 @@ -276,5 +276,48 @@ sqlite3_finalize $::STMT } SQLITE_OK +# +# The "6.*" tests are designed to test the interaction of mmap with file +# truncation (e.g. on Win32) via the VACUUM command. +# +forcedelete test2.db +sqlite3 db2 test2.db +do_test 6.0 { + db2 eval { + PRAGMA auto_vacuum = 0; + PRAGMA page_size = 4096; + } +} {} +do_test 6.1 { + db2 eval { + CREATE TABLE t1(x); + INSERT INTO t1(x) VALUES(randomblob(1000000)); + } +} {} +do_test 6.2 { + db2 eval { + PRAGMA mmap_size = 1048576; + } +} {1048576} +do_test 6.3 { + expr {[file size test2.db] > 1000000} +} {1} +do_test 6.4 { + db2 eval { + DELETE FROM t1; + } +} {} +do_test 6.5 { + expr {[file size test2.db] > 1000000} +} {1} +do_test 6.6 { + db2 eval { + VACUUM; + } +} {} +do_test 6.7 { + expr {[file size test2.db] < 1000000} +} {1} +db2 close finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/normalize.test lxd-3.0.3/dist/sqlite/test/normalize.test --- lxd-3.0.2/dist/sqlite/test/normalize.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/normalize.test 2018-11-22 20:54:16.000000000 +0000 @@ -65,6 +65,9 @@ {/* IN list exactly 5 bytes long */ SELECT * FROM t1 WHERE x IN (1,2,3);} {select*from t1 where x in(?,?,?);} + 180 + { } + {} } { do_test $tnum [list sqlite3_normalize $sql] $norm } diff -Nru lxd-3.0.2/dist/sqlite/test/orderby5.test lxd-3.0.3/dist/sqlite/test/orderby5.test --- lxd-3.0.2/dist/sqlite/test/orderby5.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/orderby5.test 2018-11-22 20:54:16.000000000 +0000 @@ -83,7 +83,7 @@ do_execsql_test 2.1b { EXPLAIN QUERY PLAN - SELECT * FROM t1 WHERE likelihood(a=0, 0.05) ORDER BY a, b, c; + SELECT * FROM t1 WHERE likelihood(a=0, 0.03) ORDER BY a, b, c; } {/B-TREE/} do_execsql_test 2.2 { diff -Nru lxd-3.0.2/dist/sqlite/test/permutations.test lxd-3.0.3/dist/sqlite/test/permutations.test --- lxd-3.0.2/dist/sqlite/test/permutations.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/permutations.test 2018-11-22 20:54:16.000000000 +0000 @@ -105,7 +105,7 @@ all.test async.test quick.test veryquick.test memleak.test permutations.test soak.test fts3.test mallocAll.test rtree.test full.test extraquick.test - session.test + session.test rbu.test }] set allquicktests [test_set $alltests -exclude { @@ -122,7 +122,7 @@ vtab_err.test walslow.test walcrash.test walcrash3.test walthread.test rtree3.test indexfault.test securedel2.test sort3.test sort4.test fts4growth.test fts4growth2.test - bigsort.test rbu.test walprotocol.test mmap4.test fuzzer2.test + bigsort.test walprotocol.test mmap4.test fuzzer2.test walcrash2.test e_fkey.test backup.test fts4merge.test fts4merge2.test fts4merge4.test fts4check.test @@ -255,6 +255,7 @@ fts3am.test fts3an.test fts3ao.test fts3atoken.test fts3auto.test fts3aux1.test fts3aux2.test fts3b.test fts3comp1.test fts3conf.test fts3corrupt2.test fts3corrupt.test + fts3corrupt4.test fts3cov.test fts3c.test fts3defer2.test fts3defer3.test fts3defer.test fts3drop.test fts3d.test fts3e.test fts3expr2.test fts3expr3.test fts3expr4.test fts3expr5.test @@ -283,6 +284,18 @@ -exclude *corrupt* *fault* *big* *fts5aj* ] +test_suite "window" -prefix "" -description { + All window function related tests . +} -files [ + test_set [glob -nocomplain $::testdir/window*.test] +] + +test_suite "alter" -prefix "" -description { + All ALTER function related tests . +} -files [ + test_set [glob -nocomplain $::testdir/alter*.test] +] + test_suite "lsm1" -prefix "" -description { All LSM1 tests. } -files [glob -nocomplain $::testdir/../ext/lsm1/test/*.test] diff -Nru lxd-3.0.2/dist/sqlite/test/pg_common.tcl lxd-3.0.3/dist/sqlite/test/pg_common.tcl --- lxd-3.0.2/dist/sqlite/test/pg_common.tcl 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/pg_common.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,146 @@ +# 2018 May 19 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +package require sqlite3 +package require Pgtcl + +set db [pg_connect -conninfo "dbname=postgres user=postgres password=postgres"] +sqlite3 sqlite "" + +proc execsql {sql} { + + set lSql [list] + set frag "" + while {[string length $sql]>0} { + set i [string first ";" $sql] + if {$i>=0} { + append frag [string range $sql 0 $i] + set sql [string range $sql $i+1 end] + if {[sqlite complete $frag]} { + lappend lSql $frag + set frag "" + } + } else { + set frag $sql + set sql "" + } + } + if {$frag != ""} { + lappend lSql $frag + } + #puts $lSql + + set ret "" + foreach stmt $lSql { + set res [pg_exec $::db $stmt] + set err [pg_result $res -error] + if {$err!=""} { error $err } + for {set i 0} {$i < [pg_result $res -numTuples]} {incr i} { + if {$i==0} { + set ret [pg_result $res -getTuple 0] + } else { + append ret " [pg_result $res -getTuple $i]" + } + # lappend ret {*}[pg_result $res -getTuple $i] + } + pg_result $res -clear + } + + set ret +} + +proc execsql_test {tn sql} { + set res [execsql $sql] + set sql [string map {string_agg group_concat} $sql] + puts $::fd "do_execsql_test $tn {" + puts $::fd " [string trim $sql]" + puts $::fd "} {$res}" + puts $::fd "" +} + +# Same as [execsql_test], except coerce all results to floating point values +# with two decimal points. +# +proc execsql_float_test {tn sql} { + set F "%.4f" + set T 0.0001 + set res [execsql $sql] + set res2 [list] + foreach r $res { + if {$r != ""} { set r [format $F $r] } + lappend res2 $r + } + + set sql [string trim $sql] +puts $::fd [subst -nocommands { +do_test $tn { + set myres {} + foreach r [db eval {$sql}] { + lappend myres [format $F [set r]] + } + set res2 {$res2} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-$T) || [set r]>([set r2]+$T)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} +}] +} + +proc start_test {name date} { + set dir [file dirname $::argv0] + set output [file join $dir $name.test] + set ::fd [open $output w] +puts $::fd [string trimleft " +# $date +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. +# + +#################################################### +# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED! +#################################################### +"] + puts $::fd {set testdir [file dirname $argv0]} + puts $::fd {source $testdir/tester.tcl} + puts $::fd "set testprefix $name" + puts $::fd "" +} + +proc -- {args} { + puts $::fd "# $args" +} + +proc ========== {args} { + puts $::fd "#[string repeat = 74]" + puts $::fd "" +} + +proc finish_test {} { + puts $::fd finish_test + close $::fd +} + +proc ifcapable {arg} { + puts $::fd "ifcapable $arg { finish_test ; return }" +} + diff -Nru lxd-3.0.2/dist/sqlite/test/releasetest.tcl lxd-3.0.3/dist/sqlite/test/releasetest.tcl --- lxd-3.0.2/dist/sqlite/test/releasetest.tcl 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/releasetest.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -79,6 +79,7 @@ -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_THREADSAFE -DSQLITE_TCL_DEFAULT_FULLMUTEX=1 + -DSQLITE_USER_AUTHENTICATION=1 } "Secure-Delete" { -O2 @@ -127,6 +128,7 @@ -DSQLITE_ENABLE_HIDDEN_COLUMNS -DSQLITE_MAX_ATTACHED=125 -DSQLITE_MUTATION_TEST + --enable-fts5 --enable-json1 } "Fast-One" { -O6 @@ -267,7 +269,7 @@ array set ::Platforms [strip_comments { Linux-x86_64 { "Check-Symbols" checksymbols - "Fast-One" fuzztest + "Fast-One" "fuzztest test" "Debug-One" "mptest test" "Have-Not" test "Secure-Delete" test diff -Nru lxd-3.0.2/dist/sqlite/test/resetdb.test lxd-3.0.3/dist/sqlite/test/resetdb.test --- lxd-3.0.2/dist/sqlite/test/resetdb.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/resetdb.test 2018-11-22 20:54:16.000000000 +0000 @@ -154,5 +154,98 @@ } {0 {1 8192 wal ok}} db2 close +# Reset the database yet again. This time immediately after it is closed +# and reopened. So that the VACUUM is the first statement run. +# +db close +sqlite3 db test.db +do_test 500 { + sqlite3_finalize [ + sqlite3_prepare db "SELECT 1 FROM sqlite_master LIMIT 1" -1 tail + ] + sqlite3_db_config db RESET_DB 1 + db eval VACUUM + sqlite3_db_config db RESET_DB 0 + sqlite3 db2 test.db + catchsql { + PRAGMA page_count; + PRAGMA page_size; + PRAGMA journal_mode; + PRAGMA quick_check; + } db2 +} {0 {1 8192 wal ok}} +db2 close + +#------------------------------------------------------------------------- +reset_db +sqlite3 db2 test.db +do_execsql_test 600 { + PRAGMA journal_mode = wal; + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1), (2), (3), (4); +} {wal} + +do_execsql_test -db db2 610 { + SELECT * FROM t1 +} {1 2 3 4} + +do_test 620 { + set res [list] + db2 eval {SELECT a FROM t1} { + lappend res $a + if {$a==3} { + sqlite3_db_config db RESET_DB 1 + db eval VACUUM + sqlite3_db_config db RESET_DB 0 + } + } + + set res +} {1 2 3 4} + +do_execsql_test -db db2 630 { + SELECT * FROM sqlite_master +} {} + +#------------------------------------------------------------------------- +db2 close +reset_db + +do_execsql_test 700 { + PRAGMA page_size=512; + PRAGMA auto_vacuum = 0; + CREATE TABLE t1(a,b,c); + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1bc ON t1(b,c); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<10) + INSERT INTO t1(a,b,c) SELECT x, randomblob(100),randomblob(100) FROM c; + PRAGMA page_count; + PRAGMA integrity_check; +} {19 ok} + +if {[nonzero_reserved_bytes]} { + finish_test + return +} + +do_execsql_test 710 { + UPDATE sqlite_dbpage SET data= + X'53514C69746520666F726D61742033000200030100402020000000000000001300000000000000000000000300000004000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000D00000003017C0001D801AC017C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E03061715110145696E6465787431626374310443524541544520494E4445582074316263204F4E20743128622C63292A0206171311013F696E64657874316174310343524541544520494E44455820743161204F4E20743128612926010617111101397461626C657431743102435245415445205441424C4520743128612C622C6329' WHERE pgno=1; +} + +do_execsql_test 720 { + PRAGMA integrity_check; +} {ok} + +do_test 730 { + sqlite3_db_config db RESET_DB 1 + db eval VACUUM + sqlite3_db_config db RESET_DB 0 +} {0} + +do_execsql_test 740 { + PRAGMA page_count; + PRAGMA integrity_check; +} {1 ok} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/rowvalue4.test lxd-3.0.3/dist/sqlite/test/rowvalue4.test --- lxd-3.0.2/dist/sqlite/test/rowvalue4.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/rowvalue4.test 2018-11-22 20:54:16.000000000 +0000 @@ -224,7 +224,7 @@ WITH i(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM i WHERE i<1000 ) - INSERT INTO d2 SELECT i/3, i%3, i/3 FROM i; + INSERT INTO d2 SELECT i/100, i%100, i/100 FROM i; ANALYZE; } diff -Nru lxd-3.0.2/dist/sqlite/test/rowvalue.test lxd-3.0.3/dist/sqlite/test/rowvalue.test --- lxd-3.0.2/dist/sqlite/test/rowvalue.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/rowvalue.test 2018-11-22 20:54:16.000000000 +0000 @@ -546,4 +546,15 @@ SELECT 1 WHERE (2,(2,0)) IS (2,(2,0)); } {0 1} +# 2018-11-03: Ticket https://www.sqlite.org/src/info/1a84668dcfdebaf1 +# Assertion fault when doing row-value operations on a primary key +# containing duplicate columns. +# +do_execsql_test 21.0 { + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a,b,PRIMARY KEY(b,b)); + INSERT INTO t1 VALUES(1,2),(3,4),(5,6); + SELECT * FROM t1 WHERE (a,b) IN (VALUES(1,2)); +} {1 2} + finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/schemafault.test lxd-3.0.3/dist/sqlite/test/schemafault.test --- lxd-3.0.2/dist/sqlite/test/schemafault.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/schemafault.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,31 @@ +# 2018-08-19 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# Test OOM injection in schema-related operations. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +source $testdir/malloc_common.tcl +set testprefix schemafault + +do_execsql_test 1.0 { + CREATE TABLE t2(aaa INTTT); + CREATE VIEW v2(xxx , yyy) AS SELECT aaa, aaa+1 FROM t2; +} + +do_faultsim_test 1 -faults oom-* -prep { +} -body { + execsql { SELECT * FROM v2 } +} -test { + faultsim_test_result {0 {}} +} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/select5.test lxd-3.0.3/dist/sqlite/test/select5.test --- lxd-3.0.2/dist/sqlite/test/select5.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/select5.test 2018-11-22 20:54:16.000000000 +0000 @@ -154,7 +154,7 @@ execsql { SELECT a, b FROM t2 GROUP BY a; } -} {1 4 6 4} +} {1 2 6 4} # Test rendering of columns for the GROUP BY clause. # diff -Nru lxd-3.0.2/dist/sqlite/test/selectD.test lxd-3.0.3/dist/sqlite/test/selectD.test --- lxd-3.0.2/dist/sqlite/test/selectD.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/selectD.test 2018-11-22 20:54:16.000000000 +0000 @@ -169,6 +169,6 @@ WHERE x1.d>5 GROUP BY x1.d) AS x2 ON t41.b=x2.d; -} {/*SEARCH SUBQUERY 0x* AS x2 USING AUTOMATIC*/} +} {/*SEARCH SUBQUERY * AS x2 USING AUTOMATIC*/} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/server1.test lxd-3.0.3/dist/sqlite/test/server1.test --- lxd-3.0.2/dist/sqlite/test/server1.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/server1.test 2018-11-22 20:54:16.000000000 +0000 @@ -26,6 +26,15 @@ return } +# This test does not work on older PPC Macs due to problems in the +# pthreads library. So skip it. +# +if {$tcl_platform(machine)=="Power Macintosh" && + $tcl_platform(byteOrder)=="bigEndian"} { + finish_test + return +} + # The sample server implementation does not work right when memory # management is enabled. # diff -Nru lxd-3.0.2/dist/sqlite/test/shell1.test lxd-3.0.3/dist/sqlite/test/shell1.test --- lxd-3.0.2/dist/sqlite/test/shell1.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/shell1.test 2018-11-22 20:54:16.000000000 +0000 @@ -637,6 +637,19 @@ catchcmd "test.db" ".stats OFF BAD" } {1 {Usage: .stats ?on|off?}} +# Ticket 7be932dfa60a8a6b3b26bcf7623ec46e0a403ddb 2018-06-07 +# Adverse interaction between .stats and .eqp +# +do_test shell1-3.23b.5 { + catchcmd "test.db" [string map {"\n " "\n"} { + CREATE TEMP TABLE t1(x); + INSERT INTO t1 VALUES(1),(2); + .stats on + .eqp full + SELECT * FROM t1; + }] +} {/1\n2\n/} + # .tables ?TABLE? List names of tables # If TABLE specified, only list tables matching # LIKE pattern TABLE. diff -Nru lxd-3.0.2/dist/sqlite/test/skipscan1.test lxd-3.0.3/dist/sqlite/test/skipscan1.test --- lxd-3.0.2/dist/sqlite/test/skipscan1.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/skipscan1.test 2018-11-22 20:54:16.000000000 +0000 @@ -337,4 +337,12 @@ SELECT * FROM t9a WHERE b IN (SELECT x FROM t9b WHERE y!=5); } {/USING INDEX t9a_ab .ANY.a. AND b=./} + +optimization_control db skip-scan 0 +do_execsql_test skipscan1-9.3 { + EXPLAIN QUERY PLAN + SELECT * FROM t9a WHERE b IN (SELECT x FROM t9b WHERE y!=5); +} {/{SCAN TABLE t9a}/} +optimization_control db skip-scan 1 + finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/snapshot2.test lxd-3.0.3/dist/sqlite/test/snapshot2.test --- lxd-3.0.2/dist/sqlite/test/snapshot2.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/snapshot2.test 2018-11-22 20:54:16.000000000 +0000 @@ -110,7 +110,7 @@ execsql {SELECT * FROM sqlite_master} execsql BEGIN list [catch { sqlite3_snapshot_open_blob db main $snap } msg] $msg -} {1 SQLITE_BUSY_SNAPSHOT} +} {1 SQLITE_ERROR_SNAPSHOT} do_test 2.3 { execsql COMMIT @@ -134,7 +134,7 @@ sqlite3_snapshot_recover db main execsql BEGIN list [catch { sqlite3_snapshot_open_blob db main $snap } msg] $msg -} {1 SQLITE_BUSY_SNAPSHOT} +} {1 SQLITE_ERROR_SNAPSHOT} #------------------------------------------------------------------------- # Check that calling sqlite3_snapshot_recover() does not confuse the @@ -234,7 +234,7 @@ execsql { INSERT INTO t2 VALUES('jkl') } execsql BEGIN db2 list [catch { sqlite3_snapshot_open_blob db2 main $snap } msg] $msg -} {1 SQLITE_BUSY_SNAPSHOT} +} {1 SQLITE_ERROR_SNAPSHOT} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/snapshot3.test lxd-3.0.3/dist/sqlite/test/snapshot3.test --- lxd-3.0.2/dist/sqlite/test/snapshot3.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/snapshot3.test 2018-11-22 20:54:16.000000000 +0000 @@ -94,7 +94,7 @@ do_test 1.8 { execsql BEGIN db3 list [catch { sqlite3_snapshot_open_blob db3 main $snap } msg] $msg -} {1 SQLITE_BUSY_SNAPSHOT} +} {1 SQLITE_ERROR_SNAPSHOT} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/snapshot4.test lxd-3.0.3/dist/sqlite/test/snapshot4.test --- lxd-3.0.2/dist/sqlite/test/snapshot4.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/snapshot4.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,75 @@ +# 2018 August 28 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. The focus +# of this file is the sqlite3_snapshot_xxx() APIs. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +ifcapable !snapshot {finish_test; return} +set testprefix snapshot4 + +# This test does not work with the inmemory_journal permutation. The reason +# is that each connection opened as part of this permutation executes +# "PRAGMA journal_mode=memory", which fails if the database is in wal mode +# and there are one or more existing connections. +if {[permutation]=="inmemory_journal"} { + finish_test + return +} + +sqlite3 db2 test.db + +do_execsql_test 1.0 { + PRAGMA cache_size = 10; + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, randomblob(400)); + PRAGMA journal_mode = wal; + WITH s(i) AS ( + SELECT 2 UNION ALL SELECT i+1 FROM s WHERE i<100 + ) + INSERT INTO t1 SELECT i, randomblob(400) FROM s; +} {wal} + +do_test 1.1 { + execsql { + BEGIN; + SELECT count(*) FROM t1; + } +} {100} + +do_test 1.2 { + db2 eval { + SELECT count(*) FROM t1; + CREATE TABLE t2(x); + } +} {100} + +do_test 1.3 { + set ::snap [sqlite3_snapshot_get_blob db main] + db2 eval { PRAGMA wal_checkpoint } +} {0 54 52} + +do_test 1.4 { + execsql { + COMMIT; + SELECT * FROM sqlite_master; + BEGIN; + } + sqlite3_snapshot_open_blob db main $::snap + execsql { + SELECT count(*) FROM t1 + } +} {100} + + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/snapshot_fault.test lxd-3.0.3/dist/sqlite/test/snapshot_fault.test --- lxd-3.0.2/dist/sqlite/test/snapshot_fault.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/snapshot_fault.test 2018-11-22 20:54:16.000000000 +0000 @@ -47,7 +47,7 @@ } -test { db2 eval BEGIN if {[catch { sqlite3_snapshot_open db2 main $::snapshot } msg]} { - if {$msg != "SQLITE_BUSY_SNAPSHOT" && $msg != "SQLITE_BUSY"} { + if {$msg != "SQLITE_ERROR_SNAPSHOT" && $msg != "SQLITE_BUSY"} { error "error is $msg" } } else { @@ -98,7 +98,7 @@ db eval BEGIN if {[catch { sqlite3_snapshot_open db main $::snapshot } msg]} { - if {$msg != "SQLITE_BUSY_SNAPSHOT" && $msg != "SQLITE_BUSY"} { + if {$msg != "SQLITE_ERROR_SNAPSHOT" && $msg != "SQLITE_BUSY"} { error "error is $msg" } } else { diff -Nru lxd-3.0.2/dist/sqlite/test/snapshot.test lxd-3.0.3/dist/sqlite/test/snapshot.test --- lxd-3.0.2/dist/sqlite/test/snapshot.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/snapshot.test 2018-11-22 20:54:16.000000000 +0000 @@ -217,9 +217,19 @@ SELECT * FROM t2; } } {a b c d e f} - do_test $tn.3.2.2 { - list [catch {snapshot_open db main $snapshot } msg] $msg + + # Update - it is no longer an error to have a read-transaction open, + # provided there are no active SELECT statements. + do_test $tn.3.2.2a { + db eval "SELECT * FROM t2" { + set res [list [catch {snapshot_open db main $snapshot } msg] $msg] + break + } + set res } {1 SQLITE_ERROR} + do_test $tn.3.2.2b { + snapshot_open db main $snapshot + } {} do_test $tn.3.2.3 { execsql { @@ -231,19 +241,24 @@ } {1 SQLITE_ERROR} do_execsql_test $tn.3.2.4 COMMIT - do_test $tn.3.3.1 { + do_test $tn.3.3.1a { execsql { PRAGMA journal_mode = DELETE } execsql { BEGIN } list [catch {snapshot_open db main $snapshot } msg] $msg } {1 SQLITE_ERROR} + do_test $tn.3.3.1b { + execsql { COMMIT ; BEGIN ; SELECT * FROM t2 } + list [catch {snapshot_open db main $snapshot } msg] $msg + } {1 SQLITE_ERROR} + do_test $tn.$tn.3.3.2 { snapshot_free $snapshot execsql COMMIT } {} #------------------------------------------------------------------------- - # Check that SQLITE_BUSY_SNAPSHOT is returned if the specified snapshot + # Check that SQLITE_ERROR_SNAPSHOT is returned if the specified snapshot # no longer exists because the wal file has been checkpointed. # # 1. Reading a snapshot from the middle of a wal file is not possible @@ -281,7 +296,7 @@ BEGIN; } list [catch {snapshot_open db main $snapshot} msg] $msg - } {1 SQLITE_BUSY_SNAPSHOT} + } {1 SQLITE_ERROR_SNAPSHOT} do_test $tn.4.1.4 { snapshot_free $snapshot execsql COMMIT @@ -312,7 +327,7 @@ BEGIN; } list [catch {snapshot_open db main $snapshot} msg] $msg - } {1 SQLITE_BUSY_SNAPSHOT} + } {1 SQLITE_ERROR_SNAPSHOT} do_test $tn.4.2.4 { snapshot_free $snapshot } {} diff -Nru lxd-3.0.2/dist/sqlite/test/snapshot_up.test lxd-3.0.3/dist/sqlite/test/snapshot_up.test --- lxd-3.0.2/dist/sqlite/test/snapshot_up.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/snapshot_up.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,184 @@ +# 2018 August 6 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# Tests for calling sqlite3_snapshot_open() when there is already +# a read transaction open on the database. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +ifcapable !snapshot {finish_test; return} +set testprefix snapshot_up + +# This test does not work with the inmemory_journal permutation. The reason +# is that each connection opened as part of this permutation executes +# "PRAGMA journal_mode=memory", which fails if the database is in wal mode +# and there are one or more existing connections. +if {[permutation]=="inmemory_journal"} { + finish_test + return +} + +do_execsql_test 1.0 { + CREATE TABLE t1(a, b, c); + PRAGMA journal_mode = wal; + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t1 VALUES(7, 8, 9); +} {wal} + +do_test 1.1 { + execsql BEGIN + set ::snap1 [sqlite3_snapshot_get db main] + execsql COMMIT + execsql { INSERT INTO t1 VALUES(10, 11, 12); } + execsql BEGIN + set ::snap2 [sqlite3_snapshot_get db main] + execsql COMMIT + execsql { INSERT INTO t1 VALUES(13, 14, 15); } + execsql BEGIN + set ::snap3 [sqlite3_snapshot_get db main] + execsql COMMIT +} {} + +do_execsql_test 1.2 { + BEGIN; + SELECT * FROM t1 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15} + +do_test 1.3 { + sqlite3_snapshot_open db main $::snap1 + execsql { SELECT * FROM t1 } +} {1 2 3 4 5 6 7 8 9} + +do_test 1.4 { + sqlite3_snapshot_open db main $::snap2 + execsql { SELECT * FROM t1 } +} {1 2 3 4 5 6 7 8 9 10 11 12} + +do_test 1.5 { + sqlite3 db2 test.db + execsql { PRAGMA wal_checkpoint } db2 +} {0 5 4} + +do_execsql_test 1.6 { + SELECT * FROM t1 +} {1 2 3 4 5 6 7 8 9 10 11 12} + +do_test 1.7 { + list [catch { sqlite3_snapshot_open db main $::snap1 } msg] $msg +} {1 SQLITE_ERROR_SNAPSHOT} + +do_execsql_test 1.8 { + SELECT * FROM t1 +} {1 2 3 4 5 6 7 8 9 10 11 12} + +do_test 1.9 { + execsql { COMMIT ; BEGIN } + list [catch { sqlite3_snapshot_open db main $::snap1 } msg] $msg +} {1 SQLITE_ERROR_SNAPSHOT} + +do_test 1.10 { + execsql { COMMIT } + execsql { + PRAGMA wal_checkpoint; + DELETE FROM t1 WHERE a = 1; + } db2 + execsql BEGIN + set ::snap4 [sqlite3_snapshot_get db main] + execsql COMMIT + execsql { + DELETE FROM t1 WHERE a = 4; + } db2 +} {} + +do_test 1.11 { + execsql { + BEGIN; + SELECT * FROM t1 + } +} {7 8 9 10 11 12 13 14 15} +do_test 1.12 { + sqlite3_snapshot_open db main $::snap4 + execsql { SELECT * FROM t1 } +} {4 5 6 7 8 9 10 11 12 13 14 15} + +do_test 1.13 { + list [catch { sqlite3_snapshot_open db main $::snap3 } msg] $msg +} {1 SQLITE_ERROR_SNAPSHOT} +do_test 1.14 { + execsql { SELECT * FROM t1 } +} {4 5 6 7 8 9 10 11 12 13 14 15} + +db close +db2 close +sqlite3 db test.db +do_execsql_test 1.15 { + BEGIN; + SELECT * FROM t1 +} {7 8 9 10 11 12 13 14 15} +do_test 1.16 { + list [catch { sqlite3_snapshot_open db main $::snap4 } msg] $msg +} {1 SQLITE_ERROR_SNAPSHOT} +do_execsql_test 1.17 { COMMIT } + +sqlite3_snapshot_free $::snap1 +sqlite3_snapshot_free $::snap2 +sqlite3_snapshot_free $::snap3 +sqlite3_snapshot_free $::snap4 + +#------------------------------------------------------------------------- +catch { db close } +sqlite3 db test.db +sqlite3 db2 test.db +sqlite3 db3 test.db + +proc xBusy {args} { return 1 } +db3 busy xBusy + +do_test 2.1 { + execsql { INSERT INTO t1 VALUES(16, 17, 18) } db2 + execsql BEGIN + set ::snap1 [sqlite3_snapshot_get db main] + execsql COMMIT + execsql { INSERT INTO t1 VALUES(19, 20, 21) } db2 + execsql BEGIN + set ::snap2 [sqlite3_snapshot_get db main] + execsql COMMIT + set {} {} +} {} + +do_execsql_test -db db2 2.2 { + BEGIN; + INSERT INTO t1 VALUES(19, 20, 21); +} + +do_test 2.3 { + execsql BEGIN + sqlite3_snapshot_open db main $::snap1 + execsql { SELECT * FROM t1 } +} {7 8 9 10 11 12 13 14 15 16 17 18} + +proc xBusy {args} { + set ::res [list [catch { sqlite3_snapshot_open db main $::snap2 } msg] $msg] + return 1 +} +db3 busy xBusy +do_test 2.4 { + execsql {PRAGMA wal_checkpoint = restart} db3 + set ::res +} {1 SQLITE_BUSY} + +sqlite3_snapshot_free $::snap1 +sqlite3_snapshot_free $::snap2 + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/tclsqlite.test lxd-3.0.3/dist/sqlite/test/tclsqlite.test --- lxd-3.0.2/dist/sqlite/test/tclsqlite.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/tclsqlite.test 2018-11-22 20:54:16.000000000 +0000 @@ -17,6 +17,8 @@ # # $Id: tclsqlite.test,v 1.73 2009/03/16 13:19:36 danielk1977 Exp $ +catch {sqlite3} + set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -31,6 +33,11 @@ regsub {really_sqlite3} $msg {sqlite3} msg lappend v $msg } [list 1 "wrong # args: should be \"$r\""] +do_test tcl-1.1.1 { + set v [catch {sqlite3} msg] + regsub {really_sqlite3} $msg {sqlite3} msg + lappend v $msg +} [list 1 "wrong # args: should be \"$r\""] do_test tcl-1.2 { set v [catch {db bogus} msg] lappend v $msg diff -Nru lxd-3.0.2/dist/sqlite/test/tester.tcl lxd-3.0.3/dist/sqlite/test/tester.tcl --- lxd-3.0.2/dist/sqlite/test/tester.tcl 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/tester.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -974,7 +974,9 @@ } set a "\n QUERY PLAN\n" append a [append_graph " " dx cx 0] - return [regsub -all { 0x[A-F0-9]+\y} $a { xxxxxx}] + regsub -all { 0x[A-F0-9]+\y} $a { xxxxxx} a + regsub -all {(MATERIALIZE|CO-ROUTINE|SUBQUERY) \d+\y} $a {\1 xxxxxx} a + return $a } # Helper routine for [query_plan_graph SQL]: diff -Nru lxd-3.0.2/dist/sqlite/test/tkt-c694113d5.test lxd-3.0.3/dist/sqlite/test/tkt-c694113d5.test --- lxd-3.0.2/dist/sqlite/test/tkt-c694113d5.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/tkt-c694113d5.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,36 @@ +# 2018-07-24 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. Specifically, +# it tests that ticket [c694113e50321afdf952e2d1235b08ba663f8399]: +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +do_test tkt-c694113d5.100 { + sqlite3 db :memory: + db eval { + CREATE TABLE t1(a INTEGER PRIMARY KEY); + CREATE TABLE t2(d INTEGER PRIMARY KEY,e,f); + INSERT INTO t1(a) VALUES(1),(2),(3),(4); + } + set answer {} + db eval {SELECT a FROM t1 WHERE NOT EXISTS(SELECT 1 FROM t2 WHERE d=a)} { + if {$a==3} { + lappend answer "CREATE INDEX" + db eval {CREATE INDEX t2e ON t2(e);} + } + lappend answer "a=$a" + } + set answer +} {a=1 a=2 {CREATE INDEX} a=3 a=4} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/trigger7.test lxd-3.0.3/dist/sqlite/test/trigger7.test --- lxd-3.0.2/dist/sqlite/test/trigger7.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/trigger7.test 2018-11-22 20:54:16.000000000 +0000 @@ -113,6 +113,6 @@ db close catch { sqlite3 db test.db } catchsql { DROP TRIGGER t2r5 } -} {1 {malformed database schema (t2r12)}} +} {/1 {malformed database schema .*}/} finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/upsert1.test lxd-3.0.3/dist/sqlite/test/upsert1.test --- lxd-3.0.2/dist/sqlite/test/upsert1.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/upsert1.test 2018-11-22 20:54:16.000000000 +0000 @@ -112,4 +112,103 @@ SELECT * FROM t1; } {1 2} +# 2018-07-11 +# Ticket https://sqlite.org/src/tktview/79cad5e4b2e219dd197242e9e5f4 +# UPSERT leads to a corrupt index. +# +do_execsql_test upsert1-600 { + DROP TABLE t1; + CREATE TABLE t1(b UNIQUE, a INT PRIMARY KEY) WITHOUT ROWID; + INSERT OR IGNORE INTO t1(a) VALUES('1') ON CONFLICT(a) DO NOTHING; + PRAGMA integrity_check; +} {ok} +do_execsql_test upsert1-610 { + DELETE FROM t1; + INSERT OR IGNORE INTO t1(a) VALUES('1'),(1) ON CONFLICT(a) DO NOTHING; + PRAGMA integrity_check; +} {ok} + +# 2018-08-14 +# Ticket https://www.sqlite.org/src/info/908f001483982c43 +# If there are multiple uniqueness contraints, the UPSERT should fire +# if the one constraint it targets fails, regardless of whether or not +# the other constraints pass or fail. In other words, the UPSERT constraint +# should be tested first. +# +do_execsql_test upsert1-700 { + DROP TABLE t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT, c INT, d INT, e INT); + CREATE UNIQUE INDEX t1b ON t1(b); + CREATE UNIQUE INDEX t1e ON t1(e); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(e) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} +do_execsql_test upsert1-710 { + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(a) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} +do_execsql_test upsert1-720 { + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(b) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} +do_execsql_test upsert1-730 { + DROP TABLE t1; + CREATE TABLE t1(a INT, b INT, c INT, d INT, e INT); + CREATE UNIQUE INDEX t1a ON t1(a); + CREATE UNIQUE INDEX t1b ON t1(b); + CREATE UNIQUE INDEX t1e ON t1(e); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(e) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} +do_execsql_test upsert1-740 { + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(a) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} +do_execsql_test upsert1-750 { + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(b) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} +do_execsql_test upsert1-760 { + DROP TABLE t1; + CREATE TABLE t1(a INT PRIMARY KEY, b INT, c INT, d INT, e INT) WITHOUT ROWID; + CREATE UNIQUE INDEX t1a ON t1(a); + CREATE UNIQUE INDEX t1b ON t1(b); + CREATE UNIQUE INDEX t1e ON t1(e); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(e) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} +do_execsql_test upsert1-770 { + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(a) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} +do_execsql_test upsert1-780 { + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(b) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +} {1 2 33 4 5} + + finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/view.test lxd-3.0.3/dist/sqlite/test/view.test --- lxd-3.0.2/dist/sqlite/test/view.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/view.test 2018-11-22 20:54:16.000000000 +0000 @@ -674,5 +674,31 @@ lsort [array names x] } {{} * :1 :2} +do_test view-25.1 { + db eval { + CREATE TABLE t25 (x); + INSERT INTO t25 (x) VALUES (1); + ANALYZE; + } + proc authLogDelete {code arg1 arg2 arg3 arg4 args} { + if {$code=="SQLITE_DELETE" && [string match sqlite_stat* $arg1]} { + # lappend ::log [list $code $arg1 $arg2 $arg3 $arg4 $args] + lappend ::log [list $code $arg1 $arg2 $arg3 $arg4] + } + return SQLITE_OK + } + set log "" + db authorizer ::authLogDelete + db eval {DROP VIEW x1;} + set log +} {} + +set res [list {SQLITE_DELETE sqlite_stat1 {} main {}}] +ifcapable stat4 { lappend res {SQLITE_DELETE sqlite_stat4 {} main {}} } +do_test view-25.2 { + set log "" + db eval {DROP TABLE t25;} + set log +} $res finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/walprotocol2.test lxd-3.0.3/dist/sqlite/test/walprotocol2.test --- lxd-3.0.2/dist/sqlite/test/walprotocol2.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/walprotocol2.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,97 @@ +# 2018 July 4 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +source $testdir/lock_common.tcl +source $testdir/wal_common.tcl +ifcapable !wal {finish_test ; return } + +set testprefix walprotocol2 + +#------------------------------------------------------------------------- +# When recovering the contents of a WAL file, a process obtains the WRITER +# lock, then locks all other bytes before commencing recovery. If it fails +# to lock all other bytes (because some other process is holding a read +# lock) it should retry up to 100 times. Then return SQLITE_PROTOCOL to the +# caller. Test this (test case 1.3). +# +# Also test the effect of hitting an SQLITE_BUSY while attempting to obtain +# the WRITER lock (should be the same). Test case 1.4. +# +do_execsql_test 1.0 { + PRAGMA journal_mode = wal; + CREATE TABLE x(y); + INSERT INTO x VALUES('z'); +} {wal} + +db close + +proc lock_callback {method filename handle lock} { + # puts "$method $filename $handle $lock" +} +testvfs T +T filter xShmLock +T script lock_callback + +sqlite3 db test.db -vfs T +sqlite3 db2 test.db -vfs T + +do_execsql_test 2.0 { + SELECT * FROM x; +} {z} +do_execsql_test -db db2 2.1 { + SELECT * FROM x; +} {z} + +#--------------------------------------------------------------- +# Attempt a "BEGIN EXCLUSIVE" using connection handle [db]. This +# causes SQLite to open a read transaction, then a write transaction. +# Rig the xShmLock() callback so that just before the EXCLUSIVE lock +# for the write transaction is taken, connection [db2] jumps in and +# modifies the database. This causes the "BEGIN EXCLUSIVE" to throw +# an SQLITE_BUSY_SNAPSHOT error. +# +proc lock_callback {method filename handle lock} { + if {$lock=="0 1 lock exclusive"} { + proc lock_callback {method filename handle lock} {} + db2 eval { INSERT INTO x VALUES('y') } + } +} +do_catchsql_test 2.2 { + BEGIN EXCLUSIVE; +} {1 {database is locked}} +do_test 2.3 { + sqlite3_extended_errcode db +} {SQLITE_BUSY} + +#--------------------------------------------------------------- +# Same again, but with a busy-handler. This time, following the +# SQLITE_BUSY_SNAPSHOT error the busy-handler is invoked and then the +# whole thing retried from the beginning. This time it succeeds. +# +proc lock_callback {method filename handle lock} { + if {$lock=="0 1 lock exclusive"} { + proc lock_callback {method filename handle lock} {} + db2 eval { INSERT INTO x VALUES('x') } + } +} +db timeout 10 +do_catchsql_test 2.4 { + BEGIN EXCLUSIVE; +} {0 {}} +do_execsql_test 2.5 { + SELECT * FROM x; + COMMIT; +} {z y x} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/whereL.test lxd-3.0.3/dist/sqlite/test/whereL.test --- lxd-3.0.2/dist/sqlite/test/whereL.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/whereL.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,125 @@ +# 2018-07-26 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. The +# focus of this file is testing the WHERE-clause constant propagation +# optimization. +# +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set ::testprefix whereL + +do_execsql_test 100 { + CREATE TABLE t1(a INT PRIMARY KEY, b, c, d, e); + CREATE TABLE t2(a INT PRIMARY KEY, f, g, h, i); + CREATE TABLE t3(a INT PRIMARY KEY, j, k, l, m); + CREATE VIEW v4 AS SELECT * FROM t2 UNION ALL SELECT * FROM t3; +} +do_eqp_test 110 { + SELECT * FROM t1, v4 WHERE t1.a=?1 AND v4.a=t1.a; +} { + QUERY PLAN + |--MATERIALIZE xxxxxx + | `--COMPOUND QUERY + | |--LEFT-MOST SUBQUERY + | | `--SEARCH TABLE t2 USING INDEX sqlite_autoindex_t2_1 (a=?) + | `--UNION ALL + | `--SEARCH TABLE t3 USING INDEX sqlite_autoindex_t3_1 (a=?) + |--SCAN SUBQUERY xxxxxx + `--SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (a=?) +} + +# The scan of the t1 table goes first since that enables the ORDER BY +# sort to be omitted. This would not be possible without constant +# propagation because without it the t1 table would depend on t3. +# +do_eqp_test 120 { + SELECT * FROM t1, t2, t3 + WHERE t1.a=t2.a AND t2.a=t3.j AND t3.j=5 + ORDER BY t1.a; +} { + QUERY PLAN + |--SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (a=?) + |--SEARCH TABLE t2 USING INDEX sqlite_autoindex_t2_1 (a=?) + `--SCAN TABLE t3 +} + +# Constant propagation in the face of collating sequences: +# +do_execsql_test 200 { + CREATE TABLE c3(x COLLATE binary, y COLLATE nocase, z COLLATE binary); + CREATE INDEX c3x ON c3(x); + INSERT INTO c3 VALUES('ABC', 'ABC', 'abc'); + SELECT * FROM c3 WHERE x=y AND y=z AND z='abc'; +} {ABC ABC abc} + +# If the constants are blindly propagated, as shown in the following +# query, the wrong answer results: +# +do_execsql_test 201 { + SELECT * FROM c3 WHERE x='abc' AND y='abc' AND z='abc'; +} {} + +# Constant propagation caused an incorrect answer in the following +# query. (Reported by Bentley system on 2018-08-09.) +# +do_execsql_test 300 { + CREATE TABLE A(id INTEGER PRIMARY KEY, label TEXT); + CREATE TABLE B(id INTEGER PRIMARY KEY, label TEXT, Aid INTEGER); + CREATE TABLE C( + id INTEGER PRIMARY KEY, + xx INTEGER NOT NULL, + yy INTEGER, + zz INTEGER + ); + CREATE UNIQUE INDEX x2 ON C(yy); + CREATE UNIQUE INDEX x4 ON C(yy, zz); + INSERT INTO A(id) VALUES(1); + INSERT INTO B(id) VALUES(2); + INSERT INTO C(id,xx,yy,zz) VALUES(99,50,1,2); + SELECT 1 + FROM A, + (SELECT id,xx,yy,zz FROM C) subq, + B + WHERE A.id='1' + AND A.id=subq.yy + AND B.id=subq.zz; +} {1} +do_execsql_test 301 { + SELECT 1 + FROM A, + (SELECT id,xx,yy,zz FROM C) subq, + B + WHERE A.id=1 + AND A.id=subq.yy + AND B.id=subq.zz; +} {1} +do_execsql_test 302 { + SELECT 1 + FROM A, + (SELECT id,yy,zz FROM C) subq, + B + WHERE A.id='1' + AND A.id=subq.yy + AND B.id=subq.zz; +} {1} + +# 2018-10-25: Ticket [cf5ed20f] +# Incorrect join result with duplicate WHERE clause constraint. +# +do_execsql_test 400 { + CREATE TABLE x(a, b, c); + CREATE TABLE y(a, b); + INSERT INTO x VALUES (1, 0, 1); + INSERT INTO y VALUES (1, 2); + SELECT x.a FROM x JOIN y ON x.c = y.a WHERE x.b = 1 AND x.b = 1; +} {} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/where.test lxd-3.0.3/dist/sqlite/test/where.test --- lxd-3.0.2/dist/sqlite/test/where.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/where.test 2018-11-22 20:54:16.000000000 +0000 @@ -490,12 +490,12 @@ count { SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,10) ORDER BY 1; } - } {2 1 9 5} + } {2 1 9 4} do_test where-5.15 { count { SELECT * FROM t1 WHERE x IN (1,7) AND y IN (9,16) ORDER BY 1; } - } {2 1 9 3 1 16 9} + } {2 1 9 3 1 16 8} do_test where-5.100 { db eval { SELECT w, x, y FROM t1 WHERE x IN (1,5) AND y IN (9,8,3025,1000,3969) @@ -582,7 +582,7 @@ cksort { SELECT * FROM t3 WHERE b>0 ORDER BY a LIMIT 1 } -} {1 100 4 sort} +} {1 100 4 nosort} ifcapable subquery { do_test where-6.8a { cksort { @@ -1413,4 +1413,17 @@ 4 0 1 } +# 2018-11-05: ticket [https://www.sqlite.org/src/tktview/65eb38f6e46de8c75e188a] +# Incorrect result in LEFT JOIN when STAT4 is enabled. +# +sqlite3 db :memory: +do_execsql_test where-22.1 { + CREATE TABLE t1(a INT); + CREATE INDEX t1a ON t1(a); + INSERT INTO t1(a) VALUES(NULL),(NULL),(42),(NULL),(NULL); + CREATE TABLE t2(dummy INT); + SELECT count(*) FROM t1 LEFT JOIN t2 ON a IS NOT NULL; +} {5} + + finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/window1.test lxd-3.0.3/dist/sqlite/test/window1.test --- lxd-3.0.2/dist/sqlite/test/window1.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window1.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,552 @@ +# 2018 May 8 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix window1 + +ifcapable !windowfunc { + finish_test + return +} + +do_execsql_test 1.0 { + CREATE TABLE t1(a, b, c, d); + INSERT INTO t1 VALUES(1, 2, 3, 4); + INSERT INTO t1 VALUES(5, 6, 7, 8); + INSERT INTO t1 VALUES(9, 10, 11, 12); +} + +do_execsql_test 1.1 { + SELECT sum(b) OVER () FROM t1 +} {18 18 18} + +do_execsql_test 1.2 { + SELECT a, sum(b) OVER () FROM t1 +} {1 18 5 18 9 18} + +do_execsql_test 1.3 { + SELECT a, 4 + sum(b) OVER () FROM t1 +} {1 22 5 22 9 22} + +do_execsql_test 1.4 { + SELECT a + 4 + sum(b) OVER () FROM t1 +} {23 27 31} + +do_execsql_test 1.5 { + SELECT a, sum(b) OVER (PARTITION BY c) FROM t1 +} {1 2 5 6 9 10} + +foreach {tn sql} { + 1 "SELECT sum(b) OVER () FROM t1" + 2 "SELECT sum(b) OVER (PARTITION BY c) FROM t1" + 3 "SELECT sum(b) OVER (ORDER BY c) FROM t1" + 4 "SELECT sum(b) OVER (PARTITION BY d ORDER BY c) FROM t1" + 5 "SELECT sum(b) FILTER (WHERE a>0) OVER (PARTITION BY d ORDER BY c) FROM t1" + 6 "SELECT sum(b) OVER (ORDER BY c RANGE UNBOUNDED PRECEDING) FROM t1" + 7 "SELECT sum(b) OVER (ORDER BY c ROWS 45 PRECEDING) FROM t1" + 8 "SELECT sum(b) OVER (ORDER BY c RANGE CURRENT ROW) FROM t1" + 9 "SELECT sum(b) OVER (ORDER BY c RANGE BETWEEN UNBOUNDED PRECEDING + AND CURRENT ROW) FROM t1" + 10 "SELECT sum(b) OVER (ORDER BY c ROWS BETWEEN UNBOUNDED PRECEDING + AND UNBOUNDED FOLLOWING) FROM t1" +} { + do_test 2.$tn { lindex [catchsql $sql] 0 } 0 +} + +foreach {tn sql} { + 1 "SELECT * FROM t1 WHERE sum(b) OVER ()" + 2 "SELECT * FROM t1 GROUP BY sum(b) OVER ()" + 3 "SELECT * FROM t1 GROUP BY a HAVING sum(b) OVER ()" +} { + do_catchsql_test 3.$tn $sql {1 {misuse of window function sum()}} +} + +do_execsql_test 4.0 { + CREATE TABLE t2(a, b, c); + INSERT INTO t2 VALUES(0, 0, 0); + INSERT INTO t2 VALUES(1, 1, 1); + INSERT INTO t2 VALUES(2, 0, 2); + INSERT INTO t2 VALUES(3, 1, 0); + INSERT INTO t2 VALUES(4, 0, 1); + INSERT INTO t2 VALUES(5, 1, 2); + INSERT INTO t2 VALUES(6, 0, 0); +} + +do_execsql_test 4.1 { + SELECT a, sum(a) OVER (PARTITION BY b) FROM t2; +} { + 0 12 2 12 4 12 6 12 1 9 3 9 5 9 +} + +do_execsql_test 4.2 { + SELECT a, sum(a) OVER (PARTITION BY b) FROM t2 ORDER BY a; +} { + 0 12 1 9 2 12 3 9 4 12 5 9 6 12 +} + +do_execsql_test 4.3 { + SELECT a, sum(a) OVER () FROM t2 ORDER BY a; +} { + 0 21 1 21 2 21 3 21 4 21 5 21 6 21 +} + +do_execsql_test 4.4 { + SELECT a, sum(a) OVER (ORDER BY a) FROM t2; +} { + 0 0 1 1 2 3 3 6 4 10 5 15 6 21 +} + +do_execsql_test 4.5 { + SELECT a, sum(a) OVER (PARTITION BY b ORDER BY a) FROM t2 ORDER BY a +} { + 0 0 1 1 2 2 3 4 4 6 5 9 6 12 +} + +do_execsql_test 4.6 { + SELECT a, sum(a) OVER (PARTITION BY c ORDER BY a) FROM t2 ORDER BY a +} { + 0 0 1 1 2 2 3 3 4 5 5 7 6 9 +} + +do_execsql_test 4.7 { + SELECT a, sum(a) OVER (PARTITION BY b ORDER BY a DESC) FROM t2 ORDER BY a +} { + 0 12 1 9 2 12 3 8 4 10 5 5 6 6 +} + +do_execsql_test 4.8 { + SELECT a, + sum(a) OVER (PARTITION BY b ORDER BY a DESC), + sum(a) OVER (PARTITION BY c ORDER BY a) + FROM t2 ORDER BY a +} { + 0 12 0 + 1 9 1 + 2 12 2 + 3 8 3 + 4 10 5 + 5 5 7 + 6 6 9 +} + +do_execsql_test 4.9 { + SELECT a, + sum(a) OVER (ORDER BY a), + avg(a) OVER (ORDER BY a) + FROM t2 ORDER BY a +} { + 0 0 0.0 + 1 1 0.5 + 2 3 1.0 + 3 6 1.5 + 4 10 2.0 + 5 15 2.5 + 6 21 3.0 +} + +do_execsql_test 4.10.1 { + SELECT a, + count() OVER (ORDER BY a DESC), + group_concat(a, '.') OVER (ORDER BY a DESC) + FROM t2 ORDER BY a DESC +} { + 6 1 6 + 5 2 6.5 + 4 3 6.5.4 + 3 4 6.5.4.3 + 2 5 6.5.4.3.2 + 1 6 6.5.4.3.2.1 + 0 7 6.5.4.3.2.1.0 +} + +do_execsql_test 4.10.2 { + SELECT a, + count(*) OVER (ORDER BY a DESC), + group_concat(a, '.') OVER (ORDER BY a DESC) + FROM t2 ORDER BY a DESC +} { + 6 1 6 + 5 2 6.5 + 4 3 6.5.4 + 3 4 6.5.4.3 + 2 5 6.5.4.3.2 + 1 6 6.5.4.3.2.1 + 0 7 6.5.4.3.2.1.0 +} + +do_catchsql_test 5.1 { + SELECT ntile(0) OVER (ORDER BY a) FROM t2; +} {1 {argument of ntile must be a positive integer}} +do_catchsql_test 5.2 { + SELECT ntile(-1) OVER (ORDER BY a) FROM t2; +} {1 {argument of ntile must be a positive integer}} +do_catchsql_test 5.3 { + SELECT ntile('zbc') OVER (ORDER BY a) FROM t2; +} {1 {argument of ntile must be a positive integer}} +do_execsql_test 5.4 { + CREATE TABLE t4(a, b); + SELECT ntile(1) OVER (ORDER BY a) FROM t4; +} {} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 6.1 { + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(7), (6), (5), (4), (3), (2), (1); + + CREATE TABLE t2(x); + INSERT INTO t2 VALUES('b'), ('a'); + + SELECT x, count(*) OVER (ORDER BY x) FROM t1; +} {1 1 2 2 3 3 4 4 5 5 6 6 7 7} + +do_execsql_test 6.2 { + SELECT * FROM t2, (SELECT x, count(*) OVER (ORDER BY x) FROM t1); +} { + b 1 1 b 2 2 b 3 3 b 4 4 b 5 5 b 6 6 b 7 7 + a 1 1 a 2 2 a 3 3 a 4 4 a 5 5 a 6 6 a 7 7 +} + +do_catchsql_test 6.3 { + SELECT x, lag(x) FILTER (WHERE (x%2)=0) OVER w FROM t1 + WINDOW w AS (ORDER BY x) +} {1 {FILTER clause may only be used with aggregate window functions}} + +#------------------------------------------------------------------------- +# Attempt to use a window function as an aggregate. And other errors. +# +reset_db +do_execsql_test 7.0 { + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + INSERT INTO t1 VALUES(7, 8); + INSERT INTO t1 VALUES(9, 10); +} + +do_catchsql_test 7.1.1 { + SELECT nth_value(x, 1) FROM t1; +} {1 {misuse of window function nth_value()}} +do_catchsql_test 7.1.2 { + SELECT * FROM t1 WHERE nth_value(x, 1) OVER (ORDER BY y); +} {1 {misuse of window function nth_value()}} +do_catchsql_test 7.1.3 { + SELECT count(*) FROM t1 GROUP BY y HAVING nth_value(x, 1) OVER (ORDER BY y); +} {1 {misuse of window function nth_value()}} +do_catchsql_test 7.1.4 { + SELECT count(*) FROM t1 GROUP BY nth_value(x, 1) OVER (ORDER BY y); +} {1 {misuse of window function nth_value()}} +do_catchsql_test 7.1.5 { + SELECT count(*) FROM t1 LIMIT nth_value(x, 1) OVER (); +} {1 {no such column: x}} +do_catchsql_test 7.1.6 { + SELECT trim(x) OVER (ORDER BY y) FROM t1; +} {1 {trim() may not be used as a window function}} +do_catchsql_test 7.1.7 { + SELECT max(x) OVER abc FROM t1 WINDOW def AS (ORDER BY y); +} {1 {no such window: abc}} + +do_execsql_test 7.2 { + SELECT + lead(y) OVER win, + lead(y, 2) OVER win, + lead(y, 3, 'default') OVER win + FROM t1 + WINDOW win AS (ORDER BY x) +} { + 4 6 8 6 8 10 8 10 default 10 {} default {} {} default +} + +do_execsql_test 7.3 { + SELECT row_number() OVER (ORDER BY x) FROM t1 +} {1 2 3 4 5} + +do_execsql_test 7.4 { + SELECT + row_number() OVER win, + lead(x) OVER win + FROM t1 + WINDOW win AS (ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 3 2 5 3 7 4 9 5 {}} + +#------------------------------------------------------------------------- +# Attempt to use a window function in a view. +# +do_execsql_test 8.0 { + CREATE TABLE t3(a, b, c); + + WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<6 ) + INSERT INTO t3 SELECT i, i, i FROM s; + + CREATE VIEW v1 AS SELECT + sum(b) OVER (ORDER BY c), + min(b) OVER (ORDER BY c), + max(b) OVER (ORDER BY c) + FROM t3; + + CREATE VIEW v2 AS SELECT + sum(b) OVER win, + min(b) OVER win, + max(b) OVER win + FROM t3 + WINDOW win AS (ORDER BY c); +} + +do_execsql_test 8.1.1 { + SELECT * FROM v1 +} {1 1 1 3 1 2 6 1 3 10 1 4 15 1 5 21 1 6} +do_execsql_test 8.1.2 { + SELECT * FROM v2 +} {1 1 1 3 1 2 6 1 3 10 1 4 15 1 5 21 1 6} + +db close +sqlite3 db test.db +do_execsql_test 8.2.1 { + SELECT * FROM v1 +} {1 1 1 3 1 2 6 1 3 10 1 4 15 1 5 21 1 6} +do_execsql_test 8.2.2 { + SELECT * FROM v2 +} {1 1 1 3 1 2 6 1 3 10 1 4 15 1 5 21 1 6} + +#------------------------------------------------------------------------- +# Attempt to use a window function in a trigger. +# +do_execsql_test 9.0 { + CREATE TABLE t4(x, y); + INSERT INTO t4 VALUES(1, 'g'); + INSERT INTO t4 VALUES(2, 'i'); + INSERT INTO t4 VALUES(3, 'l'); + INSERT INTO t4 VALUES(4, 'g'); + INSERT INTO t4 VALUES(5, 'a'); + + CREATE TABLE t5(x, y, m); + CREATE TRIGGER t4i AFTER INSERT ON t4 BEGIN + DELETE FROM t5; + INSERT INTO t5 + SELECT x, y, max(y) OVER xyz FROM t4 + WINDOW xyz AS (PARTITION BY (x%2) ORDER BY x); + END; +} + +do_execsql_test 9.1.1 { + SELECT x, y, max(y) OVER xyz FROM t4 + WINDOW xyz AS (PARTITION BY (x%2) ORDER BY x) ORDER BY 1 +} {1 g g 2 i i 3 l l 4 g i 5 a l} + +do_execsql_test 9.1.2 { + INSERT INTO t4 VALUES(6, 'm'); + SELECT x, y, max(y) OVER xyz FROM t4 + WINDOW xyz AS (PARTITION BY (x%2) ORDER BY x) ORDER BY 1 +} {1 g g 2 i i 3 l l 4 g i 5 a l 6 m m} + +do_execsql_test 9.1.3 { + SELECT * FROM t5 ORDER BY 1 +} {1 g g 2 i i 3 l l 4 g i 5 a l 6 m m} + +do_execsql_test 9.2 { + WITH aaa(x, y, z) AS ( + SELECT x, y, max(y) OVER xyz FROM t4 + WINDOW xyz AS (PARTITION BY (x%2) ORDER BY x) + ) + SELECT * FROM aaa ORDER BY 1; +} {1 g g 2 i i 3 l l 4 g i 5 a l 6 m m} + +do_execsql_test 9.3 { + WITH aaa(x, y, z) AS ( + SELECT x, y, max(y) OVER xyz FROM t4 + WINDOW xyz AS (ORDER BY x) + ) + SELECT *, min(z) OVER (ORDER BY x) FROM aaa ORDER BY 1; +} {1 g g g 2 i i g 3 l l g 4 g l g 5 a l g 6 m m g} + +#------------------------------------------------------------------------- +# +do_execsql_test 10.0 { + CREATE TABLE sales(emp TEXT PRIMARY KEY, region, total); + INSERT INTO sales VALUES + ('Alice', 'North', 34), + ('Frank', 'South', 22), + ('Charles', 'North', 45), + ('Darrell', 'South', 8), + ('Grant', 'South', 23), + ('Brad' , 'North', 22), + ('Elizabeth', 'South', 99), + ('Horace', 'East', 1); +} + +# Best two salespeople from each region +# +do_execsql_test 10.1 { + SELECT emp, region, total FROM ( + SELECT + emp, region, total, + row_number() OVER (PARTITION BY region ORDER BY total DESC) AS rank + FROM sales + ) WHERE rank<=2 ORDER BY region, total DESC +} { + Horace East 1 + Charles North 45 + Alice North 34 + Elizabeth South 99 + Grant South 23 +} + +do_execsql_test 10.2 { + SELECT emp, region, sum(total) OVER win FROM sales + WINDOW win AS (PARTITION BY region ORDER BY total) +} { + Horace East 1 + Brad North 22 + Alice North 56 + Charles North 101 + Darrell South 8 + Frank South 30 + Grant South 53 + Elizabeth South 152 +} + +do_execsql_test 10.3 { + SELECT emp, region, sum(total) OVER win FROM sales + WINDOW win AS (PARTITION BY region ORDER BY total) + LIMIT 5 +} { + Horace East 1 + Brad North 22 + Alice North 56 + Charles North 101 + Darrell South 8 +} + +do_execsql_test 10.4 { + SELECT emp, region, sum(total) OVER win FROM sales + WINDOW win AS (PARTITION BY region ORDER BY total) + LIMIT 5 OFFSET 2 +} { + Alice North 56 + Charles North 101 + Darrell South 8 + Frank South 30 + Grant South 53 +} + +do_execsql_test 10.5 { + SELECT emp, region, sum(total) OVER win FROM sales + WINDOW win AS ( + PARTITION BY region ORDER BY total + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) +} { + Horace East 1 + Brad North 101 + Alice North 79 + Charles North 45 + Darrell South 152 + Frank South 144 + Grant South 122 + Elizabeth South 99 +} + +do_execsql_test 10.6 { + SELECT emp, region, sum(total) OVER win FROM sales + WINDOW win AS ( + PARTITION BY region ORDER BY total + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) LIMIT 5 OFFSET 2 +} { + Alice North 79 + Charles North 45 + Darrell South 152 + Frank South 144 + Grant South 122 +} + +do_execsql_test 10.7 { + SELECT emp, region, ( + SELECT sum(total) OVER ( + ORDER BY total RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) || outer.emp FROM sales + ) FROM sales AS outer; +} { + Alice North 254Alice + Frank South 254Frank + Charles North 254Charles + Darrell South 254Darrell + Grant South 254Grant + Brad North 254Brad + Elizabeth South 254Elizabeth + Horace East 254Horace +} + +do_execsql_test 10.8 { + SELECT emp, region, ( + SELECT sum(total) FILTER (WHERE sales.emp!=outer.emp) OVER ( + ORDER BY total RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM sales + ) FROM sales AS outer; +} { + Alice North 220 + Frank South 232 + Charles North 209 + Darrell South 246 + Grant South 231 + Brad North 232 + Elizabeth South 155 + Horace East 253 +} + +#------------------------------------------------------------------------- +# Check that it is not possible to use a window function in a CREATE INDEX +# statement. +# +do_execsql_test 11.0 { CREATE TABLE t6(a, b, c); } + +do_catchsql_test 11.1 { + CREATE INDEX t6i ON t6(a) WHERE sum(b) OVER (); +} {1 {misuse of window function sum()}} +do_catchsql_test 11.2 { + CREATE INDEX t6i ON t6(a) WHERE lead(b) OVER (); +} {1 {misuse of window function lead()}} + +do_catchsql_test 11.3 { + CREATE INDEX t6i ON t6(sum(b) OVER ()); +} {1 {misuse of window function sum()}} +do_catchsql_test 11.4 { + CREATE INDEX t6i ON t6(lead(b) OVER ()); +} {1 {misuse of window function lead()}} + +# 2018-09-17 ticket 510cde277783b5fb5de628393959849dff377eb3 +# Endless loop on a query with window functions and a limit +# +do_execsql_test 12.100 { + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(id INT, b VARCHAR, c VARCHAR); + INSERT INTO t1 VALUES(1, 'A', 'one'); + INSERT INTO t1 VALUES(2, 'B', 'two'); + INSERT INTO t1 VALUES(3, 'C', 'three'); + INSERT INTO t1 VALUES(4, 'D', 'one'); + INSERT INTO t1 VALUES(5, 'E', 'two'); + SELECT id, b, lead(c,1) OVER(ORDER BY c) AS x + FROM t1 WHERE id>1 + ORDER BY b LIMIT 1; +} {2 B two} +do_execsql_test 12.110 { + INSERT INTO t1 VALUES(6, 'F', 'three'); + INSERT INTO t1 VALUES(7, 'G', 'one'); + SELECT id, b, lead(c,1) OVER(ORDER BY c) AS x + FROM t1 WHERE id>1 + ORDER BY b LIMIT 2; +} {2 B two 3 C three} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/window2.tcl lxd-3.0.3/dist/sqlite/test/window2.tcl --- lxd-3.0.2/dist/sqlite/test/window2.tcl 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window2.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,424 @@ +# 2018 May 19 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +source [file join [file dirname $argv0] pg_common.tcl] + +#========================================================================= + + +start_test window2 "2018 May 19" + +ifcapable !windowfunc + +execsql_test 1.0 { + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER); + INSERT INTO t1 VALUES(1, 'odd', 'one', 1); + INSERT INTO t1 VALUES(2, 'even', 'two', 2); + INSERT INTO t1 VALUES(3, 'odd', 'three', 3); + INSERT INTO t1 VALUES(4, 'even', 'four', 4); + INSERT INTO t1 VALUES(5, 'odd', 'five', 5); + INSERT INTO t1 VALUES(6, 'even', 'six', 6); +} + +execsql_test 1.1 { + SELECT c, sum(d) OVER (PARTITION BY b ORDER BY c) FROM t1; +} + +execsql_test 1.2 { + SELECT sum(d) OVER () FROM t1; +} + +execsql_test 1.3 { + SELECT sum(d) OVER (PARTITION BY b) FROM t1; +} + +========== +execsql_test 2.1 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1000 PRECEDING AND 1 FOLLOWING + ) FROM t1 +} +execsql_test 2.2 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1000 PRECEDING AND 1000 FOLLOWING + ) FROM t1 +} +execsql_test 2.3 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1000 FOLLOWING + ) FROM t1 +} +execsql_test 2.4 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + ) FROM t1 +} +execsql_test 2.5 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING + ) FROM t1 +} + +execsql_test 2.6 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + ) FROM t1 +} + +execsql_test 2.7 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 0 PRECEDING AND 0 FOLLOWING + ) FROM t1 +} + +execsql_test 2.8 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING + ) FROM t1 +} + +execsql_test 2.9 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING + ) FROM t1 +} + +execsql_test 2.10 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING + ) FROM t1 +} + +execsql_test 2.11 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 2 PRECEDING AND CURRENT ROW + ) FROM t1 +} + +execsql_test 2.13 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 2.14 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING + ) FROM t1 +} + +execsql_test 2.15 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING + ) FROM t1 +} + +execsql_test 2.16 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING + ) FROM t1 +} + +execsql_test 2.17 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING + ) FROM t1 +} + +execsql_test 2.18 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING + ) FROM t1 +} + +execsql_test 2.19 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND 3 FOLLOWING + ) FROM t1 +} + +execsql_test 2.20 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING + ) FROM t1 +} + +execsql_test 2.21 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 2.22 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 2.23 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 2.24 { + SELECT a, sum(d) OVER ( + PARTITION BY a%2 + ORDER BY d + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 2.25 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 2.26 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 2.27 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t1 +} + +execsql_test 2.28 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t1 +} + +execsql_test 2.29 { + SELECT a, sum(d) OVER ( + ORDER BY d + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} +execsql_test 2.30 { + SELECT a, sum(d) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 3.1 { + SELECT a, sum(d) OVER ( + PARTITION BY b ORDER BY d + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 3.2 { + SELECT a, sum(d) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 3.3 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +} + +execsql_test 3.4 { + SELECT a, sum(d) OVER ( + ORDER BY d/2 + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t1 +} + +#puts $::fd finish_test + +========== + +execsql_test 4.0 { + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t2(a, b) VALUES + (1,0), (2,74), (3,41), (4,74), (5,23), (6,99), (7,26), (8,33), (9,2), + (10,89), (11,81), (12,96), (13,59), (14,38), (15,68), (16,39), (17,62), + (18,91), (19,46), (20,6), (21,99), (22,97), (23,27), (24,46), (25,78), + (26,54), (27,97), (28,8), (29,67), (30,29), (31,93), (32,84), (33,77), + (34,23), (35,16), (36,16), (37,93), (38,65), (39,35), (40,47), (41,7), + (42,86), (43,74), (44,61), (45,91), (46,85), (47,24), (48,85), (49,43), + (50,59), (51,12), (52,32), (53,56), (54,3), (55,91), (56,22), (57,90), + (58,55), (59,15), (60,28), (61,89), (62,25), (63,47), (64,1), (65,56), + (66,40), (67,43), (68,56), (69,16), (70,75), (71,36), (72,89), (73,98), + (74,76), (75,81), (76,4), (77,94), (78,42), (79,30), (80,78), (81,33), + (82,29), (83,53), (84,63), (85,2), (86,87), (87,37), (88,80), (89,84), + (90,72), (91,41), (92,9), (93,61), (94,73), (95,95), (96,65), (97,13), + (98,58), (99,96), (100,98), (101,1), (102,21), (103,74), (104,65), (105,35), + (106,5), (107,73), (108,11), (109,51), (110,87), (111,41), (112,12), (113,8), + (114,20), (115,31), (116,31), (117,15), (118,95), (119,22), (120,73), + (121,79), (122,88), (123,34), (124,8), (125,11), (126,49), (127,34), + (128,90), (129,59), (130,96), (131,60), (132,55), (133,75), (134,77), + (135,44), (136,2), (137,7), (138,85), (139,57), (140,74), (141,29), (142,70), + (143,59), (144,19), (145,39), (146,26), (147,26), (148,47), (149,80), + (150,90), (151,36), (152,58), (153,47), (154,9), (155,72), (156,72), (157,66), + (158,33), (159,93), (160,75), (161,64), (162,81), (163,9), (164,23), (165,37), + (166,13), (167,12), (168,14), (169,62), (170,91), (171,36), (172,91), + (173,33), (174,15), (175,34), (176,36), (177,99), (178,3), (179,95), (180,69), + (181,58), (182,52), (183,30), (184,50), (185,84), (186,10), (187,84), + (188,33), (189,21), (190,39), (191,44), (192,58), (193,30), (194,38), + (195,34), (196,83), (197,27), (198,82), (199,17), (200,7); +} + +execsql_test 4.1 { + SELECT a, sum(b) OVER ( + PARTITION BY (b%10) + ORDER BY b + ) FROM t2 ORDER BY a; +} + +execsql_test 4.2 { + SELECT a, sum(b) OVER ( + PARTITION BY (b%10) + ORDER BY b + RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY a; +} + +execsql_test 4.3 { + SELECT b, sum(b) OVER ( + ORDER BY b + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY b; +} + +execsql_test 4.4 { + SELECT b, sum(b) OVER ( + ORDER BY b + RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY b; +} + +execsql_test 4.5 { + SELECT b, sum(b) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY b; +} + +execsql_test 4.6.1 { + SELECT b, sum(b) OVER ( + RANGE BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY b; +} +execsql_test 4.6.2 { + SELECT b, sum(b) OVER () FROM t2 ORDER BY b; +} +execsql_test 4.6.3 { + SELECT b, sum(b) OVER ( + RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY b; +} +execsql_test 4.6.4 { + SELECT b, sum(b) OVER ( + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY b; +} + +execsql_test 4.7.1 { + SELECT b, sum(b) OVER ( + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +} +execsql_test 4.7.2 { + SELECT b, sum(b) OVER ( + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +} +execsql_test 4.7.3 { + SELECT b, sum(b) OVER ( + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +} +execsql_test 4.7.4 { + SELECT b, sum(b) OVER ( + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +} + +execsql_test 4.8.1 { + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +} +execsql_test 4.8.2 { + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +} +execsql_test 4.8.3 { + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +} +execsql_test 4.8.4 { + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +} + + + +finish_test + + diff -Nru lxd-3.0.2/dist/sqlite/test/window2.test lxd-3.0.3/dist/sqlite/test/window2.test --- lxd-3.0.2/dist/sqlite/test/window2.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window2.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,434 @@ +# 2018 May 19 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. +# + +#################################################### +# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED! +#################################################### + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix window2 + +ifcapable !windowfunc { finish_test ; return } +do_execsql_test 1.0 { + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER); + INSERT INTO t1 VALUES(1, 'odd', 'one', 1); + INSERT INTO t1 VALUES(2, 'even', 'two', 2); + INSERT INTO t1 VALUES(3, 'odd', 'three', 3); + INSERT INTO t1 VALUES(4, 'even', 'four', 4); + INSERT INTO t1 VALUES(5, 'odd', 'five', 5); + INSERT INTO t1 VALUES(6, 'even', 'six', 6); +} {} + +do_execsql_test 1.1 { + SELECT c, sum(d) OVER (PARTITION BY b ORDER BY c) FROM t1; +} {four 4 six 10 two 12 five 5 one 6 three 9} + +do_execsql_test 1.2 { + SELECT sum(d) OVER () FROM t1; +} {21 21 21 21 21 21} + +do_execsql_test 1.3 { + SELECT sum(d) OVER (PARTITION BY b) FROM t1; +} {12 12 12 9 9 9} + +#========================================================================== + +do_execsql_test 2.1 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1000 PRECEDING AND 1 FOLLOWING + ) FROM t1 +} {1 3 2 6 3 10 4 15 5 21 6 21} + +do_execsql_test 2.2 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1000 PRECEDING AND 1000 FOLLOWING + ) FROM t1 +} {1 21 2 21 3 21 4 21 5 21 6 21} + +do_execsql_test 2.3 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1000 FOLLOWING + ) FROM t1 +} {1 21 2 21 3 20 4 18 5 15 6 11} + +do_execsql_test 2.4 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + ) FROM t1 +} {1 3 2 6 3 9 4 12 5 15 6 11} + +do_execsql_test 2.5 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING + ) FROM t1 +} {1 1 2 3 3 5 4 7 5 9 6 11} + +do_execsql_test 2.6 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + ) FROM t1 +} {2 6 4 12 6 10 1 4 3 9 5 8} + +do_execsql_test 2.7 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 0 PRECEDING AND 0 FOLLOWING + ) FROM t1 +} {2 2 4 4 6 6 1 1 3 3 5 5} + +do_execsql_test 2.8 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING + ) FROM t1 +} {1 6 2 9 3 12 4 15 5 11 6 6} + +do_execsql_test 2.9 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING + ) FROM t1 +} {1 6 2 10 3 15 4 21 5 21 6 21} + +do_execsql_test 2.10 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING + ) FROM t1 +} {1 6 2 9 3 12 4 15 5 11 6 6} + +do_execsql_test 2.11 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 2 PRECEDING AND CURRENT ROW + ) FROM t1 +} {1 1 2 3 3 6 4 9 5 12 6 15} + +do_execsql_test 2.13 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +} {1 21 2 21 3 21 4 20 5 18 6 15} + +do_execsql_test 2.14 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING + ) FROM t1 +} {1 {} 2 1 3 3 4 6 5 9 6 12} + +do_execsql_test 2.15 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING + ) FROM t1 +} {2 2 4 6 6 10 1 1 3 4 5 8} + +do_execsql_test 2.16 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING + ) FROM t1 +} {2 {} 4 2 6 4 1 {} 3 1 5 3} + +do_execsql_test 2.17 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING + ) FROM t1 +} {2 {} 4 {} 6 {} 1 {} 3 {} 5 {}} + +do_execsql_test 2.18 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING + ) FROM t1 +} {2 {} 4 {} 6 2 1 {} 3 {} 5 1} + +do_execsql_test 2.19 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND 3 FOLLOWING + ) FROM t1 +} {2 10 4 6 6 {} 1 8 3 5 5 {}} + +do_execsql_test 2.20 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING + ) FROM t1 +} {1 5 2 7 3 9 4 11 5 6 6 {}} + +do_execsql_test 2.21 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING + ) FROM t1 +} {1 20 2 18 3 15 4 11 5 6 6 {}} + +do_execsql_test 2.22 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING + ) FROM t1 +} {2 10 4 6 6 {} 1 8 3 5 5 {}} + +do_execsql_test 2.23 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} {1 21 2 20 3 18 4 15 5 11 6 6} + +do_execsql_test 2.24 { + SELECT a, sum(d) OVER ( + PARTITION BY a%2 + ORDER BY d + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} {2 12 4 10 6 6 1 9 3 8 5 5} + +do_execsql_test 2.25 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +} {1 21 2 21 3 21 4 21 5 21 6 21} + +do_execsql_test 2.26 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +} {2 12 4 12 6 12 1 9 3 9 5 9} + +do_execsql_test 2.27 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t1 +} {1 1 2 2 3 3 4 4 5 5 6 6} + +do_execsql_test 2.28 { + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t1 +} {2 2 4 4 6 6 1 1 3 3 5 5} + +do_execsql_test 2.29 { + SELECT a, sum(d) OVER ( + ORDER BY d + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} {1 21 2 20 3 18 4 15 5 11 6 6} + +do_execsql_test 2.30 { + SELECT a, sum(d) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} {2 21 4 21 6 21 1 9 3 9 5 9} + +do_execsql_test 3.1 { + SELECT a, sum(d) OVER ( + PARTITION BY b ORDER BY d + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} {2 12 4 10 6 6 1 9 3 8 5 5} + +do_execsql_test 3.2 { + SELECT a, sum(d) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +} {2 21 4 21 6 21 1 9 3 9 5 9} + +do_execsql_test 3.3 { + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +} {1 21 2 21 3 21 4 21 5 21 6 21} + +do_execsql_test 3.4 { + SELECT a, sum(d) OVER ( + ORDER BY d/2 + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t1 +} {1 1 2 3 3 6 4 10 5 15 6 21} + +#========================================================================== + +do_execsql_test 4.0 { + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t2(a, b) VALUES + (1,0), (2,74), (3,41), (4,74), (5,23), (6,99), (7,26), (8,33), (9,2), + (10,89), (11,81), (12,96), (13,59), (14,38), (15,68), (16,39), (17,62), + (18,91), (19,46), (20,6), (21,99), (22,97), (23,27), (24,46), (25,78), + (26,54), (27,97), (28,8), (29,67), (30,29), (31,93), (32,84), (33,77), + (34,23), (35,16), (36,16), (37,93), (38,65), (39,35), (40,47), (41,7), + (42,86), (43,74), (44,61), (45,91), (46,85), (47,24), (48,85), (49,43), + (50,59), (51,12), (52,32), (53,56), (54,3), (55,91), (56,22), (57,90), + (58,55), (59,15), (60,28), (61,89), (62,25), (63,47), (64,1), (65,56), + (66,40), (67,43), (68,56), (69,16), (70,75), (71,36), (72,89), (73,98), + (74,76), (75,81), (76,4), (77,94), (78,42), (79,30), (80,78), (81,33), + (82,29), (83,53), (84,63), (85,2), (86,87), (87,37), (88,80), (89,84), + (90,72), (91,41), (92,9), (93,61), (94,73), (95,95), (96,65), (97,13), + (98,58), (99,96), (100,98), (101,1), (102,21), (103,74), (104,65), (105,35), + (106,5), (107,73), (108,11), (109,51), (110,87), (111,41), (112,12), (113,8), + (114,20), (115,31), (116,31), (117,15), (118,95), (119,22), (120,73), + (121,79), (122,88), (123,34), (124,8), (125,11), (126,49), (127,34), + (128,90), (129,59), (130,96), (131,60), (132,55), (133,75), (134,77), + (135,44), (136,2), (137,7), (138,85), (139,57), (140,74), (141,29), (142,70), + (143,59), (144,19), (145,39), (146,26), (147,26), (148,47), (149,80), + (150,90), (151,36), (152,58), (153,47), (154,9), (155,72), (156,72), (157,66), + (158,33), (159,93), (160,75), (161,64), (162,81), (163,9), (164,23), (165,37), + (166,13), (167,12), (168,14), (169,62), (170,91), (171,36), (172,91), + (173,33), (174,15), (175,34), (176,36), (177,99), (178,3), (179,95), (180,69), + (181,58), (182,52), (183,30), (184,50), (185,84), (186,10), (187,84), + (188,33), (189,21), (190,39), (191,44), (192,58), (193,30), (194,38), + (195,34), (196,83), (197,27), (198,82), (199,17), (200,7); +} {} + +do_execsql_test 4.1 { + SELECT a, sum(b) OVER ( + PARTITION BY (b%10) + ORDER BY b + ) FROM t2 ORDER BY a; +} {1 0 2 754 3 251 4 754 5 101 6 1247 7 132 8 266 9 6 10 950 11 667 12 1052 13 535 14 128 15 428 16 250 17 336 18 1122 19 368 20 6 21 1247 22 1000 23 92 24 368 25 584 26 320 27 1000 28 24 29 478 30 133 31 1049 32 1090 33 632 34 101 35 54 36 54 37 1049 38 450 39 145 40 354 41 21 42 764 43 754 44 424 45 1122 46 930 47 42 48 930 49 352 50 535 51 42 52 118 53 536 54 6 55 1122 56 86 57 770 58 255 59 50 60 52 61 950 62 75 63 354 64 2 65 536 66 160 67 352 68 536 69 54 70 675 71 276 72 950 73 868 74 678 75 667 76 4 77 1184 78 160 79 120 80 584 81 266 82 133 83 405 84 468 85 6 86 806 87 166 88 500 89 1090 90 552 91 251 92 27 93 424 94 687 95 1215 96 450 97 32 98 360 99 1052 100 868 101 2 102 66 103 754 104 450 105 145 106 5 107 687 108 24 109 302 110 806 111 251 112 42 113 24 114 30 115 128 116 128 117 50 118 1215 119 86 120 687 121 683 122 672 123 178 124 24 125 24 126 299 127 178 128 770 129 535 130 1052 131 270 132 255 133 675 134 632 135 266 136 6 137 21 138 930 139 411 140 754 141 133 142 340 143 535 144 46 145 250 146 132 147 132 148 354 149 500 150 770 151 276 152 360 153 354 154 27 155 552 156 552 157 602 158 266 159 1049 160 675 161 384 162 667 163 27 164 101 165 166 166 32 167 42 168 18 169 336 170 1122 171 276 172 1122 173 266 174 50 175 178 176 276 177 1247 178 6 179 1215 180 604 181 360 182 212 183 120 184 210 185 1090 186 10 187 1090 188 266 189 66 190 250 191 266 192 360 193 120 194 128 195 178 196 770 197 92 198 634 199 38 200 21} + +do_execsql_test 4.2 { + SELECT a, sum(b) OVER ( + PARTITION BY (b%10) + ORDER BY b + RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY a; +} {1 0 2 754 3 251 4 754 5 101 6 1247 7 132 8 266 9 6 10 950 11 667 12 1052 13 535 14 128 15 428 16 250 17 336 18 1122 19 368 20 6 21 1247 22 1000 23 92 24 368 25 584 26 320 27 1000 28 24 29 478 30 133 31 1049 32 1090 33 632 34 101 35 54 36 54 37 1049 38 450 39 145 40 354 41 21 42 764 43 754 44 424 45 1122 46 930 47 42 48 930 49 352 50 535 51 42 52 118 53 536 54 6 55 1122 56 86 57 770 58 255 59 50 60 52 61 950 62 75 63 354 64 2 65 536 66 160 67 352 68 536 69 54 70 675 71 276 72 950 73 868 74 678 75 667 76 4 77 1184 78 160 79 120 80 584 81 266 82 133 83 405 84 468 85 6 86 806 87 166 88 500 89 1090 90 552 91 251 92 27 93 424 94 687 95 1215 96 450 97 32 98 360 99 1052 100 868 101 2 102 66 103 754 104 450 105 145 106 5 107 687 108 24 109 302 110 806 111 251 112 42 113 24 114 30 115 128 116 128 117 50 118 1215 119 86 120 687 121 683 122 672 123 178 124 24 125 24 126 299 127 178 128 770 129 535 130 1052 131 270 132 255 133 675 134 632 135 266 136 6 137 21 138 930 139 411 140 754 141 133 142 340 143 535 144 46 145 250 146 132 147 132 148 354 149 500 150 770 151 276 152 360 153 354 154 27 155 552 156 552 157 602 158 266 159 1049 160 675 161 384 162 667 163 27 164 101 165 166 166 32 167 42 168 18 169 336 170 1122 171 276 172 1122 173 266 174 50 175 178 176 276 177 1247 178 6 179 1215 180 604 181 360 182 212 183 120 184 210 185 1090 186 10 187 1090 188 266 189 66 190 250 191 266 192 360 193 120 194 128 195 178 196 770 197 92 198 634 199 38 200 21} + +do_execsql_test 4.3 { + SELECT b, sum(b) OVER ( + ORDER BY b + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY b; +} {0 0 1 1 1 2 2 4 2 6 2 8 3 11 3 14 4 18 5 23 6 29 7 36 7 43 7 50 8 58 8 66 8 74 9 83 9 92 9 101 10 111 11 122 11 133 12 145 12 157 12 169 13 182 13 195 14 209 15 224 15 239 15 254 16 270 16 286 16 302 17 319 19 338 20 358 21 379 21 400 22 422 22 444 23 467 23 490 23 513 24 537 25 562 26 588 26 614 26 640 27 667 27 694 28 722 29 751 29 780 29 809 30 839 30 869 30 899 31 930 31 961 32 993 33 1026 33 1059 33 1092 33 1125 33 1158 34 1192 34 1226 34 1260 34 1294 35 1329 35 1364 36 1400 36 1436 36 1472 36 1508 37 1545 37 1582 38 1620 38 1658 39 1697 39 1736 39 1775 40 1815 41 1856 41 1897 41 1938 42 1980 43 2023 43 2066 44 2110 44 2154 46 2200 46 2246 47 2293 47 2340 47 2387 47 2434 49 2483 50 2533 51 2584 52 2636 53 2689 54 2743 55 2798 55 2853 56 2909 56 2965 56 3021 57 3078 58 3136 58 3194 58 3252 58 3310 59 3369 59 3428 59 3487 59 3546 60 3606 61 3667 61 3728 62 3790 62 3852 63 3915 64 3979 65 4044 65 4109 65 4174 66 4240 67 4307 68 4375 69 4444 70 4514 72 4586 72 4658 72 4730 73 4803 73 4876 73 4949 74 5023 74 5097 74 5171 74 5245 74 5319 75 5394 75 5469 75 5544 76 5620 77 5697 77 5774 78 5852 78 5930 79 6009 80 6089 80 6169 81 6250 81 6331 81 6412 82 6494 83 6577 84 6661 84 6745 84 6829 84 6913 85 6998 85 7083 85 7168 86 7254 87 7341 87 7428 88 7516 89 7605 89 7694 89 7783 90 7873 90 7963 90 8053 91 8144 91 8235 91 8326 91 8417 91 8508 93 8601 93 8694 93 8787 94 8881 95 8976 95 9071 95 9166 96 9262 96 9358 96 9454 97 9551 97 9648 98 9746 98 9844 99 9943 99 10042 99 10141} + +do_execsql_test 4.4 { + SELECT b, sum(b) OVER ( + ORDER BY b + RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY b; +} {0 10141 1 10141 1 10141 2 10141 2 10141 2 10141 3 10141 3 10141 4 10141 5 10141 6 10141 7 10141 7 10141 7 10141 8 10141 8 10141 8 10141 9 10141 9 10141 9 10141 10 10141 11 10141 11 10141 12 10141 12 10141 12 10141 13 10141 13 10141 14 10141 15 10141 15 10141 15 10141 16 10141 16 10141 16 10141 17 10141 19 10141 20 10141 21 10141 21 10141 22 10141 22 10141 23 10141 23 10141 23 10141 24 10141 25 10141 26 10141 26 10141 26 10141 27 10141 27 10141 28 10141 29 10141 29 10141 29 10141 30 10141 30 10141 30 10141 31 10141 31 10141 32 10141 33 10141 33 10141 33 10141 33 10141 33 10141 34 10141 34 10141 34 10141 34 10141 35 10141 35 10141 36 10141 36 10141 36 10141 36 10141 37 10141 37 10141 38 10141 38 10141 39 10141 39 10141 39 10141 40 10141 41 10141 41 10141 41 10141 42 10141 43 10141 43 10141 44 10141 44 10141 46 10141 46 10141 47 10141 47 10141 47 10141 47 10141 49 10141 50 10141 51 10141 52 10141 53 10141 54 10141 55 10141 55 10141 56 10141 56 10141 56 10141 57 10141 58 10141 58 10141 58 10141 58 10141 59 10141 59 10141 59 10141 59 10141 60 10141 61 10141 61 10141 62 10141 62 10141 63 10141 64 10141 65 10141 65 10141 65 10141 66 10141 67 10141 68 10141 69 10141 70 10141 72 10141 72 10141 72 10141 73 10141 73 10141 73 10141 74 10141 74 10141 74 10141 74 10141 74 10141 75 10141 75 10141 75 10141 76 10141 77 10141 77 10141 78 10141 78 10141 79 10141 80 10141 80 10141 81 10141 81 10141 81 10141 82 10141 83 10141 84 10141 84 10141 84 10141 84 10141 85 10141 85 10141 85 10141 86 10141 87 10141 87 10141 88 10141 89 10141 89 10141 89 10141 90 10141 90 10141 90 10141 91 10141 91 10141 91 10141 91 10141 91 10141 93 10141 93 10141 93 10141 94 10141 95 10141 95 10141 95 10141 96 10141 96 10141 96 10141 97 10141 97 10141 98 10141 98 10141 99 10141 99 10141 99 10141} + +do_execsql_test 4.5 { + SELECT b, sum(b) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY b; +} {0 0 1 2 1 2 2 6 2 6 2 6 3 6 3 6 4 4 5 5 6 6 7 21 7 21 7 21 8 24 8 24 8 24 9 27 9 27 9 27 10 10 11 22 11 22 12 36 12 36 12 36 13 26 13 26 14 14 15 45 15 45 15 45 16 48 16 48 16 48 17 17 19 19 20 20 21 42 21 42 22 44 22 44 23 69 23 69 23 69 24 24 25 25 26 78 26 78 26 78 27 54 27 54 28 28 29 87 29 87 29 87 30 90 30 90 30 90 31 62 31 62 32 32 33 165 33 165 33 165 33 165 33 165 34 136 34 136 34 136 34 136 35 70 35 70 36 144 36 144 36 144 36 144 37 74 37 74 38 76 38 76 39 117 39 117 39 117 40 40 41 123 41 123 41 123 42 42 43 86 43 86 44 88 44 88 46 92 46 92 47 188 47 188 47 188 47 188 49 49 50 50 51 51 52 52 53 53 54 54 55 110 55 110 56 168 56 168 56 168 57 57 58 232 58 232 58 232 58 232 59 236 59 236 59 236 59 236 60 60 61 122 61 122 62 124 62 124 63 63 64 64 65 195 65 195 65 195 66 66 67 67 68 68 69 69 70 70 72 216 72 216 72 216 73 219 73 219 73 219 74 370 74 370 74 370 74 370 74 370 75 225 75 225 75 225 76 76 77 154 77 154 78 156 78 156 79 79 80 160 80 160 81 243 81 243 81 243 82 82 83 83 84 336 84 336 84 336 84 336 85 255 85 255 85 255 86 86 87 174 87 174 88 88 89 267 89 267 89 267 90 270 90 270 90 270 91 455 91 455 91 455 91 455 91 455 93 279 93 279 93 279 94 94 95 285 95 285 95 285 96 288 96 288 96 288 97 194 97 194 98 196 98 196 99 297 99 297 99 297} + +do_execsql_test 4.6.1 { + SELECT b, sum(b) OVER ( + RANGE BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY b; +} {0 10141 1 10141 1 10141 2 10141 2 10141 2 10141 3 10141 3 10141 4 10141 5 10141 6 10141 7 10141 7 10141 7 10141 8 10141 8 10141 8 10141 9 10141 9 10141 9 10141 10 10141 11 10141 11 10141 12 10141 12 10141 12 10141 13 10141 13 10141 14 10141 15 10141 15 10141 15 10141 16 10141 16 10141 16 10141 17 10141 19 10141 20 10141 21 10141 21 10141 22 10141 22 10141 23 10141 23 10141 23 10141 24 10141 25 10141 26 10141 26 10141 26 10141 27 10141 27 10141 28 10141 29 10141 29 10141 29 10141 30 10141 30 10141 30 10141 31 10141 31 10141 32 10141 33 10141 33 10141 33 10141 33 10141 33 10141 34 10141 34 10141 34 10141 34 10141 35 10141 35 10141 36 10141 36 10141 36 10141 36 10141 37 10141 37 10141 38 10141 38 10141 39 10141 39 10141 39 10141 40 10141 41 10141 41 10141 41 10141 42 10141 43 10141 43 10141 44 10141 44 10141 46 10141 46 10141 47 10141 47 10141 47 10141 47 10141 49 10141 50 10141 51 10141 52 10141 53 10141 54 10141 55 10141 55 10141 56 10141 56 10141 56 10141 57 10141 58 10141 58 10141 58 10141 58 10141 59 10141 59 10141 59 10141 59 10141 60 10141 61 10141 61 10141 62 10141 62 10141 63 10141 64 10141 65 10141 65 10141 65 10141 66 10141 67 10141 68 10141 69 10141 70 10141 72 10141 72 10141 72 10141 73 10141 73 10141 73 10141 74 10141 74 10141 74 10141 74 10141 74 10141 75 10141 75 10141 75 10141 76 10141 77 10141 77 10141 78 10141 78 10141 79 10141 80 10141 80 10141 81 10141 81 10141 81 10141 82 10141 83 10141 84 10141 84 10141 84 10141 84 10141 85 10141 85 10141 85 10141 86 10141 87 10141 87 10141 88 10141 89 10141 89 10141 89 10141 90 10141 90 10141 90 10141 91 10141 91 10141 91 10141 91 10141 91 10141 93 10141 93 10141 93 10141 94 10141 95 10141 95 10141 95 10141 96 10141 96 10141 96 10141 97 10141 97 10141 98 10141 98 10141 99 10141 99 10141 99 10141} + +do_execsql_test 4.6.2 { + SELECT b, sum(b) OVER () FROM t2 ORDER BY b; +} {0 10141 1 10141 1 10141 2 10141 2 10141 2 10141 3 10141 3 10141 4 10141 5 10141 6 10141 7 10141 7 10141 7 10141 8 10141 8 10141 8 10141 9 10141 9 10141 9 10141 10 10141 11 10141 11 10141 12 10141 12 10141 12 10141 13 10141 13 10141 14 10141 15 10141 15 10141 15 10141 16 10141 16 10141 16 10141 17 10141 19 10141 20 10141 21 10141 21 10141 22 10141 22 10141 23 10141 23 10141 23 10141 24 10141 25 10141 26 10141 26 10141 26 10141 27 10141 27 10141 28 10141 29 10141 29 10141 29 10141 30 10141 30 10141 30 10141 31 10141 31 10141 32 10141 33 10141 33 10141 33 10141 33 10141 33 10141 34 10141 34 10141 34 10141 34 10141 35 10141 35 10141 36 10141 36 10141 36 10141 36 10141 37 10141 37 10141 38 10141 38 10141 39 10141 39 10141 39 10141 40 10141 41 10141 41 10141 41 10141 42 10141 43 10141 43 10141 44 10141 44 10141 46 10141 46 10141 47 10141 47 10141 47 10141 47 10141 49 10141 50 10141 51 10141 52 10141 53 10141 54 10141 55 10141 55 10141 56 10141 56 10141 56 10141 57 10141 58 10141 58 10141 58 10141 58 10141 59 10141 59 10141 59 10141 59 10141 60 10141 61 10141 61 10141 62 10141 62 10141 63 10141 64 10141 65 10141 65 10141 65 10141 66 10141 67 10141 68 10141 69 10141 70 10141 72 10141 72 10141 72 10141 73 10141 73 10141 73 10141 74 10141 74 10141 74 10141 74 10141 74 10141 75 10141 75 10141 75 10141 76 10141 77 10141 77 10141 78 10141 78 10141 79 10141 80 10141 80 10141 81 10141 81 10141 81 10141 82 10141 83 10141 84 10141 84 10141 84 10141 84 10141 85 10141 85 10141 85 10141 86 10141 87 10141 87 10141 88 10141 89 10141 89 10141 89 10141 90 10141 90 10141 90 10141 91 10141 91 10141 91 10141 91 10141 91 10141 93 10141 93 10141 93 10141 94 10141 95 10141 95 10141 95 10141 96 10141 96 10141 96 10141 97 10141 97 10141 98 10141 98 10141 99 10141 99 10141 99 10141} + +do_execsql_test 4.6.3 { + SELECT b, sum(b) OVER ( + RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY b; +} {0 10141 1 10141 1 10141 2 10141 2 10141 2 10141 3 10141 3 10141 4 10141 5 10141 6 10141 7 10141 7 10141 7 10141 8 10141 8 10141 8 10141 9 10141 9 10141 9 10141 10 10141 11 10141 11 10141 12 10141 12 10141 12 10141 13 10141 13 10141 14 10141 15 10141 15 10141 15 10141 16 10141 16 10141 16 10141 17 10141 19 10141 20 10141 21 10141 21 10141 22 10141 22 10141 23 10141 23 10141 23 10141 24 10141 25 10141 26 10141 26 10141 26 10141 27 10141 27 10141 28 10141 29 10141 29 10141 29 10141 30 10141 30 10141 30 10141 31 10141 31 10141 32 10141 33 10141 33 10141 33 10141 33 10141 33 10141 34 10141 34 10141 34 10141 34 10141 35 10141 35 10141 36 10141 36 10141 36 10141 36 10141 37 10141 37 10141 38 10141 38 10141 39 10141 39 10141 39 10141 40 10141 41 10141 41 10141 41 10141 42 10141 43 10141 43 10141 44 10141 44 10141 46 10141 46 10141 47 10141 47 10141 47 10141 47 10141 49 10141 50 10141 51 10141 52 10141 53 10141 54 10141 55 10141 55 10141 56 10141 56 10141 56 10141 57 10141 58 10141 58 10141 58 10141 58 10141 59 10141 59 10141 59 10141 59 10141 60 10141 61 10141 61 10141 62 10141 62 10141 63 10141 64 10141 65 10141 65 10141 65 10141 66 10141 67 10141 68 10141 69 10141 70 10141 72 10141 72 10141 72 10141 73 10141 73 10141 73 10141 74 10141 74 10141 74 10141 74 10141 74 10141 75 10141 75 10141 75 10141 76 10141 77 10141 77 10141 78 10141 78 10141 79 10141 80 10141 80 10141 81 10141 81 10141 81 10141 82 10141 83 10141 84 10141 84 10141 84 10141 84 10141 85 10141 85 10141 85 10141 86 10141 87 10141 87 10141 88 10141 89 10141 89 10141 89 10141 90 10141 90 10141 90 10141 91 10141 91 10141 91 10141 91 10141 91 10141 93 10141 93 10141 93 10141 94 10141 95 10141 95 10141 95 10141 96 10141 96 10141 96 10141 97 10141 97 10141 98 10141 98 10141 99 10141 99 10141 99 10141} + +do_execsql_test 4.6.4 { + SELECT b, sum(b) OVER ( + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY b; +} {0 10141 1 10141 1 10141 2 10141 2 10141 2 10141 3 10141 3 10141 4 10141 5 10141 6 10141 7 10141 7 10141 7 10141 8 10141 8 10141 8 10141 9 10141 9 10141 9 10141 10 10141 11 10141 11 10141 12 10141 12 10141 12 10141 13 10141 13 10141 14 10141 15 10141 15 10141 15 10141 16 10141 16 10141 16 10141 17 10141 19 10141 20 10141 21 10141 21 10141 22 10141 22 10141 23 10141 23 10141 23 10141 24 10141 25 10141 26 10141 26 10141 26 10141 27 10141 27 10141 28 10141 29 10141 29 10141 29 10141 30 10141 30 10141 30 10141 31 10141 31 10141 32 10141 33 10141 33 10141 33 10141 33 10141 33 10141 34 10141 34 10141 34 10141 34 10141 35 10141 35 10141 36 10141 36 10141 36 10141 36 10141 37 10141 37 10141 38 10141 38 10141 39 10141 39 10141 39 10141 40 10141 41 10141 41 10141 41 10141 42 10141 43 10141 43 10141 44 10141 44 10141 46 10141 46 10141 47 10141 47 10141 47 10141 47 10141 49 10141 50 10141 51 10141 52 10141 53 10141 54 10141 55 10141 55 10141 56 10141 56 10141 56 10141 57 10141 58 10141 58 10141 58 10141 58 10141 59 10141 59 10141 59 10141 59 10141 60 10141 61 10141 61 10141 62 10141 62 10141 63 10141 64 10141 65 10141 65 10141 65 10141 66 10141 67 10141 68 10141 69 10141 70 10141 72 10141 72 10141 72 10141 73 10141 73 10141 73 10141 74 10141 74 10141 74 10141 74 10141 74 10141 75 10141 75 10141 75 10141 76 10141 77 10141 77 10141 78 10141 78 10141 79 10141 80 10141 80 10141 81 10141 81 10141 81 10141 82 10141 83 10141 84 10141 84 10141 84 10141 84 10141 85 10141 85 10141 85 10141 86 10141 87 10141 87 10141 88 10141 89 10141 89 10141 89 10141 90 10141 90 10141 90 10141 91 10141 91 10141 91 10141 91 10141 91 10141 93 10141 93 10141 93 10141 94 10141 95 10141 95 10141 95 10141 96 10141 96 10141 96 10141 97 10141 97 10141 98 10141 98 10141 99 10141 99 10141 99 10141} + +do_execsql_test 4.7.1 { + SELECT b, sum(b) OVER ( + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +} {0 0 1 1 1 1 2 2 2 2 2 2 3 3 3 3 4 4 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 10 10 11 11 11 11 12 12 12 12 12 12 13 13 13 13 14 14 15 15 15 15 15 15 16 16 16 16 16 16 17 17 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 23 23 24 24 25 25 26 26 26 26 26 26 27 27 27 27 28 28 29 29 29 29 29 29 30 30 30 30 30 30 31 31 31 31 32 32 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 38 38 38 38 39 39 39 39 39 39 40 40 41 41 41 41 41 41 42 42 43 43 43 43 44 44 44 44 46 46 46 46 47 47 47 47 47 47 47 47 49 49 50 50 51 51 52 52 53 53 54 54 55 55 55 55 56 56 56 56 56 56 57 57 58 58 58 58 58 58 58 58 59 59 59 59 59 59 59 59 60 60 61 61 61 61 62 62 62 62 63 63 64 64 65 65 65 65 65 65 66 66 67 67 68 68 69 69 70 70 72 72 72 72 72 72 73 73 73 73 73 73 74 74 74 74 74 74 74 74 74 74 75 75 75 75 75 75 76 76 77 77 77 77 78 78 78 78 79 79 80 80 80 80 81 81 81 81 81 81 82 82 83 83 84 84 84 84 84 84 84 84 85 85 85 85 85 85 86 86 87 87 87 87 88 88 89 89 89 89 89 89 90 90 90 90 90 90 91 91 91 91 91 91 91 91 91 91 93 93 93 93 93 93 94 94 95 95 95 95 95 95 96 96 96 96 96 96 97 97 97 97 98 98 98 98 99 99 99 99 99 99} + +do_execsql_test 4.7.2 { + SELECT b, sum(b) OVER ( + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +} {0 0 1 3379 1 5443 2 372 2 4473 2 7074 3 2916 3 9096 4 4049 5 5643 6 1047 7 2205 7 7081 7 10141 8 1553 8 5926 8 6422 9 4883 9 7932 9 8497 10 9544 11 5727 11 6433 12 2825 12 5918 12 8582 13 5190 13 8570 14 8596 15 3189 15 6023 15 8924 16 1942 16 1958 16 3590 17 10134 19 7474 20 5946 21 5464 21 9682 22 3029 22 6140 23 212 23 1926 23 8520 24 2626 25 3331 26 337 26 7539 26 7565 27 1270 27 10035 28 3217 29 1649 29 4355 29 7326 30 4215 30 9400 30 9853 31 5977 31 6008 32 2857 33 370 33 4326 33 8175 33 8909 33 9661 34 6414 34 6516 34 8958 34 9925 35 2151 35 5638 36 3701 36 7818 36 8785 36 8994 37 4597 37 8557 38 735 38 9891 39 842 39 7513 39 9721 40 3475 41 115 41 4874 41 5906 42 4185 43 2754 43 3518 44 7072 44 9765 46 1041 46 1316 47 2198 47 3378 47 7612 47 7923 49 6482 50 9450 51 5778 52 9370 53 4408 54 1448 55 3174 55 6876 56 2913 56 3435 56 3574 57 7223 58 5248 58 7876 58 9318 58 9823 59 697 59 2813 59 6665 59 7455 60 6821 61 2426 61 4944 62 904 62 8658 63 4471 64 8407 65 2116 65 5177 65 5603 66 8142 67 1620 68 803 69 9260 70 7396 72 4833 72 8004 72 8076 73 5017 73 5716 73 6213 74 74 74 189 74 2365 74 5538 74 7297 75 3665 75 6951 75 8343 76 3964 77 1903 77 7028 78 1394 78 4293 79 6292 80 4677 80 7692 81 542 81 4045 81 8488 82 10117 83 10008 84 1826 84 4761 84 9534 84 9628 85 2602 85 2711 85 7166 86 2291 87 4560 87 5865 88 6380 89 461 89 3306 89 3790 90 3119 90 6606 90 7782 91 995 91 2517 91 3007 91 8749 91 8876 93 1742 93 2051 93 8268 94 4143 95 5112 95 6118 95 9191 96 638 96 5344 96 6761 97 1243 97 1545 98 3888 98 5442 99 311 99 1146 99 9093} + +do_execsql_test 4.7.3 { + SELECT b, sum(b) OVER ( + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +} {0 10141 1 10141 1 10141 2 10141 2 10141 2 10141 3 10141 3 10141 4 10141 5 10141 6 10141 7 10141 7 10141 7 10141 8 10141 8 10141 8 10141 9 10141 9 10141 9 10141 10 10141 11 10141 11 10141 12 10141 12 10141 12 10141 13 10141 13 10141 14 10141 15 10141 15 10141 15 10141 16 10141 16 10141 16 10141 17 10141 19 10141 20 10141 21 10141 21 10141 22 10141 22 10141 23 10141 23 10141 23 10141 24 10141 25 10141 26 10141 26 10141 26 10141 27 10141 27 10141 28 10141 29 10141 29 10141 29 10141 30 10141 30 10141 30 10141 31 10141 31 10141 32 10141 33 10141 33 10141 33 10141 33 10141 33 10141 34 10141 34 10141 34 10141 34 10141 35 10141 35 10141 36 10141 36 10141 36 10141 36 10141 37 10141 37 10141 38 10141 38 10141 39 10141 39 10141 39 10141 40 10141 41 10141 41 10141 41 10141 42 10141 43 10141 43 10141 44 10141 44 10141 46 10141 46 10141 47 10141 47 10141 47 10141 47 10141 49 10141 50 10141 51 10141 52 10141 53 10141 54 10141 55 10141 55 10141 56 10141 56 10141 56 10141 57 10141 58 10141 58 10141 58 10141 58 10141 59 10141 59 10141 59 10141 59 10141 60 10141 61 10141 61 10141 62 10141 62 10141 63 10141 64 10141 65 10141 65 10141 65 10141 66 10141 67 10141 68 10141 69 10141 70 10141 72 10141 72 10141 72 10141 73 10141 73 10141 73 10141 74 10141 74 10141 74 10141 74 10141 74 10141 75 10141 75 10141 75 10141 76 10141 77 10141 77 10141 78 10141 78 10141 79 10141 80 10141 80 10141 81 10141 81 10141 81 10141 82 10141 83 10141 84 10141 84 10141 84 10141 84 10141 85 10141 85 10141 85 10141 86 10141 87 10141 87 10141 88 10141 89 10141 89 10141 89 10141 90 10141 90 10141 90 10141 91 10141 91 10141 91 10141 91 10141 91 10141 93 10141 93 10141 93 10141 94 10141 95 10141 95 10141 95 10141 96 10141 96 10141 96 10141 97 10141 97 10141 98 10141 98 10141 99 10141 99 10141 99 10141} + +do_execsql_test 4.7.4 { + SELECT b, sum(b) OVER ( + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +} {0 10141 1 4699 1 6763 2 3069 2 5670 2 9771 3 1048 3 7228 4 6096 5 4503 6 9100 7 7 7 3067 7 7943 8 3727 8 4223 8 8596 9 1653 9 2218 9 5267 10 607 11 3719 11 4425 12 1571 12 4235 12 7328 13 1584 13 4964 14 1559 15 1232 15 4133 15 6967 16 6567 16 8199 16 8215 17 24 19 2686 20 4215 21 480 21 4698 22 4023 22 7134 23 1644 23 8238 23 9952 24 7539 25 6835 26 2602 26 2628 26 9830 27 133 27 8898 28 6952 29 2844 29 5815 29 8521 30 318 30 771 30 5956 31 4164 31 4195 32 7316 33 513 33 1265 33 1999 33 5848 33 9804 34 250 34 1217 34 3659 34 3761 35 4538 35 8025 36 1183 36 1392 36 2359 36 6476 37 1621 37 5581 38 288 38 9444 39 459 39 2667 39 9338 40 6706 41 4276 41 5308 41 10067 42 5998 43 6666 43 7430 44 420 44 3113 46 8871 46 9146 47 2265 47 2576 47 6810 47 7990 49 3708 50 741 51 4414 52 823 53 5786 54 8747 55 3320 55 7022 56 6623 56 6762 56 7284 57 2975 58 376 58 881 58 2323 58 4951 59 2745 59 3535 59 7387 59 9503 60 3380 61 5258 61 7776 62 1545 62 9299 63 5733 64 1798 65 4603 65 5029 65 8090 66 2065 67 8588 68 9406 69 950 70 2815 72 2137 72 2209 72 5380 73 4001 73 4498 73 5197 74 2918 74 4677 74 7850 74 10026 74 10141 75 1873 75 3265 75 6551 76 6253 77 3190 77 8315 78 5926 78 8825 79 3928 80 2529 80 5544 81 1734 81 6177 81 9680 82 106 83 216 84 597 84 691 84 5464 84 8399 85 3060 85 7515 85 7624 86 7936 87 4363 87 5668 88 3849 89 6440 89 6924 89 9769 90 2449 90 3625 90 7112 91 1356 91 1483 91 7225 91 7715 91 9237 93 1966 93 8183 93 8492 94 6092 95 1045 95 4118 95 5124 96 3476 96 4893 96 9599 97 8693 97 8995 98 4797 98 6351 99 1147 99 9094 99 9929} + +do_execsql_test 4.8.1 { + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +} {0 0 1 1 1 1 2 2 2 2 2 2 3 3 3 3 4 4 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 10 10 11 11 11 11 12 12 12 12 12 12 13 13 13 13 14 14 15 15 15 15 15 15 16 16 16 16 16 16 17 17 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 23 23 24 24 25 25 26 26 26 26 26 26 27 27 27 27 28 28 29 29 29 29 29 29 30 30 30 30 30 30 31 31 31 31 32 32 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 38 38 38 38 39 39 39 39 39 39 40 40 41 41 41 41 41 41 42 42 43 43 43 43 44 44 44 44 46 46 46 46 47 47 47 47 47 47 47 47 49 49 50 50 51 51 52 52 53 53 54 54 55 55 55 55 56 56 56 56 56 56 57 57 58 58 58 58 58 58 58 58 59 59 59 59 59 59 59 59 60 60 61 61 61 61 62 62 62 62 63 63 64 64 65 65 65 65 65 65 66 66 67 67 68 68 69 69 70 70 72 72 72 72 72 72 73 73 73 73 73 73 74 74 74 74 74 74 74 74 74 74 75 75 75 75 75 75 76 76 77 77 77 77 78 78 78 78 79 79 80 80 80 80 81 81 81 81 81 81 82 82 83 83 84 84 84 84 84 84 84 84 85 85 85 85 85 85 86 86 87 87 87 87 88 88 89 89 89 89 89 89 90 90 90 90 90 90 91 91 91 91 91 91 91 91 91 91 93 93 93 93 93 93 94 94 95 95 95 95 95 95 96 96 96 96 96 96 97 97 97 97 98 98 98 98 99 99 99 99 99 99} + +do_execsql_test 4.8.2 { + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +} {0 0 1 3379 1 5443 2 372 2 4473 2 7074 3 2916 3 9096 4 4049 5 5643 6 1047 7 2205 7 7081 7 10141 8 1553 8 5926 8 6422 9 4883 9 7932 9 8497 10 9544 11 5727 11 6433 12 2825 12 5918 12 8582 13 5190 13 8570 14 8596 15 3189 15 6023 15 8924 16 1942 16 1958 16 3590 17 10134 19 7474 20 5946 21 5464 21 9682 22 3029 22 6140 23 212 23 1926 23 8520 24 2626 25 3331 26 337 26 7539 26 7565 27 1270 27 10035 28 3217 29 1649 29 4355 29 7326 30 4215 30 9400 30 9853 31 5977 31 6008 32 2857 33 370 33 4326 33 8175 33 8909 33 9661 34 6414 34 6516 34 8958 34 9925 35 2151 35 5638 36 3701 36 7818 36 8785 36 8994 37 4597 37 8557 38 735 38 9891 39 842 39 7513 39 9721 40 3475 41 115 41 4874 41 5906 42 4185 43 2754 43 3518 44 7072 44 9765 46 1041 46 1316 47 2198 47 3378 47 7612 47 7923 49 6482 50 9450 51 5778 52 9370 53 4408 54 1448 55 3174 55 6876 56 2913 56 3435 56 3574 57 7223 58 5248 58 7876 58 9318 58 9823 59 697 59 2813 59 6665 59 7455 60 6821 61 2426 61 4944 62 904 62 8658 63 4471 64 8407 65 2116 65 5177 65 5603 66 8142 67 1620 68 803 69 9260 70 7396 72 4833 72 8004 72 8076 73 5017 73 5716 73 6213 74 74 74 189 74 2365 74 5538 74 7297 75 3665 75 6951 75 8343 76 3964 77 1903 77 7028 78 1394 78 4293 79 6292 80 4677 80 7692 81 542 81 4045 81 8488 82 10117 83 10008 84 1826 84 4761 84 9534 84 9628 85 2602 85 2711 85 7166 86 2291 87 4560 87 5865 88 6380 89 461 89 3306 89 3790 90 3119 90 6606 90 7782 91 995 91 2517 91 3007 91 8749 91 8876 93 1742 93 2051 93 8268 94 4143 95 5112 95 6118 95 9191 96 638 96 5344 96 6761 97 1243 97 1545 98 3888 98 5442 99 311 99 1146 99 9093} + +do_execsql_test 4.8.3 { + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +} {0 10141 1 10141 1 10141 2 10141 2 10141 2 10141 3 10141 3 10141 4 10141 5 10141 6 10141 7 10141 7 10141 7 10141 8 10141 8 10141 8 10141 9 10141 9 10141 9 10141 10 10141 11 10141 11 10141 12 10141 12 10141 12 10141 13 10141 13 10141 14 10141 15 10141 15 10141 15 10141 16 10141 16 10141 16 10141 17 10141 19 10141 20 10141 21 10141 21 10141 22 10141 22 10141 23 10141 23 10141 23 10141 24 10141 25 10141 26 10141 26 10141 26 10141 27 10141 27 10141 28 10141 29 10141 29 10141 29 10141 30 10141 30 10141 30 10141 31 10141 31 10141 32 10141 33 10141 33 10141 33 10141 33 10141 33 10141 34 10141 34 10141 34 10141 34 10141 35 10141 35 10141 36 10141 36 10141 36 10141 36 10141 37 10141 37 10141 38 10141 38 10141 39 10141 39 10141 39 10141 40 10141 41 10141 41 10141 41 10141 42 10141 43 10141 43 10141 44 10141 44 10141 46 10141 46 10141 47 10141 47 10141 47 10141 47 10141 49 10141 50 10141 51 10141 52 10141 53 10141 54 10141 55 10141 55 10141 56 10141 56 10141 56 10141 57 10141 58 10141 58 10141 58 10141 58 10141 59 10141 59 10141 59 10141 59 10141 60 10141 61 10141 61 10141 62 10141 62 10141 63 10141 64 10141 65 10141 65 10141 65 10141 66 10141 67 10141 68 10141 69 10141 70 10141 72 10141 72 10141 72 10141 73 10141 73 10141 73 10141 74 10141 74 10141 74 10141 74 10141 74 10141 75 10141 75 10141 75 10141 76 10141 77 10141 77 10141 78 10141 78 10141 79 10141 80 10141 80 10141 81 10141 81 10141 81 10141 82 10141 83 10141 84 10141 84 10141 84 10141 84 10141 85 10141 85 10141 85 10141 86 10141 87 10141 87 10141 88 10141 89 10141 89 10141 89 10141 90 10141 90 10141 90 10141 91 10141 91 10141 91 10141 91 10141 91 10141 93 10141 93 10141 93 10141 94 10141 95 10141 95 10141 95 10141 96 10141 96 10141 96 10141 97 10141 97 10141 98 10141 98 10141 99 10141 99 10141 99 10141} + +do_execsql_test 4.8.4 { + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +} {0 10141 1 4699 1 6763 2 3069 2 5670 2 9771 3 1048 3 7228 4 6096 5 4503 6 9100 7 7 7 3067 7 7943 8 3727 8 4223 8 8596 9 1653 9 2218 9 5267 10 607 11 3719 11 4425 12 1571 12 4235 12 7328 13 1584 13 4964 14 1559 15 1232 15 4133 15 6967 16 6567 16 8199 16 8215 17 24 19 2686 20 4215 21 480 21 4698 22 4023 22 7134 23 1644 23 8238 23 9952 24 7539 25 6835 26 2602 26 2628 26 9830 27 133 27 8898 28 6952 29 2844 29 5815 29 8521 30 318 30 771 30 5956 31 4164 31 4195 32 7316 33 513 33 1265 33 1999 33 5848 33 9804 34 250 34 1217 34 3659 34 3761 35 4538 35 8025 36 1183 36 1392 36 2359 36 6476 37 1621 37 5581 38 288 38 9444 39 459 39 2667 39 9338 40 6706 41 4276 41 5308 41 10067 42 5998 43 6666 43 7430 44 420 44 3113 46 8871 46 9146 47 2265 47 2576 47 6810 47 7990 49 3708 50 741 51 4414 52 823 53 5786 54 8747 55 3320 55 7022 56 6623 56 6762 56 7284 57 2975 58 376 58 881 58 2323 58 4951 59 2745 59 3535 59 7387 59 9503 60 3380 61 5258 61 7776 62 1545 62 9299 63 5733 64 1798 65 4603 65 5029 65 8090 66 2065 67 8588 68 9406 69 950 70 2815 72 2137 72 2209 72 5380 73 4001 73 4498 73 5197 74 2918 74 4677 74 7850 74 10026 74 10141 75 1873 75 3265 75 6551 76 6253 77 3190 77 8315 78 5926 78 8825 79 3928 80 2529 80 5544 81 1734 81 6177 81 9680 82 106 83 216 84 597 84 691 84 5464 84 8399 85 3060 85 7515 85 7624 86 7936 87 4363 87 5668 88 3849 89 6440 89 6924 89 9769 90 2449 90 3625 90 7112 91 1356 91 1483 91 7225 91 7715 91 9237 93 1966 93 8183 93 8492 94 6092 95 1045 95 4118 95 5124 96 3476 96 4893 96 9599 97 8693 97 8995 98 4797 98 6351 99 1147 99 9094 99 9929} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/window3.tcl lxd-3.0.3/dist/sqlite/test/window3.tcl --- lxd-3.0.2/dist/sqlite/test/window3.tcl 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window3.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,337 @@ +# 2018 May 19 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +source [file join [file dirname $argv0] pg_common.tcl] + +#========================================================================= + +start_test window3 "2018 May 31" +ifcapable !windowfunc + +execsql_test 1.0 { + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t2(a, b) VALUES + (1,0), (2,74), (3,41), (4,74), (5,23), (6,99), (7,26), (8,33), (9,2), + (10,89), (11,81), (12,96), (13,59), (14,38), (15,68), (16,39), (17,62), + (18,91), (19,46), (20,6), (21,99), (22,97), (23,27), (24,46), (25,78), + (26,54), (27,97), (28,8), (29,67), (30,29), (31,93), (32,84), (33,77), + (34,23), (35,16), (36,16), (37,93), (38,65), (39,35), (40,47), (41,7), + (42,86), (43,74), (44,61), (45,91), (46,85), (47,24), (48,85), (49,43), + (50,59), (51,12), (52,32), (53,56), (54,3), (55,91), (56,22), (57,90), + (58,55), (59,15), (60,28), (61,89), (62,25), (63,47), (64,1), (65,56), + (66,40), (67,43), (68,56), (69,16), (70,75), (71,36), (72,89), (73,98), + (74,76), (75,81), (76,4), (77,94), (78,42), (79,30), (80,78), (81,33), + (82,29), (83,53), (84,63), (85,2), (86,87), (87,37), (88,80), (89,84), + (90,72), (91,41), (92,9), (93,61), (94,73), (95,95), (96,65), (97,13), + (98,58), (99,96), (100,98), (101,1), (102,21), (103,74), (104,65), (105,35), + (106,5), (107,73), (108,11), (109,51), (110,87), (111,41), (112,12), (113,8), + (114,20), (115,31), (116,31), (117,15), (118,95), (119,22), (120,73), + (121,79), (122,88), (123,34), (124,8), (125,11), (126,49), (127,34), + (128,90), (129,59), (130,96), (131,60), (132,55), (133,75), (134,77), + (135,44), (136,2), (137,7), (138,85), (139,57), (140,74), (141,29), (142,70), + (143,59), (144,19), (145,39), (146,26), (147,26), (148,47), (149,80), + (150,90), (151,36), (152,58), (153,47), (154,9), (155,72), (156,72), (157,66), + (158,33), (159,93), (160,75), (161,64), (162,81), (163,9), (164,23), (165,37), + (166,13), (167,12), (168,14), (169,62), (170,91), (171,36), (172,91), + (173,33), (174,15), (175,34), (176,36), (177,99), (178,3), (179,95), (180,69), + (181,58), (182,52), (183,30), (184,50), (185,84), (186,10), (187,84), + (188,33), (189,21), (190,39), (191,44), (192,58), (193,30), (194,38), + (195,34), (196,83), (197,27), (198,82), (199,17), (200,7); +} + +execsql_test 1.1 { + SELECT max(b) OVER ( + ORDER BY a + ) FROM t2 +} + +foreach {tn window} { + 1 "RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW" + 2 "RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING" + 3 "RANGE BETWEEN CURRENT ROW AND CURRENT ROW" + 4 "RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING" + 5 "ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING" + 6 "ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING" + 7 "ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW" + 8 "ROWS BETWEEN 4 PRECEDING AND CURRENT ROW" + 9 "ROWS BETWEEN CURRENT ROW AND CURRENT ROW" + 10 "ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING" + 11 "ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING" + 12 "ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING" + 13 "ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING" + 14 "ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING" + 15 "ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING" + 16 "ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING" + 17 "ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING" +} { + execsql_test 1.$tn.2.1 "SELECT max(b) OVER ( ORDER BY a $window ) FROM t2" + execsql_test 1.$tn.2.2 "SELECT min(b) OVER ( ORDER BY a $window ) FROM t2" + + execsql_test 1.$tn.3.1 " + SELECT row_number() OVER ( ORDER BY a $window ) FROM t2 + " + execsql_test 1.$tn.3.2 " + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2 + " + execsql_test 1.$tn.3.3 " + SELECT row_number() OVER ( $window ) FROM t2 + " + + execsql_test 1.$tn.4.1 " + SELECT dense_rank() OVER ( ORDER BY a $window ) FROM t2 + " + execsql_test 1.$tn.4.2 " + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2 + " + execsql_test 1.$tn.4.3 " + SELECT dense_rank() OVER ( ORDER BY b $window ) FROM t2 + " + execsql_test 1.$tn.4.4 " + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b $window ) FROM t2 + " + execsql_test 1.$tn.4.5 " + SELECT dense_rank() OVER ( ORDER BY b%10 $window ) FROM t2 + " + execsql_test 1.$tn.4.6 " + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ) FROM t2 + " + + execsql_test 1.$tn.5.1 " + SELECT rank() OVER ( ORDER BY a $window ) FROM t2 + " + execsql_test 1.$tn.5.2 " + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2 + " + execsql_test 1.$tn.5.3 " + SELECT rank() OVER ( ORDER BY b $window ) FROM t2 + " + execsql_test 1.$tn.5.4 " + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b $window ) FROM t2 + " + execsql_test 1.$tn.5.5 " + SELECT rank() OVER ( ORDER BY b%10 $window ) FROM t2 + " + execsql_test 1.$tn.5.6 " + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ) FROM t2 + " + + execsql_test 1.$tn.6.1 " + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ) + FROM t2 + " + + execsql_float_test 1.$tn.7.1 " + SELECT percent_rank() OVER ( ORDER BY a $window ) FROM t2 + " + execsql_float_test 1.$tn.7.2 " + SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2 + " + execsql_float_test 1.$tn.7.3 " + SELECT percent_rank() OVER ( ORDER BY b $window ) FROM t2 + " + execsql_float_test 1.$tn.7.4 " + SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b $window ) FROM t2 + " + execsql_float_test 1.$tn.7.5 " + SELECT percent_rank() OVER ( ORDER BY b%10 $window ) FROM t2 + " + execsql_float_test 1.$tn.7.6 " + SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 $window) FROM t2 + " + + execsql_float_test 1.$tn.8.1 " + SELECT cume_dist() OVER ( ORDER BY a $window ) FROM t2 + " + execsql_float_test 1.$tn.8.2 " + SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2 + " + execsql_float_test 1.$tn.8.3 " + SELECT cume_dist() OVER ( ORDER BY b $window ) FROM t2 + " + execsql_float_test 1.$tn.8.4 " + SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b $window ) FROM t2 + " + execsql_float_test 1.$tn.8.5 " + SELECT cume_dist() OVER ( ORDER BY b%10 $window ) FROM t2 + " + execsql_float_test 1.$tn.8.6 " + SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 $window ) FROM t2 + " + + execsql_float_test 1.$tn.8.1 " + SELECT ntile(100) OVER ( ORDER BY a $window ) FROM t2 + " + execsql_float_test 1.$tn.8.2 " + SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2 + " + execsql_float_test 1.$tn.8.3 " + SELECT ntile(102) OVER ( ORDER BY b,a $window ) FROM t2 + " + execsql_float_test 1.$tn.8.4 " + SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a $window ) FROM t2 + " + execsql_float_test 1.$tn.8.5 " + SELECT ntile(104) OVER ( ORDER BY b%10,a $window ) FROM t2 + " + execsql_float_test 1.$tn.8.6 " + SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2 + " + execsql_float_test 1.$tn.8.7 " + SELECT ntile(105) OVER ( $window ) FROM t2 + " + + execsql_test 1.$tn.9.1 " + SELECT last_value(a+b) OVER ( ORDER BY a $window ) FROM t2 + " + execsql_test 1.$tn.9.2 " + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a $window ) FROM t2 + " + execsql_test 1.$tn.9.3 " + SELECT last_value(a+b) OVER ( ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.9.4 " + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.9.5 " + SELECT last_value(a+b) OVER ( ORDER BY b%10,a $window ) FROM t2 + " + execsql_test 1.$tn.9.6 " + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2 + " + + execsql_test 1.$tn.10.1 " + SELECT nth_value(b,b+1) OVER (ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.10.2 " + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.10.3 " + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.10.4 " + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.10.5 " + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a $window ) FROM t2 + " + execsql_test 1.$tn.10.6 " + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2 + " + + execsql_test 1.$tn.11.1 " + SELECT first_value(b) OVER (ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.11.2 " + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.11.3 " + SELECT first_value(b) OVER ( ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.11.4 " + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.11.5 " + SELECT first_value(b) OVER ( ORDER BY b%10,a $window ) FROM t2 + " + execsql_test 1.$tn.11.6 " + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2 + " + + execsql_test 1.$tn.12.1 " + SELECT lead(b,b) OVER (ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.12.2 " + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.12.3 " + SELECT lead(b,b) OVER ( ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.12.4 " + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.12.5 " + SELECT lead(b,b) OVER ( ORDER BY b%10,a $window ) FROM t2 + " + execsql_test 1.$tn.12.6 " + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2 + " + + execsql_test 1.$tn.13.1 " + SELECT lag(b,b) OVER (ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.13.2 " + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.13.3 " + SELECT lag(b,b) OVER ( ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.13.4 " + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.13.5 " + SELECT lag(b,b) OVER ( ORDER BY b%10,a $window ) FROM t2 + " + execsql_test 1.$tn.13.6 " + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2 + " + + execsql_test 1.$tn.14.1 " + SELECT string_agg(CAST(b AS TEXT), '.') OVER (ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.14.2 " + SELECT string_agg(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a $window) FROM t2 + " + execsql_test 1.$tn.14.3 " + SELECT string_agg(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.14.4 " + SELECT string_agg(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a $window ) FROM t2 + " + execsql_test 1.$tn.14.5 " + SELECT string_agg(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a $window ) FROM t2 + " + execsql_test 1.$tn.14.6 " + SELECT string_agg(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 $window) FROM t2 + " + + execsql_test 1.$tn.15.1 " + SELECT count(*) OVER win, string_agg(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a $window) + " + + execsql_test 1.$tn.15.2 " + SELECT count(*) OVER win, string_agg(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a $window) + " + + execsql_test 1.$tn.15.3 " + SELECT count(*) OVER win, string_agg(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a $window) + " + + execsql_test 1.$tn.15.4 " + SELECT count(*) OVER win, string_agg(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a $window) + " + +} + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/window3.test lxd-3.0.3/dist/sqlite/test/window3.test --- lxd-3.0.2/dist/sqlite/test/window3.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window3.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,9054 @@ +# 2018 May 31 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. +# + +#################################################### +# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED! +#################################################### + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix window3 + +ifcapable !windowfunc { finish_test ; return } +do_execsql_test 1.0 { + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t2(a, b) VALUES + (1,0), (2,74), (3,41), (4,74), (5,23), (6,99), (7,26), (8,33), (9,2), + (10,89), (11,81), (12,96), (13,59), (14,38), (15,68), (16,39), (17,62), + (18,91), (19,46), (20,6), (21,99), (22,97), (23,27), (24,46), (25,78), + (26,54), (27,97), (28,8), (29,67), (30,29), (31,93), (32,84), (33,77), + (34,23), (35,16), (36,16), (37,93), (38,65), (39,35), (40,47), (41,7), + (42,86), (43,74), (44,61), (45,91), (46,85), (47,24), (48,85), (49,43), + (50,59), (51,12), (52,32), (53,56), (54,3), (55,91), (56,22), (57,90), + (58,55), (59,15), (60,28), (61,89), (62,25), (63,47), (64,1), (65,56), + (66,40), (67,43), (68,56), (69,16), (70,75), (71,36), (72,89), (73,98), + (74,76), (75,81), (76,4), (77,94), (78,42), (79,30), (80,78), (81,33), + (82,29), (83,53), (84,63), (85,2), (86,87), (87,37), (88,80), (89,84), + (90,72), (91,41), (92,9), (93,61), (94,73), (95,95), (96,65), (97,13), + (98,58), (99,96), (100,98), (101,1), (102,21), (103,74), (104,65), (105,35), + (106,5), (107,73), (108,11), (109,51), (110,87), (111,41), (112,12), (113,8), + (114,20), (115,31), (116,31), (117,15), (118,95), (119,22), (120,73), + (121,79), (122,88), (123,34), (124,8), (125,11), (126,49), (127,34), + (128,90), (129,59), (130,96), (131,60), (132,55), (133,75), (134,77), + (135,44), (136,2), (137,7), (138,85), (139,57), (140,74), (141,29), (142,70), + (143,59), (144,19), (145,39), (146,26), (147,26), (148,47), (149,80), + (150,90), (151,36), (152,58), (153,47), (154,9), (155,72), (156,72), (157,66), + (158,33), (159,93), (160,75), (161,64), (162,81), (163,9), (164,23), (165,37), + (166,13), (167,12), (168,14), (169,62), (170,91), (171,36), (172,91), + (173,33), (174,15), (175,34), (176,36), (177,99), (178,3), (179,95), (180,69), + (181,58), (182,52), (183,30), (184,50), (185,84), (186,10), (187,84), + (188,33), (189,21), (190,39), (191,44), (192,58), (193,30), (194,38), + (195,34), (196,83), (197,27), (198,82), (199,17), (200,7), (201,5); +} {} + +do_execsql_test 1.1 { + SELECT max(b) OVER ( + ORDER BY a + ) FROM t2 +} {0 74 74 74 74 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.1.2.1 { + SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 74 74 74 74 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.1.2.2 { + SELECT min(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.1.3.1 { + SELECT row_number() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.1.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.1.3.3 { + SELECT row_number() OVER ( RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.1.4.1 { + SELECT dense_rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.1.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.1.4.3 { + SELECT dense_rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.1.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.1.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.1.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.1.5.1 { + SELECT rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.1.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.1.5.3 { + SELECT rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.1.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.1.5.5 { + SELECT rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.1.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.1.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.1.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.1.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.1.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 76 44 78 28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206} + +do_execsql_test 1.1.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.1.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 65 102 11 87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276} + +do_execsql_test 1.1.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 196 134 109 213 223 106 234 191 212 168 229 147 218 240 65 102 119 136 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 11 87 138 63 124 179 78 141 84 120 234 79 231 162 227 228 280 57 181 110 179 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 80 182 71 157 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 111 206 74 132 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 26 51 52 85 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 48 144 207 216 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 36 121 132 88 52 232 156 210 239 250 83 103 158 210 171 198 101 163 172 163 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276} + +do_execsql_test 1.1.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.1.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.1.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} 41 {} {} {} {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} 2 {} 29 {} {} {} 46 62 62 {} {} 16 {} 33 {} {} {} {} {} 78 {} 61 {} 59 77 {} 74 {} 27 {} 22 39 67 {} 54 85 74 90 7 61 90 62 {} 93 {} {} {} {} 23 {} 74 93 30 23 29 3 1 41 {} 65 33 2 98 86 89 25 76 {} 40 38 15 13 96 74 97 81 40 16 99 76 96 32 80 86 59 2 99 84 84 39 65 27 76 78 84 16 2 96 59 16 41 28 13 89 22 4 42 91 41 33 87 55 81 29 36 28 6 47 97 97 85 33 41 93 15 85 89 98 98 43 23 73 4 56 29 89 46 65 38 59 68 47 9 93 9 23 39 16 93 98 74 65 75 15 56 93 12 2 81 2 23 97 47 91 15 93 35 16 63 8 53 91 33 99} + +do_execsql_test 1.1.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} 81 {} {} {} 81 {} 21 {} {} {} {} 21 {} {} {} 21 {} {} {} {} {} {} 12 {} {} {} 12 {} {} 72 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 73 {} 23 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} 64 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 15 {} {} {} {} {} {} 55 {} 15 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 47 {} {} {} {} {} {} {} {} {} 98 {} 98 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 29 {} {} {} {} {} {} {} 29 29 {} {} {}} + +do_execsql_test 1.1.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 4 4 4 5 5 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 9 9 10 10 11 11 11 11 11 12 12 12 12 12 13 13 13 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 25 25 25 25 26 26 27 27 28 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 31 31 31 32 32 33 33 33 33 33 33 33 34 34 34 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 37 37 37 38 38 38 38 38 39 39 39 39 39 39 40 40 40 41 41 41 41 42 42 42 43 43 43 43 43 43 43 43 44 44 44 46 46 46 46 47 47 47 47 47 47 47 47 47 47} + +do_execsql_test 1.1.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} 90 {} {} {} 90 1 30 {} {} {} 31 30 {} {} {} 1 40 {} 50 11 81 42 40 {} 50 81 40 {} {} 50 {} 52 {} 41 81 {} 41 {} 2 30 2 81 82 53 {} 10 {} {} 81 {} 41 10 81 30 81 {} 3 3 23 {} 3 61 80 {} 94 3 91 91 72 3 63 30 91 94 94 72 91 73 91 84 84 33 41 1 33 84 73 73 91 20 41 84 33 33 84 33 41 84 20 21 44 22 90 22 81 81 74 93 93 93 81 21 83 44 44 21 21 21 13 21 21 34 11 34 73 74 2 60 2 34 2 34 74 60 23 2 2 2 11 91 60 62 73 74 70 51 65 74 93 65 70 34 70 93 93 93 62 35 44 43 12 35 41 43 44 44 41 80 54 72 43 41 43 91 12 80 80 35 33 12} + +do_execsql_test 1.1.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.11.1 { + SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.1.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.1.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.1.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9} + +do_execsql_test 1.1.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.1.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.1.12.1 { + SELECT lead(b,b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.13.1 { + SELECT lag(b,b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.1.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.1.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.1.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.1.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.1.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 0.74 0.74.41 0.74.41.74 0.74.41.74.23 0.74.41.74.23.99 0.74.41.74.23.99.26 0.74.41.74.23.99.26.33 0.74.41.74.23.99.26.33.2 0.74.41.74.23.99.26.33.2.89 0.74.41.74.23.99.26.33.2.89.81 0.74.41.74.23.99.26.33.2.89.81.96 0.74.41.74.23.99.26.33.2.89.81.96.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5} + +do_execsql_test 1.1.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 0.90 0.90.40 0.90.40.30 0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 0.90.40.30.80.20.90.60 0.90.40.30.80.20.90.60.70 0.90.40.30.80.20.90.60.70.80 0.90.40.30.80.20.90.60.70.80.90 0.90.40.30.80.20.90.60.70.80.90.30 0.90.40.30.80.20.90.60.70.80.90.30.50 0.90.40.30.80.20.90.60.70.80.90.30.50.10 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 41 41.81 41.81.91 41.81.91.61 41.81.91.61.91 41.81.91.61.91.91 41.81.91.61.91.91.1 41.81.91.61.91.91.1.81 41.81.91.61.91.91.1.81.41 41.81.91.61.91.91.1.81.41.61 41.81.91.61.91.91.1.81.41.61.1 41.81.91.61.91.91.1.81.41.61.1.21 41.81.91.61.91.91.1.81.41.61.1.21.11 41.81.91.61.91.91.1.81.41.61.1.21.11.51 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 2 2.62 2.62.12 2.62.12.32 2.62.12.32.22 2.62.12.32.22.42 2.62.12.32.22.42.2 2.62.12.32.22.42.2.72 2.62.12.32.22.42.2.72.12 2.62.12.32.22.42.2.72.12.22 2.62.12.32.22.42.2.72.12.22.2 2.62.12.32.22.42.2.72.12.22.2.72 2.62.12.32.22.42.2.72.12.22.2.72.72 2.62.12.32.22.42.2.72.12.22.2.72.72.12 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 23 23.33 23.33.93 23.33.93.23 23.33.93.23.93 23.33.93.23.93.43 23.33.93.23.93.43.3 23.33.93.23.93.43.3.43 23.33.93.23.93.43.3.43.33 23.33.93.23.93.43.3.43.33.53 23.33.93.23.93.43.3.43.33.53.63 23.33.93.23.93.43.3.43.33.53.63.73 23.33.93.23.93.43.3.43.33.53.63.73.13 23.33.93.23.93.43.3.43.33.53.63.73.13.73 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 74 74.74 74.74.54 74.74.54.84 74.74.54.84.74 74.74.54.84.74.24 74.74.54.84.74.24.4 74.74.54.84.74.24.4.94 74.74.54.84.74.24.4.94.84 74.74.54.84.74.24.4.94.84.74 74.74.54.84.74.24.4.94.84.74.34 74.74.54.84.74.24.4.94.84.74.34.34 74.74.54.84.74.24.4.94.84.74.34.34.44 74.74.54.84.74.24.4.94.84.74.34.34.44.74 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 65 65.35 65.35.85 65.35.85.85 65.35.85.85.55 65.35.85.85.55.15 65.35.85.85.55.15.25 65.35.85.85.55.15.25.75 65.35.85.85.55.15.25.75.95 65.35.85.85.55.15.25.75.95.65 65.35.85.85.55.15.25.75.95.65.65 65.35.85.85.55.15.25.75.95.65.65.35 65.35.85.85.55.15.25.75.95.65.65.35.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 26 26.96 26.96.46 26.96.46.6 26.96.46.6.46 26.96.46.6.46.16 26.96.46.6.46.16.16 26.96.46.6.46.16.16.86 26.96.46.6.46.16.16.86.56 26.96.46.6.46.16.16.86.56.56 26.96.46.6.46.16.16.86.56.56.56 26.96.46.6.46.16.16.86.56.56.56.16 26.96.46.6.46.16.16.86.56.56.56.16.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 97 97.27 97.27.97 97.27.97.67 97.27.97.67.77 97.27.97.67.77.47 97.27.97.67.77.47.7 97.27.97.67.77.47.7.47 97.27.97.67.77.47.7.47.87 97.27.97.67.77.47.7.47.87.37 97.27.97.67.77.47.7.47.87.37.87 97.27.97.67.77.47.7.47.87.37.87.77 97.27.97.67.77.47.7.47.87.37.87.77.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 38 38.68 38.68.78 38.68.78.8 38.68.78.8.28 38.68.78.8.28.98 38.68.78.8.28.98.78 38.68.78.8.28.98.78.58 38.68.78.8.28.98.78.58.98 38.68.78.8.28.98.78.58.98.8 38.68.78.8.28.98.78.58.98.8.88 38.68.78.8.28.98.78.58.98.8.88.8 38.68.78.8.28.98.78.58.98.8.88.8.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 99 99.89 99.89.59 99.89.59.39 99.89.59.39.99 99.89.59.39.99.29 99.89.59.39.99.29.59 99.89.59.39.99.29.59.89 99.89.59.39.99.29.59.89.89 99.89.59.39.99.29.59.89.89.29 99.89.59.39.99.29.59.89.89.29.9 99.89.59.39.99.29.59.89.89.29.9.79 99.89.59.39.99.29.59.89.89.29.9.79.49 99.89.59.39.99.29.59.89.89.29.9.79.49.59 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.1.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.1 0.1.1 0.1.1.2 0.1.1.2.2 0.1.1.2.2.2 0.1.1.2.2.2.3 0.1.1.2.2.2.3.3 0.1.1.2.2.2.3.3.4 0.1.1.2.2.2.3.3.4.5 0.1.1.2.2.2.3.3.4.5.5 0.1.1.2.2.2.3.3.4.5.5.6 0.1.1.2.2.2.3.3.4.5.5.6.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99} + +do_execsql_test 1.1.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.10 0.10.20 0.10.20.30 0.10.20.30.30 0.10.20.30.30.30 0.10.20.30.30.30.40 0.10.20.30.30.30.40.50 0.10.20.30.30.30.40.50.60 0.10.20.30.30.30.40.50.60.70 0.10.20.30.30.30.40.50.60.70.80 0.10.20.30.30.30.40.50.60.70.80.80 0.10.20.30.30.30.40.50.60.70.80.80.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 1 1.1 1.1.11 1.1.11.11 1.1.11.11.21 1.1.11.11.21.21 1.1.11.11.21.21.31 1.1.11.11.21.21.31.31 1.1.11.11.21.21.31.31.41 1.1.11.11.21.21.31.31.41.41 1.1.11.11.21.21.31.31.41.41.41 1.1.11.11.21.21.31.31.41.41.41.51 1.1.11.11.21.21.31.31.41.41.41.51.61 1.1.11.11.21.21.31.31.41.41.41.51.61.61 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 2 2.2 2.2.2 2.2.2.12 2.2.2.12.12 2.2.2.12.12.12 2.2.2.12.12.12.22 2.2.2.12.12.12.22.22 2.2.2.12.12.12.22.22.32 2.2.2.12.12.12.22.22.32.42 2.2.2.12.12.12.22.22.32.42.52 2.2.2.12.12.12.22.22.32.42.52.62 2.2.2.12.12.12.22.22.32.42.52.62.62 2.2.2.12.12.12.22.22.32.42.52.62.62.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 3 3.3 3.3.13 3.3.13.13 3.3.13.13.23 3.3.13.13.23.23 3.3.13.13.23.23.23 3.3.13.13.23.23.23.33 3.3.13.13.23.23.23.33.33 3.3.13.13.23.23.23.33.33.33 3.3.13.13.23.23.23.33.33.33.33 3.3.13.13.23.23.23.33.33.33.33.33 3.3.13.13.23.23.23.33.33.33.33.33.43 3.3.13.13.23.23.23.33.33.33.33.33.43.43 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 4 4.14 4.14.24 4.14.24.34 4.14.24.34.34 4.14.24.34.34.34 4.14.24.34.34.34.34 4.14.24.34.34.34.34.44 4.14.24.34.34.34.34.44.44 4.14.24.34.34.34.34.44.44.54 4.14.24.34.34.34.34.44.44.54.64 4.14.24.34.34.34.34.44.44.54.64.74 4.14.24.34.34.34.34.44.44.54.64.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 5 5.5 5.5.15 5.5.15.15 5.5.15.15.15 5.5.15.15.15.25 5.5.15.15.15.25.35 5.5.15.15.15.25.35.35 5.5.15.15.15.25.35.35.55 5.5.15.15.15.25.35.35.55.55 5.5.15.15.15.25.35.35.55.55.65 5.5.15.15.15.25.35.35.55.55.65.65 5.5.15.15.15.25.35.35.55.55.65.65.65 5.5.15.15.15.25.35.35.55.55.65.65.65.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 6 6.16 6.16.16 6.16.16.16 6.16.16.16.26 6.16.16.16.26.26 6.16.16.16.26.26.26 6.16.16.16.26.26.26.36 6.16.16.16.26.26.26.36.36 6.16.16.16.26.26.26.36.36.36 6.16.16.16.26.26.26.36.36.36.36 6.16.16.16.26.26.26.36.36.36.36.46 6.16.16.16.26.26.26.36.36.36.36.46.46 6.16.16.16.26.26.26.36.36.36.36.46.46.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 7 7.7 7.7.7 7.7.7.17 7.7.7.17.27 7.7.7.17.27.27 7.7.7.17.27.27.37 7.7.7.17.27.27.37.37 7.7.7.17.27.27.37.37.47 7.7.7.17.27.27.37.37.47.47 7.7.7.17.27.27.37.37.47.47.47 7.7.7.17.27.27.37.37.47.47.47.47 7.7.7.17.27.27.37.37.47.47.47.47.57 7.7.7.17.27.27.37.37.47.47.47.47.57.67 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 8 8.8 8.8.8 8.8.8.28 8.8.8.28.38 8.8.8.28.38.38 8.8.8.28.38.38.58 8.8.8.28.38.38.58.58 8.8.8.28.38.38.58.58.58 8.8.8.28.38.38.58.58.58.58 8.8.8.28.38.38.58.58.58.58.68 8.8.8.28.38.38.58.58.58.58.68.78 8.8.8.28.38.38.58.58.58.58.68.78.78 8.8.8.28.38.38.58.58.58.58.68.78.78.88 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 9 9.9 9.9.9 9.9.9.19 9.9.9.19.29 9.9.9.19.29.29 9.9.9.19.29.29.29 9.9.9.19.29.29.29.39 9.9.9.19.29.29.29.39.39 9.9.9.19.29.29.29.39.39.39 9.9.9.19.29.29.29.39.39.39.49 9.9.9.19.29.29.29.39.39.39.49.59 9.9.9.19.29.29.29.39.39.39.49.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99} + +do_execsql_test 1.1.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.90 0.90.40 0.90.40.30 0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 0.90.40.30.80.20.90.60 0.90.40.30.80.20.90.60.70 0.90.40.30.80.20.90.60.70.80 0.90.40.30.80.20.90.60.70.80.90 0.90.40.30.80.20.90.60.70.80.90.30 0.90.40.30.80.20.90.60.70.80.90.30.50 0.90.40.30.80.20.90.60.70.80.90.30.50.10 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.1.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.1.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 {} 2 74 3 74 4 74.74 5 74.74 6 74.74.99 7 74.74.99 8 74.74.99.33 9 74.74.99.33 10 74.74.99.33.89 11 74.74.99.33.89 12 74.74.99.33.89.96 13 74.74.99.33.89.96 14 74.74.99.33.89.96.38 15 74.74.99.33.89.96.38 16 74.74.99.33.89.96.38.39 17 74.74.99.33.89.96.38.39 18 74.74.99.33.89.96.38.39.91 19 74.74.99.33.89.96.38.39.91 20 74.74.99.33.89.96.38.39.91.6 21 74.74.99.33.89.96.38.39.91.6 22 74.74.99.33.89.96.38.39.91.6.97 23 74.74.99.33.89.96.38.39.91.6.97 24 74.74.99.33.89.96.38.39.91.6.97.46 25 74.74.99.33.89.96.38.39.91.6.97.46 26 74.74.99.33.89.96.38.39.91.6.97.46.54 27 74.74.99.33.89.96.38.39.91.6.97.46.54 28 74.74.99.33.89.96.38.39.91.6.97.46.54.8 29 74.74.99.33.89.96.38.39.91.6.97.46.54.8 30 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29 31 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29 32 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84 33 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84 34 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23 35 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23 36 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16 37 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16 38 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65 39 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65 40 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47 41 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47 42 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86 43 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86 44 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61 45 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61 46 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85 47 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85 48 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85 49 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85 50 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59 51 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59 52 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32 53 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32 54 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3 55 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3 56 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22 57 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22 58 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55 59 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55 60 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28 61 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28 62 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25 63 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25 64 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1 65 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1 66 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40 67 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40 68 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56 69 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56 70 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75 71 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75 72 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89 73 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89 74 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76 75 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76 76 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4 77 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4 78 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42 79 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42 80 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78 81 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78 82 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29 83 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29 84 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63 85 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63 86 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87 87 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87 88 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80 89 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80 90 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72 91 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72 92 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9 93 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9 94 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73 95 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73 96 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65 97 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65 98 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58 99 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58 100 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98 101 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98 102 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21 103 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21 104 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65 105 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65 106 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5 107 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5 108 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11 109 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11 110 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87 111 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87 112 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12 113 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12 114 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20 115 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20 116 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31 117 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31 118 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95 119 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95 120 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73 121 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73 122 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88 123 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88 124 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8 125 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8 126 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49 127 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49 128 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90 129 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90 130 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96 131 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96 132 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55 133 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55 134 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77 135 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77 136 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2 137 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2 138 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85 139 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85 140 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74 141 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74 142 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70 143 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70 144 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19 145 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19 146 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26 147 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26 148 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47 149 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47 150 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90 151 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90 152 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58 153 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58 154 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9 155 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9 156 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72 157 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72 158 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33 159 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33 160 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75 161 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75 162 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81 163 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81 164 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23 165 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23 166 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13 167 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13 168 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14 169 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14 170 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91 171 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91 172 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91 173 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91 174 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15 175 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15 176 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36 177 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36 178 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3 179 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3 180 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69 181 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69 182 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52 183 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52 184 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50 185 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50 186 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10 187 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10 188 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33 189 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33 190 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39 191 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39 192 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58 193 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58 194 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38 195 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38 196 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83 197 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83 198 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82 199 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82 200 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7} + +do_execsql_test 1.1.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 22 {} 23 {} 24 {} 25 {} 26 {} 27 {} 28 {} 29 {} 30 {} 31 {} 32 {} 33 {} 34 {} 35 {} 36 {} 37 {} 38 {} 39 {} 40 {} 41 {} 42 {} 43 {} 44 {} 45 {} 46 {} 47 {} 48 {} 49 {} 50 {} 51 {} 52 {} 53 {} 54 {} 55 {} 56 {} 57 {} 58 {} 59 {} 60 {} 61 {} 62 {} 63 {} 64 {} 65 {} 66 {} 67 {} 68 {} 69 {} 70 {} 71 {} 72 {} 73 {} 74 {} 75 {} 76 {} 77 {} 78 {} 79 {} 80 {} 81 {} 82 {} 83 {} 84 {} 85 {} 86 {} 87 {} 88 {} 89 {} 90 {} 91 {} 92 {} 93 {} 94 {} 95 {} 96 {} 97 {} 98 {} 99 {} 100 {} 101 {} 102 {} 103 {} 104 {} 105 {} 106 {} 107 {} 108 {} 109 {} 110 {} 111 {} 112 {} 113 {} 114 {} 115 {} 116 {} 117 {} 118 {} 119 {} 120 {} 121 {} 122 {} 123 {} 124 {} 125 {} 126 {} 127 {} 128 {} 129 {} 130 {} 131 {} 132 {} 133 {} 134 {} 135 {} 136 {} 137 {} 138 {} 139 {} 140 {} 141 {} 142 {} 143 {} 144 {} 145 {} 146 {} 147 {} 148 {} 149 {} 150 {} 151 {} 152 {} 153 {} 154 {} 155 {} 156 {} 157 {} 158 {} 159 {} 160 {} 161 {} 162 {} 163 {} 164 {} 165 {} 166 {} 167 {} 168 {} 169 {} 170 {} 171 {} 172 {} 173 {} 174 {} 175 {} 176 {} 177 {} 178 {} 179 {} 180 {} 181 {} 182 {} 183 {} 184 {} 185 {} 186 {} 187 {} 188 {} 189 {} 190 {} 191 {} 192 {} 193 {} 194 {} 195 {} 196 {} 197 {} 198 {} 199 {} 200 {} 201 {}} + +do_execsql_test 1.1.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {}} + +do_execsql_test 1.1.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 89 2 89.6 3 89.6.29 4 89.6.29.47 5 89.6.29.47.59 6 89.6.29.47.59.28 7 89.6.29.47.59.28.75 8 89.6.29.47.59.28.75.78 9 89.6.29.47.59.28.75.78.72 10 89.6.29.47.59.28.75.78.72.98 11 89.6.29.47.59.28.75.78.72.98.87 12 89.6.29.47.59.28.75.78.72.98.87.73 13 89.6.29.47.59.28.75.78.72.98.87.73.96 14 89.6.29.47.59.28.75.78.72.98.87.73.96.74 15 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90 16 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75 17 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91 18 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69 19 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 1 74 2 74.96 3 74.96.97 4 74.96.97.84 5 74.96.97.84.86 6 74.96.97.84.86.32 7 74.96.97.84.86.32.25 8 74.96.97.84.86.32.25.89 9 74.96.97.84.86.32.25.89.29 10 74.96.97.84.86.32.25.89.29.9 11 74.96.97.84.86.32.25.89.29.9.21 12 74.96.97.84.86.32.25.89.29.9.21.12 13 74.96.97.84.86.32.25.89.29.9.21.12.88 14 74.96.97.84.86.32.25.89.29.9.21.12.88.55 15 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70 16 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58 17 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81 18 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91 19 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 74 2 74.38 3 74.38.46 4 74.38.46.23 5 74.38.46.23.61 6 74.38.46.23.61.3 7 74.38.46.23.61.3.1 8 74.38.46.23.61.3.1.76 9 74.38.46.23.61.3.1.76.63 10 74.38.46.23.61.3.1.76.63.73 11 74.38.46.23.61.3.1.76.63.73.65 12 74.38.46.23.61.3.1.76.63.73.65.20 13 74.38.46.23.61.3.1.76.63.73.65.20.8 14 74.38.46.23.61.3.1.76.63.73.65.20.8.77 15 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19 16 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9 17 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23 18 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15 19 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 99 2 99.39 3 99.39.54 4 99.39.54.16 5 99.39.54.16.85 6 99.39.54.16.85.22 7 99.39.54.16.85.22.40 8 99.39.54.16.85.22.40.4 9 99.39.54.16.85.22.40.4.87 10 99.39.54.16.85.22.40.4.87.65 11 99.39.54.16.85.22.40.4.87.65.5 12 99.39.54.16.85.22.40.4.87.65.5.31 13 99.39.54.16.85.22.40.4.87.65.5.31.49 14 99.39.54.16.85.22.40.4.87.65.5.31.49.2 15 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26 16 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72 17 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13 18 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36 19 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 33 2 33.91 3 33.91.8 4 33.91.8.65 5 33.91.8.65.85 6 33.91.8.65.85.55 7 33.91.8.65.85.55.56 8 33.91.8.65.85.55.56.42 9 33.91.8.65.85.55.56.42.80 10 33.91.8.65.85.55.56.42.80.58 11 33.91.8.65.85.55.56.42.80.58.11 12 33.91.8.65.85.55.56.42.80.58.11.95 13 33.91.8.65.85.55.56.42.80.58.11.95.90 14 33.91.8.65.85.55.56.42.80.58.11.95.90.85 15 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47 16 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33 17 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14 18 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3 19 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {}} + +do_execsql_test 1.2.2.1 { + SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.2.2.2 { + SELECT min(b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.2.3.1 { + SELECT row_number() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.2.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.2.3.3 { + SELECT row_number() OVER ( RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.2.4.1 { + SELECT dense_rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.2.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.2.4.3 { + SELECT dense_rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.2.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.2.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.2.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.2.5.1 { + SELECT rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.2.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.2.5.3 { + SELECT rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.2.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.2.5.5 { + SELECT rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.2.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.2.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.2.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.2.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.2.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206} + +do_execsql_test 1.2.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.2.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.2.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.2.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.2.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.2.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 81 86 81 46 98 97 23 41 72 29 13 28 35 16 47 47 9 24 26 98 58 8 24 30 91 58 2 56 29 73 2 42 46 62 62 73 40 16 85 33 37 81 25 9 87 78 87 61 28 59 77 90 74 9 27 41 22 39 67 72 54 85 74 90 7 61 90 62 4 93 72 96 94 29 23 95 74 93 30 23 29 3 1 41 80 65 33 2 98 86 89 25 76 65 40 38 15 13 96 74 97 81 40 16 99 76 96 32 80 86 59 2 99 84 84 39 65 27 76 78 84 16 2 96 59 16 41 28 13 89 22 4 42 91 41 33 87 55 81 29 36 28 6 47 97 97 85 33 41 93 15 85 89 98 98 43 23 73 4 56 29 89 46 65 38 59 68 47 9 93 9 23 39 16 93 98 74 65 75 15 56 93 12 2 81 2 23 97 47 91 15 93 35 16 63 8 53 91 33 99} + +do_execsql_test 1.2.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} 81 {} {} {} 81 21 21 {} {} {} {} 21 {} {} {} 21 12 {} 72 {} {} {} 12 {} 72 {} 12 {} {} 72 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} 73 {} {} {} {} {} 73 {} 23 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} 64 {} {} {} {} {} {} {} {} {} {} 55 {} {} {} {} {} {} 15 55 {} {} {} {} {} 55 {} 15 {} {} {} 16 {} 26 26 {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 47 {} {} {} {} {} 27 47 {} {} {} 98 {} {} {} {} {} 98 {} 98 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 29 {} {} {} {} {} 9 {} 29 29 {} {} {}} + +do_execsql_test 1.2.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 4 4 4 5 5 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 9 9 10 10 11 11 11 11 11 12 12 12 12 12 13 13 13 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 25 25 25 25 26 26 27 27 28 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 31 31 31 32 32 33 33 33 33 33 33 33 34 34 34 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 37 37 37 38 38 38 38 38 39 39 39 39 39 39 40 40 40 41 41 41 41 42 42 42 43 43 43 43 43 43 43 43 44 44 44 46 46 46 46 47 47 47 47 47 47 47 47 47 47} + +do_execsql_test 1.2.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 1 51 51 91 91 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 2 2 62 62 62 {} {} {} {} {} {} {} {} {} {} {} 13 13 43 43 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 25 75 75 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 66 66 66 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 37 37 87 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 58 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 39 39 89 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 74 32 31 84 91 74 3 93 84 74 31 12 90 31 22 74 64 43 64 64 90 74 22 43 90 1 30 62 22 31 31 30 74 64 64 1 40 33 50 11 81 42 40 13 50 81 40 13 13 50 33 52 24 41 81 34 41 34 2 30 2 81 82 53 33 10 33 33 81 34 41 10 81 30 81 4 3 3 23 94 3 61 80 84 94 3 91 91 72 3 63 30 91 94 94 72 91 73 91 84 84 33 41 1 33 84 73 73 91 20 41 84 33 33 84 33 41 84 20 21 44 22 90 22 81 81 74 93 93 93 81 21 83 44 44 21 21 21 13 21 21 34 11 34 73 74 2 60 2 34 2 34 74 60 23 2 2 2 11 91 60 62 73 74 70 51 65 74 93 65 70 34 70 93 93 93 62 35 44 43 12 35 41 43 44 44 41 80 54 72 43 41 43 91 12 80 80 35 33 12} + +do_execsql_test 1.2.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.11.1 { + SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.2.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.2.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.2.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9} + +do_execsql_test 1.2.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.2.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.2.12.1 { + SELECT lead(b,b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.13.1 { + SELECT lag(b,b) OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.2.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.2.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.2.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.2.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.2.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5} + +do_execsql_test 1.2.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.2.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99} + +do_execsql_test 1.2.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99} + +do_execsql_test 1.2.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.2.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.2.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +} {201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7} + +do_execsql_test 1.2.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +} {201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {}} + +do_execsql_test 1.2.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +} {20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {}} + +do_execsql_test 1.2.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +} {20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {}} + +do_execsql_test 1.3.2.1 { + SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.3.2.2 { + SELECT min(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.3.3.1 { + SELECT row_number() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.3.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.3.3.3 { + SELECT row_number() OVER ( RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.3.4.1 { + SELECT dense_rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.3.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.3.4.3 { + SELECT dense_rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.3.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.3.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.3.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.3.5.1 { + SELECT rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.3.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.3.5.3 { + SELECT rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.3.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.3.5.5 { + SELECT rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.3.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.3.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.3.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.3.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.3.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 76 44 78 28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206} + +do_execsql_test 1.3.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.3.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 65 102 11 87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276} + +do_execsql_test 1.3.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 196 134 109 213 223 106 234 191 212 168 229 147 218 240 65 102 119 136 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 11 87 138 63 124 179 78 141 84 120 234 79 231 162 227 228 280 57 181 110 179 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 80 182 71 157 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 111 206 74 132 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 26 51 52 85 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 48 144 207 216 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 36 121 132 88 52 232 156 210 239 250 83 103 158 210 171 198 101 163 172 163 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276} + +do_execsql_test 1.3.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.3.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.3.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.11.1 { + SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.3.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.3.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99} + +do_execsql_test 1.3.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 10 20 30 30 30 40 50 60 70 80 80 90 90 90 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 2 2 2 12 12 12 22 22 32 42 52 62 62 72 72 72 82 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 8 8 8 28 38 38 58 58 58 58 68 78 78 88 98 98 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99} + +do_execsql_test 1.3.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.3.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.3.12.1 { + SELECT lead(b,b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.13.1 { + SELECT lag(b,b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.3.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.3.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.3.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.3.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.3.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.3.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.3.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99} + +do_execsql_test 1.3.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 10 20 30 30 30 40 50 60 70 80 80 90 90 90 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 2 2 2 12 12 12 22 22 32 42 52 62 62 72 72 72 82 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 8 8 8 28 38 38 58 58 58 58 68 78 78 88 98 98 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99} + +do_execsql_test 1.3.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.3.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.3.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) +} {1 {} 1 74 1 {} 1 74 1 {} 1 99 1 {} 1 33 1 {} 1 89 1 {} 1 96 1 {} 1 38 1 {} 1 39 1 {} 1 91 1 {} 1 6 1 {} 1 97 1 {} 1 46 1 {} 1 54 1 {} 1 8 1 {} 1 29 1 {} 1 84 1 {} 1 23 1 {} 1 16 1 {} 1 65 1 {} 1 47 1 {} 1 86 1 {} 1 61 1 {} 1 85 1 {} 1 85 1 {} 1 59 1 {} 1 32 1 {} 1 3 1 {} 1 22 1 {} 1 55 1 {} 1 28 1 {} 1 25 1 {} 1 1 1 {} 1 40 1 {} 1 56 1 {} 1 75 1 {} 1 89 1 {} 1 76 1 {} 1 4 1 {} 1 42 1 {} 1 78 1 {} 1 29 1 {} 1 63 1 {} 1 87 1 {} 1 80 1 {} 1 72 1 {} 1 9 1 {} 1 73 1 {} 1 65 1 {} 1 58 1 {} 1 98 1 {} 1 21 1 {} 1 65 1 {} 1 5 1 {} 1 11 1 {} 1 87 1 {} 1 12 1 {} 1 20 1 {} 1 31 1 {} 1 95 1 {} 1 73 1 {} 1 88 1 {} 1 8 1 {} 1 49 1 {} 1 90 1 {} 1 96 1 {} 1 55 1 {} 1 77 1 {} 1 2 1 {} 1 85 1 {} 1 74 1 {} 1 70 1 {} 1 19 1 {} 1 26 1 {} 1 47 1 {} 1 90 1 {} 1 58 1 {} 1 9 1 {} 1 72 1 {} 1 33 1 {} 1 75 1 {} 1 81 1 {} 1 23 1 {} 1 13 1 {} 1 14 1 {} 1 91 1 {} 1 91 1 {} 1 15 1 {} 1 36 1 {} 1 3 1 {} 1 69 1 {} 1 52 1 {} 1 50 1 {} 1 10 1 {} 1 33 1 {} 1 39 1 {} 1 58 1 {} 1 38 1 {} 1 83 1 {} 1 82 1 {} 1 7 1 {}} + +do_execsql_test 1.3.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) +} {1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {}} + +do_execsql_test 1.3.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) +} {1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {}} + +do_execsql_test 1.3.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) +} {1 89 1 6 1 29 1 47 1 59 1 28 1 75 1 78 1 72 1 98 1 87 1 73 1 96 1 74 1 90 1 75 1 91 1 69 1 39 1 7 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 74 1 96 1 97 1 84 1 86 1 32 1 25 1 89 1 29 1 9 1 21 1 12 1 88 1 55 1 70 1 58 1 81 1 91 1 52 1 58 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 74 1 38 1 46 1 23 1 61 1 3 1 1 1 76 1 63 1 73 1 65 1 20 1 8 1 77 1 19 1 9 1 23 1 15 1 50 1 38 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 99 1 39 1 54 1 16 1 85 1 22 1 40 1 4 1 87 1 65 1 5 1 31 1 49 1 2 1 26 1 72 1 13 1 36 1 10 1 83 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 33 1 91 1 8 1 65 1 85 1 55 1 56 1 42 1 80 1 58 1 11 1 95 1 90 1 85 1 47 1 33 1 14 1 3 1 33 1 82 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {}} + +do_execsql_test 1.4.2.1 { + SELECT max(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 95 95 84 84 84 84 84 84 84 84 83 83 83 83 83 83 83 83 83 82 82 17 7 5} + +do_execsql_test 1.4.2.2 { + SELECT min(b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.4.3.1 { + SELECT row_number() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.4.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.4.3.3 { + SELECT row_number() OVER ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.4.4.1 { + SELECT dense_rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.4.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.4.4.3 { + SELECT dense_rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.4.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.4.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.4.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.4.5.1 { + SELECT rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.4.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.4.5.3 { + SELECT rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.4.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.4.5.5 { + SELECT rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.4.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.4.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.4.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.4.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.4.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206} + +do_execsql_test 1.4.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.4.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.4.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.4.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.4.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.4.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.11.1 { + SELECT first_value(b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.4.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.4.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99} + +do_execsql_test 1.4.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 10 20 30 30 30 40 50 60 70 80 80 90 90 90 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 2 2 2 12 12 12 22 22 32 42 52 62 62 72 72 72 82 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 8 8 8 28 38 38 58 58 58 58 68 78 78 88 98 98 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99} + +do_execsql_test 1.4.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.4.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.4.12.1 { + SELECT lead(b,b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.13.1 { + SELECT lag(b,b) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.4.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.4.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.4.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.4.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.4.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.21.39.44.58.30.38.34.83.27.82.17.7.5 21.39.44.58.30.38.34.83.27.82.17.7.5 39.44.58.30.38.34.83.27.82.17.7.5 44.58.30.38.34.83.27.82.17.7.5 58.30.38.34.83.27.82.17.7.5 30.38.34.83.27.82.17.7.5 38.34.83.27.82.17.7.5 34.83.27.82.17.7.5 83.27.82.17.7.5 27.82.17.7.5 82.17.7.5 17.7.5 7.5 5} + +do_execsql_test 1.4.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 90.40.30.80.20.90.60.70.80.90.30.50.10.30 40.30.80.20.90.60.70.80.90.30.50.10.30 30.80.20.90.60.70.80.90.30.50.10.30 80.20.90.60.70.80.90.30.50.10.30 20.90.60.70.80.90.30.50.10.30 90.60.70.80.90.30.50.10.30 60.70.80.90.30.50.10.30 70.80.90.30.50.10.30 80.90.30.50.10.30 90.30.50.10.30 30.50.10.30 50.10.30 10.30 30 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.61.1.21.11.51.41.31.31.11.81.91.91.21 61.1.21.11.51.41.31.31.11.81.91.91.21 1.21.11.51.41.31.31.11.81.91.91.21 21.11.51.41.31.31.11.81.91.91.21 11.51.41.31.31.11.81.91.91.21 51.41.31.31.11.81.91.91.21 41.31.31.11.81.91.91.21 31.31.11.81.91.91.21 31.11.81.91.91.21 11.81.91.91.21 81.91.91.21 91.91.21 91.21 21 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 32.22.42.2.72.12.22.2.72.72.12.62.52.82 22.42.2.72.12.22.2.72.72.12.62.52.82 42.2.72.12.22.2.72.72.12.62.52.82 2.72.12.22.2.72.72.12.62.52.82 72.12.22.2.72.72.12.62.52.82 12.22.2.72.72.12.62.52.82 22.2.72.72.12.62.52.82 2.72.72.12.62.52.82 72.72.12.62.52.82 72.12.62.52.82 12.62.52.82 62.52.82 52.82 82 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 53.63.73.13.73.73.33.93.23.13.33.3.33.83 63.73.13.73.73.33.93.23.13.33.3.33.83 73.13.73.73.33.93.23.13.33.3.33.83 13.73.73.33.93.23.13.33.3.33.83 73.73.33.93.23.13.33.3.33.83 73.33.93.23.13.33.3.33.83 33.93.23.13.33.3.33.83 93.23.13.33.3.33.83 23.13.33.3.33.83 13.33.3.33.83 33.3.33.83 3.33.83 33.83 83 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 94.84.74.34.34.44.74.64.14.34.84.84.44.34 84.74.34.34.44.74.64.14.34.84.84.44.34 74.34.34.44.74.64.14.34.84.84.44.34 34.34.44.74.64.14.34.84.84.44.34 34.44.74.64.14.34.84.84.44.34 44.74.64.14.34.84.84.44.34 74.64.14.34.84.84.44.34 64.14.34.84.84.44.34 14.34.84.84.44.34 34.84.84.44.34 84.84.44.34 84.44.34 44.34 34 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.5.15.95.55.75.85.75.15.95.5 35.5.15.95.55.75.85.75.15.95.5 5.15.95.55.75.85.75.15.95.5 15.95.55.75.85.75.15.95.5 95.55.75.85.75.15.95.5 55.75.85.75.15.95.5 75.85.75.15.95.5 85.75.15.95.5 75.15.95.5 15.95.5 95.5 5 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 56.56.56.16.36.76.96.96.26.26.36.66.36.36 56.56.16.36.76.96.96.26.26.36.66.36.36 56.16.36.76.96.96.26.26.36.66.36.36 16.36.76.96.96.26.26.36.66.36.36 36.76.96.96.26.26.36.66.36.36 76.96.96.26.26.36.66.36.36 96.96.26.26.36.66.36.36 96.26.26.36.66.36.36 26.26.36.66.36.36 26.36.66.36.36 36.66.36.36 66.36.36 36.36 36 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 7.47.87.37.87.77.7.57.47.47.37.27.17.7 47.87.37.87.77.7.57.47.47.37.27.17.7 87.37.87.77.7.57.47.47.37.27.17.7 37.87.77.7.57.47.47.37.27.17.7 87.77.7.57.47.47.37.27.17.7 77.7.57.47.47.37.27.17.7 7.57.47.47.37.27.17.7 57.47.47.37.27.17.7 47.47.37.27.17.7 47.37.27.17.7 37.27.17.7 27.17.7 17.7 7 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 78.8.28.98.78.58.98.8.88.8.58.58.58.38 8.28.98.78.58.98.8.88.8.58.58.58.38 28.98.78.58.98.8.88.8.58.58.58.38 98.78.58.98.8.88.8.58.58.58.38 78.58.98.8.88.8.58.58.58.38 58.98.8.88.8.58.58.58.38 98.8.88.8.58.58.58.38 8.88.8.58.58.58.38 88.8.58.58.58.38 8.58.58.58.38 58.58.58.38 58.58.38 58.38 38 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.9.79.49.59.29.59.19.39.9.9.99.69.39 9.79.49.59.29.59.19.39.9.9.99.69.39 79.49.59.29.59.19.39.9.9.99.69.39 49.59.29.59.19.39.9.9.99.69.39 59.29.59.19.39.9.9.99.69.39 29.59.19.39.9.9.99.69.39 59.19.39.9.9.99.69.39 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39 9.99.69.39 99.69.39 69.39 39} + +do_execsql_test 1.4.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 94.95.95.95.96.96.96.97.97.98.98.99.99.99 95.95.95.96.96.96.97.97.98.98.99.99.99 95.95.96.96.96.97.97.98.98.99.99.99 95.96.96.96.97.97.98.98.99.99.99 96.96.96.97.97.98.98.99.99.99 96.96.97.97.98.98.99.99.99 96.97.97.98.98.99.99.99 97.97.98.98.99.99.99 97.98.98.99.99.99 98.98.99.99.99 98.99.99.99 99.99.99 99.99 99} + +do_execsql_test 1.4.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 10.20.30.30.30.40.50.60.70.80.80.90.90.90 20.30.30.30.40.50.60.70.80.80.90.90.90 30.30.30.40.50.60.70.80.80.90.90.90 30.30.40.50.60.70.80.80.90.90.90 30.40.50.60.70.80.80.90.90.90 40.50.60.70.80.80.90.90.90 50.60.70.80.80.90.90.90 60.70.80.80.90.90.90 70.80.80.90.90.90 80.80.90.90.90 80.90.90.90 90.90.90 90.90 90 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 41.41.41.51.61.61.81.81.81.91.91.91.91.91 41.41.51.61.61.81.81.81.91.91.91.91.91 41.51.61.61.81.81.81.91.91.91.91.91 51.61.61.81.81.81.91.91.91.91.91 61.61.81.81.81.91.91.91.91.91 61.81.81.81.91.91.91.91.91 81.81.81.91.91.91.91.91 81.81.91.91.91.91.91 81.91.91.91.91.91 91.91.91.91.91 91.91.91.91 91.91.91 91.91 91 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 12.12.12.22.22.32.42.52.62.62.72.72.72.82 12.12.22.22.32.42.52.62.62.72.72.72.82 12.22.22.32.42.52.62.62.72.72.72.82 22.22.32.42.52.62.62.72.72.72.82 22.32.42.52.62.62.72.72.72.82 32.42.52.62.62.72.72.72.82 42.52.62.62.72.72.72.82 52.62.62.72.72.72.82 62.62.72.72.72.82 62.72.72.72.82 72.72.72.82 72.72.82 72.82 82 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.43.43.53.63.73.73.73.83.93.93.93 33.43.43.53.63.73.73.73.83.93.93.93 43.43.53.63.73.73.73.83.93.93.93 43.53.63.73.73.73.83.93.93.93 53.63.73.73.73.83.93.93.93 63.73.73.73.83.93.93.93 73.73.73.83.93.93.93 73.73.83.93.93.93 73.83.93.93.93 83.93.93.93 93.93.93 93.93 93 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 44.44.54.64.74.74.74.74.74.84.84.84.84.94 44.54.64.74.74.74.74.74.84.84.84.84.94 54.64.74.74.74.74.74.84.84.84.84.94 64.74.74.74.74.74.84.84.84.84.94 74.74.74.74.74.84.84.84.84.94 74.74.74.74.84.84.84.84.94 74.74.74.84.84.84.84.94 74.74.84.84.84.84.94 74.84.84.84.84.94 84.84.84.84.94 84.84.84.94 84.84.94 84.94 94 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 55.55.65.65.65.75.75.75.85.85.85.95.95.95 55.65.65.65.75.75.75.85.85.85.95.95.95 65.65.65.75.75.75.85.85.85.95.95.95 65.65.75.75.75.85.85.85.95.95.95 65.75.75.75.85.85.85.95.95.95 75.75.75.85.85.85.95.95.95 75.75.85.85.85.95.95.95 75.85.85.85.95.95.95 85.85.85.95.95.95 85.85.95.95.95 85.95.95.95 95.95.95 95.95 95 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.46.46.56.56.56.66.76.86.96.96.96 36.46.46.56.56.56.66.76.86.96.96.96 46.46.56.56.56.66.76.86.96.96.96 46.56.56.56.66.76.86.96.96.96 56.56.56.66.76.86.96.96.96 56.56.66.76.86.96.96.96 56.66.76.86.96.96.96 66.76.86.96.96.96 76.86.96.96.96 86.96.96.96 96.96.96 96.96 96 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 37.37.47.47.47.47.57.67.77.77.87.87.97.97 37.47.47.47.47.57.67.77.77.87.87.97.97 47.47.47.47.57.67.77.77.87.87.97.97 47.47.47.57.67.77.77.87.87.97.97 47.47.57.67.77.77.87.87.97.97 47.57.67.77.77.87.87.97.97 57.67.77.77.87.87.97.97 67.77.77.87.87.97.97 77.77.87.87.97.97 77.87.87.97.97 87.87.97.97 87.97.97 97.97 97 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.28.38.38.58.58.58.58.68.78.78.88.98.98 28.38.38.58.58.58.58.68.78.78.88.98.98 38.38.58.58.58.58.68.78.78.88.98.98 38.58.58.58.58.68.78.78.88.98.98 58.58.58.58.68.78.78.88.98.98 58.58.58.68.78.78.88.98.98 58.58.68.78.78.88.98.98 58.68.78.78.88.98.98 68.78.78.88.98.98 78.78.88.98.98 78.88.98.98 88.98.98 98.98 98 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.49.59.59.59.59.69.79.89.89.89.99.99.99 49.59.59.59.59.69.79.89.89.89.99.99.99 59.59.59.59.69.79.89.89.89.99.99.99 59.59.59.69.79.89.89.89.99.99.99 59.59.69.79.89.89.89.99.99.99 59.69.79.89.89.89.99.99.99 69.79.89.89.89.99.99.99 79.89.89.89.99.99.99 89.89.89.99.99.99 89.89.99.99.99 89.99.99.99 99.99.99 99.99 99} + +do_execsql_test 1.4.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.9.79.49.59.29.59.19.39.9.9.99.69.39 9.79.49.59.29.59.19.39.9.9.99.69.39 79.49.59.29.59.19.39.9.9.99.69.39 49.59.29.59.19.39.9.9.99.69.39 59.29.59.19.39.9.9.99.69.39 29.59.19.39.9.9.99.69.39 59.19.39.9.9.99.69.39 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39 9.99.69.39 99.69.39 69.39 39} + +do_execsql_test 1.4.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.4.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +} {201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 200 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 199 74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 198 74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 197 99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 196 99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 195 33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 194 33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 193 89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 192 89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 191 96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 190 96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 189 38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 188 38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 187 39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 186 39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 185 91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 184 91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 183 6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 182 6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 181 97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 180 97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 179 46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 178 46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 177 54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 176 54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 175 8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 174 8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 173 29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 172 29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 171 84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 170 84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 169 23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 168 23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 167 16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 166 16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 165 65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 164 65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 163 47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 162 47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 161 86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 160 86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 159 61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 158 61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 157 85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 156 85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 155 85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 154 85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 153 59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 152 59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 151 32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 150 32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 149 3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 148 3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 147 22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 146 22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 145 55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 144 55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 143 28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 142 28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 141 25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 140 25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 139 1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 138 1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 137 40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 136 40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 135 56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 134 56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 133 75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 132 75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 131 89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 130 89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 129 76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 128 76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 127 4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 126 4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 125 42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 124 42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 123 78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 122 78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 121 29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 120 29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 119 63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 118 63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 117 87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 116 87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 115 80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 114 80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 113 72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 112 72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 111 9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 110 9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 109 73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 108 73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 107 65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 106 65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 105 58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 104 58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 103 98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 102 98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 101 21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 100 21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 99 65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 98 65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 97 5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 96 5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 95 11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 94 11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 93 87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 92 87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 91 12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 90 12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 89 20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 88 20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 87 31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 86 31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 85 95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 84 95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 83 73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 82 73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 81 88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 80 88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 79 8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 78 8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 77 49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 76 49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 75 90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 74 90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 73 96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 72 96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 71 55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 70 55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 69 77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 68 77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 67 2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 66 2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 65 85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 64 85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 63 74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 62 74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 61 70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 60 70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 59 19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 58 19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 57 26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 56 26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 55 47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 54 47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 53 90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 52 90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 51 58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 50 58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 49 9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 48 9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 47 72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 46 72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 45 33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 44 33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 43 75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 42 75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 41 81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 40 81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 39 23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 38 23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 37 13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 36 13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 35 14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 34 14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 33 91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 32 91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 31 91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 30 91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 29 15.36.3.69.52.50.10.33.39.58.38.83.82.7 28 15.36.3.69.52.50.10.33.39.58.38.83.82.7 27 36.3.69.52.50.10.33.39.58.38.83.82.7 26 36.3.69.52.50.10.33.39.58.38.83.82.7 25 3.69.52.50.10.33.39.58.38.83.82.7 24 3.69.52.50.10.33.39.58.38.83.82.7 23 69.52.50.10.33.39.58.38.83.82.7 22 69.52.50.10.33.39.58.38.83.82.7 21 52.50.10.33.39.58.38.83.82.7 20 52.50.10.33.39.58.38.83.82.7 19 50.10.33.39.58.38.83.82.7 18 50.10.33.39.58.38.83.82.7 17 10.33.39.58.38.83.82.7 16 10.33.39.58.38.83.82.7 15 33.39.58.38.83.82.7 14 33.39.58.38.83.82.7 13 39.58.38.83.82.7 12 39.58.38.83.82.7 11 58.38.83.82.7 10 58.38.83.82.7 9 38.83.82.7 8 38.83.82.7 7 83.82.7 6 83.82.7 5 82.7 4 82.7 3 7 2 7 1 {}} + +do_execsql_test 1.4.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +} {201 {} 200 {} 199 {} 198 {} 197 {} 196 {} 195 {} 194 {} 193 {} 192 {} 191 {} 190 {} 189 {} 188 {} 187 {} 186 {} 185 {} 184 {} 183 {} 182 {} 181 {} 180 {} 179 {} 178 {} 177 {} 176 {} 175 {} 174 {} 173 {} 172 {} 171 {} 170 {} 169 {} 168 {} 167 {} 166 {} 165 {} 164 {} 163 {} 162 {} 161 {} 160 {} 159 {} 158 {} 157 {} 156 {} 155 {} 154 {} 153 {} 152 {} 151 {} 150 {} 149 {} 148 {} 147 {} 146 {} 145 {} 144 {} 143 {} 142 {} 141 {} 140 {} 139 {} 138 {} 137 {} 136 {} 135 {} 134 {} 133 {} 132 {} 131 {} 130 {} 129 {} 128 {} 127 {} 126 {} 125 {} 124 {} 123 {} 122 {} 121 {} 120 {} 119 {} 118 {} 117 {} 116 {} 115 {} 114 {} 113 {} 112 {} 111 {} 110 {} 109 {} 108 {} 107 {} 106 {} 105 {} 104 {} 103 {} 102 {} 101 {} 100 {} 99 {} 98 {} 97 {} 96 {} 95 {} 94 {} 93 {} 92 {} 91 {} 90 {} 89 {} 88 {} 87 {} 86 {} 85 {} 84 {} 83 {} 82 {} 81 {} 80 {} 79 {} 78 {} 77 {} 76 {} 75 {} 74 {} 73 {} 72 {} 71 {} 70 {} 69 {} 68 {} 67 {} 66 {} 65 {} 64 {} 63 {} 62 {} 61 {} 60 {} 59 {} 58 {} 57 {} 56 {} 55 {} 54 {} 53 {} 52 {} 51 {} 50 {} 49 {} 48 {} 47 {} 46 {} 45 {} 44 {} 43 {} 42 {} 41 {} 40 {} 39 {} 38 {} 37 {} 36 {} 35 {} 34 {} 33 {} 32 {} 31 {} 30 {} 29 {} 28 {} 27 {} 26 {} 25 {} 24 {} 23 {} 22 {} 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.4.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +} {20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.4.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +} {20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 19 6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 18 29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 17 47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 16 59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 15 28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 14 75.78.72.98.87.73.96.74.90.75.91.69.39.7 13 78.72.98.87.73.96.74.90.75.91.69.39.7 12 72.98.87.73.96.74.90.75.91.69.39.7 11 98.87.73.96.74.90.75.91.69.39.7 10 87.73.96.74.90.75.91.69.39.7 9 73.96.74.90.75.91.69.39.7 8 96.74.90.75.91.69.39.7 7 74.90.75.91.69.39.7 6 90.75.91.69.39.7 5 75.91.69.39.7 4 91.69.39.7 3 69.39.7 2 39.7 1 7 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 19 96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 18 97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 17 84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 16 86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 15 32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 14 25.89.29.9.21.12.88.55.70.58.81.91.52.58 13 89.29.9.21.12.88.55.70.58.81.91.52.58 12 29.9.21.12.88.55.70.58.81.91.52.58 11 9.21.12.88.55.70.58.81.91.52.58 10 21.12.88.55.70.58.81.91.52.58 9 12.88.55.70.58.81.91.52.58 8 88.55.70.58.81.91.52.58 7 55.70.58.81.91.52.58 6 70.58.81.91.52.58 5 58.81.91.52.58 4 81.91.52.58 3 91.52.58 2 52.58 1 58 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 19 38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 18 46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 17 23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 16 61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 15 3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 14 1.76.63.73.65.20.8.77.19.9.23.15.50.38 13 76.63.73.65.20.8.77.19.9.23.15.50.38 12 63.73.65.20.8.77.19.9.23.15.50.38 11 73.65.20.8.77.19.9.23.15.50.38 10 65.20.8.77.19.9.23.15.50.38 9 20.8.77.19.9.23.15.50.38 8 8.77.19.9.23.15.50.38 7 77.19.9.23.15.50.38 6 19.9.23.15.50.38 5 9.23.15.50.38 4 23.15.50.38 3 15.50.38 2 50.38 1 38 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 19 39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 18 54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 17 16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 16 85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 15 22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 14 40.4.87.65.5.31.49.2.26.72.13.36.10.83 13 4.87.65.5.31.49.2.26.72.13.36.10.83 12 87.65.5.31.49.2.26.72.13.36.10.83 11 65.5.31.49.2.26.72.13.36.10.83 10 5.31.49.2.26.72.13.36.10.83 9 31.49.2.26.72.13.36.10.83 8 49.2.26.72.13.36.10.83 7 2.26.72.13.36.10.83 6 26.72.13.36.10.83 5 72.13.36.10.83 4 13.36.10.83 3 36.10.83 2 10.83 1 83 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 19 91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 18 8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 17 65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 16 85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 15 55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 14 56.42.80.58.11.95.90.85.47.33.14.3.33.82 13 42.80.58.11.95.90.85.47.33.14.3.33.82 12 80.58.11.95.90.85.47.33.14.3.33.82 11 58.11.95.90.85.47.33.14.3.33.82 10 11.95.90.85.47.33.14.3.33.82 9 95.90.85.47.33.14.3.33.82 8 90.85.47.33.14.3.33.82 7 85.47.33.14.3.33.82 6 47.33.14.3.33.82 5 33.14.3.33.82 4 14.3.33.82 3 3.33.82 2 33.82 1 82 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.5.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 0 74 74 74 74 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.5.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.5.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.5.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.5.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.5.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.5.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.5.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.5.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.5.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.5.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.5.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.5.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.5.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.5.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.5.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.5.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.5.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.5.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.5.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.5.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 1 76 44 78 28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224} + +do_execsql_test 1.5.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 1 147 106 109 168 134 218 191 212 229 240 {} {} {} {} 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 {} {} {} {} 11 79 63 84 78 120 87 162 124 141 138 227 228 {} {} {} {} 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 {} {} {} {} 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 {} {} {} {} 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 {} {} {} {} 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 {} {} {} {} 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 {} {} {} {} 52 83 103 36 88 171 158 156 198 121 210 132 {} {} {} {} 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163} + +do_execsql_test 1.5.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 1 65 102 11 87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171} + +do_execsql_test 1.5.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 1 196 134 109 213 223 106 234 191 212 168 {} {} {} {} 65 102 119 136 123 210 146 147 44 132 152 160 105 154 92 156 243 109 {} {} {} {} 11 87 138 63 124 179 78 141 84 120 234 79 231 {} {} {} {} 57 181 110 179 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 {} {} {} {} 80 182 71 157 161 209 229 179 235 80 225 76 78 117 177 214 116 {} {} {} {} 111 206 74 132 189 87 74 140 113 187 103 161 169 145 208 235 131 133 {} {} {} {} 26 51 52 85 33 172 173 107 187 207 212 65 70 109 121 124 223 150 {} {} {} {} 48 144 207 216 50 224 124 202 87 110 195 200 196 96 110 211 {} {} {} {} 36 121 132 88 52 232 156 210 239 250 83 103 {} {} {} {} 101 163 172 163 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150} + +do_execsql_test 1.5.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163} + +do_execsql_test 1.5.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} 41 {} {} {} {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} 2 {} {} {} {} {} 46 62 62 {} {} {} {} 33 {} {} {} {} {} 78 {} 61 {} 59 77 {} 74 {} 27 {} {} 39 67 {} 54 85 74 90 7 61 90 62 {} 93 {} {} {} {} 23 {} 74 93 {} 23 29 3 1 41 {} 65 33 2 98 86 89 25 76 {} 40 38 15 {} {} 74 97 81 40 16 99 76 96 32 80 86 59 2 99 84 84 39 65 27 76 78 84 16 2 96 59 16 41 28 13 89 22 4 42 91 41 33 87 55 81 29 36 28 6 47 97 97 85 33 41 93 15 85 89 98 98 43 23 73 4 56 29 89 46 65 38 59 68 47 9 93 9 23 39 16 93 98 74 65 75 15 56 93 12 2 81 2 23 97 47 91 15 93 35 16 63 8 53 91 33 99} + +do_execsql_test 1.5.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 81 {} {} {} {} {} {} 21 {} {} {} {} {} {} {} {} {} {} 12 {} {} {} 12 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 73 {} 23 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 15 {} {} {} {} {} {} 55 {} 15 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} {} 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 29 29 {} {} {}} + +do_execsql_test 1.5.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} {} {} {} 2 2 2 2 3 3 3 3 4 4 4 5 5 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 9 9 10 10 11 11 11 11 11 12 12 12 12 12 13 13 13 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 25 25 25 25 26 26 27 27 28 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 31 31 31 32 32 33 33 33 33 33 33 33 34 34 34 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 37 37 37 38 38 38 38 38 39 39 39 39 39 39 40 40 40 41 41 41 41 42 42 42 43 43 43 43 43 43 43 43 44 44 44 46 46 46 46 47 47 47 47 47 47 47 47 47 47} + +do_execsql_test 1.5.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} 90 1 30 {} {} {} {} 30 {} {} {} 1 40 {} 50 11 81 {} 40 {} 50 81 40 {} {} 50 {} {} {} 41 81 {} 41 {} 2 30 2 81 82 {} {} 10 {} {} 81 {} 41 10 81 30 81 {} {} 3 23 {} 3 61 80 {} {} 3 91 91 72 3 63 30 91 94 94 72 91 73 91 84 84 33 41 1 33 84 73 73 91 20 41 84 33 33 84 33 41 84 20 21 44 22 90 22 81 81 74 93 93 93 81 21 83 44 44 21 21 21 13 21 21 34 11 34 73 74 2 60 2 34 2 34 74 60 23 2 2 2 11 91 60 62 73 74 70 51 65 74 93 65 70 34 70 93 93 93 62 35 44 43 12 35 41 43 44 44 41 80 54 72 43 41 43 91 12 80 80 35 33 12} + +do_execsql_test 1.5.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.5.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} 0 0 0 0 0 0 0 0 0 0 0 {} {} {} {} 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 {} {} {} {} 2 2 2 2 2 2 2 2 2 2 2 2 2 {} {} {} {} 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 {} {} {} {} 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 {} {} {} {} 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 {} {} {} {} 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 {} {} {} {} 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 {} {} {} {} 38 38 38 38 38 38 38 38 38 38 38 38 {} {} {} {} 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.5.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.5.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 0 0 0 0 0 0 0 0 0 0 0 {} {} {} {} 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 {} {} {} {} 2 2 2 2 2 2 2 2 2 2 2 2 2 {} {} {} {} 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 {} {} {} {} 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 {} {} {} {} 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 {} {} {} {} 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 {} {} {} {} 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 {} {} {} {} 8 8 8 8 8 8 8 8 8 8 8 8 {} {} {} {} 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9} + +do_execsql_test 1.5.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.5.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.5.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.5.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.5.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.5.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} 0 0.74 0.74.41 0.74.41.74 0.74.41.74.23 0.74.41.74.23.99 0.74.41.74.23.99.26 0.74.41.74.23.99.26.33 0.74.41.74.23.99.26.33.2 0.74.41.74.23.99.26.33.2.89 0.74.41.74.23.99.26.33.2.89.81 0.74.41.74.23.99.26.33.2.89.81.96 0.74.41.74.23.99.26.33.2.89.81.96.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27} + +do_execsql_test 1.5.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} 0 0.90 0.90.40 0.90.40.30 0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 0.90.40.30.80.20.90.60 0.90.40.30.80.20.90.60.70 0.90.40.30.80.20.90.60.70.80 0.90.40.30.80.20.90.60.70.80.90 {} {} {} {} 41 41.81 41.81.91 41.81.91.61 41.81.91.61.91 41.81.91.61.91.91 41.81.91.61.91.91.1 41.81.91.61.91.91.1.81 41.81.91.61.91.91.1.81.41 41.81.91.61.91.91.1.81.41.61 41.81.91.61.91.91.1.81.41.61.1 41.81.91.61.91.91.1.81.41.61.1.21 41.81.91.61.91.91.1.81.41.61.1.21.11 41.81.91.61.91.91.1.81.41.61.1.21.11.51 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11 {} {} {} {} 2 2.62 2.62.12 2.62.12.32 2.62.12.32.22 2.62.12.32.22.42 2.62.12.32.22.42.2 2.62.12.32.22.42.2.72 2.62.12.32.22.42.2.72.12 2.62.12.32.22.42.2.72.12.22 2.62.12.32.22.42.2.72.12.22.2 2.62.12.32.22.42.2.72.12.22.2.72 2.62.12.32.22.42.2.72.12.22.2.72.72 {} {} {} {} 23 23.33 23.33.93 23.33.93.23 23.33.93.23.93 23.33.93.23.93.43 23.33.93.23.93.43.3 23.33.93.23.93.43.3.43 23.33.93.23.93.43.3.43.33 23.33.93.23.93.43.3.43.33.53 23.33.93.23.93.43.3.43.33.53.63 23.33.93.23.93.43.3.43.33.53.63.73 23.33.93.23.93.43.3.43.33.53.63.73.13 23.33.93.23.93.43.3.43.33.53.63.73.13.73 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13 {} {} {} {} 74 74.74 74.74.54 74.74.54.84 74.74.54.84.74 74.74.54.84.74.24 74.74.54.84.74.24.4 74.74.54.84.74.24.4.94 74.74.54.84.74.24.4.94.84 74.74.54.84.74.24.4.94.84.74 74.74.54.84.74.24.4.94.84.74.34 74.74.54.84.74.24.4.94.84.74.34.34 74.74.54.84.74.24.4.94.84.74.34.34.44 74.74.54.84.74.24.4.94.84.74.34.34.44.74 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34 {} {} {} {} 65 65.35 65.35.85 65.35.85.85 65.35.85.85.55 65.35.85.85.55.15 65.35.85.85.55.15.25 65.35.85.85.55.15.25.75 65.35.85.85.55.15.25.75.95 65.35.85.85.55.15.25.75.95.65 65.35.85.85.55.15.25.75.95.65.65 65.35.85.85.55.15.25.75.95.65.65.35 65.35.85.85.55.15.25.75.95.65.65.35.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85 {} {} {} {} 26 26.96 26.96.46 26.96.46.6 26.96.46.6.46 26.96.46.6.46.16 26.96.46.6.46.16.16 26.96.46.6.46.16.16.86 26.96.46.6.46.16.16.86.56 26.96.46.6.46.16.16.86.56.56 26.96.46.6.46.16.16.86.56.56.56 26.96.46.6.46.16.16.86.56.56.56.16 26.96.46.6.46.16.16.86.56.56.56.16.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26 {} {} {} {} 97 97.27 97.27.97 97.27.97.67 97.27.97.67.77 97.27.97.67.77.47 97.27.97.67.77.47.7 97.27.97.67.77.47.7.47 97.27.97.67.77.47.7.47.87 97.27.97.67.77.47.7.47.87.37 97.27.97.67.77.47.7.47.87.37.87 97.27.97.67.77.47.7.47.87.37.87.77 97.27.97.67.77.47.7.47.87.37.87.77.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47 {} {} {} {} 38 38.68 38.68.78 38.68.78.8 38.68.78.8.28 38.68.78.8.28.98 38.68.78.8.28.98.78 38.68.78.8.28.98.78.58 38.68.78.8.28.98.78.58.98 38.68.78.8.28.98.78.58.98.8 38.68.78.8.28.98.78.58.98.8.88 38.68.78.8.28.98.78.58.98.8.88.8 {} {} {} {} 99 99.89 99.89.59 99.89.59.39 99.89.59.39.99 99.89.59.39.99.29 99.89.59.39.99.29.59 99.89.59.39.99.29.59.89 99.89.59.39.99.29.59.89.89 99.89.59.39.99.29.59.89.89.29 99.89.59.39.99.29.59.89.89.29.9 99.89.59.39.99.29.59.89.89.29.9.79 99.89.59.39.99.29.59.89.89.29.9.79.49 99.89.59.39.99.29.59.89.89.29.9.79.49.59 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9} + +do_execsql_test 1.5.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 0 0.1 0.1.1 0.1.1.2 0.1.1.2.2 0.1.1.2.2.2 0.1.1.2.2.2.3 0.1.1.2.2.2.3.3 0.1.1.2.2.2.3.3.4 0.1.1.2.2.2.3.3.4.5 0.1.1.2.2.2.3.3.4.5.5 0.1.1.2.2.2.3.3.4.5.5.6 0.1.1.2.2.2.3.3.4.5.5.6.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98} + +do_execsql_test 1.5.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 0 0.10 0.10.20 0.10.20.30 0.10.20.30.30 0.10.20.30.30.30 0.10.20.30.30.30.40 0.10.20.30.30.30.40.50 0.10.20.30.30.30.40.50.60 0.10.20.30.30.30.40.50.60.70 0.10.20.30.30.30.40.50.60.70.80 {} {} {} {} 1 1.1 1.1.11 1.1.11.11 1.1.11.11.21 1.1.11.11.21.21 1.1.11.11.21.21.31 1.1.11.11.21.21.31.31 1.1.11.11.21.21.31.31.41 1.1.11.11.21.21.31.31.41.41 1.1.11.11.21.21.31.31.41.41.41 1.1.11.11.21.21.31.31.41.41.41.51 1.1.11.11.21.21.31.31.41.41.41.51.61 1.1.11.11.21.21.31.31.41.41.41.51.61.61 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91 {} {} {} {} 2 2.2 2.2.2 2.2.2.12 2.2.2.12.12 2.2.2.12.12.12 2.2.2.12.12.12.22 2.2.2.12.12.12.22.22 2.2.2.12.12.12.22.22.32 2.2.2.12.12.12.22.22.32.42 2.2.2.12.12.12.22.22.32.42.52 2.2.2.12.12.12.22.22.32.42.52.62 2.2.2.12.12.12.22.22.32.42.52.62.62 {} {} {} {} 3 3.3 3.3.13 3.3.13.13 3.3.13.13.23 3.3.13.13.23.23 3.3.13.13.23.23.23 3.3.13.13.23.23.23.33 3.3.13.13.23.23.23.33.33 3.3.13.13.23.23.23.33.33.33 3.3.13.13.23.23.23.33.33.33.33 3.3.13.13.23.23.23.33.33.33.33.33 3.3.13.13.23.23.23.33.33.33.33.33.43 3.3.13.13.23.23.23.33.33.33.33.33.43.43 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73 {} {} {} {} 4 4.14 4.14.24 4.14.24.34 4.14.24.34.34 4.14.24.34.34.34 4.14.24.34.34.34.34 4.14.24.34.34.34.34.44 4.14.24.34.34.34.34.44.44 4.14.24.34.34.34.34.44.44.54 4.14.24.34.34.34.34.44.44.54.64 4.14.24.34.34.34.34.44.44.54.64.74 4.14.24.34.34.34.34.44.44.54.64.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84 {} {} {} {} 5 5.5 5.5.15 5.5.15.15 5.5.15.15.15 5.5.15.15.15.25 5.5.15.15.15.25.35 5.5.15.15.15.25.35.35 5.5.15.15.15.25.35.35.55 5.5.15.15.15.25.35.35.55.55 5.5.15.15.15.25.35.35.55.55.65 5.5.15.15.15.25.35.35.55.55.65.65 5.5.15.15.15.25.35.35.55.55.65.65.65 5.5.15.15.15.25.35.35.55.55.65.65.65.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85 {} {} {} {} 6 6.16 6.16.16 6.16.16.16 6.16.16.16.26 6.16.16.16.26.26 6.16.16.16.26.26.26 6.16.16.16.26.26.26.36 6.16.16.16.26.26.26.36.36 6.16.16.16.26.26.26.36.36.36 6.16.16.16.26.26.26.36.36.36.36 6.16.16.16.26.26.26.36.36.36.36.46 6.16.16.16.26.26.26.36.36.36.36.46.46 6.16.16.16.26.26.26.36.36.36.36.46.46.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76 {} {} {} {} 7 7.7 7.7.7 7.7.7.17 7.7.7.17.27 7.7.7.17.27.27 7.7.7.17.27.27.37 7.7.7.17.27.27.37.37 7.7.7.17.27.27.37.37.47 7.7.7.17.27.27.37.37.47.47 7.7.7.17.27.27.37.37.47.47.47 7.7.7.17.27.27.37.37.47.47.47.47 7.7.7.17.27.27.37.37.47.47.47.47.57 7.7.7.17.27.27.37.37.47.47.47.47.57.67 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77 {} {} {} {} 8 8.8 8.8.8 8.8.8.28 8.8.8.28.38 8.8.8.28.38.38 8.8.8.28.38.38.58 8.8.8.28.38.38.58.58 8.8.8.28.38.38.58.58.58 8.8.8.28.38.38.58.58.58.58 8.8.8.28.38.38.58.58.58.58.68 8.8.8.28.38.38.58.58.58.58.68.78 {} {} {} {} 9 9.9 9.9.9 9.9.9.19 9.9.9.19.29 9.9.9.19.29.29 9.9.9.19.29.29.29 9.9.9.19.29.29.29.39 9.9.9.19.29.29.29.39.39 9.9.9.19.29.29.29.39.39.39 9.9.9.19.29.29.29.39.39.39.49 9.9.9.19.29.29.29.39.39.39.49.59 9.9.9.19.29.29.29.39.39.39.49.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89} + +do_execsql_test 1.5.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ) FROM t2 +} {{} {} {} {} 0 0.90 0.90.40 0.90.40.30 0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 0.90.40.30.80.20.90.60 0.90.40.30.80.20.90.60.70 0.90.40.30.80.20.90.60.70.80 0.90.40.30.80.20.90.60.70.80.90 0.90.40.30.80.20.90.60.70.80.90.30 0.90.40.30.80.20.90.60.70.80.90.30.50 0.90.40.30.80.20.90.60.70.80.90.30.50.10 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9} + +do_execsql_test 1.5.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.5.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) +} {0 {} 0 {} 0 {} 0 {} 1 {} 2 74 3 74 4 74.74 5 74.74 6 74.74.99 7 74.74.99 8 74.74.99.33 9 74.74.99.33 10 74.74.99.33.89 11 74.74.99.33.89 12 74.74.99.33.89.96 13 74.74.99.33.89.96 14 74.74.99.33.89.96.38 15 74.74.99.33.89.96.38 16 74.74.99.33.89.96.38.39 17 74.74.99.33.89.96.38.39 18 74.74.99.33.89.96.38.39.91 19 74.74.99.33.89.96.38.39.91 20 74.74.99.33.89.96.38.39.91.6 21 74.74.99.33.89.96.38.39.91.6 22 74.74.99.33.89.96.38.39.91.6.97 23 74.74.99.33.89.96.38.39.91.6.97 24 74.74.99.33.89.96.38.39.91.6.97.46 25 74.74.99.33.89.96.38.39.91.6.97.46 26 74.74.99.33.89.96.38.39.91.6.97.46.54 27 74.74.99.33.89.96.38.39.91.6.97.46.54 28 74.74.99.33.89.96.38.39.91.6.97.46.54.8 29 74.74.99.33.89.96.38.39.91.6.97.46.54.8 30 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29 31 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29 32 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84 33 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84 34 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23 35 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23 36 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16 37 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16 38 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65 39 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65 40 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47 41 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47 42 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86 43 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86 44 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61 45 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61 46 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85 47 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85 48 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85 49 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85 50 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59 51 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59 52 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32 53 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32 54 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3 55 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3 56 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22 57 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22 58 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55 59 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55 60 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28 61 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28 62 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25 63 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25 64 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1 65 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1 66 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40 67 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40 68 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56 69 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56 70 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75 71 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75 72 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89 73 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89 74 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76 75 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76 76 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4 77 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4 78 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42 79 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42 80 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78 81 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78 82 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29 83 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29 84 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63 85 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63 86 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87 87 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87 88 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80 89 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80 90 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72 91 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72 92 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9 93 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9 94 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73 95 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73 96 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65 97 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65 98 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58 99 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58 100 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98 101 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98 102 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21 103 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21 104 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65 105 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65 106 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5 107 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5 108 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11 109 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11 110 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87 111 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87 112 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12 113 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12 114 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20 115 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20 116 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31 117 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31 118 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95 119 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95 120 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73 121 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73 122 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88 123 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88 124 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8 125 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8 126 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49 127 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49 128 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90 129 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90 130 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96 131 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96 132 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55 133 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55 134 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77 135 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77 136 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2 137 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2 138 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85 139 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85 140 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74 141 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74 142 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70 143 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70 144 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19 145 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19 146 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26 147 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26 148 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47 149 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47 150 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90 151 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90 152 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58 153 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58 154 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9 155 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9 156 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72 157 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72 158 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33 159 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33 160 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75 161 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75 162 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81 163 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81 164 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23 165 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23 166 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13 167 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13 168 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14 169 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14 170 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91 171 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91 172 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91 173 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91 174 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15 175 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15 176 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36 177 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36 178 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3 179 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3 180 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69 181 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69 182 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52 183 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52 184 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50 185 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50 186 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10 187 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10 188 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33 189 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33 190 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39 191 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39 192 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58 193 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58 194 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38 195 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38 196 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83 197 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83} + +do_execsql_test 1.5.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) +} {0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 22 {} 23 {} 24 {} 25 {} 26 {} 27 {} 28 {} 29 {} 30 {} 31 {} 32 {} 33 {} 34 {} 35 {} 36 {} 37 {} 38 {} 39 {} 40 {} 41 {} 42 {} 43 {} 44 {} 45 {} 46 {} 47 {} 48 {} 49 {} 50 {} 51 {} 52 {} 53 {} 54 {} 55 {} 56 {} 57 {} 58 {} 59 {} 60 {} 61 {} 62 {} 63 {} 64 {} 65 {} 66 {} 67 {} 68 {} 69 {} 70 {} 71 {} 72 {} 73 {} 74 {} 75 {} 76 {} 77 {} 78 {} 79 {} 80 {} 81 {} 82 {} 83 {} 84 {} 85 {} 86 {} 87 {} 88 {} 89 {} 90 {} 91 {} 92 {} 93 {} 94 {} 95 {} 96 {} 97 {} 98 {} 99 {} 100 {} 101 {} 102 {} 103 {} 104 {} 105 {} 106 {} 107 {} 108 {} 109 {} 110 {} 111 {} 112 {} 113 {} 114 {} 115 {} 116 {} 117 {} 118 {} 119 {} 120 {} 121 {} 122 {} 123 {} 124 {} 125 {} 126 {} 127 {} 128 {} 129 {} 130 {} 131 {} 132 {} 133 {} 134 {} 135 {} 136 {} 137 {} 138 {} 139 {} 140 {} 141 {} 142 {} 143 {} 144 {} 145 {} 146 {} 147 {} 148 {} 149 {} 150 {} 151 {} 152 {} 153 {} 154 {} 155 {} 156 {} 157 {} 158 {} 159 {} 160 {} 161 {} 162 {} 163 {} 164 {} 165 {} 166 {} 167 {} 168 {} 169 {} 170 {} 171 {} 172 {} 173 {} 174 {} 175 {} 176 {} 177 {} 178 {} 179 {} 180 {} 181 {} 182 {} 183 {} 184 {} 185 {} 186 {} 187 {} 188 {} 189 {} 190 {} 191 {} 192 {} 193 {} 194 {} 195 {} 196 {} 197 {}} + +do_execsql_test 1.5.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) +} {0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {}} + +do_execsql_test 1.5.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) +} {0 {} 0 {} 0 {} 0 {} 1 89 2 89.6 3 89.6.29 4 89.6.29.47 5 89.6.29.47.59 6 89.6.29.47.59.28 7 89.6.29.47.59.28.75 8 89.6.29.47.59.28.75.78 9 89.6.29.47.59.28.75.78.72 10 89.6.29.47.59.28.75.78.72.98 11 89.6.29.47.59.28.75.78.72.98.87 12 89.6.29.47.59.28.75.78.72.98.87.73 13 89.6.29.47.59.28.75.78.72.98.87.73.96 14 89.6.29.47.59.28.75.78.72.98.87.73.96.74 15 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90 16 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 0 {} 0 {} 0 {} 0 {} 1 74 2 74.96 3 74.96.97 4 74.96.97.84 5 74.96.97.84.86 6 74.96.97.84.86.32 7 74.96.97.84.86.32.25 8 74.96.97.84.86.32.25.89 9 74.96.97.84.86.32.25.89.29 10 74.96.97.84.86.32.25.89.29.9 11 74.96.97.84.86.32.25.89.29.9.21 12 74.96.97.84.86.32.25.89.29.9.21.12 13 74.96.97.84.86.32.25.89.29.9.21.12.88 14 74.96.97.84.86.32.25.89.29.9.21.12.88.55 15 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70 16 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 74 2 74.38 3 74.38.46 4 74.38.46.23 5 74.38.46.23.61 6 74.38.46.23.61.3 7 74.38.46.23.61.3.1 8 74.38.46.23.61.3.1.76 9 74.38.46.23.61.3.1.76.63 10 74.38.46.23.61.3.1.76.63.73 11 74.38.46.23.61.3.1.76.63.73.65 12 74.38.46.23.61.3.1.76.63.73.65.20 13 74.38.46.23.61.3.1.76.63.73.65.20.8 14 74.38.46.23.61.3.1.76.63.73.65.20.8.77 15 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19 16 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 99 2 99.39 3 99.39.54 4 99.39.54.16 5 99.39.54.16.85 6 99.39.54.16.85.22 7 99.39.54.16.85.22.40 8 99.39.54.16.85.22.40.4 9 99.39.54.16.85.22.40.4.87 10 99.39.54.16.85.22.40.4.87.65 11 99.39.54.16.85.22.40.4.87.65.5 12 99.39.54.16.85.22.40.4.87.65.5.31 13 99.39.54.16.85.22.40.4.87.65.5.31.49 14 99.39.54.16.85.22.40.4.87.65.5.31.49.2 15 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26 16 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 0 {} 0 {} 0 {} 0 {} 1 33 2 33.91 3 33.91.8 4 33.91.8.65 5 33.91.8.65.85 6 33.91.8.65.85.55 7 33.91.8.65.85.55.56 8 33.91.8.65.85.55.56.42 9 33.91.8.65.85.55.56.42.80 10 33.91.8.65.85.55.56.42.80.58 11 33.91.8.65.85.55.56.42.80.58.11 12 33.91.8.65.85.55.56.42.80.58.11.95 13 33.91.8.65.85.55.56.42.80.58.11.95.90 14 33.91.8.65.85.55.56.42.80.58.11.95.90.85 15 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47 16 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33 0 {} 0 {} 0 {} 0 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {}} + +do_execsql_test 1.6.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 0 74 74 74 74 99 99 99 33 89 89 96 96 96 68 68 68 91 91 91 99 99 99 97 78 78 97 97 97 67 93 93 93 84 77 23 93 93 93 65 47 86 86 86 91 91 91 85 85 85 59 59 56 56 91 91 91 90 90 55 89 89 89 47 56 56 56 56 56 75 75 89 98 98 98 81 94 94 94 78 78 78 53 63 63 87 87 87 84 84 84 72 61 73 95 95 95 65 96 98 98 98 74 74 74 65 73 73 73 87 87 87 41 20 31 31 31 95 95 95 79 88 88 88 34 49 49 90 90 96 96 96 75 77 77 77 44 85 85 85 74 74 70 70 59 39 39 47 80 90 90 90 58 58 72 72 72 72 93 93 93 81 81 81 37 37 37 14 62 91 91 91 91 91 34 36 99 99 99 95 95 69 58 52 84 84 84 84 84 39 44 58 58 58 38 83 83 83 82} + +do_execsql_test 1.6.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 0 0 0 41 23 23 23 26 2 2 2 81 59 38 38 38 39 39 46 6 6 6 27 27 27 46 54 8 8 8 29 29 77 23 16 16 16 16 35 35 7 7 7 61 61 61 24 24 24 43 12 12 12 3 3 3 22 22 15 15 15 25 25 1 1 1 40 40 16 16 16 36 36 76 76 4 4 4 30 30 30 29 29 29 2 2 2 37 37 72 41 9 9 9 61 65 13 13 13 58 1 1 1 21 35 5 5 5 11 11 41 12 8 8 8 20 15 15 15 22 22 73 34 8 8 8 11 34 34 59 59 55 55 55 44 2 2 2 7 57 29 29 29 19 19 19 26 26 26 47 36 36 36 9 9 9 66 33 33 33 64 64 9 9 9 13 12 12 12 14 36 36 33 15 15 15 34 3 3 3 58 52 30 30 30 10 10 10 21 21 21 39 30 30 30 34 27 27 17} + +do_execsql_test 1.6.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.6.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.6.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.6.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.6.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.6.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.6.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.6.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.6.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.6.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.6.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.6.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.6.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.6.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.6.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.6.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.6.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.6.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.6.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 1 76 44 78 28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216} + +do_execsql_test 1.6.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 1 147 106 109 168 134 218 191 212 229 240 213 234 {} {} 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 {} {} 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 {} {} 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 {} {} 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 {} {} 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 {} {} 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 {} {} 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 {} {} 52 83 103 36 88 171 158 156 198 121 210 132 210 239 {} {} 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276} + +do_execsql_test 1.6.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 1 65 102 11 87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105} + +do_execsql_test 1.6.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 1 196 134 109 213 223 106 234 191 212 168 229 147 {} {} 65 102 119 136 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 {} {} 11 87 138 63 124 179 78 141 84 120 234 79 231 162 227 {} {} 57 181 110 179 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 {} {} 80 182 71 157 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 {} {} 111 206 74 132 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 {} {} 26 51 52 85 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 {} {} 48 144 207 216 50 224 124 202 87 110 195 200 196 96 110 211 173 197 {} {} 36 121 132 88 52 232 156 210 239 250 83 103 158 210 {} {} 101 163 172 163 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105} + +do_execsql_test 1.6.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276} + +do_execsql_test 1.6.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 77 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 22 {} {} {} 12 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} {} {} 1 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 81 {} {} {} {} {} {} {} {} {} {} {} 91 {} {} {} {} {} 22 {} {} {} 12 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} 0 0 0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27} + +do_execsql_test 1.6.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} 0 0 0 90 40 30 80 20 90 60 70 80 90 {} {} 41 41 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 {} {} 2 2 2 62 12 32 22 42 2 72 12 22 2 72 72 {} {} 23 23 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 {} {} 74 74 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 {} {} 65 65 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 {} {} 26 26 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 {} {} 97 97 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 {} {} 38 38 38 68 78 8 28 98 78 58 98 8 88 8 {} {} 99 99 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9} + +do_execsql_test 1.6.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 0 0 0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98} + +do_execsql_test 1.6.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 0 0 0 10 20 30 30 30 40 50 60 70 80 {} {} 1 1 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 {} {} 2 2 2 2 2 12 12 12 22 22 32 42 52 62 62 {} {} 3 3 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 {} {} 4 4 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 {} {} 5 5 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 {} {} 6 6 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 {} {} 7 7 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 {} {} 8 8 8 8 8 28 38 38 58 58 58 58 68 78 {} {} 9 9 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89} + +do_execsql_test 1.6.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 0 0 0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9} + +do_execsql_test 1.6.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.6.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.6.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.6.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.6.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} 0 0.74 0.74.41 74.41.74 41.74.23 74.23.99 23.99.26 99.26.33 26.33.2 33.2.89 2.89.81 89.81.96 81.96.59 96.59.38 59.38.68 38.68.39 68.39.62 39.62.91 62.91.46 91.46.6 46.6.99 6.99.97 99.97.27 97.27.46 27.46.78 46.78.54 78.54.97 54.97.8 97.8.67 8.67.29 67.29.93 29.93.84 93.84.77 84.77.23 77.23.16 23.16.16 16.16.93 16.93.65 93.65.35 65.35.47 35.47.7 47.7.86 7.86.74 86.74.61 74.61.91 61.91.85 91.85.24 85.24.85 24.85.43 85.43.59 43.59.12 59.12.32 12.32.56 32.56.3 56.3.91 3.91.22 91.22.90 22.90.55 90.55.15 55.15.28 15.28.89 28.89.25 89.25.47 25.47.1 47.1.56 1.56.40 56.40.43 40.43.56 43.56.16 56.16.75 16.75.36 75.36.89 36.89.98 89.98.76 98.76.81 76.81.4 81.4.94 4.94.42 94.42.30 42.30.78 30.78.33 78.33.29 33.29.53 29.53.63 53.63.2 63.2.87 2.87.37 87.37.80 37.80.84 80.84.72 84.72.41 72.41.9 41.9.61 9.61.73 61.73.95 73.95.65 95.65.13 65.13.58 13.58.96 58.96.98 96.98.1 98.1.21 1.21.74 21.74.65 74.65.35 65.35.5 35.5.73 5.73.11 73.11.51 11.51.87 51.87.41 87.41.12 41.12.8 12.8.20 8.20.31 20.31.31 31.31.15 31.15.95 15.95.22 95.22.73 22.73.79 73.79.88 79.88.34 88.34.8 34.8.11 8.11.49 11.49.34 49.34.90 34.90.59 90.59.96 59.96.60 96.60.55 60.55.75 55.75.77 75.77.44 77.44.2 44.2.7 2.7.85 7.85.57 85.57.74 57.74.29 74.29.70 29.70.59 70.59.19 59.19.39 19.39.26 39.26.26 26.26.47 26.47.80 47.80.90 80.90.36 90.36.58 36.58.47 58.47.9 47.9.72 9.72.72 72.72.66 72.66.33 66.33.93 33.93.75 93.75.64 75.64.81 64.81.9 81.9.23 9.23.37 23.37.13 37.13.12 13.12.14 12.14.62 14.62.91 62.91.36 91.36.91 36.91.33 91.33.15 33.15.34 15.34.36 34.36.99 36.99.3 99.3.95 3.95.69 95.69.58 69.58.52 58.52.30 52.30.50 30.50.84 50.84.10 84.10.84 10.84.33 84.33.21 33.21.39 21.39.44 39.44.58 44.58.30 58.30.38 30.38.34 38.34.83 34.83.27 83.27.82 27.82.17} + +do_execsql_test 1.6.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} 0 0.90 0.90.40 90.40.30 40.30.80 30.80.20 80.20.90 20.90.60 90.60.70 60.70.80 70.80.90 80.90.30 90.30.50 {} {} 41 41.81 41.81.91 81.91.61 91.61.91 61.91.91 91.91.1 91.1.81 1.81.41 81.41.61 41.61.1 61.1.21 1.21.11 21.11.51 11.51.41 51.41.31 41.31.31 31.31.11 31.11.81 11.81.91 {} {} 2 2.62 2.62.12 62.12.32 12.32.22 32.22.42 22.42.2 42.2.72 2.72.12 72.12.22 12.22.2 22.2.72 2.72.72 72.72.12 72.12.62 {} {} 23 23.33 23.33.93 33.93.23 93.23.93 23.93.43 93.43.3 43.3.43 3.43.33 43.33.53 33.53.63 53.63.73 63.73.13 73.13.73 13.73.73 73.73.33 73.33.93 33.93.23 93.23.13 23.13.33 13.33.3 {} {} 74 74.74 74.74.54 74.54.84 54.84.74 84.74.24 74.24.4 24.4.94 4.94.84 94.84.74 84.74.34 74.34.34 34.34.44 34.44.74 44.74.64 74.64.14 64.14.34 14.34.84 34.84.84 {} {} 65 65.35 65.35.85 35.85.85 85.85.55 85.55.15 55.15.25 15.25.75 25.75.95 75.95.65 95.65.65 65.65.35 65.35.5 35.5.15 5.15.95 15.95.55 95.55.75 55.75.85 75.85.75 85.75.15 {} {} 26 26.96 26.96.46 96.46.6 46.6.46 6.46.16 46.16.16 16.16.86 16.86.56 86.56.56 56.56.56 56.56.16 56.16.36 16.36.76 36.76.96 76.96.96 96.96.26 96.26.26 26.26.36 26.36.66 {} {} 97 97.27 97.27.97 27.97.67 97.67.77 67.77.47 77.47.7 47.7.47 7.47.87 47.87.37 87.37.87 37.87.77 87.77.7 77.7.57 7.57.47 57.47.47 47.47.37 47.37.27 {} {} 38 38.68 38.68.78 68.78.8 78.8.28 8.28.98 28.98.78 98.78.58 78.58.98 58.98.8 98.8.88 8.88.8 88.8.58 8.58.58 {} {} 99 99.89 99.89.59 89.59.39 59.39.99 39.99.29 99.29.59 29.59.89 59.89.89 89.89.29 89.29.9 29.9.79 9.79.49 79.49.59 49.59.29 59.29.59 29.59.19 59.19.39 19.39.9 39.9.9 9.9.99} + +do_execsql_test 1.6.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 0 0.1 0.1.1 1.1.2 1.2.2 2.2.2 2.2.3 2.3.3 3.3.4 3.4.5 4.5.5 5.5.6 5.6.7 6.7.7 7.7.7 7.7.8 7.8.8 8.8.8 8.8.9 8.9.9 9.9.9 9.9.10 9.10.11 10.11.11 11.11.12 11.12.12 12.12.12 12.12.13 12.13.13 13.13.14 13.14.15 14.15.15 15.15.15 15.15.16 15.16.16 16.16.16 16.16.17 16.17.19 17.19.20 19.20.21 20.21.21 21.21.22 21.22.22 22.22.23 22.23.23 23.23.23 23.23.24 23.24.25 24.25.26 25.26.26 26.26.26 26.26.27 26.27.27 27.27.28 27.28.29 28.29.29 29.29.29 29.29.30 29.30.30 30.30.30 30.30.31 30.31.31 31.31.32 31.32.33 32.33.33 33.33.33 33.33.33 33.33.33 33.33.34 33.34.34 34.34.34 34.34.34 34.34.35 34.35.35 35.35.36 35.36.36 36.36.36 36.36.36 36.36.37 36.37.37 37.37.38 37.38.38 38.38.39 38.39.39 39.39.39 39.39.40 39.40.41 40.41.41 41.41.41 41.41.42 41.42.43 42.43.43 43.43.44 43.44.44 44.44.46 44.46.46 46.46.47 46.47.47 47.47.47 47.47.47 47.47.49 47.49.50 49.50.51 50.51.52 51.52.53 52.53.54 53.54.55 54.55.55 55.55.56 55.56.56 56.56.56 56.56.57 56.57.58 57.58.58 58.58.58 58.58.58 58.58.59 58.59.59 59.59.59 59.59.59 59.59.60 59.60.61 60.61.61 61.61.62 61.62.62 62.62.63 62.63.64 63.64.65 64.65.65 65.65.65 65.65.66 65.66.67 66.67.68 67.68.69 68.69.70 69.70.72 70.72.72 72.72.72 72.72.73 72.73.73 73.73.73 73.73.74 73.74.74 74.74.74 74.74.74 74.74.74 74.74.75 74.75.75 75.75.75 75.75.76 75.76.77 76.77.77 77.77.78 77.78.78 78.78.79 78.79.80 79.80.80 80.80.81 80.81.81 81.81.81 81.81.82 81.82.83 82.83.84 83.84.84 84.84.84 84.84.84 84.84.85 84.85.85 85.85.85 85.85.86 85.86.87 86.87.87 87.87.88 87.88.89 88.89.89 89.89.89 89.89.90 89.90.90 90.90.90 90.90.91 90.91.91 91.91.91 91.91.91 91.91.91 91.91.93 91.93.93 93.93.93 93.93.94 93.94.95 94.95.95 95.95.95 95.95.96 95.96.96 96.96.96 96.96.97 96.97.97 97.97.98 97.98.98 98.98.99} + +do_execsql_test 1.6.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 0 0.10 0.10.20 10.20.30 20.30.30 30.30.30 30.30.40 30.40.50 40.50.60 50.60.70 60.70.80 70.80.80 80.80.90 {} {} 1 1.1 1.1.11 1.11.11 11.11.21 11.21.21 21.21.31 21.31.31 31.31.41 31.41.41 41.41.41 41.41.51 41.51.61 51.61.61 61.61.81 61.81.81 81.81.81 81.81.91 81.91.91 91.91.91 {} {} 2 2.2 2.2.2 2.2.12 2.12.12 12.12.12 12.12.22 12.22.22 22.22.32 22.32.42 32.42.52 42.52.62 52.62.62 62.62.72 62.72.72 {} {} 3 3.3 3.3.13 3.13.13 13.13.23 13.23.23 23.23.23 23.23.33 23.33.33 33.33.33 33.33.33 33.33.33 33.33.43 33.43.43 43.43.53 43.53.63 53.63.73 63.73.73 73.73.73 73.73.83 73.83.93 {} {} 4 4.14 4.14.24 14.24.34 24.34.34 34.34.34 34.34.34 34.34.44 34.44.44 44.44.54 44.54.64 54.64.74 64.74.74 74.74.74 74.74.74 74.74.74 74.74.84 74.84.84 84.84.84 {} {} 5 5.5 5.5.15 5.15.15 15.15.15 15.15.25 15.25.35 25.35.35 35.35.55 35.55.55 55.55.65 55.65.65 65.65.65 65.65.75 65.75.75 75.75.75 75.75.85 75.85.85 85.85.85 85.85.95 {} {} 6 6.16 6.16.16 16.16.16 16.16.26 16.26.26 26.26.26 26.26.36 26.36.36 36.36.36 36.36.36 36.36.46 36.46.46 46.46.56 46.56.56 56.56.56 56.56.66 56.66.76 66.76.86 76.86.96 {} {} 7 7.7 7.7.7 7.7.17 7.17.27 17.27.27 27.27.37 27.37.37 37.37.47 37.47.47 47.47.47 47.47.47 47.47.57 47.57.67 57.67.77 67.77.77 77.77.87 77.87.87 {} {} 8 8.8 8.8.8 8.8.28 8.28.38 28.38.38 38.38.58 38.58.58 58.58.58 58.58.58 58.58.68 58.68.78 68.78.78 78.78.88 {} {} 9 9.9 9.9.9 9.9.19 9.19.29 19.29.29 29.29.29 29.29.39 29.39.39 39.39.39 39.39.49 39.49.59 49.59.59 59.59.59 59.59.59 59.59.69 59.69.79 69.79.89 79.89.89 89.89.89 89.89.99} + +do_execsql_test 1.6.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ) FROM t2 +} {{} {} 0 0.90 0.90.40 90.40.30 40.30.80 30.80.20 80.20.90 20.90.60 90.60.70 60.70.80 70.80.90 80.90.30 90.30.50 30.50.10 50.10.30 10.30.41 30.41.81 41.81.91 81.91.61 91.61.91 61.91.91 91.91.1 91.1.81 1.81.41 81.41.61 41.61.1 61.1.21 1.21.11 21.11.51 11.51.41 51.41.31 41.31.31 31.31.11 31.11.81 11.81.91 81.91.91 91.91.21 91.21.2 21.2.62 2.62.12 62.12.32 12.32.22 32.22.42 22.42.2 42.2.72 2.72.12 72.12.22 12.22.2 22.2.72 2.72.72 72.72.12 72.12.62 12.62.52 62.52.82 52.82.23 82.23.33 23.33.93 33.93.23 93.23.93 23.93.43 93.43.3 43.3.43 3.43.33 43.33.53 33.53.63 53.63.73 63.73.13 73.13.73 13.73.73 73.73.33 73.33.93 33.93.23 93.23.13 23.13.33 13.33.3 33.3.33 3.33.83 33.83.74 83.74.74 74.74.54 74.54.84 54.84.74 84.74.24 74.24.4 24.4.94 4.94.84 94.84.74 84.74.34 74.34.34 34.34.44 34.44.74 44.74.64 74.64.14 64.14.34 14.34.84 34.84.84 84.84.44 84.44.34 44.34.65 34.65.35 65.35.85 35.85.85 85.85.55 85.55.15 55.15.25 15.25.75 25.75.95 75.95.65 95.65.65 65.65.35 65.35.5 35.5.15 5.15.95 15.95.55 95.55.75 55.75.85 75.85.75 85.75.15 75.15.95 15.95.5 95.5.26 5.26.96 26.96.46 96.46.6 46.6.46 6.46.16 46.16.16 16.16.86 16.86.56 86.56.56 56.56.56 56.56.16 56.16.36 16.36.76 36.76.96 76.96.96 96.96.26 96.26.26 26.26.36 26.36.66 36.66.36 66.36.36 36.36.97 36.97.27 97.27.97 27.97.67 97.67.77 67.77.47 77.47.7 47.7.47 7.47.87 47.87.37 87.37.87 37.87.77 87.77.7 77.7.57 7.57.47 57.47.47 47.47.37 47.37.27 37.27.17 27.17.7 17.7.38 7.38.68 38.68.78 68.78.8 78.8.28 8.28.98 28.98.78 98.78.58 78.58.98 58.98.8 98.8.88 8.88.8 88.8.58 8.58.58 58.58.58 58.58.38 58.38.99 38.99.89 99.89.59 89.59.39 59.39.99 39.99.29 99.29.59 29.59.89 59.89.89 89.89.29 89.29.9 29.9.79 9.79.49 79.49.59 49.59.29 59.29.59 29.59.19 59.19.39 19.39.9 39.9.9 9.9.99} + +do_execsql_test 1.6.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.6.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) +} {0 {} 0 {} 1 {} 2 74 3 74 3 74.74 3 74 3 74.99 3 99 3 99.33 3 33 3 33.89 3 89 3 89.96 3 96 3 96.38 3 38 3 38.39 3 39 3 39.91 3 91 3 91.6 3 6 3 6.97 3 97 3 97.46 3 46 3 46.54 3 54 3 54.8 3 8 3 8.29 3 29 3 29.84 3 84 3 84.23 3 23 3 23.16 3 16 3 16.65 3 65 3 65.47 3 47 3 47.86 3 86 3 86.61 3 61 3 61.85 3 85 3 85.85 3 85 3 85.59 3 59 3 59.32 3 32 3 32.3 3 3 3 3.22 3 22 3 22.55 3 55 3 55.28 3 28 3 28.25 3 25 3 25.1 3 1 3 1.40 3 40 3 40.56 3 56 3 56.75 3 75 3 75.89 3 89 3 89.76 3 76 3 76.4 3 4 3 4.42 3 42 3 42.78 3 78 3 78.29 3 29 3 29.63 3 63 3 63.87 3 87 3 87.80 3 80 3 80.72 3 72 3 72.9 3 9 3 9.73 3 73 3 73.65 3 65 3 65.58 3 58 3 58.98 3 98 3 98.21 3 21 3 21.65 3 65 3 65.5 3 5 3 5.11 3 11 3 11.87 3 87 3 87.12 3 12 3 12.20 3 20 3 20.31 3 31 3 31.95 3 95 3 95.73 3 73 3 73.88 3 88 3 88.8 3 8 3 8.49 3 49 3 49.90 3 90 3 90.96 3 96 3 96.55 3 55 3 55.77 3 77 3 77.2 3 2 3 2.85 3 85 3 85.74 3 74 3 74.70 3 70 3 70.19 3 19 3 19.26 3 26 3 26.47 3 47 3 47.90 3 90 3 90.58 3 58 3 58.9 3 9 3 9.72 3 72 3 72.33 3 33 3 33.75 3 75 3 75.81 3 81 3 81.23 3 23 3 23.13 3 13 3 13.14 3 14 3 14.91 3 91 3 91.91 3 91 3 91.15 3 15 3 15.36 3 36 3 36.3 3 3 3 3.69 3 69 3 69.52 3 52 3 52.50 3 50 3 50.10 3 10 3 10.33 3 33 3 33.39 3 39 3 39.58 3 58 3 58.38 3 38 3 38.83 3 83 3 83.82 3 82} + +do_execsql_test 1.6.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) +} {0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {}} + +do_execsql_test 1.6.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) +} {0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {}} + +do_execsql_test 1.6.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) +} {0 {} 0 {} 1 89 2 89.6 3 89.6.29 3 6.29.47 3 29.47.59 3 47.59.28 3 59.28.75 3 28.75.78 3 75.78.72 3 78.72.98 3 72.98.87 3 98.87.73 3 87.73.96 3 73.96.74 3 96.74.90 3 74.90.75 3 90.75.91 3 75.91.69 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 74 2 74.96 3 74.96.97 3 96.97.84 3 97.84.86 3 84.86.32 3 86.32.25 3 32.25.89 3 25.89.29 3 89.29.9 3 29.9.21 3 9.21.12 3 21.12.88 3 12.88.55 3 88.55.70 3 55.70.58 3 70.58.81 3 58.81.91 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 74 2 74.38 3 74.38.46 3 38.46.23 3 46.23.61 3 23.61.3 3 61.3.1 3 3.1.76 3 1.76.63 3 76.63.73 3 63.73.65 3 73.65.20 3 65.20.8 3 20.8.77 3 8.77.19 3 77.19.9 3 19.9.23 3 9.23.15 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 99 2 99.39 3 99.39.54 3 39.54.16 3 54.16.85 3 16.85.22 3 85.22.40 3 22.40.4 3 40.4.87 3 4.87.65 3 87.65.5 3 65.5.31 3 5.31.49 3 31.49.2 3 49.2.26 3 2.26.72 3 26.72.13 3 72.13.36 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 0 {} 0 {} 1 33 2 33.91 3 33.91.8 3 91.8.65 3 8.65.85 3 65.85.55 3 85.55.56 3 55.56.42 3 56.42.80 3 42.80.58 3 80.58.11 3 58.11.95 3 11.95.90 3 95.90.85 3 90.85.47 3 85.47.33 3 47.33.14 3 33.14.3 0 {} 0 {} 1 {} 2 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {}} + +do_execsql_test 1.7.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 74 74 74 74 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.7.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.7.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.7.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.7.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.7.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.7.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.7.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.7.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.7.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.7.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.7.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.7.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.7.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.7.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.7.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.7.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.7.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.7.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.7.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.7.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 76 44 78 28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206} + +do_execsql_test 1.7.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.7.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 65 102 11 87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276} + +do_execsql_test 1.7.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 196 134 109 213 223 106 234 191 212 168 229 147 218 240 65 102 119 136 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 11 87 138 63 124 179 78 141 84 120 234 79 231 162 227 228 280 57 181 110 179 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 80 182 71 157 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 111 206 74 132 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 26 51 52 85 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 48 144 207 216 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 36 121 132 88 52 232 156 210 239 250 83 103 158 210 171 198 101 163 172 163 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276} + +do_execsql_test 1.7.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.7.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.7.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} 41 {} {} {} {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} 2 {} 29 {} {} {} 46 62 62 {} {} 16 {} 33 {} {} {} {} {} 78 {} 61 {} 59 77 {} 74 {} 27 {} 22 39 67 {} 54 85 74 90 7 61 90 62 {} 93 {} {} {} {} 23 {} 74 93 30 23 29 3 1 41 {} 65 33 2 98 86 89 25 76 {} 40 38 15 13 96 74 97 81 40 16 99 76 96 32 80 86 59 2 99 84 84 39 65 27 76 78 84 16 2 96 59 16 41 28 13 89 22 4 42 91 41 33 87 55 81 29 36 28 6 47 97 97 85 33 41 93 15 85 89 98 98 43 23 73 4 56 29 89 46 65 38 59 68 47 9 93 9 23 39 16 93 98 74 65 75 15 56 93 12 2 81 2 23 97 47 91 15 93 35 16 63 8 53 91 33 99} + +do_execsql_test 1.7.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} 81 {} {} {} 81 {} 21 {} {} {} {} 21 {} {} {} 21 {} {} {} {} {} {} 12 {} {} {} 12 {} {} 72 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 73 {} 23 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} 64 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 15 {} {} {} {} {} {} 55 {} 15 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 47 {} {} {} {} {} {} {} {} {} 98 {} 98 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 29 {} {} {} {} {} {} {} 29 29 {} {} {}} + +do_execsql_test 1.7.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 4 4 4 5 5 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 9 9 10 10 11 11 11 11 11 12 12 12 12 12 13 13 13 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 25 25 25 25 26 26 27 27 28 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 31 31 31 32 32 33 33 33 33 33 33 33 34 34 34 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 37 37 37 38 38 38 38 38 39 39 39 39 39 39 40 40 40 41 41 41 41 42 42 42 43 43 43 43 43 43 43 43 44 44 44 46 46 46 46 47 47 47 47 47 47 47 47 47 47} + +do_execsql_test 1.7.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} 90 {} {} {} 90 1 30 {} {} {} 31 30 {} {} {} 1 40 {} 50 11 81 42 40 {} 50 81 40 {} {} 50 {} 52 {} 41 81 {} 41 {} 2 30 2 81 82 53 {} 10 {} {} 81 {} 41 10 81 30 81 {} 3 3 23 {} 3 61 80 {} 94 3 91 91 72 3 63 30 91 94 94 72 91 73 91 84 84 33 41 1 33 84 73 73 91 20 41 84 33 33 84 33 41 84 20 21 44 22 90 22 81 81 74 93 93 93 81 21 83 44 44 21 21 21 13 21 21 34 11 34 73 74 2 60 2 34 2 34 74 60 23 2 2 2 11 91 60 62 73 74 70 51 65 74 93 65 70 34 70 93 93 93 62 35 44 43 12 35 41 43 44 44 41 80 54 72 43 41 43 91 12 80 80 35 33 12} + +do_execsql_test 1.7.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.7.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.7.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.7.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9} + +do_execsql_test 1.7.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.7.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.7.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.7.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.7.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.7.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.7.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.7.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 0.74 0.74.41 0.74.41.74 0.74.41.74.23 0.74.41.74.23.99 0.74.41.74.23.99.26 0.74.41.74.23.99.26.33 0.74.41.74.23.99.26.33.2 0.74.41.74.23.99.26.33.2.89 0.74.41.74.23.99.26.33.2.89.81 0.74.41.74.23.99.26.33.2.89.81.96 0.74.41.74.23.99.26.33.2.89.81.96.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5} + +do_execsql_test 1.7.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 0.90 0.90.40 0.90.40.30 0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 0.90.40.30.80.20.90.60 0.90.40.30.80.20.90.60.70 0.90.40.30.80.20.90.60.70.80 0.90.40.30.80.20.90.60.70.80.90 0.90.40.30.80.20.90.60.70.80.90.30 0.90.40.30.80.20.90.60.70.80.90.30.50 0.90.40.30.80.20.90.60.70.80.90.30.50.10 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 41 41.81 41.81.91 41.81.91.61 41.81.91.61.91 41.81.91.61.91.91 41.81.91.61.91.91.1 41.81.91.61.91.91.1.81 41.81.91.61.91.91.1.81.41 41.81.91.61.91.91.1.81.41.61 41.81.91.61.91.91.1.81.41.61.1 41.81.91.61.91.91.1.81.41.61.1.21 41.81.91.61.91.91.1.81.41.61.1.21.11 41.81.91.61.91.91.1.81.41.61.1.21.11.51 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 2 2.62 2.62.12 2.62.12.32 2.62.12.32.22 2.62.12.32.22.42 2.62.12.32.22.42.2 2.62.12.32.22.42.2.72 2.62.12.32.22.42.2.72.12 2.62.12.32.22.42.2.72.12.22 2.62.12.32.22.42.2.72.12.22.2 2.62.12.32.22.42.2.72.12.22.2.72 2.62.12.32.22.42.2.72.12.22.2.72.72 2.62.12.32.22.42.2.72.12.22.2.72.72.12 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 23 23.33 23.33.93 23.33.93.23 23.33.93.23.93 23.33.93.23.93.43 23.33.93.23.93.43.3 23.33.93.23.93.43.3.43 23.33.93.23.93.43.3.43.33 23.33.93.23.93.43.3.43.33.53 23.33.93.23.93.43.3.43.33.53.63 23.33.93.23.93.43.3.43.33.53.63.73 23.33.93.23.93.43.3.43.33.53.63.73.13 23.33.93.23.93.43.3.43.33.53.63.73.13.73 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 74 74.74 74.74.54 74.74.54.84 74.74.54.84.74 74.74.54.84.74.24 74.74.54.84.74.24.4 74.74.54.84.74.24.4.94 74.74.54.84.74.24.4.94.84 74.74.54.84.74.24.4.94.84.74 74.74.54.84.74.24.4.94.84.74.34 74.74.54.84.74.24.4.94.84.74.34.34 74.74.54.84.74.24.4.94.84.74.34.34.44 74.74.54.84.74.24.4.94.84.74.34.34.44.74 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 65 65.35 65.35.85 65.35.85.85 65.35.85.85.55 65.35.85.85.55.15 65.35.85.85.55.15.25 65.35.85.85.55.15.25.75 65.35.85.85.55.15.25.75.95 65.35.85.85.55.15.25.75.95.65 65.35.85.85.55.15.25.75.95.65.65 65.35.85.85.55.15.25.75.95.65.65.35 65.35.85.85.55.15.25.75.95.65.65.35.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 26 26.96 26.96.46 26.96.46.6 26.96.46.6.46 26.96.46.6.46.16 26.96.46.6.46.16.16 26.96.46.6.46.16.16.86 26.96.46.6.46.16.16.86.56 26.96.46.6.46.16.16.86.56.56 26.96.46.6.46.16.16.86.56.56.56 26.96.46.6.46.16.16.86.56.56.56.16 26.96.46.6.46.16.16.86.56.56.56.16.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 97 97.27 97.27.97 97.27.97.67 97.27.97.67.77 97.27.97.67.77.47 97.27.97.67.77.47.7 97.27.97.67.77.47.7.47 97.27.97.67.77.47.7.47.87 97.27.97.67.77.47.7.47.87.37 97.27.97.67.77.47.7.47.87.37.87 97.27.97.67.77.47.7.47.87.37.87.77 97.27.97.67.77.47.7.47.87.37.87.77.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 38 38.68 38.68.78 38.68.78.8 38.68.78.8.28 38.68.78.8.28.98 38.68.78.8.28.98.78 38.68.78.8.28.98.78.58 38.68.78.8.28.98.78.58.98 38.68.78.8.28.98.78.58.98.8 38.68.78.8.28.98.78.58.98.8.88 38.68.78.8.28.98.78.58.98.8.88.8 38.68.78.8.28.98.78.58.98.8.88.8.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 99 99.89 99.89.59 99.89.59.39 99.89.59.39.99 99.89.59.39.99.29 99.89.59.39.99.29.59 99.89.59.39.99.29.59.89 99.89.59.39.99.29.59.89.89 99.89.59.39.99.29.59.89.89.29 99.89.59.39.99.29.59.89.89.29.9 99.89.59.39.99.29.59.89.89.29.9.79 99.89.59.39.99.29.59.89.89.29.9.79.49 99.89.59.39.99.29.59.89.89.29.9.79.49.59 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.7.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.1 0.1.1 0.1.1.2 0.1.1.2.2 0.1.1.2.2.2 0.1.1.2.2.2.3 0.1.1.2.2.2.3.3 0.1.1.2.2.2.3.3.4 0.1.1.2.2.2.3.3.4.5 0.1.1.2.2.2.3.3.4.5.5 0.1.1.2.2.2.3.3.4.5.5.6 0.1.1.2.2.2.3.3.4.5.5.6.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99} + +do_execsql_test 1.7.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.10 0.10.20 0.10.20.30 0.10.20.30.30 0.10.20.30.30.30 0.10.20.30.30.30.40 0.10.20.30.30.30.40.50 0.10.20.30.30.30.40.50.60 0.10.20.30.30.30.40.50.60.70 0.10.20.30.30.30.40.50.60.70.80 0.10.20.30.30.30.40.50.60.70.80.80 0.10.20.30.30.30.40.50.60.70.80.80.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 1 1.1 1.1.11 1.1.11.11 1.1.11.11.21 1.1.11.11.21.21 1.1.11.11.21.21.31 1.1.11.11.21.21.31.31 1.1.11.11.21.21.31.31.41 1.1.11.11.21.21.31.31.41.41 1.1.11.11.21.21.31.31.41.41.41 1.1.11.11.21.21.31.31.41.41.41.51 1.1.11.11.21.21.31.31.41.41.41.51.61 1.1.11.11.21.21.31.31.41.41.41.51.61.61 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 2 2.2 2.2.2 2.2.2.12 2.2.2.12.12 2.2.2.12.12.12 2.2.2.12.12.12.22 2.2.2.12.12.12.22.22 2.2.2.12.12.12.22.22.32 2.2.2.12.12.12.22.22.32.42 2.2.2.12.12.12.22.22.32.42.52 2.2.2.12.12.12.22.22.32.42.52.62 2.2.2.12.12.12.22.22.32.42.52.62.62 2.2.2.12.12.12.22.22.32.42.52.62.62.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 3 3.3 3.3.13 3.3.13.13 3.3.13.13.23 3.3.13.13.23.23 3.3.13.13.23.23.23 3.3.13.13.23.23.23.33 3.3.13.13.23.23.23.33.33 3.3.13.13.23.23.23.33.33.33 3.3.13.13.23.23.23.33.33.33.33 3.3.13.13.23.23.23.33.33.33.33.33 3.3.13.13.23.23.23.33.33.33.33.33.43 3.3.13.13.23.23.23.33.33.33.33.33.43.43 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 4 4.14 4.14.24 4.14.24.34 4.14.24.34.34 4.14.24.34.34.34 4.14.24.34.34.34.34 4.14.24.34.34.34.34.44 4.14.24.34.34.34.34.44.44 4.14.24.34.34.34.34.44.44.54 4.14.24.34.34.34.34.44.44.54.64 4.14.24.34.34.34.34.44.44.54.64.74 4.14.24.34.34.34.34.44.44.54.64.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 5 5.5 5.5.15 5.5.15.15 5.5.15.15.15 5.5.15.15.15.25 5.5.15.15.15.25.35 5.5.15.15.15.25.35.35 5.5.15.15.15.25.35.35.55 5.5.15.15.15.25.35.35.55.55 5.5.15.15.15.25.35.35.55.55.65 5.5.15.15.15.25.35.35.55.55.65.65 5.5.15.15.15.25.35.35.55.55.65.65.65 5.5.15.15.15.25.35.35.55.55.65.65.65.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 6 6.16 6.16.16 6.16.16.16 6.16.16.16.26 6.16.16.16.26.26 6.16.16.16.26.26.26 6.16.16.16.26.26.26.36 6.16.16.16.26.26.26.36.36 6.16.16.16.26.26.26.36.36.36 6.16.16.16.26.26.26.36.36.36.36 6.16.16.16.26.26.26.36.36.36.36.46 6.16.16.16.26.26.26.36.36.36.36.46.46 6.16.16.16.26.26.26.36.36.36.36.46.46.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 7 7.7 7.7.7 7.7.7.17 7.7.7.17.27 7.7.7.17.27.27 7.7.7.17.27.27.37 7.7.7.17.27.27.37.37 7.7.7.17.27.27.37.37.47 7.7.7.17.27.27.37.37.47.47 7.7.7.17.27.27.37.37.47.47.47 7.7.7.17.27.27.37.37.47.47.47.47 7.7.7.17.27.27.37.37.47.47.47.47.57 7.7.7.17.27.27.37.37.47.47.47.47.57.67 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 8 8.8 8.8.8 8.8.8.28 8.8.8.28.38 8.8.8.28.38.38 8.8.8.28.38.38.58 8.8.8.28.38.38.58.58 8.8.8.28.38.38.58.58.58 8.8.8.28.38.38.58.58.58.58 8.8.8.28.38.38.58.58.58.58.68 8.8.8.28.38.38.58.58.58.58.68.78 8.8.8.28.38.38.58.58.58.58.68.78.78 8.8.8.28.38.38.58.58.58.58.68.78.78.88 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 9 9.9 9.9.9 9.9.9.19 9.9.9.19.29 9.9.9.19.29.29 9.9.9.19.29.29.29 9.9.9.19.29.29.29.39 9.9.9.19.29.29.29.39.39 9.9.9.19.29.29.29.39.39.39 9.9.9.19.29.29.29.39.39.39.49 9.9.9.19.29.29.29.39.39.39.49.59 9.9.9.19.29.29.29.39.39.39.49.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99} + +do_execsql_test 1.7.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.90 0.90.40 0.90.40.30 0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 0.90.40.30.80.20.90.60 0.90.40.30.80.20.90.60.70 0.90.40.30.80.20.90.60.70.80 0.90.40.30.80.20.90.60.70.80.90 0.90.40.30.80.20.90.60.70.80.90.30 0.90.40.30.80.20.90.60.70.80.90.30.50 0.90.40.30.80.20.90.60.70.80.90.30.50.10 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.7.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.7.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 {} 2 74 3 74 4 74.74 5 74.74 6 74.74.99 7 74.74.99 8 74.74.99.33 9 74.74.99.33 10 74.74.99.33.89 11 74.74.99.33.89 12 74.74.99.33.89.96 13 74.74.99.33.89.96 14 74.74.99.33.89.96.38 15 74.74.99.33.89.96.38 16 74.74.99.33.89.96.38.39 17 74.74.99.33.89.96.38.39 18 74.74.99.33.89.96.38.39.91 19 74.74.99.33.89.96.38.39.91 20 74.74.99.33.89.96.38.39.91.6 21 74.74.99.33.89.96.38.39.91.6 22 74.74.99.33.89.96.38.39.91.6.97 23 74.74.99.33.89.96.38.39.91.6.97 24 74.74.99.33.89.96.38.39.91.6.97.46 25 74.74.99.33.89.96.38.39.91.6.97.46 26 74.74.99.33.89.96.38.39.91.6.97.46.54 27 74.74.99.33.89.96.38.39.91.6.97.46.54 28 74.74.99.33.89.96.38.39.91.6.97.46.54.8 29 74.74.99.33.89.96.38.39.91.6.97.46.54.8 30 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29 31 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29 32 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84 33 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84 34 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23 35 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23 36 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16 37 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16 38 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65 39 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65 40 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47 41 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47 42 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86 43 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86 44 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61 45 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61 46 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85 47 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85 48 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85 49 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85 50 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59 51 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59 52 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32 53 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32 54 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3 55 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3 56 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22 57 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22 58 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55 59 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55 60 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28 61 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28 62 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25 63 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25 64 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1 65 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1 66 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40 67 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40 68 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56 69 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56 70 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75 71 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75 72 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89 73 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89 74 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76 75 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76 76 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4 77 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4 78 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42 79 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42 80 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78 81 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78 82 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29 83 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29 84 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63 85 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63 86 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87 87 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87 88 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80 89 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80 90 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72 91 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72 92 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9 93 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9 94 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73 95 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73 96 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65 97 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65 98 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58 99 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58 100 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98 101 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98 102 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21 103 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21 104 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65 105 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65 106 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5 107 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5 108 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11 109 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11 110 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87 111 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87 112 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12 113 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12 114 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20 115 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20 116 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31 117 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31 118 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95 119 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95 120 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73 121 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73 122 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88 123 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88 124 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8 125 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8 126 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49 127 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49 128 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90 129 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90 130 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96 131 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96 132 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55 133 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55 134 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77 135 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77 136 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2 137 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2 138 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85 139 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85 140 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74 141 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74 142 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70 143 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70 144 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19 145 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19 146 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26 147 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26 148 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47 149 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47 150 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90 151 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90 152 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58 153 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58 154 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9 155 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9 156 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72 157 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72 158 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33 159 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33 160 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75 161 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75 162 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81 163 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81 164 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23 165 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23 166 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13 167 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13 168 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14 169 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14 170 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91 171 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91 172 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91 173 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91 174 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15 175 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15 176 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36 177 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36 178 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3 179 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3 180 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69 181 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69 182 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52 183 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52 184 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50 185 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50 186 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10 187 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10 188 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33 189 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33 190 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39 191 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39 192 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58 193 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58 194 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38 195 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38 196 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83 197 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83 198 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82 199 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82 200 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7} + +do_execsql_test 1.7.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 22 {} 23 {} 24 {} 25 {} 26 {} 27 {} 28 {} 29 {} 30 {} 31 {} 32 {} 33 {} 34 {} 35 {} 36 {} 37 {} 38 {} 39 {} 40 {} 41 {} 42 {} 43 {} 44 {} 45 {} 46 {} 47 {} 48 {} 49 {} 50 {} 51 {} 52 {} 53 {} 54 {} 55 {} 56 {} 57 {} 58 {} 59 {} 60 {} 61 {} 62 {} 63 {} 64 {} 65 {} 66 {} 67 {} 68 {} 69 {} 70 {} 71 {} 72 {} 73 {} 74 {} 75 {} 76 {} 77 {} 78 {} 79 {} 80 {} 81 {} 82 {} 83 {} 84 {} 85 {} 86 {} 87 {} 88 {} 89 {} 90 {} 91 {} 92 {} 93 {} 94 {} 95 {} 96 {} 97 {} 98 {} 99 {} 100 {} 101 {} 102 {} 103 {} 104 {} 105 {} 106 {} 107 {} 108 {} 109 {} 110 {} 111 {} 112 {} 113 {} 114 {} 115 {} 116 {} 117 {} 118 {} 119 {} 120 {} 121 {} 122 {} 123 {} 124 {} 125 {} 126 {} 127 {} 128 {} 129 {} 130 {} 131 {} 132 {} 133 {} 134 {} 135 {} 136 {} 137 {} 138 {} 139 {} 140 {} 141 {} 142 {} 143 {} 144 {} 145 {} 146 {} 147 {} 148 {} 149 {} 150 {} 151 {} 152 {} 153 {} 154 {} 155 {} 156 {} 157 {} 158 {} 159 {} 160 {} 161 {} 162 {} 163 {} 164 {} 165 {} 166 {} 167 {} 168 {} 169 {} 170 {} 171 {} 172 {} 173 {} 174 {} 175 {} 176 {} 177 {} 178 {} 179 {} 180 {} 181 {} 182 {} 183 {} 184 {} 185 {} 186 {} 187 {} 188 {} 189 {} 190 {} 191 {} 192 {} 193 {} 194 {} 195 {} 196 {} 197 {} 198 {} 199 {} 200 {} 201 {}} + +do_execsql_test 1.7.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {}} + +do_execsql_test 1.7.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +} {1 89 2 89.6 3 89.6.29 4 89.6.29.47 5 89.6.29.47.59 6 89.6.29.47.59.28 7 89.6.29.47.59.28.75 8 89.6.29.47.59.28.75.78 9 89.6.29.47.59.28.75.78.72 10 89.6.29.47.59.28.75.78.72.98 11 89.6.29.47.59.28.75.78.72.98.87 12 89.6.29.47.59.28.75.78.72.98.87.73 13 89.6.29.47.59.28.75.78.72.98.87.73.96 14 89.6.29.47.59.28.75.78.72.98.87.73.96.74 15 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90 16 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75 17 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91 18 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69 19 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 1 74 2 74.96 3 74.96.97 4 74.96.97.84 5 74.96.97.84.86 6 74.96.97.84.86.32 7 74.96.97.84.86.32.25 8 74.96.97.84.86.32.25.89 9 74.96.97.84.86.32.25.89.29 10 74.96.97.84.86.32.25.89.29.9 11 74.96.97.84.86.32.25.89.29.9.21 12 74.96.97.84.86.32.25.89.29.9.21.12 13 74.96.97.84.86.32.25.89.29.9.21.12.88 14 74.96.97.84.86.32.25.89.29.9.21.12.88.55 15 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70 16 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58 17 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81 18 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91 19 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 74 2 74.38 3 74.38.46 4 74.38.46.23 5 74.38.46.23.61 6 74.38.46.23.61.3 7 74.38.46.23.61.3.1 8 74.38.46.23.61.3.1.76 9 74.38.46.23.61.3.1.76.63 10 74.38.46.23.61.3.1.76.63.73 11 74.38.46.23.61.3.1.76.63.73.65 12 74.38.46.23.61.3.1.76.63.73.65.20 13 74.38.46.23.61.3.1.76.63.73.65.20.8 14 74.38.46.23.61.3.1.76.63.73.65.20.8.77 15 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19 16 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9 17 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23 18 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15 19 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 99 2 99.39 3 99.39.54 4 99.39.54.16 5 99.39.54.16.85 6 99.39.54.16.85.22 7 99.39.54.16.85.22.40 8 99.39.54.16.85.22.40.4 9 99.39.54.16.85.22.40.4.87 10 99.39.54.16.85.22.40.4.87.65 11 99.39.54.16.85.22.40.4.87.65.5 12 99.39.54.16.85.22.40.4.87.65.5.31 13 99.39.54.16.85.22.40.4.87.65.5.31.49 14 99.39.54.16.85.22.40.4.87.65.5.31.49.2 15 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26 16 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72 17 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13 18 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36 19 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 1 33 2 33.91 3 33.91.8 4 33.91.8.65 5 33.91.8.65.85 6 33.91.8.65.85.55 7 33.91.8.65.85.55.56 8 33.91.8.65.85.55.56.42 9 33.91.8.65.85.55.56.42.80 10 33.91.8.65.85.55.56.42.80.58 11 33.91.8.65.85.55.56.42.80.58.11 12 33.91.8.65.85.55.56.42.80.58.11.95 13 33.91.8.65.85.55.56.42.80.58.11.95.90 14 33.91.8.65.85.55.56.42.80.58.11.95.90.85 15 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47 16 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33 17 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14 18 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3 19 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {}} + +do_execsql_test 1.8.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 74 74 74 74 99 99 99 99 99 89 96 96 96 96 96 68 91 91 91 99 99 99 99 99 97 97 97 97 97 97 93 93 93 93 84 93 93 93 93 93 86 86 86 91 91 91 91 91 85 85 85 59 59 91 91 91 91 91 90 90 89 89 89 89 56 56 56 56 75 75 89 98 98 98 98 98 94 94 94 94 78 78 78 63 87 87 87 87 87 84 84 84 73 95 95 95 95 96 98 98 98 98 98 74 74 74 73 73 87 87 87 87 87 41 31 31 95 95 95 95 95 88 88 88 88 49 90 90 96 96 96 96 96 77 77 77 85 85 85 85 85 74 74 70 70 59 47 80 90 90 90 90 90 72 72 72 72 93 93 93 93 93 81 81 81 37 37 62 91 91 91 91 91 91 91 99 99 99 99 99 95 95 69 84 84 84 84 84 84 84 58 58 58 58 83 83 83 83 83 82} + +do_execsql_test 1.8.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 23 23 23 2 2 2 2 2 38 38 38 38 38 39 6 6 6 6 6 27 27 27 8 8 8 8 8 29 23 16 16 16 16 16 16 7 7 7 7 7 61 24 24 24 24 12 12 12 3 3 3 3 3 15 15 15 15 15 1 1 1 1 1 16 16 16 16 16 36 36 4 4 4 4 4 30 29 29 29 2 2 2 2 2 37 37 9 9 9 9 9 13 13 13 13 1 1 1 1 1 5 5 5 5 5 11 11 8 8 8 8 8 15 15 15 15 22 22 8 8 8 8 8 11 34 34 55 55 55 44 2 2 2 2 2 7 29 29 19 19 19 19 19 26 26 26 36 36 9 9 9 9 9 33 33 33 33 9 9 9 9 9 12 12 12 12 14 33 15 15 15 15 3 3 3 3 3 30 30 30 10 10 10 10 10 21 21 21 30 30 30 27 27 17 7 5} + +do_execsql_test 1.8.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.8.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.8.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.8.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.8.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.8.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.8.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.8.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.8.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.8.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.8.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.8.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.8.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.8.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.8.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.8.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.8.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.8.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.8.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 76 44 78 28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206} + +do_execsql_test 1.8.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.8.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 65 102 11 87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276} + +do_execsql_test 1.8.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 196 134 109 213 223 106 234 191 212 168 229 147 218 240 65 102 119 136 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 11 87 138 63 124 179 78 141 84 120 234 79 231 162 227 228 280 57 181 110 179 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 80 182 71 157 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 111 206 74 132 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 26 51 52 85 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 48 144 207 216 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 36 121 132 88 52 232 156 210 239 250 83 103 158 210 171 198 101 163 172 163 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276} + +do_execsql_test 1.8.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.8.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.8.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 56 {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} {} {} {} {} 4 {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 77 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 22 {} {} {} 12 {} {} {} {} {} {} {} {} {} {} {} {} 43 {} {} {} {} {} {} {} {} {} {} {} {} {} 33 {} {} {} {} {} {} {} {} 4 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 1 1 1 1 2 2 3 4 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 81 {} {} {} {} {} {} {} {} {} {} {} 91 {} {} {} {} {} 22 {} {} {} 12 {} {} {} {} {} {} {} {} {} {} {} {} 43 {} {} {} {} {} {} {} {} {} {} {} {} {} 33 {} {} {} {} {} {} {} {} 4 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 0 0 0 0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27} + +do_execsql_test 1.8.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 0 0 0 0 90 40 30 80 20 90 60 70 80 90 41 41 41 41 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 2 2 2 2 2 62 12 32 22 42 2 72 12 22 2 72 72 23 23 23 23 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 74 74 74 74 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 65 65 65 65 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 26 26 26 26 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 97 97 97 97 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 38 38 38 38 38 68 78 8 28 98 78 58 98 8 88 8 99 99 99 99 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9} + +do_execsql_test 1.8.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98} + +do_execsql_test 1.8.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 10 20 30 30 30 40 50 60 70 80 1 1 1 1 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 2 2 2 2 2 2 2 12 12 12 22 22 32 42 52 62 62 3 3 3 3 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 4 4 4 4 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 5 5 5 5 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 6 6 6 6 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 7 7 7 7 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 8 8 8 8 8 8 8 28 38 38 58 58 58 58 68 78 9 9 9 9 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89} + +do_execsql_test 1.8.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 0 0 0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9} + +do_execsql_test 1.8.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.8.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.8.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.8.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.8.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.8.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.8.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 0.74 0.74.41 0.74.41.74 0.74.41.74.23 74.41.74.23.99 41.74.23.99.26 74.23.99.26.33 23.99.26.33.2 99.26.33.2.89 26.33.2.89.81 33.2.89.81.96 2.89.81.96.59 89.81.96.59.38 81.96.59.38.68 96.59.38.68.39 59.38.68.39.62 38.68.39.62.91 68.39.62.91.46 39.62.91.46.6 62.91.46.6.99 91.46.6.99.97 46.6.99.97.27 6.99.97.27.46 99.97.27.46.78 97.27.46.78.54 27.46.78.54.97 46.78.54.97.8 78.54.97.8.67 54.97.8.67.29 97.8.67.29.93 8.67.29.93.84 67.29.93.84.77 29.93.84.77.23 93.84.77.23.16 84.77.23.16.16 77.23.16.16.93 23.16.16.93.65 16.16.93.65.35 16.93.65.35.47 93.65.35.47.7 65.35.47.7.86 35.47.7.86.74 47.7.86.74.61 7.86.74.61.91 86.74.61.91.85 74.61.91.85.24 61.91.85.24.85 91.85.24.85.43 85.24.85.43.59 24.85.43.59.12 85.43.59.12.32 43.59.12.32.56 59.12.32.56.3 12.32.56.3.91 32.56.3.91.22 56.3.91.22.90 3.91.22.90.55 91.22.90.55.15 22.90.55.15.28 90.55.15.28.89 55.15.28.89.25 15.28.89.25.47 28.89.25.47.1 89.25.47.1.56 25.47.1.56.40 47.1.56.40.43 1.56.40.43.56 56.40.43.56.16 40.43.56.16.75 43.56.16.75.36 56.16.75.36.89 16.75.36.89.98 75.36.89.98.76 36.89.98.76.81 89.98.76.81.4 98.76.81.4.94 76.81.4.94.42 81.4.94.42.30 4.94.42.30.78 94.42.30.78.33 42.30.78.33.29 30.78.33.29.53 78.33.29.53.63 33.29.53.63.2 29.53.63.2.87 53.63.2.87.37 63.2.87.37.80 2.87.37.80.84 87.37.80.84.72 37.80.84.72.41 80.84.72.41.9 84.72.41.9.61 72.41.9.61.73 41.9.61.73.95 9.61.73.95.65 61.73.95.65.13 73.95.65.13.58 95.65.13.58.96 65.13.58.96.98 13.58.96.98.1 58.96.98.1.21 96.98.1.21.74 98.1.21.74.65 1.21.74.65.35 21.74.65.35.5 74.65.35.5.73 65.35.5.73.11 35.5.73.11.51 5.73.11.51.87 73.11.51.87.41 11.51.87.41.12 51.87.41.12.8 87.41.12.8.20 41.12.8.20.31 12.8.20.31.31 8.20.31.31.15 20.31.31.15.95 31.31.15.95.22 31.15.95.22.73 15.95.22.73.79 95.22.73.79.88 22.73.79.88.34 73.79.88.34.8 79.88.34.8.11 88.34.8.11.49 34.8.11.49.34 8.11.49.34.90 11.49.34.90.59 49.34.90.59.96 34.90.59.96.60 90.59.96.60.55 59.96.60.55.75 96.60.55.75.77 60.55.75.77.44 55.75.77.44.2 75.77.44.2.7 77.44.2.7.85 44.2.7.85.57 2.7.85.57.74 7.85.57.74.29 85.57.74.29.70 57.74.29.70.59 74.29.70.59.19 29.70.59.19.39 70.59.19.39.26 59.19.39.26.26 19.39.26.26.47 39.26.26.47.80 26.26.47.80.90 26.47.80.90.36 47.80.90.36.58 80.90.36.58.47 90.36.58.47.9 36.58.47.9.72 58.47.9.72.72 47.9.72.72.66 9.72.72.66.33 72.72.66.33.93 72.66.33.93.75 66.33.93.75.64 33.93.75.64.81 93.75.64.81.9 75.64.81.9.23 64.81.9.23.37 81.9.23.37.13 9.23.37.13.12 23.37.13.12.14 37.13.12.14.62 13.12.14.62.91 12.14.62.91.36 14.62.91.36.91 62.91.36.91.33 91.36.91.33.15 36.91.33.15.34 91.33.15.34.36 33.15.34.36.99 15.34.36.99.3 34.36.99.3.95 36.99.3.95.69 99.3.95.69.58 3.95.69.58.52 95.69.58.52.30 69.58.52.30.50 58.52.30.50.84 52.30.50.84.10 30.50.84.10.84 50.84.10.84.33 84.10.84.33.21 10.84.33.21.39 84.33.21.39.44 33.21.39.44.58 21.39.44.58.30 39.44.58.30.38 44.58.30.38.34 58.30.38.34.83 30.38.34.83.27 38.34.83.27.82 34.83.27.82.17 83.27.82.17.7 27.82.17.7.5} + +do_execsql_test 1.8.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 0.90 0.90.40 0.90.40.30 0.90.40.30.80 90.40.30.80.20 40.30.80.20.90 30.80.20.90.60 80.20.90.60.70 20.90.60.70.80 90.60.70.80.90 60.70.80.90.30 70.80.90.30.50 80.90.30.50.10 90.30.50.10.30 41 41.81 41.81.91 41.81.91.61 41.81.91.61.91 81.91.61.91.91 91.61.91.91.1 61.91.91.1.81 91.91.1.81.41 91.1.81.41.61 1.81.41.61.1 81.41.61.1.21 41.61.1.21.11 61.1.21.11.51 1.21.11.51.41 21.11.51.41.31 11.51.41.31.31 51.41.31.31.11 41.31.31.11.81 31.31.11.81.91 31.11.81.91.91 11.81.91.91.21 2 2.62 2.62.12 2.62.12.32 2.62.12.32.22 62.12.32.22.42 12.32.22.42.2 32.22.42.2.72 22.42.2.72.12 42.2.72.12.22 2.72.12.22.2 72.12.22.2.72 12.22.2.72.72 22.2.72.72.12 2.72.72.12.62 72.72.12.62.52 72.12.62.52.82 23 23.33 23.33.93 23.33.93.23 23.33.93.23.93 33.93.23.93.43 93.23.93.43.3 23.93.43.3.43 93.43.3.43.33 43.3.43.33.53 3.43.33.53.63 43.33.53.63.73 33.53.63.73.13 53.63.73.13.73 63.73.13.73.73 73.13.73.73.33 13.73.73.33.93 73.73.33.93.23 73.33.93.23.13 33.93.23.13.33 93.23.13.33.3 23.13.33.3.33 13.33.3.33.83 74 74.74 74.74.54 74.74.54.84 74.74.54.84.74 74.54.84.74.24 54.84.74.24.4 84.74.24.4.94 74.24.4.94.84 24.4.94.84.74 4.94.84.74.34 94.84.74.34.34 84.74.34.34.44 74.34.34.44.74 34.34.44.74.64 34.44.74.64.14 44.74.64.14.34 74.64.14.34.84 64.14.34.84.84 14.34.84.84.44 34.84.84.44.34 65 65.35 65.35.85 65.35.85.85 65.35.85.85.55 35.85.85.55.15 85.85.55.15.25 85.55.15.25.75 55.15.25.75.95 15.25.75.95.65 25.75.95.65.65 75.95.65.65.35 95.65.65.35.5 65.65.35.5.15 65.35.5.15.95 35.5.15.95.55 5.15.95.55.75 15.95.55.75.85 95.55.75.85.75 55.75.85.75.15 75.85.75.15.95 85.75.15.95.5 26 26.96 26.96.46 26.96.46.6 26.96.46.6.46 96.46.6.46.16 46.6.46.16.16 6.46.16.16.86 46.16.16.86.56 16.16.86.56.56 16.86.56.56.56 86.56.56.56.16 56.56.56.16.36 56.56.16.36.76 56.16.36.76.96 16.36.76.96.96 36.76.96.96.26 76.96.96.26.26 96.96.26.26.36 96.26.26.36.66 26.26.36.66.36 26.36.66.36.36 97 97.27 97.27.97 97.27.97.67 97.27.97.67.77 27.97.67.77.47 97.67.77.47.7 67.77.47.7.47 77.47.7.47.87 47.7.47.87.37 7.47.87.37.87 47.87.37.87.77 87.37.87.77.7 37.87.77.7.57 87.77.7.57.47 77.7.57.47.47 7.57.47.47.37 57.47.47.37.27 47.47.37.27.17 47.37.27.17.7 38 38.68 38.68.78 38.68.78.8 38.68.78.8.28 68.78.8.28.98 78.8.28.98.78 8.28.98.78.58 28.98.78.58.98 98.78.58.98.8 78.58.98.8.88 58.98.8.88.8 98.8.88.8.58 8.88.8.58.58 88.8.58.58.58 8.58.58.58.38 99 99.89 99.89.59 99.89.59.39 99.89.59.39.99 89.59.39.99.29 59.39.99.29.59 39.99.29.59.89 99.29.59.89.89 29.59.89.89.29 59.89.89.29.9 89.89.29.9.79 89.29.9.79.49 29.9.79.49.59 9.79.49.59.29 79.49.59.29.59 49.59.29.59.19 59.29.59.19.39 29.59.19.39.9 59.19.39.9.9 19.39.9.9.99 39.9.9.99.69 9.9.99.69.39} + +do_execsql_test 1.8.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.1 0.1.1 0.1.1.2 0.1.1.2.2 1.1.2.2.2 1.2.2.2.3 2.2.2.3.3 2.2.3.3.4 2.3.3.4.5 3.3.4.5.5 3.4.5.5.6 4.5.5.6.7 5.5.6.7.7 5.6.7.7.7 6.7.7.7.8 7.7.7.8.8 7.7.8.8.8 7.8.8.8.9 8.8.8.9.9 8.8.9.9.9 8.9.9.9.10 9.9.9.10.11 9.9.10.11.11 9.10.11.11.12 10.11.11.12.12 11.11.12.12.12 11.12.12.12.13 12.12.12.13.13 12.12.13.13.14 12.13.13.14.15 13.13.14.15.15 13.14.15.15.15 14.15.15.15.16 15.15.15.16.16 15.15.16.16.16 15.16.16.16.17 16.16.16.17.19 16.16.17.19.20 16.17.19.20.21 17.19.20.21.21 19.20.21.21.22 20.21.21.22.22 21.21.22.22.23 21.22.22.23.23 22.22.23.23.23 22.23.23.23.24 23.23.23.24.25 23.23.24.25.26 23.24.25.26.26 24.25.26.26.26 25.26.26.26.27 26.26.26.27.27 26.26.27.27.28 26.27.27.28.29 27.27.28.29.29 27.28.29.29.29 28.29.29.29.30 29.29.29.30.30 29.29.30.30.30 29.30.30.30.31 30.30.30.31.31 30.30.31.31.32 30.31.31.32.33 31.31.32.33.33 31.32.33.33.33 32.33.33.33.33 33.33.33.33.33 33.33.33.33.34 33.33.33.34.34 33.33.34.34.34 33.34.34.34.34 34.34.34.34.35 34.34.34.35.35 34.34.35.35.36 34.35.35.36.36 35.35.36.36.36 35.36.36.36.36 36.36.36.36.37 36.36.36.37.37 36.36.37.37.38 36.37.37.38.38 37.37.38.38.39 37.38.38.39.39 38.38.39.39.39 38.39.39.39.40 39.39.39.40.41 39.39.40.41.41 39.40.41.41.41 40.41.41.41.42 41.41.41.42.43 41.41.42.43.43 41.42.43.43.44 42.43.43.44.44 43.43.44.44.46 43.44.44.46.46 44.44.46.46.47 44.46.46.47.47 46.46.47.47.47 46.47.47.47.47 47.47.47.47.49 47.47.47.49.50 47.47.49.50.51 47.49.50.51.52 49.50.51.52.53 50.51.52.53.54 51.52.53.54.55 52.53.54.55.55 53.54.55.55.56 54.55.55.56.56 55.55.56.56.56 55.56.56.56.57 56.56.56.57.58 56.56.57.58.58 56.57.58.58.58 57.58.58.58.58 58.58.58.58.59 58.58.58.59.59 58.58.59.59.59 58.59.59.59.59 59.59.59.59.60 59.59.59.60.61 59.59.60.61.61 59.60.61.61.62 60.61.61.62.62 61.61.62.62.63 61.62.62.63.64 62.62.63.64.65 62.63.64.65.65 63.64.65.65.65 64.65.65.65.66 65.65.65.66.67 65.65.66.67.68 65.66.67.68.69 66.67.68.69.70 67.68.69.70.72 68.69.70.72.72 69.70.72.72.72 70.72.72.72.73 72.72.72.73.73 72.72.73.73.73 72.73.73.73.74 73.73.73.74.74 73.73.74.74.74 73.74.74.74.74 74.74.74.74.74 74.74.74.74.75 74.74.74.75.75 74.74.75.75.75 74.75.75.75.76 75.75.75.76.77 75.75.76.77.77 75.76.77.77.78 76.77.77.78.78 77.77.78.78.79 77.78.78.79.80 78.78.79.80.80 78.79.80.80.81 79.80.80.81.81 80.80.81.81.81 80.81.81.81.82 81.81.81.82.83 81.81.82.83.84 81.82.83.84.84 82.83.84.84.84 83.84.84.84.84 84.84.84.84.85 84.84.84.85.85 84.84.85.85.85 84.85.85.85.86 85.85.85.86.87 85.85.86.87.87 85.86.87.87.88 86.87.87.88.89 87.87.88.89.89 87.88.89.89.89 88.89.89.89.90 89.89.89.90.90 89.89.90.90.90 89.90.90.90.91 90.90.90.91.91 90.90.91.91.91 90.91.91.91.91 91.91.91.91.91 91.91.91.91.93 91.91.91.93.93 91.91.93.93.93 91.93.93.93.94 93.93.93.94.95 93.93.94.95.95 93.94.95.95.95 94.95.95.95.96 95.95.95.96.96 95.95.96.96.96 95.96.96.96.97 96.96.96.97.97 96.96.97.97.98 96.97.97.98.98 97.97.98.98.99 97.98.98.99.99 98.98.99.99.99} + +do_execsql_test 1.8.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.10 0.10.20 0.10.20.30 0.10.20.30.30 10.20.30.30.30 20.30.30.30.40 30.30.30.40.50 30.30.40.50.60 30.40.50.60.70 40.50.60.70.80 50.60.70.80.80 60.70.80.80.90 70.80.80.90.90 80.80.90.90.90 1 1.1 1.1.11 1.1.11.11 1.1.11.11.21 1.11.11.21.21 11.11.21.21.31 11.21.21.31.31 21.21.31.31.41 21.31.31.41.41 31.31.41.41.41 31.41.41.41.51 41.41.41.51.61 41.41.51.61.61 41.51.61.61.81 51.61.61.81.81 61.61.81.81.81 61.81.81.81.91 81.81.81.91.91 81.81.91.91.91 81.91.91.91.91 91.91.91.91.91 2 2.2 2.2.2 2.2.2.12 2.2.2.12.12 2.2.12.12.12 2.12.12.12.22 12.12.12.22.22 12.12.22.22.32 12.22.22.32.42 22.22.32.42.52 22.32.42.52.62 32.42.52.62.62 42.52.62.62.72 52.62.62.72.72 62.62.72.72.72 62.72.72.72.82 3 3.3 3.3.13 3.3.13.13 3.3.13.13.23 3.13.13.23.23 13.13.23.23.23 13.23.23.23.33 23.23.23.33.33 23.23.33.33.33 23.33.33.33.33 33.33.33.33.33 33.33.33.33.43 33.33.33.43.43 33.33.43.43.53 33.43.43.53.63 43.43.53.63.73 43.53.63.73.73 53.63.73.73.73 63.73.73.73.83 73.73.73.83.93 73.73.83.93.93 73.83.93.93.93 4 4.14 4.14.24 4.14.24.34 4.14.24.34.34 14.24.34.34.34 24.34.34.34.34 34.34.34.34.44 34.34.34.44.44 34.34.44.44.54 34.44.44.54.64 44.44.54.64.74 44.54.64.74.74 54.64.74.74.74 64.74.74.74.74 74.74.74.74.74 74.74.74.74.84 74.74.74.84.84 74.74.84.84.84 74.84.84.84.84 84.84.84.84.94 5 5.5 5.5.15 5.5.15.15 5.5.15.15.15 5.15.15.15.25 15.15.15.25.35 15.15.25.35.35 15.25.35.35.55 25.35.35.55.55 35.35.55.55.65 35.55.55.65.65 55.55.65.65.65 55.65.65.65.75 65.65.65.75.75 65.65.75.75.75 65.75.75.75.85 75.75.75.85.85 75.75.85.85.85 75.85.85.85.95 85.85.85.95.95 85.85.95.95.95 6 6.16 6.16.16 6.16.16.16 6.16.16.16.26 16.16.16.26.26 16.16.26.26.26 16.26.26.26.36 26.26.26.36.36 26.26.36.36.36 26.36.36.36.36 36.36.36.36.46 36.36.36.46.46 36.36.46.46.56 36.46.46.56.56 46.46.56.56.56 46.56.56.56.66 56.56.56.66.76 56.56.66.76.86 56.66.76.86.96 66.76.86.96.96 76.86.96.96.96 7 7.7 7.7.7 7.7.7.17 7.7.7.17.27 7.7.17.27.27 7.17.27.27.37 17.27.27.37.37 27.27.37.37.47 27.37.37.47.47 37.37.47.47.47 37.47.47.47.47 47.47.47.47.57 47.47.47.57.67 47.47.57.67.77 47.57.67.77.77 57.67.77.77.87 67.77.77.87.87 77.77.87.87.97 77.87.87.97.97 8 8.8 8.8.8 8.8.8.28 8.8.8.28.38 8.8.28.38.38 8.28.38.38.58 28.38.38.58.58 38.38.58.58.58 38.58.58.58.58 58.58.58.58.68 58.58.58.68.78 58.58.68.78.78 58.68.78.78.88 68.78.78.88.98 78.78.88.98.98 9 9.9 9.9.9 9.9.9.19 9.9.9.19.29 9.9.19.29.29 9.19.29.29.29 19.29.29.29.39 29.29.29.39.39 29.29.39.39.39 29.39.39.39.49 39.39.39.49.59 39.39.49.59.59 39.49.59.59.59 49.59.59.59.59 59.59.59.59.69 59.59.59.69.79 59.59.69.79.89 59.69.79.89.89 69.79.89.89.89 79.89.89.89.99 89.89.89.99.99 89.89.99.99.99} + +do_execsql_test 1.8.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ) FROM t2 +} {0 0.90 0.90.40 0.90.40.30 0.90.40.30.80 90.40.30.80.20 40.30.80.20.90 30.80.20.90.60 80.20.90.60.70 20.90.60.70.80 90.60.70.80.90 60.70.80.90.30 70.80.90.30.50 80.90.30.50.10 90.30.50.10.30 30.50.10.30.41 50.10.30.41.81 10.30.41.81.91 30.41.81.91.61 41.81.91.61.91 81.91.61.91.91 91.61.91.91.1 61.91.91.1.81 91.91.1.81.41 91.1.81.41.61 1.81.41.61.1 81.41.61.1.21 41.61.1.21.11 61.1.21.11.51 1.21.11.51.41 21.11.51.41.31 11.51.41.31.31 51.41.31.31.11 41.31.31.11.81 31.31.11.81.91 31.11.81.91.91 11.81.91.91.21 81.91.91.21.2 91.91.21.2.62 91.21.2.62.12 21.2.62.12.32 2.62.12.32.22 62.12.32.22.42 12.32.22.42.2 32.22.42.2.72 22.42.2.72.12 42.2.72.12.22 2.72.12.22.2 72.12.22.2.72 12.22.2.72.72 22.2.72.72.12 2.72.72.12.62 72.72.12.62.52 72.12.62.52.82 12.62.52.82.23 62.52.82.23.33 52.82.23.33.93 82.23.33.93.23 23.33.93.23.93 33.93.23.93.43 93.23.93.43.3 23.93.43.3.43 93.43.3.43.33 43.3.43.33.53 3.43.33.53.63 43.33.53.63.73 33.53.63.73.13 53.63.73.13.73 63.73.13.73.73 73.13.73.73.33 13.73.73.33.93 73.73.33.93.23 73.33.93.23.13 33.93.23.13.33 93.23.13.33.3 23.13.33.3.33 13.33.3.33.83 33.3.33.83.74 3.33.83.74.74 33.83.74.74.54 83.74.74.54.84 74.74.54.84.74 74.54.84.74.24 54.84.74.24.4 84.74.24.4.94 74.24.4.94.84 24.4.94.84.74 4.94.84.74.34 94.84.74.34.34 84.74.34.34.44 74.34.34.44.74 34.34.44.74.64 34.44.74.64.14 44.74.64.14.34 74.64.14.34.84 64.14.34.84.84 14.34.84.84.44 34.84.84.44.34 84.84.44.34.65 84.44.34.65.35 44.34.65.35.85 34.65.35.85.85 65.35.85.85.55 35.85.85.55.15 85.85.55.15.25 85.55.15.25.75 55.15.25.75.95 15.25.75.95.65 25.75.95.65.65 75.95.65.65.35 95.65.65.35.5 65.65.35.5.15 65.35.5.15.95 35.5.15.95.55 5.15.95.55.75 15.95.55.75.85 95.55.75.85.75 55.75.85.75.15 75.85.75.15.95 85.75.15.95.5 75.15.95.5.26 15.95.5.26.96 95.5.26.96.46 5.26.96.46.6 26.96.46.6.46 96.46.6.46.16 46.6.46.16.16 6.46.16.16.86 46.16.16.86.56 16.16.86.56.56 16.86.56.56.56 86.56.56.56.16 56.56.56.16.36 56.56.16.36.76 56.16.36.76.96 16.36.76.96.96 36.76.96.96.26 76.96.96.26.26 96.96.26.26.36 96.26.26.36.66 26.26.36.66.36 26.36.66.36.36 36.66.36.36.97 66.36.36.97.27 36.36.97.27.97 36.97.27.97.67 97.27.97.67.77 27.97.67.77.47 97.67.77.47.7 67.77.47.7.47 77.47.7.47.87 47.7.47.87.37 7.47.87.37.87 47.87.37.87.77 87.37.87.77.7 37.87.77.7.57 87.77.7.57.47 77.7.57.47.47 7.57.47.47.37 57.47.47.37.27 47.47.37.27.17 47.37.27.17.7 37.27.17.7.38 27.17.7.38.68 17.7.38.68.78 7.38.68.78.8 38.68.78.8.28 68.78.8.28.98 78.8.28.98.78 8.28.98.78.58 28.98.78.58.98 98.78.58.98.8 78.58.98.8.88 58.98.8.88.8 98.8.88.8.58 8.88.8.58.58 88.8.58.58.58 8.58.58.58.38 58.58.58.38.99 58.58.38.99.89 58.38.99.89.59 38.99.89.59.39 99.89.59.39.99 89.59.39.99.29 59.39.99.29.59 39.99.29.59.89 99.29.59.89.89 29.59.89.89.29 59.89.89.29.9 89.89.29.9.79 89.29.9.79.49 29.9.79.49.59 9.79.49.59.29 79.49.59.29.59 49.59.29.59.19 59.29.59.19.39 29.59.19.39.9 59.19.39.9.9 19.39.9.9.99 39.9.9.99.69 9.9.99.69.39} + +do_execsql_test 1.8.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.8.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) +} {1 {} 2 74 3 74 4 74.74 5 74.74 5 74.74.99 5 74.99 5 74.99.33 5 99.33 5 99.33.89 5 33.89 5 33.89.96 5 89.96 5 89.96.38 5 96.38 5 96.38.39 5 38.39 5 38.39.91 5 39.91 5 39.91.6 5 91.6 5 91.6.97 5 6.97 5 6.97.46 5 97.46 5 97.46.54 5 46.54 5 46.54.8 5 54.8 5 54.8.29 5 8.29 5 8.29.84 5 29.84 5 29.84.23 5 84.23 5 84.23.16 5 23.16 5 23.16.65 5 16.65 5 16.65.47 5 65.47 5 65.47.86 5 47.86 5 47.86.61 5 86.61 5 86.61.85 5 61.85 5 61.85.85 5 85.85 5 85.85.59 5 85.59 5 85.59.32 5 59.32 5 59.32.3 5 32.3 5 32.3.22 5 3.22 5 3.22.55 5 22.55 5 22.55.28 5 55.28 5 55.28.25 5 28.25 5 28.25.1 5 25.1 5 25.1.40 5 1.40 5 1.40.56 5 40.56 5 40.56.75 5 56.75 5 56.75.89 5 75.89 5 75.89.76 5 89.76 5 89.76.4 5 76.4 5 76.4.42 5 4.42 5 4.42.78 5 42.78 5 42.78.29 5 78.29 5 78.29.63 5 29.63 5 29.63.87 5 63.87 5 63.87.80 5 87.80 5 87.80.72 5 80.72 5 80.72.9 5 72.9 5 72.9.73 5 9.73 5 9.73.65 5 73.65 5 73.65.58 5 65.58 5 65.58.98 5 58.98 5 58.98.21 5 98.21 5 98.21.65 5 21.65 5 21.65.5 5 65.5 5 65.5.11 5 5.11 5 5.11.87 5 11.87 5 11.87.12 5 87.12 5 87.12.20 5 12.20 5 12.20.31 5 20.31 5 20.31.95 5 31.95 5 31.95.73 5 95.73 5 95.73.88 5 73.88 5 73.88.8 5 88.8 5 88.8.49 5 8.49 5 8.49.90 5 49.90 5 49.90.96 5 90.96 5 90.96.55 5 96.55 5 96.55.77 5 55.77 5 55.77.2 5 77.2 5 77.2.85 5 2.85 5 2.85.74 5 85.74 5 85.74.70 5 74.70 5 74.70.19 5 70.19 5 70.19.26 5 19.26 5 19.26.47 5 26.47 5 26.47.90 5 47.90 5 47.90.58 5 90.58 5 90.58.9 5 58.9 5 58.9.72 5 9.72 5 9.72.33 5 72.33 5 72.33.75 5 33.75 5 33.75.81 5 75.81 5 75.81.23 5 81.23 5 81.23.13 5 23.13 5 23.13.14 5 13.14 5 13.14.91 5 14.91 5 14.91.91 5 91.91 5 91.91.15 5 91.15 5 91.15.36 5 15.36 5 15.36.3 5 36.3 5 36.3.69 5 3.69 5 3.69.52 5 69.52 5 69.52.50 5 52.50 5 52.50.10 5 50.10 5 50.10.33 5 10.33 5 10.33.39 5 33.39 5 33.39.58 5 39.58 5 39.58.38 5 58.38 5 58.38.83 5 38.83 5 38.83.82 5 83.82 5 83.82.7 5 82.7} + +do_execsql_test 1.8.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) +} {1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {}} + +do_execsql_test 1.8.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) +} {1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {}} + +do_execsql_test 1.8.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) +} {1 89 2 89.6 3 89.6.29 4 89.6.29.47 5 89.6.29.47.59 5 6.29.47.59.28 5 29.47.59.28.75 5 47.59.28.75.78 5 59.28.75.78.72 5 28.75.78.72.98 5 75.78.72.98.87 5 78.72.98.87.73 5 72.98.87.73.96 5 98.87.73.96.74 5 87.73.96.74.90 5 73.96.74.90.75 5 96.74.90.75.91 5 74.90.75.91.69 5 90.75.91.69.39 5 75.91.69.39.7 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 74 2 74.96 3 74.96.97 4 74.96.97.84 5 74.96.97.84.86 5 96.97.84.86.32 5 97.84.86.32.25 5 84.86.32.25.89 5 86.32.25.89.29 5 32.25.89.29.9 5 25.89.29.9.21 5 89.29.9.21.12 5 29.9.21.12.88 5 9.21.12.88.55 5 21.12.88.55.70 5 12.88.55.70.58 5 88.55.70.58.81 5 55.70.58.81.91 5 70.58.81.91.52 5 58.81.91.52.58 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 74 2 74.38 3 74.38.46 4 74.38.46.23 5 74.38.46.23.61 5 38.46.23.61.3 5 46.23.61.3.1 5 23.61.3.1.76 5 61.3.1.76.63 5 3.1.76.63.73 5 1.76.63.73.65 5 76.63.73.65.20 5 63.73.65.20.8 5 73.65.20.8.77 5 65.20.8.77.19 5 20.8.77.19.9 5 8.77.19.9.23 5 77.19.9.23.15 5 19.9.23.15.50 5 9.23.15.50.38 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 99 2 99.39 3 99.39.54 4 99.39.54.16 5 99.39.54.16.85 5 39.54.16.85.22 5 54.16.85.22.40 5 16.85.22.40.4 5 85.22.40.4.87 5 22.40.4.87.65 5 40.4.87.65.5 5 4.87.65.5.31 5 87.65.5.31.49 5 65.5.31.49.2 5 5.31.49.2.26 5 31.49.2.26.72 5 49.2.26.72.13 5 2.26.72.13.36 5 26.72.13.36.10 5 72.13.36.10.83 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 1 33 2 33.91 3 33.91.8 4 33.91.8.65 5 33.91.8.65.85 5 91.8.65.85.55 5 8.65.85.55.56 5 65.85.55.56.42 5 85.55.56.42.80 5 55.56.42.80.58 5 56.42.80.58.11 5 42.80.58.11.95 5 80.58.11.95.90 5 58.11.95.90.85 5 11.95.90.85.47 5 95.90.85.47.33 5 90.85.47.33.14 5 85.47.33.14.3 5 47.33.14.3.33 5 33.14.3.33.82 1 {} 2 {} 3 {} 4 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {}} + +do_execsql_test 1.9.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.9.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.9.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.9.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.9.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.9.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.9.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.9.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.9.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.9.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.9.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.9.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.9.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.9.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.9.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.9.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.9.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.9.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.9.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.9.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.9.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 76 44 78 28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206} + +do_execsql_test 1.9.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.9.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 65 102 11 87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276} + +do_execsql_test 1.9.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 196 134 109 213 223 106 234 191 212 168 229 147 218 240 65 102 119 136 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 11 87 138 63 124 179 78 141 84 120 234 79 231 162 227 228 280 57 181 110 179 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 80 182 71 157 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 111 206 74 132 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 26 51 52 85 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 48 144 207 216 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 36 121 132 88 52 232 156 210 239 250 83 103 158 210 171 198 101 163 172 163 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276} + +do_execsql_test 1.9.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {1 147 106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229} + +do_execsql_test 1.9.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.9.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.9.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.9.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99} + +do_execsql_test 1.9.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 10 20 30 30 30 40 50 60 70 80 80 90 90 90 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 2 2 2 12 12 12 22 22 32 42 52 62 62 72 72 72 82 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 8 8 8 28 38 38 58 58 58 58 68 78 78 88 98 98 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99} + +do_execsql_test 1.9.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.9.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.9.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.9.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.9.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.9.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.9.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.9.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.9.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.9.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99} + +do_execsql_test 1.9.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 10 20 30 30 30 40 50 60 70 80 80 90 90 90 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 2 2 2 12 12 12 22 22 32 42 52 62 62 72 72 72 82 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 8 8 8 28 38 38 58 58 58 58 68 78 78 88 98 98 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99} + +do_execsql_test 1.9.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND CURRENT ROW ) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.9.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.9.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) +} {1 {} 1 74 1 {} 1 74 1 {} 1 99 1 {} 1 33 1 {} 1 89 1 {} 1 96 1 {} 1 38 1 {} 1 39 1 {} 1 91 1 {} 1 6 1 {} 1 97 1 {} 1 46 1 {} 1 54 1 {} 1 8 1 {} 1 29 1 {} 1 84 1 {} 1 23 1 {} 1 16 1 {} 1 65 1 {} 1 47 1 {} 1 86 1 {} 1 61 1 {} 1 85 1 {} 1 85 1 {} 1 59 1 {} 1 32 1 {} 1 3 1 {} 1 22 1 {} 1 55 1 {} 1 28 1 {} 1 25 1 {} 1 1 1 {} 1 40 1 {} 1 56 1 {} 1 75 1 {} 1 89 1 {} 1 76 1 {} 1 4 1 {} 1 42 1 {} 1 78 1 {} 1 29 1 {} 1 63 1 {} 1 87 1 {} 1 80 1 {} 1 72 1 {} 1 9 1 {} 1 73 1 {} 1 65 1 {} 1 58 1 {} 1 98 1 {} 1 21 1 {} 1 65 1 {} 1 5 1 {} 1 11 1 {} 1 87 1 {} 1 12 1 {} 1 20 1 {} 1 31 1 {} 1 95 1 {} 1 73 1 {} 1 88 1 {} 1 8 1 {} 1 49 1 {} 1 90 1 {} 1 96 1 {} 1 55 1 {} 1 77 1 {} 1 2 1 {} 1 85 1 {} 1 74 1 {} 1 70 1 {} 1 19 1 {} 1 26 1 {} 1 47 1 {} 1 90 1 {} 1 58 1 {} 1 9 1 {} 1 72 1 {} 1 33 1 {} 1 75 1 {} 1 81 1 {} 1 23 1 {} 1 13 1 {} 1 14 1 {} 1 91 1 {} 1 91 1 {} 1 15 1 {} 1 36 1 {} 1 3 1 {} 1 69 1 {} 1 52 1 {} 1 50 1 {} 1 10 1 {} 1 33 1 {} 1 39 1 {} 1 58 1 {} 1 38 1 {} 1 83 1 {} 1 82 1 {} 1 7 1 {}} + +do_execsql_test 1.9.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) +} {1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {}} + +do_execsql_test 1.9.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) +} {1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {}} + +do_execsql_test 1.9.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND CURRENT ROW) +} {1 89 1 6 1 29 1 47 1 59 1 28 1 75 1 78 1 72 1 98 1 87 1 73 1 96 1 74 1 90 1 75 1 91 1 69 1 39 1 7 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 74 1 96 1 97 1 84 1 86 1 32 1 25 1 89 1 29 1 9 1 21 1 12 1 88 1 55 1 70 1 58 1 81 1 91 1 52 1 58 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 74 1 38 1 46 1 23 1 61 1 3 1 1 1 76 1 63 1 73 1 65 1 20 1 8 1 77 1 19 1 9 1 23 1 15 1 50 1 38 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 99 1 39 1 54 1 16 1 85 1 22 1 40 1 4 1 87 1 65 1 5 1 31 1 49 1 2 1 26 1 72 1 13 1 36 1 10 1 83 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 33 1 91 1 8 1 65 1 85 1 55 1 56 1 42 1 80 1 58 1 11 1 95 1 90 1 85 1 47 1 33 1 14 1 3 1 33 1 82 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {} 1 {}} + +do_execsql_test 1.10.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {74 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.10.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.10.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.10.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.10.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.10.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.10.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.10.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.10.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.10.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.10.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.10.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.10.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.10.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.10.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.10.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.10.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.10.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.10.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.10.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.10.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206 206 206 206 206} + +do_execsql_test 1.10.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {168 134 218 191 212 229 240 213 234 196 223 223 223 223 223 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 210 210 210 210 78 120 87 162 124 141 138 227 228 179 231 234 280 280 280 280 280 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 279 279 279 279 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 229 229 229 229 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 206 206 206 206 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 212 212 212 212 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 207 207 207 207 88 171 158 156 198 121 210 132 210 239 250 232 232 232 232 232 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229 229 229 229 229} + +do_execsql_test 1.10.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276 276 276 276 276} + +do_execsql_test 1.10.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {213 223 106 234 191 212 168 229 147 218 240 240 240 240 240 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 263 263 263 263 124 179 78 141 84 120 234 79 231 162 227 228 280 280 280 280 280 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 252 252 252 252 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 171 171 171 171 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 274 274 274 274 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 226 226 226 226 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 124 124 124 124 52 232 156 210 239 250 83 103 158 210 171 198 198 198 198 198 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276 276 276 276 276} + +do_execsql_test 1.10.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229 229 229 229 229} + +do_execsql_test 1.10.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.10.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 41 {} {} {} {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} 2 {} 29 {} {} {} 46 62 62 {} {} 16 {} 33 {} {} {} {} {} 78 {} 61 {} 59 77 90 74 {} 27 {} 22 39 67 {} 54 85 74 90 7 61 90 62 {} 93 {} {} 94 {} 23 {} 74 93 30 23 29 3 1 41 80 65 33 2 98 86 89 25 76 65 40 38 15 13 96 74 97 81 40 16 99 76 96 32 80 86 59 2 99 84 84 39 65 27 76 78 84 16 2 96 59 16 41 28 13 89 22 4 42 91 41 33 87 55 81 29 36 28 6 47 97 97 85 33 41 93 15 85 89 98 98 43 23 73 4 56 29 89 46 65 38 59 68 47 9 93 9 23 39 16 93 98 74 65 75 15 56 93 12 2 81 2 23 97 47 91 15 93 35 16 63 8 53 91 33 99} + +do_execsql_test 1.10.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} 81 {} {} {} 81 {} 21 {} {} {} {} 21 {} {} {} 21 12 {} {} {} {} {} 12 {} 72 {} 12 {} {} 72 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} 73 {} {} {} {} {} 73 {} 23 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} 64 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 15 55 {} {} {} {} {} 55 {} 15 {} {} {} 16 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 47 {} {} {} {} {} 27 47 {} {} {} {} {} {} {} {} {} 98 {} 98 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 29 {} {} {} {} {} 9 {} 29 29 {} {} {}} + +do_execsql_test 1.10.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 4 4 4 5 5 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 9 9 10 10 11 11 11 11 11 12 12 12 12 12 13 13 13 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 25 25 25 25 26 26 27 27 28 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 31 31 31 32 32 33 33 33 33 33 33 33 34 34 34 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 37 37 37 38 38 38 38 38 39 39 39 39 39 39 40 40 40 41 41 41 41 42 42 42 43 43 43 43 43 43 43 43 44 44 44 46 46 46 46 47 47 47 47 47 47 47 47 47 47} + +do_execsql_test 1.10.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 2 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 13 13 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} 90 {} {} {} 90 1 30 {} {} 31 31 30 {} {} {} 1 40 {} 50 11 81 42 40 {} 50 81 40 {} {} 50 {} 52 {} 41 81 {} 41 {} 2 30 2 81 82 53 {} 10 {} {} 81 {} 41 10 81 30 81 {} 3 3 23 94 3 61 80 {} 94 3 91 91 72 3 63 30 91 94 94 72 91 73 91 84 84 33 41 1 33 84 73 73 91 20 41 84 33 33 84 33 41 84 20 21 44 22 90 22 81 81 74 93 93 93 81 21 83 44 44 21 21 21 13 21 21 34 11 34 73 74 2 60 2 34 2 34 74 60 23 2 2 2 11 91 60 62 73 74 70 51 65 74 93 65 70 34 70 93 93 93 62 35 44 43 12 35 41 43 44 44 41 80 54 72 43 41 43 91 12 80 80 35 33 12} + +do_execsql_test 1.10.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.10.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.10.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.10.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9} + +do_execsql_test 1.10.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.10.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.10.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.10.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.10.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.10.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.10.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.10.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0.74.41.74.23 0.74.41.74.23.99 0.74.41.74.23.99.26 0.74.41.74.23.99.26.33 0.74.41.74.23.99.26.33.2 0.74.41.74.23.99.26.33.2.89 0.74.41.74.23.99.26.33.2.89.81 0.74.41.74.23.99.26.33.2.89.81.96 0.74.41.74.23.99.26.33.2.89.81.96.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5} + +do_execsql_test 1.10.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 0.90.40.30.80.20.90.60 0.90.40.30.80.20.90.60.70 0.90.40.30.80.20.90.60.70.80 0.90.40.30.80.20.90.60.70.80.90 0.90.40.30.80.20.90.60.70.80.90.30 0.90.40.30.80.20.90.60.70.80.90.30.50 0.90.40.30.80.20.90.60.70.80.90.30.50.10 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 41.81.91.61.91 41.81.91.61.91.91 41.81.91.61.91.91.1 41.81.91.61.91.91.1.81 41.81.91.61.91.91.1.81.41 41.81.91.61.91.91.1.81.41.61 41.81.91.61.91.91.1.81.41.61.1 41.81.91.61.91.91.1.81.41.61.1.21 41.81.91.61.91.91.1.81.41.61.1.21.11 41.81.91.61.91.91.1.81.41.61.1.21.11.51 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 2.62.12.32.22 2.62.12.32.22.42 2.62.12.32.22.42.2 2.62.12.32.22.42.2.72 2.62.12.32.22.42.2.72.12 2.62.12.32.22.42.2.72.12.22 2.62.12.32.22.42.2.72.12.22.2 2.62.12.32.22.42.2.72.12.22.2.72 2.62.12.32.22.42.2.72.12.22.2.72.72 2.62.12.32.22.42.2.72.12.22.2.72.72.12 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 23.33.93.23.93 23.33.93.23.93.43 23.33.93.23.93.43.3 23.33.93.23.93.43.3.43 23.33.93.23.93.43.3.43.33 23.33.93.23.93.43.3.43.33.53 23.33.93.23.93.43.3.43.33.53.63 23.33.93.23.93.43.3.43.33.53.63.73 23.33.93.23.93.43.3.43.33.53.63.73.13 23.33.93.23.93.43.3.43.33.53.63.73.13.73 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 74.74.54.84.74 74.74.54.84.74.24 74.74.54.84.74.24.4 74.74.54.84.74.24.4.94 74.74.54.84.74.24.4.94.84 74.74.54.84.74.24.4.94.84.74 74.74.54.84.74.24.4.94.84.74.34 74.74.54.84.74.24.4.94.84.74.34.34 74.74.54.84.74.24.4.94.84.74.34.34.44 74.74.54.84.74.24.4.94.84.74.34.34.44.74 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 65.35.85.85.55 65.35.85.85.55.15 65.35.85.85.55.15.25 65.35.85.85.55.15.25.75 65.35.85.85.55.15.25.75.95 65.35.85.85.55.15.25.75.95.65 65.35.85.85.55.15.25.75.95.65.65 65.35.85.85.55.15.25.75.95.65.65.35 65.35.85.85.55.15.25.75.95.65.65.35.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 26.96.46.6.46 26.96.46.6.46.16 26.96.46.6.46.16.16 26.96.46.6.46.16.16.86 26.96.46.6.46.16.16.86.56 26.96.46.6.46.16.16.86.56.56 26.96.46.6.46.16.16.86.56.56.56 26.96.46.6.46.16.16.86.56.56.56.16 26.96.46.6.46.16.16.86.56.56.56.16.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 97.27.97.67.77 97.27.97.67.77.47 97.27.97.67.77.47.7 97.27.97.67.77.47.7.47 97.27.97.67.77.47.7.47.87 97.27.97.67.77.47.7.47.87.37 97.27.97.67.77.47.7.47.87.37.87 97.27.97.67.77.47.7.47.87.37.87.77 97.27.97.67.77.47.7.47.87.37.87.77.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 38.68.78.8.28 38.68.78.8.28.98 38.68.78.8.28.98.78 38.68.78.8.28.98.78.58 38.68.78.8.28.98.78.58.98 38.68.78.8.28.98.78.58.98.8 38.68.78.8.28.98.78.58.98.8.88 38.68.78.8.28.98.78.58.98.8.88.8 38.68.78.8.28.98.78.58.98.8.88.8.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 99.89.59.39.99 99.89.59.39.99.29 99.89.59.39.99.29.59 99.89.59.39.99.29.59.89 99.89.59.39.99.29.59.89.89 99.89.59.39.99.29.59.89.89.29 99.89.59.39.99.29.59.89.89.29.9 99.89.59.39.99.29.59.89.89.29.9.79 99.89.59.39.99.29.59.89.89.29.9.79.49 99.89.59.39.99.29.59.89.89.29.9.79.49.59 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.10.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0.1.1.2.2 0.1.1.2.2.2 0.1.1.2.2.2.3 0.1.1.2.2.2.3.3 0.1.1.2.2.2.3.3.4 0.1.1.2.2.2.3.3.4.5 0.1.1.2.2.2.3.3.4.5.5 0.1.1.2.2.2.3.3.4.5.5.6 0.1.1.2.2.2.3.3.4.5.5.6.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99} + +do_execsql_test 1.10.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0.10.20.30.30 0.10.20.30.30.30 0.10.20.30.30.30.40 0.10.20.30.30.30.40.50 0.10.20.30.30.30.40.50.60 0.10.20.30.30.30.40.50.60.70 0.10.20.30.30.30.40.50.60.70.80 0.10.20.30.30.30.40.50.60.70.80.80 0.10.20.30.30.30.40.50.60.70.80.80.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 1.1.11.11.21 1.1.11.11.21.21 1.1.11.11.21.21.31 1.1.11.11.21.21.31.31 1.1.11.11.21.21.31.31.41 1.1.11.11.21.21.31.31.41.41 1.1.11.11.21.21.31.31.41.41.41 1.1.11.11.21.21.31.31.41.41.41.51 1.1.11.11.21.21.31.31.41.41.41.51.61 1.1.11.11.21.21.31.31.41.41.41.51.61.61 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 2.2.2.12.12 2.2.2.12.12.12 2.2.2.12.12.12.22 2.2.2.12.12.12.22.22 2.2.2.12.12.12.22.22.32 2.2.2.12.12.12.22.22.32.42 2.2.2.12.12.12.22.22.32.42.52 2.2.2.12.12.12.22.22.32.42.52.62 2.2.2.12.12.12.22.22.32.42.52.62.62 2.2.2.12.12.12.22.22.32.42.52.62.62.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 3.3.13.13.23 3.3.13.13.23.23 3.3.13.13.23.23.23 3.3.13.13.23.23.23.33 3.3.13.13.23.23.23.33.33 3.3.13.13.23.23.23.33.33.33 3.3.13.13.23.23.23.33.33.33.33 3.3.13.13.23.23.23.33.33.33.33.33 3.3.13.13.23.23.23.33.33.33.33.33.43 3.3.13.13.23.23.23.33.33.33.33.33.43.43 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 4.14.24.34.34 4.14.24.34.34.34 4.14.24.34.34.34.34 4.14.24.34.34.34.34.44 4.14.24.34.34.34.34.44.44 4.14.24.34.34.34.34.44.44.54 4.14.24.34.34.34.34.44.44.54.64 4.14.24.34.34.34.34.44.44.54.64.74 4.14.24.34.34.34.34.44.44.54.64.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 5.5.15.15.15 5.5.15.15.15.25 5.5.15.15.15.25.35 5.5.15.15.15.25.35.35 5.5.15.15.15.25.35.35.55 5.5.15.15.15.25.35.35.55.55 5.5.15.15.15.25.35.35.55.55.65 5.5.15.15.15.25.35.35.55.55.65.65 5.5.15.15.15.25.35.35.55.55.65.65.65 5.5.15.15.15.25.35.35.55.55.65.65.65.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 6.16.16.16.26 6.16.16.16.26.26 6.16.16.16.26.26.26 6.16.16.16.26.26.26.36 6.16.16.16.26.26.26.36.36 6.16.16.16.26.26.26.36.36.36 6.16.16.16.26.26.26.36.36.36.36 6.16.16.16.26.26.26.36.36.36.36.46 6.16.16.16.26.26.26.36.36.36.36.46.46 6.16.16.16.26.26.26.36.36.36.36.46.46.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 7.7.7.17.27 7.7.7.17.27.27 7.7.7.17.27.27.37 7.7.7.17.27.27.37.37 7.7.7.17.27.27.37.37.47 7.7.7.17.27.27.37.37.47.47 7.7.7.17.27.27.37.37.47.47.47 7.7.7.17.27.27.37.37.47.47.47.47 7.7.7.17.27.27.37.37.47.47.47.47.57 7.7.7.17.27.27.37.37.47.47.47.47.57.67 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 8.8.8.28.38 8.8.8.28.38.38 8.8.8.28.38.38.58 8.8.8.28.38.38.58.58 8.8.8.28.38.38.58.58.58 8.8.8.28.38.38.58.58.58.58 8.8.8.28.38.38.58.58.58.58.68 8.8.8.28.38.38.58.58.58.58.68.78 8.8.8.28.38.38.58.58.58.58.68.78.78 8.8.8.28.38.38.58.58.58.58.68.78.78.88 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 9.9.9.19.29 9.9.9.19.29.29 9.9.9.19.29.29.29 9.9.9.19.29.29.29.39 9.9.9.19.29.29.29.39.39 9.9.9.19.29.29.29.39.39.39 9.9.9.19.29.29.29.39.39.39.49 9.9.9.19.29.29.29.39.39.39.49.59 9.9.9.19.29.29.29.39.39.39.49.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99} + +do_execsql_test 1.10.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ) FROM t2 +} {0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 0.90.40.30.80.20.90.60 0.90.40.30.80.20.90.60.70 0.90.40.30.80.20.90.60.70.80 0.90.40.30.80.20.90.60.70.80.90 0.90.40.30.80.20.90.60.70.80.90.30 0.90.40.30.80.20.90.60.70.80.90.30.50 0.90.40.30.80.20.90.60.70.80.90.30.50.10 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.10.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.10.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) +} {5 74.74 6 74.74.99 7 74.74.99 8 74.74.99.33 9 74.74.99.33 10 74.74.99.33.89 11 74.74.99.33.89 12 74.74.99.33.89.96 13 74.74.99.33.89.96 14 74.74.99.33.89.96.38 15 74.74.99.33.89.96.38 16 74.74.99.33.89.96.38.39 17 74.74.99.33.89.96.38.39 18 74.74.99.33.89.96.38.39.91 19 74.74.99.33.89.96.38.39.91 20 74.74.99.33.89.96.38.39.91.6 21 74.74.99.33.89.96.38.39.91.6 22 74.74.99.33.89.96.38.39.91.6.97 23 74.74.99.33.89.96.38.39.91.6.97 24 74.74.99.33.89.96.38.39.91.6.97.46 25 74.74.99.33.89.96.38.39.91.6.97.46 26 74.74.99.33.89.96.38.39.91.6.97.46.54 27 74.74.99.33.89.96.38.39.91.6.97.46.54 28 74.74.99.33.89.96.38.39.91.6.97.46.54.8 29 74.74.99.33.89.96.38.39.91.6.97.46.54.8 30 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29 31 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29 32 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84 33 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84 34 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23 35 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23 36 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16 37 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16 38 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65 39 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65 40 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47 41 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47 42 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86 43 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86 44 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61 45 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61 46 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85 47 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85 48 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85 49 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85 50 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59 51 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59 52 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32 53 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32 54 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3 55 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3 56 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22 57 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22 58 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55 59 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55 60 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28 61 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28 62 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25 63 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25 64 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1 65 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1 66 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40 67 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40 68 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56 69 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56 70 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75 71 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75 72 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89 73 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89 74 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76 75 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76 76 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4 77 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4 78 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42 79 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42 80 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78 81 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78 82 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29 83 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29 84 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63 85 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63 86 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87 87 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87 88 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80 89 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80 90 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72 91 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72 92 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9 93 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9 94 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73 95 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73 96 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65 97 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65 98 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58 99 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58 100 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98 101 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98 102 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21 103 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21 104 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65 105 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65 106 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5 107 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5 108 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11 109 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11 110 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87 111 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87 112 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12 113 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12 114 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20 115 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20 116 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31 117 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31 118 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95 119 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95 120 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73 121 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73 122 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88 123 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88 124 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8 125 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8 126 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49 127 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49 128 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90 129 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90 130 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96 131 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96 132 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55 133 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55 134 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77 135 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77 136 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2 137 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2 138 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85 139 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85 140 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74 141 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74 142 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70 143 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70 144 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19 145 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19 146 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26 147 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26 148 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47 149 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47 150 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90 151 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90 152 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58 153 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58 154 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9 155 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9 156 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72 157 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72 158 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33 159 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33 160 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75 161 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75 162 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81 163 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81 164 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23 165 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23 166 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13 167 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13 168 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14 169 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14 170 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91 171 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91 172 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91 173 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91 174 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15 175 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15 176 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36 177 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36 178 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3 179 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3 180 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69 181 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69 182 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52 183 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52 184 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50 185 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50 186 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10 187 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10 188 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33 189 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33 190 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39 191 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39 192 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58 193 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58 194 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38 195 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38 196 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83 197 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83 198 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82 199 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82 200 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7} + +do_execsql_test 1.10.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) +} {5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 22 {} 23 {} 24 {} 25 {} 26 {} 27 {} 28 {} 29 {} 30 {} 31 {} 32 {} 33 {} 34 {} 35 {} 36 {} 37 {} 38 {} 39 {} 40 {} 41 {} 42 {} 43 {} 44 {} 45 {} 46 {} 47 {} 48 {} 49 {} 50 {} 51 {} 52 {} 53 {} 54 {} 55 {} 56 {} 57 {} 58 {} 59 {} 60 {} 61 {} 62 {} 63 {} 64 {} 65 {} 66 {} 67 {} 68 {} 69 {} 70 {} 71 {} 72 {} 73 {} 74 {} 75 {} 76 {} 77 {} 78 {} 79 {} 80 {} 81 {} 82 {} 83 {} 84 {} 85 {} 86 {} 87 {} 88 {} 89 {} 90 {} 91 {} 92 {} 93 {} 94 {} 95 {} 96 {} 97 {} 98 {} 99 {} 100 {} 101 {} 102 {} 103 {} 104 {} 105 {} 106 {} 107 {} 108 {} 109 {} 110 {} 111 {} 112 {} 113 {} 114 {} 115 {} 116 {} 117 {} 118 {} 119 {} 120 {} 121 {} 122 {} 123 {} 124 {} 125 {} 126 {} 127 {} 128 {} 129 {} 130 {} 131 {} 132 {} 133 {} 134 {} 135 {} 136 {} 137 {} 138 {} 139 {} 140 {} 141 {} 142 {} 143 {} 144 {} 145 {} 146 {} 147 {} 148 {} 149 {} 150 {} 151 {} 152 {} 153 {} 154 {} 155 {} 156 {} 157 {} 158 {} 159 {} 160 {} 161 {} 162 {} 163 {} 164 {} 165 {} 166 {} 167 {} 168 {} 169 {} 170 {} 171 {} 172 {} 173 {} 174 {} 175 {} 176 {} 177 {} 178 {} 179 {} 180 {} 181 {} 182 {} 183 {} 184 {} 185 {} 186 {} 187 {} 188 {} 189 {} 190 {} 191 {} 192 {} 193 {} 194 {} 195 {} 196 {} 197 {} 198 {} 199 {} 200 {} 201 {} 201 {} 201 {} 201 {} 201 {}} + +do_execsql_test 1.10.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) +} {5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 21 {} 21 {} 21 {} 21 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {}} + +do_execsql_test 1.10.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) +} {5 89.6.29.47.59 6 89.6.29.47.59.28 7 89.6.29.47.59.28.75 8 89.6.29.47.59.28.75.78 9 89.6.29.47.59.28.75.78.72 10 89.6.29.47.59.28.75.78.72.98 11 89.6.29.47.59.28.75.78.72.98.87 12 89.6.29.47.59.28.75.78.72.98.87.73 13 89.6.29.47.59.28.75.78.72.98.87.73.96 14 89.6.29.47.59.28.75.78.72.98.87.73.96.74 15 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90 16 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75 17 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91 18 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69 19 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 21 {} 21 {} 21 {} 21 {} 21 {} 5 74.96.97.84.86 6 74.96.97.84.86.32 7 74.96.97.84.86.32.25 8 74.96.97.84.86.32.25.89 9 74.96.97.84.86.32.25.89.29 10 74.96.97.84.86.32.25.89.29.9 11 74.96.97.84.86.32.25.89.29.9.21 12 74.96.97.84.86.32.25.89.29.9.21.12 13 74.96.97.84.86.32.25.89.29.9.21.12.88 14 74.96.97.84.86.32.25.89.29.9.21.12.88.55 15 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70 16 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58 17 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81 18 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91 19 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 74.38.46.23.61 6 74.38.46.23.61.3 7 74.38.46.23.61.3.1 8 74.38.46.23.61.3.1.76 9 74.38.46.23.61.3.1.76.63 10 74.38.46.23.61.3.1.76.63.73 11 74.38.46.23.61.3.1.76.63.73.65 12 74.38.46.23.61.3.1.76.63.73.65.20 13 74.38.46.23.61.3.1.76.63.73.65.20.8 14 74.38.46.23.61.3.1.76.63.73.65.20.8.77 15 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19 16 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9 17 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23 18 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15 19 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 99.39.54.16.85 6 99.39.54.16.85.22 7 99.39.54.16.85.22.40 8 99.39.54.16.85.22.40.4 9 99.39.54.16.85.22.40.4.87 10 99.39.54.16.85.22.40.4.87.65 11 99.39.54.16.85.22.40.4.87.65.5 12 99.39.54.16.85.22.40.4.87.65.5.31 13 99.39.54.16.85.22.40.4.87.65.5.31.49 14 99.39.54.16.85.22.40.4.87.65.5.31.49.2 15 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26 16 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72 17 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13 18 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36 19 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {} 5 33.91.8.65.85 6 33.91.8.65.85.55 7 33.91.8.65.85.55.56 8 33.91.8.65.85.55.56.42 9 33.91.8.65.85.55.56.42.80 10 33.91.8.65.85.55.56.42.80.58 11 33.91.8.65.85.55.56.42.80.58.11 12 33.91.8.65.85.55.56.42.80.58.11.95 13 33.91.8.65.85.55.56.42.80.58.11.95.90 14 33.91.8.65.85.55.56.42.80.58.11.95.90.85 15 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47 16 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33 17 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14 18 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3 19 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 5 {} 6 {} 7 {} 8 {} 9 {} 10 {} 11 {} 12 {} 13 {} 14 {} 15 {} 16 {} 17 {} 18 {} 19 {} 20 {} 20 {} 20 {} 20 {} 20 {}} + +do_execsql_test 1.11.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {74 74 74 99 99 99 99 99 99 99 96 96 96 96 96 96 91 91 99 99 99 99 99 99 99 97 97 97 97 97 97 93 93 93 93 93 93 93 93 93 93 86 91 91 91 91 91 91 91 85 85 85 91 91 91 91 91 91 91 90 90 89 89 89 89 56 56 75 75 89 98 98 98 98 98 98 98 94 94 94 94 78 78 87 87 87 87 87 87 87 84 84 95 95 95 95 96 98 98 98 98 98 98 98 74 74 74 87 87 87 87 87 87 87 41 95 95 95 95 95 95 95 88 88 88 90 90 96 96 96 96 96 96 96 77 85 85 85 85 85 85 85 74 74 70 70 80 90 90 90 90 90 90 90 72 72 93 93 93 93 93 93 93 81 81 81 62 91 91 91 91 91 91 91 99 99 99 99 99 99 99 95 95 84 84 84 84 84 84 84 84 58 58 83 83 83 83 83 83 83 82} + +do_execsql_test 1.11.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 0 0 0 0 23 2 2 2 2 2 2 2 38 38 38 38 6 6 6 6 6 6 6 27 8 8 8 8 8 8 8 16 16 16 16 16 16 7 7 7 7 7 7 7 24 24 24 12 12 12 3 3 3 3 3 3 3 15 15 15 1 1 1 1 1 1 1 16 16 16 16 16 4 4 4 4 4 4 4 29 29 2 2 2 2 2 2 2 9 9 9 9 9 9 9 13 13 1 1 1 1 1 1 1 5 5 5 5 5 8 8 8 8 8 8 8 15 15 15 15 8 8 8 8 8 8 8 11 34 34 55 44 2 2 2 2 2 2 2 7 19 19 19 19 19 19 19 26 26 26 9 9 9 9 9 9 9 33 33 9 9 9 9 9 9 9 12 12 12 12 14 15 15 15 3 3 3 3 3 3 3 30 10 10 10 10 10 10 10 21 21 21 30 27 27 17 7 5 5 5} + +do_execsql_test 1.11.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.11.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.11.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.11.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.11.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.11.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.11.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.11.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.11.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.11.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.11.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.11.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.11.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.11.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.11.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.11.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.11.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.11.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.11.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {44 78 28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206 206 206} + +do_execsql_test 1.11.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {106 109 168 134 218 191 212 229 240 213 234 196 223 223 223 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 210 210 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 280 280 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 279 279 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 229 229 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 206 206 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 212 212 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 207 207 103 36 88 171 158 156 198 121 210 132 210 239 250 232 232 232 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229 229 229} + +do_execsql_test 1.11.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {102 11 87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276 276 276} + +do_execsql_test 1.11.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {134 109 213 223 106 234 191 212 168 229 147 218 240 240 240 119 136 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 263 263 138 63 124 179 78 141 84 120 234 79 231 162 227 228 280 280 280 110 179 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 252 252 71 157 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 171 171 74 132 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 274 274 52 85 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 226 226 207 216 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 124 124 132 88 52 232 156 210 239 250 83 103 158 210 171 198 198 198 172 163 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276 276 276} + +do_execsql_test 1.11.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {106 109 168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229 229 229} + +do_execsql_test 1.11.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.11.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 97 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 56 {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} {} {} {} {} 4 {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 {} {} {} {} 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 77 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 81 {} {} {} {} {} {} {} {} {} {} {} 12 {} {} {} {} {} 22 {} {} {} 12 {} {} {} {} {} {} {} {} {} {} {} {} 43 {} {} {} {} {} {} {} {} {} {} {} {} {} 33 {} {} {} {} {} {} {} {} 4 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 15 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 1 1 1 1 2 2 3 4 5 6 7 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 2 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 13 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 81 {} {} {} {} {} {} {} {} {} {} {} 91 {} {} {} {} {} 22 {} {} {} 12 {} {} {} {} {} {} {} {} {} {} {} {} 43 {} {} {} {} {} {} {} {} {} {} {} {} {} 33 {} {} {} {} {} {} {} {} 4 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 15 {} {} {} {} {} {} {} {} 26 {} {} {} 16 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 0 0 0 0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27} + +do_execsql_test 1.11.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 0 0 0 0 90 40 30 80 20 90 60 70 80 90 41 41 41 41 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 2 2 2 2 2 62 12 32 22 42 2 72 12 22 2 72 72 23 23 23 23 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 74 74 74 74 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 65 65 65 65 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 26 26 26 26 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 97 97 97 97 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 38 38 38 38 38 68 78 8 28 98 78 58 98 8 88 8 99 99 99 99 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9} + +do_execsql_test 1.11.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 0 0 0 0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98} + +do_execsql_test 1.11.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 0 0 0 0 10 20 30 30 30 40 50 60 70 80 1 1 1 1 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 2 2 2 2 2 2 2 12 12 12 22 22 32 42 52 62 62 3 3 3 3 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 4 4 4 4 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 5 5 5 5 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 6 6 6 6 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 7 7 7 7 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 8 8 8 8 8 8 8 28 38 38 58 58 58 58 68 78 9 9 9 9 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89} + +do_execsql_test 1.11.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 0 0 0 0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9} + +do_execsql_test 1.11.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.11.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.11.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.11.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.11.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.11.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.11.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0.74.41 0.74.41.74 0.74.41.74.23 0.74.41.74.23.99 0.74.41.74.23.99.26 74.41.74.23.99.26.33 41.74.23.99.26.33.2 74.23.99.26.33.2.89 23.99.26.33.2.89.81 99.26.33.2.89.81.96 26.33.2.89.81.96.59 33.2.89.81.96.59.38 2.89.81.96.59.38.68 89.81.96.59.38.68.39 81.96.59.38.68.39.62 96.59.38.68.39.62.91 59.38.68.39.62.91.46 38.68.39.62.91.46.6 68.39.62.91.46.6.99 39.62.91.46.6.99.97 62.91.46.6.99.97.27 91.46.6.99.97.27.46 46.6.99.97.27.46.78 6.99.97.27.46.78.54 99.97.27.46.78.54.97 97.27.46.78.54.97.8 27.46.78.54.97.8.67 46.78.54.97.8.67.29 78.54.97.8.67.29.93 54.97.8.67.29.93.84 97.8.67.29.93.84.77 8.67.29.93.84.77.23 67.29.93.84.77.23.16 29.93.84.77.23.16.16 93.84.77.23.16.16.93 84.77.23.16.16.93.65 77.23.16.16.93.65.35 23.16.16.93.65.35.47 16.16.93.65.35.47.7 16.93.65.35.47.7.86 93.65.35.47.7.86.74 65.35.47.7.86.74.61 35.47.7.86.74.61.91 47.7.86.74.61.91.85 7.86.74.61.91.85.24 86.74.61.91.85.24.85 74.61.91.85.24.85.43 61.91.85.24.85.43.59 91.85.24.85.43.59.12 85.24.85.43.59.12.32 24.85.43.59.12.32.56 85.43.59.12.32.56.3 43.59.12.32.56.3.91 59.12.32.56.3.91.22 12.32.56.3.91.22.90 32.56.3.91.22.90.55 56.3.91.22.90.55.15 3.91.22.90.55.15.28 91.22.90.55.15.28.89 22.90.55.15.28.89.25 90.55.15.28.89.25.47 55.15.28.89.25.47.1 15.28.89.25.47.1.56 28.89.25.47.1.56.40 89.25.47.1.56.40.43 25.47.1.56.40.43.56 47.1.56.40.43.56.16 1.56.40.43.56.16.75 56.40.43.56.16.75.36 40.43.56.16.75.36.89 43.56.16.75.36.89.98 56.16.75.36.89.98.76 16.75.36.89.98.76.81 75.36.89.98.76.81.4 36.89.98.76.81.4.94 89.98.76.81.4.94.42 98.76.81.4.94.42.30 76.81.4.94.42.30.78 81.4.94.42.30.78.33 4.94.42.30.78.33.29 94.42.30.78.33.29.53 42.30.78.33.29.53.63 30.78.33.29.53.63.2 78.33.29.53.63.2.87 33.29.53.63.2.87.37 29.53.63.2.87.37.80 53.63.2.87.37.80.84 63.2.87.37.80.84.72 2.87.37.80.84.72.41 87.37.80.84.72.41.9 37.80.84.72.41.9.61 80.84.72.41.9.61.73 84.72.41.9.61.73.95 72.41.9.61.73.95.65 41.9.61.73.95.65.13 9.61.73.95.65.13.58 61.73.95.65.13.58.96 73.95.65.13.58.96.98 95.65.13.58.96.98.1 65.13.58.96.98.1.21 13.58.96.98.1.21.74 58.96.98.1.21.74.65 96.98.1.21.74.65.35 98.1.21.74.65.35.5 1.21.74.65.35.5.73 21.74.65.35.5.73.11 74.65.35.5.73.11.51 65.35.5.73.11.51.87 35.5.73.11.51.87.41 5.73.11.51.87.41.12 73.11.51.87.41.12.8 11.51.87.41.12.8.20 51.87.41.12.8.20.31 87.41.12.8.20.31.31 41.12.8.20.31.31.15 12.8.20.31.31.15.95 8.20.31.31.15.95.22 20.31.31.15.95.22.73 31.31.15.95.22.73.79 31.15.95.22.73.79.88 15.95.22.73.79.88.34 95.22.73.79.88.34.8 22.73.79.88.34.8.11 73.79.88.34.8.11.49 79.88.34.8.11.49.34 88.34.8.11.49.34.90 34.8.11.49.34.90.59 8.11.49.34.90.59.96 11.49.34.90.59.96.60 49.34.90.59.96.60.55 34.90.59.96.60.55.75 90.59.96.60.55.75.77 59.96.60.55.75.77.44 96.60.55.75.77.44.2 60.55.75.77.44.2.7 55.75.77.44.2.7.85 75.77.44.2.7.85.57 77.44.2.7.85.57.74 44.2.7.85.57.74.29 2.7.85.57.74.29.70 7.85.57.74.29.70.59 85.57.74.29.70.59.19 57.74.29.70.59.19.39 74.29.70.59.19.39.26 29.70.59.19.39.26.26 70.59.19.39.26.26.47 59.19.39.26.26.47.80 19.39.26.26.47.80.90 39.26.26.47.80.90.36 26.26.47.80.90.36.58 26.47.80.90.36.58.47 47.80.90.36.58.47.9 80.90.36.58.47.9.72 90.36.58.47.9.72.72 36.58.47.9.72.72.66 58.47.9.72.72.66.33 47.9.72.72.66.33.93 9.72.72.66.33.93.75 72.72.66.33.93.75.64 72.66.33.93.75.64.81 66.33.93.75.64.81.9 33.93.75.64.81.9.23 93.75.64.81.9.23.37 75.64.81.9.23.37.13 64.81.9.23.37.13.12 81.9.23.37.13.12.14 9.23.37.13.12.14.62 23.37.13.12.14.62.91 37.13.12.14.62.91.36 13.12.14.62.91.36.91 12.14.62.91.36.91.33 14.62.91.36.91.33.15 62.91.36.91.33.15.34 91.36.91.33.15.34.36 36.91.33.15.34.36.99 91.33.15.34.36.99.3 33.15.34.36.99.3.95 15.34.36.99.3.95.69 34.36.99.3.95.69.58 36.99.3.95.69.58.52 99.3.95.69.58.52.30 3.95.69.58.52.30.50 95.69.58.52.30.50.84 69.58.52.30.50.84.10 58.52.30.50.84.10.84 52.30.50.84.10.84.33 30.50.84.10.84.33.21 50.84.10.84.33.21.39 84.10.84.33.21.39.44 10.84.33.21.39.44.58 84.33.21.39.44.58.30 33.21.39.44.58.30.38 21.39.44.58.30.38.34 39.44.58.30.38.34.83 44.58.30.38.34.83.27 58.30.38.34.83.27.82 30.38.34.83.27.82.17 38.34.83.27.82.17.7 34.83.27.82.17.7.5 83.27.82.17.7.5 27.82.17.7.5} + +do_execsql_test 1.11.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0.90.40 0.90.40.30 0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 90.40.30.80.20.90.60 40.30.80.20.90.60.70 30.80.20.90.60.70.80 80.20.90.60.70.80.90 20.90.60.70.80.90.30 90.60.70.80.90.30.50 60.70.80.90.30.50.10 70.80.90.30.50.10.30 80.90.30.50.10.30 90.30.50.10.30 41.81.91 41.81.91.61 41.81.91.61.91 41.81.91.61.91.91 41.81.91.61.91.91.1 81.91.61.91.91.1.81 91.61.91.91.1.81.41 61.91.91.1.81.41.61 91.91.1.81.41.61.1 91.1.81.41.61.1.21 1.81.41.61.1.21.11 81.41.61.1.21.11.51 41.61.1.21.11.51.41 61.1.21.11.51.41.31 1.21.11.51.41.31.31 21.11.51.41.31.31.11 11.51.41.31.31.11.81 51.41.31.31.11.81.91 41.31.31.11.81.91.91 31.31.11.81.91.91.21 31.11.81.91.91.21 11.81.91.91.21 2.62.12 2.62.12.32 2.62.12.32.22 2.62.12.32.22.42 2.62.12.32.22.42.2 62.12.32.22.42.2.72 12.32.22.42.2.72.12 32.22.42.2.72.12.22 22.42.2.72.12.22.2 42.2.72.12.22.2.72 2.72.12.22.2.72.72 72.12.22.2.72.72.12 12.22.2.72.72.12.62 22.2.72.72.12.62.52 2.72.72.12.62.52.82 72.72.12.62.52.82 72.12.62.52.82 23.33.93 23.33.93.23 23.33.93.23.93 23.33.93.23.93.43 23.33.93.23.93.43.3 33.93.23.93.43.3.43 93.23.93.43.3.43.33 23.93.43.3.43.33.53 93.43.3.43.33.53.63 43.3.43.33.53.63.73 3.43.33.53.63.73.13 43.33.53.63.73.13.73 33.53.63.73.13.73.73 53.63.73.13.73.73.33 63.73.13.73.73.33.93 73.13.73.73.33.93.23 13.73.73.33.93.23.13 73.73.33.93.23.13.33 73.33.93.23.13.33.3 33.93.23.13.33.3.33 93.23.13.33.3.33.83 23.13.33.3.33.83 13.33.3.33.83 74.74.54 74.74.54.84 74.74.54.84.74 74.74.54.84.74.24 74.74.54.84.74.24.4 74.54.84.74.24.4.94 54.84.74.24.4.94.84 84.74.24.4.94.84.74 74.24.4.94.84.74.34 24.4.94.84.74.34.34 4.94.84.74.34.34.44 94.84.74.34.34.44.74 84.74.34.34.44.74.64 74.34.34.44.74.64.14 34.34.44.74.64.14.34 34.44.74.64.14.34.84 44.74.64.14.34.84.84 74.64.14.34.84.84.44 64.14.34.84.84.44.34 14.34.84.84.44.34 34.84.84.44.34 65.35.85 65.35.85.85 65.35.85.85.55 65.35.85.85.55.15 65.35.85.85.55.15.25 35.85.85.55.15.25.75 85.85.55.15.25.75.95 85.55.15.25.75.95.65 55.15.25.75.95.65.65 15.25.75.95.65.65.35 25.75.95.65.65.35.5 75.95.65.65.35.5.15 95.65.65.35.5.15.95 65.65.35.5.15.95.55 65.35.5.15.95.55.75 35.5.15.95.55.75.85 5.15.95.55.75.85.75 15.95.55.75.85.75.15 95.55.75.85.75.15.95 55.75.85.75.15.95.5 75.85.75.15.95.5 85.75.15.95.5 26.96.46 26.96.46.6 26.96.46.6.46 26.96.46.6.46.16 26.96.46.6.46.16.16 96.46.6.46.16.16.86 46.6.46.16.16.86.56 6.46.16.16.86.56.56 46.16.16.86.56.56.56 16.16.86.56.56.56.16 16.86.56.56.56.16.36 86.56.56.56.16.36.76 56.56.56.16.36.76.96 56.56.16.36.76.96.96 56.16.36.76.96.96.26 16.36.76.96.96.26.26 36.76.96.96.26.26.36 76.96.96.26.26.36.66 96.96.26.26.36.66.36 96.26.26.36.66.36.36 26.26.36.66.36.36 26.36.66.36.36 97.27.97 97.27.97.67 97.27.97.67.77 97.27.97.67.77.47 97.27.97.67.77.47.7 27.97.67.77.47.7.47 97.67.77.47.7.47.87 67.77.47.7.47.87.37 77.47.7.47.87.37.87 47.7.47.87.37.87.77 7.47.87.37.87.77.7 47.87.37.87.77.7.57 87.37.87.77.7.57.47 37.87.77.7.57.47.47 87.77.7.57.47.47.37 77.7.57.47.47.37.27 7.57.47.47.37.27.17 57.47.47.37.27.17.7 47.47.37.27.17.7 47.37.27.17.7 38.68.78 38.68.78.8 38.68.78.8.28 38.68.78.8.28.98 38.68.78.8.28.98.78 68.78.8.28.98.78.58 78.8.28.98.78.58.98 8.28.98.78.58.98.8 28.98.78.58.98.8.88 98.78.58.98.8.88.8 78.58.98.8.88.8.58 58.98.8.88.8.58.58 98.8.88.8.58.58.58 8.88.8.58.58.58.38 88.8.58.58.58.38 8.58.58.58.38 99.89.59 99.89.59.39 99.89.59.39.99 99.89.59.39.99.29 99.89.59.39.99.29.59 89.59.39.99.29.59.89 59.39.99.29.59.89.89 39.99.29.59.89.89.29 99.29.59.89.89.29.9 29.59.89.89.29.9.79 59.89.89.29.9.79.49 89.89.29.9.79.49.59 89.29.9.79.49.59.29 29.9.79.49.59.29.59 9.79.49.59.29.59.19 79.49.59.29.59.19.39 49.59.29.59.19.39.9 59.29.59.19.39.9.9 29.59.19.39.9.9.99 59.19.39.9.9.99.69 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39} + +do_execsql_test 1.11.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0.1.1 0.1.1.2 0.1.1.2.2 0.1.1.2.2.2 0.1.1.2.2.2.3 1.1.2.2.2.3.3 1.2.2.2.3.3.4 2.2.2.3.3.4.5 2.2.3.3.4.5.5 2.3.3.4.5.5.6 3.3.4.5.5.6.7 3.4.5.5.6.7.7 4.5.5.6.7.7.7 5.5.6.7.7.7.8 5.6.7.7.7.8.8 6.7.7.7.8.8.8 7.7.7.8.8.8.9 7.7.8.8.8.9.9 7.8.8.8.9.9.9 8.8.8.9.9.9.10 8.8.9.9.9.10.11 8.9.9.9.10.11.11 9.9.9.10.11.11.12 9.9.10.11.11.12.12 9.10.11.11.12.12.12 10.11.11.12.12.12.13 11.11.12.12.12.13.13 11.12.12.12.13.13.14 12.12.12.13.13.14.15 12.12.13.13.14.15.15 12.13.13.14.15.15.15 13.13.14.15.15.15.16 13.14.15.15.15.16.16 14.15.15.15.16.16.16 15.15.15.16.16.16.17 15.15.16.16.16.17.19 15.16.16.16.17.19.20 16.16.16.17.19.20.21 16.16.17.19.20.21.21 16.17.19.20.21.21.22 17.19.20.21.21.22.22 19.20.21.21.22.22.23 20.21.21.22.22.23.23 21.21.22.22.23.23.23 21.22.22.23.23.23.24 22.22.23.23.23.24.25 22.23.23.23.24.25.26 23.23.23.24.25.26.26 23.23.24.25.26.26.26 23.24.25.26.26.26.27 24.25.26.26.26.27.27 25.26.26.26.27.27.28 26.26.26.27.27.28.29 26.26.27.27.28.29.29 26.27.27.28.29.29.29 27.27.28.29.29.29.30 27.28.29.29.29.30.30 28.29.29.29.30.30.30 29.29.29.30.30.30.31 29.29.30.30.30.31.31 29.30.30.30.31.31.32 30.30.30.31.31.32.33 30.30.31.31.32.33.33 30.31.31.32.33.33.33 31.31.32.33.33.33.33 31.32.33.33.33.33.33 32.33.33.33.33.33.34 33.33.33.33.33.34.34 33.33.33.33.34.34.34 33.33.33.34.34.34.34 33.33.34.34.34.34.35 33.34.34.34.34.35.35 34.34.34.34.35.35.36 34.34.34.35.35.36.36 34.34.35.35.36.36.36 34.35.35.36.36.36.36 35.35.36.36.36.36.37 35.36.36.36.36.37.37 36.36.36.36.37.37.38 36.36.36.37.37.38.38 36.36.37.37.38.38.39 36.37.37.38.38.39.39 37.37.38.38.39.39.39 37.38.38.39.39.39.40 38.38.39.39.39.40.41 38.39.39.39.40.41.41 39.39.39.40.41.41.41 39.39.40.41.41.41.42 39.40.41.41.41.42.43 40.41.41.41.42.43.43 41.41.41.42.43.43.44 41.41.42.43.43.44.44 41.42.43.43.44.44.46 42.43.43.44.44.46.46 43.43.44.44.46.46.47 43.44.44.46.46.47.47 44.44.46.46.47.47.47 44.46.46.47.47.47.47 46.46.47.47.47.47.49 46.47.47.47.47.49.50 47.47.47.47.49.50.51 47.47.47.49.50.51.52 47.47.49.50.51.52.53 47.49.50.51.52.53.54 49.50.51.52.53.54.55 50.51.52.53.54.55.55 51.52.53.54.55.55.56 52.53.54.55.55.56.56 53.54.55.55.56.56.56 54.55.55.56.56.56.57 55.55.56.56.56.57.58 55.56.56.56.57.58.58 56.56.56.57.58.58.58 56.56.57.58.58.58.58 56.57.58.58.58.58.59 57.58.58.58.58.59.59 58.58.58.58.59.59.59 58.58.58.59.59.59.59 58.58.59.59.59.59.60 58.59.59.59.59.60.61 59.59.59.59.60.61.61 59.59.59.60.61.61.62 59.59.60.61.61.62.62 59.60.61.61.62.62.63 60.61.61.62.62.63.64 61.61.62.62.63.64.65 61.62.62.63.64.65.65 62.62.63.64.65.65.65 62.63.64.65.65.65.66 63.64.65.65.65.66.67 64.65.65.65.66.67.68 65.65.65.66.67.68.69 65.65.66.67.68.69.70 65.66.67.68.69.70.72 66.67.68.69.70.72.72 67.68.69.70.72.72.72 68.69.70.72.72.72.73 69.70.72.72.72.73.73 70.72.72.72.73.73.73 72.72.72.73.73.73.74 72.72.73.73.73.74.74 72.73.73.73.74.74.74 73.73.73.74.74.74.74 73.73.74.74.74.74.74 73.74.74.74.74.74.75 74.74.74.74.74.75.75 74.74.74.74.75.75.75 74.74.74.75.75.75.76 74.74.75.75.75.76.77 74.75.75.75.76.77.77 75.75.75.76.77.77.78 75.75.76.77.77.78.78 75.76.77.77.78.78.79 76.77.77.78.78.79.80 77.77.78.78.79.80.80 77.78.78.79.80.80.81 78.78.79.80.80.81.81 78.79.80.80.81.81.81 79.80.80.81.81.81.82 80.80.81.81.81.82.83 80.81.81.81.82.83.84 81.81.81.82.83.84.84 81.81.82.83.84.84.84 81.82.83.84.84.84.84 82.83.84.84.84.84.85 83.84.84.84.84.85.85 84.84.84.84.85.85.85 84.84.84.85.85.85.86 84.84.85.85.85.86.87 84.85.85.85.86.87.87 85.85.85.86.87.87.88 85.85.86.87.87.88.89 85.86.87.87.88.89.89 86.87.87.88.89.89.89 87.87.88.89.89.89.90 87.88.89.89.89.90.90 88.89.89.89.90.90.90 89.89.89.90.90.90.91 89.89.90.90.90.91.91 89.90.90.90.91.91.91 90.90.90.91.91.91.91 90.90.91.91.91.91.91 90.91.91.91.91.91.93 91.91.91.91.91.93.93 91.91.91.91.93.93.93 91.91.91.93.93.93.94 91.91.93.93.93.94.95 91.93.93.93.94.95.95 93.93.93.94.95.95.95 93.93.94.95.95.95.96 93.94.95.95.95.96.96 94.95.95.95.96.96.96 95.95.95.96.96.96.97 95.95.96.96.96.97.97 95.96.96.96.97.97.98 96.96.96.97.97.98.98 96.96.97.97.98.98.99 96.97.97.98.98.99.99 97.97.98.98.99.99.99 97.98.98.99.99.99 98.98.99.99.99} + +do_execsql_test 1.11.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0.10.20 0.10.20.30 0.10.20.30.30 0.10.20.30.30.30 0.10.20.30.30.30.40 10.20.30.30.30.40.50 20.30.30.30.40.50.60 30.30.30.40.50.60.70 30.30.40.50.60.70.80 30.40.50.60.70.80.80 40.50.60.70.80.80.90 50.60.70.80.80.90.90 60.70.80.80.90.90.90 70.80.80.90.90.90 80.80.90.90.90 1.1.11 1.1.11.11 1.1.11.11.21 1.1.11.11.21.21 1.1.11.11.21.21.31 1.11.11.21.21.31.31 11.11.21.21.31.31.41 11.21.21.31.31.41.41 21.21.31.31.41.41.41 21.31.31.41.41.41.51 31.31.41.41.41.51.61 31.41.41.41.51.61.61 41.41.41.51.61.61.81 41.41.51.61.61.81.81 41.51.61.61.81.81.81 51.61.61.81.81.81.91 61.61.81.81.81.91.91 61.81.81.81.91.91.91 81.81.81.91.91.91.91 81.81.91.91.91.91.91 81.91.91.91.91.91 91.91.91.91.91 2.2.2 2.2.2.12 2.2.2.12.12 2.2.2.12.12.12 2.2.2.12.12.12.22 2.2.12.12.12.22.22 2.12.12.12.22.22.32 12.12.12.22.22.32.42 12.12.22.22.32.42.52 12.22.22.32.42.52.62 22.22.32.42.52.62.62 22.32.42.52.62.62.72 32.42.52.62.62.72.72 42.52.62.62.72.72.72 52.62.62.72.72.72.82 62.62.72.72.72.82 62.72.72.72.82 3.3.13 3.3.13.13 3.3.13.13.23 3.3.13.13.23.23 3.3.13.13.23.23.23 3.13.13.23.23.23.33 13.13.23.23.23.33.33 13.23.23.23.33.33.33 23.23.23.33.33.33.33 23.23.33.33.33.33.33 23.33.33.33.33.33.43 33.33.33.33.33.43.43 33.33.33.33.43.43.53 33.33.33.43.43.53.63 33.33.43.43.53.63.73 33.43.43.53.63.73.73 43.43.53.63.73.73.73 43.53.63.73.73.73.83 53.63.73.73.73.83.93 63.73.73.73.83.93.93 73.73.73.83.93.93.93 73.73.83.93.93.93 73.83.93.93.93 4.14.24 4.14.24.34 4.14.24.34.34 4.14.24.34.34.34 4.14.24.34.34.34.34 14.24.34.34.34.34.44 24.34.34.34.34.44.44 34.34.34.34.44.44.54 34.34.34.44.44.54.64 34.34.44.44.54.64.74 34.44.44.54.64.74.74 44.44.54.64.74.74.74 44.54.64.74.74.74.74 54.64.74.74.74.74.74 64.74.74.74.74.74.84 74.74.74.74.74.84.84 74.74.74.74.84.84.84 74.74.74.84.84.84.84 74.74.84.84.84.84.94 74.84.84.84.84.94 84.84.84.84.94 5.5.15 5.5.15.15 5.5.15.15.15 5.5.15.15.15.25 5.5.15.15.15.25.35 5.15.15.15.25.35.35 15.15.15.25.35.35.55 15.15.25.35.35.55.55 15.25.35.35.55.55.65 25.35.35.55.55.65.65 35.35.55.55.65.65.65 35.55.55.65.65.65.75 55.55.65.65.65.75.75 55.65.65.65.75.75.75 65.65.65.75.75.75.85 65.65.75.75.75.85.85 65.75.75.75.85.85.85 75.75.75.85.85.85.95 75.75.85.85.85.95.95 75.85.85.85.95.95.95 85.85.85.95.95.95 85.85.95.95.95 6.16.16 6.16.16.16 6.16.16.16.26 6.16.16.16.26.26 6.16.16.16.26.26.26 16.16.16.26.26.26.36 16.16.26.26.26.36.36 16.26.26.26.36.36.36 26.26.26.36.36.36.36 26.26.36.36.36.36.46 26.36.36.36.36.46.46 36.36.36.36.46.46.56 36.36.36.46.46.56.56 36.36.46.46.56.56.56 36.46.46.56.56.56.66 46.46.56.56.56.66.76 46.56.56.56.66.76.86 56.56.56.66.76.86.96 56.56.66.76.86.96.96 56.66.76.86.96.96.96 66.76.86.96.96.96 76.86.96.96.96 7.7.7 7.7.7.17 7.7.7.17.27 7.7.7.17.27.27 7.7.7.17.27.27.37 7.7.17.27.27.37.37 7.17.27.27.37.37.47 17.27.27.37.37.47.47 27.27.37.37.47.47.47 27.37.37.47.47.47.47 37.37.47.47.47.47.57 37.47.47.47.47.57.67 47.47.47.47.57.67.77 47.47.47.57.67.77.77 47.47.57.67.77.77.87 47.57.67.77.77.87.87 57.67.77.77.87.87.97 67.77.77.87.87.97.97 77.77.87.87.97.97 77.87.87.97.97 8.8.8 8.8.8.28 8.8.8.28.38 8.8.8.28.38.38 8.8.8.28.38.38.58 8.8.28.38.38.58.58 8.28.38.38.58.58.58 28.38.38.58.58.58.58 38.38.58.58.58.58.68 38.58.58.58.58.68.78 58.58.58.58.68.78.78 58.58.58.68.78.78.88 58.58.68.78.78.88.98 58.68.78.78.88.98.98 68.78.78.88.98.98 78.78.88.98.98 9.9.9 9.9.9.19 9.9.9.19.29 9.9.9.19.29.29 9.9.9.19.29.29.29 9.9.19.29.29.29.39 9.19.29.29.29.39.39 19.29.29.29.39.39.39 29.29.29.39.39.39.49 29.29.39.39.39.49.59 29.39.39.39.49.59.59 39.39.39.49.59.59.59 39.39.49.59.59.59.59 39.49.59.59.59.59.69 49.59.59.59.59.69.79 59.59.59.59.69.79.89 59.59.59.69.79.89.89 59.59.69.79.89.89.89 59.69.79.89.89.89.99 69.79.89.89.89.99.99 79.89.89.89.99.99.99 89.89.89.99.99.99 89.89.99.99.99} + +do_execsql_test 1.11.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ) FROM t2 +} {0.90.40 0.90.40.30 0.90.40.30.80 0.90.40.30.80.20 0.90.40.30.80.20.90 90.40.30.80.20.90.60 40.30.80.20.90.60.70 30.80.20.90.60.70.80 80.20.90.60.70.80.90 20.90.60.70.80.90.30 90.60.70.80.90.30.50 60.70.80.90.30.50.10 70.80.90.30.50.10.30 80.90.30.50.10.30.41 90.30.50.10.30.41.81 30.50.10.30.41.81.91 50.10.30.41.81.91.61 10.30.41.81.91.61.91 30.41.81.91.61.91.91 41.81.91.61.91.91.1 81.91.61.91.91.1.81 91.61.91.91.1.81.41 61.91.91.1.81.41.61 91.91.1.81.41.61.1 91.1.81.41.61.1.21 1.81.41.61.1.21.11 81.41.61.1.21.11.51 41.61.1.21.11.51.41 61.1.21.11.51.41.31 1.21.11.51.41.31.31 21.11.51.41.31.31.11 11.51.41.31.31.11.81 51.41.31.31.11.81.91 41.31.31.11.81.91.91 31.31.11.81.91.91.21 31.11.81.91.91.21.2 11.81.91.91.21.2.62 81.91.91.21.2.62.12 91.91.21.2.62.12.32 91.21.2.62.12.32.22 21.2.62.12.32.22.42 2.62.12.32.22.42.2 62.12.32.22.42.2.72 12.32.22.42.2.72.12 32.22.42.2.72.12.22 22.42.2.72.12.22.2 42.2.72.12.22.2.72 2.72.12.22.2.72.72 72.12.22.2.72.72.12 12.22.2.72.72.12.62 22.2.72.72.12.62.52 2.72.72.12.62.52.82 72.72.12.62.52.82.23 72.12.62.52.82.23.33 12.62.52.82.23.33.93 62.52.82.23.33.93.23 52.82.23.33.93.23.93 82.23.33.93.23.93.43 23.33.93.23.93.43.3 33.93.23.93.43.3.43 93.23.93.43.3.43.33 23.93.43.3.43.33.53 93.43.3.43.33.53.63 43.3.43.33.53.63.73 3.43.33.53.63.73.13 43.33.53.63.73.13.73 33.53.63.73.13.73.73 53.63.73.13.73.73.33 63.73.13.73.73.33.93 73.13.73.73.33.93.23 13.73.73.33.93.23.13 73.73.33.93.23.13.33 73.33.93.23.13.33.3 33.93.23.13.33.3.33 93.23.13.33.3.33.83 23.13.33.3.33.83.74 13.33.3.33.83.74.74 33.3.33.83.74.74.54 3.33.83.74.74.54.84 33.83.74.74.54.84.74 83.74.74.54.84.74.24 74.74.54.84.74.24.4 74.54.84.74.24.4.94 54.84.74.24.4.94.84 84.74.24.4.94.84.74 74.24.4.94.84.74.34 24.4.94.84.74.34.34 4.94.84.74.34.34.44 94.84.74.34.34.44.74 84.74.34.34.44.74.64 74.34.34.44.74.64.14 34.34.44.74.64.14.34 34.44.74.64.14.34.84 44.74.64.14.34.84.84 74.64.14.34.84.84.44 64.14.34.84.84.44.34 14.34.84.84.44.34.65 34.84.84.44.34.65.35 84.84.44.34.65.35.85 84.44.34.65.35.85.85 44.34.65.35.85.85.55 34.65.35.85.85.55.15 65.35.85.85.55.15.25 35.85.85.55.15.25.75 85.85.55.15.25.75.95 85.55.15.25.75.95.65 55.15.25.75.95.65.65 15.25.75.95.65.65.35 25.75.95.65.65.35.5 75.95.65.65.35.5.15 95.65.65.35.5.15.95 65.65.35.5.15.95.55 65.35.5.15.95.55.75 35.5.15.95.55.75.85 5.15.95.55.75.85.75 15.95.55.75.85.75.15 95.55.75.85.75.15.95 55.75.85.75.15.95.5 75.85.75.15.95.5.26 85.75.15.95.5.26.96 75.15.95.5.26.96.46 15.95.5.26.96.46.6 95.5.26.96.46.6.46 5.26.96.46.6.46.16 26.96.46.6.46.16.16 96.46.6.46.16.16.86 46.6.46.16.16.86.56 6.46.16.16.86.56.56 46.16.16.86.56.56.56 16.16.86.56.56.56.16 16.86.56.56.56.16.36 86.56.56.56.16.36.76 56.56.56.16.36.76.96 56.56.16.36.76.96.96 56.16.36.76.96.96.26 16.36.76.96.96.26.26 36.76.96.96.26.26.36 76.96.96.26.26.36.66 96.96.26.26.36.66.36 96.26.26.36.66.36.36 26.26.36.66.36.36.97 26.36.66.36.36.97.27 36.66.36.36.97.27.97 66.36.36.97.27.97.67 36.36.97.27.97.67.77 36.97.27.97.67.77.47 97.27.97.67.77.47.7 27.97.67.77.47.7.47 97.67.77.47.7.47.87 67.77.47.7.47.87.37 77.47.7.47.87.37.87 47.7.47.87.37.87.77 7.47.87.37.87.77.7 47.87.37.87.77.7.57 87.37.87.77.7.57.47 37.87.77.7.57.47.47 87.77.7.57.47.47.37 77.7.57.47.47.37.27 7.57.47.47.37.27.17 57.47.47.37.27.17.7 47.47.37.27.17.7.38 47.37.27.17.7.38.68 37.27.17.7.38.68.78 27.17.7.38.68.78.8 17.7.38.68.78.8.28 7.38.68.78.8.28.98 38.68.78.8.28.98.78 68.78.8.28.98.78.58 78.8.28.98.78.58.98 8.28.98.78.58.98.8 28.98.78.58.98.8.88 98.78.58.98.8.88.8 78.58.98.8.88.8.58 58.98.8.88.8.58.58 98.8.88.8.58.58.58 8.88.8.58.58.58.38 88.8.58.58.58.38.99 8.58.58.58.38.99.89 58.58.58.38.99.89.59 58.58.38.99.89.59.39 58.38.99.89.59.39.99 38.99.89.59.39.99.29 99.89.59.39.99.29.59 89.59.39.99.29.59.89 59.39.99.29.59.89.89 39.99.29.59.89.89.29 99.29.59.89.89.29.9 29.59.89.89.29.9.79 59.89.89.29.9.79.49 89.89.29.9.79.49.59 89.29.9.79.49.59.29 29.9.79.49.59.29.59 9.79.49.59.29.59.19 79.49.59.29.59.19.39 49.59.29.59.19.39.9 59.29.59.19.39.9.9 29.59.19.39.9.9.99 59.19.39.9.9.99.69 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39} + +do_execsql_test 1.11.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.11.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) +} {3 74 4 74.74 5 74.74 6 74.74.99 7 74.74.99 7 74.74.99.33 7 74.99.33 7 74.99.33.89 7 99.33.89 7 99.33.89.96 7 33.89.96 7 33.89.96.38 7 89.96.38 7 89.96.38.39 7 96.38.39 7 96.38.39.91 7 38.39.91 7 38.39.91.6 7 39.91.6 7 39.91.6.97 7 91.6.97 7 91.6.97.46 7 6.97.46 7 6.97.46.54 7 97.46.54 7 97.46.54.8 7 46.54.8 7 46.54.8.29 7 54.8.29 7 54.8.29.84 7 8.29.84 7 8.29.84.23 7 29.84.23 7 29.84.23.16 7 84.23.16 7 84.23.16.65 7 23.16.65 7 23.16.65.47 7 16.65.47 7 16.65.47.86 7 65.47.86 7 65.47.86.61 7 47.86.61 7 47.86.61.85 7 86.61.85 7 86.61.85.85 7 61.85.85 7 61.85.85.59 7 85.85.59 7 85.85.59.32 7 85.59.32 7 85.59.32.3 7 59.32.3 7 59.32.3.22 7 32.3.22 7 32.3.22.55 7 3.22.55 7 3.22.55.28 7 22.55.28 7 22.55.28.25 7 55.28.25 7 55.28.25.1 7 28.25.1 7 28.25.1.40 7 25.1.40 7 25.1.40.56 7 1.40.56 7 1.40.56.75 7 40.56.75 7 40.56.75.89 7 56.75.89 7 56.75.89.76 7 75.89.76 7 75.89.76.4 7 89.76.4 7 89.76.4.42 7 76.4.42 7 76.4.42.78 7 4.42.78 7 4.42.78.29 7 42.78.29 7 42.78.29.63 7 78.29.63 7 78.29.63.87 7 29.63.87 7 29.63.87.80 7 63.87.80 7 63.87.80.72 7 87.80.72 7 87.80.72.9 7 80.72.9 7 80.72.9.73 7 72.9.73 7 72.9.73.65 7 9.73.65 7 9.73.65.58 7 73.65.58 7 73.65.58.98 7 65.58.98 7 65.58.98.21 7 58.98.21 7 58.98.21.65 7 98.21.65 7 98.21.65.5 7 21.65.5 7 21.65.5.11 7 65.5.11 7 65.5.11.87 7 5.11.87 7 5.11.87.12 7 11.87.12 7 11.87.12.20 7 87.12.20 7 87.12.20.31 7 12.20.31 7 12.20.31.95 7 20.31.95 7 20.31.95.73 7 31.95.73 7 31.95.73.88 7 95.73.88 7 95.73.88.8 7 73.88.8 7 73.88.8.49 7 88.8.49 7 88.8.49.90 7 8.49.90 7 8.49.90.96 7 49.90.96 7 49.90.96.55 7 90.96.55 7 90.96.55.77 7 96.55.77 7 96.55.77.2 7 55.77.2 7 55.77.2.85 7 77.2.85 7 77.2.85.74 7 2.85.74 7 2.85.74.70 7 85.74.70 7 85.74.70.19 7 74.70.19 7 74.70.19.26 7 70.19.26 7 70.19.26.47 7 19.26.47 7 19.26.47.90 7 26.47.90 7 26.47.90.58 7 47.90.58 7 47.90.58.9 7 90.58.9 7 90.58.9.72 7 58.9.72 7 58.9.72.33 7 9.72.33 7 9.72.33.75 7 72.33.75 7 72.33.75.81 7 33.75.81 7 33.75.81.23 7 75.81.23 7 75.81.23.13 7 81.23.13 7 81.23.13.14 7 23.13.14 7 23.13.14.91 7 13.14.91 7 13.14.91.91 7 14.91.91 7 14.91.91.15 7 91.91.15 7 91.91.15.36 7 91.15.36 7 91.15.36.3 7 15.36.3 7 15.36.3.69 7 36.3.69 7 36.3.69.52 7 3.69.52 7 3.69.52.50 7 69.52.50 7 69.52.50.10 7 52.50.10 7 52.50.10.33 7 50.10.33 7 50.10.33.39 7 10.33.39 7 10.33.39.58 7 33.39.58 7 33.39.58.38 7 39.58.38 7 39.58.38.83 7 58.38.83 7 58.38.83.82 7 38.83.82 7 38.83.82.7 7 83.82.7 6 83.82.7 5 82.7} + +do_execsql_test 1.11.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) +} {3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {}} + +do_execsql_test 1.11.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) +} {3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {}} + +do_execsql_test 1.11.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) +} {3 89.6.29 4 89.6.29.47 5 89.6.29.47.59 6 89.6.29.47.59.28 7 89.6.29.47.59.28.75 7 6.29.47.59.28.75.78 7 29.47.59.28.75.78.72 7 47.59.28.75.78.72.98 7 59.28.75.78.72.98.87 7 28.75.78.72.98.87.73 7 75.78.72.98.87.73.96 7 78.72.98.87.73.96.74 7 72.98.87.73.96.74.90 7 98.87.73.96.74.90.75 7 87.73.96.74.90.75.91 7 73.96.74.90.75.91.69 7 96.74.90.75.91.69.39 7 74.90.75.91.69.39.7 6 90.75.91.69.39.7 5 75.91.69.39.7 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 74.96.97 4 74.96.97.84 5 74.96.97.84.86 6 74.96.97.84.86.32 7 74.96.97.84.86.32.25 7 96.97.84.86.32.25.89 7 97.84.86.32.25.89.29 7 84.86.32.25.89.29.9 7 86.32.25.89.29.9.21 7 32.25.89.29.9.21.12 7 25.89.29.9.21.12.88 7 89.29.9.21.12.88.55 7 29.9.21.12.88.55.70 7 9.21.12.88.55.70.58 7 21.12.88.55.70.58.81 7 12.88.55.70.58.81.91 7 88.55.70.58.81.91.52 7 55.70.58.81.91.52.58 6 70.58.81.91.52.58 5 58.81.91.52.58 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 74.38.46 4 74.38.46.23 5 74.38.46.23.61 6 74.38.46.23.61.3 7 74.38.46.23.61.3.1 7 38.46.23.61.3.1.76 7 46.23.61.3.1.76.63 7 23.61.3.1.76.63.73 7 61.3.1.76.63.73.65 7 3.1.76.63.73.65.20 7 1.76.63.73.65.20.8 7 76.63.73.65.20.8.77 7 63.73.65.20.8.77.19 7 73.65.20.8.77.19.9 7 65.20.8.77.19.9.23 7 20.8.77.19.9.23.15 7 8.77.19.9.23.15.50 7 77.19.9.23.15.50.38 6 19.9.23.15.50.38 5 9.23.15.50.38 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 99.39.54 4 99.39.54.16 5 99.39.54.16.85 6 99.39.54.16.85.22 7 99.39.54.16.85.22.40 7 39.54.16.85.22.40.4 7 54.16.85.22.40.4.87 7 16.85.22.40.4.87.65 7 85.22.40.4.87.65.5 7 22.40.4.87.65.5.31 7 40.4.87.65.5.31.49 7 4.87.65.5.31.49.2 7 87.65.5.31.49.2.26 7 65.5.31.49.2.26.72 7 5.31.49.2.26.72.13 7 31.49.2.26.72.13.36 7 49.2.26.72.13.36.10 7 2.26.72.13.36.10.83 6 26.72.13.36.10.83 5 72.13.36.10.83 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {} 3 33.91.8 4 33.91.8.65 5 33.91.8.65.85 6 33.91.8.65.85.55 7 33.91.8.65.85.55.56 7 91.8.65.85.55.56.42 7 8.65.85.55.56.42.80 7 65.85.55.56.42.80.58 7 85.55.56.42.80.58.11 7 55.56.42.80.58.11.95 7 56.42.80.58.11.95.90 7 42.80.58.11.95.90.85 7 80.58.11.95.90.85.47 7 58.11.95.90.85.47.33 7 11.95.90.85.47.33.14 7 95.90.85.47.33.14.3 7 90.85.47.33.14.3.33 7 85.47.33.14.3.33.82 6 47.33.14.3.33.82 5 33.14.3.33.82 3 {} 4 {} 5 {} 6 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 7 {} 6 {} 5 {}} + +do_execsql_test 1.12.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {74 99 99 99 99 99 89 96 96 96 96 96 68 91 91 91 99 99 99 99 99 97 97 97 97 97 97 93 93 93 93 84 93 93 93 93 93 86 86 86 91 91 91 91 91 85 85 85 59 59 91 91 91 91 91 90 90 89 89 89 89 56 56 56 56 75 75 89 98 98 98 98 98 94 94 94 94 78 78 78 63 87 87 87 87 87 84 84 84 73 95 95 95 95 96 98 98 98 98 98 74 74 74 73 73 87 87 87 87 87 41 31 31 95 95 95 95 95 88 88 88 88 49 90 90 96 96 96 96 96 77 77 77 85 85 85 85 85 74 74 70 70 59 47 80 90 90 90 90 90 72 72 72 72 93 93 93 93 93 81 81 81 37 37 62 91 91 91 91 91 91 91 99 99 99 99 99 95 95 69 84 84 84 84 84 84 84 58 58 58 58 83 83 83 83 83 82 82 17 7 5} + +do_execsql_test 1.12.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 23 23 23 2 2 2 2 2 38 38 38 38 38 39 6 6 6 6 6 27 27 27 8 8 8 8 8 29 23 16 16 16 16 16 16 7 7 7 7 7 61 24 24 24 24 12 12 12 3 3 3 3 3 15 15 15 15 15 1 1 1 1 1 16 16 16 16 16 36 36 4 4 4 4 4 30 29 29 29 2 2 2 2 2 37 37 9 9 9 9 9 13 13 13 13 1 1 1 1 1 5 5 5 5 5 11 11 8 8 8 8 8 15 15 15 15 22 22 8 8 8 8 8 11 34 34 55 55 55 44 2 2 2 2 2 7 29 29 19 19 19 19 19 26 26 26 36 36 9 9 9 9 9 33 33 33 33 9 9 9 9 9 12 12 12 12 14 33 15 15 15 15 3 3 3 3 3 30 30 30 10 10 10 10 10 21 21 21 30 30 30 27 27 17 7 5 5 5 5 5} + +do_execsql_test 1.12.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.12.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.12.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.12.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.12.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.12.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.12.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.12.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.12.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.12.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.12.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.12.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.12.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.12.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.12.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.12.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.12.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.12.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.12.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206 206 206 206 206} + +do_execsql_test 1.12.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {168 134 218 191 212 229 240 213 234 196 223 223 223 223 223 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 210 210 210 210 78 120 87 162 124 141 138 227 228 179 231 234 280 280 280 280 280 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 279 279 279 279 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 229 229 229 229 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 206 206 206 206 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 212 212 212 212 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 207 207 207 207 88 171 158 156 198 121 210 132 210 239 250 232 232 232 232 232 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229 229 229 229 229} + +do_execsql_test 1.12.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276 276 276 276 276} + +do_execsql_test 1.12.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {213 223 106 234 191 212 168 229 147 218 240 240 240 240 240 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 263 263 263 263 124 179 78 141 84 120 234 79 231 162 227 228 280 280 280 280 280 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 252 252 252 252 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 171 171 171 171 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 274 274 274 274 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 226 226 226 226 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 124 124 124 124 52 232 156 210 239 250 83 103 158 210 171 198 198 198 198 198 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276 276 276 276 276} + +do_execsql_test 1.12.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229 229 229 229 229} + +do_execsql_test 1.12.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.12.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} {} {} 56 {} {} {} {} {} {} {} {} {} {} {} 78 {} {} {} {} {} {} {} {} 37 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} {} {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 13 23 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} {} {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.12.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.12.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99} + +do_execsql_test 1.12.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 10 20 30 30 30 40 50 60 70 80 80 90 90 90 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 2 2 2 12 12 12 22 22 32 42 52 62 62 72 72 72 82 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 8 8 8 28 38 38 58 58 58 58 68 78 78 88 98 98 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99} + +do_execsql_test 1.12.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.12.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.12.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.12.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.12.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.12.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.12.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.12.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0.74.41.74.23 74.41.74.23.99 41.74.23.99.26 74.23.99.26.33 23.99.26.33.2 99.26.33.2.89 26.33.2.89.81 33.2.89.81.96 2.89.81.96.59 89.81.96.59.38 81.96.59.38.68 96.59.38.68.39 59.38.68.39.62 38.68.39.62.91 68.39.62.91.46 39.62.91.46.6 62.91.46.6.99 91.46.6.99.97 46.6.99.97.27 6.99.97.27.46 99.97.27.46.78 97.27.46.78.54 27.46.78.54.97 46.78.54.97.8 78.54.97.8.67 54.97.8.67.29 97.8.67.29.93 8.67.29.93.84 67.29.93.84.77 29.93.84.77.23 93.84.77.23.16 84.77.23.16.16 77.23.16.16.93 23.16.16.93.65 16.16.93.65.35 16.93.65.35.47 93.65.35.47.7 65.35.47.7.86 35.47.7.86.74 47.7.86.74.61 7.86.74.61.91 86.74.61.91.85 74.61.91.85.24 61.91.85.24.85 91.85.24.85.43 85.24.85.43.59 24.85.43.59.12 85.43.59.12.32 43.59.12.32.56 59.12.32.56.3 12.32.56.3.91 32.56.3.91.22 56.3.91.22.90 3.91.22.90.55 91.22.90.55.15 22.90.55.15.28 90.55.15.28.89 55.15.28.89.25 15.28.89.25.47 28.89.25.47.1 89.25.47.1.56 25.47.1.56.40 47.1.56.40.43 1.56.40.43.56 56.40.43.56.16 40.43.56.16.75 43.56.16.75.36 56.16.75.36.89 16.75.36.89.98 75.36.89.98.76 36.89.98.76.81 89.98.76.81.4 98.76.81.4.94 76.81.4.94.42 81.4.94.42.30 4.94.42.30.78 94.42.30.78.33 42.30.78.33.29 30.78.33.29.53 78.33.29.53.63 33.29.53.63.2 29.53.63.2.87 53.63.2.87.37 63.2.87.37.80 2.87.37.80.84 87.37.80.84.72 37.80.84.72.41 80.84.72.41.9 84.72.41.9.61 72.41.9.61.73 41.9.61.73.95 9.61.73.95.65 61.73.95.65.13 73.95.65.13.58 95.65.13.58.96 65.13.58.96.98 13.58.96.98.1 58.96.98.1.21 96.98.1.21.74 98.1.21.74.65 1.21.74.65.35 21.74.65.35.5 74.65.35.5.73 65.35.5.73.11 35.5.73.11.51 5.73.11.51.87 73.11.51.87.41 11.51.87.41.12 51.87.41.12.8 87.41.12.8.20 41.12.8.20.31 12.8.20.31.31 8.20.31.31.15 20.31.31.15.95 31.31.15.95.22 31.15.95.22.73 15.95.22.73.79 95.22.73.79.88 22.73.79.88.34 73.79.88.34.8 79.88.34.8.11 88.34.8.11.49 34.8.11.49.34 8.11.49.34.90 11.49.34.90.59 49.34.90.59.96 34.90.59.96.60 90.59.96.60.55 59.96.60.55.75 96.60.55.75.77 60.55.75.77.44 55.75.77.44.2 75.77.44.2.7 77.44.2.7.85 44.2.7.85.57 2.7.85.57.74 7.85.57.74.29 85.57.74.29.70 57.74.29.70.59 74.29.70.59.19 29.70.59.19.39 70.59.19.39.26 59.19.39.26.26 19.39.26.26.47 39.26.26.47.80 26.26.47.80.90 26.47.80.90.36 47.80.90.36.58 80.90.36.58.47 90.36.58.47.9 36.58.47.9.72 58.47.9.72.72 47.9.72.72.66 9.72.72.66.33 72.72.66.33.93 72.66.33.93.75 66.33.93.75.64 33.93.75.64.81 93.75.64.81.9 75.64.81.9.23 64.81.9.23.37 81.9.23.37.13 9.23.37.13.12 23.37.13.12.14 37.13.12.14.62 13.12.14.62.91 12.14.62.91.36 14.62.91.36.91 62.91.36.91.33 91.36.91.33.15 36.91.33.15.34 91.33.15.34.36 33.15.34.36.99 15.34.36.99.3 34.36.99.3.95 36.99.3.95.69 99.3.95.69.58 3.95.69.58.52 95.69.58.52.30 69.58.52.30.50 58.52.30.50.84 52.30.50.84.10 30.50.84.10.84 50.84.10.84.33 84.10.84.33.21 10.84.33.21.39 84.33.21.39.44 33.21.39.44.58 21.39.44.58.30 39.44.58.30.38 44.58.30.38.34 58.30.38.34.83 30.38.34.83.27 38.34.83.27.82 34.83.27.82.17 83.27.82.17.7 27.82.17.7.5 82.17.7.5 17.7.5 7.5 5} + +do_execsql_test 1.12.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0.90.40.30.80 90.40.30.80.20 40.30.80.20.90 30.80.20.90.60 80.20.90.60.70 20.90.60.70.80 90.60.70.80.90 60.70.80.90.30 70.80.90.30.50 80.90.30.50.10 90.30.50.10.30 30.50.10.30 50.10.30 10.30 30 41.81.91.61.91 81.91.61.91.91 91.61.91.91.1 61.91.91.1.81 91.91.1.81.41 91.1.81.41.61 1.81.41.61.1 81.41.61.1.21 41.61.1.21.11 61.1.21.11.51 1.21.11.51.41 21.11.51.41.31 11.51.41.31.31 51.41.31.31.11 41.31.31.11.81 31.31.11.81.91 31.11.81.91.91 11.81.91.91.21 81.91.91.21 91.91.21 91.21 21 2.62.12.32.22 62.12.32.22.42 12.32.22.42.2 32.22.42.2.72 22.42.2.72.12 42.2.72.12.22 2.72.12.22.2 72.12.22.2.72 12.22.2.72.72 22.2.72.72.12 2.72.72.12.62 72.72.12.62.52 72.12.62.52.82 12.62.52.82 62.52.82 52.82 82 23.33.93.23.93 33.93.23.93.43 93.23.93.43.3 23.93.43.3.43 93.43.3.43.33 43.3.43.33.53 3.43.33.53.63 43.33.53.63.73 33.53.63.73.13 53.63.73.13.73 63.73.13.73.73 73.13.73.73.33 13.73.73.33.93 73.73.33.93.23 73.33.93.23.13 33.93.23.13.33 93.23.13.33.3 23.13.33.3.33 13.33.3.33.83 33.3.33.83 3.33.83 33.83 83 74.74.54.84.74 74.54.84.74.24 54.84.74.24.4 84.74.24.4.94 74.24.4.94.84 24.4.94.84.74 4.94.84.74.34 94.84.74.34.34 84.74.34.34.44 74.34.34.44.74 34.34.44.74.64 34.44.74.64.14 44.74.64.14.34 74.64.14.34.84 64.14.34.84.84 14.34.84.84.44 34.84.84.44.34 84.84.44.34 84.44.34 44.34 34 65.35.85.85.55 35.85.85.55.15 85.85.55.15.25 85.55.15.25.75 55.15.25.75.95 15.25.75.95.65 25.75.95.65.65 75.95.65.65.35 95.65.65.35.5 65.65.35.5.15 65.35.5.15.95 35.5.15.95.55 5.15.95.55.75 15.95.55.75.85 95.55.75.85.75 55.75.85.75.15 75.85.75.15.95 85.75.15.95.5 75.15.95.5 15.95.5 95.5 5 26.96.46.6.46 96.46.6.46.16 46.6.46.16.16 6.46.16.16.86 46.16.16.86.56 16.16.86.56.56 16.86.56.56.56 86.56.56.56.16 56.56.56.16.36 56.56.16.36.76 56.16.36.76.96 16.36.76.96.96 36.76.96.96.26 76.96.96.26.26 96.96.26.26.36 96.26.26.36.66 26.26.36.66.36 26.36.66.36.36 36.66.36.36 66.36.36 36.36 36 97.27.97.67.77 27.97.67.77.47 97.67.77.47.7 67.77.47.7.47 77.47.7.47.87 47.7.47.87.37 7.47.87.37.87 47.87.37.87.77 87.37.87.77.7 37.87.77.7.57 87.77.7.57.47 77.7.57.47.47 7.57.47.47.37 57.47.47.37.27 47.47.37.27.17 47.37.27.17.7 37.27.17.7 27.17.7 17.7 7 38.68.78.8.28 68.78.8.28.98 78.8.28.98.78 8.28.98.78.58 28.98.78.58.98 98.78.58.98.8 78.58.98.8.88 58.98.8.88.8 98.8.88.8.58 8.88.8.58.58 88.8.58.58.58 8.58.58.58.38 58.58.58.38 58.58.38 58.38 38 99.89.59.39.99 89.59.39.99.29 59.39.99.29.59 39.99.29.59.89 99.29.59.89.89 29.59.89.89.29 59.89.89.29.9 89.89.29.9.79 89.29.9.79.49 29.9.79.49.59 9.79.49.59.29 79.49.59.29.59 49.59.29.59.19 59.29.59.19.39 29.59.19.39.9 59.19.39.9.9 19.39.9.9.99 39.9.9.99.69 9.9.99.69.39 9.99.69.39 99.69.39 69.39 39} + +do_execsql_test 1.12.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0.1.1.2.2 1.1.2.2.2 1.2.2.2.3 2.2.2.3.3 2.2.3.3.4 2.3.3.4.5 3.3.4.5.5 3.4.5.5.6 4.5.5.6.7 5.5.6.7.7 5.6.7.7.7 6.7.7.7.8 7.7.7.8.8 7.7.8.8.8 7.8.8.8.9 8.8.8.9.9 8.8.9.9.9 8.9.9.9.10 9.9.9.10.11 9.9.10.11.11 9.10.11.11.12 10.11.11.12.12 11.11.12.12.12 11.12.12.12.13 12.12.12.13.13 12.12.13.13.14 12.13.13.14.15 13.13.14.15.15 13.14.15.15.15 14.15.15.15.16 15.15.15.16.16 15.15.16.16.16 15.16.16.16.17 16.16.16.17.19 16.16.17.19.20 16.17.19.20.21 17.19.20.21.21 19.20.21.21.22 20.21.21.22.22 21.21.22.22.23 21.22.22.23.23 22.22.23.23.23 22.23.23.23.24 23.23.23.24.25 23.23.24.25.26 23.24.25.26.26 24.25.26.26.26 25.26.26.26.27 26.26.26.27.27 26.26.27.27.28 26.27.27.28.29 27.27.28.29.29 27.28.29.29.29 28.29.29.29.30 29.29.29.30.30 29.29.30.30.30 29.30.30.30.31 30.30.30.31.31 30.30.31.31.32 30.31.31.32.33 31.31.32.33.33 31.32.33.33.33 32.33.33.33.33 33.33.33.33.33 33.33.33.33.34 33.33.33.34.34 33.33.34.34.34 33.34.34.34.34 34.34.34.34.35 34.34.34.35.35 34.34.35.35.36 34.35.35.36.36 35.35.36.36.36 35.36.36.36.36 36.36.36.36.37 36.36.36.37.37 36.36.37.37.38 36.37.37.38.38 37.37.38.38.39 37.38.38.39.39 38.38.39.39.39 38.39.39.39.40 39.39.39.40.41 39.39.40.41.41 39.40.41.41.41 40.41.41.41.42 41.41.41.42.43 41.41.42.43.43 41.42.43.43.44 42.43.43.44.44 43.43.44.44.46 43.44.44.46.46 44.44.46.46.47 44.46.46.47.47 46.46.47.47.47 46.47.47.47.47 47.47.47.47.49 47.47.47.49.50 47.47.49.50.51 47.49.50.51.52 49.50.51.52.53 50.51.52.53.54 51.52.53.54.55 52.53.54.55.55 53.54.55.55.56 54.55.55.56.56 55.55.56.56.56 55.56.56.56.57 56.56.56.57.58 56.56.57.58.58 56.57.58.58.58 57.58.58.58.58 58.58.58.58.59 58.58.58.59.59 58.58.59.59.59 58.59.59.59.59 59.59.59.59.60 59.59.59.60.61 59.59.60.61.61 59.60.61.61.62 60.61.61.62.62 61.61.62.62.63 61.62.62.63.64 62.62.63.64.65 62.63.64.65.65 63.64.65.65.65 64.65.65.65.66 65.65.65.66.67 65.65.66.67.68 65.66.67.68.69 66.67.68.69.70 67.68.69.70.72 68.69.70.72.72 69.70.72.72.72 70.72.72.72.73 72.72.72.73.73 72.72.73.73.73 72.73.73.73.74 73.73.73.74.74 73.73.74.74.74 73.74.74.74.74 74.74.74.74.74 74.74.74.74.75 74.74.74.75.75 74.74.75.75.75 74.75.75.75.76 75.75.75.76.77 75.75.76.77.77 75.76.77.77.78 76.77.77.78.78 77.77.78.78.79 77.78.78.79.80 78.78.79.80.80 78.79.80.80.81 79.80.80.81.81 80.80.81.81.81 80.81.81.81.82 81.81.81.82.83 81.81.82.83.84 81.82.83.84.84 82.83.84.84.84 83.84.84.84.84 84.84.84.84.85 84.84.84.85.85 84.84.85.85.85 84.85.85.85.86 85.85.85.86.87 85.85.86.87.87 85.86.87.87.88 86.87.87.88.89 87.87.88.89.89 87.88.89.89.89 88.89.89.89.90 89.89.89.90.90 89.89.90.90.90 89.90.90.90.91 90.90.90.91.91 90.90.91.91.91 90.91.91.91.91 91.91.91.91.91 91.91.91.91.93 91.91.91.93.93 91.91.93.93.93 91.93.93.93.94 93.93.93.94.95 93.93.94.95.95 93.94.95.95.95 94.95.95.95.96 95.95.95.96.96 95.95.96.96.96 95.96.96.96.97 96.96.96.97.97 96.96.97.97.98 96.97.97.98.98 97.97.98.98.99 97.98.98.99.99 98.98.99.99.99 98.99.99.99 99.99.99 99.99 99} + +do_execsql_test 1.12.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0.10.20.30.30 10.20.30.30.30 20.30.30.30.40 30.30.30.40.50 30.30.40.50.60 30.40.50.60.70 40.50.60.70.80 50.60.70.80.80 60.70.80.80.90 70.80.80.90.90 80.80.90.90.90 80.90.90.90 90.90.90 90.90 90 1.1.11.11.21 1.11.11.21.21 11.11.21.21.31 11.21.21.31.31 21.21.31.31.41 21.31.31.41.41 31.31.41.41.41 31.41.41.41.51 41.41.41.51.61 41.41.51.61.61 41.51.61.61.81 51.61.61.81.81 61.61.81.81.81 61.81.81.81.91 81.81.81.91.91 81.81.91.91.91 81.91.91.91.91 91.91.91.91.91 91.91.91.91 91.91.91 91.91 91 2.2.2.12.12 2.2.12.12.12 2.12.12.12.22 12.12.12.22.22 12.12.22.22.32 12.22.22.32.42 22.22.32.42.52 22.32.42.52.62 32.42.52.62.62 42.52.62.62.72 52.62.62.72.72 62.62.72.72.72 62.72.72.72.82 72.72.72.82 72.72.82 72.82 82 3.3.13.13.23 3.13.13.23.23 13.13.23.23.23 13.23.23.23.33 23.23.23.33.33 23.23.33.33.33 23.33.33.33.33 33.33.33.33.33 33.33.33.33.43 33.33.33.43.43 33.33.43.43.53 33.43.43.53.63 43.43.53.63.73 43.53.63.73.73 53.63.73.73.73 63.73.73.73.83 73.73.73.83.93 73.73.83.93.93 73.83.93.93.93 83.93.93.93 93.93.93 93.93 93 4.14.24.34.34 14.24.34.34.34 24.34.34.34.34 34.34.34.34.44 34.34.34.44.44 34.34.44.44.54 34.44.44.54.64 44.44.54.64.74 44.54.64.74.74 54.64.74.74.74 64.74.74.74.74 74.74.74.74.74 74.74.74.74.84 74.74.74.84.84 74.74.84.84.84 74.84.84.84.84 84.84.84.84.94 84.84.84.94 84.84.94 84.94 94 5.5.15.15.15 5.15.15.15.25 15.15.15.25.35 15.15.25.35.35 15.25.35.35.55 25.35.35.55.55 35.35.55.55.65 35.55.55.65.65 55.55.65.65.65 55.65.65.65.75 65.65.65.75.75 65.65.75.75.75 65.75.75.75.85 75.75.75.85.85 75.75.85.85.85 75.85.85.85.95 85.85.85.95.95 85.85.95.95.95 85.95.95.95 95.95.95 95.95 95 6.16.16.16.26 16.16.16.26.26 16.16.26.26.26 16.26.26.26.36 26.26.26.36.36 26.26.36.36.36 26.36.36.36.36 36.36.36.36.46 36.36.36.46.46 36.36.46.46.56 36.46.46.56.56 46.46.56.56.56 46.56.56.56.66 56.56.56.66.76 56.56.66.76.86 56.66.76.86.96 66.76.86.96.96 76.86.96.96.96 86.96.96.96 96.96.96 96.96 96 7.7.7.17.27 7.7.17.27.27 7.17.27.27.37 17.27.27.37.37 27.27.37.37.47 27.37.37.47.47 37.37.47.47.47 37.47.47.47.47 47.47.47.47.57 47.47.47.57.67 47.47.57.67.77 47.57.67.77.77 57.67.77.77.87 67.77.77.87.87 77.77.87.87.97 77.87.87.97.97 87.87.97.97 87.97.97 97.97 97 8.8.8.28.38 8.8.28.38.38 8.28.38.38.58 28.38.38.58.58 38.38.58.58.58 38.58.58.58.58 58.58.58.58.68 58.58.58.68.78 58.58.68.78.78 58.68.78.78.88 68.78.78.88.98 78.78.88.98.98 78.88.98.98 88.98.98 98.98 98 9.9.9.19.29 9.9.19.29.29 9.19.29.29.29 19.29.29.29.39 29.29.29.39.39 29.29.39.39.39 29.39.39.39.49 39.39.39.49.59 39.39.49.59.59 39.49.59.59.59 49.59.59.59.59 59.59.59.59.69 59.59.59.69.79 59.59.69.79.89 59.69.79.89.89 69.79.89.89.89 79.89.89.89.99 89.89.89.99.99 89.89.99.99.99 89.99.99.99 99.99.99 99.99 99} + +do_execsql_test 1.12.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ) FROM t2 +} {0.90.40.30.80 90.40.30.80.20 40.30.80.20.90 30.80.20.90.60 80.20.90.60.70 20.90.60.70.80 90.60.70.80.90 60.70.80.90.30 70.80.90.30.50 80.90.30.50.10 90.30.50.10.30 30.50.10.30.41 50.10.30.41.81 10.30.41.81.91 30.41.81.91.61 41.81.91.61.91 81.91.61.91.91 91.61.91.91.1 61.91.91.1.81 91.91.1.81.41 91.1.81.41.61 1.81.41.61.1 81.41.61.1.21 41.61.1.21.11 61.1.21.11.51 1.21.11.51.41 21.11.51.41.31 11.51.41.31.31 51.41.31.31.11 41.31.31.11.81 31.31.11.81.91 31.11.81.91.91 11.81.91.91.21 81.91.91.21.2 91.91.21.2.62 91.21.2.62.12 21.2.62.12.32 2.62.12.32.22 62.12.32.22.42 12.32.22.42.2 32.22.42.2.72 22.42.2.72.12 42.2.72.12.22 2.72.12.22.2 72.12.22.2.72 12.22.2.72.72 22.2.72.72.12 2.72.72.12.62 72.72.12.62.52 72.12.62.52.82 12.62.52.82.23 62.52.82.23.33 52.82.23.33.93 82.23.33.93.23 23.33.93.23.93 33.93.23.93.43 93.23.93.43.3 23.93.43.3.43 93.43.3.43.33 43.3.43.33.53 3.43.33.53.63 43.33.53.63.73 33.53.63.73.13 53.63.73.13.73 63.73.13.73.73 73.13.73.73.33 13.73.73.33.93 73.73.33.93.23 73.33.93.23.13 33.93.23.13.33 93.23.13.33.3 23.13.33.3.33 13.33.3.33.83 33.3.33.83.74 3.33.83.74.74 33.83.74.74.54 83.74.74.54.84 74.74.54.84.74 74.54.84.74.24 54.84.74.24.4 84.74.24.4.94 74.24.4.94.84 24.4.94.84.74 4.94.84.74.34 94.84.74.34.34 84.74.34.34.44 74.34.34.44.74 34.34.44.74.64 34.44.74.64.14 44.74.64.14.34 74.64.14.34.84 64.14.34.84.84 14.34.84.84.44 34.84.84.44.34 84.84.44.34.65 84.44.34.65.35 44.34.65.35.85 34.65.35.85.85 65.35.85.85.55 35.85.85.55.15 85.85.55.15.25 85.55.15.25.75 55.15.25.75.95 15.25.75.95.65 25.75.95.65.65 75.95.65.65.35 95.65.65.35.5 65.65.35.5.15 65.35.5.15.95 35.5.15.95.55 5.15.95.55.75 15.95.55.75.85 95.55.75.85.75 55.75.85.75.15 75.85.75.15.95 85.75.15.95.5 75.15.95.5.26 15.95.5.26.96 95.5.26.96.46 5.26.96.46.6 26.96.46.6.46 96.46.6.46.16 46.6.46.16.16 6.46.16.16.86 46.16.16.86.56 16.16.86.56.56 16.86.56.56.56 86.56.56.56.16 56.56.56.16.36 56.56.16.36.76 56.16.36.76.96 16.36.76.96.96 36.76.96.96.26 76.96.96.26.26 96.96.26.26.36 96.26.26.36.66 26.26.36.66.36 26.36.66.36.36 36.66.36.36.97 66.36.36.97.27 36.36.97.27.97 36.97.27.97.67 97.27.97.67.77 27.97.67.77.47 97.67.77.47.7 67.77.47.7.47 77.47.7.47.87 47.7.47.87.37 7.47.87.37.87 47.87.37.87.77 87.37.87.77.7 37.87.77.7.57 87.77.7.57.47 77.7.57.47.47 7.57.47.47.37 57.47.47.37.27 47.47.37.27.17 47.37.27.17.7 37.27.17.7.38 27.17.7.38.68 17.7.38.68.78 7.38.68.78.8 38.68.78.8.28 68.78.8.28.98 78.8.28.98.78 8.28.98.78.58 28.98.78.58.98 98.78.58.98.8 78.58.98.8.88 58.98.8.88.8 98.8.88.8.58 8.88.8.58.58 88.8.58.58.58 8.58.58.58.38 58.58.58.38.99 58.58.38.99.89 58.38.99.89.59 38.99.89.59.39 99.89.59.39.99 89.59.39.99.29 59.39.99.29.59 39.99.29.59.89 99.29.59.89.89 29.59.89.89.29 59.89.89.29.9 89.89.29.9.79 89.29.9.79.49 29.9.79.49.59 9.79.49.59.29 79.49.59.29.59 49.59.29.59.19 59.29.59.19.39 29.59.19.39.9 59.19.39.9.9 19.39.9.9.99 39.9.9.99.69 9.9.99.69.39 9.99.69.39 99.69.39 69.39 39} + +do_execsql_test 1.12.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.12.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) +} {5 74.74 5 74.74.99 5 74.99 5 74.99.33 5 99.33 5 99.33.89 5 33.89 5 33.89.96 5 89.96 5 89.96.38 5 96.38 5 96.38.39 5 38.39 5 38.39.91 5 39.91 5 39.91.6 5 91.6 5 91.6.97 5 6.97 5 6.97.46 5 97.46 5 97.46.54 5 46.54 5 46.54.8 5 54.8 5 54.8.29 5 8.29 5 8.29.84 5 29.84 5 29.84.23 5 84.23 5 84.23.16 5 23.16 5 23.16.65 5 16.65 5 16.65.47 5 65.47 5 65.47.86 5 47.86 5 47.86.61 5 86.61 5 86.61.85 5 61.85 5 61.85.85 5 85.85 5 85.85.59 5 85.59 5 85.59.32 5 59.32 5 59.32.3 5 32.3 5 32.3.22 5 3.22 5 3.22.55 5 22.55 5 22.55.28 5 55.28 5 55.28.25 5 28.25 5 28.25.1 5 25.1 5 25.1.40 5 1.40 5 1.40.56 5 40.56 5 40.56.75 5 56.75 5 56.75.89 5 75.89 5 75.89.76 5 89.76 5 89.76.4 5 76.4 5 76.4.42 5 4.42 5 4.42.78 5 42.78 5 42.78.29 5 78.29 5 78.29.63 5 29.63 5 29.63.87 5 63.87 5 63.87.80 5 87.80 5 87.80.72 5 80.72 5 80.72.9 5 72.9 5 72.9.73 5 9.73 5 9.73.65 5 73.65 5 73.65.58 5 65.58 5 65.58.98 5 58.98 5 58.98.21 5 98.21 5 98.21.65 5 21.65 5 21.65.5 5 65.5 5 65.5.11 5 5.11 5 5.11.87 5 11.87 5 11.87.12 5 87.12 5 87.12.20 5 12.20 5 12.20.31 5 20.31 5 20.31.95 5 31.95 5 31.95.73 5 95.73 5 95.73.88 5 73.88 5 73.88.8 5 88.8 5 88.8.49 5 8.49 5 8.49.90 5 49.90 5 49.90.96 5 90.96 5 90.96.55 5 96.55 5 96.55.77 5 55.77 5 55.77.2 5 77.2 5 77.2.85 5 2.85 5 2.85.74 5 85.74 5 85.74.70 5 74.70 5 74.70.19 5 70.19 5 70.19.26 5 19.26 5 19.26.47 5 26.47 5 26.47.90 5 47.90 5 47.90.58 5 90.58 5 90.58.9 5 58.9 5 58.9.72 5 9.72 5 9.72.33 5 72.33 5 72.33.75 5 33.75 5 33.75.81 5 75.81 5 75.81.23 5 81.23 5 81.23.13 5 23.13 5 23.13.14 5 13.14 5 13.14.91 5 14.91 5 14.91.91 5 91.91 5 91.91.15 5 91.15 5 91.15.36 5 15.36 5 15.36.3 5 36.3 5 36.3.69 5 3.69 5 3.69.52 5 69.52 5 69.52.50 5 52.50 5 52.50.10 5 50.10 5 50.10.33 5 10.33 5 10.33.39 5 33.39 5 33.39.58 5 39.58 5 39.58.38 5 58.38 5 58.38.83 5 38.83 5 38.83.82 5 83.82 5 83.82.7 5 82.7 4 82.7 3 7 2 7 1 {}} + +do_execsql_test 1.12.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) +} {5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.12.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) +} {5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.12.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) +} {5 89.6.29.47.59 5 6.29.47.59.28 5 29.47.59.28.75 5 47.59.28.75.78 5 59.28.75.78.72 5 28.75.78.72.98 5 75.78.72.98.87 5 78.72.98.87.73 5 72.98.87.73.96 5 98.87.73.96.74 5 87.73.96.74.90 5 73.96.74.90.75 5 96.74.90.75.91 5 74.90.75.91.69 5 90.75.91.69.39 5 75.91.69.39.7 4 91.69.39.7 3 69.39.7 2 39.7 1 7 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 74.96.97.84.86 5 96.97.84.86.32 5 97.84.86.32.25 5 84.86.32.25.89 5 86.32.25.89.29 5 32.25.89.29.9 5 25.89.29.9.21 5 89.29.9.21.12 5 29.9.21.12.88 5 9.21.12.88.55 5 21.12.88.55.70 5 12.88.55.70.58 5 88.55.70.58.81 5 55.70.58.81.91 5 70.58.81.91.52 5 58.81.91.52.58 4 81.91.52.58 3 91.52.58 2 52.58 1 58 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 74.38.46.23.61 5 38.46.23.61.3 5 46.23.61.3.1 5 23.61.3.1.76 5 61.3.1.76.63 5 3.1.76.63.73 5 1.76.63.73.65 5 76.63.73.65.20 5 63.73.65.20.8 5 73.65.20.8.77 5 65.20.8.77.19 5 20.8.77.19.9 5 8.77.19.9.23 5 77.19.9.23.15 5 19.9.23.15.50 5 9.23.15.50.38 4 23.15.50.38 3 15.50.38 2 50.38 1 38 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 99.39.54.16.85 5 39.54.16.85.22 5 54.16.85.22.40 5 16.85.22.40.4 5 85.22.40.4.87 5 22.40.4.87.65 5 40.4.87.65.5 5 4.87.65.5.31 5 87.65.5.31.49 5 65.5.31.49.2 5 5.31.49.2.26 5 31.49.2.26.72 5 49.2.26.72.13 5 2.26.72.13.36 5 26.72.13.36.10 5 72.13.36.10.83 4 13.36.10.83 3 36.10.83 2 10.83 1 83 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {} 5 33.91.8.65.85 5 91.8.65.85.55 5 8.65.85.55.56 5 65.85.55.56.42 5 85.55.56.42.80 5 55.56.42.80.58 5 56.42.80.58.11 5 42.80.58.11.95 5 80.58.11.95.90 5 58.11.95.90.85 5 11.95.90.85.47 5 95.90.85.47.33 5 90.85.47.33.14 5 85.47.33.14.3 5 47.33.14.3.33 5 33.14.3.33.82 4 14.3.33.82 3 3.33.82 2 33.82 1 82 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.13.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {74 99 99 99 33 89 89 96 96 96 68 68 68 91 91 91 99 99 99 97 78 78 97 97 97 67 93 93 93 84 77 23 93 93 93 65 47 86 86 86 91 91 91 85 85 85 59 59 56 56 91 91 91 90 90 55 89 89 89 47 56 56 56 56 56 75 75 89 98 98 98 81 94 94 94 78 78 78 53 63 63 87 87 87 84 84 84 72 61 73 95 95 95 65 96 98 98 98 74 74 74 65 73 73 73 87 87 87 41 20 31 31 31 95 95 95 79 88 88 88 34 49 49 90 90 96 96 96 75 77 77 77 44 85 85 85 74 74 70 70 59 39 39 47 80 90 90 90 58 58 72 72 72 72 93 93 93 81 81 81 37 37 37 14 62 91 91 91 91 91 34 36 99 99 99 95 95 69 58 52 84 84 84 84 84 39 44 58 58 58 38 83 83 83 82 82 17 7 5 {} {}} + +do_execsql_test 1.13.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {23 23 23 26 2 2 2 81 59 38 38 38 39 39 46 6 6 6 27 27 27 46 54 8 8 8 29 29 77 23 16 16 16 16 35 35 7 7 7 61 61 61 24 24 24 43 12 12 12 3 3 3 22 22 15 15 15 25 25 1 1 1 40 40 16 16 16 36 36 76 76 4 4 4 30 30 30 29 29 29 2 2 2 37 37 72 41 9 9 9 61 65 13 13 13 58 1 1 1 21 35 5 5 5 11 11 41 12 8 8 8 20 15 15 15 22 22 73 34 8 8 8 11 34 34 59 59 55 55 55 44 2 2 2 7 57 29 29 29 19 19 19 26 26 26 47 36 36 36 9 9 9 66 33 33 33 64 64 9 9 9 13 12 12 12 14 36 36 33 15 15 15 34 3 3 3 58 52 30 30 30 10 10 10 21 21 21 39 30 30 30 34 27 27 17 7 5 5 5 {} {}} + +do_execsql_test 1.13.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.13.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.13.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.13.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.13.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.13.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.13.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.13.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.13.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.13.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.13.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.13.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.13.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.13.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.13.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.13.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.13.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.13.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.13.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {28 105 33 41 11 99 92 108 72 52 83 55 79 109 65 26 120 119 50 70 103 80 124 36 96 59 124 116 110 57 51 52 130 103 74 87 48 128 117 105 136 131 71 133 92 109 63 84 109 57 146 78 147 113 74 88 150 87 110 65 121 106 110 124 85 145 107 161 171 150 156 80 171 120 109 158 114 111 136 147 87 173 124 168 173 162 132 101 154 167 190 161 110 156 195 198 102 123 177 169 140 111 180 119 160 197 152 124 121 134 146 147 132 213 141 193 200 210 157 132 136 175 161 218 188 226 191 187 208 211 179 138 144 223 196 214 170 212 202 163 184 172 173 195 229 240 187 210 200 163 227 228 223 191 252 235 225 243 172 187 202 179 179 182 231 261 207 263 206 189 209 212 276 181 274 249 239 234 213 234 269 196 271 221 210 229 235 250 223 232 229 279 224 280 216 207 206 206 206 {} {}} + +do_execsql_test 1.13.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {168 134 218 191 212 229 240 213 234 196 223 223 223 {} {} 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 210 210 {} {} 78 120 87 162 124 141 138 227 228 179 231 234 280 280 280 {} {} 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 279 279 {} {} 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 229 229 {} {} 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 206 206 {} {} 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 212 212 {} {} 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 207 207 {} {} 88 171 158 156 198 121 210 132 210 239 250 232 232 232 {} {} 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229 229 229 {} {}} + +do_execsql_test 1.13.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {87 138 57 181 80 111 206 26 48 144 207 36 121 132 101 163 172 196 119 136 63 124 179 110 179 182 74 132 189 51 52 85 216 163 134 123 210 78 141 28 57 187 71 87 33 172 173 50 224 88 59 111 170 109 213 223 146 147 84 41 114 191 206 221 157 161 209 229 74 140 107 187 207 212 124 202 52 232 55 184 229 106 44 132 152 120 92 110 179 235 65 70 87 110 195 200 175 234 160 234 136 80 113 187 109 121 124 196 156 210 239 250 72 109 188 202 191 105 154 79 231 147 225 103 161 169 223 96 83 249 212 162 227 228 167 180 193 76 78 117 177 214 145 208 235 150 110 211 103 158 200 168 229 92 156 243 280 279 116 173 269 271 131 133 223 128 173 197 210 99 150 161 147 218 240 109 136 146 261 263 124 130 252 171 190 213 274 108 195 226 119 124 171 198 105 120 276 276 276 {} {}} + +do_execsql_test 1.13.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {213 223 106 234 191 212 168 229 147 218 240 240 240 {} {} 123 210 146 147 44 132 152 160 105 154 92 156 243 109 136 146 261 263 263 263 {} {} 124 179 78 141 84 120 234 79 231 162 227 228 280 280 280 {} {} 28 57 187 41 114 191 206 221 92 110 136 147 167 180 193 279 124 130 252 252 252 {} {} 161 209 229 179 235 80 225 76 78 117 177 214 116 173 269 271 171 171 171 {} {} 189 87 74 140 113 187 103 161 169 145 208 235 131 133 223 190 213 274 274 274 {} {} 33 172 173 107 187 207 212 65 70 109 121 124 223 150 128 108 195 226 226 226 {} {} 50 224 124 202 87 110 195 200 196 96 110 211 173 197 119 124 124 124 {} {} 52 232 156 210 239 250 83 103 158 210 171 198 198 198 {} {} 59 111 170 55 184 229 175 72 109 188 202 249 200 99 150 161 105 120 276 276 276 {} {}} + +do_execsql_test 1.13.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {168 134 218 191 212 229 240 213 234 196 223 44 92 109 105 136 146 65 156 132 154 102 123 119 160 152 146 147 136 243 261 263 210 11 79 63 84 78 120 87 162 124 141 138 227 228 179 231 234 280 28 41 124 57 130 92 57 110 114 136 147 167 110 180 193 191 252 187 179 206 181 221 279 76 78 80 116 117 71 80 171 173 177 157 161 179 214 225 182 209 269 271 235 229 103 74 131 133 113 74 87 145 190 161 169 140 111 132 213 187 208 223 235 189 274 206 33 108 65 26 70 51 52 128 109 121 124 85 107 150 195 226 172 173 187 223 207 212 119 50 124 96 110 87 48 110 173 124 197 211 144 196 195 200 202 224 216 207 52 83 103 36 88 171 158 156 198 121 210 132 210 239 250 232 105 99 72 55 120 59 109 150 161 111 101 200 175 188 170 202 163 184 163 172 276 249 229 229 229 {} {}} + +do_execsql_test 1.13.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {41 {} {} {} {} {} {} {} 59 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 43 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 84 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 65 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {40 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 51 {} {} {} {} {} {} {} {} {} {} {} 22 {} {} {} {} {} 2 {} {} {} 62 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 2 3 4 5 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {20 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 11 21 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 12 12 22 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {40 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 51 {} {} {} {} {} {} {} {} {} {} {} 22 {} {} {} {} {} 2 {} {} {} 62 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5 {} {}} + +do_execsql_test 1.13.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {40 30 80 20 90 60 70 80 90 30 50 10 30 {} {} 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 {} {} 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 {} {} 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 {} {} 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 {} {} 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 {} {} 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 {} {} 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 {} {} 78 8 28 98 78 58 98 8 88 8 58 58 58 38 {} {} 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39 {} {}} + +do_execsql_test 1.13.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99 {} {}} + +do_execsql_test 1.13.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {20 30 30 30 40 50 60 70 80 80 90 90 90 {} {} 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 {} {} 2 12 12 12 22 22 32 42 52 62 62 72 72 72 82 {} {} 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 {} {} 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 {} {} 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 {} {} 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 {} {} 7 17 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 {} {} 8 28 38 38 58 58 58 58 68 78 78 88 98 98 {} {} 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99 {} {}} + +do_execsql_test 1.13.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39 {} {}} + +do_execsql_test 1.13.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.13.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.13.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.13.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.13.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {41.74.23 74.23.99 23.99.26 99.26.33 26.33.2 33.2.89 2.89.81 89.81.96 81.96.59 96.59.38 59.38.68 38.68.39 68.39.62 39.62.91 62.91.46 91.46.6 46.6.99 6.99.97 99.97.27 97.27.46 27.46.78 46.78.54 78.54.97 54.97.8 97.8.67 8.67.29 67.29.93 29.93.84 93.84.77 84.77.23 77.23.16 23.16.16 16.16.93 16.93.65 93.65.35 65.35.47 35.47.7 47.7.86 7.86.74 86.74.61 74.61.91 61.91.85 91.85.24 85.24.85 24.85.43 85.43.59 43.59.12 59.12.32 12.32.56 32.56.3 56.3.91 3.91.22 91.22.90 22.90.55 90.55.15 55.15.28 15.28.89 28.89.25 89.25.47 25.47.1 47.1.56 1.56.40 56.40.43 40.43.56 43.56.16 56.16.75 16.75.36 75.36.89 36.89.98 89.98.76 98.76.81 76.81.4 81.4.94 4.94.42 94.42.30 42.30.78 30.78.33 78.33.29 33.29.53 29.53.63 53.63.2 63.2.87 2.87.37 87.37.80 37.80.84 80.84.72 84.72.41 72.41.9 41.9.61 9.61.73 61.73.95 73.95.65 95.65.13 65.13.58 13.58.96 58.96.98 96.98.1 98.1.21 1.21.74 21.74.65 74.65.35 65.35.5 35.5.73 5.73.11 73.11.51 11.51.87 51.87.41 87.41.12 41.12.8 12.8.20 8.20.31 20.31.31 31.31.15 31.15.95 15.95.22 95.22.73 22.73.79 73.79.88 79.88.34 88.34.8 34.8.11 8.11.49 11.49.34 49.34.90 34.90.59 90.59.96 59.96.60 96.60.55 60.55.75 55.75.77 75.77.44 77.44.2 44.2.7 2.7.85 7.85.57 85.57.74 57.74.29 74.29.70 29.70.59 70.59.19 59.19.39 19.39.26 39.26.26 26.26.47 26.47.80 47.80.90 80.90.36 90.36.58 36.58.47 58.47.9 47.9.72 9.72.72 72.72.66 72.66.33 66.33.93 33.93.75 93.75.64 75.64.81 64.81.9 81.9.23 9.23.37 23.37.13 37.13.12 13.12.14 12.14.62 14.62.91 62.91.36 91.36.91 36.91.33 91.33.15 33.15.34 15.34.36 34.36.99 36.99.3 99.3.95 3.95.69 95.69.58 69.58.52 58.52.30 52.30.50 30.50.84 50.84.10 84.10.84 10.84.33 84.33.21 33.21.39 21.39.44 39.44.58 44.58.30 58.30.38 30.38.34 38.34.83 34.83.27 83.27.82 27.82.17 82.17.7 17.7.5 7.5 5 {} {}} + +do_execsql_test 1.13.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {40.30.80 30.80.20 80.20.90 20.90.60 90.60.70 60.70.80 70.80.90 80.90.30 90.30.50 30.50.10 50.10.30 10.30 30 {} {} 91.61.91 61.91.91 91.91.1 91.1.81 1.81.41 81.41.61 41.61.1 61.1.21 1.21.11 21.11.51 11.51.41 51.41.31 41.31.31 31.31.11 31.11.81 11.81.91 81.91.91 91.91.21 91.21 21 {} {} 12.32.22 32.22.42 22.42.2 42.2.72 2.72.12 72.12.22 12.22.2 22.2.72 2.72.72 72.72.12 72.12.62 12.62.52 62.52.82 52.82 82 {} {} 93.23.93 23.93.43 93.43.3 43.3.43 3.43.33 43.33.53 33.53.63 53.63.73 63.73.13 73.13.73 13.73.73 73.73.33 73.33.93 33.93.23 93.23.13 23.13.33 13.33.3 33.3.33 3.33.83 33.83 83 {} {} 54.84.74 84.74.24 74.24.4 24.4.94 4.94.84 94.84.74 84.74.34 74.34.34 34.34.44 34.44.74 44.74.64 74.64.14 64.14.34 14.34.84 34.84.84 84.84.44 84.44.34 44.34 34 {} {} 85.85.55 85.55.15 55.15.25 15.25.75 25.75.95 75.95.65 95.65.65 65.65.35 65.35.5 35.5.15 5.15.95 15.95.55 95.55.75 55.75.85 75.85.75 85.75.15 75.15.95 15.95.5 95.5 5 {} {} 46.6.46 6.46.16 46.16.16 16.16.86 16.86.56 86.56.56 56.56.56 56.56.16 56.16.36 16.36.76 36.76.96 76.96.96 96.96.26 96.26.26 26.26.36 26.36.66 36.66.36 66.36.36 36.36 36 {} {} 97.67.77 67.77.47 77.47.7 47.7.47 7.47.87 47.87.37 87.37.87 37.87.77 87.77.7 77.7.57 7.57.47 57.47.47 47.47.37 47.37.27 37.27.17 27.17.7 17.7 7 {} {} 78.8.28 8.28.98 28.98.78 98.78.58 78.58.98 58.98.8 98.8.88 8.88.8 88.8.58 8.58.58 58.58.58 58.58.38 58.38 38 {} {} 59.39.99 39.99.29 99.29.59 29.59.89 59.89.89 89.89.29 89.29.9 29.9.79 9.79.49 79.49.59 49.59.29 59.29.59 29.59.19 59.19.39 19.39.9 39.9.9 9.9.99 9.99.69 99.69.39 69.39 39 {} {}} + +do_execsql_test 1.13.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {1.2.2 2.2.2 2.2.3 2.3.3 3.3.4 3.4.5 4.5.5 5.5.6 5.6.7 6.7.7 7.7.7 7.7.8 7.8.8 8.8.8 8.8.9 8.9.9 9.9.9 9.9.10 9.10.11 10.11.11 11.11.12 11.12.12 12.12.12 12.12.13 12.13.13 13.13.14 13.14.15 14.15.15 15.15.15 15.15.16 15.16.16 16.16.16 16.16.17 16.17.19 17.19.20 19.20.21 20.21.21 21.21.22 21.22.22 22.22.23 22.23.23 23.23.23 23.23.24 23.24.25 24.25.26 25.26.26 26.26.26 26.26.27 26.27.27 27.27.28 27.28.29 28.29.29 29.29.29 29.29.30 29.30.30 30.30.30 30.30.31 30.31.31 31.31.32 31.32.33 32.33.33 33.33.33 33.33.33 33.33.33 33.33.34 33.34.34 34.34.34 34.34.34 34.34.35 34.35.35 35.35.36 35.36.36 36.36.36 36.36.36 36.36.37 36.37.37 37.37.38 37.38.38 38.38.39 38.39.39 39.39.39 39.39.40 39.40.41 40.41.41 41.41.41 41.41.42 41.42.43 42.43.43 43.43.44 43.44.44 44.44.46 44.46.46 46.46.47 46.47.47 47.47.47 47.47.47 47.47.49 47.49.50 49.50.51 50.51.52 51.52.53 52.53.54 53.54.55 54.55.55 55.55.56 55.56.56 56.56.56 56.56.57 56.57.58 57.58.58 58.58.58 58.58.58 58.58.59 58.59.59 59.59.59 59.59.59 59.59.60 59.60.61 60.61.61 61.61.62 61.62.62 62.62.63 62.63.64 63.64.65 64.65.65 65.65.65 65.65.66 65.66.67 66.67.68 67.68.69 68.69.70 69.70.72 70.72.72 72.72.72 72.72.73 72.73.73 73.73.73 73.73.74 73.74.74 74.74.74 74.74.74 74.74.74 74.74.75 74.75.75 75.75.75 75.75.76 75.76.77 76.77.77 77.77.78 77.78.78 78.78.79 78.79.80 79.80.80 80.80.81 80.81.81 81.81.81 81.81.82 81.82.83 82.83.84 83.84.84 84.84.84 84.84.84 84.84.85 84.85.85 85.85.85 85.85.86 85.86.87 86.87.87 87.87.88 87.88.89 88.89.89 89.89.89 89.89.90 89.90.90 90.90.90 90.90.91 90.91.91 91.91.91 91.91.91 91.91.91 91.91.93 91.93.93 93.93.93 93.93.94 93.94.95 94.95.95 95.95.95 95.95.96 95.96.96 96.96.96 96.96.97 96.97.97 97.97.98 97.98.98 98.98.99 98.99.99 99.99.99 99.99 99 {} {}} + +do_execsql_test 1.13.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {20.30.30 30.30.30 30.30.40 30.40.50 40.50.60 50.60.70 60.70.80 70.80.80 80.80.90 80.90.90 90.90.90 90.90 90 {} {} 11.11.21 11.21.21 21.21.31 21.31.31 31.31.41 31.41.41 41.41.41 41.41.51 41.51.61 51.61.61 61.61.81 61.81.81 81.81.81 81.81.91 81.91.91 91.91.91 91.91.91 91.91.91 91.91 91 {} {} 2.12.12 12.12.12 12.12.22 12.22.22 22.22.32 22.32.42 32.42.52 42.52.62 52.62.62 62.62.72 62.72.72 72.72.72 72.72.82 72.82 82 {} {} 13.13.23 13.23.23 23.23.23 23.23.33 23.33.33 33.33.33 33.33.33 33.33.33 33.33.43 33.43.43 43.43.53 43.53.63 53.63.73 63.73.73 73.73.73 73.73.83 73.83.93 83.93.93 93.93.93 93.93 93 {} {} 24.34.34 34.34.34 34.34.34 34.34.44 34.44.44 44.44.54 44.54.64 54.64.74 64.74.74 74.74.74 74.74.74 74.74.74 74.74.84 74.84.84 84.84.84 84.84.84 84.84.94 84.94 94 {} {} 15.15.15 15.15.25 15.25.35 25.35.35 35.35.55 35.55.55 55.55.65 55.65.65 65.65.65 65.65.75 65.75.75 75.75.75 75.75.85 75.85.85 85.85.85 85.85.95 85.95.95 95.95.95 95.95 95 {} {} 16.16.26 16.26.26 26.26.26 26.26.36 26.36.36 36.36.36 36.36.36 36.36.46 36.46.46 46.46.56 46.56.56 56.56.56 56.56.66 56.66.76 66.76.86 76.86.96 86.96.96 96.96.96 96.96 96 {} {} 7.17.27 17.27.27 27.27.37 27.37.37 37.37.47 37.47.47 47.47.47 47.47.47 47.47.57 47.57.67 57.67.77 67.77.77 77.77.87 77.87.87 87.87.97 87.97.97 97.97 97 {} {} 8.28.38 28.38.38 38.38.58 38.58.58 58.58.58 58.58.58 58.58.68 58.68.78 68.78.78 78.78.88 78.88.98 88.98.98 98.98 98 {} {} 9.19.29 19.29.29 29.29.29 29.29.39 29.39.39 39.39.39 39.39.49 39.49.59 49.59.59 59.59.59 59.59.59 59.59.69 59.69.79 69.79.89 79.89.89 89.89.89 89.89.99 89.99.99 99.99.99 99.99 99 {} {}} + +do_execsql_test 1.13.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ) FROM t2 +} {40.30.80 30.80.20 80.20.90 20.90.60 90.60.70 60.70.80 70.80.90 80.90.30 90.30.50 30.50.10 50.10.30 10.30.41 30.41.81 41.81.91 81.91.61 91.61.91 61.91.91 91.91.1 91.1.81 1.81.41 81.41.61 41.61.1 61.1.21 1.21.11 21.11.51 11.51.41 51.41.31 41.31.31 31.31.11 31.11.81 11.81.91 81.91.91 91.91.21 91.21.2 21.2.62 2.62.12 62.12.32 12.32.22 32.22.42 22.42.2 42.2.72 2.72.12 72.12.22 12.22.2 22.2.72 2.72.72 72.72.12 72.12.62 12.62.52 62.52.82 52.82.23 82.23.33 23.33.93 33.93.23 93.23.93 23.93.43 93.43.3 43.3.43 3.43.33 43.33.53 33.53.63 53.63.73 63.73.13 73.13.73 13.73.73 73.73.33 73.33.93 33.93.23 93.23.13 23.13.33 13.33.3 33.3.33 3.33.83 33.83.74 83.74.74 74.74.54 74.54.84 54.84.74 84.74.24 74.24.4 24.4.94 4.94.84 94.84.74 84.74.34 74.34.34 34.34.44 34.44.74 44.74.64 74.64.14 64.14.34 14.34.84 34.84.84 84.84.44 84.44.34 44.34.65 34.65.35 65.35.85 35.85.85 85.85.55 85.55.15 55.15.25 15.25.75 25.75.95 75.95.65 95.65.65 65.65.35 65.35.5 35.5.15 5.15.95 15.95.55 95.55.75 55.75.85 75.85.75 85.75.15 75.15.95 15.95.5 95.5.26 5.26.96 26.96.46 96.46.6 46.6.46 6.46.16 46.16.16 16.16.86 16.86.56 86.56.56 56.56.56 56.56.16 56.16.36 16.36.76 36.76.96 76.96.96 96.96.26 96.26.26 26.26.36 26.36.66 36.66.36 66.36.36 36.36.97 36.97.27 97.27.97 27.97.67 97.67.77 67.77.47 77.47.7 47.7.47 7.47.87 47.87.37 87.37.87 37.87.77 87.77.7 77.7.57 7.57.47 57.47.47 47.47.37 47.37.27 37.27.17 27.17.7 17.7.38 7.38.68 38.68.78 68.78.8 78.8.28 8.28.98 28.98.78 98.78.58 78.58.98 58.98.8 98.8.88 8.88.8 88.8.58 8.58.58 58.58.58 58.58.38 58.38.99 38.99.89 99.89.59 89.59.39 59.39.99 39.99.29 99.29.59 29.59.89 59.89.89 89.89.29 89.29.9 29.9.79 9.79.49 79.49.59 49.59.29 59.29.59 29.59.19 59.19.39 19.39.9 39.9.9 9.9.99 9.99.69 99.69.39 69.39 39 {} {}} + +do_execsql_test 1.13.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.13.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) +} {3 74 3 74.99 3 99 3 99.33 3 33 3 33.89 3 89 3 89.96 3 96 3 96.38 3 38 3 38.39 3 39 3 39.91 3 91 3 91.6 3 6 3 6.97 3 97 3 97.46 3 46 3 46.54 3 54 3 54.8 3 8 3 8.29 3 29 3 29.84 3 84 3 84.23 3 23 3 23.16 3 16 3 16.65 3 65 3 65.47 3 47 3 47.86 3 86 3 86.61 3 61 3 61.85 3 85 3 85.85 3 85 3 85.59 3 59 3 59.32 3 32 3 32.3 3 3 3 3.22 3 22 3 22.55 3 55 3 55.28 3 28 3 28.25 3 25 3 25.1 3 1 3 1.40 3 40 3 40.56 3 56 3 56.75 3 75 3 75.89 3 89 3 89.76 3 76 3 76.4 3 4 3 4.42 3 42 3 42.78 3 78 3 78.29 3 29 3 29.63 3 63 3 63.87 3 87 3 87.80 3 80 3 80.72 3 72 3 72.9 3 9 3 9.73 3 73 3 73.65 3 65 3 65.58 3 58 3 58.98 3 98 3 98.21 3 21 3 21.65 3 65 3 65.5 3 5 3 5.11 3 11 3 11.87 3 87 3 87.12 3 12 3 12.20 3 20 3 20.31 3 31 3 31.95 3 95 3 95.73 3 73 3 73.88 3 88 3 88.8 3 8 3 8.49 3 49 3 49.90 3 90 3 90.96 3 96 3 96.55 3 55 3 55.77 3 77 3 77.2 3 2 3 2.85 3 85 3 85.74 3 74 3 74.70 3 70 3 70.19 3 19 3 19.26 3 26 3 26.47 3 47 3 47.90 3 90 3 90.58 3 58 3 58.9 3 9 3 9.72 3 72 3 72.33 3 33 3 33.75 3 75 3 75.81 3 81 3 81.23 3 23 3 23.13 3 13 3 13.14 3 14 3 14.91 3 91 3 91.91 3 91 3 91.15 3 15 3 15.36 3 36 3 36.3 3 3 3 3.69 3 69 3 69.52 3 52 3 52.50 3 50 3 50.10 3 10 3 10.33 3 33 3 33.39 3 39 3 39.58 3 58 3 58.38 3 38 3 38.83 3 83 3 83.82 3 82 3 82.7 3 7 2 7 1 {} 0 {} 0 {}} + +do_execsql_test 1.13.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) +} {3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {}} + +do_execsql_test 1.13.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) +} {3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {}} + +do_execsql_test 1.13.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) +} {3 29.47.59 3 47.59.28 3 59.28.75 3 28.75.78 3 75.78.72 3 78.72.98 3 72.98.87 3 98.87.73 3 87.73.96 3 73.96.74 3 96.74.90 3 74.90.75 3 90.75.91 3 75.91.69 3 91.69.39 3 69.39.7 2 39.7 1 7 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 97.84.86 3 84.86.32 3 86.32.25 3 32.25.89 3 25.89.29 3 89.29.9 3 29.9.21 3 9.21.12 3 21.12.88 3 12.88.55 3 88.55.70 3 55.70.58 3 70.58.81 3 58.81.91 3 81.91.52 3 91.52.58 2 52.58 1 58 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 46.23.61 3 23.61.3 3 61.3.1 3 3.1.76 3 1.76.63 3 76.63.73 3 63.73.65 3 73.65.20 3 65.20.8 3 20.8.77 3 8.77.19 3 77.19.9 3 19.9.23 3 9.23.15 3 23.15.50 3 15.50.38 2 50.38 1 38 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 54.16.85 3 16.85.22 3 85.22.40 3 22.40.4 3 40.4.87 3 4.87.65 3 87.65.5 3 65.5.31 3 5.31.49 3 31.49.2 3 49.2.26 3 2.26.72 3 26.72.13 3 72.13.36 3 13.36.10 3 36.10.83 2 10.83 1 83 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {} 3 8.65.85 3 65.85.55 3 85.55.56 3 55.56.42 3 56.42.80 3 42.80.58 3 80.58.11 3 58.11.95 3 11.95.90 3 95.90.85 3 90.85.47 3 85.47.33 3 47.33.14 3 33.14.3 3 14.3.33 3 3.33.82 2 33.82 1 82 0 {} 0 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 3 {} 2 {} 1 {} 0 {} 0 {}} + +do_execsql_test 1.14.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.14.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.14.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.14.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.14.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.14.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.14.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.14.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.14.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.14.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.14.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.14.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.14.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.14.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.14.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.14.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.14.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.14.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.14.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.14.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.14.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206} + +do_execsql_test 1.14.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.14.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.14.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.14.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.14.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.14.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 81 86 81 46 98 97 23 41 72 29 13 28 35 16 47 47 9 24 26 98 58 8 24 30 91 58 2 56 29 73 2 42 46 62 62 73 40 16 85 33 37 81 25 9 87 78 87 61 28 59 77 90 74 9 27 41 22 39 67 72 54 85 74 90 7 61 90 62 4 93 72 96 94 29 23 95 74 93 30 23 29 3 1 41 80 65 33 2 98 86 89 25 76 65 40 38 15 13 96 74 97 81 40 16 99 76 96 32 80 86 59 2 99 84 84 39 65 27 76 78 84 16 2 96 59 16 41 28 13 89 22 4 42 91 41 33 87 55 81 29 36 28 6 47 97 97 85 33 41 93 15 85 89 98 98 43 23 73 4 56 29 89 46 65 38 59 68 47 9 93 9 23 39 16 93 98 74 65 75 15 56 93 12 2 81 2 23 97 47 91 15 93 35 16 63 8 53 91 33 99} + +do_execsql_test 1.14.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 90 {} {} {} {} {} {} {} 81 {} {} {} 81 21 21 {} {} {} {} 21 {} {} {} 21 12 {} 72 {} {} {} 12 {} 72 {} 12 {} {} 72 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} 73 {} {} {} {} {} 73 {} 23 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} 64 {} {} {} {} {} {} {} {} {} {} 55 {} {} {} {} {} {} 15 55 {} {} {} {} {} 55 {} 15 {} {} {} 16 {} 26 26 {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 47 {} {} {} {} {} 27 47 {} {} {} 98 {} {} {} {} {} 98 {} 98 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 29 {} {} {} {} {} 9 {} 29 29 {} {} {}} + +do_execsql_test 1.14.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 4 4 4 5 5 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 9 9 10 10 11 11 11 11 11 12 12 12 12 12 13 13 13 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 25 25 25 25 26 26 27 27 28 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 31 31 31 32 32 33 33 33 33 33 33 33 34 34 34 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 37 37 37 38 38 38 38 38 39 39 39 39 39 39 40 40 40 41 41 41 41 42 42 42 43 43 43 43 43 43 43 43 44 44 44 46 46 46 46 47 47 47 47 47 47 47 47 47 47} + +do_execsql_test 1.14.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 1 51 51 91 91 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 2 2 62 62 62 {} {} {} {} {} {} {} {} {} {} {} 13 13 43 43 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 25 75 75 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 66 66 66 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 37 37 87 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 58 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 39 39 89 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 74 32 31 84 91 74 3 93 84 74 31 12 90 31 22 74 64 43 64 64 90 74 22 43 90 1 30 62 22 31 31 30 74 64 64 1 40 33 50 11 81 42 40 13 50 81 40 13 13 50 33 52 24 41 81 34 41 34 2 30 2 81 82 53 33 10 33 33 81 34 41 10 81 30 81 4 3 3 23 94 3 61 80 84 94 3 91 91 72 3 63 30 91 94 94 72 91 73 91 84 84 33 41 1 33 84 73 73 91 20 41 84 33 33 84 33 41 84 20 21 44 22 90 22 81 81 74 93 93 93 81 21 83 44 44 21 21 21 13 21 21 34 11 34 73 74 2 60 2 34 2 34 74 60 23 2 2 2 11 91 60 62 73 74 70 51 65 74 93 65 70 34 70 93 93 93 62 35 44 43 12 35 41 43 44 44 41 80 54 72 43 41 43 91 12 80 80 35 33 12} + +do_execsql_test 1.14.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.14.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99} + +do_execsql_test 1.14.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.14.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9} + +do_execsql_test 1.14.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} + +do_execsql_test 1.14.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.14.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.14.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.14.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.14.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.14.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.14.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5} + +do_execsql_test 1.14.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.14.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99} + +do_execsql_test 1.14.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99} + +do_execsql_test 1.14.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39} + +do_execsql_test 1.14.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.14.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +} {201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7} + +do_execsql_test 1.14.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +} {201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {} 201 {}} + +do_execsql_test 1.14.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +} {20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {}} + +do_execsql_test 1.14.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +} {20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 21 {} 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {} 20 {}} + +do_execsql_test 1.15.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 95 95 84 84 84 84 84 84 84 84 83 83 83 83 83 83 83 83 83 82} + +do_execsql_test 1.15.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.15.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.15.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.15.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.15.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.15.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.15.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.15.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.15.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.15.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.15.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.15.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.15.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.15.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.15.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.15.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.15.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.15.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.15.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.15.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206} + +do_execsql_test 1.15.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.15.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.15.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.15.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.15.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.15.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 81 86 81 46 1 67 93 26 95 80 65 56 85 30 12 81 35 89 97 31 31 85 40 96 4 73 84 9 91 73 12 5 56 24 85 49 96 75 53 61 8 8 1 55 34 43 59 80 35 15 78 35 56 70 76 59 51 75 63 26 53 5 89 15 21 5 73 33 29 74 66 12 26 58 4 12 31 35 9 87 73 55 59 53 62 73 23 62 33 90 13 90 9 10 66 5 58 44 38 58 22 33 37 2 73 36 31 72 30 47 73 15 96 70 59 90 {} 7 21 83 {} 47 90 55 36 66 {} 50 {} 84 30 {} {} 34 77 74 {} 58 {} 13 {} 82 93 69 14 62 44 {} {} 30 {} 83 93 {} {} {} 84 {} {} {} {} 14 30 82 34 34 3 {} {} {} {} {} 84 {} {} {} 99 {} {} {} {} {} {} {} 58 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 61 {} {} {} 81 {} 91 {} {} {} {} {} {} {} {} {} 12 {} 72 {} {} {} 22 {} 82 {} 12 {} {} {} {} {} {} {} {} {} {} {} {} 43 {} {} {} {} {} 33 {} {} {} {} {} {} {} 33 {} {} {} {} {} {} {} {} 4 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 15 {} {} {} {} {} {} {} {} {} {} {} {} 16 {} 26 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 {} {} {} {} {} 47 {} {} {} {} {} {} {} {} {} {} 98 {} {} {} {} {} 58 {} 38 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 59 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 1 1 1 2 2 3 4 5 6 7 8 8 8 9 9 10 11 12 12 13 14 15 15 16 16 17 19 21 22 22 23 23 24 25 26 27 29 29 30 30 31 32 33 33 33 34 34 34 35 36 36 36 37 38 38 39 39 40 41 41 43 44 44 46 46 47 47 47 49 50 52 53 55 55 56 56 57 58 58 58 59 59 59 61 62 62 63 65 65 66 68 69 72 72 73 73 74 74 74 75 76 77 78 80 81 81 82 83 84 84 85 85 85 86 87 88 89 89 90 90 91 91 91 93 93 95 95 95 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 1 51 51 91 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 2 2 62 62 72 {} {} {} {} {} {} {} {} {} {} {} 13 13 43 43 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 25 75 75 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 66 66 66 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 37 37 87 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 58 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 39 39 89 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 74 32 31 84 1 14 53 3 84 44 2 93 91 32 52 34 25 33 95 65 61 35 3 74 81 2 91 33 13 23 93 12 5 96 46 82 91 44 2 73 43 84 22 95 82 63 12 75 15 93 35 85 16 33 94 67 83 47 65 43 85 64 95 6 96 33 26 26 65 27 74 74 55 33 25 57 47 7 56 17 37 55 4 58 8 47 15 95 56 17 37 55 6 58 58 26 86 27 56 39 99 77 75 16 58 9 78 58 36 15 46 {} 78 89 9 29 56 {} 26 97 {} 78 16 28 26 36 {} 59 39 99 27 78 {} {} {} 37 27 98 {} 88 8 {} 28 {} {} {} 49 37 29 {} 59 {} {} 47 {} 69 39 59 99 8 78 9 {} {} 58 49 {} {} {} {} 58 {} 38 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 59 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 0 0 0 0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27} + +do_execsql_test 1.15.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 0 0 0 0 90 40 30 80 20 90 60 70 80 90 41 41 41 41 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 2 2 2 2 2 62 12 32 22 42 2 72 12 22 2 72 72 23 23 23 23 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 74 74 74 74 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 65 65 65 65 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 26 26 26 26 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 97 97 97 97 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 38 38 38 38 38 68 78 8 28 98 78 58 98 8 88 8 99 99 99 99 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9} + +do_execsql_test 1.15.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98} + +do_execsql_test 1.15.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 10 20 30 30 30 40 50 60 70 80 1 1 1 1 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 2 2 2 2 2 2 2 12 12 12 22 22 32 42 52 62 62 3 3 3 3 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 4 4 4 4 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 5 5 5 5 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 6 6 6 6 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 7 7 7 7 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 8 8 8 8 8 8 8 28 38 38 58 58 58 58 68 78 9 9 9 9 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89} + +do_execsql_test 1.15.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 0 0 0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9} + +do_execsql_test 1.15.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.15.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.15.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.15.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.15.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.15.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.15.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.21.39.44.58.30.38.34.83.27.82.17.7.5 21.39.44.58.30.38.34.83.27.82.17.7.5 39.44.58.30.38.34.83.27.82.17.7.5 44.58.30.38.34.83.27.82.17.7.5 58.30.38.34.83.27.82.17.7.5 30.38.34.83.27.82.17.7.5 38.34.83.27.82.17.7.5 34.83.27.82.17.7.5 83.27.82.17.7.5 27.82.17.7.5} + +do_execsql_test 1.15.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 90.40.30.80.20.90.60.70.80.90.30.50.10.30 40.30.80.20.90.60.70.80.90.30.50.10.30 30.80.20.90.60.70.80.90.30.50.10.30 80.20.90.60.70.80.90.30.50.10.30 20.90.60.70.80.90.30.50.10.30 90.60.70.80.90.30.50.10.30 60.70.80.90.30.50.10.30 70.80.90.30.50.10.30 80.90.30.50.10.30 90.30.50.10.30 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.61.1.21.11.51.41.31.31.11.81.91.91.21 61.1.21.11.51.41.31.31.11.81.91.91.21 1.21.11.51.41.31.31.11.81.91.91.21 21.11.51.41.31.31.11.81.91.91.21 11.51.41.31.31.11.81.91.91.21 51.41.31.31.11.81.91.91.21 41.31.31.11.81.91.91.21 31.31.11.81.91.91.21 31.11.81.91.91.21 11.81.91.91.21 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 32.22.42.2.72.12.22.2.72.72.12.62.52.82 22.42.2.72.12.22.2.72.72.12.62.52.82 42.2.72.12.22.2.72.72.12.62.52.82 2.72.12.22.2.72.72.12.62.52.82 72.12.22.2.72.72.12.62.52.82 12.22.2.72.72.12.62.52.82 22.2.72.72.12.62.52.82 2.72.72.12.62.52.82 72.72.12.62.52.82 72.12.62.52.82 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 53.63.73.13.73.73.33.93.23.13.33.3.33.83 63.73.13.73.73.33.93.23.13.33.3.33.83 73.13.73.73.33.93.23.13.33.3.33.83 13.73.73.33.93.23.13.33.3.33.83 73.73.33.93.23.13.33.3.33.83 73.33.93.23.13.33.3.33.83 33.93.23.13.33.3.33.83 93.23.13.33.3.33.83 23.13.33.3.33.83 13.33.3.33.83 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 94.84.74.34.34.44.74.64.14.34.84.84.44.34 84.74.34.34.44.74.64.14.34.84.84.44.34 74.34.34.44.74.64.14.34.84.84.44.34 34.34.44.74.64.14.34.84.84.44.34 34.44.74.64.14.34.84.84.44.34 44.74.64.14.34.84.84.44.34 74.64.14.34.84.84.44.34 64.14.34.84.84.44.34 14.34.84.84.44.34 34.84.84.44.34 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.5.15.95.55.75.85.75.15.95.5 35.5.15.95.55.75.85.75.15.95.5 5.15.95.55.75.85.75.15.95.5 15.95.55.75.85.75.15.95.5 95.55.75.85.75.15.95.5 55.75.85.75.15.95.5 75.85.75.15.95.5 85.75.15.95.5 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 56.56.56.16.36.76.96.96.26.26.36.66.36.36 56.56.16.36.76.96.96.26.26.36.66.36.36 56.16.36.76.96.96.26.26.36.66.36.36 16.36.76.96.96.26.26.36.66.36.36 36.76.96.96.26.26.36.66.36.36 76.96.96.26.26.36.66.36.36 96.96.26.26.36.66.36.36 96.26.26.36.66.36.36 26.26.36.66.36.36 26.36.66.36.36 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 7.47.87.37.87.77.7.57.47.47.37.27.17.7 47.87.37.87.77.7.57.47.47.37.27.17.7 87.37.87.77.7.57.47.47.37.27.17.7 37.87.77.7.57.47.47.37.27.17.7 87.77.7.57.47.47.37.27.17.7 77.7.57.47.47.37.27.17.7 7.57.47.47.37.27.17.7 57.47.47.37.27.17.7 47.47.37.27.17.7 47.37.27.17.7 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 78.8.28.98.78.58.98.8.88.8.58.58.58.38 8.28.98.78.58.98.8.88.8.58.58.58.38 28.98.78.58.98.8.88.8.58.58.58.38 98.78.58.98.8.88.8.58.58.58.38 78.58.98.8.88.8.58.58.58.38 58.98.8.88.8.58.58.58.38 98.8.88.8.58.58.58.38 8.88.8.58.58.58.38 88.8.58.58.58.38 8.58.58.58.38 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.9.79.49.59.29.59.19.39.9.9.99.69.39 9.79.49.59.29.59.19.39.9.9.99.69.39 79.49.59.29.59.19.39.9.9.99.69.39 49.59.29.59.19.39.9.9.99.69.39 59.29.59.19.39.9.9.99.69.39 29.59.19.39.9.9.99.69.39 59.19.39.9.9.99.69.39 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39} + +do_execsql_test 1.15.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 94.95.95.95.96.96.96.97.97.98.98.99.99.99 95.95.95.96.96.96.97.97.98.98.99.99.99 95.95.96.96.96.97.97.98.98.99.99.99 95.96.96.96.97.97.98.98.99.99.99 96.96.96.97.97.98.98.99.99.99 96.96.97.97.98.98.99.99.99 96.97.97.98.98.99.99.99 97.97.98.98.99.99.99 97.98.98.99.99.99 98.98.99.99.99} + +do_execsql_test 1.15.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 10.20.30.30.30.40.50.60.70.80.80.90.90.90 20.30.30.30.40.50.60.70.80.80.90.90.90 30.30.30.40.50.60.70.80.80.90.90.90 30.30.40.50.60.70.80.80.90.90.90 30.40.50.60.70.80.80.90.90.90 40.50.60.70.80.80.90.90.90 50.60.70.80.80.90.90.90 60.70.80.80.90.90.90 70.80.80.90.90.90 80.80.90.90.90 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 41.41.41.51.61.61.81.81.81.91.91.91.91.91 41.41.51.61.61.81.81.81.91.91.91.91.91 41.51.61.61.81.81.81.91.91.91.91.91 51.61.61.81.81.81.91.91.91.91.91 61.61.81.81.81.91.91.91.91.91 61.81.81.81.91.91.91.91.91 81.81.81.91.91.91.91.91 81.81.91.91.91.91.91 81.91.91.91.91.91 91.91.91.91.91 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 12.12.12.22.22.32.42.52.62.62.72.72.72.82 12.12.22.22.32.42.52.62.62.72.72.72.82 12.22.22.32.42.52.62.62.72.72.72.82 22.22.32.42.52.62.62.72.72.72.82 22.32.42.52.62.62.72.72.72.82 32.42.52.62.62.72.72.72.82 42.52.62.62.72.72.72.82 52.62.62.72.72.72.82 62.62.72.72.72.82 62.72.72.72.82 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.43.43.53.63.73.73.73.83.93.93.93 33.43.43.53.63.73.73.73.83.93.93.93 43.43.53.63.73.73.73.83.93.93.93 43.53.63.73.73.73.83.93.93.93 53.63.73.73.73.83.93.93.93 63.73.73.73.83.93.93.93 73.73.73.83.93.93.93 73.73.83.93.93.93 73.83.93.93.93 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 44.44.54.64.74.74.74.74.74.84.84.84.84.94 44.54.64.74.74.74.74.74.84.84.84.84.94 54.64.74.74.74.74.74.84.84.84.84.94 64.74.74.74.74.74.84.84.84.84.94 74.74.74.74.74.84.84.84.84.94 74.74.74.74.84.84.84.84.94 74.74.74.84.84.84.84.94 74.74.84.84.84.84.94 74.84.84.84.84.94 84.84.84.84.94 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 55.55.65.65.65.75.75.75.85.85.85.95.95.95 55.65.65.65.75.75.75.85.85.85.95.95.95 65.65.65.75.75.75.85.85.85.95.95.95 65.65.75.75.75.85.85.85.95.95.95 65.75.75.75.85.85.85.95.95.95 75.75.75.85.85.85.95.95.95 75.75.85.85.85.95.95.95 75.85.85.85.95.95.95 85.85.85.95.95.95 85.85.95.95.95 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.46.46.56.56.56.66.76.86.96.96.96 36.46.46.56.56.56.66.76.86.96.96.96 46.46.56.56.56.66.76.86.96.96.96 46.56.56.56.66.76.86.96.96.96 56.56.56.66.76.86.96.96.96 56.56.66.76.86.96.96.96 56.66.76.86.96.96.96 66.76.86.96.96.96 76.86.96.96.96 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 37.37.47.47.47.47.57.67.77.77.87.87.97.97 37.47.47.47.47.57.67.77.77.87.87.97.97 47.47.47.47.57.67.77.77.87.87.97.97 47.47.47.57.67.77.77.87.87.97.97 47.47.57.67.77.77.87.87.97.97 47.57.67.77.77.87.87.97.97 57.67.77.77.87.87.97.97 67.77.77.87.87.97.97 77.77.87.87.97.97 77.87.87.97.97 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.28.38.38.58.58.58.58.68.78.78.88.98.98 28.38.38.58.58.58.58.68.78.78.88.98.98 38.38.58.58.58.58.68.78.78.88.98.98 38.58.58.58.58.68.78.78.88.98.98 58.58.58.58.68.78.78.88.98.98 58.58.58.68.78.78.88.98.98 58.58.68.78.78.88.98.98 58.68.78.78.88.98.98 68.78.78.88.98.98 78.78.88.98.98 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.49.59.59.59.59.69.79.89.89.89.99.99.99 49.59.59.59.59.69.79.89.89.89.99.99.99 59.59.59.59.69.79.89.89.89.99.99.99 59.59.59.69.79.89.89.89.99.99.99 59.59.69.79.89.89.89.99.99.99 59.69.79.89.89.89.99.99.99 69.79.89.89.89.99.99.99 79.89.89.89.99.99.99 89.89.89.99.99.99 89.89.99.99.99} + +do_execsql_test 1.15.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.9.79.49.59.29.59.19.39.9.9.99.69.39 9.79.49.59.29.59.19.39.9.9.99.69.39 79.49.59.29.59.19.39.9.9.99.69.39 49.59.29.59.19.39.9.9.99.69.39 59.29.59.19.39.9.9.99.69.39 29.59.19.39.9.9.99.69.39 59.19.39.9.9.99.69.39 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39} + +do_execsql_test 1.15.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.15.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) +} {201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 200 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 199 74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 198 74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 197 99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 196 99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 195 33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 194 33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 193 89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 192 89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 191 96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 190 96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 189 38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 188 38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 187 39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 186 39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 185 91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 184 91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 183 6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 182 6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 181 97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 180 97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 179 46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 178 46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 177 54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 176 54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 175 8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 174 8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 173 29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 172 29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 171 84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 170 84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 169 23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 168 23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 167 16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 166 16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 165 65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 164 65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 163 47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 162 47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 161 86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 160 86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 159 61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 158 61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 157 85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 156 85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 155 85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 154 85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 153 59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 152 59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 151 32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 150 32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 149 3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 148 3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 147 22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 146 22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 145 55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 144 55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 143 28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 142 28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 141 25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 140 25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 139 1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 138 1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 137 40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 136 40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 135 56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 134 56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 133 75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 132 75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 131 89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 130 89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 129 76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 128 76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 127 4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 126 4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 125 42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 124 42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 123 78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 122 78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 121 29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 120 29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 119 63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 118 63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 117 87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 116 87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 115 80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 114 80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 113 72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 112 72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 111 9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 110 9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 109 73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 108 73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 107 65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 106 65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 105 58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 104 58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 103 98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 102 98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 101 21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 100 21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 99 65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 98 65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 97 5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 96 5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 95 11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 94 11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 93 87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 92 87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 91 12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 90 12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 89 20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 88 20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 87 31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 86 31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 85 95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 84 95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 83 73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 82 73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 81 88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 80 88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 79 8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 78 8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 77 49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 76 49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 75 90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 74 90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 73 96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 72 96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 71 55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 70 55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 69 77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 68 77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 67 2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 66 2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 65 85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 64 85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 63 74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 62 74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 61 70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 60 70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 59 19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 58 19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 57 26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 56 26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 55 47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 54 47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 53 90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 52 90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 51 58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 50 58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 49 9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 48 9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 47 72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 46 72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 45 33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 44 33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 43 75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 42 75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 41 81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 40 81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 39 23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 38 23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 37 13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 36 13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 35 14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 34 14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 33 91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 32 91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 31 91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 30 91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 29 15.36.3.69.52.50.10.33.39.58.38.83.82.7 28 15.36.3.69.52.50.10.33.39.58.38.83.82.7 27 36.3.69.52.50.10.33.39.58.38.83.82.7 26 36.3.69.52.50.10.33.39.58.38.83.82.7 25 3.69.52.50.10.33.39.58.38.83.82.7 24 3.69.52.50.10.33.39.58.38.83.82.7 23 69.52.50.10.33.39.58.38.83.82.7 22 69.52.50.10.33.39.58.38.83.82.7 21 52.50.10.33.39.58.38.83.82.7 20 52.50.10.33.39.58.38.83.82.7 19 50.10.33.39.58.38.83.82.7 18 50.10.33.39.58.38.83.82.7 17 10.33.39.58.38.83.82.7 16 10.33.39.58.38.83.82.7 15 33.39.58.38.83.82.7 14 33.39.58.38.83.82.7 13 39.58.38.83.82.7 12 39.58.38.83.82.7 11 58.38.83.82.7 10 58.38.83.82.7 9 38.83.82.7 8 38.83.82.7 7 83.82.7 6 83.82.7 5 82.7} + +do_execsql_test 1.15.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) +} {201 {} 201 {} 201 {} 201 {} 201 {} 200 {} 199 {} 198 {} 197 {} 196 {} 195 {} 194 {} 193 {} 192 {} 191 {} 190 {} 189 {} 188 {} 187 {} 186 {} 185 {} 184 {} 183 {} 182 {} 181 {} 180 {} 179 {} 178 {} 177 {} 176 {} 175 {} 174 {} 173 {} 172 {} 171 {} 170 {} 169 {} 168 {} 167 {} 166 {} 165 {} 164 {} 163 {} 162 {} 161 {} 160 {} 159 {} 158 {} 157 {} 156 {} 155 {} 154 {} 153 {} 152 {} 151 {} 150 {} 149 {} 148 {} 147 {} 146 {} 145 {} 144 {} 143 {} 142 {} 141 {} 140 {} 139 {} 138 {} 137 {} 136 {} 135 {} 134 {} 133 {} 132 {} 131 {} 130 {} 129 {} 128 {} 127 {} 126 {} 125 {} 124 {} 123 {} 122 {} 121 {} 120 {} 119 {} 118 {} 117 {} 116 {} 115 {} 114 {} 113 {} 112 {} 111 {} 110 {} 109 {} 108 {} 107 {} 106 {} 105 {} 104 {} 103 {} 102 {} 101 {} 100 {} 99 {} 98 {} 97 {} 96 {} 95 {} 94 {} 93 {} 92 {} 91 {} 90 {} 89 {} 88 {} 87 {} 86 {} 85 {} 84 {} 83 {} 82 {} 81 {} 80 {} 79 {} 78 {} 77 {} 76 {} 75 {} 74 {} 73 {} 72 {} 71 {} 70 {} 69 {} 68 {} 67 {} 66 {} 65 {} 64 {} 63 {} 62 {} 61 {} 60 {} 59 {} 58 {} 57 {} 56 {} 55 {} 54 {} 53 {} 52 {} 51 {} 50 {} 49 {} 48 {} 47 {} 46 {} 45 {} 44 {} 43 {} 42 {} 41 {} 40 {} 39 {} 38 {} 37 {} 36 {} 35 {} 34 {} 33 {} 32 {} 31 {} 30 {} 29 {} 28 {} 27 {} 26 {} 25 {} 24 {} 23 {} 22 {} 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {}} + +do_execsql_test 1.15.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) +} {20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 21 {} 21 {} 21 {} 21 {} 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {}} + +do_execsql_test 1.15.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) +} {20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 19 6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 18 29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 17 47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 16 59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 15 28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 14 75.78.72.98.87.73.96.74.90.75.91.69.39.7 13 78.72.98.87.73.96.74.90.75.91.69.39.7 12 72.98.87.73.96.74.90.75.91.69.39.7 11 98.87.73.96.74.90.75.91.69.39.7 10 87.73.96.74.90.75.91.69.39.7 9 73.96.74.90.75.91.69.39.7 8 96.74.90.75.91.69.39.7 7 74.90.75.91.69.39.7 6 90.75.91.69.39.7 5 75.91.69.39.7 21 {} 21 {} 21 {} 21 {} 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 19 96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 18 97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 17 84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 16 86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 15 32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 14 25.89.29.9.21.12.88.55.70.58.81.91.52.58 13 89.29.9.21.12.88.55.70.58.81.91.52.58 12 29.9.21.12.88.55.70.58.81.91.52.58 11 9.21.12.88.55.70.58.81.91.52.58 10 21.12.88.55.70.58.81.91.52.58 9 12.88.55.70.58.81.91.52.58 8 88.55.70.58.81.91.52.58 7 55.70.58.81.91.52.58 6 70.58.81.91.52.58 5 58.81.91.52.58 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 19 38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 18 46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 17 23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 16 61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 15 3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 14 1.76.63.73.65.20.8.77.19.9.23.15.50.38 13 76.63.73.65.20.8.77.19.9.23.15.50.38 12 63.73.65.20.8.77.19.9.23.15.50.38 11 73.65.20.8.77.19.9.23.15.50.38 10 65.20.8.77.19.9.23.15.50.38 9 20.8.77.19.9.23.15.50.38 8 8.77.19.9.23.15.50.38 7 77.19.9.23.15.50.38 6 19.9.23.15.50.38 5 9.23.15.50.38 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 19 39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 18 54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 17 16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 16 85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 15 22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 14 40.4.87.65.5.31.49.2.26.72.13.36.10.83 13 4.87.65.5.31.49.2.26.72.13.36.10.83 12 87.65.5.31.49.2.26.72.13.36.10.83 11 65.5.31.49.2.26.72.13.36.10.83 10 5.31.49.2.26.72.13.36.10.83 9 31.49.2.26.72.13.36.10.83 8 49.2.26.72.13.36.10.83 7 2.26.72.13.36.10.83 6 26.72.13.36.10.83 5 72.13.36.10.83 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 19 91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 18 8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 17 65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 16 85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 15 55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 14 56.42.80.58.11.95.90.85.47.33.14.3.33.82 13 42.80.58.11.95.90.85.47.33.14.3.33.82 12 80.58.11.95.90.85.47.33.14.3.33.82 11 58.11.95.90.85.47.33.14.3.33.82 10 11.95.90.85.47.33.14.3.33.82 9 95.90.85.47.33.14.3.33.82 8 90.85.47.33.14.3.33.82 7 85.47.33.14.3.33.82 6 47.33.14.3.33.82 5 33.14.3.33.82 20 {} 20 {} 20 {} 20 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {}} + +do_execsql_test 1.16.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 95 95 84 84 84 84 84 84 84 84 83 83 83 83 83 83 83 83 83 82 82 17 7 5} + +do_execsql_test 1.16.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.16.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.16.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.16.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.16.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.16.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.16.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.16.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.16.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.16.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.16.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.16.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.16.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.16.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.16.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.16.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.16.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.16.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.16.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.16.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206} + +do_execsql_test 1.16.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 232 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.16.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.16.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276} + +do_execsql_test 1.16.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229} + +do_execsql_test 1.16.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {1 76 78 33 11 108 52 83 79 65 26 70 103 80 36 116 51 52 128 117 71 63 84 109 78 147 88 121 106 124 85 107 171 150 80 171 120 109 158 87 168 173 162 156 195 198 177 124 121 134 141 210 157 132 161 218 226 191 179 138 214 212 172 173 229 240 187 210 227 228 223 225 179 182 231 207 209 212 239 234 213 234 269 196 271 235 250 223 232 229 280 44 28 105 41 99 92 72 55 109 120 119 50 124 96 59 124 110 57 130 103 74 87 48 105 136 131 133 92 109 57 146 113 74 150 87 110 65 110 145 161 156 114 111 136 147 173 124 132 101 154 167 190 161 110 102 123 169 140 111 180 119 160 197 152 146 147 132 213 193 200 136 175 188 187 208 211 144 223 196 170 202 163 184 195 200 163 191 252 235 243 172 187 202 179 261 263 206 189 276 181 274 249 221 210 229 279 224 216 207 206} + +do_execsql_test 1.16.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 41 74 23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5} + +do_execsql_test 1.16.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.16.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 1 2 2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99} + +do_execsql_test 1.16.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 10 20 30 30 30 40 50 60 70 80 80 90 90 90 1 1 11 11 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 2 2 2 12 12 12 22 22 32 42 52 62 62 72 72 72 82 3 3 13 13 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 4 14 24 34 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 5 5 15 15 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 6 16 16 16 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 7 7 7 17 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 8 8 8 28 38 38 58 58 58 58 68 78 78 88 98 98 9 9 9 19 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99} + +do_execsql_test 1.16.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 90 40 30 80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39} + +do_execsql_test 1.16.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.16.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.16.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.16.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.16.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.16.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.16.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0.74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.21.39.44.58.30.38.34.83.27.82.17.7.5 21.39.44.58.30.38.34.83.27.82.17.7.5 39.44.58.30.38.34.83.27.82.17.7.5 44.58.30.38.34.83.27.82.17.7.5 58.30.38.34.83.27.82.17.7.5 30.38.34.83.27.82.17.7.5 38.34.83.27.82.17.7.5 34.83.27.82.17.7.5 83.27.82.17.7.5 27.82.17.7.5 82.17.7.5 17.7.5 7.5 5} + +do_execsql_test 1.16.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30 90.40.30.80.20.90.60.70.80.90.30.50.10.30 40.30.80.20.90.60.70.80.90.30.50.10.30 30.80.20.90.60.70.80.90.30.50.10.30 80.20.90.60.70.80.90.30.50.10.30 20.90.60.70.80.90.30.50.10.30 90.60.70.80.90.30.50.10.30 60.70.80.90.30.50.10.30 70.80.90.30.50.10.30 80.90.30.50.10.30 90.30.50.10.30 30.50.10.30 50.10.30 10.30 30 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.61.1.21.11.51.41.31.31.11.81.91.91.21 61.1.21.11.51.41.31.31.11.81.91.91.21 1.21.11.51.41.31.31.11.81.91.91.21 21.11.51.41.31.31.11.81.91.91.21 11.51.41.31.31.11.81.91.91.21 51.41.31.31.11.81.91.91.21 41.31.31.11.81.91.91.21 31.31.11.81.91.91.21 31.11.81.91.91.21 11.81.91.91.21 81.91.91.21 91.91.21 91.21 21 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 12.32.22.42.2.72.12.22.2.72.72.12.62.52.82 32.22.42.2.72.12.22.2.72.72.12.62.52.82 22.42.2.72.12.22.2.72.72.12.62.52.82 42.2.72.12.22.2.72.72.12.62.52.82 2.72.12.22.2.72.72.12.62.52.82 72.12.22.2.72.72.12.62.52.82 12.22.2.72.72.12.62.52.82 22.2.72.72.12.62.52.82 2.72.72.12.62.52.82 72.72.12.62.52.82 72.12.62.52.82 12.62.52.82 62.52.82 52.82 82 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 53.63.73.13.73.73.33.93.23.13.33.3.33.83 63.73.13.73.73.33.93.23.13.33.3.33.83 73.13.73.73.33.93.23.13.33.3.33.83 13.73.73.33.93.23.13.33.3.33.83 73.73.33.93.23.13.33.3.33.83 73.33.93.23.13.33.3.33.83 33.93.23.13.33.3.33.83 93.23.13.33.3.33.83 23.13.33.3.33.83 13.33.3.33.83 33.3.33.83 3.33.83 33.83 83 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 94.84.74.34.34.44.74.64.14.34.84.84.44.34 84.74.34.34.44.74.64.14.34.84.84.44.34 74.34.34.44.74.64.14.34.84.84.44.34 34.34.44.74.64.14.34.84.84.44.34 34.44.74.64.14.34.84.84.44.34 44.74.64.14.34.84.84.44.34 74.64.14.34.84.84.44.34 64.14.34.84.84.44.34 14.34.84.84.44.34 34.84.84.44.34 84.84.44.34 84.44.34 44.34 34 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.5.15.95.55.75.85.75.15.95.5 35.5.15.95.55.75.85.75.15.95.5 5.15.95.55.75.85.75.15.95.5 15.95.55.75.85.75.15.95.5 95.55.75.85.75.15.95.5 55.75.85.75.15.95.5 75.85.75.15.95.5 85.75.15.95.5 75.15.95.5 15.95.5 95.5 5 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 56.56.56.16.36.76.96.96.26.26.36.66.36.36 56.56.16.36.76.96.96.26.26.36.66.36.36 56.16.36.76.96.96.26.26.36.66.36.36 16.36.76.96.96.26.26.36.66.36.36 36.76.96.96.26.26.36.66.36.36 76.96.96.26.26.36.66.36.36 96.96.26.26.36.66.36.36 96.26.26.36.66.36.36 26.26.36.66.36.36 26.36.66.36.36 36.66.36.36 66.36.36 36.36 36 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 7.47.87.37.87.77.7.57.47.47.37.27.17.7 47.87.37.87.77.7.57.47.47.37.27.17.7 87.37.87.77.7.57.47.47.37.27.17.7 37.87.77.7.57.47.47.37.27.17.7 87.77.7.57.47.47.37.27.17.7 77.7.57.47.47.37.27.17.7 7.57.47.47.37.27.17.7 57.47.47.37.27.17.7 47.47.37.27.17.7 47.37.27.17.7 37.27.17.7 27.17.7 17.7 7 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 68.78.8.28.98.78.58.98.8.88.8.58.58.58.38 78.8.28.98.78.58.98.8.88.8.58.58.58.38 8.28.98.78.58.98.8.88.8.58.58.58.38 28.98.78.58.98.8.88.8.58.58.58.38 98.78.58.98.8.88.8.58.58.58.38 78.58.98.8.88.8.58.58.58.38 58.98.8.88.8.58.58.58.38 98.8.88.8.58.58.58.38 8.88.8.58.58.58.38 88.8.58.58.58.38 8.58.58.58.38 58.58.58.38 58.58.38 58.38 38 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.9.79.49.59.29.59.19.39.9.9.99.69.39 9.79.49.59.29.59.19.39.9.9.99.69.39 79.49.59.29.59.19.39.9.9.99.69.39 49.59.29.59.19.39.9.9.99.69.39 59.29.59.19.39.9.9.99.69.39 29.59.19.39.9.9.99.69.39 59.19.39.9.9.99.69.39 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39 9.99.69.39 99.69.39 69.39 39} + +do_execsql_test 1.16.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 1.1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 1.2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 94.95.95.95.96.96.96.97.97.98.98.99.99.99 95.95.95.96.96.96.97.97.98.98.99.99.99 95.95.96.96.96.97.97.98.98.99.99.99 95.96.96.96.97.97.98.98.99.99.99 96.96.96.97.97.98.98.99.99.99 96.96.97.97.98.98.99.99.99 96.97.97.98.98.99.99.99 97.97.98.98.99.99.99 97.98.98.99.99.99 98.98.99.99.99 98.99.99.99 99.99.99 99.99 99} + +do_execsql_test 1.16.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.10.20.30.30.30.40.50.60.70.80.80.90.90.90 10.20.30.30.30.40.50.60.70.80.80.90.90.90 20.30.30.30.40.50.60.70.80.80.90.90.90 30.30.30.40.50.60.70.80.80.90.90.90 30.30.40.50.60.70.80.80.90.90.90 30.40.50.60.70.80.80.90.90.90 40.50.60.70.80.80.90.90.90 50.60.70.80.80.90.90.90 60.70.80.80.90.90.90 70.80.80.90.90.90 80.80.90.90.90 80.90.90.90 90.90.90 90.90 90 1.1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 1.11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 11.11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 11.21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 41.41.41.51.61.61.81.81.81.91.91.91.91.91 41.41.51.61.61.81.81.81.91.91.91.91.91 41.51.61.61.81.81.81.91.91.91.91.91 51.61.61.81.81.81.91.91.91.91.91 61.61.81.81.81.91.91.91.91.91 61.81.81.81.91.91.91.91.91 81.81.81.91.91.91.91.91 81.81.91.91.91.91.91 81.91.91.91.91.91 91.91.91.91.91 91.91.91.91 91.91.91 91.91 91 2.2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 2.12.12.12.22.22.32.42.52.62.62.72.72.72.82 12.12.12.22.22.32.42.52.62.62.72.72.72.82 12.12.22.22.32.42.52.62.62.72.72.72.82 12.22.22.32.42.52.62.62.72.72.72.82 22.22.32.42.52.62.62.72.72.72.82 22.32.42.52.62.62.72.72.72.82 32.42.52.62.62.72.72.72.82 42.52.62.62.72.72.72.82 52.62.62.72.72.72.82 62.62.72.72.72.82 62.72.72.72.82 72.72.72.82 72.72.82 72.82 82 3.3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 3.13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 13.13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 13.23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.43.43.53.63.73.73.73.83.93.93.93 33.43.43.53.63.73.73.73.83.93.93.93 43.43.53.63.73.73.73.83.93.93.93 43.53.63.73.73.73.83.93.93.93 53.63.73.73.73.83.93.93.93 63.73.73.73.83.93.93.93 73.73.73.83.93.93.93 73.73.83.93.93.93 73.83.93.93.93 83.93.93.93 93.93.93 93.93 93 4.14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 14.24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 24.34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 44.44.54.64.74.74.74.74.74.84.84.84.84.94 44.54.64.74.74.74.74.74.84.84.84.84.94 54.64.74.74.74.74.74.84.84.84.84.94 64.74.74.74.74.74.84.84.84.84.94 74.74.74.74.74.84.84.84.84.94 74.74.74.74.84.84.84.84.94 74.74.74.84.84.84.84.94 74.74.84.84.84.84.94 74.84.84.84.84.94 84.84.84.84.94 84.84.84.94 84.84.94 84.94 94 5.5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 5.15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 55.55.65.65.65.75.75.75.85.85.85.95.95.95 55.65.65.65.75.75.75.85.85.85.95.95.95 65.65.65.75.75.75.85.85.85.95.95.95 65.65.75.75.75.85.85.85.95.95.95 65.75.75.75.85.85.85.95.95.95 75.75.75.85.85.85.95.95.95 75.75.85.85.85.95.95.95 75.85.85.85.95.95.95 85.85.85.95.95.95 85.85.95.95.95 85.95.95.95 95.95.95 95.95 95 6.16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 16.26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.46.46.56.56.56.66.76.86.96.96.96 36.46.46.56.56.56.66.76.86.96.96.96 46.46.56.56.56.66.76.86.96.96.96 46.56.56.56.66.76.86.96.96.96 56.56.56.66.76.86.96.96.96 56.56.66.76.86.96.96.96 56.66.76.86.96.96.96 66.76.86.96.96.96 76.86.96.96.96 86.96.96.96 96.96.96 96.96 96 7.7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 7.17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 17.27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 37.37.47.47.47.47.57.67.77.77.87.87.97.97 37.47.47.47.47.57.67.77.77.87.87.97.97 47.47.47.47.57.67.77.77.87.87.97.97 47.47.47.57.67.77.77.87.87.97.97 47.47.57.67.77.77.87.87.97.97 47.57.67.77.77.87.87.97.97 57.67.77.77.87.87.97.97 67.77.77.87.87.97.97 77.77.87.87.97.97 77.87.87.97.97 87.87.97.97 87.97.97 97.97 97 8.8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.8.28.38.38.58.58.58.58.68.78.78.88.98.98 8.28.38.38.58.58.58.58.68.78.78.88.98.98 28.38.38.58.58.58.58.68.78.78.88.98.98 38.38.58.58.58.58.68.78.78.88.98.98 38.58.58.58.58.68.78.78.88.98.98 58.58.58.58.68.78.78.88.98.98 58.58.58.68.78.78.88.98.98 58.58.68.78.78.88.98.98 58.68.78.78.88.98.98 68.78.78.88.98.98 78.78.88.98.98 78.88.98.98 88.98.98 98.98 98 9.9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 9.19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 19.29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.49.59.59.59.59.69.79.89.89.89.99.99.99 49.59.59.59.59.69.79.89.89.89.99.99.99 59.59.59.59.69.79.89.89.89.99.99.99 59.59.59.69.79.89.89.89.99.99.99 59.59.69.79.89.89.89.99.99.99 59.69.79.89.89.89.99.99.99 69.79.89.89.89.99.99.99 79.89.89.89.99.99.99 89.89.89.99.99.99 89.89.99.99.99 89.99.99.99 99.99.99 99.99 99} + +do_execsql_test 1.16.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM t2 +} {0.90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 40.30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.9.79.49.59.29.59.19.39.9.9.99.69.39 9.79.49.59.29.59.19.39.9.9.99.69.39 79.49.59.29.59.19.39.9.9.99.69.39 49.59.29.59.19.39.9.9.99.69.39 59.29.59.19.39.9.9.99.69.39 29.59.19.39.9.9.99.69.39 59.19.39.9.9.99.69.39 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39 9.99.69.39 99.69.39 69.39 39} + +do_execsql_test 1.16.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) FROM t2 +} {0 74 74 26 2 96 38 68 62 46 6 46 78 54 8 84 16 16 86 74 24 12 32 56 22 90 28 56 40 56 16 36 98 76 4 94 42 30 78 2 80 84 72 58 96 98 74 12 8 20 22 88 34 8 34 90 96 60 44 2 74 70 26 26 80 90 36 58 72 72 66 64 12 14 62 36 34 36 58 52 30 50 84 10 84 44 58 30 38 34 82 41 23 99 33 89 81 59 39 91 99 97 27 97 67 29 93 77 23 93 65 35 47 7 61 91 85 85 43 59 3 91 55 15 89 25 47 1 43 75 89 81 33 29 53 63 87 37 41 9 61 73 95 65 13 1 21 65 35 5 73 11 51 87 41 31 31 15 95 73 79 11 49 59 55 75 77 7 85 57 29 59 19 39 47 47 9 33 93 75 81 9 23 37 13 91 91 33 15 99 3 95 69 33 21 39 83 27 17 7 5} + +do_execsql_test 1.16.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +} {201 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 200 74.74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 199 74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 198 74.99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 197 99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 196 99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 195 33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 194 33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 193 89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 192 89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 191 96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 190 96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 189 38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 188 38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 187 39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 186 39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 185 91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 184 91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 183 6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 182 6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 181 97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 180 97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 179 46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 178 46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 177 54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 176 54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 175 8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 174 8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 173 29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 172 29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 171 84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 170 84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 169 23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 168 23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 167 16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 166 16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 165 65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 164 65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 163 47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 162 47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 161 86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 160 86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 159 61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 158 61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 157 85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 156 85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 155 85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 154 85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 153 59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 152 59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 151 32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 150 32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 149 3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 148 3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 147 22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 146 22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 145 55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 144 55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 143 28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 142 28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 141 25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 140 25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 139 1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 138 1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 137 40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 136 40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 135 56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 134 56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 133 75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 132 75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 131 89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 130 89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 129 76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 128 76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 127 4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 126 4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 125 42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 124 42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 123 78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 122 78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 121 29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 120 29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 119 63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 118 63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 117 87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 116 87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 115 80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 114 80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 113 72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 112 72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 111 9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 110 9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 109 73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 108 73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 107 65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 106 65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 105 58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 104 58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 103 98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 102 98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 101 21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 100 21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 99 65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 98 65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 97 5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 96 5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 95 11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 94 11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 93 87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 92 87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 91 12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 90 12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 89 20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 88 20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 87 31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 86 31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 85 95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 84 95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 83 73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 82 73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 81 88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 80 88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 79 8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 78 8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 77 49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 76 49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 75 90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 74 90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 73 96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 72 96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 71 55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 70 55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 69 77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 68 77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 67 2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 66 2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 65 85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 64 85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 63 74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 62 74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 61 70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 60 70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 59 19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 58 19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 57 26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 56 26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 55 47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 54 47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 53 90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 52 90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 51 58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 50 58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 49 9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 48 9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 47 72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 46 72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 45 33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 44 33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 43 75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 42 75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 41 81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 40 81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 39 23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 38 23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 37 13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 36 13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 35 14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 34 14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 33 91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 32 91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 31 91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 30 91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 29 15.36.3.69.52.50.10.33.39.58.38.83.82.7 28 15.36.3.69.52.50.10.33.39.58.38.83.82.7 27 36.3.69.52.50.10.33.39.58.38.83.82.7 26 36.3.69.52.50.10.33.39.58.38.83.82.7 25 3.69.52.50.10.33.39.58.38.83.82.7 24 3.69.52.50.10.33.39.58.38.83.82.7 23 69.52.50.10.33.39.58.38.83.82.7 22 69.52.50.10.33.39.58.38.83.82.7 21 52.50.10.33.39.58.38.83.82.7 20 52.50.10.33.39.58.38.83.82.7 19 50.10.33.39.58.38.83.82.7 18 50.10.33.39.58.38.83.82.7 17 10.33.39.58.38.83.82.7 16 10.33.39.58.38.83.82.7 15 33.39.58.38.83.82.7 14 33.39.58.38.83.82.7 13 39.58.38.83.82.7 12 39.58.38.83.82.7 11 58.38.83.82.7 10 58.38.83.82.7 9 38.83.82.7 8 38.83.82.7 7 83.82.7 6 83.82.7 5 82.7 4 82.7 3 7 2 7 1 {}} + +do_execsql_test 1.16.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +} {201 {} 200 {} 199 {} 198 {} 197 {} 196 {} 195 {} 194 {} 193 {} 192 {} 191 {} 190 {} 189 {} 188 {} 187 {} 186 {} 185 {} 184 {} 183 {} 182 {} 181 {} 180 {} 179 {} 178 {} 177 {} 176 {} 175 {} 174 {} 173 {} 172 {} 171 {} 170 {} 169 {} 168 {} 167 {} 166 {} 165 {} 164 {} 163 {} 162 {} 161 {} 160 {} 159 {} 158 {} 157 {} 156 {} 155 {} 154 {} 153 {} 152 {} 151 {} 150 {} 149 {} 148 {} 147 {} 146 {} 145 {} 144 {} 143 {} 142 {} 141 {} 140 {} 139 {} 138 {} 137 {} 136 {} 135 {} 134 {} 133 {} 132 {} 131 {} 130 {} 129 {} 128 {} 127 {} 126 {} 125 {} 124 {} 123 {} 122 {} 121 {} 120 {} 119 {} 118 {} 117 {} 116 {} 115 {} 114 {} 113 {} 112 {} 111 {} 110 {} 109 {} 108 {} 107 {} 106 {} 105 {} 104 {} 103 {} 102 {} 101 {} 100 {} 99 {} 98 {} 97 {} 96 {} 95 {} 94 {} 93 {} 92 {} 91 {} 90 {} 89 {} 88 {} 87 {} 86 {} 85 {} 84 {} 83 {} 82 {} 81 {} 80 {} 79 {} 78 {} 77 {} 76 {} 75 {} 74 {} 73 {} 72 {} 71 {} 70 {} 69 {} 68 {} 67 {} 66 {} 65 {} 64 {} 63 {} 62 {} 61 {} 60 {} 59 {} 58 {} 57 {} 56 {} 55 {} 54 {} 53 {} 52 {} 51 {} 50 {} 49 {} 48 {} 47 {} 46 {} 45 {} 44 {} 43 {} 42 {} 41 {} 40 {} 39 {} 38 {} 37 {} 36 {} 35 {} 34 {} 33 {} 32 {} 31 {} 30 {} 29 {} 28 {} 27 {} 26 {} 25 {} 24 {} 23 {} 22 {} 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.16.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +} {20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.16.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +} {20 89.6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 19 6.29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 18 29.47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 17 47.59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 16 59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 15 28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 14 75.78.72.98.87.73.96.74.90.75.91.69.39.7 13 78.72.98.87.73.96.74.90.75.91.69.39.7 12 72.98.87.73.96.74.90.75.91.69.39.7 11 98.87.73.96.74.90.75.91.69.39.7 10 87.73.96.74.90.75.91.69.39.7 9 73.96.74.90.75.91.69.39.7 8 96.74.90.75.91.69.39.7 7 74.90.75.91.69.39.7 6 90.75.91.69.39.7 5 75.91.69.39.7 4 91.69.39.7 3 69.39.7 2 39.7 1 7 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 74.96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 19 96.97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 18 97.84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 17 84.86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 16 86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 15 32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 14 25.89.29.9.21.12.88.55.70.58.81.91.52.58 13 89.29.9.21.12.88.55.70.58.81.91.52.58 12 29.9.21.12.88.55.70.58.81.91.52.58 11 9.21.12.88.55.70.58.81.91.52.58 10 21.12.88.55.70.58.81.91.52.58 9 12.88.55.70.58.81.91.52.58 8 88.55.70.58.81.91.52.58 7 55.70.58.81.91.52.58 6 70.58.81.91.52.58 5 58.81.91.52.58 4 81.91.52.58 3 91.52.58 2 52.58 1 58 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 74.38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 19 38.46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 18 46.23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 17 23.61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 16 61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 15 3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 14 1.76.63.73.65.20.8.77.19.9.23.15.50.38 13 76.63.73.65.20.8.77.19.9.23.15.50.38 12 63.73.65.20.8.77.19.9.23.15.50.38 11 73.65.20.8.77.19.9.23.15.50.38 10 65.20.8.77.19.9.23.15.50.38 9 20.8.77.19.9.23.15.50.38 8 8.77.19.9.23.15.50.38 7 77.19.9.23.15.50.38 6 19.9.23.15.50.38 5 9.23.15.50.38 4 23.15.50.38 3 15.50.38 2 50.38 1 38 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 99.39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 19 39.54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 18 54.16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 17 16.85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 16 85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 15 22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 14 40.4.87.65.5.31.49.2.26.72.13.36.10.83 13 4.87.65.5.31.49.2.26.72.13.36.10.83 12 87.65.5.31.49.2.26.72.13.36.10.83 11 65.5.31.49.2.26.72.13.36.10.83 10 5.31.49.2.26.72.13.36.10.83 9 31.49.2.26.72.13.36.10.83 8 49.2.26.72.13.36.10.83 7 2.26.72.13.36.10.83 6 26.72.13.36.10.83 5 72.13.36.10.83 4 13.36.10.83 3 36.10.83 2 10.83 1 83 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 20 33.91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 19 91.8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 18 8.65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 17 65.85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 16 85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 15 55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 14 56.42.80.58.11.95.90.85.47.33.14.3.33.82 13 42.80.58.11.95.90.85.47.33.14.3.33.82 12 80.58.11.95.90.85.47.33.14.3.33.82 11 58.11.95.90.85.47.33.14.3.33.82 10 11.95.90.85.47.33.14.3.33.82 9 95.90.85.47.33.14.3.33.82 8 90.85.47.33.14.3.33.82 7 85.47.33.14.3.33.82 6 47.33.14.3.33.82 5 33.14.3.33.82 4 14.3.33.82 3 3.33.82 2 33.82 1 82 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {}} + +do_execsql_test 1.17.2.1 { + SELECT max(b) OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 95 95 84 84 84 84 84 84 84 84 83 83 83 83 83 83 83 83 83 82 82 17 7 5 {} {} {} {}} + +do_execsql_test 1.17.2.2 { + SELECT min(b) OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 {} {} {} {}} + +do_execsql_test 1.17.3.1 { + SELECT row_number() OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.17.3.2 { + SELECT row_number() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.17.3.3 { + SELECT row_number() OVER ( ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.17.4.1 { + SELECT dense_rank() OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.17.4.2 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.17.4.3 { + SELECT dense_rank() OVER ( ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 3 3 3 4 4 5 6 6 7 8 8 8 9 9 9 10 10 10 11 12 12 13 13 13 14 14 15 16 16 16 17 17 17 18 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 45 45 46 46 46 46 47 48 49 50 51 52 53 53 54 54 54 55 56 56 56 56 57 57 57 57 58 59 59 60 60 61 62 63 63 63 64 65 66 67 68 69 69 69 70 70 70 71 71 71 71 71 72 72 72 73 74 74 75 75 76 77 77 78 78 78 79 80 81 81 81 81 82 82 82 83 84 84 85 86 86 86 87 87 87 88 88 88 88 88 89 89 89 90 91 91 91 92 92 92 93 93 94 94 95 95 95} + +do_execsql_test 1.17.4.4 { + SELECT dense_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 5 6 7 8 9 9 10 10 10 1 1 2 2 3 3 4 4 5 5 5 6 7 7 8 8 8 9 9 9 9 9 1 1 1 2 2 2 3 3 4 5 6 7 7 8 8 8 9 1 1 2 2 3 3 3 4 4 4 4 4 5 5 6 7 8 8 8 9 10 10 10 1 2 3 4 4 4 4 5 5 6 7 8 8 8 8 8 9 9 9 9 10 1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 7 8 8 8 9 9 9 1 2 2 2 3 3 3 4 4 4 4 5 5 6 6 6 7 8 9 10 10 10 1 1 1 2 3 3 4 4 5 5 5 5 6 7 8 8 9 9 10 10 1 1 1 2 3 3 4 4 4 4 5 6 6 7 8 8 1 1 1 2 3 3 3 4 4 4 5 6 6 6 6 7 8 9 9 9 10 10 10} + +do_execsql_test 1.17.4.5 { + SELECT dense_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10} + +do_execsql_test 1.17.4.6 { + SELECT dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5} + +do_execsql_test 1.17.5.1 { + SELECT rank() OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201} + +do_execsql_test 1.17.5.2 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} + +do_execsql_test 1.17.5.3 { + SELECT rank() OVER ( ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 2 4 4 4 7 7 9 10 10 12 13 13 13 16 16 16 19 19 19 22 23 23 25 25 25 28 28 30 31 31 31 34 34 34 37 38 39 40 40 42 42 44 44 44 47 48 49 49 49 52 52 54 55 55 55 58 58 58 61 61 63 64 64 64 64 64 69 69 69 69 73 73 75 75 75 75 79 79 81 81 83 83 83 86 87 87 87 90 91 91 93 93 95 95 97 97 97 97 101 102 103 104 105 106 107 107 109 109 109 112 113 113 113 113 117 117 117 117 121 122 122 124 124 126 127 128 128 128 131 132 133 134 135 136 136 136 139 139 139 142 142 142 142 142 147 147 147 150 151 151 153 153 155 156 156 158 158 158 161 162 163 163 163 163 167 167 167 170 171 171 173 174 174 174 177 177 177 180 180 180 180 180 185 185 185 188 189 189 189 192 192 192 195 195 197 197 199 199 199} + +do_execsql_test 1.17.5.4 { + SELECT rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 2 3 4 4 4 7 8 9 10 11 11 13 13 13 1 1 3 3 5 5 7 7 9 9 9 12 13 13 15 15 15 18 18 18 18 18 1 1 1 4 4 4 7 7 9 10 11 12 12 14 14 14 17 1 1 3 3 5 5 5 8 8 8 8 8 13 13 15 16 17 17 17 20 21 21 21 1 2 3 4 4 4 4 8 8 10 11 12 12 12 12 12 17 17 17 17 21 1 1 3 3 3 6 7 7 9 9 11 11 11 14 14 14 17 17 17 20 20 20 1 2 2 2 5 5 5 8 8 8 8 12 12 14 14 14 17 18 19 20 20 20 1 1 1 4 5 5 7 7 9 9 9 9 13 14 15 15 17 17 19 19 1 1 1 4 5 5 7 7 7 7 11 12 12 14 15 15 1 1 1 4 5 5 5 8 8 8 11 12 12 12 12 16 17 18 18 18 21 21 21} + +do_execsql_test 1.17.5.5 { + SELECT rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 143 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 163 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179 179} + +do_execsql_test 1.17.5.6 { + SELECT rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88} + +do_execsql_test 1.17.6.1 { + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ), + dense_rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) + FROM t2 +} {1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 16 2 17 16 2 18 16 2 19 16 2 20 16 2 21 16 2 22 16 2 23 16 2 24 16 2 25 16 2 26 16 2 27 16 2 28 16 2 29 16 2 30 16 2 31 16 2 32 16 2 33 33 3 34 33 3 35 33 3 36 33 3 37 33 3 38 33 3 39 33 3 40 33 3 41 33 3 42 33 3 43 33 3 44 33 3 45 33 3 46 33 3 47 33 3 48 33 3 49 33 3 50 33 3 51 33 3 52 33 3 53 33 3 54 54 4 55 54 4 56 54 4 57 54 4 58 54 4 59 54 4 60 54 4 61 54 4 62 54 4 63 54 4 64 54 4 65 54 4 66 54 4 67 54 4 68 54 4 69 54 4 70 54 4 71 54 4 72 54 4 73 54 4 74 54 4 75 54 4 76 76 5 77 76 5 78 76 5 79 76 5 80 76 5 81 76 5 82 76 5 83 76 5 84 76 5 85 76 5 86 76 5 87 76 5 88 76 5 89 76 5 90 76 5 91 76 5 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 23 2 24 23 2 25 23 2 26 23 2 27 23 2 28 23 2 29 23 2 30 23 2 31 23 2 32 23 2 33 23 2 34 23 2 35 23 2 36 23 2 37 23 2 38 23 2 39 23 2 40 23 2 41 23 2 42 23 2 43 23 2 44 23 2 45 23 2 46 46 3 47 46 3 48 46 3 49 46 3 50 46 3 51 46 3 52 46 3 53 46 3 54 46 3 55 46 3 56 46 3 57 46 3 58 46 3 59 46 3 60 46 3 61 46 3 62 46 3 63 46 3 64 46 3 65 46 3 66 46 3 67 46 3 68 68 4 69 68 4 70 68 4 71 68 4 72 68 4 73 68 4 74 68 4 75 68 4 76 68 4 77 68 4 78 68 4 79 68 4 80 68 4 81 68 4 82 68 4 83 68 4 84 68 4 85 68 4 86 68 4 87 68 4 88 88 5 89 88 5 90 88 5 91 88 5 92 88 5 93 88 5 94 88 5 95 88 5 96 88 5 97 88 5 98 88 5 99 88 5 100 88 5 101 88 5 102 88 5 103 88 5 104 88 5 105 88 5 106 88 5 107 88 5 108 88 5 109 88 5 110 88 5} + + +do_test 1.17.7.1 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300 0.0350 0.0400 0.0450 0.0500 0.0550 0.0600 0.0650 0.0700 0.0750 0.0800 0.0850 0.0900 0.0950 0.1000 0.1050 0.1100 0.1150 0.1200 0.1250 0.1300 0.1350 0.1400 0.1450 0.1500 0.1550 0.1600 0.1650 0.1700 0.1750 0.1800 0.1850 0.1900 0.1950 0.2000 0.2050 0.2100 0.2150 0.2200 0.2250 0.2300 0.2350 0.2400 0.2450 0.2500 0.2550 0.2600 0.2650 0.2700 0.2750 0.2800 0.2850 0.2900 0.2950 0.3000 0.3050 0.3100 0.3150 0.3200 0.3250 0.3300 0.3350 0.3400 0.3450 0.3500 0.3550 0.3600 0.3650 0.3700 0.3750 0.3800 0.3850 0.3900 0.3950 0.4000 0.4050 0.4100 0.4150 0.4200 0.4250 0.4300 0.4350 0.4400 0.4450 0.4500 0.4550 0.4600 0.4650 0.4700 0.4750 0.4800 0.4850 0.4900 0.4950 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5350 0.5400 0.5450 0.5500 0.5550 0.5600 0.5650 0.5700 0.5750 0.5800 0.5850 0.5900 0.5950 0.6000 0.6050 0.6100 0.6150 0.6200 0.6250 0.6300 0.6350 0.6400 0.6450 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6800 0.6850 0.6900 0.6950 0.7000 0.7050 0.7100 0.7150 0.7200 0.7250 0.7300 0.7350 0.7400 0.7450 0.7500 0.7550 0.7600 0.7650 0.7700 0.7750 0.7800 0.7850 0.7900 0.7950 0.8000 0.8050 0.8100 0.8150 0.8200 0.8250 0.8300 0.8350 0.8400 0.8450 0.8500 0.8550 0.8600 0.8650 0.8700 0.8750 0.8800 0.8850 0.8900 0.8950 0.9000 0.9050 0.9100 0.9150 0.9200 0.9250 0.9300 0.9350 0.9400 0.9450 0.9500 0.9550 0.9600 0.9650 0.9700 0.9750 0.9800 0.9850 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.7.2 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2857 0.3571 0.4286 0.5000 0.5714 0.6429 0.7143 0.7857 0.8571 0.9286 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0000 0.0526 0.1053 0.1579 0.2105 0.2632 0.3158 0.3684 0.4211 0.4737 0.5263 0.5789 0.6316 0.6842 0.7368 0.7895 0.8421 0.8947 0.9474 1.0000 0.0000 0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.7.3 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0050 0.0050 0.0150 0.0150 0.0150 0.0300 0.0300 0.0400 0.0450 0.0450 0.0550 0.0600 0.0600 0.0600 0.0750 0.0750 0.0750 0.0900 0.0900 0.0900 0.1050 0.1100 0.1100 0.1200 0.1200 0.1200 0.1350 0.1350 0.1450 0.1500 0.1500 0.1500 0.1650 0.1650 0.1650 0.1800 0.1850 0.1900 0.1950 0.1950 0.2050 0.2050 0.2150 0.2150 0.2150 0.2300 0.2350 0.2400 0.2400 0.2400 0.2550 0.2550 0.2650 0.2700 0.2700 0.2700 0.2850 0.2850 0.2850 0.3000 0.3000 0.3100 0.3150 0.3150 0.3150 0.3150 0.3150 0.3400 0.3400 0.3400 0.3400 0.3600 0.3600 0.3700 0.3700 0.3700 0.3700 0.3900 0.3900 0.4000 0.4000 0.4100 0.4100 0.4100 0.4250 0.4300 0.4300 0.4300 0.4450 0.4500 0.4500 0.4600 0.4600 0.4700 0.4700 0.4800 0.4800 0.4800 0.4800 0.5000 0.5050 0.5100 0.5150 0.5200 0.5250 0.5300 0.5300 0.5400 0.5400 0.5400 0.5550 0.5600 0.5600 0.5600 0.5600 0.5800 0.5800 0.5800 0.5800 0.6000 0.6050 0.6050 0.6150 0.6150 0.6250 0.6300 0.6350 0.6350 0.6350 0.6500 0.6550 0.6600 0.6650 0.6700 0.6750 0.6750 0.6750 0.6900 0.6900 0.6900 0.7050 0.7050 0.7050 0.7050 0.7050 0.7300 0.7300 0.7300 0.7450 0.7500 0.7500 0.7600 0.7600 0.7700 0.7750 0.7750 0.7850 0.7850 0.7850 0.8000 0.8050 0.8100 0.8100 0.8100 0.8100 0.8300 0.8300 0.8300 0.8450 0.8500 0.8500 0.8600 0.8650 0.8650 0.8650 0.8800 0.8800 0.8800 0.8950 0.8950 0.8950 0.8950 0.8950 0.9200 0.9200 0.9200 0.9350 0.9400 0.9400 0.9400 0.9550 0.9550 0.9550 0.9700 0.9700 0.9800 0.9800 0.9900 0.9900 0.9900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.7.4 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0714 0.1429 0.2143 0.2143 0.2143 0.4286 0.5000 0.5714 0.6429 0.7143 0.7143 0.8571 0.8571 0.8571 0.0000 0.0000 0.0952 0.0952 0.1905 0.1905 0.2857 0.2857 0.3810 0.3810 0.3810 0.5238 0.5714 0.5714 0.6667 0.6667 0.6667 0.8095 0.8095 0.8095 0.8095 0.8095 0.0000 0.0000 0.0000 0.1875 0.1875 0.1875 0.3750 0.3750 0.5000 0.5625 0.6250 0.6875 0.6875 0.8125 0.8125 0.8125 1.0000 0.0000 0.0000 0.0909 0.0909 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.3182 0.3182 0.5455 0.5455 0.6364 0.6818 0.7273 0.7273 0.7273 0.8636 0.9091 0.9091 0.9091 0.0000 0.0500 0.1000 0.1500 0.1500 0.1500 0.1500 0.3500 0.3500 0.4500 0.5000 0.5500 0.5500 0.5500 0.5500 0.5500 0.8000 0.8000 0.8000 0.8000 1.0000 0.0000 0.0000 0.0952 0.0952 0.0952 0.2381 0.2857 0.2857 0.3810 0.3810 0.4762 0.4762 0.4762 0.6190 0.6190 0.6190 0.7619 0.7619 0.7619 0.9048 0.9048 0.9048 0.0000 0.0476 0.0476 0.0476 0.1905 0.1905 0.1905 0.3333 0.3333 0.3333 0.3333 0.5238 0.5238 0.6190 0.6190 0.6190 0.7619 0.8095 0.8571 0.9048 0.9048 0.9048 0.0000 0.0000 0.0000 0.1579 0.2105 0.2105 0.3158 0.3158 0.4211 0.4211 0.4211 0.4211 0.6316 0.6842 0.7368 0.7368 0.8421 0.8421 0.9474 0.9474 0.0000 0.0000 0.0000 0.2000 0.2667 0.2667 0.4000 0.4000 0.4000 0.4000 0.6667 0.7333 0.7333 0.8667 0.9333 0.9333 0.0000 0.0000 0.0000 0.1364 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.4545 0.5000 0.5000 0.5000 0.5000 0.6818 0.7273 0.7727 0.7727 0.7727 0.9091 0.9091 0.9091} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.7.5 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER ( ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.0750 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.1850 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.2700 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.3850 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.7100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8100 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900 0.8900} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.7.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER (PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.3556 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.5889 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.8333 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.2018 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.4128 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.6147 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982 0.7982} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.1 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0100 0.0149 0.0199 0.0249 0.0299 0.0348 0.0398 0.0448 0.0498 0.0547 0.0597 0.0647 0.0697 0.0746 0.0796 0.0846 0.0896 0.0945 0.0995 0.1045 0.1095 0.1144 0.1194 0.1244 0.1294 0.1343 0.1393 0.1443 0.1493 0.1542 0.1592 0.1642 0.1692 0.1741 0.1791 0.1841 0.1891 0.1940 0.1990 0.2040 0.2090 0.2139 0.2189 0.2239 0.2289 0.2338 0.2388 0.2438 0.2488 0.2537 0.2587 0.2637 0.2687 0.2736 0.2786 0.2836 0.2886 0.2935 0.2985 0.3035 0.3085 0.3134 0.3184 0.3234 0.3284 0.3333 0.3383 0.3433 0.3483 0.3532 0.3582 0.3632 0.3682 0.3731 0.3781 0.3831 0.3881 0.3930 0.3980 0.4030 0.4080 0.4129 0.4179 0.4229 0.4279 0.4328 0.4378 0.4428 0.4478 0.4527 0.4577 0.4627 0.4677 0.4726 0.4776 0.4826 0.4876 0.4925 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5323 0.5373 0.5423 0.5473 0.5522 0.5572 0.5622 0.5672 0.5721 0.5771 0.5821 0.5871 0.5920 0.5970 0.6020 0.6070 0.6119 0.6169 0.6219 0.6269 0.6318 0.6368 0.6418 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6766 0.6816 0.6866 0.6915 0.6965 0.7015 0.7065 0.7114 0.7164 0.7214 0.7264 0.7313 0.7363 0.7413 0.7463 0.7512 0.7562 0.7612 0.7662 0.7711 0.7761 0.7811 0.7861 0.7910 0.7960 0.8010 0.8060 0.8109 0.8159 0.8209 0.8259 0.8308 0.8358 0.8408 0.8458 0.8507 0.8557 0.8607 0.8657 0.8706 0.8756 0.8806 0.8856 0.8905 0.8955 0.9005 0.9055 0.9104 0.9154 0.9204 0.9254 0.9303 0.9353 0.9403 0.9453 0.9502 0.9552 0.9602 0.9652 0.9701 0.9751 0.9801 0.9851 0.9900 0.9950 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.2 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.2667 0.3333 0.4000 0.4667 0.5333 0.6000 0.6667 0.7333 0.8000 0.8667 0.9333 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 0.6471 0.7059 0.7647 0.8235 0.8824 0.9412 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000 0.0476 0.0952 0.1429 0.1905 0.2381 0.2857 0.3333 0.3810 0.4286 0.4762 0.5238 0.5714 0.6190 0.6667 0.7143 0.7619 0.8095 0.8571 0.9048 0.9524 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0455 0.0909 0.1364 0.1818 0.2273 0.2727 0.3182 0.3636 0.4091 0.4545 0.5000 0.5455 0.5909 0.6364 0.6818 0.7273 0.7727 0.8182 0.8636 0.9091 0.9545 1.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000 0.5625 0.6250 0.6875 0.7500 0.8125 0.8750 0.9375 1.0000 0.0435 0.0870 0.1304 0.1739 0.2174 0.2609 0.3043 0.3478 0.3913 0.4348 0.4783 0.5217 0.5652 0.6087 0.6522 0.6957 0.7391 0.7826 0.8261 0.8696 0.9130 0.9565 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.3 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0050 0.0149 0.0149 0.0299 0.0299 0.0299 0.0398 0.0398 0.0448 0.0547 0.0547 0.0597 0.0746 0.0746 0.0746 0.0896 0.0896 0.0896 0.1045 0.1045 0.1045 0.1095 0.1194 0.1194 0.1343 0.1343 0.1343 0.1443 0.1443 0.1493 0.1642 0.1642 0.1642 0.1791 0.1791 0.1791 0.1841 0.1891 0.1940 0.2040 0.2040 0.2139 0.2139 0.2289 0.2289 0.2289 0.2338 0.2388 0.2537 0.2537 0.2537 0.2637 0.2637 0.2687 0.2836 0.2836 0.2836 0.2985 0.2985 0.2985 0.3085 0.3085 0.3134 0.3383 0.3383 0.3383 0.3383 0.3383 0.3582 0.3582 0.3582 0.3582 0.3682 0.3682 0.3881 0.3881 0.3881 0.3881 0.3980 0.3980 0.4080 0.4080 0.4229 0.4229 0.4229 0.4279 0.4428 0.4428 0.4428 0.4478 0.4577 0.4577 0.4677 0.4677 0.4776 0.4776 0.4975 0.4975 0.4975 0.4975 0.5025 0.5075 0.5124 0.5174 0.5224 0.5274 0.5373 0.5373 0.5522 0.5522 0.5522 0.5572 0.5771 0.5771 0.5771 0.5771 0.5970 0.5970 0.5970 0.5970 0.6020 0.6119 0.6119 0.6219 0.6219 0.6269 0.6318 0.6468 0.6468 0.6468 0.6517 0.6567 0.6617 0.6667 0.6716 0.6866 0.6866 0.6866 0.7015 0.7015 0.7015 0.7264 0.7264 0.7264 0.7264 0.7264 0.7413 0.7413 0.7413 0.7463 0.7562 0.7562 0.7662 0.7662 0.7711 0.7811 0.7811 0.7960 0.7960 0.7960 0.8010 0.8060 0.8259 0.8259 0.8259 0.8259 0.8408 0.8408 0.8408 0.8458 0.8557 0.8557 0.8607 0.8756 0.8756 0.8756 0.8905 0.8905 0.8905 0.9154 0.9154 0.9154 0.9154 0.9154 0.9303 0.9303 0.9303 0.9353 0.9502 0.9502 0.9502 0.9652 0.9652 0.9652 0.9751 0.9751 0.9851 0.9851 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.4 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%10 ORDER BY b ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0667 0.1333 0.2000 0.4000 0.4000 0.4000 0.4667 0.5333 0.6000 0.6667 0.8000 0.8000 1.0000 1.0000 1.0000 0.0909 0.0909 0.1818 0.1818 0.2727 0.2727 0.3636 0.3636 0.5000 0.5000 0.5000 0.5455 0.6364 0.6364 0.7727 0.7727 0.7727 1.0000 1.0000 1.0000 1.0000 1.0000 0.1765 0.1765 0.1765 0.3529 0.3529 0.3529 0.4706 0.4706 0.5294 0.5882 0.6471 0.7647 0.7647 0.9412 0.9412 0.9412 1.0000 0.0870 0.0870 0.1739 0.1739 0.3043 0.3043 0.3043 0.5217 0.5217 0.5217 0.5217 0.5217 0.6087 0.6087 0.6522 0.6957 0.8261 0.8261 0.8261 0.8696 1.0000 1.0000 1.0000 0.0476 0.0952 0.1429 0.3333 0.3333 0.3333 0.3333 0.4286 0.4286 0.4762 0.5238 0.7619 0.7619 0.7619 0.7619 0.7619 0.9524 0.9524 0.9524 0.9524 1.0000 0.0909 0.0909 0.2273 0.2273 0.2273 0.2727 0.3636 0.3636 0.4545 0.4545 0.5909 0.5909 0.5909 0.7273 0.7273 0.7273 0.8636 0.8636 0.8636 1.0000 1.0000 1.0000 0.0455 0.1818 0.1818 0.1818 0.3182 0.3182 0.3182 0.5000 0.5000 0.5000 0.5000 0.5909 0.5909 0.7273 0.7273 0.7273 0.7727 0.8182 0.8636 1.0000 1.0000 1.0000 0.1500 0.1500 0.1500 0.2000 0.3000 0.3000 0.4000 0.4000 0.6000 0.6000 0.6000 0.6000 0.6500 0.7000 0.8000 0.8000 0.9000 0.9000 1.0000 1.0000 0.1875 0.1875 0.1875 0.2500 0.3750 0.3750 0.6250 0.6250 0.6250 0.6250 0.6875 0.8125 0.8125 0.8750 1.0000 1.0000 0.1304 0.1304 0.1304 0.1739 0.3043 0.3043 0.3043 0.4348 0.4348 0.4348 0.4783 0.6522 0.6522 0.6522 0.6522 0.6957 0.7391 0.8696 0.8696 0.8696 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.5 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.0746 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.1841 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.2687 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.3831 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.4876 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.5970 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.7065 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8060 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 0.8856 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.6 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.1648 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.3516 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.5824 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 0.8242 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.4091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.6091 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 0.7909 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.1 { + set myres {} + foreach r [db eval {SELECT ntile(100) OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 100.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.2 { + set myres {} + foreach r [db eval {SELECT ntile(101) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.3 { + set myres {} + foreach r [db eval {SELECT ntile(102) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 98.0000 99.0000 99.0000 100.0000 101.0000 102.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.4 { + set myres {} + foreach r [db eval {SELECT ntile(103) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0000 22.0000 23.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.5 { + set myres {} + foreach r [db eval {SELECT ntile(104) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.6 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 1.17.8.7 { + set myres {} + foreach r [db eval {SELECT ntile(105) OVER ( ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 2.0000 2.0000 3.0000 3.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 8.0000 8.0000 9.0000 9.0000 10.0000 10.0000 11.0000 11.0000 12.0000 12.0000 13.0000 13.0000 14.0000 14.0000 15.0000 15.0000 16.0000 16.0000 17.0000 17.0000 18.0000 18.0000 19.0000 19.0000 20.0000 20.0000 21.0000 21.0000 22.0000 22.0000 23.0000 23.0000 24.0000 24.0000 25.0000 25.0000 26.0000 26.0000 27.0000 27.0000 28.0000 28.0000 29.0000 29.0000 30.0000 30.0000 31.0000 31.0000 32.0000 32.0000 33.0000 33.0000 34.0000 34.0000 35.0000 35.0000 36.0000 36.0000 37.0000 37.0000 38.0000 38.0000 39.0000 39.0000 40.0000 40.0000 41.0000 41.0000 42.0000 42.0000 43.0000 43.0000 44.0000 44.0000 45.0000 45.0000 46.0000 46.0000 47.0000 47.0000 48.0000 48.0000 49.0000 49.0000 50.0000 50.0000 51.0000 51.0000 52.0000 52.0000 53.0000 53.0000 54.0000 54.0000 55.0000 55.0000 56.0000 56.0000 57.0000 57.0000 58.0000 58.0000 59.0000 59.0000 60.0000 60.0000 61.0000 61.0000 62.0000 62.0000 63.0000 63.0000 64.0000 64.0000 65.0000 65.0000 66.0000 66.0000 67.0000 67.0000 68.0000 68.0000 69.0000 69.0000 70.0000 70.0000 71.0000 71.0000 72.0000 72.0000 73.0000 73.0000 74.0000 74.0000 75.0000 75.0000 76.0000 76.0000 77.0000 77.0000 78.0000 78.0000 79.0000 79.0000 80.0000 80.0000 81.0000 81.0000 82.0000 82.0000 83.0000 83.0000 84.0000 84.0000 85.0000 85.0000 86.0000 86.0000 87.0000 87.0000 88.0000 88.0000 89.0000 89.0000 90.0000 90.0000 91.0000 91.0000 92.0000 92.0000 93.0000 93.0000 94.0000 94.0000 95.0000 95.0000 96.0000 96.0000 97.0000 98.0000 99.0000 100.0000 101.0000 102.0000 103.0000 104.0000 105.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 1.17.9.1 { + SELECT last_value(a+b) OVER ( ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 {} {} {} {}} + +do_execsql_test 1.17.9.2 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {223 223 223 223 223 223 223 223 223 223 223 {} {} {} {} 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 210 {} {} {} {} 280 280 280 280 280 280 280 280 280 280 280 280 280 {} {} {} {} 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 279 {} {} {} {} 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 {} {} {} {} 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 206 {} {} {} {} 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 {} {} {} {} 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 {} {} {} {} 232 232 232 232 232 232 232 232 232 232 232 232 {} {} {} {} 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 {} {} {} {}} + +do_execsql_test 1.17.9.3 { + SELECT last_value(a+b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 {} {} {} {}} + +do_execsql_test 1.17.9.4 { + SELECT last_value(a+b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {240 240 240 240 240 240 240 240 240 240 240 {} {} {} {} 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 {} {} {} {} 280 280 280 280 280 280 280 280 280 280 280 280 280 {} {} {} {} 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 {} {} {} {} 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 {} {} {} {} 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 274 {} {} {} {} 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 226 {} {} {} {} 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 124 {} {} {} {} 198 198 198 198 198 198 198 198 198 198 198 198 {} {} {} {} 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 276 {} {} {} {}} + +do_execsql_test 1.17.9.5 { + SELECT last_value(a+b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 229 {} {} {} {}} + +do_execsql_test 1.17.9.6 { + SELECT last_value(a+b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.10.1 { + SELECT nth_value(b,b+1) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {23 78 85 29 84 51 93 91 68 74 65 12 4 22 37 15 53 8 16 29 8 34 3 76 73 63 90 47 98 47 90 73 20 89 91 22 77 73 42 41 32 55 79 51 74 44 81 7 65 8 43 80 8 89 90 29 36 15 42 9 9 41 20 16 11 87 20 90 84 80 41 37 34 9 75 63 34 8 8 81 95 31 74 36 41 99 90 91 99 13 2 35 33 36 38 37 20 75 17 {} 5 34 58 33 19 31 50 34 23 5 72 90 11 85 90 36 2 {} 39 27 {} {} 64 2 74 95 37 {} 58 {} 34 44 {} {} 30 70 47 {} 7 {} 15 {} {} 12 33 36 99 17 {} {} 44 {} {} 12 {} {} {} 34 {} {} {} {} 36 44 {} 30 30 10 {} {} {} {} {} 30 {} {} {} 84 {} {} {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.10.2 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {80 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 21 {} {} {} 31 {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} 72 {} {} {} 82 {} {} {} {} {} {} {} {} {} {} {} {} 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 64 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 5 {} {} {} {} {} {} {} {} {} {} {} {} 76 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 27 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.10.3 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {2 3 3 5 5 6 7 7 8 9 9 10 11 12 12 13 13 14 15 15 16 16 19 20 21 22 22 23 23 25 26 26 27 28 29 29 30 31 32 33 33 33 34 34 34 35 36 36 37 37 38 39 39 40 41 41 42 43 44 44 46 47 47 49 50 51 52 53 55 55 56 56 57 58 58 58 59 59 59 60 61 62 63 64 65 65 67 68 69 72 72 73 73 74 74 74 75 75 76 77 78 80 81 81 83 84 84 85 85 86 87 88 89 89 90 90 91 91 91 91 93 93 94 95 95 96 97 98 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.10.4 { + SELECT nth_value(b,b+1) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {30 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 21 31 91 91 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 22 22 32 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 33 33 83 93 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 44 84 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 55 65 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 36 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 57 67 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 78 88 98 {} {} {} {} {} {} {} {} {} {} {} {} {} 59 59 69 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.10.5 { + SELECT nth_value(b,b+1) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {80 84 22 2 34 41 85 23 24 34 25 12 13 11 72 3 85 95 4 75 85 21 65 73 44 31 62 42 4 3 73 13 2 95 56 56 43 2 25 33 83 73 34 72 26 43 13 82 46 16 13 15 65 66 74 14 77 94 57 95 73 65 35 26 16 97 4 97 67 95 98 65 44 5 74 95 68 57 47 26 78 27 5 64 99 8 78 16 16 26 78 27 5 16 99 29 97 96 98 36 79 49 7 46 76 59 {} 58 38 7 5 56 {} 88 59 {} 39 26 {} 56 87 {} 88 76 58 67 77 {} 9 79 49 37 88 {} {} {} 28 98 99 {} 59 39 {} 58 {} {} {} 99 27 39 {} 29 {} {} 8 {} {} {} 69 49 39 88 {} {} {} 38 99 {} {} {} {} 29 {} 89 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.10.6 { + SELECT nth_value(b,b+1) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.11.1 { + SELECT first_value(b) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {23 99 26 33 2 89 81 96 59 38 68 39 62 91 46 6 99 97 27 46 78 54 97 8 67 29 93 84 77 23 16 16 93 65 35 47 7 86 74 61 91 85 24 85 43 59 12 32 56 3 91 22 90 55 15 28 89 25 47 1 56 40 43 56 16 75 36 89 98 76 81 4 94 42 30 78 33 29 53 63 2 87 37 80 84 72 41 9 61 73 95 65 13 58 96 98 1 21 74 65 35 5 73 11 51 87 41 12 8 20 31 31 15 95 22 73 79 88 34 8 11 49 34 90 59 96 60 55 75 77 44 2 7 85 57 74 29 70 59 19 39 26 26 47 80 90 36 58 47 9 72 72 66 33 93 75 64 81 9 23 37 13 12 14 62 91 36 91 33 15 34 36 99 3 95 69 58 52 30 50 84 10 84 33 21 39 44 58 30 38 34 83 27 82 17 7 5 {} {} {} {}} + +do_execsql_test 1.17.11.2 { + SELECT first_value(b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {80 20 90 60 70 80 90 30 50 10 30 {} {} {} {} 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 {} {} {} {} 22 42 2 72 12 22 2 72 72 12 62 52 82 {} {} {} {} 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 {} {} {} {} 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 {} {} {} {} 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 {} {} {} {} 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 {} {} {} {} 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 {} {} {} {} 28 98 78 58 98 8 88 8 58 58 58 38 {} {} {} {} 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39 {} {} {} {}} + +do_execsql_test 1.17.11.3 { + SELECT first_value(b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {2 2 3 3 4 5 5 6 7 7 7 8 8 8 9 9 9 10 11 11 12 12 12 13 13 14 15 15 15 16 16 16 17 19 20 21 21 22 22 23 23 23 24 25 26 26 26 27 27 28 29 29 29 30 30 30 31 31 32 33 33 33 33 33 34 34 34 34 35 35 36 36 36 36 37 37 38 38 39 39 39 40 41 41 41 42 43 43 44 44 46 46 47 47 47 47 49 50 51 52 53 54 55 55 56 56 56 57 58 58 58 58 59 59 59 59 60 61 61 62 62 63 64 65 65 65 66 67 68 69 70 72 72 72 73 73 73 74 74 74 74 74 75 75 75 76 77 77 78 78 79 80 80 81 81 81 82 83 84 84 84 84 85 85 85 86 87 87 88 89 89 89 90 90 90 91 91 91 91 91 93 93 93 94 95 95 95 96 96 96 97 97 98 98 99 99 99 {} {} {} {}} + +do_execsql_test 1.17.11.4 { + SELECT first_value(b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {30 30 40 50 60 70 80 80 90 90 90 {} {} {} {} 21 21 31 31 41 41 41 51 61 61 81 81 81 91 91 91 91 91 {} {} {} {} 12 12 22 22 32 42 52 62 62 72 72 72 82 {} {} {} {} 23 23 23 33 33 33 33 33 43 43 53 63 73 73 73 83 93 93 93 {} {} {} {} 34 34 34 44 44 54 64 74 74 74 74 74 84 84 84 84 94 {} {} {} {} 15 25 35 35 55 55 65 65 65 75 75 75 85 85 85 95 95 95 {} {} {} {} 26 26 26 36 36 36 36 46 46 56 56 56 66 76 86 96 96 96 {} {} {} {} 27 27 37 37 47 47 47 47 57 67 77 77 87 87 97 97 {} {} {} {} 38 38 58 58 58 58 68 78 78 88 98 98 {} {} {} {} 29 29 29 39 39 39 49 59 59 59 59 69 79 89 89 89 99 99 99 {} {} {} {}} + +do_execsql_test 1.17.11.5 { + SELECT first_value(b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {80 20 90 60 70 80 90 30 50 10 30 41 81 91 61 91 91 1 81 41 61 1 21 11 51 41 31 31 11 81 91 91 21 2 62 12 32 22 42 2 72 12 22 2 72 72 12 62 52 82 23 33 93 23 93 43 3 43 33 53 63 73 13 73 73 33 93 23 13 33 3 33 83 74 74 54 84 74 24 4 94 84 74 34 34 44 74 64 14 34 84 84 44 34 65 35 85 85 55 15 25 75 95 65 65 35 5 15 95 55 75 85 75 15 95 5 26 96 46 6 46 16 16 86 56 56 56 16 36 76 96 96 26 26 36 66 36 36 97 27 97 67 77 47 7 47 87 37 87 77 7 57 47 47 37 27 17 7 38 68 78 8 28 98 78 58 98 8 88 8 58 58 58 38 99 89 59 39 99 29 59 89 89 29 9 79 49 59 29 59 19 39 9 9 99 69 39 {} {} {} {}} + +do_execsql_test 1.17.11.6 { + SELECT first_value(b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.12.1 { + SELECT lead(b,b) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 4 61 42 8 35 77 7 81 96 9 11 89 32 53 91 30 51 56 54 73 22 59 75 74 78 8 16 65 15 8 31 87 90 12 32 96 74 76 37 85 90 15 35 2 60 36 75 9 51 47 63 51 90 26 42 26 8 76 80 90 37 87 56 79 5 87 8 2 39 73 64 36 90 72 78 36 73 51 33 20 41 2 26 37 33 8 14 33 81 55 1 9 12 39 64 87 72 34 82 21 34 99 62 74 41 69 22 75 27 58 8 79 77 26 26 55 {} 29 30 7 {} 66 55 2 34 64 {} 33 {} 44 84 {} {} 95 85 19 {} 83 {} 91 {} {} 9 50 91 33 34 {} {} 84 {} 7 9 {} {} {} 44 {} {} {} {} 91 84 {} 95 95 52 {} {} {} {} {} 21 {} {} {} 58 {} {} {} {} {} {} {} 83 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.12.2 { + SELECT lead(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 81 {} {} {} 21 {} {} {} {} {} {} {} {} {} {} {} 12 {} 62 {} {} {} 12 {} {} {} 72 {} {} {} {} {} {} {} {} {} {} {} {} 53 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 95 {} {} {} {} {} {} 85 {} {} {} {} {} {} {} {} {} {} {} {} 56 {} 36 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 57 {} {} {} {} {} 7 {} {} {} {} {} {} {} {} {} {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.12.3 { + SELECT lead(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 1 2 2 3 3 5 5 7 7 8 8 9 9 10 11 12 12 13 13 14 15 16 16 17 19 20 21 22 23 23 24 25 26 26 27 28 29 30 31 31 33 33 33 33 34 34 35 36 36 36 37 37 38 39 39 40 41 41 42 43 44 46 47 47 47 47 49 51 52 53 54 55 56 56 57 58 58 58 59 59 59 61 61 62 63 65 65 65 67 69 70 72 72 73 74 74 74 74 75 76 77 78 80 81 81 83 84 84 84 85 85 87 87 88 89 89 90 90 90 91 91 91 93 93 95 95 96 96 97 98 99 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.12.4 { + SELECT lead(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 80 {} {} {} {} {} {} {} {} {} {} {} {} {} 1 11 61 81 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 12 12 72 82 {} {} {} {} {} {} {} {} {} {} {} {} 13 23 63 73 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 34 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 25 35 85 85 95 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 26 76 86 96 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 37 47 47 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 58 58 68 {} {} {} {} {} {} {} {} {} {} {} {} {} 39 49 59 99 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.12.5 { + SELECT lead(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 64 42 81 94 1 44 73 74 44 85 22 33 41 72 93 34 65 54 5 15 81 15 63 84 21 2 62 54 93 43 33 2 75 16 16 23 12 85 62 13 53 94 12 75 23 73 72 26 96 33 55 25 96 74 34 47 84 37 55 53 25 84 75 86 36 54 36 36 55 68 84 84 95 74 65 27 37 87 76 78 57 95 34 99 58 17 96 46 76 78 57 95 86 99 89 36 16 68 96 89 89 47 95 56 59 {} 88 8 97 85 16 {} 78 79 39 59 36 {} 46 77 {} 78 56 98 36 97 {} 59 89 89 47 78 {} {} {} 38 68 58 {} 58 38 {} 98 {} {} {} 19 57 9 {} 9 {} {} 7 {} {} {} 39 89 38 78 39 {} {} 8 19 {} {} {} {} 89 {} 39 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 9 {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.12.6 { + SELECT lead(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.13.1 { + SELECT lag(b,b) OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} 26 {} {} {} {} {} {} {} {} {} {} 38 {} {} {} {} {} {} {} 6 {} 0 {} {} {} 81 46 6 {} {} 74 {} 23 {} {} {} {} {} 27 {} 99 {} 35 6 {} 12 {} 23 {} 41 61 84 {} 93 39 47 2 54 46 96 56 {} 16 {} {} {} {} 89 {} 16 43 74 85 56 29 99 53 {} 59 33 23 91 59 53 84 99 {} 93 63 47 41 74 98 33 67 35 75 1 23 13 55 27 75 98 35 73 63 2 21 27 13 24 86 23 84 31 20 94 61 65 75 23 36 94 55 90 41 77 96 56 29 40 12 89 63 11 5 73 79 1 16 28 31 73 5 39 53 63 41 11 40 2 13 33 9 29 90 47 72 9 73 30 44 33 74 93 29 74 42 34 63 41 34 96 47 77 1 36 74 72 14 36 26 77 9 72 64 8 91 31 52 30 83} + +do_execsql_test 1.17.13.2 { + SELECT lag(b,b) OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 {} 81 {} {} {} {} 1 {} {} {} 41 {} {} {} {} {} {} 22 {} {} {} 12 {} {} 62 {} {} {} {} {} {} {} {} {} 23 {} {} {} {} {} {} {} {} {} {} {} 43 {} 23 {} {} {} {} {} {} {} {} 54 {} {} {} {} {} {} {} {} 74 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 75 {} {} {} {} {} {} 55 {} 75 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 47 {} {} {} {} {} 27 7 {} {} {} {} {} {} {} {} {} 68 {} 8 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 89 {} {} {} {} {} {} {} 29 9 {} {} {}} + +do_execsql_test 1.17.13.3 { + SELECT lag(b,b) OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 0 1 1 1 2 2 2 2 2 2 2 2 3 3 3 4 5 5 5 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 10 11 11 11 11 11 12 12 12 12 12 12 13 13 13 14 14 15 15 15 15 15 16 16 16 16 17 19 19 20 20 21 21 22 22 22 22 23 23 23 23 23 23 24 25 25 25 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 28 29 29 29 29 29 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 35 35 35 35 36 36 36 36 36 36 36 36 37 37 37 37 37 38 38 38 39 39 39 39 39 39 39 40 41 41 41 41 41 42 43 43 44 43 44 44 44 44 46 46 46 47 47 47 47 47 47 47 49 50} + +do_execsql_test 1.17.13.4 { + SELECT lag(b,b) OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 2 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.13.5 { + SELECT lag(b,b) OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} 30 {} {} {} {} {} {} {} 91 {} {} {} 61 20 81 {} {} {} 0 1 {} {} {} 41 91 {} 11 70 91 0 22 {} 81 61 12 {} {} 62 {} 0 {} 31 81 {} 91 {} 81 23 61 41 90 90 {} 82 {} {} 21 {} 72 43 32 23 42 {} 30 80 1 {} 60 93 54 {} 90 50 82 23 12 81 11 74 43 90 30 52 53 81 63 41 81 2 34 54 31 30 42 2 3 75 44 91 93 12 31 22 55 41 75 84 1 83 15 74 35 5 22 13 33 3 85 44 23 62 12 5 15 55 33 25 75 12 75 2 74 33 85 36 55 53 75 73 83 47 65 35 5 96 36 27 7 46 84 74 47 36 33 74 15 13 68 94 8 75 15 95 66 54 74 96 97 4 7 16 44 34 37 89 5 36 36 68 96 58 47 29 9 35 56 7} + +do_execsql_test 1.17.13.6 { + SELECT lag(b,b) OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {0 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.14.1 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {23.99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 38.68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 68.39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 39.62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 62.91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 46.6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 6.99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 97.27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 27.46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 46.78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 78.54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 54.97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 97.8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 67.29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 77.23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 35.47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 7.86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 86.74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 61.91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 24.85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 43.59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 32.56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 3.91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 22.90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 55.15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 28.89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 25.47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 1.56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 40.43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 43.56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 56.16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 16.75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 89.98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 98.76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 76.81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 4.94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 94.42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 42.30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 30.78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 78.33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 53.63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 63.2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 87.37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 37.80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 80.84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 61.73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 13.58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 98.1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 1.21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 21.74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 65.35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 35.5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 5.73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 11.51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 51.87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 87.41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 41.12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 20.31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 31.31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 31.15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 22.73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 73.79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 79.88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 88.34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 8.11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 11.49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 49.34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 96.60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 60.55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 55.75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 77.44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 44.2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 2.7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 7.85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 85.57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 57.74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 74.29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 29.70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 70.59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 59.19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 19.39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 39.26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 26.47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 80.90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 90.36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 47.9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 72.66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 66.33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 93.75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 75.64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 64.81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 81.9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 9.23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 23.37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 37.13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 13.12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 12.14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 14.62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 62.91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 91.33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 15.34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 34.36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 36.99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 99.3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 3.95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 95.69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 69.58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 58.52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 52.30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 30.50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 50.84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 10.84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 84.33.21.39.44.58.30.38.34.83.27.82.17.7.5 33.21.39.44.58.30.38.34.83.27.82.17.7.5 21.39.44.58.30.38.34.83.27.82.17.7.5 39.44.58.30.38.34.83.27.82.17.7.5 44.58.30.38.34.83.27.82.17.7.5 58.30.38.34.83.27.82.17.7.5 30.38.34.83.27.82.17.7.5 38.34.83.27.82.17.7.5 34.83.27.82.17.7.5 83.27.82.17.7.5 27.82.17.7.5 82.17.7.5 17.7.5 7.5 5 {} {} {} {}} + +do_execsql_test 1.17.14.2 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%10 ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {80.20.90.60.70.80.90.30.50.10.30 20.90.60.70.80.90.30.50.10.30 90.60.70.80.90.30.50.10.30 60.70.80.90.30.50.10.30 70.80.90.30.50.10.30 80.90.30.50.10.30 90.30.50.10.30 30.50.10.30 50.10.30 10.30 30 {} {} {} {} 91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 81.41.61.1.21.11.51.41.31.31.11.81.91.91.21 41.61.1.21.11.51.41.31.31.11.81.91.91.21 61.1.21.11.51.41.31.31.11.81.91.91.21 1.21.11.51.41.31.31.11.81.91.91.21 21.11.51.41.31.31.11.81.91.91.21 11.51.41.31.31.11.81.91.91.21 51.41.31.31.11.81.91.91.21 41.31.31.11.81.91.91.21 31.31.11.81.91.91.21 31.11.81.91.91.21 11.81.91.91.21 81.91.91.21 91.91.21 91.21 21 {} {} {} {} 22.42.2.72.12.22.2.72.72.12.62.52.82 42.2.72.12.22.2.72.72.12.62.52.82 2.72.12.22.2.72.72.12.62.52.82 72.12.22.2.72.72.12.62.52.82 12.22.2.72.72.12.62.52.82 22.2.72.72.12.62.52.82 2.72.72.12.62.52.82 72.72.12.62.52.82 72.12.62.52.82 12.62.52.82 62.52.82 52.82 82 {} {} {} {} 93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 33.53.63.73.13.73.73.33.93.23.13.33.3.33.83 53.63.73.13.73.73.33.93.23.13.33.3.33.83 63.73.13.73.73.33.93.23.13.33.3.33.83 73.13.73.73.33.93.23.13.33.3.33.83 13.73.73.33.93.23.13.33.3.33.83 73.73.33.93.23.13.33.3.33.83 73.33.93.23.13.33.3.33.83 33.93.23.13.33.3.33.83 93.23.13.33.3.33.83 23.13.33.3.33.83 13.33.3.33.83 33.3.33.83 3.33.83 33.83 83 {} {} {} {} 74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 4.94.84.74.34.34.44.74.64.14.34.84.84.44.34 94.84.74.34.34.44.74.64.14.34.84.84.44.34 84.74.34.34.44.74.64.14.34.84.84.44.34 74.34.34.44.74.64.14.34.84.84.44.34 34.34.44.74.64.14.34.84.84.44.34 34.44.74.64.14.34.84.84.44.34 44.74.64.14.34.84.84.44.34 74.64.14.34.84.84.44.34 64.14.34.84.84.44.34 14.34.84.84.44.34 34.84.84.44.34 84.84.44.34 84.44.34 44.34 34 {} {} {} {} 55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 75.95.65.65.35.5.15.95.55.75.85.75.15.95.5 95.65.65.35.5.15.95.55.75.85.75.15.95.5 65.65.35.5.15.95.55.75.85.75.15.95.5 65.35.5.15.95.55.75.85.75.15.95.5 35.5.15.95.55.75.85.75.15.95.5 5.15.95.55.75.85.75.15.95.5 15.95.55.75.85.75.15.95.5 95.55.75.85.75.15.95.5 55.75.85.75.15.95.5 75.85.75.15.95.5 85.75.15.95.5 75.15.95.5 15.95.5 95.5 5 {} {} {} {} 46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 86.56.56.56.16.36.76.96.96.26.26.36.66.36.36 56.56.56.16.36.76.96.96.26.26.36.66.36.36 56.56.16.36.76.96.96.26.26.36.66.36.36 56.16.36.76.96.96.26.26.36.66.36.36 16.36.76.96.96.26.26.36.66.36.36 36.76.96.96.26.26.36.66.36.36 76.96.96.26.26.36.66.36.36 96.96.26.26.36.66.36.36 96.26.26.36.66.36.36 26.26.36.66.36.36 26.36.66.36.36 36.66.36.36 66.36.36 36.36 36 {} {} {} {} 77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 47.7.47.87.37.87.77.7.57.47.47.37.27.17.7 7.47.87.37.87.77.7.57.47.47.37.27.17.7 47.87.37.87.77.7.57.47.47.37.27.17.7 87.37.87.77.7.57.47.47.37.27.17.7 37.87.77.7.57.47.47.37.27.17.7 87.77.7.57.47.47.37.27.17.7 77.7.57.47.47.37.27.17.7 7.57.47.47.37.27.17.7 57.47.47.37.27.17.7 47.47.37.27.17.7 47.37.27.17.7 37.27.17.7 27.17.7 17.7 7 {} {} {} {} 28.98.78.58.98.8.88.8.58.58.58.38 98.78.58.98.8.88.8.58.58.58.38 78.58.98.8.88.8.58.58.58.38 58.98.8.88.8.58.58.58.38 98.8.88.8.58.58.58.38 8.88.8.58.58.58.38 88.8.58.58.58.38 8.58.58.58.38 58.58.58.38 58.58.38 58.38 38 {} {} {} {} 99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.9.79.49.59.29.59.19.39.9.9.99.69.39 9.79.49.59.29.59.19.39.9.9.99.69.39 79.49.59.29.59.19.39.9.9.99.69.39 49.59.29.59.19.39.9.9.99.69.39 59.29.59.19.39.9.9.99.69.39 29.59.19.39.9.9.99.69.39 59.19.39.9.9.99.69.39 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39 9.99.69.39 99.69.39 69.39 39 {} {} {} {}} + +do_execsql_test 1.17.14.3 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {2.2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 2.3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 3.3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 3.4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 4.5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 5.5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 5.6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 6.7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 7.8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 8.9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 9.10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 10.11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 11.11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 11.12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 12.13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 13.13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 13.14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 14.15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 15.16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 16.17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 17.19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 19.20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 20.21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 21.21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 21.22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 22.22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 22.23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 23.24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 24.25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 25.26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 26.27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 27.27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 27.28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 28.29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 29.30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 30.31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 31.31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 31.32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 32.33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 33.34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 34.35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 35.35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 35.36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 36.37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 37.37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 37.38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 38.38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 38.39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 39.40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 40.41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 41.42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 42.43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 43.43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 43.44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 44.44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 44.46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 46.46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 46.47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 47.49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 49.50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 50.51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 51.52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 52.53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 53.54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 54.55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 55.55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 55.56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 56.57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 57.58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 58.59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 59.60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 60.61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 61.61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 61.62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 62.62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 62.63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 63.64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 64.65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 65.66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 66.67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 67.68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 68.69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 69.70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 70.72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 72.73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 73.74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 74.75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 75.76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 76.77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 77.77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 77.78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 78.78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 78.79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 79.80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 80.80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 80.81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 81.82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 82.83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 83.84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 84.85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 85.86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 86.87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 87.87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 87.88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 88.89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 89.90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 90.91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 91.93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 93.94.95.95.95.96.96.96.97.97.98.98.99.99.99 94.95.95.95.96.96.96.97.97.98.98.99.99.99 95.95.95.96.96.96.97.97.98.98.99.99.99 95.95.96.96.96.97.97.98.98.99.99.99 95.96.96.96.97.97.98.98.99.99.99 96.96.96.97.97.98.98.99.99.99 96.96.97.97.98.98.99.99.99 96.97.97.98.98.99.99.99 97.97.98.98.99.99.99 97.98.98.99.99.99 98.98.99.99.99 98.99.99.99 99.99.99 99.99 99 {} {} {} {}} + +do_execsql_test 1.17.14.4 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( PARTITION BY b%10 ORDER BY b,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {30.30.40.50.60.70.80.80.90.90.90 30.40.50.60.70.80.80.90.90.90 40.50.60.70.80.80.90.90.90 50.60.70.80.80.90.90.90 60.70.80.80.90.90.90 70.80.80.90.90.90 80.80.90.90.90 80.90.90.90 90.90.90 90.90 90 {} {} {} {} 21.21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 21.31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 31.31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 31.41.41.41.51.61.61.81.81.81.91.91.91.91.91 41.41.41.51.61.61.81.81.81.91.91.91.91.91 41.41.51.61.61.81.81.81.91.91.91.91.91 41.51.61.61.81.81.81.91.91.91.91.91 51.61.61.81.81.81.91.91.91.91.91 61.61.81.81.81.91.91.91.91.91 61.81.81.81.91.91.91.91.91 81.81.81.91.91.91.91.91 81.81.91.91.91.91.91 81.91.91.91.91.91 91.91.91.91.91 91.91.91.91 91.91.91 91.91 91 {} {} {} {} 12.12.22.22.32.42.52.62.62.72.72.72.82 12.22.22.32.42.52.62.62.72.72.72.82 22.22.32.42.52.62.62.72.72.72.82 22.32.42.52.62.62.72.72.72.82 32.42.52.62.62.72.72.72.82 42.52.62.62.72.72.72.82 52.62.62.72.72.72.82 62.62.72.72.72.82 62.72.72.72.82 72.72.72.82 72.72.82 72.82 82 {} {} {} {} 23.23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 23.33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.33.43.43.53.63.73.73.73.83.93.93.93 33.33.43.43.53.63.73.73.73.83.93.93.93 33.43.43.53.63.73.73.73.83.93.93.93 43.43.53.63.73.73.73.83.93.93.93 43.53.63.73.73.73.83.93.93.93 53.63.73.73.73.83.93.93.93 63.73.73.73.83.93.93.93 73.73.73.83.93.93.93 73.73.83.93.93.93 73.83.93.93.93 83.93.93.93 93.93.93 93.93 93 {} {} {} {} 34.34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 34.44.44.54.64.74.74.74.74.74.84.84.84.84.94 44.44.54.64.74.74.74.74.74.84.84.84.84.94 44.54.64.74.74.74.74.74.84.84.84.84.94 54.64.74.74.74.74.74.84.84.84.84.94 64.74.74.74.74.74.84.84.84.84.94 74.74.74.74.74.84.84.84.84.94 74.74.74.74.84.84.84.84.94 74.74.74.84.84.84.84.94 74.74.84.84.84.84.94 74.84.84.84.84.94 84.84.84.84.94 84.84.84.94 84.84.94 84.94 94 {} {} {} {} 15.25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 25.35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 35.35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 35.55.55.65.65.65.75.75.75.85.85.85.95.95.95 55.55.65.65.65.75.75.75.85.85.85.95.95.95 55.65.65.65.75.75.75.85.85.85.95.95.95 65.65.65.75.75.75.85.85.85.95.95.95 65.65.75.75.75.85.85.85.95.95.95 65.75.75.75.85.85.85.95.95.95 75.75.75.85.85.85.95.95.95 75.75.85.85.85.95.95.95 75.85.85.85.95.95.95 85.85.85.95.95.95 85.85.95.95.95 85.95.95.95 95.95.95 95.95 95 {} {} {} {} 26.26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 26.36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.36.46.46.56.56.56.66.76.86.96.96.96 36.36.46.46.56.56.56.66.76.86.96.96.96 36.46.46.56.56.56.66.76.86.96.96.96 46.46.56.56.56.66.76.86.96.96.96 46.56.56.56.66.76.86.96.96.96 56.56.56.66.76.86.96.96.96 56.56.66.76.86.96.96.96 56.66.76.86.96.96.96 66.76.86.96.96.96 76.86.96.96.96 86.96.96.96 96.96.96 96.96 96 {} {} {} {} 27.27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 27.37.37.47.47.47.47.57.67.77.77.87.87.97.97 37.37.47.47.47.47.57.67.77.77.87.87.97.97 37.47.47.47.47.57.67.77.77.87.87.97.97 47.47.47.47.57.67.77.77.87.87.97.97 47.47.47.57.67.77.77.87.87.97.97 47.47.57.67.77.77.87.87.97.97 47.57.67.77.77.87.87.97.97 57.67.77.77.87.87.97.97 67.77.77.87.87.97.97 77.77.87.87.97.97 77.87.87.97.97 87.87.97.97 87.97.97 97.97 97 {} {} {} {} 38.38.58.58.58.58.68.78.78.88.98.98 38.58.58.58.58.68.78.78.88.98.98 58.58.58.58.68.78.78.88.98.98 58.58.58.68.78.78.88.98.98 58.58.68.78.78.88.98.98 58.68.78.78.88.98.98 68.78.78.88.98.98 78.78.88.98.98 78.88.98.98 88.98.98 98.98 98 {} {} {} {} 29.29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 29.39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.39.49.59.59.59.59.69.79.89.89.89.99.99.99 39.49.59.59.59.59.69.79.89.89.89.99.99.99 49.59.59.59.59.69.79.89.89.89.99.99.99 59.59.59.59.69.79.89.89.89.99.99.99 59.59.59.69.79.89.89.89.99.99.99 59.59.69.79.89.89.89.99.99.99 59.69.79.89.89.89.99.99.99 69.79.89.89.89.99.99.99 79.89.89.89.99.99.99 89.89.89.99.99.99 89.89.99.99.99 89.99.99.99 99.99.99 99.99 99 {} {} {} {}} + +do_execsql_test 1.17.14.5 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER ( ORDER BY b%10,a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM t2 +} {80.20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 20.90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 60.70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 70.80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 80.90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 90.30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 50.10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 10.30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 30.41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 61.91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 1.81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 61.1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 1.21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 21.11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 11.51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 51.41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 41.31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 31.31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 31.11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 11.81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 81.91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 91.21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 21.2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 62.12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 32.22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 22.42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 42.2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 22.2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 2.72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 72.12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 12.62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 62.52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 52.82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 82.23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 43.3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 3.43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 43.33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 53.63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 63.73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 13.73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 73.33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 93.23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 23.13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 13.33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 3.33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 33.83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 83.74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 54.84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 24.4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 4.94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 94.84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 44.74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 74.64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 64.14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 14.34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 84.44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 44.34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 34.65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 35.85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 55.15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 25.75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 65.35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 35.5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 5.15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 55.75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 85.75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 75.15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 15.95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 95.5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 5.26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 46.6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 6.46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 46.16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 86.56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 56.16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 16.36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 76.96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 96.26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 26.36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 66.36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 36.97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 97.27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 27.97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 97.67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 67.77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 77.47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 87.37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 37.87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 87.77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 77.7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 57.47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 47.37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 37.27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 27.17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 17.7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 7.38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 38.68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 68.78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 78.8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 28.98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 98.78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 78.58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 98.8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 88.8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 8.58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 58.38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 38.99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 39.99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 99.29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 59.89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 89.29.9.79.49.59.29.59.19.39.9.9.99.69.39 29.9.79.49.59.29.59.19.39.9.9.99.69.39 9.79.49.59.29.59.19.39.9.9.99.69.39 79.49.59.29.59.19.39.9.9.99.69.39 49.59.29.59.19.39.9.9.99.69.39 59.29.59.19.39.9.9.99.69.39 29.59.19.39.9.9.99.69.39 59.19.39.9.9.99.69.39 19.39.9.9.99.69.39 39.9.9.99.69.39 9.9.99.69.39 9.99.69.39 99.69.39 69.39 39 {} {} {} {}} + +do_execsql_test 1.17.14.6 { + SELECT group_concat(CAST(b AS TEXT), '.') OVER (PARTITION BY b%2,a ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) FROM t2 +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 1.17.15.1 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) +} {197 99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 196 99.33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 195 33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 194 33.89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 193 89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 192 89.96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 191 96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 190 96.38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 189 38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 188 38.39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 187 39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 186 39.91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 185 91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 184 91.6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 183 6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 182 6.97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 181 97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 180 97.46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 179 46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 178 46.54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 177 54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 176 54.8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 175 8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 174 8.29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 173 29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 172 29.84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 171 84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 170 84.23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 169 23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 168 23.16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 167 16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 166 16.65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 165 65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 164 65.47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 163 47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 162 47.86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 161 86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 160 86.61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 159 61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 158 61.85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 157 85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 156 85.85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 155 85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 154 85.59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 153 59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 152 59.32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 151 32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 150 32.3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 149 3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 148 3.22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 147 22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 146 22.55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 145 55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 144 55.28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 143 28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 142 28.25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 141 25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 140 25.1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 139 1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 138 1.40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 137 40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 136 40.56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 135 56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 134 56.75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 133 75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 132 75.89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 131 89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 130 89.76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 129 76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 128 76.4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 127 4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 126 4.42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 125 42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 124 42.78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 123 78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 122 78.29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 121 29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 120 29.63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 119 63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 118 63.87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 117 87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 116 87.80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 115 80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 114 80.72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 113 72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 112 72.9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 111 9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 110 9.73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 109 73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 108 73.65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 107 65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 106 65.58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 105 58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 104 58.98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 103 98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 102 98.21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 101 21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 100 21.65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 99 65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 98 65.5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 97 5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 96 5.11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 95 11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 94 11.87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 93 87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 92 87.12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 91 12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 90 12.20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 89 20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 88 20.31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 87 31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 86 31.95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 85 95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 84 95.73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 83 73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 82 73.88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 81 88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 80 88.8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 79 8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 78 8.49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 77 49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 76 49.90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 75 90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 74 90.96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 73 96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 72 96.55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 71 55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 70 55.77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 69 77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 68 77.2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 67 2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 66 2.85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 65 85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 64 85.74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 63 74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 62 74.70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 61 70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 60 70.19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 59 19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 58 19.26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 57 26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 56 26.47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 55 47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 54 47.90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 53 90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 52 90.58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 51 58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 50 58.9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 49 9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 48 9.72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 47 72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 46 72.33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 45 33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 44 33.75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 43 75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 42 75.81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 41 81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 40 81.23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 39 23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 38 23.13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 37 13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 36 13.14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 35 14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 34 14.91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 33 91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 32 91.91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 31 91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 30 91.15.36.3.69.52.50.10.33.39.58.38.83.82.7 29 15.36.3.69.52.50.10.33.39.58.38.83.82.7 28 15.36.3.69.52.50.10.33.39.58.38.83.82.7 27 36.3.69.52.50.10.33.39.58.38.83.82.7 26 36.3.69.52.50.10.33.39.58.38.83.82.7 25 3.69.52.50.10.33.39.58.38.83.82.7 24 3.69.52.50.10.33.39.58.38.83.82.7 23 69.52.50.10.33.39.58.38.83.82.7 22 69.52.50.10.33.39.58.38.83.82.7 21 52.50.10.33.39.58.38.83.82.7 20 52.50.10.33.39.58.38.83.82.7 19 50.10.33.39.58.38.83.82.7 18 50.10.33.39.58.38.83.82.7 17 10.33.39.58.38.83.82.7 16 10.33.39.58.38.83.82.7 15 33.39.58.38.83.82.7 14 33.39.58.38.83.82.7 13 39.58.38.83.82.7 12 39.58.38.83.82.7 11 58.38.83.82.7 10 58.38.83.82.7 9 38.83.82.7 8 38.83.82.7 7 83.82.7 6 83.82.7 5 82.7 4 82.7 3 7 2 7 1 {} 0 {} 0 {} 0 {} 0 {}} + +do_execsql_test 1.17.15.2 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 0=1) OVER win FROM t2 + WINDOW win AS (ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) +} {197 {} 196 {} 195 {} 194 {} 193 {} 192 {} 191 {} 190 {} 189 {} 188 {} 187 {} 186 {} 185 {} 184 {} 183 {} 182 {} 181 {} 180 {} 179 {} 178 {} 177 {} 176 {} 175 {} 174 {} 173 {} 172 {} 171 {} 170 {} 169 {} 168 {} 167 {} 166 {} 165 {} 164 {} 163 {} 162 {} 161 {} 160 {} 159 {} 158 {} 157 {} 156 {} 155 {} 154 {} 153 {} 152 {} 151 {} 150 {} 149 {} 148 {} 147 {} 146 {} 145 {} 144 {} 143 {} 142 {} 141 {} 140 {} 139 {} 138 {} 137 {} 136 {} 135 {} 134 {} 133 {} 132 {} 131 {} 130 {} 129 {} 128 {} 127 {} 126 {} 125 {} 124 {} 123 {} 122 {} 121 {} 120 {} 119 {} 118 {} 117 {} 116 {} 115 {} 114 {} 113 {} 112 {} 111 {} 110 {} 109 {} 108 {} 107 {} 106 {} 105 {} 104 {} 103 {} 102 {} 101 {} 100 {} 99 {} 98 {} 97 {} 96 {} 95 {} 94 {} 93 {} 92 {} 91 {} 90 {} 89 {} 88 {} 87 {} 86 {} 85 {} 84 {} 83 {} 82 {} 81 {} 80 {} 79 {} 78 {} 77 {} 76 {} 75 {} 74 {} 73 {} 72 {} 71 {} 70 {} 69 {} 68 {} 67 {} 66 {} 65 {} 64 {} 63 {} 62 {} 61 {} 60 {} 59 {} 58 {} 57 {} 56 {} 55 {} 54 {} 53 {} 52 {} 51 {} 50 {} 49 {} 48 {} 47 {} 46 {} 45 {} 44 {} 43 {} 42 {} 41 {} 40 {} 39 {} 38 {} 37 {} 36 {} 35 {} 34 {} 33 {} 32 {} 31 {} 30 {} 29 {} 28 {} 27 {} 26 {} 25 {} 24 {} 23 {} 22 {} 21 {} 20 {} 19 {} 18 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {}} + +do_execsql_test 1.17.15.3 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE 1=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) +} {16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {}} + +do_execsql_test 1.17.15.4 { + SELECT count(*) OVER win, group_concat(CAST(b AS TEXT), '.') + FILTER (WHERE a%2=0) OVER win FROM t2 + WINDOW win AS (PARTITION BY (a%10) ORDER BY a ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) +} {16 59.28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 15 28.75.78.72.98.87.73.96.74.90.75.91.69.39.7 14 75.78.72.98.87.73.96.74.90.75.91.69.39.7 13 78.72.98.87.73.96.74.90.75.91.69.39.7 12 72.98.87.73.96.74.90.75.91.69.39.7 11 98.87.73.96.74.90.75.91.69.39.7 10 87.73.96.74.90.75.91.69.39.7 9 73.96.74.90.75.91.69.39.7 8 96.74.90.75.91.69.39.7 7 74.90.75.91.69.39.7 6 90.75.91.69.39.7 5 75.91.69.39.7 4 91.69.39.7 3 69.39.7 2 39.7 1 7 0 {} 0 {} 0 {} 0 {} 17 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 86.32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 15 32.25.89.29.9.21.12.88.55.70.58.81.91.52.58 14 25.89.29.9.21.12.88.55.70.58.81.91.52.58 13 89.29.9.21.12.88.55.70.58.81.91.52.58 12 29.9.21.12.88.55.70.58.81.91.52.58 11 9.21.12.88.55.70.58.81.91.52.58 10 21.12.88.55.70.58.81.91.52.58 9 12.88.55.70.58.81.91.52.58 8 88.55.70.58.81.91.52.58 7 55.70.58.81.91.52.58 6 70.58.81.91.52.58 5 58.81.91.52.58 4 81.91.52.58 3 91.52.58 2 52.58 1 58 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 61.3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 15 3.1.76.63.73.65.20.8.77.19.9.23.15.50.38 14 1.76.63.73.65.20.8.77.19.9.23.15.50.38 13 76.63.73.65.20.8.77.19.9.23.15.50.38 12 63.73.65.20.8.77.19.9.23.15.50.38 11 73.65.20.8.77.19.9.23.15.50.38 10 65.20.8.77.19.9.23.15.50.38 9 20.8.77.19.9.23.15.50.38 8 8.77.19.9.23.15.50.38 7 77.19.9.23.15.50.38 6 19.9.23.15.50.38 5 9.23.15.50.38 4 23.15.50.38 3 15.50.38 2 50.38 1 38 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 85.22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 15 22.40.4.87.65.5.31.49.2.26.72.13.36.10.83 14 40.4.87.65.5.31.49.2.26.72.13.36.10.83 13 4.87.65.5.31.49.2.26.72.13.36.10.83 12 87.65.5.31.49.2.26.72.13.36.10.83 11 65.5.31.49.2.26.72.13.36.10.83 10 5.31.49.2.26.72.13.36.10.83 9 31.49.2.26.72.13.36.10.83 8 49.2.26.72.13.36.10.83 7 2.26.72.13.36.10.83 6 26.72.13.36.10.83 5 72.13.36.10.83 4 13.36.10.83 3 36.10.83 2 10.83 1 83 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {} 16 85.55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 15 55.56.42.80.58.11.95.90.85.47.33.14.3.33.82 14 56.42.80.58.11.95.90.85.47.33.14.3.33.82 13 42.80.58.11.95.90.85.47.33.14.3.33.82 12 80.58.11.95.90.85.47.33.14.3.33.82 11 58.11.95.90.85.47.33.14.3.33.82 10 11.95.90.85.47.33.14.3.33.82 9 95.90.85.47.33.14.3.33.82 8 90.85.47.33.14.3.33.82 7 85.47.33.14.3.33.82 6 47.33.14.3.33.82 5 33.14.3.33.82 4 14.3.33.82 3 3.33.82 2 33.82 1 82 0 {} 0 {} 0 {} 0 {} 16 {} 15 {} 14 {} 13 {} 12 {} 11 {} 10 {} 9 {} 8 {} 7 {} 6 {} 5 {} 4 {} 3 {} 2 {} 1 {} 0 {} 0 {} 0 {} 0 {}} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/window4.tcl lxd-3.0.3/dist/sqlite/test/window4.tcl --- lxd-3.0.2/dist/sqlite/test/window4.tcl 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window4.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,390 @@ +# 2018 May 19 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +source [file join [file dirname $argv0] pg_common.tcl] + +#========================================================================= + +start_test window4 "2018 June 04" +ifcapable !windowfunc + +execsql_test 1.0 { + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a TEXT PRIMARY KEY); + INSERT INTO t3 VALUES('a'), ('b'), ('c'), ('d'), ('e'); + INSERT INTO t3 VALUES('f'), ('g'), ('h'), ('i'), ('j'); +} + +for {set i 1} {$i < 20} {incr i} { + execsql_test 1.$i "SELECT a, ntile($i) OVER (ORDER BY a) FROM t3" +} + +execsql_test 2.0 { + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(a INTEGER PRIMARY KEY, b TEXT, c INTEGER); + INSERT INTO t4 VALUES(1, 'A', 9); + INSERT INTO t4 VALUES(2, 'B', 3); + INSERT INTO t4 VALUES(3, 'C', 2); + INSERT INTO t4 VALUES(4, 'D', 10); + INSERT INTO t4 VALUES(5, 'E', 5); + INSERT INTO t4 VALUES(6, 'F', 1); + INSERT INTO t4 VALUES(7, 'G', 1); + INSERT INTO t4 VALUES(8, 'H', 2); + INSERT INTO t4 VALUES(9, 'I', 10); + INSERT INTO t4 VALUES(10, 'J', 4); +} + +execsql_test 2.1 { + SELECT a, nth_value(b, c) OVER (ORDER BY a) FROM t4 +} + +execsql_test 2.2.1 { + SELECT a, lead(b) OVER (ORDER BY a) FROM t4 +} +execsql_test 2.2.2 { + SELECT a, lead(b, 2) OVER (ORDER BY a) FROM t4 +} +execsql_test 2.2.3 { + SELECT a, lead(b, 3, 'abc') OVER (ORDER BY a) FROM t4 +} + +execsql_test 2.3.1 { + SELECT a, lag(b) OVER (ORDER BY a) FROM t4 +} +execsql_test 2.3.2 { + SELECT a, lag(b, 2) OVER (ORDER BY a) FROM t4 +} +execsql_test 2.3.3 { + SELECT a, lag(b, 3, 'abc') OVER (ORDER BY a) FROM t4 +} + +execsql_test 2.4.1 { + SELECT string_agg(b, '.') OVER ( + ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t4 +} + +execsql_test 3.0 { + DROP TABLE IF EXISTS t5; + CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER); + INSERT INTO t5 VALUES(1, 'A', 'one', 5); + INSERT INTO t5 VALUES(2, 'B', 'two', 4); + INSERT INTO t5 VALUES(3, 'A', 'three', 3); + INSERT INTO t5 VALUES(4, 'B', 'four', 2); + INSERT INTO t5 VALUES(5, 'A', 'five', 1); +} + +execsql_test 3.1 { + SELECT a, nth_value(c, d) OVER (ORDER BY b) FROM t5 +} + +execsql_test 3.2 { + SELECT a, nth_value(c, d) OVER (PARTITION BY b ORDER BY a) FROM t5 +} + +execsql_test 3.3 { + SELECT a, count(*) OVER abc, count(*) OVER def FROM t5 + WINDOW abc AS (ORDER BY a), + def AS (ORDER BY a DESC) + ORDER BY a; +} + +execsql_test 3.4 { + SELECT a, max(a) FILTER (WHERE (a%2)=0) OVER w FROM t5 + WINDOW w AS (ORDER BY a) +} + +execsql_test 3.5.1 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING) + FROM t5 +} +execsql_test 3.5.2 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM t5 +} +execsql_test 3.5.3 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING) + FROM t5 +} + +execsql_test 3.6.1 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING) + FROM t5 +} +execsql_test 3.6.2 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) + FROM t5 +} +execsql_test 3.6.3 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING) + FROM t5 +} + +========== + +execsql_test 4.0 { + DROP TABLE IF EXISTS ttt; + CREATE TABLE ttt(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER); + INSERT INTO ttt VALUES(1, 1, 1); + INSERT INTO ttt VALUES(2, 2, 2); + INSERT INTO ttt VALUES(3, 3, 3); + + INSERT INTO ttt VALUES(4, 1, 2); + INSERT INTO ttt VALUES(5, 2, 3); + INSERT INTO ttt VALUES(6, 3, 4); + + INSERT INTO ttt VALUES(7, 1, 3); + INSERT INTO ttt VALUES(8, 2, 4); + INSERT INTO ttt VALUES(9, 3, 5); +} + +execsql_test 4.1 { + SELECT max(c), max(b) OVER (ORDER BY b) FROM ttt GROUP BY b; +} + +execsql_test 4.2 { + SELECT max(b) OVER (ORDER BY max(c)) FROM ttt GROUP BY b; +} + +execsql_test 4.3 { + SELECT abs(max(b) OVER (ORDER BY b)) FROM ttt GROUP BY b; +} + +execsql_test 4.4 { + SELECT sum(b) OVER ( + ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM ttt; +} + +set lPart [list "PARTITION BY b" "PARTITION BY b, a" "" "PARTITION BY a"] +set lOrder [list "ORDER BY a" "ORDER BY a DESC" "" "ORDER BY b, a"] +set lRange { + "RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW" + "RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING" + "RANGE BETWEEN CURRENT ROW AND CURRENT ROW" + "RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING" +} + +set lRows { + "ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING" + "ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING" + "ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING" + "ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING" + "ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING" +} + +set tn 1 +set SQL { + SELECT max(c) OVER ($p1 $o1 $r1), + min(c) OVER ($p2 $o2 $r2) + FROM ttt ORDER BY a +} +set SQL2 { + SELECT sum(c) OVER ($p1 $o1 $r1), + sum(c) OVER ($p2 $o2 $r2) + FROM ttt ORDER BY a +} + +set o1 [lindex $lOrder 0] +set o2 [lindex $lOrder 0] +set r1 [lindex $lRange 0] +set r2 [lindex $lRange 0] +foreach p1 $lPart { foreach p2 $lPart { + execsql_test 4.5.$tn.1 [subst $SQL] + execsql_test 4.5.$tn.2 [subst $SQL2] + incr tn +}} + +set o1 [lindex $lOrder 0] +set o2 [lindex $lOrder 0] +set p1 [lindex $lPart 0] +set p2 [lindex $lPart 0] +foreach r1 $lRange { foreach r2 $lRange { + execsql_test 4.5.$tn.1 [subst $SQL] + execsql_test 4.5.$tn.2 [subst $SQL2] + incr tn +}} +foreach r1 $lRows { foreach r2 $lRows { + execsql_test 4.5.$tn.1 [subst $SQL] + execsql_test 4.5.$tn.2 [subst $SQL2] + incr tn +}} + +set r1 [lindex $lRange 0] +set r2 [lindex $lRange 0] +set p1 [lindex $lPart 0] +set p2 [lindex $lPart 0] +foreach o1 $lOrder { foreach o2 $lOrder { + execsql_test 4.5.$tn.1 [subst $SQL] + execsql_test 4.5.$tn.2 [subst $SQL2] + incr tn +}} + +========== + +execsql_test 7.0 { + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x INTEGER, y INTEGER); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + INSERT INTO t1 VALUES(7, 8); + INSERT INTO t1 VALUES(9, 10); +} + +execsql_test 7.1 { + SELECT lead(y) OVER win FROM t1 + WINDOW win AS (ORDER BY x) +} + +execsql_test 7.2 { + SELECT lead(y, 2) OVER win FROM t1 + WINDOW win AS (ORDER BY x) +} + +execsql_test 7.3 { + SELECT lead(y, 3, -1) OVER win FROM t1 + WINDOW win AS (ORDER BY x) +} + +execsql_test 7.4 { + SELECT + lead(y) OVER win, lead(y) OVER win + FROM t1 + WINDOW win AS (ORDER BY x) +} + +execsql_test 7.5 { + SELECT + lead(y) OVER win, + lead(y, 2) OVER win, + lead(y, 3, -1) OVER win + FROM t1 + WINDOW win AS (ORDER BY x) +} + +========== + +execsql_test 8.0 { + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER, d INTEGER); + INSERT INTO t1 VALUES(1, 2, 3, 4); + INSERT INTO t1 VALUES(5, 6, 7, 8); + INSERT INTO t1 VALUES(9, 10, 11, 12); +} + +execsql_test 8.1 { + SELECT row_number() OVER win, + nth_value(d,2) OVER win, + lead(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a) +} + +execsql_test 8.2 { + SELECT row_number() OVER win, + rank() OVER win, + dense_rank() OVER win, + ntile(2) OVER win, + first_value(d) OVER win, + last_value(d) OVER win, + nth_value(d,2) OVER win, + lead(d) OVER win, + lag(d) OVER win, + max(d) OVER win, + min(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a) +} + +========== + +execsql_test 9.0 { + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x INTEGER); + INSERT INTO t2 VALUES(1), (1), (1), (4), (4), (6), (7); +} + +execsql_test 9.1 { + SELECT rank() OVER () FROM t2 +} +execsql_test 9.2 { + SELECT dense_rank() OVER (PARTITION BY x) FROM t2 +} +execsql_float_test 9.3 { + SELECT x, percent_rank() OVER (PARTITION BY x ORDER BY x) FROM t2 +} + +execsql_test 9.4 { + SELECT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2 +} + +execsql_test 9.5 { + SELECT DISTINCT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2 +} + +execsql_float_test 9.6 { + SELECT percent_rank() OVER () FROM t1 +} + +execsql_float_test 9.7 { + SELECT cume_dist() OVER () FROM t1 +} + +execsql_test 10.0 { + DROP TABLE IF EXISTS t7; + CREATE TABLE t7(id INTEGER PRIMARY KEY, a INTEGER, b INTEGER); + INSERT INTO t7(id, a, b) VALUES + (1, 1, 2), (2, 1, NULL), (3, 1, 4), + (4, 3, NULL), (5, 3, 8), (6, 3, 1); +} +execsql_test 10.1 { + SELECT id, min(b) OVER (PARTITION BY a ORDER BY id) FROM t7; +} + +execsql_test 10.2 { + SELECT id, lead(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7; +} +execsql_test 10.3 { + SELECT id, lag(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7; +} + +execsql_test 11.0 { + DROP VIEW IF EXISTS v8; + DROP TABLE IF EXISTS t8; + CREATE TABLE t8(t INT, total INT); + INSERT INTO t8 VALUES(0,2); + INSERT INTO t8 VALUES(5,1); + INSERT INTO t8 VALUES(10,1); +} + +execsql_test 11.1 { + SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8; +} + +execsql_test 11.2 { + CREATE VIEW v8 AS SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8; +} + +execsql_test 11.3 { + SELECT * FROM v8; +} + +execsql_test 11.4 { + SELECT * FROM ( + SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8 + ) sub; +} + + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/window4.test lxd-3.0.3/dist/sqlite/test/window4.test --- lxd-3.0.2/dist/sqlite/test/window4.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window4.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,1320 @@ +# 2018 June 04 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. +# + +#################################################### +# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED! +#################################################### + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix window4 + +ifcapable !windowfunc { finish_test ; return } +do_execsql_test 1.0 { + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a TEXT PRIMARY KEY); + INSERT INTO t3 VALUES('a'), ('b'), ('c'), ('d'), ('e'); + INSERT INTO t3 VALUES('f'), ('g'), ('h'), ('i'), ('j'); +} {} + +do_execsql_test 1.1 { + SELECT a, ntile(1) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 1 d 1 e 1 f 1 g 1 h 1 i 1 j 1} + +do_execsql_test 1.2 { + SELECT a, ntile(2) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 1 d 1 e 1 f 2 g 2 h 2 i 2 j 2} + +do_execsql_test 1.3 { + SELECT a, ntile(3) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 1 d 1 e 2 f 2 g 2 h 3 i 3 j 3} + +do_execsql_test 1.4 { + SELECT a, ntile(4) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 1 d 2 e 2 f 2 g 3 h 3 i 4 j 4} + +do_execsql_test 1.5 { + SELECT a, ntile(5) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 2 d 2 e 3 f 3 g 4 h 4 i 5 j 5} + +do_execsql_test 1.6 { + SELECT a, ntile(6) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 2 d 2 e 3 f 3 g 4 h 4 i 5 j 6} + +do_execsql_test 1.7 { + SELECT a, ntile(7) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 2 d 2 e 3 f 3 g 4 h 5 i 6 j 7} + +do_execsql_test 1.8 { + SELECT a, ntile(8) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 2 d 2 e 3 f 4 g 5 h 6 i 7 j 8} + +do_execsql_test 1.9 { + SELECT a, ntile(9) OVER (ORDER BY a) FROM t3 +} {a 1 b 1 c 2 d 3 e 4 f 5 g 6 h 7 i 8 j 9} + +do_execsql_test 1.10 { + SELECT a, ntile(10) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.11 { + SELECT a, ntile(11) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.12 { + SELECT a, ntile(12) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.13 { + SELECT a, ntile(13) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.14 { + SELECT a, ntile(14) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.15 { + SELECT a, ntile(15) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.16 { + SELECT a, ntile(16) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.17 { + SELECT a, ntile(17) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.18 { + SELECT a, ntile(18) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 1.19 { + SELECT a, ntile(19) OVER (ORDER BY a) FROM t3 +} {a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10} + +do_execsql_test 2.0 { + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(a INTEGER PRIMARY KEY, b TEXT, c INTEGER); + INSERT INTO t4 VALUES(1, 'A', 9); + INSERT INTO t4 VALUES(2, 'B', 3); + INSERT INTO t4 VALUES(3, 'C', 2); + INSERT INTO t4 VALUES(4, 'D', 10); + INSERT INTO t4 VALUES(5, 'E', 5); + INSERT INTO t4 VALUES(6, 'F', 1); + INSERT INTO t4 VALUES(7, 'G', 1); + INSERT INTO t4 VALUES(8, 'H', 2); + INSERT INTO t4 VALUES(9, 'I', 10); + INSERT INTO t4 VALUES(10, 'J', 4); +} {} + +do_execsql_test 2.1 { + SELECT a, nth_value(b, c) OVER (ORDER BY a) FROM t4 +} {1 {} 2 {} 3 B 4 {} 5 E 6 A 7 A 8 B 9 {} 10 D} + +do_execsql_test 2.2.1 { + SELECT a, lead(b) OVER (ORDER BY a) FROM t4 +} {1 B 2 C 3 D 4 E 5 F 6 G 7 H 8 I 9 J 10 {}} + +do_execsql_test 2.2.2 { + SELECT a, lead(b, 2) OVER (ORDER BY a) FROM t4 +} {1 C 2 D 3 E 4 F 5 G 6 H 7 I 8 J 9 {} 10 {}} + +do_execsql_test 2.2.3 { + SELECT a, lead(b, 3, 'abc') OVER (ORDER BY a) FROM t4 +} {1 D 2 E 3 F 4 G 5 H 6 I 7 J 8 abc 9 abc 10 abc} + +do_execsql_test 2.3.1 { + SELECT a, lag(b) OVER (ORDER BY a) FROM t4 +} {1 {} 2 A 3 B 4 C 5 D 6 E 7 F 8 G 9 H 10 I} + +do_execsql_test 2.3.2 { + SELECT a, lag(b, 2) OVER (ORDER BY a) FROM t4 +} {1 {} 2 {} 3 A 4 B 5 C 6 D 7 E 8 F 9 G 10 H} + +do_execsql_test 2.3.3 { + SELECT a, lag(b, 3, 'abc') OVER (ORDER BY a) FROM t4 +} {1 abc 2 abc 3 abc 4 A 5 B 6 C 7 D 8 E 9 F 10 G} + +do_execsql_test 2.4.1 { + SELECT group_concat(b, '.') OVER ( + ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t4 +} {A.B.C.D.E.F.G.H.I.J B.C.D.E.F.G.H.I.J C.D.E.F.G.H.I.J D.E.F.G.H.I.J E.F.G.H.I.J F.G.H.I.J G.H.I.J H.I.J I.J J} + +do_execsql_test 3.0 { + DROP TABLE IF EXISTS t5; + CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER); + INSERT INTO t5 VALUES(1, 'A', 'one', 5); + INSERT INTO t5 VALUES(2, 'B', 'two', 4); + INSERT INTO t5 VALUES(3, 'A', 'three', 3); + INSERT INTO t5 VALUES(4, 'B', 'four', 2); + INSERT INTO t5 VALUES(5, 'A', 'five', 1); +} {} + +do_execsql_test 3.1 { + SELECT a, nth_value(c, d) OVER (ORDER BY b) FROM t5 +} {1 {} 3 five 5 one 2 two 4 three} + +do_execsql_test 3.2 { + SELECT a, nth_value(c, d) OVER (PARTITION BY b ORDER BY a) FROM t5 +} {1 {} 3 {} 5 one 2 {} 4 four} + +do_execsql_test 3.3 { + SELECT a, count(*) OVER abc, count(*) OVER def FROM t5 + WINDOW abc AS (ORDER BY a), + def AS (ORDER BY a DESC) + ORDER BY a; +} {1 1 5 2 2 4 3 3 3 4 4 2 5 5 1} + +do_execsql_test 3.4 { + SELECT a, max(a) FILTER (WHERE (a%2)=0) OVER w FROM t5 + WINDOW w AS (ORDER BY a) +} {1 {} 2 2 3 2 4 4 5 4} + +do_execsql_test 3.5.1 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING) + FROM t5 +} {1 {} 2 {} 3 {} 4 {} 5 {}} + +do_execsql_test 3.5.2 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM t5 +} {1 {} 2 one 3 two 4 three 5 four} + +do_execsql_test 3.5.3 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING) + FROM t5 +} {1 one 2 two 3 three 4 four 5 five} + +do_execsql_test 3.6.1 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING) + FROM t5 +} {1 {} 2 {} 3 {} 4 {} 5 {}} + +do_execsql_test 3.6.2 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) + FROM t5 +} {1 two 2 three 3 four 4 five 5 {}} + +do_execsql_test 3.6.3 { + SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING) + FROM t5 +} {1 one 2 two 3 three 4 four 5 five} + +#========================================================================== + +do_execsql_test 4.0 { + DROP TABLE IF EXISTS ttt; + CREATE TABLE ttt(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER); + INSERT INTO ttt VALUES(1, 1, 1); + INSERT INTO ttt VALUES(2, 2, 2); + INSERT INTO ttt VALUES(3, 3, 3); + + INSERT INTO ttt VALUES(4, 1, 2); + INSERT INTO ttt VALUES(5, 2, 3); + INSERT INTO ttt VALUES(6, 3, 4); + + INSERT INTO ttt VALUES(7, 1, 3); + INSERT INTO ttt VALUES(8, 2, 4); + INSERT INTO ttt VALUES(9, 3, 5); +} {} + +do_execsql_test 4.1 { + SELECT max(c), max(b) OVER (ORDER BY b) FROM ttt GROUP BY b; +} {3 1 4 2 5 3} + +do_execsql_test 4.2 { + SELECT max(b) OVER (ORDER BY max(c)) FROM ttt GROUP BY b; +} {1 2 3} + +do_execsql_test 4.3 { + SELECT abs(max(b) OVER (ORDER BY b)) FROM ttt GROUP BY b; +} {1 2 3} + +do_execsql_test 4.4 { + SELECT sum(b) OVER ( + ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM ttt; +} {18 17 15 12 11 9 6 5 3} + +do_execsql_test 4.5.1.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.1.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 3 5 5 7 7 6 6 9 9 12 12} + +do_execsql_test 4.5.2.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.2.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 2 5 3 7 4 6 3 9 4 12 5} + +do_execsql_test 4.5.3.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 1 3 1 2 1 3 1 4 1 3 1 4 1 5 1} + +do_execsql_test 4.5.3.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 3 3 6 3 8 5 11 7 15 6 18 9 22 12 27} + +do_execsql_test 4.5.4.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.4.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 2 5 3 7 4 6 3 9 4 12 5} + +do_execsql_test 4.5.5.1 { + SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.5.2 { + SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 3 3 5 4 7 3 6 4 9 5 12} + +do_execsql_test 4.5.6.1 { + SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.6.2 { + SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.7.1 { + SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 1 3 1 2 1 3 1 4 1 3 1 4 1 5 1} + +do_execsql_test 4.5.7.2 { + SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 3 3 6 2 8 3 11 4 15 3 18 4 22 5 27} + +do_execsql_test 4.5.8.1 { + SELECT max(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.8.2 { + SELECT sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.9.1 { + SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 1 3 2 4 3 4 1 4 2 5 3} + +do_execsql_test 4.5.9.2 { + SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 3 2 6 3 8 3 11 5 15 7 18 6 22 9 27 12} + +do_execsql_test 4.5.10.1 { + SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 2 3 3 4 4 4 3 4 4 5 5} + +do_execsql_test 4.5.10.2 { + SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 3 2 6 3 8 2 11 3 15 4 18 3 22 4 27 5} + +do_execsql_test 4.5.11.1 { + SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 1 3 1 3 1 3 1 4 1 4 1 4 1 5 1} + +do_execsql_test 4.5.11.2 { + SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 3 3 6 6 8 8 11 11 15 15 18 18 22 22 27 27} + +do_execsql_test 4.5.12.1 { + SELECT max(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 2 3 3 4 4 4 3 4 4 5 5} + +do_execsql_test 4.5.12.2 { + SELECT sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 3 2 6 3 8 2 11 3 15 4 18 3 22 4 27 5} + +do_execsql_test 4.5.13.1 { + SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.13.2 { + SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 3 3 5 4 7 3 6 4 9 5 12} + +do_execsql_test 4.5.14.1 { + SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.14.2 { + SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b, a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.15.1 { + SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 1 3 1 2 1 3 1 4 1 3 1 4 1 5 1} + +do_execsql_test 4.5.15.2 { + SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER ( ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 3 3 6 2 8 3 11 4 15 3 18 4 22 5 27} + +do_execsql_test 4.5.16.1 { + SELECT max(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.16.2 { + SELECT sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY a ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.17.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.17.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 3 5 5 7 7 6 6 9 9 12 12} + +do_execsql_test 4.5.18.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.18.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {1 6 2 9 3 12 3 6 5 9 7 12 6 6 9 9 12 12} + +do_execsql_test 4.5.19.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.19.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 2 5 3 7 4 6 3 9 4 12 5} + +do_execsql_test 4.5.20.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.20.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {1 6 2 9 3 12 3 5 5 7 7 9 6 3 9 4 12 5} + +do_execsql_test 4.5.21.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.21.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 1 9 2 12 3 6 3 9 5 12 7 6 6 9 9 12 12} + +do_execsql_test 4.5.22.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.22.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 6 6 9 9 12 12 6 6 9 9 12 12} + +do_execsql_test 4.5.23.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5} + +do_execsql_test 4.5.23.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 1 9 2 12 3 6 2 9 3 12 4 6 3 9 4 12 5} + +do_execsql_test 4.5.24.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5} + +do_execsql_test 4.5.24.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 6 5 9 7 12 9 6 3 9 4 12 5} + +do_execsql_test 4.5.25.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.25.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 3 3 5 4 7 3 6 4 9 5 12} + +do_execsql_test 4.5.26.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.26.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {1 6 2 9 3 12 2 6 3 9 4 12 3 6 4 9 5 12} + +do_execsql_test 4.5.27.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.27.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.28.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.28.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {1 6 2 9 3 12 2 5 3 7 4 9 3 3 4 4 5 5} + +do_execsql_test 4.5.29.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.29.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 1 9 2 12 3 5 3 7 5 9 7 3 6 4 9 5 12} + +do_execsql_test 4.5.30.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.30.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 5 6 7 9 9 12 3 6 4 9 5 12} + +do_execsql_test 4.5.31.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5} + +do_execsql_test 4.5.31.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 1 9 2 12 3 5 2 7 3 9 4 3 3 4 4 5 5} + +do_execsql_test 4.5.32.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5} + +do_execsql_test 4.5.32.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 5 5 7 7 9 9 3 3 4 4 5 5} + +do_execsql_test 4.5.33.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {2 1 3 2 4 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.33.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {3 3 5 5 7 7 6 6 9 9 12 12 6 6 9 9 12 12} + +do_execsql_test 4.5.34.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {2 1 3 2 4 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.34.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {3 6 5 9 7 12 6 6 9 9 12 12 6 6 9 9 12 12} + +do_execsql_test 4.5.35.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {2 {} 3 {} 4 {} 3 1 4 2 5 3 3 2 4 3 5 4} + +do_execsql_test 4.5.35.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {3 {} 5 {} 7 {} 6 1 9 2 12 3 6 2 9 3 12 4} + +do_execsql_test 4.5.36.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {2 {} 3 {} 4 {} 3 {} 4 {} 5 {} 3 {} 4 {} 5 {}} + +do_execsql_test 4.5.36.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {3 {} 5 {} 7 {} 6 {} 9 {} 12 {} 6 {} 9 {} 12 {}} + +do_execsql_test 4.5.37.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {2 2 3 3 4 4 3 3 4 4 5 5 3 {} 4 {} 5 {}} + +do_execsql_test 4.5.37.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {3 5 5 7 7 9 6 3 9 4 12 5 6 {} 9 {} 12 {}} + +do_execsql_test 4.5.38.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.38.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {6 3 9 5 12 7 6 6 9 9 12 12 6 6 9 9 12 12} + +do_execsql_test 4.5.39.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.39.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 6 6 9 9 12 12 6 6 9 9 12 12} + +do_execsql_test 4.5.40.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {3 {} 4 {} 5 {} 3 1 4 2 5 3 3 2 4 3 5 4} + +do_execsql_test 4.5.40.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {6 {} 9 {} 12 {} 6 1 9 2 12 3 6 2 9 3 12 4} + +do_execsql_test 4.5.41.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {3 {} 4 {} 5 {} 3 {} 4 {} 5 {} 3 {} 4 {} 5 {}} + +do_execsql_test 4.5.41.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {6 {} 9 {} 12 {} 6 {} 9 {} 12 {} 6 {} 9 {} 12 {}} + +do_execsql_test 4.5.42.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {3 2 4 3 5 4 3 3 4 4 5 5 3 {} 4 {} 5 {}} + +do_execsql_test 4.5.42.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {6 5 9 7 12 9 6 3 9 4 12 5 6 {} 9 {} 12 {}} + +do_execsql_test 4.5.43.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {{} 1 {} 2 {} 3 1 1 2 2 3 3 2 1 3 2 4 3} + +do_execsql_test 4.5.43.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {{} 3 {} 5 {} 7 1 6 2 9 3 12 2 6 3 9 4 12} + +do_execsql_test 4.5.44.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {{} 1 {} 2 {} 3 1 1 2 2 3 3 2 1 3 2 4 3} + +do_execsql_test 4.5.44.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {{} 6 {} 9 {} 12 1 6 2 9 3 12 2 6 3 9 4 12} + +do_execsql_test 4.5.45.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {{} {} {} {} {} {} 1 1 2 2 3 3 2 2 3 3 4 4} + +do_execsql_test 4.5.45.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {{} {} {} {} {} {} 1 1 2 2 3 3 2 2 3 3 4 4} + +do_execsql_test 4.5.46.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {{} {} {} {} {} {} 1 {} 2 {} 3 {} 2 {} 3 {} 4 {}} + +do_execsql_test 4.5.46.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {{} {} {} {} {} {} 1 {} 2 {} 3 {} 2 {} 3 {} 4 {}} + +do_execsql_test 4.5.47.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {{} 2 {} 3 {} 4 1 3 2 4 3 5 2 {} 3 {} 4 {}} + +do_execsql_test 4.5.47.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {{} 5 {} 7 {} 9 1 3 2 4 3 5 2 {} 3 {} 4 {}} + +do_execsql_test 4.5.48.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {{} 1 {} 2 {} 3 {} 1 {} 2 {} 3 {} 1 {} 2 {} 3} + +do_execsql_test 4.5.48.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {{} 3 {} 5 {} 7 {} 6 {} 9 {} 12 {} 6 {} 9 {} 12} + +do_execsql_test 4.5.49.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {{} 1 {} 2 {} 3 {} 1 {} 2 {} 3 {} 1 {} 2 {} 3} + +do_execsql_test 4.5.49.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {{} 6 {} 9 {} 12 {} 6 {} 9 {} 12 {} 6 {} 9 {} 12} + +do_execsql_test 4.5.50.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {{} {} {} {} {} {} {} 1 {} 2 {} 3 {} 2 {} 3 {} 4} + +do_execsql_test 4.5.50.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {{} {} {} {} {} {} {} 1 {} 2 {} 3 {} 2 {} 3 {} 4} + +do_execsql_test 4.5.51.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 4.5.51.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}} + +do_execsql_test 4.5.52.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {{} 2 {} 3 {} 4 {} 3 {} 4 {} 5 {} {} {} {} {} {}} + +do_execsql_test 4.5.52.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {{} 5 {} 7 {} 9 {} 3 {} 4 {} 5 {} {} {} {} {} {}} + +do_execsql_test 4.5.53.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 {} 1 {} 2 {} 3} + +do_execsql_test 4.5.53.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) + FROM ttt ORDER BY a +} {5 3 7 5 9 7 3 6 4 9 5 12 {} 6 {} 9 {} 12} + +do_execsql_test 4.5.54.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 {} 1 {} 2 {} 3} + +do_execsql_test 4.5.54.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING) + FROM ttt ORDER BY a +} {5 6 7 9 9 12 3 6 4 9 5 12 {} 6 {} 9 {} 12} + +do_execsql_test 4.5.55.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {3 {} 4 {} 5 {} 3 1 4 2 5 3 {} 2 {} 3 {} 4} + +do_execsql_test 4.5.55.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {5 {} 7 {} 9 {} 3 1 4 2 5 3 {} 2 {} 3 {} 4} + +do_execsql_test 4.5.56.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {3 {} 4 {} 5 {} 3 {} 4 {} 5 {} {} {} {} {} {} {}} + +do_execsql_test 4.5.56.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING) + FROM ttt ORDER BY a +} {5 {} 7 {} 9 {} 3 {} 4 {} 5 {} {} {} {} {} {} {}} + +do_execsql_test 4.5.57.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + min(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {3 2 4 3 5 4 3 3 4 4 5 5 {} {} {} {} {} {}} + +do_execsql_test 4.5.57.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING), + sum(c) OVER (PARTITION BY b ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING) + FROM ttt ORDER BY a +} {5 5 7 7 9 9 3 3 4 4 5 5 {} {} {} {} {} {}} + +do_execsql_test 4.5.58.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.58.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 3 5 5 7 7 6 6 9 9 12 12} + +do_execsql_test 4.5.59.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.59.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 6 2 9 3 12 3 5 5 7 7 9 6 3 9 4 12 5} + +do_execsql_test 4.5.60.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.60.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 6 2 9 3 12 3 6 5 9 7 12 6 6 9 9 12 12} + +do_execsql_test 4.5.61.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.61.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 3 5 5 7 7 6 6 9 9 12 12} + +do_execsql_test 4.5.62.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.62.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 1 9 2 12 3 5 3 7 5 9 7 3 6 4 9 5 12} + +do_execsql_test 4.5.63.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5} + +do_execsql_test 4.5.63.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 5 5 7 7 9 9 3 3 4 4 5 5} + +do_execsql_test 4.5.64.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.64.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 5 6 7 9 9 12 3 6 4 9 5 12} + +do_execsql_test 4.5.65.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.65.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 1 9 2 12 3 5 3 7 5 9 7 3 6 4 9 5 12} + +do_execsql_test 4.5.66.1 { + SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.66.2 { + SELECT sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 1 9 2 12 3 6 3 9 5 12 7 6 6 9 9 12 12} + +do_execsql_test 4.5.67.1 { + SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 2 4 3 5 4 3 3 4 4 5 5} + +do_execsql_test 4.5.67.2 { + SELECT sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 6 5 9 7 12 9 6 3 9 4 12 5} + +do_execsql_test 4.5.68.1 { + SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.68.2 { + SELECT sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 6 9 9 12 12 6 6 9 9 12 12 6 6 9 9 12 12} + +do_execsql_test 4.5.69.1 { + SELECT max(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {3 1 4 2 5 3 3 1 4 2 5 3 3 1 4 2 5 3} + +do_execsql_test 4.5.69.2 { + SELECT sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {6 1 9 2 12 3 6 3 9 5 12 7 6 6 9 9 12 12} + +do_execsql_test 4.5.70.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.70.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 3 5 5 7 7 6 6 9 9 12 12} + +do_execsql_test 4.5.71.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 2 3 3 4 4 3 3 4 4 5 5} + +do_execsql_test 4.5.71.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY a DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 6 2 9 3 12 3 5 5 7 7 9 6 3 9 4 12 5} + +do_execsql_test 4.5.72.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.72.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 6 2 9 3 12 3 6 5 9 7 12 6 6 9 9 12 12} + +do_execsql_test 4.5.73.1 { + SELECT max(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + min(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 2 1 3 2 4 3 3 1 4 2 5 3} + +do_execsql_test 4.5.73.2 { + SELECT sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), + sum(c) OVER (PARTITION BY b ORDER BY b, a RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM ttt ORDER BY a +} {1 1 2 2 3 3 3 3 5 5 7 7 6 6 9 9 12 12} + +#========================================================================== + +do_execsql_test 7.0 { + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x INTEGER, y INTEGER); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + INSERT INTO t1 VALUES(7, 8); + INSERT INTO t1 VALUES(9, 10); +} {} + +do_execsql_test 7.1 { + SELECT lead(y) OVER win FROM t1 + WINDOW win AS (ORDER BY x) +} {4 6 8 10 {}} + +do_execsql_test 7.2 { + SELECT lead(y, 2) OVER win FROM t1 + WINDOW win AS (ORDER BY x) +} {6 8 10 {} {}} + +do_execsql_test 7.3 { + SELECT lead(y, 3, -1) OVER win FROM t1 + WINDOW win AS (ORDER BY x) +} {8 10 -1 -1 -1} + +do_execsql_test 7.4 { + SELECT + lead(y) OVER win, lead(y) OVER win + FROM t1 + WINDOW win AS (ORDER BY x) +} {4 4 6 6 8 8 10 10 {} {}} + +do_execsql_test 7.5 { + SELECT + lead(y) OVER win, + lead(y, 2) OVER win, + lead(y, 3, -1) OVER win + FROM t1 + WINDOW win AS (ORDER BY x) +} {4 6 8 6 8 10 8 10 -1 10 {} -1 {} {} -1} + +#========================================================================== + +do_execsql_test 8.0 { + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER, d INTEGER); + INSERT INTO t1 VALUES(1, 2, 3, 4); + INSERT INTO t1 VALUES(5, 6, 7, 8); + INSERT INTO t1 VALUES(9, 10, 11, 12); +} {} + +do_execsql_test 8.1 { + SELECT row_number() OVER win, + nth_value(d,2) OVER win, + lead(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a) +} {1 {} 8 2 8 12 3 8 {}} + +do_execsql_test 8.2 { + SELECT row_number() OVER win, + rank() OVER win, + dense_rank() OVER win, + ntile(2) OVER win, + first_value(d) OVER win, + last_value(d) OVER win, + nth_value(d,2) OVER win, + lead(d) OVER win, + lag(d) OVER win, + max(d) OVER win, + min(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a) +} {1 1 1 1 4 4 {} 8 {} 4 4 2 2 2 1 4 8 8 12 4 8 4 3 3 3 2 4 12 8 {} 8 12 4} + +#========================================================================== + +do_execsql_test 9.0 { + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x INTEGER); + INSERT INTO t2 VALUES(1), (1), (1), (4), (4), (6), (7); +} {} + +do_execsql_test 9.1 { + SELECT rank() OVER () FROM t2 +} {1 1 1 1 1 1 1} + +do_execsql_test 9.2 { + SELECT dense_rank() OVER (PARTITION BY x) FROM t2 +} {1 1 1 1 1 1 1} + + +do_test 9.3 { + set myres {} + foreach r [db eval {SELECT x, percent_rank() OVER (PARTITION BY x ORDER BY x) FROM t2}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 0.0000 1.0000 0.0000 1.0000 0.0000 4.0000 0.0000 4.0000 0.0000 6.0000 0.0000 7.0000 0.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 9.4 { + SELECT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2 +} {1 1 1 1 1 1 4 4 4 4 6 6 7 7} + +do_execsql_test 9.5 { + SELECT DISTINCT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2 +} {1 1 4 4 6 6 7 7} + + +do_test 9.6 { + set myres {} + foreach r [db eval {SELECT percent_rank() OVER () FROM t1}] { + lappend myres [format %.4f [set r]] + } + set res2 {0.0000 0.0000 0.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + + +do_test 9.7 { + set myres {} + foreach r [db eval {SELECT cume_dist() OVER () FROM t1}] { + lappend myres [format %.4f [set r]] + } + set res2 {1.0000 1.0000 1.0000} + foreach r [set myres] r2 [set res2] { + if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} { + error "list element [set i] does not match: got=[set r] expected=[set r2]" + } + } + set {} {} +} {} + +do_execsql_test 10.0 { + DROP TABLE IF EXISTS t7; + CREATE TABLE t7(id INTEGER PRIMARY KEY, a INTEGER, b INTEGER); + INSERT INTO t7(id, a, b) VALUES + (1, 1, 2), (2, 1, NULL), (3, 1, 4), + (4, 3, NULL), (5, 3, 8), (6, 3, 1); +} {} + +do_execsql_test 10.1 { + SELECT id, min(b) OVER (PARTITION BY a ORDER BY id) FROM t7; +} {1 2 2 2 3 2 4 {} 5 8 6 1} + +do_execsql_test 10.2 { + SELECT id, lead(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7; +} {1 {} 2 2 3 {} 4 {} 5 {} 6 8} + +do_execsql_test 10.3 { + SELECT id, lag(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7; +} {1 {} 2 4 3 {} 4 8 5 1 6 {}} + +do_execsql_test 11.0 { + DROP VIEW IF EXISTS v8; + DROP TABLE IF EXISTS t8; + CREATE TABLE t8(t INT, total INT); + INSERT INTO t8 VALUES(0,2); + INSERT INTO t8 VALUES(5,1); + INSERT INTO t8 VALUES(10,1); +} {} + +do_execsql_test 11.1 { + SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8; +} {0 1 2} + +do_execsql_test 11.2 { + CREATE VIEW v8 AS SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8; +} {} + +do_execsql_test 11.3 { + SELECT * FROM v8; +} {0 1 2} + +do_execsql_test 11.4 { + SELECT * FROM ( + SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8 + ) sub; +} {0 1 2} + +finish_test diff -Nru lxd-3.0.2/dist/sqlite/test/window5.test lxd-3.0.3/dist/sqlite/test/window5.test --- lxd-3.0.2/dist/sqlite/test/window5.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window5.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,97 @@ +# 2018 May 8 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. Specifically, +# it tests the sqlite3_create_window_function() API. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix window5 + +ifcapable !windowfunc { + finish_test + return +} + +proc m_step {ctx val} { + lappend ctx $val + return $ctx +} +proc m_value {ctx} { + set lSort [lsort $ctx] + + set nVal [llength $lSort] + set n [expr $nVal/2] + + if {($nVal % 2)==0 && $nVal>0} { + set a [lindex $lSort $n] + set b [lindex $lSort $n-1] + if {($a+$b) % 2} { + set ret [expr ($a+$b)/2.0] + } else { + set ret [expr ($a+$b)/2] + } + } else { + set ret [lindex $lSort $n] + } + return $ret +} +proc m_inverse {ctx val} { + set ctx [lrange $ctx 1 end] + return $ctx +} +proc w_value {ctx} { + lsort $ctx +} + +sqlite3_create_window_function db median m_step m_value m_value m_inverse +sqlite3_create_window_function db win m_step w_value w_value m_inverse + +do_test 0.0 { + test_create_window_function_misuse db +} {} + +do_execsql_test 1.0 { + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(4, 'a'); + INSERT INTO t1 VALUES(6, 'b'); + INSERT INTO t1 VALUES(1, 'c'); + INSERT INTO t1 VALUES(5, 'd'); + INSERT INTO t1 VALUES(2, 'e'); + INSERT INTO t1 VALUES(3, 'f'); +} + +do_execsql_test 1.1 { + SELECT win(a) OVER (ORDER BY b), median(a) OVER (ORDER BY b) FROM t1; +} {4 4 {4 6} 5 {1 4 6} 4 {1 4 5 6} 4.5 {1 2 4 5 6} 4 {1 2 3 4 5 6} 3.5} + +test_create_sumint db +do_execsql_test 2.0 { + SELECT sumint(a) OVER (ORDER BY rowid) FROM t1 ORDER BY rowid; +} {4 10 11 16 18 21} + +do_execsql_test 2.1 { + SELECT sumint(a) OVER (ORDER BY rowid ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1 ORDER BY rowid; +} {10 11 12 8 10 5} + +test_override_sum db +do_catchsql_test 3.0 { + SELECT sum(a) OVER + (ORDER BY b ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) + FROM t1; +} {1 {sum() may not be used as a window function}} +do_execsql_test 3.1 { + SELECT sum(a) FROM t1; +} {21} + + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/window6.test lxd-3.0.3/dist/sqlite/test/window6.test --- lxd-3.0.2/dist/sqlite/test/window6.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/window6.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,339 @@ +# 2018 May 8 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. Specifically, +# it tests the sqlite3_create_window_function() API. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix window6 + +ifcapable !windowfunc { + finish_test + return +} + +set setup { + CREATE TABLE %t1(%x, %y %typename); + INSERT INTO %t1 VALUES(1, 'a'); + INSERT INTO %t1 VALUES(2, 'b'); + INSERT INTO %t1 VALUES(3, 'c'); + INSERT INTO %t1 VALUES(4, 'd'); + INSERT INTO %t1 VALUES(5, 'e'); +} + +foreach {tn vars} { + 1 {} + 2 { set A(%t1) over } + 3 { set A(%x) over } + 4 { + set A(%alias) over + set A(%x) following + set A(%y) over + } + 5 { + set A(%t1) over + set A(%x) following + set A(%y) preceding + set A(%w) current + set A(%alias) filter + set A(%typename) window + } + + 6 { + set A(%x) window + } +} { + set A(%t1) t1 + set A(%x) x + set A(%y) y + set A(%w) w + set A(%alias) alias + set A(%typename) integer + eval $vars + + set MAP [array get A] + set setup_sql [string map $MAP $setup] + reset_db + execsql $setup_sql + + do_execsql_test 1.$tn.1 [string map $MAP { + SELECT group_concat(%x, '.') OVER (ORDER BY %y) FROM %t1 + }] {1 1.2 1.2.3 1.2.3.4 1.2.3.4.5} + + do_execsql_test 1.$tn.2 [string map $MAP { + SELECT sum(%x) OVER %w FROM %t1 WINDOW %w AS (ORDER BY %y) + }] {1 3 6 10 15} + + do_execsql_test 1.$tn.3 [string map $MAP { + SELECT sum(%alias.%x) OVER %w FROM %t1 %alias WINDOW %w AS (ORDER BY %y) + }] {1 3 6 10 15} + + do_execsql_test 1.$tn.4 [string map $MAP { + SELECT sum(%x) %alias FROM %t1 + }] {15} +} + + +proc winproc {args} { return "window: $args" } +db func window winproc +do_execsql_test 2.0 { + SELECT window('hello world'); +} {{window: {hello world}}} + +proc wincmp {a b} { string compare $b $a } +db collate window wincmp +do_execsql_test 3.0 { + CREATE TABLE window(x COLLATE window); + INSERT INTO window VALUES('bob'), ('alice'), ('cate'); + SELECT * FROM window ORDER BY x COLLATE window; +} {cate bob alice} +do_execsql_test 3.1 { + DROP TABLE window; + CREATE TABLE x1(x); + INSERT INTO x1 VALUES('bob'), ('alice'), ('cate'); + CREATE INDEX window ON x1(x COLLATE window); + SELECT * FROM x1 ORDER BY x COLLATE window; +} {cate bob alice} + + +do_execsql_test 4.0 { CREATE TABLE t4(x, y); } + +# do_execsql_test 4.1 { PRAGMA parser_trace = 1 } +do_execsql_test 4.1 { + SELECT * FROM t4 window, t4; +} + +#------------------------------------------------------------------------- +reset_db + +do_execsql_test 5.0 { + CREATE TABLE over(x, over); + CREATE TABLE window(x, window); + INSERT INTO over VALUES(1, 2), (3, 4), (5, 6); + INSERT INTO window VALUES(1, 2), (3, 4), (5, 6); + SELECT sum(x) over FROM over +} {9} + +do_execsql_test 5.1 { + SELECT sum(x) over over FROM over WINDOW over AS () +} {9 9 9} + +do_execsql_test 5.2 { + SELECT sum(over) over over over FROM over over WINDOW over AS (ORDER BY over) +} {2 6 12} + +do_execsql_test 5.3 { + SELECT sum(over) over over over FROM over over WINDOW over AS (ORDER BY over); +} {2 6 12} + +do_execsql_test 5.4 { + SELECT sum(window) OVER window window FROM window window window window AS (ORDER BY window); +} {2 6 12} + +do_execsql_test 5.5 { + SELECT count(*) OVER win FROM over + WINDOW win AS (ORDER BY x ROWS BETWEEN +2 FOLLOWING AND +3 FOLLOWING) +} {1 0 0} + +#------------------------------------------------------------------------- +# + +do_execsql_test 6.0 { + SELECT LIKE('!', '', '!') x WHERE x; +} {} + +do_execsql_test 6.1 { + SELECT LIKE("!","","!")""WHeRE""; +} {} + +do_catchsql_test 6.2 { + SELECT LIKE("!","","!")""window""; +} {1 {near "window": syntax error}} + +reset_db +do_execsql_test 7.0 { + CREATE TABLE t1(x TEXT); + CREATE INDEX i1 ON t1(x COLLATE nocase); + INSERT INTO t1 VALUES(''); +} + +do_execsql_test 7.1 { + SELECT count(*) FROM t1 WHERE x LIKE '!' ESCAPE '!'; +} {0} + +#------------------------------------------------------------------------- +# +do_execsql_test 8.0 { + CREATE TABLE IF NOT EXISTS "sample" ( + "id" INTEGER NOT NULL PRIMARY KEY, + "counter" INTEGER NOT NULL, + "value" REAL NOT NULL + ); + + INSERT INTO "sample" (counter, value) + VALUES (1, 10.), (1, 20.), (2, 1.), (2, 3.), (3, 100.); +} + +do_execsql_test 8.1 { + SELECT "counter", "value", RANK() OVER w AS "rank" + FROM "sample" + WINDOW w AS (PARTITION BY "counter" ORDER BY "value" DESC) + ORDER BY "counter", RANK() OVER w +} { + 1 20.0 1 1 10.0 2 2 3.0 1 2 1.0 2 3 100.0 1 +} + +do_execsql_test 8.2 { + SELECT "counter", "value", SUM("value") OVER + (ORDER BY "id" ROWS 2 PRECEDING) + FROM "sample" + ORDER BY "id" +} { + 1 10.0 10.0 1 20.0 30.0 2 1.0 31.0 2 3.0 24.0 3 100.0 104.0 +} + +do_execsql_test 8.3 { + SELECT SUM("value") OVER + (ORDER BY "id" ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) + FROM "sample" + ORDER BY "id" +} { + 10.0 30.0 31.0 24.0 104.0 +} + +do_execsql_test 9.0 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT x, group_concat(x) OVER (ORDER BY x ROWS 2 PRECEDING) + FROM c; +} { + 1 1 2 1,2 3 1,2,3 4 2,3,4 5 3,4,5 +} +do_catchsql_test 9.1 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT x, group_concat(x) OVER (ORDER BY x RANGE 2 PRECEDING) + FROM c; +} {1 {RANGE must use only UNBOUNDED or CURRENT ROW}} + +do_catchsql_test 9.2 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT x, group_concat(x) OVER (ORDER BY x RANGE BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING) + FROM c; +} {1 {RANGE must use only UNBOUNDED or CURRENT ROW}} + +do_catchsql_test 9.3 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count(DISTINCT x) OVER (ORDER BY x) FROM c; +} {1 {DISTINCT is not supported for window functions}} + +do_catchsql_test 9.4 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count() OVER (ORDER BY x RANGE UNBOUNDED FOLLOWING) FROM c; +} {1 {near "FOLLOWING": syntax error}} + +do_catchsql_test 9.5 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count() OVER (ORDER BY x RANGE BETWEEN UNBOUNDED FOLLOWING AND UNBOUNDED FOLLOWING) FROM c; +} {1 {near "FOLLOWING": syntax error}} + +do_catchsql_test 9.6 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count() OVER (ORDER BY x RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED PRECEDING) FROM c; +} {1 {near "PRECEDING": syntax error}} + +foreach {tn frame} { + 1 "BETWEEN CURRENT ROW AND 4 PRECEDING" + 2 "4 FOLLOWING" + 3 "BETWEEN 4 FOLLOWING AND CURRENT ROW" + 4 "BETWEEN 4 FOLLOWING AND 2 PRECEDING" +} { + do_catchsql_test 9.7.$tn " + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count() OVER ( + ORDER BY x ROWS $frame + ) FROM c; + " {1 {unsupported frame delimiter for ROWS}} +} + +do_catchsql_test 9.8.1 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count() OVER ( + ORDER BY x ROWS BETWEEN a PRECEDING AND 2 FOLLOWING + ) FROM c; +} {1 {frame starting offset must be a non-negative integer}} +do_catchsql_test 9.8.2 { + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count() OVER ( + ORDER BY x ROWS BETWEEN 2 PRECEDING AND a FOLLOWING + ) FROM c; +} {1 {frame ending offset must be a non-negative integer}} + +do_execsql_test 10.0 { + WITH t1(a,b) AS (VALUES(1,2)) + SELECT count() FILTER (where b<>5) OVER w1 + FROM t1 + WINDOW w1 AS (ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING); +} {1} + +foreach {tn stmt} { + 1 "SELECT nth_value(b, 0) OVER (ORDER BY a) FROM t1" + 2 "SELECT nth_value(b, -1) OVER (ORDER BY a) FROM t1" + 3 "SELECT nth_value(b, '4ab') OVER (ORDER BY a) FROM t1" + 4 "SELECT nth_value(b, NULL) OVER (ORDER BY a) FROM t1" + 5 "SELECT nth_value(b, 8.5) OVER (ORDER BY a) FROM t1" +} { + do_catchsql_test 10.1.$tn " + WITH t1(a,b) AS ( VALUES(1, 2), (2, 3), (3, 4) ) + $stmt + " {1 {second argument to nth_value must be a positive integer}} +} + +foreach {tn stmt res} { + 1 "SELECT nth_value(b, 1) OVER (ORDER BY a) FROM t1" {2 2 2} + 2 "SELECT nth_value(b, 2) OVER (ORDER BY a) FROM t1" {{} 3 3} + 3 "SELECT nth_value(b, '2') OVER (ORDER BY a) FROM t1" {{} 3 3} + 4 "SELECT nth_value(b, 2.0) OVER (ORDER BY a) FROM t1" {{} 3 3} + 5 "SELECT nth_value(b, '2.0') OVER (ORDER BY a) FROM t1" {{} 3 3} + 6 "SELECT nth_value(b, 10000000) OVER (ORDER BY a) FROM t1" {{} {} {}} +} { + do_execsql_test 10.2.$tn " + WITH t1(a,b) AS ( VALUES(1, 2), (2, 3), (3, 4) ) + $stmt + " $res +} + + +#------------------------------------------------------------------------- +# +reset_db +do_execsql_test 11.0 { + CREATE TABLE t1(a INT); + INSERT INTO t1 VALUES(10),(15),(20),(20),(25),(30),(30),(50); + CREATE TABLE t3(x INT, y VARCHAR); + INSERT INTO t3(x,y) VALUES(10,'ten'),('15','fifteen'),(30,'thirty'); +} + +do_execsql_test 11.1 { + SELECT a, (SELECT y FROM t3 WHERE x=a) FROM t1 ORDER BY a; +} { + 10 ten 15 fifteen 20 {} 20 {} 25 {} 30 thirty 30 thirty 50 {} +} + +do_execsql_test 11.2 { + SELECT a, (SELECT y FROM t3 WHERE x=a), sum(a) OVER (ORDER BY a) + FROM t1 ORDER BY a; +} { + 10 ten 10 15 fifteen 25 20 {} 65 20 {} 65 + 25 {} 90 30 thirty 150 30 thirty 150 50 {} 200 +} + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/windowfault.test lxd-3.0.3/dist/sqlite/test/windowfault.test --- lxd-3.0.2/dist/sqlite/test/windowfault.test 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/windowfault.test 2018-11-22 20:54:16.000000000 +0000 @@ -0,0 +1,166 @@ +# 2018 May 8 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix windowfault + +ifcapable !windowfunc { + finish_test + return +} + +do_execsql_test 1.0 { + CREATE TABLE t1(a, b, c, d); + INSERT INTO t1 VALUES(1, 2, 3, 4); + INSERT INTO t1 VALUES(5, 6, 7, 8); + INSERT INTO t1 VALUES(9, 10, 11, 12); +} +faultsim_save_and_close + +do_faultsim_test 1 -start 1 -faults oom-* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT row_number() OVER win, + rank() OVER win, + dense_rank() OVER win, + ntile(2) OVER win, + first_value(d) OVER win, + last_value(d) OVER win, + nth_value(d,2) OVER win, + lead(d) OVER win, + lag(d) OVER win, + max(d) OVER win, + min(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a) + } +} -test { + faultsim_test_result {0 {1 1 1 1 4 4 {} 8 {} 4 4 2 2 2 1 4 8 8 12 4 8 4 3 3 3 2 4 12 8 {} 8 12 4}} +} + +do_faultsim_test 1.1 -faults oom-t* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT row_number() OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t1 + WINDOW win AS (PARTITION BY c<7 ORDER BY a) + } +} -test { + faultsim_test_result {0 {1 1 1 2 2 2 1 1 1}} +} + +do_faultsim_test 1.2 -faults oom-t* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT ntile(105) + OVER ( RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) + FROM t1 + } +} -test { + faultsim_test_result {0 {1 2 3}} +} + +do_faultsim_test 2 -start 1 -faults oom-* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT round(percent_rank() OVER win, 2), + round(cume_dist() OVER win, 2) + FROM t1 + WINDOW win AS (ORDER BY a) + } +} -test { + faultsim_test_result {0 {0.0 0.33 0.5 0.67 1.0 1.0}} +} + +do_faultsim_test 3 -faults oom-* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT min(d) OVER win, max(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + } +} -test { + faultsim_test_result {0 {4 12 8 12 12 12}} +} + +do_faultsim_test 4 -faults oom-* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + CREATE VIEW aaa AS + SELECT min(d) OVER w, max(d) OVER w + FROM t1 + WINDOW w AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING); + SELECT * FROM aaa; + } +} -test { + faultsim_test_result {0 {4 12 8 12 12 12}} +} + +do_faultsim_test 5 -start 1 -faults oom-* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT last_value(a) OVER win1, + last_value(a) OVER win2 + FROM t1 + WINDOW win1 AS (ORDER BY a ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING), + win2 AS (ORDER BY a) + } +} -test { + faultsim_test_result {0 {5 1 9 5 9 9}} +} + +do_faultsim_test 6 -faults oom-* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT percent_rank() OVER (), cume_dist() OVER () FROM t1 + } +} -test { + faultsim_test_result {0 {0.0 1.0 0.0 1.0 0.0 1.0}} +} + +do_faultsim_test 7 -faults oom-* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT percent_rank() OVER (), cume_dist() OVER () FROM t1 + } +} -test { + faultsim_test_result {0 {0.0 1.0 0.0 1.0 0.0 1.0}} +} + +do_faultsim_test 8 -faults oom-t* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT a, sum(b) OVER win1 FROM t1 + WINDOW win1 AS (PARTITION BY a ), + win2 AS (PARTITION BY b ) + ORDER BY a; + } +} -test { + faultsim_test_result {0 {1 2 5 6 9 10}} +} + +finish_test + diff -Nru lxd-3.0.2/dist/sqlite/test/with1.test lxd-3.0.3/dist/sqlite/test/with1.test --- lxd-3.0.2/dist/sqlite/test/with1.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/with1.test 2018-11-22 20:54:16.000000000 +0000 @@ -865,6 +865,27 @@ SELECT * FROM i; } {1 {recursive aggregate queries not supported}} +# Or window-function recursive queries. Ticket e8275b41. +# +ifcapable windowfunc { + do_catchsql_test 16.2 { + WITH RECURSIVE + i(x) AS (VALUES(1) UNION SELECT count(*) OVER () FROM i) + SELECT * FROM i; + } {1 {cannot use window functions in recursive queries}} + do_catchsql_test 16.3 { + WITH RECURSIVE + t(id, parent) AS (VALUES(1,2)), + q(id, parent, rn) AS ( + VALUES(1,2,3) + UNION ALL + SELECT t.*, ROW_NUMBER() OVER (ORDER BY t.id) AS rn + FROM q JOIN t ON t.parent = q.id + ) + SELECT * FROM q; + } {1 {cannot use window functions in recursive queries}} +} + #------------------------------------------------------------------------- do_execsql_test 17.1 { WITH x(a) AS ( diff -Nru lxd-3.0.2/dist/sqlite/test/without_rowid3.test lxd-3.0.3/dist/sqlite/test/without_rowid3.test --- lxd-3.0.2/dist/sqlite/test/without_rowid3.test 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/test/without_rowid3.test 2018-11-22 20:54:16.000000000 +0000 @@ -949,7 +949,9 @@ # Test the sqlite_rename_parent() function directly. # proc test_rename_parent {zCreate zOld zNew} { - db eval {SELECT sqlite_rename_parent($zCreate, $zOld, $zNew)} + db eval {SELECT sqlite_rename_table( + 'main', 'table', 't1', $zCreate, $zOld, $zNew, 0 + )} } do_test without_rowid3-14.2.1.1 { test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3 diff -Nru lxd-3.0.2/dist/sqlite/tool/lemon.c lxd-3.0.3/dist/sqlite/tool/lemon.c --- lxd-3.0.2/dist/sqlite/tool/lemon.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/tool/lemon.c 2018-11-22 20:54:16.000000000 +0000 @@ -2855,6 +2855,7 @@ filebuf = (char *)malloc( filesize+1 ); if( filesize>100000000 || filebuf==0 ){ ErrorMsg(ps.filename,0,"Input file too large."); + free(filebuf); gp->errorcnt++; fclose(fp); return; diff -Nru lxd-3.0.2/dist/sqlite/tool/lempar.c lxd-3.0.3/dist/sqlite/tool/lempar.c --- lxd-3.0.2/dist/sqlite/tool/lempar.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/tool/lempar.c 2018-11-22 20:54:16.000000000 +0000 @@ -90,6 +90,7 @@ /************* Begin control #defines *****************************************/ %% /************* End control #defines *******************************************/ +#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. @@ -519,11 +520,11 @@ do{ i = yy_shift_ofst[stateno]; assert( i>=0 ); - assert( i+YYNTOKEN<=(int)sizeof(yy_lookahead)/sizeof(yy_lookahead[0]) ); + /* assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD ); */ assert( iLookAhead!=YYNOCODE ); assert( iLookAhead < YYNTOKEN ); i += iLookAhead; - if( yy_lookahead[i]!=iLookAhead ){ + if( i>=YY_NLOOKAHEAD || yy_lookahead[i]!=iLookAhead ){ #ifdef YYFALLBACK YYCODETYPE iFallback; /* Fallback token */ if( iLookAhead=YY_ACTTAB_COUNT j0 ){ #ifndef NDEBUG @@ -573,7 +575,7 @@ ** Find the appropriate action for a parser given the non-terminal ** look-ahead token iLookAhead. */ -static int yy_find_reduce_action( +static YYACTIONTYPE yy_find_reduce_action( YYACTIONTYPE stateno, /* Current state number */ YYCODETYPE iLookAhead /* The look-ahead token */ ){ @@ -713,7 +715,7 @@ ParseCTX_PDECL /* %extra_context */ ){ int yygoto; /* The next state */ - int yyact; /* The next action */ + YYACTIONTYPE yyact; /* The next action */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ ParseARG_FETCH @@ -925,12 +927,12 @@ do{ assert( yyact==yypParser->yytos->stateno ); - yyact = yy_find_shift_action(yymajor,yyact); + yyact = yy_find_shift_action((YYCODETYPE)yymajor,yyact); if( yyact >= YY_MIN_REDUCE ){ yyact = yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor, yyminor ParseCTX_PARAM); }else if( yyact <= YY_MAX_SHIFTREDUCE ){ - yy_shift(yypParser,yyact,yymajor,yyminor); + yy_shift(yypParser,yyact,(YYCODETYPE)yymajor,yyminor); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; #endif @@ -1057,3 +1059,18 @@ #endif return; } + +/* +** Return the fallback token corresponding to canonical token iToken, or +** 0 if iToken has no fallback. +*/ +int ParseFallback(int iToken){ +#ifdef YYFALLBACK + if( iToken<(int)(sizeof(yyFallback)/sizeof(yyFallback[0])) ){ + return yyFallback[iToken]; + } +#else + (void)iToken; +#endif + return 0; +} diff -Nru lxd-3.0.2/dist/sqlite/tool/mkkeywordhash.c lxd-3.0.3/dist/sqlite/tool/mkkeywordhash.c --- lxd-3.0.2/dist/sqlite/tool/mkkeywordhash.c 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/tool/mkkeywordhash.c 2018-11-22 20:54:16.000000000 +0000 @@ -148,6 +148,11 @@ #else # define UPSERT 0x00080000 #endif +#ifdef SQLITE_OMIT_WINDOWFUNC +# define WINDOWFUNC 0 +#else +# define WINDOWFUNC 0x00100000 +#endif /* ** These are the keywords @@ -180,6 +185,7 @@ { "CONSTRAINT", "TK_CONSTRAINT", ALWAYS }, { "CREATE", "TK_CREATE", ALWAYS }, { "CROSS", "TK_JOIN_KW", ALWAYS }, + { "CURRENT", "TK_CURRENT", WINDOWFUNC }, { "CURRENT_DATE", "TK_CTIME_KW", ALWAYS }, { "CURRENT_TIME", "TK_CTIME_KW", ALWAYS }, { "CURRENT_TIMESTAMP","TK_CTIME_KW", ALWAYS }, @@ -202,6 +208,8 @@ { "EXISTS", "TK_EXISTS", ALWAYS }, { "EXPLAIN", "TK_EXPLAIN", EXPLAIN }, { "FAIL", "TK_FAIL", CONFLICT|TRIGGER }, + { "FILTER", "TK_FILTER", WINDOWFUNC }, + { "FOLLOWING", "TK_FOLLOWING", WINDOWFUNC }, { "FOR", "TK_FOR", TRIGGER }, { "FOREIGN", "TK_FOREIGN", FKEY }, { "FROM", "TK_FROM", ALWAYS }, @@ -241,11 +249,15 @@ { "OR", "TK_OR", ALWAYS }, { "ORDER", "TK_ORDER", ALWAYS }, { "OUTER", "TK_JOIN_KW", ALWAYS }, + { "OVER", "TK_OVER", WINDOWFUNC }, + { "PARTITION", "TK_PARTITION", WINDOWFUNC }, { "PLAN", "TK_PLAN", EXPLAIN }, { "PRAGMA", "TK_PRAGMA", PRAGMA }, + { "PRECEDING", "TK_PRECEDING", WINDOWFUNC }, { "PRIMARY", "TK_PRIMARY", ALWAYS }, { "QUERY", "TK_QUERY", EXPLAIN }, { "RAISE", "TK_RAISE", TRIGGER }, + { "RANGE", "TK_RANGE", WINDOWFUNC }, { "RECURSIVE", "TK_RECURSIVE", CTE }, { "REFERENCES", "TK_REFERENCES", FKEY }, { "REGEXP", "TK_LIKE_KW", ALWAYS }, @@ -257,6 +269,7 @@ { "RIGHT", "TK_JOIN_KW", ALWAYS }, { "ROLLBACK", "TK_ROLLBACK", ALWAYS }, { "ROW", "TK_ROW", TRIGGER }, + { "ROWS", "TK_ROWS", ALWAYS }, { "SAVEPOINT", "TK_SAVEPOINT", ALWAYS }, { "SELECT", "TK_SELECT", ALWAYS }, { "SET", "TK_SET", ALWAYS }, @@ -267,6 +280,7 @@ { "TO", "TK_TO", ALWAYS }, { "TRANSACTION", "TK_TRANSACTION", ALWAYS }, { "TRIGGER", "TK_TRIGGER", TRIGGER }, + { "UNBOUNDED", "TK_UNBOUNDED", WINDOWFUNC }, { "UNION", "TK_UNION", COMPOUND }, { "UNIQUE", "TK_UNIQUE", ALWAYS }, { "UPDATE", "TK_UPDATE", ALWAYS }, @@ -275,6 +289,7 @@ { "VALUES", "TK_VALUES", ALWAYS }, { "VIEW", "TK_VIEW", VIEW }, { "VIRTUAL", "TK_VIRTUAL", VTAB }, + { "WINDOW", "TK_WINDOW", WINDOWFUNC }, { "WITH", "TK_WITH", CTE }, { "WITHOUT", "TK_WITHOUT", ALWAYS }, { "WHEN", "TK_WHEN", ALWAYS }, diff -Nru lxd-3.0.2/dist/sqlite/tool/mkopcodeh.tcl lxd-3.0.3/dist/sqlite/tool/mkopcodeh.tcl --- lxd-3.0.2/dist/sqlite/tool/mkopcodeh.tcl 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/tool/mkopcodeh.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -24,7 +24,7 @@ # # This script also scans for lines of the form: # -# case OP_aaaa: /* jump, in1, in2, in3, out2-prerelease, out3 */ +# case OP_aaaa: /* jump, in1, in2, in3, out2, out3 */ # # When such comments are found on an opcode, it means that certain # properties apply to that opcode. Set corresponding flags using the @@ -33,7 +33,9 @@ set in stdin set currentOp {} +set prevName {} set nOp 0 +set nGroup 0 while {![eof $in]} { set line [gets $in] @@ -77,6 +79,7 @@ set name [string trim [lindex $line 1] :] if {$name=="OP_Abortable"} continue; # put OP_Abortable last set op($name) -1 + set group($name) 0 set jump($name) 0 set in1($name) 0 set in2($name) 0 @@ -97,15 +100,31 @@ set def($val) $name } } - jump {set jump($name) 1} - in1 {set in1($name) 1} - in2 {set in2($name) 1} - in3 {set in3($name) 1} - out2 {set out2($name) 1} - out3 {set out3($name) 1} + group {set group($name) 1} + jump {set jump($name) 1} + in1 {set in1($name) 1} + in2 {set in2($name) 1} + in3 {set in3($name) 1} + out2 {set out2($name) 1} + out3 {set out3($name) 1} } } + if {$group($name)} { + set newGroup 0 + if {[info exists groups($nGroup)]} { + if {$prevName=="" || !$group($prevName)} { + set newGroup 1 + } + } + lappend groups($nGroup) $name + if {$newGroup} {incr nGroup} + } else { + if {$prevName!="" && $group($prevName)} { + incr nGroup + } + } set order($nOp) $name + set prevName $name incr nOp } } @@ -181,8 +200,39 @@ } -# Generate the numeric values for all remaining opcodes -# +# Generate the numeric values for all remaining opcodes, while +# preserving any groupings of opcodes (i.e. those that must be +# together). +# +for {set g 0} {$g<$nGroup} {incr g} { + set gLen [llength $groups($g)] + set ok 0; set start -1 + while {!$ok} { + set seek $cnt; incr seek + while {[info exists used($seek)]} {incr seek} + set ok 1; set start $seek + for {set j 0} {$j<$gLen} {incr j} { + incr seek + if {[info exists used($seek)]} { + set ok 0; break + } + } + } + if {$ok} { + set next $start + for {set j 0} {$j<$gLen} {incr j} { + set name [lindex $groups($g) $j] + if {$op($name)>=0} continue + set op($name) $next + set used($next) 1 + set def($next) $name + incr next + } + } else { + error "cannot find opcodes for group: $groups($g)" + } +} + for {set i 0} {$i<$nOp} {incr i} { set name $order($i) if {$op($name)<0} { @@ -203,7 +253,7 @@ set name $def($i) puts -nonewline [format {#define %-16s %3d} $name $i] set com {} - if {$jump($name)} { + if {[info exists jump($name)] && $jump($name)} { lappend com "jump" } if {[info exists sameas($i)]} { diff -Nru lxd-3.0.2/dist/sqlite/tool/mkpragmatab.tcl lxd-3.0.3/dist/sqlite/tool/mkpragmatab.tcl --- lxd-3.0.2/dist/sqlite/tool/mkpragmatab.tcl 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/tool/mkpragmatab.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -382,6 +382,11 @@ NAME: optimize FLAG: Result1 NeedSchema + + NAME: legacy_alter_table + TYPE: FLAG + ARG: SQLITE_LegacyAlter + IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS) } # Open the output file diff -Nru lxd-3.0.2/dist/sqlite/tool/mksqlite3c-noext.tcl lxd-3.0.3/dist/sqlite/tool/mksqlite3c-noext.tcl --- lxd-3.0.2/dist/sqlite/tool/mksqlite3c-noext.tcl 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/tool/mksqlite3c-noext.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -351,6 +351,7 @@ wherecode.c whereexpr.c where.c + window.c parse.c diff -Nru lxd-3.0.2/dist/sqlite/tool/mksqlite3c.tcl lxd-3.0.3/dist/sqlite/tool/mksqlite3c.tcl --- lxd-3.0.2/dist/sqlite/tool/mksqlite3c.tcl 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/tool/mksqlite3c.tcl 2018-11-22 20:54:16.000000000 +0000 @@ -99,6 +99,7 @@ fts3Int.h fts3_hash.h fts3_tokenizer.h + geopoly.c hash.h hwtime.h keywordhash.h @@ -369,6 +370,7 @@ wherecode.c whereexpr.c where.c + window.c parse.c @@ -391,6 +393,7 @@ fts3_unicode.c fts3_unicode2.c + json1.c rtree.c icu.c fts3_icu.c @@ -398,7 +401,6 @@ dbstat.c dbpage.c sqlite3session.c - json1.c fts5.c stmt.c } { diff -Nru lxd-3.0.2/dist/sqlite/.travis.yml lxd-3.0.3/dist/sqlite/.travis.yml --- lxd-3.0.2/dist/sqlite/.travis.yml 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/.travis.yml 2018-11-22 20:54:16.000000000 +0000 @@ -16,8 +16,10 @@ - make amalgamation-tarball - tar cfz build-amd64.tar.gz --transform 's|.libs/||g' sqlite3.h .libs/libsqlite3.so* - mkdir deploy + - git diff -r version-$(cat VERSION) > patch - mv build-amd64.tar.gz deploy/sqlite-amd64${DEBUG}-$(cat VERSION).tar.gz - \[ -n "$DEBUG" \] || mv sqlite-autoconf-*.tar.gz deploy/sqlite-src-$(cat VERSION).tar.gz + - \[ -n "$DEBUG" \] || mv patch deploy/sqlite-$(cat VERSION).diff deploy: provider: releases diff -Nru lxd-3.0.2/dist/sqlite/VERSION lxd-3.0.3/dist/sqlite/VERSION --- lxd-3.0.2/dist/sqlite/VERSION 2018-08-20 23:49:05.000000000 +0000 +++ lxd-3.0.3/dist/sqlite/VERSION 2018-11-22 20:54:16.000000000 +0000 @@ -1 +1 @@ -3.24.0 +3.25.3 diff -Nru lxd-3.0.2/dist/src/github.com/armon/go-metrics/prometheus/prometheus.go lxd-3.0.3/dist/src/github.com/armon/go-metrics/prometheus/prometheus.go --- lxd-3.0.2/dist/src/github.com/armon/go-metrics/prometheus/prometheus.go 2018-08-20 23:47:21.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/armon/go-metrics/prometheus/prometheus.go 2018-11-22 20:53:47.000000000 +0000 @@ -101,7 +101,7 @@ } } -var forbiddenChars = regexp.MustCompile("[ .=\\-]") +var forbiddenChars = regexp.MustCompile("[ .=\\-/]") func (p *PrometheusSink) flattenKey(parts []string, labels []metrics.Label) (string, string) { key := strings.Join(parts, "_") diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/candidtest/idmtest_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/candidtest/idmtest_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/candidtest/idmtest_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/candidtest/idmtest_test.go 2018-11-22 20:53:35.000000000 +0000 @@ -4,9 +4,10 @@ package candidtest_test import ( - jc "github.com/juju/testing/checkers" + "testing" + + qt "github.com/frankban/quicktest" "golang.org/x/net/context" - gc "gopkg.in/check.v1" "gopkg.in/macaroon-bakery.v2/bakery" "gopkg.in/macaroon-bakery.v2/bakery/identchecker" "gopkg.in/macaroon-bakery.v2/httpbakery" @@ -16,11 +17,10 @@ candidparams "gopkg.in/CanonicalLtd/candidclient.v1/params" ) -type suite struct{} - -var _ = gc.Suite(&suite{}) +func TestDischarge(t *testing.T) { + c := qt.New(t) + defer c.Done() -func (*suite) TestDischarge(c *gc.C) { ctx := context.TODO() srv := candidtest.NewServer() srv.AddUser("server-user", candidtest.GroupListGroup) @@ -28,7 +28,7 @@ client := srv.Client("bob") key, err := bakery.GenerateKey() - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) b := identchecker.NewBakery(identchecker.BakeryParams{ Key: key, Locator: srv, @@ -40,33 +40,36 @@ candidclient.IdentityCaveats(srv.URL.String()), identchecker.LoginOp, ) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) ms, err := client.DischargeAll(ctx, m) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) // Make sure that the macaroon discharged correctly and that it // has the right declared caveats. authInfo, err := b.Checker.Auth(ms).Allow(ctx, identchecker.LoginOp) - c.Assert(err, gc.IsNil) - c.Assert(authInfo.Identity, gc.NotNil) + c.Assert(err, qt.Equals, nil) + c.Assert(authInfo.Identity, qt.Not(qt.IsNil)) ident := authInfo.Identity.(candidclient.Identity) - c.Assert(ident.Id(), gc.Equals, "bob") + c.Assert(ident.Id(), qt.Equals, "bob") username, err := ident.Username() - c.Assert(err, gc.IsNil) - c.Assert(username, gc.Equals, "bob") + c.Assert(err, qt.Equals, nil) + c.Assert(username, qt.Equals, "bob") groups, err := ident.Groups() - c.Assert(err, gc.IsNil) - c.Assert(groups, jc.DeepEquals, []string{"somegroup"}) + c.Assert(err, qt.Equals, nil) + c.Assert(groups, qt.DeepEquals, []string{"somegroup"}) } -func (*suite) TestDischargeDefaultUser(c *gc.C) { +func TestDischargeDefaultUser(t *testing.T) { + c := qt.New(t) + defer c.Done() + ctx := context.TODO() srv := candidtest.NewServer() srv.SetDefaultUser("bob") key, err := bakery.GenerateKey() - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) b := identchecker.NewBakery(identchecker.BakeryParams{ Key: key, Locator: srv, @@ -78,28 +81,31 @@ candidclient.IdentityCaveats(srv.URL.String()), identchecker.LoginOp, ) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) client := httpbakery.NewClient() ms, err := client.DischargeAll(ctx, m) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) // Make sure that the macaroon discharged correctly and that it // has the right declared caveats. authInfo, err := b.Checker.Auth(ms).Allow(ctx, identchecker.LoginOp) - c.Assert(err, gc.IsNil) - c.Assert(authInfo.Identity, gc.NotNil) + c.Assert(err, qt.Equals, nil) + c.Assert(authInfo.Identity, qt.Not(qt.IsNil)) ident := authInfo.Identity.(candidclient.Identity) - c.Assert(ident.Id(), gc.Equals, "bob") + c.Assert(ident.Id(), qt.Equals, "bob") username, err := ident.Username() - c.Assert(err, gc.IsNil) - c.Assert(username, gc.Equals, "bob") + c.Assert(err, qt.Equals, nil) + c.Assert(username, qt.Equals, "bob") groups, err := ident.Groups() - c.Assert(err, gc.IsNil) - c.Assert(groups, gc.HasLen, 0) + c.Assert(err, qt.Equals, nil) + c.Assert(groups, qt.HasLen, 0) } -func (*suite) TestGroups(c *gc.C) { +func TestGroups(t *testing.T) { + c := qt.New(t) + defer c.Done() + srv := candidtest.NewServer() srv.AddUser("server-user", candidtest.GroupListGroup) srv.AddUser("bob", "beatles", "bobbins") @@ -109,17 +115,20 @@ groups, err := client.UserGroups(context.TODO(), &candidparams.UserGroupsRequest{ Username: "bob", }) - c.Assert(err, gc.IsNil) - c.Assert(groups, jc.DeepEquals, []string{"beatles", "bobbins"}) + c.Assert(err, qt.Equals, nil) + c.Assert(groups, qt.DeepEquals, []string{"beatles", "bobbins"}) groups, err = client.UserGroups(context.TODO(), &candidparams.UserGroupsRequest{ Username: "alice", }) - c.Assert(err, gc.IsNil) - c.Assert(groups, gc.HasLen, 0) + c.Assert(err, qt.Equals, nil) + c.Assert(groups, qt.HasLen, 0) } -func (s *suite) TestAddUserWithExistingGroups(c *gc.C) { +func TestAddUserWithExistingGroups(t *testing.T) { + c := qt.New(t) + defer c.Done() + srv := candidtest.NewServer() srv.AddUser("alice", "anteaters") srv.AddUser("alice") @@ -129,6 +138,6 @@ groups, err := client.UserGroups(context.TODO(), &candidparams.UserGroupsRequest{ Username: "alice", }) - c.Assert(err, gc.IsNil) - c.Assert(groups, jc.DeepEquals, []string{"anteaters", "goof"}) + c.Assert(err, qt.Equals, nil) + c.Assert(groups, qt.DeepEquals, []string{"anteaters", "goof"}) } diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/candidtest/package_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/candidtest/package_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/candidtest/package_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/candidtest/package_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -// Copyright 2015 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package candidtest_test - -import ( - "testing" - - gc "gopkg.in/check.v1" -) - -func TestPackage(t *testing.T) { - gc.TestingT(t) -} diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/client_generated.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/client_generated.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/client_generated.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/client_generated.go 2018-11-22 20:53:35.000000000 +0000 @@ -5,8 +5,8 @@ import ( "golang.org/x/net/context" - "gopkg.in/httprequest.v1" "gopkg.in/CanonicalLtd/candidclient.v1/params" + "gopkg.in/httprequest.v1" "gopkg.in/macaroon-bakery.v2/bakery" ) diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/client_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/client_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/client_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/client_test.go 2018-11-22 20:53:35.000000000 +0000 @@ -2,10 +2,10 @@ import ( "sort" + "testing" - jc "github.com/juju/testing/checkers" + qt "github.com/frankban/quicktest" "golang.org/x/net/context" - gc "gopkg.in/check.v1" "gopkg.in/errgo.v1" "gopkg.in/macaroon-bakery.v2/bakery" "gopkg.in/macaroon-bakery.v2/bakery/identchecker" @@ -15,11 +15,9 @@ "gopkg.in/CanonicalLtd/candidclient.v1/candidtest" ) -type clientSuite struct{} - -var _ = gc.Suite(&clientSuite{}) - -func (*clientSuite) TestIdentityClient(c *gc.C) { +func TestIdentityClient(t *testing.T) { + c := qt.New(t) + defer c.Done() srv := candidtest.NewServer() srv.AddUser("bob", "alice", "charlie") testIdentityClient(c, @@ -29,7 +27,9 @@ ) } -func (*clientSuite) TestIdentityClientWithDomainStrip(c *gc.C) { +func TestIdentityClientWithDomainStrip(t *testing.T) { + c := qt.New(t) + defer c.Done() srv := candidtest.NewServer() srv.AddUser("bob@usso", "alice@usso", "charlie@elsewhere") testIdentityClient(c, @@ -39,7 +39,9 @@ ) } -func (*clientSuite) TestIdentityClientWithDomainStripNoDomains(c *gc.C) { +func TestIdentityClientWithDomainStripNoDomains(t *testing.T) { + c := qt.New(t) + defer c.Done() srv := candidtest.NewServer() srv.AddUser("bob", "alice", "charlie") testIdentityClient(c, @@ -52,7 +54,7 @@ // testIdentityClient tests that the given identity client can be used to // create a third party caveat that when discharged provides // an Identity with the given id, user name and groups. -func testIdentityClient(c *gc.C, candidClient identchecker.IdentityClient, bclient *httpbakery.Client, expectId, expectUser string, expectGroups []string) { +func testIdentityClient(c *qt.C, candidClient identchecker.IdentityClient, bclient *httpbakery.Client, expectId, expectUser string, expectGroups []string) { kr := httpbakery.NewThirdPartyLocator(nil, nil) kr.AllowInsecure() b := identchecker.NewBakery(identchecker.BakeryParams{ @@ -64,31 +66,31 @@ derr := errgo.Cause(authErr).(*bakery.DischargeRequiredError) m, err := b.Oven.NewMacaroon(context.TODO(), bakery.LatestVersion, derr.Caveats, derr.Ops...) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) ms, err := bclient.DischargeAll(context.TODO(), m) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) // Make sure that the macaroon discharged correctly and that it // has the right declared caveats. authInfo, err := b.Checker.Auth(ms).Allow(context.TODO(), identchecker.LoginOp) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) - c.Assert(authInfo.Identity, gc.NotNil) - c.Assert(authInfo.Identity.Id(), gc.Equals, expectId) - c.Assert(authInfo.Identity.Domain(), gc.Equals, "") + c.Assert(authInfo.Identity, qt.Not(qt.IsNil)) + c.Assert(authInfo.Identity.Id(), qt.Equals, expectId) + c.Assert(authInfo.Identity.Domain(), qt.Equals, "") user := authInfo.Identity.(candidclient.Identity) u, err := user.Username() - c.Assert(err, gc.IsNil) - c.Assert(u, gc.Equals, expectUser) + c.Assert(err, qt.Equals, nil) + c.Assert(u, qt.Equals, expectUser) ok, err := user.Allow(context.TODO(), []string{expectGroups[0]}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, true) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, true) groups, err := user.Groups() - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) sort.Strings(groups) - c.Assert(groups, jc.DeepEquals, expectGroups) + c.Assert(groups, qt.DeepEquals, expectGroups) } diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/dependencies.tsv lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/dependencies.tsv --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/dependencies.tsv 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/dependencies.tsv 2018-11-22 20:53:35.000000000 +0000 @@ -1,4 +1,6 @@ +github.com/frankban/quicktest git 65a7a415c433ed58782bc90cc0e77b094883ab39 2018-08-21T10:59:29Z github.com/golang/protobuf git 925541529c1fa6821df4e44ce2723319eb2be768 2018-01-25T21:43:03Z +github.com/google/go-cmp git 8099a9787ce5dc5984ed879a3bda47dc730a8e97 2017-08-03T17:35:09Z github.com/juju/errors git c7d06af17c68cd34c835053720b21f6549d9b0ee 2017-07-03T01:00:42Z github.com/juju/loggo git 8232ab8918d91c72af1a9fb94d3edbe31d88b790 2017-06-05T01:46:07Z github.com/juju/retry git 62c62032529169c7ec02fa48f93349604c345e1f 2015-10-29T02:48:21Z @@ -9,12 +11,14 @@ github.com/juju/version git 1f41e27e54f21acccf9b2dddae063a782a8a7ceb 2016-10-31T05:19:06Z github.com/juju/webbrowser git 54b8c57083b4afb7dc75da7f13e2967b2606a507 2016-03-09T14:36:29Z github.com/julienschmidt/httprouter git 77a895ad01ebc98a4dc95d8355bc825ce80a56f6 2015-10-13T22:55:20Z +github.com/kr/pretty git cfb55aafdaf3ec08f0db22699ab822c50091b1c4 2016-08-23T17:07:15Z +github.com/kr/text git 7cafcd837844e784b526369c9bce262804aebc60 2016-05-04T23:40:17Z github.com/rogpeppe/fastuuid git 6724a57986aff9bff1a1770e9347036def7c89f6 2015-01-06T09:32:20Z golang.org/x/crypto git c7dcf104e3a7a1417abc0230cb0d5240d764159d 2018-03-08T18:56:24Z golang.org/x/net git a337091b0525af65de94df2eb7e98bd9962dcbe2 2017-11-07T18:48:41Z golang.org/x/sys git 7dca6fe1f43775aa6d1334576870ff63f978f539 2018-03-08T15:20:46Z gopkg.in/check.v1 git 4f90aeace3a26ad7021961c297b22c42160c7b25 2016-01-05T16:49:36Z -gopkg.in/errgo.v1 git 442357a80af5c6bf9b6d51ae791a39c3421004f3 2016-12-22T12:58:16Z +gopkg.in/errgo.v1 git b20caedf0710d0988e92b5f2d76843ad1f231f2d 2018-08-18T17:50:15Z gopkg.in/httprequest.v1 git fdaf1bffa25560ba0920e3e29aae85d3677ab32e 2017-12-12T18:09:35Z gopkg.in/juju/environschema.v1 git 7359fc7857abe2b11b5b3e23811a9c64cb6b01e0 2015-11-04T11:58:10Z gopkg.in/juju/names.v2 git 54f00845ae470a362430a966fe17f35f8784ac92 2017-11-13T11:20:47Z diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/go.mod lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/go.mod --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/go.mod 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/go.mod 2018-11-22 20:53:35.000000000 +0000 @@ -0,0 +1,31 @@ +module gopkg.in/CanonicalLtd/candidclient.v1 + +require ( + github.com/frankban/quicktest v1.1.0 + github.com/golang/protobuf v1.0.0 // indirect + github.com/google/go-cmp v0.2.0 + github.com/juju/errors v0.0.0-20170703010042-c7d06af17c68 // indirect + github.com/juju/loggo v0.0.0-20170605014607-8232ab8918d9 // indirect + github.com/juju/retry v0.0.0-20151029024821-62c620325291 // indirect + github.com/juju/schema v0.0.0-20160420044203-075de04f9b7d // indirect + github.com/juju/testing v0.0.0-20180213134616-43f926548f91 + github.com/juju/usso v0.0.0-20160418121039-5b79b358f4bb + github.com/juju/utils v0.0.0-20180207021810-d18e608d0140 + github.com/juju/version v0.0.0-20161031051906-1f41e27e54f2 // indirect + github.com/juju/webbrowser v0.0.0-20160309143629-54b8c57083b4 // indirect + github.com/julienschmidt/httprouter v0.0.0-20151013225520-77a895ad01eb // indirect + github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af // indirect + golang.org/x/crypto v0.0.0-20180308185624-c7dcf104e3a7 // indirect + golang.org/x/net v0.0.0-20171107184841-a337091b0525 + golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f // indirect + golang.org/x/sys v0.0.0-20180308152046-7dca6fe1f437 // indirect + gopkg.in/errgo.v1 v1.0.0 + gopkg.in/httprequest.v1 v1.0.0-20171212180935-fdaf1bffa255 + gopkg.in/juju/environschema.v1 v1.0.0-20151104115810-7359fc7857ab + gopkg.in/juju/names.v2 v2.0.0-20171113112047-54f00845ae47 + gopkg.in/macaroon-bakery.v2 v2.0.0-20180323174221-4e2cb21b624f + gopkg.in/macaroon.v2 v2.0.0 + gopkg.in/mgo.v2 v2.0.0-20160818020120-3f83fa500528 // indirect + gopkg.in/yaml.v2 v2.2.1 // indirect + launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect +) diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/go.sum lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/go.sum --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/go.sum 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/go.sum 2018-11-22 20:53:35.000000000 +0000 @@ -0,0 +1,62 @@ +github.com/frankban/quicktest v1.1.0 h1:Fw/voXLo2r0Tvu5uy/GV/W5XpT7LYfbrqottX3kz8YE= +github.com/frankban/quicktest v1.1.0/go.mod h1:R98jIehRai+d1/3Hv2//jOVCTJhW1VBavT6B6CuGq2k= +github.com/golang/protobuf v1.0.0 h1:lsek0oXi8iFE9L+EXARyHIjU5rlWIhhTkjDz3vHhWWQ= +github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/juju/errors v0.0.0-20170703010042-c7d06af17c68 h1:d2hBkTvi7B89+OXY8+bBBshPlc+7JYacGrG/dFak8SQ= +github.com/juju/errors v0.0.0-20170703010042-c7d06af17c68/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/loggo v0.0.0-20170605014607-8232ab8918d9 h1:Y+lzErDTURqeXqlqYi4YBYbDd7ycU74gW1ADt57/bgY= +github.com/juju/loggo v0.0.0-20170605014607-8232ab8918d9/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= +github.com/juju/retry v0.0.0-20151029024821-62c620325291 h1:Rp0pLxDOsLDDwh2S73oHLI2KTFFyrF6oM/DgP0FhhBk= +github.com/juju/retry v0.0.0-20151029024821-62c620325291/go.mod h1:OohPQGsr4pnxwD5YljhQ+TZnuVRYpa5irjugL1Yuif4= +github.com/juju/schema v0.0.0-20160420044203-075de04f9b7d h1:JYANSZLNBXFgnNfGDOUAV+atWFDmOqJ1WPNmyS+YCCw= +github.com/juju/schema v0.0.0-20160420044203-075de04f9b7d/go.mod h1:7dL+43wADDfx5rD9ibr5H9Dgr4iOM3uHOa1i4IVLak8= +github.com/juju/testing v0.0.0-20180213134616-43f926548f91 h1:JllQi2udRTGX7DQBN/Zi1QNkpO/TnHt617KsyQFGTpE= +github.com/juju/testing v0.0.0-20180213134616-43f926548f91/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= +github.com/juju/usso v0.0.0-20160418121039-5b79b358f4bb h1:GC6ZmfS2OyVW/psihH/NrsDWUO2DOfOdPOVXeJc36Pk= +github.com/juju/usso v0.0.0-20160418121039-5b79b358f4bb/go.mod h1:sHjHrlB/5phHrKswH7VZpKFJhg4RcqsFDR27U3GKViI= +github.com/juju/utils v0.0.0-20180207021810-d18e608d0140 h1:93sOF0XClqgxN7GJa7gizDo8oj0GxbFVrqzA+jLDy88= +github.com/juju/utils v0.0.0-20180207021810-d18e608d0140/go.mod h1:6/KLg8Wz/y2KVGWEpkK9vMNGkOnu4k/cqs8Z1fKjTOk= +github.com/juju/version v0.0.0-20161031051906-1f41e27e54f2 h1:loQDi5MyxxNm7Q42mBGuPD6X+F6zw8j5S9yexLgn/BE= +github.com/juju/version v0.0.0-20161031051906-1f41e27e54f2/go.mod h1:kE8gK5X0CImdr7qpSKl3xB2PmpySSmfj7zVbkZFs81U= +github.com/juju/webbrowser v0.0.0-20160309143629-54b8c57083b4 h1:go1FDIXkFL8AUWgJ7B68rtFWCidyrMfZH9x3xwFK74s= +github.com/juju/webbrowser v0.0.0-20160309143629-54b8c57083b4/go.mod h1:G6PCelgkM6cuvyD10iYJsjLBsSadVXtJ+nBxFAxE2BU= +github.com/julienschmidt/httprouter v0.0.0-20151013225520-77a895ad01eb h1:a8sYyruWLyKeMay8GPF+nwZ36xT7A0oNyn68Q6wJ5cc= +github.com/julienschmidt/httprouter v0.0.0-20151013225520-77a895ad01eb/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +golang.org/x/crypto v0.0.0-20180308185624-c7dcf104e3a7 h1:c9Tyi4qyEZwEJ1+Zm6Fcqf+68wmUdMzfXYTp3s8Nzg8= +golang.org/x/crypto v0.0.0-20180308185624-c7dcf104e3a7/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20171107184841-a337091b0525 h1:KtEW9ll78DlakrUaoIv2p6oozE+wN/abax8yB4Y8+Fs= +golang.org/x/net v0.0.0-20171107184841-a337091b0525/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180308152046-7dca6fe1f437 h1:ybxsSLckDK17jUTy3W9NsUT/B/9ik5fJr1y8KnwJPZ4= +golang.org/x/sys v0.0.0-20180308152046-7dca6fe1f437/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v1 v1.0.0 h1:n+7XfCyygBFb8sEjg6692xjC6Us50TFRO54+xYUEwjE= +gopkg.in/errgo.v1 v1.0.0/go.mod h1:CxwszS/Xz1C49Ucd2i6Zil5UToP1EmyrFhKaMVbg1mk= +gopkg.in/httprequest.v1 v1.0.0-20171212180935-fdaf1bffa255 h1:c8Tllx9gL2KBVcsaZa44mCKG4WtiqNupYc/EzontePM= +gopkg.in/httprequest.v1 v1.0.0-20171212180935-fdaf1bffa255/go.mod h1:/CkavNL+g3qLOrpFHVrEx4NKepeqR4XTZWNj4sGGjz0= +gopkg.in/juju/environschema.v1 v1.0.0-20151104115810-7359fc7857ab h1:kygRC4uJrga6LigPehhgIF5yzml4GIv0Na2GeUHALQk= +gopkg.in/juju/environschema.v1 v1.0.0-20151104115810-7359fc7857ab/go.mod h1:Kq3Lf4sWr8hWSgxmDKY2Esv2Ab6zTgNk6uWyL9xC8ks= +gopkg.in/juju/names.v2 v2.0.0-20171113112047-54f00845ae47 h1:w2Yt8TmMuXAoC+J6ZkSJxSVoGtMl3+0HCc0xLveuFBY= +gopkg.in/juju/names.v2 v2.0.0-20171113112047-54f00845ae47/go.mod h1:XXa/v5qG1IsStRg5KTE8JkDMndoDMOKH1YYw0jSUWaM= +gopkg.in/macaroon-bakery.v2 v2.0.0-20180323174221-4e2cb21b624f h1:B1bA9m0z1PXgaKDU7Uq6BlJm6LeBQ/cmgj0WzTHpm9w= +gopkg.in/macaroon-bakery.v2 v2.0.0-20180323174221-4e2cb21b624f/go.mod h1:B4/T17l+ZWGwxFSZQmlBwp25x+og7OkhETfr3S9MbIA= +gopkg.in/macaroon.v2 v2.0.0 h1:LVWycAfeJBUjCIqfR9gqlo7I8vmiXRr51YEOZ1suop8= +gopkg.in/macaroon.v2 v2.0.0/go.mod h1:+I6LnTMkm/uV5ew/0nsulNjL16SK4+C8yDmRUzHR17I= +gopkg.in/mgo.v2 v2.0.0-20160818020120-3f83fa500528 h1:/saqWwm73dLmuzbNhe92F0QsZ/KiFND+esHco2v1hiY= +gopkg.in/mgo.v2 v2.0.0-20160818020120-3f83fa500528/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/package_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/package_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/package_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/package_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package candidclient_test - -import ( - "testing" - - jujutesting "github.com/juju/testing" -) - -func TestPackage(t *testing.T) { - jujutesting.MgoTestPackage(t, nil) -} diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/params/package_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/params/package_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/params/package_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/params/package_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package params_test - -import ( - "testing" - - jujutesting "github.com/juju/testing" -) - -func TestPackage(t *testing.T) { - jujutesting.MgoTestPackage(t, nil) -} diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/params/params.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/params/params.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/params/params.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/params/params.go 2018-11-22 20:53:35.000000000 +0000 @@ -106,6 +106,10 @@ // if using Time.MarshalText. It matches all identies that have a // last discharge time after the given time. LastDischargeSince string `httprequest:"last-discharge-since,form"` + + // Owner, if present, matches all agent identities with the given + // owner. + Owner string `httprequest:"owner,form"` } // UserRequest is a request for the user details of the named user. @@ -149,6 +153,13 @@ FullName string `json:"fullname"` Groups []string `json:"idpgroups"` PublicKeys []*bakery.PublicKey `json:"public_keys"` + + // A parent agent is one that can create its own agents. A parent + // agent does not have an owner and so remains a member of the + // groups it has been allocated irrespective of whether the + // creating user remains a member. Only users in the write-user + // ACL can create a parent agent. + Parent bool `json:"parent,omitempty"` } // CreateAgentResponse holds the response from a diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/params/params_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/params/params_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/params/params_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/params/params_test.go 2018-11-22 20:53:35.000000000 +0000 @@ -4,15 +4,13 @@ package params_test import ( - gc "gopkg.in/check.v1" + "testing" + + qt "github.com/frankban/quicktest" "gopkg.in/CanonicalLtd/candidclient.v1/params" ) -type paramsSuite struct{} - -var _ = gc.Suite(¶msSuite{}) - var usernameUnmarshalTests = []struct { username string expectError string @@ -30,17 +28,21 @@ expectError: "username longer than 256 characters", }} -func (s *paramsSuite) TestUsernameTextUnmarshal(c *gc.C) { - for i, test := range usernameUnmarshalTests { - c.Logf("%d. %s", i, test.username) - u := new(params.Username) - err := u.UnmarshalText([]byte(test.username)) - if test.expectError == "" { - c.Assert(err, gc.IsNil) - c.Assert(*u, gc.Equals, params.Username(test.username)) - } else { - c.Assert(err, gc.ErrorMatches, test.expectError) - c.Assert(*u, gc.Equals, params.Username("")) - } +func TestUsernameTextUnmarshal(t *testing.T) { + c := qt.New(t) + defer c.Done() + + for _, test := range usernameUnmarshalTests { + c.Run(test.username, func(c *qt.C) { + u := new(params.Username) + err := u.UnmarshalText([]byte(test.username)) + if test.expectError == "" { + c.Assert(err, qt.Equals, nil) + c.Assert(*u, qt.Equals, params.Username(test.username)) + } else { + c.Assert(err, qt.ErrorMatches, test.expectError) + c.Assert(*u, qt.Equals, params.Username("")) + } + }) } } diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/permcheck_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/permcheck_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/permcheck_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/permcheck_test.go 2018-11-22 20:53:35.000000000 +0000 @@ -4,21 +4,18 @@ package candidclient_test import ( + "testing" "time" - jc "github.com/juju/testing/checkers" - gc "gopkg.in/check.v1" + qt "github.com/frankban/quicktest" "gopkg.in/CanonicalLtd/candidclient.v1" "gopkg.in/CanonicalLtd/candidclient.v1/candidtest" ) -type permCheckerSuite struct { -} - -var _ = gc.Suite(&permCheckerSuite{}) - -func (s *permCheckerSuite) TestPermChecker(c *gc.C) { +func TestPermChecker(t *testing.T) { + c := qt.New(t) + defer c.Done() srv := candidtest.NewServer() srv.AddUser("server-user", candidtest.GroupListGroup) srv.AddUser("alice", "somegroup") @@ -27,62 +24,64 @@ BaseURL: srv.URL.String(), Client: srv.Client("server-user"), }) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) pc := candidclient.NewPermChecker(client, time.Hour) // No permissions always yields false. ok, err := pc.Allow("bob", nil) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, false) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, false) // If the user isn't found, we return a (false, nil) ok, err = pc.Allow("bob", []string{"beatles"}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, false) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, false) // If the perms allow everyone, it's ok ok, err = pc.Allow("bob", []string{"noone", "everyone"}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, true) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, true) // If the perms allow everyone@somewhere, it's ok. ok, err = pc.Allow("bob@somewhere", []string{"everyone@somewhere"}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, true) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, true) // Check that the everyone@x logic works with multiple @s. ok, err = pc.Allow("bob@foo@somewhere@else", []string{"everyone@somewhere@else"}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, true) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, true) // Check that we're careful enough about "everyone" as a prefix // to a user name. ok, err = pc.Allow("bobx", []string{"everyonex"}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, false) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, false) // If the perms allow the user itself, it's ok ok, err = pc.Allow("bob", []string{"noone", "bob"}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, true) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, true) srv.AddUser("bob", "beatles") // The group details are currently cached by the client, // so the original request will still fail. ok, err = pc.Allow("bob", []string{"beatles"}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, false) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, false) // Clearing the cache allows it to succeed. pc.CacheEvictAll() ok, err = pc.Allow("bob", []string{"beatles"}) - c.Assert(err, gc.IsNil) - c.Assert(ok, gc.Equals, true) + c.Assert(err, qt.Equals, nil) + c.Assert(ok, qt.Equals, true) } -func (s *permCheckerSuite) TestGroupCache(c *gc.C) { +func TestGroupCache(t *testing.T) { + c := qt.New(t) + defer c.Done() srv := candidtest.NewServer() srv.AddUser("server-user", candidtest.GroupListGroup) srv.AddUser("alice", "somegroup", "othergroup") @@ -91,30 +90,30 @@ BaseURL: srv.URL.String(), Client: srv.Client("server-user"), }) - c.Assert(err, gc.IsNil) + c.Assert(err, qt.Equals, nil) cache := candidclient.NewGroupCache(client, time.Hour) // If the user isn't found, we retturn no groups. g, err := cache.Groups("bob") - c.Assert(err, gc.IsNil) - c.Assert(g, gc.HasLen, 0) + c.Assert(err, qt.Equals, nil) + c.Assert(g, qt.HasLen, 0) g, err = cache.Groups("alice") - c.Assert(err, gc.IsNil) - c.Assert(g, jc.DeepEquals, []string{"othergroup", "somegroup"}) + c.Assert(err, qt.Equals, nil) + c.Assert(g, qt.DeepEquals, []string{"othergroup", "somegroup"}) srv.AddUser("bob", "beatles") // The group details are currently cached by the client, // so we'll still see the original group membership. g, err = cache.Groups("bob") - c.Assert(err, gc.IsNil) - c.Assert(g, gc.HasLen, 0) + c.Assert(err, qt.Equals, nil) + c.Assert(g, qt.HasLen, 0) // Clearing the cache allows it to succeed. cache.CacheEvictAll() g, err = cache.Groups("bob") - c.Assert(err, gc.IsNil) - c.Assert(g, jc.DeepEquals, []string{"beatles"}) + c.Assert(err, qt.Equals, nil) + c.Assert(g, qt.DeepEquals, []string{"beatles"}) } diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/.travis.yml lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/.travis.yml --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/.travis.yml 2018-11-22 20:53:35.000000000 +0000 @@ -0,0 +1,12 @@ +language: go +go_import_path: "gopkg.in/CanonicalLtd/candidclient.v1" +go: + - "1.9" + - "1.10" + - "1.11" +before_install: + - "go get github.com/rogpeppe/godeps" +install: + - "go get -d gopkg.in/CanonicalLtd/candidclient.v1" + - "godeps -u $GOPATH/src/gopkg.in/CanonicalLtd/candidclient.v1/dependencies.tsv" +script: GO111MODULE=on go test ./... diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/client_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/client_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/client_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/client_test.go 2018-11-22 20:53:35.000000000 +0000 @@ -6,10 +6,13 @@ import ( "net/http" "net/http/httptest" + "testing" - jc "github.com/juju/testing/checkers" + qt "github.com/frankban/quicktest" + "github.com/frankban/quicktest/qtsuite" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" "golang.org/x/net/context" - gc "gopkg.in/check.v1" errgo "gopkg.in/errgo.v1" "gopkg.in/httprequest.v1" "gopkg.in/macaroon-bakery.v2/bakery" @@ -25,6 +28,15 @@ var testContext = context.Background() +var macaroonEquals = qt.CmpEquals(cmp.AllowUnexported(macaroon.Macaroon{}), cmpopts.EquateEmpty()) + +func TestClient(t *testing.T) { + c := qt.New(t) + defer c.Done() + + qtsuite.Run(c, &clientSuite{}) +} + type clientSuite struct { testMacaroon *bakery.Macaroon testDischargeMacaroon *macaroon.Macaroon @@ -35,8 +47,6 @@ macaroon *bakery.Macaroon } -var _ = gc.Suite(&clientSuite{}) - // ServeHTTP allows us to use the test suite as a handler to test the // client methods against. func (s *clientSuite) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -52,84 +62,81 @@ } } -func (s *clientSuite) SetUpTest(c *gc.C) { +func (s *clientSuite) Init(c *qt.C) { var err error s.testMacaroon, err = bakery.NewMacaroon([]byte("test rootkey"), []byte("test macaroon"), "test location", bakery.LatestVersion, nil) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) // Discharge macaroons from Ubuntu SSO will be binary encoded in the version 1 format. s.testDischargeMacaroon, err = macaroon.New([]byte("test discharge rootkey"), []byte("test discharge macaroon"), "test discharge location", macaroon.V1) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) s.srv = httptest.NewServer(s) + c.Defer(s.srv.Close) s.macaroon = nil } -func (s *clientSuite) TearDownTest(c *gc.C) { - s.srv.Close() -} - -func (s *clientSuite) TestMacaroon(c *gc.C) { +func (s *clientSuite) TestMacaroon(c *qt.C) { s.macaroon = s.testMacaroon m, err := ussodischarge.Macaroon(testContext, nil, s.srv.URL+"/macaroon") - c.Assert(err, gc.Equals, nil) - c.Assert(m.M(), jc.DeepEquals, s.testMacaroon.M()) + c.Assert(err, qt.Equals, nil) + c.Assert(m.M(), macaroonEquals, s.testMacaroon.M()) } -func (s *clientSuite) TestMacaroonError(c *gc.C) { +func (s *clientSuite) TestMacaroonError(c *qt.C) { m, err := ussodischarge.Macaroon(testContext, nil, s.srv.URL+"/macaroon") - c.Assert(m, gc.IsNil) - c.Assert(err, gc.ErrorMatches, `cannot get macaroon: Get http.*: test error`) + c.Assert(m, qt.IsNil) + c.Assert(err, qt.ErrorMatches, `cannot get macaroon: Get http.*: test error`) } -func (s *clientSuite) TestVisitor(c *gc.C) { +func (s *clientSuite) TestVisitor(c *qt.C) { v := ussodischarge.NewInteractor(func(_ *httpbakery.Client, url string) (macaroon.Slice, error) { - c.Assert(url, gc.Equals, s.srv.URL+"/login") + c.Assert(url, qt.Equals, s.srv.URL+"/login") return macaroon.Slice{s.testMacaroon.M()}, nil }) client := httpbakery.NewClient() req, err := http.NewRequest("GET", "", nil) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) ierr := httpbakery.NewInteractionRequiredError(nil, req) ussodischarge.SetInteraction(ierr, s.srv.URL+"/login") dt, err := v.Interact(testContext, client, "", ierr) - c.Assert(err, gc.Equals, nil) - c.Assert(dt, jc.DeepEquals, &httpbakery.DischargeToken{ + c.Assert(err, qt.Equals, nil) + c.Assert(dt, qt.DeepEquals, &httpbakery.DischargeToken{ Kind: "test-kind", Value: []byte("test-value"), }) } -func (s *clientSuite) TestVisitorMethodNotSupported(c *gc.C) { +func (s *clientSuite) TestVisitorMethodNotSupported(c *qt.C) { v := ussodischarge.NewInteractor(func(_ *httpbakery.Client, url string) (macaroon.Slice, error) { return nil, errgo.New("function called unexpectedly") }) client := httpbakery.NewClient() req, err := http.NewRequest("GET", "", nil) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) ierr := httpbakery.NewInteractionRequiredError(nil, req) ierr.SetInteraction("other", nil) dt, err := v.Interact(testContext, client, "", ierr) - c.Assert(errgo.Cause(err), gc.Equals, httpbakery.ErrInteractionMethodNotFound) - c.Assert(dt, gc.IsNil) + c.Assert(errgo.Cause(err), qt.Equals, httpbakery.ErrInteractionMethodNotFound) + c.Assert(dt, qt.IsNil) } -func (s *clientSuite) TestVisitorFunctionError(c *gc.C) { +func (s *clientSuite) TestVisitorFunctionError(c *qt.C) { v := ussodischarge.NewInteractor(func(_ *httpbakery.Client, url string) (macaroon.Slice, error) { return nil, errgo.WithCausef(nil, testCause, "test error") }) client := httpbakery.NewClient() req, err := http.NewRequest("GET", "", nil) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) ierr := httpbakery.NewInteractionRequiredError(nil, req) ussodischarge.SetInteraction(ierr, s.srv.URL+"/login") dt, err := v.Interact(testContext, client, "", ierr) - c.Assert(errgo.Cause(err), gc.Equals, testCause) - c.Assert(err, gc.ErrorMatches, "test error") - c.Assert(dt, gc.IsNil) + c.Assert(errgo.Cause(err), qt.Equals, testCause) + c.Assert(err, qt.ErrorMatches, "test error") + c.Assert(dt, qt.IsNil) } -func (s *clientSuite) TestAcquireDischarge(c *gc.C) { +func (s *clientSuite) TestAcquireDischarge(c *qt.C) { d := &ussodischarge.Discharger{ Email: "user@example.com", Password: "secret", @@ -139,11 +146,11 @@ Location: s.srv.URL, Id: []byte("test caveat id"), }, nil) - c.Assert(err, gc.Equals, nil) - c.Assert(m.M(), jc.DeepEquals, s.testDischargeMacaroon) + c.Assert(err, qt.Equals, nil) + c.Assert(m.M(), macaroonEquals, s.testDischargeMacaroon) } -func (s *clientSuite) TestAcquireDischargeError(c *gc.C) { +func (s *clientSuite) TestAcquireDischargeError(c *qt.C) { d := &ussodischarge.Discharger{ Email: "user@example.com", Password: "bad-secret", @@ -153,38 +160,38 @@ Location: s.srv.URL, Id: []byte("test caveat id"), }, nil) - c.Assert(err, gc.ErrorMatches, `Post http.*: Provided email/password is not correct.`) - c.Assert(m, gc.IsNil) + c.Assert(err, qt.ErrorMatches, `Post http.*: Provided email/password is not correct.`) + c.Assert(m, qt.IsNil) } -func (s *clientSuite) TestDischargeAll(c *gc.C) { +func (s *clientSuite) TestDischargeAll(c *qt.C) { m := s.testMacaroon.Clone() err := m.M().AddThirdPartyCaveat([]byte("third party root key"), []byte("third party caveat id"), s.srv.URL) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) d := &ussodischarge.Discharger{ Email: "user@example.com", Password: "secret", OTP: "123456", } ms, err := d.DischargeAll(testContext, m) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) md := s.testDischargeMacaroon.Clone() md.Bind(m.M().Signature()) - c.Assert(ms, jc.DeepEquals, macaroon.Slice{m.M(), md}) + c.Assert(ms, macaroonEquals, macaroon.Slice{m.M(), md}) } -func (s *clientSuite) TestDischargeAllError(c *gc.C) { +func (s *clientSuite) TestDischargeAllError(c *qt.C) { m := s.testMacaroon.Clone() err := m.M().AddThirdPartyCaveat([]byte("third party root key"), []byte("third party caveat id"), s.srv.URL) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) d := &ussodischarge.Discharger{ Email: "user@example.com", Password: "bad-secret", OTP: "123456", } ms, err := d.DischargeAll(testContext, m) - c.Assert(err, gc.ErrorMatches, `cannot get discharge from ".*": Post http.*: Provided email/password is not correct.`) - c.Assert(ms, gc.IsNil) + c.Assert(err, qt.ErrorMatches, `cannot get discharge from ".*": Post http.*: Provided email/password is not correct.`) + c.Assert(ms, qt.IsNil) } func (s *clientSuite) serveMacaroon(w http.ResponseWriter, r *http.Request) { diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/package_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/package_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/package_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/package_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -// Copyright 2016 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package ussodischarge_test - -import ( - "testing" - - gc "gopkg.in/check.v1" -) - -func TestPackage(t *testing.T) { - gc.TestingT(t) -} diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/params_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/params_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/params_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussodischarge/params_test.go 2018-11-22 20:53:35.000000000 +0000 @@ -5,42 +5,50 @@ import ( "encoding/json" + "testing" - gc "gopkg.in/check.v1" + qt "github.com/frankban/quicktest" "gopkg.in/CanonicalLtd/candidclient.v1/ussodischarge" ) -type paramsSuite struct { -} - -var _ = gc.Suite(¶msSuite{}) +func TestUnmarshalUSSOMacaroon(t *testing.T) { + c := qt.New(t) + defer c.Done() -func (s *paramsSuite) TestUnmarshalUSSOMacaroon(c *gc.C) { data := []byte(`"MDAxYmxvY2F0aW9uIHRlc3QgbG9jYXRpb24KMDAxZGlkZW50aWZpZXIgdGVzdCBtYWNhcm9vbgowMDJmc2lnbmF0dXJlICaaplwsJeHwPuBK6er_d3DnEnSJ2b85-V9SXsiL6xWOCg"`) var m ussodischarge.USSOMacaroon err := json.Unmarshal(data, &m) - c.Assert(err, gc.Equals, nil) - c.Assert(string(m.Macaroon.Id()), gc.Equals, "test macaroon") + c.Assert(err, qt.Equals, nil) + c.Assert(string(m.Macaroon.Id()), qt.Equals, "test macaroon") } -func (s *paramsSuite) TestUnmarshalUSSOMacaroonNotJSONString(c *gc.C) { +func TestUnmarshalUSSOMacaroonNotJSONString(t *testing.T) { + c := qt.New(t) + defer c.Done() + data := []byte(`123`) var m ussodischarge.USSOMacaroon err := json.Unmarshal(data, &m) - c.Assert(err, gc.ErrorMatches, `cannot unmarshal macaroon: json: cannot unmarshal number into Go value of type string`) + c.Assert(err, qt.ErrorMatches, `cannot unmarshal macaroon: json: cannot unmarshal number into Go value of type string`) } -func (s *paramsSuite) TestUnmarshalUSSOMacaroonBadBase64(c *gc.C) { +func TestUnmarshalUSSOMacaroonBadBase64(t *testing.T) { + c := qt.New(t) + defer c.Done() + data := []byte(`"MDAxYmxvY2F0aW9uIHRlc3QgbG9jYXRpb24KMDAxZGlkZW50aWZpZXIgdGVzdCBtYWNhcm9vbgowMDJmc2lnbmF0dXJlICaaplwsJeHwPuBK6er/d3DnEnSJ2b85+V9SXsiL6xWOCg"`) var m ussodischarge.USSOMacaroon err := json.Unmarshal(data, &m) - c.Assert(err, gc.ErrorMatches, `cannot unmarshal macaroon: illegal base64 data at input byte 111`) + c.Assert(err, qt.ErrorMatches, `cannot unmarshal macaroon: illegal base64 data at input byte 111`) } -func (s *paramsSuite) TestUnmarshalUSSOMacaroonBadBinary(c *gc.C) { +func TestUnmarshalUSSOMacaroonBadBinary(t *testing.T) { + c := qt.New(t) + defer c.Done() + data := []byte(`"NDAxYmxvY2F0aW9uIHRlc3QgbG9jYXRpb24KMDAxZGlkZW50aWZpZXIgdGVzdCBtYWNhcm9vbgowMDJmc2lnbmF0dXJlICaaplwsJeHwPuBK6er_d3DnEnSJ2b85-V9SXsiL6xWOCg"`) var m ussodischarge.USSOMacaroon err := json.Unmarshal(data, &m) - c.Assert(err, gc.ErrorMatches, `cannot unmarshal macaroon: unmarshal v1: packet size too big`) + c.Assert(err, qt.ErrorMatches, `cannot unmarshal macaroon: unmarshal v1: packet size too big`) } diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussologin/package_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussologin/package_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussologin/package_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussologin/package_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -// Copyright 2016 Canonical Ltd. -// Licensed under the LGPLv3, see LICENCE file for details. - -package ussologin_test - -import ( - "testing" - - gc "gopkg.in/check.v1" -) - -func TestPackage(t *testing.T) { - gc.TestingT(t) -} diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussologin/ussologin_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussologin/ussologin_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussologin/ussologin_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussologin/ussologin_test.go 2018-11-22 20:53:35.000000000 +0000 @@ -8,25 +8,22 @@ "fmt" "io/ioutil" "path/filepath" + "testing" - "github.com/juju/testing" - jc "github.com/juju/testing/checkers" + qt "github.com/frankban/quicktest" + jt "github.com/juju/testing" "github.com/juju/usso" "golang.org/x/net/context" - gc "gopkg.in/check.v1" errgo "gopkg.in/errgo.v1" "gopkg.in/juju/environschema.v1/form" "gopkg.in/CanonicalLtd/candidclient.v1/ussologin" ) -type storeSuite struct { - testing.CleanupSuite -} - -var _ = gc.Suite(&storeSuite{}) +func TestPutGetToken(t *testing.T) { + c := qt.New(t) + defer c.Done() -func (s *storeSuite) TestPutGetToken(c *gc.C) { token := &usso.SSOData{ ConsumerKey: "consumerkey", ConsumerSecret: "consumersecret", @@ -35,39 +32,39 @@ TokenName: "tokenname", TokenSecret: "tokensecret", } - path := filepath.Join(c.MkDir(), "subdir", "tokenFile") + path := filepath.Join(c.Mkdir(), "subdir", "tokenFile") store := ussologin.NewFileTokenStore(path) err := store.Put(token) - c.Assert(err, jc.ErrorIsNil) + c.Assert(err, qt.Equals, nil) tok, err := store.Get() - c.Assert(err, jc.ErrorIsNil) - c.Assert(tok, gc.DeepEquals, token) + c.Assert(err, qt.Equals, nil) + c.Assert(tok, qt.DeepEquals, token) data, err := ioutil.ReadFile(path) - c.Assert(err, jc.ErrorIsNil) + c.Assert(err, qt.Equals, nil) var storedToken *usso.SSOData err = json.Unmarshal(data, &storedToken) - c.Assert(err, jc.ErrorIsNil) - c.Assert(token, gc.DeepEquals, storedToken) + c.Assert(err, qt.Equals, nil) + c.Assert(token, qt.DeepEquals, storedToken) } -func (s *storeSuite) TestReadInvalidToken(c *gc.C) { - path := fmt.Sprintf("%s/tokenFile", c.MkDir()) +func TestReadInvalidToken(t *testing.T) { + c := qt.New(t) + defer c.Done() + + path := fmt.Sprintf("%s/tokenFile", c.Mkdir()) err := ioutil.WriteFile(path, []byte("foobar"), 0700) - c.Assert(err, jc.ErrorIsNil) + c.Assert(err, qt.Equals, nil) store := ussologin.NewFileTokenStore(path) _, err = store.Get() - c.Assert(err, gc.ErrorMatches, `cannot unmarshal token: invalid character 'o' in literal false \(expecting 'a'\)`) -} - -type storeTokenGetterSuite struct { - testing.CleanupSuite + c.Assert(err, qt.ErrorMatches, `cannot unmarshal token: invalid character 'o' in literal false \(expecting 'a'\)`) } -var _ = gc.Suite(&storeTokenGetterSuite{}) +func TestTokenInStore(t *testing.T) { + c := qt.New(t) + defer c.Done() -func (s *storeTokenGetterSuite) TestTokenInStore(c *gc.C) { testToken := &usso.SSOData{ ConsumerKey: "consumerkey", ConsumerSecret: "consumersecret", @@ -84,14 +81,17 @@ } ctx := context.Background() tok, err := g.GetToken(ctx) - c.Assert(err, gc.Equals, nil) - c.Assert(tok, jc.DeepEquals, testToken) - st.CheckCalls(c, []testing.StubCall{{ + c.Assert(err, qt.Equals, nil) + c.Assert(tok, qt.DeepEquals, testToken) + c.Assert(st.Calls(), qt.DeepEquals, []jt.StubCall{{ FuncName: "Get", }}) } -func (s *storeTokenGetterSuite) TestTokenNotInStore(c *gc.C) { +func TestTokenNotInStore(t *testing.T) { + c := qt.New(t) + defer c.Done() + testToken := &usso.SSOData{ ConsumerKey: "consumerkey", ConsumerSecret: "consumersecret", @@ -111,29 +111,26 @@ } ctx := context.Background() tok, err := g.GetToken(ctx) - c.Assert(err, gc.Equals, nil) - c.Assert(tok, jc.DeepEquals, testToken) - st.CheckCalls(c, []testing.StubCall{{ + c.Assert(err, qt.Equals, nil) + c.Assert(tok, qt.DeepEquals, testToken) + c.Assert(st.Calls(), qt.DeepEquals, []jt.StubCall{{ FuncName: "Get", }, { FuncName: "Put", Args: []interface{}{testToken}, }}) - fg.CheckCalls(c, []testing.StubCall{{ + c.Assert(fg.Calls(), qt.DeepEquals, []jt.StubCall{{ FuncName: "GetToken", Args: []interface{}{ctx}, }}) } -type formTokenGetterSuite struct { - testing.CleanupSuite -} - -var _ = gc.Suite(&formTokenGetterSuite{}) +func TestCorrectUserPasswordSentToUSSOServer(t *testing.T) { + c := qt.New(t) + defer c.Done() -func (s *formTokenGetterSuite) TestCorrectUserPasswordSentToUSSOServer(c *gc.C) { ussoStub := &ussoServerStub{} - s.PatchValue(ussologin.Server, ussoStub) + c.Patch(ussologin.Server, ussoStub) tg := ussologin.FormTokenGetter{ Filler: &testFiller{ map[string]interface{}{ @@ -144,14 +141,22 @@ Name: "testToken", } _, err := tg.GetToken(context.Background()) - c.Assert(err, gc.Equals, nil) - ussoStub.CheckCall(c, 0, "GetTokenWithOTP", "foobar", "pass", "1234", "testToken") + c.Assert(err, qt.Equals, nil) + calls := ussoStub.Calls() + c.Assert(len(calls) > 0, qt.Equals, true) + c.Assert(calls[0], qt.DeepEquals, jt.StubCall{ + FuncName: "GetTokenWithOTP", + Args: []interface{}{"foobar", "pass", "1234", "testToken"}, + }) } -func (s *formTokenGetterSuite) TestLoginFailsToGetToken(c *gc.C) { +func TestLoginFailsToGetToken(t *testing.T) { + c := qt.New(t) + defer c.Done() + ussoStub := &ussoServerStub{} ussoStub.SetErrors(errgo.New("something failed")) - s.PatchValue(ussologin.Server, ussoStub) + c.Patch(ussologin.Server, ussoStub) tg := ussologin.FormTokenGetter{ Filler: &testFiller{ map[string]interface{}{ @@ -162,18 +167,21 @@ Name: "testToken", } _, err := tg.GetToken(context.Background()) - c.Assert(err, gc.ErrorMatches, "cannot get token: something failed") + c.Assert(err, qt.ErrorMatches, "cannot get token: something failed") } -func (s *formTokenGetterSuite) TestFailedToReadLoginParameters(c *gc.C) { +func TestFailedToReadLoginParameters(t *testing.T) { + c := qt.New(t) + defer c.Done() + ussoStub := &ussoServerStub{} - s.PatchValue(ussologin.Server, ussoStub) + c.Patch(ussologin.Server, ussoStub) tg := ussologin.FormTokenGetter{ Filler: &errFiller{}, } _, err := tg.GetToken(context.Background()) - c.Assert(err, gc.ErrorMatches, "cannot read login parameters: something failed") - ussoStub.CheckNoCalls(c) + c.Assert(err, qt.ErrorMatches, "cannot read login parameters: something failed") + c.Assert(ussoStub.Calls(), qt.HasLen, 0) } type testFiller struct { @@ -191,7 +199,7 @@ } type ussoServerStub struct { - testing.Stub + jt.Stub } func (u *ussoServerStub) GetTokenWithOTP(email, password, otp, tokenName string) (*usso.SSOData, error) { @@ -200,7 +208,7 @@ } type testTokenGetter struct { - testing.Stub + jt.Stub tok *usso.SSOData } @@ -210,7 +218,7 @@ } type testTokenStore struct { - testing.Stub + jt.Stub tok *usso.SSOData } diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussologin/visitwebpage_test.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussologin/visitwebpage_test.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/candidclient/ussologin/visitwebpage_test.go 2018-08-20 23:46:15.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/candidclient/ussologin/visitwebpage_test.go 2018-11-22 20:53:35.000000000 +0000 @@ -6,12 +6,11 @@ import ( "net/http" "net/http/httptest" + "testing" - "github.com/juju/testing" - jc "github.com/juju/testing/checkers" + qt "github.com/frankban/quicktest" "github.com/juju/usso" "golang.org/x/net/context" - gc "gopkg.in/check.v1" errgo "gopkg.in/errgo.v1" "gopkg.in/httprequest.v1" "gopkg.in/macaroon-bakery.v2/httpbakery" @@ -19,42 +18,48 @@ "gopkg.in/CanonicalLtd/candidclient.v1/ussologin" ) -type interactorSuite struct { - testing.CleanupSuite -} - -var _ = gc.Suite(&interactorSuite{}) +func TestKind(t *testing.T) { + c := qt.New(t) + defer c.Done() -func (s *interactorSuite) TestKind(c *gc.C) { i := ussologin.NewInteractor(nil) - c.Assert(i.Kind(), gc.Equals, "usso_oauth") + c.Assert(i.Kind(), qt.Equals, "usso_oauth") } -func (s *interactorSuite) TestInteractNotSupportedError(c *gc.C) { +func TestInteractNotSupportedError(t *testing.T) { + c := qt.New(t) + defer c.Done() + i := ussologin.NewInteractor(nil) req, err := http.NewRequest("GET", "", nil) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) ierr := httpbakery.NewInteractionRequiredError(nil, req) httpbakery.SetLegacyInteraction(ierr, "", "") _, err = i.Interact(context.Background(), nil, "", ierr) - c.Assert(errgo.Cause(err), gc.Equals, httpbakery.ErrInteractionMethodNotFound) + c.Assert(errgo.Cause(err), qt.Equals, httpbakery.ErrInteractionMethodNotFound) } -func (s *interactorSuite) TestInteractGetTokenError(c *gc.C) { +func TestInteractGetTokenError(t *testing.T) { + c := qt.New(t) + defer c.Done() + terr := errgo.New("test error") i := ussologin.NewInteractor(tokenGetterFunc(func(_ context.Context) (*usso.SSOData, error) { return nil, terr })) - ierr := s.interactionRequiredError(c, "") + ierr := interactionRequiredError(c, "") _, err := i.Interact(context.Background(), nil, "", ierr) - c.Assert(errgo.Cause(err), gc.Equals, terr) + c.Assert(errgo.Cause(err), qt.Equals, terr) } -func (s *interactorSuite) TestAuthenticatedRequest(c *gc.C) { +func TestAuthenticatedRequest(t *testing.T) { + c := qt.New(t) + defer c.Done() + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { // Just check the request has a correct looking // Authorization header, we won't check the signature. - c.Check(req.Header.Get("Authorization"), gc.Matches, "OAuth .*") + c.Check(req.Header.Get("Authorization"), qt.Matches, "OAuth .*") httprequest.WriteJSON(w, http.StatusOK, ussologin.LoginResponse{ DischargeToken: &httpbakery.DischargeToken{ Kind: "test", @@ -74,20 +79,23 @@ TokenSecret: "test-token-secret", }, nil })) - ierr := s.interactionRequiredError(c, server.URL) + ierr := interactionRequiredError(c, server.URL) dt, err := i.Interact(context.Background(), httpbakery.NewClient(), "", ierr) - c.Assert(err, gc.Equals, nil) - c.Assert(dt, jc.DeepEquals, &httpbakery.DischargeToken{ + c.Assert(err, qt.Equals, nil) + c.Assert(dt, qt.DeepEquals, &httpbakery.DischargeToken{ Kind: "test", Value: []byte("test-token"), }) } -func (s *interactorSuite) TestAuthenticatedRequestError(c *gc.C) { +func TestAuthenticatedRequestError(t *testing.T) { + c := qt.New(t) + defer c.Done() + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { // Just check the request has a correct looking // Authorization header, we won't check the signature. - c.Check(req.Header.Get("Authorization"), gc.Matches, "OAuth .*") + c.Check(req.Header.Get("Authorization"), qt.Matches, "OAuth .*") code, body := httpbakery.ErrorToResponse(context.Background(), errgo.New("test error")) httprequest.WriteJSON(w, code, body) })) @@ -103,14 +111,14 @@ TokenSecret: "test-token-secret", }, nil })) - ierr := s.interactionRequiredError(c, server.URL) + ierr := interactionRequiredError(c, server.URL) _, err := i.Interact(context.Background(), httpbakery.NewClient(), "", ierr) - c.Assert(err, gc.ErrorMatches, `Get http.*: test error`) + c.Assert(err, qt.ErrorMatches, `Get http.*: test error`) } -func (s *interactorSuite) interactionRequiredError(c *gc.C, url string) *httpbakery.Error { +func interactionRequiredError(c *qt.C, url string) *httpbakery.Error { req, err := http.NewRequest("GET", "", nil) - c.Assert(err, gc.Equals, nil) + c.Assert(err, qt.Equals, nil) ierr := httpbakery.NewInteractionRequiredError(nil, req) ussologin.SetInteraction(ierr, url) return ierr diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/cluster.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/cluster.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/cluster.go 2018-08-20 23:46:18.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/cluster.go 2018-11-22 20:53:37.000000000 +0000 @@ -63,10 +63,14 @@ func (c *cluster) Register(conn *bindings.Conn) { filename := conn.Filename() + c.registry.Lock() + defer c.registry.Unlock() c.registry.ConnLeaderAdd(filename, conn) } func (c *cluster) Unregister(conn *bindings.Conn) { + c.registry.Lock() + defer c.registry.Unlock() c.registry.ConnLeaderDel(conn) } diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/driver.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/driver.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/driver.go 2018-08-20 23:46:18.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/driver.go 2018-11-22 20:53:37.000000000 +0000 @@ -37,6 +37,7 @@ store ServerStore // Holds addresses of dqlite servers context context.Context // Global cancellation context connectionTimeout time.Duration // Max time to wait for a new connection + contextTimeout time.Duration // Default client context timeout. clientConfig client.Config // Configuration for dqlite client instances } @@ -72,6 +73,16 @@ } } +// WithContextTimeout sets the default client context timeout when no context +// deadline is provided. +// +// If not used, the default is 5 seconds. +func WithContextTimeout(timeout time.Duration) DriverOption { + return func(options *driverOptions) { + options.ContextTimeout = timeout + } +} + // WithConnectionBackoffFactor sets the exponential backoff factor for retrying // failed connection attempts. // @@ -113,6 +124,7 @@ store: store, context: o.Context, connectionTimeout: o.ConnectionTimeout, + contextTimeout: o.ContextTimeout, } driver.clientConfig.Dial = o.Dial @@ -132,6 +144,7 @@ Log LogFunc Dial client.DialFunc ConnectionTimeout time.Duration + ContextTimeout time.Duration ConnectionBackoffFactor time.Duration ConnectionBackoffCap time.Duration Context context.Context @@ -143,6 +156,7 @@ Log: defaultLogFunc(), Dial: client.TCPDial, ConnectionTimeout: 15 * time.Second, + ContextTimeout: 5 * time.Second, ConnectionBackoffFactor: 50 * time.Millisecond, ConnectionBackoffCap: time.Second, Context: context.Background(), @@ -190,13 +204,15 @@ connector := client.NewConnector(0, d.store, d.clientConfig, d.log) conn := &Conn{ - log: d.log, + log: d.log, + contextTimeout: d.contextTimeout, } conn.client, err = connector.Connect(ctx) if err != nil { return nil, errors.Wrap(err, "failed to create dqlite connection") } + conn.client.SetContextTimeout(d.contextTimeout) conn.request.Init(4096) conn.response.Init(4096) @@ -220,13 +236,24 @@ return conn, nil } +// SetContextTimeout sets the default client timeout when no context deadline +// is provided. +func (d *Driver) SetContextTimeout(timeout time.Duration) { + d.contextTimeout = timeout +} + +// ErrNoAvailableLeader is returned as root cause of Open() if there's no +// leader available in the cluster. +var ErrNoAvailableLeader = client.ErrNoAvailableLeader + // Conn implements the sql.Conn interface. type Conn struct { - log LogFunc - client *client.Client - request client.Message - response client.Message - id uint32 // Database ID. + log LogFunc + client *client.Client + request client.Message + response client.Message + id uint32 // Database ID. + contextTimeout time.Duration } // PrepareContext returns a prepared statement, bound to this connection. @@ -357,8 +384,7 @@ // Commit the transaction. func (tx *Tx) Commit() error { - // TODO: make the timeout configurable. - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), tx.conn.contextTimeout) defer cancel() if _, err := tx.conn.ExecContext(ctx, "COMMIT", nil); err != nil { @@ -370,8 +396,7 @@ // Rollback the transaction. func (tx *Tx) Rollback() error { - // TODO: make the timeout configurable. - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), tx.conn.contextTimeout) defer cancel() if _, err := tx.conn.ExecContext(ctx, "ROLLBACK", nil); err != nil { diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/internal/bindings/conn.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/internal/bindings/conn.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/internal/bindings/conn.go 2018-08-20 23:46:18.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/internal/bindings/conn.go 2018-11-22 20:53:37.000000000 +0000 @@ -88,7 +88,7 @@ sql := C.CString(query) defer C.free(unsafe.Pointer(sql)) - rc := C.sqlite3_prepare(db, sql, -1, &stmt, &tail) + rc := C.sqlite3_prepare(db, sql, C.int(-1), &stmt, &tail) if rc != C.SQLITE_OK { return nil, lastError(db) } diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/client.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/client.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/client.go 2018-08-20 23:46:18.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/client.go 2018-11-22 20:53:37.000000000 +0000 @@ -20,6 +20,7 @@ store ServerStore // Update this store upon heartbeats. conn net.Conn // Underlying network connection. heartbeatTimeout time.Duration // Heartbeat timeout reported at registration. + contextTimeout time.Duration // Default context timeout. closeCh chan struct{} // Stops the heartbeat when the connection gets closed mu sync.Mutex // Serialize requests } @@ -27,16 +28,23 @@ func newClient(conn net.Conn, address string, store ServerStore, log logging.Func) *Client { //logger.With(zap.String("target", address) client := &Client{ - conn: conn, - address: address, - store: store, - log: log, - closeCh: make(chan struct{}), + conn: conn, + address: address, + store: store, + log: log, + closeCh: make(chan struct{}), + contextTimeout: 5 * time.Second, } return client } +// SetContextTimeout sets the default context timeout when no deadline is +// provided. +func (c *Client) SetContextTimeout(timeout time.Duration) { + c.contextTimeout = timeout +} + // Call invokes a dqlite RPC, sending a request message and receiving a // response message. func (c *Client) Call(ctx context.Context, request, response *Message) error { @@ -48,8 +56,9 @@ // Honor the ctx deadline, if present, or use a default. deadline, ok := ctx.Deadline() if !ok { - deadline = time.Now().Add(time.Second) + deadline = time.Now().Add(c.contextTimeout) } + c.conn.SetDeadline(deadline) if err := c.send(request); err != nil { diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/connector.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/connector.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/connector.go 2018-08-20 23:46:18.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/connector.go 2018-11-22 20:53:37.000000000 +0000 @@ -81,7 +81,7 @@ } if ctx.Err() != nil { - return nil, errNoAvailableLeader + return nil, ErrNoAvailableLeader } return client, nil @@ -143,7 +143,7 @@ return conn, nil } - return nil, errNoAvailableLeader + return nil, ErrNoAvailableLeader } // Connect to the given dqlite server and check if it's the leader. diff -Nru lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/errors.go lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/errors.go --- lxd-3.0.2/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/errors.go 2018-08-20 23:46:18.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/CanonicalLtd/go-dqlite/internal/client/errors.go 2018-11-22 20:53:37.000000000 +0000 @@ -4,8 +4,9 @@ "fmt" ) +// Client errors. var ( - errNoAvailableLeader = fmt.Errorf("no available dqlite leader server found") + ErrNoAvailableLeader = fmt.Errorf("no available dqlite leader server found") errStop = fmt.Errorf("connector was stopped") errStaleLeader = fmt.Errorf("server has lost leadership") errNotClustered = fmt.Errorf("server is not clustered") diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/custom_types.md lxd-3.0.3/dist/src/github.com/gogo/protobuf/custom_types.md --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/custom_types.md 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/custom_types.md 2018-11-22 20:53:45.000000000 +0000 @@ -41,6 +41,7 @@ func (t T) Marshal() ([]byte, error) {} func (t *T) MarshalTo(data []byte) (n int, err error) {} func (t *T) Unmarshal(data []byte) error {} +func (t *T) Size() int {} func (t T) MarshalJSON() ([]byte, error) {} func (t *T) UnmarshalJSON(data []byte) error {} @@ -66,3 +67,5 @@ * Using a proto message as a customtype is not allowed. * cusomtype of type map can not UnmarshalText * customtype of type struct cannot jsonpb unmarshal + * Customtype field does not get a generated 'getter' method + * Repeated customtype fields generate slices without pointer to the custom type diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/extensions.md lxd-3.0.3/dist/src/github.com/gogo/protobuf/extensions.md --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/extensions.md 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/extensions.md 2018-11-22 20:53:45.000000000 +0000 @@ -69,6 +69,8 @@ goproto_enum_stringer (experimental) Enum bool if false, the enum is generated without the default string method, this is useful for rather using enum_stringer true goproto_extensions_map (beta) Message bool if false, the extensions field is generated as type []byte instead of type map[int32]proto.Extension true goproto_unrecognized (beta) Message bool if false, XXX_unrecognized field is not generated. This is useful to reduce GC pressure at the cost of losing information about unrecognized fields. true + goproto_unkeyed (alpha) Message bool if false, XXX_unkeyed field is not generated. true + goproto_sizecache (alpha) Message bool if false, XXX_sizecache field is not generated. true goproto_registration (beta) File bool if true, the generated files will register all messages and types against both gogo/protobuf and golang/protobuf. This is necessary when using third-party packages which read registrations from golang/protobuf (such as the grpc-gateway). false message_name Message bool if true, a `XXX_MessageName()` method is generated that returns the message's name. This is useful for grpc-gateway compatibility. false @@ -135,6 +137,8 @@ * `goproto_enum_stringer_all` * `goproto_extensions_map_all` * `goproto_unrecognized_all` + * `goproto_unkeyed_all` + * `goproto_sizecache_all` * `gostring_all` * `onlyone_all` * `equal_all` diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/gogoproto/doc.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/gogoproto/doc.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/gogoproto/doc.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/gogoproto/doc.go 2018-11-22 20:53:45.000000000 +0000 @@ -162,7 +162,7 @@ github.com/gogo/protobuf/test/thetest.proto Gogoprototest is a seperate project, -because we want to keep gogoprotobuf independant of goprotobuf, +because we want to keep gogoprotobuf independent of goprotobuf, but we still want to test it thoroughly. */ diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/gogoproto/gogo.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/gogoproto/gogo.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/gogoproto/gogo.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/gogoproto/gogo.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -343,6 +343,24 @@ Filename: "gogo.proto", } +var E_GoprotoSizecacheAll = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63034, + Name: "gogoproto.goproto_sizecache_all", + Tag: "varint,63034,opt,name=goproto_sizecache_all,json=goprotoSizecacheAll", + Filename: "gogo.proto", +} + +var E_GoprotoUnkeyedAll = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63035, + Name: "gogoproto.goproto_unkeyed_all", + Tag: "varint,63035,opt,name=goproto_unkeyed_all,json=goprotoUnkeyedAll", + Filename: "gogo.proto", +} + var E_GoprotoGetters = &proto.ExtensionDesc{ ExtendedType: (*descriptor.MessageOptions)(nil), ExtensionType: (*bool)(nil), @@ -559,6 +577,24 @@ Filename: "gogo.proto", } +var E_GoprotoSizecache = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64034, + Name: "gogoproto.goproto_sizecache", + Tag: "varint,64034,opt,name=goproto_sizecache,json=goprotoSizecache", + Filename: "gogo.proto", +} + +var E_GoprotoUnkeyed = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64035, + Name: "gogoproto.goproto_unkeyed", + Tag: "varint,64035,opt,name=goproto_unkeyed,json=goprotoUnkeyed", + Filename: "gogo.proto", +} + var E_Nullable = &proto.ExtensionDesc{ ExtendedType: (*descriptor.FieldOptions)(nil), ExtensionType: (*bool)(nil), @@ -658,6 +694,15 @@ Filename: "gogo.proto", } +var E_Wktpointer = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 65012, + Name: "gogoproto.wktpointer", + Tag: "varint,65012,opt,name=wktpointer", + Filename: "gogo.proto", +} + func init() { proto.RegisterExtension(E_GoprotoEnumPrefix) proto.RegisterExtension(E_GoprotoEnumStringer) @@ -695,6 +740,8 @@ proto.RegisterExtension(E_EnumdeclAll) proto.RegisterExtension(E_GoprotoRegistration) proto.RegisterExtension(E_MessagenameAll) + proto.RegisterExtension(E_GoprotoSizecacheAll) + proto.RegisterExtension(E_GoprotoUnkeyedAll) proto.RegisterExtension(E_GoprotoGetters) proto.RegisterExtension(E_GoprotoStringer) proto.RegisterExtension(E_VerboseEqual) @@ -719,6 +766,8 @@ proto.RegisterExtension(E_Compare) proto.RegisterExtension(E_Typedecl) proto.RegisterExtension(E_Messagename) + proto.RegisterExtension(E_GoprotoSizecache) + proto.RegisterExtension(E_GoprotoUnkeyed) proto.RegisterExtension(E_Nullable) proto.RegisterExtension(E_Embed) proto.RegisterExtension(E_Customtype) @@ -730,88 +779,94 @@ proto.RegisterExtension(E_Castvalue) proto.RegisterExtension(E_Stdtime) proto.RegisterExtension(E_Stdduration) + proto.RegisterExtension(E_Wktpointer) } -func init() { proto.RegisterFile("gogo.proto", fileDescriptor_gogo_68790841c0f79064) } +func init() { proto.RegisterFile("gogo.proto", fileDescriptor_gogo_b95f77e237336c7c) } -var fileDescriptor_gogo_68790841c0f79064 = []byte{ - // 1246 bytes of a gzipped FileDescriptorProto +var fileDescriptor_gogo_b95f77e237336c7c = []byte{ + // 1328 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0x49, 0x6f, 0x1c, 0x45, - 0x14, 0x80, 0x85, 0x70, 0x64, 0xcf, 0xf3, 0x86, 0xc7, 0xc6, 0x84, 0x08, 0x44, 0xe0, 0xc4, 0xc9, - 0x3e, 0x45, 0x28, 0x65, 0x45, 0x96, 0x63, 0x39, 0x56, 0x10, 0x06, 0x63, 0xe2, 0xb0, 0x1d, 0x46, - 0x3d, 0x33, 0xe5, 0x76, 0x43, 0x77, 0xd7, 0xd0, 0x5d, 0x1d, 0xc5, 0xb9, 0xa1, 0xb0, 0x08, 0x21, - 0x76, 0x24, 0x48, 0x48, 0x02, 0x39, 0xb0, 0xaf, 0x61, 0xe7, 0xc6, 0x85, 0xe5, 0xca, 0x7f, 0xe0, - 0x02, 0x98, 0xdd, 0x37, 0x5f, 0xa2, 0xd7, 0xfd, 0x5e, 0x4f, 0xcd, 0x78, 0xa4, 0xaa, 0xb9, 0xb5, - 0xed, 0xfa, 0x3e, 0x57, 0xbf, 0x57, 0xf5, 0xde, 0x9b, 0x01, 0xf0, 0x95, 0xaf, 0x66, 0x5a, 0x89, - 0xd2, 0xaa, 0x5a, 0xc1, 0xe7, 0xfc, 0xf1, 0xc0, 0x41, 0x5f, 0x29, 0x3f, 0x94, 0xb3, 0xf9, 0x4f, - 0xf5, 0x6c, 0x63, 0xb6, 0x29, 0xd3, 0x46, 0x12, 0xb4, 0xb4, 0x4a, 0x8a, 0xc5, 0xe2, 0x6e, 0x98, - 0xa4, 0xc5, 0x35, 0x19, 0x67, 0x51, 0xad, 0x95, 0xc8, 0x8d, 0xe0, 0x74, 0xf5, 0xa6, 0x99, 0x82, - 0x9c, 0x61, 0x72, 0x66, 0x29, 0xce, 0xa2, 0x7b, 0x5a, 0x3a, 0x50, 0x71, 0xba, 0xff, 0xca, 0xaf, - 0xd7, 0x1e, 0xbc, 0xe6, 0xf6, 0xa1, 0xb5, 0x09, 0x42, 0xf1, 0x6f, 0xab, 0x39, 0x28, 0xd6, 0xe0, - 0xfa, 0x0e, 0x5f, 0xaa, 0x93, 0x20, 0xf6, 0x65, 0x62, 0x31, 0xfe, 0x40, 0xc6, 0x49, 0xc3, 0x78, - 0x1f, 0xa1, 0x62, 0x11, 0x46, 0xfb, 0x71, 0xfd, 0x48, 0xae, 0x11, 0x69, 0x4a, 0x96, 0x61, 0x3c, - 0x97, 0x34, 0xb2, 0x54, 0xab, 0x28, 0xf6, 0x22, 0x69, 0xd1, 0xfc, 0x94, 0x6b, 0x2a, 0x6b, 0x63, - 0x88, 0x2d, 0x96, 0x94, 0x10, 0x30, 0x84, 0xbf, 0x69, 0xca, 0x46, 0x68, 0x31, 0xfc, 0x4c, 0x1b, - 0x29, 0xd7, 0x8b, 0x93, 0x30, 0x85, 0xcf, 0xa7, 0xbc, 0x30, 0x93, 0xe6, 0x4e, 0x6e, 0xed, 0xe9, - 0x39, 0x89, 0xcb, 0x58, 0xf6, 0xcb, 0xd9, 0x81, 0x7c, 0x3b, 0x93, 0xa5, 0xc0, 0xd8, 0x93, 0x91, - 0x45, 0x5f, 0x6a, 0x2d, 0x93, 0xb4, 0xe6, 0x85, 0xbd, 0xb6, 0x77, 0x2c, 0x08, 0x4b, 0xe3, 0xb9, - 0xed, 0xce, 0x2c, 0x2e, 0x17, 0xe4, 0x42, 0x18, 0x8a, 0x75, 0xb8, 0xa1, 0xc7, 0xa9, 0x70, 0x70, - 0x9e, 0x27, 0xe7, 0xd4, 0x9e, 0x93, 0x81, 0xda, 0x55, 0xe0, 0xdf, 0x97, 0xb9, 0x74, 0x70, 0xbe, - 0x41, 0xce, 0x2a, 0xb1, 0x9c, 0x52, 0x34, 0xde, 0x09, 0x13, 0xa7, 0x64, 0x52, 0x57, 0xa9, 0xac, - 0xc9, 0xc7, 0x32, 0x2f, 0x74, 0xd0, 0x5d, 0x20, 0xdd, 0x38, 0x81, 0x4b, 0xc8, 0xa1, 0xeb, 0x30, - 0x0c, 0x6d, 0x78, 0x0d, 0xe9, 0xa0, 0xb8, 0x48, 0x8a, 0x41, 0x5c, 0x8f, 0xe8, 0x02, 0x8c, 0xf8, - 0xaa, 0x78, 0x25, 0x07, 0xfc, 0x12, 0xe1, 0xc3, 0xcc, 0x90, 0xa2, 0xa5, 0x5a, 0x59, 0xe8, 0x69, - 0x97, 0x1d, 0xbc, 0xc9, 0x0a, 0x66, 0x48, 0xd1, 0x47, 0x58, 0xdf, 0x62, 0x45, 0x6a, 0xc4, 0x73, - 0x1e, 0x86, 0x55, 0x1c, 0x6e, 0xa9, 0xd8, 0x65, 0x13, 0x97, 0xc9, 0x00, 0x84, 0xa0, 0x60, 0x0e, - 0x2a, 0xae, 0x89, 0x78, 0x7b, 0x9b, 0xaf, 0x07, 0x67, 0x60, 0x19, 0xc6, 0xb9, 0x40, 0x05, 0x2a, - 0x76, 0x50, 0xbc, 0x43, 0x8a, 0x31, 0x03, 0xa3, 0xd7, 0xd0, 0x32, 0xd5, 0xbe, 0x74, 0x91, 0xbc, - 0xcb, 0xaf, 0x41, 0x08, 0x85, 0xb2, 0x2e, 0xe3, 0xc6, 0xa6, 0x9b, 0xe1, 0x3d, 0x0e, 0x25, 0x33, - 0xa8, 0x58, 0x84, 0xd1, 0xc8, 0x4b, 0xd2, 0x4d, 0x2f, 0x74, 0x4a, 0xc7, 0xfb, 0xe4, 0x18, 0x29, - 0x21, 0x8a, 0x48, 0x16, 0xf7, 0xa3, 0xf9, 0x80, 0x23, 0x62, 0x60, 0x74, 0xf5, 0x52, 0xed, 0xd5, - 0x43, 0x59, 0xeb, 0xc7, 0xf6, 0x21, 0x5f, 0xbd, 0x82, 0x5d, 0x31, 0x8d, 0x73, 0x50, 0x49, 0x83, - 0x33, 0x4e, 0x9a, 0x8f, 0x38, 0xd3, 0x39, 0x80, 0xf0, 0x83, 0x70, 0x63, 0xcf, 0x36, 0xe1, 0x20, - 0xfb, 0x98, 0x64, 0xd3, 0x3d, 0x5a, 0x05, 0x95, 0x84, 0x7e, 0x95, 0x9f, 0x70, 0x49, 0x90, 0x5d, - 0xae, 0x55, 0x98, 0xca, 0xe2, 0xd4, 0xdb, 0xe8, 0x2f, 0x6a, 0x9f, 0x72, 0xd4, 0x0a, 0xb6, 0x23, - 0x6a, 0x27, 0x60, 0x9a, 0x8c, 0xfd, 0xe5, 0xf5, 0x33, 0x2e, 0xac, 0x05, 0xbd, 0xde, 0x99, 0xdd, - 0x87, 0xe1, 0x40, 0x19, 0xce, 0xd3, 0x5a, 0xc6, 0x29, 0x32, 0xb5, 0xc8, 0x6b, 0x39, 0x98, 0xaf, - 0x90, 0x99, 0x2b, 0xfe, 0x52, 0x29, 0x58, 0xf1, 0x5a, 0x28, 0x7f, 0x00, 0xf6, 0xb3, 0x3c, 0x8b, - 0x13, 0xd9, 0x50, 0x7e, 0x1c, 0x9c, 0x91, 0x4d, 0x07, 0xf5, 0xe7, 0x5d, 0xa9, 0x5a, 0x37, 0x70, - 0x34, 0x1f, 0x87, 0xeb, 0xca, 0x59, 0xa5, 0x16, 0x44, 0x2d, 0x95, 0x68, 0x8b, 0xf1, 0x0b, 0xce, - 0x54, 0xc9, 0x1d, 0xcf, 0x31, 0xb1, 0x04, 0x63, 0xf9, 0x8f, 0xae, 0x47, 0xf2, 0x4b, 0x12, 0x8d, - 0xb6, 0x29, 0x2a, 0x1c, 0x0d, 0x15, 0xb5, 0xbc, 0xc4, 0xa5, 0xfe, 0x7d, 0xc5, 0x85, 0x83, 0x10, - 0x2a, 0x1c, 0x7a, 0xab, 0x25, 0xb1, 0xdb, 0x3b, 0x18, 0xbe, 0xe6, 0xc2, 0xc1, 0x0c, 0x29, 0x78, - 0x60, 0x70, 0x50, 0x7c, 0xc3, 0x0a, 0x66, 0x50, 0x71, 0x6f, 0xbb, 0xd1, 0x26, 0xd2, 0x0f, 0x52, - 0x9d, 0x78, 0xb8, 0xda, 0xa2, 0xfa, 0x76, 0xbb, 0x73, 0x08, 0x5b, 0x33, 0x50, 0xac, 0x44, 0x91, - 0x4c, 0x53, 0xcf, 0x97, 0x38, 0x71, 0x38, 0x6c, 0xec, 0x3b, 0xae, 0x44, 0x06, 0x56, 0xdc, 0xcf, - 0xf1, 0xae, 0x59, 0xa5, 0x7a, 0xcb, 0x1e, 0xd1, 0x4a, 0xc1, 0xb0, 0xeb, 0xf1, 0x1d, 0x72, 0x75, - 0x8e, 0x2a, 0xe2, 0x2e, 0x3c, 0x40, 0x9d, 0x03, 0x85, 0x5d, 0x76, 0x76, 0xa7, 0x3c, 0x43, 0x1d, - 0xf3, 0x84, 0x38, 0x06, 0xa3, 0x1d, 0xc3, 0x84, 0x5d, 0xf5, 0x04, 0xa9, 0x46, 0xcc, 0x59, 0x42, - 0x1c, 0x82, 0x01, 0x1c, 0x0c, 0xec, 0xf8, 0x93, 0x84, 0xe7, 0xcb, 0xc5, 0x11, 0x18, 0xe2, 0x81, - 0xc0, 0x8e, 0x3e, 0x45, 0x68, 0x89, 0x20, 0xce, 0xc3, 0x80, 0x1d, 0x7f, 0x9a, 0x71, 0x46, 0x10, - 0x77, 0x0f, 0xe1, 0xf7, 0xcf, 0x0e, 0x50, 0x41, 0xe7, 0xd8, 0xcd, 0xc1, 0x20, 0x4d, 0x01, 0x76, - 0xfa, 0x19, 0xfa, 0xe7, 0x4c, 0x88, 0x3b, 0x60, 0x9f, 0x63, 0xc0, 0x9f, 0x23, 0xb4, 0x58, 0x2f, - 0x16, 0x61, 0xd8, 0xe8, 0xfc, 0x76, 0xfc, 0x79, 0xc2, 0x4d, 0x0a, 0xb7, 0x4e, 0x9d, 0xdf, 0x2e, - 0x78, 0x81, 0xb7, 0x4e, 0x04, 0x86, 0x8d, 0x9b, 0xbe, 0x9d, 0x7e, 0x91, 0xa3, 0xce, 0x88, 0x98, - 0x87, 0x4a, 0x59, 0xc8, 0xed, 0xfc, 0x4b, 0xc4, 0xb7, 0x19, 0x8c, 0x80, 0xd1, 0x48, 0xec, 0x8a, - 0x97, 0x39, 0x02, 0x06, 0x85, 0xd7, 0xa8, 0x7b, 0x38, 0xb0, 0x9b, 0x5e, 0xe1, 0x6b, 0xd4, 0x35, - 0x1b, 0x60, 0x36, 0xf3, 0x7a, 0x6a, 0x57, 0xbc, 0xca, 0xd9, 0xcc, 0xd7, 0xe3, 0x36, 0xba, 0xbb, - 0xad, 0xdd, 0xf1, 0x1a, 0x6f, 0xa3, 0xab, 0xd9, 0x8a, 0x55, 0xa8, 0xee, 0xed, 0xb4, 0x76, 0xdf, - 0xeb, 0xe4, 0x9b, 0xd8, 0xd3, 0x68, 0xc5, 0xfd, 0x30, 0xdd, 0xbb, 0xcb, 0xda, 0xad, 0xe7, 0x76, - 0xba, 0x3e, 0x17, 0x99, 0x4d, 0x56, 0x9c, 0x68, 0x97, 0x6b, 0xb3, 0xc3, 0xda, 0xb5, 0xe7, 0x77, - 0x3a, 0x2b, 0xb6, 0xd9, 0x60, 0xc5, 0x02, 0x40, 0xbb, 0xb9, 0xd9, 0x5d, 0x17, 0xc8, 0x65, 0x40, - 0x78, 0x35, 0xa8, 0xb7, 0xd9, 0xf9, 0x8b, 0x7c, 0x35, 0x88, 0xc0, 0xab, 0xc1, 0x6d, 0xcd, 0x4e, - 0x5f, 0xe2, 0xab, 0xc1, 0x08, 0x9e, 0x6c, 0xa3, 0x73, 0xd8, 0x0d, 0x97, 0xf9, 0x64, 0x1b, 0x94, - 0x98, 0x83, 0xa1, 0x38, 0x0b, 0x43, 0x3c, 0xa0, 0xd5, 0x9b, 0x7b, 0xb4, 0x2b, 0x19, 0x36, 0x99, - 0xff, 0x6d, 0x97, 0x76, 0xc0, 0x80, 0x38, 0x04, 0xfb, 0x64, 0x54, 0x97, 0x4d, 0x1b, 0xf9, 0xfb, - 0x2e, 0x17, 0x25, 0x5c, 0x2d, 0xe6, 0x01, 0x8a, 0x8f, 0xf6, 0xf8, 0x2a, 0x36, 0xf6, 0x8f, 0xdd, - 0xe2, 0x5b, 0x06, 0x03, 0x69, 0x0b, 0xf2, 0x17, 0xb7, 0x08, 0xb6, 0x3b, 0x05, 0xf9, 0x5b, 0x1f, - 0x86, 0xc1, 0x47, 0x52, 0x15, 0x6b, 0xcf, 0xb7, 0xd1, 0x7f, 0x12, 0xcd, 0xeb, 0x31, 0x60, 0x91, - 0x4a, 0xa4, 0xf6, 0xfc, 0xd4, 0xc6, 0xfe, 0x45, 0x6c, 0x09, 0x20, 0xdc, 0xf0, 0x52, 0xed, 0xf2, - 0xde, 0x7f, 0x33, 0xcc, 0x00, 0x6e, 0x1a, 0x9f, 0x1f, 0x95, 0x5b, 0x36, 0xf6, 0x1f, 0xde, 0x34, - 0xad, 0x17, 0x47, 0xa0, 0x82, 0x8f, 0xf9, 0xb7, 0x22, 0x36, 0xf8, 0x5f, 0x82, 0xdb, 0x04, 0xfe, - 0xe7, 0x54, 0x37, 0x75, 0x60, 0x0f, 0xf6, 0x7f, 0x94, 0x69, 0x5e, 0x2f, 0x16, 0x60, 0x38, 0xd5, - 0xcd, 0x66, 0x46, 0xf3, 0x95, 0x05, 0xff, 0x7f, 0xb7, 0xfc, 0xc8, 0x5d, 0x32, 0x47, 0x97, 0x60, - 0xb2, 0xa1, 0xa2, 0x6e, 0xf0, 0x28, 0x2c, 0xab, 0x65, 0xb5, 0x9a, 0x5f, 0xc5, 0x87, 0x6e, 0xf3, - 0x03, 0xbd, 0x99, 0xd5, 0x67, 0x1a, 0x2a, 0x9a, 0xc5, 0xc1, 0xb7, 0xfd, 0x7d, 0x5e, 0x39, 0x06, - 0x5f, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x51, 0xf0, 0xa5, 0x95, 0x02, 0x14, 0x00, 0x00, + 0x14, 0x80, 0x85, 0x48, 0x64, 0x4f, 0x79, 0x8b, 0xc7, 0xc6, 0x84, 0x08, 0x44, 0xe0, 0xc4, 0xc9, + 0x3e, 0x45, 0x28, 0x65, 0x45, 0x96, 0x63, 0x39, 0x56, 0x10, 0x0e, 0xc6, 0x89, 0xc3, 0x76, 0x18, + 0xf5, 0xf4, 0x94, 0xdb, 0x8d, 0xbb, 0xbb, 0x9a, 0xee, 0xea, 0x10, 0xe7, 0x86, 0xc2, 0x22, 0x84, + 0xd8, 0x91, 0x20, 0x21, 0x09, 0x04, 0xc4, 0xbe, 0x86, 0x7d, 0xb9, 0x70, 0x61, 0xb9, 0xf2, 0x1f, + 0xb8, 0x00, 0x66, 0xf7, 0xcd, 0x17, 0xf4, 0xba, 0xdf, 0xeb, 0xa9, 0x69, 0x8f, 0x54, 0x35, 0xb7, + 0xf6, 0xb8, 0xbe, 0x6f, 0xaa, 0xdf, 0xeb, 0x7a, 0xef, 0x4d, 0x33, 0xe6, 0x49, 0x4f, 0x4e, 0xc6, + 0x89, 0x54, 0xb2, 0x5e, 0x83, 0xeb, 0xfc, 0x72, 0xdf, 0x7e, 0x4f, 0x4a, 0x2f, 0x10, 0x53, 0xf9, + 0x5f, 0xcd, 0x6c, 0x75, 0xaa, 0x25, 0x52, 0x37, 0xf1, 0x63, 0x25, 0x93, 0x62, 0x31, 0x3f, 0xc6, + 0xc6, 0x70, 0x71, 0x43, 0x44, 0x59, 0xd8, 0x88, 0x13, 0xb1, 0xea, 0x9f, 0xae, 0x5f, 0x3f, 0x59, + 0x90, 0x93, 0x44, 0x4e, 0xce, 0x47, 0x59, 0x78, 0x47, 0xac, 0x7c, 0x19, 0xa5, 0x7b, 0xaf, 0xfc, + 0x72, 0xf5, 0xfe, 0xab, 0x6e, 0xe9, 0x5f, 0x1e, 0x45, 0x14, 0xfe, 0xb7, 0x94, 0x83, 0x7c, 0x99, + 0x5d, 0xd3, 0xe1, 0x4b, 0x55, 0xe2, 0x47, 0x9e, 0x48, 0x0c, 0xc6, 0xef, 0xd1, 0x38, 0xa6, 0x19, + 0x8f, 0x23, 0xca, 0xe7, 0xd8, 0x50, 0x2f, 0xae, 0x1f, 0xd0, 0x35, 0x28, 0x74, 0xc9, 0x02, 0x1b, + 0xc9, 0x25, 0x6e, 0x96, 0x2a, 0x19, 0x46, 0x4e, 0x28, 0x0c, 0x9a, 0x1f, 0x73, 0x4d, 0x6d, 0x79, + 0x18, 0xb0, 0xb9, 0x92, 0xe2, 0x9c, 0xf5, 0xc3, 0x27, 0x2d, 0xe1, 0x06, 0x06, 0xc3, 0x4f, 0xb8, + 0x91, 0x72, 0x3d, 0x3f, 0xc9, 0xc6, 0xe1, 0xfa, 0x94, 0x13, 0x64, 0x42, 0xdf, 0xc9, 0x4d, 0x5d, + 0x3d, 0x27, 0x61, 0x19, 0xc9, 0x7e, 0x3e, 0xbb, 0x2b, 0xdf, 0xce, 0x58, 0x29, 0xd0, 0xf6, 0xa4, + 0x65, 0xd1, 0x13, 0x4a, 0x89, 0x24, 0x6d, 0x38, 0x41, 0xb7, 0xed, 0x1d, 0xf1, 0x83, 0xd2, 0x78, + 0x6e, 0xb3, 0x33, 0x8b, 0x0b, 0x05, 0x39, 0x1b, 0x04, 0x7c, 0x85, 0x5d, 0xdb, 0xe5, 0xa9, 0xb0, + 0x70, 0x9e, 0x47, 0xe7, 0xf8, 0x8e, 0x27, 0x03, 0xb4, 0x4b, 0x8c, 0x3e, 0x2f, 0x73, 0x69, 0xe1, + 0x7c, 0x19, 0x9d, 0x75, 0x64, 0x29, 0xa5, 0x60, 0xbc, 0x8d, 0x8d, 0x9e, 0x12, 0x49, 0x53, 0xa6, + 0xa2, 0x21, 0x1e, 0xc8, 0x9c, 0xc0, 0x42, 0x77, 0x01, 0x75, 0x23, 0x08, 0xce, 0x03, 0x07, 0xae, + 0x83, 0xac, 0x7f, 0xd5, 0x71, 0x85, 0x85, 0xe2, 0x22, 0x2a, 0xfa, 0x60, 0x3d, 0xa0, 0xb3, 0x6c, + 0xd0, 0x93, 0xc5, 0x2d, 0x59, 0xe0, 0x97, 0x10, 0x1f, 0x20, 0x06, 0x15, 0xb1, 0x8c, 0xb3, 0xc0, + 0x51, 0x36, 0x3b, 0x78, 0x85, 0x14, 0xc4, 0xa0, 0xa2, 0x87, 0xb0, 0xbe, 0x4a, 0x8a, 0x54, 0x8b, + 0xe7, 0x0c, 0x1b, 0x90, 0x51, 0xb0, 0x21, 0x23, 0x9b, 0x4d, 0x5c, 0x46, 0x03, 0x43, 0x04, 0x04, + 0xd3, 0xac, 0x66, 0x9b, 0x88, 0x37, 0x36, 0xe9, 0x78, 0x50, 0x06, 0x16, 0xd8, 0x08, 0x15, 0x28, + 0x5f, 0x46, 0x16, 0x8a, 0x37, 0x51, 0x31, 0xac, 0x61, 0x78, 0x1b, 0x4a, 0xa4, 0xca, 0x13, 0x36, + 0x92, 0xb7, 0xe8, 0x36, 0x10, 0xc1, 0x50, 0x36, 0x45, 0xe4, 0xae, 0xd9, 0x19, 0xde, 0xa6, 0x50, + 0x12, 0x03, 0x8a, 0x39, 0x36, 0x14, 0x3a, 0x49, 0xba, 0xe6, 0x04, 0x56, 0xe9, 0x78, 0x07, 0x1d, + 0x83, 0x25, 0x84, 0x11, 0xc9, 0xa2, 0x5e, 0x34, 0xef, 0x52, 0x44, 0x34, 0x0c, 0x8f, 0x5e, 0xaa, + 0x9c, 0x66, 0x20, 0x1a, 0xbd, 0xd8, 0xde, 0xa3, 0xa3, 0x57, 0xb0, 0x8b, 0xba, 0x71, 0x9a, 0xd5, + 0x52, 0xff, 0x8c, 0x95, 0xe6, 0x7d, 0xca, 0x74, 0x0e, 0x00, 0x7c, 0x0f, 0xbb, 0xae, 0x6b, 0x9b, + 0xb0, 0x90, 0x7d, 0x80, 0xb2, 0x89, 0x2e, 0xad, 0x02, 0x4b, 0x42, 0xaf, 0xca, 0x0f, 0xa9, 0x24, + 0x88, 0x8a, 0x6b, 0x89, 0x8d, 0x67, 0x51, 0xea, 0xac, 0xf6, 0x16, 0xb5, 0x8f, 0x28, 0x6a, 0x05, + 0xdb, 0x11, 0xb5, 0x13, 0x6c, 0x02, 0x8d, 0xbd, 0xe5, 0xf5, 0x63, 0x2a, 0xac, 0x05, 0xbd, 0xd2, + 0x99, 0xdd, 0xfb, 0xd8, 0xbe, 0x32, 0x9c, 0xa7, 0x95, 0x88, 0x52, 0x60, 0x1a, 0xa1, 0x13, 0x5b, + 0x98, 0xaf, 0xa0, 0x99, 0x2a, 0xfe, 0x7c, 0x29, 0x58, 0x74, 0x62, 0x90, 0xdf, 0xcd, 0xf6, 0x92, + 0x3c, 0x8b, 0x12, 0xe1, 0x4a, 0x2f, 0xf2, 0xcf, 0x88, 0x96, 0x85, 0xfa, 0x93, 0x4a, 0xaa, 0x56, + 0x34, 0x1c, 0xcc, 0x47, 0xd9, 0x9e, 0x72, 0x56, 0x69, 0xf8, 0x61, 0x2c, 0x13, 0x65, 0x30, 0x7e, + 0x4a, 0x99, 0x2a, 0xb9, 0xa3, 0x39, 0xc6, 0xe7, 0xd9, 0x70, 0xfe, 0xa7, 0xed, 0x23, 0xf9, 0x19, + 0x8a, 0x86, 0xda, 0x14, 0x16, 0x0e, 0x57, 0x86, 0xb1, 0x93, 0xd8, 0xd4, 0xbf, 0xcf, 0xa9, 0x70, + 0x20, 0x82, 0x85, 0x43, 0x6d, 0xc4, 0x02, 0xba, 0xbd, 0x85, 0xe1, 0x0b, 0x2a, 0x1c, 0xc4, 0xa0, + 0x82, 0x06, 0x06, 0x0b, 0xc5, 0x97, 0xa4, 0x20, 0x06, 0x14, 0x77, 0xb6, 0x1b, 0x6d, 0x22, 0x3c, + 0x3f, 0x55, 0x89, 0x03, 0xab, 0x0d, 0xaa, 0xaf, 0x36, 0x3b, 0x87, 0xb0, 0x65, 0x0d, 0x85, 0x4a, + 0x14, 0x8a, 0x34, 0x75, 0x3c, 0x01, 0x13, 0x87, 0xc5, 0xc6, 0xbe, 0xa6, 0x4a, 0xa4, 0x61, 0xb0, + 0x37, 0x6d, 0x42, 0x84, 0xb0, 0xbb, 0x8e, 0xbb, 0x66, 0xa3, 0xfb, 0xa6, 0xb2, 0xb9, 0xe3, 0xc4, + 0x82, 0x53, 0x9b, 0x7f, 0xb2, 0x68, 0x5d, 0x6c, 0x58, 0x3d, 0x9d, 0xdf, 0x56, 0xe6, 0x9f, 0x95, + 0x82, 0x2c, 0x6a, 0xc8, 0x48, 0x65, 0x9e, 0xaa, 0xdf, 0xb8, 0xc3, 0xb5, 0x58, 0xdc, 0x17, 0xe9, + 0x1e, 0xda, 0xc2, 0xfb, 0xed, 0x1c, 0xa7, 0xf8, 0xed, 0xf0, 0x90, 0x77, 0x0e, 0x3d, 0x66, 0xd9, + 0xd9, 0xad, 0xf2, 0x39, 0xef, 0x98, 0x79, 0xf8, 0x11, 0x36, 0xd4, 0x31, 0xf0, 0x98, 0x55, 0x0f, + 0xa3, 0x6a, 0x50, 0x9f, 0x77, 0xf8, 0x01, 0xb6, 0x0b, 0x86, 0x17, 0x33, 0xfe, 0x08, 0xe2, 0xf9, + 0x72, 0x7e, 0x88, 0xf5, 0xd3, 0xd0, 0x62, 0x46, 0x1f, 0x45, 0xb4, 0x44, 0x00, 0xa7, 0x81, 0xc5, + 0x8c, 0x3f, 0x46, 0x38, 0x21, 0x80, 0xdb, 0x87, 0xf0, 0xbb, 0x27, 0x76, 0x61, 0xd3, 0xa1, 0xd8, + 0x4d, 0xb3, 0x3e, 0x9c, 0x54, 0xcc, 0xf4, 0xe3, 0xf8, 0xe5, 0x44, 0xf0, 0x5b, 0xd9, 0x6e, 0xcb, + 0x80, 0x3f, 0x89, 0x68, 0xb1, 0x9e, 0xcf, 0xb1, 0x01, 0x6d, 0x3a, 0x31, 0xe3, 0x4f, 0x21, 0xae, + 0x53, 0xb0, 0x75, 0x9c, 0x4e, 0xcc, 0x82, 0xa7, 0x69, 0xeb, 0x48, 0x40, 0xd8, 0x68, 0x30, 0x31, + 0xd3, 0xcf, 0x50, 0xd4, 0x09, 0xe1, 0x33, 0xac, 0x56, 0x36, 0x1b, 0x33, 0xff, 0x2c, 0xf2, 0x6d, + 0x06, 0x22, 0xa0, 0x35, 0x3b, 0xb3, 0xe2, 0x39, 0x8a, 0x80, 0x46, 0xc1, 0x31, 0xaa, 0x0e, 0x30, + 0x66, 0xd3, 0xf3, 0x74, 0x8c, 0x2a, 0xf3, 0x0b, 0x64, 0x33, 0xaf, 0xf9, 0x66, 0xc5, 0x0b, 0x94, + 0xcd, 0x7c, 0x3d, 0x6c, 0xa3, 0x3a, 0x11, 0x98, 0x1d, 0x2f, 0xd2, 0x36, 0x2a, 0x03, 0x01, 0x5f, + 0x62, 0xf5, 0x9d, 0xd3, 0x80, 0xd9, 0xf7, 0x12, 0xfa, 0x46, 0x77, 0x0c, 0x03, 0xfc, 0x2e, 0x36, + 0xd1, 0x7d, 0x12, 0x30, 0x5b, 0xcf, 0x6d, 0x55, 0x7e, 0xbb, 0xe9, 0x83, 0x00, 0x3f, 0xd1, 0x6e, + 0x29, 0xfa, 0x14, 0x60, 0xd6, 0x9e, 0xdf, 0xea, 0x2c, 0xdc, 0xfa, 0x10, 0xc0, 0x67, 0x19, 0x6b, + 0x37, 0x60, 0xb3, 0xeb, 0x02, 0xba, 0x34, 0x08, 0x8e, 0x06, 0xf6, 0x5f, 0x33, 0x7f, 0x91, 0x8e, + 0x06, 0x12, 0x70, 0x34, 0xa8, 0xf5, 0x9a, 0xe9, 0x4b, 0x74, 0x34, 0x08, 0x81, 0x27, 0x5b, 0xeb, + 0x6e, 0x66, 0xc3, 0x65, 0x7a, 0xb2, 0x35, 0x8a, 0x1f, 0x63, 0xa3, 0x3b, 0x1a, 0xa2, 0x59, 0xf5, + 0x1a, 0xaa, 0xf6, 0x54, 0xfb, 0xa1, 0xde, 0xbc, 0xb0, 0x19, 0x9a, 0x6d, 0xaf, 0x57, 0x9a, 0x17, + 0xf6, 0x42, 0x3e, 0xcd, 0xfa, 0xa3, 0x2c, 0x08, 0xe0, 0xf0, 0xd4, 0x6f, 0xe8, 0xd2, 0x4d, 0x45, + 0xd0, 0x22, 0xc5, 0xaf, 0xdb, 0x18, 0x1d, 0x02, 0xf8, 0x01, 0xb6, 0x5b, 0x84, 0x4d, 0xd1, 0x32, + 0x91, 0xbf, 0x6d, 0x53, 0xc1, 0x84, 0xd5, 0x7c, 0x86, 0xb1, 0xe2, 0xd5, 0x08, 0x84, 0xd9, 0xc4, + 0xfe, 0xbe, 0x5d, 0xbc, 0xa5, 0xd1, 0x90, 0xb6, 0x20, 0x4f, 0x8a, 0x41, 0xb0, 0xd9, 0x29, 0xc8, + 0x33, 0x72, 0x90, 0xf5, 0xdd, 0x9f, 0xca, 0x48, 0x39, 0x9e, 0x89, 0xfe, 0x03, 0x69, 0x5a, 0x0f, + 0x01, 0x0b, 0x65, 0x22, 0x94, 0xe3, 0xa5, 0x26, 0xf6, 0x4f, 0x64, 0x4b, 0x00, 0x60, 0xd7, 0x49, + 0x95, 0xcd, 0x7d, 0xff, 0x45, 0x30, 0x01, 0xb0, 0x69, 0xb8, 0x5e, 0x17, 0x1b, 0x26, 0xf6, 0x6f, + 0xda, 0x34, 0xae, 0xe7, 0x87, 0x58, 0x0d, 0x2e, 0xf3, 0xb7, 0x4a, 0x26, 0xf8, 0x1f, 0x84, 0xdb, + 0x04, 0x7c, 0x73, 0xaa, 0x5a, 0xca, 0x37, 0x07, 0xfb, 0x5f, 0xcc, 0x34, 0xad, 0xe7, 0xb3, 0x6c, + 0x20, 0x55, 0xad, 0x56, 0x86, 0xf3, 0xa9, 0x01, 0xff, 0x6f, 0xbb, 0x7c, 0x65, 0x51, 0x32, 0x90, + 0xed, 0x07, 0xd7, 0x55, 0x2c, 0xfd, 0x48, 0x89, 0xc4, 0x64, 0xd8, 0x42, 0x83, 0x86, 0x1c, 0x9e, + 0x67, 0x63, 0xae, 0x0c, 0xab, 0xdc, 0x61, 0xb6, 0x20, 0x17, 0xe4, 0x52, 0x5e, 0x67, 0xee, 0xbd, + 0xd9, 0xf3, 0xd5, 0x5a, 0xd6, 0x9c, 0x74, 0x65, 0x38, 0x05, 0xbf, 0x3c, 0xda, 0x2f, 0x54, 0xcb, + 0xdf, 0x21, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xaf, 0x70, 0x4e, 0x83, 0x15, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/gogoproto/gogo.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/gogoproto/gogo.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/gogoproto/gogo.proto 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/gogoproto/gogo.proto 2018-11-22 20:53:45.000000000 +0000 @@ -84,6 +84,9 @@ optional bool goproto_registration = 63032; optional bool messagename_all = 63033; + + optional bool goproto_sizecache_all = 63034; + optional bool goproto_unkeyed_all = 63035; } extend google.protobuf.MessageOptions { @@ -118,6 +121,9 @@ optional bool typedecl = 64030; optional bool messagename = 64033; + + optional bool goproto_sizecache = 64034; + optional bool goproto_unkeyed = 64035; } extend google.protobuf.FieldOptions { @@ -133,4 +139,6 @@ optional bool stdtime = 65010; optional bool stdduration = 65011; + optional bool wktpointer = 65012; + } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/gogoproto/helper.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/gogoproto/helper.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/gogoproto/helper.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/gogoproto/helper.go 2018-11-22 20:53:45.000000000 +0000 @@ -47,6 +47,55 @@ return proto.GetBoolExtension(field.Options, E_Stdduration, false) } +func IsStdDouble(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.DoubleValue" +} + +func IsStdFloat(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.FloatValue" +} + +func IsStdInt64(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int64Value" +} + +func IsStdUInt64(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt64Value" +} + +func IsStdInt32(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int32Value" +} + +func IsStdUInt32(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt32Value" +} + +func IsStdBool(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BoolValue" +} + +func IsStdString(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.StringValue" +} + +func IsStdBytes(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BytesValue" +} + +func IsStdType(field *google_protobuf.FieldDescriptorProto) bool { + return (IsStdTime(field) || IsStdDuration(field) || + IsStdDouble(field) || IsStdFloat(field) || + IsStdInt64(field) || IsStdUInt64(field) || + IsStdInt32(field) || IsStdUInt32(field) || + IsStdBool(field) || + IsStdString(field) || IsStdBytes(field)) +} + +func IsWktPtr(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Wktpointer, false) +} + func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool { nullable := IsNullable(field) if field.IsMessage() || IsCustomType(field) { @@ -356,3 +405,11 @@ func HasMessageName(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { return proto.GetBoolExtension(message.Options, E_Messagename, proto.GetBoolExtension(file.Options, E_MessagenameAll, false)) } + +func HasSizecache(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_GoprotoSizecache, proto.GetBoolExtension(file.Options, E_GoprotoSizecacheAll, true)) +} + +func HasUnkeyed(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_GoprotoUnkeyed, proto.GetBoolExtension(file.Options, E_GoprotoUnkeyedAll, true)) +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/io/varint.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/io/varint.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/io/varint.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/io/varint.go 2018-11-22 20:53:45.000000000 +0000 @@ -42,7 +42,7 @@ ) func NewDelimitedWriter(w io.Writer) WriteCloser { - return &varintWriter{w, make([]byte, 10), nil} + return &varintWriter{w, make([]byte, binary.MaxVarintLen64), nil} } type varintWriter struct { @@ -55,26 +55,25 @@ var data []byte if m, ok := msg.(marshaler); ok { n, ok := getSize(m) - if !ok { - data, err = proto.Marshal(msg) + if ok { + if n+binary.MaxVarintLen64 >= len(this.buffer) { + this.buffer = make([]byte, n+binary.MaxVarintLen64) + } + lenOff := binary.PutUvarint(this.buffer, uint64(n)) + _, err = m.MarshalTo(this.buffer[lenOff:]) if err != nil { return err } - } - if n >= len(this.buffer) { - this.buffer = make([]byte, n) - } - _, err = m.MarshalTo(this.buffer) - if err != nil { - return err - } - data = this.buffer[:n] - } else { - data, err = proto.Marshal(msg) - if err != nil { + _, err = this.w.Write(this.buffer[:lenOff+n]) return err } } + + // fallback + data, err = proto.Marshal(msg) + if err != nil { + return err + } length := uint64(len(data)) n := binary.PutUvarint(this.lenBuf, length) _, err = this.w.Write(this.lenBuf[:n]) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/jsonpb/jsonpb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/jsonpb/jsonpb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/jsonpb/jsonpb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/jsonpb/jsonpb.go 2018-11-22 20:53:45.000000000 +0000 @@ -862,7 +862,7 @@ return nil case "Duration": - unq, err := strconv.Unquote(string(inputValue)) + unq, err := unquote(string(inputValue)) if err != nil { return err } @@ -879,7 +879,7 @@ target.Field(1).SetInt(ns) return nil case "Timestamp": - unq, err := strconv.Unquote(string(inputValue)) + unq, err := unquote(string(inputValue)) if err != nil { return err } @@ -925,7 +925,7 @@ target.Field(0).Set(reflect.ValueOf(&types.Value_NullValue{})) } else if v, err := strconv.ParseFloat(ivStr, 0); err == nil { target.Field(0).Set(reflect.ValueOf(&types.Value_NumberValue{NumberValue: v})) - } else if v, err := strconv.Unquote(ivStr); err == nil { + } else if v, err := unquote(ivStr); err == nil { target.Field(0).Set(reflect.ValueOf(&types.Value_StringValue{StringValue: v})) } else if v, err := strconv.ParseBool(ivStr); err == nil { target.Field(0).Set(reflect.ValueOf(&types.Value_BoolValue{BoolValue: v})) @@ -991,16 +991,16 @@ return nil } - // Handle nested messages. - if targetType.Kind() == reflect.Struct { - if prop != nil && len(prop.CustomType) > 0 && target.CanAddr() { - if m, ok := target.Addr().Interface().(interface { - UnmarshalJSON([]byte) error - }); ok { - return json.Unmarshal(inputValue, m) - } + if prop != nil && len(prop.CustomType) > 0 && target.CanAddr() { + if m, ok := target.Addr().Interface().(interface { + UnmarshalJSON([]byte) error + }); ok { + return json.Unmarshal(inputValue, m) } + } + // Handle nested messages. + if targetType.Kind() == reflect.Struct { var jsonFields map[string]json.RawMessage if err := json.Unmarshal(inputValue, &jsonFields); err != nil { return err @@ -1190,6 +1190,12 @@ return json.Unmarshal(inputValue, target.Addr().Interface()) } +func unquote(s string) (string, error) { + var ret string + err := json.Unmarshal([]byte(s), &ret) + return ret, err +} + // jsonProperties returns parsed proto.Properties for the field and corrects JSONName attribute. func jsonProperties(f reflect.StructField, origName bool) *proto.Properties { var prop proto.Properties diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/jsonpb/jsonpb_test.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/jsonpb/jsonpb_test.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/jsonpb/jsonpb_test.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/jsonpb/jsonpb_test.go 2018-11-22 20:53:45.000000000 +0000 @@ -687,9 +687,11 @@ {"camelName input", Unmarshaler{}, `{"oBool":true}`, &pb.Simple{OBool: proto.Bool(true)}}, {"Duration", Unmarshaler{}, `{"dur":"3.000s"}`, &pb.KnownTypes{Dur: &types.Duration{Seconds: 3}}}, {"Duration", Unmarshaler{}, `{"dur":"4s"}`, &pb.KnownTypes{Dur: &types.Duration{Seconds: 4}}}, + {"Duration with unicode", Unmarshaler{}, `{"dur": "3\u0073"}`, &pb.KnownTypes{Dur: &types.Duration{Seconds: 3}}}, {"null Duration", Unmarshaler{}, `{"dur":null}`, &pb.KnownTypes{Dur: nil}}, {"Timestamp", Unmarshaler{}, `{"ts":"2014-05-13T16:53:20.021Z"}`, &pb.KnownTypes{Ts: &types.Timestamp{Seconds: 14e8, Nanos: 21e6}}}, {"Timestamp", Unmarshaler{}, `{"ts":"2014-05-13T16:53:20Z"}`, &pb.KnownTypes{Ts: &types.Timestamp{Seconds: 14e8, Nanos: 0}}}, + {"Timestamp with unicode", Unmarshaler{}, `{"ts": "2014-05-13T16:53:20\u005a"}`, &pb.KnownTypes{Ts: &types.Timestamp{Seconds: 14e8, Nanos: 0}}}, {"PreEpochTimestamp", Unmarshaler{}, `{"ts":"1969-12-31T23:59:58.999999995Z"}`, &pb.KnownTypes{Ts: &types.Timestamp{Seconds: -2, Nanos: 999999995}}}, {"ZeroTimeTimestamp", Unmarshaler{}, `{"ts":"0001-01-01T00:00:00Z"}`, &pb.KnownTypes{Ts: &types.Timestamp{Seconds: -62135596800, Nanos: 0}}}, {"null Timestamp", Unmarshaler{}, `{"ts":null}`, &pb.KnownTypes{Ts: nil}}, @@ -746,6 +748,14 @@ {"UInt32Value", Unmarshaler{}, `{"u32":4}`, &pb.KnownTypes{U32: &types.UInt32Value{Value: 4}}}, {"BoolValue", Unmarshaler{}, `{"bool":true}`, &pb.KnownTypes{Bool: &types.BoolValue{Value: true}}}, {"StringValue", Unmarshaler{}, `{"str":"plush"}`, &pb.KnownTypes{Str: &types.StringValue{Value: "plush"}}}, + {"StringValue containing escaped character", Unmarshaler{}, `{"str":"a\/b"}`, &pb.KnownTypes{Str: &types.StringValue{Value: "a/b"}}}, + {"StructValue containing StringValue's", Unmarshaler{}, `{"escaped": "a\/b", "unicode": "\u00004E16\u0000754C"}`, + &types.Struct{ + Fields: map[string]*types.Value{ + "escaped": {Kind: &types.Value_StringValue{StringValue: "a/b"}}, + "unicode": {Kind: &types.Value_StringValue{StringValue: "\u00004E16\u0000754C"}}, + }, + }}, {"BytesValue", Unmarshaler{}, `{"bytes":"d293"}`, &pb.KnownTypes{Bytes: &types.BytesValue{Value: []byte("wow")}}}, // Ensure that `null` as a value ends up with a nil pointer instead of a [type]Value struct. {"null DoubleValue", Unmarshaler{}, `{"dbl":null}`, &pb.KnownTypes{Dbl: nil}}, @@ -846,6 +856,10 @@ {"gibberish", "{adskja123;l23=-=", new(pb.Simple)}, {"unknown field", `{"unknown": "foo"}`, new(pb.Simple)}, {"unknown enum name", `{"hilarity":"DAVE"}`, new(proto3pb.Message)}, + {"Duration containing invalid character", `{"dur": "3\U0073"}`, &pb.KnownTypes{}}, + {"Timestamp containing invalid character", `{"ts": "2014-05-13T16:53:20\U005a"}`, &pb.KnownTypes{}}, + {"StringValue containing invalid character", `{"str": "\U00004E16\U0000754C"}`, &pb.KnownTypes{}}, + {"StructValue containing invalid character", `{"str": "\U00004E16\U0000754C"}`, &types.Struct{}}, } func TestUnmarshalingBadInput(t *testing.T) { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -127,8 +127,12 @@ make -C test/cachedsize regenerate make -C test/deterministic regenerate make -C test/issue438 regenerate + make -C test/issue444 regenerate make -C test/issue449 regenerate + make -C test/xxxfields regenerate make -C test/issue435 regenerate + make -C test/issue411 regenerate + make gofmt tests: @@ -166,7 +170,7 @@ git log --format='%aN <%aE>' | sort -fu > CONTRIBUTORS js: -ifeq (go1.10, $(findstring go1.10, $(GO_VERSION))) +ifeq (go1.11, $(findstring go1.11, $(GO_VERSION))) go get -u github.com/gopherjs/gopherjs gopherjs build github.com/gogo/protobuf/protoc-gen-gogo endif diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/equal/equal.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/equal/equal.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/equal/equal.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/equal/equal.go 2018-11-22 20:53:45.000000000 +0000 @@ -292,7 +292,16 @@ repeated := field.IsRepeated() ctype := gogoproto.IsCustomType(field) nullable := gogoproto.IsNullable(field) - isDuration := gogoproto.IsStdDuration(field) + isNormal := (gogoproto.IsStdDuration(field) || + gogoproto.IsStdDouble(field) || + gogoproto.IsStdFloat(field) || + gogoproto.IsStdInt64(field) || + gogoproto.IsStdUInt64(field) || + gogoproto.IsStdInt32(field) || + gogoproto.IsStdUInt32(field) || + gogoproto.IsStdBool(field) || + gogoproto.IsStdString(field)) + isBytes := gogoproto.IsStdBytes(field) isTimestamp := gogoproto.IsStdTime(field) // oneof := field.OneofIndex != nil if !repeated { @@ -322,7 +331,7 @@ } p.Out() p.P(`}`) - } else if isDuration { + } else if isNormal { if nullable { p.generateNullableField(fieldname, verbose) } else { @@ -336,6 +345,32 @@ } p.Out() p.P(`}`) + } else if isBytes { + if nullable { + p.P(`if that1.`, fieldname, ` == nil {`) + p.In() + p.P(`if this.`, fieldname, ` != nil {`) + p.In() + if verbose { + p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` != nil && that1.`, fieldname, ` == nil")`) + } else { + p.P(`return false`) + } + p.Out() + p.P(`}`) + p.Out() + p.P(`} else if !`, p.bytesPkg.Use(), `.Equal(*this.`, fieldname, `, *that1.`, fieldname, `) {`) + } else { + p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `, that1.`, fieldname, `) {`) + } + p.In() + if verbose { + p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`) + } else { + p.P(`return false`) + } + p.Out() + p.P(`}`) } else { if field.IsMessage() || p.IsGroup(field) { if nullable { @@ -387,12 +422,18 @@ } else { p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`) } - } else if isDuration { + } else if isNormal { if nullable { p.P(`if dthis, dthat := this.`, fieldname, `[i], that1.`, fieldname, `[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) {`) } else { p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`) } + } else if isBytes { + if nullable { + p.P(`if !`, p.bytesPkg.Use(), `.Equal(*this.`, fieldname, `[i], *that1.`, fieldname, `[i]) {`) + } else { + p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `[i], that1.`, fieldname, `[i]) {`) + } } else { if p.IsMap(field) { m := p.GoMapType(nil, field) @@ -401,6 +442,16 @@ nullable, valuegoTyp, valuegoAliasTyp = generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp) mapValue := m.ValueAliasField + mapValueNormal := (gogoproto.IsStdDuration(mapValue) || + gogoproto.IsStdDouble(mapValue) || + gogoproto.IsStdFloat(mapValue) || + gogoproto.IsStdInt64(mapValue) || + gogoproto.IsStdUInt64(mapValue) || + gogoproto.IsStdInt32(mapValue) || + gogoproto.IsStdUInt32(mapValue) || + gogoproto.IsStdBool(mapValue) || + gogoproto.IsStdString(mapValue)) + mapValueBytes := gogoproto.IsStdBytes(mapValue) if mapValue.IsMessage() || p.IsGroup(mapValue) { if nullable && valuegoTyp == valuegoAliasTyp { p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`) @@ -408,14 +459,26 @@ // Equal() has a pointer receiver, but map value is a value type a := `this.` + fieldname + `[i]` b := `that1.` + fieldname + `[i]` - if valuegoTyp != valuegoAliasTyp { + if !mapValueNormal && !mapValueBytes && valuegoTyp != valuegoAliasTyp { // cast back to the type that has the generated methods on it a = `(` + valuegoTyp + `)(` + a + `)` b = `(` + valuegoTyp + `)(` + b + `)` } p.P(`a := `, a) p.P(`b := `, b) - if nullable { + if mapValueNormal { + if nullable { + p.P(`if *a != *b {`) + } else { + p.P(`if a != b {`) + } + } else if mapValueBytes { + if nullable { + p.P(`if !`, p.bytesPkg.Use(), `.Equal(*a, *b) {`) + } else { + p.P(`if !`, p.bytesPkg.Use(), `.Equal(a, b) {`) + } + } else if nullable { p.P(`if !a.Equal(b) {`) } else { p.P(`if !(&a).Equal(&b) {`) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/gostring/gostring.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/gostring/gostring.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/gostring/gostring.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/gostring/gostring.go 2018-11-22 20:53:45.000000000 +0000 @@ -225,7 +225,7 @@ p.P(`s = append(s, "`, fieldname, `: " + `, mapName, `+ ",\n")`) p.Out() p.P(`}`) - } else if (field.IsMessage() && !gogoproto.IsCustomType(field) && !gogoproto.IsStdTime(field) && !gogoproto.IsStdDuration(field)) || p.IsGroup(field) { + } else if (field.IsMessage() && !gogoproto.IsCustomType(field) && !gogoproto.IsStdType(field)) || p.IsGroup(field) { if nullable || repeated { p.P(`if this.`, fieldname, ` != nil {`) p.In() diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/marshalto/marshalto.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/marshalto/marshalto.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/marshalto/marshalto.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/marshalto/marshalto.go 2018-11-22 20:53:45.000000000 +0000 @@ -313,12 +313,39 @@ case descriptor.FieldDescriptorProto_TYPE_SINT64: p.callVarint(`(uint64(`, varName, `) << 1) ^ uint64((`, varName, ` >> 63))`) case descriptor.FieldDescriptorProto_TYPE_MESSAGE: - if gogoproto.IsStdTime(field) { + if gogoproto.IsStdTime(kvField) { p.callVarint(p.typesPkg.Use(), `.SizeOfStdTime(*`, varName, `)`) p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdTimeMarshalTo(*`, varName, `, dAtA[i:])`) - } else if gogoproto.IsStdDuration(field) { + } else if gogoproto.IsStdDuration(kvField) { p.callVarint(p.typesPkg.Use(), `.SizeOfStdDuration(*`, varName, `)`) p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdDurationMarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdDouble(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdDouble(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdDoubleMarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdFloat(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdFloat(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdFloatMarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdInt64(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdInt64(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdInt64MarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdUInt64(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdUInt64(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdUInt64MarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdInt32(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdInt32(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdInt32MarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdUInt32(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdUInt32(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdUInt32MarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdBool(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdBool(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdBoolMarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdString(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdString(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdStringMarshalTo(*`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdBytes(kvField) { + p.callVarint(p.typesPkg.Use(), `.SizeOfStdBytes(*`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdBytesMarshalTo(*`, varName, `, dAtA[i:])`) } else if protoSizer { p.callVarint(varName, `.ProtoSize()`) p.P(`n`, numGen.Next(), `, err := `, varName, `.MarshalTo(dAtA[i:])`) @@ -781,8 +808,7 @@ sum = append(sum, `soz`+p.localName+`(uint64(v))`) case descriptor.FieldDescriptorProto_TYPE_MESSAGE: if valuegoTyp != valuegoAliasTyp && - !gogoproto.IsStdTime(field) && - !gogoproto.IsStdDuration(field) { + !gogoproto.IsStdType(m.ValueAliasField) { if nullable { // cast back to the type that has the generated methods on it accessor = `((` + valuegoTyp + `)(` + accessor + `))` @@ -795,10 +821,28 @@ p.P(`msgSize := 0`) p.P(`if `, accessor, ` != nil {`) p.In() - if gogoproto.IsStdTime(field) { + if gogoproto.IsStdTime(m.ValueAliasField) { p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdTime(*`, accessor, `)`) - } else if gogoproto.IsStdDuration(field) { + } else if gogoproto.IsStdDuration(m.ValueAliasField) { p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdDuration(*`, accessor, `)`) + } else if gogoproto.IsStdDouble(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdDouble(*`, accessor, `)`) + } else if gogoproto.IsStdFloat(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdFloat(*`, accessor, `)`) + } else if gogoproto.IsStdInt64(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdInt64(*`, accessor, `)`) + } else if gogoproto.IsStdUInt64(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdUInt64(*`, accessor, `)`) + } else if gogoproto.IsStdInt32(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdInt32(*`, accessor, `)`) + } else if gogoproto.IsStdUInt32(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdUInt32(*`, accessor, `)`) + } else if gogoproto.IsStdBool(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdBool(*`, accessor, `)`) + } else if gogoproto.IsStdString(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdString(*`, accessor, `)`) + } else if gogoproto.IsStdBytes(m.ValueAliasField) { + p.P(`msgSize = `, p.typesPkg.Use(), `.SizeOfStdBytes(*`, accessor, `)`) } else if protoSizer { p.P(`msgSize = `, accessor, `.ProtoSize()`) } else { @@ -828,7 +872,7 @@ p.In() } p.encodeKey(2, wireToType(valuewire)) - p.mapField(numGen, field, m.ValueField, accessor, protoSizer) + p.mapField(numGen, field, m.ValueAliasField, accessor, protoSizer) if nullableMsg || plainBytes { p.Out() p.P(`}`) @@ -852,6 +896,60 @@ } p.callVarint(p.typesPkg.Use(), `.SizeOfStdDuration(`, varName, `)`) p.P(`n, err := `, p.typesPkg.Use(), `.StdDurationMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdDouble(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdDouble(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdDoubleMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdFloat(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdFloat(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdFloatMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdInt64(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdInt64(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdInt64MarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdUInt64(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdUInt64(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdUInt64MarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdInt32(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdInt32(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdInt32MarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdUInt32(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdUInt32(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdUInt32MarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdBool(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdBool(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdBoolMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdString(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdString(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdStringMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdBytes(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdBytes(`, varName, `)`) + p.P(`n, err := `, p.typesPkg.Use(), `.StdBytesMarshalTo(`, varName, `, dAtA[i:])`) } else if protoSizer { p.callVarint(varName, ".ProtoSize()") p.P(`n, err := `, varName, `.MarshalTo(dAtA[i:])`) @@ -882,6 +980,60 @@ } p.callVarint(p.typesPkg.Use(), `.SizeOfStdDuration(`, varName, `)`) p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdDurationMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdDouble(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdDouble(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdDoubleMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdFloat(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdFloat(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdFloatMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdInt64(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdInt64(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdInt64MarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdUInt64(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdUInt64(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdUInt64MarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdInt32(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdInt32(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdInt32MarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdUInt32(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdUInt32(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdUInt32MarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdBool(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdBool(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdBoolMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdString(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdString(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdStringMarshalTo(`, varName, `, dAtA[i:])`) + } else if gogoproto.IsStdBytes(field) { + if gogoproto.IsNullable(field) { + varName = "*" + varName + } + p.callVarint(p.typesPkg.Use(), `.SizeOfStdBytes(`, varName, `)`) + p.P(`n`, numGen.Next(), `, err := `, p.typesPkg.Use(), `.StdBytesMarshalTo(`, varName, `, dAtA[i:])`) } else if protoSizer { p.callVarint(varName, `.ProtoSize()`) p.P(`n`, numGen.Next(), `, err := `, varName, `.MarshalTo(dAtA[i:])`) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/populate/populate.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/populate/populate.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/populate/populate.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/populate/populate.go 2018-11-22 20:53:45.000000000 +0000 @@ -182,7 +182,7 @@ return true } -func (p *plugin) getFuncName(goTypName string) string { +func (p *plugin) getFuncName(goTypName string, field *descriptor.FieldDescriptorProto) string { funcName := "NewPopulated" + goTypName goTypNames := strings.Split(goTypName, ".") if len(goTypNames) == 2 { @@ -190,23 +190,43 @@ } else if len(goTypNames) != 1 { panic(fmt.Errorf("unreachable: too many dots in %v", goTypName)) } - switch funcName { - case "time.NewPopulatedTime": - funcName = p.typesPkg.Use() + ".NewPopulatedStdTime" - case "time.NewPopulatedDuration": - funcName = p.typesPkg.Use() + ".NewPopulatedStdDuration" + if field != nil { + switch { + case gogoproto.IsStdTime(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdTime" + case gogoproto.IsStdDuration(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdDuration" + case gogoproto.IsStdDouble(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdDouble" + case gogoproto.IsStdFloat(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdFloat" + case gogoproto.IsStdInt64(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdInt64" + case gogoproto.IsStdUInt64(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdUInt64" + case gogoproto.IsStdInt32(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdInt32" + case gogoproto.IsStdUInt32(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdUInt32" + case gogoproto.IsStdBool(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdBool" + case gogoproto.IsStdString(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdString" + case gogoproto.IsStdBytes(field): + funcName = p.typesPkg.Use() + ".NewPopulatedStdBytes" + } } return funcName } -func (p *plugin) getFuncCall(goTypName string) string { - funcName := p.getFuncName(goTypName) +func (p *plugin) getFuncCall(goTypName string, field *descriptor.FieldDescriptorProto) string { + funcName := p.getFuncName(goTypName, field) funcCall := funcName + "(r, easy)" return funcCall } func (p *plugin) getCustomFuncCall(goTypName string) string { - funcName := p.getFuncName(goTypName) + funcName := p.getFuncName(goTypName, nil) funcCall := funcName + "(r)" return funcCall } @@ -259,13 +279,13 @@ if m.ValueField.IsMessage() || p.IsGroup(field) || (m.ValueField.IsBytes() && gogoproto.IsCustomType(field)) { s := `this.` + fieldname + `[` + keyval + `] = ` - if gogoproto.IsStdTime(field) || gogoproto.IsStdDuration(field) { + if gogoproto.IsStdType(field) { valuegoTyp = valuegoAliasTyp } funcCall := p.getCustomFuncCall(goTypName) if !gogoproto.IsCustomType(field) { goTypName = generator.GoTypeToName(valuegoTyp) - funcCall = p.getFuncCall(goTypName) + funcCall = p.getFuncCall(goTypName, m.ValueAliasField) } if !nullable { funcCall = `*` + funcCall @@ -322,7 +342,7 @@ p.P(`this.`, fieldname, ` = *`, p.varGen.Current()) } } else if field.IsMessage() || p.IsGroup(field) { - funcCall := p.getFuncCall(goTypName) + funcCall := p.getFuncCall(goTypName, field) if field.IsRepeated() { p.P(p.varGen.Next(), ` := r.Intn(5)`) p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/size/size.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/size/size.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/size/size.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/size/size.go 2018-11-22 20:53:45.000000000 +0000 @@ -69,6 +69,9 @@ given to the size plugin, will generate the following code: func (m *B) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.A.Size() @@ -203,18 +206,32 @@ } func (p *size) std(field *descriptor.FieldDescriptorProto, name string) (string, bool) { + ptr := "" + if gogoproto.IsNullable(field) { + ptr = "*" + } if gogoproto.IsStdTime(field) { - if gogoproto.IsNullable(field) { - return p.typesPkg.Use() + `.SizeOfStdTime(*` + name + `)`, true - } else { - return p.typesPkg.Use() + `.SizeOfStdTime(` + name + `)`, true - } + return p.typesPkg.Use() + `.SizeOfStdTime(` + ptr + name + `)`, true } else if gogoproto.IsStdDuration(field) { - if gogoproto.IsNullable(field) { - return p.typesPkg.Use() + `.SizeOfStdDuration(*` + name + `)`, true - } else { - return p.typesPkg.Use() + `.SizeOfStdDuration(` + name + `)`, true - } + return p.typesPkg.Use() + `.SizeOfStdDuration(` + ptr + name + `)`, true + } else if gogoproto.IsStdDouble(field) { + return p.typesPkg.Use() + `.SizeOfStdDouble(` + ptr + name + `)`, true + } else if gogoproto.IsStdFloat(field) { + return p.typesPkg.Use() + `.SizeOfStdFloat(` + ptr + name + `)`, true + } else if gogoproto.IsStdInt64(field) { + return p.typesPkg.Use() + `.SizeOfStdInt64(` + ptr + name + `)`, true + } else if gogoproto.IsStdUInt64(field) { + return p.typesPkg.Use() + `.SizeOfStdUInt64(` + ptr + name + `)`, true + } else if gogoproto.IsStdInt32(field) { + return p.typesPkg.Use() + `.SizeOfStdInt32(` + ptr + name + `)`, true + } else if gogoproto.IsStdUInt32(field) { + return p.typesPkg.Use() + `.SizeOfStdUInt32(` + ptr + name + `)`, true + } else if gogoproto.IsStdBool(field) { + return p.typesPkg.Use() + `.SizeOfStdBool(` + ptr + name + `)`, true + } else if gogoproto.IsStdString(field) { + return p.typesPkg.Use() + `.SizeOfStdString(` + ptr + name + `)`, true + } else if gogoproto.IsStdBytes(field) { + return p.typesPkg.Use() + `.SizeOfStdBytes(` + ptr + name + `)`, true } return "", false } @@ -444,7 +461,7 @@ sum = append(sum, strconv.Itoa(valueKeySize)) sum = append(sum, `soz`+p.localName+`(uint64(v))`) case descriptor.FieldDescriptorProto_TYPE_MESSAGE: - stdSizeCall, stdOk := p.std(field, "v") + stdSizeCall, stdOk := p.std(m.ValueAliasField, "v") if nullable { p.P(`l = 0`) p.P(`if v != nil {`) @@ -595,6 +612,11 @@ ccTypeName := generator.CamelCaseSlice(message.TypeName()) p.P(`func (m *`, ccTypeName, `) `, sizeName, `() (n int) {`) p.In() + p.P(`if m == nil {`) + p.In() + p.P(`return 0`) + p.Out() + p.P(`}`) p.P(`var l int`) p.P(`_ = l`) oneofs := make(map[string]struct{}) @@ -650,6 +672,11 @@ ccTypeName := p.OneOfTypeName(message, f) p.P(`func (m *`, ccTypeName, `) `, sizeName, `() (n int) {`) p.In() + p.P(`if m == nil {`) + p.In() + p.P(`return 0`) + p.Out() + p.P(`}`) p.P(`var l int`) p.P(`_ = l`) vanity.TurnOffNullableForNativeTypes(f) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go 2018-11-22 20:53:45.000000000 +0000 @@ -280,6 +280,24 @@ p.P(varName, ` := new(time.Time)`) } else if gogoproto.IsStdDuration(field) { p.P(varName, ` := new(time.Duration)`) + } else if gogoproto.IsStdDouble(field) { + p.P(varName, ` := new(float64)`) + } else if gogoproto.IsStdFloat(field) { + p.P(varName, ` := new(float32)`) + } else if gogoproto.IsStdInt64(field) { + p.P(varName, ` := new(int64)`) + } else if gogoproto.IsStdUInt64(field) { + p.P(varName, ` := new(uint64)`) + } else if gogoproto.IsStdInt32(field) { + p.P(varName, ` := new(int32)`) + } else if gogoproto.IsStdUInt32(field) { + p.P(varName, ` := new(uint32)`) + } else if gogoproto.IsStdBool(field) { + p.P(varName, ` := new(bool)`) + } else if gogoproto.IsStdString(field) { + p.P(varName, ` := new(string)`) + } else if gogoproto.IsStdBytes(field) { + p.P(varName, ` := new([]byte)`) } else { desc := p.ObjectNamed(field.GetTypeName()) msgname := p.TypeName(desc) @@ -383,6 +401,24 @@ p.P(`if err := `, p.typesPkg.Use(), `.StdTimeUnmarshal(`, varName, `, `, buf, `); err != nil {`) } else if gogoproto.IsStdDuration(field) { p.P(`if err := `, p.typesPkg.Use(), `.StdDurationUnmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdDouble(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdDoubleUnmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdFloat(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdFloatUnmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdInt64(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt64Unmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdUInt64(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt64Unmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdInt32(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt32Unmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdUInt32(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt32Unmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdBool(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdBoolUnmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdString(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdStringUnmarshal(`, varName, `, `, buf, `); err != nil {`) + } else if gogoproto.IsStdBytes(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdBytesUnmarshal(`, varName, `, `, buf, `); err != nil {`) } else { desc := p.ObjectNamed(field.GetTypeName()) msgname := p.TypeName(desc) @@ -648,6 +684,78 @@ p.P(`v := time.Duration(0)`) p.P(`if err := `, p.typesPkg.Use(), `.StdDurationUnmarshal(&v, `, buf, `); err != nil {`) } + } else if gogoproto.IsStdDouble(field) { + if nullable { + p.P(`v := new(float64)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdDoubleUnmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`v := 0`) + p.P(`if err := `, p.typesPkg.Use(), `.StdDoubleUnmarshal(&v, `, buf, `); err != nil {`) + } + } else if gogoproto.IsStdFloat(field) { + if nullable { + p.P(`v := new(float32)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdFloatUnmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`v := 0`) + p.P(`if err := `, p.typesPkg.Use(), `.StdFloatUnmarshal(&v, `, buf, `); err != nil {`) + } + } else if gogoproto.IsStdInt64(field) { + if nullable { + p.P(`v := new(int64)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdInt64Unmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`v := 0`) + p.P(`if err := `, p.typesPkg.Use(), `.StdInt64Unmarshal(&v, `, buf, `); err != nil {`) + } + } else if gogoproto.IsStdUInt64(field) { + if nullable { + p.P(`v := new(uint64)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt64Unmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`v := 0`) + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt64Unmarshal(&v, `, buf, `); err != nil {`) + } + } else if gogoproto.IsStdInt32(field) { + if nullable { + p.P(`v := new(int32)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdInt32Unmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`v := 0`) + p.P(`if err := `, p.typesPkg.Use(), `.StdInt32Unmarshal(&v, `, buf, `); err != nil {`) + } + } else if gogoproto.IsStdUInt32(field) { + if nullable { + p.P(`v := new(uint32)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt32Unmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`v := 0`) + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt32Unmarshal(&v, `, buf, `); err != nil {`) + } + } else if gogoproto.IsStdBool(field) { + if nullable { + p.P(`v := new(bool)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdBoolUnmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`v := false`) + p.P(`if err := `, p.typesPkg.Use(), `.StdBoolUnmarshal(&v, `, buf, `); err != nil {`) + } + } else if gogoproto.IsStdString(field) { + if nullable { + p.P(`v := new(string)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdStringUnmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`v := ""`) + p.P(`if err := `, p.typesPkg.Use(), `.StdStringUnmarshal(&v, `, buf, `); err != nil {`) + } + } else if gogoproto.IsStdBytes(field) { + if nullable { + p.P(`v := new([]byte)`) + p.P(`if err := `, p.typesPkg.Use(), `.StdBytesUnmarshal(v, `, buf, `); err != nil {`) + } else { + p.P(`var v []byte`) + p.P(`if err := `, p.typesPkg.Use(), `.StdBytesUnmarshal(&v, `, buf, `); err != nil {`) + } } else { p.P(`v := &`, msgname, `{}`) p.P(`if err := v.Unmarshal(`, buf, `); err != nil {`) @@ -679,7 +787,7 @@ } nullable, valuegoTyp, valuegoAliasTyp = generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp) - if gogoproto.IsStdTime(field) || gogoproto.IsStdDuration(field) { + if gogoproto.IsStdType(field) { valuegoTyp = valuegoAliasTyp } @@ -762,6 +870,60 @@ } else { p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, time.Duration(0))`) } + } else if gogoproto.IsStdDouble(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new(float64))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, 0)`) + } + } else if gogoproto.IsStdFloat(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new(float32))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, 0)`) + } + } else if gogoproto.IsStdInt64(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new(int64))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, 0)`) + } + } else if gogoproto.IsStdUInt64(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new(uint64))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, 0)`) + } + } else if gogoproto.IsStdInt32(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new(int32))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, 0)`) + } + } else if gogoproto.IsStdUInt32(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new(uint32))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, 0)`) + } + } else if gogoproto.IsStdBool(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new(bool))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, false)`) + } + } else if gogoproto.IsStdString(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new(string))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, "")`) + } + } else if gogoproto.IsStdBytes(field) { + if nullable { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, new([]byte))`) + } else { + p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, []byte{})`) + } } else if nullable && !gogoproto.IsCustomType(field) { p.P(`m.`, fieldname, ` = append(m.`, fieldname, `, &`, msgname, `{})`) } else { @@ -784,6 +946,60 @@ } else { p.P(`if err := `, p.typesPkg.Use(), `.StdDurationUnmarshal(&(`, varName, `),`, buf, `); err != nil {`) } + } else if gogoproto.IsStdDouble(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdDoubleUnmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdDoubleUnmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } + } else if gogoproto.IsStdFloat(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdFloatUnmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdFloatUnmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } + } else if gogoproto.IsStdInt64(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt64Unmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt64Unmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } + } else if gogoproto.IsStdUInt64(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt64Unmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt64Unmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } + } else if gogoproto.IsStdInt32(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt32Unmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt32Unmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } + } else if gogoproto.IsStdUInt32(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt32Unmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt32Unmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } + } else if gogoproto.IsStdBool(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdBoolUnmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdBoolUnmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } + } else if gogoproto.IsStdString(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdStringUnmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdStringUnmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } + } else if gogoproto.IsStdBytes(field) { + if nullable { + p.P(`if err := `, p.typesPkg.Use(), `.StdBytesUnmarshal(`, varName, `,`, buf, `); err != nil {`) + } else { + p.P(`if err := `, p.typesPkg.Use(), `.StdBytesUnmarshal(&(`, varName, `),`, buf, `); err != nil {`) + } } else { p.P(`if err := `, varName, `.Unmarshal(`, buf, `); err != nil {`) } @@ -798,6 +1014,24 @@ p.P(`m.`, fieldname, ` = new(time.Time)`) } else if gogoproto.IsStdDuration(field) { p.P(`m.`, fieldname, ` = new(time.Duration)`) + } else if gogoproto.IsStdDouble(field) { + p.P(`m.`, fieldname, ` = new(float64)`) + } else if gogoproto.IsStdFloat(field) { + p.P(`m.`, fieldname, ` = new(float32)`) + } else if gogoproto.IsStdInt64(field) { + p.P(`m.`, fieldname, ` = new(int64)`) + } else if gogoproto.IsStdUInt64(field) { + p.P(`m.`, fieldname, ` = new(uint64)`) + } else if gogoproto.IsStdInt32(field) { + p.P(`m.`, fieldname, ` = new(int32)`) + } else if gogoproto.IsStdUInt32(field) { + p.P(`m.`, fieldname, ` = new(uint32)`) + } else if gogoproto.IsStdBool(field) { + p.P(`m.`, fieldname, ` = new(bool)`) + } else if gogoproto.IsStdString(field) { + p.P(`m.`, fieldname, ` = new(string)`) + } else if gogoproto.IsStdBytes(field) { + p.P(`m.`, fieldname, ` = new([]byte)`) } else { goType, _ := p.GoType(nil, field) // remove the star from the type @@ -809,6 +1043,24 @@ p.P(`if err := `, p.typesPkg.Use(), `.StdTimeUnmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) } else if gogoproto.IsStdDuration(field) { p.P(`if err := `, p.typesPkg.Use(), `.StdDurationUnmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdDouble(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdDoubleUnmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdFloat(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdFloatUnmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdInt64(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt64Unmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdUInt64(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt64Unmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdInt32(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt32Unmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdUInt32(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt32Unmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdBool(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdBoolUnmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdString(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdStringUnmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdBytes(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdBytesUnmarshal(m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) } else { p.P(`if err := m.`, fieldname, `.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {`) } @@ -821,6 +1073,24 @@ p.P(`if err := `, p.typesPkg.Use(), `.StdTimeUnmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) } else if gogoproto.IsStdDuration(field) { p.P(`if err := `, p.typesPkg.Use(), `.StdDurationUnmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdDouble(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdDoubleUnmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdFloat(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdFloatUnmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdInt64(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt64Unmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdUInt64(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt64Unmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdInt32(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdInt32Unmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdUInt32(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdUInt32Unmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdBool(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdBoolUnmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdString(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdStringUnmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) + } else if gogoproto.IsStdBytes(field) { + p.P(`if err := `, p.typesPkg.Use(), `.StdBytesUnmarshal(&m.`, fieldname, `, dAtA[iNdEx:postIndex]); err != nil {`) } else { p.P(`if err := m.`, fieldname, `.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {`) } @@ -1100,20 +1370,32 @@ p.Out() p.P(`}`) - var fixedTypeSizeBytes int + p.P(`var elementCount int`) switch *field.Type { case descriptor.FieldDescriptorProto_TYPE_DOUBLE, descriptor.FieldDescriptorProto_TYPE_FIXED64, descriptor.FieldDescriptorProto_TYPE_SFIXED64: - fixedTypeSizeBytes = 8 + p.P(`elementCount = packedLen/`, 8) case descriptor.FieldDescriptorProto_TYPE_FLOAT, descriptor.FieldDescriptorProto_TYPE_FIXED32, descriptor.FieldDescriptorProto_TYPE_SFIXED32: - fixedTypeSizeBytes = 4 - } - if fixedTypeSizeBytes != 0 { - p.P(`if len(m.`, fieldname, `) == 0 {`) + p.P(`elementCount = packedLen/`, 4) + case descriptor.FieldDescriptorProto_TYPE_INT64, descriptor.FieldDescriptorProto_TYPE_UINT64, descriptor.FieldDescriptorProto_TYPE_INT32, descriptor.FieldDescriptorProto_TYPE_UINT32, descriptor.FieldDescriptorProto_TYPE_SINT32, descriptor.FieldDescriptorProto_TYPE_SINT64: + p.P(`var count int`) + p.P(`for _, integer := range dAtA {`) + p.In() + p.P(`if integer < 128 {`) p.In() - p.P(`m.`, fieldname, ` = make([]`, p.noStarOrSliceType(message, field), `, 0, packedLen/`, fixedTypeSizeBytes, `)`) + p.P(`count++`) p.Out() p.P(`}`) + p.Out() + p.P(`}`) + p.P(`elementCount = count`) + case descriptor.FieldDescriptorProto_TYPE_BOOL: + p.P(`elementCount = packedLen`) } + p.P(`if elementCount != 0 && len(m.`, fieldname, `) == 0 {`) + p.In() + p.P(`m.`, fieldname, ` = make([]`, p.noStarOrSliceType(message, field), `, 0, elementCount)`) + p.Out() + p.P(`}`) p.P(`for iNdEx < postIndex {`) p.In() @@ -1140,7 +1422,7 @@ if !ok { panic("field is required, but no bit registered") } - p.P(`hasFields[`, strconv.Itoa(int(fieldBit/64)), `] |= uint64(`, fmt.Sprintf("0x%08x", 1<<(fieldBit%64)), `)`) + p.P(`hasFields[`, strconv.Itoa(int(fieldBit/64)), `] |= uint64(`, fmt.Sprintf("0x%08x", uint64(1)<<(fieldBit%64)), `)`) } } p.Out() @@ -1229,7 +1511,7 @@ panic("field is required, but no bit registered") } - p.P(`if hasFields[`, strconv.Itoa(int(fieldBit/64)), `] & uint64(`, fmt.Sprintf("0x%08x", 1<<(fieldBit%64)), `) == 0 {`) + p.P(`if hasFields[`, strconv.Itoa(int(fieldBit/64)), `] & uint64(`, fmt.Sprintf("0x%08x", uint64(1)<<(fieldBit%64)), `) == 0 {`) p.In() if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { p.P(`return new(`, protoPkg.Use(), `.RequiredNotSetError)`) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/properties.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/properties.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/properties.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/properties.go 2018-11-22 20:53:45.000000000 +0000 @@ -153,6 +153,7 @@ CastType string StdTime bool StdDuration bool + WktPointer bool stype reflect.Type // set for struct types only ctype reflect.Type // set for custom types only @@ -274,6 +275,8 @@ p.StdTime = true case f == "stdduration": p.StdDuration = true + case f == "wktptr": + p.WktPointer = true } } } @@ -296,6 +299,10 @@ p.setTag(lockGetProp) return } + if p.WktPointer && !isMap { + p.setTag(lockGetProp) + return + } switch t1 := typ; t1.Kind() { case reflect.Struct: p.stype = typ @@ -330,6 +337,7 @@ p.mvalprop.CustomType = p.CustomType p.mvalprop.StdDuration = p.StdDuration p.mvalprop.StdTime = p.StdTime + p.mvalprop.WktPointer = p.WktPointer p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) } p.setTag(lockGetProp) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/table_marshal.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/table_marshal.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/table_marshal.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/table_marshal.go 2018-11-22 20:53:45.000000000 +0000 @@ -97,6 +97,8 @@ var ( marshalInfoMap = map[reflect.Type]*marshalInfo{} marshalInfoLock sync.Mutex + + uint8SliceType = reflect.TypeOf(([]uint8)(nil)).Kind() ) // getMarshalInfo returns the information to marshal a given type of message. @@ -305,6 +307,10 @@ if err == errRepeatedHasNil { err = errors.New("proto: repeated field " + f.name + " has nil element") } + if err == errInvalidUTF8 { + fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name + err = fmt.Errorf("proto: string field %q contains invalid UTF-8", fullName) + } return b, err } } @@ -577,6 +583,7 @@ ctype := false isTime := false isDuration := false + isWktPointer := false for i := 2; i < len(tags); i++ { if tags[i] == "packed" { packed = true @@ -593,6 +600,9 @@ if tags[i] == "stdduration" { isDuration = true } + if tags[i] == "wktptr" { + isWktPointer = true + } } if !proto3 && !pointer && !slice { nozero = false @@ -638,6 +648,112 @@ return makeDurationMarshaler(getMarshalInfo(t)) } + if isWktPointer { + switch t.Kind() { + case reflect.Float64: + if pointer { + if slice { + return makeStdDoubleValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdDoubleValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdDoubleValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdDoubleValueMarshaler(getMarshalInfo(t)) + case reflect.Float32: + if pointer { + if slice { + return makeStdFloatValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdFloatValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdFloatValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdFloatValueMarshaler(getMarshalInfo(t)) + case reflect.Int64: + if pointer { + if slice { + return makeStdInt64ValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdInt64ValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdInt64ValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdInt64ValueMarshaler(getMarshalInfo(t)) + case reflect.Uint64: + if pointer { + if slice { + return makeStdUInt64ValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdUInt64ValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdUInt64ValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdUInt64ValueMarshaler(getMarshalInfo(t)) + case reflect.Int32: + if pointer { + if slice { + return makeStdInt32ValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdInt32ValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdInt32ValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdInt32ValueMarshaler(getMarshalInfo(t)) + case reflect.Uint32: + if pointer { + if slice { + return makeStdUInt32ValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdUInt32ValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdUInt32ValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdUInt32ValueMarshaler(getMarshalInfo(t)) + case reflect.Bool: + if pointer { + if slice { + return makeStdBoolValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdBoolValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdBoolValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdBoolValueMarshaler(getMarshalInfo(t)) + case reflect.String: + if pointer { + if slice { + return makeStdStringValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdStringValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdStringValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdStringValueMarshaler(getMarshalInfo(t)) + case uint8SliceType: + if pointer { + if slice { + return makeStdBytesValuePtrSliceMarshaler(getMarshalInfo(t)) + } + return makeStdBytesValuePtrMarshaler(getMarshalInfo(t)) + } + if slice { + return makeStdBytesValueSliceMarshaler(getMarshalInfo(t)) + } + return makeStdBytesValueMarshaler(getMarshalInfo(t)) + default: + panic(fmt.Sprintf("unknown wktpointer type %#v", t)) + } + } + switch t.Kind() { case reflect.Bool: if pointer { @@ -2328,6 +2444,9 @@ if t == "stdduration" { valTags = append(valTags, t) } + if t == "wktptr" { + valTags = append(valTags, t) + } } keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/table_unmarshal.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/table_unmarshal.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/table_unmarshal.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/table_unmarshal.go 2018-11-22 20:53:45.000000000 +0000 @@ -99,6 +99,8 @@ // if a required field, contains a single set bit at this field's index in the required field list. reqMask uint64 + + name string // name of the field, for error reporting } var ( @@ -360,7 +362,7 @@ } // Store the info in the correct slot in the message. - u.setTag(tag, toField(&f), unmarshal, reqMask) + u.setTag(tag, toField(&f), unmarshal, reqMask, name) } // Find any types associated with oneof fields. @@ -376,10 +378,17 @@ f := typ.Field(0) // oneof implementers have one field baseUnmarshal := fieldUnmarshaler(&f) - tagstr := strings.Split(f.Tag.Get("protobuf"), ",")[1] - tag, err := strconv.Atoi(tagstr) + tags := strings.Split(f.Tag.Get("protobuf"), ",") + fieldNum, err := strconv.Atoi(tags[1]) if err != nil { - panic("protobuf tag field not an integer: " + tagstr) + panic("protobuf tag field not an integer: " + tags[1]) + } + var name string + for _, tag := range tags { + if strings.HasPrefix(tag, "name=") { + name = strings.TrimPrefix(tag, "name=") + break + } } // Find the oneof field that this struct implements. @@ -390,7 +399,7 @@ // That lets us know where this struct should be stored // when we encounter it during unmarshaling. unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) - u.setTag(tag, of.field, unmarshal, 0) + u.setTag(fieldNum, of.field, unmarshal, 0, name) } } } @@ -411,7 +420,7 @@ // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) - }, 0) + }, 0, "") // Set mask for required field check. u.reqMask = uint64(1)<= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? for len(u.dense) <= tag { @@ -455,6 +465,7 @@ ctype := false isTime := false isDuration := false + isWktPointer := false for _, tag := range tagArray[3:] { if strings.HasPrefix(tag, "name=") { name = tag[5:] @@ -468,6 +479,9 @@ if tag == "stdduration" { isDuration = true } + if tag == "wktptr" { + isWktPointer = true + } } // Figure out packaging (pointer, slice, or both) @@ -522,6 +536,112 @@ return makeUnmarshalDuration(getUnmarshalInfo(t), name) } + if isWktPointer { + switch t.Kind() { + case reflect.Float64: + if pointer { + if slice { + return makeStdDoubleValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdDoubleValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdDoubleValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdDoubleValueUnmarshaler(getUnmarshalInfo(t), name) + case reflect.Float32: + if pointer { + if slice { + return makeStdFloatValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdFloatValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdFloatValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdFloatValueUnmarshaler(getUnmarshalInfo(t), name) + case reflect.Int64: + if pointer { + if slice { + return makeStdInt64ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdInt64ValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdInt64ValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdInt64ValueUnmarshaler(getUnmarshalInfo(t), name) + case reflect.Uint64: + if pointer { + if slice { + return makeStdUInt64ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdUInt64ValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdUInt64ValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdUInt64ValueUnmarshaler(getUnmarshalInfo(t), name) + case reflect.Int32: + if pointer { + if slice { + return makeStdInt32ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdInt32ValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdInt32ValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdInt32ValueUnmarshaler(getUnmarshalInfo(t), name) + case reflect.Uint32: + if pointer { + if slice { + return makeStdUInt32ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdUInt32ValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdUInt32ValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdUInt32ValueUnmarshaler(getUnmarshalInfo(t), name) + case reflect.Bool: + if pointer { + if slice { + return makeStdBoolValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdBoolValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdBoolValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdBoolValueUnmarshaler(getUnmarshalInfo(t), name) + case reflect.String: + if pointer { + if slice { + return makeStdStringValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdStringValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdStringValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdStringValueUnmarshaler(getUnmarshalInfo(t), name) + case uint8SliceType: + if pointer { + if slice { + return makeStdBytesValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdBytesValuePtrUnmarshaler(getUnmarshalInfo(t), name) + } + if slice { + return makeStdBytesValueSliceUnmarshaler(getUnmarshalInfo(t), name) + } + return makeStdBytesValueUnmarshaler(getUnmarshalInfo(t), name) + default: + panic(fmt.Sprintf("unknown wktpointer type %#v", t)) + } + } + // We'll never have both pointer and slice for basic types. if pointer && slice && t.Kind() != reflect.Struct { panic("both pointer and slice for basic type in " + t.Name()) @@ -1731,6 +1851,9 @@ if t == "stdduration" { valTags = append(valTags, t) } + if t == "wktptr" { + valTags = append(valTags, t) + } } unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) unmarshalVal := typeUnmarshaler(vt, strings.Join(valTags, ",")) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/text_parser.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/text_parser.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/text_parser.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/text_parser.go 2018-11-22 20:53:45.000000000 +0000 @@ -923,6 +923,16 @@ fv.SetFloat(f) return nil } + case reflect.Int8: + if x, err := strconv.ParseInt(tok.value, 0, 8); err == nil { + fv.SetInt(x) + return nil + } + case reflect.Int16: + if x, err := strconv.ParseInt(tok.value, 0, 16); err == nil { + fv.SetInt(x) + return nil + } case reflect.Int32: if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { fv.SetInt(x) @@ -970,6 +980,16 @@ } // TODO: Handle nested messages which implement encoding.TextUnmarshaler. return p.readStruct(fv, terminator) + case reflect.Uint8: + if x, err := strconv.ParseUint(tok.value, 0, 8); err == nil { + fv.SetUint(x) + return nil + } + case reflect.Uint16: + if x, err := strconv.ParseUint(tok.value, 0, 16); err == nil { + fv.SetUint(x) + return nil + } case reflect.Uint32: if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { fv.SetUint(uint64(x)) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/wrappers.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/wrappers.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/wrappers.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/wrappers.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,1888 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2018, 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 proto + +import ( + "io" + "reflect" +) + +func makeStdDoubleValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*float64) + v := &float64Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*float64) + v := &float64Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdDoubleValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64) + v := &float64Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64) + v := &float64Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdDoubleValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(float64) + v := &float64Value{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(float64) + v := &float64Value{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdDoubleValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*float64) + v := &float64Value{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*float64) + v := &float64Value{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdDoubleValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &float64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdDoubleValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &float64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdDoubleValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &float64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdDoubleValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &float64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdFloatValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*float32) + v := &float32Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*float32) + v := &float32Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdFloatValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32) + v := &float32Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32) + v := &float32Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdFloatValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(float32) + v := &float32Value{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(float32) + v := &float32Value{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdFloatValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*float32) + v := &float32Value{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*float32) + v := &float32Value{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdFloatValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &float32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdFloatValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &float32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdFloatValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &float32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdFloatValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &float32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*int64) + v := &int64Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*int64) + v := &int64Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64) + v := &int64Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64) + v := &int64Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(int64) + v := &int64Value{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(int64) + v := &int64Value{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*int64) + v := &int64Value{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*int64) + v := &int64Value{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &int64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &int64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &int64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &int64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdUInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*uint64) + v := &uint64Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*uint64) + v := &uint64Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdUInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64) + v := &uint64Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64) + v := &uint64Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdUInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(uint64) + v := &uint64Value{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(uint64) + v := &uint64Value{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdUInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*uint64) + v := &uint64Value{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*uint64) + v := &uint64Value{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdUInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &uint64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdUInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &uint64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdUInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &uint64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdUInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &uint64Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*int32) + v := &int32Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*int32) + v := &int32Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32) + v := &int32Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32) + v := &int32Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(int32) + v := &int32Value{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(int32) + v := &int32Value{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*int32) + v := &int32Value{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*int32) + v := &int32Value{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &int32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &int32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &int32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &int32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdUInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*uint32) + v := &uint32Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*uint32) + v := &uint32Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdUInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32) + v := &uint32Value{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32) + v := &uint32Value{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdUInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(uint32) + v := &uint32Value{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(uint32) + v := &uint32Value{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdUInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*uint32) + v := &uint32Value{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*uint32) + v := &uint32Value{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdUInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &uint32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdUInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &uint32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdUInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &uint32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdUInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &uint32Value{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdBoolValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*bool) + v := &boolValue{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*bool) + v := &boolValue{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdBoolValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool) + v := &boolValue{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool) + v := &boolValue{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdBoolValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(bool) + v := &boolValue{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(bool) + v := &boolValue{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdBoolValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*bool) + v := &boolValue{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*bool) + v := &boolValue{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdBoolValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &boolValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdBoolValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &boolValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdBoolValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &boolValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdBoolValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &boolValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdStringValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*string) + v := &stringValue{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*string) + v := &stringValue{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdStringValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string) + v := &stringValue{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string) + v := &stringValue{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdStringValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(string) + v := &stringValue{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(string) + v := &stringValue{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdStringValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*string) + v := &stringValue{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*string) + v := &stringValue{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdStringValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &stringValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdStringValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &stringValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdStringValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &stringValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdStringValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &stringValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdBytesValueMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + t := ptr.asPointerTo(u.typ).Interface().(*[]byte) + v := &bytesValue{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + t := ptr.asPointerTo(u.typ).Interface().(*[]byte) + v := &bytesValue{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdBytesValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + if ptr.isNil() { + return 0 + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte) + v := &bytesValue{*t} + siz := Size(v) + return tagsize + SizeVarint(uint64(siz)) + siz + }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + if ptr.isNil() { + return b, nil + } + t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte) + v := &bytesValue{*t} + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(buf))) + b = append(b, buf...) + return b, nil + } +} + +func makeStdBytesValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(u.typ) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().([]byte) + v := &bytesValue{t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(u.typ) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().([]byte) + v := &bytesValue{t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdBytesValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + n := 0 + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*[]byte) + v := &bytesValue{*t} + siz := Size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getSlice(reflect.PtrTo(u.typ)) + for i := 0; i < s.Len(); i++ { + elem := s.Index(i) + t := elem.Interface().(*[]byte) + v := &bytesValue{*t} + siz := Size(v) + buf, err := Marshal(v) + if err != nil { + return nil, err + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(siz)) + b = append(b, buf...) + } + + return b, nil + } +} + +func makeStdBytesValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &bytesValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(sub.typ).Elem() + s.Set(reflect.ValueOf(m.Value)) + return b[x:], nil + } +} + +func makeStdBytesValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &bytesValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem() + s.Set(reflect.ValueOf(&m.Value)) + return b[x:], nil + } +} + +func makeStdBytesValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &bytesValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(reflect.PtrTo(sub.typ)) + newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} + +func makeStdBytesValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return nil, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + m := &bytesValue{} + if err := Unmarshal(b[:x], m); err != nil { + return nil, err + } + slice := f.getSlice(sub.typ) + newSlice := reflect.Append(slice, reflect.ValueOf(m.Value)) + slice.Set(newSlice) + return b[x:], nil + } +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/wrappers_gogo.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/wrappers_gogo.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/proto/wrappers_gogo.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/proto/wrappers_gogo.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,113 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2018, 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 proto + +type float64Value struct { + Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *float64Value) Reset() { *m = float64Value{} } +func (*float64Value) ProtoMessage() {} +func (*float64Value) String() string { return "float64" } + +type float32Value struct { + Value float32 `protobuf:"fixed32,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *float32Value) Reset() { *m = float32Value{} } +func (*float32Value) ProtoMessage() {} +func (*float32Value) String() string { return "float32" } + +type int64Value struct { + Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *int64Value) Reset() { *m = int64Value{} } +func (*int64Value) ProtoMessage() {} +func (*int64Value) String() string { return "int64" } + +type uint64Value struct { + Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *uint64Value) Reset() { *m = uint64Value{} } +func (*uint64Value) ProtoMessage() {} +func (*uint64Value) String() string { return "uint64" } + +type int32Value struct { + Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *int32Value) Reset() { *m = int32Value{} } +func (*int32Value) ProtoMessage() {} +func (*int32Value) String() string { return "int32" } + +type uint32Value struct { + Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *uint32Value) Reset() { *m = uint32Value{} } +func (*uint32Value) ProtoMessage() {} +func (*uint32Value) String() string { return "uint32" } + +type boolValue struct { + Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *boolValue) Reset() { *m = boolValue{} } +func (*boolValue) ProtoMessage() {} +func (*boolValue) String() string { return "bool" } + +type stringValue struct { + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *stringValue) Reset() { *m = stringValue{} } +func (*stringValue) ProtoMessage() {} +func (*stringValue) String() string { return "string" } + +type bytesValue struct { + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *bytesValue) Reset() { *m = bytesValue{} } +func (*bytesValue) ProtoMessage() {} +func (*bytesValue) String() string { return "[]byte" } + +func init() { + RegisterType((*float64Value)(nil), "gogo.protobuf.proto.DoubleValue") + RegisterType((*float32Value)(nil), "gogo.protobuf.proto.FloatValue") + RegisterType((*int64Value)(nil), "gogo.protobuf.proto.Int64Value") + RegisterType((*uint64Value)(nil), "gogo.protobuf.proto.UInt64Value") + RegisterType((*int32Value)(nil), "gogo.protobuf.proto.Int32Value") + RegisterType((*uint32Value)(nil), "gogo.protobuf.proto.UInt32Value") + RegisterType((*boolValue)(nil), "gogo.protobuf.proto.BoolValue") + RegisterType((*stringValue)(nil), "gogo.protobuf.proto.StringValue") + RegisterType((*bytesValue)(nil), "gogo.protobuf.proto.BytesValue") +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-combo/combo.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-combo/combo.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-combo/combo.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-combo/combo.go 2018-11-22 20:53:45.000000000 +0000 @@ -147,8 +147,6 @@ Old: []string{ "option (gogoproto.unmarshaler_all) = false;", "option (gogoproto.marshaler_all) = false;", - "option (gogoproto.unsafe_unmarshaler_all) = false;", - "option (gogoproto.unsafe_marshaler_all) = false;", }, Filename: filename, Args: flags, @@ -157,26 +155,18 @@ m.Gen("./combos/neither/", []string{ "option (gogoproto.unmarshaler_all) = false;", "option (gogoproto.marshaler_all) = false;", - "option (gogoproto.unsafe_unmarshaler_all) = false;", - "option (gogoproto.unsafe_marshaler_all) = false;", }) } m.Gen("./combos/marshaler/", []string{ "option (gogoproto.unmarshaler_all) = false;", "option (gogoproto.marshaler_all) = true;", - "option (gogoproto.unsafe_unmarshaler_all) = false;", - "option (gogoproto.unsafe_marshaler_all) = false;", }) m.Gen("./combos/unmarshaler/", []string{ "option (gogoproto.unmarshaler_all) = true;", "option (gogoproto.marshaler_all) = false;", - "option (gogoproto.unsafe_unmarshaler_all) = false;", - "option (gogoproto.unsafe_marshaler_all) = false;", }) m.Gen("./combos/both/", []string{ "option (gogoproto.unmarshaler_all) = true;", "option (gogoproto.marshaler_all) = true;", - "option (gogoproto.unsafe_unmarshaler_all) = false;", - "option (gogoproto.unsafe_marshaler_all) = false;", }) } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go 2018-11-22 20:53:45.000000000 +0000 @@ -1752,7 +1752,11 @@ if gogoproto.IsStdDuration(field) { stdduration = ",stdduration" } - return strconv.Quote(fmt.Sprintf("%s,%d,%s%s%s%s%s%s%s%s%s%s%s%s%s", + wktptr := "" + if gogoproto.IsWktPtr(field) { + wktptr = ",wktptr" + } + return strconv.Quote(fmt.Sprintf("%s,%d,%s%s%s%s%s%s%s%s%s%s%s%s%s%s", wiretype, field.GetNumber(), optrepreq, @@ -1767,7 +1771,8 @@ castkey, castvalue, stdtime, - stdduration)) + stdduration, + wktptr)) } func needsStar(field *descriptor.FieldDescriptorProto, proto3 bool, allowOneOf bool) bool { @@ -1880,6 +1885,24 @@ case gogoproto.IsStdDuration(field): g.customImports = append(g.customImports, "time") typ = "time.Duration" + case gogoproto.IsStdDouble(field): + typ = "float64" + case gogoproto.IsStdFloat(field): + typ = "float32" + case gogoproto.IsStdInt64(field): + typ = "int64" + case gogoproto.IsStdUInt64(field): + typ = "uint64" + case gogoproto.IsStdInt32(field): + typ = "int32" + case gogoproto.IsStdUInt32(field): + typ = "uint32" + case gogoproto.IsStdBool(field): + typ = "bool" + case gogoproto.IsStdString(field): + typ = "string" + case gogoproto.IsStdBytes(field): + typ = "[]byte" } if needsStar(field, g.file.proto3 && field.Extendee == nil, message != nil && message.allowOneof()) { typ = "*" + typ @@ -1952,7 +1975,7 @@ if !gogoproto.IsNullable(m.ValueAliasField) { valType = strings.TrimPrefix(valType, "*") } - if !gogoproto.IsStdTime(field) && !gogoproto.IsStdDuration(field) && !gogoproto.IsCustomType(field) && !gogoproto.IsCastType(field) { + if !gogoproto.IsStdType(m.ValueAliasField) && !gogoproto.IsCustomType(field) && !gogoproto.IsCastType(field) { g.RecordTypeUse(m.ValueAliasField.GetTypeName()) } default: @@ -1960,7 +1983,9 @@ if !gogoproto.IsNullable(m.ValueAliasField) { valType = strings.TrimPrefix(valType, "*") } - g.RecordTypeUse(m.ValueAliasField.GetTypeName()) + if !gogoproto.IsStdType(field) { + g.RecordTypeUse(m.ValueAliasField.GetTypeName()) + } } else { valType = strings.TrimPrefix(valType, "*") } @@ -2192,11 +2217,13 @@ fieldFullPath := fmt.Sprintf("%s,%d,%d", message.path, messageFieldPath, i) g.PrintComments(fieldFullPath) g.P(Annotate(message.file, fieldFullPath, fieldName), "\t", typename, "\t`", tag, "`", fieldDeprecated) - if !gogoproto.IsStdTime(field) && !gogoproto.IsStdDuration(field) && !gogoproto.IsCustomType(field) && !gogoproto.IsCastType(field) { + if !gogoproto.IsStdType(field) && !gogoproto.IsCustomType(field) && !gogoproto.IsCastType(field) { g.RecordTypeUse(field.GetTypeName()) } } - g.P("XXX_NoUnkeyedLiteral\tstruct{} `json:\"-\"`") // prevent unkeyed struct literals + if gogoproto.HasUnkeyed(g.file.FileDescriptorProto, message.DescriptorProto) { + g.P("XXX_NoUnkeyedLiteral\tstruct{} `json:\"-\"`") // prevent unkeyed struct literals + } if len(message.ExtensionRange) > 0 { if gogoproto.HasExtensionsMap(g.file.FileDescriptorProto, message.DescriptorProto) { messageset := "" @@ -2211,7 +2238,9 @@ if gogoproto.HasUnrecognized(g.file.FileDescriptorProto, message.DescriptorProto) { g.P("XXX_unrecognized\t[]byte `json:\"-\"`") } - g.P("XXX_sizecache\tint32 `json:\"-\"`") + if gogoproto.HasSizecache(g.file.FileDescriptorProto, message.DescriptorProto) { + g.P("XXX_sizecache\tint32 `json:\"-\"`") + } g.Out() g.P("}") } else { @@ -2219,7 +2248,7 @@ // over all its fields to be able to mark as used any imported types // used by those fields. for _, field := range message.Field { - if !gogoproto.IsStdTime(field) && !gogoproto.IsStdDuration(field) && !gogoproto.IsCustomType(field) && !gogoproto.IsCastType(field) { + if !gogoproto.IsStdType(field) && !gogoproto.IsCustomType(field) && !gogoproto.IsCastType(field) { g.RecordTypeUse(field.GetTypeName()) } } @@ -2529,7 +2558,7 @@ tag := "protobuf:" + g.goTag(message, field, wiretype) fieldFullPath := fmt.Sprintf("%s,%d,%d", message.path, messageFieldPath, i) g.P("type ", Annotate(message.file, fieldFullPath, oneofTypeName[field]), " struct{ ", Annotate(message.file, fieldFullPath, fieldNames[field]), " ", fieldTypes[field], " `", tag, "` }") - if !gogoproto.IsStdTime(field) && !gogoproto.IsStdDuration(field) && !gogoproto.IsCustomType(field) && !gogoproto.IsCastType(field) { + if !gogoproto.IsStdType(field) && !gogoproto.IsCustomType(field) && !gogoproto.IsCastType(field) { g.RecordTypeUse(field.GetTypeName()) } oneofTypes = append(oneofTypes, oneofTypeName[field]) @@ -2646,8 +2675,17 @@ } else { goTyp, _ := g.GoType(message, field) goTypName := GoTypeToName(goTyp) - if !gogoproto.IsNullable(field) && gogoproto.IsStdDuration(field) { + if !gogoproto.IsNullable(field) && (gogoproto.IsStdDuration(field) || + gogoproto.IsStdDouble(field) || gogoproto.IsStdFloat(field) || + gogoproto.IsStdInt64(field) || gogoproto.IsStdUInt64(field) || + gogoproto.IsStdInt32(field) || gogoproto.IsStdUInt32(field)) { g.P("return 0") + } else if !gogoproto.IsNullable(field) && gogoproto.IsStdBool(field) { + g.P("return false") + } else if !gogoproto.IsNullable(field) && gogoproto.IsStdString(field) { + g.P("return \"\"") + } else if !gogoproto.IsNullable(field) && gogoproto.IsStdBytes(field) { + g.P("return []byte{}") } else { g.P("return ", goTypName, "{}") } @@ -2813,27 +2851,39 @@ g.Out() g.P(`}`) val = "dAtA" - } else if gogoproto.IsStdTime(field) { + } else if gogoproto.IsStdType(field) { pkg := g.useTypes() + ptr := "" + fnname := "" if gogoproto.IsNullable(field) { - g.P(`dAtA, err := `, pkg, `.StdTimeMarshal(*`, val, `)`) - } else { - g.P(`dAtA, err := `, pkg, `.StdTimeMarshal(`, val, `)`) + ptr = "*" } - g.P(`if err != nil {`) - g.In() - g.P(`return err`) - g.Out() - g.P(`}`) - val = "dAtA" - pre, post = "b.EncodeRawBytes(", ")" - } else if gogoproto.IsStdDuration(field) { - pkg := g.useTypes() - if gogoproto.IsNullable(field) { - g.P(`dAtA, err := `, pkg, `.StdDurationMarshal(*`, val, `)`) + if gogoproto.IsStdTime(field) { + fnname = "Time" + } else if gogoproto.IsStdDuration(field) { + fnname = "Duration" + } else if gogoproto.IsStdDouble(field) { + fnname = "Double" + } else if gogoproto.IsStdFloat(field) { + fnname = "Float" + } else if gogoproto.IsStdInt64(field) { + fnname = "Int64" + } else if gogoproto.IsStdUInt64(field) { + fnname = "UInt64" + } else if gogoproto.IsStdInt32(field) { + fnname = "Int32" + } else if gogoproto.IsStdUInt32(field) { + fnname = "UInt32" + } else if gogoproto.IsStdBool(field) { + fnname = "Bool" + } else if gogoproto.IsStdString(field) { + fnname = "String" + } else if gogoproto.IsStdBytes(field) { + fnname = "Bytes" } else { - g.P(`dAtA, err := `, pkg, `.StdDurationMarshal(`, val, `)`) + panic("internal error") } + g.P(`dAtA, err := `, pkg, `.Std`, fnname, `Marshal(`, ptr, val, `)`) g.P(`if err != nil {`) g.In() g.P(`return err`) @@ -2904,7 +2954,7 @@ dec = "b.DecodeGroup(msg)" // handled specially below case descriptor.FieldDescriptorProto_TYPE_MESSAGE: - if gogoproto.IsStdTime(field) || gogoproto.IsStdDuration(field) { + if gogoproto.IsStdType(field) { dec = "b.DecodeRawBytes(true)" } else { g.P("msg := new(", fieldTypes[field][1:], ")") // drop star @@ -2945,35 +2995,61 @@ g.P(`c := &cc`) g.P(`err = c.Unmarshal(`, val, `)`) val = "*c" - } else if gogoproto.IsStdTime(field) { - pkg := g.useTypes() - g.P(`if err != nil {`) - g.In() - g.P(`return true, err`) - g.Out() - g.P(`}`) - g.P(`c := new(time.Time)`) - g.P(`if err2 := `, pkg, `.StdTimeUnmarshal(c, `, val, `); err2 != nil {`) - g.In() - g.P(`return true, err`) - g.Out() - g.P(`}`) - val = "c" - } else if gogoproto.IsStdDuration(field) { + } else if gogoproto.IsStdType(field) { + var stdtype string + var fnname string + if gogoproto.IsStdTime(field) { + stdtype = "time.Time" + fnname = "Time" + } else if gogoproto.IsStdDuration(field) { + stdtype = "time.Duration" + fnname = "Duration" + } else if gogoproto.IsStdDouble(field) { + stdtype = "float64" + fnname = "Double" + } else if gogoproto.IsStdFloat(field) { + stdtype = "float32" + fnname = "Float" + } else if gogoproto.IsStdInt64(field) { + stdtype = "int64" + fnname = "Int64" + } else if gogoproto.IsStdUInt64(field) { + stdtype = "uint64" + fnname = "UInt64" + } else if gogoproto.IsStdInt32(field) { + stdtype = "int32" + fnname = "Int32" + } else if gogoproto.IsStdUInt32(field) { + stdtype = "uint32" + fnname = "UInt32" + } else if gogoproto.IsStdBool(field) { + stdtype = "bool" + fnname = "Bool" + } else if gogoproto.IsStdString(field) { + stdtype = "string" + fnname = "String" + } else if gogoproto.IsStdBytes(field) { + stdtype = "[]byte" + fnname = "Bytes" + } else { + panic("internal error") + } + pkg := g.useTypes() g.P(`if err != nil {`) g.In() g.P(`return true, err`) g.Out() g.P(`}`) - g.P(`c := new(time.Duration)`) - g.P(`if err2 := `, pkg, `.StdDurationUnmarshal(c, `, val, `); err2 != nil {`) + g.P(`c := new(`, stdtype, `)`) + g.P(`if err2 := `, pkg, `.Std`, fnname, `Unmarshal(c, `, val, `); err2 != nil {`) g.In() g.P(`return true, err`) g.Out() g.P(`}`) val = "c" } + if cast != "" { val = cast + "(" + val + ")" } @@ -2985,7 +3061,7 @@ val += " != 0" case descriptor.FieldDescriptorProto_TYPE_GROUP, descriptor.FieldDescriptorProto_TYPE_MESSAGE: - if !gogoproto.IsStdTime(field) && !gogoproto.IsStdDuration(field) { + if !gogoproto.IsStdType(field) { val = "msg" } } @@ -3043,18 +3119,36 @@ case descriptor.FieldDescriptorProto_TYPE_GROUP: fixed = g.Pkg["proto"] + ".Size(" + val + ")" case descriptor.FieldDescriptorProto_TYPE_MESSAGE: - if gogoproto.IsStdTime(field) { - if gogoproto.IsNullable(field) { - val = "*" + val - } + if gogoproto.IsStdType(field) { pkg := g.useTypes() - g.P("s := ", pkg, ".SizeOfStdTime(", val, ")") - } else if gogoproto.IsStdDuration(field) { if gogoproto.IsNullable(field) { val = "*" + val } - pkg := g.useTypes() - g.P("s := ", pkg, ".SizeOfStdDuration(", val, ")") + if gogoproto.IsStdTime(field) { + g.P("s := ", pkg, ".SizeOfStdTime(", val, ")") + } else if gogoproto.IsStdDuration(field) { + g.P("s := ", pkg, ".SizeOfStdDuration(", val, ")") + } else if gogoproto.IsStdDouble(field) { + g.P("s := ", pkg, ".SizeOfStdDouble(", val, ")") + } else if gogoproto.IsStdFloat(field) { + g.P("s := ", pkg, ".SizeOfStdFloat(", val, ")") + } else if gogoproto.IsStdInt64(field) { + g.P("s := ", pkg, ".SizeOfStdInt64(", val, ")") + } else if gogoproto.IsStdUInt64(field) { + g.P("s := ", pkg, ".SizeOfStdUInt64(", val, ")") + } else if gogoproto.IsStdInt32(field) { + g.P("s := ", pkg, ".SizeOfStdInt32(", val, ")") + } else if gogoproto.IsStdUInt32(field) { + g.P("s := ", pkg, ".SizeOfStdUInt32(", val, ")") + } else if gogoproto.IsStdBool(field) { + g.P("s := ", pkg, ".SizeOfStdBool(", val, ")") + } else if gogoproto.IsStdString(field) { + g.P("s := ", pkg, ".SizeOfStdString(", val, ")") + } else if gogoproto.IsStdBytes(field) { + g.P("s := ", pkg, ".SizeOfStdBytes(", val, ")") + } else { + panic("internal error") + } } else { g.P("s := ", g.Pkg["proto"], ".Size(", val, ")") } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go 2018-11-22 20:53:45.000000000 +0000 @@ -262,6 +262,13 @@ } } + wktptr := gogoproto.IsWktPtr(field) + if wktptr { + if err := proto.SetExtension(valField.Options, gogoproto.E_Wktpointer, &wktptr); err != nil { + g.Fail(err.Error()) + } + } + if valType := gogoproto.GetCastValue(field); len(valType) > 0 { if err := proto.SetExtension(valField.Options, gogoproto.E_Casttype, &valType); err != nil { g.Fail(err.Error()) @@ -339,8 +346,15 @@ } } +func (g *Generator) SetFile(filename string) { + g.file = g.fileByName(filename) +} + func (g *Generator) generatePlugin(file *FileDescriptor, p Plugin) { g.writtenImports = make(map[string]bool) + g.usedPackages = make(map[GoImportPath]bool) + g.packageNames = make(map[GoImportPath]GoPackageName) + g.usedPackageNames = make(map[GoPackageName]bool) g.file = file // Run the plugins before the imports so we know which imports are necessary. diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/golden_test.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/golden_test.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/golden_test.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogo/golden_test.go 2018-11-22 20:53:45.000000000 +0000 @@ -144,7 +144,7 @@ wantPackageB: "test_beta", wantImportsA: map[string]bool{ "github.com/gogo/protobuf/proto": true, - "beta": true, + "beta": true, }, }, { parameters: "import_prefix=prefix", diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogofaster/main.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogofaster/main.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogofaster/main.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogofaster/main.go 2018-11-22 20:53:45.000000000 +0000 @@ -44,6 +44,8 @@ vanity.ForEachFieldInFilesExcludingExtensions(vanity.OnlyProto2(files), vanity.TurnOffNullableForNativeTypesWithoutDefaultsOnly) vanity.ForEachFile(files, vanity.TurnOffGoUnrecognizedAll) + vanity.ForEachFile(files, vanity.TurnOffGoUnkeyedAll) + vanity.ForEachFile(files, vanity.TurnOffGoSizecacheAll) resp := command.Generate(req) command.Write(resp) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogoslick/main.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogoslick/main.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/protoc-gen-gogoslick/main.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/protoc-gen-gogoslick/main.go 2018-11-22 20:53:45.000000000 +0000 @@ -44,6 +44,8 @@ vanity.ForEachFieldInFilesExcludingExtensions(vanity.OnlyProto2(files), vanity.TurnOffNullableForNativeTypesWithoutDefaultsOnly) vanity.ForEachFile(files, vanity.TurnOffGoUnrecognizedAll) + vanity.ForEachFile(files, vanity.TurnOffGoUnkeyedAll) + vanity.ForEachFile(files, vanity.TurnOffGoSizecacheAll) vanity.ForEachFile(files, vanity.TurnOffGoEnumPrefixAll) vanity.ForEachFile(files, vanity.TurnOffGoEnumStringerAll) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/Readme.md lxd-3.0.3/dist/src/github.com/gogo/protobuf/Readme.md --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/Readme.md 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/Readme.md 2018-11-22 20:53:45.000000000 +0000 @@ -1,6 +1,7 @@ # Protocol Buffers for Go with Gadgets [![Build Status](https://travis-ci.org/gogo/protobuf.svg?branch=master)](https://travis-ci.org/gogo/protobuf) +[![GoDoc](https://godoc.org/github.com/gogo/protobuf?status.svg)](http://godoc.org/github.com/gogo/protobuf) gogoprotobuf is a fork of golang/protobuf with extra code generation features. @@ -47,6 +48,7 @@ - zero-os/0-stor - go-spacemesh - cortex - sample proto file + - Apache SkyWalking APM - Istio telemetry receiver based on Mixer bypass protocol Please let us know if you are using gogoprotobuf by posting on our GoogleGroup. @@ -150,4 +152,8 @@ See [https://github.com/gogo/grpc-example](https://github.com/gogo/grpc-example) for an example of using gRPC with gogoprotobuf and the wider grpc-ecosystem. +## License +This software is licensed under the 3-Clause BSD License +("BSD License 2.0", "Revised BSD License", "New BSD License", or "Modified BSD License"). + diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/asymetric-issue125/asym.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/asymetric-issue125/asym.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/asymetric-issue125/asym.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/asymetric-issue125/asym.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -352,6 +352,9 @@ return dAtA } func (m *M) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Arr) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/cachedsize/cachedsize.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/cachedsize/cachedsize.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/cachedsize/cachedsize.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/cachedsize/cachedsize.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -222,6 +222,9 @@ return true } func (m *Foo) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -235,6 +238,9 @@ } func (m *Bar) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/combos/both/casttype.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/combos/both/casttype.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/combos/both/casttype.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/combos/both/casttype.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -145,274 +145,279 @@ func CasttypeDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4261 bytes of a gzipped FileDescriptorSet + // 4344 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x1b, 0xd7, - 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0x79, 0x49, 0x4b, 0x10, 0x1d, 0x83, 0x14, 0xe5, + 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0x79, 0x49, 0xcb, 0x10, 0x13, 0x83, 0x14, 0xe5, 0x1f, 0xda, 0x4e, 0x28, 0x8f, 0xfe, 0x05, 0x25, 0x76, 0x09, 0x12, 0x62, 0xa0, 0x12, 0x24, 0xb3, 0x24, 0x23, 0xcb, 0x69, 0x67, 0x67, 0xb9, 0xb8, 0x04, 0x57, 0x5a, 0xec, 0x6e, 0x76, 0x17, 0x92, - 0xa1, 0xe9, 0x83, 0x1a, 0xb7, 0xcd, 0xa4, 0x9d, 0xfe, 0x77, 0xa6, 0x89, 0xeb, 0xb8, 0x4d, 0x67, - 0x52, 0xa7, 0xe9, 0x4f, 0x92, 0xa6, 0x49, 0x93, 0x3e, 0xe5, 0x25, 0xad, 0x9f, 0x3a, 0xc9, 0x5b, - 0x1f, 0x3a, 0xb2, 0xc5, 0x78, 0xa6, 0x4e, 0xeb, 0x36, 0x6e, 0xeb, 0x07, 0x8f, 0xfc, 0xd2, 0xb9, - 0x7f, 0x8b, 0xc5, 0x0f, 0xb5, 0xa0, 0x32, 0xb6, 0x9f, 0x88, 0x3d, 0xf7, 0x7c, 0xdf, 0x3d, 0xf7, - 0xdc, 0x73, 0xef, 0x39, 0xf7, 0xee, 0x12, 0x7e, 0x76, 0x1e, 0x66, 0xea, 0xb6, 0x5d, 0x37, 0xf1, - 0x71, 0xc7, 0xb5, 0x7d, 0x7b, 0xbb, 0xb9, 0x73, 0xbc, 0x86, 0x3d, 0xdd, 0x35, 0x1c, 0xdf, 0x76, - 0xe7, 0xa9, 0x0c, 0x8d, 0x31, 0x8d, 0x79, 0xa1, 0x31, 0x5b, 0x85, 0xf1, 0x8b, 0x86, 0x89, 0x97, - 0x02, 0xc5, 0x0d, 0xec, 0xa3, 0x73, 0x90, 0xd8, 0x31, 0x4c, 0x9c, 0x97, 0x66, 0xe2, 0x73, 0x99, - 0x13, 0x0f, 0xcf, 0x77, 0x81, 0xe6, 0x3b, 0x11, 0xeb, 0x44, 0xac, 0x50, 0xc4, 0xec, 0x1b, 0x09, - 0x98, 0xe8, 0xd3, 0x8a, 0x10, 0x24, 0x2c, 0xad, 0x41, 0x18, 0xa5, 0xb9, 0xb4, 0x42, 0x7f, 0xa3, - 0x3c, 0x8c, 0x38, 0x9a, 0x7e, 0x4d, 0xab, 0xe3, 0x7c, 0x8c, 0x8a, 0xc5, 0x23, 0x2a, 0x00, 0xd4, - 0xb0, 0x83, 0xad, 0x1a, 0xb6, 0xf4, 0x56, 0x3e, 0x3e, 0x13, 0x9f, 0x4b, 0x2b, 0x21, 0x09, 0x7a, - 0x12, 0xc6, 0x9d, 0xe6, 0xb6, 0x69, 0xe8, 0x6a, 0x48, 0x0d, 0x66, 0xe2, 0x73, 0x49, 0x45, 0x66, - 0x0d, 0x4b, 0x6d, 0xe5, 0xc7, 0x60, 0xec, 0x06, 0xd6, 0xae, 0x85, 0x55, 0x33, 0x54, 0x35, 0x47, - 0xc4, 0x21, 0xc5, 0x45, 0xc8, 0x36, 0xb0, 0xe7, 0x69, 0x75, 0xac, 0xfa, 0x2d, 0x07, 0xe7, 0x13, - 0x74, 0xf4, 0x33, 0x3d, 0xa3, 0xef, 0x1e, 0x79, 0x86, 0xa3, 0x36, 0x5b, 0x0e, 0x46, 0x0b, 0x90, - 0xc6, 0x56, 0xb3, 0xc1, 0x18, 0x92, 0xfb, 0xf8, 0xaf, 0x6c, 0x35, 0x1b, 0xdd, 0x2c, 0x29, 0x02, - 0xe3, 0x14, 0x23, 0x1e, 0x76, 0xaf, 0x1b, 0x3a, 0xce, 0x0f, 0x53, 0x82, 0xc7, 0x7a, 0x08, 0x36, - 0x58, 0x7b, 0x37, 0x87, 0xc0, 0xa1, 0x45, 0x48, 0xe3, 0xe7, 0x7d, 0x6c, 0x79, 0x86, 0x6d, 0xe5, - 0x47, 0x28, 0xc9, 0x23, 0x7d, 0x66, 0x11, 0x9b, 0xb5, 0x6e, 0x8a, 0x36, 0x0e, 0x9d, 0x81, 0x11, - 0xdb, 0xf1, 0x0d, 0xdb, 0xf2, 0xf2, 0xa9, 0x19, 0x69, 0x2e, 0x73, 0xe2, 0x23, 0x7d, 0x03, 0x61, - 0x8d, 0xe9, 0x28, 0x42, 0x19, 0x55, 0x40, 0xf6, 0xec, 0xa6, 0xab, 0x63, 0x55, 0xb7, 0x6b, 0x58, - 0x35, 0xac, 0x1d, 0x3b, 0x9f, 0xa6, 0x04, 0xd3, 0xbd, 0x03, 0xa1, 0x8a, 0x8b, 0x76, 0x0d, 0x57, - 0xac, 0x1d, 0x5b, 0xc9, 0x79, 0x1d, 0xcf, 0xe8, 0x10, 0x0c, 0x7b, 0x2d, 0xcb, 0xd7, 0x9e, 0xcf, - 0x67, 0x69, 0x84, 0xf0, 0xa7, 0xd9, 0xef, 0x0f, 0xc3, 0xd8, 0x20, 0x21, 0x76, 0x01, 0x92, 0x3b, - 0x64, 0x94, 0xf9, 0xd8, 0x41, 0x7c, 0xc0, 0x30, 0x9d, 0x4e, 0x1c, 0xbe, 0x4f, 0x27, 0x2e, 0x40, - 0xc6, 0xc2, 0x9e, 0x8f, 0x6b, 0x2c, 0x22, 0xe2, 0x03, 0xc6, 0x14, 0x30, 0x50, 0x6f, 0x48, 0x25, - 0xee, 0x2b, 0xa4, 0x9e, 0x85, 0xb1, 0xc0, 0x24, 0xd5, 0xd5, 0xac, 0xba, 0x88, 0xcd, 0xe3, 0x51, - 0x96, 0xcc, 0x97, 0x05, 0x4e, 0x21, 0x30, 0x25, 0x87, 0x3b, 0x9e, 0xd1, 0x12, 0x80, 0x6d, 0x61, - 0x7b, 0x47, 0xad, 0x61, 0xdd, 0xcc, 0xa7, 0xf6, 0xf1, 0xd2, 0x1a, 0x51, 0xe9, 0xf1, 0x92, 0xcd, - 0xa4, 0xba, 0x89, 0xce, 0xb7, 0x43, 0x6d, 0x64, 0x9f, 0x48, 0xa9, 0xb2, 0x45, 0xd6, 0x13, 0x6d, - 0x5b, 0x90, 0x73, 0x31, 0x89, 0x7b, 0x5c, 0xe3, 0x23, 0x4b, 0x53, 0x23, 0xe6, 0x23, 0x47, 0xa6, - 0x70, 0x18, 0x1b, 0xd8, 0xa8, 0x1b, 0x7e, 0x44, 0xc7, 0x20, 0x10, 0xa8, 0x34, 0xac, 0x80, 0xee, - 0x42, 0x59, 0x21, 0x5c, 0xd5, 0x1a, 0x78, 0xea, 0x26, 0xe4, 0x3a, 0xdd, 0x83, 0x26, 0x21, 0xe9, - 0xf9, 0x9a, 0xeb, 0xd3, 0x28, 0x4c, 0x2a, 0xec, 0x01, 0xc9, 0x10, 0xc7, 0x56, 0x8d, 0xee, 0x72, - 0x49, 0x85, 0xfc, 0x44, 0xbf, 0xd0, 0x1e, 0x70, 0x9c, 0x0e, 0xf8, 0xd1, 0xde, 0x19, 0xed, 0x60, - 0xee, 0x1e, 0xf7, 0xd4, 0x59, 0x18, 0xed, 0x18, 0xc0, 0xa0, 0x5d, 0xcf, 0xfe, 0x0a, 0x3c, 0xd0, - 0x97, 0x1a, 0x3d, 0x0b, 0x93, 0x4d, 0xcb, 0xb0, 0x7c, 0xec, 0x3a, 0x2e, 0x26, 0x11, 0xcb, 0xba, - 0xca, 0xff, 0xfb, 0xc8, 0x3e, 0x31, 0xb7, 0x15, 0xd6, 0x66, 0x2c, 0xca, 0x44, 0xb3, 0x57, 0xf8, - 0x44, 0x3a, 0xf5, 0xe6, 0x88, 0x7c, 0xeb, 0xd6, 0xad, 0x5b, 0xb1, 0xd9, 0x2f, 0x0e, 0xc3, 0x64, - 0xbf, 0x35, 0xd3, 0x77, 0xf9, 0x1e, 0x82, 0x61, 0xab, 0xd9, 0xd8, 0xc6, 0x2e, 0x75, 0x52, 0x52, - 0xe1, 0x4f, 0x68, 0x01, 0x92, 0xa6, 0xb6, 0x8d, 0xcd, 0x7c, 0x62, 0x46, 0x9a, 0xcb, 0x9d, 0x78, - 0x72, 0xa0, 0x55, 0x39, 0xbf, 0x42, 0x20, 0x0a, 0x43, 0xa2, 0xa7, 0x21, 0xc1, 0xb7, 0x68, 0xc2, - 0xf0, 0xc4, 0x60, 0x0c, 0x64, 0x2d, 0x29, 0x14, 0x87, 0x1e, 0x84, 0x34, 0xf9, 0xcb, 0x62, 0x63, - 0x98, 0xda, 0x9c, 0x22, 0x02, 0x12, 0x17, 0x68, 0x0a, 0x52, 0x74, 0x99, 0xd4, 0xb0, 0x48, 0x6d, - 0xc1, 0x33, 0x09, 0xac, 0x1a, 0xde, 0xd1, 0x9a, 0xa6, 0xaf, 0x5e, 0xd7, 0xcc, 0x26, 0xa6, 0x01, - 0x9f, 0x56, 0xb2, 0x5c, 0xf8, 0x69, 0x22, 0x43, 0xd3, 0x90, 0x61, 0xab, 0xca, 0xb0, 0x6a, 0xf8, - 0x79, 0xba, 0x7b, 0x26, 0x15, 0xb6, 0xd0, 0x2a, 0x44, 0x42, 0xba, 0xbf, 0xea, 0xd9, 0x96, 0x08, - 0x4d, 0xda, 0x05, 0x11, 0xd0, 0xee, 0xcf, 0x76, 0x6f, 0xdc, 0x0f, 0xf5, 0x1f, 0x5e, 0x77, 0x4c, - 0xcd, 0x7e, 0x37, 0x06, 0x09, 0xba, 0x5f, 0x8c, 0x41, 0x66, 0xf3, 0xca, 0x7a, 0x59, 0x5d, 0x5a, - 0xdb, 0x2a, 0xad, 0x94, 0x65, 0x09, 0xe5, 0x00, 0xa8, 0xe0, 0xe2, 0xca, 0xda, 0xc2, 0xa6, 0x1c, - 0x0b, 0x9e, 0x2b, 0xab, 0x9b, 0x67, 0x4e, 0xc9, 0xf1, 0x00, 0xb0, 0xc5, 0x04, 0x89, 0xb0, 0xc2, - 0xc9, 0x13, 0x72, 0x12, 0xc9, 0x90, 0x65, 0x04, 0x95, 0x67, 0xcb, 0x4b, 0x67, 0x4e, 0xc9, 0xc3, - 0x9d, 0x92, 0x93, 0x27, 0xe4, 0x11, 0x34, 0x0a, 0x69, 0x2a, 0x29, 0xad, 0xad, 0xad, 0xc8, 0xa9, - 0x80, 0x73, 0x63, 0x53, 0xa9, 0xac, 0x2e, 0xcb, 0xe9, 0x80, 0x73, 0x59, 0x59, 0xdb, 0x5a, 0x97, - 0x21, 0x60, 0xa8, 0x96, 0x37, 0x36, 0x16, 0x96, 0xcb, 0x72, 0x26, 0xd0, 0x28, 0x5d, 0xd9, 0x2c, - 0x6f, 0xc8, 0xd9, 0x0e, 0xb3, 0x4e, 0x9e, 0x90, 0x47, 0x83, 0x2e, 0xca, 0xab, 0x5b, 0x55, 0x39, - 0x87, 0xc6, 0x61, 0x94, 0x75, 0x21, 0x8c, 0x18, 0xeb, 0x12, 0x9d, 0x39, 0x25, 0xcb, 0x6d, 0x43, - 0x18, 0xcb, 0x78, 0x87, 0xe0, 0xcc, 0x29, 0x19, 0xcd, 0x2e, 0x42, 0x92, 0x46, 0x17, 0x42, 0x90, - 0x5b, 0x59, 0x28, 0x95, 0x57, 0xd4, 0xb5, 0xf5, 0xcd, 0xca, 0xda, 0xea, 0xc2, 0x8a, 0x2c, 0xb5, - 0x65, 0x4a, 0xf9, 0x53, 0x5b, 0x15, 0xa5, 0xbc, 0x24, 0xc7, 0xc2, 0xb2, 0xf5, 0xf2, 0xc2, 0x66, - 0x79, 0x49, 0x8e, 0xcf, 0xea, 0x30, 0xd9, 0x6f, 0x9f, 0xec, 0xbb, 0x32, 0x42, 0x53, 0x1c, 0xdb, - 0x67, 0x8a, 0x29, 0x57, 0xcf, 0x14, 0xff, 0x24, 0x06, 0x13, 0x7d, 0x72, 0x45, 0xdf, 0x4e, 0x9e, - 0x81, 0x24, 0x0b, 0x51, 0x96, 0x3d, 0x1f, 0xef, 0x9b, 0x74, 0x68, 0xc0, 0xf6, 0x64, 0x50, 0x8a, - 0x0b, 0x57, 0x10, 0xf1, 0x7d, 0x2a, 0x08, 0x42, 0xd1, 0xb3, 0xa7, 0xff, 0x72, 0xcf, 0x9e, 0xce, - 0xd2, 0xde, 0x99, 0x41, 0xd2, 0x1e, 0x95, 0x1d, 0x6c, 0x6f, 0x4f, 0xf6, 0xd9, 0xdb, 0x2f, 0xc0, - 0x78, 0x0f, 0xd1, 0xc0, 0x7b, 0xec, 0x0b, 0x12, 0xe4, 0xf7, 0x73, 0x4e, 0xc4, 0x4e, 0x17, 0xeb, - 0xd8, 0xe9, 0x2e, 0x74, 0x7b, 0xf0, 0xe8, 0xfe, 0x93, 0xd0, 0x33, 0xd7, 0xaf, 0x48, 0x70, 0xa8, - 0x7f, 0xa5, 0xd8, 0xd7, 0x86, 0xa7, 0x61, 0xb8, 0x81, 0xfd, 0x5d, 0x5b, 0x54, 0x4b, 0x8f, 0xf6, - 0xc9, 0xc1, 0xa4, 0xb9, 0x7b, 0xb2, 0x39, 0x2a, 0x9c, 0xc4, 0xe3, 0xfb, 0x95, 0x7b, 0xcc, 0x9a, - 0x1e, 0x4b, 0xbf, 0x10, 0x83, 0x07, 0xfa, 0x92, 0xf7, 0x35, 0xf4, 0x21, 0x00, 0xc3, 0x72, 0x9a, - 0x3e, 0xab, 0x88, 0xd8, 0x06, 0x9b, 0xa6, 0x12, 0xba, 0x79, 0x91, 0xcd, 0xb3, 0xe9, 0x07, 0xed, - 0x71, 0xda, 0x0e, 0x4c, 0x44, 0x15, 0xce, 0xb5, 0x0d, 0x4d, 0x50, 0x43, 0x0b, 0xfb, 0x8c, 0xb4, - 0x27, 0x30, 0x9f, 0x02, 0x59, 0x37, 0x0d, 0x6c, 0xf9, 0xaa, 0xe7, 0xbb, 0x58, 0x6b, 0x18, 0x56, - 0x9d, 0x66, 0x90, 0x54, 0x31, 0xb9, 0xa3, 0x99, 0x1e, 0x56, 0xc6, 0x58, 0xf3, 0x86, 0x68, 0x25, - 0x08, 0x1a, 0x40, 0x6e, 0x08, 0x31, 0xdc, 0x81, 0x60, 0xcd, 0x01, 0x62, 0xf6, 0xdb, 0x29, 0xc8, - 0x84, 0xea, 0x6a, 0x74, 0x14, 0xb2, 0x57, 0xb5, 0xeb, 0x9a, 0x2a, 0xce, 0x4a, 0xcc, 0x13, 0x19, - 0x22, 0x5b, 0xe7, 0xe7, 0xa5, 0xa7, 0x60, 0x92, 0xaa, 0xd8, 0x4d, 0x1f, 0xbb, 0xaa, 0x6e, 0x6a, - 0x9e, 0x47, 0x9d, 0x96, 0xa2, 0xaa, 0x88, 0xb4, 0xad, 0x91, 0xa6, 0x45, 0xd1, 0x82, 0x4e, 0xc3, - 0x04, 0x45, 0x34, 0x9a, 0xa6, 0x6f, 0x38, 0x26, 0x56, 0xc9, 0xe9, 0xcd, 0xa3, 0x99, 0x24, 0xb0, - 0x6c, 0x9c, 0x68, 0x54, 0xb9, 0x02, 0xb1, 0xc8, 0x43, 0x4b, 0xf0, 0x10, 0x85, 0xd5, 0xb1, 0x85, - 0x5d, 0xcd, 0xc7, 0x2a, 0xfe, 0x6c, 0x53, 0x33, 0x3d, 0x55, 0xb3, 0x6a, 0xea, 0xae, 0xe6, 0xed, - 0xe6, 0x27, 0x09, 0x41, 0x29, 0x96, 0x97, 0x94, 0x23, 0x44, 0x71, 0x99, 0xeb, 0x95, 0xa9, 0xda, - 0x82, 0x55, 0xfb, 0xa4, 0xe6, 0xed, 0xa2, 0x22, 0x1c, 0xa2, 0x2c, 0x9e, 0xef, 0x1a, 0x56, 0x5d, - 0xd5, 0x77, 0xb1, 0x7e, 0x4d, 0x6d, 0xfa, 0x3b, 0xe7, 0xf2, 0x0f, 0x86, 0xfb, 0xa7, 0x16, 0x6e, - 0x50, 0x9d, 0x45, 0xa2, 0xb2, 0xe5, 0xef, 0x9c, 0x43, 0x1b, 0x90, 0x25, 0x93, 0xd1, 0x30, 0x6e, - 0x62, 0x75, 0xc7, 0x76, 0x69, 0x6a, 0xcc, 0xf5, 0xd9, 0x9a, 0x42, 0x1e, 0x9c, 0x5f, 0xe3, 0x80, - 0xaa, 0x5d, 0xc3, 0xc5, 0xe4, 0xc6, 0x7a, 0xb9, 0xbc, 0xa4, 0x64, 0x04, 0xcb, 0x45, 0xdb, 0x25, - 0x01, 0x55, 0xb7, 0x03, 0x07, 0x67, 0x58, 0x40, 0xd5, 0x6d, 0xe1, 0xde, 0xd3, 0x30, 0xa1, 0xeb, - 0x6c, 0xcc, 0x86, 0xae, 0xf2, 0x33, 0x96, 0x97, 0x97, 0x3b, 0x9c, 0xa5, 0xeb, 0xcb, 0x4c, 0x81, - 0xc7, 0xb8, 0x87, 0xce, 0xc3, 0x03, 0x6d, 0x67, 0x85, 0x81, 0xe3, 0x3d, 0xa3, 0xec, 0x86, 0x9e, - 0x86, 0x09, 0xa7, 0xd5, 0x0b, 0x44, 0x1d, 0x3d, 0x3a, 0xad, 0x6e, 0xd8, 0x59, 0x98, 0x74, 0x76, - 0x9d, 0x5e, 0xdc, 0x13, 0x61, 0x1c, 0x72, 0x76, 0x9d, 0x6e, 0xe0, 0x23, 0xf4, 0xc0, 0xed, 0x62, - 0x5d, 0xf3, 0x71, 0x2d, 0x7f, 0x38, 0xac, 0x1e, 0x6a, 0x40, 0xc7, 0x41, 0xd6, 0x75, 0x15, 0x5b, - 0xda, 0xb6, 0x89, 0x55, 0xcd, 0xc5, 0x96, 0xe6, 0xe5, 0xa7, 0xc3, 0xca, 0x39, 0x5d, 0x2f, 0xd3, - 0xd6, 0x05, 0xda, 0x88, 0x9e, 0x80, 0x71, 0x7b, 0xfb, 0xaa, 0xce, 0x42, 0x52, 0x75, 0x5c, 0xbc, - 0x63, 0x3c, 0x9f, 0x7f, 0x98, 0xfa, 0x77, 0x8c, 0x34, 0xd0, 0x80, 0x5c, 0xa7, 0x62, 0xf4, 0x38, - 0xc8, 0xba, 0xb7, 0xab, 0xb9, 0x0e, 0xdd, 0x93, 0x3d, 0x47, 0xd3, 0x71, 0xfe, 0x11, 0xa6, 0xca, - 0xe4, 0xab, 0x42, 0x4c, 0x96, 0x84, 0x77, 0xc3, 0xd8, 0xf1, 0x05, 0xe3, 0x63, 0x6c, 0x49, 0x50, - 0x19, 0x67, 0x9b, 0x03, 0x99, 0xb8, 0xa2, 0xa3, 0xe3, 0x39, 0xaa, 0x96, 0x73, 0x76, 0x9d, 0x70, - 0xbf, 0xc7, 0x60, 0x94, 0x68, 0xb6, 0x3b, 0x7d, 0x9c, 0x15, 0x64, 0xce, 0x6e, 0xa8, 0xc7, 0xf7, - 0xad, 0x36, 0x9e, 0x2d, 0x42, 0x36, 0x1c, 0x9f, 0x28, 0x0d, 0x2c, 0x42, 0x65, 0x89, 0x14, 0x2b, - 0x8b, 0x6b, 0x4b, 0xa4, 0xcc, 0x78, 0xae, 0x2c, 0xc7, 0x48, 0xb9, 0xb3, 0x52, 0xd9, 0x2c, 0xab, - 0xca, 0xd6, 0xea, 0x66, 0xa5, 0x5a, 0x96, 0xe3, 0xe1, 0xba, 0xfa, 0x87, 0x31, 0xc8, 0x75, 0x1e, - 0x91, 0xd0, 0xc7, 0xe1, 0xb0, 0xb8, 0xcf, 0xf0, 0xb0, 0xaf, 0xde, 0x30, 0x5c, 0xba, 0x64, 0x1a, - 0x1a, 0x4b, 0x5f, 0xc1, 0xa4, 0x4d, 0x72, 0xad, 0x0d, 0xec, 0x5f, 0x36, 0x5c, 0xb2, 0x20, 0x1a, - 0x9a, 0x8f, 0x56, 0x60, 0xda, 0xb2, 0x55, 0xcf, 0xd7, 0xac, 0x9a, 0xe6, 0xd6, 0xd4, 0xf6, 0x4d, - 0x92, 0xaa, 0xe9, 0x3a, 0xf6, 0x3c, 0x9b, 0xa5, 0xaa, 0x80, 0xe5, 0x23, 0x96, 0xbd, 0xc1, 0x95, - 0xdb, 0x7b, 0xf8, 0x02, 0x57, 0xed, 0x0a, 0xb0, 0xf8, 0x7e, 0x01, 0xf6, 0x20, 0xa4, 0x1b, 0x9a, - 0xa3, 0x62, 0xcb, 0x77, 0x5b, 0xb4, 0x30, 0x4e, 0x29, 0xa9, 0x86, 0xe6, 0x94, 0xc9, 0xf3, 0x07, - 0x73, 0x3e, 0xf9, 0xb7, 0x38, 0x64, 0xc3, 0xc5, 0x31, 0x39, 0x6b, 0xe8, 0x34, 0x8f, 0x48, 0x74, - 0xa7, 0x39, 0x76, 0xcf, 0x52, 0x7a, 0x7e, 0x91, 0x24, 0x98, 0xe2, 0x30, 0x2b, 0x59, 0x15, 0x86, - 0x24, 0xc9, 0x9d, 0xec, 0x2d, 0x98, 0x95, 0x08, 0x29, 0x85, 0x3f, 0xa1, 0x65, 0x18, 0xbe, 0xea, - 0x51, 0xee, 0x61, 0xca, 0xfd, 0xf0, 0xbd, 0xb9, 0x2f, 0x6d, 0x50, 0xf2, 0xf4, 0xa5, 0x0d, 0x75, - 0x75, 0x4d, 0xa9, 0x2e, 0xac, 0x28, 0x1c, 0x8e, 0x8e, 0x40, 0xc2, 0xd4, 0x6e, 0xb6, 0x3a, 0x53, - 0x11, 0x15, 0x0d, 0xea, 0xf8, 0x23, 0x90, 0xb8, 0x81, 0xb5, 0x6b, 0x9d, 0x09, 0x80, 0x8a, 0xde, - 0xc7, 0xd0, 0x3f, 0x0e, 0x49, 0xea, 0x2f, 0x04, 0xc0, 0x3d, 0x26, 0x0f, 0xa1, 0x14, 0x24, 0x16, - 0xd7, 0x14, 0x12, 0xfe, 0x32, 0x64, 0x99, 0x54, 0x5d, 0xaf, 0x94, 0x17, 0xcb, 0x72, 0x6c, 0xf6, - 0x34, 0x0c, 0x33, 0x27, 0x90, 0xa5, 0x11, 0xb8, 0x41, 0x1e, 0xe2, 0x8f, 0x9c, 0x43, 0x12, 0xad, - 0x5b, 0xd5, 0x52, 0x59, 0x91, 0x63, 0xe1, 0xe9, 0xf5, 0x20, 0x1b, 0xae, 0x8b, 0x3f, 0x98, 0x98, - 0xfa, 0x47, 0x09, 0x32, 0xa1, 0x3a, 0x97, 0x14, 0x28, 0x9a, 0x69, 0xda, 0x37, 0x54, 0xcd, 0x34, - 0x34, 0x8f, 0x07, 0x05, 0x50, 0xd1, 0x02, 0x91, 0x0c, 0x3a, 0x69, 0x1f, 0x88, 0xf1, 0x2f, 0x4b, - 0x20, 0x77, 0x97, 0x98, 0x5d, 0x06, 0x4a, 0x1f, 0xaa, 0x81, 0x2f, 0x49, 0x90, 0xeb, 0xac, 0x2b, - 0xbb, 0xcc, 0x3b, 0xfa, 0xa1, 0x9a, 0xf7, 0x7a, 0x0c, 0x46, 0x3b, 0xaa, 0xc9, 0x41, 0xad, 0xfb, - 0x2c, 0x8c, 0x1b, 0x35, 0xdc, 0x70, 0x6c, 0x1f, 0x5b, 0x7a, 0x4b, 0x35, 0xf1, 0x75, 0x6c, 0xe6, - 0x67, 0xe9, 0x46, 0x71, 0xfc, 0xde, 0xf5, 0xea, 0x7c, 0xa5, 0x8d, 0x5b, 0x21, 0xb0, 0xe2, 0x44, - 0x65, 0xa9, 0x5c, 0x5d, 0x5f, 0xdb, 0x2c, 0xaf, 0x2e, 0x5e, 0x51, 0xb7, 0x56, 0x7f, 0x71, 0x75, - 0xed, 0xf2, 0xaa, 0x22, 0x1b, 0x5d, 0x6a, 0xef, 0xe3, 0x52, 0x5f, 0x07, 0xb9, 0xdb, 0x28, 0x74, - 0x18, 0xfa, 0x99, 0x25, 0x0f, 0xa1, 0x09, 0x18, 0x5b, 0x5d, 0x53, 0x37, 0x2a, 0x4b, 0x65, 0xb5, - 0x7c, 0xf1, 0x62, 0x79, 0x71, 0x73, 0x83, 0xdd, 0x40, 0x04, 0xda, 0x9b, 0x9d, 0x8b, 0xfa, 0xc5, - 0x38, 0x4c, 0xf4, 0xb1, 0x04, 0x2d, 0xf0, 0xb3, 0x03, 0x3b, 0xce, 0x7c, 0x6c, 0x10, 0xeb, 0xe7, - 0x49, 0xca, 0x5f, 0xd7, 0x5c, 0x9f, 0x1f, 0x35, 0x1e, 0x07, 0xe2, 0x25, 0xcb, 0x37, 0x76, 0x0c, - 0xec, 0xf2, 0x0b, 0x1b, 0x76, 0xa0, 0x18, 0x6b, 0xcb, 0xd9, 0x9d, 0xcd, 0x47, 0x01, 0x39, 0xb6, - 0x67, 0xf8, 0xc6, 0x75, 0xac, 0x1a, 0x96, 0xb8, 0xdd, 0x21, 0x07, 0x8c, 0x84, 0x22, 0x8b, 0x96, - 0x8a, 0xe5, 0x07, 0xda, 0x16, 0xae, 0x6b, 0x5d, 0xda, 0x64, 0x03, 0x8f, 0x2b, 0xb2, 0x68, 0x09, - 0xb4, 0x8f, 0x42, 0xb6, 0x66, 0x37, 0x49, 0xd5, 0xc5, 0xf4, 0x48, 0xbe, 0x90, 0x94, 0x0c, 0x93, - 0x05, 0x2a, 0xbc, 0x9e, 0x6e, 0x5f, 0x2b, 0x65, 0x95, 0x0c, 0x93, 0x31, 0x95, 0xc7, 0x60, 0x4c, - 0xab, 0xd7, 0x5d, 0x42, 0x2e, 0x88, 0xd8, 0x09, 0x21, 0x17, 0x88, 0xa9, 0xe2, 0xd4, 0x25, 0x48, - 0x09, 0x3f, 0x90, 0x94, 0x4c, 0x3c, 0xa1, 0x3a, 0xec, 0xd8, 0x1b, 0x9b, 0x4b, 0x2b, 0x29, 0x4b, - 0x34, 0x1e, 0x85, 0xac, 0xe1, 0xa9, 0xed, 0x5b, 0xf2, 0xd8, 0x4c, 0x6c, 0x2e, 0xa5, 0x64, 0x0c, - 0x2f, 0xb8, 0x61, 0x9c, 0x7d, 0x25, 0x06, 0xb9, 0xce, 0x5b, 0x7e, 0xb4, 0x04, 0x29, 0xd3, 0xd6, - 0x35, 0x1a, 0x5a, 0xec, 0x15, 0xd3, 0x5c, 0xc4, 0x8b, 0x81, 0xf9, 0x15, 0xae, 0xaf, 0x04, 0xc8, - 0xa9, 0x7f, 0x91, 0x20, 0x25, 0xc4, 0xe8, 0x10, 0x24, 0x1c, 0xcd, 0xdf, 0xa5, 0x74, 0xc9, 0x52, - 0x4c, 0x96, 0x14, 0xfa, 0x4c, 0xe4, 0x9e, 0xa3, 0x59, 0x34, 0x04, 0xb8, 0x9c, 0x3c, 0x93, 0x79, - 0x35, 0xb1, 0x56, 0xa3, 0xc7, 0x0f, 0xbb, 0xd1, 0xc0, 0x96, 0xef, 0x89, 0x79, 0xe5, 0xf2, 0x45, - 0x2e, 0x46, 0x4f, 0xc2, 0xb8, 0xef, 0x6a, 0x86, 0xd9, 0xa1, 0x9b, 0xa0, 0xba, 0xb2, 0x68, 0x08, - 0x94, 0x8b, 0x70, 0x44, 0xf0, 0xd6, 0xb0, 0xaf, 0xe9, 0xbb, 0xb8, 0xd6, 0x06, 0x0d, 0xd3, 0x6b, - 0x86, 0xc3, 0x5c, 0x61, 0x89, 0xb7, 0x0b, 0xec, 0xec, 0x8f, 0x25, 0x18, 0x17, 0x07, 0xa6, 0x5a, - 0xe0, 0xac, 0x2a, 0x80, 0x66, 0x59, 0xb6, 0x1f, 0x76, 0x57, 0x6f, 0x28, 0xf7, 0xe0, 0xe6, 0x17, - 0x02, 0x90, 0x12, 0x22, 0x98, 0x6a, 0x00, 0xb4, 0x5b, 0xf6, 0x75, 0xdb, 0x34, 0x64, 0xf8, 0x2b, - 0x1c, 0xfa, 0x1e, 0x90, 0x1d, 0xb1, 0x81, 0x89, 0xc8, 0xc9, 0x0a, 0x4d, 0x42, 0x72, 0x1b, 0xd7, - 0x0d, 0x8b, 0x5f, 0xcc, 0xb2, 0x07, 0x71, 0x11, 0x92, 0x08, 0x2e, 0x42, 0x4a, 0x9f, 0x81, 0x09, - 0xdd, 0x6e, 0x74, 0x9b, 0x5b, 0x92, 0xbb, 0x8e, 0xf9, 0xde, 0x27, 0xa5, 0xe7, 0xa0, 0x5d, 0x62, - 0xbe, 0x2b, 0x49, 0x7f, 0x1e, 0x8b, 0x2f, 0xaf, 0x97, 0xbe, 0x1e, 0x9b, 0x5a, 0x66, 0xd0, 0x75, - 0x31, 0x52, 0x05, 0xef, 0x98, 0x58, 0x27, 0xd6, 0xc3, 0x57, 0xe7, 0xe0, 0x63, 0x75, 0xc3, 0xdf, - 0x6d, 0x6e, 0xcf, 0xeb, 0x76, 0xe3, 0x78, 0xdd, 0xae, 0xdb, 0xed, 0x57, 0x9f, 0xe4, 0x89, 0x3e, - 0xd0, 0x5f, 0xfc, 0xf5, 0x67, 0x3a, 0x90, 0x4e, 0x45, 0xbe, 0x2b, 0x2d, 0xae, 0xc2, 0x04, 0x57, - 0x56, 0xe9, 0xfb, 0x17, 0x76, 0x8a, 0x40, 0xf7, 0xbc, 0xc3, 0xca, 0x7f, 0xeb, 0x0d, 0x9a, 0xae, - 0x95, 0x71, 0x0e, 0x25, 0x6d, 0xec, 0xa0, 0x51, 0x54, 0xe0, 0x81, 0x0e, 0x3e, 0xb6, 0x34, 0xb1, - 0x1b, 0xc1, 0xf8, 0x43, 0xce, 0x38, 0x11, 0x62, 0xdc, 0xe0, 0xd0, 0xe2, 0x22, 0x8c, 0x1e, 0x84, - 0xeb, 0x9f, 0x38, 0x57, 0x16, 0x87, 0x49, 0x96, 0x61, 0x8c, 0x92, 0xe8, 0x4d, 0xcf, 0xb7, 0x1b, - 0x74, 0xdf, 0xbb, 0x37, 0xcd, 0x3f, 0xbf, 0xc1, 0xd6, 0x4a, 0x8e, 0xc0, 0x16, 0x03, 0x54, 0xb1, - 0x08, 0xf4, 0x95, 0x53, 0x0d, 0xeb, 0x66, 0x04, 0xc3, 0xab, 0xdc, 0x90, 0x40, 0xbf, 0xf8, 0x69, - 0x98, 0x24, 0xbf, 0xe9, 0xb6, 0x14, 0xb6, 0x24, 0xfa, 0xc2, 0x2b, 0xff, 0xe3, 0x17, 0xd8, 0x72, - 0x9c, 0x08, 0x08, 0x42, 0x36, 0x85, 0x66, 0xb1, 0x8e, 0x7d, 0x1f, 0xbb, 0x9e, 0xaa, 0x99, 0xfd, - 0xcc, 0x0b, 0xdd, 0x18, 0xe4, 0xbf, 0xf4, 0x56, 0xe7, 0x2c, 0x2e, 0x33, 0xe4, 0x82, 0x69, 0x16, - 0xb7, 0xe0, 0x70, 0x9f, 0xa8, 0x18, 0x80, 0xf3, 0x45, 0xce, 0x39, 0xd9, 0x13, 0x19, 0x84, 0x76, - 0x1d, 0x84, 0x3c, 0x98, 0xcb, 0x01, 0x38, 0xff, 0x84, 0x73, 0x22, 0x8e, 0x15, 0x53, 0x4a, 0x18, - 0x2f, 0xc1, 0xf8, 0x75, 0xec, 0x6e, 0xdb, 0x1e, 0xbf, 0xa5, 0x19, 0x80, 0xee, 0x25, 0x4e, 0x37, - 0xc6, 0x81, 0xf4, 0xda, 0x86, 0x70, 0x9d, 0x87, 0xd4, 0x8e, 0xa6, 0xe3, 0x01, 0x28, 0xbe, 0xcc, - 0x29, 0x46, 0x88, 0x3e, 0x81, 0x2e, 0x40, 0xb6, 0x6e, 0xf3, 0xcc, 0x14, 0x0d, 0x7f, 0x99, 0xc3, - 0x33, 0x02, 0xc3, 0x29, 0x1c, 0xdb, 0x69, 0x9a, 0x24, 0x6d, 0x45, 0x53, 0xfc, 0xa9, 0xa0, 0x10, - 0x18, 0x4e, 0x71, 0x00, 0xb7, 0xfe, 0x99, 0xa0, 0xf0, 0x42, 0xfe, 0x7c, 0x06, 0x32, 0xb6, 0x65, - 0xb6, 0x6c, 0x6b, 0x10, 0x23, 0xbe, 0xc2, 0x19, 0x80, 0x43, 0x08, 0xc1, 0x05, 0x48, 0x0f, 0x3a, - 0x11, 0x5f, 0x7d, 0x4b, 0x2c, 0x0f, 0x31, 0x03, 0xcb, 0x30, 0x26, 0x36, 0x28, 0xc3, 0xb6, 0x06, - 0xa0, 0xf8, 0x0b, 0x4e, 0x91, 0x0b, 0xc1, 0xf8, 0x30, 0x7c, 0xec, 0xf9, 0x75, 0x3c, 0x08, 0xc9, - 0x2b, 0x62, 0x18, 0x1c, 0xc2, 0x5d, 0xb9, 0x8d, 0x2d, 0x7d, 0x77, 0x30, 0x86, 0xaf, 0x09, 0x57, - 0x0a, 0x0c, 0xa1, 0x58, 0x84, 0xd1, 0x86, 0xe6, 0x7a, 0xbb, 0x9a, 0x39, 0xd0, 0x74, 0xfc, 0x25, - 0xe7, 0xc8, 0x06, 0x20, 0xee, 0x91, 0xa6, 0x75, 0x10, 0x9a, 0xaf, 0x0b, 0x8f, 0x84, 0x60, 0x7c, - 0xe9, 0x79, 0x3e, 0xbd, 0xd2, 0x3a, 0x08, 0xdb, 0x5f, 0x89, 0xa5, 0xc7, 0xb0, 0xd5, 0x30, 0xe3, - 0x05, 0x48, 0x7b, 0xc6, 0xcd, 0x81, 0x68, 0xfe, 0x5a, 0xcc, 0x34, 0x05, 0x10, 0xf0, 0x15, 0x38, - 0xd2, 0x37, 0x4d, 0x0c, 0x40, 0xf6, 0x37, 0x9c, 0xec, 0x50, 0x9f, 0x54, 0xc1, 0xb7, 0x84, 0x83, - 0x52, 0xfe, 0xad, 0xd8, 0x12, 0x70, 0x17, 0xd7, 0x3a, 0x39, 0x2b, 0x78, 0xda, 0xce, 0xc1, 0xbc, - 0xf6, 0x0d, 0xe1, 0x35, 0x86, 0xed, 0xf0, 0xda, 0x26, 0x1c, 0xe2, 0x8c, 0x07, 0x9b, 0xd7, 0x6f, - 0x8a, 0x8d, 0x95, 0xa1, 0xb7, 0x3a, 0x67, 0xf7, 0x33, 0x30, 0x15, 0xb8, 0x53, 0x14, 0xa5, 0x9e, - 0xda, 0xd0, 0x9c, 0x01, 0x98, 0xbf, 0xc5, 0x99, 0xc5, 0x8e, 0x1f, 0x54, 0xb5, 0x5e, 0x55, 0x73, - 0x08, 0xf9, 0xb3, 0x90, 0x17, 0xe4, 0x4d, 0xcb, 0xc5, 0xba, 0x5d, 0xb7, 0x8c, 0x9b, 0xb8, 0x36, - 0x00, 0xf5, 0xdf, 0x75, 0x4d, 0xd5, 0x56, 0x08, 0x4e, 0x98, 0x2b, 0x20, 0x07, 0xb5, 0x8a, 0x6a, - 0x34, 0x1c, 0xdb, 0xf5, 0x23, 0x18, 0xbf, 0x2d, 0x66, 0x2a, 0xc0, 0x55, 0x28, 0xac, 0x58, 0x86, - 0x1c, 0x7d, 0x1c, 0x34, 0x24, 0xff, 0x9e, 0x13, 0x8d, 0xb6, 0x51, 0x7c, 0xe3, 0xd0, 0xed, 0x86, - 0xa3, 0xb9, 0x83, 0xec, 0x7f, 0xdf, 0x11, 0x1b, 0x07, 0x87, 0xf0, 0x8d, 0xc3, 0x6f, 0x39, 0x98, - 0x64, 0xfb, 0x01, 0x18, 0xbe, 0x2b, 0x36, 0x0e, 0x81, 0xe1, 0x14, 0xa2, 0x60, 0x18, 0x80, 0xe2, - 0x1f, 0x04, 0x85, 0xc0, 0x10, 0x8a, 0x4f, 0xb5, 0x13, 0xad, 0x8b, 0xeb, 0x86, 0xe7, 0xbb, 0xac, - 0x14, 0xbe, 0x37, 0xd5, 0xf7, 0xde, 0xea, 0x2c, 0xc2, 0x94, 0x10, 0x94, 0xec, 0x44, 0xfc, 0x0a, - 0x95, 0x9e, 0x94, 0xa2, 0x0d, 0xfb, 0xbe, 0xd8, 0x89, 0x42, 0x30, 0xb6, 0x3e, 0xc7, 0xba, 0x6a, - 0x15, 0x14, 0xf5, 0x21, 0x4c, 0xfe, 0x57, 0xdf, 0xe1, 0x5c, 0x9d, 0xa5, 0x4a, 0x71, 0x85, 0x04, - 0x50, 0x67, 0x41, 0x11, 0x4d, 0xf6, 0xc2, 0x3b, 0x41, 0x0c, 0x75, 0xd4, 0x13, 0xc5, 0x8b, 0x30, - 0xda, 0x51, 0x4c, 0x44, 0x53, 0xfd, 0x1a, 0xa7, 0xca, 0x86, 0x6b, 0x89, 0xe2, 0x69, 0x48, 0x90, - 0xc2, 0x20, 0x1a, 0xfe, 0xeb, 0x1c, 0x4e, 0xd5, 0x8b, 0x9f, 0x80, 0x94, 0x28, 0x08, 0xa2, 0xa1, - 0xbf, 0xc1, 0xa1, 0x01, 0x84, 0xc0, 0x45, 0x31, 0x10, 0x0d, 0xff, 0xbc, 0x80, 0x0b, 0x08, 0x81, - 0x0f, 0xee, 0xc2, 0x1f, 0xfc, 0x56, 0x82, 0x6f, 0xe8, 0xc2, 0x77, 0x17, 0x60, 0x84, 0x57, 0x01, - 0xd1, 0xe8, 0x2f, 0xf0, 0xce, 0x05, 0xa2, 0x78, 0x16, 0x92, 0x03, 0x3a, 0xfc, 0xb7, 0x39, 0x94, - 0xe9, 0x17, 0x17, 0x21, 0x13, 0xca, 0xfc, 0xd1, 0xf0, 0xdf, 0xe1, 0xf0, 0x30, 0x8a, 0x98, 0xce, - 0x33, 0x7f, 0x34, 0xc1, 0xef, 0x0a, 0xd3, 0x39, 0x82, 0xb8, 0x4d, 0x24, 0xfd, 0x68, 0xf4, 0xef, - 0x09, 0xaf, 0x0b, 0x48, 0xf1, 0x19, 0x48, 0x07, 0x1b, 0x79, 0x34, 0xfe, 0xf7, 0x39, 0xbe, 0x8d, - 0x21, 0x1e, 0x08, 0x25, 0x92, 0x68, 0x8a, 0x3f, 0x10, 0x1e, 0x08, 0xa1, 0xc8, 0x32, 0xea, 0x2e, - 0x0e, 0xa2, 0x99, 0xfe, 0x50, 0x2c, 0xa3, 0xae, 0xda, 0x80, 0xcc, 0x26, 0xdd, 0x4f, 0xa3, 0x29, - 0xfe, 0x48, 0xcc, 0x26, 0xd5, 0x27, 0x66, 0x74, 0x67, 0xdb, 0x68, 0x8e, 0x3f, 0x16, 0x66, 0x74, - 0x25, 0xdb, 0xe2, 0x3a, 0xa0, 0xde, 0x4c, 0x1b, 0xcd, 0xf7, 0x45, 0xce, 0x37, 0xde, 0x93, 0x68, - 0x8b, 0x97, 0xe1, 0x50, 0xff, 0x2c, 0x1b, 0xcd, 0xfa, 0xa5, 0x77, 0xba, 0xce, 0x45, 0xe1, 0x24, - 0x5b, 0xdc, 0x6c, 0x6f, 0xd7, 0xe1, 0x0c, 0x1b, 0x4d, 0xfb, 0xe2, 0x3b, 0x9d, 0x3b, 0x76, 0x38, - 0xc1, 0x16, 0x17, 0x00, 0xda, 0xc9, 0x2d, 0x9a, 0xeb, 0x25, 0xce, 0x15, 0x02, 0x91, 0xa5, 0xc1, - 0x73, 0x5b, 0x34, 0xfe, 0xcb, 0x62, 0x69, 0x70, 0x04, 0x59, 0x1a, 0x22, 0xad, 0x45, 0xa3, 0x5f, - 0x16, 0x4b, 0x43, 0x40, 0x48, 0x64, 0x87, 0x32, 0x47, 0x34, 0xc3, 0x57, 0x44, 0x64, 0x87, 0x50, - 0xc5, 0x0b, 0x90, 0xb2, 0x9a, 0xa6, 0x49, 0x02, 0x14, 0xdd, 0xfb, 0x03, 0xb1, 0xfc, 0x4f, 0xdf, - 0xe3, 0x16, 0x08, 0x40, 0xf1, 0x34, 0x24, 0x71, 0x63, 0x1b, 0xd7, 0xa2, 0x90, 0xff, 0xf1, 0x9e, - 0xd8, 0x94, 0x88, 0x76, 0xf1, 0x19, 0x00, 0x76, 0xb4, 0xa7, 0xaf, 0xad, 0x22, 0xb0, 0xff, 0xf9, - 0x1e, 0xff, 0x74, 0xa3, 0x0d, 0x69, 0x13, 0xb0, 0x0f, 0x41, 0xee, 0x4d, 0xf0, 0x56, 0x27, 0x01, - 0x1d, 0xf5, 0x79, 0x18, 0xb9, 0xea, 0xd9, 0x96, 0xaf, 0xd5, 0xa3, 0xd0, 0xff, 0xc5, 0xd1, 0x42, - 0x9f, 0x38, 0xac, 0x61, 0xbb, 0xd8, 0xd7, 0xea, 0x5e, 0x14, 0xf6, 0xbf, 0x39, 0x36, 0x00, 0x10, - 0xb0, 0xae, 0x79, 0xfe, 0x20, 0xe3, 0xfe, 0x99, 0x00, 0x0b, 0x00, 0x31, 0x9a, 0xfc, 0xbe, 0x86, - 0x5b, 0x51, 0xd8, 0xb7, 0x85, 0xd1, 0x5c, 0xbf, 0xf8, 0x09, 0x48, 0x93, 0x9f, 0xec, 0x7b, 0xac, - 0x08, 0xf0, 0xff, 0x70, 0x70, 0x1b, 0x41, 0x7a, 0xf6, 0xfc, 0x9a, 0x6f, 0x44, 0x3b, 0xfb, 0x7f, - 0xf9, 0x4c, 0x0b, 0xfd, 0xe2, 0x02, 0x64, 0x3c, 0xbf, 0x56, 0x6b, 0xf2, 0xfa, 0x2a, 0x02, 0xfe, - 0x7f, 0xef, 0x05, 0x47, 0xee, 0x00, 0x53, 0x2a, 0xf7, 0xbf, 0x3d, 0x84, 0x65, 0x7b, 0xd9, 0x66, - 0xf7, 0x86, 0xcf, 0xcd, 0x46, 0x5f, 0x00, 0xc2, 0x37, 0xc6, 0x60, 0x4a, 0xb7, 0x1b, 0xdb, 0xb6, - 0x77, 0x7c, 0xdb, 0xf6, 0x77, 0x8f, 0x0b, 0xbf, 0xf2, 0x4b, 0xc1, 0xc0, 0xcf, 0x53, 0x07, 0xbb, - 0x4d, 0x9c, 0xfd, 0xe9, 0x28, 0xa4, 0x16, 0x35, 0xcf, 0xd7, 0x6e, 0x68, 0x2d, 0xf4, 0x08, 0xa4, - 0x2a, 0x96, 0x7f, 0xf2, 0xc4, 0xba, 0xef, 0xd2, 0x17, 0x62, 0xf1, 0x52, 0xfa, 0xee, 0xed, 0xe9, - 0xa4, 0x41, 0x64, 0x4a, 0xd0, 0x84, 0x8e, 0x41, 0x92, 0xfe, 0xa6, 0x77, 0xaa, 0xf1, 0xd2, 0xe8, - 0xab, 0xb7, 0xa7, 0x87, 0xda, 0x7a, 0xac, 0x0d, 0x5d, 0x81, 0x4c, 0xb5, 0xb5, 0x65, 0x58, 0xfe, - 0x99, 0x53, 0x84, 0x8e, 0x78, 0x26, 0x51, 0x3a, 0x7b, 0xf7, 0xf6, 0xf4, 0xc9, 0x7d, 0x0d, 0x24, - 0x49, 0xb7, 0x3d, 0x30, 0x81, 0xa6, 0x1f, 0xac, 0x86, 0xb9, 0xd0, 0x65, 0x48, 0x89, 0x47, 0xf6, - 0x6e, 0xa2, 0x74, 0x81, 0x9b, 0x70, 0x5f, 0xdc, 0x01, 0x19, 0xfa, 0x25, 0xc8, 0x56, 0x5b, 0x17, - 0x4d, 0x5b, 0xe3, 0x3e, 0x48, 0xce, 0x48, 0x73, 0xb1, 0xd2, 0xb9, 0xbb, 0xb7, 0xa7, 0x4f, 0x0d, - 0x4c, 0xcc, 0xe1, 0x94, 0xb9, 0x83, 0x0d, 0x3d, 0x07, 0xe9, 0xe0, 0x99, 0xbe, 0xfd, 0x88, 0x95, - 0x3e, 0xce, 0xed, 0xbe, 0x3f, 0xfa, 0x36, 0x5d, 0xc8, 0x72, 0xe6, 0xee, 0x91, 0x19, 0x69, 0x4e, - 0xba, 0x1f, 0xcb, 0xb9, 0x4f, 0x3a, 0xd8, 0x42, 0x96, 0x9f, 0x39, 0x45, 0x5f, 0xb7, 0x48, 0xf7, - 0x6b, 0x39, 0xa7, 0x6f, 0xd3, 0xa1, 0x4b, 0x30, 0x52, 0x6d, 0x95, 0x5a, 0x3e, 0xf6, 0xe8, 0x77, - 0x50, 0xd9, 0xd2, 0x53, 0x77, 0x6f, 0x4f, 0x7f, 0x74, 0x40, 0x56, 0x8a, 0x53, 0x04, 0x01, 0x9a, - 0x81, 0xcc, 0xaa, 0xed, 0x36, 0x34, 0x93, 0xf1, 0x01, 0x7b, 0x7d, 0x14, 0x12, 0xa1, 0x2d, 0x32, - 0x12, 0x36, 0xdb, 0x1e, 0xfd, 0x17, 0x9a, 0x9f, 0x23, 0x26, 0xdb, 0x4c, 0xc8, 0x80, 0x64, 0xb5, - 0x55, 0xd5, 0x9c, 0x7c, 0x96, 0xbe, 0xdb, 0x78, 0x68, 0x3e, 0x40, 0x88, 0xb5, 0x35, 0x4f, 0xdb, - 0xe9, 0x47, 0x20, 0xa5, 0x53, 0x77, 0x6f, 0x4f, 0x3f, 0x35, 0x70, 0x8f, 0x55, 0xcd, 0xa1, 0xdd, - 0xb1, 0x1e, 0xd0, 0x77, 0x24, 0xb2, 0xb0, 0xd8, 0xe5, 0x30, 0xe9, 0x71, 0x94, 0xf6, 0x78, 0xac, - 0x6f, 0x8f, 0x81, 0x16, 0xeb, 0xd7, 0xfa, 0xdc, 0x6b, 0x07, 0x18, 0x29, 0x3b, 0x37, 0x91, 0xae, - 0x7f, 0xf3, 0xb5, 0xfb, 0x5e, 0xb4, 0x81, 0x05, 0xe8, 0x05, 0x09, 0x46, 0xab, 0xad, 0x55, 0x9e, - 0x7c, 0x89, 0xe5, 0x39, 0xfe, 0x8f, 0x16, 0xfd, 0x2c, 0x0f, 0xe9, 0x31, 0xdb, 0xcf, 0x7c, 0xee, - 0xb5, 0xe9, 0x13, 0x03, 0x1b, 0x41, 0xb7, 0x20, 0x6a, 0x43, 0x67, 0x9f, 0xe8, 0xf3, 0xd4, 0x8a, - 0x32, 0x49, 0xe4, 0x35, 0x5c, 0x23, 0x56, 0x8c, 0xdd, 0xc3, 0x8a, 0x90, 0x1e, 0xb3, 0xa2, 0x48, - 0xa2, 0xfe, 0xfe, 0x2d, 0x09, 0xf1, 0xa1, 0x35, 0x18, 0x66, 0x1e, 0xa6, 0xdf, 0xe0, 0xa5, 0x0f, - 0x18, 0x86, 0xed, 0xc9, 0x51, 0x38, 0xcd, 0xd4, 0x39, 0x80, 0x76, 0x8c, 0x21, 0x19, 0xe2, 0xd7, - 0x70, 0x8b, 0x7f, 0x68, 0x49, 0x7e, 0xa2, 0xc9, 0xf6, 0x97, 0xd0, 0xd2, 0x5c, 0x82, 0x7f, 0xde, - 0x5c, 0x8c, 0x9d, 0x93, 0xa6, 0x9e, 0x06, 0xb9, 0x3b, 0x56, 0x0e, 0x84, 0x57, 0x00, 0xf5, 0xce, - 0x58, 0x98, 0x21, 0xc9, 0x18, 0x1e, 0x0d, 0x33, 0x64, 0x4e, 0xc8, 0x6d, 0x9f, 0x5f, 0x36, 0x4c, - 0xcf, 0xb6, 0x7a, 0x38, 0xbb, 0xfd, 0xff, 0xf3, 0x71, 0xce, 0x16, 0x60, 0x98, 0x09, 0xc9, 0x58, - 0x2a, 0x34, 0x7d, 0xd0, 0x2c, 0xa7, 0xb0, 0x87, 0xd2, 0xca, 0xab, 0x77, 0x0a, 0x43, 0x3f, 0xba, - 0x53, 0x18, 0xfa, 0xd7, 0x3b, 0x85, 0xa1, 0xd7, 0xef, 0x14, 0xa4, 0x37, 0xef, 0x14, 0xa4, 0xb7, - 0xef, 0x14, 0xa4, 0x77, 0xef, 0x14, 0xa4, 0x5b, 0x7b, 0x05, 0xe9, 0x6b, 0x7b, 0x05, 0xe9, 0x9b, - 0x7b, 0x05, 0xe9, 0x7b, 0x7b, 0x05, 0xe9, 0x07, 0x7b, 0x05, 0xe9, 0xd5, 0xbd, 0x82, 0xf4, 0xa3, - 0xbd, 0x82, 0xf4, 0xfa, 0x5e, 0x41, 0x7a, 0x73, 0xaf, 0x30, 0xf4, 0xf6, 0x5e, 0x41, 0x7a, 0x77, - 0xaf, 0x30, 0x74, 0xeb, 0x27, 0x85, 0xa1, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x93, 0x6f, 0x45, - 0x6a, 0xcc, 0x38, 0x00, 0x00, + 0xa1, 0xe9, 0x83, 0x1a, 0xb7, 0xcd, 0xa4, 0x9d, 0xfe, 0x77, 0xa6, 0x89, 0xeb, 0xb8, 0x4d, 0x3a, + 0x8d, 0xd3, 0xf4, 0x27, 0x49, 0xd3, 0xa4, 0x49, 0xfa, 0x92, 0x97, 0xb4, 0x7e, 0xea, 0x24, 0x6f, + 0x7d, 0xe8, 0xc8, 0x16, 0xe3, 0x99, 0x3a, 0xad, 0xdb, 0xb8, 0xad, 0x1e, 0x3c, 0xf2, 0x4b, 0xe7, + 0xfe, 0x2d, 0x16, 0x3f, 0xd4, 0x82, 0xca, 0xd8, 0x79, 0x22, 0xf6, 0xdc, 0xf3, 0x7d, 0xf7, 0xdc, + 0x73, 0xcf, 0xbd, 0xe7, 0xdc, 0xbb, 0x4b, 0xf8, 0xe9, 0x39, 0x98, 0xa9, 0xdb, 0x76, 0xdd, 0xc4, + 0xc7, 0x1c, 0xd7, 0xf6, 0xed, 0xed, 0xe6, 0xce, 0xb1, 0x1a, 0xf6, 0x74, 0xd7, 0x70, 0x7c, 0xdb, + 0x9d, 0xa7, 0x32, 0x34, 0xc6, 0x34, 0xe6, 0x85, 0xc6, 0x6c, 0x15, 0xc6, 0x2f, 0x18, 0x26, 0x5e, + 0x0a, 0x14, 0x37, 0xb0, 0x8f, 0xce, 0x42, 0x62, 0xc7, 0x30, 0x71, 0x5e, 0x9a, 0x89, 0xcf, 0x65, + 0x8e, 0x3f, 0x3c, 0xdf, 0x05, 0x9a, 0xef, 0x44, 0xac, 0x13, 0xb1, 0x42, 0x11, 0xb3, 0x6f, 0x24, + 0x60, 0xa2, 0x4f, 0x2b, 0x42, 0x90, 0xb0, 0xb4, 0x06, 0x61, 0x94, 0xe6, 0xd2, 0x0a, 0xfd, 0x8d, + 0xf2, 0x30, 0xe2, 0x68, 0xfa, 0x55, 0xad, 0x8e, 0xf3, 0x31, 0x2a, 0x16, 0x8f, 0xa8, 0x00, 0x50, + 0xc3, 0x0e, 0xb6, 0x6a, 0xd8, 0xd2, 0x5b, 0xf9, 0xf8, 0x4c, 0x7c, 0x2e, 0xad, 0x84, 0x24, 0xe8, + 0x49, 0x18, 0x77, 0x9a, 0xdb, 0xa6, 0xa1, 0xab, 0x21, 0x35, 0x98, 0x89, 0xcf, 0x25, 0x15, 0x99, + 0x35, 0x2c, 0xb5, 0x95, 0x1f, 0x83, 0xb1, 0xeb, 0x58, 0xbb, 0x1a, 0x56, 0xcd, 0x50, 0xd5, 0x1c, + 0x11, 0x87, 0x14, 0x17, 0x21, 0xdb, 0xc0, 0x9e, 0xa7, 0xd5, 0xb1, 0xea, 0xb7, 0x1c, 0x9c, 0x4f, + 0xd0, 0xd1, 0xcf, 0xf4, 0x8c, 0xbe, 0x7b, 0xe4, 0x19, 0x8e, 0xda, 0x6c, 0x39, 0x18, 0x2d, 0x40, + 0x1a, 0x5b, 0xcd, 0x06, 0x63, 0x48, 0xee, 0xe3, 0xbf, 0xb2, 0xd5, 0x6c, 0x74, 0xb3, 0xa4, 0x08, + 0x8c, 0x53, 0x8c, 0x78, 0xd8, 0xbd, 0x66, 0xe8, 0x38, 0x3f, 0x4c, 0x09, 0x1e, 0xeb, 0x21, 0xd8, + 0x60, 0xed, 0xdd, 0x1c, 0x02, 0x87, 0x16, 0x21, 0x8d, 0x9f, 0xf7, 0xb1, 0xe5, 0x19, 0xb6, 0x95, + 0x1f, 0xa1, 0x24, 0x8f, 0xf4, 0x99, 0x45, 0x6c, 0xd6, 0xba, 0x29, 0xda, 0x38, 0x74, 0x1a, 0x46, + 0x6c, 0xc7, 0x37, 0x6c, 0xcb, 0xcb, 0xa7, 0x66, 0xa4, 0xb9, 0xcc, 0xf1, 0x0f, 0xf6, 0x0d, 0x84, + 0x35, 0xa6, 0xa3, 0x08, 0x65, 0x54, 0x01, 0xd9, 0xb3, 0x9b, 0xae, 0x8e, 0x55, 0xdd, 0xae, 0x61, + 0xd5, 0xb0, 0x76, 0xec, 0x7c, 0x9a, 0x12, 0x4c, 0xf7, 0x0e, 0x84, 0x2a, 0x2e, 0xda, 0x35, 0x5c, + 0xb1, 0x76, 0x6c, 0x25, 0xe7, 0x75, 0x3c, 0xa3, 0x43, 0x30, 0xec, 0xb5, 0x2c, 0x5f, 0x7b, 0x3e, + 0x9f, 0xa5, 0x11, 0xc2, 0x9f, 0x66, 0xbf, 0x3b, 0x0c, 0x63, 0x83, 0x84, 0xd8, 0x79, 0x48, 0xee, + 0x90, 0x51, 0xe6, 0x63, 0x07, 0xf1, 0x01, 0xc3, 0x74, 0x3a, 0x71, 0xf8, 0x3e, 0x9d, 0xb8, 0x00, + 0x19, 0x0b, 0x7b, 0x3e, 0xae, 0xb1, 0x88, 0x88, 0x0f, 0x18, 0x53, 0xc0, 0x40, 0xbd, 0x21, 0x95, + 0xb8, 0xaf, 0x90, 0x7a, 0x16, 0xc6, 0x02, 0x93, 0x54, 0x57, 0xb3, 0xea, 0x22, 0x36, 0x8f, 0x45, + 0x59, 0x32, 0x5f, 0x16, 0x38, 0x85, 0xc0, 0x94, 0x1c, 0xee, 0x78, 0x46, 0x4b, 0x00, 0xb6, 0x85, + 0xed, 0x1d, 0xb5, 0x86, 0x75, 0x33, 0x9f, 0xda, 0xc7, 0x4b, 0x6b, 0x44, 0xa5, 0xc7, 0x4b, 0x36, + 0x93, 0xea, 0x26, 0x3a, 0xd7, 0x0e, 0xb5, 0x91, 0x7d, 0x22, 0xa5, 0xca, 0x16, 0x59, 0x4f, 0xb4, + 0x6d, 0x41, 0xce, 0xc5, 0x24, 0xee, 0x71, 0x8d, 0x8f, 0x2c, 0x4d, 0x8d, 0x98, 0x8f, 0x1c, 0x99, + 0xc2, 0x61, 0x6c, 0x60, 0xa3, 0x6e, 0xf8, 0x11, 0x1d, 0x85, 0x40, 0xa0, 0xd2, 0xb0, 0x02, 0xba, + 0x0b, 0x65, 0x85, 0x70, 0x55, 0x6b, 0xe0, 0xa9, 0x1b, 0x90, 0xeb, 0x74, 0x0f, 0x9a, 0x84, 0xa4, + 0xe7, 0x6b, 0xae, 0x4f, 0xa3, 0x30, 0xa9, 0xb0, 0x07, 0x24, 0x43, 0x1c, 0x5b, 0x35, 0xba, 0xcb, + 0x25, 0x15, 0xf2, 0x13, 0xfd, 0x42, 0x7b, 0xc0, 0x71, 0x3a, 0xe0, 0x47, 0x7b, 0x67, 0xb4, 0x83, + 0xb9, 0x7b, 0xdc, 0x53, 0x67, 0x60, 0xb4, 0x63, 0x00, 0x83, 0x76, 0x3d, 0xfb, 0x2b, 0xf0, 0x40, + 0x5f, 0x6a, 0xf4, 0x2c, 0x4c, 0x36, 0x2d, 0xc3, 0xf2, 0xb1, 0xeb, 0xb8, 0x98, 0x44, 0x2c, 0xeb, + 0x2a, 0xff, 0xef, 0x23, 0xfb, 0xc4, 0xdc, 0x56, 0x58, 0x9b, 0xb1, 0x28, 0x13, 0xcd, 0x5e, 0xe1, + 0x13, 0xe9, 0xd4, 0x9b, 0x23, 0xf2, 0xcd, 0x9b, 0x37, 0x6f, 0xc6, 0x66, 0x3f, 0x37, 0x0c, 0x93, + 0xfd, 0xd6, 0x4c, 0xdf, 0xe5, 0x7b, 0x08, 0x86, 0xad, 0x66, 0x63, 0x1b, 0xbb, 0xd4, 0x49, 0x49, + 0x85, 0x3f, 0xa1, 0x05, 0x48, 0x9a, 0xda, 0x36, 0x36, 0xf3, 0x89, 0x19, 0x69, 0x2e, 0x77, 0xfc, + 0xc9, 0x81, 0x56, 0xe5, 0xfc, 0x0a, 0x81, 0x28, 0x0c, 0x89, 0x9e, 0x86, 0x04, 0xdf, 0xa2, 0x09, + 0xc3, 0x13, 0x83, 0x31, 0x90, 0xb5, 0xa4, 0x50, 0x1c, 0xfa, 0x00, 0xa4, 0xc9, 0x5f, 0x16, 0x1b, + 0xc3, 0xd4, 0xe6, 0x14, 0x11, 0x90, 0xb8, 0x40, 0x53, 0x90, 0xa2, 0xcb, 0xa4, 0x86, 0x45, 0x6a, + 0x0b, 0x9e, 0x49, 0x60, 0xd5, 0xf0, 0x8e, 0xd6, 0x34, 0x7d, 0xf5, 0x9a, 0x66, 0x36, 0x31, 0x0d, + 0xf8, 0xb4, 0x92, 0xe5, 0xc2, 0x4f, 0x10, 0x19, 0x9a, 0x86, 0x0c, 0x5b, 0x55, 0x86, 0x55, 0xc3, + 0xcf, 0xd3, 0xdd, 0x33, 0xa9, 0xb0, 0x85, 0x56, 0x21, 0x12, 0xd2, 0xfd, 0x15, 0xcf, 0xb6, 0x44, + 0x68, 0xd2, 0x2e, 0x88, 0x80, 0x76, 0x7f, 0xa6, 0x7b, 0xe3, 0x7e, 0xa8, 0xff, 0xf0, 0xba, 0x63, + 0x6a, 0xf6, 0xdb, 0x31, 0x48, 0xd0, 0xfd, 0x62, 0x0c, 0x32, 0x9b, 0x97, 0xd7, 0xcb, 0xea, 0xd2, + 0xda, 0x56, 0x69, 0xa5, 0x2c, 0x4b, 0x28, 0x07, 0x40, 0x05, 0x17, 0x56, 0xd6, 0x16, 0x36, 0xe5, + 0x58, 0xf0, 0x5c, 0x59, 0xdd, 0x3c, 0x7d, 0x52, 0x8e, 0x07, 0x80, 0x2d, 0x26, 0x48, 0x84, 0x15, + 0x4e, 0x1c, 0x97, 0x93, 0x48, 0x86, 0x2c, 0x23, 0xa8, 0x3c, 0x5b, 0x5e, 0x3a, 0x7d, 0x52, 0x1e, + 0xee, 0x94, 0x9c, 0x38, 0x2e, 0x8f, 0xa0, 0x51, 0x48, 0x53, 0x49, 0x69, 0x6d, 0x6d, 0x45, 0x4e, + 0x05, 0x9c, 0x1b, 0x9b, 0x4a, 0x65, 0x75, 0x59, 0x4e, 0x07, 0x9c, 0xcb, 0xca, 0xda, 0xd6, 0xba, + 0x0c, 0x01, 0x43, 0xb5, 0xbc, 0xb1, 0xb1, 0xb0, 0x5c, 0x96, 0x33, 0x81, 0x46, 0xe9, 0xf2, 0x66, + 0x79, 0x43, 0xce, 0x76, 0x98, 0x75, 0xe2, 0xb8, 0x3c, 0x1a, 0x74, 0x51, 0x5e, 0xdd, 0xaa, 0xca, + 0x39, 0x34, 0x0e, 0xa3, 0xac, 0x0b, 0x61, 0xc4, 0x58, 0x97, 0xe8, 0xf4, 0x49, 0x59, 0x6e, 0x1b, + 0xc2, 0x58, 0xc6, 0x3b, 0x04, 0xa7, 0x4f, 0xca, 0x68, 0x76, 0x11, 0x92, 0x34, 0xba, 0x10, 0x82, + 0xdc, 0xca, 0x42, 0xa9, 0xbc, 0xa2, 0xae, 0xad, 0x6f, 0x56, 0xd6, 0x56, 0x17, 0x56, 0x64, 0xa9, + 0x2d, 0x53, 0xca, 0x1f, 0xdf, 0xaa, 0x28, 0xe5, 0x25, 0x39, 0x16, 0x96, 0xad, 0x97, 0x17, 0x36, + 0xcb, 0x4b, 0x72, 0x7c, 0x56, 0x87, 0xc9, 0x7e, 0xfb, 0x64, 0xdf, 0x95, 0x11, 0x9a, 0xe2, 0xd8, + 0x3e, 0x53, 0x4c, 0xb9, 0x7a, 0xa6, 0xf8, 0xc7, 0x31, 0x98, 0xe8, 0x93, 0x2b, 0xfa, 0x76, 0xf2, + 0x0c, 0x24, 0x59, 0x88, 0xb2, 0xec, 0xf9, 0x78, 0xdf, 0xa4, 0x43, 0x03, 0xb6, 0x27, 0x83, 0x52, + 0x5c, 0xb8, 0x82, 0x88, 0xef, 0x53, 0x41, 0x10, 0x8a, 0x9e, 0x3d, 0xfd, 0x97, 0x7b, 0xf6, 0x74, + 0x96, 0xf6, 0x4e, 0x0f, 0x92, 0xf6, 0xa8, 0xec, 0x60, 0x7b, 0x7b, 0xb2, 0xcf, 0xde, 0x7e, 0x1e, + 0xc6, 0x7b, 0x88, 0x06, 0xde, 0x63, 0x5f, 0x90, 0x20, 0xbf, 0x9f, 0x73, 0x22, 0x76, 0xba, 0x58, + 0xc7, 0x4e, 0x77, 0xbe, 0xdb, 0x83, 0x47, 0xf6, 0x9f, 0x84, 0x9e, 0xb9, 0x7e, 0x45, 0x82, 0x43, + 0xfd, 0x2b, 0xc5, 0xbe, 0x36, 0x3c, 0x0d, 0xc3, 0x0d, 0xec, 0xef, 0xda, 0xa2, 0x5a, 0x7a, 0xb4, + 0x4f, 0x0e, 0x26, 0xcd, 0xdd, 0x93, 0xcd, 0x51, 0xe1, 0x24, 0x1e, 0xdf, 0xaf, 0xdc, 0x63, 0xd6, + 0xf4, 0x58, 0xfa, 0xd9, 0x18, 0x3c, 0xd0, 0x97, 0xbc, 0xaf, 0xa1, 0x0f, 0x01, 0x18, 0x96, 0xd3, + 0xf4, 0x59, 0x45, 0xc4, 0x36, 0xd8, 0x34, 0x95, 0xd0, 0xcd, 0x8b, 0x6c, 0x9e, 0x4d, 0x3f, 0x68, + 0x8f, 0xd3, 0x76, 0x60, 0x22, 0xaa, 0x70, 0xb6, 0x6d, 0x68, 0x82, 0x1a, 0x5a, 0xd8, 0x67, 0xa4, + 0x3d, 0x81, 0xf9, 0x14, 0xc8, 0xba, 0x69, 0x60, 0xcb, 0x57, 0x3d, 0xdf, 0xc5, 0x5a, 0xc3, 0xb0, + 0xea, 0x34, 0x83, 0xa4, 0x8a, 0xc9, 0x1d, 0xcd, 0xf4, 0xb0, 0x32, 0xc6, 0x9a, 0x37, 0x44, 0x2b, + 0x41, 0xd0, 0x00, 0x72, 0x43, 0x88, 0xe1, 0x0e, 0x04, 0x6b, 0x0e, 0x10, 0xb3, 0xdf, 0x4c, 0x41, + 0x26, 0x54, 0x57, 0xa3, 0x23, 0x90, 0xbd, 0xa2, 0x5d, 0xd3, 0x54, 0x71, 0x56, 0x62, 0x9e, 0xc8, + 0x10, 0xd9, 0x3a, 0x3f, 0x2f, 0x3d, 0x05, 0x93, 0x54, 0xc5, 0x6e, 0xfa, 0xd8, 0x55, 0x75, 0x53, + 0xf3, 0x3c, 0xea, 0xb4, 0x14, 0x55, 0x45, 0xa4, 0x6d, 0x8d, 0x34, 0x2d, 0x8a, 0x16, 0x74, 0x0a, + 0x26, 0x28, 0xa2, 0xd1, 0x34, 0x7d, 0xc3, 0x31, 0xb1, 0x4a, 0x4e, 0x6f, 0x1e, 0xcd, 0x24, 0x81, + 0x65, 0xe3, 0x44, 0xa3, 0xca, 0x15, 0x88, 0x45, 0x1e, 0x5a, 0x82, 0x87, 0x28, 0xac, 0x8e, 0x2d, + 0xec, 0x6a, 0x3e, 0x56, 0xf1, 0xa7, 0x9a, 0x9a, 0xe9, 0xa9, 0x9a, 0x55, 0x53, 0x77, 0x35, 0x6f, + 0x37, 0x3f, 0x49, 0x08, 0x4a, 0xb1, 0xbc, 0xa4, 0x1c, 0x26, 0x8a, 0xcb, 0x5c, 0xaf, 0x4c, 0xd5, + 0x16, 0xac, 0xda, 0xc7, 0x34, 0x6f, 0x17, 0x15, 0xe1, 0x10, 0x65, 0xf1, 0x7c, 0xd7, 0xb0, 0xea, + 0xaa, 0xbe, 0x8b, 0xf5, 0xab, 0x6a, 0xd3, 0xdf, 0x39, 0x9b, 0xff, 0x40, 0xb8, 0x7f, 0x6a, 0xe1, + 0x06, 0xd5, 0x59, 0x24, 0x2a, 0x5b, 0xfe, 0xce, 0x59, 0xb4, 0x01, 0x59, 0x32, 0x19, 0x0d, 0xe3, + 0x06, 0x56, 0x77, 0x6c, 0x97, 0xa6, 0xc6, 0x5c, 0x9f, 0xad, 0x29, 0xe4, 0xc1, 0xf9, 0x35, 0x0e, + 0xa8, 0xda, 0x35, 0x5c, 0x4c, 0x6e, 0xac, 0x97, 0xcb, 0x4b, 0x4a, 0x46, 0xb0, 0x5c, 0xb0, 0x5d, + 0x12, 0x50, 0x75, 0x3b, 0x70, 0x70, 0x86, 0x05, 0x54, 0xdd, 0x16, 0xee, 0x3d, 0x05, 0x13, 0xba, + 0xce, 0xc6, 0x6c, 0xe8, 0x2a, 0x3f, 0x63, 0x79, 0x79, 0xb9, 0xc3, 0x59, 0xba, 0xbe, 0xcc, 0x14, + 0x78, 0x8c, 0x7b, 0xe8, 0x1c, 0x3c, 0xd0, 0x76, 0x56, 0x18, 0x38, 0xde, 0x33, 0xca, 0x6e, 0xe8, + 0x29, 0x98, 0x70, 0x5a, 0xbd, 0x40, 0xd4, 0xd1, 0xa3, 0xd3, 0xea, 0x86, 0x9d, 0x81, 0x49, 0x67, + 0xd7, 0xe9, 0xc5, 0x3d, 0x11, 0xc6, 0x21, 0x67, 0xd7, 0xe9, 0x06, 0x3e, 0x42, 0x0f, 0xdc, 0x2e, + 0xd6, 0x35, 0x1f, 0xd7, 0xf2, 0x0f, 0x86, 0xd5, 0x43, 0x0d, 0xe8, 0x18, 0xc8, 0xba, 0xae, 0x62, + 0x4b, 0xdb, 0x36, 0xb1, 0xaa, 0xb9, 0xd8, 0xd2, 0xbc, 0xfc, 0x74, 0x58, 0x39, 0xa7, 0xeb, 0x65, + 0xda, 0xba, 0x40, 0x1b, 0xd1, 0x13, 0x30, 0x6e, 0x6f, 0x5f, 0xd1, 0x59, 0x48, 0xaa, 0x8e, 0x8b, + 0x77, 0x8c, 0xe7, 0xf3, 0x0f, 0x53, 0xff, 0x8e, 0x91, 0x06, 0x1a, 0x90, 0xeb, 0x54, 0x8c, 0x1e, + 0x07, 0x59, 0xf7, 0x76, 0x35, 0xd7, 0xa1, 0x7b, 0xb2, 0xe7, 0x68, 0x3a, 0xce, 0x3f, 0xc2, 0x54, + 0x99, 0x7c, 0x55, 0x88, 0xc9, 0x92, 0xf0, 0xae, 0x1b, 0x3b, 0xbe, 0x60, 0x7c, 0x8c, 0x2d, 0x09, + 0x2a, 0xe3, 0x6c, 0x73, 0x20, 0x13, 0x57, 0x74, 0x74, 0x3c, 0x47, 0xd5, 0x72, 0xce, 0xae, 0x13, + 0xee, 0xf7, 0x28, 0x8c, 0x12, 0xcd, 0x76, 0xa7, 0x8f, 0xb3, 0x82, 0xcc, 0xd9, 0x0d, 0xf5, 0xf8, + 0x9e, 0xd5, 0xc6, 0xb3, 0x45, 0xc8, 0x86, 0xe3, 0x13, 0xa5, 0x81, 0x45, 0xa8, 0x2c, 0x91, 0x62, + 0x65, 0x71, 0x6d, 0x89, 0x94, 0x19, 0xcf, 0x95, 0xe5, 0x18, 0x29, 0x77, 0x56, 0x2a, 0x9b, 0x65, + 0x55, 0xd9, 0x5a, 0xdd, 0xac, 0x54, 0xcb, 0x72, 0x3c, 0x5c, 0x57, 0xff, 0x20, 0x06, 0xb9, 0xce, + 0x23, 0x12, 0xfa, 0x08, 0x3c, 0x28, 0xee, 0x33, 0x3c, 0xec, 0xab, 0xd7, 0x0d, 0x97, 0x2e, 0x99, + 0x86, 0xc6, 0xd2, 0x57, 0x30, 0x69, 0x93, 0x5c, 0x6b, 0x03, 0xfb, 0x97, 0x0c, 0x97, 0x2c, 0x88, + 0x86, 0xe6, 0xa3, 0x15, 0x98, 0xb6, 0x6c, 0xd5, 0xf3, 0x35, 0xab, 0xa6, 0xb9, 0x35, 0xb5, 0x7d, + 0x93, 0xa4, 0x6a, 0xba, 0x8e, 0x3d, 0xcf, 0x66, 0xa9, 0x2a, 0x60, 0xf9, 0xa0, 0x65, 0x6f, 0x70, + 0xe5, 0xf6, 0x1e, 0xbe, 0xc0, 0x55, 0xbb, 0x02, 0x2c, 0xbe, 0x5f, 0x80, 0x7d, 0x00, 0xd2, 0x0d, + 0xcd, 0x51, 0xb1, 0xe5, 0xbb, 0x2d, 0x5a, 0x18, 0xa7, 0x94, 0x54, 0x43, 0x73, 0xca, 0xe4, 0xf9, + 0xfd, 0x39, 0x9f, 0xfc, 0x5b, 0x1c, 0xb2, 0xe1, 0xe2, 0x98, 0x9c, 0x35, 0x74, 0x9a, 0x47, 0x24, + 0xba, 0xd3, 0x1c, 0xbd, 0x67, 0x29, 0x3d, 0xbf, 0x48, 0x12, 0x4c, 0x71, 0x98, 0x95, 0xac, 0x0a, + 0x43, 0x92, 0xe4, 0x4e, 0xf6, 0x16, 0xcc, 0x4a, 0x84, 0x94, 0xc2, 0x9f, 0xd0, 0x32, 0x0c, 0x5f, + 0xf1, 0x28, 0xf7, 0x30, 0xe5, 0x7e, 0xf8, 0xde, 0xdc, 0x17, 0x37, 0x28, 0x79, 0xfa, 0xe2, 0x86, + 0xba, 0xba, 0xa6, 0x54, 0x17, 0x56, 0x14, 0x0e, 0x47, 0x87, 0x21, 0x61, 0x6a, 0x37, 0x5a, 0x9d, + 0xa9, 0x88, 0x8a, 0x06, 0x75, 0xfc, 0x61, 0x48, 0x5c, 0xc7, 0xda, 0xd5, 0xce, 0x04, 0x40, 0x45, + 0xef, 0x61, 0xe8, 0x1f, 0x83, 0x24, 0xf5, 0x17, 0x02, 0xe0, 0x1e, 0x93, 0x87, 0x50, 0x0a, 0x12, + 0x8b, 0x6b, 0x0a, 0x09, 0x7f, 0x19, 0xb2, 0x4c, 0xaa, 0xae, 0x57, 0xca, 0x8b, 0x65, 0x39, 0x36, + 0x7b, 0x0a, 0x86, 0x99, 0x13, 0xc8, 0xd2, 0x08, 0xdc, 0x20, 0x0f, 0xf1, 0x47, 0xce, 0x21, 0x89, + 0xd6, 0xad, 0x6a, 0xa9, 0xac, 0xc8, 0xb1, 0xf0, 0xf4, 0x7a, 0x90, 0x0d, 0xd7, 0xc5, 0xef, 0x4f, + 0x4c, 0x7d, 0x4f, 0x82, 0x4c, 0xa8, 0xce, 0x25, 0x05, 0x8a, 0x66, 0x9a, 0xf6, 0x75, 0x55, 0x33, + 0x0d, 0xcd, 0xe3, 0x41, 0x01, 0x54, 0xb4, 0x40, 0x24, 0x83, 0x4e, 0xda, 0xfb, 0x62, 0xfc, 0xcb, + 0x12, 0xc8, 0xdd, 0x25, 0x66, 0x97, 0x81, 0xd2, 0xcf, 0xd5, 0xc0, 0x97, 0x24, 0xc8, 0x75, 0xd6, + 0x95, 0x5d, 0xe6, 0x1d, 0xf9, 0xb9, 0x9a, 0xf7, 0x7a, 0x0c, 0x46, 0x3b, 0xaa, 0xc9, 0x41, 0xad, + 0xfb, 0x14, 0x8c, 0x1b, 0x35, 0xdc, 0x70, 0x6c, 0x1f, 0x5b, 0x7a, 0x4b, 0x35, 0xf1, 0x35, 0x6c, + 0xe6, 0x67, 0xe9, 0x46, 0x71, 0xec, 0xde, 0xf5, 0xea, 0x7c, 0xa5, 0x8d, 0x5b, 0x21, 0xb0, 0xe2, + 0x44, 0x65, 0xa9, 0x5c, 0x5d, 0x5f, 0xdb, 0x2c, 0xaf, 0x2e, 0x5e, 0x56, 0xb7, 0x56, 0x7f, 0x71, + 0x75, 0xed, 0xd2, 0xaa, 0x22, 0x1b, 0x5d, 0x6a, 0xef, 0xe1, 0x52, 0x5f, 0x07, 0xb9, 0xdb, 0x28, + 0xf4, 0x20, 0xf4, 0x33, 0x4b, 0x1e, 0x42, 0x13, 0x30, 0xb6, 0xba, 0xa6, 0x6e, 0x54, 0x96, 0xca, + 0x6a, 0xf9, 0xc2, 0x85, 0xf2, 0xe2, 0xe6, 0x06, 0xbb, 0x81, 0x08, 0xb4, 0x37, 0x3b, 0x17, 0xf5, + 0x8b, 0x71, 0x98, 0xe8, 0x63, 0x09, 0x5a, 0xe0, 0x67, 0x07, 0x76, 0x9c, 0xf9, 0xf0, 0x20, 0xd6, + 0xcf, 0x93, 0x94, 0xbf, 0xae, 0xb9, 0x3e, 0x3f, 0x6a, 0x3c, 0x0e, 0xc4, 0x4b, 0x96, 0x6f, 0xec, + 0x18, 0xd8, 0xe5, 0x17, 0x36, 0xec, 0x40, 0x31, 0xd6, 0x96, 0xb3, 0x3b, 0x9b, 0x0f, 0x01, 0x72, + 0x6c, 0xcf, 0xf0, 0x8d, 0x6b, 0x58, 0x35, 0x2c, 0x71, 0xbb, 0x43, 0x0e, 0x18, 0x09, 0x45, 0x16, + 0x2d, 0x15, 0xcb, 0x0f, 0xb4, 0x2d, 0x5c, 0xd7, 0xba, 0xb4, 0xc9, 0x06, 0x1e, 0x57, 0x64, 0xd1, + 0x12, 0x68, 0x1f, 0x81, 0x6c, 0xcd, 0x6e, 0x92, 0xaa, 0x8b, 0xe9, 0x91, 0x7c, 0x21, 0x29, 0x19, + 0x26, 0x0b, 0x54, 0x78, 0x3d, 0xdd, 0xbe, 0x56, 0xca, 0x2a, 0x19, 0x26, 0x63, 0x2a, 0x8f, 0xc1, + 0x98, 0x56, 0xaf, 0xbb, 0x84, 0x5c, 0x10, 0xb1, 0x13, 0x42, 0x2e, 0x10, 0x53, 0xc5, 0xa9, 0x8b, + 0x90, 0x12, 0x7e, 0x20, 0x29, 0x99, 0x78, 0x42, 0x75, 0xd8, 0xb1, 0x37, 0x36, 0x97, 0x56, 0x52, + 0x96, 0x68, 0x3c, 0x02, 0x59, 0xc3, 0x53, 0xdb, 0xb7, 0xe4, 0xb1, 0x99, 0xd8, 0x5c, 0x4a, 0xc9, + 0x18, 0x5e, 0x70, 0xc3, 0x38, 0xfb, 0x4a, 0x0c, 0x72, 0x9d, 0xb7, 0xfc, 0x68, 0x09, 0x52, 0xa6, + 0xad, 0x6b, 0x34, 0xb4, 0xd8, 0x2b, 0xa6, 0xb9, 0x88, 0x17, 0x03, 0xf3, 0x2b, 0x5c, 0x5f, 0x09, + 0x90, 0x53, 0xff, 0x22, 0x41, 0x4a, 0x88, 0xd1, 0x21, 0x48, 0x38, 0x9a, 0xbf, 0x4b, 0xe9, 0x92, + 0xa5, 0x98, 0x2c, 0x29, 0xf4, 0x99, 0xc8, 0x3d, 0x47, 0xb3, 0x68, 0x08, 0x70, 0x39, 0x79, 0x26, + 0xf3, 0x6a, 0x62, 0xad, 0x46, 0x8f, 0x1f, 0x76, 0xa3, 0x81, 0x2d, 0xdf, 0x13, 0xf3, 0xca, 0xe5, + 0x8b, 0x5c, 0x8c, 0x9e, 0x84, 0x71, 0xdf, 0xd5, 0x0c, 0xb3, 0x43, 0x37, 0x41, 0x75, 0x65, 0xd1, + 0x10, 0x28, 0x17, 0xe1, 0xb0, 0xe0, 0xad, 0x61, 0x5f, 0xd3, 0x77, 0x71, 0xad, 0x0d, 0x1a, 0xa6, + 0xd7, 0x0c, 0x0f, 0x72, 0x85, 0x25, 0xde, 0x2e, 0xb0, 0xb3, 0x3f, 0x92, 0x60, 0x5c, 0x1c, 0x98, + 0x6a, 0x81, 0xb3, 0xaa, 0x00, 0x9a, 0x65, 0xd9, 0x7e, 0xd8, 0x5d, 0xbd, 0xa1, 0xdc, 0x83, 0x9b, + 0x5f, 0x08, 0x40, 0x4a, 0x88, 0x60, 0xaa, 0x01, 0xd0, 0x6e, 0xd9, 0xd7, 0x6d, 0xd3, 0x90, 0xe1, + 0xaf, 0x70, 0xe8, 0x7b, 0x40, 0x76, 0xc4, 0x06, 0x26, 0x22, 0x27, 0x2b, 0x34, 0x09, 0xc9, 0x6d, + 0x5c, 0x37, 0x2c, 0x7e, 0x31, 0xcb, 0x1e, 0xc4, 0x45, 0x48, 0x22, 0xb8, 0x08, 0x29, 0x7d, 0x12, + 0x26, 0x74, 0xbb, 0xd1, 0x6d, 0x6e, 0x49, 0xee, 0x3a, 0xe6, 0x7b, 0x1f, 0x93, 0x9e, 0x83, 0x76, + 0x89, 0xf9, 0x8e, 0x24, 0x7d, 0x29, 0x16, 0x5f, 0x5e, 0x2f, 0x7d, 0x35, 0x36, 0xb5, 0xcc, 0xa0, + 0xeb, 0x62, 0xa4, 0x0a, 0xde, 0x31, 0xb1, 0x4e, 0xac, 0x87, 0x2f, 0x3f, 0x09, 0x1f, 0xae, 0x1b, + 0xfe, 0x6e, 0x73, 0x7b, 0x5e, 0xb7, 0x1b, 0xc7, 0xea, 0x76, 0xdd, 0x6e, 0xbf, 0xfa, 0x24, 0x4f, + 0xf4, 0x81, 0xfe, 0xe2, 0xaf, 0x3f, 0xd3, 0x81, 0x74, 0x2a, 0xf2, 0x5d, 0x69, 0x71, 0x15, 0x26, + 0xb8, 0xb2, 0x4a, 0xdf, 0xbf, 0xb0, 0x53, 0x04, 0xba, 0xe7, 0x1d, 0x56, 0xfe, 0x1b, 0x6f, 0xd0, + 0x74, 0xad, 0x8c, 0x73, 0x28, 0x69, 0x63, 0x07, 0x8d, 0xa2, 0x02, 0x0f, 0x74, 0xf0, 0xb1, 0xa5, + 0x89, 0xdd, 0x08, 0xc6, 0x1f, 0x70, 0xc6, 0x89, 0x10, 0xe3, 0x06, 0x87, 0x16, 0x17, 0x61, 0xf4, + 0x20, 0x5c, 0xff, 0xc4, 0xb9, 0xb2, 0x38, 0x4c, 0xb2, 0x0c, 0x63, 0x94, 0x44, 0x6f, 0x7a, 0xbe, + 0xdd, 0xa0, 0xfb, 0xde, 0xbd, 0x69, 0xfe, 0xf9, 0x0d, 0xb6, 0x56, 0x72, 0x04, 0xb6, 0x18, 0xa0, + 0x8a, 0x45, 0xa0, 0xaf, 0x9c, 0x6a, 0x58, 0x37, 0x23, 0x18, 0x5e, 0xe5, 0x86, 0x04, 0xfa, 0xc5, + 0x4f, 0xc0, 0x24, 0xf9, 0x4d, 0xb7, 0xa5, 0xb0, 0x25, 0xd1, 0x17, 0x5e, 0xf9, 0x1f, 0xbd, 0xc0, + 0x96, 0xe3, 0x44, 0x40, 0x10, 0xb2, 0x29, 0x34, 0x8b, 0x75, 0xec, 0xfb, 0xd8, 0xf5, 0x54, 0xcd, + 0xec, 0x67, 0x5e, 0xe8, 0xc6, 0x20, 0xff, 0xf9, 0xb7, 0x3a, 0x67, 0x71, 0x99, 0x21, 0x17, 0x4c, + 0xb3, 0xb8, 0x05, 0x0f, 0xf6, 0x89, 0x8a, 0x01, 0x38, 0x5f, 0xe4, 0x9c, 0x93, 0x3d, 0x91, 0x41, + 0x68, 0xd7, 0x41, 0xc8, 0x83, 0xb9, 0x1c, 0x80, 0xf3, 0x4f, 0x38, 0x27, 0xe2, 0x58, 0x31, 0xa5, + 0x84, 0xf1, 0x22, 0x8c, 0x5f, 0xc3, 0xee, 0xb6, 0xed, 0xf1, 0x5b, 0x9a, 0x01, 0xe8, 0x5e, 0xe2, + 0x74, 0x63, 0x1c, 0x48, 0xaf, 0x6d, 0x08, 0xd7, 0x39, 0x48, 0xed, 0x68, 0x3a, 0x1e, 0x80, 0xe2, + 0x0b, 0x9c, 0x62, 0x84, 0xe8, 0x13, 0xe8, 0x02, 0x64, 0xeb, 0x36, 0xcf, 0x4c, 0xd1, 0xf0, 0x97, + 0x39, 0x3c, 0x23, 0x30, 0x9c, 0xc2, 0xb1, 0x9d, 0xa6, 0x49, 0xd2, 0x56, 0x34, 0xc5, 0x9f, 0x0a, + 0x0a, 0x81, 0xe1, 0x14, 0x07, 0x70, 0xeb, 0x9f, 0x09, 0x0a, 0x2f, 0xe4, 0xcf, 0x67, 0x20, 0x63, + 0x5b, 0x66, 0xcb, 0xb6, 0x06, 0x31, 0xe2, 0x8b, 0x9c, 0x01, 0x38, 0x84, 0x10, 0x9c, 0x87, 0xf4, + 0xa0, 0x13, 0xf1, 0x17, 0x6f, 0x89, 0xe5, 0x21, 0x66, 0x60, 0x19, 0xc6, 0xc4, 0x06, 0x65, 0xd8, + 0xd6, 0x00, 0x14, 0x5f, 0xe6, 0x14, 0xb9, 0x10, 0x8c, 0x0f, 0xc3, 0xc7, 0x9e, 0x5f, 0xc7, 0x83, + 0x90, 0xbc, 0x22, 0x86, 0xc1, 0x21, 0xdc, 0x95, 0xdb, 0xd8, 0xd2, 0x77, 0x07, 0x63, 0xf8, 0x8a, + 0x70, 0xa5, 0xc0, 0x10, 0x8a, 0x45, 0x18, 0x6d, 0x68, 0xae, 0xb7, 0xab, 0x99, 0x03, 0x4d, 0xc7, + 0x5f, 0x72, 0x8e, 0x6c, 0x00, 0xe2, 0x1e, 0x69, 0x5a, 0x07, 0xa1, 0xf9, 0xaa, 0xf0, 0x48, 0x08, + 0xc6, 0x97, 0x9e, 0xe7, 0xd3, 0x2b, 0xad, 0x83, 0xb0, 0xfd, 0x95, 0x58, 0x7a, 0x0c, 0x5b, 0x0d, + 0x33, 0x9e, 0x87, 0xb4, 0x67, 0xdc, 0x18, 0x88, 0xe6, 0xaf, 0xc5, 0x4c, 0x53, 0x00, 0x01, 0x5f, + 0x86, 0xc3, 0x7d, 0xd3, 0xc4, 0x00, 0x64, 0x7f, 0xc3, 0xc9, 0x0e, 0xf5, 0x49, 0x15, 0x7c, 0x4b, + 0x38, 0x28, 0xe5, 0xdf, 0x8a, 0x2d, 0x01, 0x77, 0x71, 0xad, 0x93, 0xb3, 0x82, 0xa7, 0xed, 0x1c, + 0xcc, 0x6b, 0x5f, 0x13, 0x5e, 0x63, 0xd8, 0x0e, 0xaf, 0x6d, 0xc2, 0x21, 0xce, 0x78, 0xb0, 0x79, + 0xfd, 0xba, 0xd8, 0x58, 0x19, 0x7a, 0xab, 0x73, 0x76, 0x3f, 0x09, 0x53, 0x81, 0x3b, 0x45, 0x51, + 0xea, 0xa9, 0x0d, 0xcd, 0x19, 0x80, 0xf9, 0x1b, 0x9c, 0x59, 0xec, 0xf8, 0x41, 0x55, 0xeb, 0x55, + 0x35, 0x87, 0x90, 0x3f, 0x0b, 0x79, 0x41, 0xde, 0xb4, 0x5c, 0xac, 0xdb, 0x75, 0xcb, 0xb8, 0x81, + 0x6b, 0x03, 0x50, 0xff, 0x5d, 0xd7, 0x54, 0x6d, 0x85, 0xe0, 0x84, 0xb9, 0x02, 0x72, 0x50, 0xab, + 0xa8, 0x46, 0xc3, 0xb1, 0x5d, 0x3f, 0x82, 0xf1, 0x9b, 0x62, 0xa6, 0x02, 0x5c, 0x85, 0xc2, 0x8a, + 0x65, 0xc8, 0xd1, 0xc7, 0x41, 0x43, 0xf2, 0xef, 0x39, 0xd1, 0x68, 0x1b, 0xc5, 0x37, 0x0e, 0xdd, + 0x6e, 0x38, 0x9a, 0x3b, 0xc8, 0xfe, 0xf7, 0x2d, 0xb1, 0x71, 0x70, 0x08, 0xdf, 0x38, 0xfc, 0x96, + 0x83, 0x49, 0xb6, 0x1f, 0x80, 0xe1, 0xdb, 0x62, 0xe3, 0x10, 0x18, 0x4e, 0x21, 0x0a, 0x86, 0x01, + 0x28, 0xfe, 0x41, 0x50, 0x08, 0x0c, 0xa1, 0xf8, 0x78, 0x3b, 0xd1, 0xba, 0xb8, 0x6e, 0x78, 0xbe, + 0xcb, 0x4a, 0xe1, 0x7b, 0x53, 0x7d, 0xe7, 0xad, 0xce, 0x22, 0x4c, 0x09, 0x41, 0xc9, 0x4e, 0xc4, + 0xaf, 0x50, 0xe9, 0x49, 0x29, 0xda, 0xb0, 0xef, 0x8a, 0x9d, 0x28, 0x04, 0x23, 0xb6, 0x85, 0x2a, + 0x44, 0xe2, 0x76, 0x9d, 0x9c, 0x0f, 0x06, 0xa0, 0xfb, 0x5e, 0x97, 0x71, 0x1b, 0x02, 0x4b, 0x38, + 0x43, 0xf5, 0x4f, 0xd3, 0xba, 0x8a, 0x5b, 0x03, 0x45, 0xe7, 0x3f, 0x76, 0xd5, 0x3f, 0x5b, 0x0c, + 0xc9, 0xf6, 0x90, 0xb1, 0xae, 0x7a, 0x0a, 0x45, 0x7d, 0xac, 0x93, 0xff, 0xd5, 0x3b, 0x7c, 0xbc, + 0x9d, 0xe5, 0x54, 0x71, 0x85, 0x04, 0x79, 0x67, 0xd1, 0x13, 0x4d, 0xf6, 0xc2, 0x9d, 0x20, 0xce, + 0x3b, 0x6a, 0x9e, 0xe2, 0x05, 0x18, 0xed, 0x28, 0x78, 0xa2, 0xa9, 0x7e, 0x8d, 0x53, 0x65, 0xc3, + 0xf5, 0x4e, 0xf1, 0x14, 0x24, 0x48, 0xf1, 0x12, 0x0d, 0xff, 0x75, 0x0e, 0xa7, 0xea, 0xc5, 0x8f, + 0x42, 0x4a, 0x14, 0x2d, 0xd1, 0xd0, 0xdf, 0xe0, 0xd0, 0x00, 0x42, 0xe0, 0xa2, 0x60, 0x89, 0x86, + 0x7f, 0x46, 0xc0, 0x05, 0x84, 0xc0, 0x07, 0x77, 0xe1, 0xf7, 0x7f, 0x2b, 0xc1, 0x93, 0x8e, 0xf0, + 0xdd, 0x79, 0x18, 0xe1, 0x95, 0x4a, 0x34, 0xfa, 0xb3, 0xbc, 0x73, 0x81, 0x28, 0x9e, 0x81, 0xe4, + 0x80, 0x0e, 0xff, 0x6d, 0x0e, 0x65, 0xfa, 0xc5, 0x45, 0xc8, 0x84, 0xaa, 0x93, 0x68, 0xf8, 0xef, + 0x70, 0x78, 0x18, 0x45, 0x4c, 0xe7, 0xd5, 0x49, 0x34, 0xc1, 0xef, 0x0a, 0xd3, 0x39, 0x82, 0xb8, + 0x4d, 0x14, 0x26, 0xd1, 0xe8, 0xdf, 0x13, 0x5e, 0x17, 0x90, 0xe2, 0x33, 0x90, 0x0e, 0x92, 0x4d, + 0x34, 0xfe, 0xf7, 0x39, 0xbe, 0x8d, 0x21, 0x1e, 0x08, 0x25, 0xbb, 0x68, 0x8a, 0x3f, 0x10, 0x1e, + 0x08, 0xa1, 0xc8, 0x32, 0xea, 0x2e, 0x60, 0xa2, 0x99, 0xfe, 0x50, 0x2c, 0xa3, 0xae, 0xfa, 0x85, + 0xcc, 0x26, 0xdd, 0xf3, 0xa3, 0x29, 0xfe, 0x48, 0xcc, 0x26, 0xd5, 0x27, 0x66, 0x74, 0x57, 0x04, + 0xd1, 0x1c, 0x7f, 0x2c, 0xcc, 0xe8, 0x2a, 0x08, 0x8a, 0xeb, 0x80, 0x7a, 0xab, 0x81, 0x68, 0xbe, + 0xcf, 0x71, 0xbe, 0xf1, 0x9e, 0x62, 0xa0, 0x78, 0x09, 0x0e, 0xf5, 0xaf, 0x04, 0xa2, 0x59, 0x3f, + 0x7f, 0xa7, 0xeb, 0xec, 0x16, 0x2e, 0x04, 0x8a, 0x9b, 0xed, 0x94, 0x12, 0xae, 0x02, 0xa2, 0x69, + 0x5f, 0xbc, 0xd3, 0xb9, 0x71, 0x87, 0x8b, 0x80, 0xe2, 0x02, 0x40, 0x3b, 0x01, 0x47, 0x73, 0xbd, + 0xc4, 0xb9, 0x42, 0x20, 0xb2, 0x34, 0x78, 0xfe, 0x8d, 0xc6, 0x7f, 0x41, 0x2c, 0x0d, 0x8e, 0x20, + 0x4b, 0x43, 0xa4, 0xde, 0x68, 0xf4, 0xcb, 0x62, 0x69, 0x08, 0x08, 0x89, 0xec, 0x50, 0x76, 0x8b, + 0x66, 0xf8, 0xa2, 0x88, 0xec, 0x10, 0xaa, 0xb8, 0x0a, 0xe3, 0x3d, 0x09, 0x31, 0x9a, 0xea, 0x4b, + 0x9c, 0x4a, 0xee, 0xce, 0x87, 0xe1, 0xe4, 0xc5, 0x93, 0x61, 0x34, 0xdb, 0x9f, 0x77, 0x25, 0x2f, + 0x9e, 0x0b, 0x8b, 0xe7, 0x21, 0x65, 0x35, 0x4d, 0x93, 0x2c, 0x1e, 0x74, 0xef, 0x0f, 0xec, 0xf2, + 0x3f, 0x79, 0x97, 0x7b, 0x47, 0x00, 0x8a, 0xa7, 0x20, 0x89, 0x1b, 0xdb, 0xb8, 0x16, 0x85, 0xfc, + 0x8f, 0x77, 0xc5, 0x86, 0x49, 0xb4, 0x8b, 0xcf, 0x00, 0xb0, 0xab, 0x11, 0xfa, 0xda, 0x2f, 0x02, + 0xfb, 0x9f, 0xef, 0xf2, 0x4f, 0x5f, 0xda, 0x90, 0x36, 0x01, 0xfb, 0x90, 0xe6, 0xde, 0x04, 0x6f, + 0x75, 0x12, 0xd0, 0x19, 0x39, 0x07, 0x23, 0x57, 0x3c, 0xdb, 0xf2, 0xb5, 0x7a, 0x14, 0xfa, 0xbf, + 0x38, 0x5a, 0xe8, 0x13, 0x87, 0x35, 0x6c, 0x17, 0xfb, 0x5a, 0xdd, 0x8b, 0xc2, 0xfe, 0x37, 0xc7, + 0x06, 0x00, 0x02, 0xd6, 0x35, 0xcf, 0x1f, 0x64, 0xdc, 0x3f, 0x15, 0x60, 0x01, 0x20, 0x46, 0x93, + 0xdf, 0x57, 0x71, 0x2b, 0x0a, 0xfb, 0xb6, 0x30, 0x9a, 0xeb, 0x17, 0x3f, 0x0a, 0x69, 0xf2, 0x93, + 0x7d, 0xcf, 0x16, 0x01, 0xfe, 0x1f, 0x0e, 0x6e, 0x23, 0x48, 0xcf, 0x9e, 0x5f, 0xf3, 0x8d, 0x68, + 0x67, 0xff, 0x2f, 0x9f, 0x69, 0xa1, 0x5f, 0x5c, 0x80, 0x8c, 0xe7, 0xd7, 0x6a, 0x4d, 0x5e, 0x9f, + 0x46, 0xc0, 0xff, 0xef, 0xdd, 0xe0, 0xca, 0x22, 0xc0, 0x90, 0xd9, 0xbe, 0x7e, 0xd5, 0x77, 0x6c, + 0xfa, 0x9a, 0x23, 0x8a, 0xe1, 0x0e, 0x67, 0x08, 0x41, 0x4a, 0xe5, 0xfe, 0xd7, 0xb7, 0xb0, 0x6c, + 0x2f, 0xdb, 0xec, 0xe2, 0xf6, 0xb9, 0xd9, 0xe8, 0x1b, 0x58, 0xf8, 0xda, 0x18, 0x4c, 0xe9, 0x76, + 0x63, 0xdb, 0xf6, 0x8e, 0x6d, 0xdb, 0xfe, 0xee, 0x31, 0x31, 0x31, 0xfc, 0x56, 0x36, 0x98, 0xa8, + 0xa9, 0x83, 0x5d, 0xe7, 0xce, 0xfe, 0x64, 0x14, 0x52, 0x8b, 0x9a, 0xe7, 0x6b, 0xd7, 0xb5, 0x16, + 0x7a, 0x04, 0x52, 0x15, 0xcb, 0x3f, 0x71, 0x7c, 0xdd, 0x77, 0xe9, 0x1b, 0xc9, 0x78, 0x29, 0x7d, + 0xf7, 0xd6, 0x74, 0xd2, 0x20, 0x32, 0x25, 0x68, 0x42, 0x47, 0x21, 0x49, 0x7f, 0xd3, 0x4b, 0xed, + 0x78, 0x69, 0xf4, 0xd5, 0x5b, 0xd3, 0x43, 0x6d, 0x3d, 0xd6, 0x86, 0x2e, 0x43, 0xa6, 0xda, 0xda, + 0x32, 0x2c, 0xff, 0xf4, 0x49, 0x42, 0x47, 0x1c, 0x93, 0x28, 0x9d, 0xb9, 0x7b, 0x6b, 0xfa, 0xc4, + 0xbe, 0x06, 0x92, 0x8a, 0xa2, 0x3d, 0x30, 0x81, 0xa6, 0x5f, 0x0c, 0x87, 0xb9, 0xd0, 0x25, 0x48, + 0x89, 0x47, 0xf6, 0x72, 0xa8, 0x74, 0x9e, 0x9b, 0x70, 0x5f, 0xdc, 0x01, 0x19, 0xfa, 0x25, 0xc8, + 0x56, 0x5b, 0x17, 0x4c, 0x5b, 0xe3, 0x3e, 0x48, 0xce, 0x48, 0x73, 0xb1, 0xd2, 0xd9, 0xbb, 0xb7, + 0xa6, 0x4f, 0x0e, 0x4c, 0xcc, 0xe1, 0x94, 0xb9, 0x83, 0x0d, 0x3d, 0x07, 0xe9, 0xe0, 0x99, 0xbe, + 0x7e, 0x8a, 0x95, 0x3e, 0xc2, 0xed, 0xbe, 0x3f, 0xfa, 0x36, 0x5d, 0xc8, 0x72, 0xe6, 0xee, 0x91, + 0x19, 0x69, 0x4e, 0xba, 0x1f, 0xcb, 0xb9, 0x4f, 0x3a, 0xd8, 0x42, 0x96, 0x9f, 0x3e, 0x49, 0xdf, + 0x77, 0x49, 0xf7, 0x6b, 0x39, 0xa7, 0x6f, 0xd3, 0xa1, 0x8b, 0x30, 0x52, 0x6d, 0x95, 0x5a, 0x3e, + 0xf6, 0xe8, 0x87, 0x68, 0xd9, 0xd2, 0x53, 0x77, 0x6f, 0x4d, 0x7f, 0x68, 0x40, 0x56, 0x8a, 0x53, + 0x04, 0x01, 0x9a, 0x81, 0xcc, 0xaa, 0xed, 0x36, 0x34, 0x93, 0xf1, 0x01, 0x7b, 0x7f, 0x17, 0x12, + 0xa1, 0x2d, 0x32, 0x12, 0x36, 0xdb, 0x1e, 0xfd, 0x1f, 0xa6, 0x9f, 0x21, 0x26, 0xdb, 0x4c, 0xc8, + 0x80, 0x64, 0xb5, 0x55, 0xd5, 0x9c, 0x7c, 0x96, 0xbe, 0x5c, 0x7a, 0x68, 0x3e, 0x40, 0x88, 0xb5, + 0x35, 0x4f, 0xdb, 0xe9, 0x57, 0x38, 0xa5, 0x93, 0x77, 0x6f, 0x4d, 0x3f, 0x35, 0x70, 0x8f, 0x55, + 0xcd, 0xa1, 0xdd, 0xb1, 0x1e, 0xd0, 0xb7, 0x24, 0xb2, 0xb0, 0xd8, 0xed, 0x3c, 0xe9, 0x71, 0x94, + 0xf6, 0x78, 0xb4, 0x6f, 0x8f, 0x81, 0x16, 0xeb, 0xd7, 0xfa, 0xf4, 0x6b, 0x07, 0x18, 0x29, 0x3b, + 0x14, 0x92, 0xae, 0x7f, 0xf3, 0xb5, 0xfb, 0x5e, 0xb4, 0x81, 0x05, 0xe8, 0x05, 0x09, 0x46, 0xab, + 0xad, 0x55, 0x9e, 0xbd, 0x89, 0xe5, 0x39, 0xfe, 0x9f, 0x2e, 0xfd, 0x2c, 0x0f, 0xe9, 0x31, 0xdb, + 0x4f, 0x7f, 0xfa, 0xb5, 0xe9, 0xe3, 0x03, 0x1b, 0x41, 0xb7, 0x20, 0x6a, 0x43, 0x67, 0x9f, 0xe8, + 0x33, 0xd4, 0x8a, 0x32, 0xa9, 0x04, 0x6a, 0xb8, 0x46, 0xac, 0x18, 0xbb, 0x87, 0x15, 0x21, 0x3d, + 0x66, 0x45, 0x91, 0x44, 0xfd, 0xfd, 0x5b, 0x12, 0xe2, 0x43, 0x6b, 0x30, 0xcc, 0x3c, 0x4c, 0x3f, + 0x82, 0x4c, 0x1f, 0x30, 0x0c, 0xdb, 0x93, 0xa3, 0x70, 0x9a, 0xa9, 0xb3, 0x00, 0xed, 0x18, 0x43, + 0x32, 0xc4, 0xaf, 0xe2, 0x16, 0xff, 0xd2, 0x95, 0xfc, 0x44, 0x93, 0xed, 0x4f, 0xd1, 0xa5, 0xb9, + 0x04, 0xff, 0xbe, 0xbc, 0x18, 0x3b, 0x2b, 0x4d, 0x3d, 0x0d, 0x72, 0x77, 0xac, 0x1c, 0x08, 0xaf, + 0x00, 0xea, 0x9d, 0xb1, 0x30, 0x43, 0x92, 0x31, 0x3c, 0x1a, 0x66, 0xc8, 0x1c, 0x97, 0xdb, 0x3e, + 0xbf, 0x64, 0x98, 0x9e, 0x6d, 0xf5, 0x70, 0x76, 0xfb, 0xff, 0x67, 0xe3, 0x9c, 0x2d, 0xc0, 0x30, + 0x13, 0x92, 0xb1, 0x54, 0x68, 0xfa, 0xa0, 0x59, 0x4e, 0x61, 0x0f, 0xa5, 0x95, 0x57, 0x6f, 0x17, + 0x86, 0x7e, 0x78, 0xbb, 0x30, 0xf4, 0xaf, 0xb7, 0x0b, 0x43, 0xaf, 0xdf, 0x2e, 0x48, 0x6f, 0xde, + 0x2e, 0x48, 0x6f, 0xdf, 0x2e, 0x48, 0xef, 0xdc, 0x2e, 0x48, 0x37, 0xf7, 0x0a, 0xd2, 0x57, 0xf6, + 0x0a, 0xd2, 0xd7, 0xf7, 0x0a, 0xd2, 0x77, 0xf6, 0x0a, 0xd2, 0xf7, 0xf7, 0x0a, 0xd2, 0xab, 0x7b, + 0x05, 0xe9, 0x87, 0x7b, 0x05, 0xe9, 0xf5, 0xbd, 0x82, 0xf4, 0xe6, 0x5e, 0x61, 0xe8, 0xed, 0xbd, + 0x82, 0xf4, 0xce, 0x5e, 0x61, 0xe8, 0xe6, 0x8f, 0x0b, 0x43, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, + 0xf5, 0x3e, 0x59, 0xc8, 0x4d, 0x3a, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -1408,6 +1413,9 @@ return dAtA } func (m *Castaway) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int32Ptr != nil { @@ -1488,6 +1496,9 @@ } func (m *Wilson) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64 != nil { @@ -1853,6 +1864,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.MyUint64S) == 0 { + m.MyUint64S = make([]github_com_gogo_protobuf_test_casttype.MyUint64Type, 0, elementCount) + } for iNdEx < postIndex { var v github_com_gogo_protobuf_test_casttype.MyUint64Type for shift := uint(0); ; shift += 7 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/combos/marshaler/casttype.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/combos/marshaler/casttype.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/combos/marshaler/casttype.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/combos/marshaler/casttype.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -143,274 +143,279 @@ func CasttypeDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4260 bytes of a gzipped FileDescriptorSet + // 4343 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5b, 0x70, 0x1b, 0xd7, - 0x79, 0xe6, 0xe2, 0x42, 0x02, 0x3f, 0x40, 0x70, 0x79, 0x48, 0x4b, 0x10, 0x1d, 0x83, 0x14, 0xe5, + 0x79, 0xe6, 0xe2, 0x42, 0x02, 0x3f, 0x40, 0x70, 0x79, 0x48, 0xcb, 0x10, 0x13, 0x83, 0x14, 0xe5, 0x0b, 0x6d, 0x27, 0x94, 0x47, 0x77, 0x41, 0x89, 0x5d, 0x82, 0x84, 0x18, 0xa8, 0x04, 0xc9, 0x2c, 0xc9, 0xc8, 0x72, 0xda, 0xd9, 0x59, 0x2e, 0x0e, 0xc1, 0x95, 0x16, 0xbb, 0x9b, 0xdd, 0x85, 0x64, - 0x68, 0xfa, 0xa0, 0xc6, 0x6d, 0x33, 0x69, 0xa7, 0xf7, 0xce, 0x34, 0x71, 0x1d, 0xb7, 0xe9, 0x4c, - 0xea, 0x34, 0xbd, 0x25, 0xcd, 0xa5, 0x49, 0x9f, 0xf2, 0x92, 0xd6, 0x4f, 0x9d, 0xe4, 0xad, 0x0f, - 0x1d, 0xd9, 0x62, 0x3c, 0x53, 0xa7, 0x75, 0x1b, 0xb7, 0xf5, 0x83, 0x47, 0x7e, 0xe9, 0x9c, 0xdb, - 0x62, 0x71, 0xa1, 0x16, 0x54, 0xc6, 0xf6, 0x13, 0xb1, 0xff, 0xf9, 0xbf, 0xef, 0xfc, 0xe7, 0x3f, - 0xff, 0x39, 0xff, 0x7f, 0xce, 0x2e, 0xe1, 0x67, 0xe7, 0x61, 0xa6, 0x6e, 0xdb, 0x75, 0x13, 0x1f, - 0x77, 0x5c, 0xdb, 0xb7, 0xb7, 0x9b, 0x3b, 0xc7, 0x6b, 0xd8, 0xd3, 0x5d, 0xc3, 0xf1, 0x6d, 0x77, - 0x9e, 0xca, 0xd0, 0x18, 0xd3, 0x98, 0x17, 0x1a, 0xb3, 0x55, 0x18, 0xbf, 0x68, 0x98, 0x78, 0x29, - 0x50, 0xdc, 0xc0, 0x3e, 0x3a, 0x07, 0x89, 0x1d, 0xc3, 0xc4, 0x79, 0x69, 0x26, 0x3e, 0x97, 0x39, - 0xf1, 0xf0, 0x7c, 0x17, 0x68, 0xbe, 0x13, 0xb1, 0x4e, 0xc4, 0x0a, 0x45, 0xcc, 0xbe, 0x91, 0x80, - 0x89, 0x3e, 0xad, 0x08, 0x41, 0xc2, 0xd2, 0x1a, 0x84, 0x51, 0x9a, 0x4b, 0x2b, 0xf4, 0x37, 0xca, - 0xc3, 0x88, 0xa3, 0xe9, 0xd7, 0xb4, 0x3a, 0xce, 0xc7, 0xa8, 0x58, 0x3c, 0xa2, 0x02, 0x40, 0x0d, - 0x3b, 0xd8, 0xaa, 0x61, 0x4b, 0x6f, 0xe5, 0xe3, 0x33, 0xf1, 0xb9, 0xb4, 0x12, 0x92, 0xa0, 0x27, - 0x61, 0xdc, 0x69, 0x6e, 0x9b, 0x86, 0xae, 0x86, 0xd4, 0x60, 0x26, 0x3e, 0x97, 0x54, 0x64, 0xd6, - 0xb0, 0xd4, 0x56, 0x7e, 0x0c, 0xc6, 0x6e, 0x60, 0xed, 0x5a, 0x58, 0x35, 0x43, 0x55, 0x73, 0x44, - 0x1c, 0x52, 0x5c, 0x84, 0x6c, 0x03, 0x7b, 0x9e, 0x56, 0xc7, 0xaa, 0xdf, 0x72, 0x70, 0x3e, 0x41, - 0x47, 0x3f, 0xd3, 0x33, 0xfa, 0xee, 0x91, 0x67, 0x38, 0x6a, 0xb3, 0xe5, 0x60, 0xb4, 0x00, 0x69, - 0x6c, 0x35, 0x1b, 0x8c, 0x21, 0xb9, 0x8f, 0xff, 0xca, 0x56, 0xb3, 0xd1, 0xcd, 0x92, 0x22, 0x30, - 0x4e, 0x31, 0xe2, 0x61, 0xf7, 0xba, 0xa1, 0xe3, 0xfc, 0x30, 0x25, 0x78, 0xac, 0x87, 0x60, 0x83, - 0xb5, 0x77, 0x73, 0x08, 0x1c, 0x5a, 0x84, 0x34, 0x7e, 0xde, 0xc7, 0x96, 0x67, 0xd8, 0x56, 0x7e, - 0x84, 0x92, 0x3c, 0xd2, 0x67, 0x16, 0xb1, 0x59, 0xeb, 0xa6, 0x68, 0xe3, 0xd0, 0x19, 0x18, 0xb1, - 0x1d, 0xdf, 0xb0, 0x2d, 0x2f, 0x9f, 0x9a, 0x91, 0xe6, 0x32, 0x27, 0x3e, 0xd2, 0x37, 0x10, 0xd6, - 0x98, 0x8e, 0x22, 0x94, 0x51, 0x05, 0x64, 0xcf, 0x6e, 0xba, 0x3a, 0x56, 0x75, 0xbb, 0x86, 0x55, - 0xc3, 0xda, 0xb1, 0xf3, 0x69, 0x4a, 0x30, 0xdd, 0x3b, 0x10, 0xaa, 0xb8, 0x68, 0xd7, 0x70, 0xc5, - 0xda, 0xb1, 0x95, 0x9c, 0xd7, 0xf1, 0x8c, 0x0e, 0xc1, 0xb0, 0xd7, 0xb2, 0x7c, 0xed, 0xf9, 0x7c, - 0x96, 0x46, 0x08, 0x7f, 0x9a, 0xfd, 0xfe, 0x30, 0x8c, 0x0d, 0x12, 0x62, 0x17, 0x20, 0xb9, 0x43, - 0x46, 0x99, 0x8f, 0x1d, 0xc4, 0x07, 0x0c, 0xd3, 0xe9, 0xc4, 0xe1, 0xfb, 0x74, 0xe2, 0x02, 0x64, - 0x2c, 0xec, 0xf9, 0xb8, 0xc6, 0x22, 0x22, 0x3e, 0x60, 0x4c, 0x01, 0x03, 0xf5, 0x86, 0x54, 0xe2, - 0xbe, 0x42, 0xea, 0x59, 0x18, 0x0b, 0x4c, 0x52, 0x5d, 0xcd, 0xaa, 0x8b, 0xd8, 0x3c, 0x1e, 0x65, - 0xc9, 0x7c, 0x59, 0xe0, 0x14, 0x02, 0x53, 0x72, 0xb8, 0xe3, 0x19, 0x2d, 0x01, 0xd8, 0x16, 0xb6, - 0x77, 0xd4, 0x1a, 0xd6, 0xcd, 0x7c, 0x6a, 0x1f, 0x2f, 0xad, 0x11, 0x95, 0x1e, 0x2f, 0xd9, 0x4c, - 0xaa, 0x9b, 0xe8, 0x7c, 0x3b, 0xd4, 0x46, 0xf6, 0x89, 0x94, 0x2a, 0x5b, 0x64, 0x3d, 0xd1, 0xb6, - 0x05, 0x39, 0x17, 0x93, 0xb8, 0xc7, 0x35, 0x3e, 0xb2, 0x34, 0x35, 0x62, 0x3e, 0x72, 0x64, 0x0a, - 0x87, 0xb1, 0x81, 0x8d, 0xba, 0xe1, 0x47, 0x74, 0x0c, 0x02, 0x81, 0x4a, 0xc3, 0x0a, 0xe8, 0x2e, - 0x94, 0x15, 0xc2, 0x55, 0xad, 0x81, 0xa7, 0x6e, 0x42, 0xae, 0xd3, 0x3d, 0x68, 0x12, 0x92, 0x9e, - 0xaf, 0xb9, 0x3e, 0x8d, 0xc2, 0xa4, 0xc2, 0x1e, 0x90, 0x0c, 0x71, 0x6c, 0xd5, 0xe8, 0x2e, 0x97, - 0x54, 0xc8, 0x4f, 0xf4, 0x0b, 0xed, 0x01, 0xc7, 0xe9, 0x80, 0x1f, 0xed, 0x9d, 0xd1, 0x0e, 0xe6, - 0xee, 0x71, 0x4f, 0x9d, 0x85, 0xd1, 0x8e, 0x01, 0x0c, 0xda, 0xf5, 0xec, 0xaf, 0xc0, 0x03, 0x7d, - 0xa9, 0xd1, 0xb3, 0x30, 0xd9, 0xb4, 0x0c, 0xcb, 0xc7, 0xae, 0xe3, 0x62, 0x12, 0xb1, 0xac, 0xab, - 0xfc, 0xbf, 0x8f, 0xec, 0x13, 0x73, 0x5b, 0x61, 0x6d, 0xc6, 0xa2, 0x4c, 0x34, 0x7b, 0x85, 0x4f, - 0xa4, 0x53, 0x6f, 0x8e, 0xc8, 0xb7, 0x6e, 0xdd, 0xba, 0x15, 0x9b, 0xfd, 0xe2, 0x30, 0x4c, 0xf6, - 0x5b, 0x33, 0x7d, 0x97, 0xef, 0x21, 0x18, 0xb6, 0x9a, 0x8d, 0x6d, 0xec, 0x52, 0x27, 0x25, 0x15, - 0xfe, 0x84, 0x16, 0x20, 0x69, 0x6a, 0xdb, 0xd8, 0xcc, 0x27, 0x66, 0xa4, 0xb9, 0xdc, 0x89, 0x27, - 0x07, 0x5a, 0x95, 0xf3, 0x2b, 0x04, 0xa2, 0x30, 0x24, 0x7a, 0x1a, 0x12, 0x7c, 0x8b, 0x26, 0x0c, - 0x4f, 0x0c, 0xc6, 0x40, 0xd6, 0x92, 0x42, 0x71, 0xe8, 0x41, 0x48, 0x93, 0xbf, 0x2c, 0x36, 0x86, - 0xa9, 0xcd, 0x29, 0x22, 0x20, 0x71, 0x81, 0xa6, 0x20, 0x45, 0x97, 0x49, 0x0d, 0x8b, 0xd4, 0x16, - 0x3c, 0x93, 0xc0, 0xaa, 0xe1, 0x1d, 0xad, 0x69, 0xfa, 0xea, 0x75, 0xcd, 0x6c, 0x62, 0x1a, 0xf0, - 0x69, 0x25, 0xcb, 0x85, 0x9f, 0x26, 0x32, 0x34, 0x0d, 0x19, 0xb6, 0xaa, 0x0c, 0xab, 0x86, 0x9f, - 0xa7, 0xbb, 0x67, 0x52, 0x61, 0x0b, 0xad, 0x42, 0x24, 0xa4, 0xfb, 0xab, 0x9e, 0x6d, 0x89, 0xd0, - 0xa4, 0x5d, 0x10, 0x01, 0xed, 0xfe, 0x6c, 0xf7, 0xc6, 0xfd, 0x50, 0xff, 0xe1, 0x75, 0xc7, 0xd4, - 0xec, 0x77, 0x63, 0x90, 0xa0, 0xfb, 0xc5, 0x18, 0x64, 0x36, 0xaf, 0xac, 0x97, 0xd5, 0xa5, 0xb5, - 0xad, 0xd2, 0x4a, 0x59, 0x96, 0x50, 0x0e, 0x80, 0x0a, 0x2e, 0xae, 0xac, 0x2d, 0x6c, 0xca, 0xb1, - 0xe0, 0xb9, 0xb2, 0xba, 0x79, 0xe6, 0x94, 0x1c, 0x0f, 0x00, 0x5b, 0x4c, 0x90, 0x08, 0x2b, 0x9c, - 0x3c, 0x21, 0x27, 0x91, 0x0c, 0x59, 0x46, 0x50, 0x79, 0xb6, 0xbc, 0x74, 0xe6, 0x94, 0x3c, 0xdc, - 0x29, 0x39, 0x79, 0x42, 0x1e, 0x41, 0xa3, 0x90, 0xa6, 0x92, 0xd2, 0xda, 0xda, 0x8a, 0x9c, 0x0a, - 0x38, 0x37, 0x36, 0x95, 0xca, 0xea, 0xb2, 0x9c, 0x0e, 0x38, 0x97, 0x95, 0xb5, 0xad, 0x75, 0x19, - 0x02, 0x86, 0x6a, 0x79, 0x63, 0x63, 0x61, 0xb9, 0x2c, 0x67, 0x02, 0x8d, 0xd2, 0x95, 0xcd, 0xf2, - 0x86, 0x9c, 0xed, 0x30, 0xeb, 0xe4, 0x09, 0x79, 0x34, 0xe8, 0xa2, 0xbc, 0xba, 0x55, 0x95, 0x73, - 0x68, 0x1c, 0x46, 0x59, 0x17, 0xc2, 0x88, 0xb1, 0x2e, 0xd1, 0x99, 0x53, 0xb2, 0xdc, 0x36, 0x84, - 0xb1, 0x8c, 0x77, 0x08, 0xce, 0x9c, 0x92, 0xd1, 0xec, 0x22, 0x24, 0x69, 0x74, 0x21, 0x04, 0xb9, - 0x95, 0x85, 0x52, 0x79, 0x45, 0x5d, 0x5b, 0xdf, 0xac, 0xac, 0xad, 0x2e, 0xac, 0xc8, 0x52, 0x5b, - 0xa6, 0x94, 0x3f, 0xb5, 0x55, 0x51, 0xca, 0x4b, 0x72, 0x2c, 0x2c, 0x5b, 0x2f, 0x2f, 0x6c, 0x96, - 0x97, 0xe4, 0xf8, 0xac, 0x0e, 0x93, 0xfd, 0xf6, 0xc9, 0xbe, 0x2b, 0x23, 0x34, 0xc5, 0xb1, 0x7d, - 0xa6, 0x98, 0x72, 0xf5, 0x4c, 0xf1, 0x4f, 0x62, 0x30, 0xd1, 0x27, 0x57, 0xf4, 0xed, 0xe4, 0x19, - 0x48, 0xb2, 0x10, 0x65, 0xd9, 0xf3, 0xf1, 0xbe, 0x49, 0x87, 0x06, 0x6c, 0x4f, 0x06, 0xa5, 0xb8, - 0x70, 0x05, 0x11, 0xdf, 0xa7, 0x82, 0x20, 0x14, 0x3d, 0x7b, 0xfa, 0x2f, 0xf7, 0xec, 0xe9, 0x2c, - 0xed, 0x9d, 0x19, 0x24, 0xed, 0x51, 0xd9, 0xc1, 0xf6, 0xf6, 0x64, 0x9f, 0xbd, 0xfd, 0x02, 0x8c, - 0xf7, 0x10, 0x0d, 0xbc, 0xc7, 0xbe, 0x20, 0x41, 0x7e, 0x3f, 0xe7, 0x44, 0xec, 0x74, 0xb1, 0x8e, - 0x9d, 0xee, 0x42, 0xb7, 0x07, 0x8f, 0xee, 0x3f, 0x09, 0x3d, 0x73, 0xfd, 0x8a, 0x04, 0x87, 0xfa, - 0x57, 0x8a, 0x7d, 0x6d, 0x78, 0x1a, 0x86, 0x1b, 0xd8, 0xdf, 0xb5, 0x45, 0xb5, 0xf4, 0x68, 0x9f, - 0x1c, 0x4c, 0x9a, 0xbb, 0x27, 0x9b, 0xa3, 0xc2, 0x49, 0x3c, 0xbe, 0x5f, 0xb9, 0xc7, 0xac, 0xe9, - 0xb1, 0xf4, 0x0b, 0x31, 0x78, 0xa0, 0x2f, 0x79, 0x5f, 0x43, 0x1f, 0x02, 0x30, 0x2c, 0xa7, 0xe9, - 0xb3, 0x8a, 0x88, 0x6d, 0xb0, 0x69, 0x2a, 0xa1, 0x9b, 0x17, 0xd9, 0x3c, 0x9b, 0x7e, 0xd0, 0x1e, - 0xa7, 0xed, 0xc0, 0x44, 0x54, 0xe1, 0x5c, 0xdb, 0xd0, 0x04, 0x35, 0xb4, 0xb0, 0xcf, 0x48, 0x7b, - 0x02, 0xf3, 0x29, 0x90, 0x75, 0xd3, 0xc0, 0x96, 0xaf, 0x7a, 0xbe, 0x8b, 0xb5, 0x86, 0x61, 0xd5, - 0x69, 0x06, 0x49, 0x15, 0x93, 0x3b, 0x9a, 0xe9, 0x61, 0x65, 0x8c, 0x35, 0x6f, 0x88, 0x56, 0x82, - 0xa0, 0x01, 0xe4, 0x86, 0x10, 0xc3, 0x1d, 0x08, 0xd6, 0x1c, 0x20, 0x66, 0xbf, 0x95, 0x82, 0x4c, - 0xa8, 0xae, 0x46, 0x47, 0x21, 0x7b, 0x55, 0xbb, 0xae, 0xa9, 0xe2, 0xac, 0xc4, 0x3c, 0x91, 0x21, - 0xb2, 0x75, 0x7e, 0x5e, 0x7a, 0x0a, 0x26, 0xa9, 0x8a, 0xdd, 0xf4, 0xb1, 0xab, 0xea, 0xa6, 0xe6, - 0x79, 0xd4, 0x69, 0x29, 0xaa, 0x8a, 0x48, 0xdb, 0x1a, 0x69, 0x5a, 0x14, 0x2d, 0xe8, 0x34, 0x4c, - 0x50, 0x44, 0xa3, 0x69, 0xfa, 0x86, 0x63, 0x62, 0x95, 0x9c, 0xde, 0x3c, 0x9a, 0x49, 0x02, 0xcb, - 0xc6, 0x89, 0x46, 0x95, 0x2b, 0x10, 0x8b, 0x3c, 0xb4, 0x04, 0x0f, 0x51, 0x58, 0x1d, 0x5b, 0xd8, - 0xd5, 0x7c, 0xac, 0xe2, 0xcf, 0x36, 0x35, 0xd3, 0x53, 0x35, 0xab, 0xa6, 0xee, 0x6a, 0xde, 0x6e, - 0x7e, 0x92, 0x10, 0x94, 0x62, 0x79, 0x49, 0x39, 0x42, 0x14, 0x97, 0xb9, 0x5e, 0x99, 0xaa, 0x2d, - 0x58, 0xb5, 0x4f, 0x6a, 0xde, 0x2e, 0x2a, 0xc2, 0x21, 0xca, 0xe2, 0xf9, 0xae, 0x61, 0xd5, 0x55, - 0x7d, 0x17, 0xeb, 0xd7, 0xd4, 0xa6, 0xbf, 0x73, 0x2e, 0xff, 0x60, 0xb8, 0x7f, 0x6a, 0xe1, 0x06, - 0xd5, 0x59, 0x24, 0x2a, 0x5b, 0xfe, 0xce, 0x39, 0xb4, 0x01, 0x59, 0x32, 0x19, 0x0d, 0xe3, 0x26, - 0x56, 0x77, 0x6c, 0x97, 0xa6, 0xc6, 0x5c, 0x9f, 0xad, 0x29, 0xe4, 0xc1, 0xf9, 0x35, 0x0e, 0xa8, - 0xda, 0x35, 0x5c, 0x4c, 0x6e, 0xac, 0x97, 0xcb, 0x4b, 0x4a, 0x46, 0xb0, 0x5c, 0xb4, 0x5d, 0x12, - 0x50, 0x75, 0x3b, 0x70, 0x70, 0x86, 0x05, 0x54, 0xdd, 0x16, 0xee, 0x3d, 0x0d, 0x13, 0xba, 0xce, - 0xc6, 0x6c, 0xe8, 0x2a, 0x3f, 0x63, 0x79, 0x79, 0xb9, 0xc3, 0x59, 0xba, 0xbe, 0xcc, 0x14, 0x78, - 0x8c, 0x7b, 0xe8, 0x3c, 0x3c, 0xd0, 0x76, 0x56, 0x18, 0x38, 0xde, 0x33, 0xca, 0x6e, 0xe8, 0x69, - 0x98, 0x70, 0x5a, 0xbd, 0x40, 0xd4, 0xd1, 0xa3, 0xd3, 0xea, 0x86, 0x9d, 0x85, 0x49, 0x67, 0xd7, - 0xe9, 0xc5, 0x3d, 0x11, 0xc6, 0x21, 0x67, 0xd7, 0xe9, 0x06, 0x3e, 0x42, 0x0f, 0xdc, 0x2e, 0xd6, - 0x35, 0x1f, 0xd7, 0xf2, 0x87, 0xc3, 0xea, 0xa1, 0x06, 0x74, 0x1c, 0x64, 0x5d, 0x57, 0xb1, 0xa5, - 0x6d, 0x9b, 0x58, 0xd5, 0x5c, 0x6c, 0x69, 0x5e, 0x7e, 0x3a, 0xac, 0x9c, 0xd3, 0xf5, 0x32, 0x6d, - 0x5d, 0xa0, 0x8d, 0xe8, 0x09, 0x18, 0xb7, 0xb7, 0xaf, 0xea, 0x2c, 0x24, 0x55, 0xc7, 0xc5, 0x3b, - 0xc6, 0xf3, 0xf9, 0x87, 0xa9, 0x7f, 0xc7, 0x48, 0x03, 0x0d, 0xc8, 0x75, 0x2a, 0x46, 0x8f, 0x83, - 0xac, 0x7b, 0xbb, 0x9a, 0xeb, 0xd0, 0x3d, 0xd9, 0x73, 0x34, 0x1d, 0xe7, 0x1f, 0x61, 0xaa, 0x4c, - 0xbe, 0x2a, 0xc4, 0x64, 0x49, 0x78, 0x37, 0x8c, 0x1d, 0x5f, 0x30, 0x3e, 0xc6, 0x96, 0x04, 0x95, - 0x71, 0xb6, 0x39, 0x90, 0x89, 0x2b, 0x3a, 0x3a, 0x9e, 0xa3, 0x6a, 0x39, 0x67, 0xd7, 0x09, 0xf7, - 0x7b, 0x0c, 0x46, 0x89, 0x66, 0xbb, 0xd3, 0xc7, 0x59, 0x41, 0xe6, 0xec, 0x86, 0x7a, 0x7c, 0xdf, - 0x6a, 0xe3, 0xd9, 0x22, 0x64, 0xc3, 0xf1, 0x89, 0xd2, 0xc0, 0x22, 0x54, 0x96, 0x48, 0xb1, 0xb2, - 0xb8, 0xb6, 0x44, 0xca, 0x8c, 0xe7, 0xca, 0x72, 0x8c, 0x94, 0x3b, 0x2b, 0x95, 0xcd, 0xb2, 0xaa, - 0x6c, 0xad, 0x6e, 0x56, 0xaa, 0x65, 0x39, 0x1e, 0xae, 0xab, 0x7f, 0x18, 0x83, 0x5c, 0xe7, 0x11, - 0x09, 0x7d, 0x1c, 0x0e, 0x8b, 0xfb, 0x0c, 0x0f, 0xfb, 0xea, 0x0d, 0xc3, 0xa5, 0x4b, 0xa6, 0xa1, - 0xb1, 0xf4, 0x15, 0x4c, 0xda, 0x24, 0xd7, 0xda, 0xc0, 0xfe, 0x65, 0xc3, 0x25, 0x0b, 0xa2, 0xa1, - 0xf9, 0x68, 0x05, 0xa6, 0x2d, 0x5b, 0xf5, 0x7c, 0xcd, 0xaa, 0x69, 0x6e, 0x4d, 0x6d, 0xdf, 0x24, - 0xa9, 0x9a, 0xae, 0x63, 0xcf, 0xb3, 0x59, 0xaa, 0x0a, 0x58, 0x3e, 0x62, 0xd9, 0x1b, 0x5c, 0xb9, - 0xbd, 0x87, 0x2f, 0x70, 0xd5, 0xae, 0x00, 0x8b, 0xef, 0x17, 0x60, 0x0f, 0x42, 0xba, 0xa1, 0x39, - 0x2a, 0xb6, 0x7c, 0xb7, 0x45, 0x0b, 0xe3, 0x94, 0x92, 0x6a, 0x68, 0x4e, 0x99, 0x3c, 0x7f, 0x30, - 0xe7, 0x93, 0x7f, 0x8b, 0x43, 0x36, 0x5c, 0x1c, 0x93, 0xb3, 0x86, 0x4e, 0xf3, 0x88, 0x44, 0x77, - 0x9a, 0x63, 0xf7, 0x2c, 0xa5, 0xe7, 0x17, 0x49, 0x82, 0x29, 0x0e, 0xb3, 0x92, 0x55, 0x61, 0x48, - 0x92, 0xdc, 0xc9, 0xde, 0x82, 0x59, 0x89, 0x90, 0x52, 0xf8, 0x13, 0x5a, 0x86, 0xe1, 0xab, 0x1e, - 0xe5, 0x1e, 0xa6, 0xdc, 0x0f, 0xdf, 0x9b, 0xfb, 0xd2, 0x06, 0x25, 0x4f, 0x5f, 0xda, 0x50, 0x57, - 0xd7, 0x94, 0xea, 0xc2, 0x8a, 0xc2, 0xe1, 0xe8, 0x08, 0x24, 0x4c, 0xed, 0x66, 0xab, 0x33, 0x15, - 0x51, 0xd1, 0xa0, 0x8e, 0x3f, 0x02, 0x89, 0x1b, 0x58, 0xbb, 0xd6, 0x99, 0x00, 0xa8, 0xe8, 0x7d, - 0x0c, 0xfd, 0xe3, 0x90, 0xa4, 0xfe, 0x42, 0x00, 0xdc, 0x63, 0xf2, 0x10, 0x4a, 0x41, 0x62, 0x71, - 0x4d, 0x21, 0xe1, 0x2f, 0x43, 0x96, 0x49, 0xd5, 0xf5, 0x4a, 0x79, 0xb1, 0x2c, 0xc7, 0x66, 0x4f, - 0xc3, 0x30, 0x73, 0x02, 0x59, 0x1a, 0x81, 0x1b, 0xe4, 0x21, 0xfe, 0xc8, 0x39, 0x24, 0xd1, 0xba, - 0x55, 0x2d, 0x95, 0x15, 0x39, 0x16, 0x9e, 0x5e, 0x0f, 0xb2, 0xe1, 0xba, 0xf8, 0x83, 0x89, 0xa9, - 0x7f, 0x94, 0x20, 0x13, 0xaa, 0x73, 0x49, 0x81, 0xa2, 0x99, 0xa6, 0x7d, 0x43, 0xd5, 0x4c, 0x43, - 0xf3, 0x78, 0x50, 0x00, 0x15, 0x2d, 0x10, 0xc9, 0xa0, 0x93, 0xf6, 0x81, 0x18, 0xff, 0xb2, 0x04, - 0x72, 0x77, 0x89, 0xd9, 0x65, 0xa0, 0xf4, 0xa1, 0x1a, 0xf8, 0x92, 0x04, 0xb9, 0xce, 0xba, 0xb2, - 0xcb, 0xbc, 0xa3, 0x1f, 0xaa, 0x79, 0xaf, 0xc7, 0x60, 0xb4, 0xa3, 0x9a, 0x1c, 0xd4, 0xba, 0xcf, - 0xc2, 0xb8, 0x51, 0xc3, 0x0d, 0xc7, 0xf6, 0xb1, 0xa5, 0xb7, 0x54, 0x13, 0x5f, 0xc7, 0x66, 0x7e, - 0x96, 0x6e, 0x14, 0xc7, 0xef, 0x5d, 0xaf, 0xce, 0x57, 0xda, 0xb8, 0x15, 0x02, 0x2b, 0x4e, 0x54, - 0x96, 0xca, 0xd5, 0xf5, 0xb5, 0xcd, 0xf2, 0xea, 0xe2, 0x15, 0x75, 0x6b, 0xf5, 0x17, 0x57, 0xd7, - 0x2e, 0xaf, 0x2a, 0xb2, 0xd1, 0xa5, 0xf6, 0x3e, 0x2e, 0xf5, 0x75, 0x90, 0xbb, 0x8d, 0x42, 0x87, - 0xa1, 0x9f, 0x59, 0xf2, 0x10, 0x9a, 0x80, 0xb1, 0xd5, 0x35, 0x75, 0xa3, 0xb2, 0x54, 0x56, 0xcb, - 0x17, 0x2f, 0x96, 0x17, 0x37, 0x37, 0xd8, 0x0d, 0x44, 0xa0, 0xbd, 0xd9, 0xb9, 0xa8, 0x5f, 0x8c, - 0xc3, 0x44, 0x1f, 0x4b, 0xd0, 0x02, 0x3f, 0x3b, 0xb0, 0xe3, 0xcc, 0xc7, 0x06, 0xb1, 0x7e, 0x9e, - 0xa4, 0xfc, 0x75, 0xcd, 0xf5, 0xf9, 0x51, 0xe3, 0x71, 0x20, 0x5e, 0xb2, 0x7c, 0x63, 0xc7, 0xc0, - 0x2e, 0xbf, 0xb0, 0x61, 0x07, 0x8a, 0xb1, 0xb6, 0x9c, 0xdd, 0xd9, 0x7c, 0x14, 0x90, 0x63, 0x7b, - 0x86, 0x6f, 0x5c, 0xc7, 0xaa, 0x61, 0x89, 0xdb, 0x1d, 0x72, 0xc0, 0x48, 0x28, 0xb2, 0x68, 0xa9, - 0x58, 0x7e, 0xa0, 0x6d, 0xe1, 0xba, 0xd6, 0xa5, 0x4d, 0x36, 0xf0, 0xb8, 0x22, 0x8b, 0x96, 0x40, - 0xfb, 0x28, 0x64, 0x6b, 0x76, 0x93, 0x54, 0x5d, 0x4c, 0x8f, 0xe4, 0x0b, 0x49, 0xc9, 0x30, 0x59, - 0xa0, 0xc2, 0xeb, 0xe9, 0xf6, 0xb5, 0x52, 0x56, 0xc9, 0x30, 0x19, 0x53, 0x79, 0x0c, 0xc6, 0xb4, - 0x7a, 0xdd, 0x25, 0xe4, 0x82, 0x88, 0x9d, 0x10, 0x72, 0x81, 0x98, 0x2a, 0x4e, 0x5d, 0x82, 0x94, - 0xf0, 0x03, 0x49, 0xc9, 0xc4, 0x13, 0xaa, 0xc3, 0x8e, 0xbd, 0xb1, 0xb9, 0xb4, 0x92, 0xb2, 0x44, - 0xe3, 0x51, 0xc8, 0x1a, 0x9e, 0xda, 0xbe, 0x25, 0x8f, 0xcd, 0xc4, 0xe6, 0x52, 0x4a, 0xc6, 0xf0, - 0x82, 0x1b, 0xc6, 0xd9, 0x57, 0x62, 0x90, 0xeb, 0xbc, 0xe5, 0x47, 0x4b, 0x90, 0x32, 0x6d, 0x5d, - 0xa3, 0xa1, 0xc5, 0x5e, 0x31, 0xcd, 0x45, 0xbc, 0x18, 0x98, 0x5f, 0xe1, 0xfa, 0x4a, 0x80, 0x9c, - 0xfa, 0x17, 0x09, 0x52, 0x42, 0x8c, 0x0e, 0x41, 0xc2, 0xd1, 0xfc, 0x5d, 0x4a, 0x97, 0x2c, 0xc5, - 0x64, 0x49, 0xa1, 0xcf, 0x44, 0xee, 0x39, 0x9a, 0x45, 0x43, 0x80, 0xcb, 0xc9, 0x33, 0x99, 0x57, - 0x13, 0x6b, 0x35, 0x7a, 0xfc, 0xb0, 0x1b, 0x0d, 0x6c, 0xf9, 0x9e, 0x98, 0x57, 0x2e, 0x5f, 0xe4, - 0x62, 0xf4, 0x24, 0x8c, 0xfb, 0xae, 0x66, 0x98, 0x1d, 0xba, 0x09, 0xaa, 0x2b, 0x8b, 0x86, 0x40, - 0xb9, 0x08, 0x47, 0x04, 0x6f, 0x0d, 0xfb, 0x9a, 0xbe, 0x8b, 0x6b, 0x6d, 0xd0, 0x30, 0xbd, 0x66, - 0x38, 0xcc, 0x15, 0x96, 0x78, 0xbb, 0xc0, 0xce, 0xfe, 0x58, 0x82, 0x71, 0x71, 0x60, 0xaa, 0x05, - 0xce, 0xaa, 0x02, 0x68, 0x96, 0x65, 0xfb, 0x61, 0x77, 0xf5, 0x86, 0x72, 0x0f, 0x6e, 0x7e, 0x21, - 0x00, 0x29, 0x21, 0x82, 0xa9, 0x06, 0x40, 0xbb, 0x65, 0x5f, 0xb7, 0x4d, 0x43, 0x86, 0xbf, 0xc2, - 0xa1, 0xef, 0x01, 0xd9, 0x11, 0x1b, 0x98, 0x88, 0x9c, 0xac, 0xd0, 0x24, 0x24, 0xb7, 0x71, 0xdd, - 0xb0, 0xf8, 0xc5, 0x2c, 0x7b, 0x10, 0x17, 0x21, 0x89, 0xe0, 0x22, 0xa4, 0xf4, 0x19, 0x98, 0xd0, - 0xed, 0x46, 0xb7, 0xb9, 0x25, 0xb9, 0xeb, 0x98, 0xef, 0x7d, 0x52, 0x7a, 0x0e, 0xda, 0x25, 0xe6, - 0xbb, 0x92, 0xf4, 0xe7, 0xb1, 0xf8, 0xf2, 0x7a, 0xe9, 0xeb, 0xb1, 0xa9, 0x65, 0x06, 0x5d, 0x17, - 0x23, 0x55, 0xf0, 0x8e, 0x89, 0x75, 0x62, 0x3d, 0x7c, 0x75, 0x0e, 0x3e, 0x56, 0x37, 0xfc, 0xdd, - 0xe6, 0xf6, 0xbc, 0x6e, 0x37, 0x8e, 0xd7, 0xed, 0xba, 0xdd, 0x7e, 0xf5, 0x49, 0x9e, 0xe8, 0x03, - 0xfd, 0xc5, 0x5f, 0x7f, 0xa6, 0x03, 0xe9, 0x54, 0xe4, 0xbb, 0xd2, 0xe2, 0x2a, 0x4c, 0x70, 0x65, - 0x95, 0xbe, 0x7f, 0x61, 0xa7, 0x08, 0x74, 0xcf, 0x3b, 0xac, 0xfc, 0x37, 0xdf, 0xa0, 0xe9, 0x5a, - 0x19, 0xe7, 0x50, 0xd2, 0xc6, 0x0e, 0x1a, 0x45, 0x05, 0x1e, 0xe8, 0xe0, 0x63, 0x4b, 0x13, 0xbb, - 0x11, 0x8c, 0x3f, 0xe4, 0x8c, 0x13, 0x21, 0xc6, 0x0d, 0x0e, 0x2d, 0x2e, 0xc2, 0xe8, 0x41, 0xb8, - 0xfe, 0x89, 0x73, 0x65, 0x71, 0x98, 0x64, 0x19, 0xc6, 0x28, 0x89, 0xde, 0xf4, 0x7c, 0xbb, 0x41, - 0xf7, 0xbd, 0x7b, 0xd3, 0xfc, 0xf3, 0x1b, 0x6c, 0xad, 0xe4, 0x08, 0x6c, 0x31, 0x40, 0x15, 0x8b, - 0x40, 0x5f, 0x39, 0xd5, 0xb0, 0x6e, 0x46, 0x30, 0xbc, 0xca, 0x0d, 0x09, 0xf4, 0x8b, 0x9f, 0x86, - 0x49, 0xf2, 0x9b, 0x6e, 0x4b, 0x61, 0x4b, 0xa2, 0x2f, 0xbc, 0xf2, 0x3f, 0x7e, 0x81, 0x2d, 0xc7, - 0x89, 0x80, 0x20, 0x64, 0x53, 0x68, 0x16, 0xeb, 0xd8, 0xf7, 0xb1, 0xeb, 0xa9, 0x9a, 0xd9, 0xcf, - 0xbc, 0xd0, 0x8d, 0x41, 0xfe, 0x4b, 0x6f, 0x75, 0xce, 0xe2, 0x32, 0x43, 0x2e, 0x98, 0x66, 0x71, - 0x0b, 0x0e, 0xf7, 0x89, 0x8a, 0x01, 0x38, 0x5f, 0xe4, 0x9c, 0x93, 0x3d, 0x91, 0x41, 0x68, 0xd7, - 0x41, 0xc8, 0x83, 0xb9, 0x1c, 0x80, 0xf3, 0x4f, 0x38, 0x27, 0xe2, 0x58, 0x31, 0xa5, 0x84, 0xf1, - 0x12, 0x8c, 0x5f, 0xc7, 0xee, 0xb6, 0xed, 0xf1, 0x5b, 0x9a, 0x01, 0xe8, 0x5e, 0xe2, 0x74, 0x63, - 0x1c, 0x48, 0xaf, 0x6d, 0x08, 0xd7, 0x79, 0x48, 0xed, 0x68, 0x3a, 0x1e, 0x80, 0xe2, 0xcb, 0x9c, - 0x62, 0x84, 0xe8, 0x13, 0xe8, 0x02, 0x64, 0xeb, 0x36, 0xcf, 0x4c, 0xd1, 0xf0, 0x97, 0x39, 0x3c, - 0x23, 0x30, 0x9c, 0xc2, 0xb1, 0x9d, 0xa6, 0x49, 0xd2, 0x56, 0x34, 0xc5, 0x9f, 0x0a, 0x0a, 0x81, - 0xe1, 0x14, 0x07, 0x70, 0xeb, 0x9f, 0x09, 0x0a, 0x2f, 0xe4, 0xcf, 0x67, 0x20, 0x63, 0x5b, 0x66, - 0xcb, 0xb6, 0x06, 0x31, 0xe2, 0x2b, 0x9c, 0x01, 0x38, 0x84, 0x10, 0x5c, 0x80, 0xf4, 0xa0, 0x13, - 0xf1, 0xd5, 0xb7, 0xc4, 0xf2, 0x10, 0x33, 0xb0, 0x0c, 0x63, 0x62, 0x83, 0x32, 0x6c, 0x6b, 0x00, - 0x8a, 0xbf, 0xe0, 0x14, 0xb9, 0x10, 0x8c, 0x0f, 0xc3, 0xc7, 0x9e, 0x5f, 0xc7, 0x83, 0x90, 0xbc, - 0x22, 0x86, 0xc1, 0x21, 0xdc, 0x95, 0xdb, 0xd8, 0xd2, 0x77, 0x07, 0x63, 0xf8, 0x9a, 0x70, 0xa5, - 0xc0, 0x10, 0x8a, 0x45, 0x18, 0x6d, 0x68, 0xae, 0xb7, 0xab, 0x99, 0x03, 0x4d, 0xc7, 0x5f, 0x72, - 0x8e, 0x6c, 0x00, 0xe2, 0x1e, 0x69, 0x5a, 0x07, 0xa1, 0xf9, 0xba, 0xf0, 0x48, 0x08, 0xc6, 0x97, - 0x9e, 0xe7, 0xd3, 0x2b, 0xad, 0x83, 0xb0, 0xfd, 0x95, 0x58, 0x7a, 0x0c, 0x5b, 0x0d, 0x33, 0x5e, - 0x80, 0xb4, 0x67, 0xdc, 0x1c, 0x88, 0xe6, 0xaf, 0xc5, 0x4c, 0x53, 0x00, 0x01, 0x5f, 0x81, 0x23, - 0x7d, 0xd3, 0xc4, 0x00, 0x64, 0x7f, 0xc3, 0xc9, 0x0e, 0xf5, 0x49, 0x15, 0x7c, 0x4b, 0x38, 0x28, - 0xe5, 0xdf, 0x8a, 0x2d, 0x01, 0x77, 0x71, 0xad, 0x93, 0xb3, 0x82, 0xa7, 0xed, 0x1c, 0xcc, 0x6b, - 0x7f, 0x27, 0xbc, 0xc6, 0xb0, 0x1d, 0x5e, 0xdb, 0x84, 0x43, 0x9c, 0xf1, 0x60, 0xf3, 0xfa, 0x0d, - 0xb1, 0xb1, 0x32, 0xf4, 0x56, 0xe7, 0xec, 0x7e, 0x06, 0xa6, 0x02, 0x77, 0x8a, 0xa2, 0xd4, 0x53, - 0x1b, 0x9a, 0x33, 0x00, 0xf3, 0x37, 0x39, 0xb3, 0xd8, 0xf1, 0x83, 0xaa, 0xd6, 0xab, 0x6a, 0x0e, - 0x21, 0x7f, 0x16, 0xf2, 0x82, 0xbc, 0x69, 0xb9, 0x58, 0xb7, 0xeb, 0x96, 0x71, 0x13, 0xd7, 0x06, - 0xa0, 0xfe, 0xfb, 0xae, 0xa9, 0xda, 0x0a, 0xc1, 0x09, 0x73, 0x05, 0xe4, 0xa0, 0x56, 0x51, 0x8d, - 0x86, 0x63, 0xbb, 0x7e, 0x04, 0xe3, 0xb7, 0xc4, 0x4c, 0x05, 0xb8, 0x0a, 0x85, 0x15, 0xcb, 0x90, - 0xa3, 0x8f, 0x83, 0x86, 0xe4, 0xb7, 0x39, 0xd1, 0x68, 0x1b, 0xc5, 0x37, 0x0e, 0xdd, 0x6e, 0x38, - 0x9a, 0x3b, 0xc8, 0xfe, 0xf7, 0x1d, 0xb1, 0x71, 0x70, 0x08, 0xdf, 0x38, 0xfc, 0x96, 0x83, 0x49, - 0xb6, 0x1f, 0x80, 0xe1, 0xbb, 0x62, 0xe3, 0x10, 0x18, 0x4e, 0x21, 0x0a, 0x86, 0x01, 0x28, 0xfe, - 0x41, 0x50, 0x08, 0x0c, 0xa1, 0xf8, 0x54, 0x3b, 0xd1, 0xba, 0xb8, 0x6e, 0x78, 0xbe, 0xcb, 0x4a, - 0xe1, 0x7b, 0x53, 0x7d, 0xef, 0xad, 0xce, 0x22, 0x4c, 0x09, 0x41, 0xc9, 0x4e, 0xc4, 0xaf, 0x50, - 0xe9, 0x49, 0x29, 0xda, 0xb0, 0xef, 0x8b, 0x9d, 0x28, 0x04, 0x63, 0xeb, 0x73, 0xac, 0xab, 0x56, - 0x41, 0x51, 0x1f, 0xc2, 0xe4, 0x7f, 0xf5, 0x1d, 0xce, 0xd5, 0x59, 0xaa, 0x14, 0x57, 0x48, 0x00, - 0x75, 0x16, 0x14, 0xd1, 0x64, 0x2f, 0xbc, 0x13, 0xc4, 0x50, 0x47, 0x3d, 0x51, 0xbc, 0x08, 0xa3, - 0x1d, 0xc5, 0x44, 0x34, 0xd5, 0xaf, 0x71, 0xaa, 0x6c, 0xb8, 0x96, 0x28, 0x9e, 0x86, 0x04, 0x29, - 0x0c, 0xa2, 0xe1, 0xbf, 0xce, 0xe1, 0x54, 0xbd, 0xf8, 0x09, 0x48, 0x89, 0x82, 0x20, 0x1a, 0xfa, - 0x1b, 0x1c, 0x1a, 0x40, 0x08, 0x5c, 0x14, 0x03, 0xd1, 0xf0, 0xcf, 0x0b, 0xb8, 0x80, 0x10, 0xf8, - 0xe0, 0x2e, 0xfc, 0xc1, 0x6f, 0x25, 0xf8, 0x86, 0x2e, 0x7c, 0x77, 0x01, 0x46, 0x78, 0x15, 0x10, - 0x8d, 0xfe, 0x02, 0xef, 0x5c, 0x20, 0x8a, 0x67, 0x21, 0x39, 0xa0, 0xc3, 0x7f, 0x9b, 0x43, 0x99, - 0x7e, 0x71, 0x11, 0x32, 0xa1, 0xcc, 0x1f, 0x0d, 0xff, 0x1d, 0x0e, 0x0f, 0xa3, 0x88, 0xe9, 0x3c, - 0xf3, 0x47, 0x13, 0xfc, 0xae, 0x30, 0x9d, 0x23, 0x88, 0xdb, 0x44, 0xd2, 0x8f, 0x46, 0xff, 0x9e, - 0xf0, 0xba, 0x80, 0x14, 0x9f, 0x81, 0x74, 0xb0, 0x91, 0x47, 0xe3, 0x7f, 0x9f, 0xe3, 0xdb, 0x18, - 0xe2, 0x81, 0x50, 0x22, 0x89, 0xa6, 0xf8, 0x03, 0xe1, 0x81, 0x10, 0x8a, 0x2c, 0xa3, 0xee, 0xe2, - 0x20, 0x9a, 0xe9, 0x0f, 0xc5, 0x32, 0xea, 0xaa, 0x0d, 0xc8, 0x6c, 0xd2, 0xfd, 0x34, 0x9a, 0xe2, - 0x8f, 0xc4, 0x6c, 0x52, 0x7d, 0x62, 0x46, 0x77, 0xb6, 0x8d, 0xe6, 0xf8, 0x63, 0x61, 0x46, 0x57, - 0xb2, 0x2d, 0xae, 0x03, 0xea, 0xcd, 0xb4, 0xd1, 0x7c, 0x5f, 0xe4, 0x7c, 0xe3, 0x3d, 0x89, 0xb6, - 0x78, 0x19, 0x0e, 0xf5, 0xcf, 0xb2, 0xd1, 0xac, 0x5f, 0x7a, 0xa7, 0xeb, 0x5c, 0x14, 0x4e, 0xb2, - 0xc5, 0xcd, 0xf6, 0x76, 0x1d, 0xce, 0xb0, 0xd1, 0xb4, 0x2f, 0xbe, 0xd3, 0xb9, 0x63, 0x87, 0x13, - 0x6c, 0x71, 0x01, 0xa0, 0x9d, 0xdc, 0xa2, 0xb9, 0x5e, 0xe2, 0x5c, 0x21, 0x10, 0x59, 0x1a, 0x3c, - 0xb7, 0x45, 0xe3, 0xbf, 0x2c, 0x96, 0x06, 0x47, 0x90, 0xa5, 0x21, 0xd2, 0x5a, 0x34, 0xfa, 0x65, - 0xb1, 0x34, 0x04, 0x84, 0x44, 0x76, 0x28, 0x73, 0x44, 0x33, 0x7c, 0x45, 0x44, 0x76, 0x08, 0x55, - 0xbc, 0x00, 0x29, 0xab, 0x69, 0x9a, 0x24, 0x40, 0xd1, 0xbd, 0x3f, 0x10, 0xcb, 0xff, 0xf4, 0x3d, - 0x6e, 0x81, 0x00, 0x14, 0x4f, 0x43, 0x12, 0x37, 0xb6, 0x71, 0x2d, 0x0a, 0xf9, 0x1f, 0xef, 0x89, - 0x4d, 0x89, 0x68, 0x17, 0x9f, 0x01, 0x60, 0x47, 0x7b, 0xfa, 0xda, 0x2a, 0x02, 0xfb, 0x9f, 0xef, - 0xf1, 0x4f, 0x37, 0xda, 0x90, 0x36, 0x01, 0xfb, 0x10, 0xe4, 0xde, 0x04, 0x6f, 0x75, 0x12, 0xd0, - 0x51, 0x9f, 0x87, 0x91, 0xab, 0x9e, 0x6d, 0xf9, 0x5a, 0x3d, 0x0a, 0xfd, 0x5f, 0x1c, 0x2d, 0xf4, - 0x89, 0xc3, 0x1a, 0xb6, 0x8b, 0x7d, 0xad, 0xee, 0x45, 0x61, 0xff, 0x9b, 0x63, 0x03, 0x00, 0x01, - 0xeb, 0x9a, 0xe7, 0x0f, 0x32, 0xee, 0x9f, 0x09, 0xb0, 0x00, 0x10, 0xa3, 0xc9, 0xef, 0x6b, 0xb8, - 0x15, 0x85, 0x7d, 0x5b, 0x18, 0xcd, 0xf5, 0x8b, 0x9f, 0x80, 0x34, 0xf9, 0xc9, 0xbe, 0xc7, 0x8a, - 0x00, 0xff, 0x0f, 0x07, 0xb7, 0x11, 0xa4, 0x67, 0xcf, 0xaf, 0xf9, 0x46, 0xb4, 0xb3, 0xff, 0x97, - 0xcf, 0xb4, 0xd0, 0x2f, 0x2e, 0x40, 0xc6, 0xf3, 0x6b, 0xb5, 0x26, 0xaf, 0xaf, 0x22, 0xe0, 0xff, - 0xf7, 0x5e, 0x70, 0xe4, 0x0e, 0x30, 0xa5, 0x72, 0xff, 0xdb, 0x43, 0x58, 0xb6, 0x97, 0x6d, 0x76, - 0x6f, 0xf8, 0xdc, 0x6c, 0xf4, 0x05, 0x20, 0x7c, 0x7b, 0x0c, 0xa6, 0x75, 0xbb, 0xb1, 0x6d, 0x7b, - 0xc7, 0x83, 0x1d, 0xeb, 0xb8, 0x70, 0x2e, 0xbf, 0x19, 0x0c, 0x9c, 0x3d, 0x75, 0xb0, 0x2b, 0xc5, - 0xd9, 0x9f, 0x8e, 0x42, 0x6a, 0x51, 0xf3, 0x7c, 0xed, 0x86, 0xd6, 0x42, 0x8f, 0x40, 0xaa, 0x62, - 0xf9, 0x27, 0x4f, 0xac, 0xfb, 0x2e, 0x7d, 0x2b, 0x16, 0x2f, 0xa5, 0xef, 0xde, 0x9e, 0x4e, 0x1a, - 0x44, 0xa6, 0x04, 0x4d, 0xe8, 0x18, 0x24, 0xe9, 0x6f, 0x7a, 0xb1, 0x1a, 0x2f, 0x8d, 0xbe, 0x7a, - 0x7b, 0x7a, 0xa8, 0xad, 0xc7, 0xda, 0xd0, 0x15, 0xc8, 0x54, 0x5b, 0x5b, 0x86, 0xe5, 0x9f, 0x39, - 0x45, 0xe8, 0x88, 0x7b, 0x12, 0xa5, 0xb3, 0x77, 0x6f, 0x4f, 0x9f, 0xdc, 0xd7, 0x40, 0x92, 0x79, - 0xdb, 0x03, 0x13, 0x68, 0xfa, 0xd5, 0x6a, 0x98, 0x0b, 0x5d, 0x86, 0x94, 0x78, 0x64, 0x2f, 0x28, - 0x4a, 0x17, 0xb8, 0x09, 0xf7, 0xc5, 0x1d, 0x90, 0xa1, 0x5f, 0x82, 0x6c, 0xb5, 0x75, 0xd1, 0xb4, - 0x35, 0xee, 0x83, 0xe4, 0x8c, 0x34, 0x17, 0x2b, 0x9d, 0xbb, 0x7b, 0x7b, 0xfa, 0xd4, 0xc0, 0xc4, - 0x1c, 0x4e, 0x99, 0x3b, 0xd8, 0xd0, 0x73, 0x90, 0x0e, 0x9e, 0xe9, 0x2b, 0x90, 0x58, 0xe9, 0xe3, - 0xdc, 0xee, 0xfb, 0xa3, 0x6f, 0xd3, 0x85, 0x2c, 0x67, 0xee, 0x1e, 0x99, 0x91, 0xe6, 0xa4, 0xfb, - 0xb1, 0x9c, 0xfb, 0xa4, 0x83, 0x2d, 0x64, 0xf9, 0x99, 0x53, 0xf4, 0x9d, 0x8b, 0x74, 0xbf, 0x96, - 0x73, 0xfa, 0x36, 0x1d, 0xba, 0x04, 0x23, 0xd5, 0x56, 0xa9, 0xe5, 0x63, 0x8f, 0x7e, 0x0c, 0x95, - 0x2d, 0x3d, 0x75, 0xf7, 0xf6, 0xf4, 0x47, 0x07, 0x64, 0xa5, 0x38, 0x45, 0x10, 0xa0, 0x19, 0xc8, - 0xac, 0xda, 0x6e, 0x43, 0x33, 0x19, 0x1f, 0xb0, 0x77, 0x48, 0x21, 0x11, 0xda, 0x22, 0x23, 0x61, - 0xb3, 0xed, 0xd1, 0xff, 0xa3, 0xf9, 0x39, 0x62, 0xb2, 0xcd, 0x84, 0x0c, 0x48, 0x56, 0x5b, 0x55, - 0xcd, 0xc9, 0x67, 0xe9, 0x0b, 0x8e, 0x87, 0xe6, 0x03, 0x84, 0x58, 0x5b, 0xf3, 0xb4, 0x9d, 0x7e, - 0x09, 0x52, 0x3a, 0x75, 0xf7, 0xf6, 0xf4, 0x53, 0x03, 0xf7, 0x58, 0xd5, 0x1c, 0xda, 0x1d, 0xeb, - 0x01, 0x7d, 0x47, 0x22, 0x0b, 0x8b, 0xdd, 0x10, 0x93, 0x1e, 0x47, 0x69, 0x8f, 0xc7, 0xfa, 0xf6, - 0x18, 0x68, 0xb1, 0x7e, 0xad, 0xcf, 0xbd, 0x76, 0x80, 0x91, 0xb2, 0xc3, 0x13, 0xe9, 0xfa, 0x37, - 0x5f, 0xbb, 0xef, 0x45, 0x1b, 0x58, 0x80, 0x5e, 0x90, 0x60, 0xb4, 0xda, 0x5a, 0xe5, 0x19, 0x98, - 0x58, 0x9e, 0xe3, 0xff, 0x6d, 0xd1, 0xcf, 0xf2, 0x90, 0x1e, 0xb3, 0xfd, 0xcc, 0xe7, 0x5e, 0x9b, - 0x3e, 0x31, 0xb0, 0x11, 0x74, 0x0b, 0xa2, 0x36, 0x74, 0xf6, 0x89, 0x3e, 0x4f, 0xad, 0x28, 0x93, - 0x6c, 0x5e, 0xc3, 0x35, 0x62, 0xc5, 0xd8, 0x3d, 0xac, 0x08, 0xe9, 0x31, 0x2b, 0x8a, 0x24, 0xea, - 0xef, 0xdf, 0x92, 0x10, 0x1f, 0x5a, 0x83, 0x61, 0xe6, 0x61, 0xfa, 0x21, 0x5e, 0xfa, 0x80, 0x61, - 0xd8, 0x9e, 0x1c, 0x85, 0xd3, 0x4c, 0x9d, 0x03, 0x68, 0xc7, 0x18, 0x92, 0x21, 0x7e, 0x0d, 0xb7, - 0xf8, 0xd7, 0x96, 0xe4, 0x27, 0x9a, 0x6c, 0x7f, 0x0e, 0x2d, 0xcd, 0x25, 0xf8, 0x37, 0xce, 0xc5, - 0xd8, 0x39, 0x69, 0xea, 0x69, 0x90, 0xbb, 0x63, 0xe5, 0x40, 0x78, 0x05, 0x50, 0xef, 0x8c, 0x85, - 0x19, 0x92, 0x8c, 0xe1, 0xd1, 0x30, 0x43, 0xe6, 0x84, 0xdc, 0xf6, 0xf9, 0x65, 0xc3, 0xf4, 0x6c, - 0xab, 0x87, 0xb3, 0xdb, 0xff, 0x3f, 0x1f, 0xe7, 0x6c, 0x01, 0x86, 0x99, 0x90, 0x8c, 0xa5, 0x42, - 0xd3, 0x07, 0xcd, 0x72, 0x0a, 0x7b, 0x28, 0xad, 0xbc, 0x7a, 0xa7, 0x30, 0xf4, 0xa3, 0x3b, 0x85, - 0xa1, 0x7f, 0xbd, 0x53, 0x18, 0x7a, 0xfd, 0x4e, 0x41, 0x7a, 0xf3, 0x4e, 0x41, 0x7a, 0xfb, 0x4e, - 0x41, 0x7a, 0xf7, 0x4e, 0x41, 0xba, 0xb5, 0x57, 0x90, 0xbe, 0xb6, 0x57, 0x90, 0xbe, 0xb1, 0x57, - 0x90, 0xbe, 0xb7, 0x57, 0x90, 0x7e, 0xb0, 0x57, 0x90, 0x5e, 0xdd, 0x2b, 0x48, 0x3f, 0xda, 0x2b, - 0x0c, 0xbd, 0xbe, 0x57, 0x90, 0xde, 0xdc, 0x2b, 0x0c, 0xbd, 0xbd, 0x57, 0x90, 0xde, 0xdd, 0x2b, - 0x0c, 0xdd, 0xfa, 0x49, 0x61, 0xe8, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x91, 0xbd, 0xd2, - 0xd1, 0x38, 0x00, 0x00, + 0x68, 0xfa, 0xa0, 0xc6, 0x6d, 0x33, 0x69, 0xa7, 0xf7, 0xce, 0x34, 0x71, 0x1d, 0xb7, 0x49, 0xa7, + 0x71, 0x9a, 0xde, 0x92, 0xe6, 0xd2, 0x24, 0x7d, 0xc9, 0x4b, 0x5a, 0x3f, 0x75, 0x92, 0xb7, 0x3e, + 0x74, 0x64, 0x8b, 0xf1, 0x4c, 0x9d, 0xd6, 0x6d, 0xdc, 0x56, 0x0f, 0x1e, 0xf9, 0xa5, 0x73, 0x6e, + 0x8b, 0xc5, 0x85, 0x5a, 0x50, 0x19, 0x3b, 0x4f, 0xc4, 0xfe, 0xe7, 0xff, 0xbe, 0xf3, 0x9f, 0xff, + 0xfc, 0xe7, 0xfc, 0xff, 0x39, 0xbb, 0x84, 0x9f, 0x9e, 0x83, 0x99, 0xba, 0x6d, 0xd7, 0x4d, 0x7c, + 0xcc, 0x71, 0x6d, 0xdf, 0xde, 0x6e, 0xee, 0x1c, 0xab, 0x61, 0x4f, 0x77, 0x0d, 0xc7, 0xb7, 0xdd, + 0x79, 0x2a, 0x43, 0x63, 0x4c, 0x63, 0x5e, 0x68, 0xcc, 0x56, 0x61, 0xfc, 0x82, 0x61, 0xe2, 0xa5, + 0x40, 0x71, 0x03, 0xfb, 0xe8, 0x2c, 0x24, 0x76, 0x0c, 0x13, 0xe7, 0xa5, 0x99, 0xf8, 0x5c, 0xe6, + 0xf8, 0xc3, 0xf3, 0x5d, 0xa0, 0xf9, 0x4e, 0xc4, 0x3a, 0x11, 0x2b, 0x14, 0x31, 0xfb, 0x46, 0x02, + 0x26, 0xfa, 0xb4, 0x22, 0x04, 0x09, 0x4b, 0x6b, 0x10, 0x46, 0x69, 0x2e, 0xad, 0xd0, 0xdf, 0x28, + 0x0f, 0x23, 0x8e, 0xa6, 0x5f, 0xd5, 0xea, 0x38, 0x1f, 0xa3, 0x62, 0xf1, 0x88, 0x0a, 0x00, 0x35, + 0xec, 0x60, 0xab, 0x86, 0x2d, 0xbd, 0x95, 0x8f, 0xcf, 0xc4, 0xe7, 0xd2, 0x4a, 0x48, 0x82, 0x9e, + 0x84, 0x71, 0xa7, 0xb9, 0x6d, 0x1a, 0xba, 0x1a, 0x52, 0x83, 0x99, 0xf8, 0x5c, 0x52, 0x91, 0x59, + 0xc3, 0x52, 0x5b, 0xf9, 0x31, 0x18, 0xbb, 0x8e, 0xb5, 0xab, 0x61, 0xd5, 0x0c, 0x55, 0xcd, 0x11, + 0x71, 0x48, 0x71, 0x11, 0xb2, 0x0d, 0xec, 0x79, 0x5a, 0x1d, 0xab, 0x7e, 0xcb, 0xc1, 0xf9, 0x04, + 0x1d, 0xfd, 0x4c, 0xcf, 0xe8, 0xbb, 0x47, 0x9e, 0xe1, 0xa8, 0xcd, 0x96, 0x83, 0xd1, 0x02, 0xa4, + 0xb1, 0xd5, 0x6c, 0x30, 0x86, 0xe4, 0x3e, 0xfe, 0x2b, 0x5b, 0xcd, 0x46, 0x37, 0x4b, 0x8a, 0xc0, + 0x38, 0xc5, 0x88, 0x87, 0xdd, 0x6b, 0x86, 0x8e, 0xf3, 0xc3, 0x94, 0xe0, 0xb1, 0x1e, 0x82, 0x0d, + 0xd6, 0xde, 0xcd, 0x21, 0x70, 0x68, 0x11, 0xd2, 0xf8, 0x79, 0x1f, 0x5b, 0x9e, 0x61, 0x5b, 0xf9, + 0x11, 0x4a, 0xf2, 0x48, 0x9f, 0x59, 0xc4, 0x66, 0xad, 0x9b, 0xa2, 0x8d, 0x43, 0xa7, 0x61, 0xc4, + 0x76, 0x7c, 0xc3, 0xb6, 0xbc, 0x7c, 0x6a, 0x46, 0x9a, 0xcb, 0x1c, 0xff, 0x60, 0xdf, 0x40, 0x58, + 0x63, 0x3a, 0x8a, 0x50, 0x46, 0x15, 0x90, 0x3d, 0xbb, 0xe9, 0xea, 0x58, 0xd5, 0xed, 0x1a, 0x56, + 0x0d, 0x6b, 0xc7, 0xce, 0xa7, 0x29, 0xc1, 0x74, 0xef, 0x40, 0xa8, 0xe2, 0xa2, 0x5d, 0xc3, 0x15, + 0x6b, 0xc7, 0x56, 0x72, 0x5e, 0xc7, 0x33, 0x3a, 0x04, 0xc3, 0x5e, 0xcb, 0xf2, 0xb5, 0xe7, 0xf3, + 0x59, 0x1a, 0x21, 0xfc, 0x69, 0xf6, 0xbb, 0xc3, 0x30, 0x36, 0x48, 0x88, 0x9d, 0x87, 0xe4, 0x0e, + 0x19, 0x65, 0x3e, 0x76, 0x10, 0x1f, 0x30, 0x4c, 0xa7, 0x13, 0x87, 0xef, 0xd3, 0x89, 0x0b, 0x90, + 0xb1, 0xb0, 0xe7, 0xe3, 0x1a, 0x8b, 0x88, 0xf8, 0x80, 0x31, 0x05, 0x0c, 0xd4, 0x1b, 0x52, 0x89, + 0xfb, 0x0a, 0xa9, 0x67, 0x61, 0x2c, 0x30, 0x49, 0x75, 0x35, 0xab, 0x2e, 0x62, 0xf3, 0x58, 0x94, + 0x25, 0xf3, 0x65, 0x81, 0x53, 0x08, 0x4c, 0xc9, 0xe1, 0x8e, 0x67, 0xb4, 0x04, 0x60, 0x5b, 0xd8, + 0xde, 0x51, 0x6b, 0x58, 0x37, 0xf3, 0xa9, 0x7d, 0xbc, 0xb4, 0x46, 0x54, 0x7a, 0xbc, 0x64, 0x33, + 0xa9, 0x6e, 0xa2, 0x73, 0xed, 0x50, 0x1b, 0xd9, 0x27, 0x52, 0xaa, 0x6c, 0x91, 0xf5, 0x44, 0xdb, + 0x16, 0xe4, 0x5c, 0x4c, 0xe2, 0x1e, 0xd7, 0xf8, 0xc8, 0xd2, 0xd4, 0x88, 0xf9, 0xc8, 0x91, 0x29, + 0x1c, 0xc6, 0x06, 0x36, 0xea, 0x86, 0x1f, 0xd1, 0x51, 0x08, 0x04, 0x2a, 0x0d, 0x2b, 0xa0, 0xbb, + 0x50, 0x56, 0x08, 0x57, 0xb5, 0x06, 0x9e, 0xba, 0x01, 0xb9, 0x4e, 0xf7, 0xa0, 0x49, 0x48, 0x7a, + 0xbe, 0xe6, 0xfa, 0x34, 0x0a, 0x93, 0x0a, 0x7b, 0x40, 0x32, 0xc4, 0xb1, 0x55, 0xa3, 0xbb, 0x5c, + 0x52, 0x21, 0x3f, 0xd1, 0x2f, 0xb4, 0x07, 0x1c, 0xa7, 0x03, 0x7e, 0xb4, 0x77, 0x46, 0x3b, 0x98, + 0xbb, 0xc7, 0x3d, 0x75, 0x06, 0x46, 0x3b, 0x06, 0x30, 0x68, 0xd7, 0xb3, 0xbf, 0x02, 0x0f, 0xf4, + 0xa5, 0x46, 0xcf, 0xc2, 0x64, 0xd3, 0x32, 0x2c, 0x1f, 0xbb, 0x8e, 0x8b, 0x49, 0xc4, 0xb2, 0xae, + 0xf2, 0xff, 0x3e, 0xb2, 0x4f, 0xcc, 0x6d, 0x85, 0xb5, 0x19, 0x8b, 0x32, 0xd1, 0xec, 0x15, 0x3e, + 0x91, 0x4e, 0xbd, 0x39, 0x22, 0xdf, 0xbc, 0x79, 0xf3, 0x66, 0x6c, 0xf6, 0x73, 0xc3, 0x30, 0xd9, + 0x6f, 0xcd, 0xf4, 0x5d, 0xbe, 0x87, 0x60, 0xd8, 0x6a, 0x36, 0xb6, 0xb1, 0x4b, 0x9d, 0x94, 0x54, + 0xf8, 0x13, 0x5a, 0x80, 0xa4, 0xa9, 0x6d, 0x63, 0x33, 0x9f, 0x98, 0x91, 0xe6, 0x72, 0xc7, 0x9f, + 0x1c, 0x68, 0x55, 0xce, 0xaf, 0x10, 0x88, 0xc2, 0x90, 0xe8, 0x69, 0x48, 0xf0, 0x2d, 0x9a, 0x30, + 0x3c, 0x31, 0x18, 0x03, 0x59, 0x4b, 0x0a, 0xc5, 0xa1, 0x0f, 0x40, 0x9a, 0xfc, 0x65, 0xb1, 0x31, + 0x4c, 0x6d, 0x4e, 0x11, 0x01, 0x89, 0x0b, 0x34, 0x05, 0x29, 0xba, 0x4c, 0x6a, 0x58, 0xa4, 0xb6, + 0xe0, 0x99, 0x04, 0x56, 0x0d, 0xef, 0x68, 0x4d, 0xd3, 0x57, 0xaf, 0x69, 0x66, 0x13, 0xd3, 0x80, + 0x4f, 0x2b, 0x59, 0x2e, 0xfc, 0x04, 0x91, 0xa1, 0x69, 0xc8, 0xb0, 0x55, 0x65, 0x58, 0x35, 0xfc, + 0x3c, 0xdd, 0x3d, 0x93, 0x0a, 0x5b, 0x68, 0x15, 0x22, 0x21, 0xdd, 0x5f, 0xf1, 0x6c, 0x4b, 0x84, + 0x26, 0xed, 0x82, 0x08, 0x68, 0xf7, 0x67, 0xba, 0x37, 0xee, 0x87, 0xfa, 0x0f, 0xaf, 0x3b, 0xa6, + 0x66, 0xbf, 0x1d, 0x83, 0x04, 0xdd, 0x2f, 0xc6, 0x20, 0xb3, 0x79, 0x79, 0xbd, 0xac, 0x2e, 0xad, + 0x6d, 0x95, 0x56, 0xca, 0xb2, 0x84, 0x72, 0x00, 0x54, 0x70, 0x61, 0x65, 0x6d, 0x61, 0x53, 0x8e, + 0x05, 0xcf, 0x95, 0xd5, 0xcd, 0xd3, 0x27, 0xe5, 0x78, 0x00, 0xd8, 0x62, 0x82, 0x44, 0x58, 0xe1, + 0xc4, 0x71, 0x39, 0x89, 0x64, 0xc8, 0x32, 0x82, 0xca, 0xb3, 0xe5, 0xa5, 0xd3, 0x27, 0xe5, 0xe1, + 0x4e, 0xc9, 0x89, 0xe3, 0xf2, 0x08, 0x1a, 0x85, 0x34, 0x95, 0x94, 0xd6, 0xd6, 0x56, 0xe4, 0x54, + 0xc0, 0xb9, 0xb1, 0xa9, 0x54, 0x56, 0x97, 0xe5, 0x74, 0xc0, 0xb9, 0xac, 0xac, 0x6d, 0xad, 0xcb, + 0x10, 0x30, 0x54, 0xcb, 0x1b, 0x1b, 0x0b, 0xcb, 0x65, 0x39, 0x13, 0x68, 0x94, 0x2e, 0x6f, 0x96, + 0x37, 0xe4, 0x6c, 0x87, 0x59, 0x27, 0x8e, 0xcb, 0xa3, 0x41, 0x17, 0xe5, 0xd5, 0xad, 0xaa, 0x9c, + 0x43, 0xe3, 0x30, 0xca, 0xba, 0x10, 0x46, 0x8c, 0x75, 0x89, 0x4e, 0x9f, 0x94, 0xe5, 0xb6, 0x21, + 0x8c, 0x65, 0xbc, 0x43, 0x70, 0xfa, 0xa4, 0x8c, 0x66, 0x17, 0x21, 0x49, 0xa3, 0x0b, 0x21, 0xc8, + 0xad, 0x2c, 0x94, 0xca, 0x2b, 0xea, 0xda, 0xfa, 0x66, 0x65, 0x6d, 0x75, 0x61, 0x45, 0x96, 0xda, + 0x32, 0xa5, 0xfc, 0xf1, 0xad, 0x8a, 0x52, 0x5e, 0x92, 0x63, 0x61, 0xd9, 0x7a, 0x79, 0x61, 0xb3, + 0xbc, 0x24, 0xc7, 0x67, 0x75, 0x98, 0xec, 0xb7, 0x4f, 0xf6, 0x5d, 0x19, 0xa1, 0x29, 0x8e, 0xed, + 0x33, 0xc5, 0x94, 0xab, 0x67, 0x8a, 0x7f, 0x1c, 0x83, 0x89, 0x3e, 0xb9, 0xa2, 0x6f, 0x27, 0xcf, + 0x40, 0x92, 0x85, 0x28, 0xcb, 0x9e, 0x8f, 0xf7, 0x4d, 0x3a, 0x34, 0x60, 0x7b, 0x32, 0x28, 0xc5, + 0x85, 0x2b, 0x88, 0xf8, 0x3e, 0x15, 0x04, 0xa1, 0xe8, 0xd9, 0xd3, 0x7f, 0xb9, 0x67, 0x4f, 0x67, + 0x69, 0xef, 0xf4, 0x20, 0x69, 0x8f, 0xca, 0x0e, 0xb6, 0xb7, 0x27, 0xfb, 0xec, 0xed, 0xe7, 0x61, + 0xbc, 0x87, 0x68, 0xe0, 0x3d, 0xf6, 0x05, 0x09, 0xf2, 0xfb, 0x39, 0x27, 0x62, 0xa7, 0x8b, 0x75, + 0xec, 0x74, 0xe7, 0xbb, 0x3d, 0x78, 0x64, 0xff, 0x49, 0xe8, 0x99, 0xeb, 0x57, 0x24, 0x38, 0xd4, + 0xbf, 0x52, 0xec, 0x6b, 0xc3, 0xd3, 0x30, 0xdc, 0xc0, 0xfe, 0xae, 0x2d, 0xaa, 0xa5, 0x47, 0xfb, + 0xe4, 0x60, 0xd2, 0xdc, 0x3d, 0xd9, 0x1c, 0x15, 0x4e, 0xe2, 0xf1, 0xfd, 0xca, 0x3d, 0x66, 0x4d, + 0x8f, 0xa5, 0x9f, 0x8d, 0xc1, 0x03, 0x7d, 0xc9, 0xfb, 0x1a, 0xfa, 0x10, 0x80, 0x61, 0x39, 0x4d, + 0x9f, 0x55, 0x44, 0x6c, 0x83, 0x4d, 0x53, 0x09, 0xdd, 0xbc, 0xc8, 0xe6, 0xd9, 0xf4, 0x83, 0xf6, + 0x38, 0x6d, 0x07, 0x26, 0xa2, 0x0a, 0x67, 0xdb, 0x86, 0x26, 0xa8, 0xa1, 0x85, 0x7d, 0x46, 0xda, + 0x13, 0x98, 0x4f, 0x81, 0xac, 0x9b, 0x06, 0xb6, 0x7c, 0xd5, 0xf3, 0x5d, 0xac, 0x35, 0x0c, 0xab, + 0x4e, 0x33, 0x48, 0xaa, 0x98, 0xdc, 0xd1, 0x4c, 0x0f, 0x2b, 0x63, 0xac, 0x79, 0x43, 0xb4, 0x12, + 0x04, 0x0d, 0x20, 0x37, 0x84, 0x18, 0xee, 0x40, 0xb0, 0xe6, 0x00, 0x31, 0xfb, 0x8d, 0x14, 0x64, + 0x42, 0x75, 0x35, 0x3a, 0x02, 0xd9, 0x2b, 0xda, 0x35, 0x4d, 0x15, 0x67, 0x25, 0xe6, 0x89, 0x0c, + 0x91, 0xad, 0xf3, 0xf3, 0xd2, 0x53, 0x30, 0x49, 0x55, 0xec, 0xa6, 0x8f, 0x5d, 0x55, 0x37, 0x35, + 0xcf, 0xa3, 0x4e, 0x4b, 0x51, 0x55, 0x44, 0xda, 0xd6, 0x48, 0xd3, 0xa2, 0x68, 0x41, 0xa7, 0x60, + 0x82, 0x22, 0x1a, 0x4d, 0xd3, 0x37, 0x1c, 0x13, 0xab, 0xe4, 0xf4, 0xe6, 0xd1, 0x4c, 0x12, 0x58, + 0x36, 0x4e, 0x34, 0xaa, 0x5c, 0x81, 0x58, 0xe4, 0xa1, 0x25, 0x78, 0x88, 0xc2, 0xea, 0xd8, 0xc2, + 0xae, 0xe6, 0x63, 0x15, 0x7f, 0xaa, 0xa9, 0x99, 0x9e, 0xaa, 0x59, 0x35, 0x75, 0x57, 0xf3, 0x76, + 0xf3, 0x93, 0x84, 0xa0, 0x14, 0xcb, 0x4b, 0xca, 0x61, 0xa2, 0xb8, 0xcc, 0xf5, 0xca, 0x54, 0x6d, + 0xc1, 0xaa, 0x7d, 0x4c, 0xf3, 0x76, 0x51, 0x11, 0x0e, 0x51, 0x16, 0xcf, 0x77, 0x0d, 0xab, 0xae, + 0xea, 0xbb, 0x58, 0xbf, 0xaa, 0x36, 0xfd, 0x9d, 0xb3, 0xf9, 0x0f, 0x84, 0xfb, 0xa7, 0x16, 0x6e, + 0x50, 0x9d, 0x45, 0xa2, 0xb2, 0xe5, 0xef, 0x9c, 0x45, 0x1b, 0x90, 0x25, 0x93, 0xd1, 0x30, 0x6e, + 0x60, 0x75, 0xc7, 0x76, 0x69, 0x6a, 0xcc, 0xf5, 0xd9, 0x9a, 0x42, 0x1e, 0x9c, 0x5f, 0xe3, 0x80, + 0xaa, 0x5d, 0xc3, 0xc5, 0xe4, 0xc6, 0x7a, 0xb9, 0xbc, 0xa4, 0x64, 0x04, 0xcb, 0x05, 0xdb, 0x25, + 0x01, 0x55, 0xb7, 0x03, 0x07, 0x67, 0x58, 0x40, 0xd5, 0x6d, 0xe1, 0xde, 0x53, 0x30, 0xa1, 0xeb, + 0x6c, 0xcc, 0x86, 0xae, 0xf2, 0x33, 0x96, 0x97, 0x97, 0x3b, 0x9c, 0xa5, 0xeb, 0xcb, 0x4c, 0x81, + 0xc7, 0xb8, 0x87, 0xce, 0xc1, 0x03, 0x6d, 0x67, 0x85, 0x81, 0xe3, 0x3d, 0xa3, 0xec, 0x86, 0x9e, + 0x82, 0x09, 0xa7, 0xd5, 0x0b, 0x44, 0x1d, 0x3d, 0x3a, 0xad, 0x6e, 0xd8, 0x19, 0x98, 0x74, 0x76, + 0x9d, 0x5e, 0xdc, 0x13, 0x61, 0x1c, 0x72, 0x76, 0x9d, 0x6e, 0xe0, 0x23, 0xf4, 0xc0, 0xed, 0x62, + 0x5d, 0xf3, 0x71, 0x2d, 0xff, 0x60, 0x58, 0x3d, 0xd4, 0x80, 0x8e, 0x81, 0xac, 0xeb, 0x2a, 0xb6, + 0xb4, 0x6d, 0x13, 0xab, 0x9a, 0x8b, 0x2d, 0xcd, 0xcb, 0x4f, 0x87, 0x95, 0x73, 0xba, 0x5e, 0xa6, + 0xad, 0x0b, 0xb4, 0x11, 0x3d, 0x01, 0xe3, 0xf6, 0xf6, 0x15, 0x9d, 0x85, 0xa4, 0xea, 0xb8, 0x78, + 0xc7, 0x78, 0x3e, 0xff, 0x30, 0xf5, 0xef, 0x18, 0x69, 0xa0, 0x01, 0xb9, 0x4e, 0xc5, 0xe8, 0x71, + 0x90, 0x75, 0x6f, 0x57, 0x73, 0x1d, 0xba, 0x27, 0x7b, 0x8e, 0xa6, 0xe3, 0xfc, 0x23, 0x4c, 0x95, + 0xc9, 0x57, 0x85, 0x98, 0x2c, 0x09, 0xef, 0xba, 0xb1, 0xe3, 0x0b, 0xc6, 0xc7, 0xd8, 0x92, 0xa0, + 0x32, 0xce, 0x36, 0x07, 0x32, 0x71, 0x45, 0x47, 0xc7, 0x73, 0x54, 0x2d, 0xe7, 0xec, 0x3a, 0xe1, + 0x7e, 0x8f, 0xc2, 0x28, 0xd1, 0x6c, 0x77, 0xfa, 0x38, 0x2b, 0xc8, 0x9c, 0xdd, 0x50, 0x8f, 0xef, + 0x59, 0x6d, 0x3c, 0x5b, 0x84, 0x6c, 0x38, 0x3e, 0x51, 0x1a, 0x58, 0x84, 0xca, 0x12, 0x29, 0x56, + 0x16, 0xd7, 0x96, 0x48, 0x99, 0xf1, 0x5c, 0x59, 0x8e, 0x91, 0x72, 0x67, 0xa5, 0xb2, 0x59, 0x56, + 0x95, 0xad, 0xd5, 0xcd, 0x4a, 0xb5, 0x2c, 0xc7, 0xc3, 0x75, 0xf5, 0x0f, 0x62, 0x90, 0xeb, 0x3c, + 0x22, 0xa1, 0x8f, 0xc0, 0x83, 0xe2, 0x3e, 0xc3, 0xc3, 0xbe, 0x7a, 0xdd, 0x70, 0xe9, 0x92, 0x69, + 0x68, 0x2c, 0x7d, 0x05, 0x93, 0x36, 0xc9, 0xb5, 0x36, 0xb0, 0x7f, 0xc9, 0x70, 0xc9, 0x82, 0x68, + 0x68, 0x3e, 0x5a, 0x81, 0x69, 0xcb, 0x56, 0x3d, 0x5f, 0xb3, 0x6a, 0x9a, 0x5b, 0x53, 0xdb, 0x37, + 0x49, 0xaa, 0xa6, 0xeb, 0xd8, 0xf3, 0x6c, 0x96, 0xaa, 0x02, 0x96, 0x0f, 0x5a, 0xf6, 0x06, 0x57, + 0x6e, 0xef, 0xe1, 0x0b, 0x5c, 0xb5, 0x2b, 0xc0, 0xe2, 0xfb, 0x05, 0xd8, 0x07, 0x20, 0xdd, 0xd0, + 0x1c, 0x15, 0x5b, 0xbe, 0xdb, 0xa2, 0x85, 0x71, 0x4a, 0x49, 0x35, 0x34, 0xa7, 0x4c, 0x9e, 0xdf, + 0x9f, 0xf3, 0xc9, 0xbf, 0xc5, 0x21, 0x1b, 0x2e, 0x8e, 0xc9, 0x59, 0x43, 0xa7, 0x79, 0x44, 0xa2, + 0x3b, 0xcd, 0xd1, 0x7b, 0x96, 0xd2, 0xf3, 0x8b, 0x24, 0xc1, 0x14, 0x87, 0x59, 0xc9, 0xaa, 0x30, + 0x24, 0x49, 0xee, 0x64, 0x6f, 0xc1, 0xac, 0x44, 0x48, 0x29, 0xfc, 0x09, 0x2d, 0xc3, 0xf0, 0x15, + 0x8f, 0x72, 0x0f, 0x53, 0xee, 0x87, 0xef, 0xcd, 0x7d, 0x71, 0x83, 0x92, 0xa7, 0x2f, 0x6e, 0xa8, + 0xab, 0x6b, 0x4a, 0x75, 0x61, 0x45, 0xe1, 0x70, 0x74, 0x18, 0x12, 0xa6, 0x76, 0xa3, 0xd5, 0x99, + 0x8a, 0xa8, 0x68, 0x50, 0xc7, 0x1f, 0x86, 0xc4, 0x75, 0xac, 0x5d, 0xed, 0x4c, 0x00, 0x54, 0xf4, + 0x1e, 0x86, 0xfe, 0x31, 0x48, 0x52, 0x7f, 0x21, 0x00, 0xee, 0x31, 0x79, 0x08, 0xa5, 0x20, 0xb1, + 0xb8, 0xa6, 0x90, 0xf0, 0x97, 0x21, 0xcb, 0xa4, 0xea, 0x7a, 0xa5, 0xbc, 0x58, 0x96, 0x63, 0xb3, + 0xa7, 0x60, 0x98, 0x39, 0x81, 0x2c, 0x8d, 0xc0, 0x0d, 0xf2, 0x10, 0x7f, 0xe4, 0x1c, 0x92, 0x68, + 0xdd, 0xaa, 0x96, 0xca, 0x8a, 0x1c, 0x0b, 0x4f, 0xaf, 0x07, 0xd9, 0x70, 0x5d, 0xfc, 0xfe, 0xc4, + 0xd4, 0xf7, 0x24, 0xc8, 0x84, 0xea, 0x5c, 0x52, 0xa0, 0x68, 0xa6, 0x69, 0x5f, 0x57, 0x35, 0xd3, + 0xd0, 0x3c, 0x1e, 0x14, 0x40, 0x45, 0x0b, 0x44, 0x32, 0xe8, 0xa4, 0xbd, 0x2f, 0xc6, 0xbf, 0x2c, + 0x81, 0xdc, 0x5d, 0x62, 0x76, 0x19, 0x28, 0xfd, 0x5c, 0x0d, 0x7c, 0x49, 0x82, 0x5c, 0x67, 0x5d, + 0xd9, 0x65, 0xde, 0x91, 0x9f, 0xab, 0x79, 0xaf, 0xc7, 0x60, 0xb4, 0xa3, 0x9a, 0x1c, 0xd4, 0xba, + 0x4f, 0xc1, 0xb8, 0x51, 0xc3, 0x0d, 0xc7, 0xf6, 0xb1, 0xa5, 0xb7, 0x54, 0x13, 0x5f, 0xc3, 0x66, + 0x7e, 0x96, 0x6e, 0x14, 0xc7, 0xee, 0x5d, 0xaf, 0xce, 0x57, 0xda, 0xb8, 0x15, 0x02, 0x2b, 0x4e, + 0x54, 0x96, 0xca, 0xd5, 0xf5, 0xb5, 0xcd, 0xf2, 0xea, 0xe2, 0x65, 0x75, 0x6b, 0xf5, 0x17, 0x57, + 0xd7, 0x2e, 0xad, 0x2a, 0xb2, 0xd1, 0xa5, 0xf6, 0x1e, 0x2e, 0xf5, 0x75, 0x90, 0xbb, 0x8d, 0x42, + 0x0f, 0x42, 0x3f, 0xb3, 0xe4, 0x21, 0x34, 0x01, 0x63, 0xab, 0x6b, 0xea, 0x46, 0x65, 0xa9, 0xac, + 0x96, 0x2f, 0x5c, 0x28, 0x2f, 0x6e, 0x6e, 0xb0, 0x1b, 0x88, 0x40, 0x7b, 0xb3, 0x73, 0x51, 0xbf, + 0x18, 0x87, 0x89, 0x3e, 0x96, 0xa0, 0x05, 0x7e, 0x76, 0x60, 0xc7, 0x99, 0x0f, 0x0f, 0x62, 0xfd, + 0x3c, 0x49, 0xf9, 0xeb, 0x9a, 0xeb, 0xf3, 0xa3, 0xc6, 0xe3, 0x40, 0xbc, 0x64, 0xf9, 0xc6, 0x8e, + 0x81, 0x5d, 0x7e, 0x61, 0xc3, 0x0e, 0x14, 0x63, 0x6d, 0x39, 0xbb, 0xb3, 0xf9, 0x10, 0x20, 0xc7, + 0xf6, 0x0c, 0xdf, 0xb8, 0x86, 0x55, 0xc3, 0x12, 0xb7, 0x3b, 0xe4, 0x80, 0x91, 0x50, 0x64, 0xd1, + 0x52, 0xb1, 0xfc, 0x40, 0xdb, 0xc2, 0x75, 0xad, 0x4b, 0x9b, 0x6c, 0xe0, 0x71, 0x45, 0x16, 0x2d, + 0x81, 0xf6, 0x11, 0xc8, 0xd6, 0xec, 0x26, 0xa9, 0xba, 0x98, 0x1e, 0xc9, 0x17, 0x92, 0x92, 0x61, + 0xb2, 0x40, 0x85, 0xd7, 0xd3, 0xed, 0x6b, 0xa5, 0xac, 0x92, 0x61, 0x32, 0xa6, 0xf2, 0x18, 0x8c, + 0x69, 0xf5, 0xba, 0x4b, 0xc8, 0x05, 0x11, 0x3b, 0x21, 0xe4, 0x02, 0x31, 0x55, 0x9c, 0xba, 0x08, + 0x29, 0xe1, 0x07, 0x92, 0x92, 0x89, 0x27, 0x54, 0x87, 0x1d, 0x7b, 0x63, 0x73, 0x69, 0x25, 0x65, + 0x89, 0xc6, 0x23, 0x90, 0x35, 0x3c, 0xb5, 0x7d, 0x4b, 0x1e, 0x9b, 0x89, 0xcd, 0xa5, 0x94, 0x8c, + 0xe1, 0x05, 0x37, 0x8c, 0xb3, 0xaf, 0xc4, 0x20, 0xd7, 0x79, 0xcb, 0x8f, 0x96, 0x20, 0x65, 0xda, + 0xba, 0x46, 0x43, 0x8b, 0xbd, 0x62, 0x9a, 0x8b, 0x78, 0x31, 0x30, 0xbf, 0xc2, 0xf5, 0x95, 0x00, + 0x39, 0xf5, 0x2f, 0x12, 0xa4, 0x84, 0x18, 0x1d, 0x82, 0x84, 0xa3, 0xf9, 0xbb, 0x94, 0x2e, 0x59, + 0x8a, 0xc9, 0x92, 0x42, 0x9f, 0x89, 0xdc, 0x73, 0x34, 0x8b, 0x86, 0x00, 0x97, 0x93, 0x67, 0x32, + 0xaf, 0x26, 0xd6, 0x6a, 0xf4, 0xf8, 0x61, 0x37, 0x1a, 0xd8, 0xf2, 0x3d, 0x31, 0xaf, 0x5c, 0xbe, + 0xc8, 0xc5, 0xe8, 0x49, 0x18, 0xf7, 0x5d, 0xcd, 0x30, 0x3b, 0x74, 0x13, 0x54, 0x57, 0x16, 0x0d, + 0x81, 0x72, 0x11, 0x0e, 0x0b, 0xde, 0x1a, 0xf6, 0x35, 0x7d, 0x17, 0xd7, 0xda, 0xa0, 0x61, 0x7a, + 0xcd, 0xf0, 0x20, 0x57, 0x58, 0xe2, 0xed, 0x02, 0x3b, 0xfb, 0x23, 0x09, 0xc6, 0xc5, 0x81, 0xa9, + 0x16, 0x38, 0xab, 0x0a, 0xa0, 0x59, 0x96, 0xed, 0x87, 0xdd, 0xd5, 0x1b, 0xca, 0x3d, 0xb8, 0xf9, + 0x85, 0x00, 0xa4, 0x84, 0x08, 0xa6, 0x1a, 0x00, 0xed, 0x96, 0x7d, 0xdd, 0x36, 0x0d, 0x19, 0xfe, + 0x0a, 0x87, 0xbe, 0x07, 0x64, 0x47, 0x6c, 0x60, 0x22, 0x72, 0xb2, 0x42, 0x93, 0x90, 0xdc, 0xc6, + 0x75, 0xc3, 0xe2, 0x17, 0xb3, 0xec, 0x41, 0x5c, 0x84, 0x24, 0x82, 0x8b, 0x90, 0xd2, 0x27, 0x61, + 0x42, 0xb7, 0x1b, 0xdd, 0xe6, 0x96, 0xe4, 0xae, 0x63, 0xbe, 0xf7, 0x31, 0xe9, 0x39, 0x68, 0x97, + 0x98, 0xef, 0x48, 0xd2, 0x97, 0x62, 0xf1, 0xe5, 0xf5, 0xd2, 0x57, 0x63, 0x53, 0xcb, 0x0c, 0xba, + 0x2e, 0x46, 0xaa, 0xe0, 0x1d, 0x13, 0xeb, 0xc4, 0x7a, 0xf8, 0xf2, 0x93, 0xf0, 0xe1, 0xba, 0xe1, + 0xef, 0x36, 0xb7, 0xe7, 0x75, 0xbb, 0x71, 0xac, 0x6e, 0xd7, 0xed, 0xf6, 0xab, 0x4f, 0xf2, 0x44, + 0x1f, 0xe8, 0x2f, 0xfe, 0xfa, 0x33, 0x1d, 0x48, 0xa7, 0x22, 0xdf, 0x95, 0x16, 0x57, 0x61, 0x82, + 0x2b, 0xab, 0xf4, 0xfd, 0x0b, 0x3b, 0x45, 0xa0, 0x7b, 0xde, 0x61, 0xe5, 0xbf, 0xfe, 0x06, 0x4d, + 0xd7, 0xca, 0x38, 0x87, 0x92, 0x36, 0x76, 0xd0, 0x28, 0x2a, 0xf0, 0x40, 0x07, 0x1f, 0x5b, 0x9a, + 0xd8, 0x8d, 0x60, 0xfc, 0x01, 0x67, 0x9c, 0x08, 0x31, 0x6e, 0x70, 0x68, 0x71, 0x11, 0x46, 0x0f, + 0xc2, 0xf5, 0x4f, 0x9c, 0x2b, 0x8b, 0xc3, 0x24, 0xcb, 0x30, 0x46, 0x49, 0xf4, 0xa6, 0xe7, 0xdb, + 0x0d, 0xba, 0xef, 0xdd, 0x9b, 0xe6, 0x9f, 0xdf, 0x60, 0x6b, 0x25, 0x47, 0x60, 0x8b, 0x01, 0xaa, + 0x58, 0x04, 0xfa, 0xca, 0xa9, 0x86, 0x75, 0x33, 0x82, 0xe1, 0x55, 0x6e, 0x48, 0xa0, 0x5f, 0xfc, + 0x04, 0x4c, 0x92, 0xdf, 0x74, 0x5b, 0x0a, 0x5b, 0x12, 0x7d, 0xe1, 0x95, 0xff, 0xd1, 0x0b, 0x6c, + 0x39, 0x4e, 0x04, 0x04, 0x21, 0x9b, 0x42, 0xb3, 0x58, 0xc7, 0xbe, 0x8f, 0x5d, 0x4f, 0xd5, 0xcc, + 0x7e, 0xe6, 0x85, 0x6e, 0x0c, 0xf2, 0x9f, 0x7f, 0xab, 0x73, 0x16, 0x97, 0x19, 0x72, 0xc1, 0x34, + 0x8b, 0x5b, 0xf0, 0x60, 0x9f, 0xa8, 0x18, 0x80, 0xf3, 0x45, 0xce, 0x39, 0xd9, 0x13, 0x19, 0x84, + 0x76, 0x1d, 0x84, 0x3c, 0x98, 0xcb, 0x01, 0x38, 0xff, 0x84, 0x73, 0x22, 0x8e, 0x15, 0x53, 0x4a, + 0x18, 0x2f, 0xc2, 0xf8, 0x35, 0xec, 0x6e, 0xdb, 0x1e, 0xbf, 0xa5, 0x19, 0x80, 0xee, 0x25, 0x4e, + 0x37, 0xc6, 0x81, 0xf4, 0xda, 0x86, 0x70, 0x9d, 0x83, 0xd4, 0x8e, 0xa6, 0xe3, 0x01, 0x28, 0xbe, + 0xc0, 0x29, 0x46, 0x88, 0x3e, 0x81, 0x2e, 0x40, 0xb6, 0x6e, 0xf3, 0xcc, 0x14, 0x0d, 0x7f, 0x99, + 0xc3, 0x33, 0x02, 0xc3, 0x29, 0x1c, 0xdb, 0x69, 0x9a, 0x24, 0x6d, 0x45, 0x53, 0xfc, 0xa9, 0xa0, + 0x10, 0x18, 0x4e, 0x71, 0x00, 0xb7, 0xfe, 0x99, 0xa0, 0xf0, 0x42, 0xfe, 0x7c, 0x06, 0x32, 0xb6, + 0x65, 0xb6, 0x6c, 0x6b, 0x10, 0x23, 0xbe, 0xc8, 0x19, 0x80, 0x43, 0x08, 0xc1, 0x79, 0x48, 0x0f, + 0x3a, 0x11, 0x7f, 0xf1, 0x96, 0x58, 0x1e, 0x62, 0x06, 0x96, 0x61, 0x4c, 0x6c, 0x50, 0x86, 0x6d, + 0x0d, 0x40, 0xf1, 0x65, 0x4e, 0x91, 0x0b, 0xc1, 0xf8, 0x30, 0x7c, 0xec, 0xf9, 0x75, 0x3c, 0x08, + 0xc9, 0x2b, 0x62, 0x18, 0x1c, 0xc2, 0x5d, 0xb9, 0x8d, 0x2d, 0x7d, 0x77, 0x30, 0x86, 0xaf, 0x08, + 0x57, 0x0a, 0x0c, 0xa1, 0x58, 0x84, 0xd1, 0x86, 0xe6, 0x7a, 0xbb, 0x9a, 0x39, 0xd0, 0x74, 0xfc, + 0x25, 0xe7, 0xc8, 0x06, 0x20, 0xee, 0x91, 0xa6, 0x75, 0x10, 0x9a, 0xaf, 0x0a, 0x8f, 0x84, 0x60, + 0x7c, 0xe9, 0x79, 0x3e, 0xbd, 0xd2, 0x3a, 0x08, 0xdb, 0x5f, 0x89, 0xa5, 0xc7, 0xb0, 0xd5, 0x30, + 0xe3, 0x79, 0x48, 0x7b, 0xc6, 0x8d, 0x81, 0x68, 0xfe, 0x5a, 0xcc, 0x34, 0x05, 0x10, 0xf0, 0x65, + 0x38, 0xdc, 0x37, 0x4d, 0x0c, 0x40, 0xf6, 0x37, 0x9c, 0xec, 0x50, 0x9f, 0x54, 0xc1, 0xb7, 0x84, + 0x83, 0x52, 0xfe, 0xad, 0xd8, 0x12, 0x70, 0x17, 0xd7, 0x3a, 0x39, 0x2b, 0x78, 0xda, 0xce, 0xc1, + 0xbc, 0xf6, 0x77, 0xc2, 0x6b, 0x0c, 0xdb, 0xe1, 0xb5, 0x4d, 0x38, 0xc4, 0x19, 0x0f, 0x36, 0xaf, + 0x5f, 0x13, 0x1b, 0x2b, 0x43, 0x6f, 0x75, 0xce, 0xee, 0x27, 0x61, 0x2a, 0x70, 0xa7, 0x28, 0x4a, + 0x3d, 0xb5, 0xa1, 0x39, 0x03, 0x30, 0x7f, 0x9d, 0x33, 0x8b, 0x1d, 0x3f, 0xa8, 0x6a, 0xbd, 0xaa, + 0xe6, 0x10, 0xf2, 0x67, 0x21, 0x2f, 0xc8, 0x9b, 0x96, 0x8b, 0x75, 0xbb, 0x6e, 0x19, 0x37, 0x70, + 0x6d, 0x00, 0xea, 0xbf, 0xef, 0x9a, 0xaa, 0xad, 0x10, 0x9c, 0x30, 0x57, 0x40, 0x0e, 0x6a, 0x15, + 0xd5, 0x68, 0x38, 0xb6, 0xeb, 0x47, 0x30, 0x7e, 0x43, 0xcc, 0x54, 0x80, 0xab, 0x50, 0x58, 0xb1, + 0x0c, 0x39, 0xfa, 0x38, 0x68, 0x48, 0x7e, 0x93, 0x13, 0x8d, 0xb6, 0x51, 0x7c, 0xe3, 0xd0, 0xed, + 0x86, 0xa3, 0xb9, 0x83, 0xec, 0x7f, 0xdf, 0x12, 0x1b, 0x07, 0x87, 0xf0, 0x8d, 0xc3, 0x6f, 0x39, + 0x98, 0x64, 0xfb, 0x01, 0x18, 0xbe, 0x2d, 0x36, 0x0e, 0x81, 0xe1, 0x14, 0xa2, 0x60, 0x18, 0x80, + 0xe2, 0x1f, 0x04, 0x85, 0xc0, 0x10, 0x8a, 0x8f, 0xb7, 0x13, 0xad, 0x8b, 0xeb, 0x86, 0xe7, 0xbb, + 0xac, 0x14, 0xbe, 0x37, 0xd5, 0x77, 0xde, 0xea, 0x2c, 0xc2, 0x94, 0x10, 0x94, 0xec, 0x44, 0xfc, + 0x0a, 0x95, 0x9e, 0x94, 0xa2, 0x0d, 0xfb, 0xae, 0xd8, 0x89, 0x42, 0x30, 0x62, 0x5b, 0xa8, 0x42, + 0x24, 0x6e, 0xd7, 0xc9, 0xf9, 0x60, 0x00, 0xba, 0xef, 0x75, 0x19, 0xb7, 0x21, 0xb0, 0x84, 0x33, + 0x54, 0xff, 0x34, 0xad, 0xab, 0xb8, 0x35, 0x50, 0x74, 0xfe, 0x63, 0x57, 0xfd, 0xb3, 0xc5, 0x90, + 0x6c, 0x0f, 0x19, 0xeb, 0xaa, 0xa7, 0x50, 0xd4, 0xc7, 0x3a, 0xf9, 0x5f, 0xbd, 0xc3, 0xc7, 0xdb, + 0x59, 0x4e, 0x15, 0x57, 0x48, 0x90, 0x77, 0x16, 0x3d, 0xd1, 0x64, 0x2f, 0xdc, 0x09, 0xe2, 0xbc, + 0xa3, 0xe6, 0x29, 0x5e, 0x80, 0xd1, 0x8e, 0x82, 0x27, 0x9a, 0xea, 0xd7, 0x38, 0x55, 0x36, 0x5c, + 0xef, 0x14, 0x4f, 0x41, 0x82, 0x14, 0x2f, 0xd1, 0xf0, 0x5f, 0xe7, 0x70, 0xaa, 0x5e, 0xfc, 0x28, + 0xa4, 0x44, 0xd1, 0x12, 0x0d, 0xfd, 0x0d, 0x0e, 0x0d, 0x20, 0x04, 0x2e, 0x0a, 0x96, 0x68, 0xf8, + 0x67, 0x04, 0x5c, 0x40, 0x08, 0x7c, 0x70, 0x17, 0x7e, 0xff, 0xb7, 0x12, 0x3c, 0xe9, 0x08, 0xdf, + 0x9d, 0x87, 0x11, 0x5e, 0xa9, 0x44, 0xa3, 0x3f, 0xcb, 0x3b, 0x17, 0x88, 0xe2, 0x19, 0x48, 0x0e, + 0xe8, 0xf0, 0xdf, 0xe6, 0x50, 0xa6, 0x5f, 0x5c, 0x84, 0x4c, 0xa8, 0x3a, 0x89, 0x86, 0xff, 0x0e, + 0x87, 0x87, 0x51, 0xc4, 0x74, 0x5e, 0x9d, 0x44, 0x13, 0xfc, 0xae, 0x30, 0x9d, 0x23, 0x88, 0xdb, + 0x44, 0x61, 0x12, 0x8d, 0xfe, 0x3d, 0xe1, 0x75, 0x01, 0x29, 0x3e, 0x03, 0xe9, 0x20, 0xd9, 0x44, + 0xe3, 0x7f, 0x9f, 0xe3, 0xdb, 0x18, 0xe2, 0x81, 0x50, 0xb2, 0x8b, 0xa6, 0xf8, 0x03, 0xe1, 0x81, + 0x10, 0x8a, 0x2c, 0xa3, 0xee, 0x02, 0x26, 0x9a, 0xe9, 0x0f, 0xc5, 0x32, 0xea, 0xaa, 0x5f, 0xc8, + 0x6c, 0xd2, 0x3d, 0x3f, 0x9a, 0xe2, 0x8f, 0xc4, 0x6c, 0x52, 0x7d, 0x62, 0x46, 0x77, 0x45, 0x10, + 0xcd, 0xf1, 0xc7, 0xc2, 0x8c, 0xae, 0x82, 0xa0, 0xb8, 0x0e, 0xa8, 0xb7, 0x1a, 0x88, 0xe6, 0xfb, + 0x1c, 0xe7, 0x1b, 0xef, 0x29, 0x06, 0x8a, 0x97, 0xe0, 0x50, 0xff, 0x4a, 0x20, 0x9a, 0xf5, 0xf3, + 0x77, 0xba, 0xce, 0x6e, 0xe1, 0x42, 0xa0, 0xb8, 0xd9, 0x4e, 0x29, 0xe1, 0x2a, 0x20, 0x9a, 0xf6, + 0xc5, 0x3b, 0x9d, 0x1b, 0x77, 0xb8, 0x08, 0x28, 0x2e, 0x00, 0xb4, 0x13, 0x70, 0x34, 0xd7, 0x4b, + 0x9c, 0x2b, 0x04, 0x22, 0x4b, 0x83, 0xe7, 0xdf, 0x68, 0xfc, 0x17, 0xc4, 0xd2, 0xe0, 0x08, 0xb2, + 0x34, 0x44, 0xea, 0x8d, 0x46, 0xbf, 0x2c, 0x96, 0x86, 0x80, 0x90, 0xc8, 0x0e, 0x65, 0xb7, 0x68, + 0x86, 0x2f, 0x8a, 0xc8, 0x0e, 0xa1, 0x8a, 0xab, 0x30, 0xde, 0x93, 0x10, 0xa3, 0xa9, 0xbe, 0xc4, + 0xa9, 0xe4, 0xee, 0x7c, 0x18, 0x4e, 0x5e, 0x3c, 0x19, 0x46, 0xb3, 0xfd, 0x79, 0x57, 0xf2, 0xe2, + 0xb9, 0xb0, 0x78, 0x1e, 0x52, 0x56, 0xd3, 0x34, 0xc9, 0xe2, 0x41, 0xf7, 0xfe, 0xc0, 0x2e, 0xff, + 0x93, 0x77, 0xb9, 0x77, 0x04, 0xa0, 0x78, 0x0a, 0x92, 0xb8, 0xb1, 0x8d, 0x6b, 0x51, 0xc8, 0xff, + 0x78, 0x57, 0x6c, 0x98, 0x44, 0xbb, 0xf8, 0x0c, 0x00, 0xbb, 0x1a, 0xa1, 0xaf, 0xfd, 0x22, 0xb0, + 0xff, 0xf9, 0x2e, 0xff, 0xf4, 0xa5, 0x0d, 0x69, 0x13, 0xb0, 0x0f, 0x69, 0xee, 0x4d, 0xf0, 0x56, + 0x27, 0x01, 0x9d, 0x91, 0x73, 0x30, 0x72, 0xc5, 0xb3, 0x2d, 0x5f, 0xab, 0x47, 0xa1, 0xff, 0x8b, + 0xa3, 0x85, 0x3e, 0x71, 0x58, 0xc3, 0x76, 0xb1, 0xaf, 0xd5, 0xbd, 0x28, 0xec, 0x7f, 0x73, 0x6c, + 0x00, 0x20, 0x60, 0x5d, 0xf3, 0xfc, 0x41, 0xc6, 0xfd, 0x53, 0x01, 0x16, 0x00, 0x62, 0x34, 0xf9, + 0x7d, 0x15, 0xb7, 0xa2, 0xb0, 0x6f, 0x0b, 0xa3, 0xb9, 0x7e, 0xf1, 0xa3, 0x90, 0x26, 0x3f, 0xd9, + 0xf7, 0x6c, 0x11, 0xe0, 0xff, 0xe1, 0xe0, 0x36, 0x82, 0xf4, 0xec, 0xf9, 0x35, 0xdf, 0x88, 0x76, + 0xf6, 0xff, 0xf2, 0x99, 0x16, 0xfa, 0xc5, 0x05, 0xc8, 0x78, 0x7e, 0xad, 0xd6, 0xe4, 0xf5, 0x69, + 0x04, 0xfc, 0xff, 0xde, 0x0d, 0xae, 0x2c, 0x02, 0x0c, 0x99, 0xed, 0xeb, 0x57, 0x7d, 0xc7, 0xa6, + 0xaf, 0x39, 0xa2, 0x18, 0xee, 0x70, 0x86, 0x10, 0xa4, 0x54, 0xee, 0x7f, 0x7d, 0x0b, 0xcb, 0xf6, + 0xb2, 0xcd, 0x2e, 0x6e, 0x9f, 0x9b, 0x8d, 0xbe, 0x81, 0x85, 0x6f, 0x8e, 0xc1, 0xb4, 0x6e, 0x37, + 0xb6, 0x6d, 0xef, 0x58, 0xb0, 0x1d, 0x1f, 0x13, 0xb3, 0xc3, 0xaf, 0x66, 0x83, 0xd9, 0x9a, 0x3a, + 0xd8, 0x9d, 0xee, 0xec, 0x4f, 0x46, 0x21, 0xb5, 0xa8, 0x79, 0xbe, 0x76, 0x5d, 0x6b, 0xa1, 0x47, + 0x20, 0x55, 0xb1, 0xfc, 0x13, 0xc7, 0xd7, 0x7d, 0x97, 0xbe, 0x96, 0x8c, 0x97, 0xd2, 0x77, 0x6f, + 0x4d, 0x27, 0x0d, 0x22, 0x53, 0x82, 0x26, 0x74, 0x14, 0x92, 0xf4, 0x37, 0xbd, 0xd9, 0x8e, 0x97, + 0x46, 0x5f, 0xbd, 0x35, 0x3d, 0xd4, 0xd6, 0x63, 0x6d, 0xe8, 0x32, 0x64, 0xaa, 0xad, 0x2d, 0xc3, + 0xf2, 0x4f, 0x9f, 0x24, 0x74, 0xc4, 0x3b, 0x89, 0xd2, 0x99, 0xbb, 0xb7, 0xa6, 0x4f, 0xec, 0x6b, + 0x20, 0x29, 0x2b, 0xda, 0x03, 0x13, 0x68, 0xfa, 0xd9, 0x70, 0x98, 0x0b, 0x5d, 0x82, 0x94, 0x78, + 0x64, 0x6f, 0x88, 0x4a, 0xe7, 0xb9, 0x09, 0xf7, 0xc5, 0x1d, 0x90, 0xa1, 0x5f, 0x82, 0x6c, 0xb5, + 0x75, 0xc1, 0xb4, 0x35, 0xee, 0x83, 0xe4, 0x8c, 0x34, 0x17, 0x2b, 0x9d, 0xbd, 0x7b, 0x6b, 0xfa, + 0xe4, 0xc0, 0xc4, 0x1c, 0x4e, 0x99, 0x3b, 0xd8, 0xd0, 0x73, 0x90, 0x0e, 0x9e, 0xe9, 0x3b, 0xa8, + 0x58, 0xe9, 0x23, 0xdc, 0xee, 0xfb, 0xa3, 0x6f, 0xd3, 0x85, 0x2c, 0x67, 0xee, 0x1e, 0x99, 0x91, + 0xe6, 0xa4, 0xfb, 0xb1, 0x9c, 0xfb, 0xa4, 0x83, 0x2d, 0x64, 0xf9, 0xe9, 0x93, 0xf4, 0xa5, 0x97, + 0x74, 0xbf, 0x96, 0x73, 0xfa, 0x36, 0x1d, 0xba, 0x08, 0x23, 0xd5, 0x56, 0xa9, 0xe5, 0x63, 0x8f, + 0x7e, 0x8d, 0x96, 0x2d, 0x3d, 0x75, 0xf7, 0xd6, 0xf4, 0x87, 0x06, 0x64, 0xa5, 0x38, 0x45, 0x10, + 0xa0, 0x19, 0xc8, 0xac, 0xda, 0x6e, 0x43, 0x33, 0x19, 0x1f, 0xb0, 0x97, 0x78, 0x21, 0x11, 0xda, + 0x22, 0x23, 0x61, 0xb3, 0xed, 0xd1, 0x7f, 0x64, 0xfa, 0x19, 0x62, 0xb2, 0xcd, 0x84, 0x0c, 0x48, + 0x56, 0x5b, 0x55, 0xcd, 0xc9, 0x67, 0xe9, 0x1b, 0xa6, 0x87, 0xe6, 0x03, 0x84, 0x58, 0x5b, 0xf3, + 0xb4, 0x9d, 0x7e, 0x8a, 0x53, 0x3a, 0x79, 0xf7, 0xd6, 0xf4, 0x53, 0x03, 0xf7, 0x58, 0xd5, 0x1c, + 0xda, 0x1d, 0xeb, 0x01, 0x7d, 0x4b, 0x22, 0x0b, 0x8b, 0x5d, 0xd1, 0x93, 0x1e, 0x47, 0x69, 0x8f, + 0x47, 0xfb, 0xf6, 0x18, 0x68, 0xb1, 0x7e, 0xad, 0x4f, 0xbf, 0x76, 0x80, 0x91, 0xb2, 0x93, 0x21, + 0xe9, 0xfa, 0x37, 0x5f, 0xbb, 0xef, 0x45, 0x1b, 0x58, 0x80, 0x5e, 0x90, 0x60, 0xb4, 0xda, 0x5a, + 0xe5, 0x29, 0x9c, 0x58, 0x9e, 0xe3, 0xff, 0xee, 0xd2, 0xcf, 0xf2, 0x90, 0x1e, 0xb3, 0xfd, 0xf4, + 0xa7, 0x5f, 0x9b, 0x3e, 0x3e, 0xb0, 0x11, 0x74, 0x0b, 0xa2, 0x36, 0x74, 0xf6, 0x89, 0x3e, 0x43, + 0xad, 0x28, 0x93, 0x72, 0xa0, 0x86, 0x6b, 0xc4, 0x8a, 0xb1, 0x7b, 0x58, 0x11, 0xd2, 0x63, 0x56, + 0x14, 0x49, 0xd4, 0xdf, 0xbf, 0x25, 0x21, 0x3e, 0xb4, 0x06, 0xc3, 0xcc, 0xc3, 0xf4, 0x4b, 0xc8, + 0xf4, 0x01, 0xc3, 0xb0, 0x3d, 0x39, 0x0a, 0xa7, 0x99, 0x3a, 0x0b, 0xd0, 0x8e, 0x31, 0x24, 0x43, + 0xfc, 0x2a, 0x6e, 0xf1, 0xcf, 0x5d, 0xc9, 0x4f, 0x34, 0xd9, 0xfe, 0x1e, 0x5d, 0x9a, 0x4b, 0xf0, + 0x8f, 0xcc, 0x8b, 0xb1, 0xb3, 0xd2, 0xd4, 0xd3, 0x20, 0x77, 0xc7, 0xca, 0x81, 0xf0, 0x0a, 0xa0, + 0xde, 0x19, 0x0b, 0x33, 0x24, 0x19, 0xc3, 0xa3, 0x61, 0x86, 0xcc, 0x71, 0xb9, 0xed, 0xf3, 0x4b, + 0x86, 0xe9, 0xd9, 0x56, 0x0f, 0x67, 0xb7, 0xff, 0x7f, 0x36, 0xce, 0xd9, 0x02, 0x0c, 0x33, 0x21, + 0x19, 0x4b, 0x85, 0xa6, 0x0f, 0x9a, 0xe5, 0x14, 0xf6, 0x50, 0x5a, 0x79, 0xf5, 0x76, 0x61, 0xe8, + 0x87, 0xb7, 0x0b, 0x43, 0xff, 0x7a, 0xbb, 0x30, 0xf4, 0xfa, 0xed, 0x82, 0xf4, 0xe6, 0xed, 0x82, + 0xf4, 0xf6, 0xed, 0x82, 0xf4, 0xce, 0xed, 0x82, 0x74, 0x73, 0xaf, 0x20, 0x7d, 0x65, 0xaf, 0x20, + 0x7d, 0x6d, 0xaf, 0x20, 0x7d, 0x67, 0xaf, 0x20, 0x7d, 0x7f, 0xaf, 0x20, 0xbd, 0xba, 0x57, 0x90, + 0x7e, 0xb8, 0x57, 0x18, 0x7a, 0x7d, 0xaf, 0x20, 0xbd, 0xb9, 0x57, 0x18, 0x7a, 0x7b, 0xaf, 0x20, + 0xbd, 0xb3, 0x57, 0x18, 0xba, 0xf9, 0xe3, 0xc2, 0xd0, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x5e, + 0xff, 0x73, 0x3e, 0x52, 0x3a, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -1406,6 +1411,9 @@ return dAtA } func (m *Castaway) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int32Ptr != nil { @@ -1486,6 +1494,9 @@ } func (m *Wilson) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/combos/neither/casttype.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/combos/neither/casttype.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/combos/neither/casttype.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/combos/neither/casttype.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -123,274 +123,279 @@ func CasttypeDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4263 bytes of a gzipped FileDescriptorSet + // 4346 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5b, 0x70, 0x1b, 0xd7, - 0x79, 0xe6, 0xe2, 0x42, 0x02, 0x3f, 0x40, 0x70, 0x79, 0x48, 0x4b, 0x10, 0x13, 0x81, 0x14, 0xe5, + 0x79, 0xe6, 0xe2, 0x42, 0x02, 0x3f, 0x40, 0x70, 0x79, 0x48, 0xcb, 0x30, 0x13, 0x81, 0x14, 0xe5, 0x0b, 0x6d, 0x27, 0x94, 0x47, 0x77, 0x41, 0x89, 0x5d, 0x82, 0x84, 0x18, 0xa8, 0x04, 0xc9, 0x2c, 0xc9, 0xc8, 0x72, 0xda, 0xd9, 0x59, 0x2e, 0x0e, 0xc1, 0x95, 0x16, 0xbb, 0x9b, 0xdd, 0x85, 0x64, - 0x68, 0xfa, 0xa0, 0xc6, 0x6d, 0x33, 0x69, 0xa7, 0xf7, 0xce, 0x34, 0x71, 0x1d, 0xb7, 0xe9, 0x4c, - 0xea, 0x34, 0xbd, 0xe5, 0xd2, 0xa4, 0x49, 0x9f, 0xf2, 0x92, 0xd6, 0x4f, 0x9d, 0xe4, 0xad, 0x0f, - 0x1d, 0xd9, 0x62, 0x3c, 0x53, 0xa7, 0x75, 0x1b, 0xb7, 0xf5, 0x83, 0x47, 0x7e, 0xe9, 0x9c, 0xdb, - 0x62, 0x71, 0xa1, 0x16, 0x54, 0xc6, 0xce, 0x13, 0xb1, 0xff, 0xf9, 0xbf, 0xef, 0xfc, 0xe7, 0x3f, - 0xff, 0x39, 0xff, 0x7f, 0xce, 0x2e, 0xe1, 0xa7, 0x17, 0x60, 0xa6, 0x6e, 0xdb, 0x75, 0x13, 0x9f, - 0x70, 0x5c, 0xdb, 0xb7, 0xb7, 0x9b, 0x3b, 0x27, 0x6a, 0xd8, 0xd3, 0x5d, 0xc3, 0xf1, 0x6d, 0x77, - 0x9e, 0xca, 0xd0, 0x18, 0xd3, 0x98, 0x17, 0x1a, 0xb3, 0x55, 0x18, 0xbf, 0x64, 0x98, 0x78, 0x29, - 0x50, 0xdc, 0xc0, 0x3e, 0x3a, 0x0f, 0x89, 0x1d, 0xc3, 0xc4, 0x79, 0x69, 0x26, 0x3e, 0x97, 0x39, - 0xf9, 0xf0, 0x7c, 0x17, 0x68, 0xbe, 0x13, 0xb1, 0x4e, 0xc4, 0x0a, 0x45, 0xcc, 0xbe, 0x91, 0x80, - 0x89, 0x3e, 0xad, 0x08, 0x41, 0xc2, 0xd2, 0x1a, 0x84, 0x51, 0x9a, 0x4b, 0x2b, 0xf4, 0x37, 0xca, - 0xc3, 0x88, 0xa3, 0xe9, 0xd7, 0xb5, 0x3a, 0xce, 0xc7, 0xa8, 0x58, 0x3c, 0xa2, 0x02, 0x40, 0x0d, - 0x3b, 0xd8, 0xaa, 0x61, 0x4b, 0x6f, 0xe5, 0xe3, 0x33, 0xf1, 0xb9, 0xb4, 0x12, 0x92, 0xa0, 0x27, - 0x61, 0xdc, 0x69, 0x6e, 0x9b, 0x86, 0xae, 0x86, 0xd4, 0x60, 0x26, 0x3e, 0x97, 0x54, 0x64, 0xd6, - 0xb0, 0xd4, 0x56, 0x7e, 0x0c, 0xc6, 0x6e, 0x62, 0xed, 0x7a, 0x58, 0x35, 0x43, 0x55, 0x73, 0x44, - 0x1c, 0x52, 0x5c, 0x84, 0x6c, 0x03, 0x7b, 0x9e, 0x56, 0xc7, 0xaa, 0xdf, 0x72, 0x70, 0x3e, 0x41, - 0x47, 0x3f, 0xd3, 0x33, 0xfa, 0xee, 0x91, 0x67, 0x38, 0x6a, 0xb3, 0xe5, 0x60, 0xb4, 0x00, 0x69, - 0x6c, 0x35, 0x1b, 0x8c, 0x21, 0xb9, 0x8f, 0xff, 0xca, 0x56, 0xb3, 0xd1, 0xcd, 0x92, 0x22, 0x30, - 0x4e, 0x31, 0xe2, 0x61, 0xf7, 0x86, 0xa1, 0xe3, 0xfc, 0x30, 0x25, 0x78, 0xac, 0x87, 0x60, 0x83, - 0xb5, 0x77, 0x73, 0x08, 0x1c, 0x5a, 0x84, 0x34, 0x7e, 0xde, 0xc7, 0x96, 0x67, 0xd8, 0x56, 0x7e, - 0x84, 0x92, 0x3c, 0xd2, 0x67, 0x16, 0xb1, 0x59, 0xeb, 0xa6, 0x68, 0xe3, 0xd0, 0x59, 0x18, 0xb1, - 0x1d, 0xdf, 0xb0, 0x2d, 0x2f, 0x9f, 0x9a, 0x91, 0xe6, 0x32, 0x27, 0x3f, 0xdc, 0x37, 0x10, 0xd6, - 0x98, 0x8e, 0x22, 0x94, 0x51, 0x05, 0x64, 0xcf, 0x6e, 0xba, 0x3a, 0x56, 0x75, 0xbb, 0x86, 0x55, - 0xc3, 0xda, 0xb1, 0xf3, 0x69, 0x4a, 0x30, 0xdd, 0x3b, 0x10, 0xaa, 0xb8, 0x68, 0xd7, 0x70, 0xc5, - 0xda, 0xb1, 0x95, 0x9c, 0xd7, 0xf1, 0x8c, 0x0e, 0xc1, 0xb0, 0xd7, 0xb2, 0x7c, 0xed, 0xf9, 0x7c, - 0x96, 0x46, 0x08, 0x7f, 0x9a, 0xfd, 0xde, 0x30, 0x8c, 0x0d, 0x12, 0x62, 0x17, 0x21, 0xb9, 0x43, - 0x46, 0x99, 0x8f, 0x1d, 0xc4, 0x07, 0x0c, 0xd3, 0xe9, 0xc4, 0xe1, 0x07, 0x74, 0xe2, 0x02, 0x64, - 0x2c, 0xec, 0xf9, 0xb8, 0xc6, 0x22, 0x22, 0x3e, 0x60, 0x4c, 0x01, 0x03, 0xf5, 0x86, 0x54, 0xe2, - 0x81, 0x42, 0xea, 0x59, 0x18, 0x0b, 0x4c, 0x52, 0x5d, 0xcd, 0xaa, 0x8b, 0xd8, 0x3c, 0x11, 0x65, - 0xc9, 0x7c, 0x59, 0xe0, 0x14, 0x02, 0x53, 0x72, 0xb8, 0xe3, 0x19, 0x2d, 0x01, 0xd8, 0x16, 0xb6, - 0x77, 0xd4, 0x1a, 0xd6, 0xcd, 0x7c, 0x6a, 0x1f, 0x2f, 0xad, 0x11, 0x95, 0x1e, 0x2f, 0xd9, 0x4c, - 0xaa, 0x9b, 0xe8, 0x42, 0x3b, 0xd4, 0x46, 0xf6, 0x89, 0x94, 0x2a, 0x5b, 0x64, 0x3d, 0xd1, 0xb6, - 0x05, 0x39, 0x17, 0x93, 0xb8, 0xc7, 0x35, 0x3e, 0xb2, 0x34, 0x35, 0x62, 0x3e, 0x72, 0x64, 0x0a, - 0x87, 0xb1, 0x81, 0x8d, 0xba, 0xe1, 0x47, 0x74, 0x1c, 0x02, 0x81, 0x4a, 0xc3, 0x0a, 0xe8, 0x2e, - 0x94, 0x15, 0xc2, 0x55, 0xad, 0x81, 0xa7, 0x6e, 0x41, 0xae, 0xd3, 0x3d, 0x68, 0x12, 0x92, 0x9e, - 0xaf, 0xb9, 0x3e, 0x8d, 0xc2, 0xa4, 0xc2, 0x1e, 0x90, 0x0c, 0x71, 0x6c, 0xd5, 0xe8, 0x2e, 0x97, - 0x54, 0xc8, 0x4f, 0xf4, 0x0b, 0xed, 0x01, 0xc7, 0xe9, 0x80, 0x1f, 0xed, 0x9d, 0xd1, 0x0e, 0xe6, - 0xee, 0x71, 0x4f, 0x9d, 0x83, 0xd1, 0x8e, 0x01, 0x0c, 0xda, 0xf5, 0xec, 0xaf, 0xc0, 0x43, 0x7d, - 0xa9, 0xd1, 0xb3, 0x30, 0xd9, 0xb4, 0x0c, 0xcb, 0xc7, 0xae, 0xe3, 0x62, 0x12, 0xb1, 0xac, 0xab, - 0xfc, 0xbf, 0x8f, 0xec, 0x13, 0x73, 0x5b, 0x61, 0x6d, 0xc6, 0xa2, 0x4c, 0x34, 0x7b, 0x85, 0x4f, - 0xa4, 0x53, 0x6f, 0x8e, 0xc8, 0xb7, 0x6f, 0xdf, 0xbe, 0x1d, 0x9b, 0xfd, 0xc2, 0x30, 0x4c, 0xf6, - 0x5b, 0x33, 0x7d, 0x97, 0xef, 0x21, 0x18, 0xb6, 0x9a, 0x8d, 0x6d, 0xec, 0x52, 0x27, 0x25, 0x15, - 0xfe, 0x84, 0x16, 0x20, 0x69, 0x6a, 0xdb, 0xd8, 0xcc, 0x27, 0x66, 0xa4, 0xb9, 0xdc, 0xc9, 0x27, - 0x07, 0x5a, 0x95, 0xf3, 0x2b, 0x04, 0xa2, 0x30, 0x24, 0x7a, 0x1a, 0x12, 0x7c, 0x8b, 0x26, 0x0c, - 0x4f, 0x0c, 0xc6, 0x40, 0xd6, 0x92, 0x42, 0x71, 0xe8, 0x43, 0x90, 0x26, 0x7f, 0x59, 0x6c, 0x0c, - 0x53, 0x9b, 0x53, 0x44, 0x40, 0xe2, 0x02, 0x4d, 0x41, 0x8a, 0x2e, 0x93, 0x1a, 0x16, 0xa9, 0x2d, - 0x78, 0x26, 0x81, 0x55, 0xc3, 0x3b, 0x5a, 0xd3, 0xf4, 0xd5, 0x1b, 0x9a, 0xd9, 0xc4, 0x34, 0xe0, - 0xd3, 0x4a, 0x96, 0x0b, 0x3f, 0x45, 0x64, 0x68, 0x1a, 0x32, 0x6c, 0x55, 0x19, 0x56, 0x0d, 0x3f, - 0x4f, 0x77, 0xcf, 0xa4, 0xc2, 0x16, 0x5a, 0x85, 0x48, 0x48, 0xf7, 0xd7, 0x3c, 0xdb, 0x12, 0xa1, - 0x49, 0xbb, 0x20, 0x02, 0xda, 0xfd, 0xb9, 0xee, 0x8d, 0xfb, 0x68, 0xff, 0xe1, 0x75, 0xc7, 0xd4, - 0xec, 0x77, 0x62, 0x90, 0xa0, 0xfb, 0xc5, 0x18, 0x64, 0x36, 0xaf, 0xae, 0x97, 0xd5, 0xa5, 0xb5, - 0xad, 0xd2, 0x4a, 0x59, 0x96, 0x50, 0x0e, 0x80, 0x0a, 0x2e, 0xad, 0xac, 0x2d, 0x6c, 0xca, 0xb1, - 0xe0, 0xb9, 0xb2, 0xba, 0x79, 0xf6, 0xb4, 0x1c, 0x0f, 0x00, 0x5b, 0x4c, 0x90, 0x08, 0x2b, 0x9c, - 0x3a, 0x29, 0x27, 0x91, 0x0c, 0x59, 0x46, 0x50, 0x79, 0xb6, 0xbc, 0x74, 0xf6, 0xb4, 0x3c, 0xdc, - 0x29, 0x39, 0x75, 0x52, 0x1e, 0x41, 0xa3, 0x90, 0xa6, 0x92, 0xd2, 0xda, 0xda, 0x8a, 0x9c, 0x0a, - 0x38, 0x37, 0x36, 0x95, 0xca, 0xea, 0xb2, 0x9c, 0x0e, 0x38, 0x97, 0x95, 0xb5, 0xad, 0x75, 0x19, - 0x02, 0x86, 0x6a, 0x79, 0x63, 0x63, 0x61, 0xb9, 0x2c, 0x67, 0x02, 0x8d, 0xd2, 0xd5, 0xcd, 0xf2, - 0x86, 0x9c, 0xed, 0x30, 0xeb, 0xd4, 0x49, 0x79, 0x34, 0xe8, 0xa2, 0xbc, 0xba, 0x55, 0x95, 0x73, - 0x68, 0x1c, 0x46, 0x59, 0x17, 0xc2, 0x88, 0xb1, 0x2e, 0xd1, 0xd9, 0xd3, 0xb2, 0xdc, 0x36, 0x84, - 0xb1, 0x8c, 0x77, 0x08, 0xce, 0x9e, 0x96, 0xd1, 0xec, 0x22, 0x24, 0x69, 0x74, 0x21, 0x04, 0xb9, - 0x95, 0x85, 0x52, 0x79, 0x45, 0x5d, 0x5b, 0xdf, 0xac, 0xac, 0xad, 0x2e, 0xac, 0xc8, 0x52, 0x5b, - 0xa6, 0x94, 0x3f, 0xb9, 0x55, 0x51, 0xca, 0x4b, 0x72, 0x2c, 0x2c, 0x5b, 0x2f, 0x2f, 0x6c, 0x96, - 0x97, 0xe4, 0xf8, 0xac, 0x0e, 0x93, 0xfd, 0xf6, 0xc9, 0xbe, 0x2b, 0x23, 0x34, 0xc5, 0xb1, 0x7d, - 0xa6, 0x98, 0x72, 0xf5, 0x4c, 0xf1, 0x8f, 0x63, 0x30, 0xd1, 0x27, 0x57, 0xf4, 0xed, 0xe4, 0x19, - 0x48, 0xb2, 0x10, 0x65, 0xd9, 0xf3, 0xf1, 0xbe, 0x49, 0x87, 0x06, 0x6c, 0x4f, 0x06, 0xa5, 0xb8, - 0x70, 0x05, 0x11, 0xdf, 0xa7, 0x82, 0x20, 0x14, 0x3d, 0x7b, 0xfa, 0x2f, 0xf7, 0xec, 0xe9, 0x2c, - 0xed, 0x9d, 0x1d, 0x24, 0xed, 0x51, 0xd9, 0xc1, 0xf6, 0xf6, 0x64, 0x9f, 0xbd, 0xfd, 0x22, 0x8c, - 0xf7, 0x10, 0x0d, 0xbc, 0xc7, 0xbe, 0x20, 0x41, 0x7e, 0x3f, 0xe7, 0x44, 0xec, 0x74, 0xb1, 0x8e, - 0x9d, 0xee, 0x62, 0xb7, 0x07, 0x8f, 0xed, 0x3f, 0x09, 0x3d, 0x73, 0xfd, 0x8a, 0x04, 0x87, 0xfa, - 0x57, 0x8a, 0x7d, 0x6d, 0x78, 0x1a, 0x86, 0x1b, 0xd8, 0xdf, 0xb5, 0x45, 0xb5, 0xf4, 0x68, 0x9f, - 0x1c, 0x4c, 0x9a, 0xbb, 0x27, 0x9b, 0xa3, 0xc2, 0x49, 0x3c, 0xbe, 0x5f, 0xb9, 0xc7, 0xac, 0xe9, - 0xb1, 0xf4, 0xf3, 0x31, 0x78, 0xa8, 0x2f, 0x79, 0x5f, 0x43, 0x8f, 0x02, 0x18, 0x96, 0xd3, 0xf4, - 0x59, 0x45, 0xc4, 0x36, 0xd8, 0x34, 0x95, 0xd0, 0xcd, 0x8b, 0x6c, 0x9e, 0x4d, 0x3f, 0x68, 0x8f, - 0xd3, 0x76, 0x60, 0x22, 0xaa, 0x70, 0xbe, 0x6d, 0x68, 0x82, 0x1a, 0x5a, 0xd8, 0x67, 0xa4, 0x3d, - 0x81, 0xf9, 0x14, 0xc8, 0xba, 0x69, 0x60, 0xcb, 0x57, 0x3d, 0xdf, 0xc5, 0x5a, 0xc3, 0xb0, 0xea, - 0x34, 0x83, 0xa4, 0x8a, 0xc9, 0x1d, 0xcd, 0xf4, 0xb0, 0x32, 0xc6, 0x9a, 0x37, 0x44, 0x2b, 0x41, - 0xd0, 0x00, 0x72, 0x43, 0x88, 0xe1, 0x0e, 0x04, 0x6b, 0x0e, 0x10, 0xb3, 0xdf, 0x4a, 0x41, 0x26, - 0x54, 0x57, 0xa3, 0x63, 0x90, 0xbd, 0xa6, 0xdd, 0xd0, 0x54, 0x71, 0x56, 0x62, 0x9e, 0xc8, 0x10, - 0xd9, 0x3a, 0x3f, 0x2f, 0x3d, 0x05, 0x93, 0x54, 0xc5, 0x6e, 0xfa, 0xd8, 0x55, 0x75, 0x53, 0xf3, - 0x3c, 0xea, 0xb4, 0x14, 0x55, 0x45, 0xa4, 0x6d, 0x8d, 0x34, 0x2d, 0x8a, 0x16, 0x74, 0x06, 0x26, - 0x28, 0xa2, 0xd1, 0x34, 0x7d, 0xc3, 0x31, 0xb1, 0x4a, 0x4e, 0x6f, 0x1e, 0xcd, 0x24, 0x81, 0x65, - 0xe3, 0x44, 0xa3, 0xca, 0x15, 0x88, 0x45, 0x1e, 0x5a, 0x82, 0xa3, 0x14, 0x56, 0xc7, 0x16, 0x76, - 0x35, 0x1f, 0xab, 0xf8, 0x33, 0x4d, 0xcd, 0xf4, 0x54, 0xcd, 0xaa, 0xa9, 0xbb, 0x9a, 0xb7, 0x9b, - 0x9f, 0x24, 0x04, 0xa5, 0x58, 0x5e, 0x52, 0x8e, 0x10, 0xc5, 0x65, 0xae, 0x57, 0xa6, 0x6a, 0x0b, - 0x56, 0xed, 0x13, 0x9a, 0xb7, 0x8b, 0x8a, 0x70, 0x88, 0xb2, 0x78, 0xbe, 0x6b, 0x58, 0x75, 0x55, - 0xdf, 0xc5, 0xfa, 0x75, 0xb5, 0xe9, 0xef, 0x9c, 0xcf, 0x7f, 0x28, 0xdc, 0x3f, 0xb5, 0x70, 0x83, - 0xea, 0x2c, 0x12, 0x95, 0x2d, 0x7f, 0xe7, 0x3c, 0xda, 0x80, 0x2c, 0x99, 0x8c, 0x86, 0x71, 0x0b, - 0xab, 0x3b, 0xb6, 0x4b, 0x53, 0x63, 0xae, 0xcf, 0xd6, 0x14, 0xf2, 0xe0, 0xfc, 0x1a, 0x07, 0x54, - 0xed, 0x1a, 0x2e, 0x26, 0x37, 0xd6, 0xcb, 0xe5, 0x25, 0x25, 0x23, 0x58, 0x2e, 0xd9, 0x2e, 0x09, - 0xa8, 0xba, 0x1d, 0x38, 0x38, 0xc3, 0x02, 0xaa, 0x6e, 0x0b, 0xf7, 0x9e, 0x81, 0x09, 0x5d, 0x67, - 0x63, 0x36, 0x74, 0x95, 0x9f, 0xb1, 0xbc, 0xbc, 0xdc, 0xe1, 0x2c, 0x5d, 0x5f, 0x66, 0x0a, 0x3c, - 0xc6, 0x3d, 0x74, 0x01, 0x1e, 0x6a, 0x3b, 0x2b, 0x0c, 0x1c, 0xef, 0x19, 0x65, 0x37, 0xf4, 0x0c, - 0x4c, 0x38, 0xad, 0x5e, 0x20, 0xea, 0xe8, 0xd1, 0x69, 0x75, 0xc3, 0xce, 0xc1, 0xa4, 0xb3, 0xeb, - 0xf4, 0xe2, 0x9e, 0x08, 0xe3, 0x90, 0xb3, 0xeb, 0x74, 0x03, 0x1f, 0xa1, 0x07, 0x6e, 0x17, 0xeb, - 0x9a, 0x8f, 0x6b, 0xf9, 0xc3, 0x61, 0xf5, 0x50, 0x03, 0x3a, 0x01, 0xb2, 0xae, 0xab, 0xd8, 0xd2, - 0xb6, 0x4d, 0xac, 0x6a, 0x2e, 0xb6, 0x34, 0x2f, 0x3f, 0x1d, 0x56, 0xce, 0xe9, 0x7a, 0x99, 0xb6, - 0x2e, 0xd0, 0x46, 0xf4, 0x04, 0x8c, 0xdb, 0xdb, 0xd7, 0x74, 0x16, 0x92, 0xaa, 0xe3, 0xe2, 0x1d, - 0xe3, 0xf9, 0xfc, 0xc3, 0xd4, 0xbf, 0x63, 0xa4, 0x81, 0x06, 0xe4, 0x3a, 0x15, 0xa3, 0xc7, 0x41, - 0xd6, 0xbd, 0x5d, 0xcd, 0x75, 0xe8, 0x9e, 0xec, 0x39, 0x9a, 0x8e, 0xf3, 0x8f, 0x30, 0x55, 0x26, - 0x5f, 0x15, 0x62, 0xb2, 0x24, 0xbc, 0x9b, 0xc6, 0x8e, 0x2f, 0x18, 0x1f, 0x63, 0x4b, 0x82, 0xca, - 0x38, 0xdb, 0x1c, 0xc8, 0xc4, 0x15, 0x1d, 0x1d, 0xcf, 0x51, 0xb5, 0x9c, 0xb3, 0xeb, 0x84, 0xfb, - 0x3d, 0x0e, 0xa3, 0x44, 0xb3, 0xdd, 0xe9, 0xe3, 0xac, 0x20, 0x73, 0x76, 0x43, 0x3d, 0xbe, 0x6f, - 0xb5, 0xf1, 0x6c, 0x11, 0xb2, 0xe1, 0xf8, 0x44, 0x69, 0x60, 0x11, 0x2a, 0x4b, 0xa4, 0x58, 0x59, - 0x5c, 0x5b, 0x22, 0x65, 0xc6, 0x73, 0x65, 0x39, 0x46, 0xca, 0x9d, 0x95, 0xca, 0x66, 0x59, 0x55, - 0xb6, 0x56, 0x37, 0x2b, 0xd5, 0xb2, 0x1c, 0x0f, 0xd7, 0xd5, 0x3f, 0x88, 0x41, 0xae, 0xf3, 0x88, - 0x84, 0x3e, 0x06, 0x87, 0xc5, 0x7d, 0x86, 0x87, 0x7d, 0xf5, 0xa6, 0xe1, 0xd2, 0x25, 0xd3, 0xd0, - 0x58, 0xfa, 0x0a, 0x26, 0x6d, 0x92, 0x6b, 0x6d, 0x60, 0xff, 0x8a, 0xe1, 0x92, 0x05, 0xd1, 0xd0, - 0x7c, 0xb4, 0x02, 0xd3, 0x96, 0xad, 0x7a, 0xbe, 0x66, 0xd5, 0x34, 0xb7, 0xa6, 0xb6, 0x6f, 0x92, - 0x54, 0x4d, 0xd7, 0xb1, 0xe7, 0xd9, 0x2c, 0x55, 0x05, 0x2c, 0x1f, 0xb6, 0xec, 0x0d, 0xae, 0xdc, - 0xde, 0xc3, 0x17, 0xb8, 0x6a, 0x57, 0x80, 0xc5, 0xf7, 0x0b, 0xb0, 0x0f, 0x41, 0xba, 0xa1, 0x39, - 0x2a, 0xb6, 0x7c, 0xb7, 0x45, 0x0b, 0xe3, 0x94, 0x92, 0x6a, 0x68, 0x4e, 0x99, 0x3c, 0x7f, 0x30, - 0xe7, 0x93, 0x7f, 0x8b, 0x43, 0x36, 0x5c, 0x1c, 0x93, 0xb3, 0x86, 0x4e, 0xf3, 0x88, 0x44, 0x77, - 0x9a, 0xe3, 0xf7, 0x2d, 0xa5, 0xe7, 0x17, 0x49, 0x82, 0x29, 0x0e, 0xb3, 0x92, 0x55, 0x61, 0x48, - 0x92, 0xdc, 0xc9, 0xde, 0x82, 0x59, 0x89, 0x90, 0x52, 0xf8, 0x13, 0x5a, 0x86, 0xe1, 0x6b, 0x1e, - 0xe5, 0x1e, 0xa6, 0xdc, 0x0f, 0xdf, 0x9f, 0xfb, 0xf2, 0x06, 0x25, 0x4f, 0x5f, 0xde, 0x50, 0x57, - 0xd7, 0x94, 0xea, 0xc2, 0x8a, 0xc2, 0xe1, 0xe8, 0x08, 0x24, 0x4c, 0xed, 0x56, 0xab, 0x33, 0x15, - 0x51, 0xd1, 0xa0, 0x8e, 0x3f, 0x02, 0x89, 0x9b, 0x58, 0xbb, 0xde, 0x99, 0x00, 0xa8, 0xe8, 0x7d, - 0x0c, 0xfd, 0x13, 0x90, 0xa4, 0xfe, 0x42, 0x00, 0xdc, 0x63, 0xf2, 0x10, 0x4a, 0x41, 0x62, 0x71, - 0x4d, 0x21, 0xe1, 0x2f, 0x43, 0x96, 0x49, 0xd5, 0xf5, 0x4a, 0x79, 0xb1, 0x2c, 0xc7, 0x66, 0xcf, - 0xc0, 0x30, 0x73, 0x02, 0x59, 0x1a, 0x81, 0x1b, 0xe4, 0x21, 0xfe, 0xc8, 0x39, 0x24, 0xd1, 0xba, - 0x55, 0x2d, 0x95, 0x15, 0x39, 0x16, 0x9e, 0x5e, 0x0f, 0xb2, 0xe1, 0xba, 0xf8, 0x83, 0x89, 0xa9, - 0x7f, 0x94, 0x20, 0x13, 0xaa, 0x73, 0x49, 0x81, 0xa2, 0x99, 0xa6, 0x7d, 0x53, 0xd5, 0x4c, 0x43, - 0xf3, 0x78, 0x50, 0x00, 0x15, 0x2d, 0x10, 0xc9, 0xa0, 0x93, 0xf6, 0x81, 0x18, 0xff, 0xb2, 0x04, - 0x72, 0x77, 0x89, 0xd9, 0x65, 0xa0, 0xf4, 0x73, 0x35, 0xf0, 0x25, 0x09, 0x72, 0x9d, 0x75, 0x65, - 0x97, 0x79, 0xc7, 0x7e, 0xae, 0xe6, 0xbd, 0x1e, 0x83, 0xd1, 0x8e, 0x6a, 0x72, 0x50, 0xeb, 0x3e, - 0x03, 0xe3, 0x46, 0x0d, 0x37, 0x1c, 0xdb, 0xc7, 0x96, 0xde, 0x52, 0x4d, 0x7c, 0x03, 0x9b, 0xf9, - 0x59, 0xba, 0x51, 0x9c, 0xb8, 0x7f, 0xbd, 0x3a, 0x5f, 0x69, 0xe3, 0x56, 0x08, 0xac, 0x38, 0x51, - 0x59, 0x2a, 0x57, 0xd7, 0xd7, 0x36, 0xcb, 0xab, 0x8b, 0x57, 0xd5, 0xad, 0xd5, 0x5f, 0x5c, 0x5d, - 0xbb, 0xb2, 0xaa, 0xc8, 0x46, 0x97, 0xda, 0xfb, 0xb8, 0xd4, 0xd7, 0x41, 0xee, 0x36, 0x0a, 0x1d, - 0x86, 0x7e, 0x66, 0xc9, 0x43, 0x68, 0x02, 0xc6, 0x56, 0xd7, 0xd4, 0x8d, 0xca, 0x52, 0x59, 0x2d, - 0x5f, 0xba, 0x54, 0x5e, 0xdc, 0xdc, 0x60, 0x37, 0x10, 0x81, 0xf6, 0x66, 0xe7, 0xa2, 0x7e, 0x31, - 0x0e, 0x13, 0x7d, 0x2c, 0x41, 0x0b, 0xfc, 0xec, 0xc0, 0x8e, 0x33, 0x1f, 0x1d, 0xc4, 0xfa, 0x79, - 0x92, 0xf2, 0xd7, 0x35, 0xd7, 0xe7, 0x47, 0x8d, 0xc7, 0x81, 0x78, 0xc9, 0xf2, 0x8d, 0x1d, 0x03, - 0xbb, 0xfc, 0xc2, 0x86, 0x1d, 0x28, 0xc6, 0xda, 0x72, 0x76, 0x67, 0xf3, 0x11, 0x40, 0x8e, 0xed, - 0x19, 0xbe, 0x71, 0x03, 0xab, 0x86, 0x25, 0x6e, 0x77, 0xc8, 0x01, 0x23, 0xa1, 0xc8, 0xa2, 0xa5, - 0x62, 0xf9, 0x81, 0xb6, 0x85, 0xeb, 0x5a, 0x97, 0x36, 0xd9, 0xc0, 0xe3, 0x8a, 0x2c, 0x5a, 0x02, - 0xed, 0x63, 0x90, 0xad, 0xd9, 0x4d, 0x52, 0x75, 0x31, 0x3d, 0x92, 0x2f, 0x24, 0x25, 0xc3, 0x64, - 0x81, 0x0a, 0xaf, 0xa7, 0xdb, 0xd7, 0x4a, 0x59, 0x25, 0xc3, 0x64, 0x4c, 0xe5, 0x31, 0x18, 0xd3, - 0xea, 0x75, 0x97, 0x90, 0x0b, 0x22, 0x76, 0x42, 0xc8, 0x05, 0x62, 0xaa, 0x38, 0x75, 0x19, 0x52, - 0xc2, 0x0f, 0x24, 0x25, 0x13, 0x4f, 0xa8, 0x0e, 0x3b, 0xf6, 0xc6, 0xe6, 0xd2, 0x4a, 0xca, 0x12, - 0x8d, 0xc7, 0x20, 0x6b, 0x78, 0x6a, 0xfb, 0x96, 0x3c, 0x36, 0x13, 0x9b, 0x4b, 0x29, 0x19, 0xc3, - 0x0b, 0x6e, 0x18, 0x67, 0x5f, 0x89, 0x41, 0xae, 0xf3, 0x96, 0x1f, 0x2d, 0x41, 0xca, 0xb4, 0x75, - 0x8d, 0x86, 0x16, 0x7b, 0xc5, 0x34, 0x17, 0xf1, 0x62, 0x60, 0x7e, 0x85, 0xeb, 0x2b, 0x01, 0x72, - 0xea, 0x5f, 0x24, 0x48, 0x09, 0x31, 0x3a, 0x04, 0x09, 0x47, 0xf3, 0x77, 0x29, 0x5d, 0xb2, 0x14, - 0x93, 0x25, 0x85, 0x3e, 0x13, 0xb9, 0xe7, 0x68, 0x16, 0x0d, 0x01, 0x2e, 0x27, 0xcf, 0x64, 0x5e, - 0x4d, 0xac, 0xd5, 0xe8, 0xf1, 0xc3, 0x6e, 0x34, 0xb0, 0xe5, 0x7b, 0x62, 0x5e, 0xb9, 0x7c, 0x91, - 0x8b, 0xd1, 0x93, 0x30, 0xee, 0xbb, 0x9a, 0x61, 0x76, 0xe8, 0x26, 0xa8, 0xae, 0x2c, 0x1a, 0x02, - 0xe5, 0x22, 0x1c, 0x11, 0xbc, 0x35, 0xec, 0x6b, 0xfa, 0x2e, 0xae, 0xb5, 0x41, 0xc3, 0xf4, 0x9a, - 0xe1, 0x30, 0x57, 0x58, 0xe2, 0xed, 0x02, 0x3b, 0xfb, 0x23, 0x09, 0xc6, 0xc5, 0x81, 0xa9, 0x16, - 0x38, 0xab, 0x0a, 0xa0, 0x59, 0x96, 0xed, 0x87, 0xdd, 0xd5, 0x1b, 0xca, 0x3d, 0xb8, 0xf9, 0x85, - 0x00, 0xa4, 0x84, 0x08, 0xa6, 0x1a, 0x00, 0xed, 0x96, 0x7d, 0xdd, 0x36, 0x0d, 0x19, 0xfe, 0x0a, - 0x87, 0xbe, 0x07, 0x64, 0x47, 0x6c, 0x60, 0x22, 0x72, 0xb2, 0x42, 0x93, 0x90, 0xdc, 0xc6, 0x75, - 0xc3, 0xe2, 0x17, 0xb3, 0xec, 0x41, 0x5c, 0x84, 0x24, 0x82, 0x8b, 0x90, 0xd2, 0xa7, 0x61, 0x42, - 0xb7, 0x1b, 0xdd, 0xe6, 0x96, 0xe4, 0xae, 0x63, 0xbe, 0xf7, 0x09, 0xe9, 0x39, 0x68, 0x97, 0x98, - 0xef, 0x4a, 0xd2, 0x9f, 0xc7, 0xe2, 0xcb, 0xeb, 0xa5, 0xaf, 0xc5, 0xa6, 0x96, 0x19, 0x74, 0x5d, - 0x8c, 0x54, 0xc1, 0x3b, 0x26, 0xd6, 0x89, 0xf5, 0xf0, 0x95, 0x39, 0xf8, 0x68, 0xdd, 0xf0, 0x77, - 0x9b, 0xdb, 0xf3, 0xba, 0xdd, 0x38, 0x51, 0xb7, 0xeb, 0x76, 0xfb, 0xd5, 0x27, 0x79, 0xa2, 0x0f, - 0xf4, 0x17, 0x7f, 0xfd, 0x99, 0x0e, 0xa4, 0x53, 0x91, 0xef, 0x4a, 0x8b, 0xab, 0x30, 0xc1, 0x95, - 0x55, 0xfa, 0xfe, 0x85, 0x9d, 0x22, 0xd0, 0x7d, 0xef, 0xb0, 0xf2, 0xdf, 0x78, 0x83, 0xa6, 0x6b, - 0x65, 0x9c, 0x43, 0x49, 0x1b, 0x3b, 0x68, 0x14, 0x15, 0x78, 0xa8, 0x83, 0x8f, 0x2d, 0x4d, 0xec, - 0x46, 0x30, 0xfe, 0x80, 0x33, 0x4e, 0x84, 0x18, 0x37, 0x38, 0xb4, 0xb8, 0x08, 0xa3, 0x07, 0xe1, - 0xfa, 0x27, 0xce, 0x95, 0xc5, 0x61, 0x92, 0x65, 0x18, 0xa3, 0x24, 0x7a, 0xd3, 0xf3, 0xed, 0x06, - 0xdd, 0xf7, 0xee, 0x4f, 0xf3, 0xcf, 0x6f, 0xb0, 0xb5, 0x92, 0x23, 0xb0, 0xc5, 0x00, 0x55, 0x2c, - 0x02, 0x7d, 0xe5, 0x54, 0xc3, 0xba, 0x19, 0xc1, 0xf0, 0x2a, 0x37, 0x24, 0xd0, 0x2f, 0x7e, 0x0a, - 0x26, 0xc9, 0x6f, 0xba, 0x2d, 0x85, 0x2d, 0x89, 0xbe, 0xf0, 0xca, 0xff, 0xe8, 0x05, 0xb6, 0x1c, - 0x27, 0x02, 0x82, 0x90, 0x4d, 0xa1, 0x59, 0xac, 0x63, 0xdf, 0xc7, 0xae, 0xa7, 0x6a, 0x66, 0x3f, - 0xf3, 0x42, 0x37, 0x06, 0xf9, 0x2f, 0xbe, 0xd5, 0x39, 0x8b, 0xcb, 0x0c, 0xb9, 0x60, 0x9a, 0xc5, - 0x2d, 0x38, 0xdc, 0x27, 0x2a, 0x06, 0xe0, 0x7c, 0x91, 0x73, 0x4e, 0xf6, 0x44, 0x06, 0xa1, 0x5d, - 0x07, 0x21, 0x0f, 0xe6, 0x72, 0x00, 0xce, 0x3f, 0xe1, 0x9c, 0x88, 0x63, 0xc5, 0x94, 0x12, 0xc6, - 0xcb, 0x30, 0x7e, 0x03, 0xbb, 0xdb, 0xb6, 0xc7, 0x6f, 0x69, 0x06, 0xa0, 0x7b, 0x89, 0xd3, 0x8d, - 0x71, 0x20, 0xbd, 0xb6, 0x21, 0x5c, 0x17, 0x20, 0xb5, 0xa3, 0xe9, 0x78, 0x00, 0x8a, 0x2f, 0x71, - 0x8a, 0x11, 0xa2, 0x4f, 0xa0, 0x0b, 0x90, 0xad, 0xdb, 0x3c, 0x33, 0x45, 0xc3, 0x5f, 0xe6, 0xf0, - 0x8c, 0xc0, 0x70, 0x0a, 0xc7, 0x76, 0x9a, 0x26, 0x49, 0x5b, 0xd1, 0x14, 0x7f, 0x2a, 0x28, 0x04, - 0x86, 0x53, 0x1c, 0xc0, 0xad, 0x7f, 0x26, 0x28, 0xbc, 0x90, 0x3f, 0x9f, 0x81, 0x8c, 0x6d, 0x99, - 0x2d, 0xdb, 0x1a, 0xc4, 0x88, 0x2f, 0x73, 0x06, 0xe0, 0x10, 0x42, 0x70, 0x11, 0xd2, 0x83, 0x4e, - 0xc4, 0x57, 0xde, 0x12, 0xcb, 0x43, 0xcc, 0xc0, 0x32, 0x8c, 0x89, 0x0d, 0xca, 0xb0, 0xad, 0x01, - 0x28, 0xfe, 0x82, 0x53, 0xe4, 0x42, 0x30, 0x3e, 0x0c, 0x1f, 0x7b, 0x7e, 0x1d, 0x0f, 0x42, 0xf2, - 0x8a, 0x18, 0x06, 0x87, 0x70, 0x57, 0x6e, 0x63, 0x4b, 0xdf, 0x1d, 0x8c, 0xe1, 0xab, 0xc2, 0x95, - 0x02, 0x43, 0x28, 0x16, 0x61, 0xb4, 0xa1, 0xb9, 0xde, 0xae, 0x66, 0x0e, 0x34, 0x1d, 0x7f, 0xc9, - 0x39, 0xb2, 0x01, 0x88, 0x7b, 0xa4, 0x69, 0x1d, 0x84, 0xe6, 0x6b, 0xc2, 0x23, 0x21, 0x18, 0x5f, - 0x7a, 0x9e, 0x4f, 0xaf, 0xb4, 0x0e, 0xc2, 0xf6, 0x57, 0x62, 0xe9, 0x31, 0x6c, 0x35, 0xcc, 0x78, - 0x11, 0xd2, 0x9e, 0x71, 0x6b, 0x20, 0x9a, 0xbf, 0x16, 0x33, 0x4d, 0x01, 0x04, 0x7c, 0x15, 0x8e, - 0xf4, 0x4d, 0x13, 0x03, 0x90, 0xfd, 0x0d, 0x27, 0x3b, 0xd4, 0x27, 0x55, 0xf0, 0x2d, 0xe1, 0xa0, - 0x94, 0x7f, 0x2b, 0xb6, 0x04, 0xdc, 0xc5, 0xb5, 0x4e, 0xce, 0x0a, 0x9e, 0xb6, 0x73, 0x30, 0xaf, - 0xfd, 0x9d, 0xf0, 0x1a, 0xc3, 0x76, 0x78, 0x6d, 0x13, 0x0e, 0x71, 0xc6, 0x83, 0xcd, 0xeb, 0xd7, - 0xc5, 0xc6, 0xca, 0xd0, 0x5b, 0x9d, 0xb3, 0xfb, 0x69, 0x98, 0x0a, 0xdc, 0x29, 0x8a, 0x52, 0x4f, - 0x6d, 0x68, 0xce, 0x00, 0xcc, 0xdf, 0xe0, 0xcc, 0x62, 0xc7, 0x0f, 0xaa, 0x5a, 0xaf, 0xaa, 0x39, - 0x84, 0xfc, 0x59, 0xc8, 0x0b, 0xf2, 0xa6, 0xe5, 0x62, 0xdd, 0xae, 0x5b, 0xc6, 0x2d, 0x5c, 0x1b, - 0x80, 0xfa, 0x9b, 0x5d, 0x53, 0xb5, 0x15, 0x82, 0x13, 0xe6, 0x0a, 0xc8, 0x41, 0xad, 0xa2, 0x1a, - 0x0d, 0xc7, 0x76, 0xfd, 0x08, 0xc6, 0x6f, 0x89, 0x99, 0x0a, 0x70, 0x15, 0x0a, 0x2b, 0x96, 0x21, - 0x47, 0x1f, 0x07, 0x0d, 0xc9, 0xbf, 0xe7, 0x44, 0xa3, 0x6d, 0x14, 0xdf, 0x38, 0x74, 0xbb, 0xe1, - 0x68, 0xee, 0x20, 0xfb, 0xdf, 0xb7, 0xc5, 0xc6, 0xc1, 0x21, 0x7c, 0xe3, 0xf0, 0x5b, 0x0e, 0x26, - 0xd9, 0x7e, 0x00, 0x86, 0xef, 0x88, 0x8d, 0x43, 0x60, 0x38, 0x85, 0x28, 0x18, 0x06, 0xa0, 0xf8, - 0x07, 0x41, 0x21, 0x30, 0x84, 0xe2, 0x93, 0xed, 0x44, 0xeb, 0xe2, 0xba, 0xe1, 0xf9, 0x2e, 0x2b, - 0x85, 0xef, 0x4f, 0xf5, 0xdd, 0xb7, 0x3a, 0x8b, 0x30, 0x25, 0x04, 0x25, 0x3b, 0x11, 0xbf, 0x42, - 0xa5, 0x27, 0xa5, 0x68, 0xc3, 0xbe, 0x27, 0x76, 0xa2, 0x10, 0x8c, 0xad, 0xcf, 0xb1, 0xae, 0x5a, - 0x05, 0x45, 0x7d, 0x08, 0x93, 0xff, 0xd5, 0x77, 0x38, 0x57, 0x67, 0xa9, 0x52, 0x5c, 0x21, 0x01, - 0xd4, 0x59, 0x50, 0x44, 0x93, 0xbd, 0xf0, 0x4e, 0x10, 0x43, 0x1d, 0xf5, 0x44, 0xf1, 0x12, 0x8c, - 0x76, 0x14, 0x13, 0xd1, 0x54, 0xbf, 0xc6, 0xa9, 0xb2, 0xe1, 0x5a, 0xa2, 0x78, 0x06, 0x12, 0xa4, - 0x30, 0x88, 0x86, 0xff, 0x3a, 0x87, 0x53, 0xf5, 0xe2, 0xc7, 0x21, 0x25, 0x0a, 0x82, 0x68, 0xe8, - 0x6f, 0x70, 0x68, 0x00, 0x21, 0x70, 0x51, 0x0c, 0x44, 0xc3, 0x3f, 0x27, 0xe0, 0x02, 0x42, 0xe0, - 0x83, 0xbb, 0xf0, 0xfb, 0xbf, 0x95, 0xe0, 0x1b, 0xba, 0xf0, 0xdd, 0x45, 0x18, 0xe1, 0x55, 0x40, - 0x34, 0xfa, 0xf3, 0xbc, 0x73, 0x81, 0x28, 0x9e, 0x83, 0xe4, 0x80, 0x0e, 0xff, 0x6d, 0x0e, 0x65, - 0xfa, 0xc5, 0x45, 0xc8, 0x84, 0x32, 0x7f, 0x34, 0xfc, 0x77, 0x38, 0x3c, 0x8c, 0x22, 0xa6, 0xf3, - 0xcc, 0x1f, 0x4d, 0xf0, 0xbb, 0xc2, 0x74, 0x8e, 0x20, 0x6e, 0x13, 0x49, 0x3f, 0x1a, 0xfd, 0x7b, - 0xc2, 0xeb, 0x02, 0x52, 0x7c, 0x06, 0xd2, 0xc1, 0x46, 0x1e, 0x8d, 0xff, 0x7d, 0x8e, 0x6f, 0x63, - 0x88, 0x07, 0x42, 0x89, 0x24, 0x9a, 0xe2, 0x0f, 0x84, 0x07, 0x42, 0x28, 0xb2, 0x8c, 0xba, 0x8b, - 0x83, 0x68, 0xa6, 0x3f, 0x14, 0xcb, 0xa8, 0xab, 0x36, 0x20, 0xb3, 0x49, 0xf7, 0xd3, 0x68, 0x8a, - 0x3f, 0x12, 0xb3, 0x49, 0xf5, 0x89, 0x19, 0xdd, 0xd9, 0x36, 0x9a, 0xe3, 0x8f, 0x85, 0x19, 0x5d, - 0xc9, 0xb6, 0xb8, 0x0e, 0xa8, 0x37, 0xd3, 0x46, 0xf3, 0x7d, 0x81, 0xf3, 0x8d, 0xf7, 0x24, 0xda, - 0xe2, 0x15, 0x38, 0xd4, 0x3f, 0xcb, 0x46, 0xb3, 0x7e, 0xf1, 0x9d, 0xae, 0x73, 0x51, 0x38, 0xc9, - 0x16, 0x37, 0xdb, 0xdb, 0x75, 0x38, 0xc3, 0x46, 0xd3, 0xbe, 0xf8, 0x4e, 0xe7, 0x8e, 0x1d, 0x4e, - 0xb0, 0xc5, 0x05, 0x80, 0x76, 0x72, 0x8b, 0xe6, 0x7a, 0x89, 0x73, 0x85, 0x40, 0x64, 0x69, 0xf0, - 0xdc, 0x16, 0x8d, 0xff, 0x92, 0x58, 0x1a, 0x1c, 0x41, 0x96, 0x86, 0x48, 0x6b, 0xd1, 0xe8, 0x97, - 0xc5, 0xd2, 0x10, 0x10, 0x12, 0xd9, 0xa1, 0xcc, 0x11, 0xcd, 0xf0, 0x65, 0x11, 0xd9, 0x21, 0x54, - 0xf1, 0x22, 0xa4, 0xac, 0xa6, 0x69, 0x92, 0x00, 0x45, 0xf7, 0xff, 0x40, 0x2c, 0xff, 0x93, 0xf7, - 0xb8, 0x05, 0x02, 0x50, 0x3c, 0x03, 0x49, 0xdc, 0xd8, 0xc6, 0xb5, 0x28, 0xe4, 0x7f, 0xbc, 0x27, - 0x36, 0x25, 0xa2, 0x5d, 0x7c, 0x06, 0x80, 0x1d, 0xed, 0xe9, 0x6b, 0xab, 0x08, 0xec, 0x7f, 0xbe, - 0xc7, 0x3f, 0xdd, 0x68, 0x43, 0xda, 0x04, 0xec, 0x43, 0x90, 0xfb, 0x13, 0xbc, 0xd5, 0x49, 0x40, - 0x47, 0x7d, 0x01, 0x46, 0xae, 0x79, 0xb6, 0xe5, 0x6b, 0xf5, 0x28, 0xf4, 0x7f, 0x71, 0xb4, 0xd0, - 0x27, 0x0e, 0x6b, 0xd8, 0x2e, 0xf6, 0xb5, 0xba, 0x17, 0x85, 0xfd, 0x6f, 0x8e, 0x0d, 0x00, 0x04, - 0xac, 0x6b, 0x9e, 0x3f, 0xc8, 0xb8, 0x7f, 0x2a, 0xc0, 0x02, 0x40, 0x8c, 0x26, 0xbf, 0xaf, 0xe3, - 0x56, 0x14, 0xf6, 0x6d, 0x61, 0x34, 0xd7, 0x2f, 0x7e, 0x1c, 0xd2, 0xe4, 0x27, 0xfb, 0x1e, 0x2b, - 0x02, 0xfc, 0x3f, 0x1c, 0xdc, 0x46, 0x90, 0x9e, 0x3d, 0xbf, 0xe6, 0x1b, 0xd1, 0xce, 0xfe, 0x5f, - 0x3e, 0xd3, 0x42, 0xbf, 0xb8, 0x00, 0x19, 0xcf, 0xaf, 0xd5, 0x9a, 0xbc, 0xbe, 0x8a, 0x80, 0xff, - 0xdf, 0x7b, 0xc1, 0x91, 0x3b, 0xc0, 0x94, 0xca, 0xfd, 0x6f, 0x0f, 0x61, 0xd9, 0x5e, 0xb6, 0xd9, - 0xbd, 0xe1, 0x73, 0xb3, 0xd1, 0x17, 0x80, 0xf0, 0xcd, 0x31, 0x38, 0xaa, 0xdb, 0x8d, 0x6d, 0xdb, - 0x3b, 0x61, 0x61, 0xc3, 0xdf, 0xc5, 0xee, 0x09, 0xe1, 0x5a, 0x7e, 0x2f, 0x18, 0xb8, 0x7a, 0xea, - 0x60, 0x17, 0x8a, 0xb3, 0x3f, 0x19, 0x85, 0xd4, 0xa2, 0xe6, 0xf9, 0xda, 0x4d, 0xad, 0x85, 0x1e, - 0x81, 0x54, 0xc5, 0xf2, 0x4f, 0x9d, 0x5c, 0xf7, 0x5d, 0xfa, 0x4e, 0x2c, 0x5e, 0x4a, 0xdf, 0xbb, - 0x33, 0x9d, 0x34, 0x88, 0x4c, 0x09, 0x9a, 0xd0, 0x71, 0x48, 0xd2, 0xdf, 0xf4, 0x5a, 0x35, 0x5e, - 0x1a, 0x7d, 0xf5, 0xce, 0xf4, 0x50, 0x5b, 0x8f, 0xb5, 0xa1, 0xab, 0x90, 0xa9, 0xb6, 0xb6, 0x0c, - 0xcb, 0x3f, 0x7b, 0x9a, 0xd0, 0x11, 0xe7, 0x24, 0x4a, 0xe7, 0xee, 0xdd, 0x99, 0x3e, 0xb5, 0xaf, - 0x81, 0x24, 0xef, 0xb6, 0x07, 0x26, 0xd0, 0xf4, 0x9b, 0xd5, 0x30, 0x17, 0xba, 0x02, 0x29, 0xf1, - 0xc8, 0x5e, 0x4f, 0x94, 0x2e, 0x72, 0x13, 0x1e, 0x88, 0x3b, 0x20, 0x43, 0xbf, 0x04, 0xd9, 0x6a, - 0xeb, 0x92, 0x69, 0x6b, 0xdc, 0x07, 0xc9, 0x19, 0x69, 0x2e, 0x56, 0x3a, 0x7f, 0xef, 0xce, 0xf4, - 0xe9, 0x81, 0x89, 0x39, 0x9c, 0x32, 0x77, 0xb0, 0xa1, 0xe7, 0x20, 0x1d, 0x3c, 0xd3, 0x17, 0x20, - 0xb1, 0xd2, 0xc7, 0xb8, 0xdd, 0x0f, 0x46, 0xdf, 0xa6, 0x0b, 0x59, 0xce, 0xdc, 0x3d, 0x32, 0x23, - 0xcd, 0x49, 0x0f, 0x62, 0x39, 0xf7, 0x49, 0x07, 0x5b, 0xc8, 0xf2, 0xb3, 0xa7, 0xe9, 0x1b, 0x17, - 0xe9, 0x41, 0x2d, 0xe7, 0xf4, 0x6d, 0x3a, 0x74, 0x19, 0x46, 0xaa, 0xad, 0x52, 0xcb, 0xc7, 0x1e, - 0xfd, 0x14, 0x2a, 0x5b, 0x7a, 0xea, 0xde, 0x9d, 0xe9, 0x8f, 0x0c, 0xc8, 0x4a, 0x71, 0x8a, 0x20, - 0x40, 0x33, 0x90, 0x59, 0xb5, 0xdd, 0x86, 0x66, 0x32, 0x3e, 0x60, 0x6f, 0x90, 0x42, 0x22, 0xb4, - 0x45, 0x46, 0xc2, 0x66, 0xdb, 0xa3, 0xff, 0x45, 0xf3, 0x33, 0xc4, 0x64, 0x9b, 0x09, 0x19, 0x90, - 0xac, 0xb6, 0xaa, 0x9a, 0x93, 0xcf, 0xd2, 0xd7, 0x1b, 0x47, 0xe7, 0x03, 0x84, 0x58, 0x5b, 0xf3, - 0xb4, 0x9d, 0x7e, 0x07, 0x52, 0x3a, 0x7d, 0xef, 0xce, 0xf4, 0x53, 0x03, 0xf7, 0x58, 0xd5, 0x1c, - 0xda, 0x1d, 0xeb, 0x01, 0x7d, 0x5b, 0x22, 0x0b, 0x8b, 0xdd, 0x0f, 0x93, 0x1e, 0x47, 0x69, 0x8f, - 0xc7, 0xfb, 0xf6, 0x18, 0x68, 0xb1, 0x7e, 0xad, 0xcf, 0xbe, 0x76, 0x80, 0x91, 0xb2, 0xa3, 0x13, - 0xe9, 0xfa, 0x37, 0x5f, 0x7b, 0xe0, 0x45, 0x1b, 0x58, 0x80, 0x5e, 0x90, 0x60, 0xb4, 0xda, 0x5a, - 0xe5, 0xf9, 0x97, 0x58, 0x9e, 0xe3, 0xff, 0x6b, 0xd1, 0xcf, 0xf2, 0x90, 0x1e, 0xb3, 0xfd, 0xec, - 0x67, 0x5f, 0x9b, 0x3e, 0x39, 0xb0, 0x11, 0x74, 0x0b, 0xa2, 0x36, 0x74, 0xf6, 0x89, 0x3e, 0x47, - 0xad, 0x28, 0x93, 0x5c, 0x5e, 0xc3, 0x35, 0x62, 0xc5, 0xd8, 0x7d, 0xac, 0x08, 0xe9, 0x31, 0x2b, - 0x8a, 0x24, 0xea, 0x1f, 0xdc, 0x92, 0x10, 0x1f, 0x5a, 0x83, 0x61, 0xe6, 0x61, 0xfa, 0x19, 0x5e, - 0xfa, 0x80, 0x61, 0xd8, 0x9e, 0x1c, 0x85, 0xd3, 0x4c, 0x9d, 0x07, 0x68, 0xc7, 0x18, 0x92, 0x21, - 0x7e, 0x1d, 0xb7, 0xf8, 0xb7, 0x96, 0xe4, 0x27, 0x9a, 0x6c, 0x7f, 0x0c, 0x2d, 0xcd, 0x25, 0xf8, - 0x17, 0xce, 0xc5, 0xd8, 0x79, 0x69, 0xea, 0x69, 0x90, 0xbb, 0x63, 0xe5, 0x40, 0x78, 0x05, 0x50, - 0xef, 0x8c, 0x85, 0x19, 0x92, 0x8c, 0xe1, 0xd1, 0x30, 0x43, 0xe6, 0xa4, 0xdc, 0xf6, 0xf9, 0x15, - 0xc3, 0xf4, 0x6c, 0xab, 0x87, 0xb3, 0xdb, 0xff, 0x3f, 0x1b, 0xe7, 0x6c, 0x01, 0x86, 0x99, 0x90, - 0x8c, 0xa5, 0x42, 0xd3, 0x07, 0xcd, 0x72, 0x0a, 0x7b, 0x28, 0xad, 0xbc, 0x7a, 0xb7, 0x30, 0xf4, - 0xc3, 0xbb, 0x85, 0xa1, 0x7f, 0xbd, 0x5b, 0x18, 0x7a, 0xfd, 0x6e, 0x41, 0x7a, 0xf3, 0x6e, 0x41, - 0x7a, 0xfb, 0x6e, 0x41, 0x7a, 0xf7, 0x6e, 0x41, 0xba, 0xbd, 0x57, 0x90, 0xbe, 0xba, 0x57, 0x90, - 0xbe, 0xbe, 0x57, 0x90, 0xbe, 0xbb, 0x57, 0x90, 0xbe, 0xbf, 0x57, 0x90, 0x5e, 0xdd, 0x2b, 0x0c, - 0xfd, 0x70, 0xaf, 0x30, 0xf4, 0xfa, 0x5e, 0x41, 0x7a, 0x73, 0xaf, 0x30, 0xf4, 0xf6, 0x5e, 0x41, - 0x7a, 0x77, 0xaf, 0x30, 0x74, 0xfb, 0xc7, 0x85, 0xa1, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x4e, - 0xe5, 0x66, 0x02, 0xcf, 0x38, 0x00, 0x00, + 0x68, 0xfa, 0xa0, 0xc6, 0x6d, 0x33, 0x69, 0xa7, 0xf7, 0xce, 0x34, 0x71, 0x1d, 0xb7, 0x49, 0xa7, + 0x71, 0x9a, 0xde, 0x72, 0x69, 0xd2, 0x24, 0x7d, 0xc9, 0x4b, 0x5a, 0x3f, 0x75, 0x92, 0xb7, 0x3e, + 0x74, 0x64, 0x8b, 0xf1, 0x4c, 0x9d, 0xd6, 0x6d, 0xdc, 0x56, 0x0f, 0x1e, 0xf9, 0xa5, 0x73, 0x6e, + 0x8b, 0xc5, 0x85, 0x5a, 0x50, 0x19, 0x3b, 0x4f, 0xc4, 0xfe, 0xe7, 0xff, 0xbe, 0xf3, 0x9f, 0xff, + 0xfc, 0xe7, 0xfc, 0xff, 0x39, 0xbb, 0x84, 0x9f, 0x9e, 0x83, 0x99, 0xba, 0x6d, 0xd7, 0x4d, 0x7c, + 0xcc, 0x71, 0x6d, 0xdf, 0xde, 0x6e, 0xee, 0x1c, 0xab, 0x61, 0x4f, 0x77, 0x0d, 0xc7, 0xb7, 0xdd, + 0x79, 0x2a, 0x43, 0x63, 0x4c, 0x63, 0x5e, 0x68, 0xcc, 0x56, 0x61, 0xfc, 0x82, 0x61, 0xe2, 0xa5, + 0x40, 0x71, 0x03, 0xfb, 0xe8, 0x2c, 0x24, 0x76, 0x0c, 0x13, 0xe7, 0xa5, 0x99, 0xf8, 0x5c, 0xe6, + 0xf8, 0xc3, 0xf3, 0x5d, 0xa0, 0xf9, 0x4e, 0xc4, 0x3a, 0x11, 0x2b, 0x14, 0x31, 0xfb, 0x46, 0x02, + 0x26, 0xfa, 0xb4, 0x22, 0x04, 0x09, 0x4b, 0x6b, 0x10, 0x46, 0x69, 0x2e, 0xad, 0xd0, 0xdf, 0x28, + 0x0f, 0x23, 0x8e, 0xa6, 0x5f, 0xd5, 0xea, 0x38, 0x1f, 0xa3, 0x62, 0xf1, 0x88, 0x0a, 0x00, 0x35, + 0xec, 0x60, 0xab, 0x86, 0x2d, 0xbd, 0x95, 0x8f, 0xcf, 0xc4, 0xe7, 0xd2, 0x4a, 0x48, 0x82, 0x9e, + 0x84, 0x71, 0xa7, 0xb9, 0x6d, 0x1a, 0xba, 0x1a, 0x52, 0x83, 0x99, 0xf8, 0x5c, 0x52, 0x91, 0x59, + 0xc3, 0x52, 0x5b, 0xf9, 0x31, 0x18, 0xbb, 0x8e, 0xb5, 0xab, 0x61, 0xd5, 0x0c, 0x55, 0xcd, 0x11, + 0x71, 0x48, 0x71, 0x11, 0xb2, 0x0d, 0xec, 0x79, 0x5a, 0x1d, 0xab, 0x7e, 0xcb, 0xc1, 0xf9, 0x04, + 0x1d, 0xfd, 0x4c, 0xcf, 0xe8, 0xbb, 0x47, 0x9e, 0xe1, 0xa8, 0xcd, 0x96, 0x83, 0xd1, 0x02, 0xa4, + 0xb1, 0xd5, 0x6c, 0x30, 0x86, 0xe4, 0x3e, 0xfe, 0x2b, 0x5b, 0xcd, 0x46, 0x37, 0x4b, 0x8a, 0xc0, + 0x38, 0xc5, 0x88, 0x87, 0xdd, 0x6b, 0x86, 0x8e, 0xf3, 0xc3, 0x94, 0xe0, 0xb1, 0x1e, 0x82, 0x0d, + 0xd6, 0xde, 0xcd, 0x21, 0x70, 0x68, 0x11, 0xd2, 0xf8, 0x79, 0x1f, 0x5b, 0x9e, 0x61, 0x5b, 0xf9, + 0x11, 0x4a, 0xf2, 0x48, 0x9f, 0x59, 0xc4, 0x66, 0xad, 0x9b, 0xa2, 0x8d, 0x43, 0xa7, 0x61, 0xc4, + 0x76, 0x7c, 0xc3, 0xb6, 0xbc, 0x7c, 0x6a, 0x46, 0x9a, 0xcb, 0x1c, 0xff, 0x60, 0xdf, 0x40, 0x58, + 0x63, 0x3a, 0x8a, 0x50, 0x46, 0x15, 0x90, 0x3d, 0xbb, 0xe9, 0xea, 0x58, 0xd5, 0xed, 0x1a, 0x56, + 0x0d, 0x6b, 0xc7, 0xce, 0xa7, 0x29, 0xc1, 0x74, 0xef, 0x40, 0xa8, 0xe2, 0xa2, 0x5d, 0xc3, 0x15, + 0x6b, 0xc7, 0x56, 0x72, 0x5e, 0xc7, 0x33, 0x3a, 0x04, 0xc3, 0x5e, 0xcb, 0xf2, 0xb5, 0xe7, 0xf3, + 0x59, 0x1a, 0x21, 0xfc, 0x69, 0xf6, 0xbb, 0xc3, 0x30, 0x36, 0x48, 0x88, 0x9d, 0x87, 0xe4, 0x0e, + 0x19, 0x65, 0x3e, 0x76, 0x10, 0x1f, 0x30, 0x4c, 0xa7, 0x13, 0x87, 0xef, 0xd3, 0x89, 0x0b, 0x90, + 0xb1, 0xb0, 0xe7, 0xe3, 0x1a, 0x8b, 0x88, 0xf8, 0x80, 0x31, 0x05, 0x0c, 0xd4, 0x1b, 0x52, 0x89, + 0xfb, 0x0a, 0xa9, 0x67, 0x61, 0x2c, 0x30, 0x49, 0x75, 0x35, 0xab, 0x2e, 0x62, 0xf3, 0x58, 0x94, + 0x25, 0xf3, 0x65, 0x81, 0x53, 0x08, 0x4c, 0xc9, 0xe1, 0x8e, 0x67, 0xb4, 0x04, 0x60, 0x5b, 0xd8, + 0xde, 0x51, 0x6b, 0x58, 0x37, 0xf3, 0xa9, 0x7d, 0xbc, 0xb4, 0x46, 0x54, 0x7a, 0xbc, 0x64, 0x33, + 0xa9, 0x6e, 0xa2, 0x73, 0xed, 0x50, 0x1b, 0xd9, 0x27, 0x52, 0xaa, 0x6c, 0x91, 0xf5, 0x44, 0xdb, + 0x16, 0xe4, 0x5c, 0x4c, 0xe2, 0x1e, 0xd7, 0xf8, 0xc8, 0xd2, 0xd4, 0x88, 0xf9, 0xc8, 0x91, 0x29, + 0x1c, 0xc6, 0x06, 0x36, 0xea, 0x86, 0x1f, 0xd1, 0x51, 0x08, 0x04, 0x2a, 0x0d, 0x2b, 0xa0, 0xbb, + 0x50, 0x56, 0x08, 0x57, 0xb5, 0x06, 0x9e, 0xba, 0x01, 0xb9, 0x4e, 0xf7, 0xa0, 0x49, 0x48, 0x7a, + 0xbe, 0xe6, 0xfa, 0x34, 0x0a, 0x93, 0x0a, 0x7b, 0x40, 0x32, 0xc4, 0xb1, 0x55, 0xa3, 0xbb, 0x5c, + 0x52, 0x21, 0x3f, 0xd1, 0x2f, 0xb4, 0x07, 0x1c, 0xa7, 0x03, 0x7e, 0xb4, 0x77, 0x46, 0x3b, 0x98, + 0xbb, 0xc7, 0x3d, 0x75, 0x06, 0x46, 0x3b, 0x06, 0x30, 0x68, 0xd7, 0xb3, 0xbf, 0x02, 0x0f, 0xf4, + 0xa5, 0x46, 0xcf, 0xc2, 0x64, 0xd3, 0x32, 0x2c, 0x1f, 0xbb, 0x8e, 0x8b, 0x49, 0xc4, 0xb2, 0xae, + 0xf2, 0xff, 0x3e, 0xb2, 0x4f, 0xcc, 0x6d, 0x85, 0xb5, 0x19, 0x8b, 0x32, 0xd1, 0xec, 0x15, 0x3e, + 0x91, 0x4e, 0xbd, 0x39, 0x22, 0xdf, 0xbc, 0x79, 0xf3, 0x66, 0x6c, 0xf6, 0x73, 0xc3, 0x30, 0xd9, + 0x6f, 0xcd, 0xf4, 0x5d, 0xbe, 0x87, 0x60, 0xd8, 0x6a, 0x36, 0xb6, 0xb1, 0x4b, 0x9d, 0x94, 0x54, + 0xf8, 0x13, 0x5a, 0x80, 0xa4, 0xa9, 0x6d, 0x63, 0x33, 0x9f, 0x98, 0x91, 0xe6, 0x72, 0xc7, 0x9f, + 0x1c, 0x68, 0x55, 0xce, 0xaf, 0x10, 0x88, 0xc2, 0x90, 0xe8, 0x69, 0x48, 0xf0, 0x2d, 0x9a, 0x30, + 0x3c, 0x31, 0x18, 0x03, 0x59, 0x4b, 0x0a, 0xc5, 0xa1, 0x0f, 0x40, 0x9a, 0xfc, 0x65, 0xb1, 0x31, + 0x4c, 0x6d, 0x4e, 0x11, 0x01, 0x89, 0x0b, 0x34, 0x05, 0x29, 0xba, 0x4c, 0x6a, 0x58, 0xa4, 0xb6, + 0xe0, 0x99, 0x04, 0x56, 0x0d, 0xef, 0x68, 0x4d, 0xd3, 0x57, 0xaf, 0x69, 0x66, 0x13, 0xd3, 0x80, + 0x4f, 0x2b, 0x59, 0x2e, 0xfc, 0x04, 0x91, 0xa1, 0x69, 0xc8, 0xb0, 0x55, 0x65, 0x58, 0x35, 0xfc, + 0x3c, 0xdd, 0x3d, 0x93, 0x0a, 0x5b, 0x68, 0x15, 0x22, 0x21, 0xdd, 0x5f, 0xf1, 0x6c, 0x4b, 0x84, + 0x26, 0xed, 0x82, 0x08, 0x68, 0xf7, 0x67, 0xba, 0x37, 0xee, 0xc3, 0xfd, 0x87, 0xd7, 0x1d, 0x53, + 0xb3, 0xdf, 0x8e, 0x41, 0x82, 0xee, 0x17, 0x63, 0x90, 0xd9, 0xbc, 0xbc, 0x5e, 0x56, 0x97, 0xd6, + 0xb6, 0x4a, 0x2b, 0x65, 0x59, 0x42, 0x39, 0x00, 0x2a, 0xb8, 0xb0, 0xb2, 0xb6, 0xb0, 0x29, 0xc7, + 0x82, 0xe7, 0xca, 0xea, 0xe6, 0xe9, 0x93, 0x72, 0x3c, 0x00, 0x6c, 0x31, 0x41, 0x22, 0xac, 0x70, + 0xe2, 0xb8, 0x9c, 0x44, 0x32, 0x64, 0x19, 0x41, 0xe5, 0xd9, 0xf2, 0xd2, 0xe9, 0x93, 0xf2, 0x70, + 0xa7, 0xe4, 0xc4, 0x71, 0x79, 0x04, 0x8d, 0x42, 0x9a, 0x4a, 0x4a, 0x6b, 0x6b, 0x2b, 0x72, 0x2a, + 0xe0, 0xdc, 0xd8, 0x54, 0x2a, 0xab, 0xcb, 0x72, 0x3a, 0xe0, 0x5c, 0x56, 0xd6, 0xb6, 0xd6, 0x65, + 0x08, 0x18, 0xaa, 0xe5, 0x8d, 0x8d, 0x85, 0xe5, 0xb2, 0x9c, 0x09, 0x34, 0x4a, 0x97, 0x37, 0xcb, + 0x1b, 0x72, 0xb6, 0xc3, 0xac, 0x13, 0xc7, 0xe5, 0xd1, 0xa0, 0x8b, 0xf2, 0xea, 0x56, 0x55, 0xce, + 0xa1, 0x71, 0x18, 0x65, 0x5d, 0x08, 0x23, 0xc6, 0xba, 0x44, 0xa7, 0x4f, 0xca, 0x72, 0xdb, 0x10, + 0xc6, 0x32, 0xde, 0x21, 0x38, 0x7d, 0x52, 0x46, 0xb3, 0x8b, 0x90, 0xa4, 0xd1, 0x85, 0x10, 0xe4, + 0x56, 0x16, 0x4a, 0xe5, 0x15, 0x75, 0x6d, 0x7d, 0xb3, 0xb2, 0xb6, 0xba, 0xb0, 0x22, 0x4b, 0x6d, + 0x99, 0x52, 0xfe, 0xf8, 0x56, 0x45, 0x29, 0x2f, 0xc9, 0xb1, 0xb0, 0x6c, 0xbd, 0xbc, 0xb0, 0x59, + 0x5e, 0x92, 0xe3, 0xb3, 0x3a, 0x4c, 0xf6, 0xdb, 0x27, 0xfb, 0xae, 0x8c, 0xd0, 0x14, 0xc7, 0xf6, + 0x99, 0x62, 0xca, 0xd5, 0x33, 0xc5, 0x3f, 0x8e, 0xc1, 0x44, 0x9f, 0x5c, 0xd1, 0xb7, 0x93, 0x67, + 0x20, 0xc9, 0x42, 0x94, 0x65, 0xcf, 0xc7, 0xfb, 0x26, 0x1d, 0x1a, 0xb0, 0x3d, 0x19, 0x94, 0xe2, + 0xc2, 0x15, 0x44, 0x7c, 0x9f, 0x0a, 0x82, 0x50, 0xf4, 0xec, 0xe9, 0xbf, 0xdc, 0xb3, 0xa7, 0xb3, + 0xb4, 0x77, 0x7a, 0x90, 0xb4, 0x47, 0x65, 0x07, 0xdb, 0xdb, 0x93, 0x7d, 0xf6, 0xf6, 0xf3, 0x30, + 0xde, 0x43, 0x34, 0xf0, 0x1e, 0xfb, 0x82, 0x04, 0xf9, 0xfd, 0x9c, 0x13, 0xb1, 0xd3, 0xc5, 0x3a, + 0x76, 0xba, 0xf3, 0xdd, 0x1e, 0x3c, 0xb2, 0xff, 0x24, 0xf4, 0xcc, 0xf5, 0x2b, 0x12, 0x1c, 0xea, + 0x5f, 0x29, 0xf6, 0xb5, 0xe1, 0x69, 0x18, 0x6e, 0x60, 0x7f, 0xd7, 0x16, 0xd5, 0xd2, 0xa3, 0x7d, + 0x72, 0x30, 0x69, 0xee, 0x9e, 0x6c, 0x8e, 0x0a, 0x27, 0xf1, 0xf8, 0x7e, 0xe5, 0x1e, 0xb3, 0xa6, + 0xc7, 0xd2, 0xcf, 0xc6, 0xe0, 0x81, 0xbe, 0xe4, 0x7d, 0x0d, 0x3d, 0x0c, 0x60, 0x58, 0x4e, 0xd3, + 0x67, 0x15, 0x11, 0xdb, 0x60, 0xd3, 0x54, 0x42, 0x37, 0x2f, 0xb2, 0x79, 0x36, 0xfd, 0xa0, 0x3d, + 0x4e, 0xdb, 0x81, 0x89, 0xa8, 0xc2, 0xd9, 0xb6, 0xa1, 0x09, 0x6a, 0x68, 0x61, 0x9f, 0x91, 0xf6, + 0x04, 0xe6, 0x53, 0x20, 0xeb, 0xa6, 0x81, 0x2d, 0x5f, 0xf5, 0x7c, 0x17, 0x6b, 0x0d, 0xc3, 0xaa, + 0xd3, 0x0c, 0x92, 0x2a, 0x26, 0x77, 0x34, 0xd3, 0xc3, 0xca, 0x18, 0x6b, 0xde, 0x10, 0xad, 0x04, + 0x41, 0x03, 0xc8, 0x0d, 0x21, 0x86, 0x3b, 0x10, 0xac, 0x39, 0x40, 0xcc, 0x7e, 0x33, 0x05, 0x99, + 0x50, 0x5d, 0x8d, 0x8e, 0x40, 0xf6, 0x8a, 0x76, 0x4d, 0x53, 0xc5, 0x59, 0x89, 0x79, 0x22, 0x43, + 0x64, 0xeb, 0xfc, 0xbc, 0xf4, 0x14, 0x4c, 0x52, 0x15, 0xbb, 0xe9, 0x63, 0x57, 0xd5, 0x4d, 0xcd, + 0xf3, 0xa8, 0xd3, 0x52, 0x54, 0x15, 0x91, 0xb6, 0x35, 0xd2, 0xb4, 0x28, 0x5a, 0xd0, 0x29, 0x98, + 0xa0, 0x88, 0x46, 0xd3, 0xf4, 0x0d, 0xc7, 0xc4, 0x2a, 0x39, 0xbd, 0x79, 0x34, 0x93, 0x04, 0x96, + 0x8d, 0x13, 0x8d, 0x2a, 0x57, 0x20, 0x16, 0x79, 0x68, 0x09, 0x0e, 0x53, 0x58, 0x1d, 0x5b, 0xd8, + 0xd5, 0x7c, 0xac, 0xe2, 0x4f, 0x35, 0x35, 0xd3, 0x53, 0x35, 0xab, 0xa6, 0xee, 0x6a, 0xde, 0x6e, + 0x7e, 0x92, 0x10, 0x94, 0x62, 0x79, 0x49, 0x79, 0x88, 0x28, 0x2e, 0x73, 0xbd, 0x32, 0x55, 0x5b, + 0xb0, 0x6a, 0x1f, 0xd3, 0xbc, 0x5d, 0x54, 0x84, 0x43, 0x94, 0xc5, 0xf3, 0x5d, 0xc3, 0xaa, 0xab, + 0xfa, 0x2e, 0xd6, 0xaf, 0xaa, 0x4d, 0x7f, 0xe7, 0x6c, 0xfe, 0x03, 0xe1, 0xfe, 0xa9, 0x85, 0x1b, + 0x54, 0x67, 0x91, 0xa8, 0x6c, 0xf9, 0x3b, 0x67, 0xd1, 0x06, 0x64, 0xc9, 0x64, 0x34, 0x8c, 0x1b, + 0x58, 0xdd, 0xb1, 0x5d, 0x9a, 0x1a, 0x73, 0x7d, 0xb6, 0xa6, 0x90, 0x07, 0xe7, 0xd7, 0x38, 0xa0, + 0x6a, 0xd7, 0x70, 0x31, 0xb9, 0xb1, 0x5e, 0x2e, 0x2f, 0x29, 0x19, 0xc1, 0x72, 0xc1, 0x76, 0x49, + 0x40, 0xd5, 0xed, 0xc0, 0xc1, 0x19, 0x16, 0x50, 0x75, 0x5b, 0xb8, 0xf7, 0x14, 0x4c, 0xe8, 0x3a, + 0x1b, 0xb3, 0xa1, 0xab, 0xfc, 0x8c, 0xe5, 0xe5, 0xe5, 0x0e, 0x67, 0xe9, 0xfa, 0x32, 0x53, 0xe0, + 0x31, 0xee, 0xa1, 0x73, 0xf0, 0x40, 0xdb, 0x59, 0x61, 0xe0, 0x78, 0xcf, 0x28, 0xbb, 0xa1, 0xa7, + 0x60, 0xc2, 0x69, 0xf5, 0x02, 0x51, 0x47, 0x8f, 0x4e, 0xab, 0x1b, 0x76, 0x06, 0x26, 0x9d, 0x5d, + 0xa7, 0x17, 0xf7, 0x44, 0x18, 0x87, 0x9c, 0x5d, 0xa7, 0x1b, 0xf8, 0x08, 0x3d, 0x70, 0xbb, 0x58, + 0xd7, 0x7c, 0x5c, 0xcb, 0x3f, 0x18, 0x56, 0x0f, 0x35, 0xa0, 0x63, 0x20, 0xeb, 0xba, 0x8a, 0x2d, + 0x6d, 0xdb, 0xc4, 0xaa, 0xe6, 0x62, 0x4b, 0xf3, 0xf2, 0xd3, 0x61, 0xe5, 0x9c, 0xae, 0x97, 0x69, + 0xeb, 0x02, 0x6d, 0x44, 0x4f, 0xc0, 0xb8, 0xbd, 0x7d, 0x45, 0x67, 0x21, 0xa9, 0x3a, 0x2e, 0xde, + 0x31, 0x9e, 0xcf, 0x3f, 0x4c, 0xfd, 0x3b, 0x46, 0x1a, 0x68, 0x40, 0xae, 0x53, 0x31, 0x7a, 0x1c, + 0x64, 0xdd, 0xdb, 0xd5, 0x5c, 0x87, 0xee, 0xc9, 0x9e, 0xa3, 0xe9, 0x38, 0xff, 0x08, 0x53, 0x65, + 0xf2, 0x55, 0x21, 0x26, 0x4b, 0xc2, 0xbb, 0x6e, 0xec, 0xf8, 0x82, 0xf1, 0x31, 0xb6, 0x24, 0xa8, + 0x8c, 0xb3, 0xcd, 0x81, 0x4c, 0x5c, 0xd1, 0xd1, 0xf1, 0x1c, 0x55, 0xcb, 0x39, 0xbb, 0x4e, 0xb8, + 0xdf, 0xa3, 0x30, 0x4a, 0x34, 0xdb, 0x9d, 0x3e, 0xce, 0x0a, 0x32, 0x67, 0x37, 0xd4, 0xe3, 0x7b, + 0x56, 0x1b, 0xcf, 0x16, 0x21, 0x1b, 0x8e, 0x4f, 0x94, 0x06, 0x16, 0xa1, 0xb2, 0x44, 0x8a, 0x95, + 0xc5, 0xb5, 0x25, 0x52, 0x66, 0x3c, 0x57, 0x96, 0x63, 0xa4, 0xdc, 0x59, 0xa9, 0x6c, 0x96, 0x55, + 0x65, 0x6b, 0x75, 0xb3, 0x52, 0x2d, 0xcb, 0xf1, 0x70, 0x5d, 0xfd, 0x83, 0x18, 0xe4, 0x3a, 0x8f, + 0x48, 0xe8, 0x23, 0xf0, 0xa0, 0xb8, 0xcf, 0xf0, 0xb0, 0xaf, 0x5e, 0x37, 0x5c, 0xba, 0x64, 0x1a, + 0x1a, 0x4b, 0x5f, 0xc1, 0xa4, 0x4d, 0x72, 0xad, 0x0d, 0xec, 0x5f, 0x32, 0x5c, 0xb2, 0x20, 0x1a, + 0x9a, 0x8f, 0x56, 0x60, 0xda, 0xb2, 0x55, 0xcf, 0xd7, 0xac, 0x9a, 0xe6, 0xd6, 0xd4, 0xf6, 0x4d, + 0x92, 0xaa, 0xe9, 0x3a, 0xf6, 0x3c, 0x9b, 0xa5, 0xaa, 0x80, 0xe5, 0x83, 0x96, 0xbd, 0xc1, 0x95, + 0xdb, 0x7b, 0xf8, 0x02, 0x57, 0xed, 0x0a, 0xb0, 0xf8, 0x7e, 0x01, 0xf6, 0x01, 0x48, 0x37, 0x34, + 0x47, 0xc5, 0x96, 0xef, 0xb6, 0x68, 0x61, 0x9c, 0x52, 0x52, 0x0d, 0xcd, 0x29, 0x93, 0xe7, 0xf7, + 0xe7, 0x7c, 0xf2, 0x6f, 0x71, 0xc8, 0x86, 0x8b, 0x63, 0x72, 0xd6, 0xd0, 0x69, 0x1e, 0x91, 0xe8, + 0x4e, 0x73, 0xf4, 0x9e, 0xa5, 0xf4, 0xfc, 0x22, 0x49, 0x30, 0xc5, 0x61, 0x56, 0xb2, 0x2a, 0x0c, + 0x49, 0x92, 0x3b, 0xd9, 0x5b, 0x30, 0x2b, 0x11, 0x52, 0x0a, 0x7f, 0x42, 0xcb, 0x30, 0x7c, 0xc5, + 0xa3, 0xdc, 0xc3, 0x94, 0xfb, 0xe1, 0x7b, 0x73, 0x5f, 0xdc, 0xa0, 0xe4, 0xe9, 0x8b, 0x1b, 0xea, + 0xea, 0x9a, 0x52, 0x5d, 0x58, 0x51, 0x38, 0x1c, 0x3d, 0x04, 0x09, 0x53, 0xbb, 0xd1, 0xea, 0x4c, + 0x45, 0x54, 0x34, 0xa8, 0xe3, 0x1f, 0x82, 0xc4, 0x75, 0xac, 0x5d, 0xed, 0x4c, 0x00, 0x54, 0xf4, + 0x1e, 0x86, 0xfe, 0x31, 0x48, 0x52, 0x7f, 0x21, 0x00, 0xee, 0x31, 0x79, 0x08, 0xa5, 0x20, 0xb1, + 0xb8, 0xa6, 0x90, 0xf0, 0x97, 0x21, 0xcb, 0xa4, 0xea, 0x7a, 0xa5, 0xbc, 0x58, 0x96, 0x63, 0xb3, + 0xa7, 0x60, 0x98, 0x39, 0x81, 0x2c, 0x8d, 0xc0, 0x0d, 0xf2, 0x10, 0x7f, 0xe4, 0x1c, 0x92, 0x68, + 0xdd, 0xaa, 0x96, 0xca, 0x8a, 0x1c, 0x0b, 0x4f, 0xaf, 0x07, 0xd9, 0x70, 0x5d, 0xfc, 0xfe, 0xc4, + 0xd4, 0xf7, 0x24, 0xc8, 0x84, 0xea, 0x5c, 0x52, 0xa0, 0x68, 0xa6, 0x69, 0x5f, 0x57, 0x35, 0xd3, + 0xd0, 0x3c, 0x1e, 0x14, 0x40, 0x45, 0x0b, 0x44, 0x32, 0xe8, 0xa4, 0xbd, 0x2f, 0xc6, 0xbf, 0x2c, + 0x81, 0xdc, 0x5d, 0x62, 0x76, 0x19, 0x28, 0xfd, 0x5c, 0x0d, 0x7c, 0x49, 0x82, 0x5c, 0x67, 0x5d, + 0xd9, 0x65, 0xde, 0x91, 0x9f, 0xab, 0x79, 0xaf, 0xc7, 0x60, 0xb4, 0xa3, 0x9a, 0x1c, 0xd4, 0xba, + 0x4f, 0xc1, 0xb8, 0x51, 0xc3, 0x0d, 0xc7, 0xf6, 0xb1, 0xa5, 0xb7, 0x54, 0x13, 0x5f, 0xc3, 0x66, + 0x7e, 0x96, 0x6e, 0x14, 0xc7, 0xee, 0x5d, 0xaf, 0xce, 0x57, 0xda, 0xb8, 0x15, 0x02, 0x2b, 0x4e, + 0x54, 0x96, 0xca, 0xd5, 0xf5, 0xb5, 0xcd, 0xf2, 0xea, 0xe2, 0x65, 0x75, 0x6b, 0xf5, 0x17, 0x57, + 0xd7, 0x2e, 0xad, 0x2a, 0xb2, 0xd1, 0xa5, 0xf6, 0x1e, 0x2e, 0xf5, 0x75, 0x90, 0xbb, 0x8d, 0x42, + 0x0f, 0x42, 0x3f, 0xb3, 0xe4, 0x21, 0x34, 0x01, 0x63, 0xab, 0x6b, 0xea, 0x46, 0x65, 0xa9, 0xac, + 0x96, 0x2f, 0x5c, 0x28, 0x2f, 0x6e, 0x6e, 0xb0, 0x1b, 0x88, 0x40, 0x7b, 0xb3, 0x73, 0x51, 0xbf, + 0x18, 0x87, 0x89, 0x3e, 0x96, 0xa0, 0x05, 0x7e, 0x76, 0x60, 0xc7, 0x99, 0x0f, 0x0f, 0x62, 0xfd, + 0x3c, 0x49, 0xf9, 0xeb, 0x9a, 0xeb, 0xf3, 0xa3, 0xc6, 0xe3, 0x40, 0xbc, 0x64, 0xf9, 0xc6, 0x8e, + 0x81, 0x5d, 0x7e, 0x61, 0xc3, 0x0e, 0x14, 0x63, 0x6d, 0x39, 0xbb, 0xb3, 0xf9, 0x10, 0x20, 0xc7, + 0xf6, 0x0c, 0xdf, 0xb8, 0x86, 0x55, 0xc3, 0x12, 0xb7, 0x3b, 0xe4, 0x80, 0x91, 0x50, 0x64, 0xd1, + 0x52, 0xb1, 0xfc, 0x40, 0xdb, 0xc2, 0x75, 0xad, 0x4b, 0x9b, 0x6c, 0xe0, 0x71, 0x45, 0x16, 0x2d, + 0x81, 0xf6, 0x11, 0xc8, 0xd6, 0xec, 0x26, 0xa9, 0xba, 0x98, 0x1e, 0xc9, 0x17, 0x92, 0x92, 0x61, + 0xb2, 0x40, 0x85, 0xd7, 0xd3, 0xed, 0x6b, 0xa5, 0xac, 0x92, 0x61, 0x32, 0xa6, 0xf2, 0x18, 0x8c, + 0x69, 0xf5, 0xba, 0x4b, 0xc8, 0x05, 0x11, 0x3b, 0x21, 0xe4, 0x02, 0x31, 0x55, 0x9c, 0xba, 0x08, + 0x29, 0xe1, 0x07, 0x92, 0x92, 0x89, 0x27, 0x54, 0x87, 0x1d, 0x7b, 0x63, 0x73, 0x69, 0x25, 0x65, + 0x89, 0xc6, 0x23, 0x90, 0x35, 0x3c, 0xb5, 0x7d, 0x4b, 0x1e, 0x9b, 0x89, 0xcd, 0xa5, 0x94, 0x8c, + 0xe1, 0x05, 0x37, 0x8c, 0xb3, 0xaf, 0xc4, 0x20, 0xd7, 0x79, 0xcb, 0x8f, 0x96, 0x20, 0x65, 0xda, + 0xba, 0x46, 0x43, 0x8b, 0xbd, 0x62, 0x9a, 0x8b, 0x78, 0x31, 0x30, 0xbf, 0xc2, 0xf5, 0x95, 0x00, + 0x39, 0xf5, 0x2f, 0x12, 0xa4, 0x84, 0x18, 0x1d, 0x82, 0x84, 0xa3, 0xf9, 0xbb, 0x94, 0x2e, 0x59, + 0x8a, 0xc9, 0x92, 0x42, 0x9f, 0x89, 0xdc, 0x73, 0x34, 0x8b, 0x86, 0x00, 0x97, 0x93, 0x67, 0x32, + 0xaf, 0x26, 0xd6, 0x6a, 0xf4, 0xf8, 0x61, 0x37, 0x1a, 0xd8, 0xf2, 0x3d, 0x31, 0xaf, 0x5c, 0xbe, + 0xc8, 0xc5, 0xe8, 0x49, 0x18, 0xf7, 0x5d, 0xcd, 0x30, 0x3b, 0x74, 0x13, 0x54, 0x57, 0x16, 0x0d, + 0x81, 0x72, 0x11, 0x1e, 0x12, 0xbc, 0x35, 0xec, 0x6b, 0xfa, 0x2e, 0xae, 0xb5, 0x41, 0xc3, 0xf4, + 0x9a, 0xe1, 0x41, 0xae, 0xb0, 0xc4, 0xdb, 0x05, 0x76, 0xf6, 0x47, 0x12, 0x8c, 0x8b, 0x03, 0x53, + 0x2d, 0x70, 0x56, 0x15, 0x40, 0xb3, 0x2c, 0xdb, 0x0f, 0xbb, 0xab, 0x37, 0x94, 0x7b, 0x70, 0xf3, + 0x0b, 0x01, 0x48, 0x09, 0x11, 0x4c, 0x35, 0x00, 0xda, 0x2d, 0xfb, 0xba, 0x6d, 0x1a, 0x32, 0xfc, + 0x15, 0x0e, 0x7d, 0x0f, 0xc8, 0x8e, 0xd8, 0xc0, 0x44, 0xe4, 0x64, 0x85, 0x26, 0x21, 0xb9, 0x8d, + 0xeb, 0x86, 0xc5, 0x2f, 0x66, 0xd9, 0x83, 0xb8, 0x08, 0x49, 0x04, 0x17, 0x21, 0xa5, 0x4f, 0xc2, + 0x84, 0x6e, 0x37, 0xba, 0xcd, 0x2d, 0xc9, 0x5d, 0xc7, 0x7c, 0xef, 0x63, 0xd2, 0x73, 0xd0, 0x2e, + 0x31, 0xdf, 0x91, 0xa4, 0x2f, 0xc5, 0xe2, 0xcb, 0xeb, 0xa5, 0xaf, 0xc6, 0xa6, 0x96, 0x19, 0x74, + 0x5d, 0x8c, 0x54, 0xc1, 0x3b, 0x26, 0xd6, 0x89, 0xf5, 0xf0, 0xe5, 0x27, 0xe1, 0xc3, 0x75, 0xc3, + 0xdf, 0x6d, 0x6e, 0xcf, 0xeb, 0x76, 0xe3, 0x58, 0xdd, 0xae, 0xdb, 0xed, 0x57, 0x9f, 0xe4, 0x89, + 0x3e, 0xd0, 0x5f, 0xfc, 0xf5, 0x67, 0x3a, 0x90, 0x4e, 0x45, 0xbe, 0x2b, 0x2d, 0xae, 0xc2, 0x04, + 0x57, 0x56, 0xe9, 0xfb, 0x17, 0x76, 0x8a, 0x40, 0xf7, 0xbc, 0xc3, 0xca, 0x7f, 0xfd, 0x0d, 0x9a, + 0xae, 0x95, 0x71, 0x0e, 0x25, 0x6d, 0xec, 0xa0, 0x51, 0x54, 0xe0, 0x81, 0x0e, 0x3e, 0xb6, 0x34, + 0xb1, 0x1b, 0xc1, 0xf8, 0x03, 0xce, 0x38, 0x11, 0x62, 0xdc, 0xe0, 0xd0, 0xe2, 0x22, 0x8c, 0x1e, + 0x84, 0xeb, 0x9f, 0x38, 0x57, 0x16, 0x87, 0x49, 0x96, 0x61, 0x8c, 0x92, 0xe8, 0x4d, 0xcf, 0xb7, + 0x1b, 0x74, 0xdf, 0xbb, 0x37, 0xcd, 0x3f, 0xbf, 0xc1, 0xd6, 0x4a, 0x8e, 0xc0, 0x16, 0x03, 0x54, + 0xb1, 0x08, 0xf4, 0x95, 0x53, 0x0d, 0xeb, 0x66, 0x04, 0xc3, 0xab, 0xdc, 0x90, 0x40, 0xbf, 0xf8, + 0x09, 0x98, 0x24, 0xbf, 0xe9, 0xb6, 0x14, 0xb6, 0x24, 0xfa, 0xc2, 0x2b, 0xff, 0xa3, 0x17, 0xd8, + 0x72, 0x9c, 0x08, 0x08, 0x42, 0x36, 0x85, 0x66, 0xb1, 0x8e, 0x7d, 0x1f, 0xbb, 0x9e, 0xaa, 0x99, + 0xfd, 0xcc, 0x0b, 0xdd, 0x18, 0xe4, 0x3f, 0xff, 0x56, 0xe7, 0x2c, 0x2e, 0x33, 0xe4, 0x82, 0x69, + 0x16, 0xb7, 0xe0, 0xc1, 0x3e, 0x51, 0x31, 0x00, 0xe7, 0x8b, 0x9c, 0x73, 0xb2, 0x27, 0x32, 0x08, + 0xed, 0x3a, 0x08, 0x79, 0x30, 0x97, 0x03, 0x70, 0xfe, 0x09, 0xe7, 0x44, 0x1c, 0x2b, 0xa6, 0x94, + 0x30, 0x5e, 0x84, 0xf1, 0x6b, 0xd8, 0xdd, 0xb6, 0x3d, 0x7e, 0x4b, 0x33, 0x00, 0xdd, 0x4b, 0x9c, + 0x6e, 0x8c, 0x03, 0xe9, 0xb5, 0x0d, 0xe1, 0x3a, 0x07, 0xa9, 0x1d, 0x4d, 0xc7, 0x03, 0x50, 0x7c, + 0x81, 0x53, 0x8c, 0x10, 0x7d, 0x02, 0x5d, 0x80, 0x6c, 0xdd, 0xe6, 0x99, 0x29, 0x1a, 0xfe, 0x32, + 0x87, 0x67, 0x04, 0x86, 0x53, 0x38, 0xb6, 0xd3, 0x34, 0x49, 0xda, 0x8a, 0xa6, 0xf8, 0x53, 0x41, + 0x21, 0x30, 0x9c, 0xe2, 0x00, 0x6e, 0xfd, 0x33, 0x41, 0xe1, 0x85, 0xfc, 0xf9, 0x0c, 0x64, 0x6c, + 0xcb, 0x6c, 0xd9, 0xd6, 0x20, 0x46, 0x7c, 0x91, 0x33, 0x00, 0x87, 0x10, 0x82, 0xf3, 0x90, 0x1e, + 0x74, 0x22, 0xfe, 0xe2, 0x2d, 0xb1, 0x3c, 0xc4, 0x0c, 0x2c, 0xc3, 0x98, 0xd8, 0xa0, 0x0c, 0xdb, + 0x1a, 0x80, 0xe2, 0xcb, 0x9c, 0x22, 0x17, 0x82, 0xf1, 0x61, 0xf8, 0xd8, 0xf3, 0xeb, 0x78, 0x10, + 0x92, 0x57, 0xc4, 0x30, 0x38, 0x84, 0xbb, 0x72, 0x1b, 0x5b, 0xfa, 0xee, 0x60, 0x0c, 0x5f, 0x11, + 0xae, 0x14, 0x18, 0x42, 0xb1, 0x08, 0xa3, 0x0d, 0xcd, 0xf5, 0x76, 0x35, 0x73, 0xa0, 0xe9, 0xf8, + 0x4b, 0xce, 0x91, 0x0d, 0x40, 0xdc, 0x23, 0x4d, 0xeb, 0x20, 0x34, 0x5f, 0x15, 0x1e, 0x09, 0xc1, + 0xf8, 0xd2, 0xf3, 0x7c, 0x7a, 0xa5, 0x75, 0x10, 0xb6, 0xbf, 0x12, 0x4b, 0x8f, 0x61, 0xab, 0x61, + 0xc6, 0xf3, 0x90, 0xf6, 0x8c, 0x1b, 0x03, 0xd1, 0xfc, 0xb5, 0x98, 0x69, 0x0a, 0x20, 0xe0, 0xcb, + 0xf0, 0x50, 0xdf, 0x34, 0x31, 0x00, 0xd9, 0xdf, 0x70, 0xb2, 0x43, 0x7d, 0x52, 0x05, 0xdf, 0x12, + 0x0e, 0x4a, 0xf9, 0xb7, 0x62, 0x4b, 0xc0, 0x5d, 0x5c, 0xeb, 0xe4, 0xac, 0xe0, 0x69, 0x3b, 0x07, + 0xf3, 0xda, 0xdf, 0x09, 0xaf, 0x31, 0x6c, 0x87, 0xd7, 0x36, 0xe1, 0x10, 0x67, 0x3c, 0xd8, 0xbc, + 0x7e, 0x4d, 0x6c, 0xac, 0x0c, 0xbd, 0xd5, 0x39, 0xbb, 0x9f, 0x84, 0xa9, 0xc0, 0x9d, 0xa2, 0x28, + 0xf5, 0xd4, 0x86, 0xe6, 0x0c, 0xc0, 0xfc, 0x75, 0xce, 0x2c, 0x76, 0xfc, 0xa0, 0xaa, 0xf5, 0xaa, + 0x9a, 0x43, 0xc8, 0x9f, 0x85, 0xbc, 0x20, 0x6f, 0x5a, 0x2e, 0xd6, 0xed, 0xba, 0x65, 0xdc, 0xc0, + 0xb5, 0x01, 0xa8, 0xbf, 0xd1, 0x35, 0x55, 0x5b, 0x21, 0x38, 0x61, 0xae, 0x80, 0x1c, 0xd4, 0x2a, + 0xaa, 0xd1, 0x70, 0x6c, 0xd7, 0x8f, 0x60, 0xfc, 0xa6, 0x98, 0xa9, 0x00, 0x57, 0xa1, 0xb0, 0x62, + 0x19, 0x72, 0xf4, 0x71, 0xd0, 0x90, 0xfc, 0x7b, 0x4e, 0x34, 0xda, 0x46, 0xf1, 0x8d, 0x43, 0xb7, + 0x1b, 0x8e, 0xe6, 0x0e, 0xb2, 0xff, 0x7d, 0x4b, 0x6c, 0x1c, 0x1c, 0xc2, 0x37, 0x0e, 0xbf, 0xe5, + 0x60, 0x92, 0xed, 0x07, 0x60, 0xf8, 0xb6, 0xd8, 0x38, 0x04, 0x86, 0x53, 0x88, 0x82, 0x61, 0x00, + 0x8a, 0x7f, 0x10, 0x14, 0x02, 0x43, 0x28, 0x3e, 0xde, 0x4e, 0xb4, 0x2e, 0xae, 0x1b, 0x9e, 0xef, + 0xb2, 0x52, 0xf8, 0xde, 0x54, 0xdf, 0x79, 0xab, 0xb3, 0x08, 0x53, 0x42, 0x50, 0xb2, 0x13, 0xf1, + 0x2b, 0x54, 0x7a, 0x52, 0x8a, 0x36, 0xec, 0xbb, 0x62, 0x27, 0x0a, 0xc1, 0x88, 0x6d, 0xa1, 0x0a, + 0x91, 0xb8, 0x5d, 0x27, 0xe7, 0x83, 0x01, 0xe8, 0xbe, 0xd7, 0x65, 0xdc, 0x86, 0xc0, 0x12, 0xce, + 0x50, 0xfd, 0xd3, 0xb4, 0xae, 0xe2, 0xd6, 0x40, 0xd1, 0xf9, 0x8f, 0x5d, 0xf5, 0xcf, 0x16, 0x43, + 0xb2, 0x3d, 0x64, 0xac, 0xab, 0x9e, 0x42, 0x51, 0x1f, 0xeb, 0xe4, 0x7f, 0xf5, 0x0e, 0x1f, 0x6f, + 0x67, 0x39, 0x55, 0x5c, 0x21, 0x41, 0xde, 0x59, 0xf4, 0x44, 0x93, 0xbd, 0x70, 0x27, 0x88, 0xf3, + 0x8e, 0x9a, 0xa7, 0x78, 0x01, 0x46, 0x3b, 0x0a, 0x9e, 0x68, 0xaa, 0x5f, 0xe3, 0x54, 0xd9, 0x70, + 0xbd, 0x53, 0x3c, 0x05, 0x09, 0x52, 0xbc, 0x44, 0xc3, 0x7f, 0x9d, 0xc3, 0xa9, 0x7a, 0xf1, 0xa3, + 0x90, 0x12, 0x45, 0x4b, 0x34, 0xf4, 0x37, 0x38, 0x34, 0x80, 0x10, 0xb8, 0x28, 0x58, 0xa2, 0xe1, + 0x9f, 0x11, 0x70, 0x01, 0x21, 0xf0, 0xc1, 0x5d, 0xf8, 0xfd, 0xdf, 0x4a, 0xf0, 0xa4, 0x23, 0x7c, + 0x77, 0x1e, 0x46, 0x78, 0xa5, 0x12, 0x8d, 0xfe, 0x2c, 0xef, 0x5c, 0x20, 0x8a, 0x67, 0x20, 0x39, + 0xa0, 0xc3, 0x7f, 0x9b, 0x43, 0x99, 0x7e, 0x71, 0x11, 0x32, 0xa1, 0xea, 0x24, 0x1a, 0xfe, 0x3b, + 0x1c, 0x1e, 0x46, 0x11, 0xd3, 0x79, 0x75, 0x12, 0x4d, 0xf0, 0xbb, 0xc2, 0x74, 0x8e, 0x20, 0x6e, + 0x13, 0x85, 0x49, 0x34, 0xfa, 0xf7, 0x84, 0xd7, 0x05, 0xa4, 0xf8, 0x0c, 0xa4, 0x83, 0x64, 0x13, + 0x8d, 0xff, 0x7d, 0x8e, 0x6f, 0x63, 0x88, 0x07, 0x42, 0xc9, 0x2e, 0x9a, 0xe2, 0x0f, 0x84, 0x07, + 0x42, 0x28, 0xb2, 0x8c, 0xba, 0x0b, 0x98, 0x68, 0xa6, 0x3f, 0x14, 0xcb, 0xa8, 0xab, 0x7e, 0x21, + 0xb3, 0x49, 0xf7, 0xfc, 0x68, 0x8a, 0x3f, 0x12, 0xb3, 0x49, 0xf5, 0x89, 0x19, 0xdd, 0x15, 0x41, + 0x34, 0xc7, 0x1f, 0x0b, 0x33, 0xba, 0x0a, 0x82, 0xe2, 0x3a, 0xa0, 0xde, 0x6a, 0x20, 0x9a, 0xef, + 0x73, 0x9c, 0x6f, 0xbc, 0xa7, 0x18, 0x28, 0x5e, 0x82, 0x43, 0xfd, 0x2b, 0x81, 0x68, 0xd6, 0xcf, + 0xdf, 0xe9, 0x3a, 0xbb, 0x85, 0x0b, 0x81, 0xe2, 0x66, 0x3b, 0xa5, 0x84, 0xab, 0x80, 0x68, 0xda, + 0x17, 0xef, 0x74, 0x6e, 0xdc, 0xe1, 0x22, 0xa0, 0xb8, 0x00, 0xd0, 0x4e, 0xc0, 0xd1, 0x5c, 0x2f, + 0x71, 0xae, 0x10, 0x88, 0x2c, 0x0d, 0x9e, 0x7f, 0xa3, 0xf1, 0x5f, 0x10, 0x4b, 0x83, 0x23, 0xc8, + 0xd2, 0x10, 0xa9, 0x37, 0x1a, 0xfd, 0xb2, 0x58, 0x1a, 0x02, 0x42, 0x22, 0x3b, 0x94, 0xdd, 0xa2, + 0x19, 0xbe, 0x28, 0x22, 0x3b, 0x84, 0x2a, 0xae, 0xc2, 0x78, 0x4f, 0x42, 0x8c, 0xa6, 0xfa, 0x12, + 0xa7, 0x92, 0xbb, 0xf3, 0x61, 0x38, 0x79, 0xf1, 0x64, 0x18, 0xcd, 0xf6, 0xe7, 0x5d, 0xc9, 0x8b, + 0xe7, 0xc2, 0xe2, 0x79, 0x48, 0x59, 0x4d, 0xd3, 0x24, 0x8b, 0x07, 0xdd, 0xfb, 0x03, 0xbb, 0xfc, + 0x4f, 0xde, 0xe5, 0xde, 0x11, 0x80, 0xe2, 0x29, 0x48, 0xe2, 0xc6, 0x36, 0xae, 0x45, 0x21, 0xff, + 0xe3, 0x5d, 0xb1, 0x61, 0x12, 0xed, 0xe2, 0x33, 0x00, 0xec, 0x6a, 0x84, 0xbe, 0xf6, 0x8b, 0xc0, + 0xfe, 0xe7, 0xbb, 0xfc, 0xd3, 0x97, 0x36, 0xa4, 0x4d, 0xc0, 0x3e, 0xa4, 0xb9, 0x37, 0xc1, 0x5b, + 0x9d, 0x04, 0x74, 0x46, 0xce, 0xc1, 0xc8, 0x15, 0xcf, 0xb6, 0x7c, 0xad, 0x1e, 0x85, 0xfe, 0x2f, + 0x8e, 0x16, 0xfa, 0xc4, 0x61, 0x0d, 0xdb, 0xc5, 0xbe, 0x56, 0xf7, 0xa2, 0xb0, 0xff, 0xcd, 0xb1, + 0x01, 0x80, 0x80, 0x75, 0xcd, 0xf3, 0x07, 0x19, 0xf7, 0x4f, 0x05, 0x58, 0x00, 0x88, 0xd1, 0xe4, + 0xf7, 0x55, 0xdc, 0x8a, 0xc2, 0xbe, 0x2d, 0x8c, 0xe6, 0xfa, 0xc5, 0x8f, 0x42, 0x9a, 0xfc, 0x64, + 0xdf, 0xb3, 0x45, 0x80, 0xff, 0x87, 0x83, 0xdb, 0x08, 0xd2, 0xb3, 0xe7, 0xd7, 0x7c, 0x23, 0xda, + 0xd9, 0xff, 0xcb, 0x67, 0x5a, 0xe8, 0x17, 0x17, 0x20, 0xe3, 0xf9, 0xb5, 0x5a, 0x93, 0xd7, 0xa7, + 0x11, 0xf0, 0xff, 0x7b, 0x37, 0xb8, 0xb2, 0x08, 0x30, 0x64, 0xb6, 0xaf, 0x5f, 0xf5, 0x1d, 0x9b, + 0xbe, 0xe6, 0x88, 0x62, 0xb8, 0xc3, 0x19, 0x42, 0x90, 0x52, 0xb9, 0xff, 0xf5, 0x2d, 0x2c, 0xdb, + 0xcb, 0x36, 0xbb, 0xb8, 0x7d, 0x6e, 0x36, 0xfa, 0x06, 0x16, 0xbe, 0x31, 0x06, 0x87, 0x75, 0xbb, + 0xb1, 0x6d, 0x7b, 0xc7, 0x2c, 0x6c, 0xf8, 0xbb, 0xd8, 0x3d, 0x26, 0xe6, 0x86, 0x5f, 0xcc, 0x06, + 0x73, 0x35, 0x75, 0xb0, 0x1b, 0xdd, 0xd9, 0x9f, 0x8c, 0x42, 0x6a, 0x51, 0xf3, 0x7c, 0xed, 0xba, + 0xd6, 0x42, 0x8f, 0x40, 0xaa, 0x62, 0xf9, 0x27, 0x8e, 0xaf, 0xfb, 0x2e, 0x7d, 0x29, 0x19, 0x2f, + 0xa5, 0xef, 0xde, 0x9a, 0x4e, 0x1a, 0x44, 0xa6, 0x04, 0x4d, 0xe8, 0x28, 0x24, 0xe9, 0x6f, 0x7a, + 0xaf, 0x1d, 0x2f, 0x8d, 0xbe, 0x7a, 0x6b, 0x7a, 0xa8, 0xad, 0xc7, 0xda, 0xd0, 0x65, 0xc8, 0x54, + 0x5b, 0x5b, 0x86, 0xe5, 0x9f, 0x3e, 0x49, 0xe8, 0x88, 0x6f, 0x12, 0xa5, 0x33, 0x77, 0x6f, 0x4d, + 0x9f, 0xd8, 0xd7, 0x40, 0x52, 0x54, 0xb4, 0x07, 0x26, 0xd0, 0xf4, 0xa3, 0xe1, 0x30, 0x17, 0xba, + 0x04, 0x29, 0xf1, 0xc8, 0xde, 0x0f, 0x95, 0xce, 0x73, 0x13, 0xee, 0x8b, 0x3b, 0x20, 0x43, 0xbf, + 0x04, 0xd9, 0x6a, 0xeb, 0x82, 0x69, 0x6b, 0xdc, 0x07, 0xc9, 0x19, 0x69, 0x2e, 0x56, 0x3a, 0x7b, + 0xf7, 0xd6, 0xf4, 0xc9, 0x81, 0x89, 0x39, 0x9c, 0x32, 0x77, 0xb0, 0xa1, 0xe7, 0x20, 0x1d, 0x3c, + 0xd3, 0x37, 0x50, 0xb1, 0xd2, 0x47, 0xb8, 0xdd, 0xf7, 0x47, 0xdf, 0xa6, 0x0b, 0x59, 0xce, 0xdc, + 0x3d, 0x32, 0x23, 0xcd, 0x49, 0xf7, 0x63, 0x39, 0xf7, 0x49, 0x07, 0x5b, 0xc8, 0xf2, 0xd3, 0x27, + 0xe9, 0x2b, 0x2f, 0xe9, 0x7e, 0x2d, 0xe7, 0xf4, 0x6d, 0x3a, 0x74, 0x11, 0x46, 0xaa, 0xad, 0x52, + 0xcb, 0xc7, 0x1e, 0xfd, 0x16, 0x2d, 0x5b, 0x7a, 0xea, 0xee, 0xad, 0xe9, 0x0f, 0x0d, 0xc8, 0x4a, + 0x71, 0x8a, 0x20, 0x40, 0x33, 0x90, 0x59, 0xb5, 0xdd, 0x86, 0x66, 0x32, 0x3e, 0x60, 0xaf, 0xf0, + 0x42, 0x22, 0xb4, 0x45, 0x46, 0xc2, 0x66, 0xdb, 0xa3, 0xff, 0xc6, 0xf4, 0x33, 0xc4, 0x64, 0x9b, + 0x09, 0x19, 0x90, 0xac, 0xb6, 0xaa, 0x9a, 0x93, 0xcf, 0xd2, 0xf7, 0x4b, 0x87, 0xe7, 0x03, 0x84, + 0x58, 0x5b, 0xf3, 0xb4, 0x9d, 0x7e, 0x88, 0x53, 0x3a, 0x79, 0xf7, 0xd6, 0xf4, 0x53, 0x03, 0xf7, + 0x58, 0xd5, 0x1c, 0xda, 0x1d, 0xeb, 0x01, 0x7d, 0x4b, 0x22, 0x0b, 0x8b, 0x5d, 0xd0, 0x93, 0x1e, + 0x47, 0x69, 0x8f, 0x47, 0xfb, 0xf6, 0x18, 0x68, 0xb1, 0x7e, 0xad, 0x4f, 0xbf, 0x76, 0x80, 0x91, + 0xb2, 0x73, 0x21, 0xe9, 0xfa, 0x37, 0x5f, 0xbb, 0xef, 0x45, 0x1b, 0x58, 0x80, 0x5e, 0x90, 0x60, + 0xb4, 0xda, 0x5a, 0xe5, 0x09, 0x9c, 0x58, 0x9e, 0xe3, 0xff, 0xec, 0xd2, 0xcf, 0xf2, 0x90, 0x1e, + 0xb3, 0xfd, 0xf4, 0xa7, 0x5f, 0x9b, 0x3e, 0x3e, 0xb0, 0x11, 0x74, 0x0b, 0xa2, 0x36, 0x74, 0xf6, + 0x89, 0x3e, 0x43, 0xad, 0x28, 0x93, 0x62, 0xa0, 0x86, 0x6b, 0xc4, 0x8a, 0xb1, 0x7b, 0x58, 0x11, + 0xd2, 0x63, 0x56, 0x14, 0x49, 0xd4, 0xdf, 0xbf, 0x25, 0x21, 0x3e, 0xb4, 0x06, 0xc3, 0xcc, 0xc3, + 0xf4, 0x3b, 0xc8, 0xf4, 0x01, 0xc3, 0xb0, 0x3d, 0x39, 0x0a, 0xa7, 0x99, 0x3a, 0x0b, 0xd0, 0x8e, + 0x31, 0x24, 0x43, 0xfc, 0x2a, 0x6e, 0xf1, 0x8f, 0x5d, 0xc9, 0x4f, 0x34, 0xd9, 0xfe, 0x1a, 0x5d, + 0x9a, 0x4b, 0xf0, 0x4f, 0xcc, 0x8b, 0xb1, 0xb3, 0xd2, 0xd4, 0xd3, 0x20, 0x77, 0xc7, 0xca, 0x81, + 0xf0, 0x0a, 0xa0, 0xde, 0x19, 0x0b, 0x33, 0x24, 0x19, 0xc3, 0xa3, 0x61, 0x86, 0xcc, 0x71, 0xb9, + 0xed, 0xf3, 0x4b, 0x86, 0xe9, 0xd9, 0x56, 0x0f, 0x67, 0xb7, 0xff, 0x7f, 0x36, 0xce, 0xd9, 0x02, + 0x0c, 0x33, 0x21, 0x19, 0x4b, 0x85, 0xa6, 0x0f, 0x9a, 0xe5, 0x14, 0xf6, 0x50, 0x5a, 0x79, 0xf5, + 0x76, 0x61, 0xe8, 0x87, 0xb7, 0x0b, 0x43, 0xff, 0x7a, 0xbb, 0x30, 0xf4, 0xfa, 0xed, 0x82, 0xf4, + 0xe6, 0xed, 0x82, 0xf4, 0xf6, 0xed, 0x82, 0xf4, 0xce, 0xed, 0x82, 0x74, 0x73, 0xaf, 0x20, 0x7d, + 0x65, 0xaf, 0x20, 0x7d, 0x6d, 0xaf, 0x20, 0x7d, 0x67, 0xaf, 0x20, 0x7d, 0x7f, 0xaf, 0x20, 0xbd, + 0xba, 0x57, 0x18, 0xfa, 0xe1, 0x5e, 0x61, 0xe8, 0xf5, 0xbd, 0x82, 0xf4, 0xe6, 0x5e, 0x61, 0xe8, + 0xed, 0xbd, 0x82, 0xf4, 0xce, 0x5e, 0x61, 0xe8, 0xe6, 0x8f, 0x0b, 0x43, 0xff, 0x1f, 0x00, 0x00, + 0xff, 0xff, 0x24, 0x62, 0x9d, 0xf9, 0x50, 0x3a, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -1183,6 +1188,9 @@ return dAtA } func (m *Castaway) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int32Ptr != nil { @@ -1263,6 +1271,9 @@ } func (m *Wilson) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/combos/unmarshaler/casttype.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/combos/unmarshaler/casttype.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/combos/unmarshaler/casttype.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/combos/unmarshaler/casttype.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -126,274 +126,279 @@ func CasttypeDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4260 bytes of a gzipped FileDescriptorSet + // 4343 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x1b, 0xd7, - 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0x79, 0x49, 0x4b, 0x10, 0x1d, 0x83, 0x14, 0xe5, + 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0x79, 0x49, 0xcb, 0x30, 0x1d, 0x83, 0x14, 0xe5, 0x1f, 0xda, 0x4e, 0x28, 0x8f, 0xfe, 0x05, 0x25, 0x76, 0x09, 0x12, 0x62, 0xa0, 0x12, 0x24, 0xb3, 0x24, 0x23, 0xcb, 0x69, 0x67, 0x67, 0xb9, 0xb8, 0x04, 0x57, 0x5a, 0xec, 0x6e, 0x76, 0x17, 0x92, - 0xa1, 0xe9, 0x83, 0x1a, 0xb7, 0xcd, 0xa4, 0x9d, 0xfe, 0x77, 0xa6, 0x89, 0xeb, 0xb8, 0x4d, 0x67, - 0x52, 0xa7, 0xe9, 0x5f, 0xd2, 0x34, 0x6e, 0xd2, 0xa7, 0xbc, 0xa4, 0xf5, 0x53, 0x27, 0x79, 0xeb, - 0x43, 0x47, 0xb6, 0x18, 0xcf, 0xd4, 0x69, 0xdd, 0xc6, 0x6d, 0xfd, 0xe0, 0x91, 0x5f, 0x32, 0xf7, - 0x6f, 0xb1, 0xf8, 0xa1, 0x16, 0x54, 0xc6, 0xce, 0x13, 0xb1, 0xe7, 0x9e, 0xef, 0xbb, 0xe7, 0x9e, - 0x7b, 0xee, 0x3d, 0xe7, 0xde, 0x5d, 0xc2, 0x4f, 0xce, 0xc3, 0x4c, 0xdd, 0xb6, 0xeb, 0x26, 0x3e, - 0xee, 0xb8, 0xb6, 0x6f, 0x6f, 0x37, 0x77, 0x8e, 0xd7, 0xb0, 0xa7, 0xbb, 0x86, 0xe3, 0xdb, 0xee, - 0x3c, 0x95, 0xa1, 0x31, 0xa6, 0x31, 0x2f, 0x34, 0x66, 0xab, 0x30, 0x7e, 0xd1, 0x30, 0xf1, 0x52, - 0xa0, 0xb8, 0x81, 0x7d, 0x74, 0x0e, 0x12, 0x3b, 0x86, 0x89, 0xf3, 0xd2, 0x4c, 0x7c, 0x2e, 0x73, - 0xe2, 0xe1, 0xf9, 0x2e, 0xd0, 0x7c, 0x27, 0x62, 0x9d, 0x88, 0x15, 0x8a, 0x98, 0x7d, 0x33, 0x01, - 0x13, 0x7d, 0x5a, 0x11, 0x82, 0x84, 0xa5, 0x35, 0x08, 0xa3, 0x34, 0x97, 0x56, 0xe8, 0x6f, 0x94, - 0x87, 0x11, 0x47, 0xd3, 0xaf, 0x69, 0x75, 0x9c, 0x8f, 0x51, 0xb1, 0x78, 0x44, 0x05, 0x80, 0x1a, - 0x76, 0xb0, 0x55, 0xc3, 0x96, 0xde, 0xca, 0xc7, 0x67, 0xe2, 0x73, 0x69, 0x25, 0x24, 0x41, 0x4f, - 0xc2, 0xb8, 0xd3, 0xdc, 0x36, 0x0d, 0x5d, 0x0d, 0xa9, 0xc1, 0x4c, 0x7c, 0x2e, 0xa9, 0xc8, 0xac, - 0x61, 0xa9, 0xad, 0xfc, 0x18, 0x8c, 0xdd, 0xc0, 0xda, 0xb5, 0xb0, 0x6a, 0x86, 0xaa, 0xe6, 0x88, - 0x38, 0xa4, 0xb8, 0x08, 0xd9, 0x06, 0xf6, 0x3c, 0xad, 0x8e, 0x55, 0xbf, 0xe5, 0xe0, 0x7c, 0x82, - 0x8e, 0x7e, 0xa6, 0x67, 0xf4, 0xdd, 0x23, 0xcf, 0x70, 0xd4, 0x66, 0xcb, 0xc1, 0x68, 0x01, 0xd2, - 0xd8, 0x6a, 0x36, 0x18, 0x43, 0x72, 0x1f, 0xff, 0x95, 0xad, 0x66, 0xa3, 0x9b, 0x25, 0x45, 0x60, - 0x9c, 0x62, 0xc4, 0xc3, 0xee, 0x75, 0x43, 0xc7, 0xf9, 0x61, 0x4a, 0xf0, 0x58, 0x0f, 0xc1, 0x06, - 0x6b, 0xef, 0xe6, 0x10, 0x38, 0xb4, 0x08, 0x69, 0xfc, 0xbc, 0x8f, 0x2d, 0xcf, 0xb0, 0xad, 0xfc, - 0x08, 0x25, 0x79, 0xa4, 0xcf, 0x2c, 0x62, 0xb3, 0xd6, 0x4d, 0xd1, 0xc6, 0xa1, 0x33, 0x30, 0x62, - 0x3b, 0xbe, 0x61, 0x5b, 0x5e, 0x3e, 0x35, 0x23, 0xcd, 0x65, 0x4e, 0x7c, 0xa4, 0x6f, 0x20, 0xac, - 0x31, 0x1d, 0x45, 0x28, 0xa3, 0x0a, 0xc8, 0x9e, 0xdd, 0x74, 0x75, 0xac, 0xea, 0x76, 0x0d, 0xab, - 0x86, 0xb5, 0x63, 0xe7, 0xd3, 0x94, 0x60, 0xba, 0x77, 0x20, 0x54, 0x71, 0xd1, 0xae, 0xe1, 0x8a, - 0xb5, 0x63, 0x2b, 0x39, 0xaf, 0xe3, 0x19, 0x1d, 0x82, 0x61, 0xaf, 0x65, 0xf9, 0xda, 0xf3, 0xf9, - 0x2c, 0x8d, 0x10, 0xfe, 0x34, 0xfb, 0xdd, 0x61, 0x18, 0x1b, 0x24, 0xc4, 0x2e, 0x40, 0x72, 0x87, - 0x8c, 0x32, 0x1f, 0x3b, 0x88, 0x0f, 0x18, 0xa6, 0xd3, 0x89, 0xc3, 0xf7, 0xe9, 0xc4, 0x05, 0xc8, - 0x58, 0xd8, 0xf3, 0x71, 0x8d, 0x45, 0x44, 0x7c, 0xc0, 0x98, 0x02, 0x06, 0xea, 0x0d, 0xa9, 0xc4, - 0x7d, 0x85, 0xd4, 0xb3, 0x30, 0x16, 0x98, 0xa4, 0xba, 0x9a, 0x55, 0x17, 0xb1, 0x79, 0x3c, 0xca, - 0x92, 0xf9, 0xb2, 0xc0, 0x29, 0x04, 0xa6, 0xe4, 0x70, 0xc7, 0x33, 0x5a, 0x02, 0xb0, 0x2d, 0x6c, - 0xef, 0xa8, 0x35, 0xac, 0x9b, 0xf9, 0xd4, 0x3e, 0x5e, 0x5a, 0x23, 0x2a, 0x3d, 0x5e, 0xb2, 0x99, - 0x54, 0x37, 0xd1, 0xf9, 0x76, 0xa8, 0x8d, 0xec, 0x13, 0x29, 0x55, 0xb6, 0xc8, 0x7a, 0xa2, 0x6d, - 0x0b, 0x72, 0x2e, 0x26, 0x71, 0x8f, 0x6b, 0x7c, 0x64, 0x69, 0x6a, 0xc4, 0x7c, 0xe4, 0xc8, 0x14, - 0x0e, 0x63, 0x03, 0x1b, 0x75, 0xc3, 0x8f, 0xe8, 0x18, 0x04, 0x02, 0x95, 0x86, 0x15, 0xd0, 0x5d, - 0x28, 0x2b, 0x84, 0xab, 0x5a, 0x03, 0x4f, 0xdd, 0x84, 0x5c, 0xa7, 0x7b, 0xd0, 0x24, 0x24, 0x3d, - 0x5f, 0x73, 0x7d, 0x1a, 0x85, 0x49, 0x85, 0x3d, 0x20, 0x19, 0xe2, 0xd8, 0xaa, 0xd1, 0x5d, 0x2e, - 0xa9, 0x90, 0x9f, 0xe8, 0x17, 0xda, 0x03, 0x8e, 0xd3, 0x01, 0x3f, 0xda, 0x3b, 0xa3, 0x1d, 0xcc, - 0xdd, 0xe3, 0x9e, 0x3a, 0x0b, 0xa3, 0x1d, 0x03, 0x18, 0xb4, 0xeb, 0xd9, 0x5f, 0x81, 0x07, 0xfa, - 0x52, 0xa3, 0x67, 0x61, 0xb2, 0x69, 0x19, 0x96, 0x8f, 0x5d, 0xc7, 0xc5, 0x24, 0x62, 0x59, 0x57, - 0xf9, 0xff, 0x18, 0xd9, 0x27, 0xe6, 0xb6, 0xc2, 0xda, 0x8c, 0x45, 0x99, 0x68, 0xf6, 0x0a, 0x9f, - 0x48, 0xa7, 0xde, 0x1a, 0x91, 0x6f, 0xdd, 0xba, 0x75, 0x2b, 0x36, 0xfb, 0xc5, 0x61, 0x98, 0xec, - 0xb7, 0x66, 0xfa, 0x2e, 0xdf, 0x43, 0x30, 0x6c, 0x35, 0x1b, 0xdb, 0xd8, 0xa5, 0x4e, 0x4a, 0x2a, - 0xfc, 0x09, 0x2d, 0x40, 0xd2, 0xd4, 0xb6, 0xb1, 0x99, 0x4f, 0xcc, 0x48, 0x73, 0xb9, 0x13, 0x4f, - 0x0e, 0xb4, 0x2a, 0xe7, 0x57, 0x08, 0x44, 0x61, 0x48, 0xf4, 0x34, 0x24, 0xf8, 0x16, 0x4d, 0x18, - 0x9e, 0x18, 0x8c, 0x81, 0xac, 0x25, 0x85, 0xe2, 0xd0, 0x83, 0x90, 0x26, 0x7f, 0x59, 0x6c, 0x0c, - 0x53, 0x9b, 0x53, 0x44, 0x40, 0xe2, 0x02, 0x4d, 0x41, 0x8a, 0x2e, 0x93, 0x1a, 0x16, 0xa9, 0x2d, - 0x78, 0x26, 0x81, 0x55, 0xc3, 0x3b, 0x5a, 0xd3, 0xf4, 0xd5, 0xeb, 0x9a, 0xd9, 0xc4, 0x34, 0xe0, - 0xd3, 0x4a, 0x96, 0x0b, 0x3f, 0x4d, 0x64, 0x68, 0x1a, 0x32, 0x6c, 0x55, 0x19, 0x56, 0x0d, 0x3f, - 0x4f, 0x77, 0xcf, 0xa4, 0xc2, 0x16, 0x5a, 0x85, 0x48, 0x48, 0xf7, 0x57, 0x3d, 0xdb, 0x12, 0xa1, - 0x49, 0xbb, 0x20, 0x02, 0xda, 0xfd, 0xd9, 0xee, 0x8d, 0xfb, 0xa1, 0xfe, 0xc3, 0xeb, 0x8e, 0xa9, - 0xd9, 0x57, 0x63, 0x90, 0xa0, 0xfb, 0xc5, 0x18, 0x64, 0x36, 0xaf, 0xac, 0x97, 0xd5, 0xa5, 0xb5, - 0xad, 0xd2, 0x4a, 0x59, 0x96, 0x50, 0x0e, 0x80, 0x0a, 0x2e, 0xae, 0xac, 0x2d, 0x6c, 0xca, 0xb1, - 0xe0, 0xb9, 0xb2, 0xba, 0x79, 0xe6, 0x94, 0x1c, 0x0f, 0x00, 0x5b, 0x4c, 0x90, 0x08, 0x2b, 0x9c, - 0x3c, 0x21, 0x27, 0x91, 0x0c, 0x59, 0x46, 0x50, 0x79, 0xb6, 0xbc, 0x74, 0xe6, 0x94, 0x3c, 0xdc, - 0x29, 0x39, 0x79, 0x42, 0x1e, 0x41, 0xa3, 0x90, 0xa6, 0x92, 0xd2, 0xda, 0xda, 0x8a, 0x9c, 0x0a, - 0x38, 0x37, 0x36, 0x95, 0xca, 0xea, 0xb2, 0x9c, 0x0e, 0x38, 0x97, 0x95, 0xb5, 0xad, 0x75, 0x19, - 0x02, 0x86, 0x6a, 0x79, 0x63, 0x63, 0x61, 0xb9, 0x2c, 0x67, 0x02, 0x8d, 0xd2, 0x95, 0xcd, 0xf2, - 0x86, 0x9c, 0xed, 0x30, 0xeb, 0xe4, 0x09, 0x79, 0x34, 0xe8, 0xa2, 0xbc, 0xba, 0x55, 0x95, 0x73, - 0x68, 0x1c, 0x46, 0x59, 0x17, 0xc2, 0x88, 0xb1, 0x2e, 0xd1, 0x99, 0x53, 0xb2, 0xdc, 0x36, 0x84, - 0xb1, 0x8c, 0x77, 0x08, 0xce, 0x9c, 0x92, 0xd1, 0xec, 0x22, 0x24, 0x69, 0x74, 0x21, 0x04, 0xb9, - 0x95, 0x85, 0x52, 0x79, 0x45, 0x5d, 0x5b, 0xdf, 0xac, 0xac, 0xad, 0x2e, 0xac, 0xc8, 0x52, 0x5b, - 0xa6, 0x94, 0x3f, 0xb5, 0x55, 0x51, 0xca, 0x4b, 0x72, 0x2c, 0x2c, 0x5b, 0x2f, 0x2f, 0x6c, 0x96, - 0x97, 0xe4, 0xf8, 0xac, 0x0e, 0x93, 0xfd, 0xf6, 0xc9, 0xbe, 0x2b, 0x23, 0x34, 0xc5, 0xb1, 0x7d, - 0xa6, 0x98, 0x72, 0xf5, 0x4c, 0xf1, 0x8f, 0x62, 0x30, 0xd1, 0x27, 0x57, 0xf4, 0xed, 0xe4, 0x19, - 0x48, 0xb2, 0x10, 0x65, 0xd9, 0xf3, 0xf1, 0xbe, 0x49, 0x87, 0x06, 0x6c, 0x4f, 0x06, 0xa5, 0xb8, - 0x70, 0x05, 0x11, 0xdf, 0xa7, 0x82, 0x20, 0x14, 0x3d, 0x7b, 0xfa, 0x2f, 0xf7, 0xec, 0xe9, 0x2c, - 0xed, 0x9d, 0x19, 0x24, 0xed, 0x51, 0xd9, 0xc1, 0xf6, 0xf6, 0x64, 0x9f, 0xbd, 0xfd, 0x02, 0x8c, - 0xf7, 0x10, 0x0d, 0xbc, 0xc7, 0xbe, 0x20, 0x41, 0x7e, 0x3f, 0xe7, 0x44, 0xec, 0x74, 0xb1, 0x8e, - 0x9d, 0xee, 0x42, 0xb7, 0x07, 0x8f, 0xee, 0x3f, 0x09, 0x3d, 0x73, 0xfd, 0x8a, 0x04, 0x87, 0xfa, - 0x57, 0x8a, 0x7d, 0x6d, 0x78, 0x1a, 0x86, 0x1b, 0xd8, 0xdf, 0xb5, 0x45, 0xb5, 0xf4, 0x68, 0x9f, - 0x1c, 0x4c, 0x9a, 0xbb, 0x27, 0x9b, 0xa3, 0xc2, 0x49, 0x3c, 0xbe, 0x5f, 0xb9, 0xc7, 0xac, 0xe9, - 0xb1, 0xf4, 0x0b, 0x31, 0x78, 0xa0, 0x2f, 0x79, 0x5f, 0x43, 0x1f, 0x02, 0x30, 0x2c, 0xa7, 0xe9, - 0xb3, 0x8a, 0x88, 0x6d, 0xb0, 0x69, 0x2a, 0xa1, 0x9b, 0x17, 0xd9, 0x3c, 0x9b, 0x7e, 0xd0, 0x1e, - 0xa7, 0xed, 0xc0, 0x44, 0x54, 0xe1, 0x5c, 0xdb, 0xd0, 0x04, 0x35, 0xb4, 0xb0, 0xcf, 0x48, 0x7b, - 0x02, 0xf3, 0x29, 0x90, 0x75, 0xd3, 0xc0, 0x96, 0xaf, 0x7a, 0xbe, 0x8b, 0xb5, 0x86, 0x61, 0xd5, - 0x69, 0x06, 0x49, 0x15, 0x93, 0x3b, 0x9a, 0xe9, 0x61, 0x65, 0x8c, 0x35, 0x6f, 0x88, 0x56, 0x82, - 0xa0, 0x01, 0xe4, 0x86, 0x10, 0xc3, 0x1d, 0x08, 0xd6, 0x1c, 0x20, 0x66, 0xbf, 0x95, 0x82, 0x4c, - 0xa8, 0xae, 0x46, 0x47, 0x21, 0x7b, 0x55, 0xbb, 0xae, 0xa9, 0xe2, 0xac, 0xc4, 0x3c, 0x91, 0x21, - 0xb2, 0x75, 0x7e, 0x5e, 0x7a, 0x0a, 0x26, 0xa9, 0x8a, 0xdd, 0xf4, 0xb1, 0xab, 0xea, 0xa6, 0xe6, - 0x79, 0xd4, 0x69, 0x29, 0xaa, 0x8a, 0x48, 0xdb, 0x1a, 0x69, 0x5a, 0x14, 0x2d, 0xe8, 0x34, 0x4c, - 0x50, 0x44, 0xa3, 0x69, 0xfa, 0x86, 0x63, 0x62, 0x95, 0x9c, 0xde, 0x3c, 0x9a, 0x49, 0x02, 0xcb, - 0xc6, 0x89, 0x46, 0x95, 0x2b, 0x10, 0x8b, 0x3c, 0xb4, 0x04, 0x0f, 0x51, 0x58, 0x1d, 0x5b, 0xd8, - 0xd5, 0x7c, 0xac, 0xe2, 0xcf, 0x36, 0x35, 0xd3, 0x53, 0x35, 0xab, 0xa6, 0xee, 0x6a, 0xde, 0x6e, - 0x7e, 0x92, 0x10, 0x94, 0x62, 0x79, 0x49, 0x39, 0x42, 0x14, 0x97, 0xb9, 0x5e, 0x99, 0xaa, 0x2d, - 0x58, 0xb5, 0x4f, 0x6a, 0xde, 0x2e, 0x2a, 0xc2, 0x21, 0xca, 0xe2, 0xf9, 0xae, 0x61, 0xd5, 0x55, - 0x7d, 0x17, 0xeb, 0xd7, 0xd4, 0xa6, 0xbf, 0x73, 0x2e, 0xff, 0x60, 0xb8, 0x7f, 0x6a, 0xe1, 0x06, - 0xd5, 0x59, 0x24, 0x2a, 0x5b, 0xfe, 0xce, 0x39, 0xb4, 0x01, 0x59, 0x32, 0x19, 0x0d, 0xe3, 0x26, - 0x56, 0x77, 0x6c, 0x97, 0xa6, 0xc6, 0x5c, 0x9f, 0xad, 0x29, 0xe4, 0xc1, 0xf9, 0x35, 0x0e, 0xa8, - 0xda, 0x35, 0x5c, 0x4c, 0x6e, 0xac, 0x97, 0xcb, 0x4b, 0x4a, 0x46, 0xb0, 0x5c, 0xb4, 0x5d, 0x12, - 0x50, 0x75, 0x3b, 0x70, 0x70, 0x86, 0x05, 0x54, 0xdd, 0x16, 0xee, 0x3d, 0x0d, 0x13, 0xba, 0xce, - 0xc6, 0x6c, 0xe8, 0x2a, 0x3f, 0x63, 0x79, 0x79, 0xb9, 0xc3, 0x59, 0xba, 0xbe, 0xcc, 0x14, 0x78, - 0x8c, 0x7b, 0xe8, 0x3c, 0x3c, 0xd0, 0x76, 0x56, 0x18, 0x38, 0xde, 0x33, 0xca, 0x6e, 0xe8, 0x69, - 0x98, 0x70, 0x5a, 0xbd, 0x40, 0xd4, 0xd1, 0xa3, 0xd3, 0xea, 0x86, 0x9d, 0x85, 0x49, 0x67, 0xd7, - 0xe9, 0xc5, 0x3d, 0x11, 0xc6, 0x21, 0x67, 0xd7, 0xe9, 0x06, 0x3e, 0x42, 0x0f, 0xdc, 0x2e, 0xd6, - 0x35, 0x1f, 0xd7, 0xf2, 0x87, 0xc3, 0xea, 0xa1, 0x06, 0x74, 0x1c, 0x64, 0x5d, 0x57, 0xb1, 0xa5, - 0x6d, 0x9b, 0x58, 0xd5, 0x5c, 0x6c, 0x69, 0x5e, 0x7e, 0x3a, 0xac, 0x9c, 0xd3, 0xf5, 0x32, 0x6d, - 0x5d, 0xa0, 0x8d, 0xe8, 0x09, 0x18, 0xb7, 0xb7, 0xaf, 0xea, 0x2c, 0x24, 0x55, 0xc7, 0xc5, 0x3b, - 0xc6, 0xf3, 0xf9, 0x87, 0xa9, 0x7f, 0xc7, 0x48, 0x03, 0x0d, 0xc8, 0x75, 0x2a, 0x46, 0x8f, 0x83, - 0xac, 0x7b, 0xbb, 0x9a, 0xeb, 0xd0, 0x3d, 0xd9, 0x73, 0x34, 0x1d, 0xe7, 0x1f, 0x61, 0xaa, 0x4c, - 0xbe, 0x2a, 0xc4, 0x64, 0x49, 0x78, 0x37, 0x8c, 0x1d, 0x5f, 0x30, 0x3e, 0xc6, 0x96, 0x04, 0x95, - 0x71, 0xb6, 0x39, 0x90, 0x89, 0x2b, 0x3a, 0x3a, 0x9e, 0xa3, 0x6a, 0x39, 0x67, 0xd7, 0x09, 0xf7, - 0x7b, 0x0c, 0x46, 0x89, 0x66, 0xbb, 0xd3, 0xc7, 0x59, 0x41, 0xe6, 0xec, 0x86, 0x7a, 0xfc, 0xc0, - 0x6a, 0xe3, 0xd9, 0x22, 0x64, 0xc3, 0xf1, 0x89, 0xd2, 0xc0, 0x22, 0x54, 0x96, 0x48, 0xb1, 0xb2, - 0xb8, 0xb6, 0x44, 0xca, 0x8c, 0xe7, 0xca, 0x72, 0x8c, 0x94, 0x3b, 0x2b, 0x95, 0xcd, 0xb2, 0xaa, - 0x6c, 0xad, 0x6e, 0x56, 0xaa, 0x65, 0x39, 0x1e, 0xae, 0xab, 0xbf, 0x1f, 0x83, 0x5c, 0xe7, 0x11, - 0x09, 0x7d, 0x1c, 0x0e, 0x8b, 0xfb, 0x0c, 0x0f, 0xfb, 0xea, 0x0d, 0xc3, 0xa5, 0x4b, 0xa6, 0xa1, - 0xb1, 0xf4, 0x15, 0x4c, 0xda, 0x24, 0xd7, 0xda, 0xc0, 0xfe, 0x65, 0xc3, 0x25, 0x0b, 0xa2, 0xa1, - 0xf9, 0x68, 0x05, 0xa6, 0x2d, 0x5b, 0xf5, 0x7c, 0xcd, 0xaa, 0x69, 0x6e, 0x4d, 0x6d, 0xdf, 0x24, - 0xa9, 0x9a, 0xae, 0x63, 0xcf, 0xb3, 0x59, 0xaa, 0x0a, 0x58, 0x3e, 0x62, 0xd9, 0x1b, 0x5c, 0xb9, - 0xbd, 0x87, 0x2f, 0x70, 0xd5, 0xae, 0x00, 0x8b, 0xef, 0x17, 0x60, 0x0f, 0x42, 0xba, 0xa1, 0x39, - 0x2a, 0xb6, 0x7c, 0xb7, 0x45, 0x0b, 0xe3, 0x94, 0x92, 0x6a, 0x68, 0x4e, 0x99, 0x3c, 0x7f, 0x38, - 0xe7, 0x93, 0x7f, 0x8f, 0x43, 0x36, 0x5c, 0x1c, 0x93, 0xb3, 0x86, 0x4e, 0xf3, 0x88, 0x44, 0x77, - 0x9a, 0x63, 0xf7, 0x2c, 0xa5, 0xe7, 0x17, 0x49, 0x82, 0x29, 0x0e, 0xb3, 0x92, 0x55, 0x61, 0x48, - 0x92, 0xdc, 0xc9, 0xde, 0x82, 0x59, 0x89, 0x90, 0x52, 0xf8, 0x13, 0x5a, 0x86, 0xe1, 0xab, 0x1e, - 0xe5, 0x1e, 0xa6, 0xdc, 0x0f, 0xdf, 0x9b, 0xfb, 0xd2, 0x06, 0x25, 0x4f, 0x5f, 0xda, 0x50, 0x57, - 0xd7, 0x94, 0xea, 0xc2, 0x8a, 0xc2, 0xe1, 0xe8, 0x08, 0x24, 0x4c, 0xed, 0x66, 0xab, 0x33, 0x15, - 0x51, 0xd1, 0xa0, 0x8e, 0x3f, 0x02, 0x89, 0x1b, 0x58, 0xbb, 0xd6, 0x99, 0x00, 0xa8, 0xe8, 0x03, - 0x0c, 0xfd, 0xe3, 0x90, 0xa4, 0xfe, 0x42, 0x00, 0xdc, 0x63, 0xf2, 0x10, 0x4a, 0x41, 0x62, 0x71, - 0x4d, 0x21, 0xe1, 0x2f, 0x43, 0x96, 0x49, 0xd5, 0xf5, 0x4a, 0x79, 0xb1, 0x2c, 0xc7, 0x66, 0x4f, - 0xc3, 0x30, 0x73, 0x02, 0x59, 0x1a, 0x81, 0x1b, 0xe4, 0x21, 0xfe, 0xc8, 0x39, 0x24, 0xd1, 0xba, - 0x55, 0x2d, 0x95, 0x15, 0x39, 0x16, 0x9e, 0x5e, 0x0f, 0xb2, 0xe1, 0xba, 0xf8, 0xc3, 0x89, 0xa9, - 0x7f, 0x92, 0x20, 0x13, 0xaa, 0x73, 0x49, 0x81, 0xa2, 0x99, 0xa6, 0x7d, 0x43, 0xd5, 0x4c, 0x43, - 0xf3, 0x78, 0x50, 0x00, 0x15, 0x2d, 0x10, 0xc9, 0xa0, 0x93, 0xf6, 0xa1, 0x18, 0xff, 0xb2, 0x04, - 0x72, 0x77, 0x89, 0xd9, 0x65, 0xa0, 0xf4, 0x73, 0x35, 0xf0, 0x25, 0x09, 0x72, 0x9d, 0x75, 0x65, - 0x97, 0x79, 0x47, 0x7f, 0xae, 0xe6, 0xbd, 0x11, 0x83, 0xd1, 0x8e, 0x6a, 0x72, 0x50, 0xeb, 0x3e, - 0x0b, 0xe3, 0x46, 0x0d, 0x37, 0x1c, 0xdb, 0xc7, 0x96, 0xde, 0x52, 0x4d, 0x7c, 0x1d, 0x9b, 0xf9, - 0x59, 0xba, 0x51, 0x1c, 0xbf, 0x77, 0xbd, 0x3a, 0x5f, 0x69, 0xe3, 0x56, 0x08, 0xac, 0x38, 0x51, - 0x59, 0x2a, 0x57, 0xd7, 0xd7, 0x36, 0xcb, 0xab, 0x8b, 0x57, 0xd4, 0xad, 0xd5, 0x5f, 0x5c, 0x5d, - 0xbb, 0xbc, 0xaa, 0xc8, 0x46, 0x97, 0xda, 0x07, 0xb8, 0xd4, 0xd7, 0x41, 0xee, 0x36, 0x0a, 0x1d, - 0x86, 0x7e, 0x66, 0xc9, 0x43, 0x68, 0x02, 0xc6, 0x56, 0xd7, 0xd4, 0x8d, 0xca, 0x52, 0x59, 0x2d, - 0x5f, 0xbc, 0x58, 0x5e, 0xdc, 0xdc, 0x60, 0x37, 0x10, 0x81, 0xf6, 0x66, 0xe7, 0xa2, 0x7e, 0x31, - 0x0e, 0x13, 0x7d, 0x2c, 0x41, 0x0b, 0xfc, 0xec, 0xc0, 0x8e, 0x33, 0x1f, 0x1b, 0xc4, 0xfa, 0x79, - 0x92, 0xf2, 0xd7, 0x35, 0xd7, 0xe7, 0x47, 0x8d, 0xc7, 0x81, 0x78, 0xc9, 0xf2, 0x8d, 0x1d, 0x03, - 0xbb, 0xfc, 0xc2, 0x86, 0x1d, 0x28, 0xc6, 0xda, 0x72, 0x76, 0x67, 0xf3, 0x51, 0x40, 0x8e, 0xed, - 0x19, 0xbe, 0x71, 0x1d, 0xab, 0x86, 0x25, 0x6e, 0x77, 0xc8, 0x01, 0x23, 0xa1, 0xc8, 0xa2, 0xa5, - 0x62, 0xf9, 0x81, 0xb6, 0x85, 0xeb, 0x5a, 0x97, 0x36, 0xd9, 0xc0, 0xe3, 0x8a, 0x2c, 0x5a, 0x02, - 0xed, 0xa3, 0x90, 0xad, 0xd9, 0x4d, 0x52, 0x75, 0x31, 0x3d, 0x92, 0x2f, 0x24, 0x25, 0xc3, 0x64, - 0x81, 0x0a, 0xaf, 0xa7, 0xdb, 0xd7, 0x4a, 0x59, 0x25, 0xc3, 0x64, 0x4c, 0xe5, 0x31, 0x18, 0xd3, - 0xea, 0x75, 0x97, 0x90, 0x0b, 0x22, 0x76, 0x42, 0xc8, 0x05, 0x62, 0xaa, 0x38, 0x75, 0x09, 0x52, - 0xc2, 0x0f, 0x24, 0x25, 0x13, 0x4f, 0xa8, 0x0e, 0x3b, 0xf6, 0xc6, 0xe6, 0xd2, 0x4a, 0xca, 0x12, - 0x8d, 0x47, 0x21, 0x6b, 0x78, 0x6a, 0xfb, 0x96, 0x3c, 0x36, 0x13, 0x9b, 0x4b, 0x29, 0x19, 0xc3, - 0x0b, 0x6e, 0x18, 0x67, 0x5f, 0x89, 0x41, 0xae, 0xf3, 0x96, 0x1f, 0x2d, 0x41, 0xca, 0xb4, 0x75, - 0x8d, 0x86, 0x16, 0x7b, 0xc5, 0x34, 0x17, 0xf1, 0x62, 0x60, 0x7e, 0x85, 0xeb, 0x2b, 0x01, 0x72, - 0xea, 0x5f, 0x25, 0x48, 0x09, 0x31, 0x3a, 0x04, 0x09, 0x47, 0xf3, 0x77, 0x29, 0x5d, 0xb2, 0x14, - 0x93, 0x25, 0x85, 0x3e, 0x13, 0xb9, 0xe7, 0x68, 0x16, 0x0d, 0x01, 0x2e, 0x27, 0xcf, 0x64, 0x5e, - 0x4d, 0xac, 0xd5, 0xe8, 0xf1, 0xc3, 0x6e, 0x34, 0xb0, 0xe5, 0x7b, 0x62, 0x5e, 0xb9, 0x7c, 0x91, - 0x8b, 0xd1, 0x93, 0x30, 0xee, 0xbb, 0x9a, 0x61, 0x76, 0xe8, 0x26, 0xa8, 0xae, 0x2c, 0x1a, 0x02, - 0xe5, 0x22, 0x1c, 0x11, 0xbc, 0x35, 0xec, 0x6b, 0xfa, 0x2e, 0xae, 0xb5, 0x41, 0xc3, 0xf4, 0x9a, - 0xe1, 0x30, 0x57, 0x58, 0xe2, 0xed, 0x02, 0x3b, 0xfb, 0x43, 0x09, 0xc6, 0xc5, 0x81, 0xa9, 0x16, - 0x38, 0xab, 0x0a, 0xa0, 0x59, 0x96, 0xed, 0x87, 0xdd, 0xd5, 0x1b, 0xca, 0x3d, 0xb8, 0xf9, 0x85, - 0x00, 0xa4, 0x84, 0x08, 0xa6, 0x1a, 0x00, 0xed, 0x96, 0x7d, 0xdd, 0x36, 0x0d, 0x19, 0xfe, 0x0a, - 0x87, 0xbe, 0x07, 0x64, 0x47, 0x6c, 0x60, 0x22, 0x72, 0xb2, 0x42, 0x93, 0x90, 0xdc, 0xc6, 0x75, - 0xc3, 0xe2, 0x17, 0xb3, 0xec, 0x41, 0x5c, 0x84, 0x24, 0x82, 0x8b, 0x90, 0xd2, 0x67, 0x60, 0x42, - 0xb7, 0x1b, 0xdd, 0xe6, 0x96, 0xe4, 0xae, 0x63, 0xbe, 0xf7, 0x49, 0xe9, 0x39, 0x68, 0x97, 0x98, - 0xef, 0x49, 0xd2, 0x9f, 0xc7, 0xe2, 0xcb, 0xeb, 0xa5, 0xaf, 0xc7, 0xa6, 0x96, 0x19, 0x74, 0x5d, - 0x8c, 0x54, 0xc1, 0x3b, 0x26, 0xd6, 0x89, 0xf5, 0xf0, 0xd5, 0x39, 0xf8, 0x58, 0xdd, 0xf0, 0x77, - 0x9b, 0xdb, 0xf3, 0xba, 0xdd, 0x38, 0x5e, 0xb7, 0xeb, 0x76, 0xfb, 0xd5, 0x27, 0x79, 0xa2, 0x0f, - 0xf4, 0x17, 0x7f, 0xfd, 0x99, 0x0e, 0xa4, 0x53, 0x91, 0xef, 0x4a, 0x8b, 0xab, 0x30, 0xc1, 0x95, - 0x55, 0xfa, 0xfe, 0x85, 0x9d, 0x22, 0xd0, 0x3d, 0xef, 0xb0, 0xf2, 0xdf, 0x7c, 0x93, 0xa6, 0x6b, - 0x65, 0x9c, 0x43, 0x49, 0x1b, 0x3b, 0x68, 0x14, 0x15, 0x78, 0xa0, 0x83, 0x8f, 0x2d, 0x4d, 0xec, - 0x46, 0x30, 0x7e, 0x9f, 0x33, 0x4e, 0x84, 0x18, 0x37, 0x38, 0xb4, 0xb8, 0x08, 0xa3, 0x07, 0xe1, - 0xfa, 0x67, 0xce, 0x95, 0xc5, 0x61, 0x92, 0x65, 0x18, 0xa3, 0x24, 0x7a, 0xd3, 0xf3, 0xed, 0x06, - 0xdd, 0xf7, 0xee, 0x4d, 0xf3, 0x2f, 0x6f, 0xb2, 0xb5, 0x92, 0x23, 0xb0, 0xc5, 0x00, 0x55, 0x2c, - 0x02, 0x7d, 0xe5, 0x54, 0xc3, 0xba, 0x19, 0xc1, 0xf0, 0x1a, 0x37, 0x24, 0xd0, 0x2f, 0x7e, 0x1a, - 0x26, 0xc9, 0x6f, 0xba, 0x2d, 0x85, 0x2d, 0x89, 0xbe, 0xf0, 0xca, 0xff, 0xf0, 0x05, 0xb6, 0x1c, - 0x27, 0x02, 0x82, 0x90, 0x4d, 0xa1, 0x59, 0xac, 0x63, 0xdf, 0xc7, 0xae, 0xa7, 0x6a, 0x66, 0x3f, - 0xf3, 0x42, 0x37, 0x06, 0xf9, 0x2f, 0xbd, 0xdd, 0x39, 0x8b, 0xcb, 0x0c, 0xb9, 0x60, 0x9a, 0xc5, - 0x2d, 0x38, 0xdc, 0x27, 0x2a, 0x06, 0xe0, 0x7c, 0x91, 0x73, 0x4e, 0xf6, 0x44, 0x06, 0xa1, 0x5d, - 0x07, 0x21, 0x0f, 0xe6, 0x72, 0x00, 0xce, 0x3f, 0xe1, 0x9c, 0x88, 0x63, 0xc5, 0x94, 0x12, 0xc6, - 0x4b, 0x30, 0x7e, 0x1d, 0xbb, 0xdb, 0xb6, 0xc7, 0x6f, 0x69, 0x06, 0xa0, 0x7b, 0x89, 0xd3, 0x8d, - 0x71, 0x20, 0xbd, 0xb6, 0x21, 0x5c, 0xe7, 0x21, 0xb5, 0xa3, 0xe9, 0x78, 0x00, 0x8a, 0x2f, 0x73, - 0x8a, 0x11, 0xa2, 0x4f, 0xa0, 0x0b, 0x90, 0xad, 0xdb, 0x3c, 0x33, 0x45, 0xc3, 0x5f, 0xe6, 0xf0, - 0x8c, 0xc0, 0x70, 0x0a, 0xc7, 0x76, 0x9a, 0x26, 0x49, 0x5b, 0xd1, 0x14, 0x7f, 0x2a, 0x28, 0x04, - 0x86, 0x53, 0x1c, 0xc0, 0xad, 0x7f, 0x26, 0x28, 0xbc, 0x90, 0x3f, 0x9f, 0x81, 0x8c, 0x6d, 0x99, - 0x2d, 0xdb, 0x1a, 0xc4, 0x88, 0xaf, 0x70, 0x06, 0xe0, 0x10, 0x42, 0x70, 0x01, 0xd2, 0x83, 0x4e, - 0xc4, 0x57, 0xdf, 0x16, 0xcb, 0x43, 0xcc, 0xc0, 0x32, 0x8c, 0x89, 0x0d, 0xca, 0xb0, 0xad, 0x01, - 0x28, 0xfe, 0x82, 0x53, 0xe4, 0x42, 0x30, 0x3e, 0x0c, 0x1f, 0x7b, 0x7e, 0x1d, 0x0f, 0x42, 0xf2, - 0x8a, 0x18, 0x06, 0x87, 0x70, 0x57, 0x6e, 0x63, 0x4b, 0xdf, 0x1d, 0x8c, 0xe1, 0x6b, 0xc2, 0x95, - 0x02, 0x43, 0x28, 0x16, 0x61, 0xb4, 0xa1, 0xb9, 0xde, 0xae, 0x66, 0x0e, 0x34, 0x1d, 0x7f, 0xc9, - 0x39, 0xb2, 0x01, 0x88, 0x7b, 0xa4, 0x69, 0x1d, 0x84, 0xe6, 0xeb, 0xc2, 0x23, 0x21, 0x18, 0x5f, - 0x7a, 0x9e, 0x4f, 0xaf, 0xb4, 0x0e, 0xc2, 0xf6, 0x57, 0x62, 0xe9, 0x31, 0x6c, 0x35, 0xcc, 0x78, - 0x01, 0xd2, 0x9e, 0x71, 0x73, 0x20, 0x9a, 0xbf, 0x16, 0x33, 0x4d, 0x01, 0x04, 0x7c, 0x05, 0x8e, - 0xf4, 0x4d, 0x13, 0x03, 0x90, 0xfd, 0x0d, 0x27, 0x3b, 0xd4, 0x27, 0x55, 0xf0, 0x2d, 0xe1, 0xa0, - 0x94, 0x7f, 0x2b, 0xb6, 0x04, 0xdc, 0xc5, 0xb5, 0x4e, 0xce, 0x0a, 0x9e, 0xb6, 0x73, 0x30, 0xaf, - 0xfd, 0x9d, 0xf0, 0x1a, 0xc3, 0x76, 0x78, 0x6d, 0x13, 0x0e, 0x71, 0xc6, 0x83, 0xcd, 0xeb, 0x37, - 0xc4, 0xc6, 0xca, 0xd0, 0x5b, 0x9d, 0xb3, 0xfb, 0x19, 0x98, 0x0a, 0xdc, 0x29, 0x8a, 0x52, 0x4f, - 0x6d, 0x68, 0xce, 0x00, 0xcc, 0xdf, 0xe4, 0xcc, 0x62, 0xc7, 0x0f, 0xaa, 0x5a, 0xaf, 0xaa, 0x39, - 0x84, 0xfc, 0x59, 0xc8, 0x0b, 0xf2, 0xa6, 0xe5, 0x62, 0xdd, 0xae, 0x5b, 0xc6, 0x4d, 0x5c, 0x1b, - 0x80, 0xfa, 0xef, 0xbb, 0xa6, 0x6a, 0x2b, 0x04, 0x27, 0xcc, 0x15, 0x90, 0x83, 0x5a, 0x45, 0x35, - 0x1a, 0x8e, 0xed, 0xfa, 0x11, 0x8c, 0xdf, 0x12, 0x33, 0x15, 0xe0, 0x2a, 0x14, 0x56, 0x2c, 0x43, - 0x8e, 0x3e, 0x0e, 0x1a, 0x92, 0xff, 0xc0, 0x89, 0x46, 0xdb, 0x28, 0xbe, 0x71, 0xe8, 0x76, 0xc3, - 0xd1, 0xdc, 0x41, 0xf6, 0xbf, 0x6f, 0x8b, 0x8d, 0x83, 0x43, 0xf8, 0xc6, 0xe1, 0xb7, 0x1c, 0x4c, - 0xb2, 0xfd, 0x00, 0x0c, 0xaf, 0x8a, 0x8d, 0x43, 0x60, 0x38, 0x85, 0x28, 0x18, 0x06, 0xa0, 0xf8, - 0x47, 0x41, 0x21, 0x30, 0x84, 0xe2, 0x53, 0xed, 0x44, 0xeb, 0xe2, 0xba, 0xe1, 0xf9, 0x2e, 0x2b, - 0x85, 0xef, 0x4d, 0xf5, 0x9d, 0xb7, 0x3b, 0x8b, 0x30, 0x25, 0x04, 0x25, 0x3b, 0x11, 0xbf, 0x42, - 0xa5, 0x27, 0xa5, 0x68, 0xc3, 0xbe, 0x2b, 0x76, 0xa2, 0x10, 0x8c, 0xad, 0xcf, 0xb1, 0xae, 0x5a, - 0x05, 0x45, 0x7d, 0x08, 0x93, 0xff, 0xd5, 0x77, 0x39, 0x57, 0x67, 0xa9, 0x52, 0x5c, 0x21, 0x01, - 0xd4, 0x59, 0x50, 0x44, 0x93, 0xbd, 0xf0, 0x6e, 0x10, 0x43, 0x1d, 0xf5, 0x44, 0xf1, 0x22, 0x8c, - 0x76, 0x14, 0x13, 0xd1, 0x54, 0xbf, 0xc6, 0xa9, 0xb2, 0xe1, 0x5a, 0xa2, 0x78, 0x1a, 0x12, 0xa4, - 0x30, 0x88, 0x86, 0xff, 0x3a, 0x87, 0x53, 0xf5, 0xe2, 0x27, 0x20, 0x25, 0x0a, 0x82, 0x68, 0xe8, - 0x6f, 0x70, 0x68, 0x00, 0x21, 0x70, 0x51, 0x0c, 0x44, 0xc3, 0x3f, 0x2f, 0xe0, 0x02, 0x42, 0xe0, - 0x83, 0xbb, 0xf0, 0x7b, 0xbf, 0x95, 0xe0, 0x1b, 0xba, 0xf0, 0xdd, 0x05, 0x18, 0xe1, 0x55, 0x40, - 0x34, 0xfa, 0x0b, 0xbc, 0x73, 0x81, 0x28, 0x9e, 0x85, 0xe4, 0x80, 0x0e, 0xff, 0x6d, 0x0e, 0x65, - 0xfa, 0xc5, 0x45, 0xc8, 0x84, 0x32, 0x7f, 0x34, 0xfc, 0x77, 0x38, 0x3c, 0x8c, 0x22, 0xa6, 0xf3, - 0xcc, 0x1f, 0x4d, 0xf0, 0xbb, 0xc2, 0x74, 0x8e, 0x20, 0x6e, 0x13, 0x49, 0x3f, 0x1a, 0xfd, 0x7b, - 0xc2, 0xeb, 0x02, 0x52, 0x7c, 0x06, 0xd2, 0xc1, 0x46, 0x1e, 0x8d, 0xff, 0x7d, 0x8e, 0x6f, 0x63, - 0x88, 0x07, 0x42, 0x89, 0x24, 0x9a, 0xe2, 0x0f, 0x84, 0x07, 0x42, 0x28, 0xb2, 0x8c, 0xba, 0x8b, - 0x83, 0x68, 0xa6, 0x3f, 0x14, 0xcb, 0xa8, 0xab, 0x36, 0x20, 0xb3, 0x49, 0xf7, 0xd3, 0x68, 0x8a, - 0x3f, 0x12, 0xb3, 0x49, 0xf5, 0x89, 0x19, 0xdd, 0xd9, 0x36, 0x9a, 0xe3, 0x8f, 0x85, 0x19, 0x5d, - 0xc9, 0xb6, 0xb8, 0x0e, 0xa8, 0x37, 0xd3, 0x46, 0xf3, 0x7d, 0x91, 0xf3, 0x8d, 0xf7, 0x24, 0xda, - 0xe2, 0x65, 0x38, 0xd4, 0x3f, 0xcb, 0x46, 0xb3, 0x7e, 0xe9, 0xdd, 0xae, 0x73, 0x51, 0x38, 0xc9, - 0x16, 0x37, 0xdb, 0xdb, 0x75, 0x38, 0xc3, 0x46, 0xd3, 0xbe, 0xf8, 0x6e, 0xe7, 0x8e, 0x1d, 0x4e, - 0xb0, 0xc5, 0x05, 0x80, 0x76, 0x72, 0x8b, 0xe6, 0x7a, 0x89, 0x73, 0x85, 0x40, 0x64, 0x69, 0xf0, - 0xdc, 0x16, 0x8d, 0xff, 0xb2, 0x58, 0x1a, 0x1c, 0x41, 0x96, 0x86, 0x48, 0x6b, 0xd1, 0xe8, 0x97, - 0xc5, 0xd2, 0x10, 0x10, 0x12, 0xd9, 0xa1, 0xcc, 0x11, 0xcd, 0xf0, 0x15, 0x11, 0xd9, 0x21, 0x54, - 0xf1, 0x02, 0xa4, 0xac, 0xa6, 0x69, 0x92, 0x00, 0x45, 0xf7, 0xfe, 0x40, 0x2c, 0xff, 0xe3, 0xf7, - 0xb9, 0x05, 0x02, 0x50, 0x3c, 0x0d, 0x49, 0xdc, 0xd8, 0xc6, 0xb5, 0x28, 0xe4, 0x7f, 0xbe, 0x2f, - 0x36, 0x25, 0xa2, 0x5d, 0x7c, 0x06, 0x80, 0x1d, 0xed, 0xe9, 0x6b, 0xab, 0x08, 0xec, 0x7f, 0xbd, - 0xcf, 0x3f, 0xdd, 0x68, 0x43, 0xda, 0x04, 0xec, 0x43, 0x90, 0x7b, 0x13, 0xbc, 0xdd, 0x49, 0x40, - 0x47, 0x7d, 0x1e, 0x46, 0xae, 0x7a, 0xb6, 0xe5, 0x6b, 0xf5, 0x28, 0xf4, 0x7f, 0x73, 0xb4, 0xd0, - 0x27, 0x0e, 0x6b, 0xd8, 0x2e, 0xf6, 0xb5, 0xba, 0x17, 0x85, 0xfd, 0x1f, 0x8e, 0x0d, 0x00, 0x04, - 0xac, 0x6b, 0x9e, 0x3f, 0xc8, 0xb8, 0x7f, 0x22, 0xc0, 0x02, 0x40, 0x8c, 0x26, 0xbf, 0xaf, 0xe1, - 0x56, 0x14, 0xf6, 0x1d, 0x61, 0x34, 0xd7, 0x2f, 0x7e, 0x02, 0xd2, 0xe4, 0x27, 0xfb, 0x1e, 0x2b, - 0x02, 0xfc, 0xbf, 0x1c, 0xdc, 0x46, 0x90, 0x9e, 0x3d, 0xbf, 0xe6, 0x1b, 0xd1, 0xce, 0xfe, 0x3f, - 0x3e, 0xd3, 0x42, 0xbf, 0xb8, 0x00, 0x19, 0xcf, 0xaf, 0xd5, 0x9a, 0xbc, 0xbe, 0x8a, 0x80, 0xff, - 0xff, 0xfb, 0xc1, 0x91, 0x3b, 0xc0, 0x94, 0xca, 0xfd, 0x6f, 0x0f, 0x61, 0xd9, 0x5e, 0xb6, 0xd9, - 0xbd, 0xe1, 0x73, 0xb3, 0xd1, 0x17, 0x80, 0xf0, 0xea, 0x18, 0x1c, 0xd5, 0xed, 0xc6, 0xb6, 0xed, - 0x1d, 0x0f, 0xed, 0x77, 0xc7, 0x85, 0x7b, 0xf9, 0xdd, 0x60, 0xe0, 0xee, 0xa9, 0x83, 0x5d, 0x2a, - 0xce, 0xfe, 0x78, 0x14, 0x52, 0x8b, 0x9a, 0xe7, 0x6b, 0x37, 0xb4, 0x16, 0x7a, 0x04, 0x52, 0x15, - 0xcb, 0x3f, 0x79, 0x62, 0xdd, 0x77, 0xe9, 0x7b, 0xb1, 0x78, 0x29, 0x7d, 0xf7, 0xf6, 0x74, 0xd2, - 0x20, 0x32, 0x25, 0x68, 0x42, 0xc7, 0x20, 0x49, 0x7f, 0xd3, 0xab, 0xd5, 0x78, 0x69, 0xf4, 0xb5, - 0xdb, 0xd3, 0x43, 0x6d, 0x3d, 0xd6, 0x86, 0xae, 0x40, 0xa6, 0xda, 0xda, 0x32, 0x2c, 0xff, 0xcc, - 0x29, 0x42, 0x47, 0x1c, 0x94, 0x28, 0x9d, 0xbd, 0x7b, 0x7b, 0xfa, 0xe4, 0xbe, 0x06, 0x92, 0xdc, - 0xdb, 0x1e, 0x98, 0x40, 0xd3, 0xef, 0x56, 0xc3, 0x5c, 0xe8, 0x32, 0xa4, 0xc4, 0x23, 0x7b, 0x45, - 0x51, 0xba, 0xc0, 0x4d, 0xb8, 0x2f, 0xee, 0x80, 0x0c, 0xfd, 0x12, 0x64, 0xab, 0xad, 0x8b, 0xa6, - 0xad, 0x71, 0x1f, 0x24, 0x67, 0xa4, 0xb9, 0x58, 0xe9, 0xdc, 0xdd, 0xdb, 0xd3, 0xa7, 0x06, 0x26, - 0xe6, 0x70, 0xca, 0xdc, 0xc1, 0x86, 0x9e, 0x83, 0x74, 0xf0, 0x4c, 0x5f, 0x82, 0xc4, 0x4a, 0x1f, - 0xe7, 0x76, 0xdf, 0x1f, 0x7d, 0x9b, 0x2e, 0x64, 0x39, 0x73, 0xf7, 0xc8, 0x8c, 0x34, 0x27, 0xdd, - 0x8f, 0xe5, 0xdc, 0x27, 0x1d, 0x6c, 0x21, 0xcb, 0xcf, 0x9c, 0xa2, 0x6f, 0x5d, 0xa4, 0xfb, 0xb5, - 0x9c, 0xd3, 0xb7, 0xe9, 0xd0, 0x25, 0x18, 0xa9, 0xb6, 0x4a, 0x2d, 0x1f, 0x7b, 0xf4, 0x73, 0xa8, - 0x6c, 0xe9, 0xa9, 0xbb, 0xb7, 0xa7, 0x3f, 0x3a, 0x20, 0x2b, 0xc5, 0x29, 0x82, 0x00, 0xcd, 0x40, - 0x66, 0xd5, 0x76, 0x1b, 0x9a, 0xc9, 0xf8, 0x80, 0xbd, 0x45, 0x0a, 0x89, 0xd0, 0x16, 0x19, 0x09, - 0x9b, 0x6d, 0x8f, 0xfe, 0x27, 0xcd, 0xcf, 0x10, 0x93, 0x6d, 0x26, 0x64, 0x40, 0xb2, 0xda, 0xaa, - 0x6a, 0x4e, 0x3e, 0x4b, 0x5f, 0x71, 0x3c, 0x34, 0x1f, 0x20, 0xc4, 0xda, 0x9a, 0xa7, 0xed, 0xf4, - 0x5b, 0x90, 0xd2, 0xa9, 0xbb, 0xb7, 0xa7, 0x9f, 0x1a, 0xb8, 0xc7, 0xaa, 0xe6, 0xd0, 0xee, 0x58, - 0x0f, 0xe8, 0xdb, 0x12, 0x59, 0x58, 0xec, 0x8e, 0x98, 0xf4, 0x38, 0x4a, 0x7b, 0x3c, 0xd6, 0xb7, - 0xc7, 0x40, 0x8b, 0xf5, 0x6b, 0x7d, 0xee, 0xf5, 0x03, 0x8c, 0x94, 0x1d, 0x9f, 0x48, 0xd7, 0xbf, - 0xf9, 0xfa, 0x7d, 0x2f, 0xda, 0xc0, 0x02, 0xf4, 0x82, 0x04, 0xa3, 0xd5, 0xd6, 0x2a, 0xcf, 0xc1, - 0xc4, 0xf2, 0x1c, 0xff, 0x7f, 0x8b, 0x7e, 0x96, 0x87, 0xf4, 0x98, 0xed, 0x67, 0x3e, 0xf7, 0xfa, - 0xf4, 0x89, 0x81, 0x8d, 0xa0, 0x5b, 0x10, 0xb5, 0xa1, 0xb3, 0x4f, 0xf4, 0x79, 0x6a, 0x45, 0x99, - 0xe4, 0xf3, 0x1a, 0xae, 0x11, 0x2b, 0xc6, 0xee, 0x61, 0x45, 0x48, 0x8f, 0x59, 0x51, 0x24, 0x51, - 0x7f, 0xff, 0x96, 0x84, 0xf8, 0xd0, 0x1a, 0x0c, 0x33, 0x0f, 0xd3, 0x4f, 0xf1, 0xd2, 0x07, 0x0c, - 0xc3, 0xf6, 0xe4, 0x28, 0x9c, 0x66, 0xea, 0x1c, 0x40, 0x3b, 0xc6, 0x90, 0x0c, 0xf1, 0x6b, 0xb8, - 0xc5, 0xbf, 0xb7, 0x24, 0x3f, 0xd1, 0x64, 0xfb, 0x83, 0x68, 0x69, 0x2e, 0xc1, 0xbf, 0x72, 0x2e, - 0xc6, 0xce, 0x49, 0x53, 0x4f, 0x83, 0xdc, 0x1d, 0x2b, 0x07, 0xc2, 0x2b, 0x80, 0x7a, 0x67, 0x2c, - 0xcc, 0x90, 0x64, 0x0c, 0x8f, 0x86, 0x19, 0x32, 0x27, 0xe4, 0xb6, 0xcf, 0x2f, 0x1b, 0xa6, 0x67, - 0x5b, 0x3d, 0x9c, 0xdd, 0xfe, 0xff, 0xd9, 0x38, 0x67, 0x0b, 0x30, 0xcc, 0x84, 0x64, 0x2c, 0x15, - 0x9a, 0x3e, 0x68, 0x96, 0x53, 0xd8, 0x43, 0x69, 0xe5, 0xb5, 0x3b, 0x85, 0xa1, 0x1f, 0xdc, 0x29, - 0x0c, 0xfd, 0xdb, 0x9d, 0xc2, 0xd0, 0x1b, 0x77, 0x0a, 0xd2, 0x5b, 0x77, 0x0a, 0xd2, 0x3b, 0x77, - 0x0a, 0xd2, 0x7b, 0x77, 0x0a, 0xd2, 0xad, 0xbd, 0x82, 0xf4, 0xb5, 0xbd, 0x82, 0xf4, 0x8d, 0xbd, - 0x82, 0xf4, 0x9d, 0xbd, 0x82, 0xf4, 0xbd, 0xbd, 0x82, 0xf4, 0xda, 0x5e, 0x61, 0xe8, 0x07, 0x7b, - 0x05, 0xe9, 0x8d, 0xbd, 0x82, 0xf4, 0xd6, 0x5e, 0x61, 0xe8, 0x9d, 0xbd, 0x82, 0xf4, 0xde, 0x5e, - 0x61, 0xe8, 0xd6, 0x8f, 0x0a, 0x43, 0x3f, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x04, 0x06, 0x3e, 0x80, - 0xd3, 0x38, 0x00, 0x00, + 0xa1, 0xe9, 0x83, 0x1a, 0xb7, 0xcd, 0xa4, 0x9d, 0xfe, 0x77, 0xa6, 0x89, 0xeb, 0xb8, 0x4d, 0x3a, + 0x8d, 0xd3, 0xf4, 0x2f, 0x69, 0x1a, 0x37, 0x49, 0x5f, 0xf2, 0x92, 0xd6, 0x4f, 0x9d, 0xe4, 0xad, + 0x0f, 0x1d, 0xd9, 0x62, 0x3c, 0x53, 0xa7, 0x75, 0x1b, 0xb7, 0xd5, 0x83, 0x47, 0x7e, 0xc9, 0xdc, + 0xbf, 0xc5, 0xe2, 0x87, 0x5a, 0x50, 0x19, 0x3b, 0x4f, 0xc4, 0x9e, 0x7b, 0xbe, 0xef, 0x9e, 0x7b, + 0xee, 0xb9, 0xf7, 0x9c, 0x7b, 0x77, 0x09, 0x3f, 0x39, 0x0b, 0x33, 0x75, 0xdb, 0xae, 0x9b, 0xf8, + 0xa8, 0xe3, 0xda, 0xbe, 0xbd, 0xdd, 0xdc, 0x39, 0x5a, 0xc3, 0x9e, 0xee, 0x1a, 0x8e, 0x6f, 0xbb, + 0xf3, 0x54, 0x86, 0xc6, 0x98, 0xc6, 0xbc, 0xd0, 0x98, 0xad, 0xc2, 0xf8, 0x79, 0xc3, 0xc4, 0x4b, + 0x81, 0xe2, 0x06, 0xf6, 0xd1, 0x19, 0x48, 0xec, 0x18, 0x26, 0xce, 0x4b, 0x33, 0xf1, 0xb9, 0xcc, + 0xb1, 0x87, 0xe7, 0xbb, 0x40, 0xf3, 0x9d, 0x88, 0x75, 0x22, 0x56, 0x28, 0x62, 0xf6, 0xcd, 0x04, + 0x4c, 0xf4, 0x69, 0x45, 0x08, 0x12, 0x96, 0xd6, 0x20, 0x8c, 0xd2, 0x5c, 0x5a, 0xa1, 0xbf, 0x51, + 0x1e, 0x46, 0x1c, 0x4d, 0xbf, 0xa2, 0xd5, 0x71, 0x3e, 0x46, 0xc5, 0xe2, 0x11, 0x15, 0x00, 0x6a, + 0xd8, 0xc1, 0x56, 0x0d, 0x5b, 0x7a, 0x2b, 0x1f, 0x9f, 0x89, 0xcf, 0xa5, 0x95, 0x90, 0x04, 0x3d, + 0x09, 0xe3, 0x4e, 0x73, 0xdb, 0x34, 0x74, 0x35, 0xa4, 0x06, 0x33, 0xf1, 0xb9, 0xa4, 0x22, 0xb3, + 0x86, 0xa5, 0xb6, 0xf2, 0x63, 0x30, 0x76, 0x0d, 0x6b, 0x57, 0xc2, 0xaa, 0x19, 0xaa, 0x9a, 0x23, + 0xe2, 0x90, 0xe2, 0x22, 0x64, 0x1b, 0xd8, 0xf3, 0xb4, 0x3a, 0x56, 0xfd, 0x96, 0x83, 0xf3, 0x09, + 0x3a, 0xfa, 0x99, 0x9e, 0xd1, 0x77, 0x8f, 0x3c, 0xc3, 0x51, 0x9b, 0x2d, 0x07, 0xa3, 0x05, 0x48, + 0x63, 0xab, 0xd9, 0x60, 0x0c, 0xc9, 0x7d, 0xfc, 0x57, 0xb6, 0x9a, 0x8d, 0x6e, 0x96, 0x14, 0x81, + 0x71, 0x8a, 0x11, 0x0f, 0xbb, 0x57, 0x0d, 0x1d, 0xe7, 0x87, 0x29, 0xc1, 0x63, 0x3d, 0x04, 0x1b, + 0xac, 0xbd, 0x9b, 0x43, 0xe0, 0xd0, 0x22, 0xa4, 0xf1, 0xf3, 0x3e, 0xb6, 0x3c, 0xc3, 0xb6, 0xf2, + 0x23, 0x94, 0xe4, 0x91, 0x3e, 0xb3, 0x88, 0xcd, 0x5a, 0x37, 0x45, 0x1b, 0x87, 0x4e, 0xc1, 0x88, + 0xed, 0xf8, 0x86, 0x6d, 0x79, 0xf9, 0xd4, 0x8c, 0x34, 0x97, 0x39, 0xf6, 0xa1, 0xbe, 0x81, 0xb0, + 0xc6, 0x74, 0x14, 0xa1, 0x8c, 0x2a, 0x20, 0x7b, 0x76, 0xd3, 0xd5, 0xb1, 0xaa, 0xdb, 0x35, 0xac, + 0x1a, 0xd6, 0x8e, 0x9d, 0x4f, 0x53, 0x82, 0xe9, 0xde, 0x81, 0x50, 0xc5, 0x45, 0xbb, 0x86, 0x2b, + 0xd6, 0x8e, 0xad, 0xe4, 0xbc, 0x8e, 0x67, 0x74, 0x08, 0x86, 0xbd, 0x96, 0xe5, 0x6b, 0xcf, 0xe7, + 0xb3, 0x34, 0x42, 0xf8, 0xd3, 0xec, 0x77, 0x86, 0x61, 0x6c, 0x90, 0x10, 0x3b, 0x07, 0xc9, 0x1d, + 0x32, 0xca, 0x7c, 0xec, 0x20, 0x3e, 0x60, 0x98, 0x4e, 0x27, 0x0e, 0xdf, 0xa3, 0x13, 0x17, 0x20, + 0x63, 0x61, 0xcf, 0xc7, 0x35, 0x16, 0x11, 0xf1, 0x01, 0x63, 0x0a, 0x18, 0xa8, 0x37, 0xa4, 0x12, + 0xf7, 0x14, 0x52, 0xcf, 0xc2, 0x58, 0x60, 0x92, 0xea, 0x6a, 0x56, 0x5d, 0xc4, 0xe6, 0xd1, 0x28, + 0x4b, 0xe6, 0xcb, 0x02, 0xa7, 0x10, 0x98, 0x92, 0xc3, 0x1d, 0xcf, 0x68, 0x09, 0xc0, 0xb6, 0xb0, + 0xbd, 0xa3, 0xd6, 0xb0, 0x6e, 0xe6, 0x53, 0xfb, 0x78, 0x69, 0x8d, 0xa8, 0xf4, 0x78, 0xc9, 0x66, + 0x52, 0xdd, 0x44, 0x67, 0xdb, 0xa1, 0x36, 0xb2, 0x4f, 0xa4, 0x54, 0xd9, 0x22, 0xeb, 0x89, 0xb6, + 0x2d, 0xc8, 0xb9, 0x98, 0xc4, 0x3d, 0xae, 0xf1, 0x91, 0xa5, 0xa9, 0x11, 0xf3, 0x91, 0x23, 0x53, + 0x38, 0x8c, 0x0d, 0x6c, 0xd4, 0x0d, 0x3f, 0xa2, 0x23, 0x10, 0x08, 0x54, 0x1a, 0x56, 0x40, 0x77, + 0xa1, 0xac, 0x10, 0xae, 0x6a, 0x0d, 0x3c, 0x75, 0x1d, 0x72, 0x9d, 0xee, 0x41, 0x93, 0x90, 0xf4, + 0x7c, 0xcd, 0xf5, 0x69, 0x14, 0x26, 0x15, 0xf6, 0x80, 0x64, 0x88, 0x63, 0xab, 0x46, 0x77, 0xb9, + 0xa4, 0x42, 0x7e, 0xa2, 0x5f, 0x68, 0x0f, 0x38, 0x4e, 0x07, 0xfc, 0x68, 0xef, 0x8c, 0x76, 0x30, + 0x77, 0x8f, 0x7b, 0xea, 0x34, 0x8c, 0x76, 0x0c, 0x60, 0xd0, 0xae, 0x67, 0x7f, 0x05, 0xee, 0xeb, + 0x4b, 0x8d, 0x9e, 0x85, 0xc9, 0xa6, 0x65, 0x58, 0x3e, 0x76, 0x1d, 0x17, 0x93, 0x88, 0x65, 0x5d, + 0xe5, 0xff, 0x63, 0x64, 0x9f, 0x98, 0xdb, 0x0a, 0x6b, 0x33, 0x16, 0x65, 0xa2, 0xd9, 0x2b, 0x7c, + 0x22, 0x9d, 0x7a, 0x6b, 0x44, 0xbe, 0x71, 0xe3, 0xc6, 0x8d, 0xd8, 0xec, 0xe7, 0x87, 0x61, 0xb2, + 0xdf, 0x9a, 0xe9, 0xbb, 0x7c, 0x0f, 0xc1, 0xb0, 0xd5, 0x6c, 0x6c, 0x63, 0x97, 0x3a, 0x29, 0xa9, + 0xf0, 0x27, 0xb4, 0x00, 0x49, 0x53, 0xdb, 0xc6, 0x66, 0x3e, 0x31, 0x23, 0xcd, 0xe5, 0x8e, 0x3d, + 0x39, 0xd0, 0xaa, 0x9c, 0x5f, 0x21, 0x10, 0x85, 0x21, 0xd1, 0xd3, 0x90, 0xe0, 0x5b, 0x34, 0x61, + 0x78, 0x62, 0x30, 0x06, 0xb2, 0x96, 0x14, 0x8a, 0x43, 0x0f, 0x42, 0x9a, 0xfc, 0x65, 0xb1, 0x31, + 0x4c, 0x6d, 0x4e, 0x11, 0x01, 0x89, 0x0b, 0x34, 0x05, 0x29, 0xba, 0x4c, 0x6a, 0x58, 0xa4, 0xb6, + 0xe0, 0x99, 0x04, 0x56, 0x0d, 0xef, 0x68, 0x4d, 0xd3, 0x57, 0xaf, 0x6a, 0x66, 0x13, 0xd3, 0x80, + 0x4f, 0x2b, 0x59, 0x2e, 0xfc, 0x24, 0x91, 0xa1, 0x69, 0xc8, 0xb0, 0x55, 0x65, 0x58, 0x35, 0xfc, + 0x3c, 0xdd, 0x3d, 0x93, 0x0a, 0x5b, 0x68, 0x15, 0x22, 0x21, 0xdd, 0x5f, 0xf6, 0x6c, 0x4b, 0x84, + 0x26, 0xed, 0x82, 0x08, 0x68, 0xf7, 0xa7, 0xbb, 0x37, 0xee, 0x87, 0xfa, 0x0f, 0xaf, 0x3b, 0xa6, + 0x66, 0x5f, 0x8d, 0x41, 0x82, 0xee, 0x17, 0x63, 0x90, 0xd9, 0xbc, 0xb4, 0x5e, 0x56, 0x97, 0xd6, + 0xb6, 0x4a, 0x2b, 0x65, 0x59, 0x42, 0x39, 0x00, 0x2a, 0x38, 0xbf, 0xb2, 0xb6, 0xb0, 0x29, 0xc7, + 0x82, 0xe7, 0xca, 0xea, 0xe6, 0xa9, 0x13, 0x72, 0x3c, 0x00, 0x6c, 0x31, 0x41, 0x22, 0xac, 0x70, + 0xfc, 0x98, 0x9c, 0x44, 0x32, 0x64, 0x19, 0x41, 0xe5, 0xd9, 0xf2, 0xd2, 0xa9, 0x13, 0xf2, 0x70, + 0xa7, 0xe4, 0xf8, 0x31, 0x79, 0x04, 0x8d, 0x42, 0x9a, 0x4a, 0x4a, 0x6b, 0x6b, 0x2b, 0x72, 0x2a, + 0xe0, 0xdc, 0xd8, 0x54, 0x2a, 0xab, 0xcb, 0x72, 0x3a, 0xe0, 0x5c, 0x56, 0xd6, 0xb6, 0xd6, 0x65, + 0x08, 0x18, 0xaa, 0xe5, 0x8d, 0x8d, 0x85, 0xe5, 0xb2, 0x9c, 0x09, 0x34, 0x4a, 0x97, 0x36, 0xcb, + 0x1b, 0x72, 0xb6, 0xc3, 0xac, 0xe3, 0xc7, 0xe4, 0xd1, 0xa0, 0x8b, 0xf2, 0xea, 0x56, 0x55, 0xce, + 0xa1, 0x71, 0x18, 0x65, 0x5d, 0x08, 0x23, 0xc6, 0xba, 0x44, 0xa7, 0x4e, 0xc8, 0x72, 0xdb, 0x10, + 0xc6, 0x32, 0xde, 0x21, 0x38, 0x75, 0x42, 0x46, 0xb3, 0x8b, 0x90, 0xa4, 0xd1, 0x85, 0x10, 0xe4, + 0x56, 0x16, 0x4a, 0xe5, 0x15, 0x75, 0x6d, 0x7d, 0xb3, 0xb2, 0xb6, 0xba, 0xb0, 0x22, 0x4b, 0x6d, + 0x99, 0x52, 0xfe, 0xc4, 0x56, 0x45, 0x29, 0x2f, 0xc9, 0xb1, 0xb0, 0x6c, 0xbd, 0xbc, 0xb0, 0x59, + 0x5e, 0x92, 0xe3, 0xb3, 0x3a, 0x4c, 0xf6, 0xdb, 0x27, 0xfb, 0xae, 0x8c, 0xd0, 0x14, 0xc7, 0xf6, + 0x99, 0x62, 0xca, 0xd5, 0x33, 0xc5, 0x3f, 0x8a, 0xc1, 0x44, 0x9f, 0x5c, 0xd1, 0xb7, 0x93, 0x67, + 0x20, 0xc9, 0x42, 0x94, 0x65, 0xcf, 0xc7, 0xfb, 0x26, 0x1d, 0x1a, 0xb0, 0x3d, 0x19, 0x94, 0xe2, + 0xc2, 0x15, 0x44, 0x7c, 0x9f, 0x0a, 0x82, 0x50, 0xf4, 0xec, 0xe9, 0xbf, 0xdc, 0xb3, 0xa7, 0xb3, + 0xb4, 0x77, 0x6a, 0x90, 0xb4, 0x47, 0x65, 0x07, 0xdb, 0xdb, 0x93, 0x7d, 0xf6, 0xf6, 0x73, 0x30, + 0xde, 0x43, 0x34, 0xf0, 0x1e, 0xfb, 0x82, 0x04, 0xf9, 0xfd, 0x9c, 0x13, 0xb1, 0xd3, 0xc5, 0x3a, + 0x76, 0xba, 0x73, 0xdd, 0x1e, 0x3c, 0xbc, 0xff, 0x24, 0xf4, 0xcc, 0xf5, 0x2b, 0x12, 0x1c, 0xea, + 0x5f, 0x29, 0xf6, 0xb5, 0xe1, 0x69, 0x18, 0x6e, 0x60, 0x7f, 0xd7, 0x16, 0xd5, 0xd2, 0xa3, 0x7d, + 0x72, 0x30, 0x69, 0xee, 0x9e, 0x6c, 0x8e, 0x0a, 0x27, 0xf1, 0xf8, 0x7e, 0xe5, 0x1e, 0xb3, 0xa6, + 0xc7, 0xd2, 0xcf, 0xc5, 0xe0, 0xbe, 0xbe, 0xe4, 0x7d, 0x0d, 0x7d, 0x08, 0xc0, 0xb0, 0x9c, 0xa6, + 0xcf, 0x2a, 0x22, 0xb6, 0xc1, 0xa6, 0xa9, 0x84, 0x6e, 0x5e, 0x64, 0xf3, 0x6c, 0xfa, 0x41, 0x7b, + 0x9c, 0xb6, 0x03, 0x13, 0x51, 0x85, 0x33, 0x6d, 0x43, 0x13, 0xd4, 0xd0, 0xc2, 0x3e, 0x23, 0xed, + 0x09, 0xcc, 0xa7, 0x40, 0xd6, 0x4d, 0x03, 0x5b, 0xbe, 0xea, 0xf9, 0x2e, 0xd6, 0x1a, 0x86, 0x55, + 0xa7, 0x19, 0x24, 0x55, 0x4c, 0xee, 0x68, 0xa6, 0x87, 0x95, 0x31, 0xd6, 0xbc, 0x21, 0x5a, 0x09, + 0x82, 0x06, 0x90, 0x1b, 0x42, 0x0c, 0x77, 0x20, 0x58, 0x73, 0x80, 0x98, 0xfd, 0x66, 0x0a, 0x32, + 0xa1, 0xba, 0x1a, 0x1d, 0x86, 0xec, 0x65, 0xed, 0xaa, 0xa6, 0x8a, 0xb3, 0x12, 0xf3, 0x44, 0x86, + 0xc8, 0xd6, 0xf9, 0x79, 0xe9, 0x29, 0x98, 0xa4, 0x2a, 0x76, 0xd3, 0xc7, 0xae, 0xaa, 0x9b, 0x9a, + 0xe7, 0x51, 0xa7, 0xa5, 0xa8, 0x2a, 0x22, 0x6d, 0x6b, 0xa4, 0x69, 0x51, 0xb4, 0xa0, 0x93, 0x30, + 0x41, 0x11, 0x8d, 0xa6, 0xe9, 0x1b, 0x8e, 0x89, 0x55, 0x72, 0x7a, 0xf3, 0x68, 0x26, 0x09, 0x2c, + 0x1b, 0x27, 0x1a, 0x55, 0xae, 0x40, 0x2c, 0xf2, 0xd0, 0x12, 0x3c, 0x44, 0x61, 0x75, 0x6c, 0x61, + 0x57, 0xf3, 0xb1, 0x8a, 0x3f, 0xdd, 0xd4, 0x4c, 0x4f, 0xd5, 0xac, 0x9a, 0xba, 0xab, 0x79, 0xbb, + 0xf9, 0x49, 0x42, 0x50, 0x8a, 0xe5, 0x25, 0xe5, 0x01, 0xa2, 0xb8, 0xcc, 0xf5, 0xca, 0x54, 0x6d, + 0xc1, 0xaa, 0x7d, 0x5c, 0xf3, 0x76, 0x51, 0x11, 0x0e, 0x51, 0x16, 0xcf, 0x77, 0x0d, 0xab, 0xae, + 0xea, 0xbb, 0x58, 0xbf, 0xa2, 0x36, 0xfd, 0x9d, 0x33, 0xf9, 0x07, 0xc3, 0xfd, 0x53, 0x0b, 0x37, + 0xa8, 0xce, 0x22, 0x51, 0xd9, 0xf2, 0x77, 0xce, 0xa0, 0x0d, 0xc8, 0x92, 0xc9, 0x68, 0x18, 0xd7, + 0xb1, 0xba, 0x63, 0xbb, 0x34, 0x35, 0xe6, 0xfa, 0x6c, 0x4d, 0x21, 0x0f, 0xce, 0xaf, 0x71, 0x40, + 0xd5, 0xae, 0xe1, 0x62, 0x72, 0x63, 0xbd, 0x5c, 0x5e, 0x52, 0x32, 0x82, 0xe5, 0xbc, 0xed, 0x92, + 0x80, 0xaa, 0xdb, 0x81, 0x83, 0x33, 0x2c, 0xa0, 0xea, 0xb6, 0x70, 0xef, 0x49, 0x98, 0xd0, 0x75, + 0x36, 0x66, 0x43, 0x57, 0xf9, 0x19, 0xcb, 0xcb, 0xcb, 0x1d, 0xce, 0xd2, 0xf5, 0x65, 0xa6, 0xc0, + 0x63, 0xdc, 0x43, 0x67, 0xe1, 0xbe, 0xb6, 0xb3, 0xc2, 0xc0, 0xf1, 0x9e, 0x51, 0x76, 0x43, 0x4f, + 0xc2, 0x84, 0xd3, 0xea, 0x05, 0xa2, 0x8e, 0x1e, 0x9d, 0x56, 0x37, 0xec, 0x34, 0x4c, 0x3a, 0xbb, + 0x4e, 0x2f, 0xee, 0x89, 0x30, 0x0e, 0x39, 0xbb, 0x4e, 0x37, 0xf0, 0x11, 0x7a, 0xe0, 0x76, 0xb1, + 0xae, 0xf9, 0xb8, 0x96, 0xbf, 0x3f, 0xac, 0x1e, 0x6a, 0x40, 0x47, 0x41, 0xd6, 0x75, 0x15, 0x5b, + 0xda, 0xb6, 0x89, 0x55, 0xcd, 0xc5, 0x96, 0xe6, 0xe5, 0xa7, 0xc3, 0xca, 0x39, 0x5d, 0x2f, 0xd3, + 0xd6, 0x05, 0xda, 0x88, 0x9e, 0x80, 0x71, 0x7b, 0xfb, 0xb2, 0xce, 0x42, 0x52, 0x75, 0x5c, 0xbc, + 0x63, 0x3c, 0x9f, 0x7f, 0x98, 0xfa, 0x77, 0x8c, 0x34, 0xd0, 0x80, 0x5c, 0xa7, 0x62, 0xf4, 0x38, + 0xc8, 0xba, 0xb7, 0xab, 0xb9, 0x0e, 0xdd, 0x93, 0x3d, 0x47, 0xd3, 0x71, 0xfe, 0x11, 0xa6, 0xca, + 0xe4, 0xab, 0x42, 0x4c, 0x96, 0x84, 0x77, 0xcd, 0xd8, 0xf1, 0x05, 0xe3, 0x63, 0x6c, 0x49, 0x50, + 0x19, 0x67, 0x9b, 0x03, 0x99, 0xb8, 0xa2, 0xa3, 0xe3, 0x39, 0xaa, 0x96, 0x73, 0x76, 0x9d, 0x70, + 0xbf, 0x47, 0x60, 0x94, 0x68, 0xb6, 0x3b, 0x7d, 0x9c, 0x15, 0x64, 0xce, 0x6e, 0xa8, 0xc7, 0xf7, + 0xad, 0x36, 0x9e, 0x2d, 0x42, 0x36, 0x1c, 0x9f, 0x28, 0x0d, 0x2c, 0x42, 0x65, 0x89, 0x14, 0x2b, + 0x8b, 0x6b, 0x4b, 0xa4, 0xcc, 0x78, 0xae, 0x2c, 0xc7, 0x48, 0xb9, 0xb3, 0x52, 0xd9, 0x2c, 0xab, + 0xca, 0xd6, 0xea, 0x66, 0xa5, 0x5a, 0x96, 0xe3, 0xe1, 0xba, 0xfa, 0xfb, 0x31, 0xc8, 0x75, 0x1e, + 0x91, 0xd0, 0x47, 0xe1, 0x7e, 0x71, 0x9f, 0xe1, 0x61, 0x5f, 0xbd, 0x66, 0xb8, 0x74, 0xc9, 0x34, + 0x34, 0x96, 0xbe, 0x82, 0x49, 0x9b, 0xe4, 0x5a, 0x1b, 0xd8, 0xbf, 0x68, 0xb8, 0x64, 0x41, 0x34, + 0x34, 0x1f, 0xad, 0xc0, 0xb4, 0x65, 0xab, 0x9e, 0xaf, 0x59, 0x35, 0xcd, 0xad, 0xa9, 0xed, 0x9b, + 0x24, 0x55, 0xd3, 0x75, 0xec, 0x79, 0x36, 0x4b, 0x55, 0x01, 0xcb, 0x87, 0x2c, 0x7b, 0x83, 0x2b, + 0xb7, 0xf7, 0xf0, 0x05, 0xae, 0xda, 0x15, 0x60, 0xf1, 0xfd, 0x02, 0xec, 0x41, 0x48, 0x37, 0x34, + 0x47, 0xc5, 0x96, 0xef, 0xb6, 0x68, 0x61, 0x9c, 0x52, 0x52, 0x0d, 0xcd, 0x29, 0x93, 0xe7, 0x0f, + 0xe6, 0x7c, 0xf2, 0xef, 0x71, 0xc8, 0x86, 0x8b, 0x63, 0x72, 0xd6, 0xd0, 0x69, 0x1e, 0x91, 0xe8, + 0x4e, 0x73, 0xe4, 0xae, 0xa5, 0xf4, 0xfc, 0x22, 0x49, 0x30, 0xc5, 0x61, 0x56, 0xb2, 0x2a, 0x0c, + 0x49, 0x92, 0x3b, 0xd9, 0x5b, 0x30, 0x2b, 0x11, 0x52, 0x0a, 0x7f, 0x42, 0xcb, 0x30, 0x7c, 0xd9, + 0xa3, 0xdc, 0xc3, 0x94, 0xfb, 0xe1, 0xbb, 0x73, 0x5f, 0xd8, 0xa0, 0xe4, 0xe9, 0x0b, 0x1b, 0xea, + 0xea, 0x9a, 0x52, 0x5d, 0x58, 0x51, 0x38, 0x1c, 0x3d, 0x00, 0x09, 0x53, 0xbb, 0xde, 0xea, 0x4c, + 0x45, 0x54, 0x34, 0xa8, 0xe3, 0x1f, 0x80, 0xc4, 0x35, 0xac, 0x5d, 0xe9, 0x4c, 0x00, 0x54, 0xf4, + 0x3e, 0x86, 0xfe, 0x51, 0x48, 0x52, 0x7f, 0x21, 0x00, 0xee, 0x31, 0x79, 0x08, 0xa5, 0x20, 0xb1, + 0xb8, 0xa6, 0x90, 0xf0, 0x97, 0x21, 0xcb, 0xa4, 0xea, 0x7a, 0xa5, 0xbc, 0x58, 0x96, 0x63, 0xb3, + 0x27, 0x61, 0x98, 0x39, 0x81, 0x2c, 0x8d, 0xc0, 0x0d, 0xf2, 0x10, 0x7f, 0xe4, 0x1c, 0x92, 0x68, + 0xdd, 0xaa, 0x96, 0xca, 0x8a, 0x1c, 0x0b, 0x4f, 0xaf, 0x07, 0xd9, 0x70, 0x5d, 0xfc, 0xc1, 0xc4, + 0xd4, 0x77, 0x25, 0xc8, 0x84, 0xea, 0x5c, 0x52, 0xa0, 0x68, 0xa6, 0x69, 0x5f, 0x53, 0x35, 0xd3, + 0xd0, 0x3c, 0x1e, 0x14, 0x40, 0x45, 0x0b, 0x44, 0x32, 0xe8, 0xa4, 0x7d, 0x20, 0xc6, 0xbf, 0x2c, + 0x81, 0xdc, 0x5d, 0x62, 0x76, 0x19, 0x28, 0xfd, 0x5c, 0x0d, 0x7c, 0x49, 0x82, 0x5c, 0x67, 0x5d, + 0xd9, 0x65, 0xde, 0xe1, 0x9f, 0xab, 0x79, 0x6f, 0xc4, 0x60, 0xb4, 0xa3, 0x9a, 0x1c, 0xd4, 0xba, + 0x4f, 0xc3, 0xb8, 0x51, 0xc3, 0x0d, 0xc7, 0xf6, 0xb1, 0xa5, 0xb7, 0x54, 0x13, 0x5f, 0xc5, 0x66, + 0x7e, 0x96, 0x6e, 0x14, 0x47, 0xef, 0x5e, 0xaf, 0xce, 0x57, 0xda, 0xb8, 0x15, 0x02, 0x2b, 0x4e, + 0x54, 0x96, 0xca, 0xd5, 0xf5, 0xb5, 0xcd, 0xf2, 0xea, 0xe2, 0x25, 0x75, 0x6b, 0xf5, 0x17, 0x57, + 0xd7, 0x2e, 0xae, 0x2a, 0xb2, 0xd1, 0xa5, 0xf6, 0x3e, 0x2e, 0xf5, 0x75, 0x90, 0xbb, 0x8d, 0x42, + 0xf7, 0x43, 0x3f, 0xb3, 0xe4, 0x21, 0x34, 0x01, 0x63, 0xab, 0x6b, 0xea, 0x46, 0x65, 0xa9, 0xac, + 0x96, 0xcf, 0x9f, 0x2f, 0x2f, 0x6e, 0x6e, 0xb0, 0x1b, 0x88, 0x40, 0x7b, 0xb3, 0x73, 0x51, 0xbf, + 0x18, 0x87, 0x89, 0x3e, 0x96, 0xa0, 0x05, 0x7e, 0x76, 0x60, 0xc7, 0x99, 0x8f, 0x0c, 0x62, 0xfd, + 0x3c, 0x49, 0xf9, 0xeb, 0x9a, 0xeb, 0xf3, 0xa3, 0xc6, 0xe3, 0x40, 0xbc, 0x64, 0xf9, 0xc6, 0x8e, + 0x81, 0x5d, 0x7e, 0x61, 0xc3, 0x0e, 0x14, 0x63, 0x6d, 0x39, 0xbb, 0xb3, 0xf9, 0x30, 0x20, 0xc7, + 0xf6, 0x0c, 0xdf, 0xb8, 0x8a, 0x55, 0xc3, 0x12, 0xb7, 0x3b, 0xe4, 0x80, 0x91, 0x50, 0x64, 0xd1, + 0x52, 0xb1, 0xfc, 0x40, 0xdb, 0xc2, 0x75, 0xad, 0x4b, 0x9b, 0x6c, 0xe0, 0x71, 0x45, 0x16, 0x2d, + 0x81, 0xf6, 0x61, 0xc8, 0xd6, 0xec, 0x26, 0xa9, 0xba, 0x98, 0x1e, 0xc9, 0x17, 0x92, 0x92, 0x61, + 0xb2, 0x40, 0x85, 0xd7, 0xd3, 0xed, 0x6b, 0xa5, 0xac, 0x92, 0x61, 0x32, 0xa6, 0xf2, 0x18, 0x8c, + 0x69, 0xf5, 0xba, 0x4b, 0xc8, 0x05, 0x11, 0x3b, 0x21, 0xe4, 0x02, 0x31, 0x55, 0x9c, 0xba, 0x00, + 0x29, 0xe1, 0x07, 0x92, 0x92, 0x89, 0x27, 0x54, 0x87, 0x1d, 0x7b, 0x63, 0x73, 0x69, 0x25, 0x65, + 0x89, 0xc6, 0xc3, 0x90, 0x35, 0x3c, 0xb5, 0x7d, 0x4b, 0x1e, 0x9b, 0x89, 0xcd, 0xa5, 0x94, 0x8c, + 0xe1, 0x05, 0x37, 0x8c, 0xb3, 0xaf, 0xc4, 0x20, 0xd7, 0x79, 0xcb, 0x8f, 0x96, 0x20, 0x65, 0xda, + 0xba, 0x46, 0x43, 0x8b, 0xbd, 0x62, 0x9a, 0x8b, 0x78, 0x31, 0x30, 0xbf, 0xc2, 0xf5, 0x95, 0x00, + 0x39, 0xf5, 0xaf, 0x12, 0xa4, 0x84, 0x18, 0x1d, 0x82, 0x84, 0xa3, 0xf9, 0xbb, 0x94, 0x2e, 0x59, + 0x8a, 0xc9, 0x92, 0x42, 0x9f, 0x89, 0xdc, 0x73, 0x34, 0x8b, 0x86, 0x00, 0x97, 0x93, 0x67, 0x32, + 0xaf, 0x26, 0xd6, 0x6a, 0xf4, 0xf8, 0x61, 0x37, 0x1a, 0xd8, 0xf2, 0x3d, 0x31, 0xaf, 0x5c, 0xbe, + 0xc8, 0xc5, 0xe8, 0x49, 0x18, 0xf7, 0x5d, 0xcd, 0x30, 0x3b, 0x74, 0x13, 0x54, 0x57, 0x16, 0x0d, + 0x81, 0x72, 0x11, 0x1e, 0x10, 0xbc, 0x35, 0xec, 0x6b, 0xfa, 0x2e, 0xae, 0xb5, 0x41, 0xc3, 0xf4, + 0x9a, 0xe1, 0x7e, 0xae, 0xb0, 0xc4, 0xdb, 0x05, 0x76, 0xf6, 0x87, 0x12, 0x8c, 0x8b, 0x03, 0x53, + 0x2d, 0x70, 0x56, 0x15, 0x40, 0xb3, 0x2c, 0xdb, 0x0f, 0xbb, 0xab, 0x37, 0x94, 0x7b, 0x70, 0xf3, + 0x0b, 0x01, 0x48, 0x09, 0x11, 0x4c, 0x35, 0x00, 0xda, 0x2d, 0xfb, 0xba, 0x6d, 0x1a, 0x32, 0xfc, + 0x15, 0x0e, 0x7d, 0x0f, 0xc8, 0x8e, 0xd8, 0xc0, 0x44, 0xe4, 0x64, 0x85, 0x26, 0x21, 0xb9, 0x8d, + 0xeb, 0x86, 0xc5, 0x2f, 0x66, 0xd9, 0x83, 0xb8, 0x08, 0x49, 0x04, 0x17, 0x21, 0xa5, 0x4f, 0xc1, + 0x84, 0x6e, 0x37, 0xba, 0xcd, 0x2d, 0xc9, 0x5d, 0xc7, 0x7c, 0xef, 0xe3, 0xd2, 0x73, 0xd0, 0x2e, + 0x31, 0xdf, 0x95, 0xa4, 0x2f, 0xc7, 0xe2, 0xcb, 0xeb, 0xa5, 0xaf, 0xc5, 0xa6, 0x96, 0x19, 0x74, + 0x5d, 0x8c, 0x54, 0xc1, 0x3b, 0x26, 0xd6, 0x89, 0xf5, 0xf0, 0x95, 0x27, 0xe1, 0x23, 0x75, 0xc3, + 0xdf, 0x6d, 0x6e, 0xcf, 0xeb, 0x76, 0xe3, 0x68, 0xdd, 0xae, 0xdb, 0xed, 0x57, 0x9f, 0xe4, 0x89, + 0x3e, 0xd0, 0x5f, 0xfc, 0xf5, 0x67, 0x3a, 0x90, 0x4e, 0x45, 0xbe, 0x2b, 0x2d, 0xae, 0xc2, 0x04, + 0x57, 0x56, 0xe9, 0xfb, 0x17, 0x76, 0x8a, 0x40, 0x77, 0xbd, 0xc3, 0xca, 0x7f, 0xe3, 0x4d, 0x9a, + 0xae, 0x95, 0x71, 0x0e, 0x25, 0x6d, 0xec, 0xa0, 0x51, 0x54, 0xe0, 0xbe, 0x0e, 0x3e, 0xb6, 0x34, + 0xb1, 0x1b, 0xc1, 0xf8, 0x7d, 0xce, 0x38, 0x11, 0x62, 0xdc, 0xe0, 0xd0, 0xe2, 0x22, 0x8c, 0x1e, + 0x84, 0xeb, 0x9f, 0x39, 0x57, 0x16, 0x87, 0x49, 0x96, 0x61, 0x8c, 0x92, 0xe8, 0x4d, 0xcf, 0xb7, + 0x1b, 0x74, 0xdf, 0xbb, 0x3b, 0xcd, 0xbf, 0xbc, 0xc9, 0xd6, 0x4a, 0x8e, 0xc0, 0x16, 0x03, 0x54, + 0xb1, 0x08, 0xf4, 0x95, 0x53, 0x0d, 0xeb, 0x66, 0x04, 0xc3, 0x6b, 0xdc, 0x90, 0x40, 0xbf, 0xf8, + 0x49, 0x98, 0x24, 0xbf, 0xe9, 0xb6, 0x14, 0xb6, 0x24, 0xfa, 0xc2, 0x2b, 0xff, 0xc3, 0x17, 0xd8, + 0x72, 0x9c, 0x08, 0x08, 0x42, 0x36, 0x85, 0x66, 0xb1, 0x8e, 0x7d, 0x1f, 0xbb, 0x9e, 0xaa, 0x99, + 0xfd, 0xcc, 0x0b, 0xdd, 0x18, 0xe4, 0xbf, 0xf0, 0x76, 0xe7, 0x2c, 0x2e, 0x33, 0xe4, 0x82, 0x69, + 0x16, 0xb7, 0xe0, 0xfe, 0x3e, 0x51, 0x31, 0x00, 0xe7, 0x8b, 0x9c, 0x73, 0xb2, 0x27, 0x32, 0x08, + 0xed, 0x3a, 0x08, 0x79, 0x30, 0x97, 0x03, 0x70, 0xfe, 0x09, 0xe7, 0x44, 0x1c, 0x2b, 0xa6, 0x94, + 0x30, 0x5e, 0x80, 0xf1, 0xab, 0xd8, 0xdd, 0xb6, 0x3d, 0x7e, 0x4b, 0x33, 0x00, 0xdd, 0x4b, 0x9c, + 0x6e, 0x8c, 0x03, 0xe9, 0xb5, 0x0d, 0xe1, 0x3a, 0x0b, 0xa9, 0x1d, 0x4d, 0xc7, 0x03, 0x50, 0x7c, + 0x91, 0x53, 0x8c, 0x10, 0x7d, 0x02, 0x5d, 0x80, 0x6c, 0xdd, 0xe6, 0x99, 0x29, 0x1a, 0xfe, 0x32, + 0x87, 0x67, 0x04, 0x86, 0x53, 0x38, 0xb6, 0xd3, 0x34, 0x49, 0xda, 0x8a, 0xa6, 0xf8, 0x53, 0x41, + 0x21, 0x30, 0x9c, 0xe2, 0x00, 0x6e, 0xfd, 0x33, 0x41, 0xe1, 0x85, 0xfc, 0xf9, 0x0c, 0x64, 0x6c, + 0xcb, 0x6c, 0xd9, 0xd6, 0x20, 0x46, 0x7c, 0x89, 0x33, 0x00, 0x87, 0x10, 0x82, 0x73, 0x90, 0x1e, + 0x74, 0x22, 0xfe, 0xe2, 0x6d, 0xb1, 0x3c, 0xc4, 0x0c, 0x2c, 0xc3, 0x98, 0xd8, 0xa0, 0x0c, 0xdb, + 0x1a, 0x80, 0xe2, 0x2b, 0x9c, 0x22, 0x17, 0x82, 0xf1, 0x61, 0xf8, 0xd8, 0xf3, 0xeb, 0x78, 0x10, + 0x92, 0x57, 0xc4, 0x30, 0x38, 0x84, 0xbb, 0x72, 0x1b, 0x5b, 0xfa, 0xee, 0x60, 0x0c, 0x5f, 0x15, + 0xae, 0x14, 0x18, 0x42, 0xb1, 0x08, 0xa3, 0x0d, 0xcd, 0xf5, 0x76, 0x35, 0x73, 0xa0, 0xe9, 0xf8, + 0x4b, 0xce, 0x91, 0x0d, 0x40, 0xdc, 0x23, 0x4d, 0xeb, 0x20, 0x34, 0x5f, 0x13, 0x1e, 0x09, 0xc1, + 0xf8, 0xd2, 0xf3, 0x7c, 0x7a, 0xa5, 0x75, 0x10, 0xb6, 0xbf, 0x12, 0x4b, 0x8f, 0x61, 0xab, 0x61, + 0xc6, 0x73, 0x90, 0xf6, 0x8c, 0xeb, 0x03, 0xd1, 0xfc, 0xb5, 0x98, 0x69, 0x0a, 0x20, 0xe0, 0x4b, + 0xf0, 0x40, 0xdf, 0x34, 0x31, 0x00, 0xd9, 0xdf, 0x70, 0xb2, 0x43, 0x7d, 0x52, 0x05, 0xdf, 0x12, + 0x0e, 0x4a, 0xf9, 0xb7, 0x62, 0x4b, 0xc0, 0x5d, 0x5c, 0xeb, 0xe4, 0xac, 0xe0, 0x69, 0x3b, 0x07, + 0xf3, 0xda, 0xdf, 0x09, 0xaf, 0x31, 0x6c, 0x87, 0xd7, 0x36, 0xe1, 0x10, 0x67, 0x3c, 0xd8, 0xbc, + 0x7e, 0x5d, 0x6c, 0xac, 0x0c, 0xbd, 0xd5, 0x39, 0xbb, 0x9f, 0x82, 0xa9, 0xc0, 0x9d, 0xa2, 0x28, + 0xf5, 0xd4, 0x86, 0xe6, 0x0c, 0xc0, 0xfc, 0x0d, 0xce, 0x2c, 0x76, 0xfc, 0xa0, 0xaa, 0xf5, 0xaa, + 0x9a, 0x43, 0xc8, 0x9f, 0x85, 0xbc, 0x20, 0x6f, 0x5a, 0x2e, 0xd6, 0xed, 0xba, 0x65, 0x5c, 0xc7, + 0xb5, 0x01, 0xa8, 0xff, 0xbe, 0x6b, 0xaa, 0xb6, 0x42, 0x70, 0xc2, 0x5c, 0x01, 0x39, 0xa8, 0x55, + 0x54, 0xa3, 0xe1, 0xd8, 0xae, 0x1f, 0xc1, 0xf8, 0x4d, 0x31, 0x53, 0x01, 0xae, 0x42, 0x61, 0xc5, + 0x32, 0xe4, 0xe8, 0xe3, 0xa0, 0x21, 0xf9, 0x0f, 0x9c, 0x68, 0xb4, 0x8d, 0xe2, 0x1b, 0x87, 0x6e, + 0x37, 0x1c, 0xcd, 0x1d, 0x64, 0xff, 0xfb, 0x96, 0xd8, 0x38, 0x38, 0x84, 0x6f, 0x1c, 0x7e, 0xcb, + 0xc1, 0x24, 0xdb, 0x0f, 0xc0, 0xf0, 0xaa, 0xd8, 0x38, 0x04, 0x86, 0x53, 0x88, 0x82, 0x61, 0x00, + 0x8a, 0x7f, 0x14, 0x14, 0x02, 0x43, 0x28, 0x3e, 0xd1, 0x4e, 0xb4, 0x2e, 0xae, 0x1b, 0x9e, 0xef, + 0xb2, 0x52, 0xf8, 0xee, 0x54, 0xdf, 0x7e, 0xbb, 0xb3, 0x08, 0x53, 0x42, 0x50, 0xb2, 0x13, 0xf1, + 0x2b, 0x54, 0x7a, 0x52, 0x8a, 0x36, 0xec, 0x3b, 0x62, 0x27, 0x0a, 0xc1, 0x88, 0x6d, 0xa1, 0x0a, + 0x91, 0xb8, 0x5d, 0x27, 0xe7, 0x83, 0x01, 0xe8, 0xbe, 0xdb, 0x65, 0xdc, 0x86, 0xc0, 0x12, 0xce, + 0x50, 0xfd, 0xd3, 0xb4, 0xae, 0xe0, 0xd6, 0x40, 0xd1, 0xf9, 0x4f, 0x5d, 0xf5, 0xcf, 0x16, 0x43, + 0xb2, 0x3d, 0x64, 0xac, 0xab, 0x9e, 0x42, 0x51, 0x1f, 0xeb, 0xe4, 0x7f, 0xf5, 0x36, 0x1f, 0x6f, + 0x67, 0x39, 0x55, 0x5c, 0x21, 0x41, 0xde, 0x59, 0xf4, 0x44, 0x93, 0xbd, 0x70, 0x3b, 0x88, 0xf3, + 0x8e, 0x9a, 0xa7, 0x78, 0x1e, 0x46, 0x3b, 0x0a, 0x9e, 0x68, 0xaa, 0x5f, 0xe3, 0x54, 0xd9, 0x70, + 0xbd, 0x53, 0x3c, 0x09, 0x09, 0x52, 0xbc, 0x44, 0xc3, 0x7f, 0x9d, 0xc3, 0xa9, 0x7a, 0xf1, 0x63, + 0x90, 0x12, 0x45, 0x4b, 0x34, 0xf4, 0x37, 0x38, 0x34, 0x80, 0x10, 0xb8, 0x28, 0x58, 0xa2, 0xe1, + 0x9f, 0x15, 0x70, 0x01, 0x21, 0xf0, 0xc1, 0x5d, 0xf8, 0xbd, 0xdf, 0x4a, 0xf0, 0xa4, 0x23, 0x7c, + 0x77, 0x0e, 0x46, 0x78, 0xa5, 0x12, 0x8d, 0xfe, 0x1c, 0xef, 0x5c, 0x20, 0x8a, 0xa7, 0x21, 0x39, + 0xa0, 0xc3, 0x7f, 0x9b, 0x43, 0x99, 0x7e, 0x71, 0x11, 0x32, 0xa1, 0xea, 0x24, 0x1a, 0xfe, 0x3b, + 0x1c, 0x1e, 0x46, 0x11, 0xd3, 0x79, 0x75, 0x12, 0x4d, 0xf0, 0xbb, 0xc2, 0x74, 0x8e, 0x20, 0x6e, + 0x13, 0x85, 0x49, 0x34, 0xfa, 0xf7, 0x84, 0xd7, 0x05, 0xa4, 0xf8, 0x0c, 0xa4, 0x83, 0x64, 0x13, + 0x8d, 0xff, 0x7d, 0x8e, 0x6f, 0x63, 0x88, 0x07, 0x42, 0xc9, 0x2e, 0x9a, 0xe2, 0x0f, 0x84, 0x07, + 0x42, 0x28, 0xb2, 0x8c, 0xba, 0x0b, 0x98, 0x68, 0xa6, 0x3f, 0x14, 0xcb, 0xa8, 0xab, 0x7e, 0x21, + 0xb3, 0x49, 0xf7, 0xfc, 0x68, 0x8a, 0x3f, 0x12, 0xb3, 0x49, 0xf5, 0x89, 0x19, 0xdd, 0x15, 0x41, + 0x34, 0xc7, 0x1f, 0x0b, 0x33, 0xba, 0x0a, 0x82, 0xe2, 0x3a, 0xa0, 0xde, 0x6a, 0x20, 0x9a, 0xef, + 0xf3, 0x9c, 0x6f, 0xbc, 0xa7, 0x18, 0x28, 0x5e, 0x84, 0x43, 0xfd, 0x2b, 0x81, 0x68, 0xd6, 0x2f, + 0xdc, 0xee, 0x3a, 0xbb, 0x85, 0x0b, 0x81, 0xe2, 0x66, 0x3b, 0xa5, 0x84, 0xab, 0x80, 0x68, 0xda, + 0x17, 0x6f, 0x77, 0x6e, 0xdc, 0xe1, 0x22, 0xa0, 0xb8, 0x00, 0xd0, 0x4e, 0xc0, 0xd1, 0x5c, 0x2f, + 0x71, 0xae, 0x10, 0x88, 0x2c, 0x0d, 0x9e, 0x7f, 0xa3, 0xf1, 0x5f, 0x14, 0x4b, 0x83, 0x23, 0xc8, + 0xd2, 0x10, 0xa9, 0x37, 0x1a, 0xfd, 0xb2, 0x58, 0x1a, 0x02, 0x42, 0x22, 0x3b, 0x94, 0xdd, 0xa2, + 0x19, 0xbe, 0x24, 0x22, 0x3b, 0x84, 0x2a, 0xae, 0xc2, 0x78, 0x4f, 0x42, 0x8c, 0xa6, 0xfa, 0x32, + 0xa7, 0x92, 0xbb, 0xf3, 0x61, 0x38, 0x79, 0xf1, 0x64, 0x18, 0xcd, 0xf6, 0xe7, 0x5d, 0xc9, 0x8b, + 0xe7, 0xc2, 0xe2, 0x39, 0x48, 0x59, 0x4d, 0xd3, 0x24, 0x8b, 0x07, 0xdd, 0xfd, 0x03, 0xbb, 0xfc, + 0x8f, 0xdf, 0xe3, 0xde, 0x11, 0x80, 0xe2, 0x49, 0x48, 0xe2, 0xc6, 0x36, 0xae, 0x45, 0x21, 0xff, + 0xf3, 0x3d, 0xb1, 0x61, 0x12, 0xed, 0xe2, 0x33, 0x00, 0xec, 0x6a, 0x84, 0xbe, 0xf6, 0x8b, 0xc0, + 0xfe, 0xd7, 0x7b, 0xfc, 0xd3, 0x97, 0x36, 0xa4, 0x4d, 0xc0, 0x3e, 0xa4, 0xb9, 0x3b, 0xc1, 0xdb, + 0x9d, 0x04, 0x74, 0x46, 0xce, 0xc2, 0xc8, 0x65, 0xcf, 0xb6, 0x7c, 0xad, 0x1e, 0x85, 0xfe, 0x6f, + 0x8e, 0x16, 0xfa, 0xc4, 0x61, 0x0d, 0xdb, 0xc5, 0xbe, 0x56, 0xf7, 0xa2, 0xb0, 0xff, 0xc3, 0xb1, + 0x01, 0x80, 0x80, 0x75, 0xcd, 0xf3, 0x07, 0x19, 0xf7, 0x4f, 0x04, 0x58, 0x00, 0x88, 0xd1, 0xe4, + 0xf7, 0x15, 0xdc, 0x8a, 0xc2, 0xbe, 0x23, 0x8c, 0xe6, 0xfa, 0xc5, 0x8f, 0x41, 0x9a, 0xfc, 0x64, + 0xdf, 0xb3, 0x45, 0x80, 0xff, 0x97, 0x83, 0xdb, 0x08, 0xd2, 0xb3, 0xe7, 0xd7, 0x7c, 0x23, 0xda, + 0xd9, 0xff, 0xc7, 0x67, 0x5a, 0xe8, 0x17, 0x17, 0x20, 0xe3, 0xf9, 0xb5, 0x5a, 0x93, 0xd7, 0xa7, + 0x11, 0xf0, 0xff, 0x7f, 0x2f, 0xb8, 0xb2, 0x08, 0x30, 0x64, 0xb6, 0xaf, 0x5d, 0xf1, 0x1d, 0x9b, + 0xbe, 0xe6, 0x88, 0x62, 0xb8, 0xcd, 0x19, 0x42, 0x90, 0x52, 0xb9, 0xff, 0xf5, 0x2d, 0x2c, 0xdb, + 0xcb, 0x36, 0xbb, 0xb8, 0x7d, 0x6e, 0x36, 0xfa, 0x06, 0x16, 0x5e, 0x1d, 0x83, 0xc3, 0xba, 0xdd, + 0xd8, 0xb6, 0xbd, 0xa3, 0xa1, 0xcd, 0xfc, 0xa8, 0x98, 0x1f, 0x7e, 0x39, 0x1b, 0xcc, 0xd7, 0xd4, + 0xc1, 0x6e, 0x75, 0x67, 0x7f, 0x3c, 0x0a, 0xa9, 0x45, 0xcd, 0xf3, 0xb5, 0x6b, 0x5a, 0x0b, 0x3d, + 0x02, 0xa9, 0x8a, 0xe5, 0x1f, 0x3f, 0xb6, 0xee, 0xbb, 0xf4, 0xc5, 0x64, 0xbc, 0x94, 0xbe, 0x73, + 0x73, 0x3a, 0x69, 0x10, 0x99, 0x12, 0x34, 0xa1, 0x23, 0x90, 0xa4, 0xbf, 0xe9, 0xdd, 0x76, 0xbc, + 0x34, 0xfa, 0xda, 0xcd, 0xe9, 0xa1, 0xb6, 0x1e, 0x6b, 0x43, 0x97, 0x20, 0x53, 0x6d, 0x6d, 0x19, + 0x96, 0x7f, 0xea, 0x04, 0xa1, 0x23, 0xfe, 0x49, 0x94, 0x4e, 0xdf, 0xb9, 0x39, 0x7d, 0x7c, 0x5f, + 0x03, 0x49, 0x61, 0xd1, 0x1e, 0x98, 0x40, 0xd3, 0x0f, 0x87, 0xc3, 0x5c, 0xe8, 0x22, 0xa4, 0xc4, + 0x23, 0x7b, 0x47, 0x54, 0x3a, 0xc7, 0x4d, 0xb8, 0x27, 0xee, 0x80, 0x0c, 0xfd, 0x12, 0x64, 0xab, + 0xad, 0xf3, 0xa6, 0xad, 0x71, 0x1f, 0x24, 0x67, 0xa4, 0xb9, 0x58, 0xe9, 0xcc, 0x9d, 0x9b, 0xd3, + 0x27, 0x06, 0x26, 0xe6, 0x70, 0xca, 0xdc, 0xc1, 0x86, 0x9e, 0x83, 0x74, 0xf0, 0x4c, 0xdf, 0x42, + 0xc5, 0x4a, 0x1f, 0xe5, 0x76, 0xdf, 0x1b, 0x7d, 0x9b, 0x2e, 0x64, 0x39, 0x73, 0xf7, 0xc8, 0x8c, + 0x34, 0x27, 0xdd, 0x8b, 0xe5, 0xdc, 0x27, 0x1d, 0x6c, 0x21, 0xcb, 0x4f, 0x9d, 0xa0, 0xaf, 0xbd, + 0xa4, 0x7b, 0xb5, 0x9c, 0xd3, 0xb7, 0xe9, 0xd0, 0x05, 0x18, 0xa9, 0xb6, 0x4a, 0x2d, 0x1f, 0x7b, + 0xf4, 0x7b, 0xb4, 0x6c, 0xe9, 0xa9, 0x3b, 0x37, 0xa7, 0x3f, 0x3c, 0x20, 0x2b, 0xc5, 0x29, 0x82, + 0x00, 0xcd, 0x40, 0x66, 0xd5, 0x76, 0x1b, 0x9a, 0xc9, 0xf8, 0x80, 0xbd, 0xc6, 0x0b, 0x89, 0xd0, + 0x16, 0x19, 0x09, 0x9b, 0x6d, 0x8f, 0xfe, 0x2b, 0xd3, 0xcf, 0x10, 0x93, 0x6d, 0x26, 0x64, 0x40, + 0xb2, 0xda, 0xaa, 0x6a, 0x4e, 0x3e, 0x4b, 0xdf, 0x31, 0x3d, 0x34, 0x1f, 0x20, 0xc4, 0xda, 0x9a, + 0xa7, 0xed, 0xf4, 0x63, 0x9c, 0xd2, 0x89, 0x3b, 0x37, 0xa7, 0x9f, 0x1a, 0xb8, 0xc7, 0xaa, 0xe6, + 0xd0, 0xee, 0x58, 0x0f, 0xe8, 0x5b, 0x12, 0x59, 0x58, 0xec, 0x92, 0x9e, 0xf4, 0x38, 0x4a, 0x7b, + 0x3c, 0xd2, 0xb7, 0xc7, 0x40, 0x8b, 0xf5, 0x6b, 0x7d, 0xe6, 0xf5, 0x03, 0x8c, 0x94, 0x9d, 0x0d, + 0x49, 0xd7, 0xbf, 0xf9, 0xfa, 0x3d, 0x2f, 0xda, 0xc0, 0x02, 0xf4, 0x82, 0x04, 0xa3, 0xd5, 0xd6, + 0x2a, 0x4f, 0xe2, 0xc4, 0xf2, 0x1c, 0xff, 0x87, 0x97, 0x7e, 0x96, 0x87, 0xf4, 0x98, 0xed, 0xa7, + 0x3e, 0xf3, 0xfa, 0xf4, 0xb1, 0x81, 0x8d, 0xa0, 0x5b, 0x10, 0xb5, 0xa1, 0xb3, 0x4f, 0xf4, 0x59, + 0x6a, 0x45, 0x99, 0x14, 0x04, 0x35, 0x5c, 0x23, 0x56, 0x8c, 0xdd, 0xc5, 0x8a, 0x90, 0x1e, 0xb3, + 0xa2, 0x48, 0xa2, 0xfe, 0xde, 0x2d, 0x09, 0xf1, 0xa1, 0x35, 0x18, 0x66, 0x1e, 0xa6, 0xdf, 0x42, + 0xa6, 0x0f, 0x18, 0x86, 0xed, 0xc9, 0x51, 0x38, 0xcd, 0xd4, 0x19, 0x80, 0x76, 0x8c, 0x21, 0x19, + 0xe2, 0x57, 0x70, 0x8b, 0x7f, 0xf0, 0x4a, 0x7e, 0xa2, 0xc9, 0xf6, 0x17, 0xe9, 0xd2, 0x5c, 0x82, + 0x7f, 0x66, 0x5e, 0x8c, 0x9d, 0x91, 0xa6, 0x9e, 0x06, 0xb9, 0x3b, 0x56, 0x0e, 0x84, 0x57, 0x00, + 0xf5, 0xce, 0x58, 0x98, 0x21, 0xc9, 0x18, 0x1e, 0x0d, 0x33, 0x64, 0x8e, 0xc9, 0x6d, 0x9f, 0x5f, + 0x34, 0x4c, 0xcf, 0xb6, 0x7a, 0x38, 0xbb, 0xfd, 0xff, 0xb3, 0x71, 0xce, 0x16, 0x60, 0x98, 0x09, + 0xc9, 0x58, 0x2a, 0x34, 0x7d, 0xd0, 0x2c, 0xa7, 0xb0, 0x87, 0xd2, 0xca, 0x6b, 0xb7, 0x0a, 0x43, + 0x3f, 0xb8, 0x55, 0x18, 0xfa, 0xb7, 0x5b, 0x85, 0xa1, 0x37, 0x6e, 0x15, 0xa4, 0xb7, 0x6e, 0x15, + 0xa4, 0x77, 0x6e, 0x15, 0xa4, 0x77, 0x6f, 0x15, 0xa4, 0x1b, 0x7b, 0x05, 0xe9, 0xab, 0x7b, 0x05, + 0xe9, 0xeb, 0x7b, 0x05, 0xe9, 0xdb, 0x7b, 0x05, 0xe9, 0x7b, 0x7b, 0x05, 0xe9, 0xb5, 0xbd, 0xc2, + 0xd0, 0x0f, 0xf6, 0x0a, 0xd2, 0x1b, 0x7b, 0x05, 0xe9, 0xad, 0xbd, 0xc2, 0xd0, 0x3b, 0x7b, 0x05, + 0xe9, 0xdd, 0xbd, 0xc2, 0xd0, 0x8d, 0x1f, 0x15, 0x86, 0x7e, 0x1a, 0x00, 0x00, 0xff, 0xff, 0x84, + 0x0f, 0xf8, 0xed, 0x54, 0x3a, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -1186,6 +1191,9 @@ return dAtA } func (m *Castaway) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int32Ptr != nil { @@ -1266,6 +1274,9 @@ } func (m *Wilson) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64 != nil { @@ -1631,6 +1642,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.MyUint64S) == 0 { + m.MyUint64S = make([]github_com_gogo_protobuf_test_casttype.MyUint64Type, 0, elementCount) + } for iNdEx < postIndex { var v github_com_gogo_protobuf_test_casttype.MyUint64Type for shift := uint(0); ; shift += 7 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/casttype/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/casttype/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -29,4 +29,4 @@ regenerate: go install github.com/gogo/protobuf/protoc-gen-combo go install github.com/gogo/protobuf/protoc-gen-gogo - protoc-gen-combo --gogo_out=. --version="3.0.0" --proto_path=../../../../../:../../protobuf/:. casttype.proto + protoc-gen-combo --gogo_out=. --version="3.0.0" --proto_path=../../protobuf/:../../../../../:. casttype.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/castvalue.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/castvalue.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/castvalue.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/castvalue.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -105,253 +105,258 @@ func CastvalueDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3921 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0x1b, 0xd7, - 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0x79, 0x49, 0x4b, 0x10, 0x1d, 0x43, 0x14, 0x6d, - 0x47, 0xb4, 0x9d, 0x50, 0x19, 0x59, 0x92, 0x25, 0xa8, 0x89, 0x0b, 0x82, 0x10, 0x03, 0x97, 0x7f, - 0x59, 0x90, 0xb1, 0xe5, 0x4c, 0x67, 0x67, 0xb9, 0xb8, 0x00, 0x57, 0x5a, 0xec, 0x6e, 0x76, 0x17, - 0x92, 0xa9, 0xe9, 0x83, 0x3a, 0x4e, 0xdb, 0x49, 0x3b, 0xfd, 0xef, 0x4c, 0x13, 0xd7, 0x71, 0x9b, - 0xce, 0xa4, 0x4e, 0xd3, 0xbf, 0xa4, 0x69, 0xd3, 0xa4, 0x4f, 0xe9, 0x43, 0x5a, 0x3f, 0x75, 0x92, - 0xb7, 0x3e, 0x74, 0x5a, 0x8b, 0xf1, 0x4c, 0xdd, 0xd6, 0x6d, 0xdc, 0xd6, 0x0f, 0x9e, 0xd1, 0x74, - 0xa6, 0x73, 0xff, 0x16, 0xbb, 0x00, 0xc8, 0x05, 0xd3, 0xb1, 0xfd, 0x44, 0xec, 0xb9, 0xe7, 0xfb, - 0xf6, 0xdc, 0x73, 0xcf, 0x3d, 0xe7, 0xdc, 0xbb, 0x84, 0x1f, 0x5d, 0x81, 0xf9, 0xb6, 0x6d, 0xb7, - 0x4d, 0x7c, 0xce, 0x71, 0x6d, 0xdf, 0xde, 0xed, 0xb6, 0xce, 0x35, 0xb1, 0xa7, 0xbb, 0x86, 0xe3, - 0xdb, 0xee, 0x12, 0x95, 0xa1, 0x29, 0xa6, 0xb1, 0x24, 0x34, 0x16, 0xd6, 0x61, 0xfa, 0x9a, 0x61, - 0xe2, 0x95, 0x40, 0xb1, 0x81, 0x7d, 0x74, 0x19, 0x52, 0x2d, 0xc3, 0xc4, 0x45, 0x69, 0x3e, 0xb9, - 0x98, 0x3b, 0xff, 0xc8, 0x52, 0x1f, 0x68, 0x29, 0x8a, 0xd8, 0x22, 0x62, 0x85, 0x22, 0x16, 0xde, - 0x48, 0xc1, 0xcc, 0x90, 0x51, 0x84, 0x20, 0x65, 0x69, 0x1d, 0xc2, 0x28, 0x2d, 0x66, 0x15, 0xfa, - 0x1b, 0x15, 0x61, 0xc2, 0xd1, 0xf4, 0x9b, 0x5a, 0x1b, 0x17, 0x13, 0x54, 0x2c, 0x1e, 0x51, 0x09, - 0xa0, 0x89, 0x1d, 0x6c, 0x35, 0xb1, 0xa5, 0xef, 0x17, 0x93, 0xf3, 0xc9, 0xc5, 0xac, 0x12, 0x92, - 0xa0, 0x27, 0x60, 0xda, 0xe9, 0xee, 0x9a, 0x86, 0xae, 0x86, 0xd4, 0x60, 0x3e, 0xb9, 0x98, 0x56, - 0x64, 0x36, 0xb0, 0xd2, 0x53, 0x3e, 0x0b, 0x53, 0xb7, 0xb1, 0x76, 0x33, 0xac, 0x9a, 0xa3, 0xaa, - 0x05, 0x22, 0x0e, 0x29, 0x56, 0x21, 0xdf, 0xc1, 0x9e, 0xa7, 0xb5, 0xb1, 0xea, 0xef, 0x3b, 0xb8, - 0x98, 0xa2, 0xb3, 0x9f, 0x1f, 0x98, 0x7d, 0xff, 0xcc, 0x73, 0x1c, 0xb5, 0xbd, 0xef, 0x60, 0x54, - 0x81, 0x2c, 0xb6, 0xba, 0x1d, 0xc6, 0x90, 0x3e, 0xc4, 0x7f, 0x35, 0xab, 0xdb, 0xe9, 0x67, 0xc9, - 0x10, 0x18, 0xa7, 0x98, 0xf0, 0xb0, 0x7b, 0xcb, 0xd0, 0x71, 0x71, 0x9c, 0x12, 0x9c, 0x1d, 0x20, - 0x68, 0xb0, 0xf1, 0x7e, 0x0e, 0x81, 0x43, 0x55, 0xc8, 0xe2, 0x17, 0x7c, 0x6c, 0x79, 0x86, 0x6d, - 0x15, 0x27, 0x28, 0xc9, 0xa3, 0x43, 0x56, 0x11, 0x9b, 0xcd, 0x7e, 0x8a, 0x1e, 0x0e, 0x5d, 0x82, - 0x09, 0xdb, 0xf1, 0x0d, 0xdb, 0xf2, 0x8a, 0x99, 0x79, 0x69, 0x31, 0x77, 0xfe, 0x43, 0x43, 0x03, - 0x61, 0x93, 0xe9, 0x28, 0x42, 0x19, 0xd5, 0x41, 0xf6, 0xec, 0xae, 0xab, 0x63, 0x55, 0xb7, 0x9b, - 0x58, 0x35, 0xac, 0x96, 0x5d, 0xcc, 0x52, 0x82, 0xd3, 0x83, 0x13, 0xa1, 0x8a, 0x55, 0xbb, 0x89, - 0xeb, 0x56, 0xcb, 0x56, 0x0a, 0x5e, 0xe4, 0x19, 0x9d, 0x80, 0x71, 0x6f, 0xdf, 0xf2, 0xb5, 0x17, - 0x8a, 0x79, 0x1a, 0x21, 0xfc, 0x69, 0xe1, 0x3b, 0xe3, 0x30, 0x35, 0x4a, 0x88, 0x5d, 0x85, 0x74, - 0x8b, 0xcc, 0xb2, 0x98, 0x38, 0x8e, 0x0f, 0x18, 0x26, 0xea, 0xc4, 0xf1, 0x1f, 0xd3, 0x89, 0x15, - 0xc8, 0x59, 0xd8, 0xf3, 0x71, 0x93, 0x45, 0x44, 0x72, 0xc4, 0x98, 0x02, 0x06, 0x1a, 0x0c, 0xa9, - 0xd4, 0x8f, 0x15, 0x52, 0xcf, 0xc1, 0x54, 0x60, 0x92, 0xea, 0x6a, 0x56, 0x5b, 0xc4, 0xe6, 0xb9, - 0x38, 0x4b, 0x96, 0x6a, 0x02, 0xa7, 0x10, 0x98, 0x52, 0xc0, 0x91, 0x67, 0xb4, 0x02, 0x60, 0x5b, - 0xd8, 0x6e, 0xa9, 0x4d, 0xac, 0x9b, 0xc5, 0xcc, 0x21, 0x5e, 0xda, 0x24, 0x2a, 0x03, 0x5e, 0xb2, - 0x99, 0x54, 0x37, 0xd1, 0x95, 0x5e, 0xa8, 0x4d, 0x1c, 0x12, 0x29, 0xeb, 0x6c, 0x93, 0x0d, 0x44, - 0xdb, 0x0e, 0x14, 0x5c, 0x4c, 0xe2, 0x1e, 0x37, 0xf9, 0xcc, 0xb2, 0xd4, 0x88, 0xa5, 0xd8, 0x99, - 0x29, 0x1c, 0xc6, 0x26, 0x36, 0xe9, 0x86, 0x1f, 0xd1, 0xc3, 0x10, 0x08, 0x54, 0x1a, 0x56, 0x40, - 0xb3, 0x50, 0x5e, 0x08, 0x37, 0xb4, 0x0e, 0x9e, 0xbb, 0x03, 0x85, 0xa8, 0x7b, 0xd0, 0x2c, 0xa4, - 0x3d, 0x5f, 0x73, 0x7d, 0x1a, 0x85, 0x69, 0x85, 0x3d, 0x20, 0x19, 0x92, 0xd8, 0x6a, 0xd2, 0x2c, - 0x97, 0x56, 0xc8, 0x4f, 0xf4, 0x93, 0xbd, 0x09, 0x27, 0xe9, 0x84, 0x3f, 0x3c, 0xb8, 0xa2, 0x11, - 0xe6, 0xfe, 0x79, 0xcf, 0x3d, 0x05, 0x93, 0x91, 0x09, 0x8c, 0xfa, 0xea, 0x85, 0x9f, 0x81, 0x07, - 0x86, 0x52, 0xa3, 0xe7, 0x60, 0xb6, 0x6b, 0x19, 0x96, 0x8f, 0x5d, 0xc7, 0xc5, 0x24, 0x62, 0xd9, - 0xab, 0x8a, 0xff, 0x32, 0x71, 0x48, 0xcc, 0xed, 0x84, 0xb5, 0x19, 0x8b, 0x32, 0xd3, 0x1d, 0x14, - 0x3e, 0x9e, 0xcd, 0xbc, 0x39, 0x21, 0xdf, 0xbd, 0x7b, 0xf7, 0x6e, 0x62, 0xe1, 0x0b, 0xe3, 0x30, - 0x3b, 0x6c, 0xcf, 0x0c, 0xdd, 0xbe, 0x27, 0x60, 0xdc, 0xea, 0x76, 0x76, 0xb1, 0x4b, 0x9d, 0x94, - 0x56, 0xf8, 0x13, 0xaa, 0x40, 0xda, 0xd4, 0x76, 0xb1, 0x59, 0x4c, 0xcd, 0x4b, 0x8b, 0x85, 0xf3, - 0x4f, 0x8c, 0xb4, 0x2b, 0x97, 0xd6, 0x08, 0x44, 0x61, 0x48, 0xf4, 0x09, 0x48, 0xf1, 0x14, 0x4d, - 0x18, 0x1e, 0x1f, 0x8d, 0x81, 0xec, 0x25, 0x85, 0xe2, 0xd0, 0x83, 0x90, 0x25, 0x7f, 0x59, 0x6c, - 0x8c, 0x53, 0x9b, 0x33, 0x44, 0x40, 0xe2, 0x02, 0xcd, 0x41, 0x86, 0x6e, 0x93, 0x26, 0x16, 0xa5, - 0x2d, 0x78, 0x26, 0x81, 0xd5, 0xc4, 0x2d, 0xad, 0x6b, 0xfa, 0xea, 0x2d, 0xcd, 0xec, 0x62, 0x1a, - 0xf0, 0x59, 0x25, 0xcf, 0x85, 0x9f, 0x26, 0x32, 0x74, 0x1a, 0x72, 0x6c, 0x57, 0x19, 0x56, 0x13, - 0xbf, 0x40, 0xb3, 0x67, 0x5a, 0x61, 0x1b, 0xad, 0x4e, 0x24, 0xe4, 0xf5, 0x37, 0x3c, 0xdb, 0x12, - 0xa1, 0x49, 0x5f, 0x41, 0x04, 0xf4, 0xf5, 0x4f, 0xf5, 0x27, 0xee, 0x87, 0x86, 0x4f, 0xaf, 0x3f, - 0xa6, 0x16, 0xbe, 0x95, 0x80, 0x14, 0xcd, 0x17, 0x53, 0x90, 0xdb, 0xbe, 0xbe, 0x55, 0x53, 0x57, - 0x36, 0x77, 0x96, 0xd7, 0x6a, 0xb2, 0x84, 0x0a, 0x00, 0x54, 0x70, 0x6d, 0x6d, 0xb3, 0xb2, 0x2d, - 0x27, 0x82, 0xe7, 0xfa, 0xc6, 0xf6, 0xa5, 0x0b, 0x72, 0x32, 0x00, 0xec, 0x30, 0x41, 0x2a, 0xac, - 0xf0, 0xe4, 0x79, 0x39, 0x8d, 0x64, 0xc8, 0x33, 0x82, 0xfa, 0x73, 0xb5, 0x95, 0x4b, 0x17, 0xe4, - 0xf1, 0xa8, 0xe4, 0xc9, 0xf3, 0xf2, 0x04, 0x9a, 0x84, 0x2c, 0x95, 0x2c, 0x6f, 0x6e, 0xae, 0xc9, - 0x99, 0x80, 0xb3, 0xb1, 0xad, 0xd4, 0x37, 0x56, 0xe5, 0x6c, 0xc0, 0xb9, 0xaa, 0x6c, 0xee, 0x6c, - 0xc9, 0x10, 0x30, 0xac, 0xd7, 0x1a, 0x8d, 0xca, 0x6a, 0x4d, 0xce, 0x05, 0x1a, 0xcb, 0xd7, 0xb7, - 0x6b, 0x0d, 0x39, 0x1f, 0x31, 0xeb, 0xc9, 0xf3, 0xf2, 0x64, 0xf0, 0x8a, 0xda, 0xc6, 0xce, 0xba, - 0x5c, 0x40, 0xd3, 0x30, 0xc9, 0x5e, 0x21, 0x8c, 0x98, 0xea, 0x13, 0x5d, 0xba, 0x20, 0xcb, 0x3d, - 0x43, 0x18, 0xcb, 0x74, 0x44, 0x70, 0xe9, 0x82, 0x8c, 0x16, 0xaa, 0x90, 0xa6, 0xd1, 0x85, 0x10, - 0x14, 0xd6, 0x2a, 0xcb, 0xb5, 0x35, 0x75, 0x73, 0x6b, 0xbb, 0xbe, 0xb9, 0x51, 0x59, 0x93, 0xa5, - 0x9e, 0x4c, 0xa9, 0x7d, 0x6a, 0xa7, 0xae, 0xd4, 0x56, 0xe4, 0x44, 0x58, 0xb6, 0x55, 0xab, 0x6c, - 0xd7, 0x56, 0xe4, 0xe4, 0x82, 0x0e, 0xb3, 0xc3, 0xf2, 0xe4, 0xd0, 0x9d, 0x11, 0x5a, 0xe2, 0xc4, - 0x21, 0x4b, 0x4c, 0xb9, 0x06, 0x96, 0xf8, 0x87, 0x09, 0x98, 0x19, 0x52, 0x2b, 0x86, 0xbe, 0xe4, - 0x69, 0x48, 0xb3, 0x10, 0x65, 0xd5, 0xf3, 0xb1, 0xa1, 0x45, 0x87, 0x06, 0xec, 0x40, 0x05, 0xa5, - 0xb8, 0x70, 0x07, 0x91, 0x3c, 0xa4, 0x83, 0x20, 0x14, 0x03, 0x39, 0xfd, 0xa7, 0x07, 0x72, 0x3a, - 0x2b, 0x7b, 0x97, 0x46, 0x29, 0x7b, 0x54, 0x76, 0xbc, 0xdc, 0x9e, 0x1e, 0x92, 0xdb, 0xaf, 0xc2, - 0xf4, 0x00, 0xd1, 0xc8, 0x39, 0xf6, 0x45, 0x09, 0x8a, 0x87, 0x39, 0x27, 0x26, 0xd3, 0x25, 0x22, - 0x99, 0xee, 0x6a, 0xbf, 0x07, 0xcf, 0x1c, 0xbe, 0x08, 0x03, 0x6b, 0xfd, 0xaa, 0x04, 0x27, 0x86, - 0x77, 0x8a, 0x43, 0x6d, 0xf8, 0x04, 0x8c, 0x77, 0xb0, 0xbf, 0x67, 0x8b, 0x6e, 0xe9, 0xc3, 0x43, - 0x6a, 0x30, 0x19, 0xee, 0x5f, 0x6c, 0x8e, 0x0a, 0x17, 0xf1, 0xe4, 0x61, 0xed, 0x1e, 0xb3, 0x66, - 0xc0, 0xd2, 0xcf, 0x27, 0xe0, 0x81, 0xa1, 0xe4, 0x43, 0x0d, 0x7d, 0x08, 0xc0, 0xb0, 0x9c, 0xae, - 0xcf, 0x3a, 0x22, 0x96, 0x60, 0xb3, 0x54, 0x42, 0x93, 0x17, 0x49, 0x9e, 0x5d, 0x3f, 0x18, 0x4f, - 0xd2, 0x71, 0x60, 0x22, 0xaa, 0x70, 0xb9, 0x67, 0x68, 0x8a, 0x1a, 0x5a, 0x3a, 0x64, 0xa6, 0x03, - 0x81, 0xf9, 0x31, 0x90, 0x75, 0xd3, 0xc0, 0x96, 0xaf, 0x7a, 0xbe, 0x8b, 0xb5, 0x8e, 0x61, 0xb5, - 0x69, 0x05, 0xc9, 0x94, 0xd3, 0x2d, 0xcd, 0xf4, 0xb0, 0x32, 0xc5, 0x86, 0x1b, 0x62, 0x94, 0x20, - 0x68, 0x00, 0xb9, 0x21, 0xc4, 0x78, 0x04, 0xc1, 0x86, 0x03, 0xc4, 0xc2, 0x37, 0x33, 0x90, 0x0b, - 0xf5, 0xd5, 0xe8, 0x0c, 0xe4, 0x6f, 0x68, 0xb7, 0x34, 0x55, 0x9c, 0x95, 0x98, 0x27, 0x72, 0x44, - 0xb6, 0xc5, 0xcf, 0x4b, 0x1f, 0x83, 0x59, 0xaa, 0x62, 0x77, 0x7d, 0xec, 0xaa, 0xba, 0xa9, 0x79, - 0x1e, 0x75, 0x5a, 0x86, 0xaa, 0x22, 0x32, 0xb6, 0x49, 0x86, 0xaa, 0x62, 0x04, 0x5d, 0x84, 0x19, - 0x8a, 0xe8, 0x74, 0x4d, 0xdf, 0x70, 0x4c, 0xac, 0x92, 0xd3, 0x9b, 0x47, 0x2b, 0x49, 0x60, 0xd9, - 0x34, 0xd1, 0x58, 0xe7, 0x0a, 0xc4, 0x22, 0x0f, 0xad, 0xc0, 0x43, 0x14, 0xd6, 0xc6, 0x16, 0x76, - 0x35, 0x1f, 0xab, 0xf8, 0xb3, 0x5d, 0xcd, 0xf4, 0x54, 0xcd, 0x6a, 0xaa, 0x7b, 0x9a, 0xb7, 0x57, - 0x9c, 0x25, 0x04, 0xcb, 0x89, 0xa2, 0xa4, 0x9c, 0x22, 0x8a, 0xab, 0x5c, 0xaf, 0x46, 0xd5, 0x2a, - 0x56, 0xf3, 0x93, 0x9a, 0xb7, 0x87, 0xca, 0x70, 0x82, 0xb2, 0x78, 0xbe, 0x6b, 0x58, 0x6d, 0x55, - 0xdf, 0xc3, 0xfa, 0x4d, 0xb5, 0xeb, 0xb7, 0x2e, 0x17, 0x1f, 0x0c, 0xbf, 0x9f, 0x5a, 0xd8, 0xa0, - 0x3a, 0x55, 0xa2, 0xb2, 0xe3, 0xb7, 0x2e, 0xa3, 0x06, 0xe4, 0xc9, 0x62, 0x74, 0x8c, 0x3b, 0x58, - 0x6d, 0xd9, 0x2e, 0x2d, 0x8d, 0x85, 0x21, 0xa9, 0x29, 0xe4, 0xc1, 0xa5, 0x4d, 0x0e, 0x58, 0xb7, - 0x9b, 0xb8, 0x9c, 0x6e, 0x6c, 0xd5, 0x6a, 0x2b, 0x4a, 0x4e, 0xb0, 0x5c, 0xb3, 0x5d, 0x12, 0x50, - 0x6d, 0x3b, 0x70, 0x70, 0x8e, 0x05, 0x54, 0xdb, 0x16, 0xee, 0xbd, 0x08, 0x33, 0xba, 0xce, 0xe6, - 0x6c, 0xe8, 0x2a, 0x3f, 0x63, 0x79, 0x45, 0x39, 0xe2, 0x2c, 0x5d, 0x5f, 0x65, 0x0a, 0x3c, 0xc6, - 0x3d, 0x74, 0x05, 0x1e, 0xe8, 0x39, 0x2b, 0x0c, 0x9c, 0x1e, 0x98, 0x65, 0x3f, 0xf4, 0x22, 0xcc, - 0x38, 0xfb, 0x83, 0x40, 0x14, 0x79, 0xa3, 0xb3, 0xdf, 0x0f, 0x7b, 0x0a, 0x66, 0x9d, 0x3d, 0x67, - 0x10, 0xf7, 0x78, 0x18, 0x87, 0x9c, 0x3d, 0xa7, 0x1f, 0xf8, 0x28, 0x3d, 0x70, 0xbb, 0x58, 0xd7, - 0x7c, 0xdc, 0x2c, 0x9e, 0x0c, 0xab, 0x87, 0x06, 0xd0, 0x39, 0x90, 0x75, 0x5d, 0xc5, 0x96, 0xb6, - 0x6b, 0x62, 0x55, 0x73, 0xb1, 0xa5, 0x79, 0xc5, 0xd3, 0x61, 0xe5, 0x82, 0xae, 0xd7, 0xe8, 0x68, - 0x85, 0x0e, 0xa2, 0xc7, 0x61, 0xda, 0xde, 0xbd, 0xa1, 0xb3, 0x90, 0x54, 0x1d, 0x17, 0xb7, 0x8c, - 0x17, 0x8a, 0x8f, 0x50, 0xff, 0x4e, 0x91, 0x01, 0x1a, 0x90, 0x5b, 0x54, 0x8c, 0x1e, 0x03, 0x59, - 0xf7, 0xf6, 0x34, 0xd7, 0xa1, 0x39, 0xd9, 0x73, 0x34, 0x1d, 0x17, 0x1f, 0x65, 0xaa, 0x4c, 0xbe, - 0x21, 0xc4, 0x64, 0x4b, 0x78, 0xb7, 0x8d, 0x96, 0x2f, 0x18, 0xcf, 0xb2, 0x2d, 0x41, 0x65, 0x9c, - 0x6d, 0x11, 0x64, 0xe2, 0x8a, 0xc8, 0x8b, 0x17, 0xa9, 0x5a, 0xc1, 0xd9, 0x73, 0xc2, 0xef, 0x7d, - 0x18, 0x26, 0x89, 0x66, 0xef, 0xa5, 0x8f, 0xb1, 0x86, 0xcc, 0xd9, 0x0b, 0xbd, 0xf1, 0x3d, 0xeb, - 0x8d, 0x17, 0xca, 0x90, 0x0f, 0xc7, 0x27, 0xca, 0x02, 0x8b, 0x50, 0x59, 0x22, 0xcd, 0x4a, 0x75, - 0x73, 0x85, 0xb4, 0x19, 0xcf, 0xd7, 0xe4, 0x04, 0x69, 0x77, 0xd6, 0xea, 0xdb, 0x35, 0x55, 0xd9, - 0xd9, 0xd8, 0xae, 0xaf, 0xd7, 0xe4, 0x64, 0xb8, 0xaf, 0xfe, 0x5e, 0x02, 0x0a, 0xd1, 0x23, 0x12, - 0xfa, 0x09, 0x38, 0x29, 0xee, 0x33, 0x3c, 0xec, 0xab, 0xb7, 0x0d, 0x97, 0x6e, 0x99, 0x8e, 0xc6, - 0xca, 0x57, 0xb0, 0x68, 0xb3, 0x5c, 0xab, 0x81, 0xfd, 0x67, 0x0d, 0x97, 0x6c, 0x88, 0x8e, 0xe6, - 0xa3, 0x35, 0x38, 0x6d, 0xd9, 0xaa, 0xe7, 0x6b, 0x56, 0x53, 0x73, 0x9b, 0x6a, 0xef, 0x26, 0x49, - 0xd5, 0x74, 0x1d, 0x7b, 0x9e, 0xcd, 0x4a, 0x55, 0xc0, 0xf2, 0x21, 0xcb, 0x6e, 0x70, 0xe5, 0x5e, - 0x0e, 0xaf, 0x70, 0xd5, 0xbe, 0x00, 0x4b, 0x1e, 0x16, 0x60, 0x0f, 0x42, 0xb6, 0xa3, 0x39, 0x2a, - 0xb6, 0x7c, 0x77, 0x9f, 0x36, 0xc6, 0x19, 0x25, 0xd3, 0xd1, 0x9c, 0x1a, 0x79, 0x7e, 0x7f, 0xce, - 0x27, 0xff, 0x98, 0x84, 0x7c, 0xb8, 0x39, 0x26, 0x67, 0x0d, 0x9d, 0xd6, 0x11, 0x89, 0x66, 0x9a, - 0x87, 0x8f, 0x6c, 0xa5, 0x97, 0xaa, 0xa4, 0xc0, 0x94, 0xc7, 0x59, 0xcb, 0xaa, 0x30, 0x24, 0x29, - 0xee, 0x24, 0xb7, 0x60, 0xd6, 0x22, 0x64, 0x14, 0xfe, 0x84, 0x56, 0x61, 0xfc, 0x86, 0x47, 0xb9, - 0xc7, 0x29, 0xf7, 0x23, 0x47, 0x73, 0x3f, 0xd3, 0xa0, 0xe4, 0xd9, 0x67, 0x1a, 0xea, 0xc6, 0xa6, - 0xb2, 0x5e, 0x59, 0x53, 0x38, 0x1c, 0x9d, 0x82, 0x94, 0xa9, 0xdd, 0xd9, 0x8f, 0x96, 0x22, 0x2a, - 0x1a, 0xd5, 0xf1, 0xa7, 0x20, 0x75, 0x1b, 0x6b, 0x37, 0xa3, 0x05, 0x80, 0x8a, 0xde, 0xc3, 0xd0, - 0x3f, 0x07, 0x69, 0xea, 0x2f, 0x04, 0xc0, 0x3d, 0x26, 0x8f, 0xa1, 0x0c, 0xa4, 0xaa, 0x9b, 0x0a, - 0x09, 0x7f, 0x19, 0xf2, 0x4c, 0xaa, 0x6e, 0xd5, 0x6b, 0xd5, 0x9a, 0x9c, 0x58, 0xb8, 0x08, 0xe3, - 0xcc, 0x09, 0x64, 0x6b, 0x04, 0x6e, 0x90, 0xc7, 0xf8, 0x23, 0xe7, 0x90, 0xc4, 0xe8, 0xce, 0xfa, - 0x72, 0x4d, 0x91, 0x13, 0xe1, 0xe5, 0xf5, 0x20, 0x1f, 0xee, 0x8b, 0xdf, 0x9f, 0x98, 0xfa, 0x6b, - 0x09, 0x72, 0xa1, 0x3e, 0x97, 0x34, 0x28, 0x9a, 0x69, 0xda, 0xb7, 0x55, 0xcd, 0x34, 0x34, 0x8f, - 0x07, 0x05, 0x50, 0x51, 0x85, 0x48, 0x46, 0x5d, 0xb4, 0xf7, 0xc5, 0xf8, 0x57, 0x24, 0x90, 0xfb, - 0x5b, 0xcc, 0x3e, 0x03, 0xa5, 0x0f, 0xd4, 0xc0, 0x97, 0x25, 0x28, 0x44, 0xfb, 0xca, 0x3e, 0xf3, - 0xce, 0x7c, 0xa0, 0xe6, 0xbd, 0x9e, 0x80, 0xc9, 0x48, 0x37, 0x39, 0xaa, 0x75, 0x9f, 0x85, 0x69, - 0xa3, 0x89, 0x3b, 0x8e, 0xed, 0x63, 0x4b, 0xdf, 0x57, 0x4d, 0x7c, 0x0b, 0x9b, 0xc5, 0x05, 0x9a, - 0x28, 0xce, 0x1d, 0xdd, 0xaf, 0x2e, 0xd5, 0x7b, 0xb8, 0x35, 0x02, 0x2b, 0xcf, 0xd4, 0x57, 0x6a, - 0xeb, 0x5b, 0x9b, 0xdb, 0xb5, 0x8d, 0xea, 0x75, 0x75, 0x67, 0xe3, 0xa7, 0x36, 0x36, 0x9f, 0xdd, - 0x50, 0x64, 0xa3, 0x4f, 0xed, 0x3d, 0xdc, 0xea, 0x5b, 0x20, 0xf7, 0x1b, 0x85, 0x4e, 0xc2, 0x30, - 0xb3, 0xe4, 0x31, 0x34, 0x03, 0x53, 0x1b, 0x9b, 0x6a, 0xa3, 0xbe, 0x52, 0x53, 0x6b, 0xd7, 0xae, - 0xd5, 0xaa, 0xdb, 0x0d, 0x76, 0x03, 0x11, 0x68, 0x6f, 0x47, 0x37, 0xf5, 0x4b, 0x49, 0x98, 0x19, - 0x62, 0x09, 0xaa, 0xf0, 0xb3, 0x03, 0x3b, 0xce, 0x7c, 0x74, 0x14, 0xeb, 0x97, 0x48, 0xc9, 0xdf, - 0xd2, 0x5c, 0x9f, 0x1f, 0x35, 0x1e, 0x03, 0xe2, 0x25, 0xcb, 0x37, 0x5a, 0x06, 0x76, 0xf9, 0x85, - 0x0d, 0x3b, 0x50, 0x4c, 0xf5, 0xe4, 0xec, 0xce, 0xe6, 0x23, 0x80, 0x1c, 0xdb, 0x33, 0x7c, 0xe3, - 0x16, 0x56, 0x0d, 0x4b, 0xdc, 0xee, 0x90, 0x03, 0x46, 0x4a, 0x91, 0xc5, 0x48, 0xdd, 0xf2, 0x03, - 0x6d, 0x0b, 0xb7, 0xb5, 0x3e, 0x6d, 0x92, 0xc0, 0x93, 0x8a, 0x2c, 0x46, 0x02, 0xed, 0x33, 0x90, - 0x6f, 0xda, 0x5d, 0xd2, 0x75, 0x31, 0x3d, 0x52, 0x2f, 0x24, 0x25, 0xc7, 0x64, 0x81, 0x0a, 0xef, - 0xa7, 0x7b, 0xd7, 0x4a, 0x79, 0x25, 0xc7, 0x64, 0x4c, 0xe5, 0x2c, 0x4c, 0x69, 0xed, 0xb6, 0x4b, - 0xc8, 0x05, 0x11, 0x3b, 0x21, 0x14, 0x02, 0x31, 0x55, 0x9c, 0x7b, 0x06, 0x32, 0xc2, 0x0f, 0xa4, - 0x24, 0x13, 0x4f, 0xa8, 0x0e, 0x3b, 0xf6, 0x26, 0x16, 0xb3, 0x4a, 0xc6, 0x12, 0x83, 0x67, 0x20, - 0x6f, 0x78, 0x6a, 0xef, 0x96, 0x3c, 0x31, 0x9f, 0x58, 0xcc, 0x28, 0x39, 0xc3, 0x0b, 0x6e, 0x18, - 0x17, 0x5e, 0x4d, 0x40, 0x21, 0x7a, 0xcb, 0x8f, 0x56, 0x20, 0x63, 0xda, 0xba, 0x46, 0x43, 0x8b, - 0x7d, 0x62, 0x5a, 0x8c, 0xf9, 0x30, 0xb0, 0xb4, 0xc6, 0xf5, 0x95, 0x00, 0x39, 0xf7, 0xf7, 0x12, - 0x64, 0x84, 0x18, 0x9d, 0x80, 0x94, 0xa3, 0xf9, 0x7b, 0x94, 0x2e, 0xbd, 0x9c, 0x90, 0x25, 0x85, - 0x3e, 0x13, 0xb9, 0xe7, 0x68, 0x16, 0x0d, 0x01, 0x2e, 0x27, 0xcf, 0x64, 0x5d, 0x4d, 0xac, 0x35, - 0xe9, 0xf1, 0xc3, 0xee, 0x74, 0xb0, 0xe5, 0x7b, 0x62, 0x5d, 0xb9, 0xbc, 0xca, 0xc5, 0xe8, 0x09, - 0x98, 0xf6, 0x5d, 0xcd, 0x30, 0x23, 0xba, 0x29, 0xaa, 0x2b, 0x8b, 0x81, 0x40, 0xb9, 0x0c, 0xa7, - 0x04, 0x6f, 0x13, 0xfb, 0x9a, 0xbe, 0x87, 0x9b, 0x3d, 0xd0, 0x38, 0xbd, 0x66, 0x38, 0xc9, 0x15, - 0x56, 0xf8, 0xb8, 0xc0, 0x2e, 0xfc, 0x40, 0x82, 0x69, 0x71, 0x60, 0x6a, 0x06, 0xce, 0x5a, 0x07, - 0xd0, 0x2c, 0xcb, 0xf6, 0xc3, 0xee, 0x1a, 0x0c, 0xe5, 0x01, 0xdc, 0x52, 0x25, 0x00, 0x29, 0x21, - 0x82, 0xb9, 0x0e, 0x40, 0x6f, 0xe4, 0x50, 0xb7, 0x9d, 0x86, 0x1c, 0xff, 0x84, 0x43, 0xbf, 0x03, - 0xb2, 0x23, 0x36, 0x30, 0x11, 0x39, 0x59, 0xa1, 0x59, 0x48, 0xef, 0xe2, 0xb6, 0x61, 0xf1, 0x8b, - 0x59, 0xf6, 0x20, 0x2e, 0x42, 0x52, 0xc1, 0x45, 0xc8, 0xf2, 0x67, 0x60, 0x46, 0xb7, 0x3b, 0xfd, - 0xe6, 0x2e, 0xcb, 0x7d, 0xc7, 0x7c, 0xef, 0x93, 0xd2, 0xf3, 0xd0, 0x6b, 0x31, 0xdf, 0x95, 0xa4, - 0xdf, 0x4f, 0x24, 0x57, 0xb7, 0x96, 0xbf, 0x96, 0x98, 0x5b, 0x65, 0xd0, 0x2d, 0x31, 0x53, 0x05, - 0xb7, 0x4c, 0xac, 0x13, 0xeb, 0xe1, 0x2b, 0x8b, 0xf0, 0xd1, 0xb6, 0xe1, 0xef, 0x75, 0x77, 0x97, - 0x74, 0xbb, 0x73, 0xae, 0x6d, 0xb7, 0xed, 0xde, 0xa7, 0x4f, 0xf2, 0x44, 0x1f, 0xe8, 0x2f, 0xfe, - 0xf9, 0x33, 0x1b, 0x48, 0xe7, 0x62, 0xbf, 0x95, 0x96, 0x37, 0x60, 0x86, 0x2b, 0xab, 0xf4, 0xfb, - 0x0b, 0x3b, 0x45, 0xa0, 0x23, 0xef, 0xb0, 0x8a, 0xdf, 0x78, 0x83, 0x96, 0x6b, 0x65, 0x9a, 0x43, - 0xc9, 0x18, 0x3b, 0x68, 0x94, 0x15, 0x78, 0x20, 0xc2, 0xc7, 0xb6, 0x26, 0x76, 0x63, 0x18, 0xbf, - 0xc7, 0x19, 0x67, 0x42, 0x8c, 0x0d, 0x0e, 0x2d, 0x57, 0x61, 0xf2, 0x38, 0x5c, 0x7f, 0xcb, 0xb9, - 0xf2, 0x38, 0x4c, 0xb2, 0x0a, 0x53, 0x94, 0x44, 0xef, 0x7a, 0xbe, 0xdd, 0xa1, 0x79, 0xef, 0x68, - 0x9a, 0xbf, 0x7b, 0x83, 0xed, 0x95, 0x02, 0x81, 0x55, 0x03, 0x54, 0xb9, 0x0c, 0xf4, 0x93, 0x53, - 0x13, 0xeb, 0x66, 0x0c, 0xc3, 0x6b, 0xdc, 0x90, 0x40, 0xbf, 0xfc, 0x69, 0x98, 0x25, 0xbf, 0x69, - 0x5a, 0x0a, 0x5b, 0x12, 0x7f, 0xe1, 0x55, 0xfc, 0xc1, 0x8b, 0x6c, 0x3b, 0xce, 0x04, 0x04, 0x21, - 0x9b, 0x42, 0xab, 0xd8, 0xc6, 0xbe, 0x8f, 0x5d, 0x4f, 0xd5, 0xcc, 0x61, 0xe6, 0x85, 0x6e, 0x0c, - 0x8a, 0x5f, 0x7c, 0x2b, 0xba, 0x8a, 0xab, 0x0c, 0x59, 0x31, 0xcd, 0xf2, 0x0e, 0x9c, 0x1c, 0x12, - 0x15, 0x23, 0x70, 0xbe, 0xc4, 0x39, 0x67, 0x07, 0x22, 0x83, 0xd0, 0x6e, 0x81, 0x90, 0x07, 0x6b, - 0x39, 0x02, 0xe7, 0xef, 0x70, 0x4e, 0xc4, 0xb1, 0x62, 0x49, 0x09, 0xe3, 0x33, 0x30, 0x7d, 0x0b, - 0xbb, 0xbb, 0xb6, 0xc7, 0x6f, 0x69, 0x46, 0xa0, 0x7b, 0x99, 0xd3, 0x4d, 0x71, 0x20, 0xbd, 0xb6, - 0x21, 0x5c, 0x57, 0x20, 0xd3, 0xd2, 0x74, 0x3c, 0x02, 0xc5, 0x97, 0x38, 0xc5, 0x04, 0xd1, 0x27, - 0xd0, 0x0a, 0xe4, 0xdb, 0x36, 0xaf, 0x4c, 0xf1, 0xf0, 0x57, 0x38, 0x3c, 0x27, 0x30, 0x9c, 0xc2, - 0xb1, 0x9d, 0xae, 0x49, 0xca, 0x56, 0x3c, 0xc5, 0xef, 0x0a, 0x0a, 0x81, 0xe1, 0x14, 0xc7, 0x70, - 0xeb, 0xef, 0x09, 0x0a, 0x2f, 0xe4, 0xcf, 0xa7, 0x21, 0x67, 0x5b, 0xe6, 0xbe, 0x6d, 0x8d, 0x62, - 0xc4, 0x97, 0x39, 0x03, 0x70, 0x08, 0x21, 0xb8, 0x0a, 0xd9, 0x51, 0x17, 0xe2, 0x2b, 0x6f, 0x89, - 0xed, 0x21, 0x56, 0x60, 0x15, 0xa6, 0x44, 0x82, 0x32, 0x6c, 0x6b, 0x04, 0x8a, 0x3f, 0xe0, 0x14, - 0x85, 0x10, 0x8c, 0x4f, 0xc3, 0xc7, 0x9e, 0xdf, 0xc6, 0xa3, 0x90, 0xbc, 0x2a, 0xa6, 0xc1, 0x21, - 0xdc, 0x95, 0xbb, 0xd8, 0xd2, 0xf7, 0x46, 0x63, 0xf8, 0xaa, 0x70, 0xa5, 0xc0, 0x10, 0x8a, 0x2a, - 0x4c, 0x76, 0x34, 0xd7, 0xdb, 0xd3, 0xcc, 0x91, 0x96, 0xe3, 0x0f, 0x39, 0x47, 0x3e, 0x00, 0x71, - 0x8f, 0x74, 0xad, 0xe3, 0xd0, 0x7c, 0x4d, 0x78, 0x24, 0x04, 0xe3, 0x5b, 0xcf, 0xf3, 0xe9, 0x95, - 0xd6, 0x71, 0xd8, 0xfe, 0x48, 0x6c, 0x3d, 0x86, 0x5d, 0x0f, 0x33, 0x5e, 0x85, 0xac, 0x67, 0xdc, - 0x19, 0x89, 0xe6, 0x8f, 0xc5, 0x4a, 0x53, 0x00, 0x01, 0x5f, 0x87, 0x53, 0x43, 0xcb, 0xc4, 0x08, - 0x64, 0x7f, 0xc2, 0xc9, 0x4e, 0x0c, 0x29, 0x15, 0x3c, 0x25, 0x1c, 0x97, 0xf2, 0x4f, 0x45, 0x4a, - 0xc0, 0x7d, 0x5c, 0x5b, 0xe4, 0xac, 0xe0, 0x69, 0xad, 0xe3, 0x79, 0xed, 0xcf, 0x84, 0xd7, 0x18, - 0x36, 0xe2, 0xb5, 0x6d, 0x38, 0xc1, 0x19, 0x8f, 0xb7, 0xae, 0x5f, 0x17, 0x89, 0x95, 0xa1, 0x77, - 0xa2, 0xab, 0xfb, 0x19, 0x98, 0x0b, 0xdc, 0x29, 0x9a, 0x52, 0x4f, 0xed, 0x68, 0xce, 0x08, 0xcc, - 0xdf, 0xe0, 0xcc, 0x22, 0xe3, 0x07, 0x5d, 0xad, 0xb7, 0xae, 0x39, 0x84, 0xfc, 0x39, 0x28, 0x0a, - 0xf2, 0xae, 0xe5, 0x62, 0xdd, 0x6e, 0x5b, 0xc6, 0x1d, 0xdc, 0x1c, 0x81, 0xfa, 0xcf, 0xfb, 0x96, - 0x6a, 0x27, 0x04, 0x27, 0xcc, 0x75, 0x90, 0x83, 0x5e, 0x45, 0x35, 0x3a, 0x8e, 0xed, 0xfa, 0x31, - 0x8c, 0xdf, 0x14, 0x2b, 0x15, 0xe0, 0xea, 0x14, 0x56, 0xae, 0x41, 0x81, 0x3e, 0x8e, 0x1a, 0x92, - 0x7f, 0xc1, 0x89, 0x26, 0x7b, 0x28, 0x9e, 0x38, 0x74, 0xbb, 0xe3, 0x68, 0xee, 0x28, 0xf9, 0xef, - 0x2f, 0x45, 0xe2, 0xe0, 0x10, 0x9e, 0x38, 0xfc, 0x7d, 0x07, 0x93, 0x6a, 0x3f, 0x02, 0xc3, 0xb7, - 0x44, 0xe2, 0x10, 0x18, 0x4e, 0x21, 0x1a, 0x86, 0x11, 0x28, 0xfe, 0x4a, 0x50, 0x08, 0x0c, 0xa1, - 0xf8, 0x54, 0xaf, 0xd0, 0xba, 0xb8, 0x6d, 0x78, 0xbe, 0xcb, 0x5a, 0xe1, 0xa3, 0xa9, 0xbe, 0xfd, - 0x56, 0xb4, 0x09, 0x53, 0x42, 0x50, 0x92, 0x89, 0xf8, 0x15, 0x2a, 0x3d, 0x29, 0xc5, 0x1b, 0xf6, - 0x1d, 0x91, 0x89, 0x42, 0x30, 0xb6, 0x3f, 0xa7, 0xfa, 0x7a, 0x15, 0x14, 0xf7, 0x8f, 0x30, 0xc5, - 0x9f, 0x7d, 0x87, 0x73, 0x45, 0x5b, 0x95, 0xf2, 0x1a, 0x09, 0xa0, 0x68, 0x43, 0x11, 0x4f, 0xf6, - 0xe2, 0x3b, 0x41, 0x0c, 0x45, 0xfa, 0x89, 0xf2, 0x35, 0x98, 0x8c, 0x34, 0x13, 0xf1, 0x54, 0x9f, - 0xe3, 0x54, 0xf9, 0x70, 0x2f, 0x51, 0xbe, 0x08, 0x29, 0xd2, 0x18, 0xc4, 0xc3, 0x7f, 0x8e, 0xc3, - 0xa9, 0x7a, 0xf9, 0xe3, 0x90, 0x11, 0x0d, 0x41, 0x3c, 0xf4, 0xe7, 0x39, 0x34, 0x80, 0x10, 0xb8, - 0x68, 0x06, 0xe2, 0xe1, 0xbf, 0x20, 0xe0, 0x02, 0x42, 0xe0, 0xa3, 0xbb, 0xf0, 0xbb, 0xbf, 0x94, - 0xe2, 0x09, 0x5d, 0xf8, 0xee, 0x2a, 0x4c, 0xf0, 0x2e, 0x20, 0x1e, 0xfd, 0x79, 0xfe, 0x72, 0x81, - 0x28, 0x3f, 0x05, 0xe9, 0x11, 0x1d, 0xfe, 0xcb, 0x1c, 0xca, 0xf4, 0xcb, 0x55, 0xc8, 0x85, 0x2a, - 0x7f, 0x3c, 0xfc, 0x57, 0x38, 0x3c, 0x8c, 0x22, 0xa6, 0xf3, 0xca, 0x1f, 0x4f, 0xf0, 0xab, 0xc2, - 0x74, 0x8e, 0x20, 0x6e, 0x13, 0x45, 0x3f, 0x1e, 0xfd, 0x6b, 0xc2, 0xeb, 0x02, 0x52, 0x7e, 0x1a, - 0xb2, 0x41, 0x22, 0x8f, 0xc7, 0xff, 0x3a, 0xc7, 0xf7, 0x30, 0xc4, 0x03, 0xa1, 0x42, 0x12, 0x4f, - 0xf1, 0x1b, 0xc2, 0x03, 0x21, 0x14, 0xd9, 0x46, 0xfd, 0xcd, 0x41, 0x3c, 0xd3, 0x6f, 0x8a, 0x6d, - 0xd4, 0xd7, 0x1b, 0x90, 0xd5, 0xa4, 0xf9, 0x34, 0x9e, 0xe2, 0xb7, 0xc4, 0x6a, 0x52, 0x7d, 0x62, - 0x46, 0x7f, 0xb5, 0x8d, 0xe7, 0xf8, 0x6d, 0x61, 0x46, 0x5f, 0xb1, 0x2d, 0x6f, 0x01, 0x1a, 0xac, - 0xb4, 0xf1, 0x7c, 0x5f, 0xe0, 0x7c, 0xd3, 0x03, 0x85, 0xb6, 0xfc, 0x2c, 0x9c, 0x18, 0x5e, 0x65, - 0xe3, 0x59, 0xbf, 0xf8, 0x4e, 0xdf, 0xb9, 0x28, 0x5c, 0x64, 0xcb, 0xdb, 0xbd, 0x74, 0x1d, 0xae, - 0xb0, 0xf1, 0xb4, 0x2f, 0xbd, 0x13, 0xcd, 0xd8, 0xe1, 0x02, 0x5b, 0xae, 0x00, 0xf4, 0x8a, 0x5b, - 0x3c, 0xd7, 0xcb, 0x9c, 0x2b, 0x04, 0x22, 0x5b, 0x83, 0xd7, 0xb6, 0x78, 0xfc, 0x97, 0xc4, 0xd6, - 0xe0, 0x08, 0xb2, 0x35, 0x44, 0x59, 0x8b, 0x47, 0xbf, 0x22, 0xb6, 0x86, 0x80, 0x90, 0xc8, 0x0e, - 0x55, 0x8e, 0x78, 0x86, 0x2f, 0x8b, 0xc8, 0x0e, 0xa1, 0xca, 0x57, 0x21, 0x63, 0x75, 0x4d, 0x93, - 0x04, 0x28, 0x3a, 0xfa, 0x1f, 0xc4, 0x8a, 0xff, 0x7a, 0x9f, 0x5b, 0x20, 0x00, 0xe5, 0x8b, 0x90, - 0xc6, 0x9d, 0x5d, 0xdc, 0x8c, 0x43, 0xfe, 0xdb, 0x7d, 0x91, 0x94, 0x88, 0x76, 0xf9, 0x69, 0x00, - 0x76, 0xb4, 0xa7, 0x9f, 0xad, 0x62, 0xb0, 0xff, 0x7e, 0x9f, 0xff, 0xeb, 0x46, 0x0f, 0xd2, 0x23, - 0x60, 0xff, 0x08, 0x72, 0x34, 0xc1, 0x5b, 0x51, 0x02, 0x3a, 0xeb, 0x2b, 0x30, 0x71, 0xc3, 0xb3, - 0x2d, 0x5f, 0x6b, 0xc7, 0xa1, 0xff, 0x83, 0xa3, 0x85, 0x3e, 0x71, 0x58, 0xc7, 0x76, 0xb1, 0xaf, - 0xb5, 0xbd, 0x38, 0xec, 0x7f, 0x72, 0x6c, 0x00, 0x20, 0x60, 0x5d, 0xf3, 0xfc, 0x51, 0xe6, 0xfd, - 0x23, 0x01, 0x16, 0x00, 0x62, 0x34, 0xf9, 0x7d, 0x13, 0xef, 0xc7, 0x61, 0xdf, 0x16, 0x46, 0x73, - 0xfd, 0xf2, 0xc7, 0x21, 0x4b, 0x7e, 0xb2, 0xff, 0xc7, 0x8a, 0x01, 0xff, 0x17, 0x07, 0xf7, 0x10, - 0xe4, 0xcd, 0x9e, 0xdf, 0xf4, 0x8d, 0x78, 0x67, 0xff, 0x37, 0x5f, 0x69, 0xa1, 0x5f, 0xae, 0x40, - 0xce, 0xf3, 0x9b, 0xcd, 0x2e, 0xef, 0xaf, 0x62, 0xe0, 0xff, 0x73, 0x3f, 0x38, 0x72, 0x07, 0x98, - 0xe5, 0xda, 0xf0, 0xdb, 0x43, 0x58, 0xb5, 0x57, 0x6d, 0x76, 0x6f, 0xf8, 0xfc, 0x42, 0xfc, 0x05, - 0x20, 0xfc, 0x6f, 0x0a, 0xa6, 0x82, 0x29, 0x89, 0x9b, 0xc0, 0x40, 0x30, 0x77, 0xbc, 0x3b, 0xc4, - 0x85, 0xbf, 0x49, 0x42, 0xa6, 0xaa, 0x79, 0xbe, 0x76, 0x5b, 0xdb, 0x47, 0x0e, 0xcc, 0x90, 0xdf, - 0xeb, 0x9a, 0x43, 0x6f, 0xa4, 0xf8, 0xbe, 0xe3, 0xd7, 0xb4, 0x1f, 0x59, 0xea, 0xbd, 0x55, 0x20, - 0x96, 0x86, 0xa8, 0xd3, 0xcf, 0xdb, 0xcb, 0xf2, 0x6b, 0xff, 0x74, 0x7a, 0xec, 0x17, 0xff, 0xf9, - 0x74, 0x66, 0x7d, 0xff, 0x59, 0xc3, 0xf4, 0x6c, 0x4b, 0x19, 0x46, 0x8d, 0x3e, 0x27, 0xc1, 0x83, - 0x43, 0xe4, 0x1b, 0x7c, 0x67, 0xf2, 0x8f, 0x1d, 0x17, 0x46, 0x7c, 0xb5, 0x80, 0x31, 0x13, 0xf2, - 0x91, 0xd7, 0x1f, 0xf5, 0x9a, 0xb9, 0xeb, 0x50, 0x3c, 0x6c, 0x26, 0x48, 0x86, 0xe4, 0x4d, 0xbc, - 0xcf, 0xff, 0x47, 0x8e, 0xfc, 0x44, 0x67, 0x7b, 0xff, 0x49, 0x28, 0x2d, 0xe6, 0xce, 0x4f, 0x87, - 0xac, 0xe3, 0x2f, 0x63, 0xe3, 0xe5, 0xc4, 0x65, 0x69, 0x4e, 0x83, 0xf9, 0x38, 0x4b, 0xff, 0x9f, - 0xaf, 0x58, 0x28, 0xc1, 0x38, 0x13, 0xa2, 0x59, 0x48, 0xd7, 0x2d, 0xff, 0xd2, 0x05, 0x4a, 0x95, - 0x54, 0xd8, 0xc3, 0xf2, 0xda, 0x6b, 0xf7, 0x4a, 0x63, 0xdf, 0xbf, 0x57, 0x1a, 0xfb, 0x87, 0x7b, - 0xa5, 0xb1, 0xd7, 0xef, 0x95, 0xa4, 0x37, 0xef, 0x95, 0xa4, 0xb7, 0xef, 0x95, 0xa4, 0x77, 0xef, - 0x95, 0xa4, 0xbb, 0x07, 0x25, 0xe9, 0xab, 0x07, 0x25, 0xe9, 0xeb, 0x07, 0x25, 0xe9, 0xdb, 0x07, - 0x25, 0xe9, 0xbb, 0x07, 0x25, 0xe9, 0xb5, 0x83, 0xd2, 0xd8, 0xf7, 0x0f, 0x4a, 0x63, 0xaf, 0x1f, - 0x94, 0xa4, 0x37, 0x0f, 0x4a, 0x63, 0x6f, 0x1f, 0x94, 0xa4, 0x77, 0x0f, 0x4a, 0x63, 0x77, 0x7f, - 0x58, 0x1a, 0xfb, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x20, 0xe0, 0xa1, 0x9a, 0x33, 0x00, - 0x00, + // 4004 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xdc, 0xd6, + 0x75, 0x26, 0xf6, 0x87, 0xdc, 0x3d, 0xbb, 0x5c, 0x82, 0x20, 0x2d, 0xad, 0xe8, 0x64, 0x45, 0xd1, + 0x76, 0x44, 0xdb, 0x09, 0x95, 0x91, 0x25, 0x59, 0x5a, 0x35, 0x71, 0x97, 0xcb, 0x15, 0xb3, 0x2e, + 0xff, 0x82, 0x25, 0x63, 0xcb, 0x99, 0x0e, 0x06, 0xc4, 0xde, 0x5d, 0x42, 0xc2, 0x02, 0x08, 0x80, + 0x95, 0x4c, 0x4d, 0x1f, 0xd4, 0x71, 0xda, 0x4e, 0xda, 0xe9, 0x7f, 0x67, 0x9a, 0xb8, 0x8e, 0xdb, + 0xa4, 0xd3, 0x38, 0x4d, 0xff, 0x92, 0xa6, 0x4d, 0x93, 0xf4, 0x25, 0x7d, 0x48, 0xeb, 0xa7, 0x4e, + 0xf2, 0xd6, 0x87, 0x4e, 0x6b, 0x31, 0x9e, 0xa9, 0xdb, 0xba, 0x8d, 0xdb, 0xea, 0xc1, 0x33, 0x9e, + 0xce, 0x74, 0xee, 0x1f, 0x16, 0xc0, 0x2e, 0x09, 0x30, 0x1d, 0x3b, 0x4f, 0x24, 0xce, 0x3d, 0xdf, + 0x87, 0x73, 0xcf, 0x3d, 0xf7, 0x9c, 0x73, 0x2f, 0x16, 0x7e, 0x78, 0x05, 0xe6, 0xbb, 0x96, 0xd5, + 0x35, 0xd0, 0x39, 0xdb, 0xb1, 0x3c, 0x6b, 0xb7, 0xdf, 0x39, 0xd7, 0x46, 0xae, 0xe6, 0xe8, 0xb6, + 0x67, 0x39, 0x4b, 0x44, 0x26, 0x4d, 0x51, 0x8d, 0x25, 0xae, 0xb1, 0xb0, 0x0e, 0xd3, 0xd7, 0x74, + 0x03, 0xad, 0xf8, 0x8a, 0x2d, 0xe4, 0x49, 0x97, 0x21, 0xd3, 0xd1, 0x0d, 0x54, 0x16, 0xe6, 0xd3, + 0x8b, 0x85, 0xf3, 0x0f, 0x2f, 0x45, 0x40, 0x4b, 0x61, 0xc4, 0x16, 0x16, 0xcb, 0x04, 0xb1, 0xf0, + 0x7a, 0x06, 0x66, 0x46, 0x8c, 0x4a, 0x12, 0x64, 0x4c, 0xb5, 0x87, 0x19, 0x85, 0xc5, 0xbc, 0x4c, + 0xfe, 0x97, 0xca, 0x30, 0x61, 0xab, 0xda, 0x4d, 0xb5, 0x8b, 0xca, 0x29, 0x22, 0xe6, 0x8f, 0x52, + 0x05, 0xa0, 0x8d, 0x6c, 0x64, 0xb6, 0x91, 0xa9, 0xed, 0x97, 0xd3, 0xf3, 0xe9, 0xc5, 0xbc, 0x1c, + 0x90, 0x48, 0x8f, 0xc3, 0xb4, 0xdd, 0xdf, 0x35, 0x74, 0x4d, 0x09, 0xa8, 0xc1, 0x7c, 0x7a, 0x31, + 0x2b, 0x8b, 0x74, 0x60, 0x65, 0xa0, 0x7c, 0x16, 0xa6, 0x6e, 0x23, 0xf5, 0x66, 0x50, 0xb5, 0x40, + 0x54, 0x4b, 0x58, 0x1c, 0x50, 0xac, 0x43, 0xb1, 0x87, 0x5c, 0x57, 0xed, 0x22, 0xc5, 0xdb, 0xb7, + 0x51, 0x39, 0x43, 0x66, 0x3f, 0x3f, 0x34, 0xfb, 0xe8, 0xcc, 0x0b, 0x0c, 0xb5, 0xbd, 0x6f, 0x23, + 0xa9, 0x06, 0x79, 0x64, 0xf6, 0x7b, 0x94, 0x21, 0x7b, 0x88, 0xff, 0x1a, 0x66, 0xbf, 0x17, 0x65, + 0xc9, 0x61, 0x18, 0xa3, 0x98, 0x70, 0x91, 0x73, 0x4b, 0xd7, 0x50, 0x79, 0x9c, 0x10, 0x9c, 0x1d, + 0x22, 0x68, 0xd1, 0xf1, 0x28, 0x07, 0xc7, 0x49, 0x75, 0xc8, 0xa3, 0xe7, 0x3d, 0x64, 0xba, 0xba, + 0x65, 0x96, 0x27, 0x08, 0xc9, 0x23, 0x23, 0x56, 0x11, 0x19, 0xed, 0x28, 0xc5, 0x00, 0x27, 0x5d, + 0x82, 0x09, 0xcb, 0xf6, 0x74, 0xcb, 0x74, 0xcb, 0xb9, 0x79, 0x61, 0xb1, 0x70, 0xfe, 0x7d, 0x23, + 0x03, 0x61, 0x93, 0xea, 0xc8, 0x5c, 0x59, 0x6a, 0x82, 0xe8, 0x5a, 0x7d, 0x47, 0x43, 0x8a, 0x66, + 0xb5, 0x91, 0xa2, 0x9b, 0x1d, 0xab, 0x9c, 0x27, 0x04, 0xa7, 0x87, 0x27, 0x42, 0x14, 0xeb, 0x56, + 0x1b, 0x35, 0xcd, 0x8e, 0x25, 0x97, 0xdc, 0xd0, 0xb3, 0x74, 0x02, 0xc6, 0xdd, 0x7d, 0xd3, 0x53, + 0x9f, 0x2f, 0x17, 0x49, 0x84, 0xb0, 0xa7, 0x85, 0x6f, 0x8d, 0xc3, 0x54, 0x92, 0x10, 0xbb, 0x0a, + 0xd9, 0x0e, 0x9e, 0x65, 0x39, 0x75, 0x1c, 0x1f, 0x50, 0x4c, 0xd8, 0x89, 0xe3, 0x3f, 0xa2, 0x13, + 0x6b, 0x50, 0x30, 0x91, 0xeb, 0xa1, 0x36, 0x8d, 0x88, 0x74, 0xc2, 0x98, 0x02, 0x0a, 0x1a, 0x0e, + 0xa9, 0xcc, 0x8f, 0x14, 0x52, 0xcf, 0xc2, 0x94, 0x6f, 0x92, 0xe2, 0xa8, 0x66, 0x97, 0xc7, 0xe6, + 0xb9, 0x38, 0x4b, 0x96, 0x1a, 0x1c, 0x27, 0x63, 0x98, 0x5c, 0x42, 0xa1, 0x67, 0x69, 0x05, 0xc0, + 0x32, 0x91, 0xd5, 0x51, 0xda, 0x48, 0x33, 0xca, 0xb9, 0x43, 0xbc, 0xb4, 0x89, 0x55, 0x86, 0xbc, + 0x64, 0x51, 0xa9, 0x66, 0x48, 0x57, 0x06, 0xa1, 0x36, 0x71, 0x48, 0xa4, 0xac, 0xd3, 0x4d, 0x36, + 0x14, 0x6d, 0x3b, 0x50, 0x72, 0x10, 0x8e, 0x7b, 0xd4, 0x66, 0x33, 0xcb, 0x13, 0x23, 0x96, 0x62, + 0x67, 0x26, 0x33, 0x18, 0x9d, 0xd8, 0xa4, 0x13, 0x7c, 0x94, 0x1e, 0x02, 0x5f, 0xa0, 0x90, 0xb0, + 0x02, 0x92, 0x85, 0x8a, 0x5c, 0xb8, 0xa1, 0xf6, 0xd0, 0xdc, 0x1d, 0x28, 0x85, 0xdd, 0x23, 0xcd, + 0x42, 0xd6, 0xf5, 0x54, 0xc7, 0x23, 0x51, 0x98, 0x95, 0xe9, 0x83, 0x24, 0x42, 0x1a, 0x99, 0x6d, + 0x92, 0xe5, 0xb2, 0x32, 0xfe, 0x57, 0xfa, 0xc9, 0xc1, 0x84, 0xd3, 0x64, 0xc2, 0x1f, 0x18, 0x5e, + 0xd1, 0x10, 0x73, 0x74, 0xde, 0x73, 0x4f, 0xc2, 0x64, 0x68, 0x02, 0x49, 0x5f, 0xbd, 0xf0, 0x33, + 0xf0, 0xc0, 0x48, 0x6a, 0xe9, 0x59, 0x98, 0xed, 0x9b, 0xba, 0xe9, 0x21, 0xc7, 0x76, 0x10, 0x8e, + 0x58, 0xfa, 0xaa, 0xf2, 0xbf, 0x4c, 0x1c, 0x12, 0x73, 0x3b, 0x41, 0x6d, 0xca, 0x22, 0xcf, 0xf4, + 0x87, 0x85, 0x8f, 0xe5, 0x73, 0x6f, 0x4c, 0x88, 0x77, 0xef, 0xde, 0xbd, 0x9b, 0x5a, 0xf8, 0xec, + 0x38, 0xcc, 0x8e, 0xda, 0x33, 0x23, 0xb7, 0xef, 0x09, 0x18, 0x37, 0xfb, 0xbd, 0x5d, 0xe4, 0x10, + 0x27, 0x65, 0x65, 0xf6, 0x24, 0xd5, 0x20, 0x6b, 0xa8, 0xbb, 0xc8, 0x28, 0x67, 0xe6, 0x85, 0xc5, + 0xd2, 0xf9, 0xc7, 0x13, 0xed, 0xca, 0xa5, 0x35, 0x0c, 0x91, 0x29, 0x52, 0xfa, 0x28, 0x64, 0x58, + 0x8a, 0xc6, 0x0c, 0x8f, 0x25, 0x63, 0xc0, 0x7b, 0x49, 0x26, 0x38, 0xe9, 0x41, 0xc8, 0xe3, 0xbf, + 0x34, 0x36, 0xc6, 0x89, 0xcd, 0x39, 0x2c, 0xc0, 0x71, 0x21, 0xcd, 0x41, 0x8e, 0x6c, 0x93, 0x36, + 0xe2, 0xa5, 0xcd, 0x7f, 0xc6, 0x81, 0xd5, 0x46, 0x1d, 0xb5, 0x6f, 0x78, 0xca, 0x2d, 0xd5, 0xe8, + 0x23, 0x12, 0xf0, 0x79, 0xb9, 0xc8, 0x84, 0x9f, 0xc0, 0x32, 0xe9, 0x34, 0x14, 0xe8, 0xae, 0xd2, + 0xcd, 0x36, 0x7a, 0x9e, 0x64, 0xcf, 0xac, 0x4c, 0x37, 0x5a, 0x13, 0x4b, 0xf0, 0xeb, 0x6f, 0xb8, + 0x96, 0xc9, 0x43, 0x93, 0xbc, 0x02, 0x0b, 0xc8, 0xeb, 0x9f, 0x8c, 0x26, 0xee, 0xf7, 0x8f, 0x9e, + 0x5e, 0x34, 0xa6, 0x16, 0xbe, 0x91, 0x82, 0x0c, 0xc9, 0x17, 0x53, 0x50, 0xd8, 0xbe, 0xbe, 0xd5, + 0x50, 0x56, 0x36, 0x77, 0x96, 0xd7, 0x1a, 0xa2, 0x20, 0x95, 0x00, 0x88, 0xe0, 0xda, 0xda, 0x66, + 0x6d, 0x5b, 0x4c, 0xf9, 0xcf, 0xcd, 0x8d, 0xed, 0x4b, 0x17, 0xc4, 0xb4, 0x0f, 0xd8, 0xa1, 0x82, + 0x4c, 0x50, 0xe1, 0x89, 0xf3, 0x62, 0x56, 0x12, 0xa1, 0x48, 0x09, 0x9a, 0xcf, 0x36, 0x56, 0x2e, + 0x5d, 0x10, 0xc7, 0xc3, 0x92, 0x27, 0xce, 0x8b, 0x13, 0xd2, 0x24, 0xe4, 0x89, 0x64, 0x79, 0x73, + 0x73, 0x4d, 0xcc, 0xf9, 0x9c, 0xad, 0x6d, 0xb9, 0xb9, 0xb1, 0x2a, 0xe6, 0x7d, 0xce, 0x55, 0x79, + 0x73, 0x67, 0x4b, 0x04, 0x9f, 0x61, 0xbd, 0xd1, 0x6a, 0xd5, 0x56, 0x1b, 0x62, 0xc1, 0xd7, 0x58, + 0xbe, 0xbe, 0xdd, 0x68, 0x89, 0xc5, 0x90, 0x59, 0x4f, 0x9c, 0x17, 0x27, 0xfd, 0x57, 0x34, 0x36, + 0x76, 0xd6, 0xc5, 0x92, 0x34, 0x0d, 0x93, 0xf4, 0x15, 0xdc, 0x88, 0xa9, 0x88, 0xe8, 0xd2, 0x05, + 0x51, 0x1c, 0x18, 0x42, 0x59, 0xa6, 0x43, 0x82, 0x4b, 0x17, 0x44, 0x69, 0xa1, 0x0e, 0x59, 0x12, + 0x5d, 0x92, 0x04, 0xa5, 0xb5, 0xda, 0x72, 0x63, 0x4d, 0xd9, 0xdc, 0xda, 0x6e, 0x6e, 0x6e, 0xd4, + 0xd6, 0x44, 0x61, 0x20, 0x93, 0x1b, 0x1f, 0xdf, 0x69, 0xca, 0x8d, 0x15, 0x31, 0x15, 0x94, 0x6d, + 0x35, 0x6a, 0xdb, 0x8d, 0x15, 0x31, 0xbd, 0xa0, 0xc1, 0xec, 0xa8, 0x3c, 0x39, 0x72, 0x67, 0x04, + 0x96, 0x38, 0x75, 0xc8, 0x12, 0x13, 0xae, 0xa1, 0x25, 0xfe, 0x41, 0x0a, 0x66, 0x46, 0xd4, 0x8a, + 0x91, 0x2f, 0x79, 0x0a, 0xb2, 0x34, 0x44, 0x69, 0xf5, 0x7c, 0x74, 0x64, 0xd1, 0x21, 0x01, 0x3b, + 0x54, 0x41, 0x09, 0x2e, 0xd8, 0x41, 0xa4, 0x0f, 0xe9, 0x20, 0x30, 0xc5, 0x50, 0x4e, 0xff, 0xe9, + 0xa1, 0x9c, 0x4e, 0xcb, 0xde, 0xa5, 0x24, 0x65, 0x8f, 0xc8, 0x8e, 0x97, 0xdb, 0xb3, 0x23, 0x72, + 0xfb, 0x55, 0x98, 0x1e, 0x22, 0x4a, 0x9c, 0x63, 0x5f, 0x10, 0xa0, 0x7c, 0x98, 0x73, 0x62, 0x32, + 0x5d, 0x2a, 0x94, 0xe9, 0xae, 0x46, 0x3d, 0x78, 0xe6, 0xf0, 0x45, 0x18, 0x5a, 0xeb, 0x57, 0x04, + 0x38, 0x31, 0xba, 0x53, 0x1c, 0x69, 0xc3, 0x47, 0x61, 0xbc, 0x87, 0xbc, 0x3d, 0x8b, 0x77, 0x4b, + 0x1f, 0x18, 0x51, 0x83, 0xf1, 0x70, 0x74, 0xb1, 0x19, 0x2a, 0x58, 0xc4, 0xd3, 0x87, 0xb5, 0x7b, + 0xd4, 0x9a, 0x21, 0x4b, 0x3f, 0x93, 0x82, 0x07, 0x46, 0x92, 0x8f, 0x34, 0xf4, 0xfd, 0x00, 0xba, + 0x69, 0xf7, 0x3d, 0xda, 0x11, 0xd1, 0x04, 0x9b, 0x27, 0x12, 0x92, 0xbc, 0x70, 0xf2, 0xec, 0x7b, + 0xfe, 0x78, 0x9a, 0x8c, 0x03, 0x15, 0x11, 0x85, 0xcb, 0x03, 0x43, 0x33, 0xc4, 0xd0, 0xca, 0x21, + 0x33, 0x1d, 0x0a, 0xcc, 0x0f, 0x83, 0xa8, 0x19, 0x3a, 0x32, 0x3d, 0xc5, 0xf5, 0x1c, 0xa4, 0xf6, + 0x74, 0xb3, 0x4b, 0x2a, 0x48, 0xae, 0x9a, 0xed, 0xa8, 0x86, 0x8b, 0xe4, 0x29, 0x3a, 0xdc, 0xe2, + 0xa3, 0x18, 0x41, 0x02, 0xc8, 0x09, 0x20, 0xc6, 0x43, 0x08, 0x3a, 0xec, 0x23, 0x16, 0xbe, 0x9e, + 0x83, 0x42, 0xa0, 0xaf, 0x96, 0xce, 0x40, 0xf1, 0x86, 0x7a, 0x4b, 0x55, 0xf8, 0x59, 0x89, 0x7a, + 0xa2, 0x80, 0x65, 0x5b, 0xec, 0xbc, 0xf4, 0x61, 0x98, 0x25, 0x2a, 0x56, 0xdf, 0x43, 0x8e, 0xa2, + 0x19, 0xaa, 0xeb, 0x12, 0xa7, 0xe5, 0x88, 0xaa, 0x84, 0xc7, 0x36, 0xf1, 0x50, 0x9d, 0x8f, 0x48, + 0x17, 0x61, 0x86, 0x20, 0x7a, 0x7d, 0xc3, 0xd3, 0x6d, 0x03, 0x29, 0xf8, 0xf4, 0xe6, 0x92, 0x4a, + 0xe2, 0x5b, 0x36, 0x8d, 0x35, 0xd6, 0x99, 0x02, 0xb6, 0xc8, 0x95, 0x56, 0xe0, 0xfd, 0x04, 0xd6, + 0x45, 0x26, 0x72, 0x54, 0x0f, 0x29, 0xe8, 0x53, 0x7d, 0xd5, 0x70, 0x15, 0xd5, 0x6c, 0x2b, 0x7b, + 0xaa, 0xbb, 0x57, 0x9e, 0xc5, 0x04, 0xcb, 0xa9, 0xb2, 0x20, 0x9f, 0xc2, 0x8a, 0xab, 0x4c, 0xaf, + 0x41, 0xd4, 0x6a, 0x66, 0xfb, 0x63, 0xaa, 0xbb, 0x27, 0x55, 0xe1, 0x04, 0x61, 0x71, 0x3d, 0x47, + 0x37, 0xbb, 0x8a, 0xb6, 0x87, 0xb4, 0x9b, 0x4a, 0xdf, 0xeb, 0x5c, 0x2e, 0x3f, 0x18, 0x7c, 0x3f, + 0xb1, 0xb0, 0x45, 0x74, 0xea, 0x58, 0x65, 0xc7, 0xeb, 0x5c, 0x96, 0x5a, 0x50, 0xc4, 0x8b, 0xd1, + 0xd3, 0xef, 0x20, 0xa5, 0x63, 0x39, 0xa4, 0x34, 0x96, 0x46, 0xa4, 0xa6, 0x80, 0x07, 0x97, 0x36, + 0x19, 0x60, 0xdd, 0x6a, 0xa3, 0x6a, 0xb6, 0xb5, 0xd5, 0x68, 0xac, 0xc8, 0x05, 0xce, 0x72, 0xcd, + 0x72, 0x70, 0x40, 0x75, 0x2d, 0xdf, 0xc1, 0x05, 0x1a, 0x50, 0x5d, 0x8b, 0xbb, 0xf7, 0x22, 0xcc, + 0x68, 0x1a, 0x9d, 0xb3, 0xae, 0x29, 0xec, 0x8c, 0xe5, 0x96, 0xc5, 0x90, 0xb3, 0x34, 0x6d, 0x95, + 0x2a, 0xb0, 0x18, 0x77, 0xa5, 0x2b, 0xf0, 0xc0, 0xc0, 0x59, 0x41, 0xe0, 0xf4, 0xd0, 0x2c, 0xa3, + 0xd0, 0x8b, 0x30, 0x63, 0xef, 0x0f, 0x03, 0xa5, 0xd0, 0x1b, 0xed, 0xfd, 0x28, 0xec, 0x49, 0x98, + 0xb5, 0xf7, 0xec, 0x61, 0xdc, 0x63, 0x41, 0x9c, 0x64, 0xef, 0xd9, 0x51, 0xe0, 0x23, 0xe4, 0xc0, + 0xed, 0x20, 0x4d, 0xf5, 0x50, 0xbb, 0x7c, 0x32, 0xa8, 0x1e, 0x18, 0x90, 0xce, 0x81, 0xa8, 0x69, + 0x0a, 0x32, 0xd5, 0x5d, 0x03, 0x29, 0xaa, 0x83, 0x4c, 0xd5, 0x2d, 0x9f, 0x0e, 0x2a, 0x97, 0x34, + 0xad, 0x41, 0x46, 0x6b, 0x64, 0x50, 0x7a, 0x0c, 0xa6, 0xad, 0xdd, 0x1b, 0x1a, 0x0d, 0x49, 0xc5, + 0x76, 0x50, 0x47, 0x7f, 0xbe, 0xfc, 0x30, 0xf1, 0xef, 0x14, 0x1e, 0x20, 0x01, 0xb9, 0x45, 0xc4, + 0xd2, 0xa3, 0x20, 0x6a, 0xee, 0x9e, 0xea, 0xd8, 0x24, 0x27, 0xbb, 0xb6, 0xaa, 0xa1, 0xf2, 0x23, + 0x54, 0x95, 0xca, 0x37, 0xb8, 0x18, 0x6f, 0x09, 0xf7, 0xb6, 0xde, 0xf1, 0x38, 0xe3, 0x59, 0xba, + 0x25, 0x88, 0x8c, 0xb1, 0x2d, 0x82, 0x88, 0x5d, 0x11, 0x7a, 0xf1, 0x22, 0x51, 0x2b, 0xd9, 0x7b, + 0x76, 0xf0, 0xbd, 0x0f, 0xc1, 0x24, 0xd6, 0x1c, 0xbc, 0xf4, 0x51, 0xda, 0x90, 0xd9, 0x7b, 0x81, + 0x37, 0xbe, 0x6b, 0xbd, 0xf1, 0x42, 0x15, 0x8a, 0xc1, 0xf8, 0x94, 0xf2, 0x40, 0x23, 0x54, 0x14, + 0x70, 0xb3, 0x52, 0xdf, 0x5c, 0xc1, 0x6d, 0xc6, 0x73, 0x0d, 0x31, 0x85, 0xdb, 0x9d, 0xb5, 0xe6, + 0x76, 0x43, 0x91, 0x77, 0x36, 0xb6, 0x9b, 0xeb, 0x0d, 0x31, 0x1d, 0xec, 0xab, 0xbf, 0x9b, 0x82, + 0x52, 0xf8, 0x88, 0x24, 0xfd, 0x04, 0x9c, 0xe4, 0xf7, 0x19, 0x2e, 0xf2, 0x94, 0xdb, 0xba, 0x43, + 0xb6, 0x4c, 0x4f, 0xa5, 0xe5, 0xcb, 0x5f, 0xb4, 0x59, 0xa6, 0xd5, 0x42, 0xde, 0x33, 0xba, 0x83, + 0x37, 0x44, 0x4f, 0xf5, 0xa4, 0x35, 0x38, 0x6d, 0x5a, 0x8a, 0xeb, 0xa9, 0x66, 0x5b, 0x75, 0xda, + 0xca, 0xe0, 0x26, 0x49, 0x51, 0x35, 0x0d, 0xb9, 0xae, 0x45, 0x4b, 0x95, 0xcf, 0xf2, 0x3e, 0xd3, + 0x6a, 0x31, 0xe5, 0x41, 0x0e, 0xaf, 0x31, 0xd5, 0x48, 0x80, 0xa5, 0x0f, 0x0b, 0xb0, 0x07, 0x21, + 0xdf, 0x53, 0x6d, 0x05, 0x99, 0x9e, 0xb3, 0x4f, 0x1a, 0xe3, 0x9c, 0x9c, 0xeb, 0xa9, 0x76, 0x03, + 0x3f, 0xbf, 0x37, 0xe7, 0x93, 0x7f, 0x4c, 0x43, 0x31, 0xd8, 0x1c, 0xe3, 0xb3, 0x86, 0x46, 0xea, + 0x88, 0x40, 0x32, 0xcd, 0x43, 0x47, 0xb6, 0xd2, 0x4b, 0x75, 0x5c, 0x60, 0xaa, 0xe3, 0xb4, 0x65, + 0x95, 0x29, 0x12, 0x17, 0x77, 0x9c, 0x5b, 0x10, 0x6d, 0x11, 0x72, 0x32, 0x7b, 0x92, 0x56, 0x61, + 0xfc, 0x86, 0x4b, 0xb8, 0xc7, 0x09, 0xf7, 0xc3, 0x47, 0x73, 0x3f, 0xdd, 0x22, 0xe4, 0xf9, 0xa7, + 0x5b, 0xca, 0xc6, 0xa6, 0xbc, 0x5e, 0x5b, 0x93, 0x19, 0x5c, 0x3a, 0x05, 0x19, 0x43, 0xbd, 0xb3, + 0x1f, 0x2e, 0x45, 0x44, 0x94, 0xd4, 0xf1, 0xa7, 0x20, 0x73, 0x1b, 0xa9, 0x37, 0xc3, 0x05, 0x80, + 0x88, 0xde, 0xc5, 0xd0, 0x3f, 0x07, 0x59, 0xe2, 0x2f, 0x09, 0x80, 0x79, 0x4c, 0x1c, 0x93, 0x72, + 0x90, 0xa9, 0x6f, 0xca, 0x38, 0xfc, 0x45, 0x28, 0x52, 0xa9, 0xb2, 0xd5, 0x6c, 0xd4, 0x1b, 0x62, + 0x6a, 0xe1, 0x22, 0x8c, 0x53, 0x27, 0xe0, 0xad, 0xe1, 0xbb, 0x41, 0x1c, 0x63, 0x8f, 0x8c, 0x43, + 0xe0, 0xa3, 0x3b, 0xeb, 0xcb, 0x0d, 0x59, 0x4c, 0x05, 0x97, 0xd7, 0x85, 0x62, 0xb0, 0x2f, 0x7e, + 0x6f, 0x62, 0xea, 0xdb, 0x02, 0x14, 0x02, 0x7d, 0x2e, 0x6e, 0x50, 0x54, 0xc3, 0xb0, 0x6e, 0x2b, + 0xaa, 0xa1, 0xab, 0x2e, 0x0b, 0x0a, 0x20, 0xa2, 0x1a, 0x96, 0x24, 0x5d, 0xb4, 0xf7, 0xc4, 0xf8, + 0x97, 0x05, 0x10, 0xa3, 0x2d, 0x66, 0xc4, 0x40, 0xe1, 0xc7, 0x6a, 0xe0, 0x4b, 0x02, 0x94, 0xc2, + 0x7d, 0x65, 0xc4, 0xbc, 0x33, 0x3f, 0x56, 0xf3, 0x5e, 0x4b, 0xc1, 0x64, 0xa8, 0x9b, 0x4c, 0x6a, + 0xdd, 0xa7, 0x60, 0x5a, 0x6f, 0xa3, 0x9e, 0x6d, 0x79, 0xc8, 0xd4, 0xf6, 0x15, 0x03, 0xdd, 0x42, + 0x46, 0x79, 0x81, 0x24, 0x8a, 0x73, 0x47, 0xf7, 0xab, 0x4b, 0xcd, 0x01, 0x6e, 0x0d, 0xc3, 0xaa, + 0x33, 0xcd, 0x95, 0xc6, 0xfa, 0xd6, 0xe6, 0x76, 0x63, 0xa3, 0x7e, 0x5d, 0xd9, 0xd9, 0xf8, 0xa9, + 0x8d, 0xcd, 0x67, 0x36, 0x64, 0x51, 0x8f, 0xa8, 0xbd, 0x8b, 0x5b, 0x7d, 0x0b, 0xc4, 0xa8, 0x51, + 0xd2, 0x49, 0x18, 0x65, 0x96, 0x38, 0x26, 0xcd, 0xc0, 0xd4, 0xc6, 0xa6, 0xd2, 0x6a, 0xae, 0x34, + 0x94, 0xc6, 0xb5, 0x6b, 0x8d, 0xfa, 0x76, 0x8b, 0xde, 0x40, 0xf8, 0xda, 0xdb, 0xe1, 0x4d, 0xfd, + 0x62, 0x1a, 0x66, 0x46, 0x58, 0x22, 0xd5, 0xd8, 0xd9, 0x81, 0x1e, 0x67, 0x3e, 0x94, 0xc4, 0xfa, + 0x25, 0x5c, 0xf2, 0xb7, 0x54, 0xc7, 0x63, 0x47, 0x8d, 0x47, 0x01, 0x7b, 0xc9, 0xf4, 0xf4, 0x8e, + 0x8e, 0x1c, 0x76, 0x61, 0x43, 0x0f, 0x14, 0x53, 0x03, 0x39, 0xbd, 0xb3, 0xf9, 0x20, 0x48, 0xb6, + 0xe5, 0xea, 0x9e, 0x7e, 0x0b, 0x29, 0xba, 0xc9, 0x6f, 0x77, 0xf0, 0x01, 0x23, 0x23, 0x8b, 0x7c, + 0xa4, 0x69, 0x7a, 0xbe, 0xb6, 0x89, 0xba, 0x6a, 0x44, 0x1b, 0x27, 0xf0, 0xb4, 0x2c, 0xf2, 0x11, + 0x5f, 0xfb, 0x0c, 0x14, 0xdb, 0x56, 0x1f, 0x77, 0x5d, 0x54, 0x0f, 0xd7, 0x0b, 0x41, 0x2e, 0x50, + 0x99, 0xaf, 0xc2, 0xfa, 0xe9, 0xc1, 0xb5, 0x52, 0x51, 0x2e, 0x50, 0x19, 0x55, 0x39, 0x0b, 0x53, + 0x6a, 0xb7, 0xeb, 0x60, 0x72, 0x4e, 0x44, 0x4f, 0x08, 0x25, 0x5f, 0x4c, 0x14, 0xe7, 0x9e, 0x86, + 0x1c, 0xf7, 0x03, 0x2e, 0xc9, 0xd8, 0x13, 0x8a, 0x4d, 0x8f, 0xbd, 0xa9, 0xc5, 0xbc, 0x9c, 0x33, + 0xf9, 0xe0, 0x19, 0x28, 0xea, 0xae, 0x32, 0xb8, 0x25, 0x4f, 0xcd, 0xa7, 0x16, 0x73, 0x72, 0x41, + 0x77, 0xfd, 0x1b, 0xc6, 0x85, 0x57, 0x52, 0x50, 0x0a, 0xdf, 0xf2, 0x4b, 0x2b, 0x90, 0x33, 0x2c, + 0x4d, 0x25, 0xa1, 0x45, 0x3f, 0x31, 0x2d, 0xc6, 0x7c, 0x18, 0x58, 0x5a, 0x63, 0xfa, 0xb2, 0x8f, + 0x9c, 0xfb, 0x7b, 0x01, 0x72, 0x5c, 0x2c, 0x9d, 0x80, 0x8c, 0xad, 0x7a, 0x7b, 0x84, 0x2e, 0xbb, + 0x9c, 0x12, 0x05, 0x99, 0x3c, 0x63, 0xb9, 0x6b, 0xab, 0x26, 0x09, 0x01, 0x26, 0xc7, 0xcf, 0x78, + 0x5d, 0x0d, 0xa4, 0xb6, 0xc9, 0xf1, 0xc3, 0xea, 0xf5, 0x90, 0xe9, 0xb9, 0x7c, 0x5d, 0x99, 0xbc, + 0xce, 0xc4, 0xd2, 0xe3, 0x30, 0xed, 0x39, 0xaa, 0x6e, 0x84, 0x74, 0x33, 0x44, 0x57, 0xe4, 0x03, + 0xbe, 0x72, 0x15, 0x4e, 0x71, 0xde, 0x36, 0xf2, 0x54, 0x6d, 0x0f, 0xb5, 0x07, 0xa0, 0x71, 0x72, + 0xcd, 0x70, 0x92, 0x29, 0xac, 0xb0, 0x71, 0x8e, 0x5d, 0xf8, 0xbe, 0x00, 0xd3, 0xfc, 0xc0, 0xd4, + 0xf6, 0x9d, 0xb5, 0x0e, 0xa0, 0x9a, 0xa6, 0xe5, 0x05, 0xdd, 0x35, 0x1c, 0xca, 0x43, 0xb8, 0xa5, + 0x9a, 0x0f, 0x92, 0x03, 0x04, 0x73, 0x3d, 0x80, 0xc1, 0xc8, 0xa1, 0x6e, 0x3b, 0x0d, 0x05, 0xf6, + 0x09, 0x87, 0x7c, 0x07, 0xa4, 0x47, 0x6c, 0xa0, 0x22, 0x7c, 0xb2, 0x92, 0x66, 0x21, 0xbb, 0x8b, + 0xba, 0xba, 0xc9, 0x2e, 0x66, 0xe9, 0x03, 0xbf, 0x08, 0xc9, 0xf8, 0x17, 0x21, 0xcb, 0x9f, 0x84, + 0x19, 0xcd, 0xea, 0x45, 0xcd, 0x5d, 0x16, 0x23, 0xc7, 0x7c, 0xf7, 0x63, 0xc2, 0x73, 0x30, 0x68, + 0x31, 0xdf, 0x16, 0x84, 0x2f, 0xa6, 0xd2, 0xab, 0x5b, 0xcb, 0x5f, 0x49, 0xcd, 0xad, 0x52, 0xe8, + 0x16, 0x9f, 0xa9, 0x8c, 0x3a, 0x06, 0xd2, 0xb0, 0xf5, 0xf0, 0xa5, 0xc7, 0xe1, 0x43, 0x5d, 0xdd, + 0xdb, 0xeb, 0xef, 0x2e, 0x69, 0x56, 0xef, 0x5c, 0xd7, 0xea, 0x5a, 0x83, 0x4f, 0x9f, 0xf8, 0x89, + 0x3c, 0x90, 0xff, 0xd8, 0xe7, 0xcf, 0xbc, 0x2f, 0x9d, 0x8b, 0xfd, 0x56, 0x5a, 0xdd, 0x80, 0x19, + 0xa6, 0xac, 0x90, 0xef, 0x2f, 0xf4, 0x14, 0x21, 0x1d, 0x79, 0x87, 0x55, 0xfe, 0xda, 0xeb, 0xa4, + 0x5c, 0xcb, 0xd3, 0x0c, 0x8a, 0xc7, 0xe8, 0x41, 0xa3, 0x2a, 0xc3, 0x03, 0x21, 0x3e, 0xba, 0x35, + 0x91, 0x13, 0xc3, 0xf8, 0x5d, 0xc6, 0x38, 0x13, 0x60, 0x6c, 0x31, 0x68, 0xb5, 0x0e, 0x93, 0xc7, + 0xe1, 0xfa, 0x5b, 0xc6, 0x55, 0x44, 0x41, 0x92, 0x55, 0x98, 0x22, 0x24, 0x5a, 0xdf, 0xf5, 0xac, + 0x1e, 0xc9, 0x7b, 0x47, 0xd3, 0xfc, 0xdd, 0xeb, 0x74, 0xaf, 0x94, 0x30, 0xac, 0xee, 0xa3, 0xaa, + 0x55, 0x20, 0x9f, 0x9c, 0xda, 0x48, 0x33, 0x62, 0x18, 0x5e, 0x65, 0x86, 0xf8, 0xfa, 0xd5, 0x4f, + 0xc0, 0x2c, 0xfe, 0x9f, 0xa4, 0xa5, 0xa0, 0x25, 0xf1, 0x17, 0x5e, 0xe5, 0xef, 0xbf, 0x40, 0xb7, + 0xe3, 0x8c, 0x4f, 0x10, 0xb0, 0x29, 0xb0, 0x8a, 0x5d, 0xe4, 0x79, 0xc8, 0x71, 0x15, 0xd5, 0x18, + 0x65, 0x5e, 0xe0, 0xc6, 0xa0, 0xfc, 0xb9, 0x37, 0xc3, 0xab, 0xb8, 0x4a, 0x91, 0x35, 0xc3, 0xa8, + 0xee, 0xc0, 0xc9, 0x11, 0x51, 0x91, 0x80, 0xf3, 0x45, 0xc6, 0x39, 0x3b, 0x14, 0x19, 0x98, 0x76, + 0x0b, 0xb8, 0xdc, 0x5f, 0xcb, 0x04, 0x9c, 0xbf, 0xc3, 0x38, 0x25, 0x86, 0xe5, 0x4b, 0x8a, 0x19, + 0x9f, 0x86, 0xe9, 0x5b, 0xc8, 0xd9, 0xb5, 0x5c, 0x76, 0x4b, 0x93, 0x80, 0xee, 0x25, 0x46, 0x37, + 0xc5, 0x80, 0xe4, 0xda, 0x06, 0x73, 0x5d, 0x81, 0x5c, 0x47, 0xd5, 0x50, 0x02, 0x8a, 0xcf, 0x33, + 0x8a, 0x09, 0xac, 0x8f, 0xa1, 0x35, 0x28, 0x76, 0x2d, 0x56, 0x99, 0xe2, 0xe1, 0x2f, 0x33, 0x78, + 0x81, 0x63, 0x18, 0x85, 0x6d, 0xd9, 0x7d, 0x03, 0x97, 0xad, 0x78, 0x8a, 0xdf, 0xe5, 0x14, 0x1c, + 0xc3, 0x28, 0x8e, 0xe1, 0xd6, 0xdf, 0xe3, 0x14, 0x6e, 0xc0, 0x9f, 0x4f, 0x41, 0xc1, 0x32, 0x8d, + 0x7d, 0xcb, 0x4c, 0x62, 0xc4, 0x17, 0x18, 0x03, 0x30, 0x08, 0x26, 0xb8, 0x0a, 0xf9, 0xa4, 0x0b, + 0xf1, 0x07, 0x6f, 0xf2, 0xed, 0xc1, 0x57, 0x60, 0x15, 0xa6, 0x78, 0x82, 0xd2, 0x2d, 0x33, 0x01, + 0xc5, 0x97, 0x18, 0x45, 0x29, 0x00, 0x63, 0xd3, 0xf0, 0x90, 0xeb, 0x75, 0x51, 0x12, 0x92, 0x57, + 0xf8, 0x34, 0x18, 0x84, 0xb9, 0x72, 0x17, 0x99, 0xda, 0x5e, 0x32, 0x86, 0x2f, 0x73, 0x57, 0x72, + 0x0c, 0xa6, 0xa8, 0xc3, 0x64, 0x4f, 0x75, 0xdc, 0x3d, 0xd5, 0x48, 0xb4, 0x1c, 0x7f, 0xc8, 0x38, + 0x8a, 0x3e, 0x88, 0x79, 0xa4, 0x6f, 0x1e, 0x87, 0xe6, 0x2b, 0xdc, 0x23, 0x01, 0x18, 0xdb, 0x7a, + 0xae, 0x47, 0xae, 0xb4, 0x8e, 0xc3, 0xf6, 0x47, 0x7c, 0xeb, 0x51, 0xec, 0x7a, 0x90, 0xf1, 0x2a, + 0xe4, 0x5d, 0xfd, 0x4e, 0x22, 0x9a, 0x3f, 0xe6, 0x2b, 0x4d, 0x00, 0x18, 0x7c, 0x1d, 0x4e, 0x8d, + 0x2c, 0x13, 0x09, 0xc8, 0xfe, 0x84, 0x91, 0x9d, 0x18, 0x51, 0x2a, 0x58, 0x4a, 0x38, 0x2e, 0xe5, + 0x9f, 0xf2, 0x94, 0x80, 0x22, 0x5c, 0x5b, 0xf8, 0xac, 0xe0, 0xaa, 0x9d, 0xe3, 0x79, 0xed, 0xcf, + 0xb8, 0xd7, 0x28, 0x36, 0xe4, 0xb5, 0x6d, 0x38, 0xc1, 0x18, 0x8f, 0xb7, 0xae, 0x5f, 0xe5, 0x89, + 0x95, 0xa2, 0x77, 0xc2, 0xab, 0xfb, 0x49, 0x98, 0xf3, 0xdd, 0xc9, 0x9b, 0x52, 0x57, 0xe9, 0xa9, + 0x76, 0x02, 0xe6, 0xaf, 0x31, 0x66, 0x9e, 0xf1, 0xfd, 0xae, 0xd6, 0x5d, 0x57, 0x6d, 0x4c, 0xfe, + 0x2c, 0x94, 0x39, 0x79, 0xdf, 0x74, 0x90, 0x66, 0x75, 0x4d, 0xfd, 0x0e, 0x6a, 0x27, 0xa0, 0xfe, + 0xf3, 0xc8, 0x52, 0xed, 0x04, 0xe0, 0x98, 0xb9, 0x09, 0xa2, 0xdf, 0xab, 0x28, 0x7a, 0xcf, 0xb6, + 0x1c, 0x2f, 0x86, 0xf1, 0xeb, 0x7c, 0xa5, 0x7c, 0x5c, 0x93, 0xc0, 0xaa, 0x0d, 0x28, 0x91, 0xc7, + 0xa4, 0x21, 0xf9, 0x17, 0x8c, 0x68, 0x72, 0x80, 0x62, 0x89, 0x43, 0xb3, 0x7a, 0xb6, 0xea, 0x24, + 0xc9, 0x7f, 0x7f, 0xc9, 0x13, 0x07, 0x83, 0xb0, 0xc4, 0xe1, 0xed, 0xdb, 0x08, 0x57, 0xfb, 0x04, + 0x0c, 0xdf, 0xe0, 0x89, 0x83, 0x63, 0x18, 0x05, 0x6f, 0x18, 0x12, 0x50, 0xfc, 0x15, 0xa7, 0xe0, + 0x18, 0x4c, 0xf1, 0xf1, 0x41, 0xa1, 0x75, 0x50, 0x57, 0x77, 0x3d, 0x87, 0xb6, 0xc2, 0x47, 0x53, + 0x7d, 0xf3, 0xcd, 0x70, 0x13, 0x26, 0x07, 0xa0, 0x38, 0x13, 0xb1, 0x2b, 0x54, 0x72, 0x52, 0x8a, + 0x37, 0xec, 0x5b, 0x3c, 0x13, 0x05, 0x60, 0xd8, 0xb6, 0x40, 0x87, 0x88, 0xdd, 0xae, 0xe1, 0xf3, + 0x41, 0x02, 0xba, 0x6f, 0x47, 0x8c, 0x6b, 0x71, 0x2c, 0xe6, 0x0c, 0xf4, 0x3f, 0x7d, 0xf3, 0x26, + 0xda, 0x4f, 0x14, 0x9d, 0x7f, 0x1d, 0xe9, 0x7f, 0x76, 0x28, 0x92, 0xe6, 0x90, 0xa9, 0x48, 0x3f, + 0x25, 0xc5, 0xfd, 0x58, 0xa7, 0xfc, 0xb3, 0xf7, 0xd9, 0x7c, 0xc3, 0xed, 0x54, 0x75, 0x0d, 0x07, + 0x79, 0xb8, 0xe9, 0x89, 0x27, 0x7b, 0xe1, 0xbe, 0x1f, 0xe7, 0xa1, 0x9e, 0xa7, 0x7a, 0x0d, 0x26, + 0x43, 0x0d, 0x4f, 0x3c, 0xd5, 0xa7, 0x19, 0x55, 0x31, 0xd8, 0xef, 0x54, 0x2f, 0x42, 0x06, 0x37, + 0x2f, 0xf1, 0xf0, 0x9f, 0x63, 0x70, 0xa2, 0x5e, 0xfd, 0x08, 0xe4, 0x78, 0xd3, 0x12, 0x0f, 0xfd, + 0x79, 0x06, 0xf5, 0x21, 0x18, 0xce, 0x1b, 0x96, 0x78, 0xf8, 0x2f, 0x70, 0x38, 0x87, 0x60, 0x78, + 0x72, 0x17, 0x7e, 0xe7, 0x97, 0x32, 0xac, 0xe8, 0x70, 0xdf, 0x5d, 0x85, 0x09, 0xd6, 0xa9, 0xc4, + 0xa3, 0x3f, 0xc3, 0x5e, 0xce, 0x11, 0xd5, 0x27, 0x21, 0x9b, 0xd0, 0xe1, 0xbf, 0xcc, 0xa0, 0x54, + 0xbf, 0x5a, 0x87, 0x42, 0xa0, 0x3b, 0x89, 0x87, 0xff, 0x0a, 0x83, 0x07, 0x51, 0xd8, 0x74, 0xd6, + 0x9d, 0xc4, 0x13, 0xfc, 0x2a, 0x37, 0x9d, 0x21, 0xb0, 0xdb, 0x78, 0x63, 0x12, 0x8f, 0xfe, 0x35, + 0xee, 0x75, 0x0e, 0xa9, 0x3e, 0x05, 0x79, 0xbf, 0xd8, 0xc4, 0xe3, 0x7f, 0x9d, 0xe1, 0x07, 0x18, + 0xec, 0x81, 0x40, 0xb1, 0x8b, 0xa7, 0xf8, 0x0d, 0xee, 0x81, 0x00, 0x0a, 0x6f, 0xa3, 0x68, 0x03, + 0x13, 0xcf, 0xf4, 0x9b, 0x7c, 0x1b, 0x45, 0xfa, 0x17, 0xbc, 0x9a, 0x24, 0xe7, 0xc7, 0x53, 0xfc, + 0x16, 0x5f, 0x4d, 0xa2, 0x8f, 0xcd, 0x88, 0x76, 0x04, 0xf1, 0x1c, 0xbf, 0xcd, 0xcd, 0x88, 0x34, + 0x04, 0xd5, 0x2d, 0x90, 0x86, 0xbb, 0x81, 0x78, 0xbe, 0xcf, 0x32, 0xbe, 0xe9, 0xa1, 0x66, 0xa0, + 0xfa, 0x0c, 0x9c, 0x18, 0xdd, 0x09, 0xc4, 0xb3, 0x7e, 0xee, 0x7e, 0xe4, 0xec, 0x16, 0x6c, 0x04, + 0xaa, 0xdb, 0x83, 0x92, 0x12, 0xec, 0x02, 0xe2, 0x69, 0x5f, 0xbc, 0x1f, 0x4e, 0xdc, 0xc1, 0x26, + 0xa0, 0x5a, 0x03, 0x18, 0x14, 0xe0, 0x78, 0xae, 0x97, 0x18, 0x57, 0x00, 0x84, 0xb7, 0x06, 0xab, + 0xbf, 0xf1, 0xf8, 0xcf, 0xf3, 0xad, 0xc1, 0x10, 0x78, 0x6b, 0xf0, 0xd2, 0x1b, 0x8f, 0x7e, 0x99, + 0x6f, 0x0d, 0x0e, 0xc1, 0x91, 0x1d, 0xa8, 0x6e, 0xf1, 0x0c, 0x5f, 0xe0, 0x91, 0x1d, 0x40, 0x55, + 0x37, 0x60, 0x7a, 0xa8, 0x20, 0xc6, 0x53, 0x7d, 0x91, 0x51, 0x89, 0xd1, 0x7a, 0x18, 0x2c, 0x5e, + 0xac, 0x18, 0xc6, 0xb3, 0xfd, 0x7e, 0xa4, 0x78, 0xb1, 0x5a, 0x58, 0xbd, 0x0a, 0x39, 0xb3, 0x6f, + 0x18, 0x78, 0xf3, 0x48, 0x47, 0xff, 0xc0, 0xae, 0xfc, 0xaf, 0xef, 0x30, 0xef, 0x70, 0x40, 0xf5, + 0x22, 0x64, 0x51, 0x6f, 0x17, 0xb5, 0xe3, 0x90, 0xff, 0xf6, 0x0e, 0x4f, 0x98, 0x58, 0xbb, 0xfa, + 0x14, 0x00, 0xbd, 0x1a, 0x21, 0x9f, 0xfd, 0x62, 0xb0, 0xff, 0xfe, 0x0e, 0xfb, 0xe9, 0xcb, 0x00, + 0x32, 0x20, 0xa0, 0x3f, 0xa4, 0x39, 0x9a, 0xe0, 0xcd, 0x30, 0x01, 0x59, 0x91, 0x2b, 0x30, 0x71, + 0xc3, 0xb5, 0x4c, 0x4f, 0xed, 0xc6, 0xa1, 0xff, 0x83, 0xa1, 0xb9, 0x3e, 0x76, 0x58, 0xcf, 0x72, + 0x90, 0xa7, 0x76, 0xdd, 0x38, 0xec, 0x7f, 0x32, 0xac, 0x0f, 0xc0, 0x60, 0x4d, 0x75, 0xbd, 0x24, + 0xf3, 0xfe, 0x21, 0x07, 0x73, 0x00, 0x36, 0x1a, 0xff, 0x7f, 0x13, 0xed, 0xc7, 0x61, 0xdf, 0xe2, + 0x46, 0x33, 0xfd, 0xea, 0x47, 0x20, 0x8f, 0xff, 0xa5, 0xbf, 0x67, 0x8b, 0x01, 0xff, 0x17, 0x03, + 0x0f, 0x10, 0xf8, 0xcd, 0xae, 0xd7, 0xf6, 0xf4, 0x78, 0x67, 0xff, 0x37, 0x5b, 0x69, 0xae, 0x5f, + 0xad, 0x41, 0xc1, 0xf5, 0xda, 0xed, 0x3e, 0xeb, 0x4f, 0x63, 0xe0, 0xff, 0xf3, 0x8e, 0x7f, 0x65, + 0xe1, 0x63, 0xf0, 0x6a, 0xdf, 0xbe, 0xe9, 0xd9, 0x16, 0xf9, 0xcc, 0x11, 0xc7, 0x70, 0x9f, 0x31, + 0x04, 0x20, 0xcb, 0x8d, 0xd1, 0xd7, 0xb7, 0xb0, 0x6a, 0xad, 0x5a, 0xf4, 0xe2, 0xf6, 0xb9, 0x85, + 0xf8, 0x1b, 0x58, 0xf8, 0xdf, 0x0c, 0x4c, 0xf9, 0x3e, 0xe1, 0x57, 0xb1, 0xbe, 0x60, 0xee, 0x78, + 0x97, 0xb8, 0x0b, 0x7f, 0x93, 0x86, 0x5c, 0x5d, 0x75, 0x3d, 0xf5, 0xb6, 0xba, 0x2f, 0xd9, 0x30, + 0x83, 0xff, 0x5f, 0x57, 0x6d, 0x72, 0x25, 0xc8, 0xf6, 0x2e, 0xbb, 0x27, 0xff, 0xe0, 0xd2, 0xe0, + 0xad, 0x1c, 0xb1, 0x34, 0x42, 0x9d, 0xfc, 0xbe, 0x60, 0x59, 0x7c, 0xf5, 0x9f, 0x4e, 0x8f, 0xfd, + 0xe2, 0x3f, 0x9f, 0xce, 0xad, 0xef, 0x3f, 0xa3, 0x1b, 0xae, 0x65, 0xca, 0xa3, 0xa8, 0xa5, 0x4f, + 0x0b, 0xf0, 0xe0, 0x08, 0xf9, 0x06, 0xdb, 0xda, 0xec, 0x6b, 0xd3, 0x85, 0x84, 0xaf, 0xe6, 0x30, + 0x6a, 0x42, 0x31, 0xf4, 0xfa, 0xa3, 0x5e, 0x33, 0x77, 0x1d, 0xca, 0x87, 0xcd, 0x44, 0x12, 0x21, + 0x7d, 0x13, 0xed, 0xb3, 0x1f, 0x29, 0xe2, 0x7f, 0xa5, 0xb3, 0x83, 0x9f, 0x72, 0x0a, 0x8b, 0x85, + 0xf3, 0xd3, 0x01, 0xeb, 0xd8, 0xcb, 0xe8, 0x78, 0x35, 0x75, 0x59, 0x98, 0x53, 0x61, 0x3e, 0xce, + 0xd2, 0xff, 0xe7, 0x2b, 0x16, 0x2a, 0x30, 0x4e, 0x85, 0xd2, 0x2c, 0x64, 0x9b, 0xa6, 0x77, 0xe9, + 0x02, 0xa1, 0x4a, 0xcb, 0xf4, 0x61, 0x79, 0xed, 0xd5, 0x7b, 0x95, 0xb1, 0xef, 0xdd, 0xab, 0x8c, + 0xfd, 0xc3, 0xbd, 0xca, 0xd8, 0x6b, 0xf7, 0x2a, 0xc2, 0x1b, 0xf7, 0x2a, 0xc2, 0x5b, 0xf7, 0x2a, + 0xc2, 0xdb, 0xf7, 0x2a, 0xc2, 0xdd, 0x83, 0x8a, 0xf0, 0xe5, 0x83, 0x8a, 0xf0, 0xd5, 0x83, 0x8a, + 0xf0, 0xcd, 0x83, 0x8a, 0xf0, 0x9d, 0x83, 0x8a, 0xf0, 0xea, 0x41, 0x65, 0xec, 0x7b, 0x07, 0x95, + 0xb1, 0xd7, 0x0e, 0x2a, 0xc2, 0x1b, 0x07, 0x95, 0xb1, 0xb7, 0x0e, 0x2a, 0xc2, 0xdb, 0x07, 0x95, + 0xb1, 0xbb, 0x3f, 0xa8, 0x8c, 0xfd, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x42, 0x03, 0x05, 0x0d, + 0x1b, 0x35, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -757,6 +762,9 @@ return dAtA } func (m *Castaway) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.CastMapValueMessage) > 0 { @@ -788,6 +796,9 @@ } func (m *Wilson) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/combos/both/castvalue.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/combos/both/castvalue.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/combos/both/castvalue.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/combos/both/castvalue.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -125,253 +125,258 @@ func CastvalueDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3930 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0x1b, 0xd7, - 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0x79, 0x49, 0x4b, 0x10, 0x15, 0x43, 0x12, 0x6d, - 0x47, 0xb4, 0x9d, 0x90, 0x19, 0x59, 0x92, 0x25, 0xa8, 0x89, 0x0b, 0x82, 0x10, 0x03, 0x97, 0x7f, - 0x59, 0x90, 0xb1, 0xe5, 0x4c, 0x67, 0x67, 0xb9, 0xb8, 0x00, 0x57, 0x5a, 0xec, 0x6e, 0x76, 0x17, - 0x92, 0xa9, 0xe9, 0x83, 0x3a, 0x4e, 0xdb, 0x71, 0x3b, 0xfd, 0xef, 0x4c, 0x13, 0xd7, 0x71, 0x9b, - 0xce, 0xa4, 0x4e, 0xd3, 0xbf, 0xa4, 0x69, 0xd3, 0xa4, 0x4f, 0xe9, 0x43, 0x5a, 0x3f, 0x75, 0x92, - 0xb7, 0x3e, 0x74, 0x5a, 0x8b, 0xf1, 0x4c, 0xdd, 0xd6, 0x6d, 0xdc, 0xd6, 0x0f, 0x9e, 0xf1, 0x4b, - 0xe7, 0xfe, 0x2d, 0x76, 0x01, 0x90, 0x0b, 0x26, 0x63, 0xe7, 0x89, 0xd8, 0x73, 0xcf, 0xf7, 0xed, - 0xb9, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0x77, 0x09, 0x3f, 0xbc, 0x0a, 0x67, 0xdb, 0xb6, 0xdd, 0x36, - 0xf1, 0x92, 0xe3, 0xda, 0xbe, 0xbd, 0xdb, 0x6d, 0x2d, 0x35, 0xb1, 0xa7, 0xbb, 0x86, 0xe3, 0xdb, - 0xee, 0x22, 0x95, 0xa1, 0x29, 0xa6, 0xb1, 0x28, 0x34, 0xe6, 0xd7, 0x61, 0xfa, 0xba, 0x61, 0xe2, - 0x95, 0x40, 0xb1, 0x81, 0x7d, 0x74, 0x05, 0x52, 0x2d, 0xc3, 0xc4, 0x45, 0xe9, 0x6c, 0x72, 0x21, - 0x77, 0xe1, 0xe1, 0xc5, 0x3e, 0xd0, 0x62, 0x14, 0xb1, 0x45, 0xc4, 0x0a, 0x45, 0xcc, 0xbf, 0x91, - 0x82, 0x99, 0x21, 0xa3, 0x08, 0x41, 0xca, 0xd2, 0x3a, 0x84, 0x51, 0x5a, 0xc8, 0x2a, 0xf4, 0x37, - 0x2a, 0xc2, 0x84, 0xa3, 0xe9, 0xb7, 0xb4, 0x36, 0x2e, 0x26, 0xa8, 0x58, 0x3c, 0xa2, 0x12, 0x40, - 0x13, 0x3b, 0xd8, 0x6a, 0x62, 0x4b, 0xdf, 0x2f, 0x26, 0xcf, 0x26, 0x17, 0xb2, 0x4a, 0x48, 0x82, - 0x1e, 0x87, 0x69, 0xa7, 0xbb, 0x6b, 0x1a, 0xba, 0x1a, 0x52, 0x83, 0xb3, 0xc9, 0x85, 0xb4, 0x22, - 0xb3, 0x81, 0x95, 0x9e, 0xf2, 0x79, 0x98, 0xba, 0x83, 0xb5, 0x5b, 0x61, 0xd5, 0x1c, 0x55, 0x2d, - 0x10, 0x71, 0x48, 0xb1, 0x0a, 0xf9, 0x0e, 0xf6, 0x3c, 0xad, 0x8d, 0x55, 0x7f, 0xdf, 0xc1, 0xc5, - 0x14, 0x9d, 0xfd, 0xd9, 0x81, 0xd9, 0xf7, 0xcf, 0x3c, 0xc7, 0x51, 0xdb, 0xfb, 0x0e, 0x46, 0x15, - 0xc8, 0x62, 0xab, 0xdb, 0x61, 0x0c, 0xe9, 0x43, 0xfc, 0x57, 0xb3, 0xba, 0x9d, 0x7e, 0x96, 0x0c, - 0x81, 0x71, 0x8a, 0x09, 0x0f, 0xbb, 0xb7, 0x0d, 0x1d, 0x17, 0xc7, 0x29, 0xc1, 0xf9, 0x01, 0x82, - 0x06, 0x1b, 0xef, 0xe7, 0x10, 0x38, 0x54, 0x85, 0x2c, 0x7e, 0xde, 0xc7, 0x96, 0x67, 0xd8, 0x56, - 0x71, 0x82, 0x92, 0x3c, 0x32, 0x64, 0x15, 0xb1, 0xd9, 0xec, 0xa7, 0xe8, 0xe1, 0xd0, 0x65, 0x98, - 0xb0, 0x1d, 0xdf, 0xb0, 0x2d, 0xaf, 0x98, 0x39, 0x2b, 0x2d, 0xe4, 0x2e, 0x7c, 0x68, 0x68, 0x20, - 0x6c, 0x32, 0x1d, 0x45, 0x28, 0xa3, 0x3a, 0xc8, 0x9e, 0xdd, 0x75, 0x75, 0xac, 0xea, 0x76, 0x13, - 0xab, 0x86, 0xd5, 0xb2, 0x8b, 0x59, 0x4a, 0x70, 0x66, 0x70, 0x22, 0x54, 0xb1, 0x6a, 0x37, 0x71, - 0xdd, 0x6a, 0xd9, 0x4a, 0xc1, 0x8b, 0x3c, 0xa3, 0x13, 0x30, 0xee, 0xed, 0x5b, 0xbe, 0xf6, 0x7c, - 0x31, 0x4f, 0x23, 0x84, 0x3f, 0xcd, 0x7f, 0x7b, 0x1c, 0xa6, 0x46, 0x09, 0xb1, 0x6b, 0x90, 0x6e, - 0x91, 0x59, 0x16, 0x13, 0xc7, 0xf1, 0x01, 0xc3, 0x44, 0x9d, 0x38, 0xfe, 0x23, 0x3a, 0xb1, 0x02, - 0x39, 0x0b, 0x7b, 0x3e, 0x6e, 0xb2, 0x88, 0x48, 0x8e, 0x18, 0x53, 0xc0, 0x40, 0x83, 0x21, 0x95, - 0xfa, 0x91, 0x42, 0xea, 0x59, 0x98, 0x0a, 0x4c, 0x52, 0x5d, 0xcd, 0x6a, 0x8b, 0xd8, 0x5c, 0x8a, - 0xb3, 0x64, 0xb1, 0x26, 0x70, 0x0a, 0x81, 0x29, 0x05, 0x1c, 0x79, 0x46, 0x2b, 0x00, 0xb6, 0x85, - 0xed, 0x96, 0xda, 0xc4, 0xba, 0x59, 0xcc, 0x1c, 0xe2, 0xa5, 0x4d, 0xa2, 0x32, 0xe0, 0x25, 0x9b, - 0x49, 0x75, 0x13, 0x5d, 0xed, 0x85, 0xda, 0xc4, 0x21, 0x91, 0xb2, 0xce, 0x36, 0xd9, 0x40, 0xb4, - 0xed, 0x40, 0xc1, 0xc5, 0x24, 0xee, 0x71, 0x93, 0xcf, 0x2c, 0x4b, 0x8d, 0x58, 0x8c, 0x9d, 0x99, - 0xc2, 0x61, 0x6c, 0x62, 0x93, 0x6e, 0xf8, 0x11, 0x3d, 0x04, 0x81, 0x40, 0xa5, 0x61, 0x05, 0x34, - 0x0b, 0xe5, 0x85, 0x70, 0x43, 0xeb, 0xe0, 0xb9, 0xbb, 0x50, 0x88, 0xba, 0x07, 0xcd, 0x42, 0xda, - 0xf3, 0x35, 0xd7, 0xa7, 0x51, 0x98, 0x56, 0xd8, 0x03, 0x92, 0x21, 0x89, 0xad, 0x26, 0xcd, 0x72, - 0x69, 0x85, 0xfc, 0x44, 0x3f, 0xdd, 0x9b, 0x70, 0x92, 0x4e, 0xf8, 0xc3, 0x83, 0x2b, 0x1a, 0x61, - 0xee, 0x9f, 0xf7, 0xdc, 0x93, 0x30, 0x19, 0x99, 0xc0, 0xa8, 0xaf, 0x9e, 0xff, 0x39, 0x78, 0x60, - 0x28, 0x35, 0x7a, 0x16, 0x66, 0xbb, 0x96, 0x61, 0xf9, 0xd8, 0x75, 0x5c, 0x4c, 0x22, 0x96, 0xbd, - 0xaa, 0xf8, 0x6f, 0x13, 0x87, 0xc4, 0xdc, 0x4e, 0x58, 0x9b, 0xb1, 0x28, 0x33, 0xdd, 0x41, 0xe1, - 0x63, 0xd9, 0xcc, 0x9b, 0x13, 0xf2, 0xbd, 0x7b, 0xf7, 0xee, 0x25, 0xe6, 0x3f, 0x3f, 0x0e, 0xb3, - 0xc3, 0xf6, 0xcc, 0xd0, 0xed, 0x7b, 0x02, 0xc6, 0xad, 0x6e, 0x67, 0x17, 0xbb, 0xd4, 0x49, 0x69, - 0x85, 0x3f, 0xa1, 0x0a, 0xa4, 0x4d, 0x6d, 0x17, 0x9b, 0xc5, 0xd4, 0x59, 0x69, 0xa1, 0x70, 0xe1, - 0xf1, 0x91, 0x76, 0xe5, 0xe2, 0x1a, 0x81, 0x28, 0x0c, 0x89, 0x3e, 0x01, 0x29, 0x9e, 0xa2, 0x09, - 0xc3, 0x63, 0xa3, 0x31, 0x90, 0xbd, 0xa4, 0x50, 0x1c, 0x3a, 0x0d, 0x59, 0xf2, 0x97, 0xc5, 0xc6, - 0x38, 0xb5, 0x39, 0x43, 0x04, 0x24, 0x2e, 0xd0, 0x1c, 0x64, 0xe8, 0x36, 0x69, 0x62, 0x51, 0xda, - 0x82, 0x67, 0x12, 0x58, 0x4d, 0xdc, 0xd2, 0xba, 0xa6, 0xaf, 0xde, 0xd6, 0xcc, 0x2e, 0xa6, 0x01, - 0x9f, 0x55, 0xf2, 0x5c, 0xf8, 0x69, 0x22, 0x43, 0x67, 0x20, 0xc7, 0x76, 0x95, 0x61, 0x35, 0xf1, - 0xf3, 0x34, 0x7b, 0xa6, 0x15, 0xb6, 0xd1, 0xea, 0x44, 0x42, 0x5e, 0x7f, 0xd3, 0xb3, 0x2d, 0x11, - 0x9a, 0xf4, 0x15, 0x44, 0x40, 0x5f, 0xff, 0x64, 0x7f, 0xe2, 0x7e, 0x70, 0xf8, 0xf4, 0xfa, 0x63, - 0x6a, 0xfe, 0x9b, 0x09, 0x48, 0xd1, 0x7c, 0x31, 0x05, 0xb9, 0xed, 0x1b, 0x5b, 0x35, 0x75, 0x65, - 0x73, 0x67, 0x79, 0xad, 0x26, 0x4b, 0xa8, 0x00, 0x40, 0x05, 0xd7, 0xd7, 0x36, 0x2b, 0xdb, 0x72, - 0x22, 0x78, 0xae, 0x6f, 0x6c, 0x5f, 0xbe, 0x28, 0x27, 0x03, 0xc0, 0x0e, 0x13, 0xa4, 0xc2, 0x0a, - 0x4f, 0x5c, 0x90, 0xd3, 0x48, 0x86, 0x3c, 0x23, 0xa8, 0x3f, 0x5b, 0x5b, 0xb9, 0x7c, 0x51, 0x1e, - 0x8f, 0x4a, 0x9e, 0xb8, 0x20, 0x4f, 0xa0, 0x49, 0xc8, 0x52, 0xc9, 0xf2, 0xe6, 0xe6, 0x9a, 0x9c, - 0x09, 0x38, 0x1b, 0xdb, 0x4a, 0x7d, 0x63, 0x55, 0xce, 0x06, 0x9c, 0xab, 0xca, 0xe6, 0xce, 0x96, - 0x0c, 0x01, 0xc3, 0x7a, 0xad, 0xd1, 0xa8, 0xac, 0xd6, 0xe4, 0x5c, 0xa0, 0xb1, 0x7c, 0x63, 0xbb, - 0xd6, 0x90, 0xf3, 0x11, 0xb3, 0x9e, 0xb8, 0x20, 0x4f, 0x06, 0xaf, 0xa8, 0x6d, 0xec, 0xac, 0xcb, - 0x05, 0x34, 0x0d, 0x93, 0xec, 0x15, 0xc2, 0x88, 0xa9, 0x3e, 0xd1, 0xe5, 0x8b, 0xb2, 0xdc, 0x33, - 0x84, 0xb1, 0x4c, 0x47, 0x04, 0x97, 0x2f, 0xca, 0x68, 0xbe, 0x0a, 0x69, 0x1a, 0x5d, 0x08, 0x41, - 0x61, 0xad, 0xb2, 0x5c, 0x5b, 0x53, 0x37, 0xb7, 0xb6, 0xeb, 0x9b, 0x1b, 0x95, 0x35, 0x59, 0xea, - 0xc9, 0x94, 0xda, 0xa7, 0x76, 0xea, 0x4a, 0x6d, 0x45, 0x4e, 0x84, 0x65, 0x5b, 0xb5, 0xca, 0x76, - 0x6d, 0x45, 0x4e, 0xce, 0xeb, 0x30, 0x3b, 0x2c, 0x4f, 0x0e, 0xdd, 0x19, 0xa1, 0x25, 0x4e, 0x1c, - 0xb2, 0xc4, 0x94, 0x6b, 0x60, 0x89, 0x7f, 0x90, 0x80, 0x99, 0x21, 0xb5, 0x62, 0xe8, 0x4b, 0x9e, - 0x82, 0x34, 0x0b, 0x51, 0x56, 0x3d, 0x1f, 0x1d, 0x5a, 0x74, 0x68, 0xc0, 0x0e, 0x54, 0x50, 0x8a, - 0x0b, 0x77, 0x10, 0xc9, 0x43, 0x3a, 0x08, 0x42, 0x31, 0x90, 0xd3, 0x7f, 0x76, 0x20, 0xa7, 0xb3, - 0xb2, 0x77, 0x79, 0x94, 0xb2, 0x47, 0x65, 0xc7, 0xcb, 0xed, 0xe9, 0x21, 0xb9, 0xfd, 0x1a, 0x4c, - 0x0f, 0x10, 0x8d, 0x9c, 0x63, 0x5f, 0x90, 0xa0, 0x78, 0x98, 0x73, 0x62, 0x32, 0x5d, 0x22, 0x92, - 0xe9, 0xae, 0xf5, 0x7b, 0xf0, 0xdc, 0xe1, 0x8b, 0x30, 0xb0, 0xd6, 0xaf, 0x4a, 0x70, 0x62, 0x78, - 0xa7, 0x38, 0xd4, 0x86, 0x4f, 0xc0, 0x78, 0x07, 0xfb, 0x7b, 0xb6, 0xe8, 0x96, 0x3e, 0x3c, 0xa4, - 0x06, 0x93, 0xe1, 0xfe, 0xc5, 0xe6, 0xa8, 0x70, 0x11, 0x4f, 0x1e, 0xd6, 0xee, 0x31, 0x6b, 0x06, - 0x2c, 0x7d, 0x31, 0x01, 0x0f, 0x0c, 0x25, 0x1f, 0x6a, 0xe8, 0x83, 0x00, 0x86, 0xe5, 0x74, 0x7d, - 0xd6, 0x11, 0xb1, 0x04, 0x9b, 0xa5, 0x12, 0x9a, 0xbc, 0x48, 0xf2, 0xec, 0xfa, 0xc1, 0x78, 0x92, - 0x8e, 0x03, 0x13, 0x51, 0x85, 0x2b, 0x3d, 0x43, 0x53, 0xd4, 0xd0, 0xd2, 0x21, 0x33, 0x1d, 0x08, - 0xcc, 0x8f, 0x81, 0xac, 0x9b, 0x06, 0xb6, 0x7c, 0xd5, 0xf3, 0x5d, 0xac, 0x75, 0x0c, 0xab, 0x4d, - 0x2b, 0x48, 0xa6, 0x9c, 0x6e, 0x69, 0xa6, 0x87, 0x95, 0x29, 0x36, 0xdc, 0x10, 0xa3, 0x04, 0x41, - 0x03, 0xc8, 0x0d, 0x21, 0xc6, 0x23, 0x08, 0x36, 0x1c, 0x20, 0xe6, 0xbf, 0x91, 0x81, 0x5c, 0xa8, - 0xaf, 0x46, 0xe7, 0x20, 0x7f, 0x53, 0xbb, 0xad, 0xa9, 0xe2, 0xac, 0xc4, 0x3c, 0x91, 0x23, 0xb2, - 0x2d, 0x7e, 0x5e, 0xfa, 0x18, 0xcc, 0x52, 0x15, 0xbb, 0xeb, 0x63, 0x57, 0xd5, 0x4d, 0xcd, 0xf3, - 0xa8, 0xd3, 0x32, 0x54, 0x15, 0x91, 0xb1, 0x4d, 0x32, 0x54, 0x15, 0x23, 0xe8, 0x12, 0xcc, 0x50, - 0x44, 0xa7, 0x6b, 0xfa, 0x86, 0x63, 0x62, 0x95, 0x9c, 0xde, 0x3c, 0x5a, 0x49, 0x02, 0xcb, 0xa6, - 0x89, 0xc6, 0x3a, 0x57, 0x20, 0x16, 0x79, 0x68, 0x05, 0x1e, 0xa4, 0xb0, 0x36, 0xb6, 0xb0, 0xab, - 0xf9, 0x58, 0xc5, 0x9f, 0xed, 0x6a, 0xa6, 0xa7, 0x6a, 0x56, 0x53, 0xdd, 0xd3, 0xbc, 0xbd, 0xe2, - 0x2c, 0x21, 0x58, 0x4e, 0x14, 0x25, 0xe5, 0x14, 0x51, 0x5c, 0xe5, 0x7a, 0x35, 0xaa, 0x56, 0xb1, - 0x9a, 0x9f, 0xd4, 0xbc, 0x3d, 0x54, 0x86, 0x13, 0x94, 0xc5, 0xf3, 0x5d, 0xc3, 0x6a, 0xab, 0xfa, - 0x1e, 0xd6, 0x6f, 0xa9, 0x5d, 0xbf, 0x75, 0xa5, 0x78, 0x3a, 0xfc, 0x7e, 0x6a, 0x61, 0x83, 0xea, - 0x54, 0x89, 0xca, 0x8e, 0xdf, 0xba, 0x82, 0x1a, 0x90, 0x27, 0x8b, 0xd1, 0x31, 0xee, 0x62, 0xb5, - 0x65, 0xbb, 0xb4, 0x34, 0x16, 0x86, 0xa4, 0xa6, 0x90, 0x07, 0x17, 0x37, 0x39, 0x60, 0xdd, 0x6e, - 0xe2, 0x72, 0xba, 0xb1, 0x55, 0xab, 0xad, 0x28, 0x39, 0xc1, 0x72, 0xdd, 0x76, 0x49, 0x40, 0xb5, - 0xed, 0xc0, 0xc1, 0x39, 0x16, 0x50, 0x6d, 0x5b, 0xb8, 0xf7, 0x12, 0xcc, 0xe8, 0x3a, 0x9b, 0xb3, - 0xa1, 0xab, 0xfc, 0x8c, 0xe5, 0x15, 0xe5, 0x88, 0xb3, 0x74, 0x7d, 0x95, 0x29, 0xf0, 0x18, 0xf7, - 0xd0, 0x55, 0x78, 0xa0, 0xe7, 0xac, 0x30, 0x70, 0x7a, 0x60, 0x96, 0xfd, 0xd0, 0x4b, 0x30, 0xe3, - 0xec, 0x0f, 0x02, 0x51, 0xe4, 0x8d, 0xce, 0x7e, 0x3f, 0xec, 0x49, 0x98, 0x75, 0xf6, 0x9c, 0x41, - 0xdc, 0x63, 0x61, 0x1c, 0x72, 0xf6, 0x9c, 0x7e, 0xe0, 0x23, 0xf4, 0xc0, 0xed, 0x62, 0x5d, 0xf3, - 0x71, 0xb3, 0x78, 0x32, 0xac, 0x1e, 0x1a, 0x40, 0x4b, 0x20, 0xeb, 0xba, 0x8a, 0x2d, 0x6d, 0xd7, - 0xc4, 0xaa, 0xe6, 0x62, 0x4b, 0xf3, 0x8a, 0x67, 0xc2, 0xca, 0x05, 0x5d, 0xaf, 0xd1, 0xd1, 0x0a, - 0x1d, 0x44, 0x8f, 0xc1, 0xb4, 0xbd, 0x7b, 0x53, 0x67, 0x21, 0xa9, 0x3a, 0x2e, 0x6e, 0x19, 0xcf, - 0x17, 0x1f, 0xa6, 0xfe, 0x9d, 0x22, 0x03, 0x34, 0x20, 0xb7, 0xa8, 0x18, 0x3d, 0x0a, 0xb2, 0xee, - 0xed, 0x69, 0xae, 0x43, 0x73, 0xb2, 0xe7, 0x68, 0x3a, 0x2e, 0x3e, 0xc2, 0x54, 0x99, 0x7c, 0x43, - 0x88, 0xc9, 0x96, 0xf0, 0xee, 0x18, 0x2d, 0x5f, 0x30, 0x9e, 0x67, 0x5b, 0x82, 0xca, 0x38, 0xdb, - 0x02, 0xc8, 0xc4, 0x15, 0x91, 0x17, 0x2f, 0x50, 0xb5, 0x82, 0xb3, 0xe7, 0x84, 0xdf, 0xfb, 0x10, - 0x4c, 0x12, 0xcd, 0xde, 0x4b, 0x1f, 0x65, 0x0d, 0x99, 0xb3, 0x17, 0x7a, 0xe3, 0xfb, 0xd6, 0x1b, - 0xcf, 0x97, 0x21, 0x1f, 0x8e, 0x4f, 0x94, 0x05, 0x16, 0xa1, 0xb2, 0x44, 0x9a, 0x95, 0xea, 0xe6, - 0x0a, 0x69, 0x33, 0x9e, 0xab, 0xc9, 0x09, 0xd2, 0xee, 0xac, 0xd5, 0xb7, 0x6b, 0xaa, 0xb2, 0xb3, - 0xb1, 0x5d, 0x5f, 0xaf, 0xc9, 0xc9, 0x70, 0x5f, 0xfd, 0xdd, 0x04, 0x14, 0xa2, 0x47, 0x24, 0xf4, - 0x53, 0x70, 0x52, 0xdc, 0x67, 0x78, 0xd8, 0x57, 0xef, 0x18, 0x2e, 0xdd, 0x32, 0x1d, 0x8d, 0x95, - 0xaf, 0x60, 0xd1, 0x66, 0xb9, 0x56, 0x03, 0xfb, 0xcf, 0x18, 0x2e, 0xd9, 0x10, 0x1d, 0xcd, 0x47, - 0x6b, 0x70, 0xc6, 0xb2, 0x55, 0xcf, 0xd7, 0xac, 0xa6, 0xe6, 0x36, 0xd5, 0xde, 0x4d, 0x92, 0xaa, - 0xe9, 0x3a, 0xf6, 0x3c, 0x9b, 0x95, 0xaa, 0x80, 0xe5, 0x43, 0x96, 0xdd, 0xe0, 0xca, 0xbd, 0x1c, - 0x5e, 0xe1, 0xaa, 0x7d, 0x01, 0x96, 0x3c, 0x2c, 0xc0, 0x4e, 0x43, 0xb6, 0xa3, 0x39, 0x2a, 0xb6, - 0x7c, 0x77, 0x9f, 0x36, 0xc6, 0x19, 0x25, 0xd3, 0xd1, 0x9c, 0x1a, 0x79, 0xfe, 0x60, 0xce, 0x27, - 0xff, 0x9c, 0x84, 0x7c, 0xb8, 0x39, 0x26, 0x67, 0x0d, 0x9d, 0xd6, 0x11, 0x89, 0x66, 0x9a, 0x87, - 0x8e, 0x6c, 0xa5, 0x17, 0xab, 0xa4, 0xc0, 0x94, 0xc7, 0x59, 0xcb, 0xaa, 0x30, 0x24, 0x29, 0xee, - 0x24, 0xb7, 0x60, 0xd6, 0x22, 0x64, 0x14, 0xfe, 0x84, 0x56, 0x61, 0xfc, 0xa6, 0x47, 0xb9, 0xc7, - 0x29, 0xf7, 0xc3, 0x47, 0x73, 0x3f, 0xdd, 0xa0, 0xe4, 0xd9, 0xa7, 0x1b, 0xea, 0xc6, 0xa6, 0xb2, - 0x5e, 0x59, 0x53, 0x38, 0x1c, 0x9d, 0x82, 0x94, 0xa9, 0xdd, 0xdd, 0x8f, 0x96, 0x22, 0x2a, 0x1a, - 0xd5, 0xf1, 0xa7, 0x20, 0x75, 0x07, 0x6b, 0xb7, 0xa2, 0x05, 0x80, 0x8a, 0xde, 0xc7, 0xd0, 0x5f, - 0x82, 0x34, 0xf5, 0x17, 0x02, 0xe0, 0x1e, 0x93, 0xc7, 0x50, 0x06, 0x52, 0xd5, 0x4d, 0x85, 0x84, - 0xbf, 0x0c, 0x79, 0x26, 0x55, 0xb7, 0xea, 0xb5, 0x6a, 0x4d, 0x4e, 0xcc, 0x5f, 0x82, 0x71, 0xe6, - 0x04, 0xb2, 0x35, 0x02, 0x37, 0xc8, 0x63, 0xfc, 0x91, 0x73, 0x48, 0x62, 0x74, 0x67, 0x7d, 0xb9, - 0xa6, 0xc8, 0x89, 0xf0, 0xf2, 0x7a, 0x90, 0x0f, 0xf7, 0xc5, 0x1f, 0x4c, 0x4c, 0xfd, 0xad, 0x04, - 0xb9, 0x50, 0x9f, 0x4b, 0x1a, 0x14, 0xcd, 0x34, 0xed, 0x3b, 0xaa, 0x66, 0x1a, 0x9a, 0xc7, 0x83, - 0x02, 0xa8, 0xa8, 0x42, 0x24, 0xa3, 0x2e, 0xda, 0x07, 0x62, 0xfc, 0x2b, 0x12, 0xc8, 0xfd, 0x2d, - 0x66, 0x9f, 0x81, 0xd2, 0x4f, 0xd4, 0xc0, 0x97, 0x25, 0x28, 0x44, 0xfb, 0xca, 0x3e, 0xf3, 0xce, - 0xfd, 0x44, 0xcd, 0x7b, 0x3d, 0x01, 0x93, 0x91, 0x6e, 0x72, 0x54, 0xeb, 0x3e, 0x0b, 0xd3, 0x46, - 0x13, 0x77, 0x1c, 0xdb, 0xc7, 0x96, 0xbe, 0xaf, 0x9a, 0xf8, 0x36, 0x36, 0x8b, 0xf3, 0x34, 0x51, - 0x2c, 0x1d, 0xdd, 0xaf, 0x2e, 0xd6, 0x7b, 0xb8, 0x35, 0x02, 0x2b, 0xcf, 0xd4, 0x57, 0x6a, 0xeb, - 0x5b, 0x9b, 0xdb, 0xb5, 0x8d, 0xea, 0x0d, 0x75, 0x67, 0xe3, 0x67, 0x36, 0x36, 0x9f, 0xd9, 0x50, - 0x64, 0xa3, 0x4f, 0xed, 0x7d, 0xdc, 0xea, 0x5b, 0x20, 0xf7, 0x1b, 0x85, 0x4e, 0xc2, 0x30, 0xb3, - 0xe4, 0x31, 0x34, 0x03, 0x53, 0x1b, 0x9b, 0x6a, 0xa3, 0xbe, 0x52, 0x53, 0x6b, 0xd7, 0xaf, 0xd7, - 0xaa, 0xdb, 0x0d, 0x76, 0x03, 0x11, 0x68, 0x6f, 0x47, 0x37, 0xf5, 0x4b, 0x49, 0x98, 0x19, 0x62, - 0x09, 0xaa, 0xf0, 0xb3, 0x03, 0x3b, 0xce, 0x7c, 0x74, 0x14, 0xeb, 0x17, 0x49, 0xc9, 0xdf, 0xd2, - 0x5c, 0x9f, 0x1f, 0x35, 0x1e, 0x05, 0xe2, 0x25, 0xcb, 0x37, 0x5a, 0x06, 0x76, 0xf9, 0x85, 0x0d, - 0x3b, 0x50, 0x4c, 0xf5, 0xe4, 0xec, 0xce, 0xe6, 0x23, 0x80, 0x1c, 0xdb, 0x33, 0x7c, 0xe3, 0x36, - 0x56, 0x0d, 0x4b, 0xdc, 0xee, 0x90, 0x03, 0x46, 0x4a, 0x91, 0xc5, 0x48, 0xdd, 0xf2, 0x03, 0x6d, - 0x0b, 0xb7, 0xb5, 0x3e, 0x6d, 0x92, 0xc0, 0x93, 0x8a, 0x2c, 0x46, 0x02, 0xed, 0x73, 0x90, 0x6f, - 0xda, 0x5d, 0xd2, 0x75, 0x31, 0x3d, 0x52, 0x2f, 0x24, 0x25, 0xc7, 0x64, 0x81, 0x0a, 0xef, 0xa7, - 0x7b, 0xd7, 0x4a, 0x79, 0x25, 0xc7, 0x64, 0x4c, 0xe5, 0x3c, 0x4c, 0x69, 0xed, 0xb6, 0x4b, 0xc8, - 0x05, 0x11, 0x3b, 0x21, 0x14, 0x02, 0x31, 0x55, 0x9c, 0x7b, 0x1a, 0x32, 0xc2, 0x0f, 0xa4, 0x24, - 0x13, 0x4f, 0xa8, 0x0e, 0x3b, 0xf6, 0x26, 0x16, 0xb2, 0x4a, 0xc6, 0x12, 0x83, 0xe7, 0x20, 0x6f, - 0x78, 0x6a, 0xef, 0x96, 0x3c, 0x71, 0x36, 0xb1, 0x90, 0x51, 0x72, 0x86, 0x17, 0xdc, 0x30, 0xce, - 0xbf, 0x9a, 0x80, 0x42, 0xf4, 0x96, 0x1f, 0xad, 0x40, 0xc6, 0xb4, 0x75, 0x8d, 0x86, 0x16, 0xfb, - 0xc4, 0xb4, 0x10, 0xf3, 0x61, 0x60, 0x71, 0x8d, 0xeb, 0x2b, 0x01, 0x72, 0xee, 0x1f, 0x25, 0xc8, - 0x08, 0x31, 0x3a, 0x01, 0x29, 0x47, 0xf3, 0xf7, 0x28, 0x5d, 0x7a, 0x39, 0x21, 0x4b, 0x0a, 0x7d, - 0x26, 0x72, 0xcf, 0xd1, 0x2c, 0x1a, 0x02, 0x5c, 0x4e, 0x9e, 0xc9, 0xba, 0x9a, 0x58, 0x6b, 0xd2, - 0xe3, 0x87, 0xdd, 0xe9, 0x60, 0xcb, 0xf7, 0xc4, 0xba, 0x72, 0x79, 0x95, 0x8b, 0xd1, 0xe3, 0x30, - 0xed, 0xbb, 0x9a, 0x61, 0x46, 0x74, 0x53, 0x54, 0x57, 0x16, 0x03, 0x81, 0x72, 0x19, 0x4e, 0x09, - 0xde, 0x26, 0xf6, 0x35, 0x7d, 0x0f, 0x37, 0x7b, 0xa0, 0x71, 0x7a, 0xcd, 0x70, 0x92, 0x2b, 0xac, - 0xf0, 0x71, 0x81, 0x9d, 0xff, 0xbe, 0x04, 0xd3, 0xe2, 0xc0, 0xd4, 0x0c, 0x9c, 0xb5, 0x0e, 0xa0, - 0x59, 0x96, 0xed, 0x87, 0xdd, 0x35, 0x18, 0xca, 0x03, 0xb8, 0xc5, 0x4a, 0x00, 0x52, 0x42, 0x04, - 0x73, 0x1d, 0x80, 0xde, 0xc8, 0xa1, 0x6e, 0x3b, 0x03, 0x39, 0xfe, 0x09, 0x87, 0x7e, 0x07, 0x64, - 0x47, 0x6c, 0x60, 0x22, 0x72, 0xb2, 0x42, 0xb3, 0x90, 0xde, 0xc5, 0x6d, 0xc3, 0xe2, 0x17, 0xb3, - 0xec, 0x41, 0x5c, 0x84, 0xa4, 0x82, 0x8b, 0x90, 0xe5, 0xcf, 0xc0, 0x8c, 0x6e, 0x77, 0xfa, 0xcd, - 0x5d, 0x96, 0xfb, 0x8e, 0xf9, 0xde, 0x27, 0xa5, 0xe7, 0xa0, 0xd7, 0x62, 0xbe, 0x2b, 0x49, 0x7f, - 0x98, 0x48, 0xae, 0x6e, 0x2d, 0x7f, 0x35, 0x31, 0xb7, 0xca, 0xa0, 0x5b, 0x62, 0xa6, 0x0a, 0x6e, - 0x99, 0x58, 0x27, 0xd6, 0xc3, 0x97, 0x17, 0xe0, 0xa3, 0x6d, 0xc3, 0xdf, 0xeb, 0xee, 0x2e, 0xea, - 0x76, 0x67, 0xa9, 0x6d, 0xb7, 0xed, 0xde, 0xa7, 0x4f, 0xf2, 0x44, 0x1f, 0xe8, 0x2f, 0xfe, 0xf9, - 0x33, 0x1b, 0x48, 0xe7, 0x62, 0xbf, 0x95, 0x96, 0x37, 0x60, 0x86, 0x2b, 0xab, 0xf4, 0xfb, 0x0b, - 0x3b, 0x45, 0xa0, 0x23, 0xef, 0xb0, 0x8a, 0x5f, 0x7f, 0x83, 0x96, 0x6b, 0x65, 0x9a, 0x43, 0xc9, - 0x18, 0x3b, 0x68, 0x94, 0x15, 0x78, 0x20, 0xc2, 0xc7, 0xb6, 0x26, 0x76, 0x63, 0x18, 0xbf, 0xcb, - 0x19, 0x67, 0x42, 0x8c, 0x0d, 0x0e, 0x2d, 0x57, 0x61, 0xf2, 0x38, 0x5c, 0x7f, 0xcf, 0xb9, 0xf2, - 0x38, 0x4c, 0xb2, 0x0a, 0x53, 0x94, 0x44, 0xef, 0x7a, 0xbe, 0xdd, 0xa1, 0x79, 0xef, 0x68, 0x9a, - 0x7f, 0x78, 0x83, 0xed, 0x95, 0x02, 0x81, 0x55, 0x03, 0x54, 0xb9, 0x0c, 0xf4, 0x93, 0x53, 0x13, - 0xeb, 0x66, 0x0c, 0xc3, 0x6b, 0xdc, 0x90, 0x40, 0xbf, 0xfc, 0x69, 0x98, 0x25, 0xbf, 0x69, 0x5a, - 0x0a, 0x5b, 0x12, 0x7f, 0xe1, 0x55, 0xfc, 0xfe, 0x0b, 0x6c, 0x3b, 0xce, 0x04, 0x04, 0x21, 0x9b, - 0x42, 0xab, 0xd8, 0xc6, 0xbe, 0x8f, 0x5d, 0x4f, 0xd5, 0xcc, 0x61, 0xe6, 0x85, 0x6e, 0x0c, 0x8a, - 0x5f, 0x78, 0x2b, 0xba, 0x8a, 0xab, 0x0c, 0x59, 0x31, 0xcd, 0xf2, 0x0e, 0x9c, 0x1c, 0x12, 0x15, - 0x23, 0x70, 0xbe, 0xc4, 0x39, 0x67, 0x07, 0x22, 0x83, 0xd0, 0x6e, 0x81, 0x90, 0x07, 0x6b, 0x39, - 0x02, 0xe7, 0xef, 0x71, 0x4e, 0xc4, 0xb1, 0x62, 0x49, 0x09, 0xe3, 0xd3, 0x30, 0x7d, 0x1b, 0xbb, - 0xbb, 0xb6, 0xc7, 0x6f, 0x69, 0x46, 0xa0, 0x7b, 0x99, 0xd3, 0x4d, 0x71, 0x20, 0xbd, 0xb6, 0x21, - 0x5c, 0x57, 0x21, 0xd3, 0xd2, 0x74, 0x3c, 0x02, 0xc5, 0x17, 0x39, 0xc5, 0x04, 0xd1, 0x27, 0xd0, - 0x0a, 0xe4, 0xdb, 0x36, 0xaf, 0x4c, 0xf1, 0xf0, 0x57, 0x38, 0x3c, 0x27, 0x30, 0x9c, 0xc2, 0xb1, - 0x9d, 0xae, 0x49, 0xca, 0x56, 0x3c, 0xc5, 0xef, 0x0b, 0x0a, 0x81, 0xe1, 0x14, 0xc7, 0x70, 0xeb, - 0x1f, 0x08, 0x0a, 0x2f, 0xe4, 0xcf, 0xa7, 0x20, 0x67, 0x5b, 0xe6, 0xbe, 0x6d, 0x8d, 0x62, 0xc4, - 0x97, 0x38, 0x03, 0x70, 0x08, 0x21, 0xb8, 0x06, 0xd9, 0x51, 0x17, 0xe2, 0xcb, 0x6f, 0x89, 0xed, - 0x21, 0x56, 0x60, 0x15, 0xa6, 0x44, 0x82, 0x32, 0x6c, 0x6b, 0x04, 0x8a, 0x3f, 0xe2, 0x14, 0x85, - 0x10, 0x8c, 0x4f, 0xc3, 0xc7, 0x9e, 0xdf, 0xc6, 0xa3, 0x90, 0xbc, 0x2a, 0xa6, 0xc1, 0x21, 0xdc, - 0x95, 0xbb, 0xd8, 0xd2, 0xf7, 0x46, 0x63, 0xf8, 0x8a, 0x70, 0xa5, 0xc0, 0x10, 0x8a, 0x2a, 0x4c, - 0x76, 0x34, 0xd7, 0xdb, 0xd3, 0xcc, 0x91, 0x96, 0xe3, 0x8f, 0x39, 0x47, 0x3e, 0x00, 0x71, 0x8f, - 0x74, 0xad, 0xe3, 0xd0, 0x7c, 0x55, 0x78, 0x24, 0x04, 0xe3, 0x5b, 0xcf, 0xf3, 0xe9, 0x95, 0xd6, - 0x71, 0xd8, 0xfe, 0x44, 0x6c, 0x3d, 0x86, 0x5d, 0x0f, 0x33, 0x5e, 0x83, 0xac, 0x67, 0xdc, 0x1d, - 0x89, 0xe6, 0x4f, 0xc5, 0x4a, 0x53, 0x00, 0x01, 0xdf, 0x80, 0x53, 0x43, 0xcb, 0xc4, 0x08, 0x64, - 0x7f, 0xc6, 0xc9, 0x4e, 0x0c, 0x29, 0x15, 0x3c, 0x25, 0x1c, 0x97, 0xf2, 0xcf, 0x45, 0x4a, 0xc0, - 0x7d, 0x5c, 0x5b, 0xe4, 0xac, 0xe0, 0x69, 0xad, 0xe3, 0x79, 0xed, 0x2f, 0x84, 0xd7, 0x18, 0x36, - 0xe2, 0xb5, 0x6d, 0x38, 0xc1, 0x19, 0x8f, 0xb7, 0xae, 0x5f, 0x13, 0x89, 0x95, 0xa1, 0x77, 0xa2, - 0xab, 0xfb, 0x19, 0x98, 0x0b, 0xdc, 0x29, 0x9a, 0x52, 0x4f, 0xed, 0x68, 0xce, 0x08, 0xcc, 0x5f, - 0xe7, 0xcc, 0x22, 0xe3, 0x07, 0x5d, 0xad, 0xb7, 0xae, 0x39, 0x84, 0xfc, 0x59, 0x28, 0x0a, 0xf2, - 0xae, 0xe5, 0x62, 0xdd, 0x6e, 0x5b, 0xc6, 0x5d, 0xdc, 0x1c, 0x81, 0xfa, 0x2f, 0xfb, 0x96, 0x6a, - 0x27, 0x04, 0x27, 0xcc, 0x75, 0x90, 0x83, 0x5e, 0x45, 0x35, 0x3a, 0x8e, 0xed, 0xfa, 0x31, 0x8c, - 0xdf, 0x10, 0x2b, 0x15, 0xe0, 0xea, 0x14, 0x56, 0xae, 0x41, 0x81, 0x3e, 0x8e, 0x1a, 0x92, 0x7f, - 0xc5, 0x89, 0x26, 0x7b, 0x28, 0x9e, 0x38, 0x74, 0xbb, 0xe3, 0x68, 0xee, 0x28, 0xf9, 0xef, 0xaf, - 0x45, 0xe2, 0xe0, 0x10, 0x9e, 0x38, 0xfc, 0x7d, 0x07, 0x93, 0x6a, 0x3f, 0x02, 0xc3, 0x37, 0x45, - 0xe2, 0x10, 0x18, 0x4e, 0x21, 0x1a, 0x86, 0x11, 0x28, 0xfe, 0x46, 0x50, 0x08, 0x0c, 0xa1, 0xf8, - 0x54, 0xaf, 0xd0, 0xba, 0xb8, 0x6d, 0x78, 0xbe, 0xcb, 0x5a, 0xe1, 0xa3, 0xa9, 0xbe, 0xf5, 0x56, - 0xb4, 0x09, 0x53, 0x42, 0x50, 0x92, 0x89, 0xf8, 0x15, 0x2a, 0x3d, 0x29, 0xc5, 0x1b, 0xf6, 0x6d, - 0x91, 0x89, 0x42, 0x30, 0xb6, 0x3f, 0xa7, 0xfa, 0x7a, 0x15, 0x14, 0xf7, 0x8f, 0x30, 0xc5, 0x9f, - 0x7f, 0x87, 0x73, 0x45, 0x5b, 0x95, 0xf2, 0x1a, 0x09, 0xa0, 0x68, 0x43, 0x11, 0x4f, 0xf6, 0xc2, - 0x3b, 0x41, 0x0c, 0x45, 0xfa, 0x89, 0xf2, 0x75, 0x98, 0x8c, 0x34, 0x13, 0xf1, 0x54, 0x9f, 0xe3, - 0x54, 0xf9, 0x70, 0x2f, 0x51, 0xbe, 0x04, 0x29, 0xd2, 0x18, 0xc4, 0xc3, 0x7f, 0x81, 0xc3, 0xa9, - 0x7a, 0xf9, 0xe3, 0x90, 0x11, 0x0d, 0x41, 0x3c, 0xf4, 0x17, 0x39, 0x34, 0x80, 0x10, 0xb8, 0x68, - 0x06, 0xe2, 0xe1, 0xbf, 0x24, 0xe0, 0x02, 0x42, 0xe0, 0xa3, 0xbb, 0xf0, 0x3b, 0xbf, 0x92, 0xe2, - 0x09, 0x5d, 0xf8, 0xee, 0x1a, 0x4c, 0xf0, 0x2e, 0x20, 0x1e, 0xfd, 0x22, 0x7f, 0xb9, 0x40, 0x94, - 0x9f, 0x84, 0xf4, 0x88, 0x0e, 0xff, 0x55, 0x0e, 0x65, 0xfa, 0xe5, 0x2a, 0xe4, 0x42, 0x95, 0x3f, - 0x1e, 0xfe, 0x6b, 0x1c, 0x1e, 0x46, 0x11, 0xd3, 0x79, 0xe5, 0x8f, 0x27, 0xf8, 0x75, 0x61, 0x3a, - 0x47, 0x10, 0xb7, 0x89, 0xa2, 0x1f, 0x8f, 0xfe, 0x0d, 0xe1, 0x75, 0x01, 0x29, 0x3f, 0x05, 0xd9, - 0x20, 0x91, 0xc7, 0xe3, 0x7f, 0x93, 0xe3, 0x7b, 0x18, 0xe2, 0x81, 0x50, 0x21, 0x89, 0xa7, 0xf8, - 0x2d, 0xe1, 0x81, 0x10, 0x8a, 0x6c, 0xa3, 0xfe, 0xe6, 0x20, 0x9e, 0xe9, 0xb7, 0xc5, 0x36, 0xea, - 0xeb, 0x0d, 0xc8, 0x6a, 0xd2, 0x7c, 0x1a, 0x4f, 0xf1, 0x3b, 0x62, 0x35, 0xa9, 0x3e, 0x31, 0xa3, - 0xbf, 0xda, 0xc6, 0x73, 0xfc, 0xae, 0x30, 0xa3, 0xaf, 0xd8, 0x96, 0xb7, 0x00, 0x0d, 0x56, 0xda, - 0x78, 0xbe, 0xcf, 0x73, 0xbe, 0xe9, 0x81, 0x42, 0x5b, 0x7e, 0x06, 0x4e, 0x0c, 0xaf, 0xb2, 0xf1, - 0xac, 0x5f, 0x78, 0xa7, 0xef, 0x5c, 0x14, 0x2e, 0xb2, 0xe5, 0xed, 0x5e, 0xba, 0x0e, 0x57, 0xd8, - 0x78, 0xda, 0x97, 0xde, 0x89, 0x66, 0xec, 0x70, 0x81, 0x2d, 0x57, 0x00, 0x7a, 0xc5, 0x2d, 0x9e, - 0xeb, 0x65, 0xce, 0x15, 0x02, 0x91, 0xad, 0xc1, 0x6b, 0x5b, 0x3c, 0xfe, 0x8b, 0x62, 0x6b, 0x70, - 0x04, 0xd9, 0x1a, 0xa2, 0xac, 0xc5, 0xa3, 0x5f, 0x11, 0x5b, 0x43, 0x40, 0x48, 0x64, 0x87, 0x2a, - 0x47, 0x3c, 0xc3, 0x97, 0x44, 0x64, 0x87, 0x50, 0xe5, 0x6b, 0x90, 0xb1, 0xba, 0xa6, 0x49, 0x02, - 0x14, 0x1d, 0xfd, 0x0f, 0x62, 0xc5, 0x7f, 0x7f, 0x8f, 0x5b, 0x20, 0x00, 0xe5, 0x4b, 0x90, 0xc6, - 0x9d, 0x5d, 0xdc, 0x8c, 0x43, 0xfe, 0xc7, 0x7b, 0x22, 0x29, 0x11, 0xed, 0xf2, 0x53, 0x00, 0xec, - 0x68, 0x4f, 0x3f, 0x5b, 0xc5, 0x60, 0xff, 0xf3, 0x3d, 0xfe, 0xaf, 0x1b, 0x3d, 0x48, 0x8f, 0x80, - 0xfd, 0x23, 0xc8, 0xd1, 0x04, 0x6f, 0x45, 0x09, 0xe8, 0xac, 0xaf, 0xc2, 0xc4, 0x4d, 0xcf, 0xb6, - 0x7c, 0xad, 0x1d, 0x87, 0xfe, 0x2f, 0x8e, 0x16, 0xfa, 0xc4, 0x61, 0x1d, 0xdb, 0xc5, 0xbe, 0xd6, - 0xf6, 0xe2, 0xb0, 0xff, 0xcd, 0xb1, 0x01, 0x80, 0x80, 0x75, 0xcd, 0xf3, 0x47, 0x99, 0xf7, 0x0f, - 0x05, 0x58, 0x00, 0x88, 0xd1, 0xe4, 0xf7, 0x2d, 0xbc, 0x1f, 0x87, 0x7d, 0x5b, 0x18, 0xcd, 0xf5, - 0xcb, 0x1f, 0x87, 0x2c, 0xf9, 0xc9, 0xfe, 0x1f, 0x2b, 0x06, 0xfc, 0x3f, 0x1c, 0xdc, 0x43, 0x90, - 0x37, 0x7b, 0x7e, 0xd3, 0x37, 0xe2, 0x9d, 0xfd, 0xbf, 0x7c, 0xa5, 0x85, 0x7e, 0xb9, 0x02, 0x39, - 0xcf, 0x6f, 0x36, 0xbb, 0xbc, 0xbf, 0x8a, 0x81, 0xff, 0xdf, 0x7b, 0xc1, 0x91, 0x3b, 0xc0, 0x2c, - 0xd7, 0x86, 0xdf, 0x1e, 0xc2, 0xaa, 0xbd, 0x6a, 0xb3, 0x7b, 0xc3, 0xe7, 0xe6, 0xe3, 0x2f, 0x00, - 0xe1, 0xc5, 0x34, 0x9c, 0xd6, 0xed, 0xce, 0xae, 0xed, 0x2d, 0xed, 0xda, 0xfe, 0xde, 0x52, 0x30, - 0x3d, 0x71, 0x2b, 0x18, 0x08, 0xe6, 0x8e, 0x77, 0x9f, 0x38, 0xff, 0x77, 0x49, 0xc8, 0x54, 0x35, - 0xcf, 0xd7, 0xee, 0x68, 0xfb, 0xc8, 0x81, 0x19, 0xf2, 0x7b, 0x5d, 0x73, 0xe8, 0xed, 0x14, 0xdf, - 0x83, 0xfc, 0xca, 0xf6, 0x23, 0x8b, 0xbd, 0xb7, 0x0a, 0xc4, 0xe2, 0x10, 0x75, 0xfa, 0xa9, 0x7b, - 0x59, 0x7e, 0xed, 0x5f, 0xce, 0x8c, 0xfd, 0xf2, 0xbf, 0x9e, 0xc9, 0xac, 0xef, 0x3f, 0x63, 0x98, - 0x9e, 0x6d, 0x29, 0xc3, 0xa8, 0xd1, 0xe7, 0x24, 0x38, 0x3d, 0x44, 0xbe, 0xc1, 0x77, 0x29, 0xff, - 0xf0, 0x71, 0x71, 0xc4, 0x57, 0x0b, 0x18, 0x33, 0x21, 0x1f, 0x79, 0xfd, 0x51, 0xaf, 0x99, 0xbb, - 0x01, 0xc5, 0xc3, 0x66, 0x82, 0x64, 0x48, 0xde, 0xc2, 0xfb, 0xfc, 0xff, 0xe5, 0xc8, 0x4f, 0x74, - 0xbe, 0xf7, 0x5f, 0x85, 0xd2, 0x42, 0xee, 0xc2, 0x74, 0xc8, 0x3a, 0xfe, 0x32, 0x36, 0x5e, 0x4e, - 0x5c, 0x91, 0xe6, 0x34, 0x38, 0x1b, 0x67, 0xe9, 0x8f, 0xf9, 0x8a, 0xf9, 0x12, 0x8c, 0x33, 0x21, - 0x9a, 0x85, 0x74, 0xdd, 0xf2, 0x2f, 0x5f, 0xa4, 0x54, 0x49, 0x85, 0x3d, 0x2c, 0xaf, 0xbd, 0x76, - 0xbf, 0x34, 0xf6, 0xbd, 0xfb, 0xa5, 0xb1, 0x7f, 0xba, 0x5f, 0x1a, 0x7b, 0xfd, 0x7e, 0x49, 0x7a, - 0xf3, 0x7e, 0x49, 0x7a, 0xfb, 0x7e, 0x49, 0x7a, 0xf7, 0x7e, 0x49, 0xba, 0x77, 0x50, 0x92, 0xbe, - 0x72, 0x50, 0x92, 0xbe, 0x76, 0x50, 0x92, 0xbe, 0x75, 0x50, 0x92, 0xbe, 0x73, 0x50, 0x92, 0x5e, - 0x3b, 0x28, 0x49, 0xdf, 0x3b, 0x28, 0x49, 0xaf, 0x1f, 0x94, 0xa4, 0x37, 0x0f, 0x4a, 0x63, 0x6f, - 0x1f, 0x94, 0xa4, 0x77, 0x0f, 0x4a, 0x63, 0xf7, 0x7e, 0x50, 0x1a, 0xfb, 0xff, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x80, 0x50, 0x88, 0xf5, 0xa6, 0x33, 0x00, 0x00, + // 4012 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xdc, 0xd6, + 0x75, 0x26, 0xf6, 0x87, 0xdc, 0x3d, 0xbb, 0x5c, 0x82, 0x20, 0x2d, 0xad, 0xa8, 0x78, 0x45, 0xd1, + 0x76, 0x44, 0xdb, 0x09, 0x99, 0x91, 0x25, 0x59, 0x5a, 0x35, 0x71, 0x97, 0xcb, 0x15, 0xb3, 0x2e, + 0xff, 0x82, 0x25, 0x63, 0xcb, 0x99, 0x0e, 0x06, 0xc4, 0x5e, 0x2e, 0x21, 0x61, 0x01, 0x04, 0xc0, + 0x4a, 0xa6, 0xa6, 0x0f, 0xea, 0x38, 0x6d, 0xc7, 0xed, 0xf4, 0xbf, 0x33, 0x4d, 0x5c, 0xc7, 0x6d, + 0xd2, 0x69, 0x9c, 0xa6, 0x7f, 0x49, 0xd3, 0xa6, 0x49, 0xfa, 0x92, 0x3e, 0xa4, 0xf5, 0x53, 0x27, + 0x79, 0xeb, 0x43, 0xa7, 0xb5, 0x18, 0xcf, 0xd4, 0x6d, 0xdd, 0xc6, 0x6d, 0xf5, 0xe0, 0x19, 0xbf, + 0x74, 0xee, 0x1f, 0x16, 0xc0, 0x2e, 0x09, 0x30, 0x19, 0x3b, 0x4f, 0x24, 0xce, 0x3d, 0xdf, 0x87, + 0x73, 0xcf, 0x3d, 0xf7, 0x9c, 0x73, 0x2f, 0x16, 0x7e, 0x78, 0x05, 0x66, 0x3b, 0x96, 0xd5, 0x31, + 0xd0, 0xa2, 0xed, 0x58, 0x9e, 0xb5, 0xd3, 0xdb, 0x5d, 0x6c, 0x23, 0x57, 0x73, 0x74, 0xdb, 0xb3, + 0x9c, 0x05, 0x22, 0x93, 0x26, 0xa8, 0xc6, 0x02, 0xd7, 0x98, 0x5b, 0x83, 0xc9, 0x6b, 0xba, 0x81, + 0x96, 0x7d, 0xc5, 0x16, 0xf2, 0xa4, 0xcb, 0x90, 0xd9, 0xd5, 0x0d, 0x54, 0x16, 0x66, 0xd3, 0xf3, + 0x85, 0xf3, 0x0f, 0x2f, 0x44, 0x40, 0x0b, 0x61, 0xc4, 0x26, 0x16, 0xcb, 0x04, 0x31, 0xf7, 0x46, + 0x06, 0xa6, 0x86, 0x8c, 0x4a, 0x12, 0x64, 0x4c, 0xb5, 0x8b, 0x19, 0x85, 0xf9, 0xbc, 0x4c, 0xfe, + 0x97, 0xca, 0x30, 0x66, 0xab, 0xda, 0x4d, 0xb5, 0x83, 0xca, 0x29, 0x22, 0xe6, 0x8f, 0x52, 0x05, + 0xa0, 0x8d, 0x6c, 0x64, 0xb6, 0x91, 0xa9, 0xed, 0x97, 0xd3, 0xb3, 0xe9, 0xf9, 0xbc, 0x1c, 0x90, + 0x48, 0x8f, 0xc3, 0xa4, 0xdd, 0xdb, 0x31, 0x74, 0x4d, 0x09, 0xa8, 0xc1, 0x6c, 0x7a, 0x3e, 0x2b, + 0x8b, 0x74, 0x60, 0xb9, 0xaf, 0x7c, 0x0e, 0x26, 0x6e, 0x23, 0xf5, 0x66, 0x50, 0xb5, 0x40, 0x54, + 0x4b, 0x58, 0x1c, 0x50, 0xac, 0x43, 0xb1, 0x8b, 0x5c, 0x57, 0xed, 0x20, 0xc5, 0xdb, 0xb7, 0x51, + 0x39, 0x43, 0x66, 0x3f, 0x3b, 0x30, 0xfb, 0xe8, 0xcc, 0x0b, 0x0c, 0xb5, 0xb5, 0x6f, 0x23, 0xa9, + 0x06, 0x79, 0x64, 0xf6, 0xba, 0x94, 0x21, 0x7b, 0x88, 0xff, 0x1a, 0x66, 0xaf, 0x1b, 0x65, 0xc9, + 0x61, 0x18, 0xa3, 0x18, 0x73, 0x91, 0x73, 0x4b, 0xd7, 0x50, 0x79, 0x94, 0x10, 0x9c, 0x1b, 0x20, + 0x68, 0xd1, 0xf1, 0x28, 0x07, 0xc7, 0x49, 0x75, 0xc8, 0xa3, 0xe7, 0x3d, 0x64, 0xba, 0xba, 0x65, + 0x96, 0xc7, 0x08, 0xc9, 0x23, 0x43, 0x56, 0x11, 0x19, 0xed, 0x28, 0x45, 0x1f, 0x27, 0x5d, 0x82, + 0x31, 0xcb, 0xf6, 0x74, 0xcb, 0x74, 0xcb, 0xb9, 0x59, 0x61, 0xbe, 0x70, 0xfe, 0x03, 0x43, 0x03, + 0x61, 0x83, 0xea, 0xc8, 0x5c, 0x59, 0x6a, 0x82, 0xe8, 0x5a, 0x3d, 0x47, 0x43, 0x8a, 0x66, 0xb5, + 0x91, 0xa2, 0x9b, 0xbb, 0x56, 0x39, 0x4f, 0x08, 0xce, 0x0c, 0x4e, 0x84, 0x28, 0xd6, 0xad, 0x36, + 0x6a, 0x9a, 0xbb, 0x96, 0x5c, 0x72, 0x43, 0xcf, 0xd2, 0x09, 0x18, 0x75, 0xf7, 0x4d, 0x4f, 0x7d, + 0xbe, 0x5c, 0x24, 0x11, 0xc2, 0x9e, 0xe6, 0xbe, 0x35, 0x0a, 0x13, 0x49, 0x42, 0xec, 0x2a, 0x64, + 0x77, 0xf1, 0x2c, 0xcb, 0xa9, 0xe3, 0xf8, 0x80, 0x62, 0xc2, 0x4e, 0x1c, 0xfd, 0x11, 0x9d, 0x58, + 0x83, 0x82, 0x89, 0x5c, 0x0f, 0xb5, 0x69, 0x44, 0xa4, 0x13, 0xc6, 0x14, 0x50, 0xd0, 0x60, 0x48, + 0x65, 0x7e, 0xa4, 0x90, 0x7a, 0x16, 0x26, 0x7c, 0x93, 0x14, 0x47, 0x35, 0x3b, 0x3c, 0x36, 0x17, + 0xe3, 0x2c, 0x59, 0x68, 0x70, 0x9c, 0x8c, 0x61, 0x72, 0x09, 0x85, 0x9e, 0xa5, 0x65, 0x00, 0xcb, + 0x44, 0xd6, 0xae, 0xd2, 0x46, 0x9a, 0x51, 0xce, 0x1d, 0xe2, 0xa5, 0x0d, 0xac, 0x32, 0xe0, 0x25, + 0x8b, 0x4a, 0x35, 0x43, 0xba, 0xd2, 0x0f, 0xb5, 0xb1, 0x43, 0x22, 0x65, 0x8d, 0x6e, 0xb2, 0x81, + 0x68, 0xdb, 0x86, 0x92, 0x83, 0x70, 0xdc, 0xa3, 0x36, 0x9b, 0x59, 0x9e, 0x18, 0xb1, 0x10, 0x3b, + 0x33, 0x99, 0xc1, 0xe8, 0xc4, 0xc6, 0x9d, 0xe0, 0xa3, 0xf4, 0x10, 0xf8, 0x02, 0x85, 0x84, 0x15, + 0x90, 0x2c, 0x54, 0xe4, 0xc2, 0x75, 0xb5, 0x8b, 0x66, 0xee, 0x40, 0x29, 0xec, 0x1e, 0x69, 0x1a, + 0xb2, 0xae, 0xa7, 0x3a, 0x1e, 0x89, 0xc2, 0xac, 0x4c, 0x1f, 0x24, 0x11, 0xd2, 0xc8, 0x6c, 0x93, + 0x2c, 0x97, 0x95, 0xf1, 0xbf, 0xd2, 0x4f, 0xf7, 0x27, 0x9c, 0x26, 0x13, 0xfe, 0xe0, 0xe0, 0x8a, + 0x86, 0x98, 0xa3, 0xf3, 0x9e, 0x79, 0x12, 0xc6, 0x43, 0x13, 0x48, 0xfa, 0xea, 0xb9, 0x9f, 0x83, + 0x07, 0x86, 0x52, 0x4b, 0xcf, 0xc2, 0x74, 0xcf, 0xd4, 0x4d, 0x0f, 0x39, 0xb6, 0x83, 0x70, 0xc4, + 0xd2, 0x57, 0x95, 0xff, 0x6d, 0xec, 0x90, 0x98, 0xdb, 0x0e, 0x6a, 0x53, 0x16, 0x79, 0xaa, 0x37, + 0x28, 0x7c, 0x2c, 0x9f, 0x7b, 0x73, 0x4c, 0xbc, 0x7b, 0xf7, 0xee, 0xdd, 0xd4, 0xdc, 0x67, 0x47, + 0x61, 0x7a, 0xd8, 0x9e, 0x19, 0xba, 0x7d, 0x4f, 0xc0, 0xa8, 0xd9, 0xeb, 0xee, 0x20, 0x87, 0x38, + 0x29, 0x2b, 0xb3, 0x27, 0xa9, 0x06, 0x59, 0x43, 0xdd, 0x41, 0x46, 0x39, 0x33, 0x2b, 0xcc, 0x97, + 0xce, 0x3f, 0x9e, 0x68, 0x57, 0x2e, 0xac, 0x62, 0x88, 0x4c, 0x91, 0xd2, 0xc7, 0x20, 0xc3, 0x52, + 0x34, 0x66, 0x78, 0x2c, 0x19, 0x03, 0xde, 0x4b, 0x32, 0xc1, 0x49, 0xa7, 0x21, 0x8f, 0xff, 0xd2, + 0xd8, 0x18, 0x25, 0x36, 0xe7, 0xb0, 0x00, 0xc7, 0x85, 0x34, 0x03, 0x39, 0xb2, 0x4d, 0xda, 0x88, + 0x97, 0x36, 0xff, 0x19, 0x07, 0x56, 0x1b, 0xed, 0xaa, 0x3d, 0xc3, 0x53, 0x6e, 0xa9, 0x46, 0x0f, + 0x91, 0x80, 0xcf, 0xcb, 0x45, 0x26, 0xfc, 0x24, 0x96, 0x49, 0x67, 0xa0, 0x40, 0x77, 0x95, 0x6e, + 0xb6, 0xd1, 0xf3, 0x24, 0x7b, 0x66, 0x65, 0xba, 0xd1, 0x9a, 0x58, 0x82, 0x5f, 0x7f, 0xc3, 0xb5, + 0x4c, 0x1e, 0x9a, 0xe4, 0x15, 0x58, 0x40, 0x5e, 0xff, 0x64, 0x34, 0x71, 0x3f, 0x38, 0x7c, 0x7a, + 0xd1, 0x98, 0x9a, 0xfb, 0x46, 0x0a, 0x32, 0x24, 0x5f, 0x4c, 0x40, 0x61, 0xeb, 0xfa, 0x66, 0x43, + 0x59, 0xde, 0xd8, 0x5e, 0x5a, 0x6d, 0x88, 0x82, 0x54, 0x02, 0x20, 0x82, 0x6b, 0xab, 0x1b, 0xb5, + 0x2d, 0x31, 0xe5, 0x3f, 0x37, 0xd7, 0xb7, 0x2e, 0x5d, 0x10, 0xd3, 0x3e, 0x60, 0x9b, 0x0a, 0x32, + 0x41, 0x85, 0x27, 0xce, 0x8b, 0x59, 0x49, 0x84, 0x22, 0x25, 0x68, 0x3e, 0xdb, 0x58, 0xbe, 0x74, + 0x41, 0x1c, 0x0d, 0x4b, 0x9e, 0x38, 0x2f, 0x8e, 0x49, 0xe3, 0x90, 0x27, 0x92, 0xa5, 0x8d, 0x8d, + 0x55, 0x31, 0xe7, 0x73, 0xb6, 0xb6, 0xe4, 0xe6, 0xfa, 0x8a, 0x98, 0xf7, 0x39, 0x57, 0xe4, 0x8d, + 0xed, 0x4d, 0x11, 0x7c, 0x86, 0xb5, 0x46, 0xab, 0x55, 0x5b, 0x69, 0x88, 0x05, 0x5f, 0x63, 0xe9, + 0xfa, 0x56, 0xa3, 0x25, 0x16, 0x43, 0x66, 0x3d, 0x71, 0x5e, 0x1c, 0xf7, 0x5f, 0xd1, 0x58, 0xdf, + 0x5e, 0x13, 0x4b, 0xd2, 0x24, 0x8c, 0xd3, 0x57, 0x70, 0x23, 0x26, 0x22, 0xa2, 0x4b, 0x17, 0x44, + 0xb1, 0x6f, 0x08, 0x65, 0x99, 0x0c, 0x09, 0x2e, 0x5d, 0x10, 0xa5, 0xb9, 0x3a, 0x64, 0x49, 0x74, + 0x49, 0x12, 0x94, 0x56, 0x6b, 0x4b, 0x8d, 0x55, 0x65, 0x63, 0x73, 0xab, 0xb9, 0xb1, 0x5e, 0x5b, + 0x15, 0x85, 0xbe, 0x4c, 0x6e, 0x7c, 0x62, 0xbb, 0x29, 0x37, 0x96, 0xc5, 0x54, 0x50, 0xb6, 0xd9, + 0xa8, 0x6d, 0x35, 0x96, 0xc5, 0xf4, 0x9c, 0x06, 0xd3, 0xc3, 0xf2, 0xe4, 0xd0, 0x9d, 0x11, 0x58, + 0xe2, 0xd4, 0x21, 0x4b, 0x4c, 0xb8, 0x06, 0x96, 0xf8, 0x07, 0x29, 0x98, 0x1a, 0x52, 0x2b, 0x86, + 0xbe, 0xe4, 0x29, 0xc8, 0xd2, 0x10, 0xa5, 0xd5, 0xf3, 0xd1, 0xa1, 0x45, 0x87, 0x04, 0xec, 0x40, + 0x05, 0x25, 0xb8, 0x60, 0x07, 0x91, 0x3e, 0xa4, 0x83, 0xc0, 0x14, 0x03, 0x39, 0xfd, 0x67, 0x07, + 0x72, 0x3a, 0x2d, 0x7b, 0x97, 0x92, 0x94, 0x3d, 0x22, 0x3b, 0x5e, 0x6e, 0xcf, 0x0e, 0xc9, 0xed, + 0x57, 0x61, 0x72, 0x80, 0x28, 0x71, 0x8e, 0x7d, 0x41, 0x80, 0xf2, 0x61, 0xce, 0x89, 0xc9, 0x74, + 0xa9, 0x50, 0xa6, 0xbb, 0x1a, 0xf5, 0xe0, 0xd9, 0xc3, 0x17, 0x61, 0x60, 0xad, 0x5f, 0x15, 0xe0, + 0xc4, 0xf0, 0x4e, 0x71, 0xa8, 0x0d, 0x1f, 0x83, 0xd1, 0x2e, 0xf2, 0xf6, 0x2c, 0xde, 0x2d, 0x7d, + 0x70, 0x48, 0x0d, 0xc6, 0xc3, 0xd1, 0xc5, 0x66, 0xa8, 0x60, 0x11, 0x4f, 0x1f, 0xd6, 0xee, 0x51, + 0x6b, 0x06, 0x2c, 0x7d, 0x31, 0x05, 0x0f, 0x0c, 0x25, 0x1f, 0x6a, 0xe8, 0x83, 0x00, 0xba, 0x69, + 0xf7, 0x3c, 0xda, 0x11, 0xd1, 0x04, 0x9b, 0x27, 0x12, 0x92, 0xbc, 0x70, 0xf2, 0xec, 0x79, 0xfe, + 0x78, 0x9a, 0x8c, 0x03, 0x15, 0x11, 0x85, 0xcb, 0x7d, 0x43, 0x33, 0xc4, 0xd0, 0xca, 0x21, 0x33, + 0x1d, 0x08, 0xcc, 0x8f, 0x80, 0xa8, 0x19, 0x3a, 0x32, 0x3d, 0xc5, 0xf5, 0x1c, 0xa4, 0x76, 0x75, + 0xb3, 0x43, 0x2a, 0x48, 0xae, 0x9a, 0xdd, 0x55, 0x0d, 0x17, 0xc9, 0x13, 0x74, 0xb8, 0xc5, 0x47, + 0x31, 0x82, 0x04, 0x90, 0x13, 0x40, 0x8c, 0x86, 0x10, 0x74, 0xd8, 0x47, 0xcc, 0x7d, 0x3d, 0x07, + 0x85, 0x40, 0x5f, 0x2d, 0x9d, 0x85, 0xe2, 0x0d, 0xf5, 0x96, 0xaa, 0xf0, 0xb3, 0x12, 0xf5, 0x44, + 0x01, 0xcb, 0x36, 0xd9, 0x79, 0xe9, 0x23, 0x30, 0x4d, 0x54, 0xac, 0x9e, 0x87, 0x1c, 0x45, 0x33, + 0x54, 0xd7, 0x25, 0x4e, 0xcb, 0x11, 0x55, 0x09, 0x8f, 0x6d, 0xe0, 0xa1, 0x3a, 0x1f, 0x91, 0x2e, + 0xc2, 0x14, 0x41, 0x74, 0x7b, 0x86, 0xa7, 0xdb, 0x06, 0x52, 0xf0, 0xe9, 0xcd, 0x25, 0x95, 0xc4, + 0xb7, 0x6c, 0x12, 0x6b, 0xac, 0x31, 0x05, 0x6c, 0x91, 0x2b, 0x2d, 0xc3, 0x83, 0x04, 0xd6, 0x41, + 0x26, 0x72, 0x54, 0x0f, 0x29, 0xe8, 0xd3, 0x3d, 0xd5, 0x70, 0x15, 0xd5, 0x6c, 0x2b, 0x7b, 0xaa, + 0xbb, 0x57, 0x9e, 0xc6, 0x04, 0x4b, 0xa9, 0xb2, 0x20, 0x9f, 0xc2, 0x8a, 0x2b, 0x4c, 0xaf, 0x41, + 0xd4, 0x6a, 0x66, 0xfb, 0xe3, 0xaa, 0xbb, 0x27, 0x55, 0xe1, 0x04, 0x61, 0x71, 0x3d, 0x47, 0x37, + 0x3b, 0x8a, 0xb6, 0x87, 0xb4, 0x9b, 0x4a, 0xcf, 0xdb, 0xbd, 0x5c, 0x3e, 0x1d, 0x7c, 0x3f, 0xb1, + 0xb0, 0x45, 0x74, 0xea, 0x58, 0x65, 0xdb, 0xdb, 0xbd, 0x2c, 0xb5, 0xa0, 0x88, 0x17, 0xa3, 0xab, + 0xdf, 0x41, 0xca, 0xae, 0xe5, 0x90, 0xd2, 0x58, 0x1a, 0x92, 0x9a, 0x02, 0x1e, 0x5c, 0xd8, 0x60, + 0x80, 0x35, 0xab, 0x8d, 0xaa, 0xd9, 0xd6, 0x66, 0xa3, 0xb1, 0x2c, 0x17, 0x38, 0xcb, 0x35, 0xcb, + 0xc1, 0x01, 0xd5, 0xb1, 0x7c, 0x07, 0x17, 0x68, 0x40, 0x75, 0x2c, 0xee, 0xde, 0x8b, 0x30, 0xa5, + 0x69, 0x74, 0xce, 0xba, 0xa6, 0xb0, 0x33, 0x96, 0x5b, 0x16, 0x43, 0xce, 0xd2, 0xb4, 0x15, 0xaa, + 0xc0, 0x62, 0xdc, 0x95, 0xae, 0xc0, 0x03, 0x7d, 0x67, 0x05, 0x81, 0x93, 0x03, 0xb3, 0x8c, 0x42, + 0x2f, 0xc2, 0x94, 0xbd, 0x3f, 0x08, 0x94, 0x42, 0x6f, 0xb4, 0xf7, 0xa3, 0xb0, 0x27, 0x61, 0xda, + 0xde, 0xb3, 0x07, 0x71, 0x8f, 0x05, 0x71, 0x92, 0xbd, 0x67, 0x47, 0x81, 0x8f, 0x90, 0x03, 0xb7, + 0x83, 0x34, 0xd5, 0x43, 0xed, 0xf2, 0xc9, 0xa0, 0x7a, 0x60, 0x40, 0x5a, 0x04, 0x51, 0xd3, 0x14, + 0x64, 0xaa, 0x3b, 0x06, 0x52, 0x54, 0x07, 0x99, 0xaa, 0x5b, 0x3e, 0x13, 0x54, 0x2e, 0x69, 0x5a, + 0x83, 0x8c, 0xd6, 0xc8, 0xa0, 0xf4, 0x18, 0x4c, 0x5a, 0x3b, 0x37, 0x34, 0x1a, 0x92, 0x8a, 0xed, + 0xa0, 0x5d, 0xfd, 0xf9, 0xf2, 0xc3, 0xc4, 0xbf, 0x13, 0x78, 0x80, 0x04, 0xe4, 0x26, 0x11, 0x4b, + 0x8f, 0x82, 0xa8, 0xb9, 0x7b, 0xaa, 0x63, 0x93, 0x9c, 0xec, 0xda, 0xaa, 0x86, 0xca, 0x8f, 0x50, + 0x55, 0x2a, 0x5f, 0xe7, 0x62, 0xbc, 0x25, 0xdc, 0xdb, 0xfa, 0xae, 0xc7, 0x19, 0xcf, 0xd1, 0x2d, + 0x41, 0x64, 0x8c, 0x6d, 0x1e, 0x44, 0xec, 0x8a, 0xd0, 0x8b, 0xe7, 0x89, 0x5a, 0xc9, 0xde, 0xb3, + 0x83, 0xef, 0x7d, 0x08, 0xc6, 0xb1, 0x66, 0xff, 0xa5, 0x8f, 0xd2, 0x86, 0xcc, 0xde, 0x0b, 0xbc, + 0xf1, 0x3d, 0xeb, 0x8d, 0xe7, 0xaa, 0x50, 0x0c, 0xc6, 0xa7, 0x94, 0x07, 0x1a, 0xa1, 0xa2, 0x80, + 0x9b, 0x95, 0xfa, 0xc6, 0x32, 0x6e, 0x33, 0x9e, 0x6b, 0x88, 0x29, 0xdc, 0xee, 0xac, 0x36, 0xb7, + 0x1a, 0x8a, 0xbc, 0xbd, 0xbe, 0xd5, 0x5c, 0x6b, 0x88, 0xe9, 0x60, 0x5f, 0xfd, 0xdd, 0x14, 0x94, + 0xc2, 0x47, 0x24, 0xe9, 0xa7, 0xe0, 0x24, 0xbf, 0xcf, 0x70, 0x91, 0xa7, 0xdc, 0xd6, 0x1d, 0xb2, + 0x65, 0xba, 0x2a, 0x2d, 0x5f, 0xfe, 0xa2, 0x4d, 0x33, 0xad, 0x16, 0xf2, 0x9e, 0xd1, 0x1d, 0xbc, + 0x21, 0xba, 0xaa, 0x27, 0xad, 0xc2, 0x19, 0xd3, 0x52, 0x5c, 0x4f, 0x35, 0xdb, 0xaa, 0xd3, 0x56, + 0xfa, 0x37, 0x49, 0x8a, 0xaa, 0x69, 0xc8, 0x75, 0x2d, 0x5a, 0xaa, 0x7c, 0x96, 0x0f, 0x98, 0x56, + 0x8b, 0x29, 0xf7, 0x73, 0x78, 0x8d, 0xa9, 0x46, 0x02, 0x2c, 0x7d, 0x58, 0x80, 0x9d, 0x86, 0x7c, + 0x57, 0xb5, 0x15, 0x64, 0x7a, 0xce, 0x3e, 0x69, 0x8c, 0x73, 0x72, 0xae, 0xab, 0xda, 0x0d, 0xfc, + 0xfc, 0xfe, 0x9c, 0x4f, 0xfe, 0x39, 0x0d, 0xc5, 0x60, 0x73, 0x8c, 0xcf, 0x1a, 0x1a, 0xa9, 0x23, + 0x02, 0xc9, 0x34, 0x0f, 0x1d, 0xd9, 0x4a, 0x2f, 0xd4, 0x71, 0x81, 0xa9, 0x8e, 0xd2, 0x96, 0x55, + 0xa6, 0x48, 0x5c, 0xdc, 0x71, 0x6e, 0x41, 0xb4, 0x45, 0xc8, 0xc9, 0xec, 0x49, 0x5a, 0x81, 0xd1, + 0x1b, 0x2e, 0xe1, 0x1e, 0x25, 0xdc, 0x0f, 0x1f, 0xcd, 0xfd, 0x74, 0x8b, 0x90, 0xe7, 0x9f, 0x6e, + 0x29, 0xeb, 0x1b, 0xf2, 0x5a, 0x6d, 0x55, 0x66, 0x70, 0xe9, 0x14, 0x64, 0x0c, 0xf5, 0xce, 0x7e, + 0xb8, 0x14, 0x11, 0x51, 0x52, 0xc7, 0x9f, 0x82, 0xcc, 0x6d, 0xa4, 0xde, 0x0c, 0x17, 0x00, 0x22, + 0x7a, 0x0f, 0x43, 0x7f, 0x11, 0xb2, 0xc4, 0x5f, 0x12, 0x00, 0xf3, 0x98, 0x38, 0x22, 0xe5, 0x20, + 0x53, 0xdf, 0x90, 0x71, 0xf8, 0x8b, 0x50, 0xa4, 0x52, 0x65, 0xb3, 0xd9, 0xa8, 0x37, 0xc4, 0xd4, + 0xdc, 0x45, 0x18, 0xa5, 0x4e, 0xc0, 0x5b, 0xc3, 0x77, 0x83, 0x38, 0xc2, 0x1e, 0x19, 0x87, 0xc0, + 0x47, 0xb7, 0xd7, 0x96, 0x1a, 0xb2, 0x98, 0x0a, 0x2e, 0xaf, 0x0b, 0xc5, 0x60, 0x5f, 0xfc, 0xfe, + 0xc4, 0xd4, 0xb7, 0x05, 0x28, 0x04, 0xfa, 0x5c, 0xdc, 0xa0, 0xa8, 0x86, 0x61, 0xdd, 0x56, 0x54, + 0x43, 0x57, 0x5d, 0x16, 0x14, 0x40, 0x44, 0x35, 0x2c, 0x49, 0xba, 0x68, 0xef, 0x8b, 0xf1, 0xaf, + 0x08, 0x20, 0x46, 0x5b, 0xcc, 0x88, 0x81, 0xc2, 0x4f, 0xd4, 0xc0, 0x97, 0x05, 0x28, 0x85, 0xfb, + 0xca, 0x88, 0x79, 0x67, 0x7f, 0xa2, 0xe6, 0xbd, 0x9e, 0x82, 0xf1, 0x50, 0x37, 0x99, 0xd4, 0xba, + 0x4f, 0xc3, 0xa4, 0xde, 0x46, 0x5d, 0xdb, 0xf2, 0x90, 0xa9, 0xed, 0x2b, 0x06, 0xba, 0x85, 0x8c, + 0xf2, 0x1c, 0x49, 0x14, 0x8b, 0x47, 0xf7, 0xab, 0x0b, 0xcd, 0x3e, 0x6e, 0x15, 0xc3, 0xaa, 0x53, + 0xcd, 0xe5, 0xc6, 0xda, 0xe6, 0xc6, 0x56, 0x63, 0xbd, 0x7e, 0x5d, 0xd9, 0x5e, 0xff, 0x99, 0xf5, + 0x8d, 0x67, 0xd6, 0x65, 0x51, 0x8f, 0xa8, 0xbd, 0x87, 0x5b, 0x7d, 0x13, 0xc4, 0xa8, 0x51, 0xd2, + 0x49, 0x18, 0x66, 0x96, 0x38, 0x22, 0x4d, 0xc1, 0xc4, 0xfa, 0x86, 0xd2, 0x6a, 0x2e, 0x37, 0x94, + 0xc6, 0xb5, 0x6b, 0x8d, 0xfa, 0x56, 0x8b, 0xde, 0x40, 0xf8, 0xda, 0x5b, 0xe1, 0x4d, 0xfd, 0x52, + 0x1a, 0xa6, 0x86, 0x58, 0x22, 0xd5, 0xd8, 0xd9, 0x81, 0x1e, 0x67, 0x3e, 0x9c, 0xc4, 0xfa, 0x05, + 0x5c, 0xf2, 0x37, 0x55, 0xc7, 0x63, 0x47, 0x8d, 0x47, 0x01, 0x7b, 0xc9, 0xf4, 0xf4, 0x5d, 0x1d, + 0x39, 0xec, 0xc2, 0x86, 0x1e, 0x28, 0x26, 0xfa, 0x72, 0x7a, 0x67, 0xf3, 0x21, 0x90, 0x6c, 0xcb, + 0xd5, 0x3d, 0xfd, 0x16, 0x52, 0x74, 0x93, 0xdf, 0xee, 0xe0, 0x03, 0x46, 0x46, 0x16, 0xf9, 0x48, + 0xd3, 0xf4, 0x7c, 0x6d, 0x13, 0x75, 0xd4, 0x88, 0x36, 0x4e, 0xe0, 0x69, 0x59, 0xe4, 0x23, 0xbe, + 0xf6, 0x59, 0x28, 0xb6, 0xad, 0x1e, 0xee, 0xba, 0xa8, 0x1e, 0xae, 0x17, 0x82, 0x5c, 0xa0, 0x32, + 0x5f, 0x85, 0xf5, 0xd3, 0xfd, 0x6b, 0xa5, 0xa2, 0x5c, 0xa0, 0x32, 0xaa, 0x72, 0x0e, 0x26, 0xd4, + 0x4e, 0xc7, 0xc1, 0xe4, 0x9c, 0x88, 0x9e, 0x10, 0x4a, 0xbe, 0x98, 0x28, 0xce, 0x3c, 0x0d, 0x39, + 0xee, 0x07, 0x5c, 0x92, 0xb1, 0x27, 0x14, 0x9b, 0x1e, 0x7b, 0x53, 0xf3, 0x79, 0x39, 0x67, 0xf2, + 0xc1, 0xb3, 0x50, 0xd4, 0x5d, 0xa5, 0x7f, 0x4b, 0x9e, 0x9a, 0x4d, 0xcd, 0xe7, 0xe4, 0x82, 0xee, + 0xfa, 0x37, 0x8c, 0x73, 0xaf, 0xa6, 0xa0, 0x14, 0xbe, 0xe5, 0x97, 0x96, 0x21, 0x67, 0x58, 0x9a, + 0x4a, 0x42, 0x8b, 0x7e, 0x62, 0x9a, 0x8f, 0xf9, 0x30, 0xb0, 0xb0, 0xca, 0xf4, 0x65, 0x1f, 0x39, + 0xf3, 0x8f, 0x02, 0xe4, 0xb8, 0x58, 0x3a, 0x01, 0x19, 0x5b, 0xf5, 0xf6, 0x08, 0x5d, 0x76, 0x29, + 0x25, 0x0a, 0x32, 0x79, 0xc6, 0x72, 0xd7, 0x56, 0x4d, 0x12, 0x02, 0x4c, 0x8e, 0x9f, 0xf1, 0xba, + 0x1a, 0x48, 0x6d, 0x93, 0xe3, 0x87, 0xd5, 0xed, 0x22, 0xd3, 0x73, 0xf9, 0xba, 0x32, 0x79, 0x9d, + 0x89, 0xa5, 0xc7, 0x61, 0xd2, 0x73, 0x54, 0xdd, 0x08, 0xe9, 0x66, 0x88, 0xae, 0xc8, 0x07, 0x7c, + 0xe5, 0x2a, 0x9c, 0xe2, 0xbc, 0x6d, 0xe4, 0xa9, 0xda, 0x1e, 0x6a, 0xf7, 0x41, 0xa3, 0xe4, 0x9a, + 0xe1, 0x24, 0x53, 0x58, 0x66, 0xe3, 0x1c, 0x3b, 0xf7, 0x7d, 0x01, 0x26, 0xf9, 0x81, 0xa9, 0xed, + 0x3b, 0x6b, 0x0d, 0x40, 0x35, 0x4d, 0xcb, 0x0b, 0xba, 0x6b, 0x30, 0x94, 0x07, 0x70, 0x0b, 0x35, + 0x1f, 0x24, 0x07, 0x08, 0x66, 0xba, 0x00, 0xfd, 0x91, 0x43, 0xdd, 0x76, 0x06, 0x0a, 0xec, 0x13, + 0x0e, 0xf9, 0x0e, 0x48, 0x8f, 0xd8, 0x40, 0x45, 0xf8, 0x64, 0x25, 0x4d, 0x43, 0x76, 0x07, 0x75, + 0x74, 0x93, 0x5d, 0xcc, 0xd2, 0x07, 0x7e, 0x11, 0x92, 0xf1, 0x2f, 0x42, 0x96, 0x3e, 0x05, 0x53, + 0x9a, 0xd5, 0x8d, 0x9a, 0xbb, 0x24, 0x46, 0x8e, 0xf9, 0xee, 0xc7, 0x85, 0xe7, 0xa0, 0xdf, 0x62, + 0xbe, 0x23, 0x08, 0x5f, 0x4c, 0xa5, 0x57, 0x36, 0x97, 0xbe, 0x92, 0x9a, 0x59, 0xa1, 0xd0, 0x4d, + 0x3e, 0x53, 0x19, 0xed, 0x1a, 0x48, 0xc3, 0xd6, 0xc3, 0x97, 0x1e, 0x87, 0x0f, 0x77, 0x74, 0x6f, + 0xaf, 0xb7, 0xb3, 0xa0, 0x59, 0xdd, 0xc5, 0x8e, 0xd5, 0xb1, 0xfa, 0x9f, 0x3e, 0xf1, 0x13, 0x79, + 0x20, 0xff, 0xb1, 0xcf, 0x9f, 0x79, 0x5f, 0x3a, 0x13, 0xfb, 0xad, 0xb4, 0xba, 0x0e, 0x53, 0x4c, + 0x59, 0x21, 0xdf, 0x5f, 0xe8, 0x29, 0x42, 0x3a, 0xf2, 0x0e, 0xab, 0xfc, 0xb5, 0x37, 0x48, 0xb9, + 0x96, 0x27, 0x19, 0x14, 0x8f, 0xd1, 0x83, 0x46, 0x55, 0x86, 0x07, 0x42, 0x7c, 0x74, 0x6b, 0x22, + 0x27, 0x86, 0xf1, 0xbb, 0x8c, 0x71, 0x2a, 0xc0, 0xd8, 0x62, 0xd0, 0x6a, 0x1d, 0xc6, 0x8f, 0xc3, + 0xf5, 0xf7, 0x8c, 0xab, 0x88, 0x82, 0x24, 0x2b, 0x30, 0x41, 0x48, 0xb4, 0x9e, 0xeb, 0x59, 0x5d, + 0x92, 0xf7, 0x8e, 0xa6, 0xf9, 0x87, 0x37, 0xe8, 0x5e, 0x29, 0x61, 0x58, 0xdd, 0x47, 0x55, 0xab, + 0x40, 0x3e, 0x39, 0xb5, 0x91, 0x66, 0xc4, 0x30, 0xbc, 0xc6, 0x0c, 0xf1, 0xf5, 0xab, 0x9f, 0x84, + 0x69, 0xfc, 0x3f, 0x49, 0x4b, 0x41, 0x4b, 0xe2, 0x2f, 0xbc, 0xca, 0xdf, 0x7f, 0x81, 0x6e, 0xc7, + 0x29, 0x9f, 0x20, 0x60, 0x53, 0x60, 0x15, 0x3b, 0xc8, 0xf3, 0x90, 0xe3, 0x2a, 0xaa, 0x31, 0xcc, + 0xbc, 0xc0, 0x8d, 0x41, 0xf9, 0x73, 0x6f, 0x85, 0x57, 0x71, 0x85, 0x22, 0x6b, 0x86, 0x51, 0xdd, + 0x86, 0x93, 0x43, 0xa2, 0x22, 0x01, 0xe7, 0x4b, 0x8c, 0x73, 0x7a, 0x20, 0x32, 0x30, 0xed, 0x26, + 0x70, 0xb9, 0xbf, 0x96, 0x09, 0x38, 0x7f, 0x8f, 0x71, 0x4a, 0x0c, 0xcb, 0x97, 0x14, 0x33, 0x3e, + 0x0d, 0x93, 0xb7, 0x90, 0xb3, 0x63, 0xb9, 0xec, 0x96, 0x26, 0x01, 0xdd, 0xcb, 0x8c, 0x6e, 0x82, + 0x01, 0xc9, 0xb5, 0x0d, 0xe6, 0xba, 0x02, 0xb9, 0x5d, 0x55, 0x43, 0x09, 0x28, 0x3e, 0xcf, 0x28, + 0xc6, 0xb0, 0x3e, 0x86, 0xd6, 0xa0, 0xd8, 0xb1, 0x58, 0x65, 0x8a, 0x87, 0xbf, 0xc2, 0xe0, 0x05, + 0x8e, 0x61, 0x14, 0xb6, 0x65, 0xf7, 0x0c, 0x5c, 0xb6, 0xe2, 0x29, 0x7e, 0x9f, 0x53, 0x70, 0x0c, + 0xa3, 0x38, 0x86, 0x5b, 0xff, 0x80, 0x53, 0xb8, 0x01, 0x7f, 0x3e, 0x05, 0x05, 0xcb, 0x34, 0xf6, + 0x2d, 0x33, 0x89, 0x11, 0x5f, 0x60, 0x0c, 0xc0, 0x20, 0x98, 0xe0, 0x2a, 0xe4, 0x93, 0x2e, 0xc4, + 0x1f, 0xbd, 0xc5, 0xb7, 0x07, 0x5f, 0x81, 0x15, 0x98, 0xe0, 0x09, 0x4a, 0xb7, 0xcc, 0x04, 0x14, + 0x5f, 0x62, 0x14, 0xa5, 0x00, 0x8c, 0x4d, 0xc3, 0x43, 0xae, 0xd7, 0x41, 0x49, 0x48, 0x5e, 0xe5, + 0xd3, 0x60, 0x10, 0xe6, 0xca, 0x1d, 0x64, 0x6a, 0x7b, 0xc9, 0x18, 0xbe, 0xcc, 0x5d, 0xc9, 0x31, + 0x98, 0xa2, 0x0e, 0xe3, 0x5d, 0xd5, 0x71, 0xf7, 0x54, 0x23, 0xd1, 0x72, 0xfc, 0x31, 0xe3, 0x28, + 0xfa, 0x20, 0xe6, 0x91, 0x9e, 0x79, 0x1c, 0x9a, 0xaf, 0x70, 0x8f, 0x04, 0x60, 0x6c, 0xeb, 0xb9, + 0x1e, 0xb9, 0xd2, 0x3a, 0x0e, 0xdb, 0x9f, 0xf0, 0xad, 0x47, 0xb1, 0x6b, 0x41, 0xc6, 0xab, 0x90, + 0x77, 0xf5, 0x3b, 0x89, 0x68, 0xfe, 0x94, 0xaf, 0x34, 0x01, 0x60, 0xf0, 0x75, 0x38, 0x35, 0xb4, + 0x4c, 0x24, 0x20, 0xfb, 0x33, 0x46, 0x76, 0x62, 0x48, 0xa9, 0x60, 0x29, 0xe1, 0xb8, 0x94, 0x7f, + 0xce, 0x53, 0x02, 0x8a, 0x70, 0x6d, 0xe2, 0xb3, 0x82, 0xab, 0xee, 0x1e, 0xcf, 0x6b, 0x7f, 0xc1, + 0xbd, 0x46, 0xb1, 0x21, 0xaf, 0x6d, 0xc1, 0x09, 0xc6, 0x78, 0xbc, 0x75, 0xfd, 0x2a, 0x4f, 0xac, + 0x14, 0xbd, 0x1d, 0x5e, 0xdd, 0x4f, 0xc1, 0x8c, 0xef, 0x4e, 0xde, 0x94, 0xba, 0x4a, 0x57, 0xb5, + 0x13, 0x30, 0x7f, 0x8d, 0x31, 0xf3, 0x8c, 0xef, 0x77, 0xb5, 0xee, 0x9a, 0x6a, 0x63, 0xf2, 0x67, + 0xa1, 0xcc, 0xc9, 0x7b, 0xa6, 0x83, 0x34, 0xab, 0x63, 0xea, 0x77, 0x50, 0x3b, 0x01, 0xf5, 0x5f, + 0x46, 0x96, 0x6a, 0x3b, 0x00, 0xc7, 0xcc, 0x4d, 0x10, 0xfd, 0x5e, 0x45, 0xd1, 0xbb, 0xb6, 0xe5, + 0x78, 0x31, 0x8c, 0x5f, 0xe7, 0x2b, 0xe5, 0xe3, 0x9a, 0x04, 0x56, 0x6d, 0x40, 0x89, 0x3c, 0x26, + 0x0d, 0xc9, 0xbf, 0x62, 0x44, 0xe3, 0x7d, 0x14, 0x4b, 0x1c, 0x9a, 0xd5, 0xb5, 0x55, 0x27, 0x49, + 0xfe, 0xfb, 0x6b, 0x9e, 0x38, 0x18, 0x84, 0x25, 0x0e, 0x6f, 0xdf, 0x46, 0xb8, 0xda, 0x27, 0x60, + 0xf8, 0x06, 0x4f, 0x1c, 0x1c, 0xc3, 0x28, 0x78, 0xc3, 0x90, 0x80, 0xe2, 0x6f, 0x38, 0x05, 0xc7, + 0x60, 0x8a, 0x4f, 0xf4, 0x0b, 0xad, 0x83, 0x3a, 0xba, 0xeb, 0x39, 0xb4, 0x15, 0x3e, 0x9a, 0xea, + 0x9b, 0x6f, 0x85, 0x9b, 0x30, 0x39, 0x00, 0xc5, 0x99, 0x88, 0x5d, 0xa1, 0x92, 0x93, 0x52, 0xbc, + 0x61, 0xdf, 0xe2, 0x99, 0x28, 0x00, 0xc3, 0xb6, 0x05, 0x3a, 0x44, 0xec, 0x76, 0x0d, 0x9f, 0x0f, + 0x12, 0xd0, 0x7d, 0x3b, 0x62, 0x5c, 0x8b, 0x63, 0x31, 0x67, 0xa0, 0xff, 0xe9, 0x99, 0x37, 0xd1, + 0x7e, 0xa2, 0xe8, 0xfc, 0xdb, 0x48, 0xff, 0xb3, 0x4d, 0x91, 0x34, 0x87, 0x4c, 0x44, 0xfa, 0x29, + 0x29, 0xee, 0xc7, 0x3a, 0xe5, 0x9f, 0xbf, 0xcf, 0xe6, 0x1b, 0x6e, 0xa7, 0xaa, 0xab, 0x38, 0xc8, + 0xc3, 0x4d, 0x4f, 0x3c, 0xd9, 0x0b, 0xf7, 0xfd, 0x38, 0x0f, 0xf5, 0x3c, 0xd5, 0x6b, 0x30, 0x1e, + 0x6a, 0x78, 0xe2, 0xa9, 0x3e, 0xc3, 0xa8, 0x8a, 0xc1, 0x7e, 0xa7, 0x7a, 0x11, 0x32, 0xb8, 0x79, + 0x89, 0x87, 0xff, 0x02, 0x83, 0x13, 0xf5, 0xea, 0x47, 0x21, 0xc7, 0x9b, 0x96, 0x78, 0xe8, 0x2f, + 0x32, 0xa8, 0x0f, 0xc1, 0x70, 0xde, 0xb0, 0xc4, 0xc3, 0x7f, 0x89, 0xc3, 0x39, 0x04, 0xc3, 0x93, + 0xbb, 0xf0, 0x3b, 0xbf, 0x92, 0x61, 0x45, 0x87, 0xfb, 0xee, 0x2a, 0x8c, 0xb1, 0x4e, 0x25, 0x1e, + 0xfd, 0x22, 0x7b, 0x39, 0x47, 0x54, 0x9f, 0x84, 0x6c, 0x42, 0x87, 0xff, 0x2a, 0x83, 0x52, 0xfd, + 0x6a, 0x1d, 0x0a, 0x81, 0xee, 0x24, 0x1e, 0xfe, 0x6b, 0x0c, 0x1e, 0x44, 0x61, 0xd3, 0x59, 0x77, + 0x12, 0x4f, 0xf0, 0xeb, 0xdc, 0x74, 0x86, 0xc0, 0x6e, 0xe3, 0x8d, 0x49, 0x3c, 0xfa, 0x37, 0xb8, + 0xd7, 0x39, 0xa4, 0xfa, 0x14, 0xe4, 0xfd, 0x62, 0x13, 0x8f, 0xff, 0x4d, 0x86, 0xef, 0x63, 0xb0, + 0x07, 0x02, 0xc5, 0x2e, 0x9e, 0xe2, 0xb7, 0xb8, 0x07, 0x02, 0x28, 0xbc, 0x8d, 0xa2, 0x0d, 0x4c, + 0x3c, 0xd3, 0x6f, 0xf3, 0x6d, 0x14, 0xe9, 0x5f, 0xf0, 0x6a, 0x92, 0x9c, 0x1f, 0x4f, 0xf1, 0x3b, + 0x7c, 0x35, 0x89, 0x3e, 0x36, 0x23, 0xda, 0x11, 0xc4, 0x73, 0xfc, 0x2e, 0x37, 0x23, 0xd2, 0x10, + 0x54, 0x37, 0x41, 0x1a, 0xec, 0x06, 0xe2, 0xf9, 0x3e, 0xcb, 0xf8, 0x26, 0x07, 0x9a, 0x81, 0xea, + 0x33, 0x70, 0x62, 0x78, 0x27, 0x10, 0xcf, 0xfa, 0xb9, 0xfb, 0x91, 0xb3, 0x5b, 0xb0, 0x11, 0xa8, + 0x6e, 0xf5, 0x4b, 0x4a, 0xb0, 0x0b, 0x88, 0xa7, 0x7d, 0xe9, 0x7e, 0x38, 0x71, 0x07, 0x9b, 0x80, + 0x6a, 0x0d, 0xa0, 0x5f, 0x80, 0xe3, 0xb9, 0x5e, 0x66, 0x5c, 0x01, 0x10, 0xde, 0x1a, 0xac, 0xfe, + 0xc6, 0xe3, 0x3f, 0xcf, 0xb7, 0x06, 0x43, 0xe0, 0xad, 0xc1, 0x4b, 0x6f, 0x3c, 0xfa, 0x15, 0xbe, + 0x35, 0x38, 0x04, 0x47, 0x76, 0xa0, 0xba, 0xc5, 0x33, 0x7c, 0x81, 0x47, 0x76, 0x00, 0x55, 0x5d, + 0x87, 0xc9, 0x81, 0x82, 0x18, 0x4f, 0xf5, 0x45, 0x46, 0x25, 0x46, 0xeb, 0x61, 0xb0, 0x78, 0xb1, + 0x62, 0x18, 0xcf, 0xf6, 0x87, 0x91, 0xe2, 0xc5, 0x6a, 0x61, 0xf5, 0x2a, 0xe4, 0xcc, 0x9e, 0x61, + 0xe0, 0xcd, 0x23, 0x1d, 0xfd, 0x03, 0xbb, 0xf2, 0xbf, 0xbf, 0xcb, 0xbc, 0xc3, 0x01, 0xd5, 0x8b, + 0x90, 0x45, 0xdd, 0x1d, 0xd4, 0x8e, 0x43, 0xfe, 0xc7, 0xbb, 0x3c, 0x61, 0x62, 0xed, 0xea, 0x53, + 0x00, 0xf4, 0x6a, 0x84, 0x7c, 0xf6, 0x8b, 0xc1, 0xfe, 0xe7, 0xbb, 0xec, 0xa7, 0x2f, 0x7d, 0x48, + 0x9f, 0x80, 0xfe, 0x90, 0xe6, 0x68, 0x82, 0xb7, 0xc2, 0x04, 0x64, 0x45, 0xae, 0xc0, 0xd8, 0x0d, + 0xd7, 0x32, 0x3d, 0xb5, 0x13, 0x87, 0xfe, 0x2f, 0x86, 0xe6, 0xfa, 0xd8, 0x61, 0x5d, 0xcb, 0x41, + 0x9e, 0xda, 0x71, 0xe3, 0xb0, 0xff, 0xcd, 0xb0, 0x3e, 0x00, 0x83, 0x35, 0xd5, 0xf5, 0x92, 0xcc, + 0xfb, 0x87, 0x1c, 0xcc, 0x01, 0xd8, 0x68, 0xfc, 0xff, 0x4d, 0xb4, 0x1f, 0x87, 0x7d, 0x9b, 0x1b, + 0xcd, 0xf4, 0xab, 0x1f, 0x85, 0x3c, 0xfe, 0x97, 0xfe, 0x9e, 0x2d, 0x06, 0xfc, 0x3f, 0x0c, 0xdc, + 0x47, 0xe0, 0x37, 0xbb, 0x5e, 0xdb, 0xd3, 0xe3, 0x9d, 0xfd, 0xbf, 0x6c, 0xa5, 0xb9, 0x7e, 0xb5, + 0x06, 0x05, 0xd7, 0x6b, 0xb7, 0x7b, 0xac, 0x3f, 0x8d, 0x81, 0xff, 0xdf, 0xbb, 0xfe, 0x95, 0x85, + 0x8f, 0xc1, 0xab, 0x7d, 0xfb, 0xa6, 0x67, 0x5b, 0xe4, 0x33, 0x47, 0x1c, 0xc3, 0x7d, 0xc6, 0x10, + 0x80, 0x2c, 0x35, 0x86, 0x5f, 0xdf, 0xc2, 0x8a, 0xb5, 0x62, 0xd1, 0x8b, 0xdb, 0xe7, 0xe6, 0xe2, + 0x6f, 0x60, 0xe1, 0xc5, 0x2c, 0x9c, 0xd6, 0xac, 0xee, 0x8e, 0xe5, 0x2e, 0xee, 0x58, 0xde, 0xde, + 0xa2, 0xef, 0x1f, 0x7e, 0x2d, 0xeb, 0x0b, 0x66, 0x8e, 0x77, 0xa1, 0x3b, 0xf7, 0x77, 0x69, 0xc8, + 0xd5, 0x55, 0xd7, 0x53, 0x6f, 0xab, 0xfb, 0x92, 0x0d, 0x53, 0xf8, 0xff, 0x35, 0xd5, 0x26, 0xd7, + 0x83, 0x6c, 0x1f, 0xb3, 0x3b, 0xf3, 0x0f, 0x2d, 0xf4, 0xdf, 0xca, 0x11, 0x0b, 0x43, 0xd4, 0xc9, + 0x6f, 0x0d, 0x96, 0xc4, 0xd7, 0xfe, 0xe5, 0xcc, 0xc8, 0x2f, 0xff, 0xeb, 0x99, 0xdc, 0xda, 0xfe, + 0x33, 0xba, 0xe1, 0x5a, 0xa6, 0x3c, 0x8c, 0x5a, 0xfa, 0x8c, 0x00, 0xa7, 0x87, 0xc8, 0xd7, 0xd9, + 0x36, 0x67, 0x5f, 0x9e, 0x2e, 0x24, 0x7c, 0x35, 0x87, 0x51, 0x13, 0x8a, 0xa1, 0xd7, 0x1f, 0xf5, + 0x9a, 0x99, 0xeb, 0x50, 0x3e, 0x6c, 0x26, 0x92, 0x08, 0xe9, 0x9b, 0x68, 0x9f, 0xfd, 0x60, 0x11, + 0xff, 0x2b, 0x9d, 0xeb, 0xff, 0xac, 0x53, 0x98, 0x2f, 0x9c, 0x9f, 0x0c, 0x58, 0xc7, 0x5e, 0x46, + 0xc7, 0xab, 0xa9, 0xcb, 0xc2, 0x8c, 0x0a, 0xb3, 0x71, 0x96, 0xfe, 0x98, 0xaf, 0x98, 0xab, 0xc0, + 0x28, 0x15, 0x4a, 0xd3, 0x90, 0x6d, 0x9a, 0xde, 0xa5, 0x0b, 0x84, 0x2a, 0x2d, 0xd3, 0x87, 0xa5, + 0xd5, 0xd7, 0xee, 0x55, 0x46, 0xbe, 0x77, 0xaf, 0x32, 0xf2, 0x4f, 0xf7, 0x2a, 0x23, 0xaf, 0xdf, + 0xab, 0x08, 0x6f, 0xde, 0xab, 0x08, 0x6f, 0xdf, 0xab, 0x08, 0xef, 0xdc, 0xab, 0x08, 0x77, 0x0f, + 0x2a, 0xc2, 0x97, 0x0f, 0x2a, 0xc2, 0x57, 0x0f, 0x2a, 0xc2, 0x37, 0x0f, 0x2a, 0xc2, 0x77, 0x0e, + 0x2a, 0xc2, 0x6b, 0x07, 0x15, 0xe1, 0x7b, 0x07, 0x15, 0xe1, 0xf5, 0x83, 0x8a, 0xf0, 0xe6, 0x41, + 0x65, 0xe4, 0xed, 0x83, 0x8a, 0xf0, 0xce, 0x41, 0x65, 0xe4, 0xee, 0x0f, 0x2a, 0x23, 0xff, 0x1f, + 0x00, 0x00, 0xff, 0xff, 0xfc, 0xe4, 0xa0, 0x05, 0x27, 0x35, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -885,6 +890,9 @@ return dAtA } func (m *Castaway) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.CastMapValueMessage) > 0 { @@ -916,6 +924,9 @@ } func (m *Wilson) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/combos/marshaler/castvalue.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/combos/marshaler/castvalue.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/combos/marshaler/castvalue.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/combos/marshaler/castvalue.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -123,253 +123,258 @@ func CastvalueDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3929 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0x1b, 0xd7, - 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0x79, 0x49, 0x4b, 0x10, 0x9d, 0x40, 0x14, 0x6d, - 0x47, 0xb4, 0x9d, 0x90, 0x19, 0x59, 0x92, 0x25, 0xa8, 0x89, 0x0b, 0x82, 0x10, 0x03, 0x97, 0x7f, - 0x59, 0x90, 0xb1, 0xe5, 0x4c, 0x67, 0x67, 0xb9, 0xb8, 0x00, 0x57, 0x5a, 0xec, 0x6e, 0x76, 0x17, - 0x92, 0xa9, 0xe9, 0x83, 0x3a, 0x4e, 0xdb, 0x49, 0x3b, 0x4d, 0x7f, 0x67, 0x9a, 0xb8, 0x8e, 0xdb, - 0x74, 0x26, 0x75, 0x9a, 0xfe, 0x25, 0x4d, 0x9b, 0x26, 0x7d, 0x4a, 0x1f, 0xd2, 0xfa, 0xa9, 0x93, - 0xbc, 0xf5, 0xa1, 0xd3, 0x5a, 0x8c, 0x67, 0xea, 0xb6, 0x6e, 0xe3, 0xb6, 0x7e, 0xf0, 0x8c, 0x5f, - 0x3a, 0xf7, 0x6f, 0xb1, 0x0b, 0x80, 0x5c, 0x30, 0x1d, 0x3b, 0x4f, 0xc4, 0x9e, 0x7b, 0xbe, 0x6f, - 0xcf, 0x3d, 0xf7, 0xdc, 0x73, 0xce, 0xbd, 0x4b, 0xf8, 0xd1, 0x55, 0x98, 0x6f, 0xdb, 0x76, 0xdb, - 0xc4, 0xcb, 0x8e, 0x6b, 0xfb, 0xf6, 0x5e, 0xb7, 0xb5, 0xdc, 0xc4, 0x9e, 0xee, 0x1a, 0x8e, 0x6f, - 0xbb, 0x4b, 0x54, 0x86, 0xa6, 0x98, 0xc6, 0x92, 0xd0, 0x58, 0xd8, 0x80, 0xe9, 0xeb, 0x86, 0x89, - 0x57, 0x03, 0xc5, 0x06, 0xf6, 0xd1, 0x15, 0x48, 0xb5, 0x0c, 0x13, 0x17, 0xa5, 0xf9, 0xe4, 0x62, - 0xee, 0xc2, 0xc3, 0x4b, 0x7d, 0xa0, 0xa5, 0x28, 0x62, 0x9b, 0x88, 0x15, 0x8a, 0x58, 0x78, 0x3d, - 0x05, 0x33, 0x43, 0x46, 0x11, 0x82, 0x94, 0xa5, 0x75, 0x08, 0xa3, 0xb4, 0x98, 0x55, 0xe8, 0x6f, - 0x54, 0x84, 0x09, 0x47, 0xd3, 0x6f, 0x69, 0x6d, 0x5c, 0x4c, 0x50, 0xb1, 0x78, 0x44, 0x25, 0x80, - 0x26, 0x76, 0xb0, 0xd5, 0xc4, 0x96, 0x7e, 0x50, 0x4c, 0xce, 0x27, 0x17, 0xb3, 0x4a, 0x48, 0x82, - 0x1e, 0x87, 0x69, 0xa7, 0xbb, 0x67, 0x1a, 0xba, 0x1a, 0x52, 0x83, 0xf9, 0xe4, 0x62, 0x5a, 0x91, - 0xd9, 0xc0, 0x6a, 0x4f, 0xf9, 0x3c, 0x4c, 0xdd, 0xc1, 0xda, 0xad, 0xb0, 0x6a, 0x8e, 0xaa, 0x16, - 0x88, 0x38, 0xa4, 0x58, 0x85, 0x7c, 0x07, 0x7b, 0x9e, 0xd6, 0xc6, 0xaa, 0x7f, 0xe0, 0xe0, 0x62, - 0x8a, 0xce, 0x7e, 0x7e, 0x60, 0xf6, 0xfd, 0x33, 0xcf, 0x71, 0xd4, 0xce, 0x81, 0x83, 0x51, 0x05, - 0xb2, 0xd8, 0xea, 0x76, 0x18, 0x43, 0xfa, 0x08, 0xff, 0xd5, 0xac, 0x6e, 0xa7, 0x9f, 0x25, 0x43, - 0x60, 0x9c, 0x62, 0xc2, 0xc3, 0xee, 0x6d, 0x43, 0xc7, 0xc5, 0x71, 0x4a, 0x70, 0x7e, 0x80, 0xa0, - 0xc1, 0xc6, 0xfb, 0x39, 0x04, 0x0e, 0x55, 0x21, 0x8b, 0x9f, 0xf7, 0xb1, 0xe5, 0x19, 0xb6, 0x55, - 0x9c, 0xa0, 0x24, 0x8f, 0x0c, 0x59, 0x45, 0x6c, 0x36, 0xfb, 0x29, 0x7a, 0x38, 0x74, 0x19, 0x26, - 0x6c, 0xc7, 0x37, 0x6c, 0xcb, 0x2b, 0x66, 0xe6, 0xa5, 0xc5, 0xdc, 0x85, 0x0f, 0x0c, 0x0d, 0x84, - 0x2d, 0xa6, 0xa3, 0x08, 0x65, 0x54, 0x07, 0xd9, 0xb3, 0xbb, 0xae, 0x8e, 0x55, 0xdd, 0x6e, 0x62, - 0xd5, 0xb0, 0x5a, 0x76, 0x31, 0x4b, 0x09, 0xce, 0x0e, 0x4e, 0x84, 0x2a, 0x56, 0xed, 0x26, 0xae, - 0x5b, 0x2d, 0x5b, 0x29, 0x78, 0x91, 0x67, 0x74, 0x0a, 0xc6, 0xbd, 0x03, 0xcb, 0xd7, 0x9e, 0x2f, - 0xe6, 0x69, 0x84, 0xf0, 0xa7, 0x85, 0xef, 0x8c, 0xc3, 0xd4, 0x28, 0x21, 0x76, 0x0d, 0xd2, 0x2d, - 0x32, 0xcb, 0x62, 0xe2, 0x24, 0x3e, 0x60, 0x98, 0xa8, 0x13, 0xc7, 0x7f, 0x4c, 0x27, 0x56, 0x20, - 0x67, 0x61, 0xcf, 0xc7, 0x4d, 0x16, 0x11, 0xc9, 0x11, 0x63, 0x0a, 0x18, 0x68, 0x30, 0xa4, 0x52, - 0x3f, 0x56, 0x48, 0x3d, 0x0b, 0x53, 0x81, 0x49, 0xaa, 0xab, 0x59, 0x6d, 0x11, 0x9b, 0xcb, 0x71, - 0x96, 0x2c, 0xd5, 0x04, 0x4e, 0x21, 0x30, 0xa5, 0x80, 0x23, 0xcf, 0x68, 0x15, 0xc0, 0xb6, 0xb0, - 0xdd, 0x52, 0x9b, 0x58, 0x37, 0x8b, 0x99, 0x23, 0xbc, 0xb4, 0x45, 0x54, 0x06, 0xbc, 0x64, 0x33, - 0xa9, 0x6e, 0xa2, 0xab, 0xbd, 0x50, 0x9b, 0x38, 0x22, 0x52, 0x36, 0xd8, 0x26, 0x1b, 0x88, 0xb6, - 0x5d, 0x28, 0xb8, 0x98, 0xc4, 0x3d, 0x6e, 0xf2, 0x99, 0x65, 0xa9, 0x11, 0x4b, 0xb1, 0x33, 0x53, - 0x38, 0x8c, 0x4d, 0x6c, 0xd2, 0x0d, 0x3f, 0xa2, 0x87, 0x20, 0x10, 0xa8, 0x34, 0xac, 0x80, 0x66, - 0xa1, 0xbc, 0x10, 0x6e, 0x6a, 0x1d, 0x3c, 0x77, 0x17, 0x0a, 0x51, 0xf7, 0xa0, 0x59, 0x48, 0x7b, - 0xbe, 0xe6, 0xfa, 0x34, 0x0a, 0xd3, 0x0a, 0x7b, 0x40, 0x32, 0x24, 0xb1, 0xd5, 0xa4, 0x59, 0x2e, - 0xad, 0x90, 0x9f, 0xe8, 0xa7, 0x7b, 0x13, 0x4e, 0xd2, 0x09, 0x7f, 0x68, 0x70, 0x45, 0x23, 0xcc, - 0xfd, 0xf3, 0x9e, 0x7b, 0x12, 0x26, 0x23, 0x13, 0x18, 0xf5, 0xd5, 0x0b, 0x3f, 0x07, 0x0f, 0x0c, - 0xa5, 0x46, 0xcf, 0xc2, 0x6c, 0xd7, 0x32, 0x2c, 0x1f, 0xbb, 0x8e, 0x8b, 0x49, 0xc4, 0xb2, 0x57, - 0x15, 0xff, 0x75, 0xe2, 0x88, 0x98, 0xdb, 0x0d, 0x6b, 0x33, 0x16, 0x65, 0xa6, 0x3b, 0x28, 0x7c, - 0x2c, 0x9b, 0x79, 0x63, 0x42, 0xbe, 0x77, 0xef, 0xde, 0xbd, 0xc4, 0xc2, 0x17, 0xc6, 0x61, 0x76, - 0xd8, 0x9e, 0x19, 0xba, 0x7d, 0x4f, 0xc1, 0xb8, 0xd5, 0xed, 0xec, 0x61, 0x97, 0x3a, 0x29, 0xad, - 0xf0, 0x27, 0x54, 0x81, 0xb4, 0xa9, 0xed, 0x61, 0xb3, 0x98, 0x9a, 0x97, 0x16, 0x0b, 0x17, 0x1e, - 0x1f, 0x69, 0x57, 0x2e, 0xad, 0x13, 0x88, 0xc2, 0x90, 0xe8, 0xe3, 0x90, 0xe2, 0x29, 0x9a, 0x30, - 0x3c, 0x36, 0x1a, 0x03, 0xd9, 0x4b, 0x0a, 0xc5, 0xa1, 0x07, 0x21, 0x4b, 0xfe, 0xb2, 0xd8, 0x18, - 0xa7, 0x36, 0x67, 0x88, 0x80, 0xc4, 0x05, 0x9a, 0x83, 0x0c, 0xdd, 0x26, 0x4d, 0x2c, 0x4a, 0x5b, - 0xf0, 0x4c, 0x02, 0xab, 0x89, 0x5b, 0x5a, 0xd7, 0xf4, 0xd5, 0xdb, 0x9a, 0xd9, 0xc5, 0x34, 0xe0, - 0xb3, 0x4a, 0x9e, 0x0b, 0x3f, 0x45, 0x64, 0xe8, 0x2c, 0xe4, 0xd8, 0xae, 0x32, 0xac, 0x26, 0x7e, - 0x9e, 0x66, 0xcf, 0xb4, 0xc2, 0x36, 0x5a, 0x9d, 0x48, 0xc8, 0xeb, 0x6f, 0x7a, 0xb6, 0x25, 0x42, - 0x93, 0xbe, 0x82, 0x08, 0xe8, 0xeb, 0x9f, 0xec, 0x4f, 0xdc, 0x1f, 0x1c, 0x3e, 0xbd, 0xfe, 0x98, - 0x5a, 0xf8, 0x56, 0x02, 0x52, 0x34, 0x5f, 0x4c, 0x41, 0x6e, 0xe7, 0xc6, 0x76, 0x4d, 0x5d, 0xdd, - 0xda, 0x5d, 0x59, 0xaf, 0xc9, 0x12, 0x2a, 0x00, 0x50, 0xc1, 0xf5, 0xf5, 0xad, 0xca, 0x8e, 0x9c, - 0x08, 0x9e, 0xeb, 0x9b, 0x3b, 0x97, 0x2f, 0xca, 0xc9, 0x00, 0xb0, 0xcb, 0x04, 0xa9, 0xb0, 0xc2, - 0x13, 0x17, 0xe4, 0x34, 0x92, 0x21, 0xcf, 0x08, 0xea, 0xcf, 0xd6, 0x56, 0x2f, 0x5f, 0x94, 0xc7, - 0xa3, 0x92, 0x27, 0x2e, 0xc8, 0x13, 0x68, 0x12, 0xb2, 0x54, 0xb2, 0xb2, 0xb5, 0xb5, 0x2e, 0x67, - 0x02, 0xce, 0xc6, 0x8e, 0x52, 0xdf, 0x5c, 0x93, 0xb3, 0x01, 0xe7, 0x9a, 0xb2, 0xb5, 0xbb, 0x2d, - 0x43, 0xc0, 0xb0, 0x51, 0x6b, 0x34, 0x2a, 0x6b, 0x35, 0x39, 0x17, 0x68, 0xac, 0xdc, 0xd8, 0xa9, - 0x35, 0xe4, 0x7c, 0xc4, 0xac, 0x27, 0x2e, 0xc8, 0x93, 0xc1, 0x2b, 0x6a, 0x9b, 0xbb, 0x1b, 0x72, - 0x01, 0x4d, 0xc3, 0x24, 0x7b, 0x85, 0x30, 0x62, 0xaa, 0x4f, 0x74, 0xf9, 0xa2, 0x2c, 0xf7, 0x0c, - 0x61, 0x2c, 0xd3, 0x11, 0xc1, 0xe5, 0x8b, 0x32, 0x5a, 0xa8, 0x42, 0x9a, 0x46, 0x17, 0x42, 0x50, - 0x58, 0xaf, 0xac, 0xd4, 0xd6, 0xd5, 0xad, 0xed, 0x9d, 0xfa, 0xd6, 0x66, 0x65, 0x5d, 0x96, 0x7a, - 0x32, 0xa5, 0xf6, 0xc9, 0xdd, 0xba, 0x52, 0x5b, 0x95, 0x13, 0x61, 0xd9, 0x76, 0xad, 0xb2, 0x53, - 0x5b, 0x95, 0x93, 0x0b, 0x3a, 0xcc, 0x0e, 0xcb, 0x93, 0x43, 0x77, 0x46, 0x68, 0x89, 0x13, 0x47, - 0x2c, 0x31, 0xe5, 0x1a, 0x58, 0xe2, 0x1f, 0x26, 0x60, 0x66, 0x48, 0xad, 0x18, 0xfa, 0x92, 0xa7, - 0x20, 0xcd, 0x42, 0x94, 0x55, 0xcf, 0x47, 0x87, 0x16, 0x1d, 0x1a, 0xb0, 0x03, 0x15, 0x94, 0xe2, - 0xc2, 0x1d, 0x44, 0xf2, 0x88, 0x0e, 0x82, 0x50, 0x0c, 0xe4, 0xf4, 0x9f, 0x1d, 0xc8, 0xe9, 0xac, - 0xec, 0x5d, 0x1e, 0xa5, 0xec, 0x51, 0xd9, 0xc9, 0x72, 0x7b, 0x7a, 0x48, 0x6e, 0xbf, 0x06, 0xd3, - 0x03, 0x44, 0x23, 0xe7, 0xd8, 0x17, 0x24, 0x28, 0x1e, 0xe5, 0x9c, 0x98, 0x4c, 0x97, 0x88, 0x64, - 0xba, 0x6b, 0xfd, 0x1e, 0x3c, 0x77, 0xf4, 0x22, 0x0c, 0xac, 0xf5, 0x2b, 0x12, 0x9c, 0x1a, 0xde, - 0x29, 0x0e, 0xb5, 0xe1, 0xe3, 0x30, 0xde, 0xc1, 0xfe, 0xbe, 0x2d, 0xba, 0xa5, 0x0f, 0x0d, 0xa9, - 0xc1, 0x64, 0xb8, 0x7f, 0xb1, 0x39, 0x2a, 0x5c, 0xc4, 0x93, 0x47, 0xb5, 0x7b, 0xcc, 0x9a, 0x01, - 0x4b, 0x3f, 0x97, 0x80, 0x07, 0x86, 0x92, 0x0f, 0x35, 0xf4, 0x83, 0x00, 0x86, 0xe5, 0x74, 0x7d, - 0xd6, 0x11, 0xb1, 0x04, 0x9b, 0xa5, 0x12, 0x9a, 0xbc, 0x48, 0xf2, 0xec, 0xfa, 0xc1, 0x78, 0x92, - 0x8e, 0x03, 0x13, 0x51, 0x85, 0x2b, 0x3d, 0x43, 0x53, 0xd4, 0xd0, 0xd2, 0x11, 0x33, 0x1d, 0x08, - 0xcc, 0x8f, 0x82, 0xac, 0x9b, 0x06, 0xb6, 0x7c, 0xd5, 0xf3, 0x5d, 0xac, 0x75, 0x0c, 0xab, 0x4d, - 0x2b, 0x48, 0xa6, 0x9c, 0x6e, 0x69, 0xa6, 0x87, 0x95, 0x29, 0x36, 0xdc, 0x10, 0xa3, 0x04, 0x41, - 0x03, 0xc8, 0x0d, 0x21, 0xc6, 0x23, 0x08, 0x36, 0x1c, 0x20, 0x16, 0xbe, 0x99, 0x81, 0x5c, 0xa8, - 0xaf, 0x46, 0xe7, 0x20, 0x7f, 0x53, 0xbb, 0xad, 0xa9, 0xe2, 0xac, 0xc4, 0x3c, 0x91, 0x23, 0xb2, - 0x6d, 0x7e, 0x5e, 0xfa, 0x28, 0xcc, 0x52, 0x15, 0xbb, 0xeb, 0x63, 0x57, 0xd5, 0x4d, 0xcd, 0xf3, - 0xa8, 0xd3, 0x32, 0x54, 0x15, 0x91, 0xb1, 0x2d, 0x32, 0x54, 0x15, 0x23, 0xe8, 0x12, 0xcc, 0x50, - 0x44, 0xa7, 0x6b, 0xfa, 0x86, 0x63, 0x62, 0x95, 0x9c, 0xde, 0x3c, 0x5a, 0x49, 0x02, 0xcb, 0xa6, - 0x89, 0xc6, 0x06, 0x57, 0x20, 0x16, 0x79, 0x68, 0x15, 0x3e, 0x48, 0x61, 0x6d, 0x6c, 0x61, 0x57, - 0xf3, 0xb1, 0x8a, 0x3f, 0xd3, 0xd5, 0x4c, 0x4f, 0xd5, 0xac, 0xa6, 0xba, 0xaf, 0x79, 0xfb, 0xc5, - 0x59, 0x42, 0xb0, 0x92, 0x28, 0x4a, 0xca, 0x19, 0xa2, 0xb8, 0xc6, 0xf5, 0x6a, 0x54, 0xad, 0x62, - 0x35, 0x3f, 0xa1, 0x79, 0xfb, 0xa8, 0x0c, 0xa7, 0x28, 0x8b, 0xe7, 0xbb, 0x86, 0xd5, 0x56, 0xf5, - 0x7d, 0xac, 0xdf, 0x52, 0xbb, 0x7e, 0xeb, 0x4a, 0xf1, 0xc1, 0xf0, 0xfb, 0xa9, 0x85, 0x0d, 0xaa, - 0x53, 0x25, 0x2a, 0xbb, 0x7e, 0xeb, 0x0a, 0x6a, 0x40, 0x9e, 0x2c, 0x46, 0xc7, 0xb8, 0x8b, 0xd5, - 0x96, 0xed, 0xd2, 0xd2, 0x58, 0x18, 0x92, 0x9a, 0x42, 0x1e, 0x5c, 0xda, 0xe2, 0x80, 0x0d, 0xbb, - 0x89, 0xcb, 0xe9, 0xc6, 0x76, 0xad, 0xb6, 0xaa, 0xe4, 0x04, 0xcb, 0x75, 0xdb, 0x25, 0x01, 0xd5, - 0xb6, 0x03, 0x07, 0xe7, 0x58, 0x40, 0xb5, 0x6d, 0xe1, 0xde, 0x4b, 0x30, 0xa3, 0xeb, 0x6c, 0xce, - 0x86, 0xae, 0xf2, 0x33, 0x96, 0x57, 0x94, 0x23, 0xce, 0xd2, 0xf5, 0x35, 0xa6, 0xc0, 0x63, 0xdc, - 0x43, 0x57, 0xe1, 0x81, 0x9e, 0xb3, 0xc2, 0xc0, 0xe9, 0x81, 0x59, 0xf6, 0x43, 0x2f, 0xc1, 0x8c, - 0x73, 0x30, 0x08, 0x44, 0x91, 0x37, 0x3a, 0x07, 0xfd, 0xb0, 0x27, 0x61, 0xd6, 0xd9, 0x77, 0x06, - 0x71, 0x8f, 0x85, 0x71, 0xc8, 0xd9, 0x77, 0xfa, 0x81, 0x8f, 0xd0, 0x03, 0xb7, 0x8b, 0x75, 0xcd, - 0xc7, 0xcd, 0xe2, 0xe9, 0xb0, 0x7a, 0x68, 0x00, 0x2d, 0x83, 0xac, 0xeb, 0x2a, 0xb6, 0xb4, 0x3d, - 0x13, 0xab, 0x9a, 0x8b, 0x2d, 0xcd, 0x2b, 0x9e, 0x0d, 0x2b, 0x17, 0x74, 0xbd, 0x46, 0x47, 0x2b, - 0x74, 0x10, 0x3d, 0x06, 0xd3, 0xf6, 0xde, 0x4d, 0x9d, 0x85, 0xa4, 0xea, 0xb8, 0xb8, 0x65, 0x3c, - 0x5f, 0x7c, 0x98, 0xfa, 0x77, 0x8a, 0x0c, 0xd0, 0x80, 0xdc, 0xa6, 0x62, 0xf4, 0x28, 0xc8, 0xba, - 0xb7, 0xaf, 0xb9, 0x0e, 0xcd, 0xc9, 0x9e, 0xa3, 0xe9, 0xb8, 0xf8, 0x08, 0x53, 0x65, 0xf2, 0x4d, - 0x21, 0x26, 0x5b, 0xc2, 0xbb, 0x63, 0xb4, 0x7c, 0xc1, 0x78, 0x9e, 0x6d, 0x09, 0x2a, 0xe3, 0x6c, - 0x8b, 0x20, 0x13, 0x57, 0x44, 0x5e, 0xbc, 0x48, 0xd5, 0x0a, 0xce, 0xbe, 0x13, 0x7e, 0xef, 0x43, - 0x30, 0x49, 0x34, 0x7b, 0x2f, 0x7d, 0x94, 0x35, 0x64, 0xce, 0x7e, 0xe8, 0x8d, 0xef, 0x59, 0x6f, - 0xbc, 0x50, 0x86, 0x7c, 0x38, 0x3e, 0x51, 0x16, 0x58, 0x84, 0xca, 0x12, 0x69, 0x56, 0xaa, 0x5b, - 0xab, 0xa4, 0xcd, 0x78, 0xae, 0x26, 0x27, 0x48, 0xbb, 0xb3, 0x5e, 0xdf, 0xa9, 0xa9, 0xca, 0xee, - 0xe6, 0x4e, 0x7d, 0xa3, 0x26, 0x27, 0xc3, 0x7d, 0xf5, 0xf7, 0x12, 0x50, 0x88, 0x1e, 0x91, 0xd0, - 0x4f, 0xc1, 0x69, 0x71, 0x9f, 0xe1, 0x61, 0x5f, 0xbd, 0x63, 0xb8, 0x74, 0xcb, 0x74, 0x34, 0x56, - 0xbe, 0x82, 0x45, 0x9b, 0xe5, 0x5a, 0x0d, 0xec, 0x3f, 0x63, 0xb8, 0x64, 0x43, 0x74, 0x34, 0x1f, - 0xad, 0xc3, 0x59, 0xcb, 0x56, 0x3d, 0x5f, 0xb3, 0x9a, 0x9a, 0xdb, 0x54, 0x7b, 0x37, 0x49, 0xaa, - 0xa6, 0xeb, 0xd8, 0xf3, 0x6c, 0x56, 0xaa, 0x02, 0x96, 0x0f, 0x58, 0x76, 0x83, 0x2b, 0xf7, 0x72, - 0x78, 0x85, 0xab, 0xf6, 0x05, 0x58, 0xf2, 0xa8, 0x00, 0x7b, 0x10, 0xb2, 0x1d, 0xcd, 0x51, 0xb1, - 0xe5, 0xbb, 0x07, 0xb4, 0x31, 0xce, 0x28, 0x99, 0x8e, 0xe6, 0xd4, 0xc8, 0xf3, 0xfb, 0x73, 0x3e, - 0xf9, 0xa7, 0x24, 0xe4, 0xc3, 0xcd, 0x31, 0x39, 0x6b, 0xe8, 0xb4, 0x8e, 0x48, 0x34, 0xd3, 0x3c, - 0x74, 0x6c, 0x2b, 0xbd, 0x54, 0x25, 0x05, 0xa6, 0x3c, 0xce, 0x5a, 0x56, 0x85, 0x21, 0x49, 0x71, - 0x27, 0xb9, 0x05, 0xb3, 0x16, 0x21, 0xa3, 0xf0, 0x27, 0xb4, 0x06, 0xe3, 0x37, 0x3d, 0xca, 0x3d, - 0x4e, 0xb9, 0x1f, 0x3e, 0x9e, 0xfb, 0xe9, 0x06, 0x25, 0xcf, 0x3e, 0xdd, 0x50, 0x37, 0xb7, 0x94, - 0x8d, 0xca, 0xba, 0xc2, 0xe1, 0xe8, 0x0c, 0xa4, 0x4c, 0xed, 0xee, 0x41, 0xb4, 0x14, 0x51, 0xd1, - 0xa8, 0x8e, 0x3f, 0x03, 0xa9, 0x3b, 0x58, 0xbb, 0x15, 0x2d, 0x00, 0x54, 0xf4, 0x1e, 0x86, 0xfe, - 0x32, 0xa4, 0xa9, 0xbf, 0x10, 0x00, 0xf7, 0x98, 0x3c, 0x86, 0x32, 0x90, 0xaa, 0x6e, 0x29, 0x24, - 0xfc, 0x65, 0xc8, 0x33, 0xa9, 0xba, 0x5d, 0xaf, 0x55, 0x6b, 0x72, 0x62, 0xe1, 0x12, 0x8c, 0x33, - 0x27, 0x90, 0xad, 0x11, 0xb8, 0x41, 0x1e, 0xe3, 0x8f, 0x9c, 0x43, 0x12, 0xa3, 0xbb, 0x1b, 0x2b, - 0x35, 0x45, 0x4e, 0x84, 0x97, 0xd7, 0x83, 0x7c, 0xb8, 0x2f, 0x7e, 0x7f, 0x62, 0xea, 0x6f, 0x24, - 0xc8, 0x85, 0xfa, 0x5c, 0xd2, 0xa0, 0x68, 0xa6, 0x69, 0xdf, 0x51, 0x35, 0xd3, 0xd0, 0x3c, 0x1e, - 0x14, 0x40, 0x45, 0x15, 0x22, 0x19, 0x75, 0xd1, 0xde, 0x17, 0xe3, 0x5f, 0x96, 0x40, 0xee, 0x6f, - 0x31, 0xfb, 0x0c, 0x94, 0x7e, 0xa2, 0x06, 0xbe, 0x24, 0x41, 0x21, 0xda, 0x57, 0xf6, 0x99, 0x77, - 0xee, 0x27, 0x6a, 0xde, 0x6b, 0x09, 0x98, 0x8c, 0x74, 0x93, 0xa3, 0x5a, 0xf7, 0x19, 0x98, 0x36, - 0x9a, 0xb8, 0xe3, 0xd8, 0x3e, 0xb6, 0xf4, 0x03, 0xd5, 0xc4, 0xb7, 0xb1, 0x59, 0x5c, 0xa0, 0x89, - 0x62, 0xf9, 0xf8, 0x7e, 0x75, 0xa9, 0xde, 0xc3, 0xad, 0x13, 0x58, 0x79, 0xa6, 0xbe, 0x5a, 0xdb, - 0xd8, 0xde, 0xda, 0xa9, 0x6d, 0x56, 0x6f, 0xa8, 0xbb, 0x9b, 0x3f, 0xb3, 0xb9, 0xf5, 0xcc, 0xa6, - 0x22, 0x1b, 0x7d, 0x6a, 0xef, 0xe1, 0x56, 0xdf, 0x06, 0xb9, 0xdf, 0x28, 0x74, 0x1a, 0x86, 0x99, - 0x25, 0x8f, 0xa1, 0x19, 0x98, 0xda, 0xdc, 0x52, 0x1b, 0xf5, 0xd5, 0x9a, 0x5a, 0xbb, 0x7e, 0xbd, - 0x56, 0xdd, 0x69, 0xb0, 0x1b, 0x88, 0x40, 0x7b, 0x27, 0xba, 0xa9, 0x5f, 0x4c, 0xc2, 0xcc, 0x10, - 0x4b, 0x50, 0x85, 0x9f, 0x1d, 0xd8, 0x71, 0xe6, 0x23, 0xa3, 0x58, 0xbf, 0x44, 0x4a, 0xfe, 0xb6, - 0xe6, 0xfa, 0xfc, 0xa8, 0xf1, 0x28, 0x10, 0x2f, 0x59, 0xbe, 0xd1, 0x32, 0xb0, 0xcb, 0x2f, 0x6c, - 0xd8, 0x81, 0x62, 0xaa, 0x27, 0x67, 0x77, 0x36, 0x1f, 0x06, 0xe4, 0xd8, 0x9e, 0xe1, 0x1b, 0xb7, - 0xb1, 0x6a, 0x58, 0xe2, 0x76, 0x87, 0x1c, 0x30, 0x52, 0x8a, 0x2c, 0x46, 0xea, 0x96, 0x1f, 0x68, - 0x5b, 0xb8, 0xad, 0xf5, 0x69, 0x93, 0x04, 0x9e, 0x54, 0x64, 0x31, 0x12, 0x68, 0x9f, 0x83, 0x7c, - 0xd3, 0xee, 0x92, 0xae, 0x8b, 0xe9, 0x91, 0x7a, 0x21, 0x29, 0x39, 0x26, 0x0b, 0x54, 0x78, 0x3f, - 0xdd, 0xbb, 0x56, 0xca, 0x2b, 0x39, 0x26, 0x63, 0x2a, 0xe7, 0x61, 0x4a, 0x6b, 0xb7, 0x5d, 0x42, - 0x2e, 0x88, 0xd8, 0x09, 0xa1, 0x10, 0x88, 0xa9, 0xe2, 0xdc, 0xd3, 0x90, 0x11, 0x7e, 0x20, 0x25, - 0x99, 0x78, 0x42, 0x75, 0xd8, 0xb1, 0x37, 0xb1, 0x98, 0x55, 0x32, 0x96, 0x18, 0x3c, 0x07, 0x79, - 0xc3, 0x53, 0x7b, 0xb7, 0xe4, 0x89, 0xf9, 0xc4, 0x62, 0x46, 0xc9, 0x19, 0x5e, 0x70, 0xc3, 0xb8, - 0xf0, 0x4a, 0x02, 0x0a, 0xd1, 0x5b, 0x7e, 0xb4, 0x0a, 0x19, 0xd3, 0xd6, 0x35, 0x1a, 0x5a, 0xec, - 0x13, 0xd3, 0x62, 0xcc, 0x87, 0x81, 0xa5, 0x75, 0xae, 0xaf, 0x04, 0xc8, 0xb9, 0x7f, 0x90, 0x20, - 0x23, 0xc4, 0xe8, 0x14, 0xa4, 0x1c, 0xcd, 0xdf, 0xa7, 0x74, 0xe9, 0x95, 0x84, 0x2c, 0x29, 0xf4, - 0x99, 0xc8, 0x3d, 0x47, 0xb3, 0x68, 0x08, 0x70, 0x39, 0x79, 0x26, 0xeb, 0x6a, 0x62, 0xad, 0x49, - 0x8f, 0x1f, 0x76, 0xa7, 0x83, 0x2d, 0xdf, 0x13, 0xeb, 0xca, 0xe5, 0x55, 0x2e, 0x46, 0x8f, 0xc3, - 0xb4, 0xef, 0x6a, 0x86, 0x19, 0xd1, 0x4d, 0x51, 0x5d, 0x59, 0x0c, 0x04, 0xca, 0x65, 0x38, 0x23, - 0x78, 0x9b, 0xd8, 0xd7, 0xf4, 0x7d, 0xdc, 0xec, 0x81, 0xc6, 0xe9, 0x35, 0xc3, 0x69, 0xae, 0xb0, - 0xca, 0xc7, 0x05, 0x76, 0xe1, 0x07, 0x12, 0x4c, 0x8b, 0x03, 0x53, 0x33, 0x70, 0xd6, 0x06, 0x80, - 0x66, 0x59, 0xb6, 0x1f, 0x76, 0xd7, 0x60, 0x28, 0x0f, 0xe0, 0x96, 0x2a, 0x01, 0x48, 0x09, 0x11, - 0xcc, 0x75, 0x00, 0x7a, 0x23, 0x47, 0xba, 0xed, 0x2c, 0xe4, 0xf8, 0x27, 0x1c, 0xfa, 0x1d, 0x90, - 0x1d, 0xb1, 0x81, 0x89, 0xc8, 0xc9, 0x0a, 0xcd, 0x42, 0x7a, 0x0f, 0xb7, 0x0d, 0x8b, 0x5f, 0xcc, - 0xb2, 0x07, 0x71, 0x11, 0x92, 0x0a, 0x2e, 0x42, 0x56, 0x3e, 0x0d, 0x33, 0xba, 0xdd, 0xe9, 0x37, - 0x77, 0x45, 0xee, 0x3b, 0xe6, 0x7b, 0x9f, 0x90, 0x9e, 0x83, 0x5e, 0x8b, 0xf9, 0x8e, 0x24, 0xfd, - 0x41, 0x22, 0xb9, 0xb6, 0xbd, 0xf2, 0xb5, 0xc4, 0xdc, 0x1a, 0x83, 0x6e, 0x8b, 0x99, 0x2a, 0xb8, - 0x65, 0x62, 0x9d, 0x58, 0x0f, 0x5f, 0x59, 0x84, 0x8f, 0xb4, 0x0d, 0x7f, 0xbf, 0xbb, 0xb7, 0xa4, - 0xdb, 0x9d, 0xe5, 0xb6, 0xdd, 0xb6, 0x7b, 0x9f, 0x3e, 0xc9, 0x13, 0x7d, 0xa0, 0xbf, 0xf8, 0xe7, - 0xcf, 0x6c, 0x20, 0x9d, 0x8b, 0xfd, 0x56, 0x5a, 0xde, 0x84, 0x19, 0xae, 0xac, 0xd2, 0xef, 0x2f, - 0xec, 0x14, 0x81, 0x8e, 0xbd, 0xc3, 0x2a, 0x7e, 0xe3, 0x75, 0x5a, 0xae, 0x95, 0x69, 0x0e, 0x25, - 0x63, 0xec, 0xa0, 0x51, 0x56, 0xe0, 0x81, 0x08, 0x1f, 0xdb, 0x9a, 0xd8, 0x8d, 0x61, 0xfc, 0x1e, - 0x67, 0x9c, 0x09, 0x31, 0x36, 0x38, 0xb4, 0x5c, 0x85, 0xc9, 0x93, 0x70, 0xfd, 0x1d, 0xe7, 0xca, - 0xe3, 0x30, 0xc9, 0x1a, 0x4c, 0x51, 0x12, 0xbd, 0xeb, 0xf9, 0x76, 0x87, 0xe6, 0xbd, 0xe3, 0x69, - 0xfe, 0xfe, 0x75, 0xb6, 0x57, 0x0a, 0x04, 0x56, 0x0d, 0x50, 0xe5, 0x32, 0xd0, 0x4f, 0x4e, 0x4d, - 0xac, 0x9b, 0x31, 0x0c, 0xaf, 0x72, 0x43, 0x02, 0xfd, 0xf2, 0xa7, 0x60, 0x96, 0xfc, 0xa6, 0x69, - 0x29, 0x6c, 0x49, 0xfc, 0x85, 0x57, 0xf1, 0x07, 0x2f, 0xb0, 0xed, 0x38, 0x13, 0x10, 0x84, 0x6c, - 0x0a, 0xad, 0x62, 0x1b, 0xfb, 0x3e, 0x76, 0x3d, 0x55, 0x33, 0x87, 0x99, 0x17, 0xba, 0x31, 0x28, - 0x7e, 0xf1, 0xcd, 0xe8, 0x2a, 0xae, 0x31, 0x64, 0xc5, 0x34, 0xcb, 0xbb, 0x70, 0x7a, 0x48, 0x54, - 0x8c, 0xc0, 0xf9, 0x22, 0xe7, 0x9c, 0x1d, 0x88, 0x0c, 0x42, 0xbb, 0x0d, 0x42, 0x1e, 0xac, 0xe5, - 0x08, 0x9c, 0xbf, 0xcb, 0x39, 0x11, 0xc7, 0x8a, 0x25, 0x25, 0x8c, 0x4f, 0xc3, 0xf4, 0x6d, 0xec, - 0xee, 0xd9, 0x1e, 0xbf, 0xa5, 0x19, 0x81, 0xee, 0x25, 0x4e, 0x37, 0xc5, 0x81, 0xf4, 0xda, 0x86, - 0x70, 0x5d, 0x85, 0x4c, 0x4b, 0xd3, 0xf1, 0x08, 0x14, 0x5f, 0xe2, 0x14, 0x13, 0x44, 0x9f, 0x40, - 0x2b, 0x90, 0x6f, 0xdb, 0xbc, 0x32, 0xc5, 0xc3, 0x5f, 0xe6, 0xf0, 0x9c, 0xc0, 0x70, 0x0a, 0xc7, - 0x76, 0xba, 0x26, 0x29, 0x5b, 0xf1, 0x14, 0xbf, 0x27, 0x28, 0x04, 0x86, 0x53, 0x9c, 0xc0, 0xad, - 0xbf, 0x2f, 0x28, 0xbc, 0x90, 0x3f, 0x9f, 0x82, 0x9c, 0x6d, 0x99, 0x07, 0xb6, 0x35, 0x8a, 0x11, - 0x5f, 0xe6, 0x0c, 0xc0, 0x21, 0x84, 0xe0, 0x1a, 0x64, 0x47, 0x5d, 0x88, 0xaf, 0xbc, 0x29, 0xb6, - 0x87, 0x58, 0x81, 0x35, 0x98, 0x12, 0x09, 0xca, 0xb0, 0xad, 0x11, 0x28, 0xfe, 0x90, 0x53, 0x14, - 0x42, 0x30, 0x3e, 0x0d, 0x1f, 0x7b, 0x7e, 0x1b, 0x8f, 0x42, 0xf2, 0x8a, 0x98, 0x06, 0x87, 0x70, - 0x57, 0xee, 0x61, 0x4b, 0xdf, 0x1f, 0x8d, 0xe1, 0xab, 0xc2, 0x95, 0x02, 0x43, 0x28, 0xaa, 0x30, - 0xd9, 0xd1, 0x5c, 0x6f, 0x5f, 0x33, 0x47, 0x5a, 0x8e, 0x3f, 0xe2, 0x1c, 0xf9, 0x00, 0xc4, 0x3d, - 0xd2, 0xb5, 0x4e, 0x42, 0xf3, 0x35, 0xe1, 0x91, 0x10, 0x8c, 0x6f, 0x3d, 0xcf, 0xa7, 0x57, 0x5a, - 0x27, 0x61, 0xfb, 0x63, 0xb1, 0xf5, 0x18, 0x76, 0x23, 0xcc, 0x78, 0x0d, 0xb2, 0x9e, 0x71, 0x77, - 0x24, 0x9a, 0x3f, 0x11, 0x2b, 0x4d, 0x01, 0x04, 0x7c, 0x03, 0xce, 0x0c, 0x2d, 0x13, 0x23, 0x90, - 0xfd, 0x29, 0x27, 0x3b, 0x35, 0xa4, 0x54, 0xf0, 0x94, 0x70, 0x52, 0xca, 0x3f, 0x13, 0x29, 0x01, - 0xf7, 0x71, 0x6d, 0x93, 0xb3, 0x82, 0xa7, 0xb5, 0x4e, 0xe6, 0xb5, 0x3f, 0x17, 0x5e, 0x63, 0xd8, - 0x88, 0xd7, 0x76, 0xe0, 0x14, 0x67, 0x3c, 0xd9, 0xba, 0x7e, 0x5d, 0x24, 0x56, 0x86, 0xde, 0x8d, - 0xae, 0xee, 0xa7, 0x61, 0x2e, 0x70, 0xa7, 0x68, 0x4a, 0x3d, 0xb5, 0xa3, 0x39, 0x23, 0x30, 0x7f, - 0x83, 0x33, 0x8b, 0x8c, 0x1f, 0x74, 0xb5, 0xde, 0x86, 0xe6, 0x10, 0xf2, 0x67, 0xa1, 0x28, 0xc8, - 0xbb, 0x96, 0x8b, 0x75, 0xbb, 0x6d, 0x19, 0x77, 0x71, 0x73, 0x04, 0xea, 0xbf, 0xe8, 0x5b, 0xaa, - 0xdd, 0x10, 0x9c, 0x30, 0xd7, 0x41, 0x0e, 0x7a, 0x15, 0xd5, 0xe8, 0x38, 0xb6, 0xeb, 0xc7, 0x30, - 0x7e, 0x53, 0xac, 0x54, 0x80, 0xab, 0x53, 0x58, 0xb9, 0x06, 0x05, 0xfa, 0x38, 0x6a, 0x48, 0xfe, - 0x25, 0x27, 0x9a, 0xec, 0xa1, 0x78, 0xe2, 0xd0, 0xed, 0x8e, 0xa3, 0xb9, 0xa3, 0xe4, 0xbf, 0xbf, - 0x12, 0x89, 0x83, 0x43, 0x78, 0xe2, 0xf0, 0x0f, 0x1c, 0x4c, 0xaa, 0xfd, 0x08, 0x0c, 0xdf, 0x12, - 0x89, 0x43, 0x60, 0x38, 0x85, 0x68, 0x18, 0x46, 0xa0, 0xf8, 0x6b, 0x41, 0x21, 0x30, 0x84, 0xe2, - 0x93, 0xbd, 0x42, 0xeb, 0xe2, 0xb6, 0xe1, 0xf9, 0x2e, 0x6b, 0x85, 0x8f, 0xa7, 0xfa, 0xf6, 0x9b, - 0xd1, 0x26, 0x4c, 0x09, 0x41, 0x49, 0x26, 0xe2, 0x57, 0xa8, 0xf4, 0xa4, 0x14, 0x6f, 0xd8, 0x77, - 0x44, 0x26, 0x0a, 0xc1, 0xd8, 0xfe, 0x9c, 0xea, 0xeb, 0x55, 0x50, 0xdc, 0x3f, 0xc2, 0x14, 0x7f, - 0xfe, 0x6d, 0xce, 0x15, 0x6d, 0x55, 0xca, 0xeb, 0x24, 0x80, 0xa2, 0x0d, 0x45, 0x3c, 0xd9, 0x0b, - 0x6f, 0x07, 0x31, 0x14, 0xe9, 0x27, 0xca, 0xd7, 0x61, 0x32, 0xd2, 0x4c, 0xc4, 0x53, 0x7d, 0x96, - 0x53, 0xe5, 0xc3, 0xbd, 0x44, 0xf9, 0x12, 0xa4, 0x48, 0x63, 0x10, 0x0f, 0xff, 0x05, 0x0e, 0xa7, - 0xea, 0xe5, 0x8f, 0x41, 0x46, 0x34, 0x04, 0xf1, 0xd0, 0x5f, 0xe4, 0xd0, 0x00, 0x42, 0xe0, 0xa2, - 0x19, 0x88, 0x87, 0xff, 0x92, 0x80, 0x0b, 0x08, 0x81, 0x8f, 0xee, 0xc2, 0xef, 0xfe, 0x4a, 0x8a, - 0x27, 0x74, 0xe1, 0xbb, 0x6b, 0x30, 0xc1, 0xbb, 0x80, 0x78, 0xf4, 0xe7, 0xf8, 0xcb, 0x05, 0xa2, - 0xfc, 0x24, 0xa4, 0x47, 0x74, 0xf8, 0xaf, 0x72, 0x28, 0xd3, 0x2f, 0x57, 0x21, 0x17, 0xaa, 0xfc, - 0xf1, 0xf0, 0xcf, 0x73, 0x78, 0x18, 0x45, 0x4c, 0xe7, 0x95, 0x3f, 0x9e, 0xe0, 0xd7, 0x84, 0xe9, - 0x1c, 0x41, 0xdc, 0x26, 0x8a, 0x7e, 0x3c, 0xfa, 0xd7, 0x85, 0xd7, 0x05, 0xa4, 0xfc, 0x14, 0x64, - 0x83, 0x44, 0x1e, 0x8f, 0xff, 0x0d, 0x8e, 0xef, 0x61, 0x88, 0x07, 0x42, 0x85, 0x24, 0x9e, 0xe2, - 0x37, 0x85, 0x07, 0x42, 0x28, 0xb2, 0x8d, 0xfa, 0x9b, 0x83, 0x78, 0xa6, 0xdf, 0x12, 0xdb, 0xa8, - 0xaf, 0x37, 0x20, 0xab, 0x49, 0xf3, 0x69, 0x3c, 0xc5, 0x6f, 0x8b, 0xd5, 0xa4, 0xfa, 0xc4, 0x8c, - 0xfe, 0x6a, 0x1b, 0xcf, 0xf1, 0x3b, 0xc2, 0x8c, 0xbe, 0x62, 0x5b, 0xde, 0x06, 0x34, 0x58, 0x69, - 0xe3, 0xf9, 0xbe, 0xc0, 0xf9, 0xa6, 0x07, 0x0a, 0x6d, 0xf9, 0x19, 0x38, 0x35, 0xbc, 0xca, 0xc6, - 0xb3, 0x7e, 0xf1, 0xed, 0xbe, 0x73, 0x51, 0xb8, 0xc8, 0x96, 0x77, 0x7a, 0xe9, 0x3a, 0x5c, 0x61, - 0xe3, 0x69, 0x5f, 0x7c, 0x3b, 0x9a, 0xb1, 0xc3, 0x05, 0xb6, 0x5c, 0x01, 0xe8, 0x15, 0xb7, 0x78, - 0xae, 0x97, 0x38, 0x57, 0x08, 0x44, 0xb6, 0x06, 0xaf, 0x6d, 0xf1, 0xf8, 0x2f, 0x89, 0xad, 0xc1, - 0x11, 0x64, 0x6b, 0x88, 0xb2, 0x16, 0x8f, 0x7e, 0x59, 0x6c, 0x0d, 0x01, 0x21, 0x91, 0x1d, 0xaa, - 0x1c, 0xf1, 0x0c, 0x5f, 0x16, 0x91, 0x1d, 0x42, 0x95, 0xaf, 0x41, 0xc6, 0xea, 0x9a, 0x26, 0x09, - 0x50, 0x74, 0xfc, 0x3f, 0x88, 0x15, 0xff, 0xed, 0x5d, 0x6e, 0x81, 0x00, 0x94, 0x2f, 0x41, 0x1a, - 0x77, 0xf6, 0x70, 0x33, 0x0e, 0xf9, 0xef, 0xef, 0x8a, 0xa4, 0x44, 0xb4, 0xcb, 0x4f, 0x01, 0xb0, - 0xa3, 0x3d, 0xfd, 0x6c, 0x15, 0x83, 0xfd, 0x8f, 0x77, 0xf9, 0xbf, 0x6e, 0xf4, 0x20, 0x3d, 0x02, - 0xf6, 0x8f, 0x20, 0xc7, 0x13, 0xbc, 0x19, 0x25, 0xa0, 0xb3, 0xbe, 0x0a, 0x13, 0x37, 0x3d, 0xdb, - 0xf2, 0xb5, 0x76, 0x1c, 0xfa, 0x3f, 0x39, 0x5a, 0xe8, 0x13, 0x87, 0x75, 0x6c, 0x17, 0xfb, 0x5a, - 0xdb, 0x8b, 0xc3, 0xfe, 0x17, 0xc7, 0x06, 0x00, 0x02, 0xd6, 0x35, 0xcf, 0x1f, 0x65, 0xde, 0x3f, - 0x12, 0x60, 0x01, 0x20, 0x46, 0x93, 0xdf, 0xb7, 0xf0, 0x41, 0x1c, 0xf6, 0x2d, 0x61, 0x34, 0xd7, - 0x2f, 0x7f, 0x0c, 0xb2, 0xe4, 0x27, 0xfb, 0x7f, 0xac, 0x18, 0xf0, 0x7f, 0x73, 0x70, 0x0f, 0x41, - 0xde, 0xec, 0xf9, 0x4d, 0xdf, 0x88, 0x77, 0xf6, 0xff, 0xf0, 0x95, 0x16, 0xfa, 0xe5, 0x0a, 0xe4, - 0x3c, 0xbf, 0xd9, 0xec, 0xf2, 0xfe, 0x2a, 0x06, 0xfe, 0xbf, 0xef, 0x06, 0x47, 0xee, 0x00, 0xb3, - 0x52, 0x1b, 0x7e, 0x7b, 0x08, 0x6b, 0xf6, 0x9a, 0xcd, 0xee, 0x0d, 0x9f, 0x5b, 0x88, 0xbf, 0x00, - 0x84, 0xcf, 0xa7, 0x61, 0x5e, 0xb7, 0x3b, 0x7b, 0xb6, 0xb7, 0x1c, 0x64, 0xac, 0xe5, 0x60, 0x8e, - 0xe2, 0x6a, 0x30, 0x10, 0xcc, 0x9d, 0xec, 0x52, 0x71, 0xe1, 0x6f, 0x93, 0x90, 0xa9, 0x6a, 0x9e, - 0xaf, 0xdd, 0xd1, 0x0e, 0x90, 0x03, 0x33, 0xe4, 0xf7, 0x86, 0xe6, 0xd0, 0x2b, 0x2a, 0xbe, 0x11, - 0xf9, 0xbd, 0xed, 0x87, 0x97, 0x7a, 0x6f, 0x15, 0x88, 0xa5, 0x21, 0xea, 0xf4, 0x7b, 0xf7, 0x8a, - 0xfc, 0xea, 0x3f, 0x9f, 0x1d, 0xfb, 0xe5, 0x7f, 0x39, 0x9b, 0xd9, 0x38, 0x78, 0xc6, 0x30, 0x3d, - 0xdb, 0x52, 0x86, 0x51, 0xa3, 0xcf, 0x4a, 0xf0, 0xe0, 0x10, 0xf9, 0x26, 0xdf, 0xaa, 0xfc, 0xeb, - 0xc7, 0xc5, 0x11, 0x5f, 0x2d, 0x60, 0xcc, 0x84, 0x7c, 0xe4, 0xf5, 0xc7, 0xbd, 0x66, 0xee, 0x06, - 0x14, 0x8f, 0x9a, 0x09, 0x92, 0x21, 0x79, 0x0b, 0x1f, 0xf0, 0x7f, 0x9a, 0x23, 0x3f, 0xd1, 0xf9, - 0xde, 0xbf, 0x16, 0x4a, 0x8b, 0xb9, 0x0b, 0xd3, 0x21, 0xeb, 0xf8, 0xcb, 0xd8, 0x78, 0x39, 0x71, - 0x45, 0x9a, 0xd3, 0x60, 0x3e, 0xce, 0xd2, 0xff, 0xe7, 0x2b, 0x16, 0x4a, 0x30, 0xce, 0x84, 0x68, - 0x16, 0xd2, 0x75, 0xcb, 0xbf, 0x7c, 0x91, 0x52, 0x25, 0x15, 0xf6, 0xb0, 0xb2, 0xfe, 0xea, 0xfd, - 0xd2, 0xd8, 0xf7, 0xef, 0x97, 0xc6, 0xfe, 0xf1, 0x7e, 0x69, 0xec, 0xb5, 0xfb, 0x25, 0xe9, 0x8d, - 0xfb, 0x25, 0xe9, 0xad, 0xfb, 0x25, 0xe9, 0x9d, 0xfb, 0x25, 0xe9, 0xde, 0x61, 0x49, 0xfa, 0xea, - 0x61, 0x49, 0xfa, 0xfa, 0x61, 0x49, 0xfa, 0xf6, 0x61, 0x49, 0xfa, 0xee, 0x61, 0x49, 0x7a, 0xf5, - 0xb0, 0x24, 0x7d, 0xff, 0xb0, 0x34, 0xf6, 0xda, 0x61, 0x49, 0x7a, 0xe3, 0xb0, 0x34, 0xf6, 0xd6, - 0x61, 0x49, 0x7a, 0xe7, 0xb0, 0x34, 0x76, 0xef, 0x87, 0xa5, 0xb1, 0xff, 0x0b, 0x00, 0x00, 0xff, - 0xff, 0x96, 0xdf, 0xa0, 0xf1, 0xab, 0x33, 0x00, 0x00, + // 4012 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xdc, 0xd6, + 0x75, 0x26, 0xf6, 0x87, 0xdc, 0x3d, 0xbb, 0x5c, 0x82, 0x20, 0x2d, 0xad, 0xe8, 0x78, 0x45, 0xd1, + 0x76, 0x44, 0xdb, 0x09, 0x99, 0x91, 0x25, 0x59, 0x5a, 0x35, 0x71, 0x97, 0xcb, 0x15, 0xb3, 0x2e, + 0xff, 0x82, 0x25, 0x63, 0xcb, 0x99, 0x0e, 0x06, 0xc4, 0x5e, 0x2e, 0x21, 0x61, 0x01, 0x04, 0xc0, + 0x4a, 0xa6, 0xa6, 0x0f, 0xea, 0x38, 0x6d, 0x27, 0xed, 0x34, 0xfd, 0x9d, 0x69, 0xe2, 0x3a, 0x6e, + 0x93, 0x4e, 0xe3, 0x34, 0xfd, 0x4b, 0x9a, 0x36, 0x4d, 0xd2, 0x97, 0xf4, 0x21, 0xad, 0x9f, 0x3a, + 0xc9, 0x5b, 0x1f, 0x3a, 0xad, 0xc5, 0x78, 0xa6, 0x6e, 0xeb, 0x36, 0x6e, 0xab, 0x07, 0xcf, 0xe8, + 0xa5, 0x73, 0xff, 0xb0, 0x00, 0x76, 0x49, 0x80, 0xe9, 0xd8, 0x7e, 0x22, 0x71, 0xee, 0xf9, 0x3e, + 0x9c, 0x7b, 0xee, 0xb9, 0xe7, 0x9c, 0x7b, 0xb1, 0xf0, 0xe3, 0xcb, 0x30, 0xdb, 0xb1, 0xac, 0x8e, + 0x81, 0x16, 0x6d, 0xc7, 0xf2, 0xac, 0x9d, 0xde, 0xee, 0x62, 0x1b, 0xb9, 0x9a, 0xa3, 0xdb, 0x9e, + 0xe5, 0x2c, 0x10, 0x99, 0x34, 0x41, 0x35, 0x16, 0xb8, 0xc6, 0xdc, 0x1a, 0x4c, 0x5e, 0xd5, 0x0d, + 0xb4, 0xec, 0x2b, 0xb6, 0x90, 0x27, 0x5d, 0x82, 0xcc, 0xae, 0x6e, 0xa0, 0xb2, 0x30, 0x9b, 0x9e, + 0x2f, 0x9c, 0x7b, 0x64, 0x21, 0x02, 0x5a, 0x08, 0x23, 0x36, 0xb1, 0x58, 0x26, 0x88, 0xb9, 0x37, + 0x32, 0x30, 0x35, 0x64, 0x54, 0x92, 0x20, 0x63, 0xaa, 0x5d, 0xcc, 0x28, 0xcc, 0xe7, 0x65, 0xf2, + 0xbf, 0x54, 0x86, 0x31, 0x5b, 0xd5, 0x6e, 0xa8, 0x1d, 0x54, 0x4e, 0x11, 0x31, 0x7f, 0x94, 0x2a, + 0x00, 0x6d, 0x64, 0x23, 0xb3, 0x8d, 0x4c, 0x6d, 0xbf, 0x9c, 0x9e, 0x4d, 0xcf, 0xe7, 0xe5, 0x80, + 0x44, 0x7a, 0x02, 0x26, 0xed, 0xde, 0x8e, 0xa1, 0x6b, 0x4a, 0x40, 0x0d, 0x66, 0xd3, 0xf3, 0x59, + 0x59, 0xa4, 0x03, 0xcb, 0x7d, 0xe5, 0xb3, 0x30, 0x71, 0x0b, 0xa9, 0x37, 0x82, 0xaa, 0x05, 0xa2, + 0x5a, 0xc2, 0xe2, 0x80, 0x62, 0x1d, 0x8a, 0x5d, 0xe4, 0xba, 0x6a, 0x07, 0x29, 0xde, 0xbe, 0x8d, + 0xca, 0x19, 0x32, 0xfb, 0xd9, 0x81, 0xd9, 0x47, 0x67, 0x5e, 0x60, 0xa8, 0xad, 0x7d, 0x1b, 0x49, + 0x35, 0xc8, 0x23, 0xb3, 0xd7, 0xa5, 0x0c, 0xd9, 0x43, 0xfc, 0xd7, 0x30, 0x7b, 0xdd, 0x28, 0x4b, + 0x0e, 0xc3, 0x18, 0xc5, 0x98, 0x8b, 0x9c, 0x9b, 0xba, 0x86, 0xca, 0xa3, 0x84, 0xe0, 0xec, 0x00, + 0x41, 0x8b, 0x8e, 0x47, 0x39, 0x38, 0x4e, 0xaa, 0x43, 0x1e, 0xbd, 0xe0, 0x21, 0xd3, 0xd5, 0x2d, + 0xb3, 0x3c, 0x46, 0x48, 0x1e, 0x1d, 0xb2, 0x8a, 0xc8, 0x68, 0x47, 0x29, 0xfa, 0x38, 0xe9, 0x22, + 0x8c, 0x59, 0xb6, 0xa7, 0x5b, 0xa6, 0x5b, 0xce, 0xcd, 0x0a, 0xf3, 0x85, 0x73, 0x1f, 0x18, 0x1a, + 0x08, 0x1b, 0x54, 0x47, 0xe6, 0xca, 0x52, 0x13, 0x44, 0xd7, 0xea, 0x39, 0x1a, 0x52, 0x34, 0xab, + 0x8d, 0x14, 0xdd, 0xdc, 0xb5, 0xca, 0x79, 0x42, 0x70, 0x7a, 0x70, 0x22, 0x44, 0xb1, 0x6e, 0xb5, + 0x51, 0xd3, 0xdc, 0xb5, 0xe4, 0x92, 0x1b, 0x7a, 0x96, 0x4e, 0xc0, 0xa8, 0xbb, 0x6f, 0x7a, 0xea, + 0x0b, 0xe5, 0x22, 0x89, 0x10, 0xf6, 0x34, 0xf7, 0x9d, 0x51, 0x98, 0x48, 0x12, 0x62, 0x57, 0x20, + 0xbb, 0x8b, 0x67, 0x59, 0x4e, 0x1d, 0xc7, 0x07, 0x14, 0x13, 0x76, 0xe2, 0xe8, 0x4f, 0xe8, 0xc4, + 0x1a, 0x14, 0x4c, 0xe4, 0x7a, 0xa8, 0x4d, 0x23, 0x22, 0x9d, 0x30, 0xa6, 0x80, 0x82, 0x06, 0x43, + 0x2a, 0xf3, 0x13, 0x85, 0xd4, 0x73, 0x30, 0xe1, 0x9b, 0xa4, 0x38, 0xaa, 0xd9, 0xe1, 0xb1, 0xb9, + 0x18, 0x67, 0xc9, 0x42, 0x83, 0xe3, 0x64, 0x0c, 0x93, 0x4b, 0x28, 0xf4, 0x2c, 0x2d, 0x03, 0x58, + 0x26, 0xb2, 0x76, 0x95, 0x36, 0xd2, 0x8c, 0x72, 0xee, 0x10, 0x2f, 0x6d, 0x60, 0x95, 0x01, 0x2f, + 0x59, 0x54, 0xaa, 0x19, 0xd2, 0xe5, 0x7e, 0xa8, 0x8d, 0x1d, 0x12, 0x29, 0x6b, 0x74, 0x93, 0x0d, + 0x44, 0xdb, 0x36, 0x94, 0x1c, 0x84, 0xe3, 0x1e, 0xb5, 0xd9, 0xcc, 0xf2, 0xc4, 0x88, 0x85, 0xd8, + 0x99, 0xc9, 0x0c, 0x46, 0x27, 0x36, 0xee, 0x04, 0x1f, 0xa5, 0x87, 0xc1, 0x17, 0x28, 0x24, 0xac, + 0x80, 0x64, 0xa1, 0x22, 0x17, 0xae, 0xab, 0x5d, 0x34, 0x73, 0x1b, 0x4a, 0x61, 0xf7, 0x48, 0xd3, + 0x90, 0x75, 0x3d, 0xd5, 0xf1, 0x48, 0x14, 0x66, 0x65, 0xfa, 0x20, 0x89, 0x90, 0x46, 0x66, 0x9b, + 0x64, 0xb9, 0xac, 0x8c, 0xff, 0x95, 0x7e, 0xba, 0x3f, 0xe1, 0x34, 0x99, 0xf0, 0x07, 0x07, 0x57, + 0x34, 0xc4, 0x1c, 0x9d, 0xf7, 0xcc, 0x53, 0x30, 0x1e, 0x9a, 0x40, 0xd2, 0x57, 0xcf, 0xfd, 0x1c, + 0x3c, 0x30, 0x94, 0x5a, 0x7a, 0x0e, 0xa6, 0x7b, 0xa6, 0x6e, 0x7a, 0xc8, 0xb1, 0x1d, 0x84, 0x23, + 0x96, 0xbe, 0xaa, 0xfc, 0xaf, 0x63, 0x87, 0xc4, 0xdc, 0x76, 0x50, 0x9b, 0xb2, 0xc8, 0x53, 0xbd, + 0x41, 0xe1, 0xe3, 0xf9, 0xdc, 0x9b, 0x63, 0xe2, 0x9d, 0x3b, 0x77, 0xee, 0xa4, 0xe6, 0x3e, 0x3f, + 0x0a, 0xd3, 0xc3, 0xf6, 0xcc, 0xd0, 0xed, 0x7b, 0x02, 0x46, 0xcd, 0x5e, 0x77, 0x07, 0x39, 0xc4, + 0x49, 0x59, 0x99, 0x3d, 0x49, 0x35, 0xc8, 0x1a, 0xea, 0x0e, 0x32, 0xca, 0x99, 0x59, 0x61, 0xbe, + 0x74, 0xee, 0x89, 0x44, 0xbb, 0x72, 0x61, 0x15, 0x43, 0x64, 0x8a, 0x94, 0x3e, 0x06, 0x19, 0x96, + 0xa2, 0x31, 0xc3, 0xe3, 0xc9, 0x18, 0xf0, 0x5e, 0x92, 0x09, 0x4e, 0x7a, 0x10, 0xf2, 0xf8, 0x2f, + 0x8d, 0x8d, 0x51, 0x62, 0x73, 0x0e, 0x0b, 0x70, 0x5c, 0x48, 0x33, 0x90, 0x23, 0xdb, 0xa4, 0x8d, + 0x78, 0x69, 0xf3, 0x9f, 0x71, 0x60, 0xb5, 0xd1, 0xae, 0xda, 0x33, 0x3c, 0xe5, 0xa6, 0x6a, 0xf4, + 0x10, 0x09, 0xf8, 0xbc, 0x5c, 0x64, 0xc2, 0x4f, 0x62, 0x99, 0x74, 0x1a, 0x0a, 0x74, 0x57, 0xe9, + 0x66, 0x1b, 0xbd, 0x40, 0xb2, 0x67, 0x56, 0xa6, 0x1b, 0xad, 0x89, 0x25, 0xf8, 0xf5, 0xd7, 0x5d, + 0xcb, 0xe4, 0xa1, 0x49, 0x5e, 0x81, 0x05, 0xe4, 0xf5, 0x4f, 0x45, 0x13, 0xf7, 0x43, 0xc3, 0xa7, + 0x17, 0x8d, 0xa9, 0xb9, 0x6f, 0xa5, 0x20, 0x43, 0xf2, 0xc5, 0x04, 0x14, 0xb6, 0xae, 0x6d, 0x36, + 0x94, 0xe5, 0x8d, 0xed, 0xa5, 0xd5, 0x86, 0x28, 0x48, 0x25, 0x00, 0x22, 0xb8, 0xba, 0xba, 0x51, + 0xdb, 0x12, 0x53, 0xfe, 0x73, 0x73, 0x7d, 0xeb, 0xe2, 0x79, 0x31, 0xed, 0x03, 0xb6, 0xa9, 0x20, + 0x13, 0x54, 0x78, 0xf2, 0x9c, 0x98, 0x95, 0x44, 0x28, 0x52, 0x82, 0xe6, 0x73, 0x8d, 0xe5, 0x8b, + 0xe7, 0xc5, 0xd1, 0xb0, 0xe4, 0xc9, 0x73, 0xe2, 0x98, 0x34, 0x0e, 0x79, 0x22, 0x59, 0xda, 0xd8, + 0x58, 0x15, 0x73, 0x3e, 0x67, 0x6b, 0x4b, 0x6e, 0xae, 0xaf, 0x88, 0x79, 0x9f, 0x73, 0x45, 0xde, + 0xd8, 0xde, 0x14, 0xc1, 0x67, 0x58, 0x6b, 0xb4, 0x5a, 0xb5, 0x95, 0x86, 0x58, 0xf0, 0x35, 0x96, + 0xae, 0x6d, 0x35, 0x5a, 0x62, 0x31, 0x64, 0xd6, 0x93, 0xe7, 0xc4, 0x71, 0xff, 0x15, 0x8d, 0xf5, + 0xed, 0x35, 0xb1, 0x24, 0x4d, 0xc2, 0x38, 0x7d, 0x05, 0x37, 0x62, 0x22, 0x22, 0xba, 0x78, 0x5e, + 0x14, 0xfb, 0x86, 0x50, 0x96, 0xc9, 0x90, 0xe0, 0xe2, 0x79, 0x51, 0x9a, 0xab, 0x43, 0x96, 0x44, + 0x97, 0x24, 0x41, 0x69, 0xb5, 0xb6, 0xd4, 0x58, 0x55, 0x36, 0x36, 0xb7, 0x9a, 0x1b, 0xeb, 0xb5, + 0x55, 0x51, 0xe8, 0xcb, 0xe4, 0xc6, 0x27, 0xb6, 0x9b, 0x72, 0x63, 0x59, 0x4c, 0x05, 0x65, 0x9b, + 0x8d, 0xda, 0x56, 0x63, 0x59, 0x4c, 0xcf, 0x69, 0x30, 0x3d, 0x2c, 0x4f, 0x0e, 0xdd, 0x19, 0x81, + 0x25, 0x4e, 0x1d, 0xb2, 0xc4, 0x84, 0x6b, 0x60, 0x89, 0x7f, 0x94, 0x82, 0xa9, 0x21, 0xb5, 0x62, + 0xe8, 0x4b, 0x9e, 0x86, 0x2c, 0x0d, 0x51, 0x5a, 0x3d, 0x1f, 0x1b, 0x5a, 0x74, 0x48, 0xc0, 0x0e, + 0x54, 0x50, 0x82, 0x0b, 0x76, 0x10, 0xe9, 0x43, 0x3a, 0x08, 0x4c, 0x31, 0x90, 0xd3, 0x7f, 0x76, + 0x20, 0xa7, 0xd3, 0xb2, 0x77, 0x31, 0x49, 0xd9, 0x23, 0xb2, 0xe3, 0xe5, 0xf6, 0xec, 0x90, 0xdc, + 0x7e, 0x05, 0x26, 0x07, 0x88, 0x12, 0xe7, 0xd8, 0x17, 0x05, 0x28, 0x1f, 0xe6, 0x9c, 0x98, 0x4c, + 0x97, 0x0a, 0x65, 0xba, 0x2b, 0x51, 0x0f, 0x9e, 0x39, 0x7c, 0x11, 0x06, 0xd6, 0xfa, 0x55, 0x01, + 0x4e, 0x0c, 0xef, 0x14, 0x87, 0xda, 0xf0, 0x31, 0x18, 0xed, 0x22, 0x6f, 0xcf, 0xe2, 0xdd, 0xd2, + 0x07, 0x87, 0xd4, 0x60, 0x3c, 0x1c, 0x5d, 0x6c, 0x86, 0x0a, 0x16, 0xf1, 0xf4, 0x61, 0xed, 0x1e, + 0xb5, 0x66, 0xc0, 0xd2, 0xcf, 0xa6, 0xe0, 0x81, 0xa1, 0xe4, 0x43, 0x0d, 0x7d, 0x08, 0x40, 0x37, + 0xed, 0x9e, 0x47, 0x3b, 0x22, 0x9a, 0x60, 0xf3, 0x44, 0x42, 0x92, 0x17, 0x4e, 0x9e, 0x3d, 0xcf, + 0x1f, 0x4f, 0x93, 0x71, 0xa0, 0x22, 0xa2, 0x70, 0xa9, 0x6f, 0x68, 0x86, 0x18, 0x5a, 0x39, 0x64, + 0xa6, 0x03, 0x81, 0xf9, 0x11, 0x10, 0x35, 0x43, 0x47, 0xa6, 0xa7, 0xb8, 0x9e, 0x83, 0xd4, 0xae, + 0x6e, 0x76, 0x48, 0x05, 0xc9, 0x55, 0xb3, 0xbb, 0xaa, 0xe1, 0x22, 0x79, 0x82, 0x0e, 0xb7, 0xf8, + 0x28, 0x46, 0x90, 0x00, 0x72, 0x02, 0x88, 0xd1, 0x10, 0x82, 0x0e, 0xfb, 0x88, 0xb9, 0x6f, 0xe6, + 0xa0, 0x10, 0xe8, 0xab, 0xa5, 0x33, 0x50, 0xbc, 0xae, 0xde, 0x54, 0x15, 0x7e, 0x56, 0xa2, 0x9e, + 0x28, 0x60, 0xd9, 0x26, 0x3b, 0x2f, 0x7d, 0x04, 0xa6, 0x89, 0x8a, 0xd5, 0xf3, 0x90, 0xa3, 0x68, + 0x86, 0xea, 0xba, 0xc4, 0x69, 0x39, 0xa2, 0x2a, 0xe1, 0xb1, 0x0d, 0x3c, 0x54, 0xe7, 0x23, 0xd2, + 0x05, 0x98, 0x22, 0x88, 0x6e, 0xcf, 0xf0, 0x74, 0xdb, 0x40, 0x0a, 0x3e, 0xbd, 0xb9, 0xa4, 0x92, + 0xf8, 0x96, 0x4d, 0x62, 0x8d, 0x35, 0xa6, 0x80, 0x2d, 0x72, 0xa5, 0x65, 0x78, 0x88, 0xc0, 0x3a, + 0xc8, 0x44, 0x8e, 0xea, 0x21, 0x05, 0x7d, 0xba, 0xa7, 0x1a, 0xae, 0xa2, 0x9a, 0x6d, 0x65, 0x4f, + 0x75, 0xf7, 0xca, 0xd3, 0x98, 0x60, 0x29, 0x55, 0x16, 0xe4, 0x53, 0x58, 0x71, 0x85, 0xe9, 0x35, + 0x88, 0x5a, 0xcd, 0x6c, 0x7f, 0x5c, 0x75, 0xf7, 0xa4, 0x2a, 0x9c, 0x20, 0x2c, 0xae, 0xe7, 0xe8, + 0x66, 0x47, 0xd1, 0xf6, 0x90, 0x76, 0x43, 0xe9, 0x79, 0xbb, 0x97, 0xca, 0x0f, 0x06, 0xdf, 0x4f, + 0x2c, 0x6c, 0x11, 0x9d, 0x3a, 0x56, 0xd9, 0xf6, 0x76, 0x2f, 0x49, 0x2d, 0x28, 0xe2, 0xc5, 0xe8, + 0xea, 0xb7, 0x91, 0xb2, 0x6b, 0x39, 0xa4, 0x34, 0x96, 0x86, 0xa4, 0xa6, 0x80, 0x07, 0x17, 0x36, + 0x18, 0x60, 0xcd, 0x6a, 0xa3, 0x6a, 0xb6, 0xb5, 0xd9, 0x68, 0x2c, 0xcb, 0x05, 0xce, 0x72, 0xd5, + 0x72, 0x70, 0x40, 0x75, 0x2c, 0xdf, 0xc1, 0x05, 0x1a, 0x50, 0x1d, 0x8b, 0xbb, 0xf7, 0x02, 0x4c, + 0x69, 0x1a, 0x9d, 0xb3, 0xae, 0x29, 0xec, 0x8c, 0xe5, 0x96, 0xc5, 0x90, 0xb3, 0x34, 0x6d, 0x85, + 0x2a, 0xb0, 0x18, 0x77, 0xa5, 0xcb, 0xf0, 0x40, 0xdf, 0x59, 0x41, 0xe0, 0xe4, 0xc0, 0x2c, 0xa3, + 0xd0, 0x0b, 0x30, 0x65, 0xef, 0x0f, 0x02, 0xa5, 0xd0, 0x1b, 0xed, 0xfd, 0x28, 0xec, 0x29, 0x98, + 0xb6, 0xf7, 0xec, 0x41, 0xdc, 0xe3, 0x41, 0x9c, 0x64, 0xef, 0xd9, 0x51, 0xe0, 0xa3, 0xe4, 0xc0, + 0xed, 0x20, 0x4d, 0xf5, 0x50, 0xbb, 0x7c, 0x32, 0xa8, 0x1e, 0x18, 0x90, 0x16, 0x41, 0xd4, 0x34, + 0x05, 0x99, 0xea, 0x8e, 0x81, 0x14, 0xd5, 0x41, 0xa6, 0xea, 0x96, 0x4f, 0x07, 0x95, 0x4b, 0x9a, + 0xd6, 0x20, 0xa3, 0x35, 0x32, 0x28, 0x3d, 0x0e, 0x93, 0xd6, 0xce, 0x75, 0x8d, 0x86, 0xa4, 0x62, + 0x3b, 0x68, 0x57, 0x7f, 0xa1, 0xfc, 0x08, 0xf1, 0xef, 0x04, 0x1e, 0x20, 0x01, 0xb9, 0x49, 0xc4, + 0xd2, 0x63, 0x20, 0x6a, 0xee, 0x9e, 0xea, 0xd8, 0x24, 0x27, 0xbb, 0xb6, 0xaa, 0xa1, 0xf2, 0xa3, + 0x54, 0x95, 0xca, 0xd7, 0xb9, 0x18, 0x6f, 0x09, 0xf7, 0x96, 0xbe, 0xeb, 0x71, 0xc6, 0xb3, 0x74, + 0x4b, 0x10, 0x19, 0x63, 0x9b, 0x07, 0x11, 0xbb, 0x22, 0xf4, 0xe2, 0x79, 0xa2, 0x56, 0xb2, 0xf7, + 0xec, 0xe0, 0x7b, 0x1f, 0x86, 0x71, 0xac, 0xd9, 0x7f, 0xe9, 0x63, 0xb4, 0x21, 0xb3, 0xf7, 0x02, + 0x6f, 0x7c, 0xd7, 0x7a, 0xe3, 0xb9, 0x2a, 0x14, 0x83, 0xf1, 0x29, 0xe5, 0x81, 0x46, 0xa8, 0x28, + 0xe0, 0x66, 0xa5, 0xbe, 0xb1, 0x8c, 0xdb, 0x8c, 0xe7, 0x1b, 0x62, 0x0a, 0xb7, 0x3b, 0xab, 0xcd, + 0xad, 0x86, 0x22, 0x6f, 0xaf, 0x6f, 0x35, 0xd7, 0x1a, 0x62, 0x3a, 0xd8, 0x57, 0x7f, 0x3f, 0x05, + 0xa5, 0xf0, 0x11, 0x49, 0xfa, 0x29, 0x38, 0xc9, 0xef, 0x33, 0x5c, 0xe4, 0x29, 0xb7, 0x74, 0x87, + 0x6c, 0x99, 0xae, 0x4a, 0xcb, 0x97, 0xbf, 0x68, 0xd3, 0x4c, 0xab, 0x85, 0xbc, 0x67, 0x75, 0x07, + 0x6f, 0x88, 0xae, 0xea, 0x49, 0xab, 0x70, 0xda, 0xb4, 0x14, 0xd7, 0x53, 0xcd, 0xb6, 0xea, 0xb4, + 0x95, 0xfe, 0x4d, 0x92, 0xa2, 0x6a, 0x1a, 0x72, 0x5d, 0x8b, 0x96, 0x2a, 0x9f, 0xe5, 0x03, 0xa6, + 0xd5, 0x62, 0xca, 0xfd, 0x1c, 0x5e, 0x63, 0xaa, 0x91, 0x00, 0x4b, 0x1f, 0x16, 0x60, 0x0f, 0x42, + 0xbe, 0xab, 0xda, 0x0a, 0x32, 0x3d, 0x67, 0x9f, 0x34, 0xc6, 0x39, 0x39, 0xd7, 0x55, 0xed, 0x06, + 0x7e, 0x7e, 0x6f, 0xce, 0x27, 0xff, 0x94, 0x86, 0x62, 0xb0, 0x39, 0xc6, 0x67, 0x0d, 0x8d, 0xd4, + 0x11, 0x81, 0x64, 0x9a, 0x87, 0x8f, 0x6c, 0xa5, 0x17, 0xea, 0xb8, 0xc0, 0x54, 0x47, 0x69, 0xcb, + 0x2a, 0x53, 0x24, 0x2e, 0xee, 0x38, 0xb7, 0x20, 0xda, 0x22, 0xe4, 0x64, 0xf6, 0x24, 0xad, 0xc0, + 0xe8, 0x75, 0x97, 0x70, 0x8f, 0x12, 0xee, 0x47, 0x8e, 0xe6, 0x7e, 0xa6, 0x45, 0xc8, 0xf3, 0xcf, + 0xb4, 0x94, 0xf5, 0x0d, 0x79, 0xad, 0xb6, 0x2a, 0x33, 0xb8, 0x74, 0x0a, 0x32, 0x86, 0x7a, 0x7b, + 0x3f, 0x5c, 0x8a, 0x88, 0x28, 0xa9, 0xe3, 0x4f, 0x41, 0xe6, 0x16, 0x52, 0x6f, 0x84, 0x0b, 0x00, + 0x11, 0xbd, 0x8b, 0xa1, 0xbf, 0x08, 0x59, 0xe2, 0x2f, 0x09, 0x80, 0x79, 0x4c, 0x1c, 0x91, 0x72, + 0x90, 0xa9, 0x6f, 0xc8, 0x38, 0xfc, 0x45, 0x28, 0x52, 0xa9, 0xb2, 0xd9, 0x6c, 0xd4, 0x1b, 0x62, + 0x6a, 0xee, 0x02, 0x8c, 0x52, 0x27, 0xe0, 0xad, 0xe1, 0xbb, 0x41, 0x1c, 0x61, 0x8f, 0x8c, 0x43, + 0xe0, 0xa3, 0xdb, 0x6b, 0x4b, 0x0d, 0x59, 0x4c, 0x05, 0x97, 0xd7, 0x85, 0x62, 0xb0, 0x2f, 0x7e, + 0x6f, 0x62, 0xea, 0xbb, 0x02, 0x14, 0x02, 0x7d, 0x2e, 0x6e, 0x50, 0x54, 0xc3, 0xb0, 0x6e, 0x29, + 0xaa, 0xa1, 0xab, 0x2e, 0x0b, 0x0a, 0x20, 0xa2, 0x1a, 0x96, 0x24, 0x5d, 0xb4, 0xf7, 0xc4, 0xf8, + 0x57, 0x04, 0x10, 0xa3, 0x2d, 0x66, 0xc4, 0x40, 0xe1, 0x7d, 0x35, 0xf0, 0x65, 0x01, 0x4a, 0xe1, + 0xbe, 0x32, 0x62, 0xde, 0x99, 0xf7, 0xd5, 0xbc, 0xd7, 0x53, 0x30, 0x1e, 0xea, 0x26, 0x93, 0x5a, + 0xf7, 0x69, 0x98, 0xd4, 0xdb, 0xa8, 0x6b, 0x5b, 0x1e, 0x32, 0xb5, 0x7d, 0xc5, 0x40, 0x37, 0x91, + 0x51, 0x9e, 0x23, 0x89, 0x62, 0xf1, 0xe8, 0x7e, 0x75, 0xa1, 0xd9, 0xc7, 0xad, 0x62, 0x58, 0x75, + 0xaa, 0xb9, 0xdc, 0x58, 0xdb, 0xdc, 0xd8, 0x6a, 0xac, 0xd7, 0xaf, 0x29, 0xdb, 0xeb, 0x3f, 0xb3, + 0xbe, 0xf1, 0xec, 0xba, 0x2c, 0xea, 0x11, 0xb5, 0x77, 0x71, 0xab, 0x6f, 0x82, 0x18, 0x35, 0x4a, + 0x3a, 0x09, 0xc3, 0xcc, 0x12, 0x47, 0xa4, 0x29, 0x98, 0x58, 0xdf, 0x50, 0x5a, 0xcd, 0xe5, 0x86, + 0xd2, 0xb8, 0x7a, 0xb5, 0x51, 0xdf, 0x6a, 0xd1, 0x1b, 0x08, 0x5f, 0x7b, 0x2b, 0xbc, 0xa9, 0x5f, + 0x4a, 0xc3, 0xd4, 0x10, 0x4b, 0xa4, 0x1a, 0x3b, 0x3b, 0xd0, 0xe3, 0xcc, 0x87, 0x93, 0x58, 0xbf, + 0x80, 0x4b, 0xfe, 0xa6, 0xea, 0x78, 0xec, 0xa8, 0xf1, 0x18, 0x60, 0x2f, 0x99, 0x9e, 0xbe, 0xab, + 0x23, 0x87, 0x5d, 0xd8, 0xd0, 0x03, 0xc5, 0x44, 0x5f, 0x4e, 0xef, 0x6c, 0x3e, 0x04, 0x92, 0x6d, + 0xb9, 0xba, 0xa7, 0xdf, 0x44, 0x8a, 0x6e, 0xf2, 0xdb, 0x1d, 0x7c, 0xc0, 0xc8, 0xc8, 0x22, 0x1f, + 0x69, 0x9a, 0x9e, 0xaf, 0x6d, 0xa2, 0x8e, 0x1a, 0xd1, 0xc6, 0x09, 0x3c, 0x2d, 0x8b, 0x7c, 0xc4, + 0xd7, 0x3e, 0x03, 0xc5, 0xb6, 0xd5, 0xc3, 0x5d, 0x17, 0xd5, 0xc3, 0xf5, 0x42, 0x90, 0x0b, 0x54, + 0xe6, 0xab, 0xb0, 0x7e, 0xba, 0x7f, 0xad, 0x54, 0x94, 0x0b, 0x54, 0x46, 0x55, 0xce, 0xc2, 0x84, + 0xda, 0xe9, 0x38, 0x98, 0x9c, 0x13, 0xd1, 0x13, 0x42, 0xc9, 0x17, 0x13, 0xc5, 0x99, 0x67, 0x20, + 0xc7, 0xfd, 0x80, 0x4b, 0x32, 0xf6, 0x84, 0x62, 0xd3, 0x63, 0x6f, 0x6a, 0x3e, 0x2f, 0xe7, 0x4c, + 0x3e, 0x78, 0x06, 0x8a, 0xba, 0xab, 0xf4, 0x6f, 0xc9, 0x53, 0xb3, 0xa9, 0xf9, 0x9c, 0x5c, 0xd0, + 0x5d, 0xff, 0x86, 0x71, 0xee, 0xd5, 0x14, 0x94, 0xc2, 0xb7, 0xfc, 0xd2, 0x32, 0xe4, 0x0c, 0x4b, + 0x53, 0x49, 0x68, 0xd1, 0x4f, 0x4c, 0xf3, 0x31, 0x1f, 0x06, 0x16, 0x56, 0x99, 0xbe, 0xec, 0x23, + 0x67, 0xfe, 0x41, 0x80, 0x1c, 0x17, 0x4b, 0x27, 0x20, 0x63, 0xab, 0xde, 0x1e, 0xa1, 0xcb, 0x2e, + 0xa5, 0x44, 0x41, 0x26, 0xcf, 0x58, 0xee, 0xda, 0xaa, 0x49, 0x42, 0x80, 0xc9, 0xf1, 0x33, 0x5e, + 0x57, 0x03, 0xa9, 0x6d, 0x72, 0xfc, 0xb0, 0xba, 0x5d, 0x64, 0x7a, 0x2e, 0x5f, 0x57, 0x26, 0xaf, + 0x33, 0xb1, 0xf4, 0x04, 0x4c, 0x7a, 0x8e, 0xaa, 0x1b, 0x21, 0xdd, 0x0c, 0xd1, 0x15, 0xf9, 0x80, + 0xaf, 0x5c, 0x85, 0x53, 0x9c, 0xb7, 0x8d, 0x3c, 0x55, 0xdb, 0x43, 0xed, 0x3e, 0x68, 0x94, 0x5c, + 0x33, 0x9c, 0x64, 0x0a, 0xcb, 0x6c, 0x9c, 0x63, 0xe7, 0x7e, 0x28, 0xc0, 0x24, 0x3f, 0x30, 0xb5, + 0x7d, 0x67, 0xad, 0x01, 0xa8, 0xa6, 0x69, 0x79, 0x41, 0x77, 0x0d, 0x86, 0xf2, 0x00, 0x6e, 0xa1, + 0xe6, 0x83, 0xe4, 0x00, 0xc1, 0x4c, 0x17, 0xa0, 0x3f, 0x72, 0xa8, 0xdb, 0x4e, 0x43, 0x81, 0x7d, + 0xc2, 0x21, 0xdf, 0x01, 0xe9, 0x11, 0x1b, 0xa8, 0x08, 0x9f, 0xac, 0xa4, 0x69, 0xc8, 0xee, 0xa0, + 0x8e, 0x6e, 0xb2, 0x8b, 0x59, 0xfa, 0xc0, 0x2f, 0x42, 0x32, 0xfe, 0x45, 0xc8, 0xd2, 0xa7, 0x60, + 0x4a, 0xb3, 0xba, 0x51, 0x73, 0x97, 0xc4, 0xc8, 0x31, 0xdf, 0xfd, 0xb8, 0xf0, 0x3c, 0xf4, 0x5b, + 0xcc, 0x77, 0x04, 0xe1, 0xcb, 0xa9, 0xf4, 0xca, 0xe6, 0xd2, 0xd7, 0x52, 0x33, 0x2b, 0x14, 0xba, + 0xc9, 0x67, 0x2a, 0xa3, 0x5d, 0x03, 0x69, 0xd8, 0x7a, 0xf8, 0xca, 0x13, 0xf0, 0xe1, 0x8e, 0xee, + 0xed, 0xf5, 0x76, 0x16, 0x34, 0xab, 0xbb, 0xd8, 0xb1, 0x3a, 0x56, 0xff, 0xd3, 0x27, 0x7e, 0x22, + 0x0f, 0xe4, 0x3f, 0xf6, 0xf9, 0x33, 0xef, 0x4b, 0x67, 0x62, 0xbf, 0x95, 0x56, 0xd7, 0x61, 0x8a, + 0x29, 0x2b, 0xe4, 0xfb, 0x0b, 0x3d, 0x45, 0x48, 0x47, 0xde, 0x61, 0x95, 0xbf, 0xf1, 0x06, 0x29, + 0xd7, 0xf2, 0x24, 0x83, 0xe2, 0x31, 0x7a, 0xd0, 0xa8, 0xca, 0xf0, 0x40, 0x88, 0x8f, 0x6e, 0x4d, + 0xe4, 0xc4, 0x30, 0x7e, 0x9f, 0x31, 0x4e, 0x05, 0x18, 0x5b, 0x0c, 0x5a, 0xad, 0xc3, 0xf8, 0x71, + 0xb8, 0xfe, 0x8e, 0x71, 0x15, 0x51, 0x90, 0x64, 0x05, 0x26, 0x08, 0x89, 0xd6, 0x73, 0x3d, 0xab, + 0x4b, 0xf2, 0xde, 0xd1, 0x34, 0x7f, 0xff, 0x06, 0xdd, 0x2b, 0x25, 0x0c, 0xab, 0xfb, 0xa8, 0x6a, + 0x15, 0xc8, 0x27, 0xa7, 0x36, 0xd2, 0x8c, 0x18, 0x86, 0xd7, 0x98, 0x21, 0xbe, 0x7e, 0xf5, 0x93, + 0x30, 0x8d, 0xff, 0x27, 0x69, 0x29, 0x68, 0x49, 0xfc, 0x85, 0x57, 0xf9, 0x87, 0x2f, 0xd2, 0xed, + 0x38, 0xe5, 0x13, 0x04, 0x6c, 0x0a, 0xac, 0x62, 0x07, 0x79, 0x1e, 0x72, 0x5c, 0x45, 0x35, 0x86, + 0x99, 0x17, 0xb8, 0x31, 0x28, 0x7f, 0xe1, 0xad, 0xf0, 0x2a, 0xae, 0x50, 0x64, 0xcd, 0x30, 0xaa, + 0xdb, 0x70, 0x72, 0x48, 0x54, 0x24, 0xe0, 0x7c, 0x89, 0x71, 0x4e, 0x0f, 0x44, 0x06, 0xa6, 0xdd, + 0x04, 0x2e, 0xf7, 0xd7, 0x32, 0x01, 0xe7, 0xef, 0x32, 0x4e, 0x89, 0x61, 0xf9, 0x92, 0x62, 0xc6, + 0x67, 0x60, 0xf2, 0x26, 0x72, 0x76, 0x2c, 0x97, 0xdd, 0xd2, 0x24, 0xa0, 0x7b, 0x99, 0xd1, 0x4d, + 0x30, 0x20, 0xb9, 0xb6, 0xc1, 0x5c, 0x97, 0x21, 0xb7, 0xab, 0x6a, 0x28, 0x01, 0xc5, 0x17, 0x19, + 0xc5, 0x18, 0xd6, 0xc7, 0xd0, 0x1a, 0x14, 0x3b, 0x16, 0xab, 0x4c, 0xf1, 0xf0, 0x57, 0x18, 0xbc, + 0xc0, 0x31, 0x8c, 0xc2, 0xb6, 0xec, 0x9e, 0x81, 0xcb, 0x56, 0x3c, 0xc5, 0xef, 0x71, 0x0a, 0x8e, + 0x61, 0x14, 0xc7, 0x70, 0xeb, 0xef, 0x73, 0x0a, 0x37, 0xe0, 0xcf, 0xa7, 0xa1, 0x60, 0x99, 0xc6, + 0xbe, 0x65, 0x26, 0x31, 0xe2, 0x4b, 0x8c, 0x01, 0x18, 0x04, 0x13, 0x5c, 0x81, 0x7c, 0xd2, 0x85, + 0xf8, 0xc3, 0xb7, 0xf8, 0xf6, 0xe0, 0x2b, 0xb0, 0x02, 0x13, 0x3c, 0x41, 0xe9, 0x96, 0x99, 0x80, + 0xe2, 0x2b, 0x8c, 0xa2, 0x14, 0x80, 0xb1, 0x69, 0x78, 0xc8, 0xf5, 0x3a, 0x28, 0x09, 0xc9, 0xab, + 0x7c, 0x1a, 0x0c, 0xc2, 0x5c, 0xb9, 0x83, 0x4c, 0x6d, 0x2f, 0x19, 0xc3, 0x57, 0xb9, 0x2b, 0x39, + 0x06, 0x53, 0xd4, 0x61, 0xbc, 0xab, 0x3a, 0xee, 0x9e, 0x6a, 0x24, 0x5a, 0x8e, 0x3f, 0x62, 0x1c, + 0x45, 0x1f, 0xc4, 0x3c, 0xd2, 0x33, 0x8f, 0x43, 0xf3, 0x35, 0xee, 0x91, 0x00, 0x8c, 0x6d, 0x3d, + 0xd7, 0x23, 0x57, 0x5a, 0xc7, 0x61, 0xfb, 0x63, 0xbe, 0xf5, 0x28, 0x76, 0x2d, 0xc8, 0x78, 0x05, + 0xf2, 0xae, 0x7e, 0x3b, 0x11, 0xcd, 0x9f, 0xf0, 0x95, 0x26, 0x00, 0x0c, 0xbe, 0x06, 0xa7, 0x86, + 0x96, 0x89, 0x04, 0x64, 0x7f, 0xca, 0xc8, 0x4e, 0x0c, 0x29, 0x15, 0x2c, 0x25, 0x1c, 0x97, 0xf2, + 0xcf, 0x78, 0x4a, 0x40, 0x11, 0xae, 0x4d, 0x7c, 0x56, 0x70, 0xd5, 0xdd, 0xe3, 0x79, 0xed, 0xcf, + 0xb9, 0xd7, 0x28, 0x36, 0xe4, 0xb5, 0x2d, 0x38, 0xc1, 0x18, 0x8f, 0xb7, 0xae, 0x5f, 0xe7, 0x89, + 0x95, 0xa2, 0xb7, 0xc3, 0xab, 0xfb, 0x29, 0x98, 0xf1, 0xdd, 0xc9, 0x9b, 0x52, 0x57, 0xe9, 0xaa, + 0x76, 0x02, 0xe6, 0x6f, 0x30, 0x66, 0x9e, 0xf1, 0xfd, 0xae, 0xd6, 0x5d, 0x53, 0x6d, 0x4c, 0xfe, + 0x1c, 0x94, 0x39, 0x79, 0xcf, 0x74, 0x90, 0x66, 0x75, 0x4c, 0xfd, 0x36, 0x6a, 0x27, 0xa0, 0xfe, + 0x8b, 0xc8, 0x52, 0x6d, 0x07, 0xe0, 0x98, 0xb9, 0x09, 0xa2, 0xdf, 0xab, 0x28, 0x7a, 0xd7, 0xb6, + 0x1c, 0x2f, 0x86, 0xf1, 0x9b, 0x7c, 0xa5, 0x7c, 0x5c, 0x93, 0xc0, 0xaa, 0x0d, 0x28, 0x91, 0xc7, + 0xa4, 0x21, 0xf9, 0x97, 0x8c, 0x68, 0xbc, 0x8f, 0x62, 0x89, 0x43, 0xb3, 0xba, 0xb6, 0xea, 0x24, + 0xc9, 0x7f, 0x7f, 0xc5, 0x13, 0x07, 0x83, 0xb0, 0xc4, 0xe1, 0xed, 0xdb, 0x08, 0x57, 0xfb, 0x04, + 0x0c, 0xdf, 0xe2, 0x89, 0x83, 0x63, 0x18, 0x05, 0x6f, 0x18, 0x12, 0x50, 0xfc, 0x35, 0xa7, 0xe0, + 0x18, 0x4c, 0xf1, 0x89, 0x7e, 0xa1, 0x75, 0x50, 0x47, 0x77, 0x3d, 0x87, 0xb6, 0xc2, 0x47, 0x53, + 0x7d, 0xfb, 0xad, 0x70, 0x13, 0x26, 0x07, 0xa0, 0x38, 0x13, 0xb1, 0x2b, 0x54, 0x72, 0x52, 0x8a, + 0x37, 0xec, 0x3b, 0x3c, 0x13, 0x05, 0x60, 0xd8, 0xb6, 0x40, 0x87, 0x88, 0xdd, 0xae, 0xe1, 0xf3, + 0x41, 0x02, 0xba, 0xef, 0x46, 0x8c, 0x6b, 0x71, 0x2c, 0xe6, 0x0c, 0xf4, 0x3f, 0x3d, 0xf3, 0x06, + 0xda, 0x4f, 0x14, 0x9d, 0x7f, 0x13, 0xe9, 0x7f, 0xb6, 0x29, 0x92, 0xe6, 0x90, 0x89, 0x48, 0x3f, + 0x25, 0xc5, 0xfd, 0x58, 0xa7, 0xfc, 0xf3, 0xf7, 0xd8, 0x7c, 0xc3, 0xed, 0x54, 0x75, 0x15, 0x07, + 0x79, 0xb8, 0xe9, 0x89, 0x27, 0x7b, 0xf1, 0x9e, 0x1f, 0xe7, 0xa1, 0x9e, 0xa7, 0x7a, 0x15, 0xc6, + 0x43, 0x0d, 0x4f, 0x3c, 0xd5, 0x67, 0x18, 0x55, 0x31, 0xd8, 0xef, 0x54, 0x2f, 0x40, 0x06, 0x37, + 0x2f, 0xf1, 0xf0, 0x5f, 0x60, 0x70, 0xa2, 0x5e, 0xfd, 0x28, 0xe4, 0x78, 0xd3, 0x12, 0x0f, 0xfd, + 0x45, 0x06, 0xf5, 0x21, 0x18, 0xce, 0x1b, 0x96, 0x78, 0xf8, 0x2f, 0x71, 0x38, 0x87, 0x60, 0x78, + 0x72, 0x17, 0x7e, 0xef, 0x57, 0x32, 0xac, 0xe8, 0x70, 0xdf, 0x5d, 0x81, 0x31, 0xd6, 0xa9, 0xc4, + 0xa3, 0x3f, 0xcb, 0x5e, 0xce, 0x11, 0xd5, 0xa7, 0x20, 0x9b, 0xd0, 0xe1, 0xbf, 0xca, 0xa0, 0x54, + 0xbf, 0x5a, 0x87, 0x42, 0xa0, 0x3b, 0x89, 0x87, 0x7f, 0x8e, 0xc1, 0x83, 0x28, 0x6c, 0x3a, 0xeb, + 0x4e, 0xe2, 0x09, 0x7e, 0x8d, 0x9b, 0xce, 0x10, 0xd8, 0x6d, 0xbc, 0x31, 0x89, 0x47, 0xff, 0x3a, + 0xf7, 0x3a, 0x87, 0x54, 0x9f, 0x86, 0xbc, 0x5f, 0x6c, 0xe2, 0xf1, 0xbf, 0xc1, 0xf0, 0x7d, 0x0c, + 0xf6, 0x40, 0xa0, 0xd8, 0xc5, 0x53, 0xfc, 0x26, 0xf7, 0x40, 0x00, 0x85, 0xb7, 0x51, 0xb4, 0x81, + 0x89, 0x67, 0xfa, 0x2d, 0xbe, 0x8d, 0x22, 0xfd, 0x0b, 0x5e, 0x4d, 0x92, 0xf3, 0xe3, 0x29, 0x7e, + 0x9b, 0xaf, 0x26, 0xd1, 0xc7, 0x66, 0x44, 0x3b, 0x82, 0x78, 0x8e, 0xdf, 0xe1, 0x66, 0x44, 0x1a, + 0x82, 0xea, 0x26, 0x48, 0x83, 0xdd, 0x40, 0x3c, 0xdf, 0xe7, 0x19, 0xdf, 0xe4, 0x40, 0x33, 0x50, + 0x7d, 0x16, 0x4e, 0x0c, 0xef, 0x04, 0xe2, 0x59, 0xbf, 0x70, 0x2f, 0x72, 0x76, 0x0b, 0x36, 0x02, + 0xd5, 0xad, 0x7e, 0x49, 0x09, 0x76, 0x01, 0xf1, 0xb4, 0x2f, 0xdd, 0x0b, 0x27, 0xee, 0x60, 0x13, + 0x50, 0xad, 0x01, 0xf4, 0x0b, 0x70, 0x3c, 0xd7, 0xcb, 0x8c, 0x2b, 0x00, 0xc2, 0x5b, 0x83, 0xd5, + 0xdf, 0x78, 0xfc, 0x17, 0xf9, 0xd6, 0x60, 0x08, 0xbc, 0x35, 0x78, 0xe9, 0x8d, 0x47, 0xbf, 0xc2, + 0xb7, 0x06, 0x87, 0xe0, 0xc8, 0x0e, 0x54, 0xb7, 0x78, 0x86, 0x2f, 0xf1, 0xc8, 0x0e, 0xa0, 0xaa, + 0xeb, 0x30, 0x39, 0x50, 0x10, 0xe3, 0xa9, 0xbe, 0xcc, 0xa8, 0xc4, 0x68, 0x3d, 0x0c, 0x16, 0x2f, + 0x56, 0x0c, 0xe3, 0xd9, 0xfe, 0x20, 0x52, 0xbc, 0x58, 0x2d, 0xac, 0x5e, 0x81, 0x9c, 0xd9, 0x33, + 0x0c, 0xbc, 0x79, 0xa4, 0xa3, 0x7f, 0x60, 0x57, 0xfe, 0xb7, 0xfb, 0xcc, 0x3b, 0x1c, 0x50, 0xbd, + 0x00, 0x59, 0xd4, 0xdd, 0x41, 0xed, 0x38, 0xe4, 0xbf, 0xdf, 0xe7, 0x09, 0x13, 0x6b, 0x57, 0x9f, + 0x06, 0xa0, 0x57, 0x23, 0xe4, 0xb3, 0x5f, 0x0c, 0xf6, 0x3f, 0xee, 0xb3, 0x9f, 0xbe, 0xf4, 0x21, + 0x7d, 0x02, 0xfa, 0x43, 0x9a, 0xa3, 0x09, 0xde, 0x0a, 0x13, 0x90, 0x15, 0xb9, 0x0c, 0x63, 0xd7, + 0x5d, 0xcb, 0xf4, 0xd4, 0x4e, 0x1c, 0xfa, 0x3f, 0x19, 0x9a, 0xeb, 0x63, 0x87, 0x75, 0x2d, 0x07, + 0x79, 0x6a, 0xc7, 0x8d, 0xc3, 0xfe, 0x17, 0xc3, 0xfa, 0x00, 0x0c, 0xd6, 0x54, 0xd7, 0x4b, 0x32, + 0xef, 0x1f, 0x73, 0x30, 0x07, 0x60, 0xa3, 0xf1, 0xff, 0x37, 0xd0, 0x7e, 0x1c, 0xf6, 0x6d, 0x6e, + 0x34, 0xd3, 0xaf, 0x7e, 0x14, 0xf2, 0xf8, 0x5f, 0xfa, 0x7b, 0xb6, 0x18, 0xf0, 0x7f, 0x33, 0x70, + 0x1f, 0x81, 0xdf, 0xec, 0x7a, 0x6d, 0x4f, 0x8f, 0x77, 0xf6, 0xff, 0xb0, 0x95, 0xe6, 0xfa, 0xd5, + 0x1a, 0x14, 0x5c, 0xaf, 0xdd, 0xee, 0xb1, 0xfe, 0x34, 0x06, 0xfe, 0xbf, 0xf7, 0xfd, 0x2b, 0x0b, + 0x1f, 0x83, 0x57, 0xfb, 0xd6, 0x0d, 0xcf, 0xb6, 0xc8, 0x67, 0x8e, 0x38, 0x86, 0x7b, 0x8c, 0x21, + 0x00, 0x59, 0x6a, 0x0c, 0xbf, 0xbe, 0x85, 0x15, 0x6b, 0xc5, 0xa2, 0x17, 0xb7, 0xcf, 0xcf, 0xc5, + 0xdf, 0xc0, 0xc2, 0xe7, 0xb2, 0x30, 0xab, 0x59, 0xdd, 0x1d, 0xcb, 0x5d, 0xf4, 0xd3, 0xf1, 0xa2, + 0xef, 0x24, 0x7e, 0x37, 0xeb, 0x0b, 0x66, 0x8e, 0x77, 0xab, 0x3b, 0xf7, 0xb7, 0x69, 0xc8, 0xd5, + 0x55, 0xd7, 0x53, 0x6f, 0xa9, 0xfb, 0x92, 0x0d, 0x53, 0xf8, 0xff, 0x35, 0xd5, 0x26, 0x77, 0x84, + 0x6c, 0x33, 0xb3, 0x8b, 0xf3, 0x0f, 0x2d, 0xf4, 0xdf, 0xca, 0x11, 0x0b, 0x43, 0xd4, 0xc9, 0x0f, + 0x0e, 0x96, 0xc4, 0xd7, 0xfe, 0xf9, 0xf4, 0xc8, 0x2f, 0xff, 0xcb, 0xe9, 0xdc, 0xda, 0xfe, 0xb3, + 0xba, 0xe1, 0x5a, 0xa6, 0x3c, 0x8c, 0x5a, 0xfa, 0x8c, 0x00, 0x0f, 0x0e, 0x91, 0xaf, 0xb3, 0xbd, + 0xce, 0x3e, 0x3f, 0x9d, 0x4f, 0xf8, 0x6a, 0x0e, 0xa3, 0x26, 0x14, 0x43, 0xaf, 0x3f, 0xea, 0x35, + 0x33, 0xd7, 0xa0, 0x7c, 0xd8, 0x4c, 0x24, 0x11, 0xd2, 0x37, 0xd0, 0x3e, 0xfb, 0xd5, 0x22, 0xfe, + 0x57, 0x3a, 0xdb, 0xff, 0x6d, 0xa7, 0x30, 0x5f, 0x38, 0x37, 0x19, 0xb0, 0x8e, 0xbd, 0x8c, 0x8e, + 0x57, 0x53, 0x97, 0x84, 0x19, 0x15, 0x66, 0xe3, 0x2c, 0xfd, 0x7f, 0xbe, 0x62, 0xae, 0x02, 0xa3, + 0x54, 0x28, 0x4d, 0x43, 0xb6, 0x69, 0x7a, 0x17, 0xcf, 0x13, 0xaa, 0xb4, 0x4c, 0x1f, 0x96, 0x56, + 0x5f, 0xbb, 0x5b, 0x19, 0xf9, 0xc1, 0xdd, 0xca, 0xc8, 0x3f, 0xde, 0xad, 0x8c, 0xbc, 0x7e, 0xb7, + 0x22, 0xbc, 0x79, 0xb7, 0x22, 0xbc, 0x7d, 0xb7, 0x22, 0xbc, 0x73, 0xb7, 0x22, 0xdc, 0x39, 0xa8, + 0x08, 0x5f, 0x3d, 0xa8, 0x08, 0x5f, 0x3f, 0xa8, 0x08, 0xdf, 0x3e, 0xa8, 0x08, 0xdf, 0x3b, 0xa8, + 0x08, 0xaf, 0x1d, 0x54, 0x84, 0x1f, 0x1c, 0x54, 0x46, 0x5e, 0x3f, 0xa8, 0x08, 0x6f, 0x1e, 0x54, + 0x46, 0xde, 0x3e, 0xa8, 0x08, 0xef, 0x1c, 0x54, 0x46, 0xee, 0xfc, 0xa8, 0x32, 0xf2, 0x7f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x70, 0xfd, 0x70, 0x7d, 0x2c, 0x35, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -883,6 +888,9 @@ return dAtA } func (m *Castaway) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.CastMapValueMessage) > 0 { @@ -914,6 +922,9 @@ } func (m *Wilson) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/combos/unmarshaler/castvalue.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/combos/unmarshaler/castvalue.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/combos/unmarshaler/castvalue.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/combos/unmarshaler/castvalue.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -107,253 +107,258 @@ func CastvalueDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3930 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0x24, 0xd7, - 0x55, 0x56, 0xcf, 0x8f, 0x34, 0x73, 0x66, 0x34, 0x6a, 0x5d, 0xc9, 0xbb, 0xb3, 0x72, 0x32, 0xab, - 0x1d, 0xdb, 0x59, 0xd9, 0x4e, 0xa4, 0xd4, 0x7a, 0x77, 0xbd, 0x3b, 0x4b, 0x62, 0x46, 0xa3, 0x59, - 0x65, 0x8c, 0xfe, 0xd2, 0x92, 0x62, 0xaf, 0x53, 0x54, 0x57, 0xab, 0xe7, 0xce, 0xa8, 0x77, 0x7b, - 0xba, 0x3b, 0xdd, 0x3d, 0xbb, 0xd6, 0x16, 0x0f, 0x4b, 0x39, 0x40, 0x05, 0x0a, 0x08, 0x3f, 0x55, - 0x24, 0xc6, 0x31, 0x84, 0xaa, 0xe0, 0x10, 0xfe, 0x12, 0x02, 0x21, 0xe1, 0x29, 0x3c, 0x04, 0xfc, - 0x44, 0x25, 0x6f, 0x3c, 0x50, 0xe0, 0x55, 0x5c, 0x85, 0x01, 0x43, 0x0c, 0xf8, 0xc1, 0x55, 0x7e, - 0xa1, 0xee, 0x5f, 0x4f, 0xf7, 0xcc, 0x48, 0x3d, 0x0a, 0x65, 0xe7, 0x49, 0xd3, 0xe7, 0x9e, 0xef, - 0xeb, 0x73, 0xcf, 0x3d, 0xf7, 0x9c, 0x73, 0x6f, 0x0b, 0x7e, 0x74, 0x15, 0xe6, 0xdb, 0xb6, 0xdd, - 0x36, 0xf1, 0x92, 0xe3, 0xda, 0xbe, 0xbd, 0xd7, 0x6d, 0x2d, 0x35, 0xb1, 0xa7, 0xbb, 0x86, 0xe3, - 0xdb, 0xee, 0x22, 0x95, 0xa1, 0x29, 0xa6, 0xb1, 0x28, 0x34, 0xca, 0xeb, 0x30, 0x7d, 0xdd, 0x30, - 0xf1, 0x4a, 0xa0, 0xb8, 0x8d, 0x7d, 0x74, 0x05, 0x52, 0x2d, 0xc3, 0xc4, 0x45, 0x69, 0x3e, 0xb9, - 0x90, 0xbb, 0xf0, 0xf0, 0x62, 0x1f, 0x68, 0x31, 0x8a, 0xd8, 0x22, 0x62, 0x85, 0x22, 0xca, 0xaf, - 0xa7, 0x60, 0x66, 0xc8, 0x28, 0x42, 0x90, 0xb2, 0xb4, 0x0e, 0x61, 0x94, 0x16, 0xb2, 0x0a, 0xfd, - 0x8d, 0x8a, 0x30, 0xe1, 0x68, 0xfa, 0x2d, 0xad, 0x8d, 0x8b, 0x09, 0x2a, 0x16, 0x8f, 0xa8, 0x04, - 0xd0, 0xc4, 0x0e, 0xb6, 0x9a, 0xd8, 0xd2, 0x0f, 0x8a, 0xc9, 0xf9, 0xe4, 0x42, 0x56, 0x09, 0x49, - 0xd0, 0xe3, 0x30, 0xed, 0x74, 0xf7, 0x4c, 0x43, 0x57, 0x43, 0x6a, 0x30, 0x9f, 0x5c, 0x48, 0x2b, - 0x32, 0x1b, 0x58, 0xe9, 0x29, 0x9f, 0x87, 0xa9, 0x3b, 0x58, 0xbb, 0x15, 0x56, 0xcd, 0x51, 0xd5, - 0x02, 0x11, 0x87, 0x14, 0x6b, 0x90, 0xef, 0x60, 0xcf, 0xd3, 0xda, 0x58, 0xf5, 0x0f, 0x1c, 0x5c, - 0x4c, 0xd1, 0xd9, 0xcf, 0x0f, 0xcc, 0xbe, 0x7f, 0xe6, 0x39, 0x8e, 0xda, 0x39, 0x70, 0x30, 0xaa, - 0x42, 0x16, 0x5b, 0xdd, 0x0e, 0x63, 0x48, 0x1f, 0xe1, 0xbf, 0xba, 0xd5, 0xed, 0xf4, 0xb3, 0x64, - 0x08, 0x8c, 0x53, 0x4c, 0x78, 0xd8, 0xbd, 0x6d, 0xe8, 0xb8, 0x38, 0x4e, 0x09, 0xce, 0x0f, 0x10, - 0x6c, 0xb3, 0xf1, 0x7e, 0x0e, 0x81, 0x43, 0x35, 0xc8, 0xe2, 0xe7, 0x7d, 0x6c, 0x79, 0x86, 0x6d, - 0x15, 0x27, 0x28, 0xc9, 0x23, 0x43, 0x56, 0x11, 0x9b, 0xcd, 0x7e, 0x8a, 0x1e, 0x0e, 0x5d, 0x86, - 0x09, 0xdb, 0xf1, 0x0d, 0xdb, 0xf2, 0x8a, 0x99, 0x79, 0x69, 0x21, 0x77, 0xe1, 0x03, 0x43, 0x03, - 0x61, 0x93, 0xe9, 0x28, 0x42, 0x19, 0x35, 0x40, 0xf6, 0xec, 0xae, 0xab, 0x63, 0x55, 0xb7, 0x9b, - 0x58, 0x35, 0xac, 0x96, 0x5d, 0xcc, 0x52, 0x82, 0xb3, 0x83, 0x13, 0xa1, 0x8a, 0x35, 0xbb, 0x89, - 0x1b, 0x56, 0xcb, 0x56, 0x0a, 0x5e, 0xe4, 0x19, 0x9d, 0x82, 0x71, 0xef, 0xc0, 0xf2, 0xb5, 0xe7, - 0x8b, 0x79, 0x1a, 0x21, 0xfc, 0xa9, 0xfc, 0x9d, 0x71, 0x98, 0x1a, 0x25, 0xc4, 0xae, 0x41, 0xba, - 0x45, 0x66, 0x59, 0x4c, 0x9c, 0xc4, 0x07, 0x0c, 0x13, 0x75, 0xe2, 0xf8, 0x8f, 0xe9, 0xc4, 0x2a, - 0xe4, 0x2c, 0xec, 0xf9, 0xb8, 0xc9, 0x22, 0x22, 0x39, 0x62, 0x4c, 0x01, 0x03, 0x0d, 0x86, 0x54, - 0xea, 0xc7, 0x0a, 0xa9, 0x67, 0x61, 0x2a, 0x30, 0x49, 0x75, 0x35, 0xab, 0x2d, 0x62, 0x73, 0x29, - 0xce, 0x92, 0xc5, 0xba, 0xc0, 0x29, 0x04, 0xa6, 0x14, 0x70, 0xe4, 0x19, 0xad, 0x00, 0xd8, 0x16, - 0xb6, 0x5b, 0x6a, 0x13, 0xeb, 0x66, 0x31, 0x73, 0x84, 0x97, 0x36, 0x89, 0xca, 0x80, 0x97, 0x6c, - 0x26, 0xd5, 0x4d, 0x74, 0xb5, 0x17, 0x6a, 0x13, 0x47, 0x44, 0xca, 0x3a, 0xdb, 0x64, 0x03, 0xd1, - 0xb6, 0x0b, 0x05, 0x17, 0x93, 0xb8, 0xc7, 0x4d, 0x3e, 0xb3, 0x2c, 0x35, 0x62, 0x31, 0x76, 0x66, - 0x0a, 0x87, 0xb1, 0x89, 0x4d, 0xba, 0xe1, 0x47, 0xf4, 0x10, 0x04, 0x02, 0x95, 0x86, 0x15, 0xd0, - 0x2c, 0x94, 0x17, 0xc2, 0x0d, 0xad, 0x83, 0xe7, 0xee, 0x42, 0x21, 0xea, 0x1e, 0x34, 0x0b, 0x69, - 0xcf, 0xd7, 0x5c, 0x9f, 0x46, 0x61, 0x5a, 0x61, 0x0f, 0x48, 0x86, 0x24, 0xb6, 0x9a, 0x34, 0xcb, - 0xa5, 0x15, 0xf2, 0x13, 0xfd, 0x74, 0x6f, 0xc2, 0x49, 0x3a, 0xe1, 0x0f, 0x0d, 0xae, 0x68, 0x84, - 0xb9, 0x7f, 0xde, 0x73, 0x4f, 0xc2, 0x64, 0x64, 0x02, 0xa3, 0xbe, 0xba, 0xfc, 0x73, 0xf0, 0xc0, - 0x50, 0x6a, 0xf4, 0x2c, 0xcc, 0x76, 0x2d, 0xc3, 0xf2, 0xb1, 0xeb, 0xb8, 0x98, 0x44, 0x2c, 0x7b, - 0x55, 0xf1, 0x5f, 0x27, 0x8e, 0x88, 0xb9, 0xdd, 0xb0, 0x36, 0x63, 0x51, 0x66, 0xba, 0x83, 0xc2, - 0xc7, 0xb2, 0x99, 0x37, 0x26, 0xe4, 0x7b, 0xf7, 0xee, 0xdd, 0x4b, 0x94, 0xbf, 0x30, 0x0e, 0xb3, - 0xc3, 0xf6, 0xcc, 0xd0, 0xed, 0x7b, 0x0a, 0xc6, 0xad, 0x6e, 0x67, 0x0f, 0xbb, 0xd4, 0x49, 0x69, - 0x85, 0x3f, 0xa1, 0x2a, 0xa4, 0x4d, 0x6d, 0x0f, 0x9b, 0xc5, 0xd4, 0xbc, 0xb4, 0x50, 0xb8, 0xf0, - 0xf8, 0x48, 0xbb, 0x72, 0x71, 0x8d, 0x40, 0x14, 0x86, 0x44, 0x1f, 0x87, 0x14, 0x4f, 0xd1, 0x84, - 0xe1, 0xb1, 0xd1, 0x18, 0xc8, 0x5e, 0x52, 0x28, 0x0e, 0x3d, 0x08, 0x59, 0xf2, 0x97, 0xc5, 0xc6, - 0x38, 0xb5, 0x39, 0x43, 0x04, 0x24, 0x2e, 0xd0, 0x1c, 0x64, 0xe8, 0x36, 0x69, 0x62, 0x51, 0xda, - 0x82, 0x67, 0x12, 0x58, 0x4d, 0xdc, 0xd2, 0xba, 0xa6, 0xaf, 0xde, 0xd6, 0xcc, 0x2e, 0xa6, 0x01, - 0x9f, 0x55, 0xf2, 0x5c, 0xf8, 0x29, 0x22, 0x43, 0x67, 0x21, 0xc7, 0x76, 0x95, 0x61, 0x35, 0xf1, - 0xf3, 0x34, 0x7b, 0xa6, 0x15, 0xb6, 0xd1, 0x1a, 0x44, 0x42, 0x5e, 0x7f, 0xd3, 0xb3, 0x2d, 0x11, - 0x9a, 0xf4, 0x15, 0x44, 0x40, 0x5f, 0xff, 0x64, 0x7f, 0xe2, 0xfe, 0xe0, 0xf0, 0xe9, 0xf5, 0xc7, - 0x54, 0xf9, 0x5b, 0x09, 0x48, 0xd1, 0x7c, 0x31, 0x05, 0xb9, 0x9d, 0x1b, 0x5b, 0x75, 0x75, 0x65, - 0x73, 0x77, 0x79, 0xad, 0x2e, 0x4b, 0xa8, 0x00, 0x40, 0x05, 0xd7, 0xd7, 0x36, 0xab, 0x3b, 0x72, - 0x22, 0x78, 0x6e, 0x6c, 0xec, 0x5c, 0xbe, 0x28, 0x27, 0x03, 0xc0, 0x2e, 0x13, 0xa4, 0xc2, 0x0a, - 0x4f, 0x5c, 0x90, 0xd3, 0x48, 0x86, 0x3c, 0x23, 0x68, 0x3c, 0x5b, 0x5f, 0xb9, 0x7c, 0x51, 0x1e, - 0x8f, 0x4a, 0x9e, 0xb8, 0x20, 0x4f, 0xa0, 0x49, 0xc8, 0x52, 0xc9, 0xf2, 0xe6, 0xe6, 0x9a, 0x9c, - 0x09, 0x38, 0xb7, 0x77, 0x94, 0xc6, 0xc6, 0xaa, 0x9c, 0x0d, 0x38, 0x57, 0x95, 0xcd, 0xdd, 0x2d, - 0x19, 0x02, 0x86, 0xf5, 0xfa, 0xf6, 0x76, 0x75, 0xb5, 0x2e, 0xe7, 0x02, 0x8d, 0xe5, 0x1b, 0x3b, - 0xf5, 0x6d, 0x39, 0x1f, 0x31, 0xeb, 0x89, 0x0b, 0xf2, 0x64, 0xf0, 0x8a, 0xfa, 0xc6, 0xee, 0xba, - 0x5c, 0x40, 0xd3, 0x30, 0xc9, 0x5e, 0x21, 0x8c, 0x98, 0xea, 0x13, 0x5d, 0xbe, 0x28, 0xcb, 0x3d, - 0x43, 0x18, 0xcb, 0x74, 0x44, 0x70, 0xf9, 0xa2, 0x8c, 0xca, 0x35, 0x48, 0xd3, 0xe8, 0x42, 0x08, - 0x0a, 0x6b, 0xd5, 0xe5, 0xfa, 0x9a, 0xba, 0xb9, 0xb5, 0xd3, 0xd8, 0xdc, 0xa8, 0xae, 0xc9, 0x52, - 0x4f, 0xa6, 0xd4, 0x3f, 0xb9, 0xdb, 0x50, 0xea, 0x2b, 0x72, 0x22, 0x2c, 0xdb, 0xaa, 0x57, 0x77, - 0xea, 0x2b, 0x72, 0xb2, 0xac, 0xc3, 0xec, 0xb0, 0x3c, 0x39, 0x74, 0x67, 0x84, 0x96, 0x38, 0x71, - 0xc4, 0x12, 0x53, 0xae, 0x81, 0x25, 0xfe, 0x61, 0x02, 0x66, 0x86, 0xd4, 0x8a, 0xa1, 0x2f, 0x79, - 0x0a, 0xd2, 0x2c, 0x44, 0x59, 0xf5, 0x7c, 0x74, 0x68, 0xd1, 0xa1, 0x01, 0x3b, 0x50, 0x41, 0x29, - 0x2e, 0xdc, 0x41, 0x24, 0x8f, 0xe8, 0x20, 0x08, 0xc5, 0x40, 0x4e, 0xff, 0xd9, 0x81, 0x9c, 0xce, - 0xca, 0xde, 0xe5, 0x51, 0xca, 0x1e, 0x95, 0x9d, 0x2c, 0xb7, 0xa7, 0x87, 0xe4, 0xf6, 0x6b, 0x30, - 0x3d, 0x40, 0x34, 0x72, 0x8e, 0x7d, 0x41, 0x82, 0xe2, 0x51, 0xce, 0x89, 0xc9, 0x74, 0x89, 0x48, - 0xa6, 0xbb, 0xd6, 0xef, 0xc1, 0x73, 0x47, 0x2f, 0xc2, 0xc0, 0x5a, 0xbf, 0x22, 0xc1, 0xa9, 0xe1, - 0x9d, 0xe2, 0x50, 0x1b, 0x3e, 0x0e, 0xe3, 0x1d, 0xec, 0xef, 0xdb, 0xa2, 0x5b, 0xfa, 0xd0, 0x90, - 0x1a, 0x4c, 0x86, 0xfb, 0x17, 0x9b, 0xa3, 0xc2, 0x45, 0x3c, 0x79, 0x54, 0xbb, 0xc7, 0xac, 0x19, - 0xb0, 0xf4, 0x73, 0x09, 0x78, 0x60, 0x28, 0xf9, 0x50, 0x43, 0x3f, 0x08, 0x60, 0x58, 0x4e, 0xd7, - 0x67, 0x1d, 0x11, 0x4b, 0xb0, 0x59, 0x2a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0xae, 0x1f, 0x8c, 0x27, - 0xe9, 0x38, 0x30, 0x11, 0x55, 0xb8, 0xd2, 0x33, 0x34, 0x45, 0x0d, 0x2d, 0x1d, 0x31, 0xd3, 0x81, - 0xc0, 0xfc, 0x28, 0xc8, 0xba, 0x69, 0x60, 0xcb, 0x57, 0x3d, 0xdf, 0xc5, 0x5a, 0xc7, 0xb0, 0xda, - 0xb4, 0x82, 0x64, 0x2a, 0xe9, 0x96, 0x66, 0x7a, 0x58, 0x99, 0x62, 0xc3, 0xdb, 0x62, 0x94, 0x20, - 0x68, 0x00, 0xb9, 0x21, 0xc4, 0x78, 0x04, 0xc1, 0x86, 0x03, 0x44, 0xf9, 0x9b, 0x19, 0xc8, 0x85, - 0xfa, 0x6a, 0x74, 0x0e, 0xf2, 0x37, 0xb5, 0xdb, 0x9a, 0x2a, 0xce, 0x4a, 0xcc, 0x13, 0x39, 0x22, - 0xdb, 0xe2, 0xe7, 0xa5, 0x8f, 0xc2, 0x2c, 0x55, 0xb1, 0xbb, 0x3e, 0x76, 0x55, 0xdd, 0xd4, 0x3c, - 0x8f, 0x3a, 0x2d, 0x43, 0x55, 0x11, 0x19, 0xdb, 0x24, 0x43, 0x35, 0x31, 0x82, 0x2e, 0xc1, 0x0c, - 0x45, 0x74, 0xba, 0xa6, 0x6f, 0x38, 0x26, 0x56, 0xc9, 0xe9, 0xcd, 0xa3, 0x95, 0x24, 0xb0, 0x6c, - 0x9a, 0x68, 0xac, 0x73, 0x05, 0x62, 0x91, 0x87, 0x56, 0xe0, 0x83, 0x14, 0xd6, 0xc6, 0x16, 0x76, - 0x35, 0x1f, 0xab, 0xf8, 0x33, 0x5d, 0xcd, 0xf4, 0x54, 0xcd, 0x6a, 0xaa, 0xfb, 0x9a, 0xb7, 0x5f, - 0x9c, 0x25, 0x04, 0xcb, 0x89, 0xa2, 0xa4, 0x9c, 0x21, 0x8a, 0xab, 0x5c, 0xaf, 0x4e, 0xd5, 0xaa, - 0x56, 0xf3, 0x13, 0x9a, 0xb7, 0x8f, 0x2a, 0x70, 0x8a, 0xb2, 0x78, 0xbe, 0x6b, 0x58, 0x6d, 0x55, - 0xdf, 0xc7, 0xfa, 0x2d, 0xb5, 0xeb, 0xb7, 0xae, 0x14, 0x1f, 0x0c, 0xbf, 0x9f, 0x5a, 0xb8, 0x4d, - 0x75, 0x6a, 0x44, 0x65, 0xd7, 0x6f, 0x5d, 0x41, 0xdb, 0x90, 0x27, 0x8b, 0xd1, 0x31, 0xee, 0x62, - 0xb5, 0x65, 0xbb, 0xb4, 0x34, 0x16, 0x86, 0xa4, 0xa6, 0x90, 0x07, 0x17, 0x37, 0x39, 0x60, 0xdd, - 0x6e, 0xe2, 0x4a, 0x7a, 0x7b, 0xab, 0x5e, 0x5f, 0x51, 0x72, 0x82, 0xe5, 0xba, 0xed, 0x92, 0x80, - 0x6a, 0xdb, 0x81, 0x83, 0x73, 0x2c, 0xa0, 0xda, 0xb6, 0x70, 0xef, 0x25, 0x98, 0xd1, 0x75, 0x36, - 0x67, 0x43, 0x57, 0xf9, 0x19, 0xcb, 0x2b, 0xca, 0x11, 0x67, 0xe9, 0xfa, 0x2a, 0x53, 0xe0, 0x31, - 0xee, 0xa1, 0xab, 0xf0, 0x40, 0xcf, 0x59, 0x61, 0xe0, 0xf4, 0xc0, 0x2c, 0xfb, 0xa1, 0x97, 0x60, - 0xc6, 0x39, 0x18, 0x04, 0xa2, 0xc8, 0x1b, 0x9d, 0x83, 0x7e, 0xd8, 0x93, 0x30, 0xeb, 0xec, 0x3b, - 0x83, 0xb8, 0xc7, 0xc2, 0x38, 0xe4, 0xec, 0x3b, 0xfd, 0xc0, 0x47, 0xe8, 0x81, 0xdb, 0xc5, 0xba, - 0xe6, 0xe3, 0x66, 0xf1, 0x74, 0x58, 0x3d, 0x34, 0x80, 0x96, 0x40, 0xd6, 0x75, 0x15, 0x5b, 0xda, - 0x9e, 0x89, 0x55, 0xcd, 0xc5, 0x96, 0xe6, 0x15, 0xcf, 0x86, 0x95, 0x0b, 0xba, 0x5e, 0xa7, 0xa3, - 0x55, 0x3a, 0x88, 0x1e, 0x83, 0x69, 0x7b, 0xef, 0xa6, 0xce, 0x42, 0x52, 0x75, 0x5c, 0xdc, 0x32, - 0x9e, 0x2f, 0x3e, 0x4c, 0xfd, 0x3b, 0x45, 0x06, 0x68, 0x40, 0x6e, 0x51, 0x31, 0x7a, 0x14, 0x64, - 0xdd, 0xdb, 0xd7, 0x5c, 0x87, 0xe6, 0x64, 0xcf, 0xd1, 0x74, 0x5c, 0x7c, 0x84, 0xa9, 0x32, 0xf9, - 0x86, 0x10, 0x93, 0x2d, 0xe1, 0xdd, 0x31, 0x5a, 0xbe, 0x60, 0x3c, 0xcf, 0xb6, 0x04, 0x95, 0x71, - 0xb6, 0x05, 0x90, 0x89, 0x2b, 0x22, 0x2f, 0x5e, 0xa0, 0x6a, 0x05, 0x67, 0xdf, 0x09, 0xbf, 0xf7, - 0x21, 0x98, 0x24, 0x9a, 0xbd, 0x97, 0x3e, 0xca, 0x1a, 0x32, 0x67, 0x3f, 0xf4, 0xc6, 0xf7, 0xac, - 0x37, 0x2e, 0x57, 0x20, 0x1f, 0x8e, 0x4f, 0x94, 0x05, 0x16, 0xa1, 0xb2, 0x44, 0x9a, 0x95, 0xda, - 0xe6, 0x0a, 0x69, 0x33, 0x9e, 0xab, 0xcb, 0x09, 0xd2, 0xee, 0xac, 0x35, 0x76, 0xea, 0xaa, 0xb2, - 0xbb, 0xb1, 0xd3, 0x58, 0xaf, 0xcb, 0xc9, 0x70, 0x5f, 0xfd, 0xbd, 0x04, 0x14, 0xa2, 0x47, 0x24, - 0xf4, 0x53, 0x70, 0x5a, 0xdc, 0x67, 0x78, 0xd8, 0x57, 0xef, 0x18, 0x2e, 0xdd, 0x32, 0x1d, 0x8d, - 0x95, 0xaf, 0x60, 0xd1, 0x66, 0xb9, 0xd6, 0x36, 0xf6, 0x9f, 0x31, 0x5c, 0xb2, 0x21, 0x3a, 0x9a, - 0x8f, 0xd6, 0xe0, 0xac, 0x65, 0xab, 0x9e, 0xaf, 0x59, 0x4d, 0xcd, 0x6d, 0xaa, 0xbd, 0x9b, 0x24, - 0x55, 0xd3, 0x75, 0xec, 0x79, 0x36, 0x2b, 0x55, 0x01, 0xcb, 0x07, 0x2c, 0x7b, 0x9b, 0x2b, 0xf7, - 0x72, 0x78, 0x95, 0xab, 0xf6, 0x05, 0x58, 0xf2, 0xa8, 0x00, 0x7b, 0x10, 0xb2, 0x1d, 0xcd, 0x51, - 0xb1, 0xe5, 0xbb, 0x07, 0xb4, 0x31, 0xce, 0x28, 0x99, 0x8e, 0xe6, 0xd4, 0xc9, 0xf3, 0xfb, 0x73, - 0x3e, 0xf9, 0xa7, 0x24, 0xe4, 0xc3, 0xcd, 0x31, 0x39, 0x6b, 0xe8, 0xb4, 0x8e, 0x48, 0x34, 0xd3, - 0x3c, 0x74, 0x6c, 0x2b, 0xbd, 0x58, 0x23, 0x05, 0xa6, 0x32, 0xce, 0x5a, 0x56, 0x85, 0x21, 0x49, - 0x71, 0x27, 0xb9, 0x05, 0xb3, 0x16, 0x21, 0xa3, 0xf0, 0x27, 0xb4, 0x0a, 0xe3, 0x37, 0x3d, 0xca, - 0x3d, 0x4e, 0xb9, 0x1f, 0x3e, 0x9e, 0xfb, 0xe9, 0x6d, 0x4a, 0x9e, 0x7d, 0x7a, 0x5b, 0xdd, 0xd8, - 0x54, 0xd6, 0xab, 0x6b, 0x0a, 0x87, 0xa3, 0x33, 0x90, 0x32, 0xb5, 0xbb, 0x07, 0xd1, 0x52, 0x44, - 0x45, 0xa3, 0x3a, 0xfe, 0x0c, 0xa4, 0xee, 0x60, 0xed, 0x56, 0xb4, 0x00, 0x50, 0xd1, 0x7b, 0x18, - 0xfa, 0x4b, 0x90, 0xa6, 0xfe, 0x42, 0x00, 0xdc, 0x63, 0xf2, 0x18, 0xca, 0x40, 0xaa, 0xb6, 0xa9, - 0x90, 0xf0, 0x97, 0x21, 0xcf, 0xa4, 0xea, 0x56, 0xa3, 0x5e, 0xab, 0xcb, 0x89, 0xf2, 0x25, 0x18, - 0x67, 0x4e, 0x20, 0x5b, 0x23, 0x70, 0x83, 0x3c, 0xc6, 0x1f, 0x39, 0x87, 0x24, 0x46, 0x77, 0xd7, - 0x97, 0xeb, 0x8a, 0x9c, 0x08, 0x2f, 0xaf, 0x07, 0xf9, 0x70, 0x5f, 0xfc, 0xfe, 0xc4, 0xd4, 0xdf, - 0x48, 0x90, 0x0b, 0xf5, 0xb9, 0xa4, 0x41, 0xd1, 0x4c, 0xd3, 0xbe, 0xa3, 0x6a, 0xa6, 0xa1, 0x79, - 0x3c, 0x28, 0x80, 0x8a, 0xaa, 0x44, 0x32, 0xea, 0xa2, 0xbd, 0x2f, 0xc6, 0xbf, 0x2c, 0x81, 0xdc, - 0xdf, 0x62, 0xf6, 0x19, 0x28, 0xfd, 0x44, 0x0d, 0x7c, 0x49, 0x82, 0x42, 0xb4, 0xaf, 0xec, 0x33, - 0xef, 0xdc, 0x4f, 0xd4, 0xbc, 0xd7, 0x12, 0x30, 0x19, 0xe9, 0x26, 0x47, 0xb5, 0xee, 0x33, 0x30, - 0x6d, 0x34, 0x71, 0xc7, 0xb1, 0x7d, 0x6c, 0xe9, 0x07, 0xaa, 0x89, 0x6f, 0x63, 0xb3, 0x58, 0xa6, - 0x89, 0x62, 0xe9, 0xf8, 0x7e, 0x75, 0xb1, 0xd1, 0xc3, 0xad, 0x11, 0x58, 0x65, 0xa6, 0xb1, 0x52, - 0x5f, 0xdf, 0xda, 0xdc, 0xa9, 0x6f, 0xd4, 0x6e, 0xa8, 0xbb, 0x1b, 0x3f, 0xb3, 0xb1, 0xf9, 0xcc, - 0x86, 0x22, 0x1b, 0x7d, 0x6a, 0xef, 0xe1, 0x56, 0xdf, 0x02, 0xb9, 0xdf, 0x28, 0x74, 0x1a, 0x86, - 0x99, 0x25, 0x8f, 0xa1, 0x19, 0x98, 0xda, 0xd8, 0x54, 0xb7, 0x1b, 0x2b, 0x75, 0xb5, 0x7e, 0xfd, - 0x7a, 0xbd, 0xb6, 0xb3, 0xcd, 0x6e, 0x20, 0x02, 0xed, 0x9d, 0xe8, 0xa6, 0x7e, 0x31, 0x09, 0x33, - 0x43, 0x2c, 0x41, 0x55, 0x7e, 0x76, 0x60, 0xc7, 0x99, 0x8f, 0x8c, 0x62, 0xfd, 0x22, 0x29, 0xf9, - 0x5b, 0x9a, 0xeb, 0xf3, 0xa3, 0xc6, 0xa3, 0x40, 0xbc, 0x64, 0xf9, 0x46, 0xcb, 0xc0, 0x2e, 0xbf, - 0xb0, 0x61, 0x07, 0x8a, 0xa9, 0x9e, 0x9c, 0xdd, 0xd9, 0x7c, 0x18, 0x90, 0x63, 0x7b, 0x86, 0x6f, - 0xdc, 0xc6, 0xaa, 0x61, 0x89, 0xdb, 0x1d, 0x72, 0xc0, 0x48, 0x29, 0xb2, 0x18, 0x69, 0x58, 0x7e, - 0xa0, 0x6d, 0xe1, 0xb6, 0xd6, 0xa7, 0x4d, 0x12, 0x78, 0x52, 0x91, 0xc5, 0x48, 0xa0, 0x7d, 0x0e, - 0xf2, 0x4d, 0xbb, 0x4b, 0xba, 0x2e, 0xa6, 0x47, 0xea, 0x85, 0xa4, 0xe4, 0x98, 0x2c, 0x50, 0xe1, - 0xfd, 0x74, 0xef, 0x5a, 0x29, 0xaf, 0xe4, 0x98, 0x8c, 0xa9, 0x9c, 0x87, 0x29, 0xad, 0xdd, 0x76, - 0x09, 0xb9, 0x20, 0x62, 0x27, 0x84, 0x42, 0x20, 0xa6, 0x8a, 0x73, 0x4f, 0x43, 0x46, 0xf8, 0x81, - 0x94, 0x64, 0xe2, 0x09, 0xd5, 0x61, 0xc7, 0xde, 0xc4, 0x42, 0x56, 0xc9, 0x58, 0x62, 0xf0, 0x1c, - 0xe4, 0x0d, 0x4f, 0xed, 0xdd, 0x92, 0x27, 0xe6, 0x13, 0x0b, 0x19, 0x25, 0x67, 0x78, 0xc1, 0x0d, - 0x63, 0xf9, 0x95, 0x04, 0x14, 0xa2, 0xb7, 0xfc, 0x68, 0x05, 0x32, 0xa6, 0xad, 0x6b, 0x34, 0xb4, - 0xd8, 0x27, 0xa6, 0x85, 0x98, 0x0f, 0x03, 0x8b, 0x6b, 0x5c, 0x5f, 0x09, 0x90, 0x73, 0xff, 0x20, - 0x41, 0x46, 0x88, 0xd1, 0x29, 0x48, 0x39, 0x9a, 0xbf, 0x4f, 0xe9, 0xd2, 0xcb, 0x09, 0x59, 0x52, - 0xe8, 0x33, 0x91, 0x7b, 0x8e, 0x66, 0xd1, 0x10, 0xe0, 0x72, 0xf2, 0x4c, 0xd6, 0xd5, 0xc4, 0x5a, - 0x93, 0x1e, 0x3f, 0xec, 0x4e, 0x07, 0x5b, 0xbe, 0x27, 0xd6, 0x95, 0xcb, 0x6b, 0x5c, 0x8c, 0x1e, - 0x87, 0x69, 0xdf, 0xd5, 0x0c, 0x33, 0xa2, 0x9b, 0xa2, 0xba, 0xb2, 0x18, 0x08, 0x94, 0x2b, 0x70, - 0x46, 0xf0, 0x36, 0xb1, 0xaf, 0xe9, 0xfb, 0xb8, 0xd9, 0x03, 0x8d, 0xd3, 0x6b, 0x86, 0xd3, 0x5c, - 0x61, 0x85, 0x8f, 0x0b, 0x6c, 0xf9, 0x07, 0x12, 0x4c, 0x8b, 0x03, 0x53, 0x33, 0x70, 0xd6, 0x3a, - 0x80, 0x66, 0x59, 0xb6, 0x1f, 0x76, 0xd7, 0x60, 0x28, 0x0f, 0xe0, 0x16, 0xab, 0x01, 0x48, 0x09, - 0x11, 0xcc, 0x75, 0x00, 0x7a, 0x23, 0x47, 0xba, 0xed, 0x2c, 0xe4, 0xf8, 0x27, 0x1c, 0xfa, 0x1d, - 0x90, 0x1d, 0xb1, 0x81, 0x89, 0xc8, 0xc9, 0x0a, 0xcd, 0x42, 0x7a, 0x0f, 0xb7, 0x0d, 0x8b, 0x5f, - 0xcc, 0xb2, 0x07, 0x71, 0x11, 0x92, 0x0a, 0x2e, 0x42, 0x96, 0x3f, 0x0d, 0x33, 0xba, 0xdd, 0xe9, - 0x37, 0x77, 0x59, 0xee, 0x3b, 0xe6, 0x7b, 0x9f, 0x90, 0x9e, 0x83, 0x5e, 0x8b, 0xf9, 0x8e, 0x24, - 0xfd, 0x41, 0x22, 0xb9, 0xba, 0xb5, 0xfc, 0xb5, 0xc4, 0xdc, 0x2a, 0x83, 0x6e, 0x89, 0x99, 0x2a, - 0xb8, 0x65, 0x62, 0x9d, 0x58, 0x0f, 0x5f, 0x59, 0x80, 0x8f, 0xb4, 0x0d, 0x7f, 0xbf, 0xbb, 0xb7, - 0xa8, 0xdb, 0x9d, 0xa5, 0xb6, 0xdd, 0xb6, 0x7b, 0x9f, 0x3e, 0xc9, 0x13, 0x7d, 0xa0, 0xbf, 0xf8, - 0xe7, 0xcf, 0x6c, 0x20, 0x9d, 0x8b, 0xfd, 0x56, 0x5a, 0xd9, 0x80, 0x19, 0xae, 0xac, 0xd2, 0xef, - 0x2f, 0xec, 0x14, 0x81, 0x8e, 0xbd, 0xc3, 0x2a, 0x7e, 0xe3, 0x75, 0x5a, 0xae, 0x95, 0x69, 0x0e, - 0x25, 0x63, 0xec, 0xa0, 0x51, 0x51, 0xe0, 0x81, 0x08, 0x1f, 0xdb, 0x9a, 0xd8, 0x8d, 0x61, 0xfc, - 0x1e, 0x67, 0x9c, 0x09, 0x31, 0x6e, 0x73, 0x68, 0xa5, 0x06, 0x93, 0x27, 0xe1, 0xfa, 0x3b, 0xce, - 0x95, 0xc7, 0x61, 0x92, 0x55, 0x98, 0xa2, 0x24, 0x7a, 0xd7, 0xf3, 0xed, 0x0e, 0xcd, 0x7b, 0xc7, - 0xd3, 0xfc, 0xfd, 0xeb, 0x6c, 0xaf, 0x14, 0x08, 0xac, 0x16, 0xa0, 0x2a, 0x15, 0xa0, 0x9f, 0x9c, - 0x9a, 0x58, 0x37, 0x63, 0x18, 0x5e, 0xe5, 0x86, 0x04, 0xfa, 0x95, 0x4f, 0xc1, 0x2c, 0xf9, 0x4d, - 0xd3, 0x52, 0xd8, 0x92, 0xf8, 0x0b, 0xaf, 0xe2, 0x0f, 0x5e, 0x60, 0xdb, 0x71, 0x26, 0x20, 0x08, - 0xd9, 0x14, 0x5a, 0xc5, 0x36, 0xf6, 0x7d, 0xec, 0x7a, 0xaa, 0x66, 0x0e, 0x33, 0x2f, 0x74, 0x63, - 0x50, 0xfc, 0xe2, 0x9b, 0xd1, 0x55, 0x5c, 0x65, 0xc8, 0xaa, 0x69, 0x56, 0x76, 0xe1, 0xf4, 0x90, - 0xa8, 0x18, 0x81, 0xf3, 0x45, 0xce, 0x39, 0x3b, 0x10, 0x19, 0x84, 0x76, 0x0b, 0x84, 0x3c, 0x58, - 0xcb, 0x11, 0x38, 0x7f, 0x97, 0x73, 0x22, 0x8e, 0x15, 0x4b, 0x4a, 0x18, 0x9f, 0x86, 0xe9, 0xdb, - 0xd8, 0xdd, 0xb3, 0x3d, 0x7e, 0x4b, 0x33, 0x02, 0xdd, 0x4b, 0x9c, 0x6e, 0x8a, 0x03, 0xe9, 0xb5, - 0x0d, 0xe1, 0xba, 0x0a, 0x99, 0x96, 0xa6, 0xe3, 0x11, 0x28, 0xbe, 0xc4, 0x29, 0x26, 0x88, 0x3e, - 0x81, 0x56, 0x21, 0xdf, 0xb6, 0x79, 0x65, 0x8a, 0x87, 0xbf, 0xcc, 0xe1, 0x39, 0x81, 0xe1, 0x14, - 0x8e, 0xed, 0x74, 0x4d, 0x52, 0xb6, 0xe2, 0x29, 0x7e, 0x4f, 0x50, 0x08, 0x0c, 0xa7, 0x38, 0x81, - 0x5b, 0x7f, 0x5f, 0x50, 0x78, 0x21, 0x7f, 0x3e, 0x05, 0x39, 0xdb, 0x32, 0x0f, 0x6c, 0x6b, 0x14, - 0x23, 0xbe, 0xcc, 0x19, 0x80, 0x43, 0x08, 0xc1, 0x35, 0xc8, 0x8e, 0xba, 0x10, 0x5f, 0x79, 0x53, - 0x6c, 0x0f, 0xb1, 0x02, 0xab, 0x30, 0x25, 0x12, 0x94, 0x61, 0x5b, 0x23, 0x50, 0xfc, 0x21, 0xa7, - 0x28, 0x84, 0x60, 0x7c, 0x1a, 0x3e, 0xf6, 0xfc, 0x36, 0x1e, 0x85, 0xe4, 0x15, 0x31, 0x0d, 0x0e, - 0xe1, 0xae, 0xdc, 0xc3, 0x96, 0xbe, 0x3f, 0x1a, 0xc3, 0x57, 0x85, 0x2b, 0x05, 0x86, 0x50, 0xd4, - 0x60, 0xb2, 0xa3, 0xb9, 0xde, 0xbe, 0x66, 0x8e, 0xb4, 0x1c, 0x7f, 0xc4, 0x39, 0xf2, 0x01, 0x88, - 0x7b, 0xa4, 0x6b, 0x9d, 0x84, 0xe6, 0x6b, 0xc2, 0x23, 0x21, 0x18, 0xdf, 0x7a, 0x9e, 0x4f, 0xaf, - 0xb4, 0x4e, 0xc2, 0xf6, 0xc7, 0x62, 0xeb, 0x31, 0xec, 0x7a, 0x98, 0xf1, 0x1a, 0x64, 0x3d, 0xe3, - 0xee, 0x48, 0x34, 0x7f, 0x22, 0x56, 0x9a, 0x02, 0x08, 0xf8, 0x06, 0x9c, 0x19, 0x5a, 0x26, 0x46, - 0x20, 0xfb, 0x53, 0x4e, 0x76, 0x6a, 0x48, 0xa9, 0xe0, 0x29, 0xe1, 0xa4, 0x94, 0x7f, 0x26, 0x52, - 0x02, 0xee, 0xe3, 0xda, 0x22, 0x67, 0x05, 0x4f, 0x6b, 0x9d, 0xcc, 0x6b, 0x7f, 0x2e, 0xbc, 0xc6, - 0xb0, 0x11, 0xaf, 0xed, 0xc0, 0x29, 0xce, 0x78, 0xb2, 0x75, 0xfd, 0xba, 0x48, 0xac, 0x0c, 0xbd, - 0x1b, 0x5d, 0xdd, 0x4f, 0xc3, 0x5c, 0xe0, 0x4e, 0xd1, 0x94, 0x7a, 0x6a, 0x47, 0x73, 0x46, 0x60, - 0xfe, 0x06, 0x67, 0x16, 0x19, 0x3f, 0xe8, 0x6a, 0xbd, 0x75, 0xcd, 0x21, 0xe4, 0xcf, 0x42, 0x51, - 0x90, 0x77, 0x2d, 0x17, 0xeb, 0x76, 0xdb, 0x32, 0xee, 0xe2, 0xe6, 0x08, 0xd4, 0x7f, 0xd1, 0xb7, - 0x54, 0xbb, 0x21, 0x38, 0x61, 0x6e, 0x80, 0x1c, 0xf4, 0x2a, 0xaa, 0xd1, 0x71, 0x6c, 0xd7, 0x8f, - 0x61, 0xfc, 0xa6, 0x58, 0xa9, 0x00, 0xd7, 0xa0, 0xb0, 0x4a, 0x1d, 0x0a, 0xf4, 0x71, 0xd4, 0x90, - 0xfc, 0x4b, 0x4e, 0x34, 0xd9, 0x43, 0xf1, 0xc4, 0xa1, 0xdb, 0x1d, 0x47, 0x73, 0x47, 0xc9, 0x7f, - 0x7f, 0x25, 0x12, 0x07, 0x87, 0xf0, 0xc4, 0xe1, 0x1f, 0x38, 0x98, 0x54, 0xfb, 0x11, 0x18, 0xbe, - 0x25, 0x12, 0x87, 0xc0, 0x70, 0x0a, 0xd1, 0x30, 0x8c, 0x40, 0xf1, 0xd7, 0x82, 0x42, 0x60, 0x08, - 0xc5, 0x27, 0x7b, 0x85, 0xd6, 0xc5, 0x6d, 0xc3, 0xf3, 0x5d, 0xd6, 0x0a, 0x1f, 0x4f, 0xf5, 0xed, - 0x37, 0xa3, 0x4d, 0x98, 0x12, 0x82, 0x92, 0x4c, 0xc4, 0xaf, 0x50, 0xe9, 0x49, 0x29, 0xde, 0xb0, - 0xef, 0x88, 0x4c, 0x14, 0x82, 0xb1, 0xfd, 0x39, 0xd5, 0xd7, 0xab, 0xa0, 0xb8, 0x7f, 0x84, 0x29, - 0xfe, 0xfc, 0xdb, 0x9c, 0x2b, 0xda, 0xaa, 0x54, 0xd6, 0x48, 0x00, 0x45, 0x1b, 0x8a, 0x78, 0xb2, - 0x17, 0xde, 0x0e, 0x62, 0x28, 0xd2, 0x4f, 0x54, 0xae, 0xc3, 0x64, 0xa4, 0x99, 0x88, 0xa7, 0xfa, - 0x2c, 0xa7, 0xca, 0x87, 0x7b, 0x89, 0xca, 0x25, 0x48, 0x91, 0xc6, 0x20, 0x1e, 0xfe, 0x0b, 0x1c, - 0x4e, 0xd5, 0x2b, 0x1f, 0x83, 0x8c, 0x68, 0x08, 0xe2, 0xa1, 0xbf, 0xc8, 0xa1, 0x01, 0x84, 0xc0, - 0x45, 0x33, 0x10, 0x0f, 0xff, 0x25, 0x01, 0x17, 0x10, 0x02, 0x1f, 0xdd, 0x85, 0xdf, 0xfd, 0x95, - 0x14, 0x4f, 0xe8, 0xc2, 0x77, 0xd7, 0x60, 0x82, 0x77, 0x01, 0xf1, 0xe8, 0xcf, 0xf1, 0x97, 0x0b, - 0x44, 0xe5, 0x49, 0x48, 0x8f, 0xe8, 0xf0, 0x5f, 0xe5, 0x50, 0xa6, 0x5f, 0xa9, 0x41, 0x2e, 0x54, - 0xf9, 0xe3, 0xe1, 0xbf, 0xc6, 0xe1, 0x61, 0x14, 0x31, 0x9d, 0x57, 0xfe, 0x78, 0x82, 0x5f, 0x17, - 0xa6, 0x73, 0x04, 0x71, 0x9b, 0x28, 0xfa, 0xf1, 0xe8, 0xcf, 0x0b, 0xaf, 0x0b, 0x48, 0xe5, 0x29, - 0xc8, 0x06, 0x89, 0x3c, 0x1e, 0xff, 0x1b, 0x1c, 0xdf, 0xc3, 0x10, 0x0f, 0x84, 0x0a, 0x49, 0x3c, - 0xc5, 0x6f, 0x0a, 0x0f, 0x84, 0x50, 0x64, 0x1b, 0xf5, 0x37, 0x07, 0xf1, 0x4c, 0xbf, 0x25, 0xb6, - 0x51, 0x5f, 0x6f, 0x40, 0x56, 0x93, 0xe6, 0xd3, 0x78, 0x8a, 0xdf, 0x16, 0xab, 0x49, 0xf5, 0x89, - 0x19, 0xfd, 0xd5, 0x36, 0x9e, 0xe3, 0x77, 0x84, 0x19, 0x7d, 0xc5, 0xb6, 0xb2, 0x05, 0x68, 0xb0, - 0xd2, 0xc6, 0xf3, 0x7d, 0x81, 0xf3, 0x4d, 0x0f, 0x14, 0xda, 0xca, 0x33, 0x70, 0x6a, 0x78, 0x95, - 0x8d, 0x67, 0xfd, 0xe2, 0xdb, 0x7d, 0xe7, 0xa2, 0x70, 0x91, 0xad, 0xec, 0xf4, 0xd2, 0x75, 0xb8, - 0xc2, 0xc6, 0xd3, 0xbe, 0xf8, 0x76, 0x34, 0x63, 0x87, 0x0b, 0x6c, 0xa5, 0x0a, 0xd0, 0x2b, 0x6e, - 0xf1, 0x5c, 0x2f, 0x71, 0xae, 0x10, 0x88, 0x6c, 0x0d, 0x5e, 0xdb, 0xe2, 0xf1, 0x5f, 0x12, 0x5b, - 0x83, 0x23, 0xc8, 0xd6, 0x10, 0x65, 0x2d, 0x1e, 0xfd, 0xb2, 0xd8, 0x1a, 0x02, 0x42, 0x22, 0x3b, - 0x54, 0x39, 0xe2, 0x19, 0xbe, 0x2c, 0x22, 0x3b, 0x84, 0xaa, 0x5c, 0x83, 0x8c, 0xd5, 0x35, 0x4d, - 0x12, 0xa0, 0xe8, 0xf8, 0x7f, 0x10, 0x2b, 0xfe, 0xdb, 0xbb, 0xdc, 0x02, 0x01, 0xa8, 0x5c, 0x82, - 0x34, 0xee, 0xec, 0xe1, 0x66, 0x1c, 0xf2, 0xdf, 0xdf, 0x15, 0x49, 0x89, 0x68, 0x57, 0x9e, 0x02, - 0x60, 0x47, 0x7b, 0xfa, 0xd9, 0x2a, 0x06, 0xfb, 0x1f, 0xef, 0xf2, 0x7f, 0xdd, 0xe8, 0x41, 0x7a, - 0x04, 0xec, 0x1f, 0x41, 0x8e, 0x27, 0x78, 0x33, 0x4a, 0x40, 0x67, 0x7d, 0x15, 0x26, 0x6e, 0x7a, - 0xb6, 0xe5, 0x6b, 0xed, 0x38, 0xf4, 0x7f, 0x72, 0xb4, 0xd0, 0x27, 0x0e, 0xeb, 0xd8, 0x2e, 0xf6, - 0xb5, 0xb6, 0x17, 0x87, 0xfd, 0x2f, 0x8e, 0x0d, 0x00, 0x04, 0xac, 0x6b, 0x9e, 0x3f, 0xca, 0xbc, - 0x7f, 0x24, 0xc0, 0x02, 0x40, 0x8c, 0x26, 0xbf, 0x6f, 0xe1, 0x83, 0x38, 0xec, 0x5b, 0xc2, 0x68, - 0xae, 0x5f, 0xf9, 0x18, 0x64, 0xc9, 0x4f, 0xf6, 0xff, 0x58, 0x31, 0xe0, 0xff, 0xe6, 0xe0, 0x1e, - 0x82, 0xbc, 0xd9, 0xf3, 0x9b, 0xbe, 0x11, 0xef, 0xec, 0xff, 0xe1, 0x2b, 0x2d, 0xf4, 0x2b, 0x55, - 0xc8, 0x79, 0x7e, 0xb3, 0xd9, 0xe5, 0xfd, 0x55, 0x0c, 0xfc, 0x7f, 0xdf, 0x0d, 0x8e, 0xdc, 0x01, - 0x66, 0xb9, 0x3e, 0xfc, 0xf6, 0x10, 0x56, 0xed, 0x55, 0x9b, 0xdd, 0x1b, 0x3e, 0x57, 0x8e, 0xbf, - 0x00, 0x84, 0xcf, 0xa7, 0xa1, 0xac, 0xdb, 0x9d, 0x3d, 0xdb, 0x5b, 0x0a, 0xe5, 0xbb, 0xa5, 0x60, - 0x96, 0xe2, 0x72, 0x30, 0x10, 0xcc, 0x9d, 0xec, 0x5a, 0xb1, 0xfc, 0xb7, 0x49, 0xc8, 0xd4, 0x34, - 0xcf, 0xd7, 0xee, 0x68, 0x07, 0xc8, 0x81, 0x19, 0xf2, 0x7b, 0x5d, 0x73, 0xe8, 0x25, 0x15, 0xdf, - 0x8a, 0xfc, 0xe6, 0xf6, 0xc3, 0x8b, 0xbd, 0xb7, 0x0a, 0xc4, 0xe2, 0x10, 0x75, 0xfa, 0xc5, 0x7b, - 0x59, 0x7e, 0xf5, 0x9f, 0xcf, 0x8e, 0xfd, 0xf2, 0xbf, 0x9c, 0xcd, 0xac, 0x1f, 0x3c, 0x63, 0x98, - 0x9e, 0x6d, 0x29, 0xc3, 0xa8, 0xd1, 0x67, 0x25, 0x78, 0x70, 0x88, 0x7c, 0x83, 0x6f, 0x56, 0xfe, - 0xfd, 0xe3, 0xe2, 0x88, 0xaf, 0x16, 0x30, 0x66, 0x42, 0x3e, 0xf2, 0xfa, 0xe3, 0x5e, 0x33, 0x77, - 0x03, 0x8a, 0x47, 0xcd, 0x04, 0xc9, 0x90, 0xbc, 0x85, 0x0f, 0xf8, 0xbf, 0xcd, 0x91, 0x9f, 0xe8, - 0x7c, 0xef, 0x9f, 0x0b, 0xa5, 0x85, 0xdc, 0x85, 0xe9, 0x90, 0x75, 0xfc, 0x65, 0x6c, 0xbc, 0x92, - 0xb8, 0x22, 0xcd, 0x69, 0x30, 0x1f, 0x67, 0xe9, 0xff, 0xf3, 0x15, 0xe5, 0x12, 0x8c, 0x33, 0x21, - 0x9a, 0x85, 0x74, 0xc3, 0xf2, 0x2f, 0x5f, 0xa4, 0x54, 0x49, 0x85, 0x3d, 0x2c, 0xaf, 0xbd, 0x7a, - 0xbf, 0x34, 0xf6, 0xfd, 0xfb, 0xa5, 0xb1, 0x7f, 0xbc, 0x5f, 0x1a, 0x7b, 0xed, 0x7e, 0x49, 0x7a, - 0xe3, 0x7e, 0x49, 0x7a, 0xeb, 0x7e, 0x49, 0x7a, 0xe7, 0x7e, 0x49, 0xba, 0x77, 0x58, 0x92, 0xbe, - 0x7a, 0x58, 0x92, 0xbe, 0x7e, 0x58, 0x92, 0xbe, 0x7d, 0x58, 0x92, 0xbe, 0x7b, 0x58, 0x92, 0x5e, - 0x3d, 0x2c, 0x8d, 0x7d, 0xff, 0xb0, 0x24, 0xbd, 0x76, 0x58, 0x92, 0xde, 0x38, 0x2c, 0x8d, 0xbd, - 0x75, 0x58, 0x92, 0xde, 0x39, 0x2c, 0x8d, 0xdd, 0xfb, 0x61, 0x69, 0xec, 0xff, 0x02, 0x00, 0x00, - 0xff, 0xff, 0x0a, 0xd2, 0xf5, 0xa1, 0xad, 0x33, 0x00, 0x00, + // 4013 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xdc, 0xd6, + 0x75, 0x26, 0xf6, 0x87, 0xdc, 0x3d, 0xbb, 0x5c, 0x82, 0x20, 0x2d, 0xad, 0xe8, 0x64, 0x25, 0xad, + 0xed, 0x88, 0xb6, 0x13, 0x32, 0x23, 0x4b, 0xb2, 0xb4, 0x6a, 0xe2, 0x2e, 0x97, 0x2b, 0x66, 0x5d, + 0xfe, 0x05, 0x4b, 0xc6, 0x96, 0x33, 0x1d, 0x0c, 0x88, 0xbd, 0x5c, 0x42, 0xc2, 0x02, 0x08, 0x80, + 0x95, 0x4c, 0x4d, 0x1f, 0xd4, 0x71, 0xda, 0x4e, 0xda, 0x69, 0x9b, 0xfe, 0xcc, 0x34, 0x71, 0x1d, + 0xb7, 0x49, 0xa7, 0x71, 0x9a, 0xfe, 0x25, 0x4d, 0x9b, 0x26, 0xe9, 0x4b, 0xfa, 0x90, 0xd6, 0x4f, + 0x9d, 0xe4, 0xad, 0x0f, 0x9d, 0xd6, 0x62, 0x3c, 0x53, 0xb7, 0x75, 0x1b, 0xb7, 0xd5, 0x83, 0x67, + 0xfc, 0xd2, 0xb9, 0x7f, 0x58, 0x00, 0xbb, 0x24, 0xc0, 0x74, 0xec, 0x3c, 0x91, 0x38, 0xf7, 0x7c, + 0x1f, 0xce, 0x3d, 0xf7, 0xdc, 0x73, 0xce, 0xbd, 0x58, 0xf8, 0xd1, 0x15, 0x38, 0xd3, 0xb5, 0xac, + 0xae, 0x81, 0x16, 0x6d, 0xc7, 0xf2, 0xac, 0x9d, 0xfe, 0xee, 0x62, 0x07, 0xb9, 0x9a, 0xa3, 0xdb, + 0x9e, 0xe5, 0x2c, 0x10, 0x99, 0x34, 0x45, 0x35, 0x16, 0xb8, 0x46, 0x75, 0x0d, 0xa6, 0xaf, 0xe9, + 0x06, 0x5a, 0xf6, 0x15, 0xdb, 0xc8, 0x93, 0x2e, 0x43, 0x66, 0x57, 0x37, 0x50, 0x59, 0x38, 0x93, + 0x9e, 0x2f, 0x9c, 0x7f, 0x78, 0x21, 0x02, 0x5a, 0x08, 0x23, 0x36, 0xb1, 0x58, 0x26, 0x88, 0xea, + 0xeb, 0x19, 0x98, 0x19, 0x31, 0x2a, 0x49, 0x90, 0x31, 0xd5, 0x1e, 0x66, 0x14, 0xe6, 0xf3, 0x32, + 0xf9, 0x5f, 0x2a, 0xc3, 0x84, 0xad, 0x6a, 0x37, 0xd5, 0x2e, 0x2a, 0xa7, 0x88, 0x98, 0x3f, 0x4a, + 0x15, 0x80, 0x0e, 0xb2, 0x91, 0xd9, 0x41, 0xa6, 0xb6, 0x5f, 0x4e, 0x9f, 0x49, 0xcf, 0xe7, 0xe5, + 0x80, 0x44, 0x7a, 0x1c, 0xa6, 0xed, 0xfe, 0x8e, 0xa1, 0x6b, 0x4a, 0x40, 0x0d, 0xce, 0xa4, 0xe7, + 0xb3, 0xb2, 0x48, 0x07, 0x96, 0x07, 0xca, 0xe7, 0x60, 0xea, 0x36, 0x52, 0x6f, 0x06, 0x55, 0x0b, + 0x44, 0xb5, 0x84, 0xc5, 0x01, 0xc5, 0x06, 0x14, 0x7b, 0xc8, 0x75, 0xd5, 0x2e, 0x52, 0xbc, 0x7d, + 0x1b, 0x95, 0x33, 0x64, 0xf6, 0x67, 0x86, 0x66, 0x1f, 0x9d, 0x79, 0x81, 0xa1, 0xb6, 0xf6, 0x6d, + 0x24, 0xd5, 0x21, 0x8f, 0xcc, 0x7e, 0x8f, 0x32, 0x64, 0x0f, 0xf1, 0x5f, 0xd3, 0xec, 0xf7, 0xa2, + 0x2c, 0x39, 0x0c, 0x63, 0x14, 0x13, 0x2e, 0x72, 0x6e, 0xe9, 0x1a, 0x2a, 0x8f, 0x13, 0x82, 0x73, + 0x43, 0x04, 0x6d, 0x3a, 0x1e, 0xe5, 0xe0, 0x38, 0xa9, 0x01, 0x79, 0xf4, 0xbc, 0x87, 0x4c, 0x57, + 0xb7, 0xcc, 0xf2, 0x04, 0x21, 0x79, 0x64, 0xc4, 0x2a, 0x22, 0xa3, 0x13, 0xa5, 0x18, 0xe0, 0xa4, + 0x4b, 0x30, 0x61, 0xd9, 0x9e, 0x6e, 0x99, 0x6e, 0x39, 0x77, 0x46, 0x98, 0x2f, 0x9c, 0x7f, 0xdf, + 0xc8, 0x40, 0xd8, 0xa0, 0x3a, 0x32, 0x57, 0x96, 0x5a, 0x20, 0xba, 0x56, 0xdf, 0xd1, 0x90, 0xa2, + 0x59, 0x1d, 0xa4, 0xe8, 0xe6, 0xae, 0x55, 0xce, 0x13, 0x82, 0xd3, 0xc3, 0x13, 0x21, 0x8a, 0x0d, + 0xab, 0x83, 0x5a, 0xe6, 0xae, 0x25, 0x97, 0xdc, 0xd0, 0xb3, 0x74, 0x02, 0xc6, 0xdd, 0x7d, 0xd3, + 0x53, 0x9f, 0x2f, 0x17, 0x49, 0x84, 0xb0, 0xa7, 0xea, 0xb7, 0xc7, 0x61, 0x2a, 0x49, 0x88, 0x5d, + 0x85, 0xec, 0x2e, 0x9e, 0x65, 0x39, 0x75, 0x1c, 0x1f, 0x50, 0x4c, 0xd8, 0x89, 0xe3, 0x3f, 0xa6, + 0x13, 0xeb, 0x50, 0x30, 0x91, 0xeb, 0xa1, 0x0e, 0x8d, 0x88, 0x74, 0xc2, 0x98, 0x02, 0x0a, 0x1a, + 0x0e, 0xa9, 0xcc, 0x8f, 0x15, 0x52, 0xcf, 0xc2, 0x94, 0x6f, 0x92, 0xe2, 0xa8, 0x66, 0x97, 0xc7, + 0xe6, 0x62, 0x9c, 0x25, 0x0b, 0x4d, 0x8e, 0x93, 0x31, 0x4c, 0x2e, 0xa1, 0xd0, 0xb3, 0xb4, 0x0c, + 0x60, 0x99, 0xc8, 0xda, 0x55, 0x3a, 0x48, 0x33, 0xca, 0xb9, 0x43, 0xbc, 0xb4, 0x81, 0x55, 0x86, + 0xbc, 0x64, 0x51, 0xa9, 0x66, 0x48, 0x57, 0x06, 0xa1, 0x36, 0x71, 0x48, 0xa4, 0xac, 0xd1, 0x4d, + 0x36, 0x14, 0x6d, 0xdb, 0x50, 0x72, 0x10, 0x8e, 0x7b, 0xd4, 0x61, 0x33, 0xcb, 0x13, 0x23, 0x16, + 0x62, 0x67, 0x26, 0x33, 0x18, 0x9d, 0xd8, 0xa4, 0x13, 0x7c, 0x94, 0x1e, 0x02, 0x5f, 0xa0, 0x90, + 0xb0, 0x02, 0x92, 0x85, 0x8a, 0x5c, 0xb8, 0xae, 0xf6, 0xd0, 0xdc, 0x1d, 0x28, 0x85, 0xdd, 0x23, + 0xcd, 0x42, 0xd6, 0xf5, 0x54, 0xc7, 0x23, 0x51, 0x98, 0x95, 0xe9, 0x83, 0x24, 0x42, 0x1a, 0x99, + 0x1d, 0x92, 0xe5, 0xb2, 0x32, 0xfe, 0x57, 0xfa, 0xe9, 0xc1, 0x84, 0xd3, 0x64, 0xc2, 0x1f, 0x18, + 0x5e, 0xd1, 0x10, 0x73, 0x74, 0xde, 0x73, 0x4f, 0xc2, 0x64, 0x68, 0x02, 0x49, 0x5f, 0x5d, 0xfd, + 0x39, 0x78, 0x60, 0x24, 0xb5, 0xf4, 0x2c, 0xcc, 0xf6, 0x4d, 0xdd, 0xf4, 0x90, 0x63, 0x3b, 0x08, + 0x47, 0x2c, 0x7d, 0x55, 0xf9, 0x5f, 0x27, 0x0e, 0x89, 0xb9, 0xed, 0xa0, 0x36, 0x65, 0x91, 0x67, + 0xfa, 0xc3, 0xc2, 0xc7, 0xf2, 0xb9, 0x37, 0x26, 0xc4, 0xbb, 0x77, 0xef, 0xde, 0x4d, 0x55, 0x3f, + 0x37, 0x0e, 0xb3, 0xa3, 0xf6, 0xcc, 0xc8, 0xed, 0x7b, 0x02, 0xc6, 0xcd, 0x7e, 0x6f, 0x07, 0x39, + 0xc4, 0x49, 0x59, 0x99, 0x3d, 0x49, 0x75, 0xc8, 0x1a, 0xea, 0x0e, 0x32, 0xca, 0x99, 0x33, 0xc2, + 0x7c, 0xe9, 0xfc, 0xe3, 0x89, 0x76, 0xe5, 0xc2, 0x2a, 0x86, 0xc8, 0x14, 0x29, 0x7d, 0x14, 0x32, + 0x2c, 0x45, 0x63, 0x86, 0xc7, 0x92, 0x31, 0xe0, 0xbd, 0x24, 0x13, 0x9c, 0xf4, 0x20, 0xe4, 0xf1, + 0x5f, 0x1a, 0x1b, 0xe3, 0xc4, 0xe6, 0x1c, 0x16, 0xe0, 0xb8, 0x90, 0xe6, 0x20, 0x47, 0xb6, 0x49, + 0x07, 0xf1, 0xd2, 0xe6, 0x3f, 0xe3, 0xc0, 0xea, 0xa0, 0x5d, 0xb5, 0x6f, 0x78, 0xca, 0x2d, 0xd5, + 0xe8, 0x23, 0x12, 0xf0, 0x79, 0xb9, 0xc8, 0x84, 0x9f, 0xc0, 0x32, 0xe9, 0x34, 0x14, 0xe8, 0xae, + 0xd2, 0xcd, 0x0e, 0x7a, 0x9e, 0x64, 0xcf, 0xac, 0x4c, 0x37, 0x5a, 0x0b, 0x4b, 0xf0, 0xeb, 0x6f, + 0xb8, 0x96, 0xc9, 0x43, 0x93, 0xbc, 0x02, 0x0b, 0xc8, 0xeb, 0x9f, 0x8c, 0x26, 0xee, 0xf7, 0x8f, + 0x9e, 0x5e, 0x34, 0xa6, 0xaa, 0xdf, 0x4c, 0x41, 0x86, 0xe4, 0x8b, 0x29, 0x28, 0x6c, 0x5d, 0xdf, + 0x6c, 0x2a, 0xcb, 0x1b, 0xdb, 0x4b, 0xab, 0x4d, 0x51, 0x90, 0x4a, 0x00, 0x44, 0x70, 0x6d, 0x75, + 0xa3, 0xbe, 0x25, 0xa6, 0xfc, 0xe7, 0xd6, 0xfa, 0xd6, 0xa5, 0x0b, 0x62, 0xda, 0x07, 0x6c, 0x53, + 0x41, 0x26, 0xa8, 0xf0, 0xc4, 0x79, 0x31, 0x2b, 0x89, 0x50, 0xa4, 0x04, 0xad, 0x67, 0x9b, 0xcb, + 0x97, 0x2e, 0x88, 0xe3, 0x61, 0xc9, 0x13, 0xe7, 0xc5, 0x09, 0x69, 0x12, 0xf2, 0x44, 0xb2, 0xb4, + 0xb1, 0xb1, 0x2a, 0xe6, 0x7c, 0xce, 0xf6, 0x96, 0xdc, 0x5a, 0x5f, 0x11, 0xf3, 0x3e, 0xe7, 0x8a, + 0xbc, 0xb1, 0xbd, 0x29, 0x82, 0xcf, 0xb0, 0xd6, 0x6c, 0xb7, 0xeb, 0x2b, 0x4d, 0xb1, 0xe0, 0x6b, + 0x2c, 0x5d, 0xdf, 0x6a, 0xb6, 0xc5, 0x62, 0xc8, 0xac, 0x27, 0xce, 0x8b, 0x93, 0xfe, 0x2b, 0x9a, + 0xeb, 0xdb, 0x6b, 0x62, 0x49, 0x9a, 0x86, 0x49, 0xfa, 0x0a, 0x6e, 0xc4, 0x54, 0x44, 0x74, 0xe9, + 0x82, 0x28, 0x0e, 0x0c, 0xa1, 0x2c, 0xd3, 0x21, 0xc1, 0xa5, 0x0b, 0xa2, 0x54, 0x6d, 0x40, 0x96, + 0x44, 0x97, 0x24, 0x41, 0x69, 0xb5, 0xbe, 0xd4, 0x5c, 0x55, 0x36, 0x36, 0xb7, 0x5a, 0x1b, 0xeb, + 0xf5, 0x55, 0x51, 0x18, 0xc8, 0xe4, 0xe6, 0xc7, 0xb7, 0x5b, 0x72, 0x73, 0x59, 0x4c, 0x05, 0x65, + 0x9b, 0xcd, 0xfa, 0x56, 0x73, 0x59, 0x4c, 0x57, 0x35, 0x98, 0x1d, 0x95, 0x27, 0x47, 0xee, 0x8c, + 0xc0, 0x12, 0xa7, 0x0e, 0x59, 0x62, 0xc2, 0x35, 0xb4, 0xc4, 0x3f, 0x4c, 0xc1, 0xcc, 0x88, 0x5a, + 0x31, 0xf2, 0x25, 0x4f, 0x41, 0x96, 0x86, 0x28, 0xad, 0x9e, 0x8f, 0x8e, 0x2c, 0x3a, 0x24, 0x60, + 0x87, 0x2a, 0x28, 0xc1, 0x05, 0x3b, 0x88, 0xf4, 0x21, 0x1d, 0x04, 0xa6, 0x18, 0xca, 0xe9, 0x3f, + 0x3b, 0x94, 0xd3, 0x69, 0xd9, 0xbb, 0x94, 0xa4, 0xec, 0x11, 0xd9, 0xf1, 0x72, 0x7b, 0x76, 0x44, + 0x6e, 0xbf, 0x0a, 0xd3, 0x43, 0x44, 0x89, 0x73, 0xec, 0x0b, 0x02, 0x94, 0x0f, 0x73, 0x4e, 0x4c, + 0xa6, 0x4b, 0x85, 0x32, 0xdd, 0xd5, 0xa8, 0x07, 0xcf, 0x1e, 0xbe, 0x08, 0x43, 0x6b, 0xfd, 0x8a, + 0x00, 0x27, 0x46, 0x77, 0x8a, 0x23, 0x6d, 0xf8, 0x28, 0x8c, 0xf7, 0x90, 0xb7, 0x67, 0xf1, 0x6e, + 0xe9, 0x03, 0x23, 0x6a, 0x30, 0x1e, 0x8e, 0x2e, 0x36, 0x43, 0x05, 0x8b, 0x78, 0xfa, 0xb0, 0x76, + 0x8f, 0x5a, 0x33, 0x64, 0xe9, 0x67, 0x52, 0xf0, 0xc0, 0x48, 0xf2, 0x91, 0x86, 0xbe, 0x1f, 0x40, + 0x37, 0xed, 0xbe, 0x47, 0x3b, 0x22, 0x9a, 0x60, 0xf3, 0x44, 0x42, 0x92, 0x17, 0x4e, 0x9e, 0x7d, + 0xcf, 0x1f, 0x4f, 0x93, 0x71, 0xa0, 0x22, 0xa2, 0x70, 0x79, 0x60, 0x68, 0x86, 0x18, 0x5a, 0x39, + 0x64, 0xa6, 0x43, 0x81, 0xf9, 0x61, 0x10, 0x35, 0x43, 0x47, 0xa6, 0xa7, 0xb8, 0x9e, 0x83, 0xd4, + 0x9e, 0x6e, 0x76, 0x49, 0x05, 0xc9, 0xd5, 0xb2, 0xbb, 0xaa, 0xe1, 0x22, 0x79, 0x8a, 0x0e, 0xb7, + 0xf9, 0x28, 0x46, 0x90, 0x00, 0x72, 0x02, 0x88, 0xf1, 0x10, 0x82, 0x0e, 0xfb, 0x88, 0xea, 0x37, + 0x72, 0x50, 0x08, 0xf4, 0xd5, 0xd2, 0x59, 0x28, 0xde, 0x50, 0x6f, 0xa9, 0x0a, 0x3f, 0x2b, 0x51, + 0x4f, 0x14, 0xb0, 0x6c, 0x93, 0x9d, 0x97, 0x3e, 0x0c, 0xb3, 0x44, 0xc5, 0xea, 0x7b, 0xc8, 0x51, + 0x34, 0x43, 0x75, 0x5d, 0xe2, 0xb4, 0x1c, 0x51, 0x95, 0xf0, 0xd8, 0x06, 0x1e, 0x6a, 0xf0, 0x11, + 0xe9, 0x22, 0xcc, 0x10, 0x44, 0xaf, 0x6f, 0x78, 0xba, 0x6d, 0x20, 0x05, 0x9f, 0xde, 0x5c, 0x52, + 0x49, 0x7c, 0xcb, 0xa6, 0xb1, 0xc6, 0x1a, 0x53, 0xc0, 0x16, 0xb9, 0xd2, 0x32, 0xbc, 0x9f, 0xc0, + 0xba, 0xc8, 0x44, 0x8e, 0xea, 0x21, 0x05, 0x7d, 0xaa, 0xaf, 0x1a, 0xae, 0xa2, 0x9a, 0x1d, 0x65, + 0x4f, 0x75, 0xf7, 0xca, 0xb3, 0x98, 0x60, 0x29, 0x55, 0x16, 0xe4, 0x53, 0x58, 0x71, 0x85, 0xe9, + 0x35, 0x89, 0x5a, 0xdd, 0xec, 0x7c, 0x4c, 0x75, 0xf7, 0xa4, 0x1a, 0x9c, 0x20, 0x2c, 0xae, 0xe7, + 0xe8, 0x66, 0x57, 0xd1, 0xf6, 0x90, 0x76, 0x53, 0xe9, 0x7b, 0xbb, 0x97, 0xcb, 0x0f, 0x06, 0xdf, + 0x4f, 0x2c, 0x6c, 0x13, 0x9d, 0x06, 0x56, 0xd9, 0xf6, 0x76, 0x2f, 0x4b, 0x6d, 0x28, 0xe2, 0xc5, + 0xe8, 0xe9, 0x77, 0x90, 0xb2, 0x6b, 0x39, 0xa4, 0x34, 0x96, 0x46, 0xa4, 0xa6, 0x80, 0x07, 0x17, + 0x36, 0x18, 0x60, 0xcd, 0xea, 0xa0, 0x5a, 0xb6, 0xbd, 0xd9, 0x6c, 0x2e, 0xcb, 0x05, 0xce, 0x72, + 0xcd, 0x72, 0x70, 0x40, 0x75, 0x2d, 0xdf, 0xc1, 0x05, 0x1a, 0x50, 0x5d, 0x8b, 0xbb, 0xf7, 0x22, + 0xcc, 0x68, 0x1a, 0x9d, 0xb3, 0xae, 0x29, 0xec, 0x8c, 0xe5, 0x96, 0xc5, 0x90, 0xb3, 0x34, 0x6d, + 0x85, 0x2a, 0xb0, 0x18, 0x77, 0xa5, 0x2b, 0xf0, 0xc0, 0xc0, 0x59, 0x41, 0xe0, 0xf4, 0xd0, 0x2c, + 0xa3, 0xd0, 0x8b, 0x30, 0x63, 0xef, 0x0f, 0x03, 0xa5, 0xd0, 0x1b, 0xed, 0xfd, 0x28, 0xec, 0x49, + 0x98, 0xb5, 0xf7, 0xec, 0x61, 0xdc, 0x63, 0x41, 0x9c, 0x64, 0xef, 0xd9, 0x51, 0xe0, 0x23, 0xe4, + 0xc0, 0xed, 0x20, 0x4d, 0xf5, 0x50, 0xa7, 0x7c, 0x32, 0xa8, 0x1e, 0x18, 0x90, 0x16, 0x41, 0xd4, + 0x34, 0x05, 0x99, 0xea, 0x8e, 0x81, 0x14, 0xd5, 0x41, 0xa6, 0xea, 0x96, 0x4f, 0x07, 0x95, 0x4b, + 0x9a, 0xd6, 0x24, 0xa3, 0x75, 0x32, 0x28, 0x3d, 0x06, 0xd3, 0xd6, 0xce, 0x0d, 0x8d, 0x86, 0xa4, + 0x62, 0x3b, 0x68, 0x57, 0x7f, 0xbe, 0xfc, 0x30, 0xf1, 0xef, 0x14, 0x1e, 0x20, 0x01, 0xb9, 0x49, + 0xc4, 0xd2, 0xa3, 0x20, 0x6a, 0xee, 0x9e, 0xea, 0xd8, 0x24, 0x27, 0xbb, 0xb6, 0xaa, 0xa1, 0xf2, + 0x23, 0x54, 0x95, 0xca, 0xd7, 0xb9, 0x18, 0x6f, 0x09, 0xf7, 0xb6, 0xbe, 0xeb, 0x71, 0xc6, 0x73, + 0x74, 0x4b, 0x10, 0x19, 0x63, 0x9b, 0x07, 0x11, 0xbb, 0x22, 0xf4, 0xe2, 0x79, 0xa2, 0x56, 0xb2, + 0xf7, 0xec, 0xe0, 0x7b, 0x1f, 0x82, 0x49, 0xac, 0x39, 0x78, 0xe9, 0xa3, 0xb4, 0x21, 0xb3, 0xf7, + 0x02, 0x6f, 0x7c, 0xd7, 0x7a, 0xe3, 0x6a, 0x0d, 0x8a, 0xc1, 0xf8, 0x94, 0xf2, 0x40, 0x23, 0x54, + 0x14, 0x70, 0xb3, 0xd2, 0xd8, 0x58, 0xc6, 0x6d, 0xc6, 0x73, 0x4d, 0x31, 0x85, 0xdb, 0x9d, 0xd5, + 0xd6, 0x56, 0x53, 0x91, 0xb7, 0xd7, 0xb7, 0x5a, 0x6b, 0x4d, 0x31, 0x1d, 0xec, 0xab, 0xbf, 0x97, + 0x82, 0x52, 0xf8, 0x88, 0x24, 0xfd, 0x14, 0x9c, 0xe4, 0xf7, 0x19, 0x2e, 0xf2, 0x94, 0xdb, 0xba, + 0x43, 0xb6, 0x4c, 0x4f, 0xa5, 0xe5, 0xcb, 0x5f, 0xb4, 0x59, 0xa6, 0xd5, 0x46, 0xde, 0x33, 0xba, + 0x83, 0x37, 0x44, 0x4f, 0xf5, 0xa4, 0x55, 0x38, 0x6d, 0x5a, 0x8a, 0xeb, 0xa9, 0x66, 0x47, 0x75, + 0x3a, 0xca, 0xe0, 0x26, 0x49, 0x51, 0x35, 0x0d, 0xb9, 0xae, 0x45, 0x4b, 0x95, 0xcf, 0xf2, 0x3e, + 0xd3, 0x6a, 0x33, 0xe5, 0x41, 0x0e, 0xaf, 0x33, 0xd5, 0x48, 0x80, 0xa5, 0x0f, 0x0b, 0xb0, 0x07, + 0x21, 0xdf, 0x53, 0x6d, 0x05, 0x99, 0x9e, 0xb3, 0x4f, 0x1a, 0xe3, 0x9c, 0x9c, 0xeb, 0xa9, 0x76, + 0x13, 0x3f, 0xbf, 0x37, 0xe7, 0x93, 0x7f, 0x4a, 0x43, 0x31, 0xd8, 0x1c, 0xe3, 0xb3, 0x86, 0x46, + 0xea, 0x88, 0x40, 0x32, 0xcd, 0x43, 0x47, 0xb6, 0xd2, 0x0b, 0x0d, 0x5c, 0x60, 0x6a, 0xe3, 0xb4, + 0x65, 0x95, 0x29, 0x12, 0x17, 0x77, 0x9c, 0x5b, 0x10, 0x6d, 0x11, 0x72, 0x32, 0x7b, 0x92, 0x56, + 0x60, 0xfc, 0x86, 0x4b, 0xb8, 0xc7, 0x09, 0xf7, 0xc3, 0x47, 0x73, 0x3f, 0xdd, 0x26, 0xe4, 0xf9, + 0xa7, 0xdb, 0xca, 0xfa, 0x86, 0xbc, 0x56, 0x5f, 0x95, 0x19, 0x5c, 0x3a, 0x05, 0x19, 0x43, 0xbd, + 0xb3, 0x1f, 0x2e, 0x45, 0x44, 0x94, 0xd4, 0xf1, 0xa7, 0x20, 0x73, 0x1b, 0xa9, 0x37, 0xc3, 0x05, + 0x80, 0x88, 0xde, 0xc5, 0xd0, 0x5f, 0x84, 0x2c, 0xf1, 0x97, 0x04, 0xc0, 0x3c, 0x26, 0x8e, 0x49, + 0x39, 0xc8, 0x34, 0x36, 0x64, 0x1c, 0xfe, 0x22, 0x14, 0xa9, 0x54, 0xd9, 0x6c, 0x35, 0x1b, 0x4d, + 0x31, 0x55, 0xbd, 0x08, 0xe3, 0xd4, 0x09, 0x78, 0x6b, 0xf8, 0x6e, 0x10, 0xc7, 0xd8, 0x23, 0xe3, + 0x10, 0xf8, 0xe8, 0xf6, 0xda, 0x52, 0x53, 0x16, 0x53, 0xc1, 0xe5, 0x75, 0xa1, 0x18, 0xec, 0x8b, + 0xdf, 0x9b, 0x98, 0xfa, 0x8e, 0x00, 0x85, 0x40, 0x9f, 0x8b, 0x1b, 0x14, 0xd5, 0x30, 0xac, 0xdb, + 0x8a, 0x6a, 0xe8, 0xaa, 0xcb, 0x82, 0x02, 0x88, 0xa8, 0x8e, 0x25, 0x49, 0x17, 0xed, 0x3d, 0x31, + 0xfe, 0x65, 0x01, 0xc4, 0x68, 0x8b, 0x19, 0x31, 0x50, 0xf8, 0x89, 0x1a, 0xf8, 0x92, 0x00, 0xa5, + 0x70, 0x5f, 0x19, 0x31, 0xef, 0xec, 0x4f, 0xd4, 0xbc, 0xd7, 0x52, 0x30, 0x19, 0xea, 0x26, 0x93, + 0x5a, 0xf7, 0x29, 0x98, 0xd6, 0x3b, 0xa8, 0x67, 0x5b, 0x1e, 0x32, 0xb5, 0x7d, 0xc5, 0x40, 0xb7, + 0x90, 0x51, 0xae, 0x92, 0x44, 0xb1, 0x78, 0x74, 0xbf, 0xba, 0xd0, 0x1a, 0xe0, 0x56, 0x31, 0xac, + 0x36, 0xd3, 0x5a, 0x6e, 0xae, 0x6d, 0x6e, 0x6c, 0x35, 0xd7, 0x1b, 0xd7, 0x95, 0xed, 0xf5, 0x9f, + 0x59, 0xdf, 0x78, 0x66, 0x5d, 0x16, 0xf5, 0x88, 0xda, 0xbb, 0xb8, 0xd5, 0x37, 0x41, 0x8c, 0x1a, + 0x25, 0x9d, 0x84, 0x51, 0x66, 0x89, 0x63, 0xd2, 0x0c, 0x4c, 0xad, 0x6f, 0x28, 0xed, 0xd6, 0x72, + 0x53, 0x69, 0x5e, 0xbb, 0xd6, 0x6c, 0x6c, 0xb5, 0xe9, 0x0d, 0x84, 0xaf, 0xbd, 0x15, 0xde, 0xd4, + 0x2f, 0xa6, 0x61, 0x66, 0x84, 0x25, 0x52, 0x9d, 0x9d, 0x1d, 0xe8, 0x71, 0xe6, 0x43, 0x49, 0xac, + 0x5f, 0xc0, 0x25, 0x7f, 0x53, 0x75, 0x3c, 0x76, 0xd4, 0x78, 0x14, 0xb0, 0x97, 0x4c, 0x4f, 0xdf, + 0xd5, 0x91, 0xc3, 0x2e, 0x6c, 0xe8, 0x81, 0x62, 0x6a, 0x20, 0xa7, 0x77, 0x36, 0x1f, 0x04, 0xc9, + 0xb6, 0x5c, 0xdd, 0xd3, 0x6f, 0x21, 0x45, 0x37, 0xf9, 0xed, 0x0e, 0x3e, 0x60, 0x64, 0x64, 0x91, + 0x8f, 0xb4, 0x4c, 0xcf, 0xd7, 0x36, 0x51, 0x57, 0x8d, 0x68, 0xe3, 0x04, 0x9e, 0x96, 0x45, 0x3e, + 0xe2, 0x6b, 0x9f, 0x85, 0x62, 0xc7, 0xea, 0xe3, 0xae, 0x8b, 0xea, 0xe1, 0x7a, 0x21, 0xc8, 0x05, + 0x2a, 0xf3, 0x55, 0x58, 0x3f, 0x3d, 0xb8, 0x56, 0x2a, 0xca, 0x05, 0x2a, 0xa3, 0x2a, 0xe7, 0x60, + 0x4a, 0xed, 0x76, 0x1d, 0x4c, 0xce, 0x89, 0xe8, 0x09, 0xa1, 0xe4, 0x8b, 0x89, 0xe2, 0xdc, 0xd3, + 0x90, 0xe3, 0x7e, 0xc0, 0x25, 0x19, 0x7b, 0x42, 0xb1, 0xe9, 0xb1, 0x37, 0x35, 0x9f, 0x97, 0x73, + 0x26, 0x1f, 0x3c, 0x0b, 0x45, 0xdd, 0x55, 0x06, 0xb7, 0xe4, 0xa9, 0x33, 0xa9, 0xf9, 0x9c, 0x5c, + 0xd0, 0x5d, 0xff, 0x86, 0xb1, 0xfa, 0x4a, 0x0a, 0x4a, 0xe1, 0x5b, 0x7e, 0x69, 0x19, 0x72, 0x86, + 0xa5, 0xa9, 0x24, 0xb4, 0xe8, 0x27, 0xa6, 0xf9, 0x98, 0x0f, 0x03, 0x0b, 0xab, 0x4c, 0x5f, 0xf6, + 0x91, 0x73, 0xff, 0x20, 0x40, 0x8e, 0x8b, 0xa5, 0x13, 0x90, 0xb1, 0x55, 0x6f, 0x8f, 0xd0, 0x65, + 0x97, 0x52, 0xa2, 0x20, 0x93, 0x67, 0x2c, 0x77, 0x6d, 0xd5, 0x24, 0x21, 0xc0, 0xe4, 0xf8, 0x19, + 0xaf, 0xab, 0x81, 0xd4, 0x0e, 0x39, 0x7e, 0x58, 0xbd, 0x1e, 0x32, 0x3d, 0x97, 0xaf, 0x2b, 0x93, + 0x37, 0x98, 0x58, 0x7a, 0x1c, 0xa6, 0x3d, 0x47, 0xd5, 0x8d, 0x90, 0x6e, 0x86, 0xe8, 0x8a, 0x7c, + 0xc0, 0x57, 0xae, 0xc1, 0x29, 0xce, 0xdb, 0x41, 0x9e, 0xaa, 0xed, 0xa1, 0xce, 0x00, 0x34, 0x4e, + 0xae, 0x19, 0x4e, 0x32, 0x85, 0x65, 0x36, 0xce, 0xb1, 0xd5, 0x1f, 0x08, 0x30, 0xcd, 0x0f, 0x4c, + 0x1d, 0xdf, 0x59, 0x6b, 0x00, 0xaa, 0x69, 0x5a, 0x5e, 0xd0, 0x5d, 0xc3, 0xa1, 0x3c, 0x84, 0x5b, + 0xa8, 0xfb, 0x20, 0x39, 0x40, 0x30, 0xd7, 0x03, 0x18, 0x8c, 0x1c, 0xea, 0xb6, 0xd3, 0x50, 0x60, + 0x9f, 0x70, 0xc8, 0x77, 0x40, 0x7a, 0xc4, 0x06, 0x2a, 0xc2, 0x27, 0x2b, 0x69, 0x16, 0xb2, 0x3b, + 0xa8, 0xab, 0x9b, 0xec, 0x62, 0x96, 0x3e, 0xf0, 0x8b, 0x90, 0x8c, 0x7f, 0x11, 0xb2, 0xf4, 0x49, + 0x98, 0xd1, 0xac, 0x5e, 0xd4, 0xdc, 0x25, 0x31, 0x72, 0xcc, 0x77, 0x3f, 0x26, 0x3c, 0x07, 0x83, + 0x16, 0xf3, 0x6d, 0x41, 0xf8, 0x52, 0x2a, 0xbd, 0xb2, 0xb9, 0xf4, 0xd5, 0xd4, 0xdc, 0x0a, 0x85, + 0x6e, 0xf2, 0x99, 0xca, 0x68, 0xd7, 0x40, 0x1a, 0xb6, 0x1e, 0xbe, 0xfc, 0x38, 0x7c, 0xa8, 0xab, + 0x7b, 0x7b, 0xfd, 0x9d, 0x05, 0xcd, 0xea, 0x2d, 0x76, 0xad, 0xae, 0x35, 0xf8, 0xf4, 0x89, 0x9f, + 0xc8, 0x03, 0xf9, 0x8f, 0x7d, 0xfe, 0xcc, 0xfb, 0xd2, 0xb9, 0xd8, 0x6f, 0xa5, 0xb5, 0x75, 0x98, + 0x61, 0xca, 0x0a, 0xf9, 0xfe, 0x42, 0x4f, 0x11, 0xd2, 0x91, 0x77, 0x58, 0xe5, 0xaf, 0xbf, 0x4e, + 0xca, 0xb5, 0x3c, 0xcd, 0xa0, 0x78, 0x8c, 0x1e, 0x34, 0x6a, 0x32, 0x3c, 0x10, 0xe2, 0xa3, 0x5b, + 0x13, 0x39, 0x31, 0x8c, 0xdf, 0x63, 0x8c, 0x33, 0x01, 0xc6, 0x36, 0x83, 0xd6, 0x1a, 0x30, 0x79, + 0x1c, 0xae, 0xbf, 0x63, 0x5c, 0x45, 0x14, 0x24, 0x59, 0x81, 0x29, 0x42, 0xa2, 0xf5, 0x5d, 0xcf, + 0xea, 0x91, 0xbc, 0x77, 0x34, 0xcd, 0xdf, 0xbf, 0x4e, 0xf7, 0x4a, 0x09, 0xc3, 0x1a, 0x3e, 0xaa, + 0x56, 0x03, 0xf2, 0xc9, 0xa9, 0x83, 0x34, 0x23, 0x86, 0xe1, 0x55, 0x66, 0x88, 0xaf, 0x5f, 0xfb, + 0x04, 0xcc, 0xe2, 0xff, 0x49, 0x5a, 0x0a, 0x5a, 0x12, 0x7f, 0xe1, 0x55, 0xfe, 0xc1, 0x0b, 0x74, + 0x3b, 0xce, 0xf8, 0x04, 0x01, 0x9b, 0x02, 0xab, 0xd8, 0x45, 0x9e, 0x87, 0x1c, 0x57, 0x51, 0x8d, + 0x51, 0xe6, 0x05, 0x6e, 0x0c, 0xca, 0x9f, 0x7f, 0x33, 0xbc, 0x8a, 0x2b, 0x14, 0x59, 0x37, 0x8c, + 0xda, 0x36, 0x9c, 0x1c, 0x11, 0x15, 0x09, 0x38, 0x5f, 0x64, 0x9c, 0xb3, 0x43, 0x91, 0x81, 0x69, + 0x37, 0x81, 0xcb, 0xfd, 0xb5, 0x4c, 0xc0, 0xf9, 0xbb, 0x8c, 0x53, 0x62, 0x58, 0xbe, 0xa4, 0x98, + 0xf1, 0x69, 0x98, 0xbe, 0x85, 0x9c, 0x1d, 0xcb, 0x65, 0xb7, 0x34, 0x09, 0xe8, 0x5e, 0x62, 0x74, + 0x53, 0x0c, 0x48, 0xae, 0x6d, 0x30, 0xd7, 0x15, 0xc8, 0xed, 0xaa, 0x1a, 0x4a, 0x40, 0xf1, 0x05, + 0x46, 0x31, 0x81, 0xf5, 0x31, 0xb4, 0x0e, 0xc5, 0xae, 0xc5, 0x2a, 0x53, 0x3c, 0xfc, 0x65, 0x06, + 0x2f, 0x70, 0x0c, 0xa3, 0xb0, 0x2d, 0xbb, 0x6f, 0xe0, 0xb2, 0x15, 0x4f, 0xf1, 0x7b, 0x9c, 0x82, + 0x63, 0x18, 0xc5, 0x31, 0xdc, 0xfa, 0xfb, 0x9c, 0xc2, 0x0d, 0xf8, 0xf3, 0x29, 0x28, 0x58, 0xa6, + 0xb1, 0x6f, 0x99, 0x49, 0x8c, 0xf8, 0x22, 0x63, 0x00, 0x06, 0xc1, 0x04, 0x57, 0x21, 0x9f, 0x74, + 0x21, 0xfe, 0xf0, 0x4d, 0xbe, 0x3d, 0xf8, 0x0a, 0xac, 0xc0, 0x14, 0x4f, 0x50, 0xba, 0x65, 0x26, + 0xa0, 0xf8, 0x32, 0xa3, 0x28, 0x05, 0x60, 0x6c, 0x1a, 0x1e, 0x72, 0xbd, 0x2e, 0x4a, 0x42, 0xf2, + 0x0a, 0x9f, 0x06, 0x83, 0x30, 0x57, 0xee, 0x20, 0x53, 0xdb, 0x4b, 0xc6, 0xf0, 0x15, 0xee, 0x4a, + 0x8e, 0xc1, 0x14, 0x0d, 0x98, 0xec, 0xa9, 0x8e, 0xbb, 0xa7, 0x1a, 0x89, 0x96, 0xe3, 0x8f, 0x18, + 0x47, 0xd1, 0x07, 0x31, 0x8f, 0xf4, 0xcd, 0xe3, 0xd0, 0x7c, 0x95, 0x7b, 0x24, 0x00, 0x63, 0x5b, + 0xcf, 0xf5, 0xc8, 0x95, 0xd6, 0x71, 0xd8, 0xfe, 0x98, 0x6f, 0x3d, 0x8a, 0x5d, 0x0b, 0x32, 0x5e, + 0x85, 0xbc, 0xab, 0xdf, 0x49, 0x44, 0xf3, 0x27, 0x7c, 0xa5, 0x09, 0x00, 0x83, 0xaf, 0xc3, 0xa9, + 0x91, 0x65, 0x22, 0x01, 0xd9, 0x9f, 0x32, 0xb2, 0x13, 0x23, 0x4a, 0x05, 0x4b, 0x09, 0xc7, 0xa5, + 0xfc, 0x33, 0x9e, 0x12, 0x50, 0x84, 0x6b, 0x13, 0x9f, 0x15, 0x5c, 0x75, 0xf7, 0x78, 0x5e, 0xfb, + 0x73, 0xee, 0x35, 0x8a, 0x0d, 0x79, 0x6d, 0x0b, 0x4e, 0x30, 0xc6, 0xe3, 0xad, 0xeb, 0xd7, 0x78, + 0x62, 0xa5, 0xe8, 0xed, 0xf0, 0xea, 0x7e, 0x12, 0xe6, 0x7c, 0x77, 0xf2, 0xa6, 0xd4, 0x55, 0x7a, + 0xaa, 0x9d, 0x80, 0xf9, 0xeb, 0x8c, 0x99, 0x67, 0x7c, 0xbf, 0xab, 0x75, 0xd7, 0x54, 0x1b, 0x93, + 0x3f, 0x0b, 0x65, 0x4e, 0xde, 0x37, 0x1d, 0xa4, 0x59, 0x5d, 0x53, 0xbf, 0x83, 0x3a, 0x09, 0xa8, + 0xff, 0x22, 0xb2, 0x54, 0xdb, 0x01, 0x38, 0x66, 0x6e, 0x81, 0xe8, 0xf7, 0x2a, 0x8a, 0xde, 0xb3, + 0x2d, 0xc7, 0x8b, 0x61, 0xfc, 0x06, 0x5f, 0x29, 0x1f, 0xd7, 0x22, 0xb0, 0x5a, 0x13, 0x4a, 0xe4, + 0x31, 0x69, 0x48, 0xfe, 0x25, 0x23, 0x9a, 0x1c, 0xa0, 0x58, 0xe2, 0xd0, 0xac, 0x9e, 0xad, 0x3a, + 0x49, 0xf2, 0xdf, 0x5f, 0xf1, 0xc4, 0xc1, 0x20, 0x2c, 0x71, 0x78, 0xfb, 0x36, 0xc2, 0xd5, 0x3e, + 0x01, 0xc3, 0x37, 0x79, 0xe2, 0xe0, 0x18, 0x46, 0xc1, 0x1b, 0x86, 0x04, 0x14, 0x7f, 0xcd, 0x29, + 0x38, 0x06, 0x53, 0x7c, 0x7c, 0x50, 0x68, 0x1d, 0xd4, 0xd5, 0x5d, 0xcf, 0xa1, 0xad, 0xf0, 0xd1, + 0x54, 0xdf, 0x7a, 0x33, 0xdc, 0x84, 0xc9, 0x01, 0x28, 0xce, 0x44, 0xec, 0x0a, 0x95, 0x9c, 0x94, + 0xe2, 0x0d, 0xfb, 0x36, 0xcf, 0x44, 0x01, 0x18, 0xb6, 0x2d, 0xd0, 0x21, 0x62, 0xb7, 0x6b, 0xf8, + 0x7c, 0x90, 0x80, 0xee, 0x3b, 0x11, 0xe3, 0xda, 0x1c, 0x8b, 0x39, 0x03, 0xfd, 0x4f, 0xdf, 0xbc, + 0x89, 0xf6, 0x13, 0x45, 0xe7, 0xdf, 0x44, 0xfa, 0x9f, 0x6d, 0x8a, 0xa4, 0x39, 0x64, 0x2a, 0xd2, + 0x4f, 0x49, 0x71, 0x3f, 0xd6, 0x29, 0xff, 0xfc, 0x7d, 0x36, 0xdf, 0x70, 0x3b, 0x55, 0x5b, 0xc5, + 0x41, 0x1e, 0x6e, 0x7a, 0xe2, 0xc9, 0x5e, 0xb8, 0xef, 0xc7, 0x79, 0xa8, 0xe7, 0xa9, 0x5d, 0x83, + 0xc9, 0x50, 0xc3, 0x13, 0x4f, 0xf5, 0x69, 0x46, 0x55, 0x0c, 0xf6, 0x3b, 0xb5, 0x8b, 0x90, 0xc1, + 0xcd, 0x4b, 0x3c, 0xfc, 0x17, 0x18, 0x9c, 0xa8, 0xd7, 0x3e, 0x02, 0x39, 0xde, 0xb4, 0xc4, 0x43, + 0x7f, 0x91, 0x41, 0x7d, 0x08, 0x86, 0xf3, 0x86, 0x25, 0x1e, 0xfe, 0x4b, 0x1c, 0xce, 0x21, 0x18, + 0x9e, 0xdc, 0x85, 0xdf, 0xfd, 0x95, 0x0c, 0x2b, 0x3a, 0xdc, 0x77, 0x57, 0x61, 0x82, 0x75, 0x2a, + 0xf1, 0xe8, 0xcf, 0xb0, 0x97, 0x73, 0x44, 0xed, 0x49, 0xc8, 0x26, 0x74, 0xf8, 0xaf, 0x32, 0x28, + 0xd5, 0xaf, 0x35, 0xa0, 0x10, 0xe8, 0x4e, 0xe2, 0xe1, 0xbf, 0xc6, 0xe0, 0x41, 0x14, 0x36, 0x9d, + 0x75, 0x27, 0xf1, 0x04, 0xbf, 0xce, 0x4d, 0x67, 0x08, 0xec, 0x36, 0xde, 0x98, 0xc4, 0xa3, 0x3f, + 0xcb, 0xbd, 0xce, 0x21, 0xb5, 0xa7, 0x20, 0xef, 0x17, 0x9b, 0x78, 0xfc, 0x6f, 0x30, 0xfc, 0x00, + 0x83, 0x3d, 0x10, 0x28, 0x76, 0xf1, 0x14, 0xbf, 0xc9, 0x3d, 0x10, 0x40, 0xe1, 0x6d, 0x14, 0x6d, + 0x60, 0xe2, 0x99, 0x7e, 0x8b, 0x6f, 0xa3, 0x48, 0xff, 0x82, 0x57, 0x93, 0xe4, 0xfc, 0x78, 0x8a, + 0xdf, 0xe6, 0xab, 0x49, 0xf4, 0xb1, 0x19, 0xd1, 0x8e, 0x20, 0x9e, 0xe3, 0x77, 0xb8, 0x19, 0x91, + 0x86, 0xa0, 0xb6, 0x09, 0xd2, 0x70, 0x37, 0x10, 0xcf, 0xf7, 0x39, 0xc6, 0x37, 0x3d, 0xd4, 0x0c, + 0xd4, 0x9e, 0x81, 0x13, 0xa3, 0x3b, 0x81, 0x78, 0xd6, 0xcf, 0xdf, 0x8f, 0x9c, 0xdd, 0x82, 0x8d, + 0x40, 0x6d, 0x6b, 0x50, 0x52, 0x82, 0x5d, 0x40, 0x3c, 0xed, 0x8b, 0xf7, 0xc3, 0x89, 0x3b, 0xd8, + 0x04, 0xd4, 0xea, 0x00, 0x83, 0x02, 0x1c, 0xcf, 0xf5, 0x12, 0xe3, 0x0a, 0x80, 0xf0, 0xd6, 0x60, + 0xf5, 0x37, 0x1e, 0xff, 0x05, 0xbe, 0x35, 0x18, 0x02, 0x6f, 0x0d, 0x5e, 0x7a, 0xe3, 0xd1, 0x2f, + 0xf3, 0xad, 0xc1, 0x21, 0x38, 0xb2, 0x03, 0xd5, 0x2d, 0x9e, 0xe1, 0x8b, 0x3c, 0xb2, 0x03, 0xa8, + 0xda, 0x3a, 0x4c, 0x0f, 0x15, 0xc4, 0x78, 0xaa, 0x2f, 0x31, 0x2a, 0x31, 0x5a, 0x0f, 0x83, 0xc5, + 0x8b, 0x15, 0xc3, 0x78, 0xb6, 0x3f, 0x88, 0x14, 0x2f, 0x56, 0x0b, 0x6b, 0x57, 0x21, 0x67, 0xf6, + 0x0d, 0x03, 0x6f, 0x1e, 0xe9, 0xe8, 0x1f, 0xd8, 0x95, 0xff, 0xed, 0x1d, 0xe6, 0x1d, 0x0e, 0xa8, + 0x5d, 0x84, 0x2c, 0xea, 0xed, 0xa0, 0x4e, 0x1c, 0xf2, 0xdf, 0xdf, 0xe1, 0x09, 0x13, 0x6b, 0xd7, + 0x9e, 0x02, 0xa0, 0x57, 0x23, 0xe4, 0xb3, 0x5f, 0x0c, 0xf6, 0x3f, 0xde, 0x61, 0x3f, 0x7d, 0x19, + 0x40, 0x06, 0x04, 0xf4, 0x87, 0x34, 0x47, 0x13, 0xbc, 0x19, 0x26, 0x20, 0x2b, 0x72, 0x05, 0x26, + 0x6e, 0xb8, 0x96, 0xe9, 0xa9, 0xdd, 0x38, 0xf4, 0x7f, 0x32, 0x34, 0xd7, 0xc7, 0x0e, 0xeb, 0x59, + 0x0e, 0xf2, 0xd4, 0xae, 0x1b, 0x87, 0xfd, 0x2f, 0x86, 0xf5, 0x01, 0x18, 0xac, 0xa9, 0xae, 0x97, + 0x64, 0xde, 0x3f, 0xe2, 0x60, 0x0e, 0xc0, 0x46, 0xe3, 0xff, 0x6f, 0xa2, 0xfd, 0x38, 0xec, 0x5b, + 0xdc, 0x68, 0xa6, 0x5f, 0xfb, 0x08, 0xe4, 0xf1, 0xbf, 0xf4, 0xf7, 0x6c, 0x31, 0xe0, 0xff, 0x66, + 0xe0, 0x01, 0x02, 0xbf, 0xd9, 0xf5, 0x3a, 0x9e, 0x1e, 0xef, 0xec, 0xff, 0x61, 0x2b, 0xcd, 0xf5, + 0x6b, 0x75, 0x28, 0xb8, 0x5e, 0xa7, 0xd3, 0x67, 0xfd, 0x69, 0x0c, 0xfc, 0x7f, 0xdf, 0xf1, 0xaf, + 0x2c, 0x7c, 0x0c, 0x5e, 0xed, 0xdb, 0x37, 0x3d, 0xdb, 0x22, 0x9f, 0x39, 0xe2, 0x18, 0xee, 0x33, + 0x86, 0x00, 0x64, 0xa9, 0x39, 0xfa, 0xfa, 0x16, 0x56, 0xac, 0x15, 0x8b, 0x5e, 0xdc, 0x3e, 0x57, + 0x8d, 0xbf, 0x81, 0x85, 0xcf, 0x66, 0xa1, 0xaa, 0x59, 0xbd, 0x1d, 0xcb, 0x5d, 0x0c, 0x24, 0xf3, + 0x45, 0xdf, 0x4d, 0xfc, 0x76, 0xd6, 0x17, 0xcc, 0x1d, 0xef, 0x5e, 0xb7, 0xfa, 0xb7, 0x69, 0xc8, + 0x35, 0x54, 0xd7, 0x53, 0x6f, 0xab, 0xfb, 0x92, 0x0d, 0x33, 0xf8, 0xff, 0x35, 0xd5, 0x26, 0xb7, + 0x84, 0x6c, 0x3b, 0xb3, 0xab, 0xf3, 0x0f, 0x2e, 0x0c, 0xde, 0xca, 0x11, 0x0b, 0x23, 0xd4, 0xc9, + 0x4f, 0x0e, 0x96, 0xc4, 0x57, 0xff, 0xf9, 0xf4, 0xd8, 0x2f, 0xff, 0xcb, 0xe9, 0xdc, 0xda, 0xfe, + 0x33, 0xba, 0xe1, 0x5a, 0xa6, 0x3c, 0x8a, 0x5a, 0xfa, 0xb4, 0x00, 0x0f, 0x8e, 0x90, 0xaf, 0xb3, + 0xdd, 0xce, 0x3e, 0x40, 0x5d, 0x48, 0xf8, 0x6a, 0x0e, 0xa3, 0x26, 0x14, 0x43, 0xaf, 0x3f, 0xea, + 0x35, 0x73, 0xd7, 0xa1, 0x7c, 0xd8, 0x4c, 0x24, 0x11, 0xd2, 0x37, 0xd1, 0x3e, 0xfb, 0xdd, 0x22, + 0xfe, 0x57, 0x3a, 0x37, 0xf8, 0x75, 0xa7, 0x30, 0x5f, 0x38, 0x3f, 0x1d, 0xb0, 0x8e, 0xbd, 0x8c, + 0x8e, 0xd7, 0x52, 0x97, 0x85, 0x39, 0x15, 0xce, 0xc4, 0x59, 0xfa, 0xff, 0x7c, 0x45, 0xb5, 0x02, + 0xe3, 0x54, 0x28, 0xcd, 0x42, 0xb6, 0x65, 0x7a, 0x97, 0x2e, 0x10, 0xaa, 0xb4, 0x4c, 0x1f, 0x96, + 0x56, 0x5f, 0xbd, 0x57, 0x19, 0xfb, 0xfe, 0xbd, 0xca, 0xd8, 0x3f, 0xde, 0xab, 0x8c, 0xbd, 0x76, + 0xaf, 0x22, 0xbc, 0x71, 0xaf, 0x22, 0xbc, 0x75, 0xaf, 0x22, 0xbc, 0x7d, 0xaf, 0x22, 0xdc, 0x3d, + 0xa8, 0x08, 0x5f, 0x39, 0xa8, 0x08, 0x5f, 0x3b, 0xa8, 0x08, 0xdf, 0x3a, 0xa8, 0x08, 0xdf, 0x3d, + 0xa8, 0x08, 0xaf, 0x1e, 0x54, 0xc6, 0xbe, 0x7f, 0x50, 0x11, 0x5e, 0x3b, 0xa8, 0x08, 0x6f, 0x1c, + 0x54, 0xc6, 0xde, 0x3a, 0xa8, 0x08, 0x6f, 0x1f, 0x54, 0xc6, 0xee, 0xfe, 0xb0, 0x32, 0xf6, 0x7f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x54, 0x4b, 0xb1, 0x7c, 0x2e, 0x35, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -759,6 +764,9 @@ return dAtA } func (m *Castaway) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.CastMapValueMessage) > 0 { @@ -790,6 +798,9 @@ } func (m *Wilson) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/castvalue/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/castvalue/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -30,8 +30,8 @@ rm -rf combos go install github.com/gogo/protobuf/protoc-gen-combo go install github.com/gogo/protobuf/protoc-gen-gogo - protoc-min-version --version="3.0.0" --gogo_out=. --proto_path=../../../../../:../../protobuf/:. castvalue.proto - protoc-gen-combo --default=false --version="3.0.0" --gogo_out=. --proto_path=../../../../../:../../protobuf/:. castvalue.proto + protoc-min-version --version="3.0.0" --gogo_out=. --proto_path=../../protobuf/:../../../../../:. castvalue.proto + protoc-gen-combo --default=false --version="3.0.0" --gogo_out=. --proto_path=../../protobuf/:../../../../../:. castvalue.proto cp mytypes.go ./combos/both/ || true cp mytypes.go ./combos/marshaler/ || true cp mytypes.go ./combos/unmarshaler/ || true diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/combos/both/thetest.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/combos/both/thetest.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/combos/both/thetest.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/combos/both/thetest.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -8936,423 +8936,428 @@ func ThetestDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 6647 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x6b, 0x70, 0x24, 0x57, - 0x75, 0xbf, 0x7a, 0x7a, 0xa4, 0x1d, 0x1d, 0xbd, 0x5a, 0xad, 0x5d, 0xed, 0x58, 0x5e, 0x4b, 0xda, - 0xf1, 0x7a, 0x2d, 0x0b, 0x5b, 0xab, 0xd5, 0x6a, 0x5f, 0xb3, 0xd8, 0xfe, 0xcf, 0x6b, 0xd7, 0x5a, - 0xa4, 0x91, 0x68, 0x49, 0xd8, 0x0b, 0xff, 0x7f, 0x4d, 0xf5, 0xce, 0x5c, 0x49, 0x63, 0xcf, 0x74, - 0x0f, 0xd3, 0x2d, 0xdb, 0x72, 0xfd, 0x2b, 0xe5, 0x40, 0x42, 0x20, 0xa9, 0x3c, 0x49, 0x2a, 0x40, - 0xc0, 0x98, 0xa4, 0x08, 0x86, 0xbc, 0x20, 0x10, 0x02, 0x54, 0x2a, 0xf8, 0x0b, 0x61, 0xf3, 0x25, - 0x65, 0xf2, 0x29, 0x45, 0xa5, 0x5c, 0xec, 0x9a, 0xaa, 0x90, 0xc4, 0x09, 0x84, 0xb8, 0x2a, 0x54, - 0x99, 0x0f, 0xa9, 0xfb, 0xea, 0xee, 0x7b, 0xa7, 0x47, 0xdd, 0xf2, 0xda, 0x86, 0x2f, 0xbb, 0x33, - 0xf7, 0x9c, 0xdf, 0xe9, 0x73, 0xcf, 0xeb, 0x9e, 0xbe, 0xf7, 0x6a, 0xe0, 0x87, 0x17, 0x61, 0x7a, - 0xdb, 0xb6, 0xb7, 0x1b, 0xe8, 0x54, 0xab, 0x6d, 0xbb, 0xf6, 0xf5, 0xdd, 0xad, 0x53, 0x35, 0xe4, - 0x54, 0xdb, 0xf5, 0x96, 0x6b, 0xb7, 0xe7, 0xc8, 0x98, 0x3e, 0x42, 0x39, 0xe6, 0x38, 0x47, 0x66, - 0x05, 0x46, 0x2f, 0xd7, 0x1b, 0xa8, 0xe8, 0x31, 0xae, 0x23, 0x57, 0xbf, 0x00, 0xc9, 0xad, 0x7a, - 0x03, 0xa5, 0x95, 0x69, 0x75, 0x66, 0x60, 0xe1, 0xc4, 0x9c, 0x04, 0x9a, 0x13, 0x11, 0x6b, 0x78, - 0xd8, 0x20, 0x88, 0xcc, 0xf7, 0x93, 0x30, 0x16, 0x42, 0xd5, 0x75, 0x48, 0x5a, 0x66, 0x13, 0x4b, - 0x54, 0x66, 0xfa, 0x0d, 0xf2, 0x59, 0x4f, 0xc3, 0xa1, 0x96, 0x59, 0x7d, 0xc2, 0xdc, 0x46, 0xe9, - 0x04, 0x19, 0xe6, 0x5f, 0xf5, 0x49, 0x80, 0x1a, 0x6a, 0x21, 0xab, 0x86, 0xac, 0xea, 0x5e, 0x5a, - 0x9d, 0x56, 0x67, 0xfa, 0x8d, 0xc0, 0x88, 0xfe, 0x0e, 0x18, 0x6d, 0xed, 0x5e, 0x6f, 0xd4, 0xab, - 0x95, 0x00, 0x1b, 0x4c, 0xab, 0x33, 0xbd, 0x86, 0x46, 0x09, 0x45, 0x9f, 0xf9, 0x5e, 0x18, 0x79, - 0x0a, 0x99, 0x4f, 0x04, 0x59, 0x07, 0x08, 0xeb, 0x30, 0x1e, 0x0e, 0x30, 0x16, 0x60, 0xb0, 0x89, - 0x1c, 0xc7, 0xdc, 0x46, 0x15, 0x77, 0xaf, 0x85, 0xd2, 0x49, 0x32, 0xfb, 0xe9, 0x8e, 0xd9, 0xcb, - 0x33, 0x1f, 0x60, 0xa8, 0x8d, 0xbd, 0x16, 0xd2, 0x73, 0xd0, 0x8f, 0xac, 0xdd, 0x26, 0x95, 0xd0, - 0xdb, 0xc5, 0x7e, 0x25, 0x6b, 0xb7, 0x29, 0x4b, 0x49, 0x61, 0x18, 0x13, 0x71, 0xc8, 0x41, 0xed, - 0x27, 0xeb, 0x55, 0x94, 0xee, 0x23, 0x02, 0xee, 0xed, 0x10, 0xb0, 0x4e, 0xe9, 0xb2, 0x0c, 0x8e, - 0xd3, 0x0b, 0xd0, 0x8f, 0x9e, 0x76, 0x91, 0xe5, 0xd4, 0x6d, 0x2b, 0x7d, 0x88, 0x08, 0xb9, 0x27, - 0xc4, 0x8b, 0xa8, 0x51, 0x93, 0x45, 0xf8, 0x38, 0xfd, 0x1c, 0x1c, 0xb2, 0x5b, 0x6e, 0xdd, 0xb6, - 0x9c, 0x74, 0x6a, 0x5a, 0x99, 0x19, 0x58, 0x38, 0x16, 0x1a, 0x08, 0xab, 0x94, 0xc7, 0xe0, 0xcc, - 0xfa, 0x12, 0x68, 0x8e, 0xbd, 0xdb, 0xae, 0xa2, 0x4a, 0xd5, 0xae, 0xa1, 0x4a, 0xdd, 0xda, 0xb2, - 0xd3, 0xfd, 0x44, 0xc0, 0x54, 0xe7, 0x44, 0x08, 0x63, 0xc1, 0xae, 0xa1, 0x25, 0x6b, 0xcb, 0x36, - 0x86, 0x1d, 0xe1, 0xbb, 0x3e, 0x0e, 0x7d, 0xce, 0x9e, 0xe5, 0x9a, 0x4f, 0xa7, 0x07, 0x49, 0x84, - 0xb0, 0x6f, 0x99, 0xaf, 0xf7, 0xc1, 0x48, 0x9c, 0x10, 0xbb, 0x04, 0xbd, 0x5b, 0x78, 0x96, 0xe9, - 0xc4, 0x41, 0x6c, 0x40, 0x31, 0xa2, 0x11, 0xfb, 0xde, 0xa0, 0x11, 0x73, 0x30, 0x60, 0x21, 0xc7, - 0x45, 0x35, 0x1a, 0x11, 0x6a, 0xcc, 0x98, 0x02, 0x0a, 0xea, 0x0c, 0xa9, 0xe4, 0x1b, 0x0a, 0xa9, - 0xc7, 0x60, 0xc4, 0x53, 0xa9, 0xd2, 0x36, 0xad, 0x6d, 0x1e, 0x9b, 0xa7, 0xa2, 0x34, 0x99, 0x2b, - 0x71, 0x9c, 0x81, 0x61, 0xc6, 0x30, 0x12, 0xbe, 0xeb, 0x45, 0x00, 0xdb, 0x42, 0xf6, 0x56, 0xa5, - 0x86, 0xaa, 0x8d, 0x74, 0xaa, 0x8b, 0x95, 0x56, 0x31, 0x4b, 0x87, 0x95, 0x6c, 0x3a, 0x5a, 0x6d, - 0xe8, 0x17, 0xfd, 0x50, 0x3b, 0xd4, 0x25, 0x52, 0x56, 0x68, 0x92, 0x75, 0x44, 0xdb, 0x26, 0x0c, - 0xb7, 0x11, 0x8e, 0x7b, 0x54, 0x63, 0x33, 0xeb, 0x27, 0x4a, 0xcc, 0x45, 0xce, 0xcc, 0x60, 0x30, - 0x3a, 0xb1, 0xa1, 0x76, 0xf0, 0xab, 0x7e, 0x37, 0x78, 0x03, 0x15, 0x12, 0x56, 0x40, 0xaa, 0xd0, - 0x20, 0x1f, 0x2c, 0x9b, 0x4d, 0x34, 0xf1, 0x0c, 0x0c, 0x8b, 0xe6, 0xd1, 0x0f, 0x43, 0xaf, 0xe3, - 0x9a, 0x6d, 0x97, 0x44, 0x61, 0xaf, 0x41, 0xbf, 0xe8, 0x1a, 0xa8, 0xc8, 0xaa, 0x91, 0x2a, 0xd7, - 0x6b, 0xe0, 0x8f, 0xfa, 0xff, 0xf1, 0x27, 0xac, 0x92, 0x09, 0x9f, 0xec, 0xf4, 0xa8, 0x20, 0x59, - 0x9e, 0xf7, 0xc4, 0x79, 0x18, 0x12, 0x26, 0x10, 0xf7, 0xd1, 0x99, 0xff, 0x0f, 0x47, 0x42, 0x45, - 0xeb, 0x8f, 0xc1, 0xe1, 0x5d, 0xab, 0x6e, 0xb9, 0xa8, 0xdd, 0x6a, 0x23, 0x1c, 0xb1, 0xf4, 0x51, - 0xe9, 0x7f, 0x39, 0xd4, 0x25, 0xe6, 0x36, 0x83, 0xdc, 0x54, 0x8a, 0x31, 0xb6, 0xdb, 0x39, 0x38, - 0xdb, 0x9f, 0xfa, 0xc1, 0x21, 0xed, 0xd9, 0x67, 0x9f, 0x7d, 0x36, 0x91, 0xf9, 0x58, 0x1f, 0x1c, - 0x0e, 0xcb, 0x99, 0xd0, 0xf4, 0x1d, 0x87, 0x3e, 0x6b, 0xb7, 0x79, 0x1d, 0xb5, 0x89, 0x91, 0x7a, - 0x0d, 0xf6, 0x4d, 0xcf, 0x41, 0x6f, 0xc3, 0xbc, 0x8e, 0x1a, 0xe9, 0xe4, 0xb4, 0x32, 0x33, 0xbc, - 0xf0, 0x8e, 0x58, 0x59, 0x39, 0xb7, 0x8c, 0x21, 0x06, 0x45, 0xea, 0x0f, 0x41, 0x92, 0x95, 0x68, - 0x2c, 0x61, 0x36, 0x9e, 0x04, 0x9c, 0x4b, 0x06, 0xc1, 0xe9, 0x77, 0x42, 0x3f, 0xfe, 0x9f, 0xc6, - 0x46, 0x1f, 0xd1, 0x39, 0x85, 0x07, 0x70, 0x5c, 0xe8, 0x13, 0x90, 0x22, 0x69, 0x52, 0x43, 0x7c, - 0x69, 0xf3, 0xbe, 0xe3, 0xc0, 0xaa, 0xa1, 0x2d, 0x73, 0xb7, 0xe1, 0x56, 0x9e, 0x34, 0x1b, 0xbb, - 0x88, 0x04, 0x7c, 0xbf, 0x31, 0xc8, 0x06, 0xdf, 0x83, 0xc7, 0xf4, 0x29, 0x18, 0xa0, 0x59, 0x55, - 0xb7, 0x6a, 0xe8, 0x69, 0x52, 0x3d, 0x7b, 0x0d, 0x9a, 0x68, 0x4b, 0x78, 0x04, 0x3f, 0xfe, 0x71, - 0xc7, 0xb6, 0x78, 0x68, 0x92, 0x47, 0xe0, 0x01, 0xf2, 0xf8, 0xf3, 0x72, 0xe1, 0xbe, 0x2b, 0x7c, - 0x7a, 0x72, 0x4c, 0x65, 0xbe, 0x9a, 0x80, 0x24, 0xa9, 0x17, 0x23, 0x30, 0xb0, 0x71, 0x6d, 0xad, - 0x54, 0x29, 0xae, 0x6e, 0xe6, 0x97, 0x4b, 0x9a, 0xa2, 0x0f, 0x03, 0x90, 0x81, 0xcb, 0xcb, 0xab, - 0xb9, 0x0d, 0x2d, 0xe1, 0x7d, 0x5f, 0x2a, 0x6f, 0x9c, 0x5b, 0xd4, 0x54, 0x0f, 0xb0, 0x49, 0x07, - 0x92, 0x41, 0x86, 0x33, 0x0b, 0x5a, 0xaf, 0xae, 0xc1, 0x20, 0x15, 0xb0, 0xf4, 0x58, 0xa9, 0x78, - 0x6e, 0x51, 0xeb, 0x13, 0x47, 0xce, 0x2c, 0x68, 0x87, 0xf4, 0x21, 0xe8, 0x27, 0x23, 0xf9, 0xd5, - 0xd5, 0x65, 0x2d, 0xe5, 0xc9, 0x5c, 0xdf, 0x30, 0x96, 0xca, 0x57, 0xb4, 0x7e, 0x4f, 0xe6, 0x15, - 0x63, 0x75, 0x73, 0x4d, 0x03, 0x4f, 0xc2, 0x4a, 0x69, 0x7d, 0x3d, 0x77, 0xa5, 0xa4, 0x0d, 0x78, - 0x1c, 0xf9, 0x6b, 0x1b, 0xa5, 0x75, 0x6d, 0x50, 0x50, 0xeb, 0xcc, 0x82, 0x36, 0xe4, 0x3d, 0xa2, - 0x54, 0xde, 0x5c, 0xd1, 0x86, 0xf5, 0x51, 0x18, 0xa2, 0x8f, 0xe0, 0x4a, 0x8c, 0x48, 0x43, 0xe7, - 0x16, 0x35, 0xcd, 0x57, 0x84, 0x4a, 0x19, 0x15, 0x06, 0xce, 0x2d, 0x6a, 0x7a, 0xa6, 0x00, 0xbd, - 0x24, 0xba, 0x74, 0x1d, 0x86, 0x97, 0x73, 0xf9, 0xd2, 0x72, 0x65, 0x75, 0x6d, 0x63, 0x69, 0xb5, - 0x9c, 0x5b, 0xd6, 0x14, 0x7f, 0xcc, 0x28, 0xbd, 0x7b, 0x73, 0xc9, 0x28, 0x15, 0xb5, 0x44, 0x70, - 0x6c, 0xad, 0x94, 0xdb, 0x28, 0x15, 0x35, 0x35, 0x53, 0x85, 0xc3, 0x61, 0x75, 0x32, 0x34, 0x33, - 0x02, 0x2e, 0x4e, 0x74, 0x71, 0x31, 0x91, 0xd5, 0xe1, 0xe2, 0x57, 0x12, 0x30, 0x16, 0xb2, 0x56, - 0x84, 0x3e, 0xe4, 0x61, 0xe8, 0xa5, 0x21, 0x4a, 0x57, 0xcf, 0xfb, 0x42, 0x17, 0x1d, 0x12, 0xb0, - 0x1d, 0x2b, 0x28, 0xc1, 0x05, 0x3b, 0x08, 0xb5, 0x4b, 0x07, 0x81, 0x45, 0x74, 0xd4, 0xf4, 0xff, - 0xd7, 0x51, 0xd3, 0xe9, 0xb2, 0x77, 0x2e, 0xce, 0xb2, 0x47, 0xc6, 0x0e, 0x56, 0xdb, 0x7b, 0x43, - 0x6a, 0xfb, 0x25, 0x18, 0xed, 0x10, 0x14, 0xbb, 0xc6, 0x7e, 0x50, 0x81, 0x74, 0x37, 0xe3, 0x44, - 0x54, 0xba, 0x84, 0x50, 0xe9, 0x2e, 0xc9, 0x16, 0x3c, 0xde, 0xdd, 0x09, 0x1d, 0xbe, 0xfe, 0x9c, - 0x02, 0xe3, 0xe1, 0x9d, 0x62, 0xa8, 0x0e, 0x0f, 0x41, 0x5f, 0x13, 0xb9, 0x3b, 0x36, 0xef, 0x96, - 0x4e, 0x86, 0xac, 0xc1, 0x98, 0x2c, 0x3b, 0x9b, 0xa1, 0x82, 0x8b, 0xb8, 0xda, 0xad, 0xdd, 0xa3, - 0xda, 0x74, 0x68, 0xfa, 0x91, 0x04, 0x1c, 0x09, 0x15, 0x1e, 0xaa, 0xe8, 0x5d, 0x00, 0x75, 0xab, - 0xb5, 0xeb, 0xd2, 0x8e, 0x88, 0x16, 0xd8, 0x7e, 0x32, 0x42, 0x8a, 0x17, 0x2e, 0x9e, 0xbb, 0xae, - 0x47, 0x57, 0x09, 0x1d, 0xe8, 0x10, 0x61, 0xb8, 0xe0, 0x2b, 0x9a, 0x24, 0x8a, 0x4e, 0x76, 0x99, - 0x69, 0x47, 0x60, 0xce, 0x83, 0x56, 0x6d, 0xd4, 0x91, 0xe5, 0x56, 0x1c, 0xb7, 0x8d, 0xcc, 0x66, - 0xdd, 0xda, 0x26, 0x2b, 0x48, 0x2a, 0xdb, 0xbb, 0x65, 0x36, 0x1c, 0x64, 0x8c, 0x50, 0xf2, 0x3a, - 0xa7, 0x62, 0x04, 0x09, 0xa0, 0x76, 0x00, 0xd1, 0x27, 0x20, 0x28, 0xd9, 0x43, 0x64, 0xbe, 0x9c, - 0x82, 0x81, 0x40, 0x5f, 0xad, 0x1f, 0x87, 0xc1, 0xc7, 0xcd, 0x27, 0xcd, 0x0a, 0x7f, 0x57, 0xa2, - 0x96, 0x18, 0xc0, 0x63, 0x6b, 0xec, 0x7d, 0x69, 0x1e, 0x0e, 0x13, 0x16, 0x7b, 0xd7, 0x45, 0xed, - 0x4a, 0xb5, 0x61, 0x3a, 0x0e, 0x31, 0x5a, 0x8a, 0xb0, 0xea, 0x98, 0xb6, 0x8a, 0x49, 0x05, 0x4e, - 0xd1, 0xcf, 0xc2, 0x18, 0x41, 0x34, 0x77, 0x1b, 0x6e, 0xbd, 0xd5, 0x40, 0x15, 0xfc, 0xf6, 0xe6, - 0x90, 0x95, 0xc4, 0xd3, 0x6c, 0x14, 0x73, 0xac, 0x30, 0x06, 0xac, 0x91, 0xa3, 0x17, 0xe1, 0x2e, - 0x02, 0xdb, 0x46, 0x16, 0x6a, 0x9b, 0x2e, 0xaa, 0xa0, 0xf7, 0xef, 0x9a, 0x0d, 0xa7, 0x62, 0x5a, - 0xb5, 0xca, 0x8e, 0xe9, 0xec, 0xa4, 0x0f, 0x63, 0x01, 0xf9, 0x44, 0x5a, 0x31, 0xee, 0xc0, 0x8c, - 0x57, 0x18, 0x5f, 0x89, 0xb0, 0xe5, 0xac, 0xda, 0x23, 0xa6, 0xb3, 0xa3, 0x67, 0x61, 0x9c, 0x48, - 0x71, 0xdc, 0x76, 0xdd, 0xda, 0xae, 0x54, 0x77, 0x50, 0xf5, 0x89, 0xca, 0xae, 0xbb, 0x75, 0x21, - 0x7d, 0x67, 0xf0, 0xf9, 0x44, 0xc3, 0x75, 0xc2, 0x53, 0xc0, 0x2c, 0x9b, 0xee, 0xd6, 0x05, 0x7d, - 0x1d, 0x06, 0xb1, 0x33, 0x9a, 0xf5, 0x67, 0x50, 0x65, 0xcb, 0x6e, 0x93, 0xa5, 0x71, 0x38, 0xa4, - 0x34, 0x05, 0x2c, 0x38, 0xb7, 0xca, 0x00, 0x2b, 0x76, 0x0d, 0x65, 0x7b, 0xd7, 0xd7, 0x4a, 0xa5, - 0xa2, 0x31, 0xc0, 0xa5, 0x5c, 0xb6, 0xdb, 0x38, 0xa0, 0xb6, 0x6d, 0xcf, 0xc0, 0x03, 0x34, 0xa0, - 0xb6, 0x6d, 0x6e, 0xde, 0xb3, 0x30, 0x56, 0xad, 0xd2, 0x39, 0xd7, 0xab, 0x15, 0xf6, 0x8e, 0xe5, - 0xa4, 0x35, 0xc1, 0x58, 0xd5, 0xea, 0x15, 0xca, 0xc0, 0x62, 0xdc, 0xd1, 0x2f, 0xc2, 0x11, 0xdf, - 0x58, 0x41, 0xe0, 0x68, 0xc7, 0x2c, 0x65, 0xe8, 0x59, 0x18, 0x6b, 0xed, 0x75, 0x02, 0x75, 0xe1, - 0x89, 0xad, 0x3d, 0x19, 0x76, 0x1e, 0x0e, 0xb7, 0x76, 0x5a, 0x9d, 0xb8, 0xd9, 0x20, 0x4e, 0x6f, - 0xed, 0xb4, 0x64, 0xe0, 0x3d, 0xe4, 0x85, 0xbb, 0x8d, 0xaa, 0xa6, 0x8b, 0x6a, 0xe9, 0xa3, 0x41, + // 6731 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x7b, 0x70, 0x24, 0x57, + 0x79, 0xef, 0xf6, 0xf4, 0x48, 0x3b, 0xfa, 0xf4, 0x6a, 0xb5, 0x76, 0xb5, 0x63, 0x79, 0x2d, 0xed, + 0x8e, 0xd7, 0x6b, 0x59, 0xb6, 0xb5, 0x5a, 0xad, 0xf6, 0x35, 0x8b, 0xed, 0x3b, 0xaf, 0x5d, 0x6b, + 0x91, 0x46, 0xa2, 0x25, 0x61, 0x2f, 0xdc, 0x5b, 0x53, 0xbd, 0x33, 0x47, 0xd2, 0xd8, 0x33, 0xdd, + 0xc3, 0x74, 0x8f, 0x6d, 0xb9, 0x6e, 0xdd, 0xf2, 0x85, 0x7b, 0x09, 0x24, 0x95, 0x27, 0x49, 0x05, + 0x08, 0x18, 0x03, 0x05, 0x18, 0xf2, 0x82, 0x40, 0x08, 0x90, 0x54, 0xf0, 0x3f, 0x84, 0xcd, 0x3f, + 0x29, 0x93, 0xbf, 0x52, 0x54, 0xca, 0x85, 0xd7, 0x54, 0x85, 0x24, 0x4e, 0x20, 0xc4, 0x55, 0xa1, + 0xca, 0xfc, 0x91, 0x3a, 0xaf, 0xee, 0x3e, 0x67, 0x7a, 0xd4, 0x2d, 0xaf, 0x6d, 0xf8, 0x67, 0x77, + 0xe6, 0x7c, 0xdf, 0xef, 0xeb, 0xef, 0x7c, 0xaf, 0xf3, 0xf5, 0x39, 0x47, 0x03, 0x3f, 0xbe, 0x08, + 0xc7, 0xb6, 0x6d, 0x7b, 0xbb, 0x81, 0x4e, 0xb5, 0xda, 0xb6, 0x6b, 0x5f, 0xef, 0x6c, 0x9d, 0xaa, + 0x21, 0xa7, 0xda, 0xae, 0xb7, 0x5c, 0xbb, 0x3d, 0x47, 0xc6, 0xf4, 0x51, 0xca, 0x31, 0xc7, 0x39, + 0x32, 0x2b, 0x30, 0x76, 0xb9, 0xde, 0x40, 0x45, 0x8f, 0x71, 0x1d, 0xb9, 0xfa, 0x05, 0x48, 0x6e, + 0xd5, 0x1b, 0x28, 0xad, 0x1c, 0x53, 0x67, 0x06, 0x17, 0x4e, 0xcc, 0x49, 0xa0, 0x39, 0x11, 0xb1, + 0x86, 0x87, 0x0d, 0x82, 0xc8, 0xfc, 0x30, 0x09, 0xe3, 0x21, 0x54, 0x5d, 0x87, 0xa4, 0x65, 0x36, + 0xb1, 0x44, 0x65, 0x66, 0xc0, 0x20, 0x9f, 0xf5, 0x34, 0x1c, 0x6c, 0x99, 0xd5, 0xc7, 0xcd, 0x6d, + 0x94, 0x4e, 0x90, 0x61, 0xfe, 0x55, 0x9f, 0x02, 0xa8, 0xa1, 0x16, 0xb2, 0x6a, 0xc8, 0xaa, 0xee, + 0xa6, 0xd5, 0x63, 0xea, 0xcc, 0x80, 0x11, 0x18, 0xd1, 0xef, 0x85, 0xb1, 0x56, 0xe7, 0x7a, 0xa3, + 0x5e, 0xad, 0x04, 0xd8, 0xe0, 0x98, 0x3a, 0xd3, 0x67, 0x68, 0x94, 0x50, 0xf4, 0x99, 0xef, 0x86, + 0xd1, 0x27, 0x91, 0xf9, 0x78, 0x90, 0x75, 0x90, 0xb0, 0x8e, 0xe0, 0xe1, 0x00, 0x63, 0x01, 0x86, + 0x9a, 0xc8, 0x71, 0xcc, 0x6d, 0x54, 0x71, 0x77, 0x5b, 0x28, 0x9d, 0x24, 0xb3, 0x3f, 0xd6, 0x35, + 0x7b, 0x79, 0xe6, 0x83, 0x0c, 0xb5, 0xb1, 0xdb, 0x42, 0x7a, 0x0e, 0x06, 0x90, 0xd5, 0x69, 0x52, + 0x09, 0x7d, 0x3d, 0xec, 0x57, 0xb2, 0x3a, 0x4d, 0x59, 0x4a, 0x0a, 0xc3, 0x98, 0x88, 0x83, 0x0e, + 0x6a, 0x3f, 0x51, 0xaf, 0xa2, 0x74, 0x3f, 0x11, 0x70, 0x77, 0x97, 0x80, 0x75, 0x4a, 0x97, 0x65, + 0x70, 0x9c, 0x5e, 0x80, 0x01, 0xf4, 0x94, 0x8b, 0x2c, 0xa7, 0x6e, 0x5b, 0xe9, 0x83, 0x44, 0xc8, + 0x5d, 0x21, 0x5e, 0x44, 0x8d, 0x9a, 0x2c, 0xc2, 0xc7, 0xe9, 0xe7, 0xe0, 0xa0, 0xdd, 0x72, 0xeb, + 0xb6, 0xe5, 0xa4, 0x53, 0xc7, 0x94, 0x99, 0xc1, 0x85, 0xa3, 0xa1, 0x81, 0xb0, 0x4a, 0x79, 0x0c, + 0xce, 0xac, 0x2f, 0x81, 0xe6, 0xd8, 0x9d, 0x76, 0x15, 0x55, 0xaa, 0x76, 0x0d, 0x55, 0xea, 0xd6, + 0x96, 0x9d, 0x1e, 0x20, 0x02, 0xa6, 0xbb, 0x27, 0x42, 0x18, 0x0b, 0x76, 0x0d, 0x2d, 0x59, 0x5b, + 0xb6, 0x31, 0xe2, 0x08, 0xdf, 0xf5, 0x09, 0xe8, 0x77, 0x76, 0x2d, 0xd7, 0x7c, 0x2a, 0x3d, 0x44, + 0x22, 0x84, 0x7d, 0xcb, 0x7c, 0xb3, 0x1f, 0x46, 0xe3, 0x84, 0xd8, 0x25, 0xe8, 0xdb, 0xc2, 0xb3, + 0x4c, 0x27, 0xf6, 0x63, 0x03, 0x8a, 0x11, 0x8d, 0xd8, 0xff, 0x06, 0x8d, 0x98, 0x83, 0x41, 0x0b, + 0x39, 0x2e, 0xaa, 0xd1, 0x88, 0x50, 0x63, 0xc6, 0x14, 0x50, 0x50, 0x77, 0x48, 0x25, 0xdf, 0x50, + 0x48, 0x3d, 0x0a, 0xa3, 0x9e, 0x4a, 0x95, 0xb6, 0x69, 0x6d, 0xf3, 0xd8, 0x3c, 0x15, 0xa5, 0xc9, + 0x5c, 0x89, 0xe3, 0x0c, 0x0c, 0x33, 0x46, 0x90, 0xf0, 0x5d, 0x2f, 0x02, 0xd8, 0x16, 0xb2, 0xb7, + 0x2a, 0x35, 0x54, 0x6d, 0xa4, 0x53, 0x3d, 0xac, 0xb4, 0x8a, 0x59, 0xba, 0xac, 0x64, 0xd3, 0xd1, + 0x6a, 0x43, 0xbf, 0xe8, 0x87, 0xda, 0xc1, 0x1e, 0x91, 0xb2, 0x42, 0x93, 0xac, 0x2b, 0xda, 0x36, + 0x61, 0xa4, 0x8d, 0x70, 0xdc, 0xa3, 0x1a, 0x9b, 0xd9, 0x00, 0x51, 0x62, 0x2e, 0x72, 0x66, 0x06, + 0x83, 0xd1, 0x89, 0x0d, 0xb7, 0x83, 0x5f, 0xf5, 0x3b, 0xc1, 0x1b, 0xa8, 0x90, 0xb0, 0x02, 0x52, + 0x85, 0x86, 0xf8, 0x60, 0xd9, 0x6c, 0xa2, 0xc9, 0xa7, 0x61, 0x44, 0x34, 0x8f, 0x7e, 0x08, 0xfa, + 0x1c, 0xd7, 0x6c, 0xbb, 0x24, 0x0a, 0xfb, 0x0c, 0xfa, 0x45, 0xd7, 0x40, 0x45, 0x56, 0x8d, 0x54, + 0xb9, 0x3e, 0x03, 0x7f, 0xd4, 0xff, 0x87, 0x3f, 0x61, 0x95, 0x4c, 0xf8, 0x64, 0xb7, 0x47, 0x05, + 0xc9, 0xf2, 0xbc, 0x27, 0xcf, 0xc3, 0xb0, 0x30, 0x81, 0xb8, 0x8f, 0xce, 0xfc, 0x6f, 0x38, 0x1c, + 0x2a, 0x5a, 0x7f, 0x14, 0x0e, 0x75, 0xac, 0xba, 0xe5, 0xa2, 0x76, 0xab, 0x8d, 0x70, 0xc4, 0xd2, + 0x47, 0xa5, 0xff, 0xe9, 0x60, 0x8f, 0x98, 0xdb, 0x0c, 0x72, 0x53, 0x29, 0xc6, 0x78, 0xa7, 0x7b, + 0x70, 0x76, 0x20, 0xf5, 0xa3, 0x83, 0xda, 0x33, 0xcf, 0x3c, 0xf3, 0x4c, 0x22, 0xf3, 0xd1, 0x7e, + 0x38, 0x14, 0x96, 0x33, 0xa1, 0xe9, 0x3b, 0x01, 0xfd, 0x56, 0xa7, 0x79, 0x1d, 0xb5, 0x89, 0x91, + 0xfa, 0x0c, 0xf6, 0x4d, 0xcf, 0x41, 0x5f, 0xc3, 0xbc, 0x8e, 0x1a, 0xe9, 0xe4, 0x31, 0x65, 0x66, + 0x64, 0xe1, 0xde, 0x58, 0x59, 0x39, 0xb7, 0x8c, 0x21, 0x06, 0x45, 0xea, 0x0f, 0x42, 0x92, 0x95, + 0x68, 0x2c, 0x61, 0x36, 0x9e, 0x04, 0x9c, 0x4b, 0x06, 0xc1, 0xe9, 0xb7, 0xc3, 0x00, 0xfe, 0x9f, + 0xc6, 0x46, 0x3f, 0xd1, 0x39, 0x85, 0x07, 0x70, 0x5c, 0xe8, 0x93, 0x90, 0x22, 0x69, 0x52, 0x43, + 0x7c, 0x69, 0xf3, 0xbe, 0xe3, 0xc0, 0xaa, 0xa1, 0x2d, 0xb3, 0xd3, 0x70, 0x2b, 0x4f, 0x98, 0x8d, + 0x0e, 0x22, 0x01, 0x3f, 0x60, 0x0c, 0xb1, 0xc1, 0x77, 0xe3, 0x31, 0x7d, 0x1a, 0x06, 0x69, 0x56, + 0xd5, 0xad, 0x1a, 0x7a, 0x8a, 0x54, 0xcf, 0x3e, 0x83, 0x26, 0xda, 0x12, 0x1e, 0xc1, 0x8f, 0x7f, + 0xcc, 0xb1, 0x2d, 0x1e, 0x9a, 0xe4, 0x11, 0x78, 0x80, 0x3c, 0xfe, 0xbc, 0x5c, 0xb8, 0xef, 0x08, + 0x9f, 0x9e, 0x1c, 0x53, 0x99, 0xaf, 0x27, 0x20, 0x49, 0xea, 0xc5, 0x28, 0x0c, 0x6e, 0x5c, 0x5b, + 0x2b, 0x55, 0x8a, 0xab, 0x9b, 0xf9, 0xe5, 0x92, 0xa6, 0xe8, 0x23, 0x00, 0x64, 0xe0, 0xf2, 0xf2, + 0x6a, 0x6e, 0x43, 0x4b, 0x78, 0xdf, 0x97, 0xca, 0x1b, 0xe7, 0x16, 0x35, 0xd5, 0x03, 0x6c, 0xd2, + 0x81, 0x64, 0x90, 0xe1, 0xcc, 0x82, 0xd6, 0xa7, 0x6b, 0x30, 0x44, 0x05, 0x2c, 0x3d, 0x5a, 0x2a, + 0x9e, 0x5b, 0xd4, 0xfa, 0xc5, 0x91, 0x33, 0x0b, 0xda, 0x41, 0x7d, 0x18, 0x06, 0xc8, 0x48, 0x7e, + 0x75, 0x75, 0x59, 0x4b, 0x79, 0x32, 0xd7, 0x37, 0x8c, 0xa5, 0xf2, 0x15, 0x6d, 0xc0, 0x93, 0x79, + 0xc5, 0x58, 0xdd, 0x5c, 0xd3, 0xc0, 0x93, 0xb0, 0x52, 0x5a, 0x5f, 0xcf, 0x5d, 0x29, 0x69, 0x83, + 0x1e, 0x47, 0xfe, 0xda, 0x46, 0x69, 0x5d, 0x1b, 0x12, 0xd4, 0x3a, 0xb3, 0xa0, 0x0d, 0x7b, 0x8f, + 0x28, 0x95, 0x37, 0x57, 0xb4, 0x11, 0x7d, 0x0c, 0x86, 0xe9, 0x23, 0xb8, 0x12, 0xa3, 0xd2, 0xd0, + 0xb9, 0x45, 0x4d, 0xf3, 0x15, 0xa1, 0x52, 0xc6, 0x84, 0x81, 0x73, 0x8b, 0x9a, 0x9e, 0x29, 0x40, + 0x1f, 0x89, 0x2e, 0x5d, 0x87, 0x91, 0xe5, 0x5c, 0xbe, 0xb4, 0x5c, 0x59, 0x5d, 0xdb, 0x58, 0x5a, + 0x2d, 0xe7, 0x96, 0x35, 0xc5, 0x1f, 0x33, 0x4a, 0xef, 0xda, 0x5c, 0x32, 0x4a, 0x45, 0x2d, 0x11, + 0x1c, 0x5b, 0x2b, 0xe5, 0x36, 0x4a, 0x45, 0x4d, 0xcd, 0x54, 0xe1, 0x50, 0x58, 0x9d, 0x0c, 0xcd, + 0x8c, 0x80, 0x8b, 0x13, 0x3d, 0x5c, 0x4c, 0x64, 0x75, 0xb9, 0xf8, 0x95, 0x04, 0x8c, 0x87, 0xac, + 0x15, 0xa1, 0x0f, 0x79, 0x08, 0xfa, 0x68, 0x88, 0xd2, 0xd5, 0xf3, 0x9e, 0xd0, 0x45, 0x87, 0x04, + 0x6c, 0xd7, 0x0a, 0x4a, 0x70, 0xc1, 0x0e, 0x42, 0xed, 0xd1, 0x41, 0x60, 0x11, 0x5d, 0x35, 0xfd, + 0x7f, 0x75, 0xd5, 0x74, 0xba, 0xec, 0x9d, 0x8b, 0xb3, 0xec, 0x91, 0xb1, 0xfd, 0xd5, 0xf6, 0xbe, + 0x90, 0xda, 0x7e, 0x09, 0xc6, 0xba, 0x04, 0xc5, 0xae, 0xb1, 0x1f, 0x50, 0x20, 0xdd, 0xcb, 0x38, + 0x11, 0x95, 0x2e, 0x21, 0x54, 0xba, 0x4b, 0xb2, 0x05, 0x8f, 0xf7, 0x76, 0x42, 0x97, 0xaf, 0xbf, + 0xa0, 0xc0, 0x44, 0x78, 0xa7, 0x18, 0xaa, 0xc3, 0x83, 0xd0, 0xdf, 0x44, 0xee, 0x8e, 0xcd, 0xbb, + 0xa5, 0x93, 0x21, 0x6b, 0x30, 0x26, 0xcb, 0xce, 0x66, 0xa8, 0xe0, 0x22, 0xae, 0xf6, 0x6a, 0xf7, + 0xa8, 0x36, 0x5d, 0x9a, 0x7e, 0x38, 0x01, 0x87, 0x43, 0x85, 0x87, 0x2a, 0x7a, 0x07, 0x40, 0xdd, + 0x6a, 0x75, 0x5c, 0xda, 0x11, 0xd1, 0x02, 0x3b, 0x40, 0x46, 0x48, 0xf1, 0xc2, 0xc5, 0xb3, 0xe3, + 0x7a, 0x74, 0x95, 0xd0, 0x81, 0x0e, 0x11, 0x86, 0x0b, 0xbe, 0xa2, 0x49, 0xa2, 0xe8, 0x54, 0x8f, + 0x99, 0x76, 0x05, 0xe6, 0x3c, 0x68, 0xd5, 0x46, 0x1d, 0x59, 0x6e, 0xc5, 0x71, 0xdb, 0xc8, 0x6c, + 0xd6, 0xad, 0x6d, 0xb2, 0x82, 0xa4, 0xb2, 0x7d, 0x5b, 0x66, 0xc3, 0x41, 0xc6, 0x28, 0x25, 0xaf, + 0x73, 0x2a, 0x46, 0x90, 0x00, 0x6a, 0x07, 0x10, 0xfd, 0x02, 0x82, 0x92, 0x3d, 0x44, 0xe6, 0xab, + 0x29, 0x18, 0x0c, 0xf4, 0xd5, 0xfa, 0x71, 0x18, 0x7a, 0xcc, 0x7c, 0xc2, 0xac, 0xf0, 0x77, 0x25, + 0x6a, 0x89, 0x41, 0x3c, 0xb6, 0xc6, 0xde, 0x97, 0xe6, 0xe1, 0x10, 0x61, 0xb1, 0x3b, 0x2e, 0x6a, + 0x57, 0xaa, 0x0d, 0xd3, 0x71, 0x88, 0xd1, 0x52, 0x84, 0x55, 0xc7, 0xb4, 0x55, 0x4c, 0x2a, 0x70, + 0x8a, 0x7e, 0x16, 0xc6, 0x09, 0xa2, 0xd9, 0x69, 0xb8, 0xf5, 0x56, 0x03, 0x55, 0xf0, 0xdb, 0x9b, + 0x43, 0x56, 0x12, 0x4f, 0xb3, 0x31, 0xcc, 0xb1, 0xc2, 0x18, 0xb0, 0x46, 0x8e, 0x5e, 0x84, 0x3b, + 0x08, 0x6c, 0x1b, 0x59, 0xa8, 0x6d, 0xba, 0xa8, 0x82, 0xde, 0xd7, 0x31, 0x1b, 0x4e, 0xc5, 0xb4, + 0x6a, 0x95, 0x1d, 0xd3, 0xd9, 0x49, 0x1f, 0xc2, 0x02, 0xf2, 0x89, 0xb4, 0x62, 0xdc, 0x86, 0x19, + 0xaf, 0x30, 0xbe, 0x12, 0x61, 0xcb, 0x59, 0xb5, 0x87, 0x4d, 0x67, 0x47, 0xcf, 0xc2, 0x04, 0x91, + 0xe2, 0xb8, 0xed, 0xba, 0xb5, 0x5d, 0xa9, 0xee, 0xa0, 0xea, 0xe3, 0x95, 0x8e, 0xbb, 0x75, 0x21, + 0x7d, 0x7b, 0xf0, 0xf9, 0x44, 0xc3, 0x75, 0xc2, 0x53, 0xc0, 0x2c, 0x9b, 0xee, 0xd6, 0x05, 0x7d, + 0x1d, 0x86, 0xb0, 0x33, 0x9a, 0xf5, 0xa7, 0x51, 0x65, 0xcb, 0x6e, 0x93, 0xa5, 0x71, 0x24, 0xa4, + 0x34, 0x05, 0x2c, 0x38, 0xb7, 0xca, 0x00, 0x2b, 0x76, 0x0d, 0x65, 0xfb, 0xd6, 0xd7, 0x4a, 0xa5, + 0xa2, 0x31, 0xc8, 0xa5, 0x5c, 0xb6, 0xdb, 0x38, 0xa0, 0xb6, 0x6d, 0xcf, 0xc0, 0x83, 0x34, 0xa0, + 0xb6, 0x6d, 0x6e, 0xde, 0xb3, 0x30, 0x5e, 0xad, 0xd2, 0x39, 0xd7, 0xab, 0x15, 0xf6, 0x8e, 0xe5, + 0xa4, 0x35, 0xc1, 0x58, 0xd5, 0xea, 0x15, 0xca, 0xc0, 0x62, 0xdc, 0xd1, 0x2f, 0xc2, 0x61, 0xdf, + 0x58, 0x41, 0xe0, 0x58, 0xd7, 0x2c, 0x65, 0xe8, 0x59, 0x18, 0x6f, 0xed, 0x76, 0x03, 0x75, 0xe1, + 0x89, 0xad, 0x5d, 0x19, 0x76, 0x1e, 0x0e, 0xb5, 0x76, 0x5a, 0xdd, 0xb8, 0xd9, 0x20, 0x4e, 0x6f, + 0xed, 0xb4, 0x64, 0xe0, 0x5d, 0xe4, 0x85, 0xbb, 0x8d, 0xaa, 0xa6, 0x8b, 0x6a, 0xe9, 0x23, 0x41, 0xf6, 0x00, 0x41, 0x3f, 0x05, 0x5a, 0xb5, 0x5a, 0x41, 0x96, 0x79, 0xbd, 0x81, 0x2a, 0x66, 0x1b, - 0x59, 0xa6, 0x93, 0x9e, 0x0a, 0x32, 0x0f, 0x57, 0xab, 0x25, 0x42, 0xcd, 0x11, 0xa2, 0x3e, 0x0b, - 0xa3, 0xf6, 0xf5, 0xc7, 0xab, 0x34, 0x24, 0x2b, 0xad, 0x36, 0xda, 0xaa, 0x3f, 0x9d, 0x3e, 0x41, - 0xec, 0x3b, 0x82, 0x09, 0x24, 0x20, 0xd7, 0xc8, 0xb0, 0x7e, 0x1f, 0x68, 0x55, 0x67, 0xc7, 0x6c, - 0xb7, 0x48, 0x4d, 0x76, 0x5a, 0x66, 0x15, 0xa5, 0xef, 0xa1, 0xac, 0x74, 0xbc, 0xcc, 0x87, 0x71, - 0x4a, 0x38, 0x4f, 0xd5, 0xb7, 0x5c, 0x2e, 0xf1, 0x5e, 0x9a, 0x12, 0x64, 0x8c, 0x49, 0x9b, 0x01, - 0x0d, 0x9b, 0x42, 0x78, 0xf0, 0x0c, 0x61, 0x1b, 0x6e, 0xed, 0xb4, 0x82, 0xcf, 0xbd, 0x1b, 0x86, - 0x30, 0xa7, 0xff, 0xd0, 0xfb, 0x68, 0x43, 0xd6, 0xda, 0x09, 0x3c, 0xf1, 0x2d, 0xeb, 0x8d, 0x33, - 0x59, 0x18, 0x0c, 0xc6, 0xa7, 0xde, 0x0f, 0x34, 0x42, 0x35, 0x05, 0x37, 0x2b, 0x85, 0xd5, 0x22, - 0x6e, 0x33, 0xde, 0x5b, 0xd2, 0x12, 0xb8, 0xdd, 0x59, 0x5e, 0xda, 0x28, 0x55, 0x8c, 0xcd, 0xf2, - 0xc6, 0xd2, 0x4a, 0x49, 0x53, 0x83, 0x7d, 0xf5, 0xb7, 0x12, 0x30, 0x2c, 0xbe, 0x22, 0xe9, 0xef, - 0x84, 0xa3, 0x7c, 0x3f, 0xc3, 0x41, 0x6e, 0xe5, 0xa9, 0x7a, 0x9b, 0xa4, 0x4c, 0xd3, 0xa4, 0xcb, - 0x97, 0xe7, 0xb4, 0xc3, 0x8c, 0x6b, 0x1d, 0xb9, 0x8f, 0xd6, 0xdb, 0x38, 0x21, 0x9a, 0xa6, 0xab, - 0x2f, 0xc3, 0x94, 0x65, 0x57, 0x1c, 0xd7, 0xb4, 0x6a, 0x66, 0xbb, 0x56, 0xf1, 0x77, 0x92, 0x2a, - 0x66, 0xb5, 0x8a, 0x1c, 0xc7, 0xa6, 0x4b, 0x95, 0x27, 0xe5, 0x98, 0x65, 0xaf, 0x33, 0x66, 0xbf, - 0x86, 0xe7, 0x18, 0xab, 0x14, 0x60, 0x6a, 0xb7, 0x00, 0xbb, 0x13, 0xfa, 0x9b, 0x66, 0xab, 0x82, - 0x2c, 0xb7, 0xbd, 0x47, 0x1a, 0xe3, 0x94, 0x91, 0x6a, 0x9a, 0xad, 0x12, 0xfe, 0xfe, 0xf6, 0xbc, - 0x9f, 0xfc, 0xb3, 0x0a, 0x83, 0xc1, 0xe6, 0x18, 0xbf, 0x6b, 0x54, 0xc9, 0x3a, 0xa2, 0x90, 0x4a, - 0x73, 0xf7, 0xbe, 0xad, 0xf4, 0x5c, 0x01, 0x2f, 0x30, 0xd9, 0x3e, 0xda, 0xb2, 0x1a, 0x14, 0x89, - 0x17, 0x77, 0x5c, 0x5b, 0x10, 0x6d, 0x11, 0x52, 0x06, 0xfb, 0xa6, 0x5f, 0x81, 0xbe, 0xc7, 0x1d, - 0x22, 0xbb, 0x8f, 0xc8, 0x3e, 0xb1, 0xbf, 0xec, 0xab, 0xeb, 0x44, 0x78, 0xff, 0xd5, 0xf5, 0x4a, - 0x79, 0xd5, 0x58, 0xc9, 0x2d, 0x1b, 0x0c, 0xae, 0xdf, 0x01, 0xc9, 0x86, 0xf9, 0xcc, 0x9e, 0xb8, - 0x14, 0x91, 0xa1, 0xb8, 0x86, 0xbf, 0x03, 0x92, 0x4f, 0x21, 0xf3, 0x09, 0x71, 0x01, 0x20, 0x43, - 0x6f, 0x61, 0xe8, 0x9f, 0x82, 0x5e, 0x62, 0x2f, 0x1d, 0x80, 0x59, 0x4c, 0xeb, 0xd1, 0x53, 0x90, - 0x2c, 0xac, 0x1a, 0x38, 0xfc, 0x35, 0x18, 0xa4, 0xa3, 0x95, 0xb5, 0xa5, 0x52, 0xa1, 0xa4, 0x25, - 0x32, 0x67, 0xa1, 0x8f, 0x1a, 0x01, 0xa7, 0x86, 0x67, 0x06, 0xad, 0x87, 0x7d, 0x65, 0x32, 0x14, - 0x4e, 0xdd, 0x5c, 0xc9, 0x97, 0x0c, 0x2d, 0x11, 0x74, 0xaf, 0x03, 0x83, 0xc1, 0xbe, 0xf8, 0xed, - 0x89, 0xa9, 0x6f, 0x28, 0x30, 0x10, 0xe8, 0x73, 0x71, 0x83, 0x62, 0x36, 0x1a, 0xf6, 0x53, 0x15, - 0xb3, 0x51, 0x37, 0x1d, 0x16, 0x14, 0x40, 0x86, 0x72, 0x78, 0x24, 0xae, 0xd3, 0xde, 0x16, 0xe5, - 0x9f, 0x53, 0x40, 0x93, 0x5b, 0x4c, 0x49, 0x41, 0xe5, 0x67, 0xaa, 0xe0, 0x27, 0x15, 0x18, 0x16, - 0xfb, 0x4a, 0x49, 0xbd, 0xe3, 0x3f, 0x53, 0xf5, 0xbe, 0x97, 0x80, 0x21, 0xa1, 0x9b, 0x8c, 0xab, - 0xdd, 0xfb, 0x61, 0xb4, 0x5e, 0x43, 0xcd, 0x96, 0xed, 0x22, 0xab, 0xba, 0x57, 0x69, 0xa0, 0x27, - 0x51, 0x23, 0x9d, 0x21, 0x85, 0xe2, 0xd4, 0xfe, 0xfd, 0xea, 0xdc, 0x92, 0x8f, 0x5b, 0xc6, 0xb0, - 0xec, 0xd8, 0x52, 0xb1, 0xb4, 0xb2, 0xb6, 0xba, 0x51, 0x2a, 0x17, 0xae, 0x55, 0x36, 0xcb, 0xef, - 0x2a, 0xaf, 0x3e, 0x5a, 0x36, 0xb4, 0xba, 0xc4, 0xf6, 0x16, 0xa6, 0xfa, 0x1a, 0x68, 0xb2, 0x52, - 0xfa, 0x51, 0x08, 0x53, 0x4b, 0xeb, 0xd1, 0xc7, 0x60, 0xa4, 0xbc, 0x5a, 0x59, 0x5f, 0x2a, 0x96, - 0x2a, 0xa5, 0xcb, 0x97, 0x4b, 0x85, 0x8d, 0x75, 0xba, 0x03, 0xe1, 0x71, 0x6f, 0x88, 0x49, 0xfd, - 0x09, 0x15, 0xc6, 0x42, 0x34, 0xd1, 0x73, 0xec, 0xdd, 0x81, 0xbe, 0xce, 0x3c, 0x10, 0x47, 0xfb, - 0x39, 0xbc, 0xe4, 0xaf, 0x99, 0x6d, 0x97, 0xbd, 0x6a, 0xdc, 0x07, 0xd8, 0x4a, 0x96, 0x5b, 0xdf, - 0xaa, 0xa3, 0x36, 0xdb, 0xb0, 0xa1, 0x2f, 0x14, 0x23, 0xfe, 0x38, 0xdd, 0xb3, 0xb9, 0x1f, 0xf4, - 0x96, 0xed, 0xd4, 0xdd, 0xfa, 0x93, 0xa8, 0x52, 0xb7, 0xf8, 0xee, 0x0e, 0x7e, 0xc1, 0x48, 0x1a, - 0x1a, 0xa7, 0x2c, 0x59, 0xae, 0xc7, 0x6d, 0xa1, 0x6d, 0x53, 0xe2, 0xc6, 0x05, 0x5c, 0x35, 0x34, - 0x4e, 0xf1, 0xb8, 0x8f, 0xc3, 0x60, 0xcd, 0xde, 0xc5, 0x5d, 0x17, 0xe5, 0xc3, 0xeb, 0x85, 0x62, - 0x0c, 0xd0, 0x31, 0x8f, 0x85, 0xf5, 0xd3, 0xfe, 0xb6, 0xd2, 0xa0, 0x31, 0x40, 0xc7, 0x28, 0xcb, - 0xbd, 0x30, 0x62, 0x6e, 0x6f, 0xb7, 0xb1, 0x70, 0x2e, 0x88, 0xbe, 0x21, 0x0c, 0x7b, 0xc3, 0x84, - 0x71, 0xe2, 0x2a, 0xa4, 0xb8, 0x1d, 0xf0, 0x92, 0x8c, 0x2d, 0x51, 0x69, 0xd1, 0xd7, 0xde, 0xc4, - 0x4c, 0xbf, 0x91, 0xb2, 0x38, 0xf1, 0x38, 0x0c, 0xd6, 0x9d, 0x8a, 0xbf, 0x4b, 0x9e, 0x98, 0x4e, - 0xcc, 0xa4, 0x8c, 0x81, 0xba, 0xe3, 0xed, 0x30, 0x66, 0x3e, 0x97, 0x80, 0x61, 0x71, 0x97, 0x5f, - 0x2f, 0x42, 0xaa, 0x61, 0x57, 0x4d, 0x12, 0x5a, 0xf4, 0x88, 0x69, 0x26, 0xe2, 0x60, 0x60, 0x6e, - 0x99, 0xf1, 0x1b, 0x1e, 0x72, 0xe2, 0x1f, 0x14, 0x48, 0xf1, 0x61, 0x7d, 0x1c, 0x92, 0x2d, 0xd3, - 0xdd, 0x21, 0xe2, 0x7a, 0xf3, 0x09, 0x4d, 0x31, 0xc8, 0x77, 0x3c, 0xee, 0xb4, 0x4c, 0x8b, 0x84, - 0x00, 0x1b, 0xc7, 0xdf, 0xb1, 0x5f, 0x1b, 0xc8, 0xac, 0x91, 0xd7, 0x0f, 0xbb, 0xd9, 0x44, 0x96, - 0xeb, 0x70, 0xbf, 0xb2, 0xf1, 0x02, 0x1b, 0xd6, 0xdf, 0x01, 0xa3, 0x6e, 0xdb, 0xac, 0x37, 0x04, - 0xde, 0x24, 0xe1, 0xd5, 0x38, 0xc1, 0x63, 0xce, 0xc2, 0x1d, 0x5c, 0x6e, 0x0d, 0xb9, 0x66, 0x75, - 0x07, 0xd5, 0x7c, 0x50, 0x1f, 0xd9, 0x66, 0x38, 0xca, 0x18, 0x8a, 0x8c, 0xce, 0xb1, 0x99, 0xef, - 0x28, 0x30, 0xca, 0x5f, 0x98, 0x6a, 0x9e, 0xb1, 0x56, 0x00, 0x4c, 0xcb, 0xb2, 0xdd, 0xa0, 0xb9, - 0x3a, 0x43, 0xb9, 0x03, 0x37, 0x97, 0xf3, 0x40, 0x46, 0x40, 0xc0, 0x44, 0x13, 0xc0, 0xa7, 0x74, - 0x35, 0xdb, 0x14, 0x0c, 0xb0, 0x23, 0x1c, 0x72, 0x0e, 0x48, 0x5f, 0xb1, 0x81, 0x0e, 0xe1, 0x37, - 0x2b, 0xfd, 0x30, 0xf4, 0x5e, 0x47, 0xdb, 0x75, 0x8b, 0x6d, 0xcc, 0xd2, 0x2f, 0x7c, 0x23, 0x24, - 0xe9, 0x6d, 0x84, 0xe4, 0xdf, 0x07, 0x63, 0x55, 0xbb, 0x29, 0xab, 0x9b, 0xd7, 0xa4, 0xd7, 0x7c, - 0xe7, 0x11, 0xe5, 0xbd, 0xe0, 0xb7, 0x98, 0x3f, 0x51, 0x94, 0x3f, 0x4c, 0xa8, 0x57, 0xd6, 0xf2, - 0x5f, 0x48, 0x4c, 0x5c, 0xa1, 0xd0, 0x35, 0x3e, 0x53, 0x03, 0x6d, 0x35, 0x50, 0x15, 0x6b, 0x0f, - 0x9f, 0x9d, 0x81, 0x07, 0xb6, 0xeb, 0xee, 0xce, 0xee, 0xf5, 0xb9, 0xaa, 0xdd, 0x3c, 0xb5, 0x6d, - 0x6f, 0xdb, 0xfe, 0xd1, 0x27, 0xfe, 0x46, 0xbe, 0x90, 0x4f, 0xec, 0xf8, 0xb3, 0xdf, 0x1b, 0x9d, - 0x88, 0x3c, 0x2b, 0xcd, 0x96, 0x61, 0x8c, 0x31, 0x57, 0xc8, 0xf9, 0x0b, 0x7d, 0x8b, 0xd0, 0xf7, - 0xdd, 0xc3, 0x4a, 0x7f, 0xe9, 0xfb, 0x64, 0xb9, 0x36, 0x46, 0x19, 0x14, 0xd3, 0xe8, 0x8b, 0x46, - 0xd6, 0x80, 0x23, 0x82, 0x3c, 0x9a, 0x9a, 0xa8, 0x1d, 0x21, 0xf1, 0x5b, 0x4c, 0xe2, 0x58, 0x40, - 0xe2, 0x3a, 0x83, 0x66, 0x0b, 0x30, 0x74, 0x10, 0x59, 0x7f, 0xc7, 0x64, 0x0d, 0xa2, 0xa0, 0x90, - 0x2b, 0x30, 0x42, 0x84, 0x54, 0x77, 0x1d, 0xd7, 0x6e, 0x92, 0xba, 0xb7, 0xbf, 0x98, 0x6f, 0x7f, - 0x9f, 0xe6, 0xca, 0x30, 0x86, 0x15, 0x3c, 0x54, 0x36, 0x0b, 0xe4, 0xc8, 0xa9, 0x86, 0xaa, 0x8d, - 0x08, 0x09, 0x37, 0x98, 0x22, 0x1e, 0x7f, 0xf6, 0x3d, 0x70, 0x18, 0x7f, 0x26, 0x65, 0x29, 0xa8, - 0x49, 0xf4, 0x86, 0x57, 0xfa, 0x3b, 0x1f, 0xa4, 0xe9, 0x38, 0xe6, 0x09, 0x08, 0xe8, 0x14, 0xf0, - 0xe2, 0x36, 0x72, 0x5d, 0xd4, 0x76, 0x2a, 0x66, 0x23, 0x4c, 0xbd, 0xc0, 0x8e, 0x41, 0xfa, 0xe3, - 0xaf, 0x8a, 0x5e, 0xbc, 0x42, 0x91, 0xb9, 0x46, 0x23, 0xbb, 0x09, 0x47, 0x43, 0xa2, 0x22, 0x86, - 0xcc, 0x4f, 0x30, 0x99, 0x87, 0x3b, 0x22, 0x03, 0x8b, 0x5d, 0x03, 0x3e, 0xee, 0xf9, 0x32, 0x86, - 0xcc, 0x3f, 0x60, 0x32, 0x75, 0x86, 0xe5, 0x2e, 0xc5, 0x12, 0xaf, 0xc2, 0xe8, 0x93, 0xa8, 0x7d, - 0xdd, 0x76, 0xd8, 0x2e, 0x4d, 0x0c, 0x71, 0x9f, 0x64, 0xe2, 0x46, 0x18, 0x90, 0x6c, 0xdb, 0x60, - 0x59, 0x17, 0x21, 0xb5, 0x65, 0x56, 0x51, 0x0c, 0x11, 0x9f, 0x62, 0x22, 0x0e, 0x61, 0x7e, 0x0c, - 0xcd, 0xc1, 0xe0, 0xb6, 0xcd, 0x56, 0xa6, 0x68, 0xf8, 0x73, 0x0c, 0x3e, 0xc0, 0x31, 0x4c, 0x44, - 0xcb, 0x6e, 0xed, 0x36, 0xf0, 0xb2, 0x15, 0x2d, 0xe2, 0xd3, 0x5c, 0x04, 0xc7, 0x30, 0x11, 0x07, - 0x30, 0xeb, 0xf3, 0x5c, 0x84, 0x13, 0xb0, 0xe7, 0xc3, 0x30, 0x60, 0x5b, 0x8d, 0x3d, 0xdb, 0x8a, - 0xa3, 0xc4, 0x67, 0x98, 0x04, 0x60, 0x10, 0x2c, 0xe0, 0x12, 0xf4, 0xc7, 0x75, 0xc4, 0x67, 0x5f, - 0xe5, 0xe9, 0xc1, 0x3d, 0x70, 0x05, 0x46, 0x78, 0x81, 0xaa, 0xdb, 0x56, 0x0c, 0x11, 0x7f, 0xcc, - 0x44, 0x0c, 0x07, 0x60, 0x6c, 0x1a, 0x2e, 0x72, 0xdc, 0x6d, 0x14, 0x47, 0xc8, 0xe7, 0xf8, 0x34, - 0x18, 0x84, 0x99, 0xf2, 0x3a, 0xb2, 0xaa, 0x3b, 0xf1, 0x24, 0xbc, 0xc0, 0x4d, 0xc9, 0x31, 0x58, - 0x44, 0x01, 0x86, 0x9a, 0x66, 0xdb, 0xd9, 0x31, 0x1b, 0xb1, 0xdc, 0xf1, 0x79, 0x26, 0x63, 0xd0, - 0x03, 0x31, 0x8b, 0xec, 0x5a, 0x07, 0x11, 0xf3, 0x05, 0x6e, 0x91, 0x00, 0x8c, 0xa5, 0x9e, 0xe3, - 0x92, 0x2d, 0xad, 0x83, 0x48, 0xfb, 0x13, 0x9e, 0x7a, 0x14, 0xbb, 0x12, 0x94, 0x78, 0x09, 0xfa, - 0x9d, 0xfa, 0x33, 0xb1, 0xc4, 0xfc, 0x29, 0xf7, 0x34, 0x01, 0x60, 0xf0, 0x35, 0xb8, 0x23, 0x74, - 0x99, 0x88, 0x21, 0xec, 0xcf, 0x98, 0xb0, 0xf1, 0x90, 0xa5, 0x82, 0x95, 0x84, 0x83, 0x8a, 0xfc, - 0x73, 0x5e, 0x12, 0x90, 0x24, 0x6b, 0x0d, 0xbf, 0x2b, 0x38, 0xe6, 0xd6, 0xc1, 0xac, 0xf6, 0x17, - 0xdc, 0x6a, 0x14, 0x2b, 0x58, 0x6d, 0x03, 0xc6, 0x99, 0xc4, 0x83, 0xf9, 0xf5, 0x8b, 0xbc, 0xb0, - 0x52, 0xf4, 0xa6, 0xe8, 0xdd, 0xf7, 0xc1, 0x84, 0x67, 0x4e, 0xde, 0x94, 0x3a, 0x95, 0xa6, 0xd9, - 0x8a, 0x21, 0xf9, 0x4b, 0x4c, 0x32, 0xaf, 0xf8, 0x5e, 0x57, 0xeb, 0xac, 0x98, 0x2d, 0x2c, 0xfc, - 0x31, 0x48, 0x73, 0xe1, 0xbb, 0x56, 0x1b, 0x55, 0xed, 0x6d, 0xab, 0xfe, 0x0c, 0xaa, 0xc5, 0x10, - 0xfd, 0x97, 0x92, 0xab, 0x36, 0x03, 0x70, 0x2c, 0x79, 0x09, 0x34, 0xaf, 0x57, 0xa9, 0xd4, 0x9b, - 0x2d, 0xbb, 0xed, 0x46, 0x48, 0xfc, 0x32, 0xf7, 0x94, 0x87, 0x5b, 0x22, 0xb0, 0x6c, 0x09, 0x86, - 0xc9, 0xd7, 0xb8, 0x21, 0xf9, 0x15, 0x26, 0x68, 0xc8, 0x47, 0xb1, 0xc2, 0x51, 0xb5, 0x9b, 0x2d, - 0xb3, 0x1d, 0xa7, 0xfe, 0xfd, 0x15, 0x2f, 0x1c, 0x0c, 0xc2, 0x0a, 0x87, 0xbb, 0xd7, 0x42, 0x78, - 0xb5, 0x8f, 0x21, 0xe1, 0xab, 0xbc, 0x70, 0x70, 0x0c, 0x13, 0xc1, 0x1b, 0x86, 0x18, 0x22, 0xfe, - 0x9a, 0x8b, 0xe0, 0x18, 0x2c, 0xe2, 0xdd, 0xfe, 0x42, 0xdb, 0x46, 0xdb, 0x75, 0xc7, 0x6d, 0xd3, - 0x56, 0x78, 0x7f, 0x51, 0x5f, 0x7b, 0x55, 0x6c, 0xc2, 0x8c, 0x00, 0x14, 0x57, 0x22, 0xb6, 0x85, - 0x4a, 0xde, 0x94, 0xa2, 0x15, 0xfb, 0x3a, 0xaf, 0x44, 0x01, 0x18, 0xcd, 0xcf, 0x11, 0xa9, 0x57, - 0xd1, 0xa3, 0x2e, 0xc2, 0xa4, 0x7f, 0xf1, 0x35, 0x26, 0x4b, 0x6c, 0x55, 0xb2, 0xcb, 0x38, 0x80, - 0xc4, 0x86, 0x22, 0x5a, 0xd8, 0x07, 0x5f, 0xf3, 0x62, 0x48, 0xe8, 0x27, 0xb2, 0x97, 0x61, 0x48, - 0x68, 0x26, 0xa2, 0x45, 0xfd, 0x12, 0x13, 0x35, 0x18, 0xec, 0x25, 0xb2, 0x67, 0x21, 0x89, 0x1b, - 0x83, 0x68, 0xf8, 0x2f, 0x33, 0x38, 0x61, 0xcf, 0x3e, 0x08, 0x29, 0xde, 0x10, 0x44, 0x43, 0x3f, - 0xc4, 0xa0, 0x1e, 0x04, 0xc3, 0x79, 0x33, 0x10, 0x0d, 0xff, 0x15, 0x0e, 0xe7, 0x10, 0x0c, 0x8f, - 0x6f, 0xc2, 0x17, 0x7f, 0x2d, 0xc9, 0x0a, 0x3a, 0xb7, 0xdd, 0x25, 0x38, 0xc4, 0xba, 0x80, 0x68, - 0xf4, 0x47, 0xd8, 0xc3, 0x39, 0x22, 0x7b, 0x1e, 0x7a, 0x63, 0x1a, 0xfc, 0xd7, 0x19, 0x94, 0xf2, - 0x67, 0x0b, 0x30, 0x10, 0x58, 0xf9, 0xa3, 0xe1, 0xbf, 0xc1, 0xe0, 0x41, 0x14, 0x56, 0x9d, 0xad, - 0xfc, 0xd1, 0x02, 0x7e, 0x93, 0xab, 0xce, 0x10, 0xd8, 0x6c, 0x7c, 0xd1, 0x8f, 0x46, 0xff, 0x16, - 0xb7, 0x3a, 0x87, 0x64, 0x1f, 0x86, 0x7e, 0xaf, 0x90, 0x47, 0xe3, 0x7f, 0x9b, 0xe1, 0x7d, 0x0c, - 0xb6, 0x40, 0x60, 0x21, 0x89, 0x16, 0xf1, 0x3b, 0xdc, 0x02, 0x01, 0x14, 0x4e, 0x23, 0xb9, 0x39, - 0x88, 0x96, 0xf4, 0x51, 0x9e, 0x46, 0x52, 0x6f, 0x80, 0xbd, 0x49, 0xea, 0x69, 0xb4, 0x88, 0xdf, - 0xe5, 0xde, 0x24, 0xfc, 0x58, 0x0d, 0x79, 0xb5, 0x8d, 0x96, 0xf1, 0xfb, 0x5c, 0x0d, 0x69, 0xb1, - 0xcd, 0xae, 0x81, 0xde, 0xb9, 0xd2, 0x46, 0xcb, 0xfb, 0x18, 0x93, 0x37, 0xda, 0xb1, 0xd0, 0x66, - 0x1f, 0x85, 0xf1, 0xf0, 0x55, 0x36, 0x5a, 0xea, 0xc7, 0x5f, 0x93, 0xde, 0x8b, 0x82, 0x8b, 0x6c, - 0x76, 0xc3, 0x2f, 0xd7, 0xc1, 0x15, 0x36, 0x5a, 0xec, 0x27, 0x5e, 0x13, 0x2b, 0x76, 0x70, 0x81, - 0xcd, 0xe6, 0x00, 0xfc, 0xc5, 0x2d, 0x5a, 0xd6, 0x27, 0x99, 0xac, 0x00, 0x08, 0xa7, 0x06, 0x5b, - 0xdb, 0xa2, 0xf1, 0x9f, 0xe2, 0xa9, 0xc1, 0x10, 0x38, 0x35, 0xf8, 0xb2, 0x16, 0x8d, 0x7e, 0x8e, - 0xa7, 0x06, 0x87, 0xe0, 0xc8, 0x0e, 0xac, 0x1c, 0xd1, 0x12, 0x3e, 0xc3, 0x23, 0x3b, 0x80, 0xca, - 0x5e, 0x82, 0x94, 0xb5, 0xdb, 0x68, 0xe0, 0x00, 0xd5, 0xf7, 0xbf, 0x20, 0x96, 0xfe, 0xd7, 0xd7, - 0x99, 0x06, 0x1c, 0x90, 0x3d, 0x0b, 0xbd, 0xa8, 0x79, 0x1d, 0xd5, 0xa2, 0x90, 0xff, 0xf6, 0x3a, - 0x2f, 0x4a, 0x98, 0x3b, 0xfb, 0x30, 0x00, 0x7d, 0xb5, 0x27, 0xc7, 0x56, 0x11, 0xd8, 0x7f, 0x7f, - 0x9d, 0x5d, 0xdd, 0xf0, 0x21, 0xbe, 0x00, 0x7a, 0x11, 0x64, 0x7f, 0x01, 0xaf, 0x8a, 0x02, 0xc8, - 0xac, 0x2f, 0xc2, 0xa1, 0xc7, 0x1d, 0xdb, 0x72, 0xcd, 0xed, 0x28, 0xf4, 0x7f, 0x30, 0x34, 0xe7, - 0xc7, 0x06, 0x6b, 0xda, 0x6d, 0xe4, 0x9a, 0xdb, 0x4e, 0x14, 0xf6, 0x3f, 0x19, 0xd6, 0x03, 0x60, - 0x70, 0xd5, 0x74, 0xdc, 0x38, 0xf3, 0xfe, 0x21, 0x07, 0x73, 0x00, 0x56, 0x1a, 0x7f, 0x7e, 0x02, - 0xed, 0x45, 0x61, 0x7f, 0xc4, 0x95, 0x66, 0xfc, 0xd9, 0x07, 0xa1, 0x1f, 0x7f, 0xa4, 0xf7, 0xb1, - 0x22, 0xc0, 0xff, 0xc5, 0xc0, 0x3e, 0x02, 0x3f, 0xd9, 0x71, 0x6b, 0x6e, 0x3d, 0xda, 0xd8, 0x3f, - 0x66, 0x9e, 0xe6, 0xfc, 0xd9, 0x1c, 0x0c, 0x38, 0x6e, 0xad, 0xb6, 0xcb, 0xfa, 0xab, 0x08, 0xf8, - 0x7f, 0xbf, 0xee, 0xbd, 0x72, 0x7b, 0x98, 0x7c, 0x29, 0x7c, 0xf7, 0x10, 0xae, 0xd8, 0x57, 0x6c, - 0xba, 0x6f, 0xf8, 0xde, 0x4c, 0xf4, 0x06, 0x20, 0x7c, 0xbb, 0x01, 0x77, 0x54, 0xed, 0xe6, 0x75, - 0xdb, 0x39, 0x75, 0xdd, 0x76, 0x77, 0x4e, 0xb9, 0x3b, 0x08, 0xaf, 0x51, 0x6c, 0x4f, 0x30, 0x89, - 0x3f, 0x4f, 0x1c, 0x6c, 0x23, 0x91, 0x1c, 0x13, 0x97, 0xeb, 0x58, 0xfb, 0x32, 0xd9, 0xa9, 0xd7, - 0x8f, 0x41, 0x1f, 0x99, 0xcf, 0x69, 0x72, 0x1a, 0xa6, 0xe4, 0x93, 0x37, 0x5e, 0x9e, 0xea, 0x31, - 0xd8, 0x98, 0x47, 0x5d, 0x20, 0x5b, 0xa9, 0x09, 0x81, 0xba, 0xe0, 0x51, 0xcf, 0xd0, 0xdd, 0x54, - 0x81, 0x7a, 0xc6, 0xa3, 0x2e, 0x92, 0x7d, 0x55, 0x55, 0xa0, 0x2e, 0x7a, 0xd4, 0xb3, 0xe4, 0xec, - 0x60, 0x48, 0xa0, 0x9e, 0xf5, 0xa8, 0xe7, 0xc8, 0x89, 0x41, 0x52, 0xa0, 0x9e, 0xf3, 0xa8, 0xe7, - 0xc9, 0x61, 0xc1, 0xa8, 0x40, 0x3d, 0xef, 0x51, 0x2f, 0x90, 0x43, 0x02, 0x5d, 0xa0, 0x5e, 0xf0, - 0xa8, 0x17, 0xc9, 0x0d, 0x9c, 0x43, 0x02, 0xf5, 0xa2, 0x3e, 0x09, 0x87, 0xe8, 0xcc, 0xe7, 0xc9, - 0x89, 0xf2, 0x08, 0x23, 0xf3, 0x41, 0x9f, 0x7e, 0x9a, 0xdc, 0xb6, 0xe9, 0x13, 0xe9, 0xa7, 0x7d, - 0xfa, 0x02, 0xb9, 0xf8, 0xaf, 0x89, 0xf4, 0x05, 0x9f, 0x7e, 0x26, 0x3d, 0x44, 0x6e, 0x1c, 0x09, - 0xf4, 0x33, 0x3e, 0x7d, 0x31, 0x3d, 0x8c, 0x43, 0x5a, 0xa4, 0x2f, 0xfa, 0xf4, 0xb3, 0xe9, 0x91, - 0x69, 0x65, 0x66, 0x50, 0xa4, 0x9f, 0xcd, 0x7c, 0x80, 0xb8, 0xd7, 0xf2, 0xdd, 0x3b, 0x2e, 0xba, - 0xd7, 0x73, 0xec, 0xb8, 0xe8, 0x58, 0xcf, 0xa5, 0xe3, 0xa2, 0x4b, 0x3d, 0x67, 0x8e, 0x8b, 0xce, - 0xf4, 0xdc, 0x38, 0x2e, 0xba, 0xd1, 0x73, 0xe0, 0xb8, 0xe8, 0x40, 0xcf, 0x75, 0xe3, 0xa2, 0xeb, - 0x3c, 0xa7, 0x8d, 0x8b, 0x4e, 0xf3, 0xdc, 0x35, 0x2e, 0xba, 0xcb, 0x73, 0x54, 0x5a, 0x72, 0x94, - 0xef, 0xa2, 0xb4, 0xe4, 0x22, 0xdf, 0x39, 0x69, 0xc9, 0x39, 0xbe, 0x5b, 0xd2, 0x92, 0x5b, 0x7c, - 0x87, 0xa4, 0x25, 0x87, 0xf8, 0xae, 0x48, 0x4b, 0xae, 0xf0, 0x9d, 0xc0, 0x72, 0xcc, 0x40, 0xad, - 0x90, 0x1c, 0x53, 0xf7, 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, 0xcd, 0x31, 0x75, 0xdf, 0x1c, - 0x53, 0xf7, 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, - 0xcf, 0x31, 0x35, 0x22, 0xc7, 0xd4, 0x88, 0x1c, 0x53, 0x23, 0x72, 0x4c, 0x8d, 0xc8, 0x31, 0x35, - 0x22, 0xc7, 0xd4, 0xae, 0x39, 0xe6, 0xbb, 0x77, 0x5c, 0x74, 0x6f, 0x68, 0x8e, 0xa9, 0x5d, 0x72, - 0x4c, 0xed, 0x92, 0x63, 0x6a, 0x97, 0x1c, 0x53, 0xbb, 0xe4, 0x98, 0xda, 0x25, 0xc7, 0xd4, 0x2e, - 0x39, 0xa6, 0x76, 0xc9, 0x31, 0xb5, 0x5b, 0x8e, 0xa9, 0x5d, 0x73, 0x4c, 0xed, 0x9a, 0x63, 0x6a, - 0xd7, 0x1c, 0x53, 0xbb, 0xe6, 0x98, 0xda, 0x35, 0xc7, 0xd4, 0x60, 0x8e, 0xfd, 0x8d, 0x0a, 0x3a, - 0xcd, 0xb1, 0x35, 0x72, 0x27, 0x89, 0xb9, 0x62, 0x52, 0xca, 0xb4, 0x3e, 0xec, 0x3a, 0xcd, 0x77, - 0xc9, 0xa4, 0x94, 0x6b, 0x22, 0x7d, 0xc1, 0xa3, 0xf3, 0x6c, 0x13, 0xe9, 0x67, 0x3c, 0x3a, 0xcf, - 0x37, 0x91, 0xbe, 0xe8, 0xd1, 0x79, 0xc6, 0x89, 0xf4, 0xb3, 0x1e, 0x9d, 0xe7, 0x9c, 0x48, 0x3f, - 0xe7, 0xd1, 0x79, 0xd6, 0x89, 0xf4, 0xf3, 0x1e, 0x9d, 0xe7, 0x9d, 0x48, 0xbf, 0xe0, 0xd1, 0x79, - 0xe6, 0x89, 0xf4, 0x8b, 0xfa, 0xb4, 0x9c, 0x7b, 0x9c, 0xc1, 0x73, 0xed, 0xb4, 0x9c, 0x7d, 0x12, - 0xc7, 0x69, 0x9f, 0x83, 0xe7, 0x9f, 0xc4, 0xb1, 0xe0, 0x73, 0xf0, 0x0c, 0x94, 0x38, 0xce, 0x64, - 0x3e, 0x4c, 0xdc, 0x67, 0xc9, 0xee, 0x9b, 0x90, 0xdc, 0x97, 0x08, 0xb8, 0x6e, 0x42, 0x72, 0x5d, - 0x22, 0xe0, 0xb6, 0x09, 0xc9, 0x6d, 0x89, 0x80, 0xcb, 0x26, 0x24, 0x97, 0x25, 0x02, 0xee, 0x9a, - 0x90, 0xdc, 0x95, 0x08, 0xb8, 0x6a, 0x42, 0x72, 0x55, 0x22, 0xe0, 0xa6, 0x09, 0xc9, 0x4d, 0x89, - 0x80, 0x8b, 0x26, 0x24, 0x17, 0x25, 0x02, 0xee, 0x99, 0x90, 0xdc, 0x93, 0x08, 0xb8, 0xe6, 0x98, - 0xec, 0x9a, 0x44, 0xd0, 0x2d, 0xc7, 0x64, 0xb7, 0x24, 0x82, 0x2e, 0x39, 0x26, 0xbb, 0x24, 0x11, - 0x74, 0xc7, 0x31, 0xd9, 0x1d, 0x89, 0xa0, 0x2b, 0x7e, 0x9a, 0xe0, 0x1d, 0xe1, 0xba, 0xdb, 0xde, - 0xad, 0xba, 0xb7, 0xd5, 0x11, 0xce, 0x0b, 0xed, 0xc3, 0xc0, 0x82, 0x3e, 0x47, 0x1a, 0xd6, 0x60, - 0xc7, 0x29, 0xad, 0x60, 0xf3, 0x42, 0x63, 0x11, 0x40, 0x58, 0xe1, 0x88, 0xc5, 0xdb, 0xea, 0x0d, - 0xe7, 0x85, 0x36, 0x23, 0x5a, 0xbf, 0x0b, 0x6f, 0x79, 0xc7, 0xf6, 0x62, 0x82, 0x77, 0x6c, 0xcc, - 0xfc, 0x07, 0xed, 0xd8, 0x66, 0xa3, 0x4d, 0xee, 0x19, 0x7b, 0x36, 0xda, 0xd8, 0x1d, 0xab, 0x4e, - 0xdc, 0x0e, 0x6e, 0x36, 0xda, 0xb4, 0x9e, 0x51, 0xdf, 0xdc, 0x7e, 0x8b, 0x45, 0xb0, 0x81, 0x5a, - 0x21, 0x11, 0x7c, 0xd0, 0x7e, 0x6b, 0x5e, 0x28, 0x25, 0x07, 0x8d, 0x60, 0xf5, 0xc0, 0x11, 0x7c, - 0xd0, 0xce, 0x6b, 0x5e, 0x28, 0x2f, 0x07, 0x8e, 0xe0, 0xb7, 0xa0, 0x1f, 0x62, 0x11, 0xec, 0x9b, - 0xff, 0xa0, 0xfd, 0xd0, 0x6c, 0xb4, 0xc9, 0x43, 0x23, 0x58, 0x3d, 0x40, 0x04, 0xc7, 0xe9, 0x8f, - 0x66, 0xa3, 0x4d, 0x1b, 0x1e, 0xc1, 0xb7, 0xdd, 0xcd, 0x7c, 0x5a, 0x81, 0xd1, 0x72, 0xbd, 0x56, - 0x6a, 0x5e, 0x47, 0xb5, 0x1a, 0xaa, 0x31, 0x3b, 0xce, 0x0b, 0x95, 0xa0, 0x8b, 0xab, 0x5f, 0x7a, - 0x79, 0xca, 0xb7, 0xf0, 0x59, 0x48, 0x51, 0x9b, 0xce, 0xcf, 0xa7, 0x6f, 0x28, 0x11, 0x15, 0xce, - 0x63, 0xd5, 0x8f, 0x73, 0xd8, 0xe9, 0xf9, 0xf4, 0x3f, 0x2a, 0x81, 0x2a, 0xe7, 0x0d, 0x67, 0x3e, - 0x4a, 0x34, 0xb4, 0x6e, 0x5b, 0xc3, 0x53, 0xb1, 0x34, 0x0c, 0xe8, 0x76, 0x67, 0x87, 0x6e, 0x01, - 0xad, 0x76, 0x61, 0xa4, 0x5c, 0xaf, 0x95, 0xc9, 0x9f, 0x9c, 0xc7, 0x51, 0x89, 0xf2, 0x48, 0xf5, - 0x60, 0x5e, 0x08, 0xcb, 0x20, 0xc2, 0x0b, 0x69, 0xb1, 0x46, 0x64, 0xea, 0xf8, 0xb1, 0x96, 0xf0, - 0xd8, 0xd9, 0x6e, 0x8f, 0xf5, 0x2b, 0xbb, 0xf7, 0xc0, 0xd9, 0x6e, 0x0f, 0xf4, 0x73, 0xc8, 0x7b, - 0xd4, 0xd3, 0x7c, 0x71, 0xa6, 0x37, 0x83, 0xf4, 0x63, 0x90, 0x58, 0xa2, 0x17, 0x97, 0x07, 0xf3, - 0x83, 0x58, 0xa9, 0xef, 0xbe, 0x3c, 0x95, 0xdc, 0xdc, 0xad, 0xd7, 0x8c, 0xc4, 0x52, 0x4d, 0xbf, - 0x0a, 0xbd, 0xef, 0x61, 0x7f, 0xf8, 0x88, 0x19, 0x16, 0x19, 0xc3, 0xfd, 0x5d, 0xf7, 0x88, 0xf0, - 0x83, 0x4f, 0xd1, 0x5d, 0xc6, 0xb9, 0xcd, 0xba, 0xe5, 0x9e, 0x5e, 0xb8, 0x60, 0x50, 0x11, 0x99, - 0xff, 0x0b, 0x40, 0x9f, 0x59, 0x34, 0x9d, 0x1d, 0xbd, 0xcc, 0x25, 0xd3, 0x47, 0x5f, 0xf8, 0xee, - 0xcb, 0x53, 0x8b, 0x71, 0xa4, 0x3e, 0x50, 0x33, 0x9d, 0x9d, 0x07, 0xdc, 0xbd, 0x16, 0x9a, 0xcb, - 0xef, 0xb9, 0xc8, 0xe1, 0xd2, 0x5b, 0x7c, 0xd5, 0x63, 0xf3, 0x4a, 0x07, 0xe6, 0x95, 0x12, 0xe6, - 0x74, 0x59, 0x9c, 0xd3, 0xfc, 0x1b, 0x9d, 0xcf, 0xd3, 0x7c, 0x91, 0x90, 0x2c, 0xa9, 0x46, 0x59, - 0x52, 0xbd, 0x5d, 0x4b, 0xb6, 0x78, 0x7d, 0x94, 0xe6, 0xaa, 0xee, 0x37, 0x57, 0xf5, 0x76, 0xe6, - 0xfa, 0x3f, 0x34, 0x5b, 0xbd, 0x7c, 0xda, 0xb4, 0xe8, 0xa5, 0xc9, 0x9f, 0xaf, 0xbd, 0xa0, 0x37, - 0xb5, 0x0b, 0xc8, 0x26, 0x6f, 0x3c, 0x3f, 0xa5, 0x64, 0x3e, 0x9d, 0xe0, 0x33, 0xa7, 0x89, 0xf4, - 0xc6, 0x66, 0xfe, 0xf3, 0xd2, 0x53, 0xbd, 0x15, 0x16, 0x7a, 0x4e, 0x81, 0xf1, 0x8e, 0x4a, 0x4e, - 0xcd, 0xf4, 0xe6, 0x96, 0x73, 0xeb, 0xa0, 0xe5, 0x9c, 0x29, 0xf8, 0x15, 0x05, 0x0e, 0x4b, 0xe5, - 0x95, 0xaa, 0x77, 0x4a, 0x52, 0xef, 0x68, 0xe7, 0x93, 0x08, 0x63, 0x40, 0xbb, 0xa0, 0x7b, 0x25, - 0x40, 0x40, 0xb2, 0xe7, 0xf7, 0x45, 0xc9, 0xef, 0xc7, 0x3c, 0x40, 0x88, 0xb9, 0x78, 0x04, 0x30, - 0xb5, 0x6d, 0x48, 0x6e, 0xb4, 0x11, 0xd2, 0x27, 0x21, 0xb1, 0xda, 0x66, 0x1a, 0x0e, 0x53, 0xfc, - 0x6a, 0x3b, 0xdf, 0x36, 0xad, 0xea, 0x8e, 0x91, 0x58, 0x6d, 0xeb, 0xc7, 0x41, 0xcd, 0xb1, 0x3f, - 0xba, 0x1e, 0x58, 0x18, 0xa1, 0x0c, 0x39, 0xab, 0xc6, 0x38, 0x30, 0x4d, 0x9f, 0x84, 0xe4, 0x32, - 0x32, 0xb7, 0x98, 0x12, 0x40, 0x79, 0xf0, 0x88, 0x41, 0xc6, 0xd9, 0x03, 0x1f, 0x83, 0x14, 0x17, - 0xac, 0x9f, 0xc0, 0x88, 0x2d, 0x97, 0x3d, 0x96, 0x21, 0xb0, 0x3a, 0x6c, 0xe5, 0x22, 0x54, 0xfd, - 0x24, 0xf4, 0x1a, 0xf5, 0xed, 0x1d, 0x97, 0x3d, 0xbc, 0x93, 0x8d, 0x92, 0x33, 0xd7, 0xa0, 0xdf, - 0xd3, 0xe8, 0x4d, 0x16, 0x5d, 0xa4, 0x53, 0xd3, 0x27, 0x82, 0xeb, 0x09, 0xdf, 0xb7, 0xa4, 0x43, - 0xfa, 0x34, 0xa4, 0xd6, 0xdd, 0xb6, 0x5f, 0xf4, 0x79, 0x47, 0xea, 0x8d, 0x66, 0x3e, 0xa0, 0x40, - 0xaa, 0x88, 0x50, 0x8b, 0x18, 0xfc, 0x1e, 0x48, 0x16, 0xed, 0xa7, 0x2c, 0xa6, 0xe0, 0x28, 0xb3, - 0x28, 0x26, 0x33, 0x9b, 0x12, 0xb2, 0x7e, 0x4f, 0xd0, 0xee, 0x63, 0x9e, 0xdd, 0x03, 0x7c, 0xc4, - 0xf6, 0x19, 0xc1, 0xf6, 0xcc, 0x81, 0x98, 0xa9, 0xc3, 0xfe, 0xe7, 0x61, 0x20, 0xf0, 0x14, 0x7d, - 0x86, 0xa9, 0x91, 0x90, 0x81, 0x41, 0x5b, 0x61, 0x8e, 0x0c, 0x82, 0x21, 0xe1, 0xc1, 0x18, 0x1a, - 0x30, 0x71, 0x17, 0x28, 0x31, 0xf3, 0xac, 0x68, 0xe6, 0x70, 0x56, 0x66, 0xea, 0x79, 0x6a, 0x23, - 0x62, 0xee, 0x13, 0x34, 0x38, 0xbb, 0x3b, 0x11, 0x7f, 0xce, 0xf4, 0x82, 0x5a, 0xae, 0x37, 0x32, - 0x0f, 0x02, 0xd0, 0x94, 0x2f, 0x59, 0xbb, 0x4d, 0x29, 0xeb, 0x86, 0xb9, 0x81, 0x37, 0x76, 0xd0, - 0x06, 0x72, 0x08, 0x8b, 0xd8, 0x4f, 0xe1, 0x02, 0x03, 0x34, 0xc5, 0x08, 0xfe, 0xbe, 0x48, 0x7c, - 0x68, 0x27, 0x86, 0x59, 0xd3, 0x94, 0xf5, 0x1a, 0x72, 0x73, 0x96, 0xed, 0xee, 0xa0, 0xb6, 0x84, - 0x58, 0xd0, 0xcf, 0x08, 0x09, 0x3b, 0xbc, 0x70, 0xa7, 0x87, 0xe8, 0x0a, 0x3a, 0x93, 0xf9, 0x22, - 0x51, 0x10, 0xb7, 0x02, 0x1d, 0x13, 0x54, 0x63, 0x4c, 0x50, 0x3f, 0x27, 0xf4, 0x6f, 0xfb, 0xa8, - 0x29, 0xbd, 0x5a, 0x5e, 0x14, 0xde, 0x73, 0xf6, 0x57, 0x56, 0x7c, 0xc7, 0xe4, 0x36, 0xe5, 0x2a, - 0xdf, 0x17, 0xa9, 0x72, 0x97, 0xee, 0xf6, 0xa0, 0x36, 0x55, 0xe3, 0xda, 0xf4, 0x1b, 0x5e, 0xc7, - 0x41, 0x7f, 0xd9, 0x82, 0xfc, 0x26, 0x8c, 0x7e, 0x7f, 0xa4, 0xef, 0xb3, 0x4a, 0xc1, 0x53, 0x75, - 0x31, 0xae, 0xfb, 0xb3, 0x89, 0x7c, 0xde, 0x53, 0xf7, 0xfc, 0x01, 0x42, 0x20, 0x9b, 0x28, 0x14, - 0xbc, 0xb2, 0x9d, 0xfa, 0xf0, 0xf3, 0x53, 0xca, 0x0b, 0xcf, 0x4f, 0xf5, 0x64, 0x3e, 0xaf, 0xc0, - 0x28, 0xe3, 0x0c, 0x04, 0xee, 0x03, 0x92, 0xf2, 0x47, 0x78, 0xcd, 0x08, 0xb3, 0xc0, 0xdb, 0x16, - 0xbc, 0xdf, 0x52, 0x20, 0xdd, 0xa1, 0x2b, 0xb7, 0xf7, 0x7c, 0x2c, 0x95, 0xb3, 0x4a, 0xe9, 0x67, - 0x6f, 0xf3, 0x6b, 0xd0, 0xbb, 0x51, 0x6f, 0xa2, 0x36, 0x5e, 0x09, 0xf0, 0x07, 0xaa, 0x32, 0x3f, - 0xcc, 0xa1, 0x43, 0x9c, 0x46, 0x95, 0x13, 0x68, 0x0b, 0x7a, 0x1a, 0x92, 0x45, 0xd3, 0x35, 0x89, - 0x06, 0x83, 0x5e, 0x7d, 0x35, 0x5d, 0x33, 0x73, 0x06, 0x06, 0x57, 0xf6, 0xc8, 0x6d, 0x9c, 0x1a, - 0xb9, 0x24, 0x22, 0x76, 0x7f, 0xbc, 0x5f, 0x3d, 0x3d, 0xdb, 0x9b, 0xaa, 0x69, 0x37, 0x94, 0x6c, - 0x92, 0xe8, 0xf3, 0x24, 0x0c, 0xaf, 0x62, 0xb5, 0x09, 0x4e, 0x80, 0xd1, 0xa7, 0xab, 0xde, 0xe4, - 0xa5, 0xa6, 0x4c, 0xf5, 0x9b, 0xb2, 0x69, 0x50, 0x56, 0xc4, 0xd6, 0x29, 0xa8, 0x87, 0xa1, 0xac, - 0xcc, 0x26, 0x53, 0xc3, 0xda, 0xe8, 0x6c, 0x32, 0x05, 0xda, 0x10, 0x7b, 0xee, 0xdf, 0xab, 0xa0, - 0xd1, 0x56, 0xa7, 0x88, 0xb6, 0xea, 0x56, 0xdd, 0xed, 0xec, 0x57, 0x3d, 0x8d, 0xf5, 0x87, 0xa1, - 0x1f, 0x9b, 0xf4, 0x32, 0xfb, 0x69, 0x38, 0x6c, 0xfa, 0xe3, 0xac, 0x45, 0x91, 0x44, 0xb0, 0x01, - 0x12, 0x3a, 0x3e, 0x46, 0xbf, 0x0c, 0x6a, 0xb9, 0xbc, 0xc2, 0x16, 0xb7, 0xc5, 0x7d, 0xa1, 0xec, - 0x2a, 0x0e, 0xfb, 0xc6, 0xc6, 0x9c, 0x6d, 0x03, 0x0b, 0xd0, 0x17, 0x21, 0x51, 0x5e, 0x61, 0x0d, - 0xef, 0x89, 0x38, 0x62, 0x8c, 0x44, 0x79, 0x65, 0xe2, 0x6f, 0x15, 0x18, 0x12, 0x46, 0xf5, 0x0c, - 0x0c, 0xd2, 0x81, 0xc0, 0x74, 0xfb, 0x0c, 0x61, 0x8c, 0xeb, 0x9c, 0xb8, 0x4d, 0x9d, 0x27, 0x72, - 0x30, 0x22, 0x8d, 0xeb, 0x73, 0xa0, 0x07, 0x87, 0x98, 0x12, 0xf4, 0x67, 0xa9, 0x42, 0x28, 0x99, - 0xbb, 0x00, 0x7c, 0xbb, 0x7a, 0xbf, 0xa6, 0x54, 0x2e, 0xad, 0x6f, 0x94, 0x8a, 0x9a, 0x92, 0xf9, - 0xaa, 0x02, 0x03, 0xac, 0x6d, 0xad, 0xda, 0x2d, 0xa4, 0xe7, 0x41, 0xc9, 0xb1, 0x78, 0x78, 0x63, - 0x7a, 0x2b, 0x39, 0xfd, 0x14, 0x28, 0xf9, 0xf8, 0xae, 0x56, 0xf2, 0xfa, 0x02, 0x28, 0x05, 0xe6, - 0xe0, 0x78, 0x9e, 0x51, 0x0a, 0x99, 0x1f, 0xab, 0x30, 0x16, 0x6c, 0xa3, 0x79, 0x3d, 0x39, 0x2e, - 0xbe, 0x37, 0x65, 0xfb, 0x4f, 0x2f, 0x9c, 0x59, 0x9c, 0xc3, 0xff, 0x78, 0x21, 0x99, 0x11, 0x5f, - 0xa1, 0xb2, 0xe0, 0xb1, 0x9c, 0xee, 0x76, 0x4f, 0x24, 0x9b, 0x0c, 0x48, 0xe8, 0xb8, 0x27, 0x22, - 0x50, 0x3b, 0xee, 0x89, 0x08, 0xd4, 0x8e, 0x7b, 0x22, 0x02, 0xb5, 0xe3, 0x2c, 0x40, 0xa0, 0x76, - 0xdc, 0x13, 0x11, 0xa8, 0x1d, 0xf7, 0x44, 0x04, 0x6a, 0xe7, 0x3d, 0x11, 0x46, 0xee, 0x7a, 0x4f, - 0x44, 0xa4, 0x77, 0xde, 0x13, 0x11, 0xe9, 0x9d, 0xf7, 0x44, 0xb2, 0x49, 0xb7, 0xbd, 0x8b, 0xba, - 0x9f, 0x3a, 0x88, 0xf8, 0xfd, 0x5e, 0x02, 0xfd, 0x0a, 0xbc, 0x0a, 0x23, 0x74, 0x43, 0xa2, 0x60, - 0x5b, 0xae, 0x59, 0xb7, 0x50, 0x5b, 0x7f, 0x27, 0x0c, 0xd2, 0x21, 0xfa, 0x9a, 0x13, 0xf6, 0x1a, - 0x48, 0xe9, 0xac, 0xde, 0x0a, 0xdc, 0x99, 0x9f, 0x26, 0x61, 0x9c, 0x0e, 0x94, 0xcd, 0x26, 0x12, - 0x6e, 0x19, 0x9d, 0x94, 0xce, 0x94, 0x86, 0x31, 0xfc, 0xd6, 0xcb, 0x53, 0x74, 0x34, 0xe7, 0x45, - 0xd3, 0x49, 0xe9, 0x74, 0x49, 0xe4, 0xf3, 0x17, 0xa0, 0x93, 0xd2, 0xcd, 0x23, 0x91, 0xcf, 0x5b, - 0x6f, 0x3c, 0x3e, 0x7e, 0x07, 0x49, 0xe4, 0x2b, 0x7a, 0x51, 0x76, 0x52, 0xba, 0x8d, 0x24, 0xf2, - 0x95, 0xbc, 0x78, 0x3b, 0x29, 0x9d, 0x3d, 0x89, 0x7c, 0x97, 0xbd, 0xc8, 0x3b, 0x29, 0x9d, 0x42, - 0x89, 0x7c, 0x57, 0xbc, 0x18, 0x3c, 0x29, 0xdd, 0x55, 0x12, 0xf9, 0x1e, 0xf1, 0xa2, 0xf1, 0xa4, - 0x74, 0x6b, 0x49, 0xe4, 0x5b, 0xf2, 0xe2, 0x72, 0x46, 0xbe, 0xbf, 0x24, 0x32, 0x5e, 0xf5, 0x23, - 0x74, 0x46, 0xbe, 0xc9, 0x24, 0x72, 0xbe, 0xcb, 0x8f, 0xd5, 0x19, 0xf9, 0x4e, 0x93, 0xc8, 0xb9, - 0xec, 0x47, 0xed, 0x8c, 0x7c, 0x56, 0x26, 0x72, 0xae, 0xf8, 0xf1, 0x3b, 0x23, 0x9f, 0x9a, 0x89, - 0x9c, 0x65, 0x3f, 0x92, 0x67, 0xe4, 0xf3, 0x33, 0x91, 0x73, 0xd5, 0xdf, 0x44, 0xff, 0xa6, 0x14, - 0x7e, 0x81, 0x5b, 0x50, 0x19, 0x29, 0xfc, 0x20, 0x24, 0xf4, 0xa4, 0x42, 0x16, 0xe0, 0xf1, 0xc3, - 0x2e, 0x23, 0x85, 0x1d, 0x84, 0x84, 0x5c, 0x46, 0x0a, 0x39, 0x08, 0x09, 0xb7, 0x8c, 0x14, 0x6e, - 0x10, 0x12, 0x6a, 0x19, 0x29, 0xd4, 0x20, 0x24, 0xcc, 0x32, 0x52, 0x98, 0x41, 0x48, 0x88, 0x65, - 0xa4, 0x10, 0x83, 0x90, 0xf0, 0xca, 0x48, 0xe1, 0x05, 0x21, 0xa1, 0x75, 0x42, 0x0e, 0x2d, 0x08, - 0x0b, 0xab, 0x13, 0x72, 0x58, 0x41, 0x58, 0x48, 0xdd, 0x2d, 0x87, 0x54, 0xff, 0xad, 0x97, 0xa7, - 0x7a, 0xf1, 0x50, 0x20, 0x9a, 0x4e, 0xc8, 0xd1, 0x04, 0x61, 0x91, 0x74, 0x42, 0x8e, 0x24, 0x08, - 0x8b, 0xa2, 0x13, 0x72, 0x14, 0x41, 0x58, 0x04, 0xbd, 0x28, 0x47, 0x90, 0x7f, 0xc7, 0x27, 0x23, - 0x1d, 0x29, 0x46, 0x45, 0x90, 0x1a, 0x23, 0x82, 0xd4, 0x18, 0x11, 0xa4, 0xc6, 0x88, 0x20, 0x35, - 0x46, 0x04, 0xa9, 0x31, 0x22, 0x48, 0x8d, 0x11, 0x41, 0x6a, 0x8c, 0x08, 0x52, 0xe3, 0x44, 0x90, - 0x1a, 0x2b, 0x82, 0xd4, 0x6e, 0x11, 0x74, 0x42, 0xbe, 0xf1, 0x00, 0x61, 0x05, 0xe9, 0x84, 0x7c, - 0xf4, 0x19, 0x1d, 0x42, 0x6a, 0xac, 0x10, 0x52, 0xbb, 0x85, 0xd0, 0x37, 0x55, 0x18, 0x13, 0x42, - 0x88, 0x9d, 0x0f, 0xbd, 0x59, 0x15, 0xe8, 0x5c, 0x8c, 0x0b, 0x16, 0x61, 0x31, 0x75, 0x2e, 0xc6, - 0x21, 0xf5, 0x7e, 0x71, 0xd6, 0x59, 0x85, 0x4a, 0x31, 0xaa, 0xd0, 0x65, 0x2f, 0x86, 0xce, 0xc5, - 0xb8, 0x78, 0xd1, 0x19, 0x7b, 0x17, 0xf6, 0x2b, 0x02, 0x8f, 0xc4, 0x2a, 0x02, 0x4b, 0xb1, 0x8a, - 0xc0, 0x55, 0xdf, 0x83, 0x1f, 0x4a, 0xc0, 0x61, 0xdf, 0x83, 0xf4, 0x13, 0xf9, 0xe9, 0xa6, 0x4c, - 0xe0, 0x88, 0x4a, 0xe7, 0xc7, 0x36, 0x01, 0x37, 0x26, 0x96, 0x6a, 0xfa, 0x9a, 0x78, 0x58, 0x95, - 0x3d, 0xe8, 0x01, 0x4e, 0xc0, 0xe3, 0x6c, 0x33, 0xf4, 0x04, 0xa8, 0x4b, 0x35, 0x87, 0x54, 0x8b, - 0xb0, 0xc7, 0x16, 0x0c, 0x4c, 0xd6, 0x0d, 0xe8, 0x23, 0xec, 0x0e, 0x71, 0xef, 0xed, 0x3c, 0xb8, - 0x68, 0x30, 0x49, 0x99, 0x17, 0x15, 0x98, 0x16, 0x42, 0xf9, 0xcd, 0x39, 0x32, 0xb8, 0x14, 0xeb, - 0xc8, 0x40, 0x48, 0x10, 0xff, 0xf8, 0xe0, 0xde, 0xce, 0x93, 0xea, 0x60, 0x96, 0xc8, 0x47, 0x09, - 0xbf, 0x00, 0xc3, 0xfe, 0x0c, 0xc8, 0x3b, 0xdb, 0xd9, 0xe8, 0xdd, 0xcc, 0xb0, 0xd4, 0x3c, 0x2b, - 0xed, 0xa2, 0xed, 0x0b, 0xf3, 0xb2, 0x35, 0x93, 0x85, 0x91, 0xb2, 0xf8, 0x77, 0x41, 0x51, 0x9b, - 0x11, 0x29, 0xdc, 0x9a, 0xdf, 0xf8, 0xcc, 0x54, 0x4f, 0xe6, 0x7e, 0x18, 0x0c, 0xfe, 0xe9, 0x8f, - 0x04, 0xec, 0xe7, 0xc0, 0x6c, 0xf2, 0x25, 0xcc, 0xfd, 0x7b, 0x0a, 0x1c, 0x09, 0xb2, 0x3f, 0x5a, - 0x77, 0x77, 0x96, 0x2c, 0xdc, 0xd3, 0x3f, 0x08, 0x29, 0xc4, 0x1c, 0xc7, 0x7e, 0x85, 0x85, 0xbd, - 0x47, 0x86, 0xb2, 0xcf, 0x91, 0x7f, 0x0d, 0x0f, 0x22, 0xed, 0x82, 0xf0, 0xc7, 0x2e, 0x4c, 0xdc, - 0x03, 0xbd, 0x54, 0xbe, 0xa8, 0xd7, 0x90, 0xa4, 0xd7, 0x67, 0x43, 0xf4, 0x22, 0x71, 0xa4, 0x5f, - 0x15, 0xf4, 0x0a, 0xbc, 0xae, 0x86, 0xb2, 0xcf, 0xf1, 0xe0, 0xcb, 0xa7, 0x70, 0xff, 0x47, 0x22, - 0x2a, 0x5a, 0xc9, 0x19, 0x48, 0x95, 0x64, 0x9e, 0x70, 0x3d, 0x8b, 0x90, 0x2c, 0xdb, 0x35, 0xf2, - 0xfb, 0x30, 0xe4, 0x07, 0x91, 0x99, 0x91, 0xd9, 0xaf, 0x23, 0x9f, 0x84, 0x54, 0x61, 0xa7, 0xde, - 0xa8, 0xb5, 0x91, 0xc5, 0xce, 0xec, 0xd9, 0x16, 0x3a, 0xc6, 0x18, 0x1e, 0x2d, 0x53, 0x80, 0xd1, - 0xb2, 0x6d, 0xe5, 0xf7, 0xdc, 0x60, 0xdd, 0x98, 0x93, 0x52, 0x84, 0x9d, 0xf9, 0x90, 0xbf, 0x03, - 0xc1, 0x0c, 0xf9, 0xde, 0xef, 0xbe, 0x3c, 0xa5, 0x6c, 0x78, 0xfb, 0xe7, 0x2b, 0x70, 0x94, 0xa5, - 0x4f, 0x87, 0xa8, 0x85, 0x28, 0x51, 0xfd, 0xec, 0x9c, 0x3a, 0x20, 0x6e, 0x09, 0x8b, 0xb3, 0x42, - 0xc5, 0xbd, 0x31, 0xcd, 0x70, 0x53, 0xb4, 0xaf, 0x66, 0xea, 0x81, 0x34, 0x0b, 0x15, 0x37, 0x17, - 0x25, 0x4e, 0xd2, 0xec, 0x6e, 0xe8, 0xf7, 0x68, 0x81, 0x68, 0x08, 0x66, 0xca, 0xc2, 0x6c, 0x06, - 0x06, 0x02, 0x09, 0xab, 0xf7, 0x82, 0x92, 0xd3, 0x7a, 0xf0, 0x7f, 0x79, 0x4d, 0xc1, 0xff, 0x15, - 0xb4, 0xc4, 0xec, 0x3d, 0x30, 0x22, 0xed, 0x5f, 0x62, 0x4a, 0x51, 0x03, 0xfc, 0x5f, 0x49, 0x1b, - 0x98, 0x48, 0x7e, 0xf8, 0x8f, 0x26, 0x7b, 0x66, 0x2f, 0x81, 0xde, 0xb9, 0xd3, 0xa9, 0xf7, 0x41, - 0x22, 0x87, 0x45, 0x1e, 0x85, 0x44, 0x3e, 0xaf, 0x29, 0x13, 0x23, 0xbf, 0xfa, 0xa9, 0xe9, 0x81, - 0x3c, 0xf9, 0xbb, 0xe6, 0x6b, 0xc8, 0xcd, 0xe7, 0x19, 0xf8, 0x21, 0x38, 0x12, 0xba, 0x53, 0x8a, - 0xf1, 0x85, 0x02, 0xc5, 0x17, 0x8b, 0x1d, 0xf8, 0x62, 0x91, 0xe0, 0x95, 0x2c, 0x3f, 0x71, 0xce, - 0xe9, 0x21, 0xbb, 0x8c, 0xe9, 0x5a, 0xe0, 0x84, 0x3b, 0x97, 0x7d, 0x88, 0xf1, 0xe6, 0x43, 0x79, - 0x51, 0xc4, 0x89, 0x75, 0x3e, 0x5b, 0x60, 0xf8, 0x42, 0x28, 0x7e, 0x4b, 0x3a, 0x56, 0x15, 0x57, - 0x08, 0x26, 0xa4, 0xe0, 0x29, 0x5c, 0x0c, 0x15, 0xb2, 0x13, 0xb8, 0xec, 0x5e, 0xf4, 0x14, 0x2e, - 0x85, 0xf2, 0xd6, 0x23, 0x2e, 0x7d, 0x95, 0xb2, 0xa7, 0xd8, 0x22, 0x9f, 0x3b, 0xad, 0x1f, 0xe1, - 0x39, 0x2a, 0x54, 0x60, 0x66, 0x20, 0xce, 0x95, 0x2d, 0x30, 0x40, 0xbe, 0x2b, 0xa0, 0xbb, 0x95, - 0x38, 0x32, 0xfb, 0x08, 0x13, 0x52, 0xe8, 0x2a, 0x24, 0xc2, 0x54, 0x1c, 0x9e, 0xdf, 0xb8, 0x71, - 0x73, 0xb2, 0xe7, 0xa5, 0x9b, 0x93, 0x3d, 0xff, 0x74, 0x73, 0xb2, 0xe7, 0x7b, 0x37, 0x27, 0x95, - 0x1f, 0xdc, 0x9c, 0x54, 0x7e, 0x74, 0x73, 0x52, 0xf9, 0xc9, 0xcd, 0x49, 0xe5, 0xd9, 0x5b, 0x93, - 0xca, 0x0b, 0xb7, 0x26, 0x95, 0x2f, 0xde, 0x9a, 0x54, 0xbe, 0x76, 0x6b, 0x52, 0x79, 0xf1, 0xd6, - 0xa4, 0x72, 0xe3, 0xd6, 0xa4, 0xf2, 0xd2, 0xad, 0x49, 0xe5, 0x7b, 0xb7, 0x26, 0x95, 0x1f, 0xdc, - 0x9a, 0xec, 0xf9, 0xd1, 0xad, 0x49, 0xe5, 0x27, 0xb7, 0x26, 0x7b, 0x9e, 0x7d, 0x65, 0xb2, 0xe7, - 0xf9, 0x57, 0x26, 0x7b, 0x5e, 0x78, 0x65, 0x52, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xeb, - 0x29, 0x6c, 0xaf, 0x64, 0x67, 0x00, 0x00, + 0x59, 0xa6, 0x93, 0x9e, 0x0e, 0x32, 0x8f, 0x54, 0xab, 0x25, 0x42, 0xcd, 0x11, 0xa2, 0x3e, 0x0b, + 0x63, 0xf6, 0xf5, 0xc7, 0xaa, 0x34, 0x24, 0x2b, 0xad, 0x36, 0xda, 0xaa, 0x3f, 0x95, 0x3e, 0x41, + 0xec, 0x3b, 0x8a, 0x09, 0x24, 0x20, 0xd7, 0xc8, 0xb0, 0x7e, 0x0f, 0x68, 0x55, 0x67, 0xc7, 0x6c, + 0xb7, 0x48, 0x4d, 0x76, 0x5a, 0x66, 0x15, 0xa5, 0xef, 0xa2, 0xac, 0x74, 0xbc, 0xcc, 0x87, 0x71, + 0x4a, 0x38, 0x4f, 0xd6, 0xb7, 0x5c, 0x2e, 0xf1, 0x6e, 0x9a, 0x12, 0x64, 0x8c, 0x49, 0x9b, 0x01, + 0x0d, 0x9b, 0x42, 0x78, 0xf0, 0x0c, 0x61, 0x1b, 0x69, 0xed, 0xb4, 0x82, 0xcf, 0xbd, 0x13, 0x86, + 0x31, 0xa7, 0xff, 0xd0, 0x7b, 0x68, 0x43, 0xd6, 0xda, 0x09, 0x3c, 0xf1, 0x2d, 0xeb, 0x8d, 0x33, + 0x59, 0x18, 0x0a, 0xc6, 0xa7, 0x3e, 0x00, 0x34, 0x42, 0x35, 0x05, 0x37, 0x2b, 0x85, 0xd5, 0x22, + 0x6e, 0x33, 0xde, 0x53, 0xd2, 0x12, 0xb8, 0xdd, 0x59, 0x5e, 0xda, 0x28, 0x55, 0x8c, 0xcd, 0xf2, + 0xc6, 0xd2, 0x4a, 0x49, 0x53, 0x83, 0x7d, 0xf5, 0x77, 0x12, 0x30, 0x22, 0xbe, 0x22, 0xe9, 0xef, + 0x80, 0x23, 0x7c, 0x3f, 0xc3, 0x41, 0x6e, 0xe5, 0xc9, 0x7a, 0x9b, 0xa4, 0x4c, 0xd3, 0xa4, 0xcb, + 0x97, 0xe7, 0xb4, 0x43, 0x8c, 0x6b, 0x1d, 0xb9, 0x8f, 0xd4, 0xdb, 0x38, 0x21, 0x9a, 0xa6, 0xab, + 0x2f, 0xc3, 0xb4, 0x65, 0x57, 0x1c, 0xd7, 0xb4, 0x6a, 0x66, 0xbb, 0x56, 0xf1, 0x77, 0x92, 0x2a, + 0x66, 0xb5, 0x8a, 0x1c, 0xc7, 0xa6, 0x4b, 0x95, 0x27, 0xe5, 0xa8, 0x65, 0xaf, 0x33, 0x66, 0xbf, + 0x86, 0xe7, 0x18, 0xab, 0x14, 0x60, 0x6a, 0xaf, 0x00, 0xbb, 0x1d, 0x06, 0x9a, 0x66, 0xab, 0x82, + 0x2c, 0xb7, 0xbd, 0x4b, 0x1a, 0xe3, 0x94, 0x91, 0x6a, 0x9a, 0xad, 0x12, 0xfe, 0xfe, 0xf6, 0xbc, + 0x9f, 0xfc, 0xa3, 0x0a, 0x43, 0xc1, 0xe6, 0x18, 0xbf, 0x6b, 0x54, 0xc9, 0x3a, 0xa2, 0x90, 0x4a, + 0x73, 0xe7, 0x9e, 0xad, 0xf4, 0x5c, 0x01, 0x2f, 0x30, 0xd9, 0x7e, 0xda, 0xb2, 0x1a, 0x14, 0x89, + 0x17, 0x77, 0x5c, 0x5b, 0x10, 0x6d, 0x11, 0x52, 0x06, 0xfb, 0xa6, 0x5f, 0x81, 0xfe, 0xc7, 0x1c, + 0x22, 0xbb, 0x9f, 0xc8, 0x3e, 0xb1, 0xb7, 0xec, 0xab, 0xeb, 0x44, 0xf8, 0xc0, 0xd5, 0xf5, 0x4a, + 0x79, 0xd5, 0x58, 0xc9, 0x2d, 0x1b, 0x0c, 0xae, 0xdf, 0x06, 0xc9, 0x86, 0xf9, 0xf4, 0xae, 0xb8, + 0x14, 0x91, 0xa1, 0xb8, 0x86, 0xbf, 0x0d, 0x92, 0x4f, 0x22, 0xf3, 0x71, 0x71, 0x01, 0x20, 0x43, + 0x6f, 0x61, 0xe8, 0x9f, 0x82, 0x3e, 0x62, 0x2f, 0x1d, 0x80, 0x59, 0x4c, 0x3b, 0xa0, 0xa7, 0x20, + 0x59, 0x58, 0x35, 0x70, 0xf8, 0x6b, 0x30, 0x44, 0x47, 0x2b, 0x6b, 0x4b, 0xa5, 0x42, 0x49, 0x4b, + 0x64, 0xce, 0x42, 0x3f, 0x35, 0x02, 0x4e, 0x0d, 0xcf, 0x0c, 0xda, 0x01, 0xf6, 0x95, 0xc9, 0x50, + 0x38, 0x75, 0x73, 0x25, 0x5f, 0x32, 0xb4, 0x44, 0xd0, 0xbd, 0x0e, 0x0c, 0x05, 0xfb, 0xe2, 0xb7, + 0x27, 0xa6, 0xbe, 0xa5, 0xc0, 0x60, 0xa0, 0xcf, 0xc5, 0x0d, 0x8a, 0xd9, 0x68, 0xd8, 0x4f, 0x56, + 0xcc, 0x46, 0xdd, 0x74, 0x58, 0x50, 0x00, 0x19, 0xca, 0xe1, 0x91, 0xb8, 0x4e, 0x7b, 0x5b, 0x94, + 0x7f, 0x56, 0x01, 0x4d, 0x6e, 0x31, 0x25, 0x05, 0x95, 0x5f, 0xa8, 0x82, 0x9f, 0x50, 0x60, 0x44, + 0xec, 0x2b, 0x25, 0xf5, 0x8e, 0xff, 0x42, 0xd5, 0xfb, 0x41, 0x02, 0x86, 0x85, 0x6e, 0x32, 0xae, + 0x76, 0xef, 0x83, 0xb1, 0x7a, 0x0d, 0x35, 0x5b, 0xb6, 0x8b, 0xac, 0xea, 0x6e, 0xa5, 0x81, 0x9e, + 0x40, 0x8d, 0x74, 0x86, 0x14, 0x8a, 0x53, 0x7b, 0xf7, 0xab, 0x73, 0x4b, 0x3e, 0x6e, 0x19, 0xc3, + 0xb2, 0xe3, 0x4b, 0xc5, 0xd2, 0xca, 0xda, 0xea, 0x46, 0xa9, 0x5c, 0xb8, 0x56, 0xd9, 0x2c, 0xbf, + 0xb3, 0xbc, 0xfa, 0x48, 0xd9, 0xd0, 0xea, 0x12, 0xdb, 0x5b, 0x98, 0xea, 0x6b, 0xa0, 0xc9, 0x4a, + 0xe9, 0x47, 0x20, 0x4c, 0x2d, 0xed, 0x80, 0x3e, 0x0e, 0xa3, 0xe5, 0xd5, 0xca, 0xfa, 0x52, 0xb1, + 0x54, 0x29, 0x5d, 0xbe, 0x5c, 0x2a, 0x6c, 0xac, 0xd3, 0x1d, 0x08, 0x8f, 0x7b, 0x43, 0x4c, 0xea, + 0x8f, 0xab, 0x30, 0x1e, 0xa2, 0x89, 0x9e, 0x63, 0xef, 0x0e, 0xf4, 0x75, 0xe6, 0xfe, 0x38, 0xda, + 0xcf, 0xe1, 0x25, 0x7f, 0xcd, 0x6c, 0xbb, 0xec, 0x55, 0xe3, 0x1e, 0xc0, 0x56, 0xb2, 0xdc, 0xfa, + 0x56, 0x1d, 0xb5, 0xd9, 0x86, 0x0d, 0x7d, 0xa1, 0x18, 0xf5, 0xc7, 0xe9, 0x9e, 0xcd, 0x7d, 0xa0, + 0xb7, 0x6c, 0xa7, 0xee, 0xd6, 0x9f, 0x40, 0x95, 0xba, 0xc5, 0x77, 0x77, 0xf0, 0x0b, 0x46, 0xd2, + 0xd0, 0x38, 0x65, 0xc9, 0x72, 0x3d, 0x6e, 0x0b, 0x6d, 0x9b, 0x12, 0x37, 0x2e, 0xe0, 0xaa, 0xa1, + 0x71, 0x8a, 0xc7, 0x7d, 0x1c, 0x86, 0x6a, 0x76, 0x07, 0x77, 0x5d, 0x94, 0x0f, 0xaf, 0x17, 0x8a, + 0x31, 0x48, 0xc7, 0x3c, 0x16, 0xd6, 0x4f, 0xfb, 0xdb, 0x4a, 0x43, 0xc6, 0x20, 0x1d, 0xa3, 0x2c, + 0x77, 0xc3, 0xa8, 0xb9, 0xbd, 0xdd, 0xc6, 0xc2, 0xb9, 0x20, 0xfa, 0x86, 0x30, 0xe2, 0x0d, 0x13, + 0xc6, 0xc9, 0xab, 0x90, 0xe2, 0x76, 0xc0, 0x4b, 0x32, 0xb6, 0x44, 0xa5, 0x45, 0x5f, 0x7b, 0x13, + 0x33, 0x03, 0x46, 0xca, 0xe2, 0xc4, 0xe3, 0x30, 0x54, 0x77, 0x2a, 0xfe, 0x2e, 0x79, 0xe2, 0x58, + 0x62, 0x26, 0x65, 0x0c, 0xd6, 0x1d, 0x6f, 0x87, 0x31, 0xf3, 0x85, 0x04, 0x8c, 0x88, 0xbb, 0xfc, + 0x7a, 0x11, 0x52, 0x0d, 0xbb, 0x6a, 0x92, 0xd0, 0xa2, 0x47, 0x4c, 0x33, 0x11, 0x07, 0x03, 0x73, + 0xcb, 0x8c, 0xdf, 0xf0, 0x90, 0x93, 0x7f, 0xa7, 0x40, 0x8a, 0x0f, 0xeb, 0x13, 0x90, 0x6c, 0x99, + 0xee, 0x0e, 0x11, 0xd7, 0x97, 0x4f, 0x68, 0x8a, 0x41, 0xbe, 0xe3, 0x71, 0xa7, 0x65, 0x5a, 0x24, + 0x04, 0xd8, 0x38, 0xfe, 0x8e, 0xfd, 0xda, 0x40, 0x66, 0x8d, 0xbc, 0x7e, 0xd8, 0xcd, 0x26, 0xb2, + 0x5c, 0x87, 0xfb, 0x95, 0x8d, 0x17, 0xd8, 0xb0, 0x7e, 0x2f, 0x8c, 0xb9, 0x6d, 0xb3, 0xde, 0x10, + 0x78, 0x93, 0x84, 0x57, 0xe3, 0x04, 0x8f, 0x39, 0x0b, 0xb7, 0x71, 0xb9, 0x35, 0xe4, 0x9a, 0xd5, + 0x1d, 0x54, 0xf3, 0x41, 0xfd, 0x64, 0x9b, 0xe1, 0x08, 0x63, 0x28, 0x32, 0x3a, 0xc7, 0x66, 0xbe, + 0xa7, 0xc0, 0x18, 0x7f, 0x61, 0xaa, 0x79, 0xc6, 0x5a, 0x01, 0x30, 0x2d, 0xcb, 0x76, 0x83, 0xe6, + 0xea, 0x0e, 0xe5, 0x2e, 0xdc, 0x5c, 0xce, 0x03, 0x19, 0x01, 0x01, 0x93, 0x4d, 0x00, 0x9f, 0xd2, + 0xd3, 0x6c, 0xd3, 0x30, 0xc8, 0x8e, 0x70, 0xc8, 0x39, 0x20, 0x7d, 0xc5, 0x06, 0x3a, 0x84, 0xdf, + 0xac, 0xf4, 0x43, 0xd0, 0x77, 0x1d, 0x6d, 0xd7, 0x2d, 0xb6, 0x31, 0x4b, 0xbf, 0xf0, 0x8d, 0x90, + 0xa4, 0xb7, 0x11, 0x92, 0x7f, 0x2f, 0x8c, 0x57, 0xed, 0xa6, 0xac, 0x6e, 0x5e, 0x93, 0x5e, 0xf3, + 0x9d, 0x87, 0x95, 0xf7, 0x80, 0xdf, 0x62, 0xfe, 0x4c, 0x51, 0x3e, 0x93, 0x50, 0xaf, 0xac, 0xe5, + 0xbf, 0x94, 0x98, 0xbc, 0x42, 0xa1, 0x6b, 0x7c, 0xa6, 0x06, 0xda, 0x6a, 0xa0, 0x2a, 0xd6, 0x1e, + 0x3e, 0x7f, 0x2f, 0xdc, 0xbf, 0x5d, 0x77, 0x77, 0x3a, 0xd7, 0xe7, 0xaa, 0x76, 0xf3, 0xd4, 0xb6, + 0xbd, 0x6d, 0xfb, 0x47, 0x9f, 0xf8, 0x1b, 0xf9, 0x42, 0x3e, 0xb1, 0xe3, 0xcf, 0x01, 0x6f, 0x74, + 0x32, 0xf2, 0xac, 0x34, 0x5b, 0x86, 0x71, 0xc6, 0x5c, 0x21, 0xe7, 0x2f, 0xf4, 0x2d, 0x42, 0xdf, + 0x73, 0x0f, 0x2b, 0xfd, 0x95, 0x1f, 0x92, 0xe5, 0xda, 0x18, 0x63, 0x50, 0x4c, 0xa3, 0x2f, 0x1a, + 0x59, 0x03, 0x0e, 0x0b, 0xf2, 0x68, 0x6a, 0xa2, 0x76, 0x84, 0xc4, 0xef, 0x30, 0x89, 0xe3, 0x01, + 0x89, 0xeb, 0x0c, 0x9a, 0x2d, 0xc0, 0xf0, 0x7e, 0x64, 0xfd, 0x0d, 0x93, 0x35, 0x84, 0x82, 0x42, + 0xae, 0xc0, 0x28, 0x11, 0x52, 0xed, 0x38, 0xae, 0xdd, 0x24, 0x75, 0x6f, 0x6f, 0x31, 0xdf, 0xfd, + 0x21, 0xcd, 0x95, 0x11, 0x0c, 0x2b, 0x78, 0xa8, 0x6c, 0x16, 0xc8, 0x91, 0x53, 0x0d, 0x55, 0x1b, + 0x11, 0x12, 0x6e, 0x30, 0x45, 0x3c, 0xfe, 0xec, 0xbb, 0xe1, 0x10, 0xfe, 0x4c, 0xca, 0x52, 0x50, + 0x93, 0xe8, 0x0d, 0xaf, 0xf4, 0xf7, 0x3e, 0x40, 0xd3, 0x71, 0xdc, 0x13, 0x10, 0xd0, 0x29, 0xe0, + 0xc5, 0x6d, 0xe4, 0xba, 0xa8, 0xed, 0x54, 0xcc, 0x46, 0x98, 0x7a, 0x81, 0x1d, 0x83, 0xf4, 0xc7, + 0x5e, 0x15, 0xbd, 0x78, 0x85, 0x22, 0x73, 0x8d, 0x46, 0x76, 0x13, 0x8e, 0x84, 0x44, 0x45, 0x0c, + 0x99, 0x1f, 0x67, 0x32, 0x0f, 0x75, 0x45, 0x06, 0x16, 0xbb, 0x06, 0x7c, 0xdc, 0xf3, 0x65, 0x0c, + 0x99, 0x7f, 0xc0, 0x64, 0xea, 0x0c, 0xcb, 0x5d, 0x8a, 0x25, 0x5e, 0x85, 0xb1, 0x27, 0x50, 0xfb, + 0xba, 0xed, 0xb0, 0x5d, 0x9a, 0x18, 0xe2, 0x3e, 0xc1, 0xc4, 0x8d, 0x32, 0x20, 0xd9, 0xb6, 0xc1, + 0xb2, 0x2e, 0x42, 0x6a, 0xcb, 0xac, 0xa2, 0x18, 0x22, 0x3e, 0xc9, 0x44, 0x1c, 0xc4, 0xfc, 0x18, + 0x9a, 0x83, 0xa1, 0x6d, 0x9b, 0xad, 0x4c, 0xd1, 0xf0, 0x67, 0x19, 0x7c, 0x90, 0x63, 0x98, 0x88, + 0x96, 0xdd, 0xea, 0x34, 0xf0, 0xb2, 0x15, 0x2d, 0xe2, 0x53, 0x5c, 0x04, 0xc7, 0x30, 0x11, 0xfb, + 0x30, 0xeb, 0x73, 0x5c, 0x84, 0x13, 0xb0, 0xe7, 0x43, 0x30, 0x68, 0x5b, 0x8d, 0x5d, 0xdb, 0x8a, + 0xa3, 0xc4, 0xa7, 0x99, 0x04, 0x60, 0x10, 0x2c, 0xe0, 0x12, 0x0c, 0xc4, 0x75, 0xc4, 0xe7, 0x5e, + 0xe5, 0xe9, 0xc1, 0x3d, 0x70, 0x05, 0x46, 0x79, 0x81, 0xaa, 0xdb, 0x56, 0x0c, 0x11, 0x9f, 0x67, + 0x22, 0x46, 0x02, 0x30, 0x36, 0x0d, 0x17, 0x39, 0xee, 0x36, 0x8a, 0x23, 0xe4, 0x0b, 0x7c, 0x1a, + 0x0c, 0xc2, 0x4c, 0x79, 0x1d, 0x59, 0xd5, 0x9d, 0x78, 0x12, 0x9e, 0xe7, 0xa6, 0xe4, 0x18, 0x2c, + 0xa2, 0x00, 0xc3, 0x4d, 0xb3, 0xed, 0xec, 0x98, 0x8d, 0x58, 0xee, 0xf8, 0x22, 0x93, 0x31, 0xe4, + 0x81, 0x98, 0x45, 0x3a, 0xd6, 0x7e, 0xc4, 0x7c, 0x89, 0x5b, 0x24, 0x00, 0x63, 0xa9, 0xe7, 0xb8, + 0x64, 0x4b, 0x6b, 0x3f, 0xd2, 0xfe, 0x90, 0xa7, 0x1e, 0xc5, 0xae, 0x04, 0x25, 0x5e, 0x82, 0x01, + 0xa7, 0xfe, 0x74, 0x2c, 0x31, 0x7f, 0xc4, 0x3d, 0x4d, 0x00, 0x18, 0x7c, 0x0d, 0x6e, 0x0b, 0x5d, + 0x26, 0x62, 0x08, 0xfb, 0x63, 0x26, 0x6c, 0x22, 0x64, 0xa9, 0x60, 0x25, 0x61, 0xbf, 0x22, 0xff, + 0x84, 0x97, 0x04, 0x24, 0xc9, 0x5a, 0xc3, 0xef, 0x0a, 0x8e, 0xb9, 0xb5, 0x3f, 0xab, 0xfd, 0x29, + 0xb7, 0x1a, 0xc5, 0x0a, 0x56, 0xdb, 0x80, 0x09, 0x26, 0x71, 0x7f, 0x7e, 0xfd, 0x32, 0x2f, 0xac, + 0x14, 0xbd, 0x29, 0x7a, 0xf7, 0xbd, 0x30, 0xe9, 0x99, 0x93, 0x37, 0xa5, 0x4e, 0xa5, 0x69, 0xb6, + 0x62, 0x48, 0xfe, 0x0a, 0x93, 0xcc, 0x2b, 0xbe, 0xd7, 0xd5, 0x3a, 0x2b, 0x66, 0x0b, 0x0b, 0x7f, + 0x14, 0xd2, 0x5c, 0x78, 0xc7, 0x6a, 0xa3, 0xaa, 0xbd, 0x6d, 0xd5, 0x9f, 0x46, 0xb5, 0x18, 0xa2, + 0xff, 0x4c, 0x72, 0xd5, 0x66, 0x00, 0x8e, 0x25, 0x2f, 0x81, 0xe6, 0xf5, 0x2a, 0x95, 0x7a, 0xb3, + 0x65, 0xb7, 0xdd, 0x08, 0x89, 0x5f, 0xe5, 0x9e, 0xf2, 0x70, 0x4b, 0x04, 0x96, 0x2d, 0xc1, 0x08, + 0xf9, 0x1a, 0x37, 0x24, 0xbf, 0xc6, 0x04, 0x0d, 0xfb, 0x28, 0x56, 0x38, 0xaa, 0x76, 0xb3, 0x65, + 0xb6, 0xe3, 0xd4, 0xbf, 0x3f, 0xe7, 0x85, 0x83, 0x41, 0x58, 0xe1, 0x70, 0x77, 0x5b, 0x08, 0xaf, + 0xf6, 0x31, 0x24, 0x7c, 0x9d, 0x17, 0x0e, 0x8e, 0x61, 0x22, 0x78, 0xc3, 0x10, 0x43, 0xc4, 0x5f, + 0x70, 0x11, 0x1c, 0x83, 0x45, 0xbc, 0xcb, 0x5f, 0x68, 0xdb, 0x68, 0xbb, 0xee, 0xb8, 0x6d, 0xda, + 0x0a, 0xef, 0x2d, 0xea, 0x1b, 0xaf, 0x8a, 0x4d, 0x98, 0x11, 0x80, 0xe2, 0x4a, 0xc4, 0xb6, 0x50, + 0xc9, 0x9b, 0x52, 0xb4, 0x62, 0xdf, 0xe4, 0x95, 0x28, 0x00, 0xc3, 0xba, 0x05, 0x3a, 0x44, 0x6c, + 0xf6, 0x2a, 0x7e, 0x3f, 0x88, 0x21, 0xee, 0x5b, 0x92, 0x72, 0xeb, 0x1c, 0x8b, 0x65, 0x06, 0xfa, + 0x9f, 0x8e, 0xf5, 0x38, 0xda, 0x8d, 0x15, 0x9d, 0x7f, 0x29, 0xf5, 0x3f, 0x9b, 0x14, 0x49, 0x6b, + 0xc8, 0xa8, 0xd4, 0x4f, 0xe9, 0x51, 0x97, 0x75, 0xd2, 0xff, 0xf7, 0x35, 0x36, 0x5f, 0xb1, 0x9d, + 0xca, 0x2e, 0xe3, 0x20, 0x17, 0x9b, 0x9e, 0x68, 0x61, 0x1f, 0x78, 0xcd, 0x8b, 0x73, 0xa1, 0xe7, + 0xc9, 0x5e, 0x86, 0x61, 0xa1, 0xe1, 0x89, 0x16, 0xf5, 0xff, 0x98, 0xa8, 0xa1, 0x60, 0xbf, 0x93, + 0x3d, 0x0b, 0x49, 0xdc, 0xbc, 0x44, 0xc3, 0xff, 0x3f, 0x83, 0x13, 0xf6, 0xec, 0x03, 0x90, 0xe2, + 0x4d, 0x4b, 0x34, 0xf4, 0x83, 0x0c, 0xea, 0x41, 0x30, 0x9c, 0x37, 0x2c, 0xd1, 0xf0, 0x5f, 0xe1, + 0x70, 0x0e, 0xc1, 0xf0, 0xf8, 0x26, 0x7c, 0xe1, 0xd7, 0x92, 0x6c, 0xd1, 0xe1, 0xb6, 0xbb, 0x04, + 0x07, 0x59, 0xa7, 0x12, 0x8d, 0xfe, 0x30, 0x7b, 0x38, 0x47, 0x64, 0xcf, 0x43, 0x5f, 0x4c, 0x83, + 0xff, 0x3a, 0x83, 0x52, 0xfe, 0x6c, 0x01, 0x06, 0x03, 0xdd, 0x49, 0x34, 0xfc, 0x37, 0x18, 0x3c, + 0x88, 0xc2, 0xaa, 0xb3, 0xee, 0x24, 0x5a, 0xc0, 0x6f, 0x72, 0xd5, 0x19, 0x02, 0x9b, 0x8d, 0x37, + 0x26, 0xd1, 0xe8, 0xdf, 0xe2, 0x56, 0xe7, 0x90, 0xec, 0x43, 0x30, 0xe0, 0x2d, 0x36, 0xd1, 0xf8, + 0xdf, 0x66, 0x78, 0x1f, 0x83, 0x2d, 0x10, 0x58, 0xec, 0xa2, 0x45, 0xfc, 0x0e, 0xb7, 0x40, 0x00, + 0x85, 0xd3, 0x48, 0x6e, 0x60, 0xa2, 0x25, 0x7d, 0x84, 0xa7, 0x91, 0xd4, 0xbf, 0x60, 0x6f, 0x92, + 0x9a, 0x1f, 0x2d, 0xe2, 0x77, 0xb9, 0x37, 0x09, 0x3f, 0x56, 0x43, 0xee, 0x08, 0xa2, 0x65, 0xfc, + 0x3e, 0x57, 0x43, 0x6a, 0x08, 0xb2, 0x6b, 0xa0, 0x77, 0x77, 0x03, 0xd1, 0xf2, 0x3e, 0xca, 0xe4, + 0x8d, 0x75, 0x35, 0x03, 0xd9, 0x47, 0x60, 0x22, 0xbc, 0x13, 0x88, 0x96, 0xfa, 0xb1, 0xd7, 0xa4, + 0x77, 0xb7, 0x60, 0x23, 0x90, 0xdd, 0xf0, 0x97, 0x94, 0x60, 0x17, 0x10, 0x2d, 0xf6, 0xe3, 0xaf, + 0x89, 0x85, 0x3b, 0xd8, 0x04, 0x64, 0x73, 0x00, 0xfe, 0x02, 0x1c, 0x2d, 0xeb, 0x13, 0x4c, 0x56, + 0x00, 0x84, 0x53, 0x83, 0xad, 0xbf, 0xd1, 0xf8, 0x4f, 0xf2, 0xd4, 0x60, 0x08, 0x9c, 0x1a, 0x7c, + 0xe9, 0x8d, 0x46, 0x3f, 0xcb, 0x53, 0x83, 0x43, 0x70, 0x64, 0x07, 0x56, 0xb7, 0x68, 0x09, 0x9f, + 0xe6, 0x91, 0x1d, 0x40, 0x65, 0xcb, 0x30, 0xd6, 0xb5, 0x20, 0x46, 0x8b, 0xfa, 0x0c, 0x13, 0xa5, + 0xc9, 0xeb, 0x61, 0x70, 0xf1, 0x62, 0x8b, 0x61, 0xb4, 0xb4, 0xcf, 0x4a, 0x8b, 0x17, 0x5b, 0x0b, + 0xb3, 0x97, 0x20, 0x65, 0x75, 0x1a, 0x0d, 0x9c, 0x3c, 0xfa, 0xde, 0x17, 0xec, 0xd2, 0xff, 0xfc, + 0x3a, 0xb3, 0x0e, 0x07, 0x64, 0xcf, 0x42, 0x1f, 0x6a, 0x5e, 0x47, 0xb5, 0x28, 0xe4, 0xbf, 0xbc, + 0xce, 0x0b, 0x26, 0xe6, 0xce, 0x3e, 0x04, 0x40, 0xb7, 0x46, 0xc8, 0xb1, 0x5f, 0x04, 0xf6, 0x5f, + 0x5f, 0x67, 0x57, 0x5f, 0x7c, 0x88, 0x2f, 0x80, 0x5e, 0xa4, 0xd9, 0x5b, 0xc0, 0xab, 0xa2, 0x00, + 0xe2, 0x91, 0x8b, 0x70, 0xf0, 0x31, 0xc7, 0xb6, 0x5c, 0x73, 0x3b, 0x0a, 0xfd, 0x6f, 0x0c, 0xcd, + 0xf9, 0xb1, 0xc1, 0x9a, 0x76, 0x1b, 0xb9, 0xe6, 0xb6, 0x13, 0x85, 0xfd, 0x77, 0x86, 0xf5, 0x00, + 0x18, 0x5c, 0x35, 0x1d, 0x37, 0xce, 0xbc, 0x7f, 0xcc, 0xc1, 0x1c, 0x80, 0x95, 0xc6, 0x9f, 0x1f, + 0x47, 0xbb, 0x51, 0xd8, 0x9f, 0x70, 0xa5, 0x19, 0x7f, 0xf6, 0x01, 0x18, 0xc0, 0x1f, 0xe9, 0x7d, + 0xb6, 0x08, 0xf0, 0x7f, 0x30, 0xb0, 0x8f, 0xc0, 0x4f, 0x76, 0xdc, 0x9a, 0x5b, 0x8f, 0x36, 0xf6, + 0x4f, 0x99, 0xa7, 0x39, 0x7f, 0x36, 0x07, 0x83, 0x8e, 0x5b, 0xab, 0x75, 0x58, 0x7f, 0x1a, 0x01, + 0xff, 0xcf, 0xd7, 0xbd, 0x2d, 0x0b, 0x0f, 0x83, 0xbd, 0xfd, 0xe4, 0xe3, 0x6e, 0xcb, 0x26, 0xc7, + 0x1c, 0x51, 0x12, 0x5e, 0x63, 0x12, 0x02, 0x90, 0x7c, 0x29, 0x7c, 0xfb, 0x16, 0xae, 0xd8, 0x57, + 0x6c, 0xba, 0x71, 0xfb, 0x9e, 0x4c, 0xf4, 0x0e, 0x2c, 0x7c, 0xb7, 0x01, 0xb7, 0x55, 0xed, 0xe6, + 0x75, 0xdb, 0x39, 0x75, 0xdd, 0x76, 0x77, 0x4e, 0xb9, 0x3b, 0x08, 0x2f, 0xc0, 0x6c, 0x53, 0x36, + 0x89, 0x3f, 0x4f, 0xee, 0x6f, 0x27, 0x97, 0x9c, 0xd3, 0x97, 0xeb, 0x58, 0xf9, 0x32, 0x39, 0x2a, + 0xd1, 0x8f, 0x42, 0x3f, 0x99, 0xce, 0x69, 0x72, 0x1c, 0xa9, 0xe4, 0x93, 0x37, 0x5e, 0x9a, 0x3e, + 0x60, 0xb0, 0x31, 0x8f, 0xba, 0x40, 0xf6, 0xb2, 0x13, 0x02, 0x75, 0xc1, 0xa3, 0x9e, 0xa1, 0xdb, + 0xd9, 0x02, 0xf5, 0x8c, 0x47, 0x5d, 0x24, 0x1b, 0xdb, 0xaa, 0x40, 0x5d, 0xf4, 0xa8, 0x67, 0xc9, + 0xe1, 0xcd, 0xb0, 0x40, 0x3d, 0xeb, 0x51, 0xcf, 0x91, 0x23, 0x9b, 0xa4, 0x40, 0x3d, 0xe7, 0x51, + 0xcf, 0x93, 0xd3, 0x9a, 0x31, 0x81, 0x7a, 0xde, 0xa3, 0x5e, 0x20, 0xa7, 0x34, 0xba, 0x40, 0xbd, + 0xe0, 0x51, 0x2f, 0x92, 0x2b, 0x50, 0x07, 0x05, 0xea, 0x45, 0x7d, 0x0a, 0x0e, 0xd2, 0x99, 0xcf, + 0x93, 0x23, 0xfd, 0x51, 0x46, 0xe6, 0x83, 0x3e, 0xfd, 0x34, 0xb9, 0xee, 0xd4, 0x2f, 0xd2, 0x4f, + 0xfb, 0xf4, 0x05, 0xf2, 0x97, 0x17, 0x9a, 0x48, 0x5f, 0xf0, 0xe9, 0x67, 0xd2, 0xc3, 0xe4, 0xca, + 0x97, 0x40, 0x3f, 0xe3, 0xd3, 0x17, 0xd3, 0x23, 0x38, 0x27, 0x44, 0xfa, 0xa2, 0x4f, 0x3f, 0x9b, + 0x1e, 0x3d, 0xa6, 0xcc, 0x0c, 0x89, 0xf4, 0xb3, 0x99, 0xf7, 0x13, 0xf7, 0x5a, 0xbe, 0x7b, 0x27, + 0x44, 0xf7, 0x7a, 0x8e, 0x9d, 0x10, 0x1d, 0xeb, 0xb9, 0x74, 0x42, 0x74, 0xa9, 0xe7, 0xcc, 0x09, + 0xd1, 0x99, 0x9e, 0x1b, 0x27, 0x44, 0x37, 0x7a, 0x0e, 0x9c, 0x10, 0x1d, 0xe8, 0xb9, 0x6e, 0x42, + 0x74, 0x9d, 0xe7, 0xb4, 0x09, 0xd1, 0x69, 0x9e, 0xbb, 0x26, 0x44, 0x77, 0x79, 0x8e, 0x4a, 0x4b, + 0x8e, 0xf2, 0x5d, 0x94, 0x96, 0x5c, 0xe4, 0x3b, 0x27, 0x2d, 0x39, 0xc7, 0x77, 0x4b, 0x5a, 0x72, + 0x8b, 0xef, 0x90, 0xb4, 0xe4, 0x10, 0xdf, 0x15, 0x69, 0xc9, 0x15, 0xbe, 0x13, 0x58, 0x8e, 0x19, + 0xa8, 0x15, 0x92, 0x63, 0xea, 0x9e, 0x39, 0xa6, 0xee, 0x99, 0x63, 0xea, 0x9e, 0x39, 0xa6, 0xee, + 0x99, 0x63, 0xea, 0x9e, 0x39, 0xa6, 0xee, 0x99, 0x63, 0xea, 0x9e, 0x39, 0xa6, 0xee, 0x99, 0x63, + 0xea, 0xde, 0x39, 0xa6, 0x46, 0xe4, 0x98, 0x1a, 0x91, 0x63, 0x6a, 0x44, 0x8e, 0xa9, 0x11, 0x39, + 0xa6, 0x46, 0xe4, 0x98, 0xda, 0x33, 0xc7, 0x7c, 0xf7, 0x4e, 0x88, 0xee, 0x0d, 0xcd, 0x31, 0xb5, + 0x47, 0x8e, 0xa9, 0x3d, 0x72, 0x4c, 0xed, 0x91, 0x63, 0x6a, 0x8f, 0x1c, 0x53, 0x7b, 0xe4, 0x98, + 0xda, 0x23, 0xc7, 0xd4, 0x1e, 0x39, 0xa6, 0xf6, 0xca, 0x31, 0xb5, 0x67, 0x8e, 0xa9, 0x3d, 0x73, + 0x4c, 0xed, 0x99, 0x63, 0x6a, 0xcf, 0x1c, 0x53, 0x7b, 0xe6, 0x98, 0x1a, 0xcc, 0xb1, 0xbf, 0x52, + 0x41, 0xa7, 0x39, 0xb6, 0x46, 0x2e, 0x85, 0x31, 0x57, 0x4c, 0x49, 0x99, 0xd6, 0x8f, 0x5d, 0xa7, + 0xf9, 0x2e, 0x99, 0x92, 0x72, 0x4d, 0xa4, 0x2f, 0x78, 0x74, 0x9e, 0x6d, 0x22, 0xfd, 0x8c, 0x47, + 0xe7, 0xf9, 0x26, 0xd2, 0x17, 0x3d, 0x3a, 0xcf, 0x38, 0x91, 0x7e, 0xd6, 0xa3, 0xf3, 0x9c, 0x13, + 0xe9, 0xe7, 0x3c, 0x3a, 0xcf, 0x3a, 0x91, 0x7e, 0xde, 0xa3, 0xf3, 0xbc, 0x13, 0xe9, 0x17, 0x3c, + 0x3a, 0xcf, 0x3c, 0x91, 0x7e, 0x51, 0x3f, 0x26, 0xe7, 0x1e, 0x67, 0xf0, 0x5c, 0x7b, 0x4c, 0xce, + 0x3e, 0x89, 0xe3, 0xb4, 0xcf, 0xc1, 0xf3, 0x4f, 0xe2, 0x58, 0xf0, 0x39, 0x78, 0x06, 0x4a, 0x1c, + 0x67, 0x32, 0x1f, 0x22, 0xee, 0xb3, 0x64, 0xf7, 0x4d, 0x4a, 0xee, 0x4b, 0x04, 0x5c, 0x37, 0x29, + 0xb9, 0x2e, 0x11, 0x70, 0xdb, 0xa4, 0xe4, 0xb6, 0x44, 0xc0, 0x65, 0x93, 0x92, 0xcb, 0x12, 0x01, + 0x77, 0x4d, 0x4a, 0xee, 0x4a, 0x04, 0x5c, 0x35, 0x29, 0xb9, 0x2a, 0x11, 0x70, 0xd3, 0xa4, 0xe4, + 0xa6, 0x44, 0xc0, 0x45, 0x93, 0x92, 0x8b, 0x12, 0x01, 0xf7, 0x4c, 0x4a, 0xee, 0x49, 0x04, 0x5c, + 0x73, 0x54, 0x76, 0x4d, 0x22, 0xe8, 0x96, 0xa3, 0xb2, 0x5b, 0x12, 0x41, 0x97, 0x1c, 0x95, 0x5d, + 0x92, 0x08, 0xba, 0xe3, 0xa8, 0xec, 0x8e, 0x44, 0xd0, 0x15, 0x3f, 0x4f, 0xf0, 0x8e, 0x70, 0xdd, + 0x6d, 0x77, 0xaa, 0xee, 0x2d, 0x75, 0x84, 0xf3, 0x42, 0xfb, 0x30, 0xb8, 0xa0, 0xcf, 0x91, 0x86, + 0x35, 0xd8, 0x71, 0x4a, 0x2b, 0xd8, 0xbc, 0xd0, 0x58, 0x04, 0x10, 0x56, 0x38, 0x62, 0xf1, 0x96, + 0x7a, 0xc3, 0x79, 0xa1, 0xcd, 0x88, 0xd6, 0xef, 0xc2, 0x5b, 0xde, 0xb1, 0xbd, 0x90, 0xe0, 0x1d, + 0x1b, 0x33, 0xff, 0x7e, 0x3b, 0xb6, 0xd9, 0x68, 0x93, 0x7b, 0xc6, 0x9e, 0x8d, 0x36, 0x76, 0xd7, + 0xaa, 0x13, 0xb7, 0x83, 0x9b, 0x8d, 0x36, 0xad, 0x67, 0xd4, 0x37, 0xb7, 0xdf, 0x62, 0x11, 0x6c, + 0xa0, 0x56, 0x48, 0x04, 0xef, 0xb7, 0xdf, 0x9a, 0x17, 0x4a, 0xc9, 0x7e, 0x23, 0x58, 0xdd, 0x77, + 0x04, 0xef, 0xb7, 0xf3, 0x9a, 0x17, 0xca, 0xcb, 0xbe, 0x23, 0xf8, 0x2d, 0xe8, 0x87, 0x58, 0x04, + 0xfb, 0xe6, 0xdf, 0x6f, 0x3f, 0x34, 0x1b, 0x6d, 0xf2, 0xd0, 0x08, 0x56, 0xf7, 0x11, 0xc1, 0x71, + 0xfa, 0xa3, 0xd9, 0x68, 0xd3, 0x86, 0x47, 0xf0, 0x2d, 0x77, 0x33, 0x9f, 0x52, 0x60, 0xac, 0x5c, + 0xaf, 0x95, 0x9a, 0xd7, 0x51, 0xad, 0x86, 0x6a, 0xcc, 0x8e, 0xf3, 0x42, 0x25, 0xe8, 0xe1, 0xea, + 0x17, 0x5f, 0x9a, 0xf6, 0x2d, 0x7c, 0x16, 0x52, 0xd4, 0xa6, 0xf3, 0xf3, 0xe9, 0x1b, 0x4a, 0x44, + 0x85, 0xf3, 0x58, 0xf5, 0xe3, 0x1c, 0x76, 0x7a, 0x3e, 0xfd, 0xf7, 0x4a, 0xa0, 0xca, 0x79, 0xc3, + 0x99, 0x8f, 0x10, 0x0d, 0xad, 0x5b, 0xd6, 0xf0, 0x54, 0x2c, 0x0d, 0x03, 0xba, 0xdd, 0xde, 0xa5, + 0x5b, 0x40, 0xab, 0x0e, 0x8c, 0x96, 0xeb, 0xb5, 0x32, 0xf9, 0x9b, 0xff, 0x38, 0x2a, 0x51, 0x1e, + 0xa9, 0x1e, 0xcc, 0x0b, 0x61, 0x19, 0x44, 0x78, 0x21, 0x2d, 0xd6, 0x88, 0x4c, 0x1d, 0x3f, 0xd6, + 0x12, 0x1e, 0x3b, 0xdb, 0xeb, 0xb1, 0x7e, 0x65, 0xf7, 0x1e, 0x38, 0xdb, 0xeb, 0x81, 0x7e, 0x0e, + 0x79, 0x8f, 0x7a, 0x8a, 0x2f, 0xce, 0xf4, 0x6a, 0x96, 0x7e, 0x14, 0x12, 0x4b, 0xf4, 0xe6, 0xf8, + 0x50, 0x7e, 0x08, 0x2b, 0xf5, 0xfd, 0x97, 0xa6, 0x93, 0x9b, 0x9d, 0x7a, 0xcd, 0x48, 0x2c, 0xd5, + 0xf4, 0xab, 0xd0, 0xf7, 0x6e, 0xf6, 0x97, 0xa7, 0x98, 0x61, 0x91, 0x31, 0xdc, 0xd7, 0x73, 0x8f, + 0x08, 0x3f, 0xf8, 0x14, 0xdd, 0xa6, 0x9c, 0xdb, 0xac, 0x5b, 0xee, 0xe9, 0x85, 0x0b, 0x06, 0x15, + 0x91, 0xf9, 0x9f, 0x00, 0xf4, 0x99, 0x45, 0xd3, 0xd9, 0xd1, 0xcb, 0x5c, 0x32, 0x7d, 0xf4, 0x85, + 0xef, 0xbf, 0x34, 0xbd, 0x18, 0x47, 0xea, 0xfd, 0x35, 0xd3, 0xd9, 0xb9, 0xdf, 0xdd, 0x6d, 0xa1, + 0xb9, 0xfc, 0xae, 0x8b, 0x1c, 0x2e, 0xbd, 0xc5, 0x57, 0x3d, 0x36, 0xaf, 0x74, 0x60, 0x5e, 0x29, + 0x61, 0x4e, 0x97, 0xc5, 0x39, 0xcd, 0xbf, 0xd1, 0xf9, 0x3c, 0xc5, 0x17, 0x09, 0xc9, 0x92, 0x6a, + 0x94, 0x25, 0xd5, 0x5b, 0xb5, 0x64, 0x8b, 0xd7, 0x47, 0x69, 0xae, 0xea, 0x5e, 0x73, 0x55, 0x6f, + 0x65, 0xae, 0xff, 0x45, 0xb3, 0xd5, 0xcb, 0xa7, 0x4d, 0x8b, 0xde, 0x5a, 0xfd, 0xe5, 0xda, 0x0b, + 0x7a, 0x53, 0xbb, 0x80, 0x6c, 0xf2, 0xc6, 0x73, 0xd3, 0x4a, 0xe6, 0x53, 0x09, 0x3e, 0x73, 0x9a, + 0x48, 0x6f, 0x6c, 0xe6, 0xbf, 0x2c, 0x3d, 0xd5, 0x5b, 0x61, 0xa1, 0x67, 0x15, 0x98, 0xe8, 0xaa, + 0xe4, 0xd4, 0x4c, 0x6f, 0x6e, 0x39, 0xb7, 0xf6, 0x5b, 0xce, 0x99, 0x82, 0x5f, 0x53, 0xe0, 0x90, + 0x54, 0x5e, 0xa9, 0x7a, 0xa7, 0x24, 0xf5, 0x8e, 0x74, 0x3f, 0x89, 0x30, 0x06, 0xb4, 0x0b, 0xba, + 0x57, 0x02, 0x04, 0x24, 0x7b, 0x7e, 0x5f, 0x94, 0xfc, 0x7e, 0xd4, 0x03, 0x84, 0x98, 0x8b, 0x47, + 0x00, 0x53, 0xdb, 0x86, 0xe4, 0x46, 0x1b, 0x21, 0x7d, 0x0a, 0x12, 0xab, 0x6d, 0xa6, 0xe1, 0x08, + 0xc5, 0xaf, 0xb6, 0xf3, 0x6d, 0xd3, 0xaa, 0xee, 0x18, 0x89, 0xd5, 0xb6, 0x7e, 0x1c, 0xd4, 0x1c, + 0xfb, 0xab, 0xf7, 0xc1, 0x85, 0x51, 0xca, 0x90, 0xb3, 0x6a, 0x8c, 0x03, 0xd3, 0xf4, 0x29, 0x48, + 0x2e, 0x23, 0x73, 0x8b, 0x29, 0x01, 0x94, 0x07, 0x8f, 0x18, 0x64, 0x9c, 0x3d, 0xf0, 0x51, 0x48, + 0x71, 0xc1, 0xfa, 0x09, 0x8c, 0xd8, 0x72, 0xd9, 0x63, 0x19, 0x02, 0xab, 0xc3, 0x56, 0x2e, 0x42, + 0xd5, 0x4f, 0x42, 0x9f, 0x51, 0xdf, 0xde, 0x71, 0xd9, 0xc3, 0xbb, 0xd9, 0x28, 0x39, 0x73, 0x0d, + 0x06, 0x3c, 0x8d, 0xde, 0x64, 0xd1, 0x45, 0x3a, 0x35, 0x7d, 0x32, 0xb8, 0x9e, 0xf0, 0x7d, 0x4b, + 0x3a, 0xa4, 0x1f, 0x83, 0xd4, 0xba, 0xdb, 0xf6, 0x8b, 0x3e, 0xef, 0x48, 0xbd, 0xd1, 0xcc, 0xfb, + 0x15, 0x48, 0x15, 0x11, 0x6a, 0x11, 0x83, 0xdf, 0x05, 0xc9, 0xa2, 0xfd, 0xa4, 0xc5, 0x14, 0x1c, + 0x63, 0x16, 0xc5, 0x64, 0x66, 0x53, 0x42, 0xd6, 0xef, 0x0a, 0xda, 0x7d, 0xdc, 0xb3, 0x7b, 0x80, + 0x8f, 0xd8, 0x3e, 0x23, 0xd8, 0x9e, 0x39, 0x10, 0x33, 0x75, 0xd9, 0xff, 0x3c, 0x0c, 0x06, 0x9e, + 0xa2, 0xcf, 0x30, 0x35, 0x12, 0x32, 0x30, 0x68, 0x2b, 0xcc, 0x91, 0x41, 0x30, 0x2c, 0x3c, 0x18, + 0x43, 0x03, 0x26, 0xee, 0x01, 0x25, 0x66, 0x9e, 0x15, 0xcd, 0x1c, 0xce, 0xca, 0x4c, 0x3d, 0x4f, + 0x6d, 0x44, 0xcc, 0x7d, 0x82, 0x06, 0x67, 0x6f, 0x27, 0xe2, 0xcf, 0x99, 0x3e, 0x50, 0xcb, 0xf5, + 0x46, 0xe6, 0x01, 0x00, 0x9a, 0xf2, 0x25, 0xab, 0xd3, 0x94, 0xb2, 0x6e, 0x84, 0x1b, 0x78, 0x63, + 0x07, 0x6d, 0x20, 0x87, 0xb0, 0x88, 0xfd, 0x14, 0x2e, 0x30, 0x40, 0x53, 0x8c, 0xe0, 0xef, 0x89, + 0xc4, 0x87, 0x76, 0x62, 0x98, 0x35, 0x4d, 0x59, 0xaf, 0x21, 0x37, 0x67, 0xd9, 0xee, 0x0e, 0x6a, + 0x4b, 0x88, 0x05, 0xfd, 0x8c, 0x90, 0xb0, 0x23, 0x0b, 0xb7, 0x7b, 0x88, 0x9e, 0xa0, 0x33, 0x99, + 0x2f, 0x13, 0x05, 0x71, 0x2b, 0xd0, 0x35, 0x41, 0x35, 0xc6, 0x04, 0xf5, 0x73, 0x42, 0xff, 0xb6, + 0x87, 0x9a, 0xd2, 0xab, 0xe5, 0x45, 0xe1, 0x3d, 0x67, 0x6f, 0x65, 0xc5, 0x77, 0x4c, 0x6e, 0x53, + 0xae, 0xf2, 0x3d, 0x91, 0x2a, 0xf7, 0xe8, 0x6e, 0xf7, 0x6b, 0x53, 0x35, 0xae, 0x4d, 0xbf, 0xe5, + 0x75, 0x1c, 0xf4, 0xa7, 0x45, 0xc8, 0x8f, 0xf2, 0xe8, 0xf7, 0x45, 0xfa, 0x3e, 0xab, 0x14, 0x3c, + 0x55, 0x17, 0xe3, 0xba, 0x3f, 0x9b, 0xc8, 0xe7, 0x3d, 0x75, 0xcf, 0xef, 0x23, 0x04, 0xb2, 0x89, + 0x42, 0xc1, 0x2b, 0xdb, 0xa9, 0x0f, 0x3d, 0x37, 0xad, 0x3c, 0xff, 0xdc, 0xf4, 0x81, 0xcc, 0x17, + 0x15, 0x18, 0x63, 0x9c, 0x81, 0xc0, 0xbd, 0x5f, 0x52, 0xfe, 0x30, 0xaf, 0x19, 0x61, 0x16, 0x78, + 0xdb, 0x82, 0xf7, 0x3b, 0x0a, 0xa4, 0xbb, 0x74, 0xe5, 0xf6, 0x9e, 0x8f, 0xa5, 0x72, 0x56, 0x29, + 0xfd, 0xe2, 0x6d, 0x7e, 0x0d, 0xfa, 0x36, 0xea, 0x4d, 0xd4, 0xc6, 0x2b, 0x01, 0xfe, 0x40, 0x55, + 0xe6, 0x87, 0x39, 0x74, 0x88, 0xd3, 0xa8, 0x72, 0x02, 0x6d, 0x41, 0x4f, 0x43, 0xb2, 0x68, 0xba, + 0x26, 0xd1, 0x60, 0xc8, 0xab, 0xaf, 0xa6, 0x6b, 0x66, 0xce, 0xc0, 0xd0, 0xca, 0x2e, 0xb9, 0x6a, + 0x54, 0x23, 0xb7, 0x4c, 0xc4, 0xee, 0x8f, 0xf7, 0xab, 0xa7, 0x67, 0xfb, 0x52, 0x35, 0xed, 0x86, + 0x92, 0x4d, 0x12, 0x7d, 0x9e, 0x80, 0x91, 0x55, 0xac, 0x36, 0xc1, 0x09, 0x30, 0xfa, 0x74, 0xd5, + 0x9b, 0xbc, 0xd4, 0x94, 0xa9, 0x7e, 0x53, 0x76, 0x0c, 0x94, 0x15, 0xb1, 0x75, 0x0a, 0xea, 0x61, + 0x28, 0x2b, 0xb3, 0xc9, 0xd4, 0x88, 0x36, 0x36, 0x9b, 0x4c, 0x81, 0x36, 0xcc, 0x9e, 0xfb, 0xb7, + 0x2a, 0x68, 0xb4, 0xd5, 0x29, 0xa2, 0xad, 0xba, 0x55, 0x77, 0xbb, 0xfb, 0x55, 0x4f, 0x63, 0xfd, + 0x21, 0x18, 0xc0, 0x26, 0xbd, 0xcc, 0x7e, 0x9b, 0x0f, 0x9b, 0xfe, 0x38, 0x6b, 0x51, 0x24, 0x11, + 0x6c, 0x80, 0x84, 0x8e, 0x8f, 0xd1, 0x2f, 0x83, 0x5a, 0x2e, 0xaf, 0xb0, 0xc5, 0x6d, 0x71, 0x4f, + 0x28, 0xbb, 0xce, 0xc3, 0xbe, 0xb1, 0x31, 0x67, 0xdb, 0xc0, 0x02, 0xf4, 0x45, 0x48, 0x94, 0x57, + 0x58, 0xc3, 0x7b, 0x22, 0x8e, 0x18, 0x23, 0x51, 0x5e, 0x99, 0xfc, 0x6b, 0x05, 0x86, 0x85, 0x51, + 0x3d, 0x03, 0x43, 0x74, 0x20, 0x30, 0xdd, 0x7e, 0x43, 0x18, 0xe3, 0x3a, 0x27, 0x6e, 0x51, 0xe7, + 0xc9, 0x1c, 0x8c, 0x4a, 0xe3, 0xfa, 0x1c, 0xe8, 0xc1, 0x21, 0xa6, 0x04, 0xfd, 0x5d, 0xb0, 0x10, + 0x4a, 0xe6, 0x0e, 0x00, 0xdf, 0xae, 0xde, 0xcf, 0x59, 0x95, 0x4b, 0xeb, 0x1b, 0xa5, 0xa2, 0xa6, + 0x64, 0xbe, 0xae, 0xc0, 0x20, 0x6b, 0x5b, 0xab, 0x76, 0x0b, 0xe9, 0x79, 0x50, 0x72, 0x2c, 0x1e, + 0xde, 0x98, 0xde, 0x4a, 0x4e, 0x3f, 0x05, 0x4a, 0x3e, 0xbe, 0xab, 0x95, 0xbc, 0xbe, 0x00, 0x4a, + 0x81, 0x39, 0x38, 0x9e, 0x67, 0x94, 0x42, 0xe6, 0xa7, 0x2a, 0x8c, 0x07, 0xdb, 0x68, 0x5e, 0x4f, + 0x8e, 0x8b, 0xef, 0x4d, 0xd9, 0x81, 0xd3, 0x0b, 0x67, 0x16, 0xe7, 0xf0, 0x3f, 0x5e, 0x48, 0x66, + 0xc4, 0x57, 0xa8, 0x2c, 0x78, 0x2c, 0xa7, 0x7b, 0xdd, 0x13, 0xc9, 0x26, 0x03, 0x12, 0xba, 0xee, + 0x89, 0x08, 0xd4, 0xae, 0x7b, 0x22, 0x02, 0xb5, 0xeb, 0x9e, 0x88, 0x40, 0xed, 0x3a, 0x0b, 0x10, + 0xa8, 0x5d, 0xf7, 0x44, 0x04, 0x6a, 0xd7, 0x3d, 0x11, 0x81, 0xda, 0x7d, 0x4f, 0x84, 0x91, 0x7b, + 0xde, 0x13, 0x11, 0xe9, 0xdd, 0xf7, 0x44, 0x44, 0x7a, 0xf7, 0x3d, 0x91, 0x6c, 0xd2, 0x6d, 0x77, + 0x50, 0xef, 0x53, 0x07, 0x11, 0xbf, 0xd7, 0x4b, 0xa0, 0x5f, 0x81, 0x57, 0x61, 0x94, 0x6e, 0x48, + 0x14, 0x6c, 0xcb, 0x35, 0xeb, 0x16, 0x6a, 0xeb, 0xef, 0x80, 0x21, 0x3a, 0x44, 0x5f, 0x73, 0xc2, + 0x5e, 0x03, 0x29, 0x9d, 0xd5, 0x5b, 0x81, 0x3b, 0xf3, 0xf3, 0x24, 0x4c, 0xd0, 0x81, 0xb2, 0xd9, + 0x44, 0xc2, 0x2d, 0xa3, 0x93, 0xd2, 0x99, 0xd2, 0x08, 0x86, 0xdf, 0x7c, 0x69, 0x9a, 0x8e, 0xe6, + 0xbc, 0x68, 0x3a, 0x29, 0x9d, 0x2e, 0x89, 0x7c, 0xfe, 0x02, 0x74, 0x52, 0xba, 0x79, 0x24, 0xf2, + 0x79, 0xeb, 0x8d, 0xc7, 0xc7, 0xef, 0x20, 0x89, 0x7c, 0x45, 0x2f, 0xca, 0x4e, 0x4a, 0xb7, 0x91, + 0x44, 0xbe, 0x92, 0x17, 0x6f, 0x27, 0xa5, 0xb3, 0x27, 0x91, 0xef, 0xb2, 0x17, 0x79, 0x27, 0xa5, + 0x53, 0x28, 0x91, 0xef, 0x8a, 0x17, 0x83, 0x27, 0xa5, 0xbb, 0x4a, 0x22, 0xdf, 0xc3, 0x5e, 0x34, + 0x9e, 0x94, 0x6e, 0x2d, 0x89, 0x7c, 0x4b, 0x5e, 0x5c, 0xce, 0xc8, 0xf7, 0x97, 0x44, 0xc6, 0xab, + 0x7e, 0x84, 0xce, 0xc8, 0x37, 0x99, 0x44, 0xce, 0x77, 0xfa, 0xb1, 0x3a, 0x23, 0xdf, 0x69, 0x12, + 0x39, 0x97, 0xfd, 0xa8, 0x9d, 0x91, 0xcf, 0xca, 0x44, 0xce, 0x15, 0x3f, 0x7e, 0x67, 0xe4, 0x53, + 0x33, 0x91, 0xb3, 0xec, 0x47, 0xf2, 0x8c, 0x7c, 0x7e, 0x26, 0x72, 0xae, 0xfa, 0x9b, 0xe8, 0xdf, + 0x96, 0xc2, 0x2f, 0x70, 0x0b, 0x2a, 0x23, 0x85, 0x1f, 0x84, 0x84, 0x9e, 0x54, 0xc8, 0x02, 0x3c, + 0x7e, 0xd8, 0x65, 0xa4, 0xb0, 0x83, 0x90, 0x90, 0xcb, 0x48, 0x21, 0x07, 0x21, 0xe1, 0x96, 0x91, + 0xc2, 0x0d, 0x42, 0x42, 0x2d, 0x23, 0x85, 0x1a, 0x84, 0x84, 0x59, 0x46, 0x0a, 0x33, 0x08, 0x09, + 0xb1, 0x8c, 0x14, 0x62, 0x10, 0x12, 0x5e, 0x19, 0x29, 0xbc, 0x20, 0x24, 0xb4, 0x4e, 0xc8, 0xa1, + 0x05, 0x61, 0x61, 0x75, 0x42, 0x0e, 0x2b, 0x08, 0x0b, 0xa9, 0x3b, 0xe5, 0x90, 0x1a, 0xb8, 0xf9, + 0xd2, 0x74, 0x1f, 0x1e, 0x0a, 0x44, 0xd3, 0x09, 0x39, 0x9a, 0x20, 0x2c, 0x92, 0x4e, 0xc8, 0x91, + 0x04, 0x61, 0x51, 0x74, 0x42, 0x8e, 0x22, 0x08, 0x8b, 0xa0, 0x17, 0xe4, 0x08, 0xf2, 0xef, 0xf8, + 0x64, 0xa4, 0x23, 0xc5, 0xa8, 0x08, 0x52, 0x63, 0x44, 0x90, 0x1a, 0x23, 0x82, 0xd4, 0x18, 0x11, + 0xa4, 0xc6, 0x88, 0x20, 0x35, 0x46, 0x04, 0xa9, 0x31, 0x22, 0x48, 0x8d, 0x11, 0x41, 0x6a, 0x9c, + 0x08, 0x52, 0x63, 0x45, 0x90, 0xda, 0x2b, 0x82, 0x4e, 0xc8, 0x37, 0x1e, 0x20, 0xac, 0x20, 0x9d, + 0x90, 0x8f, 0x3e, 0xa3, 0x43, 0x48, 0x8d, 0x15, 0x42, 0x6a, 0xaf, 0x10, 0xfa, 0xb6, 0x0a, 0xe3, + 0x42, 0x08, 0xb1, 0xf3, 0xa1, 0x37, 0xab, 0x02, 0x9d, 0x8b, 0x71, 0xc1, 0x22, 0x2c, 0xa6, 0xce, + 0xc5, 0x38, 0xa4, 0xde, 0x2b, 0xce, 0xba, 0xab, 0x50, 0x29, 0x46, 0x15, 0xba, 0xec, 0xc5, 0xd0, + 0xb9, 0x18, 0x17, 0x2f, 0xba, 0x63, 0xef, 0xc2, 0x5e, 0x45, 0xe0, 0xe1, 0x58, 0x45, 0x60, 0x29, + 0x56, 0x11, 0xb8, 0xea, 0x7b, 0xf0, 0x83, 0x09, 0x38, 0xe4, 0x7b, 0x90, 0x7e, 0x22, 0xbf, 0x9d, + 0x95, 0x09, 0x1c, 0x51, 0xe9, 0xfc, 0xd8, 0x26, 0xe0, 0xc6, 0xc4, 0x52, 0x4d, 0x5f, 0x13, 0x0f, + 0xab, 0xb2, 0xfb, 0x3d, 0xc0, 0x09, 0x78, 0x9c, 0x6d, 0x86, 0x9e, 0x00, 0x75, 0xa9, 0xe6, 0x90, + 0x6a, 0x11, 0xf6, 0xd8, 0x82, 0x81, 0xc9, 0xba, 0x01, 0xfd, 0x84, 0xdd, 0x21, 0xee, 0xbd, 0x95, + 0x07, 0x17, 0x0d, 0x26, 0x29, 0xf3, 0x82, 0x02, 0xc7, 0x84, 0x50, 0x7e, 0x73, 0x8e, 0x0c, 0x2e, + 0xc5, 0x3a, 0x32, 0x10, 0x12, 0xc4, 0x3f, 0x3e, 0xb8, 0xbb, 0xfb, 0xa4, 0x3a, 0x98, 0x25, 0xf2, + 0x51, 0xc2, 0xff, 0x81, 0x11, 0x7f, 0x06, 0xe4, 0x9d, 0xed, 0x6c, 0xf4, 0x6e, 0x66, 0x58, 0x6a, + 0x9e, 0x95, 0x76, 0xd1, 0xf6, 0x84, 0x79, 0xd9, 0x9a, 0xc9, 0xc2, 0x68, 0x59, 0xfc, 0xa3, 0xa7, + 0xa8, 0xcd, 0x88, 0x14, 0x6e, 0xcd, 0x6f, 0x7c, 0x7a, 0xfa, 0x40, 0xe6, 0x3e, 0x18, 0x0a, 0xfe, + 0x5d, 0x93, 0x04, 0x1c, 0xe0, 0xc0, 0x6c, 0xf2, 0x45, 0xcc, 0xfd, 0x7b, 0x0a, 0x1c, 0x0e, 0xb2, + 0x3f, 0x52, 0x77, 0x77, 0x96, 0x2c, 0xdc, 0xd3, 0x3f, 0x00, 0x29, 0xc4, 0x1c, 0xc7, 0x7e, 0x06, + 0x87, 0xbd, 0x47, 0x86, 0xb2, 0xcf, 0x91, 0x7f, 0x0d, 0x0f, 0x22, 0xed, 0x82, 0xf0, 0xc7, 0x2e, + 0x4c, 0xde, 0x05, 0x7d, 0x54, 0xbe, 0xa8, 0xd7, 0xb0, 0xa4, 0xd7, 0xe7, 0x42, 0xf4, 0x22, 0x71, + 0xa4, 0x5f, 0x15, 0xf4, 0x0a, 0xbc, 0xae, 0x86, 0xb2, 0xcf, 0xf1, 0xe0, 0xcb, 0xa7, 0x70, 0xff, + 0x47, 0x22, 0x2a, 0x5a, 0xc9, 0x19, 0x48, 0x95, 0x64, 0x9e, 0x70, 0x3d, 0x8b, 0x90, 0x2c, 0xdb, + 0x35, 0xf2, 0x03, 0x3d, 0xe4, 0x17, 0xa9, 0x99, 0x91, 0xd9, 0xcf, 0x53, 0x9f, 0x84, 0x54, 0x61, + 0xa7, 0xde, 0xa8, 0xb5, 0x91, 0xc5, 0xce, 0xec, 0xd9, 0x16, 0x3a, 0xc6, 0x18, 0x1e, 0x2d, 0x53, + 0x80, 0xb1, 0xb2, 0x6d, 0xe5, 0x77, 0xdd, 0x60, 0xdd, 0x98, 0x93, 0x52, 0x84, 0x9d, 0xf9, 0x90, + 0xbf, 0x03, 0xc1, 0x0c, 0xf9, 0xbe, 0xef, 0xbf, 0x34, 0xad, 0x6c, 0x78, 0xfb, 0xe7, 0x2b, 0x70, + 0x84, 0xa5, 0x4f, 0x97, 0xa8, 0x85, 0x28, 0x51, 0x03, 0xec, 0x9c, 0x3a, 0x20, 0x6e, 0x09, 0x8b, + 0xb3, 0x42, 0xc5, 0xbd, 0x31, 0xcd, 0x70, 0x53, 0xb4, 0xa7, 0x66, 0xea, 0xbe, 0x34, 0x0b, 0x15, + 0x37, 0x17, 0x25, 0x4e, 0xd2, 0xec, 0x4e, 0x18, 0xf0, 0x68, 0x81, 0x68, 0x08, 0x66, 0xca, 0xc2, + 0x6c, 0x06, 0x06, 0x03, 0x09, 0xab, 0xf7, 0x81, 0x92, 0xd3, 0x0e, 0xe0, 0xff, 0xf2, 0x9a, 0x82, + 0xff, 0x2b, 0x68, 0x89, 0xd9, 0xbb, 0x60, 0x54, 0xda, 0xbf, 0xc4, 0x94, 0xa2, 0x06, 0xf8, 0xbf, + 0x92, 0x36, 0x38, 0x99, 0xfc, 0xd0, 0x67, 0xa7, 0x0e, 0xcc, 0x5e, 0x02, 0xbd, 0x7b, 0xa7, 0x53, + 0xef, 0x87, 0x44, 0x0e, 0x8b, 0x3c, 0x02, 0x89, 0x7c, 0x5e, 0x53, 0x26, 0x47, 0x7f, 0xf5, 0x93, + 0xc7, 0x06, 0xf3, 0xe4, 0x8f, 0xb6, 0xaf, 0x21, 0x37, 0x9f, 0x67, 0xe0, 0x07, 0xe1, 0x70, 0xe8, + 0x4e, 0x29, 0xc6, 0x17, 0x0a, 0x14, 0x5f, 0x2c, 0x76, 0xe1, 0x8b, 0x45, 0x82, 0x57, 0xb2, 0xfc, + 0xc4, 0x39, 0xa7, 0x87, 0xec, 0x32, 0xa6, 0x6b, 0x81, 0x13, 0xee, 0x5c, 0xf6, 0x41, 0xc6, 0x9b, + 0x0f, 0xe5, 0x45, 0x11, 0x27, 0xd6, 0xf9, 0x6c, 0x81, 0xe1, 0x0b, 0xa1, 0xf8, 0x2d, 0xe9, 0x58, + 0x55, 0x5c, 0x21, 0x98, 0x90, 0x82, 0xa7, 0x70, 0x31, 0x54, 0xc8, 0x4e, 0xe0, 0xb2, 0x7b, 0xd1, + 0x53, 0xb8, 0x14, 0xca, 0x5b, 0x8f, 0xb8, 0xf4, 0x55, 0xca, 0x9e, 0x62, 0x8b, 0x7c, 0xee, 0xb4, + 0x7e, 0x98, 0xe7, 0xa8, 0x50, 0x81, 0x99, 0x81, 0x38, 0x57, 0xb6, 0xc0, 0x00, 0xf9, 0x9e, 0x80, + 0xde, 0x56, 0xe2, 0xc8, 0xec, 0xc3, 0x4c, 0x48, 0xa1, 0xa7, 0x90, 0x08, 0x53, 0x71, 0x78, 0x7e, + 0xe3, 0xc6, 0xcb, 0x53, 0x07, 0x5e, 0x7c, 0x79, 0xea, 0xc0, 0x3f, 0xbc, 0x3c, 0x75, 0xe0, 0x07, + 0x2f, 0x4f, 0x29, 0x3f, 0x7a, 0x79, 0x4a, 0xf9, 0xc9, 0xcb, 0x53, 0xca, 0xcf, 0x5e, 0x9e, 0x52, + 0x9e, 0xb9, 0x39, 0xa5, 0x3c, 0x7f, 0x73, 0x4a, 0xf9, 0xf2, 0xcd, 0x29, 0xe5, 0x1b, 0x37, 0xa7, + 0x94, 0x17, 0x6e, 0x4e, 0x29, 0x37, 0x6e, 0x4e, 0x29, 0x2f, 0xde, 0x9c, 0x52, 0x7e, 0x70, 0x73, + 0x4a, 0xf9, 0xd1, 0xcd, 0xa9, 0x03, 0x3f, 0xb9, 0x39, 0xa5, 0xfc, 0xec, 0xe6, 0xd4, 0x81, 0x67, + 0x5e, 0x99, 0x3a, 0xf0, 0xdc, 0x2b, 0x53, 0x07, 0x9e, 0x7f, 0x65, 0x4a, 0xf9, 0xef, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xb3, 0x75, 0x57, 0xed, 0xe5, 0x68, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -28281,6 +28286,9 @@ return dAtA } func (m *NidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -28309,6 +28317,9 @@ } func (m *NinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -28365,6 +28376,9 @@ } func (m *NidRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28437,6 +28451,9 @@ } func (m *NinRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28509,6 +28526,9 @@ } func (m *NidRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28581,6 +28601,9 @@ } func (m *NinRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28653,6 +28676,9 @@ } func (m *NidOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -28679,6 +28705,9 @@ } func (m *NinOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -28723,6 +28752,9 @@ } func (m *NidRepStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28781,6 +28813,9 @@ } func (m *NinRepStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28839,6 +28874,9 @@ } func (m *NidEmbeddedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -28855,6 +28893,9 @@ } func (m *NinEmbeddedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -28875,6 +28916,9 @@ } func (m *NidNestedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Field1.Size() @@ -28892,6 +28936,9 @@ } func (m *NinNestedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -28911,6 +28958,9 @@ } func (m *NidOptCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Id.Size() @@ -28924,6 +28974,9 @@ } func (m *CustomDash) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != nil { @@ -28937,6 +28990,9 @@ } func (m *NinOptCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Id != nil { @@ -28954,6 +29010,9 @@ } func (m *NidRepCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Id) > 0 { @@ -28975,6 +29034,9 @@ } func (m *NinRepCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Id) > 0 { @@ -28996,6 +29058,9 @@ } func (m *NinOptNativeUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29034,6 +29099,9 @@ } func (m *NinOptStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29074,6 +29142,9 @@ } func (m *NinEmbeddedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -29094,6 +29165,9 @@ } func (m *NinNestedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29115,6 +29189,9 @@ } func (m *Tree) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Or != nil { @@ -29136,6 +29213,9 @@ } func (m *OrBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -29149,6 +29229,9 @@ } func (m *AndBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -29162,6 +29245,9 @@ } func (m *Leaf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovThetest(uint64(m.Value)) @@ -29174,6 +29260,9 @@ } func (m *DeepTree) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Down != nil { @@ -29195,6 +29284,9 @@ } func (m *ADeepBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Down.Size() @@ -29206,6 +29298,9 @@ } func (m *AndDeepBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -29219,6 +29314,9 @@ } func (m *DeepLeaf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Tree.Size() @@ -29230,6 +29328,9 @@ } func (m *Nil) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -29239,6 +29340,9 @@ } func (m *NidOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovThetest(uint64(m.Field1)) @@ -29249,6 +29353,9 @@ } func (m *NinOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29267,6 +29374,9 @@ } func (m *NidRepEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -29291,6 +29401,9 @@ } func (m *NinRepEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -29315,6 +29428,9 @@ } func (m *NinOptEnumDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29333,6 +29449,9 @@ } func (m *AnotherNinOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29351,6 +29470,9 @@ } func (m *AnotherNinOptEnumDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29369,6 +29491,9 @@ } func (m *Timer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -29384,6 +29509,9 @@ } func (m *MyExtendable) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29397,6 +29525,9 @@ } func (m *OtherExtenable) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.M != nil { @@ -29417,6 +29548,9 @@ } func (m *NestedDefinition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29440,6 +29574,9 @@ } func (m *NestedDefinition_NestedMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NestedField1 != nil { @@ -29456,6 +29593,9 @@ } func (m *NestedDefinition_NestedMessage_NestedNestedMsg) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NestedNestedField1 != nil { @@ -29469,6 +29609,9 @@ } func (m *NestedScope) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.A != nil { @@ -29489,6 +29632,9 @@ } func (m *NinOptNativeDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29545,6 +29691,9 @@ } func (m *CustomContainer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.CustomStruct.Size() @@ -29556,6 +29705,9 @@ } func (m *CustomNameNidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -29584,6 +29736,9 @@ } func (m *CustomNameNinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -29640,6 +29795,9 @@ } func (m *CustomNameNinRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.FieldA) > 0 { @@ -29712,6 +29870,9 @@ } func (m *CustomNameNinStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -29758,6 +29919,9 @@ } func (m *CustomNameCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -29787,6 +29951,9 @@ } func (m *CustomNameNinEmbeddedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -29807,6 +29974,9 @@ } func (m *CustomNameEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -29824,6 +29994,9 @@ } func (m *NoExtensionsMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29839,6 +30012,9 @@ } func (m *Unrecognized) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29849,6 +30025,9 @@ } func (m *UnrecognizedWithInner) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Embedded) > 0 { @@ -29868,6 +30047,9 @@ } func (m *UnrecognizedWithInner_Inner) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29877,6 +30059,9 @@ } func (m *UnrecognizedWithEmbed) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.UnrecognizedWithEmbed_Embedded.Size() @@ -29892,6 +30077,9 @@ } func (m *UnrecognizedWithEmbed_Embedded) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29901,6 +30089,9 @@ } func (m *Node) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Label != nil { @@ -29920,6 +30111,9 @@ } func (m *NonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29933,6 +30127,9 @@ } func (m *NidOptNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Field1.Size() @@ -29944,6 +30141,9 @@ } func (m *NinOptNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29957,6 +30157,9 @@ } func (m *NidRepNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -29972,6 +30175,9 @@ } func (m *NinRepNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -29987,6 +30193,9 @@ } func (m *ProtoType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field2 != nil { @@ -31971,8 +32180,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -32020,8 +32231,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -32077,6 +32290,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -32139,6 +32363,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -32201,6 +32436,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -32263,6 +32509,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -32326,6 +32583,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -32390,6 +32658,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -32444,8 +32723,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -32491,8 +32772,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -32538,8 +32821,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -32585,8 +32870,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -32641,6 +32928,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -32804,8 +33096,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -32853,8 +33147,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -32910,6 +33206,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -32972,6 +33279,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -33034,6 +33352,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -33096,6 +33425,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -33159,6 +33499,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -33223,6 +33574,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -33277,8 +33639,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -33324,8 +33688,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -33371,8 +33737,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -33418,8 +33786,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -33474,6 +33844,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -33637,8 +34012,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -33686,8 +34063,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -33743,6 +34122,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -33805,6 +34195,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -33867,6 +34268,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -33929,6 +34341,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -33992,6 +34415,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -34056,6 +34490,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -34110,8 +34555,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -34157,8 +34604,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -34204,8 +34653,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -34251,8 +34702,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -34307,6 +34760,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -34412,8 +34870,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -34461,8 +34921,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -34518,6 +34980,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -34580,6 +35053,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -34642,6 +35126,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -34704,6 +35199,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -34767,6 +35273,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -34831,6 +35348,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -34885,8 +35413,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -34932,8 +35462,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -34979,8 +35511,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -35026,8 +35560,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -35082,6 +35618,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -35767,8 +36308,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -35816,8 +36359,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -35935,6 +36480,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -35998,6 +36554,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -36092,6 +36659,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -36255,8 +36827,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -36304,8 +36878,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -36423,6 +36999,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -36486,6 +37073,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -36580,6 +37178,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -39704,6 +40307,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]TheTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v TheTestEnum for shift := uint(0); ; shift += 7 { @@ -39766,6 +40373,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]YetAnotherTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v YetAnotherTestEnum for shift := uint(0); ; shift += 7 { @@ -39828,6 +40439,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]YetYetAnotherTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v YetYetAnotherTestEnum for shift := uint(0); ; shift += 7 { @@ -39941,6 +40556,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]TheTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v TheTestEnum for shift := uint(0); ; shift += 7 { @@ -40003,6 +40622,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]YetAnotherTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v YetAnotherTestEnum for shift := uint(0); ; shift += 7 { @@ -40065,6 +40688,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]YetYetAnotherTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v YetYetAnotherTestEnum for shift := uint(0); ; shift += 7 { @@ -42358,8 +42985,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldA) == 0 { - m.FieldA = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.FieldA) == 0 { + m.FieldA = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -42407,8 +43036,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldB) == 0 { - m.FieldB = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.FieldB) == 0 { + m.FieldB = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -42464,6 +43095,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldC) == 0 { + m.FieldC = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -42526,6 +43168,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldD) == 0 { + m.FieldD = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -42588,6 +43241,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldE) == 0 { + m.FieldE = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -42650,6 +43314,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldF) == 0 { + m.FieldF = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -42713,6 +43388,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldG) == 0 { + m.FieldG = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -42777,6 +43463,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldH) == 0 { + m.FieldH = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -42831,8 +43528,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldI) == 0 { - m.FieldI = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.FieldI) == 0 { + m.FieldI = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -42878,8 +43577,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldJ) == 0 { - m.FieldJ = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.FieldJ) == 0 { + m.FieldJ = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -42925,8 +43626,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldK) == 0 { - m.FieldK = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.FieldK) == 0 { + m.FieldK = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -42972,8 +43675,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldL) == 0 { - m.FieldL = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.FieldL) == 0 { + m.FieldL = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -43028,6 +43733,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.FieldM) == 0 { + m.FieldM = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -43831,6 +44541,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.FieldB) == 0 { + m.FieldB = make([]TheTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v TheTestEnum for shift := uint(0); ; shift += 7 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/combos/marshaler/thetest.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/combos/marshaler/thetest.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/combos/marshaler/thetest.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/combos/marshaler/thetest.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -8934,423 +8934,428 @@ func ThetestDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 6649 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x7b, 0x6c, 0x1c, 0xd7, - 0x79, 0x2f, 0x67, 0x67, 0x49, 0x2d, 0x3f, 0xbe, 0x86, 0x43, 0x89, 0x5a, 0xd3, 0xf2, 0x52, 0x5a, - 0xcb, 0x32, 0xcd, 0xd8, 0x14, 0x45, 0x51, 0xaf, 0x55, 0x6c, 0xdf, 0x7d, 0x49, 0xa6, 0x42, 0x2e, - 0x99, 0x21, 0x19, 0x5b, 0xc9, 0xbd, 0x58, 0x8c, 0x76, 0x0f, 0xc9, 0xb5, 0x77, 0x67, 0x36, 0x3b, - 0x43, 0xdb, 0x34, 0x2e, 0x2e, 0x7c, 0x93, 0x7b, 0x73, 0x93, 0x7b, 0x71, 0xfb, 0x4a, 0x8b, 0x26, - 0x69, 0xe2, 0x38, 0x2d, 0xd2, 0x38, 0xe9, 0x2b, 0x69, 0xd2, 0x34, 0x09, 0x8a, 0xc6, 0xff, 0xa4, - 0x55, 0x81, 0xa2, 0x70, 0xfa, 0x57, 0x11, 0x14, 0x46, 0x2c, 0x07, 0x68, 0xda, 0xba, 0x4d, 0x9a, - 0x1a, 0x68, 0x00, 0xe7, 0x8f, 0xe2, 0xbc, 0x66, 0xe6, 0x9c, 0x9d, 0xe5, 0x0c, 0x2d, 0xdb, 0xc9, - 0x3f, 0xd2, 0xee, 0xf9, 0xbe, 0xdf, 0x37, 0xdf, 0xf9, 0x5e, 0xe7, 0x9b, 0x73, 0x0e, 0x17, 0x7e, - 0x74, 0x09, 0x8e, 0x6f, 0xdb, 0xf6, 0x76, 0x13, 0x9d, 0x6e, 0x77, 0x6c, 0xd7, 0xbe, 0xb1, 0xbb, - 0x75, 0xba, 0x8e, 0x9c, 0x5a, 0xa7, 0xd1, 0x76, 0xed, 0xce, 0x1c, 0x19, 0xd3, 0xc7, 0x28, 0xc7, - 0x1c, 0xe7, 0xc8, 0xae, 0xc0, 0xf8, 0x95, 0x46, 0x13, 0x95, 0x3c, 0xc6, 0x75, 0xe4, 0xea, 0x17, - 0x21, 0xb9, 0xd5, 0x68, 0xa2, 0xb4, 0x72, 0x5c, 0x9d, 0x19, 0x5a, 0x38, 0x39, 0x27, 0x81, 0xe6, - 0x44, 0xc4, 0x1a, 0x1e, 0x36, 0x08, 0x22, 0xfb, 0x83, 0x24, 0x4c, 0x84, 0x50, 0x75, 0x1d, 0x92, - 0x96, 0xd9, 0xc2, 0x12, 0x95, 0x99, 0x41, 0x83, 0x7c, 0xd6, 0xd3, 0x70, 0xa8, 0x6d, 0xd6, 0x9e, - 0x30, 0xb7, 0x51, 0x3a, 0x41, 0x86, 0xf9, 0x57, 0x3d, 0x03, 0x50, 0x47, 0x6d, 0x64, 0xd5, 0x91, - 0x55, 0xdb, 0x4b, 0xab, 0xc7, 0xd5, 0x99, 0x41, 0x23, 0x30, 0xa2, 0xbf, 0x0b, 0xc6, 0xdb, 0xbb, - 0x37, 0x9a, 0x8d, 0x5a, 0x35, 0xc0, 0x06, 0xc7, 0xd5, 0x99, 0x7e, 0x43, 0xa3, 0x84, 0x92, 0xcf, - 0x7c, 0x2f, 0x8c, 0x3d, 0x85, 0xcc, 0x27, 0x82, 0xac, 0x43, 0x84, 0x75, 0x14, 0x0f, 0x07, 0x18, - 0x8b, 0x30, 0xdc, 0x42, 0x8e, 0x63, 0x6e, 0xa3, 0xaa, 0xbb, 0xd7, 0x46, 0xe9, 0x24, 0x99, 0xfd, - 0xf1, 0xae, 0xd9, 0xcb, 0x33, 0x1f, 0x62, 0xa8, 0x8d, 0xbd, 0x36, 0xd2, 0xf3, 0x30, 0x88, 0xac, - 0xdd, 0x16, 0x95, 0xd0, 0xdf, 0xc3, 0x7e, 0x65, 0x6b, 0xb7, 0x25, 0x4b, 0x49, 0x61, 0x18, 0x13, - 0x71, 0xc8, 0x41, 0x9d, 0x27, 0x1b, 0x35, 0x94, 0x1e, 0x20, 0x02, 0xee, 0xed, 0x12, 0xb0, 0x4e, - 0xe9, 0xb2, 0x0c, 0x8e, 0xd3, 0x8b, 0x30, 0x88, 0x9e, 0x76, 0x91, 0xe5, 0x34, 0x6c, 0x2b, 0x7d, - 0x88, 0x08, 0xb9, 0x27, 0xc4, 0x8b, 0xa8, 0x59, 0x97, 0x45, 0xf8, 0x38, 0xfd, 0x3c, 0x1c, 0xb2, - 0xdb, 0x6e, 0xc3, 0xb6, 0x9c, 0x74, 0xea, 0xb8, 0x32, 0x33, 0xb4, 0x70, 0x2c, 0x34, 0x10, 0x56, - 0x29, 0x8f, 0xc1, 0x99, 0xf5, 0x25, 0xd0, 0x1c, 0x7b, 0xb7, 0x53, 0x43, 0xd5, 0x9a, 0x5d, 0x47, - 0xd5, 0x86, 0xb5, 0x65, 0xa7, 0x07, 0x89, 0x80, 0xe9, 0xee, 0x89, 0x10, 0xc6, 0xa2, 0x5d, 0x47, - 0x4b, 0xd6, 0x96, 0x6d, 0x8c, 0x3a, 0xc2, 0x77, 0x7d, 0x12, 0x06, 0x9c, 0x3d, 0xcb, 0x35, 0x9f, - 0x4e, 0x0f, 0x93, 0x08, 0x61, 0xdf, 0xb2, 0xdf, 0x1c, 0x80, 0xb1, 0x38, 0x21, 0x76, 0x19, 0xfa, - 0xb7, 0xf0, 0x2c, 0xd3, 0x89, 0x83, 0xd8, 0x80, 0x62, 0x44, 0x23, 0x0e, 0xbc, 0x49, 0x23, 0xe6, - 0x61, 0xc8, 0x42, 0x8e, 0x8b, 0xea, 0x34, 0x22, 0xd4, 0x98, 0x31, 0x05, 0x14, 0xd4, 0x1d, 0x52, - 0xc9, 0x37, 0x15, 0x52, 0x8f, 0xc1, 0x98, 0xa7, 0x52, 0xb5, 0x63, 0x5a, 0xdb, 0x3c, 0x36, 0x4f, - 0x47, 0x69, 0x32, 0x57, 0xe6, 0x38, 0x03, 0xc3, 0x8c, 0x51, 0x24, 0x7c, 0xd7, 0x4b, 0x00, 0xb6, - 0x85, 0xec, 0xad, 0x6a, 0x1d, 0xd5, 0x9a, 0xe9, 0x54, 0x0f, 0x2b, 0xad, 0x62, 0x96, 0x2e, 0x2b, - 0xd9, 0x74, 0xb4, 0xd6, 0xd4, 0x2f, 0xf9, 0xa1, 0x76, 0xa8, 0x47, 0xa4, 0xac, 0xd0, 0x24, 0xeb, - 0x8a, 0xb6, 0x4d, 0x18, 0xed, 0x20, 0x1c, 0xf7, 0xa8, 0xce, 0x66, 0x36, 0x48, 0x94, 0x98, 0x8b, - 0x9c, 0x99, 0xc1, 0x60, 0x74, 0x62, 0x23, 0x9d, 0xe0, 0x57, 0xfd, 0x6e, 0xf0, 0x06, 0xaa, 0x24, - 0xac, 0x80, 0x54, 0xa1, 0x61, 0x3e, 0x58, 0x31, 0x5b, 0x68, 0xea, 0x19, 0x18, 0x15, 0xcd, 0xa3, - 0x1f, 0x86, 0x7e, 0xc7, 0x35, 0x3b, 0x2e, 0x89, 0xc2, 0x7e, 0x83, 0x7e, 0xd1, 0x35, 0x50, 0x91, - 0x55, 0x27, 0x55, 0xae, 0xdf, 0xc0, 0x1f, 0xf5, 0xff, 0xe2, 0x4f, 0x58, 0x25, 0x13, 0x3e, 0xd5, - 0xed, 0x51, 0x41, 0xb2, 0x3c, 0xef, 0xa9, 0x0b, 0x30, 0x22, 0x4c, 0x20, 0xee, 0xa3, 0xb3, 0xff, - 0x1d, 0x8e, 0x84, 0x8a, 0xd6, 0x1f, 0x83, 0xc3, 0xbb, 0x56, 0xc3, 0x72, 0x51, 0xa7, 0xdd, 0x41, - 0x38, 0x62, 0xe9, 0xa3, 0xd2, 0xff, 0x70, 0xa8, 0x47, 0xcc, 0x6d, 0x06, 0xb9, 0xa9, 0x14, 0x63, - 0x62, 0xb7, 0x7b, 0x70, 0x76, 0x30, 0xf5, 0xc3, 0x43, 0xda, 0xb3, 0xcf, 0x3e, 0xfb, 0x6c, 0x22, - 0xfb, 0x89, 0x01, 0x38, 0x1c, 0x96, 0x33, 0xa1, 0xe9, 0x3b, 0x09, 0x03, 0xd6, 0x6e, 0xeb, 0x06, - 0xea, 0x10, 0x23, 0xf5, 0x1b, 0xec, 0x9b, 0x9e, 0x87, 0xfe, 0xa6, 0x79, 0x03, 0x35, 0xd3, 0xc9, - 0xe3, 0xca, 0xcc, 0xe8, 0xc2, 0xbb, 0x62, 0x65, 0xe5, 0xdc, 0x32, 0x86, 0x18, 0x14, 0xa9, 0x3f, - 0x04, 0x49, 0x56, 0xa2, 0xb1, 0x84, 0xd9, 0x78, 0x12, 0x70, 0x2e, 0x19, 0x04, 0xa7, 0xdf, 0x09, - 0x83, 0xf8, 0x7f, 0x1a, 0x1b, 0x03, 0x44, 0xe7, 0x14, 0x1e, 0xc0, 0x71, 0xa1, 0x4f, 0x41, 0x8a, - 0xa4, 0x49, 0x1d, 0xf1, 0xa5, 0xcd, 0xfb, 0x8e, 0x03, 0xab, 0x8e, 0xb6, 0xcc, 0xdd, 0xa6, 0x5b, - 0x7d, 0xd2, 0x6c, 0xee, 0x22, 0x12, 0xf0, 0x83, 0xc6, 0x30, 0x1b, 0x7c, 0x1f, 0x1e, 0xd3, 0xa7, - 0x61, 0x88, 0x66, 0x55, 0xc3, 0xaa, 0xa3, 0xa7, 0x49, 0xf5, 0xec, 0x37, 0x68, 0xa2, 0x2d, 0xe1, - 0x11, 0xfc, 0xf8, 0xc7, 0x1d, 0xdb, 0xe2, 0xa1, 0x49, 0x1e, 0x81, 0x07, 0xc8, 0xe3, 0x2f, 0xc8, - 0x85, 0xfb, 0xae, 0xf0, 0xe9, 0xc9, 0x31, 0x95, 0xfd, 0x7a, 0x02, 0x92, 0xa4, 0x5e, 0x8c, 0xc1, - 0xd0, 0xc6, 0xf5, 0xb5, 0x72, 0xb5, 0xb4, 0xba, 0x59, 0x58, 0x2e, 0x6b, 0x8a, 0x3e, 0x0a, 0x40, - 0x06, 0xae, 0x2c, 0xaf, 0xe6, 0x37, 0xb4, 0x84, 0xf7, 0x7d, 0xa9, 0xb2, 0x71, 0x7e, 0x51, 0x53, - 0x3d, 0xc0, 0x26, 0x1d, 0x48, 0x06, 0x19, 0xce, 0x2e, 0x68, 0xfd, 0xba, 0x06, 0xc3, 0x54, 0xc0, - 0xd2, 0x63, 0xe5, 0xd2, 0xf9, 0x45, 0x6d, 0x40, 0x1c, 0x39, 0xbb, 0xa0, 0x1d, 0xd2, 0x47, 0x60, - 0x90, 0x8c, 0x14, 0x56, 0x57, 0x97, 0xb5, 0x94, 0x27, 0x73, 0x7d, 0xc3, 0x58, 0xaa, 0x5c, 0xd5, - 0x06, 0x3d, 0x99, 0x57, 0x8d, 0xd5, 0xcd, 0x35, 0x0d, 0x3c, 0x09, 0x2b, 0xe5, 0xf5, 0xf5, 0xfc, - 0xd5, 0xb2, 0x36, 0xe4, 0x71, 0x14, 0xae, 0x6f, 0x94, 0xd7, 0xb5, 0x61, 0x41, 0xad, 0xb3, 0x0b, - 0xda, 0x88, 0xf7, 0x88, 0x72, 0x65, 0x73, 0x45, 0x1b, 0xd5, 0xc7, 0x61, 0x84, 0x3e, 0x82, 0x2b, - 0x31, 0x26, 0x0d, 0x9d, 0x5f, 0xd4, 0x34, 0x5f, 0x11, 0x2a, 0x65, 0x5c, 0x18, 0x38, 0xbf, 0xa8, - 0xe9, 0xd9, 0x22, 0xf4, 0x93, 0xe8, 0xd2, 0x75, 0x18, 0x5d, 0xce, 0x17, 0xca, 0xcb, 0xd5, 0xd5, - 0xb5, 0x8d, 0xa5, 0xd5, 0x4a, 0x7e, 0x59, 0x53, 0xfc, 0x31, 0xa3, 0xfc, 0xde, 0xcd, 0x25, 0xa3, - 0x5c, 0xd2, 0x12, 0xc1, 0xb1, 0xb5, 0x72, 0x7e, 0xa3, 0x5c, 0xd2, 0xd4, 0x6c, 0x0d, 0x0e, 0x87, - 0xd5, 0xc9, 0xd0, 0xcc, 0x08, 0xb8, 0x38, 0xd1, 0xc3, 0xc5, 0x44, 0x56, 0x97, 0x8b, 0x5f, 0x4d, - 0xc0, 0x44, 0xc8, 0x5a, 0x11, 0xfa, 0x90, 0x87, 0xa1, 0x9f, 0x86, 0x28, 0x5d, 0x3d, 0xef, 0x0b, - 0x5d, 0x74, 0x48, 0xc0, 0x76, 0xad, 0xa0, 0x04, 0x17, 0xec, 0x20, 0xd4, 0x1e, 0x1d, 0x04, 0x16, - 0xd1, 0x55, 0xd3, 0xff, 0x5b, 0x57, 0x4d, 0xa7, 0xcb, 0xde, 0xf9, 0x38, 0xcb, 0x1e, 0x19, 0x3b, - 0x58, 0x6d, 0xef, 0x0f, 0xa9, 0xed, 0x97, 0x61, 0xbc, 0x4b, 0x50, 0xec, 0x1a, 0xfb, 0x61, 0x05, - 0xd2, 0xbd, 0x8c, 0x13, 0x51, 0xe9, 0x12, 0x42, 0xa5, 0xbb, 0x2c, 0x5b, 0xf0, 0x44, 0x6f, 0x27, - 0x74, 0xf9, 0xfa, 0x0b, 0x0a, 0x4c, 0x86, 0x77, 0x8a, 0xa1, 0x3a, 0x3c, 0x04, 0x03, 0x2d, 0xe4, - 0xee, 0xd8, 0xbc, 0x5b, 0x3a, 0x15, 0xb2, 0x06, 0x63, 0xb2, 0xec, 0x6c, 0x86, 0x0a, 0x2e, 0xe2, - 0x6a, 0xaf, 0x76, 0x8f, 0x6a, 0xd3, 0xa5, 0xe9, 0xc7, 0x12, 0x70, 0x24, 0x54, 0x78, 0xa8, 0xa2, - 0x77, 0x01, 0x34, 0xac, 0xf6, 0xae, 0x4b, 0x3b, 0x22, 0x5a, 0x60, 0x07, 0xc9, 0x08, 0x29, 0x5e, - 0xb8, 0x78, 0xee, 0xba, 0x1e, 0x5d, 0x25, 0x74, 0xa0, 0x43, 0x84, 0xe1, 0xa2, 0xaf, 0x68, 0x92, - 0x28, 0x9a, 0xe9, 0x31, 0xd3, 0xae, 0xc0, 0x9c, 0x07, 0xad, 0xd6, 0x6c, 0x20, 0xcb, 0xad, 0x3a, - 0x6e, 0x07, 0x99, 0xad, 0x86, 0xb5, 0x4d, 0x56, 0x90, 0x54, 0xae, 0x7f, 0xcb, 0x6c, 0x3a, 0xc8, - 0x18, 0xa3, 0xe4, 0x75, 0x4e, 0xc5, 0x08, 0x12, 0x40, 0x9d, 0x00, 0x62, 0x40, 0x40, 0x50, 0xb2, - 0x87, 0xc8, 0x7e, 0x35, 0x05, 0x43, 0x81, 0xbe, 0x5a, 0x3f, 0x01, 0xc3, 0x8f, 0x9b, 0x4f, 0x9a, - 0x55, 0xfe, 0xae, 0x44, 0x2d, 0x31, 0x84, 0xc7, 0xd6, 0xd8, 0xfb, 0xd2, 0x3c, 0x1c, 0x26, 0x2c, - 0xf6, 0xae, 0x8b, 0x3a, 0xd5, 0x5a, 0xd3, 0x74, 0x1c, 0x62, 0xb4, 0x14, 0x61, 0xd5, 0x31, 0x6d, - 0x15, 0x93, 0x8a, 0x9c, 0xa2, 0x9f, 0x83, 0x09, 0x82, 0x68, 0xed, 0x36, 0xdd, 0x46, 0xbb, 0x89, - 0xaa, 0xf8, 0xed, 0xcd, 0x21, 0x2b, 0x89, 0xa7, 0xd9, 0x38, 0xe6, 0x58, 0x61, 0x0c, 0x58, 0x23, - 0x47, 0x2f, 0xc1, 0x5d, 0x04, 0xb6, 0x8d, 0x2c, 0xd4, 0x31, 0x5d, 0x54, 0x45, 0x1f, 0xdc, 0x35, - 0x9b, 0x4e, 0xd5, 0xb4, 0xea, 0xd5, 0x1d, 0xd3, 0xd9, 0x49, 0x1f, 0xc6, 0x02, 0x0a, 0x89, 0xb4, - 0x62, 0xdc, 0x81, 0x19, 0xaf, 0x32, 0xbe, 0x32, 0x61, 0xcb, 0x5b, 0xf5, 0x47, 0x4c, 0x67, 0x47, - 0xcf, 0xc1, 0x24, 0x91, 0xe2, 0xb8, 0x9d, 0x86, 0xb5, 0x5d, 0xad, 0xed, 0xa0, 0xda, 0x13, 0xd5, - 0x5d, 0x77, 0xeb, 0x62, 0xfa, 0xce, 0xe0, 0xf3, 0x89, 0x86, 0xeb, 0x84, 0xa7, 0x88, 0x59, 0x36, - 0xdd, 0xad, 0x8b, 0xfa, 0x3a, 0x0c, 0x63, 0x67, 0xb4, 0x1a, 0xcf, 0xa0, 0xea, 0x96, 0xdd, 0x21, - 0x4b, 0xe3, 0x68, 0x48, 0x69, 0x0a, 0x58, 0x70, 0x6e, 0x95, 0x01, 0x56, 0xec, 0x3a, 0xca, 0xf5, - 0xaf, 0xaf, 0x95, 0xcb, 0x25, 0x63, 0x88, 0x4b, 0xb9, 0x62, 0x77, 0x70, 0x40, 0x6d, 0xdb, 0x9e, - 0x81, 0x87, 0x68, 0x40, 0x6d, 0xdb, 0xdc, 0xbc, 0xe7, 0x60, 0xa2, 0x56, 0xa3, 0x73, 0x6e, 0xd4, - 0xaa, 0xec, 0x1d, 0xcb, 0x49, 0x6b, 0x82, 0xb1, 0x6a, 0xb5, 0xab, 0x94, 0x81, 0xc5, 0xb8, 0xa3, - 0x5f, 0x82, 0x23, 0xbe, 0xb1, 0x82, 0xc0, 0xf1, 0xae, 0x59, 0xca, 0xd0, 0x73, 0x30, 0xd1, 0xde, - 0xeb, 0x06, 0xea, 0xc2, 0x13, 0xdb, 0x7b, 0x32, 0xec, 0x02, 0x1c, 0x6e, 0xef, 0xb4, 0xbb, 0x71, - 0xb3, 0x41, 0x9c, 0xde, 0xde, 0x69, 0xcb, 0xc0, 0x7b, 0xc8, 0x0b, 0x77, 0x07, 0xd5, 0x4c, 0x17, - 0xd5, 0xd3, 0x47, 0x83, 0xec, 0x01, 0x82, 0x7e, 0x1a, 0xb4, 0x5a, 0xad, 0x8a, 0x2c, 0xf3, 0x46, - 0x13, 0x55, 0xcd, 0x0e, 0xb2, 0x4c, 0x27, 0x3d, 0x1d, 0x64, 0x1e, 0xad, 0xd5, 0xca, 0x84, 0x9a, - 0x27, 0x44, 0x7d, 0x16, 0xc6, 0xed, 0x1b, 0x8f, 0xd7, 0x68, 0x48, 0x56, 0xdb, 0x1d, 0xb4, 0xd5, - 0x78, 0x3a, 0x7d, 0x92, 0xd8, 0x77, 0x0c, 0x13, 0x48, 0x40, 0xae, 0x91, 0x61, 0xfd, 0x3e, 0xd0, - 0x6a, 0xce, 0x8e, 0xd9, 0x69, 0x93, 0x9a, 0xec, 0xb4, 0xcd, 0x1a, 0x4a, 0xdf, 0x43, 0x59, 0xe9, - 0x78, 0x85, 0x0f, 0xe3, 0x94, 0x70, 0x9e, 0x6a, 0x6c, 0xb9, 0x5c, 0xe2, 0xbd, 0x34, 0x25, 0xc8, - 0x18, 0x93, 0x36, 0x03, 0x1a, 0x36, 0x85, 0xf0, 0xe0, 0x19, 0xc2, 0x36, 0xda, 0xde, 0x69, 0x07, - 0x9f, 0x7b, 0x37, 0x8c, 0x60, 0x4e, 0xff, 0xa1, 0xf7, 0xd1, 0x86, 0xac, 0xbd, 0x13, 0x78, 0xe2, - 0xdb, 0xd6, 0x1b, 0x67, 0x73, 0x30, 0x1c, 0x8c, 0x4f, 0x7d, 0x10, 0x68, 0x84, 0x6a, 0x0a, 0x6e, - 0x56, 0x8a, 0xab, 0x25, 0xdc, 0x66, 0xbc, 0xbf, 0xac, 0x25, 0x70, 0xbb, 0xb3, 0xbc, 0xb4, 0x51, - 0xae, 0x1a, 0x9b, 0x95, 0x8d, 0xa5, 0x95, 0xb2, 0xa6, 0x06, 0xfb, 0xea, 0xef, 0x24, 0x60, 0x54, - 0x7c, 0x45, 0xd2, 0xdf, 0x0d, 0x47, 0xf9, 0x7e, 0x86, 0x83, 0xdc, 0xea, 0x53, 0x8d, 0x0e, 0x49, - 0x99, 0x96, 0x49, 0x97, 0x2f, 0xcf, 0x69, 0x87, 0x19, 0xd7, 0x3a, 0x72, 0x1f, 0x6d, 0x74, 0x70, - 0x42, 0xb4, 0x4c, 0x57, 0x5f, 0x86, 0x69, 0xcb, 0xae, 0x3a, 0xae, 0x69, 0xd5, 0xcd, 0x4e, 0xbd, - 0xea, 0xef, 0x24, 0x55, 0xcd, 0x5a, 0x0d, 0x39, 0x8e, 0x4d, 0x97, 0x2a, 0x4f, 0xca, 0x31, 0xcb, - 0x5e, 0x67, 0xcc, 0x7e, 0x0d, 0xcf, 0x33, 0x56, 0x29, 0xc0, 0xd4, 0x5e, 0x01, 0x76, 0x27, 0x0c, - 0xb6, 0xcc, 0x76, 0x15, 0x59, 0x6e, 0x67, 0x8f, 0x34, 0xc6, 0x29, 0x23, 0xd5, 0x32, 0xdb, 0x65, - 0xfc, 0xfd, 0x9d, 0x79, 0x3f, 0xf9, 0x7b, 0x15, 0x86, 0x83, 0xcd, 0x31, 0x7e, 0xd7, 0xa8, 0x91, - 0x75, 0x44, 0x21, 0x95, 0xe6, 0xee, 0x7d, 0x5b, 0xe9, 0xb9, 0x22, 0x5e, 0x60, 0x72, 0x03, 0xb4, - 0x65, 0x35, 0x28, 0x12, 0x2f, 0xee, 0xb8, 0xb6, 0x20, 0xda, 0x22, 0xa4, 0x0c, 0xf6, 0x4d, 0xbf, - 0x0a, 0x03, 0x8f, 0x3b, 0x44, 0xf6, 0x00, 0x91, 0x7d, 0x72, 0x7f, 0xd9, 0xd7, 0xd6, 0x89, 0xf0, - 0xc1, 0x6b, 0xeb, 0xd5, 0xca, 0xaa, 0xb1, 0x92, 0x5f, 0x36, 0x18, 0x5c, 0xbf, 0x03, 0x92, 0x4d, - 0xf3, 0x99, 0x3d, 0x71, 0x29, 0x22, 0x43, 0x71, 0x0d, 0x7f, 0x07, 0x24, 0x9f, 0x42, 0xe6, 0x13, - 0xe2, 0x02, 0x40, 0x86, 0xde, 0xc6, 0xd0, 0x3f, 0x0d, 0xfd, 0xc4, 0x5e, 0x3a, 0x00, 0xb3, 0x98, - 0xd6, 0xa7, 0xa7, 0x20, 0x59, 0x5c, 0x35, 0x70, 0xf8, 0x6b, 0x30, 0x4c, 0x47, 0xab, 0x6b, 0x4b, - 0xe5, 0x62, 0x59, 0x4b, 0x64, 0xcf, 0xc1, 0x00, 0x35, 0x02, 0x4e, 0x0d, 0xcf, 0x0c, 0x5a, 0x1f, - 0xfb, 0xca, 0x64, 0x28, 0x9c, 0xba, 0xb9, 0x52, 0x28, 0x1b, 0x5a, 0x22, 0xe8, 0x5e, 0x07, 0x86, - 0x83, 0x7d, 0xf1, 0x3b, 0x13, 0x53, 0xdf, 0x52, 0x60, 0x28, 0xd0, 0xe7, 0xe2, 0x06, 0xc5, 0x6c, - 0x36, 0xed, 0xa7, 0xaa, 0x66, 0xb3, 0x61, 0x3a, 0x2c, 0x28, 0x80, 0x0c, 0xe5, 0xf1, 0x48, 0x5c, - 0xa7, 0xbd, 0x23, 0xca, 0x3f, 0xa7, 0x80, 0x26, 0xb7, 0x98, 0x92, 0x82, 0xca, 0xcf, 0x55, 0xc1, - 0x4f, 0x2b, 0x30, 0x2a, 0xf6, 0x95, 0x92, 0x7a, 0x27, 0x7e, 0xae, 0xea, 0x7d, 0x3f, 0x01, 0x23, - 0x42, 0x37, 0x19, 0x57, 0xbb, 0x0f, 0xc2, 0x78, 0xa3, 0x8e, 0x5a, 0x6d, 0xdb, 0x45, 0x56, 0x6d, - 0xaf, 0xda, 0x44, 0x4f, 0xa2, 0x66, 0x3a, 0x4b, 0x0a, 0xc5, 0xe9, 0xfd, 0xfb, 0xd5, 0xb9, 0x25, - 0x1f, 0xb7, 0x8c, 0x61, 0xb9, 0x89, 0xa5, 0x52, 0x79, 0x65, 0x6d, 0x75, 0xa3, 0x5c, 0x29, 0x5e, - 0xaf, 0x6e, 0x56, 0xde, 0x53, 0x59, 0x7d, 0xb4, 0x62, 0x68, 0x0d, 0x89, 0xed, 0x6d, 0x4c, 0xf5, - 0x35, 0xd0, 0x64, 0xa5, 0xf4, 0xa3, 0x10, 0xa6, 0x96, 0xd6, 0xa7, 0x4f, 0xc0, 0x58, 0x65, 0xb5, - 0xba, 0xbe, 0x54, 0x2a, 0x57, 0xcb, 0x57, 0xae, 0x94, 0x8b, 0x1b, 0xeb, 0x74, 0x07, 0xc2, 0xe3, - 0xde, 0x10, 0x93, 0xfa, 0x53, 0x2a, 0x4c, 0x84, 0x68, 0xa2, 0xe7, 0xd9, 0xbb, 0x03, 0x7d, 0x9d, - 0x79, 0x20, 0x8e, 0xf6, 0x73, 0x78, 0xc9, 0x5f, 0x33, 0x3b, 0x2e, 0x7b, 0xd5, 0xb8, 0x0f, 0xb0, - 0x95, 0x2c, 0xb7, 0xb1, 0xd5, 0x40, 0x1d, 0xb6, 0x61, 0x43, 0x5f, 0x28, 0xc6, 0xfc, 0x71, 0xba, - 0x67, 0x73, 0x3f, 0xe8, 0x6d, 0xdb, 0x69, 0xb8, 0x8d, 0x27, 0x51, 0xb5, 0x61, 0xf1, 0xdd, 0x1d, - 0xfc, 0x82, 0x91, 0x34, 0x34, 0x4e, 0x59, 0xb2, 0x5c, 0x8f, 0xdb, 0x42, 0xdb, 0xa6, 0xc4, 0x8d, - 0x0b, 0xb8, 0x6a, 0x68, 0x9c, 0xe2, 0x71, 0x9f, 0x80, 0xe1, 0xba, 0xbd, 0x8b, 0xbb, 0x2e, 0xca, - 0x87, 0xd7, 0x0b, 0xc5, 0x18, 0xa2, 0x63, 0x1e, 0x0b, 0xeb, 0xa7, 0xfd, 0x6d, 0xa5, 0x61, 0x63, - 0x88, 0x8e, 0x51, 0x96, 0x7b, 0x61, 0xcc, 0xdc, 0xde, 0xee, 0x60, 0xe1, 0x5c, 0x10, 0x7d, 0x43, - 0x18, 0xf5, 0x86, 0x09, 0xe3, 0xd4, 0x35, 0x48, 0x71, 0x3b, 0xe0, 0x25, 0x19, 0x5b, 0xa2, 0xda, - 0xa6, 0xaf, 0xbd, 0x89, 0x99, 0x41, 0x23, 0x65, 0x71, 0xe2, 0x09, 0x18, 0x6e, 0x38, 0x55, 0x7f, - 0x97, 0x3c, 0x71, 0x3c, 0x31, 0x93, 0x32, 0x86, 0x1a, 0x8e, 0xb7, 0xc3, 0x98, 0xfd, 0x42, 0x02, - 0x46, 0xc5, 0x5d, 0x7e, 0xbd, 0x04, 0xa9, 0xa6, 0x5d, 0x33, 0x49, 0x68, 0xd1, 0x23, 0xa6, 0x99, - 0x88, 0x83, 0x81, 0xb9, 0x65, 0xc6, 0x6f, 0x78, 0xc8, 0xa9, 0xbf, 0x51, 0x20, 0xc5, 0x87, 0xf5, - 0x49, 0x48, 0xb6, 0x4d, 0x77, 0x87, 0x88, 0xeb, 0x2f, 0x24, 0x34, 0xc5, 0x20, 0xdf, 0xf1, 0xb8, - 0xd3, 0x36, 0x2d, 0x12, 0x02, 0x6c, 0x1c, 0x7f, 0xc7, 0x7e, 0x6d, 0x22, 0xb3, 0x4e, 0x5e, 0x3f, - 0xec, 0x56, 0x0b, 0x59, 0xae, 0xc3, 0xfd, 0xca, 0xc6, 0x8b, 0x6c, 0x58, 0x7f, 0x17, 0x8c, 0xbb, - 0x1d, 0xb3, 0xd1, 0x14, 0x78, 0x93, 0x84, 0x57, 0xe3, 0x04, 0x8f, 0x39, 0x07, 0x77, 0x70, 0xb9, - 0x75, 0xe4, 0x9a, 0xb5, 0x1d, 0x54, 0xf7, 0x41, 0x03, 0x64, 0x9b, 0xe1, 0x28, 0x63, 0x28, 0x31, - 0x3a, 0xc7, 0x66, 0xbf, 0xab, 0xc0, 0x38, 0x7f, 0x61, 0xaa, 0x7b, 0xc6, 0x5a, 0x01, 0x30, 0x2d, - 0xcb, 0x76, 0x83, 0xe6, 0xea, 0x0e, 0xe5, 0x2e, 0xdc, 0x5c, 0xde, 0x03, 0x19, 0x01, 0x01, 0x53, - 0x2d, 0x00, 0x9f, 0xd2, 0xd3, 0x6c, 0xd3, 0x30, 0xc4, 0x8e, 0x70, 0xc8, 0x39, 0x20, 0x7d, 0xc5, - 0x06, 0x3a, 0x84, 0xdf, 0xac, 0xf4, 0xc3, 0xd0, 0x7f, 0x03, 0x6d, 0x37, 0x2c, 0xb6, 0x31, 0x4b, - 0xbf, 0xf0, 0x8d, 0x90, 0xa4, 0xb7, 0x11, 0x52, 0xf8, 0x00, 0x4c, 0xd4, 0xec, 0x96, 0xac, 0x6e, - 0x41, 0x93, 0x5e, 0xf3, 0x9d, 0x47, 0x94, 0xf7, 0x83, 0xdf, 0x62, 0xfe, 0x54, 0x51, 0x7e, 0x3b, - 0xa1, 0x5e, 0x5d, 0x2b, 0x7c, 0x29, 0x31, 0x75, 0x95, 0x42, 0xd7, 0xf8, 0x4c, 0x0d, 0xb4, 0xd5, - 0x44, 0x35, 0xac, 0x3d, 0x7c, 0x7e, 0x06, 0x1e, 0xd8, 0x6e, 0xb8, 0x3b, 0xbb, 0x37, 0xe6, 0x6a, - 0x76, 0xeb, 0xf4, 0xb6, 0xbd, 0x6d, 0xfb, 0x47, 0x9f, 0xf8, 0x1b, 0xf9, 0x42, 0x3e, 0xb1, 0xe3, - 0xcf, 0x41, 0x6f, 0x74, 0x2a, 0xf2, 0xac, 0x34, 0x57, 0x81, 0x09, 0xc6, 0x5c, 0x25, 0xe7, 0x2f, - 0xf4, 0x2d, 0x42, 0xdf, 0x77, 0x0f, 0x2b, 0xfd, 0x95, 0x1f, 0x90, 0xe5, 0xda, 0x18, 0x67, 0x50, - 0x4c, 0xa3, 0x2f, 0x1a, 0x39, 0x03, 0x8e, 0x08, 0xf2, 0x68, 0x6a, 0xa2, 0x4e, 0x84, 0xc4, 0xef, - 0x30, 0x89, 0x13, 0x01, 0x89, 0xeb, 0x0c, 0x9a, 0x2b, 0xc2, 0xc8, 0x41, 0x64, 0xfd, 0x05, 0x93, - 0x35, 0x8c, 0x82, 0x42, 0xae, 0xc2, 0x18, 0x11, 0x52, 0xdb, 0x75, 0x5c, 0xbb, 0x45, 0xea, 0xde, - 0xfe, 0x62, 0xfe, 0xf2, 0x07, 0x34, 0x57, 0x46, 0x31, 0xac, 0xe8, 0xa1, 0x72, 0x39, 0x20, 0x47, - 0x4e, 0x75, 0x54, 0x6b, 0x46, 0x48, 0xb8, 0xc9, 0x14, 0xf1, 0xf8, 0x73, 0xef, 0x83, 0xc3, 0xf8, - 0x33, 0x29, 0x4b, 0x41, 0x4d, 0xa2, 0x37, 0xbc, 0xd2, 0xdf, 0xfd, 0x30, 0x4d, 0xc7, 0x09, 0x4f, - 0x40, 0x40, 0xa7, 0x80, 0x17, 0xb7, 0x91, 0xeb, 0xa2, 0x8e, 0x53, 0x35, 0x9b, 0x61, 0xea, 0x05, - 0x76, 0x0c, 0xd2, 0x9f, 0x7c, 0x4d, 0xf4, 0xe2, 0x55, 0x8a, 0xcc, 0x37, 0x9b, 0xb9, 0x4d, 0x38, - 0x1a, 0x12, 0x15, 0x31, 0x64, 0x7e, 0x8a, 0xc9, 0x3c, 0xdc, 0x15, 0x19, 0x58, 0xec, 0x1a, 0xf0, - 0x71, 0xcf, 0x97, 0x31, 0x64, 0xfe, 0x16, 0x93, 0xa9, 0x33, 0x2c, 0x77, 0x29, 0x96, 0x78, 0x0d, - 0xc6, 0x9f, 0x44, 0x9d, 0x1b, 0xb6, 0xc3, 0x76, 0x69, 0x62, 0x88, 0xfb, 0x34, 0x13, 0x37, 0xc6, - 0x80, 0x64, 0xdb, 0x06, 0xcb, 0xba, 0x04, 0xa9, 0x2d, 0xb3, 0x86, 0x62, 0x88, 0xf8, 0x0c, 0x13, - 0x71, 0x08, 0xf3, 0x63, 0x68, 0x1e, 0x86, 0xb7, 0x6d, 0xb6, 0x32, 0x45, 0xc3, 0x9f, 0x63, 0xf0, - 0x21, 0x8e, 0x61, 0x22, 0xda, 0x76, 0x7b, 0xb7, 0x89, 0x97, 0xad, 0x68, 0x11, 0x9f, 0xe5, 0x22, - 0x38, 0x86, 0x89, 0x38, 0x80, 0x59, 0x9f, 0xe7, 0x22, 0x9c, 0x80, 0x3d, 0x1f, 0x86, 0x21, 0xdb, - 0x6a, 0xee, 0xd9, 0x56, 0x1c, 0x25, 0x3e, 0xc7, 0x24, 0x00, 0x83, 0x60, 0x01, 0x97, 0x61, 0x30, - 0xae, 0x23, 0x3e, 0xff, 0x1a, 0x4f, 0x0f, 0xee, 0x81, 0xab, 0x30, 0xc6, 0x0b, 0x54, 0xc3, 0xb6, - 0x62, 0x88, 0xf8, 0x5d, 0x26, 0x62, 0x34, 0x00, 0x63, 0xd3, 0x70, 0x91, 0xe3, 0x6e, 0xa3, 0x38, - 0x42, 0xbe, 0xc0, 0xa7, 0xc1, 0x20, 0xcc, 0x94, 0x37, 0x90, 0x55, 0xdb, 0x89, 0x27, 0xe1, 0x05, - 0x6e, 0x4a, 0x8e, 0xc1, 0x22, 0x8a, 0x30, 0xd2, 0x32, 0x3b, 0xce, 0x8e, 0xd9, 0x8c, 0xe5, 0x8e, - 0x2f, 0x32, 0x19, 0xc3, 0x1e, 0x88, 0x59, 0x64, 0xd7, 0x3a, 0x88, 0x98, 0x2f, 0x71, 0x8b, 0x04, - 0x60, 0x2c, 0xf5, 0x1c, 0x97, 0x6c, 0x69, 0x1d, 0x44, 0xda, 0xef, 0xf1, 0xd4, 0xa3, 0xd8, 0x95, - 0xa0, 0xc4, 0xcb, 0x30, 0xe8, 0x34, 0x9e, 0x89, 0x25, 0xe6, 0xf7, 0xb9, 0xa7, 0x09, 0x00, 0x83, - 0xaf, 0xc3, 0x1d, 0xa1, 0xcb, 0x44, 0x0c, 0x61, 0x7f, 0xc0, 0x84, 0x4d, 0x86, 0x2c, 0x15, 0xac, - 0x24, 0x1c, 0x54, 0xe4, 0x1f, 0xf2, 0x92, 0x80, 0x24, 0x59, 0x6b, 0xf8, 0x5d, 0xc1, 0x31, 0xb7, - 0x0e, 0x66, 0xb5, 0x3f, 0xe2, 0x56, 0xa3, 0x58, 0xc1, 0x6a, 0x1b, 0x30, 0xc9, 0x24, 0x1e, 0xcc, - 0xaf, 0x5f, 0xe6, 0x85, 0x95, 0xa2, 0x37, 0x45, 0xef, 0x7e, 0x00, 0xa6, 0x3c, 0x73, 0xf2, 0xa6, - 0xd4, 0xa9, 0xb6, 0xcc, 0x76, 0x0c, 0xc9, 0x5f, 0x61, 0x92, 0x79, 0xc5, 0xf7, 0xba, 0x5a, 0x67, - 0xc5, 0x6c, 0x63, 0xe1, 0x8f, 0x41, 0x9a, 0x0b, 0xdf, 0xb5, 0x3a, 0xa8, 0x66, 0x6f, 0x5b, 0x8d, - 0x67, 0x50, 0x3d, 0x86, 0xe8, 0x3f, 0x96, 0x5c, 0xb5, 0x19, 0x80, 0x63, 0xc9, 0x4b, 0xa0, 0x79, - 0xbd, 0x4a, 0xb5, 0xd1, 0x6a, 0xdb, 0x1d, 0x37, 0x42, 0xe2, 0x57, 0xb9, 0xa7, 0x3c, 0xdc, 0x12, - 0x81, 0xe5, 0xca, 0x30, 0x4a, 0xbe, 0xc6, 0x0d, 0xc9, 0xaf, 0x31, 0x41, 0x23, 0x3e, 0x8a, 0x15, - 0x8e, 0x9a, 0xdd, 0x6a, 0x9b, 0x9d, 0x38, 0xf5, 0xef, 0x4f, 0x78, 0xe1, 0x60, 0x10, 0x56, 0x38, - 0xdc, 0xbd, 0x36, 0xc2, 0xab, 0x7d, 0x0c, 0x09, 0x5f, 0xe7, 0x85, 0x83, 0x63, 0x98, 0x08, 0xde, - 0x30, 0xc4, 0x10, 0xf1, 0xa7, 0x5c, 0x04, 0xc7, 0x60, 0x11, 0xef, 0xf5, 0x17, 0xda, 0x0e, 0xda, - 0x6e, 0x38, 0x6e, 0x87, 0xb6, 0xc2, 0xfb, 0x8b, 0xfa, 0xc6, 0x6b, 0x62, 0x13, 0x66, 0x04, 0xa0, - 0xb8, 0x12, 0xb1, 0x2d, 0x54, 0xf2, 0xa6, 0x14, 0xad, 0xd8, 0x37, 0x79, 0x25, 0x0a, 0xc0, 0x68, - 0x7e, 0x8e, 0x49, 0xbd, 0x8a, 0x1e, 0x75, 0x11, 0x26, 0xfd, 0x3f, 0x5f, 0x67, 0xb2, 0xc4, 0x56, - 0x25, 0xb7, 0x8c, 0x03, 0x48, 0x6c, 0x28, 0xa2, 0x85, 0x7d, 0xf8, 0x75, 0x2f, 0x86, 0x84, 0x7e, - 0x22, 0x77, 0x05, 0x46, 0x84, 0x66, 0x22, 0x5a, 0xd4, 0xff, 0x62, 0xa2, 0x86, 0x83, 0xbd, 0x44, - 0xee, 0x1c, 0x24, 0x71, 0x63, 0x10, 0x0d, 0xff, 0xdf, 0x0c, 0x4e, 0xd8, 0x73, 0x0f, 0x42, 0x8a, - 0x37, 0x04, 0xd1, 0xd0, 0x8f, 0x30, 0xa8, 0x07, 0xc1, 0x70, 0xde, 0x0c, 0x44, 0xc3, 0xff, 0x0f, - 0x87, 0x73, 0x08, 0x86, 0xc7, 0x37, 0xe1, 0x8b, 0xff, 0x2f, 0xc9, 0x0a, 0x3a, 0xb7, 0xdd, 0x65, - 0x38, 0xc4, 0xba, 0x80, 0x68, 0xf4, 0xc7, 0xd8, 0xc3, 0x39, 0x22, 0x77, 0x01, 0xfa, 0x63, 0x1a, - 0xfc, 0xff, 0x33, 0x28, 0xe5, 0xcf, 0x15, 0x61, 0x28, 0xb0, 0xf2, 0x47, 0xc3, 0x7f, 0x89, 0xc1, - 0x83, 0x28, 0xac, 0x3a, 0x5b, 0xf9, 0xa3, 0x05, 0xfc, 0x32, 0x57, 0x9d, 0x21, 0xb0, 0xd9, 0xf8, - 0xa2, 0x1f, 0x8d, 0xfe, 0x15, 0x6e, 0x75, 0x0e, 0xc9, 0x3d, 0x0c, 0x83, 0x5e, 0x21, 0x8f, 0xc6, - 0xff, 0x2a, 0xc3, 0xfb, 0x18, 0x6c, 0x81, 0xc0, 0x42, 0x12, 0x2d, 0xe2, 0xd7, 0xb8, 0x05, 0x02, - 0x28, 0x9c, 0x46, 0x72, 0x73, 0x10, 0x2d, 0xe9, 0xe3, 0x3c, 0x8d, 0xa4, 0xde, 0x00, 0x7b, 0x93, - 0xd4, 0xd3, 0x68, 0x11, 0xbf, 0xce, 0xbd, 0x49, 0xf8, 0xb1, 0x1a, 0xf2, 0x6a, 0x1b, 0x2d, 0xe3, - 0x37, 0xb9, 0x1a, 0xd2, 0x62, 0x9b, 0x5b, 0x03, 0xbd, 0x7b, 0xa5, 0x8d, 0x96, 0xf7, 0x09, 0x26, - 0x6f, 0xbc, 0x6b, 0xa1, 0xcd, 0x3d, 0x0a, 0x93, 0xe1, 0xab, 0x6c, 0xb4, 0xd4, 0x4f, 0xbe, 0x2e, - 0xbd, 0x17, 0x05, 0x17, 0xd9, 0xdc, 0x86, 0x5f, 0xae, 0x83, 0x2b, 0x6c, 0xb4, 0xd8, 0x4f, 0xbd, - 0x2e, 0x56, 0xec, 0xe0, 0x02, 0x9b, 0xcb, 0x03, 0xf8, 0x8b, 0x5b, 0xb4, 0xac, 0x4f, 0x33, 0x59, - 0x01, 0x10, 0x4e, 0x0d, 0xb6, 0xb6, 0x45, 0xe3, 0x3f, 0xc3, 0x53, 0x83, 0x21, 0x70, 0x6a, 0xf0, - 0x65, 0x2d, 0x1a, 0xfd, 0x1c, 0x4f, 0x0d, 0x0e, 0xc1, 0x91, 0x1d, 0x58, 0x39, 0xa2, 0x25, 0x7c, - 0x8e, 0x47, 0x76, 0x00, 0x95, 0xbb, 0x0c, 0x29, 0x6b, 0xb7, 0xd9, 0xc4, 0x01, 0xaa, 0xef, 0x7f, - 0x41, 0x2c, 0xfd, 0x8f, 0x6f, 0x30, 0x0d, 0x38, 0x20, 0x77, 0x0e, 0xfa, 0x51, 0xeb, 0x06, 0xaa, - 0x47, 0x21, 0xff, 0xe9, 0x0d, 0x5e, 0x94, 0x30, 0x77, 0xee, 0x61, 0x00, 0xfa, 0x6a, 0x4f, 0x8e, - 0xad, 0x22, 0xb0, 0xff, 0xfc, 0x06, 0xbb, 0xba, 0xe1, 0x43, 0x7c, 0x01, 0xf4, 0x22, 0xc8, 0xfe, - 0x02, 0x5e, 0x13, 0x05, 0x90, 0x59, 0x5f, 0x82, 0x43, 0x8f, 0x3b, 0xb6, 0xe5, 0x9a, 0xdb, 0x51, - 0xe8, 0x7f, 0x61, 0x68, 0xce, 0x8f, 0x0d, 0xd6, 0xb2, 0x3b, 0xc8, 0x35, 0xb7, 0x9d, 0x28, 0xec, - 0xbf, 0x32, 0xac, 0x07, 0xc0, 0xe0, 0x9a, 0xe9, 0xb8, 0x71, 0xe6, 0xfd, 0x23, 0x0e, 0xe6, 0x00, - 0xac, 0x34, 0xfe, 0xfc, 0x04, 0xda, 0x8b, 0xc2, 0xfe, 0x98, 0x2b, 0xcd, 0xf8, 0x73, 0x0f, 0xc2, - 0x20, 0xfe, 0x48, 0xef, 0x63, 0x45, 0x80, 0xff, 0x8d, 0x81, 0x7d, 0x04, 0x7e, 0xb2, 0xe3, 0xd6, - 0xdd, 0x46, 0xb4, 0xb1, 0x7f, 0xc2, 0x3c, 0xcd, 0xf9, 0x73, 0x79, 0x18, 0x72, 0xdc, 0x7a, 0x7d, - 0x97, 0xf5, 0x57, 0x11, 0xf0, 0x7f, 0x7f, 0xc3, 0x7b, 0xe5, 0xf6, 0x30, 0x85, 0x72, 0xf8, 0xee, - 0x21, 0x5c, 0xb5, 0xaf, 0xda, 0x74, 0xdf, 0xf0, 0xfd, 0xd9, 0xe8, 0x0d, 0x40, 0xf8, 0xeb, 0x26, - 0x64, 0x6a, 0x76, 0xeb, 0x86, 0xed, 0x9c, 0xf6, 0x2a, 0xd6, 0x69, 0x77, 0x07, 0xe1, 0x85, 0x8a, - 0x6d, 0x0c, 0x26, 0xf1, 0xe7, 0xa9, 0x83, 0xed, 0x26, 0x92, 0xb3, 0xe2, 0x4a, 0x03, 0x4f, 0xa1, - 0x42, 0xb6, 0xeb, 0xf5, 0x63, 0x30, 0x40, 0x26, 0x75, 0x86, 0x1c, 0x89, 0x29, 0x85, 0xe4, 0xcd, - 0x97, 0xa7, 0xfb, 0x0c, 0x36, 0xe6, 0x51, 0x17, 0xc8, 0x7e, 0x6a, 0x42, 0xa0, 0x2e, 0x78, 0xd4, - 0xb3, 0x74, 0x4b, 0x55, 0xa0, 0x9e, 0xf5, 0xa8, 0x8b, 0x64, 0x73, 0x55, 0x15, 0xa8, 0x8b, 0x1e, - 0xf5, 0x1c, 0x39, 0x40, 0x18, 0x11, 0xa8, 0xe7, 0x3c, 0xea, 0x79, 0x72, 0x6c, 0x90, 0x14, 0xa8, - 0xe7, 0x3d, 0xea, 0x05, 0x72, 0x62, 0x30, 0x2e, 0x50, 0x2f, 0x78, 0xd4, 0x8b, 0xe4, 0xa4, 0x40, - 0x17, 0xa8, 0x17, 0x3d, 0xea, 0x25, 0x72, 0x0d, 0xe7, 0x90, 0x40, 0xbd, 0xa4, 0x67, 0xe0, 0x10, - 0x9d, 0xf9, 0x3c, 0x39, 0x56, 0x1e, 0x63, 0x64, 0x3e, 0xe8, 0xd3, 0xcf, 0x90, 0x2b, 0x37, 0x03, - 0x22, 0xfd, 0x8c, 0x4f, 0x5f, 0x20, 0xb7, 0xff, 0x35, 0x91, 0xbe, 0xe0, 0xd3, 0xcf, 0xa6, 0x47, - 0xc8, 0xb5, 0x23, 0x81, 0x7e, 0xd6, 0xa7, 0x2f, 0xa6, 0x47, 0x71, 0x5c, 0x8b, 0xf4, 0x45, 0x9f, - 0x7e, 0x2e, 0x3d, 0x76, 0x5c, 0x99, 0x19, 0x16, 0xe9, 0xe7, 0xb2, 0x1f, 0x22, 0xee, 0xb5, 0x7c, - 0xf7, 0x4e, 0x8a, 0xee, 0xf5, 0x1c, 0x3b, 0x29, 0x3a, 0xd6, 0x73, 0xe9, 0xa4, 0xe8, 0x52, 0xcf, - 0x99, 0x93, 0xa2, 0x33, 0x3d, 0x37, 0x4e, 0x8a, 0x6e, 0xf4, 0x1c, 0x38, 0x29, 0x3a, 0xd0, 0x73, - 0xdd, 0xa4, 0xe8, 0x3a, 0xcf, 0x69, 0x93, 0xa2, 0xd3, 0x3c, 0x77, 0x4d, 0x8a, 0xee, 0xf2, 0x1c, - 0x95, 0x96, 0x1c, 0xe5, 0xbb, 0x28, 0x2d, 0xb9, 0xc8, 0x77, 0x4e, 0x5a, 0x72, 0x8e, 0xef, 0x96, - 0xb4, 0xe4, 0x16, 0xdf, 0x21, 0x69, 0xc9, 0x21, 0xbe, 0x2b, 0xd2, 0x92, 0x2b, 0x7c, 0x27, 0xb0, - 0x1c, 0x33, 0x50, 0x3b, 0x24, 0xc7, 0xd4, 0x7d, 0x73, 0x4c, 0xdd, 0x37, 0xc7, 0xd4, 0x7d, 0x73, - 0x4c, 0xdd, 0x37, 0xc7, 0xd4, 0x7d, 0x73, 0x4c, 0xdd, 0x37, 0xc7, 0xd4, 0x7d, 0x73, 0x4c, 0xdd, - 0x37, 0xc7, 0xd4, 0xfd, 0x73, 0x4c, 0x8d, 0xc8, 0x31, 0x35, 0x22, 0xc7, 0xd4, 0x88, 0x1c, 0x53, - 0x23, 0x72, 0x4c, 0x8d, 0xc8, 0x31, 0xb5, 0x67, 0x8e, 0xf9, 0xee, 0x9d, 0x14, 0xdd, 0x1b, 0x9a, - 0x63, 0x6a, 0x8f, 0x1c, 0x53, 0x7b, 0xe4, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x1e, 0x39, 0xa6, 0xf6, - 0xc8, 0x31, 0xb5, 0x47, 0x8e, 0xa9, 0x3d, 0x72, 0x4c, 0xed, 0x95, 0x63, 0x6a, 0xcf, 0x1c, 0x53, - 0x7b, 0xe6, 0x98, 0xda, 0x33, 0xc7, 0xd4, 0x9e, 0x39, 0xa6, 0xf6, 0xcc, 0x31, 0x35, 0x98, 0x63, - 0x7f, 0xa6, 0x82, 0x4e, 0x73, 0x6c, 0x8d, 0x5c, 0x4c, 0x62, 0xae, 0xc8, 0x48, 0x99, 0x36, 0x80, - 0x5d, 0xa7, 0xf9, 0x2e, 0xc9, 0x48, 0xb9, 0x26, 0xd2, 0x17, 0x3c, 0x3a, 0xcf, 0x36, 0x91, 0x7e, - 0xd6, 0xa3, 0xf3, 0x7c, 0x13, 0xe9, 0x8b, 0x1e, 0x9d, 0x67, 0x9c, 0x48, 0x3f, 0xe7, 0xd1, 0x79, - 0xce, 0x89, 0xf4, 0xf3, 0x1e, 0x9d, 0x67, 0x9d, 0x48, 0xbf, 0xe0, 0xd1, 0x79, 0xde, 0x89, 0xf4, - 0x8b, 0x1e, 0x9d, 0x67, 0x9e, 0x48, 0xbf, 0xa4, 0x1f, 0x97, 0x73, 0x8f, 0x33, 0x78, 0xae, 0x3d, - 0x2e, 0x67, 0x9f, 0xc4, 0x71, 0xc6, 0xe7, 0xe0, 0xf9, 0x27, 0x71, 0x2c, 0xf8, 0x1c, 0x3c, 0x03, - 0x25, 0x8e, 0xb3, 0xd9, 0x8f, 0x12, 0xf7, 0x59, 0xb2, 0xfb, 0xa6, 0x24, 0xf7, 0x25, 0x02, 0xae, - 0x9b, 0x92, 0x5c, 0x97, 0x08, 0xb8, 0x6d, 0x4a, 0x72, 0x5b, 0x22, 0xe0, 0xb2, 0x29, 0xc9, 0x65, - 0x89, 0x80, 0xbb, 0xa6, 0x24, 0x77, 0x25, 0x02, 0xae, 0x9a, 0x92, 0x5c, 0x95, 0x08, 0xb8, 0x69, - 0x4a, 0x72, 0x53, 0x22, 0xe0, 0xa2, 0x29, 0xc9, 0x45, 0x89, 0x80, 0x7b, 0xa6, 0x24, 0xf7, 0x24, - 0x02, 0xae, 0x39, 0x26, 0xbb, 0x26, 0x11, 0x74, 0xcb, 0x31, 0xd9, 0x2d, 0x89, 0xa0, 0x4b, 0x8e, - 0xc9, 0x2e, 0x49, 0x04, 0xdd, 0x71, 0x4c, 0x76, 0x47, 0x22, 0xe8, 0x8a, 0x9f, 0x25, 0x78, 0x47, - 0xb8, 0xee, 0x76, 0x76, 0x6b, 0xee, 0x6d, 0x75, 0x84, 0xf3, 0x42, 0xfb, 0x30, 0xb4, 0xa0, 0xcf, - 0x91, 0x86, 0x35, 0xd8, 0x71, 0x4a, 0x2b, 0xd8, 0xbc, 0xd0, 0x58, 0x04, 0x10, 0x56, 0x38, 0x62, - 0xf1, 0xb6, 0x7a, 0xc3, 0x79, 0xa1, 0xcd, 0x88, 0xd6, 0xef, 0xe2, 0xdb, 0xde, 0xb1, 0xbd, 0x98, - 0xe0, 0x1d, 0x1b, 0x33, 0xff, 0x41, 0x3b, 0xb6, 0xd9, 0x68, 0x93, 0x7b, 0xc6, 0x9e, 0x8d, 0x36, - 0x76, 0xd7, 0xaa, 0x13, 0xb7, 0x83, 0x9b, 0x8d, 0x36, 0xad, 0x67, 0xd4, 0xb7, 0xb6, 0xdf, 0x62, - 0x11, 0x6c, 0xa0, 0x76, 0x48, 0x04, 0x1f, 0xb4, 0xdf, 0x9a, 0x17, 0x4a, 0xc9, 0x41, 0x23, 0x58, - 0x3d, 0x70, 0x04, 0x1f, 0xb4, 0xf3, 0x9a, 0x17, 0xca, 0xcb, 0x81, 0x23, 0xf8, 0x6d, 0xe8, 0x87, - 0x58, 0x04, 0xfb, 0xe6, 0x3f, 0x68, 0x3f, 0x34, 0x1b, 0x6d, 0xf2, 0xd0, 0x08, 0x56, 0x0f, 0x10, - 0xc1, 0x71, 0xfa, 0xa3, 0xd9, 0x68, 0xd3, 0x86, 0x47, 0xf0, 0x6d, 0x77, 0x33, 0x9f, 0x55, 0x60, - 0xbc, 0xd2, 0xa8, 0x97, 0x5b, 0x37, 0x50, 0xbd, 0x8e, 0xea, 0xcc, 0x8e, 0xf3, 0x42, 0x25, 0xe8, - 0xe1, 0xea, 0x97, 0x5e, 0x9e, 0xf6, 0x2d, 0x7c, 0x0e, 0x52, 0xd4, 0xa6, 0xf3, 0xf3, 0xe9, 0x9b, - 0x4a, 0x44, 0x85, 0xf3, 0x58, 0xf5, 0x13, 0x1c, 0x76, 0x66, 0x3e, 0xfd, 0xb7, 0x4a, 0xa0, 0xca, - 0x79, 0xc3, 0xd9, 0x8f, 0x13, 0x0d, 0xad, 0xdb, 0xd6, 0xf0, 0x74, 0x2c, 0x0d, 0x03, 0xba, 0xdd, - 0xd9, 0xa5, 0x5b, 0x40, 0xab, 0x5d, 0x18, 0xab, 0x34, 0xea, 0x15, 0xf2, 0x77, 0xe7, 0x71, 0x54, - 0xa2, 0x3c, 0x52, 0x3d, 0x98, 0x17, 0xc2, 0x32, 0x88, 0xf0, 0x42, 0x5a, 0xac, 0x11, 0xd9, 0x06, - 0x7e, 0xac, 0x25, 0x3c, 0x76, 0xb6, 0xd7, 0x63, 0xfd, 0xca, 0xee, 0x3d, 0x70, 0xb6, 0xd7, 0x03, - 0xfd, 0x1c, 0xf2, 0x1e, 0xf5, 0x34, 0x5f, 0x9c, 0xe9, 0xf5, 0x20, 0xfd, 0x18, 0x24, 0x96, 0xe8, - 0xed, 0xe5, 0xe1, 0xc2, 0x30, 0x56, 0xea, 0x7b, 0x2f, 0x4f, 0x27, 0x37, 0x77, 0x1b, 0x75, 0x23, - 0xb1, 0x54, 0xd7, 0xaf, 0x41, 0xff, 0xfb, 0xd8, 0x5f, 0x3f, 0x62, 0x86, 0x45, 0xc6, 0x70, 0x7f, - 0xcf, 0x3d, 0x22, 0xfc, 0xe0, 0xd3, 0x74, 0xab, 0x71, 0x6e, 0xb3, 0x61, 0xb9, 0x67, 0x16, 0x2e, - 0x1a, 0x54, 0x44, 0xf6, 0xbf, 0x02, 0xd0, 0x67, 0x96, 0x4c, 0x67, 0x47, 0xaf, 0x70, 0xc9, 0xf4, - 0xd1, 0x17, 0xbf, 0xf7, 0xf2, 0xf4, 0x62, 0x1c, 0xa9, 0x0f, 0xd4, 0x4d, 0x67, 0xe7, 0x01, 0x77, - 0xaf, 0x8d, 0xe6, 0x0a, 0x7b, 0x2e, 0x72, 0xb8, 0xf4, 0x36, 0x5f, 0xf5, 0xd8, 0xbc, 0xd2, 0x81, - 0x79, 0xa5, 0x84, 0x39, 0x5d, 0x11, 0xe7, 0x34, 0xff, 0x66, 0xe7, 0xf3, 0x34, 0x5f, 0x24, 0x24, - 0x4b, 0xaa, 0x51, 0x96, 0x54, 0x6f, 0xd7, 0x92, 0x6d, 0x5e, 0x1f, 0xa5, 0xb9, 0xaa, 0xfb, 0xcd, - 0x55, 0xbd, 0x9d, 0xb9, 0xfe, 0x07, 0xcd, 0x56, 0x2f, 0x9f, 0x36, 0x2d, 0x7a, 0x73, 0xf2, 0x17, - 0x6b, 0x2f, 0xe8, 0x2d, 0xed, 0x02, 0x72, 0xc9, 0x9b, 0xcf, 0x4f, 0x2b, 0xd9, 0xcf, 0x26, 0xf8, - 0xcc, 0x69, 0x22, 0xbd, 0xb9, 0x99, 0xff, 0xa2, 0xf4, 0x54, 0x6f, 0x87, 0x85, 0x9e, 0x53, 0x60, - 0xb2, 0xab, 0x92, 0x53, 0x33, 0xbd, 0xb5, 0xe5, 0xdc, 0x3a, 0x68, 0x39, 0x67, 0x0a, 0x7e, 0x4d, - 0x81, 0xc3, 0x52, 0x79, 0xa5, 0xea, 0x9d, 0x96, 0xd4, 0x3b, 0xda, 0xfd, 0x24, 0xc2, 0x18, 0xd0, - 0x2e, 0xe8, 0x5e, 0x09, 0x10, 0x90, 0xec, 0xf9, 0x7d, 0x51, 0xf2, 0xfb, 0x31, 0x0f, 0x10, 0x62, - 0x2e, 0x1e, 0x01, 0x4c, 0x6d, 0x1b, 0x92, 0x1b, 0x1d, 0x84, 0xf4, 0x0c, 0x24, 0x56, 0x3b, 0x4c, - 0xc3, 0x51, 0x8a, 0x5f, 0xed, 0x14, 0x3a, 0xa6, 0x55, 0xdb, 0x31, 0x12, 0xab, 0x1d, 0xfd, 0x04, - 0xa8, 0x79, 0xf6, 0x97, 0xd7, 0x43, 0x0b, 0x63, 0x94, 0x21, 0x6f, 0xd5, 0x19, 0x07, 0xa6, 0xe9, - 0x19, 0x48, 0x2e, 0x23, 0x73, 0x8b, 0x29, 0x01, 0x94, 0x07, 0x8f, 0x18, 0x64, 0x9c, 0x3d, 0xf0, - 0x31, 0x48, 0x71, 0xc1, 0xfa, 0x49, 0x8c, 0xd8, 0x72, 0xd9, 0x63, 0x19, 0x02, 0xab, 0xc3, 0x56, - 0x2e, 0x42, 0xd5, 0x4f, 0x41, 0xbf, 0xd1, 0xd8, 0xde, 0x71, 0xd9, 0xc3, 0xbb, 0xd9, 0x28, 0x39, - 0x7b, 0x1d, 0x06, 0x3d, 0x8d, 0xde, 0x62, 0xd1, 0x25, 0x3a, 0x35, 0x7d, 0x2a, 0xb8, 0x9e, 0xf0, - 0x7d, 0x4b, 0x3a, 0xa4, 0x1f, 0x87, 0xd4, 0xba, 0xdb, 0xf1, 0x8b, 0x3e, 0xef, 0x48, 0xbd, 0xd1, - 0xec, 0x87, 0x14, 0x48, 0x95, 0x10, 0x6a, 0x13, 0x83, 0xdf, 0x03, 0xc9, 0x92, 0xfd, 0x94, 0xc5, - 0x14, 0x1c, 0x67, 0x16, 0xc5, 0x64, 0x66, 0x53, 0x42, 0xd6, 0xef, 0x09, 0xda, 0x7d, 0xc2, 0xb3, - 0x7b, 0x80, 0x8f, 0xd8, 0x3e, 0x2b, 0xd8, 0x9e, 0x39, 0x10, 0x33, 0x75, 0xd9, 0xff, 0x02, 0x0c, - 0x05, 0x9e, 0xa2, 0xcf, 0x30, 0x35, 0x12, 0x32, 0x30, 0x68, 0x2b, 0xcc, 0x91, 0x45, 0x30, 0x22, - 0x3c, 0x18, 0x43, 0x03, 0x26, 0xee, 0x01, 0x25, 0x66, 0x9e, 0x15, 0xcd, 0x1c, 0xce, 0xca, 0x4c, - 0x3d, 0x4f, 0x6d, 0x44, 0xcc, 0x7d, 0x92, 0x06, 0x67, 0x6f, 0x27, 0xe2, 0xcf, 0xd9, 0x7e, 0x50, - 0x2b, 0x8d, 0x66, 0xf6, 0x41, 0x00, 0x9a, 0xf2, 0x65, 0x6b, 0xb7, 0x25, 0x65, 0xdd, 0x28, 0x37, - 0xf0, 0xc6, 0x0e, 0xda, 0x40, 0x0e, 0x61, 0x11, 0xfb, 0x29, 0x5c, 0x60, 0x80, 0xa6, 0x18, 0xc1, - 0xdf, 0x17, 0x89, 0x0f, 0xed, 0xc4, 0x30, 0x6b, 0x9a, 0xb2, 0x5e, 0x47, 0x6e, 0xde, 0xb2, 0xdd, - 0x1d, 0xd4, 0x91, 0x10, 0x0b, 0xfa, 0x59, 0x21, 0x61, 0x47, 0x17, 0xee, 0xf4, 0x10, 0x3d, 0x41, - 0x67, 0xb3, 0x5f, 0x26, 0x0a, 0xe2, 0x56, 0xa0, 0x6b, 0x82, 0x6a, 0x8c, 0x09, 0xea, 0xe7, 0x85, - 0xfe, 0x6d, 0x1f, 0x35, 0xa5, 0x57, 0xcb, 0x4b, 0xc2, 0x7b, 0xce, 0xfe, 0xca, 0x8a, 0xef, 0x98, - 0xdc, 0xa6, 0x5c, 0xe5, 0xfb, 0x22, 0x55, 0xee, 0xd1, 0xdd, 0x1e, 0xd4, 0xa6, 0x6a, 0x5c, 0x9b, - 0x7e, 0xcb, 0xeb, 0x38, 0xe8, 0xcf, 0x5b, 0x90, 0x1f, 0x86, 0xd1, 0xef, 0x8f, 0xf4, 0x7d, 0x4e, - 0x29, 0x7a, 0xaa, 0x2e, 0xc6, 0x75, 0x7f, 0x2e, 0x51, 0x28, 0x78, 0xea, 0x5e, 0x38, 0x40, 0x08, - 0xe4, 0x12, 0xc5, 0xa2, 0x57, 0xb6, 0x53, 0x1f, 0x7d, 0x7e, 0x5a, 0x79, 0xe1, 0xf9, 0xe9, 0xbe, - 0xec, 0x17, 0x15, 0x18, 0x67, 0x9c, 0x81, 0xc0, 0x7d, 0x40, 0x52, 0xfe, 0x08, 0xaf, 0x19, 0x61, - 0x16, 0x78, 0xc7, 0x82, 0xf7, 0x3b, 0x0a, 0xa4, 0xbb, 0x74, 0xe5, 0xf6, 0x9e, 0x8f, 0xa5, 0x72, - 0x4e, 0x29, 0xff, 0xfc, 0x6d, 0x7e, 0x1d, 0xfa, 0x37, 0x1a, 0x2d, 0xd4, 0xc1, 0x2b, 0x01, 0xfe, - 0x40, 0x55, 0xe6, 0x87, 0x39, 0x74, 0x88, 0xd3, 0xa8, 0x72, 0x02, 0x6d, 0x41, 0x4f, 0x43, 0xb2, - 0x64, 0xba, 0x26, 0xd1, 0x60, 0xd8, 0xab, 0xaf, 0xa6, 0x6b, 0x66, 0xcf, 0xc2, 0xf0, 0xca, 0x1e, - 0xb9, 0x92, 0x53, 0x27, 0x37, 0x45, 0xc4, 0xee, 0x8f, 0xf7, 0xab, 0x67, 0x66, 0xfb, 0x53, 0x75, - 0xed, 0xa6, 0x92, 0x4b, 0x12, 0x7d, 0x9e, 0x84, 0xd1, 0x55, 0xac, 0x36, 0xc1, 0x09, 0x30, 0xfa, - 0x74, 0xd5, 0x9b, 0xbc, 0xd4, 0x94, 0xa9, 0x7e, 0x53, 0x76, 0x1c, 0x94, 0x15, 0xb1, 0x75, 0x0a, - 0xea, 0x61, 0x28, 0x2b, 0xb3, 0xc9, 0xd4, 0xa8, 0x36, 0x3e, 0x9b, 0x4c, 0x81, 0x36, 0xc2, 0x9e, - 0xfb, 0x57, 0x2a, 0x68, 0xb4, 0xd5, 0x29, 0xa1, 0xad, 0x86, 0xd5, 0x70, 0xbb, 0xfb, 0x55, 0x4f, - 0x63, 0xfd, 0x61, 0x18, 0xc4, 0x26, 0xbd, 0xc2, 0x7e, 0x1f, 0x0e, 0x9b, 0xfe, 0x04, 0x6b, 0x51, - 0x24, 0x11, 0x6c, 0x80, 0x84, 0x8e, 0x8f, 0xd1, 0xaf, 0x80, 0x5a, 0xa9, 0xac, 0xb0, 0xc5, 0x6d, - 0x71, 0x5f, 0x28, 0xbb, 0x8f, 0xc3, 0xbe, 0xb1, 0x31, 0x67, 0xdb, 0xc0, 0x02, 0xf4, 0x45, 0x48, - 0x54, 0x56, 0x58, 0xc3, 0x7b, 0x32, 0x8e, 0x18, 0x23, 0x51, 0x59, 0x99, 0xfa, 0x73, 0x05, 0x46, - 0x84, 0x51, 0x3d, 0x0b, 0xc3, 0x74, 0x20, 0x30, 0xdd, 0x01, 0x43, 0x18, 0xe3, 0x3a, 0x27, 0x6e, - 0x53, 0xe7, 0xa9, 0x3c, 0x8c, 0x49, 0xe3, 0xfa, 0x1c, 0xe8, 0xc1, 0x21, 0xa6, 0x04, 0xfd, 0x6d, - 0xaa, 0x10, 0x4a, 0xf6, 0x2e, 0x00, 0xdf, 0xae, 0xde, 0x4f, 0x2a, 0x55, 0xca, 0xeb, 0x1b, 0xe5, - 0x92, 0xa6, 0x64, 0xbf, 0xae, 0xc0, 0x10, 0x6b, 0x5b, 0x6b, 0x76, 0x1b, 0xe9, 0x05, 0x50, 0xf2, - 0x2c, 0x1e, 0xde, 0x9c, 0xde, 0x4a, 0x5e, 0x3f, 0x0d, 0x4a, 0x21, 0xbe, 0xab, 0x95, 0x82, 0xbe, - 0x00, 0x4a, 0x91, 0x39, 0x38, 0x9e, 0x67, 0x94, 0x62, 0xf6, 0x27, 0x2a, 0x4c, 0x04, 0xdb, 0x68, - 0x5e, 0x4f, 0x4e, 0x88, 0xef, 0x4d, 0xb9, 0xc1, 0x33, 0x0b, 0x67, 0x17, 0xe7, 0xf0, 0x3f, 0x5e, - 0x48, 0x66, 0xc5, 0x57, 0xa8, 0x1c, 0x78, 0x2c, 0x67, 0x7a, 0xdd, 0x13, 0xc9, 0x25, 0x03, 0x12, - 0xba, 0xee, 0x89, 0x08, 0xd4, 0xae, 0x7b, 0x22, 0x02, 0xb5, 0xeb, 0x9e, 0x88, 0x40, 0xed, 0x3a, - 0x0b, 0x10, 0xa8, 0x5d, 0xf7, 0x44, 0x04, 0x6a, 0xd7, 0x3d, 0x11, 0x81, 0xda, 0x7d, 0x4f, 0x84, - 0x91, 0x7b, 0xde, 0x13, 0x11, 0xe9, 0xdd, 0xf7, 0x44, 0x44, 0x7a, 0xf7, 0x3d, 0x91, 0x5c, 0xd2, - 0xed, 0xec, 0xa2, 0xde, 0xa7, 0x0e, 0x22, 0x7e, 0xbf, 0x97, 0x40, 0xbf, 0x02, 0xaf, 0xc2, 0x18, - 0xdd, 0x90, 0x28, 0xda, 0x96, 0x6b, 0x36, 0x2c, 0xd4, 0xd1, 0xdf, 0x0d, 0xc3, 0x74, 0x88, 0xbe, - 0xe6, 0x84, 0xbd, 0x06, 0x52, 0x3a, 0xab, 0xb7, 0x02, 0x77, 0xf6, 0x67, 0x49, 0x98, 0xa4, 0x03, - 0x15, 0xb3, 0x85, 0x84, 0x5b, 0x46, 0xa7, 0xa4, 0x33, 0xa5, 0x51, 0x0c, 0xbf, 0xf5, 0xf2, 0x34, - 0x1d, 0xcd, 0x7b, 0xd1, 0x74, 0x4a, 0x3a, 0x5d, 0x12, 0xf9, 0xfc, 0x05, 0xe8, 0x94, 0x74, 0xf3, - 0x48, 0xe4, 0xf3, 0xd6, 0x1b, 0x8f, 0x8f, 0xdf, 0x41, 0x12, 0xf9, 0x4a, 0x5e, 0x94, 0x9d, 0x92, - 0x6e, 0x23, 0x89, 0x7c, 0x65, 0x2f, 0xde, 0x4e, 0x49, 0x67, 0x4f, 0x22, 0xdf, 0x15, 0x2f, 0xf2, - 0x4e, 0x49, 0xa7, 0x50, 0x22, 0xdf, 0x55, 0x2f, 0x06, 0x4f, 0x49, 0x77, 0x95, 0x44, 0xbe, 0x47, - 0xbc, 0x68, 0x3c, 0x25, 0xdd, 0x5a, 0x12, 0xf9, 0x96, 0xbc, 0xb8, 0x9c, 0x91, 0xef, 0x2f, 0x89, - 0x8c, 0xd7, 0xfc, 0x08, 0x9d, 0x91, 0x6f, 0x32, 0x89, 0x9c, 0xef, 0xf1, 0x63, 0x75, 0x46, 0xbe, - 0xd3, 0x24, 0x72, 0x2e, 0xfb, 0x51, 0x3b, 0x23, 0x9f, 0x95, 0x89, 0x9c, 0x2b, 0x7e, 0xfc, 0xce, - 0xc8, 0xa7, 0x66, 0x22, 0x67, 0xc5, 0x8f, 0xe4, 0x19, 0xf9, 0xfc, 0x4c, 0xe4, 0x5c, 0xf5, 0x37, - 0xd1, 0xbf, 0x2d, 0x85, 0x5f, 0xe0, 0x16, 0x54, 0x56, 0x0a, 0x3f, 0x08, 0x09, 0x3d, 0xa9, 0x90, - 0x05, 0x78, 0xfc, 0xb0, 0xcb, 0x4a, 0x61, 0x07, 0x21, 0x21, 0x97, 0x95, 0x42, 0x0e, 0x42, 0xc2, - 0x2d, 0x2b, 0x85, 0x1b, 0x84, 0x84, 0x5a, 0x56, 0x0a, 0x35, 0x08, 0x09, 0xb3, 0xac, 0x14, 0x66, - 0x10, 0x12, 0x62, 0x59, 0x29, 0xc4, 0x20, 0x24, 0xbc, 0xb2, 0x52, 0x78, 0x41, 0x48, 0x68, 0x9d, - 0x94, 0x43, 0x0b, 0xc2, 0xc2, 0xea, 0xa4, 0x1c, 0x56, 0x10, 0x16, 0x52, 0x77, 0xcb, 0x21, 0x35, - 0x78, 0xeb, 0xe5, 0xe9, 0x7e, 0x3c, 0x14, 0x88, 0xa6, 0x93, 0x72, 0x34, 0x41, 0x58, 0x24, 0x9d, - 0x94, 0x23, 0x09, 0xc2, 0xa2, 0xe8, 0xa4, 0x1c, 0x45, 0x10, 0x16, 0x41, 0x2f, 0xca, 0x11, 0xe4, - 0xdf, 0xf1, 0xc9, 0x4a, 0x47, 0x8a, 0x51, 0x11, 0xa4, 0xc6, 0x88, 0x20, 0x35, 0x46, 0x04, 0xa9, - 0x31, 0x22, 0x48, 0x8d, 0x11, 0x41, 0x6a, 0x8c, 0x08, 0x52, 0x63, 0x44, 0x90, 0x1a, 0x23, 0x82, - 0xd4, 0x38, 0x11, 0xa4, 0xc6, 0x8a, 0x20, 0xb5, 0x57, 0x04, 0x9d, 0x94, 0x6f, 0x3c, 0x40, 0x58, - 0x41, 0x3a, 0x29, 0x1f, 0x7d, 0x46, 0x87, 0x90, 0x1a, 0x2b, 0x84, 0xd4, 0x5e, 0x21, 0xf4, 0x6d, - 0x15, 0x26, 0x84, 0x10, 0x62, 0xe7, 0x43, 0x6f, 0x55, 0x05, 0x3a, 0x1f, 0xe3, 0x82, 0x45, 0x58, - 0x4c, 0x9d, 0x8f, 0x71, 0x48, 0xbd, 0x5f, 0x9c, 0x75, 0x57, 0xa1, 0x72, 0x8c, 0x2a, 0x74, 0xc5, - 0x8b, 0xa1, 0xf3, 0x31, 0x2e, 0x5e, 0x74, 0xc7, 0xde, 0xc5, 0xfd, 0x8a, 0xc0, 0x23, 0xb1, 0x8a, - 0xc0, 0x52, 0xac, 0x22, 0x70, 0xcd, 0xf7, 0xe0, 0x47, 0x12, 0x70, 0xd8, 0xf7, 0x20, 0xfd, 0x44, - 0x7e, 0xbf, 0x29, 0x1b, 0x38, 0xa2, 0xd2, 0xf9, 0xb1, 0x4d, 0xc0, 0x8d, 0x89, 0xa5, 0xba, 0xbe, - 0x26, 0x1e, 0x56, 0xe5, 0x0e, 0x7a, 0x80, 0x13, 0xf0, 0x38, 0xdb, 0x0c, 0x3d, 0x09, 0xea, 0x52, - 0xdd, 0x21, 0xd5, 0x22, 0xec, 0xb1, 0x45, 0x03, 0x93, 0x75, 0x03, 0x06, 0x08, 0xbb, 0x43, 0xdc, - 0x7b, 0x3b, 0x0f, 0x2e, 0x19, 0x4c, 0x52, 0xf6, 0x45, 0x05, 0x8e, 0x0b, 0xa1, 0xfc, 0xd6, 0x1c, - 0x19, 0x5c, 0x8e, 0x75, 0x64, 0x20, 0x24, 0x88, 0x7f, 0x7c, 0x70, 0x6f, 0xf7, 0x49, 0x75, 0x30, - 0x4b, 0xe4, 0xa3, 0x84, 0xff, 0x01, 0xa3, 0xfe, 0x0c, 0xc8, 0x3b, 0xdb, 0xb9, 0xe8, 0xdd, 0xcc, - 0xb0, 0xd4, 0x3c, 0x27, 0xed, 0xa2, 0xed, 0x0b, 0xf3, 0xb2, 0x35, 0x9b, 0x83, 0xb1, 0x8a, 0xf8, - 0xc7, 0x41, 0x51, 0x9b, 0x11, 0x29, 0xdc, 0x9a, 0xdf, 0xfc, 0xdc, 0x74, 0x5f, 0xf6, 0x7e, 0x18, - 0x0e, 0xfe, 0xfd, 0x8f, 0x04, 0x1c, 0xe4, 0xc0, 0x5c, 0xf2, 0x25, 0xcc, 0xfd, 0x1b, 0x0a, 0x1c, - 0x09, 0xb2, 0x3f, 0xda, 0x70, 0x77, 0x96, 0x2c, 0xdc, 0xd3, 0x3f, 0x08, 0x29, 0xc4, 0x1c, 0xc7, - 0x7e, 0x8a, 0x85, 0xbd, 0x47, 0x86, 0xb2, 0xcf, 0x91, 0x7f, 0x0d, 0x0f, 0x22, 0xed, 0x82, 0xf0, - 0xc7, 0x2e, 0x4c, 0xdd, 0x03, 0xfd, 0x54, 0xbe, 0xa8, 0xd7, 0x88, 0xa4, 0xd7, 0xe7, 0x43, 0xf4, - 0x22, 0x71, 0xa4, 0x5f, 0x13, 0xf4, 0x0a, 0xbc, 0xae, 0x86, 0xb2, 0xcf, 0xf1, 0xe0, 0x2b, 0xa4, - 0x70, 0xff, 0x47, 0x22, 0x2a, 0x5a, 0xc9, 0x19, 0x48, 0x95, 0x65, 0x9e, 0x70, 0x3d, 0x4b, 0x90, - 0xac, 0xd8, 0x75, 0xf2, 0x23, 0x31, 0xe4, 0x57, 0x91, 0x99, 0x91, 0xd9, 0x4f, 0x24, 0x9f, 0x82, - 0x54, 0x71, 0xa7, 0xd1, 0xac, 0x77, 0x90, 0xc5, 0xce, 0xec, 0xd9, 0x16, 0x3a, 0xc6, 0x18, 0x1e, - 0x2d, 0x5b, 0x84, 0xf1, 0x8a, 0x6d, 0x15, 0xf6, 0xdc, 0x60, 0xdd, 0x98, 0x93, 0x52, 0x84, 0x9d, - 0xf9, 0x90, 0x3f, 0x06, 0xc1, 0x0c, 0x85, 0xfe, 0xef, 0xbd, 0x3c, 0xad, 0x6c, 0x78, 0xfb, 0xe7, - 0x2b, 0x70, 0x94, 0xa5, 0x4f, 0x97, 0xa8, 0x85, 0x28, 0x51, 0x83, 0xec, 0x9c, 0x3a, 0x20, 0x6e, - 0x09, 0x8b, 0xb3, 0x42, 0xc5, 0xbd, 0x39, 0xcd, 0x70, 0x53, 0xb4, 0xaf, 0x66, 0xea, 0x81, 0x34, - 0x0b, 0x15, 0x37, 0x17, 0x25, 0x4e, 0xd2, 0xec, 0x6e, 0x18, 0xf4, 0x68, 0x81, 0x68, 0x08, 0x66, - 0xca, 0xc2, 0x6c, 0x16, 0x86, 0x02, 0x09, 0xab, 0xf7, 0x83, 0x92, 0xd7, 0xfa, 0xf0, 0x7f, 0x05, - 0x4d, 0xc1, 0xff, 0x15, 0xb5, 0xc4, 0xec, 0x3d, 0x30, 0x26, 0xed, 0x5f, 0x62, 0x4a, 0x49, 0x03, - 0xfc, 0x5f, 0x59, 0x1b, 0x9a, 0x4a, 0x7e, 0xf4, 0x77, 0x32, 0x7d, 0xb3, 0x97, 0x41, 0xef, 0xde, - 0xe9, 0xd4, 0x07, 0x20, 0x91, 0xc7, 0x22, 0x8f, 0x42, 0xa2, 0x50, 0xd0, 0x94, 0xa9, 0xb1, 0xff, - 0xfb, 0x99, 0xe3, 0x43, 0x05, 0xf2, 0xc7, 0xcd, 0xd7, 0x91, 0x5b, 0x28, 0x30, 0xf0, 0x43, 0x70, - 0x24, 0x74, 0xa7, 0x14, 0xe3, 0x8b, 0x45, 0x8a, 0x2f, 0x95, 0xba, 0xf0, 0xa5, 0x12, 0xc1, 0x2b, - 0x39, 0x7e, 0xe2, 0x9c, 0xd7, 0x43, 0x76, 0x19, 0xd3, 0xf5, 0xc0, 0x09, 0x77, 0x3e, 0xf7, 0x10, - 0xe3, 0x2d, 0x84, 0xf2, 0xa2, 0x88, 0x13, 0xeb, 0x42, 0xae, 0xc8, 0xf0, 0xc5, 0x50, 0xfc, 0x96, - 0x74, 0xac, 0x2a, 0xae, 0x10, 0x4c, 0x48, 0xd1, 0x53, 0xb8, 0x14, 0x2a, 0x64, 0x27, 0x70, 0xd9, - 0xbd, 0xe4, 0x29, 0x5c, 0x0e, 0xe5, 0x6d, 0x44, 0x5c, 0xfa, 0x2a, 0xe7, 0x4e, 0xb3, 0x45, 0x3e, - 0x7f, 0x46, 0x3f, 0xc2, 0x73, 0x54, 0xa8, 0xc0, 0xcc, 0x40, 0x9c, 0x2b, 0x57, 0x64, 0x80, 0x42, - 0x4f, 0x40, 0x6f, 0x2b, 0x71, 0x64, 0xee, 0x11, 0x26, 0xa4, 0xd8, 0x53, 0x48, 0x84, 0xa9, 0x38, - 0xbc, 0xb0, 0x71, 0xf3, 0x95, 0x4c, 0xdf, 0x4b, 0xaf, 0x64, 0xfa, 0xfe, 0xee, 0x95, 0x4c, 0xdf, - 0xf7, 0x5f, 0xc9, 0x28, 0x3f, 0x7c, 0x25, 0xa3, 0xfc, 0xf8, 0x95, 0x8c, 0xf2, 0xd3, 0x57, 0x32, - 0xca, 0xb3, 0xb7, 0x32, 0xca, 0x0b, 0xb7, 0x32, 0xca, 0x97, 0x6f, 0x65, 0x94, 0x6f, 0xdc, 0xca, - 0x28, 0x2f, 0xde, 0xca, 0x28, 0x37, 0x6f, 0x65, 0x94, 0x97, 0x6e, 0x65, 0xfa, 0xbe, 0x7f, 0x2b, - 0xa3, 0xfc, 0xf0, 0x56, 0xa6, 0xef, 0xc7, 0xb7, 0x32, 0xca, 0x4f, 0x6f, 0x65, 0xfa, 0x9e, 0x7d, - 0x35, 0xd3, 0xf7, 0xfc, 0xab, 0x99, 0xbe, 0x17, 0x5e, 0xcd, 0x28, 0xff, 0x19, 0x00, 0x00, 0xff, - 0xff, 0xef, 0x11, 0xb7, 0xc0, 0x69, 0x67, 0x00, 0x00, + // 6731 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x7b, 0x70, 0x24, 0x57, + 0x79, 0xaf, 0x7a, 0x7a, 0xa4, 0x1d, 0x7d, 0x7a, 0xb5, 0x5a, 0xbb, 0xda, 0xb1, 0xbc, 0x96, 0x76, + 0xc7, 0xeb, 0xb5, 0x2c, 0xdb, 0x5a, 0xad, 0x56, 0xfb, 0x9a, 0xc5, 0xf6, 0x9d, 0xd7, 0xae, 0xb5, + 0xac, 0x46, 0xa2, 0x25, 0x61, 0x2f, 0xdc, 0x5b, 0x53, 0xbd, 0x33, 0x47, 0xd2, 0xd8, 0x33, 0xdd, + 0xc3, 0x74, 0x8f, 0x6d, 0xb9, 0x6e, 0xdd, 0xf2, 0x85, 0x7b, 0x09, 0x24, 0x95, 0x27, 0x49, 0x05, + 0x08, 0x18, 0x03, 0x05, 0x18, 0xf2, 0x82, 0x40, 0x08, 0x90, 0x54, 0xf0, 0x3f, 0x24, 0x9b, 0xaa, + 0x54, 0xca, 0xe4, 0xaf, 0x14, 0x95, 0x72, 0xe1, 0x35, 0x55, 0x21, 0x89, 0x13, 0x08, 0x71, 0x55, + 0xa8, 0x32, 0x7f, 0xa4, 0xce, 0xab, 0xbb, 0xcf, 0x99, 0x1e, 0x75, 0xcb, 0x6b, 0x1b, 0xfe, 0xd9, + 0x9d, 0x39, 0xdf, 0xf7, 0xfb, 0xfa, 0x3b, 0xdf, 0xeb, 0x7c, 0x7d, 0xce, 0xd1, 0xc0, 0x8f, 0x2e, + 0xc0, 0xd1, 0x6d, 0xdb, 0xde, 0x6e, 0xa0, 0x93, 0xad, 0xb6, 0xed, 0xda, 0xd7, 0x3b, 0x5b, 0x27, + 0x6b, 0xc8, 0xa9, 0xb6, 0xeb, 0x2d, 0xd7, 0x6e, 0xcf, 0x93, 0x31, 0x7d, 0x8c, 0x72, 0xcc, 0x73, + 0x8e, 0xcc, 0x0a, 0x8c, 0x5f, 0xaa, 0x37, 0x50, 0xd1, 0x63, 0x5c, 0x47, 0xae, 0x7e, 0x1e, 0x92, + 0x5b, 0xf5, 0x06, 0x4a, 0x2b, 0x47, 0xd5, 0xd9, 0xa1, 0xc5, 0xe3, 0xf3, 0x12, 0x68, 0x5e, 0x44, + 0xac, 0xe1, 0x61, 0x83, 0x20, 0x32, 0x3f, 0x48, 0xc2, 0x44, 0x08, 0x55, 0xd7, 0x21, 0x69, 0x99, + 0x4d, 0x2c, 0x51, 0x99, 0x1d, 0x34, 0xc8, 0x67, 0x3d, 0x0d, 0x07, 0x5a, 0x66, 0xf5, 0x71, 0x73, + 0x1b, 0xa5, 0x13, 0x64, 0x98, 0x7f, 0xd5, 0xa7, 0x01, 0x6a, 0xa8, 0x85, 0xac, 0x1a, 0xb2, 0xaa, + 0xbb, 0x69, 0xf5, 0xa8, 0x3a, 0x3b, 0x68, 0x04, 0x46, 0xf4, 0x7b, 0x61, 0xbc, 0xd5, 0xb9, 0xde, + 0xa8, 0x57, 0x2b, 0x01, 0x36, 0x38, 0xaa, 0xce, 0xf6, 0x1b, 0x1a, 0x25, 0x14, 0x7d, 0xe6, 0xbb, + 0x61, 0xec, 0x49, 0x64, 0x3e, 0x1e, 0x64, 0x1d, 0x22, 0xac, 0xa3, 0x78, 0x38, 0xc0, 0x58, 0x80, + 0xe1, 0x26, 0x72, 0x1c, 0x73, 0x1b, 0x55, 0xdc, 0xdd, 0x16, 0x4a, 0x27, 0xc9, 0xec, 0x8f, 0x76, + 0xcd, 0x5e, 0x9e, 0xf9, 0x10, 0x43, 0x6d, 0xec, 0xb6, 0x90, 0x9e, 0x83, 0x41, 0x64, 0x75, 0x9a, + 0x54, 0x42, 0x7f, 0x0f, 0xfb, 0x95, 0xac, 0x4e, 0x53, 0x96, 0x92, 0xc2, 0x30, 0x26, 0xe2, 0x80, + 0x83, 0xda, 0x4f, 0xd4, 0xab, 0x28, 0x3d, 0x40, 0x04, 0xdc, 0xdd, 0x25, 0x60, 0x9d, 0xd2, 0x65, + 0x19, 0x1c, 0xa7, 0x17, 0x60, 0x10, 0x3d, 0xe5, 0x22, 0xcb, 0xa9, 0xdb, 0x56, 0xfa, 0x00, 0x11, + 0x72, 0x57, 0x88, 0x17, 0x51, 0xa3, 0x26, 0x8b, 0xf0, 0x71, 0xfa, 0x59, 0x38, 0x60, 0xb7, 0xdc, + 0xba, 0x6d, 0x39, 0xe9, 0xd4, 0x51, 0x65, 0x76, 0x68, 0xf1, 0x48, 0x68, 0x20, 0xac, 0x52, 0x1e, + 0x83, 0x33, 0xeb, 0xcb, 0xa0, 0x39, 0x76, 0xa7, 0x5d, 0x45, 0x95, 0xaa, 0x5d, 0x43, 0x95, 0xba, + 0xb5, 0x65, 0xa7, 0x07, 0x89, 0x80, 0x99, 0xee, 0x89, 0x10, 0xc6, 0x82, 0x5d, 0x43, 0xcb, 0xd6, + 0x96, 0x6d, 0x8c, 0x3a, 0xc2, 0x77, 0x7d, 0x12, 0x06, 0x9c, 0x5d, 0xcb, 0x35, 0x9f, 0x4a, 0x0f, + 0x93, 0x08, 0x61, 0xdf, 0x32, 0xdf, 0x1c, 0x80, 0xb1, 0x38, 0x21, 0x76, 0x11, 0xfa, 0xb7, 0xf0, + 0x2c, 0xd3, 0x89, 0xfd, 0xd8, 0x80, 0x62, 0x44, 0x23, 0x0e, 0xbc, 0x41, 0x23, 0xe6, 0x60, 0xc8, + 0x42, 0x8e, 0x8b, 0x6a, 0x34, 0x22, 0xd4, 0x98, 0x31, 0x05, 0x14, 0xd4, 0x1d, 0x52, 0xc9, 0x37, + 0x14, 0x52, 0x8f, 0xc2, 0x98, 0xa7, 0x52, 0xa5, 0x6d, 0x5a, 0xdb, 0x3c, 0x36, 0x4f, 0x46, 0x69, + 0x32, 0x5f, 0xe2, 0x38, 0x03, 0xc3, 0x8c, 0x51, 0x24, 0x7c, 0xd7, 0x8b, 0x00, 0xb6, 0x85, 0xec, + 0xad, 0x4a, 0x0d, 0x55, 0x1b, 0xe9, 0x54, 0x0f, 0x2b, 0xad, 0x62, 0x96, 0x2e, 0x2b, 0xd9, 0x74, + 0xb4, 0xda, 0xd0, 0x2f, 0xf8, 0xa1, 0x76, 0xa0, 0x47, 0xa4, 0xac, 0xd0, 0x24, 0xeb, 0x8a, 0xb6, + 0x4d, 0x18, 0x6d, 0x23, 0x1c, 0xf7, 0xa8, 0xc6, 0x66, 0x36, 0x48, 0x94, 0x98, 0x8f, 0x9c, 0x99, + 0xc1, 0x60, 0x74, 0x62, 0x23, 0xed, 0xe0, 0x57, 0xfd, 0x4e, 0xf0, 0x06, 0x2a, 0x24, 0xac, 0x80, + 0x54, 0xa1, 0x61, 0x3e, 0x58, 0x36, 0x9b, 0x68, 0xea, 0x69, 0x18, 0x15, 0xcd, 0xa3, 0x1f, 0x84, + 0x7e, 0xc7, 0x35, 0xdb, 0x2e, 0x89, 0xc2, 0x7e, 0x83, 0x7e, 0xd1, 0x35, 0x50, 0x91, 0x55, 0x23, + 0x55, 0xae, 0xdf, 0xc0, 0x1f, 0xf5, 0xff, 0xe1, 0x4f, 0x58, 0x25, 0x13, 0x3e, 0xd1, 0xed, 0x51, + 0x41, 0xb2, 0x3c, 0xef, 0xa9, 0x73, 0x30, 0x22, 0x4c, 0x20, 0xee, 0xa3, 0x33, 0xff, 0x1b, 0x0e, + 0x85, 0x8a, 0xd6, 0x1f, 0x85, 0x83, 0x1d, 0xab, 0x6e, 0xb9, 0xa8, 0xdd, 0x6a, 0x23, 0x1c, 0xb1, + 0xf4, 0x51, 0xe9, 0x7f, 0x3a, 0xd0, 0x23, 0xe6, 0x36, 0x83, 0xdc, 0x54, 0x8a, 0x31, 0xd1, 0xe9, + 0x1e, 0x9c, 0x1b, 0x4c, 0xfd, 0xf0, 0x80, 0xf6, 0xcc, 0x33, 0xcf, 0x3c, 0x93, 0xc8, 0x7c, 0x74, + 0x00, 0x0e, 0x86, 0xe5, 0x4c, 0x68, 0xfa, 0x4e, 0xc2, 0x80, 0xd5, 0x69, 0x5e, 0x47, 0x6d, 0x62, + 0xa4, 0x7e, 0x83, 0x7d, 0xd3, 0x73, 0xd0, 0xdf, 0x30, 0xaf, 0xa3, 0x46, 0x3a, 0x79, 0x54, 0x99, + 0x1d, 0x5d, 0xbc, 0x37, 0x56, 0x56, 0xce, 0x5f, 0xc5, 0x10, 0x83, 0x22, 0xf5, 0x07, 0x21, 0xc9, + 0x4a, 0x34, 0x96, 0x30, 0x17, 0x4f, 0x02, 0xce, 0x25, 0x83, 0xe0, 0xf4, 0xdb, 0x61, 0x10, 0xff, + 0x4f, 0x63, 0x63, 0x80, 0xe8, 0x9c, 0xc2, 0x03, 0x38, 0x2e, 0xf4, 0x29, 0x48, 0x91, 0x34, 0xa9, + 0x21, 0xbe, 0xb4, 0x79, 0xdf, 0x71, 0x60, 0xd5, 0xd0, 0x96, 0xd9, 0x69, 0xb8, 0x95, 0x27, 0xcc, + 0x46, 0x07, 0x91, 0x80, 0x1f, 0x34, 0x86, 0xd9, 0xe0, 0xbb, 0xf1, 0x98, 0x3e, 0x03, 0x43, 0x34, + 0xab, 0xea, 0x56, 0x0d, 0x3d, 0x45, 0xaa, 0x67, 0xbf, 0x41, 0x13, 0x6d, 0x19, 0x8f, 0xe0, 0xc7, + 0x3f, 0xe6, 0xd8, 0x16, 0x0f, 0x4d, 0xf2, 0x08, 0x3c, 0x40, 0x1e, 0x7f, 0x4e, 0x2e, 0xdc, 0x77, + 0x84, 0x4f, 0x4f, 0x8e, 0xa9, 0xcc, 0xd7, 0x13, 0x90, 0x24, 0xf5, 0x62, 0x0c, 0x86, 0x36, 0xae, + 0xad, 0x95, 0x2a, 0xc5, 0xd5, 0xcd, 0xfc, 0xd5, 0x92, 0xa6, 0xe8, 0xa3, 0x00, 0x64, 0xe0, 0xd2, + 0xd5, 0xd5, 0xdc, 0x86, 0x96, 0xf0, 0xbe, 0x2f, 0x97, 0x37, 0xce, 0x2e, 0x69, 0xaa, 0x07, 0xd8, + 0xa4, 0x03, 0xc9, 0x20, 0xc3, 0xe9, 0x45, 0xad, 0x5f, 0xd7, 0x60, 0x98, 0x0a, 0x58, 0x7e, 0xb4, + 0x54, 0x3c, 0xbb, 0xa4, 0x0d, 0x88, 0x23, 0xa7, 0x17, 0xb5, 0x03, 0xfa, 0x08, 0x0c, 0x92, 0x91, + 0xfc, 0xea, 0xea, 0x55, 0x2d, 0xe5, 0xc9, 0x5c, 0xdf, 0x30, 0x96, 0xcb, 0x97, 0xb5, 0x41, 0x4f, + 0xe6, 0x65, 0x63, 0x75, 0x73, 0x4d, 0x03, 0x4f, 0xc2, 0x4a, 0x69, 0x7d, 0x3d, 0x77, 0xb9, 0xa4, + 0x0d, 0x79, 0x1c, 0xf9, 0x6b, 0x1b, 0xa5, 0x75, 0x6d, 0x58, 0x50, 0xeb, 0xf4, 0xa2, 0x36, 0xe2, + 0x3d, 0xa2, 0x54, 0xde, 0x5c, 0xd1, 0x46, 0xf5, 0x71, 0x18, 0xa1, 0x8f, 0xe0, 0x4a, 0x8c, 0x49, + 0x43, 0x67, 0x97, 0x34, 0xcd, 0x57, 0x84, 0x4a, 0x19, 0x17, 0x06, 0xce, 0x2e, 0x69, 0x7a, 0xa6, + 0x00, 0xfd, 0x24, 0xba, 0x74, 0x1d, 0x46, 0xaf, 0xe6, 0xf2, 0xa5, 0xab, 0x95, 0xd5, 0xb5, 0x8d, + 0xe5, 0xd5, 0x72, 0xee, 0xaa, 0xa6, 0xf8, 0x63, 0x46, 0xe9, 0x5d, 0x9b, 0xcb, 0x46, 0xa9, 0xa8, + 0x25, 0x82, 0x63, 0x6b, 0xa5, 0xdc, 0x46, 0xa9, 0xa8, 0xa9, 0x99, 0x2a, 0x1c, 0x0c, 0xab, 0x93, + 0xa1, 0x99, 0x11, 0x70, 0x71, 0xa2, 0x87, 0x8b, 0x89, 0xac, 0x2e, 0x17, 0xbf, 0x92, 0x80, 0x89, + 0x90, 0xb5, 0x22, 0xf4, 0x21, 0x0f, 0x41, 0x3f, 0x0d, 0x51, 0xba, 0x7a, 0xde, 0x13, 0xba, 0xe8, + 0x90, 0x80, 0xed, 0x5a, 0x41, 0x09, 0x2e, 0xd8, 0x41, 0xa8, 0x3d, 0x3a, 0x08, 0x2c, 0xa2, 0xab, + 0xa6, 0xff, 0xaf, 0xae, 0x9a, 0x4e, 0x97, 0xbd, 0xb3, 0x71, 0x96, 0x3d, 0x32, 0xb6, 0xbf, 0xda, + 0xde, 0x1f, 0x52, 0xdb, 0x2f, 0xc2, 0x78, 0x97, 0xa0, 0xd8, 0x35, 0xf6, 0x03, 0x0a, 0xa4, 0x7b, + 0x19, 0x27, 0xa2, 0xd2, 0x25, 0x84, 0x4a, 0x77, 0x51, 0xb6, 0xe0, 0xb1, 0xde, 0x4e, 0xe8, 0xf2, + 0xf5, 0x17, 0x14, 0x98, 0x0c, 0xef, 0x14, 0x43, 0x75, 0x78, 0x10, 0x06, 0x9a, 0xc8, 0xdd, 0xb1, + 0x79, 0xb7, 0x74, 0x22, 0x64, 0x0d, 0xc6, 0x64, 0xd9, 0xd9, 0x0c, 0x15, 0x5c, 0xc4, 0xd5, 0x5e, + 0xed, 0x1e, 0xd5, 0xa6, 0x4b, 0xd3, 0x0f, 0x27, 0xe0, 0x50, 0xa8, 0xf0, 0x50, 0x45, 0xef, 0x00, + 0xa8, 0x5b, 0xad, 0x8e, 0x4b, 0x3b, 0x22, 0x5a, 0x60, 0x07, 0xc9, 0x08, 0x29, 0x5e, 0xb8, 0x78, + 0x76, 0x5c, 0x8f, 0xae, 0x12, 0x3a, 0xd0, 0x21, 0xc2, 0x70, 0xde, 0x57, 0x34, 0x49, 0x14, 0x9d, + 0xee, 0x31, 0xd3, 0xae, 0xc0, 0x5c, 0x00, 0xad, 0xda, 0xa8, 0x23, 0xcb, 0xad, 0x38, 0x6e, 0x1b, + 0x99, 0xcd, 0xba, 0xb5, 0x4d, 0x56, 0x90, 0x54, 0xb6, 0x7f, 0xcb, 0x6c, 0x38, 0xc8, 0x18, 0xa3, + 0xe4, 0x75, 0x4e, 0xc5, 0x08, 0x12, 0x40, 0xed, 0x00, 0x62, 0x40, 0x40, 0x50, 0xb2, 0x87, 0xc8, + 0x7c, 0x35, 0x05, 0x43, 0x81, 0xbe, 0x5a, 0x3f, 0x06, 0xc3, 0x8f, 0x99, 0x4f, 0x98, 0x15, 0xfe, + 0xae, 0x44, 0x2d, 0x31, 0x84, 0xc7, 0xd6, 0xd8, 0xfb, 0xd2, 0x02, 0x1c, 0x24, 0x2c, 0x76, 0xc7, + 0x45, 0xed, 0x4a, 0xb5, 0x61, 0x3a, 0x0e, 0x31, 0x5a, 0x8a, 0xb0, 0xea, 0x98, 0xb6, 0x8a, 0x49, + 0x05, 0x4e, 0xd1, 0xcf, 0xc0, 0x04, 0x41, 0x34, 0x3b, 0x0d, 0xb7, 0xde, 0x6a, 0xa0, 0x0a, 0x7e, + 0x7b, 0x73, 0xc8, 0x4a, 0xe2, 0x69, 0x36, 0x8e, 0x39, 0x56, 0x18, 0x03, 0xd6, 0xc8, 0xd1, 0x8b, + 0x70, 0x07, 0x81, 0x6d, 0x23, 0x0b, 0xb5, 0x4d, 0x17, 0x55, 0xd0, 0xfb, 0x3a, 0x66, 0xc3, 0xa9, + 0x98, 0x56, 0xad, 0xb2, 0x63, 0x3a, 0x3b, 0xe9, 0x83, 0x58, 0x40, 0x3e, 0x91, 0x56, 0x8c, 0xdb, + 0x30, 0xe3, 0x65, 0xc6, 0x57, 0x22, 0x6c, 0x39, 0xab, 0xf6, 0xb0, 0xe9, 0xec, 0xe8, 0x59, 0x98, + 0x24, 0x52, 0x1c, 0xb7, 0x5d, 0xb7, 0xb6, 0x2b, 0xd5, 0x1d, 0x54, 0x7d, 0xbc, 0xd2, 0x71, 0xb7, + 0xce, 0xa7, 0x6f, 0x0f, 0x3e, 0x9f, 0x68, 0xb8, 0x4e, 0x78, 0x0a, 0x98, 0x65, 0xd3, 0xdd, 0x3a, + 0xaf, 0xaf, 0xc3, 0x30, 0x76, 0x46, 0xb3, 0xfe, 0x34, 0xaa, 0x6c, 0xd9, 0x6d, 0xb2, 0x34, 0x8e, + 0x86, 0x94, 0xa6, 0x80, 0x05, 0xe7, 0x57, 0x19, 0x60, 0xc5, 0xae, 0xa1, 0x6c, 0xff, 0xfa, 0x5a, + 0xa9, 0x54, 0x34, 0x86, 0xb8, 0x94, 0x4b, 0x76, 0x1b, 0x07, 0xd4, 0xb6, 0xed, 0x19, 0x78, 0x88, + 0x06, 0xd4, 0xb6, 0xcd, 0xcd, 0x7b, 0x06, 0x26, 0xaa, 0x55, 0x3a, 0xe7, 0x7a, 0xb5, 0xc2, 0xde, + 0xb1, 0x9c, 0xb4, 0x26, 0x18, 0xab, 0x5a, 0xbd, 0x4c, 0x19, 0x58, 0x8c, 0x3b, 0xfa, 0x05, 0x38, + 0xe4, 0x1b, 0x2b, 0x08, 0x1c, 0xef, 0x9a, 0xa5, 0x0c, 0x3d, 0x03, 0x13, 0xad, 0xdd, 0x6e, 0xa0, + 0x2e, 0x3c, 0xb1, 0xb5, 0x2b, 0xc3, 0xce, 0xc1, 0xc1, 0xd6, 0x4e, 0xab, 0x1b, 0x37, 0x17, 0xc4, + 0xe9, 0xad, 0x9d, 0x96, 0x0c, 0xbc, 0x8b, 0xbc, 0x70, 0xb7, 0x51, 0xd5, 0x74, 0x51, 0x2d, 0x7d, + 0x38, 0xc8, 0x1e, 0x20, 0xe8, 0x27, 0x41, 0xab, 0x56, 0x2b, 0xc8, 0x32, 0xaf, 0x37, 0x50, 0xc5, + 0x6c, 0x23, 0xcb, 0x74, 0xd2, 0x33, 0x41, 0xe6, 0xd1, 0x6a, 0xb5, 0x44, 0xa8, 0x39, 0x42, 0xd4, + 0xe7, 0x60, 0xdc, 0xbe, 0xfe, 0x58, 0x95, 0x86, 0x64, 0xa5, 0xd5, 0x46, 0x5b, 0xf5, 0xa7, 0xd2, + 0xc7, 0x89, 0x7d, 0xc7, 0x30, 0x81, 0x04, 0xe4, 0x1a, 0x19, 0xd6, 0xef, 0x01, 0xad, 0xea, 0xec, + 0x98, 0xed, 0x16, 0xa9, 0xc9, 0x4e, 0xcb, 0xac, 0xa2, 0xf4, 0x5d, 0x94, 0x95, 0x8e, 0x97, 0xf9, + 0x30, 0x4e, 0x09, 0xe7, 0xc9, 0xfa, 0x96, 0xcb, 0x25, 0xde, 0x4d, 0x53, 0x82, 0x8c, 0x31, 0x69, + 0xb3, 0xa0, 0x61, 0x53, 0x08, 0x0f, 0x9e, 0x25, 0x6c, 0xa3, 0xad, 0x9d, 0x56, 0xf0, 0xb9, 0x77, + 0xc2, 0x08, 0xe6, 0xf4, 0x1f, 0x7a, 0x0f, 0x6d, 0xc8, 0x5a, 0x3b, 0x81, 0x27, 0xbe, 0x65, 0xbd, + 0x71, 0x26, 0x0b, 0xc3, 0xc1, 0xf8, 0xd4, 0x07, 0x81, 0x46, 0xa8, 0xa6, 0xe0, 0x66, 0xa5, 0xb0, + 0x5a, 0xc4, 0x6d, 0xc6, 0x7b, 0x4a, 0x5a, 0x02, 0xb7, 0x3b, 0x57, 0x97, 0x37, 0x4a, 0x15, 0x63, + 0xb3, 0xbc, 0xb1, 0xbc, 0x52, 0xd2, 0xd4, 0x60, 0x5f, 0xfd, 0x9d, 0x04, 0x8c, 0x8a, 0xaf, 0x48, + 0xfa, 0x3b, 0xe0, 0x30, 0xdf, 0xcf, 0x70, 0x90, 0x5b, 0x79, 0xb2, 0xde, 0x26, 0x29, 0xd3, 0x34, + 0xe9, 0xf2, 0xe5, 0x39, 0xed, 0x20, 0xe3, 0x5a, 0x47, 0xee, 0x23, 0xf5, 0x36, 0x4e, 0x88, 0xa6, + 0xe9, 0xea, 0x57, 0x61, 0xc6, 0xb2, 0x2b, 0x8e, 0x6b, 0x5a, 0x35, 0xb3, 0x5d, 0xab, 0xf8, 0x3b, + 0x49, 0x15, 0xb3, 0x5a, 0x45, 0x8e, 0x63, 0xd3, 0xa5, 0xca, 0x93, 0x72, 0xc4, 0xb2, 0xd7, 0x19, + 0xb3, 0x5f, 0xc3, 0x73, 0x8c, 0x55, 0x0a, 0x30, 0xb5, 0x57, 0x80, 0xdd, 0x0e, 0x83, 0x4d, 0xb3, + 0x55, 0x41, 0x96, 0xdb, 0xde, 0x25, 0x8d, 0x71, 0xca, 0x48, 0x35, 0xcd, 0x56, 0x09, 0x7f, 0x7f, + 0x7b, 0xde, 0x4f, 0xfe, 0x51, 0x85, 0xe1, 0x60, 0x73, 0x8c, 0xdf, 0x35, 0xaa, 0x64, 0x1d, 0x51, + 0x48, 0xa5, 0xb9, 0x73, 0xcf, 0x56, 0x7a, 0xbe, 0x80, 0x17, 0x98, 0xec, 0x00, 0x6d, 0x59, 0x0d, + 0x8a, 0xc4, 0x8b, 0x3b, 0xae, 0x2d, 0x88, 0xb6, 0x08, 0x29, 0x83, 0x7d, 0xd3, 0x2f, 0xc3, 0xc0, + 0x63, 0x0e, 0x91, 0x3d, 0x40, 0x64, 0x1f, 0xdf, 0x5b, 0xf6, 0x95, 0x75, 0x22, 0x7c, 0xf0, 0xca, + 0x7a, 0xa5, 0xbc, 0x6a, 0xac, 0xe4, 0xae, 0x1a, 0x0c, 0xae, 0xdf, 0x06, 0xc9, 0x86, 0xf9, 0xf4, + 0xae, 0xb8, 0x14, 0x91, 0xa1, 0xb8, 0x86, 0xbf, 0x0d, 0x92, 0x4f, 0x22, 0xf3, 0x71, 0x71, 0x01, + 0x20, 0x43, 0x6f, 0x61, 0xe8, 0x9f, 0x84, 0x7e, 0x62, 0x2f, 0x1d, 0x80, 0x59, 0x4c, 0xeb, 0xd3, + 0x53, 0x90, 0x2c, 0xac, 0x1a, 0x38, 0xfc, 0x35, 0x18, 0xa6, 0xa3, 0x95, 0xb5, 0xe5, 0x52, 0xa1, + 0xa4, 0x25, 0x32, 0x67, 0x60, 0x80, 0x1a, 0x01, 0xa7, 0x86, 0x67, 0x06, 0xad, 0x8f, 0x7d, 0x65, + 0x32, 0x14, 0x4e, 0xdd, 0x5c, 0xc9, 0x97, 0x0c, 0x2d, 0x11, 0x74, 0xaf, 0x03, 0xc3, 0xc1, 0xbe, + 0xf8, 0xed, 0x89, 0xa9, 0x6f, 0x29, 0x30, 0x14, 0xe8, 0x73, 0x71, 0x83, 0x62, 0x36, 0x1a, 0xf6, + 0x93, 0x15, 0xb3, 0x51, 0x37, 0x1d, 0x16, 0x14, 0x40, 0x86, 0x72, 0x78, 0x24, 0xae, 0xd3, 0xde, + 0x16, 0xe5, 0x9f, 0x55, 0x40, 0x93, 0x5b, 0x4c, 0x49, 0x41, 0xe5, 0xe7, 0xaa, 0xe0, 0x27, 0x14, + 0x18, 0x15, 0xfb, 0x4a, 0x49, 0xbd, 0x63, 0x3f, 0x57, 0xf5, 0xbe, 0x9f, 0x80, 0x11, 0xa1, 0x9b, + 0x8c, 0xab, 0xdd, 0xfb, 0x60, 0xbc, 0x5e, 0x43, 0xcd, 0x96, 0xed, 0x22, 0xab, 0xba, 0x5b, 0x69, + 0xa0, 0x27, 0x50, 0x23, 0x9d, 0x21, 0x85, 0xe2, 0xe4, 0xde, 0xfd, 0xea, 0xfc, 0xb2, 0x8f, 0xbb, + 0x8a, 0x61, 0xd9, 0x89, 0xe5, 0x62, 0x69, 0x65, 0x6d, 0x75, 0xa3, 0x54, 0x2e, 0x5c, 0xab, 0x6c, + 0x96, 0xdf, 0x59, 0x5e, 0x7d, 0xa4, 0x6c, 0x68, 0x75, 0x89, 0xed, 0x2d, 0x4c, 0xf5, 0x35, 0xd0, + 0x64, 0xa5, 0xf4, 0xc3, 0x10, 0xa6, 0x96, 0xd6, 0xa7, 0x4f, 0xc0, 0x58, 0x79, 0xb5, 0xb2, 0xbe, + 0x5c, 0x2c, 0x55, 0x4a, 0x97, 0x2e, 0x95, 0x0a, 0x1b, 0xeb, 0x74, 0x07, 0xc2, 0xe3, 0xde, 0x10, + 0x93, 0xfa, 0xe3, 0x2a, 0x4c, 0x84, 0x68, 0xa2, 0xe7, 0xd8, 0xbb, 0x03, 0x7d, 0x9d, 0xb9, 0x3f, + 0x8e, 0xf6, 0xf3, 0x78, 0xc9, 0x5f, 0x33, 0xdb, 0x2e, 0x7b, 0xd5, 0xb8, 0x07, 0xb0, 0x95, 0x2c, + 0xb7, 0xbe, 0x55, 0x47, 0x6d, 0xb6, 0x61, 0x43, 0x5f, 0x28, 0xc6, 0xfc, 0x71, 0xba, 0x67, 0x73, + 0x1f, 0xe8, 0x2d, 0xdb, 0xa9, 0xbb, 0xf5, 0x27, 0x50, 0xa5, 0x6e, 0xf1, 0xdd, 0x1d, 0xfc, 0x82, + 0x91, 0x34, 0x34, 0x4e, 0x59, 0xb6, 0x5c, 0x8f, 0xdb, 0x42, 0xdb, 0xa6, 0xc4, 0x8d, 0x0b, 0xb8, + 0x6a, 0x68, 0x9c, 0xe2, 0x71, 0x1f, 0x83, 0xe1, 0x9a, 0xdd, 0xc1, 0x5d, 0x17, 0xe5, 0xc3, 0xeb, + 0x85, 0x62, 0x0c, 0xd1, 0x31, 0x8f, 0x85, 0xf5, 0xd3, 0xfe, 0xb6, 0xd2, 0xb0, 0x31, 0x44, 0xc7, + 0x28, 0xcb, 0xdd, 0x30, 0x66, 0x6e, 0x6f, 0xb7, 0xb1, 0x70, 0x2e, 0x88, 0xbe, 0x21, 0x8c, 0x7a, + 0xc3, 0x84, 0x71, 0xea, 0x0a, 0xa4, 0xb8, 0x1d, 0xf0, 0x92, 0x8c, 0x2d, 0x51, 0x69, 0xd1, 0xd7, + 0xde, 0xc4, 0xec, 0xa0, 0x91, 0xb2, 0x38, 0xf1, 0x18, 0x0c, 0xd7, 0x9d, 0x8a, 0xbf, 0x4b, 0x9e, + 0x38, 0x9a, 0x98, 0x4d, 0x19, 0x43, 0x75, 0xc7, 0xdb, 0x61, 0xcc, 0x7c, 0x21, 0x01, 0xa3, 0xe2, + 0x2e, 0xbf, 0x5e, 0x84, 0x54, 0xc3, 0xae, 0x9a, 0x24, 0xb4, 0xe8, 0x11, 0xd3, 0x6c, 0xc4, 0xc1, + 0xc0, 0xfc, 0x55, 0xc6, 0x6f, 0x78, 0xc8, 0xa9, 0xbf, 0x53, 0x20, 0xc5, 0x87, 0xf5, 0x49, 0x48, + 0xb6, 0x4c, 0x77, 0x87, 0x88, 0xeb, 0xcf, 0x27, 0x34, 0xc5, 0x20, 0xdf, 0xf1, 0xb8, 0xd3, 0x32, + 0x2d, 0x12, 0x02, 0x6c, 0x1c, 0x7f, 0xc7, 0x7e, 0x6d, 0x20, 0xb3, 0x46, 0x5e, 0x3f, 0xec, 0x66, + 0x13, 0x59, 0xae, 0xc3, 0xfd, 0xca, 0xc6, 0x0b, 0x6c, 0x58, 0xbf, 0x17, 0xc6, 0xdd, 0xb6, 0x59, + 0x6f, 0x08, 0xbc, 0x49, 0xc2, 0xab, 0x71, 0x82, 0xc7, 0x9c, 0x85, 0xdb, 0xb8, 0xdc, 0x1a, 0x72, + 0xcd, 0xea, 0x0e, 0xaa, 0xf9, 0xa0, 0x01, 0xb2, 0xcd, 0x70, 0x98, 0x31, 0x14, 0x19, 0x9d, 0x63, + 0x33, 0xdf, 0x55, 0x60, 0x9c, 0xbf, 0x30, 0xd5, 0x3c, 0x63, 0xad, 0x00, 0x98, 0x96, 0x65, 0xbb, + 0x41, 0x73, 0x75, 0x87, 0x72, 0x17, 0x6e, 0x3e, 0xe7, 0x81, 0x8c, 0x80, 0x80, 0xa9, 0x26, 0x80, + 0x4f, 0xe9, 0x69, 0xb6, 0x19, 0x18, 0x62, 0x47, 0x38, 0xe4, 0x1c, 0x90, 0xbe, 0x62, 0x03, 0x1d, + 0xc2, 0x6f, 0x56, 0xfa, 0x41, 0xe8, 0xbf, 0x8e, 0xb6, 0xeb, 0x16, 0xdb, 0x98, 0xa5, 0x5f, 0xf8, + 0x46, 0x48, 0xd2, 0xdb, 0x08, 0xc9, 0xbf, 0x17, 0x26, 0xaa, 0x76, 0x53, 0x56, 0x37, 0xaf, 0x49, + 0xaf, 0xf9, 0xce, 0xc3, 0xca, 0x7b, 0xc0, 0x6f, 0x31, 0x7f, 0xaa, 0x28, 0x9f, 0x49, 0xa8, 0x97, + 0xd7, 0xf2, 0x5f, 0x4a, 0x4c, 0x5d, 0xa6, 0xd0, 0x35, 0x3e, 0x53, 0x03, 0x6d, 0x35, 0x50, 0x15, + 0x6b, 0x0f, 0x9f, 0xbf, 0x17, 0xee, 0xdf, 0xae, 0xbb, 0x3b, 0x9d, 0xeb, 0xf3, 0x55, 0xbb, 0x79, + 0x72, 0xdb, 0xde, 0xb6, 0xfd, 0xa3, 0x4f, 0xfc, 0x8d, 0x7c, 0x21, 0x9f, 0xd8, 0xf1, 0xe7, 0xa0, + 0x37, 0x3a, 0x15, 0x79, 0x56, 0x9a, 0x2d, 0xc3, 0x04, 0x63, 0xae, 0x90, 0xf3, 0x17, 0xfa, 0x16, + 0xa1, 0xef, 0xb9, 0x87, 0x95, 0xfe, 0xca, 0x0f, 0xc8, 0x72, 0x6d, 0x8c, 0x33, 0x28, 0xa6, 0xd1, + 0x17, 0x8d, 0xac, 0x01, 0x87, 0x04, 0x79, 0x34, 0x35, 0x51, 0x3b, 0x42, 0xe2, 0x77, 0x98, 0xc4, + 0x89, 0x80, 0xc4, 0x75, 0x06, 0xcd, 0x16, 0x60, 0x64, 0x3f, 0xb2, 0xfe, 0x8a, 0xc9, 0x1a, 0x46, + 0x41, 0x21, 0x97, 0x61, 0x8c, 0x08, 0xa9, 0x76, 0x1c, 0xd7, 0x6e, 0x92, 0xba, 0xb7, 0xb7, 0x98, + 0xbf, 0xfe, 0x01, 0xcd, 0x95, 0x51, 0x0c, 0x2b, 0x78, 0xa8, 0x6c, 0x16, 0xc8, 0x91, 0x53, 0x0d, + 0x55, 0x1b, 0x11, 0x12, 0x6e, 0x30, 0x45, 0x3c, 0xfe, 0xec, 0xbb, 0xe1, 0x20, 0xfe, 0x4c, 0xca, + 0x52, 0x50, 0x93, 0xe8, 0x0d, 0xaf, 0xf4, 0x77, 0x3f, 0x40, 0xd3, 0x71, 0xc2, 0x13, 0x10, 0xd0, + 0x29, 0xe0, 0xc5, 0x6d, 0xe4, 0xba, 0xa8, 0xed, 0x54, 0xcc, 0x46, 0x98, 0x7a, 0x81, 0x1d, 0x83, + 0xf4, 0xc7, 0x5e, 0x15, 0xbd, 0x78, 0x99, 0x22, 0x73, 0x8d, 0x46, 0x76, 0x13, 0x0e, 0x87, 0x44, + 0x45, 0x0c, 0x99, 0x1f, 0x67, 0x32, 0x0f, 0x76, 0x45, 0x06, 0x16, 0xbb, 0x06, 0x7c, 0xdc, 0xf3, + 0x65, 0x0c, 0x99, 0xbf, 0xc7, 0x64, 0xea, 0x0c, 0xcb, 0x5d, 0x8a, 0x25, 0x5e, 0x81, 0xf1, 0x27, + 0x50, 0xfb, 0xba, 0xed, 0xb0, 0x5d, 0x9a, 0x18, 0xe2, 0x3e, 0xc1, 0xc4, 0x8d, 0x31, 0x20, 0xd9, + 0xb6, 0xc1, 0xb2, 0x2e, 0x40, 0x6a, 0xcb, 0xac, 0xa2, 0x18, 0x22, 0x3e, 0xc9, 0x44, 0x1c, 0xc0, + 0xfc, 0x18, 0x9a, 0x83, 0xe1, 0x6d, 0x9b, 0xad, 0x4c, 0xd1, 0xf0, 0x67, 0x19, 0x7c, 0x88, 0x63, + 0x98, 0x88, 0x96, 0xdd, 0xea, 0x34, 0xf0, 0xb2, 0x15, 0x2d, 0xe2, 0x53, 0x5c, 0x04, 0xc7, 0x30, + 0x11, 0xfb, 0x30, 0xeb, 0x73, 0x5c, 0x84, 0x13, 0xb0, 0xe7, 0x43, 0x30, 0x64, 0x5b, 0x8d, 0x5d, + 0xdb, 0x8a, 0xa3, 0xc4, 0xa7, 0x99, 0x04, 0x60, 0x10, 0x2c, 0xe0, 0x22, 0x0c, 0xc6, 0x75, 0xc4, + 0xe7, 0x5e, 0xe5, 0xe9, 0xc1, 0x3d, 0x70, 0x19, 0xc6, 0x78, 0x81, 0xaa, 0xdb, 0x56, 0x0c, 0x11, + 0x9f, 0x67, 0x22, 0x46, 0x03, 0x30, 0x36, 0x0d, 0x17, 0x39, 0xee, 0x36, 0x8a, 0x23, 0xe4, 0x0b, + 0x7c, 0x1a, 0x0c, 0xc2, 0x4c, 0x79, 0x1d, 0x59, 0xd5, 0x9d, 0x78, 0x12, 0x9e, 0xe7, 0xa6, 0xe4, + 0x18, 0x2c, 0xa2, 0x00, 0x23, 0x4d, 0xb3, 0xed, 0xec, 0x98, 0x8d, 0x58, 0xee, 0xf8, 0x22, 0x93, + 0x31, 0xec, 0x81, 0x98, 0x45, 0x3a, 0xd6, 0x7e, 0xc4, 0x7c, 0x89, 0x5b, 0x24, 0x00, 0x63, 0xa9, + 0xe7, 0xb8, 0x64, 0x4b, 0x6b, 0x3f, 0xd2, 0x7e, 0x9f, 0xa7, 0x1e, 0xc5, 0xae, 0x04, 0x25, 0x5e, + 0x84, 0x41, 0xa7, 0xfe, 0x74, 0x2c, 0x31, 0x7f, 0xc0, 0x3d, 0x4d, 0x00, 0x18, 0x7c, 0x0d, 0x6e, + 0x0b, 0x5d, 0x26, 0x62, 0x08, 0xfb, 0x43, 0x26, 0x6c, 0x32, 0x64, 0xa9, 0x60, 0x25, 0x61, 0xbf, + 0x22, 0xff, 0x88, 0x97, 0x04, 0x24, 0xc9, 0x5a, 0xc3, 0xef, 0x0a, 0x8e, 0xb9, 0xb5, 0x3f, 0xab, + 0xfd, 0x31, 0xb7, 0x1a, 0xc5, 0x0a, 0x56, 0xdb, 0x80, 0x49, 0x26, 0x71, 0x7f, 0x7e, 0xfd, 0x32, + 0x2f, 0xac, 0x14, 0xbd, 0x29, 0x7a, 0xf7, 0xbd, 0x30, 0xe5, 0x99, 0x93, 0x37, 0xa5, 0x4e, 0xa5, + 0x69, 0xb6, 0x62, 0x48, 0xfe, 0x0a, 0x93, 0xcc, 0x2b, 0xbe, 0xd7, 0xd5, 0x3a, 0x2b, 0x66, 0x0b, + 0x0b, 0x7f, 0x14, 0xd2, 0x5c, 0x78, 0xc7, 0x6a, 0xa3, 0xaa, 0xbd, 0x6d, 0xd5, 0x9f, 0x46, 0xb5, + 0x18, 0xa2, 0xff, 0x44, 0x72, 0xd5, 0x66, 0x00, 0x8e, 0x25, 0x2f, 0x83, 0xe6, 0xf5, 0x2a, 0x95, + 0x7a, 0xb3, 0x65, 0xb7, 0xdd, 0x08, 0x89, 0x5f, 0xe5, 0x9e, 0xf2, 0x70, 0xcb, 0x04, 0x96, 0x2d, + 0xc1, 0x28, 0xf9, 0x1a, 0x37, 0x24, 0xbf, 0xc6, 0x04, 0x8d, 0xf8, 0x28, 0x56, 0x38, 0xaa, 0x76, + 0xb3, 0x65, 0xb6, 0xe3, 0xd4, 0xbf, 0x3f, 0xe5, 0x85, 0x83, 0x41, 0x58, 0xe1, 0x70, 0x77, 0x5b, + 0x08, 0xaf, 0xf6, 0x31, 0x24, 0x7c, 0x9d, 0x17, 0x0e, 0x8e, 0x61, 0x22, 0x78, 0xc3, 0x10, 0x43, + 0xc4, 0x9f, 0x71, 0x11, 0x1c, 0x83, 0x45, 0xbc, 0xcb, 0x5f, 0x68, 0xdb, 0x68, 0xbb, 0xee, 0xb8, + 0x6d, 0xda, 0x0a, 0xef, 0x2d, 0xea, 0x1b, 0xaf, 0x8a, 0x4d, 0x98, 0x11, 0x80, 0xe2, 0x4a, 0xc4, + 0xb6, 0x50, 0xc9, 0x9b, 0x52, 0xb4, 0x62, 0xdf, 0xe4, 0x95, 0x28, 0x00, 0xc3, 0xba, 0x05, 0x3a, + 0x44, 0x6c, 0xf6, 0x2a, 0x7e, 0x3f, 0x88, 0x21, 0xee, 0x5b, 0x92, 0x72, 0xeb, 0x1c, 0x8b, 0x65, + 0x06, 0xfa, 0x9f, 0x8e, 0xf5, 0x38, 0xda, 0x8d, 0x15, 0x9d, 0x7f, 0x2e, 0xf5, 0x3f, 0x9b, 0x14, + 0x49, 0x6b, 0xc8, 0x98, 0xd4, 0x4f, 0xe9, 0x51, 0x97, 0x75, 0xd2, 0xff, 0xf7, 0x35, 0x36, 0x5f, + 0xb1, 0x9d, 0xca, 0x5e, 0xc5, 0x41, 0x2e, 0x36, 0x3d, 0xd1, 0xc2, 0x3e, 0xf0, 0x9a, 0x17, 0xe7, + 0x42, 0xcf, 0x93, 0xbd, 0x04, 0x23, 0x42, 0xc3, 0x13, 0x2d, 0xea, 0xff, 0x31, 0x51, 0xc3, 0xc1, + 0x7e, 0x27, 0x7b, 0x06, 0x92, 0xb8, 0x79, 0x89, 0x86, 0xff, 0x7f, 0x06, 0x27, 0xec, 0xd9, 0x07, + 0x20, 0xc5, 0x9b, 0x96, 0x68, 0xe8, 0x07, 0x19, 0xd4, 0x83, 0x60, 0x38, 0x6f, 0x58, 0xa2, 0xe1, + 0xbf, 0xc4, 0xe1, 0x1c, 0x82, 0xe1, 0xf1, 0x4d, 0xf8, 0xc2, 0xaf, 0x24, 0xd9, 0xa2, 0xc3, 0x6d, + 0x77, 0x11, 0x0e, 0xb0, 0x4e, 0x25, 0x1a, 0xfd, 0x61, 0xf6, 0x70, 0x8e, 0xc8, 0x9e, 0x83, 0xfe, + 0x98, 0x06, 0xff, 0x55, 0x06, 0xa5, 0xfc, 0xd9, 0x02, 0x0c, 0x05, 0xba, 0x93, 0x68, 0xf8, 0xaf, + 0x31, 0x78, 0x10, 0x85, 0x55, 0x67, 0xdd, 0x49, 0xb4, 0x80, 0x5f, 0xe7, 0xaa, 0x33, 0x04, 0x36, + 0x1b, 0x6f, 0x4c, 0xa2, 0xd1, 0xbf, 0xc1, 0xad, 0xce, 0x21, 0xd9, 0x87, 0x60, 0xd0, 0x5b, 0x6c, + 0xa2, 0xf1, 0xbf, 0xc9, 0xf0, 0x3e, 0x06, 0x5b, 0x20, 0xb0, 0xd8, 0x45, 0x8b, 0xf8, 0x2d, 0x6e, + 0x81, 0x00, 0x0a, 0xa7, 0x91, 0xdc, 0xc0, 0x44, 0x4b, 0xfa, 0x08, 0x4f, 0x23, 0xa9, 0x7f, 0xc1, + 0xde, 0x24, 0x35, 0x3f, 0x5a, 0xc4, 0x6f, 0x73, 0x6f, 0x12, 0x7e, 0xac, 0x86, 0xdc, 0x11, 0x44, + 0xcb, 0xf8, 0x5d, 0xae, 0x86, 0xd4, 0x10, 0x64, 0xd7, 0x40, 0xef, 0xee, 0x06, 0xa2, 0xe5, 0x7d, + 0x94, 0xc9, 0x1b, 0xef, 0x6a, 0x06, 0xb2, 0x8f, 0xc0, 0x64, 0x78, 0x27, 0x10, 0x2d, 0xf5, 0x63, + 0xaf, 0x49, 0xef, 0x6e, 0xc1, 0x46, 0x20, 0xbb, 0xe1, 0x2f, 0x29, 0xc1, 0x2e, 0x20, 0x5a, 0xec, + 0xc7, 0x5f, 0x13, 0x0b, 0x77, 0xb0, 0x09, 0xc8, 0xe6, 0x00, 0xfc, 0x05, 0x38, 0x5a, 0xd6, 0x27, + 0x98, 0xac, 0x00, 0x08, 0xa7, 0x06, 0x5b, 0x7f, 0xa3, 0xf1, 0x9f, 0xe4, 0xa9, 0xc1, 0x10, 0x38, + 0x35, 0xf8, 0xd2, 0x1b, 0x8d, 0x7e, 0x96, 0xa7, 0x06, 0x87, 0xe0, 0xc8, 0x0e, 0xac, 0x6e, 0xd1, + 0x12, 0x3e, 0xcd, 0x23, 0x3b, 0x80, 0xca, 0x96, 0x61, 0xbc, 0x6b, 0x41, 0x8c, 0x16, 0xf5, 0x19, + 0x26, 0x4a, 0x93, 0xd7, 0xc3, 0xe0, 0xe2, 0xc5, 0x16, 0xc3, 0x68, 0x69, 0x9f, 0x95, 0x16, 0x2f, + 0xb6, 0x16, 0x66, 0x2f, 0x42, 0xca, 0xea, 0x34, 0x1a, 0x38, 0x79, 0xf4, 0xbd, 0x2f, 0xd8, 0xa5, + 0xff, 0xf9, 0x75, 0x66, 0x1d, 0x0e, 0xc8, 0x9e, 0x81, 0x7e, 0xd4, 0xbc, 0x8e, 0x6a, 0x51, 0xc8, + 0x7f, 0x79, 0x9d, 0x17, 0x4c, 0xcc, 0x9d, 0x7d, 0x08, 0x80, 0x6e, 0x8d, 0x90, 0x63, 0xbf, 0x08, + 0xec, 0xbf, 0xbe, 0xce, 0xae, 0xbe, 0xf8, 0x10, 0x5f, 0x00, 0xbd, 0x48, 0xb3, 0xb7, 0x80, 0x57, + 0x45, 0x01, 0xc4, 0x23, 0x17, 0xe0, 0xc0, 0x63, 0x8e, 0x6d, 0xb9, 0xe6, 0x76, 0x14, 0xfa, 0xdf, + 0x18, 0x9a, 0xf3, 0x63, 0x83, 0x35, 0xed, 0x36, 0x72, 0xcd, 0x6d, 0x27, 0x0a, 0xfb, 0xef, 0x0c, + 0xeb, 0x01, 0x30, 0xb8, 0x6a, 0x3a, 0x6e, 0x9c, 0x79, 0xff, 0x88, 0x83, 0x39, 0x00, 0x2b, 0x8d, + 0x3f, 0x3f, 0x8e, 0x76, 0xa3, 0xb0, 0x3f, 0xe6, 0x4a, 0x33, 0xfe, 0xec, 0x03, 0x30, 0x88, 0x3f, + 0xd2, 0xfb, 0x6c, 0x11, 0xe0, 0xff, 0x60, 0x60, 0x1f, 0x81, 0x9f, 0xec, 0xb8, 0x35, 0xb7, 0x1e, + 0x6d, 0xec, 0x9f, 0x30, 0x4f, 0x73, 0xfe, 0x6c, 0x0e, 0x86, 0x1c, 0xb7, 0x56, 0xeb, 0xb0, 0xfe, + 0x34, 0x02, 0xfe, 0x9f, 0xaf, 0x7b, 0x5b, 0x16, 0x1e, 0x06, 0x7b, 0xfb, 0xc9, 0xc7, 0xdd, 0x96, + 0x4d, 0x8e, 0x39, 0xa2, 0x24, 0xbc, 0xc6, 0x24, 0x04, 0x20, 0xf9, 0x52, 0xf8, 0xf6, 0x2d, 0x5c, + 0xb6, 0x2f, 0xdb, 0x74, 0xe3, 0xf6, 0x3d, 0x99, 0xe8, 0x1d, 0x58, 0xf8, 0xdb, 0x06, 0x4c, 0x57, + 0xed, 0xe6, 0x75, 0xdb, 0x39, 0xe9, 0x95, 0xe3, 0x93, 0xee, 0x0e, 0xc2, 0xab, 0x30, 0xdb, 0x99, + 0x4d, 0xe2, 0xcf, 0x53, 0xfb, 0xdb, 0xce, 0x25, 0x87, 0xf5, 0xe5, 0x3a, 0x9e, 0x41, 0x99, 0x9c, + 0x97, 0xe8, 0x47, 0x60, 0x80, 0xcc, 0xe9, 0x14, 0x39, 0x93, 0x54, 0xf2, 0xc9, 0x1b, 0x2f, 0xcd, + 0xf4, 0x19, 0x6c, 0xcc, 0xa3, 0x2e, 0x92, 0x0d, 0xed, 0x84, 0x40, 0x5d, 0xf4, 0xa8, 0xa7, 0xe9, + 0x9e, 0xb6, 0x40, 0x3d, 0xed, 0x51, 0x97, 0xc8, 0xee, 0xb6, 0x2a, 0x50, 0x97, 0x3c, 0xea, 0x19, + 0x72, 0x82, 0x33, 0x22, 0x50, 0xcf, 0x78, 0xd4, 0xb3, 0xe4, 0xdc, 0x26, 0x29, 0x50, 0xcf, 0x7a, + 0xd4, 0x73, 0xe4, 0xc8, 0x66, 0x5c, 0xa0, 0x9e, 0xf3, 0xa8, 0xe7, 0xc9, 0x51, 0x8d, 0x2e, 0x50, + 0xcf, 0x7b, 0xd4, 0x0b, 0xe4, 0x1e, 0xd4, 0x01, 0x81, 0x7a, 0x41, 0x9f, 0x86, 0x03, 0x74, 0xe6, + 0x0b, 0xe4, 0x5c, 0x7f, 0x8c, 0x91, 0xf9, 0xa0, 0x4f, 0x3f, 0x45, 0xee, 0x3c, 0x0d, 0x88, 0xf4, + 0x53, 0x3e, 0x7d, 0x91, 0xfc, 0xf9, 0x85, 0x26, 0xd2, 0x17, 0x7d, 0xfa, 0xe9, 0xf4, 0x08, 0xb9, + 0xf7, 0x25, 0xd0, 0x4f, 0xfb, 0xf4, 0xa5, 0xf4, 0x28, 0x4e, 0x0c, 0x91, 0xbe, 0xe4, 0xd3, 0xcf, + 0xa4, 0xc7, 0x8e, 0x2a, 0xb3, 0xc3, 0x22, 0xfd, 0x4c, 0xe6, 0xfd, 0xc4, 0xbd, 0x96, 0xef, 0xde, + 0x49, 0xd1, 0xbd, 0x9e, 0x63, 0x27, 0x45, 0xc7, 0x7a, 0x2e, 0x9d, 0x14, 0x5d, 0xea, 0x39, 0x73, + 0x52, 0x74, 0xa6, 0xe7, 0xc6, 0x49, 0xd1, 0x8d, 0x9e, 0x03, 0x27, 0x45, 0x07, 0x7a, 0xae, 0x9b, + 0x14, 0x5d, 0xe7, 0x39, 0x6d, 0x52, 0x74, 0x9a, 0xe7, 0xae, 0x49, 0xd1, 0x5d, 0x9e, 0xa3, 0xd2, + 0x92, 0xa3, 0x7c, 0x17, 0xa5, 0x25, 0x17, 0xf9, 0xce, 0x49, 0x4b, 0xce, 0xf1, 0xdd, 0x92, 0x96, + 0xdc, 0xe2, 0x3b, 0x24, 0x2d, 0x39, 0xc4, 0x77, 0x45, 0x5a, 0x72, 0x85, 0xef, 0x04, 0x96, 0x63, + 0x06, 0x6a, 0x85, 0xe4, 0x98, 0xba, 0x67, 0x8e, 0xa9, 0x7b, 0xe6, 0x98, 0xba, 0x67, 0x8e, 0xa9, + 0x7b, 0xe6, 0x98, 0xba, 0x67, 0x8e, 0xa9, 0x7b, 0xe6, 0x98, 0xba, 0x67, 0x8e, 0xa9, 0x7b, 0xe6, + 0x98, 0xba, 0x77, 0x8e, 0xa9, 0x11, 0x39, 0xa6, 0x46, 0xe4, 0x98, 0x1a, 0x91, 0x63, 0x6a, 0x44, + 0x8e, 0xa9, 0x11, 0x39, 0xa6, 0xf6, 0xcc, 0x31, 0xdf, 0xbd, 0x93, 0xa2, 0x7b, 0x43, 0x73, 0x4c, + 0xed, 0x91, 0x63, 0x6a, 0x8f, 0x1c, 0x53, 0x7b, 0xe4, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x1e, 0x39, + 0xa6, 0xf6, 0xc8, 0x31, 0xb5, 0x47, 0x8e, 0xa9, 0xbd, 0x72, 0x4c, 0xed, 0x99, 0x63, 0x6a, 0xcf, + 0x1c, 0x53, 0x7b, 0xe6, 0x98, 0xda, 0x33, 0xc7, 0xd4, 0x9e, 0x39, 0xa6, 0x06, 0x73, 0xec, 0x2f, + 0x54, 0xd0, 0x69, 0x8e, 0xad, 0x91, 0x9b, 0x61, 0xcc, 0x15, 0xd3, 0x52, 0xa6, 0x0d, 0x60, 0xd7, + 0x69, 0xbe, 0x4b, 0xa6, 0xa5, 0x5c, 0x13, 0xe9, 0x8b, 0x1e, 0x9d, 0x67, 0x9b, 0x48, 0x3f, 0xed, + 0xd1, 0x79, 0xbe, 0x89, 0xf4, 0x25, 0x8f, 0xce, 0x33, 0x4e, 0xa4, 0x9f, 0xf1, 0xe8, 0x3c, 0xe7, + 0x44, 0xfa, 0x59, 0x8f, 0xce, 0xb3, 0x4e, 0xa4, 0x9f, 0xf3, 0xe8, 0x3c, 0xef, 0x44, 0xfa, 0x79, + 0x8f, 0xce, 0x33, 0x4f, 0xa4, 0x5f, 0xd0, 0x8f, 0xca, 0xb9, 0xc7, 0x19, 0x3c, 0xd7, 0x1e, 0x95, + 0xb3, 0x4f, 0xe2, 0x38, 0xe5, 0x73, 0xf0, 0xfc, 0x93, 0x38, 0x16, 0x7d, 0x0e, 0x9e, 0x81, 0x12, + 0xc7, 0xe9, 0xcc, 0x87, 0x88, 0xfb, 0x2c, 0xd9, 0x7d, 0x53, 0x92, 0xfb, 0x12, 0x01, 0xd7, 0x4d, + 0x49, 0xae, 0x4b, 0x04, 0xdc, 0x36, 0x25, 0xb9, 0x2d, 0x11, 0x70, 0xd9, 0x94, 0xe4, 0xb2, 0x44, + 0xc0, 0x5d, 0x53, 0x92, 0xbb, 0x12, 0x01, 0x57, 0x4d, 0x49, 0xae, 0x4a, 0x04, 0xdc, 0x34, 0x25, + 0xb9, 0x29, 0x11, 0x70, 0xd1, 0x94, 0xe4, 0xa2, 0x44, 0xc0, 0x3d, 0x53, 0x92, 0x7b, 0x12, 0x01, + 0xd7, 0x1c, 0x91, 0x5d, 0x93, 0x08, 0xba, 0xe5, 0x88, 0xec, 0x96, 0x44, 0xd0, 0x25, 0x47, 0x64, + 0x97, 0x24, 0x82, 0xee, 0x38, 0x22, 0xbb, 0x23, 0x11, 0x74, 0xc5, 0xcf, 0x12, 0xbc, 0x23, 0x5c, + 0x77, 0xdb, 0x9d, 0xaa, 0x7b, 0x4b, 0x1d, 0xe1, 0x82, 0xd0, 0x3e, 0x0c, 0x2d, 0xea, 0xf3, 0xa4, + 0x61, 0x0d, 0x76, 0x9c, 0xd2, 0x0a, 0xb6, 0x20, 0x34, 0x16, 0x01, 0x84, 0x15, 0x8e, 0x58, 0xba, + 0xa5, 0xde, 0x70, 0x41, 0x68, 0x33, 0xa2, 0xf5, 0x3b, 0xff, 0x96, 0x77, 0x6c, 0x2f, 0x24, 0x78, + 0xc7, 0xc6, 0xcc, 0xbf, 0xdf, 0x8e, 0x6d, 0x2e, 0xda, 0xe4, 0x9e, 0xb1, 0xe7, 0xa2, 0x8d, 0xdd, + 0xb5, 0xea, 0xc4, 0xed, 0xe0, 0xe6, 0xa2, 0x4d, 0xeb, 0x19, 0xf5, 0xcd, 0xed, 0xb7, 0x58, 0x04, + 0x1b, 0xa8, 0x15, 0x12, 0xc1, 0xfb, 0xed, 0xb7, 0x16, 0x84, 0x52, 0xb2, 0xdf, 0x08, 0x56, 0xf7, + 0x1d, 0xc1, 0xfb, 0xed, 0xbc, 0x16, 0x84, 0xf2, 0xb2, 0xef, 0x08, 0x7e, 0x0b, 0xfa, 0x21, 0x16, + 0xc1, 0xbe, 0xf9, 0xf7, 0xdb, 0x0f, 0xcd, 0x45, 0x9b, 0x3c, 0x34, 0x82, 0xd5, 0x7d, 0x44, 0x70, + 0x9c, 0xfe, 0x68, 0x2e, 0xda, 0xb4, 0xe1, 0x11, 0x7c, 0xcb, 0xdd, 0xcc, 0xa7, 0x14, 0x18, 0x2f, + 0xd7, 0x6b, 0xa5, 0xe6, 0x75, 0x54, 0xab, 0xa1, 0x1a, 0xb3, 0xe3, 0x82, 0x50, 0x09, 0x7a, 0xb8, + 0xfa, 0xc5, 0x97, 0x66, 0x7c, 0x0b, 0x9f, 0x81, 0x14, 0xb5, 0xe9, 0xc2, 0x42, 0xfa, 0x86, 0x12, + 0x51, 0xe1, 0x3c, 0x56, 0xfd, 0x18, 0x87, 0x9d, 0x5a, 0x48, 0xff, 0xbd, 0x12, 0xa8, 0x72, 0xde, + 0x70, 0xe6, 0x23, 0x44, 0x43, 0xeb, 0x96, 0x35, 0x3c, 0x19, 0x4b, 0xc3, 0x80, 0x6e, 0xb7, 0x77, + 0xe9, 0x16, 0xd0, 0xaa, 0x03, 0x63, 0xe5, 0x7a, 0xad, 0x4c, 0xfe, 0xf0, 0x3f, 0x8e, 0x4a, 0x94, + 0x47, 0xaa, 0x07, 0x0b, 0x42, 0x58, 0x06, 0x11, 0x5e, 0x48, 0x8b, 0x35, 0x22, 0x53, 0xc7, 0x8f, + 0xb5, 0x84, 0xc7, 0xce, 0xf5, 0x7a, 0xac, 0x5f, 0xd9, 0xbd, 0x07, 0xce, 0xf5, 0x7a, 0xa0, 0x9f, + 0x43, 0xde, 0xa3, 0x9e, 0xe2, 0x8b, 0x33, 0xbd, 0x9f, 0xa5, 0x1f, 0x81, 0xc4, 0x32, 0xbd, 0x3e, + 0x3e, 0x9c, 0x1f, 0xc6, 0x4a, 0x7d, 0xef, 0xa5, 0x99, 0xe4, 0x66, 0xa7, 0x5e, 0x33, 0x12, 0xcb, + 0x35, 0xfd, 0x0a, 0xf4, 0xbf, 0x9b, 0xfd, 0xf9, 0x29, 0x66, 0x58, 0x62, 0x0c, 0xf7, 0xf5, 0xdc, + 0x23, 0xc2, 0x0f, 0x3e, 0x49, 0xf7, 0x2a, 0xe7, 0x37, 0xeb, 0x96, 0x7b, 0x6a, 0xf1, 0xbc, 0x41, + 0x45, 0x64, 0xfe, 0x27, 0x00, 0x7d, 0x66, 0xd1, 0x74, 0x76, 0xf4, 0x32, 0x97, 0x4c, 0x1f, 0x7d, + 0xfe, 0x7b, 0x2f, 0xcd, 0x2c, 0xc5, 0x91, 0x7a, 0x7f, 0xcd, 0x74, 0x76, 0xee, 0x77, 0x77, 0x5b, + 0x68, 0x3e, 0xbf, 0xeb, 0x22, 0x87, 0x4b, 0x6f, 0xf1, 0x55, 0x8f, 0xcd, 0x2b, 0x1d, 0x98, 0x57, + 0x4a, 0x98, 0xd3, 0x25, 0x71, 0x4e, 0x0b, 0x6f, 0x74, 0x3e, 0x4f, 0xf1, 0x45, 0x42, 0xb2, 0xa4, + 0x1a, 0x65, 0x49, 0xf5, 0x56, 0x2d, 0xd9, 0xe2, 0xf5, 0x51, 0x9a, 0xab, 0xba, 0xd7, 0x5c, 0xd5, + 0x5b, 0x99, 0xeb, 0x7f, 0xd1, 0x6c, 0xf5, 0xf2, 0x69, 0xd3, 0xa2, 0x57, 0x57, 0x7f, 0xb1, 0xf6, + 0x82, 0xde, 0xd4, 0x2e, 0x20, 0x9b, 0xbc, 0xf1, 0xdc, 0x8c, 0x92, 0xf9, 0x54, 0x82, 0xcf, 0x9c, + 0x26, 0xd2, 0x1b, 0x9b, 0xf9, 0x2f, 0x4a, 0x4f, 0xf5, 0x56, 0x58, 0xe8, 0x59, 0x05, 0x26, 0xbb, + 0x2a, 0x39, 0x35, 0xd3, 0x9b, 0x5b, 0xce, 0xad, 0xfd, 0x96, 0x73, 0xa6, 0xe0, 0xd7, 0x14, 0x38, + 0x28, 0x95, 0x57, 0xaa, 0xde, 0x49, 0x49, 0xbd, 0xc3, 0xdd, 0x4f, 0x22, 0x8c, 0x01, 0xed, 0x82, + 0xee, 0x95, 0x00, 0x01, 0xc9, 0x9e, 0xdf, 0x97, 0x24, 0xbf, 0x1f, 0xf1, 0x00, 0x21, 0xe6, 0xe2, + 0x11, 0xc0, 0xd4, 0xb6, 0x21, 0xb9, 0xd1, 0x46, 0x48, 0x9f, 0x86, 0xc4, 0x6a, 0x9b, 0x69, 0x38, + 0x4a, 0xf1, 0xab, 0xed, 0x7c, 0xdb, 0xb4, 0xaa, 0x3b, 0x46, 0x62, 0xb5, 0xad, 0x1f, 0x03, 0x35, + 0xc7, 0xfe, 0xf4, 0x7d, 0x68, 0x71, 0x8c, 0x32, 0xe4, 0xac, 0x1a, 0xe3, 0xc0, 0x34, 0x7d, 0x1a, + 0x92, 0x57, 0x91, 0xb9, 0xc5, 0x94, 0x00, 0xca, 0x83, 0x47, 0x0c, 0x32, 0xce, 0x1e, 0xf8, 0x28, + 0xa4, 0xb8, 0x60, 0xfd, 0x38, 0x46, 0x6c, 0xb9, 0xec, 0xb1, 0x0c, 0x81, 0xd5, 0x61, 0x2b, 0x17, + 0xa1, 0xea, 0x27, 0xa0, 0xdf, 0xa8, 0x6f, 0xef, 0xb8, 0xec, 0xe1, 0xdd, 0x6c, 0x94, 0x9c, 0xb9, + 0x06, 0x83, 0x9e, 0x46, 0x6f, 0xb2, 0xe8, 0x22, 0x9d, 0x9a, 0x3e, 0x15, 0x5c, 0x4f, 0xf8, 0xbe, + 0x25, 0x1d, 0xd2, 0x8f, 0x42, 0x6a, 0xdd, 0x6d, 0xfb, 0x45, 0x9f, 0x77, 0xa4, 0xde, 0x68, 0xe6, + 0xfd, 0x0a, 0xa4, 0x8a, 0x08, 0xb5, 0x88, 0xc1, 0xef, 0x82, 0x64, 0xd1, 0x7e, 0xd2, 0x62, 0x0a, + 0x8e, 0x33, 0x8b, 0x62, 0x32, 0xb3, 0x29, 0x21, 0xeb, 0x77, 0x05, 0xed, 0x3e, 0xe1, 0xd9, 0x3d, + 0xc0, 0x47, 0x6c, 0x9f, 0x11, 0x6c, 0xcf, 0x1c, 0x88, 0x99, 0xba, 0xec, 0x7f, 0x0e, 0x86, 0x02, + 0x4f, 0xd1, 0x67, 0x99, 0x1a, 0x09, 0x19, 0x18, 0xb4, 0x15, 0xe6, 0xc8, 0x20, 0x18, 0x11, 0x1e, + 0x8c, 0xa1, 0x01, 0x13, 0xf7, 0x80, 0x12, 0x33, 0xcf, 0x89, 0x66, 0x0e, 0x67, 0x65, 0xa6, 0x5e, + 0xa0, 0x36, 0x22, 0xe6, 0x3e, 0x4e, 0x83, 0xb3, 0xb7, 0x13, 0xf1, 0xe7, 0x4c, 0x3f, 0xa8, 0xe5, + 0x7a, 0x23, 0xf3, 0x00, 0x00, 0x4d, 0xf9, 0x92, 0xd5, 0x69, 0x4a, 0x59, 0x37, 0xca, 0x0d, 0xbc, + 0xb1, 0x83, 0x36, 0x90, 0x43, 0x58, 0xc4, 0x7e, 0x0a, 0x17, 0x18, 0xa0, 0x29, 0x46, 0xf0, 0xf7, + 0x44, 0xe2, 0x43, 0x3b, 0x31, 0xcc, 0x9a, 0xa6, 0xac, 0xd7, 0x90, 0x9b, 0xb3, 0x6c, 0x77, 0x07, + 0xb5, 0x25, 0xc4, 0xa2, 0x7e, 0x5a, 0x48, 0xd8, 0xd1, 0xc5, 0xdb, 0x3d, 0x44, 0x4f, 0xd0, 0xe9, + 0xcc, 0x97, 0x89, 0x82, 0xb8, 0x15, 0xe8, 0x9a, 0xa0, 0x1a, 0x63, 0x82, 0xfa, 0x59, 0xa1, 0x7f, + 0xdb, 0x43, 0x4d, 0xe9, 0xd5, 0xf2, 0x82, 0xf0, 0x9e, 0xb3, 0xb7, 0xb2, 0xe2, 0x3b, 0x26, 0xb7, + 0x29, 0x57, 0xf9, 0x9e, 0x48, 0x95, 0x7b, 0x74, 0xb7, 0xfb, 0xb5, 0xa9, 0x1a, 0xd7, 0xa6, 0xdf, + 0xf2, 0x3a, 0x0e, 0xfa, 0xfb, 0x22, 0xe4, 0x97, 0x79, 0xf4, 0xfb, 0x22, 0x7d, 0x9f, 0x55, 0x0a, + 0x9e, 0xaa, 0x4b, 0x71, 0xdd, 0x9f, 0x4d, 0xe4, 0xf3, 0x9e, 0xba, 0xe7, 0xf6, 0x11, 0x02, 0xd9, + 0x44, 0xa1, 0xe0, 0x95, 0xed, 0xd4, 0x87, 0x9e, 0x9b, 0x51, 0x9e, 0x7f, 0x6e, 0xa6, 0x2f, 0xf3, + 0x45, 0x05, 0xc6, 0x19, 0x67, 0x20, 0x70, 0xef, 0x97, 0x94, 0x3f, 0xc4, 0x6b, 0x46, 0x98, 0x05, + 0xde, 0xb6, 0xe0, 0xfd, 0x8e, 0x02, 0xe9, 0x2e, 0x5d, 0xb9, 0xbd, 0x17, 0x62, 0xa9, 0x9c, 0x55, + 0x4a, 0x3f, 0x7f, 0x9b, 0x5f, 0x83, 0xfe, 0x8d, 0x7a, 0x13, 0xb5, 0xf1, 0x4a, 0x80, 0x3f, 0x50, + 0x95, 0xf9, 0x61, 0x0e, 0x1d, 0xe2, 0x34, 0xaa, 0x9c, 0x40, 0x5b, 0xd4, 0xd3, 0x90, 0x2c, 0x9a, + 0xae, 0x49, 0x34, 0x18, 0xf6, 0xea, 0xab, 0xe9, 0x9a, 0x99, 0xd3, 0x30, 0xbc, 0xb2, 0x4b, 0xee, + 0x1b, 0xd5, 0xc8, 0x55, 0x13, 0xb1, 0xfb, 0xe3, 0xfd, 0xea, 0xa9, 0xb9, 0xfe, 0x54, 0x4d, 0xbb, + 0xa1, 0x64, 0x93, 0x44, 0x9f, 0x27, 0x60, 0x74, 0x15, 0xab, 0x4d, 0x70, 0x02, 0x8c, 0x3e, 0x5d, + 0xf5, 0x26, 0x2f, 0x35, 0x65, 0xaa, 0xdf, 0x94, 0x1d, 0x05, 0x65, 0x45, 0x6c, 0x9d, 0x82, 0x7a, + 0x18, 0xca, 0xca, 0x5c, 0x32, 0x35, 0xaa, 0x8d, 0xcf, 0x25, 0x53, 0xa0, 0x8d, 0xb0, 0xe7, 0xfe, + 0x8d, 0x0a, 0x1a, 0x6d, 0x75, 0x8a, 0x68, 0xab, 0x6e, 0xd5, 0xdd, 0xee, 0x7e, 0xd5, 0xd3, 0x58, + 0x7f, 0x08, 0x06, 0xb1, 0x49, 0x2f, 0xb1, 0x1f, 0xe8, 0xc3, 0xa6, 0x3f, 0xc6, 0x5a, 0x14, 0x49, + 0x04, 0x1b, 0x20, 0xa1, 0xe3, 0x63, 0xf4, 0x4b, 0xa0, 0x96, 0xcb, 0x2b, 0x6c, 0x71, 0x5b, 0xda, + 0x13, 0xca, 0xee, 0xf4, 0xb0, 0x6f, 0x6c, 0xcc, 0xd9, 0x36, 0xb0, 0x00, 0x7d, 0x09, 0x12, 0xe5, + 0x15, 0xd6, 0xf0, 0x1e, 0x8f, 0x23, 0xc6, 0x48, 0x94, 0x57, 0xa6, 0xfe, 0x52, 0x81, 0x11, 0x61, + 0x54, 0xcf, 0xc0, 0x30, 0x1d, 0x08, 0x4c, 0x77, 0xc0, 0x10, 0xc6, 0xb8, 0xce, 0x89, 0x5b, 0xd4, + 0x79, 0x2a, 0x07, 0x63, 0xd2, 0xb8, 0x3e, 0x0f, 0x7a, 0x70, 0x88, 0x29, 0x41, 0x7f, 0x1c, 0x2c, + 0x84, 0x92, 0xb9, 0x03, 0xc0, 0xb7, 0xab, 0xf7, 0x9b, 0x56, 0xe5, 0xd2, 0xfa, 0x46, 0xa9, 0xa8, + 0x29, 0x99, 0xaf, 0x2b, 0x30, 0xc4, 0xda, 0xd6, 0xaa, 0xdd, 0x42, 0x7a, 0x1e, 0x94, 0x1c, 0x8b, + 0x87, 0x37, 0xa6, 0xb7, 0x92, 0xd3, 0x4f, 0x82, 0x92, 0x8f, 0xef, 0x6a, 0x25, 0xaf, 0x2f, 0x82, + 0x52, 0x60, 0x0e, 0x8e, 0xe7, 0x19, 0xa5, 0x90, 0xf9, 0x89, 0x0a, 0x13, 0xc1, 0x36, 0x9a, 0xd7, + 0x93, 0x63, 0xe2, 0x7b, 0x53, 0x76, 0xf0, 0xd4, 0xe2, 0xe9, 0xa5, 0x79, 0xfc, 0x8f, 0x17, 0x92, + 0x19, 0xf1, 0x15, 0x2a, 0x0b, 0x1e, 0xcb, 0xa9, 0x5e, 0xf7, 0x44, 0xb2, 0xc9, 0x80, 0x84, 0xae, + 0x7b, 0x22, 0x02, 0xb5, 0xeb, 0x9e, 0x88, 0x40, 0xed, 0xba, 0x27, 0x22, 0x50, 0xbb, 0xce, 0x02, + 0x04, 0x6a, 0xd7, 0x3d, 0x11, 0x81, 0xda, 0x75, 0x4f, 0x44, 0xa0, 0x76, 0xdf, 0x13, 0x61, 0xe4, + 0x9e, 0xf7, 0x44, 0x44, 0x7a, 0xf7, 0x3d, 0x11, 0x91, 0xde, 0x7d, 0x4f, 0x24, 0x9b, 0x74, 0xdb, + 0x1d, 0xd4, 0xfb, 0xd4, 0x41, 0xc4, 0xef, 0xf5, 0x12, 0xe8, 0x57, 0xe0, 0x55, 0x18, 0xa3, 0x1b, + 0x12, 0x05, 0xdb, 0x72, 0xcd, 0xba, 0x85, 0xda, 0xfa, 0x3b, 0x60, 0x98, 0x0e, 0xd1, 0xd7, 0x9c, + 0xb0, 0xd7, 0x40, 0x4a, 0x67, 0xf5, 0x56, 0xe0, 0xce, 0xfc, 0x2c, 0x09, 0x93, 0x74, 0xa0, 0x6c, + 0x36, 0x91, 0x70, 0xcb, 0xe8, 0x84, 0x74, 0xa6, 0x34, 0x8a, 0xe1, 0x37, 0x5f, 0x9a, 0xa1, 0xa3, + 0x39, 0x2f, 0x9a, 0x4e, 0x48, 0xa7, 0x4b, 0x22, 0x9f, 0xbf, 0x00, 0x9d, 0x90, 0x6e, 0x1e, 0x89, + 0x7c, 0xde, 0x7a, 0xe3, 0xf1, 0xf1, 0x3b, 0x48, 0x22, 0x5f, 0xd1, 0x8b, 0xb2, 0x13, 0xd2, 0x6d, + 0x24, 0x91, 0xaf, 0xe4, 0xc5, 0xdb, 0x09, 0xe9, 0xec, 0x49, 0xe4, 0xbb, 0xe4, 0x45, 0xde, 0x09, + 0xe9, 0x14, 0x4a, 0xe4, 0xbb, 0xec, 0xc5, 0xe0, 0x09, 0xe9, 0xae, 0x92, 0xc8, 0xf7, 0xb0, 0x17, + 0x8d, 0x27, 0xa4, 0x5b, 0x4b, 0x22, 0xdf, 0xb2, 0x17, 0x97, 0xb3, 0xf2, 0xfd, 0x25, 0x91, 0xf1, + 0x8a, 0x1f, 0xa1, 0xb3, 0xf2, 0x4d, 0x26, 0x91, 0xf3, 0x9d, 0x7e, 0xac, 0xce, 0xca, 0x77, 0x9a, + 0x44, 0xce, 0xab, 0x7e, 0xd4, 0xce, 0xca, 0x67, 0x65, 0x22, 0xe7, 0x8a, 0x1f, 0xbf, 0xb3, 0xf2, + 0xa9, 0x99, 0xc8, 0x59, 0xf6, 0x23, 0x79, 0x56, 0x3e, 0x3f, 0x13, 0x39, 0x57, 0xfd, 0x4d, 0xf4, + 0x6f, 0x4b, 0xe1, 0x17, 0xb8, 0x05, 0x95, 0x91, 0xc2, 0x0f, 0x42, 0x42, 0x4f, 0x2a, 0x64, 0x01, + 0x1e, 0x3f, 0xec, 0x32, 0x52, 0xd8, 0x41, 0x48, 0xc8, 0x65, 0xa4, 0x90, 0x83, 0x90, 0x70, 0xcb, + 0x48, 0xe1, 0x06, 0x21, 0xa1, 0x96, 0x91, 0x42, 0x0d, 0x42, 0xc2, 0x2c, 0x23, 0x85, 0x19, 0x84, + 0x84, 0x58, 0x46, 0x0a, 0x31, 0x08, 0x09, 0xaf, 0x8c, 0x14, 0x5e, 0x10, 0x12, 0x5a, 0xc7, 0xe5, + 0xd0, 0x82, 0xb0, 0xb0, 0x3a, 0x2e, 0x87, 0x15, 0x84, 0x85, 0xd4, 0x9d, 0x72, 0x48, 0x0d, 0xde, + 0x7c, 0x69, 0xa6, 0x1f, 0x0f, 0x05, 0xa2, 0xe9, 0xb8, 0x1c, 0x4d, 0x10, 0x16, 0x49, 0xc7, 0xe5, + 0x48, 0x82, 0xb0, 0x28, 0x3a, 0x2e, 0x47, 0x11, 0x84, 0x45, 0xd0, 0x0b, 0x72, 0x04, 0xf9, 0x77, + 0x7c, 0x32, 0xd2, 0x91, 0x62, 0x54, 0x04, 0xa9, 0x31, 0x22, 0x48, 0x8d, 0x11, 0x41, 0x6a, 0x8c, + 0x08, 0x52, 0x63, 0x44, 0x90, 0x1a, 0x23, 0x82, 0xd4, 0x18, 0x11, 0xa4, 0xc6, 0x88, 0x20, 0x35, + 0x4e, 0x04, 0xa9, 0xb1, 0x22, 0x48, 0xed, 0x15, 0x41, 0xc7, 0xe5, 0x1b, 0x0f, 0x10, 0x56, 0x90, + 0x8e, 0xcb, 0x47, 0x9f, 0xd1, 0x21, 0xa4, 0xc6, 0x0a, 0x21, 0xb5, 0x57, 0x08, 0x7d, 0x5b, 0x85, + 0x09, 0x21, 0x84, 0xd8, 0xf9, 0xd0, 0x9b, 0x55, 0x81, 0xce, 0xc6, 0xb8, 0x60, 0x11, 0x16, 0x53, + 0x67, 0x63, 0x1c, 0x52, 0xef, 0x15, 0x67, 0xdd, 0x55, 0xa8, 0x14, 0xa3, 0x0a, 0x5d, 0xf2, 0x62, + 0xe8, 0x6c, 0x8c, 0x8b, 0x17, 0xdd, 0xb1, 0x77, 0x7e, 0xaf, 0x22, 0xf0, 0x70, 0xac, 0x22, 0xb0, + 0x1c, 0xab, 0x08, 0x5c, 0xf1, 0x3d, 0xf8, 0xc1, 0x04, 0x1c, 0xf4, 0x3d, 0x48, 0x3f, 0x91, 0x1f, + 0xd0, 0xca, 0x04, 0x8e, 0xa8, 0x74, 0x7e, 0x6c, 0x13, 0x70, 0x63, 0x62, 0xb9, 0xa6, 0xaf, 0x89, + 0x87, 0x55, 0xd9, 0xfd, 0x1e, 0xe0, 0x04, 0x3c, 0xce, 0x36, 0x43, 0x8f, 0x83, 0xba, 0x5c, 0x73, + 0x48, 0xb5, 0x08, 0x7b, 0x6c, 0xc1, 0xc0, 0x64, 0xdd, 0x80, 0x01, 0xc2, 0xee, 0x10, 0xf7, 0xde, + 0xca, 0x83, 0x8b, 0x06, 0x93, 0x94, 0x79, 0x41, 0x81, 0xa3, 0x42, 0x28, 0xbf, 0x39, 0x47, 0x06, + 0x17, 0x63, 0x1d, 0x19, 0x08, 0x09, 0xe2, 0x1f, 0x1f, 0xdc, 0xdd, 0x7d, 0x52, 0x1d, 0xcc, 0x12, + 0xf9, 0x28, 0xe1, 0xff, 0xc0, 0xa8, 0x3f, 0x03, 0xf2, 0xce, 0x76, 0x26, 0x7a, 0x37, 0x33, 0x2c, + 0x35, 0xcf, 0x48, 0xbb, 0x68, 0x7b, 0xc2, 0xbc, 0x6c, 0xcd, 0x64, 0x61, 0xac, 0x2c, 0xfe, 0xe5, + 0x53, 0xd4, 0x66, 0x44, 0x0a, 0xb7, 0xe6, 0x37, 0x3e, 0x3d, 0xd3, 0x97, 0xb9, 0x0f, 0x86, 0x83, + 0x7f, 0xdc, 0x24, 0x01, 0x07, 0x39, 0x30, 0x9b, 0x7c, 0x11, 0x73, 0xff, 0x8e, 0x02, 0x87, 0x82, + 0xec, 0x8f, 0xd4, 0xdd, 0x9d, 0x65, 0x0b, 0xf7, 0xf4, 0x0f, 0x40, 0x0a, 0x31, 0xc7, 0xb1, 0xdf, + 0xc2, 0x61, 0xef, 0x91, 0xa1, 0xec, 0xf3, 0xe4, 0x5f, 0xc3, 0x83, 0x48, 0xbb, 0x20, 0xfc, 0xb1, + 0x8b, 0x53, 0x77, 0x41, 0x3f, 0x95, 0x2f, 0xea, 0x35, 0x22, 0xe9, 0xf5, 0xb9, 0x10, 0xbd, 0x48, + 0x1c, 0xe9, 0x57, 0x04, 0xbd, 0x02, 0xaf, 0xab, 0xa1, 0xec, 0xf3, 0x3c, 0xf8, 0xf2, 0x29, 0xdc, + 0xff, 0x91, 0x88, 0x8a, 0x56, 0x72, 0x16, 0x52, 0x25, 0x99, 0x27, 0x5c, 0xcf, 0x22, 0x24, 0xcb, + 0x76, 0x8d, 0xfc, 0x4a, 0x0f, 0xf9, 0x59, 0x6a, 0x66, 0x64, 0xf6, 0x1b, 0xd5, 0x27, 0x20, 0x55, + 0xd8, 0xa9, 0x37, 0x6a, 0x6d, 0x64, 0xb1, 0x33, 0x7b, 0xb6, 0x85, 0x8e, 0x31, 0x86, 0x47, 0xcb, + 0x14, 0x60, 0xbc, 0x6c, 0x5b, 0xf9, 0x5d, 0x37, 0x58, 0x37, 0xe6, 0xa5, 0x14, 0x61, 0x67, 0x3e, + 0xe4, 0x8f, 0x41, 0x30, 0x43, 0xbe, 0xff, 0x7b, 0x2f, 0xcd, 0x28, 0x1b, 0xde, 0xfe, 0xf9, 0x0a, + 0x1c, 0x66, 0xe9, 0xd3, 0x25, 0x6a, 0x31, 0x4a, 0xd4, 0x20, 0x3b, 0xa7, 0x0e, 0x88, 0x5b, 0xc6, + 0xe2, 0xac, 0x50, 0x71, 0x6f, 0x4c, 0x33, 0xdc, 0x14, 0xed, 0xa9, 0x99, 0xba, 0x2f, 0xcd, 0x42, + 0xc5, 0xcd, 0x47, 0x89, 0x93, 0x34, 0xbb, 0x13, 0x06, 0x3d, 0x5a, 0x20, 0x1a, 0x82, 0x99, 0xb2, + 0x38, 0x97, 0x81, 0xa1, 0x40, 0xc2, 0xea, 0xfd, 0xa0, 0xe4, 0xb4, 0x3e, 0xfc, 0x5f, 0x5e, 0x53, + 0xf0, 0x7f, 0x05, 0x2d, 0x31, 0x77, 0x17, 0x8c, 0x49, 0xfb, 0x97, 0x98, 0x52, 0xd4, 0x00, 0xff, + 0x57, 0xd2, 0x86, 0xa6, 0x92, 0x1f, 0xfa, 0xec, 0x74, 0xdf, 0xdc, 0x45, 0xd0, 0xbb, 0x77, 0x3a, + 0xf5, 0x01, 0x48, 0xe4, 0xb0, 0xc8, 0xc3, 0x90, 0xc8, 0xe7, 0x35, 0x65, 0x6a, 0xec, 0x97, 0x3f, + 0x79, 0x74, 0x28, 0x4f, 0xfe, 0x72, 0xfb, 0x1a, 0x72, 0xf3, 0x79, 0x06, 0x7e, 0x10, 0x0e, 0x85, + 0xee, 0x94, 0x62, 0x7c, 0xa1, 0x40, 0xf1, 0xc5, 0x62, 0x17, 0xbe, 0x58, 0x24, 0x78, 0x25, 0xcb, + 0x4f, 0x9c, 0x73, 0x7a, 0xc8, 0x2e, 0x63, 0xba, 0x16, 0x38, 0xe1, 0xce, 0x65, 0x1f, 0x64, 0xbc, + 0xf9, 0x50, 0x5e, 0x14, 0x71, 0x62, 0x9d, 0xcf, 0x16, 0x18, 0xbe, 0x10, 0x8a, 0xdf, 0x92, 0x8e, + 0x55, 0xc5, 0x15, 0x82, 0x09, 0x29, 0x78, 0x0a, 0x17, 0x43, 0x85, 0xec, 0x04, 0x2e, 0xbb, 0x17, + 0x3d, 0x85, 0x4b, 0xa1, 0xbc, 0xf5, 0x88, 0x4b, 0x5f, 0xa5, 0xec, 0x49, 0xb6, 0xc8, 0xe7, 0x4e, + 0xe9, 0x87, 0x78, 0x8e, 0x0a, 0x15, 0x98, 0x19, 0x88, 0x73, 0x65, 0x0b, 0x0c, 0x90, 0xef, 0x09, + 0xe8, 0x6d, 0x25, 0x8e, 0xcc, 0x3e, 0xcc, 0x84, 0x14, 0x7a, 0x0a, 0x89, 0x30, 0x15, 0x87, 0xe7, + 0x37, 0x6e, 0xbc, 0x3c, 0xdd, 0xf7, 0xe2, 0xcb, 0xd3, 0x7d, 0xff, 0xf0, 0xf2, 0x74, 0xdf, 0xf7, + 0x5f, 0x9e, 0x56, 0x7e, 0xf8, 0xf2, 0xb4, 0xf2, 0xe3, 0x97, 0xa7, 0x95, 0x9f, 0xbe, 0x3c, 0xad, + 0x3c, 0x73, 0x73, 0x5a, 0x79, 0xfe, 0xe6, 0xb4, 0xf2, 0xe5, 0x9b, 0xd3, 0xca, 0x37, 0x6e, 0x4e, + 0x2b, 0x2f, 0xdc, 0x9c, 0x56, 0x6e, 0xdc, 0x9c, 0x56, 0x5e, 0xbc, 0x39, 0xdd, 0xf7, 0xfd, 0x9b, + 0xd3, 0xca, 0x0f, 0x6f, 0x4e, 0xf7, 0xfd, 0xf8, 0xe6, 0xb4, 0xf2, 0xd3, 0x9b, 0xd3, 0x7d, 0xcf, + 0xbc, 0x32, 0xdd, 0xf7, 0xdc, 0x2b, 0xd3, 0x7d, 0xcf, 0xbf, 0x32, 0xad, 0xfc, 0x77, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x09, 0x02, 0x7e, 0xa3, 0xea, 0x68, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -28279,6 +28284,9 @@ return dAtA } func (m *NidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -28307,6 +28315,9 @@ } func (m *NinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -28363,6 +28374,9 @@ } func (m *NidRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28435,6 +28449,9 @@ } func (m *NinRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28507,6 +28524,9 @@ } func (m *NidRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28579,6 +28599,9 @@ } func (m *NinRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28651,6 +28674,9 @@ } func (m *NidOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -28677,6 +28703,9 @@ } func (m *NinOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -28721,6 +28750,9 @@ } func (m *NidRepStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28779,6 +28811,9 @@ } func (m *NinRepStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -28837,6 +28872,9 @@ } func (m *NidEmbeddedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -28853,6 +28891,9 @@ } func (m *NinEmbeddedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -28873,6 +28914,9 @@ } func (m *NidNestedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Field1.Size() @@ -28890,6 +28934,9 @@ } func (m *NinNestedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -28909,6 +28956,9 @@ } func (m *NidOptCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Id.Size() @@ -28922,6 +28972,9 @@ } func (m *CustomDash) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != nil { @@ -28935,6 +28988,9 @@ } func (m *NinOptCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Id != nil { @@ -28952,6 +29008,9 @@ } func (m *NidRepCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Id) > 0 { @@ -28973,6 +29032,9 @@ } func (m *NinRepCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Id) > 0 { @@ -28994,6 +29056,9 @@ } func (m *NinOptNativeUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29032,6 +29097,9 @@ } func (m *NinOptStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29072,6 +29140,9 @@ } func (m *NinEmbeddedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -29092,6 +29163,9 @@ } func (m *NinNestedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29113,6 +29187,9 @@ } func (m *Tree) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Or != nil { @@ -29134,6 +29211,9 @@ } func (m *OrBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -29147,6 +29227,9 @@ } func (m *AndBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -29160,6 +29243,9 @@ } func (m *Leaf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovThetest(uint64(m.Value)) @@ -29172,6 +29258,9 @@ } func (m *DeepTree) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Down != nil { @@ -29193,6 +29282,9 @@ } func (m *ADeepBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Down.Size() @@ -29204,6 +29296,9 @@ } func (m *AndDeepBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -29217,6 +29312,9 @@ } func (m *DeepLeaf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Tree.Size() @@ -29228,6 +29326,9 @@ } func (m *Nil) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -29237,6 +29338,9 @@ } func (m *NidOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovThetest(uint64(m.Field1)) @@ -29247,6 +29351,9 @@ } func (m *NinOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29265,6 +29372,9 @@ } func (m *NidRepEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -29289,6 +29399,9 @@ } func (m *NinRepEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -29313,6 +29426,9 @@ } func (m *NinOptEnumDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29331,6 +29447,9 @@ } func (m *AnotherNinOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29349,6 +29468,9 @@ } func (m *AnotherNinOptEnumDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29367,6 +29489,9 @@ } func (m *Timer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -29382,6 +29507,9 @@ } func (m *MyExtendable) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29395,6 +29523,9 @@ } func (m *OtherExtenable) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.M != nil { @@ -29415,6 +29546,9 @@ } func (m *NestedDefinition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29438,6 +29572,9 @@ } func (m *NestedDefinition_NestedMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NestedField1 != nil { @@ -29454,6 +29591,9 @@ } func (m *NestedDefinition_NestedMessage_NestedNestedMsg) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NestedNestedField1 != nil { @@ -29467,6 +29607,9 @@ } func (m *NestedScope) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.A != nil { @@ -29487,6 +29630,9 @@ } func (m *NinOptNativeDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29543,6 +29689,9 @@ } func (m *CustomContainer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.CustomStruct.Size() @@ -29554,6 +29703,9 @@ } func (m *CustomNameNidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -29582,6 +29734,9 @@ } func (m *CustomNameNinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -29638,6 +29793,9 @@ } func (m *CustomNameNinRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.FieldA) > 0 { @@ -29710,6 +29868,9 @@ } func (m *CustomNameNinStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -29756,6 +29917,9 @@ } func (m *CustomNameCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -29785,6 +29949,9 @@ } func (m *CustomNameNinEmbeddedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -29805,6 +29972,9 @@ } func (m *CustomNameEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -29822,6 +29992,9 @@ } func (m *NoExtensionsMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29837,6 +30010,9 @@ } func (m *Unrecognized) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29847,6 +30023,9 @@ } func (m *UnrecognizedWithInner) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Embedded) > 0 { @@ -29866,6 +30045,9 @@ } func (m *UnrecognizedWithInner_Inner) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29875,6 +30057,9 @@ } func (m *UnrecognizedWithEmbed) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.UnrecognizedWithEmbed_Embedded.Size() @@ -29890,6 +30075,9 @@ } func (m *UnrecognizedWithEmbed_Embedded) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29899,6 +30087,9 @@ } func (m *Node) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Label != nil { @@ -29918,6 +30109,9 @@ } func (m *NonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29931,6 +30125,9 @@ } func (m *NidOptNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Field1.Size() @@ -29942,6 +30139,9 @@ } func (m *NinOptNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -29955,6 +30155,9 @@ } func (m *NidRepNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -29970,6 +30173,9 @@ } func (m *NinRepNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -29985,6 +30191,9 @@ } func (m *ProtoType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field2 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/combos/unmarshaler/thetest.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/combos/unmarshaler/thetest.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/combos/unmarshaler/thetest.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/combos/unmarshaler/thetest.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -8323,423 +8323,428 @@ func ThetestDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 6646 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x6b, 0x70, 0x24, 0x57, - 0x75, 0xbf, 0x7a, 0x7a, 0xa4, 0x1d, 0x1d, 0xbd, 0x5a, 0xad, 0x5d, 0xed, 0x58, 0x5e, 0x4b, 0xda, - 0xf1, 0x7a, 0x2d, 0x0b, 0x5b, 0xab, 0xd5, 0x6a, 0x5f, 0xb3, 0xd8, 0xfe, 0xcf, 0x6b, 0xd7, 0x5a, - 0xa4, 0x91, 0x68, 0x49, 0xd8, 0x0b, 0xff, 0x7f, 0x4d, 0xf5, 0xce, 0x5c, 0x49, 0x63, 0xcf, 0x74, - 0x0f, 0xd3, 0x2d, 0xdb, 0x72, 0xfd, 0x2b, 0xe5, 0x40, 0x42, 0x20, 0xa9, 0x3c, 0x49, 0x2a, 0x40, - 0xc0, 0x98, 0xa4, 0x08, 0x86, 0xbc, 0x20, 0x10, 0x02, 0x54, 0x2a, 0xf8, 0x0b, 0xc9, 0xe6, 0x0b, - 0x65, 0xf2, 0x29, 0x45, 0xa5, 0x5c, 0xec, 0x9a, 0xaa, 0x90, 0xc4, 0x09, 0x84, 0xb8, 0x2a, 0x54, - 0x99, 0x0f, 0xa9, 0xfb, 0xea, 0xee, 0x7b, 0xa7, 0x47, 0xdd, 0xf2, 0xda, 0x86, 0x2f, 0xbb, 0x33, - 0xf7, 0x9c, 0xdf, 0xe9, 0x73, 0xcf, 0xeb, 0x9e, 0xbe, 0xf7, 0x6a, 0xe0, 0x87, 0x17, 0x61, 0x7a, - 0xdb, 0xb6, 0xb7, 0x1b, 0xe8, 0x54, 0xab, 0x6d, 0xbb, 0xf6, 0xf5, 0xdd, 0xad, 0x53, 0x35, 0xe4, - 0x54, 0xdb, 0xf5, 0x96, 0x6b, 0xb7, 0xe7, 0xc8, 0x98, 0x3e, 0x42, 0x39, 0xe6, 0x38, 0x47, 0x66, - 0x05, 0x46, 0x2f, 0xd7, 0x1b, 0xa8, 0xe8, 0x31, 0xae, 0x23, 0x57, 0xbf, 0x00, 0xc9, 0xad, 0x7a, - 0x03, 0xa5, 0x95, 0x69, 0x75, 0x66, 0x60, 0xe1, 0xc4, 0x9c, 0x04, 0x9a, 0x13, 0x11, 0x6b, 0x78, - 0xd8, 0x20, 0x88, 0xcc, 0xf7, 0x93, 0x30, 0x16, 0x42, 0xd5, 0x75, 0x48, 0x5a, 0x66, 0x13, 0x4b, - 0x54, 0x66, 0xfa, 0x0d, 0xf2, 0x59, 0x4f, 0xc3, 0xa1, 0x96, 0x59, 0x7d, 0xc2, 0xdc, 0x46, 0xe9, - 0x04, 0x19, 0xe6, 0x5f, 0xf5, 0x49, 0x80, 0x1a, 0x6a, 0x21, 0xab, 0x86, 0xac, 0xea, 0x5e, 0x5a, - 0x9d, 0x56, 0x67, 0xfa, 0x8d, 0xc0, 0x88, 0xfe, 0x0e, 0x18, 0x6d, 0xed, 0x5e, 0x6f, 0xd4, 0xab, - 0x95, 0x00, 0x1b, 0x4c, 0xab, 0x33, 0xbd, 0x86, 0x46, 0x09, 0x45, 0x9f, 0xf9, 0x5e, 0x18, 0x79, - 0x0a, 0x99, 0x4f, 0x04, 0x59, 0x07, 0x08, 0xeb, 0x30, 0x1e, 0x0e, 0x30, 0x16, 0x60, 0xb0, 0x89, - 0x1c, 0xc7, 0xdc, 0x46, 0x15, 0x77, 0xaf, 0x85, 0xd2, 0x49, 0x32, 0xfb, 0xe9, 0x8e, 0xd9, 0xcb, - 0x33, 0x1f, 0x60, 0xa8, 0x8d, 0xbd, 0x16, 0xd2, 0x73, 0xd0, 0x8f, 0xac, 0xdd, 0x26, 0x95, 0xd0, - 0xdb, 0xc5, 0x7e, 0x25, 0x6b, 0xb7, 0x29, 0x4b, 0x49, 0x61, 0x18, 0x13, 0x71, 0xc8, 0x41, 0xed, - 0x27, 0xeb, 0x55, 0x94, 0xee, 0x23, 0x02, 0xee, 0xed, 0x10, 0xb0, 0x4e, 0xe9, 0xb2, 0x0c, 0x8e, - 0xd3, 0x0b, 0xd0, 0x8f, 0x9e, 0x76, 0x91, 0xe5, 0xd4, 0x6d, 0x2b, 0x7d, 0x88, 0x08, 0xb9, 0x27, - 0xc4, 0x8b, 0xa8, 0x51, 0x93, 0x45, 0xf8, 0x38, 0xfd, 0x1c, 0x1c, 0xb2, 0x5b, 0x6e, 0xdd, 0xb6, - 0x9c, 0x74, 0x6a, 0x5a, 0x99, 0x19, 0x58, 0x38, 0x16, 0x1a, 0x08, 0xab, 0x94, 0xc7, 0xe0, 0xcc, - 0xfa, 0x12, 0x68, 0x8e, 0xbd, 0xdb, 0xae, 0xa2, 0x4a, 0xd5, 0xae, 0xa1, 0x4a, 0xdd, 0xda, 0xb2, - 0xd3, 0xfd, 0x44, 0xc0, 0x54, 0xe7, 0x44, 0x08, 0x63, 0xc1, 0xae, 0xa1, 0x25, 0x6b, 0xcb, 0x36, - 0x86, 0x1d, 0xe1, 0xbb, 0x3e, 0x0e, 0x7d, 0xce, 0x9e, 0xe5, 0x9a, 0x4f, 0xa7, 0x07, 0x49, 0x84, - 0xb0, 0x6f, 0x99, 0xaf, 0xf7, 0xc1, 0x48, 0x9c, 0x10, 0xbb, 0x04, 0xbd, 0x5b, 0x78, 0x96, 0xe9, - 0xc4, 0x41, 0x6c, 0x40, 0x31, 0xa2, 0x11, 0xfb, 0xde, 0xa0, 0x11, 0x73, 0x30, 0x60, 0x21, 0xc7, - 0x45, 0x35, 0x1a, 0x11, 0x6a, 0xcc, 0x98, 0x02, 0x0a, 0xea, 0x0c, 0xa9, 0xe4, 0x1b, 0x0a, 0xa9, - 0xc7, 0x60, 0xc4, 0x53, 0xa9, 0xd2, 0x36, 0xad, 0x6d, 0x1e, 0x9b, 0xa7, 0xa2, 0x34, 0x99, 0x2b, - 0x71, 0x9c, 0x81, 0x61, 0xc6, 0x30, 0x12, 0xbe, 0xeb, 0x45, 0x00, 0xdb, 0x42, 0xf6, 0x56, 0xa5, - 0x86, 0xaa, 0x8d, 0x74, 0xaa, 0x8b, 0x95, 0x56, 0x31, 0x4b, 0x87, 0x95, 0x6c, 0x3a, 0x5a, 0x6d, - 0xe8, 0x17, 0xfd, 0x50, 0x3b, 0xd4, 0x25, 0x52, 0x56, 0x68, 0x92, 0x75, 0x44, 0xdb, 0x26, 0x0c, - 0xb7, 0x11, 0x8e, 0x7b, 0x54, 0x63, 0x33, 0xeb, 0x27, 0x4a, 0xcc, 0x45, 0xce, 0xcc, 0x60, 0x30, - 0x3a, 0xb1, 0xa1, 0x76, 0xf0, 0xab, 0x7e, 0x37, 0x78, 0x03, 0x15, 0x12, 0x56, 0x40, 0xaa, 0xd0, - 0x20, 0x1f, 0x2c, 0x9b, 0x4d, 0x34, 0xf1, 0x0c, 0x0c, 0x8b, 0xe6, 0xd1, 0x0f, 0x43, 0xaf, 0xe3, - 0x9a, 0x6d, 0x97, 0x44, 0x61, 0xaf, 0x41, 0xbf, 0xe8, 0x1a, 0xa8, 0xc8, 0xaa, 0x91, 0x2a, 0xd7, - 0x6b, 0xe0, 0x8f, 0xfa, 0xff, 0xf1, 0x27, 0xac, 0x92, 0x09, 0x9f, 0xec, 0xf4, 0xa8, 0x20, 0x59, - 0x9e, 0xf7, 0xc4, 0x79, 0x18, 0x12, 0x26, 0x10, 0xf7, 0xd1, 0x99, 0xff, 0x0f, 0x47, 0x42, 0x45, - 0xeb, 0x8f, 0xc1, 0xe1, 0x5d, 0xab, 0x6e, 0xb9, 0xa8, 0xdd, 0x6a, 0x23, 0x1c, 0xb1, 0xf4, 0x51, - 0xe9, 0x7f, 0x39, 0xd4, 0x25, 0xe6, 0x36, 0x83, 0xdc, 0x54, 0x8a, 0x31, 0xb6, 0xdb, 0x39, 0x38, - 0xdb, 0x9f, 0xfa, 0xc1, 0x21, 0xed, 0xd9, 0x67, 0x9f, 0x7d, 0x36, 0x91, 0xf9, 0x58, 0x1f, 0x1c, - 0x0e, 0xcb, 0x99, 0xd0, 0xf4, 0x1d, 0x87, 0x3e, 0x6b, 0xb7, 0x79, 0x1d, 0xb5, 0x89, 0x91, 0x7a, - 0x0d, 0xf6, 0x4d, 0xcf, 0x41, 0x6f, 0xc3, 0xbc, 0x8e, 0x1a, 0xe9, 0xe4, 0xb4, 0x32, 0x33, 0xbc, - 0xf0, 0x8e, 0x58, 0x59, 0x39, 0xb7, 0x8c, 0x21, 0x06, 0x45, 0xea, 0x0f, 0x41, 0x92, 0x95, 0x68, - 0x2c, 0x61, 0x36, 0x9e, 0x04, 0x9c, 0x4b, 0x06, 0xc1, 0xe9, 0x77, 0x42, 0x3f, 0xfe, 0x9f, 0xc6, - 0x46, 0x1f, 0xd1, 0x39, 0x85, 0x07, 0x70, 0x5c, 0xe8, 0x13, 0x90, 0x22, 0x69, 0x52, 0x43, 0x7c, - 0x69, 0xf3, 0xbe, 0xe3, 0xc0, 0xaa, 0xa1, 0x2d, 0x73, 0xb7, 0xe1, 0x56, 0x9e, 0x34, 0x1b, 0xbb, - 0x88, 0x04, 0x7c, 0xbf, 0x31, 0xc8, 0x06, 0xdf, 0x83, 0xc7, 0xf4, 0x29, 0x18, 0xa0, 0x59, 0x55, - 0xb7, 0x6a, 0xe8, 0x69, 0x52, 0x3d, 0x7b, 0x0d, 0x9a, 0x68, 0x4b, 0x78, 0x04, 0x3f, 0xfe, 0x71, - 0xc7, 0xb6, 0x78, 0x68, 0x92, 0x47, 0xe0, 0x01, 0xf2, 0xf8, 0xf3, 0x72, 0xe1, 0xbe, 0x2b, 0x7c, - 0x7a, 0x72, 0x4c, 0x65, 0xbe, 0x9a, 0x80, 0x24, 0xa9, 0x17, 0x23, 0x30, 0xb0, 0x71, 0x6d, 0xad, - 0x54, 0x29, 0xae, 0x6e, 0xe6, 0x97, 0x4b, 0x9a, 0xa2, 0x0f, 0x03, 0x90, 0x81, 0xcb, 0xcb, 0xab, - 0xb9, 0x0d, 0x2d, 0xe1, 0x7d, 0x5f, 0x2a, 0x6f, 0x9c, 0x5b, 0xd4, 0x54, 0x0f, 0xb0, 0x49, 0x07, - 0x92, 0x41, 0x86, 0x33, 0x0b, 0x5a, 0xaf, 0xae, 0xc1, 0x20, 0x15, 0xb0, 0xf4, 0x58, 0xa9, 0x78, - 0x6e, 0x51, 0xeb, 0x13, 0x47, 0xce, 0x2c, 0x68, 0x87, 0xf4, 0x21, 0xe8, 0x27, 0x23, 0xf9, 0xd5, - 0xd5, 0x65, 0x2d, 0xe5, 0xc9, 0x5c, 0xdf, 0x30, 0x96, 0xca, 0x57, 0xb4, 0x7e, 0x4f, 0xe6, 0x15, - 0x63, 0x75, 0x73, 0x4d, 0x03, 0x4f, 0xc2, 0x4a, 0x69, 0x7d, 0x3d, 0x77, 0xa5, 0xa4, 0x0d, 0x78, - 0x1c, 0xf9, 0x6b, 0x1b, 0xa5, 0x75, 0x6d, 0x50, 0x50, 0xeb, 0xcc, 0x82, 0x36, 0xe4, 0x3d, 0xa2, - 0x54, 0xde, 0x5c, 0xd1, 0x86, 0xf5, 0x51, 0x18, 0xa2, 0x8f, 0xe0, 0x4a, 0x8c, 0x48, 0x43, 0xe7, - 0x16, 0x35, 0xcd, 0x57, 0x84, 0x4a, 0x19, 0x15, 0x06, 0xce, 0x2d, 0x6a, 0x7a, 0xa6, 0x00, 0xbd, - 0x24, 0xba, 0x74, 0x1d, 0x86, 0x97, 0x73, 0xf9, 0xd2, 0x72, 0x65, 0x75, 0x6d, 0x63, 0x69, 0xb5, - 0x9c, 0x5b, 0xd6, 0x14, 0x7f, 0xcc, 0x28, 0xbd, 0x7b, 0x73, 0xc9, 0x28, 0x15, 0xb5, 0x44, 0x70, - 0x6c, 0xad, 0x94, 0xdb, 0x28, 0x15, 0x35, 0x35, 0x53, 0x85, 0xc3, 0x61, 0x75, 0x32, 0x34, 0x33, - 0x02, 0x2e, 0x4e, 0x74, 0x71, 0x31, 0x91, 0xd5, 0xe1, 0xe2, 0x57, 0x12, 0x30, 0x16, 0xb2, 0x56, - 0x84, 0x3e, 0xe4, 0x61, 0xe8, 0xa5, 0x21, 0x4a, 0x57, 0xcf, 0xfb, 0x42, 0x17, 0x1d, 0x12, 0xb0, - 0x1d, 0x2b, 0x28, 0xc1, 0x05, 0x3b, 0x08, 0xb5, 0x4b, 0x07, 0x81, 0x45, 0x74, 0xd4, 0xf4, 0xff, - 0xd7, 0x51, 0xd3, 0xe9, 0xb2, 0x77, 0x2e, 0xce, 0xb2, 0x47, 0xc6, 0x0e, 0x56, 0xdb, 0x7b, 0x43, - 0x6a, 0xfb, 0x25, 0x18, 0xed, 0x10, 0x14, 0xbb, 0xc6, 0x7e, 0x50, 0x81, 0x74, 0x37, 0xe3, 0x44, - 0x54, 0xba, 0x84, 0x50, 0xe9, 0x2e, 0xc9, 0x16, 0x3c, 0xde, 0xdd, 0x09, 0x1d, 0xbe, 0xfe, 0x9c, - 0x02, 0xe3, 0xe1, 0x9d, 0x62, 0xa8, 0x0e, 0x0f, 0x41, 0x5f, 0x13, 0xb9, 0x3b, 0x36, 0xef, 0x96, - 0x4e, 0x86, 0xac, 0xc1, 0x98, 0x2c, 0x3b, 0x9b, 0xa1, 0x82, 0x8b, 0xb8, 0xda, 0xad, 0xdd, 0xa3, - 0xda, 0x74, 0x68, 0xfa, 0x91, 0x04, 0x1c, 0x09, 0x15, 0x1e, 0xaa, 0xe8, 0x5d, 0x00, 0x75, 0xab, - 0xb5, 0xeb, 0xd2, 0x8e, 0x88, 0x16, 0xd8, 0x7e, 0x32, 0x42, 0x8a, 0x17, 0x2e, 0x9e, 0xbb, 0xae, - 0x47, 0x57, 0x09, 0x1d, 0xe8, 0x10, 0x61, 0xb8, 0xe0, 0x2b, 0x9a, 0x24, 0x8a, 0x4e, 0x76, 0x99, - 0x69, 0x47, 0x60, 0xce, 0x83, 0x56, 0x6d, 0xd4, 0x91, 0xe5, 0x56, 0x1c, 0xb7, 0x8d, 0xcc, 0x66, - 0xdd, 0xda, 0x26, 0x2b, 0x48, 0x2a, 0xdb, 0xbb, 0x65, 0x36, 0x1c, 0x64, 0x8c, 0x50, 0xf2, 0x3a, - 0xa7, 0x62, 0x04, 0x09, 0xa0, 0x76, 0x00, 0xd1, 0x27, 0x20, 0x28, 0xd9, 0x43, 0x64, 0xbe, 0x9c, - 0x82, 0x81, 0x40, 0x5f, 0xad, 0x1f, 0x87, 0xc1, 0xc7, 0xcd, 0x27, 0xcd, 0x0a, 0x7f, 0x57, 0xa2, - 0x96, 0x18, 0xc0, 0x63, 0x6b, 0xec, 0x7d, 0x69, 0x1e, 0x0e, 0x13, 0x16, 0x7b, 0xd7, 0x45, 0xed, - 0x4a, 0xb5, 0x61, 0x3a, 0x0e, 0x31, 0x5a, 0x8a, 0xb0, 0xea, 0x98, 0xb6, 0x8a, 0x49, 0x05, 0x4e, - 0xd1, 0xcf, 0xc2, 0x18, 0x41, 0x34, 0x77, 0x1b, 0x6e, 0xbd, 0xd5, 0x40, 0x15, 0xfc, 0xf6, 0xe6, - 0x90, 0x95, 0xc4, 0xd3, 0x6c, 0x14, 0x73, 0xac, 0x30, 0x06, 0xac, 0x91, 0xa3, 0x17, 0xe1, 0x2e, - 0x02, 0xdb, 0x46, 0x16, 0x6a, 0x9b, 0x2e, 0xaa, 0xa0, 0xf7, 0xef, 0x9a, 0x0d, 0xa7, 0x62, 0x5a, - 0xb5, 0xca, 0x8e, 0xe9, 0xec, 0xa4, 0x0f, 0x63, 0x01, 0xf9, 0x44, 0x5a, 0x31, 0xee, 0xc0, 0x8c, - 0x57, 0x18, 0x5f, 0x89, 0xb0, 0xe5, 0xac, 0xda, 0x23, 0xa6, 0xb3, 0xa3, 0x67, 0x61, 0x9c, 0x48, - 0x71, 0xdc, 0x76, 0xdd, 0xda, 0xae, 0x54, 0x77, 0x50, 0xf5, 0x89, 0xca, 0xae, 0xbb, 0x75, 0x21, - 0x7d, 0x67, 0xf0, 0xf9, 0x44, 0xc3, 0x75, 0xc2, 0x53, 0xc0, 0x2c, 0x9b, 0xee, 0xd6, 0x05, 0x7d, - 0x1d, 0x06, 0xb1, 0x33, 0x9a, 0xf5, 0x67, 0x50, 0x65, 0xcb, 0x6e, 0x93, 0xa5, 0x71, 0x38, 0xa4, - 0x34, 0x05, 0x2c, 0x38, 0xb7, 0xca, 0x00, 0x2b, 0x76, 0x0d, 0x65, 0x7b, 0xd7, 0xd7, 0x4a, 0xa5, - 0xa2, 0x31, 0xc0, 0xa5, 0x5c, 0xb6, 0xdb, 0x38, 0xa0, 0xb6, 0x6d, 0xcf, 0xc0, 0x03, 0x34, 0xa0, - 0xb6, 0x6d, 0x6e, 0xde, 0xb3, 0x30, 0x56, 0xad, 0xd2, 0x39, 0xd7, 0xab, 0x15, 0xf6, 0x8e, 0xe5, - 0xa4, 0x35, 0xc1, 0x58, 0xd5, 0xea, 0x15, 0xca, 0xc0, 0x62, 0xdc, 0xd1, 0x2f, 0xc2, 0x11, 0xdf, - 0x58, 0x41, 0xe0, 0x68, 0xc7, 0x2c, 0x65, 0xe8, 0x59, 0x18, 0x6b, 0xed, 0x75, 0x02, 0x75, 0xe1, - 0x89, 0xad, 0x3d, 0x19, 0x76, 0x1e, 0x0e, 0xb7, 0x76, 0x5a, 0x9d, 0xb8, 0xd9, 0x20, 0x4e, 0x6f, - 0xed, 0xb4, 0x64, 0xe0, 0x3d, 0xe4, 0x85, 0xbb, 0x8d, 0xaa, 0xa6, 0x8b, 0x6a, 0xe9, 0xa3, 0x41, - 0xf6, 0x00, 0x41, 0x3f, 0x05, 0x5a, 0xb5, 0x5a, 0x41, 0x96, 0x79, 0xbd, 0x81, 0x2a, 0x66, 0x1b, - 0x59, 0xa6, 0x93, 0x9e, 0x0a, 0x32, 0x0f, 0x57, 0xab, 0x25, 0x42, 0xcd, 0x11, 0xa2, 0x3e, 0x0b, - 0xa3, 0xf6, 0xf5, 0xc7, 0xab, 0x34, 0x24, 0x2b, 0xad, 0x36, 0xda, 0xaa, 0x3f, 0x9d, 0x3e, 0x41, - 0xec, 0x3b, 0x82, 0x09, 0x24, 0x20, 0xd7, 0xc8, 0xb0, 0x7e, 0x1f, 0x68, 0x55, 0x67, 0xc7, 0x6c, - 0xb7, 0x48, 0x4d, 0x76, 0x5a, 0x66, 0x15, 0xa5, 0xef, 0xa1, 0xac, 0x74, 0xbc, 0xcc, 0x87, 0x71, - 0x4a, 0x38, 0x4f, 0xd5, 0xb7, 0x5c, 0x2e, 0xf1, 0x5e, 0x9a, 0x12, 0x64, 0x8c, 0x49, 0x9b, 0x01, - 0x0d, 0x9b, 0x42, 0x78, 0xf0, 0x0c, 0x61, 0x1b, 0x6e, 0xed, 0xb4, 0x82, 0xcf, 0xbd, 0x1b, 0x86, - 0x30, 0xa7, 0xff, 0xd0, 0xfb, 0x68, 0x43, 0xd6, 0xda, 0x09, 0x3c, 0xf1, 0x2d, 0xeb, 0x8d, 0x33, - 0x59, 0x18, 0x0c, 0xc6, 0xa7, 0xde, 0x0f, 0x34, 0x42, 0x35, 0x05, 0x37, 0x2b, 0x85, 0xd5, 0x22, - 0x6e, 0x33, 0xde, 0x5b, 0xd2, 0x12, 0xb8, 0xdd, 0x59, 0x5e, 0xda, 0x28, 0x55, 0x8c, 0xcd, 0xf2, - 0xc6, 0xd2, 0x4a, 0x49, 0x53, 0x83, 0x7d, 0xf5, 0xb7, 0x12, 0x30, 0x2c, 0xbe, 0x22, 0xe9, 0xef, - 0x84, 0xa3, 0x7c, 0x3f, 0xc3, 0x41, 0x6e, 0xe5, 0xa9, 0x7a, 0x9b, 0xa4, 0x4c, 0xd3, 0xa4, 0xcb, - 0x97, 0xe7, 0xb4, 0xc3, 0x8c, 0x6b, 0x1d, 0xb9, 0x8f, 0xd6, 0xdb, 0x38, 0x21, 0x9a, 0xa6, 0xab, - 0x2f, 0xc3, 0x94, 0x65, 0x57, 0x1c, 0xd7, 0xb4, 0x6a, 0x66, 0xbb, 0x56, 0xf1, 0x77, 0x92, 0x2a, - 0x66, 0xb5, 0x8a, 0x1c, 0xc7, 0xa6, 0x4b, 0x95, 0x27, 0xe5, 0x98, 0x65, 0xaf, 0x33, 0x66, 0xbf, - 0x86, 0xe7, 0x18, 0xab, 0x14, 0x60, 0x6a, 0xb7, 0x00, 0xbb, 0x13, 0xfa, 0x9b, 0x66, 0xab, 0x82, - 0x2c, 0xb7, 0xbd, 0x47, 0x1a, 0xe3, 0x94, 0x91, 0x6a, 0x9a, 0xad, 0x12, 0xfe, 0xfe, 0xf6, 0xbc, - 0x9f, 0xfc, 0xb3, 0x0a, 0x83, 0xc1, 0xe6, 0x18, 0xbf, 0x6b, 0x54, 0xc9, 0x3a, 0xa2, 0x90, 0x4a, - 0x73, 0xf7, 0xbe, 0xad, 0xf4, 0x5c, 0x01, 0x2f, 0x30, 0xd9, 0x3e, 0xda, 0xb2, 0x1a, 0x14, 0x89, - 0x17, 0x77, 0x5c, 0x5b, 0x10, 0x6d, 0x11, 0x52, 0x06, 0xfb, 0xa6, 0x5f, 0x81, 0xbe, 0xc7, 0x1d, - 0x22, 0xbb, 0x8f, 0xc8, 0x3e, 0xb1, 0xbf, 0xec, 0xab, 0xeb, 0x44, 0x78, 0xff, 0xd5, 0xf5, 0x4a, - 0x79, 0xd5, 0x58, 0xc9, 0x2d, 0x1b, 0x0c, 0xae, 0xdf, 0x01, 0xc9, 0x86, 0xf9, 0xcc, 0x9e, 0xb8, - 0x14, 0x91, 0xa1, 0xb8, 0x86, 0xbf, 0x03, 0x92, 0x4f, 0x21, 0xf3, 0x09, 0x71, 0x01, 0x20, 0x43, - 0x6f, 0x61, 0xe8, 0x9f, 0x82, 0x5e, 0x62, 0x2f, 0x1d, 0x80, 0x59, 0x4c, 0xeb, 0xd1, 0x53, 0x90, - 0x2c, 0xac, 0x1a, 0x38, 0xfc, 0x35, 0x18, 0xa4, 0xa3, 0x95, 0xb5, 0xa5, 0x52, 0xa1, 0xa4, 0x25, - 0x32, 0x67, 0xa1, 0x8f, 0x1a, 0x01, 0xa7, 0x86, 0x67, 0x06, 0xad, 0x87, 0x7d, 0x65, 0x32, 0x14, - 0x4e, 0xdd, 0x5c, 0xc9, 0x97, 0x0c, 0x2d, 0x11, 0x74, 0xaf, 0x03, 0x83, 0xc1, 0xbe, 0xf8, 0xed, - 0x89, 0xa9, 0x6f, 0x28, 0x30, 0x10, 0xe8, 0x73, 0x71, 0x83, 0x62, 0x36, 0x1a, 0xf6, 0x53, 0x15, - 0xb3, 0x51, 0x37, 0x1d, 0x16, 0x14, 0x40, 0x86, 0x72, 0x78, 0x24, 0xae, 0xd3, 0xde, 0x16, 0xe5, - 0x9f, 0x53, 0x40, 0x93, 0x5b, 0x4c, 0x49, 0x41, 0xe5, 0x67, 0xaa, 0xe0, 0x27, 0x15, 0x18, 0x16, - 0xfb, 0x4a, 0x49, 0xbd, 0xe3, 0x3f, 0x53, 0xf5, 0xbe, 0x97, 0x80, 0x21, 0xa1, 0x9b, 0x8c, 0xab, - 0xdd, 0xfb, 0x61, 0xb4, 0x5e, 0x43, 0xcd, 0x96, 0xed, 0x22, 0xab, 0xba, 0x57, 0x69, 0xa0, 0x27, - 0x51, 0x23, 0x9d, 0x21, 0x85, 0xe2, 0xd4, 0xfe, 0xfd, 0xea, 0xdc, 0x92, 0x8f, 0x5b, 0xc6, 0xb0, - 0xec, 0xd8, 0x52, 0xb1, 0xb4, 0xb2, 0xb6, 0xba, 0x51, 0x2a, 0x17, 0xae, 0x55, 0x36, 0xcb, 0xef, - 0x2a, 0xaf, 0x3e, 0x5a, 0x36, 0xb4, 0xba, 0xc4, 0xf6, 0x16, 0xa6, 0xfa, 0x1a, 0x68, 0xb2, 0x52, - 0xfa, 0x51, 0x08, 0x53, 0x4b, 0xeb, 0xd1, 0xc7, 0x60, 0xa4, 0xbc, 0x5a, 0x59, 0x5f, 0x2a, 0x96, - 0x2a, 0xa5, 0xcb, 0x97, 0x4b, 0x85, 0x8d, 0x75, 0xba, 0x03, 0xe1, 0x71, 0x6f, 0x88, 0x49, 0xfd, - 0x09, 0x15, 0xc6, 0x42, 0x34, 0xd1, 0x73, 0xec, 0xdd, 0x81, 0xbe, 0xce, 0x3c, 0x10, 0x47, 0xfb, - 0x39, 0xbc, 0xe4, 0xaf, 0x99, 0x6d, 0x97, 0xbd, 0x6a, 0xdc, 0x07, 0xd8, 0x4a, 0x96, 0x5b, 0xdf, - 0xaa, 0xa3, 0x36, 0xdb, 0xb0, 0xa1, 0x2f, 0x14, 0x23, 0xfe, 0x38, 0xdd, 0xb3, 0xb9, 0x1f, 0xf4, - 0x96, 0xed, 0xd4, 0xdd, 0xfa, 0x93, 0xa8, 0x52, 0xb7, 0xf8, 0xee, 0x0e, 0x7e, 0xc1, 0x48, 0x1a, - 0x1a, 0xa7, 0x2c, 0x59, 0xae, 0xc7, 0x6d, 0xa1, 0x6d, 0x53, 0xe2, 0xc6, 0x05, 0x5c, 0x35, 0x34, - 0x4e, 0xf1, 0xb8, 0x8f, 0xc3, 0x60, 0xcd, 0xde, 0xc5, 0x5d, 0x17, 0xe5, 0xc3, 0xeb, 0x85, 0x62, - 0x0c, 0xd0, 0x31, 0x8f, 0x85, 0xf5, 0xd3, 0xfe, 0xb6, 0xd2, 0xa0, 0x31, 0x40, 0xc7, 0x28, 0xcb, - 0xbd, 0x30, 0x62, 0x6e, 0x6f, 0xb7, 0xb1, 0x70, 0x2e, 0x88, 0xbe, 0x21, 0x0c, 0x7b, 0xc3, 0x84, - 0x71, 0xe2, 0x2a, 0xa4, 0xb8, 0x1d, 0xf0, 0x92, 0x8c, 0x2d, 0x51, 0x69, 0xd1, 0xd7, 0xde, 0xc4, - 0x4c, 0xbf, 0x91, 0xb2, 0x38, 0xf1, 0x38, 0x0c, 0xd6, 0x9d, 0x8a, 0xbf, 0x4b, 0x9e, 0x98, 0x4e, - 0xcc, 0xa4, 0x8c, 0x81, 0xba, 0xe3, 0xed, 0x30, 0x66, 0x3e, 0x97, 0x80, 0x61, 0x71, 0x97, 0x5f, - 0x2f, 0x42, 0xaa, 0x61, 0x57, 0x4d, 0x12, 0x5a, 0xf4, 0x88, 0x69, 0x26, 0xe2, 0x60, 0x60, 0x6e, - 0x99, 0xf1, 0x1b, 0x1e, 0x72, 0xe2, 0xdb, 0x0a, 0xa4, 0xf8, 0xb0, 0x3e, 0x0e, 0xc9, 0x96, 0xe9, - 0xee, 0x10, 0x71, 0xbd, 0xf9, 0x84, 0xa6, 0x18, 0xe4, 0x3b, 0x1e, 0x77, 0x5a, 0xa6, 0x45, 0x42, - 0x80, 0x8d, 0xe3, 0xef, 0xd8, 0xaf, 0x0d, 0x64, 0xd6, 0xc8, 0xeb, 0x87, 0xdd, 0x6c, 0x22, 0xcb, - 0x75, 0xb8, 0x5f, 0xd9, 0x78, 0x81, 0x0d, 0xeb, 0xef, 0x80, 0x51, 0xb7, 0x6d, 0xd6, 0x1b, 0x02, - 0x6f, 0x92, 0xf0, 0x6a, 0x9c, 0xe0, 0x31, 0x67, 0xe1, 0x0e, 0x2e, 0xb7, 0x86, 0x5c, 0xb3, 0xba, - 0x83, 0x6a, 0x3e, 0xa8, 0x8f, 0x6c, 0x33, 0x1c, 0x65, 0x0c, 0x45, 0x46, 0xe7, 0xd8, 0xcc, 0x77, - 0x14, 0x18, 0xe5, 0x2f, 0x4c, 0x35, 0xcf, 0x58, 0x2b, 0x00, 0xa6, 0x65, 0xd9, 0x6e, 0xd0, 0x5c, - 0x9d, 0xa1, 0xdc, 0x81, 0x9b, 0xcb, 0x79, 0x20, 0x23, 0x20, 0x60, 0xa2, 0x09, 0xe0, 0x53, 0xba, - 0x9a, 0x6d, 0x0a, 0x06, 0xd8, 0x11, 0x0e, 0x39, 0x07, 0xa4, 0xaf, 0xd8, 0x40, 0x87, 0xf0, 0x9b, - 0x95, 0x7e, 0x18, 0x7a, 0xaf, 0xa3, 0xed, 0xba, 0xc5, 0x36, 0x66, 0xe9, 0x17, 0xbe, 0x11, 0x92, - 0xf4, 0x36, 0x42, 0xf2, 0xef, 0x83, 0xb1, 0xaa, 0xdd, 0x94, 0xd5, 0xcd, 0x6b, 0xd2, 0x6b, 0xbe, - 0xf3, 0x88, 0xf2, 0x5e, 0xf0, 0x5b, 0xcc, 0x9f, 0x28, 0xca, 0x1f, 0x26, 0xd4, 0x2b, 0x6b, 0xf9, - 0x2f, 0x24, 0x26, 0xae, 0x50, 0xe8, 0x1a, 0x9f, 0xa9, 0x81, 0xb6, 0x1a, 0xa8, 0x8a, 0xb5, 0x87, - 0xcf, 0xce, 0xc0, 0x03, 0xdb, 0x75, 0x77, 0x67, 0xf7, 0xfa, 0x5c, 0xd5, 0x6e, 0x9e, 0xda, 0xb6, - 0xb7, 0x6d, 0xff, 0xe8, 0x13, 0x7f, 0x23, 0x5f, 0xc8, 0x27, 0x76, 0xfc, 0xd9, 0xef, 0x8d, 0x4e, - 0x44, 0x9e, 0x95, 0x66, 0xcb, 0x30, 0xc6, 0x98, 0x2b, 0xe4, 0xfc, 0x85, 0xbe, 0x45, 0xe8, 0xfb, - 0xee, 0x61, 0xa5, 0xbf, 0xf4, 0x7d, 0xb2, 0x5c, 0x1b, 0xa3, 0x0c, 0x8a, 0x69, 0xf4, 0x45, 0x23, - 0x6b, 0xc0, 0x11, 0x41, 0x1e, 0x4d, 0x4d, 0xd4, 0x8e, 0x90, 0xf8, 0x2d, 0x26, 0x71, 0x2c, 0x20, - 0x71, 0x9d, 0x41, 0xb3, 0x05, 0x18, 0x3a, 0x88, 0xac, 0xbf, 0x63, 0xb2, 0x06, 0x51, 0x50, 0xc8, - 0x15, 0x18, 0x21, 0x42, 0xaa, 0xbb, 0x8e, 0x6b, 0x37, 0x49, 0xdd, 0xdb, 0x5f, 0xcc, 0xdf, 0x7f, - 0x9f, 0xe6, 0xca, 0x30, 0x86, 0x15, 0x3c, 0x54, 0x36, 0x0b, 0xe4, 0xc8, 0xa9, 0x86, 0xaa, 0x8d, - 0x08, 0x09, 0x37, 0x98, 0x22, 0x1e, 0x7f, 0xf6, 0x3d, 0x70, 0x18, 0x7f, 0x26, 0x65, 0x29, 0xa8, - 0x49, 0xf4, 0x86, 0x57, 0xfa, 0x3b, 0x1f, 0xa4, 0xe9, 0x38, 0xe6, 0x09, 0x08, 0xe8, 0x14, 0xf0, - 0xe2, 0x36, 0x72, 0x5d, 0xd4, 0x76, 0x2a, 0x66, 0x23, 0x4c, 0xbd, 0xc0, 0x8e, 0x41, 0xfa, 0xe3, - 0xaf, 0x8a, 0x5e, 0xbc, 0x42, 0x91, 0xb9, 0x46, 0x23, 0xbb, 0x09, 0x47, 0x43, 0xa2, 0x22, 0x86, - 0xcc, 0x4f, 0x30, 0x99, 0x87, 0x3b, 0x22, 0x03, 0x8b, 0x5d, 0x03, 0x3e, 0xee, 0xf9, 0x32, 0x86, - 0xcc, 0x3f, 0x60, 0x32, 0x75, 0x86, 0xe5, 0x2e, 0xc5, 0x12, 0xaf, 0xc2, 0xe8, 0x93, 0xa8, 0x7d, - 0xdd, 0x76, 0xd8, 0x2e, 0x4d, 0x0c, 0x71, 0x9f, 0x64, 0xe2, 0x46, 0x18, 0x90, 0x6c, 0xdb, 0x60, - 0x59, 0x17, 0x21, 0xb5, 0x65, 0x56, 0x51, 0x0c, 0x11, 0x9f, 0x62, 0x22, 0x0e, 0x61, 0x7e, 0x0c, - 0xcd, 0xc1, 0xe0, 0xb6, 0xcd, 0x56, 0xa6, 0x68, 0xf8, 0x73, 0x0c, 0x3e, 0xc0, 0x31, 0x4c, 0x44, - 0xcb, 0x6e, 0xed, 0x36, 0xf0, 0xb2, 0x15, 0x2d, 0xe2, 0xd3, 0x5c, 0x04, 0xc7, 0x30, 0x11, 0x07, - 0x30, 0xeb, 0xf3, 0x5c, 0x84, 0x13, 0xb0, 0xe7, 0xc3, 0x30, 0x60, 0x5b, 0x8d, 0x3d, 0xdb, 0x8a, - 0xa3, 0xc4, 0x67, 0x98, 0x04, 0x60, 0x10, 0x2c, 0xe0, 0x12, 0xf4, 0xc7, 0x75, 0xc4, 0x67, 0x5f, - 0xe5, 0xe9, 0xc1, 0x3d, 0x70, 0x05, 0x46, 0x78, 0x81, 0xaa, 0xdb, 0x56, 0x0c, 0x11, 0x7f, 0xcc, - 0x44, 0x0c, 0x07, 0x60, 0x6c, 0x1a, 0x2e, 0x72, 0xdc, 0x6d, 0x14, 0x47, 0xc8, 0xe7, 0xf8, 0x34, - 0x18, 0x84, 0x99, 0xf2, 0x3a, 0xb2, 0xaa, 0x3b, 0xf1, 0x24, 0xbc, 0xc0, 0x4d, 0xc9, 0x31, 0x58, - 0x44, 0x01, 0x86, 0x9a, 0x66, 0xdb, 0xd9, 0x31, 0x1b, 0xb1, 0xdc, 0xf1, 0x79, 0x26, 0x63, 0xd0, - 0x03, 0x31, 0x8b, 0xec, 0x5a, 0x07, 0x11, 0xf3, 0x05, 0x6e, 0x91, 0x00, 0x8c, 0xa5, 0x9e, 0xe3, - 0x92, 0x2d, 0xad, 0x83, 0x48, 0xfb, 0x13, 0x9e, 0x7a, 0x14, 0xbb, 0x12, 0x94, 0x78, 0x09, 0xfa, - 0x9d, 0xfa, 0x33, 0xb1, 0xc4, 0xfc, 0x29, 0xf7, 0x34, 0x01, 0x60, 0xf0, 0x35, 0xb8, 0x23, 0x74, - 0x99, 0x88, 0x21, 0xec, 0xcf, 0x98, 0xb0, 0xf1, 0x90, 0xa5, 0x82, 0x95, 0x84, 0x83, 0x8a, 0xfc, - 0x73, 0x5e, 0x12, 0x90, 0x24, 0x6b, 0x0d, 0xbf, 0x2b, 0x38, 0xe6, 0xd6, 0xc1, 0xac, 0xf6, 0x17, - 0xdc, 0x6a, 0x14, 0x2b, 0x58, 0x6d, 0x03, 0xc6, 0x99, 0xc4, 0x83, 0xf9, 0xf5, 0x8b, 0xbc, 0xb0, - 0x52, 0xf4, 0xa6, 0xe8, 0xdd, 0xf7, 0xc1, 0x84, 0x67, 0x4e, 0xde, 0x94, 0x3a, 0x95, 0xa6, 0xd9, - 0x8a, 0x21, 0xf9, 0x4b, 0x4c, 0x32, 0xaf, 0xf8, 0x5e, 0x57, 0xeb, 0xac, 0x98, 0x2d, 0x2c, 0xfc, - 0x31, 0x48, 0x73, 0xe1, 0xbb, 0x56, 0x1b, 0x55, 0xed, 0x6d, 0xab, 0xfe, 0x0c, 0xaa, 0xc5, 0x10, - 0xfd, 0x97, 0x92, 0xab, 0x36, 0x03, 0x70, 0x2c, 0x79, 0x09, 0x34, 0xaf, 0x57, 0xa9, 0xd4, 0x9b, - 0x2d, 0xbb, 0xed, 0x46, 0x48, 0xfc, 0x32, 0xf7, 0x94, 0x87, 0x5b, 0x22, 0xb0, 0x6c, 0x09, 0x86, - 0xc9, 0xd7, 0xb8, 0x21, 0xf9, 0x15, 0x26, 0x68, 0xc8, 0x47, 0xb1, 0xc2, 0x51, 0xb5, 0x9b, 0x2d, - 0xb3, 0x1d, 0xa7, 0xfe, 0xfd, 0x15, 0x2f, 0x1c, 0x0c, 0xc2, 0x0a, 0x87, 0xbb, 0xd7, 0x42, 0x78, - 0xb5, 0x8f, 0x21, 0xe1, 0xab, 0xbc, 0x70, 0x70, 0x0c, 0x13, 0xc1, 0x1b, 0x86, 0x18, 0x22, 0xfe, - 0x9a, 0x8b, 0xe0, 0x18, 0x2c, 0xe2, 0xdd, 0xfe, 0x42, 0xdb, 0x46, 0xdb, 0x75, 0xc7, 0x6d, 0xd3, - 0x56, 0x78, 0x7f, 0x51, 0x5f, 0x7b, 0x55, 0x6c, 0xc2, 0x8c, 0x00, 0x14, 0x57, 0x22, 0xb6, 0x85, - 0x4a, 0xde, 0x94, 0xa2, 0x15, 0xfb, 0x3a, 0xaf, 0x44, 0x01, 0x18, 0xcd, 0xcf, 0x11, 0xa9, 0x57, - 0xd1, 0xa3, 0x2e, 0xc2, 0xa4, 0x7f, 0xf1, 0x35, 0x26, 0x4b, 0x6c, 0x55, 0xb2, 0xcb, 0x38, 0x80, - 0xc4, 0x86, 0x22, 0x5a, 0xd8, 0x07, 0x5f, 0xf3, 0x62, 0x48, 0xe8, 0x27, 0xb2, 0x97, 0x61, 0x48, - 0x68, 0x26, 0xa2, 0x45, 0xfd, 0x12, 0x13, 0x35, 0x18, 0xec, 0x25, 0xb2, 0x67, 0x21, 0x89, 0x1b, - 0x83, 0x68, 0xf8, 0x2f, 0x33, 0x38, 0x61, 0xcf, 0x3e, 0x08, 0x29, 0xde, 0x10, 0x44, 0x43, 0x3f, - 0xc4, 0xa0, 0x1e, 0x04, 0xc3, 0x79, 0x33, 0x10, 0x0d, 0xff, 0x15, 0x0e, 0xe7, 0x10, 0x0c, 0x8f, - 0x6f, 0xc2, 0x17, 0x7f, 0x2d, 0xc9, 0x0a, 0x3a, 0xb7, 0xdd, 0x25, 0x38, 0xc4, 0xba, 0x80, 0x68, - 0xf4, 0x47, 0xd8, 0xc3, 0x39, 0x22, 0x7b, 0x1e, 0x7a, 0x63, 0x1a, 0xfc, 0xd7, 0x19, 0x94, 0xf2, - 0x67, 0x0b, 0x30, 0x10, 0x58, 0xf9, 0xa3, 0xe1, 0xbf, 0xc1, 0xe0, 0x41, 0x14, 0x56, 0x9d, 0xad, - 0xfc, 0xd1, 0x02, 0x7e, 0x93, 0xab, 0xce, 0x10, 0xd8, 0x6c, 0x7c, 0xd1, 0x8f, 0x46, 0xff, 0x16, - 0xb7, 0x3a, 0x87, 0x64, 0x1f, 0x86, 0x7e, 0xaf, 0x90, 0x47, 0xe3, 0x7f, 0x9b, 0xe1, 0x7d, 0x0c, - 0xb6, 0x40, 0x60, 0x21, 0x89, 0x16, 0xf1, 0x3b, 0xdc, 0x02, 0x01, 0x14, 0x4e, 0x23, 0xb9, 0x39, - 0x88, 0x96, 0xf4, 0x51, 0x9e, 0x46, 0x52, 0x6f, 0x80, 0xbd, 0x49, 0xea, 0x69, 0xb4, 0x88, 0xdf, - 0xe5, 0xde, 0x24, 0xfc, 0x58, 0x0d, 0x79, 0xb5, 0x8d, 0x96, 0xf1, 0xfb, 0x5c, 0x0d, 0x69, 0xb1, - 0xcd, 0xae, 0x81, 0xde, 0xb9, 0xd2, 0x46, 0xcb, 0xfb, 0x18, 0x93, 0x37, 0xda, 0xb1, 0xd0, 0x66, - 0x1f, 0x85, 0xf1, 0xf0, 0x55, 0x36, 0x5a, 0xea, 0xc7, 0x5f, 0x93, 0xde, 0x8b, 0x82, 0x8b, 0x6c, - 0x76, 0xc3, 0x2f, 0xd7, 0xc1, 0x15, 0x36, 0x5a, 0xec, 0x27, 0x5e, 0x13, 0x2b, 0x76, 0x70, 0x81, - 0xcd, 0xe6, 0x00, 0xfc, 0xc5, 0x2d, 0x5a, 0xd6, 0x27, 0x99, 0xac, 0x00, 0x08, 0xa7, 0x06, 0x5b, - 0xdb, 0xa2, 0xf1, 0x9f, 0xe2, 0xa9, 0xc1, 0x10, 0x38, 0x35, 0xf8, 0xb2, 0x16, 0x8d, 0x7e, 0x8e, - 0xa7, 0x06, 0x87, 0xe0, 0xc8, 0x0e, 0xac, 0x1c, 0xd1, 0x12, 0x3e, 0xc3, 0x23, 0x3b, 0x80, 0xca, - 0x5e, 0x82, 0x94, 0xb5, 0xdb, 0x68, 0xe0, 0x00, 0xd5, 0xf7, 0xbf, 0x20, 0x96, 0xfe, 0xd7, 0xd7, - 0x99, 0x06, 0x1c, 0x90, 0x3d, 0x0b, 0xbd, 0xa8, 0x79, 0x1d, 0xd5, 0xa2, 0x90, 0xff, 0xf6, 0x3a, - 0x2f, 0x4a, 0x98, 0x3b, 0xfb, 0x30, 0x00, 0x7d, 0xb5, 0x27, 0xc7, 0x56, 0x11, 0xd8, 0x7f, 0x7f, - 0x9d, 0x5d, 0xdd, 0xf0, 0x21, 0xbe, 0x00, 0x7a, 0x11, 0x64, 0x7f, 0x01, 0xaf, 0x8a, 0x02, 0xc8, - 0xac, 0x2f, 0xc2, 0xa1, 0xc7, 0x1d, 0xdb, 0x72, 0xcd, 0xed, 0x28, 0xf4, 0x7f, 0x30, 0x34, 0xe7, - 0xc7, 0x06, 0x6b, 0xda, 0x6d, 0xe4, 0x9a, 0xdb, 0x4e, 0x14, 0xf6, 0x3f, 0x19, 0xd6, 0x03, 0x60, - 0x70, 0xd5, 0x74, 0xdc, 0x38, 0xf3, 0xfe, 0x21, 0x07, 0x73, 0x00, 0x56, 0x1a, 0x7f, 0x7e, 0x02, - 0xed, 0x45, 0x61, 0x7f, 0xc4, 0x95, 0x66, 0xfc, 0xd9, 0x07, 0xa1, 0x1f, 0x7f, 0xa4, 0xf7, 0xb1, - 0x22, 0xc0, 0xff, 0xc5, 0xc0, 0x3e, 0x02, 0x3f, 0xd9, 0x71, 0x6b, 0x6e, 0x3d, 0xda, 0xd8, 0x3f, - 0x66, 0x9e, 0xe6, 0xfc, 0xd9, 0x1c, 0x0c, 0x38, 0x6e, 0xad, 0xb6, 0xcb, 0xfa, 0xab, 0x08, 0xf8, - 0x7f, 0xbf, 0xee, 0xbd, 0x72, 0x7b, 0x98, 0x7c, 0x29, 0x7c, 0xf7, 0x10, 0xae, 0xd8, 0x57, 0x6c, - 0xba, 0x6f, 0xf8, 0xde, 0x4c, 0xf4, 0x06, 0x20, 0x7c, 0xbb, 0x01, 0xd3, 0x55, 0xbb, 0x79, 0xdd, - 0x76, 0x4e, 0x05, 0xea, 0xdd, 0x29, 0x77, 0x07, 0xe1, 0xa5, 0x8a, 0x6d, 0x0d, 0x26, 0xf1, 0xe7, - 0x89, 0x83, 0xed, 0x27, 0x92, 0xd3, 0xe2, 0x72, 0x1d, 0x4f, 0xa2, 0x4c, 0x36, 0xec, 0xf5, 0x63, - 0xd0, 0x47, 0xa6, 0x75, 0x9a, 0x1c, 0x8a, 0x29, 0xf9, 0xe4, 0x8d, 0x97, 0xa7, 0x7a, 0x0c, 0x36, - 0xe6, 0x51, 0x17, 0xc8, 0x8e, 0x6a, 0x42, 0xa0, 0x2e, 0x78, 0xd4, 0x33, 0x74, 0x53, 0x55, 0xa0, - 0x9e, 0xf1, 0xa8, 0x8b, 0x64, 0x7b, 0x55, 0x15, 0xa8, 0x8b, 0x1e, 0xf5, 0x2c, 0x39, 0x42, 0x18, - 0x12, 0xa8, 0x67, 0x3d, 0xea, 0x39, 0x72, 0x70, 0x90, 0x14, 0xa8, 0xe7, 0x3c, 0xea, 0x79, 0x72, - 0x66, 0x30, 0x2a, 0x50, 0xcf, 0x7b, 0xd4, 0x0b, 0xe4, 0xac, 0x40, 0x17, 0xa8, 0x17, 0x3c, 0xea, - 0x45, 0x72, 0x11, 0xe7, 0x90, 0x40, 0xbd, 0xa8, 0x4f, 0xc2, 0x21, 0x3a, 0xf3, 0x79, 0x72, 0xb0, - 0x3c, 0xc2, 0xc8, 0x7c, 0xd0, 0xa7, 0x9f, 0x26, 0x97, 0x6e, 0xfa, 0x44, 0xfa, 0x69, 0x9f, 0xbe, - 0x40, 0xee, 0xff, 0x6b, 0x22, 0x7d, 0xc1, 0xa7, 0x9f, 0x49, 0x0f, 0x91, 0x8b, 0x47, 0x02, 0xfd, - 0x8c, 0x4f, 0x5f, 0x4c, 0x0f, 0xe3, 0xc8, 0x16, 0xe9, 0x8b, 0x3e, 0xfd, 0x6c, 0x7a, 0x64, 0x5a, - 0x99, 0x19, 0x14, 0xe9, 0x67, 0x33, 0x1f, 0x20, 0xee, 0xb5, 0x7c, 0xf7, 0x8e, 0x8b, 0xee, 0xf5, - 0x1c, 0x3b, 0x2e, 0x3a, 0xd6, 0x73, 0xe9, 0xb8, 0xe8, 0x52, 0xcf, 0x99, 0xe3, 0xa2, 0x33, 0x3d, - 0x37, 0x8e, 0x8b, 0x6e, 0xf4, 0x1c, 0x38, 0x2e, 0x3a, 0xd0, 0x73, 0xdd, 0xb8, 0xe8, 0x3a, 0xcf, - 0x69, 0xe3, 0xa2, 0xd3, 0x3c, 0x77, 0x8d, 0x8b, 0xee, 0xf2, 0x1c, 0x95, 0x96, 0x1c, 0xe5, 0xbb, - 0x28, 0x2d, 0xb9, 0xc8, 0x77, 0x4e, 0x5a, 0x72, 0x8e, 0xef, 0x96, 0xb4, 0xe4, 0x16, 0xdf, 0x21, - 0x69, 0xc9, 0x21, 0xbe, 0x2b, 0xd2, 0x92, 0x2b, 0x7c, 0x27, 0xb0, 0x1c, 0x33, 0x50, 0x2b, 0x24, - 0xc7, 0xd4, 0x7d, 0x73, 0x4c, 0xdd, 0x37, 0xc7, 0xd4, 0x7d, 0x73, 0x4c, 0xdd, 0x37, 0xc7, 0xd4, - 0x7d, 0x73, 0x4c, 0xdd, 0x37, 0xc7, 0xd4, 0x7d, 0x73, 0x4c, 0xdd, 0x37, 0xc7, 0xd4, 0xfd, 0x73, - 0x4c, 0x8d, 0xc8, 0x31, 0x35, 0x22, 0xc7, 0xd4, 0x88, 0x1c, 0x53, 0x23, 0x72, 0x4c, 0x8d, 0xc8, - 0x31, 0xb5, 0x6b, 0x8e, 0xf9, 0xee, 0x1d, 0x17, 0xdd, 0x1b, 0x9a, 0x63, 0x6a, 0x97, 0x1c, 0x53, - 0xbb, 0xe4, 0x98, 0xda, 0x25, 0xc7, 0xd4, 0x2e, 0x39, 0xa6, 0x76, 0xc9, 0x31, 0xb5, 0x4b, 0x8e, - 0xa9, 0x5d, 0x72, 0x4c, 0xed, 0x96, 0x63, 0x6a, 0xd7, 0x1c, 0x53, 0xbb, 0xe6, 0x98, 0xda, 0x35, - 0xc7, 0xd4, 0xae, 0x39, 0xa6, 0x76, 0xcd, 0x31, 0x35, 0x98, 0x63, 0x7f, 0xa3, 0x82, 0x4e, 0x73, - 0x6c, 0x8d, 0x5c, 0x4d, 0x62, 0xae, 0x98, 0x94, 0x32, 0xad, 0x0f, 0xbb, 0x4e, 0xf3, 0x5d, 0x32, - 0x29, 0xe5, 0x9a, 0x48, 0x5f, 0xf0, 0xe8, 0x3c, 0xdb, 0x44, 0xfa, 0x19, 0x8f, 0xce, 0xf3, 0x4d, - 0xa4, 0x2f, 0x7a, 0x74, 0x9e, 0x71, 0x22, 0xfd, 0xac, 0x47, 0xe7, 0x39, 0x27, 0xd2, 0xcf, 0x79, - 0x74, 0x9e, 0x75, 0x22, 0xfd, 0xbc, 0x47, 0xe7, 0x79, 0x27, 0xd2, 0x2f, 0x78, 0x74, 0x9e, 0x79, - 0x22, 0xfd, 0xa2, 0x3e, 0x2d, 0xe7, 0x1e, 0x67, 0xf0, 0x5c, 0x3b, 0x2d, 0x67, 0x9f, 0xc4, 0x71, - 0xda, 0xe7, 0xe0, 0xf9, 0x27, 0x71, 0x2c, 0xf8, 0x1c, 0x3c, 0x03, 0x25, 0x8e, 0x33, 0x99, 0x0f, - 0x13, 0xf7, 0x59, 0xb2, 0xfb, 0x26, 0x24, 0xf7, 0x25, 0x02, 0xae, 0x9b, 0x90, 0x5c, 0x97, 0x08, - 0xb8, 0x6d, 0x42, 0x72, 0x5b, 0x22, 0xe0, 0xb2, 0x09, 0xc9, 0x65, 0x89, 0x80, 0xbb, 0x26, 0x24, - 0x77, 0x25, 0x02, 0xae, 0x9a, 0x90, 0x5c, 0x95, 0x08, 0xb8, 0x69, 0x42, 0x72, 0x53, 0x22, 0xe0, - 0xa2, 0x09, 0xc9, 0x45, 0x89, 0x80, 0x7b, 0x26, 0x24, 0xf7, 0x24, 0x02, 0xae, 0x39, 0x26, 0xbb, - 0x26, 0x11, 0x74, 0xcb, 0x31, 0xd9, 0x2d, 0x89, 0xa0, 0x4b, 0x8e, 0xc9, 0x2e, 0x49, 0x04, 0xdd, - 0x71, 0x4c, 0x76, 0x47, 0x22, 0xe8, 0x8a, 0x9f, 0x26, 0x78, 0x47, 0xb8, 0xee, 0xb6, 0x77, 0xab, - 0xee, 0x6d, 0x75, 0x84, 0xf3, 0x42, 0xfb, 0x30, 0xb0, 0xa0, 0xcf, 0x91, 0x86, 0x35, 0xd8, 0x71, - 0x4a, 0x2b, 0xd8, 0xbc, 0xd0, 0x58, 0x04, 0x10, 0x56, 0x38, 0x62, 0xf1, 0xb6, 0x7a, 0xc3, 0x79, - 0xa1, 0xcd, 0x88, 0xd6, 0xef, 0xc2, 0x5b, 0xde, 0xb1, 0xbd, 0x98, 0xe0, 0x1d, 0x1b, 0x33, 0xff, - 0x41, 0x3b, 0xb6, 0xd9, 0x68, 0x93, 0x7b, 0xc6, 0x9e, 0x8d, 0x36, 0x76, 0xc7, 0xaa, 0x13, 0xb7, - 0x83, 0x9b, 0x8d, 0x36, 0xad, 0x67, 0xd4, 0x37, 0xb7, 0xdf, 0x62, 0x11, 0x6c, 0xa0, 0x56, 0x48, - 0x04, 0x1f, 0xb4, 0xdf, 0x9a, 0x17, 0x4a, 0xc9, 0x41, 0x23, 0x58, 0x3d, 0x70, 0x04, 0x1f, 0xb4, - 0xf3, 0x9a, 0x17, 0xca, 0xcb, 0x81, 0x23, 0xf8, 0x2d, 0xe8, 0x87, 0x58, 0x04, 0xfb, 0xe6, 0x3f, - 0x68, 0x3f, 0x34, 0x1b, 0x6d, 0xf2, 0xd0, 0x08, 0x56, 0x0f, 0x10, 0xc1, 0x71, 0xfa, 0xa3, 0xd9, - 0x68, 0xd3, 0x86, 0x47, 0xf0, 0x6d, 0x77, 0x33, 0x9f, 0x56, 0x60, 0xb4, 0x5c, 0xaf, 0x95, 0x9a, - 0xd7, 0x51, 0xad, 0x86, 0x6a, 0xcc, 0x8e, 0xf3, 0x42, 0x25, 0xe8, 0xe2, 0xea, 0x97, 0x5e, 0x9e, - 0xf2, 0x2d, 0x7c, 0x16, 0x52, 0xd4, 0xa6, 0xf3, 0xf3, 0xe9, 0x1b, 0x4a, 0x44, 0x85, 0xf3, 0x58, - 0xf5, 0xe3, 0x1c, 0x76, 0x7a, 0x3e, 0xfd, 0x8f, 0x4a, 0xa0, 0xca, 0x79, 0xc3, 0x99, 0x8f, 0x12, - 0x0d, 0xad, 0xdb, 0xd6, 0xf0, 0x54, 0x2c, 0x0d, 0x03, 0xba, 0xdd, 0xd9, 0xa1, 0x5b, 0x40, 0xab, - 0x5d, 0x18, 0x29, 0xd7, 0x6b, 0x65, 0xf2, 0x97, 0xe7, 0x71, 0x54, 0xa2, 0x3c, 0x52, 0x3d, 0x98, - 0x17, 0xc2, 0x32, 0x88, 0xf0, 0x42, 0x5a, 0xac, 0x11, 0x99, 0x3a, 0x7e, 0xac, 0x25, 0x3c, 0x76, - 0xb6, 0xdb, 0x63, 0xfd, 0xca, 0xee, 0x3d, 0x70, 0xb6, 0xdb, 0x03, 0xfd, 0x1c, 0xf2, 0x1e, 0xf5, - 0x34, 0x5f, 0x9c, 0xe9, 0x05, 0x21, 0xfd, 0x18, 0x24, 0x96, 0xe8, 0xfd, 0xe5, 0xc1, 0xfc, 0x20, - 0x56, 0xea, 0xbb, 0x2f, 0x4f, 0x25, 0x37, 0x77, 0xeb, 0x35, 0x23, 0xb1, 0x54, 0xd3, 0xaf, 0x42, - 0xef, 0x7b, 0xd8, 0xdf, 0x3f, 0x62, 0x86, 0x45, 0xc6, 0x70, 0x7f, 0xd7, 0x3d, 0x22, 0xfc, 0xe0, - 0x53, 0x74, 0xb3, 0x71, 0x6e, 0xb3, 0x6e, 0xb9, 0xa7, 0x17, 0x2e, 0x18, 0x54, 0x44, 0xe6, 0xff, - 0x02, 0xd0, 0x67, 0x16, 0x4d, 0x67, 0x47, 0x2f, 0x73, 0xc9, 0xf4, 0xd1, 0x17, 0xbe, 0xfb, 0xf2, - 0xd4, 0x62, 0x1c, 0xa9, 0x0f, 0xd4, 0x4c, 0x67, 0xe7, 0x01, 0x77, 0xaf, 0x85, 0xe6, 0xf2, 0x7b, - 0x2e, 0x72, 0xb8, 0xf4, 0x16, 0x5f, 0xf5, 0xd8, 0xbc, 0xd2, 0x81, 0x79, 0xa5, 0x84, 0x39, 0x5d, - 0x16, 0xe7, 0x34, 0xff, 0x46, 0xe7, 0xf3, 0x34, 0x5f, 0x24, 0x24, 0x4b, 0xaa, 0x51, 0x96, 0x54, - 0x6f, 0xd7, 0x92, 0x2d, 0x5e, 0x1f, 0xa5, 0xb9, 0xaa, 0xfb, 0xcd, 0x55, 0xbd, 0x9d, 0xb9, 0xfe, - 0x0f, 0xcd, 0x56, 0x2f, 0x9f, 0x36, 0x2d, 0x7a, 0x77, 0xf2, 0xe7, 0x6b, 0x2f, 0xe8, 0x4d, 0xed, - 0x02, 0xb2, 0xc9, 0x1b, 0xcf, 0x4f, 0x29, 0x99, 0x4f, 0x27, 0xf8, 0xcc, 0x69, 0x22, 0xbd, 0xb1, - 0x99, 0xff, 0xbc, 0xf4, 0x54, 0x6f, 0x85, 0x85, 0x9e, 0x53, 0x60, 0xbc, 0xa3, 0x92, 0x53, 0x33, - 0xbd, 0xb9, 0xe5, 0xdc, 0x3a, 0x68, 0x39, 0x67, 0x0a, 0x7e, 0x45, 0x81, 0xc3, 0x52, 0x79, 0xa5, - 0xea, 0x9d, 0x92, 0xd4, 0x3b, 0xda, 0xf9, 0x24, 0xc2, 0x18, 0xd0, 0x2e, 0xe8, 0x5e, 0x09, 0x10, - 0x90, 0xec, 0xf9, 0x7d, 0x51, 0xf2, 0xfb, 0x31, 0x0f, 0x10, 0x62, 0x2e, 0x1e, 0x01, 0x4c, 0x6d, - 0x1b, 0x92, 0x1b, 0x6d, 0x84, 0xf4, 0x49, 0x48, 0xac, 0xb6, 0x99, 0x86, 0xc3, 0x14, 0xbf, 0xda, - 0xce, 0xb7, 0x4d, 0xab, 0xba, 0x63, 0x24, 0x56, 0xdb, 0xfa, 0x71, 0x50, 0x73, 0xec, 0x6f, 0xaf, - 0x07, 0x16, 0x46, 0x28, 0x43, 0xce, 0xaa, 0x31, 0x0e, 0x4c, 0xd3, 0x27, 0x21, 0xb9, 0x8c, 0xcc, - 0x2d, 0xa6, 0x04, 0x50, 0x1e, 0x3c, 0x62, 0x90, 0x71, 0xf6, 0xc0, 0xc7, 0x20, 0xc5, 0x05, 0xeb, - 0x27, 0x30, 0x62, 0xcb, 0x65, 0x8f, 0x65, 0x08, 0xac, 0x0e, 0x5b, 0xb9, 0x08, 0x55, 0x3f, 0x09, - 0xbd, 0x46, 0x7d, 0x7b, 0xc7, 0x65, 0x0f, 0xef, 0x64, 0xa3, 0xe4, 0xcc, 0x35, 0xe8, 0xf7, 0x34, - 0x7a, 0x93, 0x45, 0x17, 0xe9, 0xd4, 0xf4, 0x89, 0xe0, 0x7a, 0xc2, 0xf7, 0x2d, 0xe9, 0x90, 0x3e, - 0x0d, 0xa9, 0x75, 0xb7, 0xed, 0x17, 0x7d, 0xde, 0x91, 0x7a, 0xa3, 0x99, 0x0f, 0x28, 0x90, 0x2a, - 0x22, 0xd4, 0x22, 0x06, 0xbf, 0x07, 0x92, 0x45, 0xfb, 0x29, 0x8b, 0x29, 0x38, 0xca, 0x2c, 0x8a, - 0xc9, 0xcc, 0xa6, 0x84, 0xac, 0xdf, 0x13, 0xb4, 0xfb, 0x98, 0x67, 0xf7, 0x00, 0x1f, 0xb1, 0x7d, - 0x46, 0xb0, 0x3d, 0x73, 0x20, 0x66, 0xea, 0xb0, 0xff, 0x79, 0x18, 0x08, 0x3c, 0x45, 0x9f, 0x61, - 0x6a, 0x24, 0x64, 0x60, 0xd0, 0x56, 0x98, 0x23, 0x83, 0x60, 0x48, 0x78, 0x30, 0x86, 0x06, 0x4c, - 0xdc, 0x05, 0x4a, 0xcc, 0x3c, 0x2b, 0x9a, 0x39, 0x9c, 0x95, 0x99, 0x7a, 0x9e, 0xda, 0x88, 0x98, - 0xfb, 0x04, 0x0d, 0xce, 0xee, 0x4e, 0xc4, 0x9f, 0x33, 0xbd, 0xa0, 0x96, 0xeb, 0x8d, 0xcc, 0x83, - 0x00, 0x34, 0xe5, 0x4b, 0xd6, 0x6e, 0x53, 0xca, 0xba, 0x61, 0x6e, 0xe0, 0x8d, 0x1d, 0xb4, 0x81, - 0x1c, 0xc2, 0x22, 0xf6, 0x53, 0xb8, 0xc0, 0x00, 0x4d, 0x31, 0x82, 0xbf, 0x2f, 0x12, 0x1f, 0xda, - 0x89, 0x61, 0xd6, 0x34, 0x65, 0xbd, 0x86, 0xdc, 0x9c, 0x65, 0xbb, 0x3b, 0xa8, 0x2d, 0x21, 0x16, - 0xf4, 0x33, 0x42, 0xc2, 0x0e, 0x2f, 0xdc, 0xe9, 0x21, 0xba, 0x82, 0xce, 0x64, 0xbe, 0x48, 0x14, - 0xc4, 0xad, 0x40, 0xc7, 0x04, 0xd5, 0x18, 0x13, 0xd4, 0xcf, 0x09, 0xfd, 0xdb, 0x3e, 0x6a, 0x4a, - 0xaf, 0x96, 0x17, 0x85, 0xf7, 0x9c, 0xfd, 0x95, 0x15, 0xdf, 0x31, 0xb9, 0x4d, 0xb9, 0xca, 0xf7, - 0x45, 0xaa, 0xdc, 0xa5, 0xbb, 0x3d, 0xa8, 0x4d, 0xd5, 0xb8, 0x36, 0xfd, 0x86, 0xd7, 0x71, 0xd0, - 0x1f, 0xb8, 0x20, 0x3f, 0x0d, 0xa3, 0xdf, 0x1f, 0xe9, 0xfb, 0xac, 0x52, 0xf0, 0x54, 0x5d, 0x8c, - 0xeb, 0xfe, 0x6c, 0x22, 0x9f, 0xf7, 0xd4, 0x3d, 0x7f, 0x80, 0x10, 0xc8, 0x26, 0x0a, 0x05, 0xaf, - 0x6c, 0xa7, 0x3e, 0xfc, 0xfc, 0x94, 0xf2, 0xc2, 0xf3, 0x53, 0x3d, 0x99, 0xcf, 0x2b, 0x30, 0xca, - 0x38, 0x03, 0x81, 0xfb, 0x80, 0xa4, 0xfc, 0x11, 0x5e, 0x33, 0xc2, 0x2c, 0xf0, 0xb6, 0x05, 0xef, - 0xb7, 0x14, 0x48, 0x77, 0xe8, 0xca, 0xed, 0x3d, 0x1f, 0x4b, 0xe5, 0xac, 0x52, 0xfa, 0xd9, 0xdb, - 0xfc, 0x1a, 0xf4, 0x6e, 0xd4, 0x9b, 0xa8, 0x8d, 0x57, 0x02, 0xfc, 0x81, 0xaa, 0xcc, 0x0f, 0x73, - 0xe8, 0x10, 0xa7, 0x51, 0xe5, 0x04, 0xda, 0x82, 0x9e, 0x86, 0x64, 0xd1, 0x74, 0x4d, 0xa2, 0xc1, - 0xa0, 0x57, 0x5f, 0x4d, 0xd7, 0xcc, 0x9c, 0x81, 0xc1, 0x95, 0x3d, 0x72, 0x29, 0xa7, 0x46, 0xee, - 0x8a, 0x88, 0xdd, 0x1f, 0xef, 0x57, 0x4f, 0xcf, 0xf6, 0xa6, 0x6a, 0xda, 0x0d, 0x25, 0x9b, 0x24, - 0xfa, 0x3c, 0x09, 0xc3, 0xab, 0x58, 0x6d, 0x82, 0x13, 0x60, 0xf4, 0xe9, 0xaa, 0x37, 0x79, 0xa9, - 0x29, 0x53, 0xfd, 0xa6, 0x6c, 0x1a, 0x94, 0x15, 0xb1, 0x75, 0x0a, 0xea, 0x61, 0x28, 0x2b, 0xb3, - 0xc9, 0xd4, 0xb0, 0x36, 0x3a, 0x9b, 0x4c, 0x81, 0x36, 0xc4, 0x9e, 0xfb, 0x0f, 0x2a, 0x68, 0xb4, - 0xd5, 0x29, 0xa2, 0xad, 0xba, 0x55, 0x77, 0x3b, 0xfb, 0x55, 0x4f, 0x63, 0xfd, 0x61, 0xe8, 0xc7, - 0x26, 0xbd, 0xcc, 0x7e, 0x21, 0x0e, 0x9b, 0xfe, 0x38, 0x6b, 0x51, 0x24, 0x11, 0x6c, 0x80, 0x84, - 0x8e, 0x8f, 0xd1, 0x2f, 0x83, 0x5a, 0x2e, 0xaf, 0xb0, 0xc5, 0x6d, 0x71, 0x5f, 0x28, 0xbb, 0x91, - 0xc3, 0xbe, 0xb1, 0x31, 0x67, 0xdb, 0xc0, 0x02, 0xf4, 0x45, 0x48, 0x94, 0x57, 0x58, 0xc3, 0x7b, - 0x22, 0x8e, 0x18, 0x23, 0x51, 0x5e, 0x99, 0xf8, 0x5b, 0x05, 0x86, 0x84, 0x51, 0x3d, 0x03, 0x83, - 0x74, 0x20, 0x30, 0xdd, 0x3e, 0x43, 0x18, 0xe3, 0x3a, 0x27, 0x6e, 0x53, 0xe7, 0x89, 0x1c, 0x8c, - 0x48, 0xe3, 0xfa, 0x1c, 0xe8, 0xc1, 0x21, 0xa6, 0x04, 0xfd, 0x75, 0xaa, 0x10, 0x4a, 0xe6, 0x2e, - 0x00, 0xdf, 0xae, 0xde, 0x8f, 0x2a, 0x95, 0x4b, 0xeb, 0x1b, 0xa5, 0xa2, 0xa6, 0x64, 0xbe, 0xaa, - 0xc0, 0x00, 0x6b, 0x5b, 0xab, 0x76, 0x0b, 0xe9, 0x79, 0x50, 0x72, 0x2c, 0x1e, 0xde, 0x98, 0xde, - 0x4a, 0x4e, 0x3f, 0x05, 0x4a, 0x3e, 0xbe, 0xab, 0x95, 0xbc, 0xbe, 0x00, 0x4a, 0x81, 0x39, 0x38, - 0x9e, 0x67, 0x94, 0x42, 0xe6, 0xc7, 0x2a, 0x8c, 0x05, 0xdb, 0x68, 0x5e, 0x4f, 0x8e, 0x8b, 0xef, - 0x4d, 0xd9, 0xfe, 0xd3, 0x0b, 0x67, 0x16, 0xe7, 0xf0, 0x3f, 0x5e, 0x48, 0x66, 0xc4, 0x57, 0xa8, - 0x2c, 0x78, 0x2c, 0xa7, 0xbb, 0xdd, 0x13, 0xc9, 0x26, 0x03, 0x12, 0x3a, 0xee, 0x89, 0x08, 0xd4, - 0x8e, 0x7b, 0x22, 0x02, 0xb5, 0xe3, 0x9e, 0x88, 0x40, 0xed, 0x38, 0x0b, 0x10, 0xa8, 0x1d, 0xf7, - 0x44, 0x04, 0x6a, 0xc7, 0x3d, 0x11, 0x81, 0xda, 0x79, 0x4f, 0x84, 0x91, 0xbb, 0xde, 0x13, 0x11, - 0xe9, 0x9d, 0xf7, 0x44, 0x44, 0x7a, 0xe7, 0x3d, 0x91, 0x6c, 0xd2, 0x6d, 0xef, 0xa2, 0xee, 0xa7, - 0x0e, 0x22, 0x7e, 0xbf, 0x97, 0x40, 0xbf, 0x02, 0xaf, 0xc2, 0x08, 0xdd, 0x90, 0x28, 0xd8, 0x96, - 0x6b, 0xd6, 0x2d, 0xd4, 0xd6, 0xdf, 0x09, 0x83, 0x74, 0x88, 0xbe, 0xe6, 0x84, 0xbd, 0x06, 0x52, - 0x3a, 0xab, 0xb7, 0x02, 0x77, 0xe6, 0xa7, 0x49, 0x18, 0xa7, 0x03, 0x65, 0xb3, 0x89, 0x84, 0x5b, - 0x46, 0x27, 0xa5, 0x33, 0xa5, 0x61, 0x0c, 0xbf, 0xf5, 0xf2, 0x14, 0x1d, 0xcd, 0x79, 0xd1, 0x74, - 0x52, 0x3a, 0x5d, 0x12, 0xf9, 0xfc, 0x05, 0xe8, 0xa4, 0x74, 0xf3, 0x48, 0xe4, 0xf3, 0xd6, 0x1b, - 0x8f, 0x8f, 0xdf, 0x41, 0x12, 0xf9, 0x8a, 0x5e, 0x94, 0x9d, 0x94, 0x6e, 0x23, 0x89, 0x7c, 0x25, - 0x2f, 0xde, 0x4e, 0x4a, 0x67, 0x4f, 0x22, 0xdf, 0x65, 0x2f, 0xf2, 0x4e, 0x4a, 0xa7, 0x50, 0x22, - 0xdf, 0x15, 0x2f, 0x06, 0x4f, 0x4a, 0x77, 0x95, 0x44, 0xbe, 0x47, 0xbc, 0x68, 0x3c, 0x29, 0xdd, - 0x5a, 0x12, 0xf9, 0x96, 0xbc, 0xb8, 0x9c, 0x91, 0xef, 0x2f, 0x89, 0x8c, 0x57, 0xfd, 0x08, 0x9d, - 0x91, 0x6f, 0x32, 0x89, 0x9c, 0xef, 0xf2, 0x63, 0x75, 0x46, 0xbe, 0xd3, 0x24, 0x72, 0x2e, 0xfb, - 0x51, 0x3b, 0x23, 0x9f, 0x95, 0x89, 0x9c, 0x2b, 0x7e, 0xfc, 0xce, 0xc8, 0xa7, 0x66, 0x22, 0x67, - 0xd9, 0x8f, 0xe4, 0x19, 0xf9, 0xfc, 0x4c, 0xe4, 0x5c, 0xf5, 0x37, 0xd1, 0xbf, 0x29, 0x85, 0x5f, - 0xe0, 0x16, 0x54, 0x46, 0x0a, 0x3f, 0x08, 0x09, 0x3d, 0xa9, 0x90, 0x05, 0x78, 0xfc, 0xb0, 0xcb, - 0x48, 0x61, 0x07, 0x21, 0x21, 0x97, 0x91, 0x42, 0x0e, 0x42, 0xc2, 0x2d, 0x23, 0x85, 0x1b, 0x84, - 0x84, 0x5a, 0x46, 0x0a, 0x35, 0x08, 0x09, 0xb3, 0x8c, 0x14, 0x66, 0x10, 0x12, 0x62, 0x19, 0x29, - 0xc4, 0x20, 0x24, 0xbc, 0x32, 0x52, 0x78, 0x41, 0x48, 0x68, 0x9d, 0x90, 0x43, 0x0b, 0xc2, 0xc2, - 0xea, 0x84, 0x1c, 0x56, 0x10, 0x16, 0x52, 0x77, 0xcb, 0x21, 0xd5, 0x7f, 0xeb, 0xe5, 0xa9, 0x5e, - 0x3c, 0x14, 0x88, 0xa6, 0x13, 0x72, 0x34, 0x41, 0x58, 0x24, 0x9d, 0x90, 0x23, 0x09, 0xc2, 0xa2, - 0xe8, 0x84, 0x1c, 0x45, 0x10, 0x16, 0x41, 0x2f, 0xca, 0x11, 0xe4, 0xdf, 0xf1, 0xc9, 0x48, 0x47, - 0x8a, 0x51, 0x11, 0xa4, 0xc6, 0x88, 0x20, 0x35, 0x46, 0x04, 0xa9, 0x31, 0x22, 0x48, 0x8d, 0x11, - 0x41, 0x6a, 0x8c, 0x08, 0x52, 0x63, 0x44, 0x90, 0x1a, 0x23, 0x82, 0xd4, 0x38, 0x11, 0xa4, 0xc6, - 0x8a, 0x20, 0xb5, 0x5b, 0x04, 0x9d, 0x90, 0x6f, 0x3c, 0x40, 0x58, 0x41, 0x3a, 0x21, 0x1f, 0x7d, - 0x46, 0x87, 0x90, 0x1a, 0x2b, 0x84, 0xd4, 0x6e, 0x21, 0xf4, 0x4d, 0x15, 0xc6, 0x84, 0x10, 0x62, - 0xe7, 0x43, 0x6f, 0x56, 0x05, 0x3a, 0x17, 0xe3, 0x82, 0x45, 0x58, 0x4c, 0x9d, 0x8b, 0x71, 0x48, - 0xbd, 0x5f, 0x9c, 0x75, 0x56, 0xa1, 0x52, 0x8c, 0x2a, 0x74, 0xd9, 0x8b, 0xa1, 0x73, 0x31, 0x2e, - 0x5e, 0x74, 0xc6, 0xde, 0x85, 0xfd, 0x8a, 0xc0, 0x23, 0xb1, 0x8a, 0xc0, 0x52, 0xac, 0x22, 0x70, - 0xd5, 0xf7, 0xe0, 0x87, 0x12, 0x70, 0xd8, 0xf7, 0x20, 0xfd, 0x44, 0x7e, 0xc1, 0x29, 0x13, 0x38, - 0xa2, 0xd2, 0xf9, 0xb1, 0x4d, 0xc0, 0x8d, 0x89, 0xa5, 0x9a, 0xbe, 0x26, 0x1e, 0x56, 0x65, 0x0f, - 0x7a, 0x80, 0x13, 0xf0, 0x38, 0xdb, 0x0c, 0x3d, 0x01, 0xea, 0x52, 0xcd, 0x21, 0xd5, 0x22, 0xec, - 0xb1, 0x05, 0x03, 0x93, 0x75, 0x03, 0xfa, 0x08, 0xbb, 0x43, 0xdc, 0x7b, 0x3b, 0x0f, 0x2e, 0x1a, - 0x4c, 0x52, 0xe6, 0x45, 0x05, 0xa6, 0x85, 0x50, 0x7e, 0x73, 0x8e, 0x0c, 0x2e, 0xc5, 0x3a, 0x32, - 0x10, 0x12, 0xc4, 0x3f, 0x3e, 0xb8, 0xb7, 0xf3, 0xa4, 0x3a, 0x98, 0x25, 0xf2, 0x51, 0xc2, 0x2f, - 0xc0, 0xb0, 0x3f, 0x03, 0xf2, 0xce, 0x76, 0x36, 0x7a, 0x37, 0x33, 0x2c, 0x35, 0xcf, 0x4a, 0xbb, - 0x68, 0xfb, 0xc2, 0xbc, 0x6c, 0xcd, 0x64, 0x61, 0xa4, 0x2c, 0xfe, 0x79, 0x50, 0xd4, 0x66, 0x44, - 0x0a, 0xb7, 0xe6, 0x37, 0x3e, 0x33, 0xd5, 0x93, 0xb9, 0x1f, 0x06, 0x83, 0x7f, 0x01, 0x24, 0x01, - 0xfb, 0x39, 0x30, 0x9b, 0x7c, 0x09, 0x73, 0xff, 0x9e, 0x02, 0x47, 0x82, 0xec, 0x8f, 0xd6, 0xdd, - 0x9d, 0x25, 0x0b, 0xf7, 0xf4, 0x0f, 0x42, 0x0a, 0x31, 0xc7, 0xb1, 0x1f, 0x63, 0x61, 0xef, 0x91, - 0xa1, 0xec, 0x73, 0xe4, 0x5f, 0xc3, 0x83, 0x48, 0xbb, 0x20, 0xfc, 0xb1, 0x0b, 0x13, 0xf7, 0x40, - 0x2f, 0x95, 0x2f, 0xea, 0x35, 0x24, 0xe9, 0xf5, 0xd9, 0x10, 0xbd, 0x48, 0x1c, 0xe9, 0x57, 0x05, - 0xbd, 0x02, 0xaf, 0xab, 0xa1, 0xec, 0x73, 0x3c, 0xf8, 0xf2, 0x29, 0xdc, 0xff, 0x91, 0x88, 0x8a, - 0x56, 0x72, 0x06, 0x52, 0x25, 0x99, 0x27, 0x5c, 0xcf, 0x22, 0x24, 0xcb, 0x76, 0x8d, 0xfc, 0x4c, - 0x0c, 0xf9, 0x5d, 0x64, 0x66, 0x64, 0xf6, 0x23, 0xc9, 0x27, 0x21, 0x55, 0xd8, 0xa9, 0x37, 0x6a, - 0x6d, 0x64, 0xb1, 0x33, 0x7b, 0xb6, 0x85, 0x8e, 0x31, 0x86, 0x47, 0xcb, 0x14, 0x60, 0xb4, 0x6c, - 0x5b, 0xf9, 0x3d, 0x37, 0x58, 0x37, 0xe6, 0xa4, 0x14, 0x61, 0x67, 0x3e, 0xe4, 0xcf, 0x41, 0x30, - 0x43, 0xbe, 0xf7, 0xbb, 0x2f, 0x4f, 0x29, 0x1b, 0xde, 0xfe, 0xf9, 0x0a, 0x1c, 0x65, 0xe9, 0xd3, - 0x21, 0x6a, 0x21, 0x4a, 0x54, 0x3f, 0x3b, 0xa7, 0x0e, 0x88, 0x5b, 0xc2, 0xe2, 0xac, 0x50, 0x71, - 0x6f, 0x4c, 0x33, 0xdc, 0x14, 0xed, 0xab, 0x99, 0x7a, 0x20, 0xcd, 0x42, 0xc5, 0xcd, 0x45, 0x89, - 0x93, 0x34, 0xbb, 0x1b, 0xfa, 0x3d, 0x5a, 0x20, 0x1a, 0x82, 0x99, 0xb2, 0x30, 0x9b, 0x81, 0x81, - 0x40, 0xc2, 0xea, 0xbd, 0xa0, 0xe4, 0xb4, 0x1e, 0xfc, 0x5f, 0x5e, 0x53, 0xf0, 0x7f, 0x05, 0x2d, - 0x31, 0x7b, 0x0f, 0x8c, 0x48, 0xfb, 0x97, 0x98, 0x52, 0xd4, 0x00, 0xff, 0x57, 0xd2, 0x06, 0x26, - 0x92, 0x1f, 0xfe, 0xa3, 0xc9, 0x9e, 0xd9, 0x4b, 0xa0, 0x77, 0xee, 0x74, 0xea, 0x7d, 0x90, 0xc8, - 0x61, 0x91, 0x47, 0x21, 0x91, 0xcf, 0x6b, 0xca, 0xc4, 0xc8, 0xaf, 0x7e, 0x6a, 0x7a, 0x20, 0x4f, - 0xfe, 0xbc, 0xf9, 0x1a, 0x72, 0xf3, 0x79, 0x06, 0x7e, 0x08, 0x8e, 0x84, 0xee, 0x94, 0x62, 0x7c, - 0xa1, 0x40, 0xf1, 0xc5, 0x62, 0x07, 0xbe, 0x58, 0x24, 0x78, 0x25, 0xcb, 0x4f, 0x9c, 0x73, 0x7a, - 0xc8, 0x2e, 0x63, 0xba, 0x16, 0x38, 0xe1, 0xce, 0x65, 0x1f, 0x62, 0xbc, 0xf9, 0x50, 0x5e, 0x14, - 0x71, 0x62, 0x9d, 0xcf, 0x16, 0x18, 0xbe, 0x10, 0x8a, 0xdf, 0x92, 0x8e, 0x55, 0xc5, 0x15, 0x82, - 0x09, 0x29, 0x78, 0x0a, 0x17, 0x43, 0x85, 0xec, 0x04, 0x2e, 0xbb, 0x17, 0x3d, 0x85, 0x4b, 0xa1, - 0xbc, 0xf5, 0x88, 0x4b, 0x5f, 0xa5, 0xec, 0x29, 0xb6, 0xc8, 0xe7, 0x4e, 0xeb, 0x47, 0x78, 0x8e, - 0x0a, 0x15, 0x98, 0x19, 0x88, 0x73, 0x65, 0x0b, 0x0c, 0x90, 0xef, 0x0a, 0xe8, 0x6e, 0x25, 0x8e, - 0xcc, 0x3e, 0xc2, 0x84, 0x14, 0xba, 0x0a, 0x89, 0x30, 0x15, 0x87, 0xe7, 0x37, 0x6e, 0xdc, 0x9c, - 0xec, 0x79, 0xe9, 0xe6, 0x64, 0xcf, 0x3f, 0xdd, 0x9c, 0xec, 0xf9, 0xde, 0xcd, 0x49, 0xe5, 0x07, - 0x37, 0x27, 0x95, 0x1f, 0xdd, 0x9c, 0x54, 0x7e, 0x72, 0x73, 0x52, 0x79, 0xf6, 0xd6, 0xa4, 0xf2, - 0xc2, 0xad, 0x49, 0xe5, 0x8b, 0xb7, 0x26, 0x95, 0xaf, 0xdd, 0x9a, 0x54, 0x5e, 0xbc, 0x35, 0xa9, - 0xdc, 0xb8, 0x35, 0xd9, 0xf3, 0xd2, 0xad, 0x49, 0xe5, 0x7b, 0xb7, 0x26, 0x95, 0x1f, 0xdc, 0x9a, - 0xec, 0xf9, 0xd1, 0xad, 0x49, 0xe5, 0x27, 0xb7, 0x26, 0x7b, 0x9e, 0x7d, 0x65, 0xb2, 0xe7, 0xf9, - 0x57, 0x26, 0x7b, 0x5e, 0x78, 0x65, 0x52, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x6f, - 0x45, 0x22, 0x6b, 0x67, 0x00, 0x00, + // 6729 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x7b, 0x70, 0x24, 0x57, + 0x79, 0xaf, 0x7a, 0x7a, 0xa4, 0x1d, 0x7d, 0x7a, 0xb5, 0x5a, 0xbb, 0xda, 0xb1, 0xbc, 0x96, 0xb4, + 0xe3, 0xf5, 0x5a, 0x96, 0x6d, 0xad, 0x56, 0xab, 0x7d, 0xcd, 0x62, 0xfb, 0xce, 0x6b, 0xd7, 0x5a, + 0xa4, 0x91, 0x68, 0x49, 0xd8, 0x0b, 0xf7, 0xd6, 0x54, 0xef, 0xcc, 0x91, 0x34, 0xf6, 0x4c, 0xf7, + 0x30, 0xdd, 0xb2, 0x2d, 0xd7, 0xad, 0x5b, 0xbe, 0x70, 0x2f, 0x81, 0xa4, 0xf2, 0x24, 0xa9, 0x00, + 0x01, 0x63, 0xa0, 0x00, 0x43, 0x5e, 0x10, 0x08, 0x01, 0x92, 0x0a, 0xfe, 0x87, 0x64, 0xf3, 0x0f, + 0x65, 0xf2, 0x57, 0x8a, 0x4a, 0xb9, 0xf0, 0x9a, 0xaa, 0x90, 0xc4, 0x09, 0x84, 0xb8, 0x2a, 0x54, + 0x99, 0x3f, 0x52, 0xe7, 0xd5, 0xdd, 0xe7, 0x4c, 0x8f, 0xba, 0xe5, 0xb5, 0x0d, 0xff, 0xec, 0xce, + 0x9c, 0xef, 0xfb, 0x7d, 0xfd, 0x9d, 0xef, 0x75, 0xbe, 0x3e, 0xe7, 0x68, 0xe0, 0xc7, 0x17, 0x61, + 0x7a, 0xdb, 0xb6, 0xb7, 0x1b, 0xe8, 0x54, 0xab, 0x6d, 0xbb, 0xf6, 0xf5, 0xdd, 0xad, 0x53, 0x35, + 0xe4, 0x54, 0xdb, 0xf5, 0x96, 0x6b, 0xb7, 0xe7, 0xc8, 0x98, 0x3e, 0x42, 0x39, 0xe6, 0x38, 0x47, + 0x66, 0x05, 0x46, 0x2f, 0xd7, 0x1b, 0xa8, 0xe8, 0x31, 0xae, 0x23, 0x57, 0xbf, 0x00, 0xc9, 0xad, + 0x7a, 0x03, 0xa5, 0x95, 0x69, 0x75, 0x66, 0x60, 0xe1, 0xc4, 0x9c, 0x04, 0x9a, 0x13, 0x11, 0x6b, + 0x78, 0xd8, 0x20, 0x88, 0xcc, 0x0f, 0x93, 0x30, 0x16, 0x42, 0xd5, 0x75, 0x48, 0x5a, 0x66, 0x13, + 0x4b, 0x54, 0x66, 0xfa, 0x0d, 0xf2, 0x59, 0x4f, 0xc3, 0xa1, 0x96, 0x59, 0x7d, 0xdc, 0xdc, 0x46, + 0xe9, 0x04, 0x19, 0xe6, 0x5f, 0xf5, 0x49, 0x80, 0x1a, 0x6a, 0x21, 0xab, 0x86, 0xac, 0xea, 0x5e, + 0x5a, 0x9d, 0x56, 0x67, 0xfa, 0x8d, 0xc0, 0x88, 0x7e, 0x2f, 0x8c, 0xb6, 0x76, 0xaf, 0x37, 0xea, + 0xd5, 0x4a, 0x80, 0x0d, 0xa6, 0xd5, 0x99, 0x5e, 0x43, 0xa3, 0x84, 0xa2, 0xcf, 0x7c, 0x37, 0x8c, + 0x3c, 0x89, 0xcc, 0xc7, 0x83, 0xac, 0x03, 0x84, 0x75, 0x18, 0x0f, 0x07, 0x18, 0x0b, 0x30, 0xd8, + 0x44, 0x8e, 0x63, 0x6e, 0xa3, 0x8a, 0xbb, 0xd7, 0x42, 0xe9, 0x24, 0x99, 0xfd, 0x74, 0xc7, 0xec, + 0xe5, 0x99, 0x0f, 0x30, 0xd4, 0xc6, 0x5e, 0x0b, 0xe9, 0x39, 0xe8, 0x47, 0xd6, 0x6e, 0x93, 0x4a, + 0xe8, 0xed, 0x62, 0xbf, 0x92, 0xb5, 0xdb, 0x94, 0xa5, 0xa4, 0x30, 0x8c, 0x89, 0x38, 0xe4, 0xa0, + 0xf6, 0x13, 0xf5, 0x2a, 0x4a, 0xf7, 0x11, 0x01, 0x77, 0x77, 0x08, 0x58, 0xa7, 0x74, 0x59, 0x06, + 0xc7, 0xe9, 0x05, 0xe8, 0x47, 0x4f, 0xb9, 0xc8, 0x72, 0xea, 0xb6, 0x95, 0x3e, 0x44, 0x84, 0xdc, + 0x15, 0xe2, 0x45, 0xd4, 0xa8, 0xc9, 0x22, 0x7c, 0x9c, 0x7e, 0x0e, 0x0e, 0xd9, 0x2d, 0xb7, 0x6e, + 0x5b, 0x4e, 0x3a, 0x35, 0xad, 0xcc, 0x0c, 0x2c, 0x1c, 0x0b, 0x0d, 0x84, 0x55, 0xca, 0x63, 0x70, + 0x66, 0x7d, 0x09, 0x34, 0xc7, 0xde, 0x6d, 0x57, 0x51, 0xa5, 0x6a, 0xd7, 0x50, 0xa5, 0x6e, 0x6d, + 0xd9, 0xe9, 0x7e, 0x22, 0x60, 0xaa, 0x73, 0x22, 0x84, 0xb1, 0x60, 0xd7, 0xd0, 0x92, 0xb5, 0x65, + 0x1b, 0xc3, 0x8e, 0xf0, 0x5d, 0x1f, 0x87, 0x3e, 0x67, 0xcf, 0x72, 0xcd, 0xa7, 0xd2, 0x83, 0x24, + 0x42, 0xd8, 0xb7, 0xcc, 0x37, 0xfb, 0x60, 0x24, 0x4e, 0x88, 0x5d, 0x82, 0xde, 0x2d, 0x3c, 0xcb, + 0x74, 0xe2, 0x20, 0x36, 0xa0, 0x18, 0xd1, 0x88, 0x7d, 0x6f, 0xd0, 0x88, 0x39, 0x18, 0xb0, 0x90, + 0xe3, 0xa2, 0x1a, 0x8d, 0x08, 0x35, 0x66, 0x4c, 0x01, 0x05, 0x75, 0x86, 0x54, 0xf2, 0x0d, 0x85, + 0xd4, 0xa3, 0x30, 0xe2, 0xa9, 0x54, 0x69, 0x9b, 0xd6, 0x36, 0x8f, 0xcd, 0x53, 0x51, 0x9a, 0xcc, + 0x95, 0x38, 0xce, 0xc0, 0x30, 0x63, 0x18, 0x09, 0xdf, 0xf5, 0x22, 0x80, 0x6d, 0x21, 0x7b, 0xab, + 0x52, 0x43, 0xd5, 0x46, 0x3a, 0xd5, 0xc5, 0x4a, 0xab, 0x98, 0xa5, 0xc3, 0x4a, 0x36, 0x1d, 0xad, + 0x36, 0xf4, 0x8b, 0x7e, 0xa8, 0x1d, 0xea, 0x12, 0x29, 0x2b, 0x34, 0xc9, 0x3a, 0xa2, 0x6d, 0x13, + 0x86, 0xdb, 0x08, 0xc7, 0x3d, 0xaa, 0xb1, 0x99, 0xf5, 0x13, 0x25, 0xe6, 0x22, 0x67, 0x66, 0x30, + 0x18, 0x9d, 0xd8, 0x50, 0x3b, 0xf8, 0x55, 0xbf, 0x13, 0xbc, 0x81, 0x0a, 0x09, 0x2b, 0x20, 0x55, + 0x68, 0x90, 0x0f, 0x96, 0xcd, 0x26, 0x9a, 0x78, 0x1a, 0x86, 0x45, 0xf3, 0xe8, 0x87, 0xa1, 0xd7, + 0x71, 0xcd, 0xb6, 0x4b, 0xa2, 0xb0, 0xd7, 0xa0, 0x5f, 0x74, 0x0d, 0x54, 0x64, 0xd5, 0x48, 0x95, + 0xeb, 0x35, 0xf0, 0x47, 0xfd, 0x7f, 0xf8, 0x13, 0x56, 0xc9, 0x84, 0x4f, 0x76, 0x7a, 0x54, 0x90, + 0x2c, 0xcf, 0x7b, 0xe2, 0x3c, 0x0c, 0x09, 0x13, 0x88, 0xfb, 0xe8, 0xcc, 0xff, 0x86, 0x23, 0xa1, + 0xa2, 0xf5, 0x47, 0xe1, 0xf0, 0xae, 0x55, 0xb7, 0x5c, 0xd4, 0x6e, 0xb5, 0x11, 0x8e, 0x58, 0xfa, + 0xa8, 0xf4, 0x3f, 0x1d, 0xea, 0x12, 0x73, 0x9b, 0x41, 0x6e, 0x2a, 0xc5, 0x18, 0xdb, 0xed, 0x1c, + 0x9c, 0xed, 0x4f, 0xfd, 0xe8, 0x90, 0xf6, 0xcc, 0x33, 0xcf, 0x3c, 0x93, 0xc8, 0x7c, 0xb4, 0x0f, + 0x0e, 0x87, 0xe5, 0x4c, 0x68, 0xfa, 0x8e, 0x43, 0x9f, 0xb5, 0xdb, 0xbc, 0x8e, 0xda, 0xc4, 0x48, + 0xbd, 0x06, 0xfb, 0xa6, 0xe7, 0xa0, 0xb7, 0x61, 0x5e, 0x47, 0x8d, 0x74, 0x72, 0x5a, 0x99, 0x19, + 0x5e, 0xb8, 0x37, 0x56, 0x56, 0xce, 0x2d, 0x63, 0x88, 0x41, 0x91, 0xfa, 0x83, 0x90, 0x64, 0x25, + 0x1a, 0x4b, 0x98, 0x8d, 0x27, 0x01, 0xe7, 0x92, 0x41, 0x70, 0xfa, 0xed, 0xd0, 0x8f, 0xff, 0xa7, + 0xb1, 0xd1, 0x47, 0x74, 0x4e, 0xe1, 0x01, 0x1c, 0x17, 0xfa, 0x04, 0xa4, 0x48, 0x9a, 0xd4, 0x10, + 0x5f, 0xda, 0xbc, 0xef, 0x38, 0xb0, 0x6a, 0x68, 0xcb, 0xdc, 0x6d, 0xb8, 0x95, 0x27, 0xcc, 0xc6, + 0x2e, 0x22, 0x01, 0xdf, 0x6f, 0x0c, 0xb2, 0xc1, 0x77, 0xe3, 0x31, 0x7d, 0x0a, 0x06, 0x68, 0x56, + 0xd5, 0xad, 0x1a, 0x7a, 0x8a, 0x54, 0xcf, 0x5e, 0x83, 0x26, 0xda, 0x12, 0x1e, 0xc1, 0x8f, 0x7f, + 0xcc, 0xb1, 0x2d, 0x1e, 0x9a, 0xe4, 0x11, 0x78, 0x80, 0x3c, 0xfe, 0xbc, 0x5c, 0xb8, 0xef, 0x08, + 0x9f, 0x9e, 0x1c, 0x53, 0x99, 0xaf, 0x27, 0x20, 0x49, 0xea, 0xc5, 0x08, 0x0c, 0x6c, 0x5c, 0x5b, + 0x2b, 0x55, 0x8a, 0xab, 0x9b, 0xf9, 0xe5, 0x92, 0xa6, 0xe8, 0xc3, 0x00, 0x64, 0xe0, 0xf2, 0xf2, + 0x6a, 0x6e, 0x43, 0x4b, 0x78, 0xdf, 0x97, 0xca, 0x1b, 0xe7, 0x16, 0x35, 0xd5, 0x03, 0x6c, 0xd2, + 0x81, 0x64, 0x90, 0xe1, 0xcc, 0x82, 0xd6, 0xab, 0x6b, 0x30, 0x48, 0x05, 0x2c, 0x3d, 0x5a, 0x2a, + 0x9e, 0x5b, 0xd4, 0xfa, 0xc4, 0x91, 0x33, 0x0b, 0xda, 0x21, 0x7d, 0x08, 0xfa, 0xc9, 0x48, 0x7e, + 0x75, 0x75, 0x59, 0x4b, 0x79, 0x32, 0xd7, 0x37, 0x8c, 0xa5, 0xf2, 0x15, 0xad, 0xdf, 0x93, 0x79, + 0xc5, 0x58, 0xdd, 0x5c, 0xd3, 0xc0, 0x93, 0xb0, 0x52, 0x5a, 0x5f, 0xcf, 0x5d, 0x29, 0x69, 0x03, + 0x1e, 0x47, 0xfe, 0xda, 0x46, 0x69, 0x5d, 0x1b, 0x14, 0xd4, 0x3a, 0xb3, 0xa0, 0x0d, 0x79, 0x8f, + 0x28, 0x95, 0x37, 0x57, 0xb4, 0x61, 0x7d, 0x14, 0x86, 0xe8, 0x23, 0xb8, 0x12, 0x23, 0xd2, 0xd0, + 0xb9, 0x45, 0x4d, 0xf3, 0x15, 0xa1, 0x52, 0x46, 0x85, 0x81, 0x73, 0x8b, 0x9a, 0x9e, 0x29, 0x40, + 0x2f, 0x89, 0x2e, 0x5d, 0x87, 0xe1, 0xe5, 0x5c, 0xbe, 0xb4, 0x5c, 0x59, 0x5d, 0xdb, 0x58, 0x5a, + 0x2d, 0xe7, 0x96, 0x35, 0xc5, 0x1f, 0x33, 0x4a, 0xef, 0xda, 0x5c, 0x32, 0x4a, 0x45, 0x2d, 0x11, + 0x1c, 0x5b, 0x2b, 0xe5, 0x36, 0x4a, 0x45, 0x4d, 0xcd, 0x54, 0xe1, 0x70, 0x58, 0x9d, 0x0c, 0xcd, + 0x8c, 0x80, 0x8b, 0x13, 0x5d, 0x5c, 0x4c, 0x64, 0x75, 0xb8, 0xf8, 0x95, 0x04, 0x8c, 0x85, 0xac, + 0x15, 0xa1, 0x0f, 0x79, 0x08, 0x7a, 0x69, 0x88, 0xd2, 0xd5, 0xf3, 0x9e, 0xd0, 0x45, 0x87, 0x04, + 0x6c, 0xc7, 0x0a, 0x4a, 0x70, 0xc1, 0x0e, 0x42, 0xed, 0xd2, 0x41, 0x60, 0x11, 0x1d, 0x35, 0xfd, + 0x7f, 0x75, 0xd4, 0x74, 0xba, 0xec, 0x9d, 0x8b, 0xb3, 0xec, 0x91, 0xb1, 0x83, 0xd5, 0xf6, 0xde, + 0x90, 0xda, 0x7e, 0x09, 0x46, 0x3b, 0x04, 0xc5, 0xae, 0xb1, 0x1f, 0x50, 0x20, 0xdd, 0xcd, 0x38, + 0x11, 0x95, 0x2e, 0x21, 0x54, 0xba, 0x4b, 0xb2, 0x05, 0x8f, 0x77, 0x77, 0x42, 0x87, 0xaf, 0xbf, + 0xa0, 0xc0, 0x78, 0x78, 0xa7, 0x18, 0xaa, 0xc3, 0x83, 0xd0, 0xd7, 0x44, 0xee, 0x8e, 0xcd, 0xbb, + 0xa5, 0x93, 0x21, 0x6b, 0x30, 0x26, 0xcb, 0xce, 0x66, 0xa8, 0xe0, 0x22, 0xae, 0x76, 0x6b, 0xf7, + 0xa8, 0x36, 0x1d, 0x9a, 0x7e, 0x38, 0x01, 0x47, 0x42, 0x85, 0x87, 0x2a, 0x7a, 0x07, 0x40, 0xdd, + 0x6a, 0xed, 0xba, 0xb4, 0x23, 0xa2, 0x05, 0xb6, 0x9f, 0x8c, 0x90, 0xe2, 0x85, 0x8b, 0xe7, 0xae, + 0xeb, 0xd1, 0x55, 0x42, 0x07, 0x3a, 0x44, 0x18, 0x2e, 0xf8, 0x8a, 0x26, 0x89, 0xa2, 0x93, 0x5d, + 0x66, 0xda, 0x11, 0x98, 0xf3, 0xa0, 0x55, 0x1b, 0x75, 0x64, 0xb9, 0x15, 0xc7, 0x6d, 0x23, 0xb3, + 0x59, 0xb7, 0xb6, 0xc9, 0x0a, 0x92, 0xca, 0xf6, 0x6e, 0x99, 0x0d, 0x07, 0x19, 0x23, 0x94, 0xbc, + 0xce, 0xa9, 0x18, 0x41, 0x02, 0xa8, 0x1d, 0x40, 0xf4, 0x09, 0x08, 0x4a, 0xf6, 0x10, 0x99, 0xaf, + 0xa6, 0x60, 0x20, 0xd0, 0x57, 0xeb, 0xc7, 0x61, 0xf0, 0x31, 0xf3, 0x09, 0xb3, 0xc2, 0xdf, 0x95, + 0xa8, 0x25, 0x06, 0xf0, 0xd8, 0x1a, 0x7b, 0x5f, 0x9a, 0x87, 0xc3, 0x84, 0xc5, 0xde, 0x75, 0x51, + 0xbb, 0x52, 0x6d, 0x98, 0x8e, 0x43, 0x8c, 0x96, 0x22, 0xac, 0x3a, 0xa6, 0xad, 0x62, 0x52, 0x81, + 0x53, 0xf4, 0xb3, 0x30, 0x46, 0x10, 0xcd, 0xdd, 0x86, 0x5b, 0x6f, 0x35, 0x50, 0x05, 0xbf, 0xbd, + 0x39, 0x64, 0x25, 0xf1, 0x34, 0x1b, 0xc5, 0x1c, 0x2b, 0x8c, 0x01, 0x6b, 0xe4, 0xe8, 0x45, 0xb8, + 0x83, 0xc0, 0xb6, 0x91, 0x85, 0xda, 0xa6, 0x8b, 0x2a, 0xe8, 0x7d, 0xbb, 0x66, 0xc3, 0xa9, 0x98, + 0x56, 0xad, 0xb2, 0x63, 0x3a, 0x3b, 0xe9, 0xc3, 0x58, 0x40, 0x3e, 0x91, 0x56, 0x8c, 0xdb, 0x30, + 0xe3, 0x15, 0xc6, 0x57, 0x22, 0x6c, 0x39, 0xab, 0xf6, 0xb0, 0xe9, 0xec, 0xe8, 0x59, 0x18, 0x27, + 0x52, 0x1c, 0xb7, 0x5d, 0xb7, 0xb6, 0x2b, 0xd5, 0x1d, 0x54, 0x7d, 0xbc, 0xb2, 0xeb, 0x6e, 0x5d, + 0x48, 0xdf, 0x1e, 0x7c, 0x3e, 0xd1, 0x70, 0x9d, 0xf0, 0x14, 0x30, 0xcb, 0xa6, 0xbb, 0x75, 0x41, + 0x5f, 0x87, 0x41, 0xec, 0x8c, 0x66, 0xfd, 0x69, 0x54, 0xd9, 0xb2, 0xdb, 0x64, 0x69, 0x1c, 0x0e, + 0x29, 0x4d, 0x01, 0x0b, 0xce, 0xad, 0x32, 0xc0, 0x8a, 0x5d, 0x43, 0xd9, 0xde, 0xf5, 0xb5, 0x52, + 0xa9, 0x68, 0x0c, 0x70, 0x29, 0x97, 0xed, 0x36, 0x0e, 0xa8, 0x6d, 0xdb, 0x33, 0xf0, 0x00, 0x0d, + 0xa8, 0x6d, 0x9b, 0x9b, 0xf7, 0x2c, 0x8c, 0x55, 0xab, 0x74, 0xce, 0xf5, 0x6a, 0x85, 0xbd, 0x63, + 0x39, 0x69, 0x4d, 0x30, 0x56, 0xb5, 0x7a, 0x85, 0x32, 0xb0, 0x18, 0x77, 0xf4, 0x8b, 0x70, 0xc4, + 0x37, 0x56, 0x10, 0x38, 0xda, 0x31, 0x4b, 0x19, 0x7a, 0x16, 0xc6, 0x5a, 0x7b, 0x9d, 0x40, 0x5d, + 0x78, 0x62, 0x6b, 0x4f, 0x86, 0x9d, 0x87, 0xc3, 0xad, 0x9d, 0x56, 0x27, 0x6e, 0x36, 0x88, 0xd3, + 0x5b, 0x3b, 0x2d, 0x19, 0x78, 0x17, 0x79, 0xe1, 0x6e, 0xa3, 0xaa, 0xe9, 0xa2, 0x5a, 0xfa, 0x68, + 0x90, 0x3d, 0x40, 0xd0, 0x4f, 0x81, 0x56, 0xad, 0x56, 0x90, 0x65, 0x5e, 0x6f, 0xa0, 0x8a, 0xd9, + 0x46, 0x96, 0xe9, 0xa4, 0xa7, 0x82, 0xcc, 0xc3, 0xd5, 0x6a, 0x89, 0x50, 0x73, 0x84, 0xa8, 0xcf, + 0xc2, 0xa8, 0x7d, 0xfd, 0xb1, 0x2a, 0x0d, 0xc9, 0x4a, 0xab, 0x8d, 0xb6, 0xea, 0x4f, 0xa5, 0x4f, + 0x10, 0xfb, 0x8e, 0x60, 0x02, 0x09, 0xc8, 0x35, 0x32, 0xac, 0xdf, 0x03, 0x5a, 0xd5, 0xd9, 0x31, + 0xdb, 0x2d, 0x52, 0x93, 0x9d, 0x96, 0x59, 0x45, 0xe9, 0xbb, 0x28, 0x2b, 0x1d, 0x2f, 0xf3, 0x61, + 0x9c, 0x12, 0xce, 0x93, 0xf5, 0x2d, 0x97, 0x4b, 0xbc, 0x9b, 0xa6, 0x04, 0x19, 0x63, 0xd2, 0x66, + 0x40, 0xc3, 0xa6, 0x10, 0x1e, 0x3c, 0x43, 0xd8, 0x86, 0x5b, 0x3b, 0xad, 0xe0, 0x73, 0xef, 0x84, + 0x21, 0xcc, 0xe9, 0x3f, 0xf4, 0x1e, 0xda, 0x90, 0xb5, 0x76, 0x02, 0x4f, 0x7c, 0xcb, 0x7a, 0xe3, + 0x4c, 0x16, 0x06, 0x83, 0xf1, 0xa9, 0xf7, 0x03, 0x8d, 0x50, 0x4d, 0xc1, 0xcd, 0x4a, 0x61, 0xb5, + 0x88, 0xdb, 0x8c, 0xf7, 0x94, 0xb4, 0x04, 0x6e, 0x77, 0x96, 0x97, 0x36, 0x4a, 0x15, 0x63, 0xb3, + 0xbc, 0xb1, 0xb4, 0x52, 0xd2, 0xd4, 0x60, 0x5f, 0xfd, 0x9d, 0x04, 0x0c, 0x8b, 0xaf, 0x48, 0xfa, + 0x3b, 0xe0, 0x28, 0xdf, 0xcf, 0x70, 0x90, 0x5b, 0x79, 0xb2, 0xde, 0x26, 0x29, 0xd3, 0x34, 0xe9, + 0xf2, 0xe5, 0x39, 0xed, 0x30, 0xe3, 0x5a, 0x47, 0xee, 0x23, 0xf5, 0x36, 0x4e, 0x88, 0xa6, 0xe9, + 0xea, 0xcb, 0x30, 0x65, 0xd9, 0x15, 0xc7, 0x35, 0xad, 0x9a, 0xd9, 0xae, 0x55, 0xfc, 0x9d, 0xa4, + 0x8a, 0x59, 0xad, 0x22, 0xc7, 0xb1, 0xe9, 0x52, 0xe5, 0x49, 0x39, 0x66, 0xd9, 0xeb, 0x8c, 0xd9, + 0xaf, 0xe1, 0x39, 0xc6, 0x2a, 0x05, 0x98, 0xda, 0x2d, 0xc0, 0x6e, 0x87, 0xfe, 0xa6, 0xd9, 0xaa, + 0x20, 0xcb, 0x6d, 0xef, 0x91, 0xc6, 0x38, 0x65, 0xa4, 0x9a, 0x66, 0xab, 0x84, 0xbf, 0xbf, 0x3d, + 0xef, 0x27, 0xff, 0xa8, 0xc2, 0x60, 0xb0, 0x39, 0xc6, 0xef, 0x1a, 0x55, 0xb2, 0x8e, 0x28, 0xa4, + 0xd2, 0xdc, 0xb9, 0x6f, 0x2b, 0x3d, 0x57, 0xc0, 0x0b, 0x4c, 0xb6, 0x8f, 0xb6, 0xac, 0x06, 0x45, + 0xe2, 0xc5, 0x1d, 0xd7, 0x16, 0x44, 0x5b, 0x84, 0x94, 0xc1, 0xbe, 0xe9, 0x57, 0xa0, 0xef, 0x31, + 0x87, 0xc8, 0xee, 0x23, 0xb2, 0x4f, 0xec, 0x2f, 0xfb, 0xea, 0x3a, 0x11, 0xde, 0x7f, 0x75, 0xbd, + 0x52, 0x5e, 0x35, 0x56, 0x72, 0xcb, 0x06, 0x83, 0xeb, 0xb7, 0x41, 0xb2, 0x61, 0x3e, 0xbd, 0x27, + 0x2e, 0x45, 0x64, 0x28, 0xae, 0xe1, 0x6f, 0x83, 0xe4, 0x93, 0xc8, 0x7c, 0x5c, 0x5c, 0x00, 0xc8, + 0xd0, 0x5b, 0x18, 0xfa, 0xa7, 0xa0, 0x97, 0xd8, 0x4b, 0x07, 0x60, 0x16, 0xd3, 0x7a, 0xf4, 0x14, + 0x24, 0x0b, 0xab, 0x06, 0x0e, 0x7f, 0x0d, 0x06, 0xe9, 0x68, 0x65, 0x6d, 0xa9, 0x54, 0x28, 0x69, + 0x89, 0xcc, 0x59, 0xe8, 0xa3, 0x46, 0xc0, 0xa9, 0xe1, 0x99, 0x41, 0xeb, 0x61, 0x5f, 0x99, 0x0c, + 0x85, 0x53, 0x37, 0x57, 0xf2, 0x25, 0x43, 0x4b, 0x04, 0xdd, 0xeb, 0xc0, 0x60, 0xb0, 0x2f, 0x7e, + 0x7b, 0x62, 0xea, 0x5b, 0x0a, 0x0c, 0x04, 0xfa, 0x5c, 0xdc, 0xa0, 0x98, 0x8d, 0x86, 0xfd, 0x64, + 0xc5, 0x6c, 0xd4, 0x4d, 0x87, 0x05, 0x05, 0x90, 0xa1, 0x1c, 0x1e, 0x89, 0xeb, 0xb4, 0xb7, 0x45, + 0xf9, 0x67, 0x15, 0xd0, 0xe4, 0x16, 0x53, 0x52, 0x50, 0xf9, 0x85, 0x2a, 0xf8, 0x09, 0x05, 0x86, + 0xc5, 0xbe, 0x52, 0x52, 0xef, 0xf8, 0x2f, 0x54, 0xbd, 0x1f, 0x24, 0x60, 0x48, 0xe8, 0x26, 0xe3, + 0x6a, 0xf7, 0x3e, 0x18, 0xad, 0xd7, 0x50, 0xb3, 0x65, 0xbb, 0xc8, 0xaa, 0xee, 0x55, 0x1a, 0xe8, + 0x09, 0xd4, 0x48, 0x67, 0x48, 0xa1, 0x38, 0xb5, 0x7f, 0xbf, 0x3a, 0xb7, 0xe4, 0xe3, 0x96, 0x31, + 0x2c, 0x3b, 0xb6, 0x54, 0x2c, 0xad, 0xac, 0xad, 0x6e, 0x94, 0xca, 0x85, 0x6b, 0x95, 0xcd, 0xf2, + 0x3b, 0xcb, 0xab, 0x8f, 0x94, 0x0d, 0xad, 0x2e, 0xb1, 0xbd, 0x85, 0xa9, 0xbe, 0x06, 0x9a, 0xac, + 0x94, 0x7e, 0x14, 0xc2, 0xd4, 0xd2, 0x7a, 0xf4, 0x31, 0x18, 0x29, 0xaf, 0x56, 0xd6, 0x97, 0x8a, + 0xa5, 0x4a, 0xe9, 0xf2, 0xe5, 0x52, 0x61, 0x63, 0x9d, 0xee, 0x40, 0x78, 0xdc, 0x1b, 0x62, 0x52, + 0x7f, 0x5c, 0x85, 0xb1, 0x10, 0x4d, 0xf4, 0x1c, 0x7b, 0x77, 0xa0, 0xaf, 0x33, 0xf7, 0xc7, 0xd1, + 0x7e, 0x0e, 0x2f, 0xf9, 0x6b, 0x66, 0xdb, 0x65, 0xaf, 0x1a, 0xf7, 0x00, 0xb6, 0x92, 0xe5, 0xd6, + 0xb7, 0xea, 0xa8, 0xcd, 0x36, 0x6c, 0xe8, 0x0b, 0xc5, 0x88, 0x3f, 0x4e, 0xf7, 0x6c, 0xee, 0x03, + 0xbd, 0x65, 0x3b, 0x75, 0xb7, 0xfe, 0x04, 0xaa, 0xd4, 0x2d, 0xbe, 0xbb, 0x83, 0x5f, 0x30, 0x92, + 0x86, 0xc6, 0x29, 0x4b, 0x96, 0xeb, 0x71, 0x5b, 0x68, 0xdb, 0x94, 0xb8, 0x71, 0x01, 0x57, 0x0d, + 0x8d, 0x53, 0x3c, 0xee, 0xe3, 0x30, 0x58, 0xb3, 0x77, 0x71, 0xd7, 0x45, 0xf9, 0xf0, 0x7a, 0xa1, + 0x18, 0x03, 0x74, 0xcc, 0x63, 0x61, 0xfd, 0xb4, 0xbf, 0xad, 0x34, 0x68, 0x0c, 0xd0, 0x31, 0xca, + 0x72, 0x37, 0x8c, 0x98, 0xdb, 0xdb, 0x6d, 0x2c, 0x9c, 0x0b, 0xa2, 0x6f, 0x08, 0xc3, 0xde, 0x30, + 0x61, 0x9c, 0xb8, 0x0a, 0x29, 0x6e, 0x07, 0xbc, 0x24, 0x63, 0x4b, 0x54, 0x5a, 0xf4, 0xb5, 0x37, + 0x31, 0xd3, 0x6f, 0xa4, 0x2c, 0x4e, 0x3c, 0x0e, 0x83, 0x75, 0xa7, 0xe2, 0xef, 0x92, 0x27, 0xa6, + 0x13, 0x33, 0x29, 0x63, 0xa0, 0xee, 0x78, 0x3b, 0x8c, 0x99, 0x2f, 0x24, 0x60, 0x58, 0xdc, 0xe5, + 0xd7, 0x8b, 0x90, 0x6a, 0xd8, 0x55, 0x93, 0x84, 0x16, 0x3d, 0x62, 0x9a, 0x89, 0x38, 0x18, 0x98, + 0x5b, 0x66, 0xfc, 0x86, 0x87, 0x9c, 0xf8, 0xae, 0x02, 0x29, 0x3e, 0xac, 0x8f, 0x43, 0xb2, 0x65, + 0xba, 0x3b, 0x44, 0x5c, 0x6f, 0x3e, 0xa1, 0x29, 0x06, 0xf9, 0x8e, 0xc7, 0x9d, 0x96, 0x69, 0x91, + 0x10, 0x60, 0xe3, 0xf8, 0x3b, 0xf6, 0x6b, 0x03, 0x99, 0x35, 0xf2, 0xfa, 0x61, 0x37, 0x9b, 0xc8, + 0x72, 0x1d, 0xee, 0x57, 0x36, 0x5e, 0x60, 0xc3, 0xfa, 0xbd, 0x30, 0xea, 0xb6, 0xcd, 0x7a, 0x43, + 0xe0, 0x4d, 0x12, 0x5e, 0x8d, 0x13, 0x3c, 0xe6, 0x2c, 0xdc, 0xc6, 0xe5, 0xd6, 0x90, 0x6b, 0x56, + 0x77, 0x50, 0xcd, 0x07, 0xf5, 0x91, 0x6d, 0x86, 0xa3, 0x8c, 0xa1, 0xc8, 0xe8, 0x1c, 0x9b, 0xf9, + 0x9e, 0x02, 0xa3, 0xfc, 0x85, 0xa9, 0xe6, 0x19, 0x6b, 0x05, 0xc0, 0xb4, 0x2c, 0xdb, 0x0d, 0x9a, + 0xab, 0x33, 0x94, 0x3b, 0x70, 0x73, 0x39, 0x0f, 0x64, 0x04, 0x04, 0x4c, 0x34, 0x01, 0x7c, 0x4a, + 0x57, 0xb3, 0x4d, 0xc1, 0x00, 0x3b, 0xc2, 0x21, 0xe7, 0x80, 0xf4, 0x15, 0x1b, 0xe8, 0x10, 0x7e, + 0xb3, 0xd2, 0x0f, 0x43, 0xef, 0x75, 0xb4, 0x5d, 0xb7, 0xd8, 0xc6, 0x2c, 0xfd, 0xc2, 0x37, 0x42, + 0x92, 0xde, 0x46, 0x48, 0xfe, 0xbd, 0x30, 0x56, 0xb5, 0x9b, 0xb2, 0xba, 0x79, 0x4d, 0x7a, 0xcd, + 0x77, 0x1e, 0x56, 0xde, 0x03, 0x7e, 0x8b, 0xf9, 0x33, 0x45, 0xf9, 0x4c, 0x42, 0xbd, 0xb2, 0x96, + 0xff, 0x52, 0x62, 0xe2, 0x0a, 0x85, 0xae, 0xf1, 0x99, 0x1a, 0x68, 0xab, 0x81, 0xaa, 0x58, 0x7b, + 0xf8, 0xfc, 0xbd, 0x70, 0xff, 0x76, 0xdd, 0xdd, 0xd9, 0xbd, 0x3e, 0x57, 0xb5, 0x9b, 0xa7, 0xb6, + 0xed, 0x6d, 0xdb, 0x3f, 0xfa, 0xc4, 0xdf, 0xc8, 0x17, 0xf2, 0x89, 0x1d, 0x7f, 0xf6, 0x7b, 0xa3, + 0x13, 0x91, 0x67, 0xa5, 0xd9, 0x32, 0x8c, 0x31, 0xe6, 0x0a, 0x39, 0x7f, 0xa1, 0x6f, 0x11, 0xfa, + 0xbe, 0x7b, 0x58, 0xe9, 0xaf, 0xfc, 0x90, 0x2c, 0xd7, 0xc6, 0x28, 0x83, 0x62, 0x1a, 0x7d, 0xd1, + 0xc8, 0x1a, 0x70, 0x44, 0x90, 0x47, 0x53, 0x13, 0xb5, 0x23, 0x24, 0x7e, 0x87, 0x49, 0x1c, 0x0b, + 0x48, 0x5c, 0x67, 0xd0, 0x6c, 0x01, 0x86, 0x0e, 0x22, 0xeb, 0x6f, 0x98, 0xac, 0x41, 0x14, 0x14, + 0x72, 0x05, 0x46, 0x88, 0x90, 0xea, 0xae, 0xe3, 0xda, 0x4d, 0x52, 0xf7, 0xf6, 0x17, 0xf3, 0xb7, + 0x3f, 0xa4, 0xb9, 0x32, 0x8c, 0x61, 0x05, 0x0f, 0x95, 0xcd, 0x02, 0x39, 0x72, 0xaa, 0xa1, 0x6a, + 0x23, 0x42, 0xc2, 0x0d, 0xa6, 0x88, 0xc7, 0x9f, 0x7d, 0x37, 0x1c, 0xc6, 0x9f, 0x49, 0x59, 0x0a, + 0x6a, 0x12, 0xbd, 0xe1, 0x95, 0xfe, 0xde, 0x07, 0x68, 0x3a, 0x8e, 0x79, 0x02, 0x02, 0x3a, 0x05, + 0xbc, 0xb8, 0x8d, 0x5c, 0x17, 0xb5, 0x9d, 0x8a, 0xd9, 0x08, 0x53, 0x2f, 0xb0, 0x63, 0x90, 0xfe, + 0xd8, 0xab, 0xa2, 0x17, 0xaf, 0x50, 0x64, 0xae, 0xd1, 0xc8, 0x6e, 0xc2, 0xd1, 0x90, 0xa8, 0x88, + 0x21, 0xf3, 0xe3, 0x4c, 0xe6, 0xe1, 0x8e, 0xc8, 0xc0, 0x62, 0xd7, 0x80, 0x8f, 0x7b, 0xbe, 0x8c, + 0x21, 0xf3, 0x0f, 0x98, 0x4c, 0x9d, 0x61, 0xb9, 0x4b, 0xb1, 0xc4, 0xab, 0x30, 0xfa, 0x04, 0x6a, + 0x5f, 0xb7, 0x1d, 0xb6, 0x4b, 0x13, 0x43, 0xdc, 0x27, 0x98, 0xb8, 0x11, 0x06, 0x24, 0xdb, 0x36, + 0x58, 0xd6, 0x45, 0x48, 0x6d, 0x99, 0x55, 0x14, 0x43, 0xc4, 0x27, 0x99, 0x88, 0x43, 0x98, 0x1f, + 0x43, 0x73, 0x30, 0xb8, 0x6d, 0xb3, 0x95, 0x29, 0x1a, 0xfe, 0x2c, 0x83, 0x0f, 0x70, 0x0c, 0x13, + 0xd1, 0xb2, 0x5b, 0xbb, 0x0d, 0xbc, 0x6c, 0x45, 0x8b, 0xf8, 0x14, 0x17, 0xc1, 0x31, 0x4c, 0xc4, + 0x01, 0xcc, 0xfa, 0x1c, 0x17, 0xe1, 0x04, 0xec, 0xf9, 0x10, 0x0c, 0xd8, 0x56, 0x63, 0xcf, 0xb6, + 0xe2, 0x28, 0xf1, 0x69, 0x26, 0x01, 0x18, 0x04, 0x0b, 0xb8, 0x04, 0xfd, 0x71, 0x1d, 0xf1, 0xb9, + 0x57, 0x79, 0x7a, 0x70, 0x0f, 0x5c, 0x81, 0x11, 0x5e, 0xa0, 0xea, 0xb6, 0x15, 0x43, 0xc4, 0xe7, + 0x99, 0x88, 0xe1, 0x00, 0x8c, 0x4d, 0xc3, 0x45, 0x8e, 0xbb, 0x8d, 0xe2, 0x08, 0xf9, 0x02, 0x9f, + 0x06, 0x83, 0x30, 0x53, 0x5e, 0x47, 0x56, 0x75, 0x27, 0x9e, 0x84, 0xe7, 0xb9, 0x29, 0x39, 0x06, + 0x8b, 0x28, 0xc0, 0x50, 0xd3, 0x6c, 0x3b, 0x3b, 0x66, 0x23, 0x96, 0x3b, 0xbe, 0xc8, 0x64, 0x0c, + 0x7a, 0x20, 0x66, 0x91, 0x5d, 0xeb, 0x20, 0x62, 0xbe, 0xc4, 0x2d, 0x12, 0x80, 0xb1, 0xd4, 0x73, + 0x5c, 0xb2, 0xa5, 0x75, 0x10, 0x69, 0x7f, 0xc8, 0x53, 0x8f, 0x62, 0x57, 0x82, 0x12, 0x2f, 0x41, + 0xbf, 0x53, 0x7f, 0x3a, 0x96, 0x98, 0x3f, 0xe2, 0x9e, 0x26, 0x00, 0x0c, 0xbe, 0x06, 0xb7, 0x85, + 0x2e, 0x13, 0x31, 0x84, 0xfd, 0x31, 0x13, 0x36, 0x1e, 0xb2, 0x54, 0xb0, 0x92, 0x70, 0x50, 0x91, + 0x7f, 0xc2, 0x4b, 0x02, 0x92, 0x64, 0xad, 0xe1, 0x77, 0x05, 0xc7, 0xdc, 0x3a, 0x98, 0xd5, 0xfe, + 0x94, 0x5b, 0x8d, 0x62, 0x05, 0xab, 0x6d, 0xc0, 0x38, 0x93, 0x78, 0x30, 0xbf, 0x7e, 0x99, 0x17, + 0x56, 0x8a, 0xde, 0x14, 0xbd, 0xfb, 0x5e, 0x98, 0xf0, 0xcc, 0xc9, 0x9b, 0x52, 0xa7, 0xd2, 0x34, + 0x5b, 0x31, 0x24, 0x7f, 0x85, 0x49, 0xe6, 0x15, 0xdf, 0xeb, 0x6a, 0x9d, 0x15, 0xb3, 0x85, 0x85, + 0x3f, 0x0a, 0x69, 0x2e, 0x7c, 0xd7, 0x6a, 0xa3, 0xaa, 0xbd, 0x6d, 0xd5, 0x9f, 0x46, 0xb5, 0x18, + 0xa2, 0xff, 0x4c, 0x72, 0xd5, 0x66, 0x00, 0x8e, 0x25, 0x2f, 0x81, 0xe6, 0xf5, 0x2a, 0x95, 0x7a, + 0xb3, 0x65, 0xb7, 0xdd, 0x08, 0x89, 0x5f, 0xe5, 0x9e, 0xf2, 0x70, 0x4b, 0x04, 0x96, 0x2d, 0xc1, + 0x30, 0xf9, 0x1a, 0x37, 0x24, 0xbf, 0xc6, 0x04, 0x0d, 0xf9, 0x28, 0x56, 0x38, 0xaa, 0x76, 0xb3, + 0x65, 0xb6, 0xe3, 0xd4, 0xbf, 0x3f, 0xe7, 0x85, 0x83, 0x41, 0x58, 0xe1, 0x70, 0xf7, 0x5a, 0x08, + 0xaf, 0xf6, 0x31, 0x24, 0x7c, 0x9d, 0x17, 0x0e, 0x8e, 0x61, 0x22, 0x78, 0xc3, 0x10, 0x43, 0xc4, + 0x5f, 0x70, 0x11, 0x1c, 0x83, 0x45, 0xbc, 0xcb, 0x5f, 0x68, 0xdb, 0x68, 0xbb, 0xee, 0xb8, 0x6d, + 0xda, 0x0a, 0xef, 0x2f, 0xea, 0x1b, 0xaf, 0x8a, 0x4d, 0x98, 0x11, 0x80, 0xe2, 0x4a, 0xc4, 0xb6, + 0x50, 0xc9, 0x9b, 0x52, 0xb4, 0x62, 0xdf, 0xe4, 0x95, 0x28, 0x00, 0xc3, 0xba, 0x05, 0x3a, 0x44, + 0x6c, 0xf6, 0x2a, 0x7e, 0x3f, 0x88, 0x21, 0xee, 0x5b, 0x92, 0x72, 0xeb, 0x1c, 0x8b, 0x65, 0x06, + 0xfa, 0x9f, 0x5d, 0xeb, 0x71, 0xb4, 0x17, 0x2b, 0x3a, 0xff, 0x52, 0xea, 0x7f, 0x36, 0x29, 0x92, + 0xd6, 0x90, 0x11, 0xa9, 0x9f, 0xd2, 0xa3, 0x2e, 0xeb, 0xa4, 0xff, 0xef, 0x6b, 0x6c, 0xbe, 0x62, + 0x3b, 0x95, 0x5d, 0xc6, 0x41, 0x2e, 0x36, 0x3d, 0xd1, 0xc2, 0x3e, 0xf0, 0x9a, 0x17, 0xe7, 0x42, + 0xcf, 0x93, 0xbd, 0x0c, 0x43, 0x42, 0xc3, 0x13, 0x2d, 0xea, 0xff, 0x31, 0x51, 0x83, 0xc1, 0x7e, + 0x27, 0x7b, 0x16, 0x92, 0xb8, 0x79, 0x89, 0x86, 0xff, 0x7f, 0x06, 0x27, 0xec, 0xd9, 0x07, 0x20, + 0xc5, 0x9b, 0x96, 0x68, 0xe8, 0x07, 0x19, 0xd4, 0x83, 0x60, 0x38, 0x6f, 0x58, 0xa2, 0xe1, 0xbf, + 0xc2, 0xe1, 0x1c, 0x82, 0xe1, 0xf1, 0x4d, 0xf8, 0xc2, 0xaf, 0x25, 0xd9, 0xa2, 0xc3, 0x6d, 0x77, + 0x09, 0x0e, 0xb1, 0x4e, 0x25, 0x1a, 0xfd, 0x61, 0xf6, 0x70, 0x8e, 0xc8, 0x9e, 0x87, 0xde, 0x98, + 0x06, 0xff, 0x75, 0x06, 0xa5, 0xfc, 0xd9, 0x02, 0x0c, 0x04, 0xba, 0x93, 0x68, 0xf8, 0x6f, 0x30, + 0x78, 0x10, 0x85, 0x55, 0x67, 0xdd, 0x49, 0xb4, 0x80, 0xdf, 0xe4, 0xaa, 0x33, 0x04, 0x36, 0x1b, + 0x6f, 0x4c, 0xa2, 0xd1, 0xbf, 0xc5, 0xad, 0xce, 0x21, 0xd9, 0x87, 0xa0, 0xdf, 0x5b, 0x6c, 0xa2, + 0xf1, 0xbf, 0xcd, 0xf0, 0x3e, 0x06, 0x5b, 0x20, 0xb0, 0xd8, 0x45, 0x8b, 0xf8, 0x1d, 0x6e, 0x81, + 0x00, 0x0a, 0xa7, 0x91, 0xdc, 0xc0, 0x44, 0x4b, 0xfa, 0x08, 0x4f, 0x23, 0xa9, 0x7f, 0xc1, 0xde, + 0x24, 0x35, 0x3f, 0x5a, 0xc4, 0xef, 0x72, 0x6f, 0x12, 0x7e, 0xac, 0x86, 0xdc, 0x11, 0x44, 0xcb, + 0xf8, 0x7d, 0xae, 0x86, 0xd4, 0x10, 0x64, 0xd7, 0x40, 0xef, 0xec, 0x06, 0xa2, 0xe5, 0x7d, 0x94, + 0xc9, 0x1b, 0xed, 0x68, 0x06, 0xb2, 0x8f, 0xc0, 0x78, 0x78, 0x27, 0x10, 0x2d, 0xf5, 0x63, 0xaf, + 0x49, 0xef, 0x6e, 0xc1, 0x46, 0x20, 0xbb, 0xe1, 0x2f, 0x29, 0xc1, 0x2e, 0x20, 0x5a, 0xec, 0xc7, + 0x5f, 0x13, 0x0b, 0x77, 0xb0, 0x09, 0xc8, 0xe6, 0x00, 0xfc, 0x05, 0x38, 0x5a, 0xd6, 0x27, 0x98, + 0xac, 0x00, 0x08, 0xa7, 0x06, 0x5b, 0x7f, 0xa3, 0xf1, 0x9f, 0xe4, 0xa9, 0xc1, 0x10, 0x38, 0x35, + 0xf8, 0xd2, 0x1b, 0x8d, 0x7e, 0x96, 0xa7, 0x06, 0x87, 0xe0, 0xc8, 0x0e, 0xac, 0x6e, 0xd1, 0x12, + 0x3e, 0xcd, 0x23, 0x3b, 0x80, 0xca, 0x96, 0x61, 0xb4, 0x63, 0x41, 0x8c, 0x16, 0xf5, 0x19, 0x26, + 0x4a, 0x93, 0xd7, 0xc3, 0xe0, 0xe2, 0xc5, 0x16, 0xc3, 0x68, 0x69, 0x9f, 0x95, 0x16, 0x2f, 0xb6, + 0x16, 0x66, 0x2f, 0x41, 0xca, 0xda, 0x6d, 0x34, 0x70, 0xf2, 0xe8, 0xfb, 0x5f, 0xb0, 0x4b, 0xff, + 0xf3, 0xeb, 0xcc, 0x3a, 0x1c, 0x90, 0x3d, 0x0b, 0xbd, 0xa8, 0x79, 0x1d, 0xd5, 0xa2, 0x90, 0xff, + 0xf2, 0x3a, 0x2f, 0x98, 0x98, 0x3b, 0xfb, 0x10, 0x00, 0xdd, 0x1a, 0x21, 0xc7, 0x7e, 0x11, 0xd8, + 0x7f, 0x7d, 0x9d, 0x5d, 0x7d, 0xf1, 0x21, 0xbe, 0x00, 0x7a, 0x91, 0x66, 0x7f, 0x01, 0xaf, 0x8a, + 0x02, 0x88, 0x47, 0x2e, 0xc2, 0xa1, 0xc7, 0x1c, 0xdb, 0x72, 0xcd, 0xed, 0x28, 0xf4, 0xbf, 0x31, + 0x34, 0xe7, 0xc7, 0x06, 0x6b, 0xda, 0x6d, 0xe4, 0x9a, 0xdb, 0x4e, 0x14, 0xf6, 0xdf, 0x19, 0xd6, + 0x03, 0x60, 0x70, 0xd5, 0x74, 0xdc, 0x38, 0xf3, 0xfe, 0x31, 0x07, 0x73, 0x00, 0x56, 0x1a, 0x7f, + 0x7e, 0x1c, 0xed, 0x45, 0x61, 0x7f, 0xc2, 0x95, 0x66, 0xfc, 0xd9, 0x07, 0xa0, 0x1f, 0x7f, 0xa4, + 0xf7, 0xd9, 0x22, 0xc0, 0xff, 0xc1, 0xc0, 0x3e, 0x02, 0x3f, 0xd9, 0x71, 0x6b, 0x6e, 0x3d, 0xda, + 0xd8, 0x3f, 0x65, 0x9e, 0xe6, 0xfc, 0xd9, 0x1c, 0x0c, 0x38, 0x6e, 0xad, 0xb6, 0xcb, 0xfa, 0xd3, + 0x08, 0xf8, 0x7f, 0xbe, 0xee, 0x6d, 0x59, 0x78, 0x18, 0xec, 0xed, 0x27, 0x1f, 0x77, 0x5b, 0x36, + 0x39, 0xe6, 0x88, 0x92, 0xf0, 0x1a, 0x93, 0x10, 0x80, 0xe4, 0x4b, 0xe1, 0xdb, 0xb7, 0x70, 0xc5, + 0xbe, 0x62, 0xd3, 0x8d, 0xdb, 0xf7, 0x64, 0xa2, 0x77, 0x60, 0xe1, 0xbb, 0x0d, 0x98, 0xae, 0xda, + 0xcd, 0xeb, 0xb6, 0x73, 0x2a, 0x50, 0xcc, 0x4f, 0xb9, 0x3b, 0x08, 0xaf, 0xc3, 0x6c, 0x6f, 0x36, + 0x89, 0x3f, 0x4f, 0x1c, 0x6c, 0x43, 0x97, 0x1c, 0xd7, 0x97, 0xeb, 0x78, 0x0e, 0x65, 0x72, 0x62, + 0xa2, 0x1f, 0x83, 0x3e, 0x32, 0xab, 0xd3, 0xe4, 0x54, 0x52, 0xc9, 0x27, 0x6f, 0xbc, 0x34, 0xd5, + 0x63, 0xb0, 0x31, 0x8f, 0xba, 0x40, 0xb6, 0xb4, 0x13, 0x02, 0x75, 0xc1, 0xa3, 0x9e, 0xa1, 0xbb, + 0xda, 0x02, 0xf5, 0x8c, 0x47, 0x5d, 0x24, 0xfb, 0xdb, 0xaa, 0x40, 0x5d, 0xf4, 0xa8, 0x67, 0xc9, + 0x19, 0xce, 0x90, 0x40, 0x3d, 0xeb, 0x51, 0xcf, 0x91, 0x93, 0x9b, 0xa4, 0x40, 0x3d, 0xe7, 0x51, + 0xcf, 0x93, 0x43, 0x9b, 0x51, 0x81, 0x7a, 0xde, 0xa3, 0x5e, 0x20, 0x87, 0x35, 0xba, 0x40, 0xbd, + 0xe0, 0x51, 0x2f, 0x92, 0x9b, 0x50, 0x87, 0x04, 0xea, 0x45, 0x7d, 0x12, 0x0e, 0xd1, 0x99, 0xcf, + 0x93, 0x93, 0xfd, 0x11, 0x46, 0xe6, 0x83, 0x3e, 0xfd, 0x34, 0xb9, 0xf5, 0xd4, 0x27, 0xd2, 0x4f, + 0xfb, 0xf4, 0x05, 0xf2, 0x07, 0x18, 0x9a, 0x48, 0x5f, 0xf0, 0xe9, 0x67, 0xd2, 0x43, 0xe4, 0xe6, + 0x97, 0x40, 0x3f, 0xe3, 0xd3, 0x17, 0xd3, 0xc3, 0x38, 0x35, 0x44, 0xfa, 0xa2, 0x4f, 0x3f, 0x9b, + 0x1e, 0x99, 0x56, 0x66, 0x06, 0x45, 0xfa, 0xd9, 0xcc, 0xfb, 0x89, 0x7b, 0x2d, 0xdf, 0xbd, 0xe3, + 0xa2, 0x7b, 0x3d, 0xc7, 0x8e, 0x8b, 0x8e, 0xf5, 0x5c, 0x3a, 0x2e, 0xba, 0xd4, 0x73, 0xe6, 0xb8, + 0xe8, 0x4c, 0xcf, 0x8d, 0xe3, 0xa2, 0x1b, 0x3d, 0x07, 0x8e, 0x8b, 0x0e, 0xf4, 0x5c, 0x37, 0x2e, + 0xba, 0xce, 0x73, 0xda, 0xb8, 0xe8, 0x34, 0xcf, 0x5d, 0xe3, 0xa2, 0xbb, 0x3c, 0x47, 0xa5, 0x25, + 0x47, 0xf9, 0x2e, 0x4a, 0x4b, 0x2e, 0xf2, 0x9d, 0x93, 0x96, 0x9c, 0xe3, 0xbb, 0x25, 0x2d, 0xb9, + 0xc5, 0x77, 0x48, 0x5a, 0x72, 0x88, 0xef, 0x8a, 0xb4, 0xe4, 0x0a, 0xdf, 0x09, 0x2c, 0xc7, 0x0c, + 0xd4, 0x0a, 0xc9, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, + 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, 0xcd, 0x31, + 0x75, 0xff, 0x1c, 0x53, 0x23, 0x72, 0x4c, 0x8d, 0xc8, 0x31, 0x35, 0x22, 0xc7, 0xd4, 0x88, 0x1c, + 0x53, 0x23, 0x72, 0x4c, 0xed, 0x9a, 0x63, 0xbe, 0x7b, 0xc7, 0x45, 0xf7, 0x86, 0xe6, 0x98, 0xda, + 0x25, 0xc7, 0xd4, 0x2e, 0x39, 0xa6, 0x76, 0xc9, 0x31, 0xb5, 0x4b, 0x8e, 0xa9, 0x5d, 0x72, 0x4c, + 0xed, 0x92, 0x63, 0x6a, 0x97, 0x1c, 0x53, 0xbb, 0xe5, 0x98, 0xda, 0x35, 0xc7, 0xd4, 0xae, 0x39, + 0xa6, 0x76, 0xcd, 0x31, 0xb5, 0x6b, 0x8e, 0xa9, 0x5d, 0x73, 0x4c, 0x0d, 0xe6, 0xd8, 0x5f, 0xa9, + 0xa0, 0xd3, 0x1c, 0x5b, 0x23, 0x77, 0xc3, 0x98, 0x2b, 0x26, 0xa5, 0x4c, 0xeb, 0xc3, 0xae, 0xd3, + 0x7c, 0x97, 0x4c, 0x4a, 0xb9, 0x26, 0xd2, 0x17, 0x3c, 0x3a, 0xcf, 0x36, 0x91, 0x7e, 0xc6, 0xa3, + 0xf3, 0x7c, 0x13, 0xe9, 0x8b, 0x1e, 0x9d, 0x67, 0x9c, 0x48, 0x3f, 0xeb, 0xd1, 0x79, 0xce, 0x89, + 0xf4, 0x73, 0x1e, 0x9d, 0x67, 0x9d, 0x48, 0x3f, 0xef, 0xd1, 0x79, 0xde, 0x89, 0xf4, 0x0b, 0x1e, + 0x9d, 0x67, 0x9e, 0x48, 0xbf, 0xa8, 0x4f, 0xcb, 0xb9, 0xc7, 0x19, 0x3c, 0xd7, 0x4e, 0xcb, 0xd9, + 0x27, 0x71, 0x9c, 0xf6, 0x39, 0x78, 0xfe, 0x49, 0x1c, 0x0b, 0x3e, 0x07, 0xcf, 0x40, 0x89, 0xe3, + 0x4c, 0xe6, 0x43, 0xc4, 0x7d, 0x96, 0xec, 0xbe, 0x09, 0xc9, 0x7d, 0x89, 0x80, 0xeb, 0x26, 0x24, + 0xd7, 0x25, 0x02, 0x6e, 0x9b, 0x90, 0xdc, 0x96, 0x08, 0xb8, 0x6c, 0x42, 0x72, 0x59, 0x22, 0xe0, + 0xae, 0x09, 0xc9, 0x5d, 0x89, 0x80, 0xab, 0x26, 0x24, 0x57, 0x25, 0x02, 0x6e, 0x9a, 0x90, 0xdc, + 0x94, 0x08, 0xb8, 0x68, 0x42, 0x72, 0x51, 0x22, 0xe0, 0x9e, 0x09, 0xc9, 0x3d, 0x89, 0x80, 0x6b, + 0x8e, 0xc9, 0xae, 0x49, 0x04, 0xdd, 0x72, 0x4c, 0x76, 0x4b, 0x22, 0xe8, 0x92, 0x63, 0xb2, 0x4b, + 0x12, 0x41, 0x77, 0x1c, 0x93, 0xdd, 0x91, 0x08, 0xba, 0xe2, 0xe7, 0x09, 0xde, 0x11, 0xae, 0xbb, + 0xed, 0xdd, 0xaa, 0x7b, 0x4b, 0x1d, 0xe1, 0xbc, 0xd0, 0x3e, 0x0c, 0x2c, 0xe8, 0x73, 0xa4, 0x61, + 0x0d, 0x76, 0x9c, 0xd2, 0x0a, 0x36, 0x2f, 0x34, 0x16, 0x01, 0x84, 0x15, 0x8e, 0x58, 0xbc, 0xa5, + 0xde, 0x70, 0x5e, 0x68, 0x33, 0xa2, 0xf5, 0xbb, 0xf0, 0x96, 0x77, 0x6c, 0x2f, 0x24, 0x78, 0xc7, + 0xc6, 0xcc, 0x7f, 0xd0, 0x8e, 0x6d, 0x36, 0xda, 0xe4, 0x9e, 0xb1, 0x67, 0xa3, 0x8d, 0xdd, 0xb1, + 0xea, 0xc4, 0xed, 0xe0, 0x66, 0xa3, 0x4d, 0xeb, 0x19, 0xf5, 0xcd, 0xed, 0xb7, 0x58, 0x04, 0x1b, + 0xa8, 0x15, 0x12, 0xc1, 0x07, 0xed, 0xb7, 0xe6, 0x85, 0x52, 0x72, 0xd0, 0x08, 0x56, 0x0f, 0x1c, + 0xc1, 0x07, 0xed, 0xbc, 0xe6, 0x85, 0xf2, 0x72, 0xe0, 0x08, 0x7e, 0x0b, 0xfa, 0x21, 0x16, 0xc1, + 0xbe, 0xf9, 0x0f, 0xda, 0x0f, 0xcd, 0x46, 0x9b, 0x3c, 0x34, 0x82, 0xd5, 0x03, 0x44, 0x70, 0x9c, + 0xfe, 0x68, 0x36, 0xda, 0xb4, 0xe1, 0x11, 0x7c, 0xcb, 0xdd, 0xcc, 0xa7, 0x14, 0x18, 0x2d, 0xd7, + 0x6b, 0xa5, 0xe6, 0x75, 0x54, 0xab, 0xa1, 0x1a, 0xb3, 0xe3, 0xbc, 0x50, 0x09, 0xba, 0xb8, 0xfa, + 0xc5, 0x97, 0xa6, 0x7c, 0x0b, 0x9f, 0x85, 0x14, 0xb5, 0xe9, 0xfc, 0x7c, 0xfa, 0x86, 0x12, 0x51, + 0xe1, 0x3c, 0x56, 0xfd, 0x38, 0x87, 0x9d, 0x9e, 0x4f, 0xff, 0xbd, 0x12, 0xa8, 0x72, 0xde, 0x70, + 0xe6, 0x23, 0x44, 0x43, 0xeb, 0x96, 0x35, 0x3c, 0x15, 0x4b, 0xc3, 0x80, 0x6e, 0xb7, 0x77, 0xe8, + 0x16, 0xd0, 0x6a, 0x17, 0x46, 0xca, 0xf5, 0x5a, 0x99, 0xfc, 0xe9, 0x7f, 0x1c, 0x95, 0x28, 0x8f, + 0x54, 0x0f, 0xe6, 0x85, 0xb0, 0x0c, 0x22, 0xbc, 0x90, 0x16, 0x6b, 0x44, 0xa6, 0x8e, 0x1f, 0x6b, + 0x09, 0x8f, 0x9d, 0xed, 0xf6, 0x58, 0xbf, 0xb2, 0x7b, 0x0f, 0x9c, 0xed, 0xf6, 0x40, 0x3f, 0x87, + 0xbc, 0x47, 0x3d, 0xc5, 0x17, 0x67, 0x7a, 0x43, 0x4b, 0x3f, 0x06, 0x89, 0x25, 0x7a, 0x81, 0x7c, + 0x30, 0x3f, 0x88, 0x95, 0xfa, 0xfe, 0x4b, 0x53, 0xc9, 0xcd, 0xdd, 0x7a, 0xcd, 0x48, 0x2c, 0xd5, + 0xf4, 0xab, 0xd0, 0xfb, 0x6e, 0xf6, 0x07, 0xa8, 0x98, 0x61, 0x91, 0x31, 0xdc, 0xd7, 0x75, 0x8f, + 0x08, 0x3f, 0xf8, 0x14, 0xdd, 0xad, 0x9c, 0xdb, 0xac, 0x5b, 0xee, 0xe9, 0x85, 0x0b, 0x06, 0x15, + 0x91, 0xf9, 0x9f, 0x00, 0xf4, 0x99, 0x45, 0xd3, 0xd9, 0xd1, 0xcb, 0x5c, 0x32, 0x7d, 0xf4, 0x85, + 0xef, 0xbf, 0x34, 0xb5, 0x18, 0x47, 0xea, 0xfd, 0x35, 0xd3, 0xd9, 0xb9, 0xdf, 0xdd, 0x6b, 0xa1, + 0xb9, 0xfc, 0x9e, 0x8b, 0x1c, 0x2e, 0xbd, 0xc5, 0x57, 0x3d, 0x36, 0xaf, 0x74, 0x60, 0x5e, 0x29, + 0x61, 0x4e, 0x97, 0xc5, 0x39, 0xcd, 0xbf, 0xd1, 0xf9, 0x3c, 0xc5, 0x17, 0x09, 0xc9, 0x92, 0x6a, + 0x94, 0x25, 0xd5, 0x5b, 0xb5, 0x64, 0x8b, 0xd7, 0x47, 0x69, 0xae, 0xea, 0x7e, 0x73, 0x55, 0x6f, + 0x65, 0xae, 0xff, 0x45, 0xb3, 0xd5, 0xcb, 0xa7, 0x4d, 0x8b, 0x5e, 0x5e, 0xfd, 0xe5, 0xda, 0x0b, + 0x7a, 0x53, 0xbb, 0x80, 0x6c, 0xf2, 0xc6, 0x73, 0x53, 0x4a, 0xe6, 0x53, 0x09, 0x3e, 0x73, 0x9a, + 0x48, 0x6f, 0x6c, 0xe6, 0xbf, 0x2c, 0x3d, 0xd5, 0x5b, 0x61, 0xa1, 0x67, 0x15, 0x18, 0xef, 0xa8, + 0xe4, 0xd4, 0x4c, 0x6f, 0x6e, 0x39, 0xb7, 0x0e, 0x5a, 0xce, 0x99, 0x82, 0x5f, 0x53, 0xe0, 0xb0, + 0x54, 0x5e, 0xa9, 0x7a, 0xa7, 0x24, 0xf5, 0x8e, 0x76, 0x3e, 0x89, 0x30, 0x06, 0xb4, 0x0b, 0xba, + 0x57, 0x02, 0x04, 0x24, 0x7b, 0x7e, 0x5f, 0x94, 0xfc, 0x7e, 0xcc, 0x03, 0x84, 0x98, 0x8b, 0x47, + 0x00, 0x53, 0xdb, 0x86, 0xe4, 0x46, 0x1b, 0x21, 0x7d, 0x12, 0x12, 0xab, 0x6d, 0xa6, 0xe1, 0x30, + 0xc5, 0xaf, 0xb6, 0xf3, 0x6d, 0xd3, 0xaa, 0xee, 0x18, 0x89, 0xd5, 0xb6, 0x7e, 0x1c, 0xd4, 0x1c, + 0xfb, 0xe3, 0xf7, 0x81, 0x85, 0x11, 0xca, 0x90, 0xb3, 0x6a, 0x8c, 0x03, 0xd3, 0xf4, 0x49, 0x48, + 0x2e, 0x23, 0x73, 0x8b, 0x29, 0x01, 0x94, 0x07, 0x8f, 0x18, 0x64, 0x9c, 0x3d, 0xf0, 0x51, 0x48, + 0x71, 0xc1, 0xfa, 0x09, 0x8c, 0xd8, 0x72, 0xd9, 0x63, 0x19, 0x02, 0xab, 0xc3, 0x56, 0x2e, 0x42, + 0xd5, 0x4f, 0x42, 0xaf, 0x51, 0xdf, 0xde, 0x71, 0xd9, 0xc3, 0x3b, 0xd9, 0x28, 0x39, 0x73, 0x0d, + 0xfa, 0x3d, 0x8d, 0xde, 0x64, 0xd1, 0x45, 0x3a, 0x35, 0x7d, 0x22, 0xb8, 0x9e, 0xf0, 0x7d, 0x4b, + 0x3a, 0xa4, 0x4f, 0x43, 0x6a, 0xdd, 0x6d, 0xfb, 0x45, 0x9f, 0x77, 0xa4, 0xde, 0x68, 0xe6, 0xfd, + 0x0a, 0xa4, 0x8a, 0x08, 0xb5, 0x88, 0xc1, 0xef, 0x82, 0x64, 0xd1, 0x7e, 0xd2, 0x62, 0x0a, 0x8e, + 0x32, 0x8b, 0x62, 0x32, 0xb3, 0x29, 0x21, 0xeb, 0x77, 0x05, 0xed, 0x3e, 0xe6, 0xd9, 0x3d, 0xc0, + 0x47, 0x6c, 0x9f, 0x11, 0x6c, 0xcf, 0x1c, 0x88, 0x99, 0x3a, 0xec, 0x7f, 0x1e, 0x06, 0x02, 0x4f, + 0xd1, 0x67, 0x98, 0x1a, 0x09, 0x19, 0x18, 0xb4, 0x15, 0xe6, 0xc8, 0x20, 0x18, 0x12, 0x1e, 0x8c, + 0xa1, 0x01, 0x13, 0x77, 0x81, 0x12, 0x33, 0xcf, 0x8a, 0x66, 0x0e, 0x67, 0x65, 0xa6, 0x9e, 0xa7, + 0x36, 0x22, 0xe6, 0x3e, 0x41, 0x83, 0xb3, 0xbb, 0x13, 0xf1, 0xe7, 0x4c, 0x2f, 0xa8, 0xe5, 0x7a, + 0x23, 0xf3, 0x00, 0x00, 0x4d, 0xf9, 0x92, 0xb5, 0xdb, 0x94, 0xb2, 0x6e, 0x98, 0x1b, 0x78, 0x63, + 0x07, 0x6d, 0x20, 0x87, 0xb0, 0x88, 0xfd, 0x14, 0x2e, 0x30, 0x40, 0x53, 0x8c, 0xe0, 0xef, 0x89, + 0xc4, 0x87, 0x76, 0x62, 0x98, 0x35, 0x4d, 0x59, 0xaf, 0x21, 0x37, 0x67, 0xd9, 0xee, 0x0e, 0x6a, + 0x4b, 0x88, 0x05, 0xfd, 0x8c, 0x90, 0xb0, 0xc3, 0x0b, 0xb7, 0x7b, 0x88, 0xae, 0xa0, 0x33, 0x99, + 0x2f, 0x13, 0x05, 0x71, 0x2b, 0xd0, 0x31, 0x41, 0x35, 0xc6, 0x04, 0xf5, 0x73, 0x42, 0xff, 0xb6, + 0x8f, 0x9a, 0xd2, 0xab, 0xe5, 0x45, 0xe1, 0x3d, 0x67, 0x7f, 0x65, 0xc5, 0x77, 0x4c, 0x6e, 0x53, + 0xae, 0xf2, 0x3d, 0x91, 0x2a, 0x77, 0xe9, 0x6e, 0x0f, 0x6a, 0x53, 0x35, 0xae, 0x4d, 0xbf, 0xe5, + 0x75, 0x1c, 0xf4, 0x17, 0x46, 0xc8, 0x6f, 0xf3, 0xe8, 0xf7, 0x45, 0xfa, 0x3e, 0xab, 0x14, 0x3c, + 0x55, 0x17, 0xe3, 0xba, 0x3f, 0x9b, 0xc8, 0xe7, 0x3d, 0x75, 0xcf, 0x1f, 0x20, 0x04, 0xb2, 0x89, + 0x42, 0xc1, 0x2b, 0xdb, 0xa9, 0x0f, 0x3d, 0x37, 0xa5, 0x3c, 0xff, 0xdc, 0x54, 0x4f, 0xe6, 0x8b, + 0x0a, 0x8c, 0x32, 0xce, 0x40, 0xe0, 0xde, 0x2f, 0x29, 0x7f, 0x84, 0xd7, 0x8c, 0x30, 0x0b, 0xbc, + 0x6d, 0xc1, 0xfb, 0x1d, 0x05, 0xd2, 0x1d, 0xba, 0x72, 0x7b, 0xcf, 0xc7, 0x52, 0x39, 0xab, 0x94, + 0x7e, 0xf1, 0x36, 0xbf, 0x06, 0xbd, 0x1b, 0xf5, 0x26, 0x6a, 0xe3, 0x95, 0x00, 0x7f, 0xa0, 0x2a, + 0xf3, 0xc3, 0x1c, 0x3a, 0xc4, 0x69, 0x54, 0x39, 0x81, 0xb6, 0xa0, 0xa7, 0x21, 0x59, 0x34, 0x5d, + 0x93, 0x68, 0x30, 0xe8, 0xd5, 0x57, 0xd3, 0x35, 0x33, 0x67, 0x60, 0x70, 0x65, 0x8f, 0xdc, 0x38, + 0xaa, 0x91, 0xcb, 0x26, 0x62, 0xf7, 0xc7, 0xfb, 0xd5, 0xd3, 0xb3, 0xbd, 0xa9, 0x9a, 0x76, 0x43, + 0xc9, 0x26, 0x89, 0x3e, 0x4f, 0xc0, 0xf0, 0x2a, 0x56, 0x9b, 0xe0, 0x04, 0x18, 0x7d, 0xba, 0xea, + 0x4d, 0x5e, 0x6a, 0xca, 0x54, 0xbf, 0x29, 0x9b, 0x06, 0x65, 0x45, 0x6c, 0x9d, 0x82, 0x7a, 0x18, + 0xca, 0xca, 0x6c, 0x32, 0x35, 0xac, 0x8d, 0xce, 0x26, 0x53, 0xa0, 0x0d, 0xb1, 0xe7, 0xfe, 0x9d, + 0x0a, 0x1a, 0x6d, 0x75, 0x8a, 0x68, 0xab, 0x6e, 0xd5, 0xdd, 0xce, 0x7e, 0xd5, 0xd3, 0x58, 0x7f, + 0x08, 0xfa, 0xb1, 0x49, 0x2f, 0xb3, 0x9f, 0xe8, 0xc3, 0xa6, 0x3f, 0xce, 0x5a, 0x14, 0x49, 0x04, + 0x1b, 0x20, 0xa1, 0xe3, 0x63, 0xf4, 0xcb, 0xa0, 0x96, 0xcb, 0x2b, 0x6c, 0x71, 0x5b, 0xdc, 0x17, + 0xca, 0x6e, 0xf5, 0xb0, 0x6f, 0x6c, 0xcc, 0xd9, 0x36, 0xb0, 0x00, 0x7d, 0x11, 0x12, 0xe5, 0x15, + 0xd6, 0xf0, 0x9e, 0x88, 0x23, 0xc6, 0x48, 0x94, 0x57, 0x26, 0xfe, 0x5a, 0x81, 0x21, 0x61, 0x54, + 0xcf, 0xc0, 0x20, 0x1d, 0x08, 0x4c, 0xb7, 0xcf, 0x10, 0xc6, 0xb8, 0xce, 0x89, 0x5b, 0xd4, 0x79, + 0x22, 0x07, 0x23, 0xd2, 0xb8, 0x3e, 0x07, 0x7a, 0x70, 0x88, 0x29, 0x41, 0x7f, 0x1e, 0x2c, 0x84, + 0x92, 0xb9, 0x03, 0xc0, 0xb7, 0xab, 0xf7, 0xab, 0x56, 0xe5, 0xd2, 0xfa, 0x46, 0xa9, 0xa8, 0x29, + 0x99, 0xaf, 0x2b, 0x30, 0xc0, 0xda, 0xd6, 0xaa, 0xdd, 0x42, 0x7a, 0x1e, 0x94, 0x1c, 0x8b, 0x87, + 0x37, 0xa6, 0xb7, 0x92, 0xd3, 0x4f, 0x81, 0x92, 0x8f, 0xef, 0x6a, 0x25, 0xaf, 0x2f, 0x80, 0x52, + 0x60, 0x0e, 0x8e, 0xe7, 0x19, 0xa5, 0x90, 0xf9, 0xa9, 0x0a, 0x63, 0xc1, 0x36, 0x9a, 0xd7, 0x93, + 0xe3, 0xe2, 0x7b, 0x53, 0xb6, 0xff, 0xf4, 0xc2, 0x99, 0xc5, 0x39, 0xfc, 0x8f, 0x17, 0x92, 0x19, + 0xf1, 0x15, 0x2a, 0x0b, 0x1e, 0xcb, 0xe9, 0x6e, 0xf7, 0x44, 0xb2, 0xc9, 0x80, 0x84, 0x8e, 0x7b, + 0x22, 0x02, 0xb5, 0xe3, 0x9e, 0x88, 0x40, 0xed, 0xb8, 0x27, 0x22, 0x50, 0x3b, 0xce, 0x02, 0x04, + 0x6a, 0xc7, 0x3d, 0x11, 0x81, 0xda, 0x71, 0x4f, 0x44, 0xa0, 0x76, 0xde, 0x13, 0x61, 0xe4, 0xae, + 0xf7, 0x44, 0x44, 0x7a, 0xe7, 0x3d, 0x11, 0x91, 0xde, 0x79, 0x4f, 0x24, 0x9b, 0x74, 0xdb, 0xbb, + 0xa8, 0xfb, 0xa9, 0x83, 0x88, 0xdf, 0xef, 0x25, 0xd0, 0xaf, 0xc0, 0xab, 0x30, 0x42, 0x37, 0x24, + 0x0a, 0xb6, 0xe5, 0x9a, 0x75, 0x0b, 0xb5, 0xf5, 0x77, 0xc0, 0x20, 0x1d, 0xa2, 0xaf, 0x39, 0x61, + 0xaf, 0x81, 0x94, 0xce, 0xea, 0xad, 0xc0, 0x9d, 0xf9, 0x79, 0x12, 0xc6, 0xe9, 0x40, 0xd9, 0x6c, + 0x22, 0xe1, 0x96, 0xd1, 0x49, 0xe9, 0x4c, 0x69, 0x18, 0xc3, 0x6f, 0xbe, 0x34, 0x45, 0x47, 0x73, + 0x5e, 0x34, 0x9d, 0x94, 0x4e, 0x97, 0x44, 0x3e, 0x7f, 0x01, 0x3a, 0x29, 0xdd, 0x3c, 0x12, 0xf9, + 0xbc, 0xf5, 0xc6, 0xe3, 0xe3, 0x77, 0x90, 0x44, 0xbe, 0xa2, 0x17, 0x65, 0x27, 0xa5, 0xdb, 0x48, + 0x22, 0x5f, 0xc9, 0x8b, 0xb7, 0x93, 0xd2, 0xd9, 0x93, 0xc8, 0x77, 0xd9, 0x8b, 0xbc, 0x93, 0xd2, + 0x29, 0x94, 0xc8, 0x77, 0xc5, 0x8b, 0xc1, 0x93, 0xd2, 0x5d, 0x25, 0x91, 0xef, 0x61, 0x2f, 0x1a, + 0x4f, 0x4a, 0xb7, 0x96, 0x44, 0xbe, 0x25, 0x2f, 0x2e, 0x67, 0xe4, 0xfb, 0x4b, 0x22, 0xe3, 0x55, + 0x3f, 0x42, 0x67, 0xe4, 0x9b, 0x4c, 0x22, 0xe7, 0x3b, 0xfd, 0x58, 0x9d, 0x91, 0xef, 0x34, 0x89, + 0x9c, 0xcb, 0x7e, 0xd4, 0xce, 0xc8, 0x67, 0x65, 0x22, 0xe7, 0x8a, 0x1f, 0xbf, 0x33, 0xf2, 0xa9, + 0x99, 0xc8, 0x59, 0xf6, 0x23, 0x79, 0x46, 0x3e, 0x3f, 0x13, 0x39, 0x57, 0xfd, 0x4d, 0xf4, 0x6f, + 0x4b, 0xe1, 0x17, 0xb8, 0x05, 0x95, 0x91, 0xc2, 0x0f, 0x42, 0x42, 0x4f, 0x2a, 0x64, 0x01, 0x1e, + 0x3f, 0xec, 0x32, 0x52, 0xd8, 0x41, 0x48, 0xc8, 0x65, 0xa4, 0x90, 0x83, 0x90, 0x70, 0xcb, 0x48, + 0xe1, 0x06, 0x21, 0xa1, 0x96, 0x91, 0x42, 0x0d, 0x42, 0xc2, 0x2c, 0x23, 0x85, 0x19, 0x84, 0x84, + 0x58, 0x46, 0x0a, 0x31, 0x08, 0x09, 0xaf, 0x8c, 0x14, 0x5e, 0x10, 0x12, 0x5a, 0x27, 0xe4, 0xd0, + 0x82, 0xb0, 0xb0, 0x3a, 0x21, 0x87, 0x15, 0x84, 0x85, 0xd4, 0x9d, 0x72, 0x48, 0xf5, 0xdf, 0x7c, + 0x69, 0xaa, 0x17, 0x0f, 0x05, 0xa2, 0xe9, 0x84, 0x1c, 0x4d, 0x10, 0x16, 0x49, 0x27, 0xe4, 0x48, + 0x82, 0xb0, 0x28, 0x3a, 0x21, 0x47, 0x11, 0x84, 0x45, 0xd0, 0x0b, 0x72, 0x04, 0xf9, 0x77, 0x7c, + 0x32, 0xd2, 0x91, 0x62, 0x54, 0x04, 0xa9, 0x31, 0x22, 0x48, 0x8d, 0x11, 0x41, 0x6a, 0x8c, 0x08, + 0x52, 0x63, 0x44, 0x90, 0x1a, 0x23, 0x82, 0xd4, 0x18, 0x11, 0xa4, 0xc6, 0x88, 0x20, 0x35, 0x4e, + 0x04, 0xa9, 0xb1, 0x22, 0x48, 0xed, 0x16, 0x41, 0x27, 0xe4, 0x1b, 0x0f, 0x10, 0x56, 0x90, 0x4e, + 0xc8, 0x47, 0x9f, 0xd1, 0x21, 0xa4, 0xc6, 0x0a, 0x21, 0xb5, 0x5b, 0x08, 0x7d, 0x5b, 0x85, 0x31, + 0x21, 0x84, 0xd8, 0xf9, 0xd0, 0x9b, 0x55, 0x81, 0xce, 0xc5, 0xb8, 0x60, 0x11, 0x16, 0x53, 0xe7, + 0x62, 0x1c, 0x52, 0xef, 0x17, 0x67, 0x9d, 0x55, 0xa8, 0x14, 0xa3, 0x0a, 0x5d, 0xf6, 0x62, 0xe8, + 0x5c, 0x8c, 0x8b, 0x17, 0x9d, 0xb1, 0x77, 0x61, 0xbf, 0x22, 0xf0, 0x70, 0xac, 0x22, 0xb0, 0x14, + 0xab, 0x08, 0x5c, 0xf5, 0x3d, 0xf8, 0xc1, 0x04, 0x1c, 0xf6, 0x3d, 0x48, 0x3f, 0x91, 0x9f, 0xd0, + 0xca, 0x04, 0x8e, 0xa8, 0x74, 0x7e, 0x6c, 0x13, 0x70, 0x63, 0x62, 0xa9, 0xa6, 0xaf, 0x89, 0x87, + 0x55, 0xd9, 0x83, 0x1e, 0xe0, 0x04, 0x3c, 0xce, 0x36, 0x43, 0x4f, 0x80, 0xba, 0x54, 0x73, 0x48, + 0xb5, 0x08, 0x7b, 0x6c, 0xc1, 0xc0, 0x64, 0xdd, 0x80, 0x3e, 0xc2, 0xee, 0x10, 0xf7, 0xde, 0xca, + 0x83, 0x8b, 0x06, 0x93, 0x94, 0x79, 0x41, 0x81, 0x69, 0x21, 0x94, 0xdf, 0x9c, 0x23, 0x83, 0x4b, + 0xb1, 0x8e, 0x0c, 0x84, 0x04, 0xf1, 0x8f, 0x0f, 0xee, 0xee, 0x3c, 0xa9, 0x0e, 0x66, 0x89, 0x7c, + 0x94, 0xf0, 0x7f, 0x60, 0xd8, 0x9f, 0x01, 0x79, 0x67, 0x3b, 0x1b, 0xbd, 0x9b, 0x19, 0x96, 0x9a, + 0x67, 0xa5, 0x5d, 0xb4, 0x7d, 0x61, 0x5e, 0xb6, 0x66, 0xb2, 0x30, 0x52, 0x16, 0xff, 0xf6, 0x29, + 0x6a, 0x33, 0x22, 0x85, 0x5b, 0xf3, 0x1b, 0x9f, 0x9e, 0xea, 0xc9, 0xdc, 0x07, 0x83, 0xc1, 0x3f, + 0x6f, 0x92, 0x80, 0xfd, 0x1c, 0x98, 0x4d, 0xbe, 0x88, 0xb9, 0x7f, 0x4f, 0x81, 0x23, 0x41, 0xf6, + 0x47, 0xea, 0xee, 0xce, 0x92, 0x85, 0x7b, 0xfa, 0x07, 0x20, 0x85, 0x98, 0xe3, 0xd8, 0xaf, 0xe1, + 0xb0, 0xf7, 0xc8, 0x50, 0xf6, 0x39, 0xf2, 0xaf, 0xe1, 0x41, 0xa4, 0x5d, 0x10, 0xfe, 0xd8, 0x85, + 0x89, 0xbb, 0xa0, 0x97, 0xca, 0x17, 0xf5, 0x1a, 0x92, 0xf4, 0xfa, 0x5c, 0x88, 0x5e, 0x24, 0x8e, + 0xf4, 0xab, 0x82, 0x5e, 0x81, 0xd7, 0xd5, 0x50, 0xf6, 0x39, 0x1e, 0x7c, 0xf9, 0x14, 0xee, 0xff, + 0x48, 0x44, 0x45, 0x2b, 0x39, 0x03, 0xa9, 0x92, 0xcc, 0x13, 0xae, 0x67, 0x11, 0x92, 0x65, 0xbb, + 0x46, 0x7e, 0xa7, 0x87, 0xfc, 0x30, 0x35, 0x33, 0x32, 0xfb, 0x95, 0xea, 0x93, 0x90, 0x2a, 0xec, + 0xd4, 0x1b, 0xb5, 0x36, 0xb2, 0xd8, 0x99, 0x3d, 0xdb, 0x42, 0xc7, 0x18, 0xc3, 0xa3, 0x65, 0x0a, + 0x30, 0x5a, 0xb6, 0xad, 0xfc, 0x9e, 0x1b, 0xac, 0x1b, 0x73, 0x52, 0x8a, 0xb0, 0x33, 0x1f, 0xf2, + 0xe7, 0x20, 0x98, 0x21, 0xdf, 0xfb, 0xfd, 0x97, 0xa6, 0x94, 0x0d, 0x6f, 0xff, 0x7c, 0x05, 0x8e, + 0xb2, 0xf4, 0xe9, 0x10, 0xb5, 0x10, 0x25, 0xaa, 0x9f, 0x9d, 0x53, 0x07, 0xc4, 0x2d, 0x61, 0x71, + 0x56, 0xa8, 0xb8, 0x37, 0xa6, 0x19, 0x6e, 0x8a, 0xf6, 0xd5, 0x4c, 0x3d, 0x90, 0x66, 0xa1, 0xe2, + 0xe6, 0xa2, 0xc4, 0x49, 0x9a, 0xdd, 0x09, 0xfd, 0x1e, 0x2d, 0x10, 0x0d, 0xc1, 0x4c, 0x59, 0x98, + 0xcd, 0xc0, 0x40, 0x20, 0x61, 0xf5, 0x5e, 0x50, 0x72, 0x5a, 0x0f, 0xfe, 0x2f, 0xaf, 0x29, 0xf8, + 0xbf, 0x82, 0x96, 0x98, 0xbd, 0x0b, 0x46, 0xa4, 0xfd, 0x4b, 0x4c, 0x29, 0x6a, 0x80, 0xff, 0x2b, + 0x69, 0x03, 0x13, 0xc9, 0x0f, 0x7d, 0x76, 0xb2, 0x67, 0xf6, 0x12, 0xe8, 0x9d, 0x3b, 0x9d, 0x7a, + 0x1f, 0x24, 0x72, 0x58, 0xe4, 0x51, 0x48, 0xe4, 0xf3, 0x9a, 0x32, 0x31, 0xf2, 0xab, 0x9f, 0x9c, + 0x1e, 0xc8, 0x93, 0xbf, 0xdd, 0xbe, 0x86, 0xdc, 0x7c, 0x9e, 0x81, 0x1f, 0x84, 0x23, 0xa1, 0x3b, + 0xa5, 0x18, 0x5f, 0x28, 0x50, 0x7c, 0xb1, 0xd8, 0x81, 0x2f, 0x16, 0x09, 0x5e, 0xc9, 0xf2, 0x13, + 0xe7, 0x9c, 0x1e, 0xb2, 0xcb, 0x98, 0xae, 0x05, 0x4e, 0xb8, 0x73, 0xd9, 0x07, 0x19, 0x6f, 0x3e, + 0x94, 0x17, 0x45, 0x9c, 0x58, 0xe7, 0xb3, 0x05, 0x86, 0x2f, 0x84, 0xe2, 0xb7, 0xa4, 0x63, 0x55, + 0x71, 0x85, 0x60, 0x42, 0x0a, 0x9e, 0xc2, 0xc5, 0x50, 0x21, 0x3b, 0x81, 0xcb, 0xee, 0x45, 0x4f, + 0xe1, 0x52, 0x28, 0x6f, 0x3d, 0xe2, 0xd2, 0x57, 0x29, 0x7b, 0x8a, 0x2d, 0xf2, 0xb9, 0xd3, 0xfa, + 0x11, 0x9e, 0xa3, 0x42, 0x05, 0x66, 0x06, 0xe2, 0x5c, 0xd9, 0x02, 0x03, 0xe4, 0xbb, 0x02, 0xba, + 0x5b, 0x89, 0x23, 0xb3, 0x0f, 0x33, 0x21, 0x85, 0xae, 0x42, 0x22, 0x4c, 0xc5, 0xe1, 0xf9, 0x8d, + 0x1b, 0x2f, 0x4f, 0xf6, 0xbc, 0xf8, 0xf2, 0x64, 0xcf, 0x3f, 0xbc, 0x3c, 0xd9, 0xf3, 0x83, 0x97, + 0x27, 0x95, 0x1f, 0xbd, 0x3c, 0xa9, 0xfc, 0xe4, 0xe5, 0x49, 0xe5, 0x67, 0x2f, 0x4f, 0x2a, 0xcf, + 0xdc, 0x9c, 0x54, 0x9e, 0xbf, 0x39, 0xa9, 0x7c, 0xf9, 0xe6, 0xa4, 0xf2, 0x8d, 0x9b, 0x93, 0xca, + 0x0b, 0x37, 0x27, 0x95, 0x1b, 0x37, 0x27, 0x7b, 0x5e, 0xbc, 0x39, 0xa9, 0xfc, 0xe0, 0xe6, 0xa4, + 0xf2, 0xa3, 0x9b, 0x93, 0x3d, 0x3f, 0xb9, 0x39, 0xa9, 0xfc, 0xec, 0xe6, 0x64, 0xcf, 0x33, 0xaf, + 0x4c, 0xf6, 0x3c, 0xf7, 0xca, 0x64, 0xcf, 0xf3, 0xaf, 0x4c, 0x2a, 0xff, 0x1d, 0x00, 0x00, 0xff, + 0xff, 0x63, 0x19, 0xdf, 0xae, 0xec, 0x68, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -23683,6 +23688,9 @@ return dAtA } func (m *NidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -23711,6 +23719,9 @@ } func (m *NinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -23767,6 +23778,9 @@ } func (m *NidRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -23839,6 +23853,9 @@ } func (m *NinRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -23911,6 +23928,9 @@ } func (m *NidRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -23983,6 +24003,9 @@ } func (m *NinRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24055,6 +24078,9 @@ } func (m *NidOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -24081,6 +24107,9 @@ } func (m *NinOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24125,6 +24154,9 @@ } func (m *NidRepStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24183,6 +24215,9 @@ } func (m *NinRepStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24241,6 +24276,9 @@ } func (m *NidEmbeddedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -24257,6 +24295,9 @@ } func (m *NinEmbeddedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -24277,6 +24318,9 @@ } func (m *NidNestedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Field1.Size() @@ -24294,6 +24338,9 @@ } func (m *NinNestedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24313,6 +24360,9 @@ } func (m *NidOptCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Id.Size() @@ -24326,6 +24376,9 @@ } func (m *CustomDash) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != nil { @@ -24339,6 +24392,9 @@ } func (m *NinOptCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Id != nil { @@ -24356,6 +24412,9 @@ } func (m *NidRepCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Id) > 0 { @@ -24377,6 +24436,9 @@ } func (m *NinRepCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Id) > 0 { @@ -24398,6 +24460,9 @@ } func (m *NinOptNativeUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24436,6 +24501,9 @@ } func (m *NinOptStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24476,6 +24544,9 @@ } func (m *NinEmbeddedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -24496,6 +24567,9 @@ } func (m *NinNestedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24517,6 +24591,9 @@ } func (m *Tree) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Or != nil { @@ -24538,6 +24615,9 @@ } func (m *OrBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -24551,6 +24631,9 @@ } func (m *AndBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -24564,6 +24647,9 @@ } func (m *Leaf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovThetest(uint64(m.Value)) @@ -24576,6 +24662,9 @@ } func (m *DeepTree) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Down != nil { @@ -24597,6 +24686,9 @@ } func (m *ADeepBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Down.Size() @@ -24608,6 +24700,9 @@ } func (m *AndDeepBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -24621,6 +24716,9 @@ } func (m *DeepLeaf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Tree.Size() @@ -24632,6 +24730,9 @@ } func (m *Nil) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -24641,6 +24742,9 @@ } func (m *NidOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovThetest(uint64(m.Field1)) @@ -24651,6 +24755,9 @@ } func (m *NinOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24669,6 +24776,9 @@ } func (m *NidRepEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24693,6 +24803,9 @@ } func (m *NinRepEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24717,6 +24830,9 @@ } func (m *NinOptEnumDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24735,6 +24851,9 @@ } func (m *AnotherNinOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24753,6 +24872,9 @@ } func (m *AnotherNinOptEnumDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24771,6 +24893,9 @@ } func (m *Timer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -24786,6 +24911,9 @@ } func (m *MyExtendable) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24799,6 +24927,9 @@ } func (m *OtherExtenable) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field2 != nil { @@ -24819,6 +24950,9 @@ } func (m *NestedDefinition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24842,6 +24976,9 @@ } func (m *NestedDefinition_NestedMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NestedField1 != nil { @@ -24858,6 +24995,9 @@ } func (m *NestedDefinition_NestedMessage_NestedNestedMsg) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NestedNestedField1 != nil { @@ -24871,6 +25011,9 @@ } func (m *NestedScope) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.A != nil { @@ -24891,6 +25034,9 @@ } func (m *NinOptNativeDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24947,6 +25093,9 @@ } func (m *CustomContainer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.CustomStruct.Size() @@ -24958,6 +25107,9 @@ } func (m *CustomNameNidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -24986,6 +25138,9 @@ } func (m *CustomNameNinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -25042,6 +25197,9 @@ } func (m *CustomNameNinRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.FieldA) > 0 { @@ -25114,6 +25272,9 @@ } func (m *CustomNameNinStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -25160,6 +25321,9 @@ } func (m *CustomNameCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -25189,6 +25353,9 @@ } func (m *CustomNameNinEmbeddedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -25209,6 +25376,9 @@ } func (m *CustomNameEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -25226,6 +25396,9 @@ } func (m *NoExtensionsMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25241,6 +25414,9 @@ } func (m *Unrecognized) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25251,6 +25427,9 @@ } func (m *UnrecognizedWithInner) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Embedded) > 0 { @@ -25270,6 +25449,9 @@ } func (m *UnrecognizedWithInner_Inner) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25279,6 +25461,9 @@ } func (m *UnrecognizedWithEmbed) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.UnrecognizedWithEmbed_Embedded.Size() @@ -25294,6 +25479,9 @@ } func (m *UnrecognizedWithEmbed_Embedded) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25303,6 +25491,9 @@ } func (m *Node) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Label != nil { @@ -25322,6 +25513,9 @@ } func (m *NonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25335,6 +25529,9 @@ } func (m *NidOptNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Field1.Size() @@ -25346,6 +25543,9 @@ } func (m *NinOptNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25359,6 +25559,9 @@ } func (m *NidRepNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -25374,6 +25577,9 @@ } func (m *NinRepNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -25389,6 +25595,9 @@ } func (m *ProtoType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field2 != nil { @@ -27373,8 +27582,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -27422,8 +27633,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -27479,6 +27692,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -27541,6 +27765,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -27603,6 +27838,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -27665,6 +27911,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -27728,6 +27985,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -27792,6 +28060,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -27846,8 +28125,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -27893,8 +28174,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -27940,8 +28223,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -27987,8 +28272,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -28043,6 +28330,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -28206,8 +28498,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -28255,8 +28549,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -28312,6 +28608,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -28374,6 +28681,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -28436,6 +28754,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -28498,6 +28827,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -28561,6 +28901,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -28625,6 +28976,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -28679,8 +29041,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -28726,8 +29090,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -28773,8 +29139,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -28820,8 +29188,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -28876,6 +29246,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -29039,8 +29414,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -29088,8 +29465,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -29145,6 +29524,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -29207,6 +29597,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -29269,6 +29670,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -29331,6 +29743,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -29394,6 +29817,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -29458,6 +29892,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -29512,8 +29957,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -29559,8 +30006,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -29606,8 +30055,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -29653,8 +30104,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -29709,6 +30162,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -29814,8 +30272,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -29863,8 +30323,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -29920,6 +30382,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -29982,6 +30455,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -30044,6 +30528,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -30106,6 +30601,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -30169,6 +30675,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -30233,6 +30750,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -30287,8 +30815,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -30334,8 +30864,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -30381,8 +30913,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -30428,8 +30962,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -30484,6 +31020,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -31169,8 +31710,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -31218,8 +31761,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -31337,6 +31882,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -31400,6 +31956,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -31494,6 +32061,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -31657,8 +32229,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -31706,8 +32280,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -31825,6 +32401,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -31888,6 +32475,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -31982,6 +32580,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -35106,6 +35709,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]TheTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v TheTestEnum for shift := uint(0); ; shift += 7 { @@ -35168,6 +35775,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]YetAnotherTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v YetAnotherTestEnum for shift := uint(0); ; shift += 7 { @@ -35230,6 +35841,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]YetYetAnotherTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v YetYetAnotherTestEnum for shift := uint(0); ; shift += 7 { @@ -35343,6 +35958,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]TheTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v TheTestEnum for shift := uint(0); ; shift += 7 { @@ -35405,6 +36024,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]YetAnotherTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v YetAnotherTestEnum for shift := uint(0); ; shift += 7 { @@ -35467,6 +36090,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]YetYetAnotherTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v YetYetAnotherTestEnum for shift := uint(0); ; shift += 7 { @@ -37760,8 +38387,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldA) == 0 { - m.FieldA = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.FieldA) == 0 { + m.FieldA = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -37809,8 +38438,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldB) == 0 { - m.FieldB = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.FieldB) == 0 { + m.FieldB = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -37866,6 +38497,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldC) == 0 { + m.FieldC = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -37928,6 +38570,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldD) == 0 { + m.FieldD = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -37990,6 +38643,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldE) == 0 { + m.FieldE = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -38052,6 +38716,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldF) == 0 { + m.FieldF = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -38115,6 +38790,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldG) == 0 { + m.FieldG = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -38179,6 +38865,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.FieldH) == 0 { + m.FieldH = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -38233,8 +38930,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldI) == 0 { - m.FieldI = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.FieldI) == 0 { + m.FieldI = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -38280,8 +38979,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldJ) == 0 { - m.FieldJ = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.FieldJ) == 0 { + m.FieldJ = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -38327,8 +39028,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldK) == 0 { - m.FieldK = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.FieldK) == 0 { + m.FieldK = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -38374,8 +39077,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.FieldL) == 0 { - m.FieldL = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.FieldL) == 0 { + m.FieldL = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -38430,6 +39135,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.FieldM) == 0 { + m.FieldM = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -39233,6 +39943,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + if elementCount != 0 && len(m.FieldB) == 0 { + m.FieldB = make([]TheTestEnum, 0, elementCount) + } for iNdEx < postIndex { var v TheTestEnum for shift := uint(0); ; shift += 7 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/data/data.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/data/data.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/data/data.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/data/data.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -273,6 +273,9 @@ return dAtA } func (m *MyMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MyData != 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/deterministic/deterministic.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/deterministic/deterministic.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/deterministic/deterministic.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/deterministic/deterministic.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1138,6 +1138,9 @@ return offset + 1 } func (m *OrderedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringMap) > 0 { @@ -1155,6 +1158,9 @@ } func (m *UnorderedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringMap) > 0 { @@ -1172,6 +1178,9 @@ } func (m *MapNoMarshaler) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringMap) > 0 { @@ -1189,6 +1198,9 @@ } func (m *NestedOrderedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringMap) > 0 { @@ -1210,6 +1222,9 @@ } func (m *NestedMap1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NestedStringMap) > 0 { @@ -1227,6 +1242,9 @@ } func (m *NestedUnorderedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringMap) > 0 { @@ -1248,6 +1266,9 @@ } func (m *NestedMap2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NestedStringMap) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/enumdecl/enumdecl.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/enumdecl/enumdecl.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/enumdecl/enumdecl.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/enumdecl/enumdecl.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -267,6 +267,9 @@ return dAtA } func (m *Message) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.EnumeratedField != 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/enumdecl_all/enumdeclall.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/enumdecl_all/enumdeclall.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/enumdecl_all/enumdeclall.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/enumdecl_all/enumdeclall.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -311,6 +311,9 @@ return dAtA } func (m *Message) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.EnumeratedField != 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/example/example.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/example/example.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/example/example.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/example/example.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -373,257 +373,262 @@ func ExampleDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3985 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x6b, 0x70, 0x1b, 0xd7, - 0x75, 0xd6, 0xe2, 0x41, 0x02, 0x07, 0x20, 0xb8, 0xbc, 0xa4, 0x24, 0x88, 0xb6, 0x49, 0x09, 0x7e, - 0x51, 0xb2, 0x43, 0xa5, 0xb2, 0x9e, 0xab, 0x26, 0x2e, 0x00, 0x42, 0x0c, 0x5c, 0xbe, 0xb2, 0x20, - 0xe3, 0x47, 0xa6, 0xb3, 0xb3, 0x5c, 0x5c, 0x82, 0x2b, 0x2d, 0x76, 0x37, 0xbb, 0x0b, 0x49, 0xd4, - 0xf4, 0x87, 0x3a, 0xee, 0x2b, 0xd3, 0x69, 0xd3, 0xd7, 0x4c, 0x13, 0xd7, 0x71, 0xed, 0xce, 0xa4, - 0x76, 0xd3, 0x67, 0x9a, 0x36, 0x4d, 0xfa, 0xa7, 0xf9, 0x93, 0x56, 0xbf, 0x3a, 0xce, 0xbf, 0x4e, - 0xa7, 0xa3, 0xb1, 0x55, 0xcf, 0xf4, 0xe5, 0x36, 0x6e, 0xeb, 0x1f, 0x99, 0xfa, 0x4f, 0xe6, 0xbe, - 0x16, 0x8b, 0x07, 0xb5, 0x60, 0x66, 0x6c, 0xff, 0x22, 0xf7, 0xdc, 0xf3, 0x7d, 0x7b, 0xee, 0xb9, - 0xe7, 0x9e, 0x73, 0xee, 0x5d, 0xc0, 0x0f, 0x2e, 0xc1, 0xf1, 0x96, 0xe3, 0xb4, 0x2c, 0x7c, 0xda, - 0xf5, 0x9c, 0xc0, 0xd9, 0xee, 0xec, 0x9c, 0x6e, 0x62, 0xdf, 0xf0, 0x4c, 0x37, 0x70, 0xbc, 0x45, - 0x2a, 0x43, 0x93, 0x4c, 0x63, 0x51, 0x68, 0x94, 0x56, 0x61, 0xea, 0x8a, 0x69, 0xe1, 0xa5, 0x50, - 0xb1, 0x81, 0x03, 0x74, 0x11, 0x52, 0x3b, 0xa6, 0x85, 0x8b, 0xd2, 0xf1, 0xe4, 0x42, 0xee, 0xcc, - 0x23, 0x8b, 0x7d, 0xa0, 0xc5, 0x5e, 0xc4, 0x06, 0x11, 0xab, 0x14, 0x51, 0x7a, 0x27, 0x05, 0xd3, - 0x43, 0x46, 0x11, 0x82, 0x94, 0xad, 0xb7, 0x09, 0xa3, 0xb4, 0x90, 0x55, 0xe9, 0xff, 0xa8, 0x08, - 0xe3, 0xae, 0x6e, 0x5c, 0xd3, 0x5b, 0xb8, 0x98, 0xa0, 0x62, 0xf1, 0x88, 0xe6, 0x00, 0x9a, 0xd8, - 0xc5, 0x76, 0x13, 0xdb, 0xc6, 0x5e, 0x31, 0x79, 0x3c, 0xb9, 0x90, 0x55, 0x23, 0x12, 0xf4, 0x04, - 0x4c, 0xb9, 0x9d, 0x6d, 0xcb, 0x34, 0xb4, 0x88, 0x1a, 0x1c, 0x4f, 0x2e, 0xa4, 0x55, 0x99, 0x0d, - 0x2c, 0x75, 0x95, 0x1f, 0x87, 0xc9, 0x1b, 0x58, 0xbf, 0x16, 0x55, 0xcd, 0x51, 0xd5, 0x02, 0x11, - 0x47, 0x14, 0xab, 0x90, 0x6f, 0x63, 0xdf, 0xd7, 0x5b, 0x58, 0x0b, 0xf6, 0x5c, 0x5c, 0x4c, 0xd1, - 0xd9, 0x1f, 0x1f, 0x98, 0x7d, 0xff, 0xcc, 0x73, 0x1c, 0xb5, 0xb9, 0xe7, 0x62, 0x54, 0x86, 0x2c, - 0xb6, 0x3b, 0x6d, 0xc6, 0x90, 0xde, 0xc7, 0x7f, 0x35, 0xbb, 0xd3, 0xee, 0x67, 0xc9, 0x10, 0x18, - 0xa7, 0x18, 0xf7, 0xb1, 0x77, 0xdd, 0x34, 0x70, 0x71, 0x8c, 0x12, 0x3c, 0x3e, 0x40, 0xd0, 0x60, - 0xe3, 0xfd, 0x1c, 0x02, 0x87, 0xaa, 0x90, 0xc5, 0x37, 0x03, 0x6c, 0xfb, 0xa6, 0x63, 0x17, 0xc7, - 0x29, 0xc9, 0xa3, 0x43, 0x56, 0x11, 0x5b, 0xcd, 0x7e, 0x8a, 0x2e, 0x0e, 0x9d, 0x87, 0x71, 0xc7, - 0x0d, 0x4c, 0xc7, 0xf6, 0x8b, 0x99, 0xe3, 0xd2, 0x42, 0xee, 0xcc, 0x83, 0x43, 0x03, 0x61, 0x9d, - 0xe9, 0xa8, 0x42, 0x19, 0xd5, 0x41, 0xf6, 0x9d, 0x8e, 0x67, 0x60, 0xcd, 0x70, 0x9a, 0x58, 0x33, - 0xed, 0x1d, 0xa7, 0x98, 0xa5, 0x04, 0xf3, 0x83, 0x13, 0xa1, 0x8a, 0x55, 0xa7, 0x89, 0xeb, 0xf6, - 0x8e, 0xa3, 0x16, 0xfc, 0x9e, 0x67, 0x74, 0x04, 0xc6, 0xfc, 0x3d, 0x3b, 0xd0, 0x6f, 0x16, 0xf3, - 0x34, 0x42, 0xf8, 0x53, 0xe9, 0x3b, 0x63, 0x30, 0x39, 0x4a, 0x88, 0x5d, 0x86, 0xf4, 0x0e, 0x99, - 0x65, 0x31, 0x71, 0x10, 0x1f, 0x30, 0x4c, 0xaf, 0x13, 0xc7, 0x7e, 0x4c, 0x27, 0x96, 0x21, 0x67, - 0x63, 0x3f, 0xc0, 0x4d, 0x16, 0x11, 0xc9, 0x11, 0x63, 0x0a, 0x18, 0x68, 0x30, 0xa4, 0x52, 0x3f, - 0x56, 0x48, 0x3d, 0x07, 0x93, 0xa1, 0x49, 0x9a, 0xa7, 0xdb, 0x2d, 0x11, 0x9b, 0xa7, 0xe3, 0x2c, - 0x59, 0xac, 0x09, 0x9c, 0x4a, 0x60, 0x6a, 0x01, 0xf7, 0x3c, 0xa3, 0x25, 0x00, 0xc7, 0xc6, 0xce, - 0x8e, 0xd6, 0xc4, 0x86, 0x55, 0xcc, 0xec, 0xe3, 0xa5, 0x75, 0xa2, 0x32, 0xe0, 0x25, 0x87, 0x49, - 0x0d, 0x0b, 0x5d, 0xea, 0x86, 0xda, 0xf8, 0x3e, 0x91, 0xb2, 0xca, 0x36, 0xd9, 0x40, 0xb4, 0x6d, - 0x41, 0xc1, 0xc3, 0x24, 0xee, 0x71, 0x93, 0xcf, 0x2c, 0x4b, 0x8d, 0x58, 0x8c, 0x9d, 0x99, 0xca, - 0x61, 0x6c, 0x62, 0x13, 0x5e, 0xf4, 0x11, 0x3d, 0x0c, 0xa1, 0x40, 0xa3, 0x61, 0x05, 0x34, 0x0b, - 0xe5, 0x85, 0x70, 0x4d, 0x6f, 0xe3, 0xd9, 0x5b, 0x50, 0xe8, 0x75, 0x0f, 0x9a, 0x81, 0xb4, 0x1f, - 0xe8, 0x5e, 0x40, 0xa3, 0x30, 0xad, 0xb2, 0x07, 0x24, 0x43, 0x12, 0xdb, 0x4d, 0x9a, 0xe5, 0xd2, - 0x2a, 0xf9, 0x17, 0xfd, 0x54, 0x77, 0xc2, 0x49, 0x3a, 0xe1, 0xc7, 0x06, 0x57, 0xb4, 0x87, 0xb9, - 0x7f, 0xde, 0xb3, 0x17, 0x60, 0xa2, 0x67, 0x02, 0xa3, 0xbe, 0xba, 0xf4, 0xb3, 0x70, 0x78, 0x28, - 0x35, 0x7a, 0x0e, 0x66, 0x3a, 0xb6, 0x69, 0x07, 0xd8, 0x73, 0x3d, 0x4c, 0x22, 0x96, 0xbd, 0xaa, - 0xf8, 0xaf, 0xe3, 0xfb, 0xc4, 0xdc, 0x56, 0x54, 0x9b, 0xb1, 0xa8, 0xd3, 0x9d, 0x41, 0xe1, 0xa9, - 0x6c, 0xe6, 0xdf, 0xc6, 0xe5, 0xdb, 0xb7, 0x6f, 0xdf, 0x4e, 0x94, 0xbe, 0x3c, 0x06, 0x33, 0xc3, - 0xf6, 0xcc, 0xd0, 0xed, 0x7b, 0x04, 0xc6, 0xec, 0x4e, 0x7b, 0x1b, 0x7b, 0xd4, 0x49, 0x69, 0x95, - 0x3f, 0xa1, 0x32, 0xa4, 0x2d, 0x7d, 0x1b, 0x5b, 0xc5, 0xd4, 0x71, 0x69, 0xa1, 0x70, 0xe6, 0x89, - 0x91, 0x76, 0xe5, 0xe2, 0x0a, 0x81, 0xa8, 0x0c, 0x89, 0x3e, 0x0d, 0x29, 0x9e, 0xa2, 0x09, 0xc3, - 0xa9, 0xd1, 0x18, 0xc8, 0x5e, 0x52, 0x29, 0x0e, 0x3d, 0x00, 0x59, 0xf2, 0x97, 0xc5, 0xc6, 0x18, - 0xb5, 0x39, 0x43, 0x04, 0x24, 0x2e, 0xd0, 0x2c, 0x64, 0xe8, 0x36, 0x69, 0x62, 0x51, 0xda, 0xc2, - 0x67, 0x12, 0x58, 0x4d, 0xbc, 0xa3, 0x77, 0xac, 0x40, 0xbb, 0xae, 0x5b, 0x1d, 0x4c, 0x03, 0x3e, - 0xab, 0xe6, 0xb9, 0xf0, 0x73, 0x44, 0x86, 0xe6, 0x21, 0xc7, 0x76, 0x95, 0x69, 0x37, 0xf1, 0x4d, - 0x9a, 0x3d, 0xd3, 0x2a, 0xdb, 0x68, 0x75, 0x22, 0x21, 0xaf, 0xbf, 0xea, 0x3b, 0xb6, 0x08, 0x4d, - 0xfa, 0x0a, 0x22, 0xa0, 0xaf, 0xbf, 0xd0, 0x9f, 0xb8, 0x1f, 0x1a, 0x3e, 0xbd, 0xfe, 0x98, 0x2a, - 0x7d, 0x2b, 0x01, 0x29, 0x9a, 0x2f, 0x26, 0x21, 0xb7, 0xf9, 0xfc, 0x46, 0x4d, 0x5b, 0x5a, 0xdf, - 0xaa, 0xac, 0xd4, 0x64, 0x09, 0x15, 0x00, 0xa8, 0xe0, 0xca, 0xca, 0x7a, 0x79, 0x53, 0x4e, 0x84, - 0xcf, 0xf5, 0xb5, 0xcd, 0xf3, 0x67, 0xe5, 0x64, 0x08, 0xd8, 0x62, 0x82, 0x54, 0x54, 0xe1, 0xa9, - 0x33, 0x72, 0x1a, 0xc9, 0x90, 0x67, 0x04, 0xf5, 0xe7, 0x6a, 0x4b, 0xe7, 0xcf, 0xca, 0x63, 0xbd, - 0x92, 0xa7, 0xce, 0xc8, 0xe3, 0x68, 0x02, 0xb2, 0x54, 0x52, 0x59, 0x5f, 0x5f, 0x91, 0x33, 0x21, - 0x67, 0x63, 0x53, 0xad, 0xaf, 0x2d, 0xcb, 0xd9, 0x90, 0x73, 0x59, 0x5d, 0xdf, 0xda, 0x90, 0x21, - 0x64, 0x58, 0xad, 0x35, 0x1a, 0xe5, 0xe5, 0x9a, 0x9c, 0x0b, 0x35, 0x2a, 0xcf, 0x6f, 0xd6, 0x1a, - 0x72, 0xbe, 0xc7, 0xac, 0xa7, 0xce, 0xc8, 0x13, 0xe1, 0x2b, 0x6a, 0x6b, 0x5b, 0xab, 0x72, 0x01, - 0x4d, 0xc1, 0x04, 0x7b, 0x85, 0x30, 0x62, 0xb2, 0x4f, 0x74, 0xfe, 0xac, 0x2c, 0x77, 0x0d, 0x61, - 0x2c, 0x53, 0x3d, 0x82, 0xf3, 0x67, 0x65, 0x54, 0xaa, 0x42, 0x9a, 0x46, 0x17, 0x42, 0x50, 0x58, - 0x29, 0x57, 0x6a, 0x2b, 0xda, 0xfa, 0xc6, 0x66, 0x7d, 0x7d, 0xad, 0xbc, 0x22, 0x4b, 0x5d, 0x99, - 0x5a, 0xfb, 0xec, 0x56, 0x5d, 0xad, 0x2d, 0xc9, 0x89, 0xa8, 0x6c, 0xa3, 0x56, 0xde, 0xac, 0x2d, - 0xc9, 0xc9, 0x92, 0x01, 0x33, 0xc3, 0xf2, 0xe4, 0xd0, 0x9d, 0x11, 0x59, 0xe2, 0xc4, 0x3e, 0x4b, - 0x4c, 0xb9, 0x06, 0x96, 0xf8, 0x5f, 0x12, 0x30, 0x3d, 0xa4, 0x56, 0x0c, 0x7d, 0xc9, 0xd3, 0x90, - 0x66, 0x21, 0xca, 0xaa, 0xe7, 0xc9, 0xa1, 0x45, 0x87, 0x06, 0xec, 0x40, 0x05, 0xa5, 0xb8, 0x68, - 0x07, 0x91, 0xdc, 0xa7, 0x83, 0x20, 0x14, 0x03, 0x39, 0xfd, 0x67, 0x06, 0x72, 0x3a, 0x2b, 0x7b, - 0xe7, 0x47, 0x29, 0x7b, 0x54, 0x76, 0xb0, 0xdc, 0x9e, 0x1e, 0x92, 0xdb, 0x2f, 0xc3, 0xd4, 0x00, - 0xd1, 0xc8, 0x39, 0xf6, 0x45, 0x09, 0x8a, 0xfb, 0x39, 0x27, 0x26, 0xd3, 0x25, 0x7a, 0x32, 0xdd, - 0xe5, 0x7e, 0x0f, 0x9e, 0xd8, 0x7f, 0x11, 0x06, 0xd6, 0xfa, 0x75, 0x09, 0x8e, 0x0c, 0xef, 0x14, - 0x87, 0xda, 0xf0, 0x69, 0x18, 0x6b, 0xe3, 0x60, 0xd7, 0x11, 0xdd, 0xd2, 0x63, 0x43, 0x6a, 0x30, - 0x19, 0xee, 0x5f, 0x6c, 0x8e, 0x8a, 0x16, 0xf1, 0xe4, 0x7e, 0xed, 0x1e, 0xb3, 0x66, 0xc0, 0xd2, - 0x2f, 0x26, 0xe0, 0xf0, 0x50, 0xf2, 0xa1, 0x86, 0x3e, 0x04, 0x60, 0xda, 0x6e, 0x27, 0x60, 0x1d, - 0x11, 0x4b, 0xb0, 0x59, 0x2a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0x4e, 0x10, 0x8e, 0x27, 0xe9, 0x38, - 0x30, 0x11, 0x55, 0xb8, 0xd8, 0x35, 0x34, 0x45, 0x0d, 0x9d, 0xdb, 0x67, 0xa6, 0x03, 0x81, 0xf9, - 0x49, 0x90, 0x0d, 0xcb, 0xc4, 0x76, 0xa0, 0xf9, 0x81, 0x87, 0xf5, 0xb6, 0x69, 0xb7, 0x68, 0x05, - 0xc9, 0x28, 0xe9, 0x1d, 0xdd, 0xf2, 0xb1, 0x3a, 0xc9, 0x86, 0x1b, 0x62, 0x94, 0x20, 0x68, 0x00, - 0x79, 0x11, 0xc4, 0x58, 0x0f, 0x82, 0x0d, 0x87, 0x88, 0xd2, 0x37, 0x33, 0x90, 0x8b, 0xf4, 0xd5, - 0xe8, 0x04, 0xe4, 0xaf, 0xea, 0xd7, 0x75, 0x4d, 0x9c, 0x95, 0x98, 0x27, 0x72, 0x44, 0xb6, 0xc1, - 0xcf, 0x4b, 0x9f, 0x84, 0x19, 0xaa, 0xe2, 0x74, 0x02, 0xec, 0x69, 0x86, 0xa5, 0xfb, 0x3e, 0x75, - 0x5a, 0x86, 0xaa, 0x22, 0x32, 0xb6, 0x4e, 0x86, 0xaa, 0x62, 0x04, 0x9d, 0x83, 0x69, 0x8a, 0x68, - 0x77, 0xac, 0xc0, 0x74, 0x2d, 0xac, 0x91, 0xd3, 0x9b, 0x4f, 0x2b, 0x49, 0x68, 0xd9, 0x14, 0xd1, - 0x58, 0xe5, 0x0a, 0xc4, 0x22, 0x1f, 0x2d, 0xc1, 0x43, 0x14, 0xd6, 0xc2, 0x36, 0xf6, 0xf4, 0x00, - 0x6b, 0xf8, 0x0b, 0x1d, 0xdd, 0xf2, 0x35, 0xdd, 0x6e, 0x6a, 0xbb, 0xba, 0xbf, 0x5b, 0x9c, 0x21, - 0x04, 0x95, 0x44, 0x51, 0x52, 0x8f, 0x11, 0xc5, 0x65, 0xae, 0x57, 0xa3, 0x6a, 0x65, 0xbb, 0xf9, - 0x19, 0xdd, 0xdf, 0x45, 0x0a, 0x1c, 0xa1, 0x2c, 0x7e, 0xe0, 0x99, 0x76, 0x4b, 0x33, 0x76, 0xb1, - 0x71, 0x4d, 0xeb, 0x04, 0x3b, 0x17, 0x8b, 0x0f, 0x44, 0xdf, 0x4f, 0x2d, 0x6c, 0x50, 0x9d, 0x2a, - 0x51, 0xd9, 0x0a, 0x76, 0x2e, 0xa2, 0x06, 0xe4, 0xc9, 0x62, 0xb4, 0xcd, 0x5b, 0x58, 0xdb, 0x71, - 0x3c, 0x5a, 0x1a, 0x0b, 0x43, 0x52, 0x53, 0xc4, 0x83, 0x8b, 0xeb, 0x1c, 0xb0, 0xea, 0x34, 0xb1, - 0x92, 0x6e, 0x6c, 0xd4, 0x6a, 0x4b, 0x6a, 0x4e, 0xb0, 0x5c, 0x71, 0x3c, 0x12, 0x50, 0x2d, 0x27, - 0x74, 0x70, 0x8e, 0x05, 0x54, 0xcb, 0x11, 0xee, 0x3d, 0x07, 0xd3, 0x86, 0xc1, 0xe6, 0x6c, 0x1a, - 0x1a, 0x3f, 0x63, 0xf9, 0x45, 0xb9, 0xc7, 0x59, 0x86, 0xb1, 0xcc, 0x14, 0x78, 0x8c, 0xfb, 0xe8, - 0x12, 0x1c, 0xee, 0x3a, 0x2b, 0x0a, 0x9c, 0x1a, 0x98, 0x65, 0x3f, 0xf4, 0x1c, 0x4c, 0xbb, 0x7b, - 0x83, 0x40, 0xd4, 0xf3, 0x46, 0x77, 0xaf, 0x1f, 0x76, 0x01, 0x66, 0xdc, 0x5d, 0x77, 0x10, 0x77, - 0x2a, 0x8a, 0x43, 0xee, 0xae, 0xdb, 0x0f, 0x7c, 0x94, 0x1e, 0xb8, 0x3d, 0x6c, 0xe8, 0x01, 0x6e, - 0x16, 0x8f, 0x46, 0xd5, 0x23, 0x03, 0xe8, 0x34, 0xc8, 0x86, 0xa1, 0x61, 0x5b, 0xdf, 0xb6, 0xb0, - 0xa6, 0x7b, 0xd8, 0xd6, 0xfd, 0xe2, 0x7c, 0x54, 0xb9, 0x60, 0x18, 0x35, 0x3a, 0x5a, 0xa6, 0x83, - 0xe8, 0x14, 0x4c, 0x39, 0xdb, 0x57, 0x0d, 0x16, 0x92, 0x9a, 0xeb, 0xe1, 0x1d, 0xf3, 0x66, 0xf1, - 0x11, 0xea, 0xdf, 0x49, 0x32, 0x40, 0x03, 0x72, 0x83, 0x8a, 0xd1, 0x49, 0x90, 0x0d, 0x7f, 0x57, - 0xf7, 0x5c, 0x9a, 0x93, 0x7d, 0x57, 0x37, 0x70, 0xf1, 0x51, 0xa6, 0xca, 0xe4, 0x6b, 0x42, 0x4c, - 0xb6, 0x84, 0x7f, 0xc3, 0xdc, 0x09, 0x04, 0xe3, 0xe3, 0x6c, 0x4b, 0x50, 0x19, 0x67, 0x5b, 0x00, - 0x99, 0xb8, 0xa2, 0xe7, 0xc5, 0x0b, 0x54, 0xad, 0xe0, 0xee, 0xba, 0xd1, 0xf7, 0x3e, 0x0c, 0x13, - 0x44, 0xb3, 0xfb, 0xd2, 0x93, 0xac, 0x21, 0x73, 0x77, 0x23, 0x6f, 0xfc, 0xd0, 0x7a, 0xe3, 0x92, - 0x02, 0xf9, 0x68, 0x7c, 0xa2, 0x2c, 0xb0, 0x08, 0x95, 0x25, 0xd2, 0xac, 0x54, 0xd7, 0x97, 0x48, - 0x9b, 0xf1, 0x42, 0x4d, 0x4e, 0x90, 0x76, 0x67, 0xa5, 0xbe, 0x59, 0xd3, 0xd4, 0xad, 0xb5, 0xcd, - 0xfa, 0x6a, 0x4d, 0x4e, 0x46, 0xfb, 0xea, 0xef, 0x25, 0xa0, 0xd0, 0x7b, 0x44, 0x42, 0x3f, 0x09, - 0x47, 0xc5, 0x7d, 0x86, 0x8f, 0x03, 0xed, 0x86, 0xe9, 0xd1, 0x2d, 0xd3, 0xd6, 0x59, 0xf9, 0x0a, - 0x17, 0x6d, 0x86, 0x6b, 0x35, 0x70, 0xf0, 0xac, 0xe9, 0x91, 0x0d, 0xd1, 0xd6, 0x03, 0xb4, 0x02, - 0xf3, 0xb6, 0xa3, 0xf9, 0x81, 0x6e, 0x37, 0x75, 0xaf, 0xa9, 0x75, 0x6f, 0x92, 0x34, 0xdd, 0x30, - 0xb0, 0xef, 0x3b, 0xac, 0x54, 0x85, 0x2c, 0x0f, 0xda, 0x4e, 0x83, 0x2b, 0x77, 0x73, 0x78, 0x99, - 0xab, 0xf6, 0x05, 0x58, 0x72, 0xbf, 0x00, 0x7b, 0x00, 0xb2, 0x6d, 0xdd, 0xd5, 0xb0, 0x1d, 0x78, - 0x7b, 0xb4, 0x31, 0xce, 0xa8, 0x99, 0xb6, 0xee, 0xd6, 0xc8, 0xf3, 0x47, 0x73, 0x3e, 0xf9, 0xe7, - 0x24, 0xe4, 0xa3, 0xcd, 0x31, 0x39, 0x6b, 0x18, 0xb4, 0x8e, 0x48, 0x34, 0xd3, 0x3c, 0x7c, 0xdf, - 0x56, 0x7a, 0xb1, 0x4a, 0x0a, 0x8c, 0x32, 0xc6, 0x5a, 0x56, 0x95, 0x21, 0x49, 0x71, 0x27, 0xb9, - 0x05, 0xb3, 0x16, 0x21, 0xa3, 0xf2, 0x27, 0xb4, 0x0c, 0x63, 0x57, 0x7d, 0xca, 0x3d, 0x46, 0xb9, - 0x1f, 0xb9, 0x3f, 0xf7, 0x33, 0x0d, 0x4a, 0x9e, 0x7d, 0xa6, 0xa1, 0xad, 0xad, 0xab, 0xab, 0xe5, - 0x15, 0x95, 0xc3, 0xd1, 0x31, 0x48, 0x59, 0xfa, 0xad, 0xbd, 0xde, 0x52, 0x44, 0x45, 0xa3, 0x3a, - 0xfe, 0x18, 0xa4, 0x6e, 0x60, 0xfd, 0x5a, 0x6f, 0x01, 0xa0, 0xa2, 0x0f, 0x31, 0xf4, 0x4f, 0x43, - 0x9a, 0xfa, 0x0b, 0x01, 0x70, 0x8f, 0xc9, 0x87, 0x50, 0x06, 0x52, 0xd5, 0x75, 0x95, 0x84, 0xbf, - 0x0c, 0x79, 0x26, 0xd5, 0x36, 0xea, 0xb5, 0x6a, 0x4d, 0x4e, 0x94, 0xce, 0xc1, 0x18, 0x73, 0x02, - 0xd9, 0x1a, 0xa1, 0x1b, 0xe4, 0x43, 0xfc, 0x91, 0x73, 0x48, 0x62, 0x74, 0x6b, 0xb5, 0x52, 0x53, - 0xe5, 0x44, 0x74, 0x79, 0x7d, 0xc8, 0x47, 0xfb, 0xe2, 0x8f, 0x26, 0xa6, 0xfe, 0x46, 0x82, 0x5c, - 0xa4, 0xcf, 0x25, 0x0d, 0x8a, 0x6e, 0x59, 0xce, 0x0d, 0x4d, 0xb7, 0x4c, 0xdd, 0xe7, 0x41, 0x01, - 0x54, 0x54, 0x26, 0x92, 0x51, 0x17, 0xed, 0x23, 0x31, 0xfe, 0x15, 0x09, 0xe4, 0xfe, 0x16, 0xb3, - 0xcf, 0x40, 0xe9, 0x63, 0x35, 0xf0, 0x65, 0x09, 0x0a, 0xbd, 0x7d, 0x65, 0x9f, 0x79, 0x27, 0x3e, - 0x56, 0xf3, 0xde, 0x4a, 0xc0, 0x44, 0x4f, 0x37, 0x39, 0xaa, 0x75, 0x5f, 0x80, 0x29, 0xb3, 0x89, - 0xdb, 0xae, 0x13, 0x60, 0xdb, 0xd8, 0xd3, 0x2c, 0x7c, 0x1d, 0x5b, 0xc5, 0x12, 0x4d, 0x14, 0xa7, - 0xef, 0xdf, 0xaf, 0x2e, 0xd6, 0xbb, 0xb8, 0x15, 0x02, 0x53, 0xa6, 0xeb, 0x4b, 0xb5, 0xd5, 0x8d, - 0xf5, 0xcd, 0xda, 0x5a, 0xf5, 0x79, 0x6d, 0x6b, 0xed, 0xa7, 0xd7, 0xd6, 0x9f, 0x5d, 0x53, 0x65, - 0xb3, 0x4f, 0xed, 0x43, 0xdc, 0xea, 0x1b, 0x20, 0xf7, 0x1b, 0x85, 0x8e, 0xc2, 0x30, 0xb3, 0xe4, - 0x43, 0x68, 0x1a, 0x26, 0xd7, 0xd6, 0xb5, 0x46, 0x7d, 0xa9, 0xa6, 0xd5, 0xae, 0x5c, 0xa9, 0x55, - 0x37, 0x1b, 0xec, 0x06, 0x22, 0xd4, 0xde, 0xec, 0xdd, 0xd4, 0x2f, 0x25, 0x61, 0x7a, 0x88, 0x25, - 0xa8, 0xcc, 0xcf, 0x0e, 0xec, 0x38, 0xf3, 0x89, 0x51, 0xac, 0x5f, 0x24, 0x25, 0x7f, 0x43, 0xf7, - 0x02, 0x7e, 0xd4, 0x38, 0x09, 0xc4, 0x4b, 0x76, 0x60, 0xee, 0x98, 0xd8, 0xe3, 0x17, 0x36, 0xec, - 0x40, 0x31, 0xd9, 0x95, 0xb3, 0x3b, 0x9b, 0x27, 0x01, 0xb9, 0x8e, 0x6f, 0x06, 0xe6, 0x75, 0xac, - 0x99, 0xb6, 0xb8, 0xdd, 0x21, 0x07, 0x8c, 0x94, 0x2a, 0x8b, 0x91, 0xba, 0x1d, 0x84, 0xda, 0x36, - 0x6e, 0xe9, 0x7d, 0xda, 0x24, 0x81, 0x27, 0x55, 0x59, 0x8c, 0x84, 0xda, 0x27, 0x20, 0xdf, 0x74, - 0x3a, 0xa4, 0xeb, 0x62, 0x7a, 0xa4, 0x5e, 0x48, 0x6a, 0x8e, 0xc9, 0x42, 0x15, 0xde, 0x4f, 0x77, - 0xaf, 0x95, 0xf2, 0x6a, 0x8e, 0xc9, 0x98, 0xca, 0xe3, 0x30, 0xa9, 0xb7, 0x5a, 0x1e, 0x21, 0x17, - 0x44, 0xec, 0x84, 0x50, 0x08, 0xc5, 0x54, 0x71, 0xf6, 0x19, 0xc8, 0x08, 0x3f, 0x90, 0x92, 0x4c, - 0x3c, 0xa1, 0xb9, 0xec, 0xd8, 0x9b, 0x58, 0xc8, 0xaa, 0x19, 0x5b, 0x0c, 0x9e, 0x80, 0xbc, 0xe9, - 0x6b, 0xdd, 0x5b, 0xf2, 0xc4, 0xf1, 0xc4, 0x42, 0x46, 0xcd, 0x99, 0x7e, 0x78, 0xc3, 0x58, 0x7a, - 0x3d, 0x01, 0x85, 0xde, 0x5b, 0x7e, 0xb4, 0x04, 0x19, 0xcb, 0x31, 0x74, 0x1a, 0x5a, 0xec, 0x13, - 0xd3, 0x42, 0xcc, 0x87, 0x81, 0xc5, 0x15, 0xae, 0xaf, 0x86, 0xc8, 0xd9, 0x7f, 0x90, 0x20, 0x23, - 0xc4, 0xe8, 0x08, 0xa4, 0x5c, 0x3d, 0xd8, 0xa5, 0x74, 0xe9, 0x4a, 0x42, 0x96, 0x54, 0xfa, 0x4c, - 0xe4, 0xbe, 0xab, 0xdb, 0x34, 0x04, 0xb8, 0x9c, 0x3c, 0x93, 0x75, 0xb5, 0xb0, 0xde, 0xa4, 0xc7, - 0x0f, 0xa7, 0xdd, 0xc6, 0x76, 0xe0, 0x8b, 0x75, 0xe5, 0xf2, 0x2a, 0x17, 0xa3, 0x27, 0x60, 0x2a, - 0xf0, 0x74, 0xd3, 0xea, 0xd1, 0x4d, 0x51, 0x5d, 0x59, 0x0c, 0x84, 0xca, 0x0a, 0x1c, 0x13, 0xbc, - 0x4d, 0x1c, 0xe8, 0xc6, 0x2e, 0x6e, 0x76, 0x41, 0x63, 0xf4, 0x9a, 0xe1, 0x28, 0x57, 0x58, 0xe2, - 0xe3, 0x02, 0x5b, 0xfa, 0xbe, 0x04, 0x53, 0xe2, 0xc0, 0xd4, 0x0c, 0x9d, 0xb5, 0x0a, 0xa0, 0xdb, - 0xb6, 0x13, 0x44, 0xdd, 0x35, 0x18, 0xca, 0x03, 0xb8, 0xc5, 0x72, 0x08, 0x52, 0x23, 0x04, 0xb3, - 0x6d, 0x80, 0xee, 0xc8, 0xbe, 0x6e, 0x9b, 0x87, 0x1c, 0xff, 0x84, 0x43, 0xbf, 0x03, 0xb2, 0x23, - 0x36, 0x30, 0x11, 0x39, 0x59, 0xa1, 0x19, 0x48, 0x6f, 0xe3, 0x96, 0x69, 0xf3, 0x8b, 0x59, 0xf6, - 0x20, 0x2e, 0x42, 0x52, 0xe1, 0x45, 0x48, 0xe5, 0xf3, 0x30, 0x6d, 0x38, 0xed, 0x7e, 0x73, 0x2b, - 0x72, 0xdf, 0x31, 0xdf, 0xff, 0x8c, 0xf4, 0x02, 0x74, 0x5b, 0xcc, 0x1f, 0x4a, 0xd2, 0xef, 0x27, - 0x92, 0xcb, 0x1b, 0x95, 0xaf, 0x27, 0x66, 0x97, 0x19, 0x74, 0x43, 0xcc, 0x54, 0xc5, 0x3b, 0x16, - 0x36, 0x88, 0xf5, 0xf0, 0xb5, 0x05, 0xf8, 0x44, 0xcb, 0x0c, 0x76, 0x3b, 0xdb, 0x8b, 0x86, 0xd3, - 0x3e, 0xdd, 0x72, 0x5a, 0x4e, 0xf7, 0xd3, 0x27, 0x79, 0xa2, 0x0f, 0xf4, 0x3f, 0xfe, 0xf9, 0x33, - 0x1b, 0x4a, 0x67, 0x63, 0xbf, 0x95, 0x2a, 0x6b, 0x30, 0xcd, 0x95, 0x35, 0xfa, 0xfd, 0x85, 0x9d, - 0x22, 0xd0, 0x7d, 0xef, 0xb0, 0x8a, 0xdf, 0x78, 0x87, 0x96, 0x6b, 0x75, 0x8a, 0x43, 0xc9, 0x18, - 0x3b, 0x68, 0x28, 0x2a, 0x1c, 0xee, 0xe1, 0x63, 0x5b, 0x13, 0x7b, 0x31, 0x8c, 0xdf, 0xe3, 0x8c, - 0xd3, 0x11, 0xc6, 0x06, 0x87, 0x2a, 0x55, 0x98, 0x38, 0x08, 0xd7, 0xdf, 0x71, 0xae, 0x3c, 0x8e, - 0x92, 0x2c, 0xc3, 0x24, 0x25, 0x31, 0x3a, 0x7e, 0xe0, 0xb4, 0x69, 0xde, 0xbb, 0x3f, 0xcd, 0xdf, - 0xbf, 0xc3, 0xf6, 0x4a, 0x81, 0xc0, 0xaa, 0x21, 0x4a, 0x51, 0x80, 0x7e, 0x72, 0x6a, 0x62, 0xc3, - 0x8a, 0x61, 0xb8, 0xc3, 0x0d, 0x09, 0xf5, 0x95, 0xcf, 0xc1, 0x0c, 0xf9, 0x9f, 0xa6, 0xa5, 0xa8, - 0x25, 0xf1, 0x17, 0x5e, 0xc5, 0xef, 0xbf, 0xc8, 0xb6, 0xe3, 0x74, 0x48, 0x10, 0xb1, 0x29, 0xb2, - 0x8a, 0x2d, 0x1c, 0x04, 0xd8, 0xf3, 0x35, 0xdd, 0x1a, 0x66, 0x5e, 0xe4, 0xc6, 0xa0, 0xf8, 0x95, - 0x77, 0x7b, 0x57, 0x71, 0x99, 0x21, 0xcb, 0x96, 0xa5, 0x6c, 0xc1, 0xd1, 0x21, 0x51, 0x31, 0x02, - 0xe7, 0x4b, 0x9c, 0x73, 0x66, 0x20, 0x32, 0x08, 0xed, 0x06, 0x08, 0x79, 0xb8, 0x96, 0x23, 0x70, - 0xfe, 0x2e, 0xe7, 0x44, 0x1c, 0x2b, 0x96, 0x94, 0x30, 0x3e, 0x03, 0x53, 0xd7, 0xb1, 0xb7, 0xed, - 0xf8, 0xfc, 0x96, 0x66, 0x04, 0xba, 0x97, 0x39, 0xdd, 0x24, 0x07, 0xd2, 0x6b, 0x1b, 0xc2, 0x75, - 0x09, 0x32, 0x3b, 0xba, 0x81, 0x47, 0xa0, 0xf8, 0x2a, 0xa7, 0x18, 0x27, 0xfa, 0x04, 0x5a, 0x86, - 0x7c, 0xcb, 0xe1, 0x95, 0x29, 0x1e, 0xfe, 0x0a, 0x87, 0xe7, 0x04, 0x86, 0x53, 0xb8, 0x8e, 0xdb, - 0xb1, 0x48, 0xd9, 0x8a, 0xa7, 0xf8, 0x3d, 0x41, 0x21, 0x30, 0x9c, 0xe2, 0x00, 0x6e, 0x7d, 0x55, - 0x50, 0xf8, 0x11, 0x7f, 0x3e, 0x0d, 0x39, 0xc7, 0xb6, 0xf6, 0x1c, 0x7b, 0x14, 0x23, 0x5e, 0xe3, - 0x0c, 0xc0, 0x21, 0x84, 0xe0, 0x32, 0x64, 0x47, 0x5d, 0x88, 0xaf, 0xbd, 0x2b, 0xb6, 0x87, 0x58, - 0x81, 0x65, 0x98, 0x14, 0x09, 0xca, 0x74, 0xec, 0x11, 0x28, 0xfe, 0x80, 0x53, 0x14, 0x22, 0x30, - 0x3e, 0x8d, 0x00, 0xfb, 0x41, 0x0b, 0x8f, 0x42, 0xf2, 0xba, 0x98, 0x06, 0x87, 0x70, 0x57, 0x6e, - 0x63, 0xdb, 0xd8, 0x1d, 0x8d, 0xe1, 0x0d, 0xe1, 0x4a, 0x81, 0x21, 0x14, 0x55, 0x98, 0x68, 0xeb, - 0x9e, 0xbf, 0xab, 0x5b, 0x23, 0x2d, 0xc7, 0x1f, 0x72, 0x8e, 0x7c, 0x08, 0xe2, 0x1e, 0xe9, 0xd8, - 0x07, 0xa1, 0xf9, 0xba, 0xf0, 0x48, 0x04, 0xc6, 0xb7, 0x9e, 0x1f, 0xd0, 0x2b, 0xad, 0x83, 0xb0, - 0xfd, 0x91, 0xd8, 0x7a, 0x0c, 0xbb, 0x1a, 0x65, 0xbc, 0x0c, 0x59, 0xdf, 0xbc, 0x35, 0x12, 0xcd, - 0x1f, 0x8b, 0x95, 0xa6, 0x00, 0x02, 0x7e, 0x1e, 0x8e, 0x0d, 0x2d, 0x13, 0x23, 0x90, 0xfd, 0x09, - 0x27, 0x3b, 0x32, 0xa4, 0x54, 0xf0, 0x94, 0x70, 0x50, 0xca, 0x3f, 0x15, 0x29, 0x01, 0xf7, 0x71, - 0x6d, 0x90, 0xb3, 0x82, 0xaf, 0xef, 0x1c, 0xcc, 0x6b, 0x7f, 0x26, 0xbc, 0xc6, 0xb0, 0x3d, 0x5e, - 0xdb, 0x84, 0x23, 0x9c, 0xf1, 0x60, 0xeb, 0xfa, 0xe7, 0x22, 0xb1, 0x32, 0xf4, 0x56, 0xef, 0xea, - 0x7e, 0x1e, 0x66, 0x43, 0x77, 0x8a, 0xa6, 0xd4, 0xd7, 0xda, 0xba, 0x3b, 0x02, 0xf3, 0x37, 0x38, - 0xb3, 0xc8, 0xf8, 0x61, 0x57, 0xeb, 0xaf, 0xea, 0x2e, 0x21, 0x7f, 0x0e, 0x8a, 0x82, 0xbc, 0x63, - 0x7b, 0xd8, 0x70, 0x5a, 0xb6, 0x79, 0x0b, 0x37, 0x47, 0xa0, 0xfe, 0x8b, 0xbe, 0xa5, 0xda, 0x8a, - 0xc0, 0x09, 0x73, 0x1d, 0xe4, 0xb0, 0x57, 0xd1, 0xcc, 0xb6, 0xeb, 0x78, 0x41, 0x0c, 0xe3, 0x37, - 0xc5, 0x4a, 0x85, 0xb8, 0x3a, 0x85, 0x29, 0x35, 0x28, 0xd0, 0xc7, 0x51, 0x43, 0xf2, 0x2f, 0x39, - 0xd1, 0x44, 0x17, 0xc5, 0x13, 0x87, 0xe1, 0xb4, 0x5d, 0xdd, 0x1b, 0x25, 0xff, 0xfd, 0x95, 0x48, - 0x1c, 0x1c, 0xc2, 0x13, 0x47, 0xb0, 0xe7, 0x62, 0x52, 0xed, 0x47, 0x60, 0xf8, 0x96, 0x48, 0x1c, - 0x02, 0xc3, 0x29, 0x44, 0xc3, 0x30, 0x02, 0xc5, 0x5f, 0x0b, 0x0a, 0x81, 0x21, 0x14, 0x9f, 0xed, - 0x16, 0x5a, 0x0f, 0xb7, 0x4c, 0x3f, 0xf0, 0x58, 0x2b, 0x7c, 0x7f, 0xaa, 0x6f, 0xbf, 0xdb, 0xdb, - 0x84, 0xa9, 0x11, 0x28, 0xc9, 0x44, 0xfc, 0x0a, 0x95, 0x9e, 0x94, 0xe2, 0x0d, 0xfb, 0x8e, 0xc8, - 0x44, 0x11, 0x18, 0xdb, 0x9f, 0x93, 0x7d, 0xbd, 0x0a, 0x8a, 0xfb, 0x21, 0x4c, 0xf1, 0xe7, 0xde, - 0xe7, 0x5c, 0xbd, 0xad, 0x8a, 0xb2, 0x42, 0x02, 0xa8, 0xb7, 0xa1, 0x88, 0x27, 0x7b, 0xf1, 0xfd, - 0x30, 0x86, 0x7a, 0xfa, 0x09, 0xe5, 0x0a, 0x4c, 0xf4, 0x34, 0x13, 0xf1, 0x54, 0x3f, 0xcf, 0xa9, - 0xf2, 0xd1, 0x5e, 0x42, 0x39, 0x07, 0x29, 0xd2, 0x18, 0xc4, 0xc3, 0x7f, 0x81, 0xc3, 0xa9, 0xba, - 0xf2, 0x29, 0xc8, 0x88, 0x86, 0x20, 0x1e, 0xfa, 0x8b, 0x1c, 0x1a, 0x42, 0x08, 0x5c, 0x34, 0x03, - 0xf1, 0xf0, 0x5f, 0x12, 0x70, 0x01, 0x21, 0xf0, 0xd1, 0x5d, 0xf8, 0xdd, 0x5f, 0x49, 0xf1, 0x84, - 0x2e, 0x7c, 0x77, 0x19, 0xc6, 0x79, 0x17, 0x10, 0x8f, 0xfe, 0x22, 0x7f, 0xb9, 0x40, 0x28, 0x17, - 0x20, 0x3d, 0xa2, 0xc3, 0x7f, 0x95, 0x43, 0x99, 0xbe, 0x52, 0x85, 0x5c, 0xa4, 0xf2, 0xc7, 0xc3, - 0x7f, 0x8d, 0xc3, 0xa3, 0x28, 0x62, 0x3a, 0xaf, 0xfc, 0xf1, 0x04, 0x5f, 0x12, 0xa6, 0x73, 0x04, - 0x71, 0x9b, 0x28, 0xfa, 0xf1, 0xe8, 0x5f, 0x17, 0x5e, 0x17, 0x10, 0xe5, 0x69, 0xc8, 0x86, 0x89, - 0x3c, 0x1e, 0xff, 0x1b, 0x1c, 0xdf, 0xc5, 0x10, 0x0f, 0x44, 0x0a, 0x49, 0x3c, 0xc5, 0x6f, 0x0a, - 0x0f, 0x44, 0x50, 0x64, 0x1b, 0xf5, 0x37, 0x07, 0xf1, 0x4c, 0xbf, 0x25, 0xb6, 0x51, 0x5f, 0x6f, - 0x40, 0x56, 0x93, 0xe6, 0xd3, 0x78, 0x8a, 0xdf, 0x16, 0xab, 0x49, 0xf5, 0x89, 0x19, 0xfd, 0xd5, - 0x36, 0x9e, 0xe3, 0x77, 0x84, 0x19, 0x7d, 0xc5, 0x56, 0xd9, 0x00, 0x34, 0x58, 0x69, 0xe3, 0xf9, - 0xbe, 0xcc, 0xf9, 0xa6, 0x06, 0x0a, 0xad, 0xf2, 0x2c, 0x1c, 0x19, 0x5e, 0x65, 0xe3, 0x59, 0xbf, - 0xf2, 0x7e, 0xdf, 0xb9, 0x28, 0x5a, 0x64, 0x95, 0xcd, 0x6e, 0xba, 0x8e, 0x56, 0xd8, 0x78, 0xda, - 0x97, 0xde, 0xef, 0xcd, 0xd8, 0xd1, 0x02, 0xab, 0x94, 0x01, 0xba, 0xc5, 0x2d, 0x9e, 0xeb, 0x65, - 0xce, 0x15, 0x01, 0x91, 0xad, 0xc1, 0x6b, 0x5b, 0x3c, 0xfe, 0xab, 0x62, 0x6b, 0x70, 0x04, 0xd9, - 0x1a, 0xa2, 0xac, 0xc5, 0xa3, 0x5f, 0x11, 0x5b, 0x43, 0x40, 0x48, 0x64, 0x47, 0x2a, 0x47, 0x3c, - 0xc3, 0x6b, 0x22, 0xb2, 0x23, 0x28, 0xe5, 0x32, 0x64, 0xec, 0x8e, 0x65, 0x91, 0x00, 0x45, 0xf7, - 0xff, 0x81, 0x58, 0xf1, 0xdf, 0x3f, 0xe0, 0x16, 0x08, 0x80, 0x72, 0x0e, 0xd2, 0xb8, 0xbd, 0x8d, - 0x9b, 0x71, 0xc8, 0xff, 0xf8, 0x40, 0x24, 0x25, 0xa2, 0xad, 0x3c, 0x0d, 0xc0, 0x8e, 0xf6, 0xf4, - 0xb3, 0x55, 0x0c, 0xf6, 0x3f, 0x3f, 0xe0, 0x3f, 0xdd, 0xe8, 0x42, 0xba, 0x04, 0xec, 0x87, 0x20, - 0xf7, 0x27, 0x78, 0xb7, 0x97, 0x80, 0xce, 0xfa, 0x12, 0x8c, 0x5f, 0xf5, 0x1d, 0x3b, 0xd0, 0x5b, - 0x71, 0xe8, 0xff, 0xe2, 0x68, 0xa1, 0x4f, 0x1c, 0xd6, 0x76, 0x3c, 0x1c, 0xe8, 0x2d, 0x3f, 0x0e, - 0xfb, 0xdf, 0x1c, 0x1b, 0x02, 0x08, 0xd8, 0xd0, 0xfd, 0x60, 0x94, 0x79, 0xff, 0x40, 0x80, 0x05, - 0x80, 0x18, 0x4d, 0xfe, 0xbf, 0x86, 0xf7, 0xe2, 0xb0, 0xef, 0x09, 0xa3, 0xb9, 0xbe, 0xf2, 0x29, - 0xc8, 0x92, 0x7f, 0xd9, 0xef, 0xb1, 0x62, 0xc0, 0xff, 0xc3, 0xc1, 0x5d, 0x04, 0x79, 0xb3, 0x1f, - 0x34, 0x03, 0x33, 0xde, 0xd9, 0xff, 0xcb, 0x57, 0x5a, 0xe8, 0x2b, 0x65, 0xc8, 0xf9, 0x41, 0xb3, - 0xd9, 0xe1, 0xfd, 0x55, 0x0c, 0xfc, 0xff, 0x3e, 0x08, 0x8f, 0xdc, 0x21, 0xa6, 0x52, 0x1b, 0x7e, - 0x7b, 0x08, 0xcb, 0xce, 0xb2, 0xc3, 0xee, 0x0d, 0x5f, 0x28, 0xc5, 0x5f, 0x00, 0xc2, 0xdf, 0xa6, - 0x60, 0x02, 0xdf, 0xd4, 0xdb, 0xae, 0x20, 0x41, 0x29, 0x52, 0xa3, 0x66, 0x0f, 0x76, 0x79, 0x58, - 0xfa, 0x92, 0x04, 0x52, 0x19, 0x3d, 0x06, 0xb9, 0xa5, 0x6e, 0x85, 0x64, 0xbf, 0xc6, 0xa9, 0xa4, - 0xee, 0xdc, 0x9d, 0x3f, 0xa4, 0x46, 0x07, 0xd0, 0x83, 0x30, 0xb6, 0xd6, 0xfd, 0x45, 0x57, 0x92, - 0xab, 0x70, 0x19, 0x52, 0x20, 0x51, 0x67, 0x5f, 0xf6, 0xf2, 0x95, 0x53, 0x64, 0xe4, 0x9f, 0xee, - 0xce, 0xef, 0x3f, 0x15, 0x62, 0xed, 0xe2, 0x56, 0xc7, 0x6c, 0xaa, 0x89, 0x7a, 0x53, 0xc9, 0xfc, - 0xf2, 0xab, 0xf3, 0x87, 0xde, 0x78, 0x75, 0x5e, 0x2a, 0xd9, 0x20, 0x55, 0xd0, 0x3c, 0x48, 0x65, - 0x6a, 0x46, 0xee, 0xcc, 0xf8, 0x22, 0xd5, 0x2c, 0x57, 0x32, 0x84, 0xf2, 0xcd, 0xbb, 0xf3, 0x92, - 0x2a, 0x95, 0x51, 0x05, 0xa4, 0x65, 0x7a, 0x01, 0x9e, 0xaf, 0x9c, 0xe5, 0xaf, 0x7a, 0xf2, 0xbe, - 0xaf, 0x3a, 0xcd, 0xf6, 0xcb, 0xe2, 0x96, 0x69, 0x07, 0x3f, 0x71, 0xe6, 0xa2, 0x2a, 0x2d, 0x2b, - 0xa9, 0xf7, 0xc8, 0xfb, 0x1e, 0x06, 0xa9, 0x8a, 0xe6, 0x20, 0x45, 0x32, 0x20, 0x7d, 0x65, 0xb2, - 0x02, 0xf7, 0xee, 0xce, 0x8f, 0xad, 0xee, 0x35, 0xcc, 0x5b, 0x58, 0xa5, 0xf2, 0xd2, 0x05, 0x90, - 0xb6, 0xd0, 0xe1, 0x41, 0xa3, 0x88, 0x29, 0x87, 0x41, 0xaa, 0xf0, 0x1f, 0x2c, 0x72, 0x71, 0x45, - 0x95, 0x2a, 0x4a, 0xea, 0x0e, 0x61, 0x9f, 0x06, 0xa9, 0x76, 0x2a, 0x93, 0x91, 0xd8, 0x57, 0x1d, - 0x25, 0x75, 0xe7, 0xb5, 0xf9, 0x43, 0xa5, 0x93, 0x20, 0xa9, 0x68, 0x0e, 0xa0, 0x9b, 0xbc, 0x29, - 0xed, 0x84, 0x1a, 0x91, 0x28, 0xa9, 0x37, 0x89, 0xea, 0x13, 0x90, 0xa9, 0xea, 0xbe, 0xf8, 0x0d, - 0x58, 0xba, 0x6e, 0x07, 0x4f, 0x9d, 0xe1, 0x56, 0x66, 0xff, 0xff, 0xee, 0x7c, 0xda, 0x24, 0x02, - 0x95, 0xc9, 0x2b, 0x4f, 0xfe, 0xe3, 0xdb, 0x73, 0x87, 0xde, 0x7a, 0x7b, 0x4e, 0x7a, 0xef, 0xed, - 0x39, 0xe9, 0x87, 0x6f, 0xcf, 0x49, 0xb7, 0xef, 0xcd, 0x49, 0x6f, 0xdc, 0x9b, 0x93, 0xbe, 0x7d, - 0x6f, 0x4e, 0xfa, 0xee, 0xbd, 0x39, 0xe9, 0xce, 0xbd, 0x39, 0xe9, 0xcd, 0x7b, 0x73, 0xd2, 0x5b, - 0xf7, 0xe6, 0xa4, 0x1f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x3a, 0x37, 0xa6, 0x5c, 0x33, 0x00, - 0x00, + // 4068 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7a, 0x59, 0x70, 0x1c, 0xd7, + 0x75, 0x36, 0x7b, 0x16, 0x60, 0xe6, 0xcc, 0x60, 0xd0, 0xb8, 0x00, 0xc9, 0x21, 0x24, 0x01, 0xe4, + 0x68, 0x03, 0x49, 0x19, 0xf4, 0x4f, 0x71, 0x6d, 0xfe, 0xb6, 0x32, 0x33, 0x18, 0xc2, 0xa3, 0x60, + 0x73, 0x03, 0xb0, 0x16, 0x57, 0xaa, 0xab, 0xd1, 0x73, 0x31, 0x68, 0xb2, 0xa7, 0xbb, 0xdd, 0xdd, + 0x43, 0x12, 0xac, 0x3c, 0x30, 0xa5, 0x6c, 0xae, 0x54, 0xe2, 0x6c, 0x55, 0xb1, 0x15, 0x59, 0x91, + 0x9c, 0x8a, 0xa5, 0x38, 0xab, 0xe3, 0xc4, 0xb1, 0x9d, 0x87, 0xf8, 0xc5, 0x09, 0x9f, 0x52, 0xf2, + 0x5b, 0x2a, 0x95, 0x62, 0x49, 0x8c, 0xaa, 0xb2, 0x29, 0xb1, 0x92, 0xf0, 0xc1, 0x15, 0xbd, 0xa4, + 0xee, 0xd6, 0xd3, 0xb3, 0x00, 0x3d, 0x70, 0x95, 0xe4, 0x27, 0xa0, 0xcf, 0x3d, 0xdf, 0xd7, 0xe7, + 0x9e, 0x7b, 0xee, 0x39, 0xe7, 0xde, 0x1e, 0xf8, 0xc1, 0x65, 0x38, 0xde, 0x74, 0x9c, 0xa6, 0x85, + 0xcf, 0xb8, 0x9e, 0x13, 0x38, 0x5b, 0xed, 0xed, 0x33, 0x0d, 0xec, 0x1b, 0x9e, 0xe9, 0x06, 0x8e, + 0x37, 0x4f, 0x65, 0x68, 0x9c, 0x69, 0xcc, 0x0b, 0x8d, 0xd2, 0x32, 0x4c, 0x5c, 0x35, 0x2d, 0xbc, + 0x10, 0x2a, 0xae, 0xe3, 0x00, 0x5d, 0x82, 0xd4, 0xb6, 0x69, 0xe1, 0xa2, 0x74, 0x3c, 0x39, 0x97, + 0x3b, 0xfb, 0xd8, 0x7c, 0x0f, 0x68, 0xbe, 0x1b, 0xb1, 0x46, 0xc4, 0x2a, 0x45, 0x94, 0xde, 0x4d, + 0xc1, 0xe4, 0x80, 0x51, 0x84, 0x20, 0x65, 0xeb, 0x2d, 0xc2, 0x28, 0xcd, 0x65, 0x55, 0xfa, 0x3f, + 0x2a, 0xc2, 0xa8, 0xab, 0x1b, 0xd7, 0xf5, 0x26, 0x2e, 0x26, 0xa8, 0x58, 0x3c, 0xa2, 0x19, 0x80, + 0x06, 0x76, 0xb1, 0xdd, 0xc0, 0xb6, 0xb1, 0x5b, 0x4c, 0x1e, 0x4f, 0xce, 0x65, 0xd5, 0x88, 0x04, + 0x9d, 0x86, 0x09, 0xb7, 0xbd, 0x65, 0x99, 0x86, 0x16, 0x51, 0x83, 0xe3, 0xc9, 0xb9, 0xb4, 0x2a, + 0xb3, 0x81, 0x85, 0x8e, 0xf2, 0x93, 0x30, 0x7e, 0x13, 0xeb, 0xd7, 0xa3, 0xaa, 0x39, 0xaa, 0x5a, + 0x20, 0xe2, 0x88, 0x62, 0x15, 0xf2, 0x2d, 0xec, 0xfb, 0x7a, 0x13, 0x6b, 0xc1, 0xae, 0x8b, 0x8b, + 0x29, 0x3a, 0xfb, 0xe3, 0x7d, 0xb3, 0xef, 0x9d, 0x79, 0x8e, 0xa3, 0x36, 0x76, 0x5d, 0x8c, 0xca, + 0x90, 0xc5, 0x76, 0xbb, 0xc5, 0x18, 0xd2, 0x7b, 0xf8, 0xaf, 0x66, 0xb7, 0x5b, 0xbd, 0x2c, 0x19, + 0x02, 0xe3, 0x14, 0xa3, 0x3e, 0xf6, 0x6e, 0x98, 0x06, 0x2e, 0x8e, 0x50, 0x82, 0x27, 0xfb, 0x08, + 0xd6, 0xd9, 0x78, 0x2f, 0x87, 0xc0, 0xa1, 0x2a, 0x64, 0xf1, 0xad, 0x00, 0xdb, 0xbe, 0xe9, 0xd8, + 0xc5, 0x51, 0x4a, 0xf2, 0xf8, 0x80, 0x55, 0xc4, 0x56, 0xa3, 0x97, 0xa2, 0x83, 0x43, 0x17, 0x60, + 0xd4, 0x71, 0x03, 0xd3, 0xb1, 0xfd, 0x62, 0xe6, 0xb8, 0x34, 0x97, 0x3b, 0xfb, 0xf0, 0xc0, 0x40, + 0x58, 0x65, 0x3a, 0xaa, 0x50, 0x46, 0x75, 0x90, 0x7d, 0xa7, 0xed, 0x19, 0x58, 0x33, 0x9c, 0x06, + 0xd6, 0x4c, 0x7b, 0xdb, 0x29, 0x66, 0x29, 0xc1, 0x6c, 0xff, 0x44, 0xa8, 0x62, 0xd5, 0x69, 0xe0, + 0xba, 0xbd, 0xed, 0xa8, 0x05, 0xbf, 0xeb, 0x19, 0x1d, 0x81, 0x11, 0x7f, 0xd7, 0x0e, 0xf4, 0x5b, + 0xc5, 0x3c, 0x8d, 0x10, 0xfe, 0x54, 0xfa, 0xf6, 0x08, 0x8c, 0x0f, 0x13, 0x62, 0x57, 0x20, 0xbd, + 0x4d, 0x66, 0x59, 0x4c, 0x1c, 0xc4, 0x07, 0x0c, 0xd3, 0xed, 0xc4, 0x91, 0x1f, 0xd1, 0x89, 0x65, + 0xc8, 0xd9, 0xd8, 0x0f, 0x70, 0x83, 0x45, 0x44, 0x72, 0xc8, 0x98, 0x02, 0x06, 0xea, 0x0f, 0xa9, + 0xd4, 0x8f, 0x14, 0x52, 0xcf, 0xc3, 0x78, 0x68, 0x92, 0xe6, 0xe9, 0x76, 0x53, 0xc4, 0xe6, 0x99, + 0x38, 0x4b, 0xe6, 0x6b, 0x02, 0xa7, 0x12, 0x98, 0x5a, 0xc0, 0x5d, 0xcf, 0x68, 0x01, 0xc0, 0xb1, + 0xb1, 0xb3, 0xad, 0x35, 0xb0, 0x61, 0x15, 0x33, 0x7b, 0x78, 0x69, 0x95, 0xa8, 0xf4, 0x79, 0xc9, + 0x61, 0x52, 0xc3, 0x42, 0x97, 0x3b, 0xa1, 0x36, 0xba, 0x47, 0xa4, 0x2c, 0xb3, 0x4d, 0xd6, 0x17, + 0x6d, 0x9b, 0x50, 0xf0, 0x30, 0x89, 0x7b, 0xdc, 0xe0, 0x33, 0xcb, 0x52, 0x23, 0xe6, 0x63, 0x67, + 0xa6, 0x72, 0x18, 0x9b, 0xd8, 0x98, 0x17, 0x7d, 0x44, 0x8f, 0x42, 0x28, 0xd0, 0x68, 0x58, 0x01, + 0xcd, 0x42, 0x79, 0x21, 0x5c, 0xd1, 0x5b, 0x78, 0xfa, 0x36, 0x14, 0xba, 0xdd, 0x83, 0xa6, 0x20, + 0xed, 0x07, 0xba, 0x17, 0xd0, 0x28, 0x4c, 0xab, 0xec, 0x01, 0xc9, 0x90, 0xc4, 0x76, 0x83, 0x66, + 0xb9, 0xb4, 0x4a, 0xfe, 0x45, 0x3f, 0xd1, 0x99, 0x70, 0x92, 0x4e, 0xf8, 0x89, 0xfe, 0x15, 0xed, + 0x62, 0xee, 0x9d, 0xf7, 0xf4, 0x45, 0x18, 0xeb, 0x9a, 0xc0, 0xb0, 0xaf, 0x2e, 0xfd, 0x34, 0x1c, + 0x1e, 0x48, 0x8d, 0x9e, 0x87, 0xa9, 0xb6, 0x6d, 0xda, 0x01, 0xf6, 0x5c, 0x0f, 0x93, 0x88, 0x65, + 0xaf, 0x2a, 0xfe, 0xf3, 0xe8, 0x1e, 0x31, 0xb7, 0x19, 0xd5, 0x66, 0x2c, 0xea, 0x64, 0xbb, 0x5f, + 0x78, 0x2a, 0x9b, 0xf9, 0x97, 0x51, 0xf9, 0xce, 0x9d, 0x3b, 0x77, 0x12, 0xa5, 0x2f, 0x8e, 0xc0, + 0xd4, 0xa0, 0x3d, 0x33, 0x70, 0xfb, 0x1e, 0x81, 0x11, 0xbb, 0xdd, 0xda, 0xc2, 0x1e, 0x75, 0x52, + 0x5a, 0xe5, 0x4f, 0xa8, 0x0c, 0x69, 0x4b, 0xdf, 0xc2, 0x56, 0x31, 0x75, 0x5c, 0x9a, 0x2b, 0x9c, + 0x3d, 0x3d, 0xd4, 0xae, 0x9c, 0x5f, 0x22, 0x10, 0x95, 0x21, 0xd1, 0x27, 0x21, 0xc5, 0x53, 0x34, + 0x61, 0x38, 0x35, 0x1c, 0x03, 0xd9, 0x4b, 0x2a, 0xc5, 0xa1, 0x87, 0x20, 0x4b, 0xfe, 0xb2, 0xd8, + 0x18, 0xa1, 0x36, 0x67, 0x88, 0x80, 0xc4, 0x05, 0x9a, 0x86, 0x0c, 0xdd, 0x26, 0x0d, 0x2c, 0x4a, + 0x5b, 0xf8, 0x4c, 0x02, 0xab, 0x81, 0xb7, 0xf5, 0xb6, 0x15, 0x68, 0x37, 0x74, 0xab, 0x8d, 0x69, + 0xc0, 0x67, 0xd5, 0x3c, 0x17, 0x7e, 0x86, 0xc8, 0xd0, 0x2c, 0xe4, 0xd8, 0xae, 0x32, 0xed, 0x06, + 0xbe, 0x45, 0xb3, 0x67, 0x5a, 0x65, 0x1b, 0xad, 0x4e, 0x24, 0xe4, 0xf5, 0xd7, 0x7c, 0xc7, 0x16, + 0xa1, 0x49, 0x5f, 0x41, 0x04, 0xf4, 0xf5, 0x17, 0x7b, 0x13, 0xf7, 0x23, 0x83, 0xa7, 0xd7, 0x1b, + 0x53, 0xa5, 0x6f, 0x26, 0x20, 0x45, 0xf3, 0xc5, 0x38, 0xe4, 0x36, 0x5e, 0x58, 0xab, 0x69, 0x0b, + 0xab, 0x9b, 0x95, 0xa5, 0x9a, 0x2c, 0xa1, 0x02, 0x00, 0x15, 0x5c, 0x5d, 0x5a, 0x2d, 0x6f, 0xc8, + 0x89, 0xf0, 0xb9, 0xbe, 0xb2, 0x71, 0xe1, 0x9c, 0x9c, 0x0c, 0x01, 0x9b, 0x4c, 0x90, 0x8a, 0x2a, + 0x3c, 0x7d, 0x56, 0x4e, 0x23, 0x19, 0xf2, 0x8c, 0xa0, 0xfe, 0x7c, 0x6d, 0xe1, 0xc2, 0x39, 0x79, + 0xa4, 0x5b, 0xf2, 0xf4, 0x59, 0x79, 0x14, 0x8d, 0x41, 0x96, 0x4a, 0x2a, 0xab, 0xab, 0x4b, 0x72, + 0x26, 0xe4, 0x5c, 0xdf, 0x50, 0xeb, 0x2b, 0x8b, 0x72, 0x36, 0xe4, 0x5c, 0x54, 0x57, 0x37, 0xd7, + 0x64, 0x08, 0x19, 0x96, 0x6b, 0xeb, 0xeb, 0xe5, 0xc5, 0x9a, 0x9c, 0x0b, 0x35, 0x2a, 0x2f, 0x6c, + 0xd4, 0xd6, 0xe5, 0x7c, 0x97, 0x59, 0x4f, 0x9f, 0x95, 0xc7, 0xc2, 0x57, 0xd4, 0x56, 0x36, 0x97, + 0xe5, 0x02, 0x9a, 0x80, 0x31, 0xf6, 0x0a, 0x61, 0xc4, 0x78, 0x8f, 0xe8, 0xc2, 0x39, 0x59, 0xee, + 0x18, 0xc2, 0x58, 0x26, 0xba, 0x04, 0x17, 0xce, 0xc9, 0xa8, 0x54, 0x85, 0x34, 0x8d, 0x2e, 0x84, + 0xa0, 0xb0, 0x54, 0xae, 0xd4, 0x96, 0xb4, 0xd5, 0xb5, 0x8d, 0xfa, 0xea, 0x4a, 0x79, 0x49, 0x96, + 0x3a, 0x32, 0xb5, 0xf6, 0xe9, 0xcd, 0xba, 0x5a, 0x5b, 0x90, 0x13, 0x51, 0xd9, 0x5a, 0xad, 0xbc, + 0x51, 0x5b, 0x90, 0x93, 0x25, 0x03, 0xa6, 0x06, 0xe5, 0xc9, 0x81, 0x3b, 0x23, 0xb2, 0xc4, 0x89, + 0x3d, 0x96, 0x98, 0x72, 0xf5, 0x2d, 0xf1, 0x3f, 0x25, 0x60, 0x72, 0x40, 0xad, 0x18, 0xf8, 0x92, + 0x67, 0x20, 0xcd, 0x42, 0x94, 0x55, 0xcf, 0x93, 0x03, 0x8b, 0x0e, 0x0d, 0xd8, 0xbe, 0x0a, 0x4a, + 0x71, 0xd1, 0x0e, 0x22, 0xb9, 0x47, 0x07, 0x41, 0x28, 0xfa, 0x72, 0xfa, 0x4f, 0xf5, 0xe5, 0x74, + 0x56, 0xf6, 0x2e, 0x0c, 0x53, 0xf6, 0xa8, 0xec, 0x60, 0xb9, 0x3d, 0x3d, 0x20, 0xb7, 0x5f, 0x81, + 0x89, 0x3e, 0xa2, 0xa1, 0x73, 0xec, 0x4b, 0x12, 0x14, 0xf7, 0x72, 0x4e, 0x4c, 0xa6, 0x4b, 0x74, + 0x65, 0xba, 0x2b, 0xbd, 0x1e, 0x3c, 0xb1, 0xf7, 0x22, 0xf4, 0xad, 0xf5, 0x1b, 0x12, 0x1c, 0x19, + 0xdc, 0x29, 0x0e, 0xb4, 0xe1, 0x93, 0x30, 0xd2, 0xc2, 0xc1, 0x8e, 0x23, 0xba, 0xa5, 0x27, 0x06, + 0xd4, 0x60, 0x32, 0xdc, 0xbb, 0xd8, 0x1c, 0x15, 0x2d, 0xe2, 0xc9, 0xbd, 0xda, 0x3d, 0x66, 0x4d, + 0x9f, 0xa5, 0x9f, 0x4f, 0xc0, 0xe1, 0x81, 0xe4, 0x03, 0x0d, 0x7d, 0x04, 0xc0, 0xb4, 0xdd, 0x76, + 0xc0, 0x3a, 0x22, 0x96, 0x60, 0xb3, 0x54, 0x42, 0x93, 0x17, 0x49, 0x9e, 0xed, 0x20, 0x1c, 0x4f, + 0xd2, 0x71, 0x60, 0x22, 0xaa, 0x70, 0xa9, 0x63, 0x68, 0x8a, 0x1a, 0x3a, 0xb3, 0xc7, 0x4c, 0xfb, + 0x02, 0xf3, 0xe3, 0x20, 0x1b, 0x96, 0x89, 0xed, 0x40, 0xf3, 0x03, 0x0f, 0xeb, 0x2d, 0xd3, 0x6e, + 0xd2, 0x0a, 0x92, 0x51, 0xd2, 0xdb, 0xba, 0xe5, 0x63, 0x75, 0x9c, 0x0d, 0xaf, 0x8b, 0x51, 0x82, + 0xa0, 0x01, 0xe4, 0x45, 0x10, 0x23, 0x5d, 0x08, 0x36, 0x1c, 0x22, 0x4a, 0xdf, 0xc8, 0x40, 0x2e, + 0xd2, 0x57, 0xa3, 0x13, 0x90, 0xbf, 0xa6, 0xdf, 0xd0, 0x35, 0x71, 0x56, 0x62, 0x9e, 0xc8, 0x11, + 0xd9, 0x1a, 0x3f, 0x2f, 0x7d, 0x1c, 0xa6, 0xa8, 0x8a, 0xd3, 0x0e, 0xb0, 0xa7, 0x19, 0x96, 0xee, + 0xfb, 0xd4, 0x69, 0x19, 0xaa, 0x8a, 0xc8, 0xd8, 0x2a, 0x19, 0xaa, 0x8a, 0x11, 0x74, 0x1e, 0x26, + 0x29, 0xa2, 0xd5, 0xb6, 0x02, 0xd3, 0xb5, 0xb0, 0x46, 0x4e, 0x6f, 0x3e, 0xad, 0x24, 0xa1, 0x65, + 0x13, 0x44, 0x63, 0x99, 0x2b, 0x10, 0x8b, 0x7c, 0xb4, 0x00, 0x8f, 0x50, 0x58, 0x13, 0xdb, 0xd8, + 0xd3, 0x03, 0xac, 0xe1, 0xcf, 0xb5, 0x75, 0xcb, 0xd7, 0x74, 0xbb, 0xa1, 0xed, 0xe8, 0xfe, 0x4e, + 0x71, 0x8a, 0x10, 0x54, 0x12, 0x45, 0x49, 0x3d, 0x46, 0x14, 0x17, 0xb9, 0x5e, 0x8d, 0xaa, 0x95, + 0xed, 0xc6, 0xa7, 0x74, 0x7f, 0x07, 0x29, 0x70, 0x84, 0xb2, 0xf8, 0x81, 0x67, 0xda, 0x4d, 0xcd, + 0xd8, 0xc1, 0xc6, 0x75, 0xad, 0x1d, 0x6c, 0x5f, 0x2a, 0x3e, 0x14, 0x7d, 0x3f, 0xb5, 0x70, 0x9d, + 0xea, 0x54, 0x89, 0xca, 0x66, 0xb0, 0x7d, 0x09, 0xad, 0x43, 0x9e, 0x2c, 0x46, 0xcb, 0xbc, 0x8d, + 0xb5, 0x6d, 0xc7, 0xa3, 0xa5, 0xb1, 0x30, 0x20, 0x35, 0x45, 0x3c, 0x38, 0xbf, 0xca, 0x01, 0xcb, + 0x4e, 0x03, 0x2b, 0xe9, 0xf5, 0xb5, 0x5a, 0x6d, 0x41, 0xcd, 0x09, 0x96, 0xab, 0x8e, 0x47, 0x02, + 0xaa, 0xe9, 0x84, 0x0e, 0xce, 0xb1, 0x80, 0x6a, 0x3a, 0xc2, 0xbd, 0xe7, 0x61, 0xd2, 0x30, 0xd8, + 0x9c, 0x4d, 0x43, 0xe3, 0x67, 0x2c, 0xbf, 0x28, 0x77, 0x39, 0xcb, 0x30, 0x16, 0x99, 0x02, 0x8f, + 0x71, 0x1f, 0x5d, 0x86, 0xc3, 0x1d, 0x67, 0x45, 0x81, 0x13, 0x7d, 0xb3, 0xec, 0x85, 0x9e, 0x87, + 0x49, 0x77, 0xb7, 0x1f, 0x88, 0xba, 0xde, 0xe8, 0xee, 0xf6, 0xc2, 0x2e, 0xc2, 0x94, 0xbb, 0xe3, + 0xf6, 0xe3, 0x4e, 0x45, 0x71, 0xc8, 0xdd, 0x71, 0x7b, 0x81, 0x8f, 0xd3, 0x03, 0xb7, 0x87, 0x0d, + 0x3d, 0xc0, 0x8d, 0xe2, 0xd1, 0xa8, 0x7a, 0x64, 0x00, 0x9d, 0x01, 0xd9, 0x30, 0x34, 0x6c, 0xeb, + 0x5b, 0x16, 0xd6, 0x74, 0x0f, 0xdb, 0xba, 0x5f, 0x9c, 0x8d, 0x2a, 0x17, 0x0c, 0xa3, 0x46, 0x47, + 0xcb, 0x74, 0x10, 0x9d, 0x82, 0x09, 0x67, 0xeb, 0x9a, 0xc1, 0x42, 0x52, 0x73, 0x3d, 0xbc, 0x6d, + 0xde, 0x2a, 0x3e, 0x46, 0xfd, 0x3b, 0x4e, 0x06, 0x68, 0x40, 0xae, 0x51, 0x31, 0x3a, 0x09, 0xb2, + 0xe1, 0xef, 0xe8, 0x9e, 0x4b, 0x73, 0xb2, 0xef, 0xea, 0x06, 0x2e, 0x3e, 0xce, 0x54, 0x99, 0x7c, + 0x45, 0x88, 0xc9, 0x96, 0xf0, 0x6f, 0x9a, 0xdb, 0x81, 0x60, 0x7c, 0x92, 0x6d, 0x09, 0x2a, 0xe3, + 0x6c, 0x73, 0x20, 0x13, 0x57, 0x74, 0xbd, 0x78, 0x8e, 0xaa, 0x15, 0xdc, 0x1d, 0x37, 0xfa, 0xde, + 0x47, 0x61, 0x8c, 0x68, 0x76, 0x5e, 0x7a, 0x92, 0x35, 0x64, 0xee, 0x4e, 0xe4, 0x8d, 0x1f, 0x5a, + 0x6f, 0x5c, 0x52, 0x20, 0x1f, 0x8d, 0x4f, 0x94, 0x05, 0x16, 0xa1, 0xb2, 0x44, 0x9a, 0x95, 0xea, + 0xea, 0x02, 0x69, 0x33, 0x5e, 0xac, 0xc9, 0x09, 0xd2, 0xee, 0x2c, 0xd5, 0x37, 0x6a, 0x9a, 0xba, + 0xb9, 0xb2, 0x51, 0x5f, 0xae, 0xc9, 0xc9, 0x68, 0x5f, 0xfd, 0xbd, 0x04, 0x14, 0xba, 0x8f, 0x48, + 0xe8, 0xff, 0xc3, 0x51, 0x71, 0x9f, 0xe1, 0xe3, 0x40, 0xbb, 0x69, 0x7a, 0x74, 0xcb, 0xb4, 0x74, + 0x56, 0xbe, 0xc2, 0x45, 0x9b, 0xe2, 0x5a, 0xeb, 0x38, 0x78, 0xce, 0xf4, 0xc8, 0x86, 0x68, 0xe9, + 0x01, 0x5a, 0x82, 0x59, 0xdb, 0xd1, 0xfc, 0x40, 0xb7, 0x1b, 0xba, 0xd7, 0xd0, 0x3a, 0x37, 0x49, + 0x9a, 0x6e, 0x18, 0xd8, 0xf7, 0x1d, 0x56, 0xaa, 0x42, 0x96, 0x87, 0x6d, 0x67, 0x9d, 0x2b, 0x77, + 0x72, 0x78, 0x99, 0xab, 0xf6, 0x04, 0x58, 0x72, 0xaf, 0x00, 0x7b, 0x08, 0xb2, 0x2d, 0xdd, 0xd5, + 0xb0, 0x1d, 0x78, 0xbb, 0xb4, 0x31, 0xce, 0xa8, 0x99, 0x96, 0xee, 0xd6, 0xc8, 0xf3, 0x47, 0x73, + 0x3e, 0xf9, 0xc7, 0x24, 0xe4, 0xa3, 0xcd, 0x31, 0x39, 0x6b, 0x18, 0xb4, 0x8e, 0x48, 0x34, 0xd3, + 0x3c, 0xba, 0x6f, 0x2b, 0x3d, 0x5f, 0x25, 0x05, 0x46, 0x19, 0x61, 0x2d, 0xab, 0xca, 0x90, 0xa4, + 0xb8, 0x93, 0xdc, 0x82, 0x59, 0x8b, 0x90, 0x51, 0xf9, 0x13, 0x5a, 0x84, 0x91, 0x6b, 0x3e, 0xe5, + 0x1e, 0xa1, 0xdc, 0x8f, 0xed, 0xcf, 0xfd, 0xec, 0x3a, 0x25, 0xcf, 0x3e, 0xbb, 0xae, 0xad, 0xac, + 0xaa, 0xcb, 0xe5, 0x25, 0x95, 0xc3, 0xd1, 0x31, 0x48, 0x59, 0xfa, 0xed, 0xdd, 0xee, 0x52, 0x44, + 0x45, 0xc3, 0x3a, 0xfe, 0x18, 0xa4, 0x6e, 0x62, 0xfd, 0x7a, 0x77, 0x01, 0xa0, 0xa2, 0x0f, 0x31, + 0xf4, 0xcf, 0x40, 0x9a, 0xfa, 0x0b, 0x01, 0x70, 0x8f, 0xc9, 0x87, 0x50, 0x06, 0x52, 0xd5, 0x55, + 0x95, 0x84, 0xbf, 0x0c, 0x79, 0x26, 0xd5, 0xd6, 0xea, 0xb5, 0x6a, 0x4d, 0x4e, 0x94, 0xce, 0xc3, + 0x08, 0x73, 0x02, 0xd9, 0x1a, 0xa1, 0x1b, 0xe4, 0x43, 0xfc, 0x91, 0x73, 0x48, 0x62, 0x74, 0x73, + 0xb9, 0x52, 0x53, 0xe5, 0x44, 0x74, 0x79, 0x7d, 0xc8, 0x47, 0xfb, 0xe2, 0x8f, 0x26, 0xa6, 0xbe, + 0x23, 0x41, 0x2e, 0xd2, 0xe7, 0x92, 0x06, 0x45, 0xb7, 0x2c, 0xe7, 0xa6, 0xa6, 0x5b, 0xa6, 0xee, + 0xf3, 0xa0, 0x00, 0x2a, 0x2a, 0x13, 0xc9, 0xb0, 0x8b, 0xf6, 0x91, 0x18, 0xff, 0xaa, 0x04, 0x72, + 0x6f, 0x8b, 0xd9, 0x63, 0xa0, 0xf4, 0x63, 0x35, 0xf0, 0x15, 0x09, 0x0a, 0xdd, 0x7d, 0x65, 0x8f, + 0x79, 0x27, 0x7e, 0xac, 0xe6, 0xbd, 0x9d, 0x80, 0xb1, 0xae, 0x6e, 0x72, 0x58, 0xeb, 0x3e, 0x07, + 0x13, 0x66, 0x03, 0xb7, 0x5c, 0x27, 0xc0, 0xb6, 0xb1, 0xab, 0x59, 0xf8, 0x06, 0xb6, 0x8a, 0x25, + 0x9a, 0x28, 0xce, 0xec, 0xdf, 0xaf, 0xce, 0xd7, 0x3b, 0xb8, 0x25, 0x02, 0x53, 0x26, 0xeb, 0x0b, + 0xb5, 0xe5, 0xb5, 0xd5, 0x8d, 0xda, 0x4a, 0xf5, 0x05, 0x6d, 0x73, 0xe5, 0x27, 0x57, 0x56, 0x9f, + 0x5b, 0x51, 0x65, 0xb3, 0x47, 0xed, 0x43, 0xdc, 0xea, 0x6b, 0x20, 0xf7, 0x1a, 0x85, 0x8e, 0xc2, + 0x20, 0xb3, 0xe4, 0x43, 0x68, 0x12, 0xc6, 0x57, 0x56, 0xb5, 0xf5, 0xfa, 0x42, 0x4d, 0xab, 0x5d, + 0xbd, 0x5a, 0xab, 0x6e, 0xac, 0xb3, 0x1b, 0x88, 0x50, 0x7b, 0xa3, 0x7b, 0x53, 0xbf, 0x9c, 0x84, + 0xc9, 0x01, 0x96, 0xa0, 0x32, 0x3f, 0x3b, 0xb0, 0xe3, 0xcc, 0xc7, 0x86, 0xb1, 0x7e, 0x9e, 0x94, + 0xfc, 0x35, 0xdd, 0x0b, 0xf8, 0x51, 0xe3, 0x24, 0x10, 0x2f, 0xd9, 0x81, 0xb9, 0x6d, 0x62, 0x8f, + 0x5f, 0xd8, 0xb0, 0x03, 0xc5, 0x78, 0x47, 0xce, 0xee, 0x6c, 0x9e, 0x02, 0xe4, 0x3a, 0xbe, 0x19, + 0x98, 0x37, 0xb0, 0x66, 0xda, 0xe2, 0x76, 0x87, 0x1c, 0x30, 0x52, 0xaa, 0x2c, 0x46, 0xea, 0x76, + 0x10, 0x6a, 0xdb, 0xb8, 0xa9, 0xf7, 0x68, 0x93, 0x04, 0x9e, 0x54, 0x65, 0x31, 0x12, 0x6a, 0x9f, + 0x80, 0x7c, 0xc3, 0x69, 0x93, 0xae, 0x8b, 0xe9, 0x91, 0x7a, 0x21, 0xa9, 0x39, 0x26, 0x0b, 0x55, + 0x78, 0x3f, 0xdd, 0xb9, 0x56, 0xca, 0xab, 0x39, 0x26, 0x63, 0x2a, 0x4f, 0xc2, 0xb8, 0xde, 0x6c, + 0x7a, 0x84, 0x5c, 0x10, 0xb1, 0x13, 0x42, 0x21, 0x14, 0x53, 0xc5, 0xe9, 0x67, 0x21, 0x23, 0xfc, + 0x40, 0x4a, 0x32, 0xf1, 0x84, 0xe6, 0xb2, 0x63, 0x6f, 0x62, 0x2e, 0xab, 0x66, 0x6c, 0x31, 0x78, + 0x02, 0xf2, 0xa6, 0xaf, 0x75, 0x6e, 0xc9, 0x13, 0xc7, 0x13, 0x73, 0x19, 0x35, 0x67, 0xfa, 0xe1, + 0x0d, 0x63, 0xe9, 0x8d, 0x04, 0x14, 0xba, 0x6f, 0xf9, 0xd1, 0x02, 0x64, 0x2c, 0xc7, 0xd0, 0x69, + 0x68, 0xb1, 0x4f, 0x4c, 0x73, 0x31, 0x1f, 0x06, 0xe6, 0x97, 0xb8, 0xbe, 0x1a, 0x22, 0xa7, 0xff, + 0x4e, 0x82, 0x8c, 0x10, 0xa3, 0x23, 0x90, 0x72, 0xf5, 0x60, 0x87, 0xd2, 0xa5, 0x2b, 0x09, 0x59, + 0x52, 0xe9, 0x33, 0x91, 0xfb, 0xae, 0x6e, 0xd3, 0x10, 0xe0, 0x72, 0xf2, 0x4c, 0xd6, 0xd5, 0xc2, + 0x7a, 0x83, 0x1e, 0x3f, 0x9c, 0x56, 0x0b, 0xdb, 0x81, 0x2f, 0xd6, 0x95, 0xcb, 0xab, 0x5c, 0x8c, + 0x4e, 0xc3, 0x44, 0xe0, 0xe9, 0xa6, 0xd5, 0xa5, 0x9b, 0xa2, 0xba, 0xb2, 0x18, 0x08, 0x95, 0x15, + 0x38, 0x26, 0x78, 0x1b, 0x38, 0xd0, 0x8d, 0x1d, 0xdc, 0xe8, 0x80, 0x46, 0xe8, 0x35, 0xc3, 0x51, + 0xae, 0xb0, 0xc0, 0xc7, 0x05, 0xb6, 0xf4, 0x7d, 0x09, 0x26, 0xc4, 0x81, 0xa9, 0x11, 0x3a, 0x6b, + 0x19, 0x40, 0xb7, 0x6d, 0x27, 0x88, 0xba, 0xab, 0x3f, 0x94, 0xfb, 0x70, 0xf3, 0xe5, 0x10, 0xa4, + 0x46, 0x08, 0xa6, 0x5b, 0x00, 0x9d, 0x91, 0x3d, 0xdd, 0x36, 0x0b, 0x39, 0xfe, 0x09, 0x87, 0x7e, + 0x07, 0x64, 0x47, 0x6c, 0x60, 0x22, 0x72, 0xb2, 0x42, 0x53, 0x90, 0xde, 0xc2, 0x4d, 0xd3, 0xe6, + 0x17, 0xb3, 0xec, 0x41, 0x5c, 0x84, 0xa4, 0xc2, 0x8b, 0x90, 0xca, 0x67, 0x61, 0xd2, 0x70, 0x5a, + 0xbd, 0xe6, 0x56, 0xe4, 0x9e, 0x63, 0xbe, 0xff, 0x29, 0xe9, 0x45, 0xe8, 0xb4, 0x98, 0x3f, 0x94, + 0xa4, 0xaf, 0x24, 0x92, 0x8b, 0x6b, 0x95, 0xaf, 0x25, 0xa6, 0x17, 0x19, 0x74, 0x4d, 0xcc, 0x54, + 0xc5, 0xdb, 0x16, 0x36, 0x88, 0xf5, 0xf0, 0xd5, 0xd3, 0xf0, 0xb1, 0xa6, 0x19, 0xec, 0xb4, 0xb7, + 0xe6, 0x0d, 0xa7, 0x75, 0xa6, 0xe9, 0x34, 0x9d, 0xce, 0xa7, 0x4f, 0xf2, 0x44, 0x1f, 0xe8, 0x7f, + 0xfc, 0xf3, 0x67, 0x36, 0x94, 0x4e, 0xc7, 0x7e, 0x2b, 0x55, 0x56, 0x60, 0x92, 0x2b, 0x6b, 0xf4, + 0xfb, 0x0b, 0x3b, 0x45, 0xa0, 0x7d, 0xef, 0xb0, 0x8a, 0x5f, 0x7f, 0x97, 0x96, 0x6b, 0x75, 0x82, + 0x43, 0xc9, 0x18, 0x3b, 0x68, 0x28, 0x2a, 0x1c, 0xee, 0xe2, 0x63, 0x5b, 0x13, 0x7b, 0x31, 0x8c, + 0xdf, 0xe3, 0x8c, 0x93, 0x11, 0xc6, 0x75, 0x0e, 0x55, 0xaa, 0x30, 0x76, 0x10, 0xae, 0xbf, 0xe1, + 0x5c, 0x79, 0x1c, 0x25, 0x59, 0x84, 0x71, 0x4a, 0x62, 0xb4, 0xfd, 0xc0, 0x69, 0xd1, 0xbc, 0xb7, + 0x3f, 0xcd, 0xdf, 0xbe, 0xcb, 0xf6, 0x4a, 0x81, 0xc0, 0xaa, 0x21, 0x4a, 0x51, 0x80, 0x7e, 0x72, + 0x6a, 0x60, 0xc3, 0x8a, 0x61, 0xb8, 0xcb, 0x0d, 0x09, 0xf5, 0x95, 0xcf, 0xc0, 0x14, 0xf9, 0x9f, + 0xa6, 0xa5, 0xa8, 0x25, 0xf1, 0x17, 0x5e, 0xc5, 0xef, 0xbf, 0xc4, 0xb6, 0xe3, 0x64, 0x48, 0x10, + 0xb1, 0x29, 0xb2, 0x8a, 0x4d, 0x1c, 0x04, 0xd8, 0xf3, 0x35, 0xdd, 0x1a, 0x64, 0x5e, 0xe4, 0xc6, + 0xa0, 0xf8, 0xa5, 0xf7, 0xba, 0x57, 0x71, 0x91, 0x21, 0xcb, 0x96, 0xa5, 0x6c, 0xc2, 0xd1, 0x01, + 0x51, 0x31, 0x04, 0xe7, 0xcb, 0x9c, 0x73, 0xaa, 0x2f, 0x32, 0x08, 0xed, 0x1a, 0x08, 0x79, 0xb8, + 0x96, 0x43, 0x70, 0xfe, 0x36, 0xe7, 0x44, 0x1c, 0x2b, 0x96, 0x94, 0x30, 0x3e, 0x0b, 0x13, 0x37, + 0xb0, 0xb7, 0xe5, 0xf8, 0xfc, 0x96, 0x66, 0x08, 0xba, 0x57, 0x38, 0xdd, 0x38, 0x07, 0xd2, 0x6b, + 0x1b, 0xc2, 0x75, 0x19, 0x32, 0xdb, 0xba, 0x81, 0x87, 0xa0, 0xf8, 0x32, 0xa7, 0x18, 0x25, 0xfa, + 0x04, 0x5a, 0x86, 0x7c, 0xd3, 0xe1, 0x95, 0x29, 0x1e, 0xfe, 0x2a, 0x87, 0xe7, 0x04, 0x86, 0x53, + 0xb8, 0x8e, 0xdb, 0xb6, 0x48, 0xd9, 0x8a, 0xa7, 0xf8, 0x1d, 0x41, 0x21, 0x30, 0x9c, 0xe2, 0x00, + 0x6e, 0x7d, 0x4d, 0x50, 0xf8, 0x11, 0x7f, 0x3e, 0x03, 0x39, 0xc7, 0xb6, 0x76, 0x1d, 0x7b, 0x18, + 0x23, 0x5e, 0xe7, 0x0c, 0xc0, 0x21, 0x84, 0xe0, 0x0a, 0x64, 0x87, 0x5d, 0x88, 0xdf, 0x7b, 0x4f, + 0x6c, 0x0f, 0xb1, 0x02, 0x8b, 0x30, 0x2e, 0x12, 0x94, 0xe9, 0xd8, 0x43, 0x50, 0x7c, 0x95, 0x53, + 0x14, 0x22, 0x30, 0x3e, 0x8d, 0x00, 0xfb, 0x41, 0x13, 0x0f, 0x43, 0xf2, 0x86, 0x98, 0x06, 0x87, + 0x70, 0x57, 0x6e, 0x61, 0xdb, 0xd8, 0x19, 0x8e, 0xe1, 0x4d, 0xe1, 0x4a, 0x81, 0x21, 0x14, 0x55, + 0x18, 0x6b, 0xe9, 0x9e, 0xbf, 0xa3, 0x5b, 0x43, 0x2d, 0xc7, 0xef, 0x73, 0x8e, 0x7c, 0x08, 0xe2, + 0x1e, 0x69, 0xdb, 0x07, 0xa1, 0xf9, 0x9a, 0xf0, 0x48, 0x04, 0xc6, 0xb7, 0x9e, 0x1f, 0xd0, 0x2b, + 0xad, 0x83, 0xb0, 0xfd, 0x81, 0xd8, 0x7a, 0x0c, 0xbb, 0x1c, 0x65, 0xbc, 0x02, 0x59, 0xdf, 0xbc, + 0x3d, 0x14, 0xcd, 0x1f, 0x8a, 0x95, 0xa6, 0x00, 0x02, 0x7e, 0x01, 0x8e, 0x0d, 0x2c, 0x13, 0x43, + 0x90, 0xfd, 0x11, 0x27, 0x3b, 0x32, 0xa0, 0x54, 0xf0, 0x94, 0x70, 0x50, 0xca, 0x3f, 0x16, 0x29, + 0x01, 0xf7, 0x70, 0xad, 0x91, 0xb3, 0x82, 0xaf, 0x6f, 0x1f, 0xcc, 0x6b, 0x7f, 0x22, 0xbc, 0xc6, + 0xb0, 0x5d, 0x5e, 0xdb, 0x80, 0x23, 0x9c, 0xf1, 0x60, 0xeb, 0xfa, 0xa7, 0x22, 0xb1, 0x32, 0xf4, + 0x66, 0xf7, 0xea, 0x7e, 0x16, 0xa6, 0x43, 0x77, 0x8a, 0xa6, 0xd4, 0xd7, 0x5a, 0xba, 0x3b, 0x04, + 0xf3, 0xd7, 0x39, 0xb3, 0xc8, 0xf8, 0x61, 0x57, 0xeb, 0x2f, 0xeb, 0x2e, 0x21, 0x7f, 0x1e, 0x8a, + 0x82, 0xbc, 0x6d, 0x7b, 0xd8, 0x70, 0x9a, 0xb6, 0x79, 0x1b, 0x37, 0x86, 0xa0, 0xfe, 0xb3, 0x9e, + 0xa5, 0xda, 0x8c, 0xc0, 0x09, 0x73, 0x1d, 0xe4, 0xb0, 0x57, 0xd1, 0xcc, 0x96, 0xeb, 0x78, 0x41, + 0x0c, 0xe3, 0x37, 0xc4, 0x4a, 0x85, 0xb8, 0x3a, 0x85, 0x29, 0x35, 0x28, 0xd0, 0xc7, 0x61, 0x43, + 0xf2, 0xcf, 0x39, 0xd1, 0x58, 0x07, 0xc5, 0x13, 0x87, 0xe1, 0xb4, 0x5c, 0xdd, 0x1b, 0x26, 0xff, + 0xfd, 0x85, 0x48, 0x1c, 0x1c, 0xc2, 0x13, 0x47, 0xb0, 0xeb, 0x62, 0x52, 0xed, 0x87, 0x60, 0xf8, + 0xa6, 0x48, 0x1c, 0x02, 0xc3, 0x29, 0x44, 0xc3, 0x30, 0x04, 0xc5, 0x5f, 0x0a, 0x0a, 0x81, 0x21, + 0x14, 0x9f, 0xee, 0x14, 0x5a, 0x0f, 0x37, 0x4d, 0x3f, 0xf0, 0x58, 0x2b, 0xbc, 0x3f, 0xd5, 0xb7, + 0xde, 0xeb, 0x6e, 0xc2, 0xd4, 0x08, 0x94, 0x64, 0x22, 0x7e, 0x85, 0x4a, 0x4f, 0x4a, 0xf1, 0x86, + 0x7d, 0x5b, 0x64, 0xa2, 0x08, 0x8c, 0xd8, 0x16, 0xe9, 0x10, 0x89, 0xdb, 0x0d, 0x72, 0x3e, 0x18, + 0x82, 0xee, 0x3b, 0x3d, 0xc6, 0xad, 0x0b, 0x2c, 0xe1, 0x8c, 0xf4, 0x3f, 0x6d, 0xfb, 0x3a, 0xde, + 0x1d, 0x2a, 0x3a, 0xff, 0xaa, 0xa7, 0xff, 0xd9, 0x64, 0x48, 0x96, 0x43, 0xc6, 0x7b, 0xfa, 0x29, + 0x14, 0xf7, 0x63, 0x9d, 0xe2, 0xcf, 0x3c, 0xe0, 0xf3, 0xed, 0x6e, 0xa7, 0x94, 0x25, 0x12, 0xe4, + 0xdd, 0x4d, 0x4f, 0x3c, 0xd9, 0x4b, 0x0f, 0xc2, 0x38, 0xef, 0xea, 0x79, 0x94, 0xab, 0x30, 0xd6, + 0xd5, 0xf0, 0xc4, 0x53, 0xfd, 0x2c, 0xa7, 0xca, 0x47, 0xfb, 0x1d, 0xe5, 0x3c, 0xa4, 0x48, 0xf3, + 0x12, 0x0f, 0xff, 0x39, 0x0e, 0xa7, 0xea, 0xca, 0x27, 0x20, 0x23, 0x9a, 0x96, 0x78, 0xe8, 0xcf, + 0x73, 0x68, 0x08, 0x21, 0x70, 0xd1, 0xb0, 0xc4, 0xc3, 0x7f, 0x41, 0xc0, 0x05, 0x84, 0xc0, 0x87, + 0x77, 0xe1, 0x77, 0x7f, 0x29, 0xc5, 0x8b, 0x8e, 0xf0, 0xdd, 0x15, 0x18, 0xe5, 0x9d, 0x4a, 0x3c, + 0xfa, 0xf3, 0xfc, 0xe5, 0x02, 0xa1, 0x5c, 0x84, 0xf4, 0x90, 0x0e, 0xff, 0x65, 0x0e, 0x65, 0xfa, + 0x4a, 0x15, 0x72, 0x91, 0xee, 0x24, 0x1e, 0xfe, 0x2b, 0x1c, 0x1e, 0x45, 0x11, 0xd3, 0x79, 0x77, + 0x12, 0x4f, 0xf0, 0x05, 0x61, 0x3a, 0x47, 0x10, 0xb7, 0x89, 0xc6, 0x24, 0x1e, 0xfd, 0xab, 0xc2, + 0xeb, 0x02, 0xa2, 0x3c, 0x03, 0xd9, 0xb0, 0xd8, 0xc4, 0xe3, 0x7f, 0x8d, 0xe3, 0x3b, 0x18, 0xe2, + 0x81, 0x48, 0xb1, 0x8b, 0xa7, 0xf8, 0x75, 0xe1, 0x81, 0x08, 0x8a, 0x6c, 0xa3, 0xde, 0x06, 0x26, + 0x9e, 0xe9, 0x37, 0xc4, 0x36, 0xea, 0xe9, 0x5f, 0xc8, 0x6a, 0xd2, 0x9c, 0x1f, 0x4f, 0xf1, 0x9b, + 0x62, 0x35, 0xa9, 0x3e, 0x31, 0xa3, 0xb7, 0x23, 0x88, 0xe7, 0xf8, 0x2d, 0x61, 0x46, 0x4f, 0x43, + 0xa0, 0xac, 0x01, 0xea, 0xef, 0x06, 0xe2, 0xf9, 0xbe, 0xc8, 0xf9, 0x26, 0xfa, 0x9a, 0x01, 0xe5, + 0x39, 0x38, 0x32, 0xb8, 0x13, 0x88, 0x67, 0xfd, 0xd2, 0x83, 0x9e, 0xb3, 0x5b, 0xb4, 0x11, 0x50, + 0x36, 0x3a, 0x25, 0x25, 0xda, 0x05, 0xc4, 0xd3, 0xbe, 0xfc, 0xa0, 0x3b, 0x71, 0x47, 0x9b, 0x00, + 0xa5, 0x0c, 0xd0, 0x29, 0xc0, 0xf1, 0x5c, 0xaf, 0x70, 0xae, 0x08, 0x88, 0x6c, 0x0d, 0x5e, 0x7f, + 0xe3, 0xf1, 0x5f, 0x16, 0x5b, 0x83, 0x23, 0xc8, 0xd6, 0x10, 0xa5, 0x37, 0x1e, 0xfd, 0xaa, 0xd8, + 0x1a, 0x02, 0x42, 0x22, 0x3b, 0x52, 0xdd, 0xe2, 0x19, 0x5e, 0x17, 0x91, 0x1d, 0x41, 0x29, 0x2b, + 0x30, 0xd1, 0x57, 0x10, 0xe3, 0xa9, 0xbe, 0xc2, 0xa9, 0xe4, 0xde, 0x7a, 0x18, 0x2d, 0x5e, 0xbc, + 0x18, 0xc6, 0xb3, 0xfd, 0x6e, 0x4f, 0xf1, 0xe2, 0xb5, 0x50, 0xb9, 0x02, 0x19, 0xbb, 0x6d, 0x59, + 0x64, 0xf3, 0xa0, 0xfd, 0x7f, 0x60, 0x57, 0xfc, 0xd7, 0x0f, 0xb8, 0x77, 0x04, 0x40, 0x39, 0x0f, + 0x69, 0xdc, 0xda, 0xc2, 0x8d, 0x38, 0xe4, 0xbf, 0x7d, 0x20, 0x12, 0x26, 0xd1, 0x56, 0x9e, 0x01, + 0x60, 0x57, 0x23, 0xf4, 0xb3, 0x5f, 0x0c, 0xf6, 0xdf, 0x3f, 0xe0, 0x3f, 0x7d, 0xe9, 0x40, 0x3a, + 0x04, 0xec, 0x87, 0x34, 0xfb, 0x13, 0xbc, 0xd7, 0x4d, 0x40, 0x57, 0xe4, 0x32, 0x8c, 0x5e, 0xf3, + 0x1d, 0x3b, 0xd0, 0x9b, 0x71, 0xe8, 0xff, 0xe0, 0x68, 0xa1, 0x4f, 0x1c, 0xd6, 0x72, 0x3c, 0x1c, + 0xe8, 0x4d, 0x3f, 0x0e, 0xfb, 0x9f, 0x1c, 0x1b, 0x02, 0x08, 0xd8, 0xd0, 0xfd, 0x60, 0x98, 0x79, + 0xff, 0x40, 0x80, 0x05, 0x80, 0x18, 0x4d, 0xfe, 0xbf, 0x8e, 0x77, 0xe3, 0xb0, 0xef, 0x0b, 0xa3, + 0xb9, 0xbe, 0xf2, 0x09, 0xc8, 0x92, 0x7f, 0xd9, 0xef, 0xd9, 0x62, 0xc0, 0xff, 0xc5, 0xc1, 0x1d, + 0x04, 0x79, 0xb3, 0x1f, 0x34, 0x02, 0x33, 0xde, 0xd9, 0xff, 0xcd, 0x57, 0x5a, 0xe8, 0x2b, 0x65, + 0xc8, 0xf9, 0x41, 0xa3, 0xd1, 0xe6, 0xfd, 0x69, 0x0c, 0xfc, 0x7f, 0x3e, 0x08, 0xaf, 0x2c, 0x42, + 0x0c, 0x59, 0xed, 0x9b, 0xd7, 0x03, 0xd7, 0xa1, 0x9f, 0x39, 0xe2, 0x18, 0x1e, 0x70, 0x86, 0x08, + 0xa4, 0x52, 0x1b, 0x7c, 0x7d, 0x0b, 0x8b, 0xce, 0xa2, 0xc3, 0x2e, 0x6e, 0x5f, 0x2c, 0xc5, 0xdf, + 0xc0, 0xc2, 0x5f, 0xa7, 0x60, 0x0c, 0xdf, 0xd2, 0x5b, 0xae, 0x20, 0x41, 0x29, 0x52, 0x80, 0xa7, + 0x0f, 0x76, 0x7b, 0x5b, 0xfa, 0x82, 0x04, 0x52, 0x19, 0x3d, 0x01, 0xb9, 0x85, 0x4e, 0xf9, 0x67, + 0x3f, 0x87, 0xaa, 0xa4, 0xee, 0xde, 0x9b, 0x3d, 0xa4, 0x46, 0x07, 0xd0, 0xc3, 0x30, 0xb2, 0xd2, + 0xf9, 0x49, 0x5d, 0x92, 0xab, 0x70, 0x19, 0x52, 0x20, 0x51, 0x67, 0x9f, 0x56, 0xf3, 0x95, 0x53, + 0x64, 0xe4, 0x1f, 0xee, 0xcd, 0xee, 0x3d, 0x15, 0x62, 0xed, 0xfc, 0x66, 0xdb, 0x6c, 0xa8, 0x89, + 0x7a, 0x43, 0xc9, 0xfc, 0xe2, 0x6b, 0xb3, 0x87, 0xde, 0x7c, 0x6d, 0x56, 0x2a, 0xd9, 0x20, 0x55, + 0xd0, 0x2c, 0x48, 0x65, 0x6a, 0x46, 0xee, 0xec, 0xe8, 0x3c, 0xd5, 0x2c, 0x57, 0x32, 0x84, 0xf2, + 0xad, 0x7b, 0xb3, 0x92, 0x2a, 0x95, 0x51, 0x05, 0xa4, 0x45, 0xfa, 0x05, 0x22, 0x5f, 0x39, 0xc7, + 0x5f, 0xf5, 0xd4, 0xbe, 0xaf, 0x3a, 0xc3, 0x36, 0xdc, 0xfc, 0xa6, 0x69, 0x07, 0xff, 0xef, 0xec, + 0x25, 0x55, 0x5a, 0x54, 0x52, 0xef, 0x93, 0xf7, 0x3d, 0x0a, 0x52, 0x15, 0xcd, 0x40, 0x8a, 0x24, + 0x43, 0xfa, 0xca, 0x64, 0x05, 0xee, 0xdf, 0x9b, 0x1d, 0x59, 0xde, 0x25, 0x39, 0x4e, 0xa5, 0xf2, + 0xd2, 0x45, 0x90, 0x36, 0xd1, 0xe1, 0x7e, 0xa3, 0x88, 0x29, 0x87, 0x41, 0xaa, 0xf0, 0x5f, 0x8c, + 0x72, 0x71, 0x45, 0x95, 0x2a, 0x4a, 0xea, 0x2e, 0x61, 0x9f, 0x04, 0xa9, 0x76, 0x2a, 0x93, 0x91, + 0xd8, 0x67, 0x35, 0x25, 0x75, 0xf7, 0xf5, 0xd9, 0x43, 0xa5, 0x93, 0x20, 0xa9, 0x68, 0x06, 0xa0, + 0x53, 0x99, 0x28, 0xed, 0x98, 0x1a, 0x91, 0x28, 0xa9, 0xb7, 0x88, 0xea, 0x69, 0xc8, 0x54, 0x75, + 0x5f, 0xfc, 0x08, 0x2f, 0x5d, 0xb7, 0x83, 0xa7, 0xcf, 0x72, 0x2b, 0xb3, 0xff, 0x7b, 0x6f, 0x36, + 0x6d, 0x12, 0x81, 0xca, 0xe4, 0x95, 0xa7, 0xfe, 0xfe, 0x9d, 0x99, 0x43, 0x6f, 0xbf, 0x33, 0x23, + 0xbd, 0xff, 0xce, 0x8c, 0xf4, 0xc3, 0x77, 0x66, 0xa4, 0x3b, 0xf7, 0x67, 0xa4, 0x37, 0xef, 0xcf, + 0x48, 0xdf, 0xba, 0x3f, 0x23, 0x7d, 0xf7, 0xfe, 0x8c, 0x74, 0xf7, 0xfe, 0x8c, 0xf4, 0xd6, 0xfd, + 0x19, 0xe9, 0xed, 0xfb, 0x33, 0xd2, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x26, 0x51, 0x9d, + 0xdd, 0x34, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -1675,6 +1680,9 @@ return dAtA } func (m *A) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Description) @@ -1689,6 +1697,9 @@ } func (m *B) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.A.Size() @@ -1706,6 +1717,9 @@ } func (m *C) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MySize != nil { @@ -1718,6 +1732,9 @@ } func (m *U) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.A != nil { @@ -1735,6 +1752,9 @@ } func (m *E) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_extensions != nil { @@ -1747,6 +1767,9 @@ } func (m *R) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Recognized != nil { @@ -1756,6 +1779,9 @@ } func (m *CastType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int32 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/example/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/example/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/example/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/example/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -27,4 +27,4 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. regenerate: - (protoc -I=. -I=$(GOPATH)/src -I=$(GOPATH)/src/github.com/gogo/protobuf/protobuf --gogo_out=. example.proto) + (protoc -I=. -I=$(GOPATH)/src/github.com/gogo/protobuf/protobuf -I=$(GOPATH)/src --gogo_out=. example.proto) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/filedotname/file.dot.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/filedotname/file.dot.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/filedotname/file.dot.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/filedotname/file.dot.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -67,245 +67,250 @@ func FileDotDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3794 bytes of a gzipped FileDescriptorSet + // 3876 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xe3, 0xd6, 0x75, 0x16, 0xf8, 0x23, 0x91, 0x87, 0x14, 0x05, 0x41, 0xf2, 0x2e, 0x57, 0x8e, 0xb9, 0xbb, 0xb2, 0x1d, 0xcb, 0x76, 0xa3, 0xcd, 0xac, 0xbd, 0x6b, 0x2f, 0xb7, 0x89, 0x4b, 0x51, 0x5c, 0x85, 0xae, - 0x24, 0x32, 0xa0, 0x14, 0xff, 0x64, 0x3a, 0x18, 0x08, 0xb8, 0xa4, 0xb0, 0x0b, 0x02, 0x08, 0x00, + 0x24, 0x32, 0xa0, 0x14, 0xff, 0x64, 0x3a, 0x18, 0x08, 0xbc, 0xa4, 0xb0, 0x0b, 0x02, 0x08, 0x00, 0xee, 0x5a, 0x3b, 0x7d, 0xd8, 0x8e, 0xfb, 0x33, 0x99, 0x4e, 0xff, 0x3b, 0xd3, 0xc4, 0x75, 0xdc, - 0xa6, 0x33, 0xa9, 0xd3, 0xb4, 0x69, 0x93, 0xa6, 0x4d, 0x93, 0x3e, 0xe5, 0x25, 0xad, 0x9f, 0x3a, - 0xc9, 0x5b, 0x1f, 0xfa, 0xe0, 0x55, 0x3c, 0x53, 0xb7, 0x75, 0x1b, 0xb7, 0xf5, 0x83, 0x67, 0xf6, - 0x25, 0x73, 0xff, 0x40, 0x80, 0xa4, 0x04, 0x28, 0x33, 0x76, 0x9e, 0x24, 0x9c, 0x7b, 0xbe, 0x0f, - 0xe7, 0x9e, 0x7b, 0xee, 0x39, 0xe7, 0x5e, 0x10, 0x7e, 0x7c, 0x05, 0xce, 0xf5, 0x6c, 0xbb, 0x67, - 0xa2, 0x0b, 0x8e, 0x6b, 0xfb, 0xf6, 0xde, 0xa0, 0x7b, 0x41, 0x47, 0x9e, 0xe6, 0x1a, 0x8e, 0x6f, - 0xbb, 0xab, 0x44, 0x26, 0xcd, 0x51, 0x8d, 0x55, 0xae, 0xb1, 0xbc, 0x05, 0xf3, 0xd7, 0x0c, 0x13, - 0xad, 0x07, 0x8a, 0x1d, 0xe4, 0x4b, 0x4f, 0x43, 0xa6, 0x6b, 0x98, 0xa8, 0x2c, 0x9c, 0x4b, 0xaf, - 0x14, 0x2e, 0x3e, 0xb4, 0x3a, 0x02, 0x5a, 0x8d, 0x22, 0xda, 0x58, 0x2c, 0x13, 0xc4, 0xf2, 0x5b, - 0x19, 0x58, 0x98, 0x30, 0x2a, 0x49, 0x90, 0xb1, 0xd4, 0x3e, 0x66, 0x14, 0x56, 0xf2, 0x32, 0xf9, - 0x5f, 0x2a, 0xc3, 0x8c, 0xa3, 0x6a, 0x37, 0xd4, 0x1e, 0x2a, 0xa7, 0x88, 0x98, 0x3f, 0x4a, 0x15, - 0x00, 0x1d, 0x39, 0xc8, 0xd2, 0x91, 0xa5, 0x1d, 0x94, 0xd3, 0xe7, 0xd2, 0x2b, 0x79, 0x39, 0x24, - 0x91, 0x1e, 0x87, 0x79, 0x67, 0xb0, 0x67, 0x1a, 0x9a, 0x12, 0x52, 0x83, 0x73, 0xe9, 0x95, 0xac, - 0x2c, 0xd2, 0x81, 0xf5, 0xa1, 0xf2, 0x23, 0x30, 0x77, 0x0b, 0xa9, 0x37, 0xc2, 0xaa, 0x05, 0xa2, - 0x5a, 0xc2, 0xe2, 0x90, 0x62, 0x1d, 0x8a, 0x7d, 0xe4, 0x79, 0x6a, 0x0f, 0x29, 0xfe, 0x81, 0x83, - 0xca, 0x19, 0x32, 0xfb, 0x73, 0x63, 0xb3, 0x1f, 0x9d, 0x79, 0x81, 0xa1, 0x76, 0x0e, 0x1c, 0x24, - 0xd5, 0x20, 0x8f, 0xac, 0x41, 0x9f, 0x32, 0x64, 0x8f, 0xf0, 0x5f, 0xc3, 0x1a, 0xf4, 0x47, 0x59, - 0x72, 0x18, 0xc6, 0x28, 0x66, 0x3c, 0xe4, 0xde, 0x34, 0x34, 0x54, 0x9e, 0x26, 0x04, 0x8f, 0x8c, - 0x11, 0x74, 0xe8, 0xf8, 0x28, 0x07, 0xc7, 0x49, 0x75, 0xc8, 0xa3, 0x97, 0x7c, 0x64, 0x79, 0x86, - 0x6d, 0x95, 0x67, 0x08, 0xc9, 0xc3, 0x13, 0x56, 0x11, 0x99, 0xfa, 0x28, 0xc5, 0x10, 0x27, 0x5d, - 0x86, 0x19, 0xdb, 0xf1, 0x0d, 0xdb, 0xf2, 0xca, 0xb9, 0x73, 0xc2, 0x4a, 0xe1, 0xe2, 0x47, 0x26, - 0x06, 0x42, 0x8b, 0xea, 0xc8, 0x5c, 0x59, 0x6a, 0x82, 0xe8, 0xd9, 0x03, 0x57, 0x43, 0x8a, 0x66, - 0xeb, 0x48, 0x31, 0xac, 0xae, 0x5d, 0xce, 0x13, 0x82, 0xb3, 0xe3, 0x13, 0x21, 0x8a, 0x75, 0x5b, - 0x47, 0x4d, 0xab, 0x6b, 0xcb, 0x25, 0x2f, 0xf2, 0x2c, 0x9d, 0x82, 0x69, 0xef, 0xc0, 0xf2, 0xd5, - 0x97, 0xca, 0x45, 0x12, 0x21, 0xec, 0x69, 0xf9, 0xbb, 0xd3, 0x30, 0x97, 0x24, 0xc4, 0xae, 0x42, - 0xb6, 0x8b, 0x67, 0x59, 0x4e, 0x9d, 0xc4, 0x07, 0x14, 0x13, 0x75, 0xe2, 0xf4, 0x4f, 0xe9, 0xc4, - 0x1a, 0x14, 0x2c, 0xe4, 0xf9, 0x48, 0xa7, 0x11, 0x91, 0x4e, 0x18, 0x53, 0x40, 0x41, 0xe3, 0x21, - 0x95, 0xf9, 0xa9, 0x42, 0xea, 0x79, 0x98, 0x0b, 0x4c, 0x52, 0x5c, 0xd5, 0xea, 0xf1, 0xd8, 0xbc, - 0x10, 0x67, 0xc9, 0x6a, 0x83, 0xe3, 0x64, 0x0c, 0x93, 0x4b, 0x28, 0xf2, 0x2c, 0xad, 0x03, 0xd8, - 0x16, 0xb2, 0xbb, 0x8a, 0x8e, 0x34, 0xb3, 0x9c, 0x3b, 0xc2, 0x4b, 0x2d, 0xac, 0x32, 0xe6, 0x25, - 0x9b, 0x4a, 0x35, 0x53, 0xba, 0x32, 0x0c, 0xb5, 0x99, 0x23, 0x22, 0x65, 0x8b, 0x6e, 0xb2, 0xb1, - 0x68, 0xdb, 0x85, 0x92, 0x8b, 0x70, 0xdc, 0x23, 0x9d, 0xcd, 0x2c, 0x4f, 0x8c, 0x58, 0x8d, 0x9d, - 0x99, 0xcc, 0x60, 0x74, 0x62, 0xb3, 0x6e, 0xf8, 0x51, 0x7a, 0x10, 0x02, 0x81, 0x42, 0xc2, 0x0a, - 0x48, 0x16, 0x2a, 0x72, 0xe1, 0xb6, 0xda, 0x47, 0x4b, 0xb7, 0xa1, 0x14, 0x75, 0x8f, 0xb4, 0x08, - 0x59, 0xcf, 0x57, 0x5d, 0x9f, 0x44, 0x61, 0x56, 0xa6, 0x0f, 0x92, 0x08, 0x69, 0x64, 0xe9, 0x24, - 0xcb, 0x65, 0x65, 0xfc, 0xaf, 0xf4, 0x0b, 0xc3, 0x09, 0xa7, 0xc9, 0x84, 0x3f, 0x3a, 0xbe, 0xa2, - 0x11, 0xe6, 0xd1, 0x79, 0x2f, 0x3d, 0x05, 0xb3, 0x91, 0x09, 0x24, 0x7d, 0xf5, 0xf2, 0x2f, 0xc3, - 0x7d, 0x13, 0xa9, 0xa5, 0xe7, 0x61, 0x71, 0x60, 0x19, 0x96, 0x8f, 0x5c, 0xc7, 0x45, 0x38, 0x62, - 0xe9, 0xab, 0xca, 0xff, 0x3e, 0x73, 0x44, 0xcc, 0xed, 0x86, 0xb5, 0x29, 0x8b, 0xbc, 0x30, 0x18, - 0x17, 0x3e, 0x96, 0xcf, 0xbd, 0x3d, 0x23, 0xde, 0xb9, 0x73, 0xe7, 0x4e, 0x6a, 0xf9, 0x0b, 0xd3, - 0xb0, 0x38, 0x69, 0xcf, 0x4c, 0xdc, 0xbe, 0xa7, 0x60, 0xda, 0x1a, 0xf4, 0xf7, 0x90, 0x4b, 0x9c, - 0x94, 0x95, 0xd9, 0x93, 0x54, 0x83, 0xac, 0xa9, 0xee, 0x21, 0xb3, 0x9c, 0x39, 0x27, 0xac, 0x94, - 0x2e, 0x3e, 0x9e, 0x68, 0x57, 0xae, 0x6e, 0x62, 0x88, 0x4c, 0x91, 0xd2, 0x27, 0x21, 0xc3, 0x52, - 0x34, 0x66, 0x78, 0x2c, 0x19, 0x03, 0xde, 0x4b, 0x32, 0xc1, 0x49, 0xf7, 0x43, 0x1e, 0xff, 0xa5, - 0xb1, 0x31, 0x4d, 0x6c, 0xce, 0x61, 0x01, 0x8e, 0x0b, 0x69, 0x09, 0x72, 0x64, 0x9b, 0xe8, 0x88, - 0x97, 0xb6, 0xe0, 0x19, 0x07, 0x96, 0x8e, 0xba, 0xea, 0xc0, 0xf4, 0x95, 0x9b, 0xaa, 0x39, 0x40, - 0x24, 0xe0, 0xf3, 0x72, 0x91, 0x09, 0x3f, 0x83, 0x65, 0xd2, 0x59, 0x28, 0xd0, 0x5d, 0x65, 0x58, - 0x3a, 0x7a, 0x89, 0x64, 0xcf, 0xac, 0x4c, 0x37, 0x5a, 0x13, 0x4b, 0xf0, 0xeb, 0xaf, 0x7b, 0xb6, - 0xc5, 0x43, 0x93, 0xbc, 0x02, 0x0b, 0xc8, 0xeb, 0x9f, 0x1a, 0x4d, 0xdc, 0x0f, 0x4c, 0x9e, 0xde, - 0x68, 0x4c, 0x2d, 0x7f, 0x3b, 0x05, 0x19, 0x92, 0x2f, 0xe6, 0xa0, 0xb0, 0xf3, 0x42, 0xbb, 0xa1, - 0xac, 0xb7, 0x76, 0xd7, 0x36, 0x1b, 0xa2, 0x20, 0x95, 0x00, 0x88, 0xe0, 0xda, 0x66, 0xab, 0xb6, - 0x23, 0xa6, 0x82, 0xe7, 0xe6, 0xf6, 0xce, 0xe5, 0x27, 0xc5, 0x74, 0x00, 0xd8, 0xa5, 0x82, 0x4c, - 0x58, 0xe1, 0x89, 0x8b, 0x62, 0x56, 0x12, 0xa1, 0x48, 0x09, 0x9a, 0xcf, 0x37, 0xd6, 0x2f, 0x3f, - 0x29, 0x4e, 0x47, 0x25, 0x4f, 0x5c, 0x14, 0x67, 0xa4, 0x59, 0xc8, 0x13, 0xc9, 0x5a, 0xab, 0xb5, - 0x29, 0xe6, 0x02, 0xce, 0xce, 0x8e, 0xdc, 0xdc, 0xde, 0x10, 0xf3, 0x01, 0xe7, 0x86, 0xdc, 0xda, - 0x6d, 0x8b, 0x10, 0x30, 0x6c, 0x35, 0x3a, 0x9d, 0xda, 0x46, 0x43, 0x2c, 0x04, 0x1a, 0x6b, 0x2f, - 0xec, 0x34, 0x3a, 0x62, 0x31, 0x62, 0xd6, 0x13, 0x17, 0xc5, 0xd9, 0xe0, 0x15, 0x8d, 0xed, 0xdd, - 0x2d, 0xb1, 0x24, 0xcd, 0xc3, 0x2c, 0x7d, 0x05, 0x37, 0x62, 0x6e, 0x44, 0x74, 0xf9, 0x49, 0x51, - 0x1c, 0x1a, 0x42, 0x59, 0xe6, 0x23, 0x82, 0xcb, 0x4f, 0x8a, 0xd2, 0x72, 0x1d, 0xb2, 0x24, 0xba, - 0x24, 0x09, 0x4a, 0x9b, 0xb5, 0xb5, 0xc6, 0xa6, 0xd2, 0x6a, 0xef, 0x34, 0x5b, 0xdb, 0xb5, 0x4d, - 0x51, 0x18, 0xca, 0xe4, 0xc6, 0xa7, 0x77, 0x9b, 0x72, 0x63, 0x5d, 0x4c, 0x85, 0x65, 0xed, 0x46, - 0x6d, 0xa7, 0xb1, 0x2e, 0xa6, 0x97, 0x35, 0x58, 0x9c, 0x94, 0x27, 0x27, 0xee, 0x8c, 0xd0, 0x12, - 0xa7, 0x8e, 0x58, 0x62, 0xc2, 0x35, 0xb6, 0xc4, 0x3f, 0x4a, 0xc1, 0xc2, 0x84, 0x5a, 0x31, 0xf1, - 0x25, 0xcf, 0x40, 0x96, 0x86, 0x28, 0xad, 0x9e, 0x8f, 0x4e, 0x2c, 0x3a, 0x24, 0x60, 0xc7, 0x2a, - 0x28, 0xc1, 0x85, 0x3b, 0x88, 0xf4, 0x11, 0x1d, 0x04, 0xa6, 0x18, 0xcb, 0xe9, 0xbf, 0x34, 0x96, - 0xd3, 0x69, 0xd9, 0xbb, 0x9c, 0xa4, 0xec, 0x11, 0xd9, 0xc9, 0x72, 0x7b, 0x76, 0x42, 0x6e, 0xbf, - 0x0a, 0xf3, 0x63, 0x44, 0x89, 0x73, 0xec, 0xcb, 0x02, 0x94, 0x8f, 0x72, 0x4e, 0x4c, 0xa6, 0x4b, - 0x45, 0x32, 0xdd, 0xd5, 0x51, 0x0f, 0x9e, 0x3f, 0x7a, 0x11, 0xc6, 0xd6, 0xfa, 0x75, 0x01, 0x4e, - 0x4d, 0xee, 0x14, 0x27, 0xda, 0xf0, 0x49, 0x98, 0xee, 0x23, 0x7f, 0xdf, 0xe6, 0xdd, 0xd2, 0x47, - 0x27, 0xd4, 0x60, 0x3c, 0x3c, 0xba, 0xd8, 0x0c, 0x15, 0x2e, 0xe2, 0xe9, 0xa3, 0xda, 0x3d, 0x6a, - 0xcd, 0x98, 0xa5, 0x9f, 0x4f, 0xc1, 0x7d, 0x13, 0xc9, 0x27, 0x1a, 0xfa, 0x00, 0x80, 0x61, 0x39, - 0x03, 0x9f, 0x76, 0x44, 0x34, 0xc1, 0xe6, 0x89, 0x84, 0x24, 0x2f, 0x9c, 0x3c, 0x07, 0x7e, 0x30, - 0x9e, 0x26, 0xe3, 0x40, 0x45, 0x44, 0xe1, 0xe9, 0xa1, 0xa1, 0x19, 0x62, 0x68, 0xe5, 0x88, 0x99, - 0x8e, 0x05, 0xe6, 0xc7, 0x41, 0xd4, 0x4c, 0x03, 0x59, 0xbe, 0xe2, 0xf9, 0x2e, 0x52, 0xfb, 0x86, - 0xd5, 0x23, 0x15, 0x24, 0x57, 0xcd, 0x76, 0x55, 0xd3, 0x43, 0xf2, 0x1c, 0x1d, 0xee, 0xf0, 0x51, - 0x8c, 0x20, 0x01, 0xe4, 0x86, 0x10, 0xd3, 0x11, 0x04, 0x1d, 0x0e, 0x10, 0xcb, 0xdf, 0xca, 0x41, - 0x21, 0xd4, 0x57, 0x4b, 0xe7, 0xa1, 0x78, 0x5d, 0xbd, 0xa9, 0x2a, 0xfc, 0xac, 0x44, 0x3d, 0x51, - 0xc0, 0xb2, 0x36, 0x3b, 0x2f, 0x7d, 0x1c, 0x16, 0x89, 0x8a, 0x3d, 0xf0, 0x91, 0xab, 0x68, 0xa6, - 0xea, 0x79, 0xc4, 0x69, 0x39, 0xa2, 0x2a, 0xe1, 0xb1, 0x16, 0x1e, 0xaa, 0xf3, 0x11, 0xe9, 0x12, - 0x2c, 0x10, 0x44, 0x7f, 0x60, 0xfa, 0x86, 0x63, 0x22, 0x05, 0x9f, 0xde, 0x3c, 0x52, 0x49, 0x02, - 0xcb, 0xe6, 0xb1, 0xc6, 0x16, 0x53, 0xc0, 0x16, 0x79, 0xd2, 0x3a, 0x3c, 0x40, 0x60, 0x3d, 0x64, - 0x21, 0x57, 0xf5, 0x91, 0x82, 0x3e, 0x37, 0x50, 0x4d, 0x4f, 0x51, 0x2d, 0x5d, 0xd9, 0x57, 0xbd, - 0xfd, 0xf2, 0x22, 0x26, 0x58, 0x4b, 0x95, 0x05, 0xf9, 0x0c, 0x56, 0xdc, 0x60, 0x7a, 0x0d, 0xa2, - 0x56, 0xb3, 0xf4, 0x4f, 0xa9, 0xde, 0xbe, 0x54, 0x85, 0x53, 0x84, 0xc5, 0xf3, 0x5d, 0xc3, 0xea, - 0x29, 0xda, 0x3e, 0xd2, 0x6e, 0x28, 0x03, 0xbf, 0xfb, 0x74, 0xf9, 0xfe, 0xf0, 0xfb, 0x89, 0x85, - 0x1d, 0xa2, 0x53, 0xc7, 0x2a, 0xbb, 0x7e, 0xf7, 0x69, 0xa9, 0x03, 0x45, 0xbc, 0x18, 0x7d, 0xe3, - 0x36, 0x52, 0xba, 0xb6, 0x4b, 0x4a, 0x63, 0x69, 0x42, 0x6a, 0x0a, 0x79, 0x70, 0xb5, 0xc5, 0x00, - 0x5b, 0xb6, 0x8e, 0xaa, 0xd9, 0x4e, 0xbb, 0xd1, 0x58, 0x97, 0x0b, 0x9c, 0xe5, 0x9a, 0xed, 0xe2, - 0x80, 0xea, 0xd9, 0x81, 0x83, 0x0b, 0x34, 0xa0, 0x7a, 0x36, 0x77, 0xef, 0x25, 0x58, 0xd0, 0x34, - 0x3a, 0x67, 0x43, 0x53, 0xd8, 0x19, 0xcb, 0x2b, 0x8b, 0x11, 0x67, 0x69, 0xda, 0x06, 0x55, 0x60, - 0x31, 0xee, 0x49, 0x57, 0xe0, 0xbe, 0xa1, 0xb3, 0xc2, 0xc0, 0xf9, 0xb1, 0x59, 0x8e, 0x42, 0x2f, - 0xc1, 0x82, 0x73, 0x30, 0x0e, 0x94, 0x22, 0x6f, 0x74, 0x0e, 0x46, 0x61, 0x4f, 0xc1, 0xa2, 0xb3, - 0xef, 0x8c, 0xe3, 0x1e, 0x0b, 0xe3, 0x24, 0x67, 0xdf, 0x19, 0x05, 0x3e, 0x4c, 0x0e, 0xdc, 0x2e, - 0xd2, 0x54, 0x1f, 0xe9, 0xe5, 0xd3, 0x61, 0xf5, 0xd0, 0x80, 0x74, 0x01, 0x44, 0x4d, 0x53, 0x90, - 0xa5, 0xee, 0x99, 0x48, 0x51, 0x5d, 0x64, 0xa9, 0x5e, 0xf9, 0x6c, 0x58, 0xb9, 0xa4, 0x69, 0x0d, - 0x32, 0x5a, 0x23, 0x83, 0xd2, 0x63, 0x30, 0x6f, 0xef, 0x5d, 0xd7, 0x68, 0x48, 0x2a, 0x8e, 0x8b, - 0xba, 0xc6, 0x4b, 0xe5, 0x87, 0x88, 0x7f, 0xe7, 0xf0, 0x00, 0x09, 0xc8, 0x36, 0x11, 0x4b, 0x8f, - 0x82, 0xa8, 0x79, 0xfb, 0xaa, 0xeb, 0x90, 0x9c, 0xec, 0x39, 0xaa, 0x86, 0xca, 0x0f, 0x53, 0x55, - 0x2a, 0xdf, 0xe6, 0x62, 0xbc, 0x25, 0xbc, 0x5b, 0x46, 0xd7, 0xe7, 0x8c, 0x8f, 0xd0, 0x2d, 0x41, - 0x64, 0x8c, 0x6d, 0x05, 0x44, 0xec, 0x8a, 0xc8, 0x8b, 0x57, 0x88, 0x5a, 0xc9, 0xd9, 0x77, 0xc2, - 0xef, 0x7d, 0x10, 0x66, 0xb1, 0xe6, 0xf0, 0xa5, 0x8f, 0xd2, 0x86, 0xcc, 0xd9, 0x0f, 0xbd, 0xf1, - 0x03, 0xeb, 0x8d, 0x97, 0xab, 0x50, 0x0c, 0xc7, 0xa7, 0x94, 0x07, 0x1a, 0xa1, 0xa2, 0x80, 0x9b, - 0x95, 0x7a, 0x6b, 0x1d, 0xb7, 0x19, 0x2f, 0x36, 0xc4, 0x14, 0x6e, 0x77, 0x36, 0x9b, 0x3b, 0x0d, - 0x45, 0xde, 0xdd, 0xde, 0x69, 0x6e, 0x35, 0xc4, 0x74, 0xb8, 0xaf, 0xfe, 0x7e, 0x0a, 0x4a, 0xd1, - 0x23, 0x92, 0xf4, 0xf3, 0x70, 0x9a, 0xdf, 0x67, 0x78, 0xc8, 0x57, 0x6e, 0x19, 0x2e, 0xd9, 0x32, - 0x7d, 0x95, 0x96, 0xaf, 0x60, 0xd1, 0x16, 0x99, 0x56, 0x07, 0xf9, 0xcf, 0x19, 0x2e, 0xde, 0x10, - 0x7d, 0xd5, 0x97, 0x36, 0xe1, 0xac, 0x65, 0x2b, 0x9e, 0xaf, 0x5a, 0xba, 0xea, 0xea, 0xca, 0xf0, - 0x26, 0x49, 0x51, 0x35, 0x0d, 0x79, 0x9e, 0x4d, 0x4b, 0x55, 0xc0, 0xf2, 0x11, 0xcb, 0xee, 0x30, - 0xe5, 0x61, 0x0e, 0xaf, 0x31, 0xd5, 0x91, 0x00, 0x4b, 0x1f, 0x15, 0x60, 0xf7, 0x43, 0xbe, 0xaf, - 0x3a, 0x0a, 0xb2, 0x7c, 0xf7, 0x80, 0x34, 0xc6, 0x39, 0x39, 0xd7, 0x57, 0x9d, 0x06, 0x7e, 0xfe, - 0x70, 0xce, 0x27, 0xff, 0x96, 0x86, 0x62, 0xb8, 0x39, 0xc6, 0x67, 0x0d, 0x8d, 0xd4, 0x11, 0x81, - 0x64, 0x9a, 0x07, 0x8f, 0x6d, 0xa5, 0x57, 0xeb, 0xb8, 0xc0, 0x54, 0xa7, 0x69, 0xcb, 0x2a, 0x53, - 0x24, 0x2e, 0xee, 0x38, 0xb7, 0x20, 0xda, 0x22, 0xe4, 0x64, 0xf6, 0x24, 0x6d, 0xc0, 0xf4, 0x75, - 0x8f, 0x70, 0x4f, 0x13, 0xee, 0x87, 0x8e, 0xe7, 0x7e, 0xb6, 0x43, 0xc8, 0xf3, 0xcf, 0x76, 0x94, - 0xed, 0x96, 0xbc, 0x55, 0xdb, 0x94, 0x19, 0x5c, 0x3a, 0x03, 0x19, 0x53, 0xbd, 0x7d, 0x10, 0x2d, - 0x45, 0x44, 0x94, 0xd4, 0xf1, 0x67, 0x20, 0x73, 0x0b, 0xa9, 0x37, 0xa2, 0x05, 0x80, 0x88, 0x3e, - 0xc0, 0xd0, 0xbf, 0x00, 0x59, 0xe2, 0x2f, 0x09, 0x80, 0x79, 0x4c, 0x9c, 0x92, 0x72, 0x90, 0xa9, - 0xb7, 0x64, 0x1c, 0xfe, 0x22, 0x14, 0xa9, 0x54, 0x69, 0x37, 0x1b, 0xf5, 0x86, 0x98, 0x5a, 0xbe, - 0x04, 0xd3, 0xd4, 0x09, 0x78, 0x6b, 0x04, 0x6e, 0x10, 0xa7, 0xd8, 0x23, 0xe3, 0x10, 0xf8, 0xe8, - 0xee, 0xd6, 0x5a, 0x43, 0x16, 0x53, 0xe1, 0xe5, 0xf5, 0xa0, 0x18, 0xee, 0x8b, 0x3f, 0x9c, 0x98, - 0xfa, 0x47, 0x01, 0x0a, 0xa1, 0x3e, 0x17, 0x37, 0x28, 0xaa, 0x69, 0xda, 0xb7, 0x14, 0xd5, 0x34, - 0x54, 0x8f, 0x05, 0x05, 0x10, 0x51, 0x0d, 0x4b, 0x92, 0x2e, 0xda, 0x87, 0x62, 0xfc, 0x6b, 0x02, - 0x88, 0xa3, 0x2d, 0xe6, 0x88, 0x81, 0xc2, 0xcf, 0xd4, 0xc0, 0x57, 0x05, 0x28, 0x45, 0xfb, 0xca, - 0x11, 0xf3, 0xce, 0xff, 0x4c, 0xcd, 0x7b, 0x33, 0x05, 0xb3, 0x91, 0x6e, 0x32, 0xa9, 0x75, 0x9f, - 0x83, 0x79, 0x43, 0x47, 0x7d, 0xc7, 0xf6, 0x91, 0xa5, 0x1d, 0x28, 0x26, 0xba, 0x89, 0xcc, 0xf2, - 0x32, 0x49, 0x14, 0x17, 0x8e, 0xef, 0x57, 0x57, 0x9b, 0x43, 0xdc, 0x26, 0x86, 0x55, 0x17, 0x9a, - 0xeb, 0x8d, 0xad, 0x76, 0x6b, 0xa7, 0xb1, 0x5d, 0x7f, 0x41, 0xd9, 0xdd, 0xfe, 0xc5, 0xed, 0xd6, - 0x73, 0xdb, 0xb2, 0x68, 0x8c, 0xa8, 0x7d, 0x80, 0x5b, 0xbd, 0x0d, 0xe2, 0xa8, 0x51, 0xd2, 0x69, - 0x98, 0x64, 0x96, 0x38, 0x25, 0x2d, 0xc0, 0xdc, 0x76, 0x4b, 0xe9, 0x34, 0xd7, 0x1b, 0x4a, 0xe3, - 0xda, 0xb5, 0x46, 0x7d, 0xa7, 0x43, 0x6f, 0x20, 0x02, 0xed, 0x9d, 0xe8, 0xa6, 0x7e, 0x25, 0x0d, - 0x0b, 0x13, 0x2c, 0x91, 0x6a, 0xec, 0xec, 0x40, 0x8f, 0x33, 0x1f, 0x4b, 0x62, 0xfd, 0x2a, 0x2e, - 0xf9, 0x6d, 0xd5, 0xf5, 0xd9, 0x51, 0xe3, 0x51, 0xc0, 0x5e, 0xb2, 0x7c, 0xa3, 0x6b, 0x20, 0x97, - 0x5d, 0xd8, 0xd0, 0x03, 0xc5, 0xdc, 0x50, 0x4e, 0xef, 0x6c, 0x7e, 0x0e, 0x24, 0xc7, 0xf6, 0x0c, - 0xdf, 0xb8, 0x89, 0x14, 0xc3, 0xe2, 0xb7, 0x3b, 0xf8, 0x80, 0x91, 0x91, 0x45, 0x3e, 0xd2, 0xb4, - 0xfc, 0x40, 0xdb, 0x42, 0x3d, 0x75, 0x44, 0x1b, 0x27, 0xf0, 0xb4, 0x2c, 0xf2, 0x91, 0x40, 0xfb, - 0x3c, 0x14, 0x75, 0x7b, 0x80, 0xbb, 0x2e, 0xaa, 0x87, 0xeb, 0x85, 0x20, 0x17, 0xa8, 0x2c, 0x50, - 0x61, 0xfd, 0xf4, 0xf0, 0x5a, 0xa9, 0x28, 0x17, 0xa8, 0x8c, 0xaa, 0x3c, 0x02, 0x73, 0x6a, 0xaf, - 0xe7, 0x62, 0x72, 0x4e, 0x44, 0x4f, 0x08, 0xa5, 0x40, 0x4c, 0x14, 0x97, 0x9e, 0x85, 0x1c, 0xf7, - 0x03, 0x2e, 0xc9, 0xd8, 0x13, 0x8a, 0x43, 0x8f, 0xbd, 0xa9, 0x95, 0xbc, 0x9c, 0xb3, 0xf8, 0xe0, - 0x79, 0x28, 0x1a, 0x9e, 0x32, 0xbc, 0x25, 0x4f, 0x9d, 0x4b, 0xad, 0xe4, 0xe4, 0x82, 0xe1, 0x05, - 0x37, 0x8c, 0xcb, 0xaf, 0xa7, 0xa0, 0x14, 0xbd, 0xe5, 0x97, 0xd6, 0x21, 0x67, 0xda, 0x9a, 0x4a, - 0x42, 0x8b, 0x7e, 0x62, 0x5a, 0x89, 0xf9, 0x30, 0xb0, 0xba, 0xc9, 0xf4, 0xe5, 0x00, 0xb9, 0xf4, - 0x2f, 0x02, 0xe4, 0xb8, 0x58, 0x3a, 0x05, 0x19, 0x47, 0xf5, 0xf7, 0x09, 0x5d, 0x76, 0x2d, 0x25, - 0x0a, 0x32, 0x79, 0xc6, 0x72, 0xcf, 0x51, 0x2d, 0x12, 0x02, 0x4c, 0x8e, 0x9f, 0xf1, 0xba, 0x9a, - 0x48, 0xd5, 0xc9, 0xf1, 0xc3, 0xee, 0xf7, 0x91, 0xe5, 0x7b, 0x7c, 0x5d, 0x99, 0xbc, 0xce, 0xc4, - 0xd2, 0xe3, 0x30, 0xef, 0xbb, 0xaa, 0x61, 0x46, 0x74, 0x33, 0x44, 0x57, 0xe4, 0x03, 0x81, 0x72, - 0x15, 0xce, 0x70, 0x5e, 0x1d, 0xf9, 0xaa, 0xb6, 0x8f, 0xf4, 0x21, 0x68, 0x9a, 0x5c, 0x33, 0x9c, - 0x66, 0x0a, 0xeb, 0x6c, 0x9c, 0x63, 0x97, 0x7f, 0x28, 0xc0, 0x3c, 0x3f, 0x30, 0xe9, 0x81, 0xb3, - 0xb6, 0x00, 0x54, 0xcb, 0xb2, 0xfd, 0xb0, 0xbb, 0xc6, 0x43, 0x79, 0x0c, 0xb7, 0x5a, 0x0b, 0x40, - 0x72, 0x88, 0x60, 0xa9, 0x0f, 0x30, 0x1c, 0x39, 0xd2, 0x6d, 0x67, 0xa1, 0xc0, 0x3e, 0xe1, 0x90, - 0xef, 0x80, 0xf4, 0x88, 0x0d, 0x54, 0x84, 0x4f, 0x56, 0xd2, 0x22, 0x64, 0xf7, 0x50, 0xcf, 0xb0, - 0xd8, 0xc5, 0x2c, 0x7d, 0xe0, 0x17, 0x21, 0x99, 0xe0, 0x22, 0x64, 0xed, 0xb3, 0xb0, 0xa0, 0xd9, - 0xfd, 0x51, 0x73, 0xd7, 0xc4, 0x91, 0x63, 0xbe, 0xf7, 0x29, 0xe1, 0x45, 0x18, 0xb6, 0x98, 0xef, - 0x0b, 0xc2, 0x9f, 0xa5, 0xd2, 0x1b, 0xed, 0xb5, 0xaf, 0xa5, 0x96, 0x36, 0x28, 0xb4, 0xcd, 0x67, - 0x2a, 0xa3, 0xae, 0x89, 0x34, 0x6c, 0x3d, 0x7c, 0x65, 0x05, 0x3e, 0xd6, 0x33, 0xfc, 0xfd, 0xc1, - 0xde, 0xaa, 0x66, 0xf7, 0x2f, 0xf4, 0xec, 0x9e, 0x3d, 0xfc, 0xf4, 0x89, 0x9f, 0xc8, 0x03, 0xf9, - 0x8f, 0x7d, 0xfe, 0xcc, 0x07, 0xd2, 0xa5, 0xd8, 0x6f, 0xa5, 0xd5, 0x6d, 0x58, 0x60, 0xca, 0x0a, - 0xf9, 0xfe, 0x42, 0x4f, 0x11, 0xd2, 0xb1, 0x77, 0x58, 0xe5, 0x6f, 0xbe, 0x45, 0xca, 0xb5, 0x3c, - 0xcf, 0xa0, 0x78, 0x8c, 0x1e, 0x34, 0xaa, 0x32, 0xdc, 0x17, 0xe1, 0xa3, 0x5b, 0x13, 0xb9, 0x31, - 0x8c, 0xdf, 0x67, 0x8c, 0x0b, 0x21, 0xc6, 0x0e, 0x83, 0x56, 0xeb, 0x30, 0x7b, 0x12, 0xae, 0x7f, - 0x62, 0x5c, 0x45, 0x14, 0x26, 0xd9, 0x80, 0x39, 0x42, 0xa2, 0x0d, 0x3c, 0xdf, 0xee, 0x93, 0xbc, - 0x77, 0x3c, 0xcd, 0x3f, 0xbf, 0x45, 0xf7, 0x4a, 0x09, 0xc3, 0xea, 0x01, 0xaa, 0x5a, 0x05, 0xf2, - 0xc9, 0x49, 0x47, 0x9a, 0x19, 0xc3, 0xf0, 0x06, 0x33, 0x24, 0xd0, 0xaf, 0x7e, 0x06, 0x16, 0xf1, - 0xff, 0x24, 0x2d, 0x85, 0x2d, 0x89, 0xbf, 0xf0, 0x2a, 0xff, 0xf0, 0x65, 0xba, 0x1d, 0x17, 0x02, - 0x82, 0x90, 0x4d, 0xa1, 0x55, 0xec, 0x21, 0xdf, 0x47, 0xae, 0xa7, 0xa8, 0xe6, 0x24, 0xf3, 0x42, - 0x37, 0x06, 0xe5, 0x2f, 0xbe, 0x13, 0x5d, 0xc5, 0x0d, 0x8a, 0xac, 0x99, 0x66, 0x75, 0x17, 0x4e, - 0x4f, 0x88, 0x8a, 0x04, 0x9c, 0xaf, 0x30, 0xce, 0xc5, 0xb1, 0xc8, 0xc0, 0xb4, 0x6d, 0xe0, 0xf2, - 0x60, 0x2d, 0x13, 0x70, 0xfe, 0x31, 0xe3, 0x94, 0x18, 0x96, 0x2f, 0x29, 0x66, 0x7c, 0x16, 0xe6, - 0x6f, 0x22, 0x77, 0xcf, 0xf6, 0xd8, 0x2d, 0x4d, 0x02, 0xba, 0x57, 0x19, 0xdd, 0x1c, 0x03, 0x92, - 0x6b, 0x1b, 0xcc, 0x75, 0x05, 0x72, 0x5d, 0x55, 0x43, 0x09, 0x28, 0xbe, 0xc4, 0x28, 0x66, 0xb0, - 0x3e, 0x86, 0xd6, 0xa0, 0xd8, 0xb3, 0x59, 0x65, 0x8a, 0x87, 0xbf, 0xc6, 0xe0, 0x05, 0x8e, 0x61, - 0x14, 0x8e, 0xed, 0x0c, 0x4c, 0x5c, 0xb6, 0xe2, 0x29, 0xfe, 0x84, 0x53, 0x70, 0x0c, 0xa3, 0x38, - 0x81, 0x5b, 0xff, 0x94, 0x53, 0x78, 0x21, 0x7f, 0x3e, 0x03, 0x05, 0xdb, 0x32, 0x0f, 0x6c, 0x2b, - 0x89, 0x11, 0x5f, 0x66, 0x0c, 0xc0, 0x20, 0x98, 0xe0, 0x2a, 0xe4, 0x93, 0x2e, 0xc4, 0x57, 0xde, - 0xe1, 0xdb, 0x83, 0xaf, 0xc0, 0x06, 0xcc, 0xf1, 0x04, 0x65, 0xd8, 0x56, 0x02, 0x8a, 0x3f, 0x67, - 0x14, 0xa5, 0x10, 0x8c, 0x4d, 0xc3, 0x47, 0x9e, 0xdf, 0x43, 0x49, 0x48, 0x5e, 0xe7, 0xd3, 0x60, - 0x10, 0xe6, 0xca, 0x3d, 0x64, 0x69, 0xfb, 0xc9, 0x18, 0xbe, 0xca, 0x5d, 0xc9, 0x31, 0x98, 0xa2, - 0x0e, 0xb3, 0x7d, 0xd5, 0xf5, 0xf6, 0x55, 0x33, 0xd1, 0x72, 0xfc, 0x05, 0xe3, 0x28, 0x06, 0x20, - 0xe6, 0x91, 0x81, 0x75, 0x12, 0x9a, 0xaf, 0x71, 0x8f, 0x84, 0x60, 0x6c, 0xeb, 0x79, 0x3e, 0xb9, - 0xd2, 0x3a, 0x09, 0xdb, 0x5f, 0xf2, 0xad, 0x47, 0xb1, 0x5b, 0x61, 0xc6, 0xab, 0x90, 0xf7, 0x8c, - 0xdb, 0x89, 0x68, 0xfe, 0x8a, 0xaf, 0x34, 0x01, 0x60, 0xf0, 0x0b, 0x70, 0x66, 0x62, 0x99, 0x48, - 0x40, 0xf6, 0x75, 0x46, 0x76, 0x6a, 0x42, 0xa9, 0x60, 0x29, 0xe1, 0xa4, 0x94, 0x7f, 0xcd, 0x53, - 0x02, 0x1a, 0xe1, 0x6a, 0xe3, 0xb3, 0x82, 0xa7, 0x76, 0x4f, 0xe6, 0xb5, 0xbf, 0xe1, 0x5e, 0xa3, - 0xd8, 0x88, 0xd7, 0x76, 0xe0, 0x14, 0x63, 0x3c, 0xd9, 0xba, 0x7e, 0x83, 0x27, 0x56, 0x8a, 0xde, - 0x8d, 0xae, 0xee, 0x67, 0x61, 0x29, 0x70, 0x27, 0x6f, 0x4a, 0x3d, 0xa5, 0xaf, 0x3a, 0x09, 0x98, - 0xbf, 0xc9, 0x98, 0x79, 0xc6, 0x0f, 0xba, 0x5a, 0x6f, 0x4b, 0x75, 0x30, 0xf9, 0xf3, 0x50, 0xe6, - 0xe4, 0x03, 0xcb, 0x45, 0x9a, 0xdd, 0xb3, 0x8c, 0xdb, 0x48, 0x4f, 0x40, 0xfd, 0xb7, 0x23, 0x4b, - 0xb5, 0x1b, 0x82, 0x63, 0xe6, 0x26, 0x88, 0x41, 0xaf, 0xa2, 0x18, 0x7d, 0xc7, 0x76, 0xfd, 0x18, - 0xc6, 0x6f, 0xf1, 0x95, 0x0a, 0x70, 0x4d, 0x02, 0xab, 0x36, 0xa0, 0x44, 0x1e, 0x93, 0x86, 0xe4, - 0xdf, 0x31, 0xa2, 0xd9, 0x21, 0x8a, 0x25, 0x0e, 0xcd, 0xee, 0x3b, 0xaa, 0x9b, 0x24, 0xff, 0xfd, - 0x3d, 0x4f, 0x1c, 0x0c, 0xc2, 0x12, 0x87, 0x7f, 0xe0, 0x20, 0x5c, 0xed, 0x13, 0x30, 0x7c, 0x9b, - 0x27, 0x0e, 0x8e, 0x61, 0x14, 0xbc, 0x61, 0x48, 0x40, 0xf1, 0x0f, 0x9c, 0x82, 0x63, 0x30, 0xc5, - 0xa7, 0x87, 0x85, 0xd6, 0x45, 0x3d, 0xc3, 0xf3, 0x5d, 0xda, 0x0a, 0x1f, 0x4f, 0xf5, 0x9d, 0x77, - 0xa2, 0x4d, 0x98, 0x1c, 0x82, 0xe2, 0x4c, 0xc4, 0xae, 0x50, 0xc9, 0x49, 0x29, 0xde, 0xb0, 0xef, - 0xf2, 0x4c, 0x14, 0x82, 0xd1, 0xfd, 0x39, 0x37, 0xd2, 0xab, 0x48, 0x71, 0x3f, 0x84, 0x29, 0xff, - 0xca, 0x7b, 0x8c, 0x2b, 0xda, 0xaa, 0x54, 0x37, 0x71, 0x00, 0x45, 0x1b, 0x8a, 0x78, 0xb2, 0x97, - 0xdf, 0x0b, 0x62, 0x28, 0xd2, 0x4f, 0x54, 0xaf, 0xc1, 0x6c, 0xa4, 0x99, 0x88, 0xa7, 0xfa, 0x55, - 0x46, 0x55, 0x0c, 0xf7, 0x12, 0xd5, 0x4b, 0x90, 0xc1, 0x8d, 0x41, 0x3c, 0xfc, 0xd7, 0x18, 0x9c, - 0xa8, 0x57, 0x3f, 0x01, 0x39, 0xde, 0x10, 0xc4, 0x43, 0x7f, 0x9d, 0x41, 0x03, 0x08, 0x86, 0xf3, - 0x66, 0x20, 0x1e, 0xfe, 0x1b, 0x1c, 0xce, 0x21, 0x18, 0x9e, 0xdc, 0x85, 0xdf, 0xfb, 0xcd, 0x0c, - 0x4b, 0xe8, 0xdc, 0x77, 0x57, 0x61, 0x86, 0x75, 0x01, 0xf1, 0xe8, 0xcf, 0xb3, 0x97, 0x73, 0x44, - 0xf5, 0x29, 0xc8, 0x26, 0x74, 0xf8, 0x6f, 0x31, 0x28, 0xd5, 0xaf, 0xd6, 0xa1, 0x10, 0xaa, 0xfc, - 0xf1, 0xf0, 0xdf, 0x66, 0xf0, 0x30, 0x0a, 0x9b, 0xce, 0x2a, 0x7f, 0x3c, 0xc1, 0xef, 0x70, 0xd3, - 0x19, 0x02, 0xbb, 0x8d, 0x17, 0xfd, 0x78, 0xf4, 0xef, 0x72, 0xaf, 0x73, 0x48, 0xf5, 0x19, 0xc8, - 0x07, 0x89, 0x3c, 0x1e, 0xff, 0x7b, 0x0c, 0x3f, 0xc4, 0x60, 0x0f, 0x84, 0x0a, 0x49, 0x3c, 0xc5, - 0xef, 0x73, 0x0f, 0x84, 0x50, 0x78, 0x1b, 0x8d, 0x36, 0x07, 0xf1, 0x4c, 0x7f, 0xc0, 0xb7, 0xd1, - 0x48, 0x6f, 0x80, 0x57, 0x93, 0xe4, 0xd3, 0x78, 0x8a, 0x3f, 0xe4, 0xab, 0x49, 0xf4, 0xb1, 0x19, - 0xa3, 0xd5, 0x36, 0x9e, 0xe3, 0x8f, 0xb8, 0x19, 0x23, 0xc5, 0xb6, 0xda, 0x06, 0x69, 0xbc, 0xd2, - 0xc6, 0xf3, 0x7d, 0x81, 0xf1, 0xcd, 0x8f, 0x15, 0xda, 0xea, 0x73, 0x70, 0x6a, 0x72, 0x95, 0x8d, - 0x67, 0xfd, 0xe2, 0x7b, 0x23, 0xe7, 0xa2, 0x70, 0x91, 0xad, 0xee, 0x0c, 0xd3, 0x75, 0xb8, 0xc2, - 0xc6, 0xd3, 0xbe, 0xf2, 0x5e, 0x34, 0x63, 0x87, 0x0b, 0x6c, 0xb5, 0x06, 0x30, 0x2c, 0x6e, 0xf1, - 0x5c, 0xaf, 0x32, 0xae, 0x10, 0x08, 0x6f, 0x0d, 0x56, 0xdb, 0xe2, 0xf1, 0x5f, 0xe2, 0x5b, 0x83, - 0x21, 0xf0, 0xd6, 0xe0, 0x65, 0x2d, 0x1e, 0xfd, 0x1a, 0xdf, 0x1a, 0x1c, 0x82, 0x23, 0x3b, 0x54, - 0x39, 0xe2, 0x19, 0xbe, 0xcc, 0x23, 0x3b, 0x84, 0xaa, 0x5e, 0x85, 0x9c, 0x35, 0x30, 0x4d, 0x1c, - 0xa0, 0xd2, 0xf1, 0x3f, 0x10, 0x2b, 0xff, 0xc7, 0x3d, 0x66, 0x01, 0x07, 0x54, 0x2f, 0x41, 0x16, - 0xf5, 0xf7, 0x90, 0x1e, 0x87, 0xfc, 0xcf, 0x7b, 0x3c, 0x29, 0x61, 0xed, 0xea, 0x33, 0x00, 0xf4, - 0x68, 0x4f, 0x3e, 0x5b, 0xc5, 0x60, 0xff, 0xeb, 0x1e, 0xfb, 0xe9, 0xc6, 0x10, 0x32, 0x24, 0xa0, - 0x3f, 0x04, 0x39, 0x9e, 0xe0, 0x9d, 0x28, 0x01, 0x99, 0xf5, 0x15, 0x98, 0xb9, 0xee, 0xd9, 0x96, - 0xaf, 0xf6, 0xe2, 0xd0, 0xff, 0xcd, 0xd0, 0x5c, 0x1f, 0x3b, 0xac, 0x6f, 0xbb, 0xc8, 0x57, 0x7b, - 0x5e, 0x1c, 0xf6, 0x7f, 0x18, 0x36, 0x00, 0x60, 0xb0, 0xa6, 0x7a, 0x7e, 0x92, 0x79, 0xff, 0x98, - 0x83, 0x39, 0x00, 0x1b, 0x8d, 0xff, 0xbf, 0x81, 0x0e, 0xe2, 0xb0, 0xef, 0x72, 0xa3, 0x99, 0x7e, - 0xf5, 0x13, 0x90, 0xc7, 0xff, 0xd2, 0xdf, 0x63, 0xc5, 0x80, 0xff, 0x97, 0x81, 0x87, 0x08, 0xfc, - 0x66, 0xcf, 0xd7, 0x7d, 0x23, 0xde, 0xd9, 0xff, 0xc7, 0x56, 0x9a, 0xeb, 0x57, 0x6b, 0x50, 0xf0, - 0x7c, 0x5d, 0x1f, 0xb0, 0xfe, 0x2a, 0x06, 0xfe, 0xff, 0xf7, 0x82, 0x23, 0x77, 0x80, 0x59, 0x6b, - 0x4c, 0xbe, 0x3d, 0x84, 0x0d, 0x7b, 0xc3, 0xa6, 0xf7, 0x86, 0x2f, 0x2e, 0xc7, 0x5f, 0x00, 0xc2, - 0xd7, 0x05, 0x28, 0x75, 0x0d, 0x13, 0xad, 0xea, 0xb6, 0xcf, 0x2e, 0x02, 0x0b, 0xf8, 0x59, 0xb7, - 0x7d, 0x1c, 0x13, 0x4b, 0x27, 0xbb, 0x44, 0x5c, 0x9e, 0x07, 0x61, 0x4b, 0x2a, 0x82, 0xa0, 0xb2, - 0x9f, 0xe2, 0x08, 0xea, 0xda, 0xe6, 0x1b, 0x77, 0x2b, 0x53, 0x3f, 0xb8, 0x5b, 0x99, 0xfa, 0xd7, - 0xbb, 0x95, 0xa9, 0x37, 0xef, 0x56, 0x84, 0xb7, 0xef, 0x56, 0x84, 0x77, 0xef, 0x56, 0x84, 0xf7, - 0xef, 0x56, 0x84, 0x3b, 0x87, 0x15, 0xe1, 0xab, 0x87, 0x15, 0xe1, 0x1b, 0x87, 0x15, 0xe1, 0x3b, - 0x87, 0x15, 0xe1, 0x7b, 0x87, 0x15, 0xe1, 0x8d, 0xc3, 0xca, 0xd4, 0x0f, 0x0e, 0x2b, 0x53, 0x6f, - 0x1e, 0x56, 0x84, 0xb7, 0x0f, 0x2b, 0x53, 0xef, 0x1e, 0x56, 0x84, 0xf7, 0x0f, 0x2b, 0x53, 0x77, - 0x7e, 0x54, 0x99, 0xfa, 0x49, 0x00, 0x00, 0x00, 0xff, 0xff, 0xef, 0xfd, 0xfe, 0x02, 0xca, 0x31, - 0x00, 0x00, + 0x26, 0x9d, 0xc6, 0x69, 0xda, 0xb4, 0x49, 0xd3, 0xa6, 0x49, 0xfa, 0x92, 0x97, 0xb4, 0x7e, 0xea, + 0x24, 0x6f, 0x7d, 0xe8, 0x83, 0x57, 0xf1, 0x4c, 0xdd, 0xd6, 0x6d, 0xdc, 0x76, 0x1f, 0x3c, 0xb3, + 0x2f, 0x99, 0xfb, 0x07, 0x02, 0x20, 0xb5, 0x80, 0x32, 0x63, 0xe7, 0x49, 0xc2, 0xb9, 0xe7, 0xfb, + 0x70, 0xee, 0xb9, 0xe7, 0x9e, 0x73, 0xee, 0x05, 0xe1, 0xc7, 0x97, 0xe0, 0x4c, 0xdf, 0xb2, 0xfa, + 0x06, 0x3a, 0x67, 0x3b, 0x96, 0x67, 0xed, 0x0d, 0x7b, 0xe7, 0xba, 0xc8, 0xd5, 0x1c, 0xdd, 0xf6, + 0x2c, 0x67, 0x95, 0xc8, 0xa4, 0x39, 0xaa, 0xb1, 0xca, 0x35, 0x96, 0xb7, 0x60, 0xfe, 0x8a, 0x6e, + 0xa0, 0x75, 0x5f, 0xb1, 0x83, 0x3c, 0xe9, 0x69, 0xc8, 0xf4, 0x74, 0x03, 0x95, 0x85, 0x33, 0xe9, + 0x95, 0xc2, 0xf9, 0x87, 0x56, 0x23, 0xa0, 0xd5, 0x30, 0xa2, 0x8d, 0xc5, 0x32, 0x41, 0x2c, 0xbf, + 0x95, 0x81, 0x85, 0x09, 0xa3, 0x92, 0x04, 0x19, 0x53, 0x1d, 0x60, 0x46, 0x61, 0x25, 0x2f, 0x93, + 0xff, 0xa5, 0x32, 0xcc, 0xd8, 0xaa, 0x76, 0x4d, 0xed, 0xa3, 0x72, 0x8a, 0x88, 0xf9, 0xa3, 0x54, + 0x01, 0xe8, 0x22, 0x1b, 0x99, 0x5d, 0x64, 0x6a, 0x07, 0xe5, 0xf4, 0x99, 0xf4, 0x4a, 0x5e, 0x0e, + 0x48, 0xa4, 0xc7, 0x61, 0xde, 0x1e, 0xee, 0x19, 0xba, 0xa6, 0x04, 0xd4, 0xe0, 0x4c, 0x7a, 0x25, + 0x2b, 0x8b, 0x74, 0x60, 0x7d, 0xa4, 0xfc, 0x08, 0xcc, 0xdd, 0x40, 0xea, 0xb5, 0xa0, 0x6a, 0x81, + 0xa8, 0x96, 0xb0, 0x38, 0xa0, 0x58, 0x87, 0xe2, 0x00, 0xb9, 0xae, 0xda, 0x47, 0x8a, 0x77, 0x60, + 0xa3, 0x72, 0x86, 0xcc, 0xfe, 0xcc, 0xd8, 0xec, 0xa3, 0x33, 0x2f, 0x30, 0xd4, 0xce, 0x81, 0x8d, + 0xa4, 0x1a, 0xe4, 0x91, 0x39, 0x1c, 0x50, 0x86, 0xec, 0x11, 0xfe, 0x6b, 0x98, 0xc3, 0x41, 0x94, + 0x25, 0x87, 0x61, 0x8c, 0x62, 0xc6, 0x45, 0xce, 0x75, 0x5d, 0x43, 0xe5, 0x69, 0x42, 0xf0, 0xc8, + 0x18, 0x41, 0x87, 0x8e, 0x47, 0x39, 0x38, 0x4e, 0xaa, 0x43, 0x1e, 0xbd, 0xe4, 0x21, 0xd3, 0xd5, + 0x2d, 0xb3, 0x3c, 0x43, 0x48, 0x1e, 0x9e, 0xb0, 0x8a, 0xc8, 0xe8, 0x46, 0x29, 0x46, 0x38, 0xe9, + 0x22, 0xcc, 0x58, 0xb6, 0xa7, 0x5b, 0xa6, 0x5b, 0xce, 0x9d, 0x11, 0x56, 0x0a, 0xe7, 0x3f, 0x34, + 0x31, 0x10, 0x5a, 0x54, 0x47, 0xe6, 0xca, 0x52, 0x13, 0x44, 0xd7, 0x1a, 0x3a, 0x1a, 0x52, 0x34, + 0xab, 0x8b, 0x14, 0xdd, 0xec, 0x59, 0xe5, 0x3c, 0x21, 0x38, 0x3d, 0x3e, 0x11, 0xa2, 0x58, 0xb7, + 0xba, 0xa8, 0x69, 0xf6, 0x2c, 0xb9, 0xe4, 0x86, 0x9e, 0xa5, 0x13, 0x30, 0xed, 0x1e, 0x98, 0x9e, + 0xfa, 0x52, 0xb9, 0x48, 0x22, 0x84, 0x3d, 0x2d, 0x7f, 0x67, 0x1a, 0xe6, 0x92, 0x84, 0xd8, 0x65, + 0xc8, 0xf6, 0xf0, 0x2c, 0xcb, 0xa9, 0xe3, 0xf8, 0x80, 0x62, 0xc2, 0x4e, 0x9c, 0xfe, 0x29, 0x9d, + 0x58, 0x83, 0x82, 0x89, 0x5c, 0x0f, 0x75, 0x69, 0x44, 0xa4, 0x13, 0xc6, 0x14, 0x50, 0xd0, 0x78, + 0x48, 0x65, 0x7e, 0xaa, 0x90, 0x7a, 0x1e, 0xe6, 0x7c, 0x93, 0x14, 0x47, 0x35, 0xfb, 0x3c, 0x36, + 0xcf, 0xc5, 0x59, 0xb2, 0xda, 0xe0, 0x38, 0x19, 0xc3, 0xe4, 0x12, 0x0a, 0x3d, 0x4b, 0xeb, 0x00, + 0x96, 0x89, 0xac, 0x9e, 0xd2, 0x45, 0x9a, 0x51, 0xce, 0x1d, 0xe1, 0xa5, 0x16, 0x56, 0x19, 0xf3, + 0x92, 0x45, 0xa5, 0x9a, 0x21, 0x5d, 0x1a, 0x85, 0xda, 0xcc, 0x11, 0x91, 0xb2, 0x45, 0x37, 0xd9, + 0x58, 0xb4, 0xed, 0x42, 0xc9, 0x41, 0x38, 0xee, 0x51, 0x97, 0xcd, 0x2c, 0x4f, 0x8c, 0x58, 0x8d, + 0x9d, 0x99, 0xcc, 0x60, 0x74, 0x62, 0xb3, 0x4e, 0xf0, 0x51, 0x7a, 0x10, 0x7c, 0x81, 0x42, 0xc2, + 0x0a, 0x48, 0x16, 0x2a, 0x72, 0xe1, 0xb6, 0x3a, 0x40, 0x4b, 0x37, 0xa1, 0x14, 0x76, 0x8f, 0xb4, + 0x08, 0x59, 0xd7, 0x53, 0x1d, 0x8f, 0x44, 0x61, 0x56, 0xa6, 0x0f, 0x92, 0x08, 0x69, 0x64, 0x76, + 0x49, 0x96, 0xcb, 0xca, 0xf8, 0x5f, 0xe9, 0x17, 0x46, 0x13, 0x4e, 0x93, 0x09, 0x7f, 0x78, 0x7c, + 0x45, 0x43, 0xcc, 0xd1, 0x79, 0x2f, 0x3d, 0x05, 0xb3, 0xa1, 0x09, 0x24, 0x7d, 0xf5, 0xf2, 0x2f, + 0xc3, 0x7d, 0x13, 0xa9, 0xa5, 0xe7, 0x61, 0x71, 0x68, 0xea, 0xa6, 0x87, 0x1c, 0xdb, 0x41, 0x38, + 0x62, 0xe9, 0xab, 0xca, 0xff, 0x3e, 0x73, 0x44, 0xcc, 0xed, 0x06, 0xb5, 0x29, 0x8b, 0xbc, 0x30, + 0x1c, 0x17, 0x3e, 0x96, 0xcf, 0xbd, 0x3d, 0x23, 0xde, 0xba, 0x75, 0xeb, 0x56, 0x6a, 0xf9, 0x73, + 0xd3, 0xb0, 0x38, 0x69, 0xcf, 0x4c, 0xdc, 0xbe, 0x27, 0x60, 0xda, 0x1c, 0x0e, 0xf6, 0x90, 0x43, + 0x9c, 0x94, 0x95, 0xd9, 0x93, 0x54, 0x83, 0xac, 0xa1, 0xee, 0x21, 0xa3, 0x9c, 0x39, 0x23, 0xac, + 0x94, 0xce, 0x3f, 0x9e, 0x68, 0x57, 0xae, 0x6e, 0x62, 0x88, 0x4c, 0x91, 0xd2, 0xc7, 0x21, 0xc3, + 0x52, 0x34, 0x66, 0x78, 0x2c, 0x19, 0x03, 0xde, 0x4b, 0x32, 0xc1, 0x49, 0xf7, 0x43, 0x1e, 0xff, + 0xa5, 0xb1, 0x31, 0x4d, 0x6c, 0xce, 0x61, 0x01, 0x8e, 0x0b, 0x69, 0x09, 0x72, 0x64, 0x9b, 0x74, + 0x11, 0x2f, 0x6d, 0xfe, 0x33, 0x0e, 0xac, 0x2e, 0xea, 0xa9, 0x43, 0xc3, 0x53, 0xae, 0xab, 0xc6, + 0x10, 0x91, 0x80, 0xcf, 0xcb, 0x45, 0x26, 0xfc, 0x14, 0x96, 0x49, 0xa7, 0xa1, 0x40, 0x77, 0x95, + 0x6e, 0x76, 0xd1, 0x4b, 0x24, 0x7b, 0x66, 0x65, 0xba, 0xd1, 0x9a, 0x58, 0x82, 0x5f, 0x7f, 0xd5, + 0xb5, 0x4c, 0x1e, 0x9a, 0xe4, 0x15, 0x58, 0x40, 0x5e, 0xff, 0x54, 0x34, 0x71, 0x3f, 0x30, 0x79, + 0x7a, 0xd1, 0x98, 0x5a, 0xfe, 0x56, 0x0a, 0x32, 0x24, 0x5f, 0xcc, 0x41, 0x61, 0xe7, 0x85, 0x76, + 0x43, 0x59, 0x6f, 0xed, 0xae, 0x6d, 0x36, 0x44, 0x41, 0x2a, 0x01, 0x10, 0xc1, 0x95, 0xcd, 0x56, + 0x6d, 0x47, 0x4c, 0xf9, 0xcf, 0xcd, 0xed, 0x9d, 0x8b, 0x4f, 0x8a, 0x69, 0x1f, 0xb0, 0x4b, 0x05, + 0x99, 0xa0, 0xc2, 0x13, 0xe7, 0xc5, 0xac, 0x24, 0x42, 0x91, 0x12, 0x34, 0x9f, 0x6f, 0xac, 0x5f, + 0x7c, 0x52, 0x9c, 0x0e, 0x4b, 0x9e, 0x38, 0x2f, 0xce, 0x48, 0xb3, 0x90, 0x27, 0x92, 0xb5, 0x56, + 0x6b, 0x53, 0xcc, 0xf9, 0x9c, 0x9d, 0x1d, 0xb9, 0xb9, 0xbd, 0x21, 0xe6, 0x7d, 0xce, 0x0d, 0xb9, + 0xb5, 0xdb, 0x16, 0xc1, 0x67, 0xd8, 0x6a, 0x74, 0x3a, 0xb5, 0x8d, 0x86, 0x58, 0xf0, 0x35, 0xd6, + 0x5e, 0xd8, 0x69, 0x74, 0xc4, 0x62, 0xc8, 0xac, 0x27, 0xce, 0x8b, 0xb3, 0xfe, 0x2b, 0x1a, 0xdb, + 0xbb, 0x5b, 0x62, 0x49, 0x9a, 0x87, 0x59, 0xfa, 0x0a, 0x6e, 0xc4, 0x5c, 0x44, 0x74, 0xf1, 0x49, + 0x51, 0x1c, 0x19, 0x42, 0x59, 0xe6, 0x43, 0x82, 0x8b, 0x4f, 0x8a, 0xd2, 0x72, 0x1d, 0xb2, 0x24, + 0xba, 0x24, 0x09, 0x4a, 0x9b, 0xb5, 0xb5, 0xc6, 0xa6, 0xd2, 0x6a, 0xef, 0x34, 0x5b, 0xdb, 0xb5, + 0x4d, 0x51, 0x18, 0xc9, 0xe4, 0xc6, 0x27, 0x77, 0x9b, 0x72, 0x63, 0x5d, 0x4c, 0x05, 0x65, 0xed, + 0x46, 0x6d, 0xa7, 0xb1, 0x2e, 0xa6, 0x97, 0x35, 0x58, 0x9c, 0x94, 0x27, 0x27, 0xee, 0x8c, 0xc0, + 0x12, 0xa7, 0x8e, 0x58, 0x62, 0xc2, 0x35, 0xb6, 0xc4, 0x3f, 0x4a, 0xc1, 0xc2, 0x84, 0x5a, 0x31, + 0xf1, 0x25, 0xcf, 0x40, 0x96, 0x86, 0x28, 0xad, 0x9e, 0x8f, 0x4e, 0x2c, 0x3a, 0x24, 0x60, 0xc7, + 0x2a, 0x28, 0xc1, 0x05, 0x3b, 0x88, 0xf4, 0x11, 0x1d, 0x04, 0xa6, 0x18, 0xcb, 0xe9, 0xbf, 0x34, + 0x96, 0xd3, 0x69, 0xd9, 0xbb, 0x98, 0xa4, 0xec, 0x11, 0xd9, 0xf1, 0x72, 0x7b, 0x76, 0x42, 0x6e, + 0xbf, 0x0c, 0xf3, 0x63, 0x44, 0x89, 0x73, 0xec, 0xcb, 0x02, 0x94, 0x8f, 0x72, 0x4e, 0x4c, 0xa6, + 0x4b, 0x85, 0x32, 0xdd, 0xe5, 0xa8, 0x07, 0xcf, 0x1e, 0xbd, 0x08, 0x63, 0x6b, 0xfd, 0xba, 0x00, + 0x27, 0x26, 0x77, 0x8a, 0x13, 0x6d, 0xf8, 0x38, 0x4c, 0x0f, 0x90, 0xb7, 0x6f, 0xf1, 0x6e, 0xe9, + 0xc3, 0x13, 0x6a, 0x30, 0x1e, 0x8e, 0x2e, 0x36, 0x43, 0x05, 0x8b, 0x78, 0xfa, 0xa8, 0x76, 0x8f, + 0x5a, 0x33, 0x66, 0xe9, 0x67, 0x53, 0x70, 0xdf, 0x44, 0xf2, 0x89, 0x86, 0x3e, 0x00, 0xa0, 0x9b, + 0xf6, 0xd0, 0xa3, 0x1d, 0x11, 0x4d, 0xb0, 0x79, 0x22, 0x21, 0xc9, 0x0b, 0x27, 0xcf, 0xa1, 0xe7, + 0x8f, 0xa7, 0xc9, 0x38, 0x50, 0x11, 0x51, 0x78, 0x7a, 0x64, 0x68, 0x86, 0x18, 0x5a, 0x39, 0x62, + 0xa6, 0x63, 0x81, 0xf9, 0x51, 0x10, 0x35, 0x43, 0x47, 0xa6, 0xa7, 0xb8, 0x9e, 0x83, 0xd4, 0x81, + 0x6e, 0xf6, 0x49, 0x05, 0xc9, 0x55, 0xb3, 0x3d, 0xd5, 0x70, 0x91, 0x3c, 0x47, 0x87, 0x3b, 0x7c, + 0x14, 0x23, 0x48, 0x00, 0x39, 0x01, 0xc4, 0x74, 0x08, 0x41, 0x87, 0x7d, 0xc4, 0xf2, 0x37, 0x73, + 0x50, 0x08, 0xf4, 0xd5, 0xd2, 0x59, 0x28, 0x5e, 0x55, 0xaf, 0xab, 0x0a, 0x3f, 0x2b, 0x51, 0x4f, + 0x14, 0xb0, 0xac, 0xcd, 0xce, 0x4b, 0x1f, 0x85, 0x45, 0xa2, 0x62, 0x0d, 0x3d, 0xe4, 0x28, 0x9a, + 0xa1, 0xba, 0x2e, 0x71, 0x5a, 0x8e, 0xa8, 0x4a, 0x78, 0xac, 0x85, 0x87, 0xea, 0x7c, 0x44, 0xba, + 0x00, 0x0b, 0x04, 0x31, 0x18, 0x1a, 0x9e, 0x6e, 0x1b, 0x48, 0xc1, 0xa7, 0x37, 0x97, 0x54, 0x12, + 0xdf, 0xb2, 0x79, 0xac, 0xb1, 0xc5, 0x14, 0xb0, 0x45, 0xae, 0xb4, 0x0e, 0x0f, 0x10, 0x58, 0x1f, + 0x99, 0xc8, 0x51, 0x3d, 0xa4, 0xa0, 0xcf, 0x0c, 0x55, 0xc3, 0x55, 0x54, 0xb3, 0xab, 0xec, 0xab, + 0xee, 0x7e, 0x79, 0x11, 0x13, 0xac, 0xa5, 0xca, 0x82, 0x7c, 0x0a, 0x2b, 0x6e, 0x30, 0xbd, 0x06, + 0x51, 0xab, 0x99, 0xdd, 0x4f, 0xa8, 0xee, 0xbe, 0x54, 0x85, 0x13, 0x84, 0xc5, 0xf5, 0x1c, 0xdd, + 0xec, 0x2b, 0xda, 0x3e, 0xd2, 0xae, 0x29, 0x43, 0xaf, 0xf7, 0x74, 0xf9, 0xfe, 0xe0, 0xfb, 0x89, + 0x85, 0x1d, 0xa2, 0x53, 0xc7, 0x2a, 0xbb, 0x5e, 0xef, 0x69, 0xa9, 0x03, 0x45, 0xbc, 0x18, 0x03, + 0xfd, 0x26, 0x52, 0x7a, 0x96, 0x43, 0x4a, 0x63, 0x69, 0x42, 0x6a, 0x0a, 0x78, 0x70, 0xb5, 0xc5, + 0x00, 0x5b, 0x56, 0x17, 0x55, 0xb3, 0x9d, 0x76, 0xa3, 0xb1, 0x2e, 0x17, 0x38, 0xcb, 0x15, 0xcb, + 0xc1, 0x01, 0xd5, 0xb7, 0x7c, 0x07, 0x17, 0x68, 0x40, 0xf5, 0x2d, 0xee, 0xde, 0x0b, 0xb0, 0xa0, + 0x69, 0x74, 0xce, 0xba, 0xa6, 0xb0, 0x33, 0x96, 0x5b, 0x16, 0x43, 0xce, 0xd2, 0xb4, 0x0d, 0xaa, + 0xc0, 0x62, 0xdc, 0x95, 0x2e, 0xc1, 0x7d, 0x23, 0x67, 0x05, 0x81, 0xf3, 0x63, 0xb3, 0x8c, 0x42, + 0x2f, 0xc0, 0x82, 0x7d, 0x30, 0x0e, 0x94, 0x42, 0x6f, 0xb4, 0x0f, 0xa2, 0xb0, 0xa7, 0x60, 0xd1, + 0xde, 0xb7, 0xc7, 0x71, 0x8f, 0x05, 0x71, 0x92, 0xbd, 0x6f, 0x47, 0x81, 0x0f, 0x93, 0x03, 0xb7, + 0x83, 0x34, 0xd5, 0x43, 0xdd, 0xf2, 0xc9, 0xa0, 0x7a, 0x60, 0x40, 0x3a, 0x07, 0xa2, 0xa6, 0x29, + 0xc8, 0x54, 0xf7, 0x0c, 0xa4, 0xa8, 0x0e, 0x32, 0x55, 0xb7, 0x7c, 0x3a, 0xa8, 0x5c, 0xd2, 0xb4, + 0x06, 0x19, 0xad, 0x91, 0x41, 0xe9, 0x31, 0x98, 0xb7, 0xf6, 0xae, 0x6a, 0x34, 0x24, 0x15, 0xdb, + 0x41, 0x3d, 0xfd, 0xa5, 0xf2, 0x43, 0xc4, 0xbf, 0x73, 0x78, 0x80, 0x04, 0x64, 0x9b, 0x88, 0xa5, + 0x47, 0x41, 0xd4, 0xdc, 0x7d, 0xd5, 0xb1, 0x49, 0x4e, 0x76, 0x6d, 0x55, 0x43, 0xe5, 0x87, 0xa9, + 0x2a, 0x95, 0x6f, 0x73, 0x31, 0xde, 0x12, 0xee, 0x0d, 0xbd, 0xe7, 0x71, 0xc6, 0x47, 0xe8, 0x96, + 0x20, 0x32, 0xc6, 0xb6, 0x02, 0x22, 0x76, 0x45, 0xe8, 0xc5, 0x2b, 0x44, 0xad, 0x64, 0xef, 0xdb, + 0xc1, 0xf7, 0x3e, 0x08, 0xb3, 0x58, 0x73, 0xf4, 0xd2, 0x47, 0x69, 0x43, 0x66, 0xef, 0x07, 0xde, + 0xf8, 0xbe, 0xf5, 0xc6, 0xcb, 0x55, 0x28, 0x06, 0xe3, 0x53, 0xca, 0x03, 0x8d, 0x50, 0x51, 0xc0, + 0xcd, 0x4a, 0xbd, 0xb5, 0x8e, 0xdb, 0x8c, 0x17, 0x1b, 0x62, 0x0a, 0xb7, 0x3b, 0x9b, 0xcd, 0x9d, + 0x86, 0x22, 0xef, 0x6e, 0xef, 0x34, 0xb7, 0x1a, 0x62, 0x3a, 0xd8, 0x57, 0x7f, 0x3f, 0x05, 0xa5, + 0xf0, 0x11, 0x49, 0xfa, 0x79, 0x38, 0xc9, 0xef, 0x33, 0x5c, 0xe4, 0x29, 0x37, 0x74, 0x87, 0x6c, + 0x99, 0x81, 0x4a, 0xcb, 0x97, 0xbf, 0x68, 0x8b, 0x4c, 0xab, 0x83, 0xbc, 0xe7, 0x74, 0x07, 0x6f, + 0x88, 0x81, 0xea, 0x49, 0x9b, 0x70, 0xda, 0xb4, 0x14, 0xd7, 0x53, 0xcd, 0xae, 0xea, 0x74, 0x95, + 0xd1, 0x4d, 0x92, 0xa2, 0x6a, 0x1a, 0x72, 0x5d, 0x8b, 0x96, 0x2a, 0x9f, 0xe5, 0x43, 0xa6, 0xd5, + 0x61, 0xca, 0xa3, 0x1c, 0x5e, 0x63, 0xaa, 0x91, 0x00, 0x4b, 0x1f, 0x15, 0x60, 0xf7, 0x43, 0x7e, + 0xa0, 0xda, 0x0a, 0x32, 0x3d, 0xe7, 0x80, 0x34, 0xc6, 0x39, 0x39, 0x37, 0x50, 0xed, 0x06, 0x7e, + 0xfe, 0x60, 0xce, 0x27, 0xff, 0x96, 0x86, 0x62, 0xb0, 0x39, 0xc6, 0x67, 0x0d, 0x8d, 0xd4, 0x11, + 0x81, 0x64, 0x9a, 0x07, 0xef, 0xd9, 0x4a, 0xaf, 0xd6, 0x71, 0x81, 0xa9, 0x4e, 0xd3, 0x96, 0x55, + 0xa6, 0x48, 0x5c, 0xdc, 0x71, 0x6e, 0x41, 0xb4, 0x45, 0xc8, 0xc9, 0xec, 0x49, 0xda, 0x80, 0xe9, + 0xab, 0x2e, 0xe1, 0x9e, 0x26, 0xdc, 0x0f, 0xdd, 0x9b, 0xfb, 0xd9, 0x0e, 0x21, 0xcf, 0x3f, 0xdb, + 0x51, 0xb6, 0x5b, 0xf2, 0x56, 0x6d, 0x53, 0x66, 0x70, 0xe9, 0x14, 0x64, 0x0c, 0xf5, 0xe6, 0x41, + 0xb8, 0x14, 0x11, 0x51, 0x52, 0xc7, 0x9f, 0x82, 0xcc, 0x0d, 0xa4, 0x5e, 0x0b, 0x17, 0x00, 0x22, + 0x7a, 0x1f, 0x43, 0xff, 0x1c, 0x64, 0x89, 0xbf, 0x24, 0x00, 0xe6, 0x31, 0x71, 0x4a, 0xca, 0x41, + 0xa6, 0xde, 0x92, 0x71, 0xf8, 0x8b, 0x50, 0xa4, 0x52, 0xa5, 0xdd, 0x6c, 0xd4, 0x1b, 0x62, 0x6a, + 0xf9, 0x02, 0x4c, 0x53, 0x27, 0xe0, 0xad, 0xe1, 0xbb, 0x41, 0x9c, 0x62, 0x8f, 0x8c, 0x43, 0xe0, + 0xa3, 0xbb, 0x5b, 0x6b, 0x0d, 0x59, 0x4c, 0x05, 0x97, 0xd7, 0x85, 0x62, 0xb0, 0x2f, 0xfe, 0x60, + 0x62, 0xea, 0xbb, 0x02, 0x14, 0x02, 0x7d, 0x2e, 0x6e, 0x50, 0x54, 0xc3, 0xb0, 0x6e, 0x28, 0xaa, + 0xa1, 0xab, 0x2e, 0x0b, 0x0a, 0x20, 0xa2, 0x1a, 0x96, 0x24, 0x5d, 0xb4, 0x0f, 0xc4, 0xf8, 0xd7, + 0x04, 0x10, 0xa3, 0x2d, 0x66, 0xc4, 0x40, 0xe1, 0x67, 0x6a, 0xe0, 0xab, 0x02, 0x94, 0xc2, 0x7d, + 0x65, 0xc4, 0xbc, 0xb3, 0x3f, 0x53, 0xf3, 0xde, 0x4c, 0xc1, 0x6c, 0xa8, 0x9b, 0x4c, 0x6a, 0xdd, + 0x67, 0x60, 0x5e, 0xef, 0xa2, 0x81, 0x6d, 0x79, 0xc8, 0xd4, 0x0e, 0x14, 0x03, 0x5d, 0x47, 0x46, + 0x79, 0x99, 0x24, 0x8a, 0x73, 0xf7, 0xee, 0x57, 0x57, 0x9b, 0x23, 0xdc, 0x26, 0x86, 0x55, 0x17, + 0x9a, 0xeb, 0x8d, 0xad, 0x76, 0x6b, 0xa7, 0xb1, 0x5d, 0x7f, 0x41, 0xd9, 0xdd, 0xfe, 0xc5, 0xed, + 0xd6, 0x73, 0xdb, 0xb2, 0xa8, 0x47, 0xd4, 0xde, 0xc7, 0xad, 0xde, 0x06, 0x31, 0x6a, 0x94, 0x74, + 0x12, 0x26, 0x99, 0x25, 0x4e, 0x49, 0x0b, 0x30, 0xb7, 0xdd, 0x52, 0x3a, 0xcd, 0xf5, 0x86, 0xd2, + 0xb8, 0x72, 0xa5, 0x51, 0xdf, 0xe9, 0xd0, 0x1b, 0x08, 0x5f, 0x7b, 0x27, 0xbc, 0xa9, 0x5f, 0x49, + 0xc3, 0xc2, 0x04, 0x4b, 0xa4, 0x1a, 0x3b, 0x3b, 0xd0, 0xe3, 0xcc, 0x47, 0x92, 0x58, 0xbf, 0x8a, + 0x4b, 0x7e, 0x5b, 0x75, 0x3c, 0x76, 0xd4, 0x78, 0x14, 0xb0, 0x97, 0x4c, 0x4f, 0xef, 0xe9, 0xc8, + 0x61, 0x17, 0x36, 0xf4, 0x40, 0x31, 0x37, 0x92, 0xd3, 0x3b, 0x9b, 0x9f, 0x03, 0xc9, 0xb6, 0x5c, + 0xdd, 0xd3, 0xaf, 0x23, 0x45, 0x37, 0xf9, 0xed, 0x0e, 0x3e, 0x60, 0x64, 0x64, 0x91, 0x8f, 0x34, + 0x4d, 0xcf, 0xd7, 0x36, 0x51, 0x5f, 0x8d, 0x68, 0xe3, 0x04, 0x9e, 0x96, 0x45, 0x3e, 0xe2, 0x6b, + 0x9f, 0x85, 0x62, 0xd7, 0x1a, 0xe2, 0xae, 0x8b, 0xea, 0xe1, 0x7a, 0x21, 0xc8, 0x05, 0x2a, 0xf3, + 0x55, 0x58, 0x3f, 0x3d, 0xba, 0x56, 0x2a, 0xca, 0x05, 0x2a, 0xa3, 0x2a, 0x8f, 0xc0, 0x9c, 0xda, + 0xef, 0x3b, 0x98, 0x9c, 0x13, 0xd1, 0x13, 0x42, 0xc9, 0x17, 0x13, 0xc5, 0xa5, 0x67, 0x21, 0xc7, + 0xfd, 0x80, 0x4b, 0x32, 0xf6, 0x84, 0x62, 0xd3, 0x63, 0x6f, 0x6a, 0x25, 0x2f, 0xe7, 0x4c, 0x3e, + 0x78, 0x16, 0x8a, 0xba, 0xab, 0x8c, 0x6e, 0xc9, 0x53, 0x67, 0x52, 0x2b, 0x39, 0xb9, 0xa0, 0xbb, + 0xfe, 0x0d, 0xe3, 0xf2, 0xeb, 0x29, 0x28, 0x85, 0x6f, 0xf9, 0xa5, 0x75, 0xc8, 0x19, 0x96, 0xa6, + 0x92, 0xd0, 0xa2, 0x9f, 0x98, 0x56, 0x62, 0x3e, 0x0c, 0xac, 0x6e, 0x32, 0x7d, 0xd9, 0x47, 0x2e, + 0xfd, 0x8b, 0x00, 0x39, 0x2e, 0x96, 0x4e, 0x40, 0xc6, 0x56, 0xbd, 0x7d, 0x42, 0x97, 0x5d, 0x4b, + 0x89, 0x82, 0x4c, 0x9e, 0xb1, 0xdc, 0xb5, 0x55, 0x93, 0x84, 0x00, 0x93, 0xe3, 0x67, 0xbc, 0xae, + 0x06, 0x52, 0xbb, 0xe4, 0xf8, 0x61, 0x0d, 0x06, 0xc8, 0xf4, 0x5c, 0xbe, 0xae, 0x4c, 0x5e, 0x67, + 0x62, 0xe9, 0x71, 0x98, 0xf7, 0x1c, 0x55, 0x37, 0x42, 0xba, 0x19, 0xa2, 0x2b, 0xf2, 0x01, 0x5f, + 0xb9, 0x0a, 0xa7, 0x38, 0x6f, 0x17, 0x79, 0xaa, 0xb6, 0x8f, 0xba, 0x23, 0xd0, 0x34, 0xb9, 0x66, + 0x38, 0xc9, 0x14, 0xd6, 0xd9, 0x38, 0xc7, 0x2e, 0xff, 0x50, 0x80, 0x79, 0x7e, 0x60, 0xea, 0xfa, + 0xce, 0xda, 0x02, 0x50, 0x4d, 0xd3, 0xf2, 0x82, 0xee, 0x1a, 0x0f, 0xe5, 0x31, 0xdc, 0x6a, 0xcd, + 0x07, 0xc9, 0x01, 0x82, 0xa5, 0x01, 0xc0, 0x68, 0xe4, 0x48, 0xb7, 0x9d, 0x86, 0x02, 0xfb, 0x84, + 0x43, 0xbe, 0x03, 0xd2, 0x23, 0x36, 0x50, 0x11, 0x3e, 0x59, 0x49, 0x8b, 0x90, 0xdd, 0x43, 0x7d, + 0xdd, 0x64, 0x17, 0xb3, 0xf4, 0x81, 0x5f, 0x84, 0x64, 0xfc, 0x8b, 0x90, 0xb5, 0x4f, 0xc3, 0x82, + 0x66, 0x0d, 0xa2, 0xe6, 0xae, 0x89, 0x91, 0x63, 0xbe, 0xfb, 0x09, 0xe1, 0x45, 0x18, 0xb5, 0x98, + 0xef, 0x09, 0xc2, 0x97, 0x52, 0xe9, 0x8d, 0xf6, 0xda, 0x57, 0x53, 0x4b, 0x1b, 0x14, 0xda, 0xe6, + 0x33, 0x95, 0x51, 0xcf, 0x40, 0x1a, 0xb6, 0x1e, 0xbe, 0xfc, 0x38, 0x7c, 0xa4, 0xaf, 0x7b, 0xfb, + 0xc3, 0xbd, 0x55, 0xcd, 0x1a, 0x9c, 0xeb, 0x5b, 0x7d, 0x6b, 0xf4, 0xe9, 0x13, 0x3f, 0x91, 0x07, + 0xf2, 0x1f, 0xfb, 0xfc, 0x99, 0xf7, 0xa5, 0x4b, 0xb1, 0xdf, 0x4a, 0xab, 0xdb, 0xb0, 0xc0, 0x94, + 0x15, 0xf2, 0xfd, 0x85, 0x9e, 0x22, 0xa4, 0x7b, 0xde, 0x61, 0x95, 0xbf, 0xf1, 0x16, 0x29, 0xd7, + 0xf2, 0x3c, 0x83, 0xe2, 0x31, 0x7a, 0xd0, 0xa8, 0xca, 0x70, 0x5f, 0x88, 0x8f, 0x6e, 0x4d, 0xe4, + 0xc4, 0x30, 0x7e, 0x9f, 0x31, 0x2e, 0x04, 0x18, 0x3b, 0x0c, 0x5a, 0xad, 0xc3, 0xec, 0x71, 0xb8, + 0xfe, 0x89, 0x71, 0x15, 0x51, 0x90, 0x64, 0x03, 0xe6, 0x08, 0x89, 0x36, 0x74, 0x3d, 0x6b, 0x40, + 0xf2, 0xde, 0xbd, 0x69, 0xfe, 0xf9, 0x2d, 0xba, 0x57, 0x4a, 0x18, 0x56, 0xf7, 0x51, 0xd5, 0x2a, + 0x90, 0x4f, 0x4e, 0x5d, 0xa4, 0x19, 0x31, 0x0c, 0x6f, 0x30, 0x43, 0x7c, 0xfd, 0xea, 0xa7, 0x60, + 0x11, 0xff, 0x4f, 0xd2, 0x52, 0xd0, 0x92, 0xf8, 0x0b, 0xaf, 0xf2, 0x0f, 0x5f, 0xa6, 0xdb, 0x71, + 0xc1, 0x27, 0x08, 0xd8, 0x14, 0x58, 0xc5, 0x3e, 0xf2, 0x3c, 0xe4, 0xb8, 0x8a, 0x6a, 0x4c, 0x32, + 0x2f, 0x70, 0x63, 0x50, 0xfe, 0xfc, 0x3b, 0xe1, 0x55, 0xdc, 0xa0, 0xc8, 0x9a, 0x61, 0x54, 0x77, + 0xe1, 0xe4, 0x84, 0xa8, 0x48, 0xc0, 0xf9, 0x0a, 0xe3, 0x5c, 0x1c, 0x8b, 0x0c, 0x4c, 0xdb, 0x06, + 0x2e, 0xf7, 0xd7, 0x32, 0x01, 0xe7, 0x1f, 0x33, 0x4e, 0x89, 0x61, 0xf9, 0x92, 0x62, 0xc6, 0x67, + 0x61, 0xfe, 0x3a, 0x72, 0xf6, 0x2c, 0x97, 0xdd, 0xd2, 0x24, 0xa0, 0x7b, 0x95, 0xd1, 0xcd, 0x31, + 0x20, 0xb9, 0xb6, 0xc1, 0x5c, 0x97, 0x20, 0xd7, 0x53, 0x35, 0x94, 0x80, 0xe2, 0x0b, 0x8c, 0x62, + 0x06, 0xeb, 0x63, 0x68, 0x0d, 0x8a, 0x7d, 0x8b, 0x55, 0xa6, 0x78, 0xf8, 0x6b, 0x0c, 0x5e, 0xe0, + 0x18, 0x46, 0x61, 0x5b, 0xf6, 0xd0, 0xc0, 0x65, 0x2b, 0x9e, 0xe2, 0x4f, 0x38, 0x05, 0xc7, 0x30, + 0x8a, 0x63, 0xb8, 0xf5, 0x4f, 0x39, 0x85, 0x1b, 0xf0, 0xe7, 0x33, 0x50, 0xb0, 0x4c, 0xe3, 0xc0, + 0x32, 0x93, 0x18, 0xf1, 0x45, 0xc6, 0x00, 0x0c, 0x82, 0x09, 0x2e, 0x43, 0x3e, 0xe9, 0x42, 0xfc, + 0xf9, 0x3b, 0x7c, 0x7b, 0xf0, 0x15, 0xd8, 0x80, 0x39, 0x9e, 0xa0, 0x74, 0xcb, 0x4c, 0x40, 0xf1, + 0x65, 0x46, 0x51, 0x0a, 0xc0, 0xd8, 0x34, 0x3c, 0xe4, 0x7a, 0x7d, 0x94, 0x84, 0xe4, 0x75, 0x3e, + 0x0d, 0x06, 0x61, 0xae, 0xdc, 0x43, 0xa6, 0xb6, 0x9f, 0x8c, 0xe1, 0x2b, 0xdc, 0x95, 0x1c, 0x83, + 0x29, 0xea, 0x30, 0x3b, 0x50, 0x1d, 0x77, 0x5f, 0x35, 0x12, 0x2d, 0xc7, 0x5f, 0x30, 0x8e, 0xa2, + 0x0f, 0x62, 0x1e, 0x19, 0x9a, 0xc7, 0xa1, 0xf9, 0x2a, 0xf7, 0x48, 0x00, 0xc6, 0xb6, 0x9e, 0xeb, + 0x91, 0x2b, 0xad, 0xe3, 0xb0, 0xfd, 0x25, 0xdf, 0x7a, 0x14, 0xbb, 0x15, 0x64, 0xbc, 0x0c, 0x79, + 0x57, 0xbf, 0x99, 0x88, 0xe6, 0xaf, 0xf8, 0x4a, 0x13, 0x00, 0x06, 0xbf, 0x00, 0xa7, 0x26, 0x96, + 0x89, 0x04, 0x64, 0x5f, 0x63, 0x64, 0x27, 0x26, 0x94, 0x0a, 0x96, 0x12, 0x8e, 0x4b, 0xf9, 0xd7, + 0x3c, 0x25, 0xa0, 0x08, 0x57, 0x1b, 0x9f, 0x15, 0x5c, 0xb5, 0x77, 0x3c, 0xaf, 0xfd, 0x0d, 0xf7, + 0x1a, 0xc5, 0x86, 0xbc, 0xb6, 0x03, 0x27, 0x18, 0xe3, 0xf1, 0xd6, 0xf5, 0xeb, 0x3c, 0xb1, 0x52, + 0xf4, 0x6e, 0x78, 0x75, 0x3f, 0x0d, 0x4b, 0xbe, 0x3b, 0x79, 0x53, 0xea, 0x2a, 0x03, 0xd5, 0x4e, + 0xc0, 0xfc, 0x0d, 0xc6, 0xcc, 0x33, 0xbe, 0xdf, 0xd5, 0xba, 0x5b, 0xaa, 0x8d, 0xc9, 0x9f, 0x87, + 0x32, 0x27, 0x1f, 0x9a, 0x0e, 0xd2, 0xac, 0xbe, 0xa9, 0xdf, 0x44, 0xdd, 0x04, 0xd4, 0x7f, 0x1b, + 0x59, 0xaa, 0xdd, 0x00, 0x1c, 0x33, 0x37, 0x41, 0xf4, 0x7b, 0x15, 0x45, 0x1f, 0xd8, 0x96, 0xe3, + 0xc5, 0x30, 0x7e, 0x93, 0xaf, 0x94, 0x8f, 0x6b, 0x12, 0x58, 0xb5, 0x01, 0x25, 0xf2, 0x98, 0x34, + 0x24, 0xff, 0x8e, 0x11, 0xcd, 0x8e, 0x50, 0x2c, 0x71, 0x68, 0xd6, 0xc0, 0x56, 0x9d, 0x24, 0xf9, + 0xef, 0xef, 0x79, 0xe2, 0x60, 0x10, 0x96, 0x38, 0xbc, 0x03, 0x1b, 0xe1, 0x6a, 0x9f, 0x80, 0xe1, + 0x5b, 0x3c, 0x71, 0x70, 0x0c, 0xa3, 0xe0, 0x0d, 0x43, 0x02, 0x8a, 0x7f, 0xe0, 0x14, 0x1c, 0x83, + 0x29, 0x3e, 0x39, 0x2a, 0xb4, 0x0e, 0xea, 0xeb, 0xae, 0xe7, 0xd0, 0x56, 0xf8, 0xde, 0x54, 0xdf, + 0x7e, 0x27, 0xdc, 0x84, 0xc9, 0x01, 0x28, 0xce, 0x44, 0xec, 0x0a, 0x95, 0x9c, 0x94, 0xe2, 0x0d, + 0xfb, 0x0e, 0xcf, 0x44, 0x01, 0x18, 0xb6, 0x2d, 0xd0, 0x21, 0x62, 0xb7, 0x6b, 0xf8, 0x7c, 0x90, + 0x80, 0xee, 0xbb, 0x11, 0xe3, 0x3a, 0x1c, 0x8b, 0x39, 0x03, 0xfd, 0xcf, 0xd0, 0xbc, 0x86, 0x0e, + 0x12, 0x45, 0xe7, 0x3f, 0x46, 0xfa, 0x9f, 0x5d, 0x8a, 0xa4, 0x39, 0x64, 0x2e, 0xd2, 0x4f, 0x49, + 0x71, 0x3f, 0xd6, 0x29, 0xff, 0xca, 0x1d, 0x36, 0xdf, 0x70, 0x3b, 0x55, 0xdd, 0xc4, 0x41, 0x1e, + 0x6e, 0x7a, 0xe2, 0xc9, 0x5e, 0xbe, 0xe3, 0xc7, 0x79, 0xa8, 0xe7, 0xa9, 0x5e, 0x81, 0xd9, 0x50, + 0xc3, 0x13, 0x4f, 0xf5, 0xab, 0x8c, 0xaa, 0x18, 0xec, 0x77, 0xaa, 0x17, 0x20, 0x83, 0x9b, 0x97, + 0x78, 0xf8, 0xaf, 0x31, 0x38, 0x51, 0xaf, 0x7e, 0x0c, 0x72, 0xbc, 0x69, 0x89, 0x87, 0xfe, 0x3a, + 0x83, 0xfa, 0x10, 0x0c, 0xe7, 0x0d, 0x4b, 0x3c, 0xfc, 0x37, 0x38, 0x9c, 0x43, 0x30, 0x3c, 0xb9, + 0x0b, 0xbf, 0xf7, 0x9b, 0x19, 0x56, 0x74, 0xb8, 0xef, 0x2e, 0xc3, 0x0c, 0xeb, 0x54, 0xe2, 0xd1, + 0x9f, 0x65, 0x2f, 0xe7, 0x88, 0xea, 0x53, 0x90, 0x4d, 0xe8, 0xf0, 0xdf, 0x62, 0x50, 0xaa, 0x5f, + 0xad, 0x43, 0x21, 0xd0, 0x9d, 0xc4, 0xc3, 0x7f, 0x9b, 0xc1, 0x83, 0x28, 0x6c, 0x3a, 0xeb, 0x4e, + 0xe2, 0x09, 0x7e, 0x87, 0x9b, 0xce, 0x10, 0xd8, 0x6d, 0xbc, 0x31, 0x89, 0x47, 0xff, 0x2e, 0xf7, + 0x3a, 0x87, 0x54, 0x9f, 0x81, 0xbc, 0x5f, 0x6c, 0xe2, 0xf1, 0xbf, 0xc7, 0xf0, 0x23, 0x0c, 0xf6, + 0x40, 0xa0, 0xd8, 0xc5, 0x53, 0xfc, 0x3e, 0xf7, 0x40, 0x00, 0x85, 0xb7, 0x51, 0xb4, 0x81, 0x89, + 0x67, 0xfa, 0x03, 0xbe, 0x8d, 0x22, 0xfd, 0x0b, 0x5e, 0x4d, 0x92, 0xf3, 0xe3, 0x29, 0xfe, 0x90, + 0xaf, 0x26, 0xd1, 0xc7, 0x66, 0x44, 0x3b, 0x82, 0x78, 0x8e, 0x3f, 0xe2, 0x66, 0x44, 0x1a, 0x82, + 0x6a, 0x1b, 0xa4, 0xf1, 0x6e, 0x20, 0x9e, 0xef, 0x73, 0x8c, 0x6f, 0x7e, 0xac, 0x19, 0xa8, 0x3e, + 0x07, 0x27, 0x26, 0x77, 0x02, 0xf1, 0xac, 0x9f, 0xbf, 0x13, 0x39, 0xbb, 0x05, 0x1b, 0x81, 0xea, + 0xce, 0xa8, 0xa4, 0x04, 0xbb, 0x80, 0x78, 0xda, 0x57, 0xee, 0x84, 0x13, 0x77, 0xb0, 0x09, 0xa8, + 0xd6, 0x00, 0x46, 0x05, 0x38, 0x9e, 0xeb, 0x55, 0xc6, 0x15, 0x00, 0xe1, 0xad, 0xc1, 0xea, 0x6f, + 0x3c, 0xfe, 0x0b, 0x7c, 0x6b, 0x30, 0x04, 0xde, 0x1a, 0xbc, 0xf4, 0xc6, 0xa3, 0x5f, 0xe3, 0x5b, + 0x83, 0x43, 0x70, 0x64, 0x07, 0xaa, 0x5b, 0x3c, 0xc3, 0x17, 0x79, 0x64, 0x07, 0x50, 0xd5, 0x6d, + 0x98, 0x1f, 0x2b, 0x88, 0xf1, 0x54, 0x5f, 0x62, 0x54, 0x62, 0xb4, 0x1e, 0x06, 0x8b, 0x17, 0x2b, + 0x86, 0xf1, 0x6c, 0x7f, 0x16, 0x29, 0x5e, 0xac, 0x16, 0x56, 0x2f, 0x43, 0xce, 0x1c, 0x1a, 0x06, + 0xde, 0x3c, 0xd2, 0xbd, 0x7f, 0x60, 0x57, 0xfe, 0x8f, 0xbb, 0xcc, 0x3b, 0x1c, 0x50, 0xbd, 0x00, + 0x59, 0x34, 0xd8, 0x43, 0xdd, 0x38, 0xe4, 0x7f, 0xde, 0xe5, 0x09, 0x13, 0x6b, 0x57, 0x9f, 0x01, + 0xa0, 0x57, 0x23, 0xe4, 0xb3, 0x5f, 0x0c, 0xf6, 0xbf, 0xee, 0xb2, 0x9f, 0xbe, 0x8c, 0x20, 0x23, + 0x02, 0xfa, 0x43, 0x9a, 0x7b, 0x13, 0xbc, 0x13, 0x26, 0x20, 0x2b, 0x72, 0x09, 0x66, 0xae, 0xba, + 0x96, 0xe9, 0xa9, 0xfd, 0x38, 0xf4, 0x7f, 0x33, 0x34, 0xd7, 0xc7, 0x0e, 0x1b, 0x58, 0x0e, 0xf2, + 0xd4, 0xbe, 0x1b, 0x87, 0xfd, 0x1f, 0x86, 0xf5, 0x01, 0x18, 0xac, 0xa9, 0xae, 0x97, 0x64, 0xde, + 0x3f, 0xe6, 0x60, 0x0e, 0xc0, 0x46, 0xe3, 0xff, 0xaf, 0xa1, 0x83, 0x38, 0xec, 0xbb, 0xdc, 0x68, + 0xa6, 0x5f, 0xfd, 0x18, 0xe4, 0xf1, 0xbf, 0xf4, 0xf7, 0x6c, 0x31, 0xe0, 0xff, 0x65, 0xe0, 0x11, + 0x02, 0xbf, 0xd9, 0xf5, 0xba, 0x9e, 0x1e, 0xef, 0xec, 0xff, 0x63, 0x2b, 0xcd, 0xf5, 0xab, 0x35, + 0x28, 0xb8, 0x5e, 0xb7, 0x3b, 0x64, 0xfd, 0x69, 0x0c, 0xfc, 0xff, 0xef, 0xfa, 0x57, 0x16, 0x3e, + 0x06, 0xaf, 0xf6, 0x8d, 0x6b, 0x9e, 0x6d, 0x91, 0xcf, 0x1c, 0x71, 0x0c, 0x77, 0x18, 0x43, 0x00, + 0xb2, 0xd6, 0x98, 0x7c, 0x7d, 0x0b, 0x1b, 0xd6, 0x86, 0x45, 0x2f, 0x6e, 0x5f, 0x5c, 0x8e, 0xbf, + 0x81, 0x85, 0xaf, 0x09, 0x50, 0xea, 0xe9, 0x06, 0x5a, 0xed, 0x5a, 0x1e, 0xbb, 0x89, 0x2d, 0xe0, + 0xe7, 0xae, 0xe5, 0xe1, 0xa0, 0x5a, 0x3a, 0xde, 0x2d, 0xee, 0xf2, 0x3c, 0x08, 0x5b, 0x52, 0x11, + 0x04, 0x95, 0xfd, 0x16, 0x4a, 0x50, 0xd7, 0x36, 0xdf, 0xb8, 0x5d, 0x99, 0xfa, 0xc1, 0xed, 0xca, + 0xd4, 0xbf, 0xde, 0xae, 0x4c, 0xbd, 0x79, 0xbb, 0x22, 0xbc, 0x7d, 0xbb, 0x22, 0xbc, 0x7b, 0xbb, + 0x22, 0xbc, 0x77, 0xbb, 0x22, 0xdc, 0x3a, 0xac, 0x08, 0x5f, 0x39, 0xac, 0x08, 0x5f, 0x3f, 0xac, + 0x08, 0xdf, 0x3e, 0xac, 0x08, 0xdf, 0x3b, 0xac, 0x08, 0x6f, 0x1c, 0x56, 0xa6, 0x7e, 0x70, 0x58, + 0x99, 0x7a, 0xf3, 0xb0, 0x22, 0xbc, 0x7d, 0x58, 0x99, 0x7a, 0xf7, 0xb0, 0x22, 0xbc, 0x77, 0x58, + 0x99, 0xba, 0xf5, 0xa3, 0xca, 0xd4, 0x4f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xf4, 0xfc, 0x3b, 0xbe, + 0x4b, 0x33, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -525,6 +530,9 @@ return dAtA } func (m *M) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.A != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/filedotname/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/filedotname/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/filedotname/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/filedotname/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -28,4 +28,4 @@ regenerate: go install github.com/gogo/protobuf/protoc-gen-gogo - protoc --gogo_out=. --proto_path=../../../../../:../../protobuf/:. file.dot.proto + protoc --gogo_out=. --proto_path=../../protobuf/:../../../../../:. file.dot.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/fuzztests/fuzz.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/fuzztests/fuzz.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/fuzztests/fuzz.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/fuzztests/fuzz.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1093,6 +1093,9 @@ return offset + 1 } func (m *Nil) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -1102,6 +1105,9 @@ } func (m *NinRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -1174,6 +1180,9 @@ } func (m *NinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -1230,6 +1239,9 @@ } func (m *NinOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -1399,8 +1411,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -1448,8 +1462,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -1505,6 +1521,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -1567,6 +1594,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -1629,6 +1667,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -1691,6 +1740,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -1754,6 +1814,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -1818,6 +1889,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -1872,8 +1954,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -1919,8 +2003,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -1966,8 +2052,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -2013,8 +2101,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -2069,6 +2159,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/group/group.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/group/group.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/group/group.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/group/group.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -171,246 +171,251 @@ func GroupDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3814 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0x1b, 0xd7, - 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0x79, 0x49, 0x53, 0x10, 0x1d, 0x53, 0x12, 0x6d, - 0xc7, 0xb4, 0xdd, 0x50, 0x09, 0x2d, 0xc9, 0x16, 0xd4, 0xc4, 0x05, 0x41, 0x08, 0x81, 0x4b, 0x12, - 0xc8, 0x82, 0x8c, 0x7f, 0x32, 0xed, 0xce, 0x72, 0x71, 0x01, 0xae, 0xb4, 0xd8, 0xdd, 0xec, 0x2e, - 0x24, 0x53, 0xd3, 0x07, 0x75, 0xdc, 0x9f, 0xc9, 0x74, 0xfa, 0xdf, 0x99, 0x26, 0xae, 0xe3, 0x36, - 0x9d, 0x49, 0x9d, 0xa6, 0x7f, 0x49, 0xd3, 0xa6, 0x71, 0x9f, 0xfa, 0x92, 0xd6, 0x4f, 0x9d, 0xe4, - 0xad, 0x0f, 0x7d, 0xb0, 0x54, 0xcf, 0xf4, 0xcf, 0x6d, 0xd2, 0xd6, 0x0f, 0x99, 0xd1, 0x4b, 0xe7, - 0xfe, 0x2d, 0x76, 0x01, 0x50, 0x0b, 0x66, 0xc6, 0xf6, 0x13, 0xb1, 0xe7, 0x9e, 0xef, 0xdb, 0x73, - 0xcf, 0x3d, 0xf7, 0x9c, 0x73, 0xef, 0x12, 0x7e, 0x70, 0x19, 0xce, 0x76, 0x6d, 0xbb, 0x6b, 0xe2, - 0xf3, 0x8e, 0x6b, 0xfb, 0xf6, 0x41, 0xbf, 0x73, 0xbe, 0x8d, 0x3d, 0xdd, 0x35, 0x1c, 0xdf, 0x76, - 0xd7, 0xa9, 0x0c, 0xcd, 0x31, 0x8d, 0x75, 0xa1, 0xb1, 0xba, 0x03, 0xf3, 0x57, 0x0d, 0x13, 0x6f, - 0x05, 0x8a, 0x2d, 0xec, 0xa3, 0x67, 0x20, 0xd5, 0x31, 0x4c, 0x5c, 0x94, 0xce, 0x26, 0xd7, 0x72, - 0x1b, 0x8f, 0xac, 0x0f, 0x81, 0xd6, 0xa3, 0x88, 0x26, 0x11, 0x2b, 0x14, 0xb1, 0xfa, 0x4e, 0x0a, - 0x16, 0xc6, 0x8c, 0x22, 0x04, 0x29, 0x4b, 0xeb, 0x11, 0x46, 0x69, 0x2d, 0xab, 0xd0, 0xdf, 0xa8, - 0x08, 0x33, 0x8e, 0xa6, 0x5f, 0xd7, 0xba, 0xb8, 0x98, 0xa0, 0x62, 0xf1, 0x88, 0x56, 0x00, 0xda, - 0xd8, 0xc1, 0x56, 0x1b, 0x5b, 0xfa, 0x51, 0x31, 0x79, 0x36, 0xb9, 0x96, 0x55, 0x42, 0x12, 0xf4, - 0x24, 0xcc, 0x3b, 0xfd, 0x03, 0xd3, 0xd0, 0xd5, 0x90, 0x1a, 0x9c, 0x4d, 0xae, 0xa5, 0x15, 0x99, - 0x0d, 0x6c, 0x0d, 0x94, 0x1f, 0x83, 0xb9, 0x9b, 0x58, 0xbb, 0x1e, 0x56, 0xcd, 0x51, 0xd5, 0x02, - 0x11, 0x87, 0x14, 0x2b, 0x90, 0xef, 0x61, 0xcf, 0xd3, 0xba, 0x58, 0xf5, 0x8f, 0x1c, 0x5c, 0x4c, - 0xd1, 0xd9, 0x9f, 0x1d, 0x99, 0xfd, 0xf0, 0xcc, 0x73, 0x1c, 0xb5, 0x77, 0xe4, 0x60, 0x54, 0x86, - 0x2c, 0xb6, 0xfa, 0x3d, 0xc6, 0x90, 0x3e, 0xc6, 0x7f, 0x55, 0xab, 0xdf, 0x1b, 0x66, 0xc9, 0x10, - 0x18, 0xa7, 0x98, 0xf1, 0xb0, 0x7b, 0xc3, 0xd0, 0x71, 0x71, 0x9a, 0x12, 0x3c, 0x36, 0x42, 0xd0, - 0x62, 0xe3, 0xc3, 0x1c, 0x02, 0x87, 0x2a, 0x90, 0xc5, 0x2f, 0xfb, 0xd8, 0xf2, 0x0c, 0xdb, 0x2a, - 0xce, 0x50, 0x92, 0x47, 0xc7, 0xac, 0x22, 0x36, 0xdb, 0xc3, 0x14, 0x03, 0x1c, 0xba, 0x04, 0x33, - 0xb6, 0xe3, 0x1b, 0xb6, 0xe5, 0x15, 0x33, 0x67, 0xa5, 0xb5, 0xdc, 0xc6, 0x47, 0xc6, 0x06, 0x42, - 0x83, 0xe9, 0x28, 0x42, 0x19, 0xd5, 0x41, 0xf6, 0xec, 0xbe, 0xab, 0x63, 0x55, 0xb7, 0xdb, 0x58, - 0x35, 0xac, 0x8e, 0x5d, 0xcc, 0x52, 0x82, 0x33, 0xa3, 0x13, 0xa1, 0x8a, 0x15, 0xbb, 0x8d, 0xeb, - 0x56, 0xc7, 0x56, 0x0a, 0x5e, 0xe4, 0x19, 0x2d, 0xc1, 0xb4, 0x77, 0x64, 0xf9, 0xda, 0xcb, 0xc5, - 0x3c, 0x8d, 0x10, 0xfe, 0xb4, 0xfa, 0xe6, 0x34, 0xcc, 0x4d, 0x12, 0x62, 0x57, 0x20, 0xdd, 0x21, - 0xb3, 0x2c, 0x26, 0x4e, 0xe2, 0x03, 0x86, 0x89, 0x3a, 0x71, 0xfa, 0xc7, 0x74, 0x62, 0x19, 0x72, - 0x16, 0xf6, 0x7c, 0xdc, 0x66, 0x11, 0x91, 0x9c, 0x30, 0xa6, 0x80, 0x81, 0x46, 0x43, 0x2a, 0xf5, - 0x63, 0x85, 0xd4, 0x0b, 0x30, 0x17, 0x98, 0xa4, 0xba, 0x9a, 0xd5, 0x15, 0xb1, 0x79, 0x3e, 0xce, - 0x92, 0xf5, 0xaa, 0xc0, 0x29, 0x04, 0xa6, 0x14, 0x70, 0xe4, 0x19, 0x6d, 0x01, 0xd8, 0x16, 0xb6, - 0x3b, 0x6a, 0x1b, 0xeb, 0x66, 0x31, 0x73, 0x8c, 0x97, 0x1a, 0x44, 0x65, 0xc4, 0x4b, 0x36, 0x93, - 0xea, 0x26, 0xba, 0x3c, 0x08, 0xb5, 0x99, 0x63, 0x22, 0x65, 0x87, 0x6d, 0xb2, 0x91, 0x68, 0xdb, - 0x87, 0x82, 0x8b, 0x49, 0xdc, 0xe3, 0x36, 0x9f, 0x59, 0x96, 0x1a, 0xb1, 0x1e, 0x3b, 0x33, 0x85, - 0xc3, 0xd8, 0xc4, 0x66, 0xdd, 0xf0, 0x23, 0x7a, 0x18, 0x02, 0x81, 0x4a, 0xc3, 0x0a, 0x68, 0x16, - 0xca, 0x0b, 0xe1, 0xae, 0xd6, 0xc3, 0xcb, 0xb7, 0xa0, 0x10, 0x75, 0x0f, 0x5a, 0x84, 0xb4, 0xe7, - 0x6b, 0xae, 0x4f, 0xa3, 0x30, 0xad, 0xb0, 0x07, 0x24, 0x43, 0x12, 0x5b, 0x6d, 0x9a, 0xe5, 0xd2, - 0x0a, 0xf9, 0x89, 0x7e, 0x6a, 0x30, 0xe1, 0x24, 0x9d, 0xf0, 0x47, 0x47, 0x57, 0x34, 0xc2, 0x3c, - 0x3c, 0xef, 0xe5, 0xa7, 0x61, 0x36, 0x32, 0x81, 0x49, 0x5f, 0xbd, 0xfa, 0x73, 0xf0, 0xc0, 0x58, - 0x6a, 0xf4, 0x02, 0x2c, 0xf6, 0x2d, 0xc3, 0xf2, 0xb1, 0xeb, 0xb8, 0x98, 0x44, 0x2c, 0x7b, 0x55, - 0xf1, 0x5f, 0x67, 0x8e, 0x89, 0xb9, 0xfd, 0xb0, 0x36, 0x63, 0x51, 0x16, 0xfa, 0xa3, 0xc2, 0x27, - 0xb2, 0x99, 0x7f, 0x9b, 0x91, 0x6f, 0xdf, 0xbe, 0x7d, 0x3b, 0xb1, 0xfa, 0xc5, 0x69, 0x58, 0x1c, - 0xb7, 0x67, 0xc6, 0x6e, 0xdf, 0x25, 0x98, 0xb6, 0xfa, 0xbd, 0x03, 0xec, 0x52, 0x27, 0xa5, 0x15, - 0xfe, 0x84, 0xca, 0x90, 0x36, 0xb5, 0x03, 0x6c, 0x16, 0x53, 0x67, 0xa5, 0xb5, 0xc2, 0xc6, 0x93, - 0x13, 0xed, 0xca, 0xf5, 0x6d, 0x02, 0x51, 0x18, 0x12, 0x7d, 0x0a, 0x52, 0x3c, 0x45, 0x13, 0x86, - 0x27, 0x26, 0x63, 0x20, 0x7b, 0x49, 0xa1, 0x38, 0xf4, 0x20, 0x64, 0xc9, 0x5f, 0x16, 0x1b, 0xd3, - 0xd4, 0xe6, 0x0c, 0x11, 0x90, 0xb8, 0x40, 0xcb, 0x90, 0xa1, 0xdb, 0xa4, 0x8d, 0x45, 0x69, 0x0b, - 0x9e, 0x49, 0x60, 0xb5, 0x71, 0x47, 0xeb, 0x9b, 0xbe, 0x7a, 0x43, 0x33, 0xfb, 0x98, 0x06, 0x7c, - 0x56, 0xc9, 0x73, 0xe1, 0x67, 0x89, 0x0c, 0x9d, 0x81, 0x1c, 0xdb, 0x55, 0x86, 0xd5, 0xc6, 0x2f, - 0xd3, 0xec, 0x99, 0x56, 0xd8, 0x46, 0xab, 0x13, 0x09, 0x79, 0xfd, 0x35, 0xcf, 0xb6, 0x44, 0x68, - 0xd2, 0x57, 0x10, 0x01, 0x7d, 0xfd, 0xd3, 0xc3, 0x89, 0xfb, 0xa1, 0xf1, 0xd3, 0x1b, 0x8e, 0xa9, - 0xd5, 0x6f, 0x27, 0x20, 0x45, 0xf3, 0xc5, 0x1c, 0xe4, 0xf6, 0x5e, 0x6c, 0x56, 0xd5, 0xad, 0xc6, - 0xfe, 0xe6, 0x76, 0x55, 0x96, 0x50, 0x01, 0x80, 0x0a, 0xae, 0x6e, 0x37, 0xca, 0x7b, 0x72, 0x22, - 0x78, 0xae, 0xef, 0xee, 0x5d, 0xba, 0x20, 0x27, 0x03, 0xc0, 0x3e, 0x13, 0xa4, 0xc2, 0x0a, 0x4f, - 0x6d, 0xc8, 0x69, 0x24, 0x43, 0x9e, 0x11, 0xd4, 0x5f, 0xa8, 0x6e, 0x5d, 0xba, 0x20, 0x4f, 0x47, - 0x25, 0x4f, 0x6d, 0xc8, 0x33, 0x68, 0x16, 0xb2, 0x54, 0xb2, 0xd9, 0x68, 0x6c, 0xcb, 0x99, 0x80, - 0xb3, 0xb5, 0xa7, 0xd4, 0x77, 0x6b, 0x72, 0x36, 0xe0, 0xac, 0x29, 0x8d, 0xfd, 0xa6, 0x0c, 0x01, - 0xc3, 0x4e, 0xb5, 0xd5, 0x2a, 0xd7, 0xaa, 0x72, 0x2e, 0xd0, 0xd8, 0x7c, 0x71, 0xaf, 0xda, 0x92, - 0xf3, 0x11, 0xb3, 0x9e, 0xda, 0x90, 0x67, 0x83, 0x57, 0x54, 0x77, 0xf7, 0x77, 0xe4, 0x02, 0x9a, - 0x87, 0x59, 0xf6, 0x0a, 0x61, 0xc4, 0xdc, 0x90, 0xe8, 0xd2, 0x05, 0x59, 0x1e, 0x18, 0xc2, 0x58, - 0xe6, 0x23, 0x82, 0x4b, 0x17, 0x64, 0xb4, 0x5a, 0x81, 0x34, 0x8d, 0x2e, 0x84, 0xa0, 0xb0, 0x5d, - 0xde, 0xac, 0x6e, 0xab, 0x8d, 0xe6, 0x5e, 0xbd, 0xb1, 0x5b, 0xde, 0x96, 0xa5, 0x81, 0x4c, 0xa9, - 0x7e, 0x66, 0xbf, 0xae, 0x54, 0xb7, 0xe4, 0x44, 0x58, 0xd6, 0xac, 0x96, 0xf7, 0xaa, 0x5b, 0x72, - 0x72, 0x55, 0x87, 0xc5, 0x71, 0x79, 0x72, 0xec, 0xce, 0x08, 0x2d, 0x71, 0xe2, 0x98, 0x25, 0xa6, - 0x5c, 0x23, 0x4b, 0xfc, 0x2f, 0x09, 0x58, 0x18, 0x53, 0x2b, 0xc6, 0xbe, 0xe4, 0x59, 0x48, 0xb3, - 0x10, 0x65, 0xd5, 0xf3, 0xf1, 0xb1, 0x45, 0x87, 0x06, 0xec, 0x48, 0x05, 0xa5, 0xb8, 0x70, 0x07, - 0x91, 0x3c, 0xa6, 0x83, 0x20, 0x14, 0x23, 0x39, 0xfd, 0x67, 0x46, 0x72, 0x3a, 0x2b, 0x7b, 0x97, - 0x26, 0x29, 0x7b, 0x54, 0x76, 0xb2, 0xdc, 0x9e, 0x1e, 0x93, 0xdb, 0xaf, 0xc0, 0xfc, 0x08, 0xd1, - 0xc4, 0x39, 0xf6, 0x15, 0x09, 0x8a, 0xc7, 0x39, 0x27, 0x26, 0xd3, 0x25, 0x22, 0x99, 0xee, 0xca, - 0xb0, 0x07, 0xcf, 0x1d, 0xbf, 0x08, 0x23, 0x6b, 0xfd, 0x86, 0x04, 0x4b, 0xe3, 0x3b, 0xc5, 0xb1, - 0x36, 0x7c, 0x0a, 0xa6, 0x7b, 0xd8, 0x3f, 0xb4, 0x45, 0xb7, 0xf4, 0xd1, 0x31, 0x35, 0x98, 0x0c, - 0x0f, 0x2f, 0x36, 0x47, 0x85, 0x8b, 0x78, 0xf2, 0xb8, 0x76, 0x8f, 0x59, 0x33, 0x62, 0xe9, 0x17, - 0x12, 0xf0, 0xc0, 0x58, 0xf2, 0xb1, 0x86, 0x3e, 0x04, 0x60, 0x58, 0x4e, 0xdf, 0x67, 0x1d, 0x11, - 0x4b, 0xb0, 0x59, 0x2a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0xbe, 0x1f, 0x8c, 0x27, 0xe9, 0x38, 0x30, - 0x11, 0x55, 0x78, 0x66, 0x60, 0x68, 0x8a, 0x1a, 0xba, 0x72, 0xcc, 0x4c, 0x47, 0x02, 0xf3, 0xe3, - 0x20, 0xeb, 0xa6, 0x81, 0x2d, 0x5f, 0xf5, 0x7c, 0x17, 0x6b, 0x3d, 0xc3, 0xea, 0xd2, 0x0a, 0x92, - 0x29, 0xa5, 0x3b, 0x9a, 0xe9, 0x61, 0x65, 0x8e, 0x0d, 0xb7, 0xc4, 0x28, 0x41, 0xd0, 0x00, 0x72, - 0x43, 0x88, 0xe9, 0x08, 0x82, 0x0d, 0x07, 0x88, 0xd5, 0x6f, 0x65, 0x20, 0x17, 0xea, 0xab, 0xd1, - 0x39, 0xc8, 0x5f, 0xd3, 0x6e, 0x68, 0xaa, 0x38, 0x2b, 0x31, 0x4f, 0xe4, 0x88, 0xac, 0xc9, 0xcf, - 0x4b, 0x1f, 0x87, 0x45, 0xaa, 0x62, 0xf7, 0x7d, 0xec, 0xaa, 0xba, 0xa9, 0x79, 0x1e, 0x75, 0x5a, - 0x86, 0xaa, 0x22, 0x32, 0xd6, 0x20, 0x43, 0x15, 0x31, 0x82, 0x2e, 0xc2, 0x02, 0x45, 0xf4, 0xfa, - 0xa6, 0x6f, 0x38, 0x26, 0x56, 0xc9, 0xe9, 0xcd, 0xa3, 0x95, 0x24, 0xb0, 0x6c, 0x9e, 0x68, 0xec, - 0x70, 0x05, 0x62, 0x91, 0x87, 0xb6, 0xe0, 0x21, 0x0a, 0xeb, 0x62, 0x0b, 0xbb, 0x9a, 0x8f, 0x55, - 0xfc, 0xf9, 0xbe, 0x66, 0x7a, 0xaa, 0x66, 0xb5, 0xd5, 0x43, 0xcd, 0x3b, 0x2c, 0x2e, 0x12, 0x82, - 0xcd, 0x44, 0x51, 0x52, 0x4e, 0x13, 0xc5, 0x1a, 0xd7, 0xab, 0x52, 0xb5, 0xb2, 0xd5, 0xfe, 0xb4, - 0xe6, 0x1d, 0xa2, 0x12, 0x2c, 0x51, 0x16, 0xcf, 0x77, 0x0d, 0xab, 0xab, 0xea, 0x87, 0x58, 0xbf, - 0xae, 0xf6, 0xfd, 0xce, 0x33, 0xc5, 0x07, 0xc3, 0xef, 0xa7, 0x16, 0xb6, 0xa8, 0x4e, 0x85, 0xa8, - 0xec, 0xfb, 0x9d, 0x67, 0x50, 0x0b, 0xf2, 0x64, 0x31, 0x7a, 0xc6, 0x2d, 0xac, 0x76, 0x6c, 0x97, - 0x96, 0xc6, 0xc2, 0x98, 0xd4, 0x14, 0xf2, 0xe0, 0x7a, 0x83, 0x03, 0x76, 0xec, 0x36, 0x2e, 0xa5, - 0x5b, 0xcd, 0x6a, 0x75, 0x4b, 0xc9, 0x09, 0x96, 0xab, 0xb6, 0x4b, 0x02, 0xaa, 0x6b, 0x07, 0x0e, - 0xce, 0xb1, 0x80, 0xea, 0xda, 0xc2, 0xbd, 0x17, 0x61, 0x41, 0xd7, 0xd9, 0x9c, 0x0d, 0x5d, 0xe5, - 0x67, 0x2c, 0xaf, 0x28, 0x47, 0x9c, 0xa5, 0xeb, 0x35, 0xa6, 0xc0, 0x63, 0xdc, 0x43, 0x97, 0xe1, - 0x81, 0x81, 0xb3, 0xc2, 0xc0, 0xf9, 0x91, 0x59, 0x0e, 0x43, 0x2f, 0xc2, 0x82, 0x73, 0x34, 0x0a, - 0x44, 0x91, 0x37, 0x3a, 0x47, 0xc3, 0xb0, 0xa7, 0x61, 0xd1, 0x39, 0x74, 0x46, 0x71, 0x4f, 0x84, - 0x71, 0xc8, 0x39, 0x74, 0x86, 0x81, 0x8f, 0xd2, 0x03, 0xb7, 0x8b, 0x75, 0xcd, 0xc7, 0xed, 0xe2, - 0xa9, 0xb0, 0x7a, 0x68, 0x00, 0x9d, 0x07, 0x59, 0xd7, 0x55, 0x6c, 0x69, 0x07, 0x26, 0x56, 0x35, - 0x17, 0x5b, 0x9a, 0x57, 0x3c, 0x13, 0x56, 0x2e, 0xe8, 0x7a, 0x95, 0x8e, 0x96, 0xe9, 0x20, 0x7a, - 0x02, 0xe6, 0xed, 0x83, 0x6b, 0x3a, 0x0b, 0x49, 0xd5, 0x71, 0x71, 0xc7, 0x78, 0xb9, 0xf8, 0x08, - 0xf5, 0xef, 0x1c, 0x19, 0xa0, 0x01, 0xd9, 0xa4, 0x62, 0xf4, 0x38, 0xc8, 0xba, 0x77, 0xa8, 0xb9, - 0x0e, 0xcd, 0xc9, 0x9e, 0xa3, 0xe9, 0xb8, 0xf8, 0x28, 0x53, 0x65, 0xf2, 0x5d, 0x21, 0x26, 0x5b, - 0xc2, 0xbb, 0x69, 0x74, 0x7c, 0xc1, 0xf8, 0x18, 0xdb, 0x12, 0x54, 0xc6, 0xd9, 0xd6, 0x40, 0x26, - 0xae, 0x88, 0xbc, 0x78, 0x8d, 0xaa, 0x15, 0x9c, 0x43, 0x27, 0xfc, 0xde, 0x87, 0x61, 0x96, 0x68, - 0x0e, 0x5e, 0xfa, 0x38, 0x6b, 0xc8, 0x9c, 0xc3, 0xd0, 0x1b, 0xdf, 0xb7, 0xde, 0x78, 0xb5, 0x04, - 0xf9, 0x70, 0x7c, 0xa2, 0x2c, 0xb0, 0x08, 0x95, 0x25, 0xd2, 0xac, 0x54, 0x1a, 0x5b, 0xa4, 0xcd, - 0x78, 0xa9, 0x2a, 0x27, 0x48, 0xbb, 0xb3, 0x5d, 0xdf, 0xab, 0xaa, 0xca, 0xfe, 0xee, 0x5e, 0x7d, - 0xa7, 0x2a, 0x27, 0xc3, 0x7d, 0xf5, 0x77, 0x13, 0x50, 0x88, 0x1e, 0x91, 0xd0, 0x4f, 0xc2, 0x29, - 0x71, 0x9f, 0xe1, 0x61, 0x5f, 0xbd, 0x69, 0xb8, 0x74, 0xcb, 0xf4, 0x34, 0x56, 0xbe, 0x82, 0x45, - 0x5b, 0xe4, 0x5a, 0x2d, 0xec, 0x3f, 0x6f, 0xb8, 0x64, 0x43, 0xf4, 0x34, 0x1f, 0x6d, 0xc3, 0x19, - 0xcb, 0x56, 0x3d, 0x5f, 0xb3, 0xda, 0x9a, 0xdb, 0x56, 0x07, 0x37, 0x49, 0xaa, 0xa6, 0xeb, 0xd8, - 0xf3, 0x6c, 0x56, 0xaa, 0x02, 0x96, 0x8f, 0x58, 0x76, 0x8b, 0x2b, 0x0f, 0x72, 0x78, 0x99, 0xab, - 0x0e, 0x05, 0x58, 0xf2, 0xb8, 0x00, 0x7b, 0x10, 0xb2, 0x3d, 0xcd, 0x51, 0xb1, 0xe5, 0xbb, 0x47, - 0xb4, 0x31, 0xce, 0x28, 0x99, 0x9e, 0xe6, 0x54, 0xc9, 0xf3, 0x07, 0x73, 0x3e, 0xf9, 0xe7, 0x24, - 0xe4, 0xc3, 0xcd, 0x31, 0x39, 0x6b, 0xe8, 0xb4, 0x8e, 0x48, 0x34, 0xd3, 0x3c, 0x7c, 0xdf, 0x56, - 0x7a, 0xbd, 0x42, 0x0a, 0x4c, 0x69, 0x9a, 0xb5, 0xac, 0x0a, 0x43, 0x92, 0xe2, 0x4e, 0x72, 0x0b, - 0x66, 0x2d, 0x42, 0x46, 0xe1, 0x4f, 0xa8, 0x06, 0xd3, 0xd7, 0x3c, 0xca, 0x3d, 0x4d, 0xb9, 0x1f, - 0xb9, 0x3f, 0xf7, 0x73, 0x2d, 0x4a, 0x9e, 0x7d, 0xae, 0xa5, 0xee, 0x36, 0x94, 0x9d, 0xf2, 0xb6, - 0xc2, 0xe1, 0xe8, 0x34, 0xa4, 0x4c, 0xed, 0xd6, 0x51, 0xb4, 0x14, 0x51, 0xd1, 0xa4, 0x8e, 0x3f, - 0x0d, 0xa9, 0x9b, 0x58, 0xbb, 0x1e, 0x2d, 0x00, 0x54, 0xf4, 0x3e, 0x86, 0xfe, 0x79, 0x48, 0x53, - 0x7f, 0x21, 0x00, 0xee, 0x31, 0x79, 0x0a, 0x65, 0x20, 0x55, 0x69, 0x28, 0x24, 0xfc, 0x65, 0xc8, - 0x33, 0xa9, 0xda, 0xac, 0x57, 0x2b, 0x55, 0x39, 0xb1, 0x7a, 0x11, 0xa6, 0x99, 0x13, 0xc8, 0xd6, - 0x08, 0xdc, 0x20, 0x4f, 0xf1, 0x47, 0xce, 0x21, 0x89, 0xd1, 0xfd, 0x9d, 0xcd, 0xaa, 0x22, 0x27, - 0xc2, 0xcb, 0xeb, 0x41, 0x3e, 0xdc, 0x17, 0x7f, 0x30, 0x31, 0xf5, 0xb7, 0x12, 0xe4, 0x42, 0x7d, - 0x2e, 0x69, 0x50, 0x34, 0xd3, 0xb4, 0x6f, 0xaa, 0x9a, 0x69, 0x68, 0x1e, 0x0f, 0x0a, 0xa0, 0xa2, - 0x32, 0x91, 0x4c, 0xba, 0x68, 0x1f, 0x88, 0xf1, 0xaf, 0x4b, 0x20, 0x0f, 0xb7, 0x98, 0x43, 0x06, - 0x4a, 0x1f, 0xaa, 0x81, 0xaf, 0x49, 0x50, 0x88, 0xf6, 0x95, 0x43, 0xe6, 0x9d, 0xfb, 0x50, 0xcd, - 0x7b, 0x3b, 0x01, 0xb3, 0x91, 0x6e, 0x72, 0x52, 0xeb, 0x3e, 0x0f, 0xf3, 0x46, 0x1b, 0xf7, 0x1c, - 0xdb, 0xc7, 0x96, 0x7e, 0xa4, 0x9a, 0xf8, 0x06, 0x36, 0x8b, 0xab, 0x34, 0x51, 0x9c, 0xbf, 0x7f, - 0xbf, 0xba, 0x5e, 0x1f, 0xe0, 0xb6, 0x09, 0xac, 0xb4, 0x50, 0xdf, 0xaa, 0xee, 0x34, 0x1b, 0x7b, - 0xd5, 0xdd, 0xca, 0x8b, 0xea, 0xfe, 0xee, 0x4f, 0xef, 0x36, 0x9e, 0xdf, 0x55, 0x64, 0x63, 0x48, - 0xed, 0x7d, 0xdc, 0xea, 0x4d, 0x90, 0x87, 0x8d, 0x42, 0xa7, 0x60, 0x9c, 0x59, 0xf2, 0x14, 0x5a, - 0x80, 0xb9, 0xdd, 0x86, 0xda, 0xaa, 0x6f, 0x55, 0xd5, 0xea, 0xd5, 0xab, 0xd5, 0xca, 0x5e, 0x8b, - 0xdd, 0x40, 0x04, 0xda, 0x7b, 0xd1, 0x4d, 0xfd, 0x6a, 0x12, 0x16, 0xc6, 0x58, 0x82, 0xca, 0xfc, - 0xec, 0xc0, 0x8e, 0x33, 0x1f, 0x9b, 0xc4, 0xfa, 0x75, 0x52, 0xf2, 0x9b, 0x9a, 0xeb, 0xf3, 0xa3, - 0xc6, 0xe3, 0x40, 0xbc, 0x64, 0xf9, 0x46, 0xc7, 0xc0, 0x2e, 0xbf, 0xb0, 0x61, 0x07, 0x8a, 0xb9, - 0x81, 0x9c, 0xdd, 0xd9, 0xfc, 0x04, 0x20, 0xc7, 0xf6, 0x0c, 0xdf, 0xb8, 0x81, 0x55, 0xc3, 0x12, - 0xb7, 0x3b, 0xe4, 0x80, 0x91, 0x52, 0x64, 0x31, 0x52, 0xb7, 0xfc, 0x40, 0xdb, 0xc2, 0x5d, 0x6d, - 0x48, 0x9b, 0x24, 0xf0, 0xa4, 0x22, 0x8b, 0x91, 0x40, 0xfb, 0x1c, 0xe4, 0xdb, 0x76, 0x9f, 0x74, - 0x5d, 0x4c, 0x8f, 0xd4, 0x0b, 0x49, 0xc9, 0x31, 0x59, 0xa0, 0xc2, 0xfb, 0xe9, 0xc1, 0xb5, 0x52, - 0x5e, 0xc9, 0x31, 0x19, 0x53, 0x79, 0x0c, 0xe6, 0xb4, 0x6e, 0xd7, 0x25, 0xe4, 0x82, 0x88, 0x9d, - 0x10, 0x0a, 0x81, 0x98, 0x2a, 0x2e, 0x3f, 0x07, 0x19, 0xe1, 0x07, 0x52, 0x92, 0x89, 0x27, 0x54, - 0x87, 0x1d, 0x7b, 0x13, 0x6b, 0x59, 0x25, 0x63, 0x89, 0xc1, 0x73, 0x90, 0x37, 0x3c, 0x75, 0x70, - 0x4b, 0x9e, 0x38, 0x9b, 0x58, 0xcb, 0x28, 0x39, 0xc3, 0x0b, 0x6e, 0x18, 0x57, 0xdf, 0x48, 0x40, - 0x21, 0x7a, 0xcb, 0x8f, 0xb6, 0x20, 0x63, 0xda, 0xba, 0x46, 0x43, 0x8b, 0x7d, 0x62, 0x5a, 0x8b, - 0xf9, 0x30, 0xb0, 0xbe, 0xcd, 0xf5, 0x95, 0x00, 0xb9, 0xfc, 0x8f, 0x12, 0x64, 0x84, 0x18, 0x2d, - 0x41, 0xca, 0xd1, 0xfc, 0x43, 0x4a, 0x97, 0xde, 0x4c, 0xc8, 0x92, 0x42, 0x9f, 0x89, 0xdc, 0x73, - 0x34, 0x8b, 0x86, 0x00, 0x97, 0x93, 0x67, 0xb2, 0xae, 0x26, 0xd6, 0xda, 0xf4, 0xf8, 0x61, 0xf7, - 0x7a, 0xd8, 0xf2, 0x3d, 0xb1, 0xae, 0x5c, 0x5e, 0xe1, 0x62, 0xf4, 0x24, 0xcc, 0xfb, 0xae, 0x66, - 0x98, 0x11, 0xdd, 0x14, 0xd5, 0x95, 0xc5, 0x40, 0xa0, 0x5c, 0x82, 0xd3, 0x82, 0xb7, 0x8d, 0x7d, - 0x4d, 0x3f, 0xc4, 0xed, 0x01, 0x68, 0x9a, 0x5e, 0x33, 0x9c, 0xe2, 0x0a, 0x5b, 0x7c, 0x5c, 0x60, - 0x57, 0xbf, 0x2f, 0xc1, 0xbc, 0x38, 0x30, 0xb5, 0x03, 0x67, 0xed, 0x00, 0x68, 0x96, 0x65, 0xfb, - 0x61, 0x77, 0x8d, 0x86, 0xf2, 0x08, 0x6e, 0xbd, 0x1c, 0x80, 0x94, 0x10, 0xc1, 0x72, 0x0f, 0x60, - 0x30, 0x72, 0xac, 0xdb, 0xce, 0x40, 0x8e, 0x7f, 0xc2, 0xa1, 0xdf, 0x01, 0xd9, 0x11, 0x1b, 0x98, - 0x88, 0x9c, 0xac, 0xd0, 0x22, 0xa4, 0x0f, 0x70, 0xd7, 0xb0, 0xf8, 0xc5, 0x2c, 0x7b, 0x10, 0x17, - 0x21, 0xa9, 0xe0, 0x22, 0x64, 0xf3, 0x73, 0xb0, 0xa0, 0xdb, 0xbd, 0x61, 0x73, 0x37, 0xe5, 0xa1, - 0x63, 0xbe, 0xf7, 0x69, 0xe9, 0x25, 0x18, 0xb4, 0x98, 0x3f, 0x92, 0xa4, 0x3f, 0x4c, 0x24, 0x6b, - 0xcd, 0xcd, 0xaf, 0x27, 0x96, 0x6b, 0x0c, 0xda, 0x14, 0x33, 0x55, 0x70, 0xc7, 0xc4, 0x3a, 0xb1, - 0x1e, 0xbe, 0xba, 0x06, 0x1f, 0xeb, 0x1a, 0xfe, 0x61, 0xff, 0x60, 0x5d, 0xb7, 0x7b, 0xe7, 0xbb, - 0x76, 0xd7, 0x1e, 0x7c, 0xfa, 0x24, 0x4f, 0xf4, 0x81, 0xfe, 0xe2, 0x9f, 0x3f, 0xb3, 0x81, 0x74, - 0x39, 0xf6, 0x5b, 0x69, 0x69, 0x17, 0x16, 0xb8, 0xb2, 0x4a, 0xbf, 0xbf, 0xb0, 0x53, 0x04, 0xba, - 0xef, 0x1d, 0x56, 0xf1, 0x9b, 0xef, 0xd0, 0x72, 0xad, 0xcc, 0x73, 0x28, 0x19, 0x63, 0x07, 0x8d, - 0x92, 0x02, 0x0f, 0x44, 0xf8, 0xd8, 0xd6, 0xc4, 0x6e, 0x0c, 0xe3, 0x77, 0x39, 0xe3, 0x42, 0x88, - 0xb1, 0xc5, 0xa1, 0xa5, 0x0a, 0xcc, 0x9e, 0x84, 0xeb, 0xef, 0x39, 0x57, 0x1e, 0x87, 0x49, 0x6a, - 0x30, 0x47, 0x49, 0xf4, 0xbe, 0xe7, 0xdb, 0x3d, 0x9a, 0xf7, 0xee, 0x4f, 0xf3, 0x0f, 0xef, 0xb0, - 0xbd, 0x52, 0x20, 0xb0, 0x4a, 0x80, 0x2a, 0x95, 0x80, 0x7e, 0x72, 0x6a, 0x63, 0xdd, 0x8c, 0x61, - 0x78, 0x8b, 0x1b, 0x12, 0xe8, 0x97, 0x3e, 0x0b, 0x8b, 0xe4, 0x37, 0x4d, 0x4b, 0x61, 0x4b, 0xe2, - 0x2f, 0xbc, 0x8a, 0xdf, 0x7f, 0x85, 0x6d, 0xc7, 0x85, 0x80, 0x20, 0x64, 0x53, 0x68, 0x15, 0xbb, - 0xd8, 0xf7, 0xb1, 0xeb, 0xa9, 0x9a, 0x39, 0xce, 0xbc, 0xd0, 0x8d, 0x41, 0xf1, 0x4b, 0xef, 0x46, - 0x57, 0xb1, 0xc6, 0x90, 0x65, 0xd3, 0x2c, 0xed, 0xc3, 0xa9, 0x31, 0x51, 0x31, 0x01, 0xe7, 0xab, - 0x9c, 0x73, 0x71, 0x24, 0x32, 0x08, 0x6d, 0x13, 0x84, 0x3c, 0x58, 0xcb, 0x09, 0x38, 0x7f, 0x8f, - 0x73, 0x22, 0x8e, 0x15, 0x4b, 0x4a, 0x18, 0x9f, 0x83, 0xf9, 0x1b, 0xd8, 0x3d, 0xb0, 0x3d, 0x7e, - 0x4b, 0x33, 0x01, 0xdd, 0x6b, 0x9c, 0x6e, 0x8e, 0x03, 0xe9, 0xb5, 0x0d, 0xe1, 0xba, 0x0c, 0x99, - 0x8e, 0xa6, 0xe3, 0x09, 0x28, 0xbe, 0xcc, 0x29, 0x66, 0x88, 0x3e, 0x81, 0x96, 0x21, 0xdf, 0xb5, - 0x79, 0x65, 0x8a, 0x87, 0xbf, 0xce, 0xe1, 0x39, 0x81, 0xe1, 0x14, 0x8e, 0xed, 0xf4, 0x4d, 0x52, - 0xb6, 0xe2, 0x29, 0x7e, 0x5f, 0x50, 0x08, 0x0c, 0xa7, 0x38, 0x81, 0x5b, 0xff, 0x40, 0x50, 0x78, - 0x21, 0x7f, 0x3e, 0x0b, 0x39, 0xdb, 0x32, 0x8f, 0x6c, 0x6b, 0x12, 0x23, 0xbe, 0xc2, 0x19, 0x80, - 0x43, 0x08, 0xc1, 0x15, 0xc8, 0x4e, 0xba, 0x10, 0x5f, 0x7d, 0x57, 0x6c, 0x0f, 0xb1, 0x02, 0x35, - 0x98, 0x13, 0x09, 0xca, 0xb0, 0xad, 0x09, 0x28, 0xfe, 0x88, 0x53, 0x14, 0x42, 0x30, 0x3e, 0x0d, - 0x1f, 0x7b, 0x7e, 0x17, 0x4f, 0x42, 0xf2, 0x86, 0x98, 0x06, 0x87, 0x70, 0x57, 0x1e, 0x60, 0x4b, - 0x3f, 0x9c, 0x8c, 0xe1, 0x6b, 0xc2, 0x95, 0x02, 0x43, 0x28, 0x2a, 0x30, 0xdb, 0xd3, 0x5c, 0xef, - 0x50, 0x33, 0x27, 0x5a, 0x8e, 0x3f, 0xe6, 0x1c, 0xf9, 0x00, 0xc4, 0x3d, 0xd2, 0xb7, 0x4e, 0x42, - 0xf3, 0x75, 0xe1, 0x91, 0x10, 0x8c, 0x6f, 0x3d, 0xcf, 0xa7, 0x57, 0x5a, 0x27, 0x61, 0xfb, 0x13, - 0xb1, 0xf5, 0x18, 0x76, 0x27, 0xcc, 0x78, 0x05, 0xb2, 0x9e, 0x71, 0x6b, 0x22, 0x9a, 0x3f, 0x15, - 0x2b, 0x4d, 0x01, 0x04, 0xfc, 0x22, 0x9c, 0x1e, 0x5b, 0x26, 0x26, 0x20, 0xfb, 0x33, 0x4e, 0xb6, - 0x34, 0xa6, 0x54, 0xf0, 0x94, 0x70, 0x52, 0xca, 0x3f, 0x17, 0x29, 0x01, 0x0f, 0x71, 0x35, 0xc9, - 0x59, 0xc1, 0xd3, 0x3a, 0x27, 0xf3, 0xda, 0x5f, 0x08, 0xaf, 0x31, 0x6c, 0xc4, 0x6b, 0x7b, 0xb0, - 0xc4, 0x19, 0x4f, 0xb6, 0xae, 0xdf, 0x10, 0x89, 0x95, 0xa1, 0xf7, 0xa3, 0xab, 0xfb, 0x39, 0x58, - 0x0e, 0xdc, 0x29, 0x9a, 0x52, 0x4f, 0xed, 0x69, 0xce, 0x04, 0xcc, 0xdf, 0xe4, 0xcc, 0x22, 0xe3, - 0x07, 0x5d, 0xad, 0xb7, 0xa3, 0x39, 0x84, 0xfc, 0x05, 0x28, 0x0a, 0xf2, 0xbe, 0xe5, 0x62, 0xdd, - 0xee, 0x5a, 0xc6, 0x2d, 0xdc, 0x9e, 0x80, 0xfa, 0x2f, 0x87, 0x96, 0x6a, 0x3f, 0x04, 0x27, 0xcc, - 0x75, 0x90, 0x83, 0x5e, 0x45, 0x35, 0x7a, 0x8e, 0xed, 0xfa, 0x31, 0x8c, 0xdf, 0x12, 0x2b, 0x15, - 0xe0, 0xea, 0x14, 0x56, 0xaa, 0x42, 0x81, 0x3e, 0x4e, 0x1a, 0x92, 0x7f, 0xc5, 0x89, 0x66, 0x07, - 0x28, 0x9e, 0x38, 0x74, 0xbb, 0xe7, 0x68, 0xee, 0x24, 0xf9, 0xef, 0xaf, 0x45, 0xe2, 0xe0, 0x10, - 0x9e, 0x38, 0xfc, 0x23, 0x07, 0x93, 0x6a, 0x3f, 0x01, 0xc3, 0xb7, 0x45, 0xe2, 0x10, 0x18, 0x4e, - 0x21, 0x1a, 0x86, 0x09, 0x28, 0xfe, 0x46, 0x50, 0x08, 0x0c, 0xa1, 0xf8, 0xcc, 0xa0, 0xd0, 0xba, - 0xb8, 0x6b, 0x78, 0xbe, 0xcb, 0x5a, 0xe1, 0xfb, 0x53, 0x7d, 0xe7, 0xdd, 0x68, 0x13, 0xa6, 0x84, - 0xa0, 0x24, 0x13, 0xf1, 0x2b, 0x54, 0x7a, 0x52, 0x8a, 0x37, 0xec, 0x4d, 0x91, 0x89, 0x42, 0x30, - 0xb6, 0x3f, 0xe7, 0x86, 0x7a, 0x15, 0x14, 0xf7, 0x8f, 0x30, 0xc5, 0x9f, 0x7f, 0x8f, 0x73, 0x45, - 0x5b, 0x95, 0xd2, 0x36, 0x09, 0xa0, 0x68, 0x43, 0x11, 0x4f, 0xf6, 0xca, 0x7b, 0x41, 0x0c, 0x45, - 0xfa, 0x89, 0xd2, 0x55, 0x98, 0x8d, 0x34, 0x13, 0xf1, 0x54, 0xbf, 0xc0, 0xa9, 0xf2, 0xe1, 0x5e, - 0xa2, 0x74, 0x11, 0x52, 0xa4, 0x31, 0x88, 0x87, 0xff, 0x22, 0x87, 0x53, 0xf5, 0xd2, 0x27, 0x21, - 0x23, 0x1a, 0x82, 0x78, 0xe8, 0x2f, 0x71, 0x68, 0x00, 0x21, 0x70, 0xd1, 0x0c, 0xc4, 0xc3, 0x7f, - 0x59, 0xc0, 0x05, 0x84, 0xc0, 0x27, 0x77, 0xe1, 0xdf, 0xfd, 0x4a, 0x8a, 0x27, 0x74, 0xe1, 0xbb, - 0x2b, 0x30, 0xc3, 0xbb, 0x80, 0x78, 0xf4, 0x17, 0xf8, 0xcb, 0x05, 0xa2, 0xf4, 0x34, 0xa4, 0x27, - 0x74, 0xf8, 0xaf, 0x72, 0x28, 0xd3, 0x2f, 0x55, 0x20, 0x17, 0xaa, 0xfc, 0xf1, 0xf0, 0x5f, 0xe3, - 0xf0, 0x30, 0x8a, 0x98, 0xce, 0x2b, 0x7f, 0x3c, 0xc1, 0xaf, 0x0b, 0xd3, 0x39, 0x82, 0xb8, 0x4d, - 0x14, 0xfd, 0x78, 0xf4, 0x6f, 0x08, 0xaf, 0x0b, 0x48, 0xe9, 0x59, 0xc8, 0x06, 0x89, 0x3c, 0x1e, - 0xff, 0x9b, 0x1c, 0x3f, 0xc0, 0x10, 0x0f, 0x84, 0x0a, 0x49, 0x3c, 0xc5, 0x6f, 0x09, 0x0f, 0x84, - 0x50, 0x64, 0x1b, 0x0d, 0x37, 0x07, 0xf1, 0x4c, 0xbf, 0x2d, 0xb6, 0xd1, 0x50, 0x6f, 0x40, 0x56, - 0x93, 0xe6, 0xd3, 0x78, 0x8a, 0xdf, 0x11, 0xab, 0x49, 0xf5, 0x89, 0x19, 0xc3, 0xd5, 0x36, 0x9e, - 0xe3, 0x77, 0x85, 0x19, 0x43, 0xc5, 0xb6, 0xd4, 0x04, 0x34, 0x5a, 0x69, 0xe3, 0xf9, 0xbe, 0xc8, - 0xf9, 0xe6, 0x47, 0x0a, 0x6d, 0xe9, 0x79, 0x58, 0x1a, 0x5f, 0x65, 0xe3, 0x59, 0xbf, 0xf4, 0xde, - 0xd0, 0xb9, 0x28, 0x5c, 0x64, 0x4b, 0x7b, 0x83, 0x74, 0x1d, 0xae, 0xb0, 0xf1, 0xb4, 0xaf, 0xbe, - 0x17, 0xcd, 0xd8, 0xe1, 0x02, 0x5b, 0x2a, 0x03, 0x0c, 0x8a, 0x5b, 0x3c, 0xd7, 0x6b, 0x9c, 0x2b, - 0x04, 0x22, 0x5b, 0x83, 0xd7, 0xb6, 0x78, 0xfc, 0x97, 0xc5, 0xd6, 0xe0, 0x08, 0xb2, 0x35, 0x44, - 0x59, 0x8b, 0x47, 0xbf, 0x2e, 0xb6, 0x86, 0x80, 0x90, 0xc8, 0x0e, 0x55, 0x8e, 0x78, 0x86, 0xaf, - 0x88, 0xc8, 0x0e, 0xa1, 0x4a, 0x57, 0x20, 0x63, 0xf5, 0x4d, 0x93, 0x04, 0x28, 0xba, 0xff, 0x3f, - 0x88, 0x15, 0xff, 0xfd, 0x1e, 0xb7, 0x40, 0x00, 0x4a, 0x17, 0x21, 0x8d, 0x7b, 0x07, 0xb8, 0x1d, - 0x87, 0xfc, 0x8f, 0x7b, 0x22, 0x29, 0x11, 0xed, 0xd2, 0xb3, 0x00, 0xec, 0x68, 0x4f, 0x3f, 0x5b, - 0xc5, 0x60, 0xff, 0xf3, 0x1e, 0xff, 0xd7, 0x8d, 0x01, 0x64, 0x40, 0xc0, 0xfe, 0x11, 0xe4, 0xfe, - 0x04, 0xef, 0x46, 0x09, 0xe8, 0xac, 0x2f, 0xc3, 0xcc, 0x35, 0xcf, 0xb6, 0x7c, 0xad, 0x1b, 0x87, - 0xfe, 0x2f, 0x8e, 0x16, 0xfa, 0xc4, 0x61, 0x3d, 0xdb, 0xc5, 0xbe, 0xd6, 0xf5, 0xe2, 0xb0, 0xff, - 0xcd, 0xb1, 0x01, 0x80, 0x80, 0x75, 0xcd, 0xf3, 0x27, 0x99, 0xf7, 0x0f, 0x04, 0x58, 0x00, 0x88, - 0xd1, 0xe4, 0xf7, 0x75, 0x7c, 0x14, 0x87, 0xfd, 0xa1, 0x30, 0x9a, 0xeb, 0x97, 0x3e, 0x09, 0x59, - 0xf2, 0x93, 0xfd, 0x3f, 0x56, 0x0c, 0xf8, 0x7f, 0x38, 0x78, 0x80, 0x20, 0x6f, 0xf6, 0xfc, 0xb6, - 0x6f, 0xc4, 0x3b, 0xfb, 0x7f, 0xf9, 0x4a, 0x0b, 0xfd, 0x52, 0x19, 0x72, 0x9e, 0xdf, 0x6e, 0xf7, - 0x79, 0x7f, 0x15, 0x03, 0xff, 0xbf, 0x7b, 0xc1, 0x91, 0x3b, 0xc0, 0x6c, 0x56, 0xc7, 0xdf, 0x1e, - 0x42, 0xcd, 0xae, 0xd9, 0xec, 0xde, 0xf0, 0xa5, 0xd5, 0xf8, 0x0b, 0x40, 0x78, 0x33, 0x01, 0xb9, - 0xae, 0x6b, 0xf7, 0x1d, 0x7e, 0x0b, 0x98, 0xa6, 0x0f, 0xcb, 0x27, 0xbb, 0x3b, 0x5c, 0xfd, 0x59, - 0x98, 0xa9, 0x11, 0x9c, 0xf7, 0x09, 0xb4, 0x02, 0x52, 0x97, 0xde, 0x99, 0xc2, 0x86, 0xbc, 0xce, - 0x98, 0xf9, 0xd0, 0x7a, 0x4d, 0x91, 0xba, 0xcb, 0x4f, 0x81, 0x54, 0x43, 0x4b, 0x30, 0x4d, 0x67, - 0xf8, 0x09, 0xfa, 0x7d, 0x2c, 0xa9, 0xf0, 0xa7, 0x40, 0xbe, 0x41, 0xaf, 0x55, 0x25, 0x2e, 0xdf, - 0x18, 0xf0, 0x6f, 0x08, 0x7e, 0x69, 0x84, 0x7f, 0xe3, 0x84, 0xfc, 0xc9, 0x01, 0xff, 0xe6, 0x85, - 0xb7, 0xee, 0xac, 0x4c, 0x7d, 0xef, 0xce, 0xca, 0xd4, 0x3f, 0xdd, 0x59, 0x99, 0x7a, 0xfb, 0xce, - 0x8a, 0xf4, 0xc3, 0x3b, 0x2b, 0xd2, 0x8f, 0xee, 0xac, 0x48, 0xb7, 0xef, 0xae, 0x48, 0x5f, 0xbb, - 0xbb, 0x22, 0x7d, 0xe3, 0xee, 0x8a, 0xf4, 0x9d, 0xbb, 0x2b, 0xd2, 0x5b, 0x77, 0x57, 0xa6, 0xbe, - 0x77, 0x77, 0x65, 0xea, 0xed, 0xbb, 0x2b, 0x53, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xe1, - 0x83, 0x3a, 0x56, 0x32, 0x00, 0x00, + // 3896 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xe3, 0xd6, + 0x75, 0x16, 0xf8, 0x23, 0x91, 0x87, 0x14, 0x05, 0x41, 0xb2, 0x96, 0x2b, 0xc7, 0xda, 0x5d, 0xd9, + 0x8e, 0x65, 0xbb, 0xd1, 0x26, 0xf2, 0xee, 0xda, 0xcb, 0x6d, 0xe2, 0x52, 0x14, 0x57, 0xa1, 0x2b, + 0x89, 0x0c, 0x28, 0xc5, 0x3f, 0x99, 0x16, 0x03, 0x81, 0x97, 0x14, 0x76, 0x41, 0x00, 0x01, 0xc0, + 0x5d, 0x6b, 0xa7, 0x0f, 0xdb, 0x71, 0x7f, 0x26, 0xd3, 0xe9, 0x7f, 0x67, 0x9a, 0xb8, 0x8e, 0xdb, + 0xa4, 0xd3, 0x38, 0x4d, 0xff, 0x92, 0xa6, 0x4d, 0xe3, 0xf4, 0xa5, 0x2f, 0x69, 0xfd, 0xd4, 0x49, + 0xde, 0xfa, 0xd0, 0x07, 0xef, 0xd6, 0x33, 0xfd, 0x73, 0x9b, 0xb4, 0xdd, 0x87, 0xcc, 0xec, 0x4b, + 0xe7, 0xfe, 0x81, 0x00, 0x48, 0x09, 0x50, 0x66, 0x6c, 0x3f, 0x89, 0x38, 0xf7, 0x7c, 0x1f, 0xce, + 0x3d, 0xf7, 0xdc, 0x73, 0xce, 0xbd, 0x10, 0xfc, 0xe0, 0x32, 0x9c, 0xed, 0x59, 0x56, 0xcf, 0x40, + 0xe7, 0x6d, 0xc7, 0xf2, 0xac, 0xfd, 0x41, 0xf7, 0x7c, 0x07, 0xb9, 0x9a, 0xa3, 0xdb, 0x9e, 0xe5, + 0xac, 0x12, 0x99, 0x34, 0x43, 0x35, 0x56, 0xb9, 0xc6, 0xf2, 0x36, 0xcc, 0x5e, 0xd5, 0x0d, 0xb4, + 0xe1, 0x2b, 0xb6, 0x91, 0x27, 0x3d, 0x03, 0x99, 0xae, 0x6e, 0xa0, 0xb2, 0x70, 0x36, 0xbd, 0x52, + 0x58, 0x7b, 0x64, 0x35, 0x02, 0x5a, 0x0d, 0x23, 0x5a, 0x58, 0x2c, 0x13, 0xc4, 0xf2, 0x3b, 0x19, + 0x98, 0x1b, 0x33, 0x2a, 0x49, 0x90, 0x31, 0xd5, 0x3e, 0x66, 0x14, 0x56, 0xf2, 0x32, 0xf9, 0x2d, + 0x95, 0x61, 0xca, 0x56, 0xb5, 0xeb, 0x6a, 0x0f, 0x95, 0x53, 0x44, 0xcc, 0x1f, 0xa5, 0x25, 0x80, + 0x0e, 0xb2, 0x91, 0xd9, 0x41, 0xa6, 0x76, 0x58, 0x4e, 0x9f, 0x4d, 0xaf, 0xe4, 0xe5, 0x80, 0x44, + 0x7a, 0x12, 0x66, 0xed, 0xc1, 0xbe, 0xa1, 0x6b, 0x4a, 0x40, 0x0d, 0xce, 0xa6, 0x57, 0xb2, 0xb2, + 0x48, 0x07, 0x36, 0x86, 0xca, 0x8f, 0xc1, 0xcc, 0x4d, 0xa4, 0x5e, 0x0f, 0xaa, 0x16, 0x88, 0x6a, + 0x09, 0x8b, 0x03, 0x8a, 0x35, 0x28, 0xf6, 0x91, 0xeb, 0xaa, 0x3d, 0xa4, 0x78, 0x87, 0x36, 0x2a, + 0x67, 0xc8, 0xec, 0xcf, 0x8e, 0xcc, 0x3e, 0x3a, 0xf3, 0x02, 0x43, 0xed, 0x1e, 0xda, 0x48, 0xaa, + 0x42, 0x1e, 0x99, 0x83, 0x3e, 0x65, 0xc8, 0x1e, 0xe1, 0xbf, 0xba, 0x39, 0xe8, 0x47, 0x59, 0x72, + 0x18, 0xc6, 0x28, 0xa6, 0x5c, 0xe4, 0xdc, 0xd0, 0x35, 0x54, 0x9e, 0x24, 0x04, 0x8f, 0x8d, 0x10, + 0xb4, 0xe9, 0x78, 0x94, 0x83, 0xe3, 0xa4, 0x1a, 0xe4, 0xd1, 0xcb, 0x1e, 0x32, 0x5d, 0xdd, 0x32, + 0xcb, 0x53, 0x84, 0xe4, 0xd1, 0x31, 0xab, 0x88, 0x8c, 0x4e, 0x94, 0x62, 0x88, 0x93, 0x2e, 0xc1, + 0x94, 0x65, 0x7b, 0xba, 0x65, 0xba, 0xe5, 0xdc, 0x59, 0x61, 0xa5, 0xb0, 0xf6, 0xa1, 0xb1, 0x81, + 0xd0, 0xa4, 0x3a, 0x32, 0x57, 0x96, 0x1a, 0x20, 0xba, 0xd6, 0xc0, 0xd1, 0x90, 0xa2, 0x59, 0x1d, + 0xa4, 0xe8, 0x66, 0xd7, 0x2a, 0xe7, 0x09, 0xc1, 0x99, 0xd1, 0x89, 0x10, 0xc5, 0x9a, 0xd5, 0x41, + 0x0d, 0xb3, 0x6b, 0xc9, 0x25, 0x37, 0xf4, 0x2c, 0x2d, 0xc0, 0xa4, 0x7b, 0x68, 0x7a, 0xea, 0xcb, + 0xe5, 0x22, 0x89, 0x10, 0xf6, 0xb4, 0xfc, 0xe6, 0x24, 0xcc, 0x24, 0x09, 0xb1, 0x2b, 0x90, 0xed, + 0xe2, 0x59, 0x96, 0x53, 0x27, 0xf1, 0x01, 0xc5, 0x84, 0x9d, 0x38, 0xf9, 0x63, 0x3a, 0xb1, 0x0a, + 0x05, 0x13, 0xb9, 0x1e, 0xea, 0xd0, 0x88, 0x48, 0x27, 0x8c, 0x29, 0xa0, 0xa0, 0xd1, 0x90, 0xca, + 0xfc, 0x58, 0x21, 0xf5, 0x02, 0xcc, 0xf8, 0x26, 0x29, 0x8e, 0x6a, 0xf6, 0x78, 0x6c, 0x9e, 0x8f, + 0xb3, 0x64, 0xb5, 0xce, 0x71, 0x32, 0x86, 0xc9, 0x25, 0x14, 0x7a, 0x96, 0x36, 0x00, 0x2c, 0x13, + 0x59, 0x5d, 0xa5, 0x83, 0x34, 0xa3, 0x9c, 0x3b, 0xc2, 0x4b, 0x4d, 0xac, 0x32, 0xe2, 0x25, 0x8b, + 0x4a, 0x35, 0x43, 0xba, 0x3c, 0x0c, 0xb5, 0xa9, 0x23, 0x22, 0x65, 0x9b, 0x6e, 0xb2, 0x91, 0x68, + 0xdb, 0x83, 0x92, 0x83, 0x70, 0xdc, 0xa3, 0x0e, 0x9b, 0x59, 0x9e, 0x18, 0xb1, 0x1a, 0x3b, 0x33, + 0x99, 0xc1, 0xe8, 0xc4, 0xa6, 0x9d, 0xe0, 0xa3, 0xf4, 0x30, 0xf8, 0x02, 0x85, 0x84, 0x15, 0x90, + 0x2c, 0x54, 0xe4, 0xc2, 0x1d, 0xb5, 0x8f, 0x16, 0x6f, 0x41, 0x29, 0xec, 0x1e, 0x69, 0x1e, 0xb2, + 0xae, 0xa7, 0x3a, 0x1e, 0x89, 0xc2, 0xac, 0x4c, 0x1f, 0x24, 0x11, 0xd2, 0xc8, 0xec, 0x90, 0x2c, + 0x97, 0x95, 0xf1, 0x4f, 0xe9, 0xa7, 0x86, 0x13, 0x4e, 0x93, 0x09, 0x7f, 0x78, 0x74, 0x45, 0x43, + 0xcc, 0xd1, 0x79, 0x2f, 0x3e, 0x0d, 0xd3, 0xa1, 0x09, 0x24, 0x7d, 0xf5, 0xf2, 0xcf, 0xc1, 0x03, + 0x63, 0xa9, 0xa5, 0x17, 0x60, 0x7e, 0x60, 0xea, 0xa6, 0x87, 0x1c, 0xdb, 0x41, 0x38, 0x62, 0xe9, + 0xab, 0xca, 0xff, 0x3a, 0x75, 0x44, 0xcc, 0xed, 0x05, 0xb5, 0x29, 0x8b, 0x3c, 0x37, 0x18, 0x15, + 0x3e, 0x91, 0xcf, 0xfd, 0xdb, 0x94, 0x78, 0xfb, 0xf6, 0xed, 0xdb, 0xa9, 0xe5, 0xcf, 0x4f, 0xc2, + 0xfc, 0xb8, 0x3d, 0x33, 0x76, 0xfb, 0x2e, 0xc0, 0xa4, 0x39, 0xe8, 0xef, 0x23, 0x87, 0x38, 0x29, + 0x2b, 0xb3, 0x27, 0xa9, 0x0a, 0x59, 0x43, 0xdd, 0x47, 0x46, 0x39, 0x73, 0x56, 0x58, 0x29, 0xad, + 0x3d, 0x99, 0x68, 0x57, 0xae, 0x6e, 0x61, 0x88, 0x4c, 0x91, 0xd2, 0x27, 0x20, 0xc3, 0x52, 0x34, + 0x66, 0x78, 0x22, 0x19, 0x03, 0xde, 0x4b, 0x32, 0xc1, 0x49, 0x0f, 0x42, 0x1e, 0xff, 0xa5, 0xb1, + 0x31, 0x49, 0x6c, 0xce, 0x61, 0x01, 0x8e, 0x0b, 0x69, 0x11, 0x72, 0x64, 0x9b, 0x74, 0x10, 0x2f, + 0x6d, 0xfe, 0x33, 0x0e, 0xac, 0x0e, 0xea, 0xaa, 0x03, 0xc3, 0x53, 0x6e, 0xa8, 0xc6, 0x00, 0x91, + 0x80, 0xcf, 0xcb, 0x45, 0x26, 0xfc, 0x34, 0x96, 0x49, 0x67, 0xa0, 0x40, 0x77, 0x95, 0x6e, 0x76, + 0xd0, 0xcb, 0x24, 0x7b, 0x66, 0x65, 0xba, 0xd1, 0x1a, 0x58, 0x82, 0x5f, 0x7f, 0xcd, 0xb5, 0x4c, + 0x1e, 0x9a, 0xe4, 0x15, 0x58, 0x40, 0x5e, 0xff, 0x74, 0x34, 0x71, 0x3f, 0x34, 0x7e, 0x7a, 0xd1, + 0x98, 0x5a, 0xfe, 0x56, 0x0a, 0x32, 0x24, 0x5f, 0xcc, 0x40, 0x61, 0xf7, 0xc5, 0x56, 0x5d, 0xd9, + 0x68, 0xee, 0xad, 0x6f, 0xd5, 0x45, 0x41, 0x2a, 0x01, 0x10, 0xc1, 0xd5, 0xad, 0x66, 0x75, 0x57, + 0x4c, 0xf9, 0xcf, 0x8d, 0x9d, 0xdd, 0x4b, 0x17, 0xc4, 0xb4, 0x0f, 0xd8, 0xa3, 0x82, 0x4c, 0x50, + 0xe1, 0xa9, 0x35, 0x31, 0x2b, 0x89, 0x50, 0xa4, 0x04, 0x8d, 0x17, 0xea, 0x1b, 0x97, 0x2e, 0x88, + 0x93, 0x61, 0xc9, 0x53, 0x6b, 0xe2, 0x94, 0x34, 0x0d, 0x79, 0x22, 0x59, 0x6f, 0x36, 0xb7, 0xc4, + 0x9c, 0xcf, 0xd9, 0xde, 0x95, 0x1b, 0x3b, 0x9b, 0x62, 0xde, 0xe7, 0xdc, 0x94, 0x9b, 0x7b, 0x2d, + 0x11, 0x7c, 0x86, 0xed, 0x7a, 0xbb, 0x5d, 0xdd, 0xac, 0x8b, 0x05, 0x5f, 0x63, 0xfd, 0xc5, 0xdd, + 0x7a, 0x5b, 0x2c, 0x86, 0xcc, 0x7a, 0x6a, 0x4d, 0x9c, 0xf6, 0x5f, 0x51, 0xdf, 0xd9, 0xdb, 0x16, + 0x4b, 0xd2, 0x2c, 0x4c, 0xd3, 0x57, 0x70, 0x23, 0x66, 0x22, 0xa2, 0x4b, 0x17, 0x44, 0x71, 0x68, + 0x08, 0x65, 0x99, 0x0d, 0x09, 0x2e, 0x5d, 0x10, 0xa5, 0xe5, 0x1a, 0x64, 0x49, 0x74, 0x49, 0x12, + 0x94, 0xb6, 0xaa, 0xeb, 0xf5, 0x2d, 0xa5, 0xd9, 0xda, 0x6d, 0x34, 0x77, 0xaa, 0x5b, 0xa2, 0x30, + 0x94, 0xc9, 0xf5, 0x4f, 0xed, 0x35, 0xe4, 0xfa, 0x86, 0x98, 0x0a, 0xca, 0x5a, 0xf5, 0xea, 0x6e, + 0x7d, 0x43, 0x4c, 0x2f, 0x6b, 0x30, 0x3f, 0x2e, 0x4f, 0x8e, 0xdd, 0x19, 0x81, 0x25, 0x4e, 0x1d, + 0xb1, 0xc4, 0x84, 0x6b, 0x64, 0x89, 0xff, 0x25, 0x05, 0x73, 0x63, 0x6a, 0xc5, 0xd8, 0x97, 0x3c, + 0x0b, 0x59, 0x1a, 0xa2, 0xb4, 0x7a, 0x3e, 0x3e, 0xb6, 0xe8, 0x90, 0x80, 0x1d, 0xa9, 0xa0, 0x04, + 0x17, 0xec, 0x20, 0xd2, 0x47, 0x74, 0x10, 0x98, 0x62, 0x24, 0xa7, 0xff, 0xcc, 0x48, 0x4e, 0xa7, + 0x65, 0xef, 0x52, 0x92, 0xb2, 0x47, 0x64, 0x27, 0xcb, 0xed, 0xd9, 0x31, 0xb9, 0xfd, 0x0a, 0xcc, + 0x8e, 0x10, 0x25, 0xce, 0xb1, 0xaf, 0x08, 0x50, 0x3e, 0xca, 0x39, 0x31, 0x99, 0x2e, 0x15, 0xca, + 0x74, 0x57, 0xa2, 0x1e, 0x3c, 0x77, 0xf4, 0x22, 0x8c, 0xac, 0xf5, 0x1b, 0x02, 0x2c, 0x8c, 0xef, + 0x14, 0xc7, 0xda, 0xf0, 0x09, 0x98, 0xec, 0x23, 0xef, 0xc0, 0xe2, 0xdd, 0xd2, 0x87, 0xc7, 0xd4, + 0x60, 0x3c, 0x1c, 0x5d, 0x6c, 0x86, 0x0a, 0x16, 0xf1, 0xf4, 0x51, 0xed, 0x1e, 0xb5, 0x66, 0xc4, + 0xd2, 0xcf, 0xa5, 0xe0, 0x81, 0xb1, 0xe4, 0x63, 0x0d, 0x7d, 0x08, 0x40, 0x37, 0xed, 0x81, 0x47, + 0x3b, 0x22, 0x9a, 0x60, 0xf3, 0x44, 0x42, 0x92, 0x17, 0x4e, 0x9e, 0x03, 0xcf, 0x1f, 0x4f, 0x93, + 0x71, 0xa0, 0x22, 0xa2, 0xf0, 0xcc, 0xd0, 0xd0, 0x0c, 0x31, 0x74, 0xe9, 0x88, 0x99, 0x8e, 0x04, + 0xe6, 0x47, 0x41, 0xd4, 0x0c, 0x1d, 0x99, 0x9e, 0xe2, 0x7a, 0x0e, 0x52, 0xfb, 0xba, 0xd9, 0x23, + 0x15, 0x24, 0x57, 0xc9, 0x76, 0x55, 0xc3, 0x45, 0xf2, 0x0c, 0x1d, 0x6e, 0xf3, 0x51, 0x8c, 0x20, + 0x01, 0xe4, 0x04, 0x10, 0x93, 0x21, 0x04, 0x1d, 0xf6, 0x11, 0xcb, 0xdf, 0xcc, 0x41, 0x21, 0xd0, + 0x57, 0x4b, 0xe7, 0xa0, 0x78, 0x4d, 0xbd, 0xa1, 0x2a, 0xfc, 0xac, 0x44, 0x3d, 0x51, 0xc0, 0xb2, + 0x16, 0x3b, 0x2f, 0x7d, 0x14, 0xe6, 0x89, 0x8a, 0x35, 0xf0, 0x90, 0xa3, 0x68, 0x86, 0xea, 0xba, + 0xc4, 0x69, 0x39, 0xa2, 0x2a, 0xe1, 0xb1, 0x26, 0x1e, 0xaa, 0xf1, 0x11, 0xe9, 0x22, 0xcc, 0x11, + 0x44, 0x7f, 0x60, 0x78, 0xba, 0x6d, 0x20, 0x05, 0x9f, 0xde, 0x5c, 0x52, 0x49, 0x7c, 0xcb, 0x66, + 0xb1, 0xc6, 0x36, 0x53, 0xc0, 0x16, 0xb9, 0xd2, 0x06, 0x3c, 0x44, 0x60, 0x3d, 0x64, 0x22, 0x47, + 0xf5, 0x90, 0x82, 0x3e, 0x3b, 0x50, 0x0d, 0x57, 0x51, 0xcd, 0x8e, 0x72, 0xa0, 0xba, 0x07, 0xe5, + 0x79, 0x4c, 0xb0, 0x9e, 0x2a, 0x0b, 0xf2, 0x69, 0xac, 0xb8, 0xc9, 0xf4, 0xea, 0x44, 0xad, 0x6a, + 0x76, 0x3e, 0xa9, 0xba, 0x07, 0x52, 0x05, 0x16, 0x08, 0x8b, 0xeb, 0x39, 0xba, 0xd9, 0x53, 0xb4, + 0x03, 0xa4, 0x5d, 0x57, 0x06, 0x5e, 0xf7, 0x99, 0xf2, 0x83, 0xc1, 0xf7, 0x13, 0x0b, 0xdb, 0x44, + 0xa7, 0x86, 0x55, 0xf6, 0xbc, 0xee, 0x33, 0x52, 0x1b, 0x8a, 0x78, 0x31, 0xfa, 0xfa, 0x2d, 0xa4, + 0x74, 0x2d, 0x87, 0x94, 0xc6, 0xd2, 0x98, 0xd4, 0x14, 0xf0, 0xe0, 0x6a, 0x93, 0x01, 0xb6, 0xad, + 0x0e, 0xaa, 0x64, 0xdb, 0xad, 0x7a, 0x7d, 0x43, 0x2e, 0x70, 0x96, 0xab, 0x96, 0x83, 0x03, 0xaa, + 0x67, 0xf9, 0x0e, 0x2e, 0xd0, 0x80, 0xea, 0x59, 0xdc, 0xbd, 0x17, 0x61, 0x4e, 0xd3, 0xe8, 0x9c, + 0x75, 0x4d, 0x61, 0x67, 0x2c, 0xb7, 0x2c, 0x86, 0x9c, 0xa5, 0x69, 0x9b, 0x54, 0x81, 0xc5, 0xb8, + 0x2b, 0x5d, 0x86, 0x07, 0x86, 0xce, 0x0a, 0x02, 0x67, 0x47, 0x66, 0x19, 0x85, 0x5e, 0x84, 0x39, + 0xfb, 0x70, 0x14, 0x28, 0x85, 0xde, 0x68, 0x1f, 0x46, 0x61, 0x4f, 0xc3, 0xbc, 0x7d, 0x60, 0x8f, + 0xe2, 0x9e, 0x08, 0xe2, 0x24, 0xfb, 0xc0, 0x8e, 0x02, 0x1f, 0x25, 0x07, 0x6e, 0x07, 0x69, 0xaa, + 0x87, 0x3a, 0xe5, 0x53, 0x41, 0xf5, 0xc0, 0x80, 0x74, 0x1e, 0x44, 0x4d, 0x53, 0x90, 0xa9, 0xee, + 0x1b, 0x48, 0x51, 0x1d, 0x64, 0xaa, 0x6e, 0xf9, 0x4c, 0x50, 0xb9, 0xa4, 0x69, 0x75, 0x32, 0x5a, + 0x25, 0x83, 0xd2, 0x13, 0x30, 0x6b, 0xed, 0x5f, 0xd3, 0x68, 0x48, 0x2a, 0xb6, 0x83, 0xba, 0xfa, + 0xcb, 0xe5, 0x47, 0x88, 0x7f, 0x67, 0xf0, 0x00, 0x09, 0xc8, 0x16, 0x11, 0x4b, 0x8f, 0x83, 0xa8, + 0xb9, 0x07, 0xaa, 0x63, 0x93, 0x9c, 0xec, 0xda, 0xaa, 0x86, 0xca, 0x8f, 0x52, 0x55, 0x2a, 0xdf, + 0xe1, 0x62, 0xbc, 0x25, 0xdc, 0x9b, 0x7a, 0xd7, 0xe3, 0x8c, 0x8f, 0xd1, 0x2d, 0x41, 0x64, 0x8c, + 0x6d, 0x05, 0x44, 0xec, 0x8a, 0xd0, 0x8b, 0x57, 0x88, 0x5a, 0xc9, 0x3e, 0xb0, 0x83, 0xef, 0x7d, + 0x18, 0xa6, 0xb1, 0xe6, 0xf0, 0xa5, 0x8f, 0xd3, 0x86, 0xcc, 0x3e, 0x08, 0xbc, 0xf1, 0x3d, 0xeb, + 0x8d, 0x97, 0x2b, 0x50, 0x0c, 0xc6, 0xa7, 0x94, 0x07, 0x1a, 0xa1, 0xa2, 0x80, 0x9b, 0x95, 0x5a, + 0x73, 0x03, 0xb7, 0x19, 0x2f, 0xd5, 0xc5, 0x14, 0x6e, 0x77, 0xb6, 0x1a, 0xbb, 0x75, 0x45, 0xde, + 0xdb, 0xd9, 0x6d, 0x6c, 0xd7, 0xc5, 0x74, 0xb0, 0xaf, 0xfe, 0x6e, 0x0a, 0x4a, 0xe1, 0x23, 0x92, + 0xf4, 0x93, 0x70, 0x8a, 0xdf, 0x67, 0xb8, 0xc8, 0x53, 0x6e, 0xea, 0x0e, 0xd9, 0x32, 0x7d, 0x95, + 0x96, 0x2f, 0x7f, 0xd1, 0xe6, 0x99, 0x56, 0x1b, 0x79, 0xcf, 0xeb, 0x0e, 0xde, 0x10, 0x7d, 0xd5, + 0x93, 0xb6, 0xe0, 0x8c, 0x69, 0x29, 0xae, 0xa7, 0x9a, 0x1d, 0xd5, 0xe9, 0x28, 0xc3, 0x9b, 0x24, + 0x45, 0xd5, 0x34, 0xe4, 0xba, 0x16, 0x2d, 0x55, 0x3e, 0xcb, 0x87, 0x4c, 0xab, 0xcd, 0x94, 0x87, + 0x39, 0xbc, 0xca, 0x54, 0x23, 0x01, 0x96, 0x3e, 0x2a, 0xc0, 0x1e, 0x84, 0x7c, 0x5f, 0xb5, 0x15, + 0x64, 0x7a, 0xce, 0x21, 0x69, 0x8c, 0x73, 0x72, 0xae, 0xaf, 0xda, 0x75, 0xfc, 0xfc, 0xfe, 0x9c, + 0x4f, 0xfe, 0x39, 0x0d, 0xc5, 0x60, 0x73, 0x8c, 0xcf, 0x1a, 0x1a, 0xa9, 0x23, 0x02, 0xc9, 0x34, + 0x0f, 0x1f, 0xdb, 0x4a, 0xaf, 0xd6, 0x70, 0x81, 0xa9, 0x4c, 0xd2, 0x96, 0x55, 0xa6, 0x48, 0x5c, + 0xdc, 0x71, 0x6e, 0x41, 0xb4, 0x45, 0xc8, 0xc9, 0xec, 0x49, 0xda, 0x84, 0xc9, 0x6b, 0x2e, 0xe1, + 0x9e, 0x24, 0xdc, 0x8f, 0x1c, 0xcf, 0xfd, 0x5c, 0x9b, 0x90, 0xe7, 0x9f, 0x6b, 0x2b, 0x3b, 0x4d, + 0x79, 0xbb, 0xba, 0x25, 0x33, 0xb8, 0x74, 0x1a, 0x32, 0x86, 0x7a, 0xeb, 0x30, 0x5c, 0x8a, 0x88, + 0x28, 0xa9, 0xe3, 0x4f, 0x43, 0xe6, 0x26, 0x52, 0xaf, 0x87, 0x0b, 0x00, 0x11, 0xbd, 0x87, 0xa1, + 0x7f, 0x1e, 0xb2, 0xc4, 0x5f, 0x12, 0x00, 0xf3, 0x98, 0x38, 0x21, 0xe5, 0x20, 0x53, 0x6b, 0xca, + 0x38, 0xfc, 0x45, 0x28, 0x52, 0xa9, 0xd2, 0x6a, 0xd4, 0x6b, 0x75, 0x31, 0xb5, 0x7c, 0x11, 0x26, + 0xa9, 0x13, 0xf0, 0xd6, 0xf0, 0xdd, 0x20, 0x4e, 0xb0, 0x47, 0xc6, 0x21, 0xf0, 0xd1, 0xbd, 0xed, + 0xf5, 0xba, 0x2c, 0xa6, 0x82, 0xcb, 0xeb, 0x42, 0x31, 0xd8, 0x17, 0xbf, 0x3f, 0x31, 0xf5, 0x1d, + 0x01, 0x0a, 0x81, 0x3e, 0x17, 0x37, 0x28, 0xaa, 0x61, 0x58, 0x37, 0x15, 0xd5, 0xd0, 0x55, 0x97, + 0x05, 0x05, 0x10, 0x51, 0x15, 0x4b, 0x92, 0x2e, 0xda, 0xfb, 0x62, 0xfc, 0xeb, 0x02, 0x88, 0xd1, + 0x16, 0x33, 0x62, 0xa0, 0xf0, 0x81, 0x1a, 0xf8, 0x9a, 0x00, 0xa5, 0x70, 0x5f, 0x19, 0x31, 0xef, + 0xdc, 0x07, 0x6a, 0xde, 0xdb, 0x29, 0x98, 0x0e, 0x75, 0x93, 0x49, 0xad, 0xfb, 0x2c, 0xcc, 0xea, + 0x1d, 0xd4, 0xb7, 0x2d, 0x0f, 0x99, 0xda, 0xa1, 0x62, 0xa0, 0x1b, 0xc8, 0x28, 0x2f, 0x93, 0x44, + 0x71, 0xfe, 0xf8, 0x7e, 0x75, 0xb5, 0x31, 0xc4, 0x6d, 0x61, 0x58, 0x65, 0xae, 0xb1, 0x51, 0xdf, + 0x6e, 0x35, 0x77, 0xeb, 0x3b, 0xb5, 0x17, 0x95, 0xbd, 0x9d, 0x9f, 0xde, 0x69, 0x3e, 0xbf, 0x23, + 0x8b, 0x7a, 0x44, 0xed, 0x3d, 0xdc, 0xea, 0x2d, 0x10, 0xa3, 0x46, 0x49, 0xa7, 0x60, 0x9c, 0x59, + 0xe2, 0x84, 0x34, 0x07, 0x33, 0x3b, 0x4d, 0xa5, 0xdd, 0xd8, 0xa8, 0x2b, 0xf5, 0xab, 0x57, 0xeb, + 0xb5, 0xdd, 0x36, 0xbd, 0x81, 0xf0, 0xb5, 0x77, 0xc3, 0x9b, 0xfa, 0xd5, 0x34, 0xcc, 0x8d, 0xb1, + 0x44, 0xaa, 0xb2, 0xb3, 0x03, 0x3d, 0xce, 0x7c, 0x24, 0x89, 0xf5, 0xab, 0xb8, 0xe4, 0xb7, 0x54, + 0xc7, 0x63, 0x47, 0x8d, 0xc7, 0x01, 0x7b, 0xc9, 0xf4, 0xf4, 0xae, 0x8e, 0x1c, 0x76, 0x61, 0x43, + 0x0f, 0x14, 0x33, 0x43, 0x39, 0xbd, 0xb3, 0xf9, 0x09, 0x90, 0x6c, 0xcb, 0xd5, 0x3d, 0xfd, 0x06, + 0x52, 0x74, 0x93, 0xdf, 0xee, 0xe0, 0x03, 0x46, 0x46, 0x16, 0xf9, 0x48, 0xc3, 0xf4, 0x7c, 0x6d, + 0x13, 0xf5, 0xd4, 0x88, 0x36, 0x4e, 0xe0, 0x69, 0x59, 0xe4, 0x23, 0xbe, 0xf6, 0x39, 0x28, 0x76, + 0xac, 0x01, 0xee, 0xba, 0xa8, 0x1e, 0xae, 0x17, 0x82, 0x5c, 0xa0, 0x32, 0x5f, 0x85, 0xf5, 0xd3, + 0xc3, 0x6b, 0xa5, 0xa2, 0x5c, 0xa0, 0x32, 0xaa, 0xf2, 0x18, 0xcc, 0xa8, 0xbd, 0x9e, 0x83, 0xc9, + 0x39, 0x11, 0x3d, 0x21, 0x94, 0x7c, 0x31, 0x51, 0x5c, 0x7c, 0x0e, 0x72, 0xdc, 0x0f, 0xb8, 0x24, + 0x63, 0x4f, 0x28, 0x36, 0x3d, 0xf6, 0xa6, 0x56, 0xf2, 0x72, 0xce, 0xe4, 0x83, 0xe7, 0xa0, 0xa8, + 0xbb, 0xca, 0xf0, 0x96, 0x3c, 0x75, 0x36, 0xb5, 0x92, 0x93, 0x0b, 0xba, 0xeb, 0xdf, 0x30, 0x2e, + 0xbf, 0x91, 0x82, 0x52, 0xf8, 0x96, 0x5f, 0xda, 0x80, 0x9c, 0x61, 0x69, 0x2a, 0x09, 0x2d, 0xfa, + 0x89, 0x69, 0x25, 0xe6, 0xc3, 0xc0, 0xea, 0x16, 0xd3, 0x97, 0x7d, 0xe4, 0xe2, 0x3f, 0x0a, 0x90, + 0xe3, 0x62, 0x69, 0x01, 0x32, 0xb6, 0xea, 0x1d, 0x10, 0xba, 0xec, 0x7a, 0x4a, 0x14, 0x64, 0xf2, + 0x8c, 0xe5, 0xae, 0xad, 0x9a, 0x24, 0x04, 0x98, 0x1c, 0x3f, 0xe3, 0x75, 0x35, 0x90, 0xda, 0x21, + 0xc7, 0x0f, 0xab, 0xdf, 0x47, 0xa6, 0xe7, 0xf2, 0x75, 0x65, 0xf2, 0x1a, 0x13, 0x4b, 0x4f, 0xc2, + 0xac, 0xe7, 0xa8, 0xba, 0x11, 0xd2, 0xcd, 0x10, 0x5d, 0x91, 0x0f, 0xf8, 0xca, 0x15, 0x38, 0xcd, + 0x79, 0x3b, 0xc8, 0x53, 0xb5, 0x03, 0xd4, 0x19, 0x82, 0x26, 0xc9, 0x35, 0xc3, 0x29, 0xa6, 0xb0, + 0xc1, 0xc6, 0x39, 0x76, 0xf9, 0xfb, 0x02, 0xcc, 0xf2, 0x03, 0x53, 0xc7, 0x77, 0xd6, 0x36, 0x80, + 0x6a, 0x9a, 0x96, 0x17, 0x74, 0xd7, 0x68, 0x28, 0x8f, 0xe0, 0x56, 0xab, 0x3e, 0x48, 0x0e, 0x10, + 0x2c, 0xf6, 0x01, 0x86, 0x23, 0x47, 0xba, 0xed, 0x0c, 0x14, 0xd8, 0x27, 0x1c, 0xf2, 0x1d, 0x90, + 0x1e, 0xb1, 0x81, 0x8a, 0xf0, 0xc9, 0x4a, 0x9a, 0x87, 0xec, 0x3e, 0xea, 0xe9, 0x26, 0xbb, 0x98, + 0xa5, 0x0f, 0xfc, 0x22, 0x24, 0xe3, 0x5f, 0x84, 0xac, 0x7f, 0x06, 0xe6, 0x34, 0xab, 0x1f, 0x35, + 0x77, 0x5d, 0x8c, 0x1c, 0xf3, 0xdd, 0x4f, 0x0a, 0x2f, 0xc1, 0xb0, 0xc5, 0xfc, 0x91, 0x20, 0x7c, + 0x39, 0x95, 0xde, 0x6c, 0xad, 0x7f, 0x2d, 0xb5, 0xb8, 0x49, 0xa1, 0x2d, 0x3e, 0x53, 0x19, 0x75, + 0x0d, 0xa4, 0x61, 0xeb, 0xe1, 0x2b, 0x4f, 0xc2, 0x47, 0x7a, 0xba, 0x77, 0x30, 0xd8, 0x5f, 0xd5, + 0xac, 0xfe, 0xf9, 0x9e, 0xd5, 0xb3, 0x86, 0x9f, 0x3e, 0xf1, 0x13, 0x79, 0x20, 0xbf, 0xd8, 0xe7, + 0xcf, 0xbc, 0x2f, 0x5d, 0x8c, 0xfd, 0x56, 0x5a, 0xd9, 0x81, 0x39, 0xa6, 0xac, 0x90, 0xef, 0x2f, + 0xf4, 0x14, 0x21, 0x1d, 0x7b, 0x87, 0x55, 0xfe, 0xc6, 0x3b, 0xa4, 0x5c, 0xcb, 0xb3, 0x0c, 0x8a, + 0xc7, 0xe8, 0x41, 0xa3, 0x22, 0xc3, 0x03, 0x21, 0x3e, 0xba, 0x35, 0x91, 0x13, 0xc3, 0xf8, 0x5d, + 0xc6, 0x38, 0x17, 0x60, 0x6c, 0x33, 0x68, 0xa5, 0x06, 0xd3, 0x27, 0xe1, 0xfa, 0x7b, 0xc6, 0x55, + 0x44, 0x41, 0x92, 0x4d, 0x98, 0x21, 0x24, 0xda, 0xc0, 0xf5, 0xac, 0x3e, 0xc9, 0x7b, 0xc7, 0xd3, + 0xfc, 0xc3, 0x3b, 0x74, 0xaf, 0x94, 0x30, 0xac, 0xe6, 0xa3, 0x2a, 0x15, 0x20, 0x9f, 0x9c, 0x3a, + 0x48, 0x33, 0x62, 0x18, 0xde, 0x62, 0x86, 0xf8, 0xfa, 0x95, 0x4f, 0xc3, 0x3c, 0xfe, 0x4d, 0xd2, + 0x52, 0xd0, 0x92, 0xf8, 0x0b, 0xaf, 0xf2, 0xf7, 0x5f, 0xa1, 0xdb, 0x71, 0xce, 0x27, 0x08, 0xd8, + 0x14, 0x58, 0xc5, 0x1e, 0xf2, 0x3c, 0xe4, 0xb8, 0x8a, 0x6a, 0x8c, 0x33, 0x2f, 0x70, 0x63, 0x50, + 0xfe, 0xc2, 0xbb, 0xe1, 0x55, 0xdc, 0xa4, 0xc8, 0xaa, 0x61, 0x54, 0xf6, 0xe0, 0xd4, 0x98, 0xa8, + 0x48, 0xc0, 0xf9, 0x2a, 0xe3, 0x9c, 0x1f, 0x89, 0x0c, 0x4c, 0xdb, 0x02, 0x2e, 0xf7, 0xd7, 0x32, + 0x01, 0xe7, 0xef, 0x31, 0x4e, 0x89, 0x61, 0xf9, 0x92, 0x62, 0xc6, 0xe7, 0x60, 0xf6, 0x06, 0x72, + 0xf6, 0x2d, 0x97, 0xdd, 0xd2, 0x24, 0xa0, 0x7b, 0x8d, 0xd1, 0xcd, 0x30, 0x20, 0xb9, 0xb6, 0xc1, + 0x5c, 0x97, 0x21, 0xd7, 0x55, 0x35, 0x94, 0x80, 0xe2, 0x8b, 0x8c, 0x62, 0x0a, 0xeb, 0x63, 0x68, + 0x15, 0x8a, 0x3d, 0x8b, 0x55, 0xa6, 0x78, 0xf8, 0xeb, 0x0c, 0x5e, 0xe0, 0x18, 0x46, 0x61, 0x5b, + 0xf6, 0xc0, 0xc0, 0x65, 0x2b, 0x9e, 0xe2, 0xf7, 0x39, 0x05, 0xc7, 0x30, 0x8a, 0x13, 0xb8, 0xf5, + 0x0f, 0x38, 0x85, 0x1b, 0xf0, 0xe7, 0xb3, 0x50, 0xb0, 0x4c, 0xe3, 0xd0, 0x32, 0x93, 0x18, 0xf1, + 0x25, 0xc6, 0x00, 0x0c, 0x82, 0x09, 0xae, 0x40, 0x3e, 0xe9, 0x42, 0xfc, 0xd1, 0xbb, 0x7c, 0x7b, + 0xf0, 0x15, 0xd8, 0x84, 0x19, 0x9e, 0xa0, 0x74, 0xcb, 0x4c, 0x40, 0xf1, 0x15, 0x46, 0x51, 0x0a, + 0xc0, 0xd8, 0x34, 0x3c, 0xe4, 0x7a, 0x3d, 0x94, 0x84, 0xe4, 0x0d, 0x3e, 0x0d, 0x06, 0x61, 0xae, + 0xdc, 0x47, 0xa6, 0x76, 0x90, 0x8c, 0xe1, 0xab, 0xdc, 0x95, 0x1c, 0x83, 0x29, 0x6a, 0x30, 0xdd, + 0x57, 0x1d, 0xf7, 0x40, 0x35, 0x12, 0x2d, 0xc7, 0x1f, 0x33, 0x8e, 0xa2, 0x0f, 0x62, 0x1e, 0x19, + 0x98, 0x27, 0xa1, 0xf9, 0x1a, 0xf7, 0x48, 0x00, 0xc6, 0xb6, 0x9e, 0xeb, 0x91, 0x2b, 0xad, 0x93, + 0xb0, 0xfd, 0x09, 0xdf, 0x7a, 0x14, 0xbb, 0x1d, 0x64, 0xbc, 0x02, 0x79, 0x57, 0xbf, 0x95, 0x88, + 0xe6, 0x4f, 0xf9, 0x4a, 0x13, 0x00, 0x06, 0xbf, 0x08, 0xa7, 0xc7, 0x96, 0x89, 0x04, 0x64, 0x7f, + 0xc6, 0xc8, 0x16, 0xc6, 0x94, 0x0a, 0x96, 0x12, 0x4e, 0x4a, 0xf9, 0xe7, 0x3c, 0x25, 0xa0, 0x08, + 0x57, 0x0b, 0x9f, 0x15, 0x5c, 0xb5, 0x7b, 0x32, 0xaf, 0xfd, 0x05, 0xf7, 0x1a, 0xc5, 0x86, 0xbc, + 0xb6, 0x0b, 0x0b, 0x8c, 0xf1, 0x64, 0xeb, 0xfa, 0x75, 0x9e, 0x58, 0x29, 0x7a, 0x2f, 0xbc, 0xba, + 0x9f, 0x81, 0x45, 0xdf, 0x9d, 0xbc, 0x29, 0x75, 0x95, 0xbe, 0x6a, 0x27, 0x60, 0xfe, 0x06, 0x63, + 0xe6, 0x19, 0xdf, 0xef, 0x6a, 0xdd, 0x6d, 0xd5, 0xc6, 0xe4, 0x2f, 0x40, 0x99, 0x93, 0x0f, 0x4c, + 0x07, 0x69, 0x56, 0xcf, 0xd4, 0x6f, 0xa1, 0x4e, 0x02, 0xea, 0xbf, 0x8c, 0x2c, 0xd5, 0x5e, 0x00, + 0x8e, 0x99, 0x1b, 0x20, 0xfa, 0xbd, 0x8a, 0xa2, 0xf7, 0x6d, 0xcb, 0xf1, 0x62, 0x18, 0xbf, 0xc9, + 0x57, 0xca, 0xc7, 0x35, 0x08, 0xac, 0x52, 0x87, 0x12, 0x79, 0x4c, 0x1a, 0x92, 0x7f, 0xc5, 0x88, + 0xa6, 0x87, 0x28, 0x96, 0x38, 0x34, 0xab, 0x6f, 0xab, 0x4e, 0x92, 0xfc, 0xf7, 0xd7, 0x3c, 0x71, + 0x30, 0x08, 0x4b, 0x1c, 0xde, 0xa1, 0x8d, 0x70, 0xb5, 0x4f, 0xc0, 0xf0, 0x2d, 0x9e, 0x38, 0x38, + 0x86, 0x51, 0xf0, 0x86, 0x21, 0x01, 0xc5, 0xdf, 0x70, 0x0a, 0x8e, 0xc1, 0x14, 0x9f, 0x1a, 0x16, + 0x5a, 0x07, 0xf5, 0x74, 0xd7, 0x73, 0x68, 0x2b, 0x7c, 0x3c, 0xd5, 0xb7, 0xdf, 0x0d, 0x37, 0x61, + 0x72, 0x00, 0x8a, 0x33, 0x11, 0xbb, 0x42, 0x25, 0x27, 0xa5, 0x78, 0xc3, 0xde, 0xe4, 0x99, 0x28, + 0x00, 0xc3, 0xb6, 0x05, 0x3a, 0x44, 0xec, 0x76, 0x0d, 0x9f, 0x0f, 0x12, 0xd0, 0x7d, 0x27, 0x62, + 0x5c, 0x9b, 0x63, 0x31, 0x67, 0xa0, 0xff, 0x19, 0x98, 0xd7, 0xd1, 0x61, 0xa2, 0xe8, 0xfc, 0xdb, + 0x48, 0xff, 0xb3, 0x47, 0x91, 0x34, 0x87, 0xcc, 0x44, 0xfa, 0x29, 0x29, 0xee, 0x9f, 0x75, 0xca, + 0x3f, 0x7f, 0x8f, 0xcd, 0x37, 0xdc, 0x4e, 0x55, 0xb6, 0x70, 0x90, 0x87, 0x9b, 0x9e, 0x78, 0xb2, + 0x57, 0xee, 0xf9, 0x71, 0x1e, 0xea, 0x79, 0x2a, 0x57, 0x61, 0x3a, 0xd4, 0xf0, 0xc4, 0x53, 0xfd, + 0x02, 0xa3, 0x2a, 0x06, 0xfb, 0x9d, 0xca, 0x45, 0xc8, 0xe0, 0xe6, 0x25, 0x1e, 0xfe, 0x8b, 0x0c, + 0x4e, 0xd4, 0x2b, 0x1f, 0x87, 0x1c, 0x6f, 0x5a, 0xe2, 0xa1, 0xbf, 0xc4, 0xa0, 0x3e, 0x04, 0xc3, + 0x79, 0xc3, 0x12, 0x0f, 0xff, 0x65, 0x0e, 0xe7, 0x10, 0x0c, 0x4f, 0xee, 0xc2, 0xbf, 0xfb, 0x95, + 0x0c, 0x2b, 0x3a, 0xdc, 0x77, 0x57, 0x60, 0x8a, 0x75, 0x2a, 0xf1, 0xe8, 0xcf, 0xb1, 0x97, 0x73, + 0x44, 0xe5, 0x69, 0xc8, 0x26, 0x74, 0xf8, 0xaf, 0x32, 0x28, 0xd5, 0xaf, 0xd4, 0xa0, 0x10, 0xe8, + 0x4e, 0xe2, 0xe1, 0xbf, 0xc6, 0xe0, 0x41, 0x14, 0x36, 0x9d, 0x75, 0x27, 0xf1, 0x04, 0xbf, 0xce, + 0x4d, 0x67, 0x08, 0xec, 0x36, 0xde, 0x98, 0xc4, 0xa3, 0x7f, 0x83, 0x7b, 0x9d, 0x43, 0x2a, 0xcf, + 0x42, 0xde, 0x2f, 0x36, 0xf1, 0xf8, 0xdf, 0x64, 0xf8, 0x21, 0x06, 0x7b, 0x20, 0x50, 0xec, 0xe2, + 0x29, 0x7e, 0x8b, 0x7b, 0x20, 0x80, 0xc2, 0xdb, 0x28, 0xda, 0xc0, 0xc4, 0x33, 0xfd, 0x36, 0xdf, + 0x46, 0x91, 0xfe, 0x05, 0xaf, 0x26, 0xc9, 0xf9, 0xf1, 0x14, 0xbf, 0xc3, 0x57, 0x93, 0xe8, 0x63, + 0x33, 0xa2, 0x1d, 0x41, 0x3c, 0xc7, 0xef, 0x72, 0x33, 0x22, 0x0d, 0x41, 0xa5, 0x05, 0xd2, 0x68, + 0x37, 0x10, 0xcf, 0xf7, 0x79, 0xc6, 0x37, 0x3b, 0xd2, 0x0c, 0x54, 0x9e, 0x87, 0x85, 0xf1, 0x9d, + 0x40, 0x3c, 0xeb, 0x17, 0xee, 0x45, 0xce, 0x6e, 0xc1, 0x46, 0xa0, 0xb2, 0x3b, 0x2c, 0x29, 0xc1, + 0x2e, 0x20, 0x9e, 0xf6, 0xd5, 0x7b, 0xe1, 0xc4, 0x1d, 0x6c, 0x02, 0x2a, 0x55, 0x80, 0x61, 0x01, + 0x8e, 0xe7, 0x7a, 0x8d, 0x71, 0x05, 0x40, 0x78, 0x6b, 0xb0, 0xfa, 0x1b, 0x8f, 0xff, 0x22, 0xdf, + 0x1a, 0x0c, 0x81, 0xb7, 0x06, 0x2f, 0xbd, 0xf1, 0xe8, 0xd7, 0xf9, 0xd6, 0xe0, 0x10, 0x1c, 0xd9, + 0x81, 0xea, 0x16, 0xcf, 0xf0, 0x25, 0x1e, 0xd9, 0x01, 0x54, 0x65, 0x07, 0x66, 0x47, 0x0a, 0x62, + 0x3c, 0xd5, 0x97, 0x19, 0x95, 0x18, 0xad, 0x87, 0xc1, 0xe2, 0xc5, 0x8a, 0x61, 0x3c, 0xdb, 0x1f, + 0x46, 0x8a, 0x17, 0xab, 0x85, 0x95, 0x2b, 0x90, 0x33, 0x07, 0x86, 0x81, 0x37, 0x8f, 0x74, 0xfc, + 0x3f, 0xd8, 0x95, 0xff, 0xfd, 0x3e, 0xf3, 0x0e, 0x07, 0x54, 0x2e, 0x42, 0x16, 0xf5, 0xf7, 0x51, + 0x27, 0x0e, 0xf9, 0x1f, 0xf7, 0x79, 0xc2, 0xc4, 0xda, 0x95, 0x67, 0x01, 0xe8, 0xd5, 0x08, 0xf9, + 0xec, 0x17, 0x83, 0xfd, 0xcf, 0xfb, 0xec, 0x5f, 0x5f, 0x86, 0x90, 0x21, 0x01, 0xfd, 0x47, 0x9a, + 0xe3, 0x09, 0xde, 0x0d, 0x13, 0x90, 0x15, 0xb9, 0x0c, 0x53, 0xd7, 0x5c, 0xcb, 0xf4, 0xd4, 0x5e, + 0x1c, 0xfa, 0xbf, 0x18, 0x9a, 0xeb, 0x63, 0x87, 0xf5, 0x2d, 0x07, 0x79, 0x6a, 0xcf, 0x8d, 0xc3, + 0xfe, 0x37, 0xc3, 0xfa, 0x00, 0x0c, 0xd6, 0x54, 0xd7, 0x4b, 0x32, 0xef, 0x1f, 0x70, 0x30, 0x07, + 0x60, 0xa3, 0xf1, 0xef, 0xeb, 0xe8, 0x30, 0x0e, 0xfb, 0x43, 0x6e, 0x34, 0xd3, 0xaf, 0x7c, 0x1c, + 0xf2, 0xf8, 0x27, 0xfd, 0x7f, 0xb6, 0x18, 0xf0, 0xff, 0x30, 0xf0, 0x10, 0x81, 0xdf, 0xec, 0x7a, + 0x1d, 0x4f, 0x8f, 0x77, 0xf6, 0xff, 0xb2, 0x95, 0xe6, 0xfa, 0x95, 0x2a, 0x14, 0x5c, 0xaf, 0xd3, + 0x19, 0xb0, 0xfe, 0x34, 0x06, 0xfe, 0x7f, 0xf7, 0xfd, 0x2b, 0x0b, 0x1f, 0x83, 0x57, 0xfb, 0xe6, + 0x75, 0xcf, 0xb6, 0xc8, 0x67, 0x8e, 0x38, 0x86, 0x7b, 0x8c, 0x21, 0x00, 0x59, 0xaf, 0x8f, 0xbf, + 0xbe, 0x85, 0x4d, 0x6b, 0xd3, 0xa2, 0x17, 0xb7, 0x2f, 0x2d, 0xc7, 0xdf, 0xc0, 0xc2, 0x9b, 0x29, + 0x28, 0xf4, 0x1c, 0x6b, 0x60, 0xb3, 0x6b, 0xd8, 0x2c, 0x79, 0x58, 0x3c, 0xd9, 0xe5, 0xed, 0xf2, + 0xcf, 0xc2, 0xd4, 0x26, 0xc6, 0xb9, 0x1f, 0x93, 0x96, 0x40, 0xe8, 0x91, 0x4b, 0x6b, 0x58, 0x13, + 0x57, 0x29, 0x33, 0x1b, 0x5a, 0xdd, 0x94, 0x85, 0xde, 0xe2, 0x53, 0x20, 0x6c, 0x4a, 0x0b, 0x30, + 0x49, 0x26, 0xf8, 0x31, 0xf2, 0x81, 0x32, 0x2d, 0xb3, 0x27, 0x5f, 0xbe, 0x46, 0xee, 0xb5, 0x05, + 0x26, 0x5f, 0x1b, 0xf2, 0xaf, 0x71, 0x7e, 0x61, 0x84, 0x7f, 0xed, 0x84, 0xfc, 0xe9, 0x21, 0xff, + 0xfa, 0x85, 0xb7, 0xee, 0x2c, 0x4d, 0x7c, 0xef, 0xce, 0xd2, 0xc4, 0x3f, 0xdd, 0x59, 0x9a, 0x78, + 0xfb, 0xce, 0x92, 0xf0, 0xc3, 0x3b, 0x4b, 0xc2, 0x8f, 0xee, 0x2c, 0x09, 0xb7, 0xef, 0x2e, 0x09, + 0x5f, 0xbd, 0xbb, 0x24, 0x7c, 0xfd, 0xee, 0x92, 0xf0, 0xed, 0xbb, 0x4b, 0xc2, 0x5b, 0x77, 0x97, + 0x26, 0xbe, 0x77, 0x77, 0x69, 0xe2, 0xed, 0xbb, 0x4b, 0x13, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, + 0x46, 0xda, 0x48, 0xe6, 0xd7, 0x33, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/group/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/group/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/group/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/group/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -27,4 +27,4 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. regenerate: - (protoc --proto_path=../../../../../:../../protobuf/:. --gogo_out=. group.proto) + (protoc --proto_path=../../protobuf/:../../../../../:. --gogo_out=. group.proto) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/importcustom-issue389/imported/a.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/importcustom-issue389/imported/a.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/importcustom-issue389/imported/a.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/importcustom-issue389/imported/a.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -218,6 +218,9 @@ return dAtA } func (m *A) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.F1) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/importcustom-issue389/importing/c.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/importcustom-issue389/importing/c.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/importcustom-issue389/importing/c.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/importcustom-issue389/importing/c.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -224,6 +224,9 @@ return dAtA } func (m *C) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F2 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/indeximport-issue72/index/index.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/indeximport-issue72/index/index.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/indeximport-issue72/index/index.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/indeximport-issue72/index/index.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -254,6 +254,9 @@ return dAtA } func (m *IndexQuery) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Key != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/indeximport-issue72/indeximport.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/indeximport-issue72/indeximport.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/indeximport-issue72/indeximport.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/indeximport-issue72/indeximport.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -236,6 +236,9 @@ return dAtA } func (m *IndexQueries) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Queries) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/int64support/object.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/int64support/object.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/int64support/object.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/int64support/object.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -277,6 +277,9 @@ return dAtA } func (m *Object) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.OptionalNumber != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue260/issue260.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue260/issue260.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue260/issue260.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue260/issue260.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -569,6 +569,9 @@ return dAtA } func (m *Dropped) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -582,6 +585,9 @@ } func (m *DroppedWithoutGetters) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Height != 0 { @@ -596,6 +602,9 @@ } func (m *Kept) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue261/issue261.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue261/issue261.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue261/issue261.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue261/issue261.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -32,15 +32,13 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type MapStdTypes struct { - NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` } func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } func (*MapStdTypes) ProtoMessage() {} func (*MapStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_issue261_ea5bab07e532a045, []int{0} + return fileDescriptor_issue261_73ccdf10d7017cb8, []int{0} } func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -194,6 +192,9 @@ return offset + 1 } func (m *MapStdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NullableDuration) > 0 { @@ -519,10 +520,10 @@ ErrIntOverflowIssue261 = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("issue261.proto", fileDescriptor_issue261_ea5bab07e532a045) } +func init() { proto.RegisterFile("issue261.proto", fileDescriptor_issue261_73ccdf10d7017cb8) } -var fileDescriptor_issue261_ea5bab07e532a045 = []byte{ - // 266 bytes of a gzipped FileDescriptorProto +var fileDescriptor_issue261_73ccdf10d7017cb8 = []byte{ + // 275 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xcb, 0x2c, 0x2e, 0x2e, 0x4d, 0x35, 0x32, 0x33, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x80, 0xf1, 0xa5, 0x74, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xd3, 0xf3, 0xd3, 0xf3, 0xf5, @@ -535,9 +536,10 @@ 0x8a, 0xe3, 0x12, 0xc5, 0xaa, 0x41, 0x48, 0x80, 0x8b, 0x39, 0x3b, 0xb5, 0x52, 0x82, 0x51, 0x81, 0x51, 0x83, 0x35, 0x08, 0xc4, 0x14, 0xd2, 0xe7, 0x62, 0x2d, 0x4b, 0xcc, 0x29, 0x4d, 0x95, 0x60, 0x52, 0x60, 0xd4, 0xe0, 0x36, 0x92, 0xd4, 0x83, 0xf8, 0x44, 0x0f, 0xe6, 0x13, 0x3d, 0x98, 0x01, - 0x41, 0x10, 0x75, 0x56, 0x4c, 0x16, 0x8c, 0x4e, 0x3a, 0x17, 0x1e, 0xca, 0x31, 0xdc, 0x78, 0x28, + 0x41, 0x10, 0x75, 0x56, 0x4c, 0x16, 0x8c, 0x4e, 0x26, 0x17, 0x1e, 0xca, 0x31, 0xdc, 0x78, 0x28, 0xc7, 0xf0, 0xe1, 0xa1, 0x1c, 0x63, 0xc3, 0x23, 0x39, 0xc6, 0x15, 0x8f, 0xe4, 0x18, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x17, 0x8f, 0xe4, 0x18, 0x3e, - 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0x21, 0x89, 0x0d, 0x6c, 0x96, 0x31, 0x20, 0x00, 0x00, - 0xff, 0xff, 0xf1, 0xf2, 0x28, 0x08, 0x6e, 0x01, 0x00, 0x00, + 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, + 0x92, 0xd8, 0xc0, 0x66, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x4d, 0xcb, 0xf5, 0x76, + 0x01, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue262/timefail.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue262/timefail.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue262/timefail.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue262/timefail.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -31,15 +31,13 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type TimeFail struct { - TimeTest *time.Time `protobuf:"bytes,1,opt,name=time_test,json=timeTest,stdtime" json:"time_test,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + TimeTest *time.Time `protobuf:"bytes,1,opt,name=time_test,json=timeTest,stdtime" json:"time_test,omitempty"` } func (m *TimeFail) Reset() { *m = TimeFail{} } func (*TimeFail) ProtoMessage() {} func (*TimeFail) Descriptor() ([]byte, []int) { - return fileDescriptor_timefail_540b49e689fc70b1, []int{0} + return fileDescriptor_timefail_9e133aed3973196e, []int{0} } func (m *TimeFail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -162,6 +160,9 @@ return offset + 1 } func (m *TimeFail) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TimeTest != nil { @@ -390,10 +391,10 @@ ErrIntOverflowTimefail = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("timefail.proto", fileDescriptor_timefail_540b49e689fc70b1) } +func init() { proto.RegisterFile("timefail.proto", fileDescriptor_timefail_9e133aed3973196e) } -var fileDescriptor_timefail_540b49e689fc70b1 = []byte{ - // 202 bytes of a gzipped FileDescriptorProto +var fileDescriptor_timefail_9e133aed3973196e = []byte{ + // 210 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2b, 0xc9, 0xcc, 0x4d, 0x4d, 0x4b, 0xcc, 0xcc, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x80, 0xf1, 0xa5, 0x74, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xd3, 0xf3, 0xd3, 0xf3, 0xf5, @@ -402,9 +403,10 @@ 0xe4, 0xc9, 0xc5, 0x11, 0x92, 0x99, 0x9b, 0xea, 0x96, 0x98, 0x99, 0x23, 0x64, 0xcb, 0xc5, 0x09, 0x92, 0x8e, 0x2f, 0x49, 0x2d, 0x2e, 0x91, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x36, 0x92, 0xd2, 0x83, 0x18, 0xa0, 0x07, 0x33, 0x40, 0x2f, 0x04, 0x66, 0x80, 0x13, 0xcb, 0x84, 0xfb, 0xf2, 0x8c, 0x41, - 0x60, 0xa7, 0x85, 0xa4, 0x16, 0x97, 0x38, 0xe9, 0x5c, 0x78, 0x28, 0xc7, 0x70, 0xe3, 0xa1, 0x1c, + 0x60, 0xa7, 0x85, 0xa4, 0x16, 0x97, 0x38, 0x99, 0x5c, 0x78, 0x28, 0xc7, 0x70, 0xe3, 0xa1, 0x1c, 0xc3, 0x87, 0x87, 0x72, 0x8c, 0x0d, 0x8f, 0xe4, 0x18, 0x57, 0x3c, 0x92, 0x63, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x5f, 0x3c, 0x92, 0x63, 0xf8, 0xf0, - 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x24, 0x36, 0xb0, 0x89, 0xc6, 0x80, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xc3, 0xd6, 0xbd, 0x67, 0xeb, 0x00, 0x00, 0x00, + 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x48, + 0x62, 0x03, 0x9b, 0x6c, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x43, 0x63, 0x18, 0x5f, 0xf3, 0x00, + 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue322/issue322.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue322/issue322.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue322/issue322.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue322/issue322.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -377,6 +377,9 @@ return dAtA } func (m *OneofTest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Union != nil { @@ -389,6 +392,9 @@ } func (m *OneofTest_I) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovIssue322(uint64(m.I)) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue330/issue330.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue330/issue330.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue330/issue330.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue330/issue330.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -217,6 +217,9 @@ return dAtA } func (m *Object) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Type != 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/ids.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/ids.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/ids.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/ids.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,222 @@ +package issue411 + +import ( + "encoding/base64" + "encoding/binary" + "fmt" + "strconv" +) + +// TraceID is a random 128bit identifier for a trace +type TraceID struct { + Low uint64 `json:"lo"` + High uint64 `json:"hi"` +} + +// SpanID is a random 64bit identifier for a span +type SpanID uint64 + +// ------- TraceID ------- + +// NewTraceID creates a new TraceID from two 64bit unsigned ints. +func NewTraceID(high, low uint64) TraceID { + return TraceID{High: high, Low: low} +} + +func (t TraceID) String() string { + if t.High == 0 { + return fmt.Sprintf("%x", t.Low) + } + return fmt.Sprintf("%x%016x", t.High, t.Low) +} + +// TraceIDFromString creates a TraceID from a hexadecimal string +func TraceIDFromString(s string) (TraceID, error) { + var hi, lo uint64 + var err error + if len(s) > 32 { + return TraceID{}, fmt.Errorf("TraceID cannot be longer than 32 hex characters: %s", s) + } else if len(s) > 16 { + hiLen := len(s) - 16 + if hi, err = strconv.ParseUint(s[0:hiLen], 16, 64); err != nil { + return TraceID{}, err + } + if lo, err = strconv.ParseUint(s[hiLen:], 16, 64); err != nil { + return TraceID{}, err + } + } else { + if lo, err = strconv.ParseUint(s, 16, 64); err != nil { + return TraceID{}, err + } + } + return TraceID{High: hi, Low: lo}, nil +} + +// MarshalText is called by encoding/json, which we do not want people to use. +func (t TraceID) MarshalText() ([]byte, error) { + return nil, fmt.Errorf("unsupported method TraceID.MarshalText; please use github.com/gogo/protobuf/jsonpb for marshalling") +} + +// UnmarshalText is called by encoding/json, which we do not want people to use. +func (t *TraceID) UnmarshalText(text []byte) error { + return fmt.Errorf("unsupported method TraceID.UnmarshalText; please use github.com/gogo/protobuf/jsonpb for marshalling") +} + +// Size returns the size of this datum in protobuf. It is always 16 bytes. +func (t *TraceID) Size() int { + return 16 +} + +// Marshal converts trace ID into a binary representation. Called by protobuf serialization. +func (t TraceID) Marshal() ([]byte, error) { + b := make([]byte, t.Size()) + _, err := t.MarshalTo(b) + return b, err +} + +// MarshalTo converts trace ID into a binary representation. Called by protobuf serialization. +func (t *TraceID) MarshalTo(data []byte) (n int, err error) { + var b [16]byte + binary.BigEndian.PutUint64(b[:8], uint64(t.High)) + binary.BigEndian.PutUint64(b[8:], uint64(t.Low)) + return marshalBytes(data, b[:]) +} + +// Unmarshal inflates this trace ID from binary representation. Called by protobuf serialization. +func (t *TraceID) Unmarshal(data []byte) error { + if len(data) < 16 { + return fmt.Errorf("buffer is too short") + } + t.High = binary.BigEndian.Uint64(data[:8]) + t.Low = binary.BigEndian.Uint64(data[8:]) + return nil +} + +func marshalBytes(dst []byte, src []byte) (n int, err error) { + if len(dst) < len(src) { + return 0, fmt.Errorf("buffer is too short") + } + return copy(dst, src), nil +} + +// MarshalJSON converts trace id into a base64 string enclosed in quotes. +// Used by protobuf JSON serialization. +// Example: {high:2, low:1} => "AAAAAAAAAAIAAAAAAAAAAQ==". +func (t TraceID) MarshalJSON() ([]byte, error) { + var b [16]byte + _, err := t.MarshalTo(b[:]) // can only error on incorrect buffer size + if err != nil { + return []byte{}, err + } + s := make([]byte, 24+2) + base64.StdEncoding.Encode(s[1:25], b[:]) + s[0], s[25] = '"', '"' + return s, nil +} + +// UnmarshalJSON inflates trace id from base64 string, possibly enclosed in quotes. +// User by protobuf JSON serialization. +func (t *TraceID) UnmarshalJSON(data []byte) error { + s := string(data) + if l := len(s); l > 2 && s[0] == '"' && s[l-1] == '"' { + s = s[1 : l-1] + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + return fmt.Errorf("cannot unmarshal TraceID from string '%s': %v", string(data), err) + } + return t.Unmarshal(b) +} + +// ------- SpanID ------- + +// NewSpanID creates a new SpanID from a 64bit unsigned int. +func NewSpanID(v uint64) SpanID { + return SpanID(v) +} + +func (s SpanID) String() string { + return fmt.Sprintf("%x", uint64(s)) +} + +// SpanIDFromString creates a SpanID from a hexadecimal string +func SpanIDFromString(s string) (SpanID, error) { + if len(s) > 16 { + return SpanID(0), fmt.Errorf("SpanID cannot be longer than 16 hex characters: %s", s) + } + id, err := strconv.ParseUint(s, 16, 64) + if err != nil { + return SpanID(0), err + } + return SpanID(id), nil +} + +// MarshalText is called by encoding/json, which we do not want people to use. +func (s SpanID) MarshalText() ([]byte, error) { + return nil, fmt.Errorf("unsupported method SpanID.MarshalText; please use github.com/gogo/protobuf/jsonpb for marshalling") +} + +// UnmarshalText is called by encoding/json, which we do not want people to use. +func (s *SpanID) UnmarshalText(text []byte) error { + return fmt.Errorf("unsupported method SpanID.UnmarshalText; please use github.com/gogo/protobuf/jsonpb for marshalling") +} + +// Size returns the size of this datum in protobuf. It is always 8 bytes. +func (s *SpanID) Size() int { + return 8 +} + +// Marshal converts span ID into a binary representation. Called by protobuf serialization. +func (s SpanID) Marshal() ([]byte, error) { + b := make([]byte, s.Size()) + _, err := s.MarshalTo(b) + return b, err +} + +// MarshalTo converts span ID into a binary representation. Called by protobuf serialization. +func (s *SpanID) MarshalTo(data []byte) (n int, err error) { + var b [8]byte + binary.BigEndian.PutUint64(b[:], uint64(*s)) + return marshalBytes(data, b[:]) +} + +// Unmarshal inflates span ID from a binary representation. Called by protobuf serialization. +func (s *SpanID) Unmarshal(data []byte) error { + if len(data) < 8 { + return fmt.Errorf("buffer is too short") + } + *s = NewSpanID(binary.BigEndian.Uint64(data)) + return nil +} + +// MarshalJSON converts span id into a base64 string enclosed in quotes. +// Used by protobuf JSON serialization. +// Example: {1} => "AAAAAAAAAAE=". +func (s SpanID) MarshalJSON() ([]byte, error) { + var b [8]byte + _, err := s.MarshalTo(b[:]) // can only error on incorrect buffer size + if err != nil { + return []byte{}, err + } + v := make([]byte, 12+2) + base64.StdEncoding.Encode(v[1:13], b[:]) + v[0], v[13] = '"', '"' + return v, nil +} + +// UnmarshalJSON inflates span id from base64 string, possibly enclosed in quotes. +// User by protobuf JSON serialization. +// +// There appears to be a bug in gogoproto, as this function is only called for numeric values. +// https://github.com/gogo/protobuf/issues/411#issuecomment-393856837 +func (s *SpanID) UnmarshalJSON(data []byte) error { + str := string(data) + if l := len(str); l > 2 && str[0] == '"' && str[l-1] == '"' { + str = str[1 : l-1] + } + b, err := base64.StdEncoding.DecodeString(str) + if err != nil { + return fmt.Errorf("cannot unmarshal SpanID from string '%s': %v", string(data), err) + } + return s.Unmarshal(b) +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/ids_test.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/ids_test.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/ids_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/ids_test.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,69 @@ +package issue411_test + +import ( + "bytes" + "testing" + + "github.com/gogo/protobuf/jsonpb" + "github.com/gogo/protobuf/proto" + "github.com/gogo/protobuf/test/issue411" +) + +// Thanks to @yurishkuro for reporting this issue (#411) and providing this test case + +// TraceID/SpanID fields are defined as bytes in proto, backed by custom types in Go. +// Unfortunately, that means they require manual implementations of proto & json serialization. +// To ensure that it's the same as the default protobuf serialization, file jaeger_test.proto +// contains a copy of SpanRef message without any gogo options. This test file is compiled with +// plain protoc -go_out (without gogo). This test performs proto and JSON marshaling/unmarshaling +// to ensure that the outputs of manual and standard serialization are identical. +func TestTraceSpanIDMarshalProto(t *testing.T) { + testCases := []struct { + name string + marshal func(proto.Message) ([]byte, error) + unmarshal func([]byte, proto.Message) error + expected string + }{ + { + name: "protobuf", + marshal: proto.Marshal, + unmarshal: proto.Unmarshal, + }, + { + name: "JSON", + marshal: func(m proto.Message) ([]byte, error) { + out := new(bytes.Buffer) + err := new(jsonpb.Marshaler).Marshal(out, m) + if err != nil { + return nil, err + } + return out.Bytes(), nil + }, + unmarshal: func(in []byte, m proto.Message) error { + return jsonpb.Unmarshal(bytes.NewReader(in), m) + }, + expected: `{"traceId":"AAAAAAAAAAIAAAAAAAAAAw==","spanId":"AAAAAAAAAAs="}`, + }, + } + for _, testCase := range testCases { + t.Run(testCase.name, func(t *testing.T) { + o1 := issue411.Span{TraceID: issue411.NewTraceID(2, 3), SpanID: issue411.NewSpanID(11)} + d1, err := testCase.marshal(&o1) + if err != nil { + t.Fatalf("marshal error: %v", err) + } + // test unmarshal + var o2 issue411.Span + err = testCase.unmarshal(d1, &o2) + if err != nil { + t.Fatalf("umarshal error: %v", err) + } + if o1.TraceID != o2.TraceID { + t.Fatalf("TraceID: expected %v but got %v", o1, o2) + } + if o1.SpanID != o2.SpanID { + t.Fatalf("SpanID: expected %v but got %v", o1, o2) + } + }) + } +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/issue411.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/issue411.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/issue411.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/issue411.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,72 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: issue411.proto + +package issue411 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +type Span struct { + TraceID TraceID `protobuf:"bytes,1,opt,name=trace_id,json=traceId,proto3,customtype=TraceID" json:"trace_id"` + SpanID SpanID `protobuf:"bytes,2,opt,name=span_id,json=spanId,proto3,customtype=SpanID" json:"span_id"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Span) Reset() { *m = Span{} } +func (m *Span) String() string { return proto.CompactTextString(m) } +func (*Span) ProtoMessage() {} +func (*Span) Descriptor() ([]byte, []int) { + return fileDescriptor_issue411_3de9ea40a93d370b, []int{0} +} +func (m *Span) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Span.Unmarshal(m, b) +} +func (m *Span) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Span.Marshal(b, m, deterministic) +} +func (dst *Span) XXX_Merge(src proto.Message) { + xxx_messageInfo_Span.Merge(dst, src) +} +func (m *Span) XXX_Size() int { + return xxx_messageInfo_Span.Size(m) +} +func (m *Span) XXX_DiscardUnknown() { + xxx_messageInfo_Span.DiscardUnknown(m) +} + +var xxx_messageInfo_Span proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Span)(nil), "issue411.Span") +} + +func init() { proto.RegisterFile("issue411.proto", fileDescriptor_issue411_3de9ea40a93d370b) } + +var fileDescriptor_issue411_3de9ea40a93d370b = []byte{ + // 158 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xcb, 0x2c, 0x2e, 0x2e, + 0x4d, 0x35, 0x31, 0x34, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x80, 0xf1, 0xa5, 0x74, + 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xd3, 0xf3, 0xd3, 0xf3, 0xf5, + 0xc1, 0x0a, 0x92, 0x4a, 0xd3, 0xc0, 0x3c, 0x30, 0x07, 0xcc, 0x82, 0x68, 0x54, 0x2a, 0xe0, 0x62, + 0x09, 0x2e, 0x48, 0xcc, 0x13, 0x32, 0xe5, 0xe2, 0x28, 0x29, 0x4a, 0x4c, 0x4e, 0x8d, 0xcf, 0x4c, + 0x91, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x71, 0x92, 0x3a, 0x71, 0x4f, 0x9e, 0xe1, 0xd6, 0x3d, 0x79, + 0xf6, 0x10, 0x90, 0xb8, 0xa7, 0xcb, 0x23, 0x04, 0x33, 0x88, 0x1d, 0xac, 0xd6, 0x33, 0x45, 0xc8, + 0x90, 0x8b, 0xbd, 0xb8, 0x20, 0x31, 0x0f, 0xa4, 0x8b, 0x09, 0xac, 0x4b, 0x02, 0xaa, 0x8b, 0x0d, + 0x64, 0x2a, 0x58, 0x13, 0x94, 0x15, 0xc4, 0x06, 0x52, 0xe8, 0x99, 0x92, 0xc4, 0x06, 0xb6, 0xd8, + 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xd9, 0x68, 0x60, 0x2b, 0xc3, 0x00, 0x00, 0x00, +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/issue411.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/issue411.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/issue411.proto 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/issue411.proto 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,49 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/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. +// * 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. + +syntax = "proto3"; + +package issue411; + +import "github.com/gogo/protobuf/gogoproto/gogo.proto"; + +message Span { + bytes trace_id = 1 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "TraceID", + (gogoproto.customname) = "TraceID" + ]; + bytes span_id = 2 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "SpanID", + (gogoproto.customname) = "SpanID" + ]; +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue411/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue411/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,3 @@ +regenerate: + go install github.com/gogo/protobuf/protoc-gen-gogo + protoc-min-version --version="3.0.0" --gogo_out=Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types:. --proto_path=../../../../../:../../protobuf/:. issue411.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue42order/issue42.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue42order/issue42.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue42order/issue42.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue42order/issue42.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -321,6 +321,9 @@ return dAtA } func (m *UnorderedFields) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.B != nil { @@ -336,6 +339,9 @@ } func (m *OrderedFields) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.B != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue438/issue438.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue438/issue438.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue438/issue438.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue438/issue438.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -294,6 +294,9 @@ proto.RegisterType((*Types)(nil), "issue438.Types") } func (m *Types) ProtoSize() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Any != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue444/issue444.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue444/issue444.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue444/issue444.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue444/issue444.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,104 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: issue444.proto + +package issue444 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +type SizeMe struct { + Foo string `protobuf:"bytes,1,opt,name=foo,proto3" json:"foo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SizeMe) Reset() { *m = SizeMe{} } +func (m *SizeMe) String() string { return proto.CompactTextString(m) } +func (*SizeMe) ProtoMessage() {} +func (*SizeMe) Descriptor() ([]byte, []int) { + return fileDescriptor_issue444_3dcd5c81d21eac70, []int{0} +} +func (m *SizeMe) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SizeMe.Unmarshal(m, b) +} +func (m *SizeMe) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SizeMe.Marshal(b, m, deterministic) +} +func (dst *SizeMe) XXX_Merge(src proto.Message) { + xxx_messageInfo_SizeMe.Merge(dst, src) +} +func (m *SizeMe) XXX_Size() int { + return xxx_messageInfo_SizeMe.Size(m) +} +func (m *SizeMe) XXX_DiscardUnknown() { + xxx_messageInfo_SizeMe.DiscardUnknown(m) +} + +var xxx_messageInfo_SizeMe proto.InternalMessageInfo + +func (m *SizeMe) GetFoo() string { + if m != nil { + return m.Foo + } + return "" +} + +func init() { + proto.RegisterType((*SizeMe)(nil), "issue444.SizeMe") +} +func (m *SizeMe) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Foo) + if l > 0 { + n += 1 + l + sovIssue444(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovIssue444(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozIssue444(x uint64) (n int) { + return sovIssue444(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +func init() { proto.RegisterFile("issue444.proto", fileDescriptor_issue444_3dcd5c81d21eac70) } + +var fileDescriptor_issue444_3dcd5c81d21eac70 = []byte{ + // 111 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xcb, 0x2c, 0x2e, 0x2e, + 0x4d, 0x35, 0x31, 0x31, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x80, 0xf1, 0xa5, 0x74, + 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xd3, 0xf3, 0xd3, 0xf3, 0xf5, + 0xc1, 0x0a, 0x92, 0x4a, 0xd3, 0xc0, 0x3c, 0x30, 0x07, 0xcc, 0x82, 0x68, 0x54, 0x92, 0xe2, 0x62, + 0x0b, 0xce, 0xac, 0x4a, 0xf5, 0x4d, 0x15, 0x12, 0xe0, 0x62, 0x4e, 0xcb, 0xcf, 0x97, 0x60, 0x54, + 0x60, 0xd4, 0xe0, 0x0c, 0x02, 0x31, 0x9d, 0x58, 0x1e, 0x3c, 0x92, 0x63, 0x4c, 0x62, 0x03, 0x2b, + 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xe0, 0xfa, 0x18, 0x73, 0x00, 0x00, 0x00, +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue444/issue444.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue444/issue444.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue444/issue444.proto 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue444/issue444.proto 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,39 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2018, 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. + +syntax = "proto3"; + +package issue444; + +import "github.com/gogo/protobuf/gogoproto/gogo.proto"; + +option (gogoproto.sizer_all) = true; + +message SizeMe { + string foo = 1; +} \ No newline at end of file diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue444/issue444_test.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue444/issue444_test.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue444/issue444_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue444/issue444_test.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,41 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2018, 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 issue444 + +import ( + "testing" +) + +func TestNilStructSize(t *testing.T) { + var sm *SizeMe + n := sm.Size() + if n != 0 { + t.Fatalf("expected 0 size with a nil struct") + } +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue444/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue444/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue444/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue444/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,33 @@ +# Protocol Buffers for Go with Gadgets +# +# Copyright (c) 2018, 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. + +regenerate: + go install github.com/gogo/protobuf/protoc-min-version + protoc-min-version --version="3.0.0" --proto_path=\ + .:$(GOPATH)/src/:$(GOPATH)/src/github.com/gogo/protobuf/protobuf/ \ + --gogo_out=. issue444.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue449/issue449.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue449/issue449.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue449/issue449.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue449/issue449.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -307,6 +307,9 @@ return offset + 1 } func (m *CodeGenMsg) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Int64ReqPtr != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue498/issue498.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue498/issue498.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue498/issue498.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue498/issue498.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,614 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: issue498.proto + +package issue449 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +import bytes "bytes" + +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +type Message struct { + Uint8 *uint8 `protobuf:"varint,1,req,name=uint8,casttype=uint8" json:"uint8,omitempty"` + Uint16 *uint16 `protobuf:"varint,2,req,name=uint16,casttype=uint16" json:"uint16,omitempty"` + Int8 *int8 `protobuf:"varint,3,req,name=int8,casttype=int8" json:"int8,omitempty"` + Int16 *int16 `protobuf:"varint,4,req,name=int16,casttype=int16" json:"int16,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Message) Reset() { *m = Message{} } +func (m *Message) String() string { return proto.CompactTextString(m) } +func (*Message) ProtoMessage() {} +func (*Message) Descriptor() ([]byte, []int) { + return fileDescriptor_issue498_7fda9e1d424f3446, []int{0} +} +func (m *Message) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Message.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *Message) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message.Merge(dst, src) +} +func (m *Message) XXX_Size() int { + return m.Size() +} +func (m *Message) XXX_DiscardUnknown() { + xxx_messageInfo_Message.DiscardUnknown(m) +} + +var xxx_messageInfo_Message proto.InternalMessageInfo + +func (m *Message) GetUint8() uint8 { + if m != nil && m.Uint8 != nil { + return *m.Uint8 + } + return 0 +} + +func (m *Message) GetUint16() uint16 { + if m != nil && m.Uint16 != nil { + return *m.Uint16 + } + return 0 +} + +func (m *Message) GetInt8() int8 { + if m != nil && m.Int8 != nil { + return *m.Int8 + } + return 0 +} + +func (m *Message) GetInt16() int16 { + if m != nil && m.Int16 != nil { + return *m.Int16 + } + return 0 +} + +func init() { + proto.RegisterType((*Message)(nil), "issue449.Message") +} +func (this *Message) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Message) + if !ok { + that2, ok := that.(Message) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Uint8 != nil && that1.Uint8 != nil { + if *this.Uint8 != *that1.Uint8 { + return false + } + } else if this.Uint8 != nil { + return false + } else if that1.Uint8 != nil { + return false + } + if this.Uint16 != nil && that1.Uint16 != nil { + if *this.Uint16 != *that1.Uint16 { + return false + } + } else if this.Uint16 != nil { + return false + } else if that1.Uint16 != nil { + return false + } + if this.Int8 != nil && that1.Int8 != nil { + if *this.Int8 != *that1.Int8 { + return false + } + } else if this.Int8 != nil { + return false + } else if that1.Int8 != nil { + return false + } + if this.Int16 != nil && that1.Int16 != nil { + if *this.Int16 != *that1.Int16 { + return false + } + } else if this.Int16 != nil { + return false + } else if that1.Int16 != nil { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (m *Message) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Message) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Uint8 == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("uint8") + } else { + dAtA[i] = 0x8 + i++ + i = encodeVarintIssue498(dAtA, i, uint64(*m.Uint8)) + } + if m.Uint16 == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("uint16") + } else { + dAtA[i] = 0x10 + i++ + i = encodeVarintIssue498(dAtA, i, uint64(*m.Uint16)) + } + if m.Int8 == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("int8") + } else { + dAtA[i] = 0x18 + i++ + i = encodeVarintIssue498(dAtA, i, uint64(*m.Int8)) + } + if m.Int16 == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("int16") + } else { + dAtA[i] = 0x20 + i++ + i = encodeVarintIssue498(dAtA, i, uint64(*m.Int16)) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeVarintIssue498(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func NewPopulatedMessage(r randyIssue498, easy bool) *Message { + this := &Message{} + v1 := uint8(r.Uint32()) + this.Uint8 = &v1 + v2 := uint16(r.Uint32()) + this.Uint16 = &v2 + v3 := int8(r.Uint32()) + this.Int8 = &v3 + v4 := int16(r.Uint32()) + this.Int16 = &v4 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedIssue498(r, 5) + } + return this +} + +type randyIssue498 interface { + Float32() float32 + Float64() float64 + Int63() int64 + Int31() int32 + Uint32() uint32 + Intn(n int) int +} + +func randUTF8RuneIssue498(r randyIssue498) rune { + ru := r.Intn(62) + if ru < 10 { + return rune(ru + 48) + } else if ru < 36 { + return rune(ru + 55) + } + return rune(ru + 61) +} +func randStringIssue498(r randyIssue498) string { + v5 := r.Intn(100) + tmps := make([]rune, v5) + for i := 0; i < v5; i++ { + tmps[i] = randUTF8RuneIssue498(r) + } + return string(tmps) +} +func randUnrecognizedIssue498(r randyIssue498, maxFieldNumber int) (dAtA []byte) { + l := r.Intn(5) + for i := 0; i < l; i++ { + wire := r.Intn(4) + if wire == 3 { + wire = 5 + } + fieldNumber := maxFieldNumber + r.Intn(100) + dAtA = randFieldIssue498(dAtA, r, fieldNumber, wire) + } + return dAtA +} +func randFieldIssue498(dAtA []byte, r randyIssue498, fieldNumber int, wire int) []byte { + key := uint32(fieldNumber)<<3 | uint32(wire) + switch wire { + case 0: + dAtA = encodeVarintPopulateIssue498(dAtA, uint64(key)) + v6 := r.Int63() + if r.Intn(2) == 0 { + v6 *= -1 + } + dAtA = encodeVarintPopulateIssue498(dAtA, uint64(v6)) + case 1: + dAtA = encodeVarintPopulateIssue498(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + case 2: + dAtA = encodeVarintPopulateIssue498(dAtA, uint64(key)) + ll := r.Intn(100) + dAtA = encodeVarintPopulateIssue498(dAtA, uint64(ll)) + for j := 0; j < ll; j++ { + dAtA = append(dAtA, byte(r.Intn(256))) + } + default: + dAtA = encodeVarintPopulateIssue498(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + } + return dAtA +} +func encodeVarintPopulateIssue498(dAtA []byte, v uint64) []byte { + for v >= 1<<7 { + dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) + v >>= 7 + } + dAtA = append(dAtA, uint8(v)) + return dAtA +} +func (m *Message) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Uint8 != nil { + n += 1 + sovIssue498(uint64(*m.Uint8)) + } + if m.Uint16 != nil { + n += 1 + sovIssue498(uint64(*m.Uint16)) + } + if m.Int8 != nil { + n += 1 + sovIssue498(uint64(*m.Int8)) + } + if m.Int16 != nil { + n += 1 + sovIssue498(uint64(*m.Int16)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovIssue498(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozIssue498(x uint64) (n int) { + return sovIssue498(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Message) Unmarshal(dAtA []byte) error { + var hasFields [1]uint64 + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIssue498 + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Message: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Message: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Uint8", wireType) + } + var v uint8 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIssue498 + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (uint8(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Uint8 = &v + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Uint16", wireType) + } + var v uint16 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIssue498 + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (uint16(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Uint16 = &v + hasFields[0] |= uint64(0x00000002) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Int8", wireType) + } + var v int8 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIssue498 + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int8(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Int8 = &v + hasFields[0] |= uint64(0x00000004) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Int16", wireType) + } + var v int16 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIssue498 + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int16(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Int16 = &v + hasFields[0] |= uint64(0x00000008) + default: + iNdEx = preIndex + skippy, err := skipIssue498(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthIssue498 + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("uint8") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("uint16") + } + if hasFields[0]&uint64(0x00000004) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("int8") + } + if hasFields[0]&uint64(0x00000008) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("int16") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipIssue498(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIssue498 + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIssue498 + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIssue498 + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthIssue498 + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIssue498 + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipIssue498(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthIssue498 = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowIssue498 = fmt.Errorf("proto: integer overflow") +) + +func init() { proto.RegisterFile("issue498.proto", fileDescriptor_issue498_7fda9e1d424f3446) } + +var fileDescriptor_issue498_7fda9e1d424f3446 = []byte{ + // 190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xcb, 0x2c, 0x2e, 0x2e, + 0x4d, 0x35, 0xb1, 0xb4, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x80, 0xf0, 0x4d, 0x2c, + 0xa5, 0x74, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xd3, 0xf3, 0xd3, + 0xf3, 0xf5, 0xc1, 0x0a, 0x92, 0x4a, 0xd3, 0xc0, 0x3c, 0x30, 0x07, 0xcc, 0x82, 0x68, 0x54, 0xea, + 0x65, 0xe4, 0x62, 0xf7, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, 0x15, 0x92, 0xe7, 0x62, 0x2d, 0xcd, + 0xcc, 0x2b, 0xb1, 0x90, 0x60, 0x54, 0x60, 0xd2, 0xe0, 0x75, 0xe2, 0xfc, 0x75, 0x4f, 0x1e, 0x22, + 0x10, 0x04, 0xa1, 0x84, 0x94, 0xb8, 0xd8, 0x40, 0x0c, 0x43, 0x33, 0x09, 0x26, 0xb0, 0x0a, 0xae, + 0x5f, 0xf7, 0xe4, 0xa1, 0x22, 0x41, 0x50, 0x5a, 0x48, 0x86, 0x8b, 0x05, 0x6c, 0x06, 0x33, 0x58, + 0x05, 0xc7, 0xaf, 0x7b, 0xf2, 0x60, 0x7e, 0x10, 0x98, 0x04, 0x59, 0x01, 0x31, 0x80, 0x05, 0x61, + 0x05, 0x44, 0x3f, 0x84, 0x72, 0x92, 0xf8, 0xf1, 0x50, 0x8e, 0x71, 0xc5, 0x23, 0x39, 0xc6, 0x1d, + 0x8f, 0xe4, 0x18, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0x46, + 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x95, 0x2c, 0xad, 0xb7, 0xf3, 0x00, 0x00, 0x00, +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue498/issue498pb_test.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue498/issue498pb_test.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue498/issue498pb_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue498/issue498pb_test.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,145 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: issue498.proto + +package issue449 + +import testing "testing" +import math_rand "math/rand" +import time "time" +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" +import github_com_gogo_protobuf_jsonpb "github.com/gogo/protobuf/jsonpb" +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +func TestMessageProto(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedMessage(popr, false) + dAtA, err := github_com_gogo_protobuf_proto.Marshal(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &Message{} + if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + littlefuzz := make([]byte, len(dAtA)) + copy(littlefuzz, dAtA) + for i := range dAtA { + dAtA[i] = byte(popr.Intn(256)) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } + if len(littlefuzz) > 0 { + fuzzamount := 100 + for i := 0; i < fuzzamount; i++ { + littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256)) + littlefuzz = append(littlefuzz, byte(popr.Intn(256))) + } + // shouldn't panic + _ = github_com_gogo_protobuf_proto.Unmarshal(littlefuzz, msg) + } +} + +func TestMessageMarshalTo(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedMessage(popr, false) + size := p.Size() + dAtA := make([]byte, size) + for i := range dAtA { + dAtA[i] = byte(popr.Intn(256)) + } + _, err := p.MarshalTo(dAtA) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &Message{} + if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + for i := range dAtA { + dAtA[i] = byte(popr.Intn(256)) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestMessageJSON(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedMessage(popr, true) + marshaler := github_com_gogo_protobuf_jsonpb.Marshaler{} + jsondata, err := marshaler.MarshalToString(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &Message{} + err = github_com_gogo_protobuf_jsonpb.UnmarshalString(jsondata, msg) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Json Equal %#v", seed, msg, p) + } +} +func TestMessageProtoText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedMessage(popr, true) + dAtA := github_com_gogo_protobuf_proto.MarshalTextString(p) + msg := &Message{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestMessageProtoCompactText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedMessage(popr, true) + dAtA := github_com_gogo_protobuf_proto.CompactTextString(p) + msg := &Message{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestMessageSize(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedMessage(popr, true) + size2 := github_com_gogo_protobuf_proto.Size(p) + dAtA, err := github_com_gogo_protobuf_proto.Marshal(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + size := p.Size() + if len(dAtA) != size { + t.Errorf("seed = %d, size %v != marshalled size %v", seed, size, len(dAtA)) + } + if size2 != size { + t.Errorf("seed = %d, size %v != before marshal proto.Size %v", seed, size, size2) + } + size3 := github_com_gogo_protobuf_proto.Size(p) + if size3 != size { + t.Errorf("seed = %d, size %v != after marshal proto.Size %v", seed, size, size3) + } +} + +//These tests are generated by github.com/gogo/protobuf/plugin/testgen diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue498/issue498.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue498/issue498.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue498/issue498.proto 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue498/issue498.proto 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,43 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2018, 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. + +syntax = "proto2"; + +package issue449; + +import "github.com/gogo/protobuf/gogoproto/gogo.proto"; + +option (gogoproto.equal_all) = true; +option (gogoproto.populate_all) = true; +option (gogoproto.testgen_all) = true; +message Message { + required uint32 uint8 = 1 [(gogoproto.casttype) = "uint8"]; + required uint32 uint16 = 2 [(gogoproto.casttype) = "uint16"]; + required uint32 int8 = 3 [(gogoproto.casttype) = "int8"]; + required uint32 int16 = 4 [(gogoproto.casttype) = "int16"]; +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue498/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue498/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/issue498/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/issue498/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,33 @@ +# Protocol Buffers for Go with Gadgets +# +# Copyright (c) 2018, 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. + +regenerate: + go install github.com/gogo/protobuf/protoc-min-version + protoc-min-version --version="3.0.0" --proto_path=\ + .:$(GOPATH)/src/:$(GOPATH)/src/github.com/gogo/protobuf/protobuf/ \ + --gogofast_out=. issue498.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -29,8 +29,8 @@ regenerate: go install github.com/gogo/protobuf/protoc-gen-gogo go install github.com/gogo/protobuf/protoc-gen-combo - protoc --gogo_out=. --proto_path=../:../../../../:../protobuf/:. thetest.proto - protoc-gen-combo --default=false --gogo_out=. --proto_path=../:../../../../:../protobuf/:. thetest.proto + protoc --gogo_out=. --proto_path=../protobuf/:../:../../../../:. thetest.proto + protoc-gen-combo --default=false --gogo_out=. --proto_path=../protobuf/:../:../../../../:. thetest.proto cp uuid.go ./combos/both/ cp uuid.go ./combos/marshaler/ cp uuid.go ./combos/unmarshaler/ diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/both/map.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/both/map.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/both/map.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/both/map.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -168,251 +168,256 @@ func MapDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3896 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x6c, 0x23, 0xd7, - 0x75, 0xd6, 0xf0, 0x47, 0x22, 0x0f, 0x29, 0x6a, 0x34, 0xd2, 0xee, 0x72, 0xe5, 0x98, 0xab, 0xa5, - 0xed, 0x58, 0xb6, 0x1b, 0x2a, 0xd8, 0xf5, 0xae, 0x77, 0xb9, 0x8d, 0x5d, 0x8a, 0xe2, 0x2a, 0x74, - 0x25, 0x91, 0x19, 0x4a, 0xf1, 0x4f, 0x50, 0x0c, 0x46, 0xc3, 0x4b, 0x72, 0x76, 0x87, 0x33, 0x93, - 0x99, 0xe1, 0xae, 0xb5, 0x28, 0xd0, 0x2d, 0xdc, 0x1f, 0x04, 0x45, 0xff, 0x0b, 0x34, 0x71, 0x1d, - 0xb7, 0x29, 0x90, 0x3a, 0x4d, 0xff, 0x9c, 0xa6, 0x4d, 0x93, 0x3e, 0xf5, 0x25, 0xad, 0x9f, 0x8a, - 0xe4, 0xad, 0x0f, 0x7d, 0xf0, 0x2a, 0x06, 0x9a, 0xb6, 0x6e, 0xe3, 0xb6, 0x7e, 0x30, 0xe0, 0x97, - 0xe2, 0xfe, 0x0d, 0x67, 0x48, 0x6a, 0x87, 0x0a, 0x60, 0xe7, 0x49, 0x9a, 0x73, 0xcf, 0xf7, 0xcd, - 0xb9, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0x77, 0x08, 0x3f, 0xba, 0x0a, 0xab, 0x5d, 0xcb, 0xea, 0x1a, - 0x68, 0xdd, 0x76, 0x2c, 0xcf, 0x3a, 0x18, 0x74, 0xd6, 0xdb, 0xc8, 0xd5, 0x1c, 0xdd, 0xf6, 0x2c, - 0xa7, 0x44, 0x64, 0xd2, 0x02, 0xd5, 0x28, 0x71, 0x8d, 0xe2, 0x0e, 0x2c, 0x5e, 0xd7, 0x0d, 0xb4, - 0xe9, 0x2b, 0xb6, 0x90, 0x27, 0x5d, 0x81, 0x44, 0x47, 0x37, 0x50, 0x5e, 0x58, 0x8d, 0xaf, 0x65, - 0x2e, 0x3c, 0x5c, 0x1a, 0x01, 0x95, 0xc2, 0x88, 0x26, 0x16, 0xcb, 0x04, 0x51, 0x7c, 0x3b, 0x01, - 0x4b, 0x13, 0x46, 0x25, 0x09, 0x12, 0xa6, 0xda, 0xc7, 0x8c, 0xc2, 0x5a, 0x5a, 0x26, 0xff, 0x4b, - 0x79, 0x98, 0xb3, 0x55, 0xed, 0xa6, 0xda, 0x45, 0xf9, 0x18, 0x11, 0xf3, 0x47, 0xa9, 0x00, 0xd0, - 0x46, 0x36, 0x32, 0xdb, 0xc8, 0xd4, 0x0e, 0xf3, 0xf1, 0xd5, 0xf8, 0x5a, 0x5a, 0x0e, 0x48, 0xa4, - 0x27, 0x60, 0xd1, 0x1e, 0x1c, 0x18, 0xba, 0xa6, 0x04, 0xd4, 0x60, 0x35, 0xbe, 0x96, 0x94, 0x45, - 0x3a, 0xb0, 0x39, 0x54, 0x7e, 0x14, 0x16, 0x6e, 0x23, 0xf5, 0x66, 0x50, 0x35, 0x43, 0x54, 0x73, - 0x58, 0x1c, 0x50, 0xac, 0x42, 0xb6, 0x8f, 0x5c, 0x57, 0xed, 0x22, 0xc5, 0x3b, 0xb4, 0x51, 0x3e, - 0x41, 0x66, 0xbf, 0x3a, 0x36, 0xfb, 0xd1, 0x99, 0x67, 0x18, 0x6a, 0xef, 0xd0, 0x46, 0x52, 0x05, - 0xd2, 0xc8, 0x1c, 0xf4, 0x29, 0x43, 0xf2, 0x18, 0xff, 0xd5, 0xcc, 0x41, 0x7f, 0x94, 0x25, 0x85, - 0x61, 0x8c, 0x62, 0xce, 0x45, 0xce, 0x2d, 0x5d, 0x43, 0xf9, 0x59, 0x42, 0xf0, 0xe8, 0x18, 0x41, - 0x8b, 0x8e, 0x8f, 0x72, 0x70, 0x9c, 0x54, 0x85, 0x34, 0x7a, 0xc9, 0x43, 0xa6, 0xab, 0x5b, 0x66, - 0x7e, 0x8e, 0x90, 0x3c, 0x32, 0x61, 0x15, 0x91, 0xd1, 0x1e, 0xa5, 0x18, 0xe2, 0xa4, 0xcb, 0x30, - 0x67, 0xd9, 0x9e, 0x6e, 0x99, 0x6e, 0x3e, 0xb5, 0x2a, 0xac, 0x65, 0x2e, 0x7c, 0x6c, 0x62, 0x20, - 0x34, 0xa8, 0x8e, 0xcc, 0x95, 0xa5, 0x3a, 0x88, 0xae, 0x35, 0x70, 0x34, 0xa4, 0x68, 0x56, 0x1b, - 0x29, 0xba, 0xd9, 0xb1, 0xf2, 0x69, 0x42, 0x70, 0x6e, 0x7c, 0x22, 0x44, 0xb1, 0x6a, 0xb5, 0x51, - 0xdd, 0xec, 0x58, 0x72, 0xce, 0x0d, 0x3d, 0x4b, 0xa7, 0x61, 0xd6, 0x3d, 0x34, 0x3d, 0xf5, 0xa5, - 0x7c, 0x96, 0x44, 0x08, 0x7b, 0x2a, 0x7e, 0x67, 0x16, 0x16, 0xa6, 0x09, 0xb1, 0x6b, 0x90, 0xec, - 0xe0, 0x59, 0xe6, 0x63, 0x27, 0xf1, 0x01, 0xc5, 0x84, 0x9d, 0x38, 0xfb, 0x63, 0x3a, 0xb1, 0x02, - 0x19, 0x13, 0xb9, 0x1e, 0x6a, 0xd3, 0x88, 0x88, 0x4f, 0x19, 0x53, 0x40, 0x41, 0xe3, 0x21, 0x95, - 0xf8, 0xb1, 0x42, 0xea, 0x79, 0x58, 0xf0, 0x4d, 0x52, 0x1c, 0xd5, 0xec, 0xf2, 0xd8, 0x5c, 0x8f, - 0xb2, 0xa4, 0x54, 0xe3, 0x38, 0x19, 0xc3, 0xe4, 0x1c, 0x0a, 0x3d, 0x4b, 0x9b, 0x00, 0x96, 0x89, - 0xac, 0x8e, 0xd2, 0x46, 0x9a, 0x91, 0x4f, 0x1d, 0xe3, 0xa5, 0x06, 0x56, 0x19, 0xf3, 0x92, 0x45, - 0xa5, 0x9a, 0x21, 0x5d, 0x1d, 0x86, 0xda, 0xdc, 0x31, 0x91, 0xb2, 0x43, 0x37, 0xd9, 0x58, 0xb4, - 0xed, 0x43, 0xce, 0x41, 0x38, 0xee, 0x51, 0x9b, 0xcd, 0x2c, 0x4d, 0x8c, 0x28, 0x45, 0xce, 0x4c, - 0x66, 0x30, 0x3a, 0xb1, 0x79, 0x27, 0xf8, 0x28, 0x3d, 0x04, 0xbe, 0x40, 0x21, 0x61, 0x05, 0x24, - 0x0b, 0x65, 0xb9, 0x70, 0x57, 0xed, 0xa3, 0x95, 0x3b, 0x90, 0x0b, 0xbb, 0x47, 0x5a, 0x86, 0xa4, - 0xeb, 0xa9, 0x8e, 0x47, 0xa2, 0x30, 0x29, 0xd3, 0x07, 0x49, 0x84, 0x38, 0x32, 0xdb, 0x24, 0xcb, - 0x25, 0x65, 0xfc, 0xaf, 0xf4, 0x33, 0xc3, 0x09, 0xc7, 0xc9, 0x84, 0x3f, 0x3e, 0xbe, 0xa2, 0x21, - 0xe6, 0xd1, 0x79, 0xaf, 0x3c, 0x05, 0xf3, 0xa1, 0x09, 0x4c, 0xfb, 0xea, 0xe2, 0xcf, 0xc3, 0xa9, - 0x89, 0xd4, 0xd2, 0xf3, 0xb0, 0x3c, 0x30, 0x75, 0xd3, 0x43, 0x8e, 0xed, 0x20, 0x1c, 0xb1, 0xf4, - 0x55, 0xf9, 0x7f, 0x9b, 0x3b, 0x26, 0xe6, 0xf6, 0x83, 0xda, 0x94, 0x45, 0x5e, 0x1a, 0x8c, 0x0b, - 0x1f, 0x4f, 0xa7, 0x7e, 0x38, 0x27, 0xde, 0xbd, 0x7b, 0xf7, 0x6e, 0xac, 0xf8, 0xc5, 0x59, 0x58, - 0x9e, 0xb4, 0x67, 0x26, 0x6e, 0xdf, 0xd3, 0x30, 0x6b, 0x0e, 0xfa, 0x07, 0xc8, 0x21, 0x4e, 0x4a, - 0xca, 0xec, 0x49, 0xaa, 0x40, 0xd2, 0x50, 0x0f, 0x90, 0x91, 0x4f, 0xac, 0x0a, 0x6b, 0xb9, 0x0b, - 0x4f, 0x4c, 0xb5, 0x2b, 0x4b, 0xdb, 0x18, 0x22, 0x53, 0xa4, 0xf4, 0x34, 0x24, 0x58, 0x8a, 0xc6, - 0x0c, 0x8f, 0x4f, 0xc7, 0x80, 0xf7, 0x92, 0x4c, 0x70, 0xd2, 0x03, 0x90, 0xc6, 0x7f, 0x69, 0x6c, - 0xcc, 0x12, 0x9b, 0x53, 0x58, 0x80, 0xe3, 0x42, 0x5a, 0x81, 0x14, 0xd9, 0x26, 0x6d, 0xc4, 0x4b, - 0x9b, 0xff, 0x8c, 0x03, 0xab, 0x8d, 0x3a, 0xea, 0xc0, 0xf0, 0x94, 0x5b, 0xaa, 0x31, 0x40, 0x24, - 0xe0, 0xd3, 0x72, 0x96, 0x09, 0x3f, 0x8b, 0x65, 0xd2, 0x39, 0xc8, 0xd0, 0x5d, 0xa5, 0x9b, 0x6d, - 0xf4, 0x12, 0xc9, 0x9e, 0x49, 0x99, 0x6e, 0xb4, 0x3a, 0x96, 0xe0, 0xd7, 0xdf, 0x70, 0x2d, 0x93, - 0x87, 0x26, 0x79, 0x05, 0x16, 0x90, 0xd7, 0x3f, 0x35, 0x9a, 0xb8, 0x1f, 0x9c, 0x3c, 0xbd, 0xd1, - 0x98, 0x2a, 0x7e, 0x2b, 0x06, 0x09, 0x92, 0x2f, 0x16, 0x20, 0xb3, 0xf7, 0x42, 0xb3, 0xa6, 0x6c, - 0x36, 0xf6, 0x37, 0xb6, 0x6b, 0xa2, 0x20, 0xe5, 0x00, 0x88, 0xe0, 0xfa, 0x76, 0xa3, 0xb2, 0x27, - 0xc6, 0xfc, 0xe7, 0xfa, 0xee, 0xde, 0xe5, 0x27, 0xc5, 0xb8, 0x0f, 0xd8, 0xa7, 0x82, 0x44, 0x50, - 0xe1, 0xe2, 0x05, 0x31, 0x29, 0x89, 0x90, 0xa5, 0x04, 0xf5, 0xe7, 0x6b, 0x9b, 0x97, 0x9f, 0x14, - 0x67, 0xc3, 0x92, 0x8b, 0x17, 0xc4, 0x39, 0x69, 0x1e, 0xd2, 0x44, 0xb2, 0xd1, 0x68, 0x6c, 0x8b, - 0x29, 0x9f, 0xb3, 0xb5, 0x27, 0xd7, 0x77, 0xb7, 0xc4, 0xb4, 0xcf, 0xb9, 0x25, 0x37, 0xf6, 0x9b, - 0x22, 0xf8, 0x0c, 0x3b, 0xb5, 0x56, 0xab, 0xb2, 0x55, 0x13, 0x33, 0xbe, 0xc6, 0xc6, 0x0b, 0x7b, - 0xb5, 0x96, 0x98, 0x0d, 0x99, 0x75, 0xf1, 0x82, 0x38, 0xef, 0xbf, 0xa2, 0xb6, 0xbb, 0xbf, 0x23, - 0xe6, 0xa4, 0x45, 0x98, 0xa7, 0xaf, 0xe0, 0x46, 0x2c, 0x8c, 0x88, 0x2e, 0x3f, 0x29, 0x8a, 0x43, - 0x43, 0x28, 0xcb, 0x62, 0x48, 0x70, 0xf9, 0x49, 0x51, 0x2a, 0x56, 0x21, 0x49, 0xa2, 0x4b, 0x92, - 0x20, 0xb7, 0x5d, 0xd9, 0xa8, 0x6d, 0x2b, 0x8d, 0xe6, 0x5e, 0xbd, 0xb1, 0x5b, 0xd9, 0x16, 0x85, - 0xa1, 0x4c, 0xae, 0x7d, 0x66, 0xbf, 0x2e, 0xd7, 0x36, 0xc5, 0x58, 0x50, 0xd6, 0xac, 0x55, 0xf6, - 0x6a, 0x9b, 0x62, 0xbc, 0xa8, 0xc1, 0xf2, 0xa4, 0x3c, 0x39, 0x71, 0x67, 0x04, 0x96, 0x38, 0x76, - 0xcc, 0x12, 0x13, 0xae, 0xb1, 0x25, 0xfe, 0x41, 0x0c, 0x96, 0x26, 0xd4, 0x8a, 0x89, 0x2f, 0x79, - 0x06, 0x92, 0x34, 0x44, 0x69, 0xf5, 0x7c, 0x6c, 0x62, 0xd1, 0x21, 0x01, 0x3b, 0x56, 0x41, 0x09, - 0x2e, 0xd8, 0x41, 0xc4, 0x8f, 0xe9, 0x20, 0x30, 0xc5, 0x58, 0x4e, 0xff, 0xb9, 0xb1, 0x9c, 0x4e, - 0xcb, 0xde, 0xe5, 0x69, 0xca, 0x1e, 0x91, 0x9d, 0x2c, 0xb7, 0x27, 0x27, 0xe4, 0xf6, 0x6b, 0xb0, - 0x38, 0x46, 0x34, 0x75, 0x8e, 0x7d, 0x59, 0x80, 0xfc, 0x71, 0xce, 0x89, 0xc8, 0x74, 0xb1, 0x50, - 0xa6, 0xbb, 0x36, 0xea, 0xc1, 0xf3, 0xc7, 0x2f, 0xc2, 0xd8, 0x5a, 0xbf, 0x2e, 0xc0, 0xe9, 0xc9, - 0x9d, 0xe2, 0x44, 0x1b, 0x9e, 0x86, 0xd9, 0x3e, 0xf2, 0x7a, 0x16, 0xef, 0x96, 0x3e, 0x3e, 0xa1, - 0x06, 0xe3, 0xe1, 0xd1, 0xc5, 0x66, 0xa8, 0x60, 0x11, 0x8f, 0x1f, 0xd7, 0xee, 0x51, 0x6b, 0xc6, - 0x2c, 0xfd, 0x42, 0x0c, 0x4e, 0x4d, 0x24, 0x9f, 0x68, 0xe8, 0x83, 0x00, 0xba, 0x69, 0x0f, 0x3c, - 0xda, 0x11, 0xd1, 0x04, 0x9b, 0x26, 0x12, 0x92, 0xbc, 0x70, 0xf2, 0x1c, 0x78, 0xfe, 0x78, 0x9c, - 0x8c, 0x03, 0x15, 0x11, 0x85, 0x2b, 0x43, 0x43, 0x13, 0xc4, 0xd0, 0xc2, 0x31, 0x33, 0x1d, 0x0b, - 0xcc, 0x4f, 0x82, 0xa8, 0x19, 0x3a, 0x32, 0x3d, 0xc5, 0xf5, 0x1c, 0xa4, 0xf6, 0x75, 0xb3, 0x4b, - 0x2a, 0x48, 0xaa, 0x9c, 0xec, 0xa8, 0x86, 0x8b, 0xe4, 0x05, 0x3a, 0xdc, 0xe2, 0xa3, 0x18, 0x41, - 0x02, 0xc8, 0x09, 0x20, 0x66, 0x43, 0x08, 0x3a, 0xec, 0x23, 0x8a, 0xdf, 0x4c, 0x41, 0x26, 0xd0, - 0x57, 0x4b, 0xe7, 0x21, 0x7b, 0x43, 0xbd, 0xa5, 0x2a, 0xfc, 0xac, 0x44, 0x3d, 0x91, 0xc1, 0xb2, - 0x26, 0x3b, 0x2f, 0x7d, 0x12, 0x96, 0x89, 0x8a, 0x35, 0xf0, 0x90, 0xa3, 0x68, 0x86, 0xea, 0xba, - 0xc4, 0x69, 0x29, 0xa2, 0x2a, 0xe1, 0xb1, 0x06, 0x1e, 0xaa, 0xf2, 0x11, 0xe9, 0x12, 0x2c, 0x11, - 0x44, 0x7f, 0x60, 0x78, 0xba, 0x6d, 0x20, 0x05, 0x9f, 0xde, 0x5c, 0x52, 0x49, 0x7c, 0xcb, 0x16, - 0xb1, 0xc6, 0x0e, 0x53, 0xc0, 0x16, 0xb9, 0xd2, 0x26, 0x3c, 0x48, 0x60, 0x5d, 0x64, 0x22, 0x47, - 0xf5, 0x90, 0x82, 0x3e, 0x3f, 0x50, 0x0d, 0x57, 0x51, 0xcd, 0xb6, 0xd2, 0x53, 0xdd, 0x5e, 0x7e, - 0x19, 0x13, 0x6c, 0xc4, 0xf2, 0x82, 0x7c, 0x16, 0x2b, 0x6e, 0x31, 0xbd, 0x1a, 0x51, 0xab, 0x98, - 0xed, 0x4f, 0xab, 0x6e, 0x4f, 0x2a, 0xc3, 0x69, 0xc2, 0xe2, 0x7a, 0x8e, 0x6e, 0x76, 0x15, 0xad, - 0x87, 0xb4, 0x9b, 0xca, 0xc0, 0xeb, 0x5c, 0xc9, 0x3f, 0x10, 0x7c, 0x3f, 0xb1, 0xb0, 0x45, 0x74, - 0xaa, 0x58, 0x65, 0xdf, 0xeb, 0x5c, 0x91, 0x5a, 0x90, 0xc5, 0x8b, 0xd1, 0xd7, 0xef, 0x20, 0xa5, - 0x63, 0x39, 0xa4, 0x34, 0xe6, 0x26, 0xa4, 0xa6, 0x80, 0x07, 0x4b, 0x0d, 0x06, 0xd8, 0xb1, 0xda, - 0xa8, 0x9c, 0x6c, 0x35, 0x6b, 0xb5, 0x4d, 0x39, 0xc3, 0x59, 0xae, 0x5b, 0x0e, 0x0e, 0xa8, 0xae, - 0xe5, 0x3b, 0x38, 0x43, 0x03, 0xaa, 0x6b, 0x71, 0xf7, 0x5e, 0x82, 0x25, 0x4d, 0xa3, 0x73, 0xd6, - 0x35, 0x85, 0x9d, 0xb1, 0xdc, 0xbc, 0x18, 0x72, 0x96, 0xa6, 0x6d, 0x51, 0x05, 0x16, 0xe3, 0xae, - 0x74, 0x15, 0x4e, 0x0d, 0x9d, 0x15, 0x04, 0x2e, 0x8e, 0xcd, 0x72, 0x14, 0x7a, 0x09, 0x96, 0xec, - 0xc3, 0x71, 0xa0, 0x14, 0x7a, 0xa3, 0x7d, 0x38, 0x0a, 0x7b, 0x0a, 0x96, 0xed, 0x9e, 0x3d, 0x8e, - 0x7b, 0x3c, 0x88, 0x93, 0xec, 0x9e, 0x3d, 0x0a, 0x7c, 0x84, 0x1c, 0xb8, 0x1d, 0xa4, 0xa9, 0x1e, - 0x6a, 0xe7, 0xcf, 0x04, 0xd5, 0x03, 0x03, 0xd2, 0x3a, 0x88, 0x9a, 0xa6, 0x20, 0x53, 0x3d, 0x30, - 0x90, 0xa2, 0x3a, 0xc8, 0x54, 0xdd, 0xfc, 0xb9, 0xa0, 0x72, 0x4e, 0xd3, 0x6a, 0x64, 0xb4, 0x42, - 0x06, 0xa5, 0xc7, 0x61, 0xd1, 0x3a, 0xb8, 0xa1, 0xd1, 0x90, 0x54, 0x6c, 0x07, 0x75, 0xf4, 0x97, - 0xf2, 0x0f, 0x13, 0xff, 0x2e, 0xe0, 0x01, 0x12, 0x90, 0x4d, 0x22, 0x96, 0x1e, 0x03, 0x51, 0x73, - 0x7b, 0xaa, 0x63, 0x93, 0x9c, 0xec, 0xda, 0xaa, 0x86, 0xf2, 0x8f, 0x50, 0x55, 0x2a, 0xdf, 0xe5, - 0x62, 0xbc, 0x25, 0xdc, 0xdb, 0x7a, 0xc7, 0xe3, 0x8c, 0x8f, 0xd2, 0x2d, 0x41, 0x64, 0x8c, 0x6d, - 0x0d, 0x44, 0xec, 0x8a, 0xd0, 0x8b, 0xd7, 0x88, 0x5a, 0xce, 0xee, 0xd9, 0xc1, 0xf7, 0x3e, 0x04, - 0xf3, 0x58, 0x73, 0xf8, 0xd2, 0xc7, 0x68, 0x43, 0x66, 0xf7, 0x02, 0x6f, 0xfc, 0xd0, 0x7a, 0xe3, - 0x62, 0x19, 0xb2, 0xc1, 0xf8, 0x94, 0xd2, 0x40, 0x23, 0x54, 0x14, 0x70, 0xb3, 0x52, 0x6d, 0x6c, - 0xe2, 0x36, 0xe3, 0xc5, 0x9a, 0x18, 0xc3, 0xed, 0xce, 0x76, 0x7d, 0xaf, 0xa6, 0xc8, 0xfb, 0xbb, - 0x7b, 0xf5, 0x9d, 0x9a, 0x18, 0x0f, 0xf6, 0xd5, 0xdf, 0x8d, 0x41, 0x2e, 0x7c, 0x44, 0x92, 0x7e, - 0x1a, 0xce, 0xf0, 0xfb, 0x0c, 0x17, 0x79, 0xca, 0x6d, 0xdd, 0x21, 0x5b, 0xa6, 0xaf, 0xd2, 0xf2, - 0xe5, 0x2f, 0xda, 0x32, 0xd3, 0x6a, 0x21, 0xef, 0x39, 0xdd, 0xc1, 0x1b, 0xa2, 0xaf, 0x7a, 0xd2, - 0x36, 0x9c, 0x33, 0x2d, 0xc5, 0xf5, 0x54, 0xb3, 0xad, 0x3a, 0x6d, 0x65, 0x78, 0x93, 0xa4, 0xa8, - 0x9a, 0x86, 0x5c, 0xd7, 0xa2, 0xa5, 0xca, 0x67, 0xf9, 0x98, 0x69, 0xb5, 0x98, 0xf2, 0x30, 0x87, - 0x57, 0x98, 0xea, 0x48, 0x80, 0xc5, 0x8f, 0x0b, 0xb0, 0x07, 0x20, 0xdd, 0x57, 0x6d, 0x05, 0x99, - 0x9e, 0x73, 0x48, 0x1a, 0xe3, 0x94, 0x9c, 0xea, 0xab, 0x76, 0x0d, 0x3f, 0x7f, 0x34, 0xe7, 0x93, - 0x7f, 0x8d, 0x43, 0x36, 0xd8, 0x1c, 0xe3, 0xb3, 0x86, 0x46, 0xea, 0x88, 0x40, 0x32, 0xcd, 0x43, - 0xf7, 0x6d, 0xa5, 0x4b, 0x55, 0x5c, 0x60, 0xca, 0xb3, 0xb4, 0x65, 0x95, 0x29, 0x12, 0x17, 0x77, - 0x9c, 0x5b, 0x10, 0x6d, 0x11, 0x52, 0x32, 0x7b, 0x92, 0xb6, 0x60, 0xf6, 0x86, 0x4b, 0xb8, 0x67, - 0x09, 0xf7, 0xc3, 0xf7, 0xe7, 0x7e, 0xb6, 0x45, 0xc8, 0xd3, 0xcf, 0xb6, 0x94, 0xdd, 0x86, 0xbc, - 0x53, 0xd9, 0x96, 0x19, 0x5c, 0x3a, 0x0b, 0x09, 0x43, 0xbd, 0x73, 0x18, 0x2e, 0x45, 0x44, 0x34, - 0xad, 0xe3, 0xcf, 0x42, 0xe2, 0x36, 0x52, 0x6f, 0x86, 0x0b, 0x00, 0x11, 0x7d, 0x88, 0xa1, 0xbf, - 0x0e, 0x49, 0xe2, 0x2f, 0x09, 0x80, 0x79, 0x4c, 0x9c, 0x91, 0x52, 0x90, 0xa8, 0x36, 0x64, 0x1c, - 0xfe, 0x22, 0x64, 0xa9, 0x54, 0x69, 0xd6, 0x6b, 0xd5, 0x9a, 0x18, 0x2b, 0x5e, 0x82, 0x59, 0xea, - 0x04, 0xbc, 0x35, 0x7c, 0x37, 0x88, 0x33, 0xec, 0x91, 0x71, 0x08, 0x7c, 0x74, 0x7f, 0x67, 0xa3, - 0x26, 0x8b, 0xb1, 0xe0, 0xf2, 0xba, 0x90, 0x0d, 0xf6, 0xc5, 0x1f, 0x4d, 0x4c, 0xfd, 0xbd, 0x00, - 0x99, 0x40, 0x9f, 0x8b, 0x1b, 0x14, 0xd5, 0x30, 0xac, 0xdb, 0x8a, 0x6a, 0xe8, 0xaa, 0xcb, 0x82, - 0x02, 0x88, 0xa8, 0x82, 0x25, 0xd3, 0x2e, 0xda, 0x47, 0x62, 0xfc, 0x6b, 0x02, 0x88, 0xa3, 0x2d, - 0xe6, 0x88, 0x81, 0xc2, 0x4f, 0xd4, 0xc0, 0x57, 0x05, 0xc8, 0x85, 0xfb, 0xca, 0x11, 0xf3, 0xce, - 0xff, 0x44, 0xcd, 0x7b, 0x2b, 0x06, 0xf3, 0xa1, 0x6e, 0x72, 0x5a, 0xeb, 0x3e, 0x0f, 0x8b, 0x7a, - 0x1b, 0xf5, 0x6d, 0xcb, 0x43, 0xa6, 0x76, 0xa8, 0x18, 0xe8, 0x16, 0x32, 0xf2, 0x45, 0x92, 0x28, - 0xd6, 0xef, 0xdf, 0xaf, 0x96, 0xea, 0x43, 0xdc, 0x36, 0x86, 0x95, 0x97, 0xea, 0x9b, 0xb5, 0x9d, - 0x66, 0x63, 0xaf, 0xb6, 0x5b, 0x7d, 0x41, 0xd9, 0xdf, 0xfd, 0xd9, 0xdd, 0xc6, 0x73, 0xbb, 0xb2, - 0xa8, 0x8f, 0xa8, 0x7d, 0x88, 0x5b, 0xbd, 0x09, 0xe2, 0xa8, 0x51, 0xd2, 0x19, 0x98, 0x64, 0x96, - 0x38, 0x23, 0x2d, 0xc1, 0xc2, 0x6e, 0x43, 0x69, 0xd5, 0x37, 0x6b, 0x4a, 0xed, 0xfa, 0xf5, 0x5a, - 0x75, 0xaf, 0x45, 0x6f, 0x20, 0x7c, 0xed, 0xbd, 0xf0, 0xa6, 0x7e, 0x25, 0x0e, 0x4b, 0x13, 0x2c, - 0x91, 0x2a, 0xec, 0xec, 0x40, 0x8f, 0x33, 0x9f, 0x98, 0xc6, 0xfa, 0x12, 0x2e, 0xf9, 0x4d, 0xd5, - 0xf1, 0xd8, 0x51, 0xe3, 0x31, 0xc0, 0x5e, 0x32, 0x3d, 0xbd, 0xa3, 0x23, 0x87, 0x5d, 0xd8, 0xd0, - 0x03, 0xc5, 0xc2, 0x50, 0x4e, 0xef, 0x6c, 0x7e, 0x0a, 0x24, 0xdb, 0x72, 0x75, 0x4f, 0xbf, 0x85, - 0x14, 0xdd, 0xe4, 0xb7, 0x3b, 0xf8, 0x80, 0x91, 0x90, 0x45, 0x3e, 0x52, 0x37, 0x3d, 0x5f, 0xdb, - 0x44, 0x5d, 0x75, 0x44, 0x1b, 0x27, 0xf0, 0xb8, 0x2c, 0xf2, 0x11, 0x5f, 0xfb, 0x3c, 0x64, 0xdb, - 0xd6, 0x00, 0x77, 0x5d, 0x54, 0x0f, 0xd7, 0x0b, 0x41, 0xce, 0x50, 0x99, 0xaf, 0xc2, 0xfa, 0xe9, - 0xe1, 0xb5, 0x52, 0x56, 0xce, 0x50, 0x19, 0x55, 0x79, 0x14, 0x16, 0xd4, 0x6e, 0xd7, 0xc1, 0xe4, - 0x9c, 0x88, 0x9e, 0x10, 0x72, 0xbe, 0x98, 0x28, 0xae, 0x3c, 0x0b, 0x29, 0xee, 0x07, 0x5c, 0x92, - 0xb1, 0x27, 0x14, 0x9b, 0x1e, 0x7b, 0x63, 0x6b, 0x69, 0x39, 0x65, 0xf2, 0xc1, 0xf3, 0x90, 0xd5, - 0x5d, 0x65, 0x78, 0x4b, 0x1e, 0x5b, 0x8d, 0xad, 0xa5, 0xe4, 0x8c, 0xee, 0xfa, 0x37, 0x8c, 0xc5, - 0xd7, 0x63, 0x90, 0x0b, 0xdf, 0xf2, 0x4b, 0x9b, 0x90, 0x32, 0x2c, 0x4d, 0x25, 0xa1, 0x45, 0x3f, - 0x31, 0xad, 0x45, 0x7c, 0x18, 0x28, 0x6d, 0x33, 0x7d, 0xd9, 0x47, 0xae, 0xfc, 0xb3, 0x00, 0x29, - 0x2e, 0x96, 0x4e, 0x43, 0xc2, 0x56, 0xbd, 0x1e, 0xa1, 0x4b, 0x6e, 0xc4, 0x44, 0x41, 0x26, 0xcf, - 0x58, 0xee, 0xda, 0xaa, 0x49, 0x42, 0x80, 0xc9, 0xf1, 0x33, 0x5e, 0x57, 0x03, 0xa9, 0x6d, 0x72, - 0xfc, 0xb0, 0xfa, 0x7d, 0x64, 0x7a, 0x2e, 0x5f, 0x57, 0x26, 0xaf, 0x32, 0xb1, 0xf4, 0x04, 0x2c, - 0x7a, 0x8e, 0xaa, 0x1b, 0x21, 0xdd, 0x04, 0xd1, 0x15, 0xf9, 0x80, 0xaf, 0x5c, 0x86, 0xb3, 0x9c, - 0xb7, 0x8d, 0x3c, 0x55, 0xeb, 0xa1, 0xf6, 0x10, 0x34, 0x4b, 0xae, 0x19, 0xce, 0x30, 0x85, 0x4d, - 0x36, 0xce, 0xb1, 0xc5, 0xef, 0x0b, 0xb0, 0xc8, 0x0f, 0x4c, 0x6d, 0xdf, 0x59, 0x3b, 0x00, 0xaa, - 0x69, 0x5a, 0x5e, 0xd0, 0x5d, 0xe3, 0xa1, 0x3c, 0x86, 0x2b, 0x55, 0x7c, 0x90, 0x1c, 0x20, 0x58, - 0xe9, 0x03, 0x0c, 0x47, 0x8e, 0x75, 0xdb, 0x39, 0xc8, 0xb0, 0x4f, 0x38, 0xe4, 0x3b, 0x20, 0x3d, - 0x62, 0x03, 0x15, 0xe1, 0x93, 0x95, 0xb4, 0x0c, 0xc9, 0x03, 0xd4, 0xd5, 0x4d, 0x76, 0x31, 0x4b, - 0x1f, 0xf8, 0x45, 0x48, 0xc2, 0xbf, 0x08, 0xd9, 0xf8, 0x1c, 0x2c, 0x69, 0x56, 0x7f, 0xd4, 0xdc, - 0x0d, 0x71, 0xe4, 0x98, 0xef, 0x7e, 0x5a, 0x78, 0x11, 0x86, 0x2d, 0xe6, 0xfb, 0x82, 0xf0, 0xc7, - 0xb1, 0xf8, 0x56, 0x73, 0xe3, 0xeb, 0xb1, 0x95, 0x2d, 0x0a, 0x6d, 0xf2, 0x99, 0xca, 0xa8, 0x63, - 0x20, 0x0d, 0x5b, 0x0f, 0x5f, 0x5d, 0x83, 0x4f, 0x74, 0x75, 0xaf, 0x37, 0x38, 0x28, 0x69, 0x56, - 0x7f, 0xbd, 0x6b, 0x75, 0xad, 0xe1, 0xa7, 0x4f, 0xfc, 0x44, 0x1e, 0xc8, 0x7f, 0xec, 0xf3, 0x67, - 0xda, 0x97, 0xae, 0x44, 0x7e, 0x2b, 0x2d, 0xef, 0xc2, 0x12, 0x53, 0x56, 0xc8, 0xf7, 0x17, 0x7a, - 0x8a, 0x90, 0xee, 0x7b, 0x87, 0x95, 0xff, 0xc6, 0xdb, 0xa4, 0x5c, 0xcb, 0x8b, 0x0c, 0x8a, 0xc7, - 0xe8, 0x41, 0xa3, 0x2c, 0xc3, 0xa9, 0x10, 0x1f, 0xdd, 0x9a, 0xc8, 0x89, 0x60, 0xfc, 0x2e, 0x63, - 0x5c, 0x0a, 0x30, 0xb6, 0x18, 0xb4, 0x5c, 0x85, 0xf9, 0x93, 0x70, 0xfd, 0x23, 0xe3, 0xca, 0xa2, - 0x20, 0xc9, 0x16, 0x2c, 0x10, 0x12, 0x6d, 0xe0, 0x7a, 0x56, 0x9f, 0xe4, 0xbd, 0xfb, 0xd3, 0xfc, - 0xd3, 0xdb, 0x74, 0xaf, 0xe4, 0x30, 0xac, 0xea, 0xa3, 0xca, 0x65, 0x20, 0x9f, 0x9c, 0xda, 0x48, - 0x33, 0x22, 0x18, 0xde, 0x64, 0x86, 0xf8, 0xfa, 0xe5, 0xcf, 0xc2, 0x32, 0xfe, 0x9f, 0xa4, 0xa5, - 0xa0, 0x25, 0xd1, 0x17, 0x5e, 0xf9, 0xef, 0xbf, 0x4c, 0xb7, 0xe3, 0x92, 0x4f, 0x10, 0xb0, 0x29, - 0xb0, 0x8a, 0x5d, 0xe4, 0x79, 0xc8, 0x71, 0x15, 0xd5, 0x98, 0x64, 0x5e, 0xe0, 0xc6, 0x20, 0xff, - 0xa5, 0x77, 0xc2, 0xab, 0xb8, 0x45, 0x91, 0x15, 0xc3, 0x28, 0xef, 0xc3, 0x99, 0x09, 0x51, 0x31, - 0x05, 0xe7, 0x2b, 0x8c, 0x73, 0x79, 0x2c, 0x32, 0x30, 0x6d, 0x13, 0xb8, 0xdc, 0x5f, 0xcb, 0x29, - 0x38, 0xff, 0x80, 0x71, 0x4a, 0x0c, 0xcb, 0x97, 0x14, 0x33, 0x3e, 0x0b, 0x8b, 0xb7, 0x90, 0x73, - 0x60, 0xb9, 0xec, 0x96, 0x66, 0x0a, 0xba, 0x57, 0x19, 0xdd, 0x02, 0x03, 0x92, 0x6b, 0x1b, 0xcc, - 0x75, 0x15, 0x52, 0x1d, 0x55, 0x43, 0x53, 0x50, 0x7c, 0x99, 0x51, 0xcc, 0x61, 0x7d, 0x0c, 0xad, - 0x40, 0xb6, 0x6b, 0xb1, 0xca, 0x14, 0x0d, 0x7f, 0x8d, 0xc1, 0x33, 0x1c, 0xc3, 0x28, 0x6c, 0xcb, - 0x1e, 0x18, 0xb8, 0x6c, 0x45, 0x53, 0xfc, 0x21, 0xa7, 0xe0, 0x18, 0x46, 0x71, 0x02, 0xb7, 0xfe, - 0x11, 0xa7, 0x70, 0x03, 0xfe, 0x7c, 0x06, 0x32, 0x96, 0x69, 0x1c, 0x5a, 0xe6, 0x34, 0x46, 0x7c, - 0x85, 0x31, 0x00, 0x83, 0x60, 0x82, 0x6b, 0x90, 0x9e, 0x76, 0x21, 0xbe, 0xfa, 0x0e, 0xdf, 0x1e, - 0x7c, 0x05, 0xb6, 0x60, 0x81, 0x27, 0x28, 0xdd, 0x32, 0xa7, 0xa0, 0xf8, 0x13, 0x46, 0x91, 0x0b, - 0xc0, 0xd8, 0x34, 0x3c, 0xe4, 0x7a, 0x5d, 0x34, 0x0d, 0xc9, 0xeb, 0x7c, 0x1a, 0x0c, 0xc2, 0x5c, - 0x79, 0x80, 0x4c, 0xad, 0x37, 0x1d, 0xc3, 0xd7, 0xb8, 0x2b, 0x39, 0x06, 0x53, 0x54, 0x61, 0xbe, - 0xaf, 0x3a, 0x6e, 0x4f, 0x35, 0xa6, 0x5a, 0x8e, 0x3f, 0x65, 0x1c, 0x59, 0x1f, 0xc4, 0x3c, 0x32, - 0x30, 0x4f, 0x42, 0xf3, 0x75, 0xee, 0x91, 0x00, 0x8c, 0x6d, 0x3d, 0xd7, 0x23, 0x57, 0x5a, 0x27, - 0x61, 0xfb, 0x33, 0xbe, 0xf5, 0x28, 0x76, 0x27, 0xc8, 0x78, 0x0d, 0xd2, 0xae, 0x7e, 0x67, 0x2a, - 0x9a, 0x3f, 0xe7, 0x2b, 0x4d, 0x00, 0x18, 0xfc, 0x02, 0x9c, 0x9d, 0x58, 0x26, 0xa6, 0x20, 0xfb, - 0x0b, 0x46, 0x76, 0x7a, 0x42, 0xa9, 0x60, 0x29, 0xe1, 0xa4, 0x94, 0x7f, 0xc9, 0x53, 0x02, 0x1a, - 0xe1, 0x6a, 0xe2, 0xb3, 0x82, 0xab, 0x76, 0x4e, 0xe6, 0xb5, 0xbf, 0xe2, 0x5e, 0xa3, 0xd8, 0x90, - 0xd7, 0xf6, 0xe0, 0x34, 0x63, 0x3c, 0xd9, 0xba, 0xbe, 0xc1, 0x13, 0x2b, 0x45, 0xef, 0x87, 0x57, - 0xf7, 0x73, 0xb0, 0xe2, 0xbb, 0x93, 0x37, 0xa5, 0xae, 0xd2, 0x57, 0xed, 0x29, 0x98, 0xbf, 0xc1, - 0x98, 0x79, 0xc6, 0xf7, 0xbb, 0x5a, 0x77, 0x47, 0xb5, 0x31, 0xf9, 0xf3, 0x90, 0xe7, 0xe4, 0x03, - 0xd3, 0x41, 0x9a, 0xd5, 0x35, 0xf5, 0x3b, 0xa8, 0x3d, 0x05, 0xf5, 0x5f, 0x8f, 0x2c, 0xd5, 0x7e, - 0x00, 0x8e, 0x99, 0xeb, 0x20, 0xfa, 0xbd, 0x8a, 0xa2, 0xf7, 0x6d, 0xcb, 0xf1, 0x22, 0x18, 0xbf, - 0xc9, 0x57, 0xca, 0xc7, 0xd5, 0x09, 0xac, 0x5c, 0x83, 0x1c, 0x79, 0x9c, 0x36, 0x24, 0xff, 0x86, - 0x11, 0xcd, 0x0f, 0x51, 0x2c, 0x71, 0x68, 0x56, 0xdf, 0x56, 0x9d, 0x69, 0xf2, 0xdf, 0xdf, 0xf2, - 0xc4, 0xc1, 0x20, 0x2c, 0x71, 0x78, 0x87, 0x36, 0xc2, 0xd5, 0x7e, 0x0a, 0x86, 0x6f, 0xf1, 0xc4, - 0xc1, 0x31, 0x8c, 0x82, 0x37, 0x0c, 0x53, 0x50, 0xfc, 0x1d, 0xa7, 0xe0, 0x18, 0x4c, 0xf1, 0x99, - 0x61, 0xa1, 0x75, 0x50, 0x57, 0x77, 0x3d, 0x87, 0xb6, 0xc2, 0xf7, 0xa7, 0xfa, 0xf6, 0x3b, 0xe1, - 0x26, 0x4c, 0x0e, 0x40, 0x71, 0x26, 0x62, 0x57, 0xa8, 0xe4, 0xa4, 0x14, 0x6d, 0xd8, 0x77, 0x78, - 0x26, 0x0a, 0xc0, 0xe8, 0xfe, 0x5c, 0x18, 0xe9, 0x55, 0xa4, 0xa8, 0x1f, 0xc2, 0xe4, 0x7f, 0xf1, - 0x3d, 0xc6, 0x15, 0x6e, 0x55, 0xca, 0xdb, 0x38, 0x80, 0xc2, 0x0d, 0x45, 0x34, 0xd9, 0xcb, 0xef, - 0xf9, 0x31, 0x14, 0xea, 0x27, 0xca, 0xd7, 0x61, 0x3e, 0xd4, 0x4c, 0x44, 0x53, 0xfd, 0x12, 0xa3, - 0xca, 0x06, 0x7b, 0x89, 0xf2, 0x25, 0x48, 0xe0, 0xc6, 0x20, 0x1a, 0xfe, 0xcb, 0x0c, 0x4e, 0xd4, - 0xcb, 0x9f, 0x82, 0x14, 0x6f, 0x08, 0xa2, 0xa1, 0xbf, 0xc2, 0xa0, 0x3e, 0x04, 0xc3, 0x79, 0x33, - 0x10, 0x0d, 0xff, 0x55, 0x0e, 0xe7, 0x10, 0x0c, 0x9f, 0xde, 0x85, 0xff, 0xf0, 0x6b, 0x09, 0x96, - 0xd0, 0xb9, 0xef, 0xae, 0xc1, 0x1c, 0xeb, 0x02, 0xa2, 0xd1, 0x5f, 0x60, 0x2f, 0xe7, 0x88, 0xf2, - 0x53, 0x90, 0x9c, 0xd2, 0xe1, 0xbf, 0xce, 0xa0, 0x54, 0xbf, 0x5c, 0x85, 0x4c, 0xa0, 0xf2, 0x47, - 0xc3, 0x7f, 0x83, 0xc1, 0x83, 0x28, 0x6c, 0x3a, 0xab, 0xfc, 0xd1, 0x04, 0xbf, 0xc9, 0x4d, 0x67, - 0x08, 0xec, 0x36, 0x5e, 0xf4, 0xa3, 0xd1, 0xbf, 0xc5, 0xbd, 0xce, 0x21, 0xe5, 0x67, 0x20, 0xed, - 0x27, 0xf2, 0x68, 0xfc, 0x6f, 0x33, 0xfc, 0x10, 0x83, 0x3d, 0x10, 0x28, 0x24, 0xd1, 0x14, 0xbf, - 0xc3, 0x3d, 0x10, 0x40, 0xe1, 0x6d, 0x34, 0xda, 0x1c, 0x44, 0x33, 0xfd, 0x2e, 0xdf, 0x46, 0x23, - 0xbd, 0x01, 0x5e, 0x4d, 0x92, 0x4f, 0xa3, 0x29, 0x7e, 0x8f, 0xaf, 0x26, 0xd1, 0xc7, 0x66, 0x8c, - 0x56, 0xdb, 0x68, 0x8e, 0xdf, 0xe7, 0x66, 0x8c, 0x14, 0xdb, 0x72, 0x13, 0xa4, 0xf1, 0x4a, 0x1b, - 0xcd, 0xf7, 0x45, 0xc6, 0xb7, 0x38, 0x56, 0x68, 0xcb, 0xcf, 0xc1, 0xe9, 0xc9, 0x55, 0x36, 0x9a, - 0xf5, 0x4b, 0xef, 0x8d, 0x9c, 0x8b, 0x82, 0x45, 0xb6, 0xbc, 0x37, 0x4c, 0xd7, 0xc1, 0x0a, 0x1b, - 0x4d, 0xfb, 0xca, 0x7b, 0xe1, 0x8c, 0x1d, 0x2c, 0xb0, 0xe5, 0x0a, 0xc0, 0xb0, 0xb8, 0x45, 0x73, - 0xbd, 0xca, 0xb8, 0x02, 0x20, 0xbc, 0x35, 0x58, 0x6d, 0x8b, 0xc6, 0x7f, 0x99, 0x6f, 0x0d, 0x86, - 0xc0, 0x5b, 0x83, 0x97, 0xb5, 0x68, 0xf4, 0x6b, 0x7c, 0x6b, 0x70, 0x08, 0x8e, 0xec, 0x40, 0xe5, - 0x88, 0x66, 0xf8, 0x0a, 0x8f, 0xec, 0x00, 0xaa, 0x7c, 0x0d, 0x52, 0xe6, 0xc0, 0x30, 0x70, 0x80, - 0x4a, 0xf7, 0xff, 0x81, 0x58, 0xfe, 0xdf, 0x3f, 0x60, 0x16, 0x70, 0x40, 0xf9, 0x12, 0x24, 0x51, - 0xff, 0x00, 0xb5, 0xa3, 0x90, 0xff, 0xf1, 0x01, 0x4f, 0x4a, 0x58, 0xbb, 0xfc, 0x0c, 0x00, 0x3d, - 0xda, 0x93, 0xcf, 0x56, 0x11, 0xd8, 0xff, 0xfc, 0x80, 0xfd, 0x74, 0x63, 0x08, 0x19, 0x12, 0xd0, - 0x1f, 0x82, 0xdc, 0x9f, 0xe0, 0x9d, 0x30, 0x01, 0x99, 0xf5, 0x55, 0x98, 0xbb, 0xe1, 0x5a, 0xa6, - 0xa7, 0x76, 0xa3, 0xd0, 0xff, 0xc5, 0xd0, 0x5c, 0x1f, 0x3b, 0xac, 0x6f, 0x39, 0xc8, 0x53, 0xbb, - 0x6e, 0x14, 0xf6, 0xbf, 0x19, 0xd6, 0x07, 0x60, 0xb0, 0xa6, 0xba, 0xde, 0x34, 0xf3, 0xfe, 0x11, - 0x07, 0x73, 0x00, 0x36, 0x1a, 0xff, 0x7f, 0x13, 0x1d, 0x46, 0x61, 0xdf, 0xe5, 0x46, 0x33, 0xfd, - 0xf2, 0xa7, 0x20, 0x8d, 0xff, 0xa5, 0xbf, 0xc7, 0x8a, 0x00, 0xff, 0x0f, 0x03, 0x0f, 0x11, 0xf8, - 0xcd, 0xae, 0xd7, 0xf6, 0xf4, 0x68, 0x67, 0xff, 0x2f, 0x5b, 0x69, 0xae, 0x5f, 0xae, 0x40, 0xc6, - 0xf5, 0xda, 0xed, 0x01, 0xeb, 0xaf, 0x22, 0xe0, 0xff, 0xf7, 0x81, 0x7f, 0xe4, 0xf6, 0x31, 0x1b, - 0xb5, 0xc9, 0xb7, 0x87, 0xb0, 0x65, 0x6d, 0x59, 0xf4, 0xde, 0xf0, 0xc5, 0x62, 0xf4, 0x05, 0x20, - 0xbc, 0x11, 0x87, 0x53, 0x9a, 0xd5, 0x3f, 0xb0, 0xdc, 0xf5, 0x03, 0xcb, 0xeb, 0xad, 0xf7, 0x55, - 0x9b, 0xdd, 0x07, 0x66, 0xfa, 0xaa, 0xcd, 0x7e, 0x78, 0xe9, 0xae, 0x9c, 0xec, 0x2e, 0xb1, 0xf8, - 0x0b, 0x30, 0xb7, 0xa3, 0xda, 0x7b, 0xc8, 0xf5, 0x24, 0xe2, 0x25, 0xf2, 0x0b, 0x1f, 0x76, 0x41, - 0xbb, 0x5a, 0x0a, 0x10, 0x97, 0x98, 0x5a, 0xa9, 0xe5, 0x39, 0x2d, 0xcf, 0x21, 0x1f, 0xb3, 0xe5, - 0x59, 0x97, 0x3c, 0xac, 0x5c, 0x85, 0x4c, 0x40, 0x2c, 0x89, 0x10, 0xbf, 0x89, 0x0e, 0xd9, 0x6f, - 0x7c, 0xf0, 0xbf, 0xd2, 0xf2, 0xf0, 0x47, 0x78, 0x58, 0x46, 0x1f, 0xca, 0xb1, 0x2b, 0x42, 0xf1, - 0x69, 0x98, 0xbb, 0xae, 0xde, 0x44, 0x3b, 0xaa, 0x2d, 0x5d, 0x84, 0x39, 0x64, 0x7a, 0x8e, 0x8e, - 0x5c, 0x66, 0xc0, 0xd9, 0x90, 0x01, 0x4c, 0x8d, 0xbe, 0x99, 0x6b, 0x16, 0xb7, 0x21, 0x1b, 0x1c, - 0x98, 0xf6, 0xdd, 0x58, 0x6a, 0x79, 0x3d, 0xf6, 0xa3, 0xdc, 0xb4, 0x4c, 0x1f, 0x36, 0x36, 0xdf, - 0xbc, 0x57, 0x98, 0xf9, 0xde, 0xbd, 0xc2, 0xcc, 0xbf, 0xdc, 0x2b, 0xcc, 0xbc, 0x75, 0xaf, 0x20, - 0xbc, 0x7b, 0xaf, 0x20, 0xbc, 0x7f, 0xaf, 0x20, 0xdc, 0x3d, 0x2a, 0x08, 0x5f, 0x3b, 0x2a, 0x08, - 0x6f, 0x1c, 0x15, 0x84, 0x6f, 0x1f, 0x15, 0x84, 0x37, 0x8f, 0x0a, 0xc2, 0xf7, 0x8e, 0x0a, 0xc2, - 0x5b, 0x47, 0x05, 0xe1, 0x87, 0x47, 0x85, 0x99, 0x77, 0x8f, 0x0a, 0xc2, 0xfb, 0x47, 0x85, 0x99, - 0xbb, 0x3f, 0x28, 0xcc, 0x1c, 0xcc, 0x12, 0xdf, 0x5e, 0xfc, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x17, 0x07, 0x64, 0xb4, 0xcd, 0x32, 0x00, 0x00, + // 3978 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xe3, 0xd6, + 0x75, 0x16, 0xf8, 0x23, 0x91, 0x87, 0x14, 0x05, 0x41, 0xda, 0x5d, 0xae, 0x1c, 0x73, 0xb5, 0xb4, + 0x1d, 0xcb, 0x76, 0x23, 0x65, 0x76, 0xbd, 0xeb, 0x5d, 0x6e, 0x63, 0x97, 0x92, 0xb8, 0x8a, 0x5c, + 0xfd, 0x05, 0x94, 0xe2, 0x9f, 0x4c, 0x07, 0x03, 0x81, 0x97, 0x24, 0x56, 0x20, 0x80, 0x00, 0xe0, + 0xae, 0xb5, 0xd3, 0x99, 0x6e, 0xc7, 0xfd, 0x99, 0x4c, 0xa7, 0xff, 0x9d, 0x69, 0xe2, 0x3a, 0x6e, + 0x93, 0x4e, 0xe3, 0x34, 0xfd, 0x73, 0x9a, 0x36, 0x4d, 0xd2, 0x97, 0xbe, 0xa4, 0xf5, 0x53, 0x27, + 0x79, 0xeb, 0x43, 0x1f, 0xbc, 0x8a, 0x67, 0x9a, 0xb6, 0x6e, 0xe3, 0xb6, 0xfb, 0xe0, 0x19, 0xbf, + 0x74, 0xee, 0x1f, 0x08, 0x80, 0xd4, 0x02, 0xca, 0x8c, 0x9d, 0x27, 0x09, 0xe7, 0x9e, 0xef, 0xc3, + 0xb9, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0x97, 0x80, 0x1f, 0x5d, 0x85, 0xf9, 0x8e, 0x65, 0x75, 0x0c, + 0xb4, 0x64, 0x3b, 0x96, 0x67, 0xed, 0xf7, 0xdb, 0x4b, 0x2d, 0xe4, 0x6a, 0x8e, 0x6e, 0x7b, 0x96, + 0xb3, 0x48, 0x64, 0xd2, 0x14, 0xd5, 0x58, 0xe4, 0x1a, 0xd5, 0x4d, 0x98, 0xbe, 0xae, 0x1b, 0x68, + 0xd5, 0x57, 0x6c, 0x22, 0x4f, 0xba, 0x02, 0x99, 0xb6, 0x6e, 0xa0, 0xb2, 0x30, 0x9f, 0x5e, 0x28, + 0x5c, 0x78, 0x78, 0x31, 0x02, 0x5a, 0x0c, 0x23, 0x76, 0xb0, 0x58, 0x26, 0x88, 0xea, 0xdb, 0x19, + 0x98, 0x19, 0x31, 0x2a, 0x49, 0x90, 0x31, 0xd5, 0x1e, 0x66, 0x14, 0x16, 0xf2, 0x32, 0xf9, 0x5f, + 0x2a, 0xc3, 0x84, 0xad, 0x6a, 0x07, 0x6a, 0x07, 0x95, 0x53, 0x44, 0xcc, 0x1f, 0xa5, 0x0a, 0x40, + 0x0b, 0xd9, 0xc8, 0x6c, 0x21, 0x53, 0x3b, 0x2c, 0xa7, 0xe7, 0xd3, 0x0b, 0x79, 0x39, 0x20, 0x91, + 0x9e, 0x80, 0x69, 0xbb, 0xbf, 0x6f, 0xe8, 0x9a, 0x12, 0x50, 0x83, 0xf9, 0xf4, 0x42, 0x56, 0x16, + 0xe9, 0xc0, 0xea, 0x40, 0xf9, 0x51, 0x98, 0xba, 0x85, 0xd4, 0x83, 0xa0, 0x6a, 0x81, 0xa8, 0x96, + 0xb0, 0x38, 0xa0, 0xb8, 0x02, 0xc5, 0x1e, 0x72, 0x5d, 0xb5, 0x83, 0x14, 0xef, 0xd0, 0x46, 0xe5, + 0x0c, 0x99, 0xfd, 0xfc, 0xd0, 0xec, 0xa3, 0x33, 0x2f, 0x30, 0xd4, 0xee, 0xa1, 0x8d, 0xa4, 0x3a, + 0xe4, 0x91, 0xd9, 0xef, 0x51, 0x86, 0xec, 0x31, 0xfe, 0x6b, 0x98, 0xfd, 0x5e, 0x94, 0x25, 0x87, + 0x61, 0x8c, 0x62, 0xc2, 0x45, 0xce, 0x4d, 0x5d, 0x43, 0xe5, 0x71, 0x42, 0xf0, 0xe8, 0x10, 0x41, + 0x93, 0x8e, 0x47, 0x39, 0x38, 0x4e, 0x5a, 0x81, 0x3c, 0x7a, 0xc9, 0x43, 0xa6, 0xab, 0x5b, 0x66, + 0x79, 0x82, 0x90, 0x3c, 0x32, 0x62, 0x15, 0x91, 0xd1, 0x8a, 0x52, 0x0c, 0x70, 0xd2, 0x65, 0x98, + 0xb0, 0x6c, 0x4f, 0xb7, 0x4c, 0xb7, 0x9c, 0x9b, 0x17, 0x16, 0x0a, 0x17, 0x3e, 0x32, 0x32, 0x10, + 0xb6, 0xa9, 0x8e, 0xcc, 0x95, 0xa5, 0x75, 0x10, 0x5d, 0xab, 0xef, 0x68, 0x48, 0xd1, 0xac, 0x16, + 0x52, 0x74, 0xb3, 0x6d, 0x95, 0xf3, 0x84, 0xe0, 0xdc, 0xf0, 0x44, 0x88, 0xe2, 0x8a, 0xd5, 0x42, + 0xeb, 0x66, 0xdb, 0x92, 0x4b, 0x6e, 0xe8, 0x59, 0x3a, 0x0d, 0xe3, 0xee, 0xa1, 0xe9, 0xa9, 0x2f, + 0x95, 0x8b, 0x24, 0x42, 0xd8, 0x53, 0xf5, 0xdb, 0xe3, 0x30, 0x95, 0x24, 0xc4, 0xae, 0x41, 0xb6, + 0x8d, 0x67, 0x59, 0x4e, 0x9d, 0xc4, 0x07, 0x14, 0x13, 0x76, 0xe2, 0xf8, 0x8f, 0xe9, 0xc4, 0x3a, + 0x14, 0x4c, 0xe4, 0x7a, 0xa8, 0x45, 0x23, 0x22, 0x9d, 0x30, 0xa6, 0x80, 0x82, 0x86, 0x43, 0x2a, + 0xf3, 0x63, 0x85, 0xd4, 0xf3, 0x30, 0xe5, 0x9b, 0xa4, 0x38, 0xaa, 0xd9, 0xe1, 0xb1, 0xb9, 0x14, + 0x67, 0xc9, 0x62, 0x83, 0xe3, 0x64, 0x0c, 0x93, 0x4b, 0x28, 0xf4, 0x2c, 0xad, 0x02, 0x58, 0x26, + 0xb2, 0xda, 0x4a, 0x0b, 0x69, 0x46, 0x39, 0x77, 0x8c, 0x97, 0xb6, 0xb1, 0xca, 0x90, 0x97, 0x2c, + 0x2a, 0xd5, 0x0c, 0xe9, 0xea, 0x20, 0xd4, 0x26, 0x8e, 0x89, 0x94, 0x4d, 0xba, 0xc9, 0x86, 0xa2, + 0x6d, 0x0f, 0x4a, 0x0e, 0xc2, 0x71, 0x8f, 0x5a, 0x6c, 0x66, 0x79, 0x62, 0xc4, 0x62, 0xec, 0xcc, + 0x64, 0x06, 0xa3, 0x13, 0x9b, 0x74, 0x82, 0x8f, 0xd2, 0x43, 0xe0, 0x0b, 0x14, 0x12, 0x56, 0x40, + 0xb2, 0x50, 0x91, 0x0b, 0xb7, 0xd4, 0x1e, 0x9a, 0xbb, 0x0d, 0xa5, 0xb0, 0x7b, 0xa4, 0x59, 0xc8, + 0xba, 0x9e, 0xea, 0x78, 0x24, 0x0a, 0xb3, 0x32, 0x7d, 0x90, 0x44, 0x48, 0x23, 0xb3, 0x45, 0xb2, + 0x5c, 0x56, 0xc6, 0xff, 0x4a, 0x3f, 0x33, 0x98, 0x70, 0x9a, 0x4c, 0xf8, 0xa3, 0xc3, 0x2b, 0x1a, + 0x62, 0x8e, 0xce, 0x7b, 0xee, 0x29, 0x98, 0x0c, 0x4d, 0x20, 0xe9, 0xab, 0xab, 0x3f, 0x0f, 0xa7, + 0x46, 0x52, 0x4b, 0xcf, 0xc3, 0x6c, 0xdf, 0xd4, 0x4d, 0x0f, 0x39, 0xb6, 0x83, 0x70, 0xc4, 0xd2, + 0x57, 0x95, 0xff, 0x6d, 0xe2, 0x98, 0x98, 0xdb, 0x0b, 0x6a, 0x53, 0x16, 0x79, 0xa6, 0x3f, 0x2c, + 0x7c, 0x3c, 0x9f, 0xfb, 0xe1, 0x84, 0x78, 0xe7, 0xce, 0x9d, 0x3b, 0xa9, 0xea, 0xe7, 0xc7, 0x61, + 0x76, 0xd4, 0x9e, 0x19, 0xb9, 0x7d, 0x4f, 0xc3, 0xb8, 0xd9, 0xef, 0xed, 0x23, 0x87, 0x38, 0x29, + 0x2b, 0xb3, 0x27, 0xa9, 0x0e, 0x59, 0x43, 0xdd, 0x47, 0x46, 0x39, 0x33, 0x2f, 0x2c, 0x94, 0x2e, + 0x3c, 0x91, 0x68, 0x57, 0x2e, 0x6e, 0x60, 0x88, 0x4c, 0x91, 0xd2, 0xd3, 0x90, 0x61, 0x29, 0x1a, + 0x33, 0x3c, 0x9e, 0x8c, 0x01, 0xef, 0x25, 0x99, 0xe0, 0xa4, 0x07, 0x20, 0x8f, 0xff, 0xd2, 0xd8, + 0x18, 0x27, 0x36, 0xe7, 0xb0, 0x00, 0xc7, 0x85, 0x34, 0x07, 0x39, 0xb2, 0x4d, 0x5a, 0x88, 0x97, + 0x36, 0xff, 0x19, 0x07, 0x56, 0x0b, 0xb5, 0xd5, 0xbe, 0xe1, 0x29, 0x37, 0x55, 0xa3, 0x8f, 0x48, + 0xc0, 0xe7, 0xe5, 0x22, 0x13, 0x7e, 0x1a, 0xcb, 0xa4, 0x73, 0x50, 0xa0, 0xbb, 0x4a, 0x37, 0x5b, + 0xe8, 0x25, 0x92, 0x3d, 0xb3, 0x32, 0xdd, 0x68, 0xeb, 0x58, 0x82, 0x5f, 0x7f, 0xc3, 0xb5, 0x4c, + 0x1e, 0x9a, 0xe4, 0x15, 0x58, 0x40, 0x5e, 0xff, 0x54, 0x34, 0x71, 0x3f, 0x38, 0x7a, 0x7a, 0xd1, + 0x98, 0xaa, 0x7e, 0x33, 0x05, 0x19, 0x92, 0x2f, 0xa6, 0xa0, 0xb0, 0xfb, 0xc2, 0x4e, 0x43, 0x59, + 0xdd, 0xde, 0x5b, 0xde, 0x68, 0x88, 0x82, 0x54, 0x02, 0x20, 0x82, 0xeb, 0x1b, 0xdb, 0xf5, 0x5d, + 0x31, 0xe5, 0x3f, 0xaf, 0x6f, 0xed, 0x5e, 0x7e, 0x52, 0x4c, 0xfb, 0x80, 0x3d, 0x2a, 0xc8, 0x04, + 0x15, 0x2e, 0x5e, 0x10, 0xb3, 0x92, 0x08, 0x45, 0x4a, 0xb0, 0xfe, 0x7c, 0x63, 0xf5, 0xf2, 0x93, + 0xe2, 0x78, 0x58, 0x72, 0xf1, 0x82, 0x38, 0x21, 0x4d, 0x42, 0x9e, 0x48, 0x96, 0xb7, 0xb7, 0x37, + 0xc4, 0x9c, 0xcf, 0xd9, 0xdc, 0x95, 0xd7, 0xb7, 0xd6, 0xc4, 0xbc, 0xcf, 0xb9, 0x26, 0x6f, 0xef, + 0xed, 0x88, 0xe0, 0x33, 0x6c, 0x36, 0x9a, 0xcd, 0xfa, 0x5a, 0x43, 0x2c, 0xf8, 0x1a, 0xcb, 0x2f, + 0xec, 0x36, 0x9a, 0x62, 0x31, 0x64, 0xd6, 0xc5, 0x0b, 0xe2, 0xa4, 0xff, 0x8a, 0xc6, 0xd6, 0xde, + 0xa6, 0x58, 0x92, 0xa6, 0x61, 0x92, 0xbe, 0x82, 0x1b, 0x31, 0x15, 0x11, 0x5d, 0x7e, 0x52, 0x14, + 0x07, 0x86, 0x50, 0x96, 0xe9, 0x90, 0xe0, 0xf2, 0x93, 0xa2, 0x54, 0x5d, 0x81, 0x2c, 0x89, 0x2e, + 0x49, 0x82, 0xd2, 0x46, 0x7d, 0xb9, 0xb1, 0xa1, 0x6c, 0xef, 0xec, 0xae, 0x6f, 0x6f, 0xd5, 0x37, + 0x44, 0x61, 0x20, 0x93, 0x1b, 0x9f, 0xda, 0x5b, 0x97, 0x1b, 0xab, 0x62, 0x2a, 0x28, 0xdb, 0x69, + 0xd4, 0x77, 0x1b, 0xab, 0x62, 0xba, 0xaa, 0xc1, 0xec, 0xa8, 0x3c, 0x39, 0x72, 0x67, 0x04, 0x96, + 0x38, 0x75, 0xcc, 0x12, 0x13, 0xae, 0xa1, 0x25, 0xfe, 0x41, 0x0a, 0x66, 0x46, 0xd4, 0x8a, 0x91, + 0x2f, 0x79, 0x06, 0xb2, 0x34, 0x44, 0x69, 0xf5, 0x7c, 0x6c, 0x64, 0xd1, 0x21, 0x01, 0x3b, 0x54, + 0x41, 0x09, 0x2e, 0xd8, 0x41, 0xa4, 0x8f, 0xe9, 0x20, 0x30, 0xc5, 0x50, 0x4e, 0xff, 0xb9, 0xa1, + 0x9c, 0x4e, 0xcb, 0xde, 0xe5, 0x24, 0x65, 0x8f, 0xc8, 0x4e, 0x96, 0xdb, 0xb3, 0x23, 0x72, 0xfb, + 0x35, 0x98, 0x1e, 0x22, 0x4a, 0x9c, 0x63, 0x5f, 0x16, 0xa0, 0x7c, 0x9c, 0x73, 0x62, 0x32, 0x5d, + 0x2a, 0x94, 0xe9, 0xae, 0x45, 0x3d, 0x78, 0xfe, 0xf8, 0x45, 0x18, 0x5a, 0xeb, 0xd7, 0x05, 0x38, + 0x3d, 0xba, 0x53, 0x1c, 0x69, 0xc3, 0xd3, 0x30, 0xde, 0x43, 0x5e, 0xd7, 0xe2, 0xdd, 0xd2, 0x47, + 0x47, 0xd4, 0x60, 0x3c, 0x1c, 0x5d, 0x6c, 0x86, 0x0a, 0x16, 0xf1, 0xf4, 0x71, 0xed, 0x1e, 0xb5, + 0x66, 0xc8, 0xd2, 0xcf, 0xa5, 0xe0, 0xd4, 0x48, 0xf2, 0x91, 0x86, 0x3e, 0x08, 0xa0, 0x9b, 0x76, + 0xdf, 0xa3, 0x1d, 0x11, 0x4d, 0xb0, 0x79, 0x22, 0x21, 0xc9, 0x0b, 0x27, 0xcf, 0xbe, 0xe7, 0x8f, + 0xa7, 0xc9, 0x38, 0x50, 0x11, 0x51, 0xb8, 0x32, 0x30, 0x34, 0x43, 0x0c, 0xad, 0x1c, 0x33, 0xd3, + 0xa1, 0xc0, 0xfc, 0x38, 0x88, 0x9a, 0xa1, 0x23, 0xd3, 0x53, 0x5c, 0xcf, 0x41, 0x6a, 0x4f, 0x37, + 0x3b, 0xa4, 0x82, 0xe4, 0x6a, 0xd9, 0xb6, 0x6a, 0xb8, 0x48, 0x9e, 0xa2, 0xc3, 0x4d, 0x3e, 0x8a, + 0x11, 0x24, 0x80, 0x9c, 0x00, 0x62, 0x3c, 0x84, 0xa0, 0xc3, 0x3e, 0xa2, 0xfa, 0x8d, 0x1c, 0x14, + 0x02, 0x7d, 0xb5, 0x74, 0x1e, 0x8a, 0x37, 0xd4, 0x9b, 0xaa, 0xc2, 0xcf, 0x4a, 0xd4, 0x13, 0x05, + 0x2c, 0xdb, 0x61, 0xe7, 0xa5, 0x8f, 0xc3, 0x2c, 0x51, 0xb1, 0xfa, 0x1e, 0x72, 0x14, 0xcd, 0x50, + 0x5d, 0x97, 0x38, 0x2d, 0x47, 0x54, 0x25, 0x3c, 0xb6, 0x8d, 0x87, 0x56, 0xf8, 0x88, 0x74, 0x09, + 0x66, 0x08, 0xa2, 0xd7, 0x37, 0x3c, 0xdd, 0x36, 0x90, 0x82, 0x4f, 0x6f, 0x2e, 0xa9, 0x24, 0xbe, + 0x65, 0xd3, 0x58, 0x63, 0x93, 0x29, 0x60, 0x8b, 0x5c, 0x69, 0x15, 0x1e, 0x24, 0xb0, 0x0e, 0x32, + 0x91, 0xa3, 0x7a, 0x48, 0x41, 0x9f, 0xed, 0xab, 0x86, 0xab, 0xa8, 0x66, 0x4b, 0xe9, 0xaa, 0x6e, + 0xb7, 0x3c, 0x8b, 0x09, 0x96, 0x53, 0x65, 0x41, 0x3e, 0x8b, 0x15, 0xd7, 0x98, 0x5e, 0x83, 0xa8, + 0xd5, 0xcd, 0xd6, 0x27, 0x55, 0xb7, 0x2b, 0xd5, 0xe0, 0x34, 0x61, 0x71, 0x3d, 0x47, 0x37, 0x3b, + 0x8a, 0xd6, 0x45, 0xda, 0x81, 0xd2, 0xf7, 0xda, 0x57, 0xca, 0x0f, 0x04, 0xdf, 0x4f, 0x2c, 0x6c, + 0x12, 0x9d, 0x15, 0xac, 0xb2, 0xe7, 0xb5, 0xaf, 0x48, 0x4d, 0x28, 0xe2, 0xc5, 0xe8, 0xe9, 0xb7, + 0x91, 0xd2, 0xb6, 0x1c, 0x52, 0x1a, 0x4b, 0x23, 0x52, 0x53, 0xc0, 0x83, 0x8b, 0xdb, 0x0c, 0xb0, + 0x69, 0xb5, 0x50, 0x2d, 0xdb, 0xdc, 0x69, 0x34, 0x56, 0xe5, 0x02, 0x67, 0xb9, 0x6e, 0x39, 0x38, + 0xa0, 0x3a, 0x96, 0xef, 0xe0, 0x02, 0x0d, 0xa8, 0x8e, 0xc5, 0xdd, 0x7b, 0x09, 0x66, 0x34, 0x8d, + 0xce, 0x59, 0xd7, 0x14, 0x76, 0xc6, 0x72, 0xcb, 0x62, 0xc8, 0x59, 0x9a, 0xb6, 0x46, 0x15, 0x58, + 0x8c, 0xbb, 0xd2, 0x55, 0x38, 0x35, 0x70, 0x56, 0x10, 0x38, 0x3d, 0x34, 0xcb, 0x28, 0xf4, 0x12, + 0xcc, 0xd8, 0x87, 0xc3, 0x40, 0x29, 0xf4, 0x46, 0xfb, 0x30, 0x0a, 0x7b, 0x0a, 0x66, 0xed, 0xae, + 0x3d, 0x8c, 0x7b, 0x3c, 0x88, 0x93, 0xec, 0xae, 0x1d, 0x05, 0x3e, 0x42, 0x0e, 0xdc, 0x0e, 0xd2, + 0x54, 0x0f, 0xb5, 0xca, 0x67, 0x82, 0xea, 0x81, 0x01, 0x69, 0x09, 0x44, 0x4d, 0x53, 0x90, 0xa9, + 0xee, 0x1b, 0x48, 0x51, 0x1d, 0x64, 0xaa, 0x6e, 0xf9, 0x5c, 0x50, 0xb9, 0xa4, 0x69, 0x0d, 0x32, + 0x5a, 0x27, 0x83, 0xd2, 0xe3, 0x30, 0x6d, 0xed, 0xdf, 0xd0, 0x68, 0x48, 0x2a, 0xb6, 0x83, 0xda, + 0xfa, 0x4b, 0xe5, 0x87, 0x89, 0x7f, 0xa7, 0xf0, 0x00, 0x09, 0xc8, 0x1d, 0x22, 0x96, 0x1e, 0x03, + 0x51, 0x73, 0xbb, 0xaa, 0x63, 0x93, 0x9c, 0xec, 0xda, 0xaa, 0x86, 0xca, 0x8f, 0x50, 0x55, 0x2a, + 0xdf, 0xe2, 0x62, 0xbc, 0x25, 0xdc, 0x5b, 0x7a, 0xdb, 0xe3, 0x8c, 0x8f, 0xd2, 0x2d, 0x41, 0x64, + 0x8c, 0x6d, 0x01, 0x44, 0xec, 0x8a, 0xd0, 0x8b, 0x17, 0x88, 0x5a, 0xc9, 0xee, 0xda, 0xc1, 0xf7, + 0x3e, 0x04, 0x93, 0x58, 0x73, 0xf0, 0xd2, 0xc7, 0x68, 0x43, 0x66, 0x77, 0x03, 0x6f, 0xfc, 0xc0, + 0x7a, 0xe3, 0x6a, 0x0d, 0x8a, 0xc1, 0xf8, 0x94, 0xf2, 0x40, 0x23, 0x54, 0x14, 0x70, 0xb3, 0xb2, + 0xb2, 0xbd, 0x8a, 0xdb, 0x8c, 0x17, 0x1b, 0x62, 0x0a, 0xb7, 0x3b, 0x1b, 0xeb, 0xbb, 0x0d, 0x45, + 0xde, 0xdb, 0xda, 0x5d, 0xdf, 0x6c, 0x88, 0xe9, 0x60, 0x5f, 0xfd, 0xdd, 0x14, 0x94, 0xc2, 0x47, + 0x24, 0xe9, 0xa7, 0xe1, 0x0c, 0xbf, 0xcf, 0x70, 0x91, 0xa7, 0xdc, 0xd2, 0x1d, 0xb2, 0x65, 0x7a, + 0x2a, 0x2d, 0x5f, 0xfe, 0xa2, 0xcd, 0x32, 0xad, 0x26, 0xf2, 0x9e, 0xd3, 0x1d, 0xbc, 0x21, 0x7a, + 0xaa, 0x27, 0x6d, 0xc0, 0x39, 0xd3, 0x52, 0x5c, 0x4f, 0x35, 0x5b, 0xaa, 0xd3, 0x52, 0x06, 0x37, + 0x49, 0x8a, 0xaa, 0x69, 0xc8, 0x75, 0x2d, 0x5a, 0xaa, 0x7c, 0x96, 0x8f, 0x98, 0x56, 0x93, 0x29, + 0x0f, 0x72, 0x78, 0x9d, 0xa9, 0x46, 0x02, 0x2c, 0x7d, 0x5c, 0x80, 0x3d, 0x00, 0xf9, 0x9e, 0x6a, + 0x2b, 0xc8, 0xf4, 0x9c, 0x43, 0xd2, 0x18, 0xe7, 0xe4, 0x5c, 0x4f, 0xb5, 0x1b, 0xf8, 0xf9, 0xc3, + 0x39, 0x9f, 0xfc, 0x6b, 0x1a, 0x8a, 0xc1, 0xe6, 0x18, 0x9f, 0x35, 0x34, 0x52, 0x47, 0x04, 0x92, + 0x69, 0x1e, 0xba, 0x6f, 0x2b, 0xbd, 0xb8, 0x82, 0x0b, 0x4c, 0x6d, 0x9c, 0xb6, 0xac, 0x32, 0x45, + 0xe2, 0xe2, 0x8e, 0x73, 0x0b, 0xa2, 0x2d, 0x42, 0x4e, 0x66, 0x4f, 0xd2, 0x1a, 0x8c, 0xdf, 0x70, + 0x09, 0xf7, 0x38, 0xe1, 0x7e, 0xf8, 0xfe, 0xdc, 0xcf, 0x36, 0x09, 0x79, 0xfe, 0xd9, 0xa6, 0xb2, + 0xb5, 0x2d, 0x6f, 0xd6, 0x37, 0x64, 0x06, 0x97, 0xce, 0x42, 0xc6, 0x50, 0x6f, 0x1f, 0x86, 0x4b, + 0x11, 0x11, 0x25, 0x75, 0xfc, 0x59, 0xc8, 0xdc, 0x42, 0xea, 0x41, 0xb8, 0x00, 0x10, 0xd1, 0x07, + 0x18, 0xfa, 0x4b, 0x90, 0x25, 0xfe, 0x92, 0x00, 0x98, 0xc7, 0xc4, 0x31, 0x29, 0x07, 0x99, 0x95, + 0x6d, 0x19, 0x87, 0xbf, 0x08, 0x45, 0x2a, 0x55, 0x76, 0xd6, 0x1b, 0x2b, 0x0d, 0x31, 0x55, 0xbd, + 0x04, 0xe3, 0xd4, 0x09, 0x78, 0x6b, 0xf8, 0x6e, 0x10, 0xc7, 0xd8, 0x23, 0xe3, 0x10, 0xf8, 0xe8, + 0xde, 0xe6, 0x72, 0x43, 0x16, 0x53, 0xc1, 0xe5, 0x75, 0xa1, 0x18, 0xec, 0x8b, 0x3f, 0x9c, 0x98, + 0xfa, 0x8e, 0x00, 0x85, 0x40, 0x9f, 0x8b, 0x1b, 0x14, 0xd5, 0x30, 0xac, 0x5b, 0x8a, 0x6a, 0xe8, + 0xaa, 0xcb, 0x82, 0x02, 0x88, 0xa8, 0x8e, 0x25, 0x49, 0x17, 0xed, 0x43, 0x31, 0xfe, 0x35, 0x01, + 0xc4, 0x68, 0x8b, 0x19, 0x31, 0x50, 0xf8, 0x89, 0x1a, 0xf8, 0xaa, 0x00, 0xa5, 0x70, 0x5f, 0x19, + 0x31, 0xef, 0xfc, 0x4f, 0xd4, 0xbc, 0xb7, 0x52, 0x30, 0x19, 0xea, 0x26, 0x93, 0x5a, 0xf7, 0x59, + 0x98, 0xd6, 0x5b, 0xa8, 0x67, 0x5b, 0x1e, 0x32, 0xb5, 0x43, 0xc5, 0x40, 0x37, 0x91, 0x51, 0xae, + 0x92, 0x44, 0xb1, 0x74, 0xff, 0x7e, 0x75, 0x71, 0x7d, 0x80, 0xdb, 0xc0, 0xb0, 0xda, 0xcc, 0xfa, + 0x6a, 0x63, 0x73, 0x67, 0x7b, 0xb7, 0xb1, 0xb5, 0xf2, 0x82, 0xb2, 0xb7, 0xf5, 0xb3, 0x5b, 0xdb, + 0xcf, 0x6d, 0xc9, 0xa2, 0x1e, 0x51, 0xfb, 0x00, 0xb7, 0xfa, 0x0e, 0x88, 0x51, 0xa3, 0xa4, 0x33, + 0x30, 0xca, 0x2c, 0x71, 0x4c, 0x9a, 0x81, 0xa9, 0xad, 0x6d, 0xa5, 0xb9, 0xbe, 0xda, 0x50, 0x1a, + 0xd7, 0xaf, 0x37, 0x56, 0x76, 0x9b, 0xf4, 0x06, 0xc2, 0xd7, 0xde, 0x0d, 0x6f, 0xea, 0x57, 0xd2, + 0x30, 0x33, 0xc2, 0x12, 0xa9, 0xce, 0xce, 0x0e, 0xf4, 0x38, 0xf3, 0xb1, 0x24, 0xd6, 0x2f, 0xe2, + 0x92, 0xbf, 0xa3, 0x3a, 0x1e, 0x3b, 0x6a, 0x3c, 0x06, 0xd8, 0x4b, 0xa6, 0xa7, 0xb7, 0x75, 0xe4, + 0xb0, 0x0b, 0x1b, 0x7a, 0xa0, 0x98, 0x1a, 0xc8, 0xe9, 0x9d, 0xcd, 0x4f, 0x81, 0x64, 0x5b, 0xae, + 0xee, 0xe9, 0x37, 0x91, 0xa2, 0x9b, 0xfc, 0x76, 0x07, 0x1f, 0x30, 0x32, 0xb2, 0xc8, 0x47, 0xd6, + 0x4d, 0xcf, 0xd7, 0x36, 0x51, 0x47, 0x8d, 0x68, 0xe3, 0x04, 0x9e, 0x96, 0x45, 0x3e, 0xe2, 0x6b, + 0x9f, 0x87, 0x62, 0xcb, 0xea, 0xe3, 0xae, 0x8b, 0xea, 0xe1, 0x7a, 0x21, 0xc8, 0x05, 0x2a, 0xf3, + 0x55, 0x58, 0x3f, 0x3d, 0xb8, 0x56, 0x2a, 0xca, 0x05, 0x2a, 0xa3, 0x2a, 0x8f, 0xc2, 0x94, 0xda, + 0xe9, 0x38, 0x98, 0x9c, 0x13, 0xd1, 0x13, 0x42, 0xc9, 0x17, 0x13, 0xc5, 0xb9, 0x67, 0x21, 0xc7, + 0xfd, 0x80, 0x4b, 0x32, 0xf6, 0x84, 0x62, 0xd3, 0x63, 0x6f, 0x6a, 0x21, 0x2f, 0xe7, 0x4c, 0x3e, + 0x78, 0x1e, 0x8a, 0xba, 0xab, 0x0c, 0x6e, 0xc9, 0x53, 0xf3, 0xa9, 0x85, 0x9c, 0x5c, 0xd0, 0x5d, + 0xff, 0x86, 0xb1, 0xfa, 0x7a, 0x0a, 0x4a, 0xe1, 0x5b, 0x7e, 0x69, 0x15, 0x72, 0x86, 0xa5, 0xa9, + 0x24, 0xb4, 0xe8, 0x4f, 0x4c, 0x0b, 0x31, 0x3f, 0x0c, 0x2c, 0x6e, 0x30, 0x7d, 0xd9, 0x47, 0xce, + 0xfd, 0xb3, 0x00, 0x39, 0x2e, 0x96, 0x4e, 0x43, 0xc6, 0x56, 0xbd, 0x2e, 0xa1, 0xcb, 0x2e, 0xa7, + 0x44, 0x41, 0x26, 0xcf, 0x58, 0xee, 0xda, 0xaa, 0x49, 0x42, 0x80, 0xc9, 0xf1, 0x33, 0x5e, 0x57, + 0x03, 0xa9, 0x2d, 0x72, 0xfc, 0xb0, 0x7a, 0x3d, 0x64, 0x7a, 0x2e, 0x5f, 0x57, 0x26, 0x5f, 0x61, + 0x62, 0xe9, 0x09, 0x98, 0xf6, 0x1c, 0x55, 0x37, 0x42, 0xba, 0x19, 0xa2, 0x2b, 0xf2, 0x01, 0x5f, + 0xb9, 0x06, 0x67, 0x39, 0x6f, 0x0b, 0x79, 0xaa, 0xd6, 0x45, 0xad, 0x01, 0x68, 0x9c, 0x5c, 0x33, + 0x9c, 0x61, 0x0a, 0xab, 0x6c, 0x9c, 0x63, 0xab, 0xdf, 0x17, 0x60, 0x9a, 0x1f, 0x98, 0x5a, 0xbe, + 0xb3, 0x36, 0x01, 0x54, 0xd3, 0xb4, 0xbc, 0xa0, 0xbb, 0x86, 0x43, 0x79, 0x08, 0xb7, 0x58, 0xf7, + 0x41, 0x72, 0x80, 0x60, 0xae, 0x07, 0x30, 0x18, 0x39, 0xd6, 0x6d, 0xe7, 0xa0, 0xc0, 0x7e, 0xc2, + 0x21, 0xbf, 0x03, 0xd2, 0x23, 0x36, 0x50, 0x11, 0x3e, 0x59, 0x49, 0xb3, 0x90, 0xdd, 0x47, 0x1d, + 0xdd, 0x64, 0x17, 0xb3, 0xf4, 0x81, 0x5f, 0x84, 0x64, 0xfc, 0x8b, 0x90, 0xe5, 0xcf, 0xc0, 0x8c, + 0x66, 0xf5, 0xa2, 0xe6, 0x2e, 0x8b, 0x91, 0x63, 0xbe, 0xfb, 0x49, 0xe1, 0x45, 0x18, 0xb4, 0x98, + 0xef, 0x09, 0xc2, 0x97, 0x53, 0xe9, 0xb5, 0x9d, 0xe5, 0xaf, 0xa5, 0xe6, 0xd6, 0x28, 0x74, 0x87, + 0xcf, 0x54, 0x46, 0x6d, 0x03, 0x69, 0xd8, 0x7a, 0xf8, 0xca, 0x13, 0xf0, 0xb1, 0x8e, 0xee, 0x75, + 0xfb, 0xfb, 0x8b, 0x9a, 0xd5, 0x5b, 0xea, 0x58, 0x1d, 0x6b, 0xf0, 0xd3, 0x27, 0x7e, 0x22, 0x0f, + 0xe4, 0x3f, 0xf6, 0xf3, 0x67, 0xde, 0x97, 0xce, 0xc5, 0xfe, 0x56, 0x5a, 0xdb, 0x82, 0x19, 0xa6, + 0xac, 0x90, 0xdf, 0x5f, 0xe8, 0x29, 0x42, 0xba, 0xef, 0x1d, 0x56, 0xf9, 0xeb, 0x6f, 0x93, 0x72, + 0x2d, 0x4f, 0x33, 0x28, 0x1e, 0xa3, 0x07, 0x8d, 0x9a, 0x0c, 0xa7, 0x42, 0x7c, 0x74, 0x6b, 0x22, + 0x27, 0x86, 0xf1, 0xbb, 0x8c, 0x71, 0x26, 0xc0, 0xd8, 0x64, 0xd0, 0xda, 0x0a, 0x4c, 0x9e, 0x84, + 0xeb, 0x1f, 0x19, 0x57, 0x11, 0x05, 0x49, 0xd6, 0x60, 0x8a, 0x90, 0x68, 0x7d, 0xd7, 0xb3, 0x7a, + 0x24, 0xef, 0xdd, 0x9f, 0xe6, 0x9f, 0xde, 0xa6, 0x7b, 0xa5, 0x84, 0x61, 0x2b, 0x3e, 0xaa, 0x56, + 0x03, 0xf2, 0x93, 0x53, 0x0b, 0x69, 0x46, 0x0c, 0xc3, 0x9b, 0xcc, 0x10, 0x5f, 0xbf, 0xf6, 0x69, + 0x98, 0xc5, 0xff, 0x93, 0xb4, 0x14, 0xb4, 0x24, 0xfe, 0xc2, 0xab, 0xfc, 0xfd, 0x97, 0xe9, 0x76, + 0x9c, 0xf1, 0x09, 0x02, 0x36, 0x05, 0x56, 0xb1, 0x83, 0x3c, 0x0f, 0x39, 0xae, 0xa2, 0x1a, 0xa3, + 0xcc, 0x0b, 0xdc, 0x18, 0x94, 0xbf, 0xf0, 0x4e, 0x78, 0x15, 0xd7, 0x28, 0xb2, 0x6e, 0x18, 0xb5, + 0x3d, 0x38, 0x33, 0x22, 0x2a, 0x12, 0x70, 0xbe, 0xc2, 0x38, 0x67, 0x87, 0x22, 0x03, 0xd3, 0xee, + 0x00, 0x97, 0xfb, 0x6b, 0x99, 0x80, 0xf3, 0x0f, 0x18, 0xa7, 0xc4, 0xb0, 0x7c, 0x49, 0x31, 0xe3, + 0xb3, 0x30, 0x7d, 0x13, 0x39, 0xfb, 0x96, 0xcb, 0x6e, 0x69, 0x12, 0xd0, 0xbd, 0xca, 0xe8, 0xa6, + 0x18, 0x90, 0x5c, 0xdb, 0x60, 0xae, 0xab, 0x90, 0x6b, 0xab, 0x1a, 0x4a, 0x40, 0xf1, 0x45, 0x46, + 0x31, 0x81, 0xf5, 0x31, 0xb4, 0x0e, 0xc5, 0x8e, 0xc5, 0x2a, 0x53, 0x3c, 0xfc, 0x35, 0x06, 0x2f, + 0x70, 0x0c, 0xa3, 0xb0, 0x2d, 0xbb, 0x6f, 0xe0, 0xb2, 0x15, 0x4f, 0xf1, 0x87, 0x9c, 0x82, 0x63, + 0x18, 0xc5, 0x09, 0xdc, 0xfa, 0x47, 0x9c, 0xc2, 0x0d, 0xf8, 0xf3, 0x19, 0x28, 0x58, 0xa6, 0x71, + 0x68, 0x99, 0x49, 0x8c, 0xf8, 0x12, 0x63, 0x00, 0x06, 0xc1, 0x04, 0xd7, 0x20, 0x9f, 0x74, 0x21, + 0xfe, 0xe4, 0x1d, 0xbe, 0x3d, 0xf8, 0x0a, 0xac, 0xc1, 0x14, 0x4f, 0x50, 0xba, 0x65, 0x26, 0xa0, + 0xf8, 0x0a, 0xa3, 0x28, 0x05, 0x60, 0x6c, 0x1a, 0x1e, 0x72, 0xbd, 0x0e, 0x4a, 0x42, 0xf2, 0x3a, + 0x9f, 0x06, 0x83, 0x30, 0x57, 0xee, 0x23, 0x53, 0xeb, 0x26, 0x63, 0xf8, 0x2a, 0x77, 0x25, 0xc7, + 0x60, 0x8a, 0x15, 0x98, 0xec, 0xa9, 0x8e, 0xdb, 0x55, 0x8d, 0x44, 0xcb, 0xf1, 0xa7, 0x8c, 0xa3, + 0xe8, 0x83, 0x98, 0x47, 0xfa, 0xe6, 0x49, 0x68, 0xbe, 0xc6, 0x3d, 0x12, 0x80, 0xb1, 0xad, 0xe7, + 0x7a, 0xe4, 0x4a, 0xeb, 0x24, 0x6c, 0x7f, 0xc6, 0xb7, 0x1e, 0xc5, 0x6e, 0x06, 0x19, 0xaf, 0x41, + 0xde, 0xd5, 0x6f, 0x27, 0xa2, 0xf9, 0x73, 0xbe, 0xd2, 0x04, 0x80, 0xc1, 0x2f, 0xc0, 0xd9, 0x91, + 0x65, 0x22, 0x01, 0xd9, 0x5f, 0x30, 0xb2, 0xd3, 0x23, 0x4a, 0x05, 0x4b, 0x09, 0x27, 0xa5, 0xfc, + 0x4b, 0x9e, 0x12, 0x50, 0x84, 0x6b, 0x07, 0x9f, 0x15, 0x5c, 0xb5, 0x7d, 0x32, 0xaf, 0xfd, 0x15, + 0xf7, 0x1a, 0xc5, 0x86, 0xbc, 0xb6, 0x0b, 0xa7, 0x19, 0xe3, 0xc9, 0xd6, 0xf5, 0x0d, 0x9e, 0x58, + 0x29, 0x7a, 0x2f, 0xbc, 0xba, 0x9f, 0x81, 0x39, 0xdf, 0x9d, 0xbc, 0x29, 0x75, 0x95, 0x9e, 0x6a, + 0x27, 0x60, 0xfe, 0x3a, 0x63, 0xe6, 0x19, 0xdf, 0xef, 0x6a, 0xdd, 0x4d, 0xd5, 0xc6, 0xe4, 0xcf, + 0x43, 0x99, 0x93, 0xf7, 0x4d, 0x07, 0x69, 0x56, 0xc7, 0xd4, 0x6f, 0xa3, 0x56, 0x02, 0xea, 0xbf, + 0x8e, 0x2c, 0xd5, 0x5e, 0x00, 0x8e, 0x99, 0xd7, 0x41, 0xf4, 0x7b, 0x15, 0x45, 0xef, 0xd9, 0x96, + 0xe3, 0xc5, 0x30, 0x7e, 0x83, 0xaf, 0x94, 0x8f, 0x5b, 0x27, 0xb0, 0x5a, 0x03, 0x4a, 0xe4, 0x31, + 0x69, 0x48, 0xfe, 0x0d, 0x23, 0x9a, 0x1c, 0xa0, 0x58, 0xe2, 0xd0, 0xac, 0x9e, 0xad, 0x3a, 0x49, + 0xf2, 0xdf, 0xdf, 0xf2, 0xc4, 0xc1, 0x20, 0x2c, 0x71, 0x78, 0x87, 0x36, 0xc2, 0xd5, 0x3e, 0x01, + 0xc3, 0x37, 0x79, 0xe2, 0xe0, 0x18, 0x46, 0xc1, 0x1b, 0x86, 0x04, 0x14, 0x7f, 0xc7, 0x29, 0x38, + 0x06, 0x53, 0x7c, 0x6a, 0x50, 0x68, 0x1d, 0xd4, 0xd1, 0x5d, 0xcf, 0xa1, 0xad, 0xf0, 0xfd, 0xa9, + 0xbe, 0xf5, 0x4e, 0xb8, 0x09, 0x93, 0x03, 0x50, 0x9c, 0x89, 0xd8, 0x15, 0x2a, 0x39, 0x29, 0xc5, + 0x1b, 0xf6, 0x6d, 0x9e, 0x89, 0x02, 0x30, 0x6c, 0x5b, 0xa0, 0x43, 0xc4, 0x6e, 0xd7, 0xf0, 0xf9, + 0x20, 0x01, 0xdd, 0x77, 0x22, 0xc6, 0x35, 0x39, 0x16, 0x73, 0x06, 0xfa, 0x9f, 0xbe, 0x79, 0x80, + 0x0e, 0x13, 0x45, 0xe7, 0xdf, 0x47, 0xfa, 0x9f, 0x3d, 0x8a, 0xa4, 0x39, 0x64, 0x2a, 0xd2, 0x4f, + 0x49, 0x71, 0x1f, 0xeb, 0x94, 0x7f, 0xf1, 0x1e, 0x9b, 0x6f, 0xb8, 0x9d, 0xaa, 0x6d, 0xe0, 0x20, + 0x0f, 0x37, 0x3d, 0xf1, 0x64, 0x2f, 0xdf, 0xf3, 0xe3, 0x3c, 0xd4, 0xf3, 0xd4, 0xae, 0xc3, 0x64, + 0xa8, 0xe1, 0x89, 0xa7, 0xfa, 0x25, 0x46, 0x55, 0x0c, 0xf6, 0x3b, 0xb5, 0x4b, 0x90, 0xc1, 0xcd, + 0x4b, 0x3c, 0xfc, 0x97, 0x19, 0x9c, 0xa8, 0xd7, 0x3e, 0x01, 0x39, 0xde, 0xb4, 0xc4, 0x43, 0x7f, + 0x85, 0x41, 0x7d, 0x08, 0x86, 0xf3, 0x86, 0x25, 0x1e, 0xfe, 0xab, 0x1c, 0xce, 0x21, 0x18, 0x9e, + 0xdc, 0x85, 0xff, 0xf0, 0x6b, 0x19, 0x56, 0x74, 0xb8, 0xef, 0xae, 0xc1, 0x04, 0xeb, 0x54, 0xe2, + 0xd1, 0x9f, 0x63, 0x2f, 0xe7, 0x88, 0xda, 0x53, 0x90, 0x4d, 0xe8, 0xf0, 0x5f, 0x67, 0x50, 0xaa, + 0x5f, 0x5b, 0x81, 0x42, 0xa0, 0x3b, 0x89, 0x87, 0xff, 0x06, 0x83, 0x07, 0x51, 0xd8, 0x74, 0xd6, + 0x9d, 0xc4, 0x13, 0xfc, 0x26, 0x37, 0x9d, 0x21, 0xb0, 0xdb, 0x78, 0x63, 0x12, 0x8f, 0xfe, 0x2d, + 0xee, 0x75, 0x0e, 0xa9, 0x3d, 0x03, 0x79, 0xbf, 0xd8, 0xc4, 0xe3, 0x7f, 0x9b, 0xe1, 0x07, 0x18, + 0xec, 0x81, 0x40, 0xb1, 0x8b, 0xa7, 0xf8, 0x1d, 0xee, 0x81, 0x00, 0x0a, 0x6f, 0xa3, 0x68, 0x03, + 0x13, 0xcf, 0xf4, 0xbb, 0x7c, 0x1b, 0x45, 0xfa, 0x17, 0xbc, 0x9a, 0x24, 0xe7, 0xc7, 0x53, 0xfc, + 0x1e, 0x5f, 0x4d, 0xa2, 0x8f, 0xcd, 0x88, 0x76, 0x04, 0xf1, 0x1c, 0xbf, 0xcf, 0xcd, 0x88, 0x34, + 0x04, 0xb5, 0x1d, 0x90, 0x86, 0xbb, 0x81, 0x78, 0xbe, 0xcf, 0x33, 0xbe, 0xe9, 0xa1, 0x66, 0xa0, + 0xf6, 0x1c, 0x9c, 0x1e, 0xdd, 0x09, 0xc4, 0xb3, 0x7e, 0xe1, 0x5e, 0xe4, 0xec, 0x16, 0x6c, 0x04, + 0x6a, 0xbb, 0x83, 0x92, 0x12, 0xec, 0x02, 0xe2, 0x69, 0x5f, 0xb9, 0x17, 0x4e, 0xdc, 0xc1, 0x26, + 0xa0, 0x56, 0x07, 0x18, 0x14, 0xe0, 0x78, 0xae, 0x57, 0x19, 0x57, 0x00, 0x84, 0xb7, 0x06, 0xab, + 0xbf, 0xf1, 0xf8, 0x2f, 0xf2, 0xad, 0xc1, 0x10, 0x78, 0x6b, 0xf0, 0xd2, 0x1b, 0x8f, 0x7e, 0x8d, + 0x6f, 0x0d, 0x0e, 0xc1, 0x91, 0x1d, 0xa8, 0x6e, 0xf1, 0x0c, 0x5f, 0xe2, 0x91, 0x1d, 0x40, 0xd5, + 0xb6, 0x60, 0x7a, 0xa8, 0x20, 0xc6, 0x53, 0x7d, 0x99, 0x51, 0x89, 0xd1, 0x7a, 0x18, 0x2c, 0x5e, + 0xac, 0x18, 0xc6, 0xb3, 0xfd, 0x71, 0xa4, 0x78, 0xb1, 0x5a, 0x58, 0xbb, 0x06, 0x39, 0xb3, 0x6f, + 0x18, 0x78, 0xf3, 0x48, 0xf7, 0xff, 0xc0, 0xae, 0xfc, 0xef, 0xef, 0x33, 0xef, 0x70, 0x40, 0xed, + 0x12, 0x64, 0x51, 0x6f, 0x1f, 0xb5, 0xe2, 0x90, 0xff, 0xf1, 0x3e, 0x4f, 0x98, 0x58, 0xbb, 0xf6, + 0x0c, 0x00, 0xbd, 0x1a, 0x21, 0x3f, 0xfb, 0xc5, 0x60, 0xff, 0xf3, 0x7d, 0xf6, 0xe9, 0xcb, 0x00, + 0x32, 0x20, 0xa0, 0x1f, 0xd2, 0xdc, 0x9f, 0xe0, 0x9d, 0x30, 0x01, 0x59, 0x91, 0xab, 0x30, 0x71, + 0xc3, 0xb5, 0x4c, 0x4f, 0xed, 0xc4, 0xa1, 0xff, 0x8b, 0xa1, 0xb9, 0x3e, 0x76, 0x58, 0xcf, 0x72, + 0x90, 0xa7, 0x76, 0xdc, 0x38, 0xec, 0x7f, 0x33, 0xac, 0x0f, 0xc0, 0x60, 0x4d, 0x75, 0xbd, 0x24, + 0xf3, 0xfe, 0x11, 0x07, 0x73, 0x00, 0x36, 0x1a, 0xff, 0x7f, 0x80, 0x0e, 0xe3, 0xb0, 0xef, 0x72, + 0xa3, 0x99, 0x7e, 0xed, 0x13, 0x90, 0xc7, 0xff, 0xd2, 0xef, 0xd9, 0x62, 0xc0, 0xff, 0xc3, 0xc0, + 0x03, 0x04, 0x7e, 0xb3, 0xeb, 0xb5, 0x3c, 0x3d, 0xde, 0xd9, 0xff, 0xcb, 0x56, 0x9a, 0xeb, 0xd7, + 0xea, 0x50, 0x70, 0xbd, 0x56, 0xab, 0xcf, 0xfa, 0xd3, 0x18, 0xf8, 0xff, 0xbd, 0xef, 0x5f, 0x59, + 0xf8, 0x18, 0xbc, 0xda, 0xb7, 0x0e, 0x3c, 0xdb, 0x22, 0x3f, 0x73, 0xc4, 0x31, 0xdc, 0x63, 0x0c, + 0x01, 0xc8, 0x72, 0x63, 0xf4, 0xf5, 0x2d, 0xac, 0x59, 0x6b, 0x16, 0xbd, 0xb8, 0x7d, 0xb1, 0x1a, + 0x7f, 0x03, 0x0b, 0x6f, 0xa4, 0xe1, 0x94, 0x66, 0xf5, 0xf6, 0x2d, 0x77, 0x69, 0xdf, 0xf2, 0xba, + 0x4b, 0x3d, 0xd5, 0x66, 0x17, 0xb2, 0x85, 0x9e, 0x6a, 0xb3, 0x2f, 0x5f, 0xdd, 0xb9, 0x93, 0x5d, + 0xe6, 0x56, 0x7f, 0x01, 0x26, 0x36, 0x55, 0x7b, 0x17, 0xb9, 0x9e, 0x44, 0xdc, 0x4c, 0x3e, 0xb1, + 0x62, 0x37, 0xe4, 0xf3, 0x8b, 0x01, 0xe2, 0x45, 0xa6, 0xb6, 0xd8, 0xf4, 0x9c, 0xa6, 0xe7, 0x90, + 0xaf, 0x09, 0xe4, 0x71, 0x97, 0x3c, 0xcc, 0x5d, 0x85, 0x42, 0x40, 0x2c, 0x89, 0x90, 0x3e, 0x40, + 0x87, 0xec, 0x23, 0x2b, 0xfc, 0xaf, 0x34, 0x3b, 0xf8, 0x0a, 0x12, 0xcb, 0xe8, 0x43, 0x2d, 0x75, + 0x45, 0xa8, 0x3e, 0x0d, 0x13, 0xd7, 0xd5, 0x03, 0xb4, 0xa9, 0xda, 0xd2, 0x45, 0x98, 0x40, 0xa6, + 0xe7, 0xe8, 0xc8, 0x65, 0x06, 0x9c, 0x0d, 0x19, 0xc0, 0xd4, 0xe8, 0x9b, 0xb9, 0x66, 0x75, 0x03, + 0x8a, 0xc1, 0x81, 0xa4, 0xef, 0xc6, 0x52, 0xcb, 0xeb, 0xb2, 0xaf, 0xa2, 0xf3, 0x32, 0x7d, 0x58, + 0x5e, 0x7d, 0xf3, 0x6e, 0x65, 0xec, 0x7b, 0x77, 0x2b, 0x63, 0xff, 0x72, 0xb7, 0x32, 0xf6, 0xd6, + 0xdd, 0x8a, 0xf0, 0xee, 0xdd, 0x8a, 0xf0, 0xde, 0xdd, 0x8a, 0x70, 0xe7, 0xa8, 0x22, 0x7c, 0xf5, + 0xa8, 0x22, 0xbc, 0x71, 0x54, 0x11, 0xbe, 0x75, 0x54, 0x11, 0xde, 0x3c, 0xaa, 0x08, 0xdf, 0x3b, + 0xaa, 0x08, 0x6f, 0x1d, 0x55, 0x84, 0x1f, 0x1e, 0x55, 0xc6, 0xde, 0x3d, 0xaa, 0x08, 0xef, 0x1d, + 0x55, 0xc6, 0xee, 0xfc, 0xa0, 0x32, 0xb6, 0x3f, 0x4e, 0x7c, 0x7b, 0xf1, 0xff, 0x03, 0x00, 0x00, + 0xff, 0xff, 0xc7, 0x48, 0xca, 0xd1, 0x4e, 0x34, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -936,6 +941,9 @@ return dAtA } func (m *MapTest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StrStr) > 0 { @@ -953,6 +961,9 @@ } func (m *FakeMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Entries) > 0 { @@ -968,6 +979,9 @@ } func (m *FakeMapEntry) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Key) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/marshaler/map.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/marshaler/map.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/marshaler/map.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/marshaler/map.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -166,251 +166,256 @@ func MapDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3894 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x6c, 0x23, 0xd7, - 0x75, 0xd6, 0xf0, 0x4f, 0xe4, 0x21, 0x45, 0x8d, 0x46, 0xf2, 0x2e, 0x57, 0x8e, 0xb9, 0x5a, 0xda, - 0x8e, 0x65, 0xbb, 0xa1, 0x82, 0x5d, 0xef, 0x7a, 0x97, 0xdb, 0xd8, 0xa5, 0x28, 0xae, 0x42, 0x57, - 0x12, 0x99, 0xa1, 0x14, 0xff, 0x04, 0xc5, 0x60, 0x34, 0xbc, 0xa4, 0x66, 0x77, 0x38, 0x33, 0x99, - 0x19, 0xee, 0x5a, 0x8b, 0x02, 0xdd, 0xc2, 0xfd, 0x41, 0x50, 0xf4, 0xbf, 0x40, 0x13, 0xd7, 0x71, - 0x9b, 0x02, 0xa9, 0xd3, 0xf4, 0x2f, 0x69, 0x9a, 0x34, 0xe9, 0x53, 0x5f, 0xd2, 0xfa, 0xa9, 0x48, - 0xde, 0xfa, 0xd0, 0x07, 0xaf, 0x62, 0xa0, 0x69, 0xeb, 0x36, 0x6e, 0xeb, 0x07, 0x03, 0xfb, 0x12, - 0xdc, 0xbf, 0xe1, 0x0c, 0x49, 0xed, 0x50, 0x01, 0xec, 0x3c, 0x49, 0x73, 0xee, 0xf9, 0xbe, 0x39, - 0xf7, 0xdc, 0x73, 0xcf, 0x39, 0xf7, 0x0e, 0xe1, 0x47, 0x57, 0x60, 0xa5, 0x67, 0x59, 0x3d, 0x03, - 0xad, 0xd9, 0x8e, 0xe5, 0x59, 0xfb, 0x83, 0xee, 0x5a, 0x07, 0xb9, 0x9a, 0xa3, 0xdb, 0x9e, 0xe5, - 0x94, 0x89, 0x4c, 0x9a, 0xa7, 0x1a, 0x65, 0xae, 0x51, 0xda, 0x86, 0x85, 0x6b, 0xba, 0x81, 0x36, - 0x7c, 0xc5, 0x36, 0xf2, 0xa4, 0xcb, 0x90, 0xe8, 0xea, 0x06, 0x2a, 0x08, 0x2b, 0xf1, 0xd5, 0xec, - 0xf9, 0x47, 0xca, 0x23, 0xa0, 0x72, 0x18, 0xd1, 0xc2, 0x62, 0x99, 0x20, 0x4a, 0x6f, 0x27, 0x60, - 0x71, 0xc2, 0xa8, 0x24, 0x41, 0xc2, 0x54, 0xfb, 0x98, 0x51, 0x58, 0xcd, 0xc8, 0xe4, 0x7f, 0xa9, - 0x00, 0xb3, 0xb6, 0xaa, 0xdd, 0x50, 0x7b, 0xa8, 0x10, 0x23, 0x62, 0xfe, 0x28, 0x15, 0x01, 0x3a, - 0xc8, 0x46, 0x66, 0x07, 0x99, 0xda, 0x61, 0x21, 0xbe, 0x12, 0x5f, 0xcd, 0xc8, 0x01, 0x89, 0xf4, - 0x24, 0x2c, 0xd8, 0x83, 0x7d, 0x43, 0xd7, 0x94, 0x80, 0x1a, 0xac, 0xc4, 0x57, 0x93, 0xb2, 0x48, - 0x07, 0x36, 0x86, 0xca, 0x8f, 0xc1, 0xfc, 0x2d, 0xa4, 0xde, 0x08, 0xaa, 0x66, 0x89, 0x6a, 0x1e, - 0x8b, 0x03, 0x8a, 0x35, 0xc8, 0xf5, 0x91, 0xeb, 0xaa, 0x3d, 0xa4, 0x78, 0x87, 0x36, 0x2a, 0x24, - 0xc8, 0xec, 0x57, 0xc6, 0x66, 0x3f, 0x3a, 0xf3, 0x2c, 0x43, 0xed, 0x1e, 0xda, 0x48, 0xaa, 0x42, - 0x06, 0x99, 0x83, 0x3e, 0x65, 0x48, 0x1e, 0xe3, 0xbf, 0xba, 0x39, 0xe8, 0x8f, 0xb2, 0xa4, 0x31, - 0x8c, 0x51, 0xcc, 0xba, 0xc8, 0xb9, 0xa9, 0x6b, 0xa8, 0x90, 0x22, 0x04, 0x8f, 0x8d, 0x11, 0xb4, - 0xe9, 0xf8, 0x28, 0x07, 0xc7, 0x49, 0x35, 0xc8, 0xa0, 0x97, 0x3d, 0x64, 0xba, 0xba, 0x65, 0x16, - 0x66, 0x09, 0xc9, 0xa3, 0x13, 0x56, 0x11, 0x19, 0x9d, 0x51, 0x8a, 0x21, 0x4e, 0xba, 0x04, 0xb3, - 0x96, 0xed, 0xe9, 0x96, 0xe9, 0x16, 0xd2, 0x2b, 0xc2, 0x6a, 0xf6, 0xfc, 0x47, 0x26, 0x06, 0x42, - 0x93, 0xea, 0xc8, 0x5c, 0x59, 0x6a, 0x80, 0xe8, 0x5a, 0x03, 0x47, 0x43, 0x8a, 0x66, 0x75, 0x90, - 0xa2, 0x9b, 0x5d, 0xab, 0x90, 0x21, 0x04, 0x67, 0xc7, 0x27, 0x42, 0x14, 0x6b, 0x56, 0x07, 0x35, - 0xcc, 0xae, 0x25, 0xe7, 0xdd, 0xd0, 0xb3, 0x74, 0x0a, 0x52, 0xee, 0xa1, 0xe9, 0xa9, 0x2f, 0x17, - 0x72, 0x24, 0x42, 0xd8, 0x53, 0xe9, 0x3b, 0x29, 0x98, 0x9f, 0x26, 0xc4, 0xae, 0x42, 0xb2, 0x8b, - 0x67, 0x59, 0x88, 0x9d, 0xc4, 0x07, 0x14, 0x13, 0x76, 0x62, 0xea, 0x27, 0x74, 0x62, 0x15, 0xb2, - 0x26, 0x72, 0x3d, 0xd4, 0xa1, 0x11, 0x11, 0x9f, 0x32, 0xa6, 0x80, 0x82, 0xc6, 0x43, 0x2a, 0xf1, - 0x13, 0x85, 0xd4, 0x0b, 0x30, 0xef, 0x9b, 0xa4, 0x38, 0xaa, 0xd9, 0xe3, 0xb1, 0xb9, 0x16, 0x65, - 0x49, 0xb9, 0xce, 0x71, 0x32, 0x86, 0xc9, 0x79, 0x14, 0x7a, 0x96, 0x36, 0x00, 0x2c, 0x13, 0x59, - 0x5d, 0xa5, 0x83, 0x34, 0xa3, 0x90, 0x3e, 0xc6, 0x4b, 0x4d, 0xac, 0x32, 0xe6, 0x25, 0x8b, 0x4a, - 0x35, 0x43, 0xba, 0x32, 0x0c, 0xb5, 0xd9, 0x63, 0x22, 0x65, 0x9b, 0x6e, 0xb2, 0xb1, 0x68, 0xdb, - 0x83, 0xbc, 0x83, 0x70, 0xdc, 0xa3, 0x0e, 0x9b, 0x59, 0x86, 0x18, 0x51, 0x8e, 0x9c, 0x99, 0xcc, - 0x60, 0x74, 0x62, 0x73, 0x4e, 0xf0, 0x51, 0x7a, 0x18, 0x7c, 0x81, 0x42, 0xc2, 0x0a, 0x48, 0x16, - 0xca, 0x71, 0xe1, 0x8e, 0xda, 0x47, 0xcb, 0xb7, 0x21, 0x1f, 0x76, 0x8f, 0xb4, 0x04, 0x49, 0xd7, - 0x53, 0x1d, 0x8f, 0x44, 0x61, 0x52, 0xa6, 0x0f, 0x92, 0x08, 0x71, 0x64, 0x76, 0x48, 0x96, 0x4b, - 0xca, 0xf8, 0x5f, 0xe9, 0xe7, 0x86, 0x13, 0x8e, 0x93, 0x09, 0x7f, 0x74, 0x7c, 0x45, 0x43, 0xcc, - 0xa3, 0xf3, 0x5e, 0x7e, 0x1a, 0xe6, 0x42, 0x13, 0x98, 0xf6, 0xd5, 0xa5, 0x5f, 0x84, 0x07, 0x26, - 0x52, 0x4b, 0x2f, 0xc0, 0xd2, 0xc0, 0xd4, 0x4d, 0x0f, 0x39, 0xb6, 0x83, 0x70, 0xc4, 0xd2, 0x57, - 0x15, 0xfe, 0x7d, 0xf6, 0x98, 0x98, 0xdb, 0x0b, 0x6a, 0x53, 0x16, 0x79, 0x71, 0x30, 0x2e, 0x7c, - 0x22, 0x93, 0xfe, 0xe1, 0xac, 0x78, 0xe7, 0xce, 0x9d, 0x3b, 0xb1, 0xd2, 0xe7, 0x53, 0xb0, 0x34, - 0x69, 0xcf, 0x4c, 0xdc, 0xbe, 0xa7, 0x20, 0x65, 0x0e, 0xfa, 0xfb, 0xc8, 0x21, 0x4e, 0x4a, 0xca, - 0xec, 0x49, 0xaa, 0x42, 0xd2, 0x50, 0xf7, 0x91, 0x51, 0x48, 0xac, 0x08, 0xab, 0xf9, 0xf3, 0x4f, - 0x4e, 0xb5, 0x2b, 0xcb, 0x5b, 0x18, 0x22, 0x53, 0xa4, 0xf4, 0x0c, 0x24, 0x58, 0x8a, 0xc6, 0x0c, - 0x4f, 0x4c, 0xc7, 0x80, 0xf7, 0x92, 0x4c, 0x70, 0xd2, 0x83, 0x90, 0xc1, 0x7f, 0x69, 0x6c, 0xa4, - 0x88, 0xcd, 0x69, 0x2c, 0xc0, 0x71, 0x21, 0x2d, 0x43, 0x9a, 0x6c, 0x93, 0x0e, 0xe2, 0xa5, 0xcd, - 0x7f, 0xc6, 0x81, 0xd5, 0x41, 0x5d, 0x75, 0x60, 0x78, 0xca, 0x4d, 0xd5, 0x18, 0x20, 0x12, 0xf0, - 0x19, 0x39, 0xc7, 0x84, 0x9f, 0xc6, 0x32, 0xe9, 0x2c, 0x64, 0xe9, 0xae, 0xd2, 0xcd, 0x0e, 0x7a, - 0x99, 0x64, 0xcf, 0xa4, 0x4c, 0x37, 0x5a, 0x03, 0x4b, 0xf0, 0xeb, 0xaf, 0xbb, 0x96, 0xc9, 0x43, - 0x93, 0xbc, 0x02, 0x0b, 0xc8, 0xeb, 0x9f, 0x1e, 0x4d, 0xdc, 0x0f, 0x4d, 0x9e, 0xde, 0x68, 0x4c, - 0x95, 0xbe, 0x15, 0x83, 0x04, 0xc9, 0x17, 0xf3, 0x90, 0xdd, 0x7d, 0xb1, 0x55, 0x57, 0x36, 0x9a, - 0x7b, 0xeb, 0x5b, 0x75, 0x51, 0x90, 0xf2, 0x00, 0x44, 0x70, 0x6d, 0xab, 0x59, 0xdd, 0x15, 0x63, - 0xfe, 0x73, 0x63, 0x67, 0xf7, 0xd2, 0x53, 0x62, 0xdc, 0x07, 0xec, 0x51, 0x41, 0x22, 0xa8, 0x70, - 0xe1, 0xbc, 0x98, 0x94, 0x44, 0xc8, 0x51, 0x82, 0xc6, 0x0b, 0xf5, 0x8d, 0x4b, 0x4f, 0x89, 0xa9, - 0xb0, 0xe4, 0xc2, 0x79, 0x71, 0x56, 0x9a, 0x83, 0x0c, 0x91, 0xac, 0x37, 0x9b, 0x5b, 0x62, 0xda, - 0xe7, 0x6c, 0xef, 0xca, 0x8d, 0x9d, 0x4d, 0x31, 0xe3, 0x73, 0x6e, 0xca, 0xcd, 0xbd, 0x96, 0x08, - 0x3e, 0xc3, 0x76, 0xbd, 0xdd, 0xae, 0x6e, 0xd6, 0xc5, 0xac, 0xaf, 0xb1, 0xfe, 0xe2, 0x6e, 0xbd, - 0x2d, 0xe6, 0x42, 0x66, 0x5d, 0x38, 0x2f, 0xce, 0xf9, 0xaf, 0xa8, 0xef, 0xec, 0x6d, 0x8b, 0x79, - 0x69, 0x01, 0xe6, 0xe8, 0x2b, 0xb8, 0x11, 0xf3, 0x23, 0xa2, 0x4b, 0x4f, 0x89, 0xe2, 0xd0, 0x10, - 0xca, 0xb2, 0x10, 0x12, 0x5c, 0x7a, 0x4a, 0x94, 0x4a, 0x35, 0x48, 0x92, 0xe8, 0x92, 0x24, 0xc8, - 0x6f, 0x55, 0xd7, 0xeb, 0x5b, 0x4a, 0xb3, 0xb5, 0xdb, 0x68, 0xee, 0x54, 0xb7, 0x44, 0x61, 0x28, - 0x93, 0xeb, 0x9f, 0xda, 0x6b, 0xc8, 0xf5, 0x0d, 0x31, 0x16, 0x94, 0xb5, 0xea, 0xd5, 0xdd, 0xfa, - 0x86, 0x18, 0x2f, 0x69, 0xb0, 0x34, 0x29, 0x4f, 0x4e, 0xdc, 0x19, 0x81, 0x25, 0x8e, 0x1d, 0xb3, - 0xc4, 0x84, 0x6b, 0x6c, 0x89, 0x7f, 0x10, 0x83, 0xc5, 0x09, 0xb5, 0x62, 0xe2, 0x4b, 0x9e, 0x85, - 0x24, 0x0d, 0x51, 0x5a, 0x3d, 0x1f, 0x9f, 0x58, 0x74, 0x48, 0xc0, 0x8e, 0x55, 0x50, 0x82, 0x0b, - 0x76, 0x10, 0xf1, 0x63, 0x3a, 0x08, 0x4c, 0x31, 0x96, 0xd3, 0x7f, 0x61, 0x2c, 0xa7, 0xd3, 0xb2, - 0x77, 0x69, 0x9a, 0xb2, 0x47, 0x64, 0x27, 0xcb, 0xed, 0xc9, 0x09, 0xb9, 0xfd, 0x2a, 0x2c, 0x8c, - 0x11, 0x4d, 0x9d, 0x63, 0x5f, 0x11, 0xa0, 0x70, 0x9c, 0x73, 0x22, 0x32, 0x5d, 0x2c, 0x94, 0xe9, - 0xae, 0x8e, 0x7a, 0xf0, 0xdc, 0xf1, 0x8b, 0x30, 0xb6, 0xd6, 0x6f, 0x08, 0x70, 0x6a, 0x72, 0xa7, - 0x38, 0xd1, 0x86, 0x67, 0x20, 0xd5, 0x47, 0xde, 0x81, 0xc5, 0xbb, 0xa5, 0x8f, 0x4e, 0xa8, 0xc1, - 0x78, 0x78, 0x74, 0xb1, 0x19, 0x2a, 0x58, 0xc4, 0xe3, 0xc7, 0xb5, 0x7b, 0xd4, 0x9a, 0x31, 0x4b, - 0x3f, 0x17, 0x83, 0x07, 0x26, 0x92, 0x4f, 0x34, 0xf4, 0x21, 0x00, 0xdd, 0xb4, 0x07, 0x1e, 0xed, - 0x88, 0x68, 0x82, 0xcd, 0x10, 0x09, 0x49, 0x5e, 0x38, 0x79, 0x0e, 0x3c, 0x7f, 0x3c, 0x4e, 0xc6, - 0x81, 0x8a, 0x88, 0xc2, 0xe5, 0xa1, 0xa1, 0x09, 0x62, 0x68, 0xf1, 0x98, 0x99, 0x8e, 0x05, 0xe6, - 0xc7, 0x41, 0xd4, 0x0c, 0x1d, 0x99, 0x9e, 0xe2, 0x7a, 0x0e, 0x52, 0xfb, 0xba, 0xd9, 0x23, 0x15, - 0x24, 0x5d, 0x49, 0x76, 0x55, 0xc3, 0x45, 0xf2, 0x3c, 0x1d, 0x6e, 0xf3, 0x51, 0x8c, 0x20, 0x01, - 0xe4, 0x04, 0x10, 0xa9, 0x10, 0x82, 0x0e, 0xfb, 0x88, 0xd2, 0x37, 0xd2, 0x90, 0x0d, 0xf4, 0xd5, - 0xd2, 0x39, 0xc8, 0x5d, 0x57, 0x6f, 0xaa, 0x0a, 0x3f, 0x2b, 0x51, 0x4f, 0x64, 0xb1, 0xac, 0xc5, - 0xce, 0x4b, 0x1f, 0x87, 0x25, 0xa2, 0x62, 0x0d, 0x3c, 0xe4, 0x28, 0x9a, 0xa1, 0xba, 0x2e, 0x71, - 0x5a, 0x9a, 0xa8, 0x4a, 0x78, 0xac, 0x89, 0x87, 0x6a, 0x7c, 0x44, 0xba, 0x08, 0x8b, 0x04, 0xd1, - 0x1f, 0x18, 0x9e, 0x6e, 0x1b, 0x48, 0xc1, 0xa7, 0x37, 0x97, 0x54, 0x12, 0xdf, 0xb2, 0x05, 0xac, - 0xb1, 0xcd, 0x14, 0xb0, 0x45, 0xae, 0xb4, 0x01, 0x0f, 0x11, 0x58, 0x0f, 0x99, 0xc8, 0x51, 0x3d, - 0xa4, 0xa0, 0xcf, 0x0e, 0x54, 0xc3, 0x55, 0x54, 0xb3, 0xa3, 0x1c, 0xa8, 0xee, 0x41, 0x61, 0x09, - 0x13, 0xac, 0xc7, 0x0a, 0x82, 0x7c, 0x06, 0x2b, 0x6e, 0x32, 0xbd, 0x3a, 0x51, 0xab, 0x9a, 0x9d, - 0x4f, 0xaa, 0xee, 0x81, 0x54, 0x81, 0x53, 0x84, 0xc5, 0xf5, 0x1c, 0xdd, 0xec, 0x29, 0xda, 0x01, - 0xd2, 0x6e, 0x28, 0x03, 0xaf, 0x7b, 0xb9, 0xf0, 0x60, 0xf0, 0xfd, 0xc4, 0xc2, 0x36, 0xd1, 0xa9, - 0x61, 0x95, 0x3d, 0xaf, 0x7b, 0x59, 0x6a, 0x43, 0x0e, 0x2f, 0x46, 0x5f, 0xbf, 0x8d, 0x94, 0xae, - 0xe5, 0x90, 0xd2, 0x98, 0x9f, 0x90, 0x9a, 0x02, 0x1e, 0x2c, 0x37, 0x19, 0x60, 0xdb, 0xea, 0xa0, - 0x4a, 0xb2, 0xdd, 0xaa, 0xd7, 0x37, 0xe4, 0x2c, 0x67, 0xb9, 0x66, 0x39, 0x38, 0xa0, 0x7a, 0x96, - 0xef, 0xe0, 0x2c, 0x0d, 0xa8, 0x9e, 0xc5, 0xdd, 0x7b, 0x11, 0x16, 0x35, 0x8d, 0xce, 0x59, 0xd7, - 0x14, 0x76, 0xc6, 0x72, 0x0b, 0x62, 0xc8, 0x59, 0x9a, 0xb6, 0x49, 0x15, 0x58, 0x8c, 0xbb, 0xd2, - 0x15, 0x78, 0x60, 0xe8, 0xac, 0x20, 0x70, 0x61, 0x6c, 0x96, 0xa3, 0xd0, 0x8b, 0xb0, 0x68, 0x1f, - 0x8e, 0x03, 0xa5, 0xd0, 0x1b, 0xed, 0xc3, 0x51, 0xd8, 0xd3, 0xb0, 0x64, 0x1f, 0xd8, 0xe3, 0xb8, - 0x27, 0x82, 0x38, 0xc9, 0x3e, 0xb0, 0x47, 0x81, 0x8f, 0x92, 0x03, 0xb7, 0x83, 0x34, 0xd5, 0x43, - 0x9d, 0xc2, 0xe9, 0xa0, 0x7a, 0x60, 0x40, 0x5a, 0x03, 0x51, 0xd3, 0x14, 0x64, 0xaa, 0xfb, 0x06, - 0x52, 0x54, 0x07, 0x99, 0xaa, 0x5b, 0x38, 0x1b, 0x54, 0xce, 0x6b, 0x5a, 0x9d, 0x8c, 0x56, 0xc9, - 0xa0, 0xf4, 0x04, 0x2c, 0x58, 0xfb, 0xd7, 0x35, 0x1a, 0x92, 0x8a, 0xed, 0xa0, 0xae, 0xfe, 0x72, - 0xe1, 0x11, 0xe2, 0xdf, 0x79, 0x3c, 0x40, 0x02, 0xb2, 0x45, 0xc4, 0xd2, 0xe3, 0x20, 0x6a, 0xee, - 0x81, 0xea, 0xd8, 0x24, 0x27, 0xbb, 0xb6, 0xaa, 0xa1, 0xc2, 0xa3, 0x54, 0x95, 0xca, 0x77, 0xb8, - 0x18, 0x6f, 0x09, 0xf7, 0x96, 0xde, 0xf5, 0x38, 0xe3, 0x63, 0x74, 0x4b, 0x10, 0x19, 0x63, 0x5b, - 0x05, 0x11, 0xbb, 0x22, 0xf4, 0xe2, 0x55, 0xa2, 0x96, 0xb7, 0x0f, 0xec, 0xe0, 0x7b, 0x1f, 0x86, - 0x39, 0xac, 0x39, 0x7c, 0xe9, 0xe3, 0xb4, 0x21, 0xb3, 0x0f, 0x02, 0x6f, 0xfc, 0xc0, 0x7a, 0xe3, - 0x52, 0x05, 0x72, 0xc1, 0xf8, 0x94, 0x32, 0x40, 0x23, 0x54, 0x14, 0x70, 0xb3, 0x52, 0x6b, 0x6e, - 0xe0, 0x36, 0xe3, 0xa5, 0xba, 0x18, 0xc3, 0xed, 0xce, 0x56, 0x63, 0xb7, 0xae, 0xc8, 0x7b, 0x3b, - 0xbb, 0x8d, 0xed, 0xba, 0x18, 0x0f, 0xf6, 0xd5, 0xdf, 0x8d, 0x41, 0x3e, 0x7c, 0x44, 0x92, 0x7e, - 0x16, 0x4e, 0xf3, 0xfb, 0x0c, 0x17, 0x79, 0xca, 0x2d, 0xdd, 0x21, 0x5b, 0xa6, 0xaf, 0xd2, 0xf2, - 0xe5, 0x2f, 0xda, 0x12, 0xd3, 0x6a, 0x23, 0xef, 0x79, 0xdd, 0xc1, 0x1b, 0xa2, 0xaf, 0x7a, 0xd2, - 0x16, 0x9c, 0x35, 0x2d, 0xc5, 0xf5, 0x54, 0xb3, 0xa3, 0x3a, 0x1d, 0x65, 0x78, 0x93, 0xa4, 0xa8, - 0x9a, 0x86, 0x5c, 0xd7, 0xa2, 0xa5, 0xca, 0x67, 0xf9, 0x88, 0x69, 0xb5, 0x99, 0xf2, 0x30, 0x87, - 0x57, 0x99, 0xea, 0x48, 0x80, 0xc5, 0x8f, 0x0b, 0xb0, 0x07, 0x21, 0xd3, 0x57, 0x6d, 0x05, 0x99, - 0x9e, 0x73, 0x48, 0x1a, 0xe3, 0xb4, 0x9c, 0xee, 0xab, 0x76, 0x1d, 0x3f, 0x7f, 0x38, 0xe7, 0x93, - 0x7f, 0x8b, 0x43, 0x2e, 0xd8, 0x1c, 0xe3, 0xb3, 0x86, 0x46, 0xea, 0x88, 0x40, 0x32, 0xcd, 0xc3, - 0xf7, 0x6d, 0xa5, 0xcb, 0x35, 0x5c, 0x60, 0x2a, 0x29, 0xda, 0xb2, 0xca, 0x14, 0x89, 0x8b, 0x3b, - 0xce, 0x2d, 0x88, 0xb6, 0x08, 0x69, 0x99, 0x3d, 0x49, 0x9b, 0x90, 0xba, 0xee, 0x12, 0xee, 0x14, - 0xe1, 0x7e, 0xe4, 0xfe, 0xdc, 0xcf, 0xb5, 0x09, 0x79, 0xe6, 0xb9, 0xb6, 0xb2, 0xd3, 0x94, 0xb7, - 0xab, 0x5b, 0x32, 0x83, 0x4b, 0x67, 0x20, 0x61, 0xa8, 0xb7, 0x0f, 0xc3, 0xa5, 0x88, 0x88, 0xa6, - 0x75, 0xfc, 0x19, 0x48, 0xdc, 0x42, 0xea, 0x8d, 0x70, 0x01, 0x20, 0xa2, 0x0f, 0x30, 0xf4, 0xd7, - 0x20, 0x49, 0xfc, 0x25, 0x01, 0x30, 0x8f, 0x89, 0x33, 0x52, 0x1a, 0x12, 0xb5, 0xa6, 0x8c, 0xc3, - 0x5f, 0x84, 0x1c, 0x95, 0x2a, 0xad, 0x46, 0xbd, 0x56, 0x17, 0x63, 0xa5, 0x8b, 0x90, 0xa2, 0x4e, - 0xc0, 0x5b, 0xc3, 0x77, 0x83, 0x38, 0xc3, 0x1e, 0x19, 0x87, 0xc0, 0x47, 0xf7, 0xb6, 0xd7, 0xeb, - 0xb2, 0x18, 0x0b, 0x2e, 0xaf, 0x0b, 0xb9, 0x60, 0x5f, 0xfc, 0xe1, 0xc4, 0xd4, 0x3f, 0x08, 0x90, - 0x0d, 0xf4, 0xb9, 0xb8, 0x41, 0x51, 0x0d, 0xc3, 0xba, 0xa5, 0xa8, 0x86, 0xae, 0xba, 0x2c, 0x28, - 0x80, 0x88, 0xaa, 0x58, 0x32, 0xed, 0xa2, 0x7d, 0x28, 0xc6, 0xbf, 0x2e, 0x80, 0x38, 0xda, 0x62, - 0x8e, 0x18, 0x28, 0xfc, 0x54, 0x0d, 0x7c, 0x4d, 0x80, 0x7c, 0xb8, 0xaf, 0x1c, 0x31, 0xef, 0xdc, - 0x4f, 0xd5, 0xbc, 0xb7, 0x62, 0x30, 0x17, 0xea, 0x26, 0xa7, 0xb5, 0xee, 0xb3, 0xb0, 0xa0, 0x77, - 0x50, 0xdf, 0xb6, 0x3c, 0x64, 0x6a, 0x87, 0x8a, 0x81, 0x6e, 0x22, 0xa3, 0x50, 0x22, 0x89, 0x62, - 0xed, 0xfe, 0xfd, 0x6a, 0xb9, 0x31, 0xc4, 0x6d, 0x61, 0x58, 0x65, 0xb1, 0xb1, 0x51, 0xdf, 0x6e, - 0x35, 0x77, 0xeb, 0x3b, 0xb5, 0x17, 0x95, 0xbd, 0x9d, 0x9f, 0xdf, 0x69, 0x3e, 0xbf, 0x23, 0x8b, - 0xfa, 0x88, 0xda, 0x07, 0xb8, 0xd5, 0x5b, 0x20, 0x8e, 0x1a, 0x25, 0x9d, 0x86, 0x49, 0x66, 0x89, - 0x33, 0xd2, 0x22, 0xcc, 0xef, 0x34, 0x95, 0x76, 0x63, 0xa3, 0xae, 0xd4, 0xaf, 0x5d, 0xab, 0xd7, - 0x76, 0xdb, 0xf4, 0x06, 0xc2, 0xd7, 0xde, 0x0d, 0x6f, 0xea, 0x57, 0xe3, 0xb0, 0x38, 0xc1, 0x12, - 0xa9, 0xca, 0xce, 0x0e, 0xf4, 0x38, 0xf3, 0xb1, 0x69, 0xac, 0x2f, 0xe3, 0x92, 0xdf, 0x52, 0x1d, - 0x8f, 0x1d, 0x35, 0x1e, 0x07, 0xec, 0x25, 0xd3, 0xd3, 0xbb, 0x3a, 0x72, 0xd8, 0x85, 0x0d, 0x3d, - 0x50, 0xcc, 0x0f, 0xe5, 0xf4, 0xce, 0xe6, 0x67, 0x40, 0xb2, 0x2d, 0x57, 0xf7, 0xf4, 0x9b, 0x48, - 0xd1, 0x4d, 0x7e, 0xbb, 0x83, 0x0f, 0x18, 0x09, 0x59, 0xe4, 0x23, 0x0d, 0xd3, 0xf3, 0xb5, 0x4d, - 0xd4, 0x53, 0x47, 0xb4, 0x71, 0x02, 0x8f, 0xcb, 0x22, 0x1f, 0xf1, 0xb5, 0xcf, 0x41, 0xae, 0x63, - 0x0d, 0x70, 0xd7, 0x45, 0xf5, 0x70, 0xbd, 0x10, 0xe4, 0x2c, 0x95, 0xf9, 0x2a, 0xac, 0x9f, 0x1e, - 0x5e, 0x2b, 0xe5, 0xe4, 0x2c, 0x95, 0x51, 0x95, 0xc7, 0x60, 0x5e, 0xed, 0xf5, 0x1c, 0x4c, 0xce, - 0x89, 0xe8, 0x09, 0x21, 0xef, 0x8b, 0x89, 0xe2, 0xf2, 0x73, 0x90, 0xe6, 0x7e, 0xc0, 0x25, 0x19, - 0x7b, 0x42, 0xb1, 0xe9, 0xb1, 0x37, 0xb6, 0x9a, 0x91, 0xd3, 0x26, 0x1f, 0x3c, 0x07, 0x39, 0xdd, - 0x55, 0x86, 0xb7, 0xe4, 0xb1, 0x95, 0xd8, 0x6a, 0x5a, 0xce, 0xea, 0xae, 0x7f, 0xc3, 0x58, 0x7a, - 0x23, 0x06, 0xf9, 0xf0, 0x2d, 0xbf, 0xb4, 0x01, 0x69, 0xc3, 0xd2, 0x54, 0x12, 0x5a, 0xf4, 0x13, - 0xd3, 0x6a, 0xc4, 0x87, 0x81, 0xf2, 0x16, 0xd3, 0x97, 0x7d, 0xe4, 0xf2, 0xbf, 0x08, 0x90, 0xe6, - 0x62, 0xe9, 0x14, 0x24, 0x6c, 0xd5, 0x3b, 0x20, 0x74, 0xc9, 0xf5, 0x98, 0x28, 0xc8, 0xe4, 0x19, - 0xcb, 0x5d, 0x5b, 0x35, 0x49, 0x08, 0x30, 0x39, 0x7e, 0xc6, 0xeb, 0x6a, 0x20, 0xb5, 0x43, 0x8e, - 0x1f, 0x56, 0xbf, 0x8f, 0x4c, 0xcf, 0xe5, 0xeb, 0xca, 0xe4, 0x35, 0x26, 0x96, 0x9e, 0x84, 0x05, - 0xcf, 0x51, 0x75, 0x23, 0xa4, 0x9b, 0x20, 0xba, 0x22, 0x1f, 0xf0, 0x95, 0x2b, 0x70, 0x86, 0xf3, - 0x76, 0x90, 0xa7, 0x6a, 0x07, 0xa8, 0x33, 0x04, 0xa5, 0xc8, 0x35, 0xc3, 0x69, 0xa6, 0xb0, 0xc1, - 0xc6, 0x39, 0xb6, 0xf4, 0x7d, 0x01, 0x16, 0xf8, 0x81, 0xa9, 0xe3, 0x3b, 0x6b, 0x1b, 0x40, 0x35, - 0x4d, 0xcb, 0x0b, 0xba, 0x6b, 0x3c, 0x94, 0xc7, 0x70, 0xe5, 0xaa, 0x0f, 0x92, 0x03, 0x04, 0xcb, - 0x7d, 0x80, 0xe1, 0xc8, 0xb1, 0x6e, 0x3b, 0x0b, 0x59, 0xf6, 0x09, 0x87, 0x7c, 0x07, 0xa4, 0x47, - 0x6c, 0xa0, 0x22, 0x7c, 0xb2, 0x92, 0x96, 0x20, 0xb9, 0x8f, 0x7a, 0xba, 0xc9, 0x2e, 0x66, 0xe9, - 0x03, 0xbf, 0x08, 0x49, 0xf8, 0x17, 0x21, 0xeb, 0x9f, 0x81, 0x45, 0xcd, 0xea, 0x8f, 0x9a, 0xbb, - 0x2e, 0x8e, 0x1c, 0xf3, 0xdd, 0x4f, 0x0a, 0x2f, 0xc1, 0xb0, 0xc5, 0x7c, 0x5f, 0x10, 0xfe, 0x34, - 0x16, 0xdf, 0x6c, 0xad, 0x7f, 0x35, 0xb6, 0xbc, 0x49, 0xa1, 0x2d, 0x3e, 0x53, 0x19, 0x75, 0x0d, - 0xa4, 0x61, 0xeb, 0xe1, 0xcb, 0xab, 0xf0, 0xb1, 0x9e, 0xee, 0x1d, 0x0c, 0xf6, 0xcb, 0x9a, 0xd5, - 0x5f, 0xeb, 0x59, 0x3d, 0x6b, 0xf8, 0xe9, 0x13, 0x3f, 0x91, 0x07, 0xf2, 0x1f, 0xfb, 0xfc, 0x99, - 0xf1, 0xa5, 0xcb, 0x91, 0xdf, 0x4a, 0x2b, 0x3b, 0xb0, 0xc8, 0x94, 0x15, 0xf2, 0xfd, 0x85, 0x9e, - 0x22, 0xa4, 0xfb, 0xde, 0x61, 0x15, 0xbe, 0xfe, 0x36, 0x29, 0xd7, 0xf2, 0x02, 0x83, 0xe2, 0x31, - 0x7a, 0xd0, 0xa8, 0xc8, 0xf0, 0x40, 0x88, 0x8f, 0x6e, 0x4d, 0xe4, 0x44, 0x30, 0x7e, 0x97, 0x31, - 0x2e, 0x06, 0x18, 0xdb, 0x0c, 0x5a, 0xa9, 0xc1, 0xdc, 0x49, 0xb8, 0xfe, 0x89, 0x71, 0xe5, 0x50, - 0x90, 0x64, 0x13, 0xe6, 0x09, 0x89, 0x36, 0x70, 0x3d, 0xab, 0x4f, 0xf2, 0xde, 0xfd, 0x69, 0xfe, - 0xf9, 0x6d, 0xba, 0x57, 0xf2, 0x18, 0x56, 0xf3, 0x51, 0x95, 0x0a, 0x90, 0x4f, 0x4e, 0x1d, 0xa4, - 0x19, 0x11, 0x0c, 0x6f, 0x32, 0x43, 0x7c, 0xfd, 0xca, 0xa7, 0x61, 0x09, 0xff, 0x4f, 0xd2, 0x52, - 0xd0, 0x92, 0xe8, 0x0b, 0xaf, 0xc2, 0xf7, 0x5f, 0xa1, 0xdb, 0x71, 0xd1, 0x27, 0x08, 0xd8, 0x14, - 0x58, 0xc5, 0x1e, 0xf2, 0x3c, 0xe4, 0xb8, 0x8a, 0x6a, 0x4c, 0x32, 0x2f, 0x70, 0x63, 0x50, 0xf8, - 0xc2, 0x3b, 0xe1, 0x55, 0xdc, 0xa4, 0xc8, 0xaa, 0x61, 0x54, 0xf6, 0xe0, 0xf4, 0x84, 0xa8, 0x98, - 0x82, 0xf3, 0x55, 0xc6, 0xb9, 0x34, 0x16, 0x19, 0x98, 0xb6, 0x05, 0x5c, 0xee, 0xaf, 0xe5, 0x14, - 0x9c, 0x7f, 0xc4, 0x38, 0x25, 0x86, 0xe5, 0x4b, 0x8a, 0x19, 0x9f, 0x83, 0x85, 0x9b, 0xc8, 0xd9, - 0xb7, 0x5c, 0x76, 0x4b, 0x33, 0x05, 0xdd, 0x6b, 0x8c, 0x6e, 0x9e, 0x01, 0xc9, 0xb5, 0x0d, 0xe6, - 0xba, 0x02, 0xe9, 0xae, 0xaa, 0xa1, 0x29, 0x28, 0xbe, 0xc8, 0x28, 0x66, 0xb1, 0x3e, 0x86, 0x56, - 0x21, 0xd7, 0xb3, 0x58, 0x65, 0x8a, 0x86, 0xbf, 0xce, 0xe0, 0x59, 0x8e, 0x61, 0x14, 0xb6, 0x65, - 0x0f, 0x0c, 0x5c, 0xb6, 0xa2, 0x29, 0xfe, 0x98, 0x53, 0x70, 0x0c, 0xa3, 0x38, 0x81, 0x5b, 0xff, - 0x84, 0x53, 0xb8, 0x01, 0x7f, 0x3e, 0x0b, 0x59, 0xcb, 0x34, 0x0e, 0x2d, 0x73, 0x1a, 0x23, 0xbe, - 0xc4, 0x18, 0x80, 0x41, 0x30, 0xc1, 0x55, 0xc8, 0x4c, 0xbb, 0x10, 0x5f, 0x7e, 0x87, 0x6f, 0x0f, - 0xbe, 0x02, 0x9b, 0x30, 0xcf, 0x13, 0x94, 0x6e, 0x99, 0x53, 0x50, 0xfc, 0x19, 0xa3, 0xc8, 0x07, - 0x60, 0x6c, 0x1a, 0x1e, 0x72, 0xbd, 0x1e, 0x9a, 0x86, 0xe4, 0x0d, 0x3e, 0x0d, 0x06, 0x61, 0xae, - 0xdc, 0x47, 0xa6, 0x76, 0x30, 0x1d, 0xc3, 0x57, 0xb8, 0x2b, 0x39, 0x06, 0x53, 0xd4, 0x60, 0xae, - 0xaf, 0x3a, 0xee, 0x81, 0x6a, 0x4c, 0xb5, 0x1c, 0x7f, 0xce, 0x38, 0x72, 0x3e, 0x88, 0x79, 0x64, - 0x60, 0x9e, 0x84, 0xe6, 0xab, 0xdc, 0x23, 0x01, 0x18, 0xdb, 0x7a, 0xae, 0x47, 0xae, 0xb4, 0x4e, - 0xc2, 0xf6, 0x17, 0x7c, 0xeb, 0x51, 0xec, 0x76, 0x90, 0xf1, 0x2a, 0x64, 0x5c, 0xfd, 0xf6, 0x54, - 0x34, 0x7f, 0xc9, 0x57, 0x9a, 0x00, 0x30, 0xf8, 0x45, 0x38, 0x33, 0xb1, 0x4c, 0x4c, 0x41, 0xf6, - 0x57, 0x8c, 0xec, 0xd4, 0x84, 0x52, 0xc1, 0x52, 0xc2, 0x49, 0x29, 0xff, 0x9a, 0xa7, 0x04, 0x34, - 0xc2, 0xd5, 0xc2, 0x67, 0x05, 0x57, 0xed, 0x9e, 0xcc, 0x6b, 0x7f, 0xc3, 0xbd, 0x46, 0xb1, 0x21, - 0xaf, 0xed, 0xc2, 0x29, 0xc6, 0x78, 0xb2, 0x75, 0xfd, 0x1a, 0x4f, 0xac, 0x14, 0xbd, 0x17, 0x5e, - 0xdd, 0xcf, 0xc0, 0xb2, 0xef, 0x4e, 0xde, 0x94, 0xba, 0x4a, 0x5f, 0xb5, 0xa7, 0x60, 0xfe, 0x3a, - 0x63, 0xe6, 0x19, 0xdf, 0xef, 0x6a, 0xdd, 0x6d, 0xd5, 0xc6, 0xe4, 0x2f, 0x40, 0x81, 0x93, 0x0f, - 0x4c, 0x07, 0x69, 0x56, 0xcf, 0xd4, 0x6f, 0xa3, 0xce, 0x14, 0xd4, 0x7f, 0x3b, 0xb2, 0x54, 0x7b, - 0x01, 0x38, 0x66, 0x6e, 0x80, 0xe8, 0xf7, 0x2a, 0x8a, 0xde, 0xb7, 0x2d, 0xc7, 0x8b, 0x60, 0xfc, - 0x06, 0x5f, 0x29, 0x1f, 0xd7, 0x20, 0xb0, 0x4a, 0x1d, 0xf2, 0xe4, 0x71, 0xda, 0x90, 0xfc, 0x3b, - 0x46, 0x34, 0x37, 0x44, 0xb1, 0xc4, 0xa1, 0x59, 0x7d, 0x5b, 0x75, 0xa6, 0xc9, 0x7f, 0xdf, 0xe4, - 0x89, 0x83, 0x41, 0x58, 0xe2, 0xf0, 0x0e, 0x6d, 0x84, 0xab, 0xfd, 0x14, 0x0c, 0xdf, 0xe2, 0x89, - 0x83, 0x63, 0x18, 0x05, 0x6f, 0x18, 0xa6, 0xa0, 0xf8, 0x7b, 0x4e, 0xc1, 0x31, 0x98, 0xe2, 0x53, - 0xc3, 0x42, 0xeb, 0xa0, 0x9e, 0xee, 0x7a, 0x0e, 0x6d, 0x85, 0xef, 0x4f, 0xf5, 0xed, 0x77, 0xc2, - 0x4d, 0x98, 0x1c, 0x80, 0xe2, 0x4c, 0xc4, 0xae, 0x50, 0xc9, 0x49, 0x29, 0xda, 0xb0, 0xef, 0xf0, - 0x4c, 0x14, 0x80, 0xd1, 0xfd, 0x39, 0x3f, 0xd2, 0xab, 0x48, 0x51, 0x3f, 0x84, 0x29, 0xfc, 0xf2, - 0x7b, 0x8c, 0x2b, 0xdc, 0xaa, 0x54, 0xb6, 0x70, 0x00, 0x85, 0x1b, 0x8a, 0x68, 0xb2, 0x57, 0xde, - 0xf3, 0x63, 0x28, 0xd4, 0x4f, 0x54, 0xae, 0xc1, 0x5c, 0xa8, 0x99, 0x88, 0xa6, 0xfa, 0x15, 0x46, - 0x95, 0x0b, 0xf6, 0x12, 0x95, 0x8b, 0x90, 0xc0, 0x8d, 0x41, 0x34, 0xfc, 0x57, 0x19, 0x9c, 0xa8, - 0x57, 0x3e, 0x01, 0x69, 0xde, 0x10, 0x44, 0x43, 0x7f, 0x8d, 0x41, 0x7d, 0x08, 0x86, 0xf3, 0x66, - 0x20, 0x1a, 0xfe, 0xeb, 0x1c, 0xce, 0x21, 0x18, 0x3e, 0xbd, 0x0b, 0xff, 0xf1, 0x37, 0x12, 0x2c, - 0xa1, 0x73, 0xdf, 0x5d, 0x85, 0x59, 0xd6, 0x05, 0x44, 0xa3, 0x3f, 0xc7, 0x5e, 0xce, 0x11, 0x95, - 0xa7, 0x21, 0x39, 0xa5, 0xc3, 0x7f, 0x93, 0x41, 0xa9, 0x7e, 0xa5, 0x06, 0xd9, 0x40, 0xe5, 0x8f, - 0x86, 0xff, 0x16, 0x83, 0x07, 0x51, 0xd8, 0x74, 0x56, 0xf9, 0xa3, 0x09, 0x7e, 0x9b, 0x9b, 0xce, - 0x10, 0xd8, 0x6d, 0xbc, 0xe8, 0x47, 0xa3, 0x7f, 0x87, 0x7b, 0x9d, 0x43, 0x2a, 0xcf, 0x42, 0xc6, - 0x4f, 0xe4, 0xd1, 0xf8, 0xdf, 0x65, 0xf8, 0x21, 0x06, 0x7b, 0x20, 0x50, 0x48, 0xa2, 0x29, 0x7e, - 0x8f, 0x7b, 0x20, 0x80, 0xc2, 0xdb, 0x68, 0xb4, 0x39, 0x88, 0x66, 0xfa, 0x7d, 0xbe, 0x8d, 0x46, - 0x7a, 0x03, 0xbc, 0x9a, 0x24, 0x9f, 0x46, 0x53, 0xfc, 0x01, 0x5f, 0x4d, 0xa2, 0x8f, 0xcd, 0x18, - 0xad, 0xb6, 0xd1, 0x1c, 0x7f, 0xc8, 0xcd, 0x18, 0x29, 0xb6, 0x95, 0x16, 0x48, 0xe3, 0x95, 0x36, - 0x9a, 0xef, 0xf3, 0x8c, 0x6f, 0x61, 0xac, 0xd0, 0x56, 0x9e, 0x87, 0x53, 0x93, 0xab, 0x6c, 0x34, - 0xeb, 0x17, 0xde, 0x1b, 0x39, 0x17, 0x05, 0x8b, 0x6c, 0x65, 0x77, 0x98, 0xae, 0x83, 0x15, 0x36, - 0x9a, 0xf6, 0xd5, 0xf7, 0xc2, 0x19, 0x3b, 0x58, 0x60, 0x2b, 0x55, 0x80, 0x61, 0x71, 0x8b, 0xe6, - 0x7a, 0x8d, 0x71, 0x05, 0x40, 0x78, 0x6b, 0xb0, 0xda, 0x16, 0x8d, 0xff, 0x22, 0xdf, 0x1a, 0x0c, - 0x81, 0xb7, 0x06, 0x2f, 0x6b, 0xd1, 0xe8, 0xd7, 0xf9, 0xd6, 0xe0, 0x10, 0x1c, 0xd9, 0x81, 0xca, - 0x11, 0xcd, 0xf0, 0x25, 0x1e, 0xd9, 0x01, 0x54, 0xe5, 0x2a, 0xa4, 0xcd, 0x81, 0x61, 0xe0, 0x00, - 0x95, 0xee, 0xff, 0x03, 0xb1, 0xc2, 0x7f, 0xdc, 0x63, 0x16, 0x70, 0x40, 0xe5, 0x22, 0x24, 0x51, - 0x7f, 0x1f, 0x75, 0xa2, 0x90, 0xff, 0x79, 0x8f, 0x27, 0x25, 0xac, 0x5d, 0x79, 0x16, 0x80, 0x1e, - 0xed, 0xc9, 0x67, 0xab, 0x08, 0xec, 0x7f, 0xdd, 0x63, 0x3f, 0xdd, 0x18, 0x42, 0x86, 0x04, 0xf4, - 0x87, 0x20, 0xf7, 0x27, 0x78, 0x27, 0x4c, 0x40, 0x66, 0x7d, 0x05, 0x66, 0xaf, 0xbb, 0x96, 0xe9, - 0xa9, 0xbd, 0x28, 0xf4, 0x7f, 0x33, 0x34, 0xd7, 0xc7, 0x0e, 0xeb, 0x5b, 0x0e, 0xf2, 0xd4, 0x9e, - 0x1b, 0x85, 0xfd, 0x1f, 0x86, 0xf5, 0x01, 0x18, 0xac, 0xa9, 0xae, 0x37, 0xcd, 0xbc, 0x7f, 0xc4, - 0xc1, 0x1c, 0x80, 0x8d, 0xc6, 0xff, 0xdf, 0x40, 0x87, 0x51, 0xd8, 0x77, 0xb9, 0xd1, 0x4c, 0xbf, - 0xf2, 0x09, 0xc8, 0xe0, 0x7f, 0xe9, 0xef, 0xb1, 0x22, 0xc0, 0xff, 0xcb, 0xc0, 0x43, 0x04, 0x7e, - 0xb3, 0xeb, 0x75, 0x3c, 0x3d, 0xda, 0xd9, 0xff, 0xc7, 0x56, 0x9a, 0xeb, 0x57, 0xaa, 0x90, 0x75, - 0xbd, 0x4e, 0x67, 0xc0, 0xfa, 0xab, 0x08, 0xf8, 0xff, 0xdf, 0xf3, 0x8f, 0xdc, 0x3e, 0x66, 0xbd, - 0x3e, 0xf9, 0xf6, 0x10, 0x36, 0xad, 0x4d, 0x8b, 0xde, 0x1b, 0xbe, 0x54, 0x8a, 0xbe, 0x00, 0x84, - 0x6f, 0xc6, 0x61, 0x59, 0xb3, 0xfa, 0xfb, 0x96, 0xbb, 0xe6, 0x67, 0xac, 0xb5, 0xbe, 0x6a, 0xb3, - 0x4b, 0xc1, 0x6c, 0x5f, 0xb5, 0xd9, 0xaf, 0x2f, 0xdd, 0xe5, 0x93, 0x5d, 0x28, 0x96, 0x7e, 0x09, - 0x66, 0xb7, 0x55, 0x7b, 0x17, 0xb9, 0x9e, 0x44, 0x5c, 0x45, 0x7e, 0xe6, 0xc3, 0x6e, 0x69, 0x57, - 0xca, 0x01, 0xe2, 0x32, 0x53, 0x2b, 0xb7, 0x3d, 0xa7, 0xed, 0x39, 0xe4, 0x8b, 0xb6, 0x9c, 0x72, - 0xc9, 0xc3, 0xf2, 0x15, 0xc8, 0x06, 0xc4, 0x92, 0x08, 0xf1, 0x1b, 0xe8, 0x90, 0xfd, 0xd0, 0x07, - 0xff, 0x2b, 0x2d, 0x0d, 0x7f, 0x89, 0x87, 0x65, 0xf4, 0xa1, 0x12, 0xbb, 0x2c, 0x94, 0x9e, 0x81, - 0xd9, 0x6b, 0xea, 0x0d, 0xb4, 0xad, 0xda, 0xd2, 0x05, 0x98, 0x45, 0xa6, 0xe7, 0xe8, 0xc8, 0x65, - 0x06, 0x9c, 0x09, 0x19, 0xc0, 0xd4, 0xe8, 0x9b, 0xb9, 0x66, 0x69, 0x0b, 0x72, 0xc1, 0x81, 0x69, - 0xdf, 0x8d, 0xa5, 0x96, 0x77, 0xc0, 0x7e, 0x99, 0x9b, 0x91, 0xe9, 0xc3, 0xfa, 0xc6, 0x9b, 0x77, - 0x8b, 0x33, 0xdf, 0xbb, 0x5b, 0x9c, 0xf9, 0xd7, 0xbb, 0xc5, 0x99, 0xb7, 0xee, 0x16, 0x85, 0x77, - 0xef, 0x16, 0x85, 0xf7, 0xef, 0x16, 0x85, 0x3b, 0x47, 0x45, 0xe1, 0x2b, 0x47, 0x45, 0xe1, 0x6b, - 0x47, 0x45, 0xe1, 0xdb, 0x47, 0x45, 0xe1, 0xcd, 0xa3, 0xa2, 0xf0, 0xbd, 0xa3, 0xe2, 0xcc, 0x5b, - 0x47, 0x45, 0xe1, 0x87, 0x47, 0xc5, 0x99, 0x77, 0x8f, 0x8a, 0xc2, 0xfb, 0x47, 0xc5, 0x99, 0x3b, - 0x3f, 0x28, 0xce, 0xec, 0xa7, 0x88, 0x6f, 0x2f, 0xfc, 0x38, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xbf, - 0xee, 0x10, 0xd2, 0x32, 0x00, 0x00, + // 3977 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xe3, 0xd6, + 0x75, 0x16, 0xf8, 0x23, 0x91, 0x87, 0x14, 0x05, 0x41, 0xf2, 0x2e, 0x57, 0x8e, 0xb9, 0x5a, 0xda, + 0x8e, 0x65, 0xbb, 0x91, 0x32, 0xbb, 0xde, 0xf5, 0x2e, 0xb7, 0xb1, 0x4b, 0x49, 0x5c, 0x45, 0xae, + 0x7e, 0x18, 0x50, 0x8a, 0x7f, 0x32, 0x1d, 0x0c, 0x04, 0x5e, 0x52, 0x58, 0x81, 0x00, 0x02, 0x80, + 0xbb, 0xd6, 0x4e, 0x67, 0xba, 0x1d, 0xf7, 0x67, 0x32, 0x9d, 0xfe, 0x77, 0xa6, 0x89, 0xeb, 0xb8, + 0x4d, 0x3a, 0x8d, 0xd3, 0xf4, 0x2f, 0x69, 0x9a, 0x34, 0x49, 0x5f, 0xfa, 0x92, 0xd6, 0x4f, 0x9d, + 0xe4, 0xad, 0x0f, 0x7d, 0xf0, 0x2a, 0x9e, 0x69, 0xda, 0xba, 0x8d, 0xdb, 0xee, 0x83, 0x67, 0xf6, + 0x25, 0x73, 0xff, 0x40, 0x00, 0xa4, 0x16, 0x50, 0x66, 0xec, 0x3c, 0x49, 0x38, 0xf7, 0x7c, 0x1f, + 0xce, 0x3d, 0xf7, 0xdc, 0x73, 0xce, 0xbd, 0x04, 0xfc, 0xe8, 0x0a, 0xcc, 0x77, 0x2d, 0xab, 0x6b, + 0xa0, 0x25, 0xdb, 0xb1, 0x3c, 0x6b, 0xaf, 0xdf, 0x59, 0x6a, 0x23, 0x57, 0x73, 0x74, 0xdb, 0xb3, + 0x9c, 0x45, 0x22, 0x93, 0xa6, 0xa8, 0xc6, 0x22, 0xd7, 0xa8, 0x6e, 0xc2, 0xf4, 0x35, 0xdd, 0x40, + 0xab, 0xbe, 0x62, 0x0b, 0x79, 0xd2, 0x65, 0xc8, 0x74, 0x74, 0x03, 0x95, 0x85, 0xf9, 0xf4, 0x42, + 0xe1, 0xfc, 0x23, 0x8b, 0x11, 0xd0, 0x62, 0x18, 0xd1, 0xc4, 0x62, 0x99, 0x20, 0xaa, 0x6f, 0x67, + 0x60, 0x66, 0xc4, 0xa8, 0x24, 0x41, 0xc6, 0x54, 0x7b, 0x98, 0x51, 0x58, 0xc8, 0xcb, 0xe4, 0x7f, + 0xa9, 0x0c, 0x13, 0xb6, 0xaa, 0x1d, 0xa8, 0x5d, 0x54, 0x4e, 0x11, 0x31, 0x7f, 0x94, 0x2a, 0x00, + 0x6d, 0x64, 0x23, 0xb3, 0x8d, 0x4c, 0xed, 0xb0, 0x9c, 0x9e, 0x4f, 0x2f, 0xe4, 0xe5, 0x80, 0x44, + 0x7a, 0x12, 0xa6, 0xed, 0xfe, 0x9e, 0xa1, 0x6b, 0x4a, 0x40, 0x0d, 0xe6, 0xd3, 0x0b, 0x59, 0x59, + 0xa4, 0x03, 0xab, 0x03, 0xe5, 0xc7, 0x60, 0xea, 0x26, 0x52, 0x0f, 0x82, 0xaa, 0x05, 0xa2, 0x5a, + 0xc2, 0xe2, 0x80, 0xe2, 0x0a, 0x14, 0x7b, 0xc8, 0x75, 0xd5, 0x2e, 0x52, 0xbc, 0x43, 0x1b, 0x95, + 0x33, 0x64, 0xf6, 0xf3, 0x43, 0xb3, 0x8f, 0xce, 0xbc, 0xc0, 0x50, 0x3b, 0x87, 0x36, 0x92, 0xea, + 0x90, 0x47, 0x66, 0xbf, 0x47, 0x19, 0xb2, 0xc7, 0xf8, 0xaf, 0x61, 0xf6, 0x7b, 0x51, 0x96, 0x1c, + 0x86, 0x31, 0x8a, 0x09, 0x17, 0x39, 0x37, 0x74, 0x0d, 0x95, 0xc7, 0x09, 0xc1, 0x63, 0x43, 0x04, + 0x2d, 0x3a, 0x1e, 0xe5, 0xe0, 0x38, 0x69, 0x05, 0xf2, 0xe8, 0x65, 0x0f, 0x99, 0xae, 0x6e, 0x99, + 0xe5, 0x09, 0x42, 0xf2, 0xe8, 0x88, 0x55, 0x44, 0x46, 0x3b, 0x4a, 0x31, 0xc0, 0x49, 0x97, 0x60, + 0xc2, 0xb2, 0x3d, 0xdd, 0x32, 0xdd, 0x72, 0x6e, 0x5e, 0x58, 0x28, 0x9c, 0xff, 0xd0, 0xc8, 0x40, + 0xd8, 0xa6, 0x3a, 0x32, 0x57, 0x96, 0xd6, 0x41, 0x74, 0xad, 0xbe, 0xa3, 0x21, 0x45, 0xb3, 0xda, + 0x48, 0xd1, 0xcd, 0x8e, 0x55, 0xce, 0x13, 0x82, 0xb3, 0xc3, 0x13, 0x21, 0x8a, 0x2b, 0x56, 0x1b, + 0xad, 0x9b, 0x1d, 0x4b, 0x2e, 0xb9, 0xa1, 0x67, 0xe9, 0x14, 0x8c, 0xbb, 0x87, 0xa6, 0xa7, 0xbe, + 0x5c, 0x2e, 0x92, 0x08, 0x61, 0x4f, 0xd5, 0x6f, 0x8f, 0xc3, 0x54, 0x92, 0x10, 0xbb, 0x0a, 0xd9, + 0x0e, 0x9e, 0x65, 0x39, 0x75, 0x12, 0x1f, 0x50, 0x4c, 0xd8, 0x89, 0xe3, 0x3f, 0xa1, 0x13, 0xeb, + 0x50, 0x30, 0x91, 0xeb, 0xa1, 0x36, 0x8d, 0x88, 0x74, 0xc2, 0x98, 0x02, 0x0a, 0x1a, 0x0e, 0xa9, + 0xcc, 0x4f, 0x14, 0x52, 0x2f, 0xc0, 0x94, 0x6f, 0x92, 0xe2, 0xa8, 0x66, 0x97, 0xc7, 0xe6, 0x52, + 0x9c, 0x25, 0x8b, 0x0d, 0x8e, 0x93, 0x31, 0x4c, 0x2e, 0xa1, 0xd0, 0xb3, 0xb4, 0x0a, 0x60, 0x99, + 0xc8, 0xea, 0x28, 0x6d, 0xa4, 0x19, 0xe5, 0xdc, 0x31, 0x5e, 0xda, 0xc6, 0x2a, 0x43, 0x5e, 0xb2, + 0xa8, 0x54, 0x33, 0xa4, 0x2b, 0x83, 0x50, 0x9b, 0x38, 0x26, 0x52, 0x36, 0xe9, 0x26, 0x1b, 0x8a, + 0xb6, 0x5d, 0x28, 0x39, 0x08, 0xc7, 0x3d, 0x6a, 0xb3, 0x99, 0xe5, 0x89, 0x11, 0x8b, 0xb1, 0x33, + 0x93, 0x19, 0x8c, 0x4e, 0x6c, 0xd2, 0x09, 0x3e, 0x4a, 0x0f, 0x83, 0x2f, 0x50, 0x48, 0x58, 0x01, + 0xc9, 0x42, 0x45, 0x2e, 0xdc, 0x52, 0x7b, 0x68, 0xee, 0x16, 0x94, 0xc2, 0xee, 0x91, 0x66, 0x21, + 0xeb, 0x7a, 0xaa, 0xe3, 0x91, 0x28, 0xcc, 0xca, 0xf4, 0x41, 0x12, 0x21, 0x8d, 0xcc, 0x36, 0xc9, + 0x72, 0x59, 0x19, 0xff, 0x2b, 0xfd, 0xdc, 0x60, 0xc2, 0x69, 0x32, 0xe1, 0x0f, 0x0f, 0xaf, 0x68, + 0x88, 0x39, 0x3a, 0xef, 0xb9, 0xa7, 0x61, 0x32, 0x34, 0x81, 0xa4, 0xaf, 0xae, 0xfe, 0x22, 0x3c, + 0x30, 0x92, 0x5a, 0x7a, 0x01, 0x66, 0xfb, 0xa6, 0x6e, 0x7a, 0xc8, 0xb1, 0x1d, 0x84, 0x23, 0x96, + 0xbe, 0xaa, 0xfc, 0xef, 0x13, 0xc7, 0xc4, 0xdc, 0x6e, 0x50, 0x9b, 0xb2, 0xc8, 0x33, 0xfd, 0x61, + 0xe1, 0x13, 0xf9, 0xdc, 0x0f, 0x27, 0xc4, 0xdb, 0xb7, 0x6f, 0xdf, 0x4e, 0x55, 0x3f, 0x3b, 0x0e, + 0xb3, 0xa3, 0xf6, 0xcc, 0xc8, 0xed, 0x7b, 0x0a, 0xc6, 0xcd, 0x7e, 0x6f, 0x0f, 0x39, 0xc4, 0x49, + 0x59, 0x99, 0x3d, 0x49, 0x75, 0xc8, 0x1a, 0xea, 0x1e, 0x32, 0xca, 0x99, 0x79, 0x61, 0xa1, 0x74, + 0xfe, 0xc9, 0x44, 0xbb, 0x72, 0x71, 0x03, 0x43, 0x64, 0x8a, 0x94, 0x9e, 0x81, 0x0c, 0x4b, 0xd1, + 0x98, 0xe1, 0x89, 0x64, 0x0c, 0x78, 0x2f, 0xc9, 0x04, 0x27, 0x3d, 0x08, 0x79, 0xfc, 0x97, 0xc6, + 0xc6, 0x38, 0xb1, 0x39, 0x87, 0x05, 0x38, 0x2e, 0xa4, 0x39, 0xc8, 0x91, 0x6d, 0xd2, 0x46, 0xbc, + 0xb4, 0xf9, 0xcf, 0x38, 0xb0, 0xda, 0xa8, 0xa3, 0xf6, 0x0d, 0x4f, 0xb9, 0xa1, 0x1a, 0x7d, 0x44, + 0x02, 0x3e, 0x2f, 0x17, 0x99, 0xf0, 0x93, 0x58, 0x26, 0x9d, 0x85, 0x02, 0xdd, 0x55, 0xba, 0xd9, + 0x46, 0x2f, 0x93, 0xec, 0x99, 0x95, 0xe9, 0x46, 0x5b, 0xc7, 0x12, 0xfc, 0xfa, 0xeb, 0xae, 0x65, + 0xf2, 0xd0, 0x24, 0xaf, 0xc0, 0x02, 0xf2, 0xfa, 0xa7, 0xa3, 0x89, 0xfb, 0xa1, 0xd1, 0xd3, 0x8b, + 0xc6, 0x54, 0xf5, 0x9b, 0x29, 0xc8, 0x90, 0x7c, 0x31, 0x05, 0x85, 0x9d, 0x17, 0x9b, 0x0d, 0x65, + 0x75, 0x7b, 0x77, 0x79, 0xa3, 0x21, 0x0a, 0x52, 0x09, 0x80, 0x08, 0xae, 0x6d, 0x6c, 0xd7, 0x77, + 0xc4, 0x94, 0xff, 0xbc, 0xbe, 0xb5, 0x73, 0xe9, 0x29, 0x31, 0xed, 0x03, 0x76, 0xa9, 0x20, 0x13, + 0x54, 0xb8, 0x70, 0x5e, 0xcc, 0x4a, 0x22, 0x14, 0x29, 0xc1, 0xfa, 0x0b, 0x8d, 0xd5, 0x4b, 0x4f, + 0x89, 0xe3, 0x61, 0xc9, 0x85, 0xf3, 0xe2, 0x84, 0x34, 0x09, 0x79, 0x22, 0x59, 0xde, 0xde, 0xde, + 0x10, 0x73, 0x3e, 0x67, 0x6b, 0x47, 0x5e, 0xdf, 0x5a, 0x13, 0xf3, 0x3e, 0xe7, 0x9a, 0xbc, 0xbd, + 0xdb, 0x14, 0xc1, 0x67, 0xd8, 0x6c, 0xb4, 0x5a, 0xf5, 0xb5, 0x86, 0x58, 0xf0, 0x35, 0x96, 0x5f, + 0xdc, 0x69, 0xb4, 0xc4, 0x62, 0xc8, 0xac, 0x0b, 0xe7, 0xc5, 0x49, 0xff, 0x15, 0x8d, 0xad, 0xdd, + 0x4d, 0xb1, 0x24, 0x4d, 0xc3, 0x24, 0x7d, 0x05, 0x37, 0x62, 0x2a, 0x22, 0xba, 0xf4, 0x94, 0x28, + 0x0e, 0x0c, 0xa1, 0x2c, 0xd3, 0x21, 0xc1, 0xa5, 0xa7, 0x44, 0xa9, 0xba, 0x02, 0x59, 0x12, 0x5d, + 0x92, 0x04, 0xa5, 0x8d, 0xfa, 0x72, 0x63, 0x43, 0xd9, 0x6e, 0xee, 0xac, 0x6f, 0x6f, 0xd5, 0x37, + 0x44, 0x61, 0x20, 0x93, 0x1b, 0x9f, 0xd8, 0x5d, 0x97, 0x1b, 0xab, 0x62, 0x2a, 0x28, 0x6b, 0x36, + 0xea, 0x3b, 0x8d, 0x55, 0x31, 0x5d, 0xd5, 0x60, 0x76, 0x54, 0x9e, 0x1c, 0xb9, 0x33, 0x02, 0x4b, + 0x9c, 0x3a, 0x66, 0x89, 0x09, 0xd7, 0xd0, 0x12, 0xff, 0x20, 0x05, 0x33, 0x23, 0x6a, 0xc5, 0xc8, + 0x97, 0x3c, 0x0b, 0x59, 0x1a, 0xa2, 0xb4, 0x7a, 0x3e, 0x3e, 0xb2, 0xe8, 0x90, 0x80, 0x1d, 0xaa, + 0xa0, 0x04, 0x17, 0xec, 0x20, 0xd2, 0xc7, 0x74, 0x10, 0x98, 0x62, 0x28, 0xa7, 0xff, 0xc2, 0x50, + 0x4e, 0xa7, 0x65, 0xef, 0x52, 0x92, 0xb2, 0x47, 0x64, 0x27, 0xcb, 0xed, 0xd9, 0x11, 0xb9, 0xfd, + 0x2a, 0x4c, 0x0f, 0x11, 0x25, 0xce, 0xb1, 0xaf, 0x08, 0x50, 0x3e, 0xce, 0x39, 0x31, 0x99, 0x2e, + 0x15, 0xca, 0x74, 0x57, 0xa3, 0x1e, 0x3c, 0x77, 0xfc, 0x22, 0x0c, 0xad, 0xf5, 0x1b, 0x02, 0x9c, + 0x1a, 0xdd, 0x29, 0x8e, 0xb4, 0xe1, 0x19, 0x18, 0xef, 0x21, 0x6f, 0xdf, 0xe2, 0xdd, 0xd2, 0x87, + 0x47, 0xd4, 0x60, 0x3c, 0x1c, 0x5d, 0x6c, 0x86, 0x0a, 0x16, 0xf1, 0xf4, 0x71, 0xed, 0x1e, 0xb5, + 0x66, 0xc8, 0xd2, 0xcf, 0xa4, 0xe0, 0x81, 0x91, 0xe4, 0x23, 0x0d, 0x7d, 0x08, 0x40, 0x37, 0xed, + 0xbe, 0x47, 0x3b, 0x22, 0x9a, 0x60, 0xf3, 0x44, 0x42, 0x92, 0x17, 0x4e, 0x9e, 0x7d, 0xcf, 0x1f, + 0x4f, 0x93, 0x71, 0xa0, 0x22, 0xa2, 0x70, 0x79, 0x60, 0x68, 0x86, 0x18, 0x5a, 0x39, 0x66, 0xa6, + 0x43, 0x81, 0xf9, 0x51, 0x10, 0x35, 0x43, 0x47, 0xa6, 0xa7, 0xb8, 0x9e, 0x83, 0xd4, 0x9e, 0x6e, + 0x76, 0x49, 0x05, 0xc9, 0xd5, 0xb2, 0x1d, 0xd5, 0x70, 0x91, 0x3c, 0x45, 0x87, 0x5b, 0x7c, 0x14, + 0x23, 0x48, 0x00, 0x39, 0x01, 0xc4, 0x78, 0x08, 0x41, 0x87, 0x7d, 0x44, 0xf5, 0xeb, 0x39, 0x28, + 0x04, 0xfa, 0x6a, 0xe9, 0x1c, 0x14, 0xaf, 0xab, 0x37, 0x54, 0x85, 0x9f, 0x95, 0xa8, 0x27, 0x0a, + 0x58, 0xd6, 0x64, 0xe7, 0xa5, 0x8f, 0xc2, 0x2c, 0x51, 0xb1, 0xfa, 0x1e, 0x72, 0x14, 0xcd, 0x50, + 0x5d, 0x97, 0x38, 0x2d, 0x47, 0x54, 0x25, 0x3c, 0xb6, 0x8d, 0x87, 0x56, 0xf8, 0x88, 0x74, 0x11, + 0x66, 0x08, 0xa2, 0xd7, 0x37, 0x3c, 0xdd, 0x36, 0x90, 0x82, 0x4f, 0x6f, 0x2e, 0xa9, 0x24, 0xbe, + 0x65, 0xd3, 0x58, 0x63, 0x93, 0x29, 0x60, 0x8b, 0x5c, 0x69, 0x15, 0x1e, 0x22, 0xb0, 0x2e, 0x32, + 0x91, 0xa3, 0x7a, 0x48, 0x41, 0x9f, 0xee, 0xab, 0x86, 0xab, 0xa8, 0x66, 0x5b, 0xd9, 0x57, 0xdd, + 0xfd, 0xf2, 0x2c, 0x26, 0x58, 0x4e, 0x95, 0x05, 0xf9, 0x0c, 0x56, 0x5c, 0x63, 0x7a, 0x0d, 0xa2, + 0x56, 0x37, 0xdb, 0x1f, 0x57, 0xdd, 0x7d, 0xa9, 0x06, 0xa7, 0x08, 0x8b, 0xeb, 0x39, 0xba, 0xd9, + 0x55, 0xb4, 0x7d, 0xa4, 0x1d, 0x28, 0x7d, 0xaf, 0x73, 0xb9, 0xfc, 0x60, 0xf0, 0xfd, 0xc4, 0xc2, + 0x16, 0xd1, 0x59, 0xc1, 0x2a, 0xbb, 0x5e, 0xe7, 0xb2, 0xd4, 0x82, 0x22, 0x5e, 0x8c, 0x9e, 0x7e, + 0x0b, 0x29, 0x1d, 0xcb, 0x21, 0xa5, 0xb1, 0x34, 0x22, 0x35, 0x05, 0x3c, 0xb8, 0xb8, 0xcd, 0x00, + 0x9b, 0x56, 0x1b, 0xd5, 0xb2, 0xad, 0x66, 0xa3, 0xb1, 0x2a, 0x17, 0x38, 0xcb, 0x35, 0xcb, 0xc1, + 0x01, 0xd5, 0xb5, 0x7c, 0x07, 0x17, 0x68, 0x40, 0x75, 0x2d, 0xee, 0xde, 0x8b, 0x30, 0xa3, 0x69, + 0x74, 0xce, 0xba, 0xa6, 0xb0, 0x33, 0x96, 0x5b, 0x16, 0x43, 0xce, 0xd2, 0xb4, 0x35, 0xaa, 0xc0, + 0x62, 0xdc, 0x95, 0xae, 0xc0, 0x03, 0x03, 0x67, 0x05, 0x81, 0xd3, 0x43, 0xb3, 0x8c, 0x42, 0x2f, + 0xc2, 0x8c, 0x7d, 0x38, 0x0c, 0x94, 0x42, 0x6f, 0xb4, 0x0f, 0xa3, 0xb0, 0xa7, 0x61, 0xd6, 0xde, + 0xb7, 0x87, 0x71, 0x4f, 0x04, 0x71, 0x92, 0xbd, 0x6f, 0x47, 0x81, 0x8f, 0x92, 0x03, 0xb7, 0x83, + 0x34, 0xd5, 0x43, 0xed, 0xf2, 0xe9, 0xa0, 0x7a, 0x60, 0x40, 0x5a, 0x02, 0x51, 0xd3, 0x14, 0x64, + 0xaa, 0x7b, 0x06, 0x52, 0x54, 0x07, 0x99, 0xaa, 0x5b, 0x3e, 0x1b, 0x54, 0x2e, 0x69, 0x5a, 0x83, + 0x8c, 0xd6, 0xc9, 0xa0, 0xf4, 0x04, 0x4c, 0x5b, 0x7b, 0xd7, 0x35, 0x1a, 0x92, 0x8a, 0xed, 0xa0, + 0x8e, 0xfe, 0x72, 0xf9, 0x11, 0xe2, 0xdf, 0x29, 0x3c, 0x40, 0x02, 0xb2, 0x49, 0xc4, 0xd2, 0xe3, + 0x20, 0x6a, 0xee, 0xbe, 0xea, 0xd8, 0x24, 0x27, 0xbb, 0xb6, 0xaa, 0xa1, 0xf2, 0xa3, 0x54, 0x95, + 0xca, 0xb7, 0xb8, 0x18, 0x6f, 0x09, 0xf7, 0xa6, 0xde, 0xf1, 0x38, 0xe3, 0x63, 0x74, 0x4b, 0x10, + 0x19, 0x63, 0x5b, 0x00, 0x11, 0xbb, 0x22, 0xf4, 0xe2, 0x05, 0xa2, 0x56, 0xb2, 0xf7, 0xed, 0xe0, + 0x7b, 0x1f, 0x86, 0x49, 0xac, 0x39, 0x78, 0xe9, 0xe3, 0xb4, 0x21, 0xb3, 0xf7, 0x03, 0x6f, 0x7c, + 0xdf, 0x7a, 0xe3, 0x6a, 0x0d, 0x8a, 0xc1, 0xf8, 0x94, 0xf2, 0x40, 0x23, 0x54, 0x14, 0x70, 0xb3, + 0xb2, 0xb2, 0xbd, 0x8a, 0xdb, 0x8c, 0x97, 0x1a, 0x62, 0x0a, 0xb7, 0x3b, 0x1b, 0xeb, 0x3b, 0x0d, + 0x45, 0xde, 0xdd, 0xda, 0x59, 0xdf, 0x6c, 0x88, 0xe9, 0x60, 0x5f, 0xfd, 0xdd, 0x14, 0x94, 0xc2, + 0x47, 0x24, 0xe9, 0x67, 0xe1, 0x34, 0xbf, 0xcf, 0x70, 0x91, 0xa7, 0xdc, 0xd4, 0x1d, 0xb2, 0x65, + 0x7a, 0x2a, 0x2d, 0x5f, 0xfe, 0xa2, 0xcd, 0x32, 0xad, 0x16, 0xf2, 0x9e, 0xd7, 0x1d, 0xbc, 0x21, + 0x7a, 0xaa, 0x27, 0x6d, 0xc0, 0x59, 0xd3, 0x52, 0x5c, 0x4f, 0x35, 0xdb, 0xaa, 0xd3, 0x56, 0x06, + 0x37, 0x49, 0x8a, 0xaa, 0x69, 0xc8, 0x75, 0x2d, 0x5a, 0xaa, 0x7c, 0x96, 0x0f, 0x99, 0x56, 0x8b, + 0x29, 0x0f, 0x72, 0x78, 0x9d, 0xa9, 0x46, 0x02, 0x2c, 0x7d, 0x5c, 0x80, 0x3d, 0x08, 0xf9, 0x9e, + 0x6a, 0x2b, 0xc8, 0xf4, 0x9c, 0x43, 0xd2, 0x18, 0xe7, 0xe4, 0x5c, 0x4f, 0xb5, 0x1b, 0xf8, 0xf9, + 0x83, 0x39, 0x9f, 0xfc, 0x5b, 0x1a, 0x8a, 0xc1, 0xe6, 0x18, 0x9f, 0x35, 0x34, 0x52, 0x47, 0x04, + 0x92, 0x69, 0x1e, 0xbe, 0x6f, 0x2b, 0xbd, 0xb8, 0x82, 0x0b, 0x4c, 0x6d, 0x9c, 0xb6, 0xac, 0x32, + 0x45, 0xe2, 0xe2, 0x8e, 0x73, 0x0b, 0xa2, 0x2d, 0x42, 0x4e, 0x66, 0x4f, 0xd2, 0x1a, 0x8c, 0x5f, + 0x77, 0x09, 0xf7, 0x38, 0xe1, 0x7e, 0xe4, 0xfe, 0xdc, 0xcf, 0xb5, 0x08, 0x79, 0xfe, 0xb9, 0x96, + 0xb2, 0xb5, 0x2d, 0x6f, 0xd6, 0x37, 0x64, 0x06, 0x97, 0xce, 0x40, 0xc6, 0x50, 0x6f, 0x1d, 0x86, + 0x4b, 0x11, 0x11, 0x25, 0x75, 0xfc, 0x19, 0xc8, 0xdc, 0x44, 0xea, 0x41, 0xb8, 0x00, 0x10, 0xd1, + 0xfb, 0x18, 0xfa, 0x4b, 0x90, 0x25, 0xfe, 0x92, 0x00, 0x98, 0xc7, 0xc4, 0x31, 0x29, 0x07, 0x99, + 0x95, 0x6d, 0x19, 0x87, 0xbf, 0x08, 0x45, 0x2a, 0x55, 0x9a, 0xeb, 0x8d, 0x95, 0x86, 0x98, 0xaa, + 0x5e, 0x84, 0x71, 0xea, 0x04, 0xbc, 0x35, 0x7c, 0x37, 0x88, 0x63, 0xec, 0x91, 0x71, 0x08, 0x7c, + 0x74, 0x77, 0x73, 0xb9, 0x21, 0x8b, 0xa9, 0xe0, 0xf2, 0xba, 0x50, 0x0c, 0xf6, 0xc5, 0x1f, 0x4c, + 0x4c, 0x7d, 0x47, 0x80, 0x42, 0xa0, 0xcf, 0xc5, 0x0d, 0x8a, 0x6a, 0x18, 0xd6, 0x4d, 0x45, 0x35, + 0x74, 0xd5, 0x65, 0x41, 0x01, 0x44, 0x54, 0xc7, 0x92, 0xa4, 0x8b, 0xf6, 0x81, 0x18, 0xff, 0xba, + 0x00, 0x62, 0xb4, 0xc5, 0x8c, 0x18, 0x28, 0xfc, 0x54, 0x0d, 0x7c, 0x4d, 0x80, 0x52, 0xb8, 0xaf, + 0x8c, 0x98, 0x77, 0xee, 0xa7, 0x6a, 0xde, 0x5b, 0x29, 0x98, 0x0c, 0x75, 0x93, 0x49, 0xad, 0xfb, + 0x34, 0x4c, 0xeb, 0x6d, 0xd4, 0xb3, 0x2d, 0x0f, 0x99, 0xda, 0xa1, 0x62, 0xa0, 0x1b, 0xc8, 0x28, + 0x57, 0x49, 0xa2, 0x58, 0xba, 0x7f, 0xbf, 0xba, 0xb8, 0x3e, 0xc0, 0x6d, 0x60, 0x58, 0x6d, 0x66, + 0x7d, 0xb5, 0xb1, 0xd9, 0xdc, 0xde, 0x69, 0x6c, 0xad, 0xbc, 0xa8, 0xec, 0x6e, 0xfd, 0xfc, 0xd6, + 0xf6, 0xf3, 0x5b, 0xb2, 0xa8, 0x47, 0xd4, 0xde, 0xc7, 0xad, 0xde, 0x04, 0x31, 0x6a, 0x94, 0x74, + 0x1a, 0x46, 0x99, 0x25, 0x8e, 0x49, 0x33, 0x30, 0xb5, 0xb5, 0xad, 0xb4, 0xd6, 0x57, 0x1b, 0x4a, + 0xe3, 0xda, 0xb5, 0xc6, 0xca, 0x4e, 0x8b, 0xde, 0x40, 0xf8, 0xda, 0x3b, 0xe1, 0x4d, 0xfd, 0x6a, + 0x1a, 0x66, 0x46, 0x58, 0x22, 0xd5, 0xd9, 0xd9, 0x81, 0x1e, 0x67, 0x3e, 0x92, 0xc4, 0xfa, 0x45, + 0x5c, 0xf2, 0x9b, 0xaa, 0xe3, 0xb1, 0xa3, 0xc6, 0xe3, 0x80, 0xbd, 0x64, 0x7a, 0x7a, 0x47, 0x47, + 0x0e, 0xbb, 0xb0, 0xa1, 0x07, 0x8a, 0xa9, 0x81, 0x9c, 0xde, 0xd9, 0xfc, 0x0c, 0x48, 0xb6, 0xe5, + 0xea, 0x9e, 0x7e, 0x03, 0x29, 0xba, 0xc9, 0x6f, 0x77, 0xf0, 0x01, 0x23, 0x23, 0x8b, 0x7c, 0x64, + 0xdd, 0xf4, 0x7c, 0x6d, 0x13, 0x75, 0xd5, 0x88, 0x36, 0x4e, 0xe0, 0x69, 0x59, 0xe4, 0x23, 0xbe, + 0xf6, 0x39, 0x28, 0xb6, 0xad, 0x3e, 0xee, 0xba, 0xa8, 0x1e, 0xae, 0x17, 0x82, 0x5c, 0xa0, 0x32, + 0x5f, 0x85, 0xf5, 0xd3, 0x83, 0x6b, 0xa5, 0xa2, 0x5c, 0xa0, 0x32, 0xaa, 0xf2, 0x18, 0x4c, 0xa9, + 0xdd, 0xae, 0x83, 0xc9, 0x39, 0x11, 0x3d, 0x21, 0x94, 0x7c, 0x31, 0x51, 0x9c, 0x7b, 0x0e, 0x72, + 0xdc, 0x0f, 0xb8, 0x24, 0x63, 0x4f, 0x28, 0x36, 0x3d, 0xf6, 0xa6, 0x16, 0xf2, 0x72, 0xce, 0xe4, + 0x83, 0xe7, 0xa0, 0xa8, 0xbb, 0xca, 0xe0, 0x96, 0x3c, 0x35, 0x9f, 0x5a, 0xc8, 0xc9, 0x05, 0xdd, + 0xf5, 0x6f, 0x18, 0xab, 0x6f, 0xa4, 0xa0, 0x14, 0xbe, 0xe5, 0x97, 0x56, 0x21, 0x67, 0x58, 0x9a, + 0x4a, 0x42, 0x8b, 0xfe, 0xc4, 0xb4, 0x10, 0xf3, 0xc3, 0xc0, 0xe2, 0x06, 0xd3, 0x97, 0x7d, 0xe4, + 0xdc, 0xbf, 0x08, 0x90, 0xe3, 0x62, 0xe9, 0x14, 0x64, 0x6c, 0xd5, 0xdb, 0x27, 0x74, 0xd9, 0xe5, + 0x94, 0x28, 0xc8, 0xe4, 0x19, 0xcb, 0x5d, 0x5b, 0x35, 0x49, 0x08, 0x30, 0x39, 0x7e, 0xc6, 0xeb, + 0x6a, 0x20, 0xb5, 0x4d, 0x8e, 0x1f, 0x56, 0xaf, 0x87, 0x4c, 0xcf, 0xe5, 0xeb, 0xca, 0xe4, 0x2b, + 0x4c, 0x2c, 0x3d, 0x09, 0xd3, 0x9e, 0xa3, 0xea, 0x46, 0x48, 0x37, 0x43, 0x74, 0x45, 0x3e, 0xe0, + 0x2b, 0xd7, 0xe0, 0x0c, 0xe7, 0x6d, 0x23, 0x4f, 0xd5, 0xf6, 0x51, 0x7b, 0x00, 0x1a, 0x27, 0xd7, + 0x0c, 0xa7, 0x99, 0xc2, 0x2a, 0x1b, 0xe7, 0xd8, 0xea, 0xf7, 0x05, 0x98, 0xe6, 0x07, 0xa6, 0xb6, + 0xef, 0xac, 0x4d, 0x00, 0xd5, 0x34, 0x2d, 0x2f, 0xe8, 0xae, 0xe1, 0x50, 0x1e, 0xc2, 0x2d, 0xd6, + 0x7d, 0x90, 0x1c, 0x20, 0x98, 0xeb, 0x01, 0x0c, 0x46, 0x8e, 0x75, 0xdb, 0x59, 0x28, 0xb0, 0x9f, + 0x70, 0xc8, 0xef, 0x80, 0xf4, 0x88, 0x0d, 0x54, 0x84, 0x4f, 0x56, 0xd2, 0x2c, 0x64, 0xf7, 0x50, + 0x57, 0x37, 0xd9, 0xc5, 0x2c, 0x7d, 0xe0, 0x17, 0x21, 0x19, 0xff, 0x22, 0x64, 0xf9, 0x53, 0x30, + 0xa3, 0x59, 0xbd, 0xa8, 0xb9, 0xcb, 0x62, 0xe4, 0x98, 0xef, 0x7e, 0x5c, 0x78, 0x09, 0x06, 0x2d, + 0xe6, 0x7b, 0x82, 0xf0, 0xc5, 0x54, 0x7a, 0xad, 0xb9, 0xfc, 0x95, 0xd4, 0xdc, 0x1a, 0x85, 0x36, + 0xf9, 0x4c, 0x65, 0xd4, 0x31, 0x90, 0x86, 0xad, 0x87, 0x2f, 0x3d, 0x09, 0x1f, 0xe9, 0xea, 0xde, + 0x7e, 0x7f, 0x6f, 0x51, 0xb3, 0x7a, 0x4b, 0x5d, 0xab, 0x6b, 0x0d, 0x7e, 0xfa, 0xc4, 0x4f, 0xe4, + 0x81, 0xfc, 0xc7, 0x7e, 0xfe, 0xcc, 0xfb, 0xd2, 0xb9, 0xd8, 0xdf, 0x4a, 0x6b, 0x5b, 0x30, 0xc3, + 0x94, 0x15, 0xf2, 0xfb, 0x0b, 0x3d, 0x45, 0x48, 0xf7, 0xbd, 0xc3, 0x2a, 0x7f, 0xed, 0x6d, 0x52, + 0xae, 0xe5, 0x69, 0x06, 0xc5, 0x63, 0xf4, 0xa0, 0x51, 0x93, 0xe1, 0x81, 0x10, 0x1f, 0xdd, 0x9a, + 0xc8, 0x89, 0x61, 0xfc, 0x2e, 0x63, 0x9c, 0x09, 0x30, 0xb6, 0x18, 0xb4, 0xb6, 0x02, 0x93, 0x27, + 0xe1, 0xfa, 0x27, 0xc6, 0x55, 0x44, 0x41, 0x92, 0x35, 0x98, 0x22, 0x24, 0x5a, 0xdf, 0xf5, 0xac, + 0x1e, 0xc9, 0x7b, 0xf7, 0xa7, 0xf9, 0xe7, 0xb7, 0xe9, 0x5e, 0x29, 0x61, 0xd8, 0x8a, 0x8f, 0xaa, + 0xd5, 0x80, 0xfc, 0xe4, 0xd4, 0x46, 0x9a, 0x11, 0xc3, 0xf0, 0x26, 0x33, 0xc4, 0xd7, 0xaf, 0x7d, + 0x12, 0x66, 0xf1, 0xff, 0x24, 0x2d, 0x05, 0x2d, 0x89, 0xbf, 0xf0, 0x2a, 0x7f, 0xff, 0x15, 0xba, + 0x1d, 0x67, 0x7c, 0x82, 0x80, 0x4d, 0x81, 0x55, 0xec, 0x22, 0xcf, 0x43, 0x8e, 0xab, 0xa8, 0xc6, + 0x28, 0xf3, 0x02, 0x37, 0x06, 0xe5, 0xcf, 0xbd, 0x13, 0x5e, 0xc5, 0x35, 0x8a, 0xac, 0x1b, 0x46, + 0x6d, 0x17, 0x4e, 0x8f, 0x88, 0x8a, 0x04, 0x9c, 0xaf, 0x32, 0xce, 0xd9, 0xa1, 0xc8, 0xc0, 0xb4, + 0x4d, 0xe0, 0x72, 0x7f, 0x2d, 0x13, 0x70, 0xfe, 0x11, 0xe3, 0x94, 0x18, 0x96, 0x2f, 0x29, 0x66, + 0x7c, 0x0e, 0xa6, 0x6f, 0x20, 0x67, 0xcf, 0x72, 0xd9, 0x2d, 0x4d, 0x02, 0xba, 0xd7, 0x18, 0xdd, + 0x14, 0x03, 0x92, 0x6b, 0x1b, 0xcc, 0x75, 0x05, 0x72, 0x1d, 0x55, 0x43, 0x09, 0x28, 0x3e, 0xcf, + 0x28, 0x26, 0xb0, 0x3e, 0x86, 0xd6, 0xa1, 0xd8, 0xb5, 0x58, 0x65, 0x8a, 0x87, 0xbf, 0xce, 0xe0, + 0x05, 0x8e, 0x61, 0x14, 0xb6, 0x65, 0xf7, 0x0d, 0x5c, 0xb6, 0xe2, 0x29, 0xfe, 0x98, 0x53, 0x70, + 0x0c, 0xa3, 0x38, 0x81, 0x5b, 0xff, 0x84, 0x53, 0xb8, 0x01, 0x7f, 0x3e, 0x0b, 0x05, 0xcb, 0x34, + 0x0e, 0x2d, 0x33, 0x89, 0x11, 0x5f, 0x60, 0x0c, 0xc0, 0x20, 0x98, 0xe0, 0x2a, 0xe4, 0x93, 0x2e, + 0xc4, 0x9f, 0xbd, 0xc3, 0xb7, 0x07, 0x5f, 0x81, 0x35, 0x98, 0xe2, 0x09, 0x4a, 0xb7, 0xcc, 0x04, + 0x14, 0x5f, 0x62, 0x14, 0xa5, 0x00, 0x8c, 0x4d, 0xc3, 0x43, 0xae, 0xd7, 0x45, 0x49, 0x48, 0xde, + 0xe0, 0xd3, 0x60, 0x10, 0xe6, 0xca, 0x3d, 0x64, 0x6a, 0xfb, 0xc9, 0x18, 0xbe, 0xcc, 0x5d, 0xc9, + 0x31, 0x98, 0x62, 0x05, 0x26, 0x7b, 0xaa, 0xe3, 0xee, 0xab, 0x46, 0xa2, 0xe5, 0xf8, 0x73, 0xc6, + 0x51, 0xf4, 0x41, 0xcc, 0x23, 0x7d, 0xf3, 0x24, 0x34, 0x5f, 0xe1, 0x1e, 0x09, 0xc0, 0xd8, 0xd6, + 0x73, 0x3d, 0x72, 0xa5, 0x75, 0x12, 0xb6, 0xbf, 0xe0, 0x5b, 0x8f, 0x62, 0x37, 0x83, 0x8c, 0x57, + 0x21, 0xef, 0xea, 0xb7, 0x12, 0xd1, 0xfc, 0x25, 0x5f, 0x69, 0x02, 0xc0, 0xe0, 0x17, 0xe1, 0xcc, + 0xc8, 0x32, 0x91, 0x80, 0xec, 0xaf, 0x18, 0xd9, 0xa9, 0x11, 0xa5, 0x82, 0xa5, 0x84, 0x93, 0x52, + 0xfe, 0x35, 0x4f, 0x09, 0x28, 0xc2, 0xd5, 0xc4, 0x67, 0x05, 0x57, 0xed, 0x9c, 0xcc, 0x6b, 0x7f, + 0xc3, 0xbd, 0x46, 0xb1, 0x21, 0xaf, 0xed, 0xc0, 0x29, 0xc6, 0x78, 0xb2, 0x75, 0xfd, 0x2a, 0x4f, + 0xac, 0x14, 0xbd, 0x1b, 0x5e, 0xdd, 0x4f, 0xc1, 0x9c, 0xef, 0x4e, 0xde, 0x94, 0xba, 0x4a, 0x4f, + 0xb5, 0x13, 0x30, 0x7f, 0x8d, 0x31, 0xf3, 0x8c, 0xef, 0x77, 0xb5, 0xee, 0xa6, 0x6a, 0x63, 0xf2, + 0x17, 0xa0, 0xcc, 0xc9, 0xfb, 0xa6, 0x83, 0x34, 0xab, 0x6b, 0xea, 0xb7, 0x50, 0x3b, 0x01, 0xf5, + 0xdf, 0x46, 0x96, 0x6a, 0x37, 0x00, 0xc7, 0xcc, 0xeb, 0x20, 0xfa, 0xbd, 0x8a, 0xa2, 0xf7, 0x6c, + 0xcb, 0xf1, 0x62, 0x18, 0xbf, 0xce, 0x57, 0xca, 0xc7, 0xad, 0x13, 0x58, 0xad, 0x01, 0x25, 0xf2, + 0x98, 0x34, 0x24, 0xff, 0x8e, 0x11, 0x4d, 0x0e, 0x50, 0x2c, 0x71, 0x68, 0x56, 0xcf, 0x56, 0x9d, + 0x24, 0xf9, 0xef, 0x1b, 0x3c, 0x71, 0x30, 0x08, 0x4b, 0x1c, 0xde, 0xa1, 0x8d, 0x70, 0xb5, 0x4f, + 0xc0, 0xf0, 0x4d, 0x9e, 0x38, 0x38, 0x86, 0x51, 0xf0, 0x86, 0x21, 0x01, 0xc5, 0xdf, 0x73, 0x0a, + 0x8e, 0xc1, 0x14, 0x9f, 0x18, 0x14, 0x5a, 0x07, 0x75, 0x75, 0xd7, 0x73, 0x68, 0x2b, 0x7c, 0x7f, + 0xaa, 0x6f, 0xbd, 0x13, 0x6e, 0xc2, 0xe4, 0x00, 0x14, 0x67, 0x22, 0x76, 0x85, 0x4a, 0x4e, 0x4a, + 0xf1, 0x86, 0x7d, 0x9b, 0x67, 0xa2, 0x00, 0x0c, 0xdb, 0x16, 0xe8, 0x10, 0xb1, 0xdb, 0x35, 0x7c, + 0x3e, 0x48, 0x40, 0xf7, 0x9d, 0x88, 0x71, 0x2d, 0x8e, 0xc5, 0x9c, 0x81, 0xfe, 0xa7, 0x6f, 0x1e, + 0xa0, 0xc3, 0x44, 0xd1, 0xf9, 0x0f, 0x91, 0xfe, 0x67, 0x97, 0x22, 0x69, 0x0e, 0x99, 0x8a, 0xf4, + 0x53, 0x52, 0xdc, 0xc7, 0x3a, 0xe5, 0x5f, 0xbe, 0xcb, 0xe6, 0x1b, 0x6e, 0xa7, 0x6a, 0x1b, 0x38, + 0xc8, 0xc3, 0x4d, 0x4f, 0x3c, 0xd9, 0x2b, 0x77, 0xfd, 0x38, 0x0f, 0xf5, 0x3c, 0xb5, 0x6b, 0x30, + 0x19, 0x6a, 0x78, 0xe2, 0xa9, 0x7e, 0x85, 0x51, 0x15, 0x83, 0xfd, 0x4e, 0xed, 0x22, 0x64, 0x70, + 0xf3, 0x12, 0x0f, 0xff, 0x55, 0x06, 0x27, 0xea, 0xb5, 0x8f, 0x41, 0x8e, 0x37, 0x2d, 0xf1, 0xd0, + 0x5f, 0x63, 0x50, 0x1f, 0x82, 0xe1, 0xbc, 0x61, 0x89, 0x87, 0xff, 0x3a, 0x87, 0x73, 0x08, 0x86, + 0x27, 0x77, 0xe1, 0x3f, 0xfe, 0x46, 0x86, 0x15, 0x1d, 0xee, 0xbb, 0xab, 0x30, 0xc1, 0x3a, 0x95, + 0x78, 0xf4, 0x67, 0xd8, 0xcb, 0x39, 0xa2, 0xf6, 0x34, 0x64, 0x13, 0x3a, 0xfc, 0x37, 0x19, 0x94, + 0xea, 0xd7, 0x56, 0xa0, 0x10, 0xe8, 0x4e, 0xe2, 0xe1, 0xbf, 0xc5, 0xe0, 0x41, 0x14, 0x36, 0x9d, + 0x75, 0x27, 0xf1, 0x04, 0xbf, 0xcd, 0x4d, 0x67, 0x08, 0xec, 0x36, 0xde, 0x98, 0xc4, 0xa3, 0x7f, + 0x87, 0x7b, 0x9d, 0x43, 0x6a, 0xcf, 0x42, 0xde, 0x2f, 0x36, 0xf1, 0xf8, 0xdf, 0x65, 0xf8, 0x01, + 0x06, 0x7b, 0x20, 0x50, 0xec, 0xe2, 0x29, 0x7e, 0x8f, 0x7b, 0x20, 0x80, 0xc2, 0xdb, 0x28, 0xda, + 0xc0, 0xc4, 0x33, 0xfd, 0x3e, 0xdf, 0x46, 0x91, 0xfe, 0x05, 0xaf, 0x26, 0xc9, 0xf9, 0xf1, 0x14, + 0x7f, 0xc0, 0x57, 0x93, 0xe8, 0x63, 0x33, 0xa2, 0x1d, 0x41, 0x3c, 0xc7, 0x1f, 0x72, 0x33, 0x22, + 0x0d, 0x41, 0xad, 0x09, 0xd2, 0x70, 0x37, 0x10, 0xcf, 0xf7, 0x59, 0xc6, 0x37, 0x3d, 0xd4, 0x0c, + 0xd4, 0x9e, 0x87, 0x53, 0xa3, 0x3b, 0x81, 0x78, 0xd6, 0xcf, 0xdd, 0x8d, 0x9c, 0xdd, 0x82, 0x8d, + 0x40, 0x6d, 0x67, 0x50, 0x52, 0x82, 0x5d, 0x40, 0x3c, 0xed, 0xab, 0x77, 0xc3, 0x89, 0x3b, 0xd8, + 0x04, 0xd4, 0xea, 0x00, 0x83, 0x02, 0x1c, 0xcf, 0xf5, 0x1a, 0xe3, 0x0a, 0x80, 0xf0, 0xd6, 0x60, + 0xf5, 0x37, 0x1e, 0xff, 0x79, 0xbe, 0x35, 0x18, 0x02, 0x6f, 0x0d, 0x5e, 0x7a, 0xe3, 0xd1, 0xaf, + 0xf3, 0xad, 0xc1, 0x21, 0x38, 0xb2, 0x03, 0xd5, 0x2d, 0x9e, 0xe1, 0x0b, 0x3c, 0xb2, 0x03, 0xa8, + 0xda, 0x16, 0x4c, 0x0f, 0x15, 0xc4, 0x78, 0xaa, 0x2f, 0x32, 0x2a, 0x31, 0x5a, 0x0f, 0x83, 0xc5, + 0x8b, 0x15, 0xc3, 0x78, 0xb6, 0x3f, 0x8d, 0x14, 0x2f, 0x56, 0x0b, 0x6b, 0x57, 0x21, 0x67, 0xf6, + 0x0d, 0x03, 0x6f, 0x1e, 0xe9, 0xfe, 0x1f, 0xd8, 0x95, 0xff, 0xe3, 0x1e, 0xf3, 0x0e, 0x07, 0xd4, + 0x2e, 0x42, 0x16, 0xf5, 0xf6, 0x50, 0x3b, 0x0e, 0xf9, 0x9f, 0xf7, 0x78, 0xc2, 0xc4, 0xda, 0xb5, + 0x67, 0x01, 0xe8, 0xd5, 0x08, 0xf9, 0xd9, 0x2f, 0x06, 0xfb, 0x5f, 0xf7, 0xd8, 0xa7, 0x2f, 0x03, + 0xc8, 0x80, 0x80, 0x7e, 0x48, 0x73, 0x7f, 0x82, 0x77, 0xc2, 0x04, 0x64, 0x45, 0xae, 0xc0, 0xc4, + 0x75, 0xd7, 0x32, 0x3d, 0xb5, 0x1b, 0x87, 0xfe, 0x6f, 0x86, 0xe6, 0xfa, 0xd8, 0x61, 0x3d, 0xcb, + 0x41, 0x9e, 0xda, 0x75, 0xe3, 0xb0, 0xff, 0xc3, 0xb0, 0x3e, 0x00, 0x83, 0x35, 0xd5, 0xf5, 0x92, + 0xcc, 0xfb, 0x47, 0x1c, 0xcc, 0x01, 0xd8, 0x68, 0xfc, 0xff, 0x01, 0x3a, 0x8c, 0xc3, 0xbe, 0xcb, + 0x8d, 0x66, 0xfa, 0xb5, 0x8f, 0x41, 0x1e, 0xff, 0x4b, 0xbf, 0x67, 0x8b, 0x01, 0xff, 0x2f, 0x03, + 0x0f, 0x10, 0xf8, 0xcd, 0xae, 0xd7, 0xf6, 0xf4, 0x78, 0x67, 0xff, 0x1f, 0x5b, 0x69, 0xae, 0x5f, + 0xab, 0x43, 0xc1, 0xf5, 0xda, 0xed, 0x3e, 0xeb, 0x4f, 0x63, 0xe0, 0xff, 0x7f, 0xcf, 0xbf, 0xb2, + 0xf0, 0x31, 0x78, 0xb5, 0x6f, 0x1e, 0x78, 0xb6, 0x45, 0x7e, 0xe6, 0x88, 0x63, 0xb8, 0xcb, 0x18, + 0x02, 0x90, 0xe5, 0xc6, 0xe8, 0xeb, 0x5b, 0x58, 0xb3, 0xd6, 0x2c, 0x7a, 0x71, 0xfb, 0x52, 0x35, + 0xfe, 0x06, 0x16, 0xbe, 0x91, 0x86, 0x39, 0xcd, 0xea, 0xed, 0x59, 0xee, 0x92, 0x9f, 0x8e, 0x97, + 0x7a, 0xaa, 0xcd, 0x6e, 0x65, 0x0b, 0x3d, 0xd5, 0x66, 0x9f, 0xbf, 0xba, 0x73, 0x27, 0xbb, 0xd1, + 0xad, 0xfe, 0x12, 0x4c, 0x6c, 0xaa, 0xf6, 0x0e, 0x72, 0x3d, 0x89, 0xf8, 0x9a, 0x7c, 0x67, 0xc5, + 0xae, 0xc9, 0xe7, 0x17, 0x03, 0xc4, 0x8b, 0x4c, 0x6d, 0xb1, 0xe5, 0x39, 0x2d, 0xcf, 0x21, 0x9f, + 0x14, 0xc8, 0xe3, 0x2e, 0x79, 0x98, 0xbb, 0x02, 0x85, 0x80, 0x58, 0x12, 0x21, 0x7d, 0x80, 0x0e, + 0xd9, 0x97, 0x56, 0xf8, 0x5f, 0x69, 0x76, 0xf0, 0x29, 0x24, 0x96, 0xd1, 0x87, 0x5a, 0xea, 0xb2, + 0x50, 0x7d, 0x06, 0x26, 0xae, 0xa9, 0x07, 0x68, 0x53, 0xb5, 0xa5, 0x0b, 0x30, 0x81, 0x4c, 0xcf, + 0xd1, 0x91, 0xcb, 0x0c, 0x38, 0x13, 0x32, 0x80, 0xa9, 0xd1, 0x37, 0x73, 0xcd, 0xea, 0x06, 0x14, + 0x83, 0x03, 0x49, 0xdf, 0x8d, 0xa5, 0x96, 0xb7, 0xcf, 0x3e, 0x8d, 0xce, 0xcb, 0xf4, 0x61, 0x79, + 0xf5, 0xcd, 0x3b, 0x95, 0xb1, 0xef, 0xdd, 0xa9, 0x8c, 0xfd, 0xeb, 0x9d, 0xca, 0xd8, 0x5b, 0x77, + 0x2a, 0xc2, 0xbb, 0x77, 0x2a, 0xc2, 0x7b, 0x77, 0x2a, 0xc2, 0xed, 0xa3, 0x8a, 0xf0, 0xe5, 0xa3, + 0x8a, 0xf0, 0xd5, 0xa3, 0x8a, 0xf0, 0xad, 0xa3, 0x8a, 0xf0, 0xe6, 0x51, 0x45, 0xf8, 0xde, 0x51, + 0x65, 0xec, 0xad, 0xa3, 0x8a, 0xf0, 0xc3, 0xa3, 0xca, 0xd8, 0xbb, 0x47, 0x15, 0xe1, 0xbd, 0xa3, + 0xca, 0xd8, 0xed, 0x1f, 0x54, 0xc6, 0xf6, 0xc6, 0x89, 0x6f, 0x2f, 0xfc, 0x38, 0x00, 0x00, 0xff, + 0xff, 0x86, 0x67, 0x00, 0x91, 0x53, 0x34, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -934,6 +939,9 @@ return dAtA } func (m *MapTest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StrStr) > 0 { @@ -951,6 +959,9 @@ } func (m *FakeMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Entries) > 0 { @@ -966,6 +977,9 @@ } func (m *FakeMapEntry) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Key) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/neither/map.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/neither/map.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/neither/map.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/neither/map.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -139,251 +139,256 @@ func MapDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3896 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x6c, 0x23, 0xd7, - 0x75, 0x16, 0xff, 0x24, 0xf2, 0x90, 0xa2, 0x46, 0x57, 0xf2, 0x2e, 0x57, 0x8e, 0xb9, 0x5a, 0xda, - 0x8e, 0x65, 0xbb, 0x91, 0x82, 0x5d, 0xef, 0x7a, 0x97, 0xdb, 0xd8, 0xa5, 0x28, 0xae, 0x42, 0x57, - 0x12, 0x99, 0xa1, 0x14, 0xff, 0x04, 0xc5, 0x60, 0x34, 0xbc, 0xa4, 0x66, 0x77, 0x38, 0x33, 0x99, - 0x19, 0xee, 0x5a, 0x8b, 0x02, 0xdd, 0xc2, 0xfd, 0x41, 0x50, 0xf4, 0xbf, 0x40, 0x13, 0xd7, 0x71, - 0x9b, 0x02, 0xa9, 0xd3, 0xf4, 0x2f, 0xa9, 0xdb, 0x34, 0xe9, 0x53, 0x5f, 0xd2, 0xfa, 0xa9, 0x48, - 0xde, 0xfa, 0xd0, 0x07, 0xaf, 0x62, 0xa0, 0x69, 0xeb, 0x36, 0x6e, 0xeb, 0x07, 0x03, 0xfb, 0x52, - 0xdc, 0xbf, 0xe1, 0x0c, 0x49, 0xed, 0x50, 0x01, 0xec, 0x3c, 0x49, 0x73, 0xee, 0xf9, 0xbe, 0x39, - 0xf7, 0xdc, 0x73, 0xcf, 0x39, 0xf7, 0x0e, 0xe1, 0x47, 0x57, 0x60, 0xb9, 0x6b, 0x59, 0x5d, 0x03, - 0xaf, 0xd9, 0x8e, 0xe5, 0x59, 0xfb, 0xfd, 0xce, 0x5a, 0x1b, 0xbb, 0x9a, 0xa3, 0xdb, 0x9e, 0xe5, - 0xac, 0x52, 0x19, 0x9a, 0x63, 0x1a, 0xab, 0x42, 0xa3, 0xb4, 0x0d, 0xf3, 0xd7, 0x74, 0x03, 0x6f, - 0xf8, 0x8a, 0x2d, 0xec, 0xa1, 0xcb, 0x90, 0xec, 0xe8, 0x06, 0x2e, 0xc4, 0x96, 0x13, 0x2b, 0xd9, - 0xf3, 0x8f, 0xac, 0x0e, 0x81, 0x56, 0xc3, 0x88, 0x26, 0x11, 0xcb, 0x14, 0x51, 0x7a, 0x27, 0x09, - 0x0b, 0x63, 0x46, 0x11, 0x82, 0xa4, 0xa9, 0xf6, 0x08, 0x63, 0x6c, 0x25, 0x23, 0xd3, 0xff, 0x51, - 0x01, 0x66, 0x6c, 0x55, 0xbb, 0xa1, 0x76, 0x71, 0x21, 0x4e, 0xc5, 0xe2, 0x11, 0x15, 0x01, 0xda, - 0xd8, 0xc6, 0x66, 0x1b, 0x9b, 0xda, 0x61, 0x21, 0xb1, 0x9c, 0x58, 0xc9, 0xc8, 0x01, 0x09, 0x7a, - 0x12, 0xe6, 0xed, 0xfe, 0xbe, 0xa1, 0x6b, 0x4a, 0x40, 0x0d, 0x96, 0x13, 0x2b, 0x29, 0x59, 0x62, - 0x03, 0x1b, 0x03, 0xe5, 0xc7, 0x60, 0xee, 0x16, 0x56, 0x6f, 0x04, 0x55, 0xb3, 0x54, 0x35, 0x4f, - 0xc4, 0x01, 0xc5, 0x2a, 0xe4, 0x7a, 0xd8, 0x75, 0xd5, 0x2e, 0x56, 0xbc, 0x43, 0x1b, 0x17, 0x92, - 0x74, 0xf6, 0xcb, 0x23, 0xb3, 0x1f, 0x9e, 0x79, 0x96, 0xa3, 0x76, 0x0f, 0x6d, 0x8c, 0x2a, 0x90, - 0xc1, 0x66, 0xbf, 0xc7, 0x18, 0x52, 0xc7, 0xf8, 0xaf, 0x66, 0xf6, 0x7b, 0xc3, 0x2c, 0x69, 0x02, - 0xe3, 0x14, 0x33, 0x2e, 0x76, 0x6e, 0xea, 0x1a, 0x2e, 0x4c, 0x53, 0x82, 0xc7, 0x46, 0x08, 0x5a, - 0x6c, 0x7c, 0x98, 0x43, 0xe0, 0x50, 0x15, 0x32, 0xf8, 0x65, 0x0f, 0x9b, 0xae, 0x6e, 0x99, 0x85, - 0x19, 0x4a, 0xf2, 0xe8, 0x98, 0x55, 0xc4, 0x46, 0x7b, 0x98, 0x62, 0x80, 0x43, 0x97, 0x60, 0xc6, - 0xb2, 0x3d, 0xdd, 0x32, 0xdd, 0x42, 0x7a, 0x39, 0xb6, 0x92, 0x3d, 0xff, 0xb1, 0xb1, 0x81, 0xd0, - 0x60, 0x3a, 0xb2, 0x50, 0x46, 0x75, 0x90, 0x5c, 0xab, 0xef, 0x68, 0x58, 0xd1, 0xac, 0x36, 0x56, - 0x74, 0xb3, 0x63, 0x15, 0x32, 0x94, 0xe0, 0xec, 0xe8, 0x44, 0xa8, 0x62, 0xd5, 0x6a, 0xe3, 0xba, - 0xd9, 0xb1, 0xe4, 0xbc, 0x1b, 0x7a, 0x46, 0xa7, 0x60, 0xda, 0x3d, 0x34, 0x3d, 0xf5, 0xe5, 0x42, - 0x8e, 0x46, 0x08, 0x7f, 0x2a, 0x7d, 0x67, 0x1a, 0xe6, 0x26, 0x09, 0xb1, 0xab, 0x90, 0xea, 0x90, - 0x59, 0x16, 0xe2, 0x27, 0xf1, 0x01, 0xc3, 0x84, 0x9d, 0x38, 0xfd, 0x63, 0x3a, 0xb1, 0x02, 0x59, - 0x13, 0xbb, 0x1e, 0x6e, 0xb3, 0x88, 0x48, 0x4c, 0x18, 0x53, 0xc0, 0x40, 0xa3, 0x21, 0x95, 0xfc, - 0xb1, 0x42, 0xea, 0x05, 0x98, 0xf3, 0x4d, 0x52, 0x1c, 0xd5, 0xec, 0x8a, 0xd8, 0x5c, 0x8b, 0xb2, - 0x64, 0xb5, 0x26, 0x70, 0x32, 0x81, 0xc9, 0x79, 0x1c, 0x7a, 0x46, 0x1b, 0x00, 0x96, 0x89, 0xad, - 0x8e, 0xd2, 0xc6, 0x9a, 0x51, 0x48, 0x1f, 0xe3, 0xa5, 0x06, 0x51, 0x19, 0xf1, 0x92, 0xc5, 0xa4, - 0x9a, 0x81, 0xae, 0x0c, 0x42, 0x6d, 0xe6, 0x98, 0x48, 0xd9, 0x66, 0x9b, 0x6c, 0x24, 0xda, 0xf6, - 0x20, 0xef, 0x60, 0x12, 0xf7, 0xb8, 0xcd, 0x67, 0x96, 0xa1, 0x46, 0xac, 0x46, 0xce, 0x4c, 0xe6, - 0x30, 0x36, 0xb1, 0x59, 0x27, 0xf8, 0x88, 0x1e, 0x06, 0x5f, 0xa0, 0xd0, 0xb0, 0x02, 0x9a, 0x85, - 0x72, 0x42, 0xb8, 0xa3, 0xf6, 0xf0, 0xd2, 0x6d, 0xc8, 0x87, 0xdd, 0x83, 0x16, 0x21, 0xe5, 0x7a, - 0xaa, 0xe3, 0xd1, 0x28, 0x4c, 0xc9, 0xec, 0x01, 0x49, 0x90, 0xc0, 0x66, 0x9b, 0x66, 0xb9, 0x94, - 0x4c, 0xfe, 0x45, 0x3f, 0x33, 0x98, 0x70, 0x82, 0x4e, 0xf8, 0xe3, 0xa3, 0x2b, 0x1a, 0x62, 0x1e, - 0x9e, 0xf7, 0xd2, 0xd3, 0x30, 0x1b, 0x9a, 0xc0, 0xa4, 0xaf, 0x2e, 0xfd, 0x3c, 0x3c, 0x30, 0x96, - 0x1a, 0xbd, 0x00, 0x8b, 0x7d, 0x53, 0x37, 0x3d, 0xec, 0xd8, 0x0e, 0x26, 0x11, 0xcb, 0x5e, 0x55, - 0xf8, 0xb7, 0x99, 0x63, 0x62, 0x6e, 0x2f, 0xa8, 0xcd, 0x58, 0xe4, 0x85, 0xfe, 0xa8, 0xf0, 0x89, - 0x4c, 0xfa, 0x87, 0x33, 0xd2, 0x9d, 0x3b, 0x77, 0xee, 0xc4, 0x4b, 0x5f, 0x9c, 0x86, 0xc5, 0x71, - 0x7b, 0x66, 0xec, 0xf6, 0x3d, 0x05, 0xd3, 0x66, 0xbf, 0xb7, 0x8f, 0x1d, 0xea, 0xa4, 0x94, 0xcc, - 0x9f, 0x50, 0x05, 0x52, 0x86, 0xba, 0x8f, 0x8d, 0x42, 0x72, 0x39, 0xb6, 0x92, 0x3f, 0xff, 0xe4, - 0x44, 0xbb, 0x72, 0x75, 0x8b, 0x40, 0x64, 0x86, 0x44, 0xcf, 0x40, 0x92, 0xa7, 0x68, 0xc2, 0xf0, - 0xc4, 0x64, 0x0c, 0x64, 0x2f, 0xc9, 0x14, 0x87, 0x1e, 0x84, 0x0c, 0xf9, 0xcb, 0x62, 0x63, 0x9a, - 0xda, 0x9c, 0x26, 0x02, 0x12, 0x17, 0x68, 0x09, 0xd2, 0x74, 0x9b, 0xb4, 0xb1, 0x28, 0x6d, 0xfe, - 0x33, 0x09, 0xac, 0x36, 0xee, 0xa8, 0x7d, 0xc3, 0x53, 0x6e, 0xaa, 0x46, 0x1f, 0xd3, 0x80, 0xcf, - 0xc8, 0x39, 0x2e, 0xfc, 0x2c, 0x91, 0xa1, 0xb3, 0x90, 0x65, 0xbb, 0x4a, 0x37, 0xdb, 0xf8, 0x65, - 0x9a, 0x3d, 0x53, 0x32, 0xdb, 0x68, 0x75, 0x22, 0x21, 0xaf, 0xbf, 0xee, 0x5a, 0xa6, 0x08, 0x4d, - 0xfa, 0x0a, 0x22, 0xa0, 0xaf, 0x7f, 0x7a, 0x38, 0x71, 0x3f, 0x34, 0x7e, 0x7a, 0xc3, 0x31, 0x55, - 0xfa, 0x56, 0x1c, 0x92, 0x34, 0x5f, 0xcc, 0x41, 0x76, 0xf7, 0xc5, 0x66, 0x4d, 0xd9, 0x68, 0xec, - 0xad, 0x6f, 0xd5, 0xa4, 0x18, 0xca, 0x03, 0x50, 0xc1, 0xb5, 0xad, 0x46, 0x65, 0x57, 0x8a, 0xfb, - 0xcf, 0xf5, 0x9d, 0xdd, 0x4b, 0x4f, 0x49, 0x09, 0x1f, 0xb0, 0xc7, 0x04, 0xc9, 0xa0, 0xc2, 0x85, - 0xf3, 0x52, 0x0a, 0x49, 0x90, 0x63, 0x04, 0xf5, 0x17, 0x6a, 0x1b, 0x97, 0x9e, 0x92, 0xa6, 0xc3, - 0x92, 0x0b, 0xe7, 0xa5, 0x19, 0x34, 0x0b, 0x19, 0x2a, 0x59, 0x6f, 0x34, 0xb6, 0xa4, 0xb4, 0xcf, - 0xd9, 0xda, 0x95, 0xeb, 0x3b, 0x9b, 0x52, 0xc6, 0xe7, 0xdc, 0x94, 0x1b, 0x7b, 0x4d, 0x09, 0x7c, - 0x86, 0xed, 0x5a, 0xab, 0x55, 0xd9, 0xac, 0x49, 0x59, 0x5f, 0x63, 0xfd, 0xc5, 0xdd, 0x5a, 0x4b, - 0xca, 0x85, 0xcc, 0xba, 0x70, 0x5e, 0x9a, 0xf5, 0x5f, 0x51, 0xdb, 0xd9, 0xdb, 0x96, 0xf2, 0x68, - 0x1e, 0x66, 0xd9, 0x2b, 0x84, 0x11, 0x73, 0x43, 0xa2, 0x4b, 0x4f, 0x49, 0xd2, 0xc0, 0x10, 0xc6, - 0x32, 0x1f, 0x12, 0x5c, 0x7a, 0x4a, 0x42, 0xa5, 0x2a, 0xa4, 0x68, 0x74, 0x21, 0x04, 0xf9, 0xad, - 0xca, 0x7a, 0x6d, 0x4b, 0x69, 0x34, 0x77, 0xeb, 0x8d, 0x9d, 0xca, 0x96, 0x14, 0x1b, 0xc8, 0xe4, - 0xda, 0x67, 0xf6, 0xea, 0x72, 0x6d, 0x43, 0x8a, 0x07, 0x65, 0xcd, 0x5a, 0x65, 0xb7, 0xb6, 0x21, - 0x25, 0x4a, 0x1a, 0x2c, 0x8e, 0xcb, 0x93, 0x63, 0x77, 0x46, 0x60, 0x89, 0xe3, 0xc7, 0x2c, 0x31, - 0xe5, 0x1a, 0x59, 0xe2, 0x1f, 0xc4, 0x61, 0x61, 0x4c, 0xad, 0x18, 0xfb, 0x92, 0x67, 0x21, 0xc5, - 0x42, 0x94, 0x55, 0xcf, 0xc7, 0xc7, 0x16, 0x1d, 0x1a, 0xb0, 0x23, 0x15, 0x94, 0xe2, 0x82, 0x1d, - 0x44, 0xe2, 0x98, 0x0e, 0x82, 0x50, 0x8c, 0xe4, 0xf4, 0x9f, 0x1b, 0xc9, 0xe9, 0xac, 0xec, 0x5d, - 0x9a, 0xa4, 0xec, 0x51, 0xd9, 0xc9, 0x72, 0x7b, 0x6a, 0x4c, 0x6e, 0xbf, 0x0a, 0xf3, 0x23, 0x44, - 0x13, 0xe7, 0xd8, 0x57, 0x62, 0x50, 0x38, 0xce, 0x39, 0x11, 0x99, 0x2e, 0x1e, 0xca, 0x74, 0x57, - 0x87, 0x3d, 0x78, 0xee, 0xf8, 0x45, 0x18, 0x59, 0xeb, 0x37, 0x62, 0x70, 0x6a, 0x7c, 0xa7, 0x38, - 0xd6, 0x86, 0x67, 0x60, 0xba, 0x87, 0xbd, 0x03, 0x4b, 0x74, 0x4b, 0x1f, 0x1f, 0x53, 0x83, 0xc9, - 0xf0, 0xf0, 0x62, 0x73, 0x54, 0xb0, 0x88, 0x27, 0x8e, 0x6b, 0xf7, 0x98, 0x35, 0x23, 0x96, 0x7e, - 0x21, 0x0e, 0x0f, 0x8c, 0x25, 0x1f, 0x6b, 0xe8, 0x43, 0x00, 0xba, 0x69, 0xf7, 0x3d, 0xd6, 0x11, - 0xb1, 0x04, 0x9b, 0xa1, 0x12, 0x9a, 0xbc, 0x48, 0xf2, 0xec, 0x7b, 0xfe, 0x78, 0x82, 0x8e, 0x03, - 0x13, 0x51, 0x85, 0xcb, 0x03, 0x43, 0x93, 0xd4, 0xd0, 0xe2, 0x31, 0x33, 0x1d, 0x09, 0xcc, 0x4f, - 0x82, 0xa4, 0x19, 0x3a, 0x36, 0x3d, 0xc5, 0xf5, 0x1c, 0xac, 0xf6, 0x74, 0xb3, 0x4b, 0x2b, 0x48, - 0xba, 0x9c, 0xea, 0xa8, 0x86, 0x8b, 0xe5, 0x39, 0x36, 0xdc, 0x12, 0xa3, 0x04, 0x41, 0x03, 0xc8, - 0x09, 0x20, 0xa6, 0x43, 0x08, 0x36, 0xec, 0x23, 0x4a, 0x6f, 0xa6, 0x21, 0x1b, 0xe8, 0xab, 0xd1, - 0x39, 0xc8, 0x5d, 0x57, 0x6f, 0xaa, 0x8a, 0x38, 0x2b, 0x31, 0x4f, 0x64, 0x89, 0xac, 0xc9, 0xcf, - 0x4b, 0x9f, 0x84, 0x45, 0xaa, 0x62, 0xf5, 0x3d, 0xec, 0x28, 0x9a, 0xa1, 0xba, 0x2e, 0x75, 0x5a, - 0x9a, 0xaa, 0x22, 0x32, 0xd6, 0x20, 0x43, 0x55, 0x31, 0x82, 0x2e, 0xc2, 0x02, 0x45, 0xf4, 0xfa, - 0x86, 0xa7, 0xdb, 0x06, 0x56, 0xc8, 0xe9, 0xcd, 0xa5, 0x95, 0xc4, 0xb7, 0x6c, 0x9e, 0x68, 0x6c, - 0x73, 0x05, 0x62, 0x91, 0x8b, 0x36, 0xe0, 0x21, 0x0a, 0xeb, 0x62, 0x13, 0x3b, 0xaa, 0x87, 0x15, - 0xfc, 0xf9, 0xbe, 0x6a, 0xb8, 0x8a, 0x6a, 0xb6, 0x95, 0x03, 0xd5, 0x3d, 0x28, 0x2c, 0x12, 0x82, - 0xf5, 0x78, 0x21, 0x26, 0x9f, 0x21, 0x8a, 0x9b, 0x5c, 0xaf, 0x46, 0xd5, 0x2a, 0x66, 0xfb, 0xd3, - 0xaa, 0x7b, 0x80, 0xca, 0x70, 0x8a, 0xb2, 0xb8, 0x9e, 0xa3, 0x9b, 0x5d, 0x45, 0x3b, 0xc0, 0xda, - 0x0d, 0xa5, 0xef, 0x75, 0x2e, 0x17, 0x1e, 0x0c, 0xbe, 0x9f, 0x5a, 0xd8, 0xa2, 0x3a, 0x55, 0xa2, - 0xb2, 0xe7, 0x75, 0x2e, 0xa3, 0x16, 0xe4, 0xc8, 0x62, 0xf4, 0xf4, 0xdb, 0x58, 0xe9, 0x58, 0x0e, - 0x2d, 0x8d, 0xf9, 0x31, 0xa9, 0x29, 0xe0, 0xc1, 0xd5, 0x06, 0x07, 0x6c, 0x5b, 0x6d, 0x5c, 0x4e, - 0xb5, 0x9a, 0xb5, 0xda, 0x86, 0x9c, 0x15, 0x2c, 0xd7, 0x2c, 0x87, 0x04, 0x54, 0xd7, 0xf2, 0x1d, - 0x9c, 0x65, 0x01, 0xd5, 0xb5, 0x84, 0x7b, 0x2f, 0xc2, 0x82, 0xa6, 0xb1, 0x39, 0xeb, 0x9a, 0xc2, - 0xcf, 0x58, 0x6e, 0x41, 0x0a, 0x39, 0x4b, 0xd3, 0x36, 0x99, 0x02, 0x8f, 0x71, 0x17, 0x5d, 0x81, - 0x07, 0x06, 0xce, 0x0a, 0x02, 0xe7, 0x47, 0x66, 0x39, 0x0c, 0xbd, 0x08, 0x0b, 0xf6, 0xe1, 0x28, - 0x10, 0x85, 0xde, 0x68, 0x1f, 0x0e, 0xc3, 0x9e, 0x86, 0x45, 0xfb, 0xc0, 0x1e, 0xc5, 0x3d, 0x11, - 0xc4, 0x21, 0xfb, 0xc0, 0x1e, 0x06, 0x3e, 0x4a, 0x0f, 0xdc, 0x0e, 0xd6, 0x54, 0x0f, 0xb7, 0x0b, - 0xa7, 0x83, 0xea, 0x81, 0x01, 0xb4, 0x06, 0x92, 0xa6, 0x29, 0xd8, 0x54, 0xf7, 0x0d, 0xac, 0xa8, - 0x0e, 0x36, 0x55, 0xb7, 0x70, 0x36, 0xa8, 0x9c, 0xd7, 0xb4, 0x1a, 0x1d, 0xad, 0xd0, 0x41, 0xf4, - 0x04, 0xcc, 0x5b, 0xfb, 0xd7, 0x35, 0x16, 0x92, 0x8a, 0xed, 0xe0, 0x8e, 0xfe, 0x72, 0xe1, 0x11, - 0xea, 0xdf, 0x39, 0x32, 0x40, 0x03, 0xb2, 0x49, 0xc5, 0xe8, 0x71, 0x90, 0x34, 0xf7, 0x40, 0x75, - 0x6c, 0x9a, 0x93, 0x5d, 0x5b, 0xd5, 0x70, 0xe1, 0x51, 0xa6, 0xca, 0xe4, 0x3b, 0x42, 0x4c, 0xb6, - 0x84, 0x7b, 0x4b, 0xef, 0x78, 0x82, 0xf1, 0x31, 0xb6, 0x25, 0xa8, 0x8c, 0xb3, 0xad, 0x80, 0x44, - 0x5c, 0x11, 0x7a, 0xf1, 0x0a, 0x55, 0xcb, 0xdb, 0x07, 0x76, 0xf0, 0xbd, 0x0f, 0xc3, 0x2c, 0xd1, - 0x1c, 0xbc, 0xf4, 0x71, 0xd6, 0x90, 0xd9, 0x07, 0x81, 0x37, 0x7e, 0x68, 0xbd, 0x71, 0xa9, 0x0c, - 0xb9, 0x60, 0x7c, 0xa2, 0x0c, 0xb0, 0x08, 0x95, 0x62, 0xa4, 0x59, 0xa9, 0x36, 0x36, 0x48, 0x9b, - 0xf1, 0x52, 0x4d, 0x8a, 0x93, 0x76, 0x67, 0xab, 0xbe, 0x5b, 0x53, 0xe4, 0xbd, 0x9d, 0xdd, 0xfa, - 0x76, 0x4d, 0x4a, 0x04, 0xfb, 0xea, 0xef, 0xc6, 0x21, 0x1f, 0x3e, 0x22, 0xa1, 0x9f, 0x86, 0xd3, - 0xe2, 0x3e, 0xc3, 0xc5, 0x9e, 0x72, 0x4b, 0x77, 0xe8, 0x96, 0xe9, 0xa9, 0xac, 0x7c, 0xf9, 0x8b, - 0xb6, 0xc8, 0xb5, 0x5a, 0xd8, 0x7b, 0x5e, 0x77, 0xc8, 0x86, 0xe8, 0xa9, 0x1e, 0xda, 0x82, 0xb3, - 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0xb6, 0x55, 0xa7, 0xad, 0x0c, 0x6e, 0x92, 0x14, 0x55, 0xd3, 0xb0, - 0xeb, 0x5a, 0xac, 0x54, 0xf9, 0x2c, 0x1f, 0x33, 0xad, 0x16, 0x57, 0x1e, 0xe4, 0xf0, 0x0a, 0x57, - 0x1d, 0x0a, 0xb0, 0xc4, 0x71, 0x01, 0xf6, 0x20, 0x64, 0x7a, 0xaa, 0xad, 0x60, 0xd3, 0x73, 0x0e, - 0x69, 0x63, 0x9c, 0x96, 0xd3, 0x3d, 0xd5, 0xae, 0x91, 0xe7, 0x8f, 0xe6, 0x7c, 0xf2, 0xaf, 0x09, - 0xc8, 0x05, 0x9b, 0x63, 0x72, 0xd6, 0xd0, 0x68, 0x1d, 0x89, 0xd1, 0x4c, 0xf3, 0xf0, 0x7d, 0x5b, - 0xe9, 0xd5, 0x2a, 0x29, 0x30, 0xe5, 0x69, 0xd6, 0xb2, 0xca, 0x0c, 0x49, 0x8a, 0x3b, 0xc9, 0x2d, - 0x98, 0xb5, 0x08, 0x69, 0x99, 0x3f, 0xa1, 0x4d, 0x98, 0xbe, 0xee, 0x52, 0xee, 0x69, 0xca, 0xfd, - 0xc8, 0xfd, 0xb9, 0x9f, 0x6b, 0x51, 0xf2, 0xcc, 0x73, 0x2d, 0x65, 0xa7, 0x21, 0x6f, 0x57, 0xb6, - 0x64, 0x0e, 0x47, 0x67, 0x20, 0x69, 0xa8, 0xb7, 0x0f, 0xc3, 0xa5, 0x88, 0x8a, 0x26, 0x75, 0xfc, - 0x19, 0x48, 0xde, 0xc2, 0xea, 0x8d, 0x70, 0x01, 0xa0, 0xa2, 0x0f, 0x31, 0xf4, 0xd7, 0x20, 0x45, - 0xfd, 0x85, 0x00, 0xb8, 0xc7, 0xa4, 0x29, 0x94, 0x86, 0x64, 0xb5, 0x21, 0x93, 0xf0, 0x97, 0x20, - 0xc7, 0xa4, 0x4a, 0xb3, 0x5e, 0xab, 0xd6, 0xa4, 0x78, 0xe9, 0x22, 0x4c, 0x33, 0x27, 0x90, 0xad, - 0xe1, 0xbb, 0x41, 0x9a, 0xe2, 0x8f, 0x9c, 0x23, 0x26, 0x46, 0xf7, 0xb6, 0xd7, 0x6b, 0xb2, 0x14, - 0x0f, 0x2e, 0xaf, 0x0b, 0xb9, 0x60, 0x5f, 0xfc, 0xd1, 0xc4, 0xd4, 0xdf, 0xc7, 0x20, 0x1b, 0xe8, - 0x73, 0x49, 0x83, 0xa2, 0x1a, 0x86, 0x75, 0x4b, 0x51, 0x0d, 0x5d, 0x75, 0x79, 0x50, 0x00, 0x15, - 0x55, 0x88, 0x64, 0xd2, 0x45, 0xfb, 0x48, 0x8c, 0x7f, 0x3d, 0x06, 0xd2, 0x70, 0x8b, 0x39, 0x64, - 0x60, 0xec, 0x27, 0x6a, 0xe0, 0x6b, 0x31, 0xc8, 0x87, 0xfb, 0xca, 0x21, 0xf3, 0xce, 0xfd, 0x44, - 0xcd, 0x7b, 0x3b, 0x0e, 0xb3, 0xa1, 0x6e, 0x72, 0x52, 0xeb, 0x3e, 0x0f, 0xf3, 0x7a, 0x1b, 0xf7, - 0x6c, 0xcb, 0xc3, 0xa6, 0x76, 0xa8, 0x18, 0xf8, 0x26, 0x36, 0x0a, 0x25, 0x9a, 0x28, 0xd6, 0xee, - 0xdf, 0xaf, 0xae, 0xd6, 0x07, 0xb8, 0x2d, 0x02, 0x2b, 0x2f, 0xd4, 0x37, 0x6a, 0xdb, 0xcd, 0xc6, - 0x6e, 0x6d, 0xa7, 0xfa, 0xa2, 0xb2, 0xb7, 0xf3, 0xb3, 0x3b, 0x8d, 0xe7, 0x77, 0x64, 0x49, 0x1f, - 0x52, 0xfb, 0x10, 0xb7, 0x7a, 0x13, 0xa4, 0x61, 0xa3, 0xd0, 0x69, 0x18, 0x67, 0x96, 0x34, 0x85, - 0x16, 0x60, 0x6e, 0xa7, 0xa1, 0xb4, 0xea, 0x1b, 0x35, 0xa5, 0x76, 0xed, 0x5a, 0xad, 0xba, 0xdb, - 0x62, 0x37, 0x10, 0xbe, 0xf6, 0x6e, 0x78, 0x53, 0xbf, 0x9a, 0x80, 0x85, 0x31, 0x96, 0xa0, 0x0a, - 0x3f, 0x3b, 0xb0, 0xe3, 0xcc, 0x27, 0x26, 0xb1, 0x7e, 0x95, 0x94, 0xfc, 0xa6, 0xea, 0x78, 0xfc, - 0xa8, 0xf1, 0x38, 0x10, 0x2f, 0x99, 0x9e, 0xde, 0xd1, 0xb1, 0xc3, 0x2f, 0x6c, 0xd8, 0x81, 0x62, - 0x6e, 0x20, 0x67, 0x77, 0x36, 0x3f, 0x05, 0xc8, 0xb6, 0x5c, 0xdd, 0xd3, 0x6f, 0x62, 0x45, 0x37, - 0xc5, 0xed, 0x0e, 0x39, 0x60, 0x24, 0x65, 0x49, 0x8c, 0xd4, 0x4d, 0xcf, 0xd7, 0x36, 0x71, 0x57, - 0x1d, 0xd2, 0x26, 0x09, 0x3c, 0x21, 0x4b, 0x62, 0xc4, 0xd7, 0x3e, 0x07, 0xb9, 0xb6, 0xd5, 0x27, - 0x5d, 0x17, 0xd3, 0x23, 0xf5, 0x22, 0x26, 0x67, 0x99, 0xcc, 0x57, 0xe1, 0xfd, 0xf4, 0xe0, 0x5a, - 0x29, 0x27, 0x67, 0x99, 0x8c, 0xa9, 0x3c, 0x06, 0x73, 0x6a, 0xb7, 0xeb, 0x10, 0x72, 0x41, 0xc4, - 0x4e, 0x08, 0x79, 0x5f, 0x4c, 0x15, 0x97, 0x9e, 0x83, 0xb4, 0xf0, 0x03, 0x29, 0xc9, 0xc4, 0x13, - 0x8a, 0xcd, 0x8e, 0xbd, 0xf1, 0x95, 0x8c, 0x9c, 0x36, 0xc5, 0xe0, 0x39, 0xc8, 0xe9, 0xae, 0x32, - 0xb8, 0x25, 0x8f, 0x2f, 0xc7, 0x57, 0xd2, 0x72, 0x56, 0x77, 0xfd, 0x1b, 0xc6, 0xd2, 0x1b, 0x71, - 0xc8, 0x87, 0x6f, 0xf9, 0xd1, 0x06, 0xa4, 0x0d, 0x4b, 0x53, 0x69, 0x68, 0xb1, 0x4f, 0x4c, 0x2b, - 0x11, 0x1f, 0x06, 0x56, 0xb7, 0xb8, 0xbe, 0xec, 0x23, 0x97, 0xfe, 0x39, 0x06, 0x69, 0x21, 0x46, - 0xa7, 0x20, 0x69, 0xab, 0xde, 0x01, 0xa5, 0x4b, 0xad, 0xc7, 0xa5, 0x98, 0x4c, 0x9f, 0x89, 0xdc, - 0xb5, 0x55, 0x93, 0x86, 0x00, 0x97, 0x93, 0x67, 0xb2, 0xae, 0x06, 0x56, 0xdb, 0xf4, 0xf8, 0x61, - 0xf5, 0x7a, 0xd8, 0xf4, 0x5c, 0xb1, 0xae, 0x5c, 0x5e, 0xe5, 0x62, 0xf4, 0x24, 0xcc, 0x7b, 0x8e, - 0xaa, 0x1b, 0x21, 0xdd, 0x24, 0xd5, 0x95, 0xc4, 0x80, 0xaf, 0x5c, 0x86, 0x33, 0x82, 0xb7, 0x8d, - 0x3d, 0x55, 0x3b, 0xc0, 0xed, 0x01, 0x68, 0x9a, 0x5e, 0x33, 0x9c, 0xe6, 0x0a, 0x1b, 0x7c, 0x5c, - 0x60, 0x4b, 0xdf, 0x8f, 0xc1, 0xbc, 0x38, 0x30, 0xb5, 0x7d, 0x67, 0x6d, 0x03, 0xa8, 0xa6, 0x69, - 0x79, 0x41, 0x77, 0x8d, 0x86, 0xf2, 0x08, 0x6e, 0xb5, 0xe2, 0x83, 0xe4, 0x00, 0xc1, 0x52, 0x0f, - 0x60, 0x30, 0x72, 0xac, 0xdb, 0xce, 0x42, 0x96, 0x7f, 0xc2, 0xa1, 0xdf, 0x01, 0xd9, 0x11, 0x1b, - 0x98, 0x88, 0x9c, 0xac, 0xd0, 0x22, 0xa4, 0xf6, 0x71, 0x57, 0x37, 0xf9, 0xc5, 0x2c, 0x7b, 0x10, - 0x17, 0x21, 0x49, 0xff, 0x22, 0x64, 0xfd, 0x73, 0xb0, 0xa0, 0x59, 0xbd, 0x61, 0x73, 0xd7, 0xa5, - 0xa1, 0x63, 0xbe, 0xfb, 0xe9, 0xd8, 0x4b, 0x30, 0x68, 0x31, 0x3f, 0x88, 0xc5, 0xfe, 0x38, 0x9e, - 0xd8, 0x6c, 0xae, 0x7f, 0x3d, 0xbe, 0xb4, 0xc9, 0xa0, 0x4d, 0x31, 0x53, 0x19, 0x77, 0x0c, 0xac, - 0x11, 0xeb, 0xe1, 0xab, 0x2b, 0xf0, 0x89, 0xae, 0xee, 0x1d, 0xf4, 0xf7, 0x57, 0x35, 0xab, 0xb7, - 0xd6, 0xb5, 0xba, 0xd6, 0xe0, 0xd3, 0x27, 0x79, 0xa2, 0x0f, 0xf4, 0x3f, 0xfe, 0xf9, 0x33, 0xe3, - 0x4b, 0x97, 0x22, 0xbf, 0x95, 0x96, 0x77, 0x60, 0x81, 0x2b, 0x2b, 0xf4, 0xfb, 0x0b, 0x3b, 0x45, - 0xa0, 0xfb, 0xde, 0x61, 0x15, 0xbe, 0xf9, 0x0e, 0x2d, 0xd7, 0xf2, 0x3c, 0x87, 0x92, 0x31, 0x76, - 0xd0, 0x28, 0xcb, 0xf0, 0x40, 0x88, 0x8f, 0x6d, 0x4d, 0xec, 0x44, 0x30, 0x7e, 0x97, 0x33, 0x2e, - 0x04, 0x18, 0x5b, 0x1c, 0x5a, 0xae, 0xc2, 0xec, 0x49, 0xb8, 0xfe, 0x91, 0x73, 0xe5, 0x70, 0x90, - 0x64, 0x13, 0xe6, 0x28, 0x89, 0xd6, 0x77, 0x3d, 0xab, 0x47, 0xf3, 0xde, 0xfd, 0x69, 0xfe, 0xe9, - 0x1d, 0xb6, 0x57, 0xf2, 0x04, 0x56, 0xf5, 0x51, 0xe5, 0x32, 0xd0, 0x4f, 0x4e, 0x6d, 0xac, 0x19, - 0x11, 0x0c, 0x6f, 0x71, 0x43, 0x7c, 0xfd, 0xf2, 0x67, 0x61, 0x91, 0xfc, 0x4f, 0xd3, 0x52, 0xd0, - 0x92, 0xe8, 0x0b, 0xaf, 0xc2, 0xf7, 0x5f, 0x61, 0xdb, 0x71, 0xc1, 0x27, 0x08, 0xd8, 0x14, 0x58, - 0xc5, 0x2e, 0xf6, 0x3c, 0xec, 0xb8, 0x8a, 0x6a, 0x8c, 0x33, 0x2f, 0x70, 0x63, 0x50, 0xf8, 0xd2, - 0xbb, 0xe1, 0x55, 0xdc, 0x64, 0xc8, 0x8a, 0x61, 0x94, 0xf7, 0xe0, 0xf4, 0x98, 0xa8, 0x98, 0x80, - 0xf3, 0x55, 0xce, 0xb9, 0x38, 0x12, 0x19, 0x84, 0xb6, 0x09, 0x42, 0xee, 0xaf, 0xe5, 0x04, 0x9c, - 0x7f, 0xc0, 0x39, 0x11, 0xc7, 0x8a, 0x25, 0x25, 0x8c, 0xcf, 0xc1, 0xfc, 0x4d, 0xec, 0xec, 0x5b, - 0x2e, 0xbf, 0xa5, 0x99, 0x80, 0xee, 0x35, 0x4e, 0x37, 0xc7, 0x81, 0xf4, 0xda, 0x86, 0x70, 0x5d, - 0x81, 0x74, 0x47, 0xd5, 0xf0, 0x04, 0x14, 0x5f, 0xe6, 0x14, 0x33, 0x44, 0x9f, 0x40, 0x2b, 0x90, - 0xeb, 0x5a, 0xbc, 0x32, 0x45, 0xc3, 0x5f, 0xe7, 0xf0, 0xac, 0xc0, 0x70, 0x0a, 0xdb, 0xb2, 0xfb, - 0x06, 0x29, 0x5b, 0xd1, 0x14, 0x7f, 0x28, 0x28, 0x04, 0x86, 0x53, 0x9c, 0xc0, 0xad, 0x7f, 0x24, - 0x28, 0xdc, 0x80, 0x3f, 0x9f, 0x85, 0xac, 0x65, 0x1a, 0x87, 0x96, 0x39, 0x89, 0x11, 0x5f, 0xe1, - 0x0c, 0xc0, 0x21, 0x84, 0xe0, 0x2a, 0x64, 0x26, 0x5d, 0x88, 0xaf, 0xbe, 0x2b, 0xb6, 0x87, 0x58, - 0x81, 0x4d, 0x98, 0x13, 0x09, 0x4a, 0xb7, 0xcc, 0x09, 0x28, 0xfe, 0x84, 0x53, 0xe4, 0x03, 0x30, - 0x3e, 0x0d, 0x0f, 0xbb, 0x5e, 0x17, 0x4f, 0x42, 0xf2, 0x86, 0x98, 0x06, 0x87, 0x70, 0x57, 0xee, - 0x63, 0x53, 0x3b, 0x98, 0x8c, 0xe1, 0x6b, 0xc2, 0x95, 0x02, 0x43, 0x28, 0xaa, 0x30, 0xdb, 0x53, - 0x1d, 0xf7, 0x40, 0x35, 0x26, 0x5a, 0x8e, 0x3f, 0xe5, 0x1c, 0x39, 0x1f, 0xc4, 0x3d, 0xd2, 0x37, - 0x4f, 0x42, 0xf3, 0x75, 0xe1, 0x91, 0x00, 0x8c, 0x6f, 0x3d, 0xd7, 0xa3, 0x57, 0x5a, 0x27, 0x61, - 0xfb, 0x33, 0xb1, 0xf5, 0x18, 0x76, 0x3b, 0xc8, 0x78, 0x15, 0x32, 0xae, 0x7e, 0x7b, 0x22, 0x9a, - 0x3f, 0x17, 0x2b, 0x4d, 0x01, 0x04, 0xfc, 0x22, 0x9c, 0x19, 0x5b, 0x26, 0x26, 0x20, 0xfb, 0x0b, - 0x4e, 0x76, 0x6a, 0x4c, 0xa9, 0xe0, 0x29, 0xe1, 0xa4, 0x94, 0x7f, 0x29, 0x52, 0x02, 0x1e, 0xe2, - 0x6a, 0x92, 0xb3, 0x82, 0xab, 0x76, 0x4e, 0xe6, 0xb5, 0xbf, 0x12, 0x5e, 0x63, 0xd8, 0x90, 0xd7, - 0x76, 0xe1, 0x14, 0x67, 0x3c, 0xd9, 0xba, 0x7e, 0x43, 0x24, 0x56, 0x86, 0xde, 0x0b, 0xaf, 0xee, - 0xe7, 0x60, 0xc9, 0x77, 0xa7, 0x68, 0x4a, 0x5d, 0xa5, 0xa7, 0xda, 0x13, 0x30, 0x7f, 0x93, 0x33, - 0x8b, 0x8c, 0xef, 0x77, 0xb5, 0xee, 0xb6, 0x6a, 0x13, 0xf2, 0x17, 0xa0, 0x20, 0xc8, 0xfb, 0xa6, - 0x83, 0x35, 0xab, 0x6b, 0xea, 0xb7, 0x71, 0x7b, 0x02, 0xea, 0xbf, 0x1e, 0x5a, 0xaa, 0xbd, 0x00, - 0x9c, 0x30, 0xd7, 0x41, 0xf2, 0x7b, 0x15, 0x45, 0xef, 0xd9, 0x96, 0xe3, 0x45, 0x30, 0xbe, 0x29, - 0x56, 0xca, 0xc7, 0xd5, 0x29, 0xac, 0x5c, 0x83, 0x3c, 0x7d, 0x9c, 0x34, 0x24, 0xff, 0x86, 0x13, - 0xcd, 0x0e, 0x50, 0x3c, 0x71, 0x68, 0x56, 0xcf, 0x56, 0x9d, 0x49, 0xf2, 0xdf, 0xdf, 0x8a, 0xc4, - 0xc1, 0x21, 0x3c, 0x71, 0x78, 0x87, 0x36, 0x26, 0xd5, 0x7e, 0x02, 0x86, 0x6f, 0x89, 0xc4, 0x21, - 0x30, 0x9c, 0x42, 0x34, 0x0c, 0x13, 0x50, 0xfc, 0x9d, 0xa0, 0x10, 0x18, 0x42, 0xf1, 0x99, 0x41, - 0xa1, 0x75, 0x70, 0x57, 0x77, 0x3d, 0x87, 0xb5, 0xc2, 0xf7, 0xa7, 0xfa, 0xf6, 0xbb, 0xe1, 0x26, - 0x4c, 0x0e, 0x40, 0x49, 0x26, 0xe2, 0x57, 0xa8, 0xf4, 0xa4, 0x14, 0x6d, 0xd8, 0x77, 0x44, 0x26, - 0x0a, 0xc0, 0xd8, 0xfe, 0x9c, 0x1b, 0xea, 0x55, 0x50, 0xd4, 0x0f, 0x61, 0x0a, 0xbf, 0xf8, 0x3e, - 0xe7, 0x0a, 0xb7, 0x2a, 0xe5, 0x2d, 0x12, 0x40, 0xe1, 0x86, 0x22, 0x9a, 0xec, 0x95, 0xf7, 0xfd, - 0x18, 0x0a, 0xf5, 0x13, 0xe5, 0x6b, 0x30, 0x1b, 0x6a, 0x26, 0xa2, 0xa9, 0x7e, 0x89, 0x53, 0xe5, - 0x82, 0xbd, 0x44, 0xf9, 0x22, 0x24, 0x49, 0x63, 0x10, 0x0d, 0xff, 0x65, 0x0e, 0xa7, 0xea, 0xe5, - 0x4f, 0x41, 0x5a, 0x34, 0x04, 0xd1, 0xd0, 0x5f, 0xe1, 0x50, 0x1f, 0x42, 0xe0, 0xa2, 0x19, 0x88, - 0x86, 0xff, 0xaa, 0x80, 0x0b, 0x08, 0x81, 0x4f, 0xee, 0xc2, 0x7f, 0xf8, 0xb5, 0x24, 0x4f, 0xe8, - 0xc2, 0x77, 0x57, 0x61, 0x86, 0x77, 0x01, 0xd1, 0xe8, 0x2f, 0xf0, 0x97, 0x0b, 0x44, 0xf9, 0x69, - 0x48, 0x4d, 0xe8, 0xf0, 0x5f, 0xe7, 0x50, 0xa6, 0x5f, 0xae, 0x42, 0x36, 0x50, 0xf9, 0xa3, 0xe1, - 0xbf, 0xc1, 0xe1, 0x41, 0x14, 0x31, 0x9d, 0x57, 0xfe, 0x68, 0x82, 0xdf, 0x14, 0xa6, 0x73, 0x04, - 0x71, 0x9b, 0x28, 0xfa, 0xd1, 0xe8, 0xdf, 0x12, 0x5e, 0x17, 0x90, 0xf2, 0xb3, 0x90, 0xf1, 0x13, - 0x79, 0x34, 0xfe, 0xb7, 0x39, 0x7e, 0x80, 0x21, 0x1e, 0x08, 0x14, 0x92, 0x68, 0x8a, 0xdf, 0x11, - 0x1e, 0x08, 0xa0, 0xc8, 0x36, 0x1a, 0x6e, 0x0e, 0xa2, 0x99, 0x7e, 0x57, 0x6c, 0xa3, 0xa1, 0xde, - 0x80, 0xac, 0x26, 0xcd, 0xa7, 0xd1, 0x14, 0xbf, 0x27, 0x56, 0x93, 0xea, 0x13, 0x33, 0x86, 0xab, - 0x6d, 0x34, 0xc7, 0xef, 0x0b, 0x33, 0x86, 0x8a, 0x6d, 0xb9, 0x09, 0x68, 0xb4, 0xd2, 0x46, 0xf3, - 0x7d, 0x91, 0xf3, 0xcd, 0x8f, 0x14, 0xda, 0xf2, 0xf3, 0x70, 0x6a, 0x7c, 0x95, 0x8d, 0x66, 0xfd, - 0xd2, 0xfb, 0x43, 0xe7, 0xa2, 0x60, 0x91, 0x2d, 0xef, 0x0e, 0xd2, 0x75, 0xb0, 0xc2, 0x46, 0xd3, - 0xbe, 0xfa, 0x7e, 0x38, 0x63, 0x07, 0x0b, 0x6c, 0xb9, 0x02, 0x30, 0x28, 0x6e, 0xd1, 0x5c, 0xaf, - 0x71, 0xae, 0x00, 0x88, 0x6c, 0x0d, 0x5e, 0xdb, 0xa2, 0xf1, 0x5f, 0x16, 0x5b, 0x83, 0x23, 0xc8, - 0xd6, 0x10, 0x65, 0x2d, 0x1a, 0xfd, 0xba, 0xd8, 0x1a, 0x02, 0x42, 0x22, 0x3b, 0x50, 0x39, 0xa2, - 0x19, 0xbe, 0x22, 0x22, 0x3b, 0x80, 0x2a, 0x5f, 0x85, 0xb4, 0xd9, 0x37, 0x0c, 0x12, 0xa0, 0xe8, - 0xfe, 0x3f, 0x10, 0x2b, 0xfc, 0xfb, 0x3d, 0x6e, 0x81, 0x00, 0x94, 0x2f, 0x42, 0x0a, 0xf7, 0xf6, - 0x71, 0x3b, 0x0a, 0xf9, 0x1f, 0xf7, 0x44, 0x52, 0x22, 0xda, 0xe5, 0x67, 0x01, 0xd8, 0xd1, 0x9e, - 0x7e, 0xb6, 0x8a, 0xc0, 0xfe, 0xe7, 0x3d, 0xfe, 0xd3, 0x8d, 0x01, 0x64, 0x40, 0xc0, 0x7e, 0x08, - 0x72, 0x7f, 0x82, 0x77, 0xc3, 0x04, 0x74, 0xd6, 0x57, 0x60, 0xe6, 0xba, 0x6b, 0x99, 0x9e, 0xda, - 0x8d, 0x42, 0xff, 0x17, 0x47, 0x0b, 0x7d, 0xe2, 0xb0, 0x9e, 0xe5, 0x60, 0x4f, 0xed, 0xba, 0x51, - 0xd8, 0xff, 0xe6, 0x58, 0x1f, 0x40, 0xc0, 0x9a, 0xea, 0x7a, 0x93, 0xcc, 0xfb, 0x47, 0x02, 0x2c, - 0x00, 0xc4, 0x68, 0xf2, 0xff, 0x0d, 0x7c, 0x18, 0x85, 0x7d, 0x4f, 0x18, 0xcd, 0xf5, 0xcb, 0x9f, - 0x82, 0x0c, 0xf9, 0x97, 0xfd, 0x1e, 0x2b, 0x02, 0xfc, 0x3f, 0x1c, 0x3c, 0x40, 0x90, 0x37, 0xbb, - 0x5e, 0xdb, 0xd3, 0xa3, 0x9d, 0xfd, 0xbf, 0x7c, 0xa5, 0x85, 0x7e, 0xb9, 0x02, 0x59, 0xd7, 0x6b, - 0xb7, 0xfb, 0xbc, 0xbf, 0x8a, 0x80, 0xff, 0xdf, 0x3d, 0xff, 0xc8, 0xed, 0x63, 0xd6, 0x6b, 0xe3, - 0x6f, 0x0f, 0x61, 0xd3, 0xda, 0xb4, 0xd8, 0xbd, 0xe1, 0x4b, 0xa5, 0xe8, 0x0b, 0x40, 0x78, 0x33, - 0x01, 0x05, 0xcd, 0xea, 0xed, 0x5b, 0xee, 0x9a, 0x89, 0x75, 0xef, 0x00, 0x3b, 0x6b, 0x3d, 0xd5, - 0xe6, 0x57, 0x82, 0xd9, 0x9e, 0x6a, 0xf3, 0xdf, 0x5e, 0xba, 0x4b, 0x27, 0xbb, 0x4e, 0x2c, 0xfd, - 0x02, 0xcc, 0x6c, 0xab, 0xf6, 0x2e, 0x76, 0x3d, 0x44, 0x1d, 0x45, 0x7f, 0xe4, 0xc3, 0xef, 0x68, - 0x97, 0x57, 0x03, 0xc4, 0xab, 0x5c, 0x6d, 0xb5, 0xe5, 0x39, 0x2d, 0xcf, 0xa1, 0xdf, 0xb3, 0xe5, - 0x69, 0x97, 0x3e, 0x2c, 0x5d, 0x81, 0x6c, 0x40, 0x8c, 0x24, 0x48, 0xdc, 0xc0, 0x87, 0xfc, 0x67, - 0x3e, 0xe4, 0x5f, 0xb4, 0x38, 0xf8, 0x1d, 0x1e, 0x91, 0xb1, 0x87, 0x72, 0xfc, 0x72, 0xac, 0xf4, - 0x0c, 0xcc, 0x5c, 0x53, 0x6f, 0xe0, 0x6d, 0xd5, 0x46, 0x17, 0x60, 0x06, 0x9b, 0x9e, 0xa3, 0x63, - 0x97, 0x1b, 0x70, 0x26, 0x64, 0x00, 0x57, 0x63, 0x6f, 0x16, 0x9a, 0xa5, 0x2d, 0xc8, 0x05, 0x07, - 0x26, 0x7d, 0x37, 0x91, 0x5a, 0xc4, 0x8f, 0xfc, 0xce, 0x9c, 0x3d, 0xac, 0x6f, 0xbc, 0x75, 0xb7, - 0x38, 0xf5, 0xbd, 0xbb, 0xc5, 0xa9, 0x7f, 0xb9, 0x5b, 0x9c, 0x7a, 0xfb, 0x6e, 0x31, 0xf6, 0xde, - 0xdd, 0x62, 0xec, 0x83, 0xbb, 0xc5, 0xd8, 0x9d, 0xa3, 0x62, 0xec, 0x6b, 0x47, 0xc5, 0xd8, 0x37, - 0x8e, 0x8a, 0xb1, 0x6f, 0x1f, 0x15, 0x63, 0x6f, 0x1d, 0x15, 0xa7, 0xbe, 0x77, 0x54, 0x9c, 0x7a, - 0xfb, 0xa8, 0x18, 0xfb, 0xe1, 0x51, 0x71, 0xea, 0xbd, 0xa3, 0x62, 0xec, 0x83, 0xa3, 0xe2, 0xd4, - 0x9d, 0x1f, 0x14, 0xa7, 0xf6, 0xa7, 0xa9, 0x6f, 0x2f, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x10, 0xa6, 0x90, 0xd0, 0x32, 0x00, 0x00, + // 3978 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xe3, 0xd6, + 0x75, 0x16, 0xff, 0x24, 0xf2, 0x90, 0xa2, 0x20, 0x48, 0xde, 0xe5, 0xca, 0x31, 0x57, 0x4b, 0xdb, + 0xb1, 0x6c, 0x37, 0x52, 0x66, 0xd7, 0xbb, 0xde, 0xe5, 0x36, 0x76, 0x29, 0x89, 0xab, 0xd0, 0x95, + 0x44, 0x06, 0x94, 0xe2, 0x9f, 0x4c, 0x07, 0x03, 0x81, 0x97, 0x14, 0x56, 0x20, 0x80, 0x00, 0xe0, + 0xae, 0xb5, 0xd3, 0x99, 0x6e, 0xc7, 0xfd, 0x99, 0x4c, 0xa7, 0xff, 0x9d, 0x69, 0xe2, 0x3a, 0x6e, + 0x93, 0x4e, 0xe3, 0x34, 0xfd, 0x4b, 0xea, 0x36, 0x4d, 0xd2, 0x97, 0xbe, 0xa4, 0xf5, 0x53, 0x27, + 0x79, 0xeb, 0x43, 0x1f, 0xbc, 0x8a, 0x67, 0x9a, 0xb6, 0x6e, 0xe3, 0xb6, 0xfb, 0xe0, 0x99, 0x7d, + 0xe9, 0xdc, 0x3f, 0x10, 0x00, 0xa9, 0x05, 0x94, 0x19, 0x3b, 0x4f, 0x12, 0xce, 0x3d, 0xdf, 0x87, + 0x73, 0xcf, 0x3d, 0xf7, 0x9c, 0x73, 0x2f, 0x08, 0x3f, 0xba, 0x02, 0x8b, 0x3d, 0xd3, 0xec, 0xe9, + 0x68, 0xc5, 0xb2, 0x4d, 0xd7, 0xdc, 0x1b, 0x74, 0x57, 0x3a, 0xc8, 0x51, 0x6d, 0xcd, 0x72, 0x4d, + 0x7b, 0x99, 0xc8, 0xc4, 0x19, 0xaa, 0xb1, 0xcc, 0x35, 0x2a, 0x5b, 0x30, 0x7b, 0x4d, 0xd3, 0xd1, + 0xba, 0xa7, 0xd8, 0x46, 0xae, 0x78, 0x19, 0xd2, 0x5d, 0x4d, 0x47, 0xa5, 0xc4, 0x62, 0x6a, 0x29, + 0x7f, 0xfe, 0x91, 0xe5, 0x10, 0x68, 0x39, 0x88, 0x68, 0x61, 0xb1, 0x44, 0x10, 0x95, 0x77, 0xd2, + 0x30, 0x37, 0x66, 0x54, 0x14, 0x21, 0x6d, 0x28, 0x7d, 0xcc, 0x98, 0x58, 0xca, 0x49, 0xe4, 0x7f, + 0xb1, 0x04, 0x53, 0x96, 0xa2, 0x1e, 0x28, 0x3d, 0x54, 0x4a, 0x12, 0x31, 0x7f, 0x14, 0xcb, 0x00, + 0x1d, 0x64, 0x21, 0xa3, 0x83, 0x0c, 0xf5, 0xb0, 0x94, 0x5a, 0x4c, 0x2d, 0xe5, 0x24, 0x9f, 0x44, + 0x7c, 0x12, 0x66, 0xad, 0xc1, 0x9e, 0xae, 0xa9, 0xb2, 0x4f, 0x0d, 0x16, 0x53, 0x4b, 0x19, 0x49, + 0xa0, 0x03, 0xeb, 0x43, 0xe5, 0xc7, 0x60, 0xe6, 0x26, 0x52, 0x0e, 0xfc, 0xaa, 0x79, 0xa2, 0x5a, + 0xc4, 0x62, 0x9f, 0xe2, 0x1a, 0x14, 0xfa, 0xc8, 0x71, 0x94, 0x1e, 0x92, 0xdd, 0x43, 0x0b, 0x95, + 0xd2, 0x64, 0xf6, 0x8b, 0x23, 0xb3, 0x0f, 0xcf, 0x3c, 0xcf, 0x50, 0x3b, 0x87, 0x16, 0x12, 0x6b, + 0x90, 0x43, 0xc6, 0xa0, 0x4f, 0x19, 0x32, 0xc7, 0xf8, 0xaf, 0x6e, 0x0c, 0xfa, 0x61, 0x96, 0x2c, + 0x86, 0x31, 0x8a, 0x29, 0x07, 0xd9, 0x37, 0x34, 0x15, 0x95, 0x26, 0x09, 0xc1, 0x63, 0x23, 0x04, + 0x6d, 0x3a, 0x1e, 0xe6, 0xe0, 0x38, 0x71, 0x0d, 0x72, 0xe8, 0x65, 0x17, 0x19, 0x8e, 0x66, 0x1a, + 0xa5, 0x29, 0x42, 0xf2, 0xe8, 0x98, 0x55, 0x44, 0x7a, 0x27, 0x4c, 0x31, 0xc4, 0x89, 0x97, 0x60, + 0xca, 0xb4, 0x5c, 0xcd, 0x34, 0x9c, 0x52, 0x76, 0x31, 0xb1, 0x94, 0x3f, 0xff, 0x91, 0xb1, 0x81, + 0xd0, 0xa4, 0x3a, 0x12, 0x57, 0x16, 0x1b, 0x20, 0x38, 0xe6, 0xc0, 0x56, 0x91, 0xac, 0x9a, 0x1d, + 0x24, 0x6b, 0x46, 0xd7, 0x2c, 0xe5, 0x08, 0xc1, 0xd9, 0xd1, 0x89, 0x10, 0xc5, 0x35, 0xb3, 0x83, + 0x1a, 0x46, 0xd7, 0x94, 0x8a, 0x4e, 0xe0, 0x59, 0x3c, 0x05, 0x93, 0xce, 0xa1, 0xe1, 0x2a, 0x2f, + 0x97, 0x0a, 0x24, 0x42, 0xd8, 0x53, 0xe5, 0xdb, 0x93, 0x30, 0x13, 0x27, 0xc4, 0xae, 0x42, 0xa6, + 0x8b, 0x67, 0x59, 0x4a, 0x9e, 0xc4, 0x07, 0x14, 0x13, 0x74, 0xe2, 0xe4, 0x8f, 0xe9, 0xc4, 0x1a, + 0xe4, 0x0d, 0xe4, 0xb8, 0xa8, 0x43, 0x23, 0x22, 0x15, 0x33, 0xa6, 0x80, 0x82, 0x46, 0x43, 0x2a, + 0xfd, 0x63, 0x85, 0xd4, 0x0b, 0x30, 0xe3, 0x99, 0x24, 0xdb, 0x8a, 0xd1, 0xe3, 0xb1, 0xb9, 0x12, + 0x65, 0xc9, 0x72, 0x9d, 0xe3, 0x24, 0x0c, 0x93, 0x8a, 0x28, 0xf0, 0x2c, 0xae, 0x03, 0x98, 0x06, + 0x32, 0xbb, 0x72, 0x07, 0xa9, 0x7a, 0x29, 0x7b, 0x8c, 0x97, 0x9a, 0x58, 0x65, 0xc4, 0x4b, 0x26, + 0x95, 0xaa, 0xba, 0x78, 0x65, 0x18, 0x6a, 0x53, 0xc7, 0x44, 0xca, 0x16, 0xdd, 0x64, 0x23, 0xd1, + 0xb6, 0x0b, 0x45, 0x1b, 0xe1, 0xb8, 0x47, 0x1d, 0x36, 0xb3, 0x1c, 0x31, 0x62, 0x39, 0x72, 0x66, + 0x12, 0x83, 0xd1, 0x89, 0x4d, 0xdb, 0xfe, 0x47, 0xf1, 0x61, 0xf0, 0x04, 0x32, 0x09, 0x2b, 0x20, + 0x59, 0xa8, 0xc0, 0x85, 0xdb, 0x4a, 0x1f, 0x2d, 0xdc, 0x82, 0x62, 0xd0, 0x3d, 0xe2, 0x3c, 0x64, + 0x1c, 0x57, 0xb1, 0x5d, 0x12, 0x85, 0x19, 0x89, 0x3e, 0x88, 0x02, 0xa4, 0x90, 0xd1, 0x21, 0x59, + 0x2e, 0x23, 0xe1, 0x7f, 0xc5, 0x9f, 0x19, 0x4e, 0x38, 0x45, 0x26, 0xfc, 0xd1, 0xd1, 0x15, 0x0d, + 0x30, 0x87, 0xe7, 0xbd, 0xf0, 0x34, 0x4c, 0x07, 0x26, 0x10, 0xf7, 0xd5, 0x95, 0x9f, 0x87, 0x07, + 0xc6, 0x52, 0x8b, 0x2f, 0xc0, 0xfc, 0xc0, 0xd0, 0x0c, 0x17, 0xd9, 0x96, 0x8d, 0x70, 0xc4, 0xd2, + 0x57, 0x95, 0xfe, 0x6d, 0xea, 0x98, 0x98, 0xdb, 0xf5, 0x6b, 0x53, 0x16, 0x69, 0x6e, 0x30, 0x2a, + 0x7c, 0x22, 0x97, 0xfd, 0xe1, 0x94, 0x70, 0xfb, 0xf6, 0xed, 0xdb, 0xc9, 0xca, 0xe7, 0x27, 0x61, + 0x7e, 0xdc, 0x9e, 0x19, 0xbb, 0x7d, 0x4f, 0xc1, 0xa4, 0x31, 0xe8, 0xef, 0x21, 0x9b, 0x38, 0x29, + 0x23, 0xb1, 0x27, 0xb1, 0x06, 0x19, 0x5d, 0xd9, 0x43, 0x7a, 0x29, 0xbd, 0x98, 0x58, 0x2a, 0x9e, + 0x7f, 0x32, 0xd6, 0xae, 0x5c, 0xde, 0xc4, 0x10, 0x89, 0x22, 0xc5, 0x67, 0x20, 0xcd, 0x52, 0x34, + 0x66, 0x78, 0x22, 0x1e, 0x03, 0xde, 0x4b, 0x12, 0xc1, 0x89, 0x0f, 0x42, 0x0e, 0xff, 0xa5, 0xb1, + 0x31, 0x49, 0x6c, 0xce, 0x62, 0x01, 0x8e, 0x0b, 0x71, 0x01, 0xb2, 0x64, 0x9b, 0x74, 0x10, 0x2f, + 0x6d, 0xde, 0x33, 0x0e, 0xac, 0x0e, 0xea, 0x2a, 0x03, 0xdd, 0x95, 0x6f, 0x28, 0xfa, 0x00, 0x91, + 0x80, 0xcf, 0x49, 0x05, 0x26, 0xfc, 0x34, 0x96, 0x89, 0x67, 0x21, 0x4f, 0x77, 0x95, 0x66, 0x74, + 0xd0, 0xcb, 0x24, 0x7b, 0x66, 0x24, 0xba, 0xd1, 0x1a, 0x58, 0x82, 0x5f, 0x7f, 0xdd, 0x31, 0x0d, + 0x1e, 0x9a, 0xe4, 0x15, 0x58, 0x40, 0x5e, 0xff, 0x74, 0x38, 0x71, 0x3f, 0x34, 0x7e, 0x7a, 0xe1, + 0x98, 0xaa, 0x7c, 0x33, 0x09, 0x69, 0x92, 0x2f, 0x66, 0x20, 0xbf, 0xf3, 0x62, 0xab, 0x2e, 0xaf, + 0x37, 0x77, 0x57, 0x37, 0xeb, 0x42, 0x42, 0x2c, 0x02, 0x10, 0xc1, 0xb5, 0xcd, 0x66, 0x6d, 0x47, + 0x48, 0x7a, 0xcf, 0x8d, 0xed, 0x9d, 0x4b, 0x4f, 0x09, 0x29, 0x0f, 0xb0, 0x4b, 0x05, 0x69, 0xbf, + 0xc2, 0x85, 0xf3, 0x42, 0x46, 0x14, 0xa0, 0x40, 0x09, 0x1a, 0x2f, 0xd4, 0xd7, 0x2f, 0x3d, 0x25, + 0x4c, 0x06, 0x25, 0x17, 0xce, 0x0b, 0x53, 0xe2, 0x34, 0xe4, 0x88, 0x64, 0xb5, 0xd9, 0xdc, 0x14, + 0xb2, 0x1e, 0x67, 0x7b, 0x47, 0x6a, 0x6c, 0x6f, 0x08, 0x39, 0x8f, 0x73, 0x43, 0x6a, 0xee, 0xb6, + 0x04, 0xf0, 0x18, 0xb6, 0xea, 0xed, 0x76, 0x6d, 0xa3, 0x2e, 0xe4, 0x3d, 0x8d, 0xd5, 0x17, 0x77, + 0xea, 0x6d, 0xa1, 0x10, 0x30, 0xeb, 0xc2, 0x79, 0x61, 0xda, 0x7b, 0x45, 0x7d, 0x7b, 0x77, 0x4b, + 0x28, 0x8a, 0xb3, 0x30, 0x4d, 0x5f, 0xc1, 0x8d, 0x98, 0x09, 0x89, 0x2e, 0x3d, 0x25, 0x08, 0x43, + 0x43, 0x28, 0xcb, 0x6c, 0x40, 0x70, 0xe9, 0x29, 0x41, 0xac, 0xac, 0x41, 0x86, 0x44, 0x97, 0x28, + 0x42, 0x71, 0xb3, 0xb6, 0x5a, 0xdf, 0x94, 0x9b, 0xad, 0x9d, 0x46, 0x73, 0xbb, 0xb6, 0x29, 0x24, + 0x86, 0x32, 0xa9, 0xfe, 0xa9, 0xdd, 0x86, 0x54, 0x5f, 0x17, 0x92, 0x7e, 0x59, 0xab, 0x5e, 0xdb, + 0xa9, 0xaf, 0x0b, 0xa9, 0x8a, 0x0a, 0xf3, 0xe3, 0xf2, 0xe4, 0xd8, 0x9d, 0xe1, 0x5b, 0xe2, 0xe4, + 0x31, 0x4b, 0x4c, 0xb8, 0x46, 0x96, 0xf8, 0x07, 0x49, 0x98, 0x1b, 0x53, 0x2b, 0xc6, 0xbe, 0xe4, + 0x59, 0xc8, 0xd0, 0x10, 0xa5, 0xd5, 0xf3, 0xf1, 0xb1, 0x45, 0x87, 0x04, 0xec, 0x48, 0x05, 0x25, + 0x38, 0x7f, 0x07, 0x91, 0x3a, 0xa6, 0x83, 0xc0, 0x14, 0x23, 0x39, 0xfd, 0xe7, 0x46, 0x72, 0x3a, + 0x2d, 0x7b, 0x97, 0xe2, 0x94, 0x3d, 0x22, 0x3b, 0x59, 0x6e, 0xcf, 0x8c, 0xc9, 0xed, 0x57, 0x61, + 0x76, 0x84, 0x28, 0x76, 0x8e, 0x7d, 0x25, 0x01, 0xa5, 0xe3, 0x9c, 0x13, 0x91, 0xe9, 0x92, 0x81, + 0x4c, 0x77, 0x35, 0xec, 0xc1, 0x73, 0xc7, 0x2f, 0xc2, 0xc8, 0x5a, 0xbf, 0x91, 0x80, 0x53, 0xe3, + 0x3b, 0xc5, 0xb1, 0x36, 0x3c, 0x03, 0x93, 0x7d, 0xe4, 0xee, 0x9b, 0xbc, 0x5b, 0xfa, 0xe8, 0x98, + 0x1a, 0x8c, 0x87, 0xc3, 0x8b, 0xcd, 0x50, 0xfe, 0x22, 0x9e, 0x3a, 0xae, 0xdd, 0xa3, 0xd6, 0x8c, + 0x58, 0xfa, 0xb9, 0x24, 0x3c, 0x30, 0x96, 0x7c, 0xac, 0xa1, 0x0f, 0x01, 0x68, 0x86, 0x35, 0x70, + 0x69, 0x47, 0x44, 0x13, 0x6c, 0x8e, 0x48, 0x48, 0xf2, 0xc2, 0xc9, 0x73, 0xe0, 0x7a, 0xe3, 0x29, + 0x32, 0x0e, 0x54, 0x44, 0x14, 0x2e, 0x0f, 0x0d, 0x4d, 0x13, 0x43, 0xcb, 0xc7, 0xcc, 0x74, 0x24, + 0x30, 0x3f, 0x0e, 0x82, 0xaa, 0x6b, 0xc8, 0x70, 0x65, 0xc7, 0xb5, 0x91, 0xd2, 0xd7, 0x8c, 0x1e, + 0xa9, 0x20, 0xd9, 0x6a, 0xa6, 0xab, 0xe8, 0x0e, 0x92, 0x66, 0xe8, 0x70, 0x9b, 0x8f, 0x62, 0x04, + 0x09, 0x20, 0xdb, 0x87, 0x98, 0x0c, 0x20, 0xe8, 0xb0, 0x87, 0xa8, 0xbc, 0x99, 0x85, 0xbc, 0xaf, + 0xaf, 0x16, 0xcf, 0x41, 0xe1, 0xba, 0x72, 0x43, 0x91, 0xf9, 0x59, 0x89, 0x7a, 0x22, 0x8f, 0x65, + 0x2d, 0x76, 0x5e, 0xfa, 0x38, 0xcc, 0x13, 0x15, 0x73, 0xe0, 0x22, 0x5b, 0x56, 0x75, 0xc5, 0x71, + 0x88, 0xd3, 0xb2, 0x44, 0x55, 0xc4, 0x63, 0x4d, 0x3c, 0xb4, 0xc6, 0x47, 0xc4, 0x8b, 0x30, 0x47, + 0x10, 0xfd, 0x81, 0xee, 0x6a, 0x96, 0x8e, 0x64, 0x7c, 0x7a, 0x73, 0x48, 0x25, 0xf1, 0x2c, 0x9b, + 0xc5, 0x1a, 0x5b, 0x4c, 0x01, 0x5b, 0xe4, 0x88, 0xeb, 0xf0, 0x10, 0x81, 0xf5, 0x90, 0x81, 0x6c, + 0xc5, 0x45, 0x32, 0xfa, 0xec, 0x40, 0xd1, 0x1d, 0x59, 0x31, 0x3a, 0xf2, 0xbe, 0xe2, 0xec, 0x97, + 0xe6, 0x31, 0xc1, 0x6a, 0xb2, 0x94, 0x90, 0xce, 0x60, 0xc5, 0x0d, 0xa6, 0x57, 0x27, 0x6a, 0x35, + 0xa3, 0xf3, 0x49, 0xc5, 0xd9, 0x17, 0xab, 0x70, 0x8a, 0xb0, 0x38, 0xae, 0xad, 0x19, 0x3d, 0x59, + 0xdd, 0x47, 0xea, 0x81, 0x3c, 0x70, 0xbb, 0x97, 0x4b, 0x0f, 0xfa, 0xdf, 0x4f, 0x2c, 0x6c, 0x13, + 0x9d, 0x35, 0xac, 0xb2, 0xeb, 0x76, 0x2f, 0x8b, 0x6d, 0x28, 0xe0, 0xc5, 0xe8, 0x6b, 0xb7, 0x90, + 0xdc, 0x35, 0x6d, 0x52, 0x1a, 0x8b, 0x63, 0x52, 0x93, 0xcf, 0x83, 0xcb, 0x4d, 0x06, 0xd8, 0x32, + 0x3b, 0xa8, 0x9a, 0x69, 0xb7, 0xea, 0xf5, 0x75, 0x29, 0xcf, 0x59, 0xae, 0x99, 0x36, 0x0e, 0xa8, + 0x9e, 0xe9, 0x39, 0x38, 0x4f, 0x03, 0xaa, 0x67, 0x72, 0xf7, 0x5e, 0x84, 0x39, 0x55, 0xa5, 0x73, + 0xd6, 0x54, 0x99, 0x9d, 0xb1, 0x9c, 0x92, 0x10, 0x70, 0x96, 0xaa, 0x6e, 0x50, 0x05, 0x16, 0xe3, + 0x8e, 0x78, 0x05, 0x1e, 0x18, 0x3a, 0xcb, 0x0f, 0x9c, 0x1d, 0x99, 0x65, 0x18, 0x7a, 0x11, 0xe6, + 0xac, 0xc3, 0x51, 0xa0, 0x18, 0x78, 0xa3, 0x75, 0x18, 0x86, 0x3d, 0x0d, 0xf3, 0xd6, 0xbe, 0x35, + 0x8a, 0x7b, 0xc2, 0x8f, 0x13, 0xad, 0x7d, 0x2b, 0x0c, 0x7c, 0x94, 0x1c, 0xb8, 0x6d, 0xa4, 0x2a, + 0x2e, 0xea, 0x94, 0x4e, 0xfb, 0xd5, 0x7d, 0x03, 0xe2, 0x0a, 0x08, 0xaa, 0x2a, 0x23, 0x43, 0xd9, + 0xd3, 0x91, 0xac, 0xd8, 0xc8, 0x50, 0x9c, 0xd2, 0x59, 0xbf, 0x72, 0x51, 0x55, 0xeb, 0x64, 0xb4, + 0x46, 0x06, 0xc5, 0x27, 0x60, 0xd6, 0xdc, 0xbb, 0xae, 0xd2, 0x90, 0x94, 0x2d, 0x1b, 0x75, 0xb5, + 0x97, 0x4b, 0x8f, 0x10, 0xff, 0xce, 0xe0, 0x01, 0x12, 0x90, 0x2d, 0x22, 0x16, 0x1f, 0x07, 0x41, + 0x75, 0xf6, 0x15, 0xdb, 0x22, 0x39, 0xd9, 0xb1, 0x14, 0x15, 0x95, 0x1e, 0xa5, 0xaa, 0x54, 0xbe, + 0xcd, 0xc5, 0x78, 0x4b, 0x38, 0x37, 0xb5, 0xae, 0xcb, 0x19, 0x1f, 0xa3, 0x5b, 0x82, 0xc8, 0x18, + 0xdb, 0x12, 0x08, 0xd8, 0x15, 0x81, 0x17, 0x2f, 0x11, 0xb5, 0xa2, 0xb5, 0x6f, 0xf9, 0xdf, 0xfb, + 0x30, 0x4c, 0x63, 0xcd, 0xe1, 0x4b, 0x1f, 0xa7, 0x0d, 0x99, 0xb5, 0xef, 0x7b, 0xe3, 0x07, 0xd6, + 0x1b, 0x57, 0xaa, 0x50, 0xf0, 0xc7, 0xa7, 0x98, 0x03, 0x1a, 0xa1, 0x42, 0x02, 0x37, 0x2b, 0x6b, + 0xcd, 0x75, 0xdc, 0x66, 0xbc, 0x54, 0x17, 0x92, 0xb8, 0xdd, 0xd9, 0x6c, 0xec, 0xd4, 0x65, 0x69, + 0x77, 0x7b, 0xa7, 0xb1, 0x55, 0x17, 0x52, 0xfe, 0xbe, 0xfa, 0xbb, 0x49, 0x28, 0x06, 0x8f, 0x48, + 0xe2, 0x4f, 0xc3, 0x69, 0x7e, 0x9f, 0xe1, 0x20, 0x57, 0xbe, 0xa9, 0xd9, 0x64, 0xcb, 0xf4, 0x15, + 0x5a, 0xbe, 0xbc, 0x45, 0x9b, 0x67, 0x5a, 0x6d, 0xe4, 0x3e, 0xaf, 0xd9, 0x78, 0x43, 0xf4, 0x15, + 0x57, 0xdc, 0x84, 0xb3, 0x86, 0x29, 0x3b, 0xae, 0x62, 0x74, 0x14, 0xbb, 0x23, 0x0f, 0x6f, 0x92, + 0x64, 0x45, 0x55, 0x91, 0xe3, 0x98, 0xb4, 0x54, 0x79, 0x2c, 0x1f, 0x31, 0xcc, 0x36, 0x53, 0x1e, + 0xe6, 0xf0, 0x1a, 0x53, 0x0d, 0x05, 0x58, 0xea, 0xb8, 0x00, 0x7b, 0x10, 0x72, 0x7d, 0xc5, 0x92, + 0x91, 0xe1, 0xda, 0x87, 0xa4, 0x31, 0xce, 0x4a, 0xd9, 0xbe, 0x62, 0xd5, 0xf1, 0xf3, 0x87, 0x73, + 0x3e, 0xf9, 0xd7, 0x14, 0x14, 0xfc, 0xcd, 0x31, 0x3e, 0x6b, 0xa8, 0xa4, 0x8e, 0x24, 0x48, 0xa6, + 0x79, 0xf8, 0xbe, 0xad, 0xf4, 0xf2, 0x1a, 0x2e, 0x30, 0xd5, 0x49, 0xda, 0xb2, 0x4a, 0x14, 0x89, + 0x8b, 0x3b, 0xce, 0x2d, 0x88, 0xb6, 0x08, 0x59, 0x89, 0x3d, 0x89, 0x1b, 0x30, 0x79, 0xdd, 0x21, + 0xdc, 0x93, 0x84, 0xfb, 0x91, 0xfb, 0x73, 0x3f, 0xd7, 0x26, 0xe4, 0xb9, 0xe7, 0xda, 0xf2, 0x76, + 0x53, 0xda, 0xaa, 0x6d, 0x4a, 0x0c, 0x2e, 0x9e, 0x81, 0xb4, 0xae, 0xdc, 0x3a, 0x0c, 0x96, 0x22, + 0x22, 0x8a, 0xeb, 0xf8, 0x33, 0x90, 0xbe, 0x89, 0x94, 0x83, 0x60, 0x01, 0x20, 0xa2, 0x0f, 0x30, + 0xf4, 0x57, 0x20, 0x43, 0xfc, 0x25, 0x02, 0x30, 0x8f, 0x09, 0x13, 0x62, 0x16, 0xd2, 0x6b, 0x4d, + 0x09, 0x87, 0xbf, 0x00, 0x05, 0x2a, 0x95, 0x5b, 0x8d, 0xfa, 0x5a, 0x5d, 0x48, 0x56, 0x2e, 0xc2, + 0x24, 0x75, 0x02, 0xde, 0x1a, 0x9e, 0x1b, 0x84, 0x09, 0xf6, 0xc8, 0x38, 0x12, 0x7c, 0x74, 0x77, + 0x6b, 0xb5, 0x2e, 0x09, 0x49, 0xff, 0xf2, 0x3a, 0x50, 0xf0, 0xf7, 0xc5, 0x1f, 0x4e, 0x4c, 0x7d, + 0x27, 0x01, 0x79, 0x5f, 0x9f, 0x8b, 0x1b, 0x14, 0x45, 0xd7, 0xcd, 0x9b, 0xb2, 0xa2, 0x6b, 0x8a, + 0xc3, 0x82, 0x02, 0x88, 0xa8, 0x86, 0x25, 0x71, 0x17, 0xed, 0x43, 0x31, 0xfe, 0xf5, 0x04, 0x08, + 0xe1, 0x16, 0x33, 0x64, 0x60, 0xe2, 0x27, 0x6a, 0xe0, 0x6b, 0x09, 0x28, 0x06, 0xfb, 0xca, 0x90, + 0x79, 0xe7, 0x7e, 0xa2, 0xe6, 0xbd, 0x9d, 0x84, 0xe9, 0x40, 0x37, 0x19, 0xd7, 0xba, 0xcf, 0xc2, + 0xac, 0xd6, 0x41, 0x7d, 0xcb, 0x74, 0x91, 0xa1, 0x1e, 0xca, 0x3a, 0xba, 0x81, 0xf4, 0x52, 0x85, + 0x24, 0x8a, 0x95, 0xfb, 0xf7, 0xab, 0xcb, 0x8d, 0x21, 0x6e, 0x13, 0xc3, 0xaa, 0x73, 0x8d, 0xf5, + 0xfa, 0x56, 0xab, 0xb9, 0x53, 0xdf, 0x5e, 0x7b, 0x51, 0xde, 0xdd, 0xfe, 0xd9, 0xed, 0xe6, 0xf3, + 0xdb, 0x92, 0xa0, 0x85, 0xd4, 0x3e, 0xc0, 0xad, 0xde, 0x02, 0x21, 0x6c, 0x94, 0x78, 0x1a, 0xc6, + 0x99, 0x25, 0x4c, 0x88, 0x73, 0x30, 0xb3, 0xdd, 0x94, 0xdb, 0x8d, 0xf5, 0xba, 0x5c, 0xbf, 0x76, + 0xad, 0xbe, 0xb6, 0xd3, 0xa6, 0x37, 0x10, 0x9e, 0xf6, 0x4e, 0x70, 0x53, 0xbf, 0x9a, 0x82, 0xb9, + 0x31, 0x96, 0x88, 0x35, 0x76, 0x76, 0xa0, 0xc7, 0x99, 0x8f, 0xc5, 0xb1, 0x7e, 0x19, 0x97, 0xfc, + 0x96, 0x62, 0xbb, 0xec, 0xa8, 0xf1, 0x38, 0x60, 0x2f, 0x19, 0xae, 0xd6, 0xd5, 0x90, 0xcd, 0x2e, + 0x6c, 0xe8, 0x81, 0x62, 0x66, 0x28, 0xa7, 0x77, 0x36, 0x3f, 0x05, 0xa2, 0x65, 0x3a, 0x9a, 0xab, + 0xdd, 0x40, 0xb2, 0x66, 0xf0, 0xdb, 0x1d, 0x7c, 0xc0, 0x48, 0x4b, 0x02, 0x1f, 0x69, 0x18, 0xae, + 0xa7, 0x6d, 0xa0, 0x9e, 0x12, 0xd2, 0xc6, 0x09, 0x3c, 0x25, 0x09, 0x7c, 0xc4, 0xd3, 0x3e, 0x07, + 0x85, 0x8e, 0x39, 0xc0, 0x5d, 0x17, 0xd5, 0xc3, 0xf5, 0x22, 0x21, 0xe5, 0xa9, 0xcc, 0x53, 0x61, + 0xfd, 0xf4, 0xf0, 0x5a, 0xa9, 0x20, 0xe5, 0xa9, 0x8c, 0xaa, 0x3c, 0x06, 0x33, 0x4a, 0xaf, 0x67, + 0x63, 0x72, 0x4e, 0x44, 0x4f, 0x08, 0x45, 0x4f, 0x4c, 0x14, 0x17, 0x9e, 0x83, 0x2c, 0xf7, 0x03, + 0x2e, 0xc9, 0xd8, 0x13, 0xb2, 0x45, 0x8f, 0xbd, 0xc9, 0xa5, 0x9c, 0x94, 0x35, 0xf8, 0xe0, 0x39, + 0x28, 0x68, 0x8e, 0x3c, 0xbc, 0x25, 0x4f, 0x2e, 0x26, 0x97, 0xb2, 0x52, 0x5e, 0x73, 0xbc, 0x1b, + 0xc6, 0xca, 0x1b, 0x49, 0x28, 0x06, 0x6f, 0xf9, 0xc5, 0x75, 0xc8, 0xea, 0xa6, 0xaa, 0x90, 0xd0, + 0xa2, 0x9f, 0x98, 0x96, 0x22, 0x3e, 0x0c, 0x2c, 0x6f, 0x32, 0x7d, 0xc9, 0x43, 0x2e, 0xfc, 0x73, + 0x02, 0xb2, 0x5c, 0x2c, 0x9e, 0x82, 0xb4, 0xa5, 0xb8, 0xfb, 0x84, 0x2e, 0xb3, 0x9a, 0x14, 0x12, + 0x12, 0x79, 0xc6, 0x72, 0xc7, 0x52, 0x0c, 0x12, 0x02, 0x4c, 0x8e, 0x9f, 0xf1, 0xba, 0xea, 0x48, + 0xe9, 0x90, 0xe3, 0x87, 0xd9, 0xef, 0x23, 0xc3, 0x75, 0xf8, 0xba, 0x32, 0xf9, 0x1a, 0x13, 0x8b, + 0x4f, 0xc2, 0xac, 0x6b, 0x2b, 0x9a, 0x1e, 0xd0, 0x4d, 0x13, 0x5d, 0x81, 0x0f, 0x78, 0xca, 0x55, + 0x38, 0xc3, 0x79, 0x3b, 0xc8, 0x55, 0xd4, 0x7d, 0xd4, 0x19, 0x82, 0x26, 0xc9, 0x35, 0xc3, 0x69, + 0xa6, 0xb0, 0xce, 0xc6, 0x39, 0xb6, 0xf2, 0xfd, 0x04, 0xcc, 0xf2, 0x03, 0x53, 0xc7, 0x73, 0xd6, + 0x16, 0x80, 0x62, 0x18, 0xa6, 0xeb, 0x77, 0xd7, 0x68, 0x28, 0x8f, 0xe0, 0x96, 0x6b, 0x1e, 0x48, + 0xf2, 0x11, 0x2c, 0xf4, 0x01, 0x86, 0x23, 0xc7, 0xba, 0xed, 0x2c, 0xe4, 0xd9, 0x27, 0x1c, 0xf2, + 0x1d, 0x90, 0x1e, 0xb1, 0x81, 0x8a, 0xf0, 0xc9, 0x4a, 0x9c, 0x87, 0xcc, 0x1e, 0xea, 0x69, 0x06, + 0xbb, 0x98, 0xa5, 0x0f, 0xfc, 0x22, 0x24, 0xed, 0x5d, 0x84, 0xac, 0x7e, 0x06, 0xe6, 0x54, 0xb3, + 0x1f, 0x36, 0x77, 0x55, 0x08, 0x1d, 0xf3, 0x9d, 0x4f, 0x26, 0x5e, 0x82, 0x61, 0x8b, 0xf9, 0x7e, + 0x22, 0xf1, 0xe5, 0x64, 0x6a, 0xa3, 0xb5, 0xfa, 0xb5, 0xe4, 0xc2, 0x06, 0x85, 0xb6, 0xf8, 0x4c, + 0x25, 0xd4, 0xd5, 0x91, 0x8a, 0xad, 0x87, 0xaf, 0x3c, 0x09, 0x1f, 0xeb, 0x69, 0xee, 0xfe, 0x60, + 0x6f, 0x59, 0x35, 0xfb, 0x2b, 0x3d, 0xb3, 0x67, 0x0e, 0x3f, 0x7d, 0xe2, 0x27, 0xf2, 0x40, 0xfe, + 0x63, 0x9f, 0x3f, 0x73, 0x9e, 0x74, 0x21, 0xf2, 0x5b, 0x69, 0x75, 0x1b, 0xe6, 0x98, 0xb2, 0x4c, + 0xbe, 0xbf, 0xd0, 0x53, 0x84, 0x78, 0xdf, 0x3b, 0xac, 0xd2, 0x37, 0xde, 0x21, 0xe5, 0x5a, 0x9a, + 0x65, 0x50, 0x3c, 0x46, 0x0f, 0x1a, 0x55, 0x09, 0x1e, 0x08, 0xf0, 0xd1, 0xad, 0x89, 0xec, 0x08, + 0xc6, 0xef, 0x32, 0xc6, 0x39, 0x1f, 0x63, 0x9b, 0x41, 0xab, 0x6b, 0x30, 0x7d, 0x12, 0xae, 0x7f, + 0x64, 0x5c, 0x05, 0xe4, 0x27, 0xd9, 0x80, 0x19, 0x42, 0xa2, 0x0e, 0x1c, 0xd7, 0xec, 0x93, 0xbc, + 0x77, 0x7f, 0x9a, 0x7f, 0x7a, 0x87, 0xee, 0x95, 0x22, 0x86, 0xad, 0x79, 0xa8, 0x6a, 0x15, 0xc8, + 0x27, 0xa7, 0x0e, 0x52, 0xf5, 0x08, 0x86, 0xb7, 0x98, 0x21, 0x9e, 0x7e, 0xf5, 0xd3, 0x30, 0x8f, + 0xff, 0x27, 0x69, 0xc9, 0x6f, 0x49, 0xf4, 0x85, 0x57, 0xe9, 0xfb, 0xaf, 0xd0, 0xed, 0x38, 0xe7, + 0x11, 0xf8, 0x6c, 0xf2, 0xad, 0x62, 0x0f, 0xb9, 0x2e, 0xb2, 0x1d, 0x59, 0xd1, 0xc7, 0x99, 0xe7, + 0xbb, 0x31, 0x28, 0x7d, 0xe1, 0xdd, 0xe0, 0x2a, 0x6e, 0x50, 0x64, 0x4d, 0xd7, 0xab, 0xbb, 0x70, + 0x7a, 0x4c, 0x54, 0xc4, 0xe0, 0x7c, 0x95, 0x71, 0xce, 0x8f, 0x44, 0x06, 0xa6, 0x6d, 0x01, 0x97, + 0x7b, 0x6b, 0x19, 0x83, 0xf3, 0x0f, 0x18, 0xa7, 0xc8, 0xb0, 0x7c, 0x49, 0x31, 0xe3, 0x73, 0x30, + 0x7b, 0x03, 0xd9, 0x7b, 0xa6, 0xc3, 0x6e, 0x69, 0x62, 0xd0, 0xbd, 0xc6, 0xe8, 0x66, 0x18, 0x90, + 0x5c, 0xdb, 0x60, 0xae, 0x2b, 0x90, 0xed, 0x2a, 0x2a, 0x8a, 0x41, 0xf1, 0x45, 0x46, 0x31, 0x85, + 0xf5, 0x31, 0xb4, 0x06, 0x85, 0x9e, 0xc9, 0x2a, 0x53, 0x34, 0xfc, 0x75, 0x06, 0xcf, 0x73, 0x0c, + 0xa3, 0xb0, 0x4c, 0x6b, 0xa0, 0xe3, 0xb2, 0x15, 0x4d, 0xf1, 0x87, 0x9c, 0x82, 0x63, 0x18, 0xc5, + 0x09, 0xdc, 0xfa, 0x47, 0x9c, 0xc2, 0xf1, 0xf9, 0xf3, 0x59, 0xc8, 0x9b, 0x86, 0x7e, 0x68, 0x1a, + 0x71, 0x8c, 0xf8, 0x12, 0x63, 0x00, 0x06, 0xc1, 0x04, 0x57, 0x21, 0x17, 0x77, 0x21, 0xfe, 0xe4, + 0x5d, 0xbe, 0x3d, 0xf8, 0x0a, 0x6c, 0xc0, 0x0c, 0x4f, 0x50, 0x9a, 0x69, 0xc4, 0xa0, 0xf8, 0x0a, + 0xa3, 0x28, 0xfa, 0x60, 0x6c, 0x1a, 0x2e, 0x72, 0xdc, 0x1e, 0x8a, 0x43, 0xf2, 0x06, 0x9f, 0x06, + 0x83, 0x30, 0x57, 0xee, 0x21, 0x43, 0xdd, 0x8f, 0xc7, 0xf0, 0x55, 0xee, 0x4a, 0x8e, 0xc1, 0x14, + 0x6b, 0x30, 0xdd, 0x57, 0x6c, 0x67, 0x5f, 0xd1, 0x63, 0x2d, 0xc7, 0x9f, 0x32, 0x8e, 0x82, 0x07, + 0x62, 0x1e, 0x19, 0x18, 0x27, 0xa1, 0xf9, 0x1a, 0xf7, 0x88, 0x0f, 0xc6, 0xb6, 0x9e, 0xe3, 0x92, + 0x2b, 0xad, 0x93, 0xb0, 0xfd, 0x19, 0xdf, 0x7a, 0x14, 0xbb, 0xe5, 0x67, 0xbc, 0x0a, 0x39, 0x47, + 0xbb, 0x15, 0x8b, 0xe6, 0xcf, 0xf9, 0x4a, 0x13, 0x00, 0x06, 0xbf, 0x08, 0x67, 0xc6, 0x96, 0x89, + 0x18, 0x64, 0x7f, 0xc1, 0xc8, 0x4e, 0x8d, 0x29, 0x15, 0x2c, 0x25, 0x9c, 0x94, 0xf2, 0x2f, 0x79, + 0x4a, 0x40, 0x21, 0xae, 0x16, 0x3e, 0x2b, 0x38, 0x4a, 0xf7, 0x64, 0x5e, 0xfb, 0x2b, 0xee, 0x35, + 0x8a, 0x0d, 0x78, 0x6d, 0x07, 0x4e, 0x31, 0xc6, 0x93, 0xad, 0xeb, 0xd7, 0x79, 0x62, 0xa5, 0xe8, + 0xdd, 0xe0, 0xea, 0x7e, 0x06, 0x16, 0x3c, 0x77, 0xf2, 0xa6, 0xd4, 0x91, 0xfb, 0x8a, 0x15, 0x83, + 0xf9, 0x1b, 0x8c, 0x99, 0x67, 0x7c, 0xaf, 0xab, 0x75, 0xb6, 0x14, 0x0b, 0x93, 0xbf, 0x00, 0x25, + 0x4e, 0x3e, 0x30, 0x6c, 0xa4, 0x9a, 0x3d, 0x43, 0xbb, 0x85, 0x3a, 0x31, 0xa8, 0xff, 0x3a, 0xb4, + 0x54, 0xbb, 0x3e, 0x38, 0x66, 0x6e, 0x80, 0xe0, 0xf5, 0x2a, 0xb2, 0xd6, 0xb7, 0x4c, 0xdb, 0x8d, + 0x60, 0x7c, 0x93, 0xaf, 0x94, 0x87, 0x6b, 0x10, 0x58, 0xb5, 0x0e, 0x45, 0xf2, 0x18, 0x37, 0x24, + 0xff, 0x86, 0x11, 0x4d, 0x0f, 0x51, 0x2c, 0x71, 0xa8, 0x66, 0xdf, 0x52, 0xec, 0x38, 0xf9, 0xef, + 0x6f, 0x79, 0xe2, 0x60, 0x10, 0x96, 0x38, 0xdc, 0x43, 0x0b, 0xe1, 0x6a, 0x1f, 0x83, 0xe1, 0x9b, + 0x3c, 0x71, 0x70, 0x0c, 0xa3, 0xe0, 0x0d, 0x43, 0x0c, 0x8a, 0xbf, 0xe3, 0x14, 0x1c, 0x83, 0x29, + 0x3e, 0x35, 0x2c, 0xb4, 0x36, 0xea, 0x69, 0x8e, 0x6b, 0xd3, 0x56, 0xf8, 0xfe, 0x54, 0xdf, 0x7a, + 0x37, 0xd8, 0x84, 0x49, 0x3e, 0x28, 0xce, 0x44, 0xec, 0x0a, 0x95, 0x9c, 0x94, 0xa2, 0x0d, 0xfb, + 0x36, 0xcf, 0x44, 0x3e, 0x18, 0xb6, 0xcd, 0xd7, 0x21, 0x62, 0xb7, 0xab, 0xf8, 0x7c, 0x10, 0x83, + 0xee, 0x3b, 0x21, 0xe3, 0xda, 0x1c, 0x8b, 0x39, 0x7d, 0xfd, 0xcf, 0xc0, 0x38, 0x40, 0x87, 0xb1, + 0xa2, 0xf3, 0xef, 0x43, 0xfd, 0xcf, 0x2e, 0x45, 0xd2, 0x1c, 0x32, 0x13, 0xea, 0xa7, 0xc4, 0xa8, + 0x1f, 0xeb, 0x94, 0x7e, 0xf1, 0x2e, 0x9b, 0x6f, 0xb0, 0x9d, 0xaa, 0x6e, 0xe2, 0x20, 0x0f, 0x36, + 0x3d, 0xd1, 0x64, 0xaf, 0xdc, 0xf5, 0xe2, 0x3c, 0xd0, 0xf3, 0x54, 0xaf, 0xc1, 0x74, 0xa0, 0xe1, + 0x89, 0xa6, 0xfa, 0x25, 0x46, 0x55, 0xf0, 0xf7, 0x3b, 0xd5, 0x8b, 0x90, 0xc6, 0xcd, 0x4b, 0x34, + 0xfc, 0x97, 0x19, 0x9c, 0xa8, 0x57, 0x3f, 0x01, 0x59, 0xde, 0xb4, 0x44, 0x43, 0x7f, 0x85, 0x41, + 0x3d, 0x08, 0x86, 0xf3, 0x86, 0x25, 0x1a, 0xfe, 0xab, 0x1c, 0xce, 0x21, 0x18, 0x1e, 0xdf, 0x85, + 0xff, 0xf0, 0x6b, 0x69, 0x56, 0x74, 0xb8, 0xef, 0xae, 0xc2, 0x14, 0xeb, 0x54, 0xa2, 0xd1, 0x9f, + 0x63, 0x2f, 0xe7, 0x88, 0xea, 0xd3, 0x90, 0x89, 0xe9, 0xf0, 0x5f, 0x67, 0x50, 0xaa, 0x5f, 0x5d, + 0x83, 0xbc, 0xaf, 0x3b, 0x89, 0x86, 0xff, 0x06, 0x83, 0xfb, 0x51, 0xd8, 0x74, 0xd6, 0x9d, 0x44, + 0x13, 0xfc, 0x26, 0x37, 0x9d, 0x21, 0xb0, 0xdb, 0x78, 0x63, 0x12, 0x8d, 0xfe, 0x2d, 0xee, 0x75, + 0x0e, 0xa9, 0x3e, 0x0b, 0x39, 0xaf, 0xd8, 0x44, 0xe3, 0x7f, 0x9b, 0xe1, 0x87, 0x18, 0xec, 0x01, + 0x5f, 0xb1, 0x8b, 0xa6, 0xf8, 0x1d, 0xee, 0x01, 0x1f, 0x0a, 0x6f, 0xa3, 0x70, 0x03, 0x13, 0xcd, + 0xf4, 0xbb, 0x7c, 0x1b, 0x85, 0xfa, 0x17, 0xbc, 0x9a, 0x24, 0xe7, 0x47, 0x53, 0xfc, 0x1e, 0x5f, + 0x4d, 0xa2, 0x8f, 0xcd, 0x08, 0x77, 0x04, 0xd1, 0x1c, 0xbf, 0xcf, 0xcd, 0x08, 0x35, 0x04, 0xd5, + 0x16, 0x88, 0xa3, 0xdd, 0x40, 0x34, 0xdf, 0xe7, 0x19, 0xdf, 0xec, 0x48, 0x33, 0x50, 0x7d, 0x1e, + 0x4e, 0x8d, 0xef, 0x04, 0xa2, 0x59, 0xbf, 0x70, 0x37, 0x74, 0x76, 0xf3, 0x37, 0x02, 0xd5, 0x9d, + 0x61, 0x49, 0xf1, 0x77, 0x01, 0xd1, 0xb4, 0xaf, 0xde, 0x0d, 0x26, 0x6e, 0x7f, 0x13, 0x50, 0xad, + 0x01, 0x0c, 0x0b, 0x70, 0x34, 0xd7, 0x6b, 0x8c, 0xcb, 0x07, 0xc2, 0x5b, 0x83, 0xd5, 0xdf, 0x68, + 0xfc, 0x17, 0xf9, 0xd6, 0x60, 0x08, 0xbc, 0x35, 0x78, 0xe9, 0x8d, 0x46, 0xbf, 0xce, 0xb7, 0x06, + 0x87, 0xe0, 0xc8, 0xf6, 0x55, 0xb7, 0x68, 0x86, 0x2f, 0xf1, 0xc8, 0xf6, 0xa1, 0xaa, 0xdb, 0x30, + 0x3b, 0x52, 0x10, 0xa3, 0xa9, 0xbe, 0xcc, 0xa8, 0x84, 0x70, 0x3d, 0xf4, 0x17, 0x2f, 0x56, 0x0c, + 0xa3, 0xd9, 0xfe, 0x38, 0x54, 0xbc, 0x58, 0x2d, 0xac, 0x5e, 0x85, 0xac, 0x31, 0xd0, 0x75, 0xbc, + 0x79, 0xc4, 0xfb, 0xff, 0xc0, 0xae, 0xf4, 0xef, 0xf7, 0x98, 0x77, 0x38, 0xa0, 0x7a, 0x11, 0x32, + 0xa8, 0xbf, 0x87, 0x3a, 0x51, 0xc8, 0xff, 0xb8, 0xc7, 0x13, 0x26, 0xd6, 0xae, 0x3e, 0x0b, 0x40, + 0xaf, 0x46, 0xc8, 0x67, 0xbf, 0x08, 0xec, 0x7f, 0xde, 0x63, 0x3f, 0x7d, 0x19, 0x42, 0x86, 0x04, + 0xf4, 0x87, 0x34, 0xf7, 0x27, 0x78, 0x37, 0x48, 0x40, 0x56, 0xe4, 0x0a, 0x4c, 0x5d, 0x77, 0x4c, + 0xc3, 0x55, 0x7a, 0x51, 0xe8, 0xff, 0x62, 0x68, 0xae, 0x8f, 0x1d, 0xd6, 0x37, 0x6d, 0xe4, 0x2a, + 0x3d, 0x27, 0x0a, 0xfb, 0xdf, 0x0c, 0xeb, 0x01, 0x30, 0x58, 0x55, 0x1c, 0x37, 0xce, 0xbc, 0x7f, + 0xc4, 0xc1, 0x1c, 0x80, 0x8d, 0xc6, 0xff, 0x1f, 0xa0, 0xc3, 0x28, 0xec, 0x7b, 0xdc, 0x68, 0xa6, + 0x5f, 0xfd, 0x04, 0xe4, 0xf0, 0xbf, 0xf4, 0xf7, 0x6c, 0x11, 0xe0, 0xff, 0x61, 0xe0, 0x21, 0x02, + 0xbf, 0xd9, 0x71, 0x3b, 0xae, 0x16, 0xed, 0xec, 0xff, 0x65, 0x2b, 0xcd, 0xf5, 0xab, 0x35, 0xc8, + 0x3b, 0x6e, 0xa7, 0x33, 0x60, 0xfd, 0x69, 0x04, 0xfc, 0xff, 0xee, 0x79, 0x57, 0x16, 0x1e, 0x06, + 0xaf, 0xf6, 0xcd, 0x03, 0xd7, 0x32, 0xc9, 0x67, 0x8e, 0x28, 0x86, 0xbb, 0x8c, 0xc1, 0x07, 0x59, + 0xad, 0x8f, 0xbf, 0xbe, 0x85, 0x0d, 0x73, 0xc3, 0xa4, 0x17, 0xb7, 0x2f, 0x55, 0xa2, 0x6f, 0x60, + 0xe1, 0xcd, 0x14, 0x94, 0x54, 0xb3, 0xbf, 0x67, 0x3a, 0x2b, 0x06, 0xd2, 0xdc, 0x7d, 0x64, 0xaf, + 0xf4, 0x15, 0x8b, 0xdd, 0xc9, 0xe6, 0xfb, 0x8a, 0xc5, 0x7e, 0xfc, 0xea, 0x2c, 0x9c, 0xec, 0x3e, + 0xb7, 0xf2, 0x0b, 0x30, 0xb5, 0xa5, 0x58, 0x3b, 0xc8, 0x71, 0x45, 0xe2, 0x69, 0xf2, 0x2b, 0x2b, + 0x76, 0x49, 0xbe, 0xb8, 0xec, 0x23, 0x5e, 0x66, 0x6a, 0xcb, 0x6d, 0xd7, 0x6e, 0xbb, 0x36, 0xf9, + 0x41, 0x81, 0x34, 0xe9, 0x90, 0x87, 0x85, 0x2b, 0x90, 0xf7, 0x89, 0x45, 0x01, 0x52, 0x07, 0xe8, + 0x90, 0xfd, 0xce, 0x0a, 0xff, 0x2b, 0xce, 0x0f, 0x7f, 0x08, 0x89, 0x65, 0xf4, 0xa1, 0x9a, 0xbc, + 0x9c, 0xa8, 0x3c, 0x03, 0x53, 0xd7, 0x94, 0x03, 0xb4, 0xa5, 0x58, 0xe2, 0x05, 0x98, 0x42, 0x86, + 0x6b, 0x6b, 0xc8, 0x61, 0x06, 0x9c, 0x09, 0x18, 0xc0, 0xd4, 0xe8, 0x9b, 0xb9, 0x66, 0x65, 0x13, + 0x0a, 0xfe, 0x81, 0xb8, 0xef, 0xc6, 0x52, 0x13, 0xfb, 0x91, 0x7d, 0xb4, 0xa0, 0x0f, 0xab, 0xeb, + 0x6f, 0xdd, 0x29, 0x4f, 0x7c, 0xef, 0x4e, 0x79, 0xe2, 0x5f, 0xee, 0x94, 0x27, 0xde, 0xbe, 0x53, + 0x4e, 0xbc, 0x77, 0xa7, 0x9c, 0x78, 0xff, 0x4e, 0x39, 0x71, 0xfb, 0xa8, 0x9c, 0xf8, 0xea, 0x51, + 0x39, 0xf1, 0xf5, 0xa3, 0x72, 0xe2, 0x5b, 0x47, 0xe5, 0xc4, 0x5b, 0x47, 0xe5, 0x89, 0xef, 0x1d, + 0x95, 0x27, 0xde, 0x3e, 0x2a, 0x27, 0x7e, 0x78, 0x54, 0x9e, 0x78, 0xef, 0xa8, 0x9c, 0x78, 0xff, + 0xa8, 0x3c, 0x71, 0xfb, 0x07, 0xe5, 0x89, 0xbd, 0x49, 0xe2, 0xdb, 0x0b, 0xff, 0x1f, 0x00, 0x00, + 0xff, 0xff, 0xc5, 0xf8, 0xa0, 0x5b, 0x51, 0x34, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -788,6 +793,9 @@ return dAtA } func (m *MapTest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StrStr) > 0 { @@ -805,6 +813,9 @@ } func (m *FakeMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Entries) > 0 { @@ -820,6 +831,9 @@ } func (m *FakeMapEntry) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Key) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/unmarshaler/map.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/unmarshaler/map.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/unmarshaler/map.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/combos/unmarshaler/map.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -141,251 +141,256 @@ func MapDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3895 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x6c, 0x23, 0xd7, - 0x75, 0xd6, 0xf0, 0x4f, 0xe4, 0x21, 0x45, 0x8d, 0x46, 0xf2, 0x2e, 0x57, 0xb6, 0xb9, 0x5a, 0xda, - 0x8e, 0x65, 0xbb, 0xa1, 0x82, 0x5d, 0xef, 0x7a, 0x97, 0xdb, 0xd8, 0xa5, 0x28, 0xae, 0x42, 0x57, - 0x12, 0x99, 0xa1, 0x14, 0xff, 0x04, 0xc5, 0x60, 0x34, 0xbc, 0xa4, 0x66, 0x77, 0x38, 0x33, 0x99, - 0x19, 0xee, 0x5a, 0x8b, 0x02, 0xdd, 0xc2, 0xfd, 0x41, 0x50, 0xf4, 0xbf, 0x40, 0x13, 0xd7, 0x71, - 0x9b, 0x02, 0xa9, 0xd3, 0xf4, 0x2f, 0x69, 0xda, 0xfc, 0xf4, 0xa9, 0x2f, 0x69, 0xfd, 0x54, 0x24, - 0x6f, 0x7d, 0xe8, 0x83, 0x57, 0x31, 0xd0, 0xb4, 0x75, 0x1b, 0xb7, 0xf5, 0x83, 0x01, 0xbf, 0x04, - 0xf7, 0x6f, 0x38, 0x43, 0x52, 0x3b, 0x54, 0x00, 0xdb, 0x4f, 0xd2, 0x9c, 0x7b, 0xbe, 0x6f, 0xce, - 0x3d, 0xf7, 0xdc, 0x73, 0xce, 0xbd, 0x43, 0xf8, 0xf1, 0x15, 0x58, 0xe9, 0x59, 0x56, 0xcf, 0x40, - 0x6b, 0xb6, 0x63, 0x79, 0xd6, 0xfe, 0xa0, 0xbb, 0xd6, 0x41, 0xae, 0xe6, 0xe8, 0xb6, 0x67, 0x39, - 0x65, 0x22, 0x93, 0xe6, 0xa9, 0x46, 0x99, 0x6b, 0x94, 0xb6, 0x61, 0xe1, 0x9a, 0x6e, 0xa0, 0x0d, - 0x5f, 0xb1, 0x8d, 0x3c, 0xe9, 0x32, 0x24, 0xba, 0xba, 0x81, 0x0a, 0xc2, 0x4a, 0x7c, 0x35, 0x7b, - 0xfe, 0xe1, 0xf2, 0x08, 0xa8, 0x1c, 0x46, 0xb4, 0xb0, 0x58, 0x26, 0x88, 0xd2, 0x5b, 0x09, 0x58, - 0x9c, 0x30, 0x2a, 0x49, 0x90, 0x30, 0xd5, 0x3e, 0x66, 0x14, 0x56, 0x33, 0x32, 0xf9, 0x5f, 0x2a, - 0xc0, 0xac, 0xad, 0x6a, 0x37, 0xd4, 0x1e, 0x2a, 0xc4, 0x88, 0x98, 0x3f, 0x4a, 0x45, 0x80, 0x0e, - 0xb2, 0x91, 0xd9, 0x41, 0xa6, 0x76, 0x58, 0x88, 0xaf, 0xc4, 0x57, 0x33, 0x72, 0x40, 0x22, 0x3d, - 0x01, 0x0b, 0xf6, 0x60, 0xdf, 0xd0, 0x35, 0x25, 0xa0, 0x06, 0x2b, 0xf1, 0xd5, 0xa4, 0x2c, 0xd2, - 0x81, 0x8d, 0xa1, 0xf2, 0xa3, 0x30, 0x7f, 0x0b, 0xa9, 0x37, 0x82, 0xaa, 0x59, 0xa2, 0x9a, 0xc7, - 0xe2, 0x80, 0x62, 0x0d, 0x72, 0x7d, 0xe4, 0xba, 0x6a, 0x0f, 0x29, 0xde, 0xa1, 0x8d, 0x0a, 0x09, - 0x32, 0xfb, 0x95, 0xb1, 0xd9, 0x8f, 0xce, 0x3c, 0xcb, 0x50, 0xbb, 0x87, 0x36, 0x92, 0xaa, 0x90, - 0x41, 0xe6, 0xa0, 0x4f, 0x19, 0x92, 0xc7, 0xf8, 0xaf, 0x6e, 0x0e, 0xfa, 0xa3, 0x2c, 0x69, 0x0c, - 0x63, 0x14, 0xb3, 0x2e, 0x72, 0x6e, 0xea, 0x1a, 0x2a, 0xa4, 0x08, 0xc1, 0xa3, 0x63, 0x04, 0x6d, - 0x3a, 0x3e, 0xca, 0xc1, 0x71, 0x52, 0x0d, 0x32, 0xe8, 0x25, 0x0f, 0x99, 0xae, 0x6e, 0x99, 0x85, - 0x59, 0x42, 0xf2, 0xc8, 0x84, 0x55, 0x44, 0x46, 0x67, 0x94, 0x62, 0x88, 0x93, 0x2e, 0xc1, 0xac, - 0x65, 0x7b, 0xba, 0x65, 0xba, 0x85, 0xf4, 0x8a, 0xb0, 0x9a, 0x3d, 0xff, 0xc0, 0xc4, 0x40, 0x68, - 0x52, 0x1d, 0x99, 0x2b, 0x4b, 0x0d, 0x10, 0x5d, 0x6b, 0xe0, 0x68, 0x48, 0xd1, 0xac, 0x0e, 0x52, - 0x74, 0xb3, 0x6b, 0x15, 0x32, 0x84, 0xe0, 0xec, 0xf8, 0x44, 0x88, 0x62, 0xcd, 0xea, 0xa0, 0x86, - 0xd9, 0xb5, 0xe4, 0xbc, 0x1b, 0x7a, 0x96, 0x4e, 0x41, 0xca, 0x3d, 0x34, 0x3d, 0xf5, 0xa5, 0x42, - 0x8e, 0x44, 0x08, 0x7b, 0x2a, 0x7d, 0x37, 0x05, 0xf3, 0xd3, 0x84, 0xd8, 0x55, 0x48, 0x76, 0xf1, - 0x2c, 0x0b, 0xb1, 0x93, 0xf8, 0x80, 0x62, 0xc2, 0x4e, 0x4c, 0xfd, 0x94, 0x4e, 0xac, 0x42, 0xd6, - 0x44, 0xae, 0x87, 0x3a, 0x34, 0x22, 0xe2, 0x53, 0xc6, 0x14, 0x50, 0xd0, 0x78, 0x48, 0x25, 0x7e, - 0xaa, 0x90, 0x7a, 0x1e, 0xe6, 0x7d, 0x93, 0x14, 0x47, 0x35, 0x7b, 0x3c, 0x36, 0xd7, 0xa2, 0x2c, - 0x29, 0xd7, 0x39, 0x4e, 0xc6, 0x30, 0x39, 0x8f, 0x42, 0xcf, 0xd2, 0x06, 0x80, 0x65, 0x22, 0xab, - 0xab, 0x74, 0x90, 0x66, 0x14, 0xd2, 0xc7, 0x78, 0xa9, 0x89, 0x55, 0xc6, 0xbc, 0x64, 0x51, 0xa9, - 0x66, 0x48, 0x57, 0x86, 0xa1, 0x36, 0x7b, 0x4c, 0xa4, 0x6c, 0xd3, 0x4d, 0x36, 0x16, 0x6d, 0x7b, - 0x90, 0x77, 0x10, 0x8e, 0x7b, 0xd4, 0x61, 0x33, 0xcb, 0x10, 0x23, 0xca, 0x91, 0x33, 0x93, 0x19, - 0x8c, 0x4e, 0x6c, 0xce, 0x09, 0x3e, 0x4a, 0x0f, 0x81, 0x2f, 0x50, 0x48, 0x58, 0x01, 0xc9, 0x42, - 0x39, 0x2e, 0xdc, 0x51, 0xfb, 0x68, 0xf9, 0x36, 0xe4, 0xc3, 0xee, 0x91, 0x96, 0x20, 0xe9, 0x7a, - 0xaa, 0xe3, 0x91, 0x28, 0x4c, 0xca, 0xf4, 0x41, 0x12, 0x21, 0x8e, 0xcc, 0x0e, 0xc9, 0x72, 0x49, - 0x19, 0xff, 0x2b, 0xfd, 0xdc, 0x70, 0xc2, 0x71, 0x32, 0xe1, 0x8f, 0x8d, 0xaf, 0x68, 0x88, 0x79, - 0x74, 0xde, 0xcb, 0x4f, 0xc1, 0x5c, 0x68, 0x02, 0xd3, 0xbe, 0xba, 0xf4, 0x8b, 0x70, 0xdf, 0x44, - 0x6a, 0xe9, 0x79, 0x58, 0x1a, 0x98, 0xba, 0xe9, 0x21, 0xc7, 0x76, 0x10, 0x8e, 0x58, 0xfa, 0xaa, - 0xc2, 0xbf, 0xcf, 0x1e, 0x13, 0x73, 0x7b, 0x41, 0x6d, 0xca, 0x22, 0x2f, 0x0e, 0xc6, 0x85, 0x8f, - 0x67, 0xd2, 0x3f, 0x9a, 0x15, 0xef, 0xdc, 0xb9, 0x73, 0x27, 0x56, 0xfa, 0x42, 0x0a, 0x96, 0x26, - 0xed, 0x99, 0x89, 0xdb, 0xf7, 0x14, 0xa4, 0xcc, 0x41, 0x7f, 0x1f, 0x39, 0xc4, 0x49, 0x49, 0x99, - 0x3d, 0x49, 0x55, 0x48, 0x1a, 0xea, 0x3e, 0x32, 0x0a, 0x89, 0x15, 0x61, 0x35, 0x7f, 0xfe, 0x89, - 0xa9, 0x76, 0x65, 0x79, 0x0b, 0x43, 0x64, 0x8a, 0x94, 0x9e, 0x86, 0x04, 0x4b, 0xd1, 0x98, 0xe1, - 0xf1, 0xe9, 0x18, 0xf0, 0x5e, 0x92, 0x09, 0x4e, 0xba, 0x1f, 0x32, 0xf8, 0x2f, 0x8d, 0x8d, 0x14, - 0xb1, 0x39, 0x8d, 0x05, 0x38, 0x2e, 0xa4, 0x65, 0x48, 0x93, 0x6d, 0xd2, 0x41, 0xbc, 0xb4, 0xf9, - 0xcf, 0x38, 0xb0, 0x3a, 0xa8, 0xab, 0x0e, 0x0c, 0x4f, 0xb9, 0xa9, 0x1a, 0x03, 0x44, 0x02, 0x3e, - 0x23, 0xe7, 0x98, 0xf0, 0x33, 0x58, 0x26, 0x9d, 0x85, 0x2c, 0xdd, 0x55, 0xba, 0xd9, 0x41, 0x2f, - 0x91, 0xec, 0x99, 0x94, 0xe9, 0x46, 0x6b, 0x60, 0x09, 0x7e, 0xfd, 0x75, 0xd7, 0x32, 0x79, 0x68, - 0x92, 0x57, 0x60, 0x01, 0x79, 0xfd, 0x53, 0xa3, 0x89, 0xfb, 0xc1, 0xc9, 0xd3, 0x1b, 0x8d, 0xa9, - 0xd2, 0xb7, 0x62, 0x90, 0x20, 0xf9, 0x62, 0x1e, 0xb2, 0xbb, 0x2f, 0xb4, 0xea, 0xca, 0x46, 0x73, - 0x6f, 0x7d, 0xab, 0x2e, 0x0a, 0x52, 0x1e, 0x80, 0x08, 0xae, 0x6d, 0x35, 0xab, 0xbb, 0x62, 0xcc, - 0x7f, 0x6e, 0xec, 0xec, 0x5e, 0x7a, 0x52, 0x8c, 0xfb, 0x80, 0x3d, 0x2a, 0x48, 0x04, 0x15, 0x2e, - 0x9c, 0x17, 0x93, 0x92, 0x08, 0x39, 0x4a, 0xd0, 0x78, 0xbe, 0xbe, 0x71, 0xe9, 0x49, 0x31, 0x15, - 0x96, 0x5c, 0x38, 0x2f, 0xce, 0x4a, 0x73, 0x90, 0x21, 0x92, 0xf5, 0x66, 0x73, 0x4b, 0x4c, 0xfb, - 0x9c, 0xed, 0x5d, 0xb9, 0xb1, 0xb3, 0x29, 0x66, 0x7c, 0xce, 0x4d, 0xb9, 0xb9, 0xd7, 0x12, 0xc1, - 0x67, 0xd8, 0xae, 0xb7, 0xdb, 0xd5, 0xcd, 0xba, 0x98, 0xf5, 0x35, 0xd6, 0x5f, 0xd8, 0xad, 0xb7, - 0xc5, 0x5c, 0xc8, 0xac, 0x0b, 0xe7, 0xc5, 0x39, 0xff, 0x15, 0xf5, 0x9d, 0xbd, 0x6d, 0x31, 0x2f, - 0x2d, 0xc0, 0x1c, 0x7d, 0x05, 0x37, 0x62, 0x7e, 0x44, 0x74, 0xe9, 0x49, 0x51, 0x1c, 0x1a, 0x42, - 0x59, 0x16, 0x42, 0x82, 0x4b, 0x4f, 0x8a, 0x52, 0xa9, 0x06, 0x49, 0x12, 0x5d, 0x92, 0x04, 0xf9, - 0xad, 0xea, 0x7a, 0x7d, 0x4b, 0x69, 0xb6, 0x76, 0x1b, 0xcd, 0x9d, 0xea, 0x96, 0x28, 0x0c, 0x65, - 0x72, 0xfd, 0xd3, 0x7b, 0x0d, 0xb9, 0xbe, 0x21, 0xc6, 0x82, 0xb2, 0x56, 0xbd, 0xba, 0x5b, 0xdf, - 0x10, 0xe3, 0x25, 0x0d, 0x96, 0x26, 0xe5, 0xc9, 0x89, 0x3b, 0x23, 0xb0, 0xc4, 0xb1, 0x63, 0x96, - 0x98, 0x70, 0x8d, 0x2d, 0xf1, 0x0f, 0x63, 0xb0, 0x38, 0xa1, 0x56, 0x4c, 0x7c, 0xc9, 0x33, 0x90, - 0xa4, 0x21, 0x4a, 0xab, 0xe7, 0x63, 0x13, 0x8b, 0x0e, 0x09, 0xd8, 0xb1, 0x0a, 0x4a, 0x70, 0xc1, - 0x0e, 0x22, 0x7e, 0x4c, 0x07, 0x81, 0x29, 0xc6, 0x72, 0xfa, 0x2f, 0x8c, 0xe5, 0x74, 0x5a, 0xf6, - 0x2e, 0x4d, 0x53, 0xf6, 0x88, 0xec, 0x64, 0xb9, 0x3d, 0x39, 0x21, 0xb7, 0x5f, 0x85, 0x85, 0x31, - 0xa2, 0xa9, 0x73, 0xec, 0xcb, 0x02, 0x14, 0x8e, 0x73, 0x4e, 0x44, 0xa6, 0x8b, 0x85, 0x32, 0xdd, - 0xd5, 0x51, 0x0f, 0x9e, 0x3b, 0x7e, 0x11, 0xc6, 0xd6, 0xfa, 0x75, 0x01, 0x4e, 0x4d, 0xee, 0x14, - 0x27, 0xda, 0xf0, 0x34, 0xa4, 0xfa, 0xc8, 0x3b, 0xb0, 0x78, 0xb7, 0xf4, 0xb1, 0x09, 0x35, 0x18, - 0x0f, 0x8f, 0x2e, 0x36, 0x43, 0x05, 0x8b, 0x78, 0xfc, 0xb8, 0x76, 0x8f, 0x5a, 0x33, 0x66, 0xe9, - 0xe7, 0x63, 0x70, 0xdf, 0x44, 0xf2, 0x89, 0x86, 0x3e, 0x08, 0xa0, 0x9b, 0xf6, 0xc0, 0xa3, 0x1d, - 0x11, 0x4d, 0xb0, 0x19, 0x22, 0x21, 0xc9, 0x0b, 0x27, 0xcf, 0x81, 0xe7, 0x8f, 0xc7, 0xc9, 0x38, - 0x50, 0x11, 0x51, 0xb8, 0x3c, 0x34, 0x34, 0x41, 0x0c, 0x2d, 0x1e, 0x33, 0xd3, 0xb1, 0xc0, 0xfc, - 0x04, 0x88, 0x9a, 0xa1, 0x23, 0xd3, 0x53, 0x5c, 0xcf, 0x41, 0x6a, 0x5f, 0x37, 0x7b, 0xa4, 0x82, - 0xa4, 0x2b, 0xc9, 0xae, 0x6a, 0xb8, 0x48, 0x9e, 0xa7, 0xc3, 0x6d, 0x3e, 0x8a, 0x11, 0x24, 0x80, - 0x9c, 0x00, 0x22, 0x15, 0x42, 0xd0, 0x61, 0x1f, 0x51, 0xfa, 0x66, 0x1a, 0xb2, 0x81, 0xbe, 0x5a, - 0x3a, 0x07, 0xb9, 0xeb, 0xea, 0x4d, 0x55, 0xe1, 0x67, 0x25, 0xea, 0x89, 0x2c, 0x96, 0xb5, 0xd8, - 0x79, 0xe9, 0x13, 0xb0, 0x44, 0x54, 0xac, 0x81, 0x87, 0x1c, 0x45, 0x33, 0x54, 0xd7, 0x25, 0x4e, - 0x4b, 0x13, 0x55, 0x09, 0x8f, 0x35, 0xf1, 0x50, 0x8d, 0x8f, 0x48, 0x17, 0x61, 0x91, 0x20, 0xfa, - 0x03, 0xc3, 0xd3, 0x6d, 0x03, 0x29, 0xf8, 0xf4, 0xe6, 0x92, 0x4a, 0xe2, 0x5b, 0xb6, 0x80, 0x35, - 0xb6, 0x99, 0x02, 0xb6, 0xc8, 0x95, 0x36, 0xe0, 0x41, 0x02, 0xeb, 0x21, 0x13, 0x39, 0xaa, 0x87, - 0x14, 0xf4, 0xb9, 0x81, 0x6a, 0xb8, 0x8a, 0x6a, 0x76, 0x94, 0x03, 0xd5, 0x3d, 0x28, 0x2c, 0x61, - 0x82, 0xf5, 0x58, 0x41, 0x90, 0xcf, 0x60, 0xc5, 0x4d, 0xa6, 0x57, 0x27, 0x6a, 0x55, 0xb3, 0xf3, - 0x29, 0xd5, 0x3d, 0x90, 0x2a, 0x70, 0x8a, 0xb0, 0xb8, 0x9e, 0xa3, 0x9b, 0x3d, 0x45, 0x3b, 0x40, - 0xda, 0x0d, 0x65, 0xe0, 0x75, 0x2f, 0x17, 0xee, 0x0f, 0xbe, 0x9f, 0x58, 0xd8, 0x26, 0x3a, 0x35, - 0xac, 0xb2, 0xe7, 0x75, 0x2f, 0x4b, 0x6d, 0xc8, 0xe1, 0xc5, 0xe8, 0xeb, 0xb7, 0x91, 0xd2, 0xb5, - 0x1c, 0x52, 0x1a, 0xf3, 0x13, 0x52, 0x53, 0xc0, 0x83, 0xe5, 0x26, 0x03, 0x6c, 0x5b, 0x1d, 0x54, - 0x49, 0xb6, 0x5b, 0xf5, 0xfa, 0x86, 0x9c, 0xe5, 0x2c, 0xd7, 0x2c, 0x07, 0x07, 0x54, 0xcf, 0xf2, - 0x1d, 0x9c, 0xa5, 0x01, 0xd5, 0xb3, 0xb8, 0x7b, 0x2f, 0xc2, 0xa2, 0xa6, 0xd1, 0x39, 0xeb, 0x9a, - 0xc2, 0xce, 0x58, 0x6e, 0x41, 0x0c, 0x39, 0x4b, 0xd3, 0x36, 0xa9, 0x02, 0x8b, 0x71, 0x57, 0xba, - 0x02, 0xf7, 0x0d, 0x9d, 0x15, 0x04, 0x2e, 0x8c, 0xcd, 0x72, 0x14, 0x7a, 0x11, 0x16, 0xed, 0xc3, - 0x71, 0xa0, 0x14, 0x7a, 0xa3, 0x7d, 0x38, 0x0a, 0x7b, 0x0a, 0x96, 0xec, 0x03, 0x7b, 0x1c, 0xf7, - 0x78, 0x10, 0x27, 0xd9, 0x07, 0xf6, 0x28, 0xf0, 0x11, 0x72, 0xe0, 0x76, 0x90, 0xa6, 0x7a, 0xa8, - 0x53, 0x38, 0x1d, 0x54, 0x0f, 0x0c, 0x48, 0x6b, 0x20, 0x6a, 0x9a, 0x82, 0x4c, 0x75, 0xdf, 0x40, - 0x8a, 0xea, 0x20, 0x53, 0x75, 0x0b, 0x67, 0x83, 0xca, 0x79, 0x4d, 0xab, 0x93, 0xd1, 0x2a, 0x19, - 0x94, 0x1e, 0x87, 0x05, 0x6b, 0xff, 0xba, 0x46, 0x43, 0x52, 0xb1, 0x1d, 0xd4, 0xd5, 0x5f, 0x2a, - 0x3c, 0x4c, 0xfc, 0x3b, 0x8f, 0x07, 0x48, 0x40, 0xb6, 0x88, 0x58, 0x7a, 0x0c, 0x44, 0xcd, 0x3d, - 0x50, 0x1d, 0x9b, 0xe4, 0x64, 0xd7, 0x56, 0x35, 0x54, 0x78, 0x84, 0xaa, 0x52, 0xf9, 0x0e, 0x17, - 0xe3, 0x2d, 0xe1, 0xde, 0xd2, 0xbb, 0x1e, 0x67, 0x7c, 0x94, 0x6e, 0x09, 0x22, 0x63, 0x6c, 0xab, - 0x20, 0x62, 0x57, 0x84, 0x5e, 0xbc, 0x4a, 0xd4, 0xf2, 0xf6, 0x81, 0x1d, 0x7c, 0xef, 0x43, 0x30, - 0x87, 0x35, 0x87, 0x2f, 0x7d, 0x8c, 0x36, 0x64, 0xf6, 0x41, 0xe0, 0x8d, 0x1f, 0x58, 0x6f, 0x5c, - 0xaa, 0x40, 0x2e, 0x18, 0x9f, 0x52, 0x06, 0x68, 0x84, 0x8a, 0x02, 0x6e, 0x56, 0x6a, 0xcd, 0x0d, - 0xdc, 0x66, 0xbc, 0x58, 0x17, 0x63, 0xb8, 0xdd, 0xd9, 0x6a, 0xec, 0xd6, 0x15, 0x79, 0x6f, 0x67, - 0xb7, 0xb1, 0x5d, 0x17, 0xe3, 0xc1, 0xbe, 0xfa, 0x7b, 0x31, 0xc8, 0x87, 0x8f, 0x48, 0xd2, 0xcf, - 0xc2, 0x69, 0x7e, 0x9f, 0xe1, 0x22, 0x4f, 0xb9, 0xa5, 0x3b, 0x64, 0xcb, 0xf4, 0x55, 0x5a, 0xbe, - 0xfc, 0x45, 0x5b, 0x62, 0x5a, 0x6d, 0xe4, 0x3d, 0xa7, 0x3b, 0x78, 0x43, 0xf4, 0x55, 0x4f, 0xda, - 0x82, 0xb3, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0x76, 0x54, 0xa7, 0xa3, 0x0c, 0x6f, 0x92, 0x14, 0x55, - 0xd3, 0x90, 0xeb, 0x5a, 0xb4, 0x54, 0xf9, 0x2c, 0x0f, 0x98, 0x56, 0x9b, 0x29, 0x0f, 0x73, 0x78, - 0x95, 0xa9, 0x8e, 0x04, 0x58, 0xfc, 0xb8, 0x00, 0xbb, 0x1f, 0x32, 0x7d, 0xd5, 0x56, 0x90, 0xe9, - 0x39, 0x87, 0xa4, 0x31, 0x4e, 0xcb, 0xe9, 0xbe, 0x6a, 0xd7, 0xf1, 0xf3, 0x87, 0x73, 0x3e, 0xf9, - 0xb7, 0x38, 0xe4, 0x82, 0xcd, 0x31, 0x3e, 0x6b, 0x68, 0xa4, 0x8e, 0x08, 0x24, 0xd3, 0x3c, 0x74, - 0xcf, 0x56, 0xba, 0x5c, 0xc3, 0x05, 0xa6, 0x92, 0xa2, 0x2d, 0xab, 0x4c, 0x91, 0xb8, 0xb8, 0xe3, - 0xdc, 0x82, 0x68, 0x8b, 0x90, 0x96, 0xd9, 0x93, 0xb4, 0x09, 0xa9, 0xeb, 0x2e, 0xe1, 0x4e, 0x11, - 0xee, 0x87, 0xef, 0xcd, 0xfd, 0x6c, 0x9b, 0x90, 0x67, 0x9e, 0x6d, 0x2b, 0x3b, 0x4d, 0x79, 0xbb, - 0xba, 0x25, 0x33, 0xb8, 0x74, 0x06, 0x12, 0x86, 0x7a, 0xfb, 0x30, 0x5c, 0x8a, 0x88, 0x68, 0x5a, - 0xc7, 0x9f, 0x81, 0xc4, 0x2d, 0xa4, 0xde, 0x08, 0x17, 0x00, 0x22, 0xfa, 0x00, 0x43, 0x7f, 0x0d, - 0x92, 0xc4, 0x5f, 0x12, 0x00, 0xf3, 0x98, 0x38, 0x23, 0xa5, 0x21, 0x51, 0x6b, 0xca, 0x38, 0xfc, - 0x45, 0xc8, 0x51, 0xa9, 0xd2, 0x6a, 0xd4, 0x6b, 0x75, 0x31, 0x56, 0xba, 0x08, 0x29, 0xea, 0x04, - 0xbc, 0x35, 0x7c, 0x37, 0x88, 0x33, 0xec, 0x91, 0x71, 0x08, 0x7c, 0x74, 0x6f, 0x7b, 0xbd, 0x2e, - 0x8b, 0xb1, 0xe0, 0xf2, 0xba, 0x90, 0x0b, 0xf6, 0xc5, 0x1f, 0x4e, 0x4c, 0xfd, 0x83, 0x00, 0xd9, - 0x40, 0x9f, 0x8b, 0x1b, 0x14, 0xd5, 0x30, 0xac, 0x5b, 0x8a, 0x6a, 0xe8, 0xaa, 0xcb, 0x82, 0x02, - 0x88, 0xa8, 0x8a, 0x25, 0xd3, 0x2e, 0xda, 0x87, 0x62, 0xfc, 0x6b, 0x02, 0x88, 0xa3, 0x2d, 0xe6, - 0x88, 0x81, 0xc2, 0x47, 0x6a, 0xe0, 0xab, 0x02, 0xe4, 0xc3, 0x7d, 0xe5, 0x88, 0x79, 0xe7, 0x3e, - 0x52, 0xf3, 0xde, 0x8c, 0xc1, 0x5c, 0xa8, 0x9b, 0x9c, 0xd6, 0xba, 0xcf, 0xc1, 0x82, 0xde, 0x41, - 0x7d, 0xdb, 0xf2, 0x90, 0xa9, 0x1d, 0x2a, 0x06, 0xba, 0x89, 0x8c, 0x42, 0x89, 0x24, 0x8a, 0xb5, - 0x7b, 0xf7, 0xab, 0xe5, 0xc6, 0x10, 0xb7, 0x85, 0x61, 0x95, 0xc5, 0xc6, 0x46, 0x7d, 0xbb, 0xd5, - 0xdc, 0xad, 0xef, 0xd4, 0x5e, 0x50, 0xf6, 0x76, 0x7e, 0x7e, 0xa7, 0xf9, 0xdc, 0x8e, 0x2c, 0xea, - 0x23, 0x6a, 0x1f, 0xe0, 0x56, 0x6f, 0x81, 0x38, 0x6a, 0x94, 0x74, 0x1a, 0x26, 0x99, 0x25, 0xce, - 0x48, 0x8b, 0x30, 0xbf, 0xd3, 0x54, 0xda, 0x8d, 0x8d, 0xba, 0x52, 0xbf, 0x76, 0xad, 0x5e, 0xdb, - 0x6d, 0xd3, 0x1b, 0x08, 0x5f, 0x7b, 0x37, 0xbc, 0xa9, 0x5f, 0x89, 0xc3, 0xe2, 0x04, 0x4b, 0xa4, - 0x2a, 0x3b, 0x3b, 0xd0, 0xe3, 0xcc, 0xc7, 0xa7, 0xb1, 0xbe, 0x8c, 0x4b, 0x7e, 0x4b, 0x75, 0x3c, - 0x76, 0xd4, 0x78, 0x0c, 0xb0, 0x97, 0x4c, 0x4f, 0xef, 0xea, 0xc8, 0x61, 0x17, 0x36, 0xf4, 0x40, - 0x31, 0x3f, 0x94, 0xd3, 0x3b, 0x9b, 0x9f, 0x01, 0xc9, 0xb6, 0x5c, 0xdd, 0xd3, 0x6f, 0x22, 0x45, - 0x37, 0xf9, 0xed, 0x0e, 0x3e, 0x60, 0x24, 0x64, 0x91, 0x8f, 0x34, 0x4c, 0xcf, 0xd7, 0x36, 0x51, - 0x4f, 0x1d, 0xd1, 0xc6, 0x09, 0x3c, 0x2e, 0x8b, 0x7c, 0xc4, 0xd7, 0x3e, 0x07, 0xb9, 0x8e, 0x35, - 0xc0, 0x5d, 0x17, 0xd5, 0xc3, 0xf5, 0x42, 0x90, 0xb3, 0x54, 0xe6, 0xab, 0xb0, 0x7e, 0x7a, 0x78, - 0xad, 0x94, 0x93, 0xb3, 0x54, 0x46, 0x55, 0x1e, 0x85, 0x79, 0xb5, 0xd7, 0x73, 0x30, 0x39, 0x27, - 0xa2, 0x27, 0x84, 0xbc, 0x2f, 0x26, 0x8a, 0xcb, 0xcf, 0x42, 0x9a, 0xfb, 0x01, 0x97, 0x64, 0xec, - 0x09, 0xc5, 0xa6, 0xc7, 0xde, 0xd8, 0x6a, 0x46, 0x4e, 0x9b, 0x7c, 0xf0, 0x1c, 0xe4, 0x74, 0x57, - 0x19, 0xde, 0x92, 0xc7, 0x56, 0x62, 0xab, 0x69, 0x39, 0xab, 0xbb, 0xfe, 0x0d, 0x63, 0xe9, 0xf5, - 0x18, 0xe4, 0xc3, 0xb7, 0xfc, 0xd2, 0x06, 0xa4, 0x0d, 0x4b, 0x53, 0x49, 0x68, 0xd1, 0x4f, 0x4c, - 0xab, 0x11, 0x1f, 0x06, 0xca, 0x5b, 0x4c, 0x5f, 0xf6, 0x91, 0xcb, 0xff, 0x22, 0x40, 0x9a, 0x8b, - 0xa5, 0x53, 0x90, 0xb0, 0x55, 0xef, 0x80, 0xd0, 0x25, 0xd7, 0x63, 0xa2, 0x20, 0x93, 0x67, 0x2c, - 0x77, 0x6d, 0xd5, 0x24, 0x21, 0xc0, 0xe4, 0xf8, 0x19, 0xaf, 0xab, 0x81, 0xd4, 0x0e, 0x39, 0x7e, - 0x58, 0xfd, 0x3e, 0x32, 0x3d, 0x97, 0xaf, 0x2b, 0x93, 0xd7, 0x98, 0x58, 0x7a, 0x02, 0x16, 0x3c, - 0x47, 0xd5, 0x8d, 0x90, 0x6e, 0x82, 0xe8, 0x8a, 0x7c, 0xc0, 0x57, 0xae, 0xc0, 0x19, 0xce, 0xdb, - 0x41, 0x9e, 0xaa, 0x1d, 0xa0, 0xce, 0x10, 0x94, 0x22, 0xd7, 0x0c, 0xa7, 0x99, 0xc2, 0x06, 0x1b, - 0xe7, 0xd8, 0xd2, 0x0f, 0x04, 0x58, 0xe0, 0x07, 0xa6, 0x8e, 0xef, 0xac, 0x6d, 0x00, 0xd5, 0x34, - 0x2d, 0x2f, 0xe8, 0xae, 0xf1, 0x50, 0x1e, 0xc3, 0x95, 0xab, 0x3e, 0x48, 0x0e, 0x10, 0x2c, 0xf7, - 0x01, 0x86, 0x23, 0xc7, 0xba, 0xed, 0x2c, 0x64, 0xd9, 0x27, 0x1c, 0xf2, 0x1d, 0x90, 0x1e, 0xb1, - 0x81, 0x8a, 0xf0, 0xc9, 0x4a, 0x5a, 0x82, 0xe4, 0x3e, 0xea, 0xe9, 0x26, 0xbb, 0x98, 0xa5, 0x0f, - 0xfc, 0x22, 0x24, 0xe1, 0x5f, 0x84, 0xac, 0x7f, 0x16, 0x16, 0x35, 0xab, 0x3f, 0x6a, 0xee, 0xba, - 0x38, 0x72, 0xcc, 0x77, 0x3f, 0x25, 0xbc, 0x08, 0xc3, 0x16, 0xf3, 0x3d, 0x41, 0xf8, 0xd3, 0x58, - 0x7c, 0xb3, 0xb5, 0xfe, 0xb5, 0xd8, 0xf2, 0x26, 0x85, 0xb6, 0xf8, 0x4c, 0x65, 0xd4, 0x35, 0x90, - 0x86, 0xad, 0x87, 0xaf, 0xac, 0xc2, 0xc7, 0x7b, 0xba, 0x77, 0x30, 0xd8, 0x2f, 0x6b, 0x56, 0x7f, - 0xad, 0x67, 0xf5, 0xac, 0xe1, 0xa7, 0x4f, 0xfc, 0x44, 0x1e, 0xc8, 0x7f, 0xec, 0xf3, 0x67, 0xc6, - 0x97, 0x2e, 0x47, 0x7e, 0x2b, 0xad, 0xec, 0xc0, 0x22, 0x53, 0x56, 0xc8, 0xf7, 0x17, 0x7a, 0x8a, - 0x90, 0xee, 0x79, 0x87, 0x55, 0xf8, 0xc6, 0x5b, 0xa4, 0x5c, 0xcb, 0x0b, 0x0c, 0x8a, 0xc7, 0xe8, - 0x41, 0xa3, 0x22, 0xc3, 0x7d, 0x21, 0x3e, 0xba, 0x35, 0x91, 0x13, 0xc1, 0xf8, 0x3d, 0xc6, 0xb8, - 0x18, 0x60, 0x6c, 0x33, 0x68, 0xa5, 0x06, 0x73, 0x27, 0xe1, 0xfa, 0x27, 0xc6, 0x95, 0x43, 0x41, - 0x92, 0x4d, 0x98, 0x27, 0x24, 0xda, 0xc0, 0xf5, 0xac, 0x3e, 0xc9, 0x7b, 0xf7, 0xa6, 0xf9, 0xe7, - 0xb7, 0xe8, 0x5e, 0xc9, 0x63, 0x58, 0xcd, 0x47, 0x55, 0x2a, 0x40, 0x3e, 0x39, 0x75, 0x90, 0x66, - 0x44, 0x30, 0xbc, 0xc1, 0x0c, 0xf1, 0xf5, 0x2b, 0x9f, 0x81, 0x25, 0xfc, 0x3f, 0x49, 0x4b, 0x41, - 0x4b, 0xa2, 0x2f, 0xbc, 0x0a, 0x3f, 0x78, 0x99, 0x6e, 0xc7, 0x45, 0x9f, 0x20, 0x60, 0x53, 0x60, - 0x15, 0x7b, 0xc8, 0xf3, 0x90, 0xe3, 0x2a, 0xaa, 0x31, 0xc9, 0xbc, 0xc0, 0x8d, 0x41, 0xe1, 0x8b, - 0x6f, 0x87, 0x57, 0x71, 0x93, 0x22, 0xab, 0x86, 0x51, 0xd9, 0x83, 0xd3, 0x13, 0xa2, 0x62, 0x0a, - 0xce, 0x57, 0x18, 0xe7, 0xd2, 0x58, 0x64, 0x60, 0xda, 0x16, 0x70, 0xb9, 0xbf, 0x96, 0x53, 0x70, - 0xfe, 0x11, 0xe3, 0x94, 0x18, 0x96, 0x2f, 0x29, 0x66, 0x7c, 0x16, 0x16, 0x6e, 0x22, 0x67, 0xdf, - 0x72, 0xd9, 0x2d, 0xcd, 0x14, 0x74, 0xaf, 0x32, 0xba, 0x79, 0x06, 0x24, 0xd7, 0x36, 0x98, 0xeb, - 0x0a, 0xa4, 0xbb, 0xaa, 0x86, 0xa6, 0xa0, 0xf8, 0x12, 0xa3, 0x98, 0xc5, 0xfa, 0x18, 0x5a, 0x85, - 0x5c, 0xcf, 0x62, 0x95, 0x29, 0x1a, 0xfe, 0x1a, 0x83, 0x67, 0x39, 0x86, 0x51, 0xd8, 0x96, 0x3d, - 0x30, 0x70, 0xd9, 0x8a, 0xa6, 0xf8, 0x63, 0x4e, 0xc1, 0x31, 0x8c, 0xe2, 0x04, 0x6e, 0xfd, 0x13, - 0x4e, 0xe1, 0x06, 0xfc, 0xf9, 0x0c, 0x64, 0x2d, 0xd3, 0x38, 0xb4, 0xcc, 0x69, 0x8c, 0xf8, 0x32, - 0x63, 0x00, 0x06, 0xc1, 0x04, 0x57, 0x21, 0x33, 0xed, 0x42, 0x7c, 0xe5, 0x6d, 0xbe, 0x3d, 0xf8, - 0x0a, 0x6c, 0xc2, 0x3c, 0x4f, 0x50, 0xba, 0x65, 0x4e, 0x41, 0xf1, 0x67, 0x8c, 0x22, 0x1f, 0x80, - 0xb1, 0x69, 0x78, 0xc8, 0xf5, 0x7a, 0x68, 0x1a, 0x92, 0xd7, 0xf9, 0x34, 0x18, 0x84, 0xb9, 0x72, - 0x1f, 0x99, 0xda, 0xc1, 0x74, 0x0c, 0x5f, 0xe5, 0xae, 0xe4, 0x18, 0x4c, 0x51, 0x83, 0xb9, 0xbe, - 0xea, 0xb8, 0x07, 0xaa, 0x31, 0xd5, 0x72, 0xfc, 0x39, 0xe3, 0xc8, 0xf9, 0x20, 0xe6, 0x91, 0x81, - 0x79, 0x12, 0x9a, 0xaf, 0x71, 0x8f, 0x04, 0x60, 0x6c, 0xeb, 0xb9, 0x1e, 0xb9, 0xd2, 0x3a, 0x09, - 0xdb, 0x5f, 0xf0, 0xad, 0x47, 0xb1, 0xdb, 0x41, 0xc6, 0xab, 0x90, 0x71, 0xf5, 0xdb, 0x53, 0xd1, - 0xfc, 0x25, 0x5f, 0x69, 0x02, 0xc0, 0xe0, 0x17, 0xe0, 0xcc, 0xc4, 0x32, 0x31, 0x05, 0xd9, 0x5f, - 0x31, 0xb2, 0x53, 0x13, 0x4a, 0x05, 0x4b, 0x09, 0x27, 0xa5, 0xfc, 0x6b, 0x9e, 0x12, 0xd0, 0x08, - 0x57, 0x0b, 0x9f, 0x15, 0x5c, 0xb5, 0x7b, 0x32, 0xaf, 0xfd, 0x0d, 0xf7, 0x1a, 0xc5, 0x86, 0xbc, - 0xb6, 0x0b, 0xa7, 0x18, 0xe3, 0xc9, 0xd6, 0xf5, 0xeb, 0x3c, 0xb1, 0x52, 0xf4, 0x5e, 0x78, 0x75, - 0x3f, 0x0b, 0xcb, 0xbe, 0x3b, 0x79, 0x53, 0xea, 0x2a, 0x7d, 0xd5, 0x9e, 0x82, 0xf9, 0x1b, 0x8c, - 0x99, 0x67, 0x7c, 0xbf, 0xab, 0x75, 0xb7, 0x55, 0x1b, 0x93, 0x3f, 0x0f, 0x05, 0x4e, 0x3e, 0x30, - 0x1d, 0xa4, 0x59, 0x3d, 0x53, 0xbf, 0x8d, 0x3a, 0x53, 0x50, 0xff, 0xed, 0xc8, 0x52, 0xed, 0x05, - 0xe0, 0x98, 0xb9, 0x01, 0xa2, 0xdf, 0xab, 0x28, 0x7a, 0xdf, 0xb6, 0x1c, 0x2f, 0x82, 0xf1, 0x9b, - 0x7c, 0xa5, 0x7c, 0x5c, 0x83, 0xc0, 0x2a, 0x75, 0xc8, 0x93, 0xc7, 0x69, 0x43, 0xf2, 0xef, 0x18, - 0xd1, 0xdc, 0x10, 0xc5, 0x12, 0x87, 0x66, 0xf5, 0x6d, 0xd5, 0x99, 0x26, 0xff, 0xfd, 0x3d, 0x4f, - 0x1c, 0x0c, 0xc2, 0x12, 0x87, 0x77, 0x68, 0x23, 0x5c, 0xed, 0xa7, 0x60, 0xf8, 0x16, 0x4f, 0x1c, - 0x1c, 0xc3, 0x28, 0x78, 0xc3, 0x30, 0x05, 0xc5, 0xb7, 0x39, 0x05, 0xc7, 0x60, 0x8a, 0x4f, 0x0f, - 0x0b, 0xad, 0x83, 0x7a, 0xba, 0xeb, 0x39, 0xb4, 0x15, 0xbe, 0x37, 0xd5, 0x77, 0xde, 0x0e, 0x37, - 0x61, 0x72, 0x00, 0x8a, 0x33, 0x11, 0xbb, 0x42, 0x25, 0x27, 0xa5, 0x68, 0xc3, 0xbe, 0xcb, 0x33, - 0x51, 0x00, 0x46, 0xf7, 0xe7, 0xfc, 0x48, 0xaf, 0x22, 0x45, 0xfd, 0x10, 0xa6, 0xf0, 0xcb, 0xef, - 0x32, 0xae, 0x70, 0xab, 0x52, 0xd9, 0xc2, 0x01, 0x14, 0x6e, 0x28, 0xa2, 0xc9, 0x5e, 0x7e, 0xd7, - 0x8f, 0xa1, 0x50, 0x3f, 0x51, 0xb9, 0x06, 0x73, 0xa1, 0x66, 0x22, 0x9a, 0xea, 0x57, 0x18, 0x55, - 0x2e, 0xd8, 0x4b, 0x54, 0x2e, 0x42, 0x02, 0x37, 0x06, 0xd1, 0xf0, 0x5f, 0x65, 0x70, 0xa2, 0x5e, - 0xf9, 0x24, 0xa4, 0x79, 0x43, 0x10, 0x0d, 0xfd, 0x35, 0x06, 0xf5, 0x21, 0x18, 0xce, 0x9b, 0x81, - 0x68, 0xf8, 0xaf, 0x73, 0x38, 0x87, 0x60, 0xf8, 0xf4, 0x2e, 0xfc, 0xc7, 0xdf, 0x48, 0xb0, 0x84, - 0xce, 0x7d, 0x77, 0x15, 0x66, 0x59, 0x17, 0x10, 0x8d, 0xfe, 0x3c, 0x7b, 0x39, 0x47, 0x54, 0x9e, - 0x82, 0xe4, 0x94, 0x0e, 0xff, 0x4d, 0x06, 0xa5, 0xfa, 0x95, 0x1a, 0x64, 0x03, 0x95, 0x3f, 0x1a, - 0xfe, 0x5b, 0x0c, 0x1e, 0x44, 0x61, 0xd3, 0x59, 0xe5, 0x8f, 0x26, 0xf8, 0x6d, 0x6e, 0x3a, 0x43, - 0x60, 0xb7, 0xf1, 0xa2, 0x1f, 0x8d, 0xfe, 0x1d, 0xee, 0x75, 0x0e, 0xa9, 0x3c, 0x03, 0x19, 0x3f, - 0x91, 0x47, 0xe3, 0x7f, 0x97, 0xe1, 0x87, 0x18, 0xec, 0x81, 0x40, 0x21, 0x89, 0xa6, 0xf8, 0x3d, - 0xee, 0x81, 0x00, 0x0a, 0x6f, 0xa3, 0xd1, 0xe6, 0x20, 0x9a, 0xe9, 0xf7, 0xf9, 0x36, 0x1a, 0xe9, - 0x0d, 0xf0, 0x6a, 0x92, 0x7c, 0x1a, 0x4d, 0xf1, 0x07, 0x7c, 0x35, 0x89, 0x3e, 0x36, 0x63, 0xb4, - 0xda, 0x46, 0x73, 0xfc, 0x21, 0x37, 0x63, 0xa4, 0xd8, 0x56, 0x5a, 0x20, 0x8d, 0x57, 0xda, 0x68, - 0xbe, 0x2f, 0x30, 0xbe, 0x85, 0xb1, 0x42, 0x5b, 0x79, 0x0e, 0x4e, 0x4d, 0xae, 0xb2, 0xd1, 0xac, - 0x5f, 0x7c, 0x77, 0xe4, 0x5c, 0x14, 0x2c, 0xb2, 0x95, 0xdd, 0x61, 0xba, 0x0e, 0x56, 0xd8, 0x68, - 0xda, 0x57, 0xde, 0x0d, 0x67, 0xec, 0x60, 0x81, 0xad, 0x54, 0x01, 0x86, 0xc5, 0x2d, 0x9a, 0xeb, - 0x55, 0xc6, 0x15, 0x00, 0xe1, 0xad, 0xc1, 0x6a, 0x5b, 0x34, 0xfe, 0x4b, 0x7c, 0x6b, 0x30, 0x04, - 0xde, 0x1a, 0xbc, 0xac, 0x45, 0xa3, 0x5f, 0xe3, 0x5b, 0x83, 0x43, 0x70, 0x64, 0x07, 0x2a, 0x47, - 0x34, 0xc3, 0x97, 0x79, 0x64, 0x07, 0x50, 0x95, 0xab, 0x90, 0x36, 0x07, 0x86, 0x81, 0x03, 0x54, - 0xba, 0xf7, 0x0f, 0xc4, 0x0a, 0xff, 0xf1, 0x3e, 0xb3, 0x80, 0x03, 0x2a, 0x17, 0x21, 0x89, 0xfa, - 0xfb, 0xa8, 0x13, 0x85, 0xfc, 0xcf, 0xf7, 0x79, 0x52, 0xc2, 0xda, 0x95, 0x67, 0x00, 0xe8, 0xd1, - 0x9e, 0x7c, 0xb6, 0x8a, 0xc0, 0xfe, 0xd7, 0xfb, 0xec, 0xa7, 0x1b, 0x43, 0xc8, 0x90, 0x80, 0xfe, - 0x10, 0xe4, 0xde, 0x04, 0x6f, 0x87, 0x09, 0xc8, 0xac, 0xaf, 0xc0, 0xec, 0x75, 0xd7, 0x32, 0x3d, - 0xb5, 0x17, 0x85, 0xfe, 0x6f, 0x86, 0xe6, 0xfa, 0xd8, 0x61, 0x7d, 0xcb, 0x41, 0x9e, 0xda, 0x73, - 0xa3, 0xb0, 0xff, 0xc3, 0xb0, 0x3e, 0x00, 0x83, 0x35, 0xd5, 0xf5, 0xa6, 0x99, 0xf7, 0x8f, 0x39, - 0x98, 0x03, 0xb0, 0xd1, 0xf8, 0xff, 0x1b, 0xe8, 0x30, 0x0a, 0xfb, 0x0e, 0x37, 0x9a, 0xe9, 0x57, - 0x3e, 0x09, 0x19, 0xfc, 0x2f, 0xfd, 0x3d, 0x56, 0x04, 0xf8, 0x7f, 0x19, 0x78, 0x88, 0xc0, 0x6f, - 0x76, 0xbd, 0x8e, 0xa7, 0x47, 0x3b, 0xfb, 0xff, 0xd8, 0x4a, 0x73, 0xfd, 0x4a, 0x15, 0xb2, 0xae, - 0xd7, 0xe9, 0x0c, 0x58, 0x7f, 0x15, 0x01, 0xff, 0xff, 0xf7, 0xfd, 0x23, 0xb7, 0x8f, 0x59, 0xaf, - 0x4f, 0xbe, 0x3d, 0x84, 0x4d, 0x6b, 0xd3, 0xa2, 0xf7, 0x86, 0x2f, 0x96, 0xa2, 0x2f, 0x00, 0xe1, - 0xdb, 0x71, 0x78, 0x40, 0xb3, 0xfa, 0xfb, 0x96, 0xbb, 0x16, 0xc8, 0x77, 0x6b, 0x7d, 0xd5, 0x66, - 0xd7, 0x82, 0xd9, 0xbe, 0x6a, 0xb3, 0xdf, 0x5f, 0xba, 0xcb, 0x27, 0xbb, 0x52, 0x2c, 0xfd, 0x12, - 0xcc, 0x6e, 0xab, 0xf6, 0x2e, 0x72, 0x3d, 0x89, 0x38, 0x8b, 0xfc, 0xd0, 0x87, 0xdd, 0xd3, 0xae, - 0x94, 0x03, 0xc4, 0x65, 0xa6, 0x56, 0x6e, 0x7b, 0x4e, 0xdb, 0x73, 0xc8, 0x37, 0x6d, 0x39, 0xe5, - 0x92, 0x87, 0xe5, 0x2b, 0x90, 0x0d, 0x88, 0x25, 0x11, 0xe2, 0x37, 0xd0, 0x21, 0xfb, 0xa9, 0x0f, - 0xfe, 0x57, 0x5a, 0x1a, 0xfe, 0x16, 0x0f, 0xcb, 0xe8, 0x43, 0x25, 0x76, 0x59, 0x28, 0x3d, 0x0d, - 0xb3, 0xd7, 0xd4, 0x1b, 0x68, 0x5b, 0xb5, 0xa5, 0x0b, 0x30, 0x8b, 0x4c, 0xcf, 0xd1, 0x91, 0xcb, - 0x0c, 0x38, 0x13, 0x32, 0x80, 0xa9, 0xd1, 0x37, 0x73, 0xcd, 0xd2, 0x16, 0xe4, 0x82, 0x03, 0xd3, - 0xbe, 0x1b, 0x4b, 0x2d, 0xef, 0x80, 0xfd, 0x36, 0x37, 0x23, 0xd3, 0x87, 0xf5, 0x8d, 0x37, 0xee, - 0x16, 0x67, 0xbe, 0x7f, 0xb7, 0x38, 0xf3, 0xaf, 0x77, 0x8b, 0x33, 0x6f, 0xde, 0x2d, 0x0a, 0xef, - 0xdc, 0x2d, 0x0a, 0xef, 0xdd, 0x2d, 0x0a, 0x77, 0x8e, 0x8a, 0xc2, 0x57, 0x8f, 0x8a, 0xc2, 0xd7, - 0x8f, 0x8a, 0xc2, 0x77, 0x8e, 0x8a, 0xc2, 0x1b, 0x47, 0xc5, 0x99, 0xef, 0x1f, 0x15, 0x85, 0x37, - 0x8f, 0x8a, 0xc2, 0x8f, 0x8e, 0x8a, 0x33, 0xef, 0x1c, 0x15, 0x85, 0xf7, 0x8e, 0x8a, 0x33, 0x77, - 0x7e, 0x58, 0x9c, 0xd9, 0x4f, 0x11, 0xdf, 0x5e, 0xf8, 0x49, 0x00, 0x00, 0x00, 0xff, 0xff, 0x21, - 0x83, 0xac, 0x31, 0xd4, 0x32, 0x00, 0x00, + // 3977 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x70, 0xe3, 0xe6, + 0x75, 0x16, 0x78, 0x91, 0xc8, 0x43, 0x8a, 0x82, 0x20, 0x79, 0x97, 0x2b, 0xdb, 0x5c, 0x2d, 0x6d, + 0xc7, 0xb2, 0xdd, 0x48, 0x99, 0x5d, 0xef, 0x7a, 0x97, 0xdb, 0xd8, 0xa5, 0x24, 0xae, 0x22, 0x57, + 0x17, 0x06, 0x94, 0xe2, 0x4b, 0xa6, 0x83, 0x81, 0xc0, 0x9f, 0x14, 0x56, 0x20, 0x80, 0x00, 0xe0, + 0xae, 0xb5, 0xd3, 0x99, 0x6e, 0xc7, 0xbd, 0x4c, 0xa6, 0xd3, 0x7b, 0x67, 0x9a, 0xb8, 0x8e, 0xdb, + 0xa4, 0xd3, 0x38, 0x4d, 0x6f, 0x49, 0xd3, 0xe6, 0xd6, 0x97, 0xbe, 0xa4, 0xf5, 0x53, 0x27, 0x79, + 0xeb, 0x43, 0x1f, 0xbc, 0x8a, 0x67, 0x9a, 0xb6, 0x6e, 0xe3, 0xb6, 0xfb, 0xe0, 0x19, 0xbf, 0x64, + 0xfe, 0x1b, 0x08, 0x80, 0xd4, 0x02, 0xca, 0x8c, 0xed, 0x27, 0x09, 0xe7, 0x3f, 0xdf, 0x87, 0xf3, + 0x9f, 0xff, 0xfc, 0xe7, 0x9c, 0xff, 0x27, 0xe0, 0xc7, 0x57, 0x60, 0xbe, 0x6b, 0x59, 0x5d, 0x03, + 0x2d, 0xd9, 0x8e, 0xe5, 0x59, 0x7b, 0xfd, 0xce, 0x52, 0x1b, 0xb9, 0x9a, 0xa3, 0xdb, 0x9e, 0xe5, + 0x2c, 0x12, 0x99, 0x34, 0x45, 0x35, 0x16, 0xb9, 0x46, 0x75, 0x13, 0xa6, 0xaf, 0xe9, 0x06, 0x5a, + 0xf5, 0x15, 0x5b, 0xc8, 0x93, 0x2e, 0x43, 0xa6, 0xa3, 0x1b, 0xa8, 0x2c, 0xcc, 0xa7, 0x17, 0x0a, + 0xe7, 0x1f, 0x5e, 0x8c, 0x80, 0x16, 0xc3, 0x88, 0x26, 0x16, 0xcb, 0x04, 0x51, 0x7d, 0x2b, 0x03, + 0x33, 0x23, 0x46, 0x25, 0x09, 0x32, 0xa6, 0xda, 0xc3, 0x8c, 0xc2, 0x42, 0x5e, 0x26, 0xff, 0x4b, + 0x65, 0x98, 0xb0, 0x55, 0xed, 0x40, 0xed, 0xa2, 0x72, 0x8a, 0x88, 0xf9, 0xa3, 0x54, 0x01, 0x68, + 0x23, 0x1b, 0x99, 0x6d, 0x64, 0x6a, 0x87, 0xe5, 0xf4, 0x7c, 0x7a, 0x21, 0x2f, 0x07, 0x24, 0xd2, + 0x13, 0x30, 0x6d, 0xf7, 0xf7, 0x0c, 0x5d, 0x53, 0x02, 0x6a, 0x30, 0x9f, 0x5e, 0xc8, 0xca, 0x22, + 0x1d, 0x58, 0x1d, 0x28, 0x3f, 0x0a, 0x53, 0x37, 0x91, 0x7a, 0x10, 0x54, 0x2d, 0x10, 0xd5, 0x12, + 0x16, 0x07, 0x14, 0x57, 0xa0, 0xd8, 0x43, 0xae, 0xab, 0x76, 0x91, 0xe2, 0x1d, 0xda, 0xa8, 0x9c, + 0x21, 0xb3, 0x9f, 0x1f, 0x9a, 0x7d, 0x74, 0xe6, 0x05, 0x86, 0xda, 0x39, 0xb4, 0x91, 0x54, 0x87, + 0x3c, 0x32, 0xfb, 0x3d, 0xca, 0x90, 0x3d, 0xc6, 0x7f, 0x0d, 0xb3, 0xdf, 0x8b, 0xb2, 0xe4, 0x30, + 0x8c, 0x51, 0x4c, 0xb8, 0xc8, 0xb9, 0xa1, 0x6b, 0xa8, 0x3c, 0x4e, 0x08, 0x1e, 0x1d, 0x22, 0x68, + 0xd1, 0xf1, 0x28, 0x07, 0xc7, 0x49, 0x2b, 0x90, 0x47, 0x2f, 0x79, 0xc8, 0x74, 0x75, 0xcb, 0x2c, + 0x4f, 0x10, 0x92, 0x47, 0x46, 0xac, 0x22, 0x32, 0xda, 0x51, 0x8a, 0x01, 0x4e, 0xba, 0x04, 0x13, + 0x96, 0xed, 0xe9, 0x96, 0xe9, 0x96, 0x73, 0xf3, 0xc2, 0x42, 0xe1, 0xfc, 0x03, 0x23, 0x03, 0x61, + 0x9b, 0xea, 0xc8, 0x5c, 0x59, 0x5a, 0x07, 0xd1, 0xb5, 0xfa, 0x8e, 0x86, 0x14, 0xcd, 0x6a, 0x23, + 0x45, 0x37, 0x3b, 0x56, 0x39, 0x4f, 0x08, 0xce, 0x0e, 0x4f, 0x84, 0x28, 0xae, 0x58, 0x6d, 0xb4, + 0x6e, 0x76, 0x2c, 0xb9, 0xe4, 0x86, 0x9e, 0xa5, 0x53, 0x30, 0xee, 0x1e, 0x9a, 0x9e, 0xfa, 0x52, + 0xb9, 0x48, 0x22, 0x84, 0x3d, 0x55, 0xbf, 0x33, 0x0e, 0x53, 0x49, 0x42, 0xec, 0x2a, 0x64, 0x3b, + 0x78, 0x96, 0xe5, 0xd4, 0x49, 0x7c, 0x40, 0x31, 0x61, 0x27, 0x8e, 0xff, 0x94, 0x4e, 0xac, 0x43, + 0xc1, 0x44, 0xae, 0x87, 0xda, 0x34, 0x22, 0xd2, 0x09, 0x63, 0x0a, 0x28, 0x68, 0x38, 0xa4, 0x32, + 0x3f, 0x55, 0x48, 0x3d, 0x0f, 0x53, 0xbe, 0x49, 0x8a, 0xa3, 0x9a, 0x5d, 0x1e, 0x9b, 0x4b, 0x71, + 0x96, 0x2c, 0x36, 0x38, 0x4e, 0xc6, 0x30, 0xb9, 0x84, 0x42, 0xcf, 0xd2, 0x2a, 0x80, 0x65, 0x22, + 0xab, 0xa3, 0xb4, 0x91, 0x66, 0x94, 0x73, 0xc7, 0x78, 0x69, 0x1b, 0xab, 0x0c, 0x79, 0xc9, 0xa2, + 0x52, 0xcd, 0x90, 0xae, 0x0c, 0x42, 0x6d, 0xe2, 0x98, 0x48, 0xd9, 0xa4, 0x9b, 0x6c, 0x28, 0xda, + 0x76, 0xa1, 0xe4, 0x20, 0x1c, 0xf7, 0xa8, 0xcd, 0x66, 0x96, 0x27, 0x46, 0x2c, 0xc6, 0xce, 0x4c, + 0x66, 0x30, 0x3a, 0xb1, 0x49, 0x27, 0xf8, 0x28, 0x3d, 0x04, 0xbe, 0x40, 0x21, 0x61, 0x05, 0x24, + 0x0b, 0x15, 0xb9, 0x70, 0x4b, 0xed, 0xa1, 0xb9, 0x5b, 0x50, 0x0a, 0xbb, 0x47, 0x9a, 0x85, 0xac, + 0xeb, 0xa9, 0x8e, 0x47, 0xa2, 0x30, 0x2b, 0xd3, 0x07, 0x49, 0x84, 0x34, 0x32, 0xdb, 0x24, 0xcb, + 0x65, 0x65, 0xfc, 0xaf, 0xf4, 0x73, 0x83, 0x09, 0xa7, 0xc9, 0x84, 0x3f, 0x32, 0xbc, 0xa2, 0x21, + 0xe6, 0xe8, 0xbc, 0xe7, 0x9e, 0x82, 0xc9, 0xd0, 0x04, 0x92, 0xbe, 0xba, 0xfa, 0x8b, 0x70, 0xdf, + 0x48, 0x6a, 0xe9, 0x79, 0x98, 0xed, 0x9b, 0xba, 0xe9, 0x21, 0xc7, 0x76, 0x10, 0x8e, 0x58, 0xfa, + 0xaa, 0xf2, 0xbf, 0x4f, 0x1c, 0x13, 0x73, 0xbb, 0x41, 0x6d, 0xca, 0x22, 0xcf, 0xf4, 0x87, 0x85, + 0x8f, 0xe7, 0x73, 0x3f, 0x9a, 0x10, 0x6f, 0xdf, 0xbe, 0x7d, 0x3b, 0x55, 0xfd, 0xdc, 0x38, 0xcc, + 0x8e, 0xda, 0x33, 0x23, 0xb7, 0xef, 0x29, 0x18, 0x37, 0xfb, 0xbd, 0x3d, 0xe4, 0x10, 0x27, 0x65, + 0x65, 0xf6, 0x24, 0xd5, 0x21, 0x6b, 0xa8, 0x7b, 0xc8, 0x28, 0x67, 0xe6, 0x85, 0x85, 0xd2, 0xf9, + 0x27, 0x12, 0xed, 0xca, 0xc5, 0x0d, 0x0c, 0x91, 0x29, 0x52, 0x7a, 0x1a, 0x32, 0x2c, 0x45, 0x63, + 0x86, 0xc7, 0x93, 0x31, 0xe0, 0xbd, 0x24, 0x13, 0x9c, 0x74, 0x3f, 0xe4, 0xf1, 0x5f, 0x1a, 0x1b, + 0xe3, 0xc4, 0xe6, 0x1c, 0x16, 0xe0, 0xb8, 0x90, 0xe6, 0x20, 0x47, 0xb6, 0x49, 0x1b, 0xf1, 0xd2, + 0xe6, 0x3f, 0xe3, 0xc0, 0x6a, 0xa3, 0x8e, 0xda, 0x37, 0x3c, 0xe5, 0x86, 0x6a, 0xf4, 0x11, 0x09, + 0xf8, 0xbc, 0x5c, 0x64, 0xc2, 0x4f, 0x61, 0x99, 0x74, 0x16, 0x0a, 0x74, 0x57, 0xe9, 0x66, 0x1b, + 0xbd, 0x44, 0xb2, 0x67, 0x56, 0xa6, 0x1b, 0x6d, 0x1d, 0x4b, 0xf0, 0xeb, 0xaf, 0xbb, 0x96, 0xc9, + 0x43, 0x93, 0xbc, 0x02, 0x0b, 0xc8, 0xeb, 0x9f, 0x8a, 0x26, 0xee, 0x07, 0x47, 0x4f, 0x2f, 0x1a, + 0x53, 0xd5, 0x6f, 0xa6, 0x20, 0x43, 0xf2, 0xc5, 0x14, 0x14, 0x76, 0x5e, 0x68, 0x36, 0x94, 0xd5, + 0xed, 0xdd, 0xe5, 0x8d, 0x86, 0x28, 0x48, 0x25, 0x00, 0x22, 0xb8, 0xb6, 0xb1, 0x5d, 0xdf, 0x11, + 0x53, 0xfe, 0xf3, 0xfa, 0xd6, 0xce, 0xa5, 0x27, 0xc5, 0xb4, 0x0f, 0xd8, 0xa5, 0x82, 0x4c, 0x50, + 0xe1, 0xc2, 0x79, 0x31, 0x2b, 0x89, 0x50, 0xa4, 0x04, 0xeb, 0xcf, 0x37, 0x56, 0x2f, 0x3d, 0x29, + 0x8e, 0x87, 0x25, 0x17, 0xce, 0x8b, 0x13, 0xd2, 0x24, 0xe4, 0x89, 0x64, 0x79, 0x7b, 0x7b, 0x43, + 0xcc, 0xf9, 0x9c, 0xad, 0x1d, 0x79, 0x7d, 0x6b, 0x4d, 0xcc, 0xfb, 0x9c, 0x6b, 0xf2, 0xf6, 0x6e, + 0x53, 0x04, 0x9f, 0x61, 0xb3, 0xd1, 0x6a, 0xd5, 0xd7, 0x1a, 0x62, 0xc1, 0xd7, 0x58, 0x7e, 0x61, + 0xa7, 0xd1, 0x12, 0x8b, 0x21, 0xb3, 0x2e, 0x9c, 0x17, 0x27, 0xfd, 0x57, 0x34, 0xb6, 0x76, 0x37, + 0xc5, 0x92, 0x34, 0x0d, 0x93, 0xf4, 0x15, 0xdc, 0x88, 0xa9, 0x88, 0xe8, 0xd2, 0x93, 0xa2, 0x38, + 0x30, 0x84, 0xb2, 0x4c, 0x87, 0x04, 0x97, 0x9e, 0x14, 0xa5, 0xea, 0x0a, 0x64, 0x49, 0x74, 0x49, + 0x12, 0x94, 0x36, 0xea, 0xcb, 0x8d, 0x0d, 0x65, 0xbb, 0xb9, 0xb3, 0xbe, 0xbd, 0x55, 0xdf, 0x10, + 0x85, 0x81, 0x4c, 0x6e, 0x7c, 0x72, 0x77, 0x5d, 0x6e, 0xac, 0x8a, 0xa9, 0xa0, 0xac, 0xd9, 0xa8, + 0xef, 0x34, 0x56, 0xc5, 0x74, 0x55, 0x83, 0xd9, 0x51, 0x79, 0x72, 0xe4, 0xce, 0x08, 0x2c, 0x71, + 0xea, 0x98, 0x25, 0x26, 0x5c, 0x43, 0x4b, 0xfc, 0xc3, 0x14, 0xcc, 0x8c, 0xa8, 0x15, 0x23, 0x5f, + 0xf2, 0x0c, 0x64, 0x69, 0x88, 0xd2, 0xea, 0xf9, 0xd8, 0xc8, 0xa2, 0x43, 0x02, 0x76, 0xa8, 0x82, + 0x12, 0x5c, 0xb0, 0x83, 0x48, 0x1f, 0xd3, 0x41, 0x60, 0x8a, 0xa1, 0x9c, 0xfe, 0x0b, 0x43, 0x39, + 0x9d, 0x96, 0xbd, 0x4b, 0x49, 0xca, 0x1e, 0x91, 0x9d, 0x2c, 0xb7, 0x67, 0x47, 0xe4, 0xf6, 0xab, + 0x30, 0x3d, 0x44, 0x94, 0x38, 0xc7, 0xbe, 0x2c, 0x40, 0xf9, 0x38, 0xe7, 0xc4, 0x64, 0xba, 0x54, + 0x28, 0xd3, 0x5d, 0x8d, 0x7a, 0xf0, 0xdc, 0xf1, 0x8b, 0x30, 0xb4, 0xd6, 0xaf, 0x0b, 0x70, 0x6a, + 0x74, 0xa7, 0x38, 0xd2, 0x86, 0xa7, 0x61, 0xbc, 0x87, 0xbc, 0x7d, 0x8b, 0x77, 0x4b, 0x1f, 0x19, + 0x51, 0x83, 0xf1, 0x70, 0x74, 0xb1, 0x19, 0x2a, 0x58, 0xc4, 0xd3, 0xc7, 0xb5, 0x7b, 0xd4, 0x9a, + 0x21, 0x4b, 0x3f, 0x9b, 0x82, 0xfb, 0x46, 0x92, 0x8f, 0x34, 0xf4, 0x41, 0x00, 0xdd, 0xb4, 0xfb, + 0x1e, 0xed, 0x88, 0x68, 0x82, 0xcd, 0x13, 0x09, 0x49, 0x5e, 0x38, 0x79, 0xf6, 0x3d, 0x7f, 0x3c, + 0x4d, 0xc6, 0x81, 0x8a, 0x88, 0xc2, 0xe5, 0x81, 0xa1, 0x19, 0x62, 0x68, 0xe5, 0x98, 0x99, 0x0e, + 0x05, 0xe6, 0xc7, 0x40, 0xd4, 0x0c, 0x1d, 0x99, 0x9e, 0xe2, 0x7a, 0x0e, 0x52, 0x7b, 0xba, 0xd9, + 0x25, 0x15, 0x24, 0x57, 0xcb, 0x76, 0x54, 0xc3, 0x45, 0xf2, 0x14, 0x1d, 0x6e, 0xf1, 0x51, 0x8c, + 0x20, 0x01, 0xe4, 0x04, 0x10, 0xe3, 0x21, 0x04, 0x1d, 0xf6, 0x11, 0xd5, 0x6f, 0xe4, 0xa0, 0x10, + 0xe8, 0xab, 0xa5, 0x73, 0x50, 0xbc, 0xae, 0xde, 0x50, 0x15, 0x7e, 0x56, 0xa2, 0x9e, 0x28, 0x60, + 0x59, 0x93, 0x9d, 0x97, 0x3e, 0x06, 0xb3, 0x44, 0xc5, 0xea, 0x7b, 0xc8, 0x51, 0x34, 0x43, 0x75, + 0x5d, 0xe2, 0xb4, 0x1c, 0x51, 0x95, 0xf0, 0xd8, 0x36, 0x1e, 0x5a, 0xe1, 0x23, 0xd2, 0x45, 0x98, + 0x21, 0x88, 0x5e, 0xdf, 0xf0, 0x74, 0xdb, 0x40, 0x0a, 0x3e, 0xbd, 0xb9, 0xa4, 0x92, 0xf8, 0x96, + 0x4d, 0x63, 0x8d, 0x4d, 0xa6, 0x80, 0x2d, 0x72, 0xa5, 0x55, 0x78, 0x90, 0xc0, 0xba, 0xc8, 0x44, + 0x8e, 0xea, 0x21, 0x05, 0x7d, 0xa6, 0xaf, 0x1a, 0xae, 0xa2, 0x9a, 0x6d, 0x65, 0x5f, 0x75, 0xf7, + 0xcb, 0xb3, 0x98, 0x60, 0x39, 0x55, 0x16, 0xe4, 0x33, 0x58, 0x71, 0x8d, 0xe9, 0x35, 0x88, 0x5a, + 0xdd, 0x6c, 0x7f, 0x42, 0x75, 0xf7, 0xa5, 0x1a, 0x9c, 0x22, 0x2c, 0xae, 0xe7, 0xe8, 0x66, 0x57, + 0xd1, 0xf6, 0x91, 0x76, 0xa0, 0xf4, 0xbd, 0xce, 0xe5, 0xf2, 0xfd, 0xc1, 0xf7, 0x13, 0x0b, 0x5b, + 0x44, 0x67, 0x05, 0xab, 0xec, 0x7a, 0x9d, 0xcb, 0x52, 0x0b, 0x8a, 0x78, 0x31, 0x7a, 0xfa, 0x2d, + 0xa4, 0x74, 0x2c, 0x87, 0x94, 0xc6, 0xd2, 0x88, 0xd4, 0x14, 0xf0, 0xe0, 0xe2, 0x36, 0x03, 0x6c, + 0x5a, 0x6d, 0x54, 0xcb, 0xb6, 0x9a, 0x8d, 0xc6, 0xaa, 0x5c, 0xe0, 0x2c, 0xd7, 0x2c, 0x07, 0x07, + 0x54, 0xd7, 0xf2, 0x1d, 0x5c, 0xa0, 0x01, 0xd5, 0xb5, 0xb8, 0x7b, 0x2f, 0xc2, 0x8c, 0xa6, 0xd1, + 0x39, 0xeb, 0x9a, 0xc2, 0xce, 0x58, 0x6e, 0x59, 0x0c, 0x39, 0x4b, 0xd3, 0xd6, 0xa8, 0x02, 0x8b, + 0x71, 0x57, 0xba, 0x02, 0xf7, 0x0d, 0x9c, 0x15, 0x04, 0x4e, 0x0f, 0xcd, 0x32, 0x0a, 0xbd, 0x08, + 0x33, 0xf6, 0xe1, 0x30, 0x50, 0x0a, 0xbd, 0xd1, 0x3e, 0x8c, 0xc2, 0x9e, 0x82, 0x59, 0x7b, 0xdf, + 0x1e, 0xc6, 0x3d, 0x1e, 0xc4, 0x49, 0xf6, 0xbe, 0x1d, 0x05, 0x3e, 0x42, 0x0e, 0xdc, 0x0e, 0xd2, + 0x54, 0x0f, 0xb5, 0xcb, 0xa7, 0x83, 0xea, 0x81, 0x01, 0x69, 0x09, 0x44, 0x4d, 0x53, 0x90, 0xa9, + 0xee, 0x19, 0x48, 0x51, 0x1d, 0x64, 0xaa, 0x6e, 0xf9, 0x6c, 0x50, 0xb9, 0xa4, 0x69, 0x0d, 0x32, + 0x5a, 0x27, 0x83, 0xd2, 0xe3, 0x30, 0x6d, 0xed, 0x5d, 0xd7, 0x68, 0x48, 0x2a, 0xb6, 0x83, 0x3a, + 0xfa, 0x4b, 0xe5, 0x87, 0x89, 0x7f, 0xa7, 0xf0, 0x00, 0x09, 0xc8, 0x26, 0x11, 0x4b, 0x8f, 0x81, + 0xa8, 0xb9, 0xfb, 0xaa, 0x63, 0x93, 0x9c, 0xec, 0xda, 0xaa, 0x86, 0xca, 0x8f, 0x50, 0x55, 0x2a, + 0xdf, 0xe2, 0x62, 0xbc, 0x25, 0xdc, 0x9b, 0x7a, 0xc7, 0xe3, 0x8c, 0x8f, 0xd2, 0x2d, 0x41, 0x64, + 0x8c, 0x6d, 0x01, 0x44, 0xec, 0x8a, 0xd0, 0x8b, 0x17, 0x88, 0x5a, 0xc9, 0xde, 0xb7, 0x83, 0xef, + 0x7d, 0x08, 0x26, 0xb1, 0xe6, 0xe0, 0xa5, 0x8f, 0xd1, 0x86, 0xcc, 0xde, 0x0f, 0xbc, 0xf1, 0x7d, + 0xeb, 0x8d, 0xab, 0x35, 0x28, 0x06, 0xe3, 0x53, 0xca, 0x03, 0x8d, 0x50, 0x51, 0xc0, 0xcd, 0xca, + 0xca, 0xf6, 0x2a, 0x6e, 0x33, 0x5e, 0x6c, 0x88, 0x29, 0xdc, 0xee, 0x6c, 0xac, 0xef, 0x34, 0x14, + 0x79, 0x77, 0x6b, 0x67, 0x7d, 0xb3, 0x21, 0xa6, 0x83, 0x7d, 0xf5, 0xf7, 0x52, 0x50, 0x0a, 0x1f, + 0x91, 0xa4, 0x9f, 0x85, 0xd3, 0xfc, 0x3e, 0xc3, 0x45, 0x9e, 0x72, 0x53, 0x77, 0xc8, 0x96, 0xe9, + 0xa9, 0xb4, 0x7c, 0xf9, 0x8b, 0x36, 0xcb, 0xb4, 0x5a, 0xc8, 0x7b, 0x4e, 0x77, 0xf0, 0x86, 0xe8, + 0xa9, 0x9e, 0xb4, 0x01, 0x67, 0x4d, 0x4b, 0x71, 0x3d, 0xd5, 0x6c, 0xab, 0x4e, 0x5b, 0x19, 0xdc, + 0x24, 0x29, 0xaa, 0xa6, 0x21, 0xd7, 0xb5, 0x68, 0xa9, 0xf2, 0x59, 0x1e, 0x30, 0xad, 0x16, 0x53, + 0x1e, 0xe4, 0xf0, 0x3a, 0x53, 0x8d, 0x04, 0x58, 0xfa, 0xb8, 0x00, 0xbb, 0x1f, 0xf2, 0x3d, 0xd5, + 0x56, 0x90, 0xe9, 0x39, 0x87, 0xa4, 0x31, 0xce, 0xc9, 0xb9, 0x9e, 0x6a, 0x37, 0xf0, 0xf3, 0x07, + 0x73, 0x3e, 0xf9, 0xb7, 0x34, 0x14, 0x83, 0xcd, 0x31, 0x3e, 0x6b, 0x68, 0xa4, 0x8e, 0x08, 0x24, + 0xd3, 0x3c, 0x74, 0xcf, 0x56, 0x7a, 0x71, 0x05, 0x17, 0x98, 0xda, 0x38, 0x6d, 0x59, 0x65, 0x8a, + 0xc4, 0xc5, 0x1d, 0xe7, 0x16, 0x44, 0x5b, 0x84, 0x9c, 0xcc, 0x9e, 0xa4, 0x35, 0x18, 0xbf, 0xee, + 0x12, 0xee, 0x71, 0xc2, 0xfd, 0xf0, 0xbd, 0xb9, 0x9f, 0x6d, 0x11, 0xf2, 0xfc, 0xb3, 0x2d, 0x65, + 0x6b, 0x5b, 0xde, 0xac, 0x6f, 0xc8, 0x0c, 0x2e, 0x9d, 0x81, 0x8c, 0xa1, 0xde, 0x3a, 0x0c, 0x97, + 0x22, 0x22, 0x4a, 0xea, 0xf8, 0x33, 0x90, 0xb9, 0x89, 0xd4, 0x83, 0x70, 0x01, 0x20, 0xa2, 0xf7, + 0x31, 0xf4, 0x97, 0x20, 0x4b, 0xfc, 0x25, 0x01, 0x30, 0x8f, 0x89, 0x63, 0x52, 0x0e, 0x32, 0x2b, + 0xdb, 0x32, 0x0e, 0x7f, 0x11, 0x8a, 0x54, 0xaa, 0x34, 0xd7, 0x1b, 0x2b, 0x0d, 0x31, 0x55, 0xbd, + 0x08, 0xe3, 0xd4, 0x09, 0x78, 0x6b, 0xf8, 0x6e, 0x10, 0xc7, 0xd8, 0x23, 0xe3, 0x10, 0xf8, 0xe8, + 0xee, 0xe6, 0x72, 0x43, 0x16, 0x53, 0xc1, 0xe5, 0x75, 0xa1, 0x18, 0xec, 0x8b, 0x3f, 0x98, 0x98, + 0xfa, 0xae, 0x00, 0x85, 0x40, 0x9f, 0x8b, 0x1b, 0x14, 0xd5, 0x30, 0xac, 0x9b, 0x8a, 0x6a, 0xe8, + 0xaa, 0xcb, 0x82, 0x02, 0x88, 0xa8, 0x8e, 0x25, 0x49, 0x17, 0xed, 0x03, 0x31, 0xfe, 0x35, 0x01, + 0xc4, 0x68, 0x8b, 0x19, 0x31, 0x50, 0xf8, 0x50, 0x0d, 0x7c, 0x55, 0x80, 0x52, 0xb8, 0xaf, 0x8c, + 0x98, 0x77, 0xee, 0x43, 0x35, 0xef, 0xcd, 0x14, 0x4c, 0x86, 0xba, 0xc9, 0xa4, 0xd6, 0x7d, 0x06, + 0xa6, 0xf5, 0x36, 0xea, 0xd9, 0x96, 0x87, 0x4c, 0xed, 0x50, 0x31, 0xd0, 0x0d, 0x64, 0x94, 0xab, + 0x24, 0x51, 0x2c, 0xdd, 0xbb, 0x5f, 0x5d, 0x5c, 0x1f, 0xe0, 0x36, 0x30, 0xac, 0x36, 0xb3, 0xbe, + 0xda, 0xd8, 0x6c, 0x6e, 0xef, 0x34, 0xb6, 0x56, 0x5e, 0x50, 0x76, 0xb7, 0x7e, 0x7e, 0x6b, 0xfb, + 0xb9, 0x2d, 0x59, 0xd4, 0x23, 0x6a, 0xef, 0xe3, 0x56, 0x6f, 0x82, 0x18, 0x35, 0x4a, 0x3a, 0x0d, + 0xa3, 0xcc, 0x12, 0xc7, 0xa4, 0x19, 0x98, 0xda, 0xda, 0x56, 0x5a, 0xeb, 0xab, 0x0d, 0xa5, 0x71, + 0xed, 0x5a, 0x63, 0x65, 0xa7, 0x45, 0x6f, 0x20, 0x7c, 0xed, 0x9d, 0xf0, 0xa6, 0x7e, 0x25, 0x0d, + 0x33, 0x23, 0x2c, 0x91, 0xea, 0xec, 0xec, 0x40, 0x8f, 0x33, 0x1f, 0x4d, 0x62, 0xfd, 0x22, 0x2e, + 0xf9, 0x4d, 0xd5, 0xf1, 0xd8, 0x51, 0xe3, 0x31, 0xc0, 0x5e, 0x32, 0x3d, 0xbd, 0xa3, 0x23, 0x87, + 0x5d, 0xd8, 0xd0, 0x03, 0xc5, 0xd4, 0x40, 0x4e, 0xef, 0x6c, 0x7e, 0x06, 0x24, 0xdb, 0x72, 0x75, + 0x4f, 0xbf, 0x81, 0x14, 0xdd, 0xe4, 0xb7, 0x3b, 0xf8, 0x80, 0x91, 0x91, 0x45, 0x3e, 0xb2, 0x6e, + 0x7a, 0xbe, 0xb6, 0x89, 0xba, 0x6a, 0x44, 0x1b, 0x27, 0xf0, 0xb4, 0x2c, 0xf2, 0x11, 0x5f, 0xfb, + 0x1c, 0x14, 0xdb, 0x56, 0x1f, 0x77, 0x5d, 0x54, 0x0f, 0xd7, 0x0b, 0x41, 0x2e, 0x50, 0x99, 0xaf, + 0xc2, 0xfa, 0xe9, 0xc1, 0xb5, 0x52, 0x51, 0x2e, 0x50, 0x19, 0x55, 0x79, 0x14, 0xa6, 0xd4, 0x6e, + 0xd7, 0xc1, 0xe4, 0x9c, 0x88, 0x9e, 0x10, 0x4a, 0xbe, 0x98, 0x28, 0xce, 0x3d, 0x0b, 0x39, 0xee, + 0x07, 0x5c, 0x92, 0xb1, 0x27, 0x14, 0x9b, 0x1e, 0x7b, 0x53, 0x0b, 0x79, 0x39, 0x67, 0xf2, 0xc1, + 0x73, 0x50, 0xd4, 0x5d, 0x65, 0x70, 0x4b, 0x9e, 0x9a, 0x4f, 0x2d, 0xe4, 0xe4, 0x82, 0xee, 0xfa, + 0x37, 0x8c, 0xd5, 0xd7, 0x53, 0x50, 0x0a, 0xdf, 0xf2, 0x4b, 0xab, 0x90, 0x33, 0x2c, 0x4d, 0x25, + 0xa1, 0x45, 0x7f, 0x62, 0x5a, 0x88, 0xf9, 0x61, 0x60, 0x71, 0x83, 0xe9, 0xcb, 0x3e, 0x72, 0xee, + 0x5f, 0x04, 0xc8, 0x71, 0xb1, 0x74, 0x0a, 0x32, 0xb6, 0xea, 0xed, 0x13, 0xba, 0xec, 0x72, 0x4a, + 0x14, 0x64, 0xf2, 0x8c, 0xe5, 0xae, 0xad, 0x9a, 0x24, 0x04, 0x98, 0x1c, 0x3f, 0xe3, 0x75, 0x35, + 0x90, 0xda, 0x26, 0xc7, 0x0f, 0xab, 0xd7, 0x43, 0xa6, 0xe7, 0xf2, 0x75, 0x65, 0xf2, 0x15, 0x26, + 0x96, 0x9e, 0x80, 0x69, 0xcf, 0x51, 0x75, 0x23, 0xa4, 0x9b, 0x21, 0xba, 0x22, 0x1f, 0xf0, 0x95, + 0x6b, 0x70, 0x86, 0xf3, 0xb6, 0x91, 0xa7, 0x6a, 0xfb, 0xa8, 0x3d, 0x00, 0x8d, 0x93, 0x6b, 0x86, + 0xd3, 0x4c, 0x61, 0x95, 0x8d, 0x73, 0x6c, 0xf5, 0x07, 0x02, 0x4c, 0xf3, 0x03, 0x53, 0xdb, 0x77, + 0xd6, 0x26, 0x80, 0x6a, 0x9a, 0x96, 0x17, 0x74, 0xd7, 0x70, 0x28, 0x0f, 0xe1, 0x16, 0xeb, 0x3e, + 0x48, 0x0e, 0x10, 0xcc, 0xf5, 0x00, 0x06, 0x23, 0xc7, 0xba, 0xed, 0x2c, 0x14, 0xd8, 0x4f, 0x38, + 0xe4, 0x77, 0x40, 0x7a, 0xc4, 0x06, 0x2a, 0xc2, 0x27, 0x2b, 0x69, 0x16, 0xb2, 0x7b, 0xa8, 0xab, + 0x9b, 0xec, 0x62, 0x96, 0x3e, 0xf0, 0x8b, 0x90, 0x8c, 0x7f, 0x11, 0xb2, 0xfc, 0x69, 0x98, 0xd1, + 0xac, 0x5e, 0xd4, 0xdc, 0x65, 0x31, 0x72, 0xcc, 0x77, 0x3f, 0x21, 0xbc, 0x08, 0x83, 0x16, 0xf3, + 0x5d, 0x41, 0xf8, 0x52, 0x2a, 0xbd, 0xd6, 0x5c, 0xfe, 0x6a, 0x6a, 0x6e, 0x8d, 0x42, 0x9b, 0x7c, + 0xa6, 0x32, 0xea, 0x18, 0x48, 0xc3, 0xd6, 0xc3, 0x97, 0x9f, 0x80, 0x8f, 0x76, 0x75, 0x6f, 0xbf, + 0xbf, 0xb7, 0xa8, 0x59, 0xbd, 0xa5, 0xae, 0xd5, 0xb5, 0x06, 0x3f, 0x7d, 0xe2, 0x27, 0xf2, 0x40, + 0xfe, 0x63, 0x3f, 0x7f, 0xe6, 0x7d, 0xe9, 0x5c, 0xec, 0x6f, 0xa5, 0xb5, 0x2d, 0x98, 0x61, 0xca, + 0x0a, 0xf9, 0xfd, 0x85, 0x9e, 0x22, 0xa4, 0x7b, 0xde, 0x61, 0x95, 0xbf, 0xfe, 0x16, 0x29, 0xd7, + 0xf2, 0x34, 0x83, 0xe2, 0x31, 0x7a, 0xd0, 0xa8, 0xc9, 0x70, 0x5f, 0x88, 0x8f, 0x6e, 0x4d, 0xe4, + 0xc4, 0x30, 0x7e, 0x8f, 0x31, 0xce, 0x04, 0x18, 0x5b, 0x0c, 0x5a, 0x5b, 0x81, 0xc9, 0x93, 0x70, + 0xfd, 0x13, 0xe3, 0x2a, 0xa2, 0x20, 0xc9, 0x1a, 0x4c, 0x11, 0x12, 0xad, 0xef, 0x7a, 0x56, 0x8f, + 0xe4, 0xbd, 0x7b, 0xd3, 0xfc, 0xf3, 0x5b, 0x74, 0xaf, 0x94, 0x30, 0x6c, 0xc5, 0x47, 0xd5, 0x6a, + 0x40, 0x7e, 0x72, 0x6a, 0x23, 0xcd, 0x88, 0x61, 0x78, 0x83, 0x19, 0xe2, 0xeb, 0xd7, 0x3e, 0x05, + 0xb3, 0xf8, 0x7f, 0x92, 0x96, 0x82, 0x96, 0xc4, 0x5f, 0x78, 0x95, 0x7f, 0xf0, 0x32, 0xdd, 0x8e, + 0x33, 0x3e, 0x41, 0xc0, 0xa6, 0xc0, 0x2a, 0x76, 0x91, 0xe7, 0x21, 0xc7, 0x55, 0x54, 0x63, 0x94, + 0x79, 0x81, 0x1b, 0x83, 0xf2, 0xe7, 0xdf, 0x0e, 0xaf, 0xe2, 0x1a, 0x45, 0xd6, 0x0d, 0xa3, 0xb6, + 0x0b, 0xa7, 0x47, 0x44, 0x45, 0x02, 0xce, 0x57, 0x18, 0xe7, 0xec, 0x50, 0x64, 0x60, 0xda, 0x26, + 0x70, 0xb9, 0xbf, 0x96, 0x09, 0x38, 0xff, 0x88, 0x71, 0x4a, 0x0c, 0xcb, 0x97, 0x14, 0x33, 0x3e, + 0x0b, 0xd3, 0x37, 0x90, 0xb3, 0x67, 0xb9, 0xec, 0x96, 0x26, 0x01, 0xdd, 0xab, 0x8c, 0x6e, 0x8a, + 0x01, 0xc9, 0xb5, 0x0d, 0xe6, 0xba, 0x02, 0xb9, 0x8e, 0xaa, 0xa1, 0x04, 0x14, 0x5f, 0x60, 0x14, + 0x13, 0x58, 0x1f, 0x43, 0xeb, 0x50, 0xec, 0x5a, 0xac, 0x32, 0xc5, 0xc3, 0x5f, 0x63, 0xf0, 0x02, + 0xc7, 0x30, 0x0a, 0xdb, 0xb2, 0xfb, 0x06, 0x2e, 0x5b, 0xf1, 0x14, 0x7f, 0xcc, 0x29, 0x38, 0x86, + 0x51, 0x9c, 0xc0, 0xad, 0x7f, 0xc2, 0x29, 0xdc, 0x80, 0x3f, 0x9f, 0x81, 0x82, 0x65, 0x1a, 0x87, + 0x96, 0x99, 0xc4, 0x88, 0x2f, 0x32, 0x06, 0x60, 0x10, 0x4c, 0x70, 0x15, 0xf2, 0x49, 0x17, 0xe2, + 0xcf, 0xde, 0xe6, 0xdb, 0x83, 0xaf, 0xc0, 0x1a, 0x4c, 0xf1, 0x04, 0xa5, 0x5b, 0x66, 0x02, 0x8a, + 0x2f, 0x33, 0x8a, 0x52, 0x00, 0xc6, 0xa6, 0xe1, 0x21, 0xd7, 0xeb, 0xa2, 0x24, 0x24, 0xaf, 0xf3, + 0x69, 0x30, 0x08, 0x73, 0xe5, 0x1e, 0x32, 0xb5, 0xfd, 0x64, 0x0c, 0x5f, 0xe1, 0xae, 0xe4, 0x18, + 0x4c, 0xb1, 0x02, 0x93, 0x3d, 0xd5, 0x71, 0xf7, 0x55, 0x23, 0xd1, 0x72, 0xfc, 0x39, 0xe3, 0x28, + 0xfa, 0x20, 0xe6, 0x91, 0xbe, 0x79, 0x12, 0x9a, 0xaf, 0x72, 0x8f, 0x04, 0x60, 0x6c, 0xeb, 0xb9, + 0x1e, 0xb9, 0xd2, 0x3a, 0x09, 0xdb, 0x5f, 0xf0, 0xad, 0x47, 0xb1, 0x9b, 0x41, 0xc6, 0xab, 0x90, + 0x77, 0xf5, 0x5b, 0x89, 0x68, 0xfe, 0x92, 0xaf, 0x34, 0x01, 0x60, 0xf0, 0x0b, 0x70, 0x66, 0x64, + 0x99, 0x48, 0x40, 0xf6, 0x57, 0x8c, 0xec, 0xd4, 0x88, 0x52, 0xc1, 0x52, 0xc2, 0x49, 0x29, 0xff, + 0x9a, 0xa7, 0x04, 0x14, 0xe1, 0x6a, 0xe2, 0xb3, 0x82, 0xab, 0x76, 0x4e, 0xe6, 0xb5, 0xbf, 0xe1, + 0x5e, 0xa3, 0xd8, 0x90, 0xd7, 0x76, 0xe0, 0x14, 0x63, 0x3c, 0xd9, 0xba, 0x7e, 0x8d, 0x27, 0x56, + 0x8a, 0xde, 0x0d, 0xaf, 0xee, 0xa7, 0x61, 0xce, 0x77, 0x27, 0x6f, 0x4a, 0x5d, 0xa5, 0xa7, 0xda, + 0x09, 0x98, 0xbf, 0xce, 0x98, 0x79, 0xc6, 0xf7, 0xbb, 0x5a, 0x77, 0x53, 0xb5, 0x31, 0xf9, 0xf3, + 0x50, 0xe6, 0xe4, 0x7d, 0xd3, 0x41, 0x9a, 0xd5, 0x35, 0xf5, 0x5b, 0xa8, 0x9d, 0x80, 0xfa, 0x6f, + 0x23, 0x4b, 0xb5, 0x1b, 0x80, 0x63, 0xe6, 0x75, 0x10, 0xfd, 0x5e, 0x45, 0xd1, 0x7b, 0xb6, 0xe5, + 0x78, 0x31, 0x8c, 0xdf, 0xe0, 0x2b, 0xe5, 0xe3, 0xd6, 0x09, 0xac, 0xd6, 0x80, 0x12, 0x79, 0x4c, + 0x1a, 0x92, 0x7f, 0xc7, 0x88, 0x26, 0x07, 0x28, 0x96, 0x38, 0x34, 0xab, 0x67, 0xab, 0x4e, 0x92, + 0xfc, 0xf7, 0xf7, 0x3c, 0x71, 0x30, 0x08, 0x4b, 0x1c, 0xde, 0xa1, 0x8d, 0x70, 0xb5, 0x4f, 0xc0, + 0xf0, 0x4d, 0x9e, 0x38, 0x38, 0x86, 0x51, 0xf0, 0x86, 0x21, 0x01, 0xc5, 0xb7, 0x38, 0x05, 0xc7, + 0x60, 0x8a, 0x4f, 0x0e, 0x0a, 0xad, 0x83, 0xba, 0xba, 0xeb, 0x39, 0xb4, 0x15, 0xbe, 0x37, 0xd5, + 0xb7, 0xdf, 0x0e, 0x37, 0x61, 0x72, 0x00, 0x8a, 0x33, 0x11, 0xbb, 0x42, 0x25, 0x27, 0xa5, 0x78, + 0xc3, 0xbe, 0xc3, 0x33, 0x51, 0x00, 0x86, 0x6d, 0x0b, 0x74, 0x88, 0xd8, 0xed, 0x1a, 0x3e, 0x1f, + 0x24, 0xa0, 0xfb, 0x6e, 0xc4, 0xb8, 0x16, 0xc7, 0x62, 0xce, 0x40, 0xff, 0xd3, 0x37, 0x0f, 0xd0, + 0x61, 0xa2, 0xe8, 0xfc, 0x87, 0x48, 0xff, 0xb3, 0x4b, 0x91, 0x34, 0x87, 0x4c, 0x45, 0xfa, 0x29, + 0x29, 0xee, 0x63, 0x9d, 0xf2, 0x2f, 0xdf, 0x65, 0xf3, 0x0d, 0xb7, 0x53, 0xb5, 0x0d, 0x1c, 0xe4, + 0xe1, 0xa6, 0x27, 0x9e, 0xec, 0xe5, 0xbb, 0x7e, 0x9c, 0x87, 0x7a, 0x9e, 0xda, 0x35, 0x98, 0x0c, + 0x35, 0x3c, 0xf1, 0x54, 0xbf, 0xc2, 0xa8, 0x8a, 0xc1, 0x7e, 0xa7, 0x76, 0x11, 0x32, 0xb8, 0x79, + 0x89, 0x87, 0xff, 0x2a, 0x83, 0x13, 0xf5, 0xda, 0xc7, 0x21, 0xc7, 0x9b, 0x96, 0x78, 0xe8, 0xaf, + 0x31, 0xa8, 0x0f, 0xc1, 0x70, 0xde, 0xb0, 0xc4, 0xc3, 0x7f, 0x9d, 0xc3, 0x39, 0x04, 0xc3, 0x93, + 0xbb, 0xf0, 0x1f, 0x7f, 0x23, 0xc3, 0x8a, 0x0e, 0xf7, 0xdd, 0x55, 0x98, 0x60, 0x9d, 0x4a, 0x3c, + 0xfa, 0xb3, 0xec, 0xe5, 0x1c, 0x51, 0x7b, 0x0a, 0xb2, 0x09, 0x1d, 0xfe, 0x9b, 0x0c, 0x4a, 0xf5, + 0x6b, 0x2b, 0x50, 0x08, 0x74, 0x27, 0xf1, 0xf0, 0xdf, 0x62, 0xf0, 0x20, 0x0a, 0x9b, 0xce, 0xba, + 0x93, 0x78, 0x82, 0xdf, 0xe6, 0xa6, 0x33, 0x04, 0x76, 0x1b, 0x6f, 0x4c, 0xe2, 0xd1, 0xbf, 0xc3, + 0xbd, 0xce, 0x21, 0xb5, 0x67, 0x20, 0xef, 0x17, 0x9b, 0x78, 0xfc, 0xef, 0x32, 0xfc, 0x00, 0x83, + 0x3d, 0x10, 0x28, 0x76, 0xf1, 0x14, 0xbf, 0xc7, 0x3d, 0x10, 0x40, 0xe1, 0x6d, 0x14, 0x6d, 0x60, + 0xe2, 0x99, 0x7e, 0x9f, 0x6f, 0xa3, 0x48, 0xff, 0x82, 0x57, 0x93, 0xe4, 0xfc, 0x78, 0x8a, 0x3f, + 0xe0, 0xab, 0x49, 0xf4, 0xb1, 0x19, 0xd1, 0x8e, 0x20, 0x9e, 0xe3, 0x0f, 0xb9, 0x19, 0x91, 0x86, + 0xa0, 0xd6, 0x04, 0x69, 0xb8, 0x1b, 0x88, 0xe7, 0xfb, 0x1c, 0xe3, 0x9b, 0x1e, 0x6a, 0x06, 0x6a, + 0xcf, 0xc1, 0xa9, 0xd1, 0x9d, 0x40, 0x3c, 0xeb, 0xe7, 0xef, 0x46, 0xce, 0x6e, 0xc1, 0x46, 0xa0, + 0xb6, 0x33, 0x28, 0x29, 0xc1, 0x2e, 0x20, 0x9e, 0xf6, 0x95, 0xbb, 0xe1, 0xc4, 0x1d, 0x6c, 0x02, + 0x6a, 0x75, 0x80, 0x41, 0x01, 0x8e, 0xe7, 0x7a, 0x95, 0x71, 0x05, 0x40, 0x78, 0x6b, 0xb0, 0xfa, + 0x1b, 0x8f, 0xff, 0x02, 0xdf, 0x1a, 0x0c, 0x81, 0xb7, 0x06, 0x2f, 0xbd, 0xf1, 0xe8, 0xd7, 0xf8, + 0xd6, 0xe0, 0x10, 0x1c, 0xd9, 0x81, 0xea, 0x16, 0xcf, 0xf0, 0x45, 0x1e, 0xd9, 0x01, 0x54, 0x6d, + 0x0b, 0xa6, 0x87, 0x0a, 0x62, 0x3c, 0xd5, 0x97, 0x18, 0x95, 0x18, 0xad, 0x87, 0xc1, 0xe2, 0xc5, + 0x8a, 0x61, 0x3c, 0xdb, 0x9f, 0x46, 0x8a, 0x17, 0xab, 0x85, 0xb5, 0xab, 0x90, 0x33, 0xfb, 0x86, + 0x81, 0x37, 0x8f, 0x74, 0xef, 0x0f, 0xec, 0xca, 0xff, 0xf1, 0x1e, 0xf3, 0x0e, 0x07, 0xd4, 0x2e, + 0x42, 0x16, 0xf5, 0xf6, 0x50, 0x3b, 0x0e, 0xf9, 0x9f, 0xef, 0xf1, 0x84, 0x89, 0xb5, 0x6b, 0xcf, + 0x00, 0xd0, 0xab, 0x11, 0xf2, 0xb3, 0x5f, 0x0c, 0xf6, 0xbf, 0xde, 0x63, 0x9f, 0xbe, 0x0c, 0x20, + 0x03, 0x02, 0xfa, 0x21, 0xcd, 0xbd, 0x09, 0xde, 0x0e, 0x13, 0x90, 0x15, 0xb9, 0x02, 0x13, 0xd7, + 0x5d, 0xcb, 0xf4, 0xd4, 0x6e, 0x1c, 0xfa, 0xbf, 0x19, 0x9a, 0xeb, 0x63, 0x87, 0xf5, 0x2c, 0x07, + 0x79, 0x6a, 0xd7, 0x8d, 0xc3, 0xfe, 0x0f, 0xc3, 0xfa, 0x00, 0x0c, 0xd6, 0x54, 0xd7, 0x4b, 0x32, + 0xef, 0x1f, 0x73, 0x30, 0x07, 0x60, 0xa3, 0xf1, 0xff, 0x07, 0xe8, 0x30, 0x0e, 0xfb, 0x0e, 0x37, + 0x9a, 0xe9, 0xd7, 0x3e, 0x0e, 0x79, 0xfc, 0x2f, 0xfd, 0x9e, 0x2d, 0x06, 0xfc, 0xbf, 0x0c, 0x3c, + 0x40, 0xe0, 0x37, 0xbb, 0x5e, 0xdb, 0xd3, 0xe3, 0x9d, 0xfd, 0x7f, 0x6c, 0xa5, 0xb9, 0x7e, 0xad, + 0x0e, 0x05, 0xd7, 0x6b, 0xb7, 0xfb, 0xac, 0x3f, 0x8d, 0x81, 0xff, 0xff, 0x7b, 0xfe, 0x95, 0x85, + 0x8f, 0xc1, 0xab, 0x7d, 0xf3, 0xc0, 0xb3, 0x2d, 0xf2, 0x33, 0x47, 0x1c, 0xc3, 0x5d, 0xc6, 0x10, + 0x80, 0x2c, 0x37, 0x46, 0x5f, 0xdf, 0xc2, 0x9a, 0xb5, 0x66, 0xd1, 0x8b, 0xdb, 0x17, 0xab, 0xf1, + 0x37, 0xb0, 0xf0, 0xad, 0x34, 0x3c, 0xa0, 0x59, 0xbd, 0x3d, 0xcb, 0x5d, 0x0a, 0x24, 0xf3, 0xa5, + 0x9e, 0x6a, 0xb3, 0x7b, 0xd9, 0x42, 0x4f, 0xb5, 0xd9, 0x07, 0xb0, 0xee, 0xdc, 0xc9, 0xee, 0x74, + 0xab, 0xbf, 0x04, 0x13, 0x9b, 0xaa, 0xbd, 0x83, 0x5c, 0x4f, 0x22, 0xde, 0x26, 0x5f, 0x5a, 0xb1, + 0x8b, 0xf2, 0xf9, 0xc5, 0x00, 0xf1, 0x22, 0x53, 0x5b, 0x6c, 0x79, 0x4e, 0xcb, 0x73, 0xc8, 0x47, + 0x05, 0xf2, 0xb8, 0x4b, 0x1e, 0xe6, 0xae, 0x40, 0x21, 0x20, 0x96, 0x44, 0x48, 0x1f, 0xa0, 0x43, + 0xf6, 0xad, 0x15, 0xfe, 0x57, 0x9a, 0x1d, 0x7c, 0x0c, 0x89, 0x65, 0xf4, 0xa1, 0x96, 0xba, 0x2c, + 0x54, 0x9f, 0x86, 0x89, 0x6b, 0xea, 0x01, 0xda, 0x54, 0x6d, 0xe9, 0x02, 0x4c, 0x20, 0xd3, 0x73, + 0x74, 0xe4, 0x32, 0x03, 0xce, 0x84, 0x0c, 0x60, 0x6a, 0xf4, 0xcd, 0x5c, 0xb3, 0xba, 0x01, 0xc5, + 0xe0, 0x40, 0xd2, 0x77, 0x63, 0xa9, 0xe5, 0xed, 0xb3, 0x8f, 0xa3, 0xf3, 0x32, 0x7d, 0x58, 0x5e, + 0x7d, 0xe3, 0x4e, 0x65, 0xec, 0xfb, 0x77, 0x2a, 0x63, 0xff, 0x7a, 0xa7, 0x32, 0xf6, 0xe6, 0x9d, + 0x8a, 0xf0, 0xce, 0x9d, 0x8a, 0xf0, 0xee, 0x9d, 0x8a, 0x70, 0xfb, 0xa8, 0x22, 0x7c, 0xe5, 0xa8, + 0x22, 0x7c, 0xed, 0xa8, 0x22, 0x7c, 0xfb, 0xa8, 0x22, 0xbc, 0x71, 0x54, 0x19, 0xfb, 0xfe, 0x51, + 0x45, 0x78, 0xf3, 0xa8, 0x22, 0xfc, 0xe8, 0xa8, 0x32, 0xf6, 0xce, 0x51, 0x45, 0x78, 0xf7, 0xa8, + 0x32, 0x76, 0xfb, 0x87, 0x95, 0xb1, 0xbd, 0x71, 0xe2, 0xdb, 0x0b, 0x3f, 0x09, 0x00, 0x00, 0xff, + 0xff, 0x1b, 0x1e, 0x8e, 0xa7, 0x55, 0x34, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -790,6 +795,9 @@ return dAtA } func (m *MapTest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StrStr) > 0 { @@ -807,6 +815,9 @@ } func (m *FakeMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Entries) > 0 { @@ -822,6 +833,9 @@ } func (m *FakeMapEntry) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Key) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapdefaults/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapdefaults/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -29,7 +29,7 @@ regenerate: go install github.com/gogo/protobuf/protoc-gen-combo go install github.com/gogo/protobuf/protoc-gen-gogofast - protoc-gen-combo --version="3.0.0" --proto_path=../../../../../:../../protobuf/:. --gogo_out=. map.proto + protoc-gen-combo --version="3.0.0" --proto_path=../../protobuf/:../../../../../:. --gogo_out=. map.proto find combos -type d -not -name combos -exec cp map_test.go.in {}/map_test.go \; cp unknown_test.go.in ./combos/unmarshaler/unknown_test.go cp unknown_test.go.in ./combos/both/unknown_test.go diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/both/mapsproto2.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/both/mapsproto2.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/both/mapsproto2.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/both/mapsproto2.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -324,302 +324,307 @@ func Mapsproto2Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4716 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7b, 0x6b, 0x6c, 0x23, 0xd7, - 0x75, 0xff, 0x0e, 0x1f, 0x12, 0x79, 0x48, 0x51, 0xa3, 0x2b, 0x79, 0x4d, 0xcb, 0xb6, 0x76, 0x57, - 0x7e, 0xc9, 0x6b, 0x5b, 0xb2, 0xe5, 0xdd, 0xf5, 0x9a, 0x1b, 0xdb, 0x7f, 0x4a, 0xe2, 0x6a, 0x65, - 0xeb, 0x95, 0xa1, 0xe4, 0x57, 0x60, 0xcc, 0x7f, 0x34, 0xbc, 0xa4, 0xc6, 0x4b, 0xce, 0xd0, 0x33, - 0xc3, 0xb5, 0x65, 0x14, 0xc5, 0x16, 0xee, 0x03, 0x41, 0xd1, 0x77, 0x81, 0x3a, 0xae, 0xe3, 0xd6, - 0x05, 0x52, 0xa7, 0xe9, 0x2b, 0x69, 0xda, 0x34, 0xe9, 0xa7, 0x7c, 0x49, 0x6b, 0xa0, 0x40, 0x91, - 0x7c, 0x0b, 0x82, 0xc0, 0xf0, 0x2a, 0x06, 0xea, 0xb6, 0x6e, 0xe3, 0xa6, 0xfe, 0x60, 0xc0, 0x5f, - 0x8a, 0xfb, 0x1a, 0xce, 0x0c, 0x87, 0x1c, 0xca, 0x80, 0x9d, 0x7e, 0xf0, 0xa7, 0xd5, 0x9c, 0x7b, - 0x7e, 0xbf, 0x7b, 0xe6, 0xdc, 0x73, 0xcf, 0x39, 0xf7, 0x0e, 0x17, 0x7e, 0xfa, 0x20, 0x9c, 0x6c, - 0x58, 0x56, 0xa3, 0x89, 0x17, 0xda, 0xb6, 0xe5, 0x5a, 0x7b, 0x9d, 0xfa, 0x42, 0x0d, 0x3b, 0xba, - 0x6d, 0xb4, 0x5d, 0xcb, 0x9e, 0xa7, 0x32, 0x34, 0xce, 0x34, 0xe6, 0x85, 0xc6, 0xec, 0x06, 0x4c, - 0x5c, 0x34, 0x9a, 0x78, 0xc5, 0x53, 0xac, 0x62, 0x17, 0x9d, 0x87, 0x54, 0xdd, 0x68, 0xe2, 0xa2, - 0x74, 0x32, 0x39, 0x97, 0x5b, 0xbc, 0x75, 0x3e, 0x04, 0x9a, 0x0f, 0x22, 0xb6, 0x89, 0x58, 0xa1, - 0x88, 0xd9, 0x77, 0x52, 0x30, 0x19, 0x31, 0x8a, 0x10, 0xa4, 0x4c, 0xad, 0x45, 0x18, 0xa5, 0xb9, - 0xac, 0x42, 0xff, 0x46, 0x45, 0x18, 0x6d, 0x6b, 0xfa, 0x65, 0xad, 0x81, 0x8b, 0x09, 0x2a, 0x16, - 0x8f, 0x68, 0x06, 0xa0, 0x86, 0xdb, 0xd8, 0xac, 0x61, 0x53, 0x3f, 0x28, 0x26, 0x4f, 0x26, 0xe7, - 0xb2, 0x8a, 0x4f, 0x82, 0xee, 0x82, 0x89, 0x76, 0x67, 0xaf, 0x69, 0xe8, 0xaa, 0x4f, 0x0d, 0x4e, - 0x26, 0xe7, 0xd2, 0x8a, 0xcc, 0x06, 0x56, 0xba, 0xca, 0x77, 0xc0, 0xf8, 0xf3, 0x58, 0xbb, 0xec, - 0x57, 0xcd, 0x51, 0xd5, 0x02, 0x11, 0xfb, 0x14, 0x97, 0x21, 0xdf, 0xc2, 0x8e, 0xa3, 0x35, 0xb0, - 0xea, 0x1e, 0xb4, 0x71, 0x31, 0x45, 0xdf, 0xfe, 0x64, 0xcf, 0xdb, 0x87, 0xdf, 0x3c, 0xc7, 0x51, - 0x3b, 0x07, 0x6d, 0x8c, 0xca, 0x90, 0xc5, 0x66, 0xa7, 0xc5, 0x18, 0xd2, 0x7d, 0xfc, 0x57, 0x31, - 0x3b, 0xad, 0x30, 0x4b, 0x86, 0xc0, 0x38, 0xc5, 0xa8, 0x83, 0xed, 0x2b, 0x86, 0x8e, 0x8b, 0x23, - 0x94, 0xe0, 0x8e, 0x1e, 0x82, 0x2a, 0x1b, 0x0f, 0x73, 0x08, 0x1c, 0x5a, 0x86, 0x2c, 0x7e, 0xc1, - 0xc5, 0xa6, 0x63, 0x58, 0x66, 0x71, 0x94, 0x92, 0xdc, 0x16, 0xb1, 0x8a, 0xb8, 0x59, 0x0b, 0x53, - 0x74, 0x71, 0xe8, 0x1c, 0x8c, 0x5a, 0x6d, 0xd7, 0xb0, 0x4c, 0xa7, 0x98, 0x39, 0x29, 0xcd, 0xe5, - 0x16, 0x6f, 0x8a, 0x0c, 0x84, 0x2d, 0xa6, 0xa3, 0x08, 0x65, 0xb4, 0x06, 0xb2, 0x63, 0x75, 0x6c, - 0x1d, 0xab, 0xba, 0x55, 0xc3, 0xaa, 0x61, 0xd6, 0xad, 0x62, 0x96, 0x12, 0x9c, 0xe8, 0x7d, 0x11, - 0xaa, 0xb8, 0x6c, 0xd5, 0xf0, 0x9a, 0x59, 0xb7, 0x94, 0x82, 0x13, 0x78, 0x46, 0xc7, 0x61, 0xc4, - 0x39, 0x30, 0x5d, 0xed, 0x85, 0x62, 0x9e, 0x46, 0x08, 0x7f, 0x9a, 0xfd, 0xce, 0x08, 0x8c, 0x0f, - 0x13, 0x62, 0x17, 0x20, 0x5d, 0x27, 0x6f, 0x59, 0x4c, 0x1c, 0xc5, 0x07, 0x0c, 0x13, 0x74, 0xe2, - 0xc8, 0xc7, 0x74, 0x62, 0x19, 0x72, 0x26, 0x76, 0x5c, 0x5c, 0x63, 0x11, 0x91, 0x1c, 0x32, 0xa6, - 0x80, 0x81, 0x7a, 0x43, 0x2a, 0xf5, 0xb1, 0x42, 0xea, 0x49, 0x18, 0xf7, 0x4c, 0x52, 0x6d, 0xcd, - 0x6c, 0x88, 0xd8, 0x5c, 0x88, 0xb3, 0x64, 0xbe, 0x22, 0x70, 0x0a, 0x81, 0x29, 0x05, 0x1c, 0x78, - 0x46, 0x2b, 0x00, 0x96, 0x89, 0xad, 0xba, 0x5a, 0xc3, 0x7a, 0xb3, 0x98, 0xe9, 0xe3, 0xa5, 0x2d, - 0xa2, 0xd2, 0xe3, 0x25, 0x8b, 0x49, 0xf5, 0x26, 0x7a, 0xb0, 0x1b, 0x6a, 0xa3, 0x7d, 0x22, 0x65, - 0x83, 0x6d, 0xb2, 0x9e, 0x68, 0xdb, 0x85, 0x82, 0x8d, 0x49, 0xdc, 0xe3, 0x1a, 0x7f, 0xb3, 0x2c, - 0x35, 0x62, 0x3e, 0xf6, 0xcd, 0x14, 0x0e, 0x63, 0x2f, 0x36, 0x66, 0xfb, 0x1f, 0xd1, 0x2d, 0xe0, - 0x09, 0x54, 0x1a, 0x56, 0x40, 0xb3, 0x50, 0x5e, 0x08, 0x37, 0xb5, 0x16, 0x9e, 0x7e, 0x11, 0x0a, - 0x41, 0xf7, 0xa0, 0x29, 0x48, 0x3b, 0xae, 0x66, 0xbb, 0x34, 0x0a, 0xd3, 0x0a, 0x7b, 0x40, 0x32, - 0x24, 0xb1, 0x59, 0xa3, 0x59, 0x2e, 0xad, 0x90, 0x3f, 0xd1, 0xff, 0xeb, 0xbe, 0x70, 0x92, 0xbe, - 0xf0, 0xed, 0xbd, 0x2b, 0x1a, 0x60, 0x0e, 0xbf, 0xf7, 0xf4, 0x03, 0x30, 0x16, 0x78, 0x81, 0x61, - 0xa7, 0x9e, 0xfd, 0x05, 0xb8, 0x2e, 0x92, 0x1a, 0x3d, 0x09, 0x53, 0x1d, 0xd3, 0x30, 0x5d, 0x6c, - 0xb7, 0x6d, 0x4c, 0x22, 0x96, 0x4d, 0x55, 0xfc, 0xd7, 0xd1, 0x3e, 0x31, 0xb7, 0xeb, 0xd7, 0x66, - 0x2c, 0xca, 0x64, 0xa7, 0x57, 0x78, 0x3a, 0x9b, 0x79, 0x77, 0x54, 0xbe, 0x7a, 0xf5, 0xea, 0xd5, - 0xc4, 0xec, 0xcb, 0x23, 0x30, 0x15, 0xb5, 0x67, 0x22, 0xb7, 0xef, 0x71, 0x18, 0x31, 0x3b, 0xad, - 0x3d, 0x6c, 0x53, 0x27, 0xa5, 0x15, 0xfe, 0x84, 0xca, 0x90, 0x6e, 0x6a, 0x7b, 0xb8, 0x59, 0x4c, - 0x9d, 0x94, 0xe6, 0x0a, 0x8b, 0x77, 0x0d, 0xb5, 0x2b, 0xe7, 0xd7, 0x09, 0x44, 0x61, 0x48, 0xf4, - 0x30, 0xa4, 0x78, 0x8a, 0x26, 0x0c, 0xa7, 0x87, 0x63, 0x20, 0x7b, 0x49, 0xa1, 0x38, 0x74, 0x23, - 0x64, 0xc9, 0xbf, 0x2c, 0x36, 0x46, 0xa8, 0xcd, 0x19, 0x22, 0x20, 0x71, 0x81, 0xa6, 0x21, 0x43, - 0xb7, 0x49, 0x0d, 0x8b, 0xd2, 0xe6, 0x3d, 0x93, 0xc0, 0xaa, 0xe1, 0xba, 0xd6, 0x69, 0xba, 0xea, - 0x15, 0xad, 0xd9, 0xc1, 0x34, 0xe0, 0xb3, 0x4a, 0x9e, 0x0b, 0x1f, 0x27, 0x32, 0x74, 0x02, 0x72, - 0x6c, 0x57, 0x19, 0x66, 0x0d, 0xbf, 0x40, 0xb3, 0x67, 0x5a, 0x61, 0x1b, 0x6d, 0x8d, 0x48, 0xc8, - 0xf4, 0xcf, 0x3a, 0x96, 0x29, 0x42, 0x93, 0x4e, 0x41, 0x04, 0x74, 0xfa, 0x07, 0xc2, 0x89, 0xfb, - 0xe6, 0xe8, 0xd7, 0x0b, 0xc7, 0xd4, 0xec, 0xb7, 0x12, 0x90, 0xa2, 0xf9, 0x62, 0x1c, 0x72, 0x3b, - 0x4f, 0x6d, 0x57, 0xd4, 0x95, 0xad, 0xdd, 0xa5, 0xf5, 0x8a, 0x2c, 0xa1, 0x02, 0x00, 0x15, 0x5c, - 0x5c, 0xdf, 0x2a, 0xef, 0xc8, 0x09, 0xef, 0x79, 0x6d, 0x73, 0xe7, 0xdc, 0x19, 0x39, 0xe9, 0x01, - 0x76, 0x99, 0x20, 0xe5, 0x57, 0xb8, 0x7f, 0x51, 0x4e, 0x23, 0x19, 0xf2, 0x8c, 0x60, 0xed, 0xc9, - 0xca, 0xca, 0xb9, 0x33, 0xf2, 0x48, 0x50, 0x72, 0xff, 0xa2, 0x3c, 0x8a, 0xc6, 0x20, 0x4b, 0x25, - 0x4b, 0x5b, 0x5b, 0xeb, 0x72, 0xc6, 0xe3, 0xac, 0xee, 0x28, 0x6b, 0x9b, 0xab, 0x72, 0xd6, 0xe3, - 0x5c, 0x55, 0xb6, 0x76, 0xb7, 0x65, 0xf0, 0x18, 0x36, 0x2a, 0xd5, 0x6a, 0x79, 0xb5, 0x22, 0xe7, - 0x3c, 0x8d, 0xa5, 0xa7, 0x76, 0x2a, 0x55, 0x39, 0x1f, 0x30, 0xeb, 0xfe, 0x45, 0x79, 0xcc, 0x9b, - 0xa2, 0xb2, 0xb9, 0xbb, 0x21, 0x17, 0xd0, 0x04, 0x8c, 0xb1, 0x29, 0x84, 0x11, 0xe3, 0x21, 0xd1, - 0xb9, 0x33, 0xb2, 0xdc, 0x35, 0x84, 0xb1, 0x4c, 0x04, 0x04, 0xe7, 0xce, 0xc8, 0x68, 0x76, 0x19, - 0xd2, 0x34, 0xba, 0x10, 0x82, 0xc2, 0x7a, 0x79, 0xa9, 0xb2, 0xae, 0x6e, 0x6d, 0xef, 0xac, 0x6d, - 0x6d, 0x96, 0xd7, 0x65, 0xa9, 0x2b, 0x53, 0x2a, 0x9f, 0xdf, 0x5d, 0x53, 0x2a, 0x2b, 0x72, 0xc2, - 0x2f, 0xdb, 0xae, 0x94, 0x77, 0x2a, 0x2b, 0x72, 0x72, 0x56, 0x87, 0xa9, 0xa8, 0x3c, 0x19, 0xb9, - 0x33, 0x7c, 0x4b, 0x9c, 0xe8, 0xb3, 0xc4, 0x94, 0xab, 0x67, 0x89, 0x7f, 0x92, 0x80, 0xc9, 0x88, - 0x5a, 0x11, 0x39, 0xc9, 0x23, 0x90, 0x66, 0x21, 0xca, 0xaa, 0xe7, 0x9d, 0x91, 0x45, 0x87, 0x06, - 0x6c, 0x4f, 0x05, 0xa5, 0x38, 0x7f, 0x07, 0x91, 0xec, 0xd3, 0x41, 0x10, 0x8a, 0x9e, 0x9c, 0xfe, - 0x4c, 0x4f, 0x4e, 0x67, 0x65, 0xef, 0xdc, 0x30, 0x65, 0x8f, 0xca, 0x8e, 0x96, 0xdb, 0xd3, 0x11, - 0xb9, 0xfd, 0x02, 0x4c, 0xf4, 0x10, 0x0d, 0x9d, 0x63, 0x5f, 0x92, 0xa0, 0xd8, 0xcf, 0x39, 0x31, - 0x99, 0x2e, 0x11, 0xc8, 0x74, 0x17, 0xc2, 0x1e, 0x3c, 0xd5, 0x7f, 0x11, 0x7a, 0xd6, 0xfa, 0x0d, - 0x09, 0x8e, 0x47, 0x77, 0x8a, 0x91, 0x36, 0x3c, 0x0c, 0x23, 0x2d, 0xec, 0xee, 0x5b, 0xa2, 0x5b, - 0xba, 0x3d, 0xa2, 0x06, 0x93, 0xe1, 0xf0, 0x62, 0x73, 0x94, 0xbf, 0x88, 0x27, 0xfb, 0xb5, 0x7b, - 0xcc, 0x9a, 0x1e, 0x4b, 0xbf, 0x98, 0x80, 0xeb, 0x22, 0xc9, 0x23, 0x0d, 0xbd, 0x19, 0xc0, 0x30, - 0xdb, 0x1d, 0x97, 0x75, 0x44, 0x2c, 0xc1, 0x66, 0xa9, 0x84, 0x26, 0x2f, 0x92, 0x3c, 0x3b, 0xae, - 0x37, 0x9e, 0xa4, 0xe3, 0xc0, 0x44, 0x54, 0xe1, 0x7c, 0xd7, 0xd0, 0x14, 0x35, 0x74, 0xa6, 0xcf, - 0x9b, 0xf6, 0x04, 0xe6, 0xbd, 0x20, 0xeb, 0x4d, 0x03, 0x9b, 0xae, 0xea, 0xb8, 0x36, 0xd6, 0x5a, - 0x86, 0xd9, 0xa0, 0x15, 0x24, 0x53, 0x4a, 0xd7, 0xb5, 0xa6, 0x83, 0x95, 0x71, 0x36, 0x5c, 0x15, - 0xa3, 0x04, 0x41, 0x03, 0xc8, 0xf6, 0x21, 0x46, 0x02, 0x08, 0x36, 0xec, 0x21, 0x66, 0xbf, 0x99, - 0x81, 0x9c, 0xaf, 0xaf, 0x46, 0xa7, 0x20, 0xff, 0xac, 0x76, 0x45, 0x53, 0xc5, 0x59, 0x89, 0x79, - 0x22, 0x47, 0x64, 0xdb, 0xfc, 0xbc, 0x74, 0x2f, 0x4c, 0x51, 0x15, 0xab, 0xe3, 0x62, 0x5b, 0xd5, - 0x9b, 0x9a, 0xe3, 0x50, 0xa7, 0x65, 0xa8, 0x2a, 0x22, 0x63, 0x5b, 0x64, 0x68, 0x59, 0x8c, 0xa0, - 0xb3, 0x30, 0x49, 0x11, 0xad, 0x4e, 0xd3, 0x35, 0xda, 0x4d, 0xac, 0x92, 0xd3, 0x9b, 0x43, 0x2b, - 0x89, 0x67, 0xd9, 0x04, 0xd1, 0xd8, 0xe0, 0x0a, 0xc4, 0x22, 0x07, 0xad, 0xc0, 0xcd, 0x14, 0xd6, - 0xc0, 0x26, 0xb6, 0x35, 0x17, 0xab, 0xf8, 0xb9, 0x8e, 0xd6, 0x74, 0x54, 0xcd, 0xac, 0xa9, 0xfb, - 0x9a, 0xb3, 0x5f, 0x9c, 0x22, 0x04, 0x4b, 0x89, 0xa2, 0xa4, 0xdc, 0x40, 0x14, 0x57, 0xb9, 0x5e, - 0x85, 0xaa, 0x95, 0xcd, 0xda, 0x25, 0xcd, 0xd9, 0x47, 0x25, 0x38, 0x4e, 0x59, 0x1c, 0xd7, 0x36, - 0xcc, 0x86, 0xaa, 0xef, 0x63, 0xfd, 0xb2, 0xda, 0x71, 0xeb, 0xe7, 0x8b, 0x37, 0xfa, 0xe7, 0xa7, - 0x16, 0x56, 0xa9, 0xce, 0x32, 0x51, 0xd9, 0x75, 0xeb, 0xe7, 0x51, 0x15, 0xf2, 0x64, 0x31, 0x5a, - 0xc6, 0x8b, 0x58, 0xad, 0x5b, 0x36, 0x2d, 0x8d, 0x85, 0x88, 0xd4, 0xe4, 0xf3, 0xe0, 0xfc, 0x16, - 0x07, 0x6c, 0x58, 0x35, 0x5c, 0x4a, 0x57, 0xb7, 0x2b, 0x95, 0x15, 0x25, 0x27, 0x58, 0x2e, 0x5a, - 0x36, 0x09, 0xa8, 0x86, 0xe5, 0x39, 0x38, 0xc7, 0x02, 0xaa, 0x61, 0x09, 0xf7, 0x9e, 0x85, 0x49, - 0x5d, 0x67, 0xef, 0x6c, 0xe8, 0x2a, 0x3f, 0x63, 0x39, 0x45, 0x39, 0xe0, 0x2c, 0x5d, 0x5f, 0x65, - 0x0a, 0x3c, 0xc6, 0x1d, 0xf4, 0x20, 0x5c, 0xd7, 0x75, 0x96, 0x1f, 0x38, 0xd1, 0xf3, 0x96, 0x61, - 0xe8, 0x59, 0x98, 0x6c, 0x1f, 0xf4, 0x02, 0x51, 0x60, 0xc6, 0xf6, 0x41, 0x18, 0xf6, 0x00, 0x4c, - 0xb5, 0xf7, 0xdb, 0xbd, 0xb8, 0xd3, 0x7e, 0x1c, 0x6a, 0xef, 0xb7, 0xc3, 0xc0, 0xdb, 0xe8, 0x81, - 0xdb, 0xc6, 0xba, 0xe6, 0xe2, 0x5a, 0xf1, 0x7a, 0xbf, 0xba, 0x6f, 0x00, 0x2d, 0x80, 0xac, 0xeb, - 0x2a, 0x36, 0xb5, 0xbd, 0x26, 0x56, 0x35, 0x1b, 0x9b, 0x9a, 0x53, 0x3c, 0xe1, 0x57, 0x2e, 0xe8, - 0x7a, 0x85, 0x8e, 0x96, 0xe9, 0x20, 0x3a, 0x0d, 0x13, 0xd6, 0xde, 0xb3, 0x3a, 0x0b, 0x49, 0xb5, - 0x6d, 0xe3, 0xba, 0xf1, 0x42, 0xf1, 0x56, 0xea, 0xdf, 0x71, 0x32, 0x40, 0x03, 0x72, 0x9b, 0x8a, - 0xd1, 0x9d, 0x20, 0xeb, 0xce, 0xbe, 0x66, 0xb7, 0x69, 0x4e, 0x76, 0xda, 0x9a, 0x8e, 0x8b, 0xb7, - 0x31, 0x55, 0x26, 0xdf, 0x14, 0x62, 0xb2, 0x25, 0x9c, 0xe7, 0x8d, 0xba, 0x2b, 0x18, 0xef, 0x60, - 0x5b, 0x82, 0xca, 0x38, 0xdb, 0x1c, 0xc8, 0xc4, 0x15, 0x81, 0x89, 0xe7, 0xa8, 0x5a, 0xa1, 0xbd, - 0xdf, 0xf6, 0xcf, 0x7b, 0x0b, 0x8c, 0x11, 0xcd, 0xee, 0xa4, 0x77, 0xb2, 0x86, 0xac, 0xbd, 0xef, - 0x9b, 0xf1, 0x13, 0xeb, 0x8d, 0x67, 0x4b, 0x90, 0xf7, 0xc7, 0x27, 0xca, 0x02, 0x8b, 0x50, 0x59, - 0x22, 0xcd, 0xca, 0xf2, 0xd6, 0x0a, 0x69, 0x33, 0x9e, 0xae, 0xc8, 0x09, 0xd2, 0xee, 0xac, 0xaf, - 0xed, 0x54, 0x54, 0x65, 0x77, 0x73, 0x67, 0x6d, 0xa3, 0x22, 0x27, 0xfd, 0x7d, 0xf5, 0xf7, 0x12, - 0x50, 0x08, 0x1e, 0x91, 0xd0, 0xe7, 0xe0, 0x7a, 0x71, 0x9f, 0xe1, 0x60, 0x57, 0x7d, 0xde, 0xb0, - 0xe9, 0x96, 0x69, 0x69, 0xac, 0x7c, 0x79, 0x8b, 0x36, 0xc5, 0xb5, 0xaa, 0xd8, 0x7d, 0xc2, 0xb0, - 0xc9, 0x86, 0x68, 0x69, 0x2e, 0x5a, 0x87, 0x13, 0xa6, 0xa5, 0x3a, 0xae, 0x66, 0xd6, 0x34, 0xbb, - 0xa6, 0x76, 0x6f, 0x92, 0x54, 0x4d, 0xd7, 0xb1, 0xe3, 0x58, 0xac, 0x54, 0x79, 0x2c, 0x37, 0x99, - 0x56, 0x95, 0x2b, 0x77, 0x73, 0x78, 0x99, 0xab, 0x86, 0x02, 0x2c, 0xd9, 0x2f, 0xc0, 0x6e, 0x84, - 0x6c, 0x4b, 0x6b, 0xab, 0xd8, 0x74, 0xed, 0x03, 0xda, 0x18, 0x67, 0x94, 0x4c, 0x4b, 0x6b, 0x57, - 0xc8, 0xf3, 0xa7, 0x73, 0x3e, 0xf9, 0x71, 0x12, 0xf2, 0xfe, 0xe6, 0x98, 0x9c, 0x35, 0x74, 0x5a, - 0x47, 0x24, 0x9a, 0x69, 0x6e, 0x19, 0xd8, 0x4a, 0xcf, 0x2f, 0x93, 0x02, 0x53, 0x1a, 0x61, 0x2d, - 0xab, 0xc2, 0x90, 0xa4, 0xb8, 0x93, 0xdc, 0x82, 0x59, 0x8b, 0x90, 0x51, 0xf8, 0x13, 0x5a, 0x85, - 0x91, 0x67, 0x1d, 0xca, 0x3d, 0x42, 0xb9, 0x6f, 0x1d, 0xcc, 0xfd, 0x68, 0x95, 0x92, 0x67, 0x1f, - 0xad, 0xaa, 0x9b, 0x5b, 0xca, 0x46, 0x79, 0x5d, 0xe1, 0x70, 0x74, 0x03, 0xa4, 0x9a, 0xda, 0x8b, - 0x07, 0xc1, 0x52, 0x44, 0x45, 0xc3, 0x3a, 0xfe, 0x06, 0x48, 0x3d, 0x8f, 0xb5, 0xcb, 0xc1, 0x02, - 0x40, 0x45, 0x9f, 0x60, 0xe8, 0x2f, 0x40, 0x9a, 0xfa, 0x0b, 0x01, 0x70, 0x8f, 0xc9, 0xc7, 0x50, - 0x06, 0x52, 0xcb, 0x5b, 0x0a, 0x09, 0x7f, 0x19, 0xf2, 0x4c, 0xaa, 0x6e, 0xaf, 0x55, 0x96, 0x2b, - 0x72, 0x62, 0xf6, 0x2c, 0x8c, 0x30, 0x27, 0x90, 0xad, 0xe1, 0xb9, 0x41, 0x3e, 0xc6, 0x1f, 0x39, - 0x87, 0x24, 0x46, 0x77, 0x37, 0x96, 0x2a, 0x8a, 0x9c, 0xf0, 0x2f, 0xaf, 0x03, 0x79, 0x7f, 0x5f, - 0xfc, 0xe9, 0xc4, 0xd4, 0x3f, 0x48, 0x90, 0xf3, 0xf5, 0xb9, 0xa4, 0x41, 0xd1, 0x9a, 0x4d, 0xeb, - 0x79, 0x55, 0x6b, 0x1a, 0x9a, 0xc3, 0x83, 0x02, 0xa8, 0xa8, 0x4c, 0x24, 0xc3, 0x2e, 0xda, 0xa7, - 0x62, 0xfc, 0x6b, 0x12, 0xc8, 0xe1, 0x16, 0x33, 0x64, 0xa0, 0xf4, 0x73, 0x35, 0xf0, 0x55, 0x09, - 0x0a, 0xc1, 0xbe, 0x32, 0x64, 0xde, 0xa9, 0x9f, 0xab, 0x79, 0x6f, 0x27, 0x60, 0x2c, 0xd0, 0x4d, - 0x0e, 0x6b, 0xdd, 0x73, 0x30, 0x61, 0xd4, 0x70, 0xab, 0x6d, 0xb9, 0xd8, 0xd4, 0x0f, 0xd4, 0x26, - 0xbe, 0x82, 0x9b, 0xc5, 0x59, 0x9a, 0x28, 0x16, 0x06, 0xf7, 0xab, 0xf3, 0x6b, 0x5d, 0xdc, 0x3a, - 0x81, 0x95, 0x26, 0xd7, 0x56, 0x2a, 0x1b, 0xdb, 0x5b, 0x3b, 0x95, 0xcd, 0xe5, 0xa7, 0xd4, 0xdd, - 0xcd, 0xc7, 0x36, 0xb7, 0x9e, 0xd8, 0x54, 0x64, 0x23, 0xa4, 0xf6, 0x09, 0x6e, 0xf5, 0x6d, 0x90, - 0xc3, 0x46, 0xa1, 0xeb, 0x21, 0xca, 0x2c, 0xf9, 0x18, 0x9a, 0x84, 0xf1, 0xcd, 0x2d, 0xb5, 0xba, - 0xb6, 0x52, 0x51, 0x2b, 0x17, 0x2f, 0x56, 0x96, 0x77, 0xaa, 0xec, 0x06, 0xc2, 0xd3, 0xde, 0x09, - 0x6e, 0xea, 0x57, 0x92, 0x30, 0x19, 0x61, 0x09, 0x2a, 0xf3, 0xb3, 0x03, 0x3b, 0xce, 0xdc, 0x33, - 0x8c, 0xf5, 0xf3, 0xa4, 0xe4, 0x6f, 0x6b, 0xb6, 0xcb, 0x8f, 0x1a, 0x77, 0x02, 0xf1, 0x92, 0xe9, - 0x1a, 0x75, 0x03, 0xdb, 0xfc, 0xc2, 0x86, 0x1d, 0x28, 0xc6, 0xbb, 0x72, 0x76, 0x67, 0x73, 0x37, - 0xa0, 0xb6, 0xe5, 0x18, 0xae, 0x71, 0x05, 0xab, 0x86, 0x29, 0x6e, 0x77, 0xc8, 0x01, 0x23, 0xa5, - 0xc8, 0x62, 0x64, 0xcd, 0x74, 0x3d, 0x6d, 0x13, 0x37, 0xb4, 0x90, 0x36, 0x49, 0xe0, 0x49, 0x45, - 0x16, 0x23, 0x9e, 0xf6, 0x29, 0xc8, 0xd7, 0xac, 0x0e, 0xe9, 0xba, 0x98, 0x1e, 0xa9, 0x17, 0x92, - 0x92, 0x63, 0x32, 0x4f, 0x85, 0xf7, 0xd3, 0xdd, 0x6b, 0xa5, 0xbc, 0x92, 0x63, 0x32, 0xa6, 0x72, - 0x07, 0x8c, 0x6b, 0x8d, 0x86, 0x4d, 0xc8, 0x05, 0x11, 0x3b, 0x21, 0x14, 0x3c, 0x31, 0x55, 0x9c, - 0x7e, 0x14, 0x32, 0xc2, 0x0f, 0xa4, 0x24, 0x13, 0x4f, 0xa8, 0x6d, 0x76, 0xec, 0x4d, 0xcc, 0x65, - 0x95, 0x8c, 0x29, 0x06, 0x4f, 0x41, 0xde, 0x70, 0xd4, 0xee, 0x2d, 0x79, 0xe2, 0x64, 0x62, 0x2e, - 0xa3, 0xe4, 0x0c, 0xc7, 0xbb, 0x61, 0x9c, 0x7d, 0x23, 0x01, 0x85, 0xe0, 0x2d, 0x3f, 0x5a, 0x81, - 0x4c, 0xd3, 0xd2, 0x35, 0x1a, 0x5a, 0xec, 0x13, 0xd3, 0x5c, 0xcc, 0x87, 0x81, 0xf9, 0x75, 0xae, - 0xaf, 0x78, 0xc8, 0xe9, 0x7f, 0x91, 0x20, 0x23, 0xc4, 0xe8, 0x38, 0xa4, 0xda, 0x9a, 0xbb, 0x4f, - 0xe9, 0xd2, 0x4b, 0x09, 0x59, 0x52, 0xe8, 0x33, 0x91, 0x3b, 0x6d, 0xcd, 0xa4, 0x21, 0xc0, 0xe5, - 0xe4, 0x99, 0xac, 0x6b, 0x13, 0x6b, 0x35, 0x7a, 0xfc, 0xb0, 0x5a, 0x2d, 0x6c, 0xba, 0x8e, 0x58, - 0x57, 0x2e, 0x5f, 0xe6, 0x62, 0x74, 0x17, 0x4c, 0xb8, 0xb6, 0x66, 0x34, 0x03, 0xba, 0x29, 0xaa, - 0x2b, 0x8b, 0x01, 0x4f, 0xb9, 0x04, 0x37, 0x08, 0xde, 0x1a, 0x76, 0x35, 0x7d, 0x1f, 0xd7, 0xba, - 0xa0, 0x11, 0x7a, 0xcd, 0x70, 0x3d, 0x57, 0x58, 0xe1, 0xe3, 0x02, 0x3b, 0xfb, 0x03, 0x09, 0x26, - 0xc4, 0x81, 0xa9, 0xe6, 0x39, 0x6b, 0x03, 0x40, 0x33, 0x4d, 0xcb, 0xf5, 0xbb, 0xab, 0x37, 0x94, - 0x7b, 0x70, 0xf3, 0x65, 0x0f, 0xa4, 0xf8, 0x08, 0xa6, 0x5b, 0x00, 0xdd, 0x91, 0xbe, 0x6e, 0x3b, - 0x01, 0x39, 0xfe, 0x09, 0x87, 0x7e, 0x07, 0x64, 0x47, 0x6c, 0x60, 0x22, 0x72, 0xb2, 0x42, 0x53, - 0x90, 0xde, 0xc3, 0x0d, 0xc3, 0xe4, 0x17, 0xb3, 0xec, 0x41, 0x5c, 0x84, 0xa4, 0xbc, 0x8b, 0x90, - 0xa5, 0x2f, 0xc0, 0xa4, 0x6e, 0xb5, 0xc2, 0xe6, 0x2e, 0xc9, 0xa1, 0x63, 0xbe, 0x73, 0x49, 0x7a, - 0x1a, 0xba, 0x2d, 0xe6, 0x87, 0x92, 0xf4, 0x27, 0x89, 0xe4, 0xea, 0xf6, 0xd2, 0xd7, 0x12, 0xd3, - 0xab, 0x0c, 0xba, 0x2d, 0xde, 0x54, 0xc1, 0xf5, 0x26, 0xd6, 0x89, 0xf5, 0xf0, 0x95, 0x39, 0xb8, - 0xa7, 0x61, 0xb8, 0xfb, 0x9d, 0xbd, 0x79, 0xdd, 0x6a, 0x2d, 0x34, 0xac, 0x86, 0xd5, 0xfd, 0xf4, - 0x49, 0x9e, 0xe8, 0x03, 0xfd, 0x8b, 0x7f, 0xfe, 0xcc, 0x7a, 0xd2, 0xe9, 0xd8, 0x6f, 0xa5, 0xa5, - 0x4d, 0x98, 0xe4, 0xca, 0x2a, 0xfd, 0xfe, 0xc2, 0x4e, 0x11, 0x68, 0xe0, 0x1d, 0x56, 0xf1, 0x1b, - 0xef, 0xd0, 0x72, 0xad, 0x4c, 0x70, 0x28, 0x19, 0x63, 0x07, 0x8d, 0x92, 0x02, 0xd7, 0x05, 0xf8, - 0xd8, 0xd6, 0xc4, 0x76, 0x0c, 0xe3, 0xf7, 0x38, 0xe3, 0xa4, 0x8f, 0xb1, 0xca, 0xa1, 0xa5, 0x65, - 0x18, 0x3b, 0x0a, 0xd7, 0x3f, 0x72, 0xae, 0x3c, 0xf6, 0x93, 0xac, 0xc2, 0x38, 0x25, 0xd1, 0x3b, - 0x8e, 0x6b, 0xb5, 0x68, 0xde, 0x1b, 0x4c, 0xf3, 0x4f, 0xef, 0xb0, 0xbd, 0x52, 0x20, 0xb0, 0x65, - 0x0f, 0x55, 0x2a, 0x01, 0xfd, 0xe4, 0x54, 0xc3, 0x7a, 0x33, 0x86, 0xe1, 0x4d, 0x6e, 0x88, 0xa7, - 0x5f, 0x7a, 0x1c, 0xa6, 0xc8, 0xdf, 0x34, 0x2d, 0xf9, 0x2d, 0x89, 0xbf, 0xf0, 0x2a, 0xfe, 0xe0, - 0x25, 0xb6, 0x1d, 0x27, 0x3d, 0x02, 0x9f, 0x4d, 0xbe, 0x55, 0x6c, 0x60, 0xd7, 0xc5, 0xb6, 0xa3, - 0x6a, 0xcd, 0x28, 0xf3, 0x7c, 0x37, 0x06, 0xc5, 0x2f, 0xbd, 0x17, 0x5c, 0xc5, 0x55, 0x86, 0x2c, - 0x37, 0x9b, 0xa5, 0x5d, 0xb8, 0x3e, 0x22, 0x2a, 0x86, 0xe0, 0x7c, 0x85, 0x73, 0x4e, 0xf5, 0x44, - 0x06, 0xa1, 0xdd, 0x06, 0x21, 0xf7, 0xd6, 0x72, 0x08, 0xce, 0x3f, 0xe4, 0x9c, 0x88, 0x63, 0xc5, - 0x92, 0x12, 0xc6, 0x47, 0x61, 0xe2, 0x0a, 0xb6, 0xf7, 0x2c, 0x87, 0xdf, 0xd2, 0x0c, 0x41, 0xf7, - 0x2a, 0xa7, 0x1b, 0xe7, 0x40, 0x7a, 0x6d, 0x43, 0xb8, 0x1e, 0x84, 0x4c, 0x5d, 0xd3, 0xf1, 0x10, - 0x14, 0x5f, 0xe6, 0x14, 0xa3, 0x44, 0x9f, 0x40, 0xcb, 0x90, 0x6f, 0x58, 0xbc, 0x32, 0xc5, 0xc3, - 0x5f, 0xe3, 0xf0, 0x9c, 0xc0, 0x70, 0x8a, 0xb6, 0xd5, 0xee, 0x34, 0x49, 0xd9, 0x8a, 0xa7, 0xf8, - 0x23, 0x41, 0x21, 0x30, 0x9c, 0xe2, 0x08, 0x6e, 0xfd, 0x63, 0x41, 0xe1, 0xf8, 0xfc, 0xf9, 0x08, - 0xe4, 0x2c, 0xb3, 0x79, 0x60, 0x99, 0xc3, 0x18, 0xf1, 0x3a, 0x67, 0x00, 0x0e, 0x21, 0x04, 0x17, - 0x20, 0x3b, 0xec, 0x42, 0x7c, 0xe5, 0x3d, 0xb1, 0x3d, 0xc4, 0x0a, 0xac, 0xc2, 0xb8, 0x48, 0x50, - 0x86, 0x65, 0x0e, 0x41, 0xf1, 0xa7, 0x9c, 0xa2, 0xe0, 0x83, 0xf1, 0xd7, 0x70, 0xb1, 0xe3, 0x36, - 0xf0, 0x30, 0x24, 0x6f, 0x88, 0xd7, 0xe0, 0x10, 0xee, 0xca, 0x3d, 0x6c, 0xea, 0xfb, 0xc3, 0x31, - 0x7c, 0x55, 0xb8, 0x52, 0x60, 0x08, 0xc5, 0x32, 0x8c, 0xb5, 0x34, 0xdb, 0xd9, 0xd7, 0x9a, 0x43, - 0x2d, 0xc7, 0x9f, 0x71, 0x8e, 0xbc, 0x07, 0xe2, 0x1e, 0xe9, 0x98, 0x47, 0xa1, 0xf9, 0x9a, 0xf0, - 0x88, 0x0f, 0xc6, 0xb7, 0x9e, 0xe3, 0xd2, 0x2b, 0xad, 0xa3, 0xb0, 0xfd, 0xb9, 0xd8, 0x7a, 0x0c, - 0xbb, 0xe1, 0x67, 0xbc, 0x00, 0x59, 0xc7, 0x78, 0x71, 0x28, 0x9a, 0xbf, 0x10, 0x2b, 0x4d, 0x01, - 0x04, 0xfc, 0x14, 0xdc, 0x10, 0x59, 0x26, 0x86, 0x20, 0xfb, 0x4b, 0x4e, 0x76, 0x3c, 0xa2, 0x54, - 0xf0, 0x94, 0x70, 0x54, 0xca, 0xbf, 0x12, 0x29, 0x01, 0x87, 0xb8, 0xb6, 0xc9, 0x59, 0xc1, 0xd1, - 0xea, 0x47, 0xf3, 0xda, 0x5f, 0x0b, 0xaf, 0x31, 0x6c, 0xc0, 0x6b, 0x3b, 0x70, 0x9c, 0x33, 0x1e, - 0x6d, 0x5d, 0xbf, 0x2e, 0x12, 0x2b, 0x43, 0xef, 0x06, 0x57, 0xf7, 0x0b, 0x30, 0xed, 0xb9, 0x53, - 0x34, 0xa5, 0x8e, 0xda, 0xd2, 0xda, 0x43, 0x30, 0x7f, 0x83, 0x33, 0x8b, 0x8c, 0xef, 0x75, 0xb5, - 0xce, 0x86, 0xd6, 0x26, 0xe4, 0x4f, 0x42, 0x51, 0x90, 0x77, 0x4c, 0x1b, 0xeb, 0x56, 0xc3, 0x34, - 0x5e, 0xc4, 0xb5, 0x21, 0xa8, 0xff, 0x26, 0xb4, 0x54, 0xbb, 0x3e, 0x38, 0x61, 0x5e, 0x03, 0xd9, - 0xeb, 0x55, 0x54, 0xa3, 0xd5, 0xb6, 0x6c, 0x37, 0x86, 0xf1, 0x9b, 0x62, 0xa5, 0x3c, 0xdc, 0x1a, - 0x85, 0x95, 0x2a, 0x50, 0xa0, 0x8f, 0xc3, 0x86, 0xe4, 0xdf, 0x72, 0xa2, 0xb1, 0x2e, 0x8a, 0x27, - 0x0e, 0xdd, 0x6a, 0xb5, 0x35, 0x7b, 0x98, 0xfc, 0xf7, 0x77, 0x22, 0x71, 0x70, 0x08, 0x4f, 0x1c, - 0xee, 0x41, 0x1b, 0x93, 0x6a, 0x3f, 0x04, 0xc3, 0xb7, 0x44, 0xe2, 0x10, 0x18, 0x4e, 0x21, 0x1a, - 0x86, 0x21, 0x28, 0xfe, 0x5e, 0x50, 0x08, 0x0c, 0xa1, 0xf8, 0x7c, 0xb7, 0xd0, 0xda, 0xb8, 0x61, - 0x38, 0xae, 0xcd, 0x5a, 0xe1, 0xc1, 0x54, 0xdf, 0x7e, 0x2f, 0xd8, 0x84, 0x29, 0x3e, 0x28, 0xc9, - 0x44, 0xfc, 0x0a, 0x95, 0x9e, 0x94, 0xe2, 0x0d, 0xfb, 0x8e, 0xc8, 0x44, 0x3e, 0x18, 0xdb, 0x9f, - 0xe3, 0xa1, 0x5e, 0x05, 0xc5, 0xfd, 0x10, 0xa6, 0xf8, 0x4b, 0x1f, 0x70, 0xae, 0x60, 0xab, 0x52, - 0x5a, 0x27, 0x01, 0x14, 0x6c, 0x28, 0xe2, 0xc9, 0x5e, 0xfa, 0xc0, 0x8b, 0xa1, 0x40, 0x3f, 0x51, - 0xba, 0x08, 0x63, 0x81, 0x66, 0x22, 0x9e, 0xea, 0x97, 0x39, 0x55, 0xde, 0xdf, 0x4b, 0x94, 0xce, - 0x42, 0x8a, 0x34, 0x06, 0xf1, 0xf0, 0x5f, 0xe1, 0x70, 0xaa, 0x5e, 0x7a, 0x08, 0x32, 0xa2, 0x21, - 0x88, 0x87, 0xfe, 0x2a, 0x87, 0x7a, 0x10, 0x02, 0x17, 0xcd, 0x40, 0x3c, 0xfc, 0xd7, 0x04, 0x5c, - 0x40, 0x08, 0x7c, 0x78, 0x17, 0x7e, 0xf7, 0xd7, 0x53, 0x3c, 0xa1, 0x0b, 0xdf, 0x5d, 0x80, 0x51, - 0xde, 0x05, 0xc4, 0xa3, 0xbf, 0xc8, 0x27, 0x17, 0x88, 0xd2, 0x03, 0x90, 0x1e, 0xd2, 0xe1, 0xbf, - 0xc1, 0xa1, 0x4c, 0xbf, 0xb4, 0x0c, 0x39, 0x5f, 0xe5, 0x8f, 0x87, 0xff, 0x26, 0x87, 0xfb, 0x51, - 0xc4, 0x74, 0x5e, 0xf9, 0xe3, 0x09, 0x7e, 0x4b, 0x98, 0xce, 0x11, 0xc4, 0x6d, 0xa2, 0xe8, 0xc7, - 0xa3, 0x7f, 0x5b, 0x78, 0x5d, 0x40, 0x4a, 0x8f, 0x40, 0xd6, 0x4b, 0xe4, 0xf1, 0xf8, 0xdf, 0xe1, - 0xf8, 0x2e, 0x86, 0x78, 0xc0, 0x57, 0x48, 0xe2, 0x29, 0x7e, 0x57, 0x78, 0xc0, 0x87, 0x22, 0xdb, - 0x28, 0xdc, 0x1c, 0xc4, 0x33, 0xfd, 0x9e, 0xd8, 0x46, 0xa1, 0xde, 0x80, 0xac, 0x26, 0xcd, 0xa7, - 0xf1, 0x14, 0xbf, 0x2f, 0x56, 0x93, 0xea, 0x13, 0x33, 0xc2, 0xd5, 0x36, 0x9e, 0xe3, 0x0f, 0x84, - 0x19, 0xa1, 0x62, 0x5b, 0xda, 0x06, 0xd4, 0x5b, 0x69, 0xe3, 0xf9, 0x5e, 0xe6, 0x7c, 0x13, 0x3d, - 0x85, 0xb6, 0xf4, 0x04, 0x1c, 0x8f, 0xae, 0xb2, 0xf1, 0xac, 0x5f, 0xfa, 0x20, 0x74, 0x2e, 0xf2, - 0x17, 0xd9, 0xd2, 0x4e, 0x37, 0x5d, 0xfb, 0x2b, 0x6c, 0x3c, 0xed, 0x2b, 0x1f, 0x04, 0x33, 0xb6, - 0xbf, 0xc0, 0x96, 0xca, 0x00, 0xdd, 0xe2, 0x16, 0xcf, 0xf5, 0x2a, 0xe7, 0xf2, 0x81, 0xc8, 0xd6, - 0xe0, 0xb5, 0x2d, 0x1e, 0xff, 0x65, 0xb1, 0x35, 0x38, 0x82, 0x6c, 0x0d, 0x51, 0xd6, 0xe2, 0xd1, - 0xaf, 0x89, 0xad, 0x21, 0x20, 0x24, 0xb2, 0x7d, 0x95, 0x23, 0x9e, 0xe1, 0x75, 0x11, 0xd9, 0x3e, - 0x54, 0xe9, 0x02, 0x64, 0xcc, 0x4e, 0xb3, 0x49, 0x02, 0x14, 0x0d, 0xfe, 0x81, 0x58, 0xf1, 0xdf, - 0x3e, 0xe2, 0x16, 0x08, 0x40, 0xe9, 0x2c, 0xa4, 0x71, 0x6b, 0x0f, 0xd7, 0xe2, 0x90, 0xff, 0xfe, - 0x91, 0x48, 0x4a, 0x44, 0xbb, 0xf4, 0x08, 0x00, 0x3b, 0xda, 0xd3, 0xcf, 0x56, 0x31, 0xd8, 0xff, - 0xf8, 0x88, 0xff, 0x74, 0xa3, 0x0b, 0xe9, 0x12, 0xb0, 0x1f, 0x82, 0x0c, 0x26, 0x78, 0x2f, 0x48, - 0x40, 0xdf, 0xfa, 0x41, 0x18, 0x7d, 0xd6, 0xb1, 0x4c, 0x57, 0x6b, 0xc4, 0xa1, 0xff, 0x93, 0xa3, - 0x85, 0x3e, 0x71, 0x58, 0xcb, 0xb2, 0xb1, 0xab, 0x35, 0x9c, 0x38, 0xec, 0x7f, 0x71, 0xac, 0x07, - 0x20, 0x60, 0x5d, 0x73, 0xdc, 0x61, 0xde, 0xfb, 0xa7, 0x02, 0x2c, 0x00, 0xc4, 0x68, 0xf2, 0xf7, - 0x65, 0x7c, 0x10, 0x87, 0x7d, 0x5f, 0x18, 0xcd, 0xf5, 0x4b, 0x0f, 0x41, 0x96, 0xfc, 0xc9, 0x7e, - 0x8f, 0x15, 0x03, 0xfe, 0x6f, 0x0e, 0xee, 0x22, 0xc8, 0xcc, 0x8e, 0x5b, 0x73, 0x8d, 0x78, 0x67, - 0xff, 0x8c, 0xaf, 0xb4, 0xd0, 0x2f, 0x95, 0x21, 0xe7, 0xb8, 0xb5, 0x5a, 0x87, 0xf7, 0x57, 0x31, - 0xf0, 0xff, 0xf9, 0xc8, 0x3b, 0x72, 0x7b, 0x98, 0xa5, 0x4a, 0xf4, 0xed, 0x21, 0xac, 0x5a, 0xab, - 0x16, 0xbb, 0x37, 0x7c, 0x7a, 0x36, 0xfe, 0x02, 0x10, 0x7e, 0x76, 0x0f, 0xdc, 0xa4, 0x5b, 0xad, - 0x3d, 0xcb, 0x59, 0xd8, 0xb3, 0xdc, 0xfd, 0x85, 0x96, 0xd6, 0x76, 0xe8, 0xc8, 0x22, 0xbf, 0x16, - 0xcc, 0xf1, 0x27, 0x32, 0x30, 0x7d, 0xb4, 0x2b, 0xc5, 0xd9, 0x9b, 0x61, 0xec, 0x62, 0xd3, 0xd2, - 0x5c, 0xc3, 0x6c, 0x6c, 0x5b, 0x86, 0xe9, 0xa2, 0x3c, 0x48, 0x75, 0xfa, 0x49, 0x4c, 0x52, 0xa4, - 0xfa, 0xec, 0x3f, 0xa7, 0x21, 0xcb, 0x6e, 0xa3, 0x36, 0xb4, 0x36, 0xfa, 0x45, 0xc8, 0x6f, 0xf2, - 0x2d, 0x74, 0xdf, 0xe2, 0x79, 0xc7, 0xbb, 0xfd, 0xf6, 0xcd, 0x3f, 0xef, 0x69, 0xcf, 0xfb, 0x55, - 0xe9, 0x27, 0xf0, 0xa5, 0x7b, 0x7f, 0xf4, 0xd6, 0x89, 0xbb, 0xfb, 0xda, 0x47, 0x0a, 0xef, 0x02, - 0x8b, 0xf5, 0xf9, 0x5d, 0xc3, 0x74, 0xef, 0x5b, 0x3c, 0xaf, 0x04, 0xe6, 0x43, 0x57, 0x20, 0xc3, - 0x07, 0x1c, 0xfe, 0x55, 0xe4, 0xd6, 0x3e, 0x73, 0x0b, 0x35, 0x36, 0xef, 0x99, 0x37, 0xdf, 0x3a, - 0x71, 0xec, 0xc8, 0x73, 0x7b, 0x73, 0xa1, 0xe7, 0x20, 0x27, 0xec, 0x58, 0xab, 0x39, 0xfc, 0x57, - 0xf0, 0x77, 0xc4, 0xbc, 0xf6, 0x5a, 0x8d, 0xcf, 0x7e, 0xfb, 0x8f, 0xde, 0x3a, 0x31, 0x3b, 0x70, - 0xe6, 0xf9, 0xdd, 0x8e, 0x51, 0x53, 0xfc, 0x73, 0xa0, 0x67, 0x20, 0x49, 0xa6, 0x62, 0x3f, 0x1c, - 0x3c, 0xd1, 0x67, 0x2a, 0x6f, 0x8a, 0xd3, 0xfc, 0x05, 0x87, 0x99, 0x86, 0xf0, 0x4e, 0x3f, 0x02, - 0x13, 0x3d, 0xcb, 0x83, 0x64, 0x48, 0x5e, 0xc6, 0x07, 0xfc, 0x17, 0x5a, 0xe4, 0x4f, 0x34, 0xd5, - 0xfd, 0x09, 0xa5, 0x34, 0x97, 0xe7, 0xbf, 0x8b, 0x2c, 0x25, 0xce, 0x4b, 0xd3, 0x17, 0x60, 0x2c, - 0xe0, 0xe3, 0x23, 0x81, 0x1f, 0x06, 0x39, 0xec, 0xa5, 0x23, 0xe1, 0xcf, 0x41, 0xe6, 0xe3, 0xe0, - 0x66, 0x7f, 0x88, 0x60, 0xb4, 0xdc, 0x6c, 0x6e, 0x68, 0x6d, 0x07, 0x3d, 0x05, 0x13, 0xec, 0x78, - 0xb0, 0x63, 0xad, 0xd0, 0xef, 0x50, 0x1b, 0x5a, 0x9b, 0x07, 0xf4, 0x5d, 0x01, 0x77, 0x73, 0xc0, - 0x7c, 0x8f, 0x36, 0x9d, 0x5f, 0xe9, 0x65, 0x41, 0x8f, 0x83, 0x2c, 0x84, 0x74, 0x6f, 0x11, 0x66, - 0x16, 0xae, 0xa7, 0x07, 0x32, 0x0b, 0x65, 0x46, 0xdc, 0xc3, 0x81, 0x1e, 0x86, 0xcc, 0x9a, 0xe9, - 0xde, 0xbf, 0x48, 0xf8, 0x58, 0x0c, 0xce, 0x46, 0xf2, 0x09, 0x25, 0xc6, 0xe3, 0x61, 0x38, 0xfe, - 0xdc, 0x19, 0x82, 0x4f, 0x0d, 0xc6, 0x53, 0xa5, 0x2e, 0x9e, 0x3e, 0xa2, 0x32, 0x64, 0xc9, 0x9a, - 0x33, 0x03, 0xd8, 0x7f, 0xc0, 0xb8, 0x25, 0x92, 0xc0, 0xd3, 0x62, 0x0c, 0x5d, 0x94, 0xa0, 0x60, - 0x36, 0x8c, 0xc4, 0x50, 0xf8, 0x8c, 0xe8, 0xa2, 0x08, 0x45, 0xd5, 0xb3, 0x62, 0x74, 0x00, 0x45, - 0x35, 0x64, 0x45, 0xd5, 0x6f, 0x45, 0xd5, 0xb3, 0x22, 0x13, 0x43, 0xe1, 0xb7, 0xc2, 0x7b, 0x46, - 0x2b, 0x00, 0x17, 0x8d, 0x17, 0x70, 0x8d, 0x99, 0x91, 0x8d, 0x48, 0x46, 0x82, 0xa3, 0xab, 0xc6, - 0x48, 0x7c, 0x38, 0xb4, 0x0a, 0xb9, 0x6a, 0xbd, 0x4b, 0x03, 0xfc, 0xff, 0x9f, 0x44, 0x9a, 0x52, - 0x0f, 0xf1, 0xf8, 0x91, 0x9e, 0x39, 0xec, 0x95, 0x72, 0x71, 0xe6, 0xf8, 0xde, 0xc9, 0x87, 0xeb, - 0x9a, 0xc3, 0x68, 0xf2, 0xb1, 0xe6, 0xf8, 0x78, 0xfc, 0x48, 0x74, 0x01, 0x46, 0x97, 0x2c, 0x8b, - 0x68, 0x16, 0xc7, 0x28, 0xc9, 0xa9, 0x48, 0x12, 0xae, 0xc3, 0x08, 0x04, 0x82, 0xae, 0x0e, 0x0d, - 0x7d, 0x02, 0x2f, 0x0c, 0x5a, 0x1d, 0xa1, 0x25, 0x56, 0x47, 0x3c, 0xfb, 0x77, 0xe0, 0xd2, 0x81, - 0x8b, 0x49, 0x2b, 0x5e, 0x1c, 0x1f, 0x62, 0x07, 0x0a, 0xe5, 0xd0, 0x0e, 0x14, 0x62, 0x54, 0x85, - 0x71, 0x21, 0xab, 0x98, 0x1d, 0x92, 0x83, 0x8b, 0x32, 0xff, 0x71, 0xf9, 0x20, 0x5a, 0xae, 0xcb, - 0x58, 0xc3, 0x0c, 0x68, 0x1b, 0x0a, 0x42, 0xb4, 0xe1, 0xd0, 0x97, 0x9e, 0x88, 0xa8, 0xab, 0x61, - 0x4e, 0xa6, 0xca, 0x28, 0x43, 0xf8, 0xe9, 0x15, 0x38, 0x1e, 0x9d, 0xad, 0xe2, 0xb2, 0xa5, 0xe4, - 0xcf, 0xb2, 0xcb, 0x70, 0x5d, 0x64, 0x66, 0x8a, 0x23, 0x49, 0x84, 0xea, 0x44, 0x20, 0x1d, 0xf9, - 0xc1, 0xe9, 0x08, 0x70, 0xba, 0x17, 0xdc, 0x0d, 0x32, 0x3f, 0x38, 0x19, 0x01, 0x4e, 0xfa, 0xc1, - 0x9f, 0x83, 0x42, 0x30, 0x0f, 0xf9, 0xd1, 0x63, 0x11, 0xe8, 0xb1, 0x08, 0x74, 0xf4, 0xdc, 0xa9, - 0x08, 0x74, 0x2a, 0x84, 0xae, 0xf6, 0x9d, 0x7b, 0x22, 0x02, 0x3d, 0x11, 0x81, 0x8e, 0x9e, 0x1b, - 0x45, 0xa0, 0x91, 0x1f, 0xfd, 0x10, 0x8c, 0x87, 0x52, 0x8e, 0x1f, 0x3e, 0x1a, 0x01, 0x1f, 0x0d, - 0xd5, 0xe6, 0x70, 0xaa, 0xf1, 0xe3, 0xc7, 0x23, 0xf0, 0xe3, 0x51, 0xd3, 0x47, 0x5b, 0x3f, 0x12, - 0x01, 0x1f, 0x89, 0x9c, 0x3e, 0x1a, 0x2f, 0x47, 0xe0, 0x65, 0x3f, 0xbe, 0x04, 0x79, 0x7f, 0x56, - 0xf1, 0x63, 0x33, 0x11, 0xd8, 0x4c, 0xd8, 0xef, 0x81, 0x94, 0x12, 0x17, 0xe9, 0xd9, 0x3e, 0xdb, - 0x25, 0x90, 0x46, 0x8e, 0xd4, 0xd9, 0x3c, 0x09, 0x53, 0x51, 0x49, 0x23, 0x82, 0xe3, 0xb4, 0x9f, - 0xa3, 0xb0, 0x38, 0x15, 0x48, 0x16, 0x14, 0xd7, 0x69, 0xf9, 0x99, 0x9f, 0x81, 0xc9, 0x88, 0xd4, - 0x11, 0x41, 0x7c, 0xaf, 0x9f, 0x38, 0xb7, 0x38, 0x1d, 0x20, 0x0e, 0x9c, 0x15, 0xfc, 0xad, 0xd5, - 0x8f, 0x27, 0xa1, 0xc0, 0x53, 0xd4, 0x96, 0x5d, 0xc3, 0x36, 0xae, 0xa1, 0xff, 0xdf, 0xbf, 0xc3, - 0x5a, 0x8c, 0x4a, 0x6d, 0x1c, 0x77, 0x84, 0x46, 0xeb, 0x99, 0xbe, 0x8d, 0xd6, 0x7d, 0xc3, 0x4c, - 0x10, 0xd7, 0x6f, 0x55, 0x7a, 0xfa, 0xad, 0x3b, 0x07, 0xd1, 0xf6, 0x6b, 0xbb, 0x2a, 0x3d, 0x6d, - 0x57, 0x1c, 0x4d, 0x64, 0xf7, 0x75, 0xa9, 0xb7, 0xfb, 0x3a, 0x3d, 0x88, 0xa7, 0x7f, 0x13, 0x76, - 0xa9, 0xb7, 0x09, 0x8b, 0x65, 0x8a, 0xee, 0xc5, 0x2e, 0xf5, 0xf6, 0x62, 0x03, 0x99, 0xfa, 0xb7, - 0x64, 0x97, 0x7a, 0x5b, 0xb2, 0x58, 0xa6, 0xe8, 0xce, 0xec, 0xb1, 0x88, 0xce, 0xec, 0xae, 0x41, - 0x54, 0x83, 0x1a, 0xb4, 0xcd, 0xa8, 0x06, 0xed, 0xee, 0x81, 0x86, 0x0d, 0xec, 0xd3, 0x1e, 0x8b, - 0xe8, 0xd3, 0xe2, 0x8d, 0xeb, 0xd3, 0xae, 0x6d, 0x46, 0xb5, 0x6b, 0x43, 0x18, 0xd7, 0xaf, 0x6b, - 0x5b, 0x0a, 0x77, 0x6d, 0x73, 0x83, 0xb8, 0xa2, 0x9b, 0xb7, 0x4b, 0xbd, 0xcd, 0xdb, 0xe9, 0xf8, - 0xbd, 0x18, 0xd5, 0xc3, 0x3d, 0xd3, 0xb7, 0x87, 0x1b, 0x6a, 0x73, 0xc7, 0xb5, 0x72, 0x4f, 0xf7, - 0x6b, 0xe5, 0xee, 0x1d, 0x86, 0x7d, 0x70, 0x47, 0xf7, 0x44, 0x9f, 0x8e, 0x6e, 0x61, 0x18, 0xea, - 0xcf, 0x1a, 0xbb, 0xcf, 0x1a, 0xbb, 0xcf, 0x1a, 0xbb, 0xcf, 0x1a, 0xbb, 0xff, 0x1b, 0x8d, 0x5d, - 0x29, 0xf5, 0xf2, 0xeb, 0x27, 0xa4, 0xd3, 0xa7, 0x60, 0x94, 0x4f, 0x8d, 0x46, 0x20, 0xb1, 0x51, - 0x96, 0x8f, 0xd1, 0x7f, 0x97, 0x64, 0x89, 0xfe, 0xbb, 0x2c, 0x27, 0x96, 0xd6, 0xdf, 0xbc, 0x36, - 0x73, 0xec, 0xfb, 0xd7, 0x66, 0x8e, 0xfd, 0xf0, 0xda, 0xcc, 0xb1, 0xb7, 0xaf, 0xcd, 0x48, 0xef, - 0x5e, 0x9b, 0x91, 0xde, 0xbf, 0x36, 0x23, 0x7d, 0x78, 0x6d, 0x46, 0xba, 0x7a, 0x38, 0x23, 0x7d, - 0xf5, 0x70, 0x46, 0xfa, 0xfa, 0xe1, 0x8c, 0xf4, 0xed, 0xc3, 0x19, 0xe9, 0xbb, 0x87, 0x33, 0xd2, - 0x9b, 0x87, 0x33, 0xd2, 0xf7, 0x0f, 0x67, 0xa4, 0xb7, 0x0f, 0x67, 0xa4, 0x77, 0x0f, 0x67, 0x8e, - 0xbd, 0x7f, 0x38, 0x23, 0x7d, 0x78, 0x38, 0x73, 0xec, 0xea, 0x4f, 0x66, 0x8e, 0xfd, 0x6f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x7b, 0x12, 0xbe, 0x21, 0x0f, 0x48, 0x00, 0x00, + // 4797 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7b, 0x5b, 0x6c, 0x23, 0xd7, + 0x79, 0xbf, 0x86, 0x17, 0x89, 0xfc, 0x48, 0x51, 0xa3, 0x91, 0xbc, 0xa6, 0x95, 0x58, 0xbb, 0x2b, + 0xdf, 0xe4, 0x5d, 0x5b, 0xb2, 0xe5, 0xdd, 0xf5, 0x9a, 0x1b, 0xdb, 0x7f, 0x4a, 0xe2, 0x6a, 0x65, + 0xeb, 0x96, 0xa1, 0xe4, 0x5b, 0x60, 0xcc, 0x7f, 0x34, 0x3c, 0xa2, 0xc6, 0x4b, 0xce, 0xd0, 0x33, + 0xc3, 0x5d, 0xcb, 0x28, 0x8a, 0x2d, 0xdc, 0x0b, 0x82, 0xa2, 0xf7, 0x02, 0x75, 0x5c, 0xc7, 0xad, + 0x53, 0x34, 0x4e, 0xd3, 0x5b, 0xd2, 0xb4, 0x69, 0x92, 0xbe, 0xe4, 0x25, 0xad, 0x81, 0x02, 0x45, + 0xf2, 0x16, 0x04, 0x81, 0xe1, 0x55, 0x0c, 0xd4, 0x6d, 0xdd, 0xc6, 0x4d, 0xfd, 0x60, 0xc0, 0x2f, + 0xc5, 0xb9, 0x0d, 0xcf, 0x0c, 0x87, 0x1c, 0xca, 0x80, 0x9d, 0x3e, 0xf8, 0x69, 0x35, 0xe7, 0x7c, + 0xbf, 0xdf, 0xf9, 0xe6, 0x3b, 0xdf, 0xf9, 0xce, 0xef, 0x9c, 0xe1, 0xc2, 0x4f, 0x1f, 0x80, 0x13, + 0x75, 0xdb, 0xae, 0x37, 0xd0, 0x7c, 0xcb, 0xb1, 0x3d, 0x7b, 0xb7, 0xbd, 0x37, 0x5f, 0x43, 0xae, + 0xe1, 0x98, 0x2d, 0xcf, 0x76, 0xe6, 0x48, 0x9b, 0x32, 0x46, 0x2d, 0xe6, 0xb8, 0xc5, 0xcc, 0x3a, + 0x8c, 0x5f, 0x34, 0x1b, 0x68, 0xd9, 0x37, 0xac, 0x22, 0x4f, 0x39, 0x0f, 0xa9, 0x3d, 0xb3, 0x81, + 0x8a, 0xd2, 0x89, 0xe4, 0x6c, 0x6e, 0xe1, 0xd6, 0xb9, 0x10, 0x68, 0x2e, 0x88, 0xd8, 0xc2, 0xcd, + 0x2a, 0x41, 0xcc, 0xbc, 0x95, 0x82, 0x89, 0x88, 0x5e, 0x45, 0x81, 0x94, 0xa5, 0x37, 0x31, 0xa3, + 0x34, 0x9b, 0x55, 0xc9, 0xdf, 0x4a, 0x11, 0x46, 0x5a, 0xba, 0x71, 0x59, 0xaf, 0xa3, 0x62, 0x82, + 0x34, 0xf3, 0x47, 0x65, 0x1a, 0xa0, 0x86, 0x5a, 0xc8, 0xaa, 0x21, 0xcb, 0x38, 0x28, 0x26, 0x4f, + 0x24, 0x67, 0xb3, 0xaa, 0xd0, 0xa2, 0x9c, 0x86, 0xf1, 0x56, 0x7b, 0xb7, 0x61, 0x1a, 0x9a, 0x60, + 0x06, 0x27, 0x92, 0xb3, 0x69, 0x55, 0xa6, 0x1d, 0xcb, 0x1d, 0xe3, 0x3b, 0x60, 0xec, 0x2a, 0xd2, + 0x2f, 0x8b, 0xa6, 0x39, 0x62, 0x5a, 0xc0, 0xcd, 0x82, 0xe1, 0x12, 0xe4, 0x9b, 0xc8, 0x75, 0xf5, + 0x3a, 0xd2, 0xbc, 0x83, 0x16, 0x2a, 0xa6, 0xc8, 0xdb, 0x9f, 0xe8, 0x7a, 0xfb, 0xf0, 0x9b, 0xe7, + 0x18, 0x6a, 0xfb, 0xa0, 0x85, 0x94, 0x32, 0x64, 0x91, 0xd5, 0x6e, 0x52, 0x86, 0x74, 0x8f, 0xf8, + 0x55, 0xac, 0x76, 0x33, 0xcc, 0x92, 0xc1, 0x30, 0x46, 0x31, 0xe2, 0x22, 0xe7, 0x8a, 0x69, 0xa0, + 0xe2, 0x30, 0x21, 0xb8, 0xa3, 0x8b, 0xa0, 0x4a, 0xfb, 0xc3, 0x1c, 0x1c, 0xa7, 0x2c, 0x41, 0x16, + 0x3d, 0xe7, 0x21, 0xcb, 0x35, 0x6d, 0xab, 0x38, 0x42, 0x48, 0x6e, 0x8b, 0x98, 0x45, 0xd4, 0xa8, + 0x85, 0x29, 0x3a, 0x38, 0xe5, 0x1c, 0x8c, 0xd8, 0x2d, 0xcf, 0xb4, 0x2d, 0xb7, 0x98, 0x39, 0x21, + 0xcd, 0xe6, 0x16, 0x3e, 0x1d, 0x99, 0x08, 0x9b, 0xd4, 0x46, 0xe5, 0xc6, 0xca, 0x2a, 0xc8, 0xae, + 0xdd, 0x76, 0x0c, 0xa4, 0x19, 0x76, 0x0d, 0x69, 0xa6, 0xb5, 0x67, 0x17, 0xb3, 0x84, 0xe0, 0x78, + 0xf7, 0x8b, 0x10, 0xc3, 0x25, 0xbb, 0x86, 0x56, 0xad, 0x3d, 0x5b, 0x2d, 0xb8, 0x81, 0x67, 0xe5, + 0x18, 0x0c, 0xbb, 0x07, 0x96, 0xa7, 0x3f, 0x57, 0xcc, 0x93, 0x0c, 0x61, 0x4f, 0x33, 0xdf, 0x1e, + 0x86, 0xb1, 0x41, 0x52, 0xec, 0x02, 0xa4, 0xf7, 0xf0, 0x5b, 0x16, 0x13, 0x47, 0x89, 0x01, 0xc5, + 0x04, 0x83, 0x38, 0xfc, 0x21, 0x83, 0x58, 0x86, 0x9c, 0x85, 0x5c, 0x0f, 0xd5, 0x68, 0x46, 0x24, + 0x07, 0xcc, 0x29, 0xa0, 0xa0, 0xee, 0x94, 0x4a, 0x7d, 0xa8, 0x94, 0x7a, 0x02, 0xc6, 0x7c, 0x97, + 0x34, 0x47, 0xb7, 0xea, 0x3c, 0x37, 0xe7, 0xe3, 0x3c, 0x99, 0xab, 0x70, 0x9c, 0x8a, 0x61, 0x6a, + 0x01, 0x05, 0x9e, 0x95, 0x65, 0x00, 0xdb, 0x42, 0xf6, 0x9e, 0x56, 0x43, 0x46, 0xa3, 0x98, 0xe9, + 0x11, 0xa5, 0x4d, 0x6c, 0xd2, 0x15, 0x25, 0x9b, 0xb6, 0x1a, 0x0d, 0xe5, 0x81, 0x4e, 0xaa, 0x8d, + 0xf4, 0xc8, 0x94, 0x75, 0xba, 0xc8, 0xba, 0xb2, 0x6d, 0x07, 0x0a, 0x0e, 0xc2, 0x79, 0x8f, 0x6a, + 0xec, 0xcd, 0xb2, 0xc4, 0x89, 0xb9, 0xd8, 0x37, 0x53, 0x19, 0x8c, 0xbe, 0xd8, 0xa8, 0x23, 0x3e, + 0x2a, 0xb7, 0x80, 0xdf, 0xa0, 0x91, 0xb4, 0x02, 0x52, 0x85, 0xf2, 0xbc, 0x71, 0x43, 0x6f, 0xa2, + 0xa9, 0xe7, 0xa1, 0x10, 0x0c, 0x8f, 0x32, 0x09, 0x69, 0xd7, 0xd3, 0x1d, 0x8f, 0x64, 0x61, 0x5a, + 0xa5, 0x0f, 0x8a, 0x0c, 0x49, 0x64, 0xd5, 0x48, 0x95, 0x4b, 0xab, 0xf8, 0x4f, 0xe5, 0xff, 0x75, + 0x5e, 0x38, 0x49, 0x5e, 0xf8, 0xf6, 0xee, 0x19, 0x0d, 0x30, 0x87, 0xdf, 0x7b, 0xea, 0x7e, 0x18, + 0x0d, 0xbc, 0xc0, 0xa0, 0x43, 0xcf, 0xfc, 0x02, 0xdc, 0x10, 0x49, 0xad, 0x3c, 0x01, 0x93, 0x6d, + 0xcb, 0xb4, 0x3c, 0xe4, 0xb4, 0x1c, 0x84, 0x33, 0x96, 0x0e, 0x55, 0xfc, 0xd7, 0x91, 0x1e, 0x39, + 0xb7, 0x23, 0x5a, 0x53, 0x16, 0x75, 0xa2, 0xdd, 0xdd, 0x78, 0x2a, 0x9b, 0x79, 0x7b, 0x44, 0xbe, + 0x76, 0xed, 0xda, 0xb5, 0xc4, 0xcc, 0x8b, 0xc3, 0x30, 0x19, 0xb5, 0x66, 0x22, 0x97, 0xef, 0x31, + 0x18, 0xb6, 0xda, 0xcd, 0x5d, 0xe4, 0x90, 0x20, 0xa5, 0x55, 0xf6, 0xa4, 0x94, 0x21, 0xdd, 0xd0, + 0x77, 0x51, 0xa3, 0x98, 0x3a, 0x21, 0xcd, 0x16, 0x16, 0x4e, 0x0f, 0xb4, 0x2a, 0xe7, 0xd6, 0x30, + 0x44, 0xa5, 0x48, 0xe5, 0x21, 0x48, 0xb1, 0x12, 0x8d, 0x19, 0x4e, 0x0d, 0xc6, 0x80, 0xd7, 0x92, + 0x4a, 0x70, 0xca, 0xa7, 0x20, 0x8b, 0xff, 0xa5, 0xb9, 0x31, 0x4c, 0x7c, 0xce, 0xe0, 0x06, 0x9c, + 0x17, 0xca, 0x14, 0x64, 0xc8, 0x32, 0xa9, 0x21, 0xbe, 0xb5, 0xf9, 0xcf, 0x38, 0xb1, 0x6a, 0x68, + 0x4f, 0x6f, 0x37, 0x3c, 0xed, 0x8a, 0xde, 0x68, 0x23, 0x92, 0xf0, 0x59, 0x35, 0xcf, 0x1a, 0x1f, + 0xc3, 0x6d, 0xca, 0x71, 0xc8, 0xd1, 0x55, 0x65, 0x5a, 0x35, 0xf4, 0x1c, 0xa9, 0x9e, 0x69, 0x95, + 0x2e, 0xb4, 0x55, 0xdc, 0x82, 0x87, 0x7f, 0xc6, 0xb5, 0x2d, 0x9e, 0x9a, 0x64, 0x08, 0xdc, 0x40, + 0x86, 0xbf, 0x3f, 0x5c, 0xb8, 0x6f, 0x8e, 0x7e, 0xbd, 0x70, 0x4e, 0xcd, 0x7c, 0x33, 0x01, 0x29, + 0x52, 0x2f, 0xc6, 0x20, 0xb7, 0xfd, 0xe4, 0x56, 0x45, 0x5b, 0xde, 0xdc, 0x59, 0x5c, 0xab, 0xc8, + 0x92, 0x52, 0x00, 0x20, 0x0d, 0x17, 0xd7, 0x36, 0xcb, 0xdb, 0x72, 0xc2, 0x7f, 0x5e, 0xdd, 0xd8, + 0x3e, 0x77, 0x46, 0x4e, 0xfa, 0x80, 0x1d, 0xda, 0x90, 0x12, 0x0d, 0xee, 0x5b, 0x90, 0xd3, 0x8a, + 0x0c, 0x79, 0x4a, 0xb0, 0xfa, 0x44, 0x65, 0xf9, 0xdc, 0x19, 0x79, 0x38, 0xd8, 0x72, 0xdf, 0x82, + 0x3c, 0xa2, 0x8c, 0x42, 0x96, 0xb4, 0x2c, 0x6e, 0x6e, 0xae, 0xc9, 0x19, 0x9f, 0xb3, 0xba, 0xad, + 0xae, 0x6e, 0xac, 0xc8, 0x59, 0x9f, 0x73, 0x45, 0xdd, 0xdc, 0xd9, 0x92, 0xc1, 0x67, 0x58, 0xaf, + 0x54, 0xab, 0xe5, 0x95, 0x8a, 0x9c, 0xf3, 0x2d, 0x16, 0x9f, 0xdc, 0xae, 0x54, 0xe5, 0x7c, 0xc0, + 0xad, 0xfb, 0x16, 0xe4, 0x51, 0x7f, 0x88, 0xca, 0xc6, 0xce, 0xba, 0x5c, 0x50, 0xc6, 0x61, 0x94, + 0x0e, 0xc1, 0x9d, 0x18, 0x0b, 0x35, 0x9d, 0x3b, 0x23, 0xcb, 0x1d, 0x47, 0x28, 0xcb, 0x78, 0xa0, + 0xe1, 0xdc, 0x19, 0x59, 0x99, 0x59, 0x82, 0x34, 0xc9, 0x2e, 0x45, 0x81, 0xc2, 0x5a, 0x79, 0xb1, + 0xb2, 0xa6, 0x6d, 0x6e, 0x6d, 0xaf, 0x6e, 0x6e, 0x94, 0xd7, 0x64, 0xa9, 0xd3, 0xa6, 0x56, 0x3e, + 0xbb, 0xb3, 0xaa, 0x56, 0x96, 0xe5, 0x84, 0xd8, 0xb6, 0x55, 0x29, 0x6f, 0x57, 0x96, 0xe5, 0xe4, + 0x8c, 0x01, 0x93, 0x51, 0x75, 0x32, 0x72, 0x65, 0x08, 0x53, 0x9c, 0xe8, 0x31, 0xc5, 0x84, 0xab, + 0x6b, 0x8a, 0x7f, 0x92, 0x80, 0x89, 0x88, 0xbd, 0x22, 0x72, 0x90, 0x87, 0x21, 0x4d, 0x53, 0x94, + 0xee, 0x9e, 0x77, 0x46, 0x6e, 0x3a, 0x24, 0x61, 0xbb, 0x76, 0x50, 0x82, 0x13, 0x15, 0x44, 0xb2, + 0x87, 0x82, 0xc0, 0x14, 0x5d, 0x35, 0xfd, 0xe9, 0xae, 0x9a, 0x4e, 0xb7, 0xbd, 0x73, 0x83, 0x6c, + 0x7b, 0xa4, 0xed, 0x68, 0xb5, 0x3d, 0x1d, 0x51, 0xdb, 0x2f, 0xc0, 0x78, 0x17, 0xd1, 0xc0, 0x35, + 0xf6, 0x05, 0x09, 0x8a, 0xbd, 0x82, 0x13, 0x53, 0xe9, 0x12, 0x81, 0x4a, 0x77, 0x21, 0x1c, 0xc1, + 0x93, 0xbd, 0x27, 0xa1, 0x6b, 0xae, 0x5f, 0x93, 0xe0, 0x58, 0xb4, 0x52, 0x8c, 0xf4, 0xe1, 0x21, + 0x18, 0x6e, 0x22, 0x6f, 0xdf, 0xe6, 0x6a, 0xe9, 0xf6, 0x88, 0x3d, 0x18, 0x77, 0x87, 0x27, 0x9b, + 0xa1, 0xc4, 0x4d, 0x3c, 0xd9, 0x4b, 0xee, 0x51, 0x6f, 0xba, 0x3c, 0xfd, 0x7c, 0x02, 0x6e, 0x88, + 0x24, 0x8f, 0x74, 0xf4, 0x66, 0x00, 0xd3, 0x6a, 0xb5, 0x3d, 0xaa, 0x88, 0x68, 0x81, 0xcd, 0x92, + 0x16, 0x52, 0xbc, 0x70, 0xf1, 0x6c, 0x7b, 0x7e, 0x7f, 0x92, 0xf4, 0x03, 0x6d, 0x22, 0x06, 0xe7, + 0x3b, 0x8e, 0xa6, 0x88, 0xa3, 0xd3, 0x3d, 0xde, 0xb4, 0x2b, 0x31, 0xef, 0x01, 0xd9, 0x68, 0x98, + 0xc8, 0xf2, 0x34, 0xd7, 0x73, 0x90, 0xde, 0x34, 0xad, 0x3a, 0xd9, 0x41, 0x32, 0xa5, 0xf4, 0x9e, + 0xde, 0x70, 0x91, 0x3a, 0x46, 0xbb, 0xab, 0xbc, 0x17, 0x23, 0x48, 0x02, 0x39, 0x02, 0x62, 0x38, + 0x80, 0xa0, 0xdd, 0x3e, 0x62, 0xe6, 0x1b, 0x19, 0xc8, 0x09, 0xba, 0x5a, 0x39, 0x09, 0xf9, 0x67, + 0xf4, 0x2b, 0xba, 0xc6, 0xcf, 0x4a, 0x34, 0x12, 0x39, 0xdc, 0xb6, 0xc5, 0xce, 0x4b, 0xf7, 0xc0, + 0x24, 0x31, 0xb1, 0xdb, 0x1e, 0x72, 0x34, 0xa3, 0xa1, 0xbb, 0x2e, 0x09, 0x5a, 0x86, 0x98, 0x2a, + 0xb8, 0x6f, 0x13, 0x77, 0x2d, 0xf1, 0x1e, 0xe5, 0x2c, 0x4c, 0x10, 0x44, 0xb3, 0xdd, 0xf0, 0xcc, + 0x56, 0x03, 0x69, 0xf8, 0xf4, 0xe6, 0x92, 0x9d, 0xc4, 0xf7, 0x6c, 0x1c, 0x5b, 0xac, 0x33, 0x03, + 0xec, 0x91, 0xab, 0x2c, 0xc3, 0xcd, 0x04, 0x56, 0x47, 0x16, 0x72, 0x74, 0x0f, 0x69, 0xe8, 0xd9, + 0xb6, 0xde, 0x70, 0x35, 0xdd, 0xaa, 0x69, 0xfb, 0xba, 0xbb, 0x5f, 0x9c, 0xc4, 0x04, 0x8b, 0x89, + 0xa2, 0xa4, 0xde, 0x84, 0x0d, 0x57, 0x98, 0x5d, 0x85, 0x98, 0x95, 0xad, 0xda, 0x25, 0xdd, 0xdd, + 0x57, 0x4a, 0x70, 0x8c, 0xb0, 0xb8, 0x9e, 0x63, 0x5a, 0x75, 0xcd, 0xd8, 0x47, 0xc6, 0x65, 0xad, + 0xed, 0xed, 0x9d, 0x2f, 0x7e, 0x4a, 0x1c, 0x9f, 0x78, 0x58, 0x25, 0x36, 0x4b, 0xd8, 0x64, 0xc7, + 0xdb, 0x3b, 0xaf, 0x54, 0x21, 0x8f, 0x27, 0xa3, 0x69, 0x3e, 0x8f, 0xb4, 0x3d, 0xdb, 0x21, 0x5b, + 0x63, 0x21, 0xa2, 0x34, 0x09, 0x11, 0x9c, 0xdb, 0x64, 0x80, 0x75, 0xbb, 0x86, 0x4a, 0xe9, 0xea, + 0x56, 0xa5, 0xb2, 0xac, 0xe6, 0x38, 0xcb, 0x45, 0xdb, 0xc1, 0x09, 0x55, 0xb7, 0xfd, 0x00, 0xe7, + 0x68, 0x42, 0xd5, 0x6d, 0x1e, 0xde, 0xb3, 0x30, 0x61, 0x18, 0xf4, 0x9d, 0x4d, 0x43, 0x63, 0x67, + 0x2c, 0xb7, 0x28, 0x07, 0x82, 0x65, 0x18, 0x2b, 0xd4, 0x80, 0xe5, 0xb8, 0xab, 0x3c, 0x00, 0x37, + 0x74, 0x82, 0x25, 0x02, 0xc7, 0xbb, 0xde, 0x32, 0x0c, 0x3d, 0x0b, 0x13, 0xad, 0x83, 0x6e, 0xa0, + 0x12, 0x18, 0xb1, 0x75, 0x10, 0x86, 0xdd, 0x0f, 0x93, 0xad, 0xfd, 0x56, 0x37, 0xee, 0x94, 0x88, + 0x53, 0x5a, 0xfb, 0xad, 0x30, 0xf0, 0x36, 0x72, 0xe0, 0x76, 0x90, 0xa1, 0x7b, 0xa8, 0x56, 0xbc, + 0x51, 0x34, 0x17, 0x3a, 0x94, 0x79, 0x90, 0x0d, 0x43, 0x43, 0x96, 0xbe, 0xdb, 0x40, 0x9a, 0xee, + 0x20, 0x4b, 0x77, 0x8b, 0xc7, 0x45, 0xe3, 0x82, 0x61, 0x54, 0x48, 0x6f, 0x99, 0x74, 0x2a, 0xa7, + 0x60, 0xdc, 0xde, 0x7d, 0xc6, 0xa0, 0x29, 0xa9, 0xb5, 0x1c, 0xb4, 0x67, 0x3e, 0x57, 0xbc, 0x95, + 0xc4, 0x77, 0x0c, 0x77, 0x90, 0x84, 0xdc, 0x22, 0xcd, 0xca, 0x9d, 0x20, 0x1b, 0xee, 0xbe, 0xee, + 0xb4, 0x48, 0x4d, 0x76, 0x5b, 0xba, 0x81, 0x8a, 0xb7, 0x51, 0x53, 0xda, 0xbe, 0xc1, 0x9b, 0xf1, + 0x92, 0x70, 0xaf, 0x9a, 0x7b, 0x1e, 0x67, 0xbc, 0x83, 0x2e, 0x09, 0xd2, 0xc6, 0xd8, 0x66, 0x41, + 0xc6, 0xa1, 0x08, 0x0c, 0x3c, 0x4b, 0xcc, 0x0a, 0xad, 0xfd, 0x96, 0x38, 0xee, 0x2d, 0x30, 0x8a, + 0x2d, 0x3b, 0x83, 0xde, 0x49, 0x05, 0x59, 0x6b, 0x5f, 0x18, 0xf1, 0x23, 0xd3, 0xc6, 0x33, 0x25, + 0xc8, 0x8b, 0xf9, 0xa9, 0x64, 0x81, 0x66, 0xa8, 0x2c, 0x61, 0xb1, 0xb2, 0xb4, 0xb9, 0x8c, 0x65, + 0xc6, 0x53, 0x15, 0x39, 0x81, 0xe5, 0xce, 0xda, 0xea, 0x76, 0x45, 0x53, 0x77, 0x36, 0xb6, 0x57, + 0xd7, 0x2b, 0x72, 0x52, 0xd4, 0xd5, 0xdf, 0x4b, 0x40, 0x21, 0x78, 0x44, 0x52, 0x3e, 0x03, 0x37, + 0xf2, 0xfb, 0x0c, 0x17, 0x79, 0xda, 0x55, 0xd3, 0x21, 0x4b, 0xa6, 0xa9, 0xd3, 0xed, 0xcb, 0x9f, + 0xb4, 0x49, 0x66, 0x55, 0x45, 0xde, 0xe3, 0xa6, 0x83, 0x17, 0x44, 0x53, 0xf7, 0x94, 0x35, 0x38, + 0x6e, 0xd9, 0x9a, 0xeb, 0xe9, 0x56, 0x4d, 0x77, 0x6a, 0x5a, 0xe7, 0x26, 0x49, 0xd3, 0x0d, 0x03, + 0xb9, 0xae, 0x4d, 0xb7, 0x2a, 0x9f, 0xe5, 0xd3, 0x96, 0x5d, 0x65, 0xc6, 0x9d, 0x1a, 0x5e, 0x66, + 0xa6, 0xa1, 0x04, 0x4b, 0xf6, 0x4a, 0xb0, 0x4f, 0x41, 0xb6, 0xa9, 0xb7, 0x34, 0x64, 0x79, 0xce, + 0x01, 0x11, 0xc6, 0x19, 0x35, 0xd3, 0xd4, 0x5b, 0x15, 0xfc, 0xfc, 0xf1, 0x9c, 0x4f, 0x7e, 0x9c, + 0x84, 0xbc, 0x28, 0x8e, 0xf1, 0x59, 0xc3, 0x20, 0xfb, 0x88, 0x44, 0x2a, 0xcd, 0x2d, 0x7d, 0xa5, + 0xf4, 0xdc, 0x12, 0xde, 0x60, 0x4a, 0xc3, 0x54, 0xb2, 0xaa, 0x14, 0x89, 0x37, 0x77, 0x5c, 0x5b, + 0x10, 0x95, 0x08, 0x19, 0x95, 0x3d, 0x29, 0x2b, 0x30, 0xfc, 0x8c, 0x4b, 0xb8, 0x87, 0x09, 0xf7, + 0xad, 0xfd, 0xb9, 0x1f, 0xa9, 0x12, 0xf2, 0xec, 0x23, 0x55, 0x6d, 0x63, 0x53, 0x5d, 0x2f, 0xaf, + 0xa9, 0x0c, 0xae, 0xdc, 0x04, 0xa9, 0x86, 0xfe, 0xfc, 0x41, 0x70, 0x2b, 0x22, 0x4d, 0x83, 0x06, + 0xfe, 0x26, 0x48, 0x5d, 0x45, 0xfa, 0xe5, 0xe0, 0x06, 0x40, 0x9a, 0x3e, 0xc2, 0xd4, 0x9f, 0x87, + 0x34, 0x89, 0x97, 0x02, 0xc0, 0x22, 0x26, 0x0f, 0x29, 0x19, 0x48, 0x2d, 0x6d, 0xaa, 0x38, 0xfd, + 0x65, 0xc8, 0xd3, 0x56, 0x6d, 0x6b, 0xb5, 0xb2, 0x54, 0x91, 0x13, 0x33, 0x67, 0x61, 0x98, 0x06, + 0x01, 0x2f, 0x0d, 0x3f, 0x0c, 0xf2, 0x10, 0x7b, 0x64, 0x1c, 0x12, 0xef, 0xdd, 0x59, 0x5f, 0xac, + 0xa8, 0x72, 0x42, 0x9c, 0x5e, 0x17, 0xf2, 0xa2, 0x2e, 0xfe, 0x78, 0x72, 0xea, 0x3b, 0x12, 0xe4, + 0x04, 0x9d, 0x8b, 0x05, 0x8a, 0xde, 0x68, 0xd8, 0x57, 0x35, 0xbd, 0x61, 0xea, 0x2e, 0x4b, 0x0a, + 0x20, 0x4d, 0x65, 0xdc, 0x32, 0xe8, 0xa4, 0x7d, 0x2c, 0xce, 0xbf, 0x22, 0x81, 0x1c, 0x96, 0x98, + 0x21, 0x07, 0xa5, 0x9f, 0xab, 0x83, 0x2f, 0x4b, 0x50, 0x08, 0xea, 0xca, 0x90, 0x7b, 0x27, 0x7f, + 0xae, 0xee, 0xbd, 0x99, 0x80, 0xd1, 0x80, 0x9a, 0x1c, 0xd4, 0xbb, 0x67, 0x61, 0xdc, 0xac, 0xa1, + 0x66, 0xcb, 0xf6, 0x90, 0x65, 0x1c, 0x68, 0x0d, 0x74, 0x05, 0x35, 0x8a, 0x33, 0xa4, 0x50, 0xcc, + 0xf7, 0xd7, 0xab, 0x73, 0xab, 0x1d, 0xdc, 0x1a, 0x86, 0x95, 0x26, 0x56, 0x97, 0x2b, 0xeb, 0x5b, + 0x9b, 0xdb, 0x95, 0x8d, 0xa5, 0x27, 0xb5, 0x9d, 0x8d, 0x47, 0x37, 0x36, 0x1f, 0xdf, 0x50, 0x65, + 0x33, 0x64, 0xf6, 0x11, 0x2e, 0xf5, 0x2d, 0x90, 0xc3, 0x4e, 0x29, 0x37, 0x42, 0x94, 0x5b, 0xf2, + 0x90, 0x32, 0x01, 0x63, 0x1b, 0x9b, 0x5a, 0x75, 0x75, 0xb9, 0xa2, 0x55, 0x2e, 0x5e, 0xac, 0x2c, + 0x6d, 0x57, 0xe9, 0x0d, 0x84, 0x6f, 0xbd, 0x1d, 0x5c, 0xd4, 0x2f, 0x25, 0x61, 0x22, 0xc2, 0x13, + 0xa5, 0xcc, 0xce, 0x0e, 0xf4, 0x38, 0x73, 0xf7, 0x20, 0xde, 0xcf, 0xe1, 0x2d, 0x7f, 0x4b, 0x77, + 0x3c, 0x76, 0xd4, 0xb8, 0x13, 0x70, 0x94, 0x2c, 0xcf, 0xdc, 0x33, 0x91, 0xc3, 0x2e, 0x6c, 0xe8, + 0x81, 0x62, 0xac, 0xd3, 0x4e, 0xef, 0x6c, 0xee, 0x02, 0xa5, 0x65, 0xbb, 0xa6, 0x67, 0x5e, 0x41, + 0x9a, 0x69, 0xf1, 0xdb, 0x1d, 0x7c, 0xc0, 0x48, 0xa9, 0x32, 0xef, 0x59, 0xb5, 0x3c, 0xdf, 0xda, + 0x42, 0x75, 0x3d, 0x64, 0x8d, 0x0b, 0x78, 0x52, 0x95, 0x79, 0x8f, 0x6f, 0x7d, 0x12, 0xf2, 0x35, + 0xbb, 0x8d, 0x55, 0x17, 0xb5, 0xc3, 0xfb, 0x85, 0xa4, 0xe6, 0x68, 0x9b, 0x6f, 0xc2, 0xf4, 0x74, + 0xe7, 0x5a, 0x29, 0xaf, 0xe6, 0x68, 0x1b, 0x35, 0xb9, 0x03, 0xc6, 0xf4, 0x7a, 0xdd, 0xc1, 0xe4, + 0x9c, 0x88, 0x9e, 0x10, 0x0a, 0x7e, 0x33, 0x31, 0x9c, 0x7a, 0x04, 0x32, 0x3c, 0x0e, 0x78, 0x4b, + 0xc6, 0x91, 0xd0, 0x5a, 0xf4, 0xd8, 0x9b, 0x98, 0xcd, 0xaa, 0x19, 0x8b, 0x77, 0x9e, 0x84, 0xbc, + 0xe9, 0x6a, 0x9d, 0x5b, 0xf2, 0xc4, 0x89, 0xc4, 0x6c, 0x46, 0xcd, 0x99, 0xae, 0x7f, 0xc3, 0x38, + 0xf3, 0x5a, 0x02, 0x0a, 0xc1, 0x5b, 0x7e, 0x65, 0x19, 0x32, 0x0d, 0xdb, 0xd0, 0x49, 0x6a, 0xd1, + 0x4f, 0x4c, 0xb3, 0x31, 0x1f, 0x06, 0xe6, 0xd6, 0x98, 0xbd, 0xea, 0x23, 0xa7, 0xfe, 0x45, 0x82, + 0x0c, 0x6f, 0x56, 0x8e, 0x41, 0xaa, 0xa5, 0x7b, 0xfb, 0x84, 0x2e, 0xbd, 0x98, 0x90, 0x25, 0x95, + 0x3c, 0xe3, 0x76, 0xb7, 0xa5, 0x5b, 0x24, 0x05, 0x58, 0x3b, 0x7e, 0xc6, 0xf3, 0xda, 0x40, 0x7a, + 0x8d, 0x1c, 0x3f, 0xec, 0x66, 0x13, 0x59, 0x9e, 0xcb, 0xe7, 0x95, 0xb5, 0x2f, 0xb1, 0x66, 0xe5, + 0x34, 0x8c, 0x7b, 0x8e, 0x6e, 0x36, 0x02, 0xb6, 0x29, 0x62, 0x2b, 0xf3, 0x0e, 0xdf, 0xb8, 0x04, + 0x37, 0x71, 0xde, 0x1a, 0xf2, 0x74, 0x63, 0x1f, 0xd5, 0x3a, 0xa0, 0x61, 0x72, 0xcd, 0x70, 0x23, + 0x33, 0x58, 0x66, 0xfd, 0x1c, 0x3b, 0xf3, 0x03, 0x09, 0xc6, 0xf9, 0x81, 0xa9, 0xe6, 0x07, 0x6b, + 0x1d, 0x40, 0xb7, 0x2c, 0xdb, 0x13, 0xc3, 0xd5, 0x9d, 0xca, 0x5d, 0xb8, 0xb9, 0xb2, 0x0f, 0x52, + 0x05, 0x82, 0xa9, 0x26, 0x40, 0xa7, 0xa7, 0x67, 0xd8, 0x8e, 0x43, 0x8e, 0x7d, 0xc2, 0x21, 0xdf, + 0x01, 0xe9, 0x11, 0x1b, 0x68, 0x13, 0x3e, 0x59, 0x29, 0x93, 0x90, 0xde, 0x45, 0x75, 0xd3, 0x62, + 0x17, 0xb3, 0xf4, 0x81, 0x5f, 0x84, 0xa4, 0xfc, 0x8b, 0x90, 0xc5, 0xcf, 0xc1, 0x84, 0x61, 0x37, + 0xc3, 0xee, 0x2e, 0xca, 0xa1, 0x63, 0xbe, 0x7b, 0x49, 0x7a, 0x0a, 0x3a, 0x12, 0xf3, 0x7d, 0x49, + 0xfa, 0x52, 0x22, 0xb9, 0xb2, 0xb5, 0xf8, 0xd5, 0xc4, 0xd4, 0x0a, 0x85, 0x6e, 0xf1, 0x37, 0x55, + 0xd1, 0x5e, 0x03, 0x19, 0xd8, 0x7b, 0xf8, 0xf2, 0x69, 0xb8, 0xbb, 0x6e, 0x7a, 0xfb, 0xed, 0xdd, + 0x39, 0xc3, 0x6e, 0xce, 0xd7, 0xed, 0xba, 0xdd, 0xf9, 0xf4, 0x89, 0x9f, 0xc8, 0x03, 0xf9, 0x8b, + 0x7d, 0xfe, 0xcc, 0xfa, 0xad, 0x53, 0xb1, 0xdf, 0x4a, 0x4b, 0x1b, 0x30, 0xc1, 0x8c, 0x35, 0xf2, + 0xfd, 0x85, 0x9e, 0x22, 0x94, 0xbe, 0x77, 0x58, 0xc5, 0xaf, 0xbf, 0x45, 0xb6, 0x6b, 0x75, 0x9c, + 0x41, 0x71, 0x1f, 0x3d, 0x68, 0x94, 0x54, 0xb8, 0x21, 0xc0, 0x47, 0x97, 0x26, 0x72, 0x62, 0x18, + 0xbf, 0xc7, 0x18, 0x27, 0x04, 0xc6, 0x2a, 0x83, 0x96, 0x96, 0x60, 0xf4, 0x28, 0x5c, 0xff, 0xc8, + 0xb8, 0xf2, 0x48, 0x24, 0x59, 0x81, 0x31, 0x42, 0x62, 0xb4, 0x5d, 0xcf, 0x6e, 0x92, 0xba, 0xd7, + 0x9f, 0xe6, 0x9f, 0xde, 0xa2, 0x6b, 0xa5, 0x80, 0x61, 0x4b, 0x3e, 0xaa, 0x54, 0x02, 0xf2, 0xc9, + 0xa9, 0x86, 0x8c, 0x46, 0x0c, 0xc3, 0xeb, 0xcc, 0x11, 0xdf, 0xbe, 0xf4, 0x18, 0x4c, 0xe2, 0xbf, + 0x49, 0x59, 0x12, 0x3d, 0x89, 0xbf, 0xf0, 0x2a, 0xfe, 0xe0, 0x05, 0xba, 0x1c, 0x27, 0x7c, 0x02, + 0xc1, 0x27, 0x61, 0x16, 0xeb, 0xc8, 0xf3, 0x90, 0xe3, 0x6a, 0x7a, 0x23, 0xca, 0x3d, 0xe1, 0xc6, + 0xa0, 0xf8, 0x85, 0x77, 0x82, 0xb3, 0xb8, 0x42, 0x91, 0xe5, 0x46, 0xa3, 0xb4, 0x03, 0x37, 0x46, + 0x64, 0xc5, 0x00, 0x9c, 0x2f, 0x31, 0xce, 0xc9, 0xae, 0xcc, 0xc0, 0xb4, 0x5b, 0xc0, 0xdb, 0xfd, + 0xb9, 0x1c, 0x80, 0xf3, 0x0f, 0x19, 0xa7, 0xc2, 0xb0, 0x7c, 0x4a, 0x31, 0xe3, 0x23, 0x30, 0x7e, + 0x05, 0x39, 0xbb, 0xb6, 0xcb, 0x6e, 0x69, 0x06, 0xa0, 0x7b, 0x99, 0xd1, 0x8d, 0x31, 0x20, 0xb9, + 0xb6, 0xc1, 0x5c, 0x0f, 0x40, 0x66, 0x4f, 0x37, 0xd0, 0x00, 0x14, 0x5f, 0x64, 0x14, 0x23, 0xd8, + 0x1e, 0x43, 0xcb, 0x90, 0xaf, 0xdb, 0x6c, 0x67, 0x8a, 0x87, 0xbf, 0xc2, 0xe0, 0x39, 0x8e, 0x61, + 0x14, 0x2d, 0xbb, 0xd5, 0x6e, 0xe0, 0x6d, 0x2b, 0x9e, 0xe2, 0x8f, 0x38, 0x05, 0xc7, 0x30, 0x8a, + 0x23, 0x84, 0xf5, 0x8f, 0x39, 0x85, 0x2b, 0xc4, 0xf3, 0x61, 0xc8, 0xd9, 0x56, 0xe3, 0xc0, 0xb6, + 0x06, 0x71, 0xe2, 0x55, 0xc6, 0x00, 0x0c, 0x82, 0x09, 0x2e, 0x40, 0x76, 0xd0, 0x89, 0xf8, 0xd3, + 0x77, 0xf8, 0xf2, 0xe0, 0x33, 0xb0, 0x02, 0x63, 0xbc, 0x40, 0x99, 0xb6, 0x35, 0x00, 0xc5, 0x97, + 0x19, 0x45, 0x41, 0x80, 0xb1, 0xd7, 0xf0, 0x90, 0xeb, 0xd5, 0xd1, 0x20, 0x24, 0xaf, 0xf1, 0xd7, + 0x60, 0x10, 0x16, 0xca, 0x5d, 0x64, 0x19, 0xfb, 0x83, 0x31, 0x7c, 0x85, 0x87, 0x92, 0x63, 0x30, + 0xc5, 0x12, 0x8c, 0x36, 0x75, 0xc7, 0xdd, 0xd7, 0x1b, 0x03, 0x4d, 0xc7, 0x9f, 0x31, 0x8e, 0xbc, + 0x0f, 0x62, 0x11, 0x69, 0x5b, 0x47, 0xa1, 0xf9, 0x2a, 0x8f, 0x88, 0x00, 0x63, 0x4b, 0xcf, 0xf5, + 0xc8, 0x95, 0xd6, 0x51, 0xd8, 0xfe, 0x9c, 0x2f, 0x3d, 0x8a, 0x5d, 0x17, 0x19, 0x2f, 0x40, 0xd6, + 0x35, 0x9f, 0x1f, 0x88, 0xe6, 0x2f, 0xf8, 0x4c, 0x13, 0x00, 0x06, 0x3f, 0x09, 0x37, 0x45, 0x6e, + 0x13, 0x03, 0x90, 0xfd, 0x25, 0x23, 0x3b, 0x16, 0xb1, 0x55, 0xb0, 0x92, 0x70, 0x54, 0xca, 0xbf, + 0xe2, 0x25, 0x01, 0x85, 0xb8, 0xb6, 0xf0, 0x59, 0xc1, 0xd5, 0xf7, 0x8e, 0x16, 0xb5, 0xbf, 0xe6, + 0x51, 0xa3, 0xd8, 0x40, 0xd4, 0xb6, 0xe1, 0x18, 0x63, 0x3c, 0xda, 0xbc, 0x7e, 0x8d, 0x17, 0x56, + 0x8a, 0xde, 0x09, 0xce, 0xee, 0xe7, 0x60, 0xca, 0x0f, 0x27, 0x17, 0xa5, 0xae, 0xd6, 0xd4, 0x5b, + 0x03, 0x30, 0x7f, 0x9d, 0x31, 0xf3, 0x8a, 0xef, 0xab, 0x5a, 0x77, 0x5d, 0x6f, 0x61, 0xf2, 0x27, + 0xa0, 0xc8, 0xc9, 0xdb, 0x96, 0x83, 0x0c, 0xbb, 0x6e, 0x99, 0xcf, 0xa3, 0xda, 0x00, 0xd4, 0x7f, + 0x13, 0x9a, 0xaa, 0x1d, 0x01, 0x8e, 0x99, 0x57, 0x41, 0xf6, 0xb5, 0x8a, 0x66, 0x36, 0x5b, 0xb6, + 0xe3, 0xc5, 0x30, 0x7e, 0x83, 0xcf, 0x94, 0x8f, 0x5b, 0x25, 0xb0, 0x52, 0x05, 0x0a, 0xe4, 0x71, + 0xd0, 0x94, 0xfc, 0x5b, 0x46, 0x34, 0xda, 0x41, 0xb1, 0xc2, 0x61, 0xd8, 0xcd, 0x96, 0xee, 0x0c, + 0x52, 0xff, 0xfe, 0x8e, 0x17, 0x0e, 0x06, 0x61, 0x85, 0xc3, 0x3b, 0x68, 0x21, 0xbc, 0xdb, 0x0f, + 0xc0, 0xf0, 0x4d, 0x5e, 0x38, 0x38, 0x86, 0x51, 0x70, 0xc1, 0x30, 0x00, 0xc5, 0xdf, 0x73, 0x0a, + 0x8e, 0xc1, 0x14, 0x9f, 0xed, 0x6c, 0xb4, 0x0e, 0xaa, 0x9b, 0xae, 0xe7, 0x50, 0x29, 0xdc, 0x9f, + 0xea, 0x5b, 0xef, 0x04, 0x45, 0x98, 0x2a, 0x40, 0x71, 0x25, 0x62, 0x57, 0xa8, 0xe4, 0xa4, 0x14, + 0xef, 0xd8, 0xb7, 0x79, 0x25, 0x12, 0x60, 0xd8, 0x37, 0x41, 0x21, 0xe2, 0xb0, 0x1b, 0xf8, 0x7c, + 0x30, 0x00, 0xdd, 0x77, 0x42, 0xce, 0x55, 0x39, 0x16, 0x73, 0x0a, 0xfa, 0xa7, 0x6d, 0x5d, 0x46, + 0x07, 0x03, 0x65, 0xe7, 0x3f, 0x84, 0xf4, 0xcf, 0x0e, 0x45, 0xd2, 0x1a, 0x32, 0x16, 0xd2, 0x53, + 0x4a, 0xdc, 0x8f, 0x75, 0x8a, 0xbf, 0xf4, 0x1e, 0x7b, 0xdf, 0xa0, 0x9c, 0x2a, 0xad, 0xe1, 0x24, + 0x0f, 0x8a, 0x9e, 0x78, 0xb2, 0x17, 0xde, 0xf3, 0xf3, 0x3c, 0xa0, 0x79, 0x4a, 0x17, 0x61, 0x34, + 0x20, 0x78, 0xe2, 0xa9, 0x7e, 0x99, 0x51, 0xe5, 0x45, 0xbd, 0x53, 0x3a, 0x0b, 0x29, 0x2c, 0x5e, + 0xe2, 0xe1, 0xbf, 0xc2, 0xe0, 0xc4, 0xbc, 0xf4, 0x20, 0x64, 0xb8, 0x68, 0x89, 0x87, 0xfe, 0x2a, + 0x83, 0xfa, 0x10, 0x0c, 0xe7, 0x82, 0x25, 0x1e, 0xfe, 0x6b, 0x1c, 0xce, 0x21, 0x18, 0x3e, 0x78, + 0x08, 0xbf, 0xfb, 0xeb, 0x29, 0xb6, 0xe9, 0xf0, 0xd8, 0x5d, 0x80, 0x11, 0xa6, 0x54, 0xe2, 0xd1, + 0x9f, 0x67, 0x83, 0x73, 0x44, 0xe9, 0x7e, 0x48, 0x0f, 0x18, 0xf0, 0xdf, 0x60, 0x50, 0x6a, 0x5f, + 0x5a, 0x82, 0x9c, 0xa0, 0x4e, 0xe2, 0xe1, 0xbf, 0xc9, 0xe0, 0x22, 0x0a, 0xbb, 0xce, 0xd4, 0x49, + 0x3c, 0xc1, 0x6f, 0x71, 0xd7, 0x19, 0x02, 0x87, 0x8d, 0x0b, 0x93, 0x78, 0xf4, 0x6f, 0xf3, 0xa8, + 0x73, 0x48, 0xe9, 0x61, 0xc8, 0xfa, 0x9b, 0x4d, 0x3c, 0xfe, 0x77, 0x18, 0xbe, 0x83, 0xc1, 0x11, + 0x10, 0x36, 0xbb, 0x78, 0x8a, 0xdf, 0xe5, 0x11, 0x10, 0x50, 0x78, 0x19, 0x85, 0x05, 0x4c, 0x3c, + 0xd3, 0xef, 0xf1, 0x65, 0x14, 0xd2, 0x2f, 0x78, 0x36, 0x49, 0xcd, 0x8f, 0xa7, 0xf8, 0x7d, 0x3e, + 0x9b, 0xc4, 0x1e, 0xbb, 0x11, 0x56, 0x04, 0xf1, 0x1c, 0x7f, 0xc0, 0xdd, 0x08, 0x09, 0x82, 0xd2, + 0x16, 0x28, 0xdd, 0x6a, 0x20, 0x9e, 0xef, 0x45, 0xc6, 0x37, 0xde, 0x25, 0x06, 0x4a, 0x8f, 0xc3, + 0xb1, 0x68, 0x25, 0x10, 0xcf, 0xfa, 0x85, 0xf7, 0x42, 0x67, 0x37, 0x51, 0x08, 0x94, 0xb6, 0x3b, + 0x5b, 0x8a, 0xa8, 0x02, 0xe2, 0x69, 0x5f, 0x7a, 0x2f, 0x58, 0xb8, 0x45, 0x11, 0x50, 0x2a, 0x03, + 0x74, 0x36, 0xe0, 0x78, 0xae, 0x97, 0x19, 0x97, 0x00, 0xc2, 0x4b, 0x83, 0xed, 0xbf, 0xf1, 0xf8, + 0x2f, 0xf2, 0xa5, 0xc1, 0x10, 0x78, 0x69, 0xf0, 0xad, 0x37, 0x1e, 0xfd, 0x0a, 0x5f, 0x1a, 0x1c, + 0x82, 0x33, 0x5b, 0xd8, 0xdd, 0xe2, 0x19, 0x5e, 0xe5, 0x99, 0x2d, 0xa0, 0x4a, 0x1b, 0x30, 0xde, + 0xb5, 0x21, 0xc6, 0x53, 0x7d, 0x89, 0x51, 0xc9, 0xe1, 0xfd, 0x50, 0xdc, 0xbc, 0xd8, 0x66, 0x18, + 0xcf, 0xf6, 0x27, 0xa1, 0xcd, 0x8b, 0xed, 0x85, 0xa5, 0x0b, 0x90, 0xb1, 0xda, 0x8d, 0x06, 0x5e, + 0x3c, 0x4a, 0xff, 0x1f, 0xd8, 0x15, 0xff, 0xed, 0x03, 0x16, 0x1d, 0x0e, 0x28, 0x9d, 0x85, 0x34, + 0x6a, 0xee, 0xa2, 0x5a, 0x1c, 0xf2, 0xdf, 0x3f, 0xe0, 0x05, 0x13, 0x5b, 0x97, 0x1e, 0x06, 0xa0, + 0x57, 0x23, 0xe4, 0xb3, 0x5f, 0x0c, 0xf6, 0x3f, 0x3e, 0x60, 0x3f, 0x7d, 0xe9, 0x40, 0x3a, 0x04, + 0xf4, 0x87, 0x34, 0xfd, 0x09, 0xde, 0x09, 0x12, 0x90, 0x19, 0x79, 0x00, 0x46, 0x9e, 0x71, 0x6d, + 0xcb, 0xd3, 0xeb, 0x71, 0xe8, 0xff, 0x64, 0x68, 0x6e, 0x8f, 0x03, 0xd6, 0xb4, 0x1d, 0xe4, 0xe9, + 0x75, 0x37, 0x0e, 0xfb, 0x5f, 0x0c, 0xeb, 0x03, 0x30, 0xd8, 0xd0, 0x5d, 0x6f, 0x90, 0xf7, 0xfe, + 0x29, 0x07, 0x73, 0x00, 0x76, 0x1a, 0xff, 0x7d, 0x19, 0x1d, 0xc4, 0x61, 0xdf, 0xe5, 0x4e, 0x33, + 0xfb, 0xd2, 0x83, 0x90, 0xc5, 0x7f, 0xd2, 0xdf, 0xb3, 0xc5, 0x80, 0xff, 0x9b, 0x81, 0x3b, 0x08, + 0x3c, 0xb2, 0xeb, 0xd5, 0x3c, 0x33, 0x3e, 0xd8, 0x3f, 0x63, 0x33, 0xcd, 0xed, 0x4b, 0x65, 0xc8, + 0xb9, 0x5e, 0xad, 0xd6, 0x66, 0xfa, 0x34, 0x06, 0xfe, 0x3f, 0x1f, 0xf8, 0x57, 0x16, 0x3e, 0x06, + 0xcf, 0xf6, 0xd5, 0xcb, 0x5e, 0xcb, 0x26, 0x9f, 0x39, 0xe2, 0x18, 0xde, 0x63, 0x0c, 0x02, 0x64, + 0xb1, 0x12, 0x7d, 0x7d, 0x0b, 0x2b, 0xf6, 0x8a, 0x4d, 0x2f, 0x6e, 0x9f, 0x9a, 0x89, 0xbf, 0x81, + 0x85, 0x9f, 0xdd, 0x0d, 0x9f, 0x36, 0xec, 0xe6, 0xae, 0xed, 0xce, 0xef, 0xda, 0xde, 0xfe, 0x7c, + 0x53, 0x6f, 0xb9, 0xa4, 0x67, 0x81, 0xdd, 0xcb, 0xe6, 0xd8, 0x13, 0xee, 0x98, 0x3a, 0xda, 0x9d, + 0xee, 0xcc, 0xcd, 0x30, 0x7a, 0xb1, 0x61, 0xeb, 0x9e, 0x69, 0xd5, 0xb7, 0xb0, 0xdb, 0x4a, 0x1e, + 0xa4, 0x3d, 0xf2, 0x4d, 0x52, 0x52, 0xa5, 0xbd, 0x99, 0x7f, 0x4e, 0x43, 0x96, 0x5e, 0x07, 0xae, + 0xeb, 0x2d, 0xe5, 0x17, 0x21, 0xbf, 0xc1, 0xd6, 0xe0, 0xbd, 0x0b, 0xe7, 0x5d, 0xff, 0xf3, 0x83, + 0x30, 0xfe, 0x9c, 0x6f, 0x3d, 0x27, 0x9a, 0x92, 0xdf, 0x20, 0x2c, 0xde, 0xf3, 0xa3, 0x37, 0x8e, + 0xdf, 0xd5, 0xd3, 0x3f, 0xac, 0x2a, 0xe6, 0xe9, 0x62, 0x99, 0xdb, 0x31, 0x2d, 0xef, 0xde, 0x85, + 0xf3, 0x6a, 0x60, 0x3c, 0xe5, 0x0a, 0x64, 0x58, 0x87, 0xcb, 0x3e, 0x4b, 0xdd, 0xda, 0x63, 0x6c, + 0x6e, 0x46, 0xc7, 0x3d, 0xf3, 0xfa, 0x1b, 0xc7, 0x87, 0x8e, 0x3c, 0xb6, 0x3f, 0x96, 0xf2, 0x2c, + 0xe4, 0xb8, 0x1f, 0xab, 0x35, 0x97, 0xfd, 0x37, 0x84, 0x3b, 0x62, 0x5e, 0x7b, 0xb5, 0xc6, 0x46, + 0xbf, 0xfd, 0x47, 0x6f, 0x1c, 0x9f, 0xe9, 0x3b, 0xf2, 0xdc, 0x4e, 0xdb, 0xac, 0xa9, 0xe2, 0x18, + 0xca, 0xd3, 0x90, 0xc4, 0x43, 0xd1, 0x5f, 0x6e, 0x1e, 0xef, 0x31, 0x94, 0x3f, 0xc4, 0x29, 0xf6, + 0x82, 0x83, 0x0c, 0x83, 0x79, 0xa7, 0x1e, 0x86, 0xf1, 0xae, 0xe9, 0x51, 0x64, 0x48, 0x5e, 0x46, + 0x07, 0xec, 0x27, 0x72, 0xf8, 0x4f, 0x65, 0xb2, 0xf3, 0x1b, 0x56, 0x69, 0x36, 0xcf, 0x7e, 0x98, + 0x5a, 0x4a, 0x9c, 0x97, 0xa6, 0x2e, 0xc0, 0x68, 0x20, 0xc6, 0x47, 0x02, 0x3f, 0x04, 0x72, 0x38, + 0x4a, 0x47, 0xc2, 0x9f, 0x83, 0xcc, 0x87, 0xc1, 0xcd, 0xfc, 0x50, 0x81, 0x91, 0x72, 0xa3, 0xb1, + 0xae, 0xb7, 0x5c, 0xe5, 0x49, 0x18, 0xa7, 0x67, 0x9f, 0x6d, 0x7b, 0x99, 0x7c, 0x08, 0x5c, 0xd7, + 0x5b, 0x2c, 0xa1, 0x4f, 0x07, 0xc2, 0xcd, 0x00, 0x73, 0x5d, 0xd6, 0x64, 0x7c, 0xb5, 0x9b, 0x45, + 0x79, 0x0c, 0x64, 0xde, 0x48, 0xd6, 0x16, 0x66, 0xa6, 0xe9, 0x7a, 0xaa, 0x2f, 0x33, 0x37, 0xa6, + 0xc4, 0x5d, 0x1c, 0xca, 0x43, 0x90, 0x59, 0xb5, 0xbc, 0xfb, 0x16, 0x30, 0x1f, 0xcd, 0xc1, 0x99, + 0x48, 0x3e, 0x6e, 0x44, 0x79, 0x7c, 0x0c, 0xc3, 0x9f, 0x3b, 0x83, 0xf1, 0xa9, 0xfe, 0x78, 0x62, + 0xd4, 0xc1, 0x93, 0x47, 0xa5, 0x0c, 0x59, 0x3c, 0xe7, 0xd4, 0x01, 0xfa, 0x3f, 0x60, 0x6e, 0x89, + 0x24, 0xf0, 0xad, 0x28, 0x43, 0x07, 0xc5, 0x29, 0xa8, 0x0f, 0xc3, 0x31, 0x14, 0x82, 0x13, 0x1d, + 0x14, 0xa6, 0xa8, 0xfa, 0x5e, 0x8c, 0xf4, 0xa1, 0xa8, 0x86, 0xbc, 0xa8, 0x8a, 0x5e, 0x54, 0x7d, + 0x2f, 0x32, 0x31, 0x14, 0xa2, 0x17, 0xfe, 0xb3, 0xb2, 0x0c, 0x70, 0xd1, 0x7c, 0x0e, 0xd5, 0xa8, + 0x1b, 0xd9, 0x88, 0x62, 0xc4, 0x39, 0x3a, 0x66, 0x94, 0x44, 0xc0, 0x29, 0x2b, 0x90, 0xab, 0xee, + 0x75, 0x68, 0x80, 0xfd, 0x07, 0xa0, 0x48, 0x57, 0xf6, 0x42, 0x3c, 0x22, 0xd2, 0x77, 0x87, 0xbe, + 0x52, 0x2e, 0xce, 0x1d, 0xe1, 0x9d, 0x04, 0x5c, 0xc7, 0x1d, 0x4a, 0x93, 0x8f, 0x75, 0x47, 0xe0, + 0x11, 0x91, 0xca, 0x05, 0x18, 0x59, 0xb4, 0x6d, 0x6c, 0x59, 0x1c, 0x25, 0x24, 0x27, 0x23, 0x49, + 0x98, 0x0d, 0x25, 0xe0, 0x08, 0x32, 0x3b, 0x24, 0xf5, 0x31, 0xbc, 0xd0, 0x6f, 0x76, 0xb8, 0x15, + 0x9f, 0x1d, 0xfe, 0x2c, 0xae, 0xc0, 0xc5, 0x03, 0x0f, 0xe1, 0x73, 0x46, 0x71, 0x6c, 0x80, 0x15, + 0xc8, 0x8d, 0x43, 0x2b, 0x90, 0x37, 0x2b, 0x55, 0x18, 0xe3, 0x6d, 0x15, 0xab, 0x8d, 0x6b, 0x70, + 0x51, 0x66, 0xbf, 0xee, 0xef, 0x47, 0xcb, 0x6c, 0x29, 0x6b, 0x98, 0x41, 0xd9, 0x82, 0x02, 0x6f, + 0x5a, 0x77, 0xc9, 0x4b, 0x8f, 0x47, 0xec, 0xab, 0x61, 0x4e, 0x6a, 0x4a, 0x29, 0x43, 0xf8, 0xa9, + 0x65, 0x38, 0x16, 0x5d, 0xad, 0xe2, 0xaa, 0xa5, 0x24, 0x56, 0xd9, 0x25, 0xb8, 0x21, 0xb2, 0x32, + 0xc5, 0x91, 0x24, 0x42, 0xfb, 0x44, 0xa0, 0x1c, 0x89, 0xe0, 0x74, 0x04, 0x38, 0xdd, 0x0d, 0xee, + 0x24, 0x99, 0x08, 0x4e, 0x46, 0x80, 0x93, 0x22, 0xf8, 0x33, 0x50, 0x08, 0xd6, 0x21, 0x11, 0x3d, + 0x1a, 0x81, 0x1e, 0x8d, 0x40, 0x47, 0x8f, 0x9d, 0x8a, 0x40, 0xa7, 0x42, 0xe8, 0x6a, 0xcf, 0xb1, + 0xc7, 0x23, 0xd0, 0xe3, 0x11, 0xe8, 0xe8, 0xb1, 0x95, 0x08, 0xb4, 0x22, 0xa2, 0x1f, 0x84, 0xb1, + 0x50, 0xc9, 0x11, 0xe1, 0x23, 0x11, 0xf0, 0x91, 0xd0, 0xde, 0x1c, 0x2e, 0x35, 0x22, 0x7e, 0x2c, + 0x02, 0x3f, 0x16, 0x35, 0x7c, 0xb4, 0xf7, 0xc3, 0x11, 0xf0, 0xe1, 0xc8, 0xe1, 0xa3, 0xf1, 0x72, + 0x04, 0x5e, 0x16, 0xf1, 0x25, 0xc8, 0x8b, 0x55, 0x45, 0xc4, 0x66, 0x22, 0xb0, 0x99, 0x70, 0xdc, + 0x03, 0x25, 0x25, 0x2e, 0xd3, 0xb3, 0x3d, 0x96, 0x4b, 0xa0, 0x8c, 0x1c, 0x49, 0xd9, 0x3c, 0x01, + 0x93, 0x51, 0x45, 0x23, 0x82, 0xe3, 0x94, 0xc8, 0x51, 0x58, 0x98, 0x0c, 0x14, 0x0b, 0x82, 0x6b, + 0x37, 0x45, 0xe6, 0xa7, 0x61, 0x22, 0xa2, 0x74, 0x44, 0x10, 0xdf, 0x23, 0x12, 0xe7, 0x16, 0xa6, + 0x02, 0xc4, 0x81, 0xb3, 0x82, 0x28, 0xad, 0x7e, 0x3c, 0x01, 0x05, 0x56, 0xa2, 0x36, 0x9d, 0x1a, + 0x72, 0x50, 0x4d, 0xf9, 0xff, 0xbd, 0x15, 0xd6, 0x42, 0x54, 0x69, 0x63, 0xb8, 0x23, 0x08, 0xad, + 0xa7, 0x7b, 0x0a, 0xad, 0x7b, 0x07, 0x19, 0x20, 0x4e, 0x6f, 0x55, 0xba, 0xf4, 0xd6, 0x9d, 0xfd, + 0x68, 0x7b, 0xc9, 0xae, 0x4a, 0x97, 0xec, 0x8a, 0xa3, 0x89, 0x54, 0x5f, 0x97, 0xba, 0xd5, 0xd7, + 0xa9, 0x7e, 0x3c, 0xbd, 0x45, 0xd8, 0xa5, 0x6e, 0x11, 0x16, 0xcb, 0x14, 0xad, 0xc5, 0x2e, 0x75, + 0x6b, 0xb1, 0xbe, 0x4c, 0xbd, 0x25, 0xd9, 0xa5, 0x6e, 0x49, 0x16, 0xcb, 0x14, 0xad, 0xcc, 0x1e, + 0x8d, 0x50, 0x66, 0xa7, 0xfb, 0x51, 0xf5, 0x13, 0x68, 0x1b, 0x51, 0x02, 0xed, 0xae, 0xbe, 0x8e, + 0xf5, 0xd5, 0x69, 0x8f, 0x46, 0xe8, 0xb4, 0x78, 0xe7, 0x7a, 0xc8, 0xb5, 0x8d, 0x28, 0xb9, 0x36, + 0x80, 0x73, 0xbd, 0x54, 0xdb, 0x62, 0x58, 0xb5, 0xcd, 0xf6, 0xe3, 0x8a, 0x16, 0x6f, 0x97, 0xba, + 0xc5, 0xdb, 0xa9, 0xf8, 0xb5, 0x18, 0xa5, 0xe1, 0x9e, 0xee, 0xa9, 0xe1, 0x06, 0x5a, 0xdc, 0x71, + 0x52, 0xee, 0xa9, 0x5e, 0x52, 0xee, 0x9e, 0x41, 0xd8, 0xfb, 0x2b, 0xba, 0xc7, 0x7b, 0x28, 0xba, + 0xf9, 0x41, 0xa8, 0x3f, 0x11, 0x76, 0x9f, 0x08, 0xbb, 0x4f, 0x84, 0xdd, 0x27, 0xc2, 0xee, 0xff, + 0x86, 0xb0, 0x2b, 0xa5, 0x5e, 0x7c, 0xf5, 0xb8, 0x74, 0xea, 0x24, 0x8c, 0xb0, 0xa1, 0x95, 0x61, + 0x48, 0xac, 0x97, 0xe5, 0x21, 0xf2, 0xef, 0xa2, 0x2c, 0x91, 0x7f, 0x97, 0xe4, 0xc4, 0xe2, 0xda, + 0xeb, 0xd7, 0xa7, 0x87, 0xbe, 0x7f, 0x7d, 0x7a, 0xe8, 0x87, 0xd7, 0xa7, 0x87, 0xde, 0xbc, 0x3e, + 0x2d, 0xbd, 0x7d, 0x7d, 0x5a, 0x7a, 0xf7, 0xfa, 0xb4, 0xf4, 0xfe, 0xf5, 0x69, 0xe9, 0xda, 0xe1, + 0xb4, 0xf4, 0x95, 0xc3, 0x69, 0xe9, 0x6b, 0x87, 0xd3, 0xd2, 0xb7, 0x0e, 0xa7, 0xa5, 0xef, 0x1e, + 0x4e, 0x4b, 0xaf, 0x1f, 0x4e, 0x4b, 0xdf, 0x3f, 0x9c, 0x96, 0xde, 0x3c, 0x9c, 0x96, 0xde, 0x3e, + 0x9c, 0x1e, 0x7a, 0xf7, 0x70, 0x5a, 0x7a, 0xff, 0x70, 0x7a, 0xe8, 0xda, 0x4f, 0xa6, 0x87, 0xfe, + 0x37, 0x00, 0x00, 0xff, 0xff, 0x71, 0xf1, 0x7d, 0x92, 0x90, 0x49, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -3700,6 +3705,9 @@ return dAtA } func (m *FloatingPoint) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F != nil { @@ -3712,6 +3720,9 @@ } func (m *CustomMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Nullable128S) > 0 { @@ -3769,6 +3780,9 @@ } func (m *AllMaps) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -3923,6 +3937,9 @@ } func (m *AllMapsOrdered) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/marshaler/mapsproto2.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/marshaler/mapsproto2.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/marshaler/mapsproto2.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/marshaler/mapsproto2.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -322,302 +322,307 @@ func Mapsproto2Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4713 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x6b, 0x6c, 0x23, 0xd7, - 0x75, 0xd6, 0xf0, 0x21, 0x91, 0x87, 0x14, 0x35, 0xba, 0x92, 0xd7, 0xb4, 0x1c, 0x6b, 0x77, 0xe5, - 0x97, 0xbc, 0xb6, 0xb5, 0xb6, 0xbc, 0xbb, 0x5e, 0x73, 0x63, 0xbb, 0x94, 0xc4, 0xd5, 0xca, 0xd6, - 0x2b, 0x43, 0xc9, 0xaf, 0xc0, 0x98, 0x8e, 0x86, 0x97, 0xd4, 0x78, 0xc9, 0x19, 0x7a, 0x66, 0xb8, - 0xb6, 0x8c, 0xa2, 0xd8, 0xc2, 0x7d, 0x20, 0x28, 0xfa, 0x2e, 0x50, 0xc7, 0x75, 0xdc, 0xba, 0x40, - 0xea, 0x34, 0x7d, 0x25, 0x4d, 0x9b, 0x26, 0xfd, 0x95, 0x3f, 0x69, 0x0d, 0x14, 0x28, 0x92, 0x7f, - 0x41, 0x10, 0x18, 0x5e, 0xc5, 0x40, 0xdd, 0xd6, 0x6d, 0xdc, 0xd6, 0x40, 0x0d, 0xf8, 0x4f, 0x71, - 0x5f, 0xc3, 0x99, 0xe1, 0x90, 0x43, 0x19, 0xb0, 0x93, 0x1f, 0xfe, 0xb5, 0x9a, 0x73, 0xcf, 0xf7, - 0xdd, 0x33, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0x77, 0xb8, 0xf0, 0x93, 0x07, 0xe0, 0x44, 0xc3, 0xb2, - 0x1a, 0x4d, 0x7c, 0xba, 0x6d, 0x5b, 0xae, 0xb5, 0xd7, 0xa9, 0x9f, 0xae, 0x61, 0x47, 0xb7, 0x8d, - 0xb6, 0x6b, 0xd9, 0x0b, 0x54, 0x86, 0x26, 0x98, 0xc6, 0x82, 0xd0, 0x98, 0xdb, 0x80, 0xc9, 0x8b, - 0x46, 0x13, 0xaf, 0x78, 0x8a, 0x55, 0xec, 0xa2, 0xf3, 0x90, 0xaa, 0x1b, 0x4d, 0x5c, 0x94, 0x4e, - 0x24, 0xe7, 0x73, 0x8b, 0xb7, 0x2c, 0x84, 0x40, 0x0b, 0x41, 0xc4, 0x36, 0x11, 0x2b, 0x14, 0x31, - 0xf7, 0x76, 0x0a, 0xa6, 0x22, 0x46, 0x11, 0x82, 0x94, 0xa9, 0xb5, 0x08, 0xa3, 0x34, 0x9f, 0x55, - 0xe8, 0xdf, 0xa8, 0x08, 0x63, 0x6d, 0x4d, 0xbf, 0xac, 0x35, 0x70, 0x31, 0x41, 0xc5, 0xe2, 0x11, - 0xcd, 0x02, 0xd4, 0x70, 0x1b, 0x9b, 0x35, 0x6c, 0xea, 0x07, 0xc5, 0xe4, 0x89, 0xe4, 0x7c, 0x56, - 0xf1, 0x49, 0xd0, 0x9d, 0x30, 0xd9, 0xee, 0xec, 0x35, 0x0d, 0x5d, 0xf5, 0xa9, 0xc1, 0x89, 0xe4, - 0x7c, 0x5a, 0x91, 0xd9, 0xc0, 0x4a, 0x57, 0xf9, 0x76, 0x98, 0x78, 0x0e, 0x6b, 0x97, 0xfd, 0xaa, - 0x39, 0xaa, 0x5a, 0x20, 0x62, 0x9f, 0xe2, 0x32, 0xe4, 0x5b, 0xd8, 0x71, 0xb4, 0x06, 0x56, 0xdd, - 0x83, 0x36, 0x2e, 0xa6, 0xe8, 0xdb, 0x9f, 0xe8, 0x79, 0xfb, 0xf0, 0x9b, 0xe7, 0x38, 0x6a, 0xe7, - 0xa0, 0x8d, 0x51, 0x19, 0xb2, 0xd8, 0xec, 0xb4, 0x18, 0x43, 0xba, 0x8f, 0xff, 0x2a, 0x66, 0xa7, - 0x15, 0x66, 0xc9, 0x10, 0x18, 0xa7, 0x18, 0x73, 0xb0, 0x7d, 0xc5, 0xd0, 0x71, 0x71, 0x94, 0x12, - 0xdc, 0xde, 0x43, 0x50, 0x65, 0xe3, 0x61, 0x0e, 0x81, 0x43, 0xcb, 0x90, 0xc5, 0xcf, 0xbb, 0xd8, - 0x74, 0x0c, 0xcb, 0x2c, 0x8e, 0x51, 0x92, 0x5b, 0x23, 0x56, 0x11, 0x37, 0x6b, 0x61, 0x8a, 0x2e, - 0x0e, 0x9d, 0x83, 0x31, 0xab, 0xed, 0x1a, 0x96, 0xe9, 0x14, 0x33, 0x27, 0xa4, 0xf9, 0xdc, 0xe2, - 0x67, 0x22, 0x03, 0x61, 0x8b, 0xe9, 0x28, 0x42, 0x19, 0xad, 0x81, 0xec, 0x58, 0x1d, 0x5b, 0xc7, - 0xaa, 0x6e, 0xd5, 0xb0, 0x6a, 0x98, 0x75, 0xab, 0x98, 0xa5, 0x04, 0xc7, 0x7b, 0x5f, 0x84, 0x2a, - 0x2e, 0x5b, 0x35, 0xbc, 0x66, 0xd6, 0x2d, 0xa5, 0xe0, 0x04, 0x9e, 0xd1, 0x31, 0x18, 0x75, 0x0e, - 0x4c, 0x57, 0x7b, 0xbe, 0x98, 0xa7, 0x11, 0xc2, 0x9f, 0xe6, 0xbe, 0x3d, 0x0a, 0x13, 0xc3, 0x84, - 0xd8, 0x05, 0x48, 0xd7, 0xc9, 0x5b, 0x16, 0x13, 0x47, 0xf1, 0x01, 0xc3, 0x04, 0x9d, 0x38, 0xfa, - 0x11, 0x9d, 0x58, 0x86, 0x9c, 0x89, 0x1d, 0x17, 0xd7, 0x58, 0x44, 0x24, 0x87, 0x8c, 0x29, 0x60, - 0xa0, 0xde, 0x90, 0x4a, 0x7d, 0xa4, 0x90, 0x7a, 0x02, 0x26, 0x3c, 0x93, 0x54, 0x5b, 0x33, 0x1b, - 0x22, 0x36, 0x4f, 0xc7, 0x59, 0xb2, 0x50, 0x11, 0x38, 0x85, 0xc0, 0x94, 0x02, 0x0e, 0x3c, 0xa3, - 0x15, 0x00, 0xcb, 0xc4, 0x56, 0x5d, 0xad, 0x61, 0xbd, 0x59, 0xcc, 0xf4, 0xf1, 0xd2, 0x16, 0x51, - 0xe9, 0xf1, 0x92, 0xc5, 0xa4, 0x7a, 0x13, 0x3d, 0xd0, 0x0d, 0xb5, 0xb1, 0x3e, 0x91, 0xb2, 0xc1, - 0x36, 0x59, 0x4f, 0xb4, 0xed, 0x42, 0xc1, 0xc6, 0x24, 0xee, 0x71, 0x8d, 0xbf, 0x59, 0x96, 0x1a, - 0xb1, 0x10, 0xfb, 0x66, 0x0a, 0x87, 0xb1, 0x17, 0x1b, 0xb7, 0xfd, 0x8f, 0xe8, 0x66, 0xf0, 0x04, - 0x2a, 0x0d, 0x2b, 0xa0, 0x59, 0x28, 0x2f, 0x84, 0x9b, 0x5a, 0x0b, 0xcf, 0xbc, 0x00, 0x85, 0xa0, - 0x7b, 0xd0, 0x34, 0xa4, 0x1d, 0x57, 0xb3, 0x5d, 0x1a, 0x85, 0x69, 0x85, 0x3d, 0x20, 0x19, 0x92, - 0xd8, 0xac, 0xd1, 0x2c, 0x97, 0x56, 0xc8, 0x9f, 0xe8, 0xe7, 0xba, 0x2f, 0x9c, 0xa4, 0x2f, 0x7c, - 0x5b, 0xef, 0x8a, 0x06, 0x98, 0xc3, 0xef, 0x3d, 0x73, 0x3f, 0x8c, 0x07, 0x5e, 0x60, 0xd8, 0xa9, - 0xe7, 0x7e, 0x01, 0xae, 0x8b, 0xa4, 0x46, 0x4f, 0xc0, 0x74, 0xc7, 0x34, 0x4c, 0x17, 0xdb, 0x6d, - 0x1b, 0x93, 0x88, 0x65, 0x53, 0x15, 0xff, 0x75, 0xac, 0x4f, 0xcc, 0xed, 0xfa, 0xb5, 0x19, 0x8b, - 0x32, 0xd5, 0xe9, 0x15, 0x9e, 0xca, 0x66, 0xde, 0x19, 0x93, 0xaf, 0x5e, 0xbd, 0x7a, 0x35, 0x31, - 0xf7, 0xd2, 0x28, 0x4c, 0x47, 0xed, 0x99, 0xc8, 0xed, 0x7b, 0x0c, 0x46, 0xcd, 0x4e, 0x6b, 0x0f, - 0xdb, 0xd4, 0x49, 0x69, 0x85, 0x3f, 0xa1, 0x32, 0xa4, 0x9b, 0xda, 0x1e, 0x6e, 0x16, 0x53, 0x27, - 0xa4, 0xf9, 0xc2, 0xe2, 0x9d, 0x43, 0xed, 0xca, 0x85, 0x75, 0x02, 0x51, 0x18, 0x12, 0x3d, 0x04, - 0x29, 0x9e, 0xa2, 0x09, 0xc3, 0xa9, 0xe1, 0x18, 0xc8, 0x5e, 0x52, 0x28, 0x0e, 0xdd, 0x08, 0x59, - 0xf2, 0x2f, 0x8b, 0x8d, 0x51, 0x6a, 0x73, 0x86, 0x08, 0x48, 0x5c, 0xa0, 0x19, 0xc8, 0xd0, 0x6d, - 0x52, 0xc3, 0xa2, 0xb4, 0x79, 0xcf, 0x24, 0xb0, 0x6a, 0xb8, 0xae, 0x75, 0x9a, 0xae, 0x7a, 0x45, - 0x6b, 0x76, 0x30, 0x0d, 0xf8, 0xac, 0x92, 0xe7, 0xc2, 0xc7, 0x88, 0x0c, 0x1d, 0x87, 0x1c, 0xdb, - 0x55, 0x86, 0x59, 0xc3, 0xcf, 0xd3, 0xec, 0x99, 0x56, 0xd8, 0x46, 0x5b, 0x23, 0x12, 0x32, 0xfd, - 0x33, 0x8e, 0x65, 0x8a, 0xd0, 0xa4, 0x53, 0x10, 0x01, 0x9d, 0xfe, 0xfe, 0x70, 0xe2, 0xbe, 0x29, - 0xfa, 0xf5, 0xc2, 0x31, 0x35, 0xf7, 0xcd, 0x04, 0xa4, 0x68, 0xbe, 0x98, 0x80, 0xdc, 0xce, 0x93, - 0xdb, 0x15, 0x75, 0x65, 0x6b, 0x77, 0x69, 0xbd, 0x22, 0x4b, 0xa8, 0x00, 0x40, 0x05, 0x17, 0xd7, - 0xb7, 0xca, 0x3b, 0x72, 0xc2, 0x7b, 0x5e, 0xdb, 0xdc, 0x39, 0x77, 0x46, 0x4e, 0x7a, 0x80, 0x5d, - 0x26, 0x48, 0xf9, 0x15, 0xee, 0x5b, 0x94, 0xd3, 0x48, 0x86, 0x3c, 0x23, 0x58, 0x7b, 0xa2, 0xb2, - 0x72, 0xee, 0x8c, 0x3c, 0x1a, 0x94, 0xdc, 0xb7, 0x28, 0x8f, 0xa1, 0x71, 0xc8, 0x52, 0xc9, 0xd2, - 0xd6, 0xd6, 0xba, 0x9c, 0xf1, 0x38, 0xab, 0x3b, 0xca, 0xda, 0xe6, 0xaa, 0x9c, 0xf5, 0x38, 0x57, - 0x95, 0xad, 0xdd, 0x6d, 0x19, 0x3c, 0x86, 0x8d, 0x4a, 0xb5, 0x5a, 0x5e, 0xad, 0xc8, 0x39, 0x4f, - 0x63, 0xe9, 0xc9, 0x9d, 0x4a, 0x55, 0xce, 0x07, 0xcc, 0xba, 0x6f, 0x51, 0x1e, 0xf7, 0xa6, 0xa8, - 0x6c, 0xee, 0x6e, 0xc8, 0x05, 0x34, 0x09, 0xe3, 0x6c, 0x0a, 0x61, 0xc4, 0x44, 0x48, 0x74, 0xee, - 0x8c, 0x2c, 0x77, 0x0d, 0x61, 0x2c, 0x93, 0x01, 0xc1, 0xb9, 0x33, 0x32, 0x9a, 0x5b, 0x86, 0x34, - 0x8d, 0x2e, 0x84, 0xa0, 0xb0, 0x5e, 0x5e, 0xaa, 0xac, 0xab, 0x5b, 0xdb, 0x3b, 0x6b, 0x5b, 0x9b, - 0xe5, 0x75, 0x59, 0xea, 0xca, 0x94, 0xca, 0xe7, 0x76, 0xd7, 0x94, 0xca, 0x8a, 0x9c, 0xf0, 0xcb, - 0xb6, 0x2b, 0xe5, 0x9d, 0xca, 0x8a, 0x9c, 0x9c, 0xd3, 0x61, 0x3a, 0x2a, 0x4f, 0x46, 0xee, 0x0c, - 0xdf, 0x12, 0x27, 0xfa, 0x2c, 0x31, 0xe5, 0xea, 0x59, 0xe2, 0x1f, 0x27, 0x60, 0x2a, 0xa2, 0x56, - 0x44, 0x4e, 0xf2, 0x30, 0xa4, 0x59, 0x88, 0xb2, 0xea, 0x79, 0x47, 0x64, 0xd1, 0xa1, 0x01, 0xdb, - 0x53, 0x41, 0x29, 0xce, 0xdf, 0x41, 0x24, 0xfb, 0x74, 0x10, 0x84, 0xa2, 0x27, 0xa7, 0x3f, 0xdd, - 0x93, 0xd3, 0x59, 0xd9, 0x3b, 0x37, 0x4c, 0xd9, 0xa3, 0xb2, 0xa3, 0xe5, 0xf6, 0x74, 0x44, 0x6e, - 0xbf, 0x00, 0x93, 0x3d, 0x44, 0x43, 0xe7, 0xd8, 0x17, 0x25, 0x28, 0xf6, 0x73, 0x4e, 0x4c, 0xa6, - 0x4b, 0x04, 0x32, 0xdd, 0x85, 0xb0, 0x07, 0x4f, 0xf6, 0x5f, 0x84, 0x9e, 0xb5, 0x7e, 0x5d, 0x82, - 0x63, 0xd1, 0x9d, 0x62, 0xa4, 0x0d, 0x0f, 0xc1, 0x68, 0x0b, 0xbb, 0xfb, 0x96, 0xe8, 0x96, 0x6e, - 0x8b, 0xa8, 0xc1, 0x64, 0x38, 0xbc, 0xd8, 0x1c, 0xe5, 0x2f, 0xe2, 0xc9, 0x7e, 0xed, 0x1e, 0xb3, - 0xa6, 0xc7, 0xd2, 0x2f, 0x24, 0xe0, 0xba, 0x48, 0xf2, 0x48, 0x43, 0x6f, 0x02, 0x30, 0xcc, 0x76, - 0xc7, 0x65, 0x1d, 0x11, 0x4b, 0xb0, 0x59, 0x2a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0x8e, 0xeb, 0x8d, - 0x27, 0xe9, 0x38, 0x30, 0x11, 0x55, 0x38, 0xdf, 0x35, 0x34, 0x45, 0x0d, 0x9d, 0xed, 0xf3, 0xa6, - 0x3d, 0x81, 0x79, 0x0f, 0xc8, 0x7a, 0xd3, 0xc0, 0xa6, 0xab, 0x3a, 0xae, 0x8d, 0xb5, 0x96, 0x61, - 0x36, 0x68, 0x05, 0xc9, 0x94, 0xd2, 0x75, 0xad, 0xe9, 0x60, 0x65, 0x82, 0x0d, 0x57, 0xc5, 0x28, - 0x41, 0xd0, 0x00, 0xb2, 0x7d, 0x88, 0xd1, 0x00, 0x82, 0x0d, 0x7b, 0x88, 0xb9, 0x6f, 0x64, 0x20, - 0xe7, 0xeb, 0xab, 0xd1, 0x49, 0xc8, 0x3f, 0xa3, 0x5d, 0xd1, 0x54, 0x71, 0x56, 0x62, 0x9e, 0xc8, - 0x11, 0xd9, 0x36, 0x3f, 0x2f, 0xdd, 0x03, 0xd3, 0x54, 0xc5, 0xea, 0xb8, 0xd8, 0x56, 0xf5, 0xa6, - 0xe6, 0x38, 0xd4, 0x69, 0x19, 0xaa, 0x8a, 0xc8, 0xd8, 0x16, 0x19, 0x5a, 0x16, 0x23, 0xe8, 0x2c, - 0x4c, 0x51, 0x44, 0xab, 0xd3, 0x74, 0x8d, 0x76, 0x13, 0xab, 0xe4, 0xf4, 0xe6, 0xd0, 0x4a, 0xe2, - 0x59, 0x36, 0x49, 0x34, 0x36, 0xb8, 0x02, 0xb1, 0xc8, 0x41, 0x2b, 0x70, 0x13, 0x85, 0x35, 0xb0, - 0x89, 0x6d, 0xcd, 0xc5, 0x2a, 0x7e, 0xb6, 0xa3, 0x35, 0x1d, 0x55, 0x33, 0x6b, 0xea, 0xbe, 0xe6, - 0xec, 0x17, 0xa7, 0x09, 0xc1, 0x52, 0xa2, 0x28, 0x29, 0x37, 0x10, 0xc5, 0x55, 0xae, 0x57, 0xa1, - 0x6a, 0x65, 0xb3, 0x76, 0x49, 0x73, 0xf6, 0x51, 0x09, 0x8e, 0x51, 0x16, 0xc7, 0xb5, 0x0d, 0xb3, - 0xa1, 0xea, 0xfb, 0x58, 0xbf, 0xac, 0x76, 0xdc, 0xfa, 0xf9, 0xe2, 0x8d, 0xfe, 0xf9, 0xa9, 0x85, - 0x55, 0xaa, 0xb3, 0x4c, 0x54, 0x76, 0xdd, 0xfa, 0x79, 0x54, 0x85, 0x3c, 0x59, 0x8c, 0x96, 0xf1, - 0x02, 0x56, 0xeb, 0x96, 0x4d, 0x4b, 0x63, 0x21, 0x22, 0x35, 0xf9, 0x3c, 0xb8, 0xb0, 0xc5, 0x01, - 0x1b, 0x56, 0x0d, 0x97, 0xd2, 0xd5, 0xed, 0x4a, 0x65, 0x45, 0xc9, 0x09, 0x96, 0x8b, 0x96, 0x4d, - 0x02, 0xaa, 0x61, 0x79, 0x0e, 0xce, 0xb1, 0x80, 0x6a, 0x58, 0xc2, 0xbd, 0x67, 0x61, 0x4a, 0xd7, - 0xd9, 0x3b, 0x1b, 0xba, 0xca, 0xcf, 0x58, 0x4e, 0x51, 0x0e, 0x38, 0x4b, 0xd7, 0x57, 0x99, 0x02, - 0x8f, 0x71, 0x07, 0x3d, 0x00, 0xd7, 0x75, 0x9d, 0xe5, 0x07, 0x4e, 0xf6, 0xbc, 0x65, 0x18, 0x7a, - 0x16, 0xa6, 0xda, 0x07, 0xbd, 0x40, 0x14, 0x98, 0xb1, 0x7d, 0x10, 0x86, 0xdd, 0x0f, 0xd3, 0xed, - 0xfd, 0x76, 0x2f, 0xee, 0x94, 0x1f, 0x87, 0xda, 0xfb, 0xed, 0x30, 0xf0, 0x56, 0x7a, 0xe0, 0xb6, - 0xb1, 0xae, 0xb9, 0xb8, 0x56, 0xbc, 0xde, 0xaf, 0xee, 0x1b, 0x40, 0xa7, 0x41, 0xd6, 0x75, 0x15, - 0x9b, 0xda, 0x5e, 0x13, 0xab, 0x9a, 0x8d, 0x4d, 0xcd, 0x29, 0x1e, 0xf7, 0x2b, 0x17, 0x74, 0xbd, - 0x42, 0x47, 0xcb, 0x74, 0x10, 0x9d, 0x82, 0x49, 0x6b, 0xef, 0x19, 0x9d, 0x85, 0xa4, 0xda, 0xb6, - 0x71, 0xdd, 0x78, 0xbe, 0x78, 0x0b, 0xf5, 0xef, 0x04, 0x19, 0xa0, 0x01, 0xb9, 0x4d, 0xc5, 0xe8, - 0x0e, 0x90, 0x75, 0x67, 0x5f, 0xb3, 0xdb, 0x34, 0x27, 0x3b, 0x6d, 0x4d, 0xc7, 0xc5, 0x5b, 0x99, - 0x2a, 0x93, 0x6f, 0x0a, 0x31, 0xd9, 0x12, 0xce, 0x73, 0x46, 0xdd, 0x15, 0x8c, 0xb7, 0xb3, 0x2d, - 0x41, 0x65, 0x9c, 0x6d, 0x1e, 0x64, 0xe2, 0x8a, 0xc0, 0xc4, 0xf3, 0x54, 0xad, 0xd0, 0xde, 0x6f, - 0xfb, 0xe7, 0xbd, 0x19, 0xc6, 0x89, 0x66, 0x77, 0xd2, 0x3b, 0x58, 0x43, 0xd6, 0xde, 0xf7, 0xcd, - 0xf8, 0xb1, 0xf5, 0xc6, 0x73, 0x25, 0xc8, 0xfb, 0xe3, 0x13, 0x65, 0x81, 0x45, 0xa8, 0x2c, 0x91, - 0x66, 0x65, 0x79, 0x6b, 0x85, 0xb4, 0x19, 0x4f, 0x55, 0xe4, 0x04, 0x69, 0x77, 0xd6, 0xd7, 0x76, - 0x2a, 0xaa, 0xb2, 0xbb, 0xb9, 0xb3, 0xb6, 0x51, 0x91, 0x93, 0xfe, 0xbe, 0xfa, 0xbb, 0x09, 0x28, - 0x04, 0x8f, 0x48, 0xe8, 0xb3, 0x70, 0xbd, 0xb8, 0xcf, 0x70, 0xb0, 0xab, 0x3e, 0x67, 0xd8, 0x74, - 0xcb, 0xb4, 0x34, 0x56, 0xbe, 0xbc, 0x45, 0x9b, 0xe6, 0x5a, 0x55, 0xec, 0x3e, 0x6e, 0xd8, 0x64, - 0x43, 0xb4, 0x34, 0x17, 0xad, 0xc3, 0x71, 0xd3, 0x52, 0x1d, 0x57, 0x33, 0x6b, 0x9a, 0x5d, 0x53, - 0xbb, 0x37, 0x49, 0xaa, 0xa6, 0xeb, 0xd8, 0x71, 0x2c, 0x56, 0xaa, 0x3c, 0x96, 0xcf, 0x98, 0x56, - 0x95, 0x2b, 0x77, 0x73, 0x78, 0x99, 0xab, 0x86, 0x02, 0x2c, 0xd9, 0x2f, 0xc0, 0x6e, 0x84, 0x6c, - 0x4b, 0x6b, 0xab, 0xd8, 0x74, 0xed, 0x03, 0xda, 0x18, 0x67, 0x94, 0x4c, 0x4b, 0x6b, 0x57, 0xc8, - 0xf3, 0x27, 0x73, 0x3e, 0xf9, 0x51, 0x12, 0xf2, 0xfe, 0xe6, 0x98, 0x9c, 0x35, 0x74, 0x5a, 0x47, - 0x24, 0x9a, 0x69, 0x6e, 0x1e, 0xd8, 0x4a, 0x2f, 0x2c, 0x93, 0x02, 0x53, 0x1a, 0x65, 0x2d, 0xab, - 0xc2, 0x90, 0xa4, 0xb8, 0x93, 0xdc, 0x82, 0x59, 0x8b, 0x90, 0x51, 0xf8, 0x13, 0x5a, 0x85, 0xd1, - 0x67, 0x1c, 0xca, 0x3d, 0x4a, 0xb9, 0x6f, 0x19, 0xcc, 0xfd, 0x48, 0x95, 0x92, 0x67, 0x1f, 0xa9, - 0xaa, 0x9b, 0x5b, 0xca, 0x46, 0x79, 0x5d, 0xe1, 0x70, 0x74, 0x03, 0xa4, 0x9a, 0xda, 0x0b, 0x07, - 0xc1, 0x52, 0x44, 0x45, 0xc3, 0x3a, 0xfe, 0x06, 0x48, 0x3d, 0x87, 0xb5, 0xcb, 0xc1, 0x02, 0x40, - 0x45, 0x1f, 0x63, 0xe8, 0x9f, 0x86, 0x34, 0xf5, 0x17, 0x02, 0xe0, 0x1e, 0x93, 0x47, 0x50, 0x06, - 0x52, 0xcb, 0x5b, 0x0a, 0x09, 0x7f, 0x19, 0xf2, 0x4c, 0xaa, 0x6e, 0xaf, 0x55, 0x96, 0x2b, 0x72, - 0x62, 0xee, 0x2c, 0x8c, 0x32, 0x27, 0x90, 0xad, 0xe1, 0xb9, 0x41, 0x1e, 0xe1, 0x8f, 0x9c, 0x43, - 0x12, 0xa3, 0xbb, 0x1b, 0x4b, 0x15, 0x45, 0x4e, 0xf8, 0x97, 0xd7, 0x81, 0xbc, 0xbf, 0x2f, 0xfe, - 0x64, 0x62, 0xea, 0x1f, 0x24, 0xc8, 0xf9, 0xfa, 0x5c, 0xd2, 0xa0, 0x68, 0xcd, 0xa6, 0xf5, 0x9c, - 0xaa, 0x35, 0x0d, 0xcd, 0xe1, 0x41, 0x01, 0x54, 0x54, 0x26, 0x92, 0x61, 0x17, 0xed, 0x13, 0x31, - 0xfe, 0x55, 0x09, 0xe4, 0x70, 0x8b, 0x19, 0x32, 0x50, 0xfa, 0xa9, 0x1a, 0xf8, 0x8a, 0x04, 0x85, - 0x60, 0x5f, 0x19, 0x32, 0xef, 0xe4, 0x4f, 0xd5, 0xbc, 0xb7, 0x12, 0x30, 0x1e, 0xe8, 0x26, 0x87, - 0xb5, 0xee, 0x59, 0x98, 0x34, 0x6a, 0xb8, 0xd5, 0xb6, 0x5c, 0x6c, 0xea, 0x07, 0x6a, 0x13, 0x5f, - 0xc1, 0xcd, 0xe2, 0x1c, 0x4d, 0x14, 0xa7, 0x07, 0xf7, 0xab, 0x0b, 0x6b, 0x5d, 0xdc, 0x3a, 0x81, - 0x95, 0xa6, 0xd6, 0x56, 0x2a, 0x1b, 0xdb, 0x5b, 0x3b, 0x95, 0xcd, 0xe5, 0x27, 0xd5, 0xdd, 0xcd, - 0x47, 0x37, 0xb7, 0x1e, 0xdf, 0x54, 0x64, 0x23, 0xa4, 0xf6, 0x31, 0x6e, 0xf5, 0x6d, 0x90, 0xc3, - 0x46, 0xa1, 0xeb, 0x21, 0xca, 0x2c, 0x79, 0x04, 0x4d, 0xc1, 0xc4, 0xe6, 0x96, 0x5a, 0x5d, 0x5b, - 0xa9, 0xa8, 0x95, 0x8b, 0x17, 0x2b, 0xcb, 0x3b, 0x55, 0x76, 0x03, 0xe1, 0x69, 0xef, 0x04, 0x37, - 0xf5, 0xcb, 0x49, 0x98, 0x8a, 0xb0, 0x04, 0x95, 0xf9, 0xd9, 0x81, 0x1d, 0x67, 0xee, 0x1e, 0xc6, - 0xfa, 0x05, 0x52, 0xf2, 0xb7, 0x35, 0xdb, 0xe5, 0x47, 0x8d, 0x3b, 0x80, 0x78, 0xc9, 0x74, 0x8d, - 0xba, 0x81, 0x6d, 0x7e, 0x61, 0xc3, 0x0e, 0x14, 0x13, 0x5d, 0x39, 0xbb, 0xb3, 0xb9, 0x0b, 0x50, - 0xdb, 0x72, 0x0c, 0xd7, 0xb8, 0x82, 0x55, 0xc3, 0x14, 0xb7, 0x3b, 0xe4, 0x80, 0x91, 0x52, 0x64, - 0x31, 0xb2, 0x66, 0xba, 0x9e, 0xb6, 0x89, 0x1b, 0x5a, 0x48, 0x9b, 0x24, 0xf0, 0xa4, 0x22, 0x8b, - 0x11, 0x4f, 0xfb, 0x24, 0xe4, 0x6b, 0x56, 0x87, 0x74, 0x5d, 0x4c, 0x8f, 0xd4, 0x0b, 0x49, 0xc9, - 0x31, 0x99, 0xa7, 0xc2, 0xfb, 0xe9, 0xee, 0xb5, 0x52, 0x5e, 0xc9, 0x31, 0x19, 0x53, 0xb9, 0x1d, - 0x26, 0xb4, 0x46, 0xc3, 0x26, 0xe4, 0x82, 0x88, 0x9d, 0x10, 0x0a, 0x9e, 0x98, 0x2a, 0xce, 0x3c, - 0x02, 0x19, 0xe1, 0x07, 0x52, 0x92, 0x89, 0x27, 0xd4, 0x36, 0x3b, 0xf6, 0x26, 0xe6, 0xb3, 0x4a, - 0xc6, 0x14, 0x83, 0x27, 0x21, 0x6f, 0x38, 0x6a, 0xf7, 0x96, 0x3c, 0x71, 0x22, 0x31, 0x9f, 0x51, - 0x72, 0x86, 0xe3, 0xdd, 0x30, 0xce, 0xbd, 0x9e, 0x80, 0x42, 0xf0, 0x96, 0x1f, 0xad, 0x40, 0xa6, - 0x69, 0xe9, 0x1a, 0x0d, 0x2d, 0xf6, 0x89, 0x69, 0x3e, 0xe6, 0xc3, 0xc0, 0xc2, 0x3a, 0xd7, 0x57, - 0x3c, 0xe4, 0xcc, 0xbf, 0x48, 0x90, 0x11, 0x62, 0x74, 0x0c, 0x52, 0x6d, 0xcd, 0xdd, 0xa7, 0x74, - 0xe9, 0xa5, 0x84, 0x2c, 0x29, 0xf4, 0x99, 0xc8, 0x9d, 0xb6, 0x66, 0xd2, 0x10, 0xe0, 0x72, 0xf2, - 0x4c, 0xd6, 0xb5, 0x89, 0xb5, 0x1a, 0x3d, 0x7e, 0x58, 0xad, 0x16, 0x36, 0x5d, 0x47, 0xac, 0x2b, - 0x97, 0x2f, 0x73, 0x31, 0xba, 0x13, 0x26, 0x5d, 0x5b, 0x33, 0x9a, 0x01, 0xdd, 0x14, 0xd5, 0x95, - 0xc5, 0x80, 0xa7, 0x5c, 0x82, 0x1b, 0x04, 0x6f, 0x0d, 0xbb, 0x9a, 0xbe, 0x8f, 0x6b, 0x5d, 0xd0, - 0x28, 0xbd, 0x66, 0xb8, 0x9e, 0x2b, 0xac, 0xf0, 0x71, 0x81, 0x9d, 0xfb, 0xbe, 0x04, 0x93, 0xe2, - 0xc0, 0x54, 0xf3, 0x9c, 0xb5, 0x01, 0xa0, 0x99, 0xa6, 0xe5, 0xfa, 0xdd, 0xd5, 0x1b, 0xca, 0x3d, - 0xb8, 0x85, 0xb2, 0x07, 0x52, 0x7c, 0x04, 0x33, 0x2d, 0x80, 0xee, 0x48, 0x5f, 0xb7, 0x1d, 0x87, - 0x1c, 0xff, 0x84, 0x43, 0xbf, 0x03, 0xb2, 0x23, 0x36, 0x30, 0x11, 0x39, 0x59, 0xa1, 0x69, 0x48, - 0xef, 0xe1, 0x86, 0x61, 0xf2, 0x8b, 0x59, 0xf6, 0x20, 0x2e, 0x42, 0x52, 0xde, 0x45, 0xc8, 0xd2, - 0xe7, 0x61, 0x4a, 0xb7, 0x5a, 0x61, 0x73, 0x97, 0xe4, 0xd0, 0x31, 0xdf, 0xb9, 0x24, 0x3d, 0x05, - 0xdd, 0x16, 0xf3, 0x03, 0x49, 0xfa, 0x93, 0x44, 0x72, 0x75, 0x7b, 0xe9, 0xab, 0x89, 0x99, 0x55, - 0x06, 0xdd, 0x16, 0x6f, 0xaa, 0xe0, 0x7a, 0x13, 0xeb, 0xc4, 0x7a, 0xf8, 0xf2, 0x3c, 0xdc, 0xdd, - 0x30, 0xdc, 0xfd, 0xce, 0xde, 0x82, 0x6e, 0xb5, 0x4e, 0x37, 0xac, 0x86, 0xd5, 0xfd, 0xf4, 0x49, - 0x9e, 0xe8, 0x03, 0xfd, 0x8b, 0x7f, 0xfe, 0xcc, 0x7a, 0xd2, 0x99, 0xd8, 0x6f, 0xa5, 0xa5, 0x4d, - 0x98, 0xe2, 0xca, 0x2a, 0xfd, 0xfe, 0xc2, 0x4e, 0x11, 0x68, 0xe0, 0x1d, 0x56, 0xf1, 0xeb, 0x6f, - 0xd3, 0x72, 0xad, 0x4c, 0x72, 0x28, 0x19, 0x63, 0x07, 0x8d, 0x92, 0x02, 0xd7, 0x05, 0xf8, 0xd8, - 0xd6, 0xc4, 0x76, 0x0c, 0xe3, 0x77, 0x39, 0xe3, 0x94, 0x8f, 0xb1, 0xca, 0xa1, 0xa5, 0x65, 0x18, - 0x3f, 0x0a, 0xd7, 0x3f, 0x72, 0xae, 0x3c, 0xf6, 0x93, 0xac, 0xc2, 0x04, 0x25, 0xd1, 0x3b, 0x8e, - 0x6b, 0xb5, 0x68, 0xde, 0x1b, 0x4c, 0xf3, 0x4f, 0x6f, 0xb3, 0xbd, 0x52, 0x20, 0xb0, 0x65, 0x0f, - 0x55, 0x2a, 0x01, 0xfd, 0xe4, 0x54, 0xc3, 0x7a, 0x33, 0x86, 0xe1, 0x0d, 0x6e, 0x88, 0xa7, 0x5f, - 0x7a, 0x0c, 0xa6, 0xc9, 0xdf, 0x34, 0x2d, 0xf9, 0x2d, 0x89, 0xbf, 0xf0, 0x2a, 0x7e, 0xff, 0x45, - 0xb6, 0x1d, 0xa7, 0x3c, 0x02, 0x9f, 0x4d, 0xbe, 0x55, 0x6c, 0x60, 0xd7, 0xc5, 0xb6, 0xa3, 0x6a, - 0xcd, 0x28, 0xf3, 0x7c, 0x37, 0x06, 0xc5, 0x2f, 0xbe, 0x1b, 0x5c, 0xc5, 0x55, 0x86, 0x2c, 0x37, - 0x9b, 0xa5, 0x5d, 0xb8, 0x3e, 0x22, 0x2a, 0x86, 0xe0, 0x7c, 0x99, 0x73, 0x4e, 0xf7, 0x44, 0x06, - 0xa1, 0xdd, 0x06, 0x21, 0xf7, 0xd6, 0x72, 0x08, 0xce, 0x3f, 0xe4, 0x9c, 0x88, 0x63, 0xc5, 0x92, - 0x12, 0xc6, 0x47, 0x60, 0xf2, 0x0a, 0xb6, 0xf7, 0x2c, 0x87, 0xdf, 0xd2, 0x0c, 0x41, 0xf7, 0x0a, - 0xa7, 0x9b, 0xe0, 0x40, 0x7a, 0x6d, 0x43, 0xb8, 0x1e, 0x80, 0x4c, 0x5d, 0xd3, 0xf1, 0x10, 0x14, - 0x5f, 0xe2, 0x14, 0x63, 0x44, 0x9f, 0x40, 0xcb, 0x90, 0x6f, 0x58, 0xbc, 0x32, 0xc5, 0xc3, 0x5f, - 0xe5, 0xf0, 0x9c, 0xc0, 0x70, 0x8a, 0xb6, 0xd5, 0xee, 0x34, 0x49, 0xd9, 0x8a, 0xa7, 0xf8, 0x23, - 0x41, 0x21, 0x30, 0x9c, 0xe2, 0x08, 0x6e, 0xfd, 0x63, 0x41, 0xe1, 0xf8, 0xfc, 0xf9, 0x30, 0xe4, - 0x2c, 0xb3, 0x79, 0x60, 0x99, 0xc3, 0x18, 0xf1, 0x1a, 0x67, 0x00, 0x0e, 0x21, 0x04, 0x17, 0x20, - 0x3b, 0xec, 0x42, 0x7c, 0xf9, 0x5d, 0xb1, 0x3d, 0xc4, 0x0a, 0xac, 0xc2, 0x84, 0x48, 0x50, 0x86, - 0x65, 0x0e, 0x41, 0xf1, 0xa7, 0x9c, 0xa2, 0xe0, 0x83, 0xf1, 0xd7, 0x70, 0xb1, 0xe3, 0x36, 0xf0, - 0x30, 0x24, 0xaf, 0x8b, 0xd7, 0xe0, 0x10, 0xee, 0xca, 0x3d, 0x6c, 0xea, 0xfb, 0xc3, 0x31, 0x7c, - 0x45, 0xb8, 0x52, 0x60, 0x08, 0xc5, 0x32, 0x8c, 0xb7, 0x34, 0xdb, 0xd9, 0xd7, 0x9a, 0x43, 0x2d, - 0xc7, 0x9f, 0x71, 0x8e, 0xbc, 0x07, 0xe2, 0x1e, 0xe9, 0x98, 0x47, 0xa1, 0xf9, 0xaa, 0xf0, 0x88, - 0x0f, 0xc6, 0xb7, 0x9e, 0xe3, 0xd2, 0x2b, 0xad, 0xa3, 0xb0, 0xfd, 0xb9, 0xd8, 0x7a, 0x0c, 0xbb, - 0xe1, 0x67, 0xbc, 0x00, 0x59, 0xc7, 0x78, 0x61, 0x28, 0x9a, 0xbf, 0x10, 0x2b, 0x4d, 0x01, 0x04, - 0xfc, 0x24, 0xdc, 0x10, 0x59, 0x26, 0x86, 0x20, 0xfb, 0x4b, 0x4e, 0x76, 0x2c, 0xa2, 0x54, 0xf0, - 0x94, 0x70, 0x54, 0xca, 0xbf, 0x12, 0x29, 0x01, 0x87, 0xb8, 0xb6, 0xc9, 0x59, 0xc1, 0xd1, 0xea, - 0x47, 0xf3, 0xda, 0x5f, 0x0b, 0xaf, 0x31, 0x6c, 0xc0, 0x6b, 0x3b, 0x70, 0x8c, 0x33, 0x1e, 0x6d, - 0x5d, 0xbf, 0x26, 0x12, 0x2b, 0x43, 0xef, 0x06, 0x57, 0xf7, 0xf3, 0x30, 0xe3, 0xb9, 0x53, 0x34, - 0xa5, 0x8e, 0xda, 0xd2, 0xda, 0x43, 0x30, 0x7f, 0x9d, 0x33, 0x8b, 0x8c, 0xef, 0x75, 0xb5, 0xce, - 0x86, 0xd6, 0x26, 0xe4, 0x4f, 0x40, 0x51, 0x90, 0x77, 0x4c, 0x1b, 0xeb, 0x56, 0xc3, 0x34, 0x5e, - 0xc0, 0xb5, 0x21, 0xa8, 0xff, 0x26, 0xb4, 0x54, 0xbb, 0x3e, 0x38, 0x61, 0x5e, 0x03, 0xd9, 0xeb, - 0x55, 0x54, 0xa3, 0xd5, 0xb6, 0x6c, 0x37, 0x86, 0xf1, 0x1b, 0x62, 0xa5, 0x3c, 0xdc, 0x1a, 0x85, - 0x95, 0x2a, 0x50, 0xa0, 0x8f, 0xc3, 0x86, 0xe4, 0xdf, 0x72, 0xa2, 0xf1, 0x2e, 0x8a, 0x27, 0x0e, - 0xdd, 0x6a, 0xb5, 0x35, 0x7b, 0x98, 0xfc, 0xf7, 0x77, 0x22, 0x71, 0x70, 0x08, 0x4f, 0x1c, 0xee, - 0x41, 0x1b, 0x93, 0x6a, 0x3f, 0x04, 0xc3, 0x37, 0x45, 0xe2, 0x10, 0x18, 0x4e, 0x21, 0x1a, 0x86, - 0x21, 0x28, 0xfe, 0x5e, 0x50, 0x08, 0x0c, 0xa1, 0xf8, 0x5c, 0xb7, 0xd0, 0xda, 0xb8, 0x61, 0x38, - 0xae, 0xcd, 0x5a, 0xe1, 0xc1, 0x54, 0xdf, 0x7a, 0x37, 0xd8, 0x84, 0x29, 0x3e, 0x28, 0xc9, 0x44, - 0xfc, 0x0a, 0x95, 0x9e, 0x94, 0xe2, 0x0d, 0xfb, 0xb6, 0xc8, 0x44, 0x3e, 0x18, 0xdb, 0x9f, 0x13, - 0xa1, 0x5e, 0x05, 0xc5, 0xfd, 0x10, 0xa6, 0xf8, 0x4b, 0xef, 0x73, 0xae, 0x60, 0xab, 0x52, 0x5a, - 0x27, 0x01, 0x14, 0x6c, 0x28, 0xe2, 0xc9, 0x5e, 0x7c, 0xdf, 0x8b, 0xa1, 0x40, 0x3f, 0x51, 0xba, - 0x08, 0xe3, 0x81, 0x66, 0x22, 0x9e, 0xea, 0x97, 0x39, 0x55, 0xde, 0xdf, 0x4b, 0x94, 0xce, 0x42, - 0x8a, 0x34, 0x06, 0xf1, 0xf0, 0x5f, 0xe1, 0x70, 0xaa, 0x5e, 0x7a, 0x10, 0x32, 0xa2, 0x21, 0x88, - 0x87, 0xfe, 0x2a, 0x87, 0x7a, 0x10, 0x02, 0x17, 0xcd, 0x40, 0x3c, 0xfc, 0xd7, 0x04, 0x5c, 0x40, - 0x08, 0x7c, 0x78, 0x17, 0x7e, 0xe7, 0xd7, 0x53, 0x3c, 0xa1, 0x0b, 0xdf, 0x5d, 0x80, 0x31, 0xde, - 0x05, 0xc4, 0xa3, 0xbf, 0xc0, 0x27, 0x17, 0x88, 0xd2, 0xfd, 0x90, 0x1e, 0xd2, 0xe1, 0xbf, 0xc1, - 0xa1, 0x4c, 0xbf, 0xb4, 0x0c, 0x39, 0x5f, 0xe5, 0x8f, 0x87, 0xff, 0x26, 0x87, 0xfb, 0x51, 0xc4, - 0x74, 0x5e, 0xf9, 0xe3, 0x09, 0x7e, 0x4b, 0x98, 0xce, 0x11, 0xc4, 0x6d, 0xa2, 0xe8, 0xc7, 0xa3, - 0x7f, 0x5b, 0x78, 0x5d, 0x40, 0x4a, 0x0f, 0x43, 0xd6, 0x4b, 0xe4, 0xf1, 0xf8, 0xdf, 0xe1, 0xf8, - 0x2e, 0x86, 0x78, 0xc0, 0x57, 0x48, 0xe2, 0x29, 0x7e, 0x57, 0x78, 0xc0, 0x87, 0x22, 0xdb, 0x28, - 0xdc, 0x1c, 0xc4, 0x33, 0xfd, 0x9e, 0xd8, 0x46, 0xa1, 0xde, 0x80, 0xac, 0x26, 0xcd, 0xa7, 0xf1, - 0x14, 0xbf, 0x2f, 0x56, 0x93, 0xea, 0x13, 0x33, 0xc2, 0xd5, 0x36, 0x9e, 0xe3, 0x0f, 0x84, 0x19, - 0xa1, 0x62, 0x5b, 0xda, 0x06, 0xd4, 0x5b, 0x69, 0xe3, 0xf9, 0x5e, 0xe2, 0x7c, 0x93, 0x3d, 0x85, - 0xb6, 0xf4, 0x38, 0x1c, 0x8b, 0xae, 0xb2, 0xf1, 0xac, 0x5f, 0x7c, 0x3f, 0x74, 0x2e, 0xf2, 0x17, - 0xd9, 0xd2, 0x4e, 0x37, 0x5d, 0xfb, 0x2b, 0x6c, 0x3c, 0xed, 0xcb, 0xef, 0x07, 0x33, 0xb6, 0xbf, - 0xc0, 0x96, 0xca, 0x00, 0xdd, 0xe2, 0x16, 0xcf, 0xf5, 0x0a, 0xe7, 0xf2, 0x81, 0xc8, 0xd6, 0xe0, - 0xb5, 0x2d, 0x1e, 0xff, 0x25, 0xb1, 0x35, 0x38, 0x82, 0x6c, 0x0d, 0x51, 0xd6, 0xe2, 0xd1, 0xaf, - 0x8a, 0xad, 0x21, 0x20, 0x24, 0xb2, 0x7d, 0x95, 0x23, 0x9e, 0xe1, 0x35, 0x11, 0xd9, 0x3e, 0x54, - 0xe9, 0x02, 0x64, 0xcc, 0x4e, 0xb3, 0x49, 0x02, 0x14, 0x0d, 0xfe, 0x81, 0x58, 0xf1, 0xdf, 0x3e, - 0xe4, 0x16, 0x08, 0x40, 0xe9, 0x2c, 0xa4, 0x71, 0x6b, 0x0f, 0xd7, 0xe2, 0x90, 0xff, 0xfe, 0xa1, - 0x48, 0x4a, 0x44, 0xbb, 0xf4, 0x30, 0x00, 0x3b, 0xda, 0xd3, 0xcf, 0x56, 0x31, 0xd8, 0xff, 0xf8, - 0x90, 0xff, 0x74, 0xa3, 0x0b, 0xe9, 0x12, 0xb0, 0x1f, 0x82, 0x0c, 0x26, 0x78, 0x37, 0x48, 0x40, - 0xdf, 0xfa, 0x01, 0x18, 0x7b, 0xc6, 0xb1, 0x4c, 0x57, 0x6b, 0xc4, 0xa1, 0xff, 0x93, 0xa3, 0x85, - 0x3e, 0x71, 0x58, 0xcb, 0xb2, 0xb1, 0xab, 0x35, 0x9c, 0x38, 0xec, 0x7f, 0x71, 0xac, 0x07, 0x20, - 0x60, 0x5d, 0x73, 0xdc, 0x61, 0xde, 0xfb, 0x27, 0x02, 0x2c, 0x00, 0xc4, 0x68, 0xf2, 0xf7, 0x65, - 0x7c, 0x10, 0x87, 0x7d, 0x4f, 0x18, 0xcd, 0xf5, 0x4b, 0x0f, 0x42, 0x96, 0xfc, 0xc9, 0x7e, 0x8f, - 0x15, 0x03, 0xfe, 0x6f, 0x0e, 0xee, 0x22, 0xc8, 0xcc, 0x8e, 0x5b, 0x73, 0x8d, 0x78, 0x67, 0xff, - 0x0f, 0x5f, 0x69, 0xa1, 0x5f, 0x2a, 0x43, 0xce, 0x71, 0x6b, 0xb5, 0x0e, 0xef, 0xaf, 0x62, 0xe0, - 0xff, 0xfb, 0xa1, 0x77, 0xe4, 0xf6, 0x30, 0x4b, 0x95, 0xe8, 0xdb, 0x43, 0x58, 0xb5, 0x56, 0x2d, - 0x76, 0x6f, 0xf8, 0xd4, 0x5c, 0xfc, 0x05, 0x20, 0xfc, 0xdf, 0xdd, 0x70, 0x52, 0xb7, 0x5a, 0x7b, - 0x96, 0x73, 0xda, 0xcb, 0x58, 0xa7, 0x5b, 0x5a, 0xdb, 0xa1, 0xc3, 0x8b, 0xfc, 0x6e, 0x30, 0xc7, - 0x9f, 0xc8, 0xc0, 0xcc, 0xd1, 0xee, 0x15, 0xe7, 0x6e, 0x82, 0xf1, 0x8b, 0x4d, 0x4b, 0x73, 0x0d, - 0xb3, 0xb1, 0x6d, 0x19, 0xa6, 0x8b, 0xf2, 0x20, 0xd5, 0xe9, 0x77, 0x31, 0x49, 0x91, 0xea, 0x73, - 0xff, 0x9c, 0x86, 0x2c, 0xbb, 0x92, 0xda, 0xd0, 0xda, 0xe8, 0x17, 0x21, 0xbf, 0xc9, 0xf7, 0xd1, - 0xbd, 0x8b, 0xe7, 0x1d, 0xef, 0x0a, 0xdc, 0x37, 0xff, 0x82, 0xa7, 0xbd, 0xe0, 0x57, 0xa5, 0xdf, - 0xc1, 0x97, 0xee, 0xf9, 0xe1, 0x9b, 0xc7, 0xef, 0xea, 0x6b, 0x1f, 0xa9, 0xbe, 0xa7, 0x59, 0xc0, - 0x2f, 0xec, 0x1a, 0xa6, 0x7b, 0xef, 0xe2, 0x79, 0x25, 0x30, 0x1f, 0xba, 0x02, 0x19, 0x3e, 0xe0, - 0xf0, 0x4f, 0x23, 0xb7, 0xf4, 0x99, 0x5b, 0xa8, 0xb1, 0x79, 0xcf, 0xbc, 0xf1, 0xe6, 0xf1, 0x91, - 0x23, 0xcf, 0xed, 0xcd, 0x85, 0x9e, 0x85, 0x9c, 0xb0, 0x63, 0xad, 0xe6, 0xf0, 0x9f, 0xc2, 0xdf, - 0x1e, 0xf3, 0xda, 0x6b, 0x35, 0x3e, 0xfb, 0x6d, 0x3f, 0x7c, 0xf3, 0xf8, 0xdc, 0xc0, 0x99, 0x17, - 0x76, 0x3b, 0x46, 0x4d, 0xf1, 0xcf, 0x81, 0x9e, 0x86, 0x24, 0x99, 0x8a, 0xfd, 0x7a, 0xf0, 0x78, - 0x9f, 0xa9, 0xbc, 0x29, 0x4e, 0xf1, 0x17, 0x1c, 0x66, 0x1a, 0xc2, 0x3b, 0xf3, 0x30, 0x4c, 0xf6, - 0x2c, 0x0f, 0x92, 0x21, 0x79, 0x19, 0x1f, 0xf0, 0x9f, 0x69, 0x91, 0x3f, 0xd1, 0x74, 0xf7, 0x77, - 0x94, 0xd2, 0x7c, 0x9e, 0xff, 0x38, 0xb2, 0x94, 0x38, 0x2f, 0xcd, 0x5c, 0x80, 0xf1, 0x80, 0x8f, - 0x8f, 0x04, 0x7e, 0x08, 0xe4, 0xb0, 0x97, 0x8e, 0x84, 0x3f, 0x07, 0x99, 0x8f, 0x82, 0x9b, 0xfb, - 0x01, 0x82, 0xb1, 0x72, 0xb3, 0xb9, 0xa1, 0xb5, 0x1d, 0xf4, 0x24, 0x4c, 0xb2, 0x33, 0xc2, 0x8e, - 0xb5, 0x42, 0x3f, 0x46, 0x6d, 0x68, 0x6d, 0x1e, 0xd0, 0x77, 0x06, 0xdc, 0xcd, 0x01, 0x0b, 0x3d, - 0xda, 0x74, 0x7e, 0xa5, 0x97, 0x05, 0x3d, 0x06, 0xb2, 0x10, 0xd2, 0xbd, 0x45, 0x98, 0x59, 0xb8, - 0x9e, 0x1a, 0xc8, 0x2c, 0x94, 0x19, 0x71, 0x0f, 0x07, 0x7a, 0x08, 0x32, 0x6b, 0xa6, 0x7b, 0xdf, - 0x22, 0xe1, 0x63, 0x31, 0x38, 0x17, 0xc9, 0x27, 0x94, 0x18, 0x8f, 0x87, 0xe1, 0xf8, 0x73, 0x67, - 0x08, 0x3e, 0x35, 0x18, 0x4f, 0x95, 0xba, 0x78, 0xfa, 0x88, 0xca, 0x90, 0x25, 0x6b, 0xce, 0x0c, - 0x60, 0xff, 0x0b, 0xe3, 0xe6, 0x48, 0x02, 0x4f, 0x8b, 0x31, 0x74, 0x51, 0x82, 0x82, 0xd9, 0x30, - 0x1a, 0x43, 0xe1, 0x33, 0xa2, 0x8b, 0x22, 0x14, 0x55, 0xcf, 0x8a, 0xb1, 0x01, 0x14, 0xd5, 0x90, - 0x15, 0x55, 0xbf, 0x15, 0x55, 0xcf, 0x8a, 0x4c, 0x0c, 0x85, 0xdf, 0x0a, 0xef, 0x19, 0xad, 0x00, - 0x5c, 0x34, 0x9e, 0xc7, 0x35, 0x66, 0x46, 0x36, 0x22, 0x19, 0x09, 0x8e, 0xae, 0x1a, 0x23, 0xf1, - 0xe1, 0xd0, 0x2a, 0xe4, 0xaa, 0xf5, 0x2e, 0x0d, 0xf0, 0xff, 0x84, 0x12, 0x69, 0x4a, 0x3d, 0xc4, - 0xe3, 0x47, 0x7a, 0xe6, 0xb0, 0x57, 0xca, 0xc5, 0x99, 0xe3, 0x7b, 0x27, 0x1f, 0xae, 0x6b, 0x0e, - 0xa3, 0xc9, 0xc7, 0x9a, 0xe3, 0xe3, 0xf1, 0x23, 0xd1, 0x05, 0x18, 0x5b, 0xb2, 0x2c, 0xa2, 0x59, - 0x1c, 0xa7, 0x24, 0x27, 0x23, 0x49, 0xb8, 0x0e, 0x23, 0x10, 0x08, 0xba, 0x3a, 0x34, 0xf4, 0x09, - 0xbc, 0x30, 0x68, 0x75, 0x84, 0x96, 0x58, 0x1d, 0xf1, 0xec, 0xdf, 0x81, 0x4b, 0x07, 0x2e, 0x26, - 0xfd, 0x78, 0x71, 0x62, 0x88, 0x1d, 0x28, 0x94, 0x43, 0x3b, 0x50, 0x88, 0x51, 0x15, 0x26, 0x84, - 0xac, 0x62, 0x76, 0x48, 0x0e, 0x2e, 0xca, 0xfc, 0x17, 0xe6, 0x83, 0x68, 0xb9, 0x2e, 0x63, 0x0d, - 0x33, 0xa0, 0x6d, 0x28, 0x08, 0xd1, 0x86, 0x43, 0x5f, 0x7a, 0x32, 0xa2, 0xae, 0x86, 0x39, 0x99, - 0x2a, 0xa3, 0x0c, 0xe1, 0x67, 0x56, 0xe0, 0x58, 0x74, 0xb6, 0x8a, 0xcb, 0x96, 0x92, 0x3f, 0xcb, - 0x2e, 0xc3, 0x75, 0x91, 0x99, 0x29, 0x8e, 0x24, 0x11, 0xaa, 0x13, 0x81, 0x74, 0xe4, 0x07, 0xa7, - 0x23, 0xc0, 0xe9, 0x5e, 0x70, 0x37, 0xc8, 0xfc, 0xe0, 0x64, 0x04, 0x38, 0xe9, 0x07, 0x7f, 0x16, - 0x0a, 0xc1, 0x3c, 0xe4, 0x47, 0x8f, 0x47, 0xa0, 0xc7, 0x23, 0xd0, 0xd1, 0x73, 0xa7, 0x22, 0xd0, - 0xa9, 0x10, 0xba, 0xda, 0x77, 0xee, 0xc9, 0x08, 0xf4, 0x64, 0x04, 0x3a, 0x7a, 0x6e, 0x14, 0x81, - 0x46, 0x7e, 0xf4, 0x83, 0x30, 0x11, 0x4a, 0x39, 0x7e, 0xf8, 0x58, 0x04, 0x7c, 0x2c, 0x54, 0x9b, - 0xc3, 0xa9, 0xc6, 0x8f, 0x9f, 0x88, 0xc0, 0x4f, 0x44, 0x4d, 0x1f, 0x6d, 0xfd, 0x68, 0x04, 0x7c, - 0x34, 0x72, 0xfa, 0x68, 0xbc, 0x1c, 0x81, 0x97, 0xfd, 0xf8, 0x12, 0xe4, 0xfd, 0x59, 0xc5, 0x8f, - 0xcd, 0x44, 0x60, 0x33, 0x61, 0xbf, 0x07, 0x52, 0x4a, 0x5c, 0xa4, 0x67, 0xfb, 0x6c, 0x97, 0x40, - 0x1a, 0x39, 0x52, 0x67, 0xf3, 0x04, 0x4c, 0x47, 0x25, 0x8d, 0x08, 0x8e, 0x53, 0x7e, 0x8e, 0xc2, - 0xe2, 0x74, 0x20, 0x59, 0x50, 0x5c, 0xa7, 0xe5, 0x67, 0x7e, 0x1a, 0xa6, 0x22, 0x52, 0x47, 0x04, - 0xf1, 0x3d, 0x7e, 0xe2, 0xdc, 0xe2, 0x4c, 0x80, 0x38, 0x70, 0x56, 0xf0, 0xb7, 0x56, 0x3f, 0x9a, - 0x82, 0x02, 0x4f, 0x51, 0x5b, 0x76, 0x0d, 0xdb, 0xb8, 0x86, 0x7e, 0xbe, 0x7f, 0x87, 0xb5, 0x18, - 0x95, 0xda, 0x38, 0xee, 0x08, 0x8d, 0xd6, 0xd3, 0x7d, 0x1b, 0xad, 0x7b, 0x87, 0x99, 0x20, 0xae, - 0xdf, 0xaa, 0xf4, 0xf4, 0x5b, 0x77, 0x0c, 0xa2, 0xed, 0xd7, 0x76, 0x55, 0x7a, 0xda, 0xae, 0x38, - 0x9a, 0xc8, 0xee, 0xeb, 0x52, 0x6f, 0xf7, 0x75, 0x6a, 0x10, 0x4f, 0xff, 0x26, 0xec, 0x52, 0x6f, - 0x13, 0x16, 0xcb, 0x14, 0xdd, 0x8b, 0x5d, 0xea, 0xed, 0xc5, 0x06, 0x32, 0xf5, 0x6f, 0xc9, 0x2e, - 0xf5, 0xb6, 0x64, 0xb1, 0x4c, 0xd1, 0x9d, 0xd9, 0xa3, 0x11, 0x9d, 0xd9, 0x9d, 0x83, 0xa8, 0x06, - 0x35, 0x68, 0x9b, 0x51, 0x0d, 0xda, 0x5d, 0x03, 0x0d, 0x1b, 0xd8, 0xa7, 0x3d, 0x1a, 0xd1, 0xa7, - 0xc5, 0x1b, 0xd7, 0xa7, 0x5d, 0xdb, 0x8c, 0x6a, 0xd7, 0x86, 0x30, 0xae, 0x5f, 0xd7, 0xb6, 0x14, - 0xee, 0xda, 0xe6, 0x07, 0x71, 0x45, 0x37, 0x6f, 0x97, 0x7a, 0x9b, 0xb7, 0x53, 0xf1, 0x7b, 0x31, - 0xaa, 0x87, 0x7b, 0xba, 0x6f, 0x0f, 0x37, 0xd4, 0xe6, 0x8e, 0x6b, 0xe5, 0x9e, 0xea, 0xd7, 0xca, - 0xdd, 0x33, 0x0c, 0xfb, 0xe0, 0x8e, 0xee, 0xf1, 0x3e, 0x1d, 0xdd, 0xe9, 0x61, 0xa8, 0x3f, 0x6d, - 0xec, 0x3e, 0x6d, 0xec, 0x3e, 0x6d, 0xec, 0x3e, 0x6d, 0xec, 0x7e, 0x36, 0x1a, 0xbb, 0x52, 0xea, - 0xa5, 0xd7, 0x8e, 0x4b, 0xa7, 0x4e, 0xc2, 0x18, 0x9f, 0x1a, 0x8d, 0x42, 0x62, 0xa3, 0x2c, 0x8f, - 0xd0, 0x7f, 0x97, 0x64, 0x89, 0xfe, 0xbb, 0x2c, 0x27, 0x96, 0xd6, 0xdf, 0xb8, 0x36, 0x3b, 0xf2, - 0xbd, 0x6b, 0xb3, 0x23, 0x3f, 0xb8, 0x36, 0x3b, 0xf2, 0xd6, 0xb5, 0x59, 0xe9, 0x9d, 0x6b, 0xb3, - 0xd2, 0x7b, 0xd7, 0x66, 0xa5, 0x0f, 0xae, 0xcd, 0x4a, 0x57, 0x0f, 0x67, 0xa5, 0xaf, 0x1c, 0xce, - 0x4a, 0x5f, 0x3b, 0x9c, 0x95, 0xbe, 0x75, 0x38, 0x2b, 0x7d, 0xe7, 0x70, 0x56, 0x7a, 0xe3, 0x70, - 0x56, 0xfa, 0xde, 0xe1, 0xec, 0xc8, 0x5b, 0x87, 0xb3, 0xd2, 0x3b, 0x87, 0xb3, 0x23, 0xef, 0x1d, - 0xce, 0x4a, 0x1f, 0x1c, 0xce, 0x8e, 0x5c, 0xfd, 0xf1, 0xec, 0xc8, 0xff, 0x07, 0x00, 0x00, 0xff, - 0xff, 0xb6, 0x98, 0xbf, 0xf4, 0x14, 0x48, 0x00, 0x00, + // 4797 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7b, 0x5b, 0x6c, 0x23, 0xd7, + 0x79, 0xbf, 0x86, 0x17, 0x89, 0xfc, 0x48, 0x51, 0xa3, 0x91, 0xbc, 0xa6, 0x95, 0x58, 0xbb, 0x2b, + 0xdf, 0xe4, 0x5d, 0x5b, 0xb2, 0xe5, 0xdd, 0xf5, 0x9a, 0x1b, 0xdb, 0x7f, 0x4a, 0xe2, 0x6a, 0x65, + 0xeb, 0x96, 0xa1, 0xe4, 0x5b, 0x60, 0xcc, 0x7f, 0x34, 0x3c, 0xa2, 0xc6, 0x4b, 0xce, 0xd0, 0x33, + 0xc3, 0x5d, 0xcb, 0x28, 0x8a, 0x2d, 0xdc, 0x0b, 0x82, 0xa2, 0xf7, 0x02, 0x75, 0x5c, 0xc7, 0xad, + 0x53, 0x34, 0x4e, 0xd3, 0x5b, 0xd2, 0xb4, 0x69, 0x92, 0xbe, 0xe4, 0x25, 0xad, 0x81, 0x02, 0x45, + 0xf2, 0x16, 0x04, 0x81, 0xe1, 0x55, 0x0c, 0xd4, 0x6d, 0xdd, 0xc6, 0x6d, 0x0d, 0xd4, 0x80, 0x5f, + 0x8a, 0x73, 0x1b, 0x9e, 0x19, 0x0e, 0x39, 0x94, 0x01, 0x3b, 0x7d, 0xf0, 0xd3, 0x6a, 0xce, 0xf9, + 0x7e, 0xbf, 0xf3, 0xcd, 0x77, 0xbe, 0xf3, 0x9d, 0xdf, 0x39, 0xc3, 0x85, 0x9f, 0x3e, 0x00, 0x27, + 0xea, 0xb6, 0x5d, 0x6f, 0xa0, 0xf9, 0x96, 0x63, 0x7b, 0xf6, 0x6e, 0x7b, 0x6f, 0xbe, 0x86, 0x5c, + 0xc3, 0x31, 0x5b, 0x9e, 0xed, 0xcc, 0x91, 0x36, 0x65, 0x8c, 0x5a, 0xcc, 0x71, 0x8b, 0x99, 0x75, + 0x18, 0xbf, 0x68, 0x36, 0xd0, 0xb2, 0x6f, 0x58, 0x45, 0x9e, 0x72, 0x1e, 0x52, 0x7b, 0x66, 0x03, + 0x15, 0xa5, 0x13, 0xc9, 0xd9, 0xdc, 0xc2, 0xad, 0x73, 0x21, 0xd0, 0x5c, 0x10, 0xb1, 0x85, 0x9b, + 0x55, 0x82, 0x98, 0x79, 0x2b, 0x05, 0x13, 0x11, 0xbd, 0x8a, 0x02, 0x29, 0x4b, 0x6f, 0x62, 0x46, + 0x69, 0x36, 0xab, 0x92, 0xbf, 0x95, 0x22, 0x8c, 0xb4, 0x74, 0xe3, 0xb2, 0x5e, 0x47, 0xc5, 0x04, + 0x69, 0xe6, 0x8f, 0xca, 0x34, 0x40, 0x0d, 0xb5, 0x90, 0x55, 0x43, 0x96, 0x71, 0x50, 0x4c, 0x9e, + 0x48, 0xce, 0x66, 0x55, 0xa1, 0x45, 0x39, 0x0d, 0xe3, 0xad, 0xf6, 0x6e, 0xc3, 0x34, 0x34, 0xc1, + 0x0c, 0x4e, 0x24, 0x67, 0xd3, 0xaa, 0x4c, 0x3b, 0x96, 0x3b, 0xc6, 0x77, 0xc0, 0xd8, 0x55, 0xa4, + 0x5f, 0x16, 0x4d, 0x73, 0xc4, 0xb4, 0x80, 0x9b, 0x05, 0xc3, 0x25, 0xc8, 0x37, 0x91, 0xeb, 0xea, + 0x75, 0xa4, 0x79, 0x07, 0x2d, 0x54, 0x4c, 0x91, 0xb7, 0x3f, 0xd1, 0xf5, 0xf6, 0xe1, 0x37, 0xcf, + 0x31, 0xd4, 0xf6, 0x41, 0x0b, 0x29, 0x65, 0xc8, 0x22, 0xab, 0xdd, 0xa4, 0x0c, 0xe9, 0x1e, 0xf1, + 0xab, 0x58, 0xed, 0x66, 0x98, 0x25, 0x83, 0x61, 0x8c, 0x62, 0xc4, 0x45, 0xce, 0x15, 0xd3, 0x40, + 0xc5, 0x61, 0x42, 0x70, 0x47, 0x17, 0x41, 0x95, 0xf6, 0x87, 0x39, 0x38, 0x4e, 0x59, 0x82, 0x2c, + 0x7a, 0xce, 0x43, 0x96, 0x6b, 0xda, 0x56, 0x71, 0x84, 0x90, 0xdc, 0x16, 0x31, 0x8b, 0xa8, 0x51, + 0x0b, 0x53, 0x74, 0x70, 0xca, 0x39, 0x18, 0xb1, 0x5b, 0x9e, 0x69, 0x5b, 0x6e, 0x31, 0x73, 0x42, + 0x9a, 0xcd, 0x2d, 0x7c, 0x3a, 0x32, 0x11, 0x36, 0xa9, 0x8d, 0xca, 0x8d, 0x95, 0x55, 0x90, 0x5d, + 0xbb, 0xed, 0x18, 0x48, 0x33, 0xec, 0x1a, 0xd2, 0x4c, 0x6b, 0xcf, 0x2e, 0x66, 0x09, 0xc1, 0xf1, + 0xee, 0x17, 0x21, 0x86, 0x4b, 0x76, 0x0d, 0xad, 0x5a, 0x7b, 0xb6, 0x5a, 0x70, 0x03, 0xcf, 0xca, + 0x31, 0x18, 0x76, 0x0f, 0x2c, 0x4f, 0x7f, 0xae, 0x98, 0x27, 0x19, 0xc2, 0x9e, 0x66, 0xbe, 0x3d, + 0x0c, 0x63, 0x83, 0xa4, 0xd8, 0x05, 0x48, 0xef, 0xe1, 0xb7, 0x2c, 0x26, 0x8e, 0x12, 0x03, 0x8a, + 0x09, 0x06, 0x71, 0xf8, 0x43, 0x06, 0xb1, 0x0c, 0x39, 0x0b, 0xb9, 0x1e, 0xaa, 0xd1, 0x8c, 0x48, + 0x0e, 0x98, 0x53, 0x40, 0x41, 0xdd, 0x29, 0x95, 0xfa, 0x50, 0x29, 0xf5, 0x04, 0x8c, 0xf9, 0x2e, + 0x69, 0x8e, 0x6e, 0xd5, 0x79, 0x6e, 0xce, 0xc7, 0x79, 0x32, 0x57, 0xe1, 0x38, 0x15, 0xc3, 0xd4, + 0x02, 0x0a, 0x3c, 0x2b, 0xcb, 0x00, 0xb6, 0x85, 0xec, 0x3d, 0xad, 0x86, 0x8c, 0x46, 0x31, 0xd3, + 0x23, 0x4a, 0x9b, 0xd8, 0xa4, 0x2b, 0x4a, 0x36, 0x6d, 0x35, 0x1a, 0xca, 0x03, 0x9d, 0x54, 0x1b, + 0xe9, 0x91, 0x29, 0xeb, 0x74, 0x91, 0x75, 0x65, 0xdb, 0x0e, 0x14, 0x1c, 0x84, 0xf3, 0x1e, 0xd5, + 0xd8, 0x9b, 0x65, 0x89, 0x13, 0x73, 0xb1, 0x6f, 0xa6, 0x32, 0x18, 0x7d, 0xb1, 0x51, 0x47, 0x7c, + 0x54, 0x6e, 0x01, 0xbf, 0x41, 0x23, 0x69, 0x05, 0xa4, 0x0a, 0xe5, 0x79, 0xe3, 0x86, 0xde, 0x44, + 0x53, 0xcf, 0x43, 0x21, 0x18, 0x1e, 0x65, 0x12, 0xd2, 0xae, 0xa7, 0x3b, 0x1e, 0xc9, 0xc2, 0xb4, + 0x4a, 0x1f, 0x14, 0x19, 0x92, 0xc8, 0xaa, 0x91, 0x2a, 0x97, 0x56, 0xf1, 0x9f, 0xca, 0xff, 0xeb, + 0xbc, 0x70, 0x92, 0xbc, 0xf0, 0xed, 0xdd, 0x33, 0x1a, 0x60, 0x0e, 0xbf, 0xf7, 0xd4, 0xfd, 0x30, + 0x1a, 0x78, 0x81, 0x41, 0x87, 0x9e, 0xf9, 0x39, 0xb8, 0x21, 0x92, 0x5a, 0x79, 0x02, 0x26, 0xdb, + 0x96, 0x69, 0x79, 0xc8, 0x69, 0x39, 0x08, 0x67, 0x2c, 0x1d, 0xaa, 0xf8, 0xcf, 0x23, 0x3d, 0x72, + 0x6e, 0x47, 0xb4, 0xa6, 0x2c, 0xea, 0x44, 0xbb, 0xbb, 0xf1, 0x54, 0x36, 0xf3, 0xf6, 0x88, 0x7c, + 0xed, 0xda, 0xb5, 0x6b, 0x89, 0x99, 0x17, 0x87, 0x61, 0x32, 0x6a, 0xcd, 0x44, 0x2e, 0xdf, 0x63, + 0x30, 0x6c, 0xb5, 0x9b, 0xbb, 0xc8, 0x21, 0x41, 0x4a, 0xab, 0xec, 0x49, 0x29, 0x43, 0xba, 0xa1, + 0xef, 0xa2, 0x46, 0x31, 0x75, 0x42, 0x9a, 0x2d, 0x2c, 0x9c, 0x1e, 0x68, 0x55, 0xce, 0xad, 0x61, + 0x88, 0x4a, 0x91, 0xca, 0x43, 0x90, 0x62, 0x25, 0x1a, 0x33, 0x9c, 0x1a, 0x8c, 0x01, 0xaf, 0x25, + 0x95, 0xe0, 0x94, 0x4f, 0x41, 0x16, 0xff, 0x4b, 0x73, 0x63, 0x98, 0xf8, 0x9c, 0xc1, 0x0d, 0x38, + 0x2f, 0x94, 0x29, 0xc8, 0x90, 0x65, 0x52, 0x43, 0x7c, 0x6b, 0xf3, 0x9f, 0x71, 0x62, 0xd5, 0xd0, + 0x9e, 0xde, 0x6e, 0x78, 0xda, 0x15, 0xbd, 0xd1, 0x46, 0x24, 0xe1, 0xb3, 0x6a, 0x9e, 0x35, 0x3e, + 0x86, 0xdb, 0x94, 0xe3, 0x90, 0xa3, 0xab, 0xca, 0xb4, 0x6a, 0xe8, 0x39, 0x52, 0x3d, 0xd3, 0x2a, + 0x5d, 0x68, 0xab, 0xb8, 0x05, 0x0f, 0xff, 0x8c, 0x6b, 0x5b, 0x3c, 0x35, 0xc9, 0x10, 0xb8, 0x81, + 0x0c, 0x7f, 0x7f, 0xb8, 0x70, 0xdf, 0x1c, 0xfd, 0x7a, 0xe1, 0x9c, 0x9a, 0xf9, 0x66, 0x02, 0x52, + 0xa4, 0x5e, 0x8c, 0x41, 0x6e, 0xfb, 0xc9, 0xad, 0x8a, 0xb6, 0xbc, 0xb9, 0xb3, 0xb8, 0x56, 0x91, + 0x25, 0xa5, 0x00, 0x40, 0x1a, 0x2e, 0xae, 0x6d, 0x96, 0xb7, 0xe5, 0x84, 0xff, 0xbc, 0xba, 0xb1, + 0x7d, 0xee, 0x8c, 0x9c, 0xf4, 0x01, 0x3b, 0xb4, 0x21, 0x25, 0x1a, 0xdc, 0xb7, 0x20, 0xa7, 0x15, + 0x19, 0xf2, 0x94, 0x60, 0xf5, 0x89, 0xca, 0xf2, 0xb9, 0x33, 0xf2, 0x70, 0xb0, 0xe5, 0xbe, 0x05, + 0x79, 0x44, 0x19, 0x85, 0x2c, 0x69, 0x59, 0xdc, 0xdc, 0x5c, 0x93, 0x33, 0x3e, 0x67, 0x75, 0x5b, + 0x5d, 0xdd, 0x58, 0x91, 0xb3, 0x3e, 0xe7, 0x8a, 0xba, 0xb9, 0xb3, 0x25, 0x83, 0xcf, 0xb0, 0x5e, + 0xa9, 0x56, 0xcb, 0x2b, 0x15, 0x39, 0xe7, 0x5b, 0x2c, 0x3e, 0xb9, 0x5d, 0xa9, 0xca, 0xf9, 0x80, + 0x5b, 0xf7, 0x2d, 0xc8, 0xa3, 0xfe, 0x10, 0x95, 0x8d, 0x9d, 0x75, 0xb9, 0xa0, 0x8c, 0xc3, 0x28, + 0x1d, 0x82, 0x3b, 0x31, 0x16, 0x6a, 0x3a, 0x77, 0x46, 0x96, 0x3b, 0x8e, 0x50, 0x96, 0xf1, 0x40, + 0xc3, 0xb9, 0x33, 0xb2, 0x32, 0xb3, 0x04, 0x69, 0x92, 0x5d, 0x8a, 0x02, 0x85, 0xb5, 0xf2, 0x62, + 0x65, 0x4d, 0xdb, 0xdc, 0xda, 0x5e, 0xdd, 0xdc, 0x28, 0xaf, 0xc9, 0x52, 0xa7, 0x4d, 0xad, 0x7c, + 0x76, 0x67, 0x55, 0xad, 0x2c, 0xcb, 0x09, 0xb1, 0x6d, 0xab, 0x52, 0xde, 0xae, 0x2c, 0xcb, 0xc9, + 0x19, 0x03, 0x26, 0xa3, 0xea, 0x64, 0xe4, 0xca, 0x10, 0xa6, 0x38, 0xd1, 0x63, 0x8a, 0x09, 0x57, + 0xd7, 0x14, 0xff, 0x24, 0x01, 0x13, 0x11, 0x7b, 0x45, 0xe4, 0x20, 0x0f, 0x43, 0x9a, 0xa6, 0x28, + 0xdd, 0x3d, 0xef, 0x8c, 0xdc, 0x74, 0x48, 0xc2, 0x76, 0xed, 0xa0, 0x04, 0x27, 0x2a, 0x88, 0x64, + 0x0f, 0x05, 0x81, 0x29, 0xba, 0x6a, 0xfa, 0xd3, 0x5d, 0x35, 0x9d, 0x6e, 0x7b, 0xe7, 0x06, 0xd9, + 0xf6, 0x48, 0xdb, 0xd1, 0x6a, 0x7b, 0x3a, 0xa2, 0xb6, 0x5f, 0x80, 0xf1, 0x2e, 0xa2, 0x81, 0x6b, + 0xec, 0x0b, 0x12, 0x14, 0x7b, 0x05, 0x27, 0xa6, 0xd2, 0x25, 0x02, 0x95, 0xee, 0x42, 0x38, 0x82, + 0x27, 0x7b, 0x4f, 0x42, 0xd7, 0x5c, 0xbf, 0x26, 0xc1, 0xb1, 0x68, 0xa5, 0x18, 0xe9, 0xc3, 0x43, + 0x30, 0xdc, 0x44, 0xde, 0xbe, 0xcd, 0xd5, 0xd2, 0xed, 0x11, 0x7b, 0x30, 0xee, 0x0e, 0x4f, 0x36, + 0x43, 0x89, 0x9b, 0x78, 0xb2, 0x97, 0xdc, 0xa3, 0xde, 0x74, 0x79, 0xfa, 0xf9, 0x04, 0xdc, 0x10, + 0x49, 0x1e, 0xe9, 0xe8, 0xcd, 0x00, 0xa6, 0xd5, 0x6a, 0x7b, 0x54, 0x11, 0xd1, 0x02, 0x9b, 0x25, + 0x2d, 0xa4, 0x78, 0xe1, 0xe2, 0xd9, 0xf6, 0xfc, 0xfe, 0x24, 0xe9, 0x07, 0xda, 0x44, 0x0c, 0xce, + 0x77, 0x1c, 0x4d, 0x11, 0x47, 0xa7, 0x7b, 0xbc, 0x69, 0x57, 0x62, 0xde, 0x03, 0xb2, 0xd1, 0x30, + 0x91, 0xe5, 0x69, 0xae, 0xe7, 0x20, 0xbd, 0x69, 0x5a, 0x75, 0xb2, 0x83, 0x64, 0x4a, 0xe9, 0x3d, + 0xbd, 0xe1, 0x22, 0x75, 0x8c, 0x76, 0x57, 0x79, 0x2f, 0x46, 0x90, 0x04, 0x72, 0x04, 0xc4, 0x70, + 0x00, 0x41, 0xbb, 0x7d, 0xc4, 0xcc, 0x37, 0x32, 0x90, 0x13, 0x74, 0xb5, 0x72, 0x12, 0xf2, 0xcf, + 0xe8, 0x57, 0x74, 0x8d, 0x9f, 0x95, 0x68, 0x24, 0x72, 0xb8, 0x6d, 0x8b, 0x9d, 0x97, 0xee, 0x81, + 0x49, 0x62, 0x62, 0xb7, 0x3d, 0xe4, 0x68, 0x46, 0x43, 0x77, 0x5d, 0x12, 0xb4, 0x0c, 0x31, 0x55, + 0x70, 0xdf, 0x26, 0xee, 0x5a, 0xe2, 0x3d, 0xca, 0x59, 0x98, 0x20, 0x88, 0x66, 0xbb, 0xe1, 0x99, + 0xad, 0x06, 0xd2, 0xf0, 0xe9, 0xcd, 0x25, 0x3b, 0x89, 0xef, 0xd9, 0x38, 0xb6, 0x58, 0x67, 0x06, + 0xd8, 0x23, 0x57, 0x59, 0x86, 0x9b, 0x09, 0xac, 0x8e, 0x2c, 0xe4, 0xe8, 0x1e, 0xd2, 0xd0, 0xb3, + 0x6d, 0xbd, 0xe1, 0x6a, 0xba, 0x55, 0xd3, 0xf6, 0x75, 0x77, 0xbf, 0x38, 0x89, 0x09, 0x16, 0x13, + 0x45, 0x49, 0xbd, 0x09, 0x1b, 0xae, 0x30, 0xbb, 0x0a, 0x31, 0x2b, 0x5b, 0xb5, 0x4b, 0xba, 0xbb, + 0xaf, 0x94, 0xe0, 0x18, 0x61, 0x71, 0x3d, 0xc7, 0xb4, 0xea, 0x9a, 0xb1, 0x8f, 0x8c, 0xcb, 0x5a, + 0xdb, 0xdb, 0x3b, 0x5f, 0xfc, 0x94, 0x38, 0x3e, 0xf1, 0xb0, 0x4a, 0x6c, 0x96, 0xb0, 0xc9, 0x8e, + 0xb7, 0x77, 0x5e, 0xa9, 0x42, 0x1e, 0x4f, 0x46, 0xd3, 0x7c, 0x1e, 0x69, 0x7b, 0xb6, 0x43, 0xb6, + 0xc6, 0x42, 0x44, 0x69, 0x12, 0x22, 0x38, 0xb7, 0xc9, 0x00, 0xeb, 0x76, 0x0d, 0x95, 0xd2, 0xd5, + 0xad, 0x4a, 0x65, 0x59, 0xcd, 0x71, 0x96, 0x8b, 0xb6, 0x83, 0x13, 0xaa, 0x6e, 0xfb, 0x01, 0xce, + 0xd1, 0x84, 0xaa, 0xdb, 0x3c, 0xbc, 0x67, 0x61, 0xc2, 0x30, 0xe8, 0x3b, 0x9b, 0x86, 0xc6, 0xce, + 0x58, 0x6e, 0x51, 0x0e, 0x04, 0xcb, 0x30, 0x56, 0xa8, 0x01, 0xcb, 0x71, 0x57, 0x79, 0x00, 0x6e, + 0xe8, 0x04, 0x4b, 0x04, 0x8e, 0x77, 0xbd, 0x65, 0x18, 0x7a, 0x16, 0x26, 0x5a, 0x07, 0xdd, 0x40, + 0x25, 0x30, 0x62, 0xeb, 0x20, 0x0c, 0xbb, 0x1f, 0x26, 0x5b, 0xfb, 0xad, 0x6e, 0xdc, 0x29, 0x11, + 0xa7, 0xb4, 0xf6, 0x5b, 0x61, 0xe0, 0x6d, 0xe4, 0xc0, 0xed, 0x20, 0x43, 0xf7, 0x50, 0xad, 0x78, + 0xa3, 0x68, 0x2e, 0x74, 0x28, 0xf3, 0x20, 0x1b, 0x86, 0x86, 0x2c, 0x7d, 0xb7, 0x81, 0x34, 0xdd, + 0x41, 0x96, 0xee, 0x16, 0x8f, 0x8b, 0xc6, 0x05, 0xc3, 0xa8, 0x90, 0xde, 0x32, 0xe9, 0x54, 0x4e, + 0xc1, 0xb8, 0xbd, 0xfb, 0x8c, 0x41, 0x53, 0x52, 0x6b, 0x39, 0x68, 0xcf, 0x7c, 0xae, 0x78, 0x2b, + 0x89, 0xef, 0x18, 0xee, 0x20, 0x09, 0xb9, 0x45, 0x9a, 0x95, 0x3b, 0x41, 0x36, 0xdc, 0x7d, 0xdd, + 0x69, 0x91, 0x9a, 0xec, 0xb6, 0x74, 0x03, 0x15, 0x6f, 0xa3, 0xa6, 0xb4, 0x7d, 0x83, 0x37, 0xe3, + 0x25, 0xe1, 0x5e, 0x35, 0xf7, 0x3c, 0xce, 0x78, 0x07, 0x5d, 0x12, 0xa4, 0x8d, 0xb1, 0xcd, 0x82, + 0x8c, 0x43, 0x11, 0x18, 0x78, 0x96, 0x98, 0x15, 0x5a, 0xfb, 0x2d, 0x71, 0xdc, 0x5b, 0x60, 0x14, + 0x5b, 0x76, 0x06, 0xbd, 0x93, 0x0a, 0xb2, 0xd6, 0xbe, 0x30, 0xe2, 0x47, 0xa6, 0x8d, 0x67, 0x4a, + 0x90, 0x17, 0xf3, 0x53, 0xc9, 0x02, 0xcd, 0x50, 0x59, 0xc2, 0x62, 0x65, 0x69, 0x73, 0x19, 0xcb, + 0x8c, 0xa7, 0x2a, 0x72, 0x02, 0xcb, 0x9d, 0xb5, 0xd5, 0xed, 0x8a, 0xa6, 0xee, 0x6c, 0x6c, 0xaf, + 0xae, 0x57, 0xe4, 0xa4, 0xa8, 0xab, 0xbf, 0x97, 0x80, 0x42, 0xf0, 0x88, 0xa4, 0x7c, 0x06, 0x6e, + 0xe4, 0xf7, 0x19, 0x2e, 0xf2, 0xb4, 0xab, 0xa6, 0x43, 0x96, 0x4c, 0x53, 0xa7, 0xdb, 0x97, 0x3f, + 0x69, 0x93, 0xcc, 0xaa, 0x8a, 0xbc, 0xc7, 0x4d, 0x07, 0x2f, 0x88, 0xa6, 0xee, 0x29, 0x6b, 0x70, + 0xdc, 0xb2, 0x35, 0xd7, 0xd3, 0xad, 0x9a, 0xee, 0xd4, 0xb4, 0xce, 0x4d, 0x92, 0xa6, 0x1b, 0x06, + 0x72, 0x5d, 0x9b, 0x6e, 0x55, 0x3e, 0xcb, 0xa7, 0x2d, 0xbb, 0xca, 0x8c, 0x3b, 0x35, 0xbc, 0xcc, + 0x4c, 0x43, 0x09, 0x96, 0xec, 0x95, 0x60, 0x9f, 0x82, 0x6c, 0x53, 0x6f, 0x69, 0xc8, 0xf2, 0x9c, + 0x03, 0x22, 0x8c, 0x33, 0x6a, 0xa6, 0xa9, 0xb7, 0x2a, 0xf8, 0xf9, 0xe3, 0x39, 0x9f, 0xfc, 0x38, + 0x09, 0x79, 0x51, 0x1c, 0xe3, 0xb3, 0x86, 0x41, 0xf6, 0x11, 0x89, 0x54, 0x9a, 0x5b, 0xfa, 0x4a, + 0xe9, 0xb9, 0x25, 0xbc, 0xc1, 0x94, 0x86, 0xa9, 0x64, 0x55, 0x29, 0x12, 0x6f, 0xee, 0xb8, 0xb6, + 0x20, 0x2a, 0x11, 0x32, 0x2a, 0x7b, 0x52, 0x56, 0x60, 0xf8, 0x19, 0x97, 0x70, 0x0f, 0x13, 0xee, + 0x5b, 0xfb, 0x73, 0x3f, 0x52, 0x25, 0xe4, 0xd9, 0x47, 0xaa, 0xda, 0xc6, 0xa6, 0xba, 0x5e, 0x5e, + 0x53, 0x19, 0x5c, 0xb9, 0x09, 0x52, 0x0d, 0xfd, 0xf9, 0x83, 0xe0, 0x56, 0x44, 0x9a, 0x06, 0x0d, + 0xfc, 0x4d, 0x90, 0xba, 0x8a, 0xf4, 0xcb, 0xc1, 0x0d, 0x80, 0x34, 0x7d, 0x84, 0xa9, 0x3f, 0x0f, + 0x69, 0x12, 0x2f, 0x05, 0x80, 0x45, 0x4c, 0x1e, 0x52, 0x32, 0x90, 0x5a, 0xda, 0x54, 0x71, 0xfa, + 0xcb, 0x90, 0xa7, 0xad, 0xda, 0xd6, 0x6a, 0x65, 0xa9, 0x22, 0x27, 0x66, 0xce, 0xc2, 0x30, 0x0d, + 0x02, 0x5e, 0x1a, 0x7e, 0x18, 0xe4, 0x21, 0xf6, 0xc8, 0x38, 0x24, 0xde, 0xbb, 0xb3, 0xbe, 0x58, + 0x51, 0xe5, 0x84, 0x38, 0xbd, 0x2e, 0xe4, 0x45, 0x5d, 0xfc, 0xf1, 0xe4, 0xd4, 0x77, 0x24, 0xc8, + 0x09, 0x3a, 0x17, 0x0b, 0x14, 0xbd, 0xd1, 0xb0, 0xaf, 0x6a, 0x7a, 0xc3, 0xd4, 0x5d, 0x96, 0x14, + 0x40, 0x9a, 0xca, 0xb8, 0x65, 0xd0, 0x49, 0xfb, 0x58, 0x9c, 0x7f, 0x45, 0x02, 0x39, 0x2c, 0x31, + 0x43, 0x0e, 0x4a, 0x3f, 0x53, 0x07, 0x5f, 0x96, 0xa0, 0x10, 0xd4, 0x95, 0x21, 0xf7, 0x4e, 0xfe, + 0x4c, 0xdd, 0x7b, 0x33, 0x01, 0xa3, 0x01, 0x35, 0x39, 0xa8, 0x77, 0xcf, 0xc2, 0xb8, 0x59, 0x43, + 0xcd, 0x96, 0xed, 0x21, 0xcb, 0x38, 0xd0, 0x1a, 0xe8, 0x0a, 0x6a, 0x14, 0x67, 0x48, 0xa1, 0x98, + 0xef, 0xaf, 0x57, 0xe7, 0x56, 0x3b, 0xb8, 0x35, 0x0c, 0x2b, 0x4d, 0xac, 0x2e, 0x57, 0xd6, 0xb7, + 0x36, 0xb7, 0x2b, 0x1b, 0x4b, 0x4f, 0x6a, 0x3b, 0x1b, 0x8f, 0x6e, 0x6c, 0x3e, 0xbe, 0xa1, 0xca, + 0x66, 0xc8, 0xec, 0x23, 0x5c, 0xea, 0x5b, 0x20, 0x87, 0x9d, 0x52, 0x6e, 0x84, 0x28, 0xb7, 0xe4, + 0x21, 0x65, 0x02, 0xc6, 0x36, 0x36, 0xb5, 0xea, 0xea, 0x72, 0x45, 0xab, 0x5c, 0xbc, 0x58, 0x59, + 0xda, 0xae, 0xd2, 0x1b, 0x08, 0xdf, 0x7a, 0x3b, 0xb8, 0xa8, 0x5f, 0x4a, 0xc2, 0x44, 0x84, 0x27, + 0x4a, 0x99, 0x9d, 0x1d, 0xe8, 0x71, 0xe6, 0xee, 0x41, 0xbc, 0x9f, 0xc3, 0x5b, 0xfe, 0x96, 0xee, + 0x78, 0xec, 0xa8, 0x71, 0x27, 0xe0, 0x28, 0x59, 0x9e, 0xb9, 0x67, 0x22, 0x87, 0x5d, 0xd8, 0xd0, + 0x03, 0xc5, 0x58, 0xa7, 0x9d, 0xde, 0xd9, 0xdc, 0x05, 0x4a, 0xcb, 0x76, 0x4d, 0xcf, 0xbc, 0x82, + 0x34, 0xd3, 0xe2, 0xb7, 0x3b, 0xf8, 0x80, 0x91, 0x52, 0x65, 0xde, 0xb3, 0x6a, 0x79, 0xbe, 0xb5, + 0x85, 0xea, 0x7a, 0xc8, 0x1a, 0x17, 0xf0, 0xa4, 0x2a, 0xf3, 0x1e, 0xdf, 0xfa, 0x24, 0xe4, 0x6b, + 0x76, 0x1b, 0xab, 0x2e, 0x6a, 0x87, 0xf7, 0x0b, 0x49, 0xcd, 0xd1, 0x36, 0xdf, 0x84, 0xe9, 0xe9, + 0xce, 0xb5, 0x52, 0x5e, 0xcd, 0xd1, 0x36, 0x6a, 0x72, 0x07, 0x8c, 0xe9, 0xf5, 0xba, 0x83, 0xc9, + 0x39, 0x11, 0x3d, 0x21, 0x14, 0xfc, 0x66, 0x62, 0x38, 0xf5, 0x08, 0x64, 0x78, 0x1c, 0xf0, 0x96, + 0x8c, 0x23, 0xa1, 0xb5, 0xe8, 0xb1, 0x37, 0x31, 0x9b, 0x55, 0x33, 0x16, 0xef, 0x3c, 0x09, 0x79, + 0xd3, 0xd5, 0x3a, 0xb7, 0xe4, 0x89, 0x13, 0x89, 0xd9, 0x8c, 0x9a, 0x33, 0x5d, 0xff, 0x86, 0x71, + 0xe6, 0xb5, 0x04, 0x14, 0x82, 0xb7, 0xfc, 0xca, 0x32, 0x64, 0x1a, 0xb6, 0xa1, 0x93, 0xd4, 0xa2, + 0x9f, 0x98, 0x66, 0x63, 0x3e, 0x0c, 0xcc, 0xad, 0x31, 0x7b, 0xd5, 0x47, 0x4e, 0xfd, 0x93, 0x04, + 0x19, 0xde, 0xac, 0x1c, 0x83, 0x54, 0x4b, 0xf7, 0xf6, 0x09, 0x5d, 0x7a, 0x31, 0x21, 0x4b, 0x2a, + 0x79, 0xc6, 0xed, 0x6e, 0x4b, 0xb7, 0x48, 0x0a, 0xb0, 0x76, 0xfc, 0x8c, 0xe7, 0xb5, 0x81, 0xf4, + 0x1a, 0x39, 0x7e, 0xd8, 0xcd, 0x26, 0xb2, 0x3c, 0x97, 0xcf, 0x2b, 0x6b, 0x5f, 0x62, 0xcd, 0xca, + 0x69, 0x18, 0xf7, 0x1c, 0xdd, 0x6c, 0x04, 0x6c, 0x53, 0xc4, 0x56, 0xe6, 0x1d, 0xbe, 0x71, 0x09, + 0x6e, 0xe2, 0xbc, 0x35, 0xe4, 0xe9, 0xc6, 0x3e, 0xaa, 0x75, 0x40, 0xc3, 0xe4, 0x9a, 0xe1, 0x46, + 0x66, 0xb0, 0xcc, 0xfa, 0x39, 0x76, 0xe6, 0x07, 0x12, 0x8c, 0xf3, 0x03, 0x53, 0xcd, 0x0f, 0xd6, + 0x3a, 0x80, 0x6e, 0x59, 0xb6, 0x27, 0x86, 0xab, 0x3b, 0x95, 0xbb, 0x70, 0x73, 0x65, 0x1f, 0xa4, + 0x0a, 0x04, 0x53, 0x4d, 0x80, 0x4e, 0x4f, 0xcf, 0xb0, 0x1d, 0x87, 0x1c, 0xfb, 0x84, 0x43, 0xbe, + 0x03, 0xd2, 0x23, 0x36, 0xd0, 0x26, 0x7c, 0xb2, 0x52, 0x26, 0x21, 0xbd, 0x8b, 0xea, 0xa6, 0xc5, + 0x2e, 0x66, 0xe9, 0x03, 0xbf, 0x08, 0x49, 0xf9, 0x17, 0x21, 0x8b, 0x9f, 0x83, 0x09, 0xc3, 0x6e, + 0x86, 0xdd, 0x5d, 0x94, 0x43, 0xc7, 0x7c, 0xf7, 0x92, 0xf4, 0x14, 0x74, 0x24, 0xe6, 0xfb, 0x92, + 0xf4, 0xa5, 0x44, 0x72, 0x65, 0x6b, 0xf1, 0xab, 0x89, 0xa9, 0x15, 0x0a, 0xdd, 0xe2, 0x6f, 0xaa, + 0xa2, 0xbd, 0x06, 0x32, 0xb0, 0xf7, 0xf0, 0xe5, 0xd3, 0x70, 0x77, 0xdd, 0xf4, 0xf6, 0xdb, 0xbb, + 0x73, 0x86, 0xdd, 0x9c, 0xaf, 0xdb, 0x75, 0xbb, 0xf3, 0xe9, 0x13, 0x3f, 0x91, 0x07, 0xf2, 0x17, + 0xfb, 0xfc, 0x99, 0xf5, 0x5b, 0xa7, 0x62, 0xbf, 0x95, 0x96, 0x36, 0x60, 0x82, 0x19, 0x6b, 0xe4, + 0xfb, 0x0b, 0x3d, 0x45, 0x28, 0x7d, 0xef, 0xb0, 0x8a, 0x5f, 0x7f, 0x8b, 0x6c, 0xd7, 0xea, 0x38, + 0x83, 0xe2, 0x3e, 0x7a, 0xd0, 0x28, 0xa9, 0x70, 0x43, 0x80, 0x8f, 0x2e, 0x4d, 0xe4, 0xc4, 0x30, + 0x7e, 0x8f, 0x31, 0x4e, 0x08, 0x8c, 0x55, 0x06, 0x2d, 0x2d, 0xc1, 0xe8, 0x51, 0xb8, 0xfe, 0x9e, + 0x71, 0xe5, 0x91, 0x48, 0xb2, 0x02, 0x63, 0x84, 0xc4, 0x68, 0xbb, 0x9e, 0xdd, 0x24, 0x75, 0xaf, + 0x3f, 0xcd, 0x3f, 0xbc, 0x45, 0xd7, 0x4a, 0x01, 0xc3, 0x96, 0x7c, 0x54, 0xa9, 0x04, 0xe4, 0x93, + 0x53, 0x0d, 0x19, 0x8d, 0x18, 0x86, 0xd7, 0x99, 0x23, 0xbe, 0x7d, 0xe9, 0x31, 0x98, 0xc4, 0x7f, + 0x93, 0xb2, 0x24, 0x7a, 0x12, 0x7f, 0xe1, 0x55, 0xfc, 0xc1, 0x0b, 0x74, 0x39, 0x4e, 0xf8, 0x04, + 0x82, 0x4f, 0xc2, 0x2c, 0xd6, 0x91, 0xe7, 0x21, 0xc7, 0xd5, 0xf4, 0x46, 0x94, 0x7b, 0xc2, 0x8d, + 0x41, 0xf1, 0x0b, 0xef, 0x04, 0x67, 0x71, 0x85, 0x22, 0xcb, 0x8d, 0x46, 0x69, 0x07, 0x6e, 0x8c, + 0xc8, 0x8a, 0x01, 0x38, 0x5f, 0x62, 0x9c, 0x93, 0x5d, 0x99, 0x81, 0x69, 0xb7, 0x80, 0xb7, 0xfb, + 0x73, 0x39, 0x00, 0xe7, 0xef, 0x33, 0x4e, 0x85, 0x61, 0xf9, 0x94, 0x62, 0xc6, 0x47, 0x60, 0xfc, + 0x0a, 0x72, 0x76, 0x6d, 0x97, 0xdd, 0xd2, 0x0c, 0x40, 0xf7, 0x32, 0xa3, 0x1b, 0x63, 0x40, 0x72, + 0x6d, 0x83, 0xb9, 0x1e, 0x80, 0xcc, 0x9e, 0x6e, 0xa0, 0x01, 0x28, 0xbe, 0xc8, 0x28, 0x46, 0xb0, + 0x3d, 0x86, 0x96, 0x21, 0x5f, 0xb7, 0xd9, 0xce, 0x14, 0x0f, 0x7f, 0x85, 0xc1, 0x73, 0x1c, 0xc3, + 0x28, 0x5a, 0x76, 0xab, 0xdd, 0xc0, 0xdb, 0x56, 0x3c, 0xc5, 0x1f, 0x70, 0x0a, 0x8e, 0x61, 0x14, + 0x47, 0x08, 0xeb, 0x1f, 0x72, 0x0a, 0x57, 0x88, 0xe7, 0xc3, 0x90, 0xb3, 0xad, 0xc6, 0x81, 0x6d, + 0x0d, 0xe2, 0xc4, 0xab, 0x8c, 0x01, 0x18, 0x04, 0x13, 0x5c, 0x80, 0xec, 0xa0, 0x13, 0xf1, 0xc7, + 0xef, 0xf0, 0xe5, 0xc1, 0x67, 0x60, 0x05, 0xc6, 0x78, 0x81, 0x32, 0x6d, 0x6b, 0x00, 0x8a, 0x2f, + 0x33, 0x8a, 0x82, 0x00, 0x63, 0xaf, 0xe1, 0x21, 0xd7, 0xab, 0xa3, 0x41, 0x48, 0x5e, 0xe3, 0xaf, + 0xc1, 0x20, 0x2c, 0x94, 0xbb, 0xc8, 0x32, 0xf6, 0x07, 0x63, 0xf8, 0x0a, 0x0f, 0x25, 0xc7, 0x60, + 0x8a, 0x25, 0x18, 0x6d, 0xea, 0x8e, 0xbb, 0xaf, 0x37, 0x06, 0x9a, 0x8e, 0x3f, 0x61, 0x1c, 0x79, + 0x1f, 0xc4, 0x22, 0xd2, 0xb6, 0x8e, 0x42, 0xf3, 0x55, 0x1e, 0x11, 0x01, 0xc6, 0x96, 0x9e, 0xeb, + 0x91, 0x2b, 0xad, 0xa3, 0xb0, 0xfd, 0x29, 0x5f, 0x7a, 0x14, 0xbb, 0x2e, 0x32, 0x5e, 0x80, 0xac, + 0x6b, 0x3e, 0x3f, 0x10, 0xcd, 0x9f, 0xf1, 0x99, 0x26, 0x00, 0x0c, 0x7e, 0x12, 0x6e, 0x8a, 0xdc, + 0x26, 0x06, 0x20, 0xfb, 0x73, 0x46, 0x76, 0x2c, 0x62, 0xab, 0x60, 0x25, 0xe1, 0xa8, 0x94, 0x7f, + 0xc1, 0x4b, 0x02, 0x0a, 0x71, 0x6d, 0xe1, 0xb3, 0x82, 0xab, 0xef, 0x1d, 0x2d, 0x6a, 0x7f, 0xc9, + 0xa3, 0x46, 0xb1, 0x81, 0xa8, 0x6d, 0xc3, 0x31, 0xc6, 0x78, 0xb4, 0x79, 0xfd, 0x1a, 0x2f, 0xac, + 0x14, 0xbd, 0x13, 0x9c, 0xdd, 0xcf, 0xc1, 0x94, 0x1f, 0x4e, 0x2e, 0x4a, 0x5d, 0xad, 0xa9, 0xb7, + 0x06, 0x60, 0xfe, 0x3a, 0x63, 0xe6, 0x15, 0xdf, 0x57, 0xb5, 0xee, 0xba, 0xde, 0xc2, 0xe4, 0x4f, + 0x40, 0x91, 0x93, 0xb7, 0x2d, 0x07, 0x19, 0x76, 0xdd, 0x32, 0x9f, 0x47, 0xb5, 0x01, 0xa8, 0xff, + 0x2a, 0x34, 0x55, 0x3b, 0x02, 0x1c, 0x33, 0xaf, 0x82, 0xec, 0x6b, 0x15, 0xcd, 0x6c, 0xb6, 0x6c, + 0xc7, 0x8b, 0x61, 0xfc, 0x06, 0x9f, 0x29, 0x1f, 0xb7, 0x4a, 0x60, 0xa5, 0x0a, 0x14, 0xc8, 0xe3, + 0xa0, 0x29, 0xf9, 0xd7, 0x8c, 0x68, 0xb4, 0x83, 0x62, 0x85, 0xc3, 0xb0, 0x9b, 0x2d, 0xdd, 0x19, + 0xa4, 0xfe, 0xfd, 0x0d, 0x2f, 0x1c, 0x0c, 0xc2, 0x0a, 0x87, 0x77, 0xd0, 0x42, 0x78, 0xb7, 0x1f, + 0x80, 0xe1, 0x9b, 0xbc, 0x70, 0x70, 0x0c, 0xa3, 0xe0, 0x82, 0x61, 0x00, 0x8a, 0xbf, 0xe5, 0x14, + 0x1c, 0x83, 0x29, 0x3e, 0xdb, 0xd9, 0x68, 0x1d, 0x54, 0x37, 0x5d, 0xcf, 0xa1, 0x52, 0xb8, 0x3f, + 0xd5, 0xb7, 0xde, 0x09, 0x8a, 0x30, 0x55, 0x80, 0xe2, 0x4a, 0xc4, 0xae, 0x50, 0xc9, 0x49, 0x29, + 0xde, 0xb1, 0x6f, 0xf3, 0x4a, 0x24, 0xc0, 0xb0, 0x6f, 0x82, 0x42, 0xc4, 0x61, 0x37, 0xf0, 0xf9, + 0x60, 0x00, 0xba, 0xef, 0x84, 0x9c, 0xab, 0x72, 0x2c, 0xe6, 0x14, 0xf4, 0x4f, 0xdb, 0xba, 0x8c, + 0x0e, 0x06, 0xca, 0xce, 0xbf, 0x0b, 0xe9, 0x9f, 0x1d, 0x8a, 0xa4, 0x35, 0x64, 0x2c, 0xa4, 0xa7, + 0x94, 0xb8, 0x1f, 0xeb, 0x14, 0x7f, 0xe1, 0x3d, 0xf6, 0xbe, 0x41, 0x39, 0x55, 0x5a, 0xc3, 0x49, + 0x1e, 0x14, 0x3d, 0xf1, 0x64, 0x2f, 0xbc, 0xe7, 0xe7, 0x79, 0x40, 0xf3, 0x94, 0x2e, 0xc2, 0x68, + 0x40, 0xf0, 0xc4, 0x53, 0xfd, 0x22, 0xa3, 0xca, 0x8b, 0x7a, 0xa7, 0x74, 0x16, 0x52, 0x58, 0xbc, + 0xc4, 0xc3, 0x7f, 0x89, 0xc1, 0x89, 0x79, 0xe9, 0x41, 0xc8, 0x70, 0xd1, 0x12, 0x0f, 0xfd, 0x65, + 0x06, 0xf5, 0x21, 0x18, 0xce, 0x05, 0x4b, 0x3c, 0xfc, 0x57, 0x38, 0x9c, 0x43, 0x30, 0x7c, 0xf0, + 0x10, 0x7e, 0xf7, 0x57, 0x53, 0x6c, 0xd3, 0xe1, 0xb1, 0xbb, 0x00, 0x23, 0x4c, 0xa9, 0xc4, 0xa3, + 0x3f, 0xcf, 0x06, 0xe7, 0x88, 0xd2, 0xfd, 0x90, 0x1e, 0x30, 0xe0, 0xbf, 0xc6, 0xa0, 0xd4, 0xbe, + 0xb4, 0x04, 0x39, 0x41, 0x9d, 0xc4, 0xc3, 0x7f, 0x9d, 0xc1, 0x45, 0x14, 0x76, 0x9d, 0xa9, 0x93, + 0x78, 0x82, 0xdf, 0xe0, 0xae, 0x33, 0x04, 0x0e, 0x1b, 0x17, 0x26, 0xf1, 0xe8, 0xdf, 0xe4, 0x51, + 0xe7, 0x90, 0xd2, 0xc3, 0x90, 0xf5, 0x37, 0x9b, 0x78, 0xfc, 0x6f, 0x31, 0x7c, 0x07, 0x83, 0x23, + 0x20, 0x6c, 0x76, 0xf1, 0x14, 0xbf, 0xcd, 0x23, 0x20, 0xa0, 0xf0, 0x32, 0x0a, 0x0b, 0x98, 0x78, + 0xa6, 0xdf, 0xe1, 0xcb, 0x28, 0xa4, 0x5f, 0xf0, 0x6c, 0x92, 0x9a, 0x1f, 0x4f, 0xf1, 0xbb, 0x7c, + 0x36, 0x89, 0x3d, 0x76, 0x23, 0xac, 0x08, 0xe2, 0x39, 0x7e, 0x8f, 0xbb, 0x11, 0x12, 0x04, 0xa5, + 0x2d, 0x50, 0xba, 0xd5, 0x40, 0x3c, 0xdf, 0x8b, 0x8c, 0x6f, 0xbc, 0x4b, 0x0c, 0x94, 0x1e, 0x87, + 0x63, 0xd1, 0x4a, 0x20, 0x9e, 0xf5, 0x0b, 0xef, 0x85, 0xce, 0x6e, 0xa2, 0x10, 0x28, 0x6d, 0x77, + 0xb6, 0x14, 0x51, 0x05, 0xc4, 0xd3, 0xbe, 0xf4, 0x5e, 0xb0, 0x70, 0x8b, 0x22, 0xa0, 0x54, 0x06, + 0xe8, 0x6c, 0xc0, 0xf1, 0x5c, 0x2f, 0x33, 0x2e, 0x01, 0x84, 0x97, 0x06, 0xdb, 0x7f, 0xe3, 0xf1, + 0x5f, 0xe4, 0x4b, 0x83, 0x21, 0xf0, 0xd2, 0xe0, 0x5b, 0x6f, 0x3c, 0xfa, 0x15, 0xbe, 0x34, 0x38, + 0x04, 0x67, 0xb6, 0xb0, 0xbb, 0xc5, 0x33, 0xbc, 0xca, 0x33, 0x5b, 0x40, 0x95, 0x36, 0x60, 0xbc, + 0x6b, 0x43, 0x8c, 0xa7, 0xfa, 0x12, 0xa3, 0x92, 0xc3, 0xfb, 0xa1, 0xb8, 0x79, 0xb1, 0xcd, 0x30, + 0x9e, 0xed, 0x8f, 0x42, 0x9b, 0x17, 0xdb, 0x0b, 0x4b, 0x17, 0x20, 0x63, 0xb5, 0x1b, 0x0d, 0xbc, + 0x78, 0x94, 0xfe, 0x3f, 0xb0, 0x2b, 0xfe, 0xcb, 0x07, 0x2c, 0x3a, 0x1c, 0x50, 0x3a, 0x0b, 0x69, + 0xd4, 0xdc, 0x45, 0xb5, 0x38, 0xe4, 0xbf, 0x7e, 0xc0, 0x0b, 0x26, 0xb6, 0x2e, 0x3d, 0x0c, 0x40, + 0xaf, 0x46, 0xc8, 0x67, 0xbf, 0x18, 0xec, 0xbf, 0x7d, 0xc0, 0x7e, 0xfa, 0xd2, 0x81, 0x74, 0x08, + 0xe8, 0x0f, 0x69, 0xfa, 0x13, 0xbc, 0x13, 0x24, 0x20, 0x33, 0xf2, 0x00, 0x8c, 0x3c, 0xe3, 0xda, + 0x96, 0xa7, 0xd7, 0xe3, 0xd0, 0xff, 0xce, 0xd0, 0xdc, 0x1e, 0x07, 0xac, 0x69, 0x3b, 0xc8, 0xd3, + 0xeb, 0x6e, 0x1c, 0xf6, 0x3f, 0x18, 0xd6, 0x07, 0x60, 0xb0, 0xa1, 0xbb, 0xde, 0x20, 0xef, 0xfd, + 0x53, 0x0e, 0xe6, 0x00, 0xec, 0x34, 0xfe, 0xfb, 0x32, 0x3a, 0x88, 0xc3, 0xbe, 0xcb, 0x9d, 0x66, + 0xf6, 0xa5, 0x07, 0x21, 0x8b, 0xff, 0xa4, 0xbf, 0x67, 0x8b, 0x01, 0xff, 0x27, 0x03, 0x77, 0x10, + 0x78, 0x64, 0xd7, 0xab, 0x79, 0x66, 0x7c, 0xb0, 0xff, 0x8b, 0xcd, 0x34, 0xb7, 0x2f, 0x95, 0x21, + 0xe7, 0x7a, 0xb5, 0x5a, 0x9b, 0xe9, 0xd3, 0x18, 0xf8, 0x7f, 0x7f, 0xe0, 0x5f, 0x59, 0xf8, 0x18, + 0x3c, 0xdb, 0x57, 0x2f, 0x7b, 0x2d, 0x9b, 0x7c, 0xe6, 0x88, 0x63, 0x78, 0x8f, 0x31, 0x08, 0x90, + 0xc5, 0x4a, 0xf4, 0xf5, 0x2d, 0xac, 0xd8, 0x2b, 0x36, 0xbd, 0xb8, 0x7d, 0x6a, 0x26, 0xfe, 0x06, + 0x16, 0xfe, 0xe7, 0x6e, 0x38, 0x69, 0xd8, 0xcd, 0x5d, 0xdb, 0x9d, 0xf7, 0xcb, 0xf1, 0x7c, 0x53, + 0x6f, 0xb9, 0xa4, 0x7b, 0x81, 0x5d, 0xce, 0xe6, 0xd8, 0x13, 0xee, 0x98, 0x3a, 0xda, 0xc5, 0xee, + 0xcc, 0xcd, 0x30, 0x7a, 0xb1, 0x61, 0xeb, 0x9e, 0x69, 0xd5, 0xb7, 0xb0, 0xef, 0x4a, 0x1e, 0xa4, + 0x3d, 0xf2, 0x61, 0x52, 0x52, 0xa5, 0xbd, 0x99, 0x7f, 0x4c, 0x43, 0x96, 0xde, 0x09, 0xae, 0xeb, + 0x2d, 0xe5, 0xe7, 0x21, 0xbf, 0xc1, 0x16, 0xe2, 0xbd, 0x0b, 0xe7, 0x5d, 0xff, 0x1b, 0x84, 0x30, + 0xfe, 0x9c, 0x6f, 0x3d, 0x27, 0x9a, 0x92, 0x1f, 0x22, 0x2c, 0xde, 0xf3, 0xa3, 0x37, 0x8e, 0xdf, + 0xd5, 0xd3, 0x3f, 0x2c, 0x2d, 0xe6, 0xe9, 0x8a, 0x99, 0xdb, 0x31, 0x2d, 0xef, 0xde, 0x85, 0xf3, + 0x6a, 0x60, 0x3c, 0xe5, 0x0a, 0x64, 0x58, 0x87, 0xcb, 0xbe, 0x4d, 0xdd, 0xda, 0x63, 0x6c, 0x6e, + 0x46, 0xc7, 0x3d, 0xf3, 0xfa, 0x1b, 0xc7, 0x87, 0x8e, 0x3c, 0xb6, 0x3f, 0x96, 0xf2, 0x2c, 0xe4, + 0xb8, 0x1f, 0xab, 0x35, 0x97, 0xfd, 0x5f, 0x84, 0x3b, 0x62, 0x5e, 0x7b, 0xb5, 0xc6, 0x46, 0xbf, + 0xfd, 0x47, 0x6f, 0x1c, 0x9f, 0xe9, 0x3b, 0xf2, 0xdc, 0x4e, 0xdb, 0xac, 0xa9, 0xe2, 0x18, 0xca, + 0xd3, 0x90, 0xc4, 0x43, 0xd1, 0x9f, 0x6f, 0x1e, 0xef, 0x31, 0x94, 0x3f, 0xc4, 0x29, 0xf6, 0x82, + 0x83, 0x0c, 0x83, 0x79, 0xa7, 0x1e, 0x86, 0xf1, 0xae, 0xe9, 0x51, 0x64, 0x48, 0x5e, 0x46, 0x07, + 0xec, 0x77, 0x72, 0xf8, 0x4f, 0x65, 0xb2, 0xf3, 0x43, 0x56, 0x69, 0x36, 0xcf, 0x7e, 0x9d, 0x5a, + 0x4a, 0x9c, 0x97, 0xa6, 0x2e, 0xc0, 0x68, 0x20, 0xc6, 0x47, 0x02, 0x3f, 0x04, 0x72, 0x38, 0x4a, + 0x47, 0xc2, 0x9f, 0x83, 0xcc, 0x87, 0xc1, 0xcd, 0xfc, 0x50, 0x81, 0x91, 0x72, 0xa3, 0xb1, 0xae, + 0xb7, 0x5c, 0xe5, 0x49, 0x18, 0xa7, 0x07, 0xa0, 0x6d, 0x7b, 0x99, 0x7c, 0x0d, 0x5c, 0xd7, 0x5b, + 0x2c, 0xa1, 0x4f, 0x07, 0xc2, 0xcd, 0x00, 0x73, 0x5d, 0xd6, 0x64, 0x7c, 0xb5, 0x9b, 0x45, 0x79, + 0x0c, 0x64, 0xde, 0x48, 0xd6, 0x16, 0x66, 0xa6, 0xe9, 0x7a, 0xaa, 0x2f, 0x33, 0x37, 0xa6, 0xc4, + 0x5d, 0x1c, 0xca, 0x43, 0x90, 0x59, 0xb5, 0xbc, 0xfb, 0x16, 0x30, 0x1f, 0xcd, 0xc1, 0x99, 0x48, + 0x3e, 0x6e, 0x44, 0x79, 0x7c, 0x0c, 0xc3, 0x9f, 0x3b, 0x83, 0xf1, 0xa9, 0xfe, 0x78, 0x62, 0xd4, + 0xc1, 0x93, 0x47, 0xa5, 0x0c, 0x59, 0x3c, 0xe7, 0xd4, 0x01, 0xfa, 0xdf, 0x60, 0x6e, 0x89, 0x24, + 0xf0, 0xad, 0x28, 0x43, 0x07, 0xc5, 0x29, 0xa8, 0x0f, 0xc3, 0x31, 0x14, 0x82, 0x13, 0x1d, 0x14, + 0xa6, 0xa8, 0xfa, 0x5e, 0x8c, 0xf4, 0xa1, 0xa8, 0x86, 0xbc, 0xa8, 0x8a, 0x5e, 0x54, 0x7d, 0x2f, + 0x32, 0x31, 0x14, 0xa2, 0x17, 0xfe, 0xb3, 0xb2, 0x0c, 0x70, 0xd1, 0x7c, 0x0e, 0xd5, 0xa8, 0x1b, + 0xd9, 0x88, 0x62, 0xc4, 0x39, 0x3a, 0x66, 0x94, 0x44, 0xc0, 0x29, 0x2b, 0x90, 0xab, 0xee, 0x75, + 0x68, 0x80, 0xfd, 0x2f, 0xa0, 0x48, 0x57, 0xf6, 0x42, 0x3c, 0x22, 0xd2, 0x77, 0x87, 0xbe, 0x52, + 0x2e, 0xce, 0x1d, 0xe1, 0x9d, 0x04, 0x5c, 0xc7, 0x1d, 0x4a, 0x93, 0x8f, 0x75, 0x47, 0xe0, 0x11, + 0x91, 0xca, 0x05, 0x18, 0x59, 0xb4, 0x6d, 0x6c, 0x59, 0x1c, 0x25, 0x24, 0x27, 0x23, 0x49, 0x98, + 0x0d, 0x25, 0xe0, 0x08, 0x32, 0x3b, 0x24, 0xf5, 0x31, 0xbc, 0xd0, 0x6f, 0x76, 0xb8, 0x15, 0x9f, + 0x1d, 0xfe, 0x2c, 0xae, 0xc0, 0xc5, 0x03, 0x0f, 0xe1, 0xc3, 0x46, 0x71, 0x6c, 0x80, 0x15, 0xc8, + 0x8d, 0x43, 0x2b, 0x90, 0x37, 0x2b, 0x55, 0x18, 0xe3, 0x6d, 0x15, 0xab, 0x8d, 0x6b, 0x70, 0x51, + 0x66, 0x3f, 0xf1, 0xef, 0x47, 0xcb, 0x6c, 0x29, 0x6b, 0x98, 0x41, 0xd9, 0x82, 0x02, 0x6f, 0x5a, + 0x77, 0xc9, 0x4b, 0x8f, 0x47, 0xec, 0xab, 0x61, 0x4e, 0x6a, 0x4a, 0x29, 0x43, 0xf8, 0xa9, 0x65, + 0x38, 0x16, 0x5d, 0xad, 0xe2, 0xaa, 0xa5, 0x24, 0x56, 0xd9, 0x25, 0xb8, 0x21, 0xb2, 0x32, 0xc5, + 0x91, 0x24, 0x42, 0xfb, 0x44, 0xa0, 0x1c, 0x89, 0xe0, 0x74, 0x04, 0x38, 0xdd, 0x0d, 0xee, 0x24, + 0x99, 0x08, 0x4e, 0x46, 0x80, 0x93, 0x22, 0xf8, 0x33, 0x50, 0x08, 0xd6, 0x21, 0x11, 0x3d, 0x1a, + 0x81, 0x1e, 0x8d, 0x40, 0x47, 0x8f, 0x9d, 0x8a, 0x40, 0xa7, 0x42, 0xe8, 0x6a, 0xcf, 0xb1, 0xc7, + 0x23, 0xd0, 0xe3, 0x11, 0xe8, 0xe8, 0xb1, 0x95, 0x08, 0xb4, 0x22, 0xa2, 0x1f, 0x84, 0xb1, 0x50, + 0xc9, 0x11, 0xe1, 0x23, 0x11, 0xf0, 0x91, 0xd0, 0xde, 0x1c, 0x2e, 0x35, 0x22, 0x7e, 0x2c, 0x02, + 0x3f, 0x16, 0x35, 0x7c, 0xb4, 0xf7, 0xc3, 0x11, 0xf0, 0xe1, 0xc8, 0xe1, 0xa3, 0xf1, 0x72, 0x04, + 0x5e, 0x16, 0xf1, 0x25, 0xc8, 0x8b, 0x55, 0x45, 0xc4, 0x66, 0x22, 0xb0, 0x99, 0x70, 0xdc, 0x03, + 0x25, 0x25, 0x2e, 0xd3, 0xb3, 0x3d, 0x96, 0x4b, 0xa0, 0x8c, 0x1c, 0x49, 0xd9, 0x3c, 0x01, 0x93, + 0x51, 0x45, 0x23, 0x82, 0xe3, 0x94, 0xc8, 0x51, 0x58, 0x98, 0x0c, 0x14, 0x0b, 0x82, 0x6b, 0x37, + 0x45, 0xe6, 0xa7, 0x61, 0x22, 0xa2, 0x74, 0x44, 0x10, 0xdf, 0x23, 0x12, 0xe7, 0x16, 0xa6, 0x02, + 0xc4, 0x81, 0xb3, 0x82, 0x28, 0xad, 0x7e, 0x3c, 0x01, 0x05, 0x56, 0xa2, 0x36, 0x9d, 0x1a, 0x72, + 0x50, 0x4d, 0xf9, 0xff, 0xbd, 0x15, 0xd6, 0x42, 0x54, 0x69, 0x63, 0xb8, 0x23, 0x08, 0xad, 0xa7, + 0x7b, 0x0a, 0xad, 0x7b, 0x07, 0x19, 0x20, 0x4e, 0x6f, 0x55, 0xba, 0xf4, 0xd6, 0x9d, 0xfd, 0x68, + 0x7b, 0xc9, 0xae, 0x4a, 0x97, 0xec, 0x8a, 0xa3, 0x89, 0x54, 0x5f, 0x97, 0xba, 0xd5, 0xd7, 0xa9, + 0x7e, 0x3c, 0xbd, 0x45, 0xd8, 0xa5, 0x6e, 0x11, 0x16, 0xcb, 0x14, 0xad, 0xc5, 0x2e, 0x75, 0x6b, + 0xb1, 0xbe, 0x4c, 0xbd, 0x25, 0xd9, 0xa5, 0x6e, 0x49, 0x16, 0xcb, 0x14, 0xad, 0xcc, 0x1e, 0x8d, + 0x50, 0x66, 0xa7, 0xfb, 0x51, 0xf5, 0x13, 0x68, 0x1b, 0x51, 0x02, 0xed, 0xae, 0xbe, 0x8e, 0xf5, + 0xd5, 0x69, 0x8f, 0x46, 0xe8, 0xb4, 0x78, 0xe7, 0x7a, 0xc8, 0xb5, 0x8d, 0x28, 0xb9, 0x36, 0x80, + 0x73, 0xbd, 0x54, 0xdb, 0x62, 0x58, 0xb5, 0xcd, 0xf6, 0xe3, 0x8a, 0x16, 0x6f, 0x97, 0xba, 0xc5, + 0xdb, 0xa9, 0xf8, 0xb5, 0x18, 0xa5, 0xe1, 0x9e, 0xee, 0xa9, 0xe1, 0x06, 0x5a, 0xdc, 0x71, 0x52, + 0xee, 0xa9, 0x5e, 0x52, 0xee, 0x9e, 0x41, 0xd8, 0xfb, 0x2b, 0xba, 0xc7, 0x7b, 0x28, 0xba, 0xf9, + 0x41, 0xa8, 0x3f, 0x11, 0x76, 0x9f, 0x08, 0xbb, 0x4f, 0x84, 0xdd, 0x27, 0xc2, 0xee, 0xff, 0x86, + 0xb0, 0x2b, 0xa5, 0x5e, 0x7c, 0xf5, 0xb8, 0x74, 0xea, 0x24, 0x8c, 0xb0, 0xa1, 0x95, 0x61, 0x48, + 0xac, 0x97, 0xe5, 0x21, 0xf2, 0xef, 0xa2, 0x2c, 0x91, 0x7f, 0x97, 0xe4, 0xc4, 0xe2, 0xda, 0xeb, + 0xd7, 0xa7, 0x87, 0xbe, 0x7f, 0x7d, 0x7a, 0xe8, 0x87, 0xd7, 0xa7, 0x87, 0xde, 0xbc, 0x3e, 0x2d, + 0xbd, 0x7d, 0x7d, 0x5a, 0x7a, 0xf7, 0xfa, 0xb4, 0xf4, 0xfe, 0xf5, 0x69, 0xe9, 0xda, 0xe1, 0xb4, + 0xf4, 0x95, 0xc3, 0x69, 0xe9, 0x6b, 0x87, 0xd3, 0xd2, 0xb7, 0x0e, 0xa7, 0xa5, 0xef, 0x1e, 0x4e, + 0x4b, 0xaf, 0x1f, 0x4e, 0x4b, 0xdf, 0x3f, 0x9c, 0x1e, 0x7a, 0xf3, 0x70, 0x5a, 0x7a, 0xfb, 0x70, + 0x7a, 0xe8, 0xdd, 0xc3, 0x69, 0xe9, 0xfd, 0xc3, 0xe9, 0xa1, 0x6b, 0x3f, 0x99, 0x1e, 0xfa, 0xdf, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xbb, 0xc4, 0x26, 0x95, 0x49, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -3698,6 +3703,9 @@ return dAtA } func (m *FloatingPoint) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F != nil { @@ -3710,6 +3718,9 @@ } func (m *CustomMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Nullable128S) > 0 { @@ -3767,6 +3778,9 @@ } func (m *AllMaps) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -3921,6 +3935,9 @@ } func (m *AllMapsOrdered) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/neither/mapsproto2.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/neither/mapsproto2.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/neither/mapsproto2.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/neither/mapsproto2.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -288,302 +288,307 @@ func Mapsproto2Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4716 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x6b, 0x6c, 0x23, 0xd7, - 0x75, 0xd6, 0xf0, 0x21, 0x91, 0x87, 0x14, 0x35, 0xba, 0x92, 0xd7, 0xb4, 0x1c, 0x4b, 0xbb, 0xf2, - 0x4b, 0x5e, 0xdb, 0x92, 0x2d, 0xef, 0xae, 0xd7, 0xdc, 0xd8, 0x2e, 0x25, 0x71, 0xb5, 0xb2, 0xf5, - 0xca, 0x50, 0xf2, 0x2b, 0x30, 0xa6, 0xa3, 0xe1, 0x15, 0x35, 0x5e, 0x72, 0x86, 0x9e, 0x19, 0xae, - 0x2d, 0xa3, 0x28, 0xb6, 0x70, 0x1f, 0x08, 0x8a, 0xbe, 0x0b, 0xd4, 0x71, 0x1d, 0xb7, 0x2e, 0x90, - 0x3a, 0x4d, 0x5f, 0x49, 0xd3, 0xa6, 0x49, 0x7f, 0xe5, 0x4f, 0x5a, 0x03, 0x05, 0x8a, 0xe4, 0x5f, - 0x10, 0x04, 0x86, 0x57, 0x31, 0x50, 0xb7, 0x75, 0x1b, 0xb7, 0x75, 0x01, 0x03, 0xfe, 0x53, 0xdc, - 0xd7, 0x70, 0x66, 0x38, 0xe4, 0x50, 0x06, 0xec, 0xe4, 0x87, 0x7f, 0xad, 0xe6, 0xdc, 0xf3, 0x7d, - 0xf7, 0xcc, 0xb9, 0xe7, 0x9e, 0x73, 0xee, 0x1d, 0x2e, 0xfc, 0xe4, 0x01, 0x38, 0x59, 0xb7, 0xac, - 0x7a, 0x03, 0x2f, 0xb4, 0x6c, 0xcb, 0xb5, 0xf6, 0xda, 0xfb, 0x0b, 0x35, 0xec, 0xe8, 0xb6, 0xd1, - 0x72, 0x2d, 0x7b, 0x9e, 0xca, 0xd0, 0x18, 0xd3, 0x98, 0x17, 0x1a, 0xb3, 0x1b, 0x30, 0x7e, 0xd1, - 0x68, 0xe0, 0x15, 0x4f, 0xb1, 0x8a, 0x5d, 0x74, 0x1e, 0x52, 0xfb, 0x46, 0x03, 0x17, 0xa5, 0x93, - 0xc9, 0xb9, 0xdc, 0xe2, 0x2d, 0xf3, 0x21, 0xd0, 0x7c, 0x10, 0xb1, 0x4d, 0xc4, 0x0a, 0x45, 0xcc, - 0xbe, 0x9d, 0x82, 0x89, 0x88, 0x51, 0x84, 0x20, 0x65, 0x6a, 0x4d, 0xc2, 0x28, 0xcd, 0x65, 0x15, - 0xfa, 0x37, 0x2a, 0xc2, 0x48, 0x4b, 0xd3, 0x2f, 0x6b, 0x75, 0x5c, 0x4c, 0x50, 0xb1, 0x78, 0x44, - 0xd3, 0x00, 0x35, 0xdc, 0xc2, 0x66, 0x0d, 0x9b, 0xfa, 0x61, 0x31, 0x79, 0x32, 0x39, 0x97, 0x55, - 0x7c, 0x12, 0x74, 0x27, 0x8c, 0xb7, 0xda, 0x7b, 0x0d, 0x43, 0x57, 0x7d, 0x6a, 0x70, 0x32, 0x39, - 0x97, 0x56, 0x64, 0x36, 0xb0, 0xd2, 0x51, 0xbe, 0x1d, 0xc6, 0x9e, 0xc3, 0xda, 0x65, 0xbf, 0x6a, - 0x8e, 0xaa, 0x16, 0x88, 0xd8, 0xa7, 0xb8, 0x0c, 0xf9, 0x26, 0x76, 0x1c, 0xad, 0x8e, 0x55, 0xf7, - 0xb0, 0x85, 0x8b, 0x29, 0xfa, 0xf6, 0x27, 0xbb, 0xde, 0x3e, 0xfc, 0xe6, 0x39, 0x8e, 0xda, 0x39, - 0x6c, 0x61, 0x54, 0x86, 0x2c, 0x36, 0xdb, 0x4d, 0xc6, 0x90, 0xee, 0xe1, 0xbf, 0x8a, 0xd9, 0x6e, - 0x86, 0x59, 0x32, 0x04, 0xc6, 0x29, 0x46, 0x1c, 0x6c, 0x5f, 0x31, 0x74, 0x5c, 0x1c, 0xa6, 0x04, - 0xb7, 0x77, 0x11, 0x54, 0xd9, 0x78, 0x98, 0x43, 0xe0, 0xd0, 0x32, 0x64, 0xf1, 0xf3, 0x2e, 0x36, - 0x1d, 0xc3, 0x32, 0x8b, 0x23, 0x94, 0xe4, 0xd6, 0x88, 0x55, 0xc4, 0x8d, 0x5a, 0x98, 0xa2, 0x83, - 0x43, 0xe7, 0x60, 0xc4, 0x6a, 0xb9, 0x86, 0x65, 0x3a, 0xc5, 0xcc, 0x49, 0x69, 0x2e, 0xb7, 0xf8, - 0x99, 0xc8, 0x40, 0xd8, 0x62, 0x3a, 0x8a, 0x50, 0x46, 0x6b, 0x20, 0x3b, 0x56, 0xdb, 0xd6, 0xb1, - 0xaa, 0x5b, 0x35, 0xac, 0x1a, 0xe6, 0xbe, 0x55, 0xcc, 0x52, 0x82, 0x99, 0xee, 0x17, 0xa1, 0x8a, - 0xcb, 0x56, 0x0d, 0xaf, 0x99, 0xfb, 0x96, 0x52, 0x70, 0x02, 0xcf, 0xe8, 0x04, 0x0c, 0x3b, 0x87, - 0xa6, 0xab, 0x3d, 0x5f, 0xcc, 0xd3, 0x08, 0xe1, 0x4f, 0xb3, 0xdf, 0x1e, 0x86, 0xb1, 0x41, 0x42, - 0xec, 0x02, 0xa4, 0xf7, 0xc9, 0x5b, 0x16, 0x13, 0xc7, 0xf1, 0x01, 0xc3, 0x04, 0x9d, 0x38, 0xfc, - 0x11, 0x9d, 0x58, 0x86, 0x9c, 0x89, 0x1d, 0x17, 0xd7, 0x58, 0x44, 0x24, 0x07, 0x8c, 0x29, 0x60, - 0xa0, 0xee, 0x90, 0x4a, 0x7d, 0xa4, 0x90, 0x7a, 0x02, 0xc6, 0x3c, 0x93, 0x54, 0x5b, 0x33, 0xeb, - 0x22, 0x36, 0x17, 0xe2, 0x2c, 0x99, 0xaf, 0x08, 0x9c, 0x42, 0x60, 0x4a, 0x01, 0x07, 0x9e, 0xd1, - 0x0a, 0x80, 0x65, 0x62, 0x6b, 0x5f, 0xad, 0x61, 0xbd, 0x51, 0xcc, 0xf4, 0xf0, 0xd2, 0x16, 0x51, - 0xe9, 0xf2, 0x92, 0xc5, 0xa4, 0x7a, 0x03, 0x3d, 0xd0, 0x09, 0xb5, 0x91, 0x1e, 0x91, 0xb2, 0xc1, - 0x36, 0x59, 0x57, 0xb4, 0xed, 0x42, 0xc1, 0xc6, 0x24, 0xee, 0x71, 0x8d, 0xbf, 0x59, 0x96, 0x1a, - 0x31, 0x1f, 0xfb, 0x66, 0x0a, 0x87, 0xb1, 0x17, 0x1b, 0xb5, 0xfd, 0x8f, 0xe8, 0x66, 0xf0, 0x04, - 0x2a, 0x0d, 0x2b, 0xa0, 0x59, 0x28, 0x2f, 0x84, 0x9b, 0x5a, 0x13, 0x4f, 0xbd, 0x00, 0x85, 0xa0, - 0x7b, 0xd0, 0x24, 0xa4, 0x1d, 0x57, 0xb3, 0x5d, 0x1a, 0x85, 0x69, 0x85, 0x3d, 0x20, 0x19, 0x92, - 0xd8, 0xac, 0xd1, 0x2c, 0x97, 0x56, 0xc8, 0x9f, 0xe8, 0xe7, 0x3a, 0x2f, 0x9c, 0xa4, 0x2f, 0x7c, - 0x5b, 0xf7, 0x8a, 0x06, 0x98, 0xc3, 0xef, 0x3d, 0x75, 0x3f, 0x8c, 0x06, 0x5e, 0x60, 0xd0, 0xa9, - 0x67, 0x7f, 0x01, 0xae, 0x8b, 0xa4, 0x46, 0x4f, 0xc0, 0x64, 0xdb, 0x34, 0x4c, 0x17, 0xdb, 0x2d, - 0x1b, 0x93, 0x88, 0x65, 0x53, 0x15, 0xff, 0x75, 0xa4, 0x47, 0xcc, 0xed, 0xfa, 0xb5, 0x19, 0x8b, - 0x32, 0xd1, 0xee, 0x16, 0x9e, 0xce, 0x66, 0xde, 0x19, 0x91, 0xaf, 0x5e, 0xbd, 0x7a, 0x35, 0x31, - 0xfb, 0xd2, 0x30, 0x4c, 0x46, 0xed, 0x99, 0xc8, 0xed, 0x7b, 0x02, 0x86, 0xcd, 0x76, 0x73, 0x0f, - 0xdb, 0xd4, 0x49, 0x69, 0x85, 0x3f, 0xa1, 0x32, 0xa4, 0x1b, 0xda, 0x1e, 0x6e, 0x14, 0x53, 0x27, - 0xa5, 0xb9, 0xc2, 0xe2, 0x9d, 0x03, 0xed, 0xca, 0xf9, 0x75, 0x02, 0x51, 0x18, 0x12, 0x3d, 0x04, - 0x29, 0x9e, 0xa2, 0x09, 0xc3, 0xe9, 0xc1, 0x18, 0xc8, 0x5e, 0x52, 0x28, 0x0e, 0xdd, 0x08, 0x59, - 0xf2, 0x2f, 0x8b, 0x8d, 0x61, 0x6a, 0x73, 0x86, 0x08, 0x48, 0x5c, 0xa0, 0x29, 0xc8, 0xd0, 0x6d, - 0x52, 0xc3, 0xa2, 0xb4, 0x79, 0xcf, 0x24, 0xb0, 0x6a, 0x78, 0x5f, 0x6b, 0x37, 0x5c, 0xf5, 0x8a, - 0xd6, 0x68, 0x63, 0x1a, 0xf0, 0x59, 0x25, 0xcf, 0x85, 0x8f, 0x11, 0x19, 0x9a, 0x81, 0x1c, 0xdb, - 0x55, 0x86, 0x59, 0xc3, 0xcf, 0xd3, 0xec, 0x99, 0x56, 0xd8, 0x46, 0x5b, 0x23, 0x12, 0x32, 0xfd, - 0x33, 0x8e, 0x65, 0x8a, 0xd0, 0xa4, 0x53, 0x10, 0x01, 0x9d, 0xfe, 0xfe, 0x70, 0xe2, 0xbe, 0x29, - 0xfa, 0xf5, 0xc2, 0x31, 0x35, 0xfb, 0xcd, 0x04, 0xa4, 0x68, 0xbe, 0x18, 0x83, 0xdc, 0xce, 0x93, - 0xdb, 0x15, 0x75, 0x65, 0x6b, 0x77, 0x69, 0xbd, 0x22, 0x4b, 0xa8, 0x00, 0x40, 0x05, 0x17, 0xd7, - 0xb7, 0xca, 0x3b, 0x72, 0xc2, 0x7b, 0x5e, 0xdb, 0xdc, 0x39, 0x77, 0x46, 0x4e, 0x7a, 0x80, 0x5d, - 0x26, 0x48, 0xf9, 0x15, 0xee, 0x5b, 0x94, 0xd3, 0x48, 0x86, 0x3c, 0x23, 0x58, 0x7b, 0xa2, 0xb2, - 0x72, 0xee, 0x8c, 0x3c, 0x1c, 0x94, 0xdc, 0xb7, 0x28, 0x8f, 0xa0, 0x51, 0xc8, 0x52, 0xc9, 0xd2, - 0xd6, 0xd6, 0xba, 0x9c, 0xf1, 0x38, 0xab, 0x3b, 0xca, 0xda, 0xe6, 0xaa, 0x9c, 0xf5, 0x38, 0x57, - 0x95, 0xad, 0xdd, 0x6d, 0x19, 0x3c, 0x86, 0x8d, 0x4a, 0xb5, 0x5a, 0x5e, 0xad, 0xc8, 0x39, 0x4f, - 0x63, 0xe9, 0xc9, 0x9d, 0x4a, 0x55, 0xce, 0x07, 0xcc, 0xba, 0x6f, 0x51, 0x1e, 0xf5, 0xa6, 0xa8, - 0x6c, 0xee, 0x6e, 0xc8, 0x05, 0x34, 0x0e, 0xa3, 0x6c, 0x0a, 0x61, 0xc4, 0x58, 0x48, 0x74, 0xee, - 0x8c, 0x2c, 0x77, 0x0c, 0x61, 0x2c, 0xe3, 0x01, 0xc1, 0xb9, 0x33, 0x32, 0x9a, 0x5d, 0x86, 0x34, - 0x8d, 0x2e, 0x84, 0xa0, 0xb0, 0x5e, 0x5e, 0xaa, 0xac, 0xab, 0x5b, 0xdb, 0x3b, 0x6b, 0x5b, 0x9b, - 0xe5, 0x75, 0x59, 0xea, 0xc8, 0x94, 0xca, 0xe7, 0x76, 0xd7, 0x94, 0xca, 0x8a, 0x9c, 0xf0, 0xcb, - 0xb6, 0x2b, 0xe5, 0x9d, 0xca, 0x8a, 0x9c, 0x9c, 0xd5, 0x61, 0x32, 0x2a, 0x4f, 0x46, 0xee, 0x0c, - 0xdf, 0x12, 0x27, 0x7a, 0x2c, 0x31, 0xe5, 0xea, 0x5a, 0xe2, 0x1f, 0x27, 0x60, 0x22, 0xa2, 0x56, - 0x44, 0x4e, 0xf2, 0x30, 0xa4, 0x59, 0x88, 0xb2, 0xea, 0x79, 0x47, 0x64, 0xd1, 0xa1, 0x01, 0xdb, - 0x55, 0x41, 0x29, 0xce, 0xdf, 0x41, 0x24, 0x7b, 0x74, 0x10, 0x84, 0xa2, 0x2b, 0xa7, 0x3f, 0xdd, - 0x95, 0xd3, 0x59, 0xd9, 0x3b, 0x37, 0x48, 0xd9, 0xa3, 0xb2, 0xe3, 0xe5, 0xf6, 0x74, 0x44, 0x6e, - 0xbf, 0x00, 0xe3, 0x5d, 0x44, 0x03, 0xe7, 0xd8, 0x17, 0x25, 0x28, 0xf6, 0x72, 0x4e, 0x4c, 0xa6, - 0x4b, 0x04, 0x32, 0xdd, 0x85, 0xb0, 0x07, 0x4f, 0xf5, 0x5e, 0x84, 0xae, 0xb5, 0x7e, 0x5d, 0x82, - 0x13, 0xd1, 0x9d, 0x62, 0xa4, 0x0d, 0x0f, 0xc1, 0x70, 0x13, 0xbb, 0x07, 0x96, 0xe8, 0x96, 0x6e, - 0x8b, 0xa8, 0xc1, 0x64, 0x38, 0xbc, 0xd8, 0x1c, 0xe5, 0x2f, 0xe2, 0xc9, 0x5e, 0xed, 0x1e, 0xb3, - 0xa6, 0xcb, 0xd2, 0x2f, 0x24, 0xe0, 0xba, 0x48, 0xf2, 0x48, 0x43, 0x6f, 0x02, 0x30, 0xcc, 0x56, - 0xdb, 0x65, 0x1d, 0x11, 0x4b, 0xb0, 0x59, 0x2a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0xb6, 0xeb, 0x8d, - 0x27, 0xe9, 0x38, 0x30, 0x11, 0x55, 0x38, 0xdf, 0x31, 0x34, 0x45, 0x0d, 0x9d, 0xee, 0xf1, 0xa6, - 0x5d, 0x81, 0x79, 0x0f, 0xc8, 0x7a, 0xc3, 0xc0, 0xa6, 0xab, 0x3a, 0xae, 0x8d, 0xb5, 0xa6, 0x61, - 0xd6, 0x69, 0x05, 0xc9, 0x94, 0xd2, 0xfb, 0x5a, 0xc3, 0xc1, 0xca, 0x18, 0x1b, 0xae, 0x8a, 0x51, - 0x82, 0xa0, 0x01, 0x64, 0xfb, 0x10, 0xc3, 0x01, 0x04, 0x1b, 0xf6, 0x10, 0xb3, 0xdf, 0xc8, 0x40, - 0xce, 0xd7, 0x57, 0xa3, 0x53, 0x90, 0x7f, 0x46, 0xbb, 0xa2, 0xa9, 0xe2, 0xac, 0xc4, 0x3c, 0x91, - 0x23, 0xb2, 0x6d, 0x7e, 0x5e, 0xba, 0x07, 0x26, 0xa9, 0x8a, 0xd5, 0x76, 0xb1, 0xad, 0xea, 0x0d, - 0xcd, 0x71, 0xa8, 0xd3, 0x32, 0x54, 0x15, 0x91, 0xb1, 0x2d, 0x32, 0xb4, 0x2c, 0x46, 0xd0, 0x59, - 0x98, 0xa0, 0x88, 0x66, 0xbb, 0xe1, 0x1a, 0xad, 0x06, 0x56, 0xc9, 0xe9, 0xcd, 0xa1, 0x95, 0xc4, - 0xb3, 0x6c, 0x9c, 0x68, 0x6c, 0x70, 0x05, 0x62, 0x91, 0x83, 0x56, 0xe0, 0x26, 0x0a, 0xab, 0x63, - 0x13, 0xdb, 0x9a, 0x8b, 0x55, 0xfc, 0x6c, 0x5b, 0x6b, 0x38, 0xaa, 0x66, 0xd6, 0xd4, 0x03, 0xcd, - 0x39, 0x28, 0x4e, 0x12, 0x82, 0xa5, 0x44, 0x51, 0x52, 0x6e, 0x20, 0x8a, 0xab, 0x5c, 0xaf, 0x42, - 0xd5, 0xca, 0x66, 0xed, 0x92, 0xe6, 0x1c, 0xa0, 0x12, 0x9c, 0xa0, 0x2c, 0x8e, 0x6b, 0x1b, 0x66, - 0x5d, 0xd5, 0x0f, 0xb0, 0x7e, 0x59, 0x6d, 0xbb, 0xfb, 0xe7, 0x8b, 0x37, 0xfa, 0xe7, 0xa7, 0x16, - 0x56, 0xa9, 0xce, 0x32, 0x51, 0xd9, 0x75, 0xf7, 0xcf, 0xa3, 0x2a, 0xe4, 0xc9, 0x62, 0x34, 0x8d, - 0x17, 0xb0, 0xba, 0x6f, 0xd9, 0xb4, 0x34, 0x16, 0x22, 0x52, 0x93, 0xcf, 0x83, 0xf3, 0x5b, 0x1c, - 0xb0, 0x61, 0xd5, 0x70, 0x29, 0x5d, 0xdd, 0xae, 0x54, 0x56, 0x94, 0x9c, 0x60, 0xb9, 0x68, 0xd9, - 0x24, 0xa0, 0xea, 0x96, 0xe7, 0xe0, 0x1c, 0x0b, 0xa8, 0xba, 0x25, 0xdc, 0x7b, 0x16, 0x26, 0x74, - 0x9d, 0xbd, 0xb3, 0xa1, 0xab, 0xfc, 0x8c, 0xe5, 0x14, 0xe5, 0x80, 0xb3, 0x74, 0x7d, 0x95, 0x29, - 0xf0, 0x18, 0x77, 0xd0, 0x03, 0x70, 0x5d, 0xc7, 0x59, 0x7e, 0xe0, 0x78, 0xd7, 0x5b, 0x86, 0xa1, - 0x67, 0x61, 0xa2, 0x75, 0xd8, 0x0d, 0x44, 0x81, 0x19, 0x5b, 0x87, 0x61, 0xd8, 0xfd, 0x30, 0xd9, - 0x3a, 0x68, 0x75, 0xe3, 0x4e, 0xfb, 0x71, 0xa8, 0x75, 0xd0, 0x0a, 0x03, 0x6f, 0xa5, 0x07, 0x6e, - 0x1b, 0xeb, 0x9a, 0x8b, 0x6b, 0xc5, 0xeb, 0xfd, 0xea, 0xbe, 0x01, 0xb4, 0x00, 0xb2, 0xae, 0xab, - 0xd8, 0xd4, 0xf6, 0x1a, 0x58, 0xd5, 0x6c, 0x6c, 0x6a, 0x4e, 0x71, 0xc6, 0xaf, 0x5c, 0xd0, 0xf5, - 0x0a, 0x1d, 0x2d, 0xd3, 0x41, 0x74, 0x1a, 0xc6, 0xad, 0xbd, 0x67, 0x74, 0x16, 0x92, 0x6a, 0xcb, - 0xc6, 0xfb, 0xc6, 0xf3, 0xc5, 0x5b, 0xa8, 0x7f, 0xc7, 0xc8, 0x00, 0x0d, 0xc8, 0x6d, 0x2a, 0x46, - 0x77, 0x80, 0xac, 0x3b, 0x07, 0x9a, 0xdd, 0xa2, 0x39, 0xd9, 0x69, 0x69, 0x3a, 0x2e, 0xde, 0xca, - 0x54, 0x99, 0x7c, 0x53, 0x88, 0xc9, 0x96, 0x70, 0x9e, 0x33, 0xf6, 0x5d, 0xc1, 0x78, 0x3b, 0xdb, - 0x12, 0x54, 0xc6, 0xd9, 0xe6, 0x40, 0x26, 0xae, 0x08, 0x4c, 0x3c, 0x47, 0xd5, 0x0a, 0xad, 0x83, - 0x96, 0x7f, 0xde, 0x9b, 0x61, 0x94, 0x68, 0x76, 0x26, 0xbd, 0x83, 0x35, 0x64, 0xad, 0x03, 0xdf, - 0x8c, 0x1f, 0x5b, 0x6f, 0x3c, 0x5b, 0x82, 0xbc, 0x3f, 0x3e, 0x51, 0x16, 0x58, 0x84, 0xca, 0x12, - 0x69, 0x56, 0x96, 0xb7, 0x56, 0x48, 0x9b, 0xf1, 0x54, 0x45, 0x4e, 0x90, 0x76, 0x67, 0x7d, 0x6d, - 0xa7, 0xa2, 0x2a, 0xbb, 0x9b, 0x3b, 0x6b, 0x1b, 0x15, 0x39, 0xe9, 0xef, 0xab, 0xbf, 0x9b, 0x80, - 0x42, 0xf0, 0x88, 0x84, 0x3e, 0x0b, 0xd7, 0x8b, 0xfb, 0x0c, 0x07, 0xbb, 0xea, 0x73, 0x86, 0x4d, - 0xb7, 0x4c, 0x53, 0x63, 0xe5, 0xcb, 0x5b, 0xb4, 0x49, 0xae, 0x55, 0xc5, 0xee, 0xe3, 0x86, 0x4d, - 0x36, 0x44, 0x53, 0x73, 0xd1, 0x3a, 0xcc, 0x98, 0x96, 0xea, 0xb8, 0x9a, 0x59, 0xd3, 0xec, 0x9a, - 0xda, 0xb9, 0x49, 0x52, 0x35, 0x5d, 0xc7, 0x8e, 0x63, 0xb1, 0x52, 0xe5, 0xb1, 0x7c, 0xc6, 0xb4, - 0xaa, 0x5c, 0xb9, 0x93, 0xc3, 0xcb, 0x5c, 0x35, 0x14, 0x60, 0xc9, 0x5e, 0x01, 0x76, 0x23, 0x64, - 0x9b, 0x5a, 0x4b, 0xc5, 0xa6, 0x6b, 0x1f, 0xd2, 0xc6, 0x38, 0xa3, 0x64, 0x9a, 0x5a, 0xab, 0x42, - 0x9e, 0x3f, 0x99, 0xf3, 0xc9, 0x8f, 0x92, 0x90, 0xf7, 0x37, 0xc7, 0xe4, 0xac, 0xa1, 0xd3, 0x3a, - 0x22, 0xd1, 0x4c, 0x73, 0x73, 0xdf, 0x56, 0x7a, 0x7e, 0x99, 0x14, 0x98, 0xd2, 0x30, 0x6b, 0x59, - 0x15, 0x86, 0x24, 0xc5, 0x9d, 0xe4, 0x16, 0xcc, 0x5a, 0x84, 0x8c, 0xc2, 0x9f, 0xd0, 0x2a, 0x0c, - 0x3f, 0xe3, 0x50, 0xee, 0x61, 0xca, 0x7d, 0x4b, 0x7f, 0xee, 0x47, 0xaa, 0x94, 0x3c, 0xfb, 0x48, - 0x55, 0xdd, 0xdc, 0x52, 0x36, 0xca, 0xeb, 0x0a, 0x87, 0xa3, 0x1b, 0x20, 0xd5, 0xd0, 0x5e, 0x38, - 0x0c, 0x96, 0x22, 0x2a, 0x1a, 0xd4, 0xf1, 0x37, 0x40, 0xea, 0x39, 0xac, 0x5d, 0x0e, 0x16, 0x00, - 0x2a, 0xfa, 0x18, 0x43, 0x7f, 0x01, 0xd2, 0xd4, 0x5f, 0x08, 0x80, 0x7b, 0x4c, 0x1e, 0x42, 0x19, - 0x48, 0x2d, 0x6f, 0x29, 0x24, 0xfc, 0x65, 0xc8, 0x33, 0xa9, 0xba, 0xbd, 0x56, 0x59, 0xae, 0xc8, - 0x89, 0xd9, 0xb3, 0x30, 0xcc, 0x9c, 0x40, 0xb6, 0x86, 0xe7, 0x06, 0x79, 0x88, 0x3f, 0x72, 0x0e, - 0x49, 0x8c, 0xee, 0x6e, 0x2c, 0x55, 0x14, 0x39, 0xe1, 0x5f, 0x5e, 0x07, 0xf2, 0xfe, 0xbe, 0xf8, - 0x93, 0x89, 0xa9, 0x7f, 0x90, 0x20, 0xe7, 0xeb, 0x73, 0x49, 0x83, 0xa2, 0x35, 0x1a, 0xd6, 0x73, - 0xaa, 0xd6, 0x30, 0x34, 0x87, 0x07, 0x05, 0x50, 0x51, 0x99, 0x48, 0x06, 0x5d, 0xb4, 0x4f, 0xc4, - 0xf8, 0x57, 0x25, 0x90, 0xc3, 0x2d, 0x66, 0xc8, 0x40, 0xe9, 0xa7, 0x6a, 0xe0, 0x2b, 0x12, 0x14, - 0x82, 0x7d, 0x65, 0xc8, 0xbc, 0x53, 0x3f, 0x55, 0xf3, 0xde, 0x4a, 0xc0, 0x68, 0xa0, 0x9b, 0x1c, - 0xd4, 0xba, 0x67, 0x61, 0xdc, 0xa8, 0xe1, 0x66, 0xcb, 0x72, 0xb1, 0xa9, 0x1f, 0xaa, 0x0d, 0x7c, - 0x05, 0x37, 0x8a, 0xb3, 0x34, 0x51, 0x2c, 0xf4, 0xef, 0x57, 0xe7, 0xd7, 0x3a, 0xb8, 0x75, 0x02, - 0x2b, 0x4d, 0xac, 0xad, 0x54, 0x36, 0xb6, 0xb7, 0x76, 0x2a, 0x9b, 0xcb, 0x4f, 0xaa, 0xbb, 0x9b, - 0x8f, 0x6e, 0x6e, 0x3d, 0xbe, 0xa9, 0xc8, 0x46, 0x48, 0xed, 0x63, 0xdc, 0xea, 0xdb, 0x20, 0x87, - 0x8d, 0x42, 0xd7, 0x43, 0x94, 0x59, 0xf2, 0x10, 0x9a, 0x80, 0xb1, 0xcd, 0x2d, 0xb5, 0xba, 0xb6, - 0x52, 0x51, 0x2b, 0x17, 0x2f, 0x56, 0x96, 0x77, 0xaa, 0xec, 0x06, 0xc2, 0xd3, 0xde, 0x09, 0x6e, - 0xea, 0x97, 0x93, 0x30, 0x11, 0x61, 0x09, 0x2a, 0xf3, 0xb3, 0x03, 0x3b, 0xce, 0xdc, 0x3d, 0x88, - 0xf5, 0xf3, 0xa4, 0xe4, 0x6f, 0x6b, 0xb6, 0xcb, 0x8f, 0x1a, 0x77, 0x00, 0xf1, 0x92, 0xe9, 0x1a, - 0xfb, 0x06, 0xb6, 0xf9, 0x85, 0x0d, 0x3b, 0x50, 0x8c, 0x75, 0xe4, 0xec, 0xce, 0xe6, 0x2e, 0x40, - 0x2d, 0xcb, 0x31, 0x5c, 0xe3, 0x0a, 0x56, 0x0d, 0x53, 0xdc, 0xee, 0x90, 0x03, 0x46, 0x4a, 0x91, - 0xc5, 0xc8, 0x9a, 0xe9, 0x7a, 0xda, 0x26, 0xae, 0x6b, 0x21, 0x6d, 0x92, 0xc0, 0x93, 0x8a, 0x2c, - 0x46, 0x3c, 0xed, 0x53, 0x90, 0xaf, 0x59, 0x6d, 0xd2, 0x75, 0x31, 0x3d, 0x52, 0x2f, 0x24, 0x25, - 0xc7, 0x64, 0x9e, 0x0a, 0xef, 0xa7, 0x3b, 0xd7, 0x4a, 0x79, 0x25, 0xc7, 0x64, 0x4c, 0xe5, 0x76, - 0x18, 0xd3, 0xea, 0x75, 0x9b, 0x90, 0x0b, 0x22, 0x76, 0x42, 0x28, 0x78, 0x62, 0xaa, 0x38, 0xf5, - 0x08, 0x64, 0x84, 0x1f, 0x48, 0x49, 0x26, 0x9e, 0x50, 0x5b, 0xec, 0xd8, 0x9b, 0x98, 0xcb, 0x2a, - 0x19, 0x53, 0x0c, 0x9e, 0x82, 0xbc, 0xe1, 0xa8, 0x9d, 0x5b, 0xf2, 0xc4, 0xc9, 0xc4, 0x5c, 0x46, - 0xc9, 0x19, 0x8e, 0x77, 0xc3, 0x38, 0xfb, 0x7a, 0x02, 0x0a, 0xc1, 0x5b, 0x7e, 0xb4, 0x02, 0x99, - 0x86, 0xa5, 0x6b, 0x34, 0xb4, 0xd8, 0x27, 0xa6, 0xb9, 0x98, 0x0f, 0x03, 0xf3, 0xeb, 0x5c, 0x5f, - 0xf1, 0x90, 0x53, 0xff, 0x22, 0x41, 0x46, 0x88, 0xd1, 0x09, 0x48, 0xb5, 0x34, 0xf7, 0x80, 0xd2, - 0xa5, 0x97, 0x12, 0xb2, 0xa4, 0xd0, 0x67, 0x22, 0x77, 0x5a, 0x9a, 0x49, 0x43, 0x80, 0xcb, 0xc9, - 0x33, 0x59, 0xd7, 0x06, 0xd6, 0x6a, 0xf4, 0xf8, 0x61, 0x35, 0x9b, 0xd8, 0x74, 0x1d, 0xb1, 0xae, - 0x5c, 0xbe, 0xcc, 0xc5, 0xe8, 0x4e, 0x18, 0x77, 0x6d, 0xcd, 0x68, 0x04, 0x74, 0x53, 0x54, 0x57, - 0x16, 0x03, 0x9e, 0x72, 0x09, 0x6e, 0x10, 0xbc, 0x35, 0xec, 0x6a, 0xfa, 0x01, 0xae, 0x75, 0x40, - 0xc3, 0xf4, 0x9a, 0xe1, 0x7a, 0xae, 0xb0, 0xc2, 0xc7, 0x05, 0x76, 0xf6, 0xfb, 0x12, 0x8c, 0x8b, - 0x03, 0x53, 0xcd, 0x73, 0xd6, 0x06, 0x80, 0x66, 0x9a, 0x96, 0xeb, 0x77, 0x57, 0x77, 0x28, 0x77, - 0xe1, 0xe6, 0xcb, 0x1e, 0x48, 0xf1, 0x11, 0x4c, 0x35, 0x01, 0x3a, 0x23, 0x3d, 0xdd, 0x36, 0x03, - 0x39, 0xfe, 0x09, 0x87, 0x7e, 0x07, 0x64, 0x47, 0x6c, 0x60, 0x22, 0x72, 0xb2, 0x42, 0x93, 0x90, - 0xde, 0xc3, 0x75, 0xc3, 0xe4, 0x17, 0xb3, 0xec, 0x41, 0x5c, 0x84, 0xa4, 0xbc, 0x8b, 0x90, 0xa5, - 0xcf, 0xc3, 0x84, 0x6e, 0x35, 0xc3, 0xe6, 0x2e, 0xc9, 0xa1, 0x63, 0xbe, 0x73, 0x49, 0x7a, 0x0a, - 0x3a, 0x2d, 0xe6, 0x07, 0x92, 0xf4, 0x27, 0x89, 0xe4, 0xea, 0xf6, 0xd2, 0x57, 0x13, 0x53, 0xab, - 0x0c, 0xba, 0x2d, 0xde, 0x54, 0xc1, 0xfb, 0x0d, 0xac, 0x13, 0xeb, 0xe1, 0xcb, 0x73, 0x70, 0x77, - 0xdd, 0x70, 0x0f, 0xda, 0x7b, 0xf3, 0xba, 0xd5, 0x5c, 0xa8, 0x5b, 0x75, 0xab, 0xf3, 0xe9, 0x93, - 0x3c, 0xd1, 0x07, 0xfa, 0x17, 0xff, 0xfc, 0x99, 0xf5, 0xa4, 0x53, 0xb1, 0xdf, 0x4a, 0x4b, 0x9b, - 0x30, 0xc1, 0x95, 0x55, 0xfa, 0xfd, 0x85, 0x9d, 0x22, 0x50, 0xdf, 0x3b, 0xac, 0xe2, 0xd7, 0xdf, - 0xa6, 0xe5, 0x5a, 0x19, 0xe7, 0x50, 0x32, 0xc6, 0x0e, 0x1a, 0x25, 0x05, 0xae, 0x0b, 0xf0, 0xb1, - 0xad, 0x89, 0xed, 0x18, 0xc6, 0xef, 0x72, 0xc6, 0x09, 0x1f, 0x63, 0x95, 0x43, 0x4b, 0xcb, 0x30, - 0x7a, 0x1c, 0xae, 0x7f, 0xe4, 0x5c, 0x79, 0xec, 0x27, 0x59, 0x85, 0x31, 0x4a, 0xa2, 0xb7, 0x1d, - 0xd7, 0x6a, 0xd2, 0xbc, 0xd7, 0x9f, 0xe6, 0x9f, 0xde, 0x66, 0x7b, 0xa5, 0x40, 0x60, 0xcb, 0x1e, - 0xaa, 0x54, 0x02, 0xfa, 0xc9, 0xa9, 0x86, 0xf5, 0x46, 0x0c, 0xc3, 0x1b, 0xdc, 0x10, 0x4f, 0xbf, - 0xf4, 0x18, 0x4c, 0x92, 0xbf, 0x69, 0x5a, 0xf2, 0x5b, 0x12, 0x7f, 0xe1, 0x55, 0xfc, 0xfe, 0x8b, - 0x6c, 0x3b, 0x4e, 0x78, 0x04, 0x3e, 0x9b, 0x7c, 0xab, 0x58, 0xc7, 0xae, 0x8b, 0x6d, 0x47, 0xd5, - 0x1a, 0x51, 0xe6, 0xf9, 0x6e, 0x0c, 0x8a, 0x5f, 0x7c, 0x37, 0xb8, 0x8a, 0xab, 0x0c, 0x59, 0x6e, - 0x34, 0x4a, 0xbb, 0x70, 0x7d, 0x44, 0x54, 0x0c, 0xc0, 0xf9, 0x32, 0xe7, 0x9c, 0xec, 0x8a, 0x0c, - 0x42, 0xbb, 0x0d, 0x42, 0xee, 0xad, 0xe5, 0x00, 0x9c, 0x7f, 0xc8, 0x39, 0x11, 0xc7, 0x8a, 0x25, - 0x25, 0x8c, 0x8f, 0xc0, 0xf8, 0x15, 0x6c, 0xef, 0x59, 0x0e, 0xbf, 0xa5, 0x19, 0x80, 0xee, 0x15, - 0x4e, 0x37, 0xc6, 0x81, 0xf4, 0xda, 0x86, 0x70, 0x3d, 0x00, 0x99, 0x7d, 0x4d, 0xc7, 0x03, 0x50, - 0x7c, 0x89, 0x53, 0x8c, 0x10, 0x7d, 0x02, 0x2d, 0x43, 0xbe, 0x6e, 0xf1, 0xca, 0x14, 0x0f, 0x7f, - 0x95, 0xc3, 0x73, 0x02, 0xc3, 0x29, 0x5a, 0x56, 0xab, 0xdd, 0x20, 0x65, 0x2b, 0x9e, 0xe2, 0x8f, - 0x04, 0x85, 0xc0, 0x70, 0x8a, 0x63, 0xb8, 0xf5, 0x8f, 0x05, 0x85, 0xe3, 0xf3, 0xe7, 0xc3, 0x90, - 0xb3, 0xcc, 0xc6, 0xa1, 0x65, 0x0e, 0x62, 0xc4, 0x6b, 0x9c, 0x01, 0x38, 0x84, 0x10, 0x5c, 0x80, - 0xec, 0xa0, 0x0b, 0xf1, 0xe5, 0x77, 0xc5, 0xf6, 0x10, 0x2b, 0xb0, 0x0a, 0x63, 0x22, 0x41, 0x19, - 0x96, 0x39, 0x00, 0xc5, 0x9f, 0x72, 0x8a, 0x82, 0x0f, 0xc6, 0x5f, 0xc3, 0xc5, 0x8e, 0x5b, 0xc7, - 0x83, 0x90, 0xbc, 0x2e, 0x5e, 0x83, 0x43, 0xb8, 0x2b, 0xf7, 0xb0, 0xa9, 0x1f, 0x0c, 0xc6, 0xf0, - 0x15, 0xe1, 0x4a, 0x81, 0x21, 0x14, 0xcb, 0x30, 0xda, 0xd4, 0x6c, 0xe7, 0x40, 0x6b, 0x0c, 0xb4, - 0x1c, 0x7f, 0xc6, 0x39, 0xf2, 0x1e, 0x88, 0x7b, 0xa4, 0x6d, 0x1e, 0x87, 0xe6, 0xab, 0xc2, 0x23, - 0x3e, 0x18, 0xdf, 0x7a, 0x8e, 0x4b, 0xaf, 0xb4, 0x8e, 0xc3, 0xf6, 0xe7, 0x62, 0xeb, 0x31, 0xec, - 0x86, 0x9f, 0xf1, 0x02, 0x64, 0x1d, 0xe3, 0x85, 0x81, 0x68, 0xfe, 0x42, 0xac, 0x34, 0x05, 0x10, - 0xf0, 0x93, 0x70, 0x43, 0x64, 0x99, 0x18, 0x80, 0xec, 0x2f, 0x39, 0xd9, 0x89, 0x88, 0x52, 0xc1, - 0x53, 0xc2, 0x71, 0x29, 0xff, 0x4a, 0xa4, 0x04, 0x1c, 0xe2, 0xda, 0x26, 0x67, 0x05, 0x47, 0xdb, - 0x3f, 0x9e, 0xd7, 0xfe, 0x5a, 0x78, 0x8d, 0x61, 0x03, 0x5e, 0xdb, 0x81, 0x13, 0x9c, 0xf1, 0x78, - 0xeb, 0xfa, 0x35, 0x91, 0x58, 0x19, 0x7a, 0x37, 0xb8, 0xba, 0x9f, 0x87, 0x29, 0xcf, 0x9d, 0xa2, - 0x29, 0x75, 0xd4, 0xa6, 0xd6, 0x1a, 0x80, 0xf9, 0xeb, 0x9c, 0x59, 0x64, 0x7c, 0xaf, 0xab, 0x75, - 0x36, 0xb4, 0x16, 0x21, 0x7f, 0x02, 0x8a, 0x82, 0xbc, 0x6d, 0xda, 0x58, 0xb7, 0xea, 0xa6, 0xf1, - 0x02, 0xae, 0x0d, 0x40, 0xfd, 0x37, 0xa1, 0xa5, 0xda, 0xf5, 0xc1, 0x09, 0xf3, 0x1a, 0xc8, 0x5e, - 0xaf, 0xa2, 0x1a, 0xcd, 0x96, 0x65, 0xbb, 0x31, 0x8c, 0xdf, 0x10, 0x2b, 0xe5, 0xe1, 0xd6, 0x28, - 0xac, 0x54, 0x81, 0x02, 0x7d, 0x1c, 0x34, 0x24, 0xff, 0x96, 0x13, 0x8d, 0x76, 0x50, 0x3c, 0x71, - 0xe8, 0x56, 0xb3, 0xa5, 0xd9, 0x83, 0xe4, 0xbf, 0xbf, 0x13, 0x89, 0x83, 0x43, 0x78, 0xe2, 0x70, - 0x0f, 0x5b, 0x98, 0x54, 0xfb, 0x01, 0x18, 0xbe, 0x29, 0x12, 0x87, 0xc0, 0x70, 0x0a, 0xd1, 0x30, - 0x0c, 0x40, 0xf1, 0xf7, 0x82, 0x42, 0x60, 0x08, 0xc5, 0xe7, 0x3a, 0x85, 0xd6, 0xc6, 0x75, 0xc3, - 0x71, 0x6d, 0xd6, 0x0a, 0xf7, 0xa7, 0xfa, 0xd6, 0xbb, 0xc1, 0x26, 0x4c, 0xf1, 0x41, 0x49, 0x26, - 0xe2, 0x57, 0xa8, 0xf4, 0xa4, 0x14, 0x6f, 0xd8, 0xb7, 0x45, 0x26, 0xf2, 0xc1, 0xd8, 0xfe, 0x1c, - 0x0b, 0xf5, 0x2a, 0x28, 0xee, 0x87, 0x30, 0xc5, 0x5f, 0x7a, 0x9f, 0x73, 0x05, 0x5b, 0x95, 0xd2, - 0x3a, 0x09, 0xa0, 0x60, 0x43, 0x11, 0x4f, 0xf6, 0xe2, 0xfb, 0x5e, 0x0c, 0x05, 0xfa, 0x89, 0xd2, - 0x45, 0x18, 0x0d, 0x34, 0x13, 0xf1, 0x54, 0xbf, 0xcc, 0xa9, 0xf2, 0xfe, 0x5e, 0xa2, 0x74, 0x16, - 0x52, 0xa4, 0x31, 0x88, 0x87, 0xff, 0x0a, 0x87, 0x53, 0xf5, 0xd2, 0x83, 0x90, 0x11, 0x0d, 0x41, - 0x3c, 0xf4, 0x57, 0x39, 0xd4, 0x83, 0x10, 0xb8, 0x68, 0x06, 0xe2, 0xe1, 0xbf, 0x26, 0xe0, 0x02, - 0x42, 0xe0, 0x83, 0xbb, 0xf0, 0x3b, 0xbf, 0x9e, 0xe2, 0x09, 0x5d, 0xf8, 0xee, 0x02, 0x8c, 0xf0, - 0x2e, 0x20, 0x1e, 0xfd, 0x05, 0x3e, 0xb9, 0x40, 0x94, 0xee, 0x87, 0xf4, 0x80, 0x0e, 0xff, 0x0d, - 0x0e, 0x65, 0xfa, 0xa5, 0x65, 0xc8, 0xf9, 0x2a, 0x7f, 0x3c, 0xfc, 0x37, 0x39, 0xdc, 0x8f, 0x22, - 0xa6, 0xf3, 0xca, 0x1f, 0x4f, 0xf0, 0x5b, 0xc2, 0x74, 0x8e, 0x20, 0x6e, 0x13, 0x45, 0x3f, 0x1e, - 0xfd, 0xdb, 0xc2, 0xeb, 0x02, 0x52, 0x7a, 0x18, 0xb2, 0x5e, 0x22, 0x8f, 0xc7, 0xff, 0x0e, 0xc7, - 0x77, 0x30, 0xc4, 0x03, 0xbe, 0x42, 0x12, 0x4f, 0xf1, 0xbb, 0xc2, 0x03, 0x3e, 0x14, 0xd9, 0x46, - 0xe1, 0xe6, 0x20, 0x9e, 0xe9, 0xf7, 0xc4, 0x36, 0x0a, 0xf5, 0x06, 0x64, 0x35, 0x69, 0x3e, 0x8d, - 0xa7, 0xf8, 0x7d, 0xb1, 0x9a, 0x54, 0x9f, 0x98, 0x11, 0xae, 0xb6, 0xf1, 0x1c, 0x7f, 0x20, 0xcc, - 0x08, 0x15, 0xdb, 0xd2, 0x36, 0xa0, 0xee, 0x4a, 0x1b, 0xcf, 0xf7, 0x12, 0xe7, 0x1b, 0xef, 0x2a, - 0xb4, 0xa5, 0xc7, 0xe1, 0x44, 0x74, 0x95, 0x8d, 0x67, 0xfd, 0xe2, 0xfb, 0xa1, 0x73, 0x91, 0xbf, - 0xc8, 0x96, 0x76, 0x3a, 0xe9, 0xda, 0x5f, 0x61, 0xe3, 0x69, 0x5f, 0x7e, 0x3f, 0x98, 0xb1, 0xfd, - 0x05, 0xb6, 0x54, 0x06, 0xe8, 0x14, 0xb7, 0x78, 0xae, 0x57, 0x38, 0x97, 0x0f, 0x44, 0xb6, 0x06, - 0xaf, 0x6d, 0xf1, 0xf8, 0x2f, 0x89, 0xad, 0xc1, 0x11, 0x64, 0x6b, 0x88, 0xb2, 0x16, 0x8f, 0x7e, - 0x55, 0x6c, 0x0d, 0x01, 0x21, 0x91, 0xed, 0xab, 0x1c, 0xf1, 0x0c, 0xaf, 0x89, 0xc8, 0xf6, 0xa1, - 0x4a, 0x17, 0x20, 0x63, 0xb6, 0x1b, 0x0d, 0x12, 0xa0, 0xa8, 0xff, 0x0f, 0xc4, 0x8a, 0xff, 0xf6, - 0x21, 0xb7, 0x40, 0x00, 0x4a, 0x67, 0x21, 0x8d, 0x9b, 0x7b, 0xb8, 0x16, 0x87, 0xfc, 0xf7, 0x0f, - 0x45, 0x52, 0x22, 0xda, 0xa5, 0x87, 0x01, 0xd8, 0xd1, 0x9e, 0x7e, 0xb6, 0x8a, 0xc1, 0xfe, 0xc7, - 0x87, 0xfc, 0xa7, 0x1b, 0x1d, 0x48, 0x87, 0x80, 0xfd, 0x10, 0xa4, 0x3f, 0xc1, 0xbb, 0x41, 0x02, - 0xfa, 0xd6, 0x0f, 0xc0, 0xc8, 0x33, 0x8e, 0x65, 0xba, 0x5a, 0x3d, 0x0e, 0xfd, 0x9f, 0x1c, 0x2d, - 0xf4, 0x89, 0xc3, 0x9a, 0x96, 0x8d, 0x5d, 0xad, 0xee, 0xc4, 0x61, 0xff, 0x8b, 0x63, 0x3d, 0x00, - 0x01, 0xeb, 0x9a, 0xe3, 0x0e, 0xf2, 0xde, 0x3f, 0x11, 0x60, 0x01, 0x20, 0x46, 0x93, 0xbf, 0x2f, - 0xe3, 0xc3, 0x38, 0xec, 0x7b, 0xc2, 0x68, 0xae, 0x5f, 0x7a, 0x10, 0xb2, 0xe4, 0x4f, 0xf6, 0x7b, - 0xac, 0x18, 0xf0, 0x7f, 0x73, 0x70, 0x07, 0x41, 0x66, 0x76, 0xdc, 0x9a, 0x6b, 0xc4, 0x3b, 0xfb, - 0x7f, 0xf8, 0x4a, 0x0b, 0xfd, 0x52, 0x19, 0x72, 0x8e, 0x5b, 0xab, 0xb5, 0x79, 0x7f, 0x15, 0x03, - 0xff, 0xdf, 0x0f, 0xbd, 0x23, 0xb7, 0x87, 0x59, 0xaa, 0x44, 0xdf, 0x1e, 0xc2, 0xaa, 0xb5, 0x6a, - 0xb1, 0x7b, 0xc3, 0xa7, 0x66, 0xe3, 0x2f, 0x00, 0xe1, 0xff, 0xee, 0x86, 0x19, 0xdd, 0x6a, 0xee, - 0x59, 0xce, 0x82, 0x89, 0x0d, 0xf7, 0x00, 0xdb, 0x0b, 0x4d, 0xad, 0xe5, 0xd0, 0xc1, 0x45, 0x7e, - 0x33, 0x98, 0xe3, 0x4f, 0x64, 0x60, 0xea, 0x78, 0xb7, 0x8a, 0xb3, 0x37, 0xc1, 0xe8, 0xc5, 0x86, - 0xa5, 0xb9, 0x86, 0x59, 0xdf, 0xb6, 0x0c, 0xd3, 0x45, 0x79, 0x90, 0xf6, 0xe9, 0x57, 0x31, 0x49, - 0x91, 0xf6, 0x67, 0xff, 0x39, 0x0d, 0x59, 0x76, 0x21, 0xb5, 0xa1, 0xb5, 0xd0, 0x2f, 0x42, 0x7e, - 0x93, 0xef, 0xa2, 0x7b, 0x17, 0xcf, 0x3b, 0xde, 0x05, 0xb8, 0x6f, 0xfe, 0x79, 0x4f, 0x7b, 0xde, - 0xaf, 0x4a, 0xbf, 0x82, 0x2f, 0xdd, 0xf3, 0xc3, 0x37, 0x67, 0xee, 0xea, 0x69, 0x1f, 0xa9, 0xbd, - 0x0b, 0x2c, 0xdc, 0xe7, 0x77, 0x0d, 0xd3, 0xbd, 0x77, 0xf1, 0xbc, 0x12, 0x98, 0x0f, 0x5d, 0x81, - 0x0c, 0x1f, 0x70, 0xf8, 0x87, 0x91, 0x5b, 0x7a, 0xcc, 0x2d, 0xd4, 0xd8, 0xbc, 0x67, 0xde, 0x78, - 0x73, 0x66, 0xe8, 0xd8, 0x73, 0x7b, 0x73, 0xa1, 0x67, 0x21, 0x27, 0xec, 0x58, 0xab, 0x39, 0xfc, - 0x87, 0xf0, 0xb7, 0xc7, 0xbc, 0xf6, 0x5a, 0x8d, 0xcf, 0x7e, 0xdb, 0x0f, 0xdf, 0x9c, 0x99, 0xed, - 0x3b, 0xf3, 0xfc, 0x6e, 0xdb, 0xa8, 0x29, 0xfe, 0x39, 0xd0, 0xd3, 0x90, 0x24, 0x53, 0xb1, 0xdf, - 0x0e, 0xce, 0xf4, 0x98, 0xca, 0x9b, 0xe2, 0x34, 0x7f, 0xc1, 0x41, 0xa6, 0x21, 0xbc, 0x53, 0x0f, - 0xc3, 0x78, 0xd7, 0xf2, 0x20, 0x19, 0x92, 0x97, 0xf1, 0x21, 0xff, 0x91, 0x16, 0xf9, 0x13, 0x4d, - 0x76, 0x7e, 0x45, 0x29, 0xcd, 0xe5, 0xf9, 0x4f, 0x23, 0x4b, 0x89, 0xf3, 0xd2, 0xd4, 0x05, 0x18, - 0x0d, 0xf8, 0xf8, 0x58, 0xe0, 0x87, 0x40, 0x0e, 0x7b, 0xe9, 0x58, 0xf8, 0x73, 0x90, 0xf9, 0x28, - 0xb8, 0xd9, 0x1f, 0x20, 0x18, 0x29, 0x37, 0x1a, 0x1b, 0x5a, 0xcb, 0x41, 0x4f, 0xc2, 0x38, 0x3b, - 0x21, 0xec, 0x58, 0x2b, 0xf4, 0x53, 0xd4, 0x86, 0xd6, 0xe2, 0x01, 0x7d, 0x67, 0xc0, 0xdd, 0x1c, - 0x30, 0xdf, 0xa5, 0x4d, 0xe7, 0x57, 0xba, 0x59, 0xd0, 0x63, 0x20, 0x0b, 0x21, 0xdd, 0x5b, 0x84, - 0x99, 0x85, 0xeb, 0xe9, 0xbe, 0xcc, 0x42, 0x99, 0x11, 0x77, 0x71, 0xa0, 0x87, 0x20, 0xb3, 0x66, - 0xba, 0xf7, 0x2d, 0x12, 0x3e, 0x16, 0x83, 0xb3, 0x91, 0x7c, 0x42, 0x89, 0xf1, 0x78, 0x18, 0x8e, - 0x3f, 0x77, 0x86, 0xe0, 0x53, 0xfd, 0xf1, 0x54, 0xa9, 0x83, 0xa7, 0x8f, 0xa8, 0x0c, 0x59, 0xb2, - 0xe6, 0xcc, 0x00, 0xf6, 0x7f, 0x30, 0x6e, 0x8e, 0x24, 0xf0, 0xb4, 0x18, 0x43, 0x07, 0x25, 0x28, - 0x98, 0x0d, 0xc3, 0x31, 0x14, 0x3e, 0x23, 0x3a, 0x28, 0x42, 0x51, 0xf5, 0xac, 0x18, 0xe9, 0x43, - 0x51, 0x0d, 0x59, 0x51, 0xf5, 0x5b, 0x51, 0xf5, 0xac, 0xc8, 0xc4, 0x50, 0xf8, 0xad, 0xf0, 0x9e, - 0xd1, 0x0a, 0xc0, 0x45, 0xe3, 0x79, 0x5c, 0x63, 0x66, 0x64, 0x23, 0x92, 0x91, 0xe0, 0xe8, 0xa8, - 0x31, 0x12, 0x1f, 0x0e, 0xad, 0x42, 0xae, 0xba, 0xdf, 0xa1, 0x01, 0xfe, 0x5f, 0x50, 0x22, 0x4d, - 0xd9, 0x0f, 0xf1, 0xf8, 0x91, 0x9e, 0x39, 0xec, 0x95, 0x72, 0x71, 0xe6, 0xf8, 0xde, 0xc9, 0x87, - 0xeb, 0x98, 0xc3, 0x68, 0xf2, 0xb1, 0xe6, 0xf8, 0x78, 0xfc, 0x48, 0x74, 0x01, 0x46, 0x96, 0x2c, - 0x8b, 0x68, 0x16, 0x47, 0x29, 0xc9, 0xa9, 0x48, 0x12, 0xae, 0xc3, 0x08, 0x04, 0x82, 0xae, 0x0e, - 0x0d, 0x7d, 0x02, 0x2f, 0xf4, 0x5b, 0x1d, 0xa1, 0x25, 0x56, 0x47, 0x3c, 0xfb, 0x77, 0xe0, 0xd2, - 0xa1, 0x8b, 0x49, 0x37, 0x5e, 0x1c, 0x1b, 0x60, 0x07, 0x0a, 0xe5, 0xd0, 0x0e, 0x14, 0x62, 0x54, - 0x85, 0x31, 0x21, 0xab, 0x98, 0x6d, 0x92, 0x83, 0x8b, 0x32, 0xff, 0x7d, 0x79, 0x3f, 0x5a, 0xae, - 0xcb, 0x58, 0xc3, 0x0c, 0x68, 0x1b, 0x0a, 0x42, 0xb4, 0xe1, 0xd0, 0x97, 0x1e, 0x8f, 0xa8, 0xab, - 0x61, 0x4e, 0xa6, 0xca, 0x28, 0x43, 0xf8, 0xa9, 0x15, 0x38, 0x11, 0x9d, 0xad, 0xe2, 0xb2, 0xa5, - 0xe4, 0xcf, 0xb2, 0xcb, 0x70, 0x5d, 0x64, 0x66, 0x8a, 0x23, 0x49, 0x84, 0xea, 0x44, 0x20, 0x1d, - 0xf9, 0xc1, 0xe9, 0x08, 0x70, 0xba, 0x1b, 0xdc, 0x09, 0x32, 0x3f, 0x38, 0x19, 0x01, 0x4e, 0xfa, - 0xc1, 0x9f, 0x85, 0x42, 0x30, 0x0f, 0xf9, 0xd1, 0xa3, 0x11, 0xe8, 0xd1, 0x08, 0x74, 0xf4, 0xdc, - 0xa9, 0x08, 0x74, 0x2a, 0x84, 0xae, 0xf6, 0x9c, 0x7b, 0x3c, 0x02, 0x3d, 0x1e, 0x81, 0x8e, 0x9e, - 0x1b, 0x45, 0xa0, 0x91, 0x1f, 0xfd, 0x20, 0x8c, 0x85, 0x52, 0x8e, 0x1f, 0x3e, 0x12, 0x01, 0x1f, - 0x09, 0xd5, 0xe6, 0x70, 0xaa, 0xf1, 0xe3, 0xc7, 0x22, 0xf0, 0x63, 0x51, 0xd3, 0x47, 0x5b, 0x3f, - 0x1c, 0x01, 0x1f, 0x8e, 0x9c, 0x3e, 0x1a, 0x2f, 0x47, 0xe0, 0x65, 0x3f, 0xbe, 0x04, 0x79, 0x7f, - 0x56, 0xf1, 0x63, 0x33, 0x11, 0xd8, 0x4c, 0xd8, 0xef, 0x81, 0x94, 0x12, 0x17, 0xe9, 0xd9, 0x1e, - 0xdb, 0x25, 0x90, 0x46, 0x8e, 0xd5, 0xd9, 0x3c, 0x01, 0x93, 0x51, 0x49, 0x23, 0x82, 0xe3, 0xb4, - 0x9f, 0xa3, 0xb0, 0x38, 0x19, 0x48, 0x16, 0x14, 0xd7, 0x6e, 0xfa, 0x99, 0x9f, 0x86, 0x89, 0x88, - 0xd4, 0x11, 0x41, 0x7c, 0x8f, 0x9f, 0x38, 0xb7, 0x38, 0x15, 0x20, 0x0e, 0x9c, 0x15, 0xfc, 0xad, - 0xd5, 0x8f, 0x26, 0xa0, 0xc0, 0x53, 0xd4, 0x96, 0x5d, 0xc3, 0x36, 0xae, 0xa1, 0x9f, 0xef, 0xdd, - 0x61, 0x2d, 0x46, 0xa5, 0x36, 0x8e, 0x3b, 0x46, 0xa3, 0xf5, 0x74, 0xcf, 0x46, 0xeb, 0xde, 0x41, - 0x26, 0x88, 0xeb, 0xb7, 0x2a, 0x5d, 0xfd, 0xd6, 0x1d, 0xfd, 0x68, 0x7b, 0xb5, 0x5d, 0x95, 0xae, - 0xb6, 0x2b, 0x8e, 0x26, 0xb2, 0xfb, 0xba, 0xd4, 0xdd, 0x7d, 0x9d, 0xee, 0xc7, 0xd3, 0xbb, 0x09, - 0xbb, 0xd4, 0xdd, 0x84, 0xc5, 0x32, 0x45, 0xf7, 0x62, 0x97, 0xba, 0x7b, 0xb1, 0xbe, 0x4c, 0xbd, - 0x5b, 0xb2, 0x4b, 0xdd, 0x2d, 0x59, 0x2c, 0x53, 0x74, 0x67, 0xf6, 0x68, 0x44, 0x67, 0x76, 0x67, - 0x3f, 0xaa, 0x7e, 0x0d, 0xda, 0x66, 0x54, 0x83, 0x76, 0x57, 0x5f, 0xc3, 0xfa, 0xf6, 0x69, 0x8f, - 0x46, 0xf4, 0x69, 0xf1, 0xc6, 0xf5, 0x68, 0xd7, 0x36, 0xa3, 0xda, 0xb5, 0x01, 0x8c, 0xeb, 0xd5, - 0xb5, 0x2d, 0x85, 0xbb, 0xb6, 0xb9, 0x7e, 0x5c, 0xd1, 0xcd, 0xdb, 0xa5, 0xee, 0xe6, 0xed, 0x74, - 0xfc, 0x5e, 0x8c, 0xea, 0xe1, 0x9e, 0xee, 0xd9, 0xc3, 0x0d, 0xb4, 0xb9, 0xe3, 0x5a, 0xb9, 0xa7, - 0x7a, 0xb5, 0x72, 0xf7, 0x0c, 0xc2, 0xde, 0xbf, 0xa3, 0x7b, 0xbc, 0x47, 0x47, 0xb7, 0x30, 0x08, - 0xf5, 0xa7, 0x8d, 0xdd, 0xa7, 0x8d, 0xdd, 0xa7, 0x8d, 0xdd, 0xa7, 0x8d, 0xdd, 0xcf, 0x46, 0x63, - 0x57, 0x4a, 0xbd, 0xf4, 0xda, 0x8c, 0x74, 0xfa, 0x14, 0x8c, 0xf0, 0xa9, 0xd1, 0x30, 0x24, 0x36, - 0xca, 0xf2, 0x10, 0xfd, 0x77, 0x49, 0x96, 0xe8, 0xbf, 0xcb, 0x72, 0x62, 0x69, 0xfd, 0x8d, 0x6b, - 0xd3, 0x43, 0xdf, 0xbb, 0x36, 0x3d, 0xf4, 0x83, 0x6b, 0xd3, 0x43, 0x6f, 0x5d, 0x9b, 0x96, 0xde, - 0xb9, 0x36, 0x2d, 0xbd, 0x77, 0x6d, 0x5a, 0xfa, 0xe0, 0xda, 0xb4, 0x74, 0xf5, 0x68, 0x5a, 0xfa, - 0xca, 0xd1, 0xb4, 0xf4, 0xb5, 0xa3, 0x69, 0xe9, 0x5b, 0x47, 0xd3, 0xd2, 0x77, 0x8e, 0xa6, 0xa5, - 0x37, 0x8e, 0xa6, 0x87, 0xbe, 0x77, 0x34, 0x3d, 0xf4, 0xd6, 0xd1, 0xb4, 0xf4, 0xce, 0xd1, 0xf4, - 0xd0, 0x7b, 0x47, 0xd3, 0xd2, 0x07, 0x47, 0xd3, 0x43, 0x57, 0x7f, 0x3c, 0x3d, 0xf4, 0xff, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x36, 0xa1, 0xfd, 0xa0, 0x12, 0x48, 0x00, 0x00, + // 4797 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x5b, 0x6c, 0x23, 0xd7, + 0x79, 0x16, 0x6f, 0x12, 0xf9, 0x93, 0xa2, 0x46, 0x23, 0x79, 0x4d, 0xcb, 0xb1, 0xb4, 0x2b, 0xdf, + 0xe4, 0x5d, 0x5b, 0xb2, 0xe5, 0xdd, 0xf5, 0x9a, 0x1b, 0xdb, 0xa5, 0x24, 0xae, 0x56, 0xb6, 0x6e, + 0x19, 0x4a, 0xbe, 0x05, 0xc6, 0x74, 0x34, 0x3c, 0xa4, 0xc6, 0x4b, 0xce, 0xd0, 0x33, 0xc3, 0x5d, + 0xcb, 0x28, 0x8a, 0x2d, 0xdc, 0x0b, 0x82, 0xa2, 0xf7, 0x02, 0x75, 0x5c, 0xc7, 0xad, 0x53, 0x34, + 0x4e, 0xd3, 0x5b, 0xd2, 0xb4, 0x69, 0x92, 0xbe, 0xe4, 0x25, 0xad, 0x81, 0x02, 0x45, 0xf2, 0x16, + 0x04, 0x81, 0xe1, 0x55, 0x0c, 0xd4, 0x6d, 0xdd, 0xc6, 0x6d, 0xb7, 0x80, 0x01, 0xbf, 0x14, 0xe7, + 0x36, 0x3c, 0x33, 0x1c, 0x72, 0x28, 0x03, 0x76, 0xf2, 0xe0, 0xa7, 0xd5, 0x9c, 0xf3, 0x7f, 0xdf, + 0xf9, 0xe7, 0x3f, 0xff, 0xf9, 0xcf, 0x77, 0xce, 0x70, 0xe1, 0x27, 0x0f, 0xc2, 0xf1, 0xba, 0x65, + 0xd5, 0x1b, 0x68, 0xa1, 0x65, 0x5b, 0xae, 0xb5, 0xd7, 0xae, 0x2d, 0x54, 0x91, 0xa3, 0xdb, 0x46, + 0xcb, 0xb5, 0xec, 0x79, 0xd2, 0x26, 0x8f, 0x51, 0x8b, 0x79, 0x6e, 0x31, 0xbb, 0x01, 0xe3, 0x17, + 0x8c, 0x06, 0x5a, 0xf1, 0x0c, 0x2b, 0xc8, 0x95, 0xcf, 0x41, 0xb2, 0x66, 0x34, 0x50, 0x21, 0x76, + 0x3c, 0x31, 0x97, 0x5d, 0xbc, 0x6d, 0x3e, 0x00, 0x9a, 0xf7, 0x23, 0xb6, 0x71, 0xb3, 0x42, 0x10, + 0xb3, 0x6f, 0x27, 0x61, 0x22, 0xa4, 0x57, 0x96, 0x21, 0x69, 0x6a, 0x4d, 0xcc, 0x18, 0x9b, 0xcb, + 0x28, 0xe4, 0x6f, 0xb9, 0x00, 0x23, 0x2d, 0x4d, 0xbf, 0xa4, 0xd5, 0x51, 0x21, 0x4e, 0x9a, 0xf9, + 0xa3, 0x3c, 0x0d, 0x50, 0x45, 0x2d, 0x64, 0x56, 0x91, 0xa9, 0x1f, 0x14, 0x12, 0xc7, 0x13, 0x73, + 0x19, 0x45, 0x68, 0x91, 0x4f, 0xc1, 0x78, 0xab, 0xbd, 0xd7, 0x30, 0x74, 0x55, 0x30, 0x83, 0xe3, + 0x89, 0xb9, 0x94, 0x22, 0xd1, 0x8e, 0x95, 0x8e, 0xf1, 0x9d, 0x30, 0x76, 0x05, 0x69, 0x97, 0x44, + 0xd3, 0x2c, 0x31, 0xcd, 0xe3, 0x66, 0xc1, 0x70, 0x19, 0x72, 0x4d, 0xe4, 0x38, 0x5a, 0x1d, 0xa9, + 0xee, 0x41, 0x0b, 0x15, 0x92, 0xe4, 0xed, 0x8f, 0x77, 0xbd, 0x7d, 0xf0, 0xcd, 0xb3, 0x0c, 0xb5, + 0x73, 0xd0, 0x42, 0x72, 0x09, 0x32, 0xc8, 0x6c, 0x37, 0x29, 0x43, 0xaa, 0x47, 0xfc, 0xca, 0x66, + 0xbb, 0x19, 0x64, 0x49, 0x63, 0x18, 0xa3, 0x18, 0x71, 0x90, 0x7d, 0xd9, 0xd0, 0x51, 0x61, 0x98, + 0x10, 0xdc, 0xd9, 0x45, 0x50, 0xa1, 0xfd, 0x41, 0x0e, 0x8e, 0x93, 0x97, 0x21, 0x83, 0x9e, 0x77, + 0x91, 0xe9, 0x18, 0x96, 0x59, 0x18, 0x21, 0x24, 0xb7, 0x87, 0xcc, 0x22, 0x6a, 0x54, 0x83, 0x14, + 0x1d, 0x9c, 0x7c, 0x16, 0x46, 0xac, 0x96, 0x6b, 0x58, 0xa6, 0x53, 0x48, 0x1f, 0x8f, 0xcd, 0x65, + 0x17, 0x3f, 0x15, 0x9a, 0x08, 0x5b, 0xd4, 0x46, 0xe1, 0xc6, 0xf2, 0x1a, 0x48, 0x8e, 0xd5, 0xb6, + 0x75, 0xa4, 0xea, 0x56, 0x15, 0xa9, 0x86, 0x59, 0xb3, 0x0a, 0x19, 0x42, 0x30, 0xd3, 0xfd, 0x22, + 0xc4, 0x70, 0xd9, 0xaa, 0xa2, 0x35, 0xb3, 0x66, 0x29, 0x79, 0xc7, 0xf7, 0x2c, 0x1f, 0x83, 0x61, + 0xe7, 0xc0, 0x74, 0xb5, 0xe7, 0x0b, 0x39, 0x92, 0x21, 0xec, 0x69, 0xf6, 0x5b, 0xc3, 0x30, 0x36, + 0x48, 0x8a, 0x9d, 0x87, 0x54, 0x0d, 0xbf, 0x65, 0x21, 0x7e, 0x94, 0x18, 0x50, 0x8c, 0x3f, 0x88, + 0xc3, 0x1f, 0x32, 0x88, 0x25, 0xc8, 0x9a, 0xc8, 0x71, 0x51, 0x95, 0x66, 0x44, 0x62, 0xc0, 0x9c, + 0x02, 0x0a, 0xea, 0x4e, 0xa9, 0xe4, 0x87, 0x4a, 0xa9, 0x27, 0x61, 0xcc, 0x73, 0x49, 0xb5, 0x35, + 0xb3, 0xce, 0x73, 0x73, 0x21, 0xca, 0x93, 0xf9, 0x32, 0xc7, 0x29, 0x18, 0xa6, 0xe4, 0x91, 0xef, + 0x59, 0x5e, 0x01, 0xb0, 0x4c, 0x64, 0xd5, 0xd4, 0x2a, 0xd2, 0x1b, 0x85, 0x74, 0x8f, 0x28, 0x6d, + 0x61, 0x93, 0xae, 0x28, 0x59, 0xb4, 0x55, 0x6f, 0xc8, 0x0f, 0x76, 0x52, 0x6d, 0xa4, 0x47, 0xa6, + 0x6c, 0xd0, 0x45, 0xd6, 0x95, 0x6d, 0xbb, 0x90, 0xb7, 0x11, 0xce, 0x7b, 0x54, 0x65, 0x6f, 0x96, + 0x21, 0x4e, 0xcc, 0x47, 0xbe, 0x99, 0xc2, 0x60, 0xf4, 0xc5, 0x46, 0x6d, 0xf1, 0x51, 0xbe, 0x15, + 0xbc, 0x06, 0x95, 0xa4, 0x15, 0x90, 0x2a, 0x94, 0xe3, 0x8d, 0x9b, 0x5a, 0x13, 0x4d, 0xbd, 0x00, + 0x79, 0x7f, 0x78, 0xe4, 0x49, 0x48, 0x39, 0xae, 0x66, 0xbb, 0x24, 0x0b, 0x53, 0x0a, 0x7d, 0x90, + 0x25, 0x48, 0x20, 0xb3, 0x4a, 0xaa, 0x5c, 0x4a, 0xc1, 0x7f, 0xca, 0x3f, 0xd7, 0x79, 0xe1, 0x04, + 0x79, 0xe1, 0x3b, 0xba, 0x67, 0xd4, 0xc7, 0x1c, 0x7c, 0xef, 0xa9, 0x07, 0x60, 0xd4, 0xf7, 0x02, + 0x83, 0x0e, 0x3d, 0xfb, 0x0b, 0x70, 0x43, 0x28, 0xb5, 0xfc, 0x24, 0x4c, 0xb6, 0x4d, 0xc3, 0x74, + 0x91, 0xdd, 0xb2, 0x11, 0xce, 0x58, 0x3a, 0x54, 0xe1, 0x5f, 0x47, 0x7a, 0xe4, 0xdc, 0xae, 0x68, + 0x4d, 0x59, 0x94, 0x89, 0x76, 0x77, 0xe3, 0xc9, 0x4c, 0xfa, 0x9d, 0x11, 0xe9, 0xea, 0xd5, 0xab, + 0x57, 0xe3, 0xb3, 0x2f, 0x0d, 0xc3, 0x64, 0xd8, 0x9a, 0x09, 0x5d, 0xbe, 0xc7, 0x60, 0xd8, 0x6c, + 0x37, 0xf7, 0x90, 0x4d, 0x82, 0x94, 0x52, 0xd8, 0x93, 0x5c, 0x82, 0x54, 0x43, 0xdb, 0x43, 0x8d, + 0x42, 0xf2, 0x78, 0x6c, 0x2e, 0xbf, 0x78, 0x6a, 0xa0, 0x55, 0x39, 0xbf, 0x8e, 0x21, 0x0a, 0x45, + 0xca, 0x0f, 0x43, 0x92, 0x95, 0x68, 0xcc, 0x70, 0x72, 0x30, 0x06, 0xbc, 0x96, 0x14, 0x82, 0x93, + 0x6f, 0x86, 0x0c, 0xfe, 0x97, 0xe6, 0xc6, 0x30, 0xf1, 0x39, 0x8d, 0x1b, 0x70, 0x5e, 0xc8, 0x53, + 0x90, 0x26, 0xcb, 0xa4, 0x8a, 0xf8, 0xd6, 0xe6, 0x3d, 0xe3, 0xc4, 0xaa, 0xa2, 0x9a, 0xd6, 0x6e, + 0xb8, 0xea, 0x65, 0xad, 0xd1, 0x46, 0x24, 0xe1, 0x33, 0x4a, 0x8e, 0x35, 0x3e, 0x8e, 0xdb, 0xe4, + 0x19, 0xc8, 0xd2, 0x55, 0x65, 0x98, 0x55, 0xf4, 0x3c, 0xa9, 0x9e, 0x29, 0x85, 0x2e, 0xb4, 0x35, + 0xdc, 0x82, 0x87, 0x7f, 0xd6, 0xb1, 0x4c, 0x9e, 0x9a, 0x64, 0x08, 0xdc, 0x40, 0x86, 0x7f, 0x20, + 0x58, 0xb8, 0x6f, 0x09, 0x7f, 0xbd, 0x60, 0x4e, 0xcd, 0x7e, 0x23, 0x0e, 0x49, 0x52, 0x2f, 0xc6, + 0x20, 0xbb, 0xf3, 0xd4, 0x76, 0x59, 0x5d, 0xd9, 0xda, 0x5d, 0x5a, 0x2f, 0x4b, 0x31, 0x39, 0x0f, + 0x40, 0x1a, 0x2e, 0xac, 0x6f, 0x95, 0x76, 0xa4, 0xb8, 0xf7, 0xbc, 0xb6, 0xb9, 0x73, 0xf6, 0xb4, + 0x94, 0xf0, 0x00, 0xbb, 0xb4, 0x21, 0x29, 0x1a, 0xdc, 0xbf, 0x28, 0xa5, 0x64, 0x09, 0x72, 0x94, + 0x60, 0xed, 0xc9, 0xf2, 0xca, 0xd9, 0xd3, 0xd2, 0xb0, 0xbf, 0xe5, 0xfe, 0x45, 0x69, 0x44, 0x1e, + 0x85, 0x0c, 0x69, 0x59, 0xda, 0xda, 0x5a, 0x97, 0xd2, 0x1e, 0x67, 0x65, 0x47, 0x59, 0xdb, 0x5c, + 0x95, 0x32, 0x1e, 0xe7, 0xaa, 0xb2, 0xb5, 0xbb, 0x2d, 0x81, 0xc7, 0xb0, 0x51, 0xae, 0x54, 0x4a, + 0xab, 0x65, 0x29, 0xeb, 0x59, 0x2c, 0x3d, 0xb5, 0x53, 0xae, 0x48, 0x39, 0x9f, 0x5b, 0xf7, 0x2f, + 0x4a, 0xa3, 0xde, 0x10, 0xe5, 0xcd, 0xdd, 0x0d, 0x29, 0x2f, 0x8f, 0xc3, 0x28, 0x1d, 0x82, 0x3b, + 0x31, 0x16, 0x68, 0x3a, 0x7b, 0x5a, 0x92, 0x3a, 0x8e, 0x50, 0x96, 0x71, 0x5f, 0xc3, 0xd9, 0xd3, + 0x92, 0x3c, 0xbb, 0x0c, 0x29, 0x92, 0x5d, 0xb2, 0x0c, 0xf9, 0xf5, 0xd2, 0x52, 0x79, 0x5d, 0xdd, + 0xda, 0xde, 0x59, 0xdb, 0xda, 0x2c, 0xad, 0x4b, 0xb1, 0x4e, 0x9b, 0x52, 0xfe, 0xcc, 0xee, 0x9a, + 0x52, 0x5e, 0x91, 0xe2, 0x62, 0xdb, 0x76, 0xb9, 0xb4, 0x53, 0x5e, 0x91, 0x12, 0xb3, 0x3a, 0x4c, + 0x86, 0xd5, 0xc9, 0xd0, 0x95, 0x21, 0x4c, 0x71, 0xbc, 0xc7, 0x14, 0x13, 0xae, 0xae, 0x29, 0xfe, + 0x71, 0x1c, 0x26, 0x42, 0xf6, 0x8a, 0xd0, 0x41, 0x1e, 0x81, 0x14, 0x4d, 0x51, 0xba, 0x7b, 0xde, + 0x15, 0xba, 0xe9, 0x90, 0x84, 0xed, 0xda, 0x41, 0x09, 0x4e, 0x54, 0x10, 0x89, 0x1e, 0x0a, 0x02, + 0x53, 0x74, 0xd5, 0xf4, 0x67, 0xba, 0x6a, 0x3a, 0xdd, 0xf6, 0xce, 0x0e, 0xb2, 0xed, 0x91, 0xb6, + 0xa3, 0xd5, 0xf6, 0x54, 0x48, 0x6d, 0x3f, 0x0f, 0xe3, 0x5d, 0x44, 0x03, 0xd7, 0xd8, 0x17, 0x63, + 0x50, 0xe8, 0x15, 0x9c, 0x88, 0x4a, 0x17, 0xf7, 0x55, 0xba, 0xf3, 0xc1, 0x08, 0x9e, 0xe8, 0x3d, + 0x09, 0x5d, 0x73, 0xfd, 0x7a, 0x0c, 0x8e, 0x85, 0x2b, 0xc5, 0x50, 0x1f, 0x1e, 0x86, 0xe1, 0x26, + 0x72, 0xf7, 0x2d, 0xae, 0x96, 0xee, 0x08, 0xd9, 0x83, 0x71, 0x77, 0x70, 0xb2, 0x19, 0x4a, 0xdc, + 0xc4, 0x13, 0xbd, 0xe4, 0x1e, 0xf5, 0xa6, 0xcb, 0xd3, 0xcf, 0xc5, 0xe1, 0x86, 0x50, 0xf2, 0x50, + 0x47, 0x6f, 0x01, 0x30, 0xcc, 0x56, 0xdb, 0xa5, 0x8a, 0x88, 0x16, 0xd8, 0x0c, 0x69, 0x21, 0xc5, + 0x0b, 0x17, 0xcf, 0xb6, 0xeb, 0xf5, 0x27, 0x48, 0x3f, 0xd0, 0x26, 0x62, 0x70, 0xae, 0xe3, 0x68, + 0x92, 0x38, 0x3a, 0xdd, 0xe3, 0x4d, 0xbb, 0x12, 0xf3, 0x5e, 0x90, 0xf4, 0x86, 0x81, 0x4c, 0x57, + 0x75, 0x5c, 0x1b, 0x69, 0x4d, 0xc3, 0xac, 0x93, 0x1d, 0x24, 0x5d, 0x4c, 0xd5, 0xb4, 0x86, 0x83, + 0x94, 0x31, 0xda, 0x5d, 0xe1, 0xbd, 0x18, 0x41, 0x12, 0xc8, 0x16, 0x10, 0xc3, 0x3e, 0x04, 0xed, + 0xf6, 0x10, 0xb3, 0x5f, 0x4f, 0x43, 0x56, 0xd0, 0xd5, 0xf2, 0x09, 0xc8, 0x3d, 0xab, 0x5d, 0xd6, + 0x54, 0x7e, 0x56, 0xa2, 0x91, 0xc8, 0xe2, 0xb6, 0x6d, 0x76, 0x5e, 0xba, 0x17, 0x26, 0x89, 0x89, + 0xd5, 0x76, 0x91, 0xad, 0xea, 0x0d, 0xcd, 0x71, 0x48, 0xd0, 0xd2, 0xc4, 0x54, 0xc6, 0x7d, 0x5b, + 0xb8, 0x6b, 0x99, 0xf7, 0xc8, 0x67, 0x60, 0x82, 0x20, 0x9a, 0xed, 0x86, 0x6b, 0xb4, 0x1a, 0x48, + 0xc5, 0xa7, 0x37, 0x87, 0xec, 0x24, 0x9e, 0x67, 0xe3, 0xd8, 0x62, 0x83, 0x19, 0x60, 0x8f, 0x1c, + 0x79, 0x05, 0x6e, 0x21, 0xb0, 0x3a, 0x32, 0x91, 0xad, 0xb9, 0x48, 0x45, 0xcf, 0xb5, 0xb5, 0x86, + 0xa3, 0x6a, 0x66, 0x55, 0xdd, 0xd7, 0x9c, 0xfd, 0xc2, 0x24, 0x26, 0x58, 0x8a, 0x17, 0x62, 0xca, + 0x4d, 0xd8, 0x70, 0x95, 0xd9, 0x95, 0x89, 0x59, 0xc9, 0xac, 0x5e, 0xd4, 0x9c, 0x7d, 0xb9, 0x08, + 0xc7, 0x08, 0x8b, 0xe3, 0xda, 0x86, 0x59, 0x57, 0xf5, 0x7d, 0xa4, 0x5f, 0x52, 0xdb, 0x6e, 0xed, + 0x5c, 0xe1, 0x66, 0x71, 0x7c, 0xe2, 0x61, 0x85, 0xd8, 0x2c, 0x63, 0x93, 0x5d, 0xb7, 0x76, 0x4e, + 0xae, 0x40, 0x0e, 0x4f, 0x46, 0xd3, 0x78, 0x01, 0xa9, 0x35, 0xcb, 0x26, 0x5b, 0x63, 0x3e, 0xa4, + 0x34, 0x09, 0x11, 0x9c, 0xdf, 0x62, 0x80, 0x0d, 0xab, 0x8a, 0x8a, 0xa9, 0xca, 0x76, 0xb9, 0xbc, + 0xa2, 0x64, 0x39, 0xcb, 0x05, 0xcb, 0xc6, 0x09, 0x55, 0xb7, 0xbc, 0x00, 0x67, 0x69, 0x42, 0xd5, + 0x2d, 0x1e, 0xde, 0x33, 0x30, 0xa1, 0xeb, 0xf4, 0x9d, 0x0d, 0x5d, 0x65, 0x67, 0x2c, 0xa7, 0x20, + 0xf9, 0x82, 0xa5, 0xeb, 0xab, 0xd4, 0x80, 0xe5, 0xb8, 0x23, 0x3f, 0x08, 0x37, 0x74, 0x82, 0x25, + 0x02, 0xc7, 0xbb, 0xde, 0x32, 0x08, 0x3d, 0x03, 0x13, 0xad, 0x83, 0x6e, 0xa0, 0xec, 0x1b, 0xb1, + 0x75, 0x10, 0x84, 0x3d, 0x00, 0x93, 0xad, 0xfd, 0x56, 0x37, 0xee, 0xa4, 0x88, 0x93, 0x5b, 0xfb, + 0xad, 0x20, 0xf0, 0x76, 0x72, 0xe0, 0xb6, 0x91, 0xae, 0xb9, 0xa8, 0x5a, 0xb8, 0x51, 0x34, 0x17, + 0x3a, 0xe4, 0x05, 0x90, 0x74, 0x5d, 0x45, 0xa6, 0xb6, 0xd7, 0x40, 0xaa, 0x66, 0x23, 0x53, 0x73, + 0x0a, 0x33, 0xa2, 0x71, 0x5e, 0xd7, 0xcb, 0xa4, 0xb7, 0x44, 0x3a, 0xe5, 0x93, 0x30, 0x6e, 0xed, + 0x3d, 0xab, 0xd3, 0x94, 0x54, 0x5b, 0x36, 0xaa, 0x19, 0xcf, 0x17, 0x6e, 0x23, 0xf1, 0x1d, 0xc3, + 0x1d, 0x24, 0x21, 0xb7, 0x49, 0xb3, 0x7c, 0x17, 0x48, 0xba, 0xb3, 0xaf, 0xd9, 0x2d, 0x52, 0x93, + 0x9d, 0x96, 0xa6, 0xa3, 0xc2, 0xed, 0xd4, 0x94, 0xb6, 0x6f, 0xf2, 0x66, 0xbc, 0x24, 0x9c, 0x2b, + 0x46, 0xcd, 0xe5, 0x8c, 0x77, 0xd2, 0x25, 0x41, 0xda, 0x18, 0xdb, 0x1c, 0x48, 0x38, 0x14, 0xbe, + 0x81, 0xe7, 0x88, 0x59, 0xbe, 0xb5, 0xdf, 0x12, 0xc7, 0xbd, 0x15, 0x46, 0xb1, 0x65, 0x67, 0xd0, + 0xbb, 0xa8, 0x20, 0x6b, 0xed, 0x0b, 0x23, 0x7e, 0x64, 0xda, 0x78, 0xb6, 0x08, 0x39, 0x31, 0x3f, + 0xe5, 0x0c, 0xd0, 0x0c, 0x95, 0x62, 0x58, 0xac, 0x2c, 0x6f, 0xad, 0x60, 0x99, 0xf1, 0x74, 0x59, + 0x8a, 0x63, 0xb9, 0xb3, 0xbe, 0xb6, 0x53, 0x56, 0x95, 0xdd, 0xcd, 0x9d, 0xb5, 0x8d, 0xb2, 0x94, + 0x10, 0x75, 0xf5, 0x77, 0xe3, 0x90, 0xf7, 0x1f, 0x91, 0xe4, 0x4f, 0xc3, 0x8d, 0xfc, 0x3e, 0xc3, + 0x41, 0xae, 0x7a, 0xc5, 0xb0, 0xc9, 0x92, 0x69, 0x6a, 0x74, 0xfb, 0xf2, 0x26, 0x6d, 0x92, 0x59, + 0x55, 0x90, 0xfb, 0x84, 0x61, 0xe3, 0x05, 0xd1, 0xd4, 0x5c, 0x79, 0x1d, 0x66, 0x4c, 0x4b, 0x75, + 0x5c, 0xcd, 0xac, 0x6a, 0x76, 0x55, 0xed, 0xdc, 0x24, 0xa9, 0x9a, 0xae, 0x23, 0xc7, 0xb1, 0xe8, + 0x56, 0xe5, 0xb1, 0x7c, 0xca, 0xb4, 0x2a, 0xcc, 0xb8, 0x53, 0xc3, 0x4b, 0xcc, 0x34, 0x90, 0x60, + 0x89, 0x5e, 0x09, 0x76, 0x33, 0x64, 0x9a, 0x5a, 0x4b, 0x45, 0xa6, 0x6b, 0x1f, 0x10, 0x61, 0x9c, + 0x56, 0xd2, 0x4d, 0xad, 0x55, 0xc6, 0xcf, 0x1f, 0xcf, 0xf9, 0xe4, 0x47, 0x09, 0xc8, 0x89, 0xe2, + 0x18, 0x9f, 0x35, 0x74, 0xb2, 0x8f, 0xc4, 0x48, 0xa5, 0xb9, 0xb5, 0xaf, 0x94, 0x9e, 0x5f, 0xc6, + 0x1b, 0x4c, 0x71, 0x98, 0x4a, 0x56, 0x85, 0x22, 0xf1, 0xe6, 0x8e, 0x6b, 0x0b, 0xa2, 0x12, 0x21, + 0xad, 0xb0, 0x27, 0x79, 0x15, 0x86, 0x9f, 0x75, 0x08, 0xf7, 0x30, 0xe1, 0xbe, 0xad, 0x3f, 0xf7, + 0xa3, 0x15, 0x42, 0x9e, 0x79, 0xb4, 0xa2, 0x6e, 0x6e, 0x29, 0x1b, 0xa5, 0x75, 0x85, 0xc1, 0xe5, + 0x9b, 0x20, 0xd9, 0xd0, 0x5e, 0x38, 0xf0, 0x6f, 0x45, 0xa4, 0x69, 0xd0, 0xc0, 0xdf, 0x04, 0xc9, + 0x2b, 0x48, 0xbb, 0xe4, 0xdf, 0x00, 0x48, 0xd3, 0x47, 0x98, 0xfa, 0x0b, 0x90, 0x22, 0xf1, 0x92, + 0x01, 0x58, 0xc4, 0xa4, 0x21, 0x39, 0x0d, 0xc9, 0xe5, 0x2d, 0x05, 0xa7, 0xbf, 0x04, 0x39, 0xda, + 0xaa, 0x6e, 0xaf, 0x95, 0x97, 0xcb, 0x52, 0x7c, 0xf6, 0x0c, 0x0c, 0xd3, 0x20, 0xe0, 0xa5, 0xe1, + 0x85, 0x41, 0x1a, 0x62, 0x8f, 0x8c, 0x23, 0xc6, 0x7b, 0x77, 0x37, 0x96, 0xca, 0x8a, 0x14, 0x17, + 0xa7, 0xd7, 0x81, 0x9c, 0xa8, 0x8b, 0x3f, 0x9e, 0x9c, 0xfa, 0x76, 0x0c, 0xb2, 0x82, 0xce, 0xc5, + 0x02, 0x45, 0x6b, 0x34, 0xac, 0x2b, 0xaa, 0xd6, 0x30, 0x34, 0x87, 0x25, 0x05, 0x90, 0xa6, 0x12, + 0x6e, 0x19, 0x74, 0xd2, 0x3e, 0x16, 0xe7, 0x5f, 0x8d, 0x81, 0x14, 0x94, 0x98, 0x01, 0x07, 0x63, + 0x3f, 0x55, 0x07, 0x5f, 0x89, 0x41, 0xde, 0xaf, 0x2b, 0x03, 0xee, 0x9d, 0xf8, 0xa9, 0xba, 0xf7, + 0x56, 0x1c, 0x46, 0x7d, 0x6a, 0x72, 0x50, 0xef, 0x9e, 0x83, 0x71, 0xa3, 0x8a, 0x9a, 0x2d, 0xcb, + 0x45, 0xa6, 0x7e, 0xa0, 0x36, 0xd0, 0x65, 0xd4, 0x28, 0xcc, 0x92, 0x42, 0xb1, 0xd0, 0x5f, 0xaf, + 0xce, 0xaf, 0x75, 0x70, 0xeb, 0x18, 0x56, 0x9c, 0x58, 0x5b, 0x29, 0x6f, 0x6c, 0x6f, 0xed, 0x94, + 0x37, 0x97, 0x9f, 0x52, 0x77, 0x37, 0x1f, 0xdb, 0xdc, 0x7a, 0x62, 0x53, 0x91, 0x8c, 0x80, 0xd9, + 0x47, 0xb8, 0xd4, 0xb7, 0x41, 0x0a, 0x3a, 0x25, 0xdf, 0x08, 0x61, 0x6e, 0x49, 0x43, 0xf2, 0x04, + 0x8c, 0x6d, 0x6e, 0xa9, 0x95, 0xb5, 0x95, 0xb2, 0x5a, 0xbe, 0x70, 0xa1, 0xbc, 0xbc, 0x53, 0xa1, + 0x37, 0x10, 0x9e, 0xf5, 0x8e, 0x7f, 0x51, 0xbf, 0x9c, 0x80, 0x89, 0x10, 0x4f, 0xe4, 0x12, 0x3b, + 0x3b, 0xd0, 0xe3, 0xcc, 0x3d, 0x83, 0x78, 0x3f, 0x8f, 0xb7, 0xfc, 0x6d, 0xcd, 0x76, 0xd9, 0x51, + 0xe3, 0x2e, 0xc0, 0x51, 0x32, 0x5d, 0xa3, 0x66, 0x20, 0x9b, 0x5d, 0xd8, 0xd0, 0x03, 0xc5, 0x58, + 0xa7, 0x9d, 0xde, 0xd9, 0xdc, 0x0d, 0x72, 0xcb, 0x72, 0x0c, 0xd7, 0xb8, 0x8c, 0x54, 0xc3, 0xe4, + 0xb7, 0x3b, 0xf8, 0x80, 0x91, 0x54, 0x24, 0xde, 0xb3, 0x66, 0xba, 0x9e, 0xb5, 0x89, 0xea, 0x5a, + 0xc0, 0x1a, 0x17, 0xf0, 0x84, 0x22, 0xf1, 0x1e, 0xcf, 0xfa, 0x04, 0xe4, 0xaa, 0x56, 0x1b, 0xab, + 0x2e, 0x6a, 0x87, 0xf7, 0x8b, 0x98, 0x92, 0xa5, 0x6d, 0x9e, 0x09, 0xd3, 0xd3, 0x9d, 0x6b, 0xa5, + 0x9c, 0x92, 0xa5, 0x6d, 0xd4, 0xe4, 0x4e, 0x18, 0xd3, 0xea, 0x75, 0x1b, 0x93, 0x73, 0x22, 0x7a, + 0x42, 0xc8, 0x7b, 0xcd, 0xc4, 0x70, 0xea, 0x51, 0x48, 0xf3, 0x38, 0xe0, 0x2d, 0x19, 0x47, 0x42, + 0x6d, 0xd1, 0x63, 0x6f, 0x7c, 0x2e, 0xa3, 0xa4, 0x4d, 0xde, 0x79, 0x02, 0x72, 0x86, 0xa3, 0x76, + 0x6e, 0xc9, 0xe3, 0xc7, 0xe3, 0x73, 0x69, 0x25, 0x6b, 0x38, 0xde, 0x0d, 0xe3, 0xec, 0xeb, 0x71, + 0xc8, 0xfb, 0x6f, 0xf9, 0xe5, 0x15, 0x48, 0x37, 0x2c, 0x5d, 0x23, 0xa9, 0x45, 0x3f, 0x31, 0xcd, + 0x45, 0x7c, 0x18, 0x98, 0x5f, 0x67, 0xf6, 0x8a, 0x87, 0x9c, 0xfa, 0x97, 0x18, 0xa4, 0x79, 0xb3, + 0x7c, 0x0c, 0x92, 0x2d, 0xcd, 0xdd, 0x27, 0x74, 0xa9, 0xa5, 0xb8, 0x14, 0x53, 0xc8, 0x33, 0x6e, + 0x77, 0x5a, 0x9a, 0x49, 0x52, 0x80, 0xb5, 0xe3, 0x67, 0x3c, 0xaf, 0x0d, 0xa4, 0x55, 0xc9, 0xf1, + 0xc3, 0x6a, 0x36, 0x91, 0xe9, 0x3a, 0x7c, 0x5e, 0x59, 0xfb, 0x32, 0x6b, 0x96, 0x4f, 0xc1, 0xb8, + 0x6b, 0x6b, 0x46, 0xc3, 0x67, 0x9b, 0x24, 0xb6, 0x12, 0xef, 0xf0, 0x8c, 0x8b, 0x70, 0x13, 0xe7, + 0xad, 0x22, 0x57, 0xd3, 0xf7, 0x51, 0xb5, 0x03, 0x1a, 0x26, 0xd7, 0x0c, 0x37, 0x32, 0x83, 0x15, + 0xd6, 0xcf, 0xb1, 0xb3, 0xdf, 0x8f, 0xc1, 0x38, 0x3f, 0x30, 0x55, 0xbd, 0x60, 0x6d, 0x00, 0x68, + 0xa6, 0x69, 0xb9, 0x62, 0xb8, 0xba, 0x53, 0xb9, 0x0b, 0x37, 0x5f, 0xf2, 0x40, 0x8a, 0x40, 0x30, + 0xd5, 0x04, 0xe8, 0xf4, 0xf4, 0x0c, 0xdb, 0x0c, 0x64, 0xd9, 0x27, 0x1c, 0xf2, 0x1d, 0x90, 0x1e, + 0xb1, 0x81, 0x36, 0xe1, 0x93, 0x95, 0x3c, 0x09, 0xa9, 0x3d, 0x54, 0x37, 0x4c, 0x76, 0x31, 0x4b, + 0x1f, 0xf8, 0x45, 0x48, 0xd2, 0xbb, 0x08, 0x59, 0xfa, 0x2c, 0x4c, 0xe8, 0x56, 0x33, 0xe8, 0xee, + 0x92, 0x14, 0x38, 0xe6, 0x3b, 0x17, 0x63, 0x4f, 0x43, 0x47, 0x62, 0xbe, 0x1f, 0x8b, 0x7d, 0x31, + 0x9e, 0x58, 0xdd, 0x5e, 0xfa, 0x4a, 0x7c, 0x6a, 0x95, 0x42, 0xb7, 0xf9, 0x9b, 0x2a, 0xa8, 0xd6, + 0x40, 0x3a, 0xf6, 0x1e, 0xbe, 0x74, 0x0a, 0xee, 0xa9, 0x1b, 0xee, 0x7e, 0x7b, 0x6f, 0x5e, 0xb7, + 0x9a, 0x0b, 0x75, 0xab, 0x6e, 0x75, 0x3e, 0x7d, 0xe2, 0x27, 0xf2, 0x40, 0xfe, 0x62, 0x9f, 0x3f, + 0x33, 0x5e, 0xeb, 0x54, 0xe4, 0xb7, 0xd2, 0xe2, 0x26, 0x4c, 0x30, 0x63, 0x95, 0x7c, 0x7f, 0xa1, + 0xa7, 0x08, 0xb9, 0xef, 0x1d, 0x56, 0xe1, 0x6b, 0x6f, 0x93, 0xed, 0x5a, 0x19, 0x67, 0x50, 0xdc, + 0x47, 0x0f, 0x1a, 0x45, 0x05, 0x6e, 0xf0, 0xf1, 0xd1, 0xa5, 0x89, 0xec, 0x08, 0xc6, 0xef, 0x32, + 0xc6, 0x09, 0x81, 0xb1, 0xc2, 0xa0, 0xc5, 0x65, 0x18, 0x3d, 0x0a, 0xd7, 0x3f, 0x32, 0xae, 0x1c, + 0x12, 0x49, 0x56, 0x61, 0x8c, 0x90, 0xe8, 0x6d, 0xc7, 0xb5, 0x9a, 0xa4, 0xee, 0xf5, 0xa7, 0xf9, + 0xa7, 0xb7, 0xe9, 0x5a, 0xc9, 0x63, 0xd8, 0xb2, 0x87, 0x2a, 0x16, 0x81, 0x7c, 0x72, 0xaa, 0x22, + 0xbd, 0x11, 0xc1, 0xf0, 0x06, 0x73, 0xc4, 0xb3, 0x2f, 0x3e, 0x0e, 0x93, 0xf8, 0x6f, 0x52, 0x96, + 0x44, 0x4f, 0xa2, 0x2f, 0xbc, 0x0a, 0xdf, 0x7f, 0x91, 0x2e, 0xc7, 0x09, 0x8f, 0x40, 0xf0, 0x49, + 0x98, 0xc5, 0x3a, 0x72, 0x5d, 0x64, 0x3b, 0xaa, 0xd6, 0x08, 0x73, 0x4f, 0xb8, 0x31, 0x28, 0x7c, + 0xfe, 0x5d, 0xff, 0x2c, 0xae, 0x52, 0x64, 0xa9, 0xd1, 0x28, 0xee, 0xc2, 0x8d, 0x21, 0x59, 0x31, + 0x00, 0xe7, 0xcb, 0x8c, 0x73, 0xb2, 0x2b, 0x33, 0x30, 0xed, 0x36, 0xf0, 0x76, 0x6f, 0x2e, 0x07, + 0xe0, 0xfc, 0x43, 0xc6, 0x29, 0x33, 0x2c, 0x9f, 0x52, 0xcc, 0xf8, 0x28, 0x8c, 0x5f, 0x46, 0xf6, + 0x9e, 0xe5, 0xb0, 0x5b, 0x9a, 0x01, 0xe8, 0x5e, 0x61, 0x74, 0x63, 0x0c, 0x48, 0xae, 0x6d, 0x30, + 0xd7, 0x83, 0x90, 0xae, 0x69, 0x3a, 0x1a, 0x80, 0xe2, 0x0b, 0x8c, 0x62, 0x04, 0xdb, 0x63, 0x68, + 0x09, 0x72, 0x75, 0x8b, 0xed, 0x4c, 0xd1, 0xf0, 0x57, 0x19, 0x3c, 0xcb, 0x31, 0x8c, 0xa2, 0x65, + 0xb5, 0xda, 0x0d, 0xbc, 0x6d, 0x45, 0x53, 0xfc, 0x11, 0xa7, 0xe0, 0x18, 0x46, 0x71, 0x84, 0xb0, + 0xfe, 0x31, 0xa7, 0x70, 0x84, 0x78, 0x3e, 0x02, 0x59, 0xcb, 0x6c, 0x1c, 0x58, 0xe6, 0x20, 0x4e, + 0xbc, 0xc6, 0x18, 0x80, 0x41, 0x30, 0xc1, 0x79, 0xc8, 0x0c, 0x3a, 0x11, 0x7f, 0xfa, 0x2e, 0x5f, + 0x1e, 0x7c, 0x06, 0x56, 0x61, 0x8c, 0x17, 0x28, 0xc3, 0x32, 0x07, 0xa0, 0xf8, 0x12, 0xa3, 0xc8, + 0x0b, 0x30, 0xf6, 0x1a, 0x2e, 0x72, 0xdc, 0x3a, 0x1a, 0x84, 0xe4, 0x75, 0xfe, 0x1a, 0x0c, 0xc2, + 0x42, 0xb9, 0x87, 0x4c, 0x7d, 0x7f, 0x30, 0x86, 0x2f, 0xf3, 0x50, 0x72, 0x0c, 0xa6, 0x58, 0x86, + 0xd1, 0xa6, 0x66, 0x3b, 0xfb, 0x5a, 0x63, 0xa0, 0xe9, 0xf8, 0x33, 0xc6, 0x91, 0xf3, 0x40, 0x2c, + 0x22, 0x6d, 0xf3, 0x28, 0x34, 0x5f, 0xe1, 0x11, 0x11, 0x60, 0x6c, 0xe9, 0x39, 0x2e, 0xb9, 0xd2, + 0x3a, 0x0a, 0xdb, 0x9f, 0xf3, 0xa5, 0x47, 0xb1, 0x1b, 0x22, 0xe3, 0x79, 0xc8, 0x38, 0xc6, 0x0b, + 0x03, 0xd1, 0xfc, 0x05, 0x9f, 0x69, 0x02, 0xc0, 0xe0, 0xa7, 0xe0, 0xa6, 0xd0, 0x6d, 0x62, 0x00, + 0xb2, 0xbf, 0x64, 0x64, 0xc7, 0x42, 0xb6, 0x0a, 0x56, 0x12, 0x8e, 0x4a, 0xf9, 0x57, 0xbc, 0x24, + 0xa0, 0x00, 0xd7, 0x36, 0x3e, 0x2b, 0x38, 0x5a, 0xed, 0x68, 0x51, 0xfb, 0x6b, 0x1e, 0x35, 0x8a, + 0xf5, 0x45, 0x6d, 0x07, 0x8e, 0x31, 0xc6, 0xa3, 0xcd, 0xeb, 0x57, 0x79, 0x61, 0xa5, 0xe8, 0x5d, + 0xff, 0xec, 0x7e, 0x16, 0xa6, 0xbc, 0x70, 0x72, 0x51, 0xea, 0xa8, 0x4d, 0xad, 0x35, 0x00, 0xf3, + 0xd7, 0x18, 0x33, 0xaf, 0xf8, 0x9e, 0xaa, 0x75, 0x36, 0xb4, 0x16, 0x26, 0x7f, 0x12, 0x0a, 0x9c, + 0xbc, 0x6d, 0xda, 0x48, 0xb7, 0xea, 0xa6, 0xf1, 0x02, 0xaa, 0x0e, 0x40, 0xfd, 0x37, 0x81, 0xa9, + 0xda, 0x15, 0xe0, 0x98, 0x79, 0x0d, 0x24, 0x4f, 0xab, 0xa8, 0x46, 0xb3, 0x65, 0xd9, 0x6e, 0x04, + 0xe3, 0xd7, 0xf9, 0x4c, 0x79, 0xb8, 0x35, 0x02, 0x2b, 0x96, 0x21, 0x4f, 0x1e, 0x07, 0x4d, 0xc9, + 0xbf, 0x65, 0x44, 0xa3, 0x1d, 0x14, 0x2b, 0x1c, 0xba, 0xd5, 0x6c, 0x69, 0xf6, 0x20, 0xf5, 0xef, + 0xef, 0x78, 0xe1, 0x60, 0x10, 0x56, 0x38, 0xdc, 0x83, 0x16, 0xc2, 0xbb, 0xfd, 0x00, 0x0c, 0xdf, + 0xe0, 0x85, 0x83, 0x63, 0x18, 0x05, 0x17, 0x0c, 0x03, 0x50, 0xfc, 0x3d, 0xa7, 0xe0, 0x18, 0x4c, + 0xf1, 0x99, 0xce, 0x46, 0x6b, 0xa3, 0xba, 0xe1, 0xb8, 0x36, 0x95, 0xc2, 0xfd, 0xa9, 0xbe, 0xf9, + 0xae, 0x5f, 0x84, 0x29, 0x02, 0x14, 0x57, 0x22, 0x76, 0x85, 0x4a, 0x4e, 0x4a, 0xd1, 0x8e, 0x7d, + 0x8b, 0x57, 0x22, 0x01, 0x86, 0x7d, 0x13, 0x14, 0x22, 0x0e, 0xbb, 0x8e, 0xcf, 0x07, 0x03, 0xd0, + 0x7d, 0x3b, 0xe0, 0x5c, 0x85, 0x63, 0x31, 0xa7, 0xa0, 0x7f, 0xda, 0xe6, 0x25, 0x74, 0x30, 0x50, + 0x76, 0xfe, 0x43, 0x40, 0xff, 0xec, 0x52, 0x24, 0xad, 0x21, 0x63, 0x01, 0x3d, 0x25, 0x47, 0xfd, + 0x58, 0xa7, 0xf0, 0x4b, 0xd7, 0xd9, 0xfb, 0xfa, 0xe5, 0x54, 0x71, 0x1d, 0x27, 0xb9, 0x5f, 0xf4, + 0x44, 0x93, 0xbd, 0x78, 0xdd, 0xcb, 0x73, 0x9f, 0xe6, 0x29, 0x5e, 0x80, 0x51, 0x9f, 0xe0, 0x89, + 0xa6, 0xfa, 0x65, 0x46, 0x95, 0x13, 0xf5, 0x4e, 0xf1, 0x0c, 0x24, 0xb1, 0x78, 0x89, 0x86, 0xff, + 0x0a, 0x83, 0x13, 0xf3, 0xe2, 0x43, 0x90, 0xe6, 0xa2, 0x25, 0x1a, 0xfa, 0xab, 0x0c, 0xea, 0x41, + 0x30, 0x9c, 0x0b, 0x96, 0x68, 0xf8, 0xaf, 0x71, 0x38, 0x87, 0x60, 0xf8, 0xe0, 0x21, 0xfc, 0xce, + 0xaf, 0x27, 0xd9, 0xa6, 0xc3, 0x63, 0x77, 0x1e, 0x46, 0x98, 0x52, 0x89, 0x46, 0x7f, 0x8e, 0x0d, + 0xce, 0x11, 0xc5, 0x07, 0x20, 0x35, 0x60, 0xc0, 0x7f, 0x83, 0x41, 0xa9, 0x7d, 0x71, 0x19, 0xb2, + 0x82, 0x3a, 0x89, 0x86, 0xff, 0x26, 0x83, 0x8b, 0x28, 0xec, 0x3a, 0x53, 0x27, 0xd1, 0x04, 0xbf, + 0xc5, 0x5d, 0x67, 0x08, 0x1c, 0x36, 0x2e, 0x4c, 0xa2, 0xd1, 0xbf, 0xcd, 0xa3, 0xce, 0x21, 0xc5, + 0x47, 0x20, 0xe3, 0x6d, 0x36, 0xd1, 0xf8, 0xdf, 0x61, 0xf8, 0x0e, 0x06, 0x47, 0x40, 0xd8, 0xec, + 0xa2, 0x29, 0x7e, 0x97, 0x47, 0x40, 0x40, 0xe1, 0x65, 0x14, 0x14, 0x30, 0xd1, 0x4c, 0xbf, 0xc7, + 0x97, 0x51, 0x40, 0xbf, 0xe0, 0xd9, 0x24, 0x35, 0x3f, 0x9a, 0xe2, 0xf7, 0xf9, 0x6c, 0x12, 0x7b, + 0xec, 0x46, 0x50, 0x11, 0x44, 0x73, 0xfc, 0x01, 0x77, 0x23, 0x20, 0x08, 0x8a, 0xdb, 0x20, 0x77, + 0xab, 0x81, 0x68, 0xbe, 0x97, 0x18, 0xdf, 0x78, 0x97, 0x18, 0x28, 0x3e, 0x01, 0xc7, 0xc2, 0x95, + 0x40, 0x34, 0xeb, 0xe7, 0xaf, 0x07, 0xce, 0x6e, 0xa2, 0x10, 0x28, 0xee, 0x74, 0xb6, 0x14, 0x51, + 0x05, 0x44, 0xd3, 0xbe, 0x7c, 0xdd, 0x5f, 0xb8, 0x45, 0x11, 0x50, 0x2c, 0x01, 0x74, 0x36, 0xe0, + 0x68, 0xae, 0x57, 0x18, 0x97, 0x00, 0xc2, 0x4b, 0x83, 0xed, 0xbf, 0xd1, 0xf8, 0x2f, 0xf0, 0xa5, + 0xc1, 0x10, 0x78, 0x69, 0xf0, 0xad, 0x37, 0x1a, 0xfd, 0x2a, 0x5f, 0x1a, 0x1c, 0x82, 0x33, 0x5b, + 0xd8, 0xdd, 0xa2, 0x19, 0x5e, 0xe3, 0x99, 0x2d, 0xa0, 0x8a, 0x9b, 0x30, 0xde, 0xb5, 0x21, 0x46, + 0x53, 0x7d, 0x91, 0x51, 0x49, 0xc1, 0xfd, 0x50, 0xdc, 0xbc, 0xd8, 0x66, 0x18, 0xcd, 0xf6, 0x27, + 0x81, 0xcd, 0x8b, 0xed, 0x85, 0xc5, 0xf3, 0x90, 0x36, 0xdb, 0x8d, 0x06, 0x5e, 0x3c, 0x72, 0xff, + 0x1f, 0xd8, 0x15, 0xfe, 0xed, 0x03, 0x16, 0x1d, 0x0e, 0x28, 0x9e, 0x81, 0x14, 0x6a, 0xee, 0xa1, + 0x6a, 0x14, 0xf2, 0xdf, 0x3f, 0xe0, 0x05, 0x13, 0x5b, 0x17, 0x1f, 0x01, 0xa0, 0x57, 0x23, 0xe4, + 0xb3, 0x5f, 0x04, 0xf6, 0x3f, 0x3e, 0x60, 0x3f, 0x7d, 0xe9, 0x40, 0x3a, 0x04, 0xf4, 0x87, 0x34, + 0xfd, 0x09, 0xde, 0xf5, 0x13, 0x90, 0x19, 0x79, 0x10, 0x46, 0x9e, 0x75, 0x2c, 0xd3, 0xd5, 0xea, + 0x51, 0xe8, 0xff, 0x64, 0x68, 0x6e, 0x8f, 0x03, 0xd6, 0xb4, 0x6c, 0xe4, 0x6a, 0x75, 0x27, 0x0a, + 0xfb, 0x5f, 0x0c, 0xeb, 0x01, 0x30, 0x58, 0xd7, 0x1c, 0x77, 0x90, 0xf7, 0xfe, 0x09, 0x07, 0x73, + 0x00, 0x76, 0x1a, 0xff, 0x7d, 0x09, 0x1d, 0x44, 0x61, 0xdf, 0xe3, 0x4e, 0x33, 0xfb, 0xe2, 0x43, + 0x90, 0xc1, 0x7f, 0xd2, 0xdf, 0xb3, 0x45, 0x80, 0xff, 0x9b, 0x81, 0x3b, 0x08, 0x3c, 0xb2, 0xe3, + 0x56, 0x5d, 0x23, 0x3a, 0xd8, 0xff, 0xc3, 0x66, 0x9a, 0xdb, 0x17, 0x4b, 0x90, 0x75, 0xdc, 0x6a, + 0xb5, 0xcd, 0xf4, 0x69, 0x04, 0xfc, 0x7f, 0x3f, 0xf0, 0xae, 0x2c, 0x3c, 0x0c, 0x9e, 0xed, 0x2b, + 0x97, 0xdc, 0x96, 0x45, 0x3e, 0x73, 0x44, 0x31, 0x5c, 0x67, 0x0c, 0x02, 0x64, 0xa9, 0x1c, 0x7e, + 0x7d, 0x0b, 0xab, 0xd6, 0xaa, 0x45, 0x2f, 0x6e, 0x9f, 0x9e, 0x8d, 0xbe, 0x81, 0x85, 0xff, 0xbb, + 0x07, 0x66, 0x74, 0xab, 0xb9, 0x67, 0x39, 0x0b, 0x26, 0x32, 0xdc, 0x7d, 0x64, 0x2f, 0x34, 0xb5, + 0x96, 0x43, 0x3a, 0x17, 0xd9, 0xd5, 0x6c, 0x96, 0x3d, 0xe1, 0x8e, 0xa9, 0xa3, 0x5d, 0xeb, 0xce, + 0xde, 0x02, 0xa3, 0x17, 0x1a, 0x96, 0xe6, 0x1a, 0x66, 0x7d, 0x1b, 0x7b, 0x2e, 0xe7, 0x20, 0x56, + 0x23, 0x9f, 0x25, 0x63, 0x4a, 0xac, 0x36, 0xfb, 0xcf, 0x29, 0xc8, 0xd0, 0x1b, 0xc1, 0x0d, 0xad, + 0x25, 0xff, 0x22, 0xe4, 0x36, 0xd9, 0x32, 0xbc, 0x6f, 0xf1, 0x9c, 0xe3, 0x7d, 0x81, 0x10, 0xc6, + 0x9f, 0xf7, 0xac, 0xe7, 0x45, 0x53, 0xf2, 0x33, 0x84, 0xa5, 0x7b, 0x7f, 0xf8, 0xe6, 0xcc, 0xdd, + 0x3d, 0xfd, 0xc3, 0xc2, 0x62, 0x81, 0xae, 0x97, 0xf9, 0x5d, 0xc3, 0x74, 0xef, 0x5b, 0x3c, 0xa7, + 0xf8, 0xc6, 0x93, 0x2f, 0x43, 0x9a, 0x75, 0x38, 0xec, 0xcb, 0xd4, 0x6d, 0x3d, 0xc6, 0xe6, 0x66, + 0x74, 0xdc, 0xd3, 0x6f, 0xbc, 0x39, 0x33, 0x74, 0xe4, 0xb1, 0xbd, 0xb1, 0xe4, 0xe7, 0x20, 0xcb, + 0xfd, 0x58, 0xab, 0x3a, 0xec, 0x7f, 0x22, 0xdc, 0x19, 0xf1, 0xda, 0x6b, 0x55, 0x36, 0xfa, 0x1d, + 0x3f, 0x7c, 0x73, 0x66, 0xb6, 0xef, 0xc8, 0xf3, 0xbb, 0x6d, 0xa3, 0xaa, 0x88, 0x63, 0xc8, 0xcf, + 0x40, 0x02, 0x0f, 0x45, 0x7f, 0xbc, 0x39, 0xd3, 0x63, 0x28, 0x6f, 0x88, 0x93, 0xec, 0x05, 0x07, + 0x19, 0x06, 0xf3, 0x4e, 0x3d, 0x02, 0xe3, 0x5d, 0xd3, 0x23, 0x4b, 0x90, 0xb8, 0x84, 0x0e, 0xd8, + 0xaf, 0xe4, 0xf0, 0x9f, 0xf2, 0x64, 0xe7, 0x67, 0xac, 0xb1, 0xb9, 0x1c, 0xfb, 0x6d, 0x6a, 0x31, + 0x7e, 0x2e, 0x36, 0x75, 0x1e, 0x46, 0x7d, 0x31, 0x3e, 0x12, 0xf8, 0x61, 0x90, 0x82, 0x51, 0x3a, + 0x12, 0xfe, 0x2c, 0xa4, 0x3f, 0x0c, 0x6e, 0xf6, 0x07, 0x32, 0x8c, 0x94, 0x1a, 0x8d, 0x0d, 0xad, + 0xe5, 0xc8, 0x4f, 0xc1, 0x38, 0x3d, 0xfe, 0xec, 0x58, 0x2b, 0xe4, 0x5b, 0xe0, 0x86, 0xd6, 0x62, + 0x09, 0x7d, 0xca, 0x17, 0x6e, 0x06, 0x98, 0xef, 0xb2, 0x26, 0xe3, 0x2b, 0xdd, 0x2c, 0xf2, 0xe3, + 0x20, 0xf1, 0x46, 0xb2, 0xb6, 0x30, 0x33, 0x4d, 0xd7, 0x93, 0x7d, 0x99, 0xb9, 0x31, 0x25, 0xee, + 0xe2, 0x90, 0x1f, 0x86, 0xf4, 0x9a, 0xe9, 0xde, 0xbf, 0x88, 0xf9, 0x68, 0x0e, 0xce, 0x86, 0xf2, + 0x71, 0x23, 0xca, 0xe3, 0x61, 0x18, 0xfe, 0xec, 0x69, 0x8c, 0x4f, 0xf6, 0xc7, 0x13, 0xa3, 0x0e, + 0x9e, 0x3c, 0xca, 0x25, 0xc8, 0xe0, 0x39, 0xa7, 0x0e, 0xd0, 0xff, 0x04, 0x73, 0x6b, 0x28, 0x81, + 0x67, 0x45, 0x19, 0x3a, 0x28, 0x4e, 0x41, 0x7d, 0x18, 0x8e, 0xa0, 0x10, 0x9c, 0xe8, 0xa0, 0x30, + 0x45, 0xc5, 0xf3, 0x62, 0xa4, 0x0f, 0x45, 0x25, 0xe0, 0x45, 0x45, 0xf4, 0xa2, 0xe2, 0x79, 0x91, + 0x8e, 0xa0, 0x10, 0xbd, 0xf0, 0x9e, 0xe5, 0x15, 0x80, 0x0b, 0xc6, 0xf3, 0xa8, 0x4a, 0xdd, 0xc8, + 0x84, 0x14, 0x23, 0xce, 0xd1, 0x31, 0xa3, 0x24, 0x02, 0x4e, 0x5e, 0x85, 0x6c, 0xa5, 0xd6, 0xa1, + 0x01, 0xf6, 0x7f, 0x80, 0x42, 0x5d, 0xa9, 0x05, 0x78, 0x44, 0xa4, 0xe7, 0x0e, 0x7d, 0xa5, 0x6c, + 0x94, 0x3b, 0xc2, 0x3b, 0x09, 0xb8, 0x8e, 0x3b, 0x94, 0x26, 0x17, 0xe9, 0x8e, 0xc0, 0x23, 0x22, + 0xe5, 0xf3, 0x30, 0xb2, 0x64, 0x59, 0xd8, 0xb2, 0x30, 0x4a, 0x48, 0x4e, 0x84, 0x92, 0x30, 0x1b, + 0x4a, 0xc0, 0x11, 0x64, 0x76, 0x48, 0xea, 0x63, 0x78, 0xbe, 0xdf, 0xec, 0x70, 0x2b, 0x3e, 0x3b, + 0xfc, 0x59, 0x5c, 0x81, 0x4b, 0x07, 0x2e, 0xc2, 0x47, 0x8d, 0xc2, 0xd8, 0x00, 0x2b, 0x90, 0x1b, + 0x07, 0x56, 0x20, 0x6f, 0x96, 0x2b, 0x30, 0xc6, 0xdb, 0xca, 0x66, 0x1b, 0xd7, 0xe0, 0x82, 0xc4, + 0x7e, 0xe0, 0xdf, 0x8f, 0x96, 0xd9, 0x52, 0xd6, 0x20, 0x83, 0xbc, 0x0d, 0x79, 0xde, 0xb4, 0xe1, + 0x90, 0x97, 0x1e, 0x0f, 0xd9, 0x57, 0x83, 0x9c, 0xd4, 0x94, 0x52, 0x06, 0xf0, 0x53, 0x2b, 0x70, + 0x2c, 0xbc, 0x5a, 0x45, 0x55, 0xcb, 0x98, 0x58, 0x65, 0x97, 0xe1, 0x86, 0xd0, 0xca, 0x14, 0x45, + 0x12, 0x0f, 0xec, 0x13, 0xbe, 0x72, 0x24, 0x82, 0x53, 0x21, 0xe0, 0x54, 0x37, 0xb8, 0x93, 0x64, + 0x22, 0x38, 0x11, 0x02, 0x4e, 0x88, 0xe0, 0x4f, 0x43, 0xde, 0x5f, 0x87, 0x44, 0xf4, 0x68, 0x08, + 0x7a, 0x34, 0x04, 0x1d, 0x3e, 0x76, 0x32, 0x04, 0x9d, 0x0c, 0xa0, 0x2b, 0x3d, 0xc7, 0x1e, 0x0f, + 0x41, 0x8f, 0x87, 0xa0, 0xc3, 0xc7, 0x96, 0x43, 0xd0, 0xb2, 0x88, 0x7e, 0x08, 0xc6, 0x02, 0x25, + 0x47, 0x84, 0x8f, 0x84, 0xc0, 0x47, 0x02, 0x7b, 0x73, 0xb0, 0xd4, 0x88, 0xf8, 0xb1, 0x10, 0xfc, + 0x58, 0xd8, 0xf0, 0xe1, 0xde, 0x0f, 0x87, 0xc0, 0x87, 0x43, 0x87, 0x0f, 0xc7, 0x4b, 0x21, 0x78, + 0x49, 0xc4, 0x17, 0x21, 0x27, 0x56, 0x15, 0x11, 0x9b, 0x0e, 0xc1, 0xa6, 0x83, 0x71, 0xf7, 0x95, + 0x94, 0xa8, 0x4c, 0xcf, 0xf4, 0x58, 0x2e, 0xbe, 0x32, 0x72, 0x24, 0x65, 0xf3, 0x24, 0x4c, 0x86, + 0x15, 0x8d, 0x10, 0x8e, 0x93, 0x22, 0x47, 0x7e, 0x71, 0xd2, 0x57, 0x2c, 0x08, 0xae, 0xdd, 0x14, + 0x99, 0x9f, 0x81, 0x89, 0x90, 0xd2, 0x11, 0x42, 0x7c, 0xaf, 0x48, 0x9c, 0x5d, 0x9c, 0xf2, 0x11, + 0xfb, 0xce, 0x0a, 0xa2, 0xb4, 0xfa, 0xd1, 0x04, 0xe4, 0x59, 0x89, 0xda, 0xb2, 0xab, 0xc8, 0x46, + 0x55, 0xf9, 0xe7, 0x7b, 0x2b, 0xac, 0xc5, 0xb0, 0xd2, 0xc6, 0x70, 0x47, 0x10, 0x5a, 0xcf, 0xf4, + 0x14, 0x5a, 0xf7, 0x0d, 0x32, 0x40, 0x94, 0xde, 0x2a, 0x77, 0xe9, 0xad, 0xbb, 0xfa, 0xd1, 0xf6, + 0x92, 0x5d, 0xe5, 0x2e, 0xd9, 0x15, 0x45, 0x13, 0xaa, 0xbe, 0x2e, 0x76, 0xab, 0xaf, 0x93, 0xfd, + 0x78, 0x7a, 0x8b, 0xb0, 0x8b, 0xdd, 0x22, 0x2c, 0x92, 0x29, 0x5c, 0x8b, 0x5d, 0xec, 0xd6, 0x62, + 0x7d, 0x99, 0x7a, 0x4b, 0xb2, 0x8b, 0xdd, 0x92, 0x2c, 0x92, 0x29, 0x5c, 0x99, 0x3d, 0x16, 0xa2, + 0xcc, 0x4e, 0xf5, 0xa3, 0xea, 0x27, 0xd0, 0x36, 0xc3, 0x04, 0xda, 0xdd, 0x7d, 0x1d, 0xeb, 0xab, + 0xd3, 0x1e, 0x0b, 0xd1, 0x69, 0xd1, 0xce, 0xf5, 0x90, 0x6b, 0x9b, 0x61, 0x72, 0x6d, 0x00, 0xe7, + 0x7a, 0xa9, 0xb6, 0xa5, 0xa0, 0x6a, 0x9b, 0xeb, 0xc7, 0x15, 0x2e, 0xde, 0x2e, 0x76, 0x8b, 0xb7, + 0x93, 0xd1, 0x6b, 0x31, 0x4c, 0xc3, 0x3d, 0xd3, 0x53, 0xc3, 0x0d, 0xb4, 0xb8, 0xa3, 0xa4, 0xdc, + 0xd3, 0xbd, 0xa4, 0xdc, 0xbd, 0x83, 0xb0, 0xf7, 0x57, 0x74, 0x4f, 0xf4, 0x50, 0x74, 0x0b, 0x83, + 0x50, 0x7f, 0x22, 0xec, 0x3e, 0x11, 0x76, 0x9f, 0x08, 0xbb, 0x4f, 0x84, 0xdd, 0xcf, 0x86, 0xb0, + 0x2b, 0x26, 0x5f, 0x7a, 0x6d, 0x26, 0x76, 0xf2, 0x04, 0x8c, 0xb0, 0xa1, 0xe5, 0x61, 0x88, 0x6f, + 0x94, 0xa4, 0x21, 0xf2, 0xef, 0x92, 0x14, 0x23, 0xff, 0x2e, 0x4b, 0xf1, 0xa5, 0xf5, 0x37, 0xae, + 0x4d, 0x0f, 0x7d, 0xef, 0xda, 0xf4, 0xd0, 0x0f, 0xae, 0x4d, 0x0f, 0xbd, 0x75, 0x6d, 0x3a, 0xf6, + 0xce, 0xb5, 0xe9, 0xd8, 0x7b, 0xd7, 0xa6, 0x63, 0xef, 0x5f, 0x9b, 0x8e, 0x5d, 0x3d, 0x9c, 0x8e, + 0x7d, 0xf9, 0x70, 0x3a, 0xf6, 0xd5, 0xc3, 0xe9, 0xd8, 0x37, 0x0f, 0xa7, 0x63, 0xdf, 0x39, 0x9c, + 0x8e, 0xbd, 0x71, 0x38, 0x3d, 0xf4, 0xbd, 0xc3, 0xe9, 0xa1, 0xb7, 0x0e, 0xa7, 0x63, 0xef, 0x1c, + 0x4e, 0x0f, 0xbd, 0x77, 0x38, 0x1d, 0x7b, 0xff, 0x70, 0x7a, 0xe8, 0xea, 0x8f, 0xa7, 0x87, 0xfe, + 0x3f, 0x00, 0x00, 0xff, 0xff, 0x76, 0x17, 0x54, 0xda, 0x93, 0x49, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2766,6 +2771,9 @@ return dAtA } func (m *FloatingPoint) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F != nil { @@ -2778,6 +2786,9 @@ } func (m *CustomMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Nullable128S) > 0 { @@ -2835,6 +2846,9 @@ } func (m *AllMaps) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -2989,6 +3003,9 @@ } func (m *AllMapsOrdered) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/unmarshaler/mapsproto2.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/unmarshaler/mapsproto2.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/unmarshaler/mapsproto2.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/combos/unmarshaler/mapsproto2.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -291,302 +291,307 @@ func Mapsproto2Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4713 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x6b, 0x6c, 0x23, 0xd7, - 0x75, 0xd6, 0xf0, 0x21, 0x91, 0x87, 0x14, 0x35, 0xba, 0x92, 0xd7, 0xb4, 0x1c, 0x6b, 0x77, 0xe5, - 0x97, 0xbc, 0xb6, 0xb5, 0xb6, 0xbc, 0xbb, 0x5e, 0x73, 0x63, 0xbb, 0x94, 0xc4, 0xd5, 0xca, 0xd6, - 0x2b, 0x43, 0xc9, 0xaf, 0xc0, 0x98, 0x8e, 0x86, 0x97, 0xd4, 0x78, 0xc9, 0x19, 0x7a, 0x66, 0xb8, - 0xb6, 0x8c, 0xa2, 0xd8, 0xc2, 0x7d, 0x20, 0x28, 0xfa, 0x2e, 0x50, 0xc7, 0x75, 0xdc, 0xba, 0x40, - 0xea, 0x34, 0x7d, 0x25, 0x4d, 0x9b, 0x26, 0xfd, 0x95, 0x3f, 0x69, 0x0d, 0x14, 0x28, 0x92, 0x7f, - 0x41, 0x10, 0x18, 0x5e, 0xc5, 0x40, 0xdd, 0xd6, 0x6d, 0xdc, 0xd6, 0x3f, 0x5c, 0xf8, 0x4f, 0x71, - 0x5f, 0xc3, 0x99, 0xe1, 0x90, 0x43, 0x19, 0xb0, 0x93, 0x1f, 0xfe, 0xb5, 0x9a, 0x33, 0xe7, 0xfb, - 0xee, 0xb9, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0x77, 0xb8, 0xf0, 0x93, 0x07, 0xe0, 0x44, 0xc3, 0xb2, - 0x1a, 0x4d, 0x7c, 0xba, 0x6d, 0x5b, 0xae, 0xb5, 0xd7, 0xa9, 0x9f, 0xae, 0x61, 0x47, 0xb7, 0x8d, - 0xb6, 0x6b, 0xd9, 0x0b, 0x54, 0x86, 0x26, 0x98, 0xc6, 0x82, 0xd0, 0x98, 0xdb, 0x80, 0xc9, 0x8b, - 0x46, 0x13, 0xaf, 0x78, 0x8a, 0x55, 0xec, 0xa2, 0xf3, 0x90, 0xaa, 0x1b, 0x4d, 0x5c, 0x94, 0x4e, - 0x24, 0xe7, 0x73, 0x8b, 0xb7, 0x2c, 0x84, 0x40, 0x0b, 0x41, 0xc4, 0x36, 0x11, 0x2b, 0x14, 0x31, - 0xf7, 0x76, 0x0a, 0xa6, 0x22, 0xde, 0x22, 0x04, 0x29, 0x53, 0x6b, 0x11, 0x46, 0x69, 0x3e, 0xab, - 0xd0, 0xbf, 0x51, 0x11, 0xc6, 0xda, 0x9a, 0x7e, 0x59, 0x6b, 0xe0, 0x62, 0x82, 0x8a, 0xc5, 0x23, - 0x9a, 0x05, 0xa8, 0xe1, 0x36, 0x36, 0x6b, 0xd8, 0xd4, 0x0f, 0x8a, 0xc9, 0x13, 0xc9, 0xf9, 0xac, - 0xe2, 0x93, 0xa0, 0x3b, 0x61, 0xb2, 0xdd, 0xd9, 0x6b, 0x1a, 0xba, 0xea, 0x53, 0x83, 0x13, 0xc9, - 0xf9, 0xb4, 0x22, 0xb3, 0x17, 0x2b, 0x5d, 0xe5, 0xdb, 0x61, 0xe2, 0x39, 0xac, 0x5d, 0xf6, 0xab, - 0xe6, 0xa8, 0x6a, 0x81, 0x88, 0x7d, 0x8a, 0xcb, 0x90, 0x6f, 0x61, 0xc7, 0xd1, 0x1a, 0x58, 0x75, - 0x0f, 0xda, 0xb8, 0x98, 0xa2, 0xb3, 0x3f, 0xd1, 0x33, 0xfb, 0xf0, 0xcc, 0x73, 0x1c, 0xb5, 0x73, - 0xd0, 0xc6, 0xa8, 0x0c, 0x59, 0x6c, 0x76, 0x5a, 0x8c, 0x21, 0xdd, 0xc7, 0x7f, 0x15, 0xb3, 0xd3, - 0x0a, 0xb3, 0x64, 0x08, 0x8c, 0x53, 0x8c, 0x39, 0xd8, 0xbe, 0x62, 0xe8, 0xb8, 0x38, 0x4a, 0x09, - 0x6e, 0xef, 0x21, 0xa8, 0xb2, 0xf7, 0x61, 0x0e, 0x81, 0x43, 0xcb, 0x90, 0xc5, 0xcf, 0xbb, 0xd8, - 0x74, 0x0c, 0xcb, 0x2c, 0x8e, 0x51, 0x92, 0x5b, 0x23, 0x56, 0x11, 0x37, 0x6b, 0x61, 0x8a, 0x2e, - 0x0e, 0x9d, 0x83, 0x31, 0xab, 0xed, 0x1a, 0x96, 0xe9, 0x14, 0x33, 0x27, 0xa4, 0xf9, 0xdc, 0xe2, - 0x67, 0x22, 0x03, 0x61, 0x8b, 0xe9, 0x28, 0x42, 0x19, 0xad, 0x81, 0xec, 0x58, 0x1d, 0x5b, 0xc7, - 0xaa, 0x6e, 0xd5, 0xb0, 0x6a, 0x98, 0x75, 0xab, 0x98, 0xa5, 0x04, 0xc7, 0x7b, 0x27, 0x42, 0x15, - 0x97, 0xad, 0x1a, 0x5e, 0x33, 0xeb, 0x96, 0x52, 0x70, 0x02, 0xcf, 0xe8, 0x18, 0x8c, 0x3a, 0x07, - 0xa6, 0xab, 0x3d, 0x5f, 0xcc, 0xd3, 0x08, 0xe1, 0x4f, 0x73, 0xdf, 0x1e, 0x85, 0x89, 0x61, 0x42, - 0xec, 0x02, 0xa4, 0xeb, 0x64, 0x96, 0xc5, 0xc4, 0x51, 0x7c, 0xc0, 0x30, 0x41, 0x27, 0x8e, 0x7e, - 0x44, 0x27, 0x96, 0x21, 0x67, 0x62, 0xc7, 0xc5, 0x35, 0x16, 0x11, 0xc9, 0x21, 0x63, 0x0a, 0x18, - 0xa8, 0x37, 0xa4, 0x52, 0x1f, 0x29, 0xa4, 0x9e, 0x80, 0x09, 0xcf, 0x24, 0xd5, 0xd6, 0xcc, 0x86, - 0x88, 0xcd, 0xd3, 0x71, 0x96, 0x2c, 0x54, 0x04, 0x4e, 0x21, 0x30, 0xa5, 0x80, 0x03, 0xcf, 0x68, - 0x05, 0xc0, 0x32, 0xb1, 0x55, 0x57, 0x6b, 0x58, 0x6f, 0x16, 0x33, 0x7d, 0xbc, 0xb4, 0x45, 0x54, - 0x7a, 0xbc, 0x64, 0x31, 0xa9, 0xde, 0x44, 0x0f, 0x74, 0x43, 0x6d, 0xac, 0x4f, 0xa4, 0x6c, 0xb0, - 0x4d, 0xd6, 0x13, 0x6d, 0xbb, 0x50, 0xb0, 0x31, 0x89, 0x7b, 0x5c, 0xe3, 0x33, 0xcb, 0x52, 0x23, - 0x16, 0x62, 0x67, 0xa6, 0x70, 0x18, 0x9b, 0xd8, 0xb8, 0xed, 0x7f, 0x44, 0x37, 0x83, 0x27, 0x50, - 0x69, 0x58, 0x01, 0xcd, 0x42, 0x79, 0x21, 0xdc, 0xd4, 0x5a, 0x78, 0xe6, 0x05, 0x28, 0x04, 0xdd, - 0x83, 0xa6, 0x21, 0xed, 0xb8, 0x9a, 0xed, 0xd2, 0x28, 0x4c, 0x2b, 0xec, 0x01, 0xc9, 0x90, 0xc4, - 0x66, 0x8d, 0x66, 0xb9, 0xb4, 0x42, 0xfe, 0x44, 0x3f, 0xd7, 0x9d, 0x70, 0x92, 0x4e, 0xf8, 0xb6, - 0xde, 0x15, 0x0d, 0x30, 0x87, 0xe7, 0x3d, 0x73, 0x3f, 0x8c, 0x07, 0x26, 0x30, 0xec, 0xd0, 0x73, - 0xbf, 0x00, 0xd7, 0x45, 0x52, 0xa3, 0x27, 0x60, 0xba, 0x63, 0x1a, 0xa6, 0x8b, 0xed, 0xb6, 0x8d, - 0x49, 0xc4, 0xb2, 0xa1, 0x8a, 0xff, 0x3a, 0xd6, 0x27, 0xe6, 0x76, 0xfd, 0xda, 0x8c, 0x45, 0x99, - 0xea, 0xf4, 0x0a, 0x4f, 0x65, 0x33, 0xef, 0x8c, 0xc9, 0x57, 0xaf, 0x5e, 0xbd, 0x9a, 0x98, 0x7b, - 0x69, 0x14, 0xa6, 0xa3, 0xf6, 0x4c, 0xe4, 0xf6, 0x3d, 0x06, 0xa3, 0x66, 0xa7, 0xb5, 0x87, 0x6d, - 0xea, 0xa4, 0xb4, 0xc2, 0x9f, 0x50, 0x19, 0xd2, 0x4d, 0x6d, 0x0f, 0x37, 0x8b, 0xa9, 0x13, 0xd2, - 0x7c, 0x61, 0xf1, 0xce, 0xa1, 0x76, 0xe5, 0xc2, 0x3a, 0x81, 0x28, 0x0c, 0x89, 0x1e, 0x82, 0x14, - 0x4f, 0xd1, 0x84, 0xe1, 0xd4, 0x70, 0x0c, 0x64, 0x2f, 0x29, 0x14, 0x87, 0x6e, 0x84, 0x2c, 0xf9, - 0x97, 0xc5, 0xc6, 0x28, 0xb5, 0x39, 0x43, 0x04, 0x24, 0x2e, 0xd0, 0x0c, 0x64, 0xe8, 0x36, 0xa9, - 0x61, 0x51, 0xda, 0xbc, 0x67, 0x12, 0x58, 0x35, 0x5c, 0xd7, 0x3a, 0x4d, 0x57, 0xbd, 0xa2, 0x35, - 0x3b, 0x98, 0x06, 0x7c, 0x56, 0xc9, 0x73, 0xe1, 0x63, 0x44, 0x86, 0x8e, 0x43, 0x8e, 0xed, 0x2a, - 0xc3, 0xac, 0xe1, 0xe7, 0x69, 0xf6, 0x4c, 0x2b, 0x6c, 0xa3, 0xad, 0x11, 0x09, 0x19, 0xfe, 0x19, - 0xc7, 0x32, 0x45, 0x68, 0xd2, 0x21, 0x88, 0x80, 0x0e, 0x7f, 0x7f, 0x38, 0x71, 0xdf, 0x14, 0x3d, - 0xbd, 0x70, 0x4c, 0xcd, 0x7d, 0x33, 0x01, 0x29, 0x9a, 0x2f, 0x26, 0x20, 0xb7, 0xf3, 0xe4, 0x76, - 0x45, 0x5d, 0xd9, 0xda, 0x5d, 0x5a, 0xaf, 0xc8, 0x12, 0x2a, 0x00, 0x50, 0xc1, 0xc5, 0xf5, 0xad, - 0xf2, 0x8e, 0x9c, 0xf0, 0x9e, 0xd7, 0x36, 0x77, 0xce, 0x9d, 0x91, 0x93, 0x1e, 0x60, 0x97, 0x09, - 0x52, 0x7e, 0x85, 0xfb, 0x16, 0xe5, 0x34, 0x92, 0x21, 0xcf, 0x08, 0xd6, 0x9e, 0xa8, 0xac, 0x9c, - 0x3b, 0x23, 0x8f, 0x06, 0x25, 0xf7, 0x2d, 0xca, 0x63, 0x68, 0x1c, 0xb2, 0x54, 0xb2, 0xb4, 0xb5, - 0xb5, 0x2e, 0x67, 0x3c, 0xce, 0xea, 0x8e, 0xb2, 0xb6, 0xb9, 0x2a, 0x67, 0x3d, 0xce, 0x55, 0x65, - 0x6b, 0x77, 0x5b, 0x06, 0x8f, 0x61, 0xa3, 0x52, 0xad, 0x96, 0x57, 0x2b, 0x72, 0xce, 0xd3, 0x58, - 0x7a, 0x72, 0xa7, 0x52, 0x95, 0xf3, 0x01, 0xb3, 0xee, 0x5b, 0x94, 0xc7, 0xbd, 0x21, 0x2a, 0x9b, - 0xbb, 0x1b, 0x72, 0x01, 0x4d, 0xc2, 0x38, 0x1b, 0x42, 0x18, 0x31, 0x11, 0x12, 0x9d, 0x3b, 0x23, - 0xcb, 0x5d, 0x43, 0x18, 0xcb, 0x64, 0x40, 0x70, 0xee, 0x8c, 0x8c, 0xe6, 0x96, 0x21, 0x4d, 0xa3, - 0x0b, 0x21, 0x28, 0xac, 0x97, 0x97, 0x2a, 0xeb, 0xea, 0xd6, 0xf6, 0xce, 0xda, 0xd6, 0x66, 0x79, - 0x5d, 0x96, 0xba, 0x32, 0xa5, 0xf2, 0xb9, 0xdd, 0x35, 0xa5, 0xb2, 0x22, 0x27, 0xfc, 0xb2, 0xed, - 0x4a, 0x79, 0xa7, 0xb2, 0x22, 0x27, 0xe7, 0x74, 0x98, 0x8e, 0xca, 0x93, 0x91, 0x3b, 0xc3, 0xb7, - 0xc4, 0x89, 0x3e, 0x4b, 0x4c, 0xb9, 0x7a, 0x96, 0xf8, 0xc7, 0x09, 0x98, 0x8a, 0xa8, 0x15, 0x91, - 0x83, 0x3c, 0x0c, 0x69, 0x16, 0xa2, 0xac, 0x7a, 0xde, 0x11, 0x59, 0x74, 0x68, 0xc0, 0xf6, 0x54, - 0x50, 0x8a, 0xf3, 0x77, 0x10, 0xc9, 0x3e, 0x1d, 0x04, 0xa1, 0xe8, 0xc9, 0xe9, 0x4f, 0xf7, 0xe4, - 0x74, 0x56, 0xf6, 0xce, 0x0d, 0x53, 0xf6, 0xa8, 0xec, 0x68, 0xb9, 0x3d, 0x1d, 0x91, 0xdb, 0x2f, - 0xc0, 0x64, 0x0f, 0xd1, 0xd0, 0x39, 0xf6, 0x45, 0x09, 0x8a, 0xfd, 0x9c, 0x13, 0x93, 0xe9, 0x12, - 0x81, 0x4c, 0x77, 0x21, 0xec, 0xc1, 0x93, 0xfd, 0x17, 0xa1, 0x67, 0xad, 0x5f, 0x97, 0xe0, 0x58, - 0x74, 0xa7, 0x18, 0x69, 0xc3, 0x43, 0x30, 0xda, 0xc2, 0xee, 0xbe, 0x25, 0xba, 0xa5, 0xdb, 0x22, - 0x6a, 0x30, 0x79, 0x1d, 0x5e, 0x6c, 0x8e, 0xf2, 0x17, 0xf1, 0x64, 0xbf, 0x76, 0x8f, 0x59, 0xd3, - 0x63, 0xe9, 0x17, 0x12, 0x70, 0x5d, 0x24, 0x79, 0xa4, 0xa1, 0x37, 0x01, 0x18, 0x66, 0xbb, 0xe3, - 0xb2, 0x8e, 0x88, 0x25, 0xd8, 0x2c, 0x95, 0xd0, 0xe4, 0x45, 0x92, 0x67, 0xc7, 0xf5, 0xde, 0x27, - 0xe9, 0x7b, 0x60, 0x22, 0xaa, 0x70, 0xbe, 0x6b, 0x68, 0x8a, 0x1a, 0x3a, 0xdb, 0x67, 0xa6, 0x3d, - 0x81, 0x79, 0x0f, 0xc8, 0x7a, 0xd3, 0xc0, 0xa6, 0xab, 0x3a, 0xae, 0x8d, 0xb5, 0x96, 0x61, 0x36, - 0x68, 0x05, 0xc9, 0x94, 0xd2, 0x75, 0xad, 0xe9, 0x60, 0x65, 0x82, 0xbd, 0xae, 0x8a, 0xb7, 0x04, - 0x41, 0x03, 0xc8, 0xf6, 0x21, 0x46, 0x03, 0x08, 0xf6, 0xda, 0x43, 0xcc, 0x7d, 0x23, 0x03, 0x39, - 0x5f, 0x5f, 0x8d, 0x4e, 0x42, 0xfe, 0x19, 0xed, 0x8a, 0xa6, 0x8a, 0xb3, 0x12, 0xf3, 0x44, 0x8e, - 0xc8, 0xb6, 0xf9, 0x79, 0xe9, 0x1e, 0x98, 0xa6, 0x2a, 0x56, 0xc7, 0xc5, 0xb6, 0xaa, 0x37, 0x35, - 0xc7, 0xa1, 0x4e, 0xcb, 0x50, 0x55, 0x44, 0xde, 0x6d, 0x91, 0x57, 0xcb, 0xe2, 0x0d, 0x3a, 0x0b, - 0x53, 0x14, 0xd1, 0xea, 0x34, 0x5d, 0xa3, 0xdd, 0xc4, 0x2a, 0x39, 0xbd, 0x39, 0xb4, 0x92, 0x78, - 0x96, 0x4d, 0x12, 0x8d, 0x0d, 0xae, 0x40, 0x2c, 0x72, 0xd0, 0x0a, 0xdc, 0x44, 0x61, 0x0d, 0x6c, - 0x62, 0x5b, 0x73, 0xb1, 0x8a, 0x9f, 0xed, 0x68, 0x4d, 0x47, 0xd5, 0xcc, 0x9a, 0xba, 0xaf, 0x39, - 0xfb, 0xc5, 0x69, 0x42, 0xb0, 0x94, 0x28, 0x4a, 0xca, 0x0d, 0x44, 0x71, 0x95, 0xeb, 0x55, 0xa8, - 0x5a, 0xd9, 0xac, 0x5d, 0xd2, 0x9c, 0x7d, 0x54, 0x82, 0x63, 0x94, 0xc5, 0x71, 0x6d, 0xc3, 0x6c, - 0xa8, 0xfa, 0x3e, 0xd6, 0x2f, 0xab, 0x1d, 0xb7, 0x7e, 0xbe, 0x78, 0xa3, 0x7f, 0x7c, 0x6a, 0x61, - 0x95, 0xea, 0x2c, 0x13, 0x95, 0x5d, 0xb7, 0x7e, 0x1e, 0x55, 0x21, 0x4f, 0x16, 0xa3, 0x65, 0xbc, - 0x80, 0xd5, 0xba, 0x65, 0xd3, 0xd2, 0x58, 0x88, 0x48, 0x4d, 0x3e, 0x0f, 0x2e, 0x6c, 0x71, 0xc0, - 0x86, 0x55, 0xc3, 0xa5, 0x74, 0x75, 0xbb, 0x52, 0x59, 0x51, 0x72, 0x82, 0xe5, 0xa2, 0x65, 0x93, - 0x80, 0x6a, 0x58, 0x9e, 0x83, 0x73, 0x2c, 0xa0, 0x1a, 0x96, 0x70, 0xef, 0x59, 0x98, 0xd2, 0x75, - 0x36, 0x67, 0x43, 0x57, 0xf9, 0x19, 0xcb, 0x29, 0xca, 0x01, 0x67, 0xe9, 0xfa, 0x2a, 0x53, 0xe0, - 0x31, 0xee, 0xa0, 0x07, 0xe0, 0xba, 0xae, 0xb3, 0xfc, 0xc0, 0xc9, 0x9e, 0x59, 0x86, 0xa1, 0x67, - 0x61, 0xaa, 0x7d, 0xd0, 0x0b, 0x44, 0x81, 0x11, 0xdb, 0x07, 0x61, 0xd8, 0xfd, 0x30, 0xdd, 0xde, - 0x6f, 0xf7, 0xe2, 0x4e, 0xf9, 0x71, 0xa8, 0xbd, 0xdf, 0x0e, 0x03, 0x6f, 0xa5, 0x07, 0x6e, 0x1b, - 0xeb, 0x9a, 0x8b, 0x6b, 0xc5, 0xeb, 0xfd, 0xea, 0xbe, 0x17, 0xe8, 0x34, 0xc8, 0xba, 0xae, 0x62, - 0x53, 0xdb, 0x6b, 0x62, 0x55, 0xb3, 0xb1, 0xa9, 0x39, 0xc5, 0xe3, 0x7e, 0xe5, 0x82, 0xae, 0x57, - 0xe8, 0xdb, 0x32, 0x7d, 0x89, 0x4e, 0xc1, 0xa4, 0xb5, 0xf7, 0x8c, 0xce, 0x42, 0x52, 0x6d, 0xdb, - 0xb8, 0x6e, 0x3c, 0x5f, 0xbc, 0x85, 0xfa, 0x77, 0x82, 0xbc, 0xa0, 0x01, 0xb9, 0x4d, 0xc5, 0xe8, - 0x0e, 0x90, 0x75, 0x67, 0x5f, 0xb3, 0xdb, 0x34, 0x27, 0x3b, 0x6d, 0x4d, 0xc7, 0xc5, 0x5b, 0x99, - 0x2a, 0x93, 0x6f, 0x0a, 0x31, 0xd9, 0x12, 0xce, 0x73, 0x46, 0xdd, 0x15, 0x8c, 0xb7, 0xb3, 0x2d, - 0x41, 0x65, 0x9c, 0x6d, 0x1e, 0x64, 0xe2, 0x8a, 0xc0, 0xc0, 0xf3, 0x54, 0xad, 0xd0, 0xde, 0x6f, - 0xfb, 0xc7, 0xbd, 0x19, 0xc6, 0x89, 0x66, 0x77, 0xd0, 0x3b, 0x58, 0x43, 0xd6, 0xde, 0xf7, 0x8d, - 0xf8, 0xb1, 0xf5, 0xc6, 0x73, 0x25, 0xc8, 0xfb, 0xe3, 0x13, 0x65, 0x81, 0x45, 0xa8, 0x2c, 0x91, - 0x66, 0x65, 0x79, 0x6b, 0x85, 0xb4, 0x19, 0x4f, 0x55, 0xe4, 0x04, 0x69, 0x77, 0xd6, 0xd7, 0x76, - 0x2a, 0xaa, 0xb2, 0xbb, 0xb9, 0xb3, 0xb6, 0x51, 0x91, 0x93, 0xfe, 0xbe, 0xfa, 0xbb, 0x09, 0x28, - 0x04, 0x8f, 0x48, 0xe8, 0xb3, 0x70, 0xbd, 0xb8, 0xcf, 0x70, 0xb0, 0xab, 0x3e, 0x67, 0xd8, 0x74, - 0xcb, 0xb4, 0x34, 0x56, 0xbe, 0xbc, 0x45, 0x9b, 0xe6, 0x5a, 0x55, 0xec, 0x3e, 0x6e, 0xd8, 0x64, - 0x43, 0xb4, 0x34, 0x17, 0xad, 0xc3, 0x71, 0xd3, 0x52, 0x1d, 0x57, 0x33, 0x6b, 0x9a, 0x5d, 0x53, - 0xbb, 0x37, 0x49, 0xaa, 0xa6, 0xeb, 0xd8, 0x71, 0x2c, 0x56, 0xaa, 0x3c, 0x96, 0xcf, 0x98, 0x56, - 0x95, 0x2b, 0x77, 0x73, 0x78, 0x99, 0xab, 0x86, 0x02, 0x2c, 0xd9, 0x2f, 0xc0, 0x6e, 0x84, 0x6c, - 0x4b, 0x6b, 0xab, 0xd8, 0x74, 0xed, 0x03, 0xda, 0x18, 0x67, 0x94, 0x4c, 0x4b, 0x6b, 0x57, 0xc8, - 0xf3, 0x27, 0x73, 0x3e, 0xf9, 0x51, 0x12, 0xf2, 0xfe, 0xe6, 0x98, 0x9c, 0x35, 0x74, 0x5a, 0x47, - 0x24, 0x9a, 0x69, 0x6e, 0x1e, 0xd8, 0x4a, 0x2f, 0x2c, 0x93, 0x02, 0x53, 0x1a, 0x65, 0x2d, 0xab, - 0xc2, 0x90, 0xa4, 0xb8, 0x93, 0xdc, 0x82, 0x59, 0x8b, 0x90, 0x51, 0xf8, 0x13, 0x5a, 0x85, 0xd1, - 0x67, 0x1c, 0xca, 0x3d, 0x4a, 0xb9, 0x6f, 0x19, 0xcc, 0xfd, 0x48, 0x95, 0x92, 0x67, 0x1f, 0xa9, - 0xaa, 0x9b, 0x5b, 0xca, 0x46, 0x79, 0x5d, 0xe1, 0x70, 0x74, 0x03, 0xa4, 0x9a, 0xda, 0x0b, 0x07, - 0xc1, 0x52, 0x44, 0x45, 0xc3, 0x3a, 0xfe, 0x06, 0x48, 0x3d, 0x87, 0xb5, 0xcb, 0xc1, 0x02, 0x40, - 0x45, 0x1f, 0x63, 0xe8, 0x9f, 0x86, 0x34, 0xf5, 0x17, 0x02, 0xe0, 0x1e, 0x93, 0x47, 0x50, 0x06, - 0x52, 0xcb, 0x5b, 0x0a, 0x09, 0x7f, 0x19, 0xf2, 0x4c, 0xaa, 0x6e, 0xaf, 0x55, 0x96, 0x2b, 0x72, - 0x62, 0xee, 0x2c, 0x8c, 0x32, 0x27, 0x90, 0xad, 0xe1, 0xb9, 0x41, 0x1e, 0xe1, 0x8f, 0x9c, 0x43, - 0x12, 0x6f, 0x77, 0x37, 0x96, 0x2a, 0x8a, 0x9c, 0xf0, 0x2f, 0xaf, 0x03, 0x79, 0x7f, 0x5f, 0xfc, - 0xc9, 0xc4, 0xd4, 0x3f, 0x48, 0x90, 0xf3, 0xf5, 0xb9, 0xa4, 0x41, 0xd1, 0x9a, 0x4d, 0xeb, 0x39, - 0x55, 0x6b, 0x1a, 0x9a, 0xc3, 0x83, 0x02, 0xa8, 0xa8, 0x4c, 0x24, 0xc3, 0x2e, 0xda, 0x27, 0x62, - 0xfc, 0xab, 0x12, 0xc8, 0xe1, 0x16, 0x33, 0x64, 0xa0, 0xf4, 0x53, 0x35, 0xf0, 0x15, 0x09, 0x0a, - 0xc1, 0xbe, 0x32, 0x64, 0xde, 0xc9, 0x9f, 0xaa, 0x79, 0x6f, 0x25, 0x60, 0x3c, 0xd0, 0x4d, 0x0e, - 0x6b, 0xdd, 0xb3, 0x30, 0x69, 0xd4, 0x70, 0xab, 0x6d, 0xb9, 0xd8, 0xd4, 0x0f, 0xd4, 0x26, 0xbe, - 0x82, 0x9b, 0xc5, 0x39, 0x9a, 0x28, 0x4e, 0x0f, 0xee, 0x57, 0x17, 0xd6, 0xba, 0xb8, 0x75, 0x02, - 0x2b, 0x4d, 0xad, 0xad, 0x54, 0x36, 0xb6, 0xb7, 0x76, 0x2a, 0x9b, 0xcb, 0x4f, 0xaa, 0xbb, 0x9b, - 0x8f, 0x6e, 0x6e, 0x3d, 0xbe, 0xa9, 0xc8, 0x46, 0x48, 0xed, 0x63, 0xdc, 0xea, 0xdb, 0x20, 0x87, - 0x8d, 0x42, 0xd7, 0x43, 0x94, 0x59, 0xf2, 0x08, 0x9a, 0x82, 0x89, 0xcd, 0x2d, 0xb5, 0xba, 0xb6, - 0x52, 0x51, 0x2b, 0x17, 0x2f, 0x56, 0x96, 0x77, 0xaa, 0xec, 0x06, 0xc2, 0xd3, 0xde, 0x09, 0x6e, - 0xea, 0x97, 0x93, 0x30, 0x15, 0x61, 0x09, 0x2a, 0xf3, 0xb3, 0x03, 0x3b, 0xce, 0xdc, 0x3d, 0x8c, - 0xf5, 0x0b, 0xa4, 0xe4, 0x6f, 0x6b, 0xb6, 0xcb, 0x8f, 0x1a, 0x77, 0x00, 0xf1, 0x92, 0xe9, 0x1a, - 0x75, 0x03, 0xdb, 0xfc, 0xc2, 0x86, 0x1d, 0x28, 0x26, 0xba, 0x72, 0x76, 0x67, 0x73, 0x17, 0xa0, - 0xb6, 0xe5, 0x18, 0xae, 0x71, 0x05, 0xab, 0x86, 0x29, 0x6e, 0x77, 0xc8, 0x01, 0x23, 0xa5, 0xc8, - 0xe2, 0xcd, 0x9a, 0xe9, 0x7a, 0xda, 0x26, 0x6e, 0x68, 0x21, 0x6d, 0x92, 0xc0, 0x93, 0x8a, 0x2c, - 0xde, 0x78, 0xda, 0x27, 0x21, 0x5f, 0xb3, 0x3a, 0xa4, 0xeb, 0x62, 0x7a, 0xa4, 0x5e, 0x48, 0x4a, - 0x8e, 0xc9, 0x3c, 0x15, 0xde, 0x4f, 0x77, 0xaf, 0x95, 0xf2, 0x4a, 0x8e, 0xc9, 0x98, 0xca, 0xed, - 0x30, 0xa1, 0x35, 0x1a, 0x36, 0x21, 0x17, 0x44, 0xec, 0x84, 0x50, 0xf0, 0xc4, 0x54, 0x71, 0xe6, - 0x11, 0xc8, 0x08, 0x3f, 0x90, 0x92, 0x4c, 0x3c, 0xa1, 0xb6, 0xd9, 0xb1, 0x37, 0x31, 0x9f, 0x55, - 0x32, 0xa6, 0x78, 0x79, 0x12, 0xf2, 0x86, 0xa3, 0x76, 0x6f, 0xc9, 0x13, 0x27, 0x12, 0xf3, 0x19, - 0x25, 0x67, 0x38, 0xde, 0x0d, 0xe3, 0xdc, 0xeb, 0x09, 0x28, 0x04, 0x6f, 0xf9, 0xd1, 0x0a, 0x64, - 0x9a, 0x96, 0xae, 0xd1, 0xd0, 0x62, 0x9f, 0x98, 0xe6, 0x63, 0x3e, 0x0c, 0x2c, 0xac, 0x73, 0x7d, - 0xc5, 0x43, 0xce, 0xfc, 0x8b, 0x04, 0x19, 0x21, 0x46, 0xc7, 0x20, 0xd5, 0xd6, 0xdc, 0x7d, 0x4a, - 0x97, 0x5e, 0x4a, 0xc8, 0x92, 0x42, 0x9f, 0x89, 0xdc, 0x69, 0x6b, 0x26, 0x0d, 0x01, 0x2e, 0x27, - 0xcf, 0x64, 0x5d, 0x9b, 0x58, 0xab, 0xd1, 0xe3, 0x87, 0xd5, 0x6a, 0x61, 0xd3, 0x75, 0xc4, 0xba, - 0x72, 0xf9, 0x32, 0x17, 0xa3, 0x3b, 0x61, 0xd2, 0xb5, 0x35, 0xa3, 0x19, 0xd0, 0x4d, 0x51, 0x5d, - 0x59, 0xbc, 0xf0, 0x94, 0x4b, 0x70, 0x83, 0xe0, 0xad, 0x61, 0x57, 0xd3, 0xf7, 0x71, 0xad, 0x0b, - 0x1a, 0xa5, 0xd7, 0x0c, 0xd7, 0x73, 0x85, 0x15, 0xfe, 0x5e, 0x60, 0xe7, 0xbe, 0x2f, 0xc1, 0xa4, - 0x38, 0x30, 0xd5, 0x3c, 0x67, 0x6d, 0x00, 0x68, 0xa6, 0x69, 0xb9, 0x7e, 0x77, 0xf5, 0x86, 0x72, - 0x0f, 0x6e, 0xa1, 0xec, 0x81, 0x14, 0x1f, 0xc1, 0x4c, 0x0b, 0xa0, 0xfb, 0xa6, 0xaf, 0xdb, 0x8e, - 0x43, 0x8e, 0x7f, 0xc2, 0xa1, 0xdf, 0x01, 0xd9, 0x11, 0x1b, 0x98, 0x88, 0x9c, 0xac, 0xd0, 0x34, - 0xa4, 0xf7, 0x70, 0xc3, 0x30, 0xf9, 0xc5, 0x2c, 0x7b, 0x10, 0x17, 0x21, 0x29, 0xef, 0x22, 0x64, - 0xe9, 0xf3, 0x30, 0xa5, 0x5b, 0xad, 0xb0, 0xb9, 0x4b, 0x72, 0xe8, 0x98, 0xef, 0x5c, 0x92, 0x9e, - 0x82, 0x6e, 0x8b, 0xf9, 0x81, 0x24, 0xfd, 0x49, 0x22, 0xb9, 0xba, 0xbd, 0xf4, 0xd5, 0xc4, 0xcc, - 0x2a, 0x83, 0x6e, 0x8b, 0x99, 0x2a, 0xb8, 0xde, 0xc4, 0x3a, 0xb1, 0x1e, 0xbe, 0x3c, 0x0f, 0x77, - 0x37, 0x0c, 0x77, 0xbf, 0xb3, 0xb7, 0xa0, 0x5b, 0xad, 0xd3, 0x0d, 0xab, 0x61, 0x75, 0x3f, 0x7d, - 0x92, 0x27, 0xfa, 0x40, 0xff, 0xe2, 0x9f, 0x3f, 0xb3, 0x9e, 0x74, 0x26, 0xf6, 0x5b, 0x69, 0x69, - 0x13, 0xa6, 0xb8, 0xb2, 0x4a, 0xbf, 0xbf, 0xb0, 0x53, 0x04, 0x1a, 0x78, 0x87, 0x55, 0xfc, 0xfa, - 0xdb, 0xb4, 0x5c, 0x2b, 0x93, 0x1c, 0x4a, 0xde, 0xb1, 0x83, 0x46, 0x49, 0x81, 0xeb, 0x02, 0x7c, - 0x6c, 0x6b, 0x62, 0x3b, 0x86, 0xf1, 0xbb, 0x9c, 0x71, 0xca, 0xc7, 0x58, 0xe5, 0xd0, 0xd2, 0x32, - 0x8c, 0x1f, 0x85, 0xeb, 0x1f, 0x39, 0x57, 0x1e, 0xfb, 0x49, 0x56, 0x61, 0x82, 0x92, 0xe8, 0x1d, - 0xc7, 0xb5, 0x5a, 0x34, 0xef, 0x0d, 0xa6, 0xf9, 0xa7, 0xb7, 0xd9, 0x5e, 0x29, 0x10, 0xd8, 0xb2, - 0x87, 0x2a, 0x95, 0x80, 0x7e, 0x72, 0xaa, 0x61, 0xbd, 0x19, 0xc3, 0xf0, 0x06, 0x37, 0xc4, 0xd3, - 0x2f, 0x3d, 0x06, 0xd3, 0xe4, 0x6f, 0x9a, 0x96, 0xfc, 0x96, 0xc4, 0x5f, 0x78, 0x15, 0xbf, 0xff, - 0x22, 0xdb, 0x8e, 0x53, 0x1e, 0x81, 0xcf, 0x26, 0xdf, 0x2a, 0x36, 0xb0, 0xeb, 0x62, 0xdb, 0x51, - 0xb5, 0x66, 0x94, 0x79, 0xbe, 0x1b, 0x83, 0xe2, 0x17, 0xdf, 0x0d, 0xae, 0xe2, 0x2a, 0x43, 0x96, - 0x9b, 0xcd, 0xd2, 0x2e, 0x5c, 0x1f, 0x11, 0x15, 0x43, 0x70, 0xbe, 0xcc, 0x39, 0xa7, 0x7b, 0x22, - 0x83, 0xd0, 0x6e, 0x83, 0x90, 0x7b, 0x6b, 0x39, 0x04, 0xe7, 0x1f, 0x72, 0x4e, 0xc4, 0xb1, 0x62, - 0x49, 0x09, 0xe3, 0x23, 0x30, 0x79, 0x05, 0xdb, 0x7b, 0x96, 0xc3, 0x6f, 0x69, 0x86, 0xa0, 0x7b, - 0x85, 0xd3, 0x4d, 0x70, 0x20, 0xbd, 0xb6, 0x21, 0x5c, 0x0f, 0x40, 0xa6, 0xae, 0xe9, 0x78, 0x08, - 0x8a, 0x2f, 0x71, 0x8a, 0x31, 0xa2, 0x4f, 0xa0, 0x65, 0xc8, 0x37, 0x2c, 0x5e, 0x99, 0xe2, 0xe1, - 0xaf, 0x72, 0x78, 0x4e, 0x60, 0x38, 0x45, 0xdb, 0x6a, 0x77, 0x9a, 0xa4, 0x6c, 0xc5, 0x53, 0xfc, - 0x91, 0xa0, 0x10, 0x18, 0x4e, 0x71, 0x04, 0xb7, 0xfe, 0xb1, 0xa0, 0x70, 0x7c, 0xfe, 0x7c, 0x18, - 0x72, 0x96, 0xd9, 0x3c, 0xb0, 0xcc, 0x61, 0x8c, 0x78, 0x8d, 0x33, 0x00, 0x87, 0x10, 0x82, 0x0b, - 0x90, 0x1d, 0x76, 0x21, 0xbe, 0xfc, 0xae, 0xd8, 0x1e, 0x62, 0x05, 0x56, 0x61, 0x42, 0x24, 0x28, - 0xc3, 0x32, 0x87, 0xa0, 0xf8, 0x53, 0x4e, 0x51, 0xf0, 0xc1, 0xf8, 0x34, 0x5c, 0xec, 0xb8, 0x0d, - 0x3c, 0x0c, 0xc9, 0xeb, 0x62, 0x1a, 0x1c, 0xc2, 0x5d, 0xb9, 0x87, 0x4d, 0x7d, 0x7f, 0x38, 0x86, - 0xaf, 0x08, 0x57, 0x0a, 0x0c, 0xa1, 0x58, 0x86, 0xf1, 0x96, 0x66, 0x3b, 0xfb, 0x5a, 0x73, 0xa8, - 0xe5, 0xf8, 0x33, 0xce, 0x91, 0xf7, 0x40, 0xdc, 0x23, 0x1d, 0xf3, 0x28, 0x34, 0x5f, 0x15, 0x1e, - 0xf1, 0xc1, 0xf8, 0xd6, 0x73, 0x5c, 0x7a, 0xa5, 0x75, 0x14, 0xb6, 0x3f, 0x17, 0x5b, 0x8f, 0x61, - 0x37, 0xfc, 0x8c, 0x17, 0x20, 0xeb, 0x18, 0x2f, 0x0c, 0x45, 0xf3, 0x17, 0x62, 0xa5, 0x29, 0x80, - 0x80, 0x9f, 0x84, 0x1b, 0x22, 0xcb, 0xc4, 0x10, 0x64, 0x7f, 0xc9, 0xc9, 0x8e, 0x45, 0x94, 0x0a, - 0x9e, 0x12, 0x8e, 0x4a, 0xf9, 0x57, 0x22, 0x25, 0xe0, 0x10, 0xd7, 0x36, 0x39, 0x2b, 0x38, 0x5a, - 0xfd, 0x68, 0x5e, 0xfb, 0x6b, 0xe1, 0x35, 0x86, 0x0d, 0x78, 0x6d, 0x07, 0x8e, 0x71, 0xc6, 0xa3, - 0xad, 0xeb, 0xd7, 0x44, 0x62, 0x65, 0xe8, 0xdd, 0xe0, 0xea, 0x7e, 0x1e, 0x66, 0x3c, 0x77, 0x8a, - 0xa6, 0xd4, 0x51, 0x5b, 0x5a, 0x7b, 0x08, 0xe6, 0xaf, 0x73, 0x66, 0x91, 0xf1, 0xbd, 0xae, 0xd6, - 0xd9, 0xd0, 0xda, 0x84, 0xfc, 0x09, 0x28, 0x0a, 0xf2, 0x8e, 0x69, 0x63, 0xdd, 0x6a, 0x98, 0xc6, - 0x0b, 0xb8, 0x36, 0x04, 0xf5, 0xdf, 0x84, 0x96, 0x6a, 0xd7, 0x07, 0x27, 0xcc, 0x6b, 0x20, 0x7b, - 0xbd, 0x8a, 0x6a, 0xb4, 0xda, 0x96, 0xed, 0xc6, 0x30, 0x7e, 0x43, 0xac, 0x94, 0x87, 0x5b, 0xa3, - 0xb0, 0x52, 0x05, 0x0a, 0xf4, 0x71, 0xd8, 0x90, 0xfc, 0x5b, 0x4e, 0x34, 0xde, 0x45, 0xf1, 0xc4, - 0xa1, 0x5b, 0xad, 0xb6, 0x66, 0x0f, 0x93, 0xff, 0xfe, 0x4e, 0x24, 0x0e, 0x0e, 0xe1, 0x89, 0xc3, - 0x3d, 0x68, 0x63, 0x52, 0xed, 0x87, 0x60, 0xf8, 0xa6, 0x48, 0x1c, 0x02, 0xc3, 0x29, 0x44, 0xc3, - 0x30, 0x04, 0xc5, 0xdf, 0x0b, 0x0a, 0x81, 0x21, 0x14, 0x9f, 0xeb, 0x16, 0x5a, 0x1b, 0x37, 0x0c, - 0xc7, 0xb5, 0x59, 0x2b, 0x3c, 0x98, 0xea, 0x5b, 0xef, 0x06, 0x9b, 0x30, 0xc5, 0x07, 0x25, 0x99, - 0x88, 0x5f, 0xa1, 0xd2, 0x93, 0x52, 0xbc, 0x61, 0xdf, 0x16, 0x99, 0xc8, 0x07, 0x63, 0xfb, 0x73, - 0x22, 0xd4, 0xab, 0xa0, 0xb8, 0x1f, 0xc2, 0x14, 0x7f, 0xe9, 0x7d, 0xce, 0x15, 0x6c, 0x55, 0x4a, - 0xeb, 0x24, 0x80, 0x82, 0x0d, 0x45, 0x3c, 0xd9, 0x8b, 0xef, 0x7b, 0x31, 0x14, 0xe8, 0x27, 0x4a, - 0x17, 0x61, 0x3c, 0xd0, 0x4c, 0xc4, 0x53, 0xfd, 0x32, 0xa7, 0xca, 0xfb, 0x7b, 0x89, 0xd2, 0x59, - 0x48, 0x91, 0xc6, 0x20, 0x1e, 0xfe, 0x2b, 0x1c, 0x4e, 0xd5, 0x4b, 0x0f, 0x42, 0x46, 0x34, 0x04, - 0xf1, 0xd0, 0x5f, 0xe5, 0x50, 0x0f, 0x42, 0xe0, 0xa2, 0x19, 0x88, 0x87, 0xff, 0x9a, 0x80, 0x0b, - 0x08, 0x81, 0x0f, 0xef, 0xc2, 0xef, 0xfc, 0x7a, 0x8a, 0x27, 0x74, 0xe1, 0xbb, 0x0b, 0x30, 0xc6, - 0xbb, 0x80, 0x78, 0xf4, 0x17, 0xf8, 0xe0, 0x02, 0x51, 0xba, 0x1f, 0xd2, 0x43, 0x3a, 0xfc, 0x37, - 0x38, 0x94, 0xe9, 0x97, 0x96, 0x21, 0xe7, 0xab, 0xfc, 0xf1, 0xf0, 0xdf, 0xe4, 0x70, 0x3f, 0x8a, - 0x98, 0xce, 0x2b, 0x7f, 0x3c, 0xc1, 0x6f, 0x09, 0xd3, 0x39, 0x82, 0xb8, 0x4d, 0x14, 0xfd, 0x78, - 0xf4, 0x6f, 0x0b, 0xaf, 0x0b, 0x48, 0xe9, 0x61, 0xc8, 0x7a, 0x89, 0x3c, 0x1e, 0xff, 0x3b, 0x1c, - 0xdf, 0xc5, 0x10, 0x0f, 0xf8, 0x0a, 0x49, 0x3c, 0xc5, 0xef, 0x0a, 0x0f, 0xf8, 0x50, 0x64, 0x1b, - 0x85, 0x9b, 0x83, 0x78, 0xa6, 0xdf, 0x13, 0xdb, 0x28, 0xd4, 0x1b, 0x90, 0xd5, 0xa4, 0xf9, 0x34, - 0x9e, 0xe2, 0xf7, 0xc5, 0x6a, 0x52, 0x7d, 0x62, 0x46, 0xb8, 0xda, 0xc6, 0x73, 0xfc, 0x81, 0x30, - 0x23, 0x54, 0x6c, 0x4b, 0xdb, 0x80, 0x7a, 0x2b, 0x6d, 0x3c, 0xdf, 0x4b, 0x9c, 0x6f, 0xb2, 0xa7, - 0xd0, 0x96, 0x1e, 0x87, 0x63, 0xd1, 0x55, 0x36, 0x9e, 0xf5, 0x8b, 0xef, 0x87, 0xce, 0x45, 0xfe, - 0x22, 0x5b, 0xda, 0xe9, 0xa6, 0x6b, 0x7f, 0x85, 0x8d, 0xa7, 0x7d, 0xf9, 0xfd, 0x60, 0xc6, 0xf6, - 0x17, 0xd8, 0x52, 0x19, 0xa0, 0x5b, 0xdc, 0xe2, 0xb9, 0x5e, 0xe1, 0x5c, 0x3e, 0x10, 0xd9, 0x1a, - 0xbc, 0xb6, 0xc5, 0xe3, 0xbf, 0x24, 0xb6, 0x06, 0x47, 0x90, 0xad, 0x21, 0xca, 0x5a, 0x3c, 0xfa, - 0x55, 0xb1, 0x35, 0x04, 0x84, 0x44, 0xb6, 0xaf, 0x72, 0xc4, 0x33, 0xbc, 0x26, 0x22, 0xdb, 0x87, - 0x2a, 0x5d, 0x80, 0x8c, 0xd9, 0x69, 0x36, 0x49, 0x80, 0xa2, 0xc1, 0x3f, 0x10, 0x2b, 0xfe, 0xdb, - 0x87, 0xdc, 0x02, 0x01, 0x28, 0x9d, 0x85, 0x34, 0x6e, 0xed, 0xe1, 0x5a, 0x1c, 0xf2, 0xdf, 0x3f, - 0x14, 0x49, 0x89, 0x68, 0x97, 0x1e, 0x06, 0x60, 0x47, 0x7b, 0xfa, 0xd9, 0x2a, 0x06, 0xfb, 0x1f, - 0x1f, 0xf2, 0x9f, 0x6e, 0x74, 0x21, 0x5d, 0x02, 0xf6, 0x43, 0x90, 0xc1, 0x04, 0xef, 0x06, 0x09, - 0xe8, 0xac, 0x1f, 0x80, 0xb1, 0x67, 0x1c, 0xcb, 0x74, 0xb5, 0x46, 0x1c, 0xfa, 0x3f, 0x39, 0x5a, - 0xe8, 0x13, 0x87, 0xb5, 0x2c, 0x1b, 0xbb, 0x5a, 0xc3, 0x89, 0xc3, 0xfe, 0x17, 0xc7, 0x7a, 0x00, - 0x02, 0xd6, 0x35, 0xc7, 0x1d, 0x66, 0xde, 0x3f, 0x11, 0x60, 0x01, 0x20, 0x46, 0x93, 0xbf, 0x2f, - 0xe3, 0x83, 0x38, 0xec, 0x7b, 0xc2, 0x68, 0xae, 0x5f, 0x7a, 0x10, 0xb2, 0xe4, 0x4f, 0xf6, 0x7b, - 0xac, 0x18, 0xf0, 0x7f, 0x73, 0x70, 0x17, 0x41, 0x46, 0x76, 0xdc, 0x9a, 0x6b, 0xc4, 0x3b, 0xfb, - 0x7f, 0xf8, 0x4a, 0x0b, 0xfd, 0x52, 0x19, 0x72, 0x8e, 0x5b, 0xab, 0x75, 0x78, 0x7f, 0x15, 0x03, - 0xff, 0xdf, 0x0f, 0xbd, 0x23, 0xb7, 0x87, 0x59, 0xaa, 0x44, 0xdf, 0x1e, 0xc2, 0xaa, 0xb5, 0x6a, - 0xb1, 0x7b, 0xc3, 0xa7, 0xe6, 0xe2, 0x2f, 0x00, 0xe1, 0xff, 0xee, 0x86, 0x9b, 0x75, 0xab, 0xb5, - 0x67, 0x39, 0xa7, 0x7d, 0xf9, 0xee, 0x74, 0x4b, 0x6b, 0x3b, 0x54, 0x61, 0x91, 0xdf, 0x0e, 0xe6, - 0xf8, 0x13, 0x79, 0x31, 0x73, 0xb4, 0x9b, 0xc5, 0xb9, 0x9b, 0x60, 0xfc, 0x62, 0xd3, 0xd2, 0x5c, - 0xc3, 0x6c, 0x6c, 0x5b, 0x86, 0xe9, 0xa2, 0x3c, 0x48, 0x75, 0xfa, 0x65, 0x4c, 0x52, 0xa4, 0xfa, - 0xdc, 0x3f, 0xa7, 0x21, 0xcb, 0x2e, 0xa5, 0x36, 0xb4, 0x36, 0xfa, 0x45, 0xc8, 0x6f, 0xf2, 0x9d, - 0x74, 0xef, 0xe2, 0x79, 0xc7, 0xbb, 0x04, 0xf7, 0x8d, 0xbf, 0xe0, 0x69, 0x2f, 0xf8, 0x55, 0xe9, - 0x97, 0xf0, 0xa5, 0x7b, 0x7e, 0xf8, 0xe6, 0xf1, 0xbb, 0xfa, 0xda, 0x47, 0xea, 0xef, 0x69, 0x16, - 0xf2, 0x0b, 0xbb, 0x86, 0xe9, 0xde, 0xbb, 0x78, 0x5e, 0x09, 0x8c, 0x87, 0xae, 0x40, 0x86, 0xbf, - 0x70, 0xf8, 0xc7, 0x91, 0x5b, 0xfa, 0x8c, 0x2d, 0xd4, 0xd8, 0xb8, 0x67, 0xde, 0x78, 0xf3, 0xf8, - 0xc8, 0x91, 0xc7, 0xf6, 0xc6, 0x42, 0xcf, 0x42, 0x4e, 0xd8, 0xb1, 0x56, 0x73, 0xf8, 0x8f, 0xe1, - 0x6f, 0x8f, 0x99, 0xf6, 0x5a, 0x8d, 0x8f, 0x7e, 0xdb, 0x0f, 0xdf, 0x3c, 0x3e, 0x37, 0x70, 0xe4, - 0x85, 0xdd, 0x8e, 0x51, 0x53, 0xfc, 0x63, 0xa0, 0xa7, 0x21, 0x49, 0x86, 0x62, 0xbf, 0x1f, 0x3c, - 0xde, 0x67, 0x28, 0x6f, 0x88, 0x53, 0x7c, 0x82, 0xc3, 0x0c, 0x43, 0x78, 0x67, 0x1e, 0x86, 0xc9, - 0x9e, 0xe5, 0x41, 0x32, 0x24, 0x2f, 0xe3, 0x03, 0xfe, 0x43, 0x2d, 0xf2, 0x27, 0x9a, 0xee, 0xfe, - 0x92, 0x52, 0x9a, 0xcf, 0xf3, 0x9f, 0x47, 0x96, 0x12, 0xe7, 0xa5, 0x99, 0x0b, 0x30, 0x1e, 0xf0, - 0xf1, 0x91, 0xc0, 0x0f, 0x81, 0x1c, 0xf6, 0xd2, 0x91, 0xf0, 0xe7, 0x20, 0xf3, 0x51, 0x70, 0x73, - 0x3f, 0x40, 0x30, 0x56, 0x6e, 0x36, 0x37, 0xb4, 0xb6, 0x83, 0x9e, 0x84, 0x49, 0x76, 0x4a, 0xd8, - 0xb1, 0x56, 0xe8, 0xe7, 0xa8, 0x0d, 0xad, 0xcd, 0x03, 0xfa, 0xce, 0x80, 0xbb, 0x39, 0x60, 0xa1, - 0x47, 0x9b, 0x8e, 0xaf, 0xf4, 0xb2, 0xa0, 0xc7, 0x40, 0x16, 0x42, 0xba, 0xb7, 0x08, 0x33, 0x0b, - 0xd7, 0x53, 0x03, 0x99, 0x85, 0x32, 0x23, 0xee, 0xe1, 0x40, 0x0f, 0x41, 0x66, 0xcd, 0x74, 0xef, - 0x5b, 0x24, 0x7c, 0x2c, 0x06, 0xe7, 0x22, 0xf9, 0x84, 0x12, 0xe3, 0xf1, 0x30, 0x1c, 0x7f, 0xee, - 0x0c, 0xc1, 0xa7, 0x06, 0xe3, 0xa9, 0x52, 0x17, 0x4f, 0x1f, 0x51, 0x19, 0xb2, 0x64, 0xcd, 0x99, - 0x01, 0xec, 0xff, 0x61, 0xdc, 0x1c, 0x49, 0xe0, 0x69, 0x31, 0x86, 0x2e, 0x4a, 0x50, 0x30, 0x1b, - 0x46, 0x63, 0x28, 0x7c, 0x46, 0x74, 0x51, 0x84, 0xa2, 0xea, 0x59, 0x31, 0x36, 0x80, 0xa2, 0x1a, - 0xb2, 0xa2, 0xea, 0xb7, 0xa2, 0xea, 0x59, 0x91, 0x89, 0xa1, 0xf0, 0x5b, 0xe1, 0x3d, 0xa3, 0x15, - 0x80, 0x8b, 0xc6, 0xf3, 0xb8, 0xc6, 0xcc, 0xc8, 0x46, 0x24, 0x23, 0xc1, 0xd1, 0x55, 0x63, 0x24, - 0x3e, 0x1c, 0x5a, 0x85, 0x5c, 0xb5, 0xde, 0xa5, 0x01, 0xfe, 0xdf, 0x50, 0x22, 0x4d, 0xa9, 0x87, - 0x78, 0xfc, 0x48, 0xcf, 0x1c, 0x36, 0xa5, 0x5c, 0x9c, 0x39, 0xbe, 0x39, 0xf9, 0x70, 0x5d, 0x73, - 0x18, 0x4d, 0x3e, 0xd6, 0x1c, 0x1f, 0x8f, 0x1f, 0x89, 0x2e, 0xc0, 0xd8, 0x92, 0x65, 0x11, 0xcd, - 0xe2, 0x38, 0x25, 0x39, 0x19, 0x49, 0xc2, 0x75, 0x18, 0x81, 0x40, 0xd0, 0xd5, 0xa1, 0xa1, 0x4f, - 0xe0, 0x85, 0x41, 0xab, 0x23, 0xb4, 0xc4, 0xea, 0x88, 0x67, 0xff, 0x0e, 0x5c, 0x3a, 0x70, 0x31, - 0xe9, 0xc8, 0x8b, 0x13, 0x43, 0xec, 0x40, 0xa1, 0x1c, 0xda, 0x81, 0x42, 0x8c, 0xaa, 0x30, 0x21, - 0x64, 0x15, 0xb3, 0x43, 0x72, 0x70, 0x51, 0xe6, 0xbf, 0x31, 0x1f, 0x44, 0xcb, 0x75, 0x19, 0x6b, - 0x98, 0x01, 0x6d, 0x43, 0x41, 0x88, 0x36, 0x1c, 0x3a, 0xe9, 0xc9, 0x88, 0xba, 0x1a, 0xe6, 0x64, - 0xaa, 0x8c, 0x32, 0x84, 0x9f, 0x59, 0x81, 0x63, 0xd1, 0xd9, 0x2a, 0x2e, 0x5b, 0x4a, 0xfe, 0x2c, - 0xbb, 0x0c, 0xd7, 0x45, 0x66, 0xa6, 0x38, 0x92, 0x44, 0xa8, 0x4e, 0x04, 0xd2, 0x91, 0x1f, 0x9c, - 0x8e, 0x00, 0xa7, 0x7b, 0xc1, 0xdd, 0x20, 0xf3, 0x83, 0x93, 0x11, 0xe0, 0xa4, 0x1f, 0xfc, 0x59, - 0x28, 0x04, 0xf3, 0x90, 0x1f, 0x3d, 0x1e, 0x81, 0x1e, 0x8f, 0x40, 0x47, 0x8f, 0x9d, 0x8a, 0x40, - 0xa7, 0x42, 0xe8, 0x6a, 0xdf, 0xb1, 0x27, 0x23, 0xd0, 0x93, 0x11, 0xe8, 0xe8, 0xb1, 0x51, 0x04, - 0x1a, 0xf9, 0xd1, 0x0f, 0xc2, 0x44, 0x28, 0xe5, 0xf8, 0xe1, 0x63, 0x11, 0xf0, 0xb1, 0x50, 0x6d, - 0x0e, 0xa7, 0x1a, 0x3f, 0x7e, 0x22, 0x02, 0x3f, 0x11, 0x35, 0x7c, 0xb4, 0xf5, 0xa3, 0x11, 0xf0, - 0xd1, 0xc8, 0xe1, 0xa3, 0xf1, 0x72, 0x04, 0x5e, 0xf6, 0xe3, 0x4b, 0x90, 0xf7, 0x67, 0x15, 0x3f, - 0x36, 0x13, 0x81, 0xcd, 0x84, 0xfd, 0x1e, 0x48, 0x29, 0x71, 0x91, 0x9e, 0xed, 0xb3, 0x5d, 0x02, - 0x69, 0xe4, 0x48, 0x9d, 0xcd, 0x13, 0x30, 0x1d, 0x95, 0x34, 0x22, 0x38, 0x4e, 0xf9, 0x39, 0x0a, - 0x8b, 0xd3, 0x81, 0x64, 0x41, 0x71, 0x9d, 0x96, 0x9f, 0xf9, 0x69, 0x98, 0x8a, 0x48, 0x1d, 0x11, - 0xc4, 0xf7, 0xf8, 0x89, 0x73, 0x8b, 0x33, 0x01, 0xe2, 0xc0, 0x59, 0xc1, 0xdf, 0x5a, 0xfd, 0x68, - 0x0a, 0x0a, 0x3c, 0x45, 0x6d, 0xd9, 0x35, 0x6c, 0xe3, 0x1a, 0xfa, 0xf9, 0xfe, 0x1d, 0xd6, 0x62, - 0x54, 0x6a, 0xe3, 0xb8, 0x23, 0x34, 0x5a, 0x4f, 0xf7, 0x6d, 0xb4, 0xee, 0x1d, 0x66, 0x80, 0xb8, - 0x7e, 0xab, 0xd2, 0xd3, 0x6f, 0xdd, 0x31, 0x88, 0xb6, 0x5f, 0xdb, 0x55, 0xe9, 0x69, 0xbb, 0xe2, - 0x68, 0x22, 0xbb, 0xaf, 0x4b, 0xbd, 0xdd, 0xd7, 0xa9, 0x41, 0x3c, 0xfd, 0x9b, 0xb0, 0x4b, 0xbd, - 0x4d, 0x58, 0x2c, 0x53, 0x74, 0x2f, 0x76, 0xa9, 0xb7, 0x17, 0x1b, 0xc8, 0xd4, 0xbf, 0x25, 0xbb, - 0xd4, 0xdb, 0x92, 0xc5, 0x32, 0x45, 0x77, 0x66, 0x8f, 0x46, 0x74, 0x66, 0x77, 0x0e, 0xa2, 0x1a, - 0xd4, 0xa0, 0x6d, 0x46, 0x35, 0x68, 0x77, 0x0d, 0x34, 0x6c, 0x60, 0x9f, 0xf6, 0x68, 0x44, 0x9f, - 0x16, 0x6f, 0x5c, 0x9f, 0x76, 0x6d, 0x33, 0xaa, 0x5d, 0x1b, 0xc2, 0xb8, 0x7e, 0x5d, 0xdb, 0x52, - 0xb8, 0x6b, 0x9b, 0x1f, 0xc4, 0x15, 0xdd, 0xbc, 0x5d, 0xea, 0x6d, 0xde, 0x4e, 0xc5, 0xef, 0xc5, - 0xa8, 0x1e, 0xee, 0xe9, 0xbe, 0x3d, 0xdc, 0x50, 0x9b, 0x3b, 0xae, 0x95, 0x7b, 0xaa, 0x5f, 0x2b, - 0x77, 0xcf, 0x30, 0xec, 0x83, 0x3b, 0xba, 0xc7, 0xfb, 0x74, 0x74, 0xa7, 0x87, 0xa1, 0xfe, 0xb4, - 0xb1, 0xfb, 0xb4, 0xb1, 0xfb, 0xb4, 0xb1, 0xfb, 0xb4, 0xb1, 0xfb, 0xd9, 0x68, 0xec, 0x4a, 0xa9, - 0x97, 0x5e, 0x3b, 0x2e, 0x9d, 0x3a, 0x09, 0x63, 0x7c, 0x68, 0x34, 0x0a, 0x89, 0x8d, 0xb2, 0x3c, - 0x42, 0xff, 0x5d, 0x92, 0x25, 0xfa, 0xef, 0xb2, 0x9c, 0x58, 0x5a, 0x7f, 0xe3, 0xda, 0xec, 0xc8, - 0xf7, 0xae, 0xcd, 0x8e, 0xfc, 0xe0, 0xda, 0xec, 0xc8, 0x5b, 0xd7, 0x66, 0xa5, 0x77, 0xae, 0xcd, - 0x4a, 0xef, 0x5d, 0x9b, 0x95, 0x3e, 0xb8, 0x36, 0x2b, 0x5d, 0x3d, 0x9c, 0x95, 0xbe, 0x72, 0x38, - 0x2b, 0x7d, 0xed, 0x70, 0x56, 0xfa, 0xd6, 0xe1, 0xac, 0xf4, 0x9d, 0xc3, 0x59, 0xe9, 0x8d, 0xc3, - 0xd9, 0x91, 0xef, 0x1d, 0xce, 0x4a, 0x6f, 0x1d, 0xce, 0x4a, 0xef, 0x1c, 0xce, 0x8e, 0xbc, 0x77, - 0x38, 0x2b, 0x7d, 0x70, 0x38, 0x3b, 0x72, 0xf5, 0xc7, 0xb3, 0x23, 0xff, 0x1f, 0x00, 0x00, 0xff, - 0xff, 0x19, 0x19, 0x31, 0xd0, 0x16, 0x48, 0x00, 0x00, + // 4797 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7b, 0x5b, 0x6c, 0x23, 0xd7, + 0x79, 0xbf, 0x86, 0x17, 0x89, 0xfc, 0x48, 0x51, 0xa3, 0x91, 0xbc, 0xa6, 0x95, 0x58, 0xbb, 0x2b, + 0xdf, 0xe4, 0x5d, 0x5b, 0xb2, 0xe5, 0xdd, 0xf5, 0x9a, 0x1b, 0xdb, 0x7f, 0x4a, 0xe2, 0x6a, 0x65, + 0xeb, 0x96, 0xa1, 0xe4, 0x5b, 0x60, 0xcc, 0x7f, 0x34, 0x3c, 0xa2, 0xc6, 0x4b, 0xce, 0xd0, 0x33, + 0xc3, 0x5d, 0xcb, 0x28, 0x8a, 0x2d, 0xdc, 0x0b, 0x82, 0xa2, 0xf7, 0x02, 0x75, 0x5c, 0xc7, 0xad, + 0x53, 0x34, 0x4e, 0xd3, 0x5b, 0xd2, 0xb4, 0x69, 0x92, 0xbe, 0xe4, 0x25, 0xad, 0x81, 0x02, 0x45, + 0xf2, 0x16, 0x04, 0x81, 0xe1, 0x55, 0x0c, 0xd4, 0x6d, 0xdd, 0xc6, 0x6d, 0xfd, 0xe0, 0xc2, 0x2f, + 0xc5, 0xb9, 0x0d, 0xcf, 0x0c, 0x87, 0x1c, 0xca, 0x80, 0x9d, 0x3e, 0xf8, 0x69, 0x35, 0x67, 0xbe, + 0xdf, 0xef, 0x7c, 0xe7, 0x3b, 0xdf, 0xf9, 0xce, 0xef, 0x9c, 0xe1, 0xc2, 0x4f, 0x1f, 0x80, 0x13, + 0x75, 0xdb, 0xae, 0x37, 0xd0, 0x7c, 0xcb, 0xb1, 0x3d, 0x7b, 0xb7, 0xbd, 0x37, 0x5f, 0x43, 0xae, + 0xe1, 0x98, 0x2d, 0xcf, 0x76, 0xe6, 0x48, 0x9b, 0x32, 0x46, 0x2d, 0xe6, 0xb8, 0xc5, 0xcc, 0x3a, + 0x8c, 0x5f, 0x34, 0x1b, 0x68, 0xd9, 0x37, 0xac, 0x22, 0x4f, 0x39, 0x0f, 0xa9, 0x3d, 0xb3, 0x81, + 0x8a, 0xd2, 0x89, 0xe4, 0x6c, 0x6e, 0xe1, 0xd6, 0xb9, 0x10, 0x68, 0x2e, 0x88, 0xd8, 0xc2, 0xcd, + 0x2a, 0x41, 0xcc, 0xbc, 0x95, 0x82, 0x89, 0x88, 0xb7, 0x8a, 0x02, 0x29, 0x4b, 0x6f, 0x62, 0x46, + 0x69, 0x36, 0xab, 0x92, 0xbf, 0x95, 0x22, 0x8c, 0xb4, 0x74, 0xe3, 0xb2, 0x5e, 0x47, 0xc5, 0x04, + 0x69, 0xe6, 0x8f, 0xca, 0x34, 0x40, 0x0d, 0xb5, 0x90, 0x55, 0x43, 0x96, 0x71, 0x50, 0x4c, 0x9e, + 0x48, 0xce, 0x66, 0x55, 0xa1, 0x45, 0x39, 0x0d, 0xe3, 0xad, 0xf6, 0x6e, 0xc3, 0x34, 0x34, 0xc1, + 0x0c, 0x4e, 0x24, 0x67, 0xd3, 0xaa, 0x4c, 0x5f, 0x2c, 0x77, 0x8c, 0xef, 0x80, 0xb1, 0xab, 0x48, + 0xbf, 0x2c, 0x9a, 0xe6, 0x88, 0x69, 0x01, 0x37, 0x0b, 0x86, 0x4b, 0x90, 0x6f, 0x22, 0xd7, 0xd5, + 0xeb, 0x48, 0xf3, 0x0e, 0x5a, 0xa8, 0x98, 0x22, 0xa3, 0x3f, 0xd1, 0x35, 0xfa, 0xf0, 0xc8, 0x73, + 0x0c, 0xb5, 0x7d, 0xd0, 0x42, 0x4a, 0x19, 0xb2, 0xc8, 0x6a, 0x37, 0x29, 0x43, 0xba, 0x47, 0xfc, + 0x2a, 0x56, 0xbb, 0x19, 0x66, 0xc9, 0x60, 0x18, 0xa3, 0x18, 0x71, 0x91, 0x73, 0xc5, 0x34, 0x50, + 0x71, 0x98, 0x10, 0xdc, 0xd1, 0x45, 0x50, 0xa5, 0xef, 0xc3, 0x1c, 0x1c, 0xa7, 0x2c, 0x41, 0x16, + 0x3d, 0xe7, 0x21, 0xcb, 0x35, 0x6d, 0xab, 0x38, 0x42, 0x48, 0x6e, 0x8b, 0x98, 0x45, 0xd4, 0xa8, + 0x85, 0x29, 0x3a, 0x38, 0xe5, 0x1c, 0x8c, 0xd8, 0x2d, 0xcf, 0xb4, 0x2d, 0xb7, 0x98, 0x39, 0x21, + 0xcd, 0xe6, 0x16, 0x3e, 0x1d, 0x99, 0x08, 0x9b, 0xd4, 0x46, 0xe5, 0xc6, 0xca, 0x2a, 0xc8, 0xae, + 0xdd, 0x76, 0x0c, 0xa4, 0x19, 0x76, 0x0d, 0x69, 0xa6, 0xb5, 0x67, 0x17, 0xb3, 0x84, 0xe0, 0x78, + 0xf7, 0x40, 0x88, 0xe1, 0x92, 0x5d, 0x43, 0xab, 0xd6, 0x9e, 0xad, 0x16, 0xdc, 0xc0, 0xb3, 0x72, + 0x0c, 0x86, 0xdd, 0x03, 0xcb, 0xd3, 0x9f, 0x2b, 0xe6, 0x49, 0x86, 0xb0, 0xa7, 0x99, 0x6f, 0x0f, + 0xc3, 0xd8, 0x20, 0x29, 0x76, 0x01, 0xd2, 0x7b, 0x78, 0x94, 0xc5, 0xc4, 0x51, 0x62, 0x40, 0x31, + 0xc1, 0x20, 0x0e, 0x7f, 0xc8, 0x20, 0x96, 0x21, 0x67, 0x21, 0xd7, 0x43, 0x35, 0x9a, 0x11, 0xc9, + 0x01, 0x73, 0x0a, 0x28, 0xa8, 0x3b, 0xa5, 0x52, 0x1f, 0x2a, 0xa5, 0x9e, 0x80, 0x31, 0xdf, 0x25, + 0xcd, 0xd1, 0xad, 0x3a, 0xcf, 0xcd, 0xf9, 0x38, 0x4f, 0xe6, 0x2a, 0x1c, 0xa7, 0x62, 0x98, 0x5a, + 0x40, 0x81, 0x67, 0x65, 0x19, 0xc0, 0xb6, 0x90, 0xbd, 0xa7, 0xd5, 0x90, 0xd1, 0x28, 0x66, 0x7a, + 0x44, 0x69, 0x13, 0x9b, 0x74, 0x45, 0xc9, 0xa6, 0xad, 0x46, 0x43, 0x79, 0xa0, 0x93, 0x6a, 0x23, + 0x3d, 0x32, 0x65, 0x9d, 0x2e, 0xb2, 0xae, 0x6c, 0xdb, 0x81, 0x82, 0x83, 0x70, 0xde, 0xa3, 0x1a, + 0x1b, 0x59, 0x96, 0x38, 0x31, 0x17, 0x3b, 0x32, 0x95, 0xc1, 0xe8, 0xc0, 0x46, 0x1d, 0xf1, 0x51, + 0xb9, 0x05, 0xfc, 0x06, 0x8d, 0xa4, 0x15, 0x90, 0x2a, 0x94, 0xe7, 0x8d, 0x1b, 0x7a, 0x13, 0x4d, + 0x3d, 0x0f, 0x85, 0x60, 0x78, 0x94, 0x49, 0x48, 0xbb, 0x9e, 0xee, 0x78, 0x24, 0x0b, 0xd3, 0x2a, + 0x7d, 0x50, 0x64, 0x48, 0x22, 0xab, 0x46, 0xaa, 0x5c, 0x5a, 0xc5, 0x7f, 0x2a, 0xff, 0xaf, 0x33, + 0xe0, 0x24, 0x19, 0xf0, 0xed, 0xdd, 0x33, 0x1a, 0x60, 0x0e, 0x8f, 0x7b, 0xea, 0x7e, 0x18, 0x0d, + 0x0c, 0x60, 0xd0, 0xae, 0x67, 0x7e, 0x0e, 0x6e, 0x88, 0xa4, 0x56, 0x9e, 0x80, 0xc9, 0xb6, 0x65, + 0x5a, 0x1e, 0x72, 0x5a, 0x0e, 0xc2, 0x19, 0x4b, 0xbb, 0x2a, 0xfe, 0xf3, 0x48, 0x8f, 0x9c, 0xdb, + 0x11, 0xad, 0x29, 0x8b, 0x3a, 0xd1, 0xee, 0x6e, 0x3c, 0x95, 0xcd, 0xbc, 0x3d, 0x22, 0x5f, 0xbb, + 0x76, 0xed, 0x5a, 0x62, 0xe6, 0xc5, 0x61, 0x98, 0x8c, 0x5a, 0x33, 0x91, 0xcb, 0xf7, 0x18, 0x0c, + 0x5b, 0xed, 0xe6, 0x2e, 0x72, 0x48, 0x90, 0xd2, 0x2a, 0x7b, 0x52, 0xca, 0x90, 0x6e, 0xe8, 0xbb, + 0xa8, 0x51, 0x4c, 0x9d, 0x90, 0x66, 0x0b, 0x0b, 0xa7, 0x07, 0x5a, 0x95, 0x73, 0x6b, 0x18, 0xa2, + 0x52, 0xa4, 0xf2, 0x10, 0xa4, 0x58, 0x89, 0xc6, 0x0c, 0xa7, 0x06, 0x63, 0xc0, 0x6b, 0x49, 0x25, + 0x38, 0xe5, 0x53, 0x90, 0xc5, 0xff, 0xd2, 0xdc, 0x18, 0x26, 0x3e, 0x67, 0x70, 0x03, 0xce, 0x0b, + 0x65, 0x0a, 0x32, 0x64, 0x99, 0xd4, 0x10, 0xdf, 0xda, 0xfc, 0x67, 0x9c, 0x58, 0x35, 0xb4, 0xa7, + 0xb7, 0x1b, 0x9e, 0x76, 0x45, 0x6f, 0xb4, 0x11, 0x49, 0xf8, 0xac, 0x9a, 0x67, 0x8d, 0x8f, 0xe1, + 0x36, 0xe5, 0x38, 0xe4, 0xe8, 0xaa, 0x32, 0xad, 0x1a, 0x7a, 0x8e, 0x54, 0xcf, 0xb4, 0x4a, 0x17, + 0xda, 0x2a, 0x6e, 0xc1, 0xdd, 0x3f, 0xe3, 0xda, 0x16, 0x4f, 0x4d, 0xd2, 0x05, 0x6e, 0x20, 0xdd, + 0xdf, 0x1f, 0x2e, 0xdc, 0x37, 0x47, 0x0f, 0x2f, 0x9c, 0x53, 0x33, 0xdf, 0x4c, 0x40, 0x8a, 0xd4, + 0x8b, 0x31, 0xc8, 0x6d, 0x3f, 0xb9, 0x55, 0xd1, 0x96, 0x37, 0x77, 0x16, 0xd7, 0x2a, 0xb2, 0xa4, + 0x14, 0x00, 0x48, 0xc3, 0xc5, 0xb5, 0xcd, 0xf2, 0xb6, 0x9c, 0xf0, 0x9f, 0x57, 0x37, 0xb6, 0xcf, + 0x9d, 0x91, 0x93, 0x3e, 0x60, 0x87, 0x36, 0xa4, 0x44, 0x83, 0xfb, 0x16, 0xe4, 0xb4, 0x22, 0x43, + 0x9e, 0x12, 0xac, 0x3e, 0x51, 0x59, 0x3e, 0x77, 0x46, 0x1e, 0x0e, 0xb6, 0xdc, 0xb7, 0x20, 0x8f, + 0x28, 0xa3, 0x90, 0x25, 0x2d, 0x8b, 0x9b, 0x9b, 0x6b, 0x72, 0xc6, 0xe7, 0xac, 0x6e, 0xab, 0xab, + 0x1b, 0x2b, 0x72, 0xd6, 0xe7, 0x5c, 0x51, 0x37, 0x77, 0xb6, 0x64, 0xf0, 0x19, 0xd6, 0x2b, 0xd5, + 0x6a, 0x79, 0xa5, 0x22, 0xe7, 0x7c, 0x8b, 0xc5, 0x27, 0xb7, 0x2b, 0x55, 0x39, 0x1f, 0x70, 0xeb, + 0xbe, 0x05, 0x79, 0xd4, 0xef, 0xa2, 0xb2, 0xb1, 0xb3, 0x2e, 0x17, 0x94, 0x71, 0x18, 0xa5, 0x5d, + 0x70, 0x27, 0xc6, 0x42, 0x4d, 0xe7, 0xce, 0xc8, 0x72, 0xc7, 0x11, 0xca, 0x32, 0x1e, 0x68, 0x38, + 0x77, 0x46, 0x56, 0x66, 0x96, 0x20, 0x4d, 0xb2, 0x4b, 0x51, 0xa0, 0xb0, 0x56, 0x5e, 0xac, 0xac, + 0x69, 0x9b, 0x5b, 0xdb, 0xab, 0x9b, 0x1b, 0xe5, 0x35, 0x59, 0xea, 0xb4, 0xa9, 0x95, 0xcf, 0xee, + 0xac, 0xaa, 0x95, 0x65, 0x39, 0x21, 0xb6, 0x6d, 0x55, 0xca, 0xdb, 0x95, 0x65, 0x39, 0x39, 0x63, + 0xc0, 0x64, 0x54, 0x9d, 0x8c, 0x5c, 0x19, 0xc2, 0x14, 0x27, 0x7a, 0x4c, 0x31, 0xe1, 0xea, 0x9a, + 0xe2, 0x9f, 0x24, 0x60, 0x22, 0x62, 0xaf, 0x88, 0xec, 0xe4, 0x61, 0x48, 0xd3, 0x14, 0xa5, 0xbb, + 0xe7, 0x9d, 0x91, 0x9b, 0x0e, 0x49, 0xd8, 0xae, 0x1d, 0x94, 0xe0, 0x44, 0x05, 0x91, 0xec, 0xa1, + 0x20, 0x30, 0x45, 0x57, 0x4d, 0x7f, 0xba, 0xab, 0xa6, 0xd3, 0x6d, 0xef, 0xdc, 0x20, 0xdb, 0x1e, + 0x69, 0x3b, 0x5a, 0x6d, 0x4f, 0x47, 0xd4, 0xf6, 0x0b, 0x30, 0xde, 0x45, 0x34, 0x70, 0x8d, 0x7d, + 0x41, 0x82, 0x62, 0xaf, 0xe0, 0xc4, 0x54, 0xba, 0x44, 0xa0, 0xd2, 0x5d, 0x08, 0x47, 0xf0, 0x64, + 0xef, 0x49, 0xe8, 0x9a, 0xeb, 0xd7, 0x24, 0x38, 0x16, 0xad, 0x14, 0x23, 0x7d, 0x78, 0x08, 0x86, + 0x9b, 0xc8, 0xdb, 0xb7, 0xb9, 0x5a, 0xba, 0x3d, 0x62, 0x0f, 0xc6, 0xaf, 0xc3, 0x93, 0xcd, 0x50, + 0xe2, 0x26, 0x9e, 0xec, 0x25, 0xf7, 0xa8, 0x37, 0x5d, 0x9e, 0x7e, 0x3e, 0x01, 0x37, 0x44, 0x92, + 0x47, 0x3a, 0x7a, 0x33, 0x80, 0x69, 0xb5, 0xda, 0x1e, 0x55, 0x44, 0xb4, 0xc0, 0x66, 0x49, 0x0b, + 0x29, 0x5e, 0xb8, 0x78, 0xb6, 0x3d, 0xff, 0x7d, 0x92, 0xbc, 0x07, 0xda, 0x44, 0x0c, 0xce, 0x77, + 0x1c, 0x4d, 0x11, 0x47, 0xa7, 0x7b, 0x8c, 0xb4, 0x2b, 0x31, 0xef, 0x01, 0xd9, 0x68, 0x98, 0xc8, + 0xf2, 0x34, 0xd7, 0x73, 0x90, 0xde, 0x34, 0xad, 0x3a, 0xd9, 0x41, 0x32, 0xa5, 0xf4, 0x9e, 0xde, + 0x70, 0x91, 0x3a, 0x46, 0x5f, 0x57, 0xf9, 0x5b, 0x8c, 0x20, 0x09, 0xe4, 0x08, 0x88, 0xe1, 0x00, + 0x82, 0xbe, 0xf6, 0x11, 0x33, 0xdf, 0xc8, 0x40, 0x4e, 0xd0, 0xd5, 0xca, 0x49, 0xc8, 0x3f, 0xa3, + 0x5f, 0xd1, 0x35, 0x7e, 0x56, 0xa2, 0x91, 0xc8, 0xe1, 0xb6, 0x2d, 0x76, 0x5e, 0xba, 0x07, 0x26, + 0x89, 0x89, 0xdd, 0xf6, 0x90, 0xa3, 0x19, 0x0d, 0xdd, 0x75, 0x49, 0xd0, 0x32, 0xc4, 0x54, 0xc1, + 0xef, 0x36, 0xf1, 0xab, 0x25, 0xfe, 0x46, 0x39, 0x0b, 0x13, 0x04, 0xd1, 0x6c, 0x37, 0x3c, 0xb3, + 0xd5, 0x40, 0x1a, 0x3e, 0xbd, 0xb9, 0x64, 0x27, 0xf1, 0x3d, 0x1b, 0xc7, 0x16, 0xeb, 0xcc, 0x00, + 0x7b, 0xe4, 0x2a, 0xcb, 0x70, 0x33, 0x81, 0xd5, 0x91, 0x85, 0x1c, 0xdd, 0x43, 0x1a, 0x7a, 0xb6, + 0xad, 0x37, 0x5c, 0x4d, 0xb7, 0x6a, 0xda, 0xbe, 0xee, 0xee, 0x17, 0x27, 0x31, 0xc1, 0x62, 0xa2, + 0x28, 0xa9, 0x37, 0x61, 0xc3, 0x15, 0x66, 0x57, 0x21, 0x66, 0x65, 0xab, 0x76, 0x49, 0x77, 0xf7, + 0x95, 0x12, 0x1c, 0x23, 0x2c, 0xae, 0xe7, 0x98, 0x56, 0x5d, 0x33, 0xf6, 0x91, 0x71, 0x59, 0x6b, + 0x7b, 0x7b, 0xe7, 0x8b, 0x9f, 0x12, 0xfb, 0x27, 0x1e, 0x56, 0x89, 0xcd, 0x12, 0x36, 0xd9, 0xf1, + 0xf6, 0xce, 0x2b, 0x55, 0xc8, 0xe3, 0xc9, 0x68, 0x9a, 0xcf, 0x23, 0x6d, 0xcf, 0x76, 0xc8, 0xd6, + 0x58, 0x88, 0x28, 0x4d, 0x42, 0x04, 0xe7, 0x36, 0x19, 0x60, 0xdd, 0xae, 0xa1, 0x52, 0xba, 0xba, + 0x55, 0xa9, 0x2c, 0xab, 0x39, 0xce, 0x72, 0xd1, 0x76, 0x70, 0x42, 0xd5, 0x6d, 0x3f, 0xc0, 0x39, + 0x9a, 0x50, 0x75, 0x9b, 0x87, 0xf7, 0x2c, 0x4c, 0x18, 0x06, 0x1d, 0xb3, 0x69, 0x68, 0xec, 0x8c, + 0xe5, 0x16, 0xe5, 0x40, 0xb0, 0x0c, 0x63, 0x85, 0x1a, 0xb0, 0x1c, 0x77, 0x95, 0x07, 0xe0, 0x86, + 0x4e, 0xb0, 0x44, 0xe0, 0x78, 0xd7, 0x28, 0xc3, 0xd0, 0xb3, 0x30, 0xd1, 0x3a, 0xe8, 0x06, 0x2a, + 0x81, 0x1e, 0x5b, 0x07, 0x61, 0xd8, 0xfd, 0x30, 0xd9, 0xda, 0x6f, 0x75, 0xe3, 0x4e, 0x89, 0x38, + 0xa5, 0xb5, 0xdf, 0x0a, 0x03, 0x6f, 0x23, 0x07, 0x6e, 0x07, 0x19, 0xba, 0x87, 0x6a, 0xc5, 0x1b, + 0x45, 0x73, 0xe1, 0x85, 0x32, 0x0f, 0xb2, 0x61, 0x68, 0xc8, 0xd2, 0x77, 0x1b, 0x48, 0xd3, 0x1d, + 0x64, 0xe9, 0x6e, 0xf1, 0xb8, 0x68, 0x5c, 0x30, 0x8c, 0x0a, 0x79, 0x5b, 0x26, 0x2f, 0x95, 0x53, + 0x30, 0x6e, 0xef, 0x3e, 0x63, 0xd0, 0x94, 0xd4, 0x5a, 0x0e, 0xda, 0x33, 0x9f, 0x2b, 0xde, 0x4a, + 0xe2, 0x3b, 0x86, 0x5f, 0x90, 0x84, 0xdc, 0x22, 0xcd, 0xca, 0x9d, 0x20, 0x1b, 0xee, 0xbe, 0xee, + 0xb4, 0x48, 0x4d, 0x76, 0x5b, 0xba, 0x81, 0x8a, 0xb7, 0x51, 0x53, 0xda, 0xbe, 0xc1, 0x9b, 0xf1, + 0x92, 0x70, 0xaf, 0x9a, 0x7b, 0x1e, 0x67, 0xbc, 0x83, 0x2e, 0x09, 0xd2, 0xc6, 0xd8, 0x66, 0x41, + 0xc6, 0xa1, 0x08, 0x74, 0x3c, 0x4b, 0xcc, 0x0a, 0xad, 0xfd, 0x96, 0xd8, 0xef, 0x2d, 0x30, 0x8a, + 0x2d, 0x3b, 0x9d, 0xde, 0x49, 0x05, 0x59, 0x6b, 0x5f, 0xe8, 0xf1, 0x23, 0xd3, 0xc6, 0x33, 0x25, + 0xc8, 0x8b, 0xf9, 0xa9, 0x64, 0x81, 0x66, 0xa8, 0x2c, 0x61, 0xb1, 0xb2, 0xb4, 0xb9, 0x8c, 0x65, + 0xc6, 0x53, 0x15, 0x39, 0x81, 0xe5, 0xce, 0xda, 0xea, 0x76, 0x45, 0x53, 0x77, 0x36, 0xb6, 0x57, + 0xd7, 0x2b, 0x72, 0x52, 0xd4, 0xd5, 0xdf, 0x4b, 0x40, 0x21, 0x78, 0x44, 0x52, 0x3e, 0x03, 0x37, + 0xf2, 0xfb, 0x0c, 0x17, 0x79, 0xda, 0x55, 0xd3, 0x21, 0x4b, 0xa6, 0xa9, 0xd3, 0xed, 0xcb, 0x9f, + 0xb4, 0x49, 0x66, 0x55, 0x45, 0xde, 0xe3, 0xa6, 0x83, 0x17, 0x44, 0x53, 0xf7, 0x94, 0x35, 0x38, + 0x6e, 0xd9, 0x9a, 0xeb, 0xe9, 0x56, 0x4d, 0x77, 0x6a, 0x5a, 0xe7, 0x26, 0x49, 0xd3, 0x0d, 0x03, + 0xb9, 0xae, 0x4d, 0xb7, 0x2a, 0x9f, 0xe5, 0xd3, 0x96, 0x5d, 0x65, 0xc6, 0x9d, 0x1a, 0x5e, 0x66, + 0xa6, 0xa1, 0x04, 0x4b, 0xf6, 0x4a, 0xb0, 0x4f, 0x41, 0xb6, 0xa9, 0xb7, 0x34, 0x64, 0x79, 0xce, + 0x01, 0x11, 0xc6, 0x19, 0x35, 0xd3, 0xd4, 0x5b, 0x15, 0xfc, 0xfc, 0xf1, 0x9c, 0x4f, 0x7e, 0x9c, + 0x84, 0xbc, 0x28, 0x8e, 0xf1, 0x59, 0xc3, 0x20, 0xfb, 0x88, 0x44, 0x2a, 0xcd, 0x2d, 0x7d, 0xa5, + 0xf4, 0xdc, 0x12, 0xde, 0x60, 0x4a, 0xc3, 0x54, 0xb2, 0xaa, 0x14, 0x89, 0x37, 0x77, 0x5c, 0x5b, + 0x10, 0x95, 0x08, 0x19, 0x95, 0x3d, 0x29, 0x2b, 0x30, 0xfc, 0x8c, 0x4b, 0xb8, 0x87, 0x09, 0xf7, + 0xad, 0xfd, 0xb9, 0x1f, 0xa9, 0x12, 0xf2, 0xec, 0x23, 0x55, 0x6d, 0x63, 0x53, 0x5d, 0x2f, 0xaf, + 0xa9, 0x0c, 0xae, 0xdc, 0x04, 0xa9, 0x86, 0xfe, 0xfc, 0x41, 0x70, 0x2b, 0x22, 0x4d, 0x83, 0x06, + 0xfe, 0x26, 0x48, 0x5d, 0x45, 0xfa, 0xe5, 0xe0, 0x06, 0x40, 0x9a, 0x3e, 0xc2, 0xd4, 0x9f, 0x87, + 0x34, 0x89, 0x97, 0x02, 0xc0, 0x22, 0x26, 0x0f, 0x29, 0x19, 0x48, 0x2d, 0x6d, 0xaa, 0x38, 0xfd, + 0x65, 0xc8, 0xd3, 0x56, 0x6d, 0x6b, 0xb5, 0xb2, 0x54, 0x91, 0x13, 0x33, 0x67, 0x61, 0x98, 0x06, + 0x01, 0x2f, 0x0d, 0x3f, 0x0c, 0xf2, 0x10, 0x7b, 0x64, 0x1c, 0x12, 0x7f, 0xbb, 0xb3, 0xbe, 0x58, + 0x51, 0xe5, 0x84, 0x38, 0xbd, 0x2e, 0xe4, 0x45, 0x5d, 0xfc, 0xf1, 0xe4, 0xd4, 0x77, 0x24, 0xc8, + 0x09, 0x3a, 0x17, 0x0b, 0x14, 0xbd, 0xd1, 0xb0, 0xaf, 0x6a, 0x7a, 0xc3, 0xd4, 0x5d, 0x96, 0x14, + 0x40, 0x9a, 0xca, 0xb8, 0x65, 0xd0, 0x49, 0xfb, 0x58, 0x9c, 0x7f, 0x45, 0x02, 0x39, 0x2c, 0x31, + 0x43, 0x0e, 0x4a, 0x3f, 0x53, 0x07, 0x5f, 0x96, 0xa0, 0x10, 0xd4, 0x95, 0x21, 0xf7, 0x4e, 0xfe, + 0x4c, 0xdd, 0x7b, 0x33, 0x01, 0xa3, 0x01, 0x35, 0x39, 0xa8, 0x77, 0xcf, 0xc2, 0xb8, 0x59, 0x43, + 0xcd, 0x96, 0xed, 0x21, 0xcb, 0x38, 0xd0, 0x1a, 0xe8, 0x0a, 0x6a, 0x14, 0x67, 0x48, 0xa1, 0x98, + 0xef, 0xaf, 0x57, 0xe7, 0x56, 0x3b, 0xb8, 0x35, 0x0c, 0x2b, 0x4d, 0xac, 0x2e, 0x57, 0xd6, 0xb7, + 0x36, 0xb7, 0x2b, 0x1b, 0x4b, 0x4f, 0x6a, 0x3b, 0x1b, 0x8f, 0x6e, 0x6c, 0x3e, 0xbe, 0xa1, 0xca, + 0x66, 0xc8, 0xec, 0x23, 0x5c, 0xea, 0x5b, 0x20, 0x87, 0x9d, 0x52, 0x6e, 0x84, 0x28, 0xb7, 0xe4, + 0x21, 0x65, 0x02, 0xc6, 0x36, 0x36, 0xb5, 0xea, 0xea, 0x72, 0x45, 0xab, 0x5c, 0xbc, 0x58, 0x59, + 0xda, 0xae, 0xd2, 0x1b, 0x08, 0xdf, 0x7a, 0x3b, 0xb8, 0xa8, 0x5f, 0x4a, 0xc2, 0x44, 0x84, 0x27, + 0x4a, 0x99, 0x9d, 0x1d, 0xe8, 0x71, 0xe6, 0xee, 0x41, 0xbc, 0x9f, 0xc3, 0x5b, 0xfe, 0x96, 0xee, + 0x78, 0xec, 0xa8, 0x71, 0x27, 0xe0, 0x28, 0x59, 0x9e, 0xb9, 0x67, 0x22, 0x87, 0x5d, 0xd8, 0xd0, + 0x03, 0xc5, 0x58, 0xa7, 0x9d, 0xde, 0xd9, 0xdc, 0x05, 0x4a, 0xcb, 0x76, 0x4d, 0xcf, 0xbc, 0x82, + 0x34, 0xd3, 0xe2, 0xb7, 0x3b, 0xf8, 0x80, 0x91, 0x52, 0x65, 0xfe, 0x66, 0xd5, 0xf2, 0x7c, 0x6b, + 0x0b, 0xd5, 0xf5, 0x90, 0x35, 0x2e, 0xe0, 0x49, 0x55, 0xe6, 0x6f, 0x7c, 0xeb, 0x93, 0x90, 0xaf, + 0xd9, 0x6d, 0xac, 0xba, 0xa8, 0x1d, 0xde, 0x2f, 0x24, 0x35, 0x47, 0xdb, 0x7c, 0x13, 0xa6, 0xa7, + 0x3b, 0xd7, 0x4a, 0x79, 0x35, 0x47, 0xdb, 0xa8, 0xc9, 0x1d, 0x30, 0xa6, 0xd7, 0xeb, 0x0e, 0x26, + 0xe7, 0x44, 0xf4, 0x84, 0x50, 0xf0, 0x9b, 0x89, 0xe1, 0xd4, 0x23, 0x90, 0xe1, 0x71, 0xc0, 0x5b, + 0x32, 0x8e, 0x84, 0xd6, 0xa2, 0xc7, 0xde, 0xc4, 0x6c, 0x56, 0xcd, 0x58, 0xfc, 0xe5, 0x49, 0xc8, + 0x9b, 0xae, 0xd6, 0xb9, 0x25, 0x4f, 0x9c, 0x48, 0xcc, 0x66, 0xd4, 0x9c, 0xe9, 0xfa, 0x37, 0x8c, + 0x33, 0xaf, 0x25, 0xa0, 0x10, 0xbc, 0xe5, 0x57, 0x96, 0x21, 0xd3, 0xb0, 0x0d, 0x9d, 0xa4, 0x16, + 0xfd, 0xc4, 0x34, 0x1b, 0xf3, 0x61, 0x60, 0x6e, 0x8d, 0xd9, 0xab, 0x3e, 0x72, 0xea, 0x9f, 0x24, + 0xc8, 0xf0, 0x66, 0xe5, 0x18, 0xa4, 0x5a, 0xba, 0xb7, 0x4f, 0xe8, 0xd2, 0x8b, 0x09, 0x59, 0x52, + 0xc9, 0x33, 0x6e, 0x77, 0x5b, 0xba, 0x45, 0x52, 0x80, 0xb5, 0xe3, 0x67, 0x3c, 0xaf, 0x0d, 0xa4, + 0xd7, 0xc8, 0xf1, 0xc3, 0x6e, 0x36, 0x91, 0xe5, 0xb9, 0x7c, 0x5e, 0x59, 0xfb, 0x12, 0x6b, 0x56, + 0x4e, 0xc3, 0xb8, 0xe7, 0xe8, 0x66, 0x23, 0x60, 0x9b, 0x22, 0xb6, 0x32, 0x7f, 0xe1, 0x1b, 0x97, + 0xe0, 0x26, 0xce, 0x5b, 0x43, 0x9e, 0x6e, 0xec, 0xa3, 0x5a, 0x07, 0x34, 0x4c, 0xae, 0x19, 0x6e, + 0x64, 0x06, 0xcb, 0xec, 0x3d, 0xc7, 0xce, 0xfc, 0x40, 0x82, 0x71, 0x7e, 0x60, 0xaa, 0xf9, 0xc1, + 0x5a, 0x07, 0xd0, 0x2d, 0xcb, 0xf6, 0xc4, 0x70, 0x75, 0xa7, 0x72, 0x17, 0x6e, 0xae, 0xec, 0x83, + 0x54, 0x81, 0x60, 0xaa, 0x09, 0xd0, 0x79, 0xd3, 0x33, 0x6c, 0xc7, 0x21, 0xc7, 0x3e, 0xe1, 0x90, + 0xef, 0x80, 0xf4, 0x88, 0x0d, 0xb4, 0x09, 0x9f, 0xac, 0x94, 0x49, 0x48, 0xef, 0xa2, 0xba, 0x69, + 0xb1, 0x8b, 0x59, 0xfa, 0xc0, 0x2f, 0x42, 0x52, 0xfe, 0x45, 0xc8, 0xe2, 0xe7, 0x60, 0xc2, 0xb0, + 0x9b, 0x61, 0x77, 0x17, 0xe5, 0xd0, 0x31, 0xdf, 0xbd, 0x24, 0x3d, 0x05, 0x1d, 0x89, 0xf9, 0xbe, + 0x24, 0x7d, 0x29, 0x91, 0x5c, 0xd9, 0x5a, 0xfc, 0x6a, 0x62, 0x6a, 0x85, 0x42, 0xb7, 0xf8, 0x48, + 0x55, 0xb4, 0xd7, 0x40, 0x06, 0xf6, 0x1e, 0xbe, 0x7c, 0x1a, 0xee, 0xae, 0x9b, 0xde, 0x7e, 0x7b, + 0x77, 0xce, 0xb0, 0x9b, 0xf3, 0x75, 0xbb, 0x6e, 0x77, 0x3e, 0x7d, 0xe2, 0x27, 0xf2, 0x40, 0xfe, + 0x62, 0x9f, 0x3f, 0xb3, 0x7e, 0xeb, 0x54, 0xec, 0xb7, 0xd2, 0xd2, 0x06, 0x4c, 0x30, 0x63, 0x8d, + 0x7c, 0x7f, 0xa1, 0xa7, 0x08, 0xa5, 0xef, 0x1d, 0x56, 0xf1, 0xeb, 0x6f, 0x91, 0xed, 0x5a, 0x1d, + 0x67, 0x50, 0xfc, 0x8e, 0x1e, 0x34, 0x4a, 0x2a, 0xdc, 0x10, 0xe0, 0xa3, 0x4b, 0x13, 0x39, 0x31, + 0x8c, 0xdf, 0x63, 0x8c, 0x13, 0x02, 0x63, 0x95, 0x41, 0x4b, 0x4b, 0x30, 0x7a, 0x14, 0xae, 0xbf, + 0x67, 0x5c, 0x79, 0x24, 0x92, 0xac, 0xc0, 0x18, 0x21, 0x31, 0xda, 0xae, 0x67, 0x37, 0x49, 0xdd, + 0xeb, 0x4f, 0xf3, 0x0f, 0x6f, 0xd1, 0xb5, 0x52, 0xc0, 0xb0, 0x25, 0x1f, 0x55, 0x2a, 0x01, 0xf9, + 0xe4, 0x54, 0x43, 0x46, 0x23, 0x86, 0xe1, 0x75, 0xe6, 0x88, 0x6f, 0x5f, 0x7a, 0x0c, 0x26, 0xf1, + 0xdf, 0xa4, 0x2c, 0x89, 0x9e, 0xc4, 0x5f, 0x78, 0x15, 0x7f, 0xf0, 0x02, 0x5d, 0x8e, 0x13, 0x3e, + 0x81, 0xe0, 0x93, 0x30, 0x8b, 0x75, 0xe4, 0x79, 0xc8, 0x71, 0x35, 0xbd, 0x11, 0xe5, 0x9e, 0x70, + 0x63, 0x50, 0xfc, 0xc2, 0x3b, 0xc1, 0x59, 0x5c, 0xa1, 0xc8, 0x72, 0xa3, 0x51, 0xda, 0x81, 0x1b, + 0x23, 0xb2, 0x62, 0x00, 0xce, 0x97, 0x18, 0xe7, 0x64, 0x57, 0x66, 0x60, 0xda, 0x2d, 0xe0, 0xed, + 0xfe, 0x5c, 0x0e, 0xc0, 0xf9, 0xfb, 0x8c, 0x53, 0x61, 0x58, 0x3e, 0xa5, 0x98, 0xf1, 0x11, 0x18, + 0xbf, 0x82, 0x9c, 0x5d, 0xdb, 0x65, 0xb7, 0x34, 0x03, 0xd0, 0xbd, 0xcc, 0xe8, 0xc6, 0x18, 0x90, + 0x5c, 0xdb, 0x60, 0xae, 0x07, 0x20, 0xb3, 0xa7, 0x1b, 0x68, 0x00, 0x8a, 0x2f, 0x32, 0x8a, 0x11, + 0x6c, 0x8f, 0xa1, 0x65, 0xc8, 0xd7, 0x6d, 0xb6, 0x33, 0xc5, 0xc3, 0x5f, 0x61, 0xf0, 0x1c, 0xc7, + 0x30, 0x8a, 0x96, 0xdd, 0x6a, 0x37, 0xf0, 0xb6, 0x15, 0x4f, 0xf1, 0x07, 0x9c, 0x82, 0x63, 0x18, + 0xc5, 0x11, 0xc2, 0xfa, 0x87, 0x9c, 0xc2, 0x15, 0xe2, 0xf9, 0x30, 0xe4, 0x6c, 0xab, 0x71, 0x60, + 0x5b, 0x83, 0x38, 0xf1, 0x2a, 0x63, 0x00, 0x06, 0xc1, 0x04, 0x17, 0x20, 0x3b, 0xe8, 0x44, 0xfc, + 0xf1, 0x3b, 0x7c, 0x79, 0xf0, 0x19, 0x58, 0x81, 0x31, 0x5e, 0xa0, 0x4c, 0xdb, 0x1a, 0x80, 0xe2, + 0xcb, 0x8c, 0xa2, 0x20, 0xc0, 0xd8, 0x30, 0x3c, 0xe4, 0x7a, 0x75, 0x34, 0x08, 0xc9, 0x6b, 0x7c, + 0x18, 0x0c, 0xc2, 0x42, 0xb9, 0x8b, 0x2c, 0x63, 0x7f, 0x30, 0x86, 0xaf, 0xf0, 0x50, 0x72, 0x0c, + 0xa6, 0x58, 0x82, 0xd1, 0xa6, 0xee, 0xb8, 0xfb, 0x7a, 0x63, 0xa0, 0xe9, 0xf8, 0x13, 0xc6, 0x91, + 0xf7, 0x41, 0x2c, 0x22, 0x6d, 0xeb, 0x28, 0x34, 0x5f, 0xe5, 0x11, 0x11, 0x60, 0x6c, 0xe9, 0xb9, + 0x1e, 0xb9, 0xd2, 0x3a, 0x0a, 0xdb, 0x9f, 0xf2, 0xa5, 0x47, 0xb1, 0xeb, 0x22, 0xe3, 0x05, 0xc8, + 0xba, 0xe6, 0xf3, 0x03, 0xd1, 0xfc, 0x19, 0x9f, 0x69, 0x02, 0xc0, 0xe0, 0x27, 0xe1, 0xa6, 0xc8, + 0x6d, 0x62, 0x00, 0xb2, 0x3f, 0x67, 0x64, 0xc7, 0x22, 0xb6, 0x0a, 0x56, 0x12, 0x8e, 0x4a, 0xf9, + 0x17, 0xbc, 0x24, 0xa0, 0x10, 0xd7, 0x16, 0x3e, 0x2b, 0xb8, 0xfa, 0xde, 0xd1, 0xa2, 0xf6, 0x97, + 0x3c, 0x6a, 0x14, 0x1b, 0x88, 0xda, 0x36, 0x1c, 0x63, 0x8c, 0x47, 0x9b, 0xd7, 0xaf, 0xf1, 0xc2, + 0x4a, 0xd1, 0x3b, 0xc1, 0xd9, 0xfd, 0x1c, 0x4c, 0xf9, 0xe1, 0xe4, 0xa2, 0xd4, 0xd5, 0x9a, 0x7a, + 0x6b, 0x00, 0xe6, 0xaf, 0x33, 0x66, 0x5e, 0xf1, 0x7d, 0x55, 0xeb, 0xae, 0xeb, 0x2d, 0x4c, 0xfe, + 0x04, 0x14, 0x39, 0x79, 0xdb, 0x72, 0x90, 0x61, 0xd7, 0x2d, 0xf3, 0x79, 0x54, 0x1b, 0x80, 0xfa, + 0xaf, 0x42, 0x53, 0xb5, 0x23, 0xc0, 0x31, 0xf3, 0x2a, 0xc8, 0xbe, 0x56, 0xd1, 0xcc, 0x66, 0xcb, + 0x76, 0xbc, 0x18, 0xc6, 0x6f, 0xf0, 0x99, 0xf2, 0x71, 0xab, 0x04, 0x56, 0xaa, 0x40, 0x81, 0x3c, + 0x0e, 0x9a, 0x92, 0x7f, 0xcd, 0x88, 0x46, 0x3b, 0x28, 0x56, 0x38, 0x0c, 0xbb, 0xd9, 0xd2, 0x9d, + 0x41, 0xea, 0xdf, 0xdf, 0xf0, 0xc2, 0xc1, 0x20, 0xac, 0x70, 0x78, 0x07, 0x2d, 0x84, 0x77, 0xfb, + 0x01, 0x18, 0xbe, 0xc9, 0x0b, 0x07, 0xc7, 0x30, 0x0a, 0x2e, 0x18, 0x06, 0xa0, 0xf8, 0x5b, 0x4e, + 0xc1, 0x31, 0x98, 0xe2, 0xb3, 0x9d, 0x8d, 0xd6, 0x41, 0x75, 0xd3, 0xf5, 0x1c, 0x2a, 0x85, 0xfb, + 0x53, 0x7d, 0xeb, 0x9d, 0xa0, 0x08, 0x53, 0x05, 0x28, 0xae, 0x44, 0xec, 0x0a, 0x95, 0x9c, 0x94, + 0xe2, 0x1d, 0xfb, 0x36, 0xaf, 0x44, 0x02, 0x0c, 0xfb, 0x26, 0x28, 0x44, 0x1c, 0x76, 0x03, 0x9f, + 0x0f, 0x06, 0xa0, 0xfb, 0x4e, 0xc8, 0xb9, 0x2a, 0xc7, 0x62, 0x4e, 0x41, 0xff, 0xb4, 0xad, 0xcb, + 0xe8, 0x60, 0xa0, 0xec, 0xfc, 0xbb, 0x90, 0xfe, 0xd9, 0xa1, 0x48, 0x5a, 0x43, 0xc6, 0x42, 0x7a, + 0x4a, 0x89, 0xfb, 0xb1, 0x4e, 0xf1, 0x17, 0xde, 0x63, 0xe3, 0x0d, 0xca, 0xa9, 0xd2, 0x1a, 0x4e, + 0xf2, 0xa0, 0xe8, 0x89, 0x27, 0x7b, 0xe1, 0x3d, 0x3f, 0xcf, 0x03, 0x9a, 0xa7, 0x74, 0x11, 0x46, + 0x03, 0x82, 0x27, 0x9e, 0xea, 0x17, 0x19, 0x55, 0x5e, 0xd4, 0x3b, 0xa5, 0xb3, 0x90, 0xc2, 0xe2, + 0x25, 0x1e, 0xfe, 0x4b, 0x0c, 0x4e, 0xcc, 0x4b, 0x0f, 0x42, 0x86, 0x8b, 0x96, 0x78, 0xe8, 0x2f, + 0x33, 0xa8, 0x0f, 0xc1, 0x70, 0x2e, 0x58, 0xe2, 0xe1, 0xbf, 0xc2, 0xe1, 0x1c, 0x82, 0xe1, 0x83, + 0x87, 0xf0, 0xbb, 0xbf, 0x9a, 0x62, 0x9b, 0x0e, 0x8f, 0xdd, 0x05, 0x18, 0x61, 0x4a, 0x25, 0x1e, + 0xfd, 0x79, 0xd6, 0x39, 0x47, 0x94, 0xee, 0x87, 0xf4, 0x80, 0x01, 0xff, 0x35, 0x06, 0xa5, 0xf6, + 0xa5, 0x25, 0xc8, 0x09, 0xea, 0x24, 0x1e, 0xfe, 0xeb, 0x0c, 0x2e, 0xa2, 0xb0, 0xeb, 0x4c, 0x9d, + 0xc4, 0x13, 0xfc, 0x06, 0x77, 0x9d, 0x21, 0x70, 0xd8, 0xb8, 0x30, 0x89, 0x47, 0xff, 0x26, 0x8f, + 0x3a, 0x87, 0x94, 0x1e, 0x86, 0xac, 0xbf, 0xd9, 0xc4, 0xe3, 0x7f, 0x8b, 0xe1, 0x3b, 0x18, 0x1c, + 0x01, 0x61, 0xb3, 0x8b, 0xa7, 0xf8, 0x6d, 0x1e, 0x01, 0x01, 0x85, 0x97, 0x51, 0x58, 0xc0, 0xc4, + 0x33, 0xfd, 0x0e, 0x5f, 0x46, 0x21, 0xfd, 0x82, 0x67, 0x93, 0xd4, 0xfc, 0x78, 0x8a, 0xdf, 0xe5, + 0xb3, 0x49, 0xec, 0xb1, 0x1b, 0x61, 0x45, 0x10, 0xcf, 0xf1, 0x7b, 0xdc, 0x8d, 0x90, 0x20, 0x28, + 0x6d, 0x81, 0xd2, 0xad, 0x06, 0xe2, 0xf9, 0x5e, 0x64, 0x7c, 0xe3, 0x5d, 0x62, 0xa0, 0xf4, 0x38, + 0x1c, 0x8b, 0x56, 0x02, 0xf1, 0xac, 0x5f, 0x78, 0x2f, 0x74, 0x76, 0x13, 0x85, 0x40, 0x69, 0xbb, + 0xb3, 0xa5, 0x88, 0x2a, 0x20, 0x9e, 0xf6, 0xa5, 0xf7, 0x82, 0x85, 0x5b, 0x14, 0x01, 0xa5, 0x32, + 0x40, 0x67, 0x03, 0x8e, 0xe7, 0x7a, 0x99, 0x71, 0x09, 0x20, 0xbc, 0x34, 0xd8, 0xfe, 0x1b, 0x8f, + 0xff, 0x22, 0x5f, 0x1a, 0x0c, 0x81, 0x97, 0x06, 0xdf, 0x7a, 0xe3, 0xd1, 0xaf, 0xf0, 0xa5, 0xc1, + 0x21, 0x38, 0xb3, 0x85, 0xdd, 0x2d, 0x9e, 0xe1, 0x55, 0x9e, 0xd9, 0x02, 0xaa, 0xb4, 0x01, 0xe3, + 0x5d, 0x1b, 0x62, 0x3c, 0xd5, 0x97, 0x18, 0x95, 0x1c, 0xde, 0x0f, 0xc5, 0xcd, 0x8b, 0x6d, 0x86, + 0xf1, 0x6c, 0x7f, 0x14, 0xda, 0xbc, 0xd8, 0x5e, 0x58, 0xba, 0x00, 0x19, 0xab, 0xdd, 0x68, 0xe0, + 0xc5, 0xa3, 0xf4, 0xff, 0x81, 0x5d, 0xf1, 0x5f, 0x3e, 0x60, 0xd1, 0xe1, 0x80, 0xd2, 0x59, 0x48, + 0xa3, 0xe6, 0x2e, 0xaa, 0xc5, 0x21, 0xff, 0xf5, 0x03, 0x5e, 0x30, 0xb1, 0x75, 0xe9, 0x61, 0x00, + 0x7a, 0x35, 0x42, 0x3e, 0xfb, 0xc5, 0x60, 0xff, 0xed, 0x03, 0xf6, 0xd3, 0x97, 0x0e, 0xa4, 0x43, + 0x40, 0x7f, 0x48, 0xd3, 0x9f, 0xe0, 0x9d, 0x20, 0x01, 0x99, 0x91, 0x07, 0x60, 0xe4, 0x19, 0xd7, + 0xb6, 0x3c, 0xbd, 0x1e, 0x87, 0xfe, 0x77, 0x86, 0xe6, 0xf6, 0x38, 0x60, 0x4d, 0xdb, 0x41, 0x9e, + 0x5e, 0x77, 0xe3, 0xb0, 0xff, 0xc1, 0xb0, 0x3e, 0x00, 0x83, 0x0d, 0xdd, 0xf5, 0x06, 0x19, 0xf7, + 0x4f, 0x39, 0x98, 0x03, 0xb0, 0xd3, 0xf8, 0xef, 0xcb, 0xe8, 0x20, 0x0e, 0xfb, 0x2e, 0x77, 0x9a, + 0xd9, 0x97, 0x1e, 0x84, 0x2c, 0xfe, 0x93, 0xfe, 0x9e, 0x2d, 0x06, 0xfc, 0x9f, 0x0c, 0xdc, 0x41, + 0xe0, 0x9e, 0x5d, 0xaf, 0xe6, 0x99, 0xf1, 0xc1, 0xfe, 0x2f, 0x36, 0xd3, 0xdc, 0xbe, 0x54, 0x86, + 0x9c, 0xeb, 0xd5, 0x6a, 0x6d, 0xa6, 0x4f, 0x63, 0xe0, 0xff, 0xfd, 0x81, 0x7f, 0x65, 0xe1, 0x63, + 0xf0, 0x6c, 0x5f, 0xbd, 0xec, 0xb5, 0x6c, 0xf2, 0x99, 0x23, 0x8e, 0xe1, 0x3d, 0xc6, 0x20, 0x40, + 0x16, 0x2b, 0xd1, 0xd7, 0xb7, 0xb0, 0x62, 0xaf, 0xd8, 0xf4, 0xe2, 0xf6, 0xa9, 0x99, 0xf8, 0x1b, + 0x58, 0xf8, 0x9f, 0xbb, 0xe1, 0x16, 0xc3, 0x6e, 0xee, 0xda, 0xee, 0xbc, 0x50, 0xcc, 0xe7, 0x9b, + 0x7a, 0xcb, 0x25, 0x06, 0x0b, 0xec, 0x7a, 0x36, 0xc7, 0x9e, 0xf0, 0x8b, 0xa9, 0xa3, 0x5d, 0xed, + 0xce, 0xdc, 0x0c, 0xa3, 0x17, 0x1b, 0xb6, 0xee, 0x99, 0x56, 0x7d, 0x0b, 0x7b, 0xaf, 0xe4, 0x41, + 0xda, 0x23, 0x9f, 0x26, 0x25, 0x55, 0xda, 0x9b, 0xf9, 0xc7, 0x34, 0x64, 0xe9, 0xad, 0xe0, 0xba, + 0xde, 0x52, 0x7e, 0x1e, 0xf2, 0x1b, 0x6c, 0x29, 0xde, 0xbb, 0x70, 0xde, 0xf5, 0xbf, 0x42, 0x08, + 0xfd, 0xcf, 0xf9, 0xd6, 0x73, 0xa2, 0x29, 0xf9, 0x29, 0xc2, 0xe2, 0x3d, 0x3f, 0x7a, 0xe3, 0xf8, + 0x5d, 0x3d, 0xfd, 0xc3, 0xe2, 0x62, 0x9e, 0xae, 0x99, 0xb9, 0x1d, 0xd3, 0xf2, 0xee, 0x5d, 0x38, + 0xaf, 0x06, 0xfa, 0x53, 0xae, 0x40, 0x86, 0xbd, 0x70, 0xd9, 0xd7, 0xa9, 0x5b, 0x7b, 0xf4, 0xcd, + 0xcd, 0x68, 0xbf, 0x67, 0x5e, 0x7f, 0xe3, 0xf8, 0xd0, 0x91, 0xfb, 0xf6, 0xfb, 0x52, 0x9e, 0x85, + 0x1c, 0xf7, 0x63, 0xb5, 0xe6, 0xb2, 0xff, 0x8d, 0x70, 0x47, 0xcc, 0xb0, 0x57, 0x6b, 0xac, 0xf7, + 0xdb, 0x7f, 0xf4, 0xc6, 0xf1, 0x99, 0xbe, 0x3d, 0xcf, 0xed, 0xb4, 0xcd, 0x9a, 0x2a, 0xf6, 0xa1, + 0x3c, 0x0d, 0x49, 0xdc, 0x15, 0xfd, 0x01, 0xe7, 0xf1, 0x1e, 0x5d, 0xf9, 0x5d, 0x9c, 0x62, 0x03, + 0x1c, 0xa4, 0x1b, 0xcc, 0x3b, 0xf5, 0x30, 0x8c, 0x77, 0x4d, 0x8f, 0x22, 0x43, 0xf2, 0x32, 0x3a, + 0x60, 0xbf, 0x94, 0xc3, 0x7f, 0x2a, 0x93, 0x9d, 0x9f, 0xb2, 0x4a, 0xb3, 0x79, 0xf6, 0xfb, 0xd4, + 0x52, 0xe2, 0xbc, 0x34, 0x75, 0x01, 0x46, 0x03, 0x31, 0x3e, 0x12, 0xf8, 0x21, 0x90, 0xc3, 0x51, + 0x3a, 0x12, 0xfe, 0x1c, 0x64, 0x3e, 0x0c, 0x6e, 0xe6, 0x87, 0x0a, 0x8c, 0x94, 0x1b, 0x8d, 0x75, + 0xbd, 0xe5, 0x2a, 0x4f, 0xc2, 0x38, 0x3d, 0x02, 0x6d, 0xdb, 0xcb, 0xe4, 0x7b, 0xe0, 0xba, 0xde, + 0x62, 0x09, 0x7d, 0x3a, 0x10, 0x6e, 0x06, 0x98, 0xeb, 0xb2, 0x26, 0xfd, 0xab, 0xdd, 0x2c, 0xca, + 0x63, 0x20, 0xf3, 0x46, 0xb2, 0xb6, 0x30, 0x33, 0x4d, 0xd7, 0x53, 0x7d, 0x99, 0xb9, 0x31, 0x25, + 0xee, 0xe2, 0x50, 0x1e, 0x82, 0xcc, 0xaa, 0xe5, 0xdd, 0xb7, 0x80, 0xf9, 0x68, 0x0e, 0xce, 0x44, + 0xf2, 0x71, 0x23, 0xca, 0xe3, 0x63, 0x18, 0xfe, 0xdc, 0x19, 0x8c, 0x4f, 0xf5, 0xc7, 0x13, 0xa3, + 0x0e, 0x9e, 0x3c, 0x2a, 0x65, 0xc8, 0xe2, 0x39, 0xa7, 0x0e, 0xd0, 0xff, 0x08, 0x73, 0x4b, 0x24, + 0x81, 0x6f, 0x45, 0x19, 0x3a, 0x28, 0x4e, 0x41, 0x7d, 0x18, 0x8e, 0xa1, 0x10, 0x9c, 0xe8, 0xa0, + 0x30, 0x45, 0xd5, 0xf7, 0x62, 0xa4, 0x0f, 0x45, 0x35, 0xe4, 0x45, 0x55, 0xf4, 0xa2, 0xea, 0x7b, + 0x91, 0x89, 0xa1, 0x10, 0xbd, 0xf0, 0x9f, 0x95, 0x65, 0x80, 0x8b, 0xe6, 0x73, 0xa8, 0x46, 0xdd, + 0xc8, 0x46, 0x14, 0x23, 0xce, 0xd1, 0x31, 0xa3, 0x24, 0x02, 0x4e, 0x59, 0x81, 0x5c, 0x75, 0xaf, + 0x43, 0x03, 0xec, 0xff, 0x01, 0x45, 0xba, 0xb2, 0x17, 0xe2, 0x11, 0x91, 0xbe, 0x3b, 0x74, 0x48, + 0xb9, 0x38, 0x77, 0x84, 0x31, 0x09, 0xb8, 0x8e, 0x3b, 0x94, 0x26, 0x1f, 0xeb, 0x8e, 0xc0, 0x23, + 0x22, 0x95, 0x0b, 0x30, 0xb2, 0x68, 0xdb, 0xd8, 0xb2, 0x38, 0x4a, 0x48, 0x4e, 0x46, 0x92, 0x30, + 0x1b, 0x4a, 0xc0, 0x11, 0x64, 0x76, 0x48, 0xea, 0x63, 0x78, 0xa1, 0xdf, 0xec, 0x70, 0x2b, 0x3e, + 0x3b, 0xfc, 0x59, 0x5c, 0x81, 0x8b, 0x07, 0x1e, 0xc2, 0xc7, 0x8d, 0xe2, 0xd8, 0x00, 0x2b, 0x90, + 0x1b, 0x87, 0x56, 0x20, 0x6f, 0x56, 0xaa, 0x30, 0xc6, 0xdb, 0x2a, 0x56, 0x1b, 0xd7, 0xe0, 0xa2, + 0xcc, 0x7e, 0xe4, 0xdf, 0x8f, 0x96, 0xd9, 0x52, 0xd6, 0x30, 0x83, 0xb2, 0x05, 0x05, 0xde, 0xb4, + 0xee, 0x92, 0x41, 0x8f, 0x47, 0xec, 0xab, 0x61, 0x4e, 0x6a, 0x4a, 0x29, 0x43, 0xf8, 0xa9, 0x65, + 0x38, 0x16, 0x5d, 0xad, 0xe2, 0xaa, 0xa5, 0x24, 0x56, 0xd9, 0x25, 0xb8, 0x21, 0xb2, 0x32, 0xc5, + 0x91, 0x24, 0x42, 0xfb, 0x44, 0xa0, 0x1c, 0x89, 0xe0, 0x74, 0x04, 0x38, 0xdd, 0x0d, 0xee, 0x24, + 0x99, 0x08, 0x4e, 0x46, 0x80, 0x93, 0x22, 0xf8, 0x33, 0x50, 0x08, 0xd6, 0x21, 0x11, 0x3d, 0x1a, + 0x81, 0x1e, 0x8d, 0x40, 0x47, 0xf7, 0x9d, 0x8a, 0x40, 0xa7, 0x42, 0xe8, 0x6a, 0xcf, 0xbe, 0xc7, + 0x23, 0xd0, 0xe3, 0x11, 0xe8, 0xe8, 0xbe, 0x95, 0x08, 0xb4, 0x22, 0xa2, 0x1f, 0x84, 0xb1, 0x50, + 0xc9, 0x11, 0xe1, 0x23, 0x11, 0xf0, 0x91, 0xd0, 0xde, 0x1c, 0x2e, 0x35, 0x22, 0x7e, 0x2c, 0x02, + 0x3f, 0x16, 0xd5, 0x7d, 0xb4, 0xf7, 0xc3, 0x11, 0xf0, 0xe1, 0xc8, 0xee, 0xa3, 0xf1, 0x72, 0x04, + 0x5e, 0x16, 0xf1, 0x25, 0xc8, 0x8b, 0x55, 0x45, 0xc4, 0x66, 0x22, 0xb0, 0x99, 0x70, 0xdc, 0x03, + 0x25, 0x25, 0x2e, 0xd3, 0xb3, 0x3d, 0x96, 0x4b, 0xa0, 0x8c, 0x1c, 0x49, 0xd9, 0x3c, 0x01, 0x93, + 0x51, 0x45, 0x23, 0x82, 0xe3, 0x94, 0xc8, 0x51, 0x58, 0x98, 0x0c, 0x14, 0x0b, 0x82, 0x6b, 0x37, + 0x45, 0xe6, 0xa7, 0x61, 0x22, 0xa2, 0x74, 0x44, 0x10, 0xdf, 0x23, 0x12, 0xe7, 0x16, 0xa6, 0x02, + 0xc4, 0x81, 0xb3, 0x82, 0x28, 0xad, 0x7e, 0x3c, 0x01, 0x05, 0x56, 0xa2, 0x36, 0x9d, 0x1a, 0x72, + 0x50, 0x4d, 0xf9, 0xff, 0xbd, 0x15, 0xd6, 0x42, 0x54, 0x69, 0x63, 0xb8, 0x23, 0x08, 0xad, 0xa7, + 0x7b, 0x0a, 0xad, 0x7b, 0x07, 0xe9, 0x20, 0x4e, 0x6f, 0x55, 0xba, 0xf4, 0xd6, 0x9d, 0xfd, 0x68, + 0x7b, 0xc9, 0xae, 0x4a, 0x97, 0xec, 0x8a, 0xa3, 0x89, 0x54, 0x5f, 0x97, 0xba, 0xd5, 0xd7, 0xa9, + 0x7e, 0x3c, 0xbd, 0x45, 0xd8, 0xa5, 0x6e, 0x11, 0x16, 0xcb, 0x14, 0xad, 0xc5, 0x2e, 0x75, 0x6b, + 0xb1, 0xbe, 0x4c, 0xbd, 0x25, 0xd9, 0xa5, 0x6e, 0x49, 0x16, 0xcb, 0x14, 0xad, 0xcc, 0x1e, 0x8d, + 0x50, 0x66, 0xa7, 0xfb, 0x51, 0xf5, 0x13, 0x68, 0x1b, 0x51, 0x02, 0xed, 0xae, 0xbe, 0x8e, 0xf5, + 0xd5, 0x69, 0x8f, 0x46, 0xe8, 0xb4, 0x78, 0xe7, 0x7a, 0xc8, 0xb5, 0x8d, 0x28, 0xb9, 0x36, 0x80, + 0x73, 0xbd, 0x54, 0xdb, 0x62, 0x58, 0xb5, 0xcd, 0xf6, 0xe3, 0x8a, 0x16, 0x6f, 0x97, 0xba, 0xc5, + 0xdb, 0xa9, 0xf8, 0xb5, 0x18, 0xa5, 0xe1, 0x9e, 0xee, 0xa9, 0xe1, 0x06, 0x5a, 0xdc, 0x71, 0x52, + 0xee, 0xa9, 0x5e, 0x52, 0xee, 0x9e, 0x41, 0xd8, 0xfb, 0x2b, 0xba, 0xc7, 0x7b, 0x28, 0xba, 0xf9, + 0x41, 0xa8, 0x3f, 0x11, 0x76, 0x9f, 0x08, 0xbb, 0x4f, 0x84, 0xdd, 0x27, 0xc2, 0xee, 0xff, 0x86, + 0xb0, 0x2b, 0xa5, 0x5e, 0x7c, 0xf5, 0xb8, 0x74, 0xea, 0x24, 0x8c, 0xb0, 0xae, 0x95, 0x61, 0x48, + 0xac, 0x97, 0xe5, 0x21, 0xf2, 0xef, 0xa2, 0x2c, 0x91, 0x7f, 0x97, 0xe4, 0xc4, 0xe2, 0xda, 0xeb, + 0xd7, 0xa7, 0x87, 0xbe, 0x7f, 0x7d, 0x7a, 0xe8, 0x87, 0xd7, 0xa7, 0x87, 0xde, 0xbc, 0x3e, 0x2d, + 0xbd, 0x7d, 0x7d, 0x5a, 0x7a, 0xf7, 0xfa, 0xb4, 0xf4, 0xfe, 0xf5, 0x69, 0xe9, 0xda, 0xe1, 0xb4, + 0xf4, 0x95, 0xc3, 0x69, 0xe9, 0x6b, 0x87, 0xd3, 0xd2, 0xb7, 0x0e, 0xa7, 0xa5, 0xef, 0x1e, 0x4e, + 0x4b, 0xaf, 0x1f, 0x4e, 0x0f, 0x7d, 0xff, 0x70, 0x5a, 0x7a, 0xf3, 0x70, 0x5a, 0x7a, 0xfb, 0x70, + 0x7a, 0xe8, 0xdd, 0xc3, 0x69, 0xe9, 0xfd, 0xc3, 0xe9, 0xa1, 0x6b, 0x3f, 0x99, 0x1e, 0xfa, 0xdf, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x04, 0x5c, 0xe3, 0x45, 0x97, 0x49, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2769,6 +2774,9 @@ return dAtA } func (m *FloatingPoint) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F != nil { @@ -2781,6 +2789,9 @@ } func (m *CustomMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Nullable128S) > 0 { @@ -2838,6 +2849,9 @@ } func (m *AllMaps) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -2992,6 +3006,9 @@ } func (m *AllMapsOrdered) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/mapsproto2/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/mapsproto2/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -32,4 +32,4 @@ cp header.proto mapsproto2.proto cat ../theproto3/maps.proto >> mapsproto2.proto find combos -type d -not -name combos -exec cp mapsproto2_test.go.in {}/mapsproto2_test.go \; - protoc-gen-combo --version="3.0.0" --gogo_out=. --proto_path=../../../../../:../../protobuf/:. mapsproto2.proto + protoc-gen-combo --version="3.0.0" --gogo_out=. --proto_path=../../protobuf/:../../../../../:. mapsproto2.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/nopackage/nopackage.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/nopackage/nopackage.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/nopackage/nopackage.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/nopackage/nopackage.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -121,6 +121,9 @@ return offset + 1 } func (m *M) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.F) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/combos/both/one.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/combos/both/one.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/combos/both/one.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/combos/both/one.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1100,269 +1100,274 @@ func OneDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4179 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x6b, 0x6c, 0xe4, 0xd6, - 0x75, 0x16, 0xe7, 0x21, 0xcd, 0x9c, 0x19, 0x8d, 0xa8, 0x2b, 0xed, 0xee, 0xac, 0x1c, 0xcf, 0xee, - 0x8e, 0xed, 0x58, 0xb6, 0x63, 0xc9, 0xd6, 0x4a, 0xfb, 0x98, 0x6d, 0xe2, 0x8e, 0xa4, 0x59, 0xad, - 0x5c, 0x49, 0xa3, 0x50, 0x52, 0xfc, 0x08, 0x0a, 0x82, 0xe2, 0x5c, 0x8d, 0xb8, 0xcb, 0x21, 0x19, - 0x92, 0xb3, 0x6b, 0x2d, 0xfa, 0x63, 0x0b, 0xf7, 0x81, 0xa0, 0xe8, 0x2b, 0x2d, 0xd0, 0xc4, 0x75, - 0xdc, 0xa6, 0x40, 0xea, 0x34, 0x7d, 0x25, 0x4d, 0x9b, 0x26, 0xfd, 0xd5, 0x3f, 0x69, 0xfd, 0xab, - 0x70, 0xfe, 0x15, 0x45, 0x61, 0x78, 0x15, 0x03, 0x4d, 0x5b, 0xb7, 0x71, 0x5b, 0x17, 0x30, 0xea, - 0x3f, 0xc5, 0x7d, 0x91, 0x9c, 0x87, 0x96, 0xa3, 0x20, 0xb6, 0x7f, 0x49, 0x3c, 0xe7, 0x7c, 0x1f, - 0xcf, 0x3d, 0xf7, 0xdc, 0x73, 0xcf, 0xbd, 0x1c, 0xf8, 0xd1, 0x65, 0x38, 0xdb, 0xb4, 0xed, 0xa6, - 0x89, 0x67, 0x1d, 0xd7, 0xf6, 0xed, 0xdd, 0xf6, 0xde, 0x6c, 0x03, 0x7b, 0xba, 0x6b, 0x38, 0xbe, - 0xed, 0xce, 0x50, 0x19, 0x1a, 0x63, 0x16, 0x33, 0xc2, 0xa2, 0xbc, 0x0e, 0xe3, 0x57, 0x0d, 0x13, - 0x2f, 0x07, 0x86, 0x5b, 0xd8, 0x47, 0x97, 0x20, 0xb5, 0x67, 0x98, 0xb8, 0x28, 0x9d, 0x4d, 0x4e, - 0xe7, 0xe6, 0x1e, 0x9c, 0xe9, 0x02, 0xcd, 0x74, 0x22, 0x36, 0x89, 0x58, 0xa1, 0x88, 0xf2, 0x5b, - 0x29, 0x98, 0xe8, 0xa3, 0x45, 0x08, 0x52, 0x96, 0xd6, 0x22, 0x8c, 0xd2, 0x74, 0x56, 0xa1, 0xff, - 0xa3, 0x22, 0x8c, 0x38, 0x9a, 0x7e, 0x43, 0x6b, 0xe2, 0x62, 0x82, 0x8a, 0xc5, 0x23, 0x2a, 0x01, - 0x34, 0xb0, 0x83, 0xad, 0x06, 0xb6, 0xf4, 0x83, 0x62, 0xf2, 0x6c, 0x72, 0x3a, 0xab, 0x44, 0x24, - 0xe8, 0x31, 0x18, 0x77, 0xda, 0xbb, 0xa6, 0xa1, 0xab, 0x11, 0x33, 0x38, 0x9b, 0x9c, 0x4e, 0x2b, - 0x32, 0x53, 0x2c, 0x87, 0xc6, 0x0f, 0xc3, 0xd8, 0x2d, 0xac, 0xdd, 0x88, 0x9a, 0xe6, 0xa8, 0x69, - 0x81, 0x88, 0x23, 0x86, 0x4b, 0x90, 0x6f, 0x61, 0xcf, 0xd3, 0x9a, 0x58, 0xf5, 0x0f, 0x1c, 0x5c, - 0x4c, 0xd1, 0xd1, 0x9f, 0xed, 0x19, 0x7d, 0xf7, 0xc8, 0x73, 0x1c, 0xb5, 0x7d, 0xe0, 0x60, 0x54, - 0x85, 0x2c, 0xb6, 0xda, 0x2d, 0xc6, 0x90, 0x3e, 0x22, 0x7e, 0x35, 0xab, 0xdd, 0xea, 0x66, 0xc9, - 0x10, 0x18, 0xa7, 0x18, 0xf1, 0xb0, 0x7b, 0xd3, 0xd0, 0x71, 0x71, 0x98, 0x12, 0x3c, 0xdc, 0x43, - 0xb0, 0xc5, 0xf4, 0xdd, 0x1c, 0x02, 0x87, 0x96, 0x20, 0x8b, 0x5f, 0xf0, 0xb1, 0xe5, 0x19, 0xb6, - 0x55, 0x1c, 0xa1, 0x24, 0x0f, 0xf5, 0x99, 0x45, 0x6c, 0x36, 0xba, 0x29, 0x42, 0x1c, 0xba, 0x00, - 0x23, 0xb6, 0xe3, 0x1b, 0xb6, 0xe5, 0x15, 0x33, 0x67, 0xa5, 0xe9, 0xdc, 0xdc, 0xc7, 0xfa, 0x26, - 0x42, 0x9d, 0xd9, 0x28, 0xc2, 0x18, 0xad, 0x82, 0xec, 0xd9, 0x6d, 0x57, 0xc7, 0xaa, 0x6e, 0x37, - 0xb0, 0x6a, 0x58, 0x7b, 0x76, 0x31, 0x4b, 0x09, 0xce, 0xf4, 0x0e, 0x84, 0x1a, 0x2e, 0xd9, 0x0d, - 0xbc, 0x6a, 0xed, 0xd9, 0x4a, 0xc1, 0xeb, 0x78, 0x46, 0x27, 0x61, 0xd8, 0x3b, 0xb0, 0x7c, 0xed, - 0x85, 0x62, 0x9e, 0x66, 0x08, 0x7f, 0x2a, 0x7f, 0x77, 0x18, 0xc6, 0x06, 0x49, 0xb1, 0x2b, 0x90, - 0xde, 0x23, 0xa3, 0x2c, 0x26, 0x8e, 0x13, 0x03, 0x86, 0xe9, 0x0c, 0xe2, 0xf0, 0x8f, 0x19, 0xc4, - 0x2a, 0xe4, 0x2c, 0xec, 0xf9, 0xb8, 0xc1, 0x32, 0x22, 0x39, 0x60, 0x4e, 0x01, 0x03, 0xf5, 0xa6, - 0x54, 0xea, 0xc7, 0x4a, 0xa9, 0x67, 0x61, 0x2c, 0x70, 0x49, 0x75, 0x35, 0xab, 0x29, 0x72, 0x73, - 0x36, 0xce, 0x93, 0x99, 0x9a, 0xc0, 0x29, 0x04, 0xa6, 0x14, 0x70, 0xc7, 0x33, 0x5a, 0x06, 0xb0, - 0x2d, 0x6c, 0xef, 0xa9, 0x0d, 0xac, 0x9b, 0xc5, 0xcc, 0x11, 0x51, 0xaa, 0x13, 0x93, 0x9e, 0x28, - 0xd9, 0x4c, 0xaa, 0x9b, 0xe8, 0x72, 0x98, 0x6a, 0x23, 0x47, 0x64, 0xca, 0x3a, 0x5b, 0x64, 0x3d, - 0xd9, 0xb6, 0x03, 0x05, 0x17, 0x93, 0xbc, 0xc7, 0x0d, 0x3e, 0xb2, 0x2c, 0x75, 0x62, 0x26, 0x76, - 0x64, 0x0a, 0x87, 0xb1, 0x81, 0x8d, 0xba, 0xd1, 0x47, 0xf4, 0x00, 0x04, 0x02, 0x95, 0xa6, 0x15, - 0xd0, 0x2a, 0x94, 0x17, 0xc2, 0x0d, 0xad, 0x85, 0xa7, 0x6e, 0x43, 0xa1, 0x33, 0x3c, 0x68, 0x12, - 0xd2, 0x9e, 0xaf, 0xb9, 0x3e, 0xcd, 0xc2, 0xb4, 0xc2, 0x1e, 0x90, 0x0c, 0x49, 0x6c, 0x35, 0x68, - 0x95, 0x4b, 0x2b, 0xe4, 0x5f, 0xf4, 0xd3, 0xe1, 0x80, 0x93, 0x74, 0xc0, 0x1f, 0xef, 0x9d, 0xd1, - 0x0e, 0xe6, 0xee, 0x71, 0x4f, 0x5d, 0x84, 0xd1, 0x8e, 0x01, 0x0c, 0xfa, 0xea, 0xf2, 0xcf, 0xc1, - 0x89, 0xbe, 0xd4, 0xe8, 0x59, 0x98, 0x6c, 0x5b, 0x86, 0xe5, 0x63, 0xd7, 0x71, 0x31, 0xc9, 0x58, - 0xf6, 0xaa, 0xe2, 0xbf, 0x8c, 0x1c, 0x91, 0x73, 0x3b, 0x51, 0x6b, 0xc6, 0xa2, 0x4c, 0xb4, 0x7b, - 0x85, 0x8f, 0x66, 0x33, 0x3f, 0x1c, 0x91, 0xef, 0xdc, 0xb9, 0x73, 0x27, 0x51, 0xfe, 0xe2, 0x30, - 0x4c, 0xf6, 0x5b, 0x33, 0x7d, 0x97, 0xef, 0x49, 0x18, 0xb6, 0xda, 0xad, 0x5d, 0xec, 0xd2, 0x20, - 0xa5, 0x15, 0xfe, 0x84, 0xaa, 0x90, 0x36, 0xb5, 0x5d, 0x6c, 0x16, 0x53, 0x67, 0xa5, 0xe9, 0xc2, - 0xdc, 0x63, 0x03, 0xad, 0xca, 0x99, 0x35, 0x02, 0x51, 0x18, 0x12, 0x7d, 0x0a, 0x52, 0xbc, 0x44, - 0x13, 0x86, 0x47, 0x07, 0x63, 0x20, 0x6b, 0x49, 0xa1, 0x38, 0x74, 0x1f, 0x64, 0xc9, 0x5f, 0x96, - 0x1b, 0xc3, 0xd4, 0xe7, 0x0c, 0x11, 0x90, 0xbc, 0x40, 0x53, 0x90, 0xa1, 0xcb, 0xa4, 0x81, 0xc5, - 0xd6, 0x16, 0x3c, 0x93, 0xc4, 0x6a, 0xe0, 0x3d, 0xad, 0x6d, 0xfa, 0xea, 0x4d, 0xcd, 0x6c, 0x63, - 0x9a, 0xf0, 0x59, 0x25, 0xcf, 0x85, 0x9f, 0x21, 0x32, 0x74, 0x06, 0x72, 0x6c, 0x55, 0x19, 0x56, - 0x03, 0xbf, 0x40, 0xab, 0x67, 0x5a, 0x61, 0x0b, 0x6d, 0x95, 0x48, 0xc8, 0xeb, 0xaf, 0x7b, 0xb6, - 0x25, 0x52, 0x93, 0xbe, 0x82, 0x08, 0xe8, 0xeb, 0x2f, 0x76, 0x17, 0xee, 0xfb, 0xfb, 0x0f, 0xaf, - 0x3b, 0xa7, 0xca, 0xdf, 0x4e, 0x40, 0x8a, 0xd6, 0x8b, 0x31, 0xc8, 0x6d, 0x3f, 0xb7, 0x59, 0x53, - 0x97, 0xeb, 0x3b, 0x8b, 0x6b, 0x35, 0x59, 0x42, 0x05, 0x00, 0x2a, 0xb8, 0xba, 0x56, 0xaf, 0x6e, - 0xcb, 0x89, 0xe0, 0x79, 0x75, 0x63, 0xfb, 0xc2, 0xbc, 0x9c, 0x0c, 0x00, 0x3b, 0x4c, 0x90, 0x8a, - 0x1a, 0x9c, 0x9f, 0x93, 0xd3, 0x48, 0x86, 0x3c, 0x23, 0x58, 0x7d, 0xb6, 0xb6, 0x7c, 0x61, 0x5e, - 0x1e, 0xee, 0x94, 0x9c, 0x9f, 0x93, 0x47, 0xd0, 0x28, 0x64, 0xa9, 0x64, 0xb1, 0x5e, 0x5f, 0x93, - 0x33, 0x01, 0xe7, 0xd6, 0xb6, 0xb2, 0xba, 0xb1, 0x22, 0x67, 0x03, 0xce, 0x15, 0xa5, 0xbe, 0xb3, - 0x29, 0x43, 0xc0, 0xb0, 0x5e, 0xdb, 0xda, 0xaa, 0xae, 0xd4, 0xe4, 0x5c, 0x60, 0xb1, 0xf8, 0xdc, - 0x76, 0x6d, 0x4b, 0xce, 0x77, 0xb8, 0x75, 0x7e, 0x4e, 0x1e, 0x0d, 0x5e, 0x51, 0xdb, 0xd8, 0x59, - 0x97, 0x0b, 0x68, 0x1c, 0x46, 0xd9, 0x2b, 0x84, 0x13, 0x63, 0x5d, 0xa2, 0x0b, 0xf3, 0xb2, 0x1c, - 0x3a, 0xc2, 0x58, 0xc6, 0x3b, 0x04, 0x17, 0xe6, 0x65, 0x54, 0x5e, 0x82, 0x34, 0xcd, 0x2e, 0x84, - 0xa0, 0xb0, 0x56, 0x5d, 0xac, 0xad, 0xa9, 0xf5, 0xcd, 0xed, 0xd5, 0xfa, 0x46, 0x75, 0x4d, 0x96, - 0x42, 0x99, 0x52, 0xfb, 0xf4, 0xce, 0xaa, 0x52, 0x5b, 0x96, 0x13, 0x51, 0xd9, 0x66, 0xad, 0xba, - 0x5d, 0x5b, 0x96, 0x93, 0x65, 0x1d, 0x26, 0xfb, 0xd5, 0xc9, 0xbe, 0x2b, 0x23, 0x32, 0xc5, 0x89, - 0x23, 0xa6, 0x98, 0x72, 0xf5, 0x4c, 0xf1, 0x0f, 0x12, 0x30, 0xd1, 0x67, 0xaf, 0xe8, 0xfb, 0x92, - 0xa7, 0x20, 0xcd, 0x52, 0x94, 0xed, 0x9e, 0x8f, 0xf4, 0xdd, 0x74, 0x68, 0xc2, 0xf6, 0xec, 0xa0, - 0x14, 0x17, 0xed, 0x20, 0x92, 0x47, 0x74, 0x10, 0x84, 0xa2, 0xa7, 0xa6, 0xff, 0x6c, 0x4f, 0x4d, - 0x67, 0xdb, 0xde, 0x85, 0x41, 0xb6, 0x3d, 0x2a, 0x3b, 0x5e, 0x6d, 0x4f, 0xf7, 0xa9, 0xed, 0x57, - 0x60, 0xbc, 0x87, 0x68, 0xe0, 0x1a, 0xfb, 0xa2, 0x04, 0xc5, 0xa3, 0x82, 0x13, 0x53, 0xe9, 0x12, - 0x1d, 0x95, 0xee, 0x4a, 0x77, 0x04, 0xcf, 0x1d, 0x3d, 0x09, 0x3d, 0x73, 0xfd, 0xaa, 0x04, 0x27, - 0xfb, 0x77, 0x8a, 0x7d, 0x7d, 0xf8, 0x14, 0x0c, 0xb7, 0xb0, 0xbf, 0x6f, 0x8b, 0x6e, 0xe9, 0xe3, - 0x7d, 0xf6, 0x60, 0xa2, 0xee, 0x9e, 0x6c, 0x8e, 0x8a, 0x6e, 0xe2, 0xc9, 0xa3, 0xda, 0x3d, 0xe6, - 0x4d, 0x8f, 0xa7, 0x9f, 0x4f, 0xc0, 0x89, 0xbe, 0xe4, 0x7d, 0x1d, 0xbd, 0x1f, 0xc0, 0xb0, 0x9c, - 0xb6, 0xcf, 0x3a, 0x22, 0x56, 0x60, 0xb3, 0x54, 0x42, 0x8b, 0x17, 0x29, 0x9e, 0x6d, 0x3f, 0xd0, - 0x27, 0xa9, 0x1e, 0x98, 0x88, 0x1a, 0x5c, 0x0a, 0x1d, 0x4d, 0x51, 0x47, 0x4b, 0x47, 0x8c, 0xb4, - 0x27, 0x31, 0x9f, 0x00, 0x59, 0x37, 0x0d, 0x6c, 0xf9, 0xaa, 0xe7, 0xbb, 0x58, 0x6b, 0x19, 0x56, - 0x93, 0xee, 0x20, 0x99, 0x4a, 0x7a, 0x4f, 0x33, 0x3d, 0xac, 0x8c, 0x31, 0xf5, 0x96, 0xd0, 0x12, - 0x04, 0x4d, 0x20, 0x37, 0x82, 0x18, 0xee, 0x40, 0x30, 0x75, 0x80, 0x28, 0x7f, 0x2b, 0x03, 0xb9, - 0x48, 0x5f, 0x8d, 0xce, 0x41, 0xfe, 0xba, 0x76, 0x53, 0x53, 0xc5, 0x59, 0x89, 0x45, 0x22, 0x47, - 0x64, 0x9b, 0xfc, 0xbc, 0xf4, 0x04, 0x4c, 0x52, 0x13, 0xbb, 0xed, 0x63, 0x57, 0xd5, 0x4d, 0xcd, - 0xf3, 0x68, 0xd0, 0x32, 0xd4, 0x14, 0x11, 0x5d, 0x9d, 0xa8, 0x96, 0x84, 0x06, 0x2d, 0xc0, 0x04, - 0x45, 0xb4, 0xda, 0xa6, 0x6f, 0x38, 0x26, 0x56, 0xc9, 0xe9, 0xcd, 0xa3, 0x3b, 0x49, 0xe0, 0xd9, - 0x38, 0xb1, 0x58, 0xe7, 0x06, 0xc4, 0x23, 0x0f, 0x2d, 0xc3, 0xfd, 0x14, 0xd6, 0xc4, 0x16, 0x76, - 0x35, 0x1f, 0xab, 0xf8, 0x73, 0x6d, 0xcd, 0xf4, 0x54, 0xcd, 0x6a, 0xa8, 0xfb, 0x9a, 0xb7, 0x5f, - 0x9c, 0x24, 0x04, 0x8b, 0x89, 0xa2, 0xa4, 0x9c, 0x26, 0x86, 0x2b, 0xdc, 0xae, 0x46, 0xcd, 0xaa, - 0x56, 0xe3, 0x9a, 0xe6, 0xed, 0xa3, 0x0a, 0x9c, 0xa4, 0x2c, 0x9e, 0xef, 0x1a, 0x56, 0x53, 0xd5, - 0xf7, 0xb1, 0x7e, 0x43, 0x6d, 0xfb, 0x7b, 0x97, 0x8a, 0xf7, 0x45, 0xdf, 0x4f, 0x3d, 0xdc, 0xa2, - 0x36, 0x4b, 0xc4, 0x64, 0xc7, 0xdf, 0xbb, 0x84, 0xb6, 0x20, 0x4f, 0x26, 0xa3, 0x65, 0xdc, 0xc6, - 0xea, 0x9e, 0xed, 0xd2, 0xad, 0xb1, 0xd0, 0xa7, 0x34, 0x45, 0x22, 0x38, 0x53, 0xe7, 0x80, 0x75, - 0xbb, 0x81, 0x2b, 0xe9, 0xad, 0xcd, 0x5a, 0x6d, 0x59, 0xc9, 0x09, 0x96, 0xab, 0xb6, 0x4b, 0x12, - 0xaa, 0x69, 0x07, 0x01, 0xce, 0xb1, 0x84, 0x6a, 0xda, 0x22, 0xbc, 0x0b, 0x30, 0xa1, 0xeb, 0x6c, - 0xcc, 0x86, 0xae, 0xf2, 0x33, 0x96, 0x57, 0x94, 0x3b, 0x82, 0xa5, 0xeb, 0x2b, 0xcc, 0x80, 0xe7, - 0xb8, 0x87, 0x2e, 0xc3, 0x89, 0x30, 0x58, 0x51, 0xe0, 0x78, 0xcf, 0x28, 0xbb, 0xa1, 0x0b, 0x30, - 0xe1, 0x1c, 0xf4, 0x02, 0x51, 0xc7, 0x1b, 0x9d, 0x83, 0x6e, 0xd8, 0x45, 0x98, 0x74, 0xf6, 0x9d, - 0x5e, 0xdc, 0xa3, 0x51, 0x1c, 0x72, 0xf6, 0x9d, 0x6e, 0xe0, 0x43, 0xf4, 0xc0, 0xed, 0x62, 0x5d, - 0xf3, 0x71, 0xa3, 0x78, 0x2a, 0x6a, 0x1e, 0x51, 0xa0, 0x59, 0x90, 0x75, 0x5d, 0xc5, 0x96, 0xb6, - 0x6b, 0x62, 0x55, 0x73, 0xb1, 0xa5, 0x79, 0xc5, 0x33, 0x51, 0xe3, 0x82, 0xae, 0xd7, 0xa8, 0xb6, - 0x4a, 0x95, 0xe8, 0x51, 0x18, 0xb7, 0x77, 0xaf, 0xeb, 0x2c, 0x25, 0x55, 0xc7, 0xc5, 0x7b, 0xc6, - 0x0b, 0xc5, 0x07, 0x69, 0x7c, 0xc7, 0x88, 0x82, 0x26, 0xe4, 0x26, 0x15, 0xa3, 0x47, 0x40, 0xd6, - 0xbd, 0x7d, 0xcd, 0x75, 0x68, 0x4d, 0xf6, 0x1c, 0x4d, 0xc7, 0xc5, 0x87, 0x98, 0x29, 0x93, 0x6f, - 0x08, 0x31, 0x59, 0x12, 0xde, 0x2d, 0x63, 0xcf, 0x17, 0x8c, 0x0f, 0xb3, 0x25, 0x41, 0x65, 0x9c, - 0x6d, 0x1a, 0x64, 0x12, 0x8a, 0x8e, 0x17, 0x4f, 0x53, 0xb3, 0x82, 0xb3, 0xef, 0x44, 0xdf, 0xfb, - 0x00, 0x8c, 0x12, 0xcb, 0xf0, 0xa5, 0x8f, 0xb0, 0x86, 0xcc, 0xd9, 0x8f, 0xbc, 0xf1, 0x03, 0xeb, - 0x8d, 0xcb, 0x15, 0xc8, 0x47, 0xf3, 0x13, 0x65, 0x81, 0x65, 0xa8, 0x2c, 0x91, 0x66, 0x65, 0xa9, - 0xbe, 0x4c, 0xda, 0x8c, 0xe7, 0x6b, 0x72, 0x82, 0xb4, 0x3b, 0x6b, 0xab, 0xdb, 0x35, 0x55, 0xd9, - 0xd9, 0xd8, 0x5e, 0x5d, 0xaf, 0xc9, 0xc9, 0x68, 0x5f, 0xfd, 0xbd, 0x04, 0x14, 0x3a, 0x8f, 0x48, - 0xe8, 0xa7, 0xe0, 0x94, 0xb8, 0xcf, 0xf0, 0xb0, 0xaf, 0xde, 0x32, 0x5c, 0xba, 0x64, 0x5a, 0x1a, - 0xdb, 0xbe, 0x82, 0x49, 0x9b, 0xe4, 0x56, 0x5b, 0xd8, 0x7f, 0xc6, 0x70, 0xc9, 0x82, 0x68, 0x69, - 0x3e, 0x5a, 0x83, 0x33, 0x96, 0xad, 0x7a, 0xbe, 0x66, 0x35, 0x34, 0xb7, 0xa1, 0x86, 0x37, 0x49, - 0xaa, 0xa6, 0xeb, 0xd8, 0xf3, 0x6c, 0xb6, 0x55, 0x05, 0x2c, 0x1f, 0xb3, 0xec, 0x2d, 0x6e, 0x1c, - 0xd6, 0xf0, 0x2a, 0x37, 0xed, 0x4a, 0xb0, 0xe4, 0x51, 0x09, 0x76, 0x1f, 0x64, 0x5b, 0x9a, 0xa3, - 0x62, 0xcb, 0x77, 0x0f, 0x68, 0x63, 0x9c, 0x51, 0x32, 0x2d, 0xcd, 0xa9, 0x91, 0xe7, 0x0f, 0xe7, - 0x7c, 0xf2, 0xcf, 0x49, 0xc8, 0x47, 0x9b, 0x63, 0x72, 0xd6, 0xd0, 0xe9, 0x3e, 0x22, 0xd1, 0x4a, - 0xf3, 0xc0, 0x3d, 0x5b, 0xe9, 0x99, 0x25, 0xb2, 0xc1, 0x54, 0x86, 0x59, 0xcb, 0xaa, 0x30, 0x24, - 0xd9, 0xdc, 0x49, 0x6d, 0xc1, 0xac, 0x45, 0xc8, 0x28, 0xfc, 0x09, 0xad, 0xc0, 0xf0, 0x75, 0x8f, - 0x72, 0x0f, 0x53, 0xee, 0x07, 0xef, 0xcd, 0xfd, 0xf4, 0x16, 0x25, 0xcf, 0x3e, 0xbd, 0xa5, 0x6e, - 0xd4, 0x95, 0xf5, 0xea, 0x9a, 0xc2, 0xe1, 0xe8, 0x34, 0xa4, 0x4c, 0xed, 0xf6, 0x41, 0xe7, 0x56, - 0x44, 0x45, 0x83, 0x06, 0xfe, 0x34, 0xa4, 0x6e, 0x61, 0xed, 0x46, 0xe7, 0x06, 0x40, 0x45, 0x1f, - 0x60, 0xea, 0xcf, 0x42, 0x9a, 0xc6, 0x0b, 0x01, 0xf0, 0x88, 0xc9, 0x43, 0x28, 0x03, 0xa9, 0xa5, - 0xba, 0x42, 0xd2, 0x5f, 0x86, 0x3c, 0x93, 0xaa, 0x9b, 0xab, 0xb5, 0xa5, 0x9a, 0x9c, 0x28, 0x2f, - 0xc0, 0x30, 0x0b, 0x02, 0x59, 0x1a, 0x41, 0x18, 0xe4, 0x21, 0xfe, 0xc8, 0x39, 0x24, 0xa1, 0xdd, - 0x59, 0x5f, 0xac, 0x29, 0x72, 0x22, 0x3a, 0xbd, 0x1e, 0xe4, 0xa3, 0x7d, 0xf1, 0x87, 0x93, 0x53, - 0x7f, 0x23, 0x41, 0x2e, 0xd2, 0xe7, 0x92, 0x06, 0x45, 0x33, 0x4d, 0xfb, 0x96, 0xaa, 0x99, 0x86, - 0xe6, 0xf1, 0xa4, 0x00, 0x2a, 0xaa, 0x12, 0xc9, 0xa0, 0x93, 0xf6, 0xa1, 0x38, 0xff, 0x8a, 0x04, - 0x72, 0x77, 0x8b, 0xd9, 0xe5, 0xa0, 0xf4, 0x91, 0x3a, 0xf8, 0xb2, 0x04, 0x85, 0xce, 0xbe, 0xb2, - 0xcb, 0xbd, 0x73, 0x1f, 0xa9, 0x7b, 0x6f, 0x26, 0x60, 0xb4, 0xa3, 0x9b, 0x1c, 0xd4, 0xbb, 0xcf, - 0xc1, 0xb8, 0xd1, 0xc0, 0x2d, 0xc7, 0xf6, 0xb1, 0xa5, 0x1f, 0xa8, 0x26, 0xbe, 0x89, 0xcd, 0x62, - 0x99, 0x16, 0x8a, 0xd9, 0x7b, 0xf7, 0xab, 0x33, 0xab, 0x21, 0x6e, 0x8d, 0xc0, 0x2a, 0x13, 0xab, - 0xcb, 0xb5, 0xf5, 0xcd, 0xfa, 0x76, 0x6d, 0x63, 0xe9, 0x39, 0x75, 0x67, 0xe3, 0x67, 0x36, 0xea, - 0xcf, 0x6c, 0x28, 0xb2, 0xd1, 0x65, 0xf6, 0x01, 0x2e, 0xf5, 0x4d, 0x90, 0xbb, 0x9d, 0x42, 0xa7, - 0xa0, 0x9f, 0x5b, 0xf2, 0x10, 0x9a, 0x80, 0xb1, 0x8d, 0xba, 0xba, 0xb5, 0xba, 0x5c, 0x53, 0x6b, - 0x57, 0xaf, 0xd6, 0x96, 0xb6, 0xb7, 0xd8, 0x0d, 0x44, 0x60, 0xbd, 0xdd, 0xb9, 0xa8, 0x5f, 0x4a, - 0xc2, 0x44, 0x1f, 0x4f, 0x50, 0x95, 0x9f, 0x1d, 0xd8, 0x71, 0xe6, 0xf1, 0x41, 0xbc, 0x9f, 0x21, - 0x5b, 0xfe, 0xa6, 0xe6, 0xfa, 0xfc, 0xa8, 0xf1, 0x08, 0x90, 0x28, 0x59, 0xbe, 0xb1, 0x67, 0x60, - 0x97, 0x5f, 0xd8, 0xb0, 0x03, 0xc5, 0x58, 0x28, 0x67, 0x77, 0x36, 0x9f, 0x00, 0xe4, 0xd8, 0x9e, - 0xe1, 0x1b, 0x37, 0xb1, 0x6a, 0x58, 0xe2, 0x76, 0x87, 0x1c, 0x30, 0x52, 0x8a, 0x2c, 0x34, 0xab, - 0x96, 0x1f, 0x58, 0x5b, 0xb8, 0xa9, 0x75, 0x59, 0x93, 0x02, 0x9e, 0x54, 0x64, 0xa1, 0x09, 0xac, - 0xcf, 0x41, 0xbe, 0x61, 0xb7, 0x49, 0xd7, 0xc5, 0xec, 0xc8, 0x7e, 0x21, 0x29, 0x39, 0x26, 0x0b, - 0x4c, 0x78, 0x3f, 0x1d, 0x5e, 0x2b, 0xe5, 0x95, 0x1c, 0x93, 0x31, 0x93, 0x87, 0x61, 0x4c, 0x6b, - 0x36, 0x5d, 0x42, 0x2e, 0x88, 0xd8, 0x09, 0xa1, 0x10, 0x88, 0xa9, 0xe1, 0xd4, 0xd3, 0x90, 0x11, - 0x71, 0x20, 0x5b, 0x32, 0x89, 0x84, 0xea, 0xb0, 0x63, 0x6f, 0x62, 0x3a, 0xab, 0x64, 0x2c, 0xa1, - 0x3c, 0x07, 0x79, 0xc3, 0x53, 0xc3, 0x5b, 0xf2, 0xc4, 0xd9, 0xc4, 0x74, 0x46, 0xc9, 0x19, 0x5e, - 0x70, 0xc3, 0x58, 0x7e, 0x35, 0x01, 0x85, 0xce, 0x5b, 0x7e, 0xb4, 0x0c, 0x19, 0xd3, 0xd6, 0x35, - 0x9a, 0x5a, 0xec, 0x13, 0xd3, 0x74, 0xcc, 0x87, 0x81, 0x99, 0x35, 0x6e, 0xaf, 0x04, 0xc8, 0xa9, - 0x7f, 0x90, 0x20, 0x23, 0xc4, 0xe8, 0x24, 0xa4, 0x1c, 0xcd, 0xdf, 0xa7, 0x74, 0xe9, 0xc5, 0x84, - 0x2c, 0x29, 0xf4, 0x99, 0xc8, 0x3d, 0x47, 0xb3, 0x68, 0x0a, 0x70, 0x39, 0x79, 0x26, 0xf3, 0x6a, - 0x62, 0xad, 0x41, 0x8f, 0x1f, 0x76, 0xab, 0x85, 0x2d, 0xdf, 0x13, 0xf3, 0xca, 0xe5, 0x4b, 0x5c, - 0x8c, 0x1e, 0x83, 0x71, 0xdf, 0xd5, 0x0c, 0xb3, 0xc3, 0x36, 0x45, 0x6d, 0x65, 0xa1, 0x08, 0x8c, - 0x2b, 0x70, 0x5a, 0xf0, 0x36, 0xb0, 0xaf, 0xe9, 0xfb, 0xb8, 0x11, 0x82, 0x86, 0xe9, 0x35, 0xc3, - 0x29, 0x6e, 0xb0, 0xcc, 0xf5, 0x02, 0x5b, 0xfe, 0xbe, 0x04, 0xe3, 0xe2, 0xc0, 0xd4, 0x08, 0x82, - 0xb5, 0x0e, 0xa0, 0x59, 0x96, 0xed, 0x47, 0xc3, 0xd5, 0x9b, 0xca, 0x3d, 0xb8, 0x99, 0x6a, 0x00, - 0x52, 0x22, 0x04, 0x53, 0x2d, 0x80, 0x50, 0x73, 0x64, 0xd8, 0xce, 0x40, 0x8e, 0x7f, 0xc2, 0xa1, - 0xdf, 0x01, 0xd9, 0x11, 0x1b, 0x98, 0x88, 0x9c, 0xac, 0xd0, 0x24, 0xa4, 0x77, 0x71, 0xd3, 0xb0, - 0xf8, 0xc5, 0x2c, 0x7b, 0x10, 0x17, 0x21, 0xa9, 0xe0, 0x22, 0x64, 0xf1, 0xb3, 0x30, 0xa1, 0xdb, - 0xad, 0x6e, 0x77, 0x17, 0xe5, 0xae, 0x63, 0xbe, 0x77, 0x4d, 0x7a, 0x1e, 0xc2, 0x16, 0xf3, 0x3d, - 0x49, 0xfa, 0x83, 0x44, 0x72, 0x65, 0x73, 0xf1, 0xeb, 0x89, 0xa9, 0x15, 0x06, 0xdd, 0x14, 0x23, - 0x55, 0xf0, 0x9e, 0x89, 0x75, 0xe2, 0x3d, 0x7c, 0x75, 0x1a, 0x1e, 0x6f, 0x1a, 0xfe, 0x7e, 0x7b, - 0x77, 0x46, 0xb7, 0x5b, 0xb3, 0x4d, 0xbb, 0x69, 0x87, 0x9f, 0x3e, 0xc9, 0x13, 0x7d, 0xa0, 0xff, - 0xf1, 0xcf, 0x9f, 0xd9, 0x40, 0x3a, 0x15, 0xfb, 0xad, 0xb4, 0xb2, 0x01, 0x13, 0xdc, 0x58, 0xa5, - 0xdf, 0x5f, 0xd8, 0x29, 0x02, 0xdd, 0xf3, 0x0e, 0xab, 0xf8, 0xcd, 0xb7, 0xe8, 0x76, 0xad, 0x8c, - 0x73, 0x28, 0xd1, 0xb1, 0x83, 0x46, 0x45, 0x81, 0x13, 0x1d, 0x7c, 0x6c, 0x69, 0x62, 0x37, 0x86, - 0xf1, 0x7b, 0x9c, 0x71, 0x22, 0xc2, 0xb8, 0xc5, 0xa1, 0x95, 0x25, 0x18, 0x3d, 0x0e, 0xd7, 0xdf, - 0x71, 0xae, 0x3c, 0x8e, 0x92, 0xac, 0xc0, 0x18, 0x25, 0xd1, 0xdb, 0x9e, 0x6f, 0xb7, 0x68, 0xdd, - 0xbb, 0x37, 0xcd, 0xdf, 0xbf, 0xc5, 0xd6, 0x4a, 0x81, 0xc0, 0x96, 0x02, 0x54, 0xa5, 0x02, 0xf4, - 0x93, 0x53, 0x03, 0xeb, 0x66, 0x0c, 0xc3, 0x6b, 0xdc, 0x91, 0xc0, 0xbe, 0xf2, 0x19, 0x98, 0x24, - 0xff, 0xd3, 0xb2, 0x14, 0xf5, 0x24, 0xfe, 0xc2, 0xab, 0xf8, 0xfd, 0x17, 0xd9, 0x72, 0x9c, 0x08, - 0x08, 0x22, 0x3e, 0x45, 0x66, 0xb1, 0x89, 0x7d, 0x1f, 0xbb, 0x9e, 0xaa, 0x99, 0xfd, 0xdc, 0x8b, - 0xdc, 0x18, 0x14, 0xbf, 0xf4, 0x76, 0xe7, 0x2c, 0xae, 0x30, 0x64, 0xd5, 0x34, 0x2b, 0x3b, 0x70, - 0xaa, 0x4f, 0x56, 0x0c, 0xc0, 0xf9, 0x12, 0xe7, 0x9c, 0xec, 0xc9, 0x0c, 0x42, 0xbb, 0x09, 0x42, - 0x1e, 0xcc, 0xe5, 0x00, 0x9c, 0xbf, 0xcb, 0x39, 0x11, 0xc7, 0x8a, 0x29, 0x25, 0x8c, 0x4f, 0xc3, - 0xf8, 0x4d, 0xec, 0xee, 0xda, 0x1e, 0xbf, 0xa5, 0x19, 0x80, 0xee, 0x65, 0x4e, 0x37, 0xc6, 0x81, - 0xf4, 0xda, 0x86, 0x70, 0x5d, 0x86, 0xcc, 0x9e, 0xa6, 0xe3, 0x01, 0x28, 0xbe, 0xcc, 0x29, 0x46, - 0x88, 0x3d, 0x81, 0x56, 0x21, 0xdf, 0xb4, 0xf9, 0xce, 0x14, 0x0f, 0x7f, 0x85, 0xc3, 0x73, 0x02, - 0xc3, 0x29, 0x1c, 0xdb, 0x69, 0x9b, 0x64, 0xdb, 0x8a, 0xa7, 0xf8, 0x3d, 0x41, 0x21, 0x30, 0x9c, - 0xe2, 0x18, 0x61, 0xfd, 0x7d, 0x41, 0xe1, 0x45, 0xe2, 0xf9, 0x14, 0xe4, 0x6c, 0xcb, 0x3c, 0xb0, - 0xad, 0x41, 0x9c, 0xf8, 0x0a, 0x67, 0x00, 0x0e, 0x21, 0x04, 0x57, 0x20, 0x3b, 0xe8, 0x44, 0x7c, - 0xf5, 0x6d, 0xb1, 0x3c, 0xc4, 0x0c, 0xac, 0xc0, 0x98, 0x28, 0x50, 0x86, 0x6d, 0x0d, 0x40, 0xf1, - 0x87, 0x9c, 0xa2, 0x10, 0x81, 0xf1, 0x61, 0xf8, 0xd8, 0xf3, 0x9b, 0x78, 0x10, 0x92, 0x57, 0xc5, - 0x30, 0x38, 0x84, 0x87, 0x72, 0x17, 0x5b, 0xfa, 0xfe, 0x60, 0x0c, 0x5f, 0x13, 0xa1, 0x14, 0x18, - 0x42, 0xb1, 0x04, 0xa3, 0x2d, 0xcd, 0xf5, 0xf6, 0x35, 0x73, 0xa0, 0xe9, 0xf8, 0x23, 0xce, 0x91, - 0x0f, 0x40, 0x3c, 0x22, 0x6d, 0xeb, 0x38, 0x34, 0x5f, 0x17, 0x11, 0x89, 0xc0, 0xf8, 0xd2, 0xf3, - 0x7c, 0x7a, 0xa5, 0x75, 0x1c, 0xb6, 0x3f, 0x16, 0x4b, 0x8f, 0x61, 0xd7, 0xa3, 0x8c, 0x57, 0x20, - 0xeb, 0x19, 0xb7, 0x07, 0xa2, 0xf9, 0x13, 0x31, 0xd3, 0x14, 0x40, 0xc0, 0xcf, 0xc1, 0xe9, 0xbe, - 0xdb, 0xc4, 0x00, 0x64, 0x7f, 0xca, 0xc9, 0x4e, 0xf6, 0xd9, 0x2a, 0x78, 0x49, 0x38, 0x2e, 0xe5, - 0x9f, 0x89, 0x92, 0x80, 0xbb, 0xb8, 0x36, 0xc9, 0x59, 0xc1, 0xd3, 0xf6, 0x8e, 0x17, 0xb5, 0x3f, - 0x17, 0x51, 0x63, 0xd8, 0x8e, 0xa8, 0x6d, 0xc3, 0x49, 0xce, 0x78, 0xbc, 0x79, 0xfd, 0x86, 0x28, - 0xac, 0x0c, 0xbd, 0xd3, 0x39, 0xbb, 0x9f, 0x85, 0xa9, 0x20, 0x9c, 0xa2, 0x29, 0xf5, 0xd4, 0x96, - 0xe6, 0x0c, 0xc0, 0xfc, 0x4d, 0xce, 0x2c, 0x2a, 0x7e, 0xd0, 0xd5, 0x7a, 0xeb, 0x9a, 0x43, 0xc8, - 0x9f, 0x85, 0xa2, 0x20, 0x6f, 0x5b, 0x2e, 0xd6, 0xed, 0xa6, 0x65, 0xdc, 0xc6, 0x8d, 0x01, 0xa8, - 0xff, 0xa2, 0x6b, 0xaa, 0x76, 0x22, 0x70, 0xc2, 0xbc, 0x0a, 0x72, 0xd0, 0xab, 0xa8, 0x46, 0xcb, - 0xb1, 0x5d, 0x3f, 0x86, 0xf1, 0x5b, 0x62, 0xa6, 0x02, 0xdc, 0x2a, 0x85, 0x55, 0x6a, 0x50, 0xa0, - 0x8f, 0x83, 0xa6, 0xe4, 0x5f, 0x72, 0xa2, 0xd1, 0x10, 0xc5, 0x0b, 0x87, 0x6e, 0xb7, 0x1c, 0xcd, - 0x1d, 0xa4, 0xfe, 0xfd, 0x95, 0x28, 0x1c, 0x1c, 0xc2, 0x0b, 0x87, 0x7f, 0xe0, 0x60, 0xb2, 0xdb, - 0x0f, 0xc0, 0xf0, 0x6d, 0x51, 0x38, 0x04, 0x86, 0x53, 0x88, 0x86, 0x61, 0x00, 0x8a, 0xbf, 0x16, - 0x14, 0x02, 0x43, 0x28, 0x3e, 0x1d, 0x6e, 0xb4, 0x2e, 0x6e, 0x1a, 0x9e, 0xef, 0xb2, 0x56, 0xf8, - 0xde, 0x54, 0xdf, 0x79, 0xbb, 0xb3, 0x09, 0x53, 0x22, 0x50, 0x52, 0x89, 0xf8, 0x15, 0x2a, 0x3d, - 0x29, 0xc5, 0x3b, 0xf6, 0x5d, 0x51, 0x89, 0x22, 0x30, 0xb6, 0x3e, 0xc7, 0xba, 0x7a, 0x15, 0x14, - 0xf7, 0x43, 0x98, 0xe2, 0xcf, 0xbf, 0xcb, 0xb9, 0x3a, 0x5b, 0x95, 0xca, 0x1a, 0x49, 0xa0, 0xce, - 0x86, 0x22, 0x9e, 0xec, 0xc5, 0x77, 0x83, 0x1c, 0xea, 0xe8, 0x27, 0x2a, 0x57, 0x61, 0xb4, 0xa3, - 0x99, 0x88, 0xa7, 0xfa, 0x05, 0x4e, 0x95, 0x8f, 0xf6, 0x12, 0x95, 0x05, 0x48, 0x91, 0xc6, 0x20, - 0x1e, 0xfe, 0x8b, 0x1c, 0x4e, 0xcd, 0x2b, 0x9f, 0x84, 0x8c, 0x68, 0x08, 0xe2, 0xa1, 0xbf, 0xc4, - 0xa1, 0x01, 0x84, 0xc0, 0x45, 0x33, 0x10, 0x0f, 0xff, 0x65, 0x01, 0x17, 0x10, 0x02, 0x1f, 0x3c, - 0x84, 0x7f, 0xfb, 0x2b, 0x29, 0x5e, 0xd0, 0x45, 0xec, 0xae, 0xc0, 0x08, 0xef, 0x02, 0xe2, 0xd1, - 0x9f, 0xe7, 0x2f, 0x17, 0x88, 0xca, 0x45, 0x48, 0x0f, 0x18, 0xf0, 0x5f, 0xe5, 0x50, 0x66, 0x5f, - 0x59, 0x82, 0x5c, 0x64, 0xe7, 0x8f, 0x87, 0xff, 0x1a, 0x87, 0x47, 0x51, 0xc4, 0x75, 0xbe, 0xf3, - 0xc7, 0x13, 0xfc, 0xba, 0x70, 0x9d, 0x23, 0x48, 0xd8, 0xc4, 0xa6, 0x1f, 0x8f, 0xfe, 0x0d, 0x11, - 0x75, 0x01, 0xa9, 0x3c, 0x05, 0xd9, 0xa0, 0x90, 0xc7, 0xe3, 0x7f, 0x93, 0xe3, 0x43, 0x0c, 0x89, - 0x40, 0x64, 0x23, 0x89, 0xa7, 0xf8, 0x82, 0x88, 0x40, 0x04, 0x45, 0x96, 0x51, 0x77, 0x73, 0x10, - 0xcf, 0xf4, 0x5b, 0x62, 0x19, 0x75, 0xf5, 0x06, 0x64, 0x36, 0x69, 0x3d, 0x8d, 0xa7, 0xf8, 0x6d, - 0x31, 0x9b, 0xd4, 0x9e, 0xb8, 0xd1, 0xbd, 0xdb, 0xc6, 0x73, 0xfc, 0x8e, 0x70, 0xa3, 0x6b, 0xb3, - 0xad, 0x6c, 0x02, 0xea, 0xdd, 0x69, 0xe3, 0xf9, 0xbe, 0xc8, 0xf9, 0xc6, 0x7b, 0x36, 0xda, 0xca, - 0x33, 0x70, 0xb2, 0xff, 0x2e, 0x1b, 0xcf, 0xfa, 0xa5, 0x77, 0xbb, 0xce, 0x45, 0xd1, 0x4d, 0xb6, - 0xb2, 0x1d, 0x96, 0xeb, 0xe8, 0x0e, 0x1b, 0x4f, 0xfb, 0xd2, 0xbb, 0x9d, 0x15, 0x3b, 0xba, 0xc1, - 0x56, 0xaa, 0x00, 0xe1, 0xe6, 0x16, 0xcf, 0xf5, 0x32, 0xe7, 0x8a, 0x80, 0xc8, 0xd2, 0xe0, 0x7b, - 0x5b, 0x3c, 0xfe, 0xcb, 0x62, 0x69, 0x70, 0x04, 0x59, 0x1a, 0x62, 0x5b, 0x8b, 0x47, 0xbf, 0x22, - 0x96, 0x86, 0x80, 0x90, 0xcc, 0x8e, 0xec, 0x1c, 0xf1, 0x0c, 0x5f, 0x11, 0x99, 0x1d, 0x41, 0x55, - 0xae, 0x40, 0xc6, 0x6a, 0x9b, 0x26, 0x49, 0x50, 0x74, 0xef, 0x1f, 0x88, 0x15, 0xff, 0xf5, 0x7d, - 0xee, 0x81, 0x00, 0x54, 0x16, 0x20, 0x8d, 0x5b, 0xbb, 0xb8, 0x11, 0x87, 0xfc, 0xb7, 0xf7, 0x45, - 0x51, 0x22, 0xd6, 0x95, 0xa7, 0x00, 0xd8, 0xd1, 0x9e, 0x7e, 0xb6, 0x8a, 0xc1, 0xfe, 0xfb, 0xfb, - 0xfc, 0xa7, 0x1b, 0x21, 0x24, 0x24, 0x60, 0x3f, 0x04, 0xb9, 0x37, 0xc1, 0xdb, 0x9d, 0x04, 0x74, - 0xd4, 0x97, 0x61, 0xe4, 0xba, 0x67, 0x5b, 0xbe, 0xd6, 0x8c, 0x43, 0xff, 0x07, 0x47, 0x0b, 0x7b, - 0x12, 0xb0, 0x96, 0xed, 0x62, 0x5f, 0x6b, 0x7a, 0x71, 0xd8, 0xff, 0xe4, 0xd8, 0x00, 0x40, 0xc0, - 0xba, 0xe6, 0xf9, 0x83, 0x8c, 0xfb, 0x47, 0x02, 0x2c, 0x00, 0xc4, 0x69, 0xf2, 0xff, 0x0d, 0x7c, - 0x10, 0x87, 0x7d, 0x47, 0x38, 0xcd, 0xed, 0x2b, 0x9f, 0x84, 0x2c, 0xf9, 0x97, 0xfd, 0x1e, 0x2b, - 0x06, 0xfc, 0x5f, 0x1c, 0x1c, 0x22, 0xc8, 0x9b, 0x3d, 0xbf, 0xe1, 0x1b, 0xf1, 0xc1, 0xfe, 0x6f, - 0x3e, 0xd3, 0xc2, 0xbe, 0x52, 0x85, 0x9c, 0xe7, 0x37, 0x1a, 0x6d, 0xde, 0x5f, 0xc5, 0xc0, 0xff, - 0xe7, 0xfd, 0xe0, 0xc8, 0x1d, 0x60, 0x16, 0x6b, 0xfd, 0x6f, 0x0f, 0x61, 0xc5, 0x5e, 0xb1, 0xd9, - 0xbd, 0xe1, 0xf3, 0xe5, 0xf8, 0x0b, 0x40, 0xf8, 0xdf, 0x0c, 0x9c, 0xd0, 0xed, 0xd6, 0xae, 0xed, - 0xcd, 0xee, 0xda, 0xfe, 0xfe, 0xac, 0x6d, 0x71, 0x32, 0x94, 0xb4, 0x2d, 0x3c, 0x75, 0xbc, 0x3b, - 0xc4, 0xf2, 0x69, 0x48, 0x6f, 0xb5, 0x77, 0x77, 0x0f, 0x90, 0x0c, 0x49, 0xaf, 0xbd, 0xcb, 0x7f, - 0x8f, 0x43, 0xfe, 0x2d, 0xbf, 0x91, 0x84, 0xd1, 0xaa, 0x69, 0x6e, 0x1f, 0x38, 0xd8, 0xab, 0x5b, - 0xb8, 0xbe, 0x87, 0x8a, 0x30, 0x4c, 0x87, 0xf9, 0x24, 0x35, 0x93, 0xae, 0x0d, 0x29, 0xfc, 0x39, - 0xd0, 0xcc, 0xd1, 0xdb, 0xd5, 0x44, 0xa0, 0x99, 0x0b, 0x34, 0xe7, 0xd9, 0xe5, 0x6a, 0xa0, 0x39, - 0x1f, 0x68, 0xe6, 0xe9, 0x15, 0x6b, 0x32, 0xd0, 0xcc, 0x07, 0x9a, 0x05, 0xfa, 0x09, 0x61, 0x34, - 0xd0, 0x2c, 0x04, 0x9a, 0x0b, 0xf4, 0xa3, 0x41, 0x2a, 0xd0, 0x5c, 0x08, 0x34, 0x17, 0xe9, 0xb7, - 0x82, 0xf1, 0x40, 0x73, 0x31, 0xd0, 0x5c, 0xa2, 0xdf, 0x07, 0x50, 0xa0, 0xb9, 0x14, 0x68, 0x2e, - 0xd3, 0x1f, 0xde, 0x8c, 0x04, 0x9a, 0xcb, 0x68, 0x0a, 0x46, 0xd8, 0xc8, 0x9e, 0xa0, 0x1f, 0x91, - 0xc7, 0xae, 0x0d, 0x29, 0x42, 0x10, 0xea, 0x9e, 0xa4, 0x3f, 0xae, 0x19, 0x0e, 0x75, 0x4f, 0x86, - 0xba, 0x39, 0xfa, 0x1b, 0x7f, 0x39, 0xd4, 0xcd, 0x85, 0xba, 0xf3, 0xc5, 0x51, 0x92, 0x1d, 0xa1, - 0xee, 0x7c, 0xa8, 0x9b, 0x2f, 0x16, 0xc8, 0x0c, 0x84, 0xba, 0xf9, 0x50, 0xb7, 0x50, 0x1c, 0x3b, - 0x2b, 0x4d, 0xe7, 0x43, 0xdd, 0x02, 0x7a, 0x1c, 0x72, 0x5e, 0x7b, 0x57, 0xe5, 0x95, 0x90, 0xfe, - 0x88, 0x27, 0x37, 0x07, 0x33, 0x24, 0x27, 0xe8, 0xb4, 0x5e, 0x1b, 0x52, 0xc0, 0x6b, 0xef, 0xf2, - 0x0a, 0xba, 0x98, 0x07, 0x7a, 0xf7, 0xa1, 0xd2, 0xdf, 0xde, 0x96, 0x5f, 0x97, 0x20, 0xbb, 0x7d, - 0xcb, 0xa6, 0x9f, 0x90, 0xbd, 0x9f, 0xf0, 0xe4, 0x0a, 0xa7, 0xcf, 0xcf, 0xd3, 0xaf, 0x7c, 0xd9, - 0x6b, 0x92, 0x22, 0x04, 0xa1, 0x6e, 0xa1, 0xf8, 0x00, 0x1d, 0x50, 0xa0, 0x5b, 0x40, 0xb3, 0x90, - 0x8f, 0x0c, 0x68, 0x8e, 0xfe, 0xbc, 0xa6, 0x73, 0x44, 0x92, 0x92, 0x0b, 0x47, 0x34, 0xb7, 0x98, - 0x06, 0x92, 0xf6, 0xe4, 0x8f, 0x7f, 0xcb, 0x2e, 0x7f, 0x21, 0x01, 0x39, 0x76, 0x5d, 0x4a, 0x47, - 0x45, 0x5e, 0xc5, 0xba, 0xfe, 0x03, 0xee, 0xc6, 0x90, 0x22, 0x04, 0x48, 0x01, 0x60, 0xa6, 0x24, - 0xc3, 0x99, 0x27, 0x8b, 0x4f, 0xfc, 0xd3, 0x1b, 0x67, 0x3e, 0x71, 0xe4, 0x0a, 0x22, 0xb1, 0x9b, - 0x65, 0xe5, 0x77, 0x66, 0xc7, 0xb0, 0xfc, 0x27, 0xe7, 0x2e, 0x91, 0x00, 0x87, 0x2c, 0x68, 0x07, - 0x32, 0x4b, 0x9a, 0x47, 0x7f, 0x98, 0x47, 0x5d, 0x4f, 0x2d, 0x5e, 0xfc, 0xbf, 0x37, 0xce, 0x9c, - 0x8f, 0x61, 0xe4, 0x95, 0x71, 0x66, 0xfd, 0x80, 0xb0, 0x5e, 0x98, 0x27, 0xf0, 0x6b, 0x43, 0x4a, - 0x40, 0x85, 0xe6, 0x84, 0xab, 0x1b, 0x5a, 0x8b, 0xfd, 0x8e, 0x28, 0xb9, 0x28, 0x1f, 0xbe, 0x71, - 0x26, 0xbf, 0x7e, 0x10, 0xca, 0x43, 0x57, 0xc8, 0xd3, 0x62, 0x06, 0x86, 0x99, 0xab, 0x8b, 0xcb, - 0xaf, 0xdd, 0x2d, 0x0d, 0xbd, 0x7e, 0xb7, 0x34, 0xf4, 0x8f, 0x77, 0x4b, 0x43, 0x6f, 0xde, 0x2d, - 0x49, 0xef, 0xdc, 0x2d, 0x49, 0xef, 0xdd, 0x2d, 0x49, 0x77, 0x0e, 0x4b, 0xd2, 0xd7, 0x0e, 0x4b, - 0xd2, 0x37, 0x0e, 0x4b, 0xd2, 0x77, 0x0e, 0x4b, 0xd2, 0x6b, 0x87, 0x25, 0xe9, 0xf5, 0xc3, 0x92, - 0xf4, 0xe6, 0x61, 0x49, 0xfa, 0xe1, 0x61, 0x69, 0xe8, 0x9d, 0xc3, 0x92, 0xf4, 0xde, 0x61, 0x69, - 0xe8, 0xce, 0x0f, 0x4a, 0x43, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x27, 0x0d, 0x8a, 0x92, - 0x35, 0x00, 0x00, + // 4264 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x1b, 0xd7, + 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0xb9, 0xa4, 0x24, 0x88, 0x8e, 0x21, 0x09, 0xb6, + 0x63, 0xda, 0x8e, 0x49, 0x9b, 0x22, 0x29, 0x09, 0x6a, 0xe2, 0x82, 0x24, 0x44, 0xd1, 0x25, 0x09, + 0x66, 0x41, 0xc6, 0x3f, 0x99, 0xce, 0xce, 0x72, 0x71, 0x01, 0xae, 0xb4, 0xd8, 0xdd, 0xec, 0x2e, + 0x24, 0x43, 0xd3, 0x07, 0x75, 0xdc, 0x9f, 0xc9, 0x74, 0xfa, 0x97, 0x76, 0xa6, 0x89, 0xeb, 0xb8, + 0x4d, 0x3a, 0x8d, 0xd3, 0xf4, 0x2f, 0x69, 0xda, 0x34, 0x49, 0x5f, 0xfa, 0x92, 0xd6, 0x4f, 0x1d, + 0xe7, 0xad, 0xd3, 0xe9, 0x78, 0x2c, 0xc6, 0x33, 0x4d, 0x5b, 0xb7, 0x71, 0x5b, 0x75, 0xc6, 0x53, + 0xbf, 0x74, 0xee, 0xdf, 0xee, 0xe2, 0x87, 0x5a, 0x30, 0x13, 0xdb, 0x4f, 0xe2, 0x9e, 0x73, 0xbe, + 0x6f, 0xcf, 0x3d, 0xf7, 0xdc, 0x73, 0xcf, 0xbd, 0x0b, 0xc1, 0x8f, 0x2e, 0xc1, 0xd9, 0xa6, 0x65, + 0x35, 0x0d, 0x34, 0x6f, 0x3b, 0x96, 0x67, 0xed, 0xb7, 0x1b, 0xf3, 0x75, 0xe4, 0x6a, 0x8e, 0x6e, + 0x7b, 0x96, 0x33, 0x47, 0x64, 0xd2, 0x04, 0xb5, 0x98, 0xe3, 0x16, 0xc5, 0x2d, 0x98, 0xbc, 0xa2, + 0x1b, 0x68, 0xcd, 0x37, 0xac, 0x21, 0x4f, 0xba, 0x08, 0x89, 0x86, 0x6e, 0xa0, 0xbc, 0x70, 0x36, + 0x3e, 0x9b, 0x59, 0x78, 0x70, 0xae, 0x07, 0x34, 0xd7, 0x8d, 0xd8, 0xc1, 0x62, 0x99, 0x20, 0x8a, + 0x6f, 0x25, 0x60, 0x6a, 0x80, 0x56, 0x92, 0x20, 0x61, 0xaa, 0x2d, 0xcc, 0x28, 0xcc, 0xa6, 0x65, + 0xf2, 0xb7, 0x94, 0x87, 0x31, 0x5b, 0xd5, 0xae, 0xab, 0x4d, 0x94, 0x8f, 0x11, 0x31, 0x7f, 0x94, + 0x0a, 0x00, 0x75, 0x64, 0x23, 0xb3, 0x8e, 0x4c, 0xad, 0x93, 0x8f, 0x9f, 0x8d, 0xcf, 0xa6, 0xe5, + 0x90, 0x44, 0x7a, 0x0c, 0x26, 0xed, 0xf6, 0xbe, 0xa1, 0x6b, 0x4a, 0xc8, 0x0c, 0xce, 0xc6, 0x67, + 0x93, 0xb2, 0x48, 0x15, 0x6b, 0x81, 0xf1, 0xc3, 0x30, 0x71, 0x13, 0xa9, 0xd7, 0xc3, 0xa6, 0x19, + 0x62, 0x9a, 0xc3, 0xe2, 0x90, 0xe1, 0x2a, 0x64, 0x5b, 0xc8, 0x75, 0xd5, 0x26, 0x52, 0xbc, 0x8e, + 0x8d, 0xf2, 0x09, 0x32, 0xfa, 0xb3, 0x7d, 0xa3, 0xef, 0x1d, 0x79, 0x86, 0xa1, 0x76, 0x3b, 0x36, + 0x92, 0xca, 0x90, 0x46, 0x66, 0xbb, 0x45, 0x19, 0x92, 0x47, 0xc4, 0xaf, 0x62, 0xb6, 0x5b, 0xbd, + 0x2c, 0x29, 0x0c, 0x63, 0x14, 0x63, 0x2e, 0x72, 0x6e, 0xe8, 0x1a, 0xca, 0x8f, 0x12, 0x82, 0x87, + 0xfb, 0x08, 0x6a, 0x54, 0xdf, 0xcb, 0xc1, 0x71, 0xd2, 0x2a, 0xa4, 0xd1, 0x0b, 0x1e, 0x32, 0x5d, + 0xdd, 0x32, 0xf3, 0x63, 0x84, 0xe4, 0xa1, 0x01, 0xb3, 0x88, 0x8c, 0x7a, 0x2f, 0x45, 0x80, 0x93, + 0x96, 0x61, 0xcc, 0xb2, 0x3d, 0xdd, 0x32, 0xdd, 0x7c, 0xea, 0xac, 0x30, 0x9b, 0x59, 0xf8, 0xc8, + 0xc0, 0x44, 0xa8, 0x52, 0x1b, 0x99, 0x1b, 0x4b, 0x1b, 0x20, 0xba, 0x56, 0xdb, 0xd1, 0x90, 0xa2, + 0x59, 0x75, 0xa4, 0xe8, 0x66, 0xc3, 0xca, 0xa7, 0x09, 0xc1, 0x99, 0xfe, 0x81, 0x10, 0xc3, 0x55, + 0xab, 0x8e, 0x36, 0xcc, 0x86, 0x25, 0xe7, 0xdc, 0xae, 0x67, 0xe9, 0x24, 0x8c, 0xba, 0x1d, 0xd3, + 0x53, 0x5f, 0xc8, 0x67, 0x49, 0x86, 0xb0, 0xa7, 0xe2, 0x77, 0x46, 0x61, 0x62, 0x98, 0x14, 0xbb, + 0x0c, 0xc9, 0x06, 0x1e, 0x65, 0x3e, 0x76, 0x9c, 0x18, 0x50, 0x4c, 0x77, 0x10, 0x47, 0x7f, 0xcc, + 0x20, 0x96, 0x21, 0x63, 0x22, 0xd7, 0x43, 0x75, 0x9a, 0x11, 0xf1, 0x21, 0x73, 0x0a, 0x28, 0xa8, + 0x3f, 0xa5, 0x12, 0x3f, 0x56, 0x4a, 0x3d, 0x0b, 0x13, 0xbe, 0x4b, 0x8a, 0xa3, 0x9a, 0x4d, 0x9e, + 0x9b, 0xf3, 0x51, 0x9e, 0xcc, 0x55, 0x38, 0x4e, 0xc6, 0x30, 0x39, 0x87, 0xba, 0x9e, 0xa5, 0x35, + 0x00, 0xcb, 0x44, 0x56, 0x43, 0xa9, 0x23, 0xcd, 0xc8, 0xa7, 0x8e, 0x88, 0x52, 0x15, 0x9b, 0xf4, + 0x45, 0xc9, 0xa2, 0x52, 0xcd, 0x90, 0x2e, 0x05, 0xa9, 0x36, 0x76, 0x44, 0xa6, 0x6c, 0xd1, 0x45, + 0xd6, 0x97, 0x6d, 0x7b, 0x90, 0x73, 0x10, 0xce, 0x7b, 0x54, 0x67, 0x23, 0x4b, 0x13, 0x27, 0xe6, + 0x22, 0x47, 0x26, 0x33, 0x18, 0x1d, 0xd8, 0xb8, 0x13, 0x7e, 0x94, 0x1e, 0x00, 0x5f, 0xa0, 0x90, + 0xb4, 0x02, 0x52, 0x85, 0xb2, 0x5c, 0xb8, 0xad, 0xb6, 0xd0, 0xcc, 0x2d, 0xc8, 0x75, 0x87, 0x47, + 0x9a, 0x86, 0xa4, 0xeb, 0xa9, 0x8e, 0x47, 0xb2, 0x30, 0x29, 0xd3, 0x07, 0x49, 0x84, 0x38, 0x32, + 0xeb, 0xa4, 0xca, 0x25, 0x65, 0xfc, 0xa7, 0xf4, 0xd3, 0xc1, 0x80, 0xe3, 0x64, 0xc0, 0x1f, 0xed, + 0x9f, 0xd1, 0x2e, 0xe6, 0xde, 0x71, 0xcf, 0x5c, 0x80, 0xf1, 0xae, 0x01, 0x0c, 0xfb, 0xea, 0xe2, + 0xcf, 0xc1, 0x89, 0x81, 0xd4, 0xd2, 0xb3, 0x30, 0xdd, 0x36, 0x75, 0xd3, 0x43, 0x8e, 0xed, 0x20, + 0x9c, 0xb1, 0xf4, 0x55, 0xf9, 0x7f, 0x19, 0x3b, 0x22, 0xe7, 0xf6, 0xc2, 0xd6, 0x94, 0x45, 0x9e, + 0x6a, 0xf7, 0x0b, 0x1f, 0x4d, 0xa7, 0x7e, 0x38, 0x26, 0xde, 0xbe, 0x7d, 0xfb, 0x76, 0xac, 0xf8, + 0xf9, 0x51, 0x98, 0x1e, 0xb4, 0x66, 0x06, 0x2e, 0xdf, 0x93, 0x30, 0x6a, 0xb6, 0x5b, 0xfb, 0xc8, + 0x21, 0x41, 0x4a, 0xca, 0xec, 0x49, 0x2a, 0x43, 0xd2, 0x50, 0xf7, 0x91, 0x91, 0x4f, 0x9c, 0x15, + 0x66, 0x73, 0x0b, 0x8f, 0x0d, 0xb5, 0x2a, 0xe7, 0x36, 0x31, 0x44, 0xa6, 0x48, 0xe9, 0x13, 0x90, + 0x60, 0x25, 0x1a, 0x33, 0x3c, 0x3a, 0x1c, 0x03, 0x5e, 0x4b, 0x32, 0xc1, 0x49, 0xf7, 0x41, 0x1a, + 0xff, 0x4b, 0x73, 0x63, 0x94, 0xf8, 0x9c, 0xc2, 0x02, 0x9c, 0x17, 0xd2, 0x0c, 0xa4, 0xc8, 0x32, + 0xa9, 0x23, 0xbe, 0xb5, 0xf9, 0xcf, 0x38, 0xb1, 0xea, 0xa8, 0xa1, 0xb6, 0x0d, 0x4f, 0xb9, 0xa1, + 0x1a, 0x6d, 0x44, 0x12, 0x3e, 0x2d, 0x67, 0x99, 0xf0, 0x53, 0x58, 0x26, 0x9d, 0x81, 0x0c, 0x5d, + 0x55, 0xba, 0x59, 0x47, 0x2f, 0x90, 0xea, 0x99, 0x94, 0xe9, 0x42, 0xdb, 0xc0, 0x12, 0xfc, 0xfa, + 0x6b, 0xae, 0x65, 0xf2, 0xd4, 0x24, 0xaf, 0xc0, 0x02, 0xf2, 0xfa, 0x0b, 0xbd, 0x85, 0xfb, 0xfe, + 0xc1, 0xc3, 0xeb, 0xcd, 0xa9, 0xe2, 0xb7, 0x62, 0x90, 0x20, 0xf5, 0x62, 0x02, 0x32, 0xbb, 0xcf, + 0xed, 0x54, 0x94, 0xb5, 0xea, 0xde, 0xca, 0x66, 0x45, 0x14, 0xa4, 0x1c, 0x00, 0x11, 0x5c, 0xd9, + 0xac, 0x96, 0x77, 0xc5, 0x98, 0xff, 0xbc, 0xb1, 0xbd, 0xbb, 0xbc, 0x28, 0xc6, 0x7d, 0xc0, 0x1e, + 0x15, 0x24, 0xc2, 0x06, 0xe7, 0x17, 0xc4, 0xa4, 0x24, 0x42, 0x96, 0x12, 0x6c, 0x3c, 0x5b, 0x59, + 0x5b, 0x5e, 0x14, 0x47, 0xbb, 0x25, 0xe7, 0x17, 0xc4, 0x31, 0x69, 0x1c, 0xd2, 0x44, 0xb2, 0x52, + 0xad, 0x6e, 0x8a, 0x29, 0x9f, 0xb3, 0xb6, 0x2b, 0x6f, 0x6c, 0xaf, 0x8b, 0x69, 0x9f, 0x73, 0x5d, + 0xae, 0xee, 0xed, 0x88, 0xe0, 0x33, 0x6c, 0x55, 0x6a, 0xb5, 0xf2, 0x7a, 0x45, 0xcc, 0xf8, 0x16, + 0x2b, 0xcf, 0xed, 0x56, 0x6a, 0x62, 0xb6, 0xcb, 0xad, 0xf3, 0x0b, 0xe2, 0xb8, 0xff, 0x8a, 0xca, + 0xf6, 0xde, 0x96, 0x98, 0x93, 0x26, 0x61, 0x9c, 0xbe, 0x82, 0x3b, 0x31, 0xd1, 0x23, 0x5a, 0x5e, + 0x14, 0xc5, 0xc0, 0x11, 0xca, 0x32, 0xd9, 0x25, 0x58, 0x5e, 0x14, 0xa5, 0xe2, 0x2a, 0x24, 0x49, + 0x76, 0x49, 0x12, 0xe4, 0x36, 0xcb, 0x2b, 0x95, 0x4d, 0xa5, 0xba, 0xb3, 0xbb, 0x51, 0xdd, 0x2e, + 0x6f, 0x8a, 0x42, 0x20, 0x93, 0x2b, 0x9f, 0xdc, 0xdb, 0x90, 0x2b, 0x6b, 0x62, 0x2c, 0x2c, 0xdb, + 0xa9, 0x94, 0x77, 0x2b, 0x6b, 0x62, 0xbc, 0xa8, 0xc1, 0xf4, 0xa0, 0x3a, 0x39, 0x70, 0x65, 0x84, + 0xa6, 0x38, 0x76, 0xc4, 0x14, 0x13, 0xae, 0xbe, 0x29, 0xfe, 0x41, 0x0c, 0xa6, 0x06, 0xec, 0x15, + 0x03, 0x5f, 0xf2, 0x14, 0x24, 0x69, 0x8a, 0xd2, 0xdd, 0xf3, 0x91, 0x81, 0x9b, 0x0e, 0x49, 0xd8, + 0xbe, 0x1d, 0x94, 0xe0, 0xc2, 0x1d, 0x44, 0xfc, 0x88, 0x0e, 0x02, 0x53, 0xf4, 0xd5, 0xf4, 0x9f, + 0xed, 0xab, 0xe9, 0x74, 0xdb, 0x5b, 0x1e, 0x66, 0xdb, 0x23, 0xb2, 0xe3, 0xd5, 0xf6, 0xe4, 0x80, + 0xda, 0x7e, 0x19, 0x26, 0xfb, 0x88, 0x86, 0xae, 0xb1, 0x2f, 0x0a, 0x90, 0x3f, 0x2a, 0x38, 0x11, + 0x95, 0x2e, 0xd6, 0x55, 0xe9, 0x2e, 0xf7, 0x46, 0xf0, 0xdc, 0xd1, 0x93, 0xd0, 0x37, 0xd7, 0xaf, + 0x0a, 0x70, 0x72, 0x70, 0xa7, 0x38, 0xd0, 0x87, 0x4f, 0xc0, 0x68, 0x0b, 0x79, 0x07, 0x16, 0xef, + 0x96, 0x3e, 0x3a, 0x60, 0x0f, 0xc6, 0xea, 0xde, 0xc9, 0x66, 0xa8, 0xf0, 0x26, 0x1e, 0x3f, 0xaa, + 0xdd, 0xa3, 0xde, 0xf4, 0x79, 0xfa, 0xd9, 0x18, 0x9c, 0x18, 0x48, 0x3e, 0xd0, 0xd1, 0xfb, 0x01, + 0x74, 0xd3, 0x6e, 0x7b, 0xb4, 0x23, 0xa2, 0x05, 0x36, 0x4d, 0x24, 0xa4, 0x78, 0xe1, 0xe2, 0xd9, + 0xf6, 0x7c, 0x7d, 0x9c, 0xe8, 0x81, 0x8a, 0x88, 0xc1, 0xc5, 0xc0, 0xd1, 0x04, 0x71, 0xb4, 0x70, + 0xc4, 0x48, 0xfb, 0x12, 0xf3, 0x09, 0x10, 0x35, 0x43, 0x47, 0xa6, 0xa7, 0xb8, 0x9e, 0x83, 0xd4, + 0x96, 0x6e, 0x36, 0xc9, 0x0e, 0x92, 0x2a, 0x25, 0x1b, 0xaa, 0xe1, 0x22, 0x79, 0x82, 0xaa, 0x6b, + 0x5c, 0x8b, 0x11, 0x24, 0x81, 0x9c, 0x10, 0x62, 0xb4, 0x0b, 0x41, 0xd5, 0x3e, 0xa2, 0xf8, 0xcd, + 0x14, 0x64, 0x42, 0x7d, 0xb5, 0x74, 0x0e, 0xb2, 0xd7, 0xd4, 0x1b, 0xaa, 0xc2, 0xcf, 0x4a, 0x34, + 0x12, 0x19, 0x2c, 0xdb, 0x61, 0xe7, 0xa5, 0x27, 0x60, 0x9a, 0x98, 0x58, 0x6d, 0x0f, 0x39, 0x8a, + 0x66, 0xa8, 0xae, 0x4b, 0x82, 0x96, 0x22, 0xa6, 0x12, 0xd6, 0x55, 0xb1, 0x6a, 0x95, 0x6b, 0xa4, + 0x25, 0x98, 0x22, 0x88, 0x56, 0xdb, 0xf0, 0x74, 0xdb, 0x40, 0x0a, 0x3e, 0xbd, 0xb9, 0x64, 0x27, + 0xf1, 0x3d, 0x9b, 0xc4, 0x16, 0x5b, 0xcc, 0x00, 0x7b, 0xe4, 0x4a, 0x6b, 0x70, 0x3f, 0x81, 0x35, + 0x91, 0x89, 0x1c, 0xd5, 0x43, 0x0a, 0xfa, 0x4c, 0x5b, 0x35, 0x5c, 0x45, 0x35, 0xeb, 0xca, 0x81, + 0xea, 0x1e, 0xe4, 0xa7, 0x31, 0xc1, 0x4a, 0x2c, 0x2f, 0xc8, 0xa7, 0xb1, 0xe1, 0x3a, 0xb3, 0xab, + 0x10, 0xb3, 0xb2, 0x59, 0xbf, 0xaa, 0xba, 0x07, 0x52, 0x09, 0x4e, 0x12, 0x16, 0xd7, 0x73, 0x74, + 0xb3, 0xa9, 0x68, 0x07, 0x48, 0xbb, 0xae, 0xb4, 0xbd, 0xc6, 0xc5, 0xfc, 0x7d, 0xe1, 0xf7, 0x13, + 0x0f, 0x6b, 0xc4, 0x66, 0x15, 0x9b, 0xec, 0x79, 0x8d, 0x8b, 0x52, 0x0d, 0xb2, 0x78, 0x32, 0x5a, + 0xfa, 0x2d, 0xa4, 0x34, 0x2c, 0x87, 0x6c, 0x8d, 0xb9, 0x01, 0xa5, 0x29, 0x14, 0xc1, 0xb9, 0x2a, + 0x03, 0x6c, 0x59, 0x75, 0x54, 0x4a, 0xd6, 0x76, 0x2a, 0x95, 0x35, 0x39, 0xc3, 0x59, 0xae, 0x58, + 0x0e, 0x4e, 0xa8, 0xa6, 0xe5, 0x07, 0x38, 0x43, 0x13, 0xaa, 0x69, 0xf1, 0xf0, 0x2e, 0xc1, 0x94, + 0xa6, 0xd1, 0x31, 0xeb, 0x9a, 0xc2, 0xce, 0x58, 0x6e, 0x5e, 0xec, 0x0a, 0x96, 0xa6, 0xad, 0x53, + 0x03, 0x96, 0xe3, 0xae, 0x74, 0x09, 0x4e, 0x04, 0xc1, 0x0a, 0x03, 0x27, 0xfb, 0x46, 0xd9, 0x0b, + 0x5d, 0x82, 0x29, 0xbb, 0xd3, 0x0f, 0x94, 0xba, 0xde, 0x68, 0x77, 0x7a, 0x61, 0x17, 0x60, 0xda, + 0x3e, 0xb0, 0xfb, 0x71, 0x8f, 0x86, 0x71, 0x92, 0x7d, 0x60, 0xf7, 0x02, 0x1f, 0x22, 0x07, 0x6e, + 0x07, 0x69, 0xaa, 0x87, 0xea, 0xf9, 0x53, 0x61, 0xf3, 0x90, 0x42, 0x9a, 0x07, 0x51, 0xd3, 0x14, + 0x64, 0xaa, 0xfb, 0x06, 0x52, 0x54, 0x07, 0x99, 0xaa, 0x9b, 0x3f, 0x13, 0x36, 0xce, 0x69, 0x5a, + 0x85, 0x68, 0xcb, 0x44, 0x29, 0x3d, 0x0a, 0x93, 0xd6, 0xfe, 0x35, 0x8d, 0xa6, 0xa4, 0x62, 0x3b, + 0xa8, 0xa1, 0xbf, 0x90, 0x7f, 0x90, 0xc4, 0x77, 0x02, 0x2b, 0x48, 0x42, 0xee, 0x10, 0xb1, 0xf4, + 0x08, 0x88, 0x9a, 0x7b, 0xa0, 0x3a, 0x36, 0xa9, 0xc9, 0xae, 0xad, 0x6a, 0x28, 0xff, 0x10, 0x35, + 0xa5, 0xf2, 0x6d, 0x2e, 0xc6, 0x4b, 0xc2, 0xbd, 0xa9, 0x37, 0x3c, 0xce, 0xf8, 0x30, 0x5d, 0x12, + 0x44, 0xc6, 0xd8, 0x66, 0x41, 0xc4, 0xa1, 0xe8, 0x7a, 0xf1, 0x2c, 0x31, 0xcb, 0xd9, 0x07, 0x76, + 0xf8, 0xbd, 0x0f, 0xc0, 0x38, 0xb6, 0x0c, 0x5e, 0xfa, 0x08, 0x6d, 0xc8, 0xec, 0x83, 0xd0, 0x1b, + 0xdf, 0xb7, 0xde, 0xb8, 0x58, 0x82, 0x6c, 0x38, 0x3f, 0xa5, 0x34, 0xd0, 0x0c, 0x15, 0x05, 0xdc, + 0xac, 0xac, 0x56, 0xd7, 0x70, 0x9b, 0xf1, 0x7c, 0x45, 0x8c, 0xe1, 0x76, 0x67, 0x73, 0x63, 0xb7, + 0xa2, 0xc8, 0x7b, 0xdb, 0xbb, 0x1b, 0x5b, 0x15, 0x31, 0x1e, 0xee, 0xab, 0xbf, 0x17, 0x83, 0x5c, + 0xf7, 0x11, 0x49, 0xfa, 0x29, 0x38, 0xc5, 0xef, 0x33, 0x5c, 0xe4, 0x29, 0x37, 0x75, 0x87, 0x2c, + 0x99, 0x96, 0x4a, 0xb7, 0x2f, 0x7f, 0xd2, 0xa6, 0x99, 0x55, 0x0d, 0x79, 0xcf, 0xe8, 0x0e, 0x5e, + 0x10, 0x2d, 0xd5, 0x93, 0x36, 0xe1, 0x8c, 0x69, 0x29, 0xae, 0xa7, 0x9a, 0x75, 0xd5, 0xa9, 0x2b, + 0xc1, 0x4d, 0x92, 0xa2, 0x6a, 0x1a, 0x72, 0x5d, 0x8b, 0x6e, 0x55, 0x3e, 0xcb, 0x47, 0x4c, 0xab, + 0xc6, 0x8c, 0x83, 0x1a, 0x5e, 0x66, 0xa6, 0x3d, 0x09, 0x16, 0x3f, 0x2a, 0xc1, 0xee, 0x83, 0x74, + 0x4b, 0xb5, 0x15, 0x64, 0x7a, 0x4e, 0x87, 0x34, 0xc6, 0x29, 0x39, 0xd5, 0x52, 0xed, 0x0a, 0x7e, + 0xfe, 0x60, 0xce, 0x27, 0xff, 0x1c, 0x87, 0x6c, 0xb8, 0x39, 0xc6, 0x67, 0x0d, 0x8d, 0xec, 0x23, + 0x02, 0xa9, 0x34, 0x0f, 0xdc, 0xb3, 0x95, 0x9e, 0x5b, 0xc5, 0x1b, 0x4c, 0x69, 0x94, 0xb6, 0xac, + 0x32, 0x45, 0xe2, 0xcd, 0x1d, 0xd7, 0x16, 0x44, 0x5b, 0x84, 0x94, 0xcc, 0x9e, 0xa4, 0x75, 0x18, + 0xbd, 0xe6, 0x12, 0xee, 0x51, 0xc2, 0xfd, 0xe0, 0xbd, 0xb9, 0x9f, 0xae, 0x11, 0xf2, 0xf4, 0xd3, + 0x35, 0x65, 0xbb, 0x2a, 0x6f, 0x95, 0x37, 0x65, 0x06, 0x97, 0x4e, 0x43, 0xc2, 0x50, 0x6f, 0x75, + 0xba, 0xb7, 0x22, 0x22, 0x1a, 0x36, 0xf0, 0xa7, 0x21, 0x71, 0x13, 0xa9, 0xd7, 0xbb, 0x37, 0x00, + 0x22, 0x7a, 0x1f, 0x53, 0x7f, 0x1e, 0x92, 0x24, 0x5e, 0x12, 0x00, 0x8b, 0x98, 0x38, 0x22, 0xa5, + 0x20, 0xb1, 0x5a, 0x95, 0x71, 0xfa, 0x8b, 0x90, 0xa5, 0x52, 0x65, 0x67, 0xa3, 0xb2, 0x5a, 0x11, + 0x63, 0xc5, 0x25, 0x18, 0xa5, 0x41, 0xc0, 0x4b, 0xc3, 0x0f, 0x83, 0x38, 0xc2, 0x1e, 0x19, 0x87, + 0xc0, 0xb5, 0x7b, 0x5b, 0x2b, 0x15, 0x59, 0x8c, 0x85, 0xa7, 0xd7, 0x85, 0x6c, 0xb8, 0x2f, 0xfe, + 0x60, 0x72, 0xea, 0xbb, 0x02, 0x64, 0x42, 0x7d, 0x2e, 0x6e, 0x50, 0x54, 0xc3, 0xb0, 0x6e, 0x2a, + 0xaa, 0xa1, 0xab, 0x2e, 0x4b, 0x0a, 0x20, 0xa2, 0x32, 0x96, 0x0c, 0x3b, 0x69, 0x1f, 0x88, 0xf3, + 0xaf, 0x08, 0x20, 0xf6, 0xb6, 0x98, 0x3d, 0x0e, 0x0a, 0x1f, 0xaa, 0x83, 0x2f, 0x0b, 0x90, 0xeb, + 0xee, 0x2b, 0x7b, 0xdc, 0x3b, 0xf7, 0xa1, 0xba, 0xf7, 0x66, 0x0c, 0xc6, 0xbb, 0xba, 0xc9, 0x61, + 0xbd, 0xfb, 0x0c, 0x4c, 0xea, 0x75, 0xd4, 0xb2, 0x2d, 0x0f, 0x99, 0x5a, 0x47, 0x31, 0xd0, 0x0d, + 0x64, 0xe4, 0x8b, 0xa4, 0x50, 0xcc, 0xdf, 0xbb, 0x5f, 0x9d, 0xdb, 0x08, 0x70, 0x9b, 0x18, 0x56, + 0x9a, 0xda, 0x58, 0xab, 0x6c, 0xed, 0x54, 0x77, 0x2b, 0xdb, 0xab, 0xcf, 0x29, 0x7b, 0xdb, 0x3f, + 0xb3, 0x5d, 0x7d, 0x66, 0x5b, 0x16, 0xf5, 0x1e, 0xb3, 0xf7, 0x71, 0xa9, 0xef, 0x80, 0xd8, 0xeb, + 0x94, 0x74, 0x0a, 0x06, 0xb9, 0x25, 0x8e, 0x48, 0x53, 0x30, 0xb1, 0x5d, 0x55, 0x6a, 0x1b, 0x6b, + 0x15, 0xa5, 0x72, 0xe5, 0x4a, 0x65, 0x75, 0xb7, 0x46, 0x6f, 0x20, 0x7c, 0xeb, 0xdd, 0xee, 0x45, + 0xfd, 0x52, 0x1c, 0xa6, 0x06, 0x78, 0x22, 0x95, 0xd9, 0xd9, 0x81, 0x1e, 0x67, 0x1e, 0x1f, 0xc6, + 0xfb, 0x39, 0xbc, 0xe5, 0xef, 0xa8, 0x8e, 0xc7, 0x8e, 0x1a, 0x8f, 0x00, 0x8e, 0x92, 0xe9, 0xe9, + 0x0d, 0x1d, 0x39, 0xec, 0xc2, 0x86, 0x1e, 0x28, 0x26, 0x02, 0x39, 0xbd, 0xb3, 0xf9, 0x18, 0x48, + 0xb6, 0xe5, 0xea, 0x9e, 0x7e, 0x03, 0x29, 0xba, 0xc9, 0x6f, 0x77, 0xf0, 0x01, 0x23, 0x21, 0x8b, + 0x5c, 0xb3, 0x61, 0x7a, 0xbe, 0xb5, 0x89, 0x9a, 0x6a, 0x8f, 0x35, 0x2e, 0xe0, 0x71, 0x59, 0xe4, + 0x1a, 0xdf, 0xfa, 0x1c, 0x64, 0xeb, 0x56, 0x1b, 0x77, 0x5d, 0xd4, 0x0e, 0xef, 0x17, 0x82, 0x9c, + 0xa1, 0x32, 0xdf, 0x84, 0xf5, 0xd3, 0xc1, 0xb5, 0x52, 0x56, 0xce, 0x50, 0x19, 0x35, 0x79, 0x18, + 0x26, 0xd4, 0x66, 0xd3, 0xc1, 0xe4, 0x9c, 0x88, 0x9e, 0x10, 0x72, 0xbe, 0x98, 0x18, 0xce, 0x3c, + 0x0d, 0x29, 0x1e, 0x07, 0xbc, 0x25, 0xe3, 0x48, 0x28, 0x36, 0x3d, 0xf6, 0xc6, 0x66, 0xd3, 0x72, + 0xca, 0xe4, 0xca, 0x73, 0x90, 0xd5, 0x5d, 0x25, 0xb8, 0x25, 0x8f, 0x9d, 0x8d, 0xcd, 0xa6, 0xe4, + 0x8c, 0xee, 0xfa, 0x37, 0x8c, 0xc5, 0x57, 0x63, 0x90, 0xeb, 0xbe, 0xe5, 0x97, 0xd6, 0x20, 0x65, + 0x58, 0x9a, 0x4a, 0x52, 0x8b, 0x7e, 0x62, 0x9a, 0x8d, 0xf8, 0x30, 0x30, 0xb7, 0xc9, 0xec, 0x65, + 0x1f, 0x39, 0xf3, 0x0f, 0x02, 0xa4, 0xb8, 0x58, 0x3a, 0x09, 0x09, 0x5b, 0xf5, 0x0e, 0x08, 0x5d, + 0x72, 0x25, 0x26, 0x0a, 0x32, 0x79, 0xc6, 0x72, 0xd7, 0x56, 0x4d, 0x92, 0x02, 0x4c, 0x8e, 0x9f, + 0xf1, 0xbc, 0x1a, 0x48, 0xad, 0x93, 0xe3, 0x87, 0xd5, 0x6a, 0x21, 0xd3, 0x73, 0xf9, 0xbc, 0x32, + 0xf9, 0x2a, 0x13, 0x4b, 0x8f, 0xc1, 0xa4, 0xe7, 0xa8, 0xba, 0xd1, 0x65, 0x9b, 0x20, 0xb6, 0x22, + 0x57, 0xf8, 0xc6, 0x25, 0x38, 0xcd, 0x79, 0xeb, 0xc8, 0x53, 0xb5, 0x03, 0x54, 0x0f, 0x40, 0xa3, + 0xe4, 0x9a, 0xe1, 0x14, 0x33, 0x58, 0x63, 0x7a, 0x8e, 0x2d, 0x7e, 0x5f, 0x80, 0x49, 0x7e, 0x60, + 0xaa, 0xfb, 0xc1, 0xda, 0x02, 0x50, 0x4d, 0xd3, 0xf2, 0xc2, 0xe1, 0xea, 0x4f, 0xe5, 0x3e, 0xdc, + 0x5c, 0xd9, 0x07, 0xc9, 0x21, 0x82, 0x99, 0x16, 0x40, 0xa0, 0x39, 0x32, 0x6c, 0x67, 0x20, 0xc3, + 0x3e, 0xe1, 0x90, 0xef, 0x80, 0xf4, 0x88, 0x0d, 0x54, 0x84, 0x4f, 0x56, 0xd2, 0x34, 0x24, 0xf7, + 0x51, 0x53, 0x37, 0xd9, 0xc5, 0x2c, 0x7d, 0xe0, 0x17, 0x21, 0x09, 0xff, 0x22, 0x64, 0xe5, 0xd3, + 0x30, 0xa5, 0x59, 0xad, 0x5e, 0x77, 0x57, 0xc4, 0x9e, 0x63, 0xbe, 0x7b, 0x55, 0x78, 0x1e, 0x82, + 0x16, 0xf3, 0x5d, 0x41, 0xf8, 0x72, 0x2c, 0xbe, 0xbe, 0xb3, 0xf2, 0xb5, 0xd8, 0xcc, 0x3a, 0x85, + 0xee, 0xf0, 0x91, 0xca, 0xa8, 0x61, 0x20, 0x0d, 0x7b, 0x0f, 0x5f, 0x79, 0x0c, 0x1e, 0x6f, 0xea, + 0xde, 0x41, 0x7b, 0x7f, 0x4e, 0xb3, 0x5a, 0xf3, 0x4d, 0xab, 0x69, 0x05, 0x9f, 0x3e, 0xf1, 0x13, + 0x79, 0x20, 0x7f, 0xb1, 0xcf, 0x9f, 0x69, 0x5f, 0x3a, 0x13, 0xf9, 0xad, 0xb4, 0xb4, 0x0d, 0x53, + 0xcc, 0x58, 0x21, 0xdf, 0x5f, 0xe8, 0x29, 0x42, 0xba, 0xe7, 0x1d, 0x56, 0xfe, 0x1b, 0x6f, 0x91, + 0xed, 0x5a, 0x9e, 0x64, 0x50, 0xac, 0xa3, 0x07, 0x8d, 0x92, 0x0c, 0x27, 0xba, 0xf8, 0xe8, 0xd2, + 0x44, 0x4e, 0x04, 0xe3, 0xf7, 0x18, 0xe3, 0x54, 0x88, 0xb1, 0xc6, 0xa0, 0xa5, 0x55, 0x18, 0x3f, + 0x0e, 0xd7, 0xdf, 0x31, 0xae, 0x2c, 0x0a, 0x93, 0xac, 0xc3, 0x04, 0x21, 0xd1, 0xda, 0xae, 0x67, + 0xb5, 0x48, 0xdd, 0xbb, 0x37, 0xcd, 0xdf, 0xbf, 0x45, 0xd7, 0x4a, 0x0e, 0xc3, 0x56, 0x7d, 0x54, + 0xa9, 0x04, 0xe4, 0x93, 0x53, 0x1d, 0x69, 0x46, 0x04, 0xc3, 0x6b, 0xcc, 0x11, 0xdf, 0xbe, 0xf4, + 0x29, 0x98, 0xc6, 0x7f, 0x93, 0xb2, 0x14, 0xf6, 0x24, 0xfa, 0xc2, 0x2b, 0xff, 0xfd, 0x17, 0xe9, + 0x72, 0x9c, 0xf2, 0x09, 0x42, 0x3e, 0x85, 0x66, 0xb1, 0x89, 0x3c, 0x0f, 0x39, 0xae, 0xa2, 0x1a, + 0x83, 0xdc, 0x0b, 0xdd, 0x18, 0xe4, 0xbf, 0xf0, 0x76, 0xf7, 0x2c, 0xae, 0x53, 0x64, 0xd9, 0x30, + 0x4a, 0x7b, 0x70, 0x6a, 0x40, 0x56, 0x0c, 0xc1, 0xf9, 0x12, 0xe3, 0x9c, 0xee, 0xcb, 0x0c, 0x4c, + 0xbb, 0x03, 0x5c, 0xee, 0xcf, 0xe5, 0x10, 0x9c, 0xbf, 0xcb, 0x38, 0x25, 0x86, 0xe5, 0x53, 0x8a, + 0x19, 0x9f, 0x86, 0xc9, 0x1b, 0xc8, 0xd9, 0xb7, 0x5c, 0x76, 0x4b, 0x33, 0x04, 0xdd, 0xcb, 0x8c, + 0x6e, 0x82, 0x01, 0xc9, 0xb5, 0x0d, 0xe6, 0xba, 0x04, 0xa9, 0x86, 0xaa, 0xa1, 0x21, 0x28, 0xbe, + 0xc8, 0x28, 0xc6, 0xb0, 0x3d, 0x86, 0x96, 0x21, 0xdb, 0xb4, 0xd8, 0xce, 0x14, 0x0d, 0x7f, 0x85, + 0xc1, 0x33, 0x1c, 0xc3, 0x28, 0x6c, 0xcb, 0x6e, 0x1b, 0x78, 0xdb, 0x8a, 0xa6, 0xf8, 0x3d, 0x4e, + 0xc1, 0x31, 0x8c, 0xe2, 0x18, 0x61, 0xfd, 0x7d, 0x4e, 0xe1, 0x86, 0xe2, 0xf9, 0x14, 0x64, 0x2c, + 0xd3, 0xe8, 0x58, 0xe6, 0x30, 0x4e, 0x7c, 0x89, 0x31, 0x00, 0x83, 0x60, 0x82, 0xcb, 0x90, 0x1e, + 0x76, 0x22, 0xfe, 0xf0, 0x6d, 0xbe, 0x3c, 0xf8, 0x0c, 0xac, 0xc3, 0x04, 0x2f, 0x50, 0xba, 0x65, + 0x0e, 0x41, 0xf1, 0x15, 0x46, 0x91, 0x0b, 0xc1, 0xd8, 0x30, 0x3c, 0xe4, 0x7a, 0x4d, 0x34, 0x0c, + 0xc9, 0xab, 0x7c, 0x18, 0x0c, 0xc2, 0x42, 0xb9, 0x8f, 0x4c, 0xed, 0x60, 0x38, 0x86, 0xaf, 0xf2, + 0x50, 0x72, 0x0c, 0xa6, 0x58, 0x85, 0xf1, 0x96, 0xea, 0xb8, 0x07, 0xaa, 0x31, 0xd4, 0x74, 0xfc, + 0x11, 0xe3, 0xc8, 0xfa, 0x20, 0x16, 0x91, 0xb6, 0x79, 0x1c, 0x9a, 0xaf, 0xf1, 0x88, 0x84, 0x60, + 0x6c, 0xe9, 0xb9, 0x1e, 0xb9, 0xd2, 0x3a, 0x0e, 0xdb, 0x1f, 0xf3, 0xa5, 0x47, 0xb1, 0x5b, 0x61, + 0xc6, 0xcb, 0x90, 0x76, 0xf5, 0x5b, 0x43, 0xd1, 0xfc, 0x09, 0x9f, 0x69, 0x02, 0xc0, 0xe0, 0xe7, + 0xe0, 0xf4, 0xc0, 0x6d, 0x62, 0x08, 0xb2, 0x3f, 0x65, 0x64, 0x27, 0x07, 0x6c, 0x15, 0xac, 0x24, + 0x1c, 0x97, 0xf2, 0xcf, 0x78, 0x49, 0x40, 0x3d, 0x5c, 0x3b, 0xf8, 0xac, 0xe0, 0xaa, 0x8d, 0xe3, + 0x45, 0xed, 0xcf, 0x79, 0xd4, 0x28, 0xb6, 0x2b, 0x6a, 0xbb, 0x70, 0x92, 0x31, 0x1e, 0x6f, 0x5e, + 0xbf, 0xce, 0x0b, 0x2b, 0x45, 0xef, 0x75, 0xcf, 0xee, 0xa7, 0x61, 0xc6, 0x0f, 0x27, 0x6f, 0x4a, + 0x5d, 0xa5, 0xa5, 0xda, 0x43, 0x30, 0x7f, 0x83, 0x31, 0xf3, 0x8a, 0xef, 0x77, 0xb5, 0xee, 0x96, + 0x6a, 0x63, 0xf2, 0x67, 0x21, 0xcf, 0xc9, 0xdb, 0xa6, 0x83, 0x34, 0xab, 0x69, 0xea, 0xb7, 0x50, + 0x7d, 0x08, 0xea, 0xbf, 0xe8, 0x99, 0xaa, 0xbd, 0x10, 0x1c, 0x33, 0x6f, 0x80, 0xe8, 0xf7, 0x2a, + 0x8a, 0xde, 0xb2, 0x2d, 0xc7, 0x8b, 0x60, 0xfc, 0x26, 0x9f, 0x29, 0x1f, 0xb7, 0x41, 0x60, 0xa5, + 0x0a, 0xe4, 0xc8, 0xe3, 0xb0, 0x29, 0xf9, 0x97, 0x8c, 0x68, 0x3c, 0x40, 0xb1, 0xc2, 0xa1, 0x59, + 0x2d, 0x5b, 0x75, 0x86, 0xa9, 0x7f, 0x7f, 0xc5, 0x0b, 0x07, 0x83, 0xb0, 0xc2, 0xe1, 0x75, 0x6c, + 0x84, 0x77, 0xfb, 0x21, 0x18, 0xbe, 0xc5, 0x0b, 0x07, 0xc7, 0x30, 0x0a, 0xde, 0x30, 0x0c, 0x41, + 0xf1, 0xd7, 0x9c, 0x82, 0x63, 0x30, 0xc5, 0x27, 0x83, 0x8d, 0xd6, 0x41, 0x4d, 0xdd, 0xf5, 0x1c, + 0xda, 0x0a, 0xdf, 0x9b, 0xea, 0xdb, 0x6f, 0x77, 0x37, 0x61, 0x72, 0x08, 0x8a, 0x2b, 0x11, 0xbb, + 0x42, 0x25, 0x27, 0xa5, 0x68, 0xc7, 0xbe, 0xc3, 0x2b, 0x51, 0x08, 0x86, 0x7d, 0x0b, 0x75, 0x88, + 0x38, 0xec, 0x1a, 0x3e, 0x1f, 0x0c, 0x41, 0xf7, 0xdd, 0x1e, 0xe7, 0x6a, 0x1c, 0x8b, 0x39, 0x43, + 0xfd, 0x4f, 0xdb, 0xbc, 0x8e, 0x3a, 0x43, 0x65, 0xe7, 0xdf, 0xf4, 0xf4, 0x3f, 0x7b, 0x14, 0x49, + 0x6b, 0xc8, 0x44, 0x4f, 0x3f, 0x25, 0x45, 0xfd, 0x58, 0x27, 0xff, 0xf3, 0x77, 0xd9, 0x78, 0xbb, + 0xdb, 0xa9, 0xd2, 0x26, 0x4e, 0xf2, 0xee, 0xa6, 0x27, 0x9a, 0xec, 0xc5, 0xbb, 0x7e, 0x9e, 0x77, + 0xf5, 0x3c, 0xa5, 0x2b, 0x30, 0xde, 0xd5, 0xf0, 0x44, 0x53, 0xfd, 0x02, 0xa3, 0xca, 0x86, 0xfb, + 0x9d, 0xd2, 0x12, 0x24, 0x70, 0xf3, 0x12, 0x0d, 0xff, 0x45, 0x06, 0x27, 0xe6, 0xa5, 0x8f, 0x43, + 0x8a, 0x37, 0x2d, 0xd1, 0xd0, 0x5f, 0x62, 0x50, 0x1f, 0x82, 0xe1, 0xbc, 0x61, 0x89, 0x86, 0xff, + 0x32, 0x87, 0x73, 0x08, 0x86, 0x0f, 0x1f, 0xc2, 0xbf, 0xfd, 0x95, 0x04, 0xdb, 0x74, 0x78, 0xec, + 0x2e, 0xc3, 0x18, 0xeb, 0x54, 0xa2, 0xd1, 0x9f, 0x65, 0x2f, 0xe7, 0x88, 0xd2, 0x05, 0x48, 0x0e, + 0x19, 0xf0, 0x5f, 0x65, 0x50, 0x6a, 0x5f, 0x5a, 0x85, 0x4c, 0xa8, 0x3b, 0x89, 0x86, 0xff, 0x1a, + 0x83, 0x87, 0x51, 0xd8, 0x75, 0xd6, 0x9d, 0x44, 0x13, 0xfc, 0x3a, 0x77, 0x9d, 0x21, 0x70, 0xd8, + 0x78, 0x63, 0x12, 0x8d, 0xfe, 0x0d, 0x1e, 0x75, 0x0e, 0x29, 0x3d, 0x05, 0x69, 0x7f, 0xb3, 0x89, + 0xc6, 0xff, 0x26, 0xc3, 0x07, 0x18, 0x1c, 0x81, 0xd0, 0x66, 0x17, 0x4d, 0xf1, 0x39, 0x1e, 0x81, + 0x10, 0x0a, 0x2f, 0xa3, 0xde, 0x06, 0x26, 0x9a, 0xe9, 0xb7, 0xf8, 0x32, 0xea, 0xe9, 0x5f, 0xf0, + 0x6c, 0x92, 0x9a, 0x1f, 0x4d, 0xf1, 0xdb, 0x7c, 0x36, 0x89, 0x3d, 0x76, 0xa3, 0xb7, 0x23, 0x88, + 0xe6, 0xf8, 0x1d, 0xee, 0x46, 0x4f, 0x43, 0x50, 0xda, 0x01, 0xa9, 0xbf, 0x1b, 0x88, 0xe6, 0xfb, + 0x3c, 0xe3, 0x9b, 0xec, 0x6b, 0x06, 0x4a, 0xcf, 0xc0, 0xc9, 0xc1, 0x9d, 0x40, 0x34, 0xeb, 0x17, + 0xee, 0xf6, 0x9c, 0xdd, 0xc2, 0x8d, 0x40, 0x69, 0x37, 0xd8, 0x52, 0xc2, 0x5d, 0x40, 0x34, 0xed, + 0x4b, 0x77, 0xbb, 0x0b, 0x77, 0xb8, 0x09, 0x28, 0x95, 0x01, 0x82, 0x0d, 0x38, 0x9a, 0xeb, 0x65, + 0xc6, 0x15, 0x02, 0xe1, 0xa5, 0xc1, 0xf6, 0xdf, 0x68, 0xfc, 0x17, 0xf9, 0xd2, 0x60, 0x08, 0xbc, + 0x34, 0xf8, 0xd6, 0x1b, 0x8d, 0x7e, 0x85, 0x2f, 0x0d, 0x0e, 0xc1, 0x99, 0x1d, 0xda, 0xdd, 0xa2, + 0x19, 0xbe, 0xc4, 0x33, 0x3b, 0x84, 0x2a, 0x6d, 0xc3, 0x64, 0xdf, 0x86, 0x18, 0x4d, 0xf5, 0x65, + 0x46, 0x25, 0xf6, 0xee, 0x87, 0xe1, 0xcd, 0x8b, 0x6d, 0x86, 0xd1, 0x6c, 0x7f, 0xd0, 0xb3, 0x79, + 0xb1, 0xbd, 0xb0, 0x74, 0x19, 0x52, 0x66, 0xdb, 0x30, 0xf0, 0xe2, 0x91, 0xee, 0xfd, 0x03, 0xbb, + 0xfc, 0xbf, 0xbe, 0xc7, 0xa2, 0xc3, 0x01, 0xa5, 0x25, 0x48, 0xa2, 0xd6, 0x3e, 0xaa, 0x47, 0x21, + 0xff, 0xed, 0x3d, 0x5e, 0x30, 0xb1, 0x75, 0xe9, 0x29, 0x00, 0x7a, 0x35, 0x42, 0x3e, 0xfb, 0x45, + 0x60, 0xff, 0xfd, 0x3d, 0xf6, 0xd3, 0x97, 0x00, 0x12, 0x10, 0xd0, 0x1f, 0xd2, 0xdc, 0x9b, 0xe0, + 0xed, 0x6e, 0x02, 0x32, 0x23, 0x97, 0x60, 0xec, 0x9a, 0x6b, 0x99, 0x9e, 0xda, 0x8c, 0x42, 0xff, + 0x07, 0x43, 0x73, 0x7b, 0x1c, 0xb0, 0x96, 0xe5, 0x20, 0x4f, 0x6d, 0xba, 0x51, 0xd8, 0xff, 0x64, + 0x58, 0x1f, 0x80, 0xc1, 0x9a, 0xea, 0x7a, 0xc3, 0x8c, 0xfb, 0x47, 0x1c, 0xcc, 0x01, 0xd8, 0x69, + 0xfc, 0xf7, 0x75, 0xd4, 0x89, 0xc2, 0xbe, 0xc3, 0x9d, 0x66, 0xf6, 0xa5, 0x8f, 0x43, 0x1a, 0xff, + 0x49, 0x7f, 0xcf, 0x16, 0x01, 0xfe, 0x2f, 0x06, 0x0e, 0x10, 0xf8, 0xcd, 0xae, 0x57, 0xf7, 0xf4, + 0xe8, 0x60, 0xff, 0x37, 0x9b, 0x69, 0x6e, 0x5f, 0x2a, 0x43, 0xc6, 0xf5, 0xea, 0xf5, 0x36, 0xeb, + 0x4f, 0x23, 0xe0, 0xff, 0xf3, 0x9e, 0x7f, 0x65, 0xe1, 0x63, 0xf0, 0x6c, 0xdf, 0xbc, 0xee, 0xd9, + 0x16, 0xf9, 0xcc, 0x11, 0xc5, 0x70, 0x97, 0x31, 0x84, 0x20, 0x2b, 0x95, 0xc1, 0xd7, 0xb7, 0xb0, + 0x6e, 0xad, 0x5b, 0xf4, 0xe2, 0xf6, 0xf9, 0x62, 0xf4, 0x0d, 0x2c, 0xfc, 0x6f, 0x0a, 0x4e, 0x68, + 0x56, 0x6b, 0xdf, 0x72, 0xe7, 0xf7, 0x2d, 0xef, 0x60, 0xde, 0x32, 0x19, 0x99, 0x14, 0xb7, 0x4c, + 0x34, 0x73, 0xbc, 0x4b, 0xdc, 0xe2, 0x69, 0x48, 0xd6, 0xda, 0xfb, 0xfb, 0x1d, 0x49, 0x84, 0xb8, + 0xdb, 0xde, 0x67, 0x3f, 0x88, 0xc2, 0x7f, 0x16, 0xdf, 0x88, 0xc3, 0x78, 0xd9, 0x30, 0x76, 0x3b, + 0x36, 0x72, 0xab, 0x26, 0xaa, 0x36, 0xa4, 0x3c, 0x8c, 0x92, 0x51, 0x3e, 0x49, 0xcc, 0x84, 0xab, + 0x23, 0x32, 0x7b, 0xf6, 0x35, 0x0b, 0xe4, 0x7a, 0x3b, 0xe6, 0x6b, 0x16, 0x7c, 0xcd, 0x79, 0x7a, + 0xbb, 0xed, 0x6b, 0xce, 0xfb, 0x9a, 0x45, 0x72, 0xc7, 0x1d, 0xf7, 0x35, 0x8b, 0xbe, 0x66, 0x89, + 0x7c, 0xc3, 0x19, 0xf7, 0x35, 0x4b, 0xbe, 0x66, 0x99, 0x7c, 0xb5, 0x49, 0xf8, 0x9a, 0x65, 0x5f, + 0x73, 0x81, 0x7c, 0xac, 0x99, 0xf4, 0x35, 0x17, 0x7c, 0xcd, 0x45, 0xf2, 0x81, 0x46, 0xf2, 0x35, + 0x17, 0x7d, 0xcd, 0x25, 0xf2, 0xcb, 0xa7, 0x31, 0x5f, 0x73, 0x49, 0x9a, 0x81, 0x31, 0x3a, 0xb2, + 0x27, 0xc8, 0x57, 0xfc, 0x89, 0xab, 0x23, 0x32, 0x17, 0x04, 0xba, 0x27, 0xc9, 0xaf, 0x9b, 0x46, + 0x03, 0xdd, 0x93, 0x81, 0x6e, 0x81, 0xfc, 0x27, 0x0b, 0x31, 0xd0, 0x2d, 0x04, 0xba, 0xf3, 0xf9, + 0x71, 0x9c, 0x1c, 0x81, 0xee, 0x7c, 0xa0, 0x5b, 0xcc, 0xe7, 0xf0, 0x0c, 0x04, 0xba, 0xc5, 0x40, + 0xb7, 0x94, 0x9f, 0x38, 0x2b, 0xcc, 0x66, 0x03, 0xdd, 0x92, 0xf4, 0x38, 0x64, 0xdc, 0xf6, 0xbe, + 0xc2, 0xca, 0x3c, 0xf9, 0x15, 0x55, 0x66, 0x01, 0xe6, 0x70, 0x4e, 0x90, 0x69, 0xbd, 0x3a, 0x22, + 0x83, 0xdb, 0xde, 0x67, 0x55, 0x78, 0x25, 0x0b, 0xe4, 0xf2, 0x49, 0x21, 0x3f, 0x7e, 0x2e, 0xbe, + 0x2e, 0x40, 0x7a, 0xf7, 0xa6, 0x45, 0xbe, 0xe1, 0xbb, 0x3f, 0xe1, 0xc9, 0xe5, 0x4e, 0x9f, 0x5f, + 0x24, 0x9f, 0x59, 0xd3, 0x57, 0x05, 0x99, 0x0b, 0x02, 0xdd, 0x52, 0xfe, 0x01, 0x32, 0x20, 0x5f, + 0xb7, 0x24, 0xcd, 0x43, 0x36, 0x34, 0xa0, 0x05, 0xf2, 0xfb, 0xa6, 0xee, 0x11, 0x09, 0x72, 0x26, + 0x18, 0xd1, 0xc2, 0x4a, 0x12, 0x70, 0xda, 0xe3, 0x7f, 0xbc, 0x9b, 0x56, 0xf1, 0x73, 0x31, 0xc8, + 0xd0, 0xfb, 0x6a, 0x32, 0x2a, 0xfc, 0x2a, 0x7a, 0xa4, 0xe9, 0x30, 0x37, 0x46, 0x64, 0x2e, 0x90, + 0x64, 0x00, 0x6a, 0x8a, 0x33, 0x9c, 0x7a, 0xb2, 0xf2, 0xc4, 0x3f, 0xbd, 0x71, 0xe6, 0x63, 0x47, + 0xae, 0x20, 0x1c, 0xbb, 0x79, 0x5a, 0xbf, 0xe7, 0xf6, 0x74, 0xd3, 0x7b, 0x72, 0xe1, 0x22, 0x0e, + 0x70, 0xc0, 0x22, 0xed, 0x41, 0x6a, 0x55, 0x75, 0xc9, 0x2f, 0x23, 0x89, 0xeb, 0x89, 0x95, 0x0b, + 0xff, 0xf7, 0xc6, 0x99, 0xf3, 0x11, 0x8c, 0xac, 0xb4, 0xce, 0x6d, 0x75, 0x30, 0xeb, 0xf2, 0x22, + 0x86, 0x5f, 0x1d, 0x91, 0x7d, 0x2a, 0x69, 0x81, 0xbb, 0xba, 0xad, 0xb6, 0xe8, 0x0f, 0xb9, 0xe2, + 0x2b, 0xe2, 0xe1, 0x1b, 0x67, 0xb2, 0x5b, 0x9d, 0x40, 0x1e, 0xb8, 0x82, 0x9f, 0x56, 0x52, 0x30, + 0x4a, 0x5d, 0x5d, 0x59, 0x7b, 0xed, 0x4e, 0x61, 0xe4, 0xf5, 0x3b, 0x85, 0x91, 0x7f, 0xbc, 0x53, + 0x18, 0x79, 0xf3, 0x4e, 0x41, 0x78, 0xe7, 0x4e, 0x41, 0x78, 0xf7, 0x4e, 0x41, 0xb8, 0x7d, 0x58, + 0x10, 0xbe, 0x7a, 0x58, 0x10, 0xbe, 0x7e, 0x58, 0x10, 0xbe, 0x7d, 0x58, 0x10, 0x5e, 0x3b, 0x2c, + 0x08, 0xaf, 0x1f, 0x16, 0x84, 0x37, 0x0f, 0x0b, 0xc2, 0x0f, 0x0f, 0x0b, 0x23, 0xef, 0x1c, 0x16, + 0x84, 0x77, 0x0f, 0x0b, 0x23, 0xb7, 0x7f, 0x50, 0x18, 0xf9, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x23, 0xf5, 0xf1, 0xb4, 0x13, 0x37, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -4082,6 +4087,9 @@ return dAtA } func (m *Subby) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Sub != nil { @@ -4095,6 +4103,9 @@ } func (m *AllTypesOneOf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TestOneof != nil { @@ -4107,84 +4118,126 @@ } func (m *AllTypesOneOf_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *AllTypesOneOf_Field4) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field4)) return n } func (m *AllTypesOneOf_Field5) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field5)) return n } func (m *AllTypesOneOf_Field6) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field6)) return n } func (m *AllTypesOneOf_Field7) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field7)) return n } func (m *AllTypesOneOf_Field8) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field8)) return n } func (m *AllTypesOneOf_Field9) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field10) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field11) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field12) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field13) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *AllTypesOneOf_Field14) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field14) @@ -4192,6 +4245,9 @@ return n } func (m *AllTypesOneOf_Field15) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field15 != nil { @@ -4201,6 +4257,9 @@ return n } func (m *AllTypesOneOf_SubMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage != nil { @@ -4210,6 +4269,9 @@ return n } func (m *TwoOneofs) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.One != nil { @@ -4225,24 +4287,36 @@ } func (m *TwoOneofs_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *TwoOneofs_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *TwoOneofs_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *TwoOneofs_Field34) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field34) @@ -4250,6 +4324,9 @@ return n } func (m *TwoOneofs_Field35) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field35 != nil { @@ -4259,6 +4336,9 @@ return n } func (m *TwoOneofs_SubMessage2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage2 != nil { @@ -4268,6 +4348,9 @@ return n } func (m *CustomOneof) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Custom != nil { @@ -4280,6 +4363,9 @@ } func (m *CustomOneof_Stringy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Stringy) @@ -4287,6 +4373,9 @@ return n } func (m *CustomOneof_CustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.CustomType.Size() @@ -4294,12 +4383,18 @@ return n } func (m *CustomOneof_CastType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 + sovOne(uint64(m.CastType)) return n } func (m *CustomOneof_MyCustomName) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 + sovOne(uint64(m.MyCustomName)) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/combos/marshaler/one.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/combos/marshaler/one.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/combos/marshaler/one.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/combos/marshaler/one.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1098,269 +1098,274 @@ func OneDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4180 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7a, 0x5d, 0x6c, 0x1c, 0xd7, - 0x75, 0x3f, 0x67, 0x3f, 0xc8, 0xdd, 0xb3, 0xcb, 0xe5, 0xf0, 0x92, 0x96, 0x56, 0x74, 0xbc, 0x92, - 0xd6, 0x76, 0x4c, 0xdb, 0x31, 0x69, 0x53, 0x24, 0x25, 0xad, 0xfe, 0x89, 0xff, 0x4b, 0x72, 0x45, - 0xd1, 0x25, 0xb9, 0xcc, 0x90, 0x8c, 0x3f, 0x82, 0x62, 0x30, 0x9c, 0xbd, 0x5c, 0x8e, 0x34, 0x3b, - 0x33, 0x99, 0x99, 0x95, 0x4c, 0xa1, 0x0f, 0x2a, 0xdc, 0x0f, 0x04, 0x45, 0xbf, 0xd2, 0x02, 0x4d, - 0x5c, 0xc7, 0x6d, 0x0a, 0xa4, 0x4e, 0xd3, 0xaf, 0xa4, 0x69, 0xd3, 0xa4, 0x4f, 0x7d, 0x49, 0xeb, - 0xa7, 0xc2, 0x79, 0x2b, 0x8a, 0xc2, 0xb0, 0x18, 0x03, 0x4d, 0x5b, 0xb7, 0x71, 0x5b, 0x3f, 0x18, - 0xf1, 0x4b, 0x71, 0xbf, 0x66, 0x66, 0x3f, 0xa8, 0x59, 0x06, 0xb5, 0xf3, 0x44, 0xce, 0x39, 0xe7, - 0xf7, 0x9b, 0x73, 0xcf, 0x3d, 0xf7, 0xdc, 0x73, 0xef, 0x2c, 0xfc, 0xe8, 0x32, 0x9c, 0x6b, 0xda, - 0x76, 0xd3, 0xc4, 0xb3, 0x8e, 0x6b, 0xfb, 0xf6, 0x5e, 0x7b, 0x7f, 0xb6, 0x81, 0x3d, 0xdd, 0x35, - 0x1c, 0xdf, 0x76, 0x67, 0xa8, 0x0c, 0x8d, 0x31, 0x8b, 0x19, 0x61, 0x51, 0xde, 0x80, 0xf1, 0xab, - 0x86, 0x89, 0x57, 0x02, 0xc3, 0x6d, 0xec, 0xa3, 0x4b, 0x90, 0xda, 0x37, 0x4c, 0x5c, 0x94, 0xce, - 0x25, 0xa7, 0x73, 0x73, 0x0f, 0xcd, 0x74, 0x81, 0x66, 0x3a, 0x11, 0x5b, 0x44, 0xac, 0x50, 0x44, - 0xf9, 0xed, 0x14, 0x4c, 0xf4, 0xd1, 0x22, 0x04, 0x29, 0x4b, 0x6b, 0x11, 0x46, 0x69, 0x3a, 0xab, - 0xd0, 0xff, 0x51, 0x11, 0x46, 0x1c, 0x4d, 0xbf, 0xa1, 0x35, 0x71, 0x31, 0x41, 0xc5, 0xe2, 0x11, - 0x95, 0x00, 0x1a, 0xd8, 0xc1, 0x56, 0x03, 0x5b, 0xfa, 0x61, 0x31, 0x79, 0x2e, 0x39, 0x9d, 0x55, - 0x22, 0x12, 0xf4, 0x38, 0x8c, 0x3b, 0xed, 0x3d, 0xd3, 0xd0, 0xd5, 0x88, 0x19, 0x9c, 0x4b, 0x4e, - 0xa7, 0x15, 0x99, 0x29, 0x56, 0x42, 0xe3, 0x47, 0x60, 0xec, 0x16, 0xd6, 0x6e, 0x44, 0x4d, 0x73, - 0xd4, 0xb4, 0x40, 0xc4, 0x11, 0xc3, 0x65, 0xc8, 0xb7, 0xb0, 0xe7, 0x69, 0x4d, 0xac, 0xfa, 0x87, - 0x0e, 0x2e, 0xa6, 0xe8, 0xe8, 0xcf, 0xf5, 0x8c, 0xbe, 0x7b, 0xe4, 0x39, 0x8e, 0xda, 0x39, 0x74, - 0x30, 0xaa, 0x42, 0x16, 0x5b, 0xed, 0x16, 0x63, 0x48, 0x1f, 0x13, 0xbf, 0x9a, 0xd5, 0x6e, 0x75, - 0xb3, 0x64, 0x08, 0x8c, 0x53, 0x8c, 0x78, 0xd8, 0xbd, 0x69, 0xe8, 0xb8, 0x38, 0x4c, 0x09, 0x1e, - 0xe9, 0x21, 0xd8, 0x66, 0xfa, 0x6e, 0x0e, 0x81, 0x43, 0xcb, 0x90, 0xc5, 0x2f, 0xfa, 0xd8, 0xf2, - 0x0c, 0xdb, 0x2a, 0x8e, 0x50, 0x92, 0x87, 0xfb, 0xcc, 0x22, 0x36, 0x1b, 0xdd, 0x14, 0x21, 0x0e, - 0x2d, 0xc2, 0x88, 0xed, 0xf8, 0x86, 0x6d, 0x79, 0xc5, 0xcc, 0x39, 0x69, 0x3a, 0x37, 0xf7, 0xb1, - 0xbe, 0x89, 0x50, 0x67, 0x36, 0x8a, 0x30, 0x46, 0x6b, 0x20, 0x7b, 0x76, 0xdb, 0xd5, 0xb1, 0xaa, - 0xdb, 0x0d, 0xac, 0x1a, 0xd6, 0xbe, 0x5d, 0xcc, 0x52, 0x82, 0xb3, 0xbd, 0x03, 0xa1, 0x86, 0xcb, - 0x76, 0x03, 0xaf, 0x59, 0xfb, 0xb6, 0x52, 0xf0, 0x3a, 0x9e, 0xd1, 0x29, 0x18, 0xf6, 0x0e, 0x2d, - 0x5f, 0x7b, 0xb1, 0x98, 0xa7, 0x19, 0xc2, 0x9f, 0xca, 0xdf, 0x1d, 0x86, 0xb1, 0x41, 0x52, 0xec, - 0x0a, 0xa4, 0xf7, 0xc9, 0x28, 0x8b, 0x89, 0x93, 0xc4, 0x80, 0x61, 0x3a, 0x83, 0x38, 0xfc, 0x13, - 0x06, 0xb1, 0x0a, 0x39, 0x0b, 0x7b, 0x3e, 0x6e, 0xb0, 0x8c, 0x48, 0x0e, 0x98, 0x53, 0xc0, 0x40, - 0xbd, 0x29, 0x95, 0xfa, 0x89, 0x52, 0xea, 0x39, 0x18, 0x0b, 0x5c, 0x52, 0x5d, 0xcd, 0x6a, 0x8a, - 0xdc, 0x9c, 0x8d, 0xf3, 0x64, 0xa6, 0x26, 0x70, 0x0a, 0x81, 0x29, 0x05, 0xdc, 0xf1, 0x8c, 0x56, - 0x00, 0x6c, 0x0b, 0xdb, 0xfb, 0x6a, 0x03, 0xeb, 0x66, 0x31, 0x73, 0x4c, 0x94, 0xea, 0xc4, 0xa4, - 0x27, 0x4a, 0x36, 0x93, 0xea, 0x26, 0xba, 0x1c, 0xa6, 0xda, 0xc8, 0x31, 0x99, 0xb2, 0xc1, 0x16, - 0x59, 0x4f, 0xb6, 0xed, 0x42, 0xc1, 0xc5, 0x24, 0xef, 0x71, 0x83, 0x8f, 0x2c, 0x4b, 0x9d, 0x98, - 0x89, 0x1d, 0x99, 0xc2, 0x61, 0x6c, 0x60, 0xa3, 0x6e, 0xf4, 0x11, 0x3d, 0x08, 0x81, 0x40, 0xa5, - 0x69, 0x05, 0xb4, 0x0a, 0xe5, 0x85, 0x70, 0x53, 0x6b, 0xe1, 0xa9, 0xdb, 0x50, 0xe8, 0x0c, 0x0f, - 0x9a, 0x84, 0xb4, 0xe7, 0x6b, 0xae, 0x4f, 0xb3, 0x30, 0xad, 0xb0, 0x07, 0x24, 0x43, 0x12, 0x5b, - 0x0d, 0x5a, 0xe5, 0xd2, 0x0a, 0xf9, 0x17, 0xfd, 0xff, 0x70, 0xc0, 0x49, 0x3a, 0xe0, 0x8f, 0xf7, - 0xce, 0x68, 0x07, 0x73, 0xf7, 0xb8, 0xa7, 0x2e, 0xc2, 0x68, 0xc7, 0x00, 0x06, 0x7d, 0x75, 0xf9, - 0xe7, 0xe0, 0xbe, 0xbe, 0xd4, 0xe8, 0x39, 0x98, 0x6c, 0x5b, 0x86, 0xe5, 0x63, 0xd7, 0x71, 0x31, - 0xc9, 0x58, 0xf6, 0xaa, 0xe2, 0xbf, 0x8c, 0x1c, 0x93, 0x73, 0xbb, 0x51, 0x6b, 0xc6, 0xa2, 0x4c, - 0xb4, 0x7b, 0x85, 0x8f, 0x65, 0x33, 0x3f, 0x1c, 0x91, 0xef, 0xdc, 0xb9, 0x73, 0x27, 0x51, 0xfe, - 0xe2, 0x30, 0x4c, 0xf6, 0x5b, 0x33, 0x7d, 0x97, 0xef, 0x29, 0x18, 0xb6, 0xda, 0xad, 0x3d, 0xec, - 0xd2, 0x20, 0xa5, 0x15, 0xfe, 0x84, 0xaa, 0x90, 0x36, 0xb5, 0x3d, 0x6c, 0x16, 0x53, 0xe7, 0xa4, - 0xe9, 0xc2, 0xdc, 0xe3, 0x03, 0xad, 0xca, 0x99, 0x75, 0x02, 0x51, 0x18, 0x12, 0x7d, 0x0a, 0x52, - 0xbc, 0x44, 0x13, 0x86, 0xc7, 0x06, 0x63, 0x20, 0x6b, 0x49, 0xa1, 0x38, 0x74, 0x3f, 0x64, 0xc9, - 0x5f, 0x96, 0x1b, 0xc3, 0xd4, 0xe7, 0x0c, 0x11, 0x90, 0xbc, 0x40, 0x53, 0x90, 0xa1, 0xcb, 0xa4, - 0x81, 0xc5, 0xd6, 0x16, 0x3c, 0x93, 0xc4, 0x6a, 0xe0, 0x7d, 0xad, 0x6d, 0xfa, 0xea, 0x4d, 0xcd, - 0x6c, 0x63, 0x9a, 0xf0, 0x59, 0x25, 0xcf, 0x85, 0x9f, 0x21, 0x32, 0x74, 0x16, 0x72, 0x6c, 0x55, - 0x19, 0x56, 0x03, 0xbf, 0x48, 0xab, 0x67, 0x5a, 0x61, 0x0b, 0x6d, 0x8d, 0x48, 0xc8, 0xeb, 0xaf, - 0x7b, 0xb6, 0x25, 0x52, 0x93, 0xbe, 0x82, 0x08, 0xe8, 0xeb, 0x2f, 0x76, 0x17, 0xee, 0x07, 0xfa, - 0x0f, 0xaf, 0x3b, 0xa7, 0xca, 0xdf, 0x4e, 0x40, 0x8a, 0xd6, 0x8b, 0x31, 0xc8, 0xed, 0x3c, 0xbf, - 0x55, 0x53, 0x57, 0xea, 0xbb, 0x4b, 0xeb, 0x35, 0x59, 0x42, 0x05, 0x00, 0x2a, 0xb8, 0xba, 0x5e, - 0xaf, 0xee, 0xc8, 0x89, 0xe0, 0x79, 0x6d, 0x73, 0x67, 0x71, 0x5e, 0x4e, 0x06, 0x80, 0x5d, 0x26, - 0x48, 0x45, 0x0d, 0x2e, 0xcc, 0xc9, 0x69, 0x24, 0x43, 0x9e, 0x11, 0xac, 0x3d, 0x57, 0x5b, 0x59, - 0x9c, 0x97, 0x87, 0x3b, 0x25, 0x17, 0xe6, 0xe4, 0x11, 0x34, 0x0a, 0x59, 0x2a, 0x59, 0xaa, 0xd7, - 0xd7, 0xe5, 0x4c, 0xc0, 0xb9, 0xbd, 0xa3, 0xac, 0x6d, 0xae, 0xca, 0xd9, 0x80, 0x73, 0x55, 0xa9, - 0xef, 0x6e, 0xc9, 0x10, 0x30, 0x6c, 0xd4, 0xb6, 0xb7, 0xab, 0xab, 0x35, 0x39, 0x17, 0x58, 0x2c, - 0x3d, 0xbf, 0x53, 0xdb, 0x96, 0xf3, 0x1d, 0x6e, 0x5d, 0x98, 0x93, 0x47, 0x83, 0x57, 0xd4, 0x36, - 0x77, 0x37, 0xe4, 0x02, 0x1a, 0x87, 0x51, 0xf6, 0x0a, 0xe1, 0xc4, 0x58, 0x97, 0x68, 0x71, 0x5e, - 0x96, 0x43, 0x47, 0x18, 0xcb, 0x78, 0x87, 0x60, 0x71, 0x5e, 0x46, 0xe5, 0x65, 0x48, 0xd3, 0xec, - 0x42, 0x08, 0x0a, 0xeb, 0xd5, 0xa5, 0xda, 0xba, 0x5a, 0xdf, 0xda, 0x59, 0xab, 0x6f, 0x56, 0xd7, - 0x65, 0x29, 0x94, 0x29, 0xb5, 0x4f, 0xef, 0xae, 0x29, 0xb5, 0x15, 0x39, 0x11, 0x95, 0x6d, 0xd5, - 0xaa, 0x3b, 0xb5, 0x15, 0x39, 0x59, 0xd6, 0x61, 0xb2, 0x5f, 0x9d, 0xec, 0xbb, 0x32, 0x22, 0x53, - 0x9c, 0x38, 0x66, 0x8a, 0x29, 0x57, 0xcf, 0x14, 0xff, 0x20, 0x01, 0x13, 0x7d, 0xf6, 0x8a, 0xbe, - 0x2f, 0x79, 0x1a, 0xd2, 0x2c, 0x45, 0xd9, 0xee, 0xf9, 0x68, 0xdf, 0x4d, 0x87, 0x26, 0x6c, 0xcf, - 0x0e, 0x4a, 0x71, 0xd1, 0x0e, 0x22, 0x79, 0x4c, 0x07, 0x41, 0x28, 0x7a, 0x6a, 0xfa, 0xcf, 0xf6, - 0xd4, 0x74, 0xb6, 0xed, 0x2d, 0x0e, 0xb2, 0xed, 0x51, 0xd9, 0xc9, 0x6a, 0x7b, 0xba, 0x4f, 0x6d, - 0xbf, 0x02, 0xe3, 0x3d, 0x44, 0x03, 0xd7, 0xd8, 0x97, 0x24, 0x28, 0x1e, 0x17, 0x9c, 0x98, 0x4a, - 0x97, 0xe8, 0xa8, 0x74, 0x57, 0xba, 0x23, 0x78, 0xfe, 0xf8, 0x49, 0xe8, 0x99, 0xeb, 0xd7, 0x24, - 0x38, 0xd5, 0xbf, 0x53, 0xec, 0xeb, 0xc3, 0xa7, 0x60, 0xb8, 0x85, 0xfd, 0x03, 0x5b, 0x74, 0x4b, - 0x1f, 0xef, 0xb3, 0x07, 0x13, 0x75, 0xf7, 0x64, 0x73, 0x54, 0x74, 0x13, 0x4f, 0x1e, 0xd7, 0xee, - 0x31, 0x6f, 0x7a, 0x3c, 0xfd, 0x7c, 0x02, 0xee, 0xeb, 0x4b, 0xde, 0xd7, 0xd1, 0x07, 0x00, 0x0c, - 0xcb, 0x69, 0xfb, 0xac, 0x23, 0x62, 0x05, 0x36, 0x4b, 0x25, 0xb4, 0x78, 0x91, 0xe2, 0xd9, 0xf6, - 0x03, 0x7d, 0x92, 0xea, 0x81, 0x89, 0xa8, 0xc1, 0xa5, 0xd0, 0xd1, 0x14, 0x75, 0xb4, 0x74, 0xcc, - 0x48, 0x7b, 0x12, 0xf3, 0x49, 0x90, 0x75, 0xd3, 0xc0, 0x96, 0xaf, 0x7a, 0xbe, 0x8b, 0xb5, 0x96, - 0x61, 0x35, 0xe9, 0x0e, 0x92, 0xa9, 0xa4, 0xf7, 0x35, 0xd3, 0xc3, 0xca, 0x18, 0x53, 0x6f, 0x0b, - 0x2d, 0x41, 0xd0, 0x04, 0x72, 0x23, 0x88, 0xe1, 0x0e, 0x04, 0x53, 0x07, 0x88, 0xf2, 0xb7, 0x32, - 0x90, 0x8b, 0xf4, 0xd5, 0xe8, 0x3c, 0xe4, 0xaf, 0x6b, 0x37, 0x35, 0x55, 0x9c, 0x95, 0x58, 0x24, - 0x72, 0x44, 0xb6, 0xc5, 0xcf, 0x4b, 0x4f, 0xc2, 0x24, 0x35, 0xb1, 0xdb, 0x3e, 0x76, 0x55, 0xdd, - 0xd4, 0x3c, 0x8f, 0x06, 0x2d, 0x43, 0x4d, 0x11, 0xd1, 0xd5, 0x89, 0x6a, 0x59, 0x68, 0xd0, 0x02, - 0x4c, 0x50, 0x44, 0xab, 0x6d, 0xfa, 0x86, 0x63, 0x62, 0x95, 0x9c, 0xde, 0x3c, 0xba, 0x93, 0x04, - 0x9e, 0x8d, 0x13, 0x8b, 0x0d, 0x6e, 0x40, 0x3c, 0xf2, 0xd0, 0x0a, 0x3c, 0x40, 0x61, 0x4d, 0x6c, - 0x61, 0x57, 0xf3, 0xb1, 0x8a, 0x3f, 0xd7, 0xd6, 0x4c, 0x4f, 0xd5, 0xac, 0x86, 0x7a, 0xa0, 0x79, - 0x07, 0xc5, 0x49, 0x42, 0xb0, 0x94, 0x28, 0x4a, 0xca, 0x19, 0x62, 0xb8, 0xca, 0xed, 0x6a, 0xd4, - 0xac, 0x6a, 0x35, 0xae, 0x69, 0xde, 0x01, 0xaa, 0xc0, 0x29, 0xca, 0xe2, 0xf9, 0xae, 0x61, 0x35, - 0x55, 0xfd, 0x00, 0xeb, 0x37, 0xd4, 0xb6, 0xbf, 0x7f, 0xa9, 0x78, 0x7f, 0xf4, 0xfd, 0xd4, 0xc3, - 0x6d, 0x6a, 0xb3, 0x4c, 0x4c, 0x76, 0xfd, 0xfd, 0x4b, 0x68, 0x1b, 0xf2, 0x64, 0x32, 0x5a, 0xc6, - 0x6d, 0xac, 0xee, 0xdb, 0x2e, 0xdd, 0x1a, 0x0b, 0x7d, 0x4a, 0x53, 0x24, 0x82, 0x33, 0x75, 0x0e, - 0xd8, 0xb0, 0x1b, 0xb8, 0x92, 0xde, 0xde, 0xaa, 0xd5, 0x56, 0x94, 0x9c, 0x60, 0xb9, 0x6a, 0xbb, - 0x24, 0xa1, 0x9a, 0x76, 0x10, 0xe0, 0x1c, 0x4b, 0xa8, 0xa6, 0x2d, 0xc2, 0xbb, 0x00, 0x13, 0xba, - 0xce, 0xc6, 0x6c, 0xe8, 0x2a, 0x3f, 0x63, 0x79, 0x45, 0xb9, 0x23, 0x58, 0xba, 0xbe, 0xca, 0x0c, - 0x78, 0x8e, 0x7b, 0xe8, 0x32, 0xdc, 0x17, 0x06, 0x2b, 0x0a, 0x1c, 0xef, 0x19, 0x65, 0x37, 0x74, - 0x01, 0x26, 0x9c, 0xc3, 0x5e, 0x20, 0xea, 0x78, 0xa3, 0x73, 0xd8, 0x0d, 0xbb, 0x08, 0x93, 0xce, - 0x81, 0xd3, 0x8b, 0x7b, 0x2c, 0x8a, 0x43, 0xce, 0x81, 0xd3, 0x0d, 0x7c, 0x98, 0x1e, 0xb8, 0x5d, - 0xac, 0x6b, 0x3e, 0x6e, 0x14, 0x4f, 0x47, 0xcd, 0x23, 0x0a, 0x34, 0x0b, 0xb2, 0xae, 0xab, 0xd8, - 0xd2, 0xf6, 0x4c, 0xac, 0x6a, 0x2e, 0xb6, 0x34, 0xaf, 0x78, 0x36, 0x6a, 0x5c, 0xd0, 0xf5, 0x1a, - 0xd5, 0x56, 0xa9, 0x12, 0x3d, 0x06, 0xe3, 0xf6, 0xde, 0x75, 0x9d, 0xa5, 0xa4, 0xea, 0xb8, 0x78, - 0xdf, 0x78, 0xb1, 0xf8, 0x10, 0x8d, 0xef, 0x18, 0x51, 0xd0, 0x84, 0xdc, 0xa2, 0x62, 0xf4, 0x28, - 0xc8, 0xba, 0x77, 0xa0, 0xb9, 0x0e, 0xad, 0xc9, 0x9e, 0xa3, 0xe9, 0xb8, 0xf8, 0x30, 0x33, 0x65, - 0xf2, 0x4d, 0x21, 0x26, 0x4b, 0xc2, 0xbb, 0x65, 0xec, 0xfb, 0x82, 0xf1, 0x11, 0xb6, 0x24, 0xa8, - 0x8c, 0xb3, 0x4d, 0x83, 0x4c, 0x42, 0xd1, 0xf1, 0xe2, 0x69, 0x6a, 0x56, 0x70, 0x0e, 0x9c, 0xe8, - 0x7b, 0x1f, 0x84, 0x51, 0x62, 0x19, 0xbe, 0xf4, 0x51, 0xd6, 0x90, 0x39, 0x07, 0x91, 0x37, 0x7e, - 0x68, 0xbd, 0x71, 0xb9, 0x02, 0xf9, 0x68, 0x7e, 0xa2, 0x2c, 0xb0, 0x0c, 0x95, 0x25, 0xd2, 0xac, - 0x2c, 0xd7, 0x57, 0x48, 0x9b, 0xf1, 0x42, 0x4d, 0x4e, 0x90, 0x76, 0x67, 0x7d, 0x6d, 0xa7, 0xa6, - 0x2a, 0xbb, 0x9b, 0x3b, 0x6b, 0x1b, 0x35, 0x39, 0x19, 0xed, 0xab, 0xbf, 0x97, 0x80, 0x42, 0xe7, - 0x11, 0x09, 0xfd, 0x3f, 0x38, 0x2d, 0xee, 0x33, 0x3c, 0xec, 0xab, 0xb7, 0x0c, 0x97, 0x2e, 0x99, - 0x96, 0xc6, 0xb6, 0xaf, 0x60, 0xd2, 0x26, 0xb9, 0xd5, 0x36, 0xf6, 0x9f, 0x35, 0x5c, 0xb2, 0x20, - 0x5a, 0x9a, 0x8f, 0xd6, 0xe1, 0xac, 0x65, 0xab, 0x9e, 0xaf, 0x59, 0x0d, 0xcd, 0x6d, 0xa8, 0xe1, - 0x4d, 0x92, 0xaa, 0xe9, 0x3a, 0xf6, 0x3c, 0x9b, 0x6d, 0x55, 0x01, 0xcb, 0xc7, 0x2c, 0x7b, 0x9b, - 0x1b, 0x87, 0x35, 0xbc, 0xca, 0x4d, 0xbb, 0x12, 0x2c, 0x79, 0x5c, 0x82, 0xdd, 0x0f, 0xd9, 0x96, - 0xe6, 0xa8, 0xd8, 0xf2, 0xdd, 0x43, 0xda, 0x18, 0x67, 0x94, 0x4c, 0x4b, 0x73, 0x6a, 0xe4, 0xf9, - 0xa3, 0x39, 0x9f, 0xfc, 0x73, 0x12, 0xf2, 0xd1, 0xe6, 0x98, 0x9c, 0x35, 0x74, 0xba, 0x8f, 0x48, - 0xb4, 0xd2, 0x3c, 0x78, 0xcf, 0x56, 0x7a, 0x66, 0x99, 0x6c, 0x30, 0x95, 0x61, 0xd6, 0xb2, 0x2a, - 0x0c, 0x49, 0x36, 0x77, 0x52, 0x5b, 0x30, 0x6b, 0x11, 0x32, 0x0a, 0x7f, 0x42, 0xab, 0x30, 0x7c, - 0xdd, 0xa3, 0xdc, 0xc3, 0x94, 0xfb, 0xa1, 0x7b, 0x73, 0x3f, 0xb3, 0x4d, 0xc9, 0xb3, 0xcf, 0x6c, - 0xab, 0x9b, 0x75, 0x65, 0xa3, 0xba, 0xae, 0x70, 0x38, 0x3a, 0x03, 0x29, 0x53, 0xbb, 0x7d, 0xd8, - 0xb9, 0x15, 0x51, 0xd1, 0xa0, 0x81, 0x3f, 0x03, 0xa9, 0x5b, 0x58, 0xbb, 0xd1, 0xb9, 0x01, 0x50, - 0xd1, 0x87, 0x98, 0xfa, 0xb3, 0x90, 0xa6, 0xf1, 0x42, 0x00, 0x3c, 0x62, 0xf2, 0x10, 0xca, 0x40, - 0x6a, 0xb9, 0xae, 0x90, 0xf4, 0x97, 0x21, 0xcf, 0xa4, 0xea, 0xd6, 0x5a, 0x6d, 0xb9, 0x26, 0x27, - 0xca, 0x0b, 0x30, 0xcc, 0x82, 0x40, 0x96, 0x46, 0x10, 0x06, 0x79, 0x88, 0x3f, 0x72, 0x0e, 0x49, - 0x68, 0x77, 0x37, 0x96, 0x6a, 0x8a, 0x9c, 0x88, 0x4e, 0xaf, 0x07, 0xf9, 0x68, 0x5f, 0xfc, 0xd1, - 0xe4, 0xd4, 0xdf, 0x48, 0x90, 0x8b, 0xf4, 0xb9, 0xa4, 0x41, 0xd1, 0x4c, 0xd3, 0xbe, 0xa5, 0x6a, - 0xa6, 0xa1, 0x79, 0x3c, 0x29, 0x80, 0x8a, 0xaa, 0x44, 0x32, 0xe8, 0xa4, 0x7d, 0x24, 0xce, 0xbf, - 0x2a, 0x81, 0xdc, 0xdd, 0x62, 0x76, 0x39, 0x28, 0xfd, 0x54, 0x1d, 0x7c, 0x45, 0x82, 0x42, 0x67, - 0x5f, 0xd9, 0xe5, 0xde, 0xf9, 0x9f, 0xaa, 0x7b, 0x6f, 0x25, 0x60, 0xb4, 0xa3, 0x9b, 0x1c, 0xd4, - 0xbb, 0xcf, 0xc1, 0xb8, 0xd1, 0xc0, 0x2d, 0xc7, 0xf6, 0xb1, 0xa5, 0x1f, 0xaa, 0x26, 0xbe, 0x89, - 0xcd, 0x62, 0x99, 0x16, 0x8a, 0xd9, 0x7b, 0xf7, 0xab, 0x33, 0x6b, 0x21, 0x6e, 0x9d, 0xc0, 0x2a, - 0x13, 0x6b, 0x2b, 0xb5, 0x8d, 0xad, 0xfa, 0x4e, 0x6d, 0x73, 0xf9, 0x79, 0x75, 0x77, 0xf3, 0x67, - 0x36, 0xeb, 0xcf, 0x6e, 0x2a, 0xb2, 0xd1, 0x65, 0xf6, 0x21, 0x2e, 0xf5, 0x2d, 0x90, 0xbb, 0x9d, - 0x42, 0xa7, 0xa1, 0x9f, 0x5b, 0xf2, 0x10, 0x9a, 0x80, 0xb1, 0xcd, 0xba, 0xba, 0xbd, 0xb6, 0x52, - 0x53, 0x6b, 0x57, 0xaf, 0xd6, 0x96, 0x77, 0xb6, 0xd9, 0x0d, 0x44, 0x60, 0xbd, 0xd3, 0xb9, 0xa8, - 0x5f, 0x4e, 0xc2, 0x44, 0x1f, 0x4f, 0x50, 0x95, 0x9f, 0x1d, 0xd8, 0x71, 0xe6, 0x89, 0x41, 0xbc, - 0x9f, 0x21, 0x5b, 0xfe, 0x96, 0xe6, 0xfa, 0xfc, 0xa8, 0xf1, 0x28, 0x90, 0x28, 0x59, 0xbe, 0xb1, - 0x6f, 0x60, 0x97, 0x5f, 0xd8, 0xb0, 0x03, 0xc5, 0x58, 0x28, 0x67, 0x77, 0x36, 0x9f, 0x00, 0xe4, - 0xd8, 0x9e, 0xe1, 0x1b, 0x37, 0xb1, 0x6a, 0x58, 0xe2, 0x76, 0x87, 0x1c, 0x30, 0x52, 0x8a, 0x2c, - 0x34, 0x6b, 0x96, 0x1f, 0x58, 0x5b, 0xb8, 0xa9, 0x75, 0x59, 0x93, 0x02, 0x9e, 0x54, 0x64, 0xa1, - 0x09, 0xac, 0xcf, 0x43, 0xbe, 0x61, 0xb7, 0x49, 0xd7, 0xc5, 0xec, 0xc8, 0x7e, 0x21, 0x29, 0x39, - 0x26, 0x0b, 0x4c, 0x78, 0x3f, 0x1d, 0x5e, 0x2b, 0xe5, 0x95, 0x1c, 0x93, 0x31, 0x93, 0x47, 0x60, - 0x4c, 0x6b, 0x36, 0x5d, 0x42, 0x2e, 0x88, 0xd8, 0x09, 0xa1, 0x10, 0x88, 0xa9, 0xe1, 0xd4, 0x33, - 0x90, 0x11, 0x71, 0x20, 0x5b, 0x32, 0x89, 0x84, 0xea, 0xb0, 0x63, 0x6f, 0x62, 0x3a, 0xab, 0x64, - 0x2c, 0xa1, 0x3c, 0x0f, 0x79, 0xc3, 0x53, 0xc3, 0x5b, 0xf2, 0xc4, 0xb9, 0xc4, 0x74, 0x46, 0xc9, - 0x19, 0x5e, 0x70, 0xc3, 0x58, 0x7e, 0x2d, 0x01, 0x85, 0xce, 0x5b, 0x7e, 0xb4, 0x02, 0x19, 0xd3, - 0xd6, 0x35, 0x9a, 0x5a, 0xec, 0x13, 0xd3, 0x74, 0xcc, 0x87, 0x81, 0x99, 0x75, 0x6e, 0xaf, 0x04, - 0xc8, 0xa9, 0x7f, 0x90, 0x20, 0x23, 0xc4, 0xe8, 0x14, 0xa4, 0x1c, 0xcd, 0x3f, 0xa0, 0x74, 0xe9, - 0xa5, 0x84, 0x2c, 0x29, 0xf4, 0x99, 0xc8, 0x3d, 0x47, 0xb3, 0x68, 0x0a, 0x70, 0x39, 0x79, 0x26, - 0xf3, 0x6a, 0x62, 0xad, 0x41, 0x8f, 0x1f, 0x76, 0xab, 0x85, 0x2d, 0xdf, 0x13, 0xf3, 0xca, 0xe5, - 0xcb, 0x5c, 0x8c, 0x1e, 0x87, 0x71, 0xdf, 0xd5, 0x0c, 0xb3, 0xc3, 0x36, 0x45, 0x6d, 0x65, 0xa1, - 0x08, 0x8c, 0x2b, 0x70, 0x46, 0xf0, 0x36, 0xb0, 0xaf, 0xe9, 0x07, 0xb8, 0x11, 0x82, 0x86, 0xe9, - 0x35, 0xc3, 0x69, 0x6e, 0xb0, 0xc2, 0xf5, 0x02, 0x5b, 0xfe, 0xbe, 0x04, 0xe3, 0xe2, 0xc0, 0xd4, - 0x08, 0x82, 0xb5, 0x01, 0xa0, 0x59, 0x96, 0xed, 0x47, 0xc3, 0xd5, 0x9b, 0xca, 0x3d, 0xb8, 0x99, - 0x6a, 0x00, 0x52, 0x22, 0x04, 0x53, 0x2d, 0x80, 0x50, 0x73, 0x6c, 0xd8, 0xce, 0x42, 0x8e, 0x7f, - 0xc2, 0xa1, 0xdf, 0x01, 0xd9, 0x11, 0x1b, 0x98, 0x88, 0x9c, 0xac, 0xd0, 0x24, 0xa4, 0xf7, 0x70, - 0xd3, 0xb0, 0xf8, 0xc5, 0x2c, 0x7b, 0x10, 0x17, 0x21, 0xa9, 0xe0, 0x22, 0x64, 0xe9, 0xb3, 0x30, - 0xa1, 0xdb, 0xad, 0x6e, 0x77, 0x97, 0xe4, 0xae, 0x63, 0xbe, 0x77, 0x4d, 0x7a, 0x01, 0xc2, 0x16, - 0xf3, 0x7d, 0x49, 0xfa, 0x83, 0x44, 0x72, 0x75, 0x6b, 0xe9, 0xeb, 0x89, 0xa9, 0x55, 0x06, 0xdd, - 0x12, 0x23, 0x55, 0xf0, 0xbe, 0x89, 0x75, 0xe2, 0x3d, 0x7c, 0x75, 0x1a, 0x9e, 0x68, 0x1a, 0xfe, - 0x41, 0x7b, 0x6f, 0x46, 0xb7, 0x5b, 0xb3, 0x4d, 0xbb, 0x69, 0x87, 0x9f, 0x3e, 0xc9, 0x13, 0x7d, - 0xa0, 0xff, 0xf1, 0xcf, 0x9f, 0xd9, 0x40, 0x3a, 0x15, 0xfb, 0xad, 0xb4, 0xb2, 0x09, 0x13, 0xdc, - 0x58, 0xa5, 0xdf, 0x5f, 0xd8, 0x29, 0x02, 0xdd, 0xf3, 0x0e, 0xab, 0xf8, 0xcd, 0xb7, 0xe9, 0x76, - 0xad, 0x8c, 0x73, 0x28, 0xd1, 0xb1, 0x83, 0x46, 0x45, 0x81, 0xfb, 0x3a, 0xf8, 0xd8, 0xd2, 0xc4, - 0x6e, 0x0c, 0xe3, 0xf7, 0x38, 0xe3, 0x44, 0x84, 0x71, 0x9b, 0x43, 0x2b, 0xcb, 0x30, 0x7a, 0x12, - 0xae, 0xbf, 0xe3, 0x5c, 0x79, 0x1c, 0x25, 0x59, 0x85, 0x31, 0x4a, 0xa2, 0xb7, 0x3d, 0xdf, 0x6e, - 0xd1, 0xba, 0x77, 0x6f, 0x9a, 0xbf, 0x7f, 0x9b, 0xad, 0x95, 0x02, 0x81, 0x2d, 0x07, 0xa8, 0x4a, - 0x05, 0xe8, 0x27, 0xa7, 0x06, 0xd6, 0xcd, 0x18, 0x86, 0xd7, 0xb9, 0x23, 0x81, 0x7d, 0xe5, 0x33, - 0x30, 0x49, 0xfe, 0xa7, 0x65, 0x29, 0xea, 0x49, 0xfc, 0x85, 0x57, 0xf1, 0xfb, 0x2f, 0xb1, 0xe5, - 0x38, 0x11, 0x10, 0x44, 0x7c, 0x8a, 0xcc, 0x62, 0x13, 0xfb, 0x3e, 0x76, 0x3d, 0x55, 0x33, 0xfb, - 0xb9, 0x17, 0xb9, 0x31, 0x28, 0x7e, 0xe9, 0x9d, 0xce, 0x59, 0x5c, 0x65, 0xc8, 0xaa, 0x69, 0x56, - 0x76, 0xe1, 0x74, 0x9f, 0xac, 0x18, 0x80, 0xf3, 0x65, 0xce, 0x39, 0xd9, 0x93, 0x19, 0x84, 0x76, - 0x0b, 0x84, 0x3c, 0x98, 0xcb, 0x01, 0x38, 0x7f, 0x97, 0x73, 0x22, 0x8e, 0x15, 0x53, 0x4a, 0x18, - 0x9f, 0x81, 0xf1, 0x9b, 0xd8, 0xdd, 0xb3, 0x3d, 0x7e, 0x4b, 0x33, 0x00, 0xdd, 0x2b, 0x9c, 0x6e, - 0x8c, 0x03, 0xe9, 0xb5, 0x0d, 0xe1, 0xba, 0x0c, 0x99, 0x7d, 0x4d, 0xc7, 0x03, 0x50, 0x7c, 0x99, - 0x53, 0x8c, 0x10, 0x7b, 0x02, 0xad, 0x42, 0xbe, 0x69, 0xf3, 0x9d, 0x29, 0x1e, 0xfe, 0x2a, 0x87, - 0xe7, 0x04, 0x86, 0x53, 0x38, 0xb6, 0xd3, 0x36, 0xc9, 0xb6, 0x15, 0x4f, 0xf1, 0x7b, 0x82, 0x42, - 0x60, 0x38, 0xc5, 0x09, 0xc2, 0xfa, 0xfb, 0x82, 0xc2, 0x8b, 0xc4, 0xf3, 0x69, 0xc8, 0xd9, 0x96, - 0x79, 0x68, 0x5b, 0x83, 0x38, 0xf1, 0x15, 0xce, 0x00, 0x1c, 0x42, 0x08, 0xae, 0x40, 0x76, 0xd0, - 0x89, 0xf8, 0xea, 0x3b, 0x62, 0x79, 0x88, 0x19, 0x58, 0x85, 0x31, 0x51, 0xa0, 0x0c, 0xdb, 0x1a, - 0x80, 0xe2, 0x0f, 0x39, 0x45, 0x21, 0x02, 0xe3, 0xc3, 0xf0, 0xb1, 0xe7, 0x37, 0xf1, 0x20, 0x24, - 0xaf, 0x89, 0x61, 0x70, 0x08, 0x0f, 0xe5, 0x1e, 0xb6, 0xf4, 0x83, 0xc1, 0x18, 0xbe, 0x26, 0x42, - 0x29, 0x30, 0x84, 0x62, 0x19, 0x46, 0x5b, 0x9a, 0xeb, 0x1d, 0x68, 0xe6, 0x40, 0xd3, 0xf1, 0x47, - 0x9c, 0x23, 0x1f, 0x80, 0x78, 0x44, 0xda, 0xd6, 0x49, 0x68, 0xbe, 0x2e, 0x22, 0x12, 0x81, 0xf1, - 0xa5, 0xe7, 0xf9, 0xf4, 0x4a, 0xeb, 0x24, 0x6c, 0x7f, 0x2c, 0x96, 0x1e, 0xc3, 0x6e, 0x44, 0x19, - 0xaf, 0x40, 0xd6, 0x33, 0x6e, 0x0f, 0x44, 0xf3, 0x27, 0x62, 0xa6, 0x29, 0x80, 0x80, 0x9f, 0x87, - 0x33, 0x7d, 0xb7, 0x89, 0x01, 0xc8, 0xfe, 0x94, 0x93, 0x9d, 0xea, 0xb3, 0x55, 0xf0, 0x92, 0x70, - 0x52, 0xca, 0x3f, 0x13, 0x25, 0x01, 0x77, 0x71, 0x6d, 0x91, 0xb3, 0x82, 0xa7, 0xed, 0x9f, 0x2c, - 0x6a, 0x7f, 0x2e, 0xa2, 0xc6, 0xb0, 0x1d, 0x51, 0xdb, 0x81, 0x53, 0x9c, 0xf1, 0x64, 0xf3, 0xfa, - 0x0d, 0x51, 0x58, 0x19, 0x7a, 0xb7, 0x73, 0x76, 0x3f, 0x0b, 0x53, 0x41, 0x38, 0x45, 0x53, 0xea, - 0xa9, 0x2d, 0xcd, 0x19, 0x80, 0xf9, 0x9b, 0x9c, 0x59, 0x54, 0xfc, 0xa0, 0xab, 0xf5, 0x36, 0x34, - 0x87, 0x90, 0x3f, 0x07, 0x45, 0x41, 0xde, 0xb6, 0x5c, 0xac, 0xdb, 0x4d, 0xcb, 0xb8, 0x8d, 0x1b, - 0x03, 0x50, 0xff, 0x45, 0xd7, 0x54, 0xed, 0x46, 0xe0, 0x84, 0x79, 0x0d, 0xe4, 0xa0, 0x57, 0x51, - 0x8d, 0x96, 0x63, 0xbb, 0x7e, 0x0c, 0xe3, 0xb7, 0xc4, 0x4c, 0x05, 0xb8, 0x35, 0x0a, 0xab, 0xd4, - 0xa0, 0x40, 0x1f, 0x07, 0x4d, 0xc9, 0xbf, 0xe4, 0x44, 0xa3, 0x21, 0x8a, 0x17, 0x0e, 0xdd, 0x6e, - 0x39, 0x9a, 0x3b, 0x48, 0xfd, 0xfb, 0x2b, 0x51, 0x38, 0x38, 0x84, 0x17, 0x0e, 0xff, 0xd0, 0xc1, - 0x64, 0xb7, 0x1f, 0x80, 0xe1, 0xdb, 0xa2, 0x70, 0x08, 0x0c, 0xa7, 0x10, 0x0d, 0xc3, 0x00, 0x14, - 0x7f, 0x2d, 0x28, 0x04, 0x86, 0x50, 0x7c, 0x3a, 0xdc, 0x68, 0x5d, 0xdc, 0x34, 0x3c, 0xdf, 0x65, - 0xad, 0xf0, 0xbd, 0xa9, 0xbe, 0xf3, 0x4e, 0x67, 0x13, 0xa6, 0x44, 0xa0, 0xa4, 0x12, 0xf1, 0x2b, - 0x54, 0x7a, 0x52, 0x8a, 0x77, 0xec, 0xbb, 0xa2, 0x12, 0x45, 0x60, 0x6c, 0x7d, 0x8e, 0x75, 0xf5, - 0x2a, 0x28, 0xee, 0x87, 0x30, 0xc5, 0x9f, 0x7f, 0x8f, 0x73, 0x75, 0xb6, 0x2a, 0x95, 0x75, 0x92, - 0x40, 0x9d, 0x0d, 0x45, 0x3c, 0xd9, 0x4b, 0xef, 0x05, 0x39, 0xd4, 0xd1, 0x4f, 0x54, 0xae, 0xc2, - 0x68, 0x47, 0x33, 0x11, 0x4f, 0xf5, 0x0b, 0x9c, 0x2a, 0x1f, 0xed, 0x25, 0x2a, 0x0b, 0x90, 0x22, - 0x8d, 0x41, 0x3c, 0xfc, 0x17, 0x39, 0x9c, 0x9a, 0x57, 0x3e, 0x09, 0x19, 0xd1, 0x10, 0xc4, 0x43, - 0x7f, 0x89, 0x43, 0x03, 0x08, 0x81, 0x8b, 0x66, 0x20, 0x1e, 0xfe, 0xcb, 0x02, 0x2e, 0x20, 0x04, - 0x3e, 0x78, 0x08, 0xff, 0xf6, 0x57, 0x52, 0xbc, 0xa0, 0x8b, 0xd8, 0x5d, 0x81, 0x11, 0xde, 0x05, - 0xc4, 0xa3, 0x3f, 0xcf, 0x5f, 0x2e, 0x10, 0x95, 0x8b, 0x90, 0x1e, 0x30, 0xe0, 0xbf, 0xca, 0xa1, - 0xcc, 0xbe, 0xb2, 0x0c, 0xb9, 0xc8, 0xce, 0x1f, 0x0f, 0xff, 0x35, 0x0e, 0x8f, 0xa2, 0x88, 0xeb, - 0x7c, 0xe7, 0x8f, 0x27, 0xf8, 0x75, 0xe1, 0x3a, 0x47, 0x90, 0xb0, 0x89, 0x4d, 0x3f, 0x1e, 0xfd, - 0x1b, 0x22, 0xea, 0x02, 0x52, 0x79, 0x1a, 0xb2, 0x41, 0x21, 0x8f, 0xc7, 0xff, 0x26, 0xc7, 0x87, - 0x18, 0x12, 0x81, 0xc8, 0x46, 0x12, 0x4f, 0xf1, 0x05, 0x11, 0x81, 0x08, 0x8a, 0x2c, 0xa3, 0xee, - 0xe6, 0x20, 0x9e, 0xe9, 0xb7, 0xc4, 0x32, 0xea, 0xea, 0x0d, 0xc8, 0x6c, 0xd2, 0x7a, 0x1a, 0x4f, - 0xf1, 0xdb, 0x62, 0x36, 0xa9, 0x3d, 0x71, 0xa3, 0x7b, 0xb7, 0x8d, 0xe7, 0xf8, 0x1d, 0xe1, 0x46, - 0xd7, 0x66, 0x5b, 0xd9, 0x02, 0xd4, 0xbb, 0xd3, 0xc6, 0xf3, 0x7d, 0x91, 0xf3, 0x8d, 0xf7, 0x6c, - 0xb4, 0x95, 0x67, 0xe1, 0x54, 0xff, 0x5d, 0x36, 0x9e, 0xf5, 0x4b, 0xef, 0x75, 0x9d, 0x8b, 0xa2, - 0x9b, 0x6c, 0x65, 0x27, 0x2c, 0xd7, 0xd1, 0x1d, 0x36, 0x9e, 0xf6, 0xe5, 0xf7, 0x3a, 0x2b, 0x76, - 0x74, 0x83, 0xad, 0x54, 0x01, 0xc2, 0xcd, 0x2d, 0x9e, 0xeb, 0x15, 0xce, 0x15, 0x01, 0x91, 0xa5, - 0xc1, 0xf7, 0xb6, 0x78, 0xfc, 0x97, 0xc5, 0xd2, 0xe0, 0x08, 0xb2, 0x34, 0xc4, 0xb6, 0x16, 0x8f, - 0x7e, 0x55, 0x2c, 0x0d, 0x01, 0x21, 0x99, 0x1d, 0xd9, 0x39, 0xe2, 0x19, 0xbe, 0x22, 0x32, 0x3b, - 0x82, 0xaa, 0x5c, 0x81, 0x8c, 0xd5, 0x36, 0x4d, 0x92, 0xa0, 0xe8, 0xde, 0x3f, 0x10, 0x2b, 0xfe, - 0xeb, 0x07, 0xdc, 0x03, 0x01, 0xa8, 0x2c, 0x40, 0x1a, 0xb7, 0xf6, 0x70, 0x23, 0x0e, 0xf9, 0x6f, - 0x1f, 0x88, 0xa2, 0x44, 0xac, 0x2b, 0x4f, 0x03, 0xb0, 0xa3, 0x3d, 0xfd, 0x6c, 0x15, 0x83, 0xfd, - 0xf7, 0x0f, 0xf8, 0x4f, 0x37, 0x42, 0x48, 0x48, 0xc0, 0x7e, 0x08, 0x72, 0x6f, 0x82, 0x77, 0x3a, - 0x09, 0xe8, 0xa8, 0x2f, 0xc3, 0xc8, 0x75, 0xcf, 0xb6, 0x7c, 0xad, 0x19, 0x87, 0xfe, 0x0f, 0x8e, - 0x16, 0xf6, 0x24, 0x60, 0x2d, 0xdb, 0xc5, 0xbe, 0xd6, 0xf4, 0xe2, 0xb0, 0xff, 0xc9, 0xb1, 0x01, - 0x80, 0x80, 0x75, 0xcd, 0xf3, 0x07, 0x19, 0xf7, 0x8f, 0x04, 0x58, 0x00, 0x88, 0xd3, 0xe4, 0xff, - 0x1b, 0xf8, 0x30, 0x0e, 0xfb, 0xae, 0x70, 0x9a, 0xdb, 0x57, 0x3e, 0x09, 0x59, 0xf2, 0x2f, 0xfb, - 0x3d, 0x56, 0x0c, 0xf8, 0xbf, 0x38, 0x38, 0x44, 0x90, 0x37, 0x7b, 0x7e, 0xc3, 0x37, 0xe2, 0x83, - 0xfd, 0xdf, 0x7c, 0xa6, 0x85, 0x7d, 0xa5, 0x0a, 0x39, 0xcf, 0x6f, 0x34, 0xda, 0xbc, 0xbf, 0x8a, - 0x81, 0xff, 0xcf, 0x07, 0xc1, 0x91, 0x3b, 0xc0, 0x2c, 0xd5, 0xfa, 0xdf, 0x1e, 0xc2, 0xaa, 0xbd, - 0x6a, 0xb3, 0x7b, 0xc3, 0x17, 0xca, 0xf1, 0x17, 0x80, 0xf0, 0xe3, 0x0c, 0x4c, 0xe9, 0x76, 0x6b, - 0xcf, 0xf6, 0x66, 0x83, 0x8a, 0x35, 0x6b, 0x5b, 0x9c, 0x11, 0x25, 0x6d, 0x0b, 0x4f, 0x9d, 0xec, - 0x22, 0xb1, 0x7c, 0x06, 0xd2, 0xdb, 0xed, 0xbd, 0xbd, 0x43, 0x24, 0x43, 0xd2, 0x6b, 0xef, 0xf1, - 0x1f, 0xe5, 0x90, 0x7f, 0xcb, 0x6f, 0x26, 0x61, 0xb4, 0x6a, 0x9a, 0x3b, 0x87, 0x0e, 0xf6, 0xea, - 0x16, 0xae, 0xef, 0xa3, 0x22, 0x0c, 0xd3, 0xb1, 0x3e, 0x45, 0xcd, 0xa4, 0x6b, 0x43, 0x0a, 0x7f, - 0x0e, 0x34, 0x73, 0xf4, 0x8a, 0x35, 0x11, 0x68, 0xe6, 0x02, 0xcd, 0x05, 0x76, 0xc3, 0x1a, 0x68, - 0x2e, 0x04, 0x9a, 0x79, 0x7a, 0xcf, 0x9a, 0x0c, 0x34, 0xf3, 0x81, 0x66, 0x81, 0x7e, 0x47, 0x18, - 0x0d, 0x34, 0x0b, 0x81, 0x66, 0x91, 0x7e, 0x39, 0x48, 0x05, 0x9a, 0xc5, 0x40, 0x73, 0x91, 0x7e, - 0x30, 0x18, 0x0f, 0x34, 0x17, 0x03, 0xcd, 0x25, 0xfa, 0x91, 0x00, 0x05, 0x9a, 0x4b, 0x81, 0xe6, - 0x32, 0xfd, 0xf5, 0xcd, 0x48, 0xa0, 0xb9, 0x8c, 0xa6, 0x60, 0x84, 0x8d, 0xec, 0x49, 0xfa, 0x25, - 0x79, 0xec, 0xda, 0x90, 0x22, 0x04, 0xa1, 0xee, 0x29, 0xfa, 0x0b, 0x9b, 0xe1, 0x50, 0xf7, 0x54, - 0xa8, 0x9b, 0xa3, 0x3f, 0xf4, 0x97, 0x43, 0xdd, 0x5c, 0xa8, 0xbb, 0x50, 0x1c, 0x25, 0x29, 0x12, - 0xea, 0x2e, 0x84, 0xba, 0xf9, 0x62, 0x81, 0xcc, 0x40, 0xa8, 0x9b, 0x0f, 0x75, 0x0b, 0xc5, 0xb1, - 0x73, 0xd2, 0x74, 0x3e, 0xd4, 0x2d, 0xa0, 0x27, 0x20, 0xe7, 0xb5, 0xf7, 0x54, 0x5e, 0x0e, 0xe9, - 0x2f, 0x79, 0x72, 0x73, 0x30, 0x43, 0x72, 0x82, 0x4e, 0xeb, 0xb5, 0x21, 0x05, 0xbc, 0xf6, 0x1e, - 0x2f, 0xa3, 0x4b, 0x79, 0xa0, 0x17, 0x20, 0x2a, 0xfd, 0x01, 0x6e, 0xf9, 0x0d, 0x09, 0xb2, 0x3b, - 0xb7, 0x6c, 0xfa, 0x1d, 0xd9, 0xfb, 0x3f, 0x9e, 0x5c, 0xe1, 0xf4, 0x85, 0x79, 0xfa, 0xa9, 0x2f, - 0x7b, 0x4d, 0x52, 0x84, 0x20, 0xd4, 0x2d, 0x14, 0x1f, 0xa4, 0x03, 0x0a, 0x74, 0x0b, 0x68, 0x16, - 0xf2, 0x91, 0x01, 0xcd, 0xd1, 0xdf, 0xd8, 0x74, 0x8e, 0x48, 0x52, 0x72, 0xe1, 0x88, 0xe6, 0x96, - 0xd2, 0x40, 0xd2, 0x9e, 0xfc, 0xf1, 0x6f, 0xd9, 0xe5, 0x2f, 0x24, 0x20, 0xc7, 0xee, 0x4c, 0xe9, - 0xa8, 0xc8, 0xab, 0x58, 0xeb, 0x7f, 0xc8, 0xdd, 0x18, 0x52, 0x84, 0x00, 0x29, 0x00, 0xcc, 0x94, - 0x64, 0x38, 0xf3, 0x64, 0xe9, 0xc9, 0x7f, 0x7a, 0xf3, 0xec, 0x27, 0x8e, 0x5d, 0x41, 0x24, 0x76, - 0xb3, 0xac, 0x06, 0xcf, 0xec, 0x1a, 0x96, 0xff, 0xd4, 0xdc, 0x25, 0x12, 0xe0, 0x90, 0x05, 0xed, - 0x42, 0x66, 0x59, 0xf3, 0xe8, 0xaf, 0xf3, 0xa8, 0xeb, 0xa9, 0xa5, 0x8b, 0x3f, 0x7e, 0xf3, 0xec, - 0x85, 0x18, 0x46, 0x5e, 0x1e, 0x67, 0x36, 0x0e, 0x09, 0xeb, 0xe2, 0x3c, 0x81, 0x5f, 0x1b, 0x52, - 0x02, 0x2a, 0x34, 0x27, 0x5c, 0xdd, 0xd4, 0x5a, 0xec, 0xc7, 0x44, 0xc9, 0x25, 0xf9, 0xe8, 0xcd, - 0xb3, 0xf9, 0x8d, 0xc3, 0x50, 0x1e, 0xba, 0x42, 0x9e, 0x96, 0x32, 0x30, 0xcc, 0x5c, 0x5d, 0x5a, - 0x79, 0xfd, 0x6e, 0x69, 0xe8, 0x8d, 0xbb, 0xa5, 0xa1, 0x7f, 0xbc, 0x5b, 0x1a, 0x7a, 0xeb, 0x6e, - 0x49, 0x7a, 0xf7, 0x6e, 0x49, 0x7a, 0xff, 0x6e, 0x49, 0xba, 0x73, 0x54, 0x92, 0xbe, 0x76, 0x54, - 0x92, 0xbe, 0x71, 0x54, 0x92, 0xbe, 0x73, 0x54, 0x92, 0x5e, 0x3f, 0x2a, 0x49, 0x6f, 0x1c, 0x95, - 0x86, 0xde, 0x3a, 0x2a, 0x49, 0x3f, 0x3c, 0x2a, 0x0d, 0xbd, 0x7b, 0x54, 0x92, 0xde, 0x3f, 0x2a, - 0x0d, 0xdd, 0xf9, 0x41, 0x69, 0xe8, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x05, 0xb9, 0x2a, - 0x97, 0x35, 0x00, 0x00, + // 4264 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7b, 0x5d, 0x70, 0xdc, 0xd6, + 0x75, 0x3f, 0xb1, 0x1f, 0xe4, 0xee, 0xd9, 0xe5, 0x12, 0xbc, 0xa4, 0xa5, 0x15, 0x1d, 0x53, 0xd2, + 0xda, 0x8e, 0x69, 0x3b, 0x26, 0x6d, 0x8a, 0xd4, 0xc7, 0xea, 0x9f, 0xf8, 0xbf, 0x24, 0x57, 0x14, + 0x5d, 0x92, 0xcb, 0x60, 0xc9, 0xf8, 0x23, 0xd3, 0xc1, 0x80, 0xd8, 0xcb, 0x25, 0x24, 0x2c, 0x80, + 0x00, 0x58, 0xc9, 0xd4, 0xf4, 0x41, 0x1d, 0xf7, 0x63, 0x32, 0x9d, 0x7e, 0xa5, 0x9d, 0x69, 0xe2, + 0x3a, 0x6e, 0x93, 0x4e, 0xe3, 0x34, 0xfd, 0x4a, 0x9a, 0x36, 0x4d, 0xd2, 0x97, 0xbe, 0xa4, 0xf5, + 0x53, 0xc7, 0x79, 0xeb, 0x74, 0x3a, 0x1e, 0x8b, 0xf1, 0x4c, 0xd3, 0xd6, 0x6d, 0xdc, 0x56, 0x0f, + 0x9e, 0xf8, 0xa5, 0x73, 0xbf, 0x00, 0xec, 0x07, 0x85, 0x65, 0xa6, 0x76, 0x9e, 0x44, 0x9c, 0x73, + 0x7e, 0x3f, 0x9c, 0x7b, 0xee, 0xb9, 0xe7, 0x9e, 0x7b, 0xb1, 0x82, 0x1f, 0x5d, 0x82, 0x33, 0x4d, + 0xdb, 0x6e, 0x9a, 0x78, 0xce, 0x71, 0x6d, 0xdf, 0xde, 0x6d, 0xef, 0xcd, 0x35, 0xb0, 0xa7, 0xbb, + 0x86, 0xe3, 0xdb, 0xee, 0x2c, 0x95, 0xa1, 0x31, 0x66, 0x31, 0x2b, 0x2c, 0x4a, 0x1b, 0x30, 0x7e, + 0xc5, 0x30, 0xf1, 0x4a, 0x60, 0x58, 0xc7, 0x3e, 0xba, 0x08, 0xa9, 0x3d, 0xc3, 0xc4, 0x45, 0xe9, + 0x4c, 0x72, 0x26, 0x37, 0xff, 0xd0, 0x6c, 0x17, 0x68, 0xb6, 0x13, 0xb1, 0x45, 0xc4, 0x0a, 0x45, + 0x94, 0xde, 0x4e, 0xc1, 0x44, 0x1f, 0x2d, 0x42, 0x90, 0xb2, 0xb4, 0x16, 0x61, 0x94, 0x66, 0xb2, + 0x0a, 0xfd, 0x1b, 0x15, 0x61, 0xc4, 0xd1, 0xf4, 0xeb, 0x5a, 0x13, 0x17, 0x13, 0x54, 0x2c, 0x1e, + 0xd1, 0x34, 0x40, 0x03, 0x3b, 0xd8, 0x6a, 0x60, 0x4b, 0x3f, 0x28, 0x26, 0xcf, 0x24, 0x67, 0xb2, + 0x4a, 0x44, 0x82, 0x1e, 0x87, 0x71, 0xa7, 0xbd, 0x6b, 0x1a, 0xba, 0x1a, 0x31, 0x83, 0x33, 0xc9, + 0x99, 0xb4, 0x22, 0x33, 0xc5, 0x4a, 0x68, 0xfc, 0x08, 0x8c, 0xdd, 0xc4, 0xda, 0xf5, 0xa8, 0x69, + 0x8e, 0x9a, 0x16, 0x88, 0x38, 0x62, 0xb8, 0x0c, 0xf9, 0x16, 0xf6, 0x3c, 0xad, 0x89, 0x55, 0xff, + 0xc0, 0xc1, 0xc5, 0x14, 0x1d, 0xfd, 0x99, 0x9e, 0xd1, 0x77, 0x8f, 0x3c, 0xc7, 0x51, 0xdb, 0x07, + 0x0e, 0x46, 0x15, 0xc8, 0x62, 0xab, 0xdd, 0x62, 0x0c, 0xe9, 0x23, 0xe2, 0x57, 0xb5, 0xda, 0xad, + 0x6e, 0x96, 0x0c, 0x81, 0x71, 0x8a, 0x11, 0x0f, 0xbb, 0x37, 0x0c, 0x1d, 0x17, 0x87, 0x29, 0xc1, + 0x23, 0x3d, 0x04, 0x75, 0xa6, 0xef, 0xe6, 0x10, 0x38, 0xb4, 0x0c, 0x59, 0xfc, 0xa2, 0x8f, 0x2d, + 0xcf, 0xb0, 0xad, 0xe2, 0x08, 0x25, 0x79, 0xb8, 0xcf, 0x2c, 0x62, 0xb3, 0xd1, 0x4d, 0x11, 0xe2, + 0xd0, 0x79, 0x18, 0xb1, 0x1d, 0xdf, 0xb0, 0x2d, 0xaf, 0x98, 0x39, 0x23, 0xcd, 0xe4, 0xe6, 0x3f, + 0xd2, 0x37, 0x11, 0x6a, 0xcc, 0x46, 0x11, 0xc6, 0x68, 0x0d, 0x64, 0xcf, 0x6e, 0xbb, 0x3a, 0x56, + 0x75, 0xbb, 0x81, 0x55, 0xc3, 0xda, 0xb3, 0x8b, 0x59, 0x4a, 0x70, 0xba, 0x77, 0x20, 0xd4, 0x70, + 0xd9, 0x6e, 0xe0, 0x35, 0x6b, 0xcf, 0x56, 0x0a, 0x5e, 0xc7, 0x33, 0x3a, 0x01, 0xc3, 0xde, 0x81, + 0xe5, 0x6b, 0x2f, 0x16, 0xf3, 0x34, 0x43, 0xf8, 0x53, 0xe9, 0x3b, 0xc3, 0x30, 0x36, 0x48, 0x8a, + 0x5d, 0x86, 0xf4, 0x1e, 0x19, 0x65, 0x31, 0x71, 0x9c, 0x18, 0x30, 0x4c, 0x67, 0x10, 0x87, 0x7f, + 0xc2, 0x20, 0x56, 0x20, 0x67, 0x61, 0xcf, 0xc7, 0x0d, 0x96, 0x11, 0xc9, 0x01, 0x73, 0x0a, 0x18, + 0xa8, 0x37, 0xa5, 0x52, 0x3f, 0x51, 0x4a, 0x3d, 0x07, 0x63, 0x81, 0x4b, 0xaa, 0xab, 0x59, 0x4d, + 0x91, 0x9b, 0x73, 0x71, 0x9e, 0xcc, 0x56, 0x05, 0x4e, 0x21, 0x30, 0xa5, 0x80, 0x3b, 0x9e, 0xd1, + 0x0a, 0x80, 0x6d, 0x61, 0x7b, 0x4f, 0x6d, 0x60, 0xdd, 0x2c, 0x66, 0x8e, 0x88, 0x52, 0x8d, 0x98, + 0xf4, 0x44, 0xc9, 0x66, 0x52, 0xdd, 0x44, 0x97, 0xc2, 0x54, 0x1b, 0x39, 0x22, 0x53, 0x36, 0xd8, + 0x22, 0xeb, 0xc9, 0xb6, 0x1d, 0x28, 0xb8, 0x98, 0xe4, 0x3d, 0x6e, 0xf0, 0x91, 0x65, 0xa9, 0x13, + 0xb3, 0xb1, 0x23, 0x53, 0x38, 0x8c, 0x0d, 0x6c, 0xd4, 0x8d, 0x3e, 0xa2, 0x07, 0x21, 0x10, 0xa8, + 0x34, 0xad, 0x80, 0x56, 0xa1, 0xbc, 0x10, 0x6e, 0x6a, 0x2d, 0x3c, 0x75, 0x0b, 0x0a, 0x9d, 0xe1, + 0x41, 0x93, 0x90, 0xf6, 0x7c, 0xcd, 0xf5, 0x69, 0x16, 0xa6, 0x15, 0xf6, 0x80, 0x64, 0x48, 0x62, + 0xab, 0x41, 0xab, 0x5c, 0x5a, 0x21, 0x7f, 0xa2, 0xff, 0x1f, 0x0e, 0x38, 0x49, 0x07, 0xfc, 0xd1, + 0xde, 0x19, 0xed, 0x60, 0xee, 0x1e, 0xf7, 0xd4, 0x05, 0x18, 0xed, 0x18, 0xc0, 0xa0, 0xaf, 0x2e, + 0xfd, 0x1c, 0xdc, 0xd7, 0x97, 0x1a, 0x3d, 0x07, 0x93, 0x6d, 0xcb, 0xb0, 0x7c, 0xec, 0x3a, 0x2e, + 0x26, 0x19, 0xcb, 0x5e, 0x55, 0xfc, 0x97, 0x91, 0x23, 0x72, 0x6e, 0x27, 0x6a, 0xcd, 0x58, 0x94, + 0x89, 0x76, 0xaf, 0xf0, 0xb1, 0x6c, 0xe6, 0x87, 0x23, 0xf2, 0xed, 0xdb, 0xb7, 0x6f, 0x27, 0x4a, + 0x9f, 0x1f, 0x86, 0xc9, 0x7e, 0x6b, 0xa6, 0xef, 0xf2, 0x3d, 0x01, 0xc3, 0x56, 0xbb, 0xb5, 0x8b, + 0x5d, 0x1a, 0xa4, 0xb4, 0xc2, 0x9f, 0x50, 0x05, 0xd2, 0xa6, 0xb6, 0x8b, 0xcd, 0x62, 0xea, 0x8c, + 0x34, 0x53, 0x98, 0x7f, 0x7c, 0xa0, 0x55, 0x39, 0xbb, 0x4e, 0x20, 0x0a, 0x43, 0xa2, 0x4f, 0x40, + 0x8a, 0x97, 0x68, 0xc2, 0xf0, 0xd8, 0x60, 0x0c, 0x64, 0x2d, 0x29, 0x14, 0x87, 0xee, 0x87, 0x2c, + 0xf9, 0x97, 0xe5, 0xc6, 0x30, 0xf5, 0x39, 0x43, 0x04, 0x24, 0x2f, 0xd0, 0x14, 0x64, 0xe8, 0x32, + 0x69, 0x60, 0xb1, 0xb5, 0x05, 0xcf, 0x24, 0xb1, 0x1a, 0x78, 0x4f, 0x6b, 0x9b, 0xbe, 0x7a, 0x43, + 0x33, 0xdb, 0x98, 0x26, 0x7c, 0x56, 0xc9, 0x73, 0xe1, 0xa7, 0x88, 0x0c, 0x9d, 0x86, 0x1c, 0x5b, + 0x55, 0x86, 0xd5, 0xc0, 0x2f, 0xd2, 0xea, 0x99, 0x56, 0xd8, 0x42, 0x5b, 0x23, 0x12, 0xf2, 0xfa, + 0x6b, 0x9e, 0x6d, 0x89, 0xd4, 0xa4, 0xaf, 0x20, 0x02, 0xfa, 0xfa, 0x0b, 0xdd, 0x85, 0xfb, 0x81, + 0xfe, 0xc3, 0xeb, 0xce, 0xa9, 0xd2, 0xb7, 0x12, 0x90, 0xa2, 0xf5, 0x62, 0x0c, 0x72, 0xdb, 0xcf, + 0x6f, 0x55, 0xd5, 0x95, 0xda, 0xce, 0xd2, 0x7a, 0x55, 0x96, 0x50, 0x01, 0x80, 0x0a, 0xae, 0xac, + 0xd7, 0x2a, 0xdb, 0x72, 0x22, 0x78, 0x5e, 0xdb, 0xdc, 0x3e, 0xbf, 0x20, 0x27, 0x03, 0xc0, 0x0e, + 0x13, 0xa4, 0xa2, 0x06, 0xe7, 0xe6, 0xe5, 0x34, 0x92, 0x21, 0xcf, 0x08, 0xd6, 0x9e, 0xab, 0xae, + 0x9c, 0x5f, 0x90, 0x87, 0x3b, 0x25, 0xe7, 0xe6, 0xe5, 0x11, 0x34, 0x0a, 0x59, 0x2a, 0x59, 0xaa, + 0xd5, 0xd6, 0xe5, 0x4c, 0xc0, 0x59, 0xdf, 0x56, 0xd6, 0x36, 0x57, 0xe5, 0x6c, 0xc0, 0xb9, 0xaa, + 0xd4, 0x76, 0xb6, 0x64, 0x08, 0x18, 0x36, 0xaa, 0xf5, 0x7a, 0x65, 0xb5, 0x2a, 0xe7, 0x02, 0x8b, + 0xa5, 0xe7, 0xb7, 0xab, 0x75, 0x39, 0xdf, 0xe1, 0xd6, 0xb9, 0x79, 0x79, 0x34, 0x78, 0x45, 0x75, + 0x73, 0x67, 0x43, 0x2e, 0xa0, 0x71, 0x18, 0x65, 0xaf, 0x10, 0x4e, 0x8c, 0x75, 0x89, 0xce, 0x2f, + 0xc8, 0x72, 0xe8, 0x08, 0x63, 0x19, 0xef, 0x10, 0x9c, 0x5f, 0x90, 0x51, 0x69, 0x19, 0xd2, 0x34, + 0xbb, 0x10, 0x82, 0xc2, 0x7a, 0x65, 0xa9, 0xba, 0xae, 0xd6, 0xb6, 0xb6, 0xd7, 0x6a, 0x9b, 0x95, + 0x75, 0x59, 0x0a, 0x65, 0x4a, 0xf5, 0x93, 0x3b, 0x6b, 0x4a, 0x75, 0x45, 0x4e, 0x44, 0x65, 0x5b, + 0xd5, 0xca, 0x76, 0x75, 0x45, 0x4e, 0x96, 0x74, 0x98, 0xec, 0x57, 0x27, 0xfb, 0xae, 0x8c, 0xc8, + 0x14, 0x27, 0x8e, 0x98, 0x62, 0xca, 0xd5, 0x33, 0xc5, 0x3f, 0x48, 0xc0, 0x44, 0x9f, 0xbd, 0xa2, + 0xef, 0x4b, 0x9e, 0x86, 0x34, 0x4b, 0x51, 0xb6, 0x7b, 0x3e, 0xda, 0x77, 0xd3, 0xa1, 0x09, 0xdb, + 0xb3, 0x83, 0x52, 0x5c, 0xb4, 0x83, 0x48, 0x1e, 0xd1, 0x41, 0x10, 0x8a, 0x9e, 0x9a, 0xfe, 0xb3, + 0x3d, 0x35, 0x9d, 0x6d, 0x7b, 0xe7, 0x07, 0xd9, 0xf6, 0xa8, 0xec, 0x78, 0xb5, 0x3d, 0xdd, 0xa7, + 0xb6, 0x5f, 0x86, 0xf1, 0x1e, 0xa2, 0x81, 0x6b, 0xec, 0x4b, 0x12, 0x14, 0x8f, 0x0a, 0x4e, 0x4c, + 0xa5, 0x4b, 0x74, 0x54, 0xba, 0xcb, 0xdd, 0x11, 0x3c, 0x7b, 0xf4, 0x24, 0xf4, 0xcc, 0xf5, 0x6b, + 0x12, 0x9c, 0xe8, 0xdf, 0x29, 0xf6, 0xf5, 0xe1, 0x13, 0x30, 0xdc, 0xc2, 0xfe, 0xbe, 0x2d, 0xba, + 0xa5, 0x8f, 0xf6, 0xd9, 0x83, 0x89, 0xba, 0x7b, 0xb2, 0x39, 0x2a, 0xba, 0x89, 0x27, 0x8f, 0x6a, + 0xf7, 0x98, 0x37, 0x3d, 0x9e, 0x7e, 0x36, 0x01, 0xf7, 0xf5, 0x25, 0xef, 0xeb, 0xe8, 0x03, 0x00, + 0x86, 0xe5, 0xb4, 0x7d, 0xd6, 0x11, 0xb1, 0x02, 0x9b, 0xa5, 0x12, 0x5a, 0xbc, 0x48, 0xf1, 0x6c, + 0xfb, 0x81, 0x3e, 0x49, 0xf5, 0xc0, 0x44, 0xd4, 0xe0, 0x62, 0xe8, 0x68, 0x8a, 0x3a, 0x3a, 0x7d, + 0xc4, 0x48, 0x7b, 0x12, 0xf3, 0x49, 0x90, 0x75, 0xd3, 0xc0, 0x96, 0xaf, 0x7a, 0xbe, 0x8b, 0xb5, + 0x96, 0x61, 0x35, 0xe9, 0x0e, 0x92, 0x29, 0xa7, 0xf7, 0x34, 0xd3, 0xc3, 0xca, 0x18, 0x53, 0xd7, + 0x85, 0x96, 0x20, 0x68, 0x02, 0xb9, 0x11, 0xc4, 0x70, 0x07, 0x82, 0xa9, 0x03, 0x44, 0xe9, 0x9b, + 0x19, 0xc8, 0x45, 0xfa, 0x6a, 0x74, 0x16, 0xf2, 0xd7, 0xb4, 0x1b, 0x9a, 0x2a, 0xce, 0x4a, 0x2c, + 0x12, 0x39, 0x22, 0xdb, 0xe2, 0xe7, 0xa5, 0x27, 0x61, 0x92, 0x9a, 0xd8, 0x6d, 0x1f, 0xbb, 0xaa, + 0x6e, 0x6a, 0x9e, 0x47, 0x83, 0x96, 0xa1, 0xa6, 0x88, 0xe8, 0x6a, 0x44, 0xb5, 0x2c, 0x34, 0x68, + 0x11, 0x26, 0x28, 0xa2, 0xd5, 0x36, 0x7d, 0xc3, 0x31, 0xb1, 0x4a, 0x4e, 0x6f, 0x1e, 0xdd, 0x49, + 0x02, 0xcf, 0xc6, 0x89, 0xc5, 0x06, 0x37, 0x20, 0x1e, 0x79, 0x68, 0x05, 0x1e, 0xa0, 0xb0, 0x26, + 0xb6, 0xb0, 0xab, 0xf9, 0x58, 0xc5, 0x9f, 0x69, 0x6b, 0xa6, 0xa7, 0x6a, 0x56, 0x43, 0xdd, 0xd7, + 0xbc, 0xfd, 0xe2, 0x24, 0x21, 0x58, 0x4a, 0x14, 0x25, 0xe5, 0x14, 0x31, 0x5c, 0xe5, 0x76, 0x55, + 0x6a, 0x56, 0xb1, 0x1a, 0x57, 0x35, 0x6f, 0x1f, 0x95, 0xe1, 0x04, 0x65, 0xf1, 0x7c, 0xd7, 0xb0, + 0x9a, 0xaa, 0xbe, 0x8f, 0xf5, 0xeb, 0x6a, 0xdb, 0xdf, 0xbb, 0x58, 0xbc, 0x3f, 0xfa, 0x7e, 0xea, + 0x61, 0x9d, 0xda, 0x2c, 0x13, 0x93, 0x1d, 0x7f, 0xef, 0x22, 0xaa, 0x43, 0x9e, 0x4c, 0x46, 0xcb, + 0xb8, 0x85, 0xd5, 0x3d, 0xdb, 0xa5, 0x5b, 0x63, 0xa1, 0x4f, 0x69, 0x8a, 0x44, 0x70, 0xb6, 0xc6, + 0x01, 0x1b, 0x76, 0x03, 0x97, 0xd3, 0xf5, 0xad, 0x6a, 0x75, 0x45, 0xc9, 0x09, 0x96, 0x2b, 0xb6, + 0x4b, 0x12, 0xaa, 0x69, 0x07, 0x01, 0xce, 0xb1, 0x84, 0x6a, 0xda, 0x22, 0xbc, 0x8b, 0x30, 0xa1, + 0xeb, 0x6c, 0xcc, 0x86, 0xae, 0xf2, 0x33, 0x96, 0x57, 0x94, 0x3b, 0x82, 0xa5, 0xeb, 0xab, 0xcc, + 0x80, 0xe7, 0xb8, 0x87, 0x2e, 0xc1, 0x7d, 0x61, 0xb0, 0xa2, 0xc0, 0xf1, 0x9e, 0x51, 0x76, 0x43, + 0x17, 0x61, 0xc2, 0x39, 0xe8, 0x05, 0xa2, 0x8e, 0x37, 0x3a, 0x07, 0xdd, 0xb0, 0x0b, 0x30, 0xe9, + 0xec, 0x3b, 0xbd, 0xb8, 0xc7, 0xa2, 0x38, 0xe4, 0xec, 0x3b, 0xdd, 0xc0, 0x87, 0xe9, 0x81, 0xdb, + 0xc5, 0xba, 0xe6, 0xe3, 0x46, 0xf1, 0x64, 0xd4, 0x3c, 0xa2, 0x40, 0x73, 0x20, 0xeb, 0xba, 0x8a, + 0x2d, 0x6d, 0xd7, 0xc4, 0xaa, 0xe6, 0x62, 0x4b, 0xf3, 0x8a, 0xa7, 0xa3, 0xc6, 0x05, 0x5d, 0xaf, + 0x52, 0x6d, 0x85, 0x2a, 0xd1, 0x63, 0x30, 0x6e, 0xef, 0x5e, 0xd3, 0x59, 0x4a, 0xaa, 0x8e, 0x8b, + 0xf7, 0x8c, 0x17, 0x8b, 0x0f, 0xd1, 0xf8, 0x8e, 0x11, 0x05, 0x4d, 0xc8, 0x2d, 0x2a, 0x46, 0x8f, + 0x82, 0xac, 0x7b, 0xfb, 0x9a, 0xeb, 0xd0, 0x9a, 0xec, 0x39, 0x9a, 0x8e, 0x8b, 0x0f, 0x33, 0x53, + 0x26, 0xdf, 0x14, 0x62, 0xb2, 0x24, 0xbc, 0x9b, 0xc6, 0x9e, 0x2f, 0x18, 0x1f, 0x61, 0x4b, 0x82, + 0xca, 0x38, 0xdb, 0x0c, 0xc8, 0x24, 0x14, 0x1d, 0x2f, 0x9e, 0xa1, 0x66, 0x05, 0x67, 0xdf, 0x89, + 0xbe, 0xf7, 0x41, 0x18, 0x25, 0x96, 0xe1, 0x4b, 0x1f, 0x65, 0x0d, 0x99, 0xb3, 0x1f, 0x79, 0xe3, + 0x07, 0xd6, 0x1b, 0x97, 0xca, 0x90, 0x8f, 0xe6, 0x27, 0xca, 0x02, 0xcb, 0x50, 0x59, 0x22, 0xcd, + 0xca, 0x72, 0x6d, 0x85, 0xb4, 0x19, 0x2f, 0x54, 0xe5, 0x04, 0x69, 0x77, 0xd6, 0xd7, 0xb6, 0xab, + 0xaa, 0xb2, 0xb3, 0xb9, 0xbd, 0xb6, 0x51, 0x95, 0x93, 0xd1, 0xbe, 0xfa, 0x7b, 0x09, 0x28, 0x74, + 0x1e, 0x91, 0xd0, 0xff, 0x83, 0x93, 0xe2, 0x3e, 0xc3, 0xc3, 0xbe, 0x7a, 0xd3, 0x70, 0xe9, 0x92, + 0x69, 0x69, 0x6c, 0xfb, 0x0a, 0x26, 0x6d, 0x92, 0x5b, 0xd5, 0xb1, 0xff, 0xac, 0xe1, 0x92, 0x05, + 0xd1, 0xd2, 0x7c, 0xb4, 0x0e, 0xa7, 0x2d, 0x5b, 0xf5, 0x7c, 0xcd, 0x6a, 0x68, 0x6e, 0x43, 0x0d, + 0x6f, 0x92, 0x54, 0x4d, 0xd7, 0xb1, 0xe7, 0xd9, 0x6c, 0xab, 0x0a, 0x58, 0x3e, 0x62, 0xd9, 0x75, + 0x6e, 0x1c, 0xd6, 0xf0, 0x0a, 0x37, 0xed, 0x4a, 0xb0, 0xe4, 0x51, 0x09, 0x76, 0x3f, 0x64, 0x5b, + 0x9a, 0xa3, 0x62, 0xcb, 0x77, 0x0f, 0x68, 0x63, 0x9c, 0x51, 0x32, 0x2d, 0xcd, 0xa9, 0x92, 0xe7, + 0x0f, 0xe7, 0x7c, 0xf2, 0xcf, 0x49, 0xc8, 0x47, 0x9b, 0x63, 0x72, 0xd6, 0xd0, 0xe9, 0x3e, 0x22, + 0xd1, 0x4a, 0xf3, 0xe0, 0x3d, 0x5b, 0xe9, 0xd9, 0x65, 0xb2, 0xc1, 0x94, 0x87, 0x59, 0xcb, 0xaa, + 0x30, 0x24, 0xd9, 0xdc, 0x49, 0x6d, 0xc1, 0xac, 0x45, 0xc8, 0x28, 0xfc, 0x09, 0xad, 0xc2, 0xf0, + 0x35, 0x8f, 0x72, 0x0f, 0x53, 0xee, 0x87, 0xee, 0xcd, 0xfd, 0x4c, 0x9d, 0x92, 0x67, 0x9f, 0xa9, + 0xab, 0x9b, 0x35, 0x65, 0xa3, 0xb2, 0xae, 0x70, 0x38, 0x3a, 0x05, 0x29, 0x53, 0xbb, 0x75, 0xd0, + 0xb9, 0x15, 0x51, 0xd1, 0xa0, 0x81, 0x3f, 0x05, 0xa9, 0x9b, 0x58, 0xbb, 0xde, 0xb9, 0x01, 0x50, + 0xd1, 0x07, 0x98, 0xfa, 0x73, 0x90, 0xa6, 0xf1, 0x42, 0x00, 0x3c, 0x62, 0xf2, 0x10, 0xca, 0x40, + 0x6a, 0xb9, 0xa6, 0x90, 0xf4, 0x97, 0x21, 0xcf, 0xa4, 0xea, 0xd6, 0x5a, 0x75, 0xb9, 0x2a, 0x27, + 0x4a, 0x8b, 0x30, 0xcc, 0x82, 0x40, 0x96, 0x46, 0x10, 0x06, 0x79, 0x88, 0x3f, 0x72, 0x0e, 0x49, + 0x68, 0x77, 0x36, 0x96, 0xaa, 0x8a, 0x9c, 0x88, 0x4e, 0xaf, 0x07, 0xf9, 0x68, 0x5f, 0xfc, 0xe1, + 0xe4, 0xd4, 0x77, 0x25, 0xc8, 0x45, 0xfa, 0x5c, 0xd2, 0xa0, 0x68, 0xa6, 0x69, 0xdf, 0x54, 0x35, + 0xd3, 0xd0, 0x3c, 0x9e, 0x14, 0x40, 0x45, 0x15, 0x22, 0x19, 0x74, 0xd2, 0x3e, 0x14, 0xe7, 0x5f, + 0x95, 0x40, 0xee, 0x6e, 0x31, 0xbb, 0x1c, 0x94, 0x7e, 0xaa, 0x0e, 0xbe, 0x22, 0x41, 0xa1, 0xb3, + 0xaf, 0xec, 0x72, 0xef, 0xec, 0x4f, 0xd5, 0xbd, 0xb7, 0x12, 0x30, 0xda, 0xd1, 0x4d, 0x0e, 0xea, + 0xdd, 0x67, 0x60, 0xdc, 0x68, 0xe0, 0x96, 0x63, 0xfb, 0xd8, 0xd2, 0x0f, 0x54, 0x13, 0xdf, 0xc0, + 0x66, 0xb1, 0x44, 0x0b, 0xc5, 0xdc, 0xbd, 0xfb, 0xd5, 0xd9, 0xb5, 0x10, 0xb7, 0x4e, 0x60, 0xe5, + 0x89, 0xb5, 0x95, 0xea, 0xc6, 0x56, 0x6d, 0xbb, 0xba, 0xb9, 0xfc, 0xbc, 0xba, 0xb3, 0xf9, 0x33, + 0x9b, 0xb5, 0x67, 0x37, 0x15, 0xd9, 0xe8, 0x32, 0xfb, 0x00, 0x97, 0xfa, 0x16, 0xc8, 0xdd, 0x4e, + 0xa1, 0x93, 0xd0, 0xcf, 0x2d, 0x79, 0x08, 0x4d, 0xc0, 0xd8, 0x66, 0x4d, 0xad, 0xaf, 0xad, 0x54, + 0xd5, 0xea, 0x95, 0x2b, 0xd5, 0xe5, 0xed, 0x3a, 0xbb, 0x81, 0x08, 0xac, 0xb7, 0x3b, 0x17, 0xf5, + 0xcb, 0x49, 0x98, 0xe8, 0xe3, 0x09, 0xaa, 0xf0, 0xb3, 0x03, 0x3b, 0xce, 0x3c, 0x31, 0x88, 0xf7, + 0xb3, 0x64, 0xcb, 0xdf, 0xd2, 0x5c, 0x9f, 0x1f, 0x35, 0x1e, 0x05, 0x12, 0x25, 0xcb, 0x37, 0xf6, + 0x0c, 0xec, 0xf2, 0x0b, 0x1b, 0x76, 0xa0, 0x18, 0x0b, 0xe5, 0xec, 0xce, 0xe6, 0x63, 0x80, 0x1c, + 0xdb, 0x33, 0x7c, 0xe3, 0x06, 0x56, 0x0d, 0x4b, 0xdc, 0xee, 0x90, 0x03, 0x46, 0x4a, 0x91, 0x85, + 0x66, 0xcd, 0xf2, 0x03, 0x6b, 0x0b, 0x37, 0xb5, 0x2e, 0x6b, 0x52, 0xc0, 0x93, 0x8a, 0x2c, 0x34, + 0x81, 0xf5, 0x59, 0xc8, 0x37, 0xec, 0x36, 0xe9, 0xba, 0x98, 0x1d, 0xd9, 0x2f, 0x24, 0x25, 0xc7, + 0x64, 0x81, 0x09, 0xef, 0xa7, 0xc3, 0x6b, 0xa5, 0xbc, 0x92, 0x63, 0x32, 0x66, 0xf2, 0x08, 0x8c, + 0x69, 0xcd, 0xa6, 0x4b, 0xc8, 0x05, 0x11, 0x3b, 0x21, 0x14, 0x02, 0x31, 0x35, 0x9c, 0x7a, 0x06, + 0x32, 0x22, 0x0e, 0x64, 0x4b, 0x26, 0x91, 0x50, 0x1d, 0x76, 0xec, 0x4d, 0xcc, 0x64, 0x95, 0x8c, + 0x25, 0x94, 0x67, 0x21, 0x6f, 0x78, 0x6a, 0x78, 0x4b, 0x9e, 0x38, 0x93, 0x98, 0xc9, 0x28, 0x39, + 0xc3, 0x0b, 0x6e, 0x18, 0x4b, 0xaf, 0x25, 0xa0, 0xd0, 0x79, 0xcb, 0x8f, 0x56, 0x20, 0x63, 0xda, + 0xba, 0x46, 0x53, 0x8b, 0x7d, 0x62, 0x9a, 0x89, 0xf9, 0x30, 0x30, 0xbb, 0xce, 0xed, 0x95, 0x00, + 0x39, 0xf5, 0x0f, 0x12, 0x64, 0x84, 0x18, 0x9d, 0x80, 0x94, 0xa3, 0xf9, 0xfb, 0x94, 0x2e, 0xbd, + 0x94, 0x90, 0x25, 0x85, 0x3e, 0x13, 0xb9, 0xe7, 0x68, 0x16, 0x4d, 0x01, 0x2e, 0x27, 0xcf, 0x64, + 0x5e, 0x4d, 0xac, 0x35, 0xe8, 0xf1, 0xc3, 0x6e, 0xb5, 0xb0, 0xe5, 0x7b, 0x62, 0x5e, 0xb9, 0x7c, + 0x99, 0x8b, 0xd1, 0xe3, 0x30, 0xee, 0xbb, 0x9a, 0x61, 0x76, 0xd8, 0xa6, 0xa8, 0xad, 0x2c, 0x14, + 0x81, 0x71, 0x19, 0x4e, 0x09, 0xde, 0x06, 0xf6, 0x35, 0x7d, 0x1f, 0x37, 0x42, 0xd0, 0x30, 0xbd, + 0x66, 0x38, 0xc9, 0x0d, 0x56, 0xb8, 0x5e, 0x60, 0x4b, 0xdf, 0x97, 0x60, 0x5c, 0x1c, 0x98, 0x1a, + 0x41, 0xb0, 0x36, 0x00, 0x34, 0xcb, 0xb2, 0xfd, 0x68, 0xb8, 0x7a, 0x53, 0xb9, 0x07, 0x37, 0x5b, + 0x09, 0x40, 0x4a, 0x84, 0x60, 0xaa, 0x05, 0x10, 0x6a, 0x8e, 0x0c, 0xdb, 0x69, 0xc8, 0xf1, 0x4f, + 0x38, 0xf4, 0x3b, 0x20, 0x3b, 0x62, 0x03, 0x13, 0x91, 0x93, 0x15, 0x9a, 0x84, 0xf4, 0x2e, 0x6e, + 0x1a, 0x16, 0xbf, 0x98, 0x65, 0x0f, 0xe2, 0x22, 0x24, 0x15, 0x5c, 0x84, 0x2c, 0x7d, 0x1a, 0x26, + 0x74, 0xbb, 0xd5, 0xed, 0xee, 0x92, 0xdc, 0x75, 0xcc, 0xf7, 0xae, 0x4a, 0x2f, 0x40, 0xd8, 0x62, + 0xbe, 0x27, 0x49, 0x5f, 0x4e, 0x24, 0x57, 0xb7, 0x96, 0xbe, 0x96, 0x98, 0x5a, 0x65, 0xd0, 0x2d, + 0x31, 0x52, 0x05, 0xef, 0x99, 0x58, 0x27, 0xde, 0xc3, 0x57, 0x1e, 0x87, 0x27, 0x9a, 0x86, 0xbf, + 0xdf, 0xde, 0x9d, 0xd5, 0xed, 0xd6, 0x5c, 0xd3, 0x6e, 0xda, 0xe1, 0xa7, 0x4f, 0xf2, 0x44, 0x1f, + 0xe8, 0x5f, 0xfc, 0xf3, 0x67, 0x36, 0x90, 0x4e, 0xc5, 0x7e, 0x2b, 0x2d, 0x6f, 0xc2, 0x04, 0x37, + 0x56, 0xe9, 0xf7, 0x17, 0x76, 0x8a, 0x40, 0xf7, 0xbc, 0xc3, 0x2a, 0x7e, 0xe3, 0x6d, 0xba, 0x5d, + 0x2b, 0xe3, 0x1c, 0x4a, 0x74, 0xec, 0xa0, 0x51, 0x56, 0xe0, 0xbe, 0x0e, 0x3e, 0xb6, 0x34, 0xb1, + 0x1b, 0xc3, 0xf8, 0x3d, 0xce, 0x38, 0x11, 0x61, 0xac, 0x73, 0x68, 0x79, 0x19, 0x46, 0x8f, 0xc3, + 0xf5, 0x77, 0x9c, 0x2b, 0x8f, 0xa3, 0x24, 0xab, 0x30, 0x46, 0x49, 0xf4, 0xb6, 0xe7, 0xdb, 0x2d, + 0x5a, 0xf7, 0xee, 0x4d, 0xf3, 0xf7, 0x6f, 0xb3, 0xb5, 0x52, 0x20, 0xb0, 0xe5, 0x00, 0x55, 0x2e, + 0x03, 0xfd, 0xe4, 0xd4, 0xc0, 0xba, 0x19, 0xc3, 0xf0, 0x3a, 0x77, 0x24, 0xb0, 0x2f, 0x7f, 0x0a, + 0x26, 0xc9, 0xdf, 0xb4, 0x2c, 0x45, 0x3d, 0x89, 0xbf, 0xf0, 0x2a, 0x7e, 0xff, 0x25, 0xb6, 0x1c, + 0x27, 0x02, 0x82, 0x88, 0x4f, 0x91, 0x59, 0x6c, 0x62, 0xdf, 0xc7, 0xae, 0xa7, 0x6a, 0x66, 0x3f, + 0xf7, 0x22, 0x37, 0x06, 0xc5, 0x2f, 0xbc, 0xd3, 0x39, 0x8b, 0xab, 0x0c, 0x59, 0x31, 0xcd, 0xf2, + 0x0e, 0x9c, 0xec, 0x93, 0x15, 0x03, 0x70, 0xbe, 0xcc, 0x39, 0x27, 0x7b, 0x32, 0x83, 0xd0, 0x6e, + 0x81, 0x90, 0x07, 0x73, 0x39, 0x00, 0xe7, 0xef, 0x72, 0x4e, 0xc4, 0xb1, 0x62, 0x4a, 0x09, 0xe3, + 0x33, 0x30, 0x7e, 0x03, 0xbb, 0xbb, 0xb6, 0xc7, 0x6f, 0x69, 0x06, 0xa0, 0x7b, 0x85, 0xd3, 0x8d, + 0x71, 0x20, 0xbd, 0xb6, 0x21, 0x5c, 0x97, 0x20, 0xb3, 0xa7, 0xe9, 0x78, 0x00, 0x8a, 0x2f, 0x72, + 0x8a, 0x11, 0x62, 0x4f, 0xa0, 0x15, 0xc8, 0x37, 0x6d, 0xbe, 0x33, 0xc5, 0xc3, 0x5f, 0xe5, 0xf0, + 0x9c, 0xc0, 0x70, 0x0a, 0xc7, 0x76, 0xda, 0x26, 0xd9, 0xb6, 0xe2, 0x29, 0x7e, 0x4f, 0x50, 0x08, + 0x0c, 0xa7, 0x38, 0x46, 0x58, 0x7f, 0x5f, 0x50, 0x78, 0x91, 0x78, 0x3e, 0x0d, 0x39, 0xdb, 0x32, + 0x0f, 0x6c, 0x6b, 0x10, 0x27, 0xbe, 0xc4, 0x19, 0x80, 0x43, 0x08, 0xc1, 0x65, 0xc8, 0x0e, 0x3a, + 0x11, 0x7f, 0xf8, 0x8e, 0x58, 0x1e, 0x62, 0x06, 0x56, 0x61, 0x4c, 0x14, 0x28, 0xc3, 0xb6, 0x06, + 0xa0, 0xf8, 0x0a, 0xa7, 0x28, 0x44, 0x60, 0x7c, 0x18, 0x3e, 0xf6, 0xfc, 0x26, 0x1e, 0x84, 0xe4, + 0x35, 0x31, 0x0c, 0x0e, 0xe1, 0xa1, 0xdc, 0xc5, 0x96, 0xbe, 0x3f, 0x18, 0xc3, 0x57, 0x45, 0x28, + 0x05, 0x86, 0x50, 0x2c, 0xc3, 0x68, 0x4b, 0x73, 0xbd, 0x7d, 0xcd, 0x1c, 0x68, 0x3a, 0xfe, 0x88, + 0x73, 0xe4, 0x03, 0x10, 0x8f, 0x48, 0xdb, 0x3a, 0x0e, 0xcd, 0xd7, 0x44, 0x44, 0x22, 0x30, 0xbe, + 0xf4, 0x3c, 0x9f, 0x5e, 0x69, 0x1d, 0x87, 0xed, 0x8f, 0xc5, 0xd2, 0x63, 0xd8, 0x8d, 0x28, 0xe3, + 0x65, 0xc8, 0x7a, 0xc6, 0xad, 0x81, 0x68, 0xfe, 0x44, 0xcc, 0x34, 0x05, 0x10, 0xf0, 0xf3, 0x70, + 0xaa, 0xef, 0x36, 0x31, 0x00, 0xd9, 0x9f, 0x72, 0xb2, 0x13, 0x7d, 0xb6, 0x0a, 0x5e, 0x12, 0x8e, + 0x4b, 0xf9, 0x67, 0xa2, 0x24, 0xe0, 0x2e, 0xae, 0x2d, 0x72, 0x56, 0xf0, 0xb4, 0xbd, 0xe3, 0x45, + 0xed, 0xcf, 0x45, 0xd4, 0x18, 0xb6, 0x23, 0x6a, 0xdb, 0x70, 0x82, 0x33, 0x1e, 0x6f, 0x5e, 0xbf, + 0x2e, 0x0a, 0x2b, 0x43, 0xef, 0x74, 0xce, 0xee, 0xa7, 0x61, 0x2a, 0x08, 0xa7, 0x68, 0x4a, 0x3d, + 0xb5, 0xa5, 0x39, 0x03, 0x30, 0x7f, 0x83, 0x33, 0x8b, 0x8a, 0x1f, 0x74, 0xb5, 0xde, 0x86, 0xe6, + 0x10, 0xf2, 0xe7, 0xa0, 0x28, 0xc8, 0xdb, 0x96, 0x8b, 0x75, 0xbb, 0x69, 0x19, 0xb7, 0x70, 0x63, + 0x00, 0xea, 0xbf, 0xe8, 0x9a, 0xaa, 0x9d, 0x08, 0x9c, 0x30, 0xaf, 0x81, 0x1c, 0xf4, 0x2a, 0xaa, + 0xd1, 0x72, 0x6c, 0xd7, 0x8f, 0x61, 0xfc, 0xa6, 0x98, 0xa9, 0x00, 0xb7, 0x46, 0x61, 0xe5, 0x2a, + 0x14, 0xe8, 0xe3, 0xa0, 0x29, 0xf9, 0x97, 0x9c, 0x68, 0x34, 0x44, 0xf1, 0xc2, 0xa1, 0xdb, 0x2d, + 0x47, 0x73, 0x07, 0xa9, 0x7f, 0x7f, 0x25, 0x0a, 0x07, 0x87, 0xf0, 0xc2, 0xe1, 0x1f, 0x38, 0x98, + 0xec, 0xf6, 0x03, 0x30, 0x7c, 0x4b, 0x14, 0x0e, 0x81, 0xe1, 0x14, 0xa2, 0x61, 0x18, 0x80, 0xe2, + 0xaf, 0x05, 0x85, 0xc0, 0x10, 0x8a, 0x4f, 0x86, 0x1b, 0xad, 0x8b, 0x9b, 0x86, 0xe7, 0xbb, 0xac, + 0x15, 0xbe, 0x37, 0xd5, 0xb7, 0xdf, 0xe9, 0x6c, 0xc2, 0x94, 0x08, 0x94, 0x54, 0x22, 0x7e, 0x85, + 0x4a, 0x4f, 0x4a, 0xf1, 0x8e, 0x7d, 0x47, 0x54, 0xa2, 0x08, 0x8c, 0xf8, 0x16, 0xe9, 0x10, 0x49, + 0xd8, 0x75, 0x72, 0x3e, 0x18, 0x80, 0xee, 0xbb, 0x5d, 0xce, 0xd5, 0x05, 0x96, 0x70, 0x46, 0xfa, + 0x9f, 0xb6, 0x75, 0x1d, 0x1f, 0x0c, 0x94, 0x9d, 0x7f, 0xd3, 0xd5, 0xff, 0xec, 0x30, 0x24, 0xab, + 0x21, 0x63, 0x5d, 0xfd, 0x14, 0x8a, 0xfb, 0xb1, 0x4e, 0xf1, 0xe7, 0xef, 0xf2, 0xf1, 0x76, 0xb6, + 0x53, 0xe5, 0x75, 0x92, 0xe4, 0x9d, 0x4d, 0x4f, 0x3c, 0xd9, 0x4b, 0x77, 0x83, 0x3c, 0xef, 0xe8, + 0x79, 0xca, 0x57, 0x60, 0xb4, 0xa3, 0xe1, 0x89, 0xa7, 0xfa, 0x05, 0x4e, 0x95, 0x8f, 0xf6, 0x3b, + 0xe5, 0x45, 0x48, 0x91, 0xe6, 0x25, 0x1e, 0xfe, 0x8b, 0x1c, 0x4e, 0xcd, 0xcb, 0x1f, 0x87, 0x8c, + 0x68, 0x5a, 0xe2, 0xa1, 0xbf, 0xc4, 0xa1, 0x01, 0x84, 0xc0, 0x45, 0xc3, 0x12, 0x0f, 0xff, 0x65, + 0x01, 0x17, 0x10, 0x02, 0x1f, 0x3c, 0x84, 0x7f, 0xfb, 0x2b, 0x29, 0xbe, 0xe9, 0x88, 0xd8, 0x5d, + 0x86, 0x11, 0xde, 0xa9, 0xc4, 0xa3, 0x3f, 0xcb, 0x5f, 0x2e, 0x10, 0xe5, 0x0b, 0x90, 0x1e, 0x30, + 0xe0, 0xbf, 0xca, 0xa1, 0xcc, 0xbe, 0xbc, 0x0c, 0xb9, 0x48, 0x77, 0x12, 0x0f, 0xff, 0x35, 0x0e, + 0x8f, 0xa2, 0x88, 0xeb, 0xbc, 0x3b, 0x89, 0x27, 0xf8, 0x75, 0xe1, 0x3a, 0x47, 0x90, 0xb0, 0x89, + 0xc6, 0x24, 0x1e, 0xfd, 0x1b, 0x22, 0xea, 0x02, 0x52, 0x7e, 0x1a, 0xb2, 0xc1, 0x66, 0x13, 0x8f, + 0xff, 0x4d, 0x8e, 0x0f, 0x31, 0x24, 0x02, 0x91, 0xcd, 0x2e, 0x9e, 0xe2, 0x73, 0x22, 0x02, 0x11, + 0x14, 0x59, 0x46, 0xdd, 0x0d, 0x4c, 0x3c, 0xd3, 0x6f, 0x89, 0x65, 0xd4, 0xd5, 0xbf, 0x90, 0xd9, + 0xa4, 0x35, 0x3f, 0x9e, 0xe2, 0xb7, 0xc5, 0x6c, 0x52, 0x7b, 0xe2, 0x46, 0x77, 0x47, 0x10, 0xcf, + 0xf1, 0x3b, 0xc2, 0x8d, 0xae, 0x86, 0xa0, 0xbc, 0x05, 0xa8, 0xb7, 0x1b, 0x88, 0xe7, 0xfb, 0x3c, + 0xe7, 0x1b, 0xef, 0x69, 0x06, 0xca, 0xcf, 0xc2, 0x89, 0xfe, 0x9d, 0x40, 0x3c, 0xeb, 0x17, 0xee, + 0x76, 0x9d, 0xdd, 0xa2, 0x8d, 0x40, 0x79, 0x3b, 0xdc, 0x52, 0xa2, 0x5d, 0x40, 0x3c, 0xed, 0xcb, + 0x77, 0x3b, 0x0b, 0x77, 0xb4, 0x09, 0x28, 0x57, 0x00, 0xc2, 0x0d, 0x38, 0x9e, 0xeb, 0x15, 0xce, + 0x15, 0x01, 0x91, 0xa5, 0xc1, 0xf7, 0xdf, 0x78, 0xfc, 0x17, 0xc5, 0xd2, 0xe0, 0x08, 0xb2, 0x34, + 0xc4, 0xd6, 0x1b, 0x8f, 0x7e, 0x55, 0x2c, 0x0d, 0x01, 0x21, 0x99, 0x1d, 0xd9, 0xdd, 0xe2, 0x19, + 0xbe, 0x24, 0x32, 0x3b, 0x82, 0x2a, 0x6f, 0xc2, 0x78, 0xcf, 0x86, 0x18, 0x4f, 0xf5, 0x65, 0x4e, + 0x25, 0x77, 0xef, 0x87, 0xd1, 0xcd, 0x8b, 0x6f, 0x86, 0xf1, 0x6c, 0x7f, 0xd0, 0xb5, 0x79, 0xf1, + 0xbd, 0xb0, 0x7c, 0x19, 0x32, 0x56, 0xdb, 0x34, 0xc9, 0xe2, 0x41, 0xf7, 0xfe, 0x81, 0x5d, 0xf1, + 0x5f, 0xdf, 0xe7, 0xd1, 0x11, 0x80, 0xf2, 0x22, 0xa4, 0x71, 0x6b, 0x17, 0x37, 0xe2, 0x90, 0xff, + 0xf6, 0xbe, 0x28, 0x98, 0xc4, 0xba, 0xfc, 0x34, 0x00, 0xbb, 0x1a, 0xa1, 0x9f, 0xfd, 0x62, 0xb0, + 0xff, 0xfe, 0x3e, 0xff, 0xe9, 0x4b, 0x08, 0x09, 0x09, 0xd8, 0x0f, 0x69, 0xee, 0x4d, 0xf0, 0x4e, + 0x27, 0x01, 0x9d, 0x91, 0x4b, 0x30, 0x72, 0xcd, 0xb3, 0x2d, 0x5f, 0x6b, 0xc6, 0xa1, 0xff, 0x83, + 0xa3, 0x85, 0x3d, 0x09, 0x58, 0xcb, 0x76, 0xb1, 0xaf, 0x35, 0xbd, 0x38, 0xec, 0x7f, 0x72, 0x6c, + 0x00, 0x20, 0x60, 0x5d, 0xf3, 0xfc, 0x41, 0xc6, 0xfd, 0x23, 0x01, 0x16, 0x00, 0xe2, 0x34, 0xf9, + 0xfb, 0x3a, 0x3e, 0x88, 0xc3, 0xbe, 0x2b, 0x9c, 0xe6, 0xf6, 0xe5, 0x8f, 0x43, 0x96, 0xfc, 0xc9, + 0x7e, 0xcf, 0x16, 0x03, 0xfe, 0x2f, 0x0e, 0x0e, 0x11, 0xe4, 0xcd, 0x9e, 0xdf, 0xf0, 0x8d, 0xf8, + 0x60, 0xff, 0x37, 0x9f, 0x69, 0x61, 0x5f, 0xae, 0x40, 0xce, 0xf3, 0x1b, 0x8d, 0x36, 0xef, 0x4f, + 0x63, 0xe0, 0xff, 0xf3, 0x7e, 0x70, 0x65, 0x11, 0x60, 0xc8, 0x6c, 0xdf, 0xbc, 0xee, 0x3b, 0x36, + 0xfd, 0xcc, 0x11, 0xc7, 0x70, 0x97, 0x33, 0x44, 0x20, 0x4b, 0xd5, 0xfe, 0xd7, 0xb7, 0xb0, 0x6a, + 0xaf, 0xda, 0xec, 0xe2, 0xf6, 0x85, 0x52, 0xfc, 0x0d, 0x2c, 0xfc, 0x38, 0x03, 0x53, 0xba, 0xdd, + 0xda, 0xb5, 0xbd, 0xb9, 0xa0, 0x1c, 0xcf, 0xd9, 0x16, 0x67, 0x44, 0x49, 0xdb, 0xc2, 0x53, 0xc7, + 0xbb, 0xc9, 0x2d, 0x9d, 0x82, 0x74, 0xbd, 0xbd, 0xbb, 0x7b, 0x80, 0x64, 0x48, 0x7a, 0xed, 0x5d, + 0xfe, 0xab, 0x28, 0xf2, 0x67, 0xe9, 0xcd, 0x24, 0x8c, 0x56, 0x4c, 0x73, 0xfb, 0xc0, 0xc1, 0x5e, + 0xcd, 0xc2, 0xb5, 0x3d, 0x54, 0x84, 0x61, 0x3a, 0xd4, 0xa7, 0xa8, 0x99, 0x74, 0x75, 0x48, 0xe1, + 0xcf, 0x81, 0x66, 0x9e, 0xde, 0x71, 0x27, 0x02, 0xcd, 0x7c, 0xa0, 0x39, 0xc7, 0xae, 0xb8, 0x03, + 0xcd, 0xb9, 0x40, 0xb3, 0x40, 0x2f, 0xba, 0x93, 0x81, 0x66, 0x21, 0xd0, 0x2c, 0xd2, 0x0f, 0x39, + 0xa3, 0x81, 0x66, 0x31, 0xd0, 0x9c, 0xa7, 0x9f, 0x6e, 0x52, 0x81, 0xe6, 0x7c, 0xa0, 0xb9, 0x40, + 0xbf, 0xd8, 0x8c, 0x07, 0x9a, 0x0b, 0x81, 0xe6, 0x22, 0xfd, 0x4a, 0x83, 0x02, 0xcd, 0xc5, 0x40, + 0x73, 0x89, 0xfe, 0xfc, 0x69, 0x24, 0xd0, 0x5c, 0x42, 0x53, 0x30, 0xc2, 0x46, 0xf6, 0x24, 0xfd, + 0x94, 0x3f, 0x76, 0x75, 0x48, 0x11, 0x82, 0x50, 0xf7, 0x14, 0xfd, 0x89, 0xd3, 0x70, 0xa8, 0x7b, + 0x2a, 0xd4, 0xcd, 0xd3, 0xff, 0x69, 0x21, 0x87, 0xba, 0xf9, 0x50, 0x77, 0xae, 0x38, 0x4a, 0x32, + 0x24, 0xd4, 0x9d, 0x0b, 0x75, 0x0b, 0xc5, 0x02, 0x99, 0x81, 0x50, 0xb7, 0x10, 0xea, 0x16, 0x8b, + 0x63, 0x67, 0xa4, 0x99, 0x7c, 0xa8, 0x5b, 0x44, 0x4f, 0x40, 0xce, 0x6b, 0xef, 0xaa, 0xbc, 0xd6, + 0xd3, 0x9f, 0x52, 0xe5, 0xe6, 0x61, 0x96, 0xe4, 0x04, 0x9d, 0xd6, 0xab, 0x43, 0x0a, 0x78, 0xed, + 0x5d, 0x5e, 0x8a, 0x97, 0xf2, 0x40, 0x6f, 0xa0, 0x54, 0xfa, 0x0b, 0xe8, 0xd2, 0x1b, 0x12, 0x64, + 0xb7, 0x6f, 0xda, 0xf4, 0x43, 0xbe, 0xf7, 0x7f, 0x3c, 0xb9, 0xc2, 0xe9, 0x73, 0x0b, 0xf4, 0x5b, + 0x6b, 0xf6, 0xaa, 0xa4, 0x08, 0x41, 0xa8, 0x5b, 0x2c, 0x3e, 0x48, 0x07, 0x14, 0xe8, 0x16, 0xd1, + 0x1c, 0xe4, 0x23, 0x03, 0x9a, 0xa7, 0x3f, 0x72, 0xea, 0x1c, 0x91, 0xa4, 0xe4, 0xc2, 0x11, 0xcd, + 0x2f, 0xa5, 0x81, 0xa4, 0x3d, 0xf9, 0xc7, 0xbf, 0x69, 0x97, 0x3e, 0x97, 0x80, 0x1c, 0xbb, 0xb4, + 0xa6, 0xa3, 0x22, 0xaf, 0x62, 0xe7, 0x9a, 0x03, 0xee, 0xc6, 0x90, 0x22, 0x04, 0x48, 0x01, 0x60, + 0xa6, 0x24, 0xc3, 0x99, 0x27, 0x4b, 0x4f, 0xfe, 0xd3, 0x9b, 0xa7, 0x3f, 0x76, 0xe4, 0x0a, 0x22, + 0xb1, 0x9b, 0x63, 0x45, 0x7c, 0x76, 0xc7, 0xb0, 0xfc, 0xa7, 0xe6, 0x2f, 0x92, 0x00, 0x87, 0x2c, + 0x68, 0x07, 0x32, 0xcb, 0x9a, 0x47, 0x7f, 0x1e, 0x49, 0x5d, 0x4f, 0x2d, 0x5d, 0xf8, 0xf1, 0x9b, + 0xa7, 0xcf, 0xc5, 0x30, 0xf2, 0xfa, 0x3a, 0xbb, 0x71, 0x40, 0x58, 0xcf, 0x2f, 0x10, 0xf8, 0xd5, + 0x21, 0x25, 0xa0, 0x42, 0xf3, 0xc2, 0xd5, 0x4d, 0xad, 0xc5, 0x7e, 0xcd, 0x95, 0x5c, 0x92, 0x0f, + 0xdf, 0x3c, 0x9d, 0xdf, 0x38, 0x08, 0xe5, 0xa1, 0x2b, 0xe4, 0x69, 0x29, 0x03, 0xc3, 0xcc, 0xd5, + 0xa5, 0x95, 0xd7, 0xef, 0x4c, 0x0f, 0xbd, 0x71, 0x67, 0x7a, 0xe8, 0x1f, 0xef, 0x4c, 0x0f, 0xbd, + 0x75, 0x67, 0x5a, 0x7a, 0xf7, 0xce, 0xb4, 0xf4, 0xde, 0x9d, 0x69, 0xe9, 0xf6, 0xe1, 0xb4, 0xf4, + 0xd5, 0xc3, 0x69, 0xe9, 0xeb, 0x87, 0xd3, 0xd2, 0xb7, 0x0f, 0xa7, 0xa5, 0xd7, 0x0f, 0xa7, 0xa5, + 0x37, 0x0e, 0xa7, 0x87, 0xde, 0x3a, 0x9c, 0x96, 0x7e, 0x78, 0x38, 0x3d, 0xf4, 0xee, 0xe1, 0xb4, + 0xf4, 0xde, 0xe1, 0xf4, 0xd0, 0xed, 0x1f, 0x4c, 0x0f, 0xfd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x14, 0x89, 0x89, 0xba, 0x18, 0x37, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -4080,6 +4085,9 @@ return dAtA } func (m *Subby) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Sub != nil { @@ -4093,6 +4101,9 @@ } func (m *AllTypesOneOf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TestOneof != nil { @@ -4105,84 +4116,126 @@ } func (m *AllTypesOneOf_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *AllTypesOneOf_Field4) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field4)) return n } func (m *AllTypesOneOf_Field5) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field5)) return n } func (m *AllTypesOneOf_Field6) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field6)) return n } func (m *AllTypesOneOf_Field7) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field7)) return n } func (m *AllTypesOneOf_Field8) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field8)) return n } func (m *AllTypesOneOf_Field9) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field10) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field11) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field12) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field13) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *AllTypesOneOf_Field14) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field14) @@ -4190,6 +4243,9 @@ return n } func (m *AllTypesOneOf_Field15) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field15 != nil { @@ -4199,6 +4255,9 @@ return n } func (m *AllTypesOneOf_SubMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage != nil { @@ -4208,6 +4267,9 @@ return n } func (m *TwoOneofs) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.One != nil { @@ -4223,24 +4285,36 @@ } func (m *TwoOneofs_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *TwoOneofs_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *TwoOneofs_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *TwoOneofs_Field34) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field34) @@ -4248,6 +4322,9 @@ return n } func (m *TwoOneofs_Field35) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field35 != nil { @@ -4257,6 +4334,9 @@ return n } func (m *TwoOneofs_SubMessage2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage2 != nil { @@ -4266,6 +4346,9 @@ return n } func (m *CustomOneof) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Custom != nil { @@ -4278,6 +4361,9 @@ } func (m *CustomOneof_Stringy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Stringy) @@ -4285,6 +4371,9 @@ return n } func (m *CustomOneof_CustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.CustomType.Size() @@ -4292,12 +4381,18 @@ return n } func (m *CustomOneof_CastType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 + sovOne(uint64(m.CastType)) return n } func (m *CustomOneof_MyCustomName) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 + sovOne(uint64(m.MyCustomName)) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/combos/neither/one.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/combos/neither/one.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/combos/neither/one.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/combos/neither/one.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1056,269 +1056,274 @@ func OneDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4181 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0x24, 0xd7, - 0x55, 0x56, 0xcf, 0x8f, 0x34, 0x73, 0x66, 0x34, 0x6a, 0x5d, 0xc9, 0xbb, 0xb3, 0x72, 0x3c, 0xbb, - 0x3b, 0xb6, 0x63, 0xd9, 0x8e, 0x25, 0x5b, 0x2b, 0x69, 0x77, 0x67, 0x49, 0xcc, 0x48, 0x9a, 0xd5, - 0xca, 0x48, 0x1a, 0xa5, 0x25, 0xc5, 0x3f, 0x29, 0xaa, 0xab, 0xd5, 0x73, 0x35, 0xea, 0xdd, 0x9e, - 0xee, 0x4e, 0x77, 0xcf, 0xae, 0xb5, 0xc5, 0xc3, 0x52, 0xe6, 0xa7, 0x52, 0x14, 0x7f, 0x81, 0x2a, - 0x12, 0xe3, 0x18, 0x42, 0x55, 0x70, 0x08, 0x7f, 0x09, 0x81, 0x90, 0xf0, 0xc4, 0x4b, 0xc0, 0x4f, - 0x94, 0xf3, 0x46, 0x51, 0x94, 0xcb, 0xab, 0xb8, 0x8a, 0x00, 0x86, 0x18, 0xf0, 0x83, 0x0b, 0xbf, - 0x50, 0xf7, 0xaf, 0xbb, 0xe7, 0x47, 0xdb, 0xa3, 0x14, 0x76, 0x9e, 0xa4, 0x3e, 0xe7, 0x7c, 0x5f, - 0x9f, 0x7b, 0xee, 0xb9, 0xe7, 0x9e, 0x7b, 0x7b, 0xe0, 0x47, 0x97, 0xe1, 0x5c, 0xd3, 0xb6, 0x9b, - 0x26, 0x9e, 0x75, 0x5c, 0xdb, 0xb7, 0xf7, 0xda, 0xfb, 0xb3, 0x0d, 0xec, 0xe9, 0xae, 0xe1, 0xf8, - 0xb6, 0x3b, 0x43, 0x65, 0x68, 0x8c, 0x59, 0xcc, 0x08, 0x8b, 0xf2, 0x06, 0x8c, 0x5f, 0x35, 0x4c, - 0xbc, 0x12, 0x18, 0x6e, 0x63, 0x1f, 0x5d, 0x82, 0xd4, 0xbe, 0x61, 0xe2, 0xa2, 0x74, 0x2e, 0x39, - 0x9d, 0x9b, 0x7b, 0x68, 0xa6, 0x0b, 0x34, 0xd3, 0x89, 0xd8, 0x22, 0x62, 0x85, 0x22, 0xca, 0x6f, - 0xa7, 0x60, 0xa2, 0x8f, 0x16, 0x21, 0x48, 0x59, 0x5a, 0x8b, 0x30, 0x4a, 0xd3, 0x59, 0x85, 0xfe, - 0x8f, 0x8a, 0x30, 0xe2, 0x68, 0xfa, 0x0d, 0xad, 0x89, 0x8b, 0x09, 0x2a, 0x16, 0x8f, 0xa8, 0x04, - 0xd0, 0xc0, 0x0e, 0xb6, 0x1a, 0xd8, 0xd2, 0x0f, 0x8b, 0xc9, 0x73, 0xc9, 0xe9, 0xac, 0x12, 0x91, - 0xa0, 0xc7, 0x61, 0xdc, 0x69, 0xef, 0x99, 0x86, 0xae, 0x46, 0xcc, 0xe0, 0x5c, 0x72, 0x3a, 0xad, - 0xc8, 0x4c, 0xb1, 0x12, 0x1a, 0x3f, 0x02, 0x63, 0xb7, 0xb0, 0x76, 0x23, 0x6a, 0x9a, 0xa3, 0xa6, - 0x05, 0x22, 0x8e, 0x18, 0x2e, 0x43, 0xbe, 0x85, 0x3d, 0x4f, 0x6b, 0x62, 0xd5, 0x3f, 0x74, 0x70, - 0x31, 0x45, 0x47, 0x7f, 0xae, 0x67, 0xf4, 0xdd, 0x23, 0xcf, 0x71, 0xd4, 0xce, 0xa1, 0x83, 0x51, - 0x15, 0xb2, 0xd8, 0x6a, 0xb7, 0x18, 0x43, 0xfa, 0x98, 0xf8, 0xd5, 0xac, 0x76, 0xab, 0x9b, 0x25, - 0x43, 0x60, 0x9c, 0x62, 0xc4, 0xc3, 0xee, 0x4d, 0x43, 0xc7, 0xc5, 0x61, 0x4a, 0xf0, 0x48, 0x0f, - 0xc1, 0x36, 0xd3, 0x77, 0x73, 0x08, 0x1c, 0x5a, 0x86, 0x2c, 0x7e, 0xd1, 0xc7, 0x96, 0x67, 0xd8, - 0x56, 0x71, 0x84, 0x92, 0x3c, 0xdc, 0x67, 0x16, 0xb1, 0xd9, 0xe8, 0xa6, 0x08, 0x71, 0x68, 0x11, - 0x46, 0x6c, 0xc7, 0x37, 0x6c, 0xcb, 0x2b, 0x66, 0xce, 0x49, 0xd3, 0xb9, 0xb9, 0x8f, 0xf5, 0x4d, - 0x84, 0x3a, 0xb3, 0x51, 0x84, 0x31, 0x5a, 0x03, 0xd9, 0xb3, 0xdb, 0xae, 0x8e, 0x55, 0xdd, 0x6e, - 0x60, 0xd5, 0xb0, 0xf6, 0xed, 0x62, 0x96, 0x12, 0x9c, 0xed, 0x1d, 0x08, 0x35, 0x5c, 0xb6, 0x1b, - 0x78, 0xcd, 0xda, 0xb7, 0x95, 0x82, 0xd7, 0xf1, 0x8c, 0x4e, 0xc1, 0xb0, 0x77, 0x68, 0xf9, 0xda, - 0x8b, 0xc5, 0x3c, 0xcd, 0x10, 0xfe, 0x54, 0xfe, 0xee, 0x30, 0x8c, 0x0d, 0x92, 0x62, 0x57, 0x20, - 0xbd, 0x4f, 0x46, 0x59, 0x4c, 0x9c, 0x24, 0x06, 0x0c, 0xd3, 0x19, 0xc4, 0xe1, 0x1f, 0x33, 0x88, - 0x55, 0xc8, 0x59, 0xd8, 0xf3, 0x71, 0x83, 0x65, 0x44, 0x72, 0xc0, 0x9c, 0x02, 0x06, 0xea, 0x4d, - 0xa9, 0xd4, 0x8f, 0x95, 0x52, 0xcf, 0xc1, 0x58, 0xe0, 0x92, 0xea, 0x6a, 0x56, 0x53, 0xe4, 0xe6, - 0x6c, 0x9c, 0x27, 0x33, 0x35, 0x81, 0x53, 0x08, 0x4c, 0x29, 0xe0, 0x8e, 0x67, 0xb4, 0x02, 0x60, - 0x5b, 0xd8, 0xde, 0x57, 0x1b, 0x58, 0x37, 0x8b, 0x99, 0x63, 0xa2, 0x54, 0x27, 0x26, 0x3d, 0x51, - 0xb2, 0x99, 0x54, 0x37, 0xd1, 0xe5, 0x30, 0xd5, 0x46, 0x8e, 0xc9, 0x94, 0x0d, 0xb6, 0xc8, 0x7a, - 0xb2, 0x6d, 0x17, 0x0a, 0x2e, 0x26, 0x79, 0x8f, 0x1b, 0x7c, 0x64, 0x59, 0xea, 0xc4, 0x4c, 0xec, - 0xc8, 0x14, 0x0e, 0x63, 0x03, 0x1b, 0x75, 0xa3, 0x8f, 0xe8, 0x41, 0x08, 0x04, 0x2a, 0x4d, 0x2b, - 0xa0, 0x55, 0x28, 0x2f, 0x84, 0x9b, 0x5a, 0x0b, 0x4f, 0xdd, 0x86, 0x42, 0x67, 0x78, 0xd0, 0x24, - 0xa4, 0x3d, 0x5f, 0x73, 0x7d, 0x9a, 0x85, 0x69, 0x85, 0x3d, 0x20, 0x19, 0x92, 0xd8, 0x6a, 0xd0, - 0x2a, 0x97, 0x56, 0xc8, 0xbf, 0xe8, 0xa7, 0xc3, 0x01, 0x27, 0xe9, 0x80, 0x3f, 0xde, 0x3b, 0xa3, - 0x1d, 0xcc, 0xdd, 0xe3, 0x9e, 0xba, 0x08, 0xa3, 0x1d, 0x03, 0x18, 0xf4, 0xd5, 0xe5, 0x9f, 0x83, - 0xfb, 0xfa, 0x52, 0xa3, 0xe7, 0x60, 0xb2, 0x6d, 0x19, 0x96, 0x8f, 0x5d, 0xc7, 0xc5, 0x24, 0x63, - 0xd9, 0xab, 0x8a, 0xff, 0x32, 0x72, 0x4c, 0xce, 0xed, 0x46, 0xad, 0x19, 0x8b, 0x32, 0xd1, 0xee, - 0x15, 0x3e, 0x96, 0xcd, 0xfc, 0x70, 0x44, 0xbe, 0x73, 0xe7, 0xce, 0x9d, 0x44, 0xf9, 0x8b, 0xc3, - 0x30, 0xd9, 0x6f, 0xcd, 0xf4, 0x5d, 0xbe, 0xa7, 0x60, 0xd8, 0x6a, 0xb7, 0xf6, 0xb0, 0x4b, 0x83, - 0x94, 0x56, 0xf8, 0x13, 0xaa, 0x42, 0xda, 0xd4, 0xf6, 0xb0, 0x59, 0x4c, 0x9d, 0x93, 0xa6, 0x0b, - 0x73, 0x8f, 0x0f, 0xb4, 0x2a, 0x67, 0xd6, 0x09, 0x44, 0x61, 0x48, 0xf4, 0x29, 0x48, 0xf1, 0x12, - 0x4d, 0x18, 0x1e, 0x1b, 0x8c, 0x81, 0xac, 0x25, 0x85, 0xe2, 0xd0, 0xfd, 0x90, 0x25, 0x7f, 0x59, - 0x6e, 0x0c, 0x53, 0x9f, 0x33, 0x44, 0x40, 0xf2, 0x02, 0x4d, 0x41, 0x86, 0x2e, 0x93, 0x06, 0x16, - 0x5b, 0x5b, 0xf0, 0x4c, 0x12, 0xab, 0x81, 0xf7, 0xb5, 0xb6, 0xe9, 0xab, 0x37, 0x35, 0xb3, 0x8d, - 0x69, 0xc2, 0x67, 0x95, 0x3c, 0x17, 0x7e, 0x86, 0xc8, 0xd0, 0x59, 0xc8, 0xb1, 0x55, 0x65, 0x58, - 0x0d, 0xfc, 0x22, 0xad, 0x9e, 0x69, 0x85, 0x2d, 0xb4, 0x35, 0x22, 0x21, 0xaf, 0xbf, 0xee, 0xd9, - 0x96, 0x48, 0x4d, 0xfa, 0x0a, 0x22, 0xa0, 0xaf, 0xbf, 0xd8, 0x5d, 0xb8, 0x1f, 0xe8, 0x3f, 0xbc, - 0xee, 0x9c, 0x2a, 0x7f, 0x3b, 0x01, 0x29, 0x5a, 0x2f, 0xc6, 0x20, 0xb7, 0xf3, 0xfc, 0x56, 0x4d, - 0x5d, 0xa9, 0xef, 0x2e, 0xad, 0xd7, 0x64, 0x09, 0x15, 0x00, 0xa8, 0xe0, 0xea, 0x7a, 0xbd, 0xba, - 0x23, 0x27, 0x82, 0xe7, 0xb5, 0xcd, 0x9d, 0xc5, 0x79, 0x39, 0x19, 0x00, 0x76, 0x99, 0x20, 0x15, - 0x35, 0xb8, 0x30, 0x27, 0xa7, 0x91, 0x0c, 0x79, 0x46, 0xb0, 0xf6, 0x5c, 0x6d, 0x65, 0x71, 0x5e, - 0x1e, 0xee, 0x94, 0x5c, 0x98, 0x93, 0x47, 0xd0, 0x28, 0x64, 0xa9, 0x64, 0xa9, 0x5e, 0x5f, 0x97, - 0x33, 0x01, 0xe7, 0xf6, 0x8e, 0xb2, 0xb6, 0xb9, 0x2a, 0x67, 0x03, 0xce, 0x55, 0xa5, 0xbe, 0xbb, - 0x25, 0x43, 0xc0, 0xb0, 0x51, 0xdb, 0xde, 0xae, 0xae, 0xd6, 0xe4, 0x5c, 0x60, 0xb1, 0xf4, 0xfc, - 0x4e, 0x6d, 0x5b, 0xce, 0x77, 0xb8, 0x75, 0x61, 0x4e, 0x1e, 0x0d, 0x5e, 0x51, 0xdb, 0xdc, 0xdd, - 0x90, 0x0b, 0x68, 0x1c, 0x46, 0xd9, 0x2b, 0x84, 0x13, 0x63, 0x5d, 0xa2, 0xc5, 0x79, 0x59, 0x0e, - 0x1d, 0x61, 0x2c, 0xe3, 0x1d, 0x82, 0xc5, 0x79, 0x19, 0x95, 0x97, 0x21, 0x4d, 0xb3, 0x0b, 0x21, - 0x28, 0xac, 0x57, 0x97, 0x6a, 0xeb, 0x6a, 0x7d, 0x6b, 0x67, 0xad, 0xbe, 0x59, 0x5d, 0x97, 0xa5, - 0x50, 0xa6, 0xd4, 0x3e, 0xbd, 0xbb, 0xa6, 0xd4, 0x56, 0xe4, 0x44, 0x54, 0xb6, 0x55, 0xab, 0xee, - 0xd4, 0x56, 0xe4, 0x64, 0x59, 0x87, 0xc9, 0x7e, 0x75, 0xb2, 0xef, 0xca, 0x88, 0x4c, 0x71, 0xe2, - 0x98, 0x29, 0xa6, 0x5c, 0x3d, 0x53, 0xfc, 0x83, 0x04, 0x4c, 0xf4, 0xd9, 0x2b, 0xfa, 0xbe, 0xe4, - 0x69, 0x48, 0xb3, 0x14, 0x65, 0xbb, 0xe7, 0xa3, 0x7d, 0x37, 0x1d, 0x9a, 0xb0, 0x3d, 0x3b, 0x28, - 0xc5, 0x45, 0x3b, 0x88, 0xe4, 0x31, 0x1d, 0x04, 0xa1, 0xe8, 0xa9, 0xe9, 0x3f, 0xdb, 0x53, 0xd3, - 0xd9, 0xb6, 0xb7, 0x38, 0xc8, 0xb6, 0x47, 0x65, 0x27, 0xab, 0xed, 0xe9, 0x3e, 0xb5, 0xfd, 0x0a, - 0x8c, 0xf7, 0x10, 0x0d, 0x5c, 0x63, 0x5f, 0x92, 0xa0, 0x78, 0x5c, 0x70, 0x62, 0x2a, 0x5d, 0xa2, - 0xa3, 0xd2, 0x5d, 0xe9, 0x8e, 0xe0, 0xf9, 0xe3, 0x27, 0xa1, 0x67, 0xae, 0x5f, 0x93, 0xe0, 0x54, - 0xff, 0x4e, 0xb1, 0xaf, 0x0f, 0x9f, 0x82, 0xe1, 0x16, 0xf6, 0x0f, 0x6c, 0xd1, 0x2d, 0x7d, 0xbc, - 0xcf, 0x1e, 0x4c, 0xd4, 0xdd, 0x93, 0xcd, 0x51, 0xd1, 0x4d, 0x3c, 0x79, 0x5c, 0xbb, 0xc7, 0xbc, - 0xe9, 0xf1, 0xf4, 0xf3, 0x09, 0xb8, 0xaf, 0x2f, 0x79, 0x5f, 0x47, 0x1f, 0x00, 0x30, 0x2c, 0xa7, - 0xed, 0xb3, 0x8e, 0x88, 0x15, 0xd8, 0x2c, 0x95, 0xd0, 0xe2, 0x45, 0x8a, 0x67, 0xdb, 0x0f, 0xf4, - 0x49, 0xaa, 0x07, 0x26, 0xa2, 0x06, 0x97, 0x42, 0x47, 0x53, 0xd4, 0xd1, 0xd2, 0x31, 0x23, 0xed, - 0x49, 0xcc, 0x27, 0x41, 0xd6, 0x4d, 0x03, 0x5b, 0xbe, 0xea, 0xf9, 0x2e, 0xd6, 0x5a, 0x86, 0xd5, - 0xa4, 0x3b, 0x48, 0xa6, 0x92, 0xde, 0xd7, 0x4c, 0x0f, 0x2b, 0x63, 0x4c, 0xbd, 0x2d, 0xb4, 0x04, - 0x41, 0x13, 0xc8, 0x8d, 0x20, 0x86, 0x3b, 0x10, 0x4c, 0x1d, 0x20, 0xca, 0xdf, 0xca, 0x40, 0x2e, - 0xd2, 0x57, 0xa3, 0xf3, 0x90, 0xbf, 0xae, 0xdd, 0xd4, 0x54, 0x71, 0x56, 0x62, 0x91, 0xc8, 0x11, - 0xd9, 0x16, 0x3f, 0x2f, 0x3d, 0x09, 0x93, 0xd4, 0xc4, 0x6e, 0xfb, 0xd8, 0x55, 0x75, 0x53, 0xf3, - 0x3c, 0x1a, 0xb4, 0x0c, 0x35, 0x45, 0x44, 0x57, 0x27, 0xaa, 0x65, 0xa1, 0x41, 0x0b, 0x30, 0x41, - 0x11, 0xad, 0xb6, 0xe9, 0x1b, 0x8e, 0x89, 0x55, 0x72, 0x7a, 0xf3, 0xe8, 0x4e, 0x12, 0x78, 0x36, - 0x4e, 0x2c, 0x36, 0xb8, 0x01, 0xf1, 0xc8, 0x43, 0x2b, 0xf0, 0x00, 0x85, 0x35, 0xb1, 0x85, 0x5d, - 0xcd, 0xc7, 0x2a, 0xfe, 0x5c, 0x5b, 0x33, 0x3d, 0x55, 0xb3, 0x1a, 0xea, 0x81, 0xe6, 0x1d, 0x14, - 0x27, 0x09, 0xc1, 0x52, 0xa2, 0x28, 0x29, 0x67, 0x88, 0xe1, 0x2a, 0xb7, 0xab, 0x51, 0xb3, 0xaa, - 0xd5, 0xb8, 0xa6, 0x79, 0x07, 0xa8, 0x02, 0xa7, 0x28, 0x8b, 0xe7, 0xbb, 0x86, 0xd5, 0x54, 0xf5, - 0x03, 0xac, 0xdf, 0x50, 0xdb, 0xfe, 0xfe, 0xa5, 0xe2, 0xfd, 0xd1, 0xf7, 0x53, 0x0f, 0xb7, 0xa9, - 0xcd, 0x32, 0x31, 0xd9, 0xf5, 0xf7, 0x2f, 0xa1, 0x6d, 0xc8, 0x93, 0xc9, 0x68, 0x19, 0xb7, 0xb1, - 0xba, 0x6f, 0xbb, 0x74, 0x6b, 0x2c, 0xf4, 0x29, 0x4d, 0x91, 0x08, 0xce, 0xd4, 0x39, 0x60, 0xc3, - 0x6e, 0xe0, 0x4a, 0x7a, 0x7b, 0xab, 0x56, 0x5b, 0x51, 0x72, 0x82, 0xe5, 0xaa, 0xed, 0x92, 0x84, - 0x6a, 0xda, 0x41, 0x80, 0x73, 0x2c, 0xa1, 0x9a, 0xb6, 0x08, 0xef, 0x02, 0x4c, 0xe8, 0x3a, 0x1b, - 0xb3, 0xa1, 0xab, 0xfc, 0x8c, 0xe5, 0x15, 0xe5, 0x8e, 0x60, 0xe9, 0xfa, 0x2a, 0x33, 0xe0, 0x39, - 0xee, 0xa1, 0xcb, 0x70, 0x5f, 0x18, 0xac, 0x28, 0x70, 0xbc, 0x67, 0x94, 0xdd, 0xd0, 0x05, 0x98, - 0x70, 0x0e, 0x7b, 0x81, 0xa8, 0xe3, 0x8d, 0xce, 0x61, 0x37, 0xec, 0x22, 0x4c, 0x3a, 0x07, 0x4e, - 0x2f, 0xee, 0xb1, 0x28, 0x0e, 0x39, 0x07, 0x4e, 0x37, 0xf0, 0x61, 0x7a, 0xe0, 0x76, 0xb1, 0xae, - 0xf9, 0xb8, 0x51, 0x3c, 0x1d, 0x35, 0x8f, 0x28, 0xd0, 0x2c, 0xc8, 0xba, 0xae, 0x62, 0x4b, 0xdb, - 0x33, 0xb1, 0xaa, 0xb9, 0xd8, 0xd2, 0xbc, 0xe2, 0xd9, 0xa8, 0x71, 0x41, 0xd7, 0x6b, 0x54, 0x5b, - 0xa5, 0x4a, 0xf4, 0x18, 0x8c, 0xdb, 0x7b, 0xd7, 0x75, 0x96, 0x92, 0xaa, 0xe3, 0xe2, 0x7d, 0xe3, - 0xc5, 0xe2, 0x43, 0x34, 0xbe, 0x63, 0x44, 0x41, 0x13, 0x72, 0x8b, 0x8a, 0xd1, 0xa3, 0x20, 0xeb, - 0xde, 0x81, 0xe6, 0x3a, 0xb4, 0x26, 0x7b, 0x8e, 0xa6, 0xe3, 0xe2, 0xc3, 0xcc, 0x94, 0xc9, 0x37, - 0x85, 0x98, 0x2c, 0x09, 0xef, 0x96, 0xb1, 0xef, 0x0b, 0xc6, 0x47, 0xd8, 0x92, 0xa0, 0x32, 0xce, - 0x36, 0x0d, 0x32, 0x09, 0x45, 0xc7, 0x8b, 0xa7, 0xa9, 0x59, 0xc1, 0x39, 0x70, 0xa2, 0xef, 0x7d, - 0x10, 0x46, 0x89, 0x65, 0xf8, 0xd2, 0x47, 0x59, 0x43, 0xe6, 0x1c, 0x44, 0xde, 0xf8, 0xa1, 0xf5, - 0xc6, 0xe5, 0x0a, 0xe4, 0xa3, 0xf9, 0x89, 0xb2, 0xc0, 0x32, 0x54, 0x96, 0x48, 0xb3, 0xb2, 0x5c, - 0x5f, 0x21, 0x6d, 0xc6, 0x0b, 0x35, 0x39, 0x41, 0xda, 0x9d, 0xf5, 0xb5, 0x9d, 0x9a, 0xaa, 0xec, - 0x6e, 0xee, 0xac, 0x6d, 0xd4, 0xe4, 0x64, 0xb4, 0xaf, 0xfe, 0x5e, 0x02, 0x0a, 0x9d, 0x47, 0x24, - 0xf4, 0x53, 0x70, 0x5a, 0xdc, 0x67, 0x78, 0xd8, 0x57, 0x6f, 0x19, 0x2e, 0x5d, 0x32, 0x2d, 0x8d, - 0x6d, 0x5f, 0xc1, 0xa4, 0x4d, 0x72, 0xab, 0x6d, 0xec, 0x3f, 0x6b, 0xb8, 0x64, 0x41, 0xb4, 0x34, - 0x1f, 0xad, 0xc3, 0x59, 0xcb, 0x56, 0x3d, 0x5f, 0xb3, 0x1a, 0x9a, 0xdb, 0x50, 0xc3, 0x9b, 0x24, - 0x55, 0xd3, 0x75, 0xec, 0x79, 0x36, 0xdb, 0xaa, 0x02, 0x96, 0x8f, 0x59, 0xf6, 0x36, 0x37, 0x0e, - 0x6b, 0x78, 0x95, 0x9b, 0x76, 0x25, 0x58, 0xf2, 0xb8, 0x04, 0xbb, 0x1f, 0xb2, 0x2d, 0xcd, 0x51, - 0xb1, 0xe5, 0xbb, 0x87, 0xb4, 0x31, 0xce, 0x28, 0x99, 0x96, 0xe6, 0xd4, 0xc8, 0xf3, 0x47, 0x73, - 0x3e, 0xf9, 0xe7, 0x24, 0xe4, 0xa3, 0xcd, 0x31, 0x39, 0x6b, 0xe8, 0x74, 0x1f, 0x91, 0x68, 0xa5, - 0x79, 0xf0, 0x9e, 0xad, 0xf4, 0xcc, 0x32, 0xd9, 0x60, 0x2a, 0xc3, 0xac, 0x65, 0x55, 0x18, 0x92, - 0x6c, 0xee, 0xa4, 0xb6, 0x60, 0xd6, 0x22, 0x64, 0x14, 0xfe, 0x84, 0x56, 0x61, 0xf8, 0xba, 0x47, - 0xb9, 0x87, 0x29, 0xf7, 0x43, 0xf7, 0xe6, 0x7e, 0x66, 0x9b, 0x92, 0x67, 0x9f, 0xd9, 0x56, 0x37, - 0xeb, 0xca, 0x46, 0x75, 0x5d, 0xe1, 0x70, 0x74, 0x06, 0x52, 0xa6, 0x76, 0xfb, 0xb0, 0x73, 0x2b, - 0xa2, 0xa2, 0x41, 0x03, 0x7f, 0x06, 0x52, 0xb7, 0xb0, 0x76, 0xa3, 0x73, 0x03, 0xa0, 0xa2, 0x0f, - 0x31, 0xf5, 0x67, 0x21, 0x4d, 0xe3, 0x85, 0x00, 0x78, 0xc4, 0xe4, 0x21, 0x94, 0x81, 0xd4, 0x72, - 0x5d, 0x21, 0xe9, 0x2f, 0x43, 0x9e, 0x49, 0xd5, 0xad, 0xb5, 0xda, 0x72, 0x4d, 0x4e, 0x94, 0x17, - 0x60, 0x98, 0x05, 0x81, 0x2c, 0x8d, 0x20, 0x0c, 0xf2, 0x10, 0x7f, 0xe4, 0x1c, 0x92, 0xd0, 0xee, - 0x6e, 0x2c, 0xd5, 0x14, 0x39, 0x11, 0x9d, 0x5e, 0x0f, 0xf2, 0xd1, 0xbe, 0xf8, 0xa3, 0xc9, 0xa9, - 0xbf, 0x91, 0x20, 0x17, 0xe9, 0x73, 0x49, 0x83, 0xa2, 0x99, 0xa6, 0x7d, 0x4b, 0xd5, 0x4c, 0x43, - 0xf3, 0x78, 0x52, 0x00, 0x15, 0x55, 0x89, 0x64, 0xd0, 0x49, 0xfb, 0x48, 0x9c, 0x7f, 0x55, 0x02, - 0xb9, 0xbb, 0xc5, 0xec, 0x72, 0x50, 0xfa, 0x89, 0x3a, 0xf8, 0x8a, 0x04, 0x85, 0xce, 0xbe, 0xb2, - 0xcb, 0xbd, 0xf3, 0x3f, 0x51, 0xf7, 0xde, 0x4a, 0xc0, 0x68, 0x47, 0x37, 0x39, 0xa8, 0x77, 0x9f, - 0x83, 0x71, 0xa3, 0x81, 0x5b, 0x8e, 0xed, 0x63, 0x4b, 0x3f, 0x54, 0x4d, 0x7c, 0x13, 0x9b, 0xc5, - 0x32, 0x2d, 0x14, 0xb3, 0xf7, 0xee, 0x57, 0x67, 0xd6, 0x42, 0xdc, 0x3a, 0x81, 0x55, 0x26, 0xd6, - 0x56, 0x6a, 0x1b, 0x5b, 0xf5, 0x9d, 0xda, 0xe6, 0xf2, 0xf3, 0xea, 0xee, 0xe6, 0xcf, 0x6c, 0xd6, - 0x9f, 0xdd, 0x54, 0x64, 0xa3, 0xcb, 0xec, 0x43, 0x5c, 0xea, 0x5b, 0x20, 0x77, 0x3b, 0x85, 0x4e, - 0x43, 0x3f, 0xb7, 0xe4, 0x21, 0x34, 0x01, 0x63, 0x9b, 0x75, 0x75, 0x7b, 0x6d, 0xa5, 0xa6, 0xd6, - 0xae, 0x5e, 0xad, 0x2d, 0xef, 0x6c, 0xb3, 0x1b, 0x88, 0xc0, 0x7a, 0xa7, 0x73, 0x51, 0xbf, 0x9c, - 0x84, 0x89, 0x3e, 0x9e, 0xa0, 0x2a, 0x3f, 0x3b, 0xb0, 0xe3, 0xcc, 0x13, 0x83, 0x78, 0x3f, 0x43, - 0xb6, 0xfc, 0x2d, 0xcd, 0xf5, 0xf9, 0x51, 0xe3, 0x51, 0x20, 0x51, 0xb2, 0x7c, 0x63, 0xdf, 0xc0, - 0x2e, 0xbf, 0xb0, 0x61, 0x07, 0x8a, 0xb1, 0x50, 0xce, 0xee, 0x6c, 0x3e, 0x01, 0xc8, 0xb1, 0x3d, - 0xc3, 0x37, 0x6e, 0x62, 0xd5, 0xb0, 0xc4, 0xed, 0x0e, 0x39, 0x60, 0xa4, 0x14, 0x59, 0x68, 0xd6, - 0x2c, 0x3f, 0xb0, 0xb6, 0x70, 0x53, 0xeb, 0xb2, 0x26, 0x05, 0x3c, 0xa9, 0xc8, 0x42, 0x13, 0x58, - 0x9f, 0x87, 0x7c, 0xc3, 0x6e, 0x93, 0xae, 0x8b, 0xd9, 0x91, 0xfd, 0x42, 0x52, 0x72, 0x4c, 0x16, - 0x98, 0xf0, 0x7e, 0x3a, 0xbc, 0x56, 0xca, 0x2b, 0x39, 0x26, 0x63, 0x26, 0x8f, 0xc0, 0x98, 0xd6, - 0x6c, 0xba, 0x84, 0x5c, 0x10, 0xb1, 0x13, 0x42, 0x21, 0x10, 0x53, 0xc3, 0xa9, 0x67, 0x20, 0x23, - 0xe2, 0x40, 0xb6, 0x64, 0x12, 0x09, 0xd5, 0x61, 0xc7, 0xde, 0xc4, 0x74, 0x56, 0xc9, 0x58, 0x42, - 0x79, 0x1e, 0xf2, 0x86, 0xa7, 0x86, 0xb7, 0xe4, 0x89, 0x73, 0x89, 0xe9, 0x8c, 0x92, 0x33, 0xbc, - 0xe0, 0x86, 0xb1, 0xfc, 0x5a, 0x02, 0x0a, 0x9d, 0xb7, 0xfc, 0x68, 0x05, 0x32, 0xa6, 0xad, 0x6b, - 0x34, 0xb5, 0xd8, 0x27, 0xa6, 0xe9, 0x98, 0x0f, 0x03, 0x33, 0xeb, 0xdc, 0x5e, 0x09, 0x90, 0x53, - 0xff, 0x20, 0x41, 0x46, 0x88, 0xd1, 0x29, 0x48, 0x39, 0x9a, 0x7f, 0x40, 0xe9, 0xd2, 0x4b, 0x09, - 0x59, 0x52, 0xe8, 0x33, 0x91, 0x7b, 0x8e, 0x66, 0xd1, 0x14, 0xe0, 0x72, 0xf2, 0x4c, 0xe6, 0xd5, - 0xc4, 0x5a, 0x83, 0x1e, 0x3f, 0xec, 0x56, 0x0b, 0x5b, 0xbe, 0x27, 0xe6, 0x95, 0xcb, 0x97, 0xb9, - 0x18, 0x3d, 0x0e, 0xe3, 0xbe, 0xab, 0x19, 0x66, 0x87, 0x6d, 0x8a, 0xda, 0xca, 0x42, 0x11, 0x18, - 0x57, 0xe0, 0x8c, 0xe0, 0x6d, 0x60, 0x5f, 0xd3, 0x0f, 0x70, 0x23, 0x04, 0x0d, 0xd3, 0x6b, 0x86, - 0xd3, 0xdc, 0x60, 0x85, 0xeb, 0x05, 0xb6, 0xfc, 0x7d, 0x09, 0xc6, 0xc5, 0x81, 0xa9, 0x11, 0x04, - 0x6b, 0x03, 0x40, 0xb3, 0x2c, 0xdb, 0x8f, 0x86, 0xab, 0x37, 0x95, 0x7b, 0x70, 0x33, 0xd5, 0x00, - 0xa4, 0x44, 0x08, 0xa6, 0x5a, 0x00, 0xa1, 0xe6, 0xd8, 0xb0, 0x9d, 0x85, 0x1c, 0xff, 0x84, 0x43, - 0xbf, 0x03, 0xb2, 0x23, 0x36, 0x30, 0x11, 0x39, 0x59, 0xa1, 0x49, 0x48, 0xef, 0xe1, 0xa6, 0x61, - 0xf1, 0x8b, 0x59, 0xf6, 0x20, 0x2e, 0x42, 0x52, 0xc1, 0x45, 0xc8, 0xd2, 0x67, 0x61, 0x42, 0xb7, - 0x5b, 0xdd, 0xee, 0x2e, 0xc9, 0x5d, 0xc7, 0x7c, 0xef, 0x9a, 0xf4, 0x02, 0x84, 0x2d, 0xe6, 0xfb, - 0x92, 0xf4, 0x07, 0x89, 0xe4, 0xea, 0xd6, 0xd2, 0xd7, 0x13, 0x53, 0xab, 0x0c, 0xba, 0x25, 0x46, - 0xaa, 0xe0, 0x7d, 0x13, 0xeb, 0xc4, 0x7b, 0xf8, 0xea, 0x34, 0x3c, 0xd1, 0x34, 0xfc, 0x83, 0xf6, - 0xde, 0x8c, 0x6e, 0xb7, 0x66, 0x9b, 0x76, 0xd3, 0x0e, 0x3f, 0x7d, 0x92, 0x27, 0xfa, 0x40, 0xff, - 0xe3, 0x9f, 0x3f, 0xb3, 0x81, 0x74, 0x2a, 0xf6, 0x5b, 0x69, 0x65, 0x13, 0x26, 0xb8, 0xb1, 0x4a, - 0xbf, 0xbf, 0xb0, 0x53, 0x04, 0xba, 0xe7, 0x1d, 0x56, 0xf1, 0x9b, 0x6f, 0xd3, 0xed, 0x5a, 0x19, - 0xe7, 0x50, 0xa2, 0x63, 0x07, 0x8d, 0x8a, 0x02, 0xf7, 0x75, 0xf0, 0xb1, 0xa5, 0x89, 0xdd, 0x18, - 0xc6, 0xef, 0x71, 0xc6, 0x89, 0x08, 0xe3, 0x36, 0x87, 0x56, 0x96, 0x61, 0xf4, 0x24, 0x5c, 0x7f, - 0xc7, 0xb9, 0xf2, 0x38, 0x4a, 0xb2, 0x0a, 0x63, 0x94, 0x44, 0x6f, 0x7b, 0xbe, 0xdd, 0xa2, 0x75, - 0xef, 0xde, 0x34, 0x7f, 0xff, 0x36, 0x5b, 0x2b, 0x05, 0x02, 0x5b, 0x0e, 0x50, 0x95, 0x0a, 0xd0, - 0x4f, 0x4e, 0x0d, 0xac, 0x9b, 0x31, 0x0c, 0xaf, 0x73, 0x47, 0x02, 0xfb, 0xca, 0x67, 0x60, 0x92, - 0xfc, 0x4f, 0xcb, 0x52, 0xd4, 0x93, 0xf8, 0x0b, 0xaf, 0xe2, 0xf7, 0x5f, 0x62, 0xcb, 0x71, 0x22, - 0x20, 0x88, 0xf8, 0x14, 0x99, 0xc5, 0x26, 0xf6, 0x7d, 0xec, 0x7a, 0xaa, 0x66, 0xf6, 0x73, 0x2f, - 0x72, 0x63, 0x50, 0xfc, 0xd2, 0x3b, 0x9d, 0xb3, 0xb8, 0xca, 0x90, 0x55, 0xd3, 0xac, 0xec, 0xc2, - 0xe9, 0x3e, 0x59, 0x31, 0x00, 0xe7, 0xcb, 0x9c, 0x73, 0xb2, 0x27, 0x33, 0x08, 0xed, 0x16, 0x08, - 0x79, 0x30, 0x97, 0x03, 0x70, 0xfe, 0x2e, 0xe7, 0x44, 0x1c, 0x2b, 0xa6, 0x94, 0x30, 0x3e, 0x03, - 0xe3, 0x37, 0xb1, 0xbb, 0x67, 0x7b, 0xfc, 0x96, 0x66, 0x00, 0xba, 0x57, 0x38, 0xdd, 0x18, 0x07, - 0xd2, 0x6b, 0x1b, 0xc2, 0x75, 0x19, 0x32, 0xfb, 0x9a, 0x8e, 0x07, 0xa0, 0xf8, 0x32, 0xa7, 0x18, - 0x21, 0xf6, 0x04, 0x5a, 0x85, 0x7c, 0xd3, 0xe6, 0x3b, 0x53, 0x3c, 0xfc, 0x55, 0x0e, 0xcf, 0x09, - 0x0c, 0xa7, 0x70, 0x6c, 0xa7, 0x6d, 0x92, 0x6d, 0x2b, 0x9e, 0xe2, 0xf7, 0x04, 0x85, 0xc0, 0x70, - 0x8a, 0x13, 0x84, 0xf5, 0xf7, 0x05, 0x85, 0x17, 0x89, 0xe7, 0xd3, 0x90, 0xb3, 0x2d, 0xf3, 0xd0, - 0xb6, 0x06, 0x71, 0xe2, 0x2b, 0x9c, 0x01, 0x38, 0x84, 0x10, 0x5c, 0x81, 0xec, 0xa0, 0x13, 0xf1, - 0xd5, 0x77, 0xc4, 0xf2, 0x10, 0x33, 0xb0, 0x0a, 0x63, 0xa2, 0x40, 0x19, 0xb6, 0x35, 0x00, 0xc5, - 0x1f, 0x72, 0x8a, 0x42, 0x04, 0xc6, 0x87, 0xe1, 0x63, 0xcf, 0x6f, 0xe2, 0x41, 0x48, 0x5e, 0x13, - 0xc3, 0xe0, 0x10, 0x1e, 0xca, 0x3d, 0x6c, 0xe9, 0x07, 0x83, 0x31, 0x7c, 0x4d, 0x84, 0x52, 0x60, - 0x08, 0xc5, 0x32, 0x8c, 0xb6, 0x34, 0xd7, 0x3b, 0xd0, 0xcc, 0x81, 0xa6, 0xe3, 0x8f, 0x38, 0x47, - 0x3e, 0x00, 0xf1, 0x88, 0xb4, 0xad, 0x93, 0xd0, 0x7c, 0x5d, 0x44, 0x24, 0x02, 0xe3, 0x4b, 0xcf, - 0xf3, 0xe9, 0x95, 0xd6, 0x49, 0xd8, 0xfe, 0x58, 0x2c, 0x3d, 0x86, 0xdd, 0x88, 0x32, 0x5e, 0x81, - 0xac, 0x67, 0xdc, 0x1e, 0x88, 0xe6, 0x4f, 0xc4, 0x4c, 0x53, 0x00, 0x01, 0x3f, 0x0f, 0x67, 0xfa, - 0x6e, 0x13, 0x03, 0x90, 0xfd, 0x29, 0x27, 0x3b, 0xd5, 0x67, 0xab, 0xe0, 0x25, 0xe1, 0xa4, 0x94, - 0x7f, 0x26, 0x4a, 0x02, 0xee, 0xe2, 0xda, 0x22, 0x67, 0x05, 0x4f, 0xdb, 0x3f, 0x59, 0xd4, 0xfe, - 0x5c, 0x44, 0x8d, 0x61, 0x3b, 0xa2, 0xb6, 0x03, 0xa7, 0x38, 0xe3, 0xc9, 0xe6, 0xf5, 0x1b, 0xa2, - 0xb0, 0x32, 0xf4, 0x6e, 0xe7, 0xec, 0x7e, 0x16, 0xa6, 0x82, 0x70, 0x8a, 0xa6, 0xd4, 0x53, 0x5b, - 0x9a, 0x33, 0x00, 0xf3, 0x37, 0x39, 0xb3, 0xa8, 0xf8, 0x41, 0x57, 0xeb, 0x6d, 0x68, 0x0e, 0x21, - 0x7f, 0x0e, 0x8a, 0x82, 0xbc, 0x6d, 0xb9, 0x58, 0xb7, 0x9b, 0x96, 0x71, 0x1b, 0x37, 0x06, 0xa0, - 0xfe, 0x8b, 0xae, 0xa9, 0xda, 0x8d, 0xc0, 0x09, 0xf3, 0x1a, 0xc8, 0x41, 0xaf, 0xa2, 0x1a, 0x2d, - 0xc7, 0x76, 0xfd, 0x18, 0xc6, 0x6f, 0x89, 0x99, 0x0a, 0x70, 0x6b, 0x14, 0x56, 0xa9, 0x41, 0x81, - 0x3e, 0x0e, 0x9a, 0x92, 0x7f, 0xc9, 0x89, 0x46, 0x43, 0x14, 0x2f, 0x1c, 0xba, 0xdd, 0x72, 0x34, - 0x77, 0x90, 0xfa, 0xf7, 0x57, 0xa2, 0x70, 0x70, 0x08, 0x2f, 0x1c, 0xfe, 0xa1, 0x83, 0xc9, 0x6e, - 0x3f, 0x00, 0xc3, 0xb7, 0x45, 0xe1, 0x10, 0x18, 0x4e, 0x21, 0x1a, 0x86, 0x01, 0x28, 0xfe, 0x5a, - 0x50, 0x08, 0x0c, 0xa1, 0xf8, 0x74, 0xb8, 0xd1, 0xba, 0xb8, 0x69, 0x78, 0xbe, 0xcb, 0x5a, 0xe1, - 0x7b, 0x53, 0x7d, 0xe7, 0x9d, 0xce, 0x26, 0x4c, 0x89, 0x40, 0x49, 0x25, 0xe2, 0x57, 0xa8, 0xf4, - 0xa4, 0x14, 0xef, 0xd8, 0x77, 0x45, 0x25, 0x8a, 0xc0, 0xd8, 0xfa, 0x1c, 0xeb, 0xea, 0x55, 0x50, - 0xdc, 0x0f, 0x61, 0x8a, 0x3f, 0xff, 0x1e, 0xe7, 0xea, 0x6c, 0x55, 0x2a, 0xeb, 0x24, 0x81, 0x3a, - 0x1b, 0x8a, 0x78, 0xb2, 0x97, 0xde, 0x0b, 0x72, 0xa8, 0xa3, 0x9f, 0xa8, 0x5c, 0x85, 0xd1, 0x8e, - 0x66, 0x22, 0x9e, 0xea, 0x17, 0x38, 0x55, 0x3e, 0xda, 0x4b, 0x54, 0x16, 0x20, 0x45, 0x1a, 0x83, - 0x78, 0xf8, 0x2f, 0x72, 0x38, 0x35, 0xaf, 0x7c, 0x12, 0x32, 0xa2, 0x21, 0x88, 0x87, 0xfe, 0x12, - 0x87, 0x06, 0x10, 0x02, 0x17, 0xcd, 0x40, 0x3c, 0xfc, 0x97, 0x05, 0x5c, 0x40, 0x08, 0x7c, 0xf0, - 0x10, 0xfe, 0xed, 0xaf, 0xa4, 0x78, 0x41, 0x17, 0xb1, 0xbb, 0x02, 0x23, 0xbc, 0x0b, 0x88, 0x47, - 0x7f, 0x9e, 0xbf, 0x5c, 0x20, 0x2a, 0x17, 0x21, 0x3d, 0x60, 0xc0, 0x7f, 0x95, 0x43, 0x99, 0x7d, - 0x65, 0x19, 0x72, 0x91, 0x9d, 0x3f, 0x1e, 0xfe, 0x6b, 0x1c, 0x1e, 0x45, 0x11, 0xd7, 0xf9, 0xce, - 0x1f, 0x4f, 0xf0, 0xeb, 0xc2, 0x75, 0x8e, 0x20, 0x61, 0x13, 0x9b, 0x7e, 0x3c, 0xfa, 0x37, 0x44, - 0xd4, 0x05, 0xa4, 0xf2, 0x34, 0x64, 0x83, 0x42, 0x1e, 0x8f, 0xff, 0x4d, 0x8e, 0x0f, 0x31, 0x24, - 0x02, 0x91, 0x8d, 0x24, 0x9e, 0xe2, 0x0b, 0x22, 0x02, 0x11, 0x14, 0x59, 0x46, 0xdd, 0xcd, 0x41, - 0x3c, 0xd3, 0x6f, 0x89, 0x65, 0xd4, 0xd5, 0x1b, 0x90, 0xd9, 0xa4, 0xf5, 0x34, 0x9e, 0xe2, 0xb7, - 0xc5, 0x6c, 0x52, 0x7b, 0xe2, 0x46, 0xf7, 0x6e, 0x1b, 0xcf, 0xf1, 0x3b, 0xc2, 0x8d, 0xae, 0xcd, - 0xb6, 0xb2, 0x05, 0xa8, 0x77, 0xa7, 0x8d, 0xe7, 0xfb, 0x22, 0xe7, 0x1b, 0xef, 0xd9, 0x68, 0x2b, - 0xcf, 0xc2, 0xa9, 0xfe, 0xbb, 0x6c, 0x3c, 0xeb, 0x97, 0xde, 0xeb, 0x3a, 0x17, 0x45, 0x37, 0xd9, - 0xca, 0x4e, 0x58, 0xae, 0xa3, 0x3b, 0x6c, 0x3c, 0xed, 0xcb, 0xef, 0x75, 0x56, 0xec, 0xe8, 0x06, - 0x5b, 0xa9, 0x02, 0x84, 0x9b, 0x5b, 0x3c, 0xd7, 0x2b, 0x9c, 0x2b, 0x02, 0x22, 0x4b, 0x83, 0xef, - 0x6d, 0xf1, 0xf8, 0x2f, 0x8b, 0xa5, 0xc1, 0x11, 0x64, 0x69, 0x88, 0x6d, 0x2d, 0x1e, 0xfd, 0xaa, - 0x58, 0x1a, 0x02, 0x42, 0x32, 0x3b, 0xb2, 0x73, 0xc4, 0x33, 0x7c, 0x45, 0x64, 0x76, 0x04, 0x55, - 0xb9, 0x02, 0x19, 0xab, 0x6d, 0x9a, 0x24, 0x41, 0xd1, 0xbd, 0x7f, 0x20, 0x56, 0xfc, 0xd7, 0x0f, - 0xb8, 0x07, 0x02, 0x50, 0x59, 0x80, 0x34, 0x6e, 0xed, 0xe1, 0x46, 0x1c, 0xf2, 0xdf, 0x3e, 0x10, - 0x45, 0x89, 0x58, 0x57, 0x9e, 0x06, 0x60, 0x47, 0x7b, 0xfa, 0xd9, 0x2a, 0x06, 0xfb, 0xef, 0x1f, - 0xf0, 0x9f, 0x6e, 0x84, 0x90, 0x90, 0x80, 0xfd, 0x10, 0xe4, 0xde, 0x04, 0xef, 0x74, 0x12, 0xd0, - 0x51, 0x5f, 0x86, 0x91, 0xeb, 0x9e, 0x6d, 0xf9, 0x5a, 0x33, 0x0e, 0xfd, 0x1f, 0x1c, 0x2d, 0xec, - 0x49, 0xc0, 0x5a, 0xb6, 0x8b, 0x7d, 0xad, 0xe9, 0xc5, 0x61, 0xff, 0x93, 0x63, 0x03, 0x00, 0x01, - 0xeb, 0x9a, 0xe7, 0x0f, 0x32, 0xee, 0x1f, 0x09, 0xb0, 0x00, 0x10, 0xa7, 0xc9, 0xff, 0x37, 0xf0, - 0x61, 0x1c, 0xf6, 0x5d, 0xe1, 0x34, 0xb7, 0xaf, 0x7c, 0x12, 0xb2, 0xe4, 0x5f, 0xf6, 0x7b, 0xac, - 0x18, 0xf0, 0x7f, 0x71, 0x70, 0x88, 0x20, 0x6f, 0xf6, 0xfc, 0x86, 0x6f, 0xc4, 0x07, 0xfb, 0xbf, - 0xf9, 0x4c, 0x0b, 0xfb, 0x4a, 0x15, 0x72, 0x9e, 0xdf, 0x68, 0xb4, 0x79, 0x7f, 0x15, 0x03, 0xff, - 0x9f, 0x0f, 0x82, 0x23, 0x77, 0x80, 0x59, 0xaa, 0xf5, 0xbf, 0x3d, 0x84, 0x55, 0x7b, 0xd5, 0x66, - 0xf7, 0x86, 0x2f, 0x94, 0xe3, 0x2f, 0x00, 0xe1, 0xfd, 0x0c, 0x14, 0x75, 0xbb, 0xb5, 0x67, 0x7b, - 0xb3, 0x16, 0x36, 0xfc, 0x03, 0xec, 0xce, 0xda, 0x16, 0xe7, 0x43, 0x49, 0xdb, 0xc2, 0x53, 0x27, - 0xbb, 0x46, 0x2c, 0x9f, 0x81, 0xf4, 0x76, 0x7b, 0x6f, 0xef, 0x10, 0xc9, 0x90, 0xf4, 0xda, 0x7b, - 0xfc, 0x27, 0x39, 0xe4, 0xdf, 0xf2, 0x9b, 0x49, 0x18, 0xad, 0x9a, 0xe6, 0xce, 0xa1, 0x83, 0xbd, - 0xba, 0x85, 0xeb, 0xfb, 0xa8, 0x08, 0xc3, 0x74, 0xa4, 0x4f, 0x51, 0x33, 0xe9, 0xda, 0x90, 0xc2, - 0x9f, 0x03, 0xcd, 0x1c, 0xbd, 0x60, 0x4d, 0x04, 0x9a, 0xb9, 0x40, 0x73, 0x81, 0xdd, 0xaf, 0x06, - 0x9a, 0x0b, 0x81, 0x66, 0x9e, 0xde, 0xb2, 0x26, 0x03, 0xcd, 0x7c, 0xa0, 0x59, 0xa0, 0x5f, 0x11, - 0x46, 0x03, 0xcd, 0x42, 0xa0, 0x59, 0xa4, 0xdf, 0x0d, 0x52, 0x81, 0x66, 0x31, 0xd0, 0x5c, 0xa4, - 0x9f, 0x0b, 0xc6, 0x03, 0xcd, 0xc5, 0x40, 0x73, 0x89, 0x7e, 0x22, 0x40, 0x81, 0xe6, 0x52, 0xa0, - 0xb9, 0x4c, 0x7f, 0x7b, 0x33, 0x12, 0x68, 0x2e, 0xa3, 0x29, 0x18, 0x61, 0x23, 0x7b, 0x92, 0x7e, - 0x47, 0x1e, 0xbb, 0x36, 0xa4, 0x08, 0x41, 0xa8, 0x7b, 0x8a, 0xfe, 0xbe, 0x66, 0x38, 0xd4, 0x3d, - 0x15, 0xea, 0xe6, 0xe8, 0xcf, 0xfc, 0xe5, 0x50, 0x37, 0x17, 0xea, 0x2e, 0x14, 0x47, 0x49, 0x82, - 0x84, 0xba, 0x0b, 0xa1, 0x6e, 0xbe, 0x58, 0x20, 0x33, 0x10, 0xea, 0xe6, 0x43, 0xdd, 0x42, 0x71, - 0xec, 0x9c, 0x34, 0x9d, 0x0f, 0x75, 0x0b, 0xe8, 0x09, 0xc8, 0x79, 0xed, 0x3d, 0x95, 0x17, 0x43, - 0xfa, 0x3b, 0x9e, 0xdc, 0x1c, 0xcc, 0x90, 0x9c, 0xa0, 0xd3, 0x7a, 0x6d, 0x48, 0x01, 0xaf, 0xbd, - 0xc7, 0x8b, 0xe8, 0x52, 0x1e, 0xe8, 0xf5, 0x87, 0x4a, 0x7f, 0x7e, 0x5b, 0x7e, 0x43, 0x82, 0xec, - 0xce, 0x2d, 0x9b, 0x7e, 0x45, 0xf6, 0xfe, 0x9f, 0x27, 0x57, 0x38, 0x7d, 0x61, 0x9e, 0x7e, 0xe8, - 0xcb, 0x5e, 0x93, 0x14, 0x21, 0x08, 0x75, 0x0b, 0xc5, 0x07, 0xe9, 0x80, 0x02, 0xdd, 0x02, 0x9a, - 0x85, 0x7c, 0x64, 0x40, 0x73, 0xf4, 0x17, 0x36, 0x9d, 0x23, 0x92, 0x94, 0x5c, 0x38, 0xa2, 0xb9, - 0xa5, 0x34, 0x90, 0xb4, 0x27, 0x7f, 0xfc, 0x5b, 0x76, 0xf9, 0x0b, 0x09, 0xc8, 0xb1, 0x1b, 0x53, - 0x3a, 0x2a, 0xf2, 0x2a, 0xd6, 0xf8, 0x1f, 0x72, 0x37, 0x86, 0x14, 0x21, 0x40, 0x0a, 0x00, 0x33, - 0x25, 0x19, 0xce, 0x3c, 0x59, 0x7a, 0xf2, 0x9f, 0xde, 0x3c, 0xfb, 0x89, 0x63, 0x57, 0x10, 0x89, - 0xdd, 0x2c, 0xab, 0xc0, 0x33, 0xbb, 0x86, 0xe5, 0x3f, 0x35, 0x77, 0x89, 0x04, 0x38, 0x64, 0x41, - 0xbb, 0x90, 0x59, 0xd6, 0x3c, 0xfa, 0xdb, 0x3c, 0xea, 0x7a, 0x6a, 0xe9, 0xe2, 0xff, 0xbe, 0x79, - 0xf6, 0x42, 0x0c, 0x23, 0x2f, 0x8e, 0x33, 0x1b, 0x87, 0x84, 0x75, 0x71, 0x9e, 0xc0, 0xaf, 0x0d, - 0x29, 0x01, 0x15, 0x9a, 0x13, 0xae, 0x6e, 0x6a, 0x2d, 0xf6, 0x53, 0xa2, 0xe4, 0x92, 0x7c, 0xf4, - 0xe6, 0xd9, 0xfc, 0xc6, 0x61, 0x28, 0x0f, 0x5d, 0x21, 0x4f, 0x4b, 0x19, 0x18, 0x66, 0xae, 0x2e, - 0xad, 0xbc, 0x7e, 0xb7, 0x34, 0xf4, 0xc6, 0xdd, 0xd2, 0xd0, 0x3f, 0xde, 0x2d, 0x0d, 0xbd, 0x75, - 0xb7, 0x24, 0xbd, 0x7b, 0xb7, 0x24, 0xbd, 0x7f, 0xb7, 0x24, 0xdd, 0x39, 0x2a, 0x49, 0x5f, 0x3b, - 0x2a, 0x49, 0xdf, 0x38, 0x2a, 0x49, 0xdf, 0x39, 0x2a, 0x49, 0xaf, 0x1f, 0x95, 0x86, 0xde, 0x38, - 0x2a, 0x0d, 0xbd, 0x75, 0x54, 0x92, 0x7e, 0x78, 0x54, 0x1a, 0x7a, 0xf7, 0xa8, 0x24, 0xbd, 0x7f, - 0x54, 0x1a, 0xba, 0xf3, 0x83, 0xd2, 0xd0, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xeb, 0xeb, 0x0d, - 0x37, 0x95, 0x35, 0x00, 0x00, + // 4265 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x24, 0xd7, + 0x55, 0x56, 0xcf, 0x8f, 0x34, 0x73, 0x66, 0x34, 0x6a, 0x5d, 0xc9, 0xbb, 0xb3, 0x72, 0xac, 0xdd, + 0x1d, 0xdb, 0xb1, 0x6c, 0xc7, 0x92, 0xad, 0x95, 0xf6, 0x67, 0x96, 0xc4, 0x8c, 0xa4, 0x59, 0xad, + 0x8c, 0xa4, 0x51, 0x7a, 0xa4, 0xf8, 0x27, 0x45, 0x75, 0xb5, 0x7a, 0xae, 0x46, 0xbd, 0xdb, 0xd3, + 0xdd, 0xe9, 0xee, 0xd9, 0xb5, 0xb6, 0x78, 0x58, 0xca, 0xfc, 0x54, 0x8a, 0xe2, 0x2f, 0x50, 0x45, + 0x62, 0x1c, 0x43, 0x42, 0x11, 0x87, 0xf0, 0x97, 0x10, 0x08, 0x49, 0x78, 0xe1, 0x25, 0xe0, 0x27, + 0xca, 0x79, 0xa3, 0x28, 0xca, 0xe5, 0x55, 0x5c, 0x45, 0x00, 0x43, 0x0c, 0xec, 0x83, 0x0b, 0xbf, + 0x50, 0xf7, 0xaf, 0xbb, 0xe7, 0x47, 0xdb, 0xa3, 0x14, 0x76, 0x9e, 0x56, 0x7d, 0xce, 0xf9, 0xbe, + 0x3e, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xf6, 0x2c, 0xfc, 0xe8, 0x12, 0x9c, 0x69, 0xda, 0x76, + 0xd3, 0xc4, 0x73, 0x8e, 0x6b, 0xfb, 0xf6, 0x6e, 0x7b, 0x6f, 0xae, 0x81, 0x3d, 0xdd, 0x35, 0x1c, + 0xdf, 0x76, 0x67, 0xa9, 0x0c, 0x8d, 0x31, 0x8b, 0x59, 0x61, 0x51, 0xda, 0x80, 0xf1, 0x2b, 0x86, + 0x89, 0x57, 0x02, 0xc3, 0x3a, 0xf6, 0xd1, 0x45, 0x48, 0xed, 0x19, 0x26, 0x2e, 0x4a, 0x67, 0x92, + 0x33, 0xb9, 0xf9, 0x87, 0x66, 0xbb, 0x40, 0xb3, 0x9d, 0x88, 0x2d, 0x22, 0x56, 0x28, 0xa2, 0xf4, + 0x76, 0x0a, 0x26, 0xfa, 0x68, 0x11, 0x82, 0x94, 0xa5, 0xb5, 0x08, 0xa3, 0x34, 0x93, 0x55, 0xe8, + 0xdf, 0xa8, 0x08, 0x23, 0x8e, 0xa6, 0x5f, 0xd7, 0x9a, 0xb8, 0x98, 0xa0, 0x62, 0xf1, 0x88, 0xa6, + 0x01, 0x1a, 0xd8, 0xc1, 0x56, 0x03, 0x5b, 0xfa, 0x41, 0x31, 0x79, 0x26, 0x39, 0x93, 0x55, 0x22, + 0x12, 0xf4, 0x38, 0x8c, 0x3b, 0xed, 0x5d, 0xd3, 0xd0, 0xd5, 0x88, 0x19, 0x9c, 0x49, 0xce, 0xa4, + 0x15, 0x99, 0x29, 0x56, 0x42, 0xe3, 0x47, 0x60, 0xec, 0x26, 0xd6, 0xae, 0x47, 0x4d, 0x73, 0xd4, + 0xb4, 0x40, 0xc4, 0x11, 0xc3, 0x65, 0xc8, 0xb7, 0xb0, 0xe7, 0x69, 0x4d, 0xac, 0xfa, 0x07, 0x0e, + 0x2e, 0xa6, 0xe8, 0xe8, 0xcf, 0xf4, 0x8c, 0xbe, 0x7b, 0xe4, 0x39, 0x8e, 0xda, 0x3e, 0x70, 0x30, + 0xaa, 0x40, 0x16, 0x5b, 0xed, 0x16, 0x63, 0x48, 0x1f, 0x11, 0xbf, 0xaa, 0xd5, 0x6e, 0x75, 0xb3, + 0x64, 0x08, 0x8c, 0x53, 0x8c, 0x78, 0xd8, 0xbd, 0x61, 0xe8, 0xb8, 0x38, 0x4c, 0x09, 0x1e, 0xe9, + 0x21, 0xa8, 0x33, 0x7d, 0x37, 0x87, 0xc0, 0xa1, 0x65, 0xc8, 0xe2, 0x17, 0x7d, 0x6c, 0x79, 0x86, + 0x6d, 0x15, 0x47, 0x28, 0xc9, 0xc3, 0x7d, 0x66, 0x11, 0x9b, 0x8d, 0x6e, 0x8a, 0x10, 0x87, 0xce, + 0xc3, 0x88, 0xed, 0xf8, 0x86, 0x6d, 0x79, 0xc5, 0xcc, 0x19, 0x69, 0x26, 0x37, 0xff, 0x91, 0xbe, + 0x89, 0x50, 0x63, 0x36, 0x8a, 0x30, 0x46, 0x6b, 0x20, 0x7b, 0x76, 0xdb, 0xd5, 0xb1, 0xaa, 0xdb, + 0x0d, 0xac, 0x1a, 0xd6, 0x9e, 0x5d, 0xcc, 0x52, 0x82, 0xd3, 0xbd, 0x03, 0xa1, 0x86, 0xcb, 0x76, + 0x03, 0xaf, 0x59, 0x7b, 0xb6, 0x52, 0xf0, 0x3a, 0x9e, 0xd1, 0x09, 0x18, 0xf6, 0x0e, 0x2c, 0x5f, + 0x7b, 0xb1, 0x98, 0xa7, 0x19, 0xc2, 0x9f, 0x4a, 0xdf, 0x19, 0x86, 0xb1, 0x41, 0x52, 0xec, 0x32, + 0xa4, 0xf7, 0xc8, 0x28, 0x8b, 0x89, 0xe3, 0xc4, 0x80, 0x61, 0x3a, 0x83, 0x38, 0xfc, 0x63, 0x06, + 0xb1, 0x02, 0x39, 0x0b, 0x7b, 0x3e, 0x6e, 0xb0, 0x8c, 0x48, 0x0e, 0x98, 0x53, 0xc0, 0x40, 0xbd, + 0x29, 0x95, 0xfa, 0xb1, 0x52, 0xea, 0x39, 0x18, 0x0b, 0x5c, 0x52, 0x5d, 0xcd, 0x6a, 0x8a, 0xdc, + 0x9c, 0x8b, 0xf3, 0x64, 0xb6, 0x2a, 0x70, 0x0a, 0x81, 0x29, 0x05, 0xdc, 0xf1, 0x8c, 0x56, 0x00, + 0x6c, 0x0b, 0xdb, 0x7b, 0x6a, 0x03, 0xeb, 0x66, 0x31, 0x73, 0x44, 0x94, 0x6a, 0xc4, 0xa4, 0x27, + 0x4a, 0x36, 0x93, 0xea, 0x26, 0xba, 0x14, 0xa6, 0xda, 0xc8, 0x11, 0x99, 0xb2, 0xc1, 0x16, 0x59, + 0x4f, 0xb6, 0xed, 0x40, 0xc1, 0xc5, 0x24, 0xef, 0x71, 0x83, 0x8f, 0x2c, 0x4b, 0x9d, 0x98, 0x8d, + 0x1d, 0x99, 0xc2, 0x61, 0x6c, 0x60, 0xa3, 0x6e, 0xf4, 0x11, 0x3d, 0x08, 0x81, 0x40, 0xa5, 0x69, + 0x05, 0xb4, 0x0a, 0xe5, 0x85, 0x70, 0x53, 0x6b, 0xe1, 0xa9, 0x5b, 0x50, 0xe8, 0x0c, 0x0f, 0x9a, + 0x84, 0xb4, 0xe7, 0x6b, 0xae, 0x4f, 0xb3, 0x30, 0xad, 0xb0, 0x07, 0x24, 0x43, 0x12, 0x5b, 0x0d, + 0x5a, 0xe5, 0xd2, 0x0a, 0xf9, 0x13, 0xfd, 0x74, 0x38, 0xe0, 0x24, 0x1d, 0xf0, 0x47, 0x7b, 0x67, + 0xb4, 0x83, 0xb9, 0x7b, 0xdc, 0x53, 0x17, 0x60, 0xb4, 0x63, 0x00, 0x83, 0xbe, 0xba, 0xf4, 0x73, + 0x70, 0x5f, 0x5f, 0x6a, 0xf4, 0x1c, 0x4c, 0xb6, 0x2d, 0xc3, 0xf2, 0xb1, 0xeb, 0xb8, 0x98, 0x64, + 0x2c, 0x7b, 0x55, 0xf1, 0x5f, 0x46, 0x8e, 0xc8, 0xb9, 0x9d, 0xa8, 0x35, 0x63, 0x51, 0x26, 0xda, + 0xbd, 0xc2, 0xc7, 0xb2, 0x99, 0x1f, 0x8e, 0xc8, 0xb7, 0x6f, 0xdf, 0xbe, 0x9d, 0x28, 0x7d, 0x7e, + 0x18, 0x26, 0xfb, 0xad, 0x99, 0xbe, 0xcb, 0xf7, 0x04, 0x0c, 0x5b, 0xed, 0xd6, 0x2e, 0x76, 0x69, + 0x90, 0xd2, 0x0a, 0x7f, 0x42, 0x15, 0x48, 0x9b, 0xda, 0x2e, 0x36, 0x8b, 0xa9, 0x33, 0xd2, 0x4c, + 0x61, 0xfe, 0xf1, 0x81, 0x56, 0xe5, 0xec, 0x3a, 0x81, 0x28, 0x0c, 0x89, 0x3e, 0x01, 0x29, 0x5e, + 0xa2, 0x09, 0xc3, 0x63, 0x83, 0x31, 0x90, 0xb5, 0xa4, 0x50, 0x1c, 0xba, 0x1f, 0xb2, 0xe4, 0x5f, + 0x96, 0x1b, 0xc3, 0xd4, 0xe7, 0x0c, 0x11, 0x90, 0xbc, 0x40, 0x53, 0x90, 0xa1, 0xcb, 0xa4, 0x81, + 0xc5, 0xd6, 0x16, 0x3c, 0x93, 0xc4, 0x6a, 0xe0, 0x3d, 0xad, 0x6d, 0xfa, 0xea, 0x0d, 0xcd, 0x6c, + 0x63, 0x9a, 0xf0, 0x59, 0x25, 0xcf, 0x85, 0x9f, 0x22, 0x32, 0x74, 0x1a, 0x72, 0x6c, 0x55, 0x19, + 0x56, 0x03, 0xbf, 0x48, 0xab, 0x67, 0x5a, 0x61, 0x0b, 0x6d, 0x8d, 0x48, 0xc8, 0xeb, 0xaf, 0x79, + 0xb6, 0x25, 0x52, 0x93, 0xbe, 0x82, 0x08, 0xe8, 0xeb, 0x2f, 0x74, 0x17, 0xee, 0x07, 0xfa, 0x0f, + 0xaf, 0x3b, 0xa7, 0x4a, 0xdf, 0x4a, 0x40, 0x8a, 0xd6, 0x8b, 0x31, 0xc8, 0x6d, 0x3f, 0xbf, 0x55, + 0x55, 0x57, 0x6a, 0x3b, 0x4b, 0xeb, 0x55, 0x59, 0x42, 0x05, 0x00, 0x2a, 0xb8, 0xb2, 0x5e, 0xab, + 0x6c, 0xcb, 0x89, 0xe0, 0x79, 0x6d, 0x73, 0xfb, 0xfc, 0x82, 0x9c, 0x0c, 0x00, 0x3b, 0x4c, 0x90, + 0x8a, 0x1a, 0x9c, 0x9b, 0x97, 0xd3, 0x48, 0x86, 0x3c, 0x23, 0x58, 0x7b, 0xae, 0xba, 0x72, 0x7e, + 0x41, 0x1e, 0xee, 0x94, 0x9c, 0x9b, 0x97, 0x47, 0xd0, 0x28, 0x64, 0xa9, 0x64, 0xa9, 0x56, 0x5b, + 0x97, 0x33, 0x01, 0x67, 0x7d, 0x5b, 0x59, 0xdb, 0x5c, 0x95, 0xb3, 0x01, 0xe7, 0xaa, 0x52, 0xdb, + 0xd9, 0x92, 0x21, 0x60, 0xd8, 0xa8, 0xd6, 0xeb, 0x95, 0xd5, 0xaa, 0x9c, 0x0b, 0x2c, 0x96, 0x9e, + 0xdf, 0xae, 0xd6, 0xe5, 0x7c, 0x87, 0x5b, 0xe7, 0xe6, 0xe5, 0xd1, 0xe0, 0x15, 0xd5, 0xcd, 0x9d, + 0x0d, 0xb9, 0x80, 0xc6, 0x61, 0x94, 0xbd, 0x42, 0x38, 0x31, 0xd6, 0x25, 0x3a, 0xbf, 0x20, 0xcb, + 0xa1, 0x23, 0x8c, 0x65, 0xbc, 0x43, 0x70, 0x7e, 0x41, 0x46, 0xa5, 0x65, 0x48, 0xd3, 0xec, 0x42, + 0x08, 0x0a, 0xeb, 0x95, 0xa5, 0xea, 0xba, 0x5a, 0xdb, 0xda, 0x5e, 0xab, 0x6d, 0x56, 0xd6, 0x65, + 0x29, 0x94, 0x29, 0xd5, 0x4f, 0xee, 0xac, 0x29, 0xd5, 0x15, 0x39, 0x11, 0x95, 0x6d, 0x55, 0x2b, + 0xdb, 0xd5, 0x15, 0x39, 0x59, 0xd2, 0x61, 0xb2, 0x5f, 0x9d, 0xec, 0xbb, 0x32, 0x22, 0x53, 0x9c, + 0x38, 0x62, 0x8a, 0x29, 0x57, 0xcf, 0x14, 0xff, 0x20, 0x01, 0x13, 0x7d, 0xf6, 0x8a, 0xbe, 0x2f, + 0x79, 0x1a, 0xd2, 0x2c, 0x45, 0xd9, 0xee, 0xf9, 0x68, 0xdf, 0x4d, 0x87, 0x26, 0x6c, 0xcf, 0x0e, + 0x4a, 0x71, 0xd1, 0x0e, 0x22, 0x79, 0x44, 0x07, 0x41, 0x28, 0x7a, 0x6a, 0xfa, 0xcf, 0xf6, 0xd4, + 0x74, 0xb6, 0xed, 0x9d, 0x1f, 0x64, 0xdb, 0xa3, 0xb2, 0xe3, 0xd5, 0xf6, 0x74, 0x9f, 0xda, 0x7e, + 0x19, 0xc6, 0x7b, 0x88, 0x06, 0xae, 0xb1, 0x2f, 0x49, 0x50, 0x3c, 0x2a, 0x38, 0x31, 0x95, 0x2e, + 0xd1, 0x51, 0xe9, 0x2e, 0x77, 0x47, 0xf0, 0xec, 0xd1, 0x93, 0xd0, 0x33, 0xd7, 0xaf, 0x49, 0x70, + 0xa2, 0x7f, 0xa7, 0xd8, 0xd7, 0x87, 0x4f, 0xc0, 0x70, 0x0b, 0xfb, 0xfb, 0xb6, 0xe8, 0x96, 0x3e, + 0xda, 0x67, 0x0f, 0x26, 0xea, 0xee, 0xc9, 0xe6, 0xa8, 0xe8, 0x26, 0x9e, 0x3c, 0xaa, 0xdd, 0x63, + 0xde, 0xf4, 0x78, 0xfa, 0xd9, 0x04, 0xdc, 0xd7, 0x97, 0xbc, 0xaf, 0xa3, 0x0f, 0x00, 0x18, 0x96, + 0xd3, 0xf6, 0x59, 0x47, 0xc4, 0x0a, 0x6c, 0x96, 0x4a, 0x68, 0xf1, 0x22, 0xc5, 0xb3, 0xed, 0x07, + 0xfa, 0x24, 0xd5, 0x03, 0x13, 0x51, 0x83, 0x8b, 0xa1, 0xa3, 0x29, 0xea, 0xe8, 0xf4, 0x11, 0x23, + 0xed, 0x49, 0xcc, 0x27, 0x41, 0xd6, 0x4d, 0x03, 0x5b, 0xbe, 0xea, 0xf9, 0x2e, 0xd6, 0x5a, 0x86, + 0xd5, 0xa4, 0x3b, 0x48, 0xa6, 0x9c, 0xde, 0xd3, 0x4c, 0x0f, 0x2b, 0x63, 0x4c, 0x5d, 0x17, 0x5a, + 0x82, 0xa0, 0x09, 0xe4, 0x46, 0x10, 0xc3, 0x1d, 0x08, 0xa6, 0x0e, 0x10, 0xa5, 0x6f, 0x66, 0x20, + 0x17, 0xe9, 0xab, 0xd1, 0x59, 0xc8, 0x5f, 0xd3, 0x6e, 0x68, 0xaa, 0x38, 0x2b, 0xb1, 0x48, 0xe4, + 0x88, 0x6c, 0x8b, 0x9f, 0x97, 0x9e, 0x84, 0x49, 0x6a, 0x62, 0xb7, 0x7d, 0xec, 0xaa, 0xba, 0xa9, + 0x79, 0x1e, 0x0d, 0x5a, 0x86, 0x9a, 0x22, 0xa2, 0xab, 0x11, 0xd5, 0xb2, 0xd0, 0xa0, 0x45, 0x98, + 0xa0, 0x88, 0x56, 0xdb, 0xf4, 0x0d, 0xc7, 0xc4, 0x2a, 0x39, 0xbd, 0x79, 0x74, 0x27, 0x09, 0x3c, + 0x1b, 0x27, 0x16, 0x1b, 0xdc, 0x80, 0x78, 0xe4, 0xa1, 0x15, 0x78, 0x80, 0xc2, 0x9a, 0xd8, 0xc2, + 0xae, 0xe6, 0x63, 0x15, 0x7f, 0xa6, 0xad, 0x99, 0x9e, 0xaa, 0x59, 0x0d, 0x75, 0x5f, 0xf3, 0xf6, + 0x8b, 0x93, 0x84, 0x60, 0x29, 0x51, 0x94, 0x94, 0x53, 0xc4, 0x70, 0x95, 0xdb, 0x55, 0xa9, 0x59, + 0xc5, 0x6a, 0x5c, 0xd5, 0xbc, 0x7d, 0x54, 0x86, 0x13, 0x94, 0xc5, 0xf3, 0x5d, 0xc3, 0x6a, 0xaa, + 0xfa, 0x3e, 0xd6, 0xaf, 0xab, 0x6d, 0x7f, 0xef, 0x62, 0xf1, 0xfe, 0xe8, 0xfb, 0xa9, 0x87, 0x75, + 0x6a, 0xb3, 0x4c, 0x4c, 0x76, 0xfc, 0xbd, 0x8b, 0xa8, 0x0e, 0x79, 0x32, 0x19, 0x2d, 0xe3, 0x16, + 0x56, 0xf7, 0x6c, 0x97, 0x6e, 0x8d, 0x85, 0x3e, 0xa5, 0x29, 0x12, 0xc1, 0xd9, 0x1a, 0x07, 0x6c, + 0xd8, 0x0d, 0x5c, 0x4e, 0xd7, 0xb7, 0xaa, 0xd5, 0x15, 0x25, 0x27, 0x58, 0xae, 0xd8, 0x2e, 0x49, + 0xa8, 0xa6, 0x1d, 0x04, 0x38, 0xc7, 0x12, 0xaa, 0x69, 0x8b, 0xf0, 0x2e, 0xc2, 0x84, 0xae, 0xb3, + 0x31, 0x1b, 0xba, 0xca, 0xcf, 0x58, 0x5e, 0x51, 0xee, 0x08, 0x96, 0xae, 0xaf, 0x32, 0x03, 0x9e, + 0xe3, 0x1e, 0xba, 0x04, 0xf7, 0x85, 0xc1, 0x8a, 0x02, 0xc7, 0x7b, 0x46, 0xd9, 0x0d, 0x5d, 0x84, + 0x09, 0xe7, 0xa0, 0x17, 0x88, 0x3a, 0xde, 0xe8, 0x1c, 0x74, 0xc3, 0x2e, 0xc0, 0xa4, 0xb3, 0xef, + 0xf4, 0xe2, 0x1e, 0x8b, 0xe2, 0x90, 0xb3, 0xef, 0x74, 0x03, 0x1f, 0xa6, 0x07, 0x6e, 0x17, 0xeb, + 0x9a, 0x8f, 0x1b, 0xc5, 0x93, 0x51, 0xf3, 0x88, 0x02, 0xcd, 0x81, 0xac, 0xeb, 0x2a, 0xb6, 0xb4, + 0x5d, 0x13, 0xab, 0x9a, 0x8b, 0x2d, 0xcd, 0x2b, 0x9e, 0x8e, 0x1a, 0x17, 0x74, 0xbd, 0x4a, 0xb5, + 0x15, 0xaa, 0x44, 0x8f, 0xc1, 0xb8, 0xbd, 0x7b, 0x4d, 0x67, 0x29, 0xa9, 0x3a, 0x2e, 0xde, 0x33, + 0x5e, 0x2c, 0x3e, 0x44, 0xe3, 0x3b, 0x46, 0x14, 0x34, 0x21, 0xb7, 0xa8, 0x18, 0x3d, 0x0a, 0xb2, + 0xee, 0xed, 0x6b, 0xae, 0x43, 0x6b, 0xb2, 0xe7, 0x68, 0x3a, 0x2e, 0x3e, 0xcc, 0x4c, 0x99, 0x7c, + 0x53, 0x88, 0xc9, 0x92, 0xf0, 0x6e, 0x1a, 0x7b, 0xbe, 0x60, 0x7c, 0x84, 0x2d, 0x09, 0x2a, 0xe3, + 0x6c, 0x33, 0x20, 0x93, 0x50, 0x74, 0xbc, 0x78, 0x86, 0x9a, 0x15, 0x9c, 0x7d, 0x27, 0xfa, 0xde, + 0x07, 0x61, 0x94, 0x58, 0x86, 0x2f, 0x7d, 0x94, 0x35, 0x64, 0xce, 0x7e, 0xe4, 0x8d, 0x1f, 0x58, + 0x6f, 0x5c, 0x2a, 0x43, 0x3e, 0x9a, 0x9f, 0x28, 0x0b, 0x2c, 0x43, 0x65, 0x89, 0x34, 0x2b, 0xcb, + 0xb5, 0x15, 0xd2, 0x66, 0xbc, 0x50, 0x95, 0x13, 0xa4, 0xdd, 0x59, 0x5f, 0xdb, 0xae, 0xaa, 0xca, + 0xce, 0xe6, 0xf6, 0xda, 0x46, 0x55, 0x4e, 0x46, 0xfb, 0xea, 0xef, 0x25, 0xa0, 0xd0, 0x79, 0x44, + 0x42, 0x3f, 0x05, 0x27, 0xc5, 0x7d, 0x86, 0x87, 0x7d, 0xf5, 0xa6, 0xe1, 0xd2, 0x25, 0xd3, 0xd2, + 0xd8, 0xf6, 0x15, 0x4c, 0xda, 0x24, 0xb7, 0xaa, 0x63, 0xff, 0x59, 0xc3, 0x25, 0x0b, 0xa2, 0xa5, + 0xf9, 0x68, 0x1d, 0x4e, 0x5b, 0xb6, 0xea, 0xf9, 0x9a, 0xd5, 0xd0, 0xdc, 0x86, 0x1a, 0xde, 0x24, + 0xa9, 0x9a, 0xae, 0x63, 0xcf, 0xb3, 0xd9, 0x56, 0x15, 0xb0, 0x7c, 0xc4, 0xb2, 0xeb, 0xdc, 0x38, + 0xac, 0xe1, 0x15, 0x6e, 0xda, 0x95, 0x60, 0xc9, 0xa3, 0x12, 0xec, 0x7e, 0xc8, 0xb6, 0x34, 0x47, + 0xc5, 0x96, 0xef, 0x1e, 0xd0, 0xc6, 0x38, 0xa3, 0x64, 0x5a, 0x9a, 0x53, 0x25, 0xcf, 0x1f, 0xce, + 0xf9, 0xe4, 0x9f, 0x93, 0x90, 0x8f, 0x36, 0xc7, 0xe4, 0xac, 0xa1, 0xd3, 0x7d, 0x44, 0xa2, 0x95, + 0xe6, 0xc1, 0x7b, 0xb6, 0xd2, 0xb3, 0xcb, 0x64, 0x83, 0x29, 0x0f, 0xb3, 0x96, 0x55, 0x61, 0x48, + 0xb2, 0xb9, 0x93, 0xda, 0x82, 0x59, 0x8b, 0x90, 0x51, 0xf8, 0x13, 0x5a, 0x85, 0xe1, 0x6b, 0x1e, + 0xe5, 0x1e, 0xa6, 0xdc, 0x0f, 0xdd, 0x9b, 0xfb, 0x99, 0x3a, 0x25, 0xcf, 0x3e, 0x53, 0x57, 0x37, + 0x6b, 0xca, 0x46, 0x65, 0x5d, 0xe1, 0x70, 0x74, 0x0a, 0x52, 0xa6, 0x76, 0xeb, 0xa0, 0x73, 0x2b, + 0xa2, 0xa2, 0x41, 0x03, 0x7f, 0x0a, 0x52, 0x37, 0xb1, 0x76, 0xbd, 0x73, 0x03, 0xa0, 0xa2, 0x0f, + 0x30, 0xf5, 0xe7, 0x20, 0x4d, 0xe3, 0x85, 0x00, 0x78, 0xc4, 0xe4, 0x21, 0x94, 0x81, 0xd4, 0x72, + 0x4d, 0x21, 0xe9, 0x2f, 0x43, 0x9e, 0x49, 0xd5, 0xad, 0xb5, 0xea, 0x72, 0x55, 0x4e, 0x94, 0x16, + 0x61, 0x98, 0x05, 0x81, 0x2c, 0x8d, 0x20, 0x0c, 0xf2, 0x10, 0x7f, 0xe4, 0x1c, 0x92, 0xd0, 0xee, + 0x6c, 0x2c, 0x55, 0x15, 0x39, 0x11, 0x9d, 0x5e, 0x0f, 0xf2, 0xd1, 0xbe, 0xf8, 0xc3, 0xc9, 0xa9, + 0xef, 0x4a, 0x90, 0x8b, 0xf4, 0xb9, 0xa4, 0x41, 0xd1, 0x4c, 0xd3, 0xbe, 0xa9, 0x6a, 0xa6, 0xa1, + 0x79, 0x3c, 0x29, 0x80, 0x8a, 0x2a, 0x44, 0x32, 0xe8, 0xa4, 0x7d, 0x28, 0xce, 0xbf, 0x2a, 0x81, + 0xdc, 0xdd, 0x62, 0x76, 0x39, 0x28, 0xfd, 0x44, 0x1d, 0x7c, 0x45, 0x82, 0x42, 0x67, 0x5f, 0xd9, + 0xe5, 0xde, 0xd9, 0x9f, 0xa8, 0x7b, 0x6f, 0x25, 0x60, 0xb4, 0xa3, 0x9b, 0x1c, 0xd4, 0xbb, 0xcf, + 0xc0, 0xb8, 0xd1, 0xc0, 0x2d, 0xc7, 0xf6, 0xb1, 0xa5, 0x1f, 0xa8, 0x26, 0xbe, 0x81, 0xcd, 0x62, + 0x89, 0x16, 0x8a, 0xb9, 0x7b, 0xf7, 0xab, 0xb3, 0x6b, 0x21, 0x6e, 0x9d, 0xc0, 0xca, 0x13, 0x6b, + 0x2b, 0xd5, 0x8d, 0xad, 0xda, 0x76, 0x75, 0x73, 0xf9, 0x79, 0x75, 0x67, 0xf3, 0x67, 0x36, 0x6b, + 0xcf, 0x6e, 0x2a, 0xb2, 0xd1, 0x65, 0xf6, 0x01, 0x2e, 0xf5, 0x2d, 0x90, 0xbb, 0x9d, 0x42, 0x27, + 0xa1, 0x9f, 0x5b, 0xf2, 0x10, 0x9a, 0x80, 0xb1, 0xcd, 0x9a, 0x5a, 0x5f, 0x5b, 0xa9, 0xaa, 0xd5, + 0x2b, 0x57, 0xaa, 0xcb, 0xdb, 0x75, 0x76, 0x03, 0x11, 0x58, 0x6f, 0x77, 0x2e, 0xea, 0x97, 0x93, + 0x30, 0xd1, 0xc7, 0x13, 0x54, 0xe1, 0x67, 0x07, 0x76, 0x9c, 0x79, 0x62, 0x10, 0xef, 0x67, 0xc9, + 0x96, 0xbf, 0xa5, 0xb9, 0x3e, 0x3f, 0x6a, 0x3c, 0x0a, 0x24, 0x4a, 0x96, 0x6f, 0xec, 0x19, 0xd8, + 0xe5, 0x17, 0x36, 0xec, 0x40, 0x31, 0x16, 0xca, 0xd9, 0x9d, 0xcd, 0xc7, 0x00, 0x39, 0xb6, 0x67, + 0xf8, 0xc6, 0x0d, 0xac, 0x1a, 0x96, 0xb8, 0xdd, 0x21, 0x07, 0x8c, 0x94, 0x22, 0x0b, 0xcd, 0x9a, + 0xe5, 0x07, 0xd6, 0x16, 0x6e, 0x6a, 0x5d, 0xd6, 0xa4, 0x80, 0x27, 0x15, 0x59, 0x68, 0x02, 0xeb, + 0xb3, 0x90, 0x6f, 0xd8, 0x6d, 0xd2, 0x75, 0x31, 0x3b, 0xb2, 0x5f, 0x48, 0x4a, 0x8e, 0xc9, 0x02, + 0x13, 0xde, 0x4f, 0x87, 0xd7, 0x4a, 0x79, 0x25, 0xc7, 0x64, 0xcc, 0xe4, 0x11, 0x18, 0xd3, 0x9a, + 0x4d, 0x97, 0x90, 0x0b, 0x22, 0x76, 0x42, 0x28, 0x04, 0x62, 0x6a, 0x38, 0xf5, 0x0c, 0x64, 0x44, + 0x1c, 0xc8, 0x96, 0x4c, 0x22, 0xa1, 0x3a, 0xec, 0xd8, 0x9b, 0x98, 0xc9, 0x2a, 0x19, 0x4b, 0x28, + 0xcf, 0x42, 0xde, 0xf0, 0xd4, 0xf0, 0x96, 0x3c, 0x71, 0x26, 0x31, 0x93, 0x51, 0x72, 0x86, 0x17, + 0xdc, 0x30, 0x96, 0x5e, 0x4b, 0x40, 0xa1, 0xf3, 0x96, 0x1f, 0xad, 0x40, 0xc6, 0xb4, 0x75, 0x8d, + 0xa6, 0x16, 0xfb, 0xc4, 0x34, 0x13, 0xf3, 0x61, 0x60, 0x76, 0x9d, 0xdb, 0x2b, 0x01, 0x72, 0xea, + 0x1f, 0x24, 0xc8, 0x08, 0x31, 0x3a, 0x01, 0x29, 0x47, 0xf3, 0xf7, 0x29, 0x5d, 0x7a, 0x29, 0x21, + 0x4b, 0x0a, 0x7d, 0x26, 0x72, 0xcf, 0xd1, 0x2c, 0x9a, 0x02, 0x5c, 0x4e, 0x9e, 0xc9, 0xbc, 0x9a, + 0x58, 0x6b, 0xd0, 0xe3, 0x87, 0xdd, 0x6a, 0x61, 0xcb, 0xf7, 0xc4, 0xbc, 0x72, 0xf9, 0x32, 0x17, + 0xa3, 0xc7, 0x61, 0xdc, 0x77, 0x35, 0xc3, 0xec, 0xb0, 0x4d, 0x51, 0x5b, 0x59, 0x28, 0x02, 0xe3, + 0x32, 0x9c, 0x12, 0xbc, 0x0d, 0xec, 0x6b, 0xfa, 0x3e, 0x6e, 0x84, 0xa0, 0x61, 0x7a, 0xcd, 0x70, + 0x92, 0x1b, 0xac, 0x70, 0xbd, 0xc0, 0x96, 0xbe, 0x2f, 0xc1, 0xb8, 0x38, 0x30, 0x35, 0x82, 0x60, + 0x6d, 0x00, 0x68, 0x96, 0x65, 0xfb, 0xd1, 0x70, 0xf5, 0xa6, 0x72, 0x0f, 0x6e, 0xb6, 0x12, 0x80, + 0x94, 0x08, 0xc1, 0x54, 0x0b, 0x20, 0xd4, 0x1c, 0x19, 0xb6, 0xd3, 0x90, 0xe3, 0x9f, 0x70, 0xe8, + 0x77, 0x40, 0x76, 0xc4, 0x06, 0x26, 0x22, 0x27, 0x2b, 0x34, 0x09, 0xe9, 0x5d, 0xdc, 0x34, 0x2c, + 0x7e, 0x31, 0xcb, 0x1e, 0xc4, 0x45, 0x48, 0x2a, 0xb8, 0x08, 0x59, 0xfa, 0x34, 0x4c, 0xe8, 0x76, + 0xab, 0xdb, 0xdd, 0x25, 0xb9, 0xeb, 0x98, 0xef, 0x5d, 0x95, 0x5e, 0x80, 0xb0, 0xc5, 0x7c, 0x4f, + 0x92, 0xbe, 0x9c, 0x48, 0xae, 0x6e, 0x2d, 0x7d, 0x2d, 0x31, 0xb5, 0xca, 0xa0, 0x5b, 0x62, 0xa4, + 0x0a, 0xde, 0x33, 0xb1, 0x4e, 0xbc, 0x87, 0xaf, 0x3c, 0x0e, 0x4f, 0x34, 0x0d, 0x7f, 0xbf, 0xbd, + 0x3b, 0xab, 0xdb, 0xad, 0xb9, 0xa6, 0xdd, 0xb4, 0xc3, 0x4f, 0x9f, 0xe4, 0x89, 0x3e, 0xd0, 0xbf, + 0xf8, 0xe7, 0xcf, 0x6c, 0x20, 0x9d, 0x8a, 0xfd, 0x56, 0x5a, 0xde, 0x84, 0x09, 0x6e, 0xac, 0xd2, + 0xef, 0x2f, 0xec, 0x14, 0x81, 0xee, 0x79, 0x87, 0x55, 0xfc, 0xc6, 0xdb, 0x74, 0xbb, 0x56, 0xc6, + 0x39, 0x94, 0xe8, 0xd8, 0x41, 0xa3, 0xac, 0xc0, 0x7d, 0x1d, 0x7c, 0x6c, 0x69, 0x62, 0x37, 0x86, + 0xf1, 0x7b, 0x9c, 0x71, 0x22, 0xc2, 0x58, 0xe7, 0xd0, 0xf2, 0x32, 0x8c, 0x1e, 0x87, 0xeb, 0xef, + 0x38, 0x57, 0x1e, 0x47, 0x49, 0x56, 0x61, 0x8c, 0x92, 0xe8, 0x6d, 0xcf, 0xb7, 0x5b, 0xb4, 0xee, + 0xdd, 0x9b, 0xe6, 0xef, 0xdf, 0x66, 0x6b, 0xa5, 0x40, 0x60, 0xcb, 0x01, 0xaa, 0x5c, 0x06, 0xfa, + 0xc9, 0xa9, 0x81, 0x75, 0x33, 0x86, 0xe1, 0x75, 0xee, 0x48, 0x60, 0x5f, 0xfe, 0x14, 0x4c, 0x92, + 0xbf, 0x69, 0x59, 0x8a, 0x7a, 0x12, 0x7f, 0xe1, 0x55, 0xfc, 0xfe, 0x4b, 0x6c, 0x39, 0x4e, 0x04, + 0x04, 0x11, 0x9f, 0x22, 0xb3, 0xd8, 0xc4, 0xbe, 0x8f, 0x5d, 0x4f, 0xd5, 0xcc, 0x7e, 0xee, 0x45, + 0x6e, 0x0c, 0x8a, 0x5f, 0x78, 0xa7, 0x73, 0x16, 0x57, 0x19, 0xb2, 0x62, 0x9a, 0xe5, 0x1d, 0x38, + 0xd9, 0x27, 0x2b, 0x06, 0xe0, 0x7c, 0x99, 0x73, 0x4e, 0xf6, 0x64, 0x06, 0xa1, 0xdd, 0x02, 0x21, + 0x0f, 0xe6, 0x72, 0x00, 0xce, 0xdf, 0xe5, 0x9c, 0x88, 0x63, 0xc5, 0x94, 0x12, 0xc6, 0x67, 0x60, + 0xfc, 0x06, 0x76, 0x77, 0x6d, 0x8f, 0xdf, 0xd2, 0x0c, 0x40, 0xf7, 0x0a, 0xa7, 0x1b, 0xe3, 0x40, + 0x7a, 0x6d, 0x43, 0xb8, 0x2e, 0x41, 0x66, 0x4f, 0xd3, 0xf1, 0x00, 0x14, 0x5f, 0xe4, 0x14, 0x23, + 0xc4, 0x9e, 0x40, 0x2b, 0x90, 0x6f, 0xda, 0x7c, 0x67, 0x8a, 0x87, 0xbf, 0xca, 0xe1, 0x39, 0x81, + 0xe1, 0x14, 0x8e, 0xed, 0xb4, 0x4d, 0xb2, 0x6d, 0xc5, 0x53, 0xfc, 0x9e, 0xa0, 0x10, 0x18, 0x4e, + 0x71, 0x8c, 0xb0, 0xfe, 0xbe, 0xa0, 0xf0, 0x22, 0xf1, 0x7c, 0x1a, 0x72, 0xb6, 0x65, 0x1e, 0xd8, + 0xd6, 0x20, 0x4e, 0x7c, 0x89, 0x33, 0x00, 0x87, 0x10, 0x82, 0xcb, 0x90, 0x1d, 0x74, 0x22, 0xfe, + 0xf0, 0x1d, 0xb1, 0x3c, 0xc4, 0x0c, 0xac, 0xc2, 0x98, 0x28, 0x50, 0x86, 0x6d, 0x0d, 0x40, 0xf1, + 0x15, 0x4e, 0x51, 0x88, 0xc0, 0xf8, 0x30, 0x7c, 0xec, 0xf9, 0x4d, 0x3c, 0x08, 0xc9, 0x6b, 0x62, + 0x18, 0x1c, 0xc2, 0x43, 0xb9, 0x8b, 0x2d, 0x7d, 0x7f, 0x30, 0x86, 0xaf, 0x8a, 0x50, 0x0a, 0x0c, + 0xa1, 0x58, 0x86, 0xd1, 0x96, 0xe6, 0x7a, 0xfb, 0x9a, 0x39, 0xd0, 0x74, 0xfc, 0x11, 0xe7, 0xc8, + 0x07, 0x20, 0x1e, 0x91, 0xb6, 0x75, 0x1c, 0x9a, 0xaf, 0x89, 0x88, 0x44, 0x60, 0x7c, 0xe9, 0x79, + 0x3e, 0xbd, 0xd2, 0x3a, 0x0e, 0xdb, 0x1f, 0x8b, 0xa5, 0xc7, 0xb0, 0x1b, 0x51, 0xc6, 0xcb, 0x90, + 0xf5, 0x8c, 0x5b, 0x03, 0xd1, 0xfc, 0x89, 0x98, 0x69, 0x0a, 0x20, 0xe0, 0xe7, 0xe1, 0x54, 0xdf, + 0x6d, 0x62, 0x00, 0xb2, 0x3f, 0xe5, 0x64, 0x27, 0xfa, 0x6c, 0x15, 0xbc, 0x24, 0x1c, 0x97, 0xf2, + 0xcf, 0x44, 0x49, 0xc0, 0x5d, 0x5c, 0x5b, 0xe4, 0xac, 0xe0, 0x69, 0x7b, 0xc7, 0x8b, 0xda, 0x9f, + 0x8b, 0xa8, 0x31, 0x6c, 0x47, 0xd4, 0xb6, 0xe1, 0x04, 0x67, 0x3c, 0xde, 0xbc, 0x7e, 0x5d, 0x14, + 0x56, 0x86, 0xde, 0xe9, 0x9c, 0xdd, 0x4f, 0xc3, 0x54, 0x10, 0x4e, 0xd1, 0x94, 0x7a, 0x6a, 0x4b, + 0x73, 0x06, 0x60, 0xfe, 0x06, 0x67, 0x16, 0x15, 0x3f, 0xe8, 0x6a, 0xbd, 0x0d, 0xcd, 0x21, 0xe4, + 0xcf, 0x41, 0x51, 0x90, 0xb7, 0x2d, 0x17, 0xeb, 0x76, 0xd3, 0x32, 0x6e, 0xe1, 0xc6, 0x00, 0xd4, + 0x7f, 0xd1, 0x35, 0x55, 0x3b, 0x11, 0x38, 0x61, 0x5e, 0x03, 0x39, 0xe8, 0x55, 0x54, 0xa3, 0xe5, + 0xd8, 0xae, 0x1f, 0xc3, 0xf8, 0x4d, 0x31, 0x53, 0x01, 0x6e, 0x8d, 0xc2, 0xca, 0x55, 0x28, 0xd0, + 0xc7, 0x41, 0x53, 0xf2, 0x2f, 0x39, 0xd1, 0x68, 0x88, 0xe2, 0x85, 0x43, 0xb7, 0x5b, 0x8e, 0xe6, + 0x0e, 0x52, 0xff, 0xfe, 0x4a, 0x14, 0x0e, 0x0e, 0xe1, 0x85, 0xc3, 0x3f, 0x70, 0x30, 0xd9, 0xed, + 0x07, 0x60, 0xf8, 0x96, 0x28, 0x1c, 0x02, 0xc3, 0x29, 0x44, 0xc3, 0x30, 0x00, 0xc5, 0x5f, 0x0b, + 0x0a, 0x81, 0x21, 0x14, 0x9f, 0x0c, 0x37, 0x5a, 0x17, 0x37, 0x0d, 0xcf, 0x77, 0x59, 0x2b, 0x7c, + 0x6f, 0xaa, 0x6f, 0xbf, 0xd3, 0xd9, 0x84, 0x29, 0x11, 0x28, 0xa9, 0x44, 0xfc, 0x0a, 0x95, 0x9e, + 0x94, 0xe2, 0x1d, 0xfb, 0x8e, 0xa8, 0x44, 0x11, 0x18, 0xf1, 0x2d, 0xd2, 0x21, 0x92, 0xb0, 0xeb, + 0xe4, 0x7c, 0x30, 0x00, 0xdd, 0x77, 0xbb, 0x9c, 0xab, 0x0b, 0x2c, 0xe1, 0x8c, 0xf4, 0x3f, 0x6d, + 0xeb, 0x3a, 0x3e, 0x18, 0x28, 0x3b, 0xff, 0xa6, 0xab, 0xff, 0xd9, 0x61, 0x48, 0x56, 0x43, 0xc6, + 0xba, 0xfa, 0x29, 0x14, 0xf7, 0x63, 0x9d, 0xe2, 0xcf, 0xdf, 0xe5, 0xe3, 0xed, 0x6c, 0xa7, 0xca, + 0xeb, 0x24, 0xc9, 0x3b, 0x9b, 0x9e, 0x78, 0xb2, 0x97, 0xee, 0x06, 0x79, 0xde, 0xd1, 0xf3, 0x94, + 0xaf, 0xc0, 0x68, 0x47, 0xc3, 0x13, 0x4f, 0xf5, 0x0b, 0x9c, 0x2a, 0x1f, 0xed, 0x77, 0xca, 0x8b, + 0x90, 0x22, 0xcd, 0x4b, 0x3c, 0xfc, 0x17, 0x39, 0x9c, 0x9a, 0x97, 0x3f, 0x0e, 0x19, 0xd1, 0xb4, + 0xc4, 0x43, 0x7f, 0x89, 0x43, 0x03, 0x08, 0x81, 0x8b, 0x86, 0x25, 0x1e, 0xfe, 0xcb, 0x02, 0x2e, + 0x20, 0x04, 0x3e, 0x78, 0x08, 0xff, 0xf6, 0x57, 0x52, 0x7c, 0xd3, 0x11, 0xb1, 0xbb, 0x0c, 0x23, + 0xbc, 0x53, 0x89, 0x47, 0x7f, 0x96, 0xbf, 0x5c, 0x20, 0xca, 0x17, 0x20, 0x3d, 0x60, 0xc0, 0x7f, + 0x95, 0x43, 0x99, 0x7d, 0x79, 0x19, 0x72, 0x91, 0xee, 0x24, 0x1e, 0xfe, 0x6b, 0x1c, 0x1e, 0x45, + 0x11, 0xd7, 0x79, 0x77, 0x12, 0x4f, 0xf0, 0xeb, 0xc2, 0x75, 0x8e, 0x20, 0x61, 0x13, 0x8d, 0x49, + 0x3c, 0xfa, 0x37, 0x44, 0xd4, 0x05, 0xa4, 0xfc, 0x34, 0x64, 0x83, 0xcd, 0x26, 0x1e, 0xff, 0x9b, + 0x1c, 0x1f, 0x62, 0x48, 0x04, 0x22, 0x9b, 0x5d, 0x3c, 0xc5, 0xe7, 0x44, 0x04, 0x22, 0x28, 0xb2, + 0x8c, 0xba, 0x1b, 0x98, 0x78, 0xa6, 0xdf, 0x12, 0xcb, 0xa8, 0xab, 0x7f, 0x21, 0xb3, 0x49, 0x6b, + 0x7e, 0x3c, 0xc5, 0x6f, 0x8b, 0xd9, 0xa4, 0xf6, 0xc4, 0x8d, 0xee, 0x8e, 0x20, 0x9e, 0xe3, 0x77, + 0x84, 0x1b, 0x5d, 0x0d, 0x41, 0x79, 0x0b, 0x50, 0x6f, 0x37, 0x10, 0xcf, 0xf7, 0x79, 0xce, 0x37, + 0xde, 0xd3, 0x0c, 0x94, 0x9f, 0x85, 0x13, 0xfd, 0x3b, 0x81, 0x78, 0xd6, 0x2f, 0xdc, 0xed, 0x3a, + 0xbb, 0x45, 0x1b, 0x81, 0xf2, 0x76, 0xb8, 0xa5, 0x44, 0xbb, 0x80, 0x78, 0xda, 0x97, 0xef, 0x76, + 0x16, 0xee, 0x68, 0x13, 0x50, 0xae, 0x00, 0x84, 0x1b, 0x70, 0x3c, 0xd7, 0x2b, 0x9c, 0x2b, 0x02, + 0x22, 0x4b, 0x83, 0xef, 0xbf, 0xf1, 0xf8, 0x2f, 0x8a, 0xa5, 0xc1, 0x11, 0x64, 0x69, 0x88, 0xad, + 0x37, 0x1e, 0xfd, 0xaa, 0x58, 0x1a, 0x02, 0x42, 0x32, 0x3b, 0xb2, 0xbb, 0xc5, 0x33, 0x7c, 0x49, + 0x64, 0x76, 0x04, 0x55, 0xde, 0x84, 0xf1, 0x9e, 0x0d, 0x31, 0x9e, 0xea, 0xcb, 0x9c, 0x4a, 0xee, + 0xde, 0x0f, 0xa3, 0x9b, 0x17, 0xdf, 0x0c, 0xe3, 0xd9, 0xfe, 0xa0, 0x6b, 0xf3, 0xe2, 0x7b, 0x61, + 0xf9, 0x32, 0x64, 0xac, 0xb6, 0x69, 0x92, 0xc5, 0x83, 0xee, 0xfd, 0x03, 0xbb, 0xe2, 0xbf, 0xbe, + 0xcf, 0xa3, 0x23, 0x00, 0xe5, 0x45, 0x48, 0xe3, 0xd6, 0x2e, 0x6e, 0xc4, 0x21, 0xff, 0xed, 0x7d, + 0x51, 0x30, 0x89, 0x75, 0xf9, 0x69, 0x00, 0x76, 0x35, 0x42, 0x3f, 0xfb, 0xc5, 0x60, 0xff, 0xfd, + 0x7d, 0xfe, 0xd3, 0x97, 0x10, 0x12, 0x12, 0xb0, 0x1f, 0xd2, 0xdc, 0x9b, 0xe0, 0x9d, 0x4e, 0x02, + 0x3a, 0x23, 0x97, 0x60, 0xe4, 0x9a, 0x67, 0x5b, 0xbe, 0xd6, 0x8c, 0x43, 0xff, 0x07, 0x47, 0x0b, + 0x7b, 0x12, 0xb0, 0x96, 0xed, 0x62, 0x5f, 0x6b, 0x7a, 0x71, 0xd8, 0xff, 0xe4, 0xd8, 0x00, 0x40, + 0xc0, 0xba, 0xe6, 0xf9, 0x83, 0x8c, 0xfb, 0x47, 0x02, 0x2c, 0x00, 0xc4, 0x69, 0xf2, 0xf7, 0x75, + 0x7c, 0x10, 0x87, 0x7d, 0x57, 0x38, 0xcd, 0xed, 0xcb, 0x1f, 0x87, 0x2c, 0xf9, 0x93, 0xfd, 0x9e, + 0x2d, 0x06, 0xfc, 0x5f, 0x1c, 0x1c, 0x22, 0xc8, 0x9b, 0x3d, 0xbf, 0xe1, 0x1b, 0xf1, 0xc1, 0xfe, + 0x6f, 0x3e, 0xd3, 0xc2, 0xbe, 0x5c, 0x81, 0x9c, 0xe7, 0x37, 0x1a, 0x6d, 0xde, 0x9f, 0xc6, 0xc0, + 0xff, 0xe7, 0xfd, 0xe0, 0xca, 0x22, 0xc0, 0x90, 0xd9, 0xbe, 0x79, 0xdd, 0x77, 0x6c, 0xfa, 0x99, + 0x23, 0x8e, 0xe1, 0x2e, 0x67, 0x88, 0x40, 0x96, 0xaa, 0xfd, 0xaf, 0x6f, 0x61, 0xd5, 0x5e, 0xb5, + 0xd9, 0xc5, 0xed, 0x0b, 0xa5, 0xf8, 0x1b, 0x58, 0x78, 0x2f, 0x03, 0x45, 0xdd, 0x6e, 0xed, 0xda, + 0xde, 0x9c, 0x85, 0x0d, 0x7f, 0x1f, 0xbb, 0x73, 0xb6, 0xc5, 0xf9, 0x50, 0xd2, 0xb6, 0xf0, 0xd4, + 0xf1, 0xee, 0x71, 0x4b, 0xa7, 0x20, 0x5d, 0x6f, 0xef, 0xee, 0x1e, 0x20, 0x19, 0x92, 0x5e, 0x7b, + 0x97, 0xff, 0x26, 0x8a, 0xfc, 0x59, 0x7a, 0x33, 0x09, 0xa3, 0x15, 0xd3, 0xdc, 0x3e, 0x70, 0xb0, + 0x57, 0xb3, 0x70, 0x6d, 0x0f, 0x15, 0x61, 0x98, 0x0e, 0xf4, 0x29, 0x6a, 0x26, 0x5d, 0x1d, 0x52, + 0xf8, 0x73, 0xa0, 0x99, 0xa7, 0x37, 0xdc, 0x89, 0x40, 0x33, 0x1f, 0x68, 0xce, 0xb1, 0x0b, 0xee, + 0x40, 0x73, 0x2e, 0xd0, 0x2c, 0xd0, 0x6b, 0xee, 0x64, 0xa0, 0x59, 0x08, 0x34, 0x8b, 0xf4, 0x33, + 0xce, 0x68, 0xa0, 0x59, 0x0c, 0x34, 0xe7, 0xe9, 0x87, 0x9b, 0x54, 0xa0, 0x39, 0x1f, 0x68, 0x2e, + 0xd0, 0xef, 0x35, 0xe3, 0x81, 0xe6, 0x42, 0xa0, 0xb9, 0x48, 0xbf, 0xd1, 0xa0, 0x40, 0x73, 0x31, + 0xd0, 0x5c, 0xa2, 0x3f, 0x7e, 0x1a, 0x09, 0x34, 0x97, 0xd0, 0x14, 0x8c, 0xb0, 0x91, 0x3d, 0x49, + 0x3f, 0xe4, 0x8f, 0x5d, 0x1d, 0x52, 0x84, 0x20, 0xd4, 0x3d, 0x45, 0x7f, 0xe0, 0x34, 0x1c, 0xea, + 0x9e, 0x0a, 0x75, 0xf3, 0xf4, 0xff, 0x59, 0xc8, 0xa1, 0x6e, 0x3e, 0xd4, 0x9d, 0x2b, 0x8e, 0x92, + 0xfc, 0x08, 0x75, 0xe7, 0x42, 0xdd, 0x42, 0xb1, 0x40, 0x66, 0x20, 0xd4, 0x2d, 0x84, 0xba, 0xc5, + 0xe2, 0xd8, 0x19, 0x69, 0x26, 0x1f, 0xea, 0x16, 0xd1, 0x13, 0x90, 0xf3, 0xda, 0xbb, 0x2a, 0xaf, + 0xf4, 0xf4, 0x87, 0x54, 0xb9, 0x79, 0x98, 0x25, 0x39, 0x41, 0xa7, 0xf5, 0xea, 0x90, 0x02, 0x5e, + 0x7b, 0x97, 0x17, 0xe2, 0xa5, 0x3c, 0xd0, 0xfb, 0x27, 0x95, 0xfe, 0xfe, 0xb9, 0xf4, 0x86, 0x04, + 0xd9, 0xed, 0x9b, 0x36, 0xfd, 0x8c, 0xef, 0xfd, 0x3f, 0x4f, 0xae, 0x70, 0xfa, 0xdc, 0x02, 0xfd, + 0xd2, 0x9a, 0xbd, 0x2a, 0x29, 0x42, 0x10, 0xea, 0x16, 0x8b, 0x0f, 0xd2, 0x01, 0x05, 0xba, 0x45, + 0x34, 0x07, 0xf9, 0xc8, 0x80, 0xe6, 0xe9, 0x4f, 0x9c, 0x3a, 0x47, 0x24, 0x29, 0xb9, 0x70, 0x44, + 0xf3, 0x4b, 0x69, 0x20, 0x69, 0x4f, 0xfe, 0xf1, 0x6f, 0xda, 0xa5, 0xcf, 0x25, 0x20, 0xc7, 0xae, + 0xac, 0xe9, 0xa8, 0xc8, 0xab, 0xd8, 0xa9, 0xe6, 0x80, 0xbb, 0x31, 0xa4, 0x08, 0x01, 0x52, 0x00, + 0x98, 0x29, 0xc9, 0x70, 0xe6, 0xc9, 0xd2, 0x93, 0xff, 0xf4, 0xe6, 0xe9, 0x8f, 0x1d, 0xb9, 0x82, + 0x48, 0xec, 0xe6, 0x58, 0x09, 0x9f, 0xdd, 0x31, 0x2c, 0xff, 0xa9, 0xf9, 0x8b, 0x24, 0xc0, 0x21, + 0x0b, 0xda, 0x81, 0xcc, 0xb2, 0xe6, 0xd1, 0x1f, 0x47, 0x52, 0xd7, 0x53, 0x4b, 0x17, 0xfe, 0xf7, + 0xcd, 0xd3, 0xe7, 0x62, 0x18, 0x79, 0x75, 0x9d, 0xdd, 0x38, 0x20, 0xac, 0xe7, 0x17, 0x08, 0xfc, + 0xea, 0x90, 0x12, 0x50, 0xa1, 0x79, 0xe1, 0xea, 0xa6, 0xd6, 0x62, 0xbf, 0xe5, 0x4a, 0x2e, 0xc9, + 0x87, 0x6f, 0x9e, 0xce, 0x6f, 0x1c, 0x84, 0xf2, 0xd0, 0x15, 0xf2, 0xb4, 0x94, 0x81, 0x61, 0xe6, + 0xea, 0xd2, 0xca, 0xeb, 0x77, 0xa6, 0x87, 0xde, 0xb8, 0x33, 0x3d, 0xf4, 0x8f, 0x77, 0xa6, 0x87, + 0xde, 0xba, 0x33, 0x2d, 0xbd, 0x7b, 0x67, 0x5a, 0x7a, 0xef, 0xce, 0xb4, 0x74, 0xfb, 0x70, 0x5a, + 0xfa, 0xea, 0xe1, 0xb4, 0xf4, 0xf5, 0xc3, 0x69, 0xe9, 0xdb, 0x87, 0xd3, 0xd2, 0xeb, 0x87, 0xd3, + 0x43, 0x6f, 0x1c, 0x4e, 0x0f, 0xbd, 0x75, 0x38, 0x2d, 0xfd, 0xf0, 0x70, 0x7a, 0xe8, 0xdd, 0xc3, + 0x69, 0xe9, 0xbd, 0xc3, 0xe9, 0xa1, 0xdb, 0x3f, 0x98, 0x1e, 0xfa, 0xbf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x37, 0x1b, 0x08, 0xc3, 0x16, 0x37, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -3672,6 +3677,9 @@ return dAtA } func (m *Subby) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Sub != nil { @@ -3685,6 +3693,9 @@ } func (m *AllTypesOneOf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TestOneof != nil { @@ -3697,84 +3708,126 @@ } func (m *AllTypesOneOf_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *AllTypesOneOf_Field4) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field4)) return n } func (m *AllTypesOneOf_Field5) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field5)) return n } func (m *AllTypesOneOf_Field6) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field6)) return n } func (m *AllTypesOneOf_Field7) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field7)) return n } func (m *AllTypesOneOf_Field8) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field8)) return n } func (m *AllTypesOneOf_Field9) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field10) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field11) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field12) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field13) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *AllTypesOneOf_Field14) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field14) @@ -3782,6 +3835,9 @@ return n } func (m *AllTypesOneOf_Field15) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field15 != nil { @@ -3791,6 +3847,9 @@ return n } func (m *AllTypesOneOf_SubMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage != nil { @@ -3800,6 +3859,9 @@ return n } func (m *TwoOneofs) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.One != nil { @@ -3815,24 +3877,36 @@ } func (m *TwoOneofs_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *TwoOneofs_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *TwoOneofs_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *TwoOneofs_Field34) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field34) @@ -3840,6 +3914,9 @@ return n } func (m *TwoOneofs_Field35) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field35 != nil { @@ -3849,6 +3926,9 @@ return n } func (m *TwoOneofs_SubMessage2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage2 != nil { @@ -3858,6 +3938,9 @@ return n } func (m *CustomOneof) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Custom != nil { @@ -3870,6 +3953,9 @@ } func (m *CustomOneof_Stringy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Stringy) @@ -3877,6 +3963,9 @@ return n } func (m *CustomOneof_CustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.CustomType.Size() @@ -3884,12 +3973,18 @@ return n } func (m *CustomOneof_CastType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 + sovOne(uint64(m.CastType)) return n } func (m *CustomOneof_MyCustomName) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 + sovOne(uint64(m.MyCustomName)) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/combos/unmarshaler/one.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/combos/unmarshaler/one.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/combos/unmarshaler/one.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/combos/unmarshaler/one.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1059,269 +1059,274 @@ func OneDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4179 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0x24, 0xd7, - 0x55, 0x56, 0xcf, 0x8f, 0x34, 0x73, 0x66, 0x34, 0x6a, 0x5d, 0xc9, 0xeb, 0x59, 0xd9, 0x9e, 0xdd, - 0x1d, 0xdb, 0xb1, 0x6c, 0xc7, 0x92, 0xad, 0x95, 0xb4, 0xbb, 0xb3, 0x24, 0x66, 0x24, 0xcd, 0x6a, - 0x65, 0x24, 0x8d, 0xd2, 0x92, 0xe2, 0x9f, 0x14, 0xd5, 0xd5, 0xea, 0xb9, 0x1a, 0xf5, 0x6e, 0x4f, - 0x77, 0xa7, 0xbb, 0x67, 0xd7, 0xda, 0xe2, 0x61, 0x29, 0xf3, 0x53, 0x29, 0x8a, 0xbf, 0x40, 0x15, - 0x89, 0x71, 0x0c, 0xa1, 0x2a, 0x38, 0x84, 0xbf, 0x84, 0x40, 0x48, 0x78, 0xe2, 0x25, 0xe0, 0x27, - 0xca, 0x79, 0xa3, 0x28, 0xca, 0xe5, 0x55, 0x5c, 0x45, 0x00, 0x43, 0x0c, 0xf8, 0xc1, 0x85, 0x79, - 0xa0, 0xee, 0x5f, 0x77, 0xcf, 0x8f, 0xb6, 0x47, 0xa9, 0xd8, 0x79, 0x92, 0xfa, 0x9c, 0xf3, 0x7d, - 0x7d, 0xee, 0xb9, 0xe7, 0x9e, 0x7b, 0xee, 0xed, 0x81, 0x1f, 0x5e, 0x82, 0xb3, 0x4d, 0xdb, 0x6e, - 0x9a, 0x78, 0xd6, 0x71, 0x6d, 0xdf, 0xde, 0x6b, 0xef, 0xcf, 0x36, 0xb0, 0xa7, 0xbb, 0x86, 0xe3, - 0xdb, 0xee, 0x0c, 0x95, 0xa1, 0x31, 0x66, 0x31, 0x23, 0x2c, 0xca, 0x1b, 0x30, 0x7e, 0xc5, 0x30, - 0xf1, 0x4a, 0x60, 0xb8, 0x8d, 0x7d, 0x74, 0x11, 0x52, 0xfb, 0x86, 0x89, 0x8b, 0xd2, 0xd9, 0xe4, - 0x74, 0x6e, 0xee, 0xa1, 0x99, 0x2e, 0xd0, 0x4c, 0x27, 0x62, 0x8b, 0x88, 0x15, 0x8a, 0x28, 0xbf, - 0x9d, 0x82, 0x89, 0x3e, 0x5a, 0x84, 0x20, 0x65, 0x69, 0x2d, 0xc2, 0x28, 0x4d, 0x67, 0x15, 0xfa, - 0x3f, 0x2a, 0xc2, 0x88, 0xa3, 0xe9, 0xd7, 0xb5, 0x26, 0x2e, 0x26, 0xa8, 0x58, 0x3c, 0xa2, 0x12, - 0x40, 0x03, 0x3b, 0xd8, 0x6a, 0x60, 0x4b, 0x3f, 0x2c, 0x26, 0xcf, 0x26, 0xa7, 0xb3, 0x4a, 0x44, - 0x82, 0x1e, 0x87, 0x71, 0xa7, 0xbd, 0x67, 0x1a, 0xba, 0x1a, 0x31, 0x83, 0xb3, 0xc9, 0xe9, 0xb4, - 0x22, 0x33, 0xc5, 0x4a, 0x68, 0xfc, 0x08, 0x8c, 0xdd, 0xc4, 0xda, 0xf5, 0xa8, 0x69, 0x8e, 0x9a, - 0x16, 0x88, 0x38, 0x62, 0xb8, 0x0c, 0xf9, 0x16, 0xf6, 0x3c, 0xad, 0x89, 0x55, 0xff, 0xd0, 0xc1, - 0xc5, 0x14, 0x1d, 0xfd, 0xd9, 0x9e, 0xd1, 0x77, 0x8f, 0x3c, 0xc7, 0x51, 0x3b, 0x87, 0x0e, 0x46, - 0x55, 0xc8, 0x62, 0xab, 0xdd, 0x62, 0x0c, 0xe9, 0x63, 0xe2, 0x57, 0xb3, 0xda, 0xad, 0x6e, 0x96, - 0x0c, 0x81, 0x71, 0x8a, 0x11, 0x0f, 0xbb, 0x37, 0x0c, 0x1d, 0x17, 0x87, 0x29, 0xc1, 0x23, 0x3d, - 0x04, 0xdb, 0x4c, 0xdf, 0xcd, 0x21, 0x70, 0x68, 0x19, 0xb2, 0xf8, 0x45, 0x1f, 0x5b, 0x9e, 0x61, - 0x5b, 0xc5, 0x11, 0x4a, 0xf2, 0x70, 0x9f, 0x59, 0xc4, 0x66, 0xa3, 0x9b, 0x22, 0xc4, 0xa1, 0x45, - 0x18, 0xb1, 0x1d, 0xdf, 0xb0, 0x2d, 0xaf, 0x98, 0x39, 0x2b, 0x4d, 0xe7, 0xe6, 0xee, 0xef, 0x9b, - 0x08, 0x75, 0x66, 0xa3, 0x08, 0x63, 0xb4, 0x06, 0xb2, 0x67, 0xb7, 0x5d, 0x1d, 0xab, 0xba, 0xdd, - 0xc0, 0xaa, 0x61, 0xed, 0xdb, 0xc5, 0x2c, 0x25, 0x38, 0xd3, 0x3b, 0x10, 0x6a, 0xb8, 0x6c, 0x37, - 0xf0, 0x9a, 0xb5, 0x6f, 0x2b, 0x05, 0xaf, 0xe3, 0x19, 0x9d, 0x82, 0x61, 0xef, 0xd0, 0xf2, 0xb5, - 0x17, 0x8b, 0x79, 0x9a, 0x21, 0xfc, 0xa9, 0xfc, 0x9d, 0x61, 0x18, 0x1b, 0x24, 0xc5, 0x2e, 0x43, - 0x7a, 0x9f, 0x8c, 0xb2, 0x98, 0x38, 0x49, 0x0c, 0x18, 0xa6, 0x33, 0x88, 0xc3, 0x3f, 0x62, 0x10, - 0xab, 0x90, 0xb3, 0xb0, 0xe7, 0xe3, 0x06, 0xcb, 0x88, 0xe4, 0x80, 0x39, 0x05, 0x0c, 0xd4, 0x9b, - 0x52, 0xa9, 0x1f, 0x29, 0xa5, 0x9e, 0x83, 0xb1, 0xc0, 0x25, 0xd5, 0xd5, 0xac, 0xa6, 0xc8, 0xcd, - 0xd9, 0x38, 0x4f, 0x66, 0x6a, 0x02, 0xa7, 0x10, 0x98, 0x52, 0xc0, 0x1d, 0xcf, 0x68, 0x05, 0xc0, - 0xb6, 0xb0, 0xbd, 0xaf, 0x36, 0xb0, 0x6e, 0x16, 0x33, 0xc7, 0x44, 0xa9, 0x4e, 0x4c, 0x7a, 0xa2, - 0x64, 0x33, 0xa9, 0x6e, 0xa2, 0x4b, 0x61, 0xaa, 0x8d, 0x1c, 0x93, 0x29, 0x1b, 0x6c, 0x91, 0xf5, - 0x64, 0xdb, 0x2e, 0x14, 0x5c, 0x4c, 0xf2, 0x1e, 0x37, 0xf8, 0xc8, 0xb2, 0xd4, 0x89, 0x99, 0xd8, - 0x91, 0x29, 0x1c, 0xc6, 0x06, 0x36, 0xea, 0x46, 0x1f, 0xd1, 0x83, 0x10, 0x08, 0x54, 0x9a, 0x56, - 0x40, 0xab, 0x50, 0x5e, 0x08, 0x37, 0xb5, 0x16, 0x9e, 0xba, 0x05, 0x85, 0xce, 0xf0, 0xa0, 0x49, - 0x48, 0x7b, 0xbe, 0xe6, 0xfa, 0x34, 0x0b, 0xd3, 0x0a, 0x7b, 0x40, 0x32, 0x24, 0xb1, 0xd5, 0xa0, - 0x55, 0x2e, 0xad, 0x90, 0x7f, 0xd1, 0x4f, 0x87, 0x03, 0x4e, 0xd2, 0x01, 0x7f, 0xac, 0x77, 0x46, - 0x3b, 0x98, 0xbb, 0xc7, 0x3d, 0x75, 0x01, 0x46, 0x3b, 0x06, 0x30, 0xe8, 0xab, 0xcb, 0x3f, 0x07, - 0xf7, 0xf4, 0xa5, 0x46, 0xcf, 0xc1, 0x64, 0xdb, 0x32, 0x2c, 0x1f, 0xbb, 0x8e, 0x8b, 0x49, 0xc6, - 0xb2, 0x57, 0x15, 0xff, 0x65, 0xe4, 0x98, 0x9c, 0xdb, 0x8d, 0x5a, 0x33, 0x16, 0x65, 0xa2, 0xdd, - 0x2b, 0x7c, 0x2c, 0x9b, 0xf9, 0xc1, 0x88, 0x7c, 0xfb, 0xf6, 0xed, 0xdb, 0x89, 0xf2, 0x17, 0x86, - 0x61, 0xb2, 0xdf, 0x9a, 0xe9, 0xbb, 0x7c, 0x4f, 0xc1, 0xb0, 0xd5, 0x6e, 0xed, 0x61, 0x97, 0x06, - 0x29, 0xad, 0xf0, 0x27, 0x54, 0x85, 0xb4, 0xa9, 0xed, 0x61, 0xb3, 0x98, 0x3a, 0x2b, 0x4d, 0x17, - 0xe6, 0x1e, 0x1f, 0x68, 0x55, 0xce, 0xac, 0x13, 0x88, 0xc2, 0x90, 0xe8, 0x93, 0x90, 0xe2, 0x25, - 0x9a, 0x30, 0x3c, 0x36, 0x18, 0x03, 0x59, 0x4b, 0x0a, 0xc5, 0xa1, 0xfb, 0x20, 0x4b, 0xfe, 0xb2, - 0xdc, 0x18, 0xa6, 0x3e, 0x67, 0x88, 0x80, 0xe4, 0x05, 0x9a, 0x82, 0x0c, 0x5d, 0x26, 0x0d, 0x2c, - 0xb6, 0xb6, 0xe0, 0x99, 0x24, 0x56, 0x03, 0xef, 0x6b, 0x6d, 0xd3, 0x57, 0x6f, 0x68, 0x66, 0x1b, - 0xd3, 0x84, 0xcf, 0x2a, 0x79, 0x2e, 0xfc, 0x34, 0x91, 0xa1, 0x33, 0x90, 0x63, 0xab, 0xca, 0xb0, - 0x1a, 0xf8, 0x45, 0x5a, 0x3d, 0xd3, 0x0a, 0x5b, 0x68, 0x6b, 0x44, 0x42, 0x5e, 0x7f, 0xcd, 0xb3, - 0x2d, 0x91, 0x9a, 0xf4, 0x15, 0x44, 0x40, 0x5f, 0x7f, 0xa1, 0xbb, 0x70, 0x3f, 0xd0, 0x7f, 0x78, - 0xdd, 0x39, 0x55, 0xfe, 0x56, 0x02, 0x52, 0xb4, 0x5e, 0x8c, 0x41, 0x6e, 0xe7, 0xf9, 0xad, 0x9a, - 0xba, 0x52, 0xdf, 0x5d, 0x5a, 0xaf, 0xc9, 0x12, 0x2a, 0x00, 0x50, 0xc1, 0x95, 0xf5, 0x7a, 0x75, - 0x47, 0x4e, 0x04, 0xcf, 0x6b, 0x9b, 0x3b, 0x8b, 0xf3, 0x72, 0x32, 0x00, 0xec, 0x32, 0x41, 0x2a, - 0x6a, 0x70, 0x7e, 0x4e, 0x4e, 0x23, 0x19, 0xf2, 0x8c, 0x60, 0xed, 0xb9, 0xda, 0xca, 0xe2, 0xbc, - 0x3c, 0xdc, 0x29, 0x39, 0x3f, 0x27, 0x8f, 0xa0, 0x51, 0xc8, 0x52, 0xc9, 0x52, 0xbd, 0xbe, 0x2e, - 0x67, 0x02, 0xce, 0xed, 0x1d, 0x65, 0x6d, 0x73, 0x55, 0xce, 0x06, 0x9c, 0xab, 0x4a, 0x7d, 0x77, - 0x4b, 0x86, 0x80, 0x61, 0xa3, 0xb6, 0xbd, 0x5d, 0x5d, 0xad, 0xc9, 0xb9, 0xc0, 0x62, 0xe9, 0xf9, - 0x9d, 0xda, 0xb6, 0x9c, 0xef, 0x70, 0xeb, 0xfc, 0x9c, 0x3c, 0x1a, 0xbc, 0xa2, 0xb6, 0xb9, 0xbb, - 0x21, 0x17, 0xd0, 0x38, 0x8c, 0xb2, 0x57, 0x08, 0x27, 0xc6, 0xba, 0x44, 0x8b, 0xf3, 0xb2, 0x1c, - 0x3a, 0xc2, 0x58, 0xc6, 0x3b, 0x04, 0x8b, 0xf3, 0x32, 0x2a, 0x2f, 0x43, 0x9a, 0x66, 0x17, 0x42, - 0x50, 0x58, 0xaf, 0x2e, 0xd5, 0xd6, 0xd5, 0xfa, 0xd6, 0xce, 0x5a, 0x7d, 0xb3, 0xba, 0x2e, 0x4b, - 0xa1, 0x4c, 0xa9, 0x7d, 0x6a, 0x77, 0x4d, 0xa9, 0xad, 0xc8, 0x89, 0xa8, 0x6c, 0xab, 0x56, 0xdd, - 0xa9, 0xad, 0xc8, 0xc9, 0xb2, 0x0e, 0x93, 0xfd, 0xea, 0x64, 0xdf, 0x95, 0x11, 0x99, 0xe2, 0xc4, - 0x31, 0x53, 0x4c, 0xb9, 0x7a, 0xa6, 0xf8, 0xfb, 0x09, 0x98, 0xe8, 0xb3, 0x57, 0xf4, 0x7d, 0xc9, - 0xd3, 0x90, 0x66, 0x29, 0xca, 0x76, 0xcf, 0x47, 0xfb, 0x6e, 0x3a, 0x34, 0x61, 0x7b, 0x76, 0x50, - 0x8a, 0x8b, 0x76, 0x10, 0xc9, 0x63, 0x3a, 0x08, 0x42, 0xd1, 0x53, 0xd3, 0x7f, 0xb6, 0xa7, 0xa6, - 0xb3, 0x6d, 0x6f, 0x71, 0x90, 0x6d, 0x8f, 0xca, 0x4e, 0x56, 0xdb, 0xd3, 0x7d, 0x6a, 0xfb, 0x65, - 0x18, 0xef, 0x21, 0x1a, 0xb8, 0xc6, 0xbe, 0x24, 0x41, 0xf1, 0xb8, 0xe0, 0xc4, 0x54, 0xba, 0x44, - 0x47, 0xa5, 0xbb, 0xdc, 0x1d, 0xc1, 0x73, 0xc7, 0x4f, 0x42, 0xcf, 0x5c, 0xbf, 0x26, 0xc1, 0xa9, - 0xfe, 0x9d, 0x62, 0x5f, 0x1f, 0x3e, 0x09, 0xc3, 0x2d, 0xec, 0x1f, 0xd8, 0xa2, 0x5b, 0xfa, 0x58, - 0x9f, 0x3d, 0x98, 0xa8, 0xbb, 0x27, 0x9b, 0xa3, 0xa2, 0x9b, 0x78, 0xf2, 0xb8, 0x76, 0x8f, 0x79, - 0xd3, 0xe3, 0xe9, 0xe7, 0x12, 0x70, 0x4f, 0x5f, 0xf2, 0xbe, 0x8e, 0x3e, 0x00, 0x60, 0x58, 0x4e, - 0xdb, 0x67, 0x1d, 0x11, 0x2b, 0xb0, 0x59, 0x2a, 0xa1, 0xc5, 0x8b, 0x14, 0xcf, 0xb6, 0x1f, 0xe8, - 0x93, 0x54, 0x0f, 0x4c, 0x44, 0x0d, 0x2e, 0x86, 0x8e, 0xa6, 0xa8, 0xa3, 0xa5, 0x63, 0x46, 0xda, - 0x93, 0x98, 0x4f, 0x82, 0xac, 0x9b, 0x06, 0xb6, 0x7c, 0xd5, 0xf3, 0x5d, 0xac, 0xb5, 0x0c, 0xab, - 0x49, 0x77, 0x90, 0x4c, 0x25, 0xbd, 0xaf, 0x99, 0x1e, 0x56, 0xc6, 0x98, 0x7a, 0x5b, 0x68, 0x09, - 0x82, 0x26, 0x90, 0x1b, 0x41, 0x0c, 0x77, 0x20, 0x98, 0x3a, 0x40, 0x94, 0xbf, 0x99, 0x81, 0x5c, - 0xa4, 0xaf, 0x46, 0xe7, 0x20, 0x7f, 0x4d, 0xbb, 0xa1, 0xa9, 0xe2, 0xac, 0xc4, 0x22, 0x91, 0x23, - 0xb2, 0x2d, 0x7e, 0x5e, 0x7a, 0x12, 0x26, 0xa9, 0x89, 0xdd, 0xf6, 0xb1, 0xab, 0xea, 0xa6, 0xe6, - 0x79, 0x34, 0x68, 0x19, 0x6a, 0x8a, 0x88, 0xae, 0x4e, 0x54, 0xcb, 0x42, 0x83, 0x16, 0x60, 0x82, - 0x22, 0x5a, 0x6d, 0xd3, 0x37, 0x1c, 0x13, 0xab, 0xe4, 0xf4, 0xe6, 0xd1, 0x9d, 0x24, 0xf0, 0x6c, - 0x9c, 0x58, 0x6c, 0x70, 0x03, 0xe2, 0x91, 0x87, 0x56, 0xe0, 0x01, 0x0a, 0x6b, 0x62, 0x0b, 0xbb, - 0x9a, 0x8f, 0x55, 0xfc, 0xd9, 0xb6, 0x66, 0x7a, 0xaa, 0x66, 0x35, 0xd4, 0x03, 0xcd, 0x3b, 0x28, - 0x4e, 0x12, 0x82, 0xa5, 0x44, 0x51, 0x52, 0x4e, 0x13, 0xc3, 0x55, 0x6e, 0x57, 0xa3, 0x66, 0x55, - 0xab, 0x71, 0x55, 0xf3, 0x0e, 0x50, 0x05, 0x4e, 0x51, 0x16, 0xcf, 0x77, 0x0d, 0xab, 0xa9, 0xea, - 0x07, 0x58, 0xbf, 0xae, 0xb6, 0xfd, 0xfd, 0x8b, 0xc5, 0xfb, 0xa2, 0xef, 0xa7, 0x1e, 0x6e, 0x53, - 0x9b, 0x65, 0x62, 0xb2, 0xeb, 0xef, 0x5f, 0x44, 0xdb, 0x90, 0x27, 0x93, 0xd1, 0x32, 0x6e, 0x61, - 0x75, 0xdf, 0x76, 0xe9, 0xd6, 0x58, 0xe8, 0x53, 0x9a, 0x22, 0x11, 0x9c, 0xa9, 0x73, 0xc0, 0x86, - 0xdd, 0xc0, 0x95, 0xf4, 0xf6, 0x56, 0xad, 0xb6, 0xa2, 0xe4, 0x04, 0xcb, 0x15, 0xdb, 0x25, 0x09, - 0xd5, 0xb4, 0x83, 0x00, 0xe7, 0x58, 0x42, 0x35, 0x6d, 0x11, 0xde, 0x05, 0x98, 0xd0, 0x75, 0x36, - 0x66, 0x43, 0x57, 0xf9, 0x19, 0xcb, 0x2b, 0xca, 0x1d, 0xc1, 0xd2, 0xf5, 0x55, 0x66, 0xc0, 0x73, - 0xdc, 0x43, 0x97, 0xe0, 0x9e, 0x30, 0x58, 0x51, 0xe0, 0x78, 0xcf, 0x28, 0xbb, 0xa1, 0x0b, 0x30, - 0xe1, 0x1c, 0xf6, 0x02, 0x51, 0xc7, 0x1b, 0x9d, 0xc3, 0x6e, 0xd8, 0x05, 0x98, 0x74, 0x0e, 0x9c, - 0x5e, 0xdc, 0x63, 0x51, 0x1c, 0x72, 0x0e, 0x9c, 0x6e, 0xe0, 0xc3, 0xf4, 0xc0, 0xed, 0x62, 0x5d, - 0xf3, 0x71, 0xa3, 0x78, 0x6f, 0xd4, 0x3c, 0xa2, 0x40, 0xb3, 0x20, 0xeb, 0xba, 0x8a, 0x2d, 0x6d, - 0xcf, 0xc4, 0xaa, 0xe6, 0x62, 0x4b, 0xf3, 0x8a, 0x67, 0xa2, 0xc6, 0x05, 0x5d, 0xaf, 0x51, 0x6d, - 0x95, 0x2a, 0xd1, 0x63, 0x30, 0x6e, 0xef, 0x5d, 0xd3, 0x59, 0x4a, 0xaa, 0x8e, 0x8b, 0xf7, 0x8d, - 0x17, 0x8b, 0x0f, 0xd1, 0xf8, 0x8e, 0x11, 0x05, 0x4d, 0xc8, 0x2d, 0x2a, 0x46, 0x8f, 0x82, 0xac, - 0x7b, 0x07, 0x9a, 0xeb, 0xd0, 0x9a, 0xec, 0x39, 0x9a, 0x8e, 0x8b, 0x0f, 0x33, 0x53, 0x26, 0xdf, - 0x14, 0x62, 0xb2, 0x24, 0xbc, 0x9b, 0xc6, 0xbe, 0x2f, 0x18, 0x1f, 0x61, 0x4b, 0x82, 0xca, 0x38, - 0xdb, 0x34, 0xc8, 0x24, 0x14, 0x1d, 0x2f, 0x9e, 0xa6, 0x66, 0x05, 0xe7, 0xc0, 0x89, 0xbe, 0xf7, - 0x41, 0x18, 0x25, 0x96, 0xe1, 0x4b, 0x1f, 0x65, 0x0d, 0x99, 0x73, 0x10, 0x79, 0xe3, 0x87, 0xd6, - 0x1b, 0x97, 0x2b, 0x90, 0x8f, 0xe6, 0x27, 0xca, 0x02, 0xcb, 0x50, 0x59, 0x22, 0xcd, 0xca, 0x72, - 0x7d, 0x85, 0xb4, 0x19, 0x2f, 0xd4, 0xe4, 0x04, 0x69, 0x77, 0xd6, 0xd7, 0x76, 0x6a, 0xaa, 0xb2, - 0xbb, 0xb9, 0xb3, 0xb6, 0x51, 0x93, 0x93, 0xd1, 0xbe, 0xfa, 0xbb, 0x09, 0x28, 0x74, 0x1e, 0x91, - 0xd0, 0x4f, 0xc1, 0xbd, 0xe2, 0x3e, 0xc3, 0xc3, 0xbe, 0x7a, 0xd3, 0x70, 0xe9, 0x92, 0x69, 0x69, - 0x6c, 0xfb, 0x0a, 0x26, 0x6d, 0x92, 0x5b, 0x6d, 0x63, 0xff, 0x59, 0xc3, 0x25, 0x0b, 0xa2, 0xa5, - 0xf9, 0x68, 0x1d, 0xce, 0x58, 0xb6, 0xea, 0xf9, 0x9a, 0xd5, 0xd0, 0xdc, 0x86, 0x1a, 0xde, 0x24, - 0xa9, 0x9a, 0xae, 0x63, 0xcf, 0xb3, 0xd9, 0x56, 0x15, 0xb0, 0xdc, 0x6f, 0xd9, 0xdb, 0xdc, 0x38, - 0xac, 0xe1, 0x55, 0x6e, 0xda, 0x95, 0x60, 0xc9, 0xe3, 0x12, 0xec, 0x3e, 0xc8, 0xb6, 0x34, 0x47, - 0xc5, 0x96, 0xef, 0x1e, 0xd2, 0xc6, 0x38, 0xa3, 0x64, 0x5a, 0x9a, 0x53, 0x23, 0xcf, 0x1f, 0xcd, - 0xf9, 0xe4, 0x9f, 0x93, 0x90, 0x8f, 0x36, 0xc7, 0xe4, 0xac, 0xa1, 0xd3, 0x7d, 0x44, 0xa2, 0x95, - 0xe6, 0xc1, 0xbb, 0xb6, 0xd2, 0x33, 0xcb, 0x64, 0x83, 0xa9, 0x0c, 0xb3, 0x96, 0x55, 0x61, 0x48, - 0xb2, 0xb9, 0x93, 0xda, 0x82, 0x59, 0x8b, 0x90, 0x51, 0xf8, 0x13, 0x5a, 0x85, 0xe1, 0x6b, 0x1e, - 0xe5, 0x1e, 0xa6, 0xdc, 0x0f, 0xdd, 0x9d, 0xfb, 0x99, 0x6d, 0x4a, 0x9e, 0x7d, 0x66, 0x5b, 0xdd, - 0xac, 0x2b, 0x1b, 0xd5, 0x75, 0x85, 0xc3, 0xd1, 0x69, 0x48, 0x99, 0xda, 0xad, 0xc3, 0xce, 0xad, - 0x88, 0x8a, 0x06, 0x0d, 0xfc, 0x69, 0x48, 0xdd, 0xc4, 0xda, 0xf5, 0xce, 0x0d, 0x80, 0x8a, 0x3e, - 0xc4, 0xd4, 0x9f, 0x85, 0x34, 0x8d, 0x17, 0x02, 0xe0, 0x11, 0x93, 0x87, 0x50, 0x06, 0x52, 0xcb, - 0x75, 0x85, 0xa4, 0xbf, 0x0c, 0x79, 0x26, 0x55, 0xb7, 0xd6, 0x6a, 0xcb, 0x35, 0x39, 0x51, 0x5e, - 0x80, 0x61, 0x16, 0x04, 0xb2, 0x34, 0x82, 0x30, 0xc8, 0x43, 0xfc, 0x91, 0x73, 0x48, 0x42, 0xbb, - 0xbb, 0xb1, 0x54, 0x53, 0xe4, 0x44, 0x74, 0x7a, 0x3d, 0xc8, 0x47, 0xfb, 0xe2, 0x8f, 0x26, 0xa7, - 0xfe, 0x46, 0x82, 0x5c, 0xa4, 0xcf, 0x25, 0x0d, 0x8a, 0x66, 0x9a, 0xf6, 0x4d, 0x55, 0x33, 0x0d, - 0xcd, 0xe3, 0x49, 0x01, 0x54, 0x54, 0x25, 0x92, 0x41, 0x27, 0xed, 0x23, 0x71, 0xfe, 0x55, 0x09, - 0xe4, 0xee, 0x16, 0xb3, 0xcb, 0x41, 0xe9, 0x27, 0xea, 0xe0, 0x2b, 0x12, 0x14, 0x3a, 0xfb, 0xca, - 0x2e, 0xf7, 0xce, 0xfd, 0x44, 0xdd, 0x7b, 0x2b, 0x01, 0xa3, 0x1d, 0xdd, 0xe4, 0xa0, 0xde, 0x7d, - 0x16, 0xc6, 0x8d, 0x06, 0x6e, 0x39, 0xb6, 0x8f, 0x2d, 0xfd, 0x50, 0x35, 0xf1, 0x0d, 0x6c, 0x16, - 0xcb, 0xb4, 0x50, 0xcc, 0xde, 0xbd, 0x5f, 0x9d, 0x59, 0x0b, 0x71, 0xeb, 0x04, 0x56, 0x99, 0x58, - 0x5b, 0xa9, 0x6d, 0x6c, 0xd5, 0x77, 0x6a, 0x9b, 0xcb, 0xcf, 0xab, 0xbb, 0x9b, 0x3f, 0xb3, 0x59, - 0x7f, 0x76, 0x53, 0x91, 0x8d, 0x2e, 0xb3, 0x0f, 0x71, 0xa9, 0x6f, 0x81, 0xdc, 0xed, 0x14, 0xba, - 0x17, 0xfa, 0xb9, 0x25, 0x0f, 0xa1, 0x09, 0x18, 0xdb, 0xac, 0xab, 0xdb, 0x6b, 0x2b, 0x35, 0xb5, - 0x76, 0xe5, 0x4a, 0x6d, 0x79, 0x67, 0x9b, 0xdd, 0x40, 0x04, 0xd6, 0x3b, 0x9d, 0x8b, 0xfa, 0xe5, - 0x24, 0x4c, 0xf4, 0xf1, 0x04, 0x55, 0xf9, 0xd9, 0x81, 0x1d, 0x67, 0x9e, 0x18, 0xc4, 0xfb, 0x19, - 0xb2, 0xe5, 0x6f, 0x69, 0xae, 0xcf, 0x8f, 0x1a, 0x8f, 0x02, 0x89, 0x92, 0xe5, 0x1b, 0xfb, 0x06, - 0x76, 0xf9, 0x85, 0x0d, 0x3b, 0x50, 0x8c, 0x85, 0x72, 0x76, 0x67, 0xf3, 0x71, 0x40, 0x8e, 0xed, - 0x19, 0xbe, 0x71, 0x03, 0xab, 0x86, 0x25, 0x6e, 0x77, 0xc8, 0x01, 0x23, 0xa5, 0xc8, 0x42, 0xb3, - 0x66, 0xf9, 0x81, 0xb5, 0x85, 0x9b, 0x5a, 0x97, 0x35, 0x29, 0xe0, 0x49, 0x45, 0x16, 0x9a, 0xc0, - 0xfa, 0x1c, 0xe4, 0x1b, 0x76, 0x9b, 0x74, 0x5d, 0xcc, 0x8e, 0xec, 0x17, 0x92, 0x92, 0x63, 0xb2, - 0xc0, 0x84, 0xf7, 0xd3, 0xe1, 0xb5, 0x52, 0x5e, 0xc9, 0x31, 0x19, 0x33, 0x79, 0x04, 0xc6, 0xb4, - 0x66, 0xd3, 0x25, 0xe4, 0x82, 0x88, 0x9d, 0x10, 0x0a, 0x81, 0x98, 0x1a, 0x4e, 0x3d, 0x03, 0x19, - 0x11, 0x07, 0xb2, 0x25, 0x93, 0x48, 0xa8, 0x0e, 0x3b, 0xf6, 0x26, 0xa6, 0xb3, 0x4a, 0xc6, 0x12, - 0xca, 0x73, 0x90, 0x37, 0x3c, 0x35, 0xbc, 0x25, 0x4f, 0x9c, 0x4d, 0x4c, 0x67, 0x94, 0x9c, 0xe1, - 0x05, 0x37, 0x8c, 0xe5, 0xd7, 0x12, 0x50, 0xe8, 0xbc, 0xe5, 0x47, 0x2b, 0x90, 0x31, 0x6d, 0x5d, - 0xa3, 0xa9, 0xc5, 0x3e, 0x31, 0x4d, 0xc7, 0x7c, 0x18, 0x98, 0x59, 0xe7, 0xf6, 0x4a, 0x80, 0x9c, - 0xfa, 0x07, 0x09, 0x32, 0x42, 0x8c, 0x4e, 0x41, 0xca, 0xd1, 0xfc, 0x03, 0x4a, 0x97, 0x5e, 0x4a, - 0xc8, 0x92, 0x42, 0x9f, 0x89, 0xdc, 0x73, 0x34, 0x8b, 0xa6, 0x00, 0x97, 0x93, 0x67, 0x32, 0xaf, - 0x26, 0xd6, 0x1a, 0xf4, 0xf8, 0x61, 0xb7, 0x5a, 0xd8, 0xf2, 0x3d, 0x31, 0xaf, 0x5c, 0xbe, 0xcc, - 0xc5, 0xe8, 0x71, 0x18, 0xf7, 0x5d, 0xcd, 0x30, 0x3b, 0x6c, 0x53, 0xd4, 0x56, 0x16, 0x8a, 0xc0, - 0xb8, 0x02, 0xa7, 0x05, 0x6f, 0x03, 0xfb, 0x9a, 0x7e, 0x80, 0x1b, 0x21, 0x68, 0x98, 0x5e, 0x33, - 0xdc, 0xcb, 0x0d, 0x56, 0xb8, 0x5e, 0x60, 0xcb, 0xdf, 0x93, 0x60, 0x5c, 0x1c, 0x98, 0x1a, 0x41, - 0xb0, 0x36, 0x00, 0x34, 0xcb, 0xb2, 0xfd, 0x68, 0xb8, 0x7a, 0x53, 0xb9, 0x07, 0x37, 0x53, 0x0d, - 0x40, 0x4a, 0x84, 0x60, 0xaa, 0x05, 0x10, 0x6a, 0x8e, 0x0d, 0xdb, 0x19, 0xc8, 0xf1, 0x4f, 0x38, - 0xf4, 0x3b, 0x20, 0x3b, 0x62, 0x03, 0x13, 0x91, 0x93, 0x15, 0x9a, 0x84, 0xf4, 0x1e, 0x6e, 0x1a, - 0x16, 0xbf, 0x98, 0x65, 0x0f, 0xe2, 0x22, 0x24, 0x15, 0x5c, 0x84, 0x2c, 0x7d, 0x06, 0x26, 0x74, - 0xbb, 0xd5, 0xed, 0xee, 0x92, 0xdc, 0x75, 0xcc, 0xf7, 0xae, 0x4a, 0x2f, 0x40, 0xd8, 0x62, 0xbe, - 0x2f, 0x49, 0x7f, 0x90, 0x48, 0xae, 0x6e, 0x2d, 0x7d, 0x2d, 0x31, 0xb5, 0xca, 0xa0, 0x5b, 0x62, - 0xa4, 0x0a, 0xde, 0x37, 0xb1, 0x4e, 0xbc, 0x87, 0xaf, 0x4c, 0xc3, 0x13, 0x4d, 0xc3, 0x3f, 0x68, - 0xef, 0xcd, 0xe8, 0x76, 0x6b, 0xb6, 0x69, 0x37, 0xed, 0xf0, 0xd3, 0x27, 0x79, 0xa2, 0x0f, 0xf4, - 0x3f, 0xfe, 0xf9, 0x33, 0x1b, 0x48, 0xa7, 0x62, 0xbf, 0x95, 0x56, 0x36, 0x61, 0x82, 0x1b, 0xab, - 0xf4, 0xfb, 0x0b, 0x3b, 0x45, 0xa0, 0xbb, 0xde, 0x61, 0x15, 0xbf, 0xf1, 0x36, 0xdd, 0xae, 0x95, - 0x71, 0x0e, 0x25, 0x3a, 0x76, 0xd0, 0xa8, 0x28, 0x70, 0x4f, 0x07, 0x1f, 0x5b, 0x9a, 0xd8, 0x8d, - 0x61, 0xfc, 0x2e, 0x67, 0x9c, 0x88, 0x30, 0x6e, 0x73, 0x68, 0x65, 0x19, 0x46, 0x4f, 0xc2, 0xf5, - 0x77, 0x9c, 0x2b, 0x8f, 0xa3, 0x24, 0xab, 0x30, 0x46, 0x49, 0xf4, 0xb6, 0xe7, 0xdb, 0x2d, 0x5a, - 0xf7, 0xee, 0x4e, 0xf3, 0xf7, 0x6f, 0xb3, 0xb5, 0x52, 0x20, 0xb0, 0xe5, 0x00, 0x55, 0xa9, 0x00, - 0xfd, 0xe4, 0xd4, 0xc0, 0xba, 0x19, 0xc3, 0xf0, 0x3a, 0x77, 0x24, 0xb0, 0xaf, 0x7c, 0x1a, 0x26, - 0xc9, 0xff, 0xb4, 0x2c, 0x45, 0x3d, 0x89, 0xbf, 0xf0, 0x2a, 0x7e, 0xef, 0x25, 0xb6, 0x1c, 0x27, - 0x02, 0x82, 0x88, 0x4f, 0x91, 0x59, 0x6c, 0x62, 0xdf, 0xc7, 0xae, 0xa7, 0x6a, 0x66, 0x3f, 0xf7, - 0x22, 0x37, 0x06, 0xc5, 0x2f, 0xbe, 0xd3, 0x39, 0x8b, 0xab, 0x0c, 0x59, 0x35, 0xcd, 0xca, 0x2e, - 0xdc, 0xdb, 0x27, 0x2b, 0x06, 0xe0, 0x7c, 0x99, 0x73, 0x4e, 0xf6, 0x64, 0x06, 0xa1, 0xdd, 0x02, - 0x21, 0x0f, 0xe6, 0x72, 0x00, 0xce, 0xdf, 0xe5, 0x9c, 0x88, 0x63, 0xc5, 0x94, 0x12, 0xc6, 0x67, - 0x60, 0xfc, 0x06, 0x76, 0xf7, 0x6c, 0x8f, 0xdf, 0xd2, 0x0c, 0x40, 0xf7, 0x0a, 0xa7, 0x1b, 0xe3, - 0x40, 0x7a, 0x6d, 0x43, 0xb8, 0x2e, 0x41, 0x66, 0x5f, 0xd3, 0xf1, 0x00, 0x14, 0x5f, 0xe2, 0x14, - 0x23, 0xc4, 0x9e, 0x40, 0xab, 0x90, 0x6f, 0xda, 0x7c, 0x67, 0x8a, 0x87, 0xbf, 0xca, 0xe1, 0x39, - 0x81, 0xe1, 0x14, 0x8e, 0xed, 0xb4, 0x4d, 0xb2, 0x6d, 0xc5, 0x53, 0xfc, 0x9e, 0xa0, 0x10, 0x18, - 0x4e, 0x71, 0x82, 0xb0, 0xfe, 0xbe, 0xa0, 0xf0, 0x22, 0xf1, 0x7c, 0x1a, 0x72, 0xb6, 0x65, 0x1e, - 0xda, 0xd6, 0x20, 0x4e, 0x7c, 0x99, 0x33, 0x00, 0x87, 0x10, 0x82, 0xcb, 0x90, 0x1d, 0x74, 0x22, - 0xbe, 0xf2, 0x8e, 0x58, 0x1e, 0x62, 0x06, 0x56, 0x61, 0x4c, 0x14, 0x28, 0xc3, 0xb6, 0x06, 0xa0, - 0xf8, 0x43, 0x4e, 0x51, 0x88, 0xc0, 0xf8, 0x30, 0x7c, 0xec, 0xf9, 0x4d, 0x3c, 0x08, 0xc9, 0x6b, - 0x62, 0x18, 0x1c, 0xc2, 0x43, 0xb9, 0x87, 0x2d, 0xfd, 0x60, 0x30, 0x86, 0xaf, 0x8a, 0x50, 0x0a, - 0x0c, 0xa1, 0x58, 0x86, 0xd1, 0x96, 0xe6, 0x7a, 0x07, 0x9a, 0x39, 0xd0, 0x74, 0xfc, 0x11, 0xe7, - 0xc8, 0x07, 0x20, 0x1e, 0x91, 0xb6, 0x75, 0x12, 0x9a, 0xaf, 0x89, 0x88, 0x44, 0x60, 0x7c, 0xe9, - 0x79, 0x3e, 0xbd, 0xd2, 0x3a, 0x09, 0xdb, 0x1f, 0x8b, 0xa5, 0xc7, 0xb0, 0x1b, 0x51, 0xc6, 0xcb, - 0x90, 0xf5, 0x8c, 0x5b, 0x03, 0xd1, 0xfc, 0x89, 0x98, 0x69, 0x0a, 0x20, 0xe0, 0xe7, 0xe1, 0x74, - 0xdf, 0x6d, 0x62, 0x00, 0xb2, 0x3f, 0xe5, 0x64, 0xa7, 0xfa, 0x6c, 0x15, 0xbc, 0x24, 0x9c, 0x94, - 0xf2, 0xcf, 0x44, 0x49, 0xc0, 0x5d, 0x5c, 0x5b, 0xe4, 0xac, 0xe0, 0x69, 0xfb, 0x27, 0x8b, 0xda, - 0x9f, 0x8b, 0xa8, 0x31, 0x6c, 0x47, 0xd4, 0x76, 0xe0, 0x14, 0x67, 0x3c, 0xd9, 0xbc, 0x7e, 0x5d, - 0x14, 0x56, 0x86, 0xde, 0xed, 0x9c, 0xdd, 0xcf, 0xc0, 0x54, 0x10, 0x4e, 0xd1, 0x94, 0x7a, 0x6a, - 0x4b, 0x73, 0x06, 0x60, 0xfe, 0x06, 0x67, 0x16, 0x15, 0x3f, 0xe8, 0x6a, 0xbd, 0x0d, 0xcd, 0x21, - 0xe4, 0xcf, 0x41, 0x51, 0x90, 0xb7, 0x2d, 0x17, 0xeb, 0x76, 0xd3, 0x32, 0x6e, 0xe1, 0xc6, 0x00, - 0xd4, 0x7f, 0xd1, 0x35, 0x55, 0xbb, 0x11, 0x38, 0x61, 0x5e, 0x03, 0x39, 0xe8, 0x55, 0x54, 0xa3, - 0xe5, 0xd8, 0xae, 0x1f, 0xc3, 0xf8, 0x4d, 0x31, 0x53, 0x01, 0x6e, 0x8d, 0xc2, 0x2a, 0x35, 0x28, - 0xd0, 0xc7, 0x41, 0x53, 0xf2, 0x2f, 0x39, 0xd1, 0x68, 0x88, 0xe2, 0x85, 0x43, 0xb7, 0x5b, 0x8e, - 0xe6, 0x0e, 0x52, 0xff, 0xfe, 0x4a, 0x14, 0x0e, 0x0e, 0xe1, 0x85, 0xc3, 0x3f, 0x74, 0x30, 0xd9, - 0xed, 0x07, 0x60, 0xf8, 0x96, 0x28, 0x1c, 0x02, 0xc3, 0x29, 0x44, 0xc3, 0x30, 0x00, 0xc5, 0x5f, - 0x0b, 0x0a, 0x81, 0x21, 0x14, 0x9f, 0x0a, 0x37, 0x5a, 0x17, 0x37, 0x0d, 0xcf, 0x77, 0x59, 0x2b, - 0x7c, 0x77, 0xaa, 0x6f, 0xbf, 0xd3, 0xd9, 0x84, 0x29, 0x11, 0x28, 0xa9, 0x44, 0xfc, 0x0a, 0x95, - 0x9e, 0x94, 0xe2, 0x1d, 0xfb, 0x8e, 0xa8, 0x44, 0x11, 0x18, 0x5b, 0x9f, 0x63, 0x5d, 0xbd, 0x0a, - 0x8a, 0xfb, 0x21, 0x4c, 0xf1, 0xe7, 0xdf, 0xe3, 0x5c, 0x9d, 0xad, 0x4a, 0x65, 0x9d, 0x24, 0x50, - 0x67, 0x43, 0x11, 0x4f, 0xf6, 0xd2, 0x7b, 0x41, 0x0e, 0x75, 0xf4, 0x13, 0x95, 0x2b, 0x30, 0xda, - 0xd1, 0x4c, 0xc4, 0x53, 0xfd, 0x02, 0xa7, 0xca, 0x47, 0x7b, 0x89, 0xca, 0x02, 0xa4, 0x48, 0x63, - 0x10, 0x0f, 0xff, 0x45, 0x0e, 0xa7, 0xe6, 0x95, 0x4f, 0x40, 0x46, 0x34, 0x04, 0xf1, 0xd0, 0x5f, - 0xe2, 0xd0, 0x00, 0x42, 0xe0, 0xa2, 0x19, 0x88, 0x87, 0xff, 0xb2, 0x80, 0x0b, 0x08, 0x81, 0x0f, - 0x1e, 0xc2, 0xbf, 0xfd, 0x95, 0x14, 0x2f, 0xe8, 0x22, 0x76, 0x97, 0x61, 0x84, 0x77, 0x01, 0xf1, - 0xe8, 0xcf, 0xf1, 0x97, 0x0b, 0x44, 0xe5, 0x02, 0xa4, 0x07, 0x0c, 0xf8, 0xaf, 0x72, 0x28, 0xb3, - 0xaf, 0x2c, 0x43, 0x2e, 0xb2, 0xf3, 0xc7, 0xc3, 0x7f, 0x8d, 0xc3, 0xa3, 0x28, 0xe2, 0x3a, 0xdf, - 0xf9, 0xe3, 0x09, 0x7e, 0x5d, 0xb8, 0xce, 0x11, 0x24, 0x6c, 0x62, 0xd3, 0x8f, 0x47, 0xff, 0x86, - 0x88, 0xba, 0x80, 0x54, 0x9e, 0x86, 0x6c, 0x50, 0xc8, 0xe3, 0xf1, 0xbf, 0xc9, 0xf1, 0x21, 0x86, - 0x44, 0x20, 0xb2, 0x91, 0xc4, 0x53, 0x7c, 0x5e, 0x44, 0x20, 0x82, 0x22, 0xcb, 0xa8, 0xbb, 0x39, - 0x88, 0x67, 0xfa, 0x2d, 0xb1, 0x8c, 0xba, 0x7a, 0x03, 0x32, 0x9b, 0xb4, 0x9e, 0xc6, 0x53, 0xfc, - 0xb6, 0x98, 0x4d, 0x6a, 0x4f, 0xdc, 0xe8, 0xde, 0x6d, 0xe3, 0x39, 0x7e, 0x47, 0xb8, 0xd1, 0xb5, - 0xd9, 0x56, 0xb6, 0x00, 0xf5, 0xee, 0xb4, 0xf1, 0x7c, 0x5f, 0xe0, 0x7c, 0xe3, 0x3d, 0x1b, 0x6d, - 0xe5, 0x59, 0x38, 0xd5, 0x7f, 0x97, 0x8d, 0x67, 0xfd, 0xe2, 0x7b, 0x5d, 0xe7, 0xa2, 0xe8, 0x26, - 0x5b, 0xd9, 0x09, 0xcb, 0x75, 0x74, 0x87, 0x8d, 0xa7, 0x7d, 0xf9, 0xbd, 0xce, 0x8a, 0x1d, 0xdd, - 0x60, 0x2b, 0x55, 0x80, 0x70, 0x73, 0x8b, 0xe7, 0x7a, 0x85, 0x73, 0x45, 0x40, 0x64, 0x69, 0xf0, - 0xbd, 0x2d, 0x1e, 0xff, 0x25, 0xb1, 0x34, 0x38, 0x82, 0x2c, 0x0d, 0xb1, 0xad, 0xc5, 0xa3, 0x5f, - 0x15, 0x4b, 0x43, 0x40, 0x48, 0x66, 0x47, 0x76, 0x8e, 0x78, 0x86, 0x2f, 0x8b, 0xcc, 0x8e, 0xa0, - 0x2a, 0x97, 0x21, 0x63, 0xb5, 0x4d, 0x93, 0x24, 0x28, 0xba, 0xfb, 0x0f, 0xc4, 0x8a, 0xff, 0xfa, - 0x01, 0xf7, 0x40, 0x00, 0x2a, 0x0b, 0x90, 0xc6, 0xad, 0x3d, 0xdc, 0x88, 0x43, 0xfe, 0xdb, 0x07, - 0xa2, 0x28, 0x11, 0xeb, 0xca, 0xd3, 0x00, 0xec, 0x68, 0x4f, 0x3f, 0x5b, 0xc5, 0x60, 0xff, 0xfd, - 0x03, 0xfe, 0xd3, 0x8d, 0x10, 0x12, 0x12, 0xb0, 0x1f, 0x82, 0xdc, 0x9d, 0xe0, 0x9d, 0x4e, 0x02, - 0x3a, 0xea, 0x4b, 0x30, 0x72, 0xcd, 0xb3, 0x2d, 0x5f, 0x6b, 0xc6, 0xa1, 0xff, 0x83, 0xa3, 0x85, - 0x3d, 0x09, 0x58, 0xcb, 0x76, 0xb1, 0xaf, 0x35, 0xbd, 0x38, 0xec, 0x7f, 0x72, 0x6c, 0x00, 0x20, - 0x60, 0x5d, 0xf3, 0xfc, 0x41, 0xc6, 0xfd, 0x43, 0x01, 0x16, 0x00, 0xe2, 0x34, 0xf9, 0xff, 0x3a, - 0x3e, 0x8c, 0xc3, 0xbe, 0x2b, 0x9c, 0xe6, 0xf6, 0x95, 0x4f, 0x40, 0x96, 0xfc, 0xcb, 0x7e, 0x8f, - 0x15, 0x03, 0xfe, 0x2f, 0x0e, 0x0e, 0x11, 0xe4, 0xcd, 0x9e, 0xdf, 0xf0, 0x8d, 0xf8, 0x60, 0xff, - 0x37, 0x9f, 0x69, 0x61, 0x5f, 0xa9, 0x42, 0xce, 0xf3, 0x1b, 0x8d, 0x36, 0xef, 0xaf, 0x62, 0xe0, - 0xff, 0xf3, 0x41, 0x70, 0xe4, 0x0e, 0x30, 0x4b, 0xb5, 0xfe, 0xb7, 0x87, 0xb0, 0x6a, 0xaf, 0xda, - 0xec, 0xde, 0xf0, 0x85, 0x72, 0xfc, 0x05, 0x20, 0xfc, 0x5f, 0x06, 0xee, 0xd7, 0xed, 0xd6, 0x9e, - 0xed, 0xcd, 0x46, 0xea, 0xdd, 0xac, 0x6d, 0x71, 0x4e, 0x94, 0xb4, 0x2d, 0x3c, 0x75, 0xb2, 0xab, - 0xc4, 0xf2, 0x69, 0x48, 0x6f, 0xb7, 0xf7, 0xf6, 0x0e, 0x91, 0x0c, 0x49, 0xaf, 0xbd, 0xc7, 0x7f, - 0x96, 0x43, 0xfe, 0x2d, 0xbf, 0x99, 0x84, 0xd1, 0xaa, 0x69, 0xee, 0x1c, 0x3a, 0xd8, 0xab, 0x5b, - 0xb8, 0xbe, 0x8f, 0x8a, 0x30, 0x4c, 0x47, 0xfb, 0x14, 0x35, 0x93, 0xae, 0x0e, 0x29, 0xfc, 0x39, - 0xd0, 0xcc, 0xd1, 0x4b, 0xd6, 0x44, 0xa0, 0x99, 0x0b, 0x34, 0xe7, 0xd9, 0x1d, 0x6b, 0xa0, 0x39, - 0x1f, 0x68, 0xe6, 0xe9, 0x4d, 0x6b, 0x32, 0xd0, 0xcc, 0x07, 0x9a, 0x05, 0xfa, 0x25, 0x61, 0x34, - 0xd0, 0x2c, 0x04, 0x9a, 0x45, 0xfa, 0xed, 0x20, 0x15, 0x68, 0x16, 0x03, 0xcd, 0x05, 0xfa, 0xc9, - 0x60, 0x3c, 0xd0, 0x5c, 0x08, 0x34, 0x17, 0xe9, 0x67, 0x02, 0x14, 0x68, 0x2e, 0x06, 0x9a, 0x4b, - 0xf4, 0xf7, 0x37, 0x23, 0x81, 0xe6, 0x12, 0x9a, 0x82, 0x11, 0x36, 0xb2, 0x27, 0xe9, 0xb7, 0xe4, - 0xb1, 0xab, 0x43, 0x8a, 0x10, 0x84, 0xba, 0xa7, 0xe8, 0x6f, 0x6c, 0x86, 0x43, 0xdd, 0x53, 0xa1, - 0x6e, 0x8e, 0xfe, 0xd4, 0x5f, 0x0e, 0x75, 0x73, 0xa1, 0xee, 0x7c, 0x71, 0x94, 0x24, 0x49, 0xa8, - 0x3b, 0x1f, 0xea, 0xe6, 0x8b, 0x05, 0x32, 0x03, 0xa1, 0x6e, 0x3e, 0xd4, 0x2d, 0x14, 0xc7, 0xce, - 0x4a, 0xd3, 0xf9, 0x50, 0xb7, 0x80, 0x9e, 0x80, 0x9c, 0xd7, 0xde, 0x53, 0x79, 0x41, 0xa4, 0xbf, - 0xe5, 0xc9, 0xcd, 0xc1, 0x0c, 0xc9, 0x09, 0x3a, 0xad, 0x57, 0x87, 0x14, 0xf0, 0xda, 0x7b, 0xbc, - 0x90, 0x2e, 0xe5, 0x81, 0x5e, 0x81, 0xa8, 0xf4, 0x27, 0xb8, 0xe5, 0x37, 0x24, 0xc8, 0xee, 0xdc, - 0xb4, 0xe9, 0x97, 0x64, 0xef, 0xc7, 0x3c, 0xb9, 0xc2, 0xe9, 0xf3, 0xf3, 0xf4, 0x63, 0x5f, 0xf6, - 0xaa, 0xa4, 0x08, 0x41, 0xa8, 0x5b, 0x28, 0x3e, 0x48, 0x07, 0x14, 0xe8, 0x16, 0xd0, 0x2c, 0xe4, - 0x23, 0x03, 0x9a, 0xa3, 0xbf, 0xb2, 0xe9, 0x1c, 0x91, 0xa4, 0xe4, 0xc2, 0x11, 0xcd, 0x2d, 0xa5, - 0x81, 0xa4, 0x3d, 0xf9, 0xe3, 0xdf, 0xb4, 0xcb, 0x9f, 0x4f, 0x40, 0x8e, 0xdd, 0x9a, 0xd2, 0x51, - 0x91, 0x57, 0xb1, 0xe6, 0xff, 0x90, 0xbb, 0x31, 0xa4, 0x08, 0x01, 0x52, 0x00, 0x98, 0x29, 0xc9, - 0x70, 0xe6, 0xc9, 0xd2, 0x93, 0xff, 0xf4, 0xe6, 0x99, 0x8f, 0x1f, 0xbb, 0x82, 0x48, 0xec, 0x66, - 0x59, 0x15, 0x9e, 0xd9, 0x35, 0x2c, 0xff, 0xa9, 0xb9, 0x8b, 0x24, 0xc0, 0x21, 0x0b, 0xda, 0x85, - 0xcc, 0xb2, 0xe6, 0xd1, 0xdf, 0xe7, 0x51, 0xd7, 0x53, 0x4b, 0x17, 0xfe, 0xf7, 0xcd, 0x33, 0xe7, - 0x63, 0x18, 0x79, 0x81, 0x9c, 0xd9, 0x38, 0x24, 0xac, 0x8b, 0xf3, 0x04, 0x7e, 0x75, 0x48, 0x09, - 0xa8, 0xd0, 0x9c, 0x70, 0x75, 0x53, 0x6b, 0xb1, 0x9f, 0x13, 0x25, 0x97, 0xe4, 0xa3, 0x37, 0xcf, - 0xe4, 0x37, 0x0e, 0x43, 0x79, 0xe8, 0x0a, 0x79, 0x5a, 0xca, 0xc0, 0x30, 0x73, 0x75, 0x69, 0xe5, - 0xf5, 0x3b, 0xa5, 0xa1, 0x37, 0xee, 0x94, 0x86, 0xfe, 0xf1, 0x4e, 0x69, 0xe8, 0xad, 0x3b, 0x25, - 0xe9, 0xdd, 0x3b, 0x25, 0xe9, 0xfd, 0x3b, 0x25, 0xe9, 0xf6, 0x51, 0x49, 0xfa, 0xea, 0x51, 0x49, - 0xfa, 0xfa, 0x51, 0x49, 0xfa, 0xf6, 0x51, 0x49, 0x7a, 0xfd, 0xa8, 0x34, 0xf4, 0xc6, 0x51, 0x49, - 0x7a, 0xeb, 0xa8, 0x24, 0xfd, 0xe0, 0xa8, 0x34, 0xf4, 0xee, 0x51, 0x49, 0x7a, 0xff, 0xa8, 0x34, - 0x74, 0xfb, 0xfb, 0xa5, 0xa1, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x6e, 0xc6, 0x74, 0xaf, 0x99, - 0x35, 0x00, 0x00, + // 4263 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x24, 0xd7, + 0x55, 0x56, 0xcf, 0x8f, 0x34, 0x73, 0x66, 0x34, 0x6a, 0x5d, 0xc9, 0xeb, 0x59, 0xd9, 0xd6, 0xee, + 0x8e, 0xed, 0x58, 0xb6, 0x63, 0xc9, 0xd6, 0x4a, 0xfb, 0x33, 0x4b, 0x62, 0x46, 0xd2, 0xac, 0x56, + 0x46, 0xd2, 0x28, 0x3d, 0x52, 0xfc, 0x93, 0xa2, 0xba, 0x5a, 0x3d, 0x57, 0xa3, 0xde, 0xed, 0xe9, + 0xee, 0x74, 0xf7, 0xec, 0x5a, 0x5b, 0x3c, 0x2c, 0x65, 0x7e, 0x2a, 0x45, 0xf1, 0x17, 0xa8, 0x22, + 0x31, 0x8e, 0x21, 0xa1, 0x88, 0x43, 0xf8, 0x4b, 0x08, 0x84, 0x24, 0xbc, 0xf0, 0x12, 0xf0, 0x13, + 0xe5, 0xbc, 0x51, 0x14, 0xe5, 0xf2, 0x2a, 0xae, 0x22, 0x80, 0x21, 0x06, 0xf6, 0xc1, 0x85, 0x79, + 0xa0, 0xee, 0x5f, 0x77, 0xcf, 0x8f, 0xb6, 0x47, 0xa9, 0xd8, 0x79, 0x5a, 0xf5, 0x39, 0xe7, 0xfb, + 0xfa, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xdc, 0xdb, 0xb3, 0xf0, 0xc3, 0x8b, 0x70, 0xba, 0x69, 0xdb, + 0x4d, 0x13, 0xcf, 0x39, 0xae, 0xed, 0xdb, 0xbb, 0xed, 0xbd, 0xb9, 0x06, 0xf6, 0x74, 0xd7, 0x70, + 0x7c, 0xdb, 0x9d, 0xa5, 0x32, 0x34, 0xc6, 0x2c, 0x66, 0x85, 0x45, 0x69, 0x03, 0xc6, 0x2f, 0x1b, + 0x26, 0x5e, 0x09, 0x0c, 0xeb, 0xd8, 0x47, 0x17, 0x20, 0xb5, 0x67, 0x98, 0xb8, 0x28, 0x9d, 0x4e, + 0xce, 0xe4, 0xe6, 0x1f, 0x9a, 0xed, 0x02, 0xcd, 0x76, 0x22, 0xb6, 0x88, 0x58, 0xa1, 0x88, 0xd2, + 0xdb, 0x29, 0x98, 0xe8, 0xa3, 0x45, 0x08, 0x52, 0x96, 0xd6, 0x22, 0x8c, 0xd2, 0x4c, 0x56, 0xa1, + 0x7f, 0xa3, 0x22, 0x8c, 0x38, 0x9a, 0x7e, 0x4d, 0x6b, 0xe2, 0x62, 0x82, 0x8a, 0xc5, 0x23, 0x9a, + 0x06, 0x68, 0x60, 0x07, 0x5b, 0x0d, 0x6c, 0xe9, 0x07, 0xc5, 0xe4, 0xe9, 0xe4, 0x4c, 0x56, 0x89, + 0x48, 0xd0, 0xe3, 0x30, 0xee, 0xb4, 0x77, 0x4d, 0x43, 0x57, 0x23, 0x66, 0x70, 0x3a, 0x39, 0x93, + 0x56, 0x64, 0xa6, 0x58, 0x09, 0x8d, 0x1f, 0x81, 0xb1, 0x1b, 0x58, 0xbb, 0x16, 0x35, 0xcd, 0x51, + 0xd3, 0x02, 0x11, 0x47, 0x0c, 0x97, 0x21, 0xdf, 0xc2, 0x9e, 0xa7, 0x35, 0xb1, 0xea, 0x1f, 0x38, + 0xb8, 0x98, 0xa2, 0xa3, 0x3f, 0xdd, 0x33, 0xfa, 0xee, 0x91, 0xe7, 0x38, 0x6a, 0xfb, 0xc0, 0xc1, + 0xa8, 0x02, 0x59, 0x6c, 0xb5, 0x5b, 0x8c, 0x21, 0x7d, 0x44, 0xfc, 0xaa, 0x56, 0xbb, 0xd5, 0xcd, + 0x92, 0x21, 0x30, 0x4e, 0x31, 0xe2, 0x61, 0xf7, 0xba, 0xa1, 0xe3, 0xe2, 0x30, 0x25, 0x78, 0xa4, + 0x87, 0xa0, 0xce, 0xf4, 0xdd, 0x1c, 0x02, 0x87, 0x96, 0x21, 0x8b, 0x5f, 0xf4, 0xb1, 0xe5, 0x19, + 0xb6, 0x55, 0x1c, 0xa1, 0x24, 0x0f, 0xf7, 0x99, 0x45, 0x6c, 0x36, 0xba, 0x29, 0x42, 0x1c, 0x3a, + 0x07, 0x23, 0xb6, 0xe3, 0x1b, 0xb6, 0xe5, 0x15, 0x33, 0xa7, 0xa5, 0x99, 0xdc, 0xfc, 0xfd, 0x7d, + 0x13, 0xa1, 0xc6, 0x6c, 0x14, 0x61, 0x8c, 0xd6, 0x40, 0xf6, 0xec, 0xb6, 0xab, 0x63, 0x55, 0xb7, + 0x1b, 0x58, 0x35, 0xac, 0x3d, 0xbb, 0x98, 0xa5, 0x04, 0xa7, 0x7a, 0x07, 0x42, 0x0d, 0x97, 0xed, + 0x06, 0x5e, 0xb3, 0xf6, 0x6c, 0xa5, 0xe0, 0x75, 0x3c, 0xa3, 0x13, 0x30, 0xec, 0x1d, 0x58, 0xbe, + 0xf6, 0x62, 0x31, 0x4f, 0x33, 0x84, 0x3f, 0x95, 0xbe, 0x3d, 0x0c, 0x63, 0x83, 0xa4, 0xd8, 0x25, + 0x48, 0xef, 0x91, 0x51, 0x16, 0x13, 0xc7, 0x89, 0x01, 0xc3, 0x74, 0x06, 0x71, 0xf8, 0x47, 0x0c, + 0x62, 0x05, 0x72, 0x16, 0xf6, 0x7c, 0xdc, 0x60, 0x19, 0x91, 0x1c, 0x30, 0xa7, 0x80, 0x81, 0x7a, + 0x53, 0x2a, 0xf5, 0x23, 0xa5, 0xd4, 0x73, 0x30, 0x16, 0xb8, 0xa4, 0xba, 0x9a, 0xd5, 0x14, 0xb9, + 0x39, 0x17, 0xe7, 0xc9, 0x6c, 0x55, 0xe0, 0x14, 0x02, 0x53, 0x0a, 0xb8, 0xe3, 0x19, 0xad, 0x00, + 0xd8, 0x16, 0xb6, 0xf7, 0xd4, 0x06, 0xd6, 0xcd, 0x62, 0xe6, 0x88, 0x28, 0xd5, 0x88, 0x49, 0x4f, + 0x94, 0x6c, 0x26, 0xd5, 0x4d, 0x74, 0x31, 0x4c, 0xb5, 0x91, 0x23, 0x32, 0x65, 0x83, 0x2d, 0xb2, + 0x9e, 0x6c, 0xdb, 0x81, 0x82, 0x8b, 0x49, 0xde, 0xe3, 0x06, 0x1f, 0x59, 0x96, 0x3a, 0x31, 0x1b, + 0x3b, 0x32, 0x85, 0xc3, 0xd8, 0xc0, 0x46, 0xdd, 0xe8, 0x23, 0x7a, 0x10, 0x02, 0x81, 0x4a, 0xd3, + 0x0a, 0x68, 0x15, 0xca, 0x0b, 0xe1, 0xa6, 0xd6, 0xc2, 0x53, 0x37, 0xa1, 0xd0, 0x19, 0x1e, 0x34, + 0x09, 0x69, 0xcf, 0xd7, 0x5c, 0x9f, 0x66, 0x61, 0x5a, 0x61, 0x0f, 0x48, 0x86, 0x24, 0xb6, 0x1a, + 0xb4, 0xca, 0xa5, 0x15, 0xf2, 0x27, 0xfa, 0xe9, 0x70, 0xc0, 0x49, 0x3a, 0xe0, 0x8f, 0xf4, 0xce, + 0x68, 0x07, 0x73, 0xf7, 0xb8, 0xa7, 0xce, 0xc3, 0x68, 0xc7, 0x00, 0x06, 0x7d, 0x75, 0xe9, 0xe7, + 0xe0, 0x9e, 0xbe, 0xd4, 0xe8, 0x39, 0x98, 0x6c, 0x5b, 0x86, 0xe5, 0x63, 0xd7, 0x71, 0x31, 0xc9, + 0x58, 0xf6, 0xaa, 0xe2, 0xbf, 0x8c, 0x1c, 0x91, 0x73, 0x3b, 0x51, 0x6b, 0xc6, 0xa2, 0x4c, 0xb4, + 0x7b, 0x85, 0x8f, 0x65, 0x33, 0x3f, 0x18, 0x91, 0x6f, 0xdd, 0xba, 0x75, 0x2b, 0x51, 0xfa, 0xdc, + 0x30, 0x4c, 0xf6, 0x5b, 0x33, 0x7d, 0x97, 0xef, 0x09, 0x18, 0xb6, 0xda, 0xad, 0x5d, 0xec, 0xd2, + 0x20, 0xa5, 0x15, 0xfe, 0x84, 0x2a, 0x90, 0x36, 0xb5, 0x5d, 0x6c, 0x16, 0x53, 0xa7, 0xa5, 0x99, + 0xc2, 0xfc, 0xe3, 0x03, 0xad, 0xca, 0xd9, 0x75, 0x02, 0x51, 0x18, 0x12, 0x7d, 0x1c, 0x52, 0xbc, + 0x44, 0x13, 0x86, 0xc7, 0x06, 0x63, 0x20, 0x6b, 0x49, 0xa1, 0x38, 0x74, 0x1f, 0x64, 0xc9, 0xbf, + 0x2c, 0x37, 0x86, 0xa9, 0xcf, 0x19, 0x22, 0x20, 0x79, 0x81, 0xa6, 0x20, 0x43, 0x97, 0x49, 0x03, + 0x8b, 0xad, 0x2d, 0x78, 0x26, 0x89, 0xd5, 0xc0, 0x7b, 0x5a, 0xdb, 0xf4, 0xd5, 0xeb, 0x9a, 0xd9, + 0xc6, 0x34, 0xe1, 0xb3, 0x4a, 0x9e, 0x0b, 0x3f, 0x49, 0x64, 0xe8, 0x14, 0xe4, 0xd8, 0xaa, 0x32, + 0xac, 0x06, 0x7e, 0x91, 0x56, 0xcf, 0xb4, 0xc2, 0x16, 0xda, 0x1a, 0x91, 0x90, 0xd7, 0x5f, 0xf5, + 0x6c, 0x4b, 0xa4, 0x26, 0x7d, 0x05, 0x11, 0xd0, 0xd7, 0x9f, 0xef, 0x2e, 0xdc, 0x0f, 0xf4, 0x1f, + 0x5e, 0x77, 0x4e, 0x95, 0xbe, 0x99, 0x80, 0x14, 0xad, 0x17, 0x63, 0x90, 0xdb, 0x7e, 0x7e, 0xab, + 0xaa, 0xae, 0xd4, 0x76, 0x96, 0xd6, 0xab, 0xb2, 0x84, 0x0a, 0x00, 0x54, 0x70, 0x79, 0xbd, 0x56, + 0xd9, 0x96, 0x13, 0xc1, 0xf3, 0xda, 0xe6, 0xf6, 0xb9, 0x05, 0x39, 0x19, 0x00, 0x76, 0x98, 0x20, + 0x15, 0x35, 0x38, 0x3b, 0x2f, 0xa7, 0x91, 0x0c, 0x79, 0x46, 0xb0, 0xf6, 0x5c, 0x75, 0xe5, 0xdc, + 0x82, 0x3c, 0xdc, 0x29, 0x39, 0x3b, 0x2f, 0x8f, 0xa0, 0x51, 0xc8, 0x52, 0xc9, 0x52, 0xad, 0xb6, + 0x2e, 0x67, 0x02, 0xce, 0xfa, 0xb6, 0xb2, 0xb6, 0xb9, 0x2a, 0x67, 0x03, 0xce, 0x55, 0xa5, 0xb6, + 0xb3, 0x25, 0x43, 0xc0, 0xb0, 0x51, 0xad, 0xd7, 0x2b, 0xab, 0x55, 0x39, 0x17, 0x58, 0x2c, 0x3d, + 0xbf, 0x5d, 0xad, 0xcb, 0xf9, 0x0e, 0xb7, 0xce, 0xce, 0xcb, 0xa3, 0xc1, 0x2b, 0xaa, 0x9b, 0x3b, + 0x1b, 0x72, 0x01, 0x8d, 0xc3, 0x28, 0x7b, 0x85, 0x70, 0x62, 0xac, 0x4b, 0x74, 0x6e, 0x41, 0x96, + 0x43, 0x47, 0x18, 0xcb, 0x78, 0x87, 0xe0, 0xdc, 0x82, 0x8c, 0x4a, 0xcb, 0x90, 0xa6, 0xd9, 0x85, + 0x10, 0x14, 0xd6, 0x2b, 0x4b, 0xd5, 0x75, 0xb5, 0xb6, 0xb5, 0xbd, 0x56, 0xdb, 0xac, 0xac, 0xcb, + 0x52, 0x28, 0x53, 0xaa, 0x9f, 0xd8, 0x59, 0x53, 0xaa, 0x2b, 0x72, 0x22, 0x2a, 0xdb, 0xaa, 0x56, + 0xb6, 0xab, 0x2b, 0x72, 0xb2, 0xa4, 0xc3, 0x64, 0xbf, 0x3a, 0xd9, 0x77, 0x65, 0x44, 0xa6, 0x38, + 0x71, 0xc4, 0x14, 0x53, 0xae, 0x9e, 0x29, 0xfe, 0x7e, 0x02, 0x26, 0xfa, 0xec, 0x15, 0x7d, 0x5f, + 0xf2, 0x34, 0xa4, 0x59, 0x8a, 0xb2, 0xdd, 0xf3, 0xd1, 0xbe, 0x9b, 0x0e, 0x4d, 0xd8, 0x9e, 0x1d, + 0x94, 0xe2, 0xa2, 0x1d, 0x44, 0xf2, 0x88, 0x0e, 0x82, 0x50, 0xf4, 0xd4, 0xf4, 0x9f, 0xed, 0xa9, + 0xe9, 0x6c, 0xdb, 0x3b, 0x37, 0xc8, 0xb6, 0x47, 0x65, 0xc7, 0xab, 0xed, 0xe9, 0x3e, 0xb5, 0xfd, + 0x12, 0x8c, 0xf7, 0x10, 0x0d, 0x5c, 0x63, 0x5f, 0x92, 0xa0, 0x78, 0x54, 0x70, 0x62, 0x2a, 0x5d, + 0xa2, 0xa3, 0xd2, 0x5d, 0xea, 0x8e, 0xe0, 0x99, 0xa3, 0x27, 0xa1, 0x67, 0xae, 0x5f, 0x93, 0xe0, + 0x44, 0xff, 0x4e, 0xb1, 0xaf, 0x0f, 0x1f, 0x87, 0xe1, 0x16, 0xf6, 0xf7, 0x6d, 0xd1, 0x2d, 0x7d, + 0xa4, 0xcf, 0x1e, 0x4c, 0xd4, 0xdd, 0x93, 0xcd, 0x51, 0xd1, 0x4d, 0x3c, 0x79, 0x54, 0xbb, 0xc7, + 0xbc, 0xe9, 0xf1, 0xf4, 0x33, 0x09, 0xb8, 0xa7, 0x2f, 0x79, 0x5f, 0x47, 0x1f, 0x00, 0x30, 0x2c, + 0xa7, 0xed, 0xb3, 0x8e, 0x88, 0x15, 0xd8, 0x2c, 0x95, 0xd0, 0xe2, 0x45, 0x8a, 0x67, 0xdb, 0x0f, + 0xf4, 0x49, 0xaa, 0x07, 0x26, 0xa2, 0x06, 0x17, 0x42, 0x47, 0x53, 0xd4, 0xd1, 0xe9, 0x23, 0x46, + 0xda, 0x93, 0x98, 0x4f, 0x82, 0xac, 0x9b, 0x06, 0xb6, 0x7c, 0xd5, 0xf3, 0x5d, 0xac, 0xb5, 0x0c, + 0xab, 0x49, 0x77, 0x90, 0x4c, 0x39, 0xbd, 0xa7, 0x99, 0x1e, 0x56, 0xc6, 0x98, 0xba, 0x2e, 0xb4, + 0x04, 0x41, 0x13, 0xc8, 0x8d, 0x20, 0x86, 0x3b, 0x10, 0x4c, 0x1d, 0x20, 0x4a, 0xdf, 0xc8, 0x40, + 0x2e, 0xd2, 0x57, 0xa3, 0x33, 0x90, 0xbf, 0xaa, 0x5d, 0xd7, 0x54, 0x71, 0x56, 0x62, 0x91, 0xc8, + 0x11, 0xd9, 0x16, 0x3f, 0x2f, 0x3d, 0x09, 0x93, 0xd4, 0xc4, 0x6e, 0xfb, 0xd8, 0x55, 0x75, 0x53, + 0xf3, 0x3c, 0x1a, 0xb4, 0x0c, 0x35, 0x45, 0x44, 0x57, 0x23, 0xaa, 0x65, 0xa1, 0x41, 0x8b, 0x30, + 0x41, 0x11, 0xad, 0xb6, 0xe9, 0x1b, 0x8e, 0x89, 0x55, 0x72, 0x7a, 0xf3, 0xe8, 0x4e, 0x12, 0x78, + 0x36, 0x4e, 0x2c, 0x36, 0xb8, 0x01, 0xf1, 0xc8, 0x43, 0x2b, 0xf0, 0x00, 0x85, 0x35, 0xb1, 0x85, + 0x5d, 0xcd, 0xc7, 0x2a, 0xfe, 0x74, 0x5b, 0x33, 0x3d, 0x55, 0xb3, 0x1a, 0xea, 0xbe, 0xe6, 0xed, + 0x17, 0x27, 0x09, 0xc1, 0x52, 0xa2, 0x28, 0x29, 0x27, 0x89, 0xe1, 0x2a, 0xb7, 0xab, 0x52, 0xb3, + 0x8a, 0xd5, 0xb8, 0xa2, 0x79, 0xfb, 0xa8, 0x0c, 0x27, 0x28, 0x8b, 0xe7, 0xbb, 0x86, 0xd5, 0x54, + 0xf5, 0x7d, 0xac, 0x5f, 0x53, 0xdb, 0xfe, 0xde, 0x85, 0xe2, 0x7d, 0xd1, 0xf7, 0x53, 0x0f, 0xeb, + 0xd4, 0x66, 0x99, 0x98, 0xec, 0xf8, 0x7b, 0x17, 0x50, 0x1d, 0xf2, 0x64, 0x32, 0x5a, 0xc6, 0x4d, + 0xac, 0xee, 0xd9, 0x2e, 0xdd, 0x1a, 0x0b, 0x7d, 0x4a, 0x53, 0x24, 0x82, 0xb3, 0x35, 0x0e, 0xd8, + 0xb0, 0x1b, 0xb8, 0x9c, 0xae, 0x6f, 0x55, 0xab, 0x2b, 0x4a, 0x4e, 0xb0, 0x5c, 0xb6, 0x5d, 0x92, + 0x50, 0x4d, 0x3b, 0x08, 0x70, 0x8e, 0x25, 0x54, 0xd3, 0x16, 0xe1, 0x5d, 0x84, 0x09, 0x5d, 0x67, + 0x63, 0x36, 0x74, 0x95, 0x9f, 0xb1, 0xbc, 0xa2, 0xdc, 0x11, 0x2c, 0x5d, 0x5f, 0x65, 0x06, 0x3c, + 0xc7, 0x3d, 0x74, 0x11, 0xee, 0x09, 0x83, 0x15, 0x05, 0x8e, 0xf7, 0x8c, 0xb2, 0x1b, 0xba, 0x08, + 0x13, 0xce, 0x41, 0x2f, 0x10, 0x75, 0xbc, 0xd1, 0x39, 0xe8, 0x86, 0x9d, 0x87, 0x49, 0x67, 0xdf, + 0xe9, 0xc5, 0x3d, 0x16, 0xc5, 0x21, 0x67, 0xdf, 0xe9, 0x06, 0x3e, 0x4c, 0x0f, 0xdc, 0x2e, 0xd6, + 0x35, 0x1f, 0x37, 0x8a, 0xf7, 0x46, 0xcd, 0x23, 0x0a, 0x34, 0x07, 0xb2, 0xae, 0xab, 0xd8, 0xd2, + 0x76, 0x4d, 0xac, 0x6a, 0x2e, 0xb6, 0x34, 0xaf, 0x78, 0x2a, 0x6a, 0x5c, 0xd0, 0xf5, 0x2a, 0xd5, + 0x56, 0xa8, 0x12, 0x3d, 0x06, 0xe3, 0xf6, 0xee, 0x55, 0x9d, 0xa5, 0xa4, 0xea, 0xb8, 0x78, 0xcf, + 0x78, 0xb1, 0xf8, 0x10, 0x8d, 0xef, 0x18, 0x51, 0xd0, 0x84, 0xdc, 0xa2, 0x62, 0xf4, 0x28, 0xc8, + 0xba, 0xb7, 0xaf, 0xb9, 0x0e, 0xad, 0xc9, 0x9e, 0xa3, 0xe9, 0xb8, 0xf8, 0x30, 0x33, 0x65, 0xf2, + 0x4d, 0x21, 0x26, 0x4b, 0xc2, 0xbb, 0x61, 0xec, 0xf9, 0x82, 0xf1, 0x11, 0xb6, 0x24, 0xa8, 0x8c, + 0xb3, 0xcd, 0x80, 0x4c, 0x42, 0xd1, 0xf1, 0xe2, 0x19, 0x6a, 0x56, 0x70, 0xf6, 0x9d, 0xe8, 0x7b, + 0x1f, 0x84, 0x51, 0x62, 0x19, 0xbe, 0xf4, 0x51, 0xd6, 0x90, 0x39, 0xfb, 0x91, 0x37, 0x7e, 0x60, + 0xbd, 0x71, 0xa9, 0x0c, 0xf9, 0x68, 0x7e, 0xa2, 0x2c, 0xb0, 0x0c, 0x95, 0x25, 0xd2, 0xac, 0x2c, + 0xd7, 0x56, 0x48, 0x9b, 0xf1, 0x42, 0x55, 0x4e, 0x90, 0x76, 0x67, 0x7d, 0x6d, 0xbb, 0xaa, 0x2a, + 0x3b, 0x9b, 0xdb, 0x6b, 0x1b, 0x55, 0x39, 0x19, 0xed, 0xab, 0xbf, 0x9b, 0x80, 0x42, 0xe7, 0x11, + 0x09, 0xfd, 0x14, 0xdc, 0x2b, 0xee, 0x33, 0x3c, 0xec, 0xab, 0x37, 0x0c, 0x97, 0x2e, 0x99, 0x96, + 0xc6, 0xb6, 0xaf, 0x60, 0xd2, 0x26, 0xb9, 0x55, 0x1d, 0xfb, 0xcf, 0x1a, 0x2e, 0x59, 0x10, 0x2d, + 0xcd, 0x47, 0xeb, 0x70, 0xca, 0xb2, 0x55, 0xcf, 0xd7, 0xac, 0x86, 0xe6, 0x36, 0xd4, 0xf0, 0x26, + 0x49, 0xd5, 0x74, 0x1d, 0x7b, 0x9e, 0xcd, 0xb6, 0xaa, 0x80, 0xe5, 0x7e, 0xcb, 0xae, 0x73, 0xe3, + 0xb0, 0x86, 0x57, 0xb8, 0x69, 0x57, 0x82, 0x25, 0x8f, 0x4a, 0xb0, 0xfb, 0x20, 0xdb, 0xd2, 0x1c, + 0x15, 0x5b, 0xbe, 0x7b, 0x40, 0x1b, 0xe3, 0x8c, 0x92, 0x69, 0x69, 0x4e, 0x95, 0x3c, 0x7f, 0x38, + 0xe7, 0x93, 0x7f, 0x4e, 0x42, 0x3e, 0xda, 0x1c, 0x93, 0xb3, 0x86, 0x4e, 0xf7, 0x11, 0x89, 0x56, + 0x9a, 0x07, 0xef, 0xda, 0x4a, 0xcf, 0x2e, 0x93, 0x0d, 0xa6, 0x3c, 0xcc, 0x5a, 0x56, 0x85, 0x21, + 0xc9, 0xe6, 0x4e, 0x6a, 0x0b, 0x66, 0x2d, 0x42, 0x46, 0xe1, 0x4f, 0x68, 0x15, 0x86, 0xaf, 0x7a, + 0x94, 0x7b, 0x98, 0x72, 0x3f, 0x74, 0x77, 0xee, 0x67, 0xea, 0x94, 0x3c, 0xfb, 0x4c, 0x5d, 0xdd, + 0xac, 0x29, 0x1b, 0x95, 0x75, 0x85, 0xc3, 0xd1, 0x49, 0x48, 0x99, 0xda, 0xcd, 0x83, 0xce, 0xad, + 0x88, 0x8a, 0x06, 0x0d, 0xfc, 0x49, 0x48, 0xdd, 0xc0, 0xda, 0xb5, 0xce, 0x0d, 0x80, 0x8a, 0x3e, + 0xc0, 0xd4, 0x9f, 0x83, 0x34, 0x8d, 0x17, 0x02, 0xe0, 0x11, 0x93, 0x87, 0x50, 0x06, 0x52, 0xcb, + 0x35, 0x85, 0xa4, 0xbf, 0x0c, 0x79, 0x26, 0x55, 0xb7, 0xd6, 0xaa, 0xcb, 0x55, 0x39, 0x51, 0x5a, + 0x84, 0x61, 0x16, 0x04, 0xb2, 0x34, 0x82, 0x30, 0xc8, 0x43, 0xfc, 0x91, 0x73, 0x48, 0x42, 0xbb, + 0xb3, 0xb1, 0x54, 0x55, 0xe4, 0x44, 0x74, 0x7a, 0x3d, 0xc8, 0x47, 0xfb, 0xe2, 0x0f, 0x27, 0xa7, + 0xbe, 0x23, 0x41, 0x2e, 0xd2, 0xe7, 0x92, 0x06, 0x45, 0x33, 0x4d, 0xfb, 0x86, 0xaa, 0x99, 0x86, + 0xe6, 0xf1, 0xa4, 0x00, 0x2a, 0xaa, 0x10, 0xc9, 0xa0, 0x93, 0xf6, 0xa1, 0x38, 0xff, 0xaa, 0x04, + 0x72, 0x77, 0x8b, 0xd9, 0xe5, 0xa0, 0xf4, 0x13, 0x75, 0xf0, 0x15, 0x09, 0x0a, 0x9d, 0x7d, 0x65, + 0x97, 0x7b, 0x67, 0x7e, 0xa2, 0xee, 0xbd, 0x95, 0x80, 0xd1, 0x8e, 0x6e, 0x72, 0x50, 0xef, 0x3e, + 0x0d, 0xe3, 0x46, 0x03, 0xb7, 0x1c, 0xdb, 0xc7, 0x96, 0x7e, 0xa0, 0x9a, 0xf8, 0x3a, 0x36, 0x8b, + 0x25, 0x5a, 0x28, 0xe6, 0xee, 0xde, 0xaf, 0xce, 0xae, 0x85, 0xb8, 0x75, 0x02, 0x2b, 0x4f, 0xac, + 0xad, 0x54, 0x37, 0xb6, 0x6a, 0xdb, 0xd5, 0xcd, 0xe5, 0xe7, 0xd5, 0x9d, 0xcd, 0x9f, 0xd9, 0xac, + 0x3d, 0xbb, 0xa9, 0xc8, 0x46, 0x97, 0xd9, 0x07, 0xb8, 0xd4, 0xb7, 0x40, 0xee, 0x76, 0x0a, 0xdd, + 0x0b, 0xfd, 0xdc, 0x92, 0x87, 0xd0, 0x04, 0x8c, 0x6d, 0xd6, 0xd4, 0xfa, 0xda, 0x4a, 0x55, 0xad, + 0x5e, 0xbe, 0x5c, 0x5d, 0xde, 0xae, 0xb3, 0x1b, 0x88, 0xc0, 0x7a, 0xbb, 0x73, 0x51, 0xbf, 0x9c, + 0x84, 0x89, 0x3e, 0x9e, 0xa0, 0x0a, 0x3f, 0x3b, 0xb0, 0xe3, 0xcc, 0x13, 0x83, 0x78, 0x3f, 0x4b, + 0xb6, 0xfc, 0x2d, 0xcd, 0xf5, 0xf9, 0x51, 0xe3, 0x51, 0x20, 0x51, 0xb2, 0x7c, 0x63, 0xcf, 0xc0, + 0x2e, 0xbf, 0xb0, 0x61, 0x07, 0x8a, 0xb1, 0x50, 0xce, 0xee, 0x6c, 0x3e, 0x0a, 0xc8, 0xb1, 0x3d, + 0xc3, 0x37, 0xae, 0x63, 0xd5, 0xb0, 0xc4, 0xed, 0x0e, 0x39, 0x60, 0xa4, 0x14, 0x59, 0x68, 0xd6, + 0x2c, 0x3f, 0xb0, 0xb6, 0x70, 0x53, 0xeb, 0xb2, 0x26, 0x05, 0x3c, 0xa9, 0xc8, 0x42, 0x13, 0x58, + 0x9f, 0x81, 0x7c, 0xc3, 0x6e, 0x93, 0xae, 0x8b, 0xd9, 0x91, 0xfd, 0x42, 0x52, 0x72, 0x4c, 0x16, + 0x98, 0xf0, 0x7e, 0x3a, 0xbc, 0x56, 0xca, 0x2b, 0x39, 0x26, 0x63, 0x26, 0x8f, 0xc0, 0x98, 0xd6, + 0x6c, 0xba, 0x84, 0x5c, 0x10, 0xb1, 0x13, 0x42, 0x21, 0x10, 0x53, 0xc3, 0xa9, 0x67, 0x20, 0x23, + 0xe2, 0x40, 0xb6, 0x64, 0x12, 0x09, 0xd5, 0x61, 0xc7, 0xde, 0xc4, 0x4c, 0x56, 0xc9, 0x58, 0x42, + 0x79, 0x06, 0xf2, 0x86, 0xa7, 0x86, 0xb7, 0xe4, 0x89, 0xd3, 0x89, 0x99, 0x8c, 0x92, 0x33, 0xbc, + 0xe0, 0x86, 0xb1, 0xf4, 0x5a, 0x02, 0x0a, 0x9d, 0xb7, 0xfc, 0x68, 0x05, 0x32, 0xa6, 0xad, 0x6b, + 0x34, 0xb5, 0xd8, 0x27, 0xa6, 0x99, 0x98, 0x0f, 0x03, 0xb3, 0xeb, 0xdc, 0x5e, 0x09, 0x90, 0x53, + 0xff, 0x20, 0x41, 0x46, 0x88, 0xd1, 0x09, 0x48, 0x39, 0x9a, 0xbf, 0x4f, 0xe9, 0xd2, 0x4b, 0x09, + 0x59, 0x52, 0xe8, 0x33, 0x91, 0x7b, 0x8e, 0x66, 0xd1, 0x14, 0xe0, 0x72, 0xf2, 0x4c, 0xe6, 0xd5, + 0xc4, 0x5a, 0x83, 0x1e, 0x3f, 0xec, 0x56, 0x0b, 0x5b, 0xbe, 0x27, 0xe6, 0x95, 0xcb, 0x97, 0xb9, + 0x18, 0x3d, 0x0e, 0xe3, 0xbe, 0xab, 0x19, 0x66, 0x87, 0x6d, 0x8a, 0xda, 0xca, 0x42, 0x11, 0x18, + 0x97, 0xe1, 0xa4, 0xe0, 0x6d, 0x60, 0x5f, 0xd3, 0xf7, 0x71, 0x23, 0x04, 0x0d, 0xd3, 0x6b, 0x86, + 0x7b, 0xb9, 0xc1, 0x0a, 0xd7, 0x0b, 0x6c, 0xe9, 0x7b, 0x12, 0x8c, 0x8b, 0x03, 0x53, 0x23, 0x08, + 0xd6, 0x06, 0x80, 0x66, 0x59, 0xb6, 0x1f, 0x0d, 0x57, 0x6f, 0x2a, 0xf7, 0xe0, 0x66, 0x2b, 0x01, + 0x48, 0x89, 0x10, 0x4c, 0xb5, 0x00, 0x42, 0xcd, 0x91, 0x61, 0x3b, 0x05, 0x39, 0xfe, 0x09, 0x87, + 0x7e, 0x07, 0x64, 0x47, 0x6c, 0x60, 0x22, 0x72, 0xb2, 0x42, 0x93, 0x90, 0xde, 0xc5, 0x4d, 0xc3, + 0xe2, 0x17, 0xb3, 0xec, 0x41, 0x5c, 0x84, 0xa4, 0x82, 0x8b, 0x90, 0xa5, 0x4f, 0xc1, 0x84, 0x6e, + 0xb7, 0xba, 0xdd, 0x5d, 0x92, 0xbb, 0x8e, 0xf9, 0xde, 0x15, 0xe9, 0x05, 0x08, 0x5b, 0xcc, 0xf7, + 0x24, 0xe9, 0x4b, 0x89, 0xe4, 0xea, 0xd6, 0xd2, 0x57, 0x13, 0x53, 0xab, 0x0c, 0xba, 0x25, 0x46, + 0xaa, 0xe0, 0x3d, 0x13, 0xeb, 0xc4, 0x7b, 0xf8, 0xf2, 0xe3, 0xf0, 0x44, 0xd3, 0xf0, 0xf7, 0xdb, + 0xbb, 0xb3, 0xba, 0xdd, 0x9a, 0x6b, 0xda, 0x4d, 0x3b, 0xfc, 0xf4, 0x49, 0x9e, 0xe8, 0x03, 0xfd, + 0x8b, 0x7f, 0xfe, 0xcc, 0x06, 0xd2, 0xa9, 0xd8, 0x6f, 0xa5, 0xe5, 0x4d, 0x98, 0xe0, 0xc6, 0x2a, + 0xfd, 0xfe, 0xc2, 0x4e, 0x11, 0xe8, 0xae, 0x77, 0x58, 0xc5, 0xaf, 0xbf, 0x4d, 0xb7, 0x6b, 0x65, + 0x9c, 0x43, 0x89, 0x8e, 0x1d, 0x34, 0xca, 0x0a, 0xdc, 0xd3, 0xc1, 0xc7, 0x96, 0x26, 0x76, 0x63, + 0x18, 0xbf, 0xcb, 0x19, 0x27, 0x22, 0x8c, 0x75, 0x0e, 0x2d, 0x2f, 0xc3, 0xe8, 0x71, 0xb8, 0xfe, + 0x8e, 0x73, 0xe5, 0x71, 0x94, 0x64, 0x15, 0xc6, 0x28, 0x89, 0xde, 0xf6, 0x7c, 0xbb, 0x45, 0xeb, + 0xde, 0xdd, 0x69, 0xfe, 0xfe, 0x6d, 0xb6, 0x56, 0x0a, 0x04, 0xb6, 0x1c, 0xa0, 0xca, 0x65, 0xa0, + 0x9f, 0x9c, 0x1a, 0x58, 0x37, 0x63, 0x18, 0x5e, 0xe7, 0x8e, 0x04, 0xf6, 0xe5, 0x4f, 0xc2, 0x24, + 0xf9, 0x9b, 0x96, 0xa5, 0xa8, 0x27, 0xf1, 0x17, 0x5e, 0xc5, 0xef, 0xbd, 0xc4, 0x96, 0xe3, 0x44, + 0x40, 0x10, 0xf1, 0x29, 0x32, 0x8b, 0x4d, 0xec, 0xfb, 0xd8, 0xf5, 0x54, 0xcd, 0xec, 0xe7, 0x5e, + 0xe4, 0xc6, 0xa0, 0xf8, 0xf9, 0x77, 0x3a, 0x67, 0x71, 0x95, 0x21, 0x2b, 0xa6, 0x59, 0xde, 0x81, + 0x7b, 0xfb, 0x64, 0xc5, 0x00, 0x9c, 0x2f, 0x73, 0xce, 0xc9, 0x9e, 0xcc, 0x20, 0xb4, 0x5b, 0x20, + 0xe4, 0xc1, 0x5c, 0x0e, 0xc0, 0xf9, 0xbb, 0x9c, 0x13, 0x71, 0xac, 0x98, 0x52, 0xc2, 0xf8, 0x0c, + 0x8c, 0x5f, 0xc7, 0xee, 0xae, 0xed, 0xf1, 0x5b, 0x9a, 0x01, 0xe8, 0x5e, 0xe1, 0x74, 0x63, 0x1c, + 0x48, 0xaf, 0x6d, 0x08, 0xd7, 0x45, 0xc8, 0xec, 0x69, 0x3a, 0x1e, 0x80, 0xe2, 0x0b, 0x9c, 0x62, + 0x84, 0xd8, 0x13, 0x68, 0x05, 0xf2, 0x4d, 0x9b, 0xef, 0x4c, 0xf1, 0xf0, 0x57, 0x39, 0x3c, 0x27, + 0x30, 0x9c, 0xc2, 0xb1, 0x9d, 0xb6, 0x49, 0xb6, 0xad, 0x78, 0x8a, 0xdf, 0x13, 0x14, 0x02, 0xc3, + 0x29, 0x8e, 0x11, 0xd6, 0xdf, 0x17, 0x14, 0x5e, 0x24, 0x9e, 0x4f, 0x43, 0xce, 0xb6, 0xcc, 0x03, + 0xdb, 0x1a, 0xc4, 0x89, 0x2f, 0x72, 0x06, 0xe0, 0x10, 0x42, 0x70, 0x09, 0xb2, 0x83, 0x4e, 0xc4, + 0x1f, 0xbe, 0x23, 0x96, 0x87, 0x98, 0x81, 0x55, 0x18, 0x13, 0x05, 0xca, 0xb0, 0xad, 0x01, 0x28, + 0xbe, 0xcc, 0x29, 0x0a, 0x11, 0x18, 0x1f, 0x86, 0x8f, 0x3d, 0xbf, 0x89, 0x07, 0x21, 0x79, 0x4d, + 0x0c, 0x83, 0x43, 0x78, 0x28, 0x77, 0xb1, 0xa5, 0xef, 0x0f, 0xc6, 0xf0, 0x15, 0x11, 0x4a, 0x81, + 0x21, 0x14, 0xcb, 0x30, 0xda, 0xd2, 0x5c, 0x6f, 0x5f, 0x33, 0x07, 0x9a, 0x8e, 0x3f, 0xe2, 0x1c, + 0xf9, 0x00, 0xc4, 0x23, 0xd2, 0xb6, 0x8e, 0x43, 0xf3, 0x55, 0x11, 0x91, 0x08, 0x8c, 0x2f, 0x3d, + 0xcf, 0xa7, 0x57, 0x5a, 0xc7, 0x61, 0xfb, 0x63, 0xb1, 0xf4, 0x18, 0x76, 0x23, 0xca, 0x78, 0x09, + 0xb2, 0x9e, 0x71, 0x73, 0x20, 0x9a, 0x3f, 0x11, 0x33, 0x4d, 0x01, 0x04, 0xfc, 0x3c, 0x9c, 0xec, + 0xbb, 0x4d, 0x0c, 0x40, 0xf6, 0xa7, 0x9c, 0xec, 0x44, 0x9f, 0xad, 0x82, 0x97, 0x84, 0xe3, 0x52, + 0xfe, 0x99, 0x28, 0x09, 0xb8, 0x8b, 0x6b, 0x8b, 0x9c, 0x15, 0x3c, 0x6d, 0xef, 0x78, 0x51, 0xfb, + 0x73, 0x11, 0x35, 0x86, 0xed, 0x88, 0xda, 0x36, 0x9c, 0xe0, 0x8c, 0xc7, 0x9b, 0xd7, 0xaf, 0x89, + 0xc2, 0xca, 0xd0, 0x3b, 0x9d, 0xb3, 0xfb, 0x29, 0x98, 0x0a, 0xc2, 0x29, 0x9a, 0x52, 0x4f, 0x6d, + 0x69, 0xce, 0x00, 0xcc, 0x5f, 0xe7, 0xcc, 0xa2, 0xe2, 0x07, 0x5d, 0xad, 0xb7, 0xa1, 0x39, 0x84, + 0xfc, 0x39, 0x28, 0x0a, 0xf2, 0xb6, 0xe5, 0x62, 0xdd, 0x6e, 0x5a, 0xc6, 0x4d, 0xdc, 0x18, 0x80, + 0xfa, 0x2f, 0xba, 0xa6, 0x6a, 0x27, 0x02, 0x27, 0xcc, 0x6b, 0x20, 0x07, 0xbd, 0x8a, 0x6a, 0xb4, + 0x1c, 0xdb, 0xf5, 0x63, 0x18, 0xbf, 0x21, 0x66, 0x2a, 0xc0, 0xad, 0x51, 0x58, 0xb9, 0x0a, 0x05, + 0xfa, 0x38, 0x68, 0x4a, 0xfe, 0x25, 0x27, 0x1a, 0x0d, 0x51, 0xbc, 0x70, 0xe8, 0x76, 0xcb, 0xd1, + 0xdc, 0x41, 0xea, 0xdf, 0x5f, 0x89, 0xc2, 0xc1, 0x21, 0xbc, 0x70, 0xf8, 0x07, 0x0e, 0x26, 0xbb, + 0xfd, 0x00, 0x0c, 0xdf, 0x14, 0x85, 0x43, 0x60, 0x38, 0x85, 0x68, 0x18, 0x06, 0xa0, 0xf8, 0x6b, + 0x41, 0x21, 0x30, 0x84, 0xe2, 0x13, 0xe1, 0x46, 0xeb, 0xe2, 0xa6, 0xe1, 0xf9, 0x2e, 0x6b, 0x85, + 0xef, 0x4e, 0xf5, 0xad, 0x77, 0x3a, 0x9b, 0x30, 0x25, 0x02, 0x25, 0x95, 0x88, 0x5f, 0xa1, 0xd2, + 0x93, 0x52, 0xbc, 0x63, 0xdf, 0x16, 0x95, 0x28, 0x02, 0x23, 0xbe, 0x45, 0x3a, 0x44, 0x12, 0x76, + 0x9d, 0x9c, 0x0f, 0x06, 0xa0, 0xfb, 0x4e, 0x97, 0x73, 0x75, 0x81, 0x25, 0x9c, 0x91, 0xfe, 0xa7, + 0x6d, 0x5d, 0xc3, 0x07, 0x03, 0x65, 0xe7, 0xdf, 0x74, 0xf5, 0x3f, 0x3b, 0x0c, 0xc9, 0x6a, 0xc8, + 0x58, 0x57, 0x3f, 0x85, 0xe2, 0x7e, 0xac, 0x53, 0xfc, 0xf9, 0x3b, 0x7c, 0xbc, 0x9d, 0xed, 0x54, + 0x79, 0x9d, 0x24, 0x79, 0x67, 0xd3, 0x13, 0x4f, 0xf6, 0xd2, 0x9d, 0x20, 0xcf, 0x3b, 0x7a, 0x9e, + 0xf2, 0x65, 0x18, 0xed, 0x68, 0x78, 0xe2, 0xa9, 0x7e, 0x81, 0x53, 0xe5, 0xa3, 0xfd, 0x4e, 0x79, + 0x11, 0x52, 0xa4, 0x79, 0x89, 0x87, 0xff, 0x22, 0x87, 0x53, 0xf3, 0xf2, 0xc7, 0x20, 0x23, 0x9a, + 0x96, 0x78, 0xe8, 0x2f, 0x71, 0x68, 0x00, 0x21, 0x70, 0xd1, 0xb0, 0xc4, 0xc3, 0x7f, 0x59, 0xc0, + 0x05, 0x84, 0xc0, 0x07, 0x0f, 0xe1, 0xdf, 0xfe, 0x4a, 0x8a, 0x6f, 0x3a, 0x22, 0x76, 0x97, 0x60, + 0x84, 0x77, 0x2a, 0xf1, 0xe8, 0xcf, 0xf0, 0x97, 0x0b, 0x44, 0xf9, 0x3c, 0xa4, 0x07, 0x0c, 0xf8, + 0xaf, 0x72, 0x28, 0xb3, 0x2f, 0x2f, 0x43, 0x2e, 0xd2, 0x9d, 0xc4, 0xc3, 0x7f, 0x8d, 0xc3, 0xa3, + 0x28, 0xe2, 0x3a, 0xef, 0x4e, 0xe2, 0x09, 0x7e, 0x5d, 0xb8, 0xce, 0x11, 0x24, 0x6c, 0xa2, 0x31, + 0x89, 0x47, 0xff, 0x86, 0x88, 0xba, 0x80, 0x94, 0x9f, 0x86, 0x6c, 0xb0, 0xd9, 0xc4, 0xe3, 0x7f, + 0x93, 0xe3, 0x43, 0x0c, 0x89, 0x40, 0x64, 0xb3, 0x8b, 0xa7, 0xf8, 0xac, 0x88, 0x40, 0x04, 0x45, + 0x96, 0x51, 0x77, 0x03, 0x13, 0xcf, 0xf4, 0x5b, 0x62, 0x19, 0x75, 0xf5, 0x2f, 0x64, 0x36, 0x69, + 0xcd, 0x8f, 0xa7, 0xf8, 0x6d, 0x31, 0x9b, 0xd4, 0x9e, 0xb8, 0xd1, 0xdd, 0x11, 0xc4, 0x73, 0xfc, + 0x8e, 0x70, 0xa3, 0xab, 0x21, 0x28, 0x6f, 0x01, 0xea, 0xed, 0x06, 0xe2, 0xf9, 0x3e, 0xc7, 0xf9, + 0xc6, 0x7b, 0x9a, 0x81, 0xf2, 0xb3, 0x70, 0xa2, 0x7f, 0x27, 0x10, 0xcf, 0xfa, 0xf9, 0x3b, 0x5d, + 0x67, 0xb7, 0x68, 0x23, 0x50, 0xde, 0x0e, 0xb7, 0x94, 0x68, 0x17, 0x10, 0x4f, 0xfb, 0xf2, 0x9d, + 0xce, 0xc2, 0x1d, 0x6d, 0x02, 0xca, 0x15, 0x80, 0x70, 0x03, 0x8e, 0xe7, 0x7a, 0x85, 0x73, 0x45, + 0x40, 0x64, 0x69, 0xf0, 0xfd, 0x37, 0x1e, 0xff, 0x05, 0xb1, 0x34, 0x38, 0x82, 0x2c, 0x0d, 0xb1, + 0xf5, 0xc6, 0xa3, 0x5f, 0x15, 0x4b, 0x43, 0x40, 0x48, 0x66, 0x47, 0x76, 0xb7, 0x78, 0x86, 0x2f, + 0x8a, 0xcc, 0x8e, 0xa0, 0xca, 0x9b, 0x30, 0xde, 0xb3, 0x21, 0xc6, 0x53, 0x7d, 0x89, 0x53, 0xc9, + 0xdd, 0xfb, 0x61, 0x74, 0xf3, 0xe2, 0x9b, 0x61, 0x3c, 0xdb, 0x1f, 0x74, 0x6d, 0x5e, 0x7c, 0x2f, + 0x2c, 0x5f, 0x82, 0x8c, 0xd5, 0x36, 0x4d, 0xb2, 0x78, 0xd0, 0xdd, 0x7f, 0x60, 0x57, 0xfc, 0xd7, + 0xf7, 0x79, 0x74, 0x04, 0xa0, 0xbc, 0x08, 0x69, 0xdc, 0xda, 0xc5, 0x8d, 0x38, 0xe4, 0xbf, 0xbd, + 0x2f, 0x0a, 0x26, 0xb1, 0x2e, 0x3f, 0x0d, 0xc0, 0xae, 0x46, 0xe8, 0x67, 0xbf, 0x18, 0xec, 0xbf, + 0xbf, 0xcf, 0x7f, 0xfa, 0x12, 0x42, 0x42, 0x02, 0xf6, 0x43, 0x9a, 0xbb, 0x13, 0xbc, 0xd3, 0x49, + 0x40, 0x67, 0xe4, 0x22, 0x8c, 0x5c, 0xf5, 0x6c, 0xcb, 0xd7, 0x9a, 0x71, 0xe8, 0xff, 0xe0, 0x68, + 0x61, 0x4f, 0x02, 0xd6, 0xb2, 0x5d, 0xec, 0x6b, 0x4d, 0x2f, 0x0e, 0xfb, 0x9f, 0x1c, 0x1b, 0x00, + 0x08, 0x58, 0xd7, 0x3c, 0x7f, 0x90, 0x71, 0xff, 0x50, 0x80, 0x05, 0x80, 0x38, 0x4d, 0xfe, 0xbe, + 0x86, 0x0f, 0xe2, 0xb0, 0xef, 0x0a, 0xa7, 0xb9, 0x7d, 0xf9, 0x63, 0x90, 0x25, 0x7f, 0xb2, 0xdf, + 0xb3, 0xc5, 0x80, 0xff, 0x8b, 0x83, 0x43, 0x04, 0x79, 0xb3, 0xe7, 0x37, 0x7c, 0x23, 0x3e, 0xd8, + 0xff, 0xcd, 0x67, 0x5a, 0xd8, 0x97, 0x2b, 0x90, 0xf3, 0xfc, 0x46, 0xa3, 0xcd, 0xfb, 0xd3, 0x18, + 0xf8, 0xff, 0xbc, 0x1f, 0x5c, 0x59, 0x04, 0x18, 0x32, 0xdb, 0x37, 0xae, 0xf9, 0x8e, 0x4d, 0x3f, + 0x73, 0xc4, 0x31, 0xdc, 0xe1, 0x0c, 0x11, 0xc8, 0x52, 0xb5, 0xff, 0xf5, 0x2d, 0xac, 0xda, 0xab, + 0x36, 0xbb, 0xb8, 0x7d, 0xa1, 0x14, 0x7f, 0x03, 0x0b, 0xff, 0x97, 0x81, 0xfb, 0x75, 0xbb, 0xb5, + 0x6b, 0x7b, 0x73, 0x91, 0x62, 0x3e, 0x67, 0x5b, 0x9c, 0x13, 0x25, 0x6d, 0x0b, 0x4f, 0x1d, 0xef, + 0x2e, 0xb7, 0x74, 0x12, 0xd2, 0xf5, 0xf6, 0xee, 0xee, 0x01, 0x92, 0x21, 0xe9, 0xb5, 0x77, 0xf9, + 0xef, 0xa2, 0xc8, 0x9f, 0xa5, 0x37, 0x93, 0x30, 0x5a, 0x31, 0xcd, 0xed, 0x03, 0x07, 0x7b, 0x35, + 0x0b, 0xd7, 0xf6, 0x50, 0x11, 0x86, 0xe9, 0x60, 0x9f, 0xa2, 0x66, 0xd2, 0x95, 0x21, 0x85, 0x3f, + 0x07, 0x9a, 0x79, 0x7a, 0xcb, 0x9d, 0x08, 0x34, 0xf3, 0x81, 0xe6, 0x2c, 0xbb, 0xe4, 0x0e, 0x34, + 0x67, 0x03, 0xcd, 0x02, 0xbd, 0xea, 0x4e, 0x06, 0x9a, 0x85, 0x40, 0xb3, 0x48, 0x3f, 0xe5, 0x8c, + 0x06, 0x9a, 0xc5, 0x40, 0x73, 0x8e, 0x7e, 0xbc, 0x49, 0x05, 0x9a, 0x73, 0x81, 0xe6, 0x3c, 0xfd, + 0x66, 0x33, 0x1e, 0x68, 0xce, 0x07, 0x9a, 0x0b, 0xf4, 0x3b, 0x0d, 0x0a, 0x34, 0x17, 0x02, 0xcd, + 0x45, 0xfa, 0x03, 0xa8, 0x91, 0x40, 0x73, 0x11, 0x4d, 0xc1, 0x08, 0x1b, 0xd9, 0x93, 0xf4, 0x63, + 0xfe, 0xd8, 0x95, 0x21, 0x45, 0x08, 0x42, 0xdd, 0x53, 0xf4, 0x47, 0x4e, 0xc3, 0xa1, 0xee, 0xa9, + 0x50, 0x37, 0x4f, 0xff, 0xaf, 0x85, 0x1c, 0xea, 0xe6, 0x43, 0xdd, 0xd9, 0xe2, 0x28, 0xc9, 0x91, + 0x50, 0x77, 0x36, 0xd4, 0x2d, 0x14, 0x0b, 0x64, 0x06, 0x42, 0xdd, 0x42, 0xa8, 0x5b, 0x2c, 0x8e, + 0x9d, 0x96, 0x66, 0xf2, 0xa1, 0x6e, 0x11, 0x3d, 0x01, 0x39, 0xaf, 0xbd, 0xab, 0xf2, 0x6a, 0x4f, + 0x7f, 0x4c, 0x95, 0x9b, 0x87, 0x59, 0x92, 0x13, 0x74, 0x5a, 0xaf, 0x0c, 0x29, 0xe0, 0xb5, 0x77, + 0x79, 0x31, 0x5e, 0xca, 0x03, 0xbd, 0x83, 0x52, 0xe9, 0x6f, 0xa0, 0x4b, 0x6f, 0x48, 0x90, 0xdd, + 0xbe, 0x61, 0xd3, 0x4f, 0xf9, 0xde, 0x8f, 0x79, 0x72, 0x85, 0xd3, 0x67, 0x17, 0xe8, 0xd7, 0xd6, + 0xec, 0x15, 0x49, 0x11, 0x82, 0x50, 0xb7, 0x58, 0x7c, 0x90, 0x0e, 0x28, 0xd0, 0x2d, 0xa2, 0x39, + 0xc8, 0x47, 0x06, 0x34, 0x4f, 0x7f, 0xe6, 0xd4, 0x39, 0x22, 0x49, 0xc9, 0x85, 0x23, 0x9a, 0x5f, + 0x4a, 0x03, 0x49, 0x7b, 0xf2, 0x8f, 0x7f, 0xc3, 0x2e, 0x7d, 0x36, 0x01, 0x39, 0x76, 0x6d, 0x4d, + 0x47, 0x45, 0x5e, 0xc5, 0x4e, 0x36, 0x07, 0xdc, 0x8d, 0x21, 0x45, 0x08, 0x90, 0x02, 0xc0, 0x4c, + 0x49, 0x86, 0x33, 0x4f, 0x96, 0x9e, 0xfc, 0xa7, 0x37, 0x4f, 0x7d, 0xf4, 0xc8, 0x15, 0x44, 0x62, + 0x37, 0xc7, 0xca, 0xf8, 0xec, 0x8e, 0x61, 0xf9, 0x4f, 0xcd, 0x5f, 0x20, 0x01, 0x0e, 0x59, 0xd0, + 0x0e, 0x64, 0x96, 0x35, 0x8f, 0xfe, 0x40, 0x92, 0xba, 0x9e, 0x5a, 0x3a, 0xff, 0xbf, 0x6f, 0x9e, + 0x3a, 0x1b, 0xc3, 0xc8, 0x2b, 0xec, 0xec, 0xc6, 0x01, 0x61, 0x3d, 0xb7, 0x40, 0xe0, 0x57, 0x86, + 0x94, 0x80, 0x0a, 0xcd, 0x0b, 0x57, 0x37, 0xb5, 0x16, 0xfb, 0x3d, 0x57, 0x72, 0x49, 0x3e, 0x7c, + 0xf3, 0x54, 0x7e, 0xe3, 0x20, 0x94, 0x87, 0xae, 0x90, 0xa7, 0xa5, 0x0c, 0x0c, 0x33, 0x57, 0x97, + 0x56, 0x5e, 0xbf, 0x3d, 0x3d, 0xf4, 0xc6, 0xed, 0xe9, 0xa1, 0x7f, 0xbc, 0x3d, 0x3d, 0xf4, 0xd6, + 0xed, 0x69, 0xe9, 0xdd, 0xdb, 0xd3, 0xd2, 0x7b, 0xb7, 0xa7, 0xa5, 0x5b, 0x87, 0xd3, 0xd2, 0x57, + 0x0e, 0xa7, 0xa5, 0xaf, 0x1d, 0x4e, 0x4b, 0xdf, 0x3a, 0x9c, 0x96, 0x5e, 0x3f, 0x9c, 0x1e, 0x7a, + 0xe3, 0x70, 0x5a, 0x7a, 0xeb, 0x70, 0x5a, 0xfa, 0xc1, 0xe1, 0xf4, 0xd0, 0xbb, 0x87, 0xd3, 0xd2, + 0x7b, 0x87, 0xd3, 0x43, 0xb7, 0xbe, 0x3f, 0x3d, 0xf4, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdf, + 0x71, 0x95, 0xb1, 0x1a, 0x37, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -3675,6 +3680,9 @@ return dAtA } func (m *Subby) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Sub != nil { @@ -3688,6 +3696,9 @@ } func (m *AllTypesOneOf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TestOneof != nil { @@ -3700,84 +3711,126 @@ } func (m *AllTypesOneOf_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *AllTypesOneOf_Field4) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field4)) return n } func (m *AllTypesOneOf_Field5) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field5)) return n } func (m *AllTypesOneOf_Field6) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field6)) return n } func (m *AllTypesOneOf_Field7) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field7)) return n } func (m *AllTypesOneOf_Field8) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field8)) return n } func (m *AllTypesOneOf_Field9) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field10) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *AllTypesOneOf_Field11) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field12) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *AllTypesOneOf_Field13) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *AllTypesOneOf_Field14) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field14) @@ -3785,6 +3838,9 @@ return n } func (m *AllTypesOneOf_Field15) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field15 != nil { @@ -3794,6 +3850,9 @@ return n } func (m *AllTypesOneOf_SubMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage != nil { @@ -3803,6 +3862,9 @@ return n } func (m *TwoOneofs) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.One != nil { @@ -3818,24 +3880,36 @@ } func (m *TwoOneofs_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *TwoOneofs_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *TwoOneofs_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *TwoOneofs_Field34) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field34) @@ -3843,6 +3917,9 @@ return n } func (m *TwoOneofs_Field35) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field35 != nil { @@ -3852,6 +3929,9 @@ return n } func (m *TwoOneofs_SubMessage2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage2 != nil { @@ -3861,6 +3941,9 @@ return n } func (m *CustomOneof) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Custom != nil { @@ -3873,6 +3956,9 @@ } func (m *CustomOneof_Stringy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Stringy) @@ -3880,6 +3966,9 @@ return n } func (m *CustomOneof_CustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.CustomType.Size() @@ -3887,12 +3976,18 @@ return n } func (m *CustomOneof_CastType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 + sovOne(uint64(m.CastType)) return n } func (m *CustomOneof_MyCustomName) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 + sovOne(uint64(m.MyCustomName)) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -29,4 +29,4 @@ regenerate: go install github.com/gogo/protobuf/protoc-gen-combo go install github.com/gogo/protobuf/protoc-gen-gogo - protoc-gen-combo --version="2.6.0" --gogo_out=. --proto_path=../../../../../:../../protobuf/:. one.proto + protoc-gen-combo --version="2.6.0" --gogo_out=. --proto_path=../../protobuf/:../../../../../:. one.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/combos/both/one.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/combos/both/one.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/combos/both/one.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/combos/both/one.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -604,257 +604,263 @@ func OneDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3999 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x70, 0xe3, 0xe6, - 0x75, 0x16, 0x78, 0x13, 0x79, 0x48, 0x51, 0x10, 0x24, 0xef, 0x72, 0xe5, 0x98, 0xab, 0x95, 0xed, - 0x58, 0xb6, 0x6b, 0xc9, 0xd6, 0xae, 0xf6, 0xc2, 0x6d, 0xe2, 0x52, 0x12, 0x57, 0x2b, 0x57, 0x12, - 0x15, 0x50, 0x8a, 0x2f, 0x99, 0x0e, 0x06, 0x04, 0x7f, 0x52, 0xd8, 0x05, 0x01, 0x04, 0x00, 0x77, - 0xad, 0x9d, 0x3e, 0x6c, 0xc7, 0xbd, 0x4c, 0xa6, 0xd3, 0x6b, 0x3a, 0xd3, 0xc4, 0x75, 0xdc, 0xa6, - 0x33, 0xa9, 0xd3, 0xf4, 0x96, 0x34, 0x6d, 0x9a, 0xf4, 0xa9, 0x2f, 0x69, 0xfd, 0xd4, 0x49, 0xde, - 0xfa, 0x90, 0x07, 0xaf, 0xe2, 0x99, 0xa6, 0xad, 0xdb, 0xb8, 0xad, 0x1f, 0x3c, 0xe3, 0x97, 0xcc, - 0x7f, 0xc3, 0x85, 0xa4, 0x16, 0x54, 0x66, 0xec, 0x3c, 0x49, 0x38, 0xe7, 0x7c, 0x1f, 0xfe, 0xff, - 0xfc, 0xe7, 0x3f, 0xe7, 0xfc, 0x3f, 0x08, 0x3f, 0xbe, 0x02, 0x73, 0x1d, 0xcb, 0xea, 0x18, 0x68, - 0xc9, 0x76, 0x2c, 0xcf, 0x6a, 0xf6, 0xda, 0x4b, 0x2d, 0xe4, 0x6a, 0x8e, 0x6e, 0x7b, 0x96, 0xb3, - 0x48, 0x64, 0xd2, 0x24, 0xb5, 0x58, 0xe4, 0x16, 0xf3, 0xdb, 0x30, 0x75, 0x4d, 0x37, 0xd0, 0xba, - 0x6f, 0xd8, 0x40, 0x9e, 0x74, 0x19, 0x52, 0x6d, 0xdd, 0x40, 0x25, 0x61, 0x2e, 0xb9, 0x90, 0x5f, - 0x7e, 0x64, 0xb1, 0x0f, 0xb4, 0x18, 0x45, 0xec, 0x62, 0xb1, 0x4c, 0x10, 0xf3, 0x6f, 0xa7, 0x60, - 0x7a, 0x88, 0x56, 0x92, 0x20, 0x65, 0xaa, 0x5d, 0xcc, 0x28, 0x2c, 0xe4, 0x64, 0xf2, 0xbf, 0x54, - 0x82, 0x71, 0x5b, 0xd5, 0x6e, 0xaa, 0x1d, 0x54, 0x4a, 0x10, 0x31, 0x7f, 0x94, 0xca, 0x00, 0x2d, - 0x64, 0x23, 0xb3, 0x85, 0x4c, 0xed, 0xb0, 0x94, 0x9c, 0x4b, 0x2e, 0xe4, 0xe4, 0x90, 0x44, 0x7a, - 0x12, 0xa6, 0xec, 0x5e, 0xd3, 0xd0, 0x35, 0x25, 0x64, 0x06, 0x73, 0xc9, 0x85, 0xb4, 0x2c, 0x52, - 0xc5, 0x7a, 0x60, 0xfc, 0x18, 0x4c, 0xde, 0x46, 0xea, 0xcd, 0xb0, 0x69, 0x9e, 0x98, 0x16, 0xb1, - 0x38, 0x64, 0xb8, 0x06, 0x85, 0x2e, 0x72, 0x5d, 0xb5, 0x83, 0x14, 0xef, 0xd0, 0x46, 0xa5, 0x14, - 0x99, 0xfd, 0xdc, 0xc0, 0xec, 0xfb, 0x67, 0x9e, 0x67, 0xa8, 0xbd, 0x43, 0x1b, 0x49, 0x55, 0xc8, - 0x21, 0xb3, 0xd7, 0xa5, 0x0c, 0xe9, 0x63, 0xfc, 0x57, 0x33, 0x7b, 0xdd, 0x7e, 0x96, 0x2c, 0x86, - 0x31, 0x8a, 0x71, 0x17, 0x39, 0xb7, 0x74, 0x0d, 0x95, 0x32, 0x84, 0xe0, 0xb1, 0x01, 0x82, 0x06, - 0xd5, 0xf7, 0x73, 0x70, 0x9c, 0xb4, 0x06, 0x39, 0xf4, 0xb2, 0x87, 0x4c, 0x57, 0xb7, 0xcc, 0xd2, - 0x38, 0x21, 0x79, 0x74, 0xc8, 0x2a, 0x22, 0xa3, 0xd5, 0x4f, 0x11, 0xe0, 0xa4, 0x8b, 0x30, 0x6e, - 0xd9, 0x9e, 0x6e, 0x99, 0x6e, 0x29, 0x3b, 0x27, 0x2c, 0xe4, 0x97, 0x3f, 0x36, 0x34, 0x10, 0xea, - 0xd4, 0x46, 0xe6, 0xc6, 0xd2, 0x26, 0x88, 0xae, 0xd5, 0x73, 0x34, 0xa4, 0x68, 0x56, 0x0b, 0x29, - 0xba, 0xd9, 0xb6, 0x4a, 0x39, 0x42, 0x70, 0x76, 0x70, 0x22, 0xc4, 0x70, 0xcd, 0x6a, 0xa1, 0x4d, - 0xb3, 0x6d, 0xc9, 0x45, 0x37, 0xf2, 0x2c, 0x9d, 0x82, 0x8c, 0x7b, 0x68, 0x7a, 0xea, 0xcb, 0xa5, - 0x02, 0x89, 0x10, 0xf6, 0x34, 0xff, 0x9d, 0x0c, 0x4c, 0x8e, 0x12, 0x62, 0x57, 0x21, 0xdd, 0xc6, - 0xb3, 0x2c, 0x25, 0x4e, 0xe2, 0x03, 0x8a, 0x89, 0x3a, 0x31, 0xf3, 0x53, 0x3a, 0xb1, 0x0a, 0x79, - 0x13, 0xb9, 0x1e, 0x6a, 0xd1, 0x88, 0x48, 0x8e, 0x18, 0x53, 0x40, 0x41, 0x83, 0x21, 0x95, 0xfa, - 0xa9, 0x42, 0xea, 0x05, 0x98, 0xf4, 0x87, 0xa4, 0x38, 0xaa, 0xd9, 0xe1, 0xb1, 0xb9, 0x14, 0x37, - 0x92, 0xc5, 0x1a, 0xc7, 0xc9, 0x18, 0x26, 0x17, 0x51, 0xe4, 0x59, 0x5a, 0x07, 0xb0, 0x4c, 0x64, - 0xb5, 0x95, 0x16, 0xd2, 0x8c, 0x52, 0xf6, 0x18, 0x2f, 0xd5, 0xb1, 0xc9, 0x80, 0x97, 0x2c, 0x2a, - 0xd5, 0x0c, 0xe9, 0x4a, 0x10, 0x6a, 0xe3, 0xc7, 0x44, 0xca, 0x36, 0xdd, 0x64, 0x03, 0xd1, 0xb6, - 0x0f, 0x45, 0x07, 0xe1, 0xb8, 0x47, 0x2d, 0x36, 0xb3, 0x1c, 0x19, 0xc4, 0x62, 0xec, 0xcc, 0x64, - 0x06, 0xa3, 0x13, 0x9b, 0x70, 0xc2, 0x8f, 0xd2, 0xc3, 0xe0, 0x0b, 0x14, 0x12, 0x56, 0x40, 0xb2, - 0x50, 0x81, 0x0b, 0x77, 0xd4, 0x2e, 0x9a, 0xbd, 0x03, 0xc5, 0xa8, 0x7b, 0xa4, 0x19, 0x48, 0xbb, - 0x9e, 0xea, 0x78, 0x24, 0x0a, 0xd3, 0x32, 0x7d, 0x90, 0x44, 0x48, 0x22, 0xb3, 0x45, 0xb2, 0x5c, - 0x5a, 0xc6, 0xff, 0x4a, 0xbf, 0x10, 0x4c, 0x38, 0x49, 0x26, 0xfc, 0xf1, 0xc1, 0x15, 0x8d, 0x30, - 0xf7, 0xcf, 0x7b, 0xf6, 0x12, 0x4c, 0x44, 0x26, 0x30, 0xea, 0xab, 0xe7, 0x7f, 0x19, 0x1e, 0x18, - 0x4a, 0x2d, 0xbd, 0x00, 0x33, 0x3d, 0x53, 0x37, 0x3d, 0xe4, 0xd8, 0x0e, 0xc2, 0x11, 0x4b, 0x5f, - 0x55, 0xfa, 0xf7, 0xf1, 0x63, 0x62, 0x6e, 0x3f, 0x6c, 0x4d, 0x59, 0xe4, 0xe9, 0xde, 0xa0, 0xf0, - 0x89, 0x5c, 0xf6, 0x47, 0xe3, 0xe2, 0xdd, 0xbb, 0x77, 0xef, 0x26, 0xe6, 0xbf, 0x90, 0x81, 0x99, - 0x61, 0x7b, 0x66, 0xe8, 0xf6, 0x3d, 0x05, 0x19, 0xb3, 0xd7, 0x6d, 0x22, 0x87, 0x38, 0x29, 0x2d, - 0xb3, 0x27, 0xa9, 0x0a, 0x69, 0x43, 0x6d, 0x22, 0xa3, 0x94, 0x9a, 0x13, 0x16, 0x8a, 0xcb, 0x4f, - 0x8e, 0xb4, 0x2b, 0x17, 0xb7, 0x30, 0x44, 0xa6, 0x48, 0xe9, 0x93, 0x90, 0x62, 0x29, 0x1a, 0x33, - 0x3c, 0x31, 0x1a, 0x03, 0xde, 0x4b, 0x32, 0xc1, 0x49, 0x0f, 0x42, 0x0e, 0xff, 0xa5, 0xb1, 0x91, - 0x21, 0x63, 0xce, 0x62, 0x01, 0x8e, 0x0b, 0x69, 0x16, 0xb2, 0x64, 0x9b, 0xb4, 0x10, 0x2f, 0x6d, - 0xfe, 0x33, 0x0e, 0xac, 0x16, 0x6a, 0xab, 0x3d, 0xc3, 0x53, 0x6e, 0xa9, 0x46, 0x0f, 0x91, 0x80, - 0xcf, 0xc9, 0x05, 0x26, 0xfc, 0x34, 0x96, 0x49, 0x67, 0x21, 0x4f, 0x77, 0x95, 0x6e, 0xb6, 0xd0, - 0xcb, 0x24, 0x7b, 0xa6, 0x65, 0xba, 0xd1, 0x36, 0xb1, 0x04, 0xbf, 0xfe, 0x86, 0x6b, 0x99, 0x3c, - 0x34, 0xc9, 0x2b, 0xb0, 0x80, 0xbc, 0xfe, 0x52, 0x7f, 0xe2, 0x7e, 0x68, 0xf8, 0xf4, 0xfa, 0x63, - 0x6a, 0xfe, 0x5b, 0x09, 0x48, 0x91, 0x7c, 0x31, 0x09, 0xf9, 0xbd, 0x17, 0x77, 0x6b, 0xca, 0x7a, - 0x7d, 0x7f, 0x75, 0xab, 0x26, 0x0a, 0x52, 0x11, 0x80, 0x08, 0xae, 0x6d, 0xd5, 0xab, 0x7b, 0x62, - 0xc2, 0x7f, 0xde, 0xdc, 0xd9, 0xbb, 0x78, 0x41, 0x4c, 0xfa, 0x80, 0x7d, 0x2a, 0x48, 0x85, 0x0d, - 0xce, 0x2f, 0x8b, 0x69, 0x49, 0x84, 0x02, 0x25, 0xd8, 0x7c, 0xa1, 0xb6, 0x7e, 0xf1, 0x82, 0x98, - 0x89, 0x4a, 0xce, 0x2f, 0x8b, 0xe3, 0xd2, 0x04, 0xe4, 0x88, 0x64, 0xb5, 0x5e, 0xdf, 0x12, 0xb3, - 0x3e, 0x67, 0x63, 0x4f, 0xde, 0xdc, 0xd9, 0x10, 0x73, 0x3e, 0xe7, 0x86, 0x5c, 0xdf, 0xdf, 0x15, - 0xc1, 0x67, 0xd8, 0xae, 0x35, 0x1a, 0xd5, 0x8d, 0x9a, 0x98, 0xf7, 0x2d, 0x56, 0x5f, 0xdc, 0xab, - 0x35, 0xc4, 0x42, 0x64, 0x58, 0xe7, 0x97, 0xc5, 0x09, 0xff, 0x15, 0xb5, 0x9d, 0xfd, 0x6d, 0xb1, - 0x28, 0x4d, 0xc1, 0x04, 0x7d, 0x05, 0x1f, 0xc4, 0x64, 0x9f, 0xe8, 0xe2, 0x05, 0x51, 0x0c, 0x06, - 0x42, 0x59, 0xa6, 0x22, 0x82, 0x8b, 0x17, 0x44, 0x69, 0x7e, 0x0d, 0xd2, 0x24, 0xba, 0x24, 0x09, - 0x8a, 0x5b, 0xd5, 0xd5, 0xda, 0x96, 0x52, 0xdf, 0xdd, 0xdb, 0xac, 0xef, 0x54, 0xb7, 0x44, 0x21, - 0x90, 0xc9, 0xb5, 0x4f, 0xed, 0x6f, 0xca, 0xb5, 0x75, 0x31, 0x11, 0x96, 0xed, 0xd6, 0xaa, 0x7b, - 0xb5, 0x75, 0x31, 0x39, 0xaf, 0xc1, 0xcc, 0xb0, 0x3c, 0x39, 0x74, 0x67, 0x84, 0x96, 0x38, 0x71, - 0xcc, 0x12, 0x13, 0xae, 0x81, 0x25, 0xfe, 0x61, 0x02, 0xa6, 0x87, 0xd4, 0x8a, 0xa1, 0x2f, 0x79, - 0x16, 0xd2, 0x34, 0x44, 0x69, 0xf5, 0x7c, 0x7c, 0x68, 0xd1, 0x21, 0x01, 0x3b, 0x50, 0x41, 0x09, - 0x2e, 0xdc, 0x41, 0x24, 0x8f, 0xe9, 0x20, 0x30, 0xc5, 0x40, 0x4e, 0xff, 0xa5, 0x81, 0x9c, 0x4e, - 0xcb, 0xde, 0xc5, 0x51, 0xca, 0x1e, 0x91, 0x9d, 0x2c, 0xb7, 0xa7, 0x87, 0xe4, 0xf6, 0xab, 0x30, - 0x35, 0x40, 0x34, 0x72, 0x8e, 0x7d, 0x45, 0x80, 0xd2, 0x71, 0xce, 0x89, 0xc9, 0x74, 0x89, 0x48, - 0xa6, 0xbb, 0xda, 0xef, 0xc1, 0x73, 0xc7, 0x2f, 0xc2, 0xc0, 0x5a, 0xbf, 0x21, 0xc0, 0xa9, 0xe1, - 0x9d, 0xe2, 0xd0, 0x31, 0x7c, 0x12, 0x32, 0x5d, 0xe4, 0x1d, 0x58, 0xbc, 0x5b, 0xfa, 0xf8, 0x90, - 0x1a, 0x8c, 0xd5, 0xfd, 0x8b, 0xcd, 0x50, 0xe1, 0x22, 0x9e, 0x3c, 0xae, 0xdd, 0xa3, 0xa3, 0x19, - 0x18, 0xe9, 0xe7, 0x12, 0xf0, 0xc0, 0x50, 0xf2, 0xa1, 0x03, 0x7d, 0x08, 0x40, 0x37, 0xed, 0x9e, - 0x47, 0x3b, 0x22, 0x9a, 0x60, 0x73, 0x44, 0x42, 0x92, 0x17, 0x4e, 0x9e, 0x3d, 0xcf, 0xd7, 0x27, - 0x89, 0x1e, 0xa8, 0x88, 0x18, 0x5c, 0x0e, 0x06, 0x9a, 0x22, 0x03, 0x2d, 0x1f, 0x33, 0xd3, 0x81, - 0xc0, 0x7c, 0x1a, 0x44, 0xcd, 0xd0, 0x91, 0xe9, 0x29, 0xae, 0xe7, 0x20, 0xb5, 0xab, 0x9b, 0x1d, - 0x52, 0x41, 0xb2, 0x95, 0x74, 0x5b, 0x35, 0x5c, 0x24, 0x4f, 0x52, 0x75, 0x83, 0x6b, 0x31, 0x82, - 0x04, 0x90, 0x13, 0x42, 0x64, 0x22, 0x08, 0xaa, 0xf6, 0x11, 0xf3, 0xdf, 0xcc, 0x42, 0x3e, 0xd4, - 0x57, 0x4b, 0xe7, 0xa0, 0x70, 0x43, 0xbd, 0xa5, 0x2a, 0xfc, 0xac, 0x44, 0x3d, 0x91, 0xc7, 0xb2, - 0x5d, 0x76, 0x5e, 0x7a, 0x1a, 0x66, 0x88, 0x89, 0xd5, 0xf3, 0x90, 0xa3, 0x68, 0x86, 0xea, 0xba, - 0xc4, 0x69, 0x59, 0x62, 0x2a, 0x61, 0x5d, 0x1d, 0xab, 0xd6, 0xb8, 0x46, 0x5a, 0x81, 0x69, 0x82, - 0xe8, 0xf6, 0x0c, 0x4f, 0xb7, 0x0d, 0xa4, 0xe0, 0xd3, 0x9b, 0x4b, 0x2a, 0x89, 0x3f, 0xb2, 0x29, - 0x6c, 0xb1, 0xcd, 0x0c, 0xf0, 0x88, 0x5c, 0x69, 0x1d, 0x1e, 0x22, 0xb0, 0x0e, 0x32, 0x91, 0xa3, - 0x7a, 0x48, 0x41, 0x9f, 0xed, 0xa9, 0x86, 0xab, 0xa8, 0x66, 0x4b, 0x39, 0x50, 0xdd, 0x83, 0xd2, - 0x0c, 0x26, 0x58, 0x4d, 0x94, 0x04, 0xf9, 0x0c, 0x36, 0xdc, 0x60, 0x76, 0x35, 0x62, 0x56, 0x35, - 0x5b, 0xd7, 0x55, 0xf7, 0x40, 0xaa, 0xc0, 0x29, 0xc2, 0xe2, 0x7a, 0x8e, 0x6e, 0x76, 0x14, 0xed, - 0x00, 0x69, 0x37, 0x95, 0x9e, 0xd7, 0xbe, 0x5c, 0x7a, 0x30, 0xfc, 0x7e, 0x32, 0xc2, 0x06, 0xb1, - 0x59, 0xc3, 0x26, 0xfb, 0x5e, 0xfb, 0xb2, 0xd4, 0x80, 0x02, 0x5e, 0x8c, 0xae, 0x7e, 0x07, 0x29, - 0x6d, 0xcb, 0x21, 0xa5, 0xb1, 0x38, 0x24, 0x35, 0x85, 0x3c, 0xb8, 0x58, 0x67, 0x80, 0x6d, 0xab, - 0x85, 0x2a, 0xe9, 0xc6, 0x6e, 0xad, 0xb6, 0x2e, 0xe7, 0x39, 0xcb, 0x35, 0xcb, 0xc1, 0x01, 0xd5, - 0xb1, 0x7c, 0x07, 0xe7, 0x69, 0x40, 0x75, 0x2c, 0xee, 0xde, 0x15, 0x98, 0xd6, 0x34, 0x3a, 0x67, - 0x5d, 0x53, 0xd8, 0x19, 0xcb, 0x2d, 0x89, 0x11, 0x67, 0x69, 0xda, 0x06, 0x35, 0x60, 0x31, 0xee, - 0x4a, 0x57, 0xe0, 0x81, 0xc0, 0x59, 0x61, 0xe0, 0xd4, 0xc0, 0x2c, 0xfb, 0xa1, 0x2b, 0x30, 0x6d, - 0x1f, 0x0e, 0x02, 0xa5, 0xc8, 0x1b, 0xed, 0xc3, 0x7e, 0xd8, 0x25, 0x98, 0xb1, 0x0f, 0xec, 0x41, - 0xdc, 0x13, 0x61, 0x9c, 0x64, 0x1f, 0xd8, 0xfd, 0xc0, 0x47, 0xc9, 0x81, 0xdb, 0x41, 0x9a, 0xea, - 0xa1, 0x56, 0xe9, 0x74, 0xd8, 0x3c, 0xa4, 0x90, 0x96, 0x40, 0xd4, 0x34, 0x05, 0x99, 0x6a, 0xd3, - 0x40, 0x8a, 0xea, 0x20, 0x53, 0x75, 0x4b, 0x67, 0xc3, 0xc6, 0x45, 0x4d, 0xab, 0x11, 0x6d, 0x95, - 0x28, 0xa5, 0x27, 0x60, 0xca, 0x6a, 0xde, 0xd0, 0x68, 0x48, 0x2a, 0xb6, 0x83, 0xda, 0xfa, 0xcb, - 0xa5, 0x47, 0x88, 0x7f, 0x27, 0xb1, 0x82, 0x04, 0xe4, 0x2e, 0x11, 0x4b, 0x8f, 0x83, 0xa8, 0xb9, - 0x07, 0xaa, 0x63, 0x93, 0x9c, 0xec, 0xda, 0xaa, 0x86, 0x4a, 0x8f, 0x52, 0x53, 0x2a, 0xdf, 0xe1, - 0x62, 0xbc, 0x25, 0xdc, 0xdb, 0x7a, 0xdb, 0xe3, 0x8c, 0x8f, 0xd1, 0x2d, 0x41, 0x64, 0x8c, 0x6d, - 0x01, 0x44, 0xec, 0x8a, 0xc8, 0x8b, 0x17, 0x88, 0x59, 0xd1, 0x3e, 0xb0, 0xc3, 0xef, 0x7d, 0x18, - 0x26, 0xb0, 0x65, 0xf0, 0xd2, 0xc7, 0x69, 0x43, 0x66, 0x1f, 0x84, 0xde, 0xf8, 0xa1, 0xf5, 0xc6, - 0xf3, 0x15, 0x28, 0x84, 0xe3, 0x53, 0xca, 0x01, 0x8d, 0x50, 0x51, 0xc0, 0xcd, 0xca, 0x5a, 0x7d, - 0x1d, 0xb7, 0x19, 0x2f, 0xd5, 0xc4, 0x04, 0x6e, 0x77, 0xb6, 0x36, 0xf7, 0x6a, 0x8a, 0xbc, 0xbf, - 0xb3, 0xb7, 0xb9, 0x5d, 0x13, 0x93, 0xe1, 0xbe, 0xfa, 0xbb, 0x09, 0x28, 0x46, 0x8f, 0x48, 0xd2, - 0xcf, 0xc3, 0x69, 0x7e, 0x9f, 0xe1, 0x22, 0x4f, 0xb9, 0xad, 0x3b, 0x64, 0xcb, 0x74, 0x55, 0x5a, - 0xbe, 0xfc, 0x45, 0x9b, 0x61, 0x56, 0x0d, 0xe4, 0x3d, 0xaf, 0x3b, 0x78, 0x43, 0x74, 0x55, 0x4f, - 0xda, 0x82, 0xb3, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0xb6, 0x54, 0xa7, 0xa5, 0x04, 0x37, 0x49, 0x8a, - 0xaa, 0x69, 0xc8, 0x75, 0x2d, 0x5a, 0xaa, 0x7c, 0x96, 0x8f, 0x99, 0x56, 0x83, 0x19, 0x07, 0x39, - 0xbc, 0xca, 0x4c, 0xfb, 0x02, 0x2c, 0x79, 0x5c, 0x80, 0x3d, 0x08, 0xb9, 0xae, 0x6a, 0x2b, 0xc8, - 0xf4, 0x9c, 0x43, 0xd2, 0x18, 0x67, 0xe5, 0x6c, 0x57, 0xb5, 0x6b, 0xf8, 0xf9, 0xa3, 0x39, 0x9f, - 0xfc, 0x20, 0x09, 0x85, 0x70, 0x73, 0x8c, 0xcf, 0x1a, 0x1a, 0xa9, 0x23, 0x02, 0xc9, 0x34, 0x0f, - 0xdf, 0xb7, 0x95, 0x5e, 0x5c, 0xc3, 0x05, 0xa6, 0x92, 0xa1, 0x2d, 0xab, 0x4c, 0x91, 0xb8, 0xb8, - 0xe3, 0xdc, 0x82, 0x68, 0x8b, 0x90, 0x95, 0xd9, 0x93, 0xb4, 0x01, 0x99, 0x1b, 0x2e, 0xe1, 0xce, - 0x10, 0xee, 0x47, 0xee, 0xcf, 0xfd, 0x5c, 0x83, 0x90, 0xe7, 0x9e, 0x6b, 0x28, 0x3b, 0x75, 0x79, - 0xbb, 0xba, 0x25, 0x33, 0xb8, 0x74, 0x06, 0x52, 0x86, 0x7a, 0xe7, 0x30, 0x5a, 0x8a, 0x88, 0x68, - 0x54, 0xc7, 0x9f, 0x81, 0xd4, 0x6d, 0xa4, 0xde, 0x8c, 0x16, 0x00, 0x22, 0xfa, 0x10, 0x43, 0x7f, - 0x09, 0xd2, 0xc4, 0x5f, 0x12, 0x00, 0xf3, 0x98, 0x38, 0x26, 0x65, 0x21, 0xb5, 0x56, 0x97, 0x71, - 0xf8, 0x8b, 0x50, 0xa0, 0x52, 0x65, 0x77, 0xb3, 0xb6, 0x56, 0x13, 0x13, 0xf3, 0x2b, 0x90, 0xa1, - 0x4e, 0xc0, 0x5b, 0xc3, 0x77, 0x83, 0x38, 0xc6, 0x1e, 0x19, 0x87, 0xc0, 0xb5, 0xfb, 0xdb, 0xab, - 0x35, 0x59, 0x4c, 0x84, 0x97, 0xd7, 0x85, 0x42, 0xb8, 0x2f, 0xfe, 0x68, 0x62, 0xea, 0x1f, 0x05, - 0xc8, 0x87, 0xfa, 0x5c, 0xdc, 0xa0, 0xa8, 0x86, 0x61, 0xdd, 0x56, 0x54, 0x43, 0x57, 0x5d, 0x16, - 0x14, 0x40, 0x44, 0x55, 0x2c, 0x19, 0x75, 0xd1, 0x3e, 0x92, 0xc1, 0xbf, 0x2e, 0x80, 0xd8, 0xdf, - 0x62, 0xf6, 0x0d, 0x50, 0xf8, 0x99, 0x0e, 0xf0, 0x35, 0x01, 0x8a, 0xd1, 0xbe, 0xb2, 0x6f, 0x78, - 0xe7, 0x7e, 0xa6, 0xc3, 0x7b, 0x2b, 0x01, 0x13, 0x91, 0x6e, 0x72, 0xd4, 0xd1, 0x7d, 0x16, 0xa6, - 0xf4, 0x16, 0xea, 0xda, 0x96, 0x87, 0x4c, 0xed, 0x50, 0x31, 0xd0, 0x2d, 0x64, 0x94, 0xe6, 0x49, - 0xa2, 0x58, 0xba, 0x7f, 0xbf, 0xba, 0xb8, 0x19, 0xe0, 0xb6, 0x30, 0xac, 0x32, 0xbd, 0xb9, 0x5e, - 0xdb, 0xde, 0xad, 0xef, 0xd5, 0x76, 0xd6, 0x5e, 0x54, 0xf6, 0x77, 0x7e, 0x71, 0xa7, 0xfe, 0xfc, - 0x8e, 0x2c, 0xea, 0x7d, 0x66, 0x1f, 0xe2, 0x56, 0xdf, 0x05, 0xb1, 0x7f, 0x50, 0xd2, 0x69, 0x18, - 0x36, 0x2c, 0x71, 0x4c, 0x9a, 0x86, 0xc9, 0x9d, 0xba, 0xd2, 0xd8, 0x5c, 0xaf, 0x29, 0xb5, 0x6b, - 0xd7, 0x6a, 0x6b, 0x7b, 0x0d, 0x7a, 0x03, 0xe1, 0x5b, 0xef, 0x45, 0x37, 0xf5, 0xab, 0x49, 0x98, - 0x1e, 0x32, 0x12, 0xa9, 0xca, 0xce, 0x0e, 0xf4, 0x38, 0xf3, 0xd4, 0x28, 0xa3, 0x5f, 0xc4, 0x25, - 0x7f, 0x57, 0x75, 0x3c, 0x76, 0xd4, 0x78, 0x1c, 0xb0, 0x97, 0x4c, 0x4f, 0x6f, 0xeb, 0xc8, 0x61, - 0x17, 0x36, 0xf4, 0x40, 0x31, 0x19, 0xc8, 0xe9, 0x9d, 0xcd, 0xcf, 0x81, 0x64, 0x5b, 0xae, 0xee, - 0xe9, 0xb7, 0x90, 0xa2, 0x9b, 0xfc, 0x76, 0x07, 0x1f, 0x30, 0x52, 0xb2, 0xc8, 0x35, 0x9b, 0xa6, - 0xe7, 0x5b, 0x9b, 0xa8, 0xa3, 0xf6, 0x59, 0xe3, 0x04, 0x9e, 0x94, 0x45, 0xae, 0xf1, 0xad, 0xcf, - 0x41, 0xa1, 0x65, 0xf5, 0x70, 0xd7, 0x45, 0xed, 0x70, 0xbd, 0x10, 0xe4, 0x3c, 0x95, 0xf9, 0x26, - 0xac, 0x9f, 0x0e, 0xae, 0x95, 0x0a, 0x72, 0x9e, 0xca, 0xa8, 0xc9, 0x63, 0x30, 0xa9, 0x76, 0x3a, - 0x0e, 0x26, 0xe7, 0x44, 0xf4, 0x84, 0x50, 0xf4, 0xc5, 0xc4, 0x70, 0xf6, 0x39, 0xc8, 0x72, 0x3f, - 0xe0, 0x92, 0x8c, 0x3d, 0xa1, 0xd8, 0xf4, 0xd8, 0x9b, 0x58, 0xc8, 0xc9, 0x59, 0x93, 0x2b, 0xcf, - 0x41, 0x41, 0x77, 0x95, 0xe0, 0x96, 0x3c, 0x31, 0x97, 0x58, 0xc8, 0xca, 0x79, 0xdd, 0xf5, 0x6f, - 0x18, 0xe7, 0xdf, 0x48, 0x40, 0x31, 0x7a, 0xcb, 0x2f, 0xad, 0x43, 0xd6, 0xb0, 0x34, 0x95, 0x84, - 0x16, 0xfd, 0xc4, 0xb4, 0x10, 0xf3, 0x61, 0x60, 0x71, 0x8b, 0xd9, 0xcb, 0x3e, 0x72, 0xf6, 0x5f, - 0x05, 0xc8, 0x72, 0xb1, 0x74, 0x0a, 0x52, 0xb6, 0xea, 0x1d, 0x10, 0xba, 0xf4, 0x6a, 0x42, 0x14, - 0x64, 0xf2, 0x8c, 0xe5, 0xae, 0xad, 0x9a, 0x24, 0x04, 0x98, 0x1c, 0x3f, 0xe3, 0x75, 0x35, 0x90, - 0xda, 0x22, 0xc7, 0x0f, 0xab, 0xdb, 0x45, 0xa6, 0xe7, 0xf2, 0x75, 0x65, 0xf2, 0x35, 0x26, 0x96, - 0x9e, 0x84, 0x29, 0xcf, 0x51, 0x75, 0x23, 0x62, 0x9b, 0x22, 0xb6, 0x22, 0x57, 0xf8, 0xc6, 0x15, - 0x38, 0xc3, 0x79, 0x5b, 0xc8, 0x53, 0xb5, 0x03, 0xd4, 0x0a, 0x40, 0x19, 0x72, 0xcd, 0x70, 0x9a, - 0x19, 0xac, 0x33, 0x3d, 0xc7, 0xce, 0x7f, 0x5f, 0x80, 0x29, 0x7e, 0x60, 0x6a, 0xf9, 0xce, 0xda, - 0x06, 0x50, 0x4d, 0xd3, 0xf2, 0xc2, 0xee, 0x1a, 0x0c, 0xe5, 0x01, 0xdc, 0x62, 0xd5, 0x07, 0xc9, - 0x21, 0x82, 0xd9, 0x2e, 0x40, 0xa0, 0x39, 0xd6, 0x6d, 0x67, 0x21, 0xcf, 0x3e, 0xe1, 0x90, 0xef, - 0x80, 0xf4, 0x88, 0x0d, 0x54, 0x84, 0x4f, 0x56, 0xd2, 0x0c, 0xa4, 0x9b, 0xa8, 0xa3, 0x9b, 0xec, - 0x62, 0x96, 0x3e, 0xf0, 0x8b, 0x90, 0x94, 0x7f, 0x11, 0xb2, 0xfa, 0x19, 0x98, 0xd6, 0xac, 0x6e, - 0xff, 0x70, 0x57, 0xc5, 0xbe, 0x63, 0xbe, 0x7b, 0x5d, 0x78, 0x09, 0x82, 0x16, 0xf3, 0x7d, 0x41, - 0xf8, 0xd3, 0x44, 0x72, 0x63, 0x77, 0xf5, 0x6b, 0x89, 0xd9, 0x0d, 0x0a, 0xdd, 0xe5, 0x33, 0x95, - 0x51, 0xdb, 0x40, 0x1a, 0x1e, 0x3d, 0x7c, 0x65, 0x01, 0x9e, 0xea, 0xe8, 0xde, 0x41, 0xaf, 0xb9, - 0xa8, 0x59, 0xdd, 0xa5, 0x8e, 0xd5, 0xb1, 0x82, 0x4f, 0x9f, 0xf8, 0x89, 0x3c, 0x90, 0xff, 0xd8, - 0xe7, 0xcf, 0x9c, 0x2f, 0x9d, 0x8d, 0xfd, 0x56, 0x5a, 0xd9, 0x81, 0x69, 0x66, 0xac, 0x90, 0xef, - 0x2f, 0xf4, 0x14, 0x21, 0xdd, 0xf7, 0x0e, 0xab, 0xf4, 0x8d, 0xb7, 0x49, 0xb9, 0x96, 0xa7, 0x18, - 0x14, 0xeb, 0xe8, 0x41, 0xa3, 0x22, 0xc3, 0x03, 0x11, 0x3e, 0xba, 0x35, 0x91, 0x13, 0xc3, 0xf8, - 0x5d, 0xc6, 0x38, 0x1d, 0x62, 0x6c, 0x30, 0x68, 0x65, 0x0d, 0x26, 0x4e, 0xc2, 0xf5, 0xcf, 0x8c, - 0xab, 0x80, 0xc2, 0x24, 0x1b, 0x30, 0x49, 0x48, 0xb4, 0x9e, 0xeb, 0x59, 0x5d, 0x92, 0xf7, 0xee, - 0x4f, 0xf3, 0x2f, 0x6f, 0xd3, 0xbd, 0x52, 0xc4, 0xb0, 0x35, 0x1f, 0x55, 0xa9, 0x00, 0xf9, 0xe4, - 0xd4, 0x42, 0x9a, 0x11, 0xc3, 0xf0, 0x26, 0x1b, 0x88, 0x6f, 0x5f, 0xf9, 0x34, 0xcc, 0xe0, 0xff, - 0x49, 0x5a, 0x0a, 0x8f, 0x24, 0xfe, 0xc2, 0xab, 0xf4, 0xfd, 0x57, 0xe8, 0x76, 0x9c, 0xf6, 0x09, - 0x42, 0x63, 0x0a, 0xad, 0x62, 0x07, 0x79, 0x1e, 0x72, 0x5c, 0x45, 0x35, 0x86, 0x0d, 0x2f, 0x74, - 0x63, 0x50, 0xfa, 0xe2, 0x3b, 0xd1, 0x55, 0xdc, 0xa0, 0xc8, 0xaa, 0x61, 0x54, 0xf6, 0xe1, 0xf4, - 0x90, 0xa8, 0x18, 0x81, 0xf3, 0x55, 0xc6, 0x39, 0x33, 0x10, 0x19, 0x98, 0x76, 0x17, 0xb8, 0xdc, - 0x5f, 0xcb, 0x11, 0x38, 0xff, 0x88, 0x71, 0x4a, 0x0c, 0xcb, 0x97, 0x14, 0x33, 0x3e, 0x07, 0x53, - 0xb7, 0x90, 0xd3, 0xb4, 0x5c, 0x76, 0x4b, 0x33, 0x02, 0xdd, 0x6b, 0x8c, 0x6e, 0x92, 0x01, 0xc9, - 0xb5, 0x0d, 0xe6, 0xba, 0x02, 0xd9, 0xb6, 0xaa, 0xa1, 0x11, 0x28, 0xbe, 0xc4, 0x28, 0xc6, 0xb1, - 0x3d, 0x86, 0x56, 0xa1, 0xd0, 0xb1, 0x58, 0x65, 0x8a, 0x87, 0xbf, 0xce, 0xe0, 0x79, 0x8e, 0x61, - 0x14, 0xb6, 0x65, 0xf7, 0x0c, 0x5c, 0xb6, 0xe2, 0x29, 0xfe, 0x98, 0x53, 0x70, 0x0c, 0xa3, 0x38, - 0x81, 0x5b, 0xff, 0x84, 0x53, 0xb8, 0x21, 0x7f, 0x3e, 0x0b, 0x79, 0xcb, 0x34, 0x0e, 0x2d, 0x73, - 0x94, 0x41, 0x7c, 0x99, 0x31, 0x00, 0x83, 0x60, 0x82, 0xab, 0x90, 0x1b, 0x75, 0x21, 0xbe, 0xf2, - 0x0e, 0xdf, 0x1e, 0x7c, 0x05, 0x36, 0x60, 0x92, 0x27, 0x28, 0xdd, 0x32, 0x47, 0xa0, 0xf8, 0x33, - 0x46, 0x51, 0x0c, 0xc1, 0xd8, 0x34, 0x3c, 0xe4, 0x7a, 0x1d, 0x34, 0x0a, 0xc9, 0x1b, 0x7c, 0x1a, - 0x0c, 0xc2, 0x5c, 0xd9, 0x44, 0xa6, 0x76, 0x30, 0x1a, 0xc3, 0x57, 0xb9, 0x2b, 0x39, 0x06, 0x53, - 0xac, 0xc1, 0x44, 0x57, 0x75, 0xdc, 0x03, 0xd5, 0x18, 0x69, 0x39, 0xfe, 0x9c, 0x71, 0x14, 0x7c, - 0x10, 0xf3, 0x48, 0xcf, 0x3c, 0x09, 0xcd, 0xd7, 0xb8, 0x47, 0x42, 0x30, 0xb6, 0xf5, 0x5c, 0x8f, - 0x5c, 0x69, 0x9d, 0x84, 0xed, 0x2f, 0xf8, 0xd6, 0xa3, 0xd8, 0xed, 0x30, 0xe3, 0x55, 0xc8, 0xb9, - 0xfa, 0x9d, 0x91, 0x68, 0xfe, 0x92, 0xaf, 0x34, 0x01, 0x60, 0xf0, 0x8b, 0x70, 0x66, 0x68, 0x99, - 0x18, 0x81, 0xec, 0xaf, 0x18, 0xd9, 0xa9, 0x21, 0xa5, 0x82, 0xa5, 0x84, 0x93, 0x52, 0xfe, 0x35, - 0x4f, 0x09, 0xa8, 0x8f, 0x6b, 0x17, 0x9f, 0x15, 0x5c, 0xb5, 0x7d, 0x32, 0xaf, 0xfd, 0x0d, 0xf7, - 0x1a, 0xc5, 0x46, 0xbc, 0xb6, 0x07, 0xa7, 0x18, 0xe3, 0xc9, 0xd6, 0xf5, 0xeb, 0x3c, 0xb1, 0x52, - 0xf4, 0x7e, 0x74, 0x75, 0x3f, 0x03, 0xb3, 0xbe, 0x3b, 0x79, 0x53, 0xea, 0x2a, 0x5d, 0xd5, 0x1e, - 0x81, 0xf9, 0x1b, 0x8c, 0x99, 0x67, 0x7c, 0xbf, 0xab, 0x75, 0xb7, 0x55, 0x1b, 0x93, 0xbf, 0x00, - 0x25, 0x4e, 0xde, 0x33, 0x1d, 0xa4, 0x59, 0x1d, 0x53, 0xbf, 0x83, 0x5a, 0x23, 0x50, 0xff, 0x6d, - 0xdf, 0x52, 0xed, 0x87, 0xe0, 0x98, 0x79, 0x13, 0x44, 0xbf, 0x57, 0x51, 0xf4, 0xae, 0x6d, 0x39, - 0x5e, 0x0c, 0xe3, 0x37, 0xf9, 0x4a, 0xf9, 0xb8, 0x4d, 0x02, 0xab, 0xd4, 0xa0, 0x48, 0x1e, 0x47, - 0x0d, 0xc9, 0xbf, 0x63, 0x44, 0x13, 0x01, 0x8a, 0x25, 0x0e, 0xcd, 0xea, 0xda, 0xaa, 0x33, 0x4a, - 0xfe, 0xfb, 0x7b, 0x9e, 0x38, 0x18, 0x84, 0x25, 0x0e, 0xef, 0xd0, 0x46, 0xb8, 0xda, 0x8f, 0xc0, - 0xf0, 0x2d, 0x9e, 0x38, 0x38, 0x86, 0x51, 0xf0, 0x86, 0x61, 0x04, 0x8a, 0x7f, 0xe0, 0x14, 0x1c, - 0x83, 0x29, 0x3e, 0x15, 0x14, 0x5a, 0x07, 0x75, 0x74, 0xd7, 0x73, 0x68, 0x2b, 0x7c, 0x7f, 0xaa, - 0x6f, 0xbf, 0x13, 0x6d, 0xc2, 0xe4, 0x10, 0x14, 0x67, 0x22, 0x76, 0x85, 0x4a, 0x4e, 0x4a, 0xf1, - 0x03, 0xfb, 0x0e, 0xcf, 0x44, 0x21, 0x18, 0xdd, 0x9f, 0x93, 0x7d, 0xbd, 0x8a, 0x14, 0xf7, 0x43, - 0x98, 0xd2, 0xaf, 0xbc, 0xc7, 0xb8, 0xa2, 0xad, 0x4a, 0x65, 0x0b, 0x07, 0x50, 0xb4, 0xa1, 0x88, - 0x27, 0x7b, 0xe5, 0x3d, 0x3f, 0x86, 0x22, 0xfd, 0x44, 0xe5, 0x1a, 0x4c, 0x44, 0x9a, 0x89, 0x78, - 0xaa, 0x5f, 0x65, 0x54, 0x85, 0x70, 0x2f, 0x51, 0x59, 0x81, 0x14, 0x6e, 0x0c, 0xe2, 0xe1, 0xbf, - 0xc6, 0xe0, 0xc4, 0xbc, 0xf2, 0x09, 0xc8, 0xf2, 0x86, 0x20, 0x1e, 0xfa, 0xeb, 0x0c, 0xea, 0x43, - 0x30, 0x9c, 0x37, 0x03, 0xf1, 0xf0, 0xdf, 0xe0, 0x70, 0x0e, 0xc1, 0xf0, 0xd1, 0x5d, 0xf8, 0x4f, - 0xbf, 0x99, 0x62, 0x09, 0x9d, 0xfb, 0xee, 0x2a, 0x8c, 0xb3, 0x2e, 0x20, 0x1e, 0xfd, 0x39, 0xf6, - 0x72, 0x8e, 0xa8, 0x5c, 0x82, 0xf4, 0x88, 0x0e, 0xff, 0x2d, 0x06, 0xa5, 0xf6, 0x95, 0x35, 0xc8, - 0x87, 0x2a, 0x7f, 0x3c, 0xfc, 0xb7, 0x19, 0x3c, 0x8c, 0xc2, 0x43, 0x67, 0x95, 0x3f, 0x9e, 0xe0, - 0x77, 0xf8, 0xd0, 0x19, 0x02, 0xbb, 0x8d, 0x17, 0xfd, 0x78, 0xf4, 0xef, 0x72, 0xaf, 0x73, 0x48, - 0xe5, 0x59, 0xc8, 0xf9, 0x89, 0x3c, 0x1e, 0xff, 0x7b, 0x0c, 0x1f, 0x60, 0xb0, 0x07, 0x42, 0x85, - 0x24, 0x9e, 0xe2, 0xf7, 0xb9, 0x07, 0x42, 0x28, 0xbc, 0x8d, 0xfa, 0x9b, 0x83, 0x78, 0xa6, 0xcf, - 0xf3, 0x6d, 0xd4, 0xd7, 0x1b, 0xe0, 0xd5, 0x24, 0xf9, 0x34, 0x9e, 0xe2, 0x0f, 0xf8, 0x6a, 0x12, - 0x7b, 0x3c, 0x8c, 0xfe, 0x6a, 0x1b, 0xcf, 0xf1, 0x87, 0x7c, 0x18, 0x7d, 0xc5, 0xb6, 0xb2, 0x0b, - 0xd2, 0x60, 0xa5, 0x8d, 0xe7, 0xfb, 0x02, 0xe3, 0x9b, 0x1a, 0x28, 0xb4, 0x95, 0xe7, 0xe1, 0xd4, - 0xf0, 0x2a, 0x1b, 0xcf, 0xfa, 0xc5, 0xf7, 0xfa, 0xce, 0x45, 0xe1, 0x22, 0x5b, 0xd9, 0x0b, 0xd2, - 0x75, 0xb8, 0xc2, 0xc6, 0xd3, 0xbe, 0xfa, 0x5e, 0x34, 0x63, 0x87, 0x0b, 0x6c, 0xa5, 0x0a, 0x10, - 0x14, 0xb7, 0x78, 0xae, 0xd7, 0x18, 0x57, 0x08, 0x84, 0xb7, 0x06, 0xab, 0x6d, 0xf1, 0xf8, 0x2f, - 0xf1, 0xad, 0xc1, 0x10, 0x78, 0x6b, 0xf0, 0xb2, 0x16, 0x8f, 0x7e, 0x9d, 0x6f, 0x0d, 0x0e, 0xc1, - 0x91, 0x1d, 0xaa, 0x1c, 0xf1, 0x0c, 0x5f, 0xe6, 0x91, 0x1d, 0x42, 0x55, 0xae, 0x42, 0xd6, 0xec, - 0x19, 0x06, 0x0e, 0x50, 0xe9, 0xfe, 0x3f, 0x10, 0x2b, 0xfd, 0xc7, 0x07, 0x6c, 0x04, 0x1c, 0x50, - 0x59, 0x81, 0x34, 0xea, 0x36, 0x51, 0x2b, 0x0e, 0xf9, 0x9f, 0x1f, 0xf0, 0xa4, 0x84, 0xad, 0x2b, - 0xcf, 0x02, 0xd0, 0xa3, 0x3d, 0xf9, 0x6c, 0x15, 0x83, 0xfd, 0xaf, 0x0f, 0xd8, 0x4f, 0x37, 0x02, - 0x48, 0x40, 0x40, 0x7f, 0x08, 0x72, 0x7f, 0x82, 0x77, 0xa2, 0x04, 0x64, 0xd6, 0x57, 0x60, 0xfc, - 0x86, 0x6b, 0x99, 0x9e, 0xda, 0x89, 0x43, 0xff, 0x37, 0x43, 0x73, 0x7b, 0xec, 0xb0, 0xae, 0xe5, - 0x20, 0x4f, 0xed, 0xb8, 0x71, 0xd8, 0xff, 0x61, 0x58, 0x1f, 0x80, 0xc1, 0x9a, 0xea, 0x7a, 0xa3, - 0xcc, 0xfb, 0xc7, 0x1c, 0xcc, 0x01, 0x78, 0xd0, 0xf8, 0xff, 0x9b, 0xe8, 0x30, 0x0e, 0xfb, 0x2e, - 0x1f, 0x34, 0xb3, 0xaf, 0x7c, 0x02, 0x72, 0xf8, 0x5f, 0xfa, 0x7b, 0xac, 0x18, 0xf0, 0xff, 0x32, - 0x70, 0x80, 0xc0, 0x6f, 0x76, 0xbd, 0x96, 0xa7, 0xc7, 0x3b, 0xfb, 0xff, 0xd8, 0x4a, 0x73, 0xfb, - 0x4a, 0x15, 0xf2, 0xae, 0xd7, 0x6a, 0xf5, 0x58, 0x7f, 0x15, 0x03, 0xff, 0xff, 0x0f, 0xfc, 0x23, - 0xb7, 0x8f, 0x59, 0xad, 0x0d, 0xbf, 0x3d, 0x84, 0x0d, 0x6b, 0xc3, 0xa2, 0xf7, 0x86, 0x2f, 0xcd, - 0xc7, 0x5f, 0x00, 0xc2, 0xe7, 0xd3, 0xf0, 0x80, 0x66, 0x75, 0x9b, 0x96, 0xbb, 0xd4, 0xb4, 0xbc, - 0x83, 0x25, 0xcb, 0x64, 0x64, 0x52, 0xd2, 0x32, 0xd1, 0xec, 0xc9, 0xee, 0x10, 0xe7, 0xcf, 0x40, - 0xba, 0xd1, 0x6b, 0x36, 0x0f, 0x25, 0x11, 0x92, 0x6e, 0xaf, 0xc9, 0x7e, 0x8f, 0x83, 0xff, 0x9d, - 0xff, 0x41, 0x12, 0xf2, 0x0d, 0xb5, 0x6b, 0x1b, 0xa8, 0x6e, 0xa2, 0x7a, 0x5b, 0x2a, 0x41, 0x86, - 0x4c, 0xf2, 0x19, 0x62, 0x24, 0x5c, 0x1f, 0x93, 0xd9, 0xb3, 0xaf, 0x59, 0x26, 0x77, 0xab, 0x09, - 0x5f, 0xb3, 0xec, 0x6b, 0xce, 0xd3, 0xab, 0x55, 0x5f, 0x73, 0xde, 0xd7, 0x5c, 0x20, 0x17, 0xac, - 0x49, 0x5f, 0x73, 0xc1, 0xd7, 0xac, 0x90, 0x0f, 0x08, 0x13, 0xbe, 0x66, 0xc5, 0xd7, 0x5c, 0x24, - 0x9f, 0x0c, 0x52, 0xbe, 0xe6, 0xa2, 0xaf, 0xb9, 0x44, 0xbe, 0x14, 0x4c, 0xf9, 0x9a, 0x4b, 0xbe, - 0xe6, 0x32, 0xf9, 0x3a, 0x20, 0xf9, 0x9a, 0xcb, 0xbe, 0xe6, 0x0a, 0xf9, 0xd9, 0xcd, 0xb8, 0xaf, - 0xb9, 0x22, 0xcd, 0xc2, 0x38, 0x9d, 0xd9, 0xd3, 0xe4, 0x13, 0xf2, 0xe4, 0xf5, 0x31, 0x99, 0x0b, - 0x02, 0xdd, 0x33, 0xe4, 0xa7, 0x35, 0x99, 0x40, 0xf7, 0x4c, 0xa0, 0x5b, 0x26, 0xbf, 0xf0, 0x17, - 0x03, 0xdd, 0x72, 0xa0, 0x3b, 0x5f, 0x9a, 0xc0, 0xb1, 0x11, 0xe8, 0xce, 0x07, 0xba, 0x0b, 0xa5, - 0x22, 0xf6, 0x7f, 0xa0, 0xbb, 0x10, 0xe8, 0x56, 0x4a, 0x93, 0x73, 0xc2, 0x42, 0x21, 0xd0, 0xad, - 0x48, 0x4f, 0x41, 0xde, 0xed, 0x35, 0x15, 0x96, 0x07, 0xc9, 0x4f, 0x78, 0xf2, 0xcb, 0xb0, 0x88, - 0x23, 0x82, 0x2c, 0xea, 0xf5, 0x31, 0x19, 0xdc, 0x5e, 0x93, 0xe5, 0xcf, 0xd5, 0x02, 0x90, 0x9b, - 0x0f, 0x85, 0xfc, 0xf2, 0x76, 0x75, 0xfd, 0xcd, 0x7b, 0xe5, 0xb1, 0xef, 0xdd, 0x2b, 0x8f, 0xfd, - 0xdb, 0xbd, 0xf2, 0xd8, 0x5b, 0xf7, 0xca, 0xc2, 0xbb, 0xf7, 0xca, 0xc2, 0xfb, 0xf7, 0xca, 0xc2, - 0xdd, 0xa3, 0xb2, 0xf0, 0xd5, 0xa3, 0xb2, 0xf0, 0xf5, 0xa3, 0xb2, 0xf0, 0xed, 0xa3, 0xb2, 0xf0, - 0xe6, 0x51, 0x59, 0xf8, 0xde, 0x51, 0x59, 0x78, 0xeb, 0xa8, 0x2c, 0xfc, 0xe8, 0xa8, 0x3c, 0xf6, - 0xee, 0x51, 0x59, 0x78, 0xff, 0xa8, 0x3c, 0x76, 0xf7, 0x87, 0xe5, 0xb1, 0x66, 0x86, 0x84, 0xd1, - 0xf9, 0x9f, 0x04, 0x00, 0x00, 0xff, 0xff, 0x98, 0x65, 0x08, 0x1e, 0xb0, 0x33, 0x00, 0x00, + // 4083 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x1b, 0xd7, + 0x75, 0xe6, 0xe2, 0x8f, 0xc0, 0x01, 0x08, 0x2e, 0x97, 0xb4, 0x04, 0xd1, 0x31, 0x24, 0xd1, 0x76, + 0x4c, 0xdb, 0x35, 0x69, 0x53, 0xa2, 0x7e, 0xa0, 0x26, 0x2e, 0x48, 0x42, 0x14, 0x5d, 0x92, 0x60, + 0x16, 0x64, 0xfc, 0x93, 0xe9, 0xec, 0x2c, 0x16, 0x17, 0xe0, 0x4a, 0x8b, 0xdd, 0xcd, 0xee, 0x42, + 0x32, 0x35, 0x7d, 0x50, 0xc7, 0xfd, 0x99, 0x4c, 0xa7, 0xbf, 0xe9, 0x4c, 0x13, 0xd7, 0x71, 0x9b, + 0x74, 0x1a, 0xa7, 0xe9, 0x5f, 0xd2, 0xb4, 0x69, 0x92, 0xbe, 0xf4, 0x25, 0xad, 0x9f, 0x3a, 0xc9, + 0x5b, 0x1f, 0xf2, 0x60, 0x31, 0x9e, 0x69, 0xda, 0xba, 0x8d, 0xdb, 0xea, 0xc1, 0x33, 0x7e, 0xc9, + 0xdc, 0xbf, 0xdd, 0xc5, 0x02, 0xd4, 0x82, 0x99, 0xb1, 0xf3, 0x24, 0xee, 0x39, 0xe7, 0xfb, 0xf6, + 0xde, 0x73, 0xcf, 0x3d, 0xe7, 0xdc, 0xbb, 0x10, 0xfc, 0xf8, 0x32, 0x9c, 0xe9, 0x58, 0x56, 0xc7, + 0x40, 0x8b, 0xb6, 0x63, 0x79, 0x56, 0xb3, 0xd7, 0x5e, 0x6c, 0x21, 0x57, 0x73, 0x74, 0xdb, 0xb3, + 0x9c, 0x05, 0x22, 0x93, 0x26, 0xa9, 0xc5, 0x02, 0xb7, 0x98, 0xdb, 0x82, 0xa9, 0xab, 0xba, 0x81, + 0xd6, 0x7c, 0xc3, 0x06, 0xf2, 0xa4, 0x4b, 0x90, 0x6a, 0xeb, 0x06, 0x2a, 0x09, 0x67, 0x92, 0xf3, + 0xf9, 0xa5, 0x47, 0x16, 0x22, 0xa0, 0x85, 0x7e, 0xc4, 0x0e, 0x16, 0xcb, 0x04, 0x31, 0xf7, 0x76, + 0x0a, 0xa6, 0x87, 0x68, 0x25, 0x09, 0x52, 0xa6, 0xda, 0xc5, 0x8c, 0xc2, 0x7c, 0x4e, 0x26, 0x7f, + 0x4b, 0x25, 0x18, 0xb7, 0x55, 0xed, 0x86, 0xda, 0x41, 0xa5, 0x04, 0x11, 0xf3, 0x47, 0xa9, 0x0c, + 0xd0, 0x42, 0x36, 0x32, 0x5b, 0xc8, 0xd4, 0x0e, 0x4a, 0xc9, 0x33, 0xc9, 0xf9, 0x9c, 0x1c, 0x92, + 0x48, 0x4f, 0xc2, 0x94, 0xdd, 0x6b, 0x1a, 0xba, 0xa6, 0x84, 0xcc, 0xe0, 0x4c, 0x72, 0x3e, 0x2d, + 0x8b, 0x54, 0xb1, 0x16, 0x18, 0x3f, 0x06, 0x93, 0xb7, 0x90, 0x7a, 0x23, 0x6c, 0x9a, 0x27, 0xa6, + 0x45, 0x2c, 0x0e, 0x19, 0xae, 0x42, 0xa1, 0x8b, 0x5c, 0x57, 0xed, 0x20, 0xc5, 0x3b, 0xb0, 0x51, + 0x29, 0x45, 0x66, 0x7f, 0x66, 0x60, 0xf6, 0xd1, 0x99, 0xe7, 0x19, 0x6a, 0xf7, 0xc0, 0x46, 0x52, + 0x15, 0x72, 0xc8, 0xec, 0x75, 0x29, 0x43, 0xfa, 0x08, 0xff, 0xd5, 0xcc, 0x5e, 0x37, 0xca, 0x92, + 0xc5, 0x30, 0x46, 0x31, 0xee, 0x22, 0xe7, 0xa6, 0xae, 0xa1, 0x52, 0x86, 0x10, 0x3c, 0x36, 0x40, + 0xd0, 0xa0, 0xfa, 0x28, 0x07, 0xc7, 0x49, 0xab, 0x90, 0x43, 0x2f, 0x7b, 0xc8, 0x74, 0x75, 0xcb, + 0x2c, 0x8d, 0x13, 0x92, 0x47, 0x87, 0xac, 0x22, 0x32, 0x5a, 0x51, 0x8a, 0x00, 0x27, 0x5d, 0x80, + 0x71, 0xcb, 0xf6, 0x74, 0xcb, 0x74, 0x4b, 0xd9, 0x33, 0xc2, 0x7c, 0x7e, 0xe9, 0x23, 0x43, 0x03, + 0xa1, 0x4e, 0x6d, 0x64, 0x6e, 0x2c, 0x6d, 0x80, 0xe8, 0x5a, 0x3d, 0x47, 0x43, 0x8a, 0x66, 0xb5, + 0x90, 0xa2, 0x9b, 0x6d, 0xab, 0x94, 0x23, 0x04, 0xa7, 0x07, 0x27, 0x42, 0x0c, 0x57, 0xad, 0x16, + 0xda, 0x30, 0xdb, 0x96, 0x5c, 0x74, 0xfb, 0x9e, 0xa5, 0x13, 0x90, 0x71, 0x0f, 0x4c, 0x4f, 0x7d, + 0xb9, 0x54, 0x20, 0x11, 0xc2, 0x9e, 0xe6, 0xbe, 0x9d, 0x81, 0xc9, 0x51, 0x42, 0xec, 0x0a, 0xa4, + 0xdb, 0x78, 0x96, 0xa5, 0xc4, 0x71, 0x7c, 0x40, 0x31, 0xfd, 0x4e, 0xcc, 0xfc, 0x94, 0x4e, 0xac, + 0x42, 0xde, 0x44, 0xae, 0x87, 0x5a, 0x34, 0x22, 0x92, 0x23, 0xc6, 0x14, 0x50, 0xd0, 0x60, 0x48, + 0xa5, 0x7e, 0xaa, 0x90, 0x7a, 0x01, 0x26, 0xfd, 0x21, 0x29, 0x8e, 0x6a, 0x76, 0x78, 0x6c, 0x2e, + 0xc6, 0x8d, 0x64, 0xa1, 0xc6, 0x71, 0x32, 0x86, 0xc9, 0x45, 0xd4, 0xf7, 0x2c, 0xad, 0x01, 0x58, + 0x26, 0xb2, 0xda, 0x4a, 0x0b, 0x69, 0x46, 0x29, 0x7b, 0x84, 0x97, 0xea, 0xd8, 0x64, 0xc0, 0x4b, + 0x16, 0x95, 0x6a, 0x86, 0x74, 0x39, 0x08, 0xb5, 0xf1, 0x23, 0x22, 0x65, 0x8b, 0x6e, 0xb2, 0x81, + 0x68, 0xdb, 0x83, 0xa2, 0x83, 0x70, 0xdc, 0xa3, 0x16, 0x9b, 0x59, 0x8e, 0x0c, 0x62, 0x21, 0x76, + 0x66, 0x32, 0x83, 0xd1, 0x89, 0x4d, 0x38, 0xe1, 0x47, 0xe9, 0x61, 0xf0, 0x05, 0x0a, 0x09, 0x2b, + 0x20, 0x59, 0xa8, 0xc0, 0x85, 0xdb, 0x6a, 0x17, 0xcd, 0xde, 0x86, 0x62, 0xbf, 0x7b, 0xa4, 0x19, + 0x48, 0xbb, 0x9e, 0xea, 0x78, 0x24, 0x0a, 0xd3, 0x32, 0x7d, 0x90, 0x44, 0x48, 0x22, 0xb3, 0x45, + 0xb2, 0x5c, 0x5a, 0xc6, 0x7f, 0x4a, 0xbf, 0x10, 0x4c, 0x38, 0x49, 0x26, 0xfc, 0xd1, 0xc1, 0x15, + 0xed, 0x63, 0x8e, 0xce, 0x7b, 0xf6, 0x22, 0x4c, 0xf4, 0x4d, 0x60, 0xd4, 0x57, 0xcf, 0xfd, 0x32, + 0x3c, 0x30, 0x94, 0x5a, 0x7a, 0x01, 0x66, 0x7a, 0xa6, 0x6e, 0x7a, 0xc8, 0xb1, 0x1d, 0x84, 0x23, + 0x96, 0xbe, 0xaa, 0xf4, 0xef, 0xe3, 0x47, 0xc4, 0xdc, 0x5e, 0xd8, 0x9a, 0xb2, 0xc8, 0xd3, 0xbd, + 0x41, 0xe1, 0x13, 0xb9, 0xec, 0x8f, 0xc6, 0xc5, 0x3b, 0x77, 0xee, 0xdc, 0x49, 0xcc, 0x7d, 0x2e, + 0x03, 0x33, 0xc3, 0xf6, 0xcc, 0xd0, 0xed, 0x7b, 0x02, 0x32, 0x66, 0xaf, 0xdb, 0x44, 0x0e, 0x71, + 0x52, 0x5a, 0x66, 0x4f, 0x52, 0x15, 0xd2, 0x86, 0xda, 0x44, 0x46, 0x29, 0x75, 0x46, 0x98, 0x2f, + 0x2e, 0x3d, 0x39, 0xd2, 0xae, 0x5c, 0xd8, 0xc4, 0x10, 0x99, 0x22, 0xa5, 0x8f, 0x43, 0x8a, 0xa5, + 0x68, 0xcc, 0xf0, 0xc4, 0x68, 0x0c, 0x78, 0x2f, 0xc9, 0x04, 0x27, 0x3d, 0x08, 0x39, 0xfc, 0x2f, + 0x8d, 0x8d, 0x0c, 0x19, 0x73, 0x16, 0x0b, 0x70, 0x5c, 0x48, 0xb3, 0x90, 0x25, 0xdb, 0xa4, 0x85, + 0x78, 0x69, 0xf3, 0x9f, 0x71, 0x60, 0xb5, 0x50, 0x5b, 0xed, 0x19, 0x9e, 0x72, 0x53, 0x35, 0x7a, + 0x88, 0x04, 0x7c, 0x4e, 0x2e, 0x30, 0xe1, 0x27, 0xb1, 0x4c, 0x3a, 0x0d, 0x79, 0xba, 0xab, 0x74, + 0xb3, 0x85, 0x5e, 0x26, 0xd9, 0x33, 0x2d, 0xd3, 0x8d, 0xb6, 0x81, 0x25, 0xf8, 0xf5, 0xd7, 0x5d, + 0xcb, 0xe4, 0xa1, 0x49, 0x5e, 0x81, 0x05, 0xe4, 0xf5, 0x17, 0xa3, 0x89, 0xfb, 0xa1, 0xe1, 0xd3, + 0x8b, 0xc6, 0xd4, 0xdc, 0x37, 0x13, 0x90, 0x22, 0xf9, 0x62, 0x12, 0xf2, 0xbb, 0x2f, 0xee, 0xd4, + 0x94, 0xb5, 0xfa, 0xde, 0xca, 0x66, 0x4d, 0x14, 0xa4, 0x22, 0x00, 0x11, 0x5c, 0xdd, 0xac, 0x57, + 0x77, 0xc5, 0x84, 0xff, 0xbc, 0xb1, 0xbd, 0x7b, 0xe1, 0xbc, 0x98, 0xf4, 0x01, 0x7b, 0x54, 0x90, + 0x0a, 0x1b, 0x9c, 0x5b, 0x12, 0xd3, 0x92, 0x08, 0x05, 0x4a, 0xb0, 0xf1, 0x42, 0x6d, 0xed, 0xc2, + 0x79, 0x31, 0xd3, 0x2f, 0x39, 0xb7, 0x24, 0x8e, 0x4b, 0x13, 0x90, 0x23, 0x92, 0x95, 0x7a, 0x7d, + 0x53, 0xcc, 0xfa, 0x9c, 0x8d, 0x5d, 0x79, 0x63, 0x7b, 0x5d, 0xcc, 0xf9, 0x9c, 0xeb, 0x72, 0x7d, + 0x6f, 0x47, 0x04, 0x9f, 0x61, 0xab, 0xd6, 0x68, 0x54, 0xd7, 0x6b, 0x62, 0xde, 0xb7, 0x58, 0x79, + 0x71, 0xb7, 0xd6, 0x10, 0x0b, 0x7d, 0xc3, 0x3a, 0xb7, 0x24, 0x4e, 0xf8, 0xaf, 0xa8, 0x6d, 0xef, + 0x6d, 0x89, 0x45, 0x69, 0x0a, 0x26, 0xe8, 0x2b, 0xf8, 0x20, 0x26, 0x23, 0xa2, 0x0b, 0xe7, 0x45, + 0x31, 0x18, 0x08, 0x65, 0x99, 0xea, 0x13, 0x5c, 0x38, 0x2f, 0x4a, 0x73, 0xab, 0x90, 0x26, 0xd1, + 0x25, 0x49, 0x50, 0xdc, 0xac, 0xae, 0xd4, 0x36, 0x95, 0xfa, 0xce, 0xee, 0x46, 0x7d, 0xbb, 0xba, + 0x29, 0x0a, 0x81, 0x4c, 0xae, 0x7d, 0x62, 0x6f, 0x43, 0xae, 0xad, 0x89, 0x89, 0xb0, 0x6c, 0xa7, + 0x56, 0xdd, 0xad, 0xad, 0x89, 0xc9, 0x39, 0x0d, 0x66, 0x86, 0xe5, 0xc9, 0xa1, 0x3b, 0x23, 0xb4, + 0xc4, 0x89, 0x23, 0x96, 0x98, 0x70, 0x0d, 0x2c, 0xf1, 0x0f, 0x13, 0x30, 0x3d, 0xa4, 0x56, 0x0c, + 0x7d, 0xc9, 0xb3, 0x90, 0xa6, 0x21, 0x4a, 0xab, 0xe7, 0xe3, 0x43, 0x8b, 0x0e, 0x09, 0xd8, 0x81, + 0x0a, 0x4a, 0x70, 0xe1, 0x0e, 0x22, 0x79, 0x44, 0x07, 0x81, 0x29, 0x06, 0x72, 0xfa, 0x2f, 0x0d, + 0xe4, 0x74, 0x5a, 0xf6, 0x2e, 0x8c, 0x52, 0xf6, 0x88, 0xec, 0x78, 0xb9, 0x3d, 0x3d, 0x24, 0xb7, + 0x5f, 0x81, 0xa9, 0x01, 0xa2, 0x91, 0x73, 0xec, 0x2b, 0x02, 0x94, 0x8e, 0x72, 0x4e, 0x4c, 0xa6, + 0x4b, 0xf4, 0x65, 0xba, 0x2b, 0x51, 0x0f, 0x9e, 0x3d, 0x7a, 0x11, 0x06, 0xd6, 0xfa, 0x0d, 0x01, + 0x4e, 0x0c, 0xef, 0x14, 0x87, 0x8e, 0xe1, 0xe3, 0x90, 0xe9, 0x22, 0x6f, 0xdf, 0xe2, 0xdd, 0xd2, + 0x47, 0x87, 0xd4, 0x60, 0xac, 0x8e, 0x2e, 0x36, 0x43, 0x85, 0x8b, 0x78, 0xf2, 0xa8, 0x76, 0x8f, + 0x8e, 0x66, 0x60, 0xa4, 0x9f, 0x49, 0xc0, 0x03, 0x43, 0xc9, 0x87, 0x0e, 0xf4, 0x21, 0x00, 0xdd, + 0xb4, 0x7b, 0x1e, 0xed, 0x88, 0x68, 0x82, 0xcd, 0x11, 0x09, 0x49, 0x5e, 0x38, 0x79, 0xf6, 0x3c, + 0x5f, 0x9f, 0x24, 0x7a, 0xa0, 0x22, 0x62, 0x70, 0x29, 0x18, 0x68, 0x8a, 0x0c, 0xb4, 0x7c, 0xc4, + 0x4c, 0x07, 0x02, 0xf3, 0x69, 0x10, 0x35, 0x43, 0x47, 0xa6, 0xa7, 0xb8, 0x9e, 0x83, 0xd4, 0xae, + 0x6e, 0x76, 0x48, 0x05, 0xc9, 0x56, 0xd2, 0x6d, 0xd5, 0x70, 0x91, 0x3c, 0x49, 0xd5, 0x0d, 0xae, + 0xc5, 0x08, 0x12, 0x40, 0x4e, 0x08, 0x91, 0xe9, 0x43, 0x50, 0xb5, 0x8f, 0x98, 0xfb, 0x46, 0x16, + 0xf2, 0xa1, 0xbe, 0x5a, 0x3a, 0x0b, 0x85, 0xeb, 0xea, 0x4d, 0x55, 0xe1, 0x67, 0x25, 0xea, 0x89, + 0x3c, 0x96, 0xed, 0xb0, 0xf3, 0xd2, 0xd3, 0x30, 0x43, 0x4c, 0xac, 0x9e, 0x87, 0x1c, 0x45, 0x33, + 0x54, 0xd7, 0x25, 0x4e, 0xcb, 0x12, 0x53, 0x09, 0xeb, 0xea, 0x58, 0xb5, 0xca, 0x35, 0xd2, 0x32, + 0x4c, 0x13, 0x44, 0xb7, 0x67, 0x78, 0xba, 0x6d, 0x20, 0x05, 0x9f, 0xde, 0x5c, 0x52, 0x49, 0xfc, + 0x91, 0x4d, 0x61, 0x8b, 0x2d, 0x66, 0x80, 0x47, 0xe4, 0x4a, 0x6b, 0xf0, 0x10, 0x81, 0x75, 0x90, + 0x89, 0x1c, 0xd5, 0x43, 0x0a, 0xfa, 0x74, 0x4f, 0x35, 0x5c, 0x45, 0x35, 0x5b, 0xca, 0xbe, 0xea, + 0xee, 0x97, 0x66, 0x30, 0xc1, 0x4a, 0xa2, 0x24, 0xc8, 0xa7, 0xb0, 0xe1, 0x3a, 0xb3, 0xab, 0x11, + 0xb3, 0xaa, 0xd9, 0xba, 0xa6, 0xba, 0xfb, 0x52, 0x05, 0x4e, 0x10, 0x16, 0xd7, 0x73, 0x74, 0xb3, + 0xa3, 0x68, 0xfb, 0x48, 0xbb, 0xa1, 0xf4, 0xbc, 0xf6, 0xa5, 0xd2, 0x83, 0xe1, 0xf7, 0x93, 0x11, + 0x36, 0x88, 0xcd, 0x2a, 0x36, 0xd9, 0xf3, 0xda, 0x97, 0xa4, 0x06, 0x14, 0xf0, 0x62, 0x74, 0xf5, + 0xdb, 0x48, 0x69, 0x5b, 0x0e, 0x29, 0x8d, 0xc5, 0x21, 0xa9, 0x29, 0xe4, 0xc1, 0x85, 0x3a, 0x03, + 0x6c, 0x59, 0x2d, 0x54, 0x49, 0x37, 0x76, 0x6a, 0xb5, 0x35, 0x39, 0xcf, 0x59, 0xae, 0x5a, 0x0e, + 0x0e, 0xa8, 0x8e, 0xe5, 0x3b, 0x38, 0x4f, 0x03, 0xaa, 0x63, 0x71, 0xf7, 0x2e, 0xc3, 0xb4, 0xa6, + 0xd1, 0x39, 0xeb, 0x9a, 0xc2, 0xce, 0x58, 0x6e, 0x49, 0xec, 0x73, 0x96, 0xa6, 0xad, 0x53, 0x03, + 0x16, 0xe3, 0xae, 0x74, 0x19, 0x1e, 0x08, 0x9c, 0x15, 0x06, 0x4e, 0x0d, 0xcc, 0x32, 0x0a, 0x5d, + 0x86, 0x69, 0xfb, 0x60, 0x10, 0x28, 0xf5, 0xbd, 0xd1, 0x3e, 0x88, 0xc2, 0x2e, 0xc2, 0x8c, 0xbd, + 0x6f, 0x0f, 0xe2, 0x9e, 0x08, 0xe3, 0x24, 0x7b, 0xdf, 0x8e, 0x02, 0x1f, 0x25, 0x07, 0x6e, 0x07, + 0x69, 0xaa, 0x87, 0x5a, 0xa5, 0x93, 0x61, 0xf3, 0x90, 0x42, 0x5a, 0x04, 0x51, 0xd3, 0x14, 0x64, + 0xaa, 0x4d, 0x03, 0x29, 0xaa, 0x83, 0x4c, 0xd5, 0x2d, 0x9d, 0x0e, 0x1b, 0x17, 0x35, 0xad, 0x46, + 0xb4, 0x55, 0xa2, 0x94, 0x9e, 0x80, 0x29, 0xab, 0x79, 0x5d, 0xa3, 0x21, 0xa9, 0xd8, 0x0e, 0x6a, + 0xeb, 0x2f, 0x97, 0x1e, 0x21, 0xfe, 0x9d, 0xc4, 0x0a, 0x12, 0x90, 0x3b, 0x44, 0x2c, 0x3d, 0x0e, + 0xa2, 0xe6, 0xee, 0xab, 0x8e, 0x4d, 0x72, 0xb2, 0x6b, 0xab, 0x1a, 0x2a, 0x3d, 0x4a, 0x4d, 0xa9, + 0x7c, 0x9b, 0x8b, 0xf1, 0x96, 0x70, 0x6f, 0xe9, 0x6d, 0x8f, 0x33, 0x3e, 0x46, 0xb7, 0x04, 0x91, + 0x31, 0xb6, 0x79, 0x10, 0xb1, 0x2b, 0xfa, 0x5e, 0x3c, 0x4f, 0xcc, 0x8a, 0xf6, 0xbe, 0x1d, 0x7e, + 0xef, 0xc3, 0x30, 0x81, 0x2d, 0x83, 0x97, 0x3e, 0x4e, 0x1b, 0x32, 0x7b, 0x3f, 0xf4, 0xc6, 0x0f, + 0xac, 0x37, 0x9e, 0xab, 0x40, 0x21, 0x1c, 0x9f, 0x52, 0x0e, 0x68, 0x84, 0x8a, 0x02, 0x6e, 0x56, + 0x56, 0xeb, 0x6b, 0xb8, 0xcd, 0x78, 0xa9, 0x26, 0x26, 0x70, 0xbb, 0xb3, 0xb9, 0xb1, 0x5b, 0x53, + 0xe4, 0xbd, 0xed, 0xdd, 0x8d, 0xad, 0x9a, 0x98, 0x0c, 0xf7, 0xd5, 0xdf, 0x4d, 0x40, 0xb1, 0xff, + 0x88, 0x24, 0xfd, 0x3c, 0x9c, 0xe4, 0xf7, 0x19, 0x2e, 0xf2, 0x94, 0x5b, 0xba, 0x43, 0xb6, 0x4c, + 0x57, 0xa5, 0xe5, 0xcb, 0x5f, 0xb4, 0x19, 0x66, 0xd5, 0x40, 0xde, 0xf3, 0xba, 0x83, 0x37, 0x44, + 0x57, 0xf5, 0xa4, 0x4d, 0x38, 0x6d, 0x5a, 0x8a, 0xeb, 0xa9, 0x66, 0x4b, 0x75, 0x5a, 0x4a, 0x70, + 0x93, 0xa4, 0xa8, 0x9a, 0x86, 0x5c, 0xd7, 0xa2, 0xa5, 0xca, 0x67, 0xf9, 0x88, 0x69, 0x35, 0x98, + 0x71, 0x90, 0xc3, 0xab, 0xcc, 0x34, 0x12, 0x60, 0xc9, 0xa3, 0x02, 0xec, 0x41, 0xc8, 0x75, 0x55, + 0x5b, 0x41, 0xa6, 0xe7, 0x1c, 0x90, 0xc6, 0x38, 0x2b, 0x67, 0xbb, 0xaa, 0x5d, 0xc3, 0xcf, 0x1f, + 0xce, 0xf9, 0xe4, 0x07, 0x49, 0x28, 0x84, 0x9b, 0x63, 0x7c, 0xd6, 0xd0, 0x48, 0x1d, 0x11, 0x48, + 0xa6, 0x79, 0xf8, 0xbe, 0xad, 0xf4, 0xc2, 0x2a, 0x2e, 0x30, 0x95, 0x0c, 0x6d, 0x59, 0x65, 0x8a, + 0xc4, 0xc5, 0x1d, 0xe7, 0x16, 0x44, 0x5b, 0x84, 0xac, 0xcc, 0x9e, 0xa4, 0x75, 0xc8, 0x5c, 0x77, + 0x09, 0x77, 0x86, 0x70, 0x3f, 0x72, 0x7f, 0xee, 0xe7, 0x1a, 0x84, 0x3c, 0xf7, 0x5c, 0x43, 0xd9, + 0xae, 0xcb, 0x5b, 0xd5, 0x4d, 0x99, 0xc1, 0xa5, 0x53, 0x90, 0x32, 0xd4, 0xdb, 0x07, 0xfd, 0xa5, + 0x88, 0x88, 0x46, 0x75, 0xfc, 0x29, 0x48, 0xdd, 0x42, 0xea, 0x8d, 0xfe, 0x02, 0x40, 0x44, 0x1f, + 0x60, 0xe8, 0x2f, 0x42, 0x9a, 0xf8, 0x4b, 0x02, 0x60, 0x1e, 0x13, 0xc7, 0xa4, 0x2c, 0xa4, 0x56, + 0xeb, 0x32, 0x0e, 0x7f, 0x11, 0x0a, 0x54, 0xaa, 0xec, 0x6c, 0xd4, 0x56, 0x6b, 0x62, 0x62, 0x6e, + 0x19, 0x32, 0xd4, 0x09, 0x78, 0x6b, 0xf8, 0x6e, 0x10, 0xc7, 0xd8, 0x23, 0xe3, 0x10, 0xb8, 0x76, + 0x6f, 0x6b, 0xa5, 0x26, 0x8b, 0x89, 0xf0, 0xf2, 0xba, 0x50, 0x08, 0xf7, 0xc5, 0x1f, 0x4e, 0x4c, + 0x7d, 0x47, 0x80, 0x7c, 0xa8, 0xcf, 0xc5, 0x0d, 0x8a, 0x6a, 0x18, 0xd6, 0x2d, 0x45, 0x35, 0x74, + 0xd5, 0x65, 0x41, 0x01, 0x44, 0x54, 0xc5, 0x92, 0x51, 0x17, 0xed, 0x43, 0x19, 0xfc, 0xeb, 0x02, + 0x88, 0xd1, 0x16, 0x33, 0x32, 0x40, 0xe1, 0x67, 0x3a, 0xc0, 0xd7, 0x04, 0x28, 0xf6, 0xf7, 0x95, + 0x91, 0xe1, 0x9d, 0xfd, 0x99, 0x0e, 0xef, 0xad, 0x04, 0x4c, 0xf4, 0x75, 0x93, 0xa3, 0x8e, 0xee, + 0xd3, 0x30, 0xa5, 0xb7, 0x50, 0xd7, 0xb6, 0x3c, 0x64, 0x6a, 0x07, 0x8a, 0x81, 0x6e, 0x22, 0xa3, + 0x34, 0x47, 0x12, 0xc5, 0xe2, 0xfd, 0xfb, 0xd5, 0x85, 0x8d, 0x00, 0xb7, 0x89, 0x61, 0x95, 0xe9, + 0x8d, 0xb5, 0xda, 0xd6, 0x4e, 0x7d, 0xb7, 0xb6, 0xbd, 0xfa, 0xa2, 0xb2, 0xb7, 0xfd, 0x8b, 0xdb, + 0xf5, 0xe7, 0xb7, 0x65, 0x51, 0x8f, 0x98, 0x7d, 0x80, 0x5b, 0x7d, 0x07, 0xc4, 0xe8, 0xa0, 0xa4, + 0x93, 0x30, 0x6c, 0x58, 0xe2, 0x98, 0x34, 0x0d, 0x93, 0xdb, 0x75, 0xa5, 0xb1, 0xb1, 0x56, 0x53, + 0x6a, 0x57, 0xaf, 0xd6, 0x56, 0x77, 0x1b, 0xf4, 0x06, 0xc2, 0xb7, 0xde, 0xed, 0xdf, 0xd4, 0xaf, + 0x26, 0x61, 0x7a, 0xc8, 0x48, 0xa4, 0x2a, 0x3b, 0x3b, 0xd0, 0xe3, 0xcc, 0x53, 0xa3, 0x8c, 0x7e, + 0x01, 0x97, 0xfc, 0x1d, 0xd5, 0xf1, 0xd8, 0x51, 0xe3, 0x71, 0xc0, 0x5e, 0x32, 0x3d, 0xbd, 0xad, + 0x23, 0x87, 0x5d, 0xd8, 0xd0, 0x03, 0xc5, 0x64, 0x20, 0xa7, 0x77, 0x36, 0x3f, 0x07, 0x92, 0x6d, + 0xb9, 0xba, 0xa7, 0xdf, 0x44, 0x8a, 0x6e, 0xf2, 0xdb, 0x1d, 0x7c, 0xc0, 0x48, 0xc9, 0x22, 0xd7, + 0x6c, 0x98, 0x9e, 0x6f, 0x6d, 0xa2, 0x8e, 0x1a, 0xb1, 0xc6, 0x09, 0x3c, 0x29, 0x8b, 0x5c, 0xe3, + 0x5b, 0x9f, 0x85, 0x42, 0xcb, 0xea, 0xe1, 0xae, 0x8b, 0xda, 0xe1, 0x7a, 0x21, 0xc8, 0x79, 0x2a, + 0xf3, 0x4d, 0x58, 0x3f, 0x1d, 0x5c, 0x2b, 0x15, 0xe4, 0x3c, 0x95, 0x51, 0x93, 0xc7, 0x60, 0x52, + 0xed, 0x74, 0x1c, 0x4c, 0xce, 0x89, 0xe8, 0x09, 0xa1, 0xe8, 0x8b, 0x89, 0xe1, 0xec, 0x73, 0x90, + 0xe5, 0x7e, 0xc0, 0x25, 0x19, 0x7b, 0x42, 0xb1, 0xe9, 0xb1, 0x37, 0x31, 0x9f, 0x93, 0xb3, 0x26, + 0x57, 0x9e, 0x85, 0x82, 0xee, 0x2a, 0xc1, 0x2d, 0x79, 0xe2, 0x4c, 0x62, 0x3e, 0x2b, 0xe7, 0x75, + 0xd7, 0xbf, 0x61, 0x9c, 0x7b, 0x23, 0x01, 0xc5, 0xfe, 0x5b, 0x7e, 0x69, 0x0d, 0xb2, 0x86, 0xa5, + 0xa9, 0x24, 0xb4, 0xe8, 0x27, 0xa6, 0xf9, 0x98, 0x0f, 0x03, 0x0b, 0x9b, 0xcc, 0x5e, 0xf6, 0x91, + 0xb3, 0xff, 0x2a, 0x40, 0x96, 0x8b, 0xa5, 0x13, 0x90, 0xb2, 0x55, 0x6f, 0x9f, 0xd0, 0xa5, 0x57, + 0x12, 0xa2, 0x20, 0x93, 0x67, 0x2c, 0x77, 0x6d, 0xd5, 0x24, 0x21, 0xc0, 0xe4, 0xf8, 0x19, 0xaf, + 0xab, 0x81, 0xd4, 0x16, 0x39, 0x7e, 0x58, 0xdd, 0x2e, 0x32, 0x3d, 0x97, 0xaf, 0x2b, 0x93, 0xaf, + 0x32, 0xb1, 0xf4, 0x24, 0x4c, 0x79, 0x8e, 0xaa, 0x1b, 0x7d, 0xb6, 0x29, 0x62, 0x2b, 0x72, 0x85, + 0x6f, 0x5c, 0x81, 0x53, 0x9c, 0xb7, 0x85, 0x3c, 0x55, 0xdb, 0x47, 0xad, 0x00, 0x94, 0x21, 0xd7, + 0x0c, 0x27, 0x99, 0xc1, 0x1a, 0xd3, 0x73, 0xec, 0xdc, 0xf7, 0x05, 0x98, 0xe2, 0x07, 0xa6, 0x96, + 0xef, 0xac, 0x2d, 0x00, 0xd5, 0x34, 0x2d, 0x2f, 0xec, 0xae, 0xc1, 0x50, 0x1e, 0xc0, 0x2d, 0x54, + 0x7d, 0x90, 0x1c, 0x22, 0x98, 0xed, 0x02, 0x04, 0x9a, 0x23, 0xdd, 0x76, 0x1a, 0xf2, 0xec, 0x13, + 0x0e, 0xf9, 0x0e, 0x48, 0x8f, 0xd8, 0x40, 0x45, 0xf8, 0x64, 0x25, 0xcd, 0x40, 0xba, 0x89, 0x3a, + 0xba, 0xc9, 0x2e, 0x66, 0xe9, 0x03, 0xbf, 0x08, 0x49, 0xf9, 0x17, 0x21, 0x2b, 0x9f, 0x82, 0x69, + 0xcd, 0xea, 0x46, 0x87, 0xbb, 0x22, 0x46, 0x8e, 0xf9, 0xee, 0x35, 0xe1, 0x25, 0x08, 0x5a, 0xcc, + 0xf7, 0x04, 0xe1, 0x4b, 0x89, 0xe4, 0xfa, 0xce, 0xca, 0x57, 0x13, 0xb3, 0xeb, 0x14, 0xba, 0xc3, + 0x67, 0x2a, 0xa3, 0xb6, 0x81, 0x34, 0x3c, 0x7a, 0xf8, 0xf2, 0x93, 0xf0, 0x54, 0x47, 0xf7, 0xf6, + 0x7b, 0xcd, 0x05, 0xcd, 0xea, 0x2e, 0x76, 0xac, 0x8e, 0x15, 0x7c, 0xfa, 0xc4, 0x4f, 0xe4, 0x81, + 0xfc, 0xc5, 0x3e, 0x7f, 0xe6, 0x7c, 0xe9, 0x6c, 0xec, 0xb7, 0xd2, 0xca, 0x36, 0x4c, 0x33, 0x63, + 0x85, 0x7c, 0x7f, 0xa1, 0xa7, 0x08, 0xe9, 0xbe, 0x77, 0x58, 0xa5, 0xaf, 0xbf, 0x4d, 0xca, 0xb5, + 0x3c, 0xc5, 0xa0, 0x58, 0x47, 0x0f, 0x1a, 0x15, 0x19, 0x1e, 0xe8, 0xe3, 0xa3, 0x5b, 0x13, 0x39, + 0x31, 0x8c, 0xdf, 0x65, 0x8c, 0xd3, 0x21, 0xc6, 0x06, 0x83, 0x56, 0x56, 0x61, 0xe2, 0x38, 0x5c, + 0xff, 0xcc, 0xb8, 0x0a, 0x28, 0x4c, 0xb2, 0x0e, 0x93, 0x84, 0x44, 0xeb, 0xb9, 0x9e, 0xd5, 0x25, + 0x79, 0xef, 0xfe, 0x34, 0xff, 0xf2, 0x36, 0xdd, 0x2b, 0x45, 0x0c, 0x5b, 0xf5, 0x51, 0x95, 0x0a, + 0x90, 0x4f, 0x4e, 0x2d, 0xa4, 0x19, 0x31, 0x0c, 0x6f, 0xb2, 0x81, 0xf8, 0xf6, 0x95, 0x4f, 0xc2, + 0x0c, 0xfe, 0x9b, 0xa4, 0xa5, 0xf0, 0x48, 0xe2, 0x2f, 0xbc, 0x4a, 0xdf, 0x7f, 0x85, 0x6e, 0xc7, + 0x69, 0x9f, 0x20, 0x34, 0xa6, 0xd0, 0x2a, 0x76, 0x90, 0xe7, 0x21, 0xc7, 0x55, 0x54, 0x63, 0xd8, + 0xf0, 0x42, 0x37, 0x06, 0xa5, 0xcf, 0xbf, 0xd3, 0xbf, 0x8a, 0xeb, 0x14, 0x59, 0x35, 0x8c, 0xca, + 0x1e, 0x9c, 0x1c, 0x12, 0x15, 0x23, 0x70, 0xbe, 0xca, 0x38, 0x67, 0x06, 0x22, 0x03, 0xd3, 0xee, + 0x00, 0x97, 0xfb, 0x6b, 0x39, 0x02, 0xe7, 0x1f, 0x31, 0x4e, 0x89, 0x61, 0xf9, 0x92, 0x62, 0xc6, + 0xe7, 0x60, 0xea, 0x26, 0x72, 0x9a, 0x96, 0xcb, 0x6e, 0x69, 0x46, 0xa0, 0x7b, 0x8d, 0xd1, 0x4d, + 0x32, 0x20, 0xb9, 0xb6, 0xc1, 0x5c, 0x97, 0x21, 0xdb, 0x56, 0x35, 0x34, 0x02, 0xc5, 0x17, 0x18, + 0xc5, 0x38, 0xb6, 0xc7, 0xd0, 0x2a, 0x14, 0x3a, 0x16, 0xab, 0x4c, 0xf1, 0xf0, 0xd7, 0x19, 0x3c, + 0xcf, 0x31, 0x8c, 0xc2, 0xb6, 0xec, 0x9e, 0x81, 0xcb, 0x56, 0x3c, 0xc5, 0x1f, 0x73, 0x0a, 0x8e, + 0x61, 0x14, 0xc7, 0x70, 0xeb, 0x9f, 0x70, 0x0a, 0x37, 0xe4, 0xcf, 0x67, 0x21, 0x6f, 0x99, 0xc6, + 0x81, 0x65, 0x8e, 0x32, 0x88, 0x2f, 0x32, 0x06, 0x60, 0x10, 0x4c, 0x70, 0x05, 0x72, 0xa3, 0x2e, + 0xc4, 0x9f, 0xbd, 0xc3, 0xb7, 0x07, 0x5f, 0x81, 0x75, 0x98, 0xe4, 0x09, 0x4a, 0xb7, 0xcc, 0x11, + 0x28, 0xbe, 0xcc, 0x28, 0x8a, 0x21, 0x18, 0x9b, 0x86, 0x87, 0x5c, 0xaf, 0x83, 0x46, 0x21, 0x79, + 0x83, 0x4f, 0x83, 0x41, 0x98, 0x2b, 0x9b, 0xc8, 0xd4, 0xf6, 0x47, 0x63, 0xf8, 0x0a, 0x77, 0x25, + 0xc7, 0x60, 0x8a, 0x55, 0x98, 0xe8, 0xaa, 0x8e, 0xbb, 0xaf, 0x1a, 0x23, 0x2d, 0xc7, 0x9f, 0x33, + 0x8e, 0x82, 0x0f, 0x62, 0x1e, 0xe9, 0x99, 0xc7, 0xa1, 0xf9, 0x2a, 0xf7, 0x48, 0x08, 0xc6, 0xb6, + 0x9e, 0xeb, 0x91, 0x2b, 0xad, 0xe3, 0xb0, 0xfd, 0x05, 0xdf, 0x7a, 0x14, 0xbb, 0x15, 0x66, 0xbc, + 0x02, 0x39, 0x57, 0xbf, 0x3d, 0x12, 0xcd, 0x5f, 0xf2, 0x95, 0x26, 0x00, 0x0c, 0x7e, 0x11, 0x4e, + 0x0d, 0x2d, 0x13, 0x23, 0x90, 0xfd, 0x15, 0x23, 0x3b, 0x31, 0xa4, 0x54, 0xb0, 0x94, 0x70, 0x5c, + 0xca, 0xbf, 0xe6, 0x29, 0x01, 0x45, 0xb8, 0x76, 0xf0, 0x59, 0xc1, 0x55, 0xdb, 0xc7, 0xf3, 0xda, + 0xdf, 0x70, 0xaf, 0x51, 0x6c, 0x9f, 0xd7, 0x76, 0xe1, 0x04, 0x63, 0x3c, 0xde, 0xba, 0x7e, 0x8d, + 0x27, 0x56, 0x8a, 0xde, 0xeb, 0x5f, 0xdd, 0x4f, 0xc1, 0xac, 0xef, 0x4e, 0xde, 0x94, 0xba, 0x4a, + 0x57, 0xb5, 0x47, 0x60, 0xfe, 0x3a, 0x63, 0xe6, 0x19, 0xdf, 0xef, 0x6a, 0xdd, 0x2d, 0xd5, 0xc6, + 0xe4, 0x2f, 0x40, 0x89, 0x93, 0xf7, 0x4c, 0x07, 0x69, 0x56, 0xc7, 0xd4, 0x6f, 0xa3, 0xd6, 0x08, + 0xd4, 0x7f, 0x1b, 0x59, 0xaa, 0xbd, 0x10, 0x1c, 0x33, 0x6f, 0x80, 0xe8, 0xf7, 0x2a, 0x8a, 0xde, + 0xb5, 0x2d, 0xc7, 0x8b, 0x61, 0xfc, 0x06, 0x5f, 0x29, 0x1f, 0xb7, 0x41, 0x60, 0x95, 0x1a, 0x14, + 0xc9, 0xe3, 0xa8, 0x21, 0xf9, 0x77, 0x8c, 0x68, 0x22, 0x40, 0xb1, 0xc4, 0xa1, 0x59, 0x5d, 0x5b, + 0x75, 0x46, 0xc9, 0x7f, 0x7f, 0xcf, 0x13, 0x07, 0x83, 0xb0, 0xc4, 0xe1, 0x1d, 0xd8, 0x08, 0x57, + 0xfb, 0x11, 0x18, 0xbe, 0xc9, 0x13, 0x07, 0xc7, 0x30, 0x0a, 0xde, 0x30, 0x8c, 0x40, 0xf1, 0x0f, + 0x9c, 0x82, 0x63, 0x30, 0xc5, 0x27, 0x82, 0x42, 0xeb, 0xa0, 0x8e, 0xee, 0x7a, 0x0e, 0x6d, 0x85, + 0xef, 0x4f, 0xf5, 0xad, 0x77, 0xfa, 0x9b, 0x30, 0x39, 0x04, 0xc5, 0x99, 0x88, 0x5d, 0xa1, 0x92, + 0x93, 0x52, 0xfc, 0xc0, 0xbe, 0xcd, 0x33, 0x51, 0x08, 0x86, 0xc7, 0x16, 0xea, 0x10, 0xb1, 0xdb, + 0x35, 0x7c, 0x3e, 0x18, 0x81, 0xee, 0x3b, 0x91, 0xc1, 0x35, 0x38, 0x16, 0x73, 0x86, 0xfa, 0x9f, + 0x9e, 0x79, 0x03, 0x1d, 0x8c, 0x14, 0x9d, 0xff, 0x18, 0xe9, 0x7f, 0xf6, 0x28, 0x92, 0xe6, 0x90, + 0xc9, 0x48, 0x3f, 0x25, 0xc5, 0xfd, 0x58, 0xa7, 0xf4, 0x2b, 0xf7, 0xd8, 0x7c, 0xfb, 0xdb, 0xa9, + 0xca, 0x26, 0x0e, 0xf2, 0xfe, 0xa6, 0x27, 0x9e, 0xec, 0x95, 0x7b, 0x7e, 0x9c, 0xf7, 0xf5, 0x3c, + 0x95, 0xab, 0x30, 0xd1, 0xd7, 0xf0, 0xc4, 0x53, 0xfd, 0x2a, 0xa3, 0x2a, 0x84, 0xfb, 0x9d, 0xca, + 0x32, 0xa4, 0x70, 0xf3, 0x12, 0x0f, 0xff, 0x35, 0x06, 0x27, 0xe6, 0x95, 0x8f, 0x41, 0x96, 0x37, + 0x2d, 0xf1, 0xd0, 0x5f, 0x67, 0x50, 0x1f, 0x82, 0xe1, 0xbc, 0x61, 0x89, 0x87, 0xff, 0x06, 0x87, + 0x73, 0x08, 0x86, 0x8f, 0xee, 0xc2, 0x7f, 0xfa, 0xcd, 0x14, 0x2b, 0x3a, 0xdc, 0x77, 0x57, 0x60, + 0x9c, 0x75, 0x2a, 0xf1, 0xe8, 0xcf, 0xb0, 0x97, 0x73, 0x44, 0xe5, 0x22, 0xa4, 0x47, 0x74, 0xf8, + 0x6f, 0x31, 0x28, 0xb5, 0xaf, 0xac, 0x42, 0x3e, 0xd4, 0x9d, 0xc4, 0xc3, 0x7f, 0x9b, 0xc1, 0xc3, + 0x28, 0x3c, 0x74, 0xd6, 0x9d, 0xc4, 0x13, 0xfc, 0x0e, 0x1f, 0x3a, 0x43, 0x60, 0xb7, 0xf1, 0xc6, + 0x24, 0x1e, 0xfd, 0xbb, 0xdc, 0xeb, 0x1c, 0x52, 0x79, 0x16, 0x72, 0x7e, 0xb1, 0x89, 0xc7, 0xff, + 0x1e, 0xc3, 0x07, 0x18, 0xec, 0x81, 0x50, 0xb1, 0x8b, 0xa7, 0xf8, 0x7d, 0xee, 0x81, 0x10, 0x0a, + 0x6f, 0xa3, 0x68, 0x03, 0x13, 0xcf, 0xf4, 0x59, 0xbe, 0x8d, 0x22, 0xfd, 0x0b, 0x5e, 0x4d, 0x92, + 0xf3, 0xe3, 0x29, 0xfe, 0x80, 0xaf, 0x26, 0xb1, 0xc7, 0xc3, 0x88, 0x76, 0x04, 0xf1, 0x1c, 0x7f, + 0xc8, 0x87, 0x11, 0x69, 0x08, 0x2a, 0x3b, 0x20, 0x0d, 0x76, 0x03, 0xf1, 0x7c, 0x9f, 0x63, 0x7c, + 0x53, 0x03, 0xcd, 0x40, 0xe5, 0x79, 0x38, 0x31, 0xbc, 0x13, 0x88, 0x67, 0xfd, 0xfc, 0xbd, 0xc8, + 0xd9, 0x2d, 0xdc, 0x08, 0x54, 0x76, 0x83, 0x92, 0x12, 0xee, 0x02, 0xe2, 0x69, 0x5f, 0xbd, 0xd7, + 0x9f, 0xb8, 0xc3, 0x4d, 0x40, 0xa5, 0x0a, 0x10, 0x14, 0xe0, 0x78, 0xae, 0xd7, 0x18, 0x57, 0x08, + 0x84, 0xb7, 0x06, 0xab, 0xbf, 0xf1, 0xf8, 0x2f, 0xf0, 0xad, 0xc1, 0x10, 0x78, 0x6b, 0xf0, 0xd2, + 0x1b, 0x8f, 0x7e, 0x9d, 0x6f, 0x0d, 0x0e, 0xc1, 0x91, 0x1d, 0xaa, 0x6e, 0xf1, 0x0c, 0x5f, 0xe4, + 0x91, 0x1d, 0x42, 0x55, 0xb6, 0x61, 0x6a, 0xa0, 0x20, 0xc6, 0x53, 0x7d, 0x89, 0x51, 0x89, 0xd1, + 0x7a, 0x18, 0x2e, 0x5e, 0xac, 0x18, 0xc6, 0xb3, 0xfd, 0x69, 0xa4, 0x78, 0xb1, 0x5a, 0x58, 0xb9, + 0x02, 0x59, 0xb3, 0x67, 0x18, 0x78, 0xf3, 0x48, 0xf7, 0xff, 0x81, 0x5d, 0xe9, 0x3f, 0xde, 0x67, + 0xde, 0xe1, 0x80, 0xca, 0x32, 0xa4, 0x51, 0xb7, 0x89, 0x5a, 0x71, 0xc8, 0xff, 0x7c, 0x9f, 0x27, + 0x4c, 0x6c, 0x5d, 0x79, 0x16, 0x80, 0x5e, 0x8d, 0x90, 0xcf, 0x7e, 0x31, 0xd8, 0xff, 0x7a, 0x9f, + 0xfd, 0xf4, 0x25, 0x80, 0x04, 0x04, 0xf4, 0x87, 0x34, 0xf7, 0x27, 0x78, 0xa7, 0x9f, 0x80, 0xac, + 0xc8, 0x65, 0x18, 0xbf, 0xee, 0x5a, 0xa6, 0xa7, 0x76, 0xe2, 0xd0, 0xff, 0xcd, 0xd0, 0xdc, 0x1e, + 0x3b, 0xac, 0x6b, 0x39, 0xc8, 0x53, 0x3b, 0x6e, 0x1c, 0xf6, 0x7f, 0x18, 0xd6, 0x07, 0x60, 0xb0, + 0xa6, 0xba, 0xde, 0x28, 0xf3, 0xfe, 0x31, 0x07, 0x73, 0x00, 0x1e, 0x34, 0xfe, 0xfb, 0x06, 0x3a, + 0x88, 0xc3, 0xbe, 0xcb, 0x07, 0xcd, 0xec, 0x2b, 0x1f, 0x83, 0x1c, 0xfe, 0x93, 0xfe, 0x9e, 0x2d, + 0x06, 0xfc, 0xbf, 0x0c, 0x1c, 0x20, 0xf0, 0x9b, 0x5d, 0xaf, 0xe5, 0xe9, 0xf1, 0xce, 0xfe, 0x3f, + 0xb6, 0xd2, 0xdc, 0xbe, 0x52, 0x85, 0xbc, 0xeb, 0xb5, 0x5a, 0x3d, 0xd6, 0x9f, 0xc6, 0xc0, 0xff, + 0xff, 0x7d, 0xff, 0xca, 0xc2, 0xc7, 0xe0, 0xd5, 0xbe, 0x75, 0xc3, 0xb3, 0x2d, 0xf2, 0x99, 0x23, + 0x8e, 0xe1, 0x1e, 0x63, 0x08, 0x41, 0x56, 0x6a, 0xc3, 0xaf, 0x6f, 0x61, 0xdd, 0x5a, 0xb7, 0xe8, + 0xc5, 0xed, 0x4b, 0x73, 0xf1, 0x37, 0xb0, 0xf0, 0xd9, 0x34, 0x3c, 0xa0, 0x59, 0xdd, 0xa6, 0xe5, + 0x2e, 0x36, 0x2d, 0x6f, 0x7f, 0xd1, 0x32, 0x19, 0x99, 0x94, 0xb4, 0x4c, 0x34, 0x7b, 0xbc, 0x4b, + 0xdc, 0xb9, 0x53, 0x90, 0x6e, 0xf4, 0x9a, 0xcd, 0x03, 0x49, 0x84, 0xa4, 0xdb, 0x6b, 0xb2, 0x1f, + 0x44, 0xe1, 0x3f, 0xe7, 0x7e, 0x90, 0x84, 0x7c, 0x43, 0xed, 0xda, 0x06, 0xaa, 0x9b, 0xa8, 0xde, + 0x96, 0x4a, 0x90, 0x21, 0x73, 0x7c, 0x86, 0x18, 0x09, 0xd7, 0xc6, 0x64, 0xf6, 0xec, 0x6b, 0x96, + 0xc8, 0xe5, 0x76, 0xc2, 0xd7, 0x2c, 0xf9, 0x9a, 0x73, 0xf4, 0x6e, 0xdb, 0xd7, 0x9c, 0xf3, 0x35, + 0xe7, 0xc9, 0x0d, 0x77, 0xd2, 0xd7, 0x9c, 0xf7, 0x35, 0xcb, 0xe4, 0x0b, 0xce, 0x84, 0xaf, 0x59, + 0xf6, 0x35, 0x17, 0xc8, 0x37, 0x9b, 0x94, 0xaf, 0xb9, 0xe0, 0x6b, 0x2e, 0x92, 0x4f, 0x35, 0x53, + 0xbe, 0xe6, 0xa2, 0xaf, 0xb9, 0x44, 0x3e, 0xcf, 0x48, 0xbe, 0xe6, 0x92, 0xaf, 0xb9, 0x4c, 0x7e, + 0xf7, 0x34, 0xee, 0x6b, 0x2e, 0x4b, 0xb3, 0x30, 0x4e, 0x67, 0xf6, 0x34, 0xf9, 0x86, 0x3f, 0x79, + 0x6d, 0x4c, 0xe6, 0x82, 0x40, 0xf7, 0x0c, 0xf9, 0x6d, 0x53, 0x26, 0xd0, 0x3d, 0x13, 0xe8, 0x96, + 0xc8, 0x7f, 0xb1, 0x10, 0x03, 0xdd, 0x52, 0xa0, 0x3b, 0x57, 0x9a, 0xc0, 0xa1, 0x11, 0xe8, 0xce, + 0x05, 0xba, 0xf3, 0xa5, 0x22, 0xf6, 0x7f, 0xa0, 0x3b, 0x1f, 0xe8, 0x96, 0x4b, 0x93, 0x67, 0x84, + 0xf9, 0x42, 0xa0, 0x5b, 0x96, 0x9e, 0x82, 0xbc, 0xdb, 0x6b, 0x2a, 0x2c, 0xc9, 0x93, 0xdf, 0x50, + 0xe5, 0x97, 0x60, 0x01, 0x47, 0x04, 0x59, 0xd4, 0x6b, 0x63, 0x32, 0xb8, 0xbd, 0x26, 0xcb, 0xc1, + 0x2b, 0x05, 0x20, 0x57, 0x4f, 0x0a, 0xf9, 0xe9, 0xf3, 0xca, 0xda, 0x9b, 0x77, 0xcb, 0x63, 0xdf, + 0xbb, 0x5b, 0x1e, 0xfb, 0xb7, 0xbb, 0xe5, 0xb1, 0xb7, 0xee, 0x96, 0x85, 0x77, 0xef, 0x96, 0x85, + 0xf7, 0xee, 0x96, 0x85, 0x3b, 0x87, 0x65, 0xe1, 0x2b, 0x87, 0x65, 0xe1, 0x6b, 0x87, 0x65, 0xe1, + 0x5b, 0x87, 0x65, 0xe1, 0xcd, 0xc3, 0xb2, 0xf0, 0xbd, 0xc3, 0xb2, 0xf0, 0xd6, 0x61, 0x59, 0xf8, + 0xd1, 0x61, 0x79, 0xec, 0xdd, 0xc3, 0xb2, 0xf0, 0xde, 0x61, 0x79, 0xec, 0xce, 0x0f, 0xcb, 0x63, + 0xcd, 0x0c, 0x09, 0xa3, 0x73, 0x3f, 0x09, 0x00, 0x00, 0xff, 0xff, 0x25, 0xd2, 0x18, 0xa9, 0x31, + 0x35, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2464,6 +2470,9 @@ return dAtA } func (m *Subby) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Sub) @@ -2477,6 +2486,9 @@ } func (m *SampleOneOf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TestOneof != nil { @@ -2489,84 +2501,126 @@ } func (m *SampleOneOf_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *SampleOneOf_Field4) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field4)) return n } func (m *SampleOneOf_Field5) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field5)) return n } func (m *SampleOneOf_Field6) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field6)) return n } func (m *SampleOneOf_Field7) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field7)) return n } func (m *SampleOneOf_Field8) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field8)) return n } func (m *SampleOneOf_Field9) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field10) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field11) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field12) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field13) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *SampleOneOf_Field14) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field14) @@ -2574,6 +2628,9 @@ return n } func (m *SampleOneOf_Field15) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field15 != nil { @@ -2583,6 +2640,9 @@ return n } func (m *SampleOneOf_SubMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/combos/marshaler/one.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/combos/marshaler/one.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/combos/marshaler/one.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/combos/marshaler/one.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -602,257 +602,263 @@ func OneDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3997 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xe3, 0xd6, - 0x75, 0x16, 0x7f, 0x45, 0x1e, 0x52, 0x14, 0x74, 0x25, 0xef, 0x72, 0xe5, 0x98, 0xab, 0x95, 0xed, - 0x58, 0xb6, 0x6b, 0xc9, 0xd6, 0xae, 0xf6, 0x87, 0xdb, 0xc4, 0xa5, 0x24, 0xae, 0x56, 0xae, 0x24, - 0x2a, 0xa0, 0x14, 0xff, 0x64, 0x3a, 0x18, 0x10, 0xbc, 0xa4, 0xb0, 0x0b, 0x02, 0x08, 0x00, 0xee, - 0x5a, 0x3b, 0x7d, 0xd8, 0x8e, 0xfb, 0x33, 0x99, 0x4e, 0xff, 0x3b, 0x53, 0xc7, 0x75, 0xdc, 0xa6, - 0x33, 0xa9, 0xd3, 0xf4, 0x2f, 0x69, 0xda, 0x34, 0xe9, 0x53, 0x5f, 0xd2, 0xfa, 0xa9, 0x93, 0xbc, - 0xf5, 0x21, 0x0f, 0x5e, 0xc5, 0x33, 0x4d, 0x5b, 0xb7, 0x71, 0x5b, 0x3f, 0x78, 0xc6, 0x2f, 0x9d, - 0xfb, 0x07, 0x80, 0x3f, 0x5a, 0x50, 0x99, 0xb1, 0xf3, 0x24, 0xe1, 0x9c, 0xf3, 0x7d, 0xb8, 0xf7, - 0xdc, 0x73, 0xcf, 0x39, 0xf7, 0x82, 0xf0, 0xe3, 0x2b, 0x30, 0xd7, 0xb6, 0xac, 0xb6, 0x81, 0x97, - 0x6c, 0xc7, 0xf2, 0xac, 0x46, 0xb7, 0xb5, 0xd4, 0xc4, 0xae, 0xe6, 0xe8, 0xb6, 0x67, 0x39, 0x8b, - 0x54, 0x86, 0x26, 0x99, 0xc5, 0xa2, 0xb0, 0x98, 0xdf, 0x86, 0xa9, 0x6b, 0xba, 0x81, 0xd7, 0x7d, - 0xc3, 0x3a, 0xf6, 0xd0, 0x65, 0x48, 0xb6, 0x74, 0x03, 0x17, 0x63, 0x73, 0x89, 0x85, 0xdc, 0xf2, - 0x23, 0x8b, 0x7d, 0xa0, 0xc5, 0x5e, 0xc4, 0x2e, 0x11, 0xcb, 0x14, 0x31, 0xff, 0x4e, 0x12, 0xa6, - 0x87, 0x68, 0x11, 0x82, 0xa4, 0xa9, 0x76, 0x08, 0x63, 0x6c, 0x21, 0x2b, 0xd3, 0xff, 0x51, 0x11, - 0xc6, 0x6d, 0x55, 0xbb, 0xa9, 0xb6, 0x71, 0x31, 0x4e, 0xc5, 0xe2, 0x11, 0x95, 0x00, 0x9a, 0xd8, - 0xc6, 0x66, 0x13, 0x9b, 0xda, 0x61, 0x31, 0x31, 0x97, 0x58, 0xc8, 0xca, 0x21, 0x09, 0x7a, 0x12, - 0xa6, 0xec, 0x6e, 0xc3, 0xd0, 0x35, 0x25, 0x64, 0x06, 0x73, 0x89, 0x85, 0x94, 0x2c, 0x31, 0xc5, - 0x7a, 0x60, 0xfc, 0x18, 0x4c, 0xde, 0xc6, 0xea, 0xcd, 0xb0, 0x69, 0x8e, 0x9a, 0x16, 0x88, 0x38, - 0x64, 0xb8, 0x06, 0xf9, 0x0e, 0x76, 0x5d, 0xb5, 0x8d, 0x15, 0xef, 0xd0, 0xc6, 0xc5, 0x24, 0x9d, - 0xfd, 0xdc, 0xc0, 0xec, 0xfb, 0x67, 0x9e, 0xe3, 0xa8, 0xbd, 0x43, 0x1b, 0xa3, 0x0a, 0x64, 0xb1, - 0xd9, 0xed, 0x30, 0x86, 0xd4, 0x31, 0xfe, 0xab, 0x9a, 0xdd, 0x4e, 0x3f, 0x4b, 0x86, 0xc0, 0x38, - 0xc5, 0xb8, 0x8b, 0x9d, 0x5b, 0xba, 0x86, 0x8b, 0x69, 0x4a, 0xf0, 0xd8, 0x00, 0x41, 0x9d, 0xe9, - 0xfb, 0x39, 0x04, 0x0e, 0xad, 0x41, 0x16, 0xbf, 0xec, 0x61, 0xd3, 0xd5, 0x2d, 0xb3, 0x38, 0x4e, - 0x49, 0x1e, 0x1d, 0xb2, 0x8a, 0xd8, 0x68, 0xf6, 0x53, 0x04, 0x38, 0x74, 0x11, 0xc6, 0x2d, 0xdb, - 0xd3, 0x2d, 0xd3, 0x2d, 0x66, 0xe6, 0x62, 0x0b, 0xb9, 0xe5, 0x4f, 0x0c, 0x0d, 0x84, 0x1a, 0xb3, - 0x91, 0x85, 0x31, 0xda, 0x04, 0xc9, 0xb5, 0xba, 0x8e, 0x86, 0x15, 0xcd, 0x6a, 0x62, 0x45, 0x37, - 0x5b, 0x56, 0x31, 0x4b, 0x09, 0xce, 0x0e, 0x4e, 0x84, 0x1a, 0xae, 0x59, 0x4d, 0xbc, 0x69, 0xb6, - 0x2c, 0xb9, 0xe0, 0xf6, 0x3c, 0xa3, 0x53, 0x90, 0x76, 0x0f, 0x4d, 0x4f, 0x7d, 0xb9, 0x98, 0xa7, - 0x11, 0xc2, 0x9f, 0xe6, 0xbf, 0x93, 0x86, 0xc9, 0x51, 0x42, 0xec, 0x2a, 0xa4, 0x5a, 0x64, 0x96, - 0xc5, 0xf8, 0x49, 0x7c, 0xc0, 0x30, 0xbd, 0x4e, 0x4c, 0xff, 0x84, 0x4e, 0xac, 0x40, 0xce, 0xc4, - 0xae, 0x87, 0x9b, 0x2c, 0x22, 0x12, 0x23, 0xc6, 0x14, 0x30, 0xd0, 0x60, 0x48, 0x25, 0x7f, 0xa2, - 0x90, 0x7a, 0x01, 0x26, 0xfd, 0x21, 0x29, 0x8e, 0x6a, 0xb6, 0x45, 0x6c, 0x2e, 0x45, 0x8d, 0x64, - 0xb1, 0x2a, 0x70, 0x32, 0x81, 0xc9, 0x05, 0xdc, 0xf3, 0x8c, 0xd6, 0x01, 0x2c, 0x13, 0x5b, 0x2d, - 0xa5, 0x89, 0x35, 0xa3, 0x98, 0x39, 0xc6, 0x4b, 0x35, 0x62, 0x32, 0xe0, 0x25, 0x8b, 0x49, 0x35, - 0x03, 0x5d, 0x09, 0x42, 0x6d, 0xfc, 0x98, 0x48, 0xd9, 0x66, 0x9b, 0x6c, 0x20, 0xda, 0xf6, 0xa1, - 0xe0, 0x60, 0x12, 0xf7, 0xb8, 0xc9, 0x67, 0x96, 0xa5, 0x83, 0x58, 0x8c, 0x9c, 0x99, 0xcc, 0x61, - 0x6c, 0x62, 0x13, 0x4e, 0xf8, 0x11, 0x3d, 0x0c, 0xbe, 0x40, 0xa1, 0x61, 0x05, 0x34, 0x0b, 0xe5, - 0x85, 0x70, 0x47, 0xed, 0xe0, 0xd9, 0x3b, 0x50, 0xe8, 0x75, 0x0f, 0x9a, 0x81, 0x94, 0xeb, 0xa9, - 0x8e, 0x47, 0xa3, 0x30, 0x25, 0xb3, 0x07, 0x24, 0x41, 0x02, 0x9b, 0x4d, 0x9a, 0xe5, 0x52, 0x32, - 0xf9, 0x17, 0xfd, 0x5c, 0x30, 0xe1, 0x04, 0x9d, 0xf0, 0x27, 0x07, 0x57, 0xb4, 0x87, 0xb9, 0x7f, - 0xde, 0xb3, 0x97, 0x60, 0xa2, 0x67, 0x02, 0xa3, 0xbe, 0x7a, 0xfe, 0x17, 0xe1, 0x81, 0xa1, 0xd4, - 0xe8, 0x05, 0x98, 0xe9, 0x9a, 0xba, 0xe9, 0x61, 0xc7, 0x76, 0x30, 0x89, 0x58, 0xf6, 0xaa, 0xe2, - 0xbf, 0x8d, 0x1f, 0x13, 0x73, 0xfb, 0x61, 0x6b, 0xc6, 0x22, 0x4f, 0x77, 0x07, 0x85, 0x4f, 0x64, - 0x33, 0x3f, 0x1a, 0x97, 0xee, 0xde, 0xbd, 0x7b, 0x37, 0x3e, 0xff, 0x6a, 0x1a, 0x66, 0x86, 0xed, - 0x99, 0xa1, 0xdb, 0xf7, 0x14, 0xa4, 0xcd, 0x6e, 0xa7, 0x81, 0x1d, 0xea, 0xa4, 0x94, 0xcc, 0x9f, - 0x50, 0x05, 0x52, 0x86, 0xda, 0xc0, 0x46, 0x31, 0x39, 0x17, 0x5b, 0x28, 0x2c, 0x3f, 0x39, 0xd2, - 0xae, 0x5c, 0xdc, 0x22, 0x10, 0x99, 0x21, 0xd1, 0xa7, 0x21, 0xc9, 0x53, 0x34, 0x61, 0x78, 0x62, - 0x34, 0x06, 0xb2, 0x97, 0x64, 0x8a, 0x43, 0x0f, 0x42, 0x96, 0xfc, 0x65, 0xb1, 0x91, 0xa6, 0x63, - 0xce, 0x10, 0x01, 0x89, 0x0b, 0x34, 0x0b, 0x19, 0xba, 0x4d, 0x9a, 0x58, 0x94, 0x36, 0xff, 0x99, - 0x04, 0x56, 0x13, 0xb7, 0xd4, 0xae, 0xe1, 0x29, 0xb7, 0x54, 0xa3, 0x8b, 0x69, 0xc0, 0x67, 0xe5, - 0x3c, 0x17, 0x7e, 0x96, 0xc8, 0xd0, 0x59, 0xc8, 0xb1, 0x5d, 0xa5, 0x9b, 0x4d, 0xfc, 0x32, 0xcd, - 0x9e, 0x29, 0x99, 0x6d, 0xb4, 0x4d, 0x22, 0x21, 0xaf, 0xbf, 0xe1, 0x5a, 0xa6, 0x08, 0x4d, 0xfa, - 0x0a, 0x22, 0xa0, 0xaf, 0xbf, 0xd4, 0x9f, 0xb8, 0x1f, 0x1a, 0x3e, 0xbd, 0xfe, 0x98, 0x9a, 0xff, - 0x56, 0x1c, 0x92, 0x34, 0x5f, 0x4c, 0x42, 0x6e, 0xef, 0xc5, 0xdd, 0xaa, 0xb2, 0x5e, 0xdb, 0x5f, - 0xdd, 0xaa, 0x4a, 0x31, 0x54, 0x00, 0xa0, 0x82, 0x6b, 0x5b, 0xb5, 0xca, 0x9e, 0x14, 0xf7, 0x9f, - 0x37, 0x77, 0xf6, 0x2e, 0x5e, 0x90, 0x12, 0x3e, 0x60, 0x9f, 0x09, 0x92, 0x61, 0x83, 0xf3, 0xcb, - 0x52, 0x0a, 0x49, 0x90, 0x67, 0x04, 0x9b, 0x2f, 0x54, 0xd7, 0x2f, 0x5e, 0x90, 0xd2, 0xbd, 0x92, - 0xf3, 0xcb, 0xd2, 0x38, 0x9a, 0x80, 0x2c, 0x95, 0xac, 0xd6, 0x6a, 0x5b, 0x52, 0xc6, 0xe7, 0xac, - 0xef, 0xc9, 0x9b, 0x3b, 0x1b, 0x52, 0xd6, 0xe7, 0xdc, 0x90, 0x6b, 0xfb, 0xbb, 0x12, 0xf8, 0x0c, - 0xdb, 0xd5, 0x7a, 0xbd, 0xb2, 0x51, 0x95, 0x72, 0xbe, 0xc5, 0xea, 0x8b, 0x7b, 0xd5, 0xba, 0x94, - 0xef, 0x19, 0xd6, 0xf9, 0x65, 0x69, 0xc2, 0x7f, 0x45, 0x75, 0x67, 0x7f, 0x5b, 0x2a, 0xa0, 0x29, - 0x98, 0x60, 0xaf, 0x10, 0x83, 0x98, 0xec, 0x13, 0x5d, 0xbc, 0x20, 0x49, 0xc1, 0x40, 0x18, 0xcb, - 0x54, 0x8f, 0xe0, 0xe2, 0x05, 0x09, 0xcd, 0xaf, 0x41, 0x8a, 0x46, 0x17, 0x42, 0x50, 0xd8, 0xaa, - 0xac, 0x56, 0xb7, 0x94, 0xda, 0xee, 0xde, 0x66, 0x6d, 0xa7, 0xb2, 0x25, 0xc5, 0x02, 0x99, 0x5c, - 0xfd, 0xcc, 0xfe, 0xa6, 0x5c, 0x5d, 0x97, 0xe2, 0x61, 0xd9, 0x6e, 0xb5, 0xb2, 0x57, 0x5d, 0x97, - 0x12, 0xf3, 0x1a, 0xcc, 0x0c, 0xcb, 0x93, 0x43, 0x77, 0x46, 0x68, 0x89, 0xe3, 0xc7, 0x2c, 0x31, - 0xe5, 0x1a, 0x58, 0xe2, 0x1f, 0xc6, 0x61, 0x7a, 0x48, 0xad, 0x18, 0xfa, 0x92, 0x67, 0x21, 0xc5, - 0x42, 0x94, 0x55, 0xcf, 0xc7, 0x87, 0x16, 0x1d, 0x1a, 0xb0, 0x03, 0x15, 0x94, 0xe2, 0xc2, 0x1d, - 0x44, 0xe2, 0x98, 0x0e, 0x82, 0x50, 0x0c, 0xe4, 0xf4, 0x5f, 0x18, 0xc8, 0xe9, 0xac, 0xec, 0x5d, - 0x1c, 0xa5, 0xec, 0x51, 0xd9, 0xc9, 0x72, 0x7b, 0x6a, 0x48, 0x6e, 0xbf, 0x0a, 0x53, 0x03, 0x44, - 0x23, 0xe7, 0xd8, 0x57, 0x62, 0x50, 0x3c, 0xce, 0x39, 0x11, 0x99, 0x2e, 0xde, 0x93, 0xe9, 0xae, - 0xf6, 0x7b, 0xf0, 0xdc, 0xf1, 0x8b, 0x30, 0xb0, 0xd6, 0x6f, 0xc6, 0xe0, 0xd4, 0xf0, 0x4e, 0x71, - 0xe8, 0x18, 0x3e, 0x0d, 0xe9, 0x0e, 0xf6, 0x0e, 0x2c, 0xd1, 0x2d, 0x7d, 0x72, 0x48, 0x0d, 0x26, - 0xea, 0xfe, 0xc5, 0xe6, 0xa8, 0x70, 0x11, 0x4f, 0x1c, 0xd7, 0xee, 0xb1, 0xd1, 0x0c, 0x8c, 0xf4, - 0x0b, 0x71, 0x78, 0x60, 0x28, 0xf9, 0xd0, 0x81, 0x3e, 0x04, 0xa0, 0x9b, 0x76, 0xd7, 0x63, 0x1d, - 0x11, 0x4b, 0xb0, 0x59, 0x2a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0xae, 0xe7, 0xeb, 0x13, 0x54, 0x0f, - 0x4c, 0x44, 0x0d, 0x2e, 0x07, 0x03, 0x4d, 0xd2, 0x81, 0x96, 0x8e, 0x99, 0xe9, 0x40, 0x60, 0x3e, - 0x0d, 0x92, 0x66, 0xe8, 0xd8, 0xf4, 0x14, 0xd7, 0x73, 0xb0, 0xda, 0xd1, 0xcd, 0x36, 0xad, 0x20, - 0x99, 0x72, 0xaa, 0xa5, 0x1a, 0x2e, 0x96, 0x27, 0x99, 0xba, 0x2e, 0xb4, 0x04, 0x41, 0x03, 0xc8, - 0x09, 0x21, 0xd2, 0x3d, 0x08, 0xa6, 0xf6, 0x11, 0xf3, 0xdf, 0xcc, 0x40, 0x2e, 0xd4, 0x57, 0xa3, - 0x73, 0x90, 0xbf, 0xa1, 0xde, 0x52, 0x15, 0x71, 0x56, 0x62, 0x9e, 0xc8, 0x11, 0xd9, 0x2e, 0x3f, - 0x2f, 0x3d, 0x0d, 0x33, 0xd4, 0xc4, 0xea, 0x7a, 0xd8, 0x51, 0x34, 0x43, 0x75, 0x5d, 0xea, 0xb4, - 0x0c, 0x35, 0x45, 0x44, 0x57, 0x23, 0xaa, 0x35, 0xa1, 0x41, 0x2b, 0x30, 0x4d, 0x11, 0x9d, 0xae, - 0xe1, 0xe9, 0xb6, 0x81, 0x15, 0x72, 0x7a, 0x73, 0x69, 0x25, 0xf1, 0x47, 0x36, 0x45, 0x2c, 0xb6, - 0xb9, 0x01, 0x19, 0x91, 0x8b, 0xd6, 0xe1, 0x21, 0x0a, 0x6b, 0x63, 0x13, 0x3b, 0xaa, 0x87, 0x15, - 0xfc, 0xf9, 0xae, 0x6a, 0xb8, 0x8a, 0x6a, 0x36, 0x95, 0x03, 0xd5, 0x3d, 0x28, 0xce, 0x10, 0x82, - 0xd5, 0x78, 0x31, 0x26, 0x9f, 0x21, 0x86, 0x1b, 0xdc, 0xae, 0x4a, 0xcd, 0x2a, 0x66, 0xf3, 0xba, - 0xea, 0x1e, 0xa0, 0x32, 0x9c, 0xa2, 0x2c, 0xae, 0xe7, 0xe8, 0x66, 0x5b, 0xd1, 0x0e, 0xb0, 0x76, - 0x53, 0xe9, 0x7a, 0xad, 0xcb, 0xc5, 0x07, 0xc3, 0xef, 0xa7, 0x23, 0xac, 0x53, 0x9b, 0x35, 0x62, - 0xb2, 0xef, 0xb5, 0x2e, 0xa3, 0x3a, 0xe4, 0xc9, 0x62, 0x74, 0xf4, 0x3b, 0x58, 0x69, 0x59, 0x0e, - 0x2d, 0x8d, 0x85, 0x21, 0xa9, 0x29, 0xe4, 0xc1, 0xc5, 0x1a, 0x07, 0x6c, 0x5b, 0x4d, 0x5c, 0x4e, - 0xd5, 0x77, 0xab, 0xd5, 0x75, 0x39, 0x27, 0x58, 0xae, 0x59, 0x0e, 0x09, 0xa8, 0xb6, 0xe5, 0x3b, - 0x38, 0xc7, 0x02, 0xaa, 0x6d, 0x09, 0xf7, 0xae, 0xc0, 0xb4, 0xa6, 0xb1, 0x39, 0xeb, 0x9a, 0xc2, - 0xcf, 0x58, 0x6e, 0x51, 0xea, 0x71, 0x96, 0xa6, 0x6d, 0x30, 0x03, 0x1e, 0xe3, 0x2e, 0xba, 0x02, - 0x0f, 0x04, 0xce, 0x0a, 0x03, 0xa7, 0x06, 0x66, 0xd9, 0x0f, 0x5d, 0x81, 0x69, 0xfb, 0x70, 0x10, - 0x88, 0x7a, 0xde, 0x68, 0x1f, 0xf6, 0xc3, 0x2e, 0xc1, 0x8c, 0x7d, 0x60, 0x0f, 0xe2, 0x9e, 0x08, - 0xe3, 0x90, 0x7d, 0x60, 0xf7, 0x03, 0x1f, 0xa5, 0x07, 0x6e, 0x07, 0x6b, 0xaa, 0x87, 0x9b, 0xc5, - 0xd3, 0x61, 0xf3, 0x90, 0x02, 0x2d, 0x81, 0xa4, 0x69, 0x0a, 0x36, 0xd5, 0x86, 0x81, 0x15, 0xd5, - 0xc1, 0xa6, 0xea, 0x16, 0xcf, 0x86, 0x8d, 0x0b, 0x9a, 0x56, 0xa5, 0xda, 0x0a, 0x55, 0xa2, 0x27, - 0x60, 0xca, 0x6a, 0xdc, 0xd0, 0x58, 0x48, 0x2a, 0xb6, 0x83, 0x5b, 0xfa, 0xcb, 0xc5, 0x47, 0xa8, - 0x7f, 0x27, 0x89, 0x82, 0x06, 0xe4, 0x2e, 0x15, 0xa3, 0xc7, 0x41, 0xd2, 0xdc, 0x03, 0xd5, 0xb1, - 0x69, 0x4e, 0x76, 0x6d, 0x55, 0xc3, 0xc5, 0x47, 0x99, 0x29, 0x93, 0xef, 0x08, 0x31, 0xd9, 0x12, - 0xee, 0x6d, 0xbd, 0xe5, 0x09, 0xc6, 0xc7, 0xd8, 0x96, 0xa0, 0x32, 0xce, 0xb6, 0x00, 0x12, 0x71, - 0x45, 0xcf, 0x8b, 0x17, 0xa8, 0x59, 0xc1, 0x3e, 0xb0, 0xc3, 0xef, 0x7d, 0x18, 0x26, 0x88, 0x65, - 0xf0, 0xd2, 0xc7, 0x59, 0x43, 0x66, 0x1f, 0x84, 0xde, 0xf8, 0x91, 0xf5, 0xc6, 0xf3, 0x65, 0xc8, - 0x87, 0xe3, 0x13, 0x65, 0x81, 0x45, 0xa8, 0x14, 0x23, 0xcd, 0xca, 0x5a, 0x6d, 0x9d, 0xb4, 0x19, - 0x2f, 0x55, 0xa5, 0x38, 0x69, 0x77, 0xb6, 0x36, 0xf7, 0xaa, 0x8a, 0xbc, 0xbf, 0xb3, 0xb7, 0xb9, - 0x5d, 0x95, 0x12, 0xe1, 0xbe, 0xfa, 0xbb, 0x71, 0x28, 0xf4, 0x1e, 0x91, 0xd0, 0xcf, 0xc2, 0x69, - 0x71, 0x9f, 0xe1, 0x62, 0x4f, 0xb9, 0xad, 0x3b, 0x74, 0xcb, 0x74, 0x54, 0x56, 0xbe, 0xfc, 0x45, - 0x9b, 0xe1, 0x56, 0x75, 0xec, 0x3d, 0xaf, 0x3b, 0x64, 0x43, 0x74, 0x54, 0x0f, 0x6d, 0xc1, 0x59, - 0xd3, 0x52, 0x5c, 0x4f, 0x35, 0x9b, 0xaa, 0xd3, 0x54, 0x82, 0x9b, 0x24, 0x45, 0xd5, 0x34, 0xec, - 0xba, 0x16, 0x2b, 0x55, 0x3e, 0xcb, 0x27, 0x4c, 0xab, 0xce, 0x8d, 0x83, 0x1c, 0x5e, 0xe1, 0xa6, - 0x7d, 0x01, 0x96, 0x38, 0x2e, 0xc0, 0x1e, 0x84, 0x6c, 0x47, 0xb5, 0x15, 0x6c, 0x7a, 0xce, 0x21, - 0x6d, 0x8c, 0x33, 0x72, 0xa6, 0xa3, 0xda, 0x55, 0xf2, 0xfc, 0xf1, 0x9c, 0x4f, 0x7e, 0x90, 0x80, - 0x7c, 0xb8, 0x39, 0x26, 0x67, 0x0d, 0x8d, 0xd6, 0x91, 0x18, 0xcd, 0x34, 0x0f, 0xdf, 0xb7, 0x95, - 0x5e, 0x5c, 0x23, 0x05, 0xa6, 0x9c, 0x66, 0x2d, 0xab, 0xcc, 0x90, 0xa4, 0xb8, 0x93, 0xdc, 0x82, - 0x59, 0x8b, 0x90, 0x91, 0xf9, 0x13, 0xda, 0x80, 0xf4, 0x0d, 0x97, 0x72, 0xa7, 0x29, 0xf7, 0x23, - 0xf7, 0xe7, 0x7e, 0xae, 0x4e, 0xc9, 0xb3, 0xcf, 0xd5, 0x95, 0x9d, 0x9a, 0xbc, 0x5d, 0xd9, 0x92, - 0x39, 0x1c, 0x9d, 0x81, 0xa4, 0xa1, 0xde, 0x39, 0xec, 0x2d, 0x45, 0x54, 0x34, 0xaa, 0xe3, 0xcf, - 0x40, 0xf2, 0x36, 0x56, 0x6f, 0xf6, 0x16, 0x00, 0x2a, 0xfa, 0x08, 0x43, 0x7f, 0x09, 0x52, 0xd4, - 0x5f, 0x08, 0x80, 0x7b, 0x4c, 0x1a, 0x43, 0x19, 0x48, 0xae, 0xd5, 0x64, 0x12, 0xfe, 0x12, 0xe4, - 0x99, 0x54, 0xd9, 0xdd, 0xac, 0xae, 0x55, 0xa5, 0xf8, 0xfc, 0x0a, 0xa4, 0x99, 0x13, 0xc8, 0xd6, - 0xf0, 0xdd, 0x20, 0x8d, 0xf1, 0x47, 0xce, 0x11, 0x13, 0xda, 0xfd, 0xed, 0xd5, 0xaa, 0x2c, 0xc5, - 0xc3, 0xcb, 0xeb, 0x42, 0x3e, 0xdc, 0x17, 0x7f, 0x3c, 0x31, 0xf5, 0x0f, 0x31, 0xc8, 0x85, 0xfa, - 0x5c, 0xd2, 0xa0, 0xa8, 0x86, 0x61, 0xdd, 0x56, 0x54, 0x43, 0x57, 0x5d, 0x1e, 0x14, 0x40, 0x45, - 0x15, 0x22, 0x19, 0x75, 0xd1, 0x3e, 0x96, 0xc1, 0xbf, 0x11, 0x03, 0xa9, 0xbf, 0xc5, 0xec, 0x1b, - 0x60, 0xec, 0xa7, 0x3a, 0xc0, 0xd7, 0x63, 0x50, 0xe8, 0xed, 0x2b, 0xfb, 0x86, 0x77, 0xee, 0xa7, - 0x3a, 0xbc, 0xb7, 0xe3, 0x30, 0xd1, 0xd3, 0x4d, 0x8e, 0x3a, 0xba, 0xcf, 0xc3, 0x94, 0xde, 0xc4, - 0x1d, 0xdb, 0xf2, 0xb0, 0xa9, 0x1d, 0x2a, 0x06, 0xbe, 0x85, 0x8d, 0xe2, 0x3c, 0x4d, 0x14, 0x4b, - 0xf7, 0xef, 0x57, 0x17, 0x37, 0x03, 0xdc, 0x16, 0x81, 0x95, 0xa7, 0x37, 0xd7, 0xab, 0xdb, 0xbb, - 0xb5, 0xbd, 0xea, 0xce, 0xda, 0x8b, 0xca, 0xfe, 0xce, 0xcf, 0xef, 0xd4, 0x9e, 0xdf, 0x91, 0x25, - 0xbd, 0xcf, 0xec, 0x23, 0xdc, 0xea, 0xbb, 0x20, 0xf5, 0x0f, 0x0a, 0x9d, 0x86, 0x61, 0xc3, 0x92, - 0xc6, 0xd0, 0x34, 0x4c, 0xee, 0xd4, 0x94, 0xfa, 0xe6, 0x7a, 0x55, 0xa9, 0x5e, 0xbb, 0x56, 0x5d, - 0xdb, 0xab, 0xb3, 0x1b, 0x08, 0xdf, 0x7a, 0xaf, 0x77, 0x53, 0xbf, 0x96, 0x80, 0xe9, 0x21, 0x23, - 0x41, 0x15, 0x7e, 0x76, 0x60, 0xc7, 0x99, 0xa7, 0x46, 0x19, 0xfd, 0x22, 0x29, 0xf9, 0xbb, 0xaa, - 0xe3, 0xf1, 0xa3, 0xc6, 0xe3, 0x40, 0xbc, 0x64, 0x7a, 0x7a, 0x4b, 0xc7, 0x0e, 0xbf, 0xb0, 0x61, - 0x07, 0x8a, 0xc9, 0x40, 0xce, 0xee, 0x6c, 0x7e, 0x06, 0x90, 0x6d, 0xb9, 0xba, 0xa7, 0xdf, 0xc2, - 0x8a, 0x6e, 0x8a, 0xdb, 0x1d, 0x72, 0xc0, 0x48, 0xca, 0x92, 0xd0, 0x6c, 0x9a, 0x9e, 0x6f, 0x6d, - 0xe2, 0xb6, 0xda, 0x67, 0x4d, 0x12, 0x78, 0x42, 0x96, 0x84, 0xc6, 0xb7, 0x3e, 0x07, 0xf9, 0xa6, - 0xd5, 0x25, 0x5d, 0x17, 0xb3, 0x23, 0xf5, 0x22, 0x26, 0xe7, 0x98, 0xcc, 0x37, 0xe1, 0xfd, 0x74, - 0x70, 0xad, 0x94, 0x97, 0x73, 0x4c, 0xc6, 0x4c, 0x1e, 0x83, 0x49, 0xb5, 0xdd, 0x76, 0x08, 0xb9, - 0x20, 0x62, 0x27, 0x84, 0x82, 0x2f, 0xa6, 0x86, 0xb3, 0xcf, 0x41, 0x46, 0xf8, 0x81, 0x94, 0x64, - 0xe2, 0x09, 0xc5, 0x66, 0xc7, 0xde, 0xf8, 0x42, 0x56, 0xce, 0x98, 0x42, 0x79, 0x0e, 0xf2, 0xba, - 0xab, 0x04, 0xb7, 0xe4, 0xf1, 0xb9, 0xf8, 0x42, 0x46, 0xce, 0xe9, 0xae, 0x7f, 0xc3, 0x38, 0xff, - 0x66, 0x1c, 0x0a, 0xbd, 0xb7, 0xfc, 0x68, 0x1d, 0x32, 0x86, 0xa5, 0xa9, 0x34, 0xb4, 0xd8, 0x27, - 0xa6, 0x85, 0x88, 0x0f, 0x03, 0x8b, 0x5b, 0xdc, 0x5e, 0xf6, 0x91, 0xb3, 0xff, 0x12, 0x83, 0x8c, - 0x10, 0xa3, 0x53, 0x90, 0xb4, 0x55, 0xef, 0x80, 0xd2, 0xa5, 0x56, 0xe3, 0x52, 0x4c, 0xa6, 0xcf, - 0x44, 0xee, 0xda, 0xaa, 0x49, 0x43, 0x80, 0xcb, 0xc9, 0x33, 0x59, 0x57, 0x03, 0xab, 0x4d, 0x7a, - 0xfc, 0xb0, 0x3a, 0x1d, 0x6c, 0x7a, 0xae, 0x58, 0x57, 0x2e, 0x5f, 0xe3, 0x62, 0xf4, 0x24, 0x4c, - 0x79, 0x8e, 0xaa, 0x1b, 0x3d, 0xb6, 0x49, 0x6a, 0x2b, 0x09, 0x85, 0x6f, 0x5c, 0x86, 0x33, 0x82, - 0xb7, 0x89, 0x3d, 0x55, 0x3b, 0xc0, 0xcd, 0x00, 0x94, 0xa6, 0xd7, 0x0c, 0xa7, 0xb9, 0xc1, 0x3a, - 0xd7, 0x0b, 0xec, 0xfc, 0xf7, 0x63, 0x30, 0x25, 0x0e, 0x4c, 0x4d, 0xdf, 0x59, 0xdb, 0x00, 0xaa, - 0x69, 0x5a, 0x5e, 0xd8, 0x5d, 0x83, 0xa1, 0x3c, 0x80, 0x5b, 0xac, 0xf8, 0x20, 0x39, 0x44, 0x30, - 0xdb, 0x01, 0x08, 0x34, 0xc7, 0xba, 0xed, 0x2c, 0xe4, 0xf8, 0x27, 0x1c, 0xfa, 0x1d, 0x90, 0x1d, - 0xb1, 0x81, 0x89, 0xc8, 0xc9, 0x0a, 0xcd, 0x40, 0xaa, 0x81, 0xdb, 0xba, 0xc9, 0x2f, 0x66, 0xd9, - 0x83, 0xb8, 0x08, 0x49, 0xfa, 0x17, 0x21, 0xab, 0x9f, 0x83, 0x69, 0xcd, 0xea, 0xf4, 0x0f, 0x77, - 0x55, 0xea, 0x3b, 0xe6, 0xbb, 0xd7, 0x63, 0x2f, 0x41, 0xd0, 0x62, 0x7e, 0x10, 0x8b, 0xfd, 0x49, - 0x3c, 0xb1, 0xb1, 0xbb, 0xfa, 0xb5, 0xf8, 0xec, 0x06, 0x83, 0xee, 0x8a, 0x99, 0xca, 0xb8, 0x65, - 0x60, 0x8d, 0x8c, 0x1e, 0xbe, 0xb2, 0x00, 0x4f, 0xb5, 0x75, 0xef, 0xa0, 0xdb, 0x58, 0xd4, 0xac, - 0xce, 0x52, 0xdb, 0x6a, 0x5b, 0xc1, 0xa7, 0x4f, 0xf2, 0x44, 0x1f, 0xe8, 0x7f, 0xfc, 0xf3, 0x67, - 0xd6, 0x97, 0xce, 0x46, 0x7e, 0x2b, 0x2d, 0xef, 0xc0, 0x34, 0x37, 0x56, 0xe8, 0xf7, 0x17, 0x76, - 0x8a, 0x40, 0xf7, 0xbd, 0xc3, 0x2a, 0x7e, 0xe3, 0x1d, 0x5a, 0xae, 0xe5, 0x29, 0x0e, 0x25, 0x3a, - 0x76, 0xd0, 0x28, 0xcb, 0xf0, 0x40, 0x0f, 0x1f, 0xdb, 0x9a, 0xd8, 0x89, 0x60, 0xfc, 0x2e, 0x67, - 0x9c, 0x0e, 0x31, 0xd6, 0x39, 0xb4, 0xbc, 0x06, 0x13, 0x27, 0xe1, 0xfa, 0x27, 0xce, 0x95, 0xc7, - 0x61, 0x92, 0x0d, 0x98, 0xa4, 0x24, 0x5a, 0xd7, 0xf5, 0xac, 0x0e, 0xcd, 0x7b, 0xf7, 0xa7, 0xf9, - 0xe7, 0x77, 0xd8, 0x5e, 0x29, 0x10, 0xd8, 0x9a, 0x8f, 0x2a, 0x97, 0x81, 0x7e, 0x72, 0x6a, 0x62, - 0xcd, 0x88, 0x60, 0x78, 0x8b, 0x0f, 0xc4, 0xb7, 0x2f, 0x7f, 0x16, 0x66, 0xc8, 0xff, 0x34, 0x2d, - 0x85, 0x47, 0x12, 0x7d, 0xe1, 0x55, 0xfc, 0xfe, 0x2b, 0x6c, 0x3b, 0x4e, 0xfb, 0x04, 0xa1, 0x31, - 0x85, 0x56, 0xb1, 0x8d, 0x3d, 0x0f, 0x3b, 0xae, 0xa2, 0x1a, 0xc3, 0x86, 0x17, 0xba, 0x31, 0x28, - 0x7e, 0xf1, 0xdd, 0xde, 0x55, 0xdc, 0x60, 0xc8, 0x8a, 0x61, 0x94, 0xf7, 0xe1, 0xf4, 0x90, 0xa8, - 0x18, 0x81, 0xf3, 0x35, 0xce, 0x39, 0x33, 0x10, 0x19, 0x84, 0x76, 0x17, 0x84, 0xdc, 0x5f, 0xcb, - 0x11, 0x38, 0xff, 0x90, 0x73, 0x22, 0x8e, 0x15, 0x4b, 0x4a, 0x18, 0x9f, 0x83, 0xa9, 0x5b, 0xd8, - 0x69, 0x58, 0x2e, 0xbf, 0xa5, 0x19, 0x81, 0xee, 0x75, 0x4e, 0x37, 0xc9, 0x81, 0xf4, 0xda, 0x86, - 0x70, 0x5d, 0x81, 0x4c, 0x4b, 0xd5, 0xf0, 0x08, 0x14, 0x5f, 0xe2, 0x14, 0xe3, 0xc4, 0x9e, 0x40, - 0x2b, 0x90, 0x6f, 0x5b, 0xbc, 0x32, 0x45, 0xc3, 0xdf, 0xe0, 0xf0, 0x9c, 0xc0, 0x70, 0x0a, 0xdb, - 0xb2, 0xbb, 0x06, 0x29, 0x5b, 0xd1, 0x14, 0x7f, 0x24, 0x28, 0x04, 0x86, 0x53, 0x9c, 0xc0, 0xad, - 0x7f, 0x2c, 0x28, 0xdc, 0x90, 0x3f, 0x9f, 0x85, 0x9c, 0x65, 0x1a, 0x87, 0x96, 0x39, 0xca, 0x20, - 0xbe, 0xcc, 0x19, 0x80, 0x43, 0x08, 0xc1, 0x55, 0xc8, 0x8e, 0xba, 0x10, 0x5f, 0x79, 0x57, 0x6c, - 0x0f, 0xb1, 0x02, 0x1b, 0x30, 0x29, 0x12, 0x94, 0x6e, 0x99, 0x23, 0x50, 0xfc, 0x29, 0xa7, 0x28, - 0x84, 0x60, 0x7c, 0x1a, 0x1e, 0x76, 0xbd, 0x36, 0x1e, 0x85, 0xe4, 0x4d, 0x31, 0x0d, 0x0e, 0xe1, - 0xae, 0x6c, 0x60, 0x53, 0x3b, 0x18, 0x8d, 0xe1, 0xab, 0xc2, 0x95, 0x02, 0x43, 0x28, 0xd6, 0x60, - 0xa2, 0xa3, 0x3a, 0xee, 0x81, 0x6a, 0x8c, 0xb4, 0x1c, 0x7f, 0xc6, 0x39, 0xf2, 0x3e, 0x88, 0x7b, - 0xa4, 0x6b, 0x9e, 0x84, 0xe6, 0x6b, 0xc2, 0x23, 0x21, 0x18, 0xdf, 0x7a, 0xae, 0x47, 0xaf, 0xb4, - 0x4e, 0xc2, 0xf6, 0xe7, 0x62, 0xeb, 0x31, 0xec, 0x76, 0x98, 0xf1, 0x2a, 0x64, 0x5d, 0xfd, 0xce, - 0x48, 0x34, 0x7f, 0x21, 0x56, 0x9a, 0x02, 0x08, 0xf8, 0x45, 0x38, 0x33, 0xb4, 0x4c, 0x8c, 0x40, - 0xf6, 0x97, 0x9c, 0xec, 0xd4, 0x90, 0x52, 0xc1, 0x53, 0xc2, 0x49, 0x29, 0xff, 0x4a, 0xa4, 0x04, - 0xdc, 0xc7, 0xb5, 0x4b, 0xce, 0x0a, 0xae, 0xda, 0x3a, 0x99, 0xd7, 0xfe, 0x5a, 0x78, 0x8d, 0x61, - 0x7b, 0xbc, 0xb6, 0x07, 0xa7, 0x38, 0xe3, 0xc9, 0xd6, 0xf5, 0xeb, 0x22, 0xb1, 0x32, 0xf4, 0x7e, - 0xef, 0xea, 0x7e, 0x0e, 0x66, 0x7d, 0x77, 0x8a, 0xa6, 0xd4, 0x55, 0x3a, 0xaa, 0x3d, 0x02, 0xf3, - 0x37, 0x38, 0xb3, 0xc8, 0xf8, 0x7e, 0x57, 0xeb, 0x6e, 0xab, 0x36, 0x21, 0x7f, 0x01, 0x8a, 0x82, - 0xbc, 0x6b, 0x3a, 0x58, 0xb3, 0xda, 0xa6, 0x7e, 0x07, 0x37, 0x47, 0xa0, 0xfe, 0x9b, 0xbe, 0xa5, - 0xda, 0x0f, 0xc1, 0x09, 0xf3, 0x26, 0x48, 0x7e, 0xaf, 0xa2, 0xe8, 0x1d, 0xdb, 0x72, 0xbc, 0x08, - 0xc6, 0x6f, 0x8a, 0x95, 0xf2, 0x71, 0x9b, 0x14, 0x56, 0xae, 0x42, 0x81, 0x3e, 0x8e, 0x1a, 0x92, - 0x7f, 0xcb, 0x89, 0x26, 0x02, 0x14, 0x4f, 0x1c, 0x9a, 0xd5, 0xb1, 0x55, 0x67, 0x94, 0xfc, 0xf7, - 0x77, 0x22, 0x71, 0x70, 0x08, 0x4f, 0x1c, 0xde, 0xa1, 0x8d, 0x49, 0xb5, 0x1f, 0x81, 0xe1, 0x5b, - 0x22, 0x71, 0x08, 0x0c, 0xa7, 0x10, 0x0d, 0xc3, 0x08, 0x14, 0x7f, 0x2f, 0x28, 0x04, 0x86, 0x50, - 0x7c, 0x26, 0x28, 0xb4, 0x0e, 0x6e, 0xeb, 0xae, 0xe7, 0xb0, 0x56, 0xf8, 0xfe, 0x54, 0xdf, 0x7e, - 0xb7, 0xb7, 0x09, 0x93, 0x43, 0x50, 0x92, 0x89, 0xf8, 0x15, 0x2a, 0x3d, 0x29, 0x45, 0x0f, 0xec, - 0x3b, 0x22, 0x13, 0x85, 0x60, 0x6c, 0x7f, 0x4e, 0xf6, 0xf5, 0x2a, 0x28, 0xea, 0x87, 0x30, 0xc5, - 0x5f, 0x7a, 0x9f, 0x73, 0xf5, 0xb6, 0x2a, 0xe5, 0x2d, 0x12, 0x40, 0xbd, 0x0d, 0x45, 0x34, 0xd9, - 0x2b, 0xef, 0xfb, 0x31, 0xd4, 0xd3, 0x4f, 0x94, 0xaf, 0xc1, 0x44, 0x4f, 0x33, 0x11, 0x4d, 0xf5, - 0xcb, 0x9c, 0x2a, 0x1f, 0xee, 0x25, 0xca, 0x2b, 0x90, 0x24, 0x8d, 0x41, 0x34, 0xfc, 0x57, 0x38, - 0x9c, 0x9a, 0x97, 0x3f, 0x05, 0x19, 0xd1, 0x10, 0x44, 0x43, 0x7f, 0x95, 0x43, 0x7d, 0x08, 0x81, - 0x8b, 0x66, 0x20, 0x1a, 0xfe, 0x6b, 0x02, 0x2e, 0x20, 0x04, 0x3e, 0xba, 0x0b, 0xff, 0xf1, 0xd7, - 0x93, 0x3c, 0xa1, 0x0b, 0xdf, 0x5d, 0x85, 0x71, 0xde, 0x05, 0x44, 0xa3, 0xbf, 0xc0, 0x5f, 0x2e, - 0x10, 0xe5, 0x4b, 0x90, 0x1a, 0xd1, 0xe1, 0xbf, 0xc1, 0xa1, 0xcc, 0xbe, 0xbc, 0x06, 0xb9, 0x50, - 0xe5, 0x8f, 0x86, 0xff, 0x26, 0x87, 0x87, 0x51, 0x64, 0xe8, 0xbc, 0xf2, 0x47, 0x13, 0xfc, 0x96, - 0x18, 0x3a, 0x47, 0x10, 0xb7, 0x89, 0xa2, 0x1f, 0x8d, 0xfe, 0x6d, 0xe1, 0x75, 0x01, 0x29, 0x3f, - 0x0b, 0x59, 0x3f, 0x91, 0x47, 0xe3, 0x7f, 0x87, 0xe3, 0x03, 0x0c, 0xf1, 0x40, 0xa8, 0x90, 0x44, - 0x53, 0xfc, 0xae, 0xf0, 0x40, 0x08, 0x45, 0xb6, 0x51, 0x7f, 0x73, 0x10, 0xcd, 0xf4, 0x7b, 0x62, - 0x1b, 0xf5, 0xf5, 0x06, 0x64, 0x35, 0x69, 0x3e, 0x8d, 0xa6, 0xf8, 0x7d, 0xb1, 0x9a, 0xd4, 0x9e, - 0x0c, 0xa3, 0xbf, 0xda, 0x46, 0x73, 0xfc, 0x81, 0x18, 0x46, 0x5f, 0xb1, 0x2d, 0xef, 0x02, 0x1a, - 0xac, 0xb4, 0xd1, 0x7c, 0xaf, 0x72, 0xbe, 0xa9, 0x81, 0x42, 0x5b, 0x7e, 0x1e, 0x4e, 0x0d, 0xaf, - 0xb2, 0xd1, 0xac, 0x5f, 0x7c, 0xbf, 0xef, 0x5c, 0x14, 0x2e, 0xb2, 0xe5, 0xbd, 0x20, 0x5d, 0x87, - 0x2b, 0x6c, 0x34, 0xed, 0x6b, 0xef, 0xf7, 0x66, 0xec, 0x70, 0x81, 0x2d, 0x57, 0x00, 0x82, 0xe2, - 0x16, 0xcd, 0xf5, 0x3a, 0xe7, 0x0a, 0x81, 0xc8, 0xd6, 0xe0, 0xb5, 0x2d, 0x1a, 0xff, 0x25, 0xb1, - 0x35, 0x38, 0x82, 0x6c, 0x0d, 0x51, 0xd6, 0xa2, 0xd1, 0x6f, 0x88, 0xad, 0x21, 0x20, 0x24, 0xb2, - 0x43, 0x95, 0x23, 0x9a, 0xe1, 0xcb, 0x22, 0xb2, 0x43, 0xa8, 0xf2, 0x55, 0xc8, 0x98, 0x5d, 0xc3, - 0x20, 0x01, 0x8a, 0xee, 0xff, 0x03, 0xb1, 0xe2, 0xbf, 0x7f, 0xc8, 0x47, 0x20, 0x00, 0xe5, 0x15, - 0x48, 0xe1, 0x4e, 0x03, 0x37, 0xa3, 0x90, 0xff, 0xf1, 0xa1, 0x48, 0x4a, 0xc4, 0xba, 0xfc, 0x2c, - 0x00, 0x3b, 0xda, 0xd3, 0xcf, 0x56, 0x11, 0xd8, 0xff, 0xfc, 0x90, 0xff, 0x74, 0x23, 0x80, 0x04, - 0x04, 0xec, 0x87, 0x20, 0xf7, 0x27, 0x78, 0xb7, 0x97, 0x80, 0xce, 0xfa, 0x0a, 0x8c, 0xdf, 0x70, - 0x2d, 0xd3, 0x53, 0xdb, 0x51, 0xe8, 0xff, 0xe2, 0x68, 0x61, 0x4f, 0x1c, 0xd6, 0xb1, 0x1c, 0xec, - 0xa9, 0x6d, 0x37, 0x0a, 0xfb, 0xdf, 0x1c, 0xeb, 0x03, 0x08, 0x58, 0x53, 0x5d, 0x6f, 0x94, 0x79, - 0xff, 0x58, 0x80, 0x05, 0x80, 0x0c, 0x9a, 0xfc, 0x7f, 0x13, 0x1f, 0x46, 0x61, 0xdf, 0x13, 0x83, - 0xe6, 0xf6, 0xe5, 0x4f, 0x41, 0x96, 0xfc, 0xcb, 0x7e, 0x8f, 0x15, 0x01, 0xfe, 0x1f, 0x0e, 0x0e, - 0x10, 0xe4, 0xcd, 0xae, 0xd7, 0xf4, 0xf4, 0x68, 0x67, 0xff, 0x2f, 0x5f, 0x69, 0x61, 0x5f, 0xae, - 0x40, 0xce, 0xf5, 0x9a, 0xcd, 0x2e, 0xef, 0xaf, 0x22, 0xe0, 0xff, 0xf7, 0xa1, 0x7f, 0xe4, 0xf6, - 0x31, 0xab, 0xd5, 0xe1, 0xb7, 0x87, 0xb0, 0x61, 0x6d, 0x58, 0xec, 0xde, 0xf0, 0xa5, 0xf9, 0xe8, - 0x0b, 0x40, 0x78, 0x35, 0x05, 0xb3, 0x9a, 0xd5, 0x69, 0x58, 0xee, 0x92, 0x9f, 0xb1, 0x96, 0x2c, - 0x93, 0x33, 0xa2, 0x84, 0x65, 0xe2, 0xd9, 0x93, 0x5d, 0x24, 0xce, 0x9f, 0x81, 0x54, 0xbd, 0xdb, - 0x68, 0x1c, 0x22, 0x09, 0x12, 0x6e, 0xb7, 0xc1, 0x7f, 0x94, 0x43, 0xfe, 0x9d, 0xff, 0x41, 0x02, - 0x72, 0x75, 0xb5, 0x63, 0x1b, 0xb8, 0x66, 0xe2, 0x5a, 0x0b, 0x15, 0x21, 0x4d, 0x67, 0xfa, 0x0c, - 0x35, 0x8a, 0x5d, 0x1f, 0x93, 0xf9, 0xb3, 0xaf, 0x59, 0xa6, 0x17, 0xac, 0x71, 0x5f, 0xb3, 0xec, - 0x6b, 0xce, 0xb3, 0xfb, 0x55, 0x5f, 0x73, 0xde, 0xd7, 0x5c, 0xa0, 0xb7, 0xac, 0x09, 0x5f, 0x73, - 0xc1, 0xd7, 0xac, 0xd0, 0xaf, 0x08, 0x13, 0xbe, 0x66, 0xc5, 0xd7, 0x5c, 0xa4, 0xdf, 0x0d, 0x92, - 0xbe, 0xe6, 0xa2, 0xaf, 0xb9, 0x44, 0x3f, 0x17, 0x4c, 0xf9, 0x9a, 0x4b, 0xbe, 0xe6, 0x32, 0xfd, - 0x44, 0x80, 0x7c, 0xcd, 0x65, 0x5f, 0x73, 0x85, 0xfe, 0xf6, 0x66, 0xdc, 0xd7, 0x5c, 0x41, 0xb3, - 0x30, 0xce, 0x66, 0xf6, 0x34, 0xfd, 0x8e, 0x3c, 0x79, 0x7d, 0x4c, 0x16, 0x82, 0x40, 0xf7, 0x0c, - 0xfd, 0x7d, 0x4d, 0x3a, 0xd0, 0x3d, 0x13, 0xe8, 0x96, 0xe9, 0xcf, 0xfc, 0xa5, 0x40, 0xb7, 0x1c, - 0xe8, 0xce, 0x17, 0x27, 0x48, 0x80, 0x04, 0xba, 0xf3, 0x81, 0xee, 0x42, 0xb1, 0x40, 0xfc, 0x1f, - 0xe8, 0x2e, 0x04, 0xba, 0x95, 0xe2, 0xe4, 0x5c, 0x6c, 0x21, 0x1f, 0xe8, 0x56, 0xd0, 0x53, 0x90, - 0x73, 0xbb, 0x0d, 0x85, 0x27, 0x43, 0xfa, 0x3b, 0x9e, 0xdc, 0x32, 0x2c, 0x92, 0x88, 0xa0, 0x8b, - 0x7a, 0x7d, 0x4c, 0x06, 0xb7, 0xdb, 0xe0, 0x49, 0x74, 0x35, 0x0f, 0xf4, 0xfa, 0x43, 0xa1, 0x3f, - 0xbf, 0x5d, 0x5d, 0x7f, 0xeb, 0x5e, 0x69, 0xec, 0x7b, 0xf7, 0x4a, 0x63, 0xff, 0x7a, 0xaf, 0x34, - 0xf6, 0xf6, 0xbd, 0x52, 0xec, 0xbd, 0x7b, 0xa5, 0xd8, 0x07, 0xf7, 0x4a, 0xb1, 0xbb, 0x47, 0xa5, - 0xd8, 0x57, 0x8f, 0x4a, 0xb1, 0xaf, 0x1f, 0x95, 0x62, 0xdf, 0x3e, 0x2a, 0xc5, 0xde, 0x3a, 0x2a, - 0xc5, 0xbe, 0x77, 0x54, 0x1a, 0x7b, 0xfb, 0xa8, 0x14, 0xfb, 0xd1, 0x51, 0x69, 0xec, 0xbd, 0xa3, - 0x52, 0xec, 0x83, 0xa3, 0xd2, 0xd8, 0xdd, 0x1f, 0x96, 0xc6, 0x1a, 0x69, 0x1a, 0x46, 0xe7, 0xff, - 0x3f, 0x00, 0x00, 0xff, 0xff, 0x84, 0x35, 0xfb, 0xc7, 0xb5, 0x33, 0x00, 0x00, + // 4082 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x1b, 0xd7, + 0x75, 0xe6, 0xe2, 0x8f, 0xc0, 0x01, 0x08, 0x2e, 0x97, 0xb4, 0x04, 0xd1, 0x31, 0x24, 0xd1, 0x76, + 0x4c, 0xdb, 0x35, 0x69, 0x53, 0xa2, 0x7e, 0xa0, 0x26, 0x2e, 0x48, 0x42, 0x14, 0x5d, 0x92, 0x60, + 0x16, 0x64, 0xfc, 0x93, 0xe9, 0xec, 0x2c, 0x16, 0x17, 0xe0, 0x4a, 0x8b, 0xdd, 0xcd, 0xee, 0x42, + 0x32, 0x35, 0x7d, 0x50, 0xc7, 0xfd, 0x99, 0x4c, 0xa7, 0xff, 0x9d, 0xa9, 0xe3, 0x3a, 0x6e, 0x93, + 0x4e, 0xe3, 0x34, 0xfd, 0x4b, 0x9a, 0x36, 0x4d, 0xd2, 0x97, 0xbe, 0xa4, 0xf5, 0x53, 0x27, 0x79, + 0xeb, 0x43, 0x1e, 0x2c, 0xc6, 0x33, 0x4d, 0x5b, 0xb7, 0x71, 0x5b, 0x3d, 0x78, 0xc6, 0x2f, 0x9d, + 0xfb, 0xb7, 0xbb, 0x58, 0x80, 0x5a, 0x30, 0x33, 0x76, 0x9e, 0xc4, 0x3d, 0xe7, 0x7c, 0xdf, 0xde, + 0x7b, 0xee, 0xb9, 0xe7, 0x9c, 0x7b, 0x17, 0x82, 0x1f, 0x5f, 0x86, 0x33, 0x1d, 0xcb, 0xea, 0x18, + 0x68, 0xd1, 0x76, 0x2c, 0xcf, 0x6a, 0xf6, 0xda, 0x8b, 0x2d, 0xe4, 0x6a, 0x8e, 0x6e, 0x7b, 0x96, + 0xb3, 0x40, 0x64, 0xd2, 0x24, 0xb5, 0x58, 0xe0, 0x16, 0x73, 0x5b, 0x30, 0x75, 0x55, 0x37, 0xd0, + 0x9a, 0x6f, 0xd8, 0x40, 0x9e, 0x74, 0x09, 0x52, 0x6d, 0xdd, 0x40, 0x25, 0xe1, 0x4c, 0x72, 0x3e, + 0xbf, 0xf4, 0xc8, 0x42, 0x04, 0xb4, 0xd0, 0x8f, 0xd8, 0xc1, 0x62, 0x99, 0x20, 0xe6, 0xde, 0x49, + 0xc1, 0xf4, 0x10, 0xad, 0x24, 0x41, 0xca, 0x54, 0xbb, 0x98, 0x51, 0x98, 0xcf, 0xc9, 0xe4, 0x6f, + 0xa9, 0x04, 0xe3, 0xb6, 0xaa, 0xdd, 0x50, 0x3b, 0xa8, 0x94, 0x20, 0x62, 0xfe, 0x28, 0x95, 0x01, + 0x5a, 0xc8, 0x46, 0x66, 0x0b, 0x99, 0xda, 0x41, 0x29, 0x79, 0x26, 0x39, 0x9f, 0x93, 0x43, 0x12, + 0xe9, 0x49, 0x98, 0xb2, 0x7b, 0x4d, 0x43, 0xd7, 0x94, 0x90, 0x19, 0x9c, 0x49, 0xce, 0xa7, 0x65, + 0x91, 0x2a, 0xd6, 0x02, 0xe3, 0xc7, 0x60, 0xf2, 0x16, 0x52, 0x6f, 0x84, 0x4d, 0xf3, 0xc4, 0xb4, + 0x88, 0xc5, 0x21, 0xc3, 0x55, 0x28, 0x74, 0x91, 0xeb, 0xaa, 0x1d, 0xa4, 0x78, 0x07, 0x36, 0x2a, + 0xa5, 0xc8, 0xec, 0xcf, 0x0c, 0xcc, 0x3e, 0x3a, 0xf3, 0x3c, 0x43, 0xed, 0x1e, 0xd8, 0x48, 0xaa, + 0x42, 0x0e, 0x99, 0xbd, 0x2e, 0x65, 0x48, 0x1f, 0xe1, 0xbf, 0x9a, 0xd9, 0xeb, 0x46, 0x59, 0xb2, + 0x18, 0xc6, 0x28, 0xc6, 0x5d, 0xe4, 0xdc, 0xd4, 0x35, 0x54, 0xca, 0x10, 0x82, 0xc7, 0x06, 0x08, + 0x1a, 0x54, 0x1f, 0xe5, 0xe0, 0x38, 0x69, 0x15, 0x72, 0xe8, 0x65, 0x0f, 0x99, 0xae, 0x6e, 0x99, + 0xa5, 0x71, 0x42, 0xf2, 0xe8, 0x90, 0x55, 0x44, 0x46, 0x2b, 0x4a, 0x11, 0xe0, 0xa4, 0x0b, 0x30, + 0x6e, 0xd9, 0x9e, 0x6e, 0x99, 0x6e, 0x29, 0x7b, 0x46, 0x98, 0xcf, 0x2f, 0x7d, 0x6c, 0x68, 0x20, + 0xd4, 0xa9, 0x8d, 0xcc, 0x8d, 0xa5, 0x0d, 0x10, 0x5d, 0xab, 0xe7, 0x68, 0x48, 0xd1, 0xac, 0x16, + 0x52, 0x74, 0xb3, 0x6d, 0x95, 0x72, 0x84, 0xe0, 0xf4, 0xe0, 0x44, 0x88, 0xe1, 0xaa, 0xd5, 0x42, + 0x1b, 0x66, 0xdb, 0x92, 0x8b, 0x6e, 0xdf, 0xb3, 0x74, 0x02, 0x32, 0xee, 0x81, 0xe9, 0xa9, 0x2f, + 0x97, 0x0a, 0x24, 0x42, 0xd8, 0xd3, 0xdc, 0xb7, 0x33, 0x30, 0x39, 0x4a, 0x88, 0x5d, 0x81, 0x74, + 0x1b, 0xcf, 0xb2, 0x94, 0x38, 0x8e, 0x0f, 0x28, 0xa6, 0xdf, 0x89, 0x99, 0x9f, 0xd0, 0x89, 0x55, + 0xc8, 0x9b, 0xc8, 0xf5, 0x50, 0x8b, 0x46, 0x44, 0x72, 0xc4, 0x98, 0x02, 0x0a, 0x1a, 0x0c, 0xa9, + 0xd4, 0x4f, 0x14, 0x52, 0x2f, 0xc0, 0xa4, 0x3f, 0x24, 0xc5, 0x51, 0xcd, 0x0e, 0x8f, 0xcd, 0xc5, + 0xb8, 0x91, 0x2c, 0xd4, 0x38, 0x4e, 0xc6, 0x30, 0xb9, 0x88, 0xfa, 0x9e, 0xa5, 0x35, 0x00, 0xcb, + 0x44, 0x56, 0x5b, 0x69, 0x21, 0xcd, 0x28, 0x65, 0x8f, 0xf0, 0x52, 0x1d, 0x9b, 0x0c, 0x78, 0xc9, + 0xa2, 0x52, 0xcd, 0x90, 0x2e, 0x07, 0xa1, 0x36, 0x7e, 0x44, 0xa4, 0x6c, 0xd1, 0x4d, 0x36, 0x10, + 0x6d, 0x7b, 0x50, 0x74, 0x10, 0x8e, 0x7b, 0xd4, 0x62, 0x33, 0xcb, 0x91, 0x41, 0x2c, 0xc4, 0xce, + 0x4c, 0x66, 0x30, 0x3a, 0xb1, 0x09, 0x27, 0xfc, 0x28, 0x3d, 0x0c, 0xbe, 0x40, 0x21, 0x61, 0x05, + 0x24, 0x0b, 0x15, 0xb8, 0x70, 0x5b, 0xed, 0xa2, 0xd9, 0xdb, 0x50, 0xec, 0x77, 0x8f, 0x34, 0x03, + 0x69, 0xd7, 0x53, 0x1d, 0x8f, 0x44, 0x61, 0x5a, 0xa6, 0x0f, 0x92, 0x08, 0x49, 0x64, 0xb6, 0x48, + 0x96, 0x4b, 0xcb, 0xf8, 0x4f, 0xe9, 0xe7, 0x82, 0x09, 0x27, 0xc9, 0x84, 0x3f, 0x3e, 0xb8, 0xa2, + 0x7d, 0xcc, 0xd1, 0x79, 0xcf, 0x5e, 0x84, 0x89, 0xbe, 0x09, 0x8c, 0xfa, 0xea, 0xb9, 0x5f, 0x84, + 0x07, 0x86, 0x52, 0x4b, 0x2f, 0xc0, 0x4c, 0xcf, 0xd4, 0x4d, 0x0f, 0x39, 0xb6, 0x83, 0x70, 0xc4, + 0xd2, 0x57, 0x95, 0xfe, 0x6d, 0xfc, 0x88, 0x98, 0xdb, 0x0b, 0x5b, 0x53, 0x16, 0x79, 0xba, 0x37, + 0x28, 0x7c, 0x22, 0x97, 0xfd, 0xd1, 0xb8, 0x78, 0xe7, 0xce, 0x9d, 0x3b, 0x89, 0xb9, 0x57, 0x33, + 0x30, 0x33, 0x6c, 0xcf, 0x0c, 0xdd, 0xbe, 0x27, 0x20, 0x63, 0xf6, 0xba, 0x4d, 0xe4, 0x10, 0x27, + 0xa5, 0x65, 0xf6, 0x24, 0x55, 0x21, 0x6d, 0xa8, 0x4d, 0x64, 0x94, 0x52, 0x67, 0x84, 0xf9, 0xe2, + 0xd2, 0x93, 0x23, 0xed, 0xca, 0x85, 0x4d, 0x0c, 0x91, 0x29, 0x52, 0xfa, 0x24, 0xa4, 0x58, 0x8a, + 0xc6, 0x0c, 0x4f, 0x8c, 0xc6, 0x80, 0xf7, 0x92, 0x4c, 0x70, 0xd2, 0x83, 0x90, 0xc3, 0xff, 0xd2, + 0xd8, 0xc8, 0x90, 0x31, 0x67, 0xb1, 0x00, 0xc7, 0x85, 0x34, 0x0b, 0x59, 0xb2, 0x4d, 0x5a, 0x88, + 0x97, 0x36, 0xff, 0x19, 0x07, 0x56, 0x0b, 0xb5, 0xd5, 0x9e, 0xe1, 0x29, 0x37, 0x55, 0xa3, 0x87, + 0x48, 0xc0, 0xe7, 0xe4, 0x02, 0x13, 0x7e, 0x1a, 0xcb, 0xa4, 0xd3, 0x90, 0xa7, 0xbb, 0x4a, 0x37, + 0x5b, 0xe8, 0x65, 0x92, 0x3d, 0xd3, 0x32, 0xdd, 0x68, 0x1b, 0x58, 0x82, 0x5f, 0x7f, 0xdd, 0xb5, + 0x4c, 0x1e, 0x9a, 0xe4, 0x15, 0x58, 0x40, 0x5e, 0x7f, 0x31, 0x9a, 0xb8, 0x1f, 0x1a, 0x3e, 0xbd, + 0x68, 0x4c, 0xcd, 0x7d, 0x33, 0x01, 0x29, 0x92, 0x2f, 0x26, 0x21, 0xbf, 0xfb, 0xe2, 0x4e, 0x4d, + 0x59, 0xab, 0xef, 0xad, 0x6c, 0xd6, 0x44, 0x41, 0x2a, 0x02, 0x10, 0xc1, 0xd5, 0xcd, 0x7a, 0x75, + 0x57, 0x4c, 0xf8, 0xcf, 0x1b, 0xdb, 0xbb, 0x17, 0xce, 0x8b, 0x49, 0x1f, 0xb0, 0x47, 0x05, 0xa9, + 0xb0, 0xc1, 0xb9, 0x25, 0x31, 0x2d, 0x89, 0x50, 0xa0, 0x04, 0x1b, 0x2f, 0xd4, 0xd6, 0x2e, 0x9c, + 0x17, 0x33, 0xfd, 0x92, 0x73, 0x4b, 0xe2, 0xb8, 0x34, 0x01, 0x39, 0x22, 0x59, 0xa9, 0xd7, 0x37, + 0xc5, 0xac, 0xcf, 0xd9, 0xd8, 0x95, 0x37, 0xb6, 0xd7, 0xc5, 0x9c, 0xcf, 0xb9, 0x2e, 0xd7, 0xf7, + 0x76, 0x44, 0xf0, 0x19, 0xb6, 0x6a, 0x8d, 0x46, 0x75, 0xbd, 0x26, 0xe6, 0x7d, 0x8b, 0x95, 0x17, + 0x77, 0x6b, 0x0d, 0xb1, 0xd0, 0x37, 0xac, 0x73, 0x4b, 0xe2, 0x84, 0xff, 0x8a, 0xda, 0xf6, 0xde, + 0x96, 0x58, 0x94, 0xa6, 0x60, 0x82, 0xbe, 0x82, 0x0f, 0x62, 0x32, 0x22, 0xba, 0x70, 0x5e, 0x14, + 0x83, 0x81, 0x50, 0x96, 0xa9, 0x3e, 0xc1, 0x85, 0xf3, 0xa2, 0x34, 0xb7, 0x0a, 0x69, 0x12, 0x5d, + 0x92, 0x04, 0xc5, 0xcd, 0xea, 0x4a, 0x6d, 0x53, 0xa9, 0xef, 0xec, 0x6e, 0xd4, 0xb7, 0xab, 0x9b, + 0xa2, 0x10, 0xc8, 0xe4, 0xda, 0xa7, 0xf6, 0x36, 0xe4, 0xda, 0x9a, 0x98, 0x08, 0xcb, 0x76, 0x6a, + 0xd5, 0xdd, 0xda, 0x9a, 0x98, 0x9c, 0xd3, 0x60, 0x66, 0x58, 0x9e, 0x1c, 0xba, 0x33, 0x42, 0x4b, + 0x9c, 0x38, 0x62, 0x89, 0x09, 0xd7, 0xc0, 0x12, 0xff, 0x30, 0x01, 0xd3, 0x43, 0x6a, 0xc5, 0xd0, + 0x97, 0x3c, 0x0b, 0x69, 0x1a, 0xa2, 0xb4, 0x7a, 0x3e, 0x3e, 0xb4, 0xe8, 0x90, 0x80, 0x1d, 0xa8, + 0xa0, 0x04, 0x17, 0xee, 0x20, 0x92, 0x47, 0x74, 0x10, 0x98, 0x62, 0x20, 0xa7, 0xff, 0xc2, 0x40, + 0x4e, 0xa7, 0x65, 0xef, 0xc2, 0x28, 0x65, 0x8f, 0xc8, 0x8e, 0x97, 0xdb, 0xd3, 0x43, 0x72, 0xfb, + 0x15, 0x98, 0x1a, 0x20, 0x1a, 0x39, 0xc7, 0xbe, 0x22, 0x40, 0xe9, 0x28, 0xe7, 0xc4, 0x64, 0xba, + 0x44, 0x5f, 0xa6, 0xbb, 0x12, 0xf5, 0xe0, 0xd9, 0xa3, 0x17, 0x61, 0x60, 0xad, 0xdf, 0x14, 0xe0, + 0xc4, 0xf0, 0x4e, 0x71, 0xe8, 0x18, 0x3e, 0x09, 0x99, 0x2e, 0xf2, 0xf6, 0x2d, 0xde, 0x2d, 0x7d, + 0x7c, 0x48, 0x0d, 0xc6, 0xea, 0xe8, 0x62, 0x33, 0x54, 0xb8, 0x88, 0x27, 0x8f, 0x6a, 0xf7, 0xe8, + 0x68, 0x06, 0x46, 0xfa, 0xb9, 0x04, 0x3c, 0x30, 0x94, 0x7c, 0xe8, 0x40, 0x1f, 0x02, 0xd0, 0x4d, + 0xbb, 0xe7, 0xd1, 0x8e, 0x88, 0x26, 0xd8, 0x1c, 0x91, 0x90, 0xe4, 0x85, 0x93, 0x67, 0xcf, 0xf3, + 0xf5, 0x49, 0xa2, 0x07, 0x2a, 0x22, 0x06, 0x97, 0x82, 0x81, 0xa6, 0xc8, 0x40, 0xcb, 0x47, 0xcc, + 0x74, 0x20, 0x30, 0x9f, 0x06, 0x51, 0x33, 0x74, 0x64, 0x7a, 0x8a, 0xeb, 0x39, 0x48, 0xed, 0xea, + 0x66, 0x87, 0x54, 0x90, 0x6c, 0x25, 0xdd, 0x56, 0x0d, 0x17, 0xc9, 0x93, 0x54, 0xdd, 0xe0, 0x5a, + 0x8c, 0x20, 0x01, 0xe4, 0x84, 0x10, 0x99, 0x3e, 0x04, 0x55, 0xfb, 0x88, 0xb9, 0x6f, 0x64, 0x21, + 0x1f, 0xea, 0xab, 0xa5, 0xb3, 0x50, 0xb8, 0xae, 0xde, 0x54, 0x15, 0x7e, 0x56, 0xa2, 0x9e, 0xc8, + 0x63, 0xd9, 0x0e, 0x3b, 0x2f, 0x3d, 0x0d, 0x33, 0xc4, 0xc4, 0xea, 0x79, 0xc8, 0x51, 0x34, 0x43, + 0x75, 0x5d, 0xe2, 0xb4, 0x2c, 0x31, 0x95, 0xb0, 0xae, 0x8e, 0x55, 0xab, 0x5c, 0x23, 0x2d, 0xc3, + 0x34, 0x41, 0x74, 0x7b, 0x86, 0xa7, 0xdb, 0x06, 0x52, 0xf0, 0xe9, 0xcd, 0x25, 0x95, 0xc4, 0x1f, + 0xd9, 0x14, 0xb6, 0xd8, 0x62, 0x06, 0x78, 0x44, 0xae, 0xb4, 0x06, 0x0f, 0x11, 0x58, 0x07, 0x99, + 0xc8, 0x51, 0x3d, 0xa4, 0xa0, 0xcf, 0xf6, 0x54, 0xc3, 0x55, 0x54, 0xb3, 0xa5, 0xec, 0xab, 0xee, + 0x7e, 0x69, 0x06, 0x13, 0xac, 0x24, 0x4a, 0x82, 0x7c, 0x0a, 0x1b, 0xae, 0x33, 0xbb, 0x1a, 0x31, + 0xab, 0x9a, 0xad, 0x6b, 0xaa, 0xbb, 0x2f, 0x55, 0xe0, 0x04, 0x61, 0x71, 0x3d, 0x47, 0x37, 0x3b, + 0x8a, 0xb6, 0x8f, 0xb4, 0x1b, 0x4a, 0xcf, 0x6b, 0x5f, 0x2a, 0x3d, 0x18, 0x7e, 0x3f, 0x19, 0x61, + 0x83, 0xd8, 0xac, 0x62, 0x93, 0x3d, 0xaf, 0x7d, 0x49, 0x6a, 0x40, 0x01, 0x2f, 0x46, 0x57, 0xbf, + 0x8d, 0x94, 0xb6, 0xe5, 0x90, 0xd2, 0x58, 0x1c, 0x92, 0x9a, 0x42, 0x1e, 0x5c, 0xa8, 0x33, 0xc0, + 0x96, 0xd5, 0x42, 0x95, 0x74, 0x63, 0xa7, 0x56, 0x5b, 0x93, 0xf3, 0x9c, 0xe5, 0xaa, 0xe5, 0xe0, + 0x80, 0xea, 0x58, 0xbe, 0x83, 0xf3, 0x34, 0xa0, 0x3a, 0x16, 0x77, 0xef, 0x32, 0x4c, 0x6b, 0x1a, + 0x9d, 0xb3, 0xae, 0x29, 0xec, 0x8c, 0xe5, 0x96, 0xc4, 0x3e, 0x67, 0x69, 0xda, 0x3a, 0x35, 0x60, + 0x31, 0xee, 0x4a, 0x97, 0xe1, 0x81, 0xc0, 0x59, 0x61, 0xe0, 0xd4, 0xc0, 0x2c, 0xa3, 0xd0, 0x65, + 0x98, 0xb6, 0x0f, 0x06, 0x81, 0x52, 0xdf, 0x1b, 0xed, 0x83, 0x28, 0xec, 0x22, 0xcc, 0xd8, 0xfb, + 0xf6, 0x20, 0xee, 0x89, 0x30, 0x4e, 0xb2, 0xf7, 0xed, 0x28, 0xf0, 0x51, 0x72, 0xe0, 0x76, 0x90, + 0xa6, 0x7a, 0xa8, 0x55, 0x3a, 0x19, 0x36, 0x0f, 0x29, 0xa4, 0x45, 0x10, 0x35, 0x4d, 0x41, 0xa6, + 0xda, 0x34, 0x90, 0xa2, 0x3a, 0xc8, 0x54, 0xdd, 0xd2, 0xe9, 0xb0, 0x71, 0x51, 0xd3, 0x6a, 0x44, + 0x5b, 0x25, 0x4a, 0xe9, 0x09, 0x98, 0xb2, 0x9a, 0xd7, 0x35, 0x1a, 0x92, 0x8a, 0xed, 0xa0, 0xb6, + 0xfe, 0x72, 0xe9, 0x11, 0xe2, 0xdf, 0x49, 0xac, 0x20, 0x01, 0xb9, 0x43, 0xc4, 0xd2, 0xe3, 0x20, + 0x6a, 0xee, 0xbe, 0xea, 0xd8, 0x24, 0x27, 0xbb, 0xb6, 0xaa, 0xa1, 0xd2, 0xa3, 0xd4, 0x94, 0xca, + 0xb7, 0xb9, 0x18, 0x6f, 0x09, 0xf7, 0x96, 0xde, 0xf6, 0x38, 0xe3, 0x63, 0x74, 0x4b, 0x10, 0x19, + 0x63, 0x9b, 0x07, 0x11, 0xbb, 0xa2, 0xef, 0xc5, 0xf3, 0xc4, 0xac, 0x68, 0xef, 0xdb, 0xe1, 0xf7, + 0x3e, 0x0c, 0x13, 0xd8, 0x32, 0x78, 0xe9, 0xe3, 0xb4, 0x21, 0xb3, 0xf7, 0x43, 0x6f, 0xfc, 0xd0, + 0x7a, 0xe3, 0xb9, 0x0a, 0x14, 0xc2, 0xf1, 0x29, 0xe5, 0x80, 0x46, 0xa8, 0x28, 0xe0, 0x66, 0x65, + 0xb5, 0xbe, 0x86, 0xdb, 0x8c, 0x97, 0x6a, 0x62, 0x02, 0xb7, 0x3b, 0x9b, 0x1b, 0xbb, 0x35, 0x45, + 0xde, 0xdb, 0xde, 0xdd, 0xd8, 0xaa, 0x89, 0xc9, 0x70, 0x5f, 0xfd, 0xdd, 0x04, 0x14, 0xfb, 0x8f, + 0x48, 0xd2, 0xcf, 0xc2, 0x49, 0x7e, 0x9f, 0xe1, 0x22, 0x4f, 0xb9, 0xa5, 0x3b, 0x64, 0xcb, 0x74, + 0x55, 0x5a, 0xbe, 0xfc, 0x45, 0x9b, 0x61, 0x56, 0x0d, 0xe4, 0x3d, 0xaf, 0x3b, 0x78, 0x43, 0x74, + 0x55, 0x4f, 0xda, 0x84, 0xd3, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0xb6, 0x54, 0xa7, 0xa5, 0x04, 0x37, + 0x49, 0x8a, 0xaa, 0x69, 0xc8, 0x75, 0x2d, 0x5a, 0xaa, 0x7c, 0x96, 0x8f, 0x99, 0x56, 0x83, 0x19, + 0x07, 0x39, 0xbc, 0xca, 0x4c, 0x23, 0x01, 0x96, 0x3c, 0x2a, 0xc0, 0x1e, 0x84, 0x5c, 0x57, 0xb5, + 0x15, 0x64, 0x7a, 0xce, 0x01, 0x69, 0x8c, 0xb3, 0x72, 0xb6, 0xab, 0xda, 0x35, 0xfc, 0xfc, 0xd1, + 0x9c, 0x4f, 0x7e, 0x90, 0x84, 0x42, 0xb8, 0x39, 0xc6, 0x67, 0x0d, 0x8d, 0xd4, 0x11, 0x81, 0x64, + 0x9a, 0x87, 0xef, 0xdb, 0x4a, 0x2f, 0xac, 0xe2, 0x02, 0x53, 0xc9, 0xd0, 0x96, 0x55, 0xa6, 0x48, + 0x5c, 0xdc, 0x71, 0x6e, 0x41, 0xb4, 0x45, 0xc8, 0xca, 0xec, 0x49, 0x5a, 0x87, 0xcc, 0x75, 0x97, + 0x70, 0x67, 0x08, 0xf7, 0x23, 0xf7, 0xe7, 0x7e, 0xae, 0x41, 0xc8, 0x73, 0xcf, 0x35, 0x94, 0xed, + 0xba, 0xbc, 0x55, 0xdd, 0x94, 0x19, 0x5c, 0x3a, 0x05, 0x29, 0x43, 0xbd, 0x7d, 0xd0, 0x5f, 0x8a, + 0x88, 0x68, 0x54, 0xc7, 0x9f, 0x82, 0xd4, 0x2d, 0xa4, 0xde, 0xe8, 0x2f, 0x00, 0x44, 0xf4, 0x21, + 0x86, 0xfe, 0x22, 0xa4, 0x89, 0xbf, 0x24, 0x00, 0xe6, 0x31, 0x71, 0x4c, 0xca, 0x42, 0x6a, 0xb5, + 0x2e, 0xe3, 0xf0, 0x17, 0xa1, 0x40, 0xa5, 0xca, 0xce, 0x46, 0x6d, 0xb5, 0x26, 0x26, 0xe6, 0x96, + 0x21, 0x43, 0x9d, 0x80, 0xb7, 0x86, 0xef, 0x06, 0x71, 0x8c, 0x3d, 0x32, 0x0e, 0x81, 0x6b, 0xf7, + 0xb6, 0x56, 0x6a, 0xb2, 0x98, 0x08, 0x2f, 0xaf, 0x0b, 0x85, 0x70, 0x5f, 0xfc, 0xd1, 0xc4, 0xd4, + 0x77, 0x04, 0xc8, 0x87, 0xfa, 0x5c, 0xdc, 0xa0, 0xa8, 0x86, 0x61, 0xdd, 0x52, 0x54, 0x43, 0x57, + 0x5d, 0x16, 0x14, 0x40, 0x44, 0x55, 0x2c, 0x19, 0x75, 0xd1, 0x3e, 0x92, 0xc1, 0xbf, 0x21, 0x80, + 0x18, 0x6d, 0x31, 0x23, 0x03, 0x14, 0x7e, 0xaa, 0x03, 0x7c, 0x5d, 0x80, 0x62, 0x7f, 0x5f, 0x19, + 0x19, 0xde, 0xd9, 0x9f, 0xea, 0xf0, 0xde, 0x4e, 0xc0, 0x44, 0x5f, 0x37, 0x39, 0xea, 0xe8, 0x3e, + 0x0b, 0x53, 0x7a, 0x0b, 0x75, 0x6d, 0xcb, 0x43, 0xa6, 0x76, 0xa0, 0x18, 0xe8, 0x26, 0x32, 0x4a, + 0x73, 0x24, 0x51, 0x2c, 0xde, 0xbf, 0x5f, 0x5d, 0xd8, 0x08, 0x70, 0x9b, 0x18, 0x56, 0x99, 0xde, + 0x58, 0xab, 0x6d, 0xed, 0xd4, 0x77, 0x6b, 0xdb, 0xab, 0x2f, 0x2a, 0x7b, 0xdb, 0x3f, 0xbf, 0x5d, + 0x7f, 0x7e, 0x5b, 0x16, 0xf5, 0x88, 0xd9, 0x87, 0xb8, 0xd5, 0x77, 0x40, 0x8c, 0x0e, 0x4a, 0x3a, + 0x09, 0xc3, 0x86, 0x25, 0x8e, 0x49, 0xd3, 0x30, 0xb9, 0x5d, 0x57, 0x1a, 0x1b, 0x6b, 0x35, 0xa5, + 0x76, 0xf5, 0x6a, 0x6d, 0x75, 0xb7, 0x41, 0x6f, 0x20, 0x7c, 0xeb, 0xdd, 0xfe, 0x4d, 0xfd, 0x5a, + 0x12, 0xa6, 0x87, 0x8c, 0x44, 0xaa, 0xb2, 0xb3, 0x03, 0x3d, 0xce, 0x3c, 0x35, 0xca, 0xe8, 0x17, + 0x70, 0xc9, 0xdf, 0x51, 0x1d, 0x8f, 0x1d, 0x35, 0x1e, 0x07, 0xec, 0x25, 0xd3, 0xd3, 0xdb, 0x3a, + 0x72, 0xd8, 0x85, 0x0d, 0x3d, 0x50, 0x4c, 0x06, 0x72, 0x7a, 0x67, 0xf3, 0x33, 0x20, 0xd9, 0x96, + 0xab, 0x7b, 0xfa, 0x4d, 0xa4, 0xe8, 0x26, 0xbf, 0xdd, 0xc1, 0x07, 0x8c, 0x94, 0x2c, 0x72, 0xcd, + 0x86, 0xe9, 0xf9, 0xd6, 0x26, 0xea, 0xa8, 0x11, 0x6b, 0x9c, 0xc0, 0x93, 0xb2, 0xc8, 0x35, 0xbe, + 0xf5, 0x59, 0x28, 0xb4, 0xac, 0x1e, 0xee, 0xba, 0xa8, 0x1d, 0xae, 0x17, 0x82, 0x9c, 0xa7, 0x32, + 0xdf, 0x84, 0xf5, 0xd3, 0xc1, 0xb5, 0x52, 0x41, 0xce, 0x53, 0x19, 0x35, 0x79, 0x0c, 0x26, 0xd5, + 0x4e, 0xc7, 0xc1, 0xe4, 0x9c, 0x88, 0x9e, 0x10, 0x8a, 0xbe, 0x98, 0x18, 0xce, 0x3e, 0x07, 0x59, + 0xee, 0x07, 0x5c, 0x92, 0xb1, 0x27, 0x14, 0x9b, 0x1e, 0x7b, 0x13, 0xf3, 0x39, 0x39, 0x6b, 0x72, + 0xe5, 0x59, 0x28, 0xe8, 0xae, 0x12, 0xdc, 0x92, 0x27, 0xce, 0x24, 0xe6, 0xb3, 0x72, 0x5e, 0x77, + 0xfd, 0x1b, 0xc6, 0xb9, 0x37, 0x13, 0x50, 0xec, 0xbf, 0xe5, 0x97, 0xd6, 0x20, 0x6b, 0x58, 0x9a, + 0x4a, 0x42, 0x8b, 0x7e, 0x62, 0x9a, 0x8f, 0xf9, 0x30, 0xb0, 0xb0, 0xc9, 0xec, 0x65, 0x1f, 0x39, + 0xfb, 0x2f, 0x02, 0x64, 0xb9, 0x58, 0x3a, 0x01, 0x29, 0x5b, 0xf5, 0xf6, 0x09, 0x5d, 0x7a, 0x25, + 0x21, 0x0a, 0x32, 0x79, 0xc6, 0x72, 0xd7, 0x56, 0x4d, 0x12, 0x02, 0x4c, 0x8e, 0x9f, 0xf1, 0xba, + 0x1a, 0x48, 0x6d, 0x91, 0xe3, 0x87, 0xd5, 0xed, 0x22, 0xd3, 0x73, 0xf9, 0xba, 0x32, 0xf9, 0x2a, + 0x13, 0x4b, 0x4f, 0xc2, 0x94, 0xe7, 0xa8, 0xba, 0xd1, 0x67, 0x9b, 0x22, 0xb6, 0x22, 0x57, 0xf8, + 0xc6, 0x15, 0x38, 0xc5, 0x79, 0x5b, 0xc8, 0x53, 0xb5, 0x7d, 0xd4, 0x0a, 0x40, 0x19, 0x72, 0xcd, + 0x70, 0x92, 0x19, 0xac, 0x31, 0x3d, 0xc7, 0xce, 0x7d, 0x5f, 0x80, 0x29, 0x7e, 0x60, 0x6a, 0xf9, + 0xce, 0xda, 0x02, 0x50, 0x4d, 0xd3, 0xf2, 0xc2, 0xee, 0x1a, 0x0c, 0xe5, 0x01, 0xdc, 0x42, 0xd5, + 0x07, 0xc9, 0x21, 0x82, 0xd9, 0x2e, 0x40, 0xa0, 0x39, 0xd2, 0x6d, 0xa7, 0x21, 0xcf, 0x3e, 0xe1, + 0x90, 0xef, 0x80, 0xf4, 0x88, 0x0d, 0x54, 0x84, 0x4f, 0x56, 0xd2, 0x0c, 0xa4, 0x9b, 0xa8, 0xa3, + 0x9b, 0xec, 0x62, 0x96, 0x3e, 0xf0, 0x8b, 0x90, 0x94, 0x7f, 0x11, 0xb2, 0xf2, 0x19, 0x98, 0xd6, + 0xac, 0x6e, 0x74, 0xb8, 0x2b, 0x62, 0xe4, 0x98, 0xef, 0x5e, 0x13, 0x5e, 0x82, 0xa0, 0xc5, 0x7c, + 0x5f, 0x10, 0xbe, 0x94, 0x48, 0xae, 0xef, 0xac, 0x7c, 0x35, 0x31, 0xbb, 0x4e, 0xa1, 0x3b, 0x7c, + 0xa6, 0x32, 0x6a, 0x1b, 0x48, 0xc3, 0xa3, 0x87, 0x2f, 0x3f, 0x09, 0x4f, 0x75, 0x74, 0x6f, 0xbf, + 0xd7, 0x5c, 0xd0, 0xac, 0xee, 0x62, 0xc7, 0xea, 0x58, 0xc1, 0xa7, 0x4f, 0xfc, 0x44, 0x1e, 0xc8, + 0x5f, 0xec, 0xf3, 0x67, 0xce, 0x97, 0xce, 0xc6, 0x7e, 0x2b, 0xad, 0x6c, 0xc3, 0x34, 0x33, 0x56, + 0xc8, 0xf7, 0x17, 0x7a, 0x8a, 0x90, 0xee, 0x7b, 0x87, 0x55, 0xfa, 0xfa, 0x3b, 0xa4, 0x5c, 0xcb, + 0x53, 0x0c, 0x8a, 0x75, 0xf4, 0xa0, 0x51, 0x91, 0xe1, 0x81, 0x3e, 0x3e, 0xba, 0x35, 0x91, 0x13, + 0xc3, 0xf8, 0x5d, 0xc6, 0x38, 0x1d, 0x62, 0x6c, 0x30, 0x68, 0x65, 0x15, 0x26, 0x8e, 0xc3, 0xf5, + 0x4f, 0x8c, 0xab, 0x80, 0xc2, 0x24, 0xeb, 0x30, 0x49, 0x48, 0xb4, 0x9e, 0xeb, 0x59, 0x5d, 0x92, + 0xf7, 0xee, 0x4f, 0xf3, 0xcf, 0xef, 0xd0, 0xbd, 0x52, 0xc4, 0xb0, 0x55, 0x1f, 0x55, 0xa9, 0x00, + 0xf9, 0xe4, 0xd4, 0x42, 0x9a, 0x11, 0xc3, 0xf0, 0x16, 0x1b, 0x88, 0x6f, 0x5f, 0xf9, 0x34, 0xcc, + 0xe0, 0xbf, 0x49, 0x5a, 0x0a, 0x8f, 0x24, 0xfe, 0xc2, 0xab, 0xf4, 0xfd, 0x57, 0xe8, 0x76, 0x9c, + 0xf6, 0x09, 0x42, 0x63, 0x0a, 0xad, 0x62, 0x07, 0x79, 0x1e, 0x72, 0x5c, 0x45, 0x35, 0x86, 0x0d, + 0x2f, 0x74, 0x63, 0x50, 0xfa, 0xfc, 0xbb, 0xfd, 0xab, 0xb8, 0x4e, 0x91, 0x55, 0xc3, 0xa8, 0xec, + 0xc1, 0xc9, 0x21, 0x51, 0x31, 0x02, 0xe7, 0x6b, 0x8c, 0x73, 0x66, 0x20, 0x32, 0x30, 0xed, 0x0e, + 0x70, 0xb9, 0xbf, 0x96, 0x23, 0x70, 0xfe, 0x21, 0xe3, 0x94, 0x18, 0x96, 0x2f, 0x29, 0x66, 0x7c, + 0x0e, 0xa6, 0x6e, 0x22, 0xa7, 0x69, 0xb9, 0xec, 0x96, 0x66, 0x04, 0xba, 0xd7, 0x19, 0xdd, 0x24, + 0x03, 0x92, 0x6b, 0x1b, 0xcc, 0x75, 0x19, 0xb2, 0x6d, 0x55, 0x43, 0x23, 0x50, 0x7c, 0x81, 0x51, + 0x8c, 0x63, 0x7b, 0x0c, 0xad, 0x42, 0xa1, 0x63, 0xb1, 0xca, 0x14, 0x0f, 0x7f, 0x83, 0xc1, 0xf3, + 0x1c, 0xc3, 0x28, 0x6c, 0xcb, 0xee, 0x19, 0xb8, 0x6c, 0xc5, 0x53, 0xfc, 0x11, 0xa7, 0xe0, 0x18, + 0x46, 0x71, 0x0c, 0xb7, 0xfe, 0x31, 0xa7, 0x70, 0x43, 0xfe, 0x7c, 0x16, 0xf2, 0x96, 0x69, 0x1c, + 0x58, 0xe6, 0x28, 0x83, 0xf8, 0x22, 0x63, 0x00, 0x06, 0xc1, 0x04, 0x57, 0x20, 0x37, 0xea, 0x42, + 0xfc, 0xe9, 0xbb, 0x7c, 0x7b, 0xf0, 0x15, 0x58, 0x87, 0x49, 0x9e, 0xa0, 0x74, 0xcb, 0x1c, 0x81, + 0xe2, 0xcb, 0x8c, 0xa2, 0x18, 0x82, 0xb1, 0x69, 0x78, 0xc8, 0xf5, 0x3a, 0x68, 0x14, 0x92, 0x37, + 0xf9, 0x34, 0x18, 0x84, 0xb9, 0xb2, 0x89, 0x4c, 0x6d, 0x7f, 0x34, 0x86, 0xaf, 0x70, 0x57, 0x72, + 0x0c, 0xa6, 0x58, 0x85, 0x89, 0xae, 0xea, 0xb8, 0xfb, 0xaa, 0x31, 0xd2, 0x72, 0xfc, 0x19, 0xe3, + 0x28, 0xf8, 0x20, 0xe6, 0x91, 0x9e, 0x79, 0x1c, 0x9a, 0xaf, 0x72, 0x8f, 0x84, 0x60, 0x6c, 0xeb, + 0xb9, 0x1e, 0xb9, 0xd2, 0x3a, 0x0e, 0xdb, 0x9f, 0xf3, 0xad, 0x47, 0xb1, 0x5b, 0x61, 0xc6, 0x2b, + 0x90, 0x73, 0xf5, 0xdb, 0x23, 0xd1, 0xfc, 0x05, 0x5f, 0x69, 0x02, 0xc0, 0xe0, 0x17, 0xe1, 0xd4, + 0xd0, 0x32, 0x31, 0x02, 0xd9, 0x5f, 0x32, 0xb2, 0x13, 0x43, 0x4a, 0x05, 0x4b, 0x09, 0xc7, 0xa5, + 0xfc, 0x2b, 0x9e, 0x12, 0x50, 0x84, 0x6b, 0x07, 0x9f, 0x15, 0x5c, 0xb5, 0x7d, 0x3c, 0xaf, 0xfd, + 0x35, 0xf7, 0x1a, 0xc5, 0xf6, 0x79, 0x6d, 0x17, 0x4e, 0x30, 0xc6, 0xe3, 0xad, 0xeb, 0xd7, 0x78, + 0x62, 0xa5, 0xe8, 0xbd, 0xfe, 0xd5, 0xfd, 0x0c, 0xcc, 0xfa, 0xee, 0xe4, 0x4d, 0xa9, 0xab, 0x74, + 0x55, 0x7b, 0x04, 0xe6, 0xaf, 0x33, 0x66, 0x9e, 0xf1, 0xfd, 0xae, 0xd6, 0xdd, 0x52, 0x6d, 0x4c, + 0xfe, 0x02, 0x94, 0x38, 0x79, 0xcf, 0x74, 0x90, 0x66, 0x75, 0x4c, 0xfd, 0x36, 0x6a, 0x8d, 0x40, + 0xfd, 0x37, 0x91, 0xa5, 0xda, 0x0b, 0xc1, 0x31, 0xf3, 0x06, 0x88, 0x7e, 0xaf, 0xa2, 0xe8, 0x5d, + 0xdb, 0x72, 0xbc, 0x18, 0xc6, 0x6f, 0xf0, 0x95, 0xf2, 0x71, 0x1b, 0x04, 0x56, 0xa9, 0x41, 0x91, + 0x3c, 0x8e, 0x1a, 0x92, 0x7f, 0xcb, 0x88, 0x26, 0x02, 0x14, 0x4b, 0x1c, 0x9a, 0xd5, 0xb5, 0x55, + 0x67, 0x94, 0xfc, 0xf7, 0x77, 0x3c, 0x71, 0x30, 0x08, 0x4b, 0x1c, 0xde, 0x81, 0x8d, 0x70, 0xb5, + 0x1f, 0x81, 0xe1, 0x9b, 0x3c, 0x71, 0x70, 0x0c, 0xa3, 0xe0, 0x0d, 0xc3, 0x08, 0x14, 0x7f, 0xcf, + 0x29, 0x38, 0x06, 0x53, 0x7c, 0x2a, 0x28, 0xb4, 0x0e, 0xea, 0xe8, 0xae, 0xe7, 0xd0, 0x56, 0xf8, + 0xfe, 0x54, 0xdf, 0x7a, 0xb7, 0xbf, 0x09, 0x93, 0x43, 0x50, 0x9c, 0x89, 0xd8, 0x15, 0x2a, 0x39, + 0x29, 0xc5, 0x0f, 0xec, 0xdb, 0x3c, 0x13, 0x85, 0x60, 0x78, 0x6c, 0xa1, 0x0e, 0x11, 0xbb, 0x5d, + 0xc3, 0xe7, 0x83, 0x11, 0xe8, 0xbe, 0x13, 0x19, 0x5c, 0x83, 0x63, 0x31, 0x67, 0xa8, 0xff, 0xe9, + 0x99, 0x37, 0xd0, 0xc1, 0x48, 0xd1, 0xf9, 0x0f, 0x91, 0xfe, 0x67, 0x8f, 0x22, 0x69, 0x0e, 0x99, + 0x8c, 0xf4, 0x53, 0x52, 0xdc, 0x8f, 0x75, 0x4a, 0xbf, 0x74, 0x8f, 0xcd, 0xb7, 0xbf, 0x9d, 0xaa, + 0x6c, 0xe2, 0x20, 0xef, 0x6f, 0x7a, 0xe2, 0xc9, 0x5e, 0xb9, 0xe7, 0xc7, 0x79, 0x5f, 0xcf, 0x53, + 0xb9, 0x0a, 0x13, 0x7d, 0x0d, 0x4f, 0x3c, 0xd5, 0x2f, 0x33, 0xaa, 0x42, 0xb8, 0xdf, 0xa9, 0x2c, + 0x43, 0x0a, 0x37, 0x2f, 0xf1, 0xf0, 0x5f, 0x61, 0x70, 0x62, 0x5e, 0xf9, 0x04, 0x64, 0x79, 0xd3, + 0x12, 0x0f, 0xfd, 0x55, 0x06, 0xf5, 0x21, 0x18, 0xce, 0x1b, 0x96, 0x78, 0xf8, 0xaf, 0x71, 0x38, + 0x87, 0x60, 0xf8, 0xe8, 0x2e, 0xfc, 0xc7, 0x5f, 0x4f, 0xb1, 0xa2, 0xc3, 0x7d, 0x77, 0x05, 0xc6, + 0x59, 0xa7, 0x12, 0x8f, 0xfe, 0x1c, 0x7b, 0x39, 0x47, 0x54, 0x2e, 0x42, 0x7a, 0x44, 0x87, 0xff, + 0x06, 0x83, 0x52, 0xfb, 0xca, 0x2a, 0xe4, 0x43, 0xdd, 0x49, 0x3c, 0xfc, 0x37, 0x19, 0x3c, 0x8c, + 0xc2, 0x43, 0x67, 0xdd, 0x49, 0x3c, 0xc1, 0x6f, 0xf1, 0xa1, 0x33, 0x04, 0x76, 0x1b, 0x6f, 0x4c, + 0xe2, 0xd1, 0xbf, 0xcd, 0xbd, 0xce, 0x21, 0x95, 0x67, 0x21, 0xe7, 0x17, 0x9b, 0x78, 0xfc, 0xef, + 0x30, 0x7c, 0x80, 0xc1, 0x1e, 0x08, 0x15, 0xbb, 0x78, 0x8a, 0xdf, 0xe5, 0x1e, 0x08, 0xa1, 0xf0, + 0x36, 0x8a, 0x36, 0x30, 0xf1, 0x4c, 0xbf, 0xc7, 0xb7, 0x51, 0xa4, 0x7f, 0xc1, 0xab, 0x49, 0x72, + 0x7e, 0x3c, 0xc5, 0xef, 0xf3, 0xd5, 0x24, 0xf6, 0x78, 0x18, 0xd1, 0x8e, 0x20, 0x9e, 0xe3, 0x0f, + 0xf8, 0x30, 0x22, 0x0d, 0x41, 0x65, 0x07, 0xa4, 0xc1, 0x6e, 0x20, 0x9e, 0xef, 0x55, 0xc6, 0x37, + 0x35, 0xd0, 0x0c, 0x54, 0x9e, 0x87, 0x13, 0xc3, 0x3b, 0x81, 0x78, 0xd6, 0xcf, 0xdf, 0x8b, 0x9c, + 0xdd, 0xc2, 0x8d, 0x40, 0x65, 0x37, 0x28, 0x29, 0xe1, 0x2e, 0x20, 0x9e, 0xf6, 0xb5, 0x7b, 0xfd, + 0x89, 0x3b, 0xdc, 0x04, 0x54, 0xaa, 0x00, 0x41, 0x01, 0x8e, 0xe7, 0x7a, 0x9d, 0x71, 0x85, 0x40, + 0x78, 0x6b, 0xb0, 0xfa, 0x1b, 0x8f, 0xff, 0x02, 0xdf, 0x1a, 0x0c, 0x81, 0xb7, 0x06, 0x2f, 0xbd, + 0xf1, 0xe8, 0x37, 0xf8, 0xd6, 0xe0, 0x10, 0x1c, 0xd9, 0xa1, 0xea, 0x16, 0xcf, 0xf0, 0x45, 0x1e, + 0xd9, 0x21, 0x54, 0x65, 0x1b, 0xa6, 0x06, 0x0a, 0x62, 0x3c, 0xd5, 0x97, 0x18, 0x95, 0x18, 0xad, + 0x87, 0xe1, 0xe2, 0xc5, 0x8a, 0x61, 0x3c, 0xdb, 0x9f, 0x44, 0x8a, 0x17, 0xab, 0x85, 0x95, 0x2b, + 0x90, 0x35, 0x7b, 0x86, 0x81, 0x37, 0x8f, 0x74, 0xff, 0x1f, 0xd8, 0x95, 0xfe, 0xfd, 0x03, 0xe6, + 0x1d, 0x0e, 0xa8, 0x2c, 0x43, 0x1a, 0x75, 0x9b, 0xa8, 0x15, 0x87, 0xfc, 0x8f, 0x0f, 0x78, 0xc2, + 0xc4, 0xd6, 0x95, 0x67, 0x01, 0xe8, 0xd5, 0x08, 0xf9, 0xec, 0x17, 0x83, 0xfd, 0xcf, 0x0f, 0xd8, + 0x4f, 0x5f, 0x02, 0x48, 0x40, 0x40, 0x7f, 0x48, 0x73, 0x7f, 0x82, 0x77, 0xfb, 0x09, 0xc8, 0x8a, + 0x5c, 0x86, 0xf1, 0xeb, 0xae, 0x65, 0x7a, 0x6a, 0x27, 0x0e, 0xfd, 0x5f, 0x0c, 0xcd, 0xed, 0xb1, + 0xc3, 0xba, 0x96, 0x83, 0x3c, 0xb5, 0xe3, 0xc6, 0x61, 0xff, 0x9b, 0x61, 0x7d, 0x00, 0x06, 0x6b, + 0xaa, 0xeb, 0x8d, 0x32, 0xef, 0x1f, 0x73, 0x30, 0x07, 0xe0, 0x41, 0xe3, 0xbf, 0x6f, 0xa0, 0x83, + 0x38, 0xec, 0x7b, 0x7c, 0xd0, 0xcc, 0xbe, 0xf2, 0x09, 0xc8, 0xe1, 0x3f, 0xe9, 0xef, 0xd9, 0x62, + 0xc0, 0xff, 0xc3, 0xc0, 0x01, 0x02, 0xbf, 0xd9, 0xf5, 0x5a, 0x9e, 0x1e, 0xef, 0xec, 0xff, 0x65, + 0x2b, 0xcd, 0xed, 0x2b, 0x55, 0xc8, 0xbb, 0x5e, 0xab, 0xd5, 0x63, 0xfd, 0x69, 0x0c, 0xfc, 0xff, + 0x3e, 0xf0, 0xaf, 0x2c, 0x7c, 0x0c, 0x5e, 0xed, 0x5b, 0x37, 0x3c, 0xdb, 0x22, 0x9f, 0x39, 0xe2, + 0x18, 0xee, 0x31, 0x86, 0x10, 0x64, 0xa5, 0x36, 0xfc, 0xfa, 0x16, 0xd6, 0xad, 0x75, 0x8b, 0x5e, + 0xdc, 0xbe, 0x34, 0x17, 0x7f, 0x03, 0x0b, 0xaf, 0xa6, 0x61, 0x56, 0xb3, 0xba, 0x4d, 0xcb, 0x5d, + 0xf4, 0xd3, 0xf1, 0xa2, 0x65, 0x32, 0x46, 0x29, 0x69, 0x99, 0x68, 0xf6, 0x78, 0x37, 0xb9, 0x73, + 0xa7, 0x20, 0xdd, 0xe8, 0x35, 0x9b, 0x07, 0x92, 0x08, 0x49, 0xb7, 0xd7, 0x64, 0xbf, 0x8a, 0xc2, + 0x7f, 0xce, 0xfd, 0x20, 0x09, 0xf9, 0x86, 0xda, 0xb5, 0x0d, 0x54, 0x37, 0x51, 0xbd, 0x2d, 0x95, + 0x20, 0x43, 0x26, 0xfa, 0x0c, 0x31, 0x12, 0xae, 0x8d, 0xc9, 0xec, 0xd9, 0xd7, 0x2c, 0x91, 0x1b, + 0xee, 0x84, 0xaf, 0x59, 0xf2, 0x35, 0xe7, 0xe8, 0x05, 0xb7, 0xaf, 0x39, 0xe7, 0x6b, 0xce, 0x93, + 0x6b, 0xee, 0xa4, 0xaf, 0x39, 0xef, 0x6b, 0x96, 0xc9, 0x67, 0x9c, 0x09, 0x5f, 0xb3, 0xec, 0x6b, + 0x2e, 0x90, 0x0f, 0x37, 0x29, 0x5f, 0x73, 0xc1, 0xd7, 0x5c, 0x24, 0xdf, 0x6b, 0xa6, 0x7c, 0xcd, + 0x45, 0x5f, 0x73, 0x89, 0x7c, 0xa3, 0x91, 0x7c, 0xcd, 0x25, 0x5f, 0x73, 0x99, 0xfc, 0xf8, 0x69, + 0xdc, 0xd7, 0x5c, 0x96, 0x66, 0x61, 0x9c, 0xce, 0xec, 0x69, 0xf2, 0x21, 0x7f, 0xf2, 0xda, 0x98, + 0xcc, 0x05, 0x81, 0xee, 0x19, 0xf2, 0x03, 0xa7, 0x4c, 0xa0, 0x7b, 0x26, 0xd0, 0x2d, 0x91, 0xff, + 0x67, 0x21, 0x06, 0xba, 0xa5, 0x40, 0x77, 0xae, 0x34, 0x81, 0xe3, 0x23, 0xd0, 0x9d, 0x0b, 0x74, + 0xe7, 0x4b, 0x45, 0xec, 0xff, 0x40, 0x77, 0x3e, 0xd0, 0x2d, 0x97, 0x26, 0xcf, 0x08, 0xf3, 0x85, + 0x40, 0xb7, 0x2c, 0x3d, 0x05, 0x79, 0xb7, 0xd7, 0x54, 0x58, 0xa6, 0x27, 0x3f, 0xa4, 0xca, 0x2f, + 0xc1, 0x02, 0x8e, 0x08, 0xb2, 0xa8, 0xd7, 0xc6, 0x64, 0x70, 0x7b, 0x4d, 0x96, 0x88, 0x57, 0x0a, + 0x40, 0xee, 0x9f, 0x14, 0xf2, 0xfb, 0xe7, 0x95, 0xb5, 0xb7, 0xee, 0x96, 0xc7, 0xbe, 0x77, 0xb7, + 0x3c, 0xf6, 0xaf, 0x77, 0xcb, 0x63, 0x6f, 0xdf, 0x2d, 0x0b, 0xef, 0xdd, 0x2d, 0x0b, 0xef, 0xdf, + 0x2d, 0x0b, 0x77, 0x0e, 0xcb, 0xc2, 0x57, 0x0e, 0xcb, 0xc2, 0xd7, 0x0e, 0xcb, 0xc2, 0xb7, 0x0e, + 0xcb, 0xc2, 0x5b, 0x87, 0x65, 0xe1, 0x7b, 0x87, 0xe5, 0xb1, 0xb7, 0x0f, 0xcb, 0xc2, 0x8f, 0x0e, + 0xcb, 0x63, 0xef, 0x1d, 0x96, 0x85, 0xf7, 0x0f, 0xcb, 0x63, 0x77, 0x7e, 0x58, 0x1e, 0x6b, 0x66, + 0x48, 0x18, 0x9d, 0xfb, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x14, 0xab, 0x18, 0x36, 0x35, + 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2462,6 +2468,9 @@ return dAtA } func (m *Subby) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Sub) @@ -2475,6 +2484,9 @@ } func (m *SampleOneOf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TestOneof != nil { @@ -2487,84 +2499,126 @@ } func (m *SampleOneOf_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *SampleOneOf_Field4) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field4)) return n } func (m *SampleOneOf_Field5) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field5)) return n } func (m *SampleOneOf_Field6) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field6)) return n } func (m *SampleOneOf_Field7) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field7)) return n } func (m *SampleOneOf_Field8) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field8)) return n } func (m *SampleOneOf_Field9) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field10) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field11) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field12) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field13) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *SampleOneOf_Field14) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field14) @@ -2572,6 +2626,9 @@ return n } func (m *SampleOneOf_Field15) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field15 != nil { @@ -2581,6 +2638,9 @@ return n } func (m *SampleOneOf_SubMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/combos/neither/one.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/combos/neither/one.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/combos/neither/one.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/combos/neither/one.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -581,258 +581,263 @@ func OneDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4001 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xe3, 0xd6, - 0x75, 0x16, 0x7f, 0x45, 0x1e, 0x52, 0x14, 0x74, 0x25, 0xef, 0x72, 0xe5, 0x98, 0xab, 0x95, 0xed, - 0x58, 0xb6, 0x6b, 0xc9, 0xd6, 0xae, 0xf6, 0x87, 0xdb, 0xc4, 0xa5, 0x24, 0xae, 0x56, 0xae, 0x24, - 0x2a, 0xa0, 0x14, 0xff, 0x64, 0x3a, 0x18, 0x10, 0xbc, 0xa4, 0xb0, 0x0b, 0x02, 0x08, 0x00, 0xee, - 0x5a, 0x3b, 0x7d, 0xd8, 0x8e, 0xfb, 0x33, 0x99, 0x4e, 0xff, 0x3b, 0x6d, 0xe2, 0x3a, 0x6e, 0xd3, - 0x99, 0xd4, 0x69, 0xfa, 0x97, 0x34, 0x6d, 0x9a, 0xf4, 0xa9, 0x2f, 0x69, 0xfd, 0xd4, 0x49, 0xde, - 0xfa, 0x90, 0x07, 0xaf, 0xe2, 0x99, 0xa6, 0xad, 0xdb, 0xb8, 0xad, 0x1f, 0x3c, 0xe3, 0x97, 0xcc, - 0xfd, 0x03, 0xc0, 0x1f, 0x2d, 0xa8, 0xcc, 0xd8, 0x79, 0x92, 0x70, 0xce, 0xf9, 0x3e, 0xdc, 0x7b, - 0xee, 0xb9, 0xe7, 0x9c, 0x7b, 0x41, 0xf8, 0xd1, 0x15, 0x98, 0x6b, 0x5b, 0x56, 0xdb, 0xc0, 0x4b, - 0xb6, 0x63, 0x79, 0x56, 0xa3, 0xdb, 0x5a, 0x6a, 0x62, 0x57, 0x73, 0x74, 0xdb, 0xb3, 0x9c, 0x45, - 0x2a, 0x43, 0x93, 0xcc, 0x62, 0x51, 0x58, 0xcc, 0x6f, 0xc3, 0xd4, 0x35, 0xdd, 0xc0, 0xeb, 0xbe, - 0x61, 0x1d, 0x7b, 0xe8, 0x32, 0x24, 0x5b, 0xba, 0x81, 0x8b, 0xb1, 0xb9, 0xc4, 0x42, 0x6e, 0xf9, - 0x91, 0xc5, 0x3e, 0xd0, 0x62, 0x2f, 0x62, 0x97, 0x88, 0x65, 0x8a, 0x98, 0x7f, 0x3b, 0x09, 0xd3, - 0x43, 0xb4, 0x08, 0x41, 0xd2, 0x54, 0x3b, 0x84, 0x31, 0xb6, 0x90, 0x95, 0xe9, 0xff, 0xa8, 0x08, - 0xe3, 0xb6, 0xaa, 0xdd, 0x54, 0xdb, 0xb8, 0x18, 0xa7, 0x62, 0xf1, 0x88, 0x4a, 0x00, 0x4d, 0x6c, - 0x63, 0xb3, 0x89, 0x4d, 0xed, 0xb0, 0x98, 0x98, 0x4b, 0x2c, 0x64, 0xe5, 0x90, 0x04, 0x3d, 0x09, - 0x53, 0x76, 0xb7, 0x61, 0xe8, 0x9a, 0x12, 0x32, 0x83, 0xb9, 0xc4, 0x42, 0x4a, 0x96, 0x98, 0x62, - 0x3d, 0x30, 0x7e, 0x0c, 0x26, 0x6f, 0x63, 0xf5, 0x66, 0xd8, 0x34, 0x47, 0x4d, 0x0b, 0x44, 0x1c, - 0x32, 0x5c, 0x83, 0x7c, 0x07, 0xbb, 0xae, 0xda, 0xc6, 0x8a, 0x77, 0x68, 0xe3, 0x62, 0x92, 0xce, - 0x7e, 0x6e, 0x60, 0xf6, 0xfd, 0x33, 0xcf, 0x71, 0xd4, 0xde, 0xa1, 0x8d, 0x51, 0x05, 0xb2, 0xd8, - 0xec, 0x76, 0x18, 0x43, 0xea, 0x18, 0xff, 0x55, 0xcd, 0x6e, 0xa7, 0x9f, 0x25, 0x43, 0x60, 0x9c, - 0x62, 0xdc, 0xc5, 0xce, 0x2d, 0x5d, 0xc3, 0xc5, 0x34, 0x25, 0x78, 0x6c, 0x80, 0xa0, 0xce, 0xf4, - 0xfd, 0x1c, 0x02, 0x87, 0xd6, 0x20, 0x8b, 0x5f, 0xf6, 0xb0, 0xe9, 0xea, 0x96, 0x59, 0x1c, 0xa7, - 0x24, 0x8f, 0x0e, 0x59, 0x45, 0x6c, 0x34, 0xfb, 0x29, 0x02, 0x1c, 0xba, 0x08, 0xe3, 0x96, 0xed, - 0xe9, 0x96, 0xe9, 0x16, 0x33, 0x73, 0xb1, 0x85, 0xdc, 0xf2, 0xc7, 0x86, 0x06, 0x42, 0x8d, 0xd9, - 0xc8, 0xc2, 0x18, 0x6d, 0x82, 0xe4, 0x5a, 0x5d, 0x47, 0xc3, 0x8a, 0x66, 0x35, 0xb1, 0xa2, 0x9b, - 0x2d, 0xab, 0x98, 0xa5, 0x04, 0x67, 0x07, 0x27, 0x42, 0x0d, 0xd7, 0xac, 0x26, 0xde, 0x34, 0x5b, - 0x96, 0x5c, 0x70, 0x7b, 0x9e, 0xd1, 0x29, 0x48, 0xbb, 0x87, 0xa6, 0xa7, 0xbe, 0x5c, 0xcc, 0xd3, - 0x08, 0xe1, 0x4f, 0xf3, 0xdf, 0x4e, 0xc3, 0xe4, 0x28, 0x21, 0x76, 0x15, 0x52, 0x2d, 0x32, 0xcb, - 0x62, 0xfc, 0x24, 0x3e, 0x60, 0x98, 0x5e, 0x27, 0xa6, 0x7f, 0x42, 0x27, 0x56, 0x20, 0x67, 0x62, - 0xd7, 0xc3, 0x4d, 0x16, 0x11, 0x89, 0x11, 0x63, 0x0a, 0x18, 0x68, 0x30, 0xa4, 0x92, 0x3f, 0x51, - 0x48, 0xbd, 0x00, 0x93, 0xfe, 0x90, 0x14, 0x47, 0x35, 0xdb, 0x22, 0x36, 0x97, 0xa2, 0x46, 0xb2, - 0x58, 0x15, 0x38, 0x99, 0xc0, 0xe4, 0x02, 0xee, 0x79, 0x46, 0xeb, 0x00, 0x96, 0x89, 0xad, 0x96, - 0xd2, 0xc4, 0x9a, 0x51, 0xcc, 0x1c, 0xe3, 0xa5, 0x1a, 0x31, 0x19, 0xf0, 0x92, 0xc5, 0xa4, 0x9a, - 0x81, 0xae, 0x04, 0xa1, 0x36, 0x7e, 0x4c, 0xa4, 0x6c, 0xb3, 0x4d, 0x36, 0x10, 0x6d, 0xfb, 0x50, - 0x70, 0x30, 0x89, 0x7b, 0xdc, 0xe4, 0x33, 0xcb, 0xd2, 0x41, 0x2c, 0x46, 0xce, 0x4c, 0xe6, 0x30, - 0x36, 0xb1, 0x09, 0x27, 0xfc, 0x88, 0x1e, 0x06, 0x5f, 0xa0, 0xd0, 0xb0, 0x02, 0x9a, 0x85, 0xf2, - 0x42, 0xb8, 0xa3, 0x76, 0xf0, 0xec, 0x1d, 0x28, 0xf4, 0xba, 0x07, 0xcd, 0x40, 0xca, 0xf5, 0x54, - 0xc7, 0xa3, 0x51, 0x98, 0x92, 0xd9, 0x03, 0x92, 0x20, 0x81, 0xcd, 0x26, 0xcd, 0x72, 0x29, 0x99, - 0xfc, 0x8b, 0x7e, 0x2e, 0x98, 0x70, 0x82, 0x4e, 0xf8, 0xe3, 0x83, 0x2b, 0xda, 0xc3, 0xdc, 0x3f, - 0xef, 0xd9, 0x4b, 0x30, 0xd1, 0x33, 0x81, 0x51, 0x5f, 0x3d, 0xff, 0x8b, 0xf0, 0xc0, 0x50, 0x6a, - 0xf4, 0x02, 0xcc, 0x74, 0x4d, 0xdd, 0xf4, 0xb0, 0x63, 0x3b, 0x98, 0x44, 0x2c, 0x7b, 0x55, 0xf1, - 0xdf, 0xc7, 0x8f, 0x89, 0xb9, 0xfd, 0xb0, 0x35, 0x63, 0x91, 0xa7, 0xbb, 0x83, 0xc2, 0x27, 0xb2, - 0x99, 0x1f, 0x8e, 0x4b, 0x77, 0xef, 0xde, 0xbd, 0x1b, 0x9f, 0xff, 0x7c, 0x1a, 0x66, 0x86, 0xed, - 0x99, 0xa1, 0xdb, 0xf7, 0x14, 0xa4, 0xcd, 0x6e, 0xa7, 0x81, 0x1d, 0xea, 0xa4, 0x94, 0xcc, 0x9f, - 0x50, 0x05, 0x52, 0x86, 0xda, 0xc0, 0x46, 0x31, 0x39, 0x17, 0x5b, 0x28, 0x2c, 0x3f, 0x39, 0xd2, - 0xae, 0x5c, 0xdc, 0x22, 0x10, 0x99, 0x21, 0xd1, 0x27, 0x21, 0xc9, 0x53, 0x34, 0x61, 0x78, 0x62, - 0x34, 0x06, 0xb2, 0x97, 0x64, 0x8a, 0x43, 0x0f, 0x42, 0x96, 0xfc, 0x65, 0xb1, 0x91, 0xa6, 0x63, - 0xce, 0x10, 0x01, 0x89, 0x0b, 0x34, 0x0b, 0x19, 0xba, 0x4d, 0x9a, 0x58, 0x94, 0x36, 0xff, 0x99, - 0x04, 0x56, 0x13, 0xb7, 0xd4, 0xae, 0xe1, 0x29, 0xb7, 0x54, 0xa3, 0x8b, 0x69, 0xc0, 0x67, 0xe5, - 0x3c, 0x17, 0x7e, 0x9a, 0xc8, 0xd0, 0x59, 0xc8, 0xb1, 0x5d, 0xa5, 0x9b, 0x4d, 0xfc, 0x32, 0xcd, - 0x9e, 0x29, 0x99, 0x6d, 0xb4, 0x4d, 0x22, 0x21, 0xaf, 0xbf, 0xe1, 0x5a, 0xa6, 0x08, 0x4d, 0xfa, - 0x0a, 0x22, 0xa0, 0xaf, 0xbf, 0xd4, 0x9f, 0xb8, 0x1f, 0x1a, 0x3e, 0xbd, 0xfe, 0x98, 0x9a, 0xff, - 0x66, 0x1c, 0x92, 0x34, 0x5f, 0x4c, 0x42, 0x6e, 0xef, 0xc5, 0xdd, 0xaa, 0xb2, 0x5e, 0xdb, 0x5f, - 0xdd, 0xaa, 0x4a, 0x31, 0x54, 0x00, 0xa0, 0x82, 0x6b, 0x5b, 0xb5, 0xca, 0x9e, 0x14, 0xf7, 0x9f, - 0x37, 0x77, 0xf6, 0x2e, 0x5e, 0x90, 0x12, 0x3e, 0x60, 0x9f, 0x09, 0x92, 0x61, 0x83, 0xf3, 0xcb, - 0x52, 0x0a, 0x49, 0x90, 0x67, 0x04, 0x9b, 0x2f, 0x54, 0xd7, 0x2f, 0x5e, 0x90, 0xd2, 0xbd, 0x92, - 0xf3, 0xcb, 0xd2, 0x38, 0x9a, 0x80, 0x2c, 0x95, 0xac, 0xd6, 0x6a, 0x5b, 0x52, 0xc6, 0xe7, 0xac, - 0xef, 0xc9, 0x9b, 0x3b, 0x1b, 0x52, 0xd6, 0xe7, 0xdc, 0x90, 0x6b, 0xfb, 0xbb, 0x12, 0xf8, 0x0c, - 0xdb, 0xd5, 0x7a, 0xbd, 0xb2, 0x51, 0x95, 0x72, 0xbe, 0xc5, 0xea, 0x8b, 0x7b, 0xd5, 0xba, 0x94, - 0xef, 0x19, 0xd6, 0xf9, 0x65, 0x69, 0xc2, 0x7f, 0x45, 0x75, 0x67, 0x7f, 0x5b, 0x2a, 0xa0, 0x29, - 0x98, 0x60, 0xaf, 0x10, 0x83, 0x98, 0xec, 0x13, 0x5d, 0xbc, 0x20, 0x49, 0xc1, 0x40, 0x18, 0xcb, - 0x54, 0x8f, 0xe0, 0xe2, 0x05, 0x09, 0xcd, 0xaf, 0x41, 0x8a, 0x46, 0x17, 0x42, 0x50, 0xd8, 0xaa, - 0xac, 0x56, 0xb7, 0x94, 0xda, 0xee, 0xde, 0x66, 0x6d, 0xa7, 0xb2, 0x25, 0xc5, 0x02, 0x99, 0x5c, - 0xfd, 0xd4, 0xfe, 0xa6, 0x5c, 0x5d, 0x97, 0xe2, 0x61, 0xd9, 0x6e, 0xb5, 0xb2, 0x57, 0x5d, 0x97, - 0x12, 0xf3, 0x1a, 0xcc, 0x0c, 0xcb, 0x93, 0x43, 0x77, 0x46, 0x68, 0x89, 0xe3, 0xc7, 0x2c, 0x31, - 0xe5, 0x1a, 0x58, 0xe2, 0x1f, 0xc4, 0x61, 0x7a, 0x48, 0xad, 0x18, 0xfa, 0x92, 0x67, 0x21, 0xc5, - 0x42, 0x94, 0x55, 0xcf, 0xc7, 0x87, 0x16, 0x1d, 0x1a, 0xb0, 0x03, 0x15, 0x94, 0xe2, 0xc2, 0x1d, - 0x44, 0xe2, 0x98, 0x0e, 0x82, 0x50, 0x0c, 0xe4, 0xf4, 0x5f, 0x18, 0xc8, 0xe9, 0xac, 0xec, 0x5d, - 0x1c, 0xa5, 0xec, 0x51, 0xd9, 0xc9, 0x72, 0x7b, 0x6a, 0x48, 0x6e, 0xbf, 0x0a, 0x53, 0x03, 0x44, - 0x23, 0xe7, 0xd8, 0x57, 0x62, 0x50, 0x3c, 0xce, 0x39, 0x11, 0x99, 0x2e, 0xde, 0x93, 0xe9, 0xae, - 0xf6, 0x7b, 0xf0, 0xdc, 0xf1, 0x8b, 0x30, 0xb0, 0xd6, 0x6f, 0xc4, 0xe0, 0xd4, 0xf0, 0x4e, 0x71, - 0xe8, 0x18, 0x3e, 0x09, 0xe9, 0x0e, 0xf6, 0x0e, 0x2c, 0xd1, 0x2d, 0x7d, 0x7c, 0x48, 0x0d, 0x26, - 0xea, 0xfe, 0xc5, 0xe6, 0xa8, 0x70, 0x11, 0x4f, 0x1c, 0xd7, 0xee, 0xb1, 0xd1, 0x0c, 0x8c, 0xf4, - 0x73, 0x71, 0x78, 0x60, 0x28, 0xf9, 0xd0, 0x81, 0x3e, 0x04, 0xa0, 0x9b, 0x76, 0xd7, 0x63, 0x1d, - 0x11, 0x4b, 0xb0, 0x59, 0x2a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0xae, 0xe7, 0xeb, 0x13, 0x54, 0x0f, - 0x4c, 0x44, 0x0d, 0x2e, 0x07, 0x03, 0x4d, 0xd2, 0x81, 0x96, 0x8e, 0x99, 0xe9, 0x40, 0x60, 0x3e, - 0x0d, 0x92, 0x66, 0xe8, 0xd8, 0xf4, 0x14, 0xd7, 0x73, 0xb0, 0xda, 0xd1, 0xcd, 0x36, 0xad, 0x20, - 0x99, 0x72, 0xaa, 0xa5, 0x1a, 0x2e, 0x96, 0x27, 0x99, 0xba, 0x2e, 0xb4, 0x04, 0x41, 0x03, 0xc8, - 0x09, 0x21, 0xd2, 0x3d, 0x08, 0xa6, 0xf6, 0x11, 0xf3, 0xdf, 0xc8, 0x40, 0x2e, 0xd4, 0x57, 0xa3, - 0x73, 0x90, 0xbf, 0xa1, 0xde, 0x52, 0x15, 0x71, 0x56, 0x62, 0x9e, 0xc8, 0x11, 0xd9, 0x2e, 0x3f, - 0x2f, 0x3d, 0x0d, 0x33, 0xd4, 0xc4, 0xea, 0x7a, 0xd8, 0x51, 0x34, 0x43, 0x75, 0x5d, 0xea, 0xb4, - 0x0c, 0x35, 0x45, 0x44, 0x57, 0x23, 0xaa, 0x35, 0xa1, 0x41, 0x2b, 0x30, 0x4d, 0x11, 0x9d, 0xae, - 0xe1, 0xe9, 0xb6, 0x81, 0x15, 0x72, 0x7a, 0x73, 0x69, 0x25, 0xf1, 0x47, 0x36, 0x45, 0x2c, 0xb6, - 0xb9, 0x01, 0x19, 0x91, 0x8b, 0xd6, 0xe1, 0x21, 0x0a, 0x6b, 0x63, 0x13, 0x3b, 0xaa, 0x87, 0x15, - 0xfc, 0xd9, 0xae, 0x6a, 0xb8, 0x8a, 0x6a, 0x36, 0x95, 0x03, 0xd5, 0x3d, 0x28, 0xce, 0x10, 0x82, - 0xd5, 0x78, 0x31, 0x26, 0x9f, 0x21, 0x86, 0x1b, 0xdc, 0xae, 0x4a, 0xcd, 0x2a, 0x66, 0xf3, 0xba, - 0xea, 0x1e, 0xa0, 0x32, 0x9c, 0xa2, 0x2c, 0xae, 0xe7, 0xe8, 0x66, 0x5b, 0xd1, 0x0e, 0xb0, 0x76, - 0x53, 0xe9, 0x7a, 0xad, 0xcb, 0xc5, 0x07, 0xc3, 0xef, 0xa7, 0x23, 0xac, 0x53, 0x9b, 0x35, 0x62, - 0xb2, 0xef, 0xb5, 0x2e, 0xa3, 0x3a, 0xe4, 0xc9, 0x62, 0x74, 0xf4, 0x3b, 0x58, 0x69, 0x59, 0x0e, - 0x2d, 0x8d, 0x85, 0x21, 0xa9, 0x29, 0xe4, 0xc1, 0xc5, 0x1a, 0x07, 0x6c, 0x5b, 0x4d, 0x5c, 0x4e, - 0xd5, 0x77, 0xab, 0xd5, 0x75, 0x39, 0x27, 0x58, 0xae, 0x59, 0x0e, 0x09, 0xa8, 0xb6, 0xe5, 0x3b, - 0x38, 0xc7, 0x02, 0xaa, 0x6d, 0x09, 0xf7, 0xae, 0xc0, 0xb4, 0xa6, 0xb1, 0x39, 0xeb, 0x9a, 0xc2, - 0xcf, 0x58, 0x6e, 0x51, 0xea, 0x71, 0x96, 0xa6, 0x6d, 0x30, 0x03, 0x1e, 0xe3, 0x2e, 0xba, 0x02, - 0x0f, 0x04, 0xce, 0x0a, 0x03, 0xa7, 0x06, 0x66, 0xd9, 0x0f, 0x5d, 0x81, 0x69, 0xfb, 0x70, 0x10, - 0x88, 0x7a, 0xde, 0x68, 0x1f, 0xf6, 0xc3, 0x2e, 0xc1, 0x8c, 0x7d, 0x60, 0x0f, 0xe2, 0x9e, 0x08, - 0xe3, 0x90, 0x7d, 0x60, 0xf7, 0x03, 0x1f, 0xa5, 0x07, 0x6e, 0x07, 0x6b, 0xaa, 0x87, 0x9b, 0xc5, - 0xd3, 0x61, 0xf3, 0x90, 0x02, 0x2d, 0x81, 0xa4, 0x69, 0x0a, 0x36, 0xd5, 0x86, 0x81, 0x15, 0xd5, - 0xc1, 0xa6, 0xea, 0x16, 0xcf, 0x86, 0x8d, 0x0b, 0x9a, 0x56, 0xa5, 0xda, 0x0a, 0x55, 0xa2, 0x27, - 0x60, 0xca, 0x6a, 0xdc, 0xd0, 0x58, 0x48, 0x2a, 0xb6, 0x83, 0x5b, 0xfa, 0xcb, 0xc5, 0x47, 0xa8, - 0x7f, 0x27, 0x89, 0x82, 0x06, 0xe4, 0x2e, 0x15, 0xa3, 0xc7, 0x41, 0xd2, 0xdc, 0x03, 0xd5, 0xb1, - 0x69, 0x4e, 0x76, 0x6d, 0x55, 0xc3, 0xc5, 0x47, 0x99, 0x29, 0x93, 0xef, 0x08, 0x31, 0xd9, 0x12, - 0xee, 0x6d, 0xbd, 0xe5, 0x09, 0xc6, 0xc7, 0xd8, 0x96, 0xa0, 0x32, 0xce, 0xb6, 0x00, 0x12, 0x71, - 0x45, 0xcf, 0x8b, 0x17, 0xa8, 0x59, 0xc1, 0x3e, 0xb0, 0xc3, 0xef, 0x7d, 0x18, 0x26, 0x88, 0x65, - 0xf0, 0xd2, 0xc7, 0x59, 0x43, 0x66, 0x1f, 0x84, 0xde, 0xf8, 0xa1, 0xf5, 0xc6, 0xf3, 0x65, 0xc8, - 0x87, 0xe3, 0x13, 0x65, 0x81, 0x45, 0xa8, 0x14, 0x23, 0xcd, 0xca, 0x5a, 0x6d, 0x9d, 0xb4, 0x19, - 0x2f, 0x55, 0xa5, 0x38, 0x69, 0x77, 0xb6, 0x36, 0xf7, 0xaa, 0x8a, 0xbc, 0xbf, 0xb3, 0xb7, 0xb9, - 0x5d, 0x95, 0x12, 0xe1, 0xbe, 0xfa, 0x3b, 0x71, 0x28, 0xf4, 0x1e, 0x91, 0xd0, 0xcf, 0xc2, 0x69, - 0x71, 0x9f, 0xe1, 0x62, 0x4f, 0xb9, 0xad, 0x3b, 0x74, 0xcb, 0x74, 0x54, 0x56, 0xbe, 0xfc, 0x45, - 0x9b, 0xe1, 0x56, 0x75, 0xec, 0x3d, 0xaf, 0x3b, 0x64, 0x43, 0x74, 0x54, 0x0f, 0x6d, 0xc1, 0x59, - 0xd3, 0x52, 0x5c, 0x4f, 0x35, 0x9b, 0xaa, 0xd3, 0x54, 0x82, 0x9b, 0x24, 0x45, 0xd5, 0x34, 0xec, - 0xba, 0x16, 0x2b, 0x55, 0x3e, 0xcb, 0xc7, 0x4c, 0xab, 0xce, 0x8d, 0x83, 0x1c, 0x5e, 0xe1, 0xa6, - 0x7d, 0x01, 0x96, 0x38, 0x2e, 0xc0, 0x1e, 0x84, 0x6c, 0x47, 0xb5, 0x15, 0x6c, 0x7a, 0xce, 0x21, - 0x6d, 0x8c, 0x33, 0x72, 0xa6, 0xa3, 0xda, 0x55, 0xf2, 0xfc, 0xd1, 0x9c, 0x4f, 0xbe, 0x9f, 0x80, - 0x7c, 0xb8, 0x39, 0x26, 0x67, 0x0d, 0x8d, 0xd6, 0x91, 0x18, 0xcd, 0x34, 0x0f, 0xdf, 0xb7, 0x95, - 0x5e, 0x5c, 0x23, 0x05, 0xa6, 0x9c, 0x66, 0x2d, 0xab, 0xcc, 0x90, 0xa4, 0xb8, 0x93, 0xdc, 0x82, - 0x59, 0x8b, 0x90, 0x91, 0xf9, 0x13, 0xda, 0x80, 0xf4, 0x0d, 0x97, 0x72, 0xa7, 0x29, 0xf7, 0x23, - 0xf7, 0xe7, 0x7e, 0xae, 0x4e, 0xc9, 0xb3, 0xcf, 0xd5, 0x95, 0x9d, 0x9a, 0xbc, 0x5d, 0xd9, 0x92, - 0x39, 0x1c, 0x9d, 0x81, 0xa4, 0xa1, 0xde, 0x39, 0xec, 0x2d, 0x45, 0x54, 0x34, 0xaa, 0xe3, 0xcf, - 0x40, 0xf2, 0x36, 0x56, 0x6f, 0xf6, 0x16, 0x00, 0x2a, 0xfa, 0x10, 0x43, 0x7f, 0x09, 0x52, 0xd4, - 0x5f, 0x08, 0x80, 0x7b, 0x4c, 0x1a, 0x43, 0x19, 0x48, 0xae, 0xd5, 0x64, 0x12, 0xfe, 0x12, 0xe4, - 0x99, 0x54, 0xd9, 0xdd, 0xac, 0xae, 0x55, 0xa5, 0xf8, 0xfc, 0x0a, 0xa4, 0x99, 0x13, 0xc8, 0xd6, - 0xf0, 0xdd, 0x20, 0x8d, 0xf1, 0x47, 0xce, 0x11, 0x13, 0xda, 0xfd, 0xed, 0xd5, 0xaa, 0x2c, 0xc5, - 0xc3, 0xcb, 0xeb, 0x42, 0x3e, 0xdc, 0x17, 0x7f, 0x34, 0x31, 0xf5, 0x8f, 0x31, 0xc8, 0x85, 0xfa, - 0x5c, 0xd2, 0xa0, 0xa8, 0x86, 0x61, 0xdd, 0x56, 0x54, 0x43, 0x57, 0x5d, 0x1e, 0x14, 0x40, 0x45, - 0x15, 0x22, 0x19, 0x75, 0xd1, 0x3e, 0x92, 0xc1, 0xbf, 0x1e, 0x03, 0xa9, 0xbf, 0xc5, 0xec, 0x1b, - 0x60, 0xec, 0xa7, 0x3a, 0xc0, 0xd7, 0x62, 0x50, 0xe8, 0xed, 0x2b, 0xfb, 0x86, 0x77, 0xee, 0xa7, - 0x3a, 0xbc, 0xb7, 0xe2, 0x30, 0xd1, 0xd3, 0x4d, 0x8e, 0x3a, 0xba, 0xcf, 0xc2, 0x94, 0xde, 0xc4, - 0x1d, 0xdb, 0xf2, 0xb0, 0xa9, 0x1d, 0x2a, 0x06, 0xbe, 0x85, 0x8d, 0xe2, 0x3c, 0x4d, 0x14, 0x4b, - 0xf7, 0xef, 0x57, 0x17, 0x37, 0x03, 0xdc, 0x16, 0x81, 0x95, 0xa7, 0x37, 0xd7, 0xab, 0xdb, 0xbb, - 0xb5, 0xbd, 0xea, 0xce, 0xda, 0x8b, 0xca, 0xfe, 0xce, 0xcf, 0xef, 0xd4, 0x9e, 0xdf, 0x91, 0x25, - 0xbd, 0xcf, 0xec, 0x43, 0xdc, 0xea, 0xbb, 0x20, 0xf5, 0x0f, 0x0a, 0x9d, 0x86, 0x61, 0xc3, 0x92, - 0xc6, 0xd0, 0x34, 0x4c, 0xee, 0xd4, 0x94, 0xfa, 0xe6, 0x7a, 0x55, 0xa9, 0x5e, 0xbb, 0x56, 0x5d, - 0xdb, 0xab, 0xb3, 0x1b, 0x08, 0xdf, 0x7a, 0xaf, 0x77, 0x53, 0xbf, 0x9a, 0x80, 0xe9, 0x21, 0x23, - 0x41, 0x15, 0x7e, 0x76, 0x60, 0xc7, 0x99, 0xa7, 0x46, 0x19, 0xfd, 0x22, 0x29, 0xf9, 0xbb, 0xaa, - 0xe3, 0xf1, 0xa3, 0xc6, 0xe3, 0x40, 0xbc, 0x64, 0x7a, 0x7a, 0x4b, 0xc7, 0x0e, 0xbf, 0xb0, 0x61, - 0x07, 0x8a, 0xc9, 0x40, 0xce, 0xee, 0x6c, 0x7e, 0x06, 0x90, 0x6d, 0xb9, 0xba, 0xa7, 0xdf, 0xc2, - 0x8a, 0x6e, 0x8a, 0xdb, 0x1d, 0x72, 0xc0, 0x48, 0xca, 0x92, 0xd0, 0x6c, 0x9a, 0x9e, 0x6f, 0x6d, - 0xe2, 0xb6, 0xda, 0x67, 0x4d, 0x12, 0x78, 0x42, 0x96, 0x84, 0xc6, 0xb7, 0x3e, 0x07, 0xf9, 0xa6, - 0xd5, 0x25, 0x5d, 0x17, 0xb3, 0x23, 0xf5, 0x22, 0x26, 0xe7, 0x98, 0xcc, 0x37, 0xe1, 0xfd, 0x74, - 0x70, 0xad, 0x94, 0x97, 0x73, 0x4c, 0xc6, 0x4c, 0x1e, 0x83, 0x49, 0xb5, 0xdd, 0x76, 0x08, 0xb9, - 0x20, 0x62, 0x27, 0x84, 0x82, 0x2f, 0xa6, 0x86, 0xb3, 0xcf, 0x41, 0x46, 0xf8, 0x81, 0x94, 0x64, - 0xe2, 0x09, 0xc5, 0x66, 0xc7, 0xde, 0xf8, 0x42, 0x56, 0xce, 0x98, 0x42, 0x79, 0x0e, 0xf2, 0xba, - 0xab, 0x04, 0xb7, 0xe4, 0xf1, 0xb9, 0xf8, 0x42, 0x46, 0xce, 0xe9, 0xae, 0x7f, 0xc3, 0x38, 0xff, - 0x46, 0x1c, 0x0a, 0xbd, 0xb7, 0xfc, 0x68, 0x1d, 0x32, 0x86, 0xa5, 0xa9, 0x34, 0xb4, 0xd8, 0x27, - 0xa6, 0x85, 0x88, 0x0f, 0x03, 0x8b, 0x5b, 0xdc, 0x5e, 0xf6, 0x91, 0xb3, 0xff, 0x1a, 0x83, 0x8c, - 0x10, 0xa3, 0x53, 0x90, 0xb4, 0x55, 0xef, 0x80, 0xd2, 0xa5, 0x56, 0xe3, 0x52, 0x4c, 0xa6, 0xcf, - 0x44, 0xee, 0xda, 0xaa, 0x49, 0x43, 0x80, 0xcb, 0xc9, 0x33, 0x59, 0x57, 0x03, 0xab, 0x4d, 0x7a, - 0xfc, 0xb0, 0x3a, 0x1d, 0x6c, 0x7a, 0xae, 0x58, 0x57, 0x2e, 0x5f, 0xe3, 0x62, 0xf4, 0x24, 0x4c, - 0x79, 0x8e, 0xaa, 0x1b, 0x3d, 0xb6, 0x49, 0x6a, 0x2b, 0x09, 0x85, 0x6f, 0x5c, 0x86, 0x33, 0x82, - 0xb7, 0x89, 0x3d, 0x55, 0x3b, 0xc0, 0xcd, 0x00, 0x94, 0xa6, 0xd7, 0x0c, 0xa7, 0xb9, 0xc1, 0x3a, - 0xd7, 0x0b, 0xec, 0xfc, 0xf7, 0x62, 0x30, 0x25, 0x0e, 0x4c, 0x4d, 0xdf, 0x59, 0xdb, 0x00, 0xaa, - 0x69, 0x5a, 0x5e, 0xd8, 0x5d, 0x83, 0xa1, 0x3c, 0x80, 0x5b, 0xac, 0xf8, 0x20, 0x39, 0x44, 0x30, - 0xdb, 0x01, 0x08, 0x34, 0xc7, 0xba, 0xed, 0x2c, 0xe4, 0xf8, 0x27, 0x1c, 0xfa, 0x1d, 0x90, 0x1d, - 0xb1, 0x81, 0x89, 0xc8, 0xc9, 0x0a, 0xcd, 0x40, 0xaa, 0x81, 0xdb, 0xba, 0xc9, 0x2f, 0x66, 0xd9, - 0x83, 0xb8, 0x08, 0x49, 0xfa, 0x17, 0x21, 0xab, 0x9f, 0x81, 0x69, 0xcd, 0xea, 0xf4, 0x0f, 0x77, - 0x55, 0xea, 0x3b, 0xe6, 0xbb, 0xd7, 0x63, 0x2f, 0x41, 0xd0, 0x62, 0xbe, 0x1f, 0x8b, 0xfd, 0x69, - 0x3c, 0xb1, 0xb1, 0xbb, 0xfa, 0xd5, 0xf8, 0xec, 0x06, 0x83, 0xee, 0x8a, 0x99, 0xca, 0xb8, 0x65, - 0x60, 0x8d, 0x8c, 0x1e, 0xbe, 0xbc, 0x00, 0x4f, 0xb5, 0x75, 0xef, 0xa0, 0xdb, 0x58, 0xd4, 0xac, - 0xce, 0x52, 0xdb, 0x6a, 0x5b, 0xc1, 0xa7, 0x4f, 0xf2, 0x44, 0x1f, 0xe8, 0x7f, 0xfc, 0xf3, 0x67, - 0xd6, 0x97, 0xce, 0x46, 0x7e, 0x2b, 0x2d, 0xef, 0xc0, 0x34, 0x37, 0x56, 0xe8, 0xf7, 0x17, 0x76, - 0x8a, 0x40, 0xf7, 0xbd, 0xc3, 0x2a, 0x7e, 0xfd, 0x6d, 0x5a, 0xae, 0xe5, 0x29, 0x0e, 0x25, 0x3a, - 0x76, 0xd0, 0x28, 0xcb, 0xf0, 0x40, 0x0f, 0x1f, 0xdb, 0x9a, 0xd8, 0x89, 0x60, 0xfc, 0x0e, 0x67, - 0x9c, 0x0e, 0x31, 0xd6, 0x39, 0xb4, 0xbc, 0x06, 0x13, 0x27, 0xe1, 0xfa, 0x67, 0xce, 0x95, 0xc7, - 0x61, 0x92, 0x0d, 0x98, 0xa4, 0x24, 0x5a, 0xd7, 0xf5, 0xac, 0x0e, 0xcd, 0x7b, 0xf7, 0xa7, 0xf9, - 0x97, 0xb7, 0xd9, 0x5e, 0x29, 0x10, 0xd8, 0x9a, 0x8f, 0x2a, 0x97, 0x81, 0x7e, 0x72, 0x6a, 0x62, - 0xcd, 0x88, 0x60, 0x78, 0x93, 0x0f, 0xc4, 0xb7, 0x2f, 0x7f, 0x1a, 0x66, 0xc8, 0xff, 0x34, 0x2d, - 0x85, 0x47, 0x12, 0x7d, 0xe1, 0x55, 0xfc, 0xde, 0x2b, 0x6c, 0x3b, 0x4e, 0xfb, 0x04, 0xa1, 0x31, - 0x85, 0x56, 0xb1, 0x8d, 0x3d, 0x0f, 0x3b, 0xae, 0xa2, 0x1a, 0xc3, 0x86, 0x17, 0xba, 0x31, 0x28, - 0x7e, 0xe1, 0x9d, 0xde, 0x55, 0xdc, 0x60, 0xc8, 0x8a, 0x61, 0x94, 0xf7, 0xe1, 0xf4, 0x90, 0xa8, - 0x18, 0x81, 0xf3, 0x55, 0xce, 0x39, 0x33, 0x10, 0x19, 0x84, 0x76, 0x17, 0x84, 0xdc, 0x5f, 0xcb, - 0x11, 0x38, 0xff, 0x88, 0x73, 0x22, 0x8e, 0x15, 0x4b, 0x4a, 0x18, 0x9f, 0x83, 0xa9, 0x5b, 0xd8, - 0x69, 0x58, 0x2e, 0xbf, 0xa5, 0x19, 0x81, 0xee, 0x35, 0x4e, 0x37, 0xc9, 0x81, 0xf4, 0xda, 0x86, - 0x70, 0x5d, 0x81, 0x4c, 0x4b, 0xd5, 0xf0, 0x08, 0x14, 0x5f, 0xe4, 0x14, 0xe3, 0xc4, 0x9e, 0x40, - 0x2b, 0x90, 0x6f, 0x5b, 0xbc, 0x32, 0x45, 0xc3, 0x5f, 0xe7, 0xf0, 0x9c, 0xc0, 0x70, 0x0a, 0xdb, - 0xb2, 0xbb, 0x06, 0x29, 0x5b, 0xd1, 0x14, 0x7f, 0x2c, 0x28, 0x04, 0x86, 0x53, 0x9c, 0xc0, 0xad, - 0x7f, 0x22, 0x28, 0xdc, 0x90, 0x3f, 0x9f, 0x85, 0x9c, 0x65, 0x1a, 0x87, 0x96, 0x39, 0xca, 0x20, - 0xbe, 0xc4, 0x19, 0x80, 0x43, 0x08, 0xc1, 0x55, 0xc8, 0x8e, 0xba, 0x10, 0x5f, 0x7e, 0x47, 0x6c, - 0x0f, 0xb1, 0x02, 0x1b, 0x30, 0x29, 0x12, 0x94, 0x6e, 0x99, 0x23, 0x50, 0xfc, 0x19, 0xa7, 0x28, - 0x84, 0x60, 0x7c, 0x1a, 0x1e, 0x76, 0xbd, 0x36, 0x1e, 0x85, 0xe4, 0x0d, 0x31, 0x0d, 0x0e, 0xe1, - 0xae, 0x6c, 0x60, 0x53, 0x3b, 0x18, 0x8d, 0xe1, 0x2b, 0xc2, 0x95, 0x02, 0x43, 0x28, 0xd6, 0x60, - 0xa2, 0xa3, 0x3a, 0xee, 0x81, 0x6a, 0x8c, 0xb4, 0x1c, 0x7f, 0xce, 0x39, 0xf2, 0x3e, 0x88, 0x7b, - 0xa4, 0x6b, 0x9e, 0x84, 0xe6, 0xab, 0xc2, 0x23, 0x21, 0x18, 0xdf, 0x7a, 0xae, 0x47, 0xaf, 0xb4, - 0x4e, 0xc2, 0xf6, 0x17, 0x62, 0xeb, 0x31, 0xec, 0x76, 0x98, 0xf1, 0x2a, 0x64, 0x5d, 0xfd, 0xce, - 0x48, 0x34, 0x7f, 0x29, 0x56, 0x9a, 0x02, 0x08, 0xf8, 0x45, 0x38, 0x33, 0xb4, 0x4c, 0x8c, 0x40, - 0xf6, 0x57, 0x9c, 0xec, 0xd4, 0x90, 0x52, 0xc1, 0x53, 0xc2, 0x49, 0x29, 0xff, 0x5a, 0xa4, 0x04, - 0xdc, 0xc7, 0xb5, 0x4b, 0xce, 0x0a, 0xae, 0xda, 0x3a, 0x99, 0xd7, 0xfe, 0x46, 0x78, 0x8d, 0x61, - 0x7b, 0xbc, 0xb6, 0x07, 0xa7, 0x38, 0xe3, 0xc9, 0xd6, 0xf5, 0x6b, 0x22, 0xb1, 0x32, 0xf4, 0x7e, - 0xef, 0xea, 0x7e, 0x06, 0x66, 0x7d, 0x77, 0x8a, 0xa6, 0xd4, 0x55, 0x3a, 0xaa, 0x3d, 0x02, 0xf3, - 0xd7, 0x39, 0xb3, 0xc8, 0xf8, 0x7e, 0x57, 0xeb, 0x6e, 0xab, 0x36, 0x21, 0x7f, 0x01, 0x8a, 0x82, - 0xbc, 0x6b, 0x3a, 0x58, 0xb3, 0xda, 0xa6, 0x7e, 0x07, 0x37, 0x47, 0xa0, 0xfe, 0xdb, 0xbe, 0xa5, - 0xda, 0x0f, 0xc1, 0x09, 0xf3, 0x26, 0x48, 0x7e, 0xaf, 0xa2, 0xe8, 0x1d, 0xdb, 0x72, 0xbc, 0x08, - 0xc6, 0x6f, 0x88, 0x95, 0xf2, 0x71, 0x9b, 0x14, 0x56, 0xae, 0x42, 0x81, 0x3e, 0x8e, 0x1a, 0x92, - 0x7f, 0xc7, 0x89, 0x26, 0x02, 0x14, 0x4f, 0x1c, 0x9a, 0xd5, 0xb1, 0x55, 0x67, 0x94, 0xfc, 0xf7, - 0xf7, 0x22, 0x71, 0x70, 0x08, 0x4f, 0x1c, 0xde, 0xa1, 0x8d, 0x49, 0xb5, 0x1f, 0x81, 0xe1, 0x9b, - 0x22, 0x71, 0x08, 0x0c, 0xa7, 0x10, 0x0d, 0xc3, 0x08, 0x14, 0xff, 0x20, 0x28, 0x04, 0x86, 0x50, - 0x7c, 0x2a, 0x28, 0xb4, 0x0e, 0x6e, 0xeb, 0xae, 0xe7, 0xb0, 0x56, 0xf8, 0xfe, 0x54, 0xdf, 0x7a, - 0xa7, 0xb7, 0x09, 0x93, 0x43, 0x50, 0x92, 0x89, 0xf8, 0x15, 0x2a, 0x3d, 0x29, 0x45, 0x0f, 0xec, - 0xdb, 0x22, 0x13, 0x85, 0x60, 0x6c, 0x7f, 0x4e, 0xf6, 0xf5, 0x2a, 0x28, 0xea, 0x87, 0x30, 0xc5, - 0x5f, 0x7a, 0x8f, 0x73, 0xf5, 0xb6, 0x2a, 0xe5, 0x2d, 0x12, 0x40, 0xbd, 0x0d, 0x45, 0x34, 0xd9, - 0x2b, 0xef, 0xf9, 0x31, 0xd4, 0xd3, 0x4f, 0x94, 0xaf, 0xc1, 0x44, 0x4f, 0x33, 0x11, 0x4d, 0xf5, - 0xcb, 0x9c, 0x2a, 0x1f, 0xee, 0x25, 0xca, 0x2b, 0x90, 0x24, 0x8d, 0x41, 0x34, 0xfc, 0x57, 0x38, - 0x9c, 0x9a, 0x97, 0x3f, 0x01, 0x19, 0xd1, 0x10, 0x44, 0x43, 0x7f, 0x95, 0x43, 0x7d, 0x08, 0x81, - 0x8b, 0x66, 0x20, 0x1a, 0xfe, 0x6b, 0x02, 0x2e, 0x20, 0x04, 0x3e, 0xba, 0x0b, 0xff, 0xe9, 0xd7, - 0x93, 0x3c, 0xa1, 0x0b, 0xdf, 0x5d, 0x85, 0x71, 0xde, 0x05, 0x44, 0xa3, 0x3f, 0xc7, 0x5f, 0x2e, - 0x10, 0xe5, 0x4b, 0x90, 0x1a, 0xd1, 0xe1, 0xbf, 0xc1, 0xa1, 0xcc, 0xbe, 0xbc, 0x06, 0xb9, 0x50, - 0xe5, 0x8f, 0x86, 0xff, 0x26, 0x87, 0x87, 0x51, 0x64, 0xe8, 0xbc, 0xf2, 0x47, 0x13, 0xfc, 0x96, - 0x18, 0x3a, 0x47, 0x10, 0xb7, 0x89, 0xa2, 0x1f, 0x8d, 0xfe, 0x6d, 0xe1, 0x75, 0x01, 0x29, 0x3f, - 0x0b, 0x59, 0x3f, 0x91, 0x47, 0xe3, 0x7f, 0x87, 0xe3, 0x03, 0x0c, 0xf1, 0x40, 0xa8, 0x90, 0x44, - 0x53, 0xfc, 0xae, 0xf0, 0x40, 0x08, 0x45, 0xb6, 0x51, 0x7f, 0x73, 0x10, 0xcd, 0xf4, 0x7b, 0x62, - 0x1b, 0xf5, 0xf5, 0x06, 0x64, 0x35, 0x69, 0x3e, 0x8d, 0xa6, 0xf8, 0x7d, 0xb1, 0x9a, 0xd4, 0x9e, - 0x0c, 0xa3, 0xbf, 0xda, 0x46, 0x73, 0xfc, 0xa1, 0x18, 0x46, 0x5f, 0xb1, 0x2d, 0xef, 0x02, 0x1a, - 0xac, 0xb4, 0xd1, 0x7c, 0x9f, 0xe7, 0x7c, 0x53, 0x03, 0x85, 0xb6, 0xfc, 0x3c, 0x9c, 0x1a, 0x5e, - 0x65, 0xa3, 0x59, 0xbf, 0xf0, 0x5e, 0xdf, 0xb9, 0x28, 0x5c, 0x64, 0xcb, 0x7b, 0x41, 0xba, 0x0e, - 0x57, 0xd8, 0x68, 0xda, 0x57, 0xdf, 0xeb, 0xcd, 0xd8, 0xe1, 0x02, 0x5b, 0xae, 0x00, 0x04, 0xc5, - 0x2d, 0x9a, 0xeb, 0x35, 0xce, 0x15, 0x02, 0x91, 0xad, 0xc1, 0x6b, 0x5b, 0x34, 0xfe, 0x8b, 0x62, - 0x6b, 0x70, 0x04, 0xd9, 0x1a, 0xa2, 0xac, 0x45, 0xa3, 0x5f, 0x17, 0x5b, 0x43, 0x40, 0x48, 0x64, - 0x87, 0x2a, 0x47, 0x34, 0xc3, 0x97, 0x44, 0x64, 0x87, 0x50, 0xe5, 0xab, 0x90, 0x31, 0xbb, 0x86, - 0x41, 0x02, 0x14, 0xdd, 0xff, 0x07, 0x62, 0xc5, 0xff, 0xf8, 0x80, 0x8f, 0x40, 0x00, 0xca, 0x2b, - 0x90, 0xc2, 0x9d, 0x06, 0x6e, 0x46, 0x21, 0xff, 0xf3, 0x03, 0x91, 0x94, 0x88, 0x75, 0xf9, 0x59, - 0x00, 0x76, 0xb4, 0xa7, 0x9f, 0xad, 0x22, 0xb0, 0xff, 0xf5, 0x01, 0xff, 0xe9, 0x46, 0x00, 0x09, - 0x08, 0xd8, 0x0f, 0x41, 0xee, 0x4f, 0xf0, 0x4e, 0x2f, 0x01, 0x9d, 0xf5, 0x15, 0x18, 0xbf, 0xe1, - 0x5a, 0xa6, 0xa7, 0xb6, 0xa3, 0xd0, 0xff, 0xcd, 0xd1, 0xc2, 0x9e, 0x38, 0xac, 0x63, 0x39, 0xd8, - 0x53, 0xdb, 0x6e, 0x14, 0xf6, 0x7f, 0x38, 0xd6, 0x07, 0x10, 0xb0, 0xa6, 0xba, 0xde, 0x28, 0xf3, - 0xfe, 0x91, 0x00, 0x0b, 0x00, 0x19, 0x34, 0xf9, 0xff, 0x26, 0x3e, 0x8c, 0xc2, 0xbe, 0x2b, 0x06, - 0xcd, 0xed, 0xcb, 0x9f, 0x80, 0x2c, 0xf9, 0x97, 0xfd, 0x1e, 0x2b, 0x02, 0xfc, 0xbf, 0x1c, 0x1c, - 0x20, 0xc8, 0x9b, 0x5d, 0xaf, 0xe9, 0xe9, 0xd1, 0xce, 0xfe, 0x3f, 0xbe, 0xd2, 0xc2, 0xbe, 0x5c, - 0x81, 0x9c, 0xeb, 0x35, 0x9b, 0x5d, 0xde, 0x5f, 0x45, 0xc0, 0xff, 0xff, 0x03, 0xff, 0xc8, 0xed, - 0x63, 0x56, 0xab, 0xc3, 0x6f, 0x0f, 0x61, 0xc3, 0xda, 0xb0, 0xd8, 0xbd, 0xe1, 0x4b, 0xf3, 0xd1, - 0x17, 0x80, 0xf0, 0x07, 0x29, 0x28, 0x6a, 0x56, 0xa7, 0x61, 0xb9, 0x4b, 0x26, 0xd6, 0xbd, 0x03, - 0xec, 0x2c, 0x59, 0x26, 0xe7, 0x43, 0x09, 0xcb, 0xc4, 0xb3, 0x27, 0xbb, 0x46, 0x9c, 0x3f, 0x03, - 0xa9, 0x7a, 0xb7, 0xd1, 0x38, 0x44, 0x12, 0x24, 0xdc, 0x6e, 0x83, 0xff, 0x24, 0x87, 0xfc, 0x3b, - 0xff, 0xfd, 0x04, 0xe4, 0xea, 0x6a, 0xc7, 0x36, 0x70, 0xcd, 0xc4, 0xb5, 0x16, 0x2a, 0x42, 0x9a, - 0xce, 0xf3, 0x19, 0x6a, 0x14, 0xbb, 0x3e, 0x26, 0xf3, 0x67, 0x5f, 0xb3, 0x4c, 0xaf, 0x57, 0xe3, - 0xbe, 0x66, 0xd9, 0xd7, 0x9c, 0x67, 0xb7, 0xab, 0xbe, 0xe6, 0xbc, 0xaf, 0xb9, 0x40, 0xef, 0x58, - 0x13, 0xbe, 0xe6, 0x82, 0xaf, 0x59, 0xa1, 0xdf, 0x10, 0x26, 0x7c, 0xcd, 0x8a, 0xaf, 0xb9, 0x48, - 0xbf, 0x1a, 0x24, 0x7d, 0xcd, 0x45, 0x5f, 0x73, 0x89, 0x7e, 0x2c, 0x98, 0xf2, 0x35, 0x97, 0x7c, - 0xcd, 0x65, 0xfa, 0x81, 0x00, 0xf9, 0x9a, 0xcb, 0xbe, 0xe6, 0x0a, 0xfd, 0xe5, 0xcd, 0xb8, 0xaf, - 0xb9, 0x82, 0x66, 0x61, 0x9c, 0xcd, 0xec, 0x69, 0xfa, 0x15, 0x79, 0xf2, 0xfa, 0x98, 0x2c, 0x04, - 0x81, 0xee, 0x19, 0xfa, 0xeb, 0x9a, 0x74, 0xa0, 0x7b, 0x26, 0xd0, 0x2d, 0xd3, 0x1f, 0xf9, 0x4b, - 0x81, 0x6e, 0x39, 0xd0, 0x9d, 0x2f, 0x4e, 0x90, 0xf0, 0x08, 0x74, 0xe7, 0x03, 0xdd, 0x85, 0x62, - 0x81, 0xf8, 0x3f, 0xd0, 0x5d, 0x08, 0x74, 0x2b, 0xc5, 0xc9, 0xb9, 0xd8, 0x42, 0x3e, 0xd0, 0xad, - 0xa0, 0xa7, 0x20, 0xe7, 0x76, 0x1b, 0x0a, 0x4f, 0x85, 0xf4, 0x57, 0x3c, 0xb9, 0x65, 0x58, 0x24, - 0x11, 0x41, 0x17, 0xf5, 0xfa, 0x98, 0x0c, 0x6e, 0xb7, 0xc1, 0x53, 0xe8, 0x6a, 0x1e, 0xe8, 0xe5, - 0x87, 0x42, 0x7f, 0x7c, 0xbb, 0xba, 0xfe, 0xe6, 0xbd, 0xd2, 0xd8, 0x77, 0xef, 0x95, 0xc6, 0xfe, - 0xed, 0x5e, 0x69, 0xec, 0xad, 0x7b, 0xa5, 0xd8, 0xbb, 0xf7, 0x4a, 0xb1, 0xf7, 0xef, 0x95, 0x62, - 0x77, 0x8f, 0x4a, 0xb1, 0xaf, 0x1c, 0x95, 0x62, 0x5f, 0x3b, 0x2a, 0xc5, 0xbe, 0x75, 0x54, 0x8a, - 0xbd, 0x79, 0x54, 0x1a, 0xfb, 0xee, 0x51, 0x69, 0xec, 0xad, 0xa3, 0x52, 0xec, 0x87, 0x47, 0xa5, - 0xb1, 0x77, 0x8f, 0x4a, 0xb1, 0xf7, 0x8f, 0x4a, 0x63, 0x77, 0x7f, 0x50, 0x1a, 0x6b, 0xa4, 0x69, - 0x18, 0x9d, 0xff, 0x71, 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x12, 0x73, 0xc8, 0xb3, 0x33, 0x00, - 0x00, + // 4084 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x1b, 0xd7, + 0x75, 0x26, 0x7e, 0x09, 0x1c, 0x80, 0xe0, 0x72, 0x49, 0x4b, 0x2b, 0x3a, 0x86, 0x24, 0xda, 0x8e, + 0x69, 0xbb, 0x26, 0x6d, 0x4a, 0xd4, 0x0f, 0xd4, 0xc4, 0x05, 0x49, 0x88, 0xa2, 0x4b, 0x12, 0xcc, + 0x82, 0x8c, 0x7f, 0x32, 0x9d, 0x9d, 0xc5, 0xe2, 0x02, 0x5c, 0x69, 0xb1, 0xbb, 0xd9, 0x5d, 0x48, + 0xa6, 0xa6, 0x0f, 0xea, 0xb8, 0x3f, 0x93, 0xe9, 0xf4, 0xbf, 0xd3, 0x26, 0xae, 0xe3, 0x36, 0xe9, + 0x34, 0x4e, 0xd3, 0xbf, 0xa4, 0x69, 0xd3, 0x24, 0x7d, 0xe9, 0x4b, 0x5a, 0x3f, 0x75, 0x92, 0xb7, + 0x3e, 0xe4, 0xc1, 0x62, 0x3c, 0xd3, 0xb4, 0x75, 0x1b, 0xb7, 0xd5, 0x83, 0x67, 0xfc, 0x92, 0xb9, + 0x7f, 0xbb, 0x8b, 0x05, 0xa8, 0x05, 0x33, 0x63, 0xe7, 0x49, 0xdc, 0x73, 0xce, 0xf7, 0xed, 0xbd, + 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0x77, 0x21, 0xf8, 0xd1, 0x65, 0x38, 0xd3, 0xb1, 0xac, 0x8e, 0x81, + 0x16, 0x6d, 0xc7, 0xf2, 0xac, 0x66, 0xaf, 0xbd, 0xd8, 0x42, 0xae, 0xe6, 0xe8, 0xb6, 0x67, 0x39, + 0x0b, 0x44, 0x26, 0x4e, 0x52, 0x8b, 0x05, 0x6e, 0x31, 0xb7, 0x05, 0x53, 0x57, 0x75, 0x03, 0xad, + 0xf9, 0x86, 0x0d, 0xe4, 0x89, 0x97, 0x20, 0xdd, 0xd6, 0x0d, 0x24, 0x25, 0xce, 0xa4, 0xe6, 0x0b, + 0x4b, 0x8f, 0x2c, 0x44, 0x40, 0x0b, 0xfd, 0x88, 0x1d, 0x2c, 0x96, 0x09, 0x62, 0xee, 0xed, 0x34, + 0x4c, 0x0f, 0xd1, 0x8a, 0x22, 0xa4, 0x4d, 0xb5, 0x8b, 0x19, 0x13, 0xf3, 0x79, 0x99, 0xfc, 0x2d, + 0x4a, 0x30, 0x6e, 0xab, 0xda, 0x0d, 0xb5, 0x83, 0xa4, 0x24, 0x11, 0xf3, 0x47, 0xb1, 0x0c, 0xd0, + 0x42, 0x36, 0x32, 0x5b, 0xc8, 0xd4, 0x0e, 0xa4, 0xd4, 0x99, 0xd4, 0x7c, 0x5e, 0x0e, 0x49, 0xc4, + 0x27, 0x61, 0xca, 0xee, 0x35, 0x0d, 0x5d, 0x53, 0x42, 0x66, 0x70, 0x26, 0x35, 0x9f, 0x91, 0x05, + 0xaa, 0x58, 0x0b, 0x8c, 0x1f, 0x83, 0xc9, 0x5b, 0x48, 0xbd, 0x11, 0x36, 0x2d, 0x10, 0xd3, 0x12, + 0x16, 0x87, 0x0c, 0x57, 0xa1, 0xd8, 0x45, 0xae, 0xab, 0x76, 0x90, 0xe2, 0x1d, 0xd8, 0x48, 0x4a, + 0x93, 0xd9, 0x9f, 0x19, 0x98, 0x7d, 0x74, 0xe6, 0x05, 0x86, 0xda, 0x3d, 0xb0, 0x91, 0x58, 0x85, + 0x3c, 0x32, 0x7b, 0x5d, 0xca, 0x90, 0x39, 0xc2, 0x7f, 0x35, 0xb3, 0xd7, 0x8d, 0xb2, 0xe4, 0x30, + 0x8c, 0x51, 0x8c, 0xbb, 0xc8, 0xb9, 0xa9, 0x6b, 0x48, 0xca, 0x12, 0x82, 0xc7, 0x06, 0x08, 0x1a, + 0x54, 0x1f, 0xe5, 0xe0, 0x38, 0x71, 0x15, 0xf2, 0xe8, 0x65, 0x0f, 0x99, 0xae, 0x6e, 0x99, 0xd2, + 0x38, 0x21, 0x79, 0x74, 0xc8, 0x2a, 0x22, 0xa3, 0x15, 0xa5, 0x08, 0x70, 0xe2, 0x05, 0x18, 0xb7, + 0x6c, 0x4f, 0xb7, 0x4c, 0x57, 0xca, 0x9d, 0x49, 0xcc, 0x17, 0x96, 0x3e, 0x32, 0x34, 0x10, 0xea, + 0xd4, 0x46, 0xe6, 0xc6, 0xe2, 0x06, 0x08, 0xae, 0xd5, 0x73, 0x34, 0xa4, 0x68, 0x56, 0x0b, 0x29, + 0xba, 0xd9, 0xb6, 0xa4, 0x3c, 0x21, 0x38, 0x3d, 0x38, 0x11, 0x62, 0xb8, 0x6a, 0xb5, 0xd0, 0x86, + 0xd9, 0xb6, 0xe4, 0x92, 0xdb, 0xf7, 0x2c, 0x9e, 0x80, 0xac, 0x7b, 0x60, 0x7a, 0xea, 0xcb, 0x52, + 0x91, 0x44, 0x08, 0x7b, 0x9a, 0xfb, 0x56, 0x16, 0x26, 0x47, 0x09, 0xb1, 0x2b, 0x90, 0x69, 0xe3, + 0x59, 0x4a, 0xc9, 0xe3, 0xf8, 0x80, 0x62, 0xfa, 0x9d, 0x98, 0xfd, 0x09, 0x9d, 0x58, 0x85, 0x82, + 0x89, 0x5c, 0x0f, 0xb5, 0x68, 0x44, 0xa4, 0x46, 0x8c, 0x29, 0xa0, 0xa0, 0xc1, 0x90, 0x4a, 0xff, + 0x44, 0x21, 0xf5, 0x02, 0x4c, 0xfa, 0x43, 0x52, 0x1c, 0xd5, 0xec, 0xf0, 0xd8, 0x5c, 0x8c, 0x1b, + 0xc9, 0x42, 0x8d, 0xe3, 0x64, 0x0c, 0x93, 0x4b, 0xa8, 0xef, 0x59, 0x5c, 0x03, 0xb0, 0x4c, 0x64, + 0xb5, 0x95, 0x16, 0xd2, 0x0c, 0x29, 0x77, 0x84, 0x97, 0xea, 0xd8, 0x64, 0xc0, 0x4b, 0x16, 0x95, + 0x6a, 0x86, 0x78, 0x39, 0x08, 0xb5, 0xf1, 0x23, 0x22, 0x65, 0x8b, 0x6e, 0xb2, 0x81, 0x68, 0xdb, + 0x83, 0x92, 0x83, 0x70, 0xdc, 0xa3, 0x16, 0x9b, 0x59, 0x9e, 0x0c, 0x62, 0x21, 0x76, 0x66, 0x32, + 0x83, 0xd1, 0x89, 0x4d, 0x38, 0xe1, 0x47, 0xf1, 0x61, 0xf0, 0x05, 0x0a, 0x09, 0x2b, 0x20, 0x59, + 0xa8, 0xc8, 0x85, 0xdb, 0x6a, 0x17, 0xcd, 0xde, 0x86, 0x52, 0xbf, 0x7b, 0xc4, 0x19, 0xc8, 0xb8, + 0x9e, 0xea, 0x78, 0x24, 0x0a, 0x33, 0x32, 0x7d, 0x10, 0x05, 0x48, 0x21, 0xb3, 0x45, 0xb2, 0x5c, + 0x46, 0xc6, 0x7f, 0x8a, 0x3f, 0x17, 0x4c, 0x38, 0x45, 0x26, 0xfc, 0xd1, 0xc1, 0x15, 0xed, 0x63, + 0x8e, 0xce, 0x7b, 0xf6, 0x22, 0x4c, 0xf4, 0x4d, 0x60, 0xd4, 0x57, 0xcf, 0xfd, 0x22, 0x3c, 0x30, + 0x94, 0x5a, 0x7c, 0x01, 0x66, 0x7a, 0xa6, 0x6e, 0x7a, 0xc8, 0xb1, 0x1d, 0x84, 0x23, 0x96, 0xbe, + 0x4a, 0xfa, 0xf7, 0xf1, 0x23, 0x62, 0x6e, 0x2f, 0x6c, 0x4d, 0x59, 0xe4, 0xe9, 0xde, 0xa0, 0xf0, + 0x89, 0x7c, 0xee, 0x87, 0xe3, 0xc2, 0x9d, 0x3b, 0x77, 0xee, 0x24, 0xe7, 0x3e, 0x9b, 0x85, 0x99, + 0x61, 0x7b, 0x66, 0xe8, 0xf6, 0x3d, 0x01, 0x59, 0xb3, 0xd7, 0x6d, 0x22, 0x87, 0x38, 0x29, 0x23, + 0xb3, 0x27, 0xb1, 0x0a, 0x19, 0x43, 0x6d, 0x22, 0x43, 0x4a, 0x9f, 0x49, 0xcc, 0x97, 0x96, 0x9e, + 0x1c, 0x69, 0x57, 0x2e, 0x6c, 0x62, 0x88, 0x4c, 0x91, 0xe2, 0xc7, 0x21, 0xcd, 0x52, 0x34, 0x66, + 0x78, 0x62, 0x34, 0x06, 0xbc, 0x97, 0x64, 0x82, 0x13, 0x1f, 0x84, 0x3c, 0xfe, 0x97, 0xc6, 0x46, + 0x96, 0x8c, 0x39, 0x87, 0x05, 0x38, 0x2e, 0xc4, 0x59, 0xc8, 0x91, 0x6d, 0xd2, 0x42, 0xbc, 0xb4, + 0xf9, 0xcf, 0x38, 0xb0, 0x5a, 0xa8, 0xad, 0xf6, 0x0c, 0x4f, 0xb9, 0xa9, 0x1a, 0x3d, 0x44, 0x02, + 0x3e, 0x2f, 0x17, 0x99, 0xf0, 0x93, 0x58, 0x26, 0x9e, 0x86, 0x02, 0xdd, 0x55, 0xba, 0xd9, 0x42, + 0x2f, 0x93, 0xec, 0x99, 0x91, 0xe9, 0x46, 0xdb, 0xc0, 0x12, 0xfc, 0xfa, 0xeb, 0xae, 0x65, 0xf2, + 0xd0, 0x24, 0xaf, 0xc0, 0x02, 0xf2, 0xfa, 0x8b, 0xd1, 0xc4, 0xfd, 0xd0, 0xf0, 0xe9, 0x45, 0x63, + 0x6a, 0xee, 0x1b, 0x49, 0x48, 0x93, 0x7c, 0x31, 0x09, 0x85, 0xdd, 0x17, 0x77, 0x6a, 0xca, 0x5a, + 0x7d, 0x6f, 0x65, 0xb3, 0x26, 0x24, 0xc4, 0x12, 0x00, 0x11, 0x5c, 0xdd, 0xac, 0x57, 0x77, 0x85, + 0xa4, 0xff, 0xbc, 0xb1, 0xbd, 0x7b, 0xe1, 0xbc, 0x90, 0xf2, 0x01, 0x7b, 0x54, 0x90, 0x0e, 0x1b, + 0x9c, 0x5b, 0x12, 0x32, 0xa2, 0x00, 0x45, 0x4a, 0xb0, 0xf1, 0x42, 0x6d, 0xed, 0xc2, 0x79, 0x21, + 0xdb, 0x2f, 0x39, 0xb7, 0x24, 0x8c, 0x8b, 0x13, 0x90, 0x27, 0x92, 0x95, 0x7a, 0x7d, 0x53, 0xc8, + 0xf9, 0x9c, 0x8d, 0x5d, 0x79, 0x63, 0x7b, 0x5d, 0xc8, 0xfb, 0x9c, 0xeb, 0x72, 0x7d, 0x6f, 0x47, + 0x00, 0x9f, 0x61, 0xab, 0xd6, 0x68, 0x54, 0xd7, 0x6b, 0x42, 0xc1, 0xb7, 0x58, 0x79, 0x71, 0xb7, + 0xd6, 0x10, 0x8a, 0x7d, 0xc3, 0x3a, 0xb7, 0x24, 0x4c, 0xf8, 0xaf, 0xa8, 0x6d, 0xef, 0x6d, 0x09, + 0x25, 0x71, 0x0a, 0x26, 0xe8, 0x2b, 0xf8, 0x20, 0x26, 0x23, 0xa2, 0x0b, 0xe7, 0x05, 0x21, 0x18, + 0x08, 0x65, 0x99, 0xea, 0x13, 0x5c, 0x38, 0x2f, 0x88, 0x73, 0xab, 0x90, 0x21, 0xd1, 0x25, 0x8a, + 0x50, 0xda, 0xac, 0xae, 0xd4, 0x36, 0x95, 0xfa, 0xce, 0xee, 0x46, 0x7d, 0xbb, 0xba, 0x29, 0x24, + 0x02, 0x99, 0x5c, 0xfb, 0xc4, 0xde, 0x86, 0x5c, 0x5b, 0x13, 0x92, 0x61, 0xd9, 0x4e, 0xad, 0xba, + 0x5b, 0x5b, 0x13, 0x52, 0x73, 0x1a, 0xcc, 0x0c, 0xcb, 0x93, 0x43, 0x77, 0x46, 0x68, 0x89, 0x93, + 0x47, 0x2c, 0x31, 0xe1, 0x1a, 0x58, 0xe2, 0x1f, 0x24, 0x61, 0x7a, 0x48, 0xad, 0x18, 0xfa, 0x92, + 0x67, 0x21, 0x43, 0x43, 0x94, 0x56, 0xcf, 0xc7, 0x87, 0x16, 0x1d, 0x12, 0xb0, 0x03, 0x15, 0x94, + 0xe0, 0xc2, 0x1d, 0x44, 0xea, 0x88, 0x0e, 0x02, 0x53, 0x0c, 0xe4, 0xf4, 0x5f, 0x18, 0xc8, 0xe9, + 0xb4, 0xec, 0x5d, 0x18, 0xa5, 0xec, 0x11, 0xd9, 0xf1, 0x72, 0x7b, 0x66, 0x48, 0x6e, 0xbf, 0x02, + 0x53, 0x03, 0x44, 0x23, 0xe7, 0xd8, 0x57, 0x12, 0x20, 0x1d, 0xe5, 0x9c, 0x98, 0x4c, 0x97, 0xec, + 0xcb, 0x74, 0x57, 0xa2, 0x1e, 0x3c, 0x7b, 0xf4, 0x22, 0x0c, 0xac, 0xf5, 0x1b, 0x09, 0x38, 0x31, + 0xbc, 0x53, 0x1c, 0x3a, 0x86, 0x8f, 0x43, 0xb6, 0x8b, 0xbc, 0x7d, 0x8b, 0x77, 0x4b, 0x1f, 0x1d, + 0x52, 0x83, 0xb1, 0x3a, 0xba, 0xd8, 0x0c, 0x15, 0x2e, 0xe2, 0xa9, 0xa3, 0xda, 0x3d, 0x3a, 0x9a, + 0x81, 0x91, 0x7e, 0x26, 0x09, 0x0f, 0x0c, 0x25, 0x1f, 0x3a, 0xd0, 0x87, 0x00, 0x74, 0xd3, 0xee, + 0x79, 0xb4, 0x23, 0xa2, 0x09, 0x36, 0x4f, 0x24, 0x24, 0x79, 0xe1, 0xe4, 0xd9, 0xf3, 0x7c, 0x7d, + 0x8a, 0xe8, 0x81, 0x8a, 0x88, 0xc1, 0xa5, 0x60, 0xa0, 0x69, 0x32, 0xd0, 0xf2, 0x11, 0x33, 0x1d, + 0x08, 0xcc, 0xa7, 0x41, 0xd0, 0x0c, 0x1d, 0x99, 0x9e, 0xe2, 0x7a, 0x0e, 0x52, 0xbb, 0xba, 0xd9, + 0x21, 0x15, 0x24, 0x57, 0xc9, 0xb4, 0x55, 0xc3, 0x45, 0xf2, 0x24, 0x55, 0x37, 0xb8, 0x16, 0x23, + 0x48, 0x00, 0x39, 0x21, 0x44, 0xb6, 0x0f, 0x41, 0xd5, 0x3e, 0x62, 0xee, 0xeb, 0x39, 0x28, 0x84, + 0xfa, 0x6a, 0xf1, 0x2c, 0x14, 0xaf, 0xab, 0x37, 0x55, 0x85, 0x9f, 0x95, 0xa8, 0x27, 0x0a, 0x58, + 0xb6, 0xc3, 0xce, 0x4b, 0x4f, 0xc3, 0x0c, 0x31, 0xb1, 0x7a, 0x1e, 0x72, 0x14, 0xcd, 0x50, 0x5d, + 0x97, 0x38, 0x2d, 0x47, 0x4c, 0x45, 0xac, 0xab, 0x63, 0xd5, 0x2a, 0xd7, 0x88, 0xcb, 0x30, 0x4d, + 0x10, 0xdd, 0x9e, 0xe1, 0xe9, 0xb6, 0x81, 0x14, 0x7c, 0x7a, 0x73, 0x49, 0x25, 0xf1, 0x47, 0x36, + 0x85, 0x2d, 0xb6, 0x98, 0x01, 0x1e, 0x91, 0x2b, 0xae, 0xc1, 0x43, 0x04, 0xd6, 0x41, 0x26, 0x72, + 0x54, 0x0f, 0x29, 0xe8, 0xd3, 0x3d, 0xd5, 0x70, 0x15, 0xd5, 0x6c, 0x29, 0xfb, 0xaa, 0xbb, 0x2f, + 0xcd, 0x60, 0x82, 0x95, 0xa4, 0x94, 0x90, 0x4f, 0x61, 0xc3, 0x75, 0x66, 0x57, 0x23, 0x66, 0x55, + 0xb3, 0x75, 0x4d, 0x75, 0xf7, 0xc5, 0x0a, 0x9c, 0x20, 0x2c, 0xae, 0xe7, 0xe8, 0x66, 0x47, 0xd1, + 0xf6, 0x91, 0x76, 0x43, 0xe9, 0x79, 0xed, 0x4b, 0xd2, 0x83, 0xe1, 0xf7, 0x93, 0x11, 0x36, 0x88, + 0xcd, 0x2a, 0x36, 0xd9, 0xf3, 0xda, 0x97, 0xc4, 0x06, 0x14, 0xf1, 0x62, 0x74, 0xf5, 0xdb, 0x48, + 0x69, 0x5b, 0x0e, 0x29, 0x8d, 0xa5, 0x21, 0xa9, 0x29, 0xe4, 0xc1, 0x85, 0x3a, 0x03, 0x6c, 0x59, + 0x2d, 0x54, 0xc9, 0x34, 0x76, 0x6a, 0xb5, 0x35, 0xb9, 0xc0, 0x59, 0xae, 0x5a, 0x0e, 0x0e, 0xa8, + 0x8e, 0xe5, 0x3b, 0xb8, 0x40, 0x03, 0xaa, 0x63, 0x71, 0xf7, 0x2e, 0xc3, 0xb4, 0xa6, 0xd1, 0x39, + 0xeb, 0x9a, 0xc2, 0xce, 0x58, 0xae, 0x24, 0xf4, 0x39, 0x4b, 0xd3, 0xd6, 0xa9, 0x01, 0x8b, 0x71, + 0x57, 0xbc, 0x0c, 0x0f, 0x04, 0xce, 0x0a, 0x03, 0xa7, 0x06, 0x66, 0x19, 0x85, 0x2e, 0xc3, 0xb4, + 0x7d, 0x30, 0x08, 0x14, 0xfb, 0xde, 0x68, 0x1f, 0x44, 0x61, 0x17, 0x61, 0xc6, 0xde, 0xb7, 0x07, + 0x71, 0x4f, 0x84, 0x71, 0xa2, 0xbd, 0x6f, 0x47, 0x81, 0x8f, 0x92, 0x03, 0xb7, 0x83, 0x34, 0xd5, + 0x43, 0x2d, 0xe9, 0x64, 0xd8, 0x3c, 0xa4, 0x10, 0x17, 0x41, 0xd0, 0x34, 0x05, 0x99, 0x6a, 0xd3, + 0x40, 0x8a, 0xea, 0x20, 0x53, 0x75, 0xa5, 0xd3, 0x61, 0xe3, 0x92, 0xa6, 0xd5, 0x88, 0xb6, 0x4a, + 0x94, 0xe2, 0x13, 0x30, 0x65, 0x35, 0xaf, 0x6b, 0x34, 0x24, 0x15, 0xdb, 0x41, 0x6d, 0xfd, 0x65, + 0xe9, 0x11, 0xe2, 0xdf, 0x49, 0xac, 0x20, 0x01, 0xb9, 0x43, 0xc4, 0xe2, 0xe3, 0x20, 0x68, 0xee, + 0xbe, 0xea, 0xd8, 0x24, 0x27, 0xbb, 0xb6, 0xaa, 0x21, 0xe9, 0x51, 0x6a, 0x4a, 0xe5, 0xdb, 0x5c, + 0x8c, 0xb7, 0x84, 0x7b, 0x4b, 0x6f, 0x7b, 0x9c, 0xf1, 0x31, 0xba, 0x25, 0x88, 0x8c, 0xb1, 0xcd, + 0x83, 0x80, 0x5d, 0xd1, 0xf7, 0xe2, 0x79, 0x62, 0x56, 0xb2, 0xf7, 0xed, 0xf0, 0x7b, 0x1f, 0x86, + 0x09, 0x6c, 0x19, 0xbc, 0xf4, 0x71, 0xda, 0x90, 0xd9, 0xfb, 0xa1, 0x37, 0x7e, 0x60, 0xbd, 0xf1, + 0x5c, 0x05, 0x8a, 0xe1, 0xf8, 0x14, 0xf3, 0x40, 0x23, 0x54, 0x48, 0xe0, 0x66, 0x65, 0xb5, 0xbe, + 0x86, 0xdb, 0x8c, 0x97, 0x6a, 0x42, 0x12, 0xb7, 0x3b, 0x9b, 0x1b, 0xbb, 0x35, 0x45, 0xde, 0xdb, + 0xde, 0xdd, 0xd8, 0xaa, 0x09, 0xa9, 0x70, 0x5f, 0xfd, 0x9d, 0x24, 0x94, 0xfa, 0x8f, 0x48, 0xe2, + 0xcf, 0xc2, 0x49, 0x7e, 0x9f, 0xe1, 0x22, 0x4f, 0xb9, 0xa5, 0x3b, 0x64, 0xcb, 0x74, 0x55, 0x5a, + 0xbe, 0xfc, 0x45, 0x9b, 0x61, 0x56, 0x0d, 0xe4, 0x3d, 0xaf, 0x3b, 0x78, 0x43, 0x74, 0x55, 0x4f, + 0xdc, 0x84, 0xd3, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0xb6, 0x54, 0xa7, 0xa5, 0x04, 0x37, 0x49, 0x8a, + 0xaa, 0x69, 0xc8, 0x75, 0x2d, 0x5a, 0xaa, 0x7c, 0x96, 0x8f, 0x98, 0x56, 0x83, 0x19, 0x07, 0x39, + 0xbc, 0xca, 0x4c, 0x23, 0x01, 0x96, 0x3a, 0x2a, 0xc0, 0x1e, 0x84, 0x7c, 0x57, 0xb5, 0x15, 0x64, + 0x7a, 0xce, 0x01, 0x69, 0x8c, 0x73, 0x72, 0xae, 0xab, 0xda, 0x35, 0xfc, 0xfc, 0xe1, 0x9c, 0x4f, + 0xbe, 0x9f, 0x82, 0x62, 0xb8, 0x39, 0xc6, 0x67, 0x0d, 0x8d, 0xd4, 0x91, 0x04, 0xc9, 0x34, 0x0f, + 0xdf, 0xb7, 0x95, 0x5e, 0x58, 0xc5, 0x05, 0xa6, 0x92, 0xa5, 0x2d, 0xab, 0x4c, 0x91, 0xb8, 0xb8, + 0xe3, 0xdc, 0x82, 0x68, 0x8b, 0x90, 0x93, 0xd9, 0x93, 0xb8, 0x0e, 0xd9, 0xeb, 0x2e, 0xe1, 0xce, + 0x12, 0xee, 0x47, 0xee, 0xcf, 0xfd, 0x5c, 0x83, 0x90, 0xe7, 0x9f, 0x6b, 0x28, 0xdb, 0x75, 0x79, + 0xab, 0xba, 0x29, 0x33, 0xb8, 0x78, 0x0a, 0xd2, 0x86, 0x7a, 0xfb, 0xa0, 0xbf, 0x14, 0x11, 0xd1, + 0xa8, 0x8e, 0x3f, 0x05, 0xe9, 0x5b, 0x48, 0xbd, 0xd1, 0x5f, 0x00, 0x88, 0xe8, 0x03, 0x0c, 0xfd, + 0x45, 0xc8, 0x10, 0x7f, 0x89, 0x00, 0xcc, 0x63, 0xc2, 0x98, 0x98, 0x83, 0xf4, 0x6a, 0x5d, 0xc6, + 0xe1, 0x2f, 0x40, 0x91, 0x4a, 0x95, 0x9d, 0x8d, 0xda, 0x6a, 0x4d, 0x48, 0xce, 0x2d, 0x43, 0x96, + 0x3a, 0x01, 0x6f, 0x0d, 0xdf, 0x0d, 0xc2, 0x18, 0x7b, 0x64, 0x1c, 0x09, 0xae, 0xdd, 0xdb, 0x5a, + 0xa9, 0xc9, 0x42, 0x32, 0xbc, 0xbc, 0x2e, 0x14, 0xc3, 0x7d, 0xf1, 0x87, 0x13, 0x53, 0xdf, 0x4e, + 0x40, 0x21, 0xd4, 0xe7, 0xe2, 0x06, 0x45, 0x35, 0x0c, 0xeb, 0x96, 0xa2, 0x1a, 0xba, 0xea, 0xb2, + 0xa0, 0x00, 0x22, 0xaa, 0x62, 0xc9, 0xa8, 0x8b, 0xf6, 0xa1, 0x0c, 0xfe, 0xf5, 0x04, 0x08, 0xd1, + 0x16, 0x33, 0x32, 0xc0, 0xc4, 0x4f, 0x75, 0x80, 0xaf, 0x25, 0xa0, 0xd4, 0xdf, 0x57, 0x46, 0x86, + 0x77, 0xf6, 0xa7, 0x3a, 0xbc, 0xb7, 0x92, 0x30, 0xd1, 0xd7, 0x4d, 0x8e, 0x3a, 0xba, 0x4f, 0xc3, + 0x94, 0xde, 0x42, 0x5d, 0xdb, 0xf2, 0x90, 0xa9, 0x1d, 0x28, 0x06, 0xba, 0x89, 0x0c, 0x69, 0x8e, + 0x24, 0x8a, 0xc5, 0xfb, 0xf7, 0xab, 0x0b, 0x1b, 0x01, 0x6e, 0x13, 0xc3, 0x2a, 0xd3, 0x1b, 0x6b, + 0xb5, 0xad, 0x9d, 0xfa, 0x6e, 0x6d, 0x7b, 0xf5, 0x45, 0x65, 0x6f, 0xfb, 0xe7, 0xb7, 0xeb, 0xcf, + 0x6f, 0xcb, 0x82, 0x1e, 0x31, 0xfb, 0x00, 0xb7, 0xfa, 0x0e, 0x08, 0xd1, 0x41, 0x89, 0x27, 0x61, + 0xd8, 0xb0, 0x84, 0x31, 0x71, 0x1a, 0x26, 0xb7, 0xeb, 0x4a, 0x63, 0x63, 0xad, 0xa6, 0xd4, 0xae, + 0x5e, 0xad, 0xad, 0xee, 0x36, 0xe8, 0x0d, 0x84, 0x6f, 0xbd, 0xdb, 0xbf, 0xa9, 0x5f, 0x4d, 0xc1, + 0xf4, 0x90, 0x91, 0x88, 0x55, 0x76, 0x76, 0xa0, 0xc7, 0x99, 0xa7, 0x46, 0x19, 0xfd, 0x02, 0x2e, + 0xf9, 0x3b, 0xaa, 0xe3, 0xb1, 0xa3, 0xc6, 0xe3, 0x80, 0xbd, 0x64, 0x7a, 0x7a, 0x5b, 0x47, 0x0e, + 0xbb, 0xb0, 0xa1, 0x07, 0x8a, 0xc9, 0x40, 0x4e, 0xef, 0x6c, 0x7e, 0x06, 0x44, 0xdb, 0x72, 0x75, + 0x4f, 0xbf, 0x89, 0x14, 0xdd, 0xe4, 0xb7, 0x3b, 0xf8, 0x80, 0x91, 0x96, 0x05, 0xae, 0xd9, 0x30, + 0x3d, 0xdf, 0xda, 0x44, 0x1d, 0x35, 0x62, 0x8d, 0x13, 0x78, 0x4a, 0x16, 0xb8, 0xc6, 0xb7, 0x3e, + 0x0b, 0xc5, 0x96, 0xd5, 0xc3, 0x5d, 0x17, 0xb5, 0xc3, 0xf5, 0x22, 0x21, 0x17, 0xa8, 0xcc, 0x37, + 0x61, 0xfd, 0x74, 0x70, 0xad, 0x54, 0x94, 0x0b, 0x54, 0x46, 0x4d, 0x1e, 0x83, 0x49, 0xb5, 0xd3, + 0x71, 0x30, 0x39, 0x27, 0xa2, 0x27, 0x84, 0x92, 0x2f, 0x26, 0x86, 0xb3, 0xcf, 0x41, 0x8e, 0xfb, + 0x01, 0x97, 0x64, 0xec, 0x09, 0xc5, 0xa6, 0xc7, 0xde, 0xe4, 0x7c, 0x5e, 0xce, 0x99, 0x5c, 0x79, + 0x16, 0x8a, 0xba, 0xab, 0x04, 0xb7, 0xe4, 0xc9, 0x33, 0xc9, 0xf9, 0x9c, 0x5c, 0xd0, 0x5d, 0xff, + 0x86, 0x71, 0xee, 0x8d, 0x24, 0x94, 0xfa, 0x6f, 0xf9, 0xc5, 0x35, 0xc8, 0x19, 0x96, 0xa6, 0x92, + 0xd0, 0xa2, 0x9f, 0x98, 0xe6, 0x63, 0x3e, 0x0c, 0x2c, 0x6c, 0x32, 0x7b, 0xd9, 0x47, 0xce, 0xfe, + 0x6b, 0x02, 0x72, 0x5c, 0x2c, 0x9e, 0x80, 0xb4, 0xad, 0x7a, 0xfb, 0x84, 0x2e, 0xb3, 0x92, 0x14, + 0x12, 0x32, 0x79, 0xc6, 0x72, 0xd7, 0x56, 0x4d, 0x12, 0x02, 0x4c, 0x8e, 0x9f, 0xf1, 0xba, 0x1a, + 0x48, 0x6d, 0x91, 0xe3, 0x87, 0xd5, 0xed, 0x22, 0xd3, 0x73, 0xf9, 0xba, 0x32, 0xf9, 0x2a, 0x13, + 0x8b, 0x4f, 0xc2, 0x94, 0xe7, 0xa8, 0xba, 0xd1, 0x67, 0x9b, 0x26, 0xb6, 0x02, 0x57, 0xf8, 0xc6, + 0x15, 0x38, 0xc5, 0x79, 0x5b, 0xc8, 0x53, 0xb5, 0x7d, 0xd4, 0x0a, 0x40, 0x59, 0x72, 0xcd, 0x70, + 0x92, 0x19, 0xac, 0x31, 0x3d, 0xc7, 0xce, 0x7d, 0x2f, 0x01, 0x53, 0xfc, 0xc0, 0xd4, 0xf2, 0x9d, + 0xb5, 0x05, 0xa0, 0x9a, 0xa6, 0xe5, 0x85, 0xdd, 0x35, 0x18, 0xca, 0x03, 0xb8, 0x85, 0xaa, 0x0f, + 0x92, 0x43, 0x04, 0xb3, 0x5d, 0x80, 0x40, 0x73, 0xa4, 0xdb, 0x4e, 0x43, 0x81, 0x7d, 0xc2, 0x21, + 0xdf, 0x01, 0xe9, 0x11, 0x1b, 0xa8, 0x08, 0x9f, 0xac, 0xc4, 0x19, 0xc8, 0x34, 0x51, 0x47, 0x37, + 0xd9, 0xc5, 0x2c, 0x7d, 0xe0, 0x17, 0x21, 0x69, 0xff, 0x22, 0x64, 0xe5, 0x53, 0x30, 0xad, 0x59, + 0xdd, 0xe8, 0x70, 0x57, 0x84, 0xc8, 0x31, 0xdf, 0xbd, 0x96, 0x78, 0x09, 0x82, 0x16, 0xf3, 0xbd, + 0x44, 0xe2, 0x8b, 0xc9, 0xd4, 0xfa, 0xce, 0xca, 0x57, 0x92, 0xb3, 0xeb, 0x14, 0xba, 0xc3, 0x67, + 0x2a, 0xa3, 0xb6, 0x81, 0x34, 0x3c, 0x7a, 0xf8, 0xd2, 0x93, 0xf0, 0x54, 0x47, 0xf7, 0xf6, 0x7b, + 0xcd, 0x05, 0xcd, 0xea, 0x2e, 0x76, 0xac, 0x8e, 0x15, 0x7c, 0xfa, 0xc4, 0x4f, 0xe4, 0x81, 0xfc, + 0xc5, 0x3e, 0x7f, 0xe6, 0x7d, 0xe9, 0x6c, 0xec, 0xb7, 0xd2, 0xca, 0x36, 0x4c, 0x33, 0x63, 0x85, + 0x7c, 0x7f, 0xa1, 0xa7, 0x08, 0xf1, 0xbe, 0x77, 0x58, 0xd2, 0xd7, 0xde, 0x26, 0xe5, 0x5a, 0x9e, + 0x62, 0x50, 0xac, 0xa3, 0x07, 0x8d, 0x8a, 0x0c, 0x0f, 0xf4, 0xf1, 0xd1, 0xad, 0x89, 0x9c, 0x18, + 0xc6, 0xef, 0x30, 0xc6, 0xe9, 0x10, 0x63, 0x83, 0x41, 0x2b, 0xab, 0x30, 0x71, 0x1c, 0xae, 0x7f, + 0x66, 0x5c, 0x45, 0x14, 0x26, 0x59, 0x87, 0x49, 0x42, 0xa2, 0xf5, 0x5c, 0xcf, 0xea, 0x92, 0xbc, + 0x77, 0x7f, 0x9a, 0x7f, 0x79, 0x9b, 0xee, 0x95, 0x12, 0x86, 0xad, 0xfa, 0xa8, 0x4a, 0x05, 0xc8, + 0x27, 0xa7, 0x16, 0xd2, 0x8c, 0x18, 0x86, 0x37, 0xd9, 0x40, 0x7c, 0xfb, 0xca, 0x27, 0x61, 0x06, + 0xff, 0x4d, 0xd2, 0x52, 0x78, 0x24, 0xf1, 0x17, 0x5e, 0xd2, 0xf7, 0x5e, 0xa1, 0xdb, 0x71, 0xda, + 0x27, 0x08, 0x8d, 0x29, 0xb4, 0x8a, 0x1d, 0xe4, 0x79, 0xc8, 0x71, 0x15, 0xd5, 0x18, 0x36, 0xbc, + 0xd0, 0x8d, 0x81, 0xf4, 0xb9, 0x77, 0xfa, 0x57, 0x71, 0x9d, 0x22, 0xab, 0x86, 0x51, 0xd9, 0x83, + 0x93, 0x43, 0xa2, 0x62, 0x04, 0xce, 0x57, 0x19, 0xe7, 0xcc, 0x40, 0x64, 0x60, 0xda, 0x1d, 0xe0, + 0x72, 0x7f, 0x2d, 0x47, 0xe0, 0xfc, 0x23, 0xc6, 0x29, 0x32, 0x2c, 0x5f, 0x52, 0xcc, 0xf8, 0x1c, + 0x4c, 0xdd, 0x44, 0x4e, 0xd3, 0x72, 0xd9, 0x2d, 0xcd, 0x08, 0x74, 0xaf, 0x31, 0xba, 0x49, 0x06, + 0x24, 0xd7, 0x36, 0x98, 0xeb, 0x32, 0xe4, 0xda, 0xaa, 0x86, 0x46, 0xa0, 0xf8, 0x3c, 0xa3, 0x18, + 0xc7, 0xf6, 0x18, 0x5a, 0x85, 0x62, 0xc7, 0x62, 0x95, 0x29, 0x1e, 0xfe, 0x3a, 0x83, 0x17, 0x38, + 0x86, 0x51, 0xd8, 0x96, 0xdd, 0x33, 0x70, 0xd9, 0x8a, 0xa7, 0xf8, 0x63, 0x4e, 0xc1, 0x31, 0x8c, + 0xe2, 0x18, 0x6e, 0xfd, 0x13, 0x4e, 0xe1, 0x86, 0xfc, 0xf9, 0x2c, 0x14, 0x2c, 0xd3, 0x38, 0xb0, + 0xcc, 0x51, 0x06, 0xf1, 0x05, 0xc6, 0x00, 0x0c, 0x82, 0x09, 0xae, 0x40, 0x7e, 0xd4, 0x85, 0xf8, + 0xb3, 0x77, 0xf8, 0xf6, 0xe0, 0x2b, 0xb0, 0x0e, 0x93, 0x3c, 0x41, 0xe9, 0x96, 0x39, 0x02, 0xc5, + 0x97, 0x18, 0x45, 0x29, 0x04, 0x63, 0xd3, 0xf0, 0x90, 0xeb, 0x75, 0xd0, 0x28, 0x24, 0x6f, 0xf0, + 0x69, 0x30, 0x08, 0x73, 0x65, 0x13, 0x99, 0xda, 0xfe, 0x68, 0x0c, 0x5f, 0xe6, 0xae, 0xe4, 0x18, + 0x4c, 0xb1, 0x0a, 0x13, 0x5d, 0xd5, 0x71, 0xf7, 0x55, 0x63, 0xa4, 0xe5, 0xf8, 0x73, 0xc6, 0x51, + 0xf4, 0x41, 0xcc, 0x23, 0x3d, 0xf3, 0x38, 0x34, 0x5f, 0xe1, 0x1e, 0x09, 0xc1, 0xd8, 0xd6, 0x73, + 0x3d, 0x72, 0xa5, 0x75, 0x1c, 0xb6, 0xbf, 0xe0, 0x5b, 0x8f, 0x62, 0xb7, 0xc2, 0x8c, 0x57, 0x20, + 0xef, 0xea, 0xb7, 0x47, 0xa2, 0xf9, 0x4b, 0xbe, 0xd2, 0x04, 0x80, 0xc1, 0x2f, 0xc2, 0xa9, 0xa1, + 0x65, 0x62, 0x04, 0xb2, 0xbf, 0x62, 0x64, 0x27, 0x86, 0x94, 0x0a, 0x96, 0x12, 0x8e, 0x4b, 0xf9, + 0xd7, 0x3c, 0x25, 0xa0, 0x08, 0xd7, 0x0e, 0x3e, 0x2b, 0xb8, 0x6a, 0xfb, 0x78, 0x5e, 0xfb, 0x1b, + 0xee, 0x35, 0x8a, 0xed, 0xf3, 0xda, 0x2e, 0x9c, 0x60, 0x8c, 0xc7, 0x5b, 0xd7, 0xaf, 0xf2, 0xc4, + 0x4a, 0xd1, 0x7b, 0xfd, 0xab, 0xfb, 0x29, 0x98, 0xf5, 0xdd, 0xc9, 0x9b, 0x52, 0x57, 0xe9, 0xaa, + 0xf6, 0x08, 0xcc, 0x5f, 0x63, 0xcc, 0x3c, 0xe3, 0xfb, 0x5d, 0xad, 0xbb, 0xa5, 0xda, 0x98, 0xfc, + 0x05, 0x90, 0x38, 0x79, 0xcf, 0x74, 0x90, 0x66, 0x75, 0x4c, 0xfd, 0x36, 0x6a, 0x8d, 0x40, 0xfd, + 0xb7, 0x91, 0xa5, 0xda, 0x0b, 0xc1, 0x31, 0xf3, 0x06, 0x08, 0x7e, 0xaf, 0xa2, 0xe8, 0x5d, 0xdb, + 0x72, 0xbc, 0x18, 0xc6, 0xaf, 0xf3, 0x95, 0xf2, 0x71, 0x1b, 0x04, 0x56, 0xa9, 0x41, 0x89, 0x3c, + 0x8e, 0x1a, 0x92, 0x7f, 0xc7, 0x88, 0x26, 0x02, 0x14, 0x4b, 0x1c, 0x9a, 0xd5, 0xb5, 0x55, 0x67, + 0x94, 0xfc, 0xf7, 0xf7, 0x3c, 0x71, 0x30, 0x08, 0x4b, 0x1c, 0xde, 0x81, 0x8d, 0x70, 0xb5, 0x1f, + 0x81, 0xe1, 0x1b, 0x3c, 0x71, 0x70, 0x0c, 0xa3, 0xe0, 0x0d, 0xc3, 0x08, 0x14, 0xff, 0xc0, 0x29, + 0x38, 0x06, 0x53, 0x7c, 0x22, 0x28, 0xb4, 0x0e, 0xea, 0xe8, 0xae, 0xe7, 0xd0, 0x56, 0xf8, 0xfe, + 0x54, 0xdf, 0x7c, 0xa7, 0xbf, 0x09, 0x93, 0x43, 0x50, 0x9c, 0x89, 0xd8, 0x15, 0x2a, 0x39, 0x29, + 0xc5, 0x0f, 0xec, 0x5b, 0x3c, 0x13, 0x85, 0x60, 0x78, 0x6c, 0xa1, 0x0e, 0x11, 0xbb, 0x5d, 0xc3, + 0xe7, 0x83, 0x11, 0xe8, 0xbe, 0x1d, 0x19, 0x5c, 0x83, 0x63, 0x31, 0x67, 0xa8, 0xff, 0xe9, 0x99, + 0x37, 0xd0, 0xc1, 0x48, 0xd1, 0xf9, 0x8f, 0x91, 0xfe, 0x67, 0x8f, 0x22, 0x69, 0x0e, 0x99, 0x8c, + 0xf4, 0x53, 0x62, 0xdc, 0x8f, 0x75, 0xa4, 0x5f, 0xba, 0xc7, 0xe6, 0xdb, 0xdf, 0x4e, 0x55, 0x36, + 0x71, 0x90, 0xf7, 0x37, 0x3d, 0xf1, 0x64, 0xaf, 0xdc, 0xf3, 0xe3, 0xbc, 0xaf, 0xe7, 0xa9, 0x5c, + 0x85, 0x89, 0xbe, 0x86, 0x27, 0x9e, 0xea, 0x97, 0x19, 0x55, 0x31, 0xdc, 0xef, 0x54, 0x96, 0x21, + 0x8d, 0x9b, 0x97, 0x78, 0xf8, 0xaf, 0x30, 0x38, 0x31, 0xaf, 0x7c, 0x0c, 0x72, 0xbc, 0x69, 0x89, + 0x87, 0xfe, 0x2a, 0x83, 0xfa, 0x10, 0x0c, 0xe7, 0x0d, 0x4b, 0x3c, 0xfc, 0xd7, 0x38, 0x9c, 0x43, + 0x30, 0x7c, 0x74, 0x17, 0xfe, 0xd3, 0xaf, 0xa7, 0x59, 0xd1, 0xe1, 0xbe, 0xbb, 0x02, 0xe3, 0xac, + 0x53, 0x89, 0x47, 0x7f, 0x86, 0xbd, 0x9c, 0x23, 0x2a, 0x17, 0x21, 0x33, 0xa2, 0xc3, 0x7f, 0x83, + 0x41, 0xa9, 0x7d, 0x65, 0x15, 0x0a, 0xa1, 0xee, 0x24, 0x1e, 0xfe, 0x9b, 0x0c, 0x1e, 0x46, 0xe1, + 0xa1, 0xb3, 0xee, 0x24, 0x9e, 0xe0, 0xb7, 0xf8, 0xd0, 0x19, 0x02, 0xbb, 0x8d, 0x37, 0x26, 0xf1, + 0xe8, 0xdf, 0xe6, 0x5e, 0xe7, 0x90, 0xca, 0xb3, 0x90, 0xf7, 0x8b, 0x4d, 0x3c, 0xfe, 0x77, 0x18, + 0x3e, 0xc0, 0x60, 0x0f, 0x84, 0x8a, 0x5d, 0x3c, 0xc5, 0xef, 0x72, 0x0f, 0x84, 0x50, 0x78, 0x1b, + 0x45, 0x1b, 0x98, 0x78, 0xa6, 0xdf, 0xe3, 0xdb, 0x28, 0xd2, 0xbf, 0xe0, 0xd5, 0x24, 0x39, 0x3f, + 0x9e, 0xe2, 0xf7, 0xf9, 0x6a, 0x12, 0x7b, 0x3c, 0x8c, 0x68, 0x47, 0x10, 0xcf, 0xf1, 0x87, 0x7c, + 0x18, 0x91, 0x86, 0xa0, 0xb2, 0x03, 0xe2, 0x60, 0x37, 0x10, 0xcf, 0xf7, 0x59, 0xc6, 0x37, 0x35, + 0xd0, 0x0c, 0x54, 0x9e, 0x87, 0x13, 0xc3, 0x3b, 0x81, 0x78, 0xd6, 0xcf, 0xdd, 0x8b, 0x9c, 0xdd, + 0xc2, 0x8d, 0x40, 0x65, 0x37, 0x28, 0x29, 0xe1, 0x2e, 0x20, 0x9e, 0xf6, 0xd5, 0x7b, 0xfd, 0x89, + 0x3b, 0xdc, 0x04, 0x54, 0xaa, 0x00, 0x41, 0x01, 0x8e, 0xe7, 0x7a, 0x8d, 0x71, 0x85, 0x40, 0x78, + 0x6b, 0xb0, 0xfa, 0x1b, 0x8f, 0xff, 0x3c, 0xdf, 0x1a, 0x0c, 0x81, 0xb7, 0x06, 0x2f, 0xbd, 0xf1, + 0xe8, 0xd7, 0xf9, 0xd6, 0xe0, 0x10, 0x1c, 0xd9, 0xa1, 0xea, 0x16, 0xcf, 0xf0, 0x05, 0x1e, 0xd9, + 0x21, 0x54, 0x65, 0x1b, 0xa6, 0x06, 0x0a, 0x62, 0x3c, 0xd5, 0x17, 0x19, 0x95, 0x10, 0xad, 0x87, + 0xe1, 0xe2, 0xc5, 0x8a, 0x61, 0x3c, 0xdb, 0x9f, 0x46, 0x8a, 0x17, 0xab, 0x85, 0x95, 0x2b, 0x90, + 0x33, 0x7b, 0x86, 0x81, 0x37, 0x8f, 0x78, 0xff, 0x1f, 0xd8, 0x49, 0xff, 0xf1, 0x3e, 0xf3, 0x0e, + 0x07, 0x54, 0x96, 0x21, 0x83, 0xba, 0x4d, 0xd4, 0x8a, 0x43, 0xfe, 0xe7, 0xfb, 0x3c, 0x61, 0x62, + 0xeb, 0xca, 0xb3, 0x00, 0xf4, 0x6a, 0x84, 0x7c, 0xf6, 0x8b, 0xc1, 0xfe, 0xd7, 0xfb, 0xec, 0xa7, + 0x2f, 0x01, 0x24, 0x20, 0xa0, 0x3f, 0xa4, 0xb9, 0x3f, 0xc1, 0x3b, 0xfd, 0x04, 0x64, 0x45, 0x2e, + 0xc3, 0xf8, 0x75, 0xd7, 0x32, 0x3d, 0xb5, 0x13, 0x87, 0xfe, 0x6f, 0x86, 0xe6, 0xf6, 0xd8, 0x61, + 0x5d, 0xcb, 0x41, 0x9e, 0xda, 0x71, 0xe3, 0xb0, 0xff, 0xc3, 0xb0, 0x3e, 0x00, 0x83, 0x35, 0xd5, + 0xf5, 0x46, 0x99, 0xf7, 0x8f, 0x38, 0x98, 0x03, 0xf0, 0xa0, 0xf1, 0xdf, 0x37, 0xd0, 0x41, 0x1c, + 0xf6, 0x5d, 0x3e, 0x68, 0x66, 0x5f, 0xf9, 0x18, 0xe4, 0xf1, 0x9f, 0xf4, 0xf7, 0x6c, 0x31, 0xe0, + 0xff, 0x65, 0xe0, 0x00, 0x81, 0xdf, 0xec, 0x7a, 0x2d, 0x4f, 0x8f, 0x77, 0xf6, 0xff, 0xb1, 0x95, + 0xe6, 0xf6, 0x95, 0x2a, 0x14, 0x5c, 0xaf, 0xd5, 0xea, 0xb1, 0xfe, 0x34, 0x06, 0xfe, 0xff, 0xef, + 0xfb, 0x57, 0x16, 0x3e, 0x06, 0xaf, 0xf6, 0xad, 0x1b, 0x9e, 0x6d, 0x91, 0xcf, 0x1c, 0x71, 0x0c, + 0xf7, 0x18, 0x43, 0x08, 0xb2, 0x52, 0x1b, 0x7e, 0x7d, 0x0b, 0xeb, 0xd6, 0xba, 0x45, 0x2f, 0x6e, + 0x5f, 0x9a, 0x8b, 0xbf, 0x81, 0x85, 0x3f, 0xc8, 0x80, 0xa4, 0x59, 0xdd, 0xa6, 0xe5, 0x2e, 0x9a, + 0x48, 0xf7, 0xf6, 0x91, 0xb3, 0x68, 0x99, 0x8c, 0x4f, 0x4c, 0x59, 0x26, 0x9a, 0x3d, 0xde, 0x3d, + 0xee, 0xdc, 0x29, 0xc8, 0x34, 0x7a, 0xcd, 0xe6, 0x81, 0x28, 0x40, 0xca, 0xed, 0x35, 0xd9, 0x6f, + 0xa2, 0xf0, 0x9f, 0x73, 0xdf, 0x4f, 0x41, 0xa1, 0xa1, 0x76, 0x6d, 0x03, 0xd5, 0x4d, 0x54, 0x6f, + 0x8b, 0x12, 0x64, 0xc9, 0x34, 0x9f, 0x21, 0x46, 0x89, 0x6b, 0x63, 0x32, 0x7b, 0xf6, 0x35, 0x4b, + 0xe4, 0x7e, 0x3b, 0xe9, 0x6b, 0x96, 0x7c, 0xcd, 0x39, 0x7a, 0xbd, 0xed, 0x6b, 0xce, 0xf9, 0x9a, + 0xf3, 0xe4, 0x92, 0x3b, 0xe5, 0x6b, 0xce, 0xfb, 0x9a, 0x65, 0xf2, 0x11, 0x67, 0xc2, 0xd7, 0x2c, + 0xfb, 0x9a, 0x0b, 0xe4, 0xb3, 0x4d, 0xda, 0xd7, 0x5c, 0xf0, 0x35, 0x17, 0xc9, 0xd7, 0x9a, 0x29, + 0x5f, 0x73, 0xd1, 0xd7, 0x5c, 0x22, 0x5f, 0x68, 0x44, 0x5f, 0x73, 0xc9, 0xd7, 0x5c, 0x26, 0x3f, + 0x7d, 0x1a, 0xf7, 0x35, 0x97, 0xc5, 0x59, 0x18, 0xa7, 0x33, 0x7b, 0x9a, 0x7c, 0xc6, 0x9f, 0xbc, + 0x36, 0x26, 0x73, 0x41, 0xa0, 0x7b, 0x86, 0xfc, 0xbc, 0x29, 0x1b, 0xe8, 0x9e, 0x09, 0x74, 0x4b, + 0xe4, 0x7f, 0x59, 0x08, 0x81, 0x6e, 0x29, 0xd0, 0x9d, 0x93, 0x26, 0x70, 0x74, 0x04, 0xba, 0x73, + 0x81, 0xee, 0xbc, 0x54, 0xc2, 0xfe, 0x0f, 0x74, 0xe7, 0x03, 0xdd, 0xb2, 0x34, 0x79, 0x26, 0x31, + 0x5f, 0x0c, 0x74, 0xcb, 0xe2, 0x53, 0x50, 0x70, 0x7b, 0x4d, 0x85, 0xe5, 0x79, 0xf2, 0x33, 0xaa, + 0xc2, 0x12, 0x2c, 0xe0, 0x88, 0x20, 0x8b, 0x7a, 0x6d, 0x4c, 0x06, 0xb7, 0xd7, 0x64, 0x69, 0x78, + 0xa5, 0x08, 0xe4, 0xf6, 0x49, 0x21, 0xbf, 0x7e, 0x5e, 0x59, 0x7b, 0xf3, 0x6e, 0x79, 0xec, 0xbb, + 0x77, 0xcb, 0x63, 0xff, 0x76, 0xb7, 0x3c, 0xf6, 0xd6, 0xdd, 0x72, 0xe2, 0xdd, 0xbb, 0xe5, 0xc4, + 0x7b, 0x77, 0xcb, 0x89, 0x3b, 0x87, 0xe5, 0xc4, 0x97, 0x0f, 0xcb, 0x89, 0xaf, 0x1e, 0x96, 0x13, + 0xdf, 0x3c, 0x2c, 0x27, 0xde, 0x3c, 0x2c, 0x8f, 0x7d, 0xf7, 0xb0, 0x3c, 0xf6, 0xd6, 0x61, 0x39, + 0xf1, 0xc3, 0xc3, 0xf2, 0xd8, 0xbb, 0x87, 0xe5, 0xc4, 0x7b, 0x87, 0xe5, 0xb1, 0x3b, 0x3f, 0x28, + 0x8f, 0x35, 0xb3, 0x24, 0x8c, 0xce, 0xfd, 0x38, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x57, 0xc6, 0xb3, + 0x34, 0x35, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2242,6 +2247,9 @@ return dAtA } func (m *Subby) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Sub) @@ -2255,6 +2263,9 @@ } func (m *SampleOneOf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TestOneof != nil { @@ -2267,84 +2278,126 @@ } func (m *SampleOneOf_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *SampleOneOf_Field4) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field4)) return n } func (m *SampleOneOf_Field5) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field5)) return n } func (m *SampleOneOf_Field6) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field6)) return n } func (m *SampleOneOf_Field7) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field7)) return n } func (m *SampleOneOf_Field8) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field8)) return n } func (m *SampleOneOf_Field9) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field10) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field11) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field12) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field13) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *SampleOneOf_Field14) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field14) @@ -2352,6 +2405,9 @@ return n } func (m *SampleOneOf_Field15) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field15 != nil { @@ -2361,6 +2417,9 @@ return n } func (m *SampleOneOf_SubMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/combos/unmarshaler/one.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/combos/unmarshaler/one.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/combos/unmarshaler/one.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/combos/unmarshaler/one.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -584,257 +584,263 @@ func OneDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3998 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5d, 0x70, 0xe3, 0xd6, - 0x75, 0x16, 0x7f, 0x45, 0x1e, 0x52, 0x14, 0x74, 0x25, 0xef, 0x72, 0x65, 0x9b, 0xab, 0x95, 0xed, - 0x58, 0xb6, 0x6b, 0xc9, 0xd6, 0xae, 0xf6, 0x87, 0xdb, 0xc4, 0xa5, 0x24, 0xae, 0x56, 0xae, 0x24, - 0x2a, 0xa0, 0x14, 0xff, 0x64, 0x3a, 0x18, 0x10, 0xbc, 0xa4, 0xb0, 0x0b, 0x02, 0x08, 0x00, 0xee, - 0x5a, 0x3b, 0x7d, 0xd8, 0x8e, 0xfb, 0x33, 0x99, 0x4e, 0xff, 0x3b, 0xd3, 0xc4, 0x75, 0xdc, 0xa6, - 0x33, 0xa9, 0xd3, 0xf4, 0x2f, 0x69, 0xda, 0x34, 0xe9, 0x53, 0x5f, 0xd2, 0xfa, 0xa9, 0x93, 0xbc, - 0xf5, 0x21, 0x0f, 0x5e, 0xc5, 0x33, 0x4d, 0x5b, 0xb7, 0x71, 0x5b, 0x3f, 0x78, 0xc6, 0x2f, 0x9d, - 0xfb, 0x07, 0x80, 0x3f, 0x5a, 0x50, 0x99, 0xb1, 0xf3, 0x24, 0xe1, 0x9c, 0xf3, 0x7d, 0xb8, 0xf7, - 0xdc, 0x73, 0xcf, 0x39, 0xf7, 0x82, 0xf0, 0xe3, 0x2b, 0x30, 0xd7, 0xb6, 0xac, 0xb6, 0x81, 0x97, - 0x6c, 0xc7, 0xf2, 0xac, 0x46, 0xb7, 0xb5, 0xd4, 0xc4, 0xae, 0xe6, 0xe8, 0xb6, 0x67, 0x39, 0x8b, - 0x54, 0x86, 0x26, 0x99, 0xc5, 0xa2, 0xb0, 0x98, 0xdf, 0x86, 0xa9, 0x6b, 0xba, 0x81, 0xd7, 0x7d, - 0xc3, 0x3a, 0xf6, 0xd0, 0x65, 0x48, 0xb6, 0x74, 0x03, 0x17, 0x63, 0x73, 0x89, 0x85, 0xdc, 0xf2, - 0xa3, 0x8b, 0x7d, 0xa0, 0xc5, 0x5e, 0xc4, 0x2e, 0x11, 0xcb, 0x14, 0x31, 0xff, 0x4e, 0x12, 0xa6, - 0x87, 0x68, 0x11, 0x82, 0xa4, 0xa9, 0x76, 0x08, 0x63, 0x6c, 0x21, 0x2b, 0xd3, 0xff, 0x51, 0x11, - 0xc6, 0x6d, 0x55, 0xbb, 0xa9, 0xb6, 0x71, 0x31, 0x4e, 0xc5, 0xe2, 0x11, 0x95, 0x00, 0x9a, 0xd8, - 0xc6, 0x66, 0x13, 0x9b, 0xda, 0x61, 0x31, 0x31, 0x97, 0x58, 0xc8, 0xca, 0x21, 0x09, 0x7a, 0x0a, - 0xa6, 0xec, 0x6e, 0xc3, 0xd0, 0x35, 0x25, 0x64, 0x06, 0x73, 0x89, 0x85, 0x94, 0x2c, 0x31, 0xc5, - 0x7a, 0x60, 0xfc, 0x38, 0x4c, 0xde, 0xc6, 0xea, 0xcd, 0xb0, 0x69, 0x8e, 0x9a, 0x16, 0x88, 0x38, - 0x64, 0xb8, 0x06, 0xf9, 0x0e, 0x76, 0x5d, 0xb5, 0x8d, 0x15, 0xef, 0xd0, 0xc6, 0xc5, 0x24, 0x9d, - 0xfd, 0xdc, 0xc0, 0xec, 0xfb, 0x67, 0x9e, 0xe3, 0xa8, 0xbd, 0x43, 0x1b, 0xa3, 0x0a, 0x64, 0xb1, - 0xd9, 0xed, 0x30, 0x86, 0xd4, 0x31, 0xfe, 0xab, 0x9a, 0xdd, 0x4e, 0x3f, 0x4b, 0x86, 0xc0, 0x38, - 0xc5, 0xb8, 0x8b, 0x9d, 0x5b, 0xba, 0x86, 0x8b, 0x69, 0x4a, 0xf0, 0xf8, 0x00, 0x41, 0x9d, 0xe9, - 0xfb, 0x39, 0x04, 0x0e, 0xad, 0x41, 0x16, 0xbf, 0xe2, 0x61, 0xd3, 0xd5, 0x2d, 0xb3, 0x38, 0x4e, - 0x49, 0x1e, 0x1b, 0xb2, 0x8a, 0xd8, 0x68, 0xf6, 0x53, 0x04, 0x38, 0x74, 0x11, 0xc6, 0x2d, 0xdb, - 0xd3, 0x2d, 0xd3, 0x2d, 0x66, 0xe6, 0x62, 0x0b, 0xb9, 0xe5, 0x87, 0x86, 0x06, 0x42, 0x8d, 0xd9, - 0xc8, 0xc2, 0x18, 0x6d, 0x82, 0xe4, 0x5a, 0x5d, 0x47, 0xc3, 0x8a, 0x66, 0x35, 0xb1, 0xa2, 0x9b, - 0x2d, 0xab, 0x98, 0xa5, 0x04, 0x67, 0x07, 0x27, 0x42, 0x0d, 0xd7, 0xac, 0x26, 0xde, 0x34, 0x5b, - 0x96, 0x5c, 0x70, 0x7b, 0x9e, 0xd1, 0x29, 0x48, 0xbb, 0x87, 0xa6, 0xa7, 0xbe, 0x52, 0xcc, 0xd3, - 0x08, 0xe1, 0x4f, 0xf3, 0xdf, 0x49, 0xc3, 0xe4, 0x28, 0x21, 0x76, 0x15, 0x52, 0x2d, 0x32, 0xcb, - 0x62, 0xfc, 0x24, 0x3e, 0x60, 0x98, 0x5e, 0x27, 0xa6, 0x7f, 0x42, 0x27, 0x56, 0x20, 0x67, 0x62, - 0xd7, 0xc3, 0x4d, 0x16, 0x11, 0x89, 0x11, 0x63, 0x0a, 0x18, 0x68, 0x30, 0xa4, 0x92, 0x3f, 0x51, - 0x48, 0xbd, 0x08, 0x93, 0xfe, 0x90, 0x14, 0x47, 0x35, 0xdb, 0x22, 0x36, 0x97, 0xa2, 0x46, 0xb2, - 0x58, 0x15, 0x38, 0x99, 0xc0, 0xe4, 0x02, 0xee, 0x79, 0x46, 0xeb, 0x00, 0x96, 0x89, 0xad, 0x96, - 0xd2, 0xc4, 0x9a, 0x51, 0xcc, 0x1c, 0xe3, 0xa5, 0x1a, 0x31, 0x19, 0xf0, 0x92, 0xc5, 0xa4, 0x9a, - 0x81, 0xae, 0x04, 0xa1, 0x36, 0x7e, 0x4c, 0xa4, 0x6c, 0xb3, 0x4d, 0x36, 0x10, 0x6d, 0xfb, 0x50, - 0x70, 0x30, 0x89, 0x7b, 0xdc, 0xe4, 0x33, 0xcb, 0xd2, 0x41, 0x2c, 0x46, 0xce, 0x4c, 0xe6, 0x30, - 0x36, 0xb1, 0x09, 0x27, 0xfc, 0x88, 0x1e, 0x01, 0x5f, 0xa0, 0xd0, 0xb0, 0x02, 0x9a, 0x85, 0xf2, - 0x42, 0xb8, 0xa3, 0x76, 0xf0, 0xec, 0x1d, 0x28, 0xf4, 0xba, 0x07, 0xcd, 0x40, 0xca, 0xf5, 0x54, - 0xc7, 0xa3, 0x51, 0x98, 0x92, 0xd9, 0x03, 0x92, 0x20, 0x81, 0xcd, 0x26, 0xcd, 0x72, 0x29, 0x99, - 0xfc, 0x8b, 0x7e, 0x2e, 0x98, 0x70, 0x82, 0x4e, 0xf8, 0x13, 0x83, 0x2b, 0xda, 0xc3, 0xdc, 0x3f, - 0xef, 0xd9, 0x4b, 0x30, 0xd1, 0x33, 0x81, 0x51, 0x5f, 0x3d, 0xff, 0x8b, 0xf0, 0xc0, 0x50, 0x6a, - 0xf4, 0x22, 0xcc, 0x74, 0x4d, 0xdd, 0xf4, 0xb0, 0x63, 0x3b, 0x98, 0x44, 0x2c, 0x7b, 0x55, 0xf1, - 0xdf, 0xc6, 0x8f, 0x89, 0xb9, 0xfd, 0xb0, 0x35, 0x63, 0x91, 0xa7, 0xbb, 0x83, 0xc2, 0x27, 0xb3, - 0x99, 0x1f, 0x8d, 0x4b, 0x77, 0xef, 0xde, 0xbd, 0x1b, 0x9f, 0xff, 0x42, 0x1a, 0x66, 0x86, 0xed, - 0x99, 0xa1, 0xdb, 0xf7, 0x14, 0xa4, 0xcd, 0x6e, 0xa7, 0x81, 0x1d, 0xea, 0xa4, 0x94, 0xcc, 0x9f, - 0x50, 0x05, 0x52, 0x86, 0xda, 0xc0, 0x46, 0x31, 0x39, 0x17, 0x5b, 0x28, 0x2c, 0x3f, 0x35, 0xd2, - 0xae, 0x5c, 0xdc, 0x22, 0x10, 0x99, 0x21, 0xd1, 0xa7, 0x20, 0xc9, 0x53, 0x34, 0x61, 0x78, 0x72, - 0x34, 0x06, 0xb2, 0x97, 0x64, 0x8a, 0x43, 0x0f, 0x42, 0x96, 0xfc, 0x65, 0xb1, 0x91, 0xa6, 0x63, - 0xce, 0x10, 0x01, 0x89, 0x0b, 0x34, 0x0b, 0x19, 0xba, 0x4d, 0x9a, 0x58, 0x94, 0x36, 0xff, 0x99, - 0x04, 0x56, 0x13, 0xb7, 0xd4, 0xae, 0xe1, 0x29, 0xb7, 0x54, 0xa3, 0x8b, 0x69, 0xc0, 0x67, 0xe5, - 0x3c, 0x17, 0x7e, 0x86, 0xc8, 0xd0, 0x59, 0xc8, 0xb1, 0x5d, 0xa5, 0x9b, 0x4d, 0xfc, 0x0a, 0xcd, - 0x9e, 0x29, 0x99, 0x6d, 0xb4, 0x4d, 0x22, 0x21, 0xaf, 0xbf, 0xe1, 0x5a, 0xa6, 0x08, 0x4d, 0xfa, - 0x0a, 0x22, 0xa0, 0xaf, 0xbf, 0xd4, 0x9f, 0xb8, 0x1f, 0x1e, 0x3e, 0xbd, 0xfe, 0x98, 0x9a, 0xff, - 0x56, 0x1c, 0x92, 0x34, 0x5f, 0x4c, 0x42, 0x6e, 0xef, 0xa5, 0xdd, 0xaa, 0xb2, 0x5e, 0xdb, 0x5f, - 0xdd, 0xaa, 0x4a, 0x31, 0x54, 0x00, 0xa0, 0x82, 0x6b, 0x5b, 0xb5, 0xca, 0x9e, 0x14, 0xf7, 0x9f, - 0x37, 0x77, 0xf6, 0x2e, 0x5e, 0x90, 0x12, 0x3e, 0x60, 0x9f, 0x09, 0x92, 0x61, 0x83, 0xf3, 0xcb, - 0x52, 0x0a, 0x49, 0x90, 0x67, 0x04, 0x9b, 0x2f, 0x56, 0xd7, 0x2f, 0x5e, 0x90, 0xd2, 0xbd, 0x92, - 0xf3, 0xcb, 0xd2, 0x38, 0x9a, 0x80, 0x2c, 0x95, 0xac, 0xd6, 0x6a, 0x5b, 0x52, 0xc6, 0xe7, 0xac, - 0xef, 0xc9, 0x9b, 0x3b, 0x1b, 0x52, 0xd6, 0xe7, 0xdc, 0x90, 0x6b, 0xfb, 0xbb, 0x12, 0xf8, 0x0c, - 0xdb, 0xd5, 0x7a, 0xbd, 0xb2, 0x51, 0x95, 0x72, 0xbe, 0xc5, 0xea, 0x4b, 0x7b, 0xd5, 0xba, 0x94, - 0xef, 0x19, 0xd6, 0xf9, 0x65, 0x69, 0xc2, 0x7f, 0x45, 0x75, 0x67, 0x7f, 0x5b, 0x2a, 0xa0, 0x29, - 0x98, 0x60, 0xaf, 0x10, 0x83, 0x98, 0xec, 0x13, 0x5d, 0xbc, 0x20, 0x49, 0xc1, 0x40, 0x18, 0xcb, - 0x54, 0x8f, 0xe0, 0xe2, 0x05, 0x09, 0xcd, 0xaf, 0x41, 0x8a, 0x46, 0x17, 0x42, 0x50, 0xd8, 0xaa, - 0xac, 0x56, 0xb7, 0x94, 0xda, 0xee, 0xde, 0x66, 0x6d, 0xa7, 0xb2, 0x25, 0xc5, 0x02, 0x99, 0x5c, - 0xfd, 0xf4, 0xfe, 0xa6, 0x5c, 0x5d, 0x97, 0xe2, 0x61, 0xd9, 0x6e, 0xb5, 0xb2, 0x57, 0x5d, 0x97, - 0x12, 0xf3, 0x1a, 0xcc, 0x0c, 0xcb, 0x93, 0x43, 0x77, 0x46, 0x68, 0x89, 0xe3, 0xc7, 0x2c, 0x31, - 0xe5, 0x1a, 0x58, 0xe2, 0x1f, 0xc6, 0x61, 0x7a, 0x48, 0xad, 0x18, 0xfa, 0x92, 0xe7, 0x20, 0xc5, - 0x42, 0x94, 0x55, 0xcf, 0x27, 0x86, 0x16, 0x1d, 0x1a, 0xb0, 0x03, 0x15, 0x94, 0xe2, 0xc2, 0x1d, - 0x44, 0xe2, 0x98, 0x0e, 0x82, 0x50, 0x0c, 0xe4, 0xf4, 0x5f, 0x18, 0xc8, 0xe9, 0xac, 0xec, 0x5d, - 0x1c, 0xa5, 0xec, 0x51, 0xd9, 0xc9, 0x72, 0x7b, 0x6a, 0x48, 0x6e, 0xbf, 0x0a, 0x53, 0x03, 0x44, - 0x23, 0xe7, 0xd8, 0x57, 0x63, 0x50, 0x3c, 0xce, 0x39, 0x11, 0x99, 0x2e, 0xde, 0x93, 0xe9, 0xae, - 0xf6, 0x7b, 0xf0, 0xdc, 0xf1, 0x8b, 0x30, 0xb0, 0xd6, 0x6f, 0xc6, 0xe0, 0xd4, 0xf0, 0x4e, 0x71, - 0xe8, 0x18, 0x3e, 0x05, 0xe9, 0x0e, 0xf6, 0x0e, 0x2c, 0xd1, 0x2d, 0x7d, 0x62, 0x48, 0x0d, 0x26, - 0xea, 0xfe, 0xc5, 0xe6, 0xa8, 0x70, 0x11, 0x4f, 0x1c, 0xd7, 0xee, 0xb1, 0xd1, 0x0c, 0x8c, 0xf4, - 0xf3, 0x71, 0x78, 0x60, 0x28, 0xf9, 0xd0, 0x81, 0x3e, 0x0c, 0xa0, 0x9b, 0x76, 0xd7, 0x63, 0x1d, - 0x11, 0x4b, 0xb0, 0x59, 0x2a, 0xa1, 0xc9, 0x8b, 0x24, 0xcf, 0xae, 0xe7, 0xeb, 0x13, 0x54, 0x0f, - 0x4c, 0x44, 0x0d, 0x2e, 0x07, 0x03, 0x4d, 0xd2, 0x81, 0x96, 0x8e, 0x99, 0xe9, 0x40, 0x60, 0x3e, - 0x03, 0x92, 0x66, 0xe8, 0xd8, 0xf4, 0x14, 0xd7, 0x73, 0xb0, 0xda, 0xd1, 0xcd, 0x36, 0xad, 0x20, - 0x99, 0x72, 0xaa, 0xa5, 0x1a, 0x2e, 0x96, 0x27, 0x99, 0xba, 0x2e, 0xb4, 0x04, 0x41, 0x03, 0xc8, - 0x09, 0x21, 0xd2, 0x3d, 0x08, 0xa6, 0xf6, 0x11, 0xf3, 0xdf, 0xcc, 0x40, 0x2e, 0xd4, 0x57, 0xa3, - 0x73, 0x90, 0xbf, 0xa1, 0xde, 0x52, 0x15, 0x71, 0x56, 0x62, 0x9e, 0xc8, 0x11, 0xd9, 0x2e, 0x3f, - 0x2f, 0x3d, 0x03, 0x33, 0xd4, 0xc4, 0xea, 0x7a, 0xd8, 0x51, 0x34, 0x43, 0x75, 0x5d, 0xea, 0xb4, - 0x0c, 0x35, 0x45, 0x44, 0x57, 0x23, 0xaa, 0x35, 0xa1, 0x41, 0x2b, 0x30, 0x4d, 0x11, 0x9d, 0xae, - 0xe1, 0xe9, 0xb6, 0x81, 0x15, 0x72, 0x7a, 0x73, 0x69, 0x25, 0xf1, 0x47, 0x36, 0x45, 0x2c, 0xb6, - 0xb9, 0x01, 0x19, 0x91, 0x8b, 0xd6, 0xe1, 0x61, 0x0a, 0x6b, 0x63, 0x13, 0x3b, 0xaa, 0x87, 0x15, - 0xfc, 0xb9, 0xae, 0x6a, 0xb8, 0x8a, 0x6a, 0x36, 0x95, 0x03, 0xd5, 0x3d, 0x28, 0xce, 0x10, 0x82, - 0xd5, 0x78, 0x31, 0x26, 0x9f, 0x21, 0x86, 0x1b, 0xdc, 0xae, 0x4a, 0xcd, 0x2a, 0x66, 0xf3, 0xba, - 0xea, 0x1e, 0xa0, 0x32, 0x9c, 0xa2, 0x2c, 0xae, 0xe7, 0xe8, 0x66, 0x5b, 0xd1, 0x0e, 0xb0, 0x76, - 0x53, 0xe9, 0x7a, 0xad, 0xcb, 0xc5, 0x07, 0xc3, 0xef, 0xa7, 0x23, 0xac, 0x53, 0x9b, 0x35, 0x62, - 0xb2, 0xef, 0xb5, 0x2e, 0xa3, 0x3a, 0xe4, 0xc9, 0x62, 0x74, 0xf4, 0x3b, 0x58, 0x69, 0x59, 0x0e, - 0x2d, 0x8d, 0x85, 0x21, 0xa9, 0x29, 0xe4, 0xc1, 0xc5, 0x1a, 0x07, 0x6c, 0x5b, 0x4d, 0x5c, 0x4e, - 0xd5, 0x77, 0xab, 0xd5, 0x75, 0x39, 0x27, 0x58, 0xae, 0x59, 0x0e, 0x09, 0xa8, 0xb6, 0xe5, 0x3b, - 0x38, 0xc7, 0x02, 0xaa, 0x6d, 0x09, 0xf7, 0xae, 0xc0, 0xb4, 0xa6, 0xb1, 0x39, 0xeb, 0x9a, 0xc2, - 0xcf, 0x58, 0x6e, 0x51, 0xea, 0x71, 0x96, 0xa6, 0x6d, 0x30, 0x03, 0x1e, 0xe3, 0x2e, 0xba, 0x02, - 0x0f, 0x04, 0xce, 0x0a, 0x03, 0xa7, 0x06, 0x66, 0xd9, 0x0f, 0x5d, 0x81, 0x69, 0xfb, 0x70, 0x10, - 0x88, 0x7a, 0xde, 0x68, 0x1f, 0xf6, 0xc3, 0x2e, 0xc1, 0x8c, 0x7d, 0x60, 0x0f, 0xe2, 0x9e, 0x0c, - 0xe3, 0x90, 0x7d, 0x60, 0xf7, 0x03, 0x1f, 0xa3, 0x07, 0x6e, 0x07, 0x6b, 0xaa, 0x87, 0x9b, 0xc5, - 0xd3, 0x61, 0xf3, 0x90, 0x02, 0x2d, 0x81, 0xa4, 0x69, 0x0a, 0x36, 0xd5, 0x86, 0x81, 0x15, 0xd5, - 0xc1, 0xa6, 0xea, 0x16, 0xcf, 0x86, 0x8d, 0x0b, 0x9a, 0x56, 0xa5, 0xda, 0x0a, 0x55, 0xa2, 0x27, - 0x61, 0xca, 0x6a, 0xdc, 0xd0, 0x58, 0x48, 0x2a, 0xb6, 0x83, 0x5b, 0xfa, 0x2b, 0xc5, 0x47, 0xa9, - 0x7f, 0x27, 0x89, 0x82, 0x06, 0xe4, 0x2e, 0x15, 0xa3, 0x27, 0x40, 0xd2, 0xdc, 0x03, 0xd5, 0xb1, - 0x69, 0x4e, 0x76, 0x6d, 0x55, 0xc3, 0xc5, 0xc7, 0x98, 0x29, 0x93, 0xef, 0x08, 0x31, 0xd9, 0x12, - 0xee, 0x6d, 0xbd, 0xe5, 0x09, 0xc6, 0xc7, 0xd9, 0x96, 0xa0, 0x32, 0xce, 0xb6, 0x00, 0x12, 0x71, - 0x45, 0xcf, 0x8b, 0x17, 0xa8, 0x59, 0xc1, 0x3e, 0xb0, 0xc3, 0xef, 0x7d, 0x04, 0x26, 0x88, 0x65, - 0xf0, 0xd2, 0x27, 0x58, 0x43, 0x66, 0x1f, 0x84, 0xde, 0xf8, 0x91, 0xf5, 0xc6, 0xf3, 0x65, 0xc8, - 0x87, 0xe3, 0x13, 0x65, 0x81, 0x45, 0xa8, 0x14, 0x23, 0xcd, 0xca, 0x5a, 0x6d, 0x9d, 0xb4, 0x19, - 0x2f, 0x57, 0xa5, 0x38, 0x69, 0x77, 0xb6, 0x36, 0xf7, 0xaa, 0x8a, 0xbc, 0xbf, 0xb3, 0xb7, 0xb9, - 0x5d, 0x95, 0x12, 0xe1, 0xbe, 0xfa, 0xbb, 0x71, 0x28, 0xf4, 0x1e, 0x91, 0xd0, 0xcf, 0xc2, 0x69, - 0x71, 0x9f, 0xe1, 0x62, 0x4f, 0xb9, 0xad, 0x3b, 0x74, 0xcb, 0x74, 0x54, 0x56, 0xbe, 0xfc, 0x45, - 0x9b, 0xe1, 0x56, 0x75, 0xec, 0xbd, 0xa0, 0x3b, 0x64, 0x43, 0x74, 0x54, 0x0f, 0x6d, 0xc1, 0x59, - 0xd3, 0x52, 0x5c, 0x4f, 0x35, 0x9b, 0xaa, 0xd3, 0x54, 0x82, 0x9b, 0x24, 0x45, 0xd5, 0x34, 0xec, - 0xba, 0x16, 0x2b, 0x55, 0x3e, 0xcb, 0x43, 0xa6, 0x55, 0xe7, 0xc6, 0x41, 0x0e, 0xaf, 0x70, 0xd3, - 0xbe, 0x00, 0x4b, 0x1c, 0x17, 0x60, 0x0f, 0x42, 0xb6, 0xa3, 0xda, 0x0a, 0x36, 0x3d, 0xe7, 0x90, - 0x36, 0xc6, 0x19, 0x39, 0xd3, 0x51, 0xed, 0x2a, 0x79, 0xfe, 0x78, 0xce, 0x27, 0x3f, 0x48, 0x40, - 0x3e, 0xdc, 0x1c, 0x93, 0xb3, 0x86, 0x46, 0xeb, 0x48, 0x8c, 0x66, 0x9a, 0x47, 0xee, 0xdb, 0x4a, - 0x2f, 0xae, 0x91, 0x02, 0x53, 0x4e, 0xb3, 0x96, 0x55, 0x66, 0x48, 0x52, 0xdc, 0x49, 0x6e, 0xc1, - 0xac, 0x45, 0xc8, 0xc8, 0xfc, 0x09, 0x6d, 0x40, 0xfa, 0x86, 0x4b, 0xb9, 0xd3, 0x94, 0xfb, 0xd1, - 0xfb, 0x73, 0x3f, 0x5f, 0xa7, 0xe4, 0xd9, 0xe7, 0xeb, 0xca, 0x4e, 0x4d, 0xde, 0xae, 0x6c, 0xc9, - 0x1c, 0x8e, 0xce, 0x40, 0xd2, 0x50, 0xef, 0x1c, 0xf6, 0x96, 0x22, 0x2a, 0x1a, 0xd5, 0xf1, 0x67, - 0x20, 0x79, 0x1b, 0xab, 0x37, 0x7b, 0x0b, 0x00, 0x15, 0x7d, 0x84, 0xa1, 0xbf, 0x04, 0x29, 0xea, - 0x2f, 0x04, 0xc0, 0x3d, 0x26, 0x8d, 0xa1, 0x0c, 0x24, 0xd7, 0x6a, 0x32, 0x09, 0x7f, 0x09, 0xf2, - 0x4c, 0xaa, 0xec, 0x6e, 0x56, 0xd7, 0xaa, 0x52, 0x7c, 0x7e, 0x05, 0xd2, 0xcc, 0x09, 0x64, 0x6b, - 0xf8, 0x6e, 0x90, 0xc6, 0xf8, 0x23, 0xe7, 0x88, 0x09, 0xed, 0xfe, 0xf6, 0x6a, 0x55, 0x96, 0xe2, - 0xe1, 0xe5, 0x75, 0x21, 0x1f, 0xee, 0x8b, 0x3f, 0x9e, 0x98, 0xfa, 0x87, 0x18, 0xe4, 0x42, 0x7d, - 0x2e, 0x69, 0x50, 0x54, 0xc3, 0xb0, 0x6e, 0x2b, 0xaa, 0xa1, 0xab, 0x2e, 0x0f, 0x0a, 0xa0, 0xa2, - 0x0a, 0x91, 0x8c, 0xba, 0x68, 0x1f, 0xcb, 0xe0, 0xdf, 0x88, 0x81, 0xd4, 0xdf, 0x62, 0xf6, 0x0d, - 0x30, 0xf6, 0x53, 0x1d, 0xe0, 0xeb, 0x31, 0x28, 0xf4, 0xf6, 0x95, 0x7d, 0xc3, 0x3b, 0xf7, 0x53, - 0x1d, 0xde, 0xdb, 0x71, 0x98, 0xe8, 0xe9, 0x26, 0x47, 0x1d, 0xdd, 0xe7, 0x60, 0x4a, 0x6f, 0xe2, - 0x8e, 0x6d, 0x79, 0xd8, 0xd4, 0x0e, 0x15, 0x03, 0xdf, 0xc2, 0x46, 0x71, 0x9e, 0x26, 0x8a, 0xa5, - 0xfb, 0xf7, 0xab, 0x8b, 0x9b, 0x01, 0x6e, 0x8b, 0xc0, 0xca, 0xd3, 0x9b, 0xeb, 0xd5, 0xed, 0xdd, - 0xda, 0x5e, 0x75, 0x67, 0xed, 0x25, 0x65, 0x7f, 0xe7, 0xe7, 0x77, 0x6a, 0x2f, 0xec, 0xc8, 0x92, - 0xde, 0x67, 0xf6, 0x11, 0x6e, 0xf5, 0x5d, 0x90, 0xfa, 0x07, 0x85, 0x4e, 0xc3, 0xb0, 0x61, 0x49, - 0x63, 0x68, 0x1a, 0x26, 0x77, 0x6a, 0x4a, 0x7d, 0x73, 0xbd, 0xaa, 0x54, 0xaf, 0x5d, 0xab, 0xae, - 0xed, 0xd5, 0xd9, 0x0d, 0x84, 0x6f, 0xbd, 0xd7, 0xbb, 0xa9, 0x5f, 0x4b, 0xc0, 0xf4, 0x90, 0x91, - 0xa0, 0x0a, 0x3f, 0x3b, 0xb0, 0xe3, 0xcc, 0xd3, 0xa3, 0x8c, 0x7e, 0x91, 0x94, 0xfc, 0x5d, 0xd5, - 0xf1, 0xf8, 0x51, 0xe3, 0x09, 0x20, 0x5e, 0x32, 0x3d, 0xbd, 0xa5, 0x63, 0x87, 0x5f, 0xd8, 0xb0, - 0x03, 0xc5, 0x64, 0x20, 0x67, 0x77, 0x36, 0x3f, 0x03, 0xc8, 0xb6, 0x5c, 0xdd, 0xd3, 0x6f, 0x61, - 0x45, 0x37, 0xc5, 0xed, 0x0e, 0x39, 0x60, 0x24, 0x65, 0x49, 0x68, 0x36, 0x4d, 0xcf, 0xb7, 0x36, - 0x71, 0x5b, 0xed, 0xb3, 0x26, 0x09, 0x3c, 0x21, 0x4b, 0x42, 0xe3, 0x5b, 0x9f, 0x83, 0x7c, 0xd3, - 0xea, 0x92, 0xae, 0x8b, 0xd9, 0x91, 0x7a, 0x11, 0x93, 0x73, 0x4c, 0xe6, 0x9b, 0xf0, 0x7e, 0x3a, - 0xb8, 0x56, 0xca, 0xcb, 0x39, 0x26, 0x63, 0x26, 0x8f, 0xc3, 0xa4, 0xda, 0x6e, 0x3b, 0x84, 0x5c, - 0x10, 0xb1, 0x13, 0x42, 0xc1, 0x17, 0x53, 0xc3, 0xd9, 0xe7, 0x21, 0x23, 0xfc, 0x40, 0x4a, 0x32, - 0xf1, 0x84, 0x62, 0xb3, 0x63, 0x6f, 0x7c, 0x21, 0x2b, 0x67, 0x4c, 0xa1, 0x3c, 0x07, 0x79, 0xdd, - 0x55, 0x82, 0x5b, 0xf2, 0xf8, 0x5c, 0x7c, 0x21, 0x23, 0xe7, 0x74, 0xd7, 0xbf, 0x61, 0x9c, 0x7f, - 0x33, 0x0e, 0x85, 0xde, 0x5b, 0x7e, 0xb4, 0x0e, 0x19, 0xc3, 0xd2, 0x54, 0x1a, 0x5a, 0xec, 0x13, - 0xd3, 0x42, 0xc4, 0x87, 0x81, 0xc5, 0x2d, 0x6e, 0x2f, 0xfb, 0xc8, 0xd9, 0x7f, 0x89, 0x41, 0x46, - 0x88, 0xd1, 0x29, 0x48, 0xda, 0xaa, 0x77, 0x40, 0xe9, 0x52, 0xab, 0x71, 0x29, 0x26, 0xd3, 0x67, - 0x22, 0x77, 0x6d, 0xd5, 0xa4, 0x21, 0xc0, 0xe5, 0xe4, 0x99, 0xac, 0xab, 0x81, 0xd5, 0x26, 0x3d, - 0x7e, 0x58, 0x9d, 0x0e, 0x36, 0x3d, 0x57, 0xac, 0x2b, 0x97, 0xaf, 0x71, 0x31, 0x7a, 0x0a, 0xa6, - 0x3c, 0x47, 0xd5, 0x8d, 0x1e, 0xdb, 0x24, 0xb5, 0x95, 0x84, 0xc2, 0x37, 0x2e, 0xc3, 0x19, 0xc1, - 0xdb, 0xc4, 0x9e, 0xaa, 0x1d, 0xe0, 0x66, 0x00, 0x4a, 0xd3, 0x6b, 0x86, 0xd3, 0xdc, 0x60, 0x9d, - 0xeb, 0x05, 0x76, 0xfe, 0xfb, 0x31, 0x98, 0x12, 0x07, 0xa6, 0xa6, 0xef, 0xac, 0x6d, 0x00, 0xd5, - 0x34, 0x2d, 0x2f, 0xec, 0xae, 0xc1, 0x50, 0x1e, 0xc0, 0x2d, 0x56, 0x7c, 0x90, 0x1c, 0x22, 0x98, - 0xed, 0x00, 0x04, 0x9a, 0x63, 0xdd, 0x76, 0x16, 0x72, 0xfc, 0x13, 0x0e, 0xfd, 0x0e, 0xc8, 0x8e, - 0xd8, 0xc0, 0x44, 0xe4, 0x64, 0x85, 0x66, 0x20, 0xd5, 0xc0, 0x6d, 0xdd, 0xe4, 0x17, 0xb3, 0xec, - 0x41, 0x5c, 0x84, 0x24, 0xfd, 0x8b, 0x90, 0xd5, 0xcf, 0xc2, 0xb4, 0x66, 0x75, 0xfa, 0x87, 0xbb, - 0x2a, 0xf5, 0x1d, 0xf3, 0xdd, 0xeb, 0xb1, 0x97, 0x21, 0x68, 0x31, 0x3f, 0x88, 0xc5, 0xfe, 0x24, - 0x9e, 0xd8, 0xd8, 0x5d, 0xfd, 0x5a, 0x7c, 0x76, 0x83, 0x41, 0x77, 0xc5, 0x4c, 0x65, 0xdc, 0x32, - 0xb0, 0x46, 0x46, 0x0f, 0x5f, 0x59, 0x80, 0xa7, 0xdb, 0xba, 0x77, 0xd0, 0x6d, 0x2c, 0x6a, 0x56, - 0x67, 0xa9, 0x6d, 0xb5, 0xad, 0xe0, 0xd3, 0x27, 0x79, 0xa2, 0x0f, 0xf4, 0x3f, 0xfe, 0xf9, 0x33, - 0xeb, 0x4b, 0x67, 0x23, 0xbf, 0x95, 0x96, 0x77, 0x60, 0x9a, 0x1b, 0x2b, 0xf4, 0xfb, 0x0b, 0x3b, - 0x45, 0xa0, 0xfb, 0xde, 0x61, 0x15, 0xbf, 0xf1, 0x0e, 0x2d, 0xd7, 0xf2, 0x14, 0x87, 0x12, 0x1d, - 0x3b, 0x68, 0x94, 0x65, 0x78, 0xa0, 0x87, 0x8f, 0x6d, 0x4d, 0xec, 0x44, 0x30, 0x7e, 0x97, 0x33, - 0x4e, 0x87, 0x18, 0xeb, 0x1c, 0x5a, 0x5e, 0x83, 0x89, 0x93, 0x70, 0xfd, 0x13, 0xe7, 0xca, 0xe3, - 0x30, 0xc9, 0x06, 0x4c, 0x52, 0x12, 0xad, 0xeb, 0x7a, 0x56, 0x87, 0xe6, 0xbd, 0xfb, 0xd3, 0xfc, - 0xf3, 0x3b, 0x6c, 0xaf, 0x14, 0x08, 0x6c, 0xcd, 0x47, 0x95, 0xcb, 0x40, 0x3f, 0x39, 0x35, 0xb1, - 0x66, 0x44, 0x30, 0xbc, 0xc5, 0x07, 0xe2, 0xdb, 0x97, 0x3f, 0x03, 0x33, 0xe4, 0x7f, 0x9a, 0x96, - 0xc2, 0x23, 0x89, 0xbe, 0xf0, 0x2a, 0x7e, 0xff, 0x55, 0xb6, 0x1d, 0xa7, 0x7d, 0x82, 0xd0, 0x98, - 0x42, 0xab, 0xd8, 0xc6, 0x9e, 0x87, 0x1d, 0x57, 0x51, 0x8d, 0x61, 0xc3, 0x0b, 0xdd, 0x18, 0x14, - 0xbf, 0xf8, 0x6e, 0xef, 0x2a, 0x6e, 0x30, 0x64, 0xc5, 0x30, 0xca, 0xfb, 0x70, 0x7a, 0x48, 0x54, - 0x8c, 0xc0, 0xf9, 0x1a, 0xe7, 0x9c, 0x19, 0x88, 0x0c, 0x42, 0xbb, 0x0b, 0x42, 0xee, 0xaf, 0xe5, - 0x08, 0x9c, 0x7f, 0xc8, 0x39, 0x11, 0xc7, 0x8a, 0x25, 0x25, 0x8c, 0xcf, 0xc3, 0xd4, 0x2d, 0xec, - 0x34, 0x2c, 0x97, 0xdf, 0xd2, 0x8c, 0x40, 0xf7, 0x3a, 0xa7, 0x9b, 0xe4, 0x40, 0x7a, 0x6d, 0x43, - 0xb8, 0xae, 0x40, 0xa6, 0xa5, 0x6a, 0x78, 0x04, 0x8a, 0x2f, 0x71, 0x8a, 0x71, 0x62, 0x4f, 0xa0, - 0x15, 0xc8, 0xb7, 0x2d, 0x5e, 0x99, 0xa2, 0xe1, 0x6f, 0x70, 0x78, 0x4e, 0x60, 0x38, 0x85, 0x6d, - 0xd9, 0x5d, 0x83, 0x94, 0xad, 0x68, 0x8a, 0x3f, 0x12, 0x14, 0x02, 0xc3, 0x29, 0x4e, 0xe0, 0xd6, - 0x3f, 0x16, 0x14, 0x6e, 0xc8, 0x9f, 0xcf, 0x41, 0xce, 0x32, 0x8d, 0x43, 0xcb, 0x1c, 0x65, 0x10, - 0x5f, 0xe6, 0x0c, 0xc0, 0x21, 0x84, 0xe0, 0x2a, 0x64, 0x47, 0x5d, 0x88, 0xaf, 0xbc, 0x2b, 0xb6, - 0x87, 0x58, 0x81, 0x0d, 0x98, 0x14, 0x09, 0x4a, 0xb7, 0xcc, 0x11, 0x28, 0xfe, 0x94, 0x53, 0x14, - 0x42, 0x30, 0x3e, 0x0d, 0x0f, 0xbb, 0x5e, 0x1b, 0x8f, 0x42, 0xf2, 0xa6, 0x98, 0x06, 0x87, 0x70, - 0x57, 0x36, 0xb0, 0xa9, 0x1d, 0x8c, 0xc6, 0xf0, 0x55, 0xe1, 0x4a, 0x81, 0x21, 0x14, 0x6b, 0x30, - 0xd1, 0x51, 0x1d, 0xf7, 0x40, 0x35, 0x46, 0x5a, 0x8e, 0x3f, 0xe3, 0x1c, 0x79, 0x1f, 0xc4, 0x3d, - 0xd2, 0x35, 0x4f, 0x42, 0xf3, 0x35, 0xe1, 0x91, 0x10, 0x8c, 0x6f, 0x3d, 0xd7, 0xa3, 0x57, 0x5a, - 0x27, 0x61, 0xfb, 0x73, 0xb1, 0xf5, 0x18, 0x76, 0x3b, 0xcc, 0x78, 0x15, 0xb2, 0xae, 0x7e, 0x67, - 0x24, 0x9a, 0xbf, 0x10, 0x2b, 0x4d, 0x01, 0x04, 0xfc, 0x12, 0x9c, 0x19, 0x5a, 0x26, 0x46, 0x20, - 0xfb, 0x4b, 0x4e, 0x76, 0x6a, 0x48, 0xa9, 0xe0, 0x29, 0xe1, 0xa4, 0x94, 0x7f, 0x25, 0x52, 0x02, - 0xee, 0xe3, 0xda, 0x25, 0x67, 0x05, 0x57, 0x6d, 0x9d, 0xcc, 0x6b, 0x7f, 0x2d, 0xbc, 0xc6, 0xb0, - 0x3d, 0x5e, 0xdb, 0x83, 0x53, 0x9c, 0xf1, 0x64, 0xeb, 0xfa, 0x75, 0x91, 0x58, 0x19, 0x7a, 0xbf, - 0x77, 0x75, 0x3f, 0x0b, 0xb3, 0xbe, 0x3b, 0x45, 0x53, 0xea, 0x2a, 0x1d, 0xd5, 0x1e, 0x81, 0xf9, - 0x1b, 0x9c, 0x59, 0x64, 0x7c, 0xbf, 0xab, 0x75, 0xb7, 0x55, 0x9b, 0x90, 0xbf, 0x08, 0x45, 0x41, - 0xde, 0x35, 0x1d, 0xac, 0x59, 0x6d, 0x53, 0xbf, 0x83, 0x9b, 0x23, 0x50, 0xff, 0x4d, 0xdf, 0x52, - 0xed, 0x87, 0xe0, 0x84, 0x79, 0x13, 0x24, 0xbf, 0x57, 0x51, 0xf4, 0x8e, 0x6d, 0x39, 0x5e, 0x04, - 0xe3, 0x37, 0xc5, 0x4a, 0xf9, 0xb8, 0x4d, 0x0a, 0x2b, 0x57, 0xa1, 0x40, 0x1f, 0x47, 0x0d, 0xc9, - 0xbf, 0xe5, 0x44, 0x13, 0x01, 0x8a, 0x27, 0x0e, 0xcd, 0xea, 0xd8, 0xaa, 0x33, 0x4a, 0xfe, 0xfb, - 0x3b, 0x91, 0x38, 0x38, 0x84, 0x27, 0x0e, 0xef, 0xd0, 0xc6, 0xa4, 0xda, 0x8f, 0xc0, 0xf0, 0x2d, - 0x91, 0x38, 0x04, 0x86, 0x53, 0x88, 0x86, 0x61, 0x04, 0x8a, 0xbf, 0x17, 0x14, 0x02, 0x43, 0x28, - 0x3e, 0x1d, 0x14, 0x5a, 0x07, 0xb7, 0x75, 0xd7, 0x73, 0x58, 0x2b, 0x7c, 0x7f, 0xaa, 0x6f, 0xbf, - 0xdb, 0xdb, 0x84, 0xc9, 0x21, 0x28, 0xc9, 0x44, 0xfc, 0x0a, 0x95, 0x9e, 0x94, 0xa2, 0x07, 0xf6, - 0x1d, 0x91, 0x89, 0x42, 0x30, 0xb6, 0x3f, 0x27, 0xfb, 0x7a, 0x15, 0x14, 0xf5, 0x43, 0x98, 0xe2, - 0x2f, 0xbd, 0xcf, 0xb9, 0x7a, 0x5b, 0x95, 0xf2, 0x16, 0x09, 0xa0, 0xde, 0x86, 0x22, 0x9a, 0xec, - 0xd5, 0xf7, 0xfd, 0x18, 0xea, 0xe9, 0x27, 0xca, 0xd7, 0x60, 0xa2, 0xa7, 0x99, 0x88, 0xa6, 0xfa, - 0x65, 0x4e, 0x95, 0x0f, 0xf7, 0x12, 0xe5, 0x15, 0x48, 0x92, 0xc6, 0x20, 0x1a, 0xfe, 0x2b, 0x1c, - 0x4e, 0xcd, 0xcb, 0x9f, 0x84, 0x8c, 0x68, 0x08, 0xa2, 0xa1, 0xbf, 0xca, 0xa1, 0x3e, 0x84, 0xc0, - 0x45, 0x33, 0x10, 0x0d, 0xff, 0x35, 0x01, 0x17, 0x10, 0x02, 0x1f, 0xdd, 0x85, 0xff, 0xf8, 0xeb, - 0x49, 0x9e, 0xd0, 0x85, 0xef, 0xae, 0xc2, 0x38, 0xef, 0x02, 0xa2, 0xd1, 0x9f, 0xe7, 0x2f, 0x17, - 0x88, 0xf2, 0x25, 0x48, 0x8d, 0xe8, 0xf0, 0xdf, 0xe0, 0x50, 0x66, 0x5f, 0x5e, 0x83, 0x5c, 0xa8, - 0xf2, 0x47, 0xc3, 0x7f, 0x93, 0xc3, 0xc3, 0x28, 0x32, 0x74, 0x5e, 0xf9, 0xa3, 0x09, 0x7e, 0x4b, - 0x0c, 0x9d, 0x23, 0x88, 0xdb, 0x44, 0xd1, 0x8f, 0x46, 0xff, 0xb6, 0xf0, 0xba, 0x80, 0x94, 0x9f, - 0x83, 0xac, 0x9f, 0xc8, 0xa3, 0xf1, 0xbf, 0xc3, 0xf1, 0x01, 0x86, 0x78, 0x20, 0x54, 0x48, 0xa2, - 0x29, 0x7e, 0x57, 0x78, 0x20, 0x84, 0x22, 0xdb, 0xa8, 0xbf, 0x39, 0x88, 0x66, 0xfa, 0x3d, 0xb1, - 0x8d, 0xfa, 0x7a, 0x03, 0xb2, 0x9a, 0x34, 0x9f, 0x46, 0x53, 0xfc, 0xbe, 0x58, 0x4d, 0x6a, 0x4f, - 0x86, 0xd1, 0x5f, 0x6d, 0xa3, 0x39, 0xfe, 0x40, 0x0c, 0xa3, 0xaf, 0xd8, 0x96, 0x77, 0x01, 0x0d, - 0x56, 0xda, 0x68, 0xbe, 0x2f, 0x70, 0xbe, 0xa9, 0x81, 0x42, 0x5b, 0x7e, 0x01, 0x4e, 0x0d, 0xaf, - 0xb2, 0xd1, 0xac, 0x5f, 0x7c, 0xbf, 0xef, 0x5c, 0x14, 0x2e, 0xb2, 0xe5, 0xbd, 0x20, 0x5d, 0x87, - 0x2b, 0x6c, 0x34, 0xed, 0x6b, 0xef, 0xf7, 0x66, 0xec, 0x70, 0x81, 0x2d, 0x57, 0x00, 0x82, 0xe2, - 0x16, 0xcd, 0xf5, 0x3a, 0xe7, 0x0a, 0x81, 0xc8, 0xd6, 0xe0, 0xb5, 0x2d, 0x1a, 0xff, 0x25, 0xb1, - 0x35, 0x38, 0x82, 0x6c, 0x0d, 0x51, 0xd6, 0xa2, 0xd1, 0x6f, 0x88, 0xad, 0x21, 0x20, 0x24, 0xb2, - 0x43, 0x95, 0x23, 0x9a, 0xe1, 0xcb, 0x22, 0xb2, 0x43, 0xa8, 0xf2, 0x55, 0xc8, 0x98, 0x5d, 0xc3, - 0x20, 0x01, 0x8a, 0xee, 0xff, 0x03, 0xb1, 0xe2, 0xbf, 0x7f, 0xc8, 0x47, 0x20, 0x00, 0xe5, 0x15, - 0x48, 0xe1, 0x4e, 0x03, 0x37, 0xa3, 0x90, 0xff, 0xf1, 0xa1, 0x48, 0x4a, 0xc4, 0xba, 0xfc, 0x1c, - 0x00, 0x3b, 0xda, 0xd3, 0xcf, 0x56, 0x11, 0xd8, 0xff, 0xfc, 0x90, 0xff, 0x74, 0x23, 0x80, 0x04, - 0x04, 0xec, 0x87, 0x20, 0xf7, 0x27, 0x78, 0xb7, 0x97, 0x80, 0xce, 0xfa, 0x0a, 0x8c, 0xdf, 0x70, - 0x2d, 0xd3, 0x53, 0xdb, 0x51, 0xe8, 0xff, 0xe2, 0x68, 0x61, 0x4f, 0x1c, 0xd6, 0xb1, 0x1c, 0xec, - 0xa9, 0x6d, 0x37, 0x0a, 0xfb, 0xdf, 0x1c, 0xeb, 0x03, 0x08, 0x58, 0x53, 0x5d, 0x6f, 0x94, 0x79, - 0xff, 0x58, 0x80, 0x05, 0x80, 0x0c, 0x9a, 0xfc, 0x7f, 0x13, 0x1f, 0x46, 0x61, 0xdf, 0x13, 0x83, - 0xe6, 0xf6, 0xe5, 0x4f, 0x42, 0x96, 0xfc, 0xcb, 0x7e, 0x8f, 0x15, 0x01, 0xfe, 0x1f, 0x0e, 0x0e, - 0x10, 0xe4, 0xcd, 0xae, 0xd7, 0xf4, 0xf4, 0x68, 0x67, 0xff, 0x2f, 0x5f, 0x69, 0x61, 0x5f, 0xae, - 0x40, 0xce, 0xf5, 0x9a, 0xcd, 0x2e, 0xef, 0xaf, 0x22, 0xe0, 0xff, 0xf7, 0xa1, 0x7f, 0xe4, 0xf6, - 0x31, 0xab, 0xd5, 0xe1, 0xb7, 0x87, 0xb0, 0x61, 0x6d, 0x58, 0xec, 0xde, 0xf0, 0xe5, 0xf9, 0xe8, - 0x0b, 0x40, 0x78, 0x2d, 0x05, 0x0f, 0x69, 0x56, 0xa7, 0x61, 0xb9, 0x4b, 0xa1, 0x7c, 0xb7, 0x64, - 0x99, 0x9c, 0x13, 0x25, 0x2c, 0x13, 0xcf, 0x9e, 0xec, 0x2a, 0x71, 0xfe, 0x0c, 0xa4, 0xea, 0xdd, - 0x46, 0xe3, 0x10, 0x49, 0x90, 0x70, 0xbb, 0x0d, 0xfe, 0xb3, 0x1c, 0xf2, 0xef, 0xfc, 0x0f, 0x12, - 0x90, 0xab, 0xab, 0x1d, 0xdb, 0xc0, 0x35, 0x13, 0xd7, 0x5a, 0xa8, 0x08, 0x69, 0x3a, 0xd7, 0x67, - 0xa9, 0x51, 0xec, 0xfa, 0x98, 0xcc, 0x9f, 0x7d, 0xcd, 0x32, 0xbd, 0x62, 0x8d, 0xfb, 0x9a, 0x65, - 0x5f, 0x73, 0x9e, 0xdd, 0xb0, 0xfa, 0x9a, 0xf3, 0xbe, 0xe6, 0x02, 0xbd, 0x67, 0x4d, 0xf8, 0x9a, - 0x0b, 0xbe, 0x66, 0x85, 0x7e, 0x47, 0x98, 0xf0, 0x35, 0x2b, 0xbe, 0xe6, 0x22, 0xfd, 0x72, 0x90, - 0xf4, 0x35, 0x17, 0x7d, 0xcd, 0x25, 0xfa, 0xc1, 0x60, 0xca, 0xd7, 0x5c, 0xf2, 0x35, 0x97, 0xe9, - 0x47, 0x02, 0xe4, 0x6b, 0x2e, 0xfb, 0x9a, 0x2b, 0xf4, 0xd7, 0x37, 0xe3, 0xbe, 0xe6, 0x0a, 0x9a, - 0x85, 0x71, 0x36, 0xb3, 0x67, 0xe8, 0x97, 0xe4, 0xc9, 0xeb, 0x63, 0xb2, 0x10, 0x04, 0xba, 0x67, - 0xe9, 0x2f, 0x6c, 0xd2, 0x81, 0xee, 0xd9, 0x40, 0xb7, 0x4c, 0x7f, 0xe8, 0x2f, 0x05, 0xba, 0xe5, - 0x40, 0x77, 0xbe, 0x38, 0x41, 0x42, 0x24, 0xd0, 0x9d, 0x0f, 0x74, 0x17, 0x8a, 0x05, 0xe2, 0xff, - 0x40, 0x77, 0x21, 0xd0, 0xad, 0x14, 0x27, 0xe7, 0x62, 0x0b, 0xf9, 0x40, 0xb7, 0x82, 0x9e, 0x86, - 0x9c, 0xdb, 0x6d, 0x28, 0x3c, 0x1d, 0xd2, 0x5f, 0xf2, 0xe4, 0x96, 0x61, 0x91, 0x44, 0x04, 0x5d, - 0xd4, 0xeb, 0x63, 0x32, 0xb8, 0xdd, 0x06, 0x4f, 0xa3, 0xab, 0x79, 0xa0, 0x17, 0x20, 0x0a, 0xfd, - 0x01, 0xee, 0xea, 0xfa, 0x5b, 0xf7, 0x4a, 0x63, 0xdf, 0xbb, 0x57, 0x1a, 0xfb, 0xd7, 0x7b, 0xa5, - 0xb1, 0xb7, 0xef, 0x95, 0x62, 0xef, 0xdd, 0x2b, 0xc5, 0x3e, 0xb8, 0x57, 0x8a, 0xdd, 0x3d, 0x2a, - 0xc5, 0xbe, 0x7a, 0x54, 0x8a, 0x7d, 0xfd, 0xa8, 0x14, 0xfb, 0xf6, 0x51, 0x29, 0xf6, 0xd6, 0x51, - 0x69, 0xec, 0x7b, 0x47, 0xa5, 0xd8, 0xdb, 0x47, 0xa5, 0xd8, 0x8f, 0x8e, 0x4a, 0x63, 0xef, 0x1d, - 0x95, 0x62, 0x1f, 0x1c, 0x95, 0xc6, 0xee, 0xfe, 0xb0, 0x34, 0xd6, 0x48, 0xd3, 0x30, 0x3a, 0xff, - 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x78, 0x40, 0x7b, 0x37, 0xb7, 0x33, 0x00, 0x00, + // 4082 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x1b, 0xd7, + 0x75, 0xe6, 0xe2, 0x8f, 0xc0, 0x01, 0x08, 0x2e, 0x97, 0xb4, 0x04, 0xd1, 0x36, 0x24, 0xd1, 0x76, + 0x4c, 0xdb, 0x35, 0x69, 0x53, 0xa2, 0x7e, 0xa0, 0x26, 0x2e, 0x48, 0x42, 0x14, 0x5d, 0x92, 0x60, + 0x16, 0x64, 0xfc, 0x93, 0xe9, 0xec, 0x2c, 0x16, 0x17, 0xe0, 0x4a, 0x8b, 0xdd, 0xcd, 0xee, 0x42, + 0x32, 0x35, 0x7d, 0x50, 0xc7, 0xfd, 0x99, 0x4c, 0xa7, 0xff, 0x9d, 0x69, 0xe2, 0x3a, 0x6e, 0x93, + 0x4e, 0xe3, 0x34, 0xfd, 0x4b, 0x9a, 0x36, 0x4d, 0xd2, 0x97, 0xbe, 0xa4, 0xf5, 0x53, 0x27, 0x79, + 0xeb, 0x43, 0x1e, 0x2c, 0xc6, 0x33, 0x4d, 0x5b, 0xb7, 0x71, 0x5b, 0x3d, 0x78, 0xc6, 0x2f, 0x9d, + 0xfb, 0xb7, 0xbb, 0x58, 0x80, 0x5a, 0x30, 0x33, 0x76, 0x9e, 0xc4, 0x3d, 0xe7, 0x7c, 0xdf, 0xde, + 0x7b, 0xee, 0xb9, 0xe7, 0x9c, 0x7b, 0x17, 0x82, 0x1f, 0x5f, 0x86, 0x33, 0x1d, 0xcb, 0xea, 0x18, + 0x68, 0xd1, 0x76, 0x2c, 0xcf, 0x6a, 0xf6, 0xda, 0x8b, 0x2d, 0xe4, 0x6a, 0x8e, 0x6e, 0x7b, 0x96, + 0xb3, 0x40, 0x64, 0xd2, 0x24, 0xb5, 0x58, 0xe0, 0x16, 0x73, 0x5b, 0x30, 0x75, 0x55, 0x37, 0xd0, + 0x9a, 0x6f, 0xd8, 0x40, 0x9e, 0x74, 0x09, 0x52, 0x6d, 0xdd, 0x40, 0x25, 0xe1, 0x4c, 0x72, 0x3e, + 0xbf, 0xf4, 0xe8, 0x42, 0x04, 0xb4, 0xd0, 0x8f, 0xd8, 0xc1, 0x62, 0x99, 0x20, 0xe6, 0xde, 0x49, + 0xc1, 0xf4, 0x10, 0xad, 0x24, 0x41, 0xca, 0x54, 0xbb, 0x98, 0x51, 0x98, 0xcf, 0xc9, 0xe4, 0x6f, + 0xa9, 0x04, 0xe3, 0xb6, 0xaa, 0xdd, 0x50, 0x3b, 0xa8, 0x94, 0x20, 0x62, 0xfe, 0x28, 0x95, 0x01, + 0x5a, 0xc8, 0x46, 0x66, 0x0b, 0x99, 0xda, 0x41, 0x29, 0x79, 0x26, 0x39, 0x9f, 0x93, 0x43, 0x12, + 0xe9, 0x29, 0x98, 0xb2, 0x7b, 0x4d, 0x43, 0xd7, 0x94, 0x90, 0x19, 0x9c, 0x49, 0xce, 0xa7, 0x65, + 0x91, 0x2a, 0xd6, 0x02, 0xe3, 0xc7, 0x61, 0xf2, 0x16, 0x52, 0x6f, 0x84, 0x4d, 0xf3, 0xc4, 0xb4, + 0x88, 0xc5, 0x21, 0xc3, 0x55, 0x28, 0x74, 0x91, 0xeb, 0xaa, 0x1d, 0xa4, 0x78, 0x07, 0x36, 0x2a, + 0xa5, 0xc8, 0xec, 0xcf, 0x0c, 0xcc, 0x3e, 0x3a, 0xf3, 0x3c, 0x43, 0xed, 0x1e, 0xd8, 0x48, 0xaa, + 0x42, 0x0e, 0x99, 0xbd, 0x2e, 0x65, 0x48, 0x1f, 0xe1, 0xbf, 0x9a, 0xd9, 0xeb, 0x46, 0x59, 0xb2, + 0x18, 0xc6, 0x28, 0xc6, 0x5d, 0xe4, 0xdc, 0xd4, 0x35, 0x54, 0xca, 0x10, 0x82, 0xc7, 0x07, 0x08, + 0x1a, 0x54, 0x1f, 0xe5, 0xe0, 0x38, 0x69, 0x15, 0x72, 0xe8, 0x15, 0x0f, 0x99, 0xae, 0x6e, 0x99, + 0xa5, 0x71, 0x42, 0xf2, 0xd8, 0x90, 0x55, 0x44, 0x46, 0x2b, 0x4a, 0x11, 0xe0, 0xa4, 0x0b, 0x30, + 0x6e, 0xd9, 0x9e, 0x6e, 0x99, 0x6e, 0x29, 0x7b, 0x46, 0x98, 0xcf, 0x2f, 0x3d, 0x34, 0x34, 0x10, + 0xea, 0xd4, 0x46, 0xe6, 0xc6, 0xd2, 0x06, 0x88, 0xae, 0xd5, 0x73, 0x34, 0xa4, 0x68, 0x56, 0x0b, + 0x29, 0xba, 0xd9, 0xb6, 0x4a, 0x39, 0x42, 0x70, 0x7a, 0x70, 0x22, 0xc4, 0x70, 0xd5, 0x6a, 0xa1, + 0x0d, 0xb3, 0x6d, 0xc9, 0x45, 0xb7, 0xef, 0x59, 0x3a, 0x01, 0x19, 0xf7, 0xc0, 0xf4, 0xd4, 0x57, + 0x4a, 0x05, 0x12, 0x21, 0xec, 0x69, 0xee, 0xdb, 0x19, 0x98, 0x1c, 0x25, 0xc4, 0xae, 0x40, 0xba, + 0x8d, 0x67, 0x59, 0x4a, 0x1c, 0xc7, 0x07, 0x14, 0xd3, 0xef, 0xc4, 0xcc, 0x4f, 0xe8, 0xc4, 0x2a, + 0xe4, 0x4d, 0xe4, 0x7a, 0xa8, 0x45, 0x23, 0x22, 0x39, 0x62, 0x4c, 0x01, 0x05, 0x0d, 0x86, 0x54, + 0xea, 0x27, 0x0a, 0xa9, 0x17, 0x61, 0xd2, 0x1f, 0x92, 0xe2, 0xa8, 0x66, 0x87, 0xc7, 0xe6, 0x62, + 0xdc, 0x48, 0x16, 0x6a, 0x1c, 0x27, 0x63, 0x98, 0x5c, 0x44, 0x7d, 0xcf, 0xd2, 0x1a, 0x80, 0x65, + 0x22, 0xab, 0xad, 0xb4, 0x90, 0x66, 0x94, 0xb2, 0x47, 0x78, 0xa9, 0x8e, 0x4d, 0x06, 0xbc, 0x64, + 0x51, 0xa9, 0x66, 0x48, 0x97, 0x83, 0x50, 0x1b, 0x3f, 0x22, 0x52, 0xb6, 0xe8, 0x26, 0x1b, 0x88, + 0xb6, 0x3d, 0x28, 0x3a, 0x08, 0xc7, 0x3d, 0x6a, 0xb1, 0x99, 0xe5, 0xc8, 0x20, 0x16, 0x62, 0x67, + 0x26, 0x33, 0x18, 0x9d, 0xd8, 0x84, 0x13, 0x7e, 0x94, 0x1e, 0x01, 0x5f, 0xa0, 0x90, 0xb0, 0x02, + 0x92, 0x85, 0x0a, 0x5c, 0xb8, 0xad, 0x76, 0xd1, 0xec, 0x6d, 0x28, 0xf6, 0xbb, 0x47, 0x9a, 0x81, + 0xb4, 0xeb, 0xa9, 0x8e, 0x47, 0xa2, 0x30, 0x2d, 0xd3, 0x07, 0x49, 0x84, 0x24, 0x32, 0x5b, 0x24, + 0xcb, 0xa5, 0x65, 0xfc, 0xa7, 0xf4, 0x73, 0xc1, 0x84, 0x93, 0x64, 0xc2, 0x1f, 0x1b, 0x5c, 0xd1, + 0x3e, 0xe6, 0xe8, 0xbc, 0x67, 0x2f, 0xc2, 0x44, 0xdf, 0x04, 0x46, 0x7d, 0xf5, 0xdc, 0x2f, 0xc2, + 0x03, 0x43, 0xa9, 0xa5, 0x17, 0x61, 0xa6, 0x67, 0xea, 0xa6, 0x87, 0x1c, 0xdb, 0x41, 0x38, 0x62, + 0xe9, 0xab, 0x4a, 0xff, 0x36, 0x7e, 0x44, 0xcc, 0xed, 0x85, 0xad, 0x29, 0x8b, 0x3c, 0xdd, 0x1b, + 0x14, 0x3e, 0x99, 0xcb, 0xfe, 0x68, 0x5c, 0xbc, 0x73, 0xe7, 0xce, 0x9d, 0xc4, 0xdc, 0xe7, 0x32, + 0x30, 0x33, 0x6c, 0xcf, 0x0c, 0xdd, 0xbe, 0x27, 0x20, 0x63, 0xf6, 0xba, 0x4d, 0xe4, 0x10, 0x27, + 0xa5, 0x65, 0xf6, 0x24, 0x55, 0x21, 0x6d, 0xa8, 0x4d, 0x64, 0x94, 0x52, 0x67, 0x84, 0xf9, 0xe2, + 0xd2, 0x53, 0x23, 0xed, 0xca, 0x85, 0x4d, 0x0c, 0x91, 0x29, 0x52, 0xfa, 0x04, 0xa4, 0x58, 0x8a, + 0xc6, 0x0c, 0x4f, 0x8e, 0xc6, 0x80, 0xf7, 0x92, 0x4c, 0x70, 0xd2, 0x83, 0x90, 0xc3, 0xff, 0xd2, + 0xd8, 0xc8, 0x90, 0x31, 0x67, 0xb1, 0x00, 0xc7, 0x85, 0x34, 0x0b, 0x59, 0xb2, 0x4d, 0x5a, 0x88, + 0x97, 0x36, 0xff, 0x19, 0x07, 0x56, 0x0b, 0xb5, 0xd5, 0x9e, 0xe1, 0x29, 0x37, 0x55, 0xa3, 0x87, + 0x48, 0xc0, 0xe7, 0xe4, 0x02, 0x13, 0x7e, 0x0a, 0xcb, 0xa4, 0xd3, 0x90, 0xa7, 0xbb, 0x4a, 0x37, + 0x5b, 0xe8, 0x15, 0x92, 0x3d, 0xd3, 0x32, 0xdd, 0x68, 0x1b, 0x58, 0x82, 0x5f, 0x7f, 0xdd, 0xb5, + 0x4c, 0x1e, 0x9a, 0xe4, 0x15, 0x58, 0x40, 0x5e, 0x7f, 0x31, 0x9a, 0xb8, 0x1f, 0x1e, 0x3e, 0xbd, + 0x68, 0x4c, 0xcd, 0x7d, 0x33, 0x01, 0x29, 0x92, 0x2f, 0x26, 0x21, 0xbf, 0xfb, 0xd2, 0x4e, 0x4d, + 0x59, 0xab, 0xef, 0xad, 0x6c, 0xd6, 0x44, 0x41, 0x2a, 0x02, 0x10, 0xc1, 0xd5, 0xcd, 0x7a, 0x75, + 0x57, 0x4c, 0xf8, 0xcf, 0x1b, 0xdb, 0xbb, 0x17, 0xce, 0x8b, 0x49, 0x1f, 0xb0, 0x47, 0x05, 0xa9, + 0xb0, 0xc1, 0xb9, 0x25, 0x31, 0x2d, 0x89, 0x50, 0xa0, 0x04, 0x1b, 0x2f, 0xd6, 0xd6, 0x2e, 0x9c, + 0x17, 0x33, 0xfd, 0x92, 0x73, 0x4b, 0xe2, 0xb8, 0x34, 0x01, 0x39, 0x22, 0x59, 0xa9, 0xd7, 0x37, + 0xc5, 0xac, 0xcf, 0xd9, 0xd8, 0x95, 0x37, 0xb6, 0xd7, 0xc5, 0x9c, 0xcf, 0xb9, 0x2e, 0xd7, 0xf7, + 0x76, 0x44, 0xf0, 0x19, 0xb6, 0x6a, 0x8d, 0x46, 0x75, 0xbd, 0x26, 0xe6, 0x7d, 0x8b, 0x95, 0x97, + 0x76, 0x6b, 0x0d, 0xb1, 0xd0, 0x37, 0xac, 0x73, 0x4b, 0xe2, 0x84, 0xff, 0x8a, 0xda, 0xf6, 0xde, + 0x96, 0x58, 0x94, 0xa6, 0x60, 0x82, 0xbe, 0x82, 0x0f, 0x62, 0x32, 0x22, 0xba, 0x70, 0x5e, 0x14, + 0x83, 0x81, 0x50, 0x96, 0xa9, 0x3e, 0xc1, 0x85, 0xf3, 0xa2, 0x34, 0xb7, 0x0a, 0x69, 0x12, 0x5d, + 0x92, 0x04, 0xc5, 0xcd, 0xea, 0x4a, 0x6d, 0x53, 0xa9, 0xef, 0xec, 0x6e, 0xd4, 0xb7, 0xab, 0x9b, + 0xa2, 0x10, 0xc8, 0xe4, 0xda, 0x27, 0xf7, 0x36, 0xe4, 0xda, 0x9a, 0x98, 0x08, 0xcb, 0x76, 0x6a, + 0xd5, 0xdd, 0xda, 0x9a, 0x98, 0x9c, 0xd3, 0x60, 0x66, 0x58, 0x9e, 0x1c, 0xba, 0x33, 0x42, 0x4b, + 0x9c, 0x38, 0x62, 0x89, 0x09, 0xd7, 0xc0, 0x12, 0xff, 0x30, 0x01, 0xd3, 0x43, 0x6a, 0xc5, 0xd0, + 0x97, 0x3c, 0x07, 0x69, 0x1a, 0xa2, 0xb4, 0x7a, 0x3e, 0x31, 0xb4, 0xe8, 0x90, 0x80, 0x1d, 0xa8, + 0xa0, 0x04, 0x17, 0xee, 0x20, 0x92, 0x47, 0x74, 0x10, 0x98, 0x62, 0x20, 0xa7, 0xff, 0xc2, 0x40, + 0x4e, 0xa7, 0x65, 0xef, 0xc2, 0x28, 0x65, 0x8f, 0xc8, 0x8e, 0x97, 0xdb, 0xd3, 0x43, 0x72, 0xfb, + 0x15, 0x98, 0x1a, 0x20, 0x1a, 0x39, 0xc7, 0xbe, 0x2a, 0x40, 0xe9, 0x28, 0xe7, 0xc4, 0x64, 0xba, + 0x44, 0x5f, 0xa6, 0xbb, 0x12, 0xf5, 0xe0, 0xd9, 0xa3, 0x17, 0x61, 0x60, 0xad, 0xdf, 0x14, 0xe0, + 0xc4, 0xf0, 0x4e, 0x71, 0xe8, 0x18, 0x3e, 0x01, 0x99, 0x2e, 0xf2, 0xf6, 0x2d, 0xde, 0x2d, 0x7d, + 0x6c, 0x48, 0x0d, 0xc6, 0xea, 0xe8, 0x62, 0x33, 0x54, 0xb8, 0x88, 0x27, 0x8f, 0x6a, 0xf7, 0xe8, + 0x68, 0x06, 0x46, 0xfa, 0xd9, 0x04, 0x3c, 0x30, 0x94, 0x7c, 0xe8, 0x40, 0x1f, 0x06, 0xd0, 0x4d, + 0xbb, 0xe7, 0xd1, 0x8e, 0x88, 0x26, 0xd8, 0x1c, 0x91, 0x90, 0xe4, 0x85, 0x93, 0x67, 0xcf, 0xf3, + 0xf5, 0x49, 0xa2, 0x07, 0x2a, 0x22, 0x06, 0x97, 0x82, 0x81, 0xa6, 0xc8, 0x40, 0xcb, 0x47, 0xcc, + 0x74, 0x20, 0x30, 0x9f, 0x01, 0x51, 0x33, 0x74, 0x64, 0x7a, 0x8a, 0xeb, 0x39, 0x48, 0xed, 0xea, + 0x66, 0x87, 0x54, 0x90, 0x6c, 0x25, 0xdd, 0x56, 0x0d, 0x17, 0xc9, 0x93, 0x54, 0xdd, 0xe0, 0x5a, + 0x8c, 0x20, 0x01, 0xe4, 0x84, 0x10, 0x99, 0x3e, 0x04, 0x55, 0xfb, 0x88, 0xb9, 0x6f, 0x64, 0x21, + 0x1f, 0xea, 0xab, 0xa5, 0xb3, 0x50, 0xb8, 0xae, 0xde, 0x54, 0x15, 0x7e, 0x56, 0xa2, 0x9e, 0xc8, + 0x63, 0xd9, 0x0e, 0x3b, 0x2f, 0x3d, 0x03, 0x33, 0xc4, 0xc4, 0xea, 0x79, 0xc8, 0x51, 0x34, 0x43, + 0x75, 0x5d, 0xe2, 0xb4, 0x2c, 0x31, 0x95, 0xb0, 0xae, 0x8e, 0x55, 0xab, 0x5c, 0x23, 0x2d, 0xc3, + 0x34, 0x41, 0x74, 0x7b, 0x86, 0xa7, 0xdb, 0x06, 0x52, 0xf0, 0xe9, 0xcd, 0x25, 0x95, 0xc4, 0x1f, + 0xd9, 0x14, 0xb6, 0xd8, 0x62, 0x06, 0x78, 0x44, 0xae, 0xb4, 0x06, 0x0f, 0x13, 0x58, 0x07, 0x99, + 0xc8, 0x51, 0x3d, 0xa4, 0xa0, 0xcf, 0xf4, 0x54, 0xc3, 0x55, 0x54, 0xb3, 0xa5, 0xec, 0xab, 0xee, + 0x7e, 0x69, 0x06, 0x13, 0xac, 0x24, 0x4a, 0x82, 0x7c, 0x0a, 0x1b, 0xae, 0x33, 0xbb, 0x1a, 0x31, + 0xab, 0x9a, 0xad, 0x6b, 0xaa, 0xbb, 0x2f, 0x55, 0xe0, 0x04, 0x61, 0x71, 0x3d, 0x47, 0x37, 0x3b, + 0x8a, 0xb6, 0x8f, 0xb4, 0x1b, 0x4a, 0xcf, 0x6b, 0x5f, 0x2a, 0x3d, 0x18, 0x7e, 0x3f, 0x19, 0x61, + 0x83, 0xd8, 0xac, 0x62, 0x93, 0x3d, 0xaf, 0x7d, 0x49, 0x6a, 0x40, 0x01, 0x2f, 0x46, 0x57, 0xbf, + 0x8d, 0x94, 0xb6, 0xe5, 0x90, 0xd2, 0x58, 0x1c, 0x92, 0x9a, 0x42, 0x1e, 0x5c, 0xa8, 0x33, 0xc0, + 0x96, 0xd5, 0x42, 0x95, 0x74, 0x63, 0xa7, 0x56, 0x5b, 0x93, 0xf3, 0x9c, 0xe5, 0xaa, 0xe5, 0xe0, + 0x80, 0xea, 0x58, 0xbe, 0x83, 0xf3, 0x34, 0xa0, 0x3a, 0x16, 0x77, 0xef, 0x32, 0x4c, 0x6b, 0x1a, + 0x9d, 0xb3, 0xae, 0x29, 0xec, 0x8c, 0xe5, 0x96, 0xc4, 0x3e, 0x67, 0x69, 0xda, 0x3a, 0x35, 0x60, + 0x31, 0xee, 0x4a, 0x97, 0xe1, 0x81, 0xc0, 0x59, 0x61, 0xe0, 0xd4, 0xc0, 0x2c, 0xa3, 0xd0, 0x65, + 0x98, 0xb6, 0x0f, 0x06, 0x81, 0x52, 0xdf, 0x1b, 0xed, 0x83, 0x28, 0xec, 0x22, 0xcc, 0xd8, 0xfb, + 0xf6, 0x20, 0xee, 0xc9, 0x30, 0x4e, 0xb2, 0xf7, 0xed, 0x28, 0xf0, 0x31, 0x72, 0xe0, 0x76, 0x90, + 0xa6, 0x7a, 0xa8, 0x55, 0x3a, 0x19, 0x36, 0x0f, 0x29, 0xa4, 0x45, 0x10, 0x35, 0x4d, 0x41, 0xa6, + 0xda, 0x34, 0x90, 0xa2, 0x3a, 0xc8, 0x54, 0xdd, 0xd2, 0xe9, 0xb0, 0x71, 0x51, 0xd3, 0x6a, 0x44, + 0x5b, 0x25, 0x4a, 0xe9, 0x49, 0x98, 0xb2, 0x9a, 0xd7, 0x35, 0x1a, 0x92, 0x8a, 0xed, 0xa0, 0xb6, + 0xfe, 0x4a, 0xe9, 0x51, 0xe2, 0xdf, 0x49, 0xac, 0x20, 0x01, 0xb9, 0x43, 0xc4, 0xd2, 0x13, 0x20, + 0x6a, 0xee, 0xbe, 0xea, 0xd8, 0x24, 0x27, 0xbb, 0xb6, 0xaa, 0xa1, 0xd2, 0x63, 0xd4, 0x94, 0xca, + 0xb7, 0xb9, 0x18, 0x6f, 0x09, 0xf7, 0x96, 0xde, 0xf6, 0x38, 0xe3, 0xe3, 0x74, 0x4b, 0x10, 0x19, + 0x63, 0x9b, 0x07, 0x11, 0xbb, 0xa2, 0xef, 0xc5, 0xf3, 0xc4, 0xac, 0x68, 0xef, 0xdb, 0xe1, 0xf7, + 0x3e, 0x02, 0x13, 0xd8, 0x32, 0x78, 0xe9, 0x13, 0xb4, 0x21, 0xb3, 0xf7, 0x43, 0x6f, 0xfc, 0xd0, + 0x7a, 0xe3, 0xb9, 0x0a, 0x14, 0xc2, 0xf1, 0x29, 0xe5, 0x80, 0x46, 0xa8, 0x28, 0xe0, 0x66, 0x65, + 0xb5, 0xbe, 0x86, 0xdb, 0x8c, 0x97, 0x6b, 0x62, 0x02, 0xb7, 0x3b, 0x9b, 0x1b, 0xbb, 0x35, 0x45, + 0xde, 0xdb, 0xde, 0xdd, 0xd8, 0xaa, 0x89, 0xc9, 0x70, 0x5f, 0xfd, 0xdd, 0x04, 0x14, 0xfb, 0x8f, + 0x48, 0xd2, 0xcf, 0xc2, 0x49, 0x7e, 0x9f, 0xe1, 0x22, 0x4f, 0xb9, 0xa5, 0x3b, 0x64, 0xcb, 0x74, + 0x55, 0x5a, 0xbe, 0xfc, 0x45, 0x9b, 0x61, 0x56, 0x0d, 0xe4, 0xbd, 0xa0, 0x3b, 0x78, 0x43, 0x74, + 0x55, 0x4f, 0xda, 0x84, 0xd3, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0xb6, 0x54, 0xa7, 0xa5, 0x04, 0x37, + 0x49, 0x8a, 0xaa, 0x69, 0xc8, 0x75, 0x2d, 0x5a, 0xaa, 0x7c, 0x96, 0x87, 0x4c, 0xab, 0xc1, 0x8c, + 0x83, 0x1c, 0x5e, 0x65, 0xa6, 0x91, 0x00, 0x4b, 0x1e, 0x15, 0x60, 0x0f, 0x42, 0xae, 0xab, 0xda, + 0x0a, 0x32, 0x3d, 0xe7, 0x80, 0x34, 0xc6, 0x59, 0x39, 0xdb, 0x55, 0xed, 0x1a, 0x7e, 0xfe, 0x68, + 0xce, 0x27, 0x3f, 0x48, 0x42, 0x21, 0xdc, 0x1c, 0xe3, 0xb3, 0x86, 0x46, 0xea, 0x88, 0x40, 0x32, + 0xcd, 0x23, 0xf7, 0x6d, 0xa5, 0x17, 0x56, 0x71, 0x81, 0xa9, 0x64, 0x68, 0xcb, 0x2a, 0x53, 0x24, + 0x2e, 0xee, 0x38, 0xb7, 0x20, 0xda, 0x22, 0x64, 0x65, 0xf6, 0x24, 0xad, 0x43, 0xe6, 0xba, 0x4b, + 0xb8, 0x33, 0x84, 0xfb, 0xd1, 0xfb, 0x73, 0x3f, 0xdf, 0x20, 0xe4, 0xb9, 0xe7, 0x1b, 0xca, 0x76, + 0x5d, 0xde, 0xaa, 0x6e, 0xca, 0x0c, 0x2e, 0x9d, 0x82, 0x94, 0xa1, 0xde, 0x3e, 0xe8, 0x2f, 0x45, + 0x44, 0x34, 0xaa, 0xe3, 0x4f, 0x41, 0xea, 0x16, 0x52, 0x6f, 0xf4, 0x17, 0x00, 0x22, 0xfa, 0x10, + 0x43, 0x7f, 0x11, 0xd2, 0xc4, 0x5f, 0x12, 0x00, 0xf3, 0x98, 0x38, 0x26, 0x65, 0x21, 0xb5, 0x5a, + 0x97, 0x71, 0xf8, 0x8b, 0x50, 0xa0, 0x52, 0x65, 0x67, 0xa3, 0xb6, 0x5a, 0x13, 0x13, 0x73, 0xcb, + 0x90, 0xa1, 0x4e, 0xc0, 0x5b, 0xc3, 0x77, 0x83, 0x38, 0xc6, 0x1e, 0x19, 0x87, 0xc0, 0xb5, 0x7b, + 0x5b, 0x2b, 0x35, 0x59, 0x4c, 0x84, 0x97, 0xd7, 0x85, 0x42, 0xb8, 0x2f, 0xfe, 0x68, 0x62, 0xea, + 0x3b, 0x02, 0xe4, 0x43, 0x7d, 0x2e, 0x6e, 0x50, 0x54, 0xc3, 0xb0, 0x6e, 0x29, 0xaa, 0xa1, 0xab, + 0x2e, 0x0b, 0x0a, 0x20, 0xa2, 0x2a, 0x96, 0x8c, 0xba, 0x68, 0x1f, 0xc9, 0xe0, 0xdf, 0x10, 0x40, + 0x8c, 0xb6, 0x98, 0x91, 0x01, 0x0a, 0x3f, 0xd5, 0x01, 0xbe, 0x2e, 0x40, 0xb1, 0xbf, 0xaf, 0x8c, + 0x0c, 0xef, 0xec, 0x4f, 0x75, 0x78, 0x6f, 0x27, 0x60, 0xa2, 0xaf, 0x9b, 0x1c, 0x75, 0x74, 0x9f, + 0x81, 0x29, 0xbd, 0x85, 0xba, 0xb6, 0xe5, 0x21, 0x53, 0x3b, 0x50, 0x0c, 0x74, 0x13, 0x19, 0xa5, + 0x39, 0x92, 0x28, 0x16, 0xef, 0xdf, 0xaf, 0x2e, 0x6c, 0x04, 0xb8, 0x4d, 0x0c, 0xab, 0x4c, 0x6f, + 0xac, 0xd5, 0xb6, 0x76, 0xea, 0xbb, 0xb5, 0xed, 0xd5, 0x97, 0x94, 0xbd, 0xed, 0x9f, 0xdf, 0xae, + 0xbf, 0xb0, 0x2d, 0x8b, 0x7a, 0xc4, 0xec, 0x43, 0xdc, 0xea, 0x3b, 0x20, 0x46, 0x07, 0x25, 0x9d, + 0x84, 0x61, 0xc3, 0x12, 0xc7, 0xa4, 0x69, 0x98, 0xdc, 0xae, 0x2b, 0x8d, 0x8d, 0xb5, 0x9a, 0x52, + 0xbb, 0x7a, 0xb5, 0xb6, 0xba, 0xdb, 0xa0, 0x37, 0x10, 0xbe, 0xf5, 0x6e, 0xff, 0xa6, 0x7e, 0x2d, + 0x09, 0xd3, 0x43, 0x46, 0x22, 0x55, 0xd9, 0xd9, 0x81, 0x1e, 0x67, 0x9e, 0x1e, 0x65, 0xf4, 0x0b, + 0xb8, 0xe4, 0xef, 0xa8, 0x8e, 0xc7, 0x8e, 0x1a, 0x4f, 0x00, 0xf6, 0x92, 0xe9, 0xe9, 0x6d, 0x1d, + 0x39, 0xec, 0xc2, 0x86, 0x1e, 0x28, 0x26, 0x03, 0x39, 0xbd, 0xb3, 0xf9, 0x19, 0x90, 0x6c, 0xcb, + 0xd5, 0x3d, 0xfd, 0x26, 0x52, 0x74, 0x93, 0xdf, 0xee, 0xe0, 0x03, 0x46, 0x4a, 0x16, 0xb9, 0x66, + 0xc3, 0xf4, 0x7c, 0x6b, 0x13, 0x75, 0xd4, 0x88, 0x35, 0x4e, 0xe0, 0x49, 0x59, 0xe4, 0x1a, 0xdf, + 0xfa, 0x2c, 0x14, 0x5a, 0x56, 0x0f, 0x77, 0x5d, 0xd4, 0x0e, 0xd7, 0x0b, 0x41, 0xce, 0x53, 0x99, + 0x6f, 0xc2, 0xfa, 0xe9, 0xe0, 0x5a, 0xa9, 0x20, 0xe7, 0xa9, 0x8c, 0x9a, 0x3c, 0x0e, 0x93, 0x6a, + 0xa7, 0xe3, 0x60, 0x72, 0x4e, 0x44, 0x4f, 0x08, 0x45, 0x5f, 0x4c, 0x0c, 0x67, 0x9f, 0x87, 0x2c, + 0xf7, 0x03, 0x2e, 0xc9, 0xd8, 0x13, 0x8a, 0x4d, 0x8f, 0xbd, 0x89, 0xf9, 0x9c, 0x9c, 0x35, 0xb9, + 0xf2, 0x2c, 0x14, 0x74, 0x57, 0x09, 0x6e, 0xc9, 0x13, 0x67, 0x12, 0xf3, 0x59, 0x39, 0xaf, 0xbb, + 0xfe, 0x0d, 0xe3, 0xdc, 0x9b, 0x09, 0x28, 0xf6, 0xdf, 0xf2, 0x4b, 0x6b, 0x90, 0x35, 0x2c, 0x4d, + 0x25, 0xa1, 0x45, 0x3f, 0x31, 0xcd, 0xc7, 0x7c, 0x18, 0x58, 0xd8, 0x64, 0xf6, 0xb2, 0x8f, 0x9c, + 0xfd, 0x17, 0x01, 0xb2, 0x5c, 0x2c, 0x9d, 0x80, 0x94, 0xad, 0x7a, 0xfb, 0x84, 0x2e, 0xbd, 0x92, + 0x10, 0x05, 0x99, 0x3c, 0x63, 0xb9, 0x6b, 0xab, 0x26, 0x09, 0x01, 0x26, 0xc7, 0xcf, 0x78, 0x5d, + 0x0d, 0xa4, 0xb6, 0xc8, 0xf1, 0xc3, 0xea, 0x76, 0x91, 0xe9, 0xb9, 0x7c, 0x5d, 0x99, 0x7c, 0x95, + 0x89, 0xa5, 0xa7, 0x60, 0xca, 0x73, 0x54, 0xdd, 0xe8, 0xb3, 0x4d, 0x11, 0x5b, 0x91, 0x2b, 0x7c, + 0xe3, 0x0a, 0x9c, 0xe2, 0xbc, 0x2d, 0xe4, 0xa9, 0xda, 0x3e, 0x6a, 0x05, 0xa0, 0x0c, 0xb9, 0x66, + 0x38, 0xc9, 0x0c, 0xd6, 0x98, 0x9e, 0x63, 0xe7, 0xbe, 0x2f, 0xc0, 0x14, 0x3f, 0x30, 0xb5, 0x7c, + 0x67, 0x6d, 0x01, 0xa8, 0xa6, 0x69, 0x79, 0x61, 0x77, 0x0d, 0x86, 0xf2, 0x00, 0x6e, 0xa1, 0xea, + 0x83, 0xe4, 0x10, 0xc1, 0x6c, 0x17, 0x20, 0xd0, 0x1c, 0xe9, 0xb6, 0xd3, 0x90, 0x67, 0x9f, 0x70, + 0xc8, 0x77, 0x40, 0x7a, 0xc4, 0x06, 0x2a, 0xc2, 0x27, 0x2b, 0x69, 0x06, 0xd2, 0x4d, 0xd4, 0xd1, + 0x4d, 0x76, 0x31, 0x4b, 0x1f, 0xf8, 0x45, 0x48, 0xca, 0xbf, 0x08, 0x59, 0xf9, 0x34, 0x4c, 0x6b, + 0x56, 0x37, 0x3a, 0xdc, 0x15, 0x31, 0x72, 0xcc, 0x77, 0xaf, 0x09, 0x2f, 0x43, 0xd0, 0x62, 0xbe, + 0x2f, 0x08, 0x5f, 0x4a, 0x24, 0xd7, 0x77, 0x56, 0xbe, 0x9a, 0x98, 0x5d, 0xa7, 0xd0, 0x1d, 0x3e, + 0x53, 0x19, 0xb5, 0x0d, 0xa4, 0xe1, 0xd1, 0xc3, 0x97, 0x9f, 0x82, 0xa7, 0x3b, 0xba, 0xb7, 0xdf, + 0x6b, 0x2e, 0x68, 0x56, 0x77, 0xb1, 0x63, 0x75, 0xac, 0xe0, 0xd3, 0x27, 0x7e, 0x22, 0x0f, 0xe4, + 0x2f, 0xf6, 0xf9, 0x33, 0xe7, 0x4b, 0x67, 0x63, 0xbf, 0x95, 0x56, 0xb6, 0x61, 0x9a, 0x19, 0x2b, + 0xe4, 0xfb, 0x0b, 0x3d, 0x45, 0x48, 0xf7, 0xbd, 0xc3, 0x2a, 0x7d, 0xfd, 0x1d, 0x52, 0xae, 0xe5, + 0x29, 0x06, 0xc5, 0x3a, 0x7a, 0xd0, 0xa8, 0xc8, 0xf0, 0x40, 0x1f, 0x1f, 0xdd, 0x9a, 0xc8, 0x89, + 0x61, 0xfc, 0x2e, 0x63, 0x9c, 0x0e, 0x31, 0x36, 0x18, 0xb4, 0xb2, 0x0a, 0x13, 0xc7, 0xe1, 0xfa, + 0x27, 0xc6, 0x55, 0x40, 0x61, 0x92, 0x75, 0x98, 0x24, 0x24, 0x5a, 0xcf, 0xf5, 0xac, 0x2e, 0xc9, + 0x7b, 0xf7, 0xa7, 0xf9, 0xe7, 0x77, 0xe8, 0x5e, 0x29, 0x62, 0xd8, 0xaa, 0x8f, 0xaa, 0x54, 0x80, + 0x7c, 0x72, 0x6a, 0x21, 0xcd, 0x88, 0x61, 0x78, 0x8b, 0x0d, 0xc4, 0xb7, 0xaf, 0x7c, 0x0a, 0x66, + 0xf0, 0xdf, 0x24, 0x2d, 0x85, 0x47, 0x12, 0x7f, 0xe1, 0x55, 0xfa, 0xfe, 0xab, 0x74, 0x3b, 0x4e, + 0xfb, 0x04, 0xa1, 0x31, 0x85, 0x56, 0xb1, 0x83, 0x3c, 0x0f, 0x39, 0xae, 0xa2, 0x1a, 0xc3, 0x86, + 0x17, 0xba, 0x31, 0x28, 0x7d, 0xfe, 0xdd, 0xfe, 0x55, 0x5c, 0xa7, 0xc8, 0xaa, 0x61, 0x54, 0xf6, + 0xe0, 0xe4, 0x90, 0xa8, 0x18, 0x81, 0xf3, 0x35, 0xc6, 0x39, 0x33, 0x10, 0x19, 0x98, 0x76, 0x07, + 0xb8, 0xdc, 0x5f, 0xcb, 0x11, 0x38, 0xff, 0x90, 0x71, 0x4a, 0x0c, 0xcb, 0x97, 0x14, 0x33, 0x3e, + 0x0f, 0x53, 0x37, 0x91, 0xd3, 0xb4, 0x5c, 0x76, 0x4b, 0x33, 0x02, 0xdd, 0xeb, 0x8c, 0x6e, 0x92, + 0x01, 0xc9, 0xb5, 0x0d, 0xe6, 0xba, 0x0c, 0xd9, 0xb6, 0xaa, 0xa1, 0x11, 0x28, 0xbe, 0xc0, 0x28, + 0xc6, 0xb1, 0x3d, 0x86, 0x56, 0xa1, 0xd0, 0xb1, 0x58, 0x65, 0x8a, 0x87, 0xbf, 0xc1, 0xe0, 0x79, + 0x8e, 0x61, 0x14, 0xb6, 0x65, 0xf7, 0x0c, 0x5c, 0xb6, 0xe2, 0x29, 0xfe, 0x88, 0x53, 0x70, 0x0c, + 0xa3, 0x38, 0x86, 0x5b, 0xff, 0x98, 0x53, 0xb8, 0x21, 0x7f, 0x3e, 0x07, 0x79, 0xcb, 0x34, 0x0e, + 0x2c, 0x73, 0x94, 0x41, 0x7c, 0x91, 0x31, 0x00, 0x83, 0x60, 0x82, 0x2b, 0x90, 0x1b, 0x75, 0x21, + 0xfe, 0xf4, 0x5d, 0xbe, 0x3d, 0xf8, 0x0a, 0xac, 0xc3, 0x24, 0x4f, 0x50, 0xba, 0x65, 0x8e, 0x40, + 0xf1, 0x65, 0x46, 0x51, 0x0c, 0xc1, 0xd8, 0x34, 0x3c, 0xe4, 0x7a, 0x1d, 0x34, 0x0a, 0xc9, 0x9b, + 0x7c, 0x1a, 0x0c, 0xc2, 0x5c, 0xd9, 0x44, 0xa6, 0xb6, 0x3f, 0x1a, 0xc3, 0x57, 0xb8, 0x2b, 0x39, + 0x06, 0x53, 0xac, 0xc2, 0x44, 0x57, 0x75, 0xdc, 0x7d, 0xd5, 0x18, 0x69, 0x39, 0xfe, 0x8c, 0x71, + 0x14, 0x7c, 0x10, 0xf3, 0x48, 0xcf, 0x3c, 0x0e, 0xcd, 0x57, 0xb9, 0x47, 0x42, 0x30, 0xb6, 0xf5, + 0x5c, 0x8f, 0x5c, 0x69, 0x1d, 0x87, 0xed, 0xcf, 0xf9, 0xd6, 0xa3, 0xd8, 0xad, 0x30, 0xe3, 0x15, + 0xc8, 0xb9, 0xfa, 0xed, 0x91, 0x68, 0xfe, 0x82, 0xaf, 0x34, 0x01, 0x60, 0xf0, 0x4b, 0x70, 0x6a, + 0x68, 0x99, 0x18, 0x81, 0xec, 0x2f, 0x19, 0xd9, 0x89, 0x21, 0xa5, 0x82, 0xa5, 0x84, 0xe3, 0x52, + 0xfe, 0x15, 0x4f, 0x09, 0x28, 0xc2, 0xb5, 0x83, 0xcf, 0x0a, 0xae, 0xda, 0x3e, 0x9e, 0xd7, 0xfe, + 0x9a, 0x7b, 0x8d, 0x62, 0xfb, 0xbc, 0xb6, 0x0b, 0x27, 0x18, 0xe3, 0xf1, 0xd6, 0xf5, 0x6b, 0x3c, + 0xb1, 0x52, 0xf4, 0x5e, 0xff, 0xea, 0x7e, 0x1a, 0x66, 0x7d, 0x77, 0xf2, 0xa6, 0xd4, 0x55, 0xba, + 0xaa, 0x3d, 0x02, 0xf3, 0xd7, 0x19, 0x33, 0xcf, 0xf8, 0x7e, 0x57, 0xeb, 0x6e, 0xa9, 0x36, 0x26, + 0x7f, 0x11, 0x4a, 0x9c, 0xbc, 0x67, 0x3a, 0x48, 0xb3, 0x3a, 0xa6, 0x7e, 0x1b, 0xb5, 0x46, 0xa0, + 0xfe, 0x9b, 0xc8, 0x52, 0xed, 0x85, 0xe0, 0x98, 0x79, 0x03, 0x44, 0xbf, 0x57, 0x51, 0xf4, 0xae, + 0x6d, 0x39, 0x5e, 0x0c, 0xe3, 0x37, 0xf8, 0x4a, 0xf9, 0xb8, 0x0d, 0x02, 0xab, 0xd4, 0xa0, 0x48, + 0x1e, 0x47, 0x0d, 0xc9, 0xbf, 0x65, 0x44, 0x13, 0x01, 0x8a, 0x25, 0x0e, 0xcd, 0xea, 0xda, 0xaa, + 0x33, 0x4a, 0xfe, 0xfb, 0x3b, 0x9e, 0x38, 0x18, 0x84, 0x25, 0x0e, 0xef, 0xc0, 0x46, 0xb8, 0xda, + 0x8f, 0xc0, 0xf0, 0x4d, 0x9e, 0x38, 0x38, 0x86, 0x51, 0xf0, 0x86, 0x61, 0x04, 0x8a, 0xbf, 0xe7, + 0x14, 0x1c, 0x83, 0x29, 0x3e, 0x19, 0x14, 0x5a, 0x07, 0x75, 0x74, 0xd7, 0x73, 0x68, 0x2b, 0x7c, + 0x7f, 0xaa, 0x6f, 0xbd, 0xdb, 0xdf, 0x84, 0xc9, 0x21, 0x28, 0xce, 0x44, 0xec, 0x0a, 0x95, 0x9c, + 0x94, 0xe2, 0x07, 0xf6, 0x6d, 0x9e, 0x89, 0x42, 0x30, 0x3c, 0xb6, 0x50, 0x87, 0x88, 0xdd, 0xae, + 0xe1, 0xf3, 0xc1, 0x08, 0x74, 0xdf, 0x89, 0x0c, 0xae, 0xc1, 0xb1, 0x98, 0x33, 0xd4, 0xff, 0xf4, + 0xcc, 0x1b, 0xe8, 0x60, 0xa4, 0xe8, 0xfc, 0x87, 0x48, 0xff, 0xb3, 0x47, 0x91, 0x34, 0x87, 0x4c, + 0x46, 0xfa, 0x29, 0x29, 0xee, 0xc7, 0x3a, 0xa5, 0x5f, 0xba, 0xc7, 0xe6, 0xdb, 0xdf, 0x4e, 0x55, + 0x36, 0x71, 0x90, 0xf7, 0x37, 0x3d, 0xf1, 0x64, 0xaf, 0xde, 0xf3, 0xe3, 0xbc, 0xaf, 0xe7, 0xa9, + 0x5c, 0x85, 0x89, 0xbe, 0x86, 0x27, 0x9e, 0xea, 0x97, 0x19, 0x55, 0x21, 0xdc, 0xef, 0x54, 0x96, + 0x21, 0x85, 0x9b, 0x97, 0x78, 0xf8, 0xaf, 0x30, 0x38, 0x31, 0xaf, 0x7c, 0x1c, 0xb2, 0xbc, 0x69, + 0x89, 0x87, 0xfe, 0x2a, 0x83, 0xfa, 0x10, 0x0c, 0xe7, 0x0d, 0x4b, 0x3c, 0xfc, 0xd7, 0x38, 0x9c, + 0x43, 0x30, 0x7c, 0x74, 0x17, 0xfe, 0xe3, 0xaf, 0xa7, 0x58, 0xd1, 0xe1, 0xbe, 0xbb, 0x02, 0xe3, + 0xac, 0x53, 0x89, 0x47, 0x7f, 0x96, 0xbd, 0x9c, 0x23, 0x2a, 0x17, 0x21, 0x3d, 0xa2, 0xc3, 0x7f, + 0x83, 0x41, 0xa9, 0x7d, 0x65, 0x15, 0xf2, 0xa1, 0xee, 0x24, 0x1e, 0xfe, 0x9b, 0x0c, 0x1e, 0x46, + 0xe1, 0xa1, 0xb3, 0xee, 0x24, 0x9e, 0xe0, 0xb7, 0xf8, 0xd0, 0x19, 0x02, 0xbb, 0x8d, 0x37, 0x26, + 0xf1, 0xe8, 0xdf, 0xe6, 0x5e, 0xe7, 0x90, 0xca, 0x73, 0x90, 0xf3, 0x8b, 0x4d, 0x3c, 0xfe, 0x77, + 0x18, 0x3e, 0xc0, 0x60, 0x0f, 0x84, 0x8a, 0x5d, 0x3c, 0xc5, 0xef, 0x72, 0x0f, 0x84, 0x50, 0x78, + 0x1b, 0x45, 0x1b, 0x98, 0x78, 0xa6, 0xdf, 0xe3, 0xdb, 0x28, 0xd2, 0xbf, 0xe0, 0xd5, 0x24, 0x39, + 0x3f, 0x9e, 0xe2, 0xf7, 0xf9, 0x6a, 0x12, 0x7b, 0x3c, 0x8c, 0x68, 0x47, 0x10, 0xcf, 0xf1, 0x07, + 0x7c, 0x18, 0x91, 0x86, 0xa0, 0xb2, 0x03, 0xd2, 0x60, 0x37, 0x10, 0xcf, 0xf7, 0x39, 0xc6, 0x37, + 0x35, 0xd0, 0x0c, 0x54, 0x5e, 0x80, 0x13, 0xc3, 0x3b, 0x81, 0x78, 0xd6, 0xcf, 0xdf, 0x8b, 0x9c, + 0xdd, 0xc2, 0x8d, 0x40, 0x65, 0x37, 0x28, 0x29, 0xe1, 0x2e, 0x20, 0x9e, 0xf6, 0xb5, 0x7b, 0xfd, + 0x89, 0x3b, 0xdc, 0x04, 0x54, 0xaa, 0x00, 0x41, 0x01, 0x8e, 0xe7, 0x7a, 0x9d, 0x71, 0x85, 0x40, + 0x78, 0x6b, 0xb0, 0xfa, 0x1b, 0x8f, 0xff, 0x02, 0xdf, 0x1a, 0x0c, 0x81, 0xb7, 0x06, 0x2f, 0xbd, + 0xf1, 0xe8, 0x37, 0xf8, 0xd6, 0xe0, 0x10, 0x1c, 0xd9, 0xa1, 0xea, 0x16, 0xcf, 0xf0, 0x45, 0x1e, + 0xd9, 0x21, 0x54, 0x65, 0x1b, 0xa6, 0x06, 0x0a, 0x62, 0x3c, 0xd5, 0x97, 0x18, 0x95, 0x18, 0xad, + 0x87, 0xe1, 0xe2, 0xc5, 0x8a, 0x61, 0x3c, 0xdb, 0x9f, 0x44, 0x8a, 0x17, 0xab, 0x85, 0x95, 0x2b, + 0x90, 0x35, 0x7b, 0x86, 0x81, 0x37, 0x8f, 0x74, 0xff, 0x1f, 0xd8, 0x95, 0xfe, 0xfd, 0x03, 0xe6, + 0x1d, 0x0e, 0xa8, 0x2c, 0x43, 0x1a, 0x75, 0x9b, 0xa8, 0x15, 0x87, 0xfc, 0x8f, 0x0f, 0x78, 0xc2, + 0xc4, 0xd6, 0x95, 0xe7, 0x00, 0xe8, 0xd5, 0x08, 0xf9, 0xec, 0x17, 0x83, 0xfd, 0xcf, 0x0f, 0xd8, + 0x4f, 0x5f, 0x02, 0x48, 0x40, 0x40, 0x7f, 0x48, 0x73, 0x7f, 0x82, 0x77, 0xfb, 0x09, 0xc8, 0x8a, + 0x5c, 0x86, 0xf1, 0xeb, 0xae, 0x65, 0x7a, 0x6a, 0x27, 0x0e, 0xfd, 0x5f, 0x0c, 0xcd, 0xed, 0xb1, + 0xc3, 0xba, 0x96, 0x83, 0x3c, 0xb5, 0xe3, 0xc6, 0x61, 0xff, 0x9b, 0x61, 0x7d, 0x00, 0x06, 0x6b, + 0xaa, 0xeb, 0x8d, 0x32, 0xef, 0x1f, 0x73, 0x30, 0x07, 0xe0, 0x41, 0xe3, 0xbf, 0x6f, 0xa0, 0x83, + 0x38, 0xec, 0x7b, 0x7c, 0xd0, 0xcc, 0xbe, 0xf2, 0x71, 0xc8, 0xe1, 0x3f, 0xe9, 0xef, 0xd9, 0x62, + 0xc0, 0xff, 0xc3, 0xc0, 0x01, 0x02, 0xbf, 0xd9, 0xf5, 0x5a, 0x9e, 0x1e, 0xef, 0xec, 0xff, 0x65, + 0x2b, 0xcd, 0xed, 0x2b, 0x55, 0xc8, 0xbb, 0x5e, 0xab, 0xd5, 0x63, 0xfd, 0x69, 0x0c, 0xfc, 0xff, + 0x3e, 0xf0, 0xaf, 0x2c, 0x7c, 0x0c, 0x5e, 0xed, 0x5b, 0x37, 0x3c, 0xdb, 0x22, 0x9f, 0x39, 0xe2, + 0x18, 0xee, 0x31, 0x86, 0x10, 0x64, 0xa5, 0x36, 0xfc, 0xfa, 0x16, 0xd6, 0xad, 0x75, 0x8b, 0x5e, + 0xdc, 0xbe, 0x3c, 0x17, 0x7f, 0x03, 0x0b, 0xaf, 0xa5, 0xe1, 0x21, 0xcd, 0xea, 0x36, 0x2d, 0x77, + 0x31, 0x94, 0xcc, 0x17, 0x2d, 0x93, 0x71, 0x4a, 0x49, 0xcb, 0x44, 0xb3, 0xc7, 0xbb, 0xcb, 0x9d, + 0x3b, 0x05, 0xe9, 0x46, 0xaf, 0xd9, 0x3c, 0x90, 0x44, 0x48, 0xba, 0xbd, 0x26, 0xfb, 0x5d, 0x14, + 0xfe, 0x73, 0xee, 0x07, 0x49, 0xc8, 0x37, 0xd4, 0xae, 0x6d, 0xa0, 0xba, 0x89, 0xea, 0x6d, 0xa9, + 0x04, 0x19, 0x32, 0xd5, 0x67, 0x89, 0x91, 0x70, 0x6d, 0x4c, 0x66, 0xcf, 0xbe, 0x66, 0x89, 0xdc, + 0x71, 0x27, 0x7c, 0xcd, 0x92, 0xaf, 0x39, 0x47, 0xaf, 0xb8, 0x7d, 0xcd, 0x39, 0x5f, 0x73, 0x9e, + 0x5c, 0x74, 0x27, 0x7d, 0xcd, 0x79, 0x5f, 0xb3, 0x4c, 0x3e, 0xe4, 0x4c, 0xf8, 0x9a, 0x65, 0x5f, + 0x73, 0x81, 0x7c, 0xba, 0x49, 0xf9, 0x9a, 0x0b, 0xbe, 0xe6, 0x22, 0xf9, 0x62, 0x33, 0xe5, 0x6b, + 0x2e, 0xfa, 0x9a, 0x4b, 0xe4, 0x2b, 0x8d, 0xe4, 0x6b, 0x2e, 0xf9, 0x9a, 0xcb, 0xe4, 0xe7, 0x4f, + 0xe3, 0xbe, 0xe6, 0xb2, 0x34, 0x0b, 0xe3, 0x74, 0x66, 0xcf, 0x90, 0x4f, 0xf9, 0x93, 0xd7, 0xc6, + 0x64, 0x2e, 0x08, 0x74, 0xcf, 0x92, 0x9f, 0x38, 0x65, 0x02, 0xdd, 0xb3, 0x81, 0x6e, 0x89, 0xfc, + 0x4f, 0x0b, 0x31, 0xd0, 0x2d, 0x05, 0xba, 0x73, 0xa5, 0x09, 0x1c, 0x21, 0x81, 0xee, 0x5c, 0xa0, + 0x3b, 0x5f, 0x2a, 0x62, 0xff, 0x07, 0xba, 0xf3, 0x81, 0x6e, 0xb9, 0x34, 0x79, 0x46, 0x98, 0x2f, + 0x04, 0xba, 0x65, 0xe9, 0x69, 0xc8, 0xbb, 0xbd, 0xa6, 0xc2, 0x72, 0x3d, 0xf9, 0x29, 0x55, 0x7e, + 0x09, 0x16, 0x70, 0x44, 0x90, 0x45, 0xbd, 0x36, 0x26, 0x83, 0xdb, 0x6b, 0xb2, 0x54, 0xbc, 0x52, + 0x00, 0x72, 0x03, 0xa5, 0x90, 0x5f, 0x40, 0xaf, 0xac, 0xbd, 0x75, 0xb7, 0x3c, 0xf6, 0xbd, 0xbb, + 0xe5, 0xb1, 0x7f, 0xbd, 0x5b, 0x1e, 0x7b, 0xfb, 0x6e, 0x59, 0x78, 0xef, 0x6e, 0x59, 0x78, 0xff, + 0x6e, 0x59, 0xb8, 0x73, 0x58, 0x16, 0xbe, 0x72, 0x58, 0x16, 0xbe, 0x76, 0x58, 0x16, 0xbe, 0x75, + 0x58, 0x16, 0xde, 0x3a, 0x2c, 0x8f, 0x7d, 0xef, 0xb0, 0x2c, 0xbc, 0x7d, 0x58, 0x16, 0x7e, 0x74, + 0x58, 0x1e, 0x7b, 0xef, 0xb0, 0x2c, 0xbc, 0x7f, 0x58, 0x1e, 0xbb, 0xf3, 0xc3, 0xf2, 0x58, 0x33, + 0x43, 0xc2, 0xe8, 0xdc, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x74, 0xac, 0x53, 0x91, 0x38, 0x35, + 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2244,6 +2250,9 @@ return dAtA } func (m *Subby) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Sub) @@ -2257,6 +2266,9 @@ } func (m *SampleOneOf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TestOneof != nil { @@ -2269,84 +2281,126 @@ } func (m *SampleOneOf_Field1) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field2) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field3)) return n } func (m *SampleOneOf_Field4) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field4)) return n } func (m *SampleOneOf_Field5) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field5)) return n } func (m *SampleOneOf_Field6) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovOne(uint64(m.Field6)) return n } func (m *SampleOneOf_Field7) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field7)) return n } func (m *SampleOneOf_Field8) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sozOne(uint64(m.Field8)) return n } func (m *SampleOneOf_Field9) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field10) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 5 return n } func (m *SampleOneOf_Field11) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field12) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *SampleOneOf_Field13) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *SampleOneOf_Field14) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Field14) @@ -2354,6 +2408,9 @@ return n } func (m *SampleOneOf_Field15) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field15 != nil { @@ -2363,6 +2420,9 @@ return n } func (m *SampleOneOf_SubMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.SubMessage != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/oneof3/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/oneof3/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -29,4 +29,4 @@ regenerate: go install github.com/gogo/protobuf/protoc-gen-combo go install github.com/gogo/protobuf/protoc-gen-gogo - protoc-gen-combo --version="3.0.0" --gogo_out=. --proto_path=../../../../../:../../protobuf/:. one.proto + protoc-gen-combo --version="3.0.0" --gogo_out=. --proto_path=../../protobuf/:../../../../../:. one.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/packed/packed.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/packed/packed.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/packed/packed.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/packed/packed.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1190,8 +1190,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -1239,8 +1241,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -1296,6 +1300,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -1358,6 +1373,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -1420,6 +1446,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -1482,6 +1519,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -1545,6 +1593,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -1609,6 +1668,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -1663,8 +1733,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -1710,8 +1782,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -1757,8 +1831,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -1804,8 +1880,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -1860,6 +1938,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -1965,8 +2048,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -2014,8 +2099,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -2071,6 +2158,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -2133,6 +2231,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -2195,6 +2304,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -2257,6 +2377,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -2320,6 +2451,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -2384,6 +2526,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -2438,8 +2591,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -2485,8 +2640,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -2532,8 +2689,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -2579,8 +2738,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -2635,6 +2796,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -2740,8 +2906,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -2789,8 +2957,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -2846,6 +3016,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -2908,6 +3089,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -2970,6 +3162,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -3032,6 +3235,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -3095,6 +3309,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -3159,6 +3384,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -3213,8 +3449,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -3260,8 +3498,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -3307,8 +3547,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -3354,8 +3596,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -3410,6 +3654,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { @@ -3515,8 +3764,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field1) == 0 { - m.Field1 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field1) == 0 { + m.Field1 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -3564,8 +3815,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -3621,6 +3874,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -3683,6 +3947,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field4) == 0 { + m.Field4 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -3745,6 +4020,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field5) == 0 { + m.Field5 = make([]uint32, 0, elementCount) + } for iNdEx < postIndex { var v uint32 for shift := uint(0); ; shift += 7 { @@ -3807,6 +4093,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field6) == 0 { + m.Field6 = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -3870,6 +4167,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -3934,6 +4242,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Field8) == 0 { + m.Field8 = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -3988,8 +4307,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field9) == 0 { - m.Field9 = make([]uint32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field9) == 0 { + m.Field9 = make([]uint32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -4035,8 +4356,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field10) == 0 { - m.Field10 = make([]int32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field10) == 0 { + m.Field10 = make([]int32, 0, elementCount) } for iNdEx < postIndex { var v int32 @@ -4082,8 +4405,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field11) == 0 { - m.Field11 = make([]uint64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field11) == 0 { + m.Field11 = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -4129,8 +4454,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field12) == 0 { - m.Field12 = make([]int64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field12) == 0 { + m.Field12 = make([]int64, 0, elementCount) } for iNdEx < postIndex { var v int64 @@ -4185,6 +4512,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.Field13) == 0 { + m.Field13 = make([]bool, 0, elementCount) + } for iNdEx < postIndex { var v int for shift := uint(0); ; shift += 7 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/packed/packed_test.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/packed/packed_test.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/packed/packed_test.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/packed/packed_test.go 2018-11-22 20:53:45.000000000 +0000 @@ -39,6 +39,113 @@ "unsafe" ) +func BenchmarkVarintIssue436withCount(b *testing.B) { + var arraySizes = []struct { + name string + value int64 + }{ + {"2^0_ints", 1 << 0}, + {"2^1_ints", 1 << 1}, + {"2^2_ints", 1 << 2}, + {"2^3_ints", 1 << 3}, + {"2^4_ints", 1 << 4}, + {"2^8_ints", 1 << 8}, + {"2^16_ints", 1 << 16}, + {"2^20_ints", 1 << 20}, + {"2^24_ints", 1 << 24}, + } + + var varintSizes = []struct { + name string + value int64 + }{ + {"max_int 2^7-4", 1<<7 - 4}, + {"max_int 2^15-4", 1<<15 - 4}, + {"max_int 2^31-4", 1<<31 - 4}, + {"max_int 2^63-4", 1<<63 - 4}, + } + + for _, arraySize := range arraySizes { + for _, varintSize := range varintSizes { + seed := time.Now().UnixNano() + rng := math_rand.New(math_rand.NewSource(seed)) + buf := make([]int64, arraySize.value) + for j := range buf { + buf[j] = rng.Int63n(varintSize.value) + } + + b.Run(arraySize.name+", "+varintSize.name, func(b *testing.B) { + msg := &NinRepNative{ + Field8: buf, + } + + data, err := proto.Marshal(msg) + if err != nil { + b.Fatal(err) + } + + normalmsg := &NinRepNative{} + + for i := 0; i < b.N; i++ { + err = proto.Unmarshal(data, normalmsg) + if err != nil { + b.Fatal(err) + } + } + }) + } + } +} + +func TestVarintIssue436(t *testing.T) { + n := 1 << 22 // Makes for 32 MiB + + m := &runtime.MemStats{} + + msgNormal := &NinRepNative{ + Field8: make([]int64, n), + } + dataNormal, err := proto.Marshal(msgNormal) + if err != nil { + t.Fatal(err) + } + + normalmsg := &NinRepNative{} + runtime.ReadMemStats(m) + beforeNormal := m.TotalAlloc + err = proto.Unmarshal(dataNormal, normalmsg) + runtime.ReadMemStats(m) + afterNormal := m.TotalAlloc + if err != nil { + t.Fatal(err) + } + + msgPacked := &NinRepPackedNative{ + Field8: make([]int64, n), + } + dataPacked, err := proto.Marshal(msgPacked) + if err != nil { + t.Fatal(err) + } + + packedmsg := &NinRepPackedNative{} + runtime.ReadMemStats(m) + beforePacked := m.TotalAlloc + err = proto.Unmarshal(dataPacked, packedmsg) + runtime.ReadMemStats(m) + afterPacked := m.TotalAlloc + if err != nil { + t.Fatal(err) + } + + totalNormal := afterNormal - beforeNormal + totalPacked := afterPacked - beforePacked + usedRatio := float64(totalPacked) / float64(totalNormal) + if usedRatio > 0.5 { + t.Fatalf("unmarshaling packed msg allocated too much memory:\nnormal:\t\t%d bytes\npacked:\t\t%d bytes\nused ratio:\t%.2f%%", totalNormal, totalPacked, usedRatio*100) + } +} + func TestIssue436(t *testing.T) { n := 1 << 22 // Makes for 32 MiB diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/protosize/protosize.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/protosize/protosize.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/protosize/protosize.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/protosize/protosize.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -316,6 +316,9 @@ return dAtA } func (m *SizeMessage) ProtoSize() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Size != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/required/requiredexample.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/required/requiredexample.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/required/requiredexample.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/required/requiredexample.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -995,6 +995,9 @@ return dAtA } func (m *RequiredExample) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.TheRequiredString != nil { @@ -1018,6 +1021,9 @@ } func (m *NidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -1046,6 +1052,9 @@ } func (m *NinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -1102,6 +1111,9 @@ } func (m *NestedNinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NestedNinOpts) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/sizeunderscore/sizeunderscore.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/sizeunderscore/sizeunderscore.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/sizeunderscore/sizeunderscore.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/sizeunderscore/sizeunderscore.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -287,6 +287,9 @@ return dAtA } func (m *SizeMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Size_ != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/stdtypes/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/stdtypes/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/stdtypes/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/stdtypes/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -31,7 +31,8 @@ go install github.com/gogo/protobuf/protoc-gen-gogo protoc-min-version --version="3.0.0" --gogo_out=\ Mgoogle/protobuf/duration.proto=github.com/gogo/protobuf/types,\ - Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types\ + Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types,\ + Mgoogle/protobuf/wrappers.proto=github.com/gogo/protobuf/types\ :. \ --proto_path=../../../../../:../../protobuf/:. stdtypes.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/stdtypes/stdtypes.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/stdtypes/stdtypes.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/stdtypes/stdtypes.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/stdtypes/stdtypes.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -35,6 +35,24 @@ NullableDuration *time.Duration `protobuf:"bytes,2,opt,name=nullableDuration,stdduration" json:"nullableDuration,omitempty"` Timestamp time.Time `protobuf:"bytes,3,opt,name=timestamp,stdtime" json:"timestamp"` Duration time.Duration `protobuf:"bytes,4,opt,name=duration,stdduration" json:"duration"` + NullableDouble *float64 `protobuf:"bytes,5,opt,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NonnullDouble float64 `protobuf:"bytes,6,opt,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NullableFloat *float32 `protobuf:"bytes,7,opt,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NonnullFloat float32 `protobuf:"bytes,8,opt,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NullableInt64 *int64 `protobuf:"bytes,9,opt,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NonnullInt64 int64 `protobuf:"bytes,10,opt,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NullableUInt64 *uint64 `protobuf:"bytes,11,opt,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NonnullUInt64 uint64 `protobuf:"bytes,12,opt,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NullableInt32 *int32 `protobuf:"bytes,13,opt,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NonnullInt32 int32 `protobuf:"bytes,14,opt,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NullableUInt32 *uint32 `protobuf:"bytes,15,opt,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NonnullUInt32 uint32 `protobuf:"bytes,16,opt,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NullableBool *bool `protobuf:"bytes,17,opt,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NonnullBool bool `protobuf:"bytes,18,opt,name=nonnullBool,wktptr" json:"nonnullBool"` + NullableString *string `protobuf:"bytes,19,opt,name=nullableString,wktptr" json:"nullableString,omitempty"` + NonnullString string `protobuf:"bytes,20,opt,name=nonnullString,wktptr" json:"nonnullString"` + NullableBytes *[]byte `protobuf:"bytes,21,opt,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + NonnullBytes []byte `protobuf:"bytes,22,opt,name=nonnullBytes,wktptr" json:"nonnullBytes"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -44,7 +62,7 @@ func (m *StdTypes) String() string { return proto.CompactTextString(m) } func (*StdTypes) ProtoMessage() {} func (*StdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_stdtypes_bc26b660d02d7cef, []int{0} + return fileDescriptor_stdtypes_ce26a3b6156de25d, []int{0} } func (m *StdTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StdTypes.Unmarshal(m, b) @@ -92,11 +110,155 @@ return 0 } +func (m *StdTypes) GetNullableDouble() *float64 { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *StdTypes) GetNonnullDouble() float64 { + if m != nil { + return m.NonnullDouble + } + return 0 +} + +func (m *StdTypes) GetNullableFloat() *float32 { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *StdTypes) GetNonnullFloat() float32 { + if m != nil { + return m.NonnullFloat + } + return 0 +} + +func (m *StdTypes) GetNullableInt64() *int64 { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *StdTypes) GetNonnullInt64() int64 { + if m != nil { + return m.NonnullInt64 + } + return 0 +} + +func (m *StdTypes) GetNullableUInt64() *uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *StdTypes) GetNonnullUInt64() uint64 { + if m != nil { + return m.NonnullUInt64 + } + return 0 +} + +func (m *StdTypes) GetNullableInt32() *int32 { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *StdTypes) GetNonnullInt32() int32 { + if m != nil { + return m.NonnullInt32 + } + return 0 +} + +func (m *StdTypes) GetNullableUInt32() *uint32 { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *StdTypes) GetNonnullUInt32() uint32 { + if m != nil { + return m.NonnullUInt32 + } + return 0 +} + +func (m *StdTypes) GetNullableBool() *bool { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *StdTypes) GetNonnullBool() bool { + if m != nil { + return m.NonnullBool + } + return false +} + +func (m *StdTypes) GetNullableString() *string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *StdTypes) GetNonnullString() string { + if m != nil { + return m.NonnullString + } + return "" +} + +func (m *StdTypes) GetNullableBytes() *[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *StdTypes) GetNonnullBytes() []byte { + if m != nil { + return m.NonnullBytes + } + return []byte{} +} + type RepStdTypes struct { NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` + NullableDouble []*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NonnullDouble []float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NullableFloat []*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NonnullFloat []float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NullableInt64 []*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NonnullInt64 []int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NullableUInt64 []*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NonnullUInt64 []uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NullableInt32 []*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NonnullInt32 []int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NullableUInt32 []*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NonnullUInt32 []uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NullableBool []*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NonnullBool []bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool"` + NullableString []*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty"` + NonnullString []string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString"` + NullableBytes []*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + NonnullBytes [][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -106,7 +268,7 @@ func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } func (*RepStdTypes) ProtoMessage() {} func (*RepStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_stdtypes_bc26b660d02d7cef, []int{1} + return fileDescriptor_stdtypes_ce26a3b6156de25d, []int{1} } func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepStdTypes.Unmarshal(m, b) @@ -154,11 +316,155 @@ return nil } +func (m *RepStdTypes) GetNullableDouble() []*float64 { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *RepStdTypes) GetNonnullDouble() []float64 { + if m != nil { + return m.NonnullDouble + } + return nil +} + +func (m *RepStdTypes) GetNullableFloat() []*float32 { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *RepStdTypes) GetNonnullFloat() []float32 { + if m != nil { + return m.NonnullFloat + } + return nil +} + +func (m *RepStdTypes) GetNullableInt64() []*int64 { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *RepStdTypes) GetNonnullInt64() []int64 { + if m != nil { + return m.NonnullInt64 + } + return nil +} + +func (m *RepStdTypes) GetNullableUInt64() []*uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *RepStdTypes) GetNonnullUInt64() []uint64 { + if m != nil { + return m.NonnullUInt64 + } + return nil +} + +func (m *RepStdTypes) GetNullableInt32() []*int32 { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *RepStdTypes) GetNonnullInt32() []int32 { + if m != nil { + return m.NonnullInt32 + } + return nil +} + +func (m *RepStdTypes) GetNullableUInt32() []*uint32 { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *RepStdTypes) GetNonnullUInt32() []uint32 { + if m != nil { + return m.NonnullUInt32 + } + return nil +} + +func (m *RepStdTypes) GetNullableBool() []*bool { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *RepStdTypes) GetNonnullBool() []bool { + if m != nil { + return m.NonnullBool + } + return nil +} + +func (m *RepStdTypes) GetNullableString() []*string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *RepStdTypes) GetNonnullString() []string { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *RepStdTypes) GetNullableBytes() []*[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *RepStdTypes) GetNonnullBytes() [][]byte { + if m != nil { + return m.NonnullBytes + } + return nil +} + type MapStdTypes struct { NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -168,7 +474,7 @@ func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } func (*MapStdTypes) ProtoMessage() {} func (*MapStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_stdtypes_bc26b660d02d7cef, []int{2} + return fileDescriptor_stdtypes_ce26a3b6156de25d, []int{2} } func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MapStdTypes.Unmarshal(m, b) @@ -216,88 +522,331 @@ return nil } -type OneofStdTypes struct { - // Types that are valid to be assigned to OneOfStdTimes: - // *OneofStdTypes_Timestamp - // *OneofStdTypes_Duration - OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *MapStdTypes) GetNullableDouble() map[int32]*float64 { + if m != nil { + return m.NullableDouble + } + return nil } -func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } -func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } -func (*OneofStdTypes) ProtoMessage() {} -func (*OneofStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_stdtypes_bc26b660d02d7cef, []int{3} -} -func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OneofStdTypes.Unmarshal(m, b) -} -func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) -} -func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofStdTypes.Merge(dst, src) -} -func (m *OneofStdTypes) XXX_Size() int { - return xxx_messageInfo_OneofStdTypes.Size(m) -} -func (m *OneofStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +func (m *MapStdTypes) GetNonnullDouble() map[int32]float64 { + if m != nil { + return m.NonnullDouble + } + return nil } -var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo - -type isOneofStdTypes_OneOfStdTimes interface { - isOneofStdTypes_OneOfStdTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - Size() int +func (m *MapStdTypes) GetNullableFloat() map[int32]*float32 { + if m != nil { + return m.NullableFloat + } + return nil } -type OneofStdTypes_Timestamp struct { - Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` +func (m *MapStdTypes) GetNonnullFloat() map[int32]float32 { + if m != nil { + return m.NonnullFloat + } + return nil } -type OneofStdTypes_Duration struct { - Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` + +func (m *MapStdTypes) GetNullableInt64() map[int32]*int64 { + if m != nil { + return m.NullableInt64 + } + return nil } -func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} -func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} +func (m *MapStdTypes) GetNonnullInt64() map[int32]int64 { + if m != nil { + return m.NonnullInt64 + } + return nil +} -func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { +func (m *MapStdTypes) GetNullableUInt64() map[int32]*uint64 { if m != nil { - return m.OneOfStdTimes + return m.NullableUInt64 } return nil } -func (m *OneofStdTypes) GetTimestamp() *time.Time { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { - return x.Timestamp +func (m *MapStdTypes) GetNonnullUInt64() map[int32]uint64 { + if m != nil { + return m.NonnullUInt64 } return nil } -func (m *OneofStdTypes) GetDuration() *time.Duration { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { - return x.Duration +func (m *MapStdTypes) GetNullableInt32() map[int32]*int32 { + if m != nil { + return m.NullableInt32 } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ - (*OneofStdTypes_Timestamp)(nil), - (*OneofStdTypes_Duration)(nil), +func (m *MapStdTypes) GetNonnullInt32() map[int32]int32 { + if m != nil { + return m.NonnullInt32 } + return nil } -func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofStdTypes) +func (m *MapStdTypes) GetNullableUInt32() map[int32]*uint32 { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *MapStdTypes) GetNonnullUInt32() map[int32]uint32 { + if m != nil { + return m.NonnullUInt32 + } + return nil +} + +func (m *MapStdTypes) GetNullableBool() map[int32]*bool { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *MapStdTypes) GetNonnullBool() map[int32]bool { + if m != nil { + return m.NonnullBool + } + return nil +} + +func (m *MapStdTypes) GetNullableString() map[int32]*string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *MapStdTypes) GetNonnullString() map[int32]string { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *MapStdTypes) GetNullableBytes() map[int32]*[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *MapStdTypes) GetNonnullBytes() map[int32][]byte { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type OneofStdTypes struct { + // Types that are valid to be assigned to OneOfStdTimes: + // *OneofStdTypes_Timestamp + // *OneofStdTypes_Duration + // *OneofStdTypes_RepDouble + // *OneofStdTypes_RepFloat + // *OneofStdTypes_RepInt64 + // *OneofStdTypes_RepUInt64 + // *OneofStdTypes_RepInt32 + // *OneofStdTypes_RepUInt32 + // *OneofStdTypes_RepBool + // *OneofStdTypes_RepString + // *OneofStdTypes_RepBytes + OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } +func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } +func (*OneofStdTypes) ProtoMessage() {} +func (*OneofStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_stdtypes_ce26a3b6156de25d, []int{3} +} +func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OneofStdTypes.Unmarshal(m, b) +} +func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) +} +func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofStdTypes.Merge(dst, src) +} +func (m *OneofStdTypes) XXX_Size() int { + return xxx_messageInfo_OneofStdTypes.Size(m) +} +func (m *OneofStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo + +type isOneofStdTypes_OneOfStdTimes interface { + isOneofStdTypes_OneOfStdTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + Size() int +} + +type OneofStdTypes_Timestamp struct { + Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` +} +type OneofStdTypes_Duration struct { + Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` +} +type OneofStdTypes_RepDouble struct { + RepDouble *float64 `protobuf:"bytes,3,opt,name=repDouble,oneof,wktptr"` +} +type OneofStdTypes_RepFloat struct { + RepFloat *float32 `protobuf:"bytes,4,opt,name=repFloat,oneof,wktptr"` +} +type OneofStdTypes_RepInt64 struct { + RepInt64 *int64 `protobuf:"bytes,5,opt,name=repInt64,oneof,wktptr"` +} +type OneofStdTypes_RepUInt64 struct { + RepUInt64 *uint64 `protobuf:"bytes,6,opt,name=repUInt64,oneof,wktptr"` +} +type OneofStdTypes_RepInt32 struct { + RepInt32 *int32 `protobuf:"bytes,7,opt,name=repInt32,oneof,wktptr"` +} +type OneofStdTypes_RepUInt32 struct { + RepUInt32 *uint32 `protobuf:"bytes,8,opt,name=repUInt32,oneof,wktptr"` +} +type OneofStdTypes_RepBool struct { + RepBool *bool `protobuf:"bytes,9,opt,name=repBool,oneof,wktptr"` +} +type OneofStdTypes_RepString struct { + RepString *string `protobuf:"bytes,10,opt,name=repString,oneof,wktptr"` +} +type OneofStdTypes_RepBytes struct { + RepBytes *[]byte `protobuf:"bytes,11,opt,name=repBytes,oneof,wktptr"` +} + +func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepDouble) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepFloat) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBool) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepString) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBytes) isOneofStdTypes_OneOfStdTimes() {} + +func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { + if m != nil { + return m.OneOfStdTimes + } + return nil +} + +func (m *OneofStdTypes) GetTimestamp() *time.Time { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { + return x.Timestamp + } + return nil +} + +func (m *OneofStdTypes) GetDuration() *time.Duration { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { + return x.Duration + } + return nil +} + +func (m *OneofStdTypes) GetRepDouble() *float64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepDouble); ok { + return x.RepDouble + } + return nil +} + +func (m *OneofStdTypes) GetRepFloat() *float32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepFloat); ok { + return x.RepFloat + } + return nil +} + +func (m *OneofStdTypes) GetRepInt64() *int64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt64); ok { + return x.RepInt64 + } + return nil +} + +func (m *OneofStdTypes) GetRepUInt64() *uint64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt64); ok { + return x.RepUInt64 + } + return nil +} + +func (m *OneofStdTypes) GetRepInt32() *int32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt32); ok { + return x.RepInt32 + } + return nil +} + +func (m *OneofStdTypes) GetRepUInt32() *uint32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt32); ok { + return x.RepUInt32 + } + return nil +} + +func (m *OneofStdTypes) GetRepBool() *bool { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBool); ok { + return x.RepBool + } + return nil +} + +func (m *OneofStdTypes) GetRepString() *string { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepString); ok { + return x.RepString + } + return nil +} + +func (m *OneofStdTypes) GetRepBytes() *[]byte { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBytes); ok { + return x.RepBytes + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ + (*OneofStdTypes_Timestamp)(nil), + (*OneofStdTypes_Duration)(nil), + (*OneofStdTypes_RepDouble)(nil), + (*OneofStdTypes_RepFloat)(nil), + (*OneofStdTypes_RepInt64)(nil), + (*OneofStdTypes_RepUInt64)(nil), + (*OneofStdTypes_RepInt32)(nil), + (*OneofStdTypes_RepUInt32)(nil), + (*OneofStdTypes_RepBool)(nil), + (*OneofStdTypes_RepString)(nil), + (*OneofStdTypes_RepBytes)(nil), + } +} + +func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofStdTypes) // OneOfStdTimes switch x := m.OneOfStdTimes.(type) { case *OneofStdTypes_Timestamp: @@ -318,81 +867,1726 @@ if err := b.EncodeRawBytes(dAtA); err != nil { return err } - case nil: - default: - return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) + case *OneofStdTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDoubleMarshal(*x.RepDouble) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdFloatMarshal(*x.RepFloat) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt64Marshal(*x.RepInt64) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt64Marshal(*x.RepUInt64) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt32Marshal(*x.RepInt32) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt32Marshal(*x.RepUInt32) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBoolMarshal(*x.RepBool) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdStringMarshal(*x.RepString) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBytesMarshal(*x.RepBytes) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) + } + return nil +} + +func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofStdTypes) + switch tag { + case 1: // OneOfStdTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(time.Time) + if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} + return true, err + case 2: // OneOfStdTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(time.Duration) + if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_Duration{c} + return true, err + case 3: // OneOfStdTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(float64) + if err2 := github_com_gogo_protobuf_types.StdDoubleUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepDouble{c} + return true, err + case 4: // OneOfStdTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(float32) + if err2 := github_com_gogo_protobuf_types.StdFloatUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepFloat{c} + return true, err + case 5: // OneOfStdTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int64) + if err2 := github_com_gogo_protobuf_types.StdInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt64{c} + return true, err + case 6: // OneOfStdTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(uint64) + if err2 := github_com_gogo_protobuf_types.StdUInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt64{c} + return true, err + case 7: // OneOfStdTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int32) + if err2 := github_com_gogo_protobuf_types.StdInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt32{c} + return true, err + case 8: // OneOfStdTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(uint32) + if err2 := github_com_gogo_protobuf_types.StdUInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt32{c} + return true, err + case 9: // OneOfStdTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(bool) + if err2 := github_com_gogo_protobuf_types.StdBoolUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBool{c} + return true, err + case 10: // OneOfStdTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(string) + if err2 := github_com_gogo_protobuf_types.StdStringUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepString{c} + return true, err + case 11: // OneOfStdTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new([]byte) + if err2 := github_com_gogo_protobuf_types.StdBytesUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBytes{c} + return true, err + default: + return false, nil + } +} + +func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_Duration: + s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepDouble: + s := github_com_gogo_protobuf_types.SizeOfStdDouble(*x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepFloat: + s := github_com_gogo_protobuf_types.SizeOfStdFloat(*x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt64: + s := github_com_gogo_protobuf_types.SizeOfStdInt64(*x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt64: + s := github_com_gogo_protobuf_types.SizeOfStdUInt64(*x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt32: + s := github_com_gogo_protobuf_types.SizeOfStdInt32(*x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt32: + s := github_com_gogo_protobuf_types.SizeOfStdUInt32(*x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBool: + s := github_com_gogo_protobuf_types.SizeOfStdBool(*x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepString: + s := github_com_gogo_protobuf_types.SizeOfStdString(*x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBytes: + s := github_com_gogo_protobuf_types.SizeOfStdBytes(*x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*StdTypes)(nil), "stdtypes.StdTypes") + proto.RegisterType((*RepStdTypes)(nil), "stdtypes.RepStdTypes") + proto.RegisterType((*MapStdTypes)(nil), "stdtypes.MapStdTypes") + proto.RegisterMapType((map[int32]time.Duration)(nil), "stdtypes.MapStdTypes.DurationEntry") + proto.RegisterMapType((map[int32]bool)(nil), "stdtypes.MapStdTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32][]byte)(nil), "stdtypes.MapStdTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]float64)(nil), "stdtypes.MapStdTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]float32)(nil), "stdtypes.MapStdTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]int32)(nil), "stdtypes.MapStdTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]int64)(nil), "stdtypes.MapStdTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]string)(nil), "stdtypes.MapStdTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]uint32)(nil), "stdtypes.MapStdTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]uint64)(nil), "stdtypes.MapStdTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*bool)(nil), "stdtypes.MapStdTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*[]byte)(nil), "stdtypes.MapStdTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*float64)(nil), "stdtypes.MapStdTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*time.Duration)(nil), "stdtypes.MapStdTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*float32)(nil), "stdtypes.MapStdTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*int32)(nil), "stdtypes.MapStdTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*int64)(nil), "stdtypes.MapStdTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*string)(nil), "stdtypes.MapStdTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*time.Time)(nil), "stdtypes.MapStdTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*uint32)(nil), "stdtypes.MapStdTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*uint64)(nil), "stdtypes.MapStdTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]time.Time)(nil), "stdtypes.MapStdTypes.TimestampEntry") + proto.RegisterType((*OneofStdTypes)(nil), "stdtypes.OneofStdTypes") +} +func (this *StdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*StdTypes) + if !ok { + that2, ok := that.(StdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *StdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *StdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") + } + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") + } + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) + } + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) + } + } else if this.NullableDuration != nil { + return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") + } else if that1.NullableDuration != nil { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) + } + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + if this.Duration != that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", *this.NullableDouble, *that1.NullableDouble) + } + } else if this.NullableDouble != nil { + return fmt.Errorf("this.NullableDouble == nil && that.NullableDouble != nil") + } else if that1.NullableDouble != nil { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) + } + if this.NonnullDouble != that1.NonnullDouble { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) + } + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", *this.NullableFloat, *that1.NullableFloat) + } + } else if this.NullableFloat != nil { + return fmt.Errorf("this.NullableFloat == nil && that.NullableFloat != nil") + } else if that1.NullableFloat != nil { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) + } + if this.NonnullFloat != that1.NonnullFloat { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) + } + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", *this.NullableInt64, *that1.NullableInt64) + } + } else if this.NullableInt64 != nil { + return fmt.Errorf("this.NullableInt64 == nil && that.NullableInt64 != nil") + } else if that1.NullableInt64 != nil { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) + } + if this.NonnullInt64 != that1.NonnullInt64 { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) + } + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", *this.NullableUInt64, *that1.NullableUInt64) + } + } else if this.NullableUInt64 != nil { + return fmt.Errorf("this.NullableUInt64 == nil && that.NullableUInt64 != nil") + } else if that1.NullableUInt64 != nil { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) + } + if this.NonnullUInt64 != that1.NonnullUInt64 { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) + } + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", *this.NullableInt32, *that1.NullableInt32) + } + } else if this.NullableInt32 != nil { + return fmt.Errorf("this.NullableInt32 == nil && that.NullableInt32 != nil") + } else if that1.NullableInt32 != nil { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) + } + if this.NonnullInt32 != that1.NonnullInt32 { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) + } + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", *this.NullableUInt32, *that1.NullableUInt32) + } + } else if this.NullableUInt32 != nil { + return fmt.Errorf("this.NullableUInt32 == nil && that.NullableUInt32 != nil") + } else if that1.NullableUInt32 != nil { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) + } + if this.NonnullUInt32 != that1.NonnullUInt32 { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) + } + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", *this.NullableBool, *that1.NullableBool) + } + } else if this.NullableBool != nil { + return fmt.Errorf("this.NullableBool == nil && that.NullableBool != nil") + } else if that1.NullableBool != nil { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) + } + if this.NonnullBool != that1.NonnullBool { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) + } + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", *this.NullableString, *that1.NullableString) + } + } else if this.NullableString != nil { + return fmt.Errorf("this.NullableString == nil && that.NullableString != nil") + } else if that1.NullableString != nil { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) + } + if this.NonnullString != that1.NonnullString { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) + } + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return fmt.Errorf("this.NullableBytes != nil && that1.NullableBytes == nil") + } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) + } + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *StdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StdTypes) + if !ok { + that2, ok := that.(StdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return false + } + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return false + } + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return false + } + } else if this.NullableDuration != nil { + return false + } else if that1.NullableDuration != nil { + return false + } + if !this.Timestamp.Equal(that1.Timestamp) { + return false + } + if this.Duration != that1.Duration { + return false + } + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return false + } + } else if this.NullableDouble != nil { + return false + } else if that1.NullableDouble != nil { + return false + } + if this.NonnullDouble != that1.NonnullDouble { + return false + } + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return false + } + } else if this.NullableFloat != nil { + return false + } else if that1.NullableFloat != nil { + return false + } + if this.NonnullFloat != that1.NonnullFloat { + return false + } + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return false + } + } else if this.NullableInt64 != nil { + return false + } else if that1.NullableInt64 != nil { + return false + } + if this.NonnullInt64 != that1.NonnullInt64 { + return false + } + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return false + } + } else if this.NullableUInt64 != nil { + return false + } else if that1.NullableUInt64 != nil { + return false + } + if this.NonnullUInt64 != that1.NonnullUInt64 { + return false + } + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return false + } + } else if this.NullableInt32 != nil { + return false + } else if that1.NullableInt32 != nil { + return false + } + if this.NonnullInt32 != that1.NonnullInt32 { + return false + } + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return false + } + } else if this.NullableUInt32 != nil { + return false + } else if that1.NullableUInt32 != nil { + return false + } + if this.NonnullUInt32 != that1.NonnullUInt32 { + return false + } + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return false + } + } else if this.NullableBool != nil { + return false + } else if that1.NullableBool != nil { + return false + } + if this.NonnullBool != that1.NonnullBool { + return false + } + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return false + } + } else if this.NullableString != nil { + return false + } else if that1.NullableString != nil { + return false + } + if this.NonnullString != that1.NonnullString { + return false + } + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return false + } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return false + } + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *RepStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *RepStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + } + } + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *RepStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return false + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return false + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return false + } + } + if len(this.Durations) != len(that1.Durations) { + return false + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") + } + } else if this.OneOfStdTimes == nil { + return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") + } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) } return nil } +func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } -func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofStdTypes) - switch tag { - case 1: // OneOfStdTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Duration") } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err + } + if that1 == nil { + if this == nil { + return nil } - c := new(time.Time) - if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { - return true, err + return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) } - m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} - return true, err - case 2: // OneOfStdTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType + } else if this.Duration != nil { + return fmt.Errorf("this.Duration == nil && that.Duration != nil") + } else if that1.Duration != nil { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofStdTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepDouble") } - c := new(time.Duration) - if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { - return true, err + } + if that1 == nil { + if this == nil { + return nil } - m.OneOfStdTimes = &OneofStdTypes_Duration{c} - return true, err - default: - return false, nil + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is not nil && this == nil") } -} - -func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofStdTypes_Duration: - s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", *this.RepDouble, *that1.RepDouble) + } + } else if this.RepDouble != nil { + return fmt.Errorf("this.RepDouble == nil && that.RepDouble != nil") + } else if that1.RepDouble != nil { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) } - return n + return nil } +func (this *OneofStdTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } -func init() { - proto.RegisterType((*StdTypes)(nil), "stdtypes.StdTypes") - proto.RegisterType((*RepStdTypes)(nil), "stdtypes.RepStdTypes") - proto.RegisterType((*MapStdTypes)(nil), "stdtypes.MapStdTypes") - proto.RegisterMapType((map[int32]time.Duration)(nil), "stdtypes.MapStdTypes.DurationEntry") - proto.RegisterMapType((map[int32]*time.Duration)(nil), "stdtypes.MapStdTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*time.Time)(nil), "stdtypes.MapStdTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]time.Time)(nil), "stdtypes.MapStdTypes.TimestampEntry") - proto.RegisterType((*OneofStdTypes)(nil), "stdtypes.OneofStdTypes") + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is not nil && this == nil") + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", *this.RepFloat, *that1.RepFloat) + } + } else if this.RepFloat != nil { + return fmt.Errorf("this.RepFloat == nil && that.RepFloat != nil") + } else if that1.RepFloat != nil { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil } -func (this *StdTypes) VerboseEqual(that interface{}) error { +func (this *OneofStdTypes_RepInt64) VerboseEqual(that interface{}) error { if that == nil { if this == nil { return nil @@ -400,97 +2594,143 @@ return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*StdTypes) + that1, ok := that.(*OneofStdTypes_RepInt64) if !ok { - that2, ok := that.(StdTypes) + that2, ok := that.(OneofStdTypes_RepInt64) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *StdTypes") + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt64") } } if that1 == nil { if this == nil { return nil } - return fmt.Errorf("that is type *StdTypes but is nil && this != nil") + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is nil && this != nil") } else if this == nil { - return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is not nil && this == nil") } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") - } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", *this.RepInt64, *that1.RepInt64) + } + } else if this.RepInt64 != nil { + return fmt.Errorf("this.RepInt64 == nil && that.RepInt64 != nil") + } else if that1.RepInt64 != nil { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) + return nil +} +func (this *OneofStdTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil } - } else if this.NullableDuration != nil { - return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") - } else if that1.NullableDuration != nil { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) + return fmt.Errorf("that == nil && this != nil") } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + + that1, ok := that.(*OneofStdTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt64") + } } - if this.Duration != that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is not nil && this == nil") } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", *this.RepUInt64, *that1.RepUInt64) + } + } else if this.RepUInt64 != nil { + return fmt.Errorf("this.RepUInt64 == nil && that.RepUInt64 != nil") + } else if that1.RepUInt64 != nil { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) } return nil } -func (this *StdTypes) Equal(that interface{}) bool { +func (this *OneofStdTypes_RepInt32) VerboseEqual(that interface{}) error { if that == nil { - return this == nil + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*StdTypes) + that1, ok := that.(*OneofStdTypes_RepInt32) if !ok { - that2, ok := that.(StdTypes) + that2, ok := that.(OneofStdTypes_RepInt32) if ok { that1 = &that2 } else { - return false + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt32") } } if that1 == nil { - return this == nil + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is nil && this != nil") } else if this == nil { - return false + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is not nil && this == nil") } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return false - } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return false + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", *this.RepInt32, *that1.RepInt32) + } + } else if this.RepInt32 != nil { + return fmt.Errorf("this.RepInt32 == nil && that.RepInt32 != nil") + } else if that1.RepInt32 != nil { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return false + return nil +} +func (this *OneofStdTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil } - } else if this.NullableDuration != nil { - return false - } else if that1.NullableDuration != nil { - return false + return fmt.Errorf("that == nil && this != nil") } - if !this.Timestamp.Equal(that1.Timestamp) { - return false + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt32") + } } - if this.Duration != that1.Duration { - return false + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is not nil && this == nil") } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", *this.RepUInt32, *that1.RepUInt32) + } + } else if this.RepUInt32 != nil { + return fmt.Errorf("this.RepUInt32 == nil && that.RepUInt32 != nil") + } else if that1.RepUInt32 != nil { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) } - return true + return nil } -func (this *RepStdTypes) VerboseEqual(that interface{}) error { +func (this *OneofStdTypes_RepBool) VerboseEqual(that interface{}) error { if that == nil { if this == nil { return nil @@ -498,68 +2738,112 @@ return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*RepStdTypes) + that1, ok := that.(*OneofStdTypes_RepBool) if !ok { - that2, ok := that.(RepStdTypes) + that2, ok := that.(OneofStdTypes_RepBool) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *RepStdTypes") + return fmt.Errorf("that is not of type *OneofStdTypes_RepBool") } } if that1 == nil { if this == nil { return nil } - return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is nil && this != nil") } else if this == nil { - return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is not nil && this == nil") } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", *this.RepBool, *that1.RepBool) + } + } else if this.RepBool != nil { + return fmt.Errorf("this.RepBool == nil && that.RepBool != nil") + } else if that1.RepBool != nil { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + return nil +} +func (this *OneofStdTypes_RepString) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil } + return fmt.Errorf("that == nil && this != nil") } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + + that1, ok := that.(*OneofStdTypes_RepString) + if !ok { + that2, ok := that.(OneofStdTypes_RepString) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepString") + } } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + if that1 == nil { + if this == nil { + return nil } + return fmt.Errorf("that is type *OneofStdTypes_RepString but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepString but is not nil && this == nil") } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", *this.RepString, *that1.RepString) + } + } else if this.RepString != nil { + return fmt.Errorf("this.RepString == nil && that.RepString != nil") + } else if that1.RepString != nil { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + return nil +} +func (this *OneofStdTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil } + return fmt.Errorf("that == nil && this != nil") } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + + that1, ok := that.(*OneofStdTypes_RepBytes) + if !ok { + that2, ok := that.(OneofStdTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBytes") + } } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + if that1 == nil { + if this == nil { + return nil } + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is not nil && this == nil") } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if that1.RepBytes == nil { + if this.RepBytes != nil { + return fmt.Errorf("this.RepBytes != nil && that1.RepBytes == nil") + } + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) } return nil } -func (this *RepStdTypes) Equal(that interface{}) bool { +func (this *OneofStdTypes) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RepStdTypes) + that1, ok := that.(*OneofStdTypes) if !ok { - that2, ok := that.(RepStdTypes) + that2, ok := that.(OneofStdTypes) if ok { that1 = &that2 } else { @@ -571,113 +2855,86 @@ } else if this == nil { return false } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { return false } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { + } else if this.OneOfStdTimes == nil { + return false + } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { return false } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false - } - } - if len(this.Timestamps) != len(that1.Timestamps) { + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return true +} +func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { return false } } - if len(this.Durations) != len(that1.Durations) { + if that1 == nil { + return this == nil + } else if this == nil { return false } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { + if that1.Timestamp == nil { + if this.Timestamp != nil { return false } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + } else if !this.Timestamp.Equal(*that1.Timestamp) { return false } return true } -func (this *MapStdTypes) VerboseEqual(that interface{}) error { +func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + return this == nil } - that1, ok := that.(*MapStdTypes) + that1, ok := that.(*OneofStdTypes_Duration) if !ok { - that2, ok := that.(MapStdTypes) + that2, ok := that.(OneofStdTypes_Duration) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *MapStdTypes") + return false } } if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") + return this == nil } else if this == nil { - return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") - } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) - } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) - } - } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) - } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) - } - } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) - } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) - } - } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + return false } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return false } + } else if this.Duration != nil { + return false + } else if that1.Duration != nil { + return false } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil + return true } -func (this *MapStdTypes) Equal(that interface{}) bool { +func (this *OneofStdTypes_RepDouble) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*MapStdTypes) + that1, ok := that.(*OneofStdTypes_RepDouble) if !ok { - that2, ok := that.(MapStdTypes) + that2, ok := that.(OneofStdTypes_RepDouble) if ok { that1 = &that2 } else { @@ -689,160 +2946,175 @@ } else if this == nil { return false } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return false + } + } else if this.RepDouble != nil { + return false + } else if that1.RepDouble != nil { return false } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return true +} +func (this *OneofStdTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { return false } } - if len(this.Timestamp) != len(that1.Timestamp) { + if that1 == nil { + return this == nil + } else if this == nil { return false } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { return false } - } - if len(this.NullableDuration) != len(that1.NullableDuration) { + } else if this.RepFloat != nil { + return false + } else if that1.RepFloat != nil { return false } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return true +} +func (this *OneofStdTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { return false } } - if len(this.Duration) != len(that1.Duration) { + if that1 == nil { + return this == nil + } else if this == nil { return false } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { return false } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + } else if this.RepInt64 != nil { + return false + } else if that1.RepInt64 != nil { return false } return true } -func (this *OneofStdTypes) VerboseEqual(that interface{}) error { +func (this *OneofStdTypes_RepUInt64) Equal(that interface{}) bool { if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + return this == nil } - that1, ok := that.(*OneofStdTypes) + that1, ok := that.(*OneofStdTypes_RepUInt64) if !ok { - that2, ok := that.(OneofStdTypes) + that2, ok := that.(OneofStdTypes_RepUInt64) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes") + return false } } if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") + return this == nil } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + return false } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { - return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return false } - } else if this.OneOfStdTimes == nil { - return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") - } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { - return err - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } else if this.RepUInt64 != nil { + return false + } else if that1.RepUInt64 != nil { + return false } - return nil + return true } -func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { +func (this *OneofStdTypes_RepInt32) Equal(that interface{}) bool { if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + return this == nil } - that1, ok := that.(*OneofStdTypes_Timestamp) + that1, ok := that.(*OneofStdTypes_RepInt32) if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) + that2, ok := that.(OneofStdTypes_RepInt32) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + return false } } if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") + return this == nil } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") + return false } - if that1.Timestamp == nil { - if this.Timestamp != nil { - return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return false } - } else if !this.Timestamp.Equal(*that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } else if this.RepInt32 != nil { + return false + } else if that1.RepInt32 != nil { + return false } - return nil + return true } -func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { +func (this *OneofStdTypes_RepUInt32) Equal(that interface{}) bool { if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + return this == nil } - that1, ok := that.(*OneofStdTypes_Duration) + that1, ok := that.(*OneofStdTypes_RepUInt32) if !ok { - that2, ok := that.(OneofStdTypes_Duration) + that2, ok := that.(OneofStdTypes_RepUInt32) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + return false } } if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + return this == nil } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + return false } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return false } - } else if this.Duration != nil { - return fmt.Errorf("this.Duration == nil && that.Duration != nil") - } else if that1.Duration != nil { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } else if this.RepUInt32 != nil { + return false + } else if that1.RepUInt32 != nil { + return false } - return nil + return true } -func (this *OneofStdTypes) Equal(that interface{}) bool { +func (this *OneofStdTypes_RepBool) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*OneofStdTypes) + that1, ok := that.(*OneofStdTypes_RepBool) if !ok { - that2, ok := that.(OneofStdTypes) + that2, ok := that.(OneofStdTypes_RepBool) if ok { that1 = &that2 } else { @@ -854,28 +3126,25 @@ } else if this == nil { return false } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { return false } - } else if this.OneOfStdTimes == nil { - return false - } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { + } else if this.RepBool != nil { return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + } else if that1.RepBool != nil { return false } return true } -func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { +func (this *OneofStdTypes_RepString) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*OneofStdTypes_Timestamp) + that1, ok := that.(*OneofStdTypes_RepString) if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) + that2, ok := that.(OneofStdTypes_RepString) if ok { that1 = &that2 } else { @@ -887,23 +3156,25 @@ } else if this == nil { return false } - if that1.Timestamp == nil { - if this.Timestamp != nil { + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { return false } - } else if !this.Timestamp.Equal(*that1.Timestamp) { + } else if this.RepString != nil { + return false + } else if that1.RepString != nil { return false } return true } -func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { +func (this *OneofStdTypes_RepBytes) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*OneofStdTypes_Duration) + that1, ok := that.(*OneofStdTypes_RepBytes) if !ok { - that2, ok := that.(OneofStdTypes_Duration) + that2, ok := that.(OneofStdTypes_RepBytes) if ok { that1 = &that2 } else { @@ -915,13 +3186,11 @@ } else if this == nil { return false } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { + if that1.RepBytes == nil { + if this.RepBytes != nil { return false } - } else if this.Duration != nil { - return false - } else if that1.Duration != nil { + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { return false } return true @@ -930,12 +3199,30 @@ if this == nil { return "nil" } - s := make([]string, 0, 8) + s := make([]string, 0, 26) s = append(s, "&stdtypes.StdTypes{") s = append(s, "NullableTimestamp: "+fmt.Sprintf("%#v", this.NullableTimestamp)+",\n") s = append(s, "NullableDuration: "+fmt.Sprintf("%#v", this.NullableDuration)+",\n") s = append(s, "Timestamp: "+fmt.Sprintf("%#v", this.Timestamp)+",\n") s = append(s, "Duration: "+fmt.Sprintf("%#v", this.Duration)+",\n") + s = append(s, "NullableDouble: "+fmt.Sprintf("%#v", this.NullableDouble)+",\n") + s = append(s, "NonnullDouble: "+fmt.Sprintf("%#v", this.NonnullDouble)+",\n") + s = append(s, "NullableFloat: "+fmt.Sprintf("%#v", this.NullableFloat)+",\n") + s = append(s, "NonnullFloat: "+fmt.Sprintf("%#v", this.NonnullFloat)+",\n") + s = append(s, "NullableInt64: "+fmt.Sprintf("%#v", this.NullableInt64)+",\n") + s = append(s, "NonnullInt64: "+fmt.Sprintf("%#v", this.NonnullInt64)+",\n") + s = append(s, "NullableUInt64: "+fmt.Sprintf("%#v", this.NullableUInt64)+",\n") + s = append(s, "NonnullUInt64: "+fmt.Sprintf("%#v", this.NonnullUInt64)+",\n") + s = append(s, "NullableInt32: "+fmt.Sprintf("%#v", this.NullableInt32)+",\n") + s = append(s, "NonnullInt32: "+fmt.Sprintf("%#v", this.NonnullInt32)+",\n") + s = append(s, "NullableUInt32: "+fmt.Sprintf("%#v", this.NullableUInt32)+",\n") + s = append(s, "NonnullUInt32: "+fmt.Sprintf("%#v", this.NonnullUInt32)+",\n") + s = append(s, "NullableBool: "+fmt.Sprintf("%#v", this.NullableBool)+",\n") + s = append(s, "NonnullBool: "+fmt.Sprintf("%#v", this.NonnullBool)+",\n") + s = append(s, "NullableString: "+fmt.Sprintf("%#v", this.NullableString)+",\n") + s = append(s, "NonnullString: "+fmt.Sprintf("%#v", this.NonnullString)+",\n") + s = append(s, "NullableBytes: "+fmt.Sprintf("%#v", this.NullableBytes)+",\n") + s = append(s, "NonnullBytes: "+fmt.Sprintf("%#v", this.NonnullBytes)+",\n") if this.XXX_unrecognized != nil { s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") } @@ -946,12 +3233,30 @@ if this == nil { return "nil" } - s := make([]string, 0, 8) + s := make([]string, 0, 26) s = append(s, "&stdtypes.RepStdTypes{") s = append(s, "NullableTimestamps: "+fmt.Sprintf("%#v", this.NullableTimestamps)+",\n") s = append(s, "NullableDurations: "+fmt.Sprintf("%#v", this.NullableDurations)+",\n") s = append(s, "Timestamps: "+fmt.Sprintf("%#v", this.Timestamps)+",\n") s = append(s, "Durations: "+fmt.Sprintf("%#v", this.Durations)+",\n") + s = append(s, "NullableDouble: "+fmt.Sprintf("%#v", this.NullableDouble)+",\n") + s = append(s, "NonnullDouble: "+fmt.Sprintf("%#v", this.NonnullDouble)+",\n") + s = append(s, "NullableFloat: "+fmt.Sprintf("%#v", this.NullableFloat)+",\n") + s = append(s, "NonnullFloat: "+fmt.Sprintf("%#v", this.NonnullFloat)+",\n") + s = append(s, "NullableInt64: "+fmt.Sprintf("%#v", this.NullableInt64)+",\n") + s = append(s, "NonnullInt64: "+fmt.Sprintf("%#v", this.NonnullInt64)+",\n") + s = append(s, "NullableUInt64: "+fmt.Sprintf("%#v", this.NullableUInt64)+",\n") + s = append(s, "NonnullUInt64: "+fmt.Sprintf("%#v", this.NonnullUInt64)+",\n") + s = append(s, "NullableInt32: "+fmt.Sprintf("%#v", this.NullableInt32)+",\n") + s = append(s, "NonnullInt32: "+fmt.Sprintf("%#v", this.NonnullInt32)+",\n") + s = append(s, "NullableUInt32: "+fmt.Sprintf("%#v", this.NullableUInt32)+",\n") + s = append(s, "NonnullUInt32: "+fmt.Sprintf("%#v", this.NonnullUInt32)+",\n") + s = append(s, "NullableBool: "+fmt.Sprintf("%#v", this.NullableBool)+",\n") + s = append(s, "NonnullBool: "+fmt.Sprintf("%#v", this.NonnullBool)+",\n") + s = append(s, "NullableString: "+fmt.Sprintf("%#v", this.NullableString)+",\n") + s = append(s, "NonnullString: "+fmt.Sprintf("%#v", this.NonnullString)+",\n") + s = append(s, "NullableBytes: "+fmt.Sprintf("%#v", this.NullableBytes)+",\n") + s = append(s, "NonnullBytes: "+fmt.Sprintf("%#v", this.NonnullBytes)+",\n") if this.XXX_unrecognized != nil { s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") } @@ -962,7 +3267,7 @@ if this == nil { return "nil" } - s := make([]string, 0, 8) + s := make([]string, 0, 26) s = append(s, "&stdtypes.MapStdTypes{") keysForNullableTimestamp := make([]int32, 0, len(this.NullableTimestamp)) for k := range this.NullableTimestamp { @@ -1016,6 +3321,240 @@ if this.Duration != nil { s = append(s, "Duration: "+mapStringForDuration+",\n") } + keysForNullableDouble := make([]int32, 0, len(this.NullableDouble)) + for k := range this.NullableDouble { + keysForNullableDouble = append(keysForNullableDouble, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableDouble) + mapStringForNullableDouble := "map[int32]*float64{" + for _, k := range keysForNullableDouble { + mapStringForNullableDouble += fmt.Sprintf("%#v: %#v,", k, this.NullableDouble[k]) + } + mapStringForNullableDouble += "}" + if this.NullableDouble != nil { + s = append(s, "NullableDouble: "+mapStringForNullableDouble+",\n") + } + keysForNonnullDouble := make([]int32, 0, len(this.NonnullDouble)) + for k := range this.NonnullDouble { + keysForNonnullDouble = append(keysForNonnullDouble, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullDouble) + mapStringForNonnullDouble := "map[int32]float64{" + for _, k := range keysForNonnullDouble { + mapStringForNonnullDouble += fmt.Sprintf("%#v: %#v,", k, this.NonnullDouble[k]) + } + mapStringForNonnullDouble += "}" + if this.NonnullDouble != nil { + s = append(s, "NonnullDouble: "+mapStringForNonnullDouble+",\n") + } + keysForNullableFloat := make([]int32, 0, len(this.NullableFloat)) + for k := range this.NullableFloat { + keysForNullableFloat = append(keysForNullableFloat, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableFloat) + mapStringForNullableFloat := "map[int32]*float32{" + for _, k := range keysForNullableFloat { + mapStringForNullableFloat += fmt.Sprintf("%#v: %#v,", k, this.NullableFloat[k]) + } + mapStringForNullableFloat += "}" + if this.NullableFloat != nil { + s = append(s, "NullableFloat: "+mapStringForNullableFloat+",\n") + } + keysForNonnullFloat := make([]int32, 0, len(this.NonnullFloat)) + for k := range this.NonnullFloat { + keysForNonnullFloat = append(keysForNonnullFloat, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullFloat) + mapStringForNonnullFloat := "map[int32]float32{" + for _, k := range keysForNonnullFloat { + mapStringForNonnullFloat += fmt.Sprintf("%#v: %#v,", k, this.NonnullFloat[k]) + } + mapStringForNonnullFloat += "}" + if this.NonnullFloat != nil { + s = append(s, "NonnullFloat: "+mapStringForNonnullFloat+",\n") + } + keysForNullableInt64 := make([]int32, 0, len(this.NullableInt64)) + for k := range this.NullableInt64 { + keysForNullableInt64 = append(keysForNullableInt64, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableInt64) + mapStringForNullableInt64 := "map[int32]*int64{" + for _, k := range keysForNullableInt64 { + mapStringForNullableInt64 += fmt.Sprintf("%#v: %#v,", k, this.NullableInt64[k]) + } + mapStringForNullableInt64 += "}" + if this.NullableInt64 != nil { + s = append(s, "NullableInt64: "+mapStringForNullableInt64+",\n") + } + keysForNonnullInt64 := make([]int32, 0, len(this.NonnullInt64)) + for k := range this.NonnullInt64 { + keysForNonnullInt64 = append(keysForNonnullInt64, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullInt64) + mapStringForNonnullInt64 := "map[int32]int64{" + for _, k := range keysForNonnullInt64 { + mapStringForNonnullInt64 += fmt.Sprintf("%#v: %#v,", k, this.NonnullInt64[k]) + } + mapStringForNonnullInt64 += "}" + if this.NonnullInt64 != nil { + s = append(s, "NonnullInt64: "+mapStringForNonnullInt64+",\n") + } + keysForNullableUInt64 := make([]int32, 0, len(this.NullableUInt64)) + for k := range this.NullableUInt64 { + keysForNullableUInt64 = append(keysForNullableUInt64, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableUInt64) + mapStringForNullableUInt64 := "map[int32]*uint64{" + for _, k := range keysForNullableUInt64 { + mapStringForNullableUInt64 += fmt.Sprintf("%#v: %#v,", k, this.NullableUInt64[k]) + } + mapStringForNullableUInt64 += "}" + if this.NullableUInt64 != nil { + s = append(s, "NullableUInt64: "+mapStringForNullableUInt64+",\n") + } + keysForNonnullUInt64 := make([]int32, 0, len(this.NonnullUInt64)) + for k := range this.NonnullUInt64 { + keysForNonnullUInt64 = append(keysForNonnullUInt64, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullUInt64) + mapStringForNonnullUInt64 := "map[int32]uint64{" + for _, k := range keysForNonnullUInt64 { + mapStringForNonnullUInt64 += fmt.Sprintf("%#v: %#v,", k, this.NonnullUInt64[k]) + } + mapStringForNonnullUInt64 += "}" + if this.NonnullUInt64 != nil { + s = append(s, "NonnullUInt64: "+mapStringForNonnullUInt64+",\n") + } + keysForNullableInt32 := make([]int32, 0, len(this.NullableInt32)) + for k := range this.NullableInt32 { + keysForNullableInt32 = append(keysForNullableInt32, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableInt32) + mapStringForNullableInt32 := "map[int32]*int32{" + for _, k := range keysForNullableInt32 { + mapStringForNullableInt32 += fmt.Sprintf("%#v: %#v,", k, this.NullableInt32[k]) + } + mapStringForNullableInt32 += "}" + if this.NullableInt32 != nil { + s = append(s, "NullableInt32: "+mapStringForNullableInt32+",\n") + } + keysForNonnullInt32 := make([]int32, 0, len(this.NonnullInt32)) + for k := range this.NonnullInt32 { + keysForNonnullInt32 = append(keysForNonnullInt32, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullInt32) + mapStringForNonnullInt32 := "map[int32]int32{" + for _, k := range keysForNonnullInt32 { + mapStringForNonnullInt32 += fmt.Sprintf("%#v: %#v,", k, this.NonnullInt32[k]) + } + mapStringForNonnullInt32 += "}" + if this.NonnullInt32 != nil { + s = append(s, "NonnullInt32: "+mapStringForNonnullInt32+",\n") + } + keysForNullableUInt32 := make([]int32, 0, len(this.NullableUInt32)) + for k := range this.NullableUInt32 { + keysForNullableUInt32 = append(keysForNullableUInt32, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableUInt32) + mapStringForNullableUInt32 := "map[int32]*uint32{" + for _, k := range keysForNullableUInt32 { + mapStringForNullableUInt32 += fmt.Sprintf("%#v: %#v,", k, this.NullableUInt32[k]) + } + mapStringForNullableUInt32 += "}" + if this.NullableUInt32 != nil { + s = append(s, "NullableUInt32: "+mapStringForNullableUInt32+",\n") + } + keysForNonnullUInt32 := make([]int32, 0, len(this.NonnullUInt32)) + for k := range this.NonnullUInt32 { + keysForNonnullUInt32 = append(keysForNonnullUInt32, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullUInt32) + mapStringForNonnullUInt32 := "map[int32]uint32{" + for _, k := range keysForNonnullUInt32 { + mapStringForNonnullUInt32 += fmt.Sprintf("%#v: %#v,", k, this.NonnullUInt32[k]) + } + mapStringForNonnullUInt32 += "}" + if this.NonnullUInt32 != nil { + s = append(s, "NonnullUInt32: "+mapStringForNonnullUInt32+",\n") + } + keysForNullableBool := make([]int32, 0, len(this.NullableBool)) + for k := range this.NullableBool { + keysForNullableBool = append(keysForNullableBool, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableBool) + mapStringForNullableBool := "map[int32]*bool{" + for _, k := range keysForNullableBool { + mapStringForNullableBool += fmt.Sprintf("%#v: %#v,", k, this.NullableBool[k]) + } + mapStringForNullableBool += "}" + if this.NullableBool != nil { + s = append(s, "NullableBool: "+mapStringForNullableBool+",\n") + } + keysForNonnullBool := make([]int32, 0, len(this.NonnullBool)) + for k := range this.NonnullBool { + keysForNonnullBool = append(keysForNonnullBool, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullBool) + mapStringForNonnullBool := "map[int32]bool{" + for _, k := range keysForNonnullBool { + mapStringForNonnullBool += fmt.Sprintf("%#v: %#v,", k, this.NonnullBool[k]) + } + mapStringForNonnullBool += "}" + if this.NonnullBool != nil { + s = append(s, "NonnullBool: "+mapStringForNonnullBool+",\n") + } + keysForNullableString := make([]int32, 0, len(this.NullableString)) + for k := range this.NullableString { + keysForNullableString = append(keysForNullableString, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableString) + mapStringForNullableString := "map[int32]*string{" + for _, k := range keysForNullableString { + mapStringForNullableString += fmt.Sprintf("%#v: %#v,", k, this.NullableString[k]) + } + mapStringForNullableString += "}" + if this.NullableString != nil { + s = append(s, "NullableString: "+mapStringForNullableString+",\n") + } + keysForNonnullString := make([]int32, 0, len(this.NonnullString)) + for k := range this.NonnullString { + keysForNonnullString = append(keysForNonnullString, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullString) + mapStringForNonnullString := "map[int32]string{" + for _, k := range keysForNonnullString { + mapStringForNonnullString += fmt.Sprintf("%#v: %#v,", k, this.NonnullString[k]) + } + mapStringForNonnullString += "}" + if this.NonnullString != nil { + s = append(s, "NonnullString: "+mapStringForNonnullString+",\n") + } + keysForNullableBytes := make([]int32, 0, len(this.NullableBytes)) + for k := range this.NullableBytes { + keysForNullableBytes = append(keysForNullableBytes, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNullableBytes) + mapStringForNullableBytes := "map[int32]*[]byte{" + for _, k := range keysForNullableBytes { + mapStringForNullableBytes += fmt.Sprintf("%#v: %#v,", k, this.NullableBytes[k]) + } + mapStringForNullableBytes += "}" + if this.NullableBytes != nil { + s = append(s, "NullableBytes: "+mapStringForNullableBytes+",\n") + } + keysForNonnullBytes := make([]int32, 0, len(this.NonnullBytes)) + for k := range this.NonnullBytes { + keysForNonnullBytes = append(keysForNonnullBytes, k) + } + github_com_gogo_protobuf_sortkeys.Int32s(keysForNonnullBytes) + mapStringForNonnullBytes := "map[int32][]byte{" + for _, k := range keysForNonnullBytes { + mapStringForNonnullBytes += fmt.Sprintf("%#v: %#v,", k, this.NonnullBytes[k]) + } + mapStringForNonnullBytes += "}" + if this.NonnullBytes != nil { + s = append(s, "NonnullBytes: "+mapStringForNonnullBytes+",\n") + } if this.XXX_unrecognized != nil { s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") } @@ -1026,7 +3565,7 @@ if this == nil { return "nil" } - s := make([]string, 0, 6) + s := make([]string, 0, 15) s = append(s, "&stdtypes.OneofStdTypes{") if this.OneOfStdTimes != nil { s = append(s, "OneOfStdTimes: "+fmt.Sprintf("%#v", this.OneOfStdTimes)+",\n") @@ -1053,6 +3592,78 @@ `Duration:` + fmt.Sprintf("%#v", this.Duration) + `}`}, ", ") return s } +func (this *OneofStdTypes_RepDouble) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepDouble{` + + `RepDouble:` + fmt.Sprintf("%#v", this.RepDouble) + `}`}, ", ") + return s +} +func (this *OneofStdTypes_RepFloat) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepFloat{` + + `RepFloat:` + fmt.Sprintf("%#v", this.RepFloat) + `}`}, ", ") + return s +} +func (this *OneofStdTypes_RepInt64) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepInt64{` + + `RepInt64:` + fmt.Sprintf("%#v", this.RepInt64) + `}`}, ", ") + return s +} +func (this *OneofStdTypes_RepUInt64) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepUInt64{` + + `RepUInt64:` + fmt.Sprintf("%#v", this.RepUInt64) + `}`}, ", ") + return s +} +func (this *OneofStdTypes_RepInt32) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepInt32{` + + `RepInt32:` + fmt.Sprintf("%#v", this.RepInt32) + `}`}, ", ") + return s +} +func (this *OneofStdTypes_RepUInt32) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepUInt32{` + + `RepUInt32:` + fmt.Sprintf("%#v", this.RepUInt32) + `}`}, ", ") + return s +} +func (this *OneofStdTypes_RepBool) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepBool{` + + `RepBool:` + fmt.Sprintf("%#v", this.RepBool) + `}`}, ", ") + return s +} +func (this *OneofStdTypes_RepString) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepString{` + + `RepString:` + fmt.Sprintf("%#v", this.RepString) + `}`}, ", ") + return s +} +func (this *OneofStdTypes_RepBytes) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&stdtypes.OneofStdTypes_RepBytes{` + + `RepBytes:` + fmt.Sprintf("%#v", this.RepBytes) + `}`}, ", ") + return s +} func valueToGoStringStdtypes(v interface{}, typ string) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -1073,8 +3684,53 @@ this.Timestamp = *v1 v2 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) this.Duration = *v2 + if r.Intn(10) != 0 { + this.NullableDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + v3 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble = *v3 + if r.Intn(10) != 0 { + this.NullableFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + v4 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat = *v4 + if r.Intn(10) != 0 { + this.NullableInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + v5 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64 = *v5 + if r.Intn(10) != 0 { + this.NullableUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + v6 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64 = *v6 + if r.Intn(10) != 0 { + this.NullableInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + v7 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32 = *v7 + if r.Intn(10) != 0 { + this.NullableUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + } + v8 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32 = *v8 + if r.Intn(10) != 0 { + this.NullableBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } + v9 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool = *v9 + if r.Intn(10) != 0 { + this.NullableString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } + v10 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString = *v10 + if r.Intn(10) != 0 { + this.NullableBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + } + v11 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes = *v11 if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedStdtypes(r, 5) + this.XXX_unrecognized = randUnrecognizedStdtypes(r, 23) } return this } @@ -1082,37 +3738,172 @@ func NewPopulatedRepStdTypes(r randyStdtypes, easy bool) *RepStdTypes { this := &RepStdTypes{} if r.Intn(10) != 0 { - v3 := r.Intn(5) - this.NullableTimestamps = make([]*time.Time, v3) - for i := 0; i < v3; i++ { + v12 := r.Intn(5) + this.NullableTimestamps = make([]*time.Time, v12) + for i := 0; i < v12; i++ { this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) } } if r.Intn(10) != 0 { - v4 := r.Intn(5) - this.NullableDurations = make([]*time.Duration, v4) - for i := 0; i < v4; i++ { + v13 := r.Intn(5) + this.NullableDurations = make([]*time.Duration, v13) + for i := 0; i < v13; i++ { this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) } } if r.Intn(10) != 0 { - v5 := r.Intn(5) - this.Timestamps = make([]time.Time, v5) - for i := 0; i < v5; i++ { - v6 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamps[i] = *v6 + v14 := r.Intn(5) + this.Timestamps = make([]time.Time, v14) + for i := 0; i < v14; i++ { + v15 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamps[i] = *v15 + } + } + if r.Intn(10) != 0 { + v16 := r.Intn(5) + this.Durations = make([]time.Duration, v16) + for i := 0; i < v16; i++ { + v17 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Durations[i] = *v17 + } + } + if r.Intn(10) != 0 { + v18 := r.Intn(5) + this.NullableDouble = make([]*float64, v18) + for i := 0; i < v18; i++ { + this.NullableDouble[i] = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + } + if r.Intn(10) != 0 { + v19 := r.Intn(5) + this.NonnullDouble = make([]float64, v19) + for i := 0; i < v19; i++ { + v20 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble[i] = *v20 + } + } + if r.Intn(10) != 0 { + v21 := r.Intn(5) + this.NullableFloat = make([]*float32, v21) + for i := 0; i < v21; i++ { + this.NullableFloat[i] = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + } + if r.Intn(10) != 0 { + v22 := r.Intn(5) + this.NonnullFloat = make([]float32, v22) + for i := 0; i < v22; i++ { + v23 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat[i] = *v23 + } + } + if r.Intn(10) != 0 { + v24 := r.Intn(5) + this.NullableInt64 = make([]*int64, v24) + for i := 0; i < v24; i++ { + this.NullableInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + } + if r.Intn(10) != 0 { + v25 := r.Intn(5) + this.NonnullInt64 = make([]int64, v25) + for i := 0; i < v25; i++ { + v26 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64[i] = *v26 + } + } + if r.Intn(10) != 0 { + v27 := r.Intn(5) + this.NullableUInt64 = make([]*uint64, v27) + for i := 0; i < v27; i++ { + this.NullableUInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + } + if r.Intn(10) != 0 { + v28 := r.Intn(5) + this.NonnullUInt64 = make([]uint64, v28) + for i := 0; i < v28; i++ { + v29 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64[i] = *v29 + } + } + if r.Intn(10) != 0 { + v30 := r.Intn(5) + this.NullableInt32 = make([]*int32, v30) + for i := 0; i < v30; i++ { + this.NullableInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v31 := r.Intn(5) + this.NonnullInt32 = make([]int32, v31) + for i := 0; i < v31; i++ { + v32 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32[i] = *v32 + } + } + if r.Intn(10) != 0 { + v33 := r.Intn(5) + this.NullableUInt32 = make([]*uint32, v33) + for i := 0; i < v33; i++ { + this.NullableUInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v34 := r.Intn(5) + this.NonnullUInt32 = make([]uint32, v34) + for i := 0; i < v34; i++ { + v35 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32[i] = *v35 + } + } + if r.Intn(10) != 0 { + v36 := r.Intn(5) + this.NullableBool = make([]*bool, v36) + for i := 0; i < v36; i++ { + this.NullableBool[i] = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } + } + if r.Intn(10) != 0 { + v37 := r.Intn(5) + this.NonnullBool = make([]bool, v37) + for i := 0; i < v37; i++ { + v38 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool[i] = *v38 + } + } + if r.Intn(10) != 0 { + v39 := r.Intn(5) + this.NullableString = make([]*string, v39) + for i := 0; i < v39; i++ { + this.NullableString[i] = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } + } + if r.Intn(10) != 0 { + v40 := r.Intn(5) + this.NonnullString = make([]string, v40) + for i := 0; i < v40; i++ { + v41 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString[i] = *v41 + } + } + if r.Intn(10) != 0 { + v42 := r.Intn(5) + this.NullableBytes = make([]*[]byte, v42) + for i := 0; i < v42; i++ { + this.NullableBytes[i] = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) } } if r.Intn(10) != 0 { - v7 := r.Intn(5) - this.Durations = make([]time.Duration, v7) - for i := 0; i < v7; i++ { - v8 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Durations[i] = *v8 + v43 := r.Intn(5) + this.NonnullBytes = make([][]byte, v43) + for i := 0; i < v43; i++ { + v44 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes[i] = *v44 } } if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedStdtypes(r, 5) + this.XXX_unrecognized = randUnrecognizedStdtypes(r, 23) } return this } @@ -1120,50 +3911,194 @@ func NewPopulatedMapStdTypes(r randyStdtypes, easy bool) *MapStdTypes { this := &MapStdTypes{} if r.Intn(10) != 0 { - v9 := r.Intn(10) + v45 := r.Intn(10) this.NullableTimestamp = make(map[int32]*time.Time) - for i := 0; i < v9; i++ { + for i := 0; i < v45; i++ { this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) } } if r.Intn(10) != 0 { - v10 := r.Intn(10) + v46 := r.Intn(10) this.Timestamp = make(map[int32]time.Time) - for i := 0; i < v10; i++ { + for i := 0; i < v46; i++ { this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) } } if r.Intn(10) != 0 { - v11 := r.Intn(10) + v47 := r.Intn(10) this.NullableDuration = make(map[int32]*time.Duration) - for i := 0; i < v11; i++ { + for i := 0; i < v47; i++ { this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) } } if r.Intn(10) != 0 { - v12 := r.Intn(10) + v48 := r.Intn(10) this.Duration = make(map[int32]time.Duration) - for i := 0; i < v12; i++ { + for i := 0; i < v48; i++ { this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) } } + if r.Intn(10) != 0 { + v49 := r.Intn(10) + this.NullableDouble = make(map[int32]*float64) + for i := 0; i < v49; i++ { + this.NullableDouble[int32(r.Int31())] = (*float64)(github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } + } + if r.Intn(10) != 0 { + v50 := r.Intn(10) + this.NonnullDouble = make(map[int32]float64) + for i := 0; i < v50; i++ { + this.NonnullDouble[int32(r.Int31())] = (float64)(*github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } + } + if r.Intn(10) != 0 { + v51 := r.Intn(10) + this.NullableFloat = make(map[int32]*float32) + for i := 0; i < v51; i++ { + this.NullableFloat[int32(r.Int31())] = (*float32)(github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } + } + if r.Intn(10) != 0 { + v52 := r.Intn(10) + this.NonnullFloat = make(map[int32]float32) + for i := 0; i < v52; i++ { + this.NonnullFloat[int32(r.Int31())] = (float32)(*github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } + } + if r.Intn(10) != 0 { + v53 := r.Intn(10) + this.NullableInt64 = make(map[int32]*int64) + for i := 0; i < v53; i++ { + this.NullableInt64[int32(r.Int31())] = (*int64)(github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v54 := r.Intn(10) + this.NonnullInt64 = make(map[int32]int64) + for i := 0; i < v54; i++ { + this.NonnullInt64[int32(r.Int31())] = (int64)(*github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v55 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*uint64) + for i := 0; i < v55; i++ { + this.NullableUInt64[int32(r.Int31())] = (*uint64)(github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v56 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]uint64) + for i := 0; i < v56; i++ { + this.NonnullUInt64[int32(r.Int31())] = (uint64)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v57 := r.Intn(10) + this.NullableInt32 = make(map[int32]*int32) + for i := 0; i < v57; i++ { + this.NullableInt32[int32(r.Int31())] = (*int32)(github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v58 := r.Intn(10) + this.NonnullInt32 = make(map[int32]int32) + for i := 0; i < v58; i++ { + this.NonnullInt32[int32(r.Int31())] = (int32)(*github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v59 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*uint32) + for i := 0; i < v59; i++ { + this.NullableUInt32[int32(r.Int31())] = (*uint32)(github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v60 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]uint32) + for i := 0; i < v60; i++ { + this.NonnullUInt32[int32(r.Int31())] = (uint32)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v61 := r.Intn(10) + this.NullableBool = make(map[int32]*bool) + for i := 0; i < v61; i++ { + this.NullableBool[int32(r.Int31())] = (*bool)(github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } + } + if r.Intn(10) != 0 { + v62 := r.Intn(10) + this.NonnullBool = make(map[int32]bool) + for i := 0; i < v62; i++ { + this.NonnullBool[int32(r.Int31())] = (bool)(*github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } + } + if r.Intn(10) != 0 { + v63 := r.Intn(10) + this.NullableString = make(map[int32]*string) + for i := 0; i < v63; i++ { + this.NullableString[int32(r.Int31())] = (*string)(github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } + } + if r.Intn(10) != 0 { + v64 := r.Intn(10) + this.NonnullString = make(map[int32]string) + for i := 0; i < v64; i++ { + this.NonnullString[int32(r.Int31())] = (string)(*github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } + } + if r.Intn(10) != 0 { + v65 := r.Intn(10) + this.NullableBytes = make(map[int32]*[]byte) + for i := 0; i < v65; i++ { + this.NullableBytes[int32(r.Int31())] = (*[]byte)(github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } + } + if r.Intn(10) != 0 { + v66 := r.Intn(10) + this.NonnullBytes = make(map[int32][]byte) + for i := 0; i < v66; i++ { + this.NonnullBytes[int32(r.Int31())] = ([]byte)(*github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } + } if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedStdtypes(r, 5) + this.XXX_unrecognized = randUnrecognizedStdtypes(r, 23) } return this } func NewPopulatedOneofStdTypes(r randyStdtypes, easy bool) *OneofStdTypes { this := &OneofStdTypes{} - oneofNumber_OneOfStdTimes := []int32{1, 2}[r.Intn(2)] + oneofNumber_OneOfStdTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] switch oneofNumber_OneOfStdTimes { case 1: this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) case 2: this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) + case 3: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepDouble(r, easy) + case 4: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepFloat(r, easy) + case 5: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt64(r, easy) + case 6: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt64(r, easy) + case 7: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt32(r, easy) + case 8: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt32(r, easy) + case 9: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBool(r, easy) + case 10: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepString(r, easy) + case 11: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBytes(r, easy) } if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedStdtypes(r, 3) + this.XXX_unrecognized = randUnrecognizedStdtypes(r, 12) } return this } @@ -1178,6 +4113,51 @@ this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) return this } +func NewPopulatedOneofStdTypes_RepDouble(r randyStdtypes, easy bool) *OneofStdTypes_RepDouble { + this := &OneofStdTypes_RepDouble{} + this.RepDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepFloat(r randyStdtypes, easy bool) *OneofStdTypes_RepFloat { + this := &OneofStdTypes_RepFloat{} + this.RepFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt64(r randyStdtypes, easy bool) *OneofStdTypes_RepInt64 { + this := &OneofStdTypes_RepInt64{} + this.RepInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt64(r randyStdtypes, easy bool) *OneofStdTypes_RepUInt64 { + this := &OneofStdTypes_RepUInt64{} + this.RepUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt32(r randyStdtypes, easy bool) *OneofStdTypes_RepInt32 { + this := &OneofStdTypes_RepInt32{} + this.RepInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt32(r randyStdtypes, easy bool) *OneofStdTypes_RepUInt32 { + this := &OneofStdTypes_RepUInt32{} + this.RepUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBool(r randyStdtypes, easy bool) *OneofStdTypes_RepBool { + this := &OneofStdTypes_RepBool{} + this.RepBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepString(r randyStdtypes, easy bool) *OneofStdTypes_RepString { + this := &OneofStdTypes_RepString{} + this.RepString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBytes(r randyStdtypes, easy bool) *OneofStdTypes_RepBytes { + this := &OneofStdTypes_RepBytes{} + this.RepBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + return this +} type randyStdtypes interface { Float32() float32 @@ -1198,9 +4178,9 @@ return rune(ru + 61) } func randStringStdtypes(r randyStdtypes) string { - v13 := r.Intn(100) - tmps := make([]rune, v13) - for i := 0; i < v13; i++ { + v67 := r.Intn(100) + tmps := make([]rune, v67) + for i := 0; i < v67; i++ { tmps[i] = randUTF8RuneStdtypes(r) } return string(tmps) @@ -1222,11 +4202,11 @@ switch wire { case 0: dAtA = encodeVarintPopulateStdtypes(dAtA, uint64(key)) - v14 := r.Int63() + v68 := r.Int63() if r.Intn(2) == 0 { - v14 *= -1 + v68 *= -1 } - dAtA = encodeVarintPopulateStdtypes(dAtA, uint64(v14)) + dAtA = encodeVarintPopulateStdtypes(dAtA, uint64(v68)) case 1: dAtA = encodeVarintPopulateStdtypes(dAtA, uint64(key)) dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) @@ -1252,6 +4232,9 @@ return dAtA } func (m *StdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NullableTimestamp != nil { @@ -1266,6 +4249,60 @@ n += 1 + l + sovStdtypes(uint64(l)) l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) n += 1 + l + sovStdtypes(uint64(l)) + if m.NullableDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.NullableDouble) + n += 1 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdDouble(m.NonnullDouble) + n += 1 + l + sovStdtypes(uint64(l)) + if m.NullableFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.NullableFloat) + n += 1 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdFloat(m.NonnullFloat) + n += 1 + l + sovStdtypes(uint64(l)) + if m.NullableInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.NullableInt64) + n += 1 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdInt64(m.NonnullInt64) + n += 1 + l + sovStdtypes(uint64(l)) + if m.NullableUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.NullableUInt64) + n += 1 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(m.NonnullUInt64) + n += 1 + l + sovStdtypes(uint64(l)) + if m.NullableInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.NullableInt32) + n += 1 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdInt32(m.NonnullInt32) + n += 1 + l + sovStdtypes(uint64(l)) + if m.NullableUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.NullableUInt32) + n += 1 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(m.NonnullUInt32) + n += 2 + l + sovStdtypes(uint64(l)) + if m.NullableBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.NullableBool) + n += 2 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdBool(m.NonnullBool) + n += 2 + l + sovStdtypes(uint64(l)) + if m.NullableString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.NullableString) + n += 2 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdString(m.NonnullString) + n += 2 + l + sovStdtypes(uint64(l)) + if m.NullableBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.NullableBytes) + n += 2 + l + sovStdtypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdBytes(m.NonnullBytes) + n += 2 + l + sovStdtypes(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -1273,6 +4310,9 @@ } func (m *RepStdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NullableTimestamps) > 0 { @@ -1299,6 +4339,114 @@ n += 1 + l + sovStdtypes(uint64(l)) } } + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*e) + n += 1 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(e) + n += 2 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*e) + n += 2 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(e) + n += 2 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = github_com_gogo_protobuf_types.SizeOfStdString(*e) + n += 2 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = github_com_gogo_protobuf_types.SizeOfStdString(e) + n += 2 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*e) + n += 2 + l + sovStdtypes(uint64(l)) + } + } + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(e) + n += 2 + l + sovStdtypes(uint64(l)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -1306,6 +4454,9 @@ } func (m *MapStdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NullableTimestamp) > 0 { @@ -1352,6 +4503,204 @@ n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) } } + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDouble(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdFloat(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdInt64(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdInt32(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 1 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 2 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 2 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdBool(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 2 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 2 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdString(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 2 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*v) + l += 1 + sovStdtypes(uint64(l)) + } + mapEntrySize := 1 + sovStdtypes(uint64(k)) + l + n += mapEntrySize + 2 + sovStdtypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdBytes(v) + mapEntrySize := 1 + sovStdtypes(uint64(k)) + 1 + l + sovStdtypes(uint64(l)) + n += mapEntrySize + 2 + sovStdtypes(uint64(mapEntrySize)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -1359,6 +4708,9 @@ } func (m *OneofStdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.OneOfStdTimes != nil { @@ -1371,6 +4723,9 @@ } func (m *OneofStdTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Timestamp != nil { @@ -1380,6 +4735,9 @@ return n } func (m *OneofStdTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Duration != nil { @@ -1388,6 +4746,114 @@ } return n } +func (m *OneofStdTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.RepDouble) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.RepFloat) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.RepInt64) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.RepUInt64) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.RepInt32) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.RepUInt32) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.RepBool) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.RepString) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.RepBytes) + n += 1 + l + sovStdtypes(uint64(l)) + } + return n +} func sovStdtypes(x uint64) (n int) { for { @@ -1403,42 +4869,94 @@ return sovStdtypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func init() { proto.RegisterFile("stdtypes.proto", fileDescriptor_stdtypes_bc26b660d02d7cef) } +func init() { proto.RegisterFile("stdtypes.proto", fileDescriptor_stdtypes_ce26a3b6156de25d) } -var fileDescriptor_stdtypes_bc26b660d02d7cef = []byte{ - // 540 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x94, 0x31, 0x6f, 0xd3, 0x40, - 0x1c, 0xc5, 0x7d, 0x4e, 0x82, 0xd2, 0x7f, 0xd4, 0x52, 0x4e, 0x02, 0x19, 0x0f, 0x97, 0x2a, 0x30, - 0x20, 0x51, 0x1c, 0x04, 0x0b, 0x42, 0x42, 0x80, 0x55, 0xa4, 0x22, 0x68, 0x8b, 0x42, 0x85, 0x58, - 0x40, 0x75, 0x88, 0x6b, 0x22, 0x9c, 0x5c, 0x14, 0x9f, 0x91, 0xb2, 0xf1, 0x11, 0x18, 0x59, 0xd9, - 0x18, 0xd8, 0x61, 0x64, 0xec, 0xc8, 0x8e, 0x04, 0x8d, 0xf9, 0x02, 0x8c, 0x1d, 0x91, 0xcf, 0x3e, - 0x9f, 0x13, 0x5f, 0xea, 0x2c, 0xdd, 0x7c, 0xf1, 0xff, 0xfd, 0xee, 0xe5, 0xf9, 0xdd, 0xc1, 0x5a, - 0xc0, 0x7a, 0x6c, 0x32, 0x72, 0x03, 0x6b, 0x34, 0xa6, 0x8c, 0xe2, 0xba, 0x58, 0x9b, 0x37, 0xbc, - 0x3e, 0x7b, 0x1b, 0x76, 0xad, 0x37, 0x74, 0xd0, 0xf6, 0xa8, 0x47, 0xdb, 0x7c, 0xa0, 0x1b, 0x1e, - 0xf2, 0x15, 0x5f, 0xf0, 0xa7, 0x44, 0x68, 0x12, 0x8f, 0x52, 0xcf, 0x77, 0xe5, 0x54, 0x2f, 0x1c, - 0x3b, 0xac, 0x4f, 0x87, 0xe9, 0xfb, 0xe6, 0xfc, 0x7b, 0xd6, 0x1f, 0xb8, 0x01, 0x73, 0x06, 0xa3, - 0x64, 0xa0, 0xf5, 0x55, 0x87, 0xfa, 0x73, 0xd6, 0xdb, 0x8f, 0x37, 0xc7, 0xbb, 0x70, 0x61, 0x18, - 0xfa, 0xbe, 0xd3, 0xf5, 0xdd, 0x7d, 0x31, 0x67, 0xa0, 0x0d, 0x74, 0xad, 0x71, 0xcb, 0xb4, 0x12, - 0x92, 0x25, 0x48, 0x56, 0x36, 0x61, 0x57, 0x3f, 0xfe, 0x69, 0xa2, 0x4e, 0x51, 0x8a, 0x9f, 0xc0, - 0xba, 0xf8, 0x71, 0x2b, 0xf5, 0x65, 0xe8, 0x1c, 0x77, 0xb9, 0x80, 0x13, 0x03, 0x76, 0xf5, 0x53, - 0x4c, 0x2b, 0x08, 0xb1, 0x0d, 0x2b, 0x99, 0x79, 0xa3, 0x52, 0x6a, 0xaa, 0x7e, 0xf4, 0xbb, 0xa9, - 0x71, 0x63, 0x52, 0x86, 0xef, 0x43, 0x5d, 0x04, 0x64, 0x54, 0xcb, 0x8c, 0x70, 0x02, 0x37, 0x93, - 0x89, 0x5a, 0xdf, 0x74, 0x68, 0x74, 0xdc, 0x51, 0x96, 0xd8, 0x33, 0xc0, 0x85, 0xbf, 0x1d, 0x18, - 0x68, 0xa3, 0xb2, 0x54, 0x64, 0x0a, 0x2d, 0xde, 0x91, 0xdf, 0x40, 0x38, 0x09, 0x0c, 0x9d, 0x03, - 0x4b, 0x43, 0x2b, 0x2a, 0xf1, 0x16, 0x00, 0x93, 0xc6, 0x2a, 0xa5, 0xc6, 0x64, 0x6c, 0x39, 0x1d, - 0x7e, 0x08, 0x2b, 0xbd, 0xcc, 0x4c, 0xb5, 0xcc, 0x8c, 0x0c, 0x4e, 0xaa, 0x5a, 0xbf, 0x6a, 0xd0, - 0xd8, 0x71, 0x64, 0x72, 0x07, 0xea, 0xae, 0xc5, 0xe8, 0x4d, 0x2b, 0x3b, 0x1e, 0x39, 0x85, 0xb5, - 0x3b, 0x3f, 0xfe, 0x68, 0xc8, 0xc6, 0x93, 0xc5, 0xed, 0x7b, 0x9a, 0x2f, 0x4c, 0x92, 0xe0, 0x55, - 0x35, 0x79, 0x8e, 0xa8, 0xac, 0xce, 0x2b, 0x45, 0x97, 0x93, 0x38, 0xaf, 0x9f, 0x6e, 0x57, 0x4c, - 0xa7, 0x6e, 0x17, 0xb4, 0xfb, 0xf1, 0x4c, 0x33, 0x63, 0xec, 0x15, 0x35, 0x76, 0x16, 0xa7, 0xe8, - 0xa8, 0x79, 0x00, 0x97, 0xd4, 0x51, 0xe1, 0x75, 0xa8, 0xbc, 0x73, 0x27, 0xfc, 0x44, 0xd7, 0x3a, - 0xf1, 0x23, 0xbe, 0x09, 0xb5, 0xf7, 0x8e, 0x1f, 0xba, 0xe9, 0xb1, 0x3c, 0xa5, 0x19, 0x9d, 0x64, - 0xf0, 0xae, 0x7e, 0x07, 0x99, 0x2f, 0x61, 0xed, 0x8c, 0xc8, 0xaf, 0xe1, 0xa2, 0x32, 0x37, 0xc5, - 0x06, 0xed, 0xd9, 0x0d, 0x16, 0xf7, 0x31, 0xcf, 0x7f, 0x01, 0xab, 0x67, 0xc1, 0x6d, 0x7d, 0x46, - 0xb0, 0xba, 0x37, 0x74, 0xe9, 0x61, 0xd6, 0xef, 0x07, 0xf9, 0xf6, 0x2d, 0x79, 0x87, 0x6e, 0x6b, - 0xf9, 0xc6, 0xdd, 0xcb, 0x55, 0x62, 0xb9, 0x5b, 0x73, 0x5b, 0x93, 0x35, 0xb0, 0xcf, 0x73, 0x47, - 0x7b, 0xdc, 0x51, 0xcc, 0xb4, 0x37, 0x8f, 0xa7, 0x04, 0xfd, 0x9b, 0x12, 0x74, 0x32, 0x25, 0xe8, - 0x4b, 0x44, 0xd0, 0xf7, 0x88, 0xa0, 0x1f, 0x11, 0x41, 0x47, 0x11, 0xd1, 0x7e, 0x46, 0x44, 0x3b, - 0x8e, 0x08, 0x3a, 0x89, 0x88, 0xf6, 0xe1, 0x2f, 0xd1, 0xba, 0xe7, 0xf8, 0x1e, 0xb7, 0xff, 0x07, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x68, 0x05, 0x4b, 0xab, 0x06, 0x00, 0x00, +var fileDescriptor_stdtypes_ce26a3b6156de25d = []byte{ + // 1372 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x99, 0x4f, 0x6f, 0x1b, 0xc5, + 0x1b, 0xc7, 0xbd, 0x19, 0x3b, 0xb5, 0xc7, 0x76, 0x9a, 0x4c, 0x7f, 0xad, 0xf6, 0x67, 0xd0, 0xa6, + 0x0a, 0x88, 0x06, 0x51, 0x1c, 0xd8, 0x45, 0x08, 0x21, 0x50, 0xc1, 0x0a, 0x25, 0x81, 0xfe, 0x01, + 0xd7, 0x6e, 0x2c, 0xa0, 0x50, 0x9b, 0x6c, 0x4d, 0x84, 0xe3, 0xb5, 0xec, 0x35, 0x28, 0x37, 0x5e, + 0x02, 0x47, 0x8e, 0x1c, 0xb9, 0x73, 0xe1, 0xc8, 0xb1, 0x47, 0x5e, 0x01, 0x34, 0xe6, 0x0d, 0x20, + 0xb8, 0xf4, 0x82, 0x84, 0x76, 0x66, 0x76, 0x77, 0x76, 0xf7, 0x99, 0xdd, 0x95, 0x35, 0xbe, 0x25, + 0x99, 0x79, 0x3e, 0xfe, 0xee, 0xe3, 0x51, 0x3e, 0x7e, 0x3c, 0x78, 0x63, 0xe6, 0x1e, 0xbb, 0x67, + 0x13, 0x7b, 0xd6, 0x9c, 0x4c, 0x1d, 0xd7, 0x21, 0x65, 0xff, 0xf7, 0xc6, 0xcb, 0xc3, 0x13, 0xf7, + 0xab, 0xf9, 0xa0, 0xf9, 0xa5, 0x73, 0xba, 0x37, 0x74, 0x86, 0xce, 0x1e, 0xdd, 0x30, 0x98, 0x3f, + 0xa2, 0xbf, 0xd1, 0x5f, 0xe8, 0x4f, 0xac, 0xb0, 0x61, 0x0c, 0x1d, 0x67, 0x38, 0xb2, 0xc3, 0x5d, + 0xc7, 0xf3, 0x69, 0xdf, 0x3d, 0x71, 0xc6, 0x7c, 0x7d, 0x3b, 0xbe, 0xee, 0x9e, 0x9c, 0xda, 0x33, + 0xb7, 0x7f, 0x3a, 0x91, 0x01, 0xbe, 0x9d, 0xf6, 0x27, 0x13, 0x7b, 0xca, 0x93, 0xed, 0xfc, 0x5d, + 0xc3, 0xe5, 0x7b, 0xee, 0x71, 0xc7, 0x0b, 0x47, 0xee, 0xe0, 0xad, 0xf1, 0x7c, 0x34, 0xea, 0x0f, + 0x46, 0x76, 0xc7, 0xe7, 0xe8, 0xda, 0x55, 0x6d, 0xb7, 0x6a, 0x36, 0x9a, 0x0c, 0xd4, 0xf4, 0x41, + 0xcd, 0x60, 0x47, 0xab, 0xf8, 0xfd, 0x1f, 0xdb, 0x5a, 0x3b, 0x59, 0x4a, 0x3e, 0xc4, 0x9b, 0xfe, + 0x1f, 0xf7, 0x79, 0x6e, 0x7d, 0x8d, 0xe2, 0xfe, 0x9f, 0xc0, 0xf9, 0x1b, 0x5a, 0xc5, 0x1f, 0x3c, + 0x5a, 0xa2, 0x90, 0xb4, 0x70, 0x25, 0x78, 0x38, 0x1d, 0x65, 0x86, 0x2a, 0x3f, 0xfe, 0x7d, 0xbb, + 0x40, 0x83, 0x85, 0x65, 0xe4, 0x06, 0x2e, 0xfb, 0x0d, 0xd4, 0x8b, 0x59, 0x41, 0x28, 0x81, 0x86, + 0x09, 0x8a, 0xc8, 0x07, 0x78, 0x23, 0x08, 0xe6, 0xcc, 0x07, 0x23, 0x5b, 0x2f, 0x51, 0xcc, 0xb3, + 0x49, 0x0c, 0x5d, 0xbe, 0xdf, 0x1f, 0xcd, 0xed, 0x56, 0xf1, 0x47, 0x8f, 0x12, 0xab, 0x24, 0xb7, + 0x70, 0x7d, 0xec, 0x8c, 0xbd, 0x3f, 0x72, 0xd4, 0x7a, 0x0e, 0x14, 0x0d, 0x45, 0x71, 0xd1, 0x62, + 0xf2, 0x3e, 0xae, 0xfb, 0xfc, 0x9b, 0x23, 0xa7, 0xef, 0xea, 0x17, 0x28, 0xed, 0x99, 0x04, 0x8d, + 0xae, 0x8a, 0xb9, 0xa2, 0x75, 0xe4, 0x10, 0xd7, 0x38, 0x99, 0x71, 0xca, 0xd9, 0x9c, 0x30, 0x54, + 0xa4, 0x54, 0xcc, 0x74, 0x38, 0x76, 0x5f, 0x7f, 0x4d, 0xaf, 0x48, 0x58, 0x74, 0x15, 0xcc, 0x44, + 0x57, 0x84, 0x4c, 0x8c, 0x83, 0xb3, 0x39, 0xc9, 0x4c, 0x0c, 0x25, 0xbc, 0x83, 0x5d, 0x06, 0xab, + 0x4a, 0xda, 0xde, 0x4d, 0xa4, 0x8a, 0x55, 0x0a, 0xef, 0x20, 0x47, 0xd5, 0x72, 0xa0, 0x92, 0xef, + 0x20, 0xa7, 0x45, 0xbb, 0x65, 0x99, 0x7a, 0x5d, 0xfe, 0x94, 0x96, 0x29, 0xeb, 0x96, 0x65, 0x46, + 0xbb, 0x65, 0x99, 0xfa, 0x46, 0x36, 0x07, 0xec, 0x96, 0x65, 0xc6, 0xbb, 0x65, 0x99, 0xfa, 0xc5, + 0x94, 0x47, 0x8c, 0xa6, 0x8a, 0x55, 0xc6, 0xba, 0x65, 0x99, 0xfa, 0x66, 0x0e, 0x14, 0xdc, 0x2d, + 0xcb, 0x24, 0xfb, 0xb8, 0xe6, 0xf3, 0x5b, 0x8e, 0x33, 0xd2, 0xb7, 0x24, 0xff, 0x11, 0xbc, 0x45, + 0x31, 0x55, 0xa4, 0x8a, 0xdc, 0xc4, 0x55, 0x8e, 0xa5, 0x10, 0x92, 0x09, 0x09, 0xf3, 0x88, 0x85, + 0x62, 0x9f, 0xee, 0xb9, 0xd3, 0x93, 0xf1, 0x50, 0xbf, 0x24, 0x79, 0x38, 0xb6, 0x0c, 0xf6, 0x89, + 0x2d, 0x09, 0x7d, 0xe2, 0xa8, 0xff, 0xe5, 0x40, 0x25, 0xfb, 0xc4, 0x69, 0xc2, 0xa9, 0x6a, 0x9d, + 0xb9, 0xf6, 0x4c, 0xbf, 0x2c, 0x39, 0x0d, 0x74, 0x15, 0x3c, 0x55, 0x74, 0x45, 0x38, 0x55, 0x8c, + 0x73, 0x25, 0x9b, 0x93, 0x3c, 0x55, 0x74, 0x71, 0xe7, 0xdf, 0x1a, 0xae, 0xb6, 0xed, 0x49, 0xe0, + 0x9d, 0x8f, 0x30, 0x49, 0xc8, 0x63, 0xa6, 0x6b, 0x57, 0x51, 0x2e, 0xf1, 0x00, 0xb5, 0xe4, 0x76, + 0x68, 0x32, 0xff, 0xff, 0xf9, 0x4c, 0x5f, 0xa3, 0xc0, 0x4c, 0xf5, 0x24, 0x2b, 0xc9, 0x3e, 0xc6, + 0x6e, 0x18, 0x0c, 0x65, 0x06, 0x0b, 0xe5, 0x23, 0xd4, 0x91, 0x77, 0x71, 0xe5, 0x38, 0x08, 0x53, + 0xcc, 0x0a, 0x13, 0xea, 0x27, 0xac, 0x02, 0xfd, 0x83, 0xd4, 0xf9, 0x07, 0x29, 0xf5, 0x0f, 0x52, + 0xe4, 0x1f, 0xa4, 0xd0, 0x3f, 0x48, 0x91, 0x7f, 0x90, 0x4a, 0xff, 0x20, 0x75, 0xfe, 0x41, 0x4a, + 0xfd, 0x83, 0x14, 0xf9, 0x07, 0xa9, 0xf4, 0x0f, 0x52, 0xe7, 0x1f, 0xa4, 0xd2, 0x3f, 0x48, 0x85, + 0x7f, 0x90, 0x3a, 0xff, 0x20, 0x75, 0xfe, 0x41, 0x4a, 0xfd, 0x83, 0x14, 0xf9, 0x07, 0x2d, 0xeb, + 0x9f, 0x9f, 0xb7, 0x71, 0xf5, 0x76, 0x3f, 0xf4, 0xcf, 0x43, 0x78, 0xee, 0xf1, 0xf8, 0xd7, 0x9b, + 0xc1, 0x28, 0x27, 0x54, 0x34, 0xef, 0xc4, 0xb7, 0xbf, 0x37, 0x76, 0xa7, 0x67, 0xf2, 0x49, 0xe8, + 0x96, 0x38, 0xbc, 0x30, 0x0f, 0x3d, 0x0f, 0x93, 0x63, 0x44, 0x70, 0x8c, 0x79, 0x00, 0xcc, 0x55, + 0x4c, 0x4a, 0x2f, 0xa5, 0xc7, 0xf5, 0x77, 0xf3, 0xb4, 0x92, 0x49, 0xeb, 0x30, 0x32, 0x25, 0x79, + 0xd8, 0xe7, 0x60, 0x6c, 0x14, 0x07, 0xcd, 0x4b, 0x47, 0x12, 0x5f, 0xbd, 0x98, 0x91, 0x93, 0xee, + 0xe5, 0x29, 0x41, 0x79, 0xf5, 0x60, 0x79, 0xed, 0x4a, 0xb8, 0xe2, 0x56, 0x21, 0x2d, 0x24, 0xb2, + 0x0e, 0x2c, 0xb2, 0xdd, 0xf4, 0xc4, 0x74, 0xab, 0x18, 0x38, 0x66, 0xb5, 0x2e, 0x68, 0xb5, 0x6b, + 0xa9, 0x71, 0x05, 0xa6, 0xcc, 0x70, 0x1d, 0xd8, 0x70, 0x19, 0x61, 0xe9, 0x56, 0x30, 0x2c, 0x33, + 0x41, 0x17, 0xd4, 0x5d, 0x7a, 0x58, 0x81, 0x29, 0x53, 0xdf, 0x91, 0x44, 0x7d, 0x19, 0x87, 0xa1, + 0x9b, 0x88, 0x1b, 0xf7, 0x60, 0x0f, 0xf6, 0x60, 0xfa, 0x61, 0xe8, 0x82, 0x89, 0x63, 0x4e, 0xec, + 0xc0, 0x4e, 0xcc, 0xee, 0xaf, 0x65, 0xca, 0xfa, 0x6b, 0x99, 0xd1, 0xfe, 0x06, 0x82, 0xcc, 0xec, + 0xaf, 0xcf, 0x94, 0xc9, 0xf2, 0x48, 0x22, 0xcb, 0x1c, 0xfd, 0x8d, 0xc6, 0x8d, 0x9b, 0xb3, 0x07, + 0x9b, 0x33, 0xbb, 0xbf, 0xc9, 0xc4, 0x31, 0x8b, 0x7e, 0x0c, 0x5a, 0xf4, 0x5a, 0x7a, 0x60, 0x6f, + 0xa7, 0x18, 0x37, 0xaa, 0xd4, 0x36, 0xa4, 0xd4, 0x17, 0x52, 0xa3, 0x86, 0x40, 0x89, 0x5e, 0x8f, + 0x24, 0x7a, 0xcd, 0xe8, 0x2c, 0xdb, 0x0b, 0x76, 0x96, 0xdb, 0xb1, 0x07, 0xbb, 0x36, 0xbd, 0xb3, + 0x22, 0x56, 0xea, 0xdd, 0x0e, 0xec, 0xdd, 0x8c, 0x93, 0x4b, 0xb7, 0x82, 0x27, 0x97, 0x49, 0xb8, + 0x0b, 0x4a, 0x38, 0xfd, 0xe4, 0x0a, 0x4c, 0x89, 0x90, 0x1b, 0x0f, 0xf1, 0x15, 0xd8, 0xa8, 0x64, + 0x13, 0xa3, 0xaf, 0xed, 0x33, 0xfa, 0x25, 0x64, 0xa9, 0xed, 0xfd, 0x48, 0x5e, 0xc1, 0xa5, 0x6f, + 0x3c, 0xbb, 0xf3, 0x6f, 0x12, 0x53, 0xc6, 0xb0, 0x36, 0xdb, 0xf8, 0xe6, 0xda, 0x1b, 0x5a, 0xa3, + 0x87, 0x37, 0x56, 0x44, 0xfe, 0x1c, 0x5f, 0x06, 0xf5, 0x0a, 0xbc, 0xc0, 0x5e, 0xf4, 0x05, 0xe4, + 0xc3, 0x9f, 0xc8, 0xbf, 0x8f, 0xeb, 0x2b, 0xe1, 0x7e, 0x81, 0x2f, 0x01, 0xba, 0x05, 0xe8, 0x66, + 0x94, 0x9e, 0x3a, 0x1f, 0x46, 0x1b, 0x43, 0x92, 0xde, 0x55, 0xc8, 0x7f, 0x80, 0x49, 0xd2, 0xbe, + 0x00, 0xff, 0xd5, 0x28, 0x3f, 0x6d, 0x92, 0x14, 0xf1, 0x9f, 0xe1, 0xad, 0x84, 0x87, 0xd5, 0xd1, + 0x85, 0xf0, 0xa1, 0x87, 0x96, 0xc1, 0x87, 0x93, 0x1d, 0x1c, 0x7e, 0x15, 0x74, 0xe1, 0xe8, 0x74, + 0x53, 0xf9, 0x99, 0x6f, 0x6d, 0x17, 0x7e, 0x81, 0xf0, 0xe8, 0xac, 0x86, 0x1f, 0xed, 0x3e, 0xb7, + 0xd4, 0x92, 0xfd, 0xe1, 0x93, 0xa2, 0xb4, 0xfb, 0xca, 0xe9, 0xb1, 0xee, 0xcb, 0xf9, 0xb9, 0xba, + 0x03, 0xbc, 0x40, 0xb4, 0xfb, 0xea, 0xf9, 0x9f, 0xe2, 0xad, 0x84, 0xca, 0x97, 0xf9, 0x77, 0x1c, + 0x4c, 0xc5, 0x22, 0xfc, 0x13, 0xbc, 0x19, 0xb7, 0xba, 0x32, 0xb6, 0xd0, 0x79, 0xc1, 0xc1, 0xcb, + 0x74, 0x46, 0x18, 0x9d, 0xe1, 0xce, 0xaf, 0x86, 0x2f, 0x9c, 0xfb, 0xd0, 0xca, 0xcb, 0x9c, 0xcc, + 0x70, 0xc8, 0x86, 0xcf, 0xfd, 0x0a, 0xe8, 0x3b, 0xff, 0x94, 0x70, 0xfd, 0xee, 0xd8, 0x76, 0x1e, + 0x05, 0x73, 0xfb, 0x3b, 0xe2, 0x54, 0x9d, 0xf3, 0x9e, 0xf2, 0xa0, 0x20, 0x4e, 0xd2, 0x6f, 0x0b, + 0xa3, 0x6e, 0xbe, 0x9b, 0xc9, 0x83, 0x82, 0x30, 0xde, 0xb6, 0x70, 0x65, 0x6a, 0x4f, 0xf8, 0x04, + 0x8a, 0xf2, 0xde, 0x04, 0x7a, 0x11, 0x82, 0x32, 0x72, 0x03, 0x97, 0xa7, 0xf6, 0x84, 0x4d, 0x85, + 0xc5, 0x9c, 0x77, 0x76, 0x5e, 0x08, 0xbf, 0x88, 0x03, 0xd8, 0xe0, 0x53, 0xca, 0x79, 0xc1, 0xc6, + 0x01, 0x6c, 0xc8, 0x61, 0x4f, 0xc1, 0x47, 0xa7, 0xf5, 0xbc, 0xb7, 0x61, 0xfc, 0x29, 0xf8, 0xa0, + 0x14, 0x84, 0xb0, 0x4c, 0xe9, 0xcd, 0x63, 0xfc, 0x1b, 0xba, 0x30, 0x84, 0x65, 0x0a, 0x21, 0x2c, + 0x93, 0xdf, 0x39, 0xe6, 0xf8, 0x92, 0x4f, 0x08, 0x61, 0x99, 0xe4, 0x2d, 0x7c, 0x61, 0x6a, 0x4f, + 0xe8, 0xc7, 0xfe, 0x4a, 0xbe, 0xeb, 0xa0, 0x83, 0x42, 0xdb, 0x2f, 0xe1, 0x09, 0xf8, 0xe7, 0x70, + 0x9c, 0xf7, 0xfa, 0x86, 0x27, 0xe0, 0x9f, 0xba, 0x59, 0x1b, 0xd8, 0x67, 0xe3, 0x6a, 0xce, 0x8b, + 0x16, 0xde, 0x06, 0xfa, 0xe7, 0xd6, 0x45, 0x7a, 0xc6, 0xef, 0xd2, 0x33, 0xee, 0x9d, 0xd2, 0xd6, + 0xf5, 0x27, 0xe7, 0x86, 0xf6, 0xd7, 0xb9, 0xa1, 0x3d, 0x3d, 0x37, 0xb4, 0x9f, 0x16, 0x86, 0xf6, + 0xcb, 0xc2, 0xd0, 0x7e, 0x5d, 0x18, 0xda, 0xe3, 0x85, 0x51, 0xf8, 0x6d, 0x61, 0x14, 0x9e, 0x2c, + 0x0c, 0xed, 0xe9, 0xc2, 0x28, 0x7c, 0xf7, 0xa7, 0x51, 0x18, 0xac, 0xd3, 0x57, 0xb1, 0xfe, 0x0b, + 0x00, 0x00, 0xff, 0xff, 0xd9, 0x80, 0xa9, 0x4d, 0x81, 0x20, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/stdtypes/stdtypes.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/stdtypes/stdtypes.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/stdtypes/stdtypes.proto 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/stdtypes/stdtypes.proto 2018-11-22 20:53:45.000000000 +0000 @@ -34,6 +34,7 @@ import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; option (gogoproto.testgen_all) = true; option (gogoproto.populate_all) = true; @@ -52,6 +53,33 @@ google.protobuf.Duration nullableDuration = 2 [(gogoproto.stdduration) = true]; google.protobuf.Timestamp timestamp = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; google.protobuf.Duration duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + google.protobuf.DoubleValue nullableDouble = 5 [(gogoproto.wktpointer) = true]; + google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + google.protobuf.FloatValue nullableFloat = 7 [(gogoproto.wktpointer) = true]; + google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + google.protobuf.Int64Value nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + google.protobuf.UInt64Value nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + google.protobuf.Int32Value nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + google.protobuf.UInt32Value nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + google.protobuf.BoolValue nullableBool = 17 [(gogoproto.wktpointer) = true]; + google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + google.protobuf.StringValue nullableString = 19 [(gogoproto.wktpointer) = true]; + google.protobuf.StringValue nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + google.protobuf.BytesValue nullableBytes = 21 [(gogoproto.wktpointer) = true]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message RepStdTypes { @@ -59,6 +87,33 @@ repeated google.protobuf.Duration nullableDurations = 2 [(gogoproto.stdduration) = true]; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message MapStdTypes { @@ -67,12 +122,48 @@ map nullableDuration = 3 [(gogoproto.stdduration) = true]; map duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + map nullableDouble = 5 [(gogoproto.wktpointer) = true]; + map nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableFloat = 7 [(gogoproto.wktpointer) = true]; + map nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + map nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + map nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + map nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + map nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBool = 17 [(gogoproto.wktpointer) = true]; + map nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableString = 19 [(gogoproto.wktpointer) = true]; + map nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBytes = 21 [(gogoproto.wktpointer) = true]; + map nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message OneofStdTypes { oneof OneOfStdTimes { google.protobuf.Timestamp timestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration duration = 2 [(gogoproto.stdduration) = true]; + google.protobuf.DoubleValue repDouble = 3 [(gogoproto.wktpointer) = true]; + google.protobuf.FloatValue repFloat = 4 [(gogoproto.wktpointer) = true]; + google.protobuf.Int64Value repInt64 = 5 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt64Value repUInt64 = 6 [(gogoproto.wktpointer) = true]; + google.protobuf.Int32Value repInt32 = 7 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt32Value repUInt32 = 8 [(gogoproto.wktpointer) = true]; + google.protobuf.BoolValue repBool = 9 [(gogoproto.wktpointer) = true]; + google.protobuf.StringValue repString = 10 [(gogoproto.wktpointer) = true]; + google.protobuf.BytesValue repBytes = 11 [(gogoproto.wktpointer) = true]; } } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/combos/both/theproto3.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/combos/both/theproto3.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/combos/both/theproto3.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/combos/both/theproto3.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -605,506 +605,511 @@ func Theproto3Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 7971 bytes of a gzipped FileDescriptorSet + // 8053 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x70, 0x23, 0xd7, - 0x99, 0xde, 0x34, 0x1a, 0x24, 0xc1, 0x1f, 0x20, 0xd9, 0x6c, 0xce, 0x50, 0x10, 0x35, 0x26, 0x67, - 0xa0, 0xd1, 0x88, 0xa2, 0x2d, 0xce, 0x0c, 0x87, 0x73, 0xc3, 0x58, 0xd2, 0x02, 0x20, 0x38, 0xe2, - 0x98, 0x37, 0x37, 0x49, 0x4b, 0x63, 0x25, 0x41, 0x35, 0x81, 0x43, 0x12, 0x12, 0xd0, 0x8d, 0x45, - 0x37, 0x24, 0x51, 0x95, 0x4a, 0x29, 0xeb, 0x64, 0xe3, 0x4d, 0x2a, 0xd7, 0x4d, 0x2a, 0x5e, 0xc7, - 0x17, 0x39, 0x29, 0xc7, 0xde, 0xcd, 0xcd, 0xeb, 0xdd, 0x38, 0xbb, 0x5b, 0xa9, 0xac, 0xf2, 0xe0, - 0x64, 0xf2, 0x92, 0xf2, 0x26, 0x2f, 0x29, 0x57, 0x4a, 0x65, 0x8d, 0x9d, 0x8a, 0x93, 0x38, 0x59, - 0x67, 0xe3, 0xaa, 0xb8, 0xca, 0xfb, 0xb0, 0x75, 0x6e, 0xdd, 0xe7, 0x1c, 0x34, 0xd0, 0xe0, 0x48, - 0xb2, 0xf7, 0xc1, 0x2f, 0x33, 0xe8, 0x73, 0xfe, 0xef, 0xeb, 0xbf, 0xff, 0xdb, 0xf9, 0xbb, 0x4f, - 0x03, 0x84, 0x3f, 0xbc, 0x05, 0xe7, 0x0e, 0x5d, 0xf7, 0xb0, 0x81, 0x2e, 0xb5, 0xda, 0xae, 0xef, - 0xee, 0x77, 0x0e, 0x2e, 0xd5, 0x90, 0x57, 0x6d, 0xd7, 0x5b, 0xbe, 0xdb, 0x5e, 0x24, 0x63, 0xe6, - 0x04, 0x95, 0x58, 0xe4, 0x12, 0xb9, 0x0d, 0x98, 0x5c, 0xad, 0x37, 0xd0, 0x4a, 0x20, 0xb8, 0x83, - 0x7c, 0xf3, 0x26, 0x24, 0x0f, 0xea, 0x0d, 0x94, 0xd5, 0xce, 0xe9, 0xf3, 0xe9, 0xa5, 0x0b, 0x8b, - 0x0a, 0x68, 0x51, 0x46, 0x6c, 0xe3, 0x61, 0x8b, 0x20, 0x72, 0xdf, 0x4b, 0xc2, 0x54, 0xc4, 0xac, - 0x69, 0x42, 0xd2, 0xb1, 0x9b, 0x98, 0x51, 0x9b, 0x1f, 0xb5, 0xc8, 0x67, 0x33, 0x0b, 0x23, 0x2d, - 0xbb, 0xfa, 0x8a, 0x7d, 0x88, 0xb2, 0x09, 0x32, 0xcc, 0x0f, 0xcd, 0x59, 0x80, 0x1a, 0x6a, 0x21, - 0xa7, 0x86, 0x9c, 0xea, 0x71, 0x56, 0x3f, 0xa7, 0xcf, 0x8f, 0x5a, 0xc2, 0x88, 0xf9, 0x61, 0x98, - 0x6c, 0x75, 0xf6, 0x1b, 0xf5, 0x6a, 0x45, 0x10, 0x83, 0x73, 0xfa, 0xfc, 0x90, 0x65, 0xd0, 0x89, - 0x95, 0x50, 0xf8, 0x49, 0x98, 0x78, 0x0d, 0xd9, 0xaf, 0x88, 0xa2, 0x69, 0x22, 0x3a, 0x8e, 0x87, - 0x05, 0xc1, 0x12, 0x64, 0x9a, 0xc8, 0xf3, 0xec, 0x43, 0x54, 0xf1, 0x8f, 0x5b, 0x28, 0x9b, 0x24, - 0x57, 0x7f, 0xae, 0xeb, 0xea, 0xd5, 0x2b, 0x4f, 0x33, 0xd4, 0xee, 0x71, 0x0b, 0x99, 0x05, 0x18, - 0x45, 0x4e, 0xa7, 0x49, 0x19, 0x86, 0x7a, 0xd8, 0xaf, 0xec, 0x74, 0x9a, 0x2a, 0x4b, 0x0a, 0xc3, - 0x18, 0xc5, 0x88, 0x87, 0xda, 0xaf, 0xd6, 0xab, 0x28, 0x3b, 0x4c, 0x08, 0x9e, 0xec, 0x22, 0xd8, - 0xa1, 0xf3, 0x2a, 0x07, 0xc7, 0x99, 0x25, 0x18, 0x45, 0xaf, 0xfb, 0xc8, 0xf1, 0xea, 0xae, 0x93, - 0x1d, 0x21, 0x24, 0x4f, 0x44, 0x78, 0x11, 0x35, 0x6a, 0x2a, 0x45, 0x88, 0x33, 0xaf, 0xc3, 0x88, - 0xdb, 0xf2, 0xeb, 0xae, 0xe3, 0x65, 0x53, 0xe7, 0xb4, 0xf9, 0xf4, 0xd2, 0xd9, 0xc8, 0x40, 0xd8, - 0xa2, 0x32, 0x16, 0x17, 0x36, 0xd7, 0xc0, 0xf0, 0xdc, 0x4e, 0xbb, 0x8a, 0x2a, 0x55, 0xb7, 0x86, - 0x2a, 0x75, 0xe7, 0xc0, 0xcd, 0x8e, 0x12, 0x82, 0xb9, 0xee, 0x0b, 0x21, 0x82, 0x25, 0xb7, 0x86, - 0xd6, 0x9c, 0x03, 0xd7, 0x1a, 0xf7, 0xa4, 0x63, 0x73, 0x1a, 0x86, 0xbd, 0x63, 0xc7, 0xb7, 0x5f, - 0xcf, 0x66, 0x48, 0x84, 0xb0, 0xa3, 0xdc, 0xef, 0x0e, 0xc3, 0xc4, 0x20, 0x21, 0x76, 0x1b, 0x86, - 0x0e, 0xf0, 0x55, 0x66, 0x13, 0x27, 0xb1, 0x01, 0xc5, 0xc8, 0x46, 0x1c, 0x7e, 0x48, 0x23, 0x16, - 0x20, 0xed, 0x20, 0xcf, 0x47, 0x35, 0x1a, 0x11, 0xfa, 0x80, 0x31, 0x05, 0x14, 0xd4, 0x1d, 0x52, - 0xc9, 0x87, 0x0a, 0xa9, 0x17, 0x61, 0x22, 0x50, 0xa9, 0xd2, 0xb6, 0x9d, 0x43, 0x1e, 0x9b, 0x97, - 0xe2, 0x34, 0x59, 0x2c, 0x73, 0x9c, 0x85, 0x61, 0xd6, 0x38, 0x92, 0x8e, 0xcd, 0x15, 0x00, 0xd7, - 0x41, 0xee, 0x41, 0xa5, 0x86, 0xaa, 0x8d, 0x6c, 0xaa, 0x87, 0x95, 0xb6, 0xb0, 0x48, 0x97, 0x95, - 0x5c, 0x3a, 0x5a, 0x6d, 0x98, 0xb7, 0xc2, 0x50, 0x1b, 0xe9, 0x11, 0x29, 0x1b, 0x34, 0xc9, 0xba, - 0xa2, 0x6d, 0x0f, 0xc6, 0xdb, 0x08, 0xc7, 0x3d, 0xaa, 0xb1, 0x2b, 0x1b, 0x25, 0x4a, 0x2c, 0xc6, - 0x5e, 0x99, 0xc5, 0x60, 0xf4, 0xc2, 0xc6, 0xda, 0xe2, 0xa1, 0xf9, 0x38, 0x04, 0x03, 0x15, 0x12, - 0x56, 0x40, 0xaa, 0x50, 0x86, 0x0f, 0x6e, 0xda, 0x4d, 0x34, 0xf3, 0x06, 0x8c, 0xcb, 0xe6, 0x31, - 0x4f, 0xc3, 0x90, 0xe7, 0xdb, 0x6d, 0x9f, 0x44, 0xe1, 0x90, 0x45, 0x0f, 0x4c, 0x03, 0x74, 0xe4, - 0xd4, 0x48, 0x95, 0x1b, 0xb2, 0xf0, 0x47, 0xf3, 0x17, 0xc2, 0x0b, 0xd6, 0xc9, 0x05, 0x5f, 0xec, - 0xf6, 0xa8, 0xc4, 0xac, 0x5e, 0xf7, 0xcc, 0x0d, 0x18, 0x93, 0x2e, 0x60, 0xd0, 0x53, 0xe7, 0xfe, - 0x3c, 0x9c, 0x89, 0xa4, 0x36, 0x5f, 0x84, 0xd3, 0x1d, 0xa7, 0xee, 0xf8, 0xa8, 0xdd, 0x6a, 0x23, - 0x1c, 0xb1, 0xf4, 0x54, 0xd9, 0xff, 0x3e, 0xd2, 0x23, 0xe6, 0xf6, 0x44, 0x69, 0xca, 0x62, 0x4d, - 0x75, 0xba, 0x07, 0x17, 0x46, 0x53, 0xdf, 0x1f, 0x31, 0xde, 0x7c, 0xf3, 0xcd, 0x37, 0x13, 0xb9, - 0xcf, 0x0c, 0xc3, 0xe9, 0xa8, 0x9c, 0x89, 0x4c, 0xdf, 0x69, 0x18, 0x76, 0x3a, 0xcd, 0x7d, 0xd4, - 0x26, 0x46, 0x1a, 0xb2, 0xd8, 0x91, 0x59, 0x80, 0xa1, 0x86, 0xbd, 0x8f, 0x1a, 0xd9, 0xe4, 0x39, - 0x6d, 0x7e, 0x7c, 0xe9, 0xc3, 0x03, 0x65, 0xe5, 0xe2, 0x3a, 0x86, 0x58, 0x14, 0x69, 0x3e, 0x0b, - 0x49, 0x56, 0xa2, 0x31, 0xc3, 0xc2, 0x60, 0x0c, 0x38, 0x97, 0x2c, 0x82, 0x33, 0x1f, 0x83, 0x51, - 0xfc, 0x3f, 0x8d, 0x8d, 0x61, 0xa2, 0x73, 0x0a, 0x0f, 0xe0, 0xb8, 0x30, 0x67, 0x20, 0x45, 0xd2, - 0xa4, 0x86, 0xf8, 0xd2, 0x16, 0x1c, 0xe3, 0xc0, 0xaa, 0xa1, 0x03, 0xbb, 0xd3, 0xf0, 0x2b, 0xaf, - 0xda, 0x8d, 0x0e, 0x22, 0x01, 0x3f, 0x6a, 0x65, 0xd8, 0xe0, 0x27, 0xf0, 0x98, 0x39, 0x07, 0x69, - 0x9a, 0x55, 0x75, 0xa7, 0x86, 0x5e, 0x27, 0xd5, 0x73, 0xc8, 0xa2, 0x89, 0xb6, 0x86, 0x47, 0xf0, - 0xe9, 0x5f, 0xf6, 0x5c, 0x87, 0x87, 0x26, 0x39, 0x05, 0x1e, 0x20, 0xa7, 0xbf, 0xa1, 0x16, 0xee, - 0x0f, 0x45, 0x5f, 0x9e, 0x1a, 0x53, 0xb9, 0x6f, 0x24, 0x20, 0x49, 0xea, 0xc5, 0x04, 0xa4, 0x77, - 0xef, 0x6d, 0x97, 0x2b, 0x2b, 0x5b, 0x7b, 0xc5, 0xf5, 0xb2, 0xa1, 0x99, 0xe3, 0x00, 0x64, 0x60, - 0x75, 0x7d, 0xab, 0xb0, 0x6b, 0x24, 0x82, 0xe3, 0xb5, 0xcd, 0xdd, 0xeb, 0xcb, 0x86, 0x1e, 0x00, - 0xf6, 0xe8, 0x40, 0x52, 0x14, 0xb8, 0xba, 0x64, 0x0c, 0x99, 0x06, 0x64, 0x28, 0xc1, 0xda, 0x8b, - 0xe5, 0x95, 0xeb, 0xcb, 0xc6, 0xb0, 0x3c, 0x72, 0x75, 0xc9, 0x18, 0x31, 0xc7, 0x60, 0x94, 0x8c, - 0x14, 0xb7, 0xb6, 0xd6, 0x8d, 0x54, 0xc0, 0xb9, 0xb3, 0x6b, 0xad, 0x6d, 0xde, 0x31, 0x46, 0x03, - 0xce, 0x3b, 0xd6, 0xd6, 0xde, 0xb6, 0x01, 0x01, 0xc3, 0x46, 0x79, 0x67, 0xa7, 0x70, 0xa7, 0x6c, - 0xa4, 0x03, 0x89, 0xe2, 0xbd, 0xdd, 0xf2, 0x8e, 0x91, 0x91, 0xd4, 0xba, 0xba, 0x64, 0x8c, 0x05, - 0xa7, 0x28, 0x6f, 0xee, 0x6d, 0x18, 0xe3, 0xe6, 0x24, 0x8c, 0xd1, 0x53, 0x70, 0x25, 0x26, 0x94, - 0xa1, 0xeb, 0xcb, 0x86, 0x11, 0x2a, 0x42, 0x59, 0x26, 0xa5, 0x81, 0xeb, 0xcb, 0x86, 0x99, 0x2b, - 0xc1, 0x10, 0x89, 0x2e, 0xd3, 0x84, 0xf1, 0xf5, 0x42, 0xb1, 0xbc, 0x5e, 0xd9, 0xda, 0xde, 0x5d, - 0xdb, 0xda, 0x2c, 0xac, 0x1b, 0x5a, 0x38, 0x66, 0x95, 0x3f, 0xbe, 0xb7, 0x66, 0x95, 0x57, 0x8c, - 0x84, 0x38, 0xb6, 0x5d, 0x2e, 0xec, 0x96, 0x57, 0x0c, 0x3d, 0x57, 0x85, 0xd3, 0x51, 0x75, 0x32, - 0x32, 0x33, 0x04, 0x17, 0x27, 0x7a, 0xb8, 0x98, 0x70, 0x75, 0xb9, 0xf8, 0xbb, 0x09, 0x98, 0x8a, - 0x58, 0x2b, 0x22, 0x4f, 0xf2, 0x1c, 0x0c, 0xd1, 0x10, 0xa5, 0xab, 0xe7, 0x53, 0x91, 0x8b, 0x0e, - 0x09, 0xd8, 0xae, 0x15, 0x94, 0xe0, 0xc4, 0x0e, 0x42, 0xef, 0xd1, 0x41, 0x60, 0x8a, 0xae, 0x9a, - 0xfe, 0x67, 0xbb, 0x6a, 0x3a, 0x5d, 0xf6, 0xae, 0x0f, 0xb2, 0xec, 0x91, 0xb1, 0x93, 0xd5, 0xf6, - 0xa1, 0x88, 0xda, 0x7e, 0x1b, 0x26, 0xbb, 0x88, 0x06, 0xae, 0xb1, 0x9f, 0xd2, 0x20, 0xdb, 0xcb, - 0x38, 0x31, 0x95, 0x2e, 0x21, 0x55, 0xba, 0xdb, 0xaa, 0x05, 0xcf, 0xf7, 0x76, 0x42, 0x97, 0xaf, - 0xbf, 0xa2, 0xc1, 0x74, 0x74, 0xa7, 0x18, 0xa9, 0xc3, 0xb3, 0x30, 0xdc, 0x44, 0xfe, 0x91, 0xcb, - 0xbb, 0xa5, 0x8b, 0x11, 0x6b, 0x30, 0x9e, 0x56, 0x9d, 0xcd, 0x50, 0xe2, 0x22, 0xae, 0xf7, 0x6a, - 0xf7, 0xa8, 0x36, 0x5d, 0x9a, 0xfe, 0x4a, 0x02, 0xce, 0x44, 0x92, 0x47, 0x2a, 0xfa, 0x21, 0x80, - 0xba, 0xd3, 0xea, 0xf8, 0xb4, 0x23, 0xa2, 0x05, 0x76, 0x94, 0x8c, 0x90, 0xe2, 0x85, 0x8b, 0x67, - 0xc7, 0x0f, 0xe6, 0x75, 0x32, 0x0f, 0x74, 0x88, 0x08, 0xdc, 0x0c, 0x15, 0x4d, 0x12, 0x45, 0x67, - 0x7b, 0x5c, 0x69, 0x57, 0x60, 0x5e, 0x06, 0xa3, 0xda, 0xa8, 0x23, 0xc7, 0xaf, 0x78, 0x7e, 0x1b, - 0xd9, 0xcd, 0xba, 0x73, 0x48, 0x56, 0x90, 0x54, 0x7e, 0xe8, 0xc0, 0x6e, 0x78, 0xc8, 0x9a, 0xa0, - 0xd3, 0x3b, 0x7c, 0x16, 0x23, 0x48, 0x00, 0xb5, 0x05, 0xc4, 0xb0, 0x84, 0xa0, 0xd3, 0x01, 0x22, - 0xf7, 0x5b, 0x29, 0x48, 0x0b, 0x7d, 0xb5, 0x79, 0x1e, 0x32, 0x2f, 0xdb, 0xaf, 0xda, 0x15, 0x7e, - 0xaf, 0x44, 0x2d, 0x91, 0xc6, 0x63, 0xdb, 0xec, 0x7e, 0xe9, 0x32, 0x9c, 0x26, 0x22, 0x6e, 0xc7, - 0x47, 0xed, 0x4a, 0xb5, 0x61, 0x7b, 0x1e, 0x31, 0x5a, 0x8a, 0x88, 0x9a, 0x78, 0x6e, 0x0b, 0x4f, - 0x95, 0xf8, 0x8c, 0x79, 0x0d, 0xa6, 0x08, 0xa2, 0xd9, 0x69, 0xf8, 0xf5, 0x56, 0x03, 0x55, 0xf0, - 0xdd, 0x9b, 0x47, 0x56, 0x92, 0x40, 0xb3, 0x49, 0x2c, 0xb1, 0xc1, 0x04, 0xb0, 0x46, 0x9e, 0xb9, - 0x02, 0x1f, 0x22, 0xb0, 0x43, 0xe4, 0xa0, 0xb6, 0xed, 0xa3, 0x0a, 0xfa, 0xc5, 0x8e, 0xdd, 0xf0, - 0x2a, 0xb6, 0x53, 0xab, 0x1c, 0xd9, 0xde, 0x51, 0xf6, 0x34, 0x26, 0x28, 0x26, 0xb2, 0x9a, 0xf5, - 0x28, 0x16, 0xbc, 0xc3, 0xe4, 0xca, 0x44, 0xac, 0xe0, 0xd4, 0x9e, 0xb7, 0xbd, 0x23, 0x33, 0x0f, - 0xd3, 0x84, 0xc5, 0xf3, 0xdb, 0x75, 0xe7, 0xb0, 0x52, 0x3d, 0x42, 0xd5, 0x57, 0x2a, 0x1d, 0xff, - 0xe0, 0x66, 0xf6, 0x31, 0xf1, 0xfc, 0x44, 0xc3, 0x1d, 0x22, 0x53, 0xc2, 0x22, 0x7b, 0xfe, 0xc1, - 0x4d, 0x73, 0x07, 0x32, 0xd8, 0x19, 0xcd, 0xfa, 0x1b, 0xa8, 0x72, 0xe0, 0xb6, 0xc9, 0xd2, 0x38, - 0x1e, 0x51, 0x9a, 0x04, 0x0b, 0x2e, 0x6e, 0x31, 0xc0, 0x86, 0x5b, 0x43, 0xf9, 0xa1, 0x9d, 0xed, - 0x72, 0x79, 0xc5, 0x4a, 0x73, 0x96, 0x55, 0xb7, 0x8d, 0x03, 0xea, 0xd0, 0x0d, 0x0c, 0x9c, 0xa6, - 0x01, 0x75, 0xe8, 0x72, 0xf3, 0x5e, 0x83, 0xa9, 0x6a, 0x95, 0x5e, 0x73, 0xbd, 0x5a, 0x61, 0xf7, - 0x58, 0x5e, 0xd6, 0x90, 0x8c, 0x55, 0xad, 0xde, 0xa1, 0x02, 0x2c, 0xc6, 0x3d, 0xf3, 0x16, 0x9c, - 0x09, 0x8d, 0x25, 0x02, 0x27, 0xbb, 0xae, 0x52, 0x85, 0x5e, 0x83, 0xa9, 0xd6, 0x71, 0x37, 0xd0, - 0x94, 0xce, 0xd8, 0x3a, 0x56, 0x61, 0x37, 0xe0, 0x74, 0xeb, 0xa8, 0xd5, 0x8d, 0x5b, 0x10, 0x71, - 0x66, 0xeb, 0xa8, 0xa5, 0x02, 0x9f, 0x20, 0x37, 0xdc, 0x6d, 0x54, 0xb5, 0x7d, 0x54, 0xcb, 0x3e, - 0x22, 0x8a, 0x0b, 0x13, 0xe6, 0x25, 0x30, 0xaa, 0xd5, 0x0a, 0x72, 0xec, 0xfd, 0x06, 0xaa, 0xd8, - 0x6d, 0xe4, 0xd8, 0x5e, 0x76, 0x4e, 0x14, 0x1e, 0xaf, 0x56, 0xcb, 0x64, 0xb6, 0x40, 0x26, 0xcd, - 0x05, 0x98, 0x74, 0xf7, 0x5f, 0xae, 0xd2, 0x90, 0xac, 0xb4, 0xda, 0xe8, 0xa0, 0xfe, 0x7a, 0xf6, - 0x02, 0xb1, 0xef, 0x04, 0x9e, 0x20, 0x01, 0xb9, 0x4d, 0x86, 0xcd, 0xa7, 0xc0, 0xa8, 0x7a, 0x47, - 0x76, 0xbb, 0x45, 0x6a, 0xb2, 0xd7, 0xb2, 0xab, 0x28, 0xfb, 0x04, 0x15, 0xa5, 0xe3, 0x9b, 0x7c, - 0x18, 0xa7, 0x84, 0xf7, 0x5a, 0xfd, 0xc0, 0xe7, 0x8c, 0x4f, 0xd2, 0x94, 0x20, 0x63, 0x8c, 0x6d, - 0x1e, 0x0c, 0x6c, 0x0a, 0xe9, 0xc4, 0xf3, 0x44, 0x6c, 0xbc, 0x75, 0xd4, 0x12, 0xcf, 0xfb, 0x38, - 0x8c, 0x61, 0xc9, 0xf0, 0xa4, 0x4f, 0xd1, 0x86, 0xac, 0x75, 0x24, 0x9c, 0xf1, 0x03, 0xeb, 0x8d, - 0x73, 0x79, 0xc8, 0x88, 0xf1, 0x69, 0x8e, 0x02, 0x8d, 0x50, 0x43, 0xc3, 0xcd, 0x4a, 0x69, 0x6b, - 0x05, 0xb7, 0x19, 0x9f, 0x2c, 0x1b, 0x09, 0xdc, 0xee, 0xac, 0xaf, 0xed, 0x96, 0x2b, 0xd6, 0xde, - 0xe6, 0xee, 0xda, 0x46, 0xd9, 0xd0, 0xc5, 0xbe, 0xfa, 0x9b, 0x09, 0x18, 0x97, 0x6f, 0x91, 0xcc, - 0x8f, 0xc2, 0x23, 0xfc, 0x79, 0x86, 0x87, 0xfc, 0xca, 0x6b, 0xf5, 0x36, 0x49, 0x99, 0xa6, 0x4d, - 0x97, 0xaf, 0xc0, 0x69, 0xa7, 0x99, 0xd4, 0x0e, 0xf2, 0x5f, 0xa8, 0xb7, 0x71, 0x42, 0x34, 0x6d, - 0xdf, 0x5c, 0x87, 0x39, 0xc7, 0xad, 0x78, 0xbe, 0xed, 0xd4, 0xec, 0x76, 0xad, 0x12, 0x3e, 0x49, - 0xaa, 0xd8, 0xd5, 0x2a, 0xf2, 0x3c, 0x97, 0x2e, 0x55, 0x01, 0xcb, 0x59, 0xc7, 0xdd, 0x61, 0xc2, - 0x61, 0x0d, 0x2f, 0x30, 0x51, 0x25, 0xc0, 0xf4, 0x5e, 0x01, 0xf6, 0x18, 0x8c, 0x36, 0xed, 0x56, - 0x05, 0x39, 0x7e, 0xfb, 0x98, 0x34, 0xc6, 0x29, 0x2b, 0xd5, 0xb4, 0x5b, 0x65, 0x7c, 0xfc, 0xd3, - 0xb9, 0x3f, 0xf9, 0xaf, 0x3a, 0x64, 0xc4, 0xe6, 0x18, 0xdf, 0x6b, 0x54, 0xc9, 0x3a, 0xa2, 0x91, - 0x4a, 0xf3, 0x78, 0xdf, 0x56, 0x7a, 0xb1, 0x84, 0x17, 0x98, 0xfc, 0x30, 0x6d, 0x59, 0x2d, 0x8a, - 0xc4, 0x8b, 0x3b, 0xae, 0x2d, 0x88, 0xb6, 0x08, 0x29, 0x8b, 0x1d, 0x99, 0x77, 0x60, 0xf8, 0x65, - 0x8f, 0x70, 0x0f, 0x13, 0xee, 0x0b, 0xfd, 0xb9, 0xef, 0xee, 0x10, 0xf2, 0xd1, 0xbb, 0x3b, 0x95, - 0xcd, 0x2d, 0x6b, 0xa3, 0xb0, 0x6e, 0x31, 0xb8, 0xf9, 0x28, 0x24, 0x1b, 0xf6, 0x1b, 0xc7, 0xf2, - 0x52, 0x44, 0x86, 0x06, 0x35, 0xfc, 0xa3, 0x90, 0x7c, 0x0d, 0xd9, 0xaf, 0xc8, 0x0b, 0x00, 0x19, - 0xfa, 0x00, 0x43, 0xff, 0x12, 0x0c, 0x11, 0x7b, 0x99, 0x00, 0xcc, 0x62, 0xc6, 0x29, 0x33, 0x05, - 0xc9, 0xd2, 0x96, 0x85, 0xc3, 0xdf, 0x80, 0x0c, 0x1d, 0xad, 0x6c, 0xaf, 0x95, 0x4b, 0x65, 0x23, - 0x91, 0xbb, 0x06, 0xc3, 0xd4, 0x08, 0x38, 0x35, 0x02, 0x33, 0x18, 0xa7, 0xd8, 0x21, 0xe3, 0xd0, - 0xf8, 0xec, 0xde, 0x46, 0xb1, 0x6c, 0x19, 0x09, 0xd1, 0xbd, 0x1e, 0x64, 0xc4, 0xbe, 0xf8, 0xa7, - 0x13, 0x53, 0xbf, 0xa7, 0x41, 0x5a, 0xe8, 0x73, 0x71, 0x83, 0x62, 0x37, 0x1a, 0xee, 0x6b, 0x15, - 0xbb, 0x51, 0xb7, 0x3d, 0x16, 0x14, 0x40, 0x86, 0x0a, 0x78, 0x64, 0x50, 0xa7, 0xfd, 0x54, 0x94, - 0xff, 0x82, 0x06, 0x86, 0xda, 0x62, 0x2a, 0x0a, 0x6a, 0x3f, 0x53, 0x05, 0x3f, 0xa7, 0xc1, 0xb8, - 0xdc, 0x57, 0x2a, 0xea, 0x9d, 0xff, 0x99, 0xaa, 0xf7, 0x9d, 0x04, 0x8c, 0x49, 0xdd, 0xe4, 0xa0, - 0xda, 0xfd, 0x22, 0x4c, 0xd6, 0x6b, 0xa8, 0xd9, 0x72, 0x7d, 0xe4, 0x54, 0x8f, 0x2b, 0x0d, 0xf4, - 0x2a, 0x6a, 0x64, 0x73, 0xa4, 0x50, 0x5c, 0xea, 0xdf, 0xaf, 0x2e, 0xae, 0x85, 0xb8, 0x75, 0x0c, - 0xcb, 0x4f, 0xad, 0xad, 0x94, 0x37, 0xb6, 0xb7, 0x76, 0xcb, 0x9b, 0xa5, 0x7b, 0x95, 0xbd, 0xcd, - 0x8f, 0x6d, 0x6e, 0xbd, 0xb0, 0x69, 0x19, 0x75, 0x45, 0xec, 0x03, 0x4c, 0xf5, 0x6d, 0x30, 0x54, - 0xa5, 0xcc, 0x47, 0x20, 0x4a, 0x2d, 0xe3, 0x94, 0x39, 0x05, 0x13, 0x9b, 0x5b, 0x95, 0x9d, 0xb5, - 0x95, 0x72, 0xa5, 0xbc, 0xba, 0x5a, 0x2e, 0xed, 0xee, 0xd0, 0x27, 0x10, 0x81, 0xf4, 0xae, 0x9c, - 0xd4, 0x9f, 0xd5, 0x61, 0x2a, 0x42, 0x13, 0xb3, 0xc0, 0xee, 0x1d, 0xe8, 0xed, 0xcc, 0xd3, 0x83, - 0x68, 0xbf, 0x88, 0x97, 0xfc, 0x6d, 0xbb, 0xed, 0xb3, 0x5b, 0x8d, 0xa7, 0x00, 0x5b, 0xc9, 0xf1, - 0xeb, 0x07, 0x75, 0xd4, 0x66, 0x0f, 0x6c, 0xe8, 0x0d, 0xc5, 0x44, 0x38, 0x4e, 0x9f, 0xd9, 0x7c, - 0x04, 0xcc, 0x96, 0xeb, 0xd5, 0xfd, 0xfa, 0xab, 0xa8, 0x52, 0x77, 0xf8, 0xd3, 0x1d, 0x7c, 0x83, - 0x91, 0xb4, 0x0c, 0x3e, 0xb3, 0xe6, 0xf8, 0x81, 0xb4, 0x83, 0x0e, 0x6d, 0x45, 0x1a, 0x17, 0x70, - 0xdd, 0x32, 0xf8, 0x4c, 0x20, 0x7d, 0x1e, 0x32, 0x35, 0xb7, 0x83, 0xbb, 0x2e, 0x2a, 0x87, 0xd7, - 0x0b, 0xcd, 0x4a, 0xd3, 0xb1, 0x40, 0x84, 0xf5, 0xd3, 0xe1, 0x63, 0xa5, 0x8c, 0x95, 0xa6, 0x63, - 0x54, 0xe4, 0x49, 0x98, 0xb0, 0x0f, 0x0f, 0xdb, 0x98, 0x9c, 0x13, 0xd1, 0x3b, 0x84, 0xf1, 0x60, - 0x98, 0x08, 0xce, 0xdc, 0x85, 0x14, 0xb7, 0x03, 0x5e, 0x92, 0xb1, 0x25, 0x2a, 0x2d, 0x7a, 0xdb, - 0x9b, 0x98, 0x1f, 0xb5, 0x52, 0x0e, 0x9f, 0x3c, 0x0f, 0x99, 0xba, 0x57, 0x09, 0x9f, 0x92, 0x27, - 0xce, 0x25, 0xe6, 0x53, 0x56, 0xba, 0xee, 0x05, 0x4f, 0x18, 0x73, 0x5f, 0x49, 0xc0, 0xb8, 0xfc, - 0x94, 0xdf, 0x5c, 0x81, 0x54, 0xc3, 0xad, 0xda, 0x24, 0xb4, 0xe8, 0x16, 0xd3, 0x7c, 0xcc, 0xc6, - 0xc0, 0xe2, 0x3a, 0x93, 0xb7, 0x02, 0xe4, 0xcc, 0x7f, 0xd4, 0x20, 0xc5, 0x87, 0xcd, 0x69, 0x48, - 0xb6, 0x6c, 0xff, 0x88, 0xd0, 0x0d, 0x15, 0x13, 0x86, 0x66, 0x91, 0x63, 0x3c, 0xee, 0xb5, 0x6c, - 0x87, 0x84, 0x00, 0x1b, 0xc7, 0xc7, 0xd8, 0xaf, 0x0d, 0x64, 0xd7, 0xc8, 0xed, 0x87, 0xdb, 0x6c, - 0x22, 0xc7, 0xf7, 0xb8, 0x5f, 0xd9, 0x78, 0x89, 0x0d, 0x9b, 0x1f, 0x86, 0x49, 0xbf, 0x6d, 0xd7, - 0x1b, 0x92, 0x6c, 0x92, 0xc8, 0x1a, 0x7c, 0x22, 0x10, 0xce, 0xc3, 0xa3, 0x9c, 0xb7, 0x86, 0x7c, - 0xbb, 0x7a, 0x84, 0x6a, 0x21, 0x68, 0x98, 0x3c, 0x66, 0x78, 0x84, 0x09, 0xac, 0xb0, 0x79, 0x8e, - 0xcd, 0xfd, 0x81, 0x06, 0x93, 0xfc, 0x86, 0xa9, 0x16, 0x18, 0x6b, 0x03, 0xc0, 0x76, 0x1c, 0xd7, - 0x17, 0xcd, 0xd5, 0x1d, 0xca, 0x5d, 0xb8, 0xc5, 0x42, 0x00, 0xb2, 0x04, 0x82, 0x99, 0x26, 0x40, - 0x38, 0xd3, 0xd3, 0x6c, 0x73, 0x90, 0x66, 0x5b, 0x38, 0x64, 0x1f, 0x90, 0xde, 0x62, 0x03, 0x1d, - 0xc2, 0x77, 0x56, 0xe6, 0x69, 0x18, 0xda, 0x47, 0x87, 0x75, 0x87, 0x3d, 0x98, 0xa5, 0x07, 0xfc, - 0x41, 0x48, 0x32, 0x78, 0x10, 0x52, 0x7c, 0x09, 0xa6, 0xaa, 0x6e, 0x53, 0x55, 0xb7, 0x68, 0x28, - 0xb7, 0xf9, 0xde, 0xf3, 0xda, 0x27, 0x21, 0x6c, 0x31, 0x7f, 0xac, 0x69, 0xff, 0x30, 0xa1, 0xdf, - 0xd9, 0x2e, 0xfe, 0x46, 0x62, 0xe6, 0x0e, 0x85, 0x6e, 0xf3, 0x2b, 0xb5, 0xd0, 0x41, 0x03, 0x55, - 0xb1, 0xf6, 0xf0, 0xe5, 0x79, 0x78, 0xfa, 0xb0, 0xee, 0x1f, 0x75, 0xf6, 0x17, 0xab, 0x6e, 0xf3, - 0xd2, 0xa1, 0x7b, 0xe8, 0x86, 0x5b, 0x9f, 0xf8, 0x88, 0x1c, 0x90, 0x4f, 0x6c, 0xfb, 0x73, 0x34, - 0x18, 0x9d, 0x89, 0xdd, 0x2b, 0xcd, 0x6f, 0xc2, 0x14, 0x13, 0xae, 0x90, 0xfd, 0x17, 0x7a, 0x17, - 0x61, 0xf6, 0x7d, 0x86, 0x95, 0xfd, 0xcd, 0xef, 0x91, 0xe5, 0xda, 0x9a, 0x64, 0x50, 0x3c, 0x47, - 0x6f, 0x34, 0xf2, 0x16, 0x9c, 0x91, 0xf8, 0x68, 0x6a, 0xa2, 0x76, 0x0c, 0xe3, 0x37, 0x19, 0xe3, - 0x94, 0xc0, 0xb8, 0xc3, 0xa0, 0xf9, 0x12, 0x8c, 0x9d, 0x84, 0xeb, 0xdf, 0x31, 0xae, 0x0c, 0x12, - 0x49, 0xee, 0xc0, 0x04, 0x21, 0xa9, 0x76, 0x3c, 0xdf, 0x6d, 0x92, 0xba, 0xd7, 0x9f, 0xe6, 0xdf, - 0x7f, 0x8f, 0xe6, 0xca, 0x38, 0x86, 0x95, 0x02, 0x54, 0x3e, 0x0f, 0x64, 0xcb, 0xa9, 0x86, 0xaa, - 0x8d, 0x18, 0x86, 0xfb, 0x4c, 0x91, 0x40, 0x3e, 0xff, 0x09, 0x38, 0x8d, 0x3f, 0x93, 0xb2, 0x24, - 0x6a, 0x12, 0xff, 0xc0, 0x2b, 0xfb, 0x07, 0x9f, 0xa2, 0xe9, 0x38, 0x15, 0x10, 0x08, 0x3a, 0x09, - 0x5e, 0x3c, 0x44, 0xbe, 0x8f, 0xda, 0x5e, 0xc5, 0x6e, 0x44, 0xa9, 0x27, 0x3c, 0x31, 0xc8, 0xfe, - 0xda, 0x0f, 0x64, 0x2f, 0xde, 0xa1, 0xc8, 0x42, 0xa3, 0x91, 0xdf, 0x83, 0x47, 0x22, 0xa2, 0x62, - 0x00, 0xce, 0xcf, 0x32, 0xce, 0xd3, 0x5d, 0x91, 0x81, 0x69, 0xb7, 0x81, 0x8f, 0x07, 0xbe, 0x1c, - 0x80, 0xf3, 0x1f, 0x30, 0x4e, 0x93, 0x61, 0xb9, 0x4b, 0x31, 0xe3, 0x5d, 0x98, 0x7c, 0x15, 0xb5, - 0xf7, 0x5d, 0x8f, 0x3d, 0xa5, 0x19, 0x80, 0xee, 0x73, 0x8c, 0x6e, 0x82, 0x01, 0xc9, 0x63, 0x1b, - 0xcc, 0x75, 0x0b, 0x52, 0x07, 0x76, 0x15, 0x0d, 0x40, 0xf1, 0x79, 0x46, 0x31, 0x82, 0xe5, 0x31, - 0xb4, 0x00, 0x99, 0x43, 0x97, 0xad, 0x4c, 0xf1, 0xf0, 0x2f, 0x30, 0x78, 0x9a, 0x63, 0x18, 0x45, - 0xcb, 0x6d, 0x75, 0x1a, 0x78, 0xd9, 0x8a, 0xa7, 0xf8, 0x22, 0xa7, 0xe0, 0x18, 0x46, 0x71, 0x02, - 0xb3, 0xbe, 0xc5, 0x29, 0x3c, 0xc1, 0x9e, 0xcf, 0x41, 0xda, 0x75, 0x1a, 0xc7, 0xae, 0x33, 0x88, - 0x12, 0x5f, 0x62, 0x0c, 0xc0, 0x20, 0x98, 0xe0, 0x36, 0x8c, 0x0e, 0xea, 0x88, 0x2f, 0xff, 0x80, - 0xa7, 0x07, 0xf7, 0xc0, 0x1d, 0x98, 0xe0, 0x05, 0xaa, 0xee, 0x3a, 0x03, 0x50, 0xfc, 0x63, 0x46, - 0x31, 0x2e, 0xc0, 0xd8, 0x65, 0xf8, 0xc8, 0xf3, 0x0f, 0xd1, 0x20, 0x24, 0x5f, 0xe1, 0x97, 0xc1, - 0x20, 0xcc, 0x94, 0xfb, 0xc8, 0xa9, 0x1e, 0x0d, 0xc6, 0xf0, 0x55, 0x6e, 0x4a, 0x8e, 0xc1, 0x14, - 0x25, 0x18, 0x6b, 0xda, 0x6d, 0xef, 0xc8, 0x6e, 0x0c, 0xe4, 0x8e, 0x5f, 0x67, 0x1c, 0x99, 0x00, - 0xc4, 0x2c, 0xd2, 0x71, 0x4e, 0x42, 0xf3, 0x1b, 0xdc, 0x22, 0x02, 0x8c, 0xa5, 0x9e, 0xe7, 0x93, - 0x47, 0x5a, 0x27, 0x61, 0xfb, 0x27, 0x3c, 0xf5, 0x28, 0x76, 0x43, 0x64, 0xbc, 0x0d, 0xa3, 0x5e, - 0xfd, 0x8d, 0x81, 0x68, 0xfe, 0x29, 0xf7, 0x34, 0x01, 0x60, 0xf0, 0x3d, 0x78, 0x34, 0x72, 0x99, - 0x18, 0x80, 0xec, 0x9f, 0x31, 0xb2, 0xe9, 0x88, 0xa5, 0x82, 0x95, 0x84, 0x93, 0x52, 0xfe, 0x73, - 0x5e, 0x12, 0x90, 0xc2, 0xb5, 0x8d, 0xef, 0x15, 0x3c, 0xfb, 0xe0, 0x64, 0x56, 0xfb, 0x17, 0xdc, - 0x6a, 0x14, 0x2b, 0x59, 0x6d, 0x17, 0xa6, 0x19, 0xe3, 0xc9, 0xfc, 0xfa, 0x35, 0x5e, 0x58, 0x29, - 0x7a, 0x4f, 0xf6, 0xee, 0x4b, 0x30, 0x13, 0x98, 0x93, 0x37, 0xa5, 0x5e, 0xa5, 0x69, 0xb7, 0x06, - 0x60, 0xfe, 0x4d, 0xc6, 0xcc, 0x2b, 0x7e, 0xd0, 0xd5, 0x7a, 0x1b, 0x76, 0x0b, 0x93, 0xbf, 0x08, - 0x59, 0x4e, 0xde, 0x71, 0xda, 0xa8, 0xea, 0x1e, 0x3a, 0xf5, 0x37, 0x50, 0x6d, 0x00, 0xea, 0xaf, - 0x2b, 0xae, 0xda, 0x13, 0xe0, 0x98, 0x79, 0x0d, 0x8c, 0xa0, 0x57, 0xa9, 0xd4, 0x9b, 0x2d, 0xb7, - 0xed, 0xc7, 0x30, 0xfe, 0x16, 0xf7, 0x54, 0x80, 0x5b, 0x23, 0xb0, 0x7c, 0x19, 0xc6, 0xc9, 0xe1, - 0xa0, 0x21, 0xf9, 0xdb, 0x8c, 0x68, 0x2c, 0x44, 0xb1, 0xc2, 0x51, 0x75, 0x9b, 0x2d, 0xbb, 0x3d, - 0x48, 0xfd, 0xfb, 0x97, 0xbc, 0x70, 0x30, 0x08, 0x2b, 0x1c, 0xfe, 0x71, 0x0b, 0xe1, 0xd5, 0x7e, - 0x00, 0x86, 0x6f, 0xf0, 0xc2, 0xc1, 0x31, 0x8c, 0x82, 0x37, 0x0c, 0x03, 0x50, 0xfc, 0x2b, 0x4e, - 0xc1, 0x31, 0x98, 0xe2, 0xe3, 0xe1, 0x42, 0xdb, 0x46, 0x87, 0x75, 0xcf, 0x6f, 0xd3, 0x56, 0xb8, - 0x3f, 0xd5, 0xef, 0xfc, 0x40, 0x6e, 0xc2, 0x2c, 0x01, 0x8a, 0x2b, 0x11, 0x7b, 0x84, 0x4a, 0xee, - 0x94, 0xe2, 0x15, 0xfb, 0x5d, 0x5e, 0x89, 0x04, 0x18, 0xcd, 0xcf, 0x09, 0xa5, 0x57, 0x31, 0xe3, - 0x5e, 0x84, 0xc9, 0xfe, 0xc5, 0x1f, 0x31, 0x2e, 0xb9, 0x55, 0xc9, 0xaf, 0xe3, 0x00, 0x92, 0x1b, - 0x8a, 0x78, 0xb2, 0x4f, 0xfd, 0x28, 0x88, 0x21, 0xa9, 0x9f, 0xc8, 0xaf, 0xc2, 0x98, 0xd4, 0x4c, - 0xc4, 0x53, 0xfd, 0x25, 0x46, 0x95, 0x11, 0x7b, 0x89, 0xfc, 0x35, 0x48, 0xe2, 0xc6, 0x20, 0x1e, - 0xfe, 0x97, 0x19, 0x9c, 0x88, 0xe7, 0x9f, 0x81, 0x14, 0x6f, 0x08, 0xe2, 0xa1, 0xbf, 0xcc, 0xa0, - 0x01, 0x04, 0xc3, 0x79, 0x33, 0x10, 0x0f, 0xff, 0x2b, 0x1c, 0xce, 0x21, 0x18, 0x3e, 0xb8, 0x09, - 0xdf, 0xfe, 0x6b, 0x49, 0x56, 0xd0, 0xb9, 0xed, 0x6e, 0xc3, 0x08, 0xeb, 0x02, 0xe2, 0xd1, 0xbf, - 0xc2, 0x4e, 0xce, 0x11, 0xf9, 0x1b, 0x30, 0x34, 0xa0, 0xc1, 0xff, 0x3a, 0x83, 0x52, 0xf9, 0x7c, - 0x09, 0xd2, 0xc2, 0xca, 0x1f, 0x0f, 0xff, 0x1b, 0x0c, 0x2e, 0xa2, 0xb0, 0xea, 0x6c, 0xe5, 0x8f, - 0x27, 0xf8, 0x9b, 0x5c, 0x75, 0x86, 0xc0, 0x66, 0xe3, 0x8b, 0x7e, 0x3c, 0xfa, 0x6f, 0x71, 0xab, - 0x73, 0x48, 0xfe, 0x39, 0x18, 0x0d, 0x0a, 0x79, 0x3c, 0xfe, 0x6f, 0x33, 0x7c, 0x88, 0xc1, 0x16, - 0x10, 0x16, 0x92, 0x78, 0x8a, 0xbf, 0xc3, 0x2d, 0x20, 0xa0, 0x70, 0x1a, 0xa9, 0xcd, 0x41, 0x3c, - 0xd3, 0xaf, 0xf2, 0x34, 0x52, 0x7a, 0x03, 0xec, 0x4d, 0x52, 0x4f, 0xe3, 0x29, 0xfe, 0x2e, 0xf7, - 0x26, 0x91, 0xc7, 0x6a, 0xa8, 0xab, 0x6d, 0x3c, 0xc7, 0xdf, 0xe7, 0x6a, 0x28, 0x8b, 0x6d, 0x7e, - 0x1b, 0xcc, 0xee, 0x95, 0x36, 0x9e, 0xef, 0x33, 0x8c, 0x6f, 0xb2, 0x6b, 0xa1, 0xcd, 0xbf, 0x00, - 0xd3, 0xd1, 0xab, 0x6c, 0x3c, 0xeb, 0xaf, 0xfd, 0x48, 0xb9, 0x2f, 0x12, 0x17, 0xd9, 0xfc, 0x6e, - 0x58, 0xae, 0xc5, 0x15, 0x36, 0x9e, 0xf6, 0xb3, 0x3f, 0x92, 0x2b, 0xb6, 0xb8, 0xc0, 0xe6, 0x0b, - 0x00, 0xe1, 0xe2, 0x16, 0xcf, 0xf5, 0x39, 0xc6, 0x25, 0x80, 0x70, 0x6a, 0xb0, 0xb5, 0x2d, 0x1e, - 0xff, 0x79, 0x9e, 0x1a, 0x0c, 0x81, 0x53, 0x83, 0x2f, 0x6b, 0xf1, 0xe8, 0x2f, 0xf0, 0xd4, 0xe0, - 0x10, 0x1c, 0xd9, 0xc2, 0xca, 0x11, 0xcf, 0xf0, 0x25, 0x1e, 0xd9, 0x02, 0x2a, 0x7f, 0x1b, 0x52, - 0x4e, 0xa7, 0xd1, 0xc0, 0x01, 0x6a, 0xf6, 0x7f, 0x41, 0x2c, 0xfb, 0x3f, 0x7e, 0xc2, 0x34, 0xe0, - 0x80, 0xfc, 0x35, 0x18, 0x42, 0xcd, 0x7d, 0x54, 0x8b, 0x43, 0xfe, 0xcf, 0x9f, 0xf0, 0xa2, 0x84, - 0xa5, 0xf3, 0xcf, 0x01, 0xd0, 0x5b, 0x7b, 0xb2, 0x6d, 0x15, 0x83, 0xfd, 0x5f, 0x3f, 0x61, 0xaf, - 0x6e, 0x84, 0x90, 0x90, 0x80, 0xbe, 0x08, 0xd2, 0x9f, 0xe0, 0x07, 0x32, 0x01, 0xb9, 0xea, 0x5b, - 0x30, 0xf2, 0xb2, 0xe7, 0x3a, 0xbe, 0x7d, 0x18, 0x87, 0xfe, 0xdf, 0x0c, 0xcd, 0xe5, 0xb1, 0xc1, - 0x9a, 0x6e, 0x1b, 0xf9, 0xf6, 0xa1, 0x17, 0x87, 0xfd, 0x3f, 0x0c, 0x1b, 0x00, 0x30, 0xb8, 0x6a, - 0x7b, 0xfe, 0x20, 0xd7, 0xfd, 0x87, 0x1c, 0xcc, 0x01, 0x58, 0x69, 0xfc, 0xf9, 0x15, 0x74, 0x1c, - 0x87, 0xfd, 0x21, 0x57, 0x9a, 0xc9, 0xe7, 0x9f, 0x81, 0x51, 0xfc, 0x91, 0xbe, 0x8f, 0x15, 0x03, - 0xfe, 0xbf, 0x0c, 0x1c, 0x22, 0xf0, 0x99, 0x3d, 0xbf, 0xe6, 0xd7, 0xe3, 0x8d, 0xfd, 0x47, 0xcc, - 0xd3, 0x5c, 0x3e, 0x5f, 0x80, 0xb4, 0xe7, 0xd7, 0x6a, 0x1d, 0xd6, 0x5f, 0xc5, 0xc0, 0xff, 0xdf, - 0x4f, 0x82, 0x5b, 0xee, 0x00, 0x53, 0x2c, 0x47, 0x3f, 0x3d, 0x84, 0x3b, 0xee, 0x1d, 0x97, 0x3e, - 0x37, 0xfc, 0x64, 0x2e, 0xfe, 0x01, 0x20, 0xfc, 0xb7, 0x06, 0xdc, 0xe8, 0x29, 0x86, 0x57, 0xab, - 0x4b, 0x55, 0xb7, 0xb9, 0xef, 0x7a, 0x97, 0xf6, 0x5d, 0xff, 0xe8, 0x92, 0x7f, 0x84, 0xf0, 0x18, - 0x7b, 0x62, 0x98, 0xc4, 0x9f, 0x67, 0x4e, 0xf6, 0x98, 0x91, 0x6c, 0x22, 0x6f, 0xd6, 0xf1, 0xb5, - 0x6d, 0x92, 0xe7, 0xf8, 0xe6, 0x59, 0x18, 0x26, 0x57, 0x7b, 0x85, 0xec, 0x95, 0x69, 0xc5, 0xe4, - 0xfd, 0x77, 0xe6, 0x4e, 0x59, 0x6c, 0x2c, 0x98, 0x5d, 0x22, 0x0f, 0x5a, 0x13, 0xd2, 0xec, 0x52, - 0x30, 0x7b, 0x95, 0x3e, 0x6b, 0x95, 0x66, 0xaf, 0x06, 0xb3, 0xcb, 0xe4, 0xa9, 0xab, 0x2e, 0xcd, - 0x2e, 0x07, 0xb3, 0xd7, 0xc8, 0xce, 0xc2, 0x98, 0x34, 0x7b, 0x2d, 0x98, 0xbd, 0x4e, 0xf6, 0x13, - 0x92, 0xd2, 0xec, 0xf5, 0x60, 0xf6, 0x06, 0xd9, 0x4a, 0x98, 0x94, 0x66, 0x6f, 0x04, 0xb3, 0x37, - 0xc9, 0x16, 0x82, 0x29, 0xcd, 0xde, 0x0c, 0x66, 0x6f, 0x91, 0xf7, 0x73, 0x46, 0xa4, 0xd9, 0x5b, - 0xe6, 0x2c, 0x8c, 0xd0, 0x2b, 0xbf, 0x4c, 0xf6, 0x9b, 0x27, 0xd8, 0x34, 0x1f, 0x0c, 0xe7, 0xaf, - 0x90, 0x77, 0x71, 0x86, 0xe5, 0xf9, 0x2b, 0xe1, 0xfc, 0x12, 0xf9, 0x5a, 0x80, 0x21, 0xcf, 0x2f, - 0x85, 0xf3, 0x57, 0xb3, 0x63, 0xe4, 0x7d, 0x24, 0x69, 0xfe, 0x6a, 0x38, 0xbf, 0x9c, 0x1d, 0xc7, - 0x01, 0x2f, 0xcf, 0x2f, 0x87, 0xf3, 0xd7, 0xb2, 0x13, 0xe7, 0xb4, 0xf9, 0x8c, 0x3c, 0x7f, 0x2d, - 0xf7, 0x4b, 0xc4, 0xbd, 0x4e, 0xe8, 0xde, 0x69, 0xd9, 0xbd, 0x81, 0x63, 0xa7, 0x65, 0xc7, 0x06, - 0x2e, 0x9d, 0x96, 0x5d, 0x1a, 0x38, 0x73, 0x5a, 0x76, 0x66, 0xe0, 0xc6, 0x69, 0xd9, 0x8d, 0x81, - 0x03, 0xa7, 0x65, 0x07, 0x06, 0xae, 0x9b, 0x96, 0x5d, 0x17, 0x38, 0x6d, 0x5a, 0x76, 0x5a, 0xe0, - 0xae, 0x69, 0xd9, 0x5d, 0x81, 0xa3, 0xb2, 0x8a, 0xa3, 0x42, 0x17, 0x65, 0x15, 0x17, 0x85, 0xce, - 0xc9, 0x2a, 0xce, 0x09, 0xdd, 0x92, 0x55, 0xdc, 0x12, 0x3a, 0x24, 0xab, 0x38, 0x24, 0x74, 0x45, - 0x56, 0x71, 0x45, 0xe8, 0x04, 0x96, 0x63, 0x16, 0x6a, 0x45, 0xe4, 0x98, 0xde, 0x37, 0xc7, 0xf4, - 0xbe, 0x39, 0xa6, 0xf7, 0xcd, 0x31, 0xbd, 0x6f, 0x8e, 0xe9, 0x7d, 0x73, 0x4c, 0xef, 0x9b, 0x63, - 0x7a, 0xdf, 0x1c, 0xd3, 0xfb, 0xe6, 0x98, 0xde, 0x3f, 0xc7, 0xf4, 0x98, 0x1c, 0xd3, 0x63, 0x72, - 0x4c, 0x8f, 0xc9, 0x31, 0x3d, 0x26, 0xc7, 0xf4, 0x98, 0x1c, 0xd3, 0x7b, 0xe6, 0x58, 0xe8, 0xde, - 0x69, 0xd9, 0xbd, 0x91, 0x39, 0xa6, 0xf7, 0xc8, 0x31, 0xbd, 0x47, 0x8e, 0xe9, 0x3d, 0x72, 0x4c, - 0xef, 0x91, 0x63, 0x7a, 0x8f, 0x1c, 0xd3, 0x7b, 0xe4, 0x98, 0xde, 0x23, 0xc7, 0xf4, 0x5e, 0x39, - 0xa6, 0xf7, 0xcc, 0x31, 0xbd, 0x67, 0x8e, 0xe9, 0x3d, 0x73, 0x4c, 0xef, 0x99, 0x63, 0x7a, 0xcf, - 0x1c, 0xd3, 0xc5, 0x1c, 0xfb, 0xd7, 0x3a, 0x98, 0x34, 0xc7, 0xb6, 0xc9, 0x1b, 0x4b, 0xcc, 0x15, - 0xb3, 0x4a, 0xa6, 0x0d, 0x63, 0xd7, 0x19, 0xa1, 0x4b, 0x66, 0x95, 0x5c, 0x93, 0xe7, 0x97, 0x82, - 0x79, 0x9e, 0x6d, 0xf2, 0xfc, 0xd5, 0x60, 0x9e, 0xe7, 0x9b, 0x3c, 0xbf, 0x1c, 0xcc, 0xf3, 0x8c, - 0x93, 0xe7, 0xaf, 0x05, 0xf3, 0x3c, 0xe7, 0xe4, 0xf9, 0xeb, 0xc1, 0x3c, 0xcf, 0x3a, 0x79, 0xfe, - 0x46, 0x30, 0xcf, 0xf3, 0x4e, 0x9e, 0xbf, 0x19, 0xcc, 0xf3, 0xcc, 0x93, 0xe7, 0x6f, 0x99, 0xe7, - 0xd4, 0xdc, 0xe3, 0x02, 0x81, 0x6b, 0xcf, 0xa9, 0xd9, 0xa7, 0x48, 0x5c, 0x09, 0x25, 0x78, 0xfe, - 0x29, 0x12, 0x4b, 0xa1, 0x04, 0xcf, 0x40, 0x45, 0xe2, 0x6a, 0xee, 0xd3, 0xc4, 0x7d, 0x8e, 0xea, - 0xbe, 0x19, 0xc5, 0x7d, 0x09, 0xc1, 0x75, 0x33, 0x8a, 0xeb, 0x12, 0x82, 0xdb, 0x66, 0x14, 0xb7, - 0x25, 0x04, 0x97, 0xcd, 0x28, 0x2e, 0x4b, 0x08, 0xee, 0x9a, 0x51, 0xdc, 0x95, 0x10, 0x5c, 0x35, - 0xa3, 0xb8, 0x2a, 0x21, 0xb8, 0x69, 0x46, 0x71, 0x53, 0x42, 0x70, 0xd1, 0x8c, 0xe2, 0xa2, 0x84, - 0xe0, 0x9e, 0x19, 0xc5, 0x3d, 0x09, 0xc1, 0x35, 0x67, 0x55, 0xd7, 0x24, 0x44, 0xb7, 0x9c, 0x55, - 0xdd, 0x92, 0x10, 0x5d, 0x72, 0x56, 0x75, 0x49, 0x42, 0x74, 0xc7, 0x59, 0xd5, 0x1d, 0x09, 0xd1, - 0x15, 0x7f, 0x9c, 0xe0, 0x1d, 0xe1, 0x8e, 0xdf, 0xee, 0x54, 0xfd, 0xf7, 0xd4, 0x11, 0x5e, 0x96, - 0xda, 0x87, 0xf4, 0x92, 0xb9, 0x48, 0x1a, 0x56, 0xb1, 0xe3, 0x54, 0x56, 0xb0, 0xcb, 0x52, 0x63, - 0x21, 0x20, 0x9c, 0x68, 0xc4, 0xf2, 0x7b, 0xea, 0x0d, 0x2f, 0x4b, 0x6d, 0x46, 0xbc, 0x7e, 0x37, - 0x3f, 0xf0, 0x8e, 0xed, 0xed, 0x04, 0xef, 0xd8, 0x98, 0xf9, 0x4f, 0xda, 0xb1, 0x2d, 0xc4, 0x9b, - 0x3c, 0x30, 0xf6, 0x42, 0xbc, 0xb1, 0xbb, 0x56, 0x9d, 0x41, 0x3b, 0xb8, 0x85, 0x78, 0xd3, 0x06, - 0x46, 0x7d, 0x7f, 0xfb, 0x2d, 0x16, 0xc1, 0x16, 0x6a, 0x45, 0x44, 0xf0, 0x49, 0xfb, 0xad, 0xcb, - 0x52, 0x29, 0x39, 0x69, 0x04, 0xeb, 0x27, 0x8e, 0xe0, 0x93, 0x76, 0x5e, 0x97, 0xa5, 0xf2, 0x72, - 0xe2, 0x08, 0xfe, 0x00, 0xfa, 0x21, 0x16, 0xc1, 0xa1, 0xf9, 0x4f, 0xda, 0x0f, 0x2d, 0xc4, 0x9b, - 0x3c, 0x32, 0x82, 0xf5, 0x13, 0x44, 0xf0, 0x20, 0xfd, 0xd1, 0x42, 0xbc, 0x69, 0xa3, 0x23, 0xf8, - 0x3d, 0x77, 0x33, 0x5f, 0xd4, 0x60, 0x72, 0xb3, 0x5e, 0x2b, 0x37, 0xf7, 0x51, 0xad, 0x86, 0x6a, - 0xcc, 0x8e, 0x97, 0xa5, 0x4a, 0xd0, 0xc3, 0xd5, 0xdf, 0x7a, 0x67, 0x2e, 0xb4, 0xf0, 0x35, 0x48, - 0x51, 0x9b, 0x5e, 0xbe, 0x9c, 0xbd, 0xaf, 0xc5, 0x54, 0xb8, 0x40, 0xd4, 0x3c, 0xcf, 0x61, 0x57, - 0x2e, 0x67, 0xff, 0x93, 0x26, 0x54, 0xb9, 0x60, 0x38, 0xf7, 0xab, 0x44, 0x43, 0xe7, 0x3d, 0x6b, - 0x78, 0x69, 0x20, 0x0d, 0x05, 0xdd, 0x1e, 0xeb, 0xd2, 0x4d, 0xd0, 0xaa, 0x03, 0x13, 0x9b, 0xf5, - 0xda, 0x26, 0xf9, 0x42, 0xfa, 0x20, 0x2a, 0x51, 0x19, 0xa5, 0x1e, 0x5c, 0x96, 0xc2, 0x52, 0x44, - 0x04, 0x21, 0x2d, 0xd7, 0x88, 0x5c, 0x1d, 0x9f, 0xd6, 0x91, 0x4e, 0xbb, 0xd0, 0xeb, 0xb4, 0x61, - 0x65, 0x0f, 0x4e, 0xb8, 0xd0, 0xeb, 0x84, 0x61, 0x0e, 0x05, 0xa7, 0x7a, 0x9d, 0x2f, 0xce, 0xf4, - 0xbd, 0x21, 0xf3, 0x2c, 0x24, 0xd6, 0xe8, 0x6b, 0xcd, 0x99, 0x62, 0x06, 0x2b, 0xf5, 0xed, 0x77, - 0xe6, 0x92, 0x7b, 0x9d, 0x7a, 0xcd, 0x4a, 0xac, 0xd5, 0xcc, 0xbb, 0x30, 0xf4, 0x09, 0xf6, 0xb5, - 0x48, 0x2c, 0xb0, 0xcc, 0x04, 0x3e, 0x12, 0xf3, 0x88, 0x89, 0x50, 0x2f, 0xee, 0xd5, 0x1d, 0xff, - 0xca, 0xd2, 0x4d, 0x8b, 0x52, 0xe4, 0xfe, 0x0c, 0x00, 0x3d, 0xe7, 0x8a, 0xed, 0x1d, 0x99, 0x9b, - 0x9c, 0x99, 0x9e, 0xfa, 0xe6, 0xb7, 0xdf, 0x99, 0x5b, 0x1e, 0x84, 0xf5, 0xe9, 0x9a, 0xed, 0x1d, - 0x3d, 0xed, 0x1f, 0xb7, 0xd0, 0x62, 0xf1, 0xd8, 0x47, 0x1e, 0x67, 0x6f, 0xf1, 0x55, 0x8f, 0x5d, - 0x57, 0x56, 0xb8, 0xae, 0x94, 0x74, 0x4d, 0xab, 0xf2, 0x35, 0x5d, 0x7e, 0xd8, 0xeb, 0x79, 0x9d, - 0x2f, 0x12, 0x8a, 0x25, 0xf5, 0x38, 0x4b, 0xea, 0xef, 0xd5, 0x92, 0x2d, 0x5e, 0x1f, 0x95, 0x6b, - 0xd5, 0xfb, 0x5d, 0xab, 0xfe, 0x5e, 0xae, 0xf5, 0xff, 0xd3, 0x6c, 0x0d, 0xf2, 0x69, 0xcf, 0xa1, - 0xaf, 0x54, 0xfe, 0xe9, 0x7a, 0x16, 0xf4, 0xbe, 0x76, 0x01, 0xf9, 0xe4, 0xfd, 0xb7, 0xe6, 0xb4, - 0xdc, 0x17, 0x13, 0xfc, 0xca, 0x69, 0x22, 0x3d, 0xdc, 0x95, 0xff, 0x69, 0xe9, 0xa9, 0x3e, 0x08, - 0x0b, 0x7d, 0x41, 0x83, 0xe9, 0xae, 0x4a, 0x4e, 0xcd, 0xf4, 0xfe, 0x96, 0x73, 0xe7, 0xa4, 0xe5, - 0x9c, 0x29, 0xf8, 0xdb, 0x1a, 0x9c, 0x56, 0xca, 0x2b, 0x55, 0xef, 0x92, 0xa2, 0xde, 0x23, 0xdd, - 0x67, 0x22, 0x82, 0x82, 0x76, 0xa2, 0x7b, 0x15, 0x80, 0xc0, 0x1c, 0xf8, 0x7d, 0x59, 0xf1, 0xfb, - 0xd9, 0x00, 0x10, 0x61, 0x2e, 0x1e, 0x01, 0x4c, 0x6d, 0x17, 0x92, 0xbb, 0x6d, 0x84, 0xcc, 0x59, - 0x48, 0x6c, 0xb5, 0x99, 0x86, 0xe3, 0x14, 0xbf, 0xd5, 0x2e, 0xb6, 0x6d, 0xa7, 0x7a, 0x64, 0x25, - 0xb6, 0xda, 0xe6, 0x79, 0xd0, 0x0b, 0xec, 0x2b, 0xd9, 0xe9, 0xa5, 0x09, 0x2a, 0x50, 0x70, 0x6a, - 0x4c, 0x02, 0xcf, 0x99, 0xb3, 0x90, 0x5c, 0x47, 0xf6, 0x01, 0x53, 0x02, 0xa8, 0x0c, 0x1e, 0xb1, - 0xc8, 0x38, 0x3b, 0xe1, 0x8b, 0x90, 0xe2, 0xc4, 0xe6, 0x05, 0x8c, 0x38, 0xf0, 0xd9, 0x69, 0x19, - 0x02, 0xab, 0xc3, 0x56, 0x2e, 0x32, 0x6b, 0x5e, 0x84, 0x21, 0xab, 0x7e, 0x78, 0xe4, 0xb3, 0x93, - 0x77, 0x8b, 0xd1, 0xe9, 0xdc, 0x3d, 0x18, 0x0d, 0x34, 0x7a, 0x9f, 0xa9, 0x57, 0xe8, 0xa5, 0x99, - 0x33, 0xe2, 0x7a, 0xc2, 0x9f, 0x5b, 0xd2, 0x21, 0xf3, 0x1c, 0xa4, 0x76, 0xfc, 0x76, 0x58, 0xf4, - 0x79, 0x47, 0x1a, 0x8c, 0xe6, 0x7e, 0x49, 0x83, 0xd4, 0x0a, 0x42, 0x2d, 0x62, 0xf0, 0x27, 0x20, - 0xb9, 0xe2, 0xbe, 0xe6, 0x30, 0x05, 0x27, 0x99, 0x45, 0xf1, 0x34, 0xb3, 0x29, 0x99, 0x36, 0x9f, - 0x10, 0xed, 0x3e, 0x15, 0xd8, 0x5d, 0x90, 0x23, 0xb6, 0xcf, 0x49, 0xb6, 0x67, 0x0e, 0xc4, 0x42, - 0x5d, 0xf6, 0xbf, 0x01, 0x69, 0xe1, 0x2c, 0xe6, 0x3c, 0x53, 0x23, 0xa1, 0x02, 0x45, 0x5b, 0x61, - 0x89, 0x1c, 0x82, 0x31, 0xe9, 0xc4, 0x18, 0x2a, 0x98, 0xb8, 0x07, 0x94, 0x98, 0x79, 0x41, 0x36, - 0x73, 0xb4, 0x28, 0x33, 0xf5, 0x65, 0x6a, 0x23, 0x62, 0xee, 0x0b, 0x34, 0x38, 0x7b, 0x3b, 0x11, - 0x7f, 0xce, 0x0d, 0x81, 0xbe, 0x59, 0x6f, 0xe4, 0x9e, 0x01, 0xa0, 0x29, 0x5f, 0x76, 0x3a, 0x4d, - 0x25, 0xeb, 0xc6, 0xb9, 0x81, 0x77, 0x8f, 0xd0, 0x2e, 0xf2, 0x88, 0x88, 0xdc, 0x4f, 0xe1, 0x02, - 0x03, 0x34, 0xc5, 0x08, 0xfe, 0xa9, 0x58, 0x7c, 0x64, 0x27, 0x86, 0x45, 0xb3, 0x54, 0xf4, 0x1e, - 0xf2, 0x0b, 0x8e, 0xeb, 0x1f, 0xa1, 0xb6, 0x82, 0x58, 0x32, 0xaf, 0x4a, 0x09, 0x3b, 0xbe, 0xf4, - 0x58, 0x80, 0xe8, 0x09, 0xba, 0x9a, 0xfb, 0x1a, 0x51, 0x10, 0xb7, 0x02, 0x5d, 0x17, 0xa8, 0x0f, - 0x70, 0x81, 0xe6, 0x75, 0xa9, 0x7f, 0xeb, 0xa3, 0xa6, 0x72, 0x6b, 0x79, 0x4b, 0xba, 0xcf, 0xe9, - 0xaf, 0xac, 0x7c, 0x8f, 0xc9, 0x6d, 0xca, 0x55, 0x7e, 0x2a, 0x56, 0xe5, 0x1e, 0xdd, 0xed, 0x49, - 0x6d, 0xaa, 0x0f, 0x6a, 0xd3, 0xdf, 0x0b, 0x3a, 0x0e, 0xfa, 0xbb, 0x17, 0xe4, 0x17, 0x63, 0xcc, - 0x8f, 0xc4, 0xfa, 0x3e, 0xaf, 0x95, 0x02, 0x55, 0x97, 0x07, 0x75, 0x7f, 0x3e, 0x51, 0x2c, 0x06, - 0xea, 0xde, 0x38, 0x41, 0x08, 0xe4, 0x13, 0xa5, 0x52, 0x50, 0xb6, 0x53, 0x9f, 0x7e, 0x6b, 0x4e, - 0xfb, 0xea, 0x5b, 0x73, 0xa7, 0x72, 0xbf, 0xae, 0xc1, 0x24, 0x93, 0x14, 0x02, 0xf7, 0x69, 0x45, - 0xf9, 0x33, 0xbc, 0x66, 0x44, 0x59, 0xe0, 0xa7, 0x16, 0xbc, 0xdf, 0xd4, 0x20, 0xdb, 0xa5, 0x2b, - 0xb7, 0xf7, 0xe5, 0x81, 0x54, 0xce, 0x6b, 0xe5, 0x9f, 0xbd, 0xcd, 0xef, 0xc1, 0xd0, 0x6e, 0xbd, - 0x89, 0xda, 0x78, 0x25, 0xc0, 0x1f, 0xa8, 0xca, 0x7c, 0x33, 0x87, 0x0e, 0xf1, 0x39, 0xaa, 0x9c, - 0x34, 0xb7, 0x64, 0x66, 0x21, 0xb9, 0x62, 0xfb, 0x36, 0xd1, 0x20, 0x13, 0xd4, 0x57, 0xdb, 0xb7, - 0x73, 0x57, 0x21, 0xb3, 0x71, 0x4c, 0xde, 0xd5, 0xa9, 0x91, 0x57, 0x48, 0xe4, 0xee, 0x8f, 0xf7, - 0xab, 0x57, 0x16, 0x86, 0x52, 0x35, 0xe3, 0xbe, 0x96, 0x4f, 0x12, 0x7d, 0x5e, 0x85, 0xf1, 0x2d, - 0xac, 0x36, 0xc1, 0x11, 0xd8, 0x39, 0xd0, 0x36, 0xe4, 0x46, 0x48, 0x64, 0xb5, 0xb4, 0x0d, 0xa5, - 0x7d, 0xd4, 0x03, 0xf3, 0x28, 0x6d, 0x9b, 0x1e, 0xb4, 0x6d, 0x0b, 0xc9, 0xd4, 0xb8, 0x31, 0xb9, - 0x90, 0x4c, 0x81, 0x31, 0xc6, 0xce, 0xfb, 0x1f, 0x74, 0x30, 0x68, 0xab, 0xb3, 0x82, 0x0e, 0xea, - 0x4e, 0xdd, 0xef, 0xee, 0x57, 0x03, 0x8d, 0xcd, 0xe7, 0x60, 0x14, 0x9b, 0x74, 0x95, 0xfd, 0x70, - 0x1c, 0x36, 0xfd, 0x79, 0xd6, 0xa2, 0x28, 0x14, 0x6c, 0x80, 0x84, 0x4e, 0x88, 0x31, 0x57, 0x41, - 0xdf, 0xdc, 0xdc, 0x60, 0x8b, 0xdb, 0x72, 0x5f, 0x28, 0x7b, 0x51, 0x87, 0x1d, 0xb1, 0x31, 0xef, - 0xd0, 0xc2, 0x04, 0xe6, 0x32, 0x24, 0x36, 0x37, 0x58, 0xc3, 0x7b, 0x61, 0x10, 0x1a, 0x2b, 0xb1, - 0xb9, 0x31, 0xf3, 0x6f, 0x34, 0x18, 0x93, 0x46, 0xcd, 0x1c, 0x64, 0xe8, 0x80, 0x70, 0xb9, 0xc3, - 0x96, 0x34, 0xc6, 0x75, 0x4e, 0xbc, 0x47, 0x9d, 0x67, 0x0a, 0x30, 0xa1, 0x8c, 0x9b, 0x8b, 0x60, - 0x8a, 0x43, 0x4c, 0x09, 0xfa, 0xa3, 0x55, 0x11, 0x33, 0xb9, 0x0f, 0x01, 0x84, 0x76, 0x0d, 0x7e, - 0x6b, 0x69, 0xb3, 0xbc, 0xb3, 0x5b, 0x5e, 0x31, 0xb4, 0xdc, 0x37, 0x34, 0x48, 0xb3, 0xb6, 0xb5, - 0xea, 0xb6, 0x90, 0x59, 0x04, 0xad, 0xc0, 0x22, 0xe8, 0xe1, 0xf4, 0xd6, 0x0a, 0xe6, 0x25, 0xd0, - 0x8a, 0x83, 0xbb, 0x5a, 0x2b, 0x9a, 0x4b, 0xa0, 0x95, 0x98, 0x83, 0x07, 0xf3, 0x8c, 0x56, 0xca, - 0xfd, 0x91, 0x0e, 0x53, 0x62, 0x1b, 0xcd, 0xeb, 0xc9, 0x79, 0xf9, 0xbe, 0x29, 0x3f, 0x7a, 0x65, - 0xe9, 0xea, 0xf2, 0x22, 0xfe, 0x27, 0x08, 0xc9, 0x9c, 0x7c, 0x0b, 0x95, 0x87, 0x40, 0xe4, 0x4a, - 0xaf, 0xf7, 0x44, 0xf2, 0x49, 0x81, 0xa1, 0xeb, 0x3d, 0x11, 0x69, 0xb6, 0xeb, 0x3d, 0x11, 0x69, - 0xb6, 0xeb, 0x3d, 0x11, 0x69, 0xb6, 0x6b, 0x2f, 0x40, 0x9a, 0xed, 0x7a, 0x4f, 0x44, 0x9a, 0xed, - 0x7a, 0x4f, 0x44, 0x9a, 0xed, 0x7e, 0x4f, 0x84, 0x4d, 0xf7, 0x7c, 0x4f, 0x44, 0x9e, 0xef, 0x7e, - 0x4f, 0x44, 0x9e, 0xef, 0x7e, 0x4f, 0x24, 0x9f, 0xf4, 0xdb, 0x1d, 0xd4, 0x7b, 0xd7, 0x41, 0xc6, - 0xf7, 0xbb, 0x09, 0x0c, 0x2b, 0xf0, 0x16, 0x4c, 0xd0, 0x07, 0x12, 0x25, 0xd7, 0xf1, 0xed, 0xba, - 0x83, 0xda, 0xe6, 0x47, 0x21, 0x43, 0x87, 0xe8, 0x6d, 0x4e, 0xd4, 0x6d, 0x20, 0x9d, 0x67, 0xf5, - 0x56, 0x92, 0xce, 0xfd, 0x71, 0x12, 0xa6, 0xe9, 0xc0, 0xa6, 0xdd, 0x44, 0xd2, 0x5b, 0x46, 0x17, - 0x95, 0x3d, 0xa5, 0x71, 0x0c, 0x7f, 0xf0, 0xce, 0x1c, 0x1d, 0x2d, 0x04, 0xd1, 0x74, 0x51, 0xd9, - 0x5d, 0x92, 0xe5, 0xc2, 0x05, 0xe8, 0xa2, 0xf2, 0xe6, 0x91, 0x2c, 0x17, 0xac, 0x37, 0x81, 0x1c, - 0x7f, 0x07, 0x49, 0x96, 0x5b, 0x09, 0xa2, 0xec, 0xa2, 0xf2, 0x36, 0x92, 0x2c, 0x57, 0x0e, 0xe2, - 0xed, 0xa2, 0xb2, 0xf7, 0x24, 0xcb, 0xad, 0x06, 0x91, 0x77, 0x51, 0xd9, 0x85, 0x92, 0xe5, 0xee, - 0x04, 0x31, 0x78, 0x51, 0x79, 0x57, 0x49, 0x96, 0x7b, 0x3e, 0x88, 0xc6, 0x8b, 0xca, 0x5b, 0x4b, - 0xb2, 0xdc, 0x5a, 0x10, 0x97, 0xf3, 0xea, 0xfb, 0x4b, 0xb2, 0xe0, 0xdd, 0x30, 0x42, 0xe7, 0xd5, - 0x37, 0x99, 0x64, 0xc9, 0x8f, 0x85, 0xb1, 0x3a, 0xaf, 0xbe, 0xd3, 0x24, 0x4b, 0xae, 0x87, 0x51, - 0x3b, 0xaf, 0xee, 0x95, 0xc9, 0x92, 0x1b, 0x61, 0xfc, 0xce, 0xab, 0xbb, 0x66, 0xb2, 0xe4, 0x66, - 0x18, 0xc9, 0xf3, 0xea, 0xfe, 0x99, 0x2c, 0xb9, 0x15, 0x3e, 0x44, 0xff, 0x7d, 0x25, 0xfc, 0x84, - 0xb7, 0xa0, 0x72, 0x4a, 0xf8, 0x41, 0x44, 0xe8, 0x29, 0x85, 0x4c, 0x90, 0x09, 0xc3, 0x2e, 0xa7, - 0x84, 0x1d, 0x44, 0x84, 0x5c, 0x4e, 0x09, 0x39, 0x88, 0x08, 0xb7, 0x9c, 0x12, 0x6e, 0x10, 0x11, - 0x6a, 0x39, 0x25, 0xd4, 0x20, 0x22, 0xcc, 0x72, 0x4a, 0x98, 0x41, 0x44, 0x88, 0xe5, 0x94, 0x10, - 0x83, 0x88, 0xf0, 0xca, 0x29, 0xe1, 0x05, 0x11, 0xa1, 0x75, 0x41, 0x0d, 0x2d, 0x88, 0x0a, 0xab, - 0x0b, 0x6a, 0x58, 0x41, 0x54, 0x48, 0x3d, 0xae, 0x86, 0xd4, 0xe8, 0x83, 0x77, 0xe6, 0x86, 0xf0, - 0x90, 0x10, 0x4d, 0x17, 0xd4, 0x68, 0x82, 0xa8, 0x48, 0xba, 0xa0, 0x46, 0x12, 0x44, 0x45, 0xd1, - 0x05, 0x35, 0x8a, 0x20, 0x2a, 0x82, 0xde, 0x56, 0x23, 0x28, 0x7c, 0xc7, 0x27, 0xa7, 0x6c, 0x29, - 0xc6, 0x45, 0x90, 0x3e, 0x40, 0x04, 0xe9, 0x03, 0x44, 0x90, 0x3e, 0x40, 0x04, 0xe9, 0x03, 0x44, - 0x90, 0x3e, 0x40, 0x04, 0xe9, 0x03, 0x44, 0x90, 0x3e, 0x40, 0x04, 0xe9, 0x83, 0x44, 0x90, 0x3e, - 0x50, 0x04, 0xe9, 0xbd, 0x22, 0xe8, 0x82, 0xfa, 0xc6, 0x03, 0x44, 0x15, 0xa4, 0x0b, 0xea, 0xd6, - 0x67, 0x7c, 0x08, 0xe9, 0x03, 0x85, 0x90, 0xde, 0x2b, 0x84, 0x7e, 0x5f, 0x87, 0x29, 0x29, 0x84, - 0xd8, 0xfe, 0xd0, 0xfb, 0x55, 0x81, 0xae, 0x0f, 0xf0, 0x82, 0x45, 0x54, 0x4c, 0x5d, 0x1f, 0x60, - 0x93, 0xba, 0x5f, 0x9c, 0x75, 0x57, 0xa1, 0xf2, 0x00, 0x55, 0x68, 0x35, 0x88, 0xa1, 0xeb, 0x03, - 0xbc, 0x78, 0xd1, 0x1d, 0x7b, 0x37, 0xfb, 0x15, 0x81, 0xe7, 0x07, 0x2a, 0x02, 0x6b, 0x03, 0x15, - 0x81, 0xbb, 0xa1, 0x07, 0x7f, 0x39, 0x01, 0xa7, 0x43, 0x0f, 0xd2, 0x4f, 0xe4, 0x87, 0x9d, 0x72, - 0xc2, 0x16, 0x95, 0xc9, 0xb7, 0x6d, 0x04, 0x37, 0x26, 0xd6, 0x6a, 0xe6, 0xb6, 0xbc, 0x59, 0x95, - 0x3f, 0xe9, 0x06, 0x8e, 0xe0, 0x71, 0xf6, 0x30, 0xf4, 0x02, 0xe8, 0x6b, 0x35, 0x8f, 0x54, 0x8b, - 0xa8, 0xd3, 0x96, 0x2c, 0x3c, 0x6d, 0x5a, 0x30, 0x4c, 0xc4, 0x3d, 0xe2, 0xde, 0xf7, 0x72, 0xe2, - 0x15, 0x8b, 0x31, 0xe5, 0xde, 0xd6, 0xe0, 0x9c, 0x14, 0xca, 0xef, 0xcf, 0x96, 0xc1, 0xed, 0x81, - 0xb6, 0x0c, 0xa4, 0x04, 0x09, 0xb7, 0x0f, 0x9e, 0xec, 0xde, 0xa9, 0x16, 0xb3, 0x44, 0xdd, 0x4a, - 0xf8, 0x0b, 0x30, 0x1e, 0x5e, 0x01, 0xb9, 0x67, 0xbb, 0x16, 0xff, 0x34, 0x33, 0x2a, 0x35, 0xaf, - 0x29, 0x4f, 0xd1, 0xfa, 0xc2, 0x82, 0x6c, 0xcd, 0xe5, 0x61, 0x62, 0x53, 0xfe, 0xd6, 0x50, 0xdc, - 0xc3, 0x88, 0x14, 0x6e, 0xcd, 0xef, 0x7f, 0x69, 0xee, 0x54, 0xee, 0x23, 0x90, 0x11, 0xbf, 0x18, - 0xa4, 0x00, 0x47, 0x39, 0x30, 0x9f, 0xfc, 0x16, 0x96, 0xfe, 0x7b, 0x1a, 0x9c, 0x11, 0xc5, 0x5f, - 0xa8, 0xfb, 0x47, 0x6b, 0x0e, 0xee, 0xe9, 0x9f, 0x81, 0x14, 0x62, 0x8e, 0x63, 0xbf, 0xd1, 0xc2, - 0xee, 0x23, 0x23, 0xc5, 0x17, 0xc9, 0xbf, 0x56, 0x00, 0x51, 0x9e, 0x71, 0xf0, 0xd3, 0x2e, 0xcd, - 0x3c, 0x01, 0x43, 0x94, 0x5f, 0xd6, 0x6b, 0x4c, 0xd1, 0xeb, 0xcb, 0x11, 0x7a, 0x91, 0x38, 0x32, - 0xef, 0x4a, 0x7a, 0x09, 0xb7, 0xab, 0x91, 0xe2, 0x8b, 0x3c, 0xf8, 0x8a, 0x29, 0xdc, 0xff, 0x91, - 0x88, 0x8a, 0x57, 0x72, 0x1e, 0x52, 0x65, 0x55, 0x26, 0x5a, 0xcf, 0x15, 0x48, 0x6e, 0xba, 0x35, - 0xf2, 0xeb, 0x31, 0xe4, 0xe7, 0x92, 0x99, 0x91, 0xd9, 0x6f, 0x27, 0x5f, 0x84, 0x54, 0xe9, 0xa8, - 0xde, 0xa8, 0xb5, 0x91, 0xc3, 0xf6, 0xec, 0xd9, 0x23, 0x74, 0x8c, 0xb1, 0x82, 0xb9, 0x5c, 0x09, - 0x26, 0x37, 0x5d, 0xa7, 0x78, 0xec, 0x8b, 0x75, 0x63, 0x51, 0x49, 0x11, 0xb6, 0xe7, 0x43, 0xbe, - 0x25, 0x82, 0x05, 0x8a, 0x43, 0xdf, 0x7e, 0x67, 0x4e, 0xdb, 0x0d, 0x9e, 0x9f, 0x6f, 0xc0, 0x23, - 0x2c, 0x7d, 0xba, 0xa8, 0x96, 0xe2, 0xa8, 0x46, 0xd9, 0x3e, 0xb5, 0x40, 0xb7, 0x86, 0xe9, 0x9c, - 0x48, 0xba, 0x87, 0xd3, 0x0c, 0x37, 0x45, 0x7d, 0x35, 0xd3, 0x4f, 0xa4, 0x59, 0x24, 0xdd, 0x62, - 0x1c, 0x9d, 0xa2, 0xd9, 0xe3, 0x30, 0x1a, 0xcc, 0x09, 0xd1, 0x20, 0x66, 0xca, 0xd2, 0x42, 0x0e, - 0xd2, 0x42, 0xc2, 0x9a, 0x43, 0xa0, 0x15, 0x8c, 0x53, 0xf8, 0xbf, 0xa2, 0xa1, 0xe1, 0xff, 0x4a, - 0x46, 0x62, 0xe1, 0x09, 0x98, 0x50, 0x9e, 0x5f, 0xe2, 0x99, 0x15, 0x03, 0xf0, 0x7f, 0x65, 0x23, - 0x3d, 0x93, 0xfc, 0xf4, 0x3f, 0x9a, 0x3d, 0xb5, 0x70, 0x1b, 0xcc, 0xee, 0x27, 0x9d, 0xe6, 0x30, - 0x24, 0x0a, 0x98, 0xf2, 0x11, 0x48, 0x14, 0x8b, 0x86, 0x36, 0x33, 0xf1, 0x57, 0x3f, 0x7f, 0x2e, - 0x5d, 0x24, 0xdf, 0x7a, 0xbe, 0x87, 0xfc, 0x62, 0x91, 0x81, 0x9f, 0x85, 0x33, 0x91, 0x4f, 0x4a, - 0x31, 0xbe, 0x54, 0xa2, 0xf8, 0x95, 0x95, 0x2e, 0xfc, 0xca, 0x0a, 0xc1, 0x6b, 0x79, 0xbe, 0xe3, - 0x5c, 0x30, 0x23, 0x9e, 0x4b, 0x66, 0x6b, 0xc2, 0x0e, 0x77, 0x21, 0xff, 0x2c, 0x93, 0x2d, 0x46, - 0xca, 0xa2, 0x98, 0x1d, 0xeb, 0x62, 0xbe, 0xc4, 0xf0, 0xa5, 0x48, 0xfc, 0x81, 0xb2, 0xad, 0x2a, - 0xaf, 0x10, 0x8c, 0xa4, 0x14, 0x28, 0xbc, 0x12, 0x49, 0x72, 0x24, 0xbc, 0xec, 0xbe, 0x12, 0x28, - 0x5c, 0x8e, 0x94, 0xad, 0xc7, 0xbc, 0xf4, 0x55, 0xce, 0x5f, 0x62, 0x8b, 0x7c, 0xe1, 0x8a, 0x79, - 0x86, 0xe7, 0xa8, 0x54, 0x81, 0x99, 0x81, 0xb8, 0x54, 0xbe, 0xc4, 0x00, 0xc5, 0x9e, 0x80, 0xde, - 0x56, 0xe2, 0xc8, 0xfc, 0xf3, 0x8c, 0xa4, 0xd4, 0x93, 0x24, 0xc6, 0x54, 0x1c, 0x5e, 0xdc, 0xbd, - 0xff, 0xee, 0xec, 0xa9, 0x6f, 0xbd, 0x3b, 0x7b, 0xea, 0xbf, 0xbc, 0x3b, 0x7b, 0xea, 0x3b, 0xef, - 0xce, 0x6a, 0xdf, 0x7f, 0x77, 0x56, 0xfb, 0xe1, 0xbb, 0xb3, 0xda, 0x8f, 0xdf, 0x9d, 0xd5, 0xde, - 0x7c, 0x30, 0xab, 0x7d, 0xf5, 0xc1, 0xac, 0xf6, 0xb5, 0x07, 0xb3, 0xda, 0xef, 0x3c, 0x98, 0xd5, - 0xde, 0x7e, 0x30, 0xab, 0xdd, 0x7f, 0x30, 0xab, 0x7d, 0xeb, 0xc1, 0xac, 0xf6, 0x9d, 0x07, 0xb3, - 0xda, 0xf7, 0x1f, 0xcc, 0x9e, 0xfa, 0xe1, 0x83, 0x59, 0xed, 0xc7, 0x0f, 0x66, 0x4f, 0xbd, 0xf9, - 0xdd, 0xd9, 0x53, 0x6f, 0x7d, 0x77, 0xf6, 0xd4, 0x57, 0xbf, 0x3b, 0xab, 0xc1, 0x77, 0x96, 0xe1, - 0x31, 0xe5, 0x9b, 0x64, 0xa4, 0x1b, 0xb8, 0xca, 0x7f, 0x7d, 0x2a, 0x18, 0x38, 0xe1, 0x17, 0xca, - 0x66, 0x1e, 0xf6, 0xeb, 0x6b, 0xb9, 0x7f, 0x3b, 0x04, 0x23, 0xfc, 0x31, 0x70, 0xd4, 0x4f, 0x69, - 0x5f, 0x83, 0xd4, 0x51, 0xbd, 0x61, 0xb7, 0xeb, 0xfe, 0x31, 0x7b, 0xfe, 0xf9, 0xe8, 0x62, 0xa8, - 0x36, 0x7f, 0x62, 0xfa, 0x7c, 0xa7, 0xe9, 0x76, 0xda, 0x56, 0x20, 0x6a, 0x9e, 0x83, 0xcc, 0x11, - 0xaa, 0x1f, 0x1e, 0xf9, 0x95, 0xba, 0x53, 0xa9, 0x36, 0x49, 0x9b, 0x3c, 0x66, 0x01, 0x1d, 0x5b, - 0x73, 0x4a, 0x4d, 0x7c, 0xb2, 0x9a, 0xed, 0xdb, 0xe4, 0xf6, 0x3c, 0x63, 0x91, 0xcf, 0xe6, 0x79, - 0xc8, 0xb4, 0x91, 0xd7, 0x69, 0xf8, 0x95, 0xaa, 0xdb, 0x71, 0x7c, 0xd2, 0xc8, 0xea, 0x56, 0x9a, - 0x8e, 0x95, 0xf0, 0x90, 0xf9, 0x38, 0x8c, 0xf9, 0xed, 0x0e, 0xaa, 0x78, 0x55, 0xd7, 0xf7, 0x9a, - 0xb6, 0x43, 0x1a, 0xd9, 0x94, 0x95, 0xc1, 0x83, 0x3b, 0x6c, 0x8c, 0xfc, 0x0a, 0x7b, 0xd5, 0x6d, - 0x23, 0x72, 0x1f, 0x9d, 0xb0, 0xe8, 0x81, 0x69, 0x80, 0xfe, 0x0a, 0x3a, 0x26, 0x77, 0x6a, 0x49, - 0x0b, 0x7f, 0x34, 0x9f, 0x82, 0x61, 0xfa, 0x67, 0x54, 0x48, 0x5b, 0x4d, 0x76, 0xad, 0x83, 0x4b, - 0xa3, 0x4f, 0x67, 0x2d, 0x26, 0x60, 0xde, 0x82, 0x11, 0x1f, 0xb5, 0xdb, 0x76, 0xdd, 0x21, 0x77, - 0x4d, 0xe9, 0xa5, 0xb9, 0x08, 0x33, 0xec, 0x52, 0x09, 0xf2, 0x6b, 0xb4, 0x16, 0x97, 0x37, 0xaf, - 0x41, 0x86, 0xc8, 0x2d, 0x55, 0xe8, 0x9f, 0x9a, 0x49, 0xf7, 0x0c, 0xe4, 0x34, 0x95, 0xe3, 0x9b, - 0x04, 0x1c, 0x46, 0x7f, 0x89, 0x6f, 0x8c, 0x9c, 0xf6, 0xf1, 0x88, 0xd3, 0x92, 0x9a, 0xbb, 0x44, - 0xfa, 0x45, 0x7a, 0x6a, 0xc6, 0x43, 0x7f, 0xab, 0x6f, 0x03, 0x32, 0xa2, 0x5e, 0xdc, 0x0c, 0xb4, - 0xef, 0x21, 0x66, 0x78, 0x32, 0xfc, 0x19, 0xff, 0x1e, 0x56, 0xa0, 0xf3, 0xf9, 0xc4, 0x4d, 0x6d, - 0x66, 0x1b, 0x0c, 0xf5, 0x7c, 0x11, 0x94, 0x17, 0x65, 0x4a, 0x43, 0xbc, 0x58, 0xf2, 0x88, 0x3c, - 0x64, 0xcc, 0x3d, 0x07, 0xc3, 0x34, 0x7e, 0xcc, 0x34, 0x8c, 0x84, 0x3f, 0xf2, 0x98, 0x82, 0xe4, - 0xf6, 0xde, 0xe6, 0x0e, 0xfd, 0xb5, 0xd6, 0x9d, 0xf5, 0xc2, 0xf6, 0xce, 0xee, 0x5a, 0xe9, 0x63, - 0x46, 0xc2, 0x9c, 0x80, 0x74, 0x71, 0x6d, 0x7d, 0xbd, 0x52, 0x2c, 0xac, 0xad, 0x97, 0xef, 0x19, - 0x7a, 0x6e, 0x16, 0x86, 0xa9, 0x9e, 0xe4, 0x57, 0xe7, 0x3a, 0x8e, 0x73, 0xcc, 0xfb, 0x06, 0x72, - 0x90, 0xfb, 0xba, 0x09, 0x23, 0x85, 0x46, 0x63, 0xc3, 0x6e, 0x79, 0xe6, 0x0b, 0x30, 0x49, 0x7f, - 0xb3, 0x62, 0xd7, 0x5d, 0x21, 0x3f, 0x8e, 0x88, 0xab, 0x82, 0xc6, 0xfe, 0x7c, 0x41, 0x78, 0xdd, - 0x4c, 0x7c, 0xb1, 0x4b, 0x96, 0x1a, 0xb8, 0x9b, 0xc3, 0xdc, 0x05, 0x83, 0x0f, 0xae, 0x36, 0x5c, - 0xdb, 0xc7, 0xbc, 0x09, 0xf6, 0xdb, 0x85, 0xbd, 0x79, 0xb9, 0x28, 0xa5, 0xed, 0x62, 0x30, 0x3f, - 0x0a, 0xa9, 0x35, 0xc7, 0xbf, 0xba, 0x84, 0xd9, 0xf8, 0x9f, 0x06, 0xea, 0x66, 0xe3, 0x22, 0x94, - 0x25, 0x40, 0x30, 0xf4, 0xf5, 0x65, 0x8c, 0x4e, 0xf6, 0x43, 0x13, 0x91, 0x10, 0x4d, 0x0e, 0xcd, - 0xe7, 0x60, 0x14, 0xdf, 0x96, 0xd0, 0x93, 0x0f, 0xf1, 0x9e, 0xb5, 0x0b, 0x1e, 0xc8, 0x50, 0x7c, - 0x88, 0xe1, 0x04, 0xf4, 0xfc, 0xc3, 0x7d, 0x09, 0x04, 0x05, 0x42, 0x0c, 0x26, 0xd8, 0x09, 0x34, - 0x18, 0xe9, 0x49, 0xb0, 0xa3, 0x68, 0xb0, 0x23, 0x6a, 0xb0, 0x13, 0x68, 0x90, 0xea, 0x4b, 0x20, - 0x6a, 0x10, 0x1c, 0x9b, 0x45, 0x80, 0xd5, 0xfa, 0xeb, 0xa8, 0x46, 0x55, 0xa0, 0x7f, 0x38, 0x28, - 0x17, 0xc1, 0x10, 0x0a, 0x51, 0x0a, 0x01, 0x65, 0x96, 0x21, 0xbd, 0x73, 0x10, 0x92, 0x40, 0x57, - 0x1e, 0x07, 0x6a, 0x1c, 0x28, 0x2c, 0x22, 0x2e, 0x50, 0x85, 0x5e, 0x4c, 0xba, 0xbf, 0x2a, 0xc2, - 0xd5, 0x08, 0xa8, 0x50, 0x15, 0x4a, 0x92, 0x89, 0x51, 0x45, 0x60, 0x11, 0x71, 0xb8, 0x18, 0x16, - 0x5d, 0x17, 0x4b, 0xb2, 0xaa, 0x34, 0x17, 0x41, 0xc1, 0x24, 0x58, 0x31, 0x64, 0x47, 0xc4, 0x23, - 0x24, 0xc8, 0x31, 0x78, 0xbc, 0xb7, 0x47, 0xb8, 0x0c, 0xf7, 0x08, 0x3f, 0x16, 0xf3, 0x8c, 0xbc, - 0xca, 0x8a, 0x79, 0x26, 0x62, 0xf3, 0x8c, 0x8b, 0x2a, 0x79, 0xc6, 0x87, 0xcd, 0x8f, 0xc3, 0x04, - 0x1f, 0xc3, 0xe5, 0x09, 0x93, 0x1a, 0xec, 0x4f, 0xab, 0xf5, 0x26, 0x65, 0x92, 0x94, 0x53, 0xc5, - 0x9b, 0x9b, 0x30, 0xce, 0x87, 0x36, 0x3c, 0x72, 0xb9, 0x93, 0xec, 0xaf, 0x66, 0xf4, 0x66, 0xa4, - 0x82, 0x94, 0x50, 0x41, 0xcf, 0xac, 0xc0, 0x74, 0x74, 0x35, 0x12, 0xcb, 0xef, 0x28, 0x2d, 0xbf, - 0xa7, 0xc5, 0xf2, 0xab, 0x89, 0xe5, 0xbb, 0x04, 0x67, 0x22, 0x6b, 0x4f, 0x1c, 0x49, 0x42, 0x24, - 0xb9, 0x0d, 0x63, 0x52, 0xc9, 0x11, 0xc1, 0x43, 0x11, 0xe0, 0xa1, 0x6e, 0x70, 0x18, 0x5a, 0x11, - 0xab, 0x87, 0x04, 0xd6, 0x45, 0xf0, 0x47, 0x61, 0x5c, 0xae, 0x37, 0x22, 0x7a, 0x2c, 0x02, 0x3d, - 0x16, 0x81, 0x8e, 0x3e, 0x77, 0x32, 0x02, 0x9d, 0x54, 0xd0, 0x3b, 0x3d, 0xcf, 0x3d, 0x19, 0x81, - 0x9e, 0x8c, 0x40, 0x47, 0x9f, 0xdb, 0x8c, 0x40, 0x9b, 0x22, 0xfa, 0x19, 0x98, 0x50, 0x4a, 0x8c, - 0x08, 0x1f, 0x89, 0x80, 0x8f, 0x88, 0xf0, 0x67, 0xc1, 0x50, 0x8b, 0x8b, 0x88, 0x9f, 0x88, 0xc0, - 0x4f, 0x44, 0x9d, 0x3e, 0x5a, 0xfb, 0xe1, 0x08, 0xf8, 0x70, 0xe4, 0xe9, 0xa3, 0xf1, 0x46, 0x04, - 0xde, 0x10, 0xf1, 0x79, 0xc8, 0x88, 0xd5, 0x44, 0xc4, 0xa6, 0x22, 0xb0, 0x29, 0xd5, 0xee, 0x52, - 0x31, 0x89, 0x8b, 0xf4, 0xd1, 0x1e, 0xe9, 0x22, 0x95, 0x90, 0x38, 0x92, 0x8c, 0x48, 0xf2, 0x09, - 0x38, 0x1d, 0x55, 0x32, 0x22, 0x38, 0xe6, 0x45, 0x8e, 0x71, 0xdc, 0x23, 0x86, 0xcd, 0x9e, 0xdd, - 0x52, 0x1a, 0xa7, 0x99, 0x97, 0x60, 0x2a, 0xa2, 0x70, 0x44, 0xd0, 0x2e, 0xca, 0xdd, 0x58, 0x56, - 0xa0, 0x25, 0x45, 0xa0, 0xee, 0x1c, 0x6e, 0xbb, 0x75, 0xc7, 0x17, 0xbb, 0xb2, 0x6f, 0x4c, 0xc1, - 0x38, 0x2b, 0x4f, 0x5b, 0xed, 0x1a, 0x6a, 0xa3, 0x9a, 0xf9, 0xe7, 0x7a, 0xf7, 0x4e, 0x97, 0xbb, - 0x8b, 0x1a, 0x43, 0x9d, 0xa0, 0x85, 0x7a, 0xa9, 0x67, 0x0b, 0x75, 0x29, 0x9e, 0x3e, 0xae, 0x93, - 0x2a, 0x75, 0x75, 0x52, 0x4f, 0xf6, 0x26, 0xed, 0xd5, 0x50, 0x95, 0xba, 0x1a, 0xaa, 0xfe, 0x24, - 0x91, 0x7d, 0xd5, 0x6a, 0x77, 0x5f, 0x35, 0xdf, 0x9b, 0xa5, 0x77, 0x7b, 0xb5, 0xda, 0xdd, 0x5e, - 0xc5, 0xf0, 0x44, 0x77, 0x59, 0xab, 0xdd, 0x5d, 0x56, 0x1f, 0x9e, 0xde, 0xcd, 0xd6, 0x6a, 0x77, - 0xb3, 0x15, 0xc3, 0x13, 0xdd, 0x73, 0xad, 0x45, 0xf4, 0x5c, 0x4f, 0xf5, 0x26, 0xea, 0xd7, 0x7a, - 0xad, 0x47, 0xb5, 0x5e, 0x0b, 0x7d, 0x94, 0xea, 0xdb, 0x81, 0xad, 0x45, 0x74, 0x60, 0x71, 0x8a, - 0xf5, 0x68, 0xc4, 0xd6, 0xa3, 0x1a, 0xb1, 0x58, 0xc5, 0x7a, 0xf5, 0x63, 0xbf, 0xa0, 0xf6, 0x63, - 0x17, 0x7b, 0x33, 0x45, 0xb7, 0x65, 0xab, 0xdd, 0x6d, 0xd9, 0x7c, 0x5c, 0xce, 0x45, 0x75, 0x67, - 0x2f, 0xf5, 0xec, 0xce, 0x06, 0x48, 0xe1, 0xb8, 0x26, 0xed, 0xc5, 0x5e, 0x4d, 0xda, 0x62, 0x3c, - 0x77, 0xff, 0x5e, 0x6d, 0xaf, 0x47, 0xaf, 0xf6, 0x74, 0x3c, 0xf1, 0xcf, 0x5b, 0xb6, 0x9f, 0xb7, - 0x6c, 0x3f, 0x6f, 0xd9, 0x7e, 0xde, 0xb2, 0xfd, 0xec, 0x5b, 0xb6, 0x7c, 0xf2, 0x33, 0x5f, 0x9a, - 0xd3, 0x72, 0xff, 0x59, 0x0f, 0xfe, 0xd0, 0xd7, 0x0b, 0x75, 0xff, 0x08, 0x97, 0xb7, 0x0d, 0xc8, - 0x90, 0x1f, 0x9e, 0x6d, 0xda, 0xad, 0x56, 0xdd, 0x39, 0x64, 0x3d, 0xdb, 0x42, 0xf7, 0xa3, 0x44, - 0x06, 0x20, 0x7f, 0xe4, 0x64, 0x83, 0x0a, 0xb3, 0xe5, 0xc6, 0x09, 0x47, 0xcc, 0xbb, 0x90, 0x6e, - 0x7a, 0x87, 0x01, 0x5b, 0xa2, 0x6b, 0x21, 0x54, 0xd8, 0xe8, 0x95, 0x86, 0x64, 0xd0, 0x0c, 0x06, - 0xb0, 0x6a, 0xfb, 0xc7, 0x7e, 0xa8, 0x9a, 0x1e, 0xa7, 0x1a, 0xf6, 0xa9, 0xac, 0xda, 0x7e, 0x38, - 0x82, 0xc3, 0x56, 0xd5, 0x3d, 0xae, 0xd2, 0x49, 0xc1, 0xf3, 0x02, 0x4c, 0x28, 0xda, 0x46, 0xe4, - 0xfc, 0x43, 0xf8, 0x06, 0x2b, 0xa6, 0x6a, 0x1e, 0x97, 0x13, 0x62, 0x40, 0xe6, 0x3e, 0x04, 0x63, - 0x12, 0xb7, 0x99, 0x01, 0xed, 0x80, 0x7d, 0x8f, 0x52, 0x3b, 0xc8, 0x7d, 0x51, 0x83, 0x34, 0x7b, - 0x87, 0x60, 0xdb, 0xae, 0xb7, 0xcd, 0xe7, 0x21, 0xd9, 0xe0, 0xdf, 0x65, 0x7a, 0xd8, 0xef, 0xcd, - 0x12, 0x06, 0x73, 0x15, 0x86, 0xda, 0xc1, 0x77, 0x9d, 0x1e, 0xea, 0xcb, 0xb0, 0x04, 0x9e, 0xbb, - 0xaf, 0xc1, 0x24, 0x7b, 0xc5, 0xd5, 0x63, 0x6f, 0x3e, 0xdb, 0xad, 0x99, 0xaf, 0x6b, 0x30, 0x1a, - 0x1c, 0x99, 0xfb, 0x30, 0x1e, 0x1c, 0xd0, 0xb7, 0xeb, 0x69, 0xa4, 0xe6, 0x05, 0x0b, 0x77, 0x71, - 0x2c, 0x46, 0x7c, 0xa2, 0xbb, 0x50, 0x74, 0x4d, 0x96, 0x07, 0x67, 0x0a, 0x30, 0x15, 0x21, 0x76, - 0x92, 0x05, 0x39, 0x77, 0x1e, 0x46, 0x37, 0x5d, 0x9f, 0xfe, 0x64, 0x8e, 0x79, 0x5a, 0xd8, 0x55, - 0x28, 0x26, 0x8c, 0x53, 0x04, 0xbc, 0x70, 0x1e, 0x46, 0x58, 0xf6, 0x9b, 0xc3, 0x90, 0xd8, 0x28, - 0x18, 0xa7, 0xc8, 0xff, 0x45, 0x43, 0x23, 0xff, 0x97, 0x8c, 0x44, 0x71, 0xfd, 0xfd, 0xdc, 0x62, - 0xda, 0x1f, 0xa6, 0xe6, 0xf9, 0x93, 0x00, 0x00, 0x00, 0xff, 0xff, 0xea, 0xac, 0xe5, 0x9c, 0xe5, - 0x81, 0x00, 0x00, + 0x99, 0xde, 0x34, 0x1a, 0x24, 0xc1, 0x1f, 0x20, 0xd9, 0x6c, 0xce, 0x50, 0x10, 0x35, 0x22, 0x67, + 0xa0, 0xd1, 0x88, 0xa2, 0x2d, 0x0e, 0x87, 0xc3, 0xb9, 0x61, 0x2c, 0x69, 0x01, 0x10, 0x1c, 0x71, + 0x4c, 0x82, 0x74, 0x93, 0xb4, 0x34, 0x56, 0x12, 0x54, 0x13, 0x68, 0x92, 0x90, 0x80, 0x6e, 0x2c, + 0xba, 0x21, 0x89, 0xaa, 0x54, 0x4a, 0x59, 0x27, 0x1b, 0x6f, 0x52, 0xb9, 0x6e, 0x52, 0xf1, 0x3a, + 0xbe, 0xc8, 0xbb, 0xb5, 0x6b, 0xef, 0xe6, 0xe6, 0xf5, 0x6e, 0x9c, 0x5d, 0x27, 0x95, 0x55, 0x1e, + 0x9c, 0x4c, 0x5e, 0x52, 0xde, 0xe4, 0x25, 0xe5, 0x4a, 0xa9, 0xac, 0xb1, 0x53, 0x71, 0x12, 0x27, + 0xeb, 0x6c, 0x54, 0x15, 0x57, 0x79, 0x1f, 0xb6, 0xce, 0xad, 0xfb, 0x9c, 0xd3, 0x0d, 0x34, 0x38, + 0x92, 0xec, 0x7d, 0xd0, 0xcb, 0x0c, 0xfa, 0x9c, 0xff, 0xfb, 0xfa, 0xef, 0xff, 0x76, 0xfe, 0xee, + 0xd3, 0x00, 0xe1, 0x8f, 0x6e, 0xc2, 0xb9, 0x43, 0xc7, 0x39, 0x6c, 0x5a, 0x97, 0xda, 0x1d, 0xc7, + 0x73, 0xf6, 0xbb, 0x07, 0x97, 0xea, 0x96, 0x5b, 0xeb, 0x34, 0xda, 0x9e, 0xd3, 0x59, 0xc4, 0x63, + 0xfa, 0x04, 0x91, 0x58, 0x64, 0x12, 0xb9, 0x4d, 0x98, 0x5c, 0x6b, 0x34, 0xad, 0x55, 0x5f, 0x70, + 0xc7, 0xf2, 0xf4, 0x1b, 0x90, 0x3c, 0x68, 0x34, 0xad, 0xac, 0x72, 0x4e, 0x9d, 0x4f, 0x2f, 0x5f, + 0x58, 0x94, 0x40, 0x8b, 0x22, 0x62, 0x1b, 0x0d, 0x1b, 0x18, 0x91, 0xfb, 0x7e, 0x12, 0xa6, 0x22, + 0x66, 0x75, 0x1d, 0x92, 0xb6, 0xd9, 0x42, 0x8c, 0xca, 0xfc, 0xa8, 0x81, 0x3f, 0xeb, 0x59, 0x18, + 0x69, 0x9b, 0xb5, 0x97, 0xcd, 0x43, 0x2b, 0x9b, 0xc0, 0xc3, 0xec, 0x50, 0x9f, 0x05, 0xa8, 0x5b, + 0x6d, 0xcb, 0xae, 0x5b, 0x76, 0xed, 0x38, 0xab, 0x9e, 0x53, 0xe7, 0x47, 0x0d, 0x6e, 0x44, 0xff, + 0x08, 0x4c, 0xb6, 0xbb, 0xfb, 0xcd, 0x46, 0xad, 0xca, 0x89, 0xc1, 0x39, 0x75, 0x7e, 0xc8, 0xd0, + 0xc8, 0xc4, 0x6a, 0x20, 0xfc, 0x04, 0x4c, 0xbc, 0x6a, 0x99, 0x2f, 0xf3, 0xa2, 0x69, 0x2c, 0x3a, + 0x8e, 0x86, 0x39, 0xc1, 0x12, 0x64, 0x5a, 0x96, 0xeb, 0x9a, 0x87, 0x56, 0xd5, 0x3b, 0x6e, 0x5b, + 0xd9, 0x24, 0xbe, 0xfa, 0x73, 0xa1, 0xab, 0x97, 0xaf, 0x3c, 0x4d, 0x51, 0xbb, 0xc7, 0x6d, 0x4b, + 0x2f, 0xc0, 0xa8, 0x65, 0x77, 0x5b, 0x84, 0x61, 0xa8, 0x87, 0xfd, 0xca, 0x76, 0xb7, 0x25, 0xb3, + 0xa4, 0x10, 0x8c, 0x52, 0x8c, 0xb8, 0x56, 0xe7, 0x95, 0x46, 0xcd, 0xca, 0x0e, 0x63, 0x82, 0x27, + 0x42, 0x04, 0x3b, 0x64, 0x5e, 0xe6, 0x60, 0x38, 0xbd, 0x04, 0xa3, 0xd6, 0x6b, 0x9e, 0x65, 0xbb, + 0x0d, 0xc7, 0xce, 0x8e, 0x60, 0x92, 0xc7, 0x23, 0xbc, 0x68, 0x35, 0xeb, 0x32, 0x45, 0x80, 0xd3, + 0xaf, 0xc1, 0x88, 0xd3, 0xf6, 0x1a, 0x8e, 0xed, 0x66, 0x53, 0xe7, 0x94, 0xf9, 0xf4, 0xf2, 0xd9, + 0xc8, 0x40, 0xd8, 0x22, 0x32, 0x06, 0x13, 0xd6, 0xd7, 0x41, 0x73, 0x9d, 0x6e, 0xa7, 0x66, 0x55, + 0x6b, 0x4e, 0xdd, 0xaa, 0x36, 0xec, 0x03, 0x27, 0x3b, 0x8a, 0x09, 0xe6, 0xc2, 0x17, 0x82, 0x05, + 0x4b, 0x4e, 0xdd, 0x5a, 0xb7, 0x0f, 0x1c, 0x63, 0xdc, 0x15, 0x8e, 0xf5, 0x69, 0x18, 0x76, 0x8f, + 0x6d, 0xcf, 0x7c, 0x2d, 0x9b, 0xc1, 0x11, 0x42, 0x8f, 0x72, 0xbf, 0x3f, 0x0c, 0x13, 0x83, 0x84, + 0xd8, 0x2d, 0x18, 0x3a, 0x40, 0x57, 0x99, 0x4d, 0x9c, 0xc4, 0x06, 0x04, 0x23, 0x1a, 0x71, 0xf8, + 0x01, 0x8d, 0x58, 0x80, 0xb4, 0x6d, 0xb9, 0x9e, 0x55, 0x27, 0x11, 0xa1, 0x0e, 0x18, 0x53, 0x40, + 0x40, 0xe1, 0x90, 0x4a, 0x3e, 0x50, 0x48, 0xbd, 0x00, 0x13, 0xbe, 0x4a, 0xd5, 0x8e, 0x69, 0x1f, + 0xb2, 0xd8, 0xbc, 0x14, 0xa7, 0xc9, 0x62, 0x99, 0xe1, 0x0c, 0x04, 0x33, 0xc6, 0x2d, 0xe1, 0x58, + 0x5f, 0x05, 0x70, 0x6c, 0xcb, 0x39, 0xa8, 0xd6, 0xad, 0x5a, 0x33, 0x9b, 0xea, 0x61, 0xa5, 0x2d, + 0x24, 0x12, 0xb2, 0x92, 0x43, 0x46, 0x6b, 0x4d, 0xfd, 0x66, 0x10, 0x6a, 0x23, 0x3d, 0x22, 0x65, + 0x93, 0x24, 0x59, 0x28, 0xda, 0xf6, 0x60, 0xbc, 0x63, 0xa1, 0xb8, 0xb7, 0xea, 0xf4, 0xca, 0x46, + 0xb1, 0x12, 0x8b, 0xb1, 0x57, 0x66, 0x50, 0x18, 0xb9, 0xb0, 0xb1, 0x0e, 0x7f, 0xa8, 0x3f, 0x06, + 0xfe, 0x40, 0x15, 0x87, 0x15, 0xe0, 0x2a, 0x94, 0x61, 0x83, 0x15, 0xb3, 0x65, 0xcd, 0xbc, 0x0e, + 0xe3, 0xa2, 0x79, 0xf4, 0xd3, 0x30, 0xe4, 0x7a, 0x66, 0xc7, 0xc3, 0x51, 0x38, 0x64, 0x90, 0x03, + 0x5d, 0x03, 0xd5, 0xb2, 0xeb, 0xb8, 0xca, 0x0d, 0x19, 0xe8, 0xa3, 0xfe, 0x73, 0xc1, 0x05, 0xab, + 0xf8, 0x82, 0x2f, 0x86, 0x3d, 0x2a, 0x30, 0xcb, 0xd7, 0x3d, 0x73, 0x1d, 0xc6, 0x84, 0x0b, 0x18, + 0xf4, 0xd4, 0xb9, 0xbf, 0x08, 0x67, 0x22, 0xa9, 0xf5, 0x17, 0xe0, 0x74, 0xd7, 0x6e, 0xd8, 0x9e, + 0xd5, 0x69, 0x77, 0x2c, 0x14, 0xb1, 0xe4, 0x54, 0xd9, 0xff, 0x3e, 0xd2, 0x23, 0xe6, 0xf6, 0x78, + 0x69, 0xc2, 0x62, 0x4c, 0x75, 0xc3, 0x83, 0x0b, 0xa3, 0xa9, 0x1f, 0x8c, 0x68, 0x6f, 0xbc, 0xf1, + 0xc6, 0x1b, 0x89, 0xdc, 0x67, 0x87, 0xe1, 0x74, 0x54, 0xce, 0x44, 0xa6, 0xef, 0x34, 0x0c, 0xdb, + 0xdd, 0xd6, 0xbe, 0xd5, 0xc1, 0x46, 0x1a, 0x32, 0xe8, 0x91, 0x5e, 0x80, 0xa1, 0xa6, 0xb9, 0x6f, + 0x35, 0xb3, 0xc9, 0x73, 0xca, 0xfc, 0xf8, 0xf2, 0x47, 0x06, 0xca, 0xca, 0xc5, 0x0d, 0x04, 0x31, + 0x08, 0x52, 0x7f, 0x06, 0x92, 0xb4, 0x44, 0x23, 0x86, 0x85, 0xc1, 0x18, 0x50, 0x2e, 0x19, 0x18, + 0xa7, 0x3f, 0x02, 0xa3, 0xe8, 0x7f, 0x12, 0x1b, 0xc3, 0x58, 0xe7, 0x14, 0x1a, 0x40, 0x71, 0xa1, + 0xcf, 0x40, 0x0a, 0xa7, 0x49, 0xdd, 0x62, 0x4b, 0x9b, 0x7f, 0x8c, 0x02, 0xab, 0x6e, 0x1d, 0x98, + 0xdd, 0xa6, 0x57, 0x7d, 0xc5, 0x6c, 0x76, 0x2d, 0x1c, 0xf0, 0xa3, 0x46, 0x86, 0x0e, 0x7e, 0x12, + 0x8d, 0xe9, 0x73, 0x90, 0x26, 0x59, 0xd5, 0xb0, 0xeb, 0xd6, 0x6b, 0xb8, 0x7a, 0x0e, 0x19, 0x24, + 0xd1, 0xd6, 0xd1, 0x08, 0x3a, 0xfd, 0x4b, 0xae, 0x63, 0xb3, 0xd0, 0xc4, 0xa7, 0x40, 0x03, 0xf8, + 0xf4, 0xd7, 0xe5, 0xc2, 0xfd, 0x68, 0xf4, 0xe5, 0xc9, 0x31, 0x95, 0xfb, 0x46, 0x02, 0x92, 0xb8, + 0x5e, 0x4c, 0x40, 0x7a, 0xf7, 0xee, 0x76, 0xb9, 0xba, 0xba, 0xb5, 0x57, 0xdc, 0x28, 0x6b, 0x8a, + 0x3e, 0x0e, 0x80, 0x07, 0xd6, 0x36, 0xb6, 0x0a, 0xbb, 0x5a, 0xc2, 0x3f, 0x5e, 0xaf, 0xec, 0x5e, + 0x5b, 0xd1, 0x54, 0x1f, 0xb0, 0x47, 0x06, 0x92, 0xbc, 0xc0, 0x95, 0x65, 0x6d, 0x48, 0xd7, 0x20, + 0x43, 0x08, 0xd6, 0x5f, 0x28, 0xaf, 0x5e, 0x5b, 0xd1, 0x86, 0xc5, 0x91, 0x2b, 0xcb, 0xda, 0x88, + 0x3e, 0x06, 0xa3, 0x78, 0xa4, 0xb8, 0xb5, 0xb5, 0xa1, 0xa5, 0x7c, 0xce, 0x9d, 0x5d, 0x63, 0xbd, + 0x72, 0x5b, 0x1b, 0xf5, 0x39, 0x6f, 0x1b, 0x5b, 0x7b, 0xdb, 0x1a, 0xf8, 0x0c, 0x9b, 0xe5, 0x9d, + 0x9d, 0xc2, 0xed, 0xb2, 0x96, 0xf6, 0x25, 0x8a, 0x77, 0x77, 0xcb, 0x3b, 0x5a, 0x46, 0x50, 0xeb, + 0xca, 0xb2, 0x36, 0xe6, 0x9f, 0xa2, 0x5c, 0xd9, 0xdb, 0xd4, 0xc6, 0xf5, 0x49, 0x18, 0x23, 0xa7, + 0x60, 0x4a, 0x4c, 0x48, 0x43, 0xd7, 0x56, 0x34, 0x2d, 0x50, 0x84, 0xb0, 0x4c, 0x0a, 0x03, 0xd7, + 0x56, 0x34, 0x3d, 0x57, 0x82, 0x21, 0x1c, 0x5d, 0xba, 0x0e, 0xe3, 0x1b, 0x85, 0x62, 0x79, 0xa3, + 0xba, 0xb5, 0xbd, 0xbb, 0xbe, 0x55, 0x29, 0x6c, 0x68, 0x4a, 0x30, 0x66, 0x94, 0x3f, 0xb1, 0xb7, + 0x6e, 0x94, 0x57, 0xb5, 0x04, 0x3f, 0xb6, 0x5d, 0x2e, 0xec, 0x96, 0x57, 0x35, 0x35, 0x57, 0x83, + 0xd3, 0x51, 0x75, 0x32, 0x32, 0x33, 0x38, 0x17, 0x27, 0x7a, 0xb8, 0x18, 0x73, 0x85, 0x5c, 0xfc, + 0xbd, 0x04, 0x4c, 0x45, 0xac, 0x15, 0x91, 0x27, 0x79, 0x16, 0x86, 0x48, 0x88, 0x92, 0xd5, 0xf3, + 0xc9, 0xc8, 0x45, 0x07, 0x07, 0x6c, 0x68, 0x05, 0xc5, 0x38, 0xbe, 0x83, 0x50, 0x7b, 0x74, 0x10, + 0x88, 0x22, 0x54, 0xd3, 0xff, 0x7c, 0xa8, 0xa6, 0x93, 0x65, 0xef, 0xda, 0x20, 0xcb, 0x1e, 0x1e, + 0x3b, 0x59, 0x6d, 0x1f, 0x8a, 0xa8, 0xed, 0xb7, 0x60, 0x32, 0x44, 0x34, 0x70, 0x8d, 0xfd, 0xb4, + 0x02, 0xd9, 0x5e, 0xc6, 0x89, 0xa9, 0x74, 0x09, 0xa1, 0xd2, 0xdd, 0x92, 0x2d, 0x78, 0xbe, 0xb7, + 0x13, 0x42, 0xbe, 0xfe, 0x8a, 0x02, 0xd3, 0xd1, 0x9d, 0x62, 0xa4, 0x0e, 0xcf, 0xc0, 0x70, 0xcb, + 0xf2, 0x8e, 0x1c, 0xd6, 0x2d, 0x5d, 0x8c, 0x58, 0x83, 0xd1, 0xb4, 0xec, 0x6c, 0x8a, 0xe2, 0x17, + 0x71, 0xb5, 0x57, 0xbb, 0x47, 0xb4, 0x09, 0x69, 0xfa, 0x4b, 0x09, 0x38, 0x13, 0x49, 0x1e, 0xa9, + 0xe8, 0xa3, 0x00, 0x0d, 0xbb, 0xdd, 0xf5, 0x48, 0x47, 0x44, 0x0a, 0xec, 0x28, 0x1e, 0xc1, 0xc5, + 0x0b, 0x15, 0xcf, 0xae, 0xe7, 0xcf, 0xab, 0x78, 0x1e, 0xc8, 0x10, 0x16, 0xb8, 0x11, 0x28, 0x9a, + 0xc4, 0x8a, 0xce, 0xf6, 0xb8, 0xd2, 0x50, 0x60, 0x2e, 0x81, 0x56, 0x6b, 0x36, 0x2c, 0xdb, 0xab, + 0xba, 0x5e, 0xc7, 0x32, 0x5b, 0x0d, 0xfb, 0x10, 0xaf, 0x20, 0xa9, 0xfc, 0xd0, 0x81, 0xd9, 0x74, + 0x2d, 0x63, 0x82, 0x4c, 0xef, 0xb0, 0x59, 0x84, 0xc0, 0x01, 0xd4, 0xe1, 0x10, 0xc3, 0x02, 0x82, + 0x4c, 0xfb, 0x88, 0xdc, 0xef, 0xa4, 0x20, 0xcd, 0xf5, 0xd5, 0xfa, 0x79, 0xc8, 0xbc, 0x64, 0xbe, + 0x62, 0x56, 0xd9, 0xbd, 0x12, 0xb1, 0x44, 0x1a, 0x8d, 0x6d, 0xd3, 0xfb, 0xa5, 0x25, 0x38, 0x8d, + 0x45, 0x9c, 0xae, 0x67, 0x75, 0xaa, 0xb5, 0xa6, 0xe9, 0xba, 0xd8, 0x68, 0x29, 0x2c, 0xaa, 0xa3, + 0xb9, 0x2d, 0x34, 0x55, 0x62, 0x33, 0xfa, 0x55, 0x98, 0xc2, 0x88, 0x56, 0xb7, 0xe9, 0x35, 0xda, + 0x4d, 0xab, 0x8a, 0xee, 0xde, 0x5c, 0xbc, 0x92, 0xf8, 0x9a, 0x4d, 0x22, 0x89, 0x4d, 0x2a, 0x80, + 0x34, 0x72, 0xf5, 0x55, 0x78, 0x14, 0xc3, 0x0e, 0x2d, 0xdb, 0xea, 0x98, 0x9e, 0x55, 0xb5, 0x7e, + 0xbe, 0x6b, 0x36, 0xdd, 0xaa, 0x69, 0xd7, 0xab, 0x47, 0xa6, 0x7b, 0x94, 0x3d, 0x8d, 0x08, 0x8a, + 0x89, 0xac, 0x62, 0x3c, 0x8c, 0x04, 0x6f, 0x53, 0xb9, 0x32, 0x16, 0x2b, 0xd8, 0xf5, 0xe7, 0x4c, + 0xf7, 0x48, 0xcf, 0xc3, 0x34, 0x66, 0x71, 0xbd, 0x4e, 0xc3, 0x3e, 0xac, 0xd6, 0x8e, 0xac, 0xda, + 0xcb, 0xd5, 0xae, 0x77, 0x70, 0x23, 0xfb, 0x08, 0x7f, 0x7e, 0xac, 0xe1, 0x0e, 0x96, 0x29, 0x21, + 0x91, 0x3d, 0xef, 0xe0, 0x86, 0xbe, 0x03, 0x19, 0xe4, 0x8c, 0x56, 0xe3, 0x75, 0xab, 0x7a, 0xe0, + 0x74, 0xf0, 0xd2, 0x38, 0x1e, 0x51, 0x9a, 0x38, 0x0b, 0x2e, 0x6e, 0x51, 0xc0, 0xa6, 0x53, 0xb7, + 0xf2, 0x43, 0x3b, 0xdb, 0xe5, 0xf2, 0xaa, 0x91, 0x66, 0x2c, 0x6b, 0x4e, 0x07, 0x05, 0xd4, 0xa1, + 0xe3, 0x1b, 0x38, 0x4d, 0x02, 0xea, 0xd0, 0x61, 0xe6, 0xbd, 0x0a, 0x53, 0xb5, 0x1a, 0xb9, 0xe6, + 0x46, 0xad, 0x4a, 0xef, 0xb1, 0xdc, 0xac, 0x26, 0x18, 0xab, 0x56, 0xbb, 0x4d, 0x04, 0x68, 0x8c, + 0xbb, 0xfa, 0x4d, 0x38, 0x13, 0x18, 0x8b, 0x07, 0x4e, 0x86, 0xae, 0x52, 0x86, 0x5e, 0x85, 0xa9, + 0xf6, 0x71, 0x18, 0xa8, 0x0b, 0x67, 0x6c, 0x1f, 0xcb, 0xb0, 0xeb, 0x70, 0xba, 0x7d, 0xd4, 0x0e, + 0xe3, 0x16, 0x78, 0x9c, 0xde, 0x3e, 0x6a, 0xcb, 0xc0, 0xc7, 0xf1, 0x0d, 0x77, 0xc7, 0xaa, 0x99, + 0x9e, 0x55, 0xcf, 0x3e, 0xc4, 0x8b, 0x73, 0x13, 0xfa, 0x25, 0xd0, 0x6a, 0xb5, 0xaa, 0x65, 0x9b, + 0xfb, 0x4d, 0xab, 0x6a, 0x76, 0x2c, 0xdb, 0x74, 0xb3, 0x73, 0xbc, 0xf0, 0x78, 0xad, 0x56, 0xc6, + 0xb3, 0x05, 0x3c, 0xa9, 0x2f, 0xc0, 0xa4, 0xb3, 0xff, 0x52, 0x8d, 0x84, 0x64, 0xb5, 0xdd, 0xb1, + 0x0e, 0x1a, 0xaf, 0x65, 0x2f, 0x60, 0xfb, 0x4e, 0xa0, 0x09, 0x1c, 0x90, 0xdb, 0x78, 0x58, 0x7f, + 0x12, 0xb4, 0x9a, 0x7b, 0x64, 0x76, 0xda, 0xb8, 0x26, 0xbb, 0x6d, 0xb3, 0x66, 0x65, 0x1f, 0x27, + 0xa2, 0x64, 0xbc, 0xc2, 0x86, 0x51, 0x4a, 0xb8, 0xaf, 0x36, 0x0e, 0x3c, 0xc6, 0xf8, 0x04, 0x49, + 0x09, 0x3c, 0x46, 0xd9, 0xe6, 0x41, 0x43, 0xa6, 0x10, 0x4e, 0x3c, 0x8f, 0xc5, 0xc6, 0xdb, 0x47, + 0x6d, 0xfe, 0xbc, 0x8f, 0xc1, 0x18, 0x92, 0x0c, 0x4e, 0xfa, 0x24, 0x69, 0xc8, 0xda, 0x47, 0xdc, + 0x19, 0x3f, 0xb0, 0xde, 0x38, 0x97, 0x87, 0x0c, 0x1f, 0x9f, 0xfa, 0x28, 0x90, 0x08, 0xd5, 0x14, + 0xd4, 0xac, 0x94, 0xb6, 0x56, 0x51, 0x9b, 0xf1, 0xa9, 0xb2, 0x96, 0x40, 0xed, 0xce, 0xc6, 0xfa, + 0x6e, 0xb9, 0x6a, 0xec, 0x55, 0x76, 0xd7, 0x37, 0xcb, 0x9a, 0xca, 0xf7, 0xd5, 0xdf, 0x4a, 0xc0, + 0xb8, 0x78, 0x8b, 0xa4, 0x7f, 0x0c, 0x1e, 0x62, 0xcf, 0x33, 0x5c, 0xcb, 0xab, 0xbe, 0xda, 0xe8, + 0xe0, 0x94, 0x69, 0x99, 0x64, 0xf9, 0xf2, 0x9d, 0x76, 0x9a, 0x4a, 0xed, 0x58, 0xde, 0xf3, 0x8d, + 0x0e, 0x4a, 0x88, 0x96, 0xe9, 0xe9, 0x1b, 0x30, 0x67, 0x3b, 0x55, 0xd7, 0x33, 0xed, 0xba, 0xd9, + 0xa9, 0x57, 0x83, 0x27, 0x49, 0x55, 0xb3, 0x56, 0xb3, 0x5c, 0xd7, 0x21, 0x4b, 0x95, 0xcf, 0x72, + 0xd6, 0x76, 0x76, 0xa8, 0x70, 0x50, 0xc3, 0x0b, 0x54, 0x54, 0x0a, 0x30, 0xb5, 0x57, 0x80, 0x3d, + 0x02, 0xa3, 0x2d, 0xb3, 0x5d, 0xb5, 0x6c, 0xaf, 0x73, 0x8c, 0x1b, 0xe3, 0x94, 0x91, 0x6a, 0x99, + 0xed, 0x32, 0x3a, 0xfe, 0xe9, 0xdc, 0x9f, 0xfc, 0x57, 0x15, 0x32, 0x7c, 0x73, 0x8c, 0xee, 0x35, + 0x6a, 0x78, 0x1d, 0x51, 0x70, 0xa5, 0x79, 0xac, 0x6f, 0x2b, 0xbd, 0x58, 0x42, 0x0b, 0x4c, 0x7e, + 0x98, 0xb4, 0xac, 0x06, 0x41, 0xa2, 0xc5, 0x1d, 0xd5, 0x16, 0x8b, 0xb4, 0x08, 0x29, 0x83, 0x1e, + 0xe9, 0xb7, 0x61, 0xf8, 0x25, 0x17, 0x73, 0x0f, 0x63, 0xee, 0x0b, 0xfd, 0xb9, 0xef, 0xec, 0x60, + 0xf2, 0xd1, 0x3b, 0x3b, 0xd5, 0xca, 0x96, 0xb1, 0x59, 0xd8, 0x30, 0x28, 0x5c, 0x7f, 0x18, 0x92, + 0x4d, 0xf3, 0xf5, 0x63, 0x71, 0x29, 0xc2, 0x43, 0x83, 0x1a, 0xfe, 0x61, 0x48, 0xbe, 0x6a, 0x99, + 0x2f, 0x8b, 0x0b, 0x00, 0x1e, 0xfa, 0x00, 0x43, 0xff, 0x12, 0x0c, 0x61, 0x7b, 0xe9, 0x00, 0xd4, + 0x62, 0xda, 0x29, 0x3d, 0x05, 0xc9, 0xd2, 0x96, 0x81, 0xc2, 0x5f, 0x83, 0x0c, 0x19, 0xad, 0x6e, + 0xaf, 0x97, 0x4b, 0x65, 0x2d, 0x91, 0xbb, 0x0a, 0xc3, 0xc4, 0x08, 0x28, 0x35, 0x7c, 0x33, 0x68, + 0xa7, 0xe8, 0x21, 0xe5, 0x50, 0xd8, 0xec, 0xde, 0x66, 0xb1, 0x6c, 0x68, 0x09, 0xde, 0xbd, 0x2e, + 0x64, 0xf8, 0xbe, 0xf8, 0xa7, 0x13, 0x53, 0xdf, 0x54, 0x20, 0xcd, 0xf5, 0xb9, 0xa8, 0x41, 0x31, + 0x9b, 0x4d, 0xe7, 0xd5, 0xaa, 0xd9, 0x6c, 0x98, 0x2e, 0x0d, 0x0a, 0xc0, 0x43, 0x05, 0x34, 0x32, + 0xa8, 0xd3, 0x7e, 0x2a, 0xca, 0x7f, 0x51, 0x01, 0x4d, 0x6e, 0x31, 0x25, 0x05, 0x95, 0x9f, 0xa9, + 0x82, 0x9f, 0x57, 0x60, 0x5c, 0xec, 0x2b, 0x25, 0xf5, 0xce, 0xff, 0x4c, 0xd5, 0xfb, 0x6e, 0x02, + 0xc6, 0x84, 0x6e, 0x72, 0x50, 0xed, 0x7e, 0x1e, 0x26, 0x1b, 0x75, 0xab, 0xd5, 0x76, 0x3c, 0xcb, + 0xae, 0x1d, 0x57, 0x9b, 0xd6, 0x2b, 0x56, 0x33, 0x9b, 0xc3, 0x85, 0xe2, 0x52, 0xff, 0x7e, 0x75, + 0x71, 0x3d, 0xc0, 0x6d, 0x20, 0x58, 0x7e, 0x6a, 0x7d, 0xb5, 0xbc, 0xb9, 0xbd, 0xb5, 0x5b, 0xae, + 0x94, 0xee, 0x56, 0xf7, 0x2a, 0x1f, 0xaf, 0x6c, 0x3d, 0x5f, 0x31, 0xb4, 0x86, 0x24, 0xf6, 0x01, + 0xa6, 0xfa, 0x36, 0x68, 0xb2, 0x52, 0xfa, 0x43, 0x10, 0xa5, 0x96, 0x76, 0x4a, 0x9f, 0x82, 0x89, + 0xca, 0x56, 0x75, 0x67, 0x7d, 0xb5, 0x5c, 0x2d, 0xaf, 0xad, 0x95, 0x4b, 0xbb, 0x3b, 0xe4, 0x09, + 0x84, 0x2f, 0xbd, 0x2b, 0x26, 0xf5, 0xe7, 0x54, 0x98, 0x8a, 0xd0, 0x44, 0x2f, 0xd0, 0x7b, 0x07, + 0x72, 0x3b, 0xf3, 0xd4, 0x20, 0xda, 0x2f, 0xa2, 0x25, 0x7f, 0xdb, 0xec, 0x78, 0xf4, 0x56, 0xe3, + 0x49, 0x40, 0x56, 0xb2, 0xbd, 0xc6, 0x41, 0xc3, 0xea, 0xd0, 0x07, 0x36, 0xe4, 0x86, 0x62, 0x22, + 0x18, 0x27, 0xcf, 0x6c, 0x3e, 0x0a, 0x7a, 0xdb, 0x71, 0x1b, 0x5e, 0xe3, 0x15, 0xab, 0xda, 0xb0, + 0xd9, 0xd3, 0x1d, 0x74, 0x83, 0x91, 0x34, 0x34, 0x36, 0xb3, 0x6e, 0x7b, 0xbe, 0xb4, 0x6d, 0x1d, + 0x9a, 0x92, 0x34, 0x2a, 0xe0, 0xaa, 0xa1, 0xb1, 0x19, 0x5f, 0xfa, 0x3c, 0x64, 0xea, 0x4e, 0x17, + 0x75, 0x5d, 0x44, 0x0e, 0xad, 0x17, 0x8a, 0x91, 0x26, 0x63, 0xbe, 0x08, 0xed, 0xa7, 0x83, 0xc7, + 0x4a, 0x19, 0x23, 0x4d, 0xc6, 0x88, 0xc8, 0x13, 0x30, 0x61, 0x1e, 0x1e, 0x76, 0x10, 0x39, 0x23, + 0x22, 0x77, 0x08, 0xe3, 0xfe, 0x30, 0x16, 0x9c, 0xb9, 0x03, 0x29, 0x66, 0x07, 0xb4, 0x24, 0x23, + 0x4b, 0x54, 0xdb, 0xe4, 0xb6, 0x37, 0x31, 0x3f, 0x6a, 0xa4, 0x6c, 0x36, 0x79, 0x1e, 0x32, 0x0d, + 0xb7, 0x1a, 0x3c, 0x25, 0x4f, 0x9c, 0x4b, 0xcc, 0xa7, 0x8c, 0x74, 0xc3, 0xf5, 0x9f, 0x30, 0xe6, + 0xbe, 0x92, 0x80, 0x71, 0xf1, 0x29, 0xbf, 0xbe, 0x0a, 0xa9, 0xa6, 0x53, 0x33, 0x71, 0x68, 0x91, + 0x2d, 0xa6, 0xf9, 0x98, 0x8d, 0x81, 0xc5, 0x0d, 0x2a, 0x6f, 0xf8, 0xc8, 0x99, 0xff, 0xa8, 0x40, + 0x8a, 0x0d, 0xeb, 0xd3, 0x90, 0x6c, 0x9b, 0xde, 0x11, 0xa6, 0x1b, 0x2a, 0x26, 0x34, 0xc5, 0xc0, + 0xc7, 0x68, 0xdc, 0x6d, 0x9b, 0x36, 0x0e, 0x01, 0x3a, 0x8e, 0x8e, 0x91, 0x5f, 0x9b, 0x96, 0x59, + 0xc7, 0xb7, 0x1f, 0x4e, 0xab, 0x65, 0xd9, 0x9e, 0xcb, 0xfc, 0x4a, 0xc7, 0x4b, 0x74, 0x58, 0xff, + 0x08, 0x4c, 0x7a, 0x1d, 0xb3, 0xd1, 0x14, 0x64, 0x93, 0x58, 0x56, 0x63, 0x13, 0xbe, 0x70, 0x1e, + 0x1e, 0x66, 0xbc, 0x75, 0xcb, 0x33, 0x6b, 0x47, 0x56, 0x3d, 0x00, 0x0d, 0xe3, 0xc7, 0x0c, 0x0f, + 0x51, 0x81, 0x55, 0x3a, 0xcf, 0xb0, 0xb9, 0x3f, 0x54, 0x60, 0x92, 0xdd, 0x30, 0xd5, 0x7d, 0x63, + 0x6d, 0x02, 0x98, 0xb6, 0xed, 0x78, 0xbc, 0xb9, 0xc2, 0xa1, 0x1c, 0xc2, 0x2d, 0x16, 0x7c, 0x90, + 0xc1, 0x11, 0xcc, 0xb4, 0x00, 0x82, 0x99, 0x9e, 0x66, 0x9b, 0x83, 0x34, 0xdd, 0xc2, 0xc1, 0xfb, + 0x80, 0xe4, 0x16, 0x1b, 0xc8, 0x10, 0xba, 0xb3, 0xd2, 0x4f, 0xc3, 0xd0, 0xbe, 0x75, 0xd8, 0xb0, + 0xe9, 0x83, 0x59, 0x72, 0xc0, 0x1e, 0x84, 0x24, 0xfd, 0x07, 0x21, 0xc5, 0x17, 0x61, 0xaa, 0xe6, + 0xb4, 0x64, 0x75, 0x8b, 0x9a, 0x74, 0x9b, 0xef, 0x3e, 0xa7, 0x7c, 0x0a, 0x82, 0x16, 0xf3, 0xc7, + 0x8a, 0xf2, 0xab, 0x09, 0xf5, 0xf6, 0x76, 0xf1, 0xb7, 0x12, 0x33, 0xb7, 0x09, 0x74, 0x9b, 0x5d, + 0xa9, 0x61, 0x1d, 0x34, 0xad, 0x1a, 0xd2, 0x1e, 0x7e, 0xe3, 0x23, 0xf0, 0xd4, 0x61, 0xc3, 0x3b, + 0xea, 0xee, 0x2f, 0xd6, 0x9c, 0xd6, 0xa5, 0x43, 0xe7, 0xd0, 0x09, 0xb6, 0x3e, 0xd1, 0x11, 0x3e, + 0xc0, 0x9f, 0xe8, 0xf6, 0xe7, 0xa8, 0x3f, 0x3a, 0x13, 0xbb, 0x57, 0x9a, 0xaf, 0xc0, 0x14, 0x15, + 0xae, 0xe2, 0xfd, 0x17, 0x72, 0x17, 0xa1, 0xf7, 0x7d, 0x86, 0x95, 0xfd, 0xed, 0xef, 0xe3, 0xe5, + 0xda, 0x98, 0xa4, 0x50, 0x34, 0x47, 0x6e, 0x34, 0xf2, 0x06, 0x9c, 0x11, 0xf8, 0x48, 0x6a, 0x5a, + 0x9d, 0x18, 0xc6, 0x6f, 0x51, 0xc6, 0x29, 0x8e, 0x71, 0x87, 0x42, 0xf3, 0x25, 0x18, 0x3b, 0x09, + 0xd7, 0xbf, 0xa3, 0x5c, 0x19, 0x8b, 0x27, 0xb9, 0x0d, 0x13, 0x98, 0xa4, 0xd6, 0x75, 0x3d, 0xa7, + 0x85, 0xeb, 0x5e, 0x7f, 0x9a, 0x7f, 0xff, 0x7d, 0x92, 0x2b, 0xe3, 0x08, 0x56, 0xf2, 0x51, 0xf9, + 0x3c, 0xe0, 0x2d, 0xa7, 0xba, 0x55, 0x6b, 0xc6, 0x30, 0xdc, 0xa3, 0x8a, 0xf8, 0xf2, 0xf9, 0x4f, + 0xc2, 0x69, 0xf4, 0x19, 0x97, 0x25, 0x5e, 0x93, 0xf8, 0x07, 0x5e, 0xd9, 0x3f, 0xfc, 0x34, 0x49, + 0xc7, 0x29, 0x9f, 0x80, 0xd3, 0x89, 0xf3, 0xe2, 0xa1, 0xe5, 0x79, 0x56, 0xc7, 0xad, 0x9a, 0xcd, + 0x28, 0xf5, 0xb8, 0x27, 0x06, 0xd9, 0x5f, 0xf9, 0xa1, 0xe8, 0xc5, 0xdb, 0x04, 0x59, 0x68, 0x36, + 0xf3, 0x7b, 0xf0, 0x50, 0x44, 0x54, 0x0c, 0xc0, 0xf9, 0x39, 0xca, 0x79, 0x3a, 0x14, 0x19, 0x88, + 0x76, 0x1b, 0xd8, 0xb8, 0xef, 0xcb, 0x01, 0x38, 0xff, 0x11, 0xe5, 0xd4, 0x29, 0x96, 0xb9, 0x14, + 0x31, 0xde, 0x81, 0xc9, 0x57, 0xac, 0xce, 0xbe, 0xe3, 0xd2, 0xa7, 0x34, 0x03, 0xd0, 0x7d, 0x9e, + 0xd2, 0x4d, 0x50, 0x20, 0x7e, 0x6c, 0x83, 0xb8, 0x6e, 0x42, 0xea, 0xc0, 0xac, 0x59, 0x03, 0x50, + 0x7c, 0x81, 0x52, 0x8c, 0x20, 0x79, 0x04, 0x2d, 0x40, 0xe6, 0xd0, 0xa1, 0x2b, 0x53, 0x3c, 0xfc, + 0x8b, 0x14, 0x9e, 0x66, 0x18, 0x4a, 0xd1, 0x76, 0xda, 0xdd, 0x26, 0x5a, 0xb6, 0xe2, 0x29, 0xbe, + 0xc4, 0x28, 0x18, 0x86, 0x52, 0x9c, 0xc0, 0xac, 0x6f, 0x32, 0x0a, 0x97, 0xb3, 0xe7, 0xb3, 0x90, + 0x76, 0xec, 0xe6, 0xb1, 0x63, 0x0f, 0xa2, 0xc4, 0x97, 0x29, 0x03, 0x50, 0x08, 0x22, 0xb8, 0x05, + 0xa3, 0x83, 0x3a, 0xe2, 0xd7, 0x7f, 0xc8, 0xd2, 0x83, 0x79, 0xe0, 0x36, 0x4c, 0xb0, 0x02, 0xd5, + 0x70, 0xec, 0x01, 0x28, 0x7e, 0x83, 0x52, 0x8c, 0x73, 0x30, 0x7a, 0x19, 0x9e, 0xe5, 0x7a, 0x87, + 0xd6, 0x20, 0x24, 0x5f, 0x61, 0x97, 0x41, 0x21, 0xd4, 0x94, 0xfb, 0x96, 0x5d, 0x3b, 0x1a, 0x8c, + 0xe1, 0xab, 0xcc, 0x94, 0x0c, 0x83, 0x28, 0x4a, 0x30, 0xd6, 0x32, 0x3b, 0xee, 0x91, 0xd9, 0x1c, + 0xc8, 0x1d, 0xbf, 0x49, 0x39, 0x32, 0x3e, 0x88, 0x5a, 0xa4, 0x6b, 0x9f, 0x84, 0xe6, 0xb7, 0x98, + 0x45, 0x38, 0x18, 0x4d, 0x3d, 0xd7, 0xc3, 0x8f, 0xb4, 0x4e, 0xc2, 0xf6, 0x8f, 0x59, 0xea, 0x11, + 0xec, 0x26, 0xcf, 0x78, 0x0b, 0x46, 0xdd, 0xc6, 0xeb, 0x03, 0xd1, 0xfc, 0x13, 0xe6, 0x69, 0x0c, + 0x40, 0xe0, 0xbb, 0xf0, 0x70, 0xe4, 0x32, 0x31, 0x00, 0xd9, 0x3f, 0xa5, 0x64, 0xd3, 0x11, 0x4b, + 0x05, 0x2d, 0x09, 0x27, 0xa5, 0xfc, 0x67, 0xac, 0x24, 0x58, 0x12, 0xd7, 0x36, 0xba, 0x57, 0x70, + 0xcd, 0x83, 0x93, 0x59, 0xed, 0x9f, 0x33, 0xab, 0x11, 0xac, 0x60, 0xb5, 0x5d, 0x98, 0xa6, 0x8c, + 0x27, 0xf3, 0xeb, 0xd7, 0x58, 0x61, 0x25, 0xe8, 0x3d, 0xd1, 0xbb, 0x2f, 0xc2, 0x8c, 0x6f, 0x4e, + 0xd6, 0x94, 0xba, 0xd5, 0x96, 0xd9, 0x1e, 0x80, 0xf9, 0xb7, 0x29, 0x33, 0xab, 0xf8, 0x7e, 0x57, + 0xeb, 0x6e, 0x9a, 0x6d, 0x44, 0xfe, 0x02, 0x64, 0x19, 0x79, 0xd7, 0xee, 0x58, 0x35, 0xe7, 0xd0, + 0x6e, 0xbc, 0x6e, 0xd5, 0x07, 0xa0, 0xfe, 0xba, 0xe4, 0xaa, 0x3d, 0x0e, 0x8e, 0x98, 0xd7, 0x41, + 0xf3, 0x7b, 0x95, 0x6a, 0xa3, 0xd5, 0x76, 0x3a, 0x5e, 0x0c, 0xe3, 0xef, 0x30, 0x4f, 0xf9, 0xb8, + 0x75, 0x0c, 0xcb, 0x97, 0x61, 0x1c, 0x1f, 0x0e, 0x1a, 0x92, 0xbf, 0x4b, 0x89, 0xc6, 0x02, 0x14, + 0x2d, 0x1c, 0x35, 0xa7, 0xd5, 0x36, 0x3b, 0x83, 0xd4, 0xbf, 0x7f, 0xc1, 0x0a, 0x07, 0x85, 0xd0, + 0xc2, 0xe1, 0x1d, 0xb7, 0x2d, 0xb4, 0xda, 0x0f, 0xc0, 0xf0, 0x0d, 0x56, 0x38, 0x18, 0x86, 0x52, + 0xb0, 0x86, 0x61, 0x00, 0x8a, 0x7f, 0xc9, 0x28, 0x18, 0x06, 0x51, 0x7c, 0x22, 0x58, 0x68, 0x3b, + 0xd6, 0x61, 0xc3, 0xf5, 0x3a, 0xa4, 0x15, 0xee, 0x4f, 0xf5, 0x7b, 0x3f, 0x14, 0x9b, 0x30, 0x83, + 0x83, 0xa2, 0x4a, 0x44, 0x1f, 0xa1, 0xe2, 0x3b, 0xa5, 0x78, 0xc5, 0x7e, 0x9f, 0x55, 0x22, 0x0e, + 0x86, 0x74, 0xe3, 0x3a, 0x44, 0x64, 0xf6, 0x1a, 0xba, 0x3f, 0x18, 0x80, 0xee, 0x9b, 0x92, 0x72, + 0x3b, 0x0c, 0x8b, 0x38, 0xb9, 0xfe, 0xa7, 0x6b, 0xbf, 0x6c, 0x1d, 0x0f, 0x14, 0x9d, 0xff, 0x4a, + 0xea, 0x7f, 0xf6, 0x08, 0x92, 0xd4, 0x90, 0x09, 0xa9, 0x9f, 0xd2, 0xe3, 0x5e, 0xd6, 0xc9, 0xfe, + 0xe5, 0x77, 0xe9, 0xf5, 0x8a, 0xed, 0x54, 0x7e, 0x03, 0x05, 0xb9, 0xd8, 0xf4, 0xc4, 0x93, 0x7d, + 0xfa, 0x5d, 0x3f, 0xce, 0x85, 0x9e, 0x27, 0xbf, 0x06, 0x63, 0x42, 0xc3, 0x13, 0x4f, 0xf5, 0x57, + 0x28, 0x55, 0x86, 0xef, 0x77, 0xf2, 0x57, 0x21, 0x89, 0x9a, 0x97, 0x78, 0xf8, 0x5f, 0xa5, 0x70, + 0x2c, 0x9e, 0x7f, 0x1a, 0x52, 0xac, 0x69, 0x89, 0x87, 0xfe, 0x22, 0x85, 0xfa, 0x10, 0x04, 0x67, + 0x0d, 0x4b, 0x3c, 0xfc, 0xaf, 0x31, 0x38, 0x83, 0x20, 0xf8, 0xe0, 0x26, 0x7c, 0xeb, 0x6f, 0x24, + 0xe9, 0xa2, 0xc3, 0x6c, 0x77, 0x0b, 0x46, 0x68, 0xa7, 0x12, 0x8f, 0xfe, 0x25, 0x7a, 0x72, 0x86, + 0xc8, 0x5f, 0x87, 0xa1, 0x01, 0x0d, 0xfe, 0x37, 0x29, 0x94, 0xc8, 0xe7, 0x4b, 0x90, 0xe6, 0xba, + 0x93, 0x78, 0xf8, 0xdf, 0xa2, 0x70, 0x1e, 0x85, 0x54, 0xa7, 0xdd, 0x49, 0x3c, 0xc1, 0xdf, 0x66, + 0xaa, 0x53, 0x04, 0x32, 0x1b, 0x6b, 0x4c, 0xe2, 0xd1, 0x7f, 0x87, 0x59, 0x9d, 0x41, 0xf2, 0xcf, + 0xc2, 0xa8, 0xbf, 0xd8, 0xc4, 0xe3, 0xff, 0x2e, 0xc5, 0x07, 0x18, 0x64, 0x01, 0x6e, 0xb1, 0x8b, + 0xa7, 0xf8, 0x7b, 0xcc, 0x02, 0x1c, 0x0a, 0xa5, 0x91, 0xdc, 0xc0, 0xc4, 0x33, 0xfd, 0x32, 0x4b, + 0x23, 0xa9, 0x7f, 0x41, 0xde, 0xc4, 0x35, 0x3f, 0x9e, 0xe2, 0xef, 0x33, 0x6f, 0x62, 0x79, 0xa4, + 0x86, 0xdc, 0x11, 0xc4, 0x73, 0xfc, 0x43, 0xa6, 0x86, 0xd4, 0x10, 0xe4, 0xb7, 0x41, 0x0f, 0x77, + 0x03, 0xf1, 0x7c, 0x9f, 0xa5, 0x7c, 0x93, 0xa1, 0x66, 0x20, 0xff, 0x3c, 0x4c, 0x47, 0x77, 0x02, + 0xf1, 0xac, 0xbf, 0xf2, 0xae, 0x74, 0xef, 0xc6, 0x37, 0x02, 0xf9, 0xdd, 0x60, 0x49, 0xe1, 0xbb, + 0x80, 0x78, 0xda, 0xcf, 0xbd, 0x2b, 0x16, 0x6e, 0xbe, 0x09, 0xc8, 0x17, 0x00, 0x82, 0x05, 0x38, + 0x9e, 0xeb, 0xf3, 0x94, 0x8b, 0x03, 0xa1, 0xd4, 0xa0, 0xeb, 0x6f, 0x3c, 0xfe, 0x0b, 0x2c, 0x35, + 0x28, 0x02, 0xa5, 0x06, 0x5b, 0x7a, 0xe3, 0xd1, 0x5f, 0x64, 0xa9, 0xc1, 0x20, 0x28, 0xb2, 0xb9, + 0xd5, 0x2d, 0x9e, 0xe1, 0xcb, 0x2c, 0xb2, 0x39, 0x54, 0xbe, 0x02, 0x93, 0xa1, 0x05, 0x31, 0x9e, + 0xea, 0x57, 0x29, 0x95, 0x26, 0xaf, 0x87, 0xfc, 0xe2, 0x45, 0x17, 0xc3, 0x78, 0xb6, 0x5f, 0x93, + 0x16, 0x2f, 0xba, 0x16, 0xe6, 0x6f, 0x41, 0xca, 0xee, 0x36, 0x9b, 0x28, 0x79, 0xf4, 0xfe, 0x2f, + 0xd8, 0x65, 0xff, 0xc7, 0x4f, 0xa8, 0x75, 0x18, 0x20, 0x7f, 0x15, 0x86, 0xac, 0xd6, 0xbe, 0x55, + 0x8f, 0x43, 0xfe, 0xcf, 0x9f, 0xb0, 0x82, 0x89, 0xa4, 0xf3, 0xcf, 0x02, 0x90, 0x47, 0x23, 0x78, + 0xdb, 0x2f, 0x06, 0xfb, 0xbf, 0x7e, 0x42, 0x5f, 0x7d, 0x09, 0x20, 0x01, 0x01, 0x79, 0x91, 0xa6, + 0x3f, 0xc1, 0x0f, 0x45, 0x02, 0xec, 0x91, 0x9b, 0x30, 0xf2, 0x92, 0xeb, 0xd8, 0x9e, 0x79, 0x18, + 0x87, 0xfe, 0xdf, 0x14, 0xcd, 0xe4, 0x91, 0xc1, 0x5a, 0x4e, 0xc7, 0xf2, 0xcc, 0x43, 0x37, 0x0e, + 0xfb, 0x7f, 0x28, 0xd6, 0x07, 0x20, 0x70, 0xcd, 0x74, 0xbd, 0x41, 0xae, 0xfb, 0x8f, 0x18, 0x98, + 0x01, 0x90, 0xd2, 0xe8, 0xf3, 0xcb, 0xd6, 0x71, 0x1c, 0xf6, 0x47, 0x4c, 0x69, 0x2a, 0x9f, 0x7f, + 0x1a, 0x46, 0xd1, 0x47, 0xf2, 0x3e, 0x5b, 0x0c, 0xf8, 0xff, 0x52, 0x70, 0x80, 0x40, 0x67, 0x76, + 0xbd, 0xba, 0xd7, 0x88, 0x37, 0xf6, 0x1f, 0x53, 0x4f, 0x33, 0xf9, 0x7c, 0x01, 0xd2, 0xae, 0x57, + 0xaf, 0x77, 0x69, 0x7f, 0x1a, 0x03, 0xff, 0x7f, 0x3f, 0xf1, 0x1f, 0x59, 0xf8, 0x18, 0xe4, 0xed, + 0x57, 0x5f, 0xf6, 0xda, 0x0e, 0xde, 0xe6, 0x88, 0x63, 0x78, 0x97, 0x32, 0x70, 0x90, 0x62, 0x39, + 0xfa, 0xf1, 0x2d, 0xdc, 0x76, 0x6e, 0x3b, 0xe4, 0xc1, 0xed, 0xa7, 0x72, 0xf1, 0x4f, 0x60, 0xe1, + 0xbf, 0x35, 0xe1, 0x7a, 0x4f, 0x31, 0xb4, 0x14, 0x5f, 0xaa, 0x39, 0xad, 0x7d, 0xc7, 0xbd, 0xb4, + 0xef, 0x78, 0x47, 0x97, 0xbc, 0x23, 0x0b, 0x8d, 0xd1, 0x47, 0xb6, 0x49, 0xf4, 0x79, 0xe6, 0x64, + 0xcf, 0x79, 0xf1, 0x2e, 0x7e, 0xa5, 0x81, 0x2e, 0xad, 0x82, 0x37, 0x52, 0xf4, 0xb3, 0x30, 0x8c, + 0x2f, 0xf6, 0x32, 0xde, 0xac, 0x54, 0x8a, 0xc9, 0x7b, 0x6f, 0xcf, 0x9d, 0x32, 0xe8, 0x98, 0x3f, + 0xbb, 0x8c, 0x9f, 0x74, 0x27, 0x84, 0xd9, 0x65, 0x7f, 0xf6, 0x0a, 0x79, 0xd8, 0x2d, 0xcc, 0x5e, + 0xf1, 0x67, 0x57, 0xf0, 0x63, 0x6f, 0x55, 0x98, 0x5d, 0xf1, 0x67, 0xaf, 0xe2, 0xad, 0x9d, 0x31, + 0x61, 0xf6, 0xaa, 0x3f, 0x7b, 0x0d, 0x6f, 0xe8, 0x24, 0x85, 0xd9, 0x6b, 0xfe, 0xec, 0x75, 0xbc, + 0x97, 0x33, 0x29, 0xcc, 0x5e, 0xf7, 0x67, 0x6f, 0xe0, 0x3d, 0x1c, 0x5d, 0x98, 0xbd, 0xe1, 0xcf, + 0xde, 0xc4, 0x2f, 0x48, 0x8d, 0x08, 0xb3, 0x37, 0xf5, 0x59, 0x18, 0x21, 0x57, 0xbe, 0x84, 0x37, + 0xfc, 0x27, 0xe8, 0x34, 0x1b, 0x0c, 0xe6, 0x2f, 0xe3, 0x97, 0xa1, 0x86, 0xc5, 0xf9, 0xcb, 0xc1, + 0xfc, 0x32, 0xfe, 0x5e, 0x86, 0x26, 0xce, 0x2f, 0x07, 0xf3, 0x57, 0xb2, 0x63, 0xf8, 0x85, 0x30, + 0x61, 0xfe, 0x4a, 0x30, 0xbf, 0x92, 0x1d, 0x47, 0x19, 0x23, 0xce, 0xaf, 0x04, 0xf3, 0x57, 0xb3, + 0x13, 0xe7, 0x94, 0xf9, 0x8c, 0x38, 0x7f, 0x35, 0xf7, 0x0b, 0xd8, 0xbd, 0x76, 0xe0, 0xde, 0x69, + 0xd1, 0xbd, 0xbe, 0x63, 0xa7, 0x45, 0xc7, 0xfa, 0x2e, 0x9d, 0x16, 0x5d, 0xea, 0x3b, 0x73, 0x5a, + 0x74, 0xa6, 0xef, 0xc6, 0x69, 0xd1, 0x8d, 0xbe, 0x03, 0xa7, 0x45, 0x07, 0xfa, 0xae, 0x9b, 0x16, + 0x5d, 0xe7, 0x3b, 0x6d, 0x5a, 0x74, 0x9a, 0xef, 0xae, 0x69, 0xd1, 0x5d, 0xbe, 0xa3, 0xb2, 0x92, + 0xa3, 0x02, 0x17, 0x65, 0x25, 0x17, 0x05, 0xce, 0xc9, 0x4a, 0xce, 0x09, 0xdc, 0x92, 0x95, 0xdc, + 0x12, 0x38, 0x24, 0x2b, 0x39, 0x24, 0x70, 0x45, 0x56, 0x72, 0x45, 0xe0, 0x04, 0x9a, 0x63, 0x86, + 0xd5, 0x8e, 0xc8, 0x31, 0xb5, 0x6f, 0x8e, 0xa9, 0x7d, 0x73, 0x4c, 0xed, 0x9b, 0x63, 0x6a, 0xdf, + 0x1c, 0x53, 0xfb, 0xe6, 0x98, 0xda, 0x37, 0xc7, 0xd4, 0xbe, 0x39, 0xa6, 0xf6, 0xcd, 0x31, 0xb5, + 0x7f, 0x8e, 0xa9, 0x31, 0x39, 0xa6, 0xc6, 0xe4, 0x98, 0x1a, 0x93, 0x63, 0x6a, 0x4c, 0x8e, 0xa9, + 0x31, 0x39, 0xa6, 0xf6, 0xcc, 0xb1, 0xc0, 0xbd, 0xd3, 0xa2, 0x7b, 0x23, 0x73, 0x4c, 0xed, 0x91, + 0x63, 0x6a, 0x8f, 0x1c, 0x53, 0x7b, 0xe4, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x1e, 0x39, 0xa6, 0xf6, + 0xc8, 0x31, 0xb5, 0x47, 0x8e, 0xa9, 0xbd, 0x72, 0x4c, 0xed, 0x99, 0x63, 0x6a, 0xcf, 0x1c, 0x53, + 0x7b, 0xe6, 0x98, 0xda, 0x33, 0xc7, 0xd4, 0x9e, 0x39, 0xa6, 0xf2, 0x39, 0xf6, 0xaf, 0x55, 0xd0, + 0x49, 0x8e, 0x6d, 0xe3, 0x57, 0xc6, 0xa8, 0x2b, 0x66, 0xa5, 0x4c, 0x1b, 0x46, 0xae, 0xd3, 0x02, + 0x97, 0xcc, 0x4a, 0xb9, 0x26, 0xce, 0x2f, 0xfb, 0xf3, 0x2c, 0xdb, 0xc4, 0xf9, 0x2b, 0xfe, 0x3c, + 0xcb, 0x37, 0x71, 0x7e, 0xc5, 0x9f, 0x67, 0x19, 0x27, 0xce, 0x5f, 0xf5, 0xe7, 0x59, 0xce, 0x89, + 0xf3, 0xd7, 0xfc, 0x79, 0x96, 0x75, 0xe2, 0xfc, 0x75, 0x7f, 0x9e, 0xe5, 0x9d, 0x38, 0x7f, 0xc3, + 0x9f, 0x67, 0x99, 0x27, 0xce, 0xdf, 0xd4, 0xcf, 0xc9, 0xb9, 0xc7, 0x04, 0x7c, 0xd7, 0x9e, 0x93, + 0xb3, 0x4f, 0x92, 0xb8, 0x1c, 0x48, 0xb0, 0xfc, 0x93, 0x24, 0x96, 0x03, 0x09, 0x96, 0x81, 0x92, + 0xc4, 0x95, 0xdc, 0x67, 0xb0, 0xfb, 0x6c, 0xd9, 0x7d, 0x33, 0x92, 0xfb, 0x12, 0x9c, 0xeb, 0x66, + 0x24, 0xd7, 0x25, 0x38, 0xb7, 0xcd, 0x48, 0x6e, 0x4b, 0x70, 0x2e, 0x9b, 0x91, 0x5c, 0x96, 0xe0, + 0xdc, 0x35, 0x23, 0xb9, 0x2b, 0xc1, 0xb9, 0x6a, 0x46, 0x72, 0x55, 0x82, 0x73, 0xd3, 0x8c, 0xe4, + 0xa6, 0x04, 0xe7, 0xa2, 0x19, 0xc9, 0x45, 0x09, 0xce, 0x3d, 0x33, 0x92, 0x7b, 0x12, 0x9c, 0x6b, + 0xce, 0xca, 0xae, 0x49, 0xf0, 0x6e, 0x39, 0x2b, 0xbb, 0x25, 0xc1, 0xbb, 0xe4, 0xac, 0xec, 0x92, + 0x04, 0xef, 0x8e, 0xb3, 0xb2, 0x3b, 0x12, 0xbc, 0x2b, 0xfe, 0x24, 0xc1, 0x3a, 0xc2, 0x1d, 0xaf, + 0xd3, 0xad, 0x79, 0xef, 0xa9, 0x23, 0x5c, 0x12, 0xda, 0x87, 0xf4, 0xb2, 0xbe, 0x88, 0x1b, 0x56, + 0xbe, 0xe3, 0x94, 0x56, 0xb0, 0x25, 0xa1, 0xb1, 0xe0, 0x10, 0x76, 0x34, 0x62, 0xe5, 0x3d, 0xf5, + 0x86, 0x4b, 0x42, 0x9b, 0x11, 0xaf, 0xdf, 0x8d, 0x0f, 0xbc, 0x63, 0x7b, 0x2b, 0xc1, 0x3a, 0x36, + 0x6a, 0xfe, 0x93, 0x76, 0x6c, 0x0b, 0xf1, 0x26, 0xf7, 0x8d, 0xbd, 0x10, 0x6f, 0xec, 0xd0, 0xaa, + 0x33, 0x68, 0x07, 0xb7, 0x10, 0x6f, 0x5a, 0xdf, 0xa8, 0xef, 0x6f, 0xbf, 0x45, 0x23, 0xd8, 0xb0, + 0xda, 0x11, 0x11, 0x7c, 0xd2, 0x7e, 0x6b, 0x49, 0x28, 0x25, 0x27, 0x8d, 0x60, 0xf5, 0xc4, 0x11, + 0x7c, 0xd2, 0xce, 0x6b, 0x49, 0x28, 0x2f, 0x27, 0x8e, 0xe0, 0x0f, 0xa0, 0x1f, 0xa2, 0x11, 0x1c, + 0x98, 0xff, 0xa4, 0xfd, 0xd0, 0x42, 0xbc, 0xc9, 0x23, 0x23, 0x58, 0x3d, 0x41, 0x04, 0x0f, 0xd2, + 0x1f, 0x2d, 0xc4, 0x9b, 0x36, 0x3a, 0x82, 0xdf, 0x73, 0x37, 0xf3, 0x25, 0x05, 0x26, 0x2b, 0x8d, + 0x7a, 0xb9, 0xb5, 0x6f, 0xd5, 0xeb, 0x56, 0x9d, 0xda, 0x71, 0x49, 0xa8, 0x04, 0x3d, 0x5c, 0xfd, + 0xed, 0xb7, 0xe7, 0x02, 0x0b, 0x5f, 0x85, 0x14, 0xb1, 0xe9, 0xd2, 0x52, 0xf6, 0x9e, 0x12, 0x53, + 0xe1, 0x7c, 0x51, 0xfd, 0x3c, 0x83, 0x5d, 0x5e, 0xca, 0xfe, 0x27, 0x85, 0xab, 0x72, 0xfe, 0x70, + 0xee, 0x97, 0xb1, 0x86, 0xf6, 0x7b, 0xd6, 0xf0, 0xd2, 0x40, 0x1a, 0x72, 0xba, 0x3d, 0x12, 0xd2, + 0x8d, 0xd3, 0xaa, 0x0b, 0x13, 0x95, 0x46, 0xbd, 0x82, 0x7f, 0x11, 0x60, 0x10, 0x95, 0x88, 0x8c, + 0x54, 0x0f, 0x96, 0x84, 0xb0, 0xe4, 0x11, 0x7e, 0x48, 0x8b, 0x35, 0x22, 0xd7, 0x40, 0xa7, 0xb5, + 0x85, 0xd3, 0x2e, 0xf4, 0x3a, 0x6d, 0x50, 0xd9, 0xfd, 0x13, 0x2e, 0xf4, 0x3a, 0x61, 0x90, 0x43, + 0xfe, 0xa9, 0x5e, 0x63, 0x8b, 0x33, 0x79, 0x71, 0x4b, 0x3f, 0x0b, 0x89, 0x75, 0xf2, 0x5e, 0x79, + 0xa6, 0x98, 0x41, 0x4a, 0x7d, 0xe7, 0xed, 0xb9, 0xe4, 0x5e, 0xb7, 0x51, 0x37, 0x12, 0xeb, 0x75, + 0xfd, 0x0e, 0x0c, 0x7d, 0x92, 0x7e, 0x2f, 0x15, 0x09, 0xac, 0x50, 0x81, 0x8f, 0xc6, 0x3c, 0x62, + 0xc2, 0xd4, 0x8b, 0x7b, 0x0d, 0xdb, 0xbb, 0xbc, 0x7c, 0xc3, 0x20, 0x14, 0xb9, 0x3f, 0x07, 0x40, + 0xce, 0xb9, 0x6a, 0xba, 0x47, 0x7a, 0x85, 0x31, 0x93, 0x53, 0xdf, 0xf8, 0xce, 0xdb, 0x73, 0x2b, + 0x83, 0xb0, 0x3e, 0x55, 0x37, 0xdd, 0xa3, 0xa7, 0xbc, 0xe3, 0xb6, 0xb5, 0x58, 0x3c, 0xf6, 0x2c, + 0x97, 0xb1, 0xb7, 0xd9, 0xaa, 0x47, 0xaf, 0x2b, 0xcb, 0x5d, 0x57, 0x4a, 0xb8, 0xa6, 0x35, 0xf1, + 0x9a, 0x96, 0x1e, 0xf4, 0x7a, 0x5e, 0x63, 0x8b, 0x84, 0x64, 0x49, 0x35, 0xce, 0x92, 0xea, 0x7b, + 0xb5, 0x64, 0x9b, 0xd5, 0x47, 0xe9, 0x5a, 0xd5, 0x7e, 0xd7, 0xaa, 0xbe, 0x97, 0x6b, 0xfd, 0xff, + 0x24, 0x5b, 0xfd, 0x7c, 0xda, 0xb3, 0xc9, 0x3b, 0xad, 0x7f, 0xb6, 0x9e, 0x05, 0xbd, 0xaf, 0x5d, + 0x40, 0x3e, 0x79, 0xef, 0xcd, 0x39, 0x25, 0xf7, 0xa5, 0x04, 0xbb, 0x72, 0x92, 0x48, 0x0f, 0x76, + 0xe5, 0x7f, 0x56, 0x7a, 0xaa, 0x0f, 0xc2, 0x42, 0x5f, 0x54, 0x60, 0x3a, 0x54, 0xc9, 0x89, 0x99, + 0xde, 0xdf, 0x72, 0x6e, 0x9f, 0xb4, 0x9c, 0x53, 0x05, 0x7f, 0x57, 0x81, 0xd3, 0x52, 0x79, 0x25, + 0xea, 0x5d, 0x92, 0xd4, 0x7b, 0x28, 0x7c, 0x26, 0x2c, 0xc8, 0x69, 0xc7, 0xbb, 0x57, 0x02, 0x70, + 0xcc, 0xbe, 0xdf, 0x57, 0x24, 0xbf, 0x9f, 0xf5, 0x01, 0x11, 0xe6, 0x62, 0x11, 0x40, 0xd5, 0x76, + 0x20, 0xb9, 0xdb, 0xb1, 0x2c, 0x7d, 0x16, 0x12, 0x5b, 0x1d, 0xaa, 0xe1, 0x38, 0xc1, 0x6f, 0x75, + 0x8a, 0x1d, 0xd3, 0xae, 0x1d, 0x19, 0x89, 0xad, 0x8e, 0x7e, 0x1e, 0xd4, 0x02, 0xfd, 0x4e, 0x7c, + 0x7a, 0x79, 0x82, 0x08, 0x14, 0xec, 0x3a, 0x95, 0x40, 0x73, 0xfa, 0x2c, 0x24, 0x37, 0x2c, 0xf3, + 0x80, 0x2a, 0x01, 0x44, 0x06, 0x8d, 0x18, 0x78, 0x9c, 0x9e, 0xf0, 0x05, 0x48, 0x31, 0x62, 0xfd, + 0x02, 0x42, 0x1c, 0x78, 0xf4, 0xb4, 0x14, 0x81, 0xd4, 0xa1, 0x2b, 0x17, 0x9e, 0xd5, 0x2f, 0xc2, + 0x90, 0xd1, 0x38, 0x3c, 0xf2, 0xe8, 0xc9, 0xc3, 0x62, 0x64, 0x3a, 0x77, 0x17, 0x46, 0x7d, 0x8d, + 0xde, 0x67, 0xea, 0x55, 0x72, 0x69, 0xfa, 0x0c, 0xbf, 0x9e, 0xb0, 0xe7, 0x96, 0x64, 0x48, 0x3f, + 0x07, 0xa9, 0x1d, 0xaf, 0x13, 0x14, 0x7d, 0xd6, 0x91, 0xfa, 0xa3, 0xb9, 0x5f, 0x50, 0x20, 0xb5, + 0x6a, 0x59, 0x6d, 0x6c, 0xf0, 0xc7, 0x21, 0xb9, 0xea, 0xbc, 0x6a, 0x53, 0x05, 0x27, 0xa9, 0x45, + 0xd1, 0x34, 0xb5, 0x29, 0x9e, 0xd6, 0x1f, 0xe7, 0xed, 0x3e, 0xe5, 0xdb, 0x9d, 0x93, 0xc3, 0xb6, + 0xcf, 0x09, 0xb6, 0xa7, 0x0e, 0x44, 0x42, 0x21, 0xfb, 0x5f, 0x87, 0x34, 0x77, 0x16, 0x7d, 0x9e, + 0xaa, 0x91, 0x90, 0x81, 0xbc, 0xad, 0x90, 0x44, 0xce, 0x82, 0x31, 0xe1, 0xc4, 0x08, 0xca, 0x99, + 0xb8, 0x07, 0x14, 0x9b, 0x79, 0x41, 0x34, 0x73, 0xb4, 0x28, 0x35, 0xf5, 0x12, 0xb1, 0x11, 0x36, + 0xf7, 0x05, 0x12, 0x9c, 0xbd, 0x9d, 0x88, 0x3e, 0xe7, 0x86, 0x40, 0xad, 0x34, 0x9a, 0xb9, 0xa7, + 0x01, 0x48, 0xca, 0x97, 0xed, 0x6e, 0x4b, 0xca, 0xba, 0x71, 0x66, 0xe0, 0xdd, 0x23, 0x6b, 0xd7, + 0x72, 0xb1, 0x88, 0xd8, 0x4f, 0xa1, 0x02, 0x03, 0x24, 0xc5, 0x30, 0xfe, 0xc9, 0x58, 0x7c, 0x64, + 0x27, 0x86, 0x44, 0xb3, 0x44, 0xf4, 0xae, 0xe5, 0x15, 0x6c, 0xc7, 0x3b, 0xb2, 0x3a, 0x12, 0x62, + 0x59, 0xbf, 0x22, 0x24, 0xec, 0xf8, 0xf2, 0x23, 0x3e, 0xa2, 0x27, 0xe8, 0x4a, 0xee, 0x6b, 0x58, + 0x41, 0xd4, 0x0a, 0x84, 0x2e, 0x50, 0x1d, 0xe0, 0x02, 0xf5, 0x6b, 0x42, 0xff, 0xd6, 0x47, 0x4d, + 0xe9, 0xd6, 0xf2, 0xa6, 0x70, 0x9f, 0xd3, 0x5f, 0x59, 0xf1, 0x1e, 0x93, 0xd9, 0x94, 0xa9, 0xfc, + 0x64, 0xac, 0xca, 0x3d, 0xba, 0xdb, 0x93, 0xda, 0x54, 0x1d, 0xd4, 0xa6, 0xdf, 0xf4, 0x3b, 0x0e, + 0xf2, 0xc3, 0x23, 0xf8, 0x27, 0x7b, 0xf4, 0x8f, 0xc6, 0xfa, 0x3e, 0xaf, 0x94, 0x7c, 0x55, 0x57, + 0x06, 0x75, 0x7f, 0x3e, 0x51, 0x2c, 0xfa, 0xea, 0x5e, 0x3f, 0x41, 0x08, 0xe4, 0x13, 0xa5, 0x92, + 0x5f, 0xb6, 0x53, 0x9f, 0x79, 0x73, 0x4e, 0xf9, 0xea, 0x9b, 0x73, 0xa7, 0x72, 0xbf, 0xa9, 0xc0, + 0x24, 0x95, 0xe4, 0x02, 0xf7, 0x29, 0x49, 0xf9, 0x33, 0xac, 0x66, 0x44, 0x59, 0xe0, 0xa7, 0x16, + 0xbc, 0xdf, 0x52, 0x20, 0x1b, 0xd2, 0x95, 0xd9, 0x7b, 0x69, 0x20, 0x95, 0xf3, 0x4a, 0xf9, 0x67, + 0x6f, 0xf3, 0xbb, 0x30, 0xb4, 0xdb, 0x68, 0x59, 0x1d, 0xb4, 0x12, 0xa0, 0x0f, 0x44, 0x65, 0xb6, + 0x99, 0x43, 0x86, 0xd8, 0x1c, 0x51, 0x4e, 0x98, 0x5b, 0xd6, 0xb3, 0x90, 0x5c, 0x35, 0x3d, 0x13, + 0x6b, 0x90, 0xf1, 0xeb, 0xab, 0xe9, 0x99, 0xb9, 0x2b, 0x90, 0xd9, 0x3c, 0xc6, 0x2f, 0x22, 0xd5, + 0xf1, 0x3b, 0x28, 0x62, 0xf7, 0xc7, 0xfa, 0xd5, 0xcb, 0x0b, 0x43, 0xa9, 0xba, 0x76, 0x4f, 0xc9, + 0x27, 0xb1, 0x3e, 0xaf, 0xc0, 0xf8, 0x16, 0x52, 0x1b, 0xe3, 0x30, 0xec, 0x1c, 0x28, 0x9b, 0x62, + 0x23, 0xc4, 0xb3, 0x1a, 0xca, 0xa6, 0xd4, 0x3e, 0xaa, 0xbe, 0x79, 0xa4, 0xb6, 0x4d, 0xf5, 0xdb, + 0xb6, 0x85, 0x64, 0x6a, 0x5c, 0x9b, 0x5c, 0x48, 0xa6, 0x40, 0x1b, 0xa3, 0xe7, 0xfd, 0x0f, 0x2a, + 0x68, 0xa4, 0xd5, 0x59, 0xb5, 0x0e, 0x1a, 0x76, 0xc3, 0x0b, 0xf7, 0xab, 0xbe, 0xc6, 0xfa, 0xb3, + 0x30, 0x8a, 0x4c, 0xba, 0x46, 0x7f, 0xb9, 0x0f, 0x99, 0xfe, 0x3c, 0x6d, 0x51, 0x24, 0x0a, 0x3a, + 0x80, 0x43, 0x27, 0xc0, 0xe8, 0x6b, 0xa0, 0x56, 0x2a, 0x9b, 0x74, 0x71, 0x5b, 0xe9, 0x0b, 0xa5, + 0x2f, 0xfb, 0xd0, 0x23, 0x3a, 0xe6, 0x1e, 0x1a, 0x88, 0x40, 0x5f, 0x81, 0x44, 0x65, 0x93, 0x36, + 0xbc, 0x17, 0x06, 0xa1, 0x31, 0x12, 0x95, 0xcd, 0x99, 0x7f, 0xa3, 0xc0, 0x98, 0x30, 0xaa, 0xe7, + 0x20, 0x43, 0x06, 0xb8, 0xcb, 0x1d, 0x36, 0x84, 0x31, 0xa6, 0x73, 0xe2, 0x3d, 0xea, 0x3c, 0x53, + 0x80, 0x09, 0x69, 0x5c, 0x5f, 0x04, 0x9d, 0x1f, 0xa2, 0x4a, 0x90, 0x5f, 0x0d, 0x8b, 0x98, 0xc9, + 0x3d, 0x0a, 0x10, 0xd8, 0xd5, 0xff, 0xb1, 0xab, 0x4a, 0x79, 0x67, 0xb7, 0xbc, 0xaa, 0x29, 0xb9, + 0x6f, 0x28, 0x90, 0xa6, 0x6d, 0x6b, 0xcd, 0x69, 0x5b, 0x7a, 0x11, 0x94, 0x02, 0x8d, 0xa0, 0x07, + 0xd3, 0x5b, 0x29, 0xe8, 0x97, 0x40, 0x29, 0x0e, 0xee, 0x6a, 0xa5, 0xa8, 0x2f, 0x83, 0x52, 0xa2, + 0x0e, 0x1e, 0xcc, 0x33, 0x4a, 0x29, 0xf7, 0xc7, 0x2a, 0x4c, 0xf1, 0x6d, 0x34, 0xab, 0x27, 0xe7, + 0xc5, 0xfb, 0xa6, 0xfc, 0xe8, 0xe5, 0xe5, 0x2b, 0x2b, 0x8b, 0xe8, 0x1f, 0x3f, 0x24, 0x73, 0xe2, + 0x2d, 0x54, 0x1e, 0x7c, 0x91, 0xcb, 0xbd, 0xde, 0x13, 0xc9, 0x27, 0x39, 0x86, 0xd0, 0x7b, 0x22, + 0xc2, 0x6c, 0xe8, 0x3d, 0x11, 0x61, 0x36, 0xf4, 0x9e, 0x88, 0x30, 0x1b, 0xda, 0x0b, 0x10, 0x66, + 0x43, 0xef, 0x89, 0x08, 0xb3, 0xa1, 0xf7, 0x44, 0x84, 0xd9, 0xf0, 0x7b, 0x22, 0x74, 0xba, 0xe7, + 0x7b, 0x22, 0xe2, 0x7c, 0xf8, 0x3d, 0x11, 0x71, 0x3e, 0xfc, 0x9e, 0x48, 0x3e, 0xe9, 0x75, 0xba, + 0x56, 0xef, 0x5d, 0x07, 0x11, 0xdf, 0xef, 0x26, 0x30, 0xa8, 0xc0, 0x5b, 0x30, 0x41, 0x1e, 0x48, + 0x94, 0x1c, 0xdb, 0x33, 0x1b, 0xb6, 0xd5, 0xd1, 0x3f, 0x06, 0x19, 0x32, 0x44, 0x6e, 0x73, 0xa2, + 0x6e, 0x03, 0xc9, 0x3c, 0xad, 0xb7, 0x82, 0x74, 0xee, 0x4f, 0x92, 0x30, 0x4d, 0x06, 0x2a, 0x66, + 0xcb, 0x12, 0xde, 0x32, 0xba, 0x28, 0xed, 0x29, 0x8d, 0x23, 0xf8, 0xfd, 0xb7, 0xe7, 0xc8, 0x68, + 0xc1, 0x8f, 0xa6, 0x8b, 0xd2, 0xee, 0x92, 0x28, 0x17, 0x2c, 0x40, 0x17, 0xa5, 0x37, 0x8f, 0x44, + 0x39, 0x7f, 0xbd, 0xf1, 0xe5, 0xd8, 0x3b, 0x48, 0xa2, 0xdc, 0xaa, 0x1f, 0x65, 0x17, 0xa5, 0xb7, + 0x91, 0x44, 0xb9, 0xb2, 0x1f, 0x6f, 0x17, 0xa5, 0xbd, 0x27, 0x51, 0x6e, 0xcd, 0x8f, 0xbc, 0x8b, + 0xd2, 0x2e, 0x94, 0x28, 0x77, 0xdb, 0x8f, 0xc1, 0x8b, 0xd2, 0xbb, 0x4a, 0xa2, 0xdc, 0x73, 0x7e, + 0x34, 0x5e, 0x94, 0xde, 0x5a, 0x12, 0xe5, 0xd6, 0xfd, 0xb8, 0x9c, 0x97, 0xdf, 0x5f, 0x12, 0x05, + 0xef, 0x04, 0x11, 0x3a, 0x2f, 0xbf, 0xc9, 0x24, 0x4a, 0x7e, 0x3c, 0x88, 0xd5, 0x79, 0xf9, 0x9d, + 0x26, 0x51, 0x72, 0x23, 0x88, 0xda, 0x79, 0x79, 0xaf, 0x4c, 0x94, 0xdc, 0x0c, 0xe2, 0x77, 0x5e, + 0xde, 0x35, 0x13, 0x25, 0x2b, 0x41, 0x24, 0xcf, 0xcb, 0xfb, 0x67, 0xa2, 0xe4, 0x56, 0xf0, 0x10, + 0xfd, 0x0f, 0xa4, 0xf0, 0xe3, 0xde, 0x82, 0xca, 0x49, 0xe1, 0x07, 0x11, 0xa1, 0x27, 0x15, 0x32, + 0x4e, 0x26, 0x08, 0xbb, 0x9c, 0x14, 0x76, 0x10, 0x11, 0x72, 0x39, 0x29, 0xe4, 0x20, 0x22, 0xdc, + 0x72, 0x52, 0xb8, 0x41, 0x44, 0xa8, 0xe5, 0xa4, 0x50, 0x83, 0x88, 0x30, 0xcb, 0x49, 0x61, 0x06, + 0x11, 0x21, 0x96, 0x93, 0x42, 0x0c, 0x22, 0xc2, 0x2b, 0x27, 0x85, 0x17, 0x44, 0x84, 0xd6, 0x05, + 0x39, 0xb4, 0x20, 0x2a, 0xac, 0x2e, 0xc8, 0x61, 0x05, 0x51, 0x21, 0xf5, 0x98, 0x1c, 0x52, 0xa3, + 0xf7, 0xdf, 0x9e, 0x1b, 0x42, 0x43, 0x5c, 0x34, 0x5d, 0x90, 0xa3, 0x09, 0xa2, 0x22, 0xe9, 0x82, + 0x1c, 0x49, 0x10, 0x15, 0x45, 0x17, 0xe4, 0x28, 0x82, 0xa8, 0x08, 0x7a, 0x4b, 0x8e, 0xa0, 0xe0, + 0x1d, 0x9f, 0x9c, 0xb4, 0xa5, 0x18, 0x17, 0x41, 0xea, 0x00, 0x11, 0xa4, 0x0e, 0x10, 0x41, 0xea, + 0x00, 0x11, 0xa4, 0x0e, 0x10, 0x41, 0xea, 0x00, 0x11, 0xa4, 0x0e, 0x10, 0x41, 0xea, 0x00, 0x11, + 0xa4, 0x0e, 0x12, 0x41, 0xea, 0x40, 0x11, 0xa4, 0xf6, 0x8a, 0xa0, 0x0b, 0xf2, 0x1b, 0x0f, 0x10, + 0x55, 0x90, 0x2e, 0xc8, 0x5b, 0x9f, 0xf1, 0x21, 0xa4, 0x0e, 0x14, 0x42, 0x6a, 0xaf, 0x10, 0xfa, + 0x03, 0x15, 0xa6, 0x84, 0x10, 0xa2, 0xfb, 0x43, 0xef, 0x57, 0x05, 0xba, 0x36, 0xc0, 0x0b, 0x16, + 0x51, 0x31, 0x75, 0x6d, 0x80, 0x4d, 0xea, 0x7e, 0x71, 0x16, 0xae, 0x42, 0xe5, 0x01, 0xaa, 0xd0, + 0x9a, 0x1f, 0x43, 0xd7, 0x06, 0x78, 0xf1, 0x22, 0x1c, 0x7b, 0x37, 0xfa, 0x15, 0x81, 0xe7, 0x06, + 0x2a, 0x02, 0xeb, 0x03, 0x15, 0x81, 0x3b, 0x81, 0x07, 0x7f, 0x31, 0x01, 0xa7, 0x03, 0x0f, 0x92, + 0x4f, 0xf8, 0x97, 0xb5, 0x72, 0xdc, 0x16, 0x95, 0xce, 0xb6, 0x6d, 0x38, 0x37, 0x26, 0xd6, 0xeb, + 0xfa, 0xb6, 0xb8, 0x59, 0x95, 0x3f, 0xe9, 0x06, 0x0e, 0xe7, 0x71, 0xfa, 0x30, 0xf4, 0x02, 0xa8, + 0xeb, 0x75, 0x17, 0x57, 0x8b, 0xa8, 0xd3, 0x96, 0x0c, 0x34, 0xad, 0x1b, 0x30, 0x8c, 0xc5, 0x5d, + 0xec, 0xde, 0xf7, 0x72, 0xe2, 0x55, 0x83, 0x32, 0xe5, 0xde, 0x52, 0xe0, 0x9c, 0x10, 0xca, 0xef, + 0xcf, 0x96, 0xc1, 0xad, 0x81, 0xb6, 0x0c, 0x84, 0x04, 0x09, 0xb6, 0x0f, 0x9e, 0x08, 0xef, 0x54, + 0xf3, 0x59, 0x22, 0x6f, 0x25, 0xfc, 0x25, 0x18, 0x0f, 0xae, 0x00, 0xdf, 0xb3, 0x5d, 0x8d, 0x7f, + 0x9a, 0x19, 0x95, 0x9a, 0x57, 0xa5, 0xa7, 0x68, 0x7d, 0x61, 0x7e, 0xb6, 0xe6, 0xf2, 0x30, 0x51, + 0x11, 0xbf, 0x12, 0x15, 0xf7, 0x30, 0x22, 0x85, 0x5a, 0xf3, 0x7b, 0x5f, 0x9e, 0x3b, 0x95, 0xfb, + 0x28, 0x64, 0xf8, 0x6f, 0x3d, 0x49, 0xc0, 0x51, 0x06, 0xcc, 0x27, 0xbf, 0x8d, 0xa4, 0xff, 0x81, + 0x02, 0x67, 0x78, 0xf1, 0xe7, 0x1b, 0xde, 0xd1, 0xba, 0x8d, 0x7a, 0xfa, 0xa7, 0x21, 0x65, 0x51, + 0xc7, 0xd1, 0x1f, 0xc9, 0xa1, 0xf7, 0x91, 0x91, 0xe2, 0x8b, 0xf8, 0x5f, 0xc3, 0x87, 0x48, 0xcf, + 0x38, 0xd8, 0x69, 0x97, 0x67, 0x1e, 0x87, 0x21, 0xc2, 0x2f, 0xea, 0x35, 0x26, 0xe9, 0xf5, 0xeb, + 0x11, 0x7a, 0xe1, 0x38, 0xd2, 0xef, 0x08, 0x7a, 0x71, 0xb7, 0xab, 0x91, 0xe2, 0x8b, 0x2c, 0xf8, + 0x8a, 0x29, 0xd4, 0xff, 0xe1, 0x88, 0x8a, 0x57, 0x72, 0x1e, 0x52, 0x65, 0x59, 0x26, 0x5a, 0xcf, + 0x55, 0x48, 0x56, 0x9c, 0x3a, 0xfe, 0xf9, 0x1e, 0xfc, 0x7b, 0xd5, 0xd4, 0xc8, 0xf4, 0xc7, 0xab, + 0x2f, 0x42, 0xaa, 0x74, 0xd4, 0x68, 0xd6, 0x3b, 0x96, 0x4d, 0xf7, 0xec, 0xe9, 0x23, 0x74, 0x84, + 0x31, 0xfc, 0xb9, 0x5c, 0x09, 0x26, 0x2b, 0x8e, 0x5d, 0x3c, 0xf6, 0xf8, 0xba, 0xb1, 0x28, 0xa5, + 0x08, 0xdd, 0xf3, 0xc1, 0xdf, 0x12, 0x41, 0x02, 0xc5, 0xa1, 0xef, 0xbc, 0x3d, 0xa7, 0xec, 0xfa, + 0xcf, 0xcf, 0x37, 0xe1, 0x21, 0x9a, 0x3e, 0x21, 0xaa, 0xe5, 0x38, 0xaa, 0x51, 0xba, 0x4f, 0xcd, + 0xd1, 0xad, 0x23, 0x3a, 0x3b, 0x92, 0xee, 0xc1, 0x34, 0x43, 0x4d, 0x51, 0x5f, 0xcd, 0xd4, 0x13, + 0x69, 0x16, 0x49, 0xb7, 0x18, 0x47, 0x27, 0x69, 0xf6, 0x18, 0x8c, 0xfa, 0x73, 0x5c, 0x34, 0xf0, + 0x99, 0xb2, 0xbc, 0x90, 0x83, 0x34, 0x97, 0xb0, 0xfa, 0x10, 0x28, 0x05, 0xed, 0x14, 0xfa, 0xaf, + 0xa8, 0x29, 0xe8, 0xbf, 0x92, 0x96, 0x58, 0x78, 0x1c, 0x26, 0xa4, 0xe7, 0x97, 0x68, 0x66, 0x55, + 0x03, 0xf4, 0x5f, 0x59, 0x4b, 0xcf, 0x24, 0x3f, 0xf3, 0x6b, 0xb3, 0xa7, 0x16, 0x6e, 0x81, 0x1e, + 0x7e, 0xd2, 0xa9, 0x0f, 0x43, 0xa2, 0x80, 0x28, 0x1f, 0x82, 0x44, 0xb1, 0xa8, 0x29, 0x33, 0x13, + 0x7f, 0xfd, 0x0b, 0xe7, 0xd2, 0x45, 0xfc, 0x95, 0xee, 0xbb, 0x96, 0x57, 0x2c, 0x52, 0xf0, 0x33, + 0x70, 0x26, 0xf2, 0x49, 0x29, 0xc2, 0x97, 0x4a, 0x04, 0xbf, 0xba, 0x1a, 0xc2, 0xaf, 0xae, 0x62, + 0xbc, 0x92, 0x67, 0x3b, 0xce, 0x05, 0x3d, 0xe2, 0xb9, 0x64, 0xb6, 0xce, 0xed, 0x70, 0x17, 0xf2, + 0xcf, 0x50, 0xd9, 0x62, 0xa4, 0xac, 0x15, 0xb3, 0x63, 0x5d, 0xcc, 0x97, 0x28, 0xbe, 0x14, 0x89, + 0x3f, 0x90, 0xb6, 0x55, 0xc5, 0x15, 0x82, 0x92, 0x94, 0x7c, 0x85, 0x57, 0x23, 0x49, 0x8e, 0xb8, + 0x97, 0xdd, 0x57, 0x7d, 0x85, 0xcb, 0x91, 0xb2, 0x8d, 0x98, 0x97, 0xbe, 0xca, 0xf9, 0x4b, 0x74, + 0x91, 0x2f, 0x5c, 0xd6, 0xcf, 0xb0, 0x1c, 0x15, 0x2a, 0x30, 0x35, 0x10, 0x93, 0xca, 0x97, 0x28, + 0xa0, 0xd8, 0x13, 0xd0, 0xdb, 0x4a, 0x0c, 0x99, 0x7f, 0x8e, 0x92, 0x94, 0x7a, 0x92, 0xc4, 0x98, + 0x8a, 0xc1, 0x8b, 0xbb, 0xf7, 0xde, 0x99, 0x3d, 0xf5, 0xed, 0x77, 0x66, 0x4f, 0xfd, 0x97, 0x77, + 0x66, 0x4f, 0x7d, 0xf7, 0x9d, 0x59, 0xe5, 0x07, 0xef, 0xcc, 0x2a, 0x3f, 0x7a, 0x67, 0x56, 0xf9, + 0xf1, 0x3b, 0xb3, 0xca, 0x1b, 0xf7, 0x67, 0x95, 0xaf, 0xde, 0x9f, 0x55, 0xbe, 0x76, 0x7f, 0x56, + 0xf9, 0xbd, 0xfb, 0xb3, 0xca, 0x5b, 0xf7, 0x67, 0x95, 0x7b, 0xf7, 0x67, 0x95, 0x6f, 0xdf, 0x9f, + 0x55, 0xbe, 0x7b, 0x7f, 0x56, 0xf9, 0xc1, 0xfd, 0xd9, 0x53, 0x3f, 0xba, 0x3f, 0xab, 0xfc, 0xf8, + 0xfe, 0xec, 0xa9, 0x37, 0xbe, 0x37, 0x7b, 0xea, 0xcd, 0xef, 0xcd, 0x9e, 0xfa, 0xea, 0xf7, 0x66, + 0x15, 0xf8, 0xee, 0x0a, 0x3c, 0x22, 0x7d, 0x93, 0x0c, 0x77, 0x03, 0x57, 0xd8, 0xcf, 0x7f, 0xf9, + 0x03, 0x27, 0xfc, 0x42, 0xd9, 0xcc, 0x83, 0x7e, 0x7d, 0x2d, 0xf7, 0x6f, 0x87, 0x60, 0x84, 0x3d, + 0x06, 0x8e, 0xfa, 0x2d, 0xf3, 0xab, 0x90, 0x3a, 0x6a, 0x34, 0xcd, 0x4e, 0xc3, 0x3b, 0xa6, 0xcf, + 0x3f, 0x1f, 0x5e, 0x0c, 0xd4, 0x66, 0x4f, 0x4c, 0x9f, 0xeb, 0xb6, 0x9c, 0x6e, 0xc7, 0xf0, 0x45, + 0xf5, 0x73, 0x90, 0x39, 0xb2, 0x1a, 0x87, 0x47, 0x5e, 0xb5, 0x61, 0x57, 0x6b, 0x2d, 0xdc, 0x26, + 0x8f, 0x19, 0x40, 0xc6, 0xd6, 0xed, 0x52, 0x0b, 0x9d, 0xac, 0x6e, 0x7a, 0x26, 0xbe, 0x3d, 0xcf, + 0x18, 0xf8, 0xb3, 0x7e, 0x1e, 0x32, 0x1d, 0xcb, 0xed, 0x36, 0xbd, 0x6a, 0xcd, 0xe9, 0xda, 0x1e, + 0x6e, 0x64, 0x55, 0x23, 0x4d, 0xc6, 0x4a, 0x68, 0x48, 0x7f, 0x0c, 0xc6, 0xbc, 0x4e, 0xd7, 0xaa, + 0xba, 0x35, 0xc7, 0x73, 0x5b, 0xa6, 0x8d, 0x1b, 0xd9, 0x94, 0x91, 0x41, 0x83, 0x3b, 0x74, 0x0c, + 0xff, 0x0c, 0x7e, 0xcd, 0xe9, 0x58, 0xf8, 0x3e, 0x3a, 0x61, 0x90, 0x03, 0x5d, 0x03, 0xf5, 0x65, + 0xeb, 0x18, 0xdf, 0xa9, 0x25, 0x0d, 0xf4, 0x51, 0x7f, 0x12, 0x86, 0xc9, 0xdf, 0xb1, 0xc1, 0x6d, + 0x35, 0xde, 0xb5, 0xf6, 0x2f, 0x8d, 0x3c, 0x9d, 0x35, 0xa8, 0x80, 0x7e, 0x13, 0x46, 0x3c, 0xab, + 0xd3, 0x31, 0x1b, 0x36, 0xbe, 0x6b, 0x4a, 0x2f, 0xcf, 0x45, 0x98, 0x61, 0x97, 0x48, 0xe0, 0x9f, + 0x03, 0x36, 0x98, 0xbc, 0x7e, 0x15, 0x32, 0x58, 0x6e, 0xb9, 0x4a, 0xfe, 0xd6, 0x4f, 0xba, 0x67, + 0x20, 0xa7, 0x89, 0x1c, 0xdb, 0x24, 0x60, 0x30, 0xf2, 0x53, 0x88, 0x63, 0xf8, 0xb4, 0x8f, 0x45, + 0x9c, 0x16, 0xd7, 0xdc, 0x65, 0xdc, 0x2f, 0x92, 0x53, 0x53, 0x1e, 0xf2, 0x63, 0x89, 0x9b, 0x90, + 0xe1, 0xf5, 0x62, 0x66, 0x20, 0x7d, 0x0f, 0x36, 0xc3, 0x13, 0xc1, 0xdf, 0x51, 0xe8, 0x61, 0x05, + 0x32, 0x9f, 0x4f, 0xdc, 0x50, 0x66, 0xb6, 0x41, 0x93, 0xcf, 0x17, 0x41, 0x79, 0x51, 0xa4, 0xd4, + 0xf8, 0x8b, 0xc5, 0x8f, 0xc8, 0x03, 0xc6, 0xdc, 0xb3, 0x30, 0x4c, 0xe2, 0x47, 0x4f, 0xc3, 0x48, + 0xf0, 0x2b, 0x9b, 0x29, 0x48, 0x6e, 0xef, 0x55, 0x76, 0xc8, 0xcf, 0xe5, 0xee, 0x6c, 0x14, 0xb6, + 0x77, 0x76, 0xd7, 0x4b, 0x1f, 0xd7, 0x12, 0xfa, 0x04, 0xa4, 0x8b, 0xeb, 0x1b, 0x1b, 0xd5, 0x62, + 0x61, 0x7d, 0xa3, 0x7c, 0x57, 0x53, 0x73, 0xb3, 0x30, 0x4c, 0xf4, 0xc4, 0x3f, 0xfb, 0xd7, 0xb5, + 0xed, 0x63, 0xd6, 0x37, 0xe0, 0x83, 0xdc, 0xd7, 0x75, 0x18, 0x29, 0x34, 0x9b, 0x9b, 0x66, 0xdb, + 0xd5, 0x9f, 0x87, 0x49, 0xf2, 0x83, 0x1c, 0xbb, 0xce, 0x2a, 0xfe, 0x75, 0x4a, 0x54, 0x15, 0x14, + 0xfa, 0xf7, 0x23, 0x82, 0xeb, 0xa6, 0xe2, 0x8b, 0x21, 0x59, 0x62, 0xe0, 0x30, 0x87, 0xbe, 0x0b, + 0x1a, 0x1b, 0x5c, 0x6b, 0x3a, 0xa6, 0x87, 0x78, 0x13, 0xf4, 0xc7, 0x23, 0x7b, 0xf3, 0x32, 0x51, + 0x42, 0x1b, 0x62, 0xd0, 0x3f, 0x06, 0xa9, 0x75, 0xdb, 0xbb, 0xb2, 0x8c, 0xd8, 0xd8, 0xdf, 0x66, + 0x0a, 0xb3, 0x31, 0x11, 0xc2, 0xe2, 0x23, 0x28, 0xfa, 0xda, 0x0a, 0x42, 0x27, 0xfb, 0xa1, 0xb1, + 0x48, 0x80, 0xc6, 0x87, 0xfa, 0xb3, 0x30, 0x8a, 0x6e, 0x4b, 0xc8, 0xc9, 0x87, 0x58, 0xcf, 0x1a, + 0x82, 0xfb, 0x32, 0x04, 0x1f, 0x60, 0x18, 0x01, 0x39, 0xff, 0x70, 0x5f, 0x02, 0x4e, 0x81, 0x00, + 0x83, 0x08, 0x76, 0x7c, 0x0d, 0x46, 0x7a, 0x12, 0xec, 0x48, 0x1a, 0xec, 0xf0, 0x1a, 0xec, 0xf8, + 0x1a, 0xa4, 0xfa, 0x12, 0xf0, 0x1a, 0xf8, 0xc7, 0x7a, 0x11, 0x60, 0xad, 0xf1, 0x9a, 0x55, 0x27, + 0x2a, 0x90, 0xbf, 0xdc, 0x94, 0x8b, 0x60, 0x08, 0x84, 0x08, 0x05, 0x87, 0xd2, 0xcb, 0x90, 0xde, + 0x39, 0x08, 0x48, 0x20, 0x94, 0xc7, 0xbe, 0x1a, 0x07, 0x12, 0x0b, 0x8f, 0xf3, 0x55, 0x21, 0x17, + 0x93, 0xee, 0xaf, 0x0a, 0x77, 0x35, 0x1c, 0x2a, 0x50, 0x85, 0x90, 0x64, 0x62, 0x54, 0xe1, 0x58, + 0x78, 0x1c, 0x2a, 0x86, 0x45, 0xc7, 0x41, 0x92, 0xb4, 0x2a, 0xcd, 0x45, 0x50, 0x50, 0x09, 0x5a, + 0x0c, 0xe9, 0x11, 0xf6, 0x08, 0x0e, 0x72, 0x04, 0x1e, 0xef, 0xed, 0x11, 0x26, 0xc3, 0x3c, 0xc2, + 0x8e, 0xf9, 0x3c, 0xc3, 0xaf, 0xb2, 0x22, 0x9e, 0x89, 0xd8, 0x3c, 0x63, 0xa2, 0x52, 0x9e, 0xb1, + 0x61, 0xfd, 0x13, 0x30, 0xc1, 0xc6, 0x50, 0x79, 0x42, 0xa4, 0x1a, 0xfd, 0xdb, 0x76, 0xbd, 0x49, + 0xa9, 0x24, 0xe1, 0x94, 0xf1, 0x7a, 0x05, 0xc6, 0xd9, 0xd0, 0xa6, 0x8b, 0x2f, 0x77, 0x92, 0xfe, + 0xd9, 0x92, 0xde, 0x8c, 0x44, 0x90, 0x10, 0x4a, 0xe8, 0x99, 0x55, 0x98, 0x8e, 0xae, 0x46, 0x7c, + 0xf9, 0x1d, 0x25, 0xe5, 0xf7, 0x34, 0x5f, 0x7e, 0x15, 0xbe, 0x7c, 0x97, 0xe0, 0x4c, 0x64, 0xed, + 0x89, 0x23, 0x49, 0xf0, 0x24, 0xb7, 0x60, 0x4c, 0x28, 0x39, 0x3c, 0x78, 0x28, 0x02, 0x3c, 0x14, + 0x06, 0x07, 0xa1, 0x15, 0xb1, 0x7a, 0x08, 0x60, 0x95, 0x07, 0x7f, 0x0c, 0xc6, 0xc5, 0x7a, 0xc3, + 0xa3, 0xc7, 0x22, 0xd0, 0x63, 0x11, 0xe8, 0xe8, 0x73, 0x27, 0x23, 0xd0, 0x49, 0x09, 0xbd, 0xd3, + 0xf3, 0xdc, 0x93, 0x11, 0xe8, 0xc9, 0x08, 0x74, 0xf4, 0xb9, 0xf5, 0x08, 0xb4, 0xce, 0xa3, 0x9f, + 0x86, 0x09, 0xa9, 0xc4, 0xf0, 0xf0, 0x91, 0x08, 0xf8, 0x08, 0x0f, 0x7f, 0x06, 0x34, 0xb9, 0xb8, + 0xf0, 0xf8, 0x89, 0x08, 0xfc, 0x44, 0xd4, 0xe9, 0xa3, 0xb5, 0x1f, 0x8e, 0x80, 0x0f, 0x47, 0x9e, + 0x3e, 0x1a, 0xaf, 0x45, 0xe0, 0x35, 0x1e, 0x9f, 0x87, 0x0c, 0x5f, 0x4d, 0x78, 0x6c, 0x2a, 0x02, + 0x9b, 0x92, 0xed, 0x2e, 0x14, 0x93, 0xb8, 0x48, 0x1f, 0xed, 0x91, 0x2e, 0x42, 0x09, 0x89, 0x23, + 0xc9, 0xf0, 0x24, 0x9f, 0x84, 0xd3, 0x51, 0x25, 0x23, 0x82, 0x63, 0x9e, 0xe7, 0x18, 0x47, 0x3d, + 0x62, 0xd0, 0xec, 0x99, 0x6d, 0xa9, 0x71, 0x9a, 0x79, 0x11, 0xa6, 0x22, 0x0a, 0x47, 0x04, 0xed, + 0xa2, 0xd8, 0x8d, 0x65, 0x39, 0x5a, 0x5c, 0x04, 0x1a, 0xf6, 0xe1, 0xb6, 0xd3, 0xb0, 0x3d, 0xbe, + 0x2b, 0xfb, 0xc6, 0x14, 0x8c, 0xd3, 0xf2, 0xb4, 0xd5, 0xa9, 0x5b, 0x1d, 0xab, 0xae, 0xff, 0x85, + 0xde, 0xbd, 0xd3, 0x52, 0xb8, 0xa8, 0x51, 0xd4, 0x09, 0x5a, 0xa8, 0x17, 0x7b, 0xb6, 0x50, 0x97, + 0xe2, 0xe9, 0xe3, 0x3a, 0xa9, 0x52, 0xa8, 0x93, 0x7a, 0xa2, 0x37, 0x69, 0xaf, 0x86, 0xaa, 0x14, + 0x6a, 0xa8, 0xfa, 0x93, 0x44, 0xf6, 0x55, 0x6b, 0xe1, 0xbe, 0x6a, 0xbe, 0x37, 0x4b, 0xef, 0xf6, + 0x6a, 0x2d, 0xdc, 0x5e, 0xc5, 0xf0, 0x44, 0x77, 0x59, 0x6b, 0xe1, 0x2e, 0xab, 0x0f, 0x4f, 0xef, + 0x66, 0x6b, 0x2d, 0xdc, 0x6c, 0xc5, 0xf0, 0x44, 0xf7, 0x5c, 0xeb, 0x11, 0x3d, 0xd7, 0x93, 0xbd, + 0x89, 0xfa, 0xb5, 0x5e, 0x1b, 0x51, 0xad, 0xd7, 0x42, 0x1f, 0xa5, 0xfa, 0x76, 0x60, 0xeb, 0x11, + 0x1d, 0x58, 0x9c, 0x62, 0x3d, 0x1a, 0xb1, 0x8d, 0xa8, 0x46, 0x2c, 0x56, 0xb1, 0x5e, 0xfd, 0xd8, + 0xcf, 0xc9, 0xfd, 0xd8, 0xc5, 0xde, 0x4c, 0xd1, 0x6d, 0xd9, 0x5a, 0xb8, 0x2d, 0x9b, 0x8f, 0xcb, + 0xb9, 0xa8, 0xee, 0xec, 0xc5, 0x9e, 0xdd, 0xd9, 0x00, 0x29, 0x1c, 0xd7, 0xa4, 0xbd, 0xd0, 0xab, + 0x49, 0x5b, 0x8c, 0xe7, 0xee, 0xdf, 0xab, 0xed, 0xf5, 0xe8, 0xd5, 0x9e, 0x8a, 0x27, 0xfe, 0xb0, + 0x65, 0xfb, 0xb0, 0x65, 0xfb, 0xb0, 0x65, 0xfb, 0xb0, 0x65, 0xfb, 0xd9, 0xb7, 0x6c, 0xf9, 0xe4, + 0x67, 0xbf, 0x3c, 0xa7, 0xe4, 0xfe, 0xb3, 0xea, 0xff, 0xa5, 0xb5, 0xe7, 0x1b, 0xde, 0x11, 0x2a, + 0x6f, 0x9b, 0x90, 0xc1, 0xbf, 0xfc, 0xdb, 0x32, 0xdb, 0xed, 0x86, 0x7d, 0x48, 0x7b, 0xb6, 0x85, + 0xf0, 0xa3, 0x44, 0x0a, 0xc0, 0x7f, 0x65, 0x66, 0x93, 0x08, 0xd3, 0xe5, 0xc6, 0x0e, 0x46, 0xf4, + 0x3b, 0x90, 0x6e, 0xb9, 0x87, 0x3e, 0x5b, 0x22, 0xb4, 0x10, 0x4a, 0x6c, 0xe4, 0x4a, 0x03, 0x32, + 0x68, 0xf9, 0x03, 0x48, 0xb5, 0xfd, 0x63, 0x2f, 0x50, 0x4d, 0x8d, 0x53, 0x0d, 0xf9, 0x54, 0x54, + 0x6d, 0x3f, 0x18, 0x41, 0x61, 0x2b, 0xeb, 0x1e, 0x57, 0xe9, 0x84, 0xe0, 0x79, 0x1e, 0x26, 0x24, + 0x6d, 0x23, 0x72, 0xfe, 0x01, 0x7c, 0x83, 0x14, 0x93, 0x35, 0x8f, 0xcb, 0x09, 0x3e, 0x20, 0x73, + 0x8f, 0xc2, 0x98, 0xc0, 0xad, 0x67, 0x40, 0x39, 0xa0, 0xdf, 0xa3, 0x54, 0x0e, 0x72, 0x5f, 0x52, + 0x20, 0x4d, 0xdf, 0x21, 0xd8, 0x36, 0x1b, 0x1d, 0xfd, 0x39, 0x48, 0x36, 0xd9, 0x77, 0x99, 0x1e, + 0xf4, 0x7b, 0xb3, 0x98, 0x41, 0x5f, 0x83, 0xa1, 0x8e, 0xff, 0x5d, 0xa7, 0x07, 0xfa, 0x32, 0x2c, + 0x86, 0xe7, 0xee, 0x29, 0x30, 0x49, 0x5f, 0x71, 0x75, 0xe9, 0x9b, 0xcf, 0x66, 0x7b, 0xe6, 0xeb, + 0x0a, 0x8c, 0xfa, 0x47, 0xfa, 0x3e, 0x8c, 0xfb, 0x07, 0xe4, 0xed, 0x7a, 0x12, 0xa9, 0x79, 0xce, + 0xc2, 0x21, 0x8e, 0xc5, 0x88, 0x4f, 0x64, 0x17, 0x8a, 0xac, 0xc9, 0xe2, 0xe0, 0x4c, 0x01, 0xa6, + 0x22, 0xc4, 0x4e, 0xb2, 0x20, 0xe7, 0xce, 0xc3, 0x68, 0xc5, 0xf1, 0xc8, 0x4f, 0xe6, 0xe8, 0xa7, + 0xb9, 0x5d, 0x85, 0x62, 0x42, 0x3b, 0x85, 0xc1, 0x0b, 0xe7, 0x61, 0x84, 0x66, 0xbf, 0x3e, 0x0c, + 0x89, 0xcd, 0x82, 0x76, 0x0a, 0xff, 0x5f, 0xd4, 0x14, 0xfc, 0x7f, 0x49, 0x4b, 0x14, 0x37, 0xde, + 0xcf, 0x2d, 0xa6, 0xfd, 0x61, 0x62, 0x9e, 0x3f, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x06, 0x49, 0x4e, + 0x37, 0x66, 0x83, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -5339,6 +5344,9 @@ return dAtA } func (m *Message) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -5412,6 +5420,9 @@ } func (m *Nested) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Bunny) @@ -5425,6 +5436,9 @@ } func (m *AllMaps) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -5579,6 +5593,9 @@ } func (m *AllMapsOrdered) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -5733,6 +5750,9 @@ } func (m *MessageWithMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NameMapping) > 0 { @@ -5775,6 +5795,9 @@ } func (m *FloatingPoint) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F != 0 { @@ -5787,6 +5810,9 @@ } func (m *Uint128Pair) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -5802,6 +5828,9 @@ } func (m *ContainsNestedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -5811,6 +5840,9 @@ } func (m *ContainsNestedMap_NestedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NestedMapField) > 0 { @@ -5828,6 +5860,9 @@ } func (m *NotPacked) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Key) > 0 { @@ -6585,6 +6620,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Key) == 0 { + m.Key = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -11314,6 +11360,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Key) == 0 { + m.Key = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/combos/marshaler/theproto3.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/combos/marshaler/theproto3.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/combos/marshaler/theproto3.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/combos/marshaler/theproto3.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -603,506 +603,511 @@ func Theproto3Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 7981 bytes of a gzipped FileDescriptorSet + // 8063 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x70, 0x23, 0xd7, 0x99, 0x1e, 0x1b, 0x0d, 0x90, 0xe0, 0x0f, 0x90, 0x6c, 0x36, 0x67, 0x28, 0x88, 0x1a, 0x91, 0x1c, 0x68, 0x34, 0xa2, 0x68, 0x8b, 0xc3, 0xe1, 0x70, 0x6e, 0x18, 0x4b, 0x5a, 0x00, 0x04, 0x47, 0x1c, 0x93, 0x20, 0xdd, 0x24, 0x2d, 0x8d, 0x95, 0x04, 0xd5, 0x04, 0x0e, 0x49, 0x48, 0x40, 0x37, 0x16, 0xdd, 0x90, 0x44, 0x55, 0x2a, 0xa5, 0xac, 0x93, 0x8d, 0x37, 0xa9, 0x5c, 0x37, 0xa9, 0x78, 0x1d, - 0x5f, 0xe4, 0xa4, 0x1c, 0x7b, 0x37, 0x37, 0xaf, 0x77, 0xe3, 0xec, 0x6e, 0xa5, 0xb2, 0xca, 0x83, - 0x93, 0xc9, 0x4b, 0xca, 0x9b, 0xbc, 0xa4, 0x5c, 0x29, 0x95, 0x35, 0xf6, 0x56, 0x9c, 0xc4, 0xc9, - 0x3a, 0x1b, 0x57, 0xc5, 0x55, 0xde, 0x87, 0xd4, 0xb9, 0x75, 0x9f, 0xd3, 0x68, 0xa0, 0xc1, 0x19, - 0xc9, 0xde, 0x07, 0xbd, 0xcc, 0xa0, 0xcf, 0xf9, 0xbf, 0xaf, 0xff, 0xfe, 0x6f, 0xe7, 0xef, 0x3e, - 0x0d, 0x10, 0xfe, 0xe8, 0x26, 0xcc, 0x1f, 0xd9, 0xf6, 0x51, 0x03, 0x5d, 0x6a, 0xb5, 0x6d, 0xd7, - 0x3e, 0xe8, 0x1c, 0x5e, 0xaa, 0x21, 0xa7, 0xda, 0xae, 0xb7, 0x5c, 0xbb, 0xbd, 0x44, 0xc6, 0xf4, - 0x09, 0x2a, 0xb1, 0xc4, 0x25, 0xb2, 0x5b, 0x30, 0xb9, 0x5e, 0x6f, 0xa0, 0x35, 0x4f, 0x70, 0x17, - 0xb9, 0xfa, 0x0d, 0x88, 0x1f, 0xd6, 0x1b, 0x28, 0xa3, 0xcc, 0xab, 0x0b, 0xa9, 0x95, 0x0b, 0x4b, - 0x01, 0xd0, 0x92, 0x8c, 0xd8, 0xc1, 0xc3, 0x06, 0x41, 0x64, 0xbf, 0x1f, 0x87, 0xa9, 0x90, 0x59, - 0x5d, 0x87, 0xb8, 0x65, 0x36, 0x31, 0xa3, 0xb2, 0x30, 0x6a, 0x90, 0xcf, 0x7a, 0x06, 0x46, 0x5a, - 0x66, 0xf5, 0x55, 0xf3, 0x08, 0x65, 0x62, 0x64, 0x98, 0x1f, 0xea, 0xb3, 0x00, 0x35, 0xd4, 0x42, - 0x56, 0x0d, 0x59, 0xd5, 0x93, 0x8c, 0x3a, 0xaf, 0x2e, 0x8c, 0x1a, 0xc2, 0x88, 0xfe, 0x11, 0x98, - 0x6c, 0x75, 0x0e, 0x1a, 0xf5, 0x6a, 0x45, 0x10, 0x83, 0x79, 0x75, 0x21, 0x61, 0x68, 0x74, 0x62, - 0xcd, 0x17, 0x7e, 0x0a, 0x26, 0x5e, 0x47, 0xe6, 0xab, 0xa2, 0x68, 0x8a, 0x88, 0x8e, 0xe3, 0x61, - 0x41, 0xb0, 0x08, 0xe9, 0x26, 0x72, 0x1c, 0xf3, 0x08, 0x55, 0xdc, 0x93, 0x16, 0xca, 0xc4, 0xc9, - 0xd5, 0xcf, 0x77, 0x5d, 0x7d, 0xf0, 0xca, 0x53, 0x0c, 0xb5, 0x77, 0xd2, 0x42, 0x7a, 0x1e, 0x46, - 0x91, 0xd5, 0x69, 0x52, 0x86, 0x44, 0x0f, 0xfb, 0x95, 0xac, 0x4e, 0x33, 0xc8, 0x92, 0xc4, 0x30, - 0x46, 0x31, 0xe2, 0xa0, 0xf6, 0x6b, 0xf5, 0x2a, 0xca, 0x0c, 0x13, 0x82, 0xa7, 0xba, 0x08, 0x76, - 0xe9, 0x7c, 0x90, 0x83, 0xe3, 0xf4, 0x22, 0x8c, 0xa2, 0x37, 0x5c, 0x64, 0x39, 0x75, 0xdb, 0xca, - 0x8c, 0x10, 0x92, 0x27, 0x43, 0xbc, 0x88, 0x1a, 0xb5, 0x20, 0x85, 0x8f, 0xd3, 0xaf, 0xc1, 0x88, - 0xdd, 0x72, 0xeb, 0xb6, 0xe5, 0x64, 0x92, 0xf3, 0xca, 0x42, 0x6a, 0xe5, 0x5c, 0x68, 0x20, 0x6c, - 0x53, 0x19, 0x83, 0x0b, 0xeb, 0x1b, 0xa0, 0x39, 0x76, 0xa7, 0x5d, 0x45, 0x95, 0xaa, 0x5d, 0x43, - 0x95, 0xba, 0x75, 0x68, 0x67, 0x46, 0x09, 0xc1, 0x5c, 0xf7, 0x85, 0x10, 0xc1, 0xa2, 0x5d, 0x43, - 0x1b, 0xd6, 0xa1, 0x6d, 0x8c, 0x3b, 0xd2, 0xb1, 0x3e, 0x0d, 0xc3, 0xce, 0x89, 0xe5, 0x9a, 0x6f, - 0x64, 0xd2, 0x24, 0x42, 0xd8, 0x51, 0xf6, 0x77, 0x87, 0x61, 0x62, 0x90, 0x10, 0xbb, 0x05, 0x89, - 0x43, 0x7c, 0x95, 0x99, 0xd8, 0x69, 0x6c, 0x40, 0x31, 0xb2, 0x11, 0x87, 0x1f, 0xd0, 0x88, 0x79, - 0x48, 0x59, 0xc8, 0x71, 0x51, 0x8d, 0x46, 0x84, 0x3a, 0x60, 0x4c, 0x01, 0x05, 0x75, 0x87, 0x54, - 0xfc, 0x81, 0x42, 0xea, 0x25, 0x98, 0xf0, 0x54, 0xaa, 0xb4, 0x4d, 0xeb, 0x88, 0xc7, 0xe6, 0xa5, - 0x28, 0x4d, 0x96, 0x4a, 0x1c, 0x67, 0x60, 0x98, 0x31, 0x8e, 0xa4, 0x63, 0x7d, 0x0d, 0xc0, 0xb6, + 0x5f, 0xe4, 0xdd, 0xda, 0xb5, 0x77, 0x73, 0xf3, 0x7a, 0x37, 0xce, 0xae, 0x93, 0xca, 0x2a, 0x0f, + 0x4e, 0x26, 0x2f, 0x29, 0x6f, 0xf2, 0x92, 0x72, 0xa5, 0x54, 0xd6, 0xd8, 0x5b, 0x71, 0x12, 0x27, + 0xeb, 0x6c, 0x54, 0x15, 0x57, 0x79, 0x1f, 0x52, 0xe7, 0xd6, 0x7d, 0xfa, 0xa0, 0x81, 0x06, 0x47, + 0x92, 0xbd, 0x0f, 0x7a, 0x99, 0x41, 0x9f, 0xf3, 0x7f, 0x5f, 0xff, 0xfd, 0xdf, 0xce, 0xdf, 0x7d, + 0x1a, 0x20, 0xfc, 0xf1, 0x4d, 0x98, 0x3f, 0xb2, 0xed, 0xa3, 0x06, 0xba, 0xd4, 0x6a, 0xdb, 0xae, + 0x7d, 0xd0, 0x39, 0xbc, 0x54, 0x43, 0x4e, 0xb5, 0x5d, 0x6f, 0xb9, 0x76, 0x7b, 0x89, 0x8c, 0xe9, + 0x13, 0x54, 0x62, 0x89, 0x4b, 0x64, 0xb7, 0x60, 0x72, 0xbd, 0xde, 0x40, 0x6b, 0x9e, 0xe0, 0x2e, + 0x72, 0xf5, 0x1b, 0x10, 0x3f, 0xac, 0x37, 0x50, 0x46, 0x99, 0x57, 0x17, 0x52, 0x2b, 0x17, 0x96, + 0x24, 0xd0, 0x52, 0x10, 0xb1, 0x83, 0x87, 0x0d, 0x82, 0xc8, 0x7e, 0x3f, 0x0e, 0x53, 0x21, 0xb3, + 0xba, 0x0e, 0x71, 0xcb, 0x6c, 0x62, 0x46, 0x65, 0x61, 0xd4, 0x20, 0x9f, 0xf5, 0x0c, 0x8c, 0xb4, + 0xcc, 0xea, 0xcb, 0xe6, 0x11, 0xca, 0xc4, 0xc8, 0x30, 0x3f, 0xd4, 0x67, 0x01, 0x6a, 0xa8, 0x85, + 0xac, 0x1a, 0xb2, 0xaa, 0x27, 0x19, 0x75, 0x5e, 0x5d, 0x18, 0x35, 0x84, 0x11, 0xfd, 0x23, 0x30, + 0xd9, 0xea, 0x1c, 0x34, 0xea, 0xd5, 0x8a, 0x20, 0x06, 0xf3, 0xea, 0x42, 0xc2, 0xd0, 0xe8, 0xc4, + 0x9a, 0x2f, 0xfc, 0x04, 0x4c, 0xbc, 0x8a, 0xcc, 0x97, 0x45, 0xd1, 0x14, 0x11, 0x1d, 0xc7, 0xc3, + 0x82, 0x60, 0x11, 0xd2, 0x4d, 0xe4, 0x38, 0xe6, 0x11, 0xaa, 0xb8, 0x27, 0x2d, 0x94, 0x89, 0x93, + 0xab, 0x9f, 0xef, 0xba, 0x7a, 0xf9, 0xca, 0x53, 0x0c, 0xb5, 0x77, 0xd2, 0x42, 0x7a, 0x1e, 0x46, + 0x91, 0xd5, 0x69, 0x52, 0x86, 0x44, 0x0f, 0xfb, 0x95, 0xac, 0x4e, 0x53, 0x66, 0x49, 0x62, 0x18, + 0xa3, 0x18, 0x71, 0x50, 0xfb, 0x95, 0x7a, 0x15, 0x65, 0x86, 0x09, 0xc1, 0x13, 0x5d, 0x04, 0xbb, + 0x74, 0x5e, 0xe6, 0xe0, 0x38, 0xbd, 0x08, 0xa3, 0xe8, 0x35, 0x17, 0x59, 0x4e, 0xdd, 0xb6, 0x32, + 0x23, 0x84, 0xe4, 0xf1, 0x10, 0x2f, 0xa2, 0x46, 0x4d, 0xa6, 0xf0, 0x71, 0xfa, 0x35, 0x18, 0xb1, + 0x5b, 0x6e, 0xdd, 0xb6, 0x9c, 0x4c, 0x72, 0x5e, 0x59, 0x48, 0xad, 0x9c, 0x0b, 0x0d, 0x84, 0x6d, + 0x2a, 0x63, 0x70, 0x61, 0x7d, 0x03, 0x34, 0xc7, 0xee, 0xb4, 0xab, 0xa8, 0x52, 0xb5, 0x6b, 0xa8, + 0x52, 0xb7, 0x0e, 0xed, 0xcc, 0x28, 0x21, 0x98, 0xeb, 0xbe, 0x10, 0x22, 0x58, 0xb4, 0x6b, 0x68, + 0xc3, 0x3a, 0xb4, 0x8d, 0x71, 0x27, 0x70, 0xac, 0x4f, 0xc3, 0xb0, 0x73, 0x62, 0xb9, 0xe6, 0x6b, + 0x99, 0x34, 0x89, 0x10, 0x76, 0x94, 0xfd, 0xfd, 0x61, 0x98, 0x18, 0x24, 0xc4, 0x6e, 0x41, 0xe2, + 0x10, 0x5f, 0x65, 0x26, 0x76, 0x1a, 0x1b, 0x50, 0x4c, 0xd0, 0x88, 0xc3, 0x0f, 0x68, 0xc4, 0x3c, + 0xa4, 0x2c, 0xe4, 0xb8, 0xa8, 0x46, 0x23, 0x42, 0x1d, 0x30, 0xa6, 0x80, 0x82, 0xba, 0x43, 0x2a, + 0xfe, 0x40, 0x21, 0xf5, 0x02, 0x4c, 0x78, 0x2a, 0x55, 0xda, 0xa6, 0x75, 0xc4, 0x63, 0xf3, 0x52, + 0x94, 0x26, 0x4b, 0x25, 0x8e, 0x33, 0x30, 0xcc, 0x18, 0x47, 0x81, 0x63, 0x7d, 0x0d, 0xc0, 0xb6, 0x90, 0x7d, 0x58, 0xa9, 0xa1, 0x6a, 0x23, 0x93, 0xec, 0x61, 0xa5, 0x6d, 0x2c, 0xd2, 0x65, 0x25, 0x9b, 0x8e, 0x56, 0x1b, 0xfa, 0x4d, 0x3f, 0xd4, 0x46, 0x7a, 0x44, 0xca, 0x16, 0x4d, 0xb2, 0xae, 0x68, 0xdb, 0x87, 0xf1, 0x36, 0xc2, 0x71, 0x8f, 0x6a, 0xec, 0xca, 0x46, 0x89, 0x12, 0x4b, 0x91, - 0x57, 0x66, 0x30, 0x18, 0xbd, 0xb0, 0xb1, 0xb6, 0x78, 0xa8, 0x3f, 0x01, 0xde, 0x40, 0x85, 0x84, - 0x15, 0x90, 0x2a, 0x94, 0xe6, 0x83, 0x65, 0xb3, 0x89, 0x66, 0xde, 0x84, 0x71, 0xd9, 0x3c, 0xfa, - 0x19, 0x48, 0x38, 0xae, 0xd9, 0x76, 0x49, 0x14, 0x26, 0x0c, 0x7a, 0xa0, 0x6b, 0xa0, 0x22, 0xab, - 0x46, 0xaa, 0x5c, 0xc2, 0xc0, 0x1f, 0xf5, 0x5f, 0xf0, 0x2f, 0x58, 0x25, 0x17, 0x7c, 0xb1, 0xdb, - 0xa3, 0x12, 0x73, 0xf0, 0xba, 0x67, 0xae, 0xc3, 0x98, 0x74, 0x01, 0x83, 0x9e, 0x3a, 0xfb, 0xe7, - 0xe1, 0x6c, 0x28, 0xb5, 0xfe, 0x12, 0x9c, 0xe9, 0x58, 0x75, 0xcb, 0x45, 0xed, 0x56, 0x1b, 0xe1, - 0x88, 0xa5, 0xa7, 0xca, 0xfc, 0xb7, 0x91, 0x1e, 0x31, 0xb7, 0x2f, 0x4a, 0x53, 0x16, 0x63, 0xaa, - 0xd3, 0x3d, 0xb8, 0x38, 0x9a, 0xfc, 0xc1, 0x88, 0xf6, 0xd6, 0x5b, 0x6f, 0xbd, 0x15, 0xcb, 0x7e, - 0x76, 0x18, 0xce, 0x84, 0xe5, 0x4c, 0x68, 0xfa, 0x4e, 0xc3, 0xb0, 0xd5, 0x69, 0x1e, 0xa0, 0x36, - 0x31, 0x52, 0xc2, 0x60, 0x47, 0x7a, 0x1e, 0x12, 0x0d, 0xf3, 0x00, 0x35, 0x32, 0xf1, 0x79, 0x65, - 0x61, 0x7c, 0xe5, 0x23, 0x03, 0x65, 0xe5, 0xd2, 0x26, 0x86, 0x18, 0x14, 0xa9, 0x3f, 0x07, 0x71, - 0x56, 0xa2, 0x31, 0xc3, 0xe2, 0x60, 0x0c, 0x38, 0x97, 0x0c, 0x82, 0xd3, 0x1f, 0x83, 0x51, 0xfc, - 0x3f, 0x8d, 0x8d, 0x61, 0xa2, 0x73, 0x12, 0x0f, 0xe0, 0xb8, 0xd0, 0x67, 0x20, 0x49, 0xd2, 0xa4, - 0x86, 0xf8, 0xd2, 0xe6, 0x1d, 0xe3, 0xc0, 0xaa, 0xa1, 0x43, 0xb3, 0xd3, 0x70, 0x2b, 0xaf, 0x99, - 0x8d, 0x0e, 0x22, 0x01, 0x3f, 0x6a, 0xa4, 0xd9, 0xe0, 0x27, 0xf1, 0x98, 0x3e, 0x07, 0x29, 0x9a, - 0x55, 0x75, 0xab, 0x86, 0xde, 0x20, 0xd5, 0x33, 0x61, 0xd0, 0x44, 0xdb, 0xc0, 0x23, 0xf8, 0xf4, - 0xaf, 0x38, 0xb6, 0xc5, 0x43, 0x93, 0x9c, 0x02, 0x0f, 0x90, 0xd3, 0x5f, 0x0f, 0x16, 0xee, 0xc7, - 0xc3, 0x2f, 0x2f, 0x18, 0x53, 0xd9, 0x6f, 0xc6, 0x20, 0x4e, 0xea, 0xc5, 0x04, 0xa4, 0xf6, 0xee, + 0x57, 0x66, 0x30, 0x18, 0xbd, 0xb0, 0xb1, 0xb6, 0x78, 0xa8, 0x3f, 0x06, 0xde, 0x40, 0x85, 0x84, + 0x15, 0x90, 0x2a, 0x94, 0xe6, 0x83, 0x65, 0xb3, 0x89, 0x66, 0x5e, 0x87, 0xf1, 0xa0, 0x79, 0xf4, + 0x33, 0x90, 0x70, 0x5c, 0xb3, 0xed, 0x92, 0x28, 0x4c, 0x18, 0xf4, 0x40, 0xd7, 0x40, 0x45, 0x56, + 0x8d, 0x54, 0xb9, 0x84, 0x81, 0x3f, 0xea, 0x3f, 0xe7, 0x5f, 0xb0, 0x4a, 0x2e, 0xf8, 0x62, 0xb7, + 0x47, 0x03, 0xcc, 0xf2, 0x75, 0xcf, 0x5c, 0x87, 0xb1, 0xc0, 0x05, 0x0c, 0x7a, 0xea, 0xec, 0x5f, + 0x84, 0xb3, 0xa1, 0xd4, 0xfa, 0x0b, 0x70, 0xa6, 0x63, 0xd5, 0x2d, 0x17, 0xb5, 0x5b, 0x6d, 0x84, + 0x23, 0x96, 0x9e, 0x2a, 0xf3, 0xdf, 0x46, 0x7a, 0xc4, 0xdc, 0xbe, 0x28, 0x4d, 0x59, 0x8c, 0xa9, + 0x4e, 0xf7, 0xe0, 0xe2, 0x68, 0xf2, 0x07, 0x23, 0xda, 0x1b, 0x6f, 0xbc, 0xf1, 0x46, 0x2c, 0xfb, + 0xd9, 0x61, 0x38, 0x13, 0x96, 0x33, 0xa1, 0xe9, 0x3b, 0x0d, 0xc3, 0x56, 0xa7, 0x79, 0x80, 0xda, + 0xc4, 0x48, 0x09, 0x83, 0x1d, 0xe9, 0x79, 0x48, 0x34, 0xcc, 0x03, 0xd4, 0xc8, 0xc4, 0xe7, 0x95, + 0x85, 0xf1, 0x95, 0x8f, 0x0c, 0x94, 0x95, 0x4b, 0x9b, 0x18, 0x62, 0x50, 0xa4, 0xfe, 0x0c, 0xc4, + 0x59, 0x89, 0xc6, 0x0c, 0x8b, 0x83, 0x31, 0xe0, 0x5c, 0x32, 0x08, 0x4e, 0x7f, 0x04, 0x46, 0xf1, + 0xff, 0x34, 0x36, 0x86, 0x89, 0xce, 0x49, 0x3c, 0x80, 0xe3, 0x42, 0x9f, 0x81, 0x24, 0x49, 0x93, + 0x1a, 0xe2, 0x4b, 0x9b, 0x77, 0x8c, 0x03, 0xab, 0x86, 0x0e, 0xcd, 0x4e, 0xc3, 0xad, 0xbc, 0x62, + 0x36, 0x3a, 0x88, 0x04, 0xfc, 0xa8, 0x91, 0x66, 0x83, 0x9f, 0xc4, 0x63, 0xfa, 0x1c, 0xa4, 0x68, + 0x56, 0xd5, 0xad, 0x1a, 0x7a, 0x8d, 0x54, 0xcf, 0x84, 0x41, 0x13, 0x6d, 0x03, 0x8f, 0xe0, 0xd3, + 0xbf, 0xe4, 0xd8, 0x16, 0x0f, 0x4d, 0x72, 0x0a, 0x3c, 0x40, 0x4e, 0x7f, 0x5d, 0x2e, 0xdc, 0x8f, + 0x86, 0x5f, 0x9e, 0x1c, 0x53, 0xd9, 0x6f, 0xc4, 0x20, 0x4e, 0xea, 0xc5, 0x04, 0xa4, 0xf6, 0xee, 0xee, 0x94, 0x2a, 0x6b, 0xdb, 0xfb, 0x85, 0xcd, 0x92, 0xa6, 0xe8, 0xe3, 0x00, 0x64, 0x60, 0x7d, 0x73, 0x3b, 0xbf, 0xa7, 0xc5, 0xbc, 0xe3, 0x8d, 0xf2, 0xde, 0xb5, 0x55, 0x4d, 0xf5, 0x00, 0xfb, - 0x74, 0x20, 0x2e, 0x0a, 0x5c, 0x59, 0xd1, 0x12, 0xba, 0x06, 0x69, 0x4a, 0xb0, 0xf1, 0x52, 0x69, - 0xed, 0xda, 0xaa, 0x36, 0x2c, 0x8f, 0x5c, 0x59, 0xd1, 0x46, 0xf4, 0x31, 0x18, 0x25, 0x23, 0x85, - 0xed, 0xed, 0x4d, 0x2d, 0xe9, 0x71, 0xee, 0xee, 0x19, 0x1b, 0xe5, 0xdb, 0xda, 0xa8, 0xc7, 0x79, - 0xdb, 0xd8, 0xde, 0xdf, 0xd1, 0xc0, 0x63, 0xd8, 0x2a, 0xed, 0xee, 0xe6, 0x6f, 0x97, 0xb4, 0x94, - 0x27, 0x51, 0xb8, 0xbb, 0x57, 0xda, 0xd5, 0xd2, 0x92, 0x5a, 0x57, 0x56, 0xb4, 0x31, 0xef, 0x14, - 0xa5, 0xf2, 0xfe, 0x96, 0x36, 0xae, 0x4f, 0xc2, 0x18, 0x3d, 0x05, 0x57, 0x62, 0x22, 0x30, 0x74, - 0x6d, 0x55, 0xd3, 0x7c, 0x45, 0x28, 0xcb, 0xa4, 0x34, 0x70, 0x6d, 0x55, 0xd3, 0xb3, 0x45, 0x48, - 0x90, 0xe8, 0xd2, 0x75, 0x18, 0xdf, 0xcc, 0x17, 0x4a, 0x9b, 0x95, 0xed, 0x9d, 0xbd, 0x8d, 0xed, - 0x72, 0x7e, 0x53, 0x53, 0xfc, 0x31, 0xa3, 0xf4, 0x89, 0xfd, 0x0d, 0xa3, 0xb4, 0xa6, 0xc5, 0xc4, - 0xb1, 0x9d, 0x52, 0x7e, 0xaf, 0xb4, 0xa6, 0xa9, 0xd9, 0x2a, 0x9c, 0x09, 0xab, 0x93, 0xa1, 0x99, - 0x21, 0xb8, 0x38, 0xd6, 0xc3, 0xc5, 0x84, 0xab, 0xcb, 0xc5, 0xdf, 0x8b, 0xc1, 0x54, 0xc8, 0x5a, - 0x11, 0x7a, 0x92, 0xe7, 0x21, 0x41, 0x43, 0x94, 0xae, 0x9e, 0x4f, 0x87, 0x2e, 0x3a, 0x24, 0x60, - 0xbb, 0x56, 0x50, 0x82, 0x13, 0x3b, 0x08, 0xb5, 0x47, 0x07, 0x81, 0x29, 0xba, 0x6a, 0xfa, 0x9f, - 0xed, 0xaa, 0xe9, 0x74, 0xd9, 0xbb, 0x36, 0xc8, 0xb2, 0x47, 0xc6, 0x4e, 0x57, 0xdb, 0x13, 0x21, - 0xb5, 0xfd, 0x16, 0x4c, 0x76, 0x11, 0x0d, 0x5c, 0x63, 0x3f, 0xad, 0x40, 0xa6, 0x97, 0x71, 0x22, - 0x2a, 0x5d, 0x4c, 0xaa, 0x74, 0xb7, 0x82, 0x16, 0x3c, 0xdf, 0xdb, 0x09, 0x5d, 0xbe, 0xfe, 0xaa, - 0x02, 0xd3, 0xe1, 0x9d, 0x62, 0xa8, 0x0e, 0xcf, 0xc1, 0x70, 0x13, 0xb9, 0xc7, 0x36, 0xef, 0x96, - 0x2e, 0x86, 0xac, 0xc1, 0x78, 0x3a, 0xe8, 0x6c, 0x86, 0x12, 0x17, 0x71, 0xb5, 0x57, 0xbb, 0x47, - 0xb5, 0xe9, 0xd2, 0xf4, 0x57, 0x62, 0x70, 0x36, 0x94, 0x3c, 0x54, 0xd1, 0xc7, 0x01, 0xea, 0x56, - 0xab, 0xe3, 0xd2, 0x8e, 0x88, 0x16, 0xd8, 0x51, 0x32, 0x42, 0x8a, 0x17, 0x2e, 0x9e, 0x1d, 0xd7, - 0x9b, 0x57, 0xc9, 0x3c, 0xd0, 0x21, 0x22, 0x70, 0xc3, 0x57, 0x34, 0x4e, 0x14, 0x9d, 0xed, 0x71, - 0xa5, 0x5d, 0x81, 0xb9, 0x0c, 0x5a, 0xb5, 0x51, 0x47, 0x96, 0x5b, 0x71, 0xdc, 0x36, 0x32, 0x9b, - 0x75, 0xeb, 0x88, 0xac, 0x20, 0xc9, 0x5c, 0xe2, 0xd0, 0x6c, 0x38, 0xc8, 0x98, 0xa0, 0xd3, 0xbb, - 0x7c, 0x16, 0x23, 0x48, 0x00, 0xb5, 0x05, 0xc4, 0xb0, 0x84, 0xa0, 0xd3, 0x1e, 0x22, 0xfb, 0x5b, - 0x49, 0x48, 0x09, 0x7d, 0xb5, 0x7e, 0x1e, 0xd2, 0xaf, 0x98, 0xaf, 0x99, 0x15, 0x7e, 0xaf, 0x44, - 0x2d, 0x91, 0xc2, 0x63, 0x3b, 0xec, 0x7e, 0x69, 0x19, 0xce, 0x10, 0x11, 0xbb, 0xe3, 0xa2, 0x76, - 0xa5, 0xda, 0x30, 0x1d, 0x87, 0x18, 0x2d, 0x49, 0x44, 0x75, 0x3c, 0xb7, 0x8d, 0xa7, 0x8a, 0x7c, - 0x46, 0xbf, 0x0a, 0x53, 0x04, 0xd1, 0xec, 0x34, 0xdc, 0x7a, 0xab, 0x81, 0x2a, 0xf8, 0xee, 0xcd, - 0x21, 0x2b, 0x89, 0xa7, 0xd9, 0x24, 0x96, 0xd8, 0x62, 0x02, 0x58, 0x23, 0x47, 0x5f, 0x83, 0xc7, - 0x09, 0xec, 0x08, 0x59, 0xa8, 0x6d, 0xba, 0xa8, 0x82, 0x7e, 0xb1, 0x63, 0x36, 0x9c, 0x8a, 0x69, - 0xd5, 0x2a, 0xc7, 0xa6, 0x73, 0x9c, 0x39, 0x83, 0x09, 0x0a, 0xb1, 0x8c, 0x62, 0x3c, 0x8a, 0x05, - 0x6f, 0x33, 0xb9, 0x12, 0x11, 0xcb, 0x5b, 0xb5, 0x17, 0x4c, 0xe7, 0x58, 0xcf, 0xc1, 0x34, 0x61, - 0x71, 0xdc, 0x76, 0xdd, 0x3a, 0xaa, 0x54, 0x8f, 0x51, 0xf5, 0xd5, 0x4a, 0xc7, 0x3d, 0xbc, 0x91, - 0x79, 0x4c, 0x3c, 0x3f, 0xd1, 0x70, 0x97, 0xc8, 0x14, 0xb1, 0xc8, 0xbe, 0x7b, 0x78, 0x43, 0xdf, - 0x85, 0x34, 0x76, 0x46, 0xb3, 0xfe, 0x26, 0xaa, 0x1c, 0xda, 0x6d, 0xb2, 0x34, 0x8e, 0x87, 0x94, - 0x26, 0xc1, 0x82, 0x4b, 0xdb, 0x0c, 0xb0, 0x65, 0xd7, 0x50, 0x2e, 0xb1, 0xbb, 0x53, 0x2a, 0xad, - 0x19, 0x29, 0xce, 0xb2, 0x6e, 0xb7, 0x71, 0x40, 0x1d, 0xd9, 0x9e, 0x81, 0x53, 0x34, 0xa0, 0x8e, - 0x6c, 0x6e, 0xde, 0xab, 0x30, 0x55, 0xad, 0xd2, 0x6b, 0xae, 0x57, 0x2b, 0xec, 0x1e, 0xcb, 0xc9, - 0x68, 0x92, 0xb1, 0xaa, 0xd5, 0xdb, 0x54, 0x80, 0xc5, 0xb8, 0xa3, 0xdf, 0x84, 0xb3, 0xbe, 0xb1, - 0x44, 0xe0, 0x64, 0xd7, 0x55, 0x06, 0xa1, 0x57, 0x61, 0xaa, 0x75, 0xd2, 0x0d, 0xd4, 0xa5, 0x33, - 0xb6, 0x4e, 0x82, 0xb0, 0xeb, 0x70, 0xa6, 0x75, 0xdc, 0xea, 0xc6, 0x2d, 0x8a, 0x38, 0xbd, 0x75, - 0xdc, 0x0a, 0x02, 0x9f, 0x24, 0x37, 0xdc, 0x6d, 0x54, 0x35, 0x5d, 0x54, 0xcb, 0x3c, 0x22, 0x8a, - 0x0b, 0x13, 0xfa, 0x25, 0xd0, 0xaa, 0xd5, 0x0a, 0xb2, 0xcc, 0x83, 0x06, 0xaa, 0x98, 0x6d, 0x64, - 0x99, 0x4e, 0x66, 0x4e, 0x14, 0x1e, 0xaf, 0x56, 0x4b, 0x64, 0x36, 0x4f, 0x26, 0xf5, 0x45, 0x98, - 0xb4, 0x0f, 0x5e, 0xa9, 0xd2, 0x90, 0xac, 0xb4, 0xda, 0xe8, 0xb0, 0xfe, 0x46, 0xe6, 0x02, 0xb1, - 0xef, 0x04, 0x9e, 0x20, 0x01, 0xb9, 0x43, 0x86, 0xf5, 0xa7, 0x41, 0xab, 0x3a, 0xc7, 0x66, 0xbb, - 0x45, 0x6a, 0xb2, 0xd3, 0x32, 0xab, 0x28, 0xf3, 0x24, 0x15, 0xa5, 0xe3, 0x65, 0x3e, 0x8c, 0x53, - 0xc2, 0x79, 0xbd, 0x7e, 0xe8, 0x72, 0xc6, 0xa7, 0x68, 0x4a, 0x90, 0x31, 0xc6, 0xb6, 0x00, 0x1a, - 0x36, 0x85, 0x74, 0xe2, 0x05, 0x22, 0x36, 0xde, 0x3a, 0x6e, 0x89, 0xe7, 0x7d, 0x02, 0xc6, 0xb0, - 0xa4, 0x7f, 0xd2, 0xa7, 0x69, 0x43, 0xd6, 0x3a, 0x16, 0xce, 0xf8, 0x81, 0xf5, 0xc6, 0xd9, 0x1c, - 0xa4, 0xc5, 0xf8, 0xd4, 0x47, 0x81, 0x46, 0xa8, 0xa6, 0xe0, 0x66, 0xa5, 0xb8, 0xbd, 0x86, 0xdb, - 0x8c, 0x4f, 0x95, 0xb4, 0x18, 0x6e, 0x77, 0x36, 0x37, 0xf6, 0x4a, 0x15, 0x63, 0xbf, 0xbc, 0xb7, - 0xb1, 0x55, 0xd2, 0x54, 0xb1, 0xaf, 0xfe, 0x56, 0x0c, 0xc6, 0xe5, 0x5b, 0x24, 0xfd, 0x63, 0xf0, - 0x08, 0x7f, 0x9e, 0xe1, 0x20, 0xb7, 0xf2, 0x7a, 0xbd, 0x4d, 0x52, 0xa6, 0x69, 0xd2, 0xe5, 0xcb, - 0x73, 0xda, 0x19, 0x26, 0xb5, 0x8b, 0xdc, 0x17, 0xeb, 0x6d, 0x9c, 0x10, 0x4d, 0xd3, 0xd5, 0x37, - 0x61, 0xce, 0xb2, 0x2b, 0x8e, 0x6b, 0x5a, 0x35, 0xb3, 0x5d, 0xab, 0xf8, 0x4f, 0x92, 0x2a, 0x66, - 0xb5, 0x8a, 0x1c, 0xc7, 0xa6, 0x4b, 0x95, 0xc7, 0x72, 0xce, 0xb2, 0x77, 0x99, 0xb0, 0x5f, 0xc3, - 0xf3, 0x4c, 0x34, 0x10, 0x60, 0x6a, 0xaf, 0x00, 0x7b, 0x0c, 0x46, 0x9b, 0x66, 0xab, 0x82, 0x2c, - 0xb7, 0x7d, 0x42, 0x1a, 0xe3, 0xa4, 0x91, 0x6c, 0x9a, 0xad, 0x12, 0x3e, 0xfe, 0xd9, 0xdc, 0x9f, - 0xfc, 0x57, 0x15, 0xd2, 0x62, 0x73, 0x8c, 0xef, 0x35, 0xaa, 0x64, 0x1d, 0x51, 0x48, 0xa5, 0x79, - 0xa2, 0x6f, 0x2b, 0xbd, 0x54, 0xc4, 0x0b, 0x4c, 0x6e, 0x98, 0xb6, 0xac, 0x06, 0x45, 0xe2, 0xc5, - 0x1d, 0xd7, 0x16, 0x44, 0x5b, 0x84, 0xa4, 0xc1, 0x8e, 0xf4, 0xdb, 0x30, 0xfc, 0x8a, 0x43, 0xb8, - 0x87, 0x09, 0xf7, 0x85, 0xfe, 0xdc, 0x77, 0x76, 0x09, 0xf9, 0xe8, 0x9d, 0xdd, 0x4a, 0x79, 0xdb, - 0xd8, 0xca, 0x6f, 0x1a, 0x0c, 0xae, 0x3f, 0x0a, 0xf1, 0x86, 0xf9, 0xe6, 0x89, 0xbc, 0x14, 0x91, - 0xa1, 0x41, 0x0d, 0xff, 0x28, 0xc4, 0x5f, 0x47, 0xe6, 0xab, 0xf2, 0x02, 0x40, 0x86, 0x3e, 0xc0, - 0xd0, 0xbf, 0x04, 0x09, 0x62, 0x2f, 0x1d, 0x80, 0x59, 0x4c, 0x1b, 0xd2, 0x93, 0x10, 0x2f, 0x6e, - 0x1b, 0x38, 0xfc, 0x35, 0x48, 0xd3, 0xd1, 0xca, 0xce, 0x46, 0xa9, 0x58, 0xd2, 0x62, 0xd9, 0xab, - 0x30, 0x4c, 0x8d, 0x80, 0x53, 0xc3, 0x33, 0x83, 0x36, 0xc4, 0x0e, 0x19, 0x87, 0xc2, 0x67, 0xf7, - 0xb7, 0x0a, 0x25, 0x43, 0x8b, 0x89, 0xee, 0x75, 0x20, 0x2d, 0xf6, 0xc5, 0x3f, 0x9b, 0x98, 0xfa, - 0x3d, 0x05, 0x52, 0x42, 0x9f, 0x8b, 0x1b, 0x14, 0xb3, 0xd1, 0xb0, 0x5f, 0xaf, 0x98, 0x8d, 0xba, - 0xe9, 0xb0, 0xa0, 0x00, 0x32, 0x94, 0xc7, 0x23, 0x83, 0x3a, 0xed, 0x67, 0xa2, 0xfc, 0x17, 0x15, - 0xd0, 0x82, 0x2d, 0x66, 0x40, 0x41, 0xe5, 0xe7, 0xaa, 0xe0, 0xe7, 0x15, 0x18, 0x97, 0xfb, 0xca, - 0x80, 0x7a, 0xe7, 0x7f, 0xae, 0xea, 0x7d, 0x37, 0x06, 0x63, 0x52, 0x37, 0x39, 0xa8, 0x76, 0xbf, - 0x08, 0x93, 0xf5, 0x1a, 0x6a, 0xb6, 0x6c, 0x17, 0x59, 0xd5, 0x93, 0x4a, 0x03, 0xbd, 0x86, 0x1a, - 0x99, 0x2c, 0x29, 0x14, 0x97, 0xfa, 0xf7, 0xab, 0x4b, 0x1b, 0x3e, 0x6e, 0x13, 0xc3, 0x72, 0x53, - 0x1b, 0x6b, 0xa5, 0xad, 0x9d, 0xed, 0xbd, 0x52, 0xb9, 0x78, 0xb7, 0xb2, 0x5f, 0xfe, 0x78, 0x79, - 0xfb, 0xc5, 0xb2, 0xa1, 0xd5, 0x03, 0x62, 0x1f, 0x60, 0xaa, 0xef, 0x80, 0x16, 0x54, 0x4a, 0x7f, - 0x04, 0xc2, 0xd4, 0xd2, 0x86, 0xf4, 0x29, 0x98, 0x28, 0x6f, 0x57, 0x76, 0x37, 0xd6, 0x4a, 0x95, - 0xd2, 0xfa, 0x7a, 0xa9, 0xb8, 0xb7, 0x4b, 0x9f, 0x40, 0x78, 0xd2, 0x7b, 0x72, 0x52, 0x7f, 0x4e, - 0x85, 0xa9, 0x10, 0x4d, 0xf4, 0x3c, 0xbb, 0x77, 0xa0, 0xb7, 0x33, 0xcf, 0x0c, 0xa2, 0xfd, 0x12, - 0x5e, 0xf2, 0x77, 0xcc, 0xb6, 0xcb, 0x6e, 0x35, 0x9e, 0x06, 0x6c, 0x25, 0xcb, 0xad, 0x1f, 0xd6, - 0x51, 0x9b, 0x3d, 0xb0, 0xa1, 0x37, 0x14, 0x13, 0xfe, 0x38, 0x7d, 0x66, 0xf3, 0x51, 0xd0, 0x5b, - 0xb6, 0x53, 0x77, 0xeb, 0xaf, 0xa1, 0x4a, 0xdd, 0xe2, 0x4f, 0x77, 0xf0, 0x0d, 0x46, 0xdc, 0xd0, - 0xf8, 0xcc, 0x86, 0xe5, 0x7a, 0xd2, 0x16, 0x3a, 0x32, 0x03, 0xd2, 0xb8, 0x80, 0xab, 0x86, 0xc6, + 0x74, 0x20, 0x2e, 0x0a, 0x5c, 0x59, 0xd1, 0x12, 0xba, 0x06, 0x69, 0x4a, 0xb0, 0xf1, 0x42, 0x69, + 0xed, 0xda, 0xaa, 0x36, 0x1c, 0x1c, 0xb9, 0xb2, 0xa2, 0x8d, 0xe8, 0x63, 0x30, 0x4a, 0x46, 0x0a, + 0xdb, 0xdb, 0x9b, 0x5a, 0xd2, 0xe3, 0xdc, 0xdd, 0x33, 0x36, 0xca, 0xb7, 0xb5, 0x51, 0x8f, 0xf3, + 0xb6, 0xb1, 0xbd, 0xbf, 0xa3, 0x81, 0xc7, 0xb0, 0x55, 0xda, 0xdd, 0xcd, 0xdf, 0x2e, 0x69, 0x29, + 0x4f, 0xa2, 0x70, 0x77, 0xaf, 0xb4, 0xab, 0xa5, 0x03, 0x6a, 0x5d, 0x59, 0xd1, 0xc6, 0xbc, 0x53, + 0x94, 0xca, 0xfb, 0x5b, 0xda, 0xb8, 0x3e, 0x09, 0x63, 0xf4, 0x14, 0x5c, 0x89, 0x09, 0x69, 0xe8, + 0xda, 0xaa, 0xa6, 0xf9, 0x8a, 0x50, 0x96, 0xc9, 0xc0, 0xc0, 0xb5, 0x55, 0x4d, 0xcf, 0x16, 0x21, + 0x41, 0xa2, 0x4b, 0xd7, 0x61, 0x7c, 0x33, 0x5f, 0x28, 0x6d, 0x56, 0xb6, 0x77, 0xf6, 0x36, 0xb6, + 0xcb, 0xf9, 0x4d, 0x4d, 0xf1, 0xc7, 0x8c, 0xd2, 0x27, 0xf6, 0x37, 0x8c, 0xd2, 0x9a, 0x16, 0x13, + 0xc7, 0x76, 0x4a, 0xf9, 0xbd, 0xd2, 0x9a, 0xa6, 0x66, 0xab, 0x70, 0x26, 0xac, 0x4e, 0x86, 0x66, + 0x86, 0xe0, 0xe2, 0x58, 0x0f, 0x17, 0x13, 0xae, 0x2e, 0x17, 0x7f, 0x2f, 0x06, 0x53, 0x21, 0x6b, + 0x45, 0xe8, 0x49, 0x9e, 0x85, 0x04, 0x0d, 0x51, 0xba, 0x7a, 0x3e, 0x19, 0xba, 0xe8, 0x90, 0x80, + 0xed, 0x5a, 0x41, 0x09, 0x4e, 0xec, 0x20, 0xd4, 0x1e, 0x1d, 0x04, 0xa6, 0xe8, 0xaa, 0xe9, 0x7f, + 0xbe, 0xab, 0xa6, 0xd3, 0x65, 0xef, 0xda, 0x20, 0xcb, 0x1e, 0x19, 0x3b, 0x5d, 0x6d, 0x4f, 0x84, + 0xd4, 0xf6, 0x5b, 0x30, 0xd9, 0x45, 0x34, 0x70, 0x8d, 0xfd, 0xb4, 0x02, 0x99, 0x5e, 0xc6, 0x89, + 0xa8, 0x74, 0xb1, 0x40, 0xa5, 0xbb, 0x25, 0x5b, 0xf0, 0x7c, 0x6f, 0x27, 0x74, 0xf9, 0xfa, 0x2b, + 0x0a, 0x4c, 0x87, 0x77, 0x8a, 0xa1, 0x3a, 0x3c, 0x03, 0xc3, 0x4d, 0xe4, 0x1e, 0xdb, 0xbc, 0x5b, + 0xba, 0x18, 0xb2, 0x06, 0xe3, 0x69, 0xd9, 0xd9, 0x0c, 0x25, 0x2e, 0xe2, 0x6a, 0xaf, 0x76, 0x8f, + 0x6a, 0xd3, 0xa5, 0xe9, 0x2f, 0xc5, 0xe0, 0x6c, 0x28, 0x79, 0xa8, 0xa2, 0x8f, 0x02, 0xd4, 0xad, + 0x56, 0xc7, 0xa5, 0x1d, 0x11, 0x2d, 0xb0, 0xa3, 0x64, 0x84, 0x14, 0x2f, 0x5c, 0x3c, 0x3b, 0xae, + 0x37, 0xaf, 0x92, 0x79, 0xa0, 0x43, 0x44, 0xe0, 0x86, 0xaf, 0x68, 0x9c, 0x28, 0x3a, 0xdb, 0xe3, + 0x4a, 0xbb, 0x02, 0x73, 0x19, 0xb4, 0x6a, 0xa3, 0x8e, 0x2c, 0xb7, 0xe2, 0xb8, 0x6d, 0x64, 0x36, + 0xeb, 0xd6, 0x11, 0x59, 0x41, 0x92, 0xb9, 0xc4, 0xa1, 0xd9, 0x70, 0x90, 0x31, 0x41, 0xa7, 0x77, + 0xf9, 0x2c, 0x46, 0x90, 0x00, 0x6a, 0x0b, 0x88, 0xe1, 0x00, 0x82, 0x4e, 0x7b, 0x88, 0xec, 0xef, + 0x24, 0x21, 0x25, 0xf4, 0xd5, 0xfa, 0x79, 0x48, 0xbf, 0x64, 0xbe, 0x62, 0x56, 0xf8, 0xbd, 0x12, + 0xb5, 0x44, 0x0a, 0x8f, 0xed, 0xb0, 0xfb, 0xa5, 0x65, 0x38, 0x43, 0x44, 0xec, 0x8e, 0x8b, 0xda, + 0x95, 0x6a, 0xc3, 0x74, 0x1c, 0x62, 0xb4, 0x24, 0x11, 0xd5, 0xf1, 0xdc, 0x36, 0x9e, 0x2a, 0xf2, + 0x19, 0xfd, 0x2a, 0x4c, 0x11, 0x44, 0xb3, 0xd3, 0x70, 0xeb, 0xad, 0x06, 0xaa, 0xe0, 0xbb, 0x37, + 0x87, 0xac, 0x24, 0x9e, 0x66, 0x93, 0x58, 0x62, 0x8b, 0x09, 0x60, 0x8d, 0x1c, 0x7d, 0x0d, 0x1e, + 0x25, 0xb0, 0x23, 0x64, 0xa1, 0xb6, 0xe9, 0xa2, 0x0a, 0xfa, 0xf9, 0x8e, 0xd9, 0x70, 0x2a, 0xa6, + 0x55, 0xab, 0x1c, 0x9b, 0xce, 0x71, 0xe6, 0x0c, 0x26, 0x28, 0xc4, 0x32, 0x8a, 0xf1, 0x30, 0x16, + 0xbc, 0xcd, 0xe4, 0x4a, 0x44, 0x2c, 0x6f, 0xd5, 0x9e, 0x33, 0x9d, 0x63, 0x3d, 0x07, 0xd3, 0x84, + 0xc5, 0x71, 0xdb, 0x75, 0xeb, 0xa8, 0x52, 0x3d, 0x46, 0xd5, 0x97, 0x2b, 0x1d, 0xf7, 0xf0, 0x46, + 0xe6, 0x11, 0xf1, 0xfc, 0x44, 0xc3, 0x5d, 0x22, 0x53, 0xc4, 0x22, 0xfb, 0xee, 0xe1, 0x0d, 0x7d, + 0x17, 0xd2, 0xd8, 0x19, 0xcd, 0xfa, 0xeb, 0xa8, 0x72, 0x68, 0xb7, 0xc9, 0xd2, 0x38, 0x1e, 0x52, + 0x9a, 0x04, 0x0b, 0x2e, 0x6d, 0x33, 0xc0, 0x96, 0x5d, 0x43, 0xb9, 0xc4, 0xee, 0x4e, 0xa9, 0xb4, + 0x66, 0xa4, 0x38, 0xcb, 0xba, 0xdd, 0xc6, 0x01, 0x75, 0x64, 0x7b, 0x06, 0x4e, 0xd1, 0x80, 0x3a, + 0xb2, 0xb9, 0x79, 0xaf, 0xc2, 0x54, 0xb5, 0x4a, 0xaf, 0xb9, 0x5e, 0xad, 0xb0, 0x7b, 0x2c, 0x27, + 0xa3, 0x05, 0x8c, 0x55, 0xad, 0xde, 0xa6, 0x02, 0x2c, 0xc6, 0x1d, 0xfd, 0x26, 0x9c, 0xf5, 0x8d, + 0x25, 0x02, 0x27, 0xbb, 0xae, 0x52, 0x86, 0x5e, 0x85, 0xa9, 0xd6, 0x49, 0x37, 0x50, 0x0f, 0x9c, + 0xb1, 0x75, 0x22, 0xc3, 0xae, 0xc3, 0x99, 0xd6, 0x71, 0xab, 0x1b, 0xb7, 0x28, 0xe2, 0xf4, 0xd6, + 0x71, 0x4b, 0x06, 0x3e, 0x4e, 0x6e, 0xb8, 0xdb, 0xa8, 0x6a, 0xba, 0xa8, 0x96, 0x79, 0x48, 0x14, + 0x17, 0x26, 0xf4, 0x4b, 0xa0, 0x55, 0xab, 0x15, 0x64, 0x99, 0x07, 0x0d, 0x54, 0x31, 0xdb, 0xc8, + 0x32, 0x9d, 0xcc, 0x9c, 0x28, 0x3c, 0x5e, 0xad, 0x96, 0xc8, 0x6c, 0x9e, 0x4c, 0xea, 0x8b, 0x30, + 0x69, 0x1f, 0xbc, 0x54, 0xa5, 0x21, 0x59, 0x69, 0xb5, 0xd1, 0x61, 0xfd, 0xb5, 0xcc, 0x05, 0x62, + 0xdf, 0x09, 0x3c, 0x41, 0x02, 0x72, 0x87, 0x0c, 0xeb, 0x4f, 0x82, 0x56, 0x75, 0x8e, 0xcd, 0x76, + 0x8b, 0xd4, 0x64, 0xa7, 0x65, 0x56, 0x51, 0xe6, 0x71, 0x2a, 0x4a, 0xc7, 0xcb, 0x7c, 0x18, 0xa7, + 0x84, 0xf3, 0x6a, 0xfd, 0xd0, 0xe5, 0x8c, 0x4f, 0xd0, 0x94, 0x20, 0x63, 0x8c, 0x6d, 0x01, 0x34, + 0x6c, 0x8a, 0xc0, 0x89, 0x17, 0x88, 0xd8, 0x78, 0xeb, 0xb8, 0x25, 0x9e, 0xf7, 0x31, 0x18, 0xc3, + 0x92, 0xfe, 0x49, 0x9f, 0xa4, 0x0d, 0x59, 0xeb, 0x58, 0x38, 0xe3, 0x07, 0xd6, 0x1b, 0x67, 0x73, + 0x90, 0x16, 0xe3, 0x53, 0x1f, 0x05, 0x1a, 0xa1, 0x9a, 0x82, 0x9b, 0x95, 0xe2, 0xf6, 0x1a, 0x6e, + 0x33, 0x3e, 0x55, 0xd2, 0x62, 0xb8, 0xdd, 0xd9, 0xdc, 0xd8, 0x2b, 0x55, 0x8c, 0xfd, 0xf2, 0xde, + 0xc6, 0x56, 0x49, 0x53, 0xc5, 0xbe, 0xfa, 0x5b, 0x31, 0x18, 0x0f, 0xde, 0x22, 0xe9, 0x1f, 0x83, + 0x87, 0xf8, 0xf3, 0x0c, 0x07, 0xb9, 0x95, 0x57, 0xeb, 0x6d, 0x92, 0x32, 0x4d, 0x93, 0x2e, 0x5f, + 0x9e, 0xd3, 0xce, 0x30, 0xa9, 0x5d, 0xe4, 0x3e, 0x5f, 0x6f, 0xe3, 0x84, 0x68, 0x9a, 0xae, 0xbe, + 0x09, 0x73, 0x96, 0x5d, 0x71, 0x5c, 0xd3, 0xaa, 0x99, 0xed, 0x5a, 0xc5, 0x7f, 0x92, 0x54, 0x31, + 0xab, 0x55, 0xe4, 0x38, 0x36, 0x5d, 0xaa, 0x3c, 0x96, 0x73, 0x96, 0xbd, 0xcb, 0x84, 0xfd, 0x1a, + 0x9e, 0x67, 0xa2, 0x52, 0x80, 0xa9, 0xbd, 0x02, 0xec, 0x11, 0x18, 0x6d, 0x9a, 0xad, 0x0a, 0xb2, + 0xdc, 0xf6, 0x09, 0x69, 0x8c, 0x93, 0x46, 0xb2, 0x69, 0xb6, 0x4a, 0xf8, 0xf8, 0xa7, 0x73, 0x7f, + 0xf2, 0x5f, 0x55, 0x48, 0x8b, 0xcd, 0x31, 0xbe, 0xd7, 0xa8, 0x92, 0x75, 0x44, 0x21, 0x95, 0xe6, + 0xb1, 0xbe, 0xad, 0xf4, 0x52, 0x11, 0x2f, 0x30, 0xb9, 0x61, 0xda, 0xb2, 0x1a, 0x14, 0x89, 0x17, + 0x77, 0x5c, 0x5b, 0x10, 0x6d, 0x11, 0x92, 0x06, 0x3b, 0xd2, 0x6f, 0xc3, 0xf0, 0x4b, 0x0e, 0xe1, + 0x1e, 0x26, 0xdc, 0x17, 0xfa, 0x73, 0xdf, 0xd9, 0x25, 0xe4, 0xa3, 0x77, 0x76, 0x2b, 0xe5, 0x6d, + 0x63, 0x2b, 0xbf, 0x69, 0x30, 0xb8, 0xfe, 0x30, 0xc4, 0x1b, 0xe6, 0xeb, 0x27, 0xc1, 0xa5, 0x88, + 0x0c, 0x0d, 0x6a, 0xf8, 0x87, 0x21, 0xfe, 0x2a, 0x32, 0x5f, 0x0e, 0x2e, 0x00, 0x64, 0xe8, 0x03, + 0x0c, 0xfd, 0x4b, 0x90, 0x20, 0xf6, 0xd2, 0x01, 0x98, 0xc5, 0xb4, 0x21, 0x3d, 0x09, 0xf1, 0xe2, + 0xb6, 0x81, 0xc3, 0x5f, 0x83, 0x34, 0x1d, 0xad, 0xec, 0x6c, 0x94, 0x8a, 0x25, 0x2d, 0x96, 0xbd, + 0x0a, 0xc3, 0xd4, 0x08, 0x38, 0x35, 0x3c, 0x33, 0x68, 0x43, 0xec, 0x90, 0x71, 0x28, 0x7c, 0x76, + 0x7f, 0xab, 0x50, 0x32, 0xb4, 0x98, 0xe8, 0x5e, 0x07, 0xd2, 0x62, 0x5f, 0xfc, 0xd3, 0x89, 0xa9, + 0x6f, 0x2a, 0x90, 0x12, 0xfa, 0x5c, 0xdc, 0xa0, 0x98, 0x8d, 0x86, 0xfd, 0x6a, 0xc5, 0x6c, 0xd4, + 0x4d, 0x87, 0x05, 0x05, 0x90, 0xa1, 0x3c, 0x1e, 0x19, 0xd4, 0x69, 0x3f, 0x15, 0xe5, 0xbf, 0xa8, + 0x80, 0x26, 0xb7, 0x98, 0x92, 0x82, 0xca, 0xcf, 0x54, 0xc1, 0xcf, 0x2b, 0x30, 0x1e, 0xec, 0x2b, + 0x25, 0xf5, 0xce, 0xff, 0x4c, 0xd5, 0xfb, 0x6e, 0x0c, 0xc6, 0x02, 0xdd, 0xe4, 0xa0, 0xda, 0xfd, + 0x3c, 0x4c, 0xd6, 0x6b, 0xa8, 0xd9, 0xb2, 0x5d, 0x64, 0x55, 0x4f, 0x2a, 0x0d, 0xf4, 0x0a, 0x6a, + 0x64, 0xb2, 0xa4, 0x50, 0x5c, 0xea, 0xdf, 0xaf, 0x2e, 0x6d, 0xf8, 0xb8, 0x4d, 0x0c, 0xcb, 0x4d, + 0x6d, 0xac, 0x95, 0xb6, 0x76, 0xb6, 0xf7, 0x4a, 0xe5, 0xe2, 0xdd, 0xca, 0x7e, 0xf9, 0xe3, 0xe5, + 0xed, 0xe7, 0xcb, 0x86, 0x56, 0x97, 0xc4, 0x3e, 0xc0, 0x54, 0xdf, 0x01, 0x4d, 0x56, 0x4a, 0x7f, + 0x08, 0xc2, 0xd4, 0xd2, 0x86, 0xf4, 0x29, 0x98, 0x28, 0x6f, 0x57, 0x76, 0x37, 0xd6, 0x4a, 0x95, + 0xd2, 0xfa, 0x7a, 0xa9, 0xb8, 0xb7, 0x4b, 0x9f, 0x40, 0x78, 0xd2, 0x7b, 0xc1, 0xa4, 0xfe, 0x9c, + 0x0a, 0x53, 0x21, 0x9a, 0xe8, 0x79, 0x76, 0xef, 0x40, 0x6f, 0x67, 0x9e, 0x1a, 0x44, 0xfb, 0x25, + 0xbc, 0xe4, 0xef, 0x98, 0x6d, 0x97, 0xdd, 0x6a, 0x3c, 0x09, 0xd8, 0x4a, 0x96, 0x5b, 0x3f, 0xac, + 0xa3, 0x36, 0x7b, 0x60, 0x43, 0x6f, 0x28, 0x26, 0xfc, 0x71, 0xfa, 0xcc, 0xe6, 0xa3, 0xa0, 0xb7, + 0x6c, 0xa7, 0xee, 0xd6, 0x5f, 0x41, 0x95, 0xba, 0xc5, 0x9f, 0xee, 0xe0, 0x1b, 0x8c, 0xb8, 0xa1, + 0xf1, 0x99, 0x0d, 0xcb, 0xf5, 0xa4, 0x2d, 0x74, 0x64, 0x4a, 0xd2, 0xb8, 0x80, 0xab, 0x86, 0xc6, 0x67, 0x3c, 0xe9, 0xf3, 0x90, 0xae, 0xd9, 0x1d, 0xdc, 0x75, 0x51, 0x39, 0xbc, 0x5e, 0x28, 0x46, 0x8a, 0x8e, 0x79, 0x22, 0xac, 0x9f, 0xf6, 0x1f, 0x2b, 0xa5, 0x8d, 0x14, 0x1d, 0xa3, 0x22, 0x4f, - 0xc1, 0x84, 0x79, 0x74, 0xd4, 0xc6, 0xe4, 0x9c, 0x88, 0xde, 0x21, 0x8c, 0x7b, 0xc3, 0x44, 0x70, + 0xc0, 0x84, 0x79, 0x74, 0xd4, 0xc6, 0xe4, 0x9c, 0x88, 0xde, 0x21, 0x8c, 0x7b, 0xc3, 0x44, 0x70, 0xe6, 0x0e, 0x24, 0xb9, 0x1d, 0xf0, 0x92, 0x8c, 0x2d, 0x51, 0x69, 0xd1, 0xdb, 0xde, 0xd8, 0xc2, 0xa8, 0x91, 0xb4, 0xf8, 0xe4, 0x79, 0x48, 0xd7, 0x9d, 0x8a, 0xff, 0x94, 0x3c, 0x36, 0x1f, 0x5b, - 0x48, 0x1a, 0xa9, 0xba, 0xe3, 0x3d, 0x61, 0xcc, 0x7e, 0x35, 0x06, 0xe3, 0xf2, 0x53, 0x7e, 0x7d, - 0x0d, 0x92, 0x0d, 0xbb, 0x6a, 0x92, 0xd0, 0xa2, 0x5b, 0x4c, 0x0b, 0x11, 0x1b, 0x03, 0x4b, 0x9b, - 0x4c, 0xde, 0xf0, 0x90, 0x33, 0xff, 0x51, 0x81, 0x24, 0x1f, 0xd6, 0xa7, 0x21, 0xde, 0x32, 0xdd, - 0x63, 0x42, 0x97, 0x28, 0xc4, 0x34, 0xc5, 0x20, 0xc7, 0x78, 0xdc, 0x69, 0x99, 0x16, 0x09, 0x01, - 0x36, 0x8e, 0x8f, 0xb1, 0x5f, 0x1b, 0xc8, 0xac, 0x91, 0xdb, 0x0f, 0xbb, 0xd9, 0x44, 0x96, 0xeb, - 0x70, 0xbf, 0xb2, 0xf1, 0x22, 0x1b, 0xd6, 0x3f, 0x02, 0x93, 0x6e, 0xdb, 0xac, 0x37, 0x24, 0xd9, - 0x38, 0x91, 0xd5, 0xf8, 0x84, 0x27, 0x9c, 0x83, 0x47, 0x39, 0x6f, 0x0d, 0xb9, 0x66, 0xf5, 0x18, - 0xd5, 0x7c, 0xd0, 0x30, 0x79, 0xcc, 0xf0, 0x08, 0x13, 0x58, 0x63, 0xf3, 0x1c, 0x9b, 0xfd, 0x03, - 0x05, 0x26, 0xf9, 0x0d, 0x53, 0xcd, 0x33, 0xd6, 0x16, 0x80, 0x69, 0x59, 0xb6, 0x2b, 0x9a, 0xab, - 0x3b, 0x94, 0xbb, 0x70, 0x4b, 0x79, 0x0f, 0x64, 0x08, 0x04, 0x33, 0x4d, 0x00, 0x7f, 0xa6, 0xa7, - 0xd9, 0xe6, 0x20, 0xc5, 0xb6, 0x70, 0xc8, 0x3e, 0x20, 0xbd, 0xc5, 0x06, 0x3a, 0x84, 0xef, 0xac, - 0xf4, 0x33, 0x90, 0x38, 0x40, 0x47, 0x75, 0x8b, 0x3d, 0x98, 0xa5, 0x07, 0xfc, 0x41, 0x48, 0xdc, - 0x7b, 0x10, 0x52, 0x78, 0x19, 0xa6, 0xaa, 0x76, 0x33, 0xa8, 0x6e, 0x41, 0x0b, 0xdc, 0xe6, 0x3b, - 0x2f, 0x28, 0x9f, 0x02, 0xbf, 0xc5, 0xfc, 0x89, 0xa2, 0xfc, 0xc3, 0x98, 0x7a, 0x7b, 0xa7, 0xf0, - 0x1b, 0xb1, 0x99, 0xdb, 0x14, 0xba, 0xc3, 0xaf, 0xd4, 0x40, 0x87, 0x0d, 0x54, 0xc5, 0xda, 0xc3, - 0x57, 0x16, 0xe0, 0x99, 0xa3, 0xba, 0x7b, 0xdc, 0x39, 0x58, 0xaa, 0xda, 0xcd, 0x4b, 0x47, 0xf6, - 0x91, 0xed, 0x6f, 0x7d, 0xe2, 0x23, 0x72, 0x40, 0x3e, 0xb1, 0xed, 0xcf, 0x51, 0x6f, 0x74, 0x26, - 0x72, 0xaf, 0x34, 0x57, 0x86, 0x29, 0x26, 0x5c, 0x21, 0xfb, 0x2f, 0xf4, 0x2e, 0x42, 0xef, 0xfb, - 0x0c, 0x2b, 0xf3, 0x9b, 0xdf, 0x27, 0xcb, 0xb5, 0x31, 0xc9, 0xa0, 0x78, 0x8e, 0xde, 0x68, 0xe4, - 0x0c, 0x38, 0x2b, 0xf1, 0xd1, 0xd4, 0x44, 0xed, 0x08, 0xc6, 0x6f, 0x31, 0xc6, 0x29, 0x81, 0x71, - 0x97, 0x41, 0x73, 0x45, 0x18, 0x3b, 0x0d, 0xd7, 0xbf, 0x63, 0x5c, 0x69, 0x24, 0x92, 0xdc, 0x86, - 0x09, 0x42, 0x52, 0xed, 0x38, 0xae, 0xdd, 0x24, 0x75, 0xaf, 0x3f, 0xcd, 0xbf, 0xff, 0x3e, 0xcd, - 0x95, 0x71, 0x0c, 0x2b, 0x7a, 0xa8, 0x5c, 0x0e, 0xc8, 0x96, 0x53, 0x0d, 0x55, 0x1b, 0x11, 0x0c, - 0xf7, 0x98, 0x22, 0x9e, 0x7c, 0xee, 0x93, 0x70, 0x06, 0x7f, 0x26, 0x65, 0x49, 0xd4, 0x24, 0xfa, - 0x81, 0x57, 0xe6, 0x0f, 0x3e, 0x4d, 0xd3, 0x71, 0xca, 0x23, 0x10, 0x74, 0x12, 0xbc, 0x78, 0x84, - 0x5c, 0x17, 0xb5, 0x9d, 0x8a, 0xd9, 0x08, 0x53, 0x4f, 0x78, 0x62, 0x90, 0xf9, 0xb5, 0x1f, 0xca, - 0x5e, 0xbc, 0x4d, 0x91, 0xf9, 0x46, 0x23, 0xb7, 0x0f, 0x8f, 0x84, 0x44, 0xc5, 0x00, 0x9c, 0x9f, - 0x63, 0x9c, 0x67, 0xba, 0x22, 0x03, 0xd3, 0xee, 0x00, 0x1f, 0xf7, 0x7c, 0x39, 0x00, 0xe7, 0x3f, - 0x60, 0x9c, 0x3a, 0xc3, 0x72, 0x97, 0x62, 0xc6, 0x3b, 0x30, 0xf9, 0x1a, 0x6a, 0x1f, 0xd8, 0x0e, - 0x7b, 0x4a, 0x33, 0x00, 0xdd, 0xe7, 0x19, 0xdd, 0x04, 0x03, 0x92, 0xc7, 0x36, 0x98, 0xeb, 0x26, - 0x24, 0x0f, 0xcd, 0x2a, 0x1a, 0x80, 0xe2, 0x0b, 0x8c, 0x62, 0x04, 0xcb, 0x63, 0x68, 0x1e, 0xd2, - 0x47, 0x36, 0x5b, 0x99, 0xa2, 0xe1, 0x5f, 0x64, 0xf0, 0x14, 0xc7, 0x30, 0x8a, 0x96, 0xdd, 0xea, - 0x34, 0xf0, 0xb2, 0x15, 0x4d, 0xf1, 0x25, 0x4e, 0xc1, 0x31, 0x8c, 0xe2, 0x14, 0x66, 0x7d, 0x9b, - 0x53, 0x38, 0x82, 0x3d, 0x9f, 0x87, 0x94, 0x6d, 0x35, 0x4e, 0x6c, 0x6b, 0x10, 0x25, 0xbe, 0xcc, - 0x18, 0x80, 0x41, 0x30, 0xc1, 0x2d, 0x18, 0x1d, 0xd4, 0x11, 0x5f, 0xf9, 0x21, 0x4f, 0x0f, 0xee, - 0x81, 0xdb, 0x30, 0xc1, 0x0b, 0x54, 0xdd, 0xb6, 0x06, 0xa0, 0xf8, 0xc7, 0x8c, 0x62, 0x5c, 0x80, - 0xb1, 0xcb, 0x70, 0x91, 0xe3, 0x1e, 0xa1, 0x41, 0x48, 0xbe, 0xca, 0x2f, 0x83, 0x41, 0x98, 0x29, - 0x0f, 0x90, 0x55, 0x3d, 0x1e, 0x8c, 0xe1, 0x6b, 0xdc, 0x94, 0x1c, 0x83, 0x29, 0x8a, 0x30, 0xd6, - 0x34, 0xdb, 0xce, 0xb1, 0xd9, 0x18, 0xc8, 0x1d, 0xbf, 0xce, 0x38, 0xd2, 0x1e, 0x88, 0x59, 0xa4, - 0x63, 0x9d, 0x86, 0xe6, 0x37, 0xb8, 0x45, 0x04, 0x18, 0x4b, 0x3d, 0xc7, 0x25, 0x8f, 0xb4, 0x4e, - 0xc3, 0xf6, 0x4f, 0x78, 0xea, 0x51, 0xec, 0x96, 0xc8, 0x78, 0x0b, 0x46, 0x9d, 0xfa, 0x9b, 0x03, - 0xd1, 0xfc, 0x53, 0xee, 0x69, 0x02, 0xc0, 0xe0, 0xbb, 0xf0, 0x68, 0xe8, 0x32, 0x31, 0x00, 0xd9, - 0x3f, 0x63, 0x64, 0xd3, 0x21, 0x4b, 0x05, 0x2b, 0x09, 0xa7, 0xa5, 0xfc, 0xe7, 0xbc, 0x24, 0xa0, - 0x00, 0xd7, 0x0e, 0xbe, 0x57, 0x70, 0xcc, 0xc3, 0xd3, 0x59, 0xed, 0x5f, 0x70, 0xab, 0x51, 0xac, - 0x64, 0xb5, 0x3d, 0x98, 0x66, 0x8c, 0xa7, 0xf3, 0xeb, 0xd7, 0x79, 0x61, 0xa5, 0xe8, 0x7d, 0xd9, - 0xbb, 0x2f, 0xc3, 0x8c, 0x67, 0x4e, 0xde, 0x94, 0x3a, 0x95, 0xa6, 0xd9, 0x1a, 0x80, 0xf9, 0x37, - 0x19, 0x33, 0xaf, 0xf8, 0x5e, 0x57, 0xeb, 0x6c, 0x99, 0x2d, 0x4c, 0xfe, 0x12, 0x64, 0x38, 0x79, - 0xc7, 0x6a, 0xa3, 0xaa, 0x7d, 0x64, 0xd5, 0xdf, 0x44, 0xb5, 0x01, 0xa8, 0xbf, 0x11, 0x70, 0xd5, - 0xbe, 0x00, 0xc7, 0xcc, 0x1b, 0xa0, 0x79, 0xbd, 0x4a, 0xa5, 0xde, 0x6c, 0xd9, 0x6d, 0x37, 0x82, - 0xf1, 0xb7, 0xb8, 0xa7, 0x3c, 0xdc, 0x06, 0x81, 0xe5, 0x4a, 0x30, 0x4e, 0x0e, 0x07, 0x0d, 0xc9, - 0xdf, 0x66, 0x44, 0x63, 0x3e, 0x8a, 0x15, 0x8e, 0xaa, 0xdd, 0x6c, 0x99, 0xed, 0x41, 0xea, 0xdf, - 0xbf, 0xe4, 0x85, 0x83, 0x41, 0x58, 0xe1, 0x70, 0x4f, 0x5a, 0x08, 0xaf, 0xf6, 0x03, 0x30, 0x7c, - 0x93, 0x17, 0x0e, 0x8e, 0x61, 0x14, 0xbc, 0x61, 0x18, 0x80, 0xe2, 0x5f, 0x71, 0x0a, 0x8e, 0xc1, - 0x14, 0x9f, 0xf0, 0x17, 0xda, 0x36, 0x3a, 0xaa, 0x3b, 0x6e, 0x9b, 0xb6, 0xc2, 0xfd, 0xa9, 0x7e, - 0xe7, 0x87, 0x72, 0x13, 0x66, 0x08, 0x50, 0x5c, 0x89, 0xd8, 0x23, 0x54, 0x72, 0xa7, 0x14, 0xad, - 0xd8, 0xef, 0xf2, 0x4a, 0x24, 0xc0, 0x68, 0x7e, 0x4e, 0x04, 0x7a, 0x15, 0x3d, 0xea, 0x45, 0x98, - 0xcc, 0x5f, 0xfc, 0x31, 0xe3, 0x92, 0x5b, 0x95, 0xdc, 0x26, 0x0e, 0x20, 0xb9, 0xa1, 0x88, 0x26, - 0xfb, 0xf4, 0x8f, 0xbd, 0x18, 0x92, 0xfa, 0x89, 0xdc, 0x3a, 0x8c, 0x49, 0xcd, 0x44, 0x34, 0xd5, - 0x5f, 0x62, 0x54, 0x69, 0xb1, 0x97, 0xc8, 0x5d, 0x85, 0x38, 0x6e, 0x0c, 0xa2, 0xe1, 0x7f, 0x99, - 0xc1, 0x89, 0x78, 0xee, 0x59, 0x48, 0xf2, 0x86, 0x20, 0x1a, 0xfa, 0xcb, 0x0c, 0xea, 0x41, 0x30, - 0x9c, 0x37, 0x03, 0xd1, 0xf0, 0xbf, 0xc2, 0xe1, 0x1c, 0x82, 0xe1, 0x83, 0x9b, 0xf0, 0x9d, 0xbf, - 0x16, 0x67, 0x05, 0x9d, 0xdb, 0xee, 0x16, 0x8c, 0xb0, 0x2e, 0x20, 0x1a, 0xfd, 0x2b, 0xec, 0xe4, - 0x1c, 0x91, 0xbb, 0x0e, 0x89, 0x01, 0x0d, 0xfe, 0xd7, 0x19, 0x94, 0xca, 0xe7, 0x8a, 0x90, 0x12, - 0x56, 0xfe, 0x68, 0xf8, 0xdf, 0x60, 0x70, 0x11, 0x85, 0x55, 0x67, 0x2b, 0x7f, 0x34, 0xc1, 0xdf, - 0xe4, 0xaa, 0x33, 0x04, 0x36, 0x1b, 0x5f, 0xf4, 0xa3, 0xd1, 0x7f, 0x8b, 0x5b, 0x9d, 0x43, 0x72, - 0xcf, 0xc3, 0xa8, 0x57, 0xc8, 0xa3, 0xf1, 0x7f, 0x9b, 0xe1, 0x7d, 0x0c, 0xb6, 0x80, 0xb0, 0x90, - 0x44, 0x53, 0xfc, 0x1d, 0x6e, 0x01, 0x01, 0x85, 0xd3, 0x28, 0xd8, 0x1c, 0x44, 0x33, 0xfd, 0x2a, - 0x4f, 0xa3, 0x40, 0x6f, 0x80, 0xbd, 0x49, 0xea, 0x69, 0x34, 0xc5, 0xdf, 0xe5, 0xde, 0x24, 0xf2, - 0x58, 0x8d, 0xe0, 0x6a, 0x1b, 0xcd, 0xf1, 0xf7, 0xb9, 0x1a, 0x81, 0xc5, 0x36, 0xb7, 0x03, 0x7a, - 0xf7, 0x4a, 0x1b, 0xcd, 0xf7, 0x59, 0xc6, 0x37, 0xd9, 0xb5, 0xd0, 0xe6, 0x5e, 0x84, 0xe9, 0xf0, - 0x55, 0x36, 0x9a, 0xf5, 0xd7, 0x7e, 0x1c, 0xb8, 0x2f, 0x12, 0x17, 0xd9, 0xdc, 0x9e, 0x5f, 0xae, - 0xc5, 0x15, 0x36, 0x9a, 0xf6, 0x73, 0x3f, 0x96, 0x2b, 0xb6, 0xb8, 0xc0, 0xe6, 0xf2, 0x00, 0xfe, - 0xe2, 0x16, 0xcd, 0xf5, 0x79, 0xc6, 0x25, 0x80, 0x70, 0x6a, 0xb0, 0xb5, 0x2d, 0x1a, 0xff, 0x05, - 0x9e, 0x1a, 0x0c, 0x81, 0x53, 0x83, 0x2f, 0x6b, 0xd1, 0xe8, 0x2f, 0xf2, 0xd4, 0xe0, 0x10, 0x1c, - 0xd9, 0xc2, 0xca, 0x11, 0xcd, 0xf0, 0x65, 0x1e, 0xd9, 0x02, 0x2a, 0x77, 0x0b, 0x92, 0x56, 0xa7, - 0xd1, 0xc0, 0x01, 0xaa, 0xf7, 0x7f, 0x41, 0x2c, 0xf3, 0xdf, 0x7f, 0xca, 0x34, 0xe0, 0x80, 0xdc, - 0x55, 0x48, 0xa0, 0xe6, 0x01, 0xaa, 0x45, 0x21, 0xff, 0xc7, 0x4f, 0x79, 0x51, 0xc2, 0xd2, 0xb9, - 0xe7, 0x01, 0xe8, 0xad, 0x3d, 0xd9, 0xb6, 0x8a, 0xc0, 0xfe, 0xcf, 0x9f, 0xb2, 0x57, 0x37, 0x7c, - 0x88, 0x4f, 0x40, 0x5f, 0x04, 0xe9, 0x4f, 0xf0, 0x43, 0x99, 0x80, 0x5c, 0xf5, 0x4d, 0x18, 0x79, - 0xc5, 0xb1, 0x2d, 0xd7, 0x3c, 0x8a, 0x42, 0xff, 0x2f, 0x86, 0xe6, 0xf2, 0xd8, 0x60, 0x4d, 0xbb, - 0x8d, 0x5c, 0xf3, 0xc8, 0x89, 0xc2, 0xfe, 0x6f, 0x86, 0xf5, 0x00, 0x18, 0x5c, 0x35, 0x1d, 0x77, - 0x90, 0xeb, 0xfe, 0x23, 0x0e, 0xe6, 0x00, 0xac, 0x34, 0xfe, 0xfc, 0x2a, 0x3a, 0x89, 0xc2, 0xfe, - 0x88, 0x2b, 0xcd, 0xe4, 0x73, 0xcf, 0xc2, 0x28, 0xfe, 0x48, 0xdf, 0xc7, 0x8a, 0x00, 0xff, 0x1f, - 0x06, 0xf6, 0x11, 0xf8, 0xcc, 0x8e, 0x5b, 0x73, 0xeb, 0xd1, 0xc6, 0xfe, 0x63, 0xe6, 0x69, 0x2e, - 0x9f, 0xcb, 0x43, 0xca, 0x71, 0x6b, 0xb5, 0x0e, 0xeb, 0xaf, 0x22, 0xe0, 0xff, 0xf7, 0xa7, 0xde, - 0x2d, 0xb7, 0x87, 0x29, 0x94, 0xc2, 0x9f, 0x1e, 0xc2, 0x6d, 0xfb, 0xb6, 0x4d, 0x9f, 0x1b, 0x7e, - 0x2a, 0x1b, 0xfd, 0x00, 0x10, 0xfe, 0xb0, 0x01, 0xd7, 0x7b, 0x8a, 0xe1, 0xd5, 0xea, 0x52, 0xd5, - 0x6e, 0x1e, 0xd8, 0xce, 0xa5, 0x03, 0xdb, 0x3d, 0xbe, 0xe4, 0x1e, 0x23, 0x3c, 0xc6, 0x9e, 0x18, - 0xc6, 0xf1, 0xe7, 0x99, 0xd3, 0x3d, 0x66, 0x24, 0x9b, 0xc8, 0xe5, 0x3a, 0xbe, 0xb6, 0x32, 0x79, - 0x8e, 0xaf, 0x9f, 0x83, 0x61, 0x72, 0xb5, 0x97, 0xc9, 0x5e, 0x99, 0x52, 0x88, 0xdf, 0x7b, 0x77, - 0x6e, 0xc8, 0x60, 0x63, 0xde, 0xec, 0x0a, 0x79, 0xd0, 0x1a, 0x93, 0x66, 0x57, 0xbc, 0xd9, 0x2b, - 0xf4, 0x59, 0xab, 0x34, 0x7b, 0xc5, 0x9b, 0x5d, 0x25, 0x4f, 0x5d, 0x55, 0x69, 0x76, 0xd5, 0x9b, - 0xbd, 0x4a, 0x76, 0x16, 0xc6, 0xa4, 0xd9, 0xab, 0xde, 0xec, 0x35, 0xb2, 0x9f, 0x10, 0x97, 0x66, - 0xaf, 0x79, 0xb3, 0xd7, 0xc9, 0x56, 0xc2, 0xa4, 0x34, 0x7b, 0xdd, 0x9b, 0xbd, 0x41, 0xb6, 0x10, - 0x74, 0x69, 0xf6, 0x86, 0x37, 0x7b, 0x93, 0xbc, 0x9f, 0x33, 0x22, 0xcd, 0xde, 0xd4, 0x67, 0x61, - 0x84, 0x5e, 0xf9, 0x32, 0xd9, 0x6f, 0x9e, 0x60, 0xd3, 0x7c, 0xd0, 0x9f, 0xbf, 0x4c, 0xde, 0xc5, - 0x19, 0x96, 0xe7, 0x2f, 0xfb, 0xf3, 0x2b, 0xe4, 0x6b, 0x01, 0x9a, 0x3c, 0xbf, 0xe2, 0xcf, 0x5f, - 0xc9, 0x8c, 0x91, 0xf7, 0x91, 0xa4, 0xf9, 0x2b, 0xfe, 0xfc, 0x6a, 0x66, 0x1c, 0x07, 0xbc, 0x3c, - 0xbf, 0xea, 0xcf, 0x5f, 0xcd, 0x4c, 0xcc, 0x2b, 0x0b, 0x69, 0x79, 0xfe, 0x6a, 0xf6, 0x97, 0x88, - 0x7b, 0x2d, 0xdf, 0xbd, 0xd3, 0xb2, 0x7b, 0x3d, 0xc7, 0x4e, 0xcb, 0x8e, 0xf5, 0x5c, 0x3a, 0x2d, - 0xbb, 0xd4, 0x73, 0xe6, 0xb4, 0xec, 0x4c, 0xcf, 0x8d, 0xd3, 0xb2, 0x1b, 0x3d, 0x07, 0x4e, 0xcb, - 0x0e, 0xf4, 0x5c, 0x37, 0x2d, 0xbb, 0xce, 0x73, 0xda, 0xb4, 0xec, 0x34, 0xcf, 0x5d, 0xd3, 0xb2, - 0xbb, 0x3c, 0x47, 0x65, 0x02, 0x8e, 0xf2, 0x5d, 0x94, 0x09, 0xb8, 0xc8, 0x77, 0x4e, 0x26, 0xe0, - 0x1c, 0xdf, 0x2d, 0x99, 0x80, 0x5b, 0x7c, 0x87, 0x64, 0x02, 0x0e, 0xf1, 0x5d, 0x91, 0x09, 0xb8, - 0xc2, 0x77, 0x02, 0xcb, 0x31, 0x03, 0xb5, 0x42, 0x72, 0x4c, 0xed, 0x9b, 0x63, 0x6a, 0xdf, 0x1c, - 0x53, 0xfb, 0xe6, 0x98, 0xda, 0x37, 0xc7, 0xd4, 0xbe, 0x39, 0xa6, 0xf6, 0xcd, 0x31, 0xb5, 0x6f, - 0x8e, 0xa9, 0x7d, 0x73, 0x4c, 0xed, 0x9f, 0x63, 0x6a, 0x44, 0x8e, 0xa9, 0x11, 0x39, 0xa6, 0x46, - 0xe4, 0x98, 0x1a, 0x91, 0x63, 0x6a, 0x44, 0x8e, 0xa9, 0x3d, 0x73, 0xcc, 0x77, 0xef, 0xb4, 0xec, - 0xde, 0xd0, 0x1c, 0x53, 0x7b, 0xe4, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x1e, 0x39, 0xa6, 0xf6, 0xc8, - 0x31, 0xb5, 0x47, 0x8e, 0xa9, 0x3d, 0x72, 0x4c, 0xed, 0x91, 0x63, 0x6a, 0xaf, 0x1c, 0x53, 0x7b, - 0xe6, 0x98, 0xda, 0x33, 0xc7, 0xd4, 0x9e, 0x39, 0xa6, 0xf6, 0xcc, 0x31, 0xb5, 0x67, 0x8e, 0xa9, - 0x62, 0x8e, 0xfd, 0x6b, 0x15, 0x74, 0x9a, 0x63, 0x3b, 0xe4, 0x8d, 0x25, 0xe6, 0x8a, 0xd9, 0x40, - 0xa6, 0x0d, 0x63, 0xd7, 0x69, 0xbe, 0x4b, 0x66, 0x03, 0xb9, 0x26, 0xcf, 0xaf, 0x78, 0xf3, 0x3c, - 0xdb, 0xe4, 0xf9, 0x2b, 0xde, 0x3c, 0xcf, 0x37, 0x79, 0x7e, 0xd5, 0x9b, 0xe7, 0x19, 0x27, 0xcf, - 0x5f, 0xf5, 0xe6, 0x79, 0xce, 0xc9, 0xf3, 0xd7, 0xbc, 0x79, 0x9e, 0x75, 0xf2, 0xfc, 0x75, 0x6f, - 0x9e, 0xe7, 0x9d, 0x3c, 0x7f, 0xc3, 0x9b, 0xe7, 0x99, 0x27, 0xcf, 0xdf, 0xd4, 0xe7, 0x83, 0xb9, - 0xc7, 0x05, 0x3c, 0xd7, 0xce, 0x07, 0xb3, 0x2f, 0x20, 0x71, 0xd9, 0x97, 0xe0, 0xf9, 0x17, 0x90, - 0x58, 0xf1, 0x25, 0x78, 0x06, 0x06, 0x24, 0xae, 0x64, 0x3f, 0x43, 0xdc, 0x67, 0x05, 0xdd, 0x37, - 0x13, 0x70, 0x5f, 0x4c, 0x70, 0xdd, 0x4c, 0xc0, 0x75, 0x31, 0xc1, 0x6d, 0x33, 0x01, 0xb7, 0xc5, - 0x04, 0x97, 0xcd, 0x04, 0x5c, 0x16, 0x13, 0xdc, 0x35, 0x13, 0x70, 0x57, 0x4c, 0x70, 0xd5, 0x4c, - 0xc0, 0x55, 0x31, 0xc1, 0x4d, 0x33, 0x01, 0x37, 0xc5, 0x04, 0x17, 0xcd, 0x04, 0x5c, 0x14, 0x13, - 0xdc, 0x33, 0x13, 0x70, 0x4f, 0x4c, 0x70, 0xcd, 0xb9, 0xa0, 0x6b, 0x62, 0xa2, 0x5b, 0xce, 0x05, - 0xdd, 0x12, 0x13, 0x5d, 0x72, 0x2e, 0xe8, 0x92, 0x98, 0xe8, 0x8e, 0x73, 0x41, 0x77, 0xc4, 0x44, - 0x57, 0xfc, 0x49, 0x8c, 0x77, 0x84, 0xbb, 0x6e, 0xbb, 0x53, 0x75, 0x1f, 0xaa, 0x23, 0x5c, 0x96, - 0xda, 0x87, 0xd4, 0x8a, 0xbe, 0x44, 0x1a, 0x56, 0xb1, 0xe3, 0x0c, 0xac, 0x60, 0xcb, 0x52, 0x63, - 0x21, 0x20, 0xac, 0x70, 0xc4, 0xea, 0x43, 0xf5, 0x86, 0xcb, 0x52, 0x9b, 0x11, 0xad, 0xdf, 0x8d, - 0x0f, 0xbc, 0x63, 0x7b, 0x27, 0xc6, 0x3b, 0x36, 0x66, 0xfe, 0xd3, 0x76, 0x6c, 0x8b, 0xd1, 0x26, - 0xf7, 0x8c, 0xbd, 0x18, 0x6d, 0xec, 0xae, 0x55, 0x67, 0xd0, 0x0e, 0x6e, 0x31, 0xda, 0xb4, 0x9e, - 0x51, 0xdf, 0xdf, 0x7e, 0x8b, 0x45, 0xb0, 0x81, 0x5a, 0x21, 0x11, 0x7c, 0xda, 0x7e, 0x6b, 0x59, - 0x2a, 0x25, 0xa7, 0x8d, 0x60, 0xf5, 0xd4, 0x11, 0x7c, 0xda, 0xce, 0x6b, 0x59, 0x2a, 0x2f, 0xa7, - 0x8e, 0xe0, 0x0f, 0xa0, 0x1f, 0x62, 0x11, 0xec, 0x9b, 0xff, 0xb4, 0xfd, 0xd0, 0x62, 0xb4, 0xc9, - 0x43, 0x23, 0x58, 0x3d, 0x45, 0x04, 0x0f, 0xd2, 0x1f, 0x2d, 0x46, 0x9b, 0x36, 0x3c, 0x82, 0x1f, - 0xba, 0x9b, 0xf9, 0x92, 0x02, 0x93, 0xe5, 0x7a, 0xad, 0xd4, 0x3c, 0x40, 0xb5, 0x1a, 0xaa, 0x31, - 0x3b, 0x2e, 0x4b, 0x95, 0xa0, 0x87, 0xab, 0xbf, 0xfd, 0xee, 0x9c, 0x6f, 0xe1, 0xab, 0x90, 0xa4, - 0x36, 0x5d, 0x5e, 0xce, 0xdc, 0x53, 0x22, 0x2a, 0x9c, 0x27, 0xaa, 0x9f, 0xe7, 0xb0, 0xcb, 0xcb, - 0x99, 0xff, 0xa4, 0x08, 0x55, 0xce, 0x1b, 0xce, 0xfe, 0x2a, 0xd1, 0xd0, 0x7a, 0x68, 0x0d, 0x2f, - 0x0d, 0xa4, 0xa1, 0xa0, 0xdb, 0x63, 0x5d, 0xba, 0x09, 0x5a, 0x75, 0x60, 0xa2, 0x5c, 0xaf, 0x95, - 0xc9, 0x17, 0xd2, 0x07, 0x51, 0x89, 0xca, 0x04, 0xea, 0xc1, 0xb2, 0x14, 0x96, 0x22, 0xc2, 0x0b, - 0x69, 0xb9, 0x46, 0x64, 0xeb, 0xf8, 0xb4, 0x96, 0x74, 0xda, 0xc5, 0x5e, 0xa7, 0xf5, 0x2b, 0xbb, - 0x77, 0xc2, 0xc5, 0x5e, 0x27, 0xf4, 0x73, 0xc8, 0x3b, 0xd5, 0x1b, 0x7c, 0x71, 0xa6, 0xef, 0x0d, - 0xe9, 0xe7, 0x20, 0xb6, 0x41, 0x5f, 0x6b, 0x4e, 0x17, 0xd2, 0x58, 0xa9, 0xef, 0xbc, 0x3b, 0x17, - 0xdf, 0xef, 0xd4, 0x6b, 0x46, 0x6c, 0xa3, 0xa6, 0xdf, 0x81, 0xc4, 0x27, 0xd9, 0xd7, 0x22, 0xb1, - 0xc0, 0x2a, 0x13, 0xf8, 0x68, 0xc4, 0x23, 0x26, 0x42, 0xbd, 0xb4, 0x5f, 0xb7, 0xdc, 0xcb, 0x2b, - 0x37, 0x0c, 0x4a, 0x91, 0xfd, 0x33, 0x00, 0xf4, 0x9c, 0x6b, 0xa6, 0x73, 0xac, 0x97, 0x39, 0x33, - 0x3d, 0xf5, 0x8d, 0xef, 0xbc, 0x3b, 0xb7, 0x3a, 0x08, 0xeb, 0x33, 0x35, 0xd3, 0x39, 0x7e, 0xc6, - 0x3d, 0x69, 0xa1, 0xa5, 0xc2, 0x89, 0x8b, 0x1c, 0xce, 0xde, 0xe2, 0xab, 0x1e, 0xbb, 0xae, 0x8c, - 0x70, 0x5d, 0x49, 0xe9, 0x9a, 0xd6, 0xe5, 0x6b, 0x5a, 0x7e, 0xd0, 0xeb, 0x79, 0x83, 0x2f, 0x12, - 0x01, 0x4b, 0xaa, 0x51, 0x96, 0x54, 0x1f, 0xd6, 0x92, 0x2d, 0x5e, 0x1f, 0x03, 0xd7, 0xaa, 0xf6, - 0xbb, 0x56, 0xf5, 0x61, 0xae, 0xf5, 0xff, 0xd1, 0x6c, 0xf5, 0xf2, 0x69, 0xdf, 0xa2, 0xaf, 0x54, - 0xfe, 0xe9, 0x7a, 0x16, 0xf4, 0xbe, 0x76, 0x01, 0xb9, 0xf8, 0xbd, 0xb7, 0xe7, 0x94, 0xec, 0x97, - 0x62, 0xfc, 0xca, 0x69, 0x22, 0x3d, 0xd8, 0x95, 0xff, 0x69, 0xe9, 0xa9, 0x3e, 0x08, 0x0b, 0x7d, - 0x51, 0x81, 0xe9, 0xae, 0x4a, 0x4e, 0xcd, 0xf4, 0xfe, 0x96, 0x73, 0xeb, 0xb4, 0xe5, 0x9c, 0x29, - 0xf8, 0xdb, 0x0a, 0x9c, 0x09, 0x94, 0x57, 0xaa, 0xde, 0xa5, 0x80, 0x7a, 0x8f, 0x74, 0x9f, 0x89, - 0x08, 0x0a, 0xda, 0x89, 0xee, 0x0d, 0x00, 0x04, 0x66, 0xcf, 0xef, 0xab, 0x01, 0xbf, 0x9f, 0xf3, - 0x00, 0x21, 0xe6, 0xe2, 0x11, 0xc0, 0xd4, 0xb6, 0x21, 0xbe, 0xd7, 0x46, 0x48, 0x9f, 0x85, 0xd8, - 0x76, 0x9b, 0x69, 0x38, 0x4e, 0xf1, 0xdb, 0xed, 0x42, 0xdb, 0xb4, 0xaa, 0xc7, 0x46, 0x6c, 0xbb, - 0xad, 0x9f, 0x07, 0x35, 0xcf, 0xbe, 0x92, 0x9d, 0x5a, 0x99, 0xa0, 0x02, 0x79, 0xab, 0xc6, 0x24, - 0xf0, 0x9c, 0x3e, 0x0b, 0xf1, 0x4d, 0x64, 0x1e, 0x32, 0x25, 0x80, 0xca, 0xe0, 0x11, 0x83, 0x8c, - 0xb3, 0x13, 0xbe, 0x04, 0x49, 0x4e, 0xac, 0x5f, 0xc0, 0x88, 0x43, 0x97, 0x9d, 0x96, 0x21, 0xb0, - 0x3a, 0x6c, 0xe5, 0x22, 0xb3, 0xfa, 0x45, 0x48, 0x18, 0xf5, 0xa3, 0x63, 0x97, 0x9d, 0xbc, 0x5b, - 0x8c, 0x4e, 0x67, 0xef, 0xc2, 0xa8, 0xa7, 0xd1, 0xfb, 0x4c, 0xbd, 0x46, 0x2f, 0x4d, 0x9f, 0x11, - 0xd7, 0x13, 0xfe, 0xdc, 0x92, 0x0e, 0xe9, 0xf3, 0x90, 0xdc, 0x75, 0xdb, 0x7e, 0xd1, 0xe7, 0x1d, - 0xa9, 0x37, 0x9a, 0xfd, 0x25, 0x05, 0x92, 0x6b, 0x08, 0xb5, 0x88, 0xc1, 0x9f, 0x84, 0xf8, 0x9a, - 0xfd, 0xba, 0xc5, 0x14, 0x9c, 0x64, 0x16, 0xc5, 0xd3, 0xcc, 0xa6, 0x64, 0x5a, 0x7f, 0x52, 0xb4, - 0xfb, 0x94, 0x67, 0x77, 0x41, 0x8e, 0xd8, 0x3e, 0x2b, 0xd9, 0x9e, 0x39, 0x10, 0x0b, 0x75, 0xd9, - 0xff, 0x3a, 0xa4, 0x84, 0xb3, 0xe8, 0x0b, 0x4c, 0x8d, 0x58, 0x10, 0x28, 0xda, 0x0a, 0x4b, 0x64, - 0x11, 0x8c, 0x49, 0x27, 0xc6, 0x50, 0xc1, 0xc4, 0x3d, 0xa0, 0xc4, 0xcc, 0x8b, 0xb2, 0x99, 0xc3, - 0x45, 0x99, 0xa9, 0x97, 0xa9, 0x8d, 0x88, 0xb9, 0x2f, 0xd0, 0xe0, 0xec, 0xed, 0x44, 0xfc, 0x39, - 0x9b, 0x00, 0xb5, 0x5c, 0x6f, 0x64, 0x9f, 0x05, 0xa0, 0x29, 0x5f, 0xb2, 0x3a, 0xcd, 0x40, 0xd6, - 0x8d, 0x73, 0x03, 0xef, 0x1d, 0xa3, 0x3d, 0xe4, 0x10, 0x11, 0xb9, 0x9f, 0xc2, 0x05, 0x06, 0x68, - 0x8a, 0x11, 0xfc, 0xd3, 0x91, 0xf8, 0xd0, 0x4e, 0x0c, 0x8b, 0x66, 0xa8, 0xe8, 0x5d, 0xe4, 0xe6, - 0x2d, 0xdb, 0x3d, 0x46, 0xed, 0x00, 0x62, 0x45, 0xbf, 0x22, 0x25, 0xec, 0xf8, 0xca, 0x63, 0x1e, - 0xa2, 0x27, 0xe8, 0x4a, 0xf6, 0xeb, 0x44, 0x41, 0xdc, 0x0a, 0x74, 0x5d, 0xa0, 0x3a, 0xc0, 0x05, - 0xea, 0xd7, 0xa4, 0xfe, 0xad, 0x8f, 0x9a, 0x81, 0x5b, 0xcb, 0x9b, 0xd2, 0x7d, 0x4e, 0x7f, 0x65, - 0xe5, 0x7b, 0x4c, 0x6e, 0x53, 0xae, 0xf2, 0xd3, 0x91, 0x2a, 0xf7, 0xe8, 0x6e, 0x4f, 0x6b, 0x53, - 0x75, 0x50, 0x9b, 0xfe, 0x9e, 0xd7, 0x71, 0xd0, 0xdf, 0xbd, 0x20, 0xbf, 0x18, 0xa3, 0x7f, 0x34, - 0xd2, 0xf7, 0x39, 0xa5, 0xe8, 0xa9, 0xba, 0x3a, 0xa8, 0xfb, 0x73, 0xb1, 0x42, 0xc1, 0x53, 0xf7, - 0xfa, 0x29, 0x42, 0x20, 0x17, 0x2b, 0x16, 0xbd, 0xb2, 0x9d, 0xfc, 0xcc, 0xdb, 0x73, 0xca, 0xd7, - 0xde, 0x9e, 0x1b, 0xca, 0xfe, 0xba, 0x02, 0x93, 0x4c, 0x52, 0x08, 0xdc, 0x67, 0x02, 0xca, 0x9f, - 0xe5, 0x35, 0x23, 0xcc, 0x02, 0x3f, 0xb3, 0xe0, 0xfd, 0x96, 0x02, 0x99, 0x2e, 0x5d, 0xb9, 0xbd, - 0x97, 0x07, 0x52, 0x39, 0xa7, 0x94, 0x7e, 0xfe, 0x36, 0xbf, 0x0b, 0x89, 0xbd, 0x7a, 0x13, 0xb5, - 0xf1, 0x4a, 0x80, 0x3f, 0x50, 0x95, 0xf9, 0x66, 0x0e, 0x1d, 0xe2, 0x73, 0x54, 0x39, 0x69, 0x6e, - 0x45, 0xcf, 0x40, 0x7c, 0xcd, 0x74, 0x4d, 0xa2, 0x41, 0xda, 0xab, 0xaf, 0xa6, 0x6b, 0x66, 0xaf, - 0x40, 0x7a, 0xeb, 0x84, 0xbc, 0xab, 0x53, 0x23, 0xaf, 0x90, 0xc8, 0xdd, 0x1f, 0xef, 0x57, 0x2f, - 0x2f, 0x26, 0x92, 0x35, 0xed, 0x9e, 0x92, 0x8b, 0x13, 0x7d, 0x5e, 0x83, 0xf1, 0x6d, 0xac, 0x36, - 0xc1, 0x11, 0xd8, 0x3c, 0x28, 0x5b, 0x72, 0x23, 0x24, 0xb2, 0x1a, 0xca, 0x56, 0xa0, 0x7d, 0x54, - 0x3d, 0xf3, 0x04, 0xda, 0x36, 0xd5, 0x6b, 0xdb, 0x16, 0xe3, 0xc9, 0x71, 0x6d, 0x72, 0x31, 0x9e, - 0x04, 0x6d, 0x8c, 0x9d, 0xf7, 0x3f, 0xa8, 0xa0, 0xd1, 0x56, 0x67, 0x0d, 0x1d, 0xd6, 0xad, 0xba, - 0xdb, 0xdd, 0xaf, 0x7a, 0x1a, 0xeb, 0xcf, 0xc3, 0x28, 0x36, 0xe9, 0x3a, 0xfb, 0xe1, 0x38, 0x6c, - 0xfa, 0xf3, 0xac, 0x45, 0x09, 0x50, 0xb0, 0x01, 0x12, 0x3a, 0x3e, 0x46, 0x5f, 0x07, 0xb5, 0x5c, - 0xde, 0x62, 0x8b, 0xdb, 0x6a, 0x5f, 0x28, 0x7b, 0x51, 0x87, 0x1d, 0xb1, 0x31, 0xe7, 0xc8, 0xc0, - 0x04, 0xfa, 0x2a, 0xc4, 0xca, 0x5b, 0xac, 0xe1, 0xbd, 0x30, 0x08, 0x8d, 0x11, 0x2b, 0x6f, 0xcd, - 0xfc, 0x1b, 0x05, 0xc6, 0xa4, 0x51, 0x3d, 0x0b, 0x69, 0x3a, 0x20, 0x5c, 0xee, 0xb0, 0x21, 0x8d, - 0x71, 0x9d, 0x63, 0x0f, 0xa9, 0xf3, 0x4c, 0x1e, 0x26, 0x02, 0xe3, 0xfa, 0x12, 0xe8, 0xe2, 0x10, - 0x53, 0x82, 0xfe, 0x68, 0x55, 0xc8, 0x4c, 0xf6, 0x71, 0x00, 0xdf, 0xae, 0xde, 0x6f, 0x2d, 0x95, - 0x4b, 0xbb, 0x7b, 0xa5, 0x35, 0x4d, 0xc9, 0x7e, 0x53, 0x81, 0x14, 0x6b, 0x5b, 0xab, 0x76, 0x0b, - 0xe9, 0x05, 0x50, 0xf2, 0x2c, 0x82, 0x1e, 0x4c, 0x6f, 0x25, 0xaf, 0x5f, 0x02, 0xa5, 0x30, 0xb8, - 0xab, 0x95, 0x82, 0xbe, 0x02, 0x4a, 0x91, 0x39, 0x78, 0x30, 0xcf, 0x28, 0xc5, 0xec, 0x1f, 0xab, - 0x30, 0x25, 0xb6, 0xd1, 0xbc, 0x9e, 0x9c, 0x97, 0xef, 0x9b, 0x72, 0xa3, 0x97, 0x57, 0xae, 0xac, - 0x2e, 0xe1, 0x7f, 0xbc, 0x90, 0xcc, 0xca, 0xb7, 0x50, 0x39, 0xf0, 0x44, 0x2e, 0xf7, 0x7a, 0x4f, - 0x24, 0x17, 0x17, 0x18, 0xba, 0xde, 0x13, 0x91, 0x66, 0xbb, 0xde, 0x13, 0x91, 0x66, 0xbb, 0xde, - 0x13, 0x91, 0x66, 0xbb, 0xf6, 0x02, 0xa4, 0xd9, 0xae, 0xf7, 0x44, 0xa4, 0xd9, 0xae, 0xf7, 0x44, - 0xa4, 0xd9, 0xee, 0xf7, 0x44, 0xd8, 0x74, 0xcf, 0xf7, 0x44, 0xe4, 0xf9, 0xee, 0xf7, 0x44, 0xe4, - 0xf9, 0xee, 0xf7, 0x44, 0x72, 0x71, 0xb7, 0xdd, 0x41, 0xbd, 0x77, 0x1d, 0x64, 0x7c, 0xbf, 0x9b, - 0x40, 0xbf, 0x02, 0x6f, 0xc3, 0x04, 0x7d, 0x20, 0x51, 0xb4, 0x2d, 0xd7, 0xac, 0x5b, 0xa8, 0xad, - 0x7f, 0x0c, 0xd2, 0x74, 0x88, 0xde, 0xe6, 0x84, 0xdd, 0x06, 0xd2, 0x79, 0x56, 0x6f, 0x25, 0xe9, - 0xec, 0x9f, 0xc4, 0x61, 0x9a, 0x0e, 0x94, 0xcd, 0x26, 0x92, 0xde, 0x32, 0xba, 0x18, 0xd8, 0x53, - 0x1a, 0xc7, 0xf0, 0xfb, 0xef, 0xce, 0xd1, 0xd1, 0xbc, 0x17, 0x4d, 0x17, 0x03, 0xbb, 0x4b, 0xb2, - 0x9c, 0xbf, 0x00, 0x5d, 0x0c, 0xbc, 0x79, 0x24, 0xcb, 0x79, 0xeb, 0x8d, 0x27, 0xc7, 0xdf, 0x41, - 0x92, 0xe5, 0xd6, 0xbc, 0x28, 0xbb, 0x18, 0x78, 0x1b, 0x49, 0x96, 0x2b, 0x79, 0xf1, 0x76, 0x31, - 0xb0, 0xf7, 0x24, 0xcb, 0xad, 0x7b, 0x91, 0x77, 0x31, 0xb0, 0x0b, 0x25, 0xcb, 0xdd, 0xf6, 0x62, - 0xf0, 0x62, 0xe0, 0x5d, 0x25, 0x59, 0xee, 0x05, 0x2f, 0x1a, 0x2f, 0x06, 0xde, 0x5a, 0x92, 0xe5, - 0x36, 0xbc, 0xb8, 0x5c, 0x08, 0xbe, 0xbf, 0x24, 0x0b, 0xde, 0xf1, 0x23, 0x74, 0x21, 0xf8, 0x26, - 0x93, 0x2c, 0xf9, 0x71, 0x3f, 0x56, 0x17, 0x82, 0xef, 0x34, 0xc9, 0x92, 0x9b, 0x7e, 0xd4, 0x2e, - 0x04, 0xf7, 0xca, 0x64, 0xc9, 0x2d, 0x3f, 0x7e, 0x17, 0x82, 0xbb, 0x66, 0xb2, 0x64, 0xd9, 0x8f, - 0xe4, 0x85, 0xe0, 0xfe, 0x99, 0x2c, 0xb9, 0xed, 0x3f, 0x44, 0xff, 0xfd, 0x40, 0xf8, 0x09, 0x6f, - 0x41, 0x65, 0x03, 0xe1, 0x07, 0x21, 0xa1, 0x17, 0x28, 0x64, 0x82, 0x8c, 0x1f, 0x76, 0xd9, 0x40, - 0xd8, 0x41, 0x48, 0xc8, 0x65, 0x03, 0x21, 0x07, 0x21, 0xe1, 0x96, 0x0d, 0x84, 0x1b, 0x84, 0x84, - 0x5a, 0x36, 0x10, 0x6a, 0x10, 0x12, 0x66, 0xd9, 0x40, 0x98, 0x41, 0x48, 0x88, 0x65, 0x03, 0x21, - 0x06, 0x21, 0xe1, 0x95, 0x0d, 0x84, 0x17, 0x84, 0x84, 0xd6, 0x85, 0x60, 0x68, 0x41, 0x58, 0x58, - 0x5d, 0x08, 0x86, 0x15, 0x84, 0x85, 0xd4, 0x13, 0xc1, 0x90, 0x1a, 0xbd, 0xff, 0xee, 0x5c, 0x02, - 0x0f, 0x09, 0xd1, 0x74, 0x21, 0x18, 0x4d, 0x10, 0x16, 0x49, 0x17, 0x82, 0x91, 0x04, 0x61, 0x51, - 0x74, 0x21, 0x18, 0x45, 0x10, 0x16, 0x41, 0xef, 0x04, 0x23, 0xc8, 0x7f, 0xc7, 0x27, 0x1b, 0xd8, - 0x52, 0x8c, 0x8a, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, - 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, 0x89, 0x20, - 0x75, 0xa0, 0x08, 0x52, 0x7b, 0x45, 0xd0, 0x85, 0xe0, 0x1b, 0x0f, 0x10, 0x56, 0x90, 0x2e, 0x04, - 0xb7, 0x3e, 0xa3, 0x43, 0x48, 0x1d, 0x28, 0x84, 0xd4, 0x5e, 0x21, 0xf4, 0xfb, 0x2a, 0x4c, 0x49, - 0x21, 0xc4, 0xf6, 0x87, 0xde, 0xaf, 0x0a, 0x74, 0x6d, 0x80, 0x17, 0x2c, 0xc2, 0x62, 0xea, 0xda, - 0x00, 0x9b, 0xd4, 0xfd, 0xe2, 0xac, 0xbb, 0x0a, 0x95, 0x06, 0xa8, 0x42, 0xeb, 0x5e, 0x0c, 0x5d, - 0x1b, 0xe0, 0xc5, 0x8b, 0xee, 0xd8, 0xbb, 0xd1, 0xaf, 0x08, 0xbc, 0x30, 0x50, 0x11, 0xd8, 0x18, - 0xa8, 0x08, 0xdc, 0xf1, 0x3d, 0xf8, 0xcb, 0x31, 0x38, 0xe3, 0x7b, 0x90, 0x7e, 0x22, 0x3f, 0xec, - 0x94, 0x15, 0xb6, 0xa8, 0x74, 0xbe, 0x6d, 0x23, 0xb8, 0x31, 0xb6, 0x51, 0xd3, 0x77, 0xe4, 0xcd, - 0xaa, 0xdc, 0x69, 0x37, 0x70, 0x04, 0x8f, 0xb3, 0x87, 0xa1, 0x17, 0x40, 0xdd, 0xa8, 0x39, 0xa4, - 0x5a, 0x84, 0x9d, 0xb6, 0x68, 0xe0, 0x69, 0xdd, 0x80, 0x61, 0x22, 0xee, 0x10, 0xf7, 0x3e, 0xcc, - 0x89, 0xd7, 0x0c, 0xc6, 0x94, 0x7d, 0x47, 0x81, 0x79, 0x29, 0x94, 0xdf, 0x9f, 0x2d, 0x83, 0x5b, - 0x03, 0x6d, 0x19, 0x48, 0x09, 0xe2, 0x6f, 0x1f, 0x3c, 0xd5, 0xbd, 0x53, 0x2d, 0x66, 0x49, 0x70, - 0x2b, 0xe1, 0x2f, 0xc0, 0xb8, 0x7f, 0x05, 0xe4, 0x9e, 0xed, 0x6a, 0xf4, 0xd3, 0xcc, 0xb0, 0xd4, - 0xbc, 0x1a, 0x78, 0x8a, 0xd6, 0x17, 0xe6, 0x65, 0x6b, 0x36, 0x07, 0x13, 0x65, 0xf9, 0x5b, 0x43, - 0x51, 0x0f, 0x23, 0x92, 0xb8, 0x35, 0xbf, 0xf7, 0xe5, 0xb9, 0xa1, 0xec, 0x47, 0x21, 0x2d, 0x7e, - 0x31, 0x28, 0x00, 0x1c, 0xe5, 0xc0, 0x5c, 0xfc, 0xdb, 0x58, 0xfa, 0xef, 0x29, 0x70, 0x56, 0x14, - 0x7f, 0xb1, 0xee, 0x1e, 0x6f, 0x58, 0xb8, 0xa7, 0x7f, 0x16, 0x92, 0x88, 0x39, 0x8e, 0xfd, 0x46, - 0x0b, 0xbb, 0x8f, 0x0c, 0x15, 0x5f, 0x22, 0xff, 0x1a, 0x1e, 0x24, 0xf0, 0x8c, 0x83, 0x9f, 0x76, - 0x65, 0xe6, 0x49, 0x48, 0x50, 0x7e, 0x59, 0xaf, 0xb1, 0x80, 0x5e, 0x5f, 0x09, 0xd1, 0x8b, 0xc4, - 0x91, 0x7e, 0x47, 0xd2, 0x4b, 0xb8, 0x5d, 0x0d, 0x15, 0x5f, 0xe2, 0xc1, 0x57, 0x48, 0xe2, 0xfe, - 0x8f, 0x44, 0x54, 0xb4, 0x92, 0x0b, 0x90, 0x2c, 0x05, 0x65, 0xc2, 0xf5, 0x5c, 0x83, 0x78, 0xd9, - 0xae, 0x91, 0x5f, 0x8f, 0x21, 0x3f, 0x97, 0xcc, 0x8c, 0xcc, 0x7e, 0x3b, 0xf9, 0x22, 0x24, 0x8b, - 0xc7, 0xf5, 0x46, 0xad, 0x8d, 0x2c, 0xb6, 0x67, 0xcf, 0x1e, 0xa1, 0x63, 0x8c, 0xe1, 0xcd, 0x65, - 0x8b, 0x30, 0x59, 0xb6, 0xad, 0xc2, 0x89, 0x2b, 0xd6, 0x8d, 0xa5, 0x40, 0x8a, 0xb0, 0x3d, 0x1f, - 0xf2, 0x2d, 0x11, 0x2c, 0x50, 0x48, 0x7c, 0xe7, 0xdd, 0x39, 0x65, 0xcf, 0x7b, 0x7e, 0xbe, 0x05, - 0x8f, 0xb0, 0xf4, 0xe9, 0xa2, 0x5a, 0x89, 0xa2, 0x1a, 0x65, 0xfb, 0xd4, 0x02, 0xdd, 0x06, 0xa6, - 0xb3, 0x42, 0xe9, 0x1e, 0x4c, 0x33, 0xdc, 0x14, 0xf5, 0xd5, 0x4c, 0x3d, 0x95, 0x66, 0xa1, 0x74, - 0x4b, 0x51, 0x74, 0x01, 0xcd, 0x9e, 0x80, 0x51, 0x6f, 0x4e, 0x88, 0x06, 0x31, 0x53, 0x56, 0x16, - 0xb3, 0x90, 0x12, 0x12, 0x56, 0x4f, 0x80, 0x92, 0xd7, 0x86, 0xf0, 0x7f, 0x05, 0x4d, 0xc1, 0xff, - 0x15, 0xb5, 0xd8, 0xe2, 0x93, 0x30, 0x11, 0x78, 0x7e, 0x89, 0x67, 0xd6, 0x34, 0xc0, 0xff, 0x95, - 0xb4, 0xd4, 0x4c, 0xfc, 0x33, 0xff, 0x68, 0x76, 0x68, 0xf1, 0x16, 0xe8, 0xdd, 0x4f, 0x3a, 0xf5, - 0x61, 0x88, 0xe5, 0x31, 0xe5, 0x23, 0x10, 0x2b, 0x14, 0x34, 0x65, 0x66, 0xe2, 0xaf, 0x7e, 0x61, - 0x3e, 0x55, 0x20, 0xdf, 0x7a, 0xbe, 0x8b, 0xdc, 0x42, 0x81, 0x81, 0x9f, 0x83, 0xb3, 0xa1, 0x4f, - 0x4a, 0x31, 0xbe, 0x58, 0xa4, 0xf8, 0xb5, 0xb5, 0x2e, 0xfc, 0xda, 0x1a, 0xc1, 0x2b, 0x39, 0xbe, - 0xe3, 0x9c, 0xd7, 0x43, 0x9e, 0x4b, 0x66, 0x6a, 0xc2, 0x0e, 0x77, 0x3e, 0xf7, 0x1c, 0x93, 0x2d, - 0x84, 0xca, 0xa2, 0x88, 0x1d, 0xeb, 0x42, 0xae, 0xc8, 0xf0, 0xc5, 0x50, 0xfc, 0x61, 0x60, 0x5b, - 0x55, 0x5e, 0x21, 0x18, 0x49, 0xd1, 0x53, 0x78, 0x2d, 0x94, 0xe4, 0x58, 0x78, 0xd9, 0x7d, 0xcd, - 0x53, 0xb8, 0x14, 0x2a, 0x5b, 0x8f, 0x78, 0xe9, 0xab, 0x94, 0xbb, 0xc4, 0x16, 0xf9, 0xfc, 0x65, - 0xfd, 0x2c, 0xcf, 0x51, 0xa9, 0x02, 0x33, 0x03, 0x71, 0xa9, 0x5c, 0x91, 0x01, 0x0a, 0x3d, 0x01, - 0xbd, 0xad, 0xc4, 0x91, 0xb9, 0x17, 0x18, 0x49, 0xb1, 0x27, 0x49, 0x84, 0xa9, 0x38, 0xbc, 0xb0, - 0x77, 0xef, 0xbd, 0xd9, 0xa1, 0x6f, 0xbf, 0x37, 0x3b, 0xf4, 0x5f, 0xde, 0x9b, 0x1d, 0xfa, 0xee, - 0x7b, 0xb3, 0xca, 0x0f, 0xde, 0x9b, 0x55, 0x7e, 0xf4, 0xde, 0xac, 0xf2, 0x93, 0xf7, 0x66, 0x95, - 0xb7, 0xee, 0xcf, 0x2a, 0x5f, 0xbb, 0x3f, 0xab, 0x7c, 0xfd, 0xfe, 0xac, 0xf2, 0x3b, 0xf7, 0x67, - 0x95, 0x77, 0xee, 0xcf, 0x2a, 0xf7, 0xee, 0xcf, 0x2a, 0xdf, 0xbe, 0x3f, 0xab, 0x7c, 0xf7, 0xfe, - 0xac, 0xf2, 0x83, 0xfb, 0xb3, 0x43, 0x3f, 0xba, 0x3f, 0xab, 0xfc, 0xe4, 0xfe, 0xec, 0xd0, 0x5b, - 0xdf, 0x9b, 0x1d, 0x7a, 0xfb, 0x7b, 0xb3, 0x43, 0x5f, 0xfb, 0xde, 0xac, 0x02, 0x7f, 0xb8, 0x0a, - 0xf3, 0xec, 0x9b, 0x64, 0xde, 0x37, 0x63, 0x2f, 0xb9, 0xc7, 0x88, 0xb4, 0x04, 0x57, 0xf8, 0x4f, - 0x50, 0x79, 0x03, 0xa7, 0xfc, 0x56, 0xd9, 0xcc, 0x83, 0x7e, 0x87, 0x2d, 0xfb, 0x6f, 0x13, 0x30, - 0xc2, 0x9f, 0x05, 0x87, 0xfd, 0x9e, 0xf6, 0x55, 0x48, 0x1e, 0xd7, 0x1b, 0x66, 0xbb, 0xee, 0x9e, - 0xb0, 0x87, 0xa0, 0x8f, 0x2e, 0xf9, 0x6a, 0xf3, 0xc7, 0xa6, 0x2f, 0x74, 0x9a, 0x76, 0xa7, 0x6d, - 0x78, 0xa2, 0xfa, 0x3c, 0xa4, 0x8f, 0x51, 0xfd, 0xe8, 0xd8, 0xad, 0xd4, 0xad, 0x4a, 0xb5, 0x49, - 0x7a, 0xe5, 0x31, 0x03, 0xe8, 0xd8, 0x86, 0x55, 0x6c, 0xe2, 0x93, 0xd5, 0x4c, 0xd7, 0x24, 0xf7, - 0xe8, 0x69, 0x83, 0x7c, 0xd6, 0xcf, 0x43, 0xba, 0x8d, 0x9c, 0x4e, 0xc3, 0xad, 0x54, 0xed, 0x8e, - 0xe5, 0x92, 0x6e, 0x56, 0x35, 0x52, 0x74, 0xac, 0x88, 0x87, 0xf4, 0x27, 0x60, 0xcc, 0x6d, 0x77, - 0x50, 0xc5, 0xa9, 0xda, 0xae, 0xd3, 0x34, 0x2d, 0xd2, 0xcd, 0x26, 0x8d, 0x34, 0x1e, 0xdc, 0x65, - 0x63, 0xe4, 0xa7, 0xd8, 0xab, 0x76, 0x1b, 0x91, 0x9b, 0xe9, 0x98, 0x41, 0x0f, 0x74, 0x0d, 0xd4, - 0x57, 0xd1, 0x09, 0xb9, 0x5d, 0x8b, 0x1b, 0xf8, 0xa3, 0xfe, 0x34, 0x0c, 0xd3, 0xbf, 0xa5, 0x42, - 0x7a, 0x6b, 0xb2, 0x75, 0xed, 0x5d, 0x1a, 0x7d, 0x44, 0x6b, 0x30, 0x01, 0xfd, 0x26, 0x8c, 0xb8, - 0xa8, 0xdd, 0x36, 0xeb, 0x16, 0xb9, 0x75, 0x4a, 0xad, 0xcc, 0x85, 0x98, 0x61, 0x8f, 0x4a, 0x90, - 0x9f, 0xa4, 0x35, 0xb8, 0xbc, 0x7e, 0x15, 0xd2, 0x44, 0x6e, 0xa5, 0x42, 0xff, 0xde, 0x4c, 0xaa, - 0x67, 0x34, 0xa7, 0xa8, 0x1c, 0xdf, 0x29, 0xe0, 0x30, 0xfa, 0x73, 0x7c, 0x63, 0xe4, 0xb4, 0x4f, - 0x84, 0x9c, 0x96, 0x14, 0xde, 0x15, 0xd2, 0x34, 0xd2, 0x53, 0x33, 0x1e, 0xfa, 0x83, 0x7d, 0x5b, - 0x90, 0x16, 0xf5, 0xe2, 0x66, 0xa0, 0xcd, 0x0f, 0x31, 0xc3, 0x53, 0xfe, 0x6f, 0xf9, 0xf7, 0xb0, - 0x02, 0x9d, 0xcf, 0xc5, 0x6e, 0x28, 0x33, 0x3b, 0xa0, 0x05, 0xcf, 0x17, 0x42, 0x79, 0x51, 0xa6, - 0xd4, 0xc4, 0x8b, 0x25, 0xcf, 0xc9, 0x7d, 0xc6, 0xec, 0xf3, 0x30, 0x4c, 0xe3, 0x47, 0x4f, 0xc1, - 0x88, 0xff, 0x4b, 0x8f, 0x49, 0x88, 0xef, 0xec, 0x97, 0x77, 0xe9, 0x4f, 0xb6, 0xee, 0x6e, 0xe6, - 0x77, 0x76, 0xf7, 0x36, 0x8a, 0x1f, 0xd7, 0x62, 0xfa, 0x04, 0xa4, 0x0a, 0x1b, 0x9b, 0x9b, 0x95, - 0x42, 0x7e, 0x63, 0xb3, 0x74, 0x57, 0x53, 0xb3, 0xb3, 0x30, 0x4c, 0xf5, 0x24, 0x3f, 0x3d, 0xd7, - 0xb1, 0xac, 0x13, 0xde, 0x3c, 0x90, 0x83, 0xec, 0x37, 0x74, 0x18, 0xc9, 0x37, 0x1a, 0x5b, 0x66, - 0xcb, 0xd1, 0x5f, 0x84, 0x49, 0xfa, 0xc3, 0x15, 0x7b, 0xf6, 0x1a, 0xf9, 0x85, 0x44, 0x5c, 0x1a, - 0x14, 0xf6, 0x37, 0x0c, 0xfc, 0xeb, 0x66, 0xe2, 0x4b, 0x5d, 0xb2, 0xd4, 0xc0, 0xdd, 0x1c, 0xfa, - 0x1e, 0x68, 0x7c, 0x70, 0xbd, 0x61, 0x9b, 0x2e, 0xe6, 0x8d, 0xb1, 0x1f, 0x30, 0xec, 0xcd, 0xcb, - 0x45, 0x29, 0x6d, 0x17, 0x83, 0xfe, 0x31, 0x48, 0x6e, 0x58, 0xee, 0x95, 0x15, 0xcc, 0xc6, 0xff, - 0x3e, 0x50, 0x37, 0x1b, 0x17, 0xa1, 0x2c, 0x1e, 0x82, 0xa1, 0xaf, 0xad, 0x62, 0x74, 0xbc, 0x1f, - 0x9a, 0x88, 0xf8, 0x68, 0x72, 0xa8, 0x3f, 0x0f, 0xa3, 0xf8, 0xde, 0x84, 0x9e, 0x3c, 0xc1, 0x1b, - 0xd7, 0x2e, 0xb8, 0x27, 0x43, 0xf1, 0x3e, 0x86, 0x13, 0xd0, 0xf3, 0x0f, 0xf7, 0x25, 0x10, 0x14, - 0xf0, 0x31, 0x98, 0x60, 0xd7, 0xd3, 0x60, 0xa4, 0x27, 0xc1, 0x6e, 0x40, 0x83, 0x5d, 0x51, 0x83, - 0x5d, 0x4f, 0x83, 0x64, 0x5f, 0x02, 0x51, 0x03, 0xef, 0x58, 0x2f, 0x00, 0xac, 0xd7, 0xdf, 0x40, - 0x35, 0xaa, 0x02, 0xfd, 0xeb, 0x41, 0xd9, 0x10, 0x06, 0x5f, 0x88, 0x52, 0x08, 0x28, 0xbd, 0x04, - 0xa9, 0xdd, 0x43, 0x9f, 0x04, 0xba, 0xf2, 0xd8, 0x53, 0xe3, 0x30, 0xc0, 0x22, 0xe2, 0x3c, 0x55, - 0xe8, 0xc5, 0xa4, 0xfa, 0xab, 0x22, 0x5c, 0x8d, 0x80, 0xf2, 0x55, 0xa1, 0x24, 0xe9, 0x08, 0x55, - 0x04, 0x16, 0x11, 0x87, 0x8b, 0x61, 0xc1, 0xb6, 0xb1, 0x24, 0xab, 0x4a, 0x73, 0x21, 0x14, 0x4c, - 0x82, 0x15, 0x43, 0x76, 0x44, 0x3c, 0x42, 0x82, 0x1c, 0x83, 0xc7, 0x7b, 0x7b, 0x84, 0xcb, 0x70, - 0x8f, 0xf0, 0x63, 0x31, 0xcf, 0xc8, 0xfb, 0xac, 0x98, 0x67, 0x22, 0x32, 0xcf, 0xb8, 0x68, 0x20, - 0xcf, 0xf8, 0xb0, 0xfe, 0x09, 0x98, 0xe0, 0x63, 0xb8, 0x3c, 0x61, 0x52, 0x8d, 0xfd, 0x7d, 0xb5, - 0xde, 0xa4, 0x4c, 0x92, 0x72, 0x06, 0xf1, 0x7a, 0x19, 0xc6, 0xf9, 0xd0, 0x96, 0x43, 0x2e, 0x77, - 0x92, 0xfd, 0xe9, 0x8c, 0xde, 0x8c, 0x54, 0x90, 0x12, 0x06, 0xd0, 0x33, 0x6b, 0x30, 0x1d, 0x5e, - 0x8d, 0xc4, 0xf2, 0x3b, 0x4a, 0xcb, 0xef, 0x19, 0xb1, 0xfc, 0x2a, 0x62, 0xf9, 0x2e, 0xc2, 0xd9, - 0xd0, 0xda, 0x13, 0x45, 0x12, 0x13, 0x49, 0x6e, 0xc1, 0x98, 0x54, 0x72, 0x44, 0x70, 0x22, 0x04, - 0x9c, 0xe8, 0x06, 0xfb, 0xa1, 0x15, 0xb2, 0x7a, 0x48, 0x60, 0x55, 0x04, 0x7f, 0x0c, 0xc6, 0xe5, - 0x7a, 0x23, 0xa2, 0xc7, 0x42, 0xd0, 0x63, 0x21, 0xe8, 0xf0, 0x73, 0xc7, 0x43, 0xd0, 0xf1, 0x00, - 0x7a, 0xb7, 0xe7, 0xb9, 0x27, 0x43, 0xd0, 0x93, 0x21, 0xe8, 0xf0, 0x73, 0xeb, 0x21, 0x68, 0x5d, - 0x44, 0x3f, 0x0b, 0x13, 0x81, 0x12, 0x23, 0xc2, 0x47, 0x42, 0xe0, 0x23, 0x22, 0xfc, 0x39, 0xd0, - 0x82, 0xc5, 0x45, 0xc4, 0x4f, 0x84, 0xe0, 0x27, 0xc2, 0x4e, 0x1f, 0xae, 0xfd, 0x70, 0x08, 0x7c, - 0x38, 0xf4, 0xf4, 0xe1, 0x78, 0x2d, 0x04, 0xaf, 0x89, 0xf8, 0x1c, 0xa4, 0xc5, 0x6a, 0x22, 0x62, - 0x93, 0x21, 0xd8, 0x64, 0xd0, 0xee, 0x52, 0x31, 0x89, 0x8a, 0xf4, 0xd1, 0x1e, 0xe9, 0x22, 0x95, - 0x90, 0x28, 0x92, 0xb4, 0x48, 0xf2, 0x49, 0x38, 0x13, 0x56, 0x32, 0x42, 0x38, 0x16, 0x44, 0x8e, - 0x71, 0xdc, 0x23, 0xfa, 0xcd, 0x9e, 0xd9, 0x0a, 0x34, 0x4e, 0x33, 0x2f, 0xc3, 0x54, 0x48, 0xe1, - 0x08, 0xa1, 0x5d, 0x92, 0xbb, 0xb1, 0x8c, 0x40, 0x4b, 0x8a, 0x40, 0xdd, 0x3a, 0xda, 0xb1, 0xeb, - 0x96, 0x2b, 0x76, 0x65, 0xdf, 0x9c, 0x82, 0x71, 0x56, 0x9e, 0xb6, 0xdb, 0x35, 0xd4, 0x46, 0x35, - 0xfd, 0xcf, 0xf5, 0xee, 0x9d, 0x96, 0xbb, 0x8b, 0x1a, 0x43, 0x9d, 0xa2, 0x85, 0x7a, 0xb9, 0x67, - 0x0b, 0x75, 0x29, 0x9a, 0x3e, 0xaa, 0x93, 0x2a, 0x76, 0x75, 0x52, 0x4f, 0xf5, 0x26, 0xed, 0xd5, - 0x50, 0x15, 0xbb, 0x1a, 0xaa, 0xfe, 0x24, 0xa1, 0x7d, 0xd5, 0x7a, 0x77, 0x5f, 0xb5, 0xd0, 0x9b, - 0xa5, 0x77, 0x7b, 0xb5, 0xde, 0xdd, 0x5e, 0x45, 0xf0, 0x84, 0x77, 0x59, 0xeb, 0xdd, 0x5d, 0x56, - 0x1f, 0x9e, 0xde, 0xcd, 0xd6, 0x7a, 0x77, 0xb3, 0x15, 0xc1, 0x13, 0xde, 0x73, 0x6d, 0x84, 0xf4, - 0x5c, 0x4f, 0xf7, 0x26, 0xea, 0xd7, 0x7a, 0x6d, 0x86, 0xb5, 0x5e, 0x8b, 0x7d, 0x94, 0xea, 0xdb, - 0x81, 0x6d, 0x84, 0x74, 0x60, 0x51, 0x8a, 0xf5, 0x68, 0xc4, 0x36, 0xc3, 0x1a, 0xb1, 0x48, 0xc5, - 0x7a, 0xf5, 0x63, 0xbf, 0x10, 0xec, 0xc7, 0x2e, 0xf6, 0x66, 0x0a, 0x6f, 0xcb, 0xd6, 0xbb, 0xdb, - 0xb2, 0x85, 0xa8, 0x9c, 0x0b, 0xeb, 0xce, 0x5e, 0xee, 0xd9, 0x9d, 0x0d, 0x90, 0xc2, 0x51, 0x4d, - 0xda, 0x4b, 0xbd, 0x9a, 0xb4, 0xa5, 0x68, 0xee, 0xfe, 0xbd, 0xda, 0x7e, 0x8f, 0x5e, 0xed, 0x99, - 0x68, 0xe2, 0x0f, 0x5b, 0xb6, 0x0f, 0x5b, 0xb6, 0x0f, 0x5b, 0xb6, 0x0f, 0x5b, 0xb6, 0x9f, 0x7f, - 0xcb, 0x96, 0x8b, 0x7f, 0xf6, 0xcb, 0x73, 0x4a, 0xf6, 0x3f, 0xab, 0xde, 0x5f, 0xfb, 0x7a, 0xb1, - 0xee, 0x1e, 0xe3, 0xf2, 0xb6, 0x05, 0x69, 0xf2, 0xeb, 0xb3, 0x4d, 0xb3, 0xd5, 0xaa, 0x5b, 0x47, - 0xac, 0x67, 0x5b, 0xec, 0x7e, 0x94, 0xc8, 0x00, 0xe4, 0x2f, 0x9d, 0x6c, 0x51, 0x61, 0xb6, 0xdc, - 0x58, 0xfe, 0x88, 0x7e, 0x07, 0x52, 0x4d, 0xe7, 0xc8, 0x63, 0x8b, 0x75, 0x2d, 0x84, 0x01, 0x36, - 0x7a, 0xa5, 0x3e, 0x19, 0x34, 0xbd, 0x01, 0xac, 0xda, 0xc1, 0x89, 0xeb, 0xab, 0xa6, 0x46, 0xa9, - 0x86, 0x7d, 0x2a, 0xab, 0x76, 0xe0, 0x8f, 0xe0, 0xb0, 0x0d, 0xea, 0x1e, 0x55, 0xe9, 0xa4, 0xe0, - 0x79, 0x11, 0x26, 0x02, 0xda, 0x86, 0xe4, 0xfc, 0x03, 0xf8, 0x06, 0x2b, 0x16, 0xd4, 0x3c, 0x2a, - 0x27, 0xc4, 0x80, 0xcc, 0x3e, 0x0e, 0x63, 0x12, 0xb7, 0x9e, 0x06, 0xe5, 0x90, 0x7d, 0x99, 0x52, - 0x39, 0xcc, 0x7e, 0x49, 0x81, 0x14, 0x7b, 0x91, 0x60, 0xc7, 0xac, 0xb7, 0xf5, 0x17, 0x20, 0xde, - 0xe0, 0x5f, 0x68, 0x7a, 0xd0, 0x2f, 0xcf, 0x12, 0x06, 0x7d, 0x1d, 0x12, 0x6d, 0xef, 0x0b, 0x4f, - 0x0f, 0xf4, 0x8d, 0x58, 0x02, 0xcf, 0xde, 0x53, 0x60, 0x92, 0xbd, 0xe7, 0xea, 0xb0, 0xd7, 0x9f, - 0xcd, 0xd6, 0xcc, 0x37, 0x14, 0x18, 0xf5, 0x8e, 0xf4, 0x03, 0x18, 0xf7, 0x0e, 0xe8, 0x2b, 0xf6, - 0x34, 0x52, 0x73, 0x82, 0x85, 0xbb, 0x38, 0x96, 0x42, 0x3e, 0xd1, 0xad, 0x28, 0xba, 0x26, 0xcb, - 0x83, 0x33, 0x79, 0x98, 0x0a, 0x11, 0x3b, 0xcd, 0x82, 0x9c, 0x3d, 0x0f, 0xa3, 0x65, 0xdb, 0xa5, - 0xbf, 0x9b, 0xa3, 0x9f, 0x11, 0x76, 0x15, 0x0a, 0x31, 0x6d, 0x88, 0x80, 0x17, 0xcf, 0xc3, 0x08, - 0xcb, 0x7e, 0x7d, 0x18, 0x62, 0x5b, 0x79, 0x6d, 0x88, 0xfc, 0x5f, 0xd0, 0x14, 0xf2, 0x7f, 0x51, - 0x8b, 0x15, 0x36, 0x1f, 0x70, 0x9f, 0x69, 0x28, 0x6c, 0x9f, 0xe9, 0x60, 0x98, 0x9a, 0xe7, 0xff, - 0x07, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xd5, 0xc9, 0x94, 0xea, 0x81, 0x00, 0x00, + 0x48, 0x1a, 0xa9, 0xba, 0xe3, 0x3d, 0x61, 0xcc, 0x7e, 0x25, 0x06, 0xe3, 0xc1, 0xa7, 0xfc, 0xfa, + 0x1a, 0x24, 0x1b, 0x76, 0xd5, 0x24, 0xa1, 0x45, 0xb7, 0x98, 0x16, 0x22, 0x36, 0x06, 0x96, 0x36, + 0x99, 0xbc, 0xe1, 0x21, 0x67, 0xfe, 0xa3, 0x02, 0x49, 0x3e, 0xac, 0x4f, 0x43, 0xbc, 0x65, 0xba, + 0xc7, 0x84, 0x2e, 0x51, 0x88, 0x69, 0x8a, 0x41, 0x8e, 0xf1, 0xb8, 0xd3, 0x32, 0x2d, 0x12, 0x02, + 0x6c, 0x1c, 0x1f, 0x63, 0xbf, 0x36, 0x90, 0x59, 0x23, 0xb7, 0x1f, 0x76, 0xb3, 0x89, 0x2c, 0xd7, + 0xe1, 0x7e, 0x65, 0xe3, 0x45, 0x36, 0xac, 0x7f, 0x04, 0x26, 0xdd, 0xb6, 0x59, 0x6f, 0x04, 0x64, + 0xe3, 0x44, 0x56, 0xe3, 0x13, 0x9e, 0x70, 0x0e, 0x1e, 0xe6, 0xbc, 0x35, 0xe4, 0x9a, 0xd5, 0x63, + 0x54, 0xf3, 0x41, 0xc3, 0xe4, 0x31, 0xc3, 0x43, 0x4c, 0x60, 0x8d, 0xcd, 0x73, 0x6c, 0xf6, 0x0f, + 0x15, 0x98, 0xe4, 0x37, 0x4c, 0x35, 0xcf, 0x58, 0x5b, 0x00, 0xa6, 0x65, 0xd9, 0xae, 0x68, 0xae, + 0xee, 0x50, 0xee, 0xc2, 0x2d, 0xe5, 0x3d, 0x90, 0x21, 0x10, 0xcc, 0x34, 0x01, 0xfc, 0x99, 0x9e, + 0x66, 0x9b, 0x83, 0x14, 0xdb, 0xc2, 0x21, 0xfb, 0x80, 0xf4, 0x16, 0x1b, 0xe8, 0x10, 0xbe, 0xb3, + 0xd2, 0xcf, 0x40, 0xe2, 0x00, 0x1d, 0xd5, 0x2d, 0xf6, 0x60, 0x96, 0x1e, 0xf0, 0x07, 0x21, 0x71, + 0xef, 0x41, 0x48, 0xe1, 0x45, 0x98, 0xaa, 0xda, 0x4d, 0x59, 0xdd, 0x82, 0x26, 0xdd, 0xe6, 0x3b, + 0xcf, 0x29, 0x9f, 0x02, 0xbf, 0xc5, 0xfc, 0xb1, 0xa2, 0xfc, 0x6a, 0x4c, 0xbd, 0xbd, 0x53, 0xf8, + 0xad, 0xd8, 0xcc, 0x6d, 0x0a, 0xdd, 0xe1, 0x57, 0x6a, 0xa0, 0xc3, 0x06, 0xaa, 0x62, 0xed, 0xe1, + 0x37, 0x3e, 0x02, 0x4f, 0x1d, 0xd5, 0xdd, 0xe3, 0xce, 0xc1, 0x52, 0xd5, 0x6e, 0x5e, 0x3a, 0xb2, + 0x8f, 0x6c, 0x7f, 0xeb, 0x13, 0x1f, 0x91, 0x03, 0xf2, 0x89, 0x6d, 0x7f, 0x8e, 0x7a, 0xa3, 0x33, + 0x91, 0x7b, 0xa5, 0xb9, 0x32, 0x4c, 0x31, 0xe1, 0x0a, 0xd9, 0x7f, 0xa1, 0x77, 0x11, 0x7a, 0xdf, + 0x67, 0x58, 0x99, 0xdf, 0xfe, 0x3e, 0x59, 0xae, 0x8d, 0x49, 0x06, 0xc5, 0x73, 0xf4, 0x46, 0x23, + 0x67, 0xc0, 0xd9, 0x00, 0x1f, 0x4d, 0x4d, 0xd4, 0x8e, 0x60, 0xfc, 0x16, 0x63, 0x9c, 0x12, 0x18, + 0x77, 0x19, 0x34, 0x57, 0x84, 0xb1, 0xd3, 0x70, 0xfd, 0x3b, 0xc6, 0x95, 0x46, 0x22, 0xc9, 0x6d, + 0x98, 0x20, 0x24, 0xd5, 0x8e, 0xe3, 0xda, 0x4d, 0x52, 0xf7, 0xfa, 0xd3, 0xfc, 0xfb, 0xef, 0xd3, + 0x5c, 0x19, 0xc7, 0xb0, 0xa2, 0x87, 0xca, 0xe5, 0x80, 0x6c, 0x39, 0xd5, 0x50, 0xb5, 0x11, 0xc1, + 0x70, 0x8f, 0x29, 0xe2, 0xc9, 0xe7, 0x3e, 0x09, 0x67, 0xf0, 0x67, 0x52, 0x96, 0x44, 0x4d, 0xa2, + 0x1f, 0x78, 0x65, 0xfe, 0xf0, 0xd3, 0x34, 0x1d, 0xa7, 0x3c, 0x02, 0x41, 0x27, 0xc1, 0x8b, 0x47, + 0xc8, 0x75, 0x51, 0xdb, 0xa9, 0x98, 0x8d, 0x30, 0xf5, 0x84, 0x27, 0x06, 0x99, 0x5f, 0xf9, 0x61, + 0xd0, 0x8b, 0xb7, 0x29, 0x32, 0xdf, 0x68, 0xe4, 0xf6, 0xe1, 0xa1, 0x90, 0xa8, 0x18, 0x80, 0xf3, + 0x73, 0x8c, 0xf3, 0x4c, 0x57, 0x64, 0x60, 0xda, 0x1d, 0xe0, 0xe3, 0x9e, 0x2f, 0x07, 0xe0, 0xfc, + 0x47, 0x8c, 0x53, 0x67, 0x58, 0xee, 0x52, 0xcc, 0x78, 0x07, 0x26, 0x5f, 0x41, 0xed, 0x03, 0xdb, + 0x61, 0x4f, 0x69, 0x06, 0xa0, 0xfb, 0x3c, 0xa3, 0x9b, 0x60, 0x40, 0xf2, 0xd8, 0x06, 0x73, 0xdd, + 0x84, 0xe4, 0xa1, 0x59, 0x45, 0x03, 0x50, 0x7c, 0x81, 0x51, 0x8c, 0x60, 0x79, 0x0c, 0xcd, 0x43, + 0xfa, 0xc8, 0x66, 0x2b, 0x53, 0x34, 0xfc, 0x8b, 0x0c, 0x9e, 0xe2, 0x18, 0x46, 0xd1, 0xb2, 0x5b, + 0x9d, 0x06, 0x5e, 0xb6, 0xa2, 0x29, 0xbe, 0xc4, 0x29, 0x38, 0x86, 0x51, 0x9c, 0xc2, 0xac, 0x6f, + 0x72, 0x0a, 0x47, 0xb0, 0xe7, 0xb3, 0x90, 0xb2, 0xad, 0xc6, 0x89, 0x6d, 0x0d, 0xa2, 0xc4, 0x97, + 0x19, 0x03, 0x30, 0x08, 0x26, 0xb8, 0x05, 0xa3, 0x83, 0x3a, 0xe2, 0xd7, 0x7f, 0xc8, 0xd3, 0x83, + 0x7b, 0xe0, 0x36, 0x4c, 0xf0, 0x02, 0x55, 0xb7, 0xad, 0x01, 0x28, 0x7e, 0x83, 0x51, 0x8c, 0x0b, + 0x30, 0x76, 0x19, 0x2e, 0x72, 0xdc, 0x23, 0x34, 0x08, 0xc9, 0x57, 0xf8, 0x65, 0x30, 0x08, 0x33, + 0xe5, 0x01, 0xb2, 0xaa, 0xc7, 0x83, 0x31, 0x7c, 0x95, 0x9b, 0x92, 0x63, 0x30, 0x45, 0x11, 0xc6, + 0x9a, 0x66, 0xdb, 0x39, 0x36, 0x1b, 0x03, 0xb9, 0xe3, 0x37, 0x19, 0x47, 0xda, 0x03, 0x31, 0x8b, + 0x74, 0xac, 0xd3, 0xd0, 0xfc, 0x16, 0xb7, 0x88, 0x00, 0x63, 0xa9, 0xe7, 0xb8, 0xe4, 0x91, 0xd6, + 0x69, 0xd8, 0xfe, 0x31, 0x4f, 0x3d, 0x8a, 0xdd, 0x12, 0x19, 0x6f, 0xc1, 0xa8, 0x53, 0x7f, 0x7d, + 0x20, 0x9a, 0x7f, 0xc2, 0x3d, 0x4d, 0x00, 0x18, 0x7c, 0x17, 0x1e, 0x0e, 0x5d, 0x26, 0x06, 0x20, + 0xfb, 0xa7, 0x8c, 0x6c, 0x3a, 0x64, 0xa9, 0x60, 0x25, 0xe1, 0xb4, 0x94, 0xff, 0x8c, 0x97, 0x04, + 0x24, 0x71, 0xed, 0xe0, 0x7b, 0x05, 0xc7, 0x3c, 0x3c, 0x9d, 0xd5, 0xfe, 0x39, 0xb7, 0x1a, 0xc5, + 0x06, 0xac, 0xb6, 0x07, 0xd3, 0x8c, 0xf1, 0x74, 0x7e, 0xfd, 0x1a, 0x2f, 0xac, 0x14, 0xbd, 0x1f, + 0xf4, 0xee, 0x8b, 0x30, 0xe3, 0x99, 0x93, 0x37, 0xa5, 0x4e, 0xa5, 0x69, 0xb6, 0x06, 0x60, 0xfe, + 0x6d, 0xc6, 0xcc, 0x2b, 0xbe, 0xd7, 0xd5, 0x3a, 0x5b, 0x66, 0x0b, 0x93, 0xbf, 0x00, 0x19, 0x4e, + 0xde, 0xb1, 0xda, 0xa8, 0x6a, 0x1f, 0x59, 0xf5, 0xd7, 0x51, 0x6d, 0x00, 0xea, 0xaf, 0x4b, 0xae, + 0xda, 0x17, 0xe0, 0x98, 0x79, 0x03, 0x34, 0xaf, 0x57, 0xa9, 0xd4, 0x9b, 0x2d, 0xbb, 0xed, 0x46, + 0x30, 0xfe, 0x0e, 0xf7, 0x94, 0x87, 0xdb, 0x20, 0xb0, 0x5c, 0x09, 0xc6, 0xc9, 0xe1, 0xa0, 0x21, + 0xf9, 0xbb, 0x8c, 0x68, 0xcc, 0x47, 0xb1, 0xc2, 0x51, 0xb5, 0x9b, 0x2d, 0xb3, 0x3d, 0x48, 0xfd, + 0xfb, 0x17, 0xbc, 0x70, 0x30, 0x08, 0x2b, 0x1c, 0xee, 0x49, 0x0b, 0xe1, 0xd5, 0x7e, 0x00, 0x86, + 0x6f, 0xf0, 0xc2, 0xc1, 0x31, 0x8c, 0x82, 0x37, 0x0c, 0x03, 0x50, 0xfc, 0x4b, 0x4e, 0xc1, 0x31, + 0x98, 0xe2, 0x13, 0xfe, 0x42, 0xdb, 0x46, 0x47, 0x75, 0xc7, 0x6d, 0xd3, 0x56, 0xb8, 0x3f, 0xd5, + 0xef, 0xfd, 0x30, 0xd8, 0x84, 0x19, 0x02, 0x14, 0x57, 0x22, 0xf6, 0x08, 0x95, 0xdc, 0x29, 0x45, + 0x2b, 0xf6, 0xfb, 0xbc, 0x12, 0x09, 0x30, 0xac, 0x9b, 0xd0, 0x21, 0x62, 0xb3, 0x57, 0xf1, 0xfd, + 0xc1, 0x00, 0x74, 0xdf, 0x94, 0x94, 0xdb, 0xe5, 0x58, 0xcc, 0x29, 0xf4, 0x3f, 0x1d, 0xeb, 0x65, + 0x74, 0x32, 0x50, 0x74, 0xfe, 0x2b, 0xa9, 0xff, 0xd9, 0xa7, 0x48, 0x5a, 0x43, 0x26, 0xa4, 0x7e, + 0x4a, 0x8f, 0x7a, 0x59, 0x27, 0xf3, 0x97, 0xdf, 0x65, 0xd7, 0x1b, 0x6c, 0xa7, 0x72, 0x9b, 0x38, + 0xc8, 0x83, 0x4d, 0x4f, 0x34, 0xd9, 0xa7, 0xdf, 0xf5, 0xe2, 0x3c, 0xd0, 0xf3, 0xe4, 0xd6, 0x61, + 0x2c, 0xd0, 0xf0, 0x44, 0x53, 0xfd, 0x15, 0x46, 0x95, 0x16, 0xfb, 0x9d, 0xdc, 0x55, 0x88, 0xe3, + 0xe6, 0x25, 0x1a, 0xfe, 0x57, 0x19, 0x9c, 0x88, 0xe7, 0x9e, 0x86, 0x24, 0x6f, 0x5a, 0xa2, 0xa1, + 0xbf, 0xc8, 0xa0, 0x1e, 0x04, 0xc3, 0x79, 0xc3, 0x12, 0x0d, 0xff, 0x6b, 0x1c, 0xce, 0x21, 0x18, + 0x3e, 0xb8, 0x09, 0xdf, 0xfa, 0x1b, 0x71, 0xb6, 0xe8, 0x70, 0xdb, 0xdd, 0x82, 0x11, 0xd6, 0xa9, + 0x44, 0xa3, 0x7f, 0x89, 0x9d, 0x9c, 0x23, 0x72, 0xd7, 0x21, 0x31, 0xa0, 0xc1, 0xff, 0x26, 0x83, + 0x52, 0xf9, 0x5c, 0x11, 0x52, 0x42, 0x77, 0x12, 0x0d, 0xff, 0x5b, 0x0c, 0x2e, 0xa2, 0xb0, 0xea, + 0xac, 0x3b, 0x89, 0x26, 0xf8, 0xdb, 0x5c, 0x75, 0x86, 0xc0, 0x66, 0xe3, 0x8d, 0x49, 0x34, 0xfa, + 0xef, 0x70, 0xab, 0x73, 0x48, 0xee, 0x59, 0x18, 0xf5, 0x16, 0x9b, 0x68, 0xfc, 0xdf, 0x65, 0x78, + 0x1f, 0x83, 0x2d, 0x20, 0x2c, 0x76, 0xd1, 0x14, 0x7f, 0x8f, 0x5b, 0x40, 0x40, 0xe1, 0x34, 0x92, + 0x1b, 0x98, 0x68, 0xa6, 0x5f, 0xe6, 0x69, 0x24, 0xf5, 0x2f, 0xd8, 0x9b, 0xa4, 0xe6, 0x47, 0x53, + 0xfc, 0x7d, 0xee, 0x4d, 0x22, 0x8f, 0xd5, 0x90, 0x3b, 0x82, 0x68, 0x8e, 0x7f, 0xc8, 0xd5, 0x90, + 0x1a, 0x82, 0xdc, 0x0e, 0xe8, 0xdd, 0xdd, 0x40, 0x34, 0xdf, 0x67, 0x19, 0xdf, 0x64, 0x57, 0x33, + 0x90, 0x7b, 0x1e, 0xa6, 0xc3, 0x3b, 0x81, 0x68, 0xd6, 0x5f, 0x79, 0x57, 0xba, 0x77, 0x13, 0x1b, + 0x81, 0xdc, 0x9e, 0xbf, 0xa4, 0x88, 0x5d, 0x40, 0x34, 0xed, 0xe7, 0xde, 0x0d, 0x16, 0x6e, 0xb1, + 0x09, 0xc8, 0xe5, 0x01, 0xfc, 0x05, 0x38, 0x9a, 0xeb, 0xf3, 0x8c, 0x4b, 0x00, 0xe1, 0xd4, 0x60, + 0xeb, 0x6f, 0x34, 0xfe, 0x0b, 0x3c, 0x35, 0x18, 0x02, 0xa7, 0x06, 0x5f, 0x7a, 0xa3, 0xd1, 0x5f, + 0xe4, 0xa9, 0xc1, 0x21, 0x38, 0xb2, 0x85, 0xd5, 0x2d, 0x9a, 0xe1, 0xcb, 0x3c, 0xb2, 0x05, 0x54, + 0xae, 0x0c, 0x93, 0x5d, 0x0b, 0x62, 0x34, 0xd5, 0xaf, 0x32, 0x2a, 0x4d, 0x5e, 0x0f, 0xc5, 0xc5, + 0x8b, 0x2d, 0x86, 0xd1, 0x6c, 0xbf, 0x26, 0x2d, 0x5e, 0x6c, 0x2d, 0xcc, 0xdd, 0x82, 0xa4, 0xd5, + 0x69, 0x34, 0x70, 0xf2, 0xe8, 0xfd, 0x5f, 0xb0, 0xcb, 0xfc, 0xf7, 0x9f, 0x30, 0xeb, 0x70, 0x40, + 0xee, 0x2a, 0x24, 0x50, 0xf3, 0x00, 0xd5, 0xa2, 0x90, 0xff, 0xe3, 0x27, 0xbc, 0x60, 0x62, 0xe9, + 0xdc, 0xb3, 0x00, 0xf4, 0xd1, 0x08, 0xd9, 0xf6, 0x8b, 0xc0, 0xfe, 0xcf, 0x9f, 0xb0, 0x57, 0x5f, + 0x7c, 0x88, 0x4f, 0x40, 0x5f, 0xa4, 0xe9, 0x4f, 0xf0, 0xc3, 0x20, 0x01, 0xf1, 0xc8, 0x4d, 0x18, + 0x79, 0xc9, 0xb1, 0x2d, 0xd7, 0x3c, 0x8a, 0x42, 0xff, 0x2f, 0x86, 0xe6, 0xf2, 0xd8, 0x60, 0x4d, + 0xbb, 0x8d, 0x5c, 0xf3, 0xc8, 0x89, 0xc2, 0xfe, 0x6f, 0x86, 0xf5, 0x00, 0x18, 0x5c, 0x35, 0x1d, + 0x77, 0x90, 0xeb, 0xfe, 0x63, 0x0e, 0xe6, 0x00, 0xac, 0x34, 0xfe, 0xfc, 0x32, 0x3a, 0x89, 0xc2, + 0xfe, 0x88, 0x2b, 0xcd, 0xe4, 0x73, 0x4f, 0xc3, 0x28, 0xfe, 0x48, 0xdf, 0x67, 0x8b, 0x00, 0xff, + 0x1f, 0x06, 0xf6, 0x11, 0xf8, 0xcc, 0x8e, 0x5b, 0x73, 0xeb, 0xd1, 0xc6, 0xfe, 0x13, 0xe6, 0x69, + 0x2e, 0x9f, 0xcb, 0x43, 0xca, 0x71, 0x6b, 0xb5, 0x0e, 0xeb, 0x4f, 0x23, 0xe0, 0xff, 0xf7, 0x27, + 0xde, 0x23, 0x0b, 0x0f, 0x83, 0xbd, 0xfd, 0xea, 0xcb, 0x6e, 0xcb, 0x26, 0xdb, 0x1c, 0x51, 0x0c, + 0xef, 0x32, 0x06, 0x01, 0x52, 0x28, 0x85, 0x3f, 0xbe, 0x85, 0xdb, 0xf6, 0x6d, 0x9b, 0x3e, 0xb8, + 0xfd, 0x54, 0x36, 0xfa, 0x09, 0x2c, 0xfc, 0x51, 0x03, 0xae, 0xf7, 0x14, 0xc3, 0x4b, 0xf1, 0xa5, + 0xaa, 0xdd, 0x3c, 0xb0, 0x9d, 0x4b, 0x07, 0xb6, 0x7b, 0x7c, 0xc9, 0x3d, 0x46, 0x78, 0x8c, 0x3d, + 0xb2, 0x8d, 0xe3, 0xcf, 0x33, 0xa7, 0x7b, 0xce, 0x4b, 0x76, 0xf1, 0xcb, 0x75, 0x7c, 0x69, 0x65, + 0xb2, 0x91, 0xa2, 0x9f, 0x83, 0x61, 0x72, 0xb1, 0x97, 0xc9, 0x66, 0xa5, 0x52, 0x88, 0xdf, 0x7b, + 0x7b, 0x6e, 0xc8, 0x60, 0x63, 0xde, 0xec, 0x0a, 0x79, 0xd2, 0x1d, 0x0b, 0xcc, 0xae, 0x78, 0xb3, + 0x57, 0xe8, 0xc3, 0xee, 0xc0, 0xec, 0x15, 0x6f, 0x76, 0x95, 0x3c, 0xf6, 0x56, 0x03, 0xb3, 0xab, + 0xde, 0xec, 0x55, 0xb2, 0xb5, 0x33, 0x16, 0x98, 0xbd, 0xea, 0xcd, 0x5e, 0x23, 0x1b, 0x3a, 0xf1, + 0xc0, 0xec, 0x35, 0x6f, 0xf6, 0x3a, 0xd9, 0xcb, 0x99, 0x0c, 0xcc, 0x5e, 0xf7, 0x66, 0x6f, 0x90, + 0x3d, 0x1c, 0x3d, 0x30, 0x7b, 0xc3, 0x9b, 0xbd, 0x49, 0x5e, 0x90, 0x1a, 0x09, 0xcc, 0xde, 0xd4, + 0x67, 0x61, 0x84, 0x5e, 0xf9, 0x32, 0xd9, 0xf0, 0x9f, 0x60, 0xd3, 0x7c, 0xd0, 0x9f, 0xbf, 0x4c, + 0x5e, 0x86, 0x1a, 0x0e, 0xce, 0x5f, 0xf6, 0xe7, 0x57, 0xc8, 0xf7, 0x32, 0xb4, 0xe0, 0xfc, 0x8a, + 0x3f, 0x7f, 0x25, 0x33, 0x46, 0x5e, 0x08, 0x0b, 0xcc, 0x5f, 0xf1, 0xe7, 0x57, 0x33, 0xe3, 0x38, + 0x63, 0x82, 0xf3, 0xab, 0xfe, 0xfc, 0xd5, 0xcc, 0xc4, 0xbc, 0xb2, 0x90, 0x0e, 0xce, 0x5f, 0xcd, + 0xfe, 0x02, 0x71, 0xaf, 0xe5, 0xbb, 0x77, 0x3a, 0xe8, 0x5e, 0xcf, 0xb1, 0xd3, 0x41, 0xc7, 0x7a, + 0x2e, 0x9d, 0x0e, 0xba, 0xd4, 0x73, 0xe6, 0x74, 0xd0, 0x99, 0x9e, 0x1b, 0xa7, 0x83, 0x6e, 0xf4, + 0x1c, 0x38, 0x1d, 0x74, 0xa0, 0xe7, 0xba, 0xe9, 0xa0, 0xeb, 0x3c, 0xa7, 0x4d, 0x07, 0x9d, 0xe6, + 0xb9, 0x6b, 0x3a, 0xe8, 0x2e, 0xcf, 0x51, 0x19, 0xc9, 0x51, 0xbe, 0x8b, 0x32, 0x92, 0x8b, 0x7c, + 0xe7, 0x64, 0x24, 0xe7, 0xf8, 0x6e, 0xc9, 0x48, 0x6e, 0xf1, 0x1d, 0x92, 0x91, 0x1c, 0xe2, 0xbb, + 0x22, 0x23, 0xb9, 0xc2, 0x77, 0x02, 0xcb, 0x31, 0x03, 0xb5, 0x42, 0x72, 0x4c, 0xed, 0x9b, 0x63, + 0x6a, 0xdf, 0x1c, 0x53, 0xfb, 0xe6, 0x98, 0xda, 0x37, 0xc7, 0xd4, 0xbe, 0x39, 0xa6, 0xf6, 0xcd, + 0x31, 0xb5, 0x6f, 0x8e, 0xa9, 0x7d, 0x73, 0x4c, 0xed, 0x9f, 0x63, 0x6a, 0x44, 0x8e, 0xa9, 0x11, + 0x39, 0xa6, 0x46, 0xe4, 0x98, 0x1a, 0x91, 0x63, 0x6a, 0x44, 0x8e, 0xa9, 0x3d, 0x73, 0xcc, 0x77, + 0xef, 0x74, 0xd0, 0xbd, 0xa1, 0x39, 0xa6, 0xf6, 0xc8, 0x31, 0xb5, 0x47, 0x8e, 0xa9, 0x3d, 0x72, + 0x4c, 0xed, 0x91, 0x63, 0x6a, 0x8f, 0x1c, 0x53, 0x7b, 0xe4, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x5e, + 0x39, 0xa6, 0xf6, 0xcc, 0x31, 0xb5, 0x67, 0x8e, 0xa9, 0x3d, 0x73, 0x4c, 0xed, 0x99, 0x63, 0x6a, + 0xcf, 0x1c, 0x53, 0xc5, 0x1c, 0xfb, 0xd7, 0x2a, 0xe8, 0x34, 0xc7, 0x76, 0xc8, 0x2b, 0x63, 0xcc, + 0x15, 0xb3, 0x52, 0xa6, 0x0d, 0x63, 0xd7, 0x69, 0xbe, 0x4b, 0x66, 0xa5, 0x5c, 0x0b, 0xce, 0xaf, + 0x78, 0xf3, 0x3c, 0xdb, 0x82, 0xf3, 0x57, 0xbc, 0x79, 0x9e, 0x6f, 0xc1, 0xf9, 0x55, 0x6f, 0x9e, + 0x67, 0x5c, 0x70, 0xfe, 0xaa, 0x37, 0xcf, 0x73, 0x2e, 0x38, 0x7f, 0xcd, 0x9b, 0xe7, 0x59, 0x17, + 0x9c, 0xbf, 0xee, 0xcd, 0xf3, 0xbc, 0x0b, 0xce, 0xdf, 0xf0, 0xe6, 0x79, 0xe6, 0x05, 0xe7, 0x6f, + 0xea, 0xf3, 0x72, 0xee, 0x71, 0x01, 0xcf, 0xb5, 0xf3, 0x72, 0xf6, 0x49, 0x12, 0x97, 0x7d, 0x09, + 0x9e, 0x7f, 0x92, 0xc4, 0x8a, 0x2f, 0xc1, 0x33, 0x50, 0x92, 0xb8, 0x92, 0xfd, 0x0c, 0x71, 0x9f, + 0x25, 0xbb, 0x6f, 0x46, 0x72, 0x5f, 0x4c, 0x70, 0xdd, 0x8c, 0xe4, 0xba, 0x98, 0xe0, 0xb6, 0x19, + 0xc9, 0x6d, 0x31, 0xc1, 0x65, 0x33, 0x92, 0xcb, 0x62, 0x82, 0xbb, 0x66, 0x24, 0x77, 0xc5, 0x04, + 0x57, 0xcd, 0x48, 0xae, 0x8a, 0x09, 0x6e, 0x9a, 0x91, 0xdc, 0x14, 0x13, 0x5c, 0x34, 0x23, 0xb9, + 0x28, 0x26, 0xb8, 0x67, 0x46, 0x72, 0x4f, 0x4c, 0x70, 0xcd, 0x39, 0xd9, 0x35, 0x31, 0xd1, 0x2d, + 0xe7, 0x64, 0xb7, 0xc4, 0x44, 0x97, 0x9c, 0x93, 0x5d, 0x12, 0x13, 0xdd, 0x71, 0x4e, 0x76, 0x47, + 0x4c, 0x74, 0xc5, 0x9f, 0xc6, 0x78, 0x47, 0xb8, 0xeb, 0xb6, 0x3b, 0x55, 0xf7, 0x3d, 0x75, 0x84, + 0xcb, 0x81, 0xf6, 0x21, 0xb5, 0xa2, 0x2f, 0x91, 0x86, 0x55, 0xec, 0x38, 0xa5, 0x15, 0x6c, 0x39, + 0xd0, 0x58, 0x08, 0x08, 0x2b, 0x1c, 0xb1, 0xfa, 0x9e, 0x7a, 0xc3, 0xe5, 0x40, 0x9b, 0x11, 0xad, + 0xdf, 0x8d, 0x0f, 0xbc, 0x63, 0x7b, 0x2b, 0xc6, 0x3b, 0x36, 0x66, 0xfe, 0xd3, 0x76, 0x6c, 0x8b, + 0xd1, 0x26, 0xf7, 0x8c, 0xbd, 0x18, 0x6d, 0xec, 0xae, 0x55, 0x67, 0xd0, 0x0e, 0x6e, 0x31, 0xda, + 0xb4, 0x9e, 0x51, 0xdf, 0xdf, 0x7e, 0x8b, 0x45, 0xb0, 0x81, 0x5a, 0x21, 0x11, 0x7c, 0xda, 0x7e, + 0x6b, 0x39, 0x50, 0x4a, 0x4e, 0x1b, 0xc1, 0xea, 0xa9, 0x23, 0xf8, 0xb4, 0x9d, 0xd7, 0x72, 0xa0, + 0xbc, 0x9c, 0x3a, 0x82, 0x3f, 0x80, 0x7e, 0x88, 0x45, 0xb0, 0x6f, 0xfe, 0xd3, 0xf6, 0x43, 0x8b, + 0xd1, 0x26, 0x0f, 0x8d, 0x60, 0xf5, 0x14, 0x11, 0x3c, 0x48, 0x7f, 0xb4, 0x18, 0x6d, 0xda, 0xf0, + 0x08, 0x7e, 0xcf, 0xdd, 0xcc, 0x97, 0x14, 0x98, 0x2c, 0xd7, 0x6b, 0xa5, 0xe6, 0x01, 0xaa, 0xd5, + 0x50, 0x8d, 0xd9, 0x71, 0x39, 0x50, 0x09, 0x7a, 0xb8, 0xfa, 0xdb, 0x6f, 0xcf, 0xf9, 0x16, 0xbe, + 0x0a, 0x49, 0x6a, 0xd3, 0xe5, 0xe5, 0xcc, 0x3d, 0x25, 0xa2, 0xc2, 0x79, 0xa2, 0xfa, 0x79, 0x0e, + 0xbb, 0xbc, 0x9c, 0xf9, 0x4f, 0x8a, 0x50, 0xe5, 0xbc, 0xe1, 0xec, 0x2f, 0x13, 0x0d, 0xad, 0xf7, + 0xac, 0xe1, 0xa5, 0x81, 0x34, 0x14, 0x74, 0x7b, 0xa4, 0x4b, 0x37, 0x41, 0xab, 0x0e, 0x4c, 0x94, + 0xeb, 0xb5, 0x32, 0xf9, 0x45, 0x80, 0x41, 0x54, 0xa2, 0x32, 0x52, 0x3d, 0x58, 0x0e, 0x84, 0xa5, + 0x88, 0xf0, 0x42, 0x3a, 0x58, 0x23, 0xb2, 0x75, 0x7c, 0x5a, 0x2b, 0x70, 0xda, 0xc5, 0x5e, 0xa7, + 0xf5, 0x2b, 0xbb, 0x77, 0xc2, 0xc5, 0x5e, 0x27, 0xf4, 0x73, 0xc8, 0x3b, 0xd5, 0x6b, 0x7c, 0x71, + 0xa6, 0x2f, 0x6e, 0xe9, 0xe7, 0x20, 0xb6, 0x41, 0xdf, 0x2b, 0x4f, 0x17, 0xd2, 0x58, 0xa9, 0xef, + 0xbc, 0x3d, 0x17, 0xdf, 0xef, 0xd4, 0x6b, 0x46, 0x6c, 0xa3, 0xa6, 0xdf, 0x81, 0xc4, 0x27, 0xd9, + 0xf7, 0x52, 0xb1, 0xc0, 0x2a, 0x13, 0xf8, 0x68, 0xc4, 0x23, 0x26, 0x42, 0xbd, 0xb4, 0x5f, 0xb7, + 0xdc, 0xcb, 0x2b, 0x37, 0x0c, 0x4a, 0x91, 0xfd, 0x73, 0x00, 0xf4, 0x9c, 0x6b, 0xa6, 0x73, 0xac, + 0x97, 0x39, 0x33, 0x3d, 0xf5, 0x8d, 0xef, 0xbc, 0x3d, 0xb7, 0x3a, 0x08, 0xeb, 0x53, 0x35, 0xd3, + 0x39, 0x7e, 0xca, 0x3d, 0x69, 0xa1, 0xa5, 0xc2, 0x89, 0x8b, 0x1c, 0xce, 0xde, 0xe2, 0xab, 0x1e, + 0xbb, 0xae, 0x8c, 0x70, 0x5d, 0xc9, 0xc0, 0x35, 0xad, 0x07, 0xaf, 0x69, 0xf9, 0x41, 0xaf, 0xe7, + 0x35, 0xbe, 0x48, 0x48, 0x96, 0x54, 0xa3, 0x2c, 0xa9, 0xbe, 0x57, 0x4b, 0xb6, 0x78, 0x7d, 0x94, + 0xae, 0x55, 0xed, 0x77, 0xad, 0xea, 0x7b, 0xb9, 0xd6, 0xff, 0x47, 0xb3, 0xd5, 0xcb, 0xa7, 0x7d, + 0x8b, 0xbe, 0xd3, 0xfa, 0x67, 0xeb, 0x59, 0xd0, 0xfb, 0xda, 0x05, 0xe4, 0xe2, 0xf7, 0xde, 0x9c, + 0x53, 0xb2, 0x5f, 0x8a, 0xf1, 0x2b, 0xa7, 0x89, 0xf4, 0x60, 0x57, 0xfe, 0x67, 0xa5, 0xa7, 0xfa, + 0x20, 0x2c, 0xf4, 0x45, 0x05, 0xa6, 0xbb, 0x2a, 0x39, 0x35, 0xd3, 0xfb, 0x5b, 0xce, 0xad, 0xd3, + 0x96, 0x73, 0xa6, 0xe0, 0xef, 0x2a, 0x70, 0x46, 0x2a, 0xaf, 0x54, 0xbd, 0x4b, 0x92, 0x7a, 0x0f, + 0x75, 0x9f, 0x89, 0x08, 0x0a, 0xda, 0x89, 0xee, 0x95, 0x00, 0x02, 0xb3, 0xe7, 0xf7, 0x55, 0xc9, + 0xef, 0xe7, 0x3c, 0x40, 0x88, 0xb9, 0x78, 0x04, 0x30, 0xb5, 0x6d, 0x88, 0xef, 0xb5, 0x11, 0xd2, + 0x67, 0x21, 0xb6, 0xdd, 0x66, 0x1a, 0x8e, 0x53, 0xfc, 0x76, 0xbb, 0xd0, 0x36, 0xad, 0xea, 0xb1, + 0x11, 0xdb, 0x6e, 0xeb, 0xe7, 0x41, 0xcd, 0xb3, 0xef, 0xc4, 0xa7, 0x56, 0x26, 0xa8, 0x40, 0xde, + 0xaa, 0x31, 0x09, 0x3c, 0xa7, 0xcf, 0x42, 0x7c, 0x13, 0x99, 0x87, 0x4c, 0x09, 0xa0, 0x32, 0x78, + 0xc4, 0x20, 0xe3, 0xec, 0x84, 0x2f, 0x40, 0x92, 0x13, 0xeb, 0x17, 0x30, 0xe2, 0xd0, 0x65, 0xa7, + 0x65, 0x08, 0xac, 0x0e, 0x5b, 0xb9, 0xc8, 0xac, 0x7e, 0x11, 0x12, 0x46, 0xfd, 0xe8, 0xd8, 0x65, + 0x27, 0xef, 0x16, 0xa3, 0xd3, 0xd9, 0xbb, 0x30, 0xea, 0x69, 0xf4, 0x3e, 0x53, 0xaf, 0xd1, 0x4b, + 0xd3, 0x67, 0xc4, 0xf5, 0x84, 0x3f, 0xb7, 0xa4, 0x43, 0xfa, 0x3c, 0x24, 0x77, 0xdd, 0xb6, 0x5f, + 0xf4, 0x79, 0x47, 0xea, 0x8d, 0x66, 0x7f, 0x41, 0x81, 0xe4, 0x1a, 0x42, 0x2d, 0x62, 0xf0, 0xc7, + 0x21, 0xbe, 0x66, 0xbf, 0x6a, 0x31, 0x05, 0x27, 0x99, 0x45, 0xf1, 0x34, 0xb3, 0x29, 0x99, 0xd6, + 0x1f, 0x17, 0xed, 0x3e, 0xe5, 0xd9, 0x5d, 0x90, 0x23, 0xb6, 0xcf, 0x06, 0x6c, 0xcf, 0x1c, 0x88, + 0x85, 0xba, 0xec, 0x7f, 0x1d, 0x52, 0xc2, 0x59, 0xf4, 0x05, 0xa6, 0x46, 0x4c, 0x06, 0x8a, 0xb6, + 0xc2, 0x12, 0x59, 0x04, 0x63, 0x81, 0x13, 0x63, 0xa8, 0x60, 0xe2, 0x1e, 0x50, 0x62, 0xe6, 0xc5, + 0xa0, 0x99, 0xc3, 0x45, 0x99, 0xa9, 0x97, 0xa9, 0x8d, 0x88, 0xb9, 0x2f, 0xd0, 0xe0, 0xec, 0xed, + 0x44, 0xfc, 0x39, 0x9b, 0x00, 0xb5, 0x5c, 0x6f, 0x64, 0x9f, 0x06, 0xa0, 0x29, 0x5f, 0xb2, 0x3a, + 0x4d, 0x29, 0xeb, 0xc6, 0xb9, 0x81, 0xf7, 0x8e, 0xd1, 0x1e, 0x72, 0x88, 0x48, 0xb0, 0x9f, 0xc2, + 0x05, 0x06, 0x68, 0x8a, 0x11, 0xfc, 0x93, 0x91, 0xf8, 0xd0, 0x4e, 0x0c, 0x8b, 0x66, 0xa8, 0xe8, + 0x5d, 0xe4, 0xe6, 0x2d, 0xdb, 0x3d, 0x46, 0x6d, 0x09, 0xb1, 0xa2, 0x5f, 0x09, 0x24, 0xec, 0xf8, + 0xca, 0x23, 0x1e, 0xa2, 0x27, 0xe8, 0x4a, 0xf6, 0x6b, 0x44, 0x41, 0xdc, 0x0a, 0x74, 0x5d, 0xa0, + 0x3a, 0xc0, 0x05, 0xea, 0xd7, 0x02, 0xfd, 0x5b, 0x1f, 0x35, 0xa5, 0x5b, 0xcb, 0x9b, 0x81, 0xfb, + 0x9c, 0xfe, 0xca, 0x06, 0xef, 0x31, 0xb9, 0x4d, 0xb9, 0xca, 0x4f, 0x46, 0xaa, 0xdc, 0xa3, 0xbb, + 0x3d, 0xad, 0x4d, 0xd5, 0x41, 0x6d, 0xfa, 0x4d, 0xaf, 0xe3, 0xa0, 0x3f, 0x3c, 0x42, 0x7e, 0xb2, + 0x47, 0xff, 0x68, 0xa4, 0xef, 0x73, 0x4a, 0xd1, 0x53, 0x75, 0x75, 0x50, 0xf7, 0xe7, 0x62, 0x85, + 0x82, 0xa7, 0xee, 0xf5, 0x53, 0x84, 0x40, 0x2e, 0x56, 0x2c, 0x7a, 0x65, 0x3b, 0xf9, 0x99, 0x37, + 0xe7, 0x94, 0xaf, 0xbe, 0x39, 0x37, 0x94, 0xfd, 0x4d, 0x05, 0x26, 0x99, 0xa4, 0x10, 0xb8, 0x4f, + 0x49, 0xca, 0x9f, 0xe5, 0x35, 0x23, 0xcc, 0x02, 0x3f, 0xb5, 0xe0, 0xfd, 0x96, 0x02, 0x99, 0x2e, + 0x5d, 0xb9, 0xbd, 0x97, 0x07, 0x52, 0x39, 0xa7, 0x94, 0x7e, 0xf6, 0x36, 0xbf, 0x0b, 0x89, 0xbd, + 0x7a, 0x13, 0xb5, 0xf1, 0x4a, 0x80, 0x3f, 0x50, 0x95, 0xf9, 0x66, 0x0e, 0x1d, 0xe2, 0x73, 0x54, + 0xb9, 0xc0, 0xdc, 0x8a, 0x9e, 0x81, 0xf8, 0x9a, 0xe9, 0x9a, 0x44, 0x83, 0xb4, 0x57, 0x5f, 0x4d, + 0xd7, 0xcc, 0x5e, 0x81, 0xf4, 0xd6, 0x09, 0x79, 0x11, 0xa9, 0x46, 0xde, 0x41, 0x09, 0x76, 0x7f, + 0xbc, 0x5f, 0xbd, 0xbc, 0x98, 0x48, 0xd6, 0xb4, 0x7b, 0x4a, 0x2e, 0x4e, 0xf4, 0x79, 0x05, 0xc6, + 0xb7, 0xb1, 0xda, 0x04, 0x47, 0x60, 0xf3, 0xa0, 0x6c, 0x05, 0x1b, 0x21, 0x91, 0xd5, 0x50, 0xb6, + 0xa4, 0xf6, 0x51, 0xf5, 0xcc, 0x23, 0xb5, 0x6d, 0xaa, 0xd7, 0xb6, 0x2d, 0xc6, 0x93, 0xe3, 0xda, + 0xe4, 0x62, 0x3c, 0x09, 0xda, 0x18, 0x3b, 0xef, 0x7f, 0x50, 0x41, 0xa3, 0xad, 0xce, 0x1a, 0x3a, + 0xac, 0x5b, 0x75, 0xb7, 0xbb, 0x5f, 0xf5, 0x34, 0xd6, 0x9f, 0x85, 0x51, 0x6c, 0xd2, 0x75, 0xf6, + 0xcb, 0x7d, 0xd8, 0xf4, 0xe7, 0x59, 0x8b, 0x22, 0x51, 0xb0, 0x01, 0x12, 0x3a, 0x3e, 0x46, 0x5f, + 0x07, 0xb5, 0x5c, 0xde, 0x62, 0x8b, 0xdb, 0x6a, 0x5f, 0x28, 0x7b, 0xd9, 0x87, 0x1d, 0xb1, 0x31, + 0xe7, 0xc8, 0xc0, 0x04, 0xfa, 0x2a, 0xc4, 0xca, 0x5b, 0xac, 0xe1, 0xbd, 0x30, 0x08, 0x8d, 0x11, + 0x2b, 0x6f, 0xcd, 0xfc, 0x1b, 0x05, 0xc6, 0x02, 0xa3, 0x7a, 0x16, 0xd2, 0x74, 0x40, 0xb8, 0xdc, + 0x61, 0x23, 0x30, 0xc6, 0x75, 0x8e, 0xbd, 0x47, 0x9d, 0x67, 0xf2, 0x30, 0x21, 0x8d, 0xeb, 0x4b, + 0xa0, 0x8b, 0x43, 0x4c, 0x09, 0xfa, 0xab, 0x61, 0x21, 0x33, 0xd9, 0x47, 0x01, 0x7c, 0xbb, 0x7a, + 0x3f, 0x76, 0x55, 0x2e, 0xed, 0xee, 0x95, 0xd6, 0x34, 0x25, 0xfb, 0x0d, 0x05, 0x52, 0xac, 0x6d, + 0xad, 0xda, 0x2d, 0xa4, 0x17, 0x40, 0xc9, 0xb3, 0x08, 0x7a, 0x30, 0xbd, 0x95, 0xbc, 0x7e, 0x09, + 0x94, 0xc2, 0xe0, 0xae, 0x56, 0x0a, 0xfa, 0x0a, 0x28, 0x45, 0xe6, 0xe0, 0xc1, 0x3c, 0xa3, 0x14, + 0xb3, 0x7f, 0xa2, 0xc2, 0x94, 0xd8, 0x46, 0xf3, 0x7a, 0x72, 0x3e, 0x78, 0xdf, 0x94, 0x1b, 0xbd, + 0xbc, 0x72, 0x65, 0x75, 0x09, 0xff, 0xe3, 0x85, 0x64, 0x36, 0x78, 0x0b, 0x95, 0x03, 0x4f, 0xe4, + 0x72, 0xaf, 0xf7, 0x44, 0x72, 0x71, 0x81, 0xa1, 0xeb, 0x3d, 0x91, 0xc0, 0x6c, 0xd7, 0x7b, 0x22, + 0x81, 0xd9, 0xae, 0xf7, 0x44, 0x02, 0xb3, 0x5d, 0x7b, 0x01, 0x81, 0xd9, 0xae, 0xf7, 0x44, 0x02, + 0xb3, 0x5d, 0xef, 0x89, 0x04, 0x66, 0xbb, 0xdf, 0x13, 0x61, 0xd3, 0x3d, 0xdf, 0x13, 0x09, 0xce, + 0x77, 0xbf, 0x27, 0x12, 0x9c, 0xef, 0x7e, 0x4f, 0x24, 0x17, 0x77, 0xdb, 0x1d, 0xd4, 0x7b, 0xd7, + 0x21, 0x88, 0xef, 0x77, 0x13, 0xe8, 0x57, 0xe0, 0x6d, 0x98, 0xa0, 0x0f, 0x24, 0x8a, 0xb6, 0xe5, + 0x9a, 0x75, 0x0b, 0xb5, 0xf5, 0x8f, 0x41, 0x9a, 0x0e, 0xd1, 0xdb, 0x9c, 0xb0, 0xdb, 0x40, 0x3a, + 0xcf, 0xea, 0x6d, 0x40, 0x3a, 0xfb, 0xa7, 0x71, 0x98, 0xa6, 0x03, 0x65, 0xb3, 0x89, 0x02, 0x6f, + 0x19, 0x5d, 0x94, 0xf6, 0x94, 0xc6, 0x31, 0xfc, 0xfe, 0xdb, 0x73, 0x74, 0x34, 0xef, 0x45, 0xd3, + 0x45, 0x69, 0x77, 0x29, 0x28, 0xe7, 0x2f, 0x40, 0x17, 0xa5, 0x37, 0x8f, 0x82, 0x72, 0xde, 0x7a, + 0xe3, 0xc9, 0xf1, 0x77, 0x90, 0x82, 0x72, 0x6b, 0x5e, 0x94, 0x5d, 0x94, 0xde, 0x46, 0x0a, 0xca, + 0x95, 0xbc, 0x78, 0xbb, 0x28, 0xed, 0x3d, 0x05, 0xe5, 0xd6, 0xbd, 0xc8, 0xbb, 0x28, 0xed, 0x42, + 0x05, 0xe5, 0x6e, 0x7b, 0x31, 0x78, 0x51, 0x7a, 0x57, 0x29, 0x28, 0xf7, 0x9c, 0x17, 0x8d, 0x17, + 0xa5, 0xb7, 0x96, 0x82, 0x72, 0x1b, 0x5e, 0x5c, 0x2e, 0xc8, 0xef, 0x2f, 0x05, 0x05, 0xef, 0xf8, + 0x11, 0xba, 0x20, 0xbf, 0xc9, 0x14, 0x94, 0xfc, 0xb8, 0x1f, 0xab, 0x0b, 0xf2, 0x3b, 0x4d, 0x41, + 0xc9, 0x4d, 0x3f, 0x6a, 0x17, 0xe4, 0xbd, 0xb2, 0xa0, 0xe4, 0x96, 0x1f, 0xbf, 0x0b, 0xf2, 0xae, + 0x59, 0x50, 0xb2, 0xec, 0x47, 0xf2, 0x82, 0xbc, 0x7f, 0x16, 0x94, 0xdc, 0xf6, 0x1f, 0xa2, 0xff, + 0x81, 0x14, 0x7e, 0xc2, 0x5b, 0x50, 0x59, 0x29, 0xfc, 0x20, 0x24, 0xf4, 0xa4, 0x42, 0x26, 0xc8, + 0xf8, 0x61, 0x97, 0x95, 0xc2, 0x0e, 0x42, 0x42, 0x2e, 0x2b, 0x85, 0x1c, 0x84, 0x84, 0x5b, 0x56, + 0x0a, 0x37, 0x08, 0x09, 0xb5, 0xac, 0x14, 0x6a, 0x10, 0x12, 0x66, 0x59, 0x29, 0xcc, 0x20, 0x24, + 0xc4, 0xb2, 0x52, 0x88, 0x41, 0x48, 0x78, 0x65, 0xa5, 0xf0, 0x82, 0x90, 0xd0, 0xba, 0x20, 0x87, + 0x16, 0x84, 0x85, 0xd5, 0x05, 0x39, 0xac, 0x20, 0x2c, 0xa4, 0x1e, 0x93, 0x43, 0x6a, 0xf4, 0xfe, + 0xdb, 0x73, 0x09, 0x3c, 0x24, 0x44, 0xd3, 0x05, 0x39, 0x9a, 0x20, 0x2c, 0x92, 0x2e, 0xc8, 0x91, + 0x04, 0x61, 0x51, 0x74, 0x41, 0x8e, 0x22, 0x08, 0x8b, 0xa0, 0xb7, 0xe4, 0x08, 0xf2, 0xdf, 0xf1, + 0xc9, 0x4a, 0x5b, 0x8a, 0x51, 0x11, 0xa4, 0x0e, 0x10, 0x41, 0xea, 0x00, 0x11, 0xa4, 0x0e, 0x10, + 0x41, 0xea, 0x00, 0x11, 0xa4, 0x0e, 0x10, 0x41, 0xea, 0x00, 0x11, 0xa4, 0x0e, 0x10, 0x41, 0xea, + 0x20, 0x11, 0xa4, 0x0e, 0x14, 0x41, 0x6a, 0xaf, 0x08, 0xba, 0x20, 0xbf, 0xf1, 0x00, 0x61, 0x05, + 0xe9, 0x82, 0xbc, 0xf5, 0x19, 0x1d, 0x42, 0xea, 0x40, 0x21, 0xa4, 0xf6, 0x0a, 0xa1, 0x3f, 0x50, + 0x61, 0x2a, 0x10, 0x42, 0x6c, 0x7f, 0xe8, 0xfd, 0xaa, 0x40, 0xd7, 0x06, 0x78, 0xc1, 0x22, 0x2c, + 0xa6, 0xae, 0x0d, 0xb0, 0x49, 0xdd, 0x2f, 0xce, 0xba, 0xab, 0x50, 0x69, 0x80, 0x2a, 0xb4, 0xee, + 0xc5, 0xd0, 0xb5, 0x01, 0x5e, 0xbc, 0xe8, 0x8e, 0xbd, 0x1b, 0xfd, 0x8a, 0xc0, 0x73, 0x03, 0x15, + 0x81, 0x8d, 0x81, 0x8a, 0xc0, 0x1d, 0xdf, 0x83, 0xbf, 0x18, 0x83, 0x33, 0xbe, 0x07, 0xe9, 0x27, + 0xf2, 0xcb, 0x5a, 0x59, 0x61, 0x8b, 0x4a, 0xe7, 0xdb, 0x36, 0x82, 0x1b, 0x63, 0x1b, 0x35, 0x7d, + 0x27, 0xb8, 0x59, 0x95, 0x3b, 0xed, 0x06, 0x8e, 0xe0, 0x71, 0xf6, 0x30, 0xf4, 0x02, 0xa8, 0x1b, + 0x35, 0x87, 0x54, 0x8b, 0xb0, 0xd3, 0x16, 0x0d, 0x3c, 0xad, 0x1b, 0x30, 0x4c, 0xc4, 0x1d, 0xe2, + 0xde, 0xf7, 0x72, 0xe2, 0x35, 0x83, 0x31, 0x65, 0xdf, 0x52, 0x60, 0x3e, 0x10, 0xca, 0xef, 0xcf, + 0x96, 0xc1, 0xad, 0x81, 0xb6, 0x0c, 0x02, 0x09, 0xe2, 0x6f, 0x1f, 0x3c, 0xd1, 0xbd, 0x53, 0x2d, + 0x66, 0x89, 0xbc, 0x95, 0xf0, 0x97, 0x60, 0xdc, 0xbf, 0x02, 0x72, 0xcf, 0x76, 0x35, 0xfa, 0x69, + 0x66, 0x58, 0x6a, 0x5e, 0x95, 0x9e, 0xa2, 0xf5, 0x85, 0x79, 0xd9, 0x9a, 0xcd, 0xc1, 0x44, 0x39, + 0xf8, 0x95, 0xa8, 0xa8, 0x87, 0x11, 0x49, 0xdc, 0x9a, 0xdf, 0xfb, 0xf2, 0xdc, 0x50, 0xf6, 0xa3, + 0x90, 0x16, 0xbf, 0xf5, 0x24, 0x01, 0x47, 0x39, 0x30, 0x17, 0xff, 0x36, 0x96, 0xfe, 0x07, 0x0a, + 0x9c, 0x15, 0xc5, 0x9f, 0xaf, 0xbb, 0xc7, 0x1b, 0x16, 0xee, 0xe9, 0x9f, 0x86, 0x24, 0x62, 0x8e, + 0x63, 0x3f, 0x92, 0xc3, 0xee, 0x23, 0x43, 0xc5, 0x97, 0xc8, 0xbf, 0x86, 0x07, 0x91, 0x9e, 0x71, + 0xf0, 0xd3, 0xae, 0xcc, 0x3c, 0x0e, 0x09, 0xca, 0x1f, 0xd4, 0x6b, 0x4c, 0xd2, 0xeb, 0xd7, 0x43, + 0xf4, 0x22, 0x71, 0xa4, 0xdf, 0x09, 0xe8, 0x25, 0xdc, 0xae, 0x86, 0x8a, 0x2f, 0xf1, 0xe0, 0x2b, + 0x24, 0x71, 0xff, 0x47, 0x22, 0x2a, 0x5a, 0xc9, 0x05, 0x48, 0x96, 0x64, 0x99, 0x70, 0x3d, 0xd7, + 0x20, 0x5e, 0xb6, 0x6b, 0xe4, 0xe7, 0x7b, 0xc8, 0xef, 0x55, 0x33, 0x23, 0xb3, 0x1f, 0xaf, 0xbe, + 0x08, 0xc9, 0xe2, 0x71, 0xbd, 0x51, 0x6b, 0x23, 0x8b, 0xed, 0xd9, 0xb3, 0x47, 0xe8, 0x18, 0x63, + 0x78, 0x73, 0xd9, 0x22, 0x4c, 0x96, 0x6d, 0xab, 0x70, 0xe2, 0x8a, 0x75, 0x63, 0x49, 0x4a, 0x11, + 0xb6, 0xe7, 0x43, 0xbe, 0x25, 0x82, 0x05, 0x0a, 0x89, 0xef, 0xbc, 0x3d, 0xa7, 0xec, 0x79, 0xcf, + 0xcf, 0xb7, 0xe0, 0x21, 0x96, 0x3e, 0x5d, 0x54, 0x2b, 0x51, 0x54, 0xa3, 0x6c, 0x9f, 0x5a, 0xa0, + 0xdb, 0xc0, 0x74, 0x56, 0x28, 0xdd, 0x83, 0x69, 0x86, 0x9b, 0xa2, 0xbe, 0x9a, 0xa9, 0xa7, 0xd2, + 0x2c, 0x94, 0x6e, 0x29, 0x8a, 0x4e, 0xd2, 0xec, 0x31, 0x18, 0xf5, 0xe6, 0x84, 0x68, 0x10, 0x33, + 0x65, 0x65, 0x31, 0x0b, 0x29, 0x21, 0x61, 0xf5, 0x04, 0x28, 0x79, 0x6d, 0x08, 0xff, 0x57, 0xd0, + 0x14, 0xfc, 0x5f, 0x51, 0x8b, 0x2d, 0x3e, 0x0e, 0x13, 0xd2, 0xf3, 0x4b, 0x3c, 0xb3, 0xa6, 0x01, + 0xfe, 0xaf, 0xa4, 0xa5, 0x66, 0xe2, 0x9f, 0xf9, 0xb5, 0xd9, 0xa1, 0xc5, 0x5b, 0xa0, 0x77, 0x3f, + 0xe9, 0xd4, 0x87, 0x21, 0x96, 0xc7, 0x94, 0x0f, 0x41, 0xac, 0x50, 0xd0, 0x94, 0x99, 0x89, 0xbf, + 0xfe, 0x85, 0xf9, 0x54, 0x81, 0x7c, 0xa5, 0xfb, 0x2e, 0x72, 0x0b, 0x05, 0x06, 0x7e, 0x06, 0xce, + 0x86, 0x3e, 0x29, 0xc5, 0xf8, 0x62, 0x91, 0xe2, 0xd7, 0xd6, 0xba, 0xf0, 0x6b, 0x6b, 0x04, 0xaf, + 0xe4, 0xf8, 0x8e, 0x73, 0x5e, 0x0f, 0x79, 0x2e, 0x99, 0xa9, 0x09, 0x3b, 0xdc, 0xf9, 0xdc, 0x33, + 0x4c, 0xb6, 0x10, 0x2a, 0x8b, 0x22, 0x76, 0xac, 0x0b, 0xb9, 0x22, 0xc3, 0x17, 0x43, 0xf1, 0x87, + 0xd2, 0xb6, 0x6a, 0x70, 0x85, 0x60, 0x24, 0x45, 0x4f, 0xe1, 0xb5, 0x50, 0x92, 0x63, 0xe1, 0x65, + 0xf7, 0x35, 0x4f, 0xe1, 0x52, 0xa8, 0x6c, 0x3d, 0xe2, 0xa5, 0xaf, 0x52, 0xee, 0x12, 0x5b, 0xe4, + 0xf3, 0x97, 0xf5, 0xb3, 0x3c, 0x47, 0x03, 0x15, 0x98, 0x19, 0x88, 0x4b, 0xe5, 0x8a, 0x0c, 0x50, + 0xe8, 0x09, 0xe8, 0x6d, 0x25, 0x8e, 0xcc, 0x3d, 0xc7, 0x48, 0x8a, 0x3d, 0x49, 0x22, 0x4c, 0xc5, + 0xe1, 0x85, 0xbd, 0x7b, 0xef, 0xcc, 0x0e, 0x7d, 0xfb, 0x9d, 0xd9, 0xa1, 0xff, 0xf2, 0xce, 0xec, + 0xd0, 0x77, 0xdf, 0x99, 0x55, 0x7e, 0xf0, 0xce, 0xac, 0xf2, 0xa3, 0x77, 0x66, 0x95, 0x1f, 0xbf, + 0x33, 0xab, 0xbc, 0x71, 0x7f, 0x56, 0xf9, 0xea, 0xfd, 0x59, 0xe5, 0x6b, 0xf7, 0x67, 0x95, 0xdf, + 0xbb, 0x3f, 0xab, 0xbc, 0x75, 0x7f, 0x56, 0xb9, 0x77, 0x7f, 0x56, 0xf9, 0xf6, 0xfd, 0x59, 0xe5, + 0xbb, 0xf7, 0x67, 0x95, 0x1f, 0xdc, 0x9f, 0x1d, 0xfa, 0xd1, 0xfd, 0x59, 0xe5, 0xc7, 0xf7, 0x67, + 0x87, 0xde, 0xf8, 0xde, 0xec, 0xd0, 0x9b, 0xdf, 0x9b, 0x1d, 0xfa, 0xea, 0xf7, 0x66, 0x15, 0xf8, + 0xa3, 0x55, 0x98, 0x67, 0xdf, 0x24, 0xf3, 0xbe, 0xf6, 0x7b, 0xc9, 0x3d, 0x46, 0xa4, 0x25, 0xb8, + 0xc2, 0x7f, 0x03, 0xcc, 0x1b, 0x38, 0xe5, 0xb7, 0xca, 0x66, 0x1e, 0xf4, 0x3b, 0x6c, 0xd9, 0x7f, + 0x9b, 0x80, 0x11, 0xfe, 0x2c, 0x38, 0xec, 0x07, 0xcd, 0xaf, 0x42, 0xf2, 0xb8, 0xde, 0x30, 0xdb, + 0x75, 0xf7, 0x84, 0x3d, 0x04, 0x7d, 0x78, 0xc9, 0x57, 0x9b, 0x3f, 0x36, 0x7d, 0xae, 0xd3, 0xb4, + 0x3b, 0x6d, 0xc3, 0x13, 0xd5, 0xe7, 0x21, 0x7d, 0x8c, 0xea, 0x47, 0xc7, 0x6e, 0xa5, 0x6e, 0x55, + 0xaa, 0x4d, 0xd2, 0x2b, 0x8f, 0x19, 0x40, 0xc7, 0x36, 0xac, 0x62, 0x13, 0x9f, 0xac, 0x66, 0xba, + 0x26, 0xb9, 0x47, 0x4f, 0x1b, 0xe4, 0xb3, 0x7e, 0x1e, 0xd2, 0x6d, 0xe4, 0x74, 0x1a, 0x6e, 0xa5, + 0x6a, 0x77, 0x2c, 0x97, 0x74, 0xb3, 0xaa, 0x91, 0xa2, 0x63, 0x45, 0x3c, 0xa4, 0x3f, 0x06, 0x63, + 0x6e, 0xbb, 0x83, 0x2a, 0x4e, 0xd5, 0x76, 0x9d, 0xa6, 0x69, 0x91, 0x6e, 0x36, 0x69, 0xa4, 0xf1, + 0xe0, 0x2e, 0x1b, 0x23, 0xbf, 0x85, 0x5f, 0xb5, 0xdb, 0x88, 0xdc, 0x4c, 0xc7, 0x0c, 0x7a, 0xa0, + 0x6b, 0xa0, 0xbe, 0x8c, 0x4e, 0xc8, 0xed, 0x5a, 0xdc, 0xc0, 0x1f, 0xf5, 0x27, 0x61, 0x98, 0xfe, + 0x31, 0x1b, 0xd2, 0x5b, 0x93, 0xad, 0x6b, 0xef, 0xd2, 0xe8, 0x23, 0x5a, 0x83, 0x09, 0xe8, 0x37, + 0x61, 0xc4, 0x45, 0xed, 0xb6, 0x59, 0xb7, 0xc8, 0xad, 0x53, 0x6a, 0x65, 0x2e, 0xc4, 0x0c, 0x7b, + 0x54, 0x82, 0xfc, 0x26, 0xb0, 0xc1, 0xe5, 0xf5, 0xab, 0x90, 0x26, 0x72, 0x2b, 0x15, 0xfa, 0x07, + 0x7f, 0x52, 0x3d, 0xa3, 0x39, 0x45, 0xe5, 0xf8, 0x4e, 0x01, 0x87, 0xd1, 0xdf, 0x43, 0x1c, 0x23, + 0xa7, 0x7d, 0x2c, 0xe4, 0xb4, 0xa4, 0xf0, 0xae, 0x90, 0xa6, 0x91, 0x9e, 0x9a, 0xf1, 0xd0, 0x5f, + 0x4c, 0xdc, 0x82, 0xb4, 0xa8, 0x17, 0x37, 0x03, 0x6d, 0x7e, 0x88, 0x19, 0x9e, 0xf0, 0xff, 0x98, + 0x42, 0x0f, 0x2b, 0xd0, 0xf9, 0x5c, 0xec, 0x86, 0x32, 0xb3, 0x03, 0x9a, 0x7c, 0xbe, 0x10, 0xca, + 0x8b, 0x41, 0x4a, 0x4d, 0xbc, 0x58, 0xf2, 0x9c, 0xdc, 0x67, 0xcc, 0x3e, 0x0b, 0xc3, 0x34, 0x7e, + 0xf4, 0x14, 0x8c, 0xf8, 0x3f, 0xb5, 0x99, 0x84, 0xf8, 0xce, 0x7e, 0x79, 0x97, 0xfe, 0x66, 0xee, + 0xee, 0x66, 0x7e, 0x67, 0x77, 0x6f, 0xa3, 0xf8, 0x71, 0x2d, 0xa6, 0x4f, 0x40, 0xaa, 0xb0, 0xb1, + 0xb9, 0x59, 0x29, 0xe4, 0x37, 0x36, 0x4b, 0x77, 0x35, 0x35, 0x3b, 0x0b, 0xc3, 0x54, 0x4f, 0xf2, + 0xdb, 0x7f, 0x1d, 0xcb, 0x3a, 0xe1, 0xcd, 0x03, 0x39, 0xc8, 0x7e, 0x5d, 0x87, 0x91, 0x7c, 0xa3, + 0xb1, 0x65, 0xb6, 0x1c, 0xfd, 0x79, 0x98, 0xa4, 0xbf, 0xca, 0xb1, 0x67, 0xaf, 0x91, 0x9f, 0xa8, + 0xc4, 0xa5, 0x41, 0x61, 0x7f, 0x44, 0xc2, 0xbf, 0x6e, 0x26, 0xbe, 0xd4, 0x25, 0x4b, 0x0d, 0xdc, + 0xcd, 0xa1, 0xef, 0x81, 0xc6, 0x07, 0xd7, 0x1b, 0xb6, 0xe9, 0x62, 0xde, 0x18, 0xfb, 0x05, 0xc9, + 0xde, 0xbc, 0x5c, 0x94, 0xd2, 0x76, 0x31, 0xe8, 0x1f, 0x83, 0xe4, 0x86, 0xe5, 0x5e, 0x59, 0xc1, + 0x6c, 0xfc, 0x0f, 0x34, 0x75, 0xb3, 0x71, 0x11, 0xca, 0xe2, 0x21, 0x18, 0xfa, 0xda, 0x2a, 0x46, + 0xc7, 0xfb, 0xa1, 0x89, 0x88, 0x8f, 0x26, 0x87, 0xfa, 0xb3, 0x30, 0x8a, 0xef, 0x4d, 0xe8, 0xc9, + 0x13, 0xbc, 0x71, 0xed, 0x82, 0x7b, 0x32, 0x14, 0xef, 0x63, 0x38, 0x01, 0x3d, 0xff, 0x70, 0x5f, + 0x02, 0x41, 0x01, 0x1f, 0x83, 0x09, 0x76, 0x3d, 0x0d, 0x46, 0x7a, 0x12, 0xec, 0x4a, 0x1a, 0xec, + 0x8a, 0x1a, 0xec, 0x7a, 0x1a, 0x24, 0xfb, 0x12, 0x88, 0x1a, 0x78, 0xc7, 0x7a, 0x01, 0x60, 0xbd, + 0xfe, 0x1a, 0xaa, 0x51, 0x15, 0xe8, 0x9f, 0x6f, 0xca, 0x86, 0x30, 0xf8, 0x42, 0x94, 0x42, 0x40, + 0xe9, 0x25, 0x48, 0xed, 0x1e, 0xfa, 0x24, 0xd0, 0x95, 0xc7, 0x9e, 0x1a, 0x87, 0x12, 0x8b, 0x88, + 0xf3, 0x54, 0xa1, 0x17, 0x93, 0xea, 0xaf, 0x8a, 0x70, 0x35, 0x02, 0xca, 0x57, 0x85, 0x92, 0xa4, + 0x23, 0x54, 0x11, 0x58, 0x44, 0x1c, 0x2e, 0x86, 0x05, 0xdb, 0xc6, 0x92, 0xac, 0x2a, 0xcd, 0x85, + 0x50, 0x30, 0x09, 0x56, 0x0c, 0xd9, 0x11, 0xf1, 0x08, 0x09, 0x72, 0x0c, 0x1e, 0xef, 0xed, 0x11, + 0x2e, 0xc3, 0x3d, 0xc2, 0x8f, 0xc5, 0x3c, 0x23, 0xef, 0xb3, 0x62, 0x9e, 0x89, 0xc8, 0x3c, 0xe3, + 0xa2, 0x52, 0x9e, 0xf1, 0x61, 0xfd, 0x13, 0x30, 0xc1, 0xc7, 0x70, 0x79, 0xc2, 0xa4, 0x1a, 0xfb, + 0x03, 0x77, 0xbd, 0x49, 0x99, 0x24, 0xe5, 0x94, 0xf1, 0x7a, 0x19, 0xc6, 0xf9, 0xd0, 0x96, 0x43, + 0x2e, 0x77, 0x92, 0xfd, 0xed, 0x92, 0xde, 0x8c, 0x54, 0x90, 0x12, 0x4a, 0xe8, 0x99, 0x35, 0x98, + 0x0e, 0xaf, 0x46, 0x62, 0xf9, 0x1d, 0xa5, 0xe5, 0xf7, 0x8c, 0x58, 0x7e, 0x15, 0xb1, 0x7c, 0x17, + 0xe1, 0x6c, 0x68, 0xed, 0x89, 0x22, 0x89, 0x89, 0x24, 0xb7, 0x60, 0x2c, 0x50, 0x72, 0x44, 0x70, + 0x22, 0x04, 0x9c, 0xe8, 0x06, 0xfb, 0xa1, 0x15, 0xb2, 0x7a, 0x04, 0xc0, 0xaa, 0x08, 0xfe, 0x18, + 0x8c, 0x07, 0xeb, 0x8d, 0x88, 0x1e, 0x0b, 0x41, 0x8f, 0x85, 0xa0, 0xc3, 0xcf, 0x1d, 0x0f, 0x41, + 0xc7, 0x25, 0xf4, 0x6e, 0xcf, 0x73, 0x4f, 0x86, 0xa0, 0x27, 0x43, 0xd0, 0xe1, 0xe7, 0xd6, 0x43, + 0xd0, 0xba, 0x88, 0x7e, 0x1a, 0x26, 0xa4, 0x12, 0x23, 0xc2, 0x47, 0x42, 0xe0, 0x23, 0x22, 0xfc, + 0x19, 0xd0, 0xe4, 0xe2, 0x22, 0xe2, 0x27, 0x42, 0xf0, 0x13, 0x61, 0xa7, 0x0f, 0xd7, 0x7e, 0x38, + 0x04, 0x3e, 0x1c, 0x7a, 0xfa, 0x70, 0xbc, 0x16, 0x82, 0xd7, 0x44, 0x7c, 0x0e, 0xd2, 0x62, 0x35, + 0x11, 0xb1, 0xc9, 0x10, 0x6c, 0x52, 0xb6, 0x7b, 0xa0, 0x98, 0x44, 0x45, 0xfa, 0x68, 0x8f, 0x74, + 0x09, 0x94, 0x90, 0x28, 0x92, 0xb4, 0x48, 0xf2, 0x49, 0x38, 0x13, 0x56, 0x32, 0x42, 0x38, 0x16, + 0x44, 0x8e, 0x71, 0xdc, 0x23, 0xfa, 0xcd, 0x9e, 0xd9, 0x92, 0x1a, 0xa7, 0x99, 0x17, 0x61, 0x2a, + 0xa4, 0x70, 0x84, 0xd0, 0x2e, 0x05, 0xbb, 0xb1, 0x8c, 0x40, 0x4b, 0x8a, 0x40, 0xdd, 0x3a, 0xda, + 0xb1, 0xeb, 0x96, 0x2b, 0x76, 0x65, 0xdf, 0x98, 0x82, 0x71, 0x56, 0x9e, 0xb6, 0xdb, 0x35, 0xd4, + 0x46, 0x35, 0xfd, 0x2f, 0xf4, 0xee, 0x9d, 0x96, 0xbb, 0x8b, 0x1a, 0x43, 0x9d, 0xa2, 0x85, 0x7a, + 0xb1, 0x67, 0x0b, 0x75, 0x29, 0x9a, 0x3e, 0xaa, 0x93, 0x2a, 0x76, 0x75, 0x52, 0x4f, 0xf4, 0x26, + 0xed, 0xd5, 0x50, 0x15, 0xbb, 0x1a, 0xaa, 0xfe, 0x24, 0xa1, 0x7d, 0xd5, 0x7a, 0x77, 0x5f, 0xb5, + 0xd0, 0x9b, 0xa5, 0x77, 0x7b, 0xb5, 0xde, 0xdd, 0x5e, 0x45, 0xf0, 0x84, 0x77, 0x59, 0xeb, 0xdd, + 0x5d, 0x56, 0x1f, 0x9e, 0xde, 0xcd, 0xd6, 0x7a, 0x77, 0xb3, 0x15, 0xc1, 0x13, 0xde, 0x73, 0x6d, + 0x84, 0xf4, 0x5c, 0x4f, 0xf6, 0x26, 0xea, 0xd7, 0x7a, 0x6d, 0x86, 0xb5, 0x5e, 0x8b, 0x7d, 0x94, + 0xea, 0xdb, 0x81, 0x6d, 0x84, 0x74, 0x60, 0x51, 0x8a, 0xf5, 0x68, 0xc4, 0x36, 0xc3, 0x1a, 0xb1, + 0x48, 0xc5, 0x7a, 0xf5, 0x63, 0x3f, 0x27, 0xf7, 0x63, 0x17, 0x7b, 0x33, 0x85, 0xb7, 0x65, 0xeb, + 0xdd, 0x6d, 0xd9, 0x42, 0x54, 0xce, 0x85, 0x75, 0x67, 0x2f, 0xf6, 0xec, 0xce, 0x06, 0x48, 0xe1, + 0xa8, 0x26, 0xed, 0x85, 0x5e, 0x4d, 0xda, 0x52, 0x34, 0x77, 0xff, 0x5e, 0x6d, 0xbf, 0x47, 0xaf, + 0xf6, 0x54, 0x34, 0xf1, 0x87, 0x2d, 0xdb, 0x87, 0x2d, 0xdb, 0x87, 0x2d, 0xdb, 0x87, 0x2d, 0xdb, + 0xcf, 0xbe, 0x65, 0xcb, 0xc5, 0x3f, 0xfb, 0xe5, 0x39, 0x25, 0xfb, 0x9f, 0x55, 0xef, 0xcf, 0xad, + 0x3d, 0x5f, 0x77, 0x8f, 0x71, 0x79, 0xdb, 0x82, 0x34, 0xf9, 0xf9, 0xdf, 0xa6, 0xd9, 0x6a, 0xd5, + 0xad, 0x23, 0xd6, 0xb3, 0x2d, 0x76, 0x3f, 0x4a, 0x64, 0x00, 0xf2, 0xa7, 0x66, 0xb6, 0xa8, 0x30, + 0x5b, 0x6e, 0x2c, 0x7f, 0x44, 0xbf, 0x03, 0xa9, 0xa6, 0x73, 0xe4, 0xb1, 0xc5, 0xba, 0x16, 0x42, + 0x89, 0x8d, 0x5e, 0xa9, 0x4f, 0x06, 0x4d, 0x6f, 0x00, 0xab, 0x76, 0x70, 0xe2, 0xfa, 0xaa, 0xa9, + 0x51, 0xaa, 0x61, 0x9f, 0x06, 0x55, 0x3b, 0xf0, 0x47, 0x70, 0xd8, 0xca, 0xba, 0x47, 0x55, 0xba, + 0x40, 0xf0, 0x3c, 0x0f, 0x13, 0x92, 0xb6, 0x21, 0x39, 0xff, 0x00, 0xbe, 0xc1, 0x8a, 0xc9, 0x9a, + 0x47, 0xe5, 0x84, 0x18, 0x90, 0xd9, 0x47, 0x61, 0x2c, 0xc0, 0xad, 0xa7, 0x41, 0x39, 0x64, 0x5f, + 0xa6, 0x54, 0x0e, 0xb3, 0x5f, 0x52, 0x20, 0xc5, 0x5e, 0x24, 0xd8, 0x31, 0xeb, 0x6d, 0xfd, 0x39, + 0x88, 0x37, 0xf8, 0x17, 0x9a, 0x1e, 0xf4, 0xcb, 0xb3, 0x84, 0x41, 0x5f, 0x87, 0x44, 0xdb, 0xfb, + 0xc2, 0xd3, 0x03, 0x7d, 0x23, 0x96, 0xc0, 0xb3, 0xf7, 0x14, 0x98, 0x64, 0xef, 0xb9, 0x3a, 0xec, + 0xf5, 0x67, 0xb3, 0x35, 0xf3, 0x75, 0x05, 0x46, 0xbd, 0x23, 0xfd, 0x00, 0xc6, 0xbd, 0x03, 0xfa, + 0x8a, 0x3d, 0x8d, 0xd4, 0x9c, 0x60, 0xe1, 0x2e, 0x8e, 0xa5, 0x90, 0x4f, 0x74, 0x2b, 0x8a, 0xae, + 0xc9, 0xc1, 0xc1, 0x99, 0x3c, 0x4c, 0x85, 0x88, 0x9d, 0x66, 0x41, 0xce, 0x9e, 0x87, 0xd1, 0xb2, + 0xed, 0xd2, 0xdf, 0xcd, 0xd1, 0xcf, 0x08, 0xbb, 0x0a, 0x85, 0x98, 0x36, 0x44, 0xc0, 0x8b, 0xe7, + 0x61, 0x84, 0x65, 0xbf, 0x3e, 0x0c, 0xb1, 0xad, 0xbc, 0x36, 0x44, 0xfe, 0x2f, 0x68, 0x0a, 0xf9, + 0xbf, 0xa8, 0xc5, 0x0a, 0x9b, 0x0f, 0xb8, 0xcf, 0x34, 0x14, 0xb6, 0xcf, 0x74, 0x30, 0x4c, 0xcd, + 0xf3, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xac, 0x99, 0x92, 0x00, 0x6b, 0x83, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -5337,6 +5342,9 @@ return dAtA } func (m *Message) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -5410,6 +5418,9 @@ } func (m *Nested) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Bunny) @@ -5423,6 +5434,9 @@ } func (m *AllMaps) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -5577,6 +5591,9 @@ } func (m *AllMapsOrdered) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -5731,6 +5748,9 @@ } func (m *MessageWithMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NameMapping) > 0 { @@ -5773,6 +5793,9 @@ } func (m *FloatingPoint) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F != 0 { @@ -5785,6 +5808,9 @@ } func (m *Uint128Pair) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -5800,6 +5826,9 @@ } func (m *ContainsNestedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -5809,6 +5838,9 @@ } func (m *ContainsNestedMap_NestedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NestedMapField) > 0 { @@ -5826,6 +5858,9 @@ } func (m *NotPacked) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Key) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/combos/neither/theproto3.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/combos/neither/theproto3.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/combos/neither/theproto3.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/combos/neither/theproto3.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -515,507 +515,512 @@ func Theproto3Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 7987 bytes of a gzipped FileDescriptorSet + // 8069 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x70, 0x23, 0xd7, - 0x99, 0x1e, 0x1b, 0x0d, 0x92, 0xe0, 0x0f, 0x90, 0x6c, 0x36, 0x67, 0x28, 0x88, 0x1a, 0x91, 0x33, - 0xd0, 0x68, 0x44, 0xd1, 0x16, 0x67, 0x86, 0xc3, 0xb9, 0x61, 0x2c, 0x69, 0x01, 0x10, 0x1c, 0x71, - 0x4c, 0x82, 0x74, 0x93, 0xb4, 0x34, 0x56, 0x12, 0x54, 0x13, 0x38, 0x24, 0x5b, 0x02, 0xba, 0xb1, - 0xe8, 0x86, 0x24, 0xaa, 0x52, 0x29, 0x65, 0x9d, 0x6c, 0xbc, 0x49, 0xe5, 0xba, 0x49, 0xc5, 0xeb, - 0xf8, 0x22, 0x27, 0xe5, 0xd8, 0xbb, 0xb9, 0x79, 0xbd, 0x1b, 0x67, 0x77, 0x2b, 0x95, 0x55, 0x1e, + 0x99, 0x1e, 0x1b, 0x0d, 0x90, 0xe0, 0x0f, 0x90, 0x6c, 0x36, 0x67, 0x28, 0x88, 0x1a, 0x91, 0x33, + 0xd0, 0x68, 0x44, 0xd1, 0x16, 0x87, 0xc3, 0xe1, 0xdc, 0x30, 0x96, 0xb4, 0x00, 0x08, 0x8e, 0x38, + 0x26, 0x41, 0xba, 0x49, 0x5a, 0x1a, 0x2b, 0x09, 0xaa, 0x09, 0x1c, 0x92, 0x90, 0x80, 0x6e, 0x2c, + 0xba, 0x21, 0x89, 0xaa, 0x54, 0x4a, 0x59, 0x27, 0x1b, 0x6f, 0x52, 0xb9, 0x6e, 0x52, 0xf1, 0x3a, + 0xbe, 0xc8, 0xbb, 0xb5, 0x6b, 0xef, 0xe6, 0xe6, 0xf5, 0x6e, 0x9c, 0x5d, 0x27, 0x95, 0x55, 0x1e, 0x9c, 0x4c, 0x5e, 0x52, 0xda, 0xe4, 0x25, 0xe5, 0x4a, 0xa9, 0xac, 0x91, 0x53, 0x71, 0x12, 0x27, - 0xeb, 0x6c, 0x5c, 0x15, 0x57, 0x79, 0x1f, 0xb6, 0xce, 0xad, 0xfb, 0x9c, 0x46, 0x03, 0x0d, 0x8e, - 0x24, 0x7b, 0x1f, 0xf4, 0x32, 0x83, 0x3e, 0xe7, 0xff, 0xbe, 0xfe, 0xfb, 0xbf, 0x9d, 0xbf, 0xfb, - 0x34, 0x40, 0xf8, 0xc3, 0x9b, 0x70, 0xf6, 0xd0, 0x71, 0x0e, 0x1b, 0xe8, 0x62, 0xab, 0xed, 0x78, - 0xce, 0x7e, 0xe7, 0xe0, 0x62, 0x1d, 0xb9, 0xb5, 0xb6, 0xd5, 0xf2, 0x9c, 0xf6, 0x12, 0x19, 0xd3, - 0x27, 0xa9, 0xc4, 0x12, 0x97, 0xc8, 0x6d, 0xc2, 0xd4, 0x9a, 0xd5, 0x40, 0xab, 0xbe, 0xe0, 0x0e, - 0xf2, 0xf4, 0x1b, 0x90, 0x3c, 0xb0, 0x1a, 0x28, 0xab, 0x9c, 0x55, 0x17, 0xd2, 0xcb, 0xe7, 0x97, - 0x42, 0xa0, 0x25, 0x19, 0xb1, 0x8d, 0x87, 0x0d, 0x82, 0xc8, 0x7d, 0x3f, 0x09, 0xd3, 0x11, 0xb3, - 0xba, 0x0e, 0x49, 0xdb, 0x6c, 0x62, 0x46, 0x65, 0x61, 0xcc, 0x20, 0x9f, 0xf5, 0x2c, 0x8c, 0xb6, - 0xcc, 0xda, 0xcb, 0xe6, 0x21, 0xca, 0x26, 0xc8, 0x30, 0x3f, 0xd4, 0xe7, 0x00, 0xea, 0xa8, 0x85, - 0xec, 0x3a, 0xb2, 0x6b, 0xc7, 0x59, 0xf5, 0xac, 0xba, 0x30, 0x66, 0x08, 0x23, 0xfa, 0xc7, 0x60, - 0xaa, 0xd5, 0xd9, 0x6f, 0x58, 0xb5, 0xaa, 0x20, 0x06, 0x67, 0xd5, 0x85, 0x61, 0x43, 0xa3, 0x13, - 0xab, 0x81, 0xf0, 0x13, 0x30, 0xf9, 0x2a, 0x32, 0x5f, 0x16, 0x45, 0xd3, 0x44, 0x74, 0x02, 0x0f, - 0x0b, 0x82, 0x25, 0xc8, 0x34, 0x91, 0xeb, 0x9a, 0x87, 0xa8, 0xea, 0x1d, 0xb7, 0x50, 0x36, 0x49, - 0xae, 0xfe, 0x6c, 0xd7, 0xd5, 0x87, 0xaf, 0x3c, 0xcd, 0x50, 0xbb, 0xc7, 0x2d, 0xa4, 0x17, 0x60, - 0x0c, 0xd9, 0x9d, 0x26, 0x65, 0x18, 0xee, 0x61, 0xbf, 0xb2, 0xdd, 0x69, 0x86, 0x59, 0x52, 0x18, - 0xc6, 0x28, 0x46, 0x5d, 0xd4, 0x7e, 0xc5, 0xaa, 0xa1, 0xec, 0x08, 0x21, 0x78, 0xa2, 0x8b, 0x60, - 0x87, 0xce, 0x87, 0x39, 0x38, 0x4e, 0x2f, 0xc1, 0x18, 0x7a, 0xcd, 0x43, 0xb6, 0x6b, 0x39, 0x76, - 0x76, 0x94, 0x90, 0x3c, 0x1e, 0xe1, 0x45, 0xd4, 0xa8, 0x87, 0x29, 0x02, 0x9c, 0x7e, 0x0d, 0x46, - 0x9d, 0x96, 0x67, 0x39, 0xb6, 0x9b, 0x4d, 0x9d, 0x55, 0x16, 0xd2, 0xcb, 0x67, 0x22, 0x03, 0x61, - 0x8b, 0xca, 0x18, 0x5c, 0x58, 0x5f, 0x07, 0xcd, 0x75, 0x3a, 0xed, 0x1a, 0xaa, 0xd6, 0x9c, 0x3a, - 0xaa, 0x5a, 0xf6, 0x81, 0x93, 0x1d, 0x23, 0x04, 0xf3, 0xdd, 0x17, 0x42, 0x04, 0x4b, 0x4e, 0x1d, - 0xad, 0xdb, 0x07, 0x8e, 0x31, 0xe1, 0x4a, 0xc7, 0xfa, 0x0c, 0x8c, 0xb8, 0xc7, 0xb6, 0x67, 0xbe, - 0x96, 0xcd, 0x90, 0x08, 0x61, 0x47, 0xb9, 0xdf, 0x1d, 0x81, 0xc9, 0x41, 0x42, 0xec, 0x16, 0x0c, - 0x1f, 0xe0, 0xab, 0xcc, 0x26, 0x4e, 0x62, 0x03, 0x8a, 0x91, 0x8d, 0x38, 0xf2, 0x80, 0x46, 0x2c, - 0x40, 0xda, 0x46, 0xae, 0x87, 0xea, 0x34, 0x22, 0xd4, 0x01, 0x63, 0x0a, 0x28, 0xa8, 0x3b, 0xa4, - 0x92, 0x0f, 0x14, 0x52, 0x2f, 0xc0, 0xa4, 0xaf, 0x52, 0xb5, 0x6d, 0xda, 0x87, 0x3c, 0x36, 0x2f, - 0xc6, 0x69, 0xb2, 0x54, 0xe6, 0x38, 0x03, 0xc3, 0x8c, 0x09, 0x24, 0x1d, 0xeb, 0xab, 0x00, 0x8e, - 0x8d, 0x9c, 0x83, 0x6a, 0x1d, 0xd5, 0x1a, 0xd9, 0x54, 0x0f, 0x2b, 0x6d, 0x61, 0x91, 0x2e, 0x2b, - 0x39, 0x74, 0xb4, 0xd6, 0xd0, 0x6f, 0x06, 0xa1, 0x36, 0xda, 0x23, 0x52, 0x36, 0x69, 0x92, 0x75, - 0x45, 0xdb, 0x1e, 0x4c, 0xb4, 0x11, 0x8e, 0x7b, 0x54, 0x67, 0x57, 0x36, 0x46, 0x94, 0x58, 0x8a, - 0xbd, 0x32, 0x83, 0xc1, 0xe8, 0x85, 0x8d, 0xb7, 0xc5, 0x43, 0xfd, 0x31, 0xf0, 0x07, 0xaa, 0x24, - 0xac, 0x80, 0x54, 0xa1, 0x0c, 0x1f, 0xac, 0x98, 0x4d, 0x34, 0xfb, 0x3a, 0x4c, 0xc8, 0xe6, 0xd1, - 0x4f, 0xc1, 0xb0, 0xeb, 0x99, 0x6d, 0x8f, 0x44, 0xe1, 0xb0, 0x41, 0x0f, 0x74, 0x0d, 0x54, 0x64, - 0xd7, 0x49, 0x95, 0x1b, 0x36, 0xf0, 0x47, 0xfd, 0x17, 0x82, 0x0b, 0x56, 0xc9, 0x05, 0x5f, 0xe8, - 0xf6, 0xa8, 0xc4, 0x1c, 0xbe, 0xee, 0xd9, 0xeb, 0x30, 0x2e, 0x5d, 0xc0, 0xa0, 0xa7, 0xce, 0xfd, - 0x79, 0x38, 0x1d, 0x49, 0xad, 0xbf, 0x00, 0xa7, 0x3a, 0xb6, 0x65, 0x7b, 0xa8, 0xdd, 0x6a, 0x23, - 0x1c, 0xb1, 0xf4, 0x54, 0xd9, 0xff, 0x3e, 0xda, 0x23, 0xe6, 0xf6, 0x44, 0x69, 0xca, 0x62, 0x4c, - 0x77, 0xba, 0x07, 0x17, 0xc7, 0x52, 0x3f, 0x18, 0xd5, 0xde, 0x78, 0xe3, 0x8d, 0x37, 0x12, 0xb9, - 0xcf, 0x8f, 0xc0, 0xa9, 0xa8, 0x9c, 0x89, 0x4c, 0xdf, 0x19, 0x18, 0xb1, 0x3b, 0xcd, 0x7d, 0xd4, - 0x26, 0x46, 0x1a, 0x36, 0xd8, 0x91, 0x5e, 0x80, 0xe1, 0x86, 0xb9, 0x8f, 0x1a, 0xd9, 0xe4, 0x59, - 0x65, 0x61, 0x62, 0xf9, 0x63, 0x03, 0x65, 0xe5, 0xd2, 0x06, 0x86, 0x18, 0x14, 0xa9, 0x3f, 0x03, - 0x49, 0x56, 0xa2, 0x31, 0xc3, 0xe2, 0x60, 0x0c, 0x38, 0x97, 0x0c, 0x82, 0xd3, 0x1f, 0x81, 0x31, - 0xfc, 0x3f, 0x8d, 0x8d, 0x11, 0xa2, 0x73, 0x0a, 0x0f, 0xe0, 0xb8, 0xd0, 0x67, 0x21, 0x45, 0xd2, - 0xa4, 0x8e, 0xf8, 0xd2, 0xe6, 0x1f, 0xe3, 0xc0, 0xaa, 0xa3, 0x03, 0xb3, 0xd3, 0xf0, 0xaa, 0xaf, - 0x98, 0x8d, 0x0e, 0x22, 0x01, 0x3f, 0x66, 0x64, 0xd8, 0xe0, 0xa7, 0xf1, 0x98, 0x3e, 0x0f, 0x69, - 0x9a, 0x55, 0x96, 0x5d, 0x47, 0xaf, 0x91, 0xea, 0x39, 0x6c, 0xd0, 0x44, 0x5b, 0xc7, 0x23, 0xf8, - 0xf4, 0x2f, 0xb9, 0x8e, 0xcd, 0x43, 0x93, 0x9c, 0x02, 0x0f, 0x90, 0xd3, 0x5f, 0x0f, 0x17, 0xee, - 0x47, 0xa3, 0x2f, 0x2f, 0x1c, 0x53, 0xb9, 0x6f, 0x27, 0x20, 0x49, 0xea, 0xc5, 0x24, 0xa4, 0x77, - 0xef, 0x6e, 0x97, 0xab, 0xab, 0x5b, 0x7b, 0xc5, 0x8d, 0xb2, 0xa6, 0xe8, 0x13, 0x00, 0x64, 0x60, - 0x6d, 0x63, 0xab, 0xb0, 0xab, 0x25, 0xfc, 0xe3, 0xf5, 0xca, 0xee, 0xb5, 0x15, 0x4d, 0xf5, 0x01, - 0x7b, 0x74, 0x20, 0x29, 0x0a, 0x5c, 0x59, 0xd6, 0x86, 0x75, 0x0d, 0x32, 0x94, 0x60, 0xfd, 0x85, - 0xf2, 0xea, 0xb5, 0x15, 0x6d, 0x44, 0x1e, 0xb9, 0xb2, 0xac, 0x8d, 0xea, 0xe3, 0x30, 0x46, 0x46, - 0x8a, 0x5b, 0x5b, 0x1b, 0x5a, 0xca, 0xe7, 0xdc, 0xd9, 0x35, 0xd6, 0x2b, 0xb7, 0xb5, 0x31, 0x9f, - 0xf3, 0xb6, 0xb1, 0xb5, 0xb7, 0xad, 0x81, 0xcf, 0xb0, 0x59, 0xde, 0xd9, 0x29, 0xdc, 0x2e, 0x6b, - 0x69, 0x5f, 0xa2, 0x78, 0x77, 0xb7, 0xbc, 0xa3, 0x65, 0x24, 0xb5, 0xae, 0x2c, 0x6b, 0xe3, 0xfe, - 0x29, 0xca, 0x95, 0xbd, 0x4d, 0x6d, 0x42, 0x9f, 0x82, 0x71, 0x7a, 0x0a, 0xae, 0xc4, 0x64, 0x68, - 0xe8, 0xda, 0x8a, 0xa6, 0x05, 0x8a, 0x50, 0x96, 0x29, 0x69, 0xe0, 0xda, 0x8a, 0xa6, 0xe7, 0x4a, - 0x30, 0x4c, 0xa2, 0x4b, 0xd7, 0x61, 0x62, 0xa3, 0x50, 0x2c, 0x6f, 0x54, 0xb7, 0xb6, 0x77, 0xd7, - 0xb7, 0x2a, 0x85, 0x0d, 0x4d, 0x09, 0xc6, 0x8c, 0xf2, 0xa7, 0xf6, 0xd6, 0x8d, 0xf2, 0xaa, 0x96, - 0x10, 0xc7, 0xb6, 0xcb, 0x85, 0xdd, 0xf2, 0xaa, 0xa6, 0xe6, 0x6a, 0x70, 0x2a, 0xaa, 0x4e, 0x46, - 0x66, 0x86, 0xe0, 0xe2, 0x44, 0x0f, 0x17, 0x13, 0xae, 0x2e, 0x17, 0xbf, 0x97, 0x80, 0xe9, 0x88, - 0xb5, 0x22, 0xf2, 0x24, 0xcf, 0xc2, 0x30, 0x0d, 0x51, 0xba, 0x7a, 0x3e, 0x19, 0xb9, 0xe8, 0x90, + 0xeb, 0x6c, 0x54, 0x15, 0x57, 0x79, 0x1f, 0xb6, 0xce, 0xad, 0xfb, 0xf4, 0x41, 0x03, 0x0d, 0xce, + 0x48, 0xf6, 0x3e, 0xe8, 0x65, 0x06, 0x7d, 0xce, 0xff, 0x7d, 0xfd, 0xf7, 0x7f, 0x3b, 0x7f, 0xf7, + 0x69, 0x80, 0xf0, 0x47, 0x37, 0xe0, 0xec, 0xa1, 0x6d, 0x1f, 0x36, 0xd0, 0xc5, 0x56, 0xdb, 0x76, + 0xed, 0xfd, 0xce, 0xc1, 0xc5, 0x1a, 0x72, 0xaa, 0xed, 0x7a, 0xcb, 0xb5, 0xdb, 0x8b, 0x64, 0x4c, + 0x9f, 0xa0, 0x12, 0x8b, 0x5c, 0x22, 0xbb, 0x09, 0x93, 0x6b, 0xf5, 0x06, 0x5a, 0xf5, 0x04, 0x77, + 0x90, 0xab, 0x5f, 0x87, 0xf8, 0x41, 0xbd, 0x81, 0x32, 0xca, 0x59, 0x75, 0x3e, 0xb5, 0x7c, 0x7e, + 0x51, 0x02, 0x2d, 0x06, 0x11, 0xdb, 0x78, 0xd8, 0x20, 0x88, 0xec, 0xf7, 0xe3, 0x30, 0x15, 0x32, + 0xab, 0xeb, 0x10, 0xb7, 0xcc, 0x26, 0x66, 0x54, 0xe6, 0x47, 0x0d, 0xf2, 0x59, 0xcf, 0xc0, 0x48, + 0xcb, 0xac, 0xbe, 0x6c, 0x1e, 0xa2, 0x4c, 0x8c, 0x0c, 0xf3, 0x43, 0x7d, 0x16, 0xa0, 0x86, 0x5a, + 0xc8, 0xaa, 0x21, 0xab, 0x7a, 0x9c, 0x51, 0xcf, 0xaa, 0xf3, 0xa3, 0x86, 0x30, 0xa2, 0x7f, 0x0c, + 0x26, 0x5b, 0x9d, 0xfd, 0x46, 0xbd, 0x5a, 0x11, 0xc4, 0xe0, 0xac, 0x3a, 0x9f, 0x30, 0x34, 0x3a, + 0xb1, 0xea, 0x0b, 0x3f, 0x01, 0x13, 0xaf, 0x22, 0xf3, 0x65, 0x51, 0x34, 0x45, 0x44, 0xc7, 0xf1, + 0xb0, 0x20, 0x58, 0x84, 0x74, 0x13, 0x39, 0x8e, 0x79, 0x88, 0x2a, 0xee, 0x71, 0x0b, 0x65, 0xe2, + 0xe4, 0xea, 0xcf, 0x76, 0x5d, 0xbd, 0x7c, 0xe5, 0x29, 0x86, 0xda, 0x3d, 0x6e, 0x21, 0x3d, 0x0f, + 0xa3, 0xc8, 0xea, 0x34, 0x29, 0x43, 0xa2, 0x87, 0xfd, 0x4a, 0x56, 0xa7, 0x29, 0xb3, 0x24, 0x31, + 0x8c, 0x51, 0x8c, 0x38, 0xa8, 0xfd, 0x4a, 0xbd, 0x8a, 0x32, 0xc3, 0x84, 0xe0, 0x89, 0x2e, 0x82, + 0x1d, 0x3a, 0x2f, 0x73, 0x70, 0x9c, 0x5e, 0x84, 0x51, 0xf4, 0x9a, 0x8b, 0x2c, 0xa7, 0x6e, 0x5b, + 0x99, 0x11, 0x42, 0xf2, 0x78, 0x88, 0x17, 0x51, 0xa3, 0x26, 0x53, 0xf8, 0x38, 0xfd, 0x2a, 0x8c, + 0xd8, 0x2d, 0xb7, 0x6e, 0x5b, 0x4e, 0x26, 0x79, 0x56, 0x99, 0x4f, 0x2d, 0x9f, 0x09, 0x0d, 0x84, + 0x2d, 0x2a, 0x63, 0x70, 0x61, 0x7d, 0x1d, 0x34, 0xc7, 0xee, 0xb4, 0xab, 0xa8, 0x52, 0xb5, 0x6b, + 0xa8, 0x52, 0xb7, 0x0e, 0xec, 0xcc, 0x28, 0x21, 0x98, 0xeb, 0xbe, 0x10, 0x22, 0x58, 0xb4, 0x6b, + 0x68, 0xdd, 0x3a, 0xb0, 0x8d, 0x71, 0x27, 0x70, 0xac, 0x4f, 0xc3, 0xb0, 0x73, 0x6c, 0xb9, 0xe6, + 0x6b, 0x99, 0x34, 0x89, 0x10, 0x76, 0x94, 0xfd, 0xfd, 0x61, 0x98, 0x18, 0x24, 0xc4, 0x6e, 0x42, + 0xe2, 0x00, 0x5f, 0x65, 0x26, 0x76, 0x12, 0x1b, 0x50, 0x4c, 0xd0, 0x88, 0xc3, 0xf7, 0x69, 0xc4, + 0x3c, 0xa4, 0x2c, 0xe4, 0xb8, 0xa8, 0x46, 0x23, 0x42, 0x1d, 0x30, 0xa6, 0x80, 0x82, 0xba, 0x43, + 0x2a, 0x7e, 0x5f, 0x21, 0xf5, 0x02, 0x4c, 0x78, 0x2a, 0x55, 0xda, 0xa6, 0x75, 0xc8, 0x63, 0xf3, + 0x62, 0x94, 0x26, 0x8b, 0x25, 0x8e, 0x33, 0x30, 0xcc, 0x18, 0x47, 0x81, 0x63, 0x7d, 0x15, 0xc0, + 0xb6, 0x90, 0x7d, 0x50, 0xa9, 0xa1, 0x6a, 0x23, 0x93, 0xec, 0x61, 0xa5, 0x2d, 0x2c, 0xd2, 0x65, + 0x25, 0x9b, 0x8e, 0x56, 0x1b, 0xfa, 0x0d, 0x3f, 0xd4, 0x46, 0x7a, 0x44, 0xca, 0x26, 0x4d, 0xb2, + 0xae, 0x68, 0xdb, 0x83, 0xf1, 0x36, 0xc2, 0x71, 0x8f, 0x6a, 0xec, 0xca, 0x46, 0x89, 0x12, 0x8b, + 0x91, 0x57, 0x66, 0x30, 0x18, 0xbd, 0xb0, 0xb1, 0xb6, 0x78, 0xa8, 0x3f, 0x06, 0xde, 0x40, 0x85, + 0x84, 0x15, 0x90, 0x2a, 0x94, 0xe6, 0x83, 0x65, 0xb3, 0x89, 0x66, 0x5e, 0x87, 0xf1, 0xa0, 0x79, + 0xf4, 0x53, 0x90, 0x70, 0x5c, 0xb3, 0xed, 0x92, 0x28, 0x4c, 0x18, 0xf4, 0x40, 0xd7, 0x40, 0x45, + 0x56, 0x8d, 0x54, 0xb9, 0x84, 0x81, 0x3f, 0xea, 0x3f, 0xe7, 0x5f, 0xb0, 0x4a, 0x2e, 0xf8, 0x42, + 0xb7, 0x47, 0x03, 0xcc, 0xf2, 0x75, 0xcf, 0x5c, 0x83, 0xb1, 0xc0, 0x05, 0x0c, 0x7a, 0xea, 0xec, + 0x5f, 0x84, 0xd3, 0xa1, 0xd4, 0xfa, 0x0b, 0x70, 0xaa, 0x63, 0xd5, 0x2d, 0x17, 0xb5, 0x5b, 0x6d, + 0x84, 0x23, 0x96, 0x9e, 0x2a, 0xf3, 0xdf, 0x47, 0x7a, 0xc4, 0xdc, 0x9e, 0x28, 0x4d, 0x59, 0x8c, + 0xa9, 0x4e, 0xf7, 0xe0, 0xc2, 0x68, 0xf2, 0x07, 0x23, 0xda, 0x1b, 0x6f, 0xbc, 0xf1, 0x46, 0x2c, + 0xfb, 0xf9, 0x61, 0x38, 0x15, 0x96, 0x33, 0xa1, 0xe9, 0x3b, 0x0d, 0xc3, 0x56, 0xa7, 0xb9, 0x8f, + 0xda, 0xc4, 0x48, 0x09, 0x83, 0x1d, 0xe9, 0x79, 0x48, 0x34, 0xcc, 0x7d, 0xd4, 0xc8, 0xc4, 0xcf, + 0x2a, 0xf3, 0xe3, 0xcb, 0x1f, 0x1b, 0x28, 0x2b, 0x17, 0x37, 0x30, 0xc4, 0xa0, 0x48, 0xfd, 0x19, + 0x88, 0xb3, 0x12, 0x8d, 0x19, 0x16, 0x06, 0x63, 0xc0, 0xb9, 0x64, 0x10, 0x9c, 0xfe, 0x08, 0x8c, + 0xe2, 0xff, 0x69, 0x6c, 0x0c, 0x13, 0x9d, 0x93, 0x78, 0x00, 0xc7, 0x85, 0x3e, 0x03, 0x49, 0x92, + 0x26, 0x35, 0xc4, 0x97, 0x36, 0xef, 0x18, 0x07, 0x56, 0x0d, 0x1d, 0x98, 0x9d, 0x86, 0x5b, 0x79, + 0xc5, 0x6c, 0x74, 0x10, 0x09, 0xf8, 0x51, 0x23, 0xcd, 0x06, 0x3f, 0x8d, 0xc7, 0xf4, 0x39, 0x48, + 0xd1, 0xac, 0xaa, 0x5b, 0x35, 0xf4, 0x1a, 0xa9, 0x9e, 0x09, 0x83, 0x26, 0xda, 0x3a, 0x1e, 0xc1, + 0xa7, 0x7f, 0xc9, 0xb1, 0x2d, 0x1e, 0x9a, 0xe4, 0x14, 0x78, 0x80, 0x9c, 0xfe, 0x9a, 0x5c, 0xb8, + 0x1f, 0x0d, 0xbf, 0x3c, 0x39, 0xa6, 0xb2, 0xdf, 0x8a, 0x41, 0x9c, 0xd4, 0x8b, 0x09, 0x48, 0xed, + 0xde, 0xd9, 0x2e, 0x55, 0x56, 0xb7, 0xf6, 0x0a, 0x1b, 0x25, 0x4d, 0xd1, 0xc7, 0x01, 0xc8, 0xc0, + 0xda, 0xc6, 0x56, 0x7e, 0x57, 0x8b, 0x79, 0xc7, 0xeb, 0xe5, 0xdd, 0xab, 0x2b, 0x9a, 0xea, 0x01, + 0xf6, 0xe8, 0x40, 0x5c, 0x14, 0xb8, 0xbc, 0xac, 0x25, 0x74, 0x0d, 0xd2, 0x94, 0x60, 0xfd, 0x85, + 0xd2, 0xea, 0xd5, 0x15, 0x6d, 0x38, 0x38, 0x72, 0x79, 0x59, 0x1b, 0xd1, 0xc7, 0x60, 0x94, 0x8c, + 0x14, 0xb6, 0xb6, 0x36, 0xb4, 0xa4, 0xc7, 0xb9, 0xb3, 0x6b, 0xac, 0x97, 0x6f, 0x69, 0xa3, 0x1e, + 0xe7, 0x2d, 0x63, 0x6b, 0x6f, 0x5b, 0x03, 0x8f, 0x61, 0xb3, 0xb4, 0xb3, 0x93, 0xbf, 0x55, 0xd2, + 0x52, 0x9e, 0x44, 0xe1, 0xce, 0x6e, 0x69, 0x47, 0x4b, 0x07, 0xd4, 0xba, 0xbc, 0xac, 0x8d, 0x79, + 0xa7, 0x28, 0x95, 0xf7, 0x36, 0xb5, 0x71, 0x7d, 0x12, 0xc6, 0xe8, 0x29, 0xb8, 0x12, 0x13, 0xd2, + 0xd0, 0xd5, 0x15, 0x4d, 0xf3, 0x15, 0xa1, 0x2c, 0x93, 0x81, 0x81, 0xab, 0x2b, 0x9a, 0x9e, 0x2d, + 0x42, 0x82, 0x44, 0x97, 0xae, 0xc3, 0xf8, 0x46, 0xbe, 0x50, 0xda, 0xa8, 0x6c, 0x6d, 0xef, 0xae, + 0x6f, 0x95, 0xf3, 0x1b, 0x9a, 0xe2, 0x8f, 0x19, 0xa5, 0x4f, 0xed, 0xad, 0x1b, 0xa5, 0x55, 0x2d, + 0x26, 0x8e, 0x6d, 0x97, 0xf2, 0xbb, 0xa5, 0x55, 0x4d, 0xcd, 0x56, 0xe1, 0x54, 0x58, 0x9d, 0x0c, + 0xcd, 0x0c, 0xc1, 0xc5, 0xb1, 0x1e, 0x2e, 0x26, 0x5c, 0x5d, 0x2e, 0x7e, 0x2f, 0x06, 0x53, 0x21, + 0x6b, 0x45, 0xe8, 0x49, 0x9e, 0x85, 0x04, 0x0d, 0x51, 0xba, 0x7a, 0x3e, 0x19, 0xba, 0xe8, 0x90, 0x80, 0xed, 0x5a, 0x41, 0x09, 0x4e, 0xec, 0x20, 0xd4, 0x1e, 0x1d, 0x04, 0xa6, 0xe8, 0xaa, 0xe9, - 0x7f, 0xb6, 0xab, 0xa6, 0xd3, 0x65, 0xef, 0xda, 0x20, 0xcb, 0x1e, 0x19, 0x3b, 0x59, 0x6d, 0x1f, - 0x8e, 0xa8, 0xed, 0xb7, 0x60, 0xaa, 0x8b, 0x68, 0xe0, 0x1a, 0xfb, 0x59, 0x05, 0xb2, 0xbd, 0x8c, - 0x13, 0x53, 0xe9, 0x12, 0x52, 0xa5, 0xbb, 0x15, 0xb6, 0xe0, 0xb9, 0xde, 0x4e, 0xe8, 0xf2, 0xf5, - 0xd7, 0x15, 0x98, 0x89, 0xee, 0x14, 0x23, 0x75, 0x78, 0x06, 0x46, 0x9a, 0xc8, 0x3b, 0x72, 0x78, - 0xb7, 0x74, 0x21, 0x62, 0x0d, 0xc6, 0xd3, 0x61, 0x67, 0x33, 0x94, 0xb8, 0x88, 0xab, 0xbd, 0xda, - 0x3d, 0xaa, 0x4d, 0x97, 0xa6, 0xbf, 0x92, 0x80, 0xd3, 0x91, 0xe4, 0x91, 0x8a, 0x3e, 0x0a, 0x60, - 0xd9, 0xad, 0x8e, 0x47, 0x3b, 0x22, 0x5a, 0x60, 0xc7, 0xc8, 0x08, 0x29, 0x5e, 0xb8, 0x78, 0x76, - 0x3c, 0x7f, 0x5e, 0x25, 0xf3, 0x40, 0x87, 0x88, 0xc0, 0x8d, 0x40, 0xd1, 0x24, 0x51, 0x74, 0xae, - 0xc7, 0x95, 0x76, 0x05, 0xe6, 0x25, 0xd0, 0x6a, 0x0d, 0x0b, 0xd9, 0x5e, 0xd5, 0xf5, 0xda, 0xc8, - 0x6c, 0x5a, 0xf6, 0x21, 0x59, 0x41, 0x52, 0xf9, 0xe1, 0x03, 0xb3, 0xe1, 0x22, 0x63, 0x92, 0x4e, - 0xef, 0xf0, 0x59, 0x8c, 0x20, 0x01, 0xd4, 0x16, 0x10, 0x23, 0x12, 0x82, 0x4e, 0xfb, 0x88, 0xdc, - 0x6f, 0xa5, 0x20, 0x2d, 0xf4, 0xd5, 0xfa, 0x39, 0xc8, 0xbc, 0x64, 0xbe, 0x62, 0x56, 0xf9, 0xbd, - 0x12, 0xb5, 0x44, 0x1a, 0x8f, 0x6d, 0xb3, 0xfb, 0xa5, 0x4b, 0x70, 0x8a, 0x88, 0x38, 0x1d, 0x0f, - 0xb5, 0xab, 0xb5, 0x86, 0xe9, 0xba, 0xc4, 0x68, 0x29, 0x22, 0xaa, 0xe3, 0xb9, 0x2d, 0x3c, 0x55, - 0xe2, 0x33, 0xfa, 0x55, 0x98, 0x26, 0x88, 0x66, 0xa7, 0xe1, 0x59, 0xad, 0x06, 0xaa, 0xe2, 0xbb, - 0x37, 0x97, 0xac, 0x24, 0xbe, 0x66, 0x53, 0x58, 0x62, 0x93, 0x09, 0x60, 0x8d, 0x5c, 0x7d, 0x15, - 0x1e, 0x25, 0xb0, 0x43, 0x64, 0xa3, 0xb6, 0xe9, 0xa1, 0x2a, 0xfa, 0xc5, 0x8e, 0xd9, 0x70, 0xab, - 0xa6, 0x5d, 0xaf, 0x1e, 0x99, 0xee, 0x51, 0xf6, 0x14, 0x26, 0x28, 0x26, 0xb2, 0x8a, 0xf1, 0x30, - 0x16, 0xbc, 0xcd, 0xe4, 0xca, 0x44, 0xac, 0x60, 0xd7, 0x9f, 0x33, 0xdd, 0x23, 0x3d, 0x0f, 0x33, - 0x84, 0xc5, 0xf5, 0xda, 0x96, 0x7d, 0x58, 0xad, 0x1d, 0xa1, 0xda, 0xcb, 0xd5, 0x8e, 0x77, 0x70, - 0x23, 0xfb, 0x88, 0x78, 0x7e, 0xa2, 0xe1, 0x0e, 0x91, 0x29, 0x61, 0x91, 0x3d, 0xef, 0xe0, 0x86, - 0xbe, 0x03, 0x19, 0xec, 0x8c, 0xa6, 0xf5, 0x3a, 0xaa, 0x1e, 0x38, 0x6d, 0xb2, 0x34, 0x4e, 0x44, - 0x94, 0x26, 0xc1, 0x82, 0x4b, 0x5b, 0x0c, 0xb0, 0xe9, 0xd4, 0x51, 0x7e, 0x78, 0x67, 0xbb, 0x5c, - 0x5e, 0x35, 0xd2, 0x9c, 0x65, 0xcd, 0x69, 0xe3, 0x80, 0x3a, 0x74, 0x7c, 0x03, 0xa7, 0x69, 0x40, - 0x1d, 0x3a, 0xdc, 0xbc, 0x57, 0x61, 0xba, 0x56, 0xa3, 0xd7, 0x6c, 0xd5, 0xaa, 0xec, 0x1e, 0xcb, - 0xcd, 0x6a, 0x92, 0xb1, 0x6a, 0xb5, 0xdb, 0x54, 0x80, 0xc5, 0xb8, 0xab, 0xdf, 0x84, 0xd3, 0x81, - 0xb1, 0x44, 0xe0, 0x54, 0xd7, 0x55, 0x86, 0xa1, 0x57, 0x61, 0xba, 0x75, 0xdc, 0x0d, 0xd4, 0xa5, - 0x33, 0xb6, 0x8e, 0xc3, 0xb0, 0xeb, 0x70, 0xaa, 0x75, 0xd4, 0xea, 0xc6, 0x2d, 0x8a, 0x38, 0xbd, - 0x75, 0xd4, 0x0a, 0x03, 0x1f, 0x27, 0x37, 0xdc, 0x6d, 0x54, 0x33, 0x3d, 0x54, 0xcf, 0x3e, 0x24, - 0x8a, 0x0b, 0x13, 0xfa, 0x45, 0xd0, 0x6a, 0xb5, 0x2a, 0xb2, 0xcd, 0xfd, 0x06, 0xaa, 0x9a, 0x6d, - 0x64, 0x9b, 0x6e, 0x76, 0x5e, 0x14, 0x9e, 0xa8, 0xd5, 0xca, 0x64, 0xb6, 0x40, 0x26, 0xf5, 0x45, - 0x98, 0x72, 0xf6, 0x5f, 0xaa, 0xd1, 0x90, 0xac, 0xb6, 0xda, 0xe8, 0xc0, 0x7a, 0x2d, 0x7b, 0x9e, - 0xd8, 0x77, 0x12, 0x4f, 0x90, 0x80, 0xdc, 0x26, 0xc3, 0xfa, 0x93, 0xa0, 0xd5, 0xdc, 0x23, 0xb3, - 0xdd, 0x22, 0x35, 0xd9, 0x6d, 0x99, 0x35, 0x94, 0x7d, 0x9c, 0x8a, 0xd2, 0xf1, 0x0a, 0x1f, 0xc6, - 0x29, 0xe1, 0xbe, 0x6a, 0x1d, 0x78, 0x9c, 0xf1, 0x09, 0x9a, 0x12, 0x64, 0x8c, 0xb1, 0x2d, 0x80, - 0x86, 0x4d, 0x21, 0x9d, 0x78, 0x81, 0x88, 0x4d, 0xb4, 0x8e, 0x5a, 0xe2, 0x79, 0x1f, 0x83, 0x71, - 0x2c, 0x19, 0x9c, 0xf4, 0x49, 0xda, 0x90, 0xb5, 0x8e, 0x84, 0x33, 0x7e, 0x68, 0xbd, 0x71, 0x2e, - 0x0f, 0x19, 0x31, 0x3e, 0xf5, 0x31, 0xa0, 0x11, 0xaa, 0x29, 0xb8, 0x59, 0x29, 0x6d, 0xad, 0xe2, - 0x36, 0xe3, 0x33, 0x65, 0x2d, 0x81, 0xdb, 0x9d, 0x8d, 0xf5, 0xdd, 0x72, 0xd5, 0xd8, 0xab, 0xec, - 0xae, 0x6f, 0x96, 0x35, 0x55, 0xec, 0xab, 0xbf, 0x93, 0x80, 0x09, 0xf9, 0x16, 0x49, 0xff, 0x04, - 0x3c, 0xc4, 0x9f, 0x67, 0xb8, 0xc8, 0xab, 0xbe, 0x6a, 0xb5, 0x49, 0xca, 0x34, 0x4d, 0xba, 0x7c, - 0xf9, 0x4e, 0x3b, 0xc5, 0xa4, 0x76, 0x90, 0xf7, 0xbc, 0xd5, 0xc6, 0x09, 0xd1, 0x34, 0x3d, 0x7d, - 0x03, 0xe6, 0x6d, 0xa7, 0xea, 0x7a, 0xa6, 0x5d, 0x37, 0xdb, 0xf5, 0x6a, 0xf0, 0x24, 0xa9, 0x6a, - 0xd6, 0x6a, 0xc8, 0x75, 0x1d, 0xba, 0x54, 0xf9, 0x2c, 0x67, 0x6c, 0x67, 0x87, 0x09, 0x07, 0x35, - 0xbc, 0xc0, 0x44, 0x43, 0x01, 0xa6, 0xf6, 0x0a, 0xb0, 0x47, 0x60, 0xac, 0x69, 0xb6, 0xaa, 0xc8, - 0xf6, 0xda, 0xc7, 0xa4, 0x31, 0x4e, 0x19, 0xa9, 0xa6, 0xd9, 0x2a, 0xe3, 0xe3, 0x9f, 0xcd, 0xfd, - 0xc9, 0x7f, 0x55, 0x21, 0x23, 0x36, 0xc7, 0xf8, 0x5e, 0xa3, 0x46, 0xd6, 0x11, 0x85, 0x54, 0x9a, - 0xc7, 0xfa, 0xb6, 0xd2, 0x4b, 0x25, 0xbc, 0xc0, 0xe4, 0x47, 0x68, 0xcb, 0x6a, 0x50, 0x24, 0x5e, - 0xdc, 0x71, 0x6d, 0x41, 0xb4, 0x45, 0x48, 0x19, 0xec, 0x48, 0xbf, 0x0d, 0x23, 0x2f, 0xb9, 0x84, - 0x7b, 0x84, 0x70, 0x9f, 0xef, 0xcf, 0x7d, 0x67, 0x87, 0x90, 0x8f, 0xdd, 0xd9, 0xa9, 0x56, 0xb6, - 0x8c, 0xcd, 0xc2, 0x86, 0xc1, 0xe0, 0xfa, 0xc3, 0x90, 0x6c, 0x98, 0xaf, 0x1f, 0xcb, 0x4b, 0x11, - 0x19, 0x1a, 0xd4, 0xf0, 0x0f, 0x43, 0xf2, 0x55, 0x64, 0xbe, 0x2c, 0x2f, 0x00, 0x64, 0xe8, 0x43, - 0x0c, 0xfd, 0x8b, 0x30, 0x4c, 0xec, 0xa5, 0x03, 0x30, 0x8b, 0x69, 0x43, 0x7a, 0x0a, 0x92, 0xa5, - 0x2d, 0x03, 0x87, 0xbf, 0x06, 0x19, 0x3a, 0x5a, 0xdd, 0x5e, 0x2f, 0x97, 0xca, 0x5a, 0x22, 0x77, - 0x15, 0x46, 0xa8, 0x11, 0x70, 0x6a, 0xf8, 0x66, 0xd0, 0x86, 0xd8, 0x21, 0xe3, 0x50, 0xf8, 0xec, - 0xde, 0x66, 0xb1, 0x6c, 0x68, 0x09, 0xd1, 0xbd, 0x2e, 0x64, 0xc4, 0xbe, 0xf8, 0x67, 0x13, 0x53, - 0xbf, 0xa7, 0x40, 0x5a, 0xe8, 0x73, 0x71, 0x83, 0x62, 0x36, 0x1a, 0xce, 0xab, 0x55, 0xb3, 0x61, - 0x99, 0x2e, 0x0b, 0x0a, 0x20, 0x43, 0x05, 0x3c, 0x32, 0xa8, 0xd3, 0x7e, 0x26, 0xca, 0x7f, 0x59, - 0x01, 0x2d, 0xdc, 0x62, 0x86, 0x14, 0x54, 0x7e, 0xae, 0x0a, 0x7e, 0x51, 0x81, 0x09, 0xb9, 0xaf, - 0x0c, 0xa9, 0x77, 0xee, 0xe7, 0xaa, 0xde, 0xf7, 0x12, 0x30, 0x2e, 0x75, 0x93, 0x83, 0x6a, 0xf7, - 0x8b, 0x30, 0x65, 0xd5, 0x51, 0xb3, 0xe5, 0x78, 0xc8, 0xae, 0x1d, 0x57, 0x1b, 0xe8, 0x15, 0xd4, - 0xc8, 0xe6, 0x48, 0xa1, 0xb8, 0xd8, 0xbf, 0x5f, 0x5d, 0x5a, 0x0f, 0x70, 0x1b, 0x18, 0x96, 0x9f, - 0x5e, 0x5f, 0x2d, 0x6f, 0x6e, 0x6f, 0xed, 0x96, 0x2b, 0xa5, 0xbb, 0xd5, 0xbd, 0xca, 0x27, 0x2b, - 0x5b, 0xcf, 0x57, 0x0c, 0xcd, 0x0a, 0x89, 0x7d, 0x88, 0xa9, 0xbe, 0x0d, 0x5a, 0x58, 0x29, 0xfd, - 0x21, 0x88, 0x52, 0x4b, 0x1b, 0xd2, 0xa7, 0x61, 0xb2, 0xb2, 0x55, 0xdd, 0x59, 0x5f, 0x2d, 0x57, - 0xcb, 0x6b, 0x6b, 0xe5, 0xd2, 0xee, 0x0e, 0x7d, 0x02, 0xe1, 0x4b, 0xef, 0xca, 0x49, 0xfd, 0x05, - 0x15, 0xa6, 0x23, 0x34, 0xd1, 0x0b, 0xec, 0xde, 0x81, 0xde, 0xce, 0x3c, 0x35, 0x88, 0xf6, 0x4b, - 0x78, 0xc9, 0xdf, 0x36, 0xdb, 0x1e, 0xbb, 0xd5, 0x78, 0x12, 0xb0, 0x95, 0x6c, 0xcf, 0x3a, 0xb0, - 0x50, 0x9b, 0x3d, 0xb0, 0xa1, 0x37, 0x14, 0x93, 0xc1, 0x38, 0x7d, 0x66, 0xf3, 0x71, 0xd0, 0x5b, - 0x8e, 0x6b, 0x79, 0xd6, 0x2b, 0xa8, 0x6a, 0xd9, 0xfc, 0xe9, 0x0e, 0xbe, 0xc1, 0x48, 0x1a, 0x1a, - 0x9f, 0x59, 0xb7, 0x3d, 0x5f, 0xda, 0x46, 0x87, 0x66, 0x48, 0x1a, 0x17, 0x70, 0xd5, 0xd0, 0xf8, - 0x8c, 0x2f, 0x7d, 0x0e, 0x32, 0x75, 0xa7, 0x83, 0xbb, 0x2e, 0x2a, 0x87, 0xd7, 0x0b, 0xc5, 0x48, - 0xd3, 0x31, 0x5f, 0x84, 0xf5, 0xd3, 0xc1, 0x63, 0xa5, 0x8c, 0x91, 0xa6, 0x63, 0x54, 0xe4, 0x09, - 0x98, 0x34, 0x0f, 0x0f, 0xdb, 0x98, 0x9c, 0x13, 0xd1, 0x3b, 0x84, 0x09, 0x7f, 0x98, 0x08, 0xce, - 0xde, 0x81, 0x14, 0xb7, 0x03, 0x5e, 0x92, 0xb1, 0x25, 0xaa, 0x2d, 0x7a, 0xdb, 0x9b, 0x58, 0x18, - 0x33, 0x52, 0x36, 0x9f, 0x3c, 0x07, 0x19, 0xcb, 0xad, 0x06, 0x4f, 0xc9, 0x13, 0x67, 0x13, 0x0b, - 0x29, 0x23, 0x6d, 0xb9, 0xfe, 0x13, 0xc6, 0xdc, 0xd7, 0x13, 0x30, 0x21, 0x3f, 0xe5, 0xd7, 0x57, - 0x21, 0xd5, 0x70, 0x6a, 0x26, 0x09, 0x2d, 0xba, 0xc5, 0xb4, 0x10, 0xb3, 0x31, 0xb0, 0xb4, 0xc1, - 0xe4, 0x0d, 0x1f, 0x39, 0xfb, 0x1f, 0x15, 0x48, 0xf1, 0x61, 0x7d, 0x06, 0x92, 0x2d, 0xd3, 0x3b, - 0x22, 0x74, 0xc3, 0xc5, 0x84, 0xa6, 0x18, 0xe4, 0x18, 0x8f, 0xbb, 0x2d, 0xd3, 0x26, 0x21, 0xc0, - 0xc6, 0xf1, 0x31, 0xf6, 0x6b, 0x03, 0x99, 0x75, 0x72, 0xfb, 0xe1, 0x34, 0x9b, 0xc8, 0xf6, 0x5c, - 0xee, 0x57, 0x36, 0x5e, 0x62, 0xc3, 0xfa, 0xc7, 0x60, 0xca, 0x6b, 0x9b, 0x56, 0x43, 0x92, 0x4d, - 0x12, 0x59, 0x8d, 0x4f, 0xf8, 0xc2, 0x79, 0x78, 0x98, 0xf3, 0xd6, 0x91, 0x67, 0xd6, 0x8e, 0x50, - 0x3d, 0x00, 0x8d, 0x90, 0xc7, 0x0c, 0x0f, 0x31, 0x81, 0x55, 0x36, 0xcf, 0xb1, 0xb9, 0x3f, 0x50, - 0x60, 0x8a, 0xdf, 0x30, 0xd5, 0x7d, 0x63, 0x6d, 0x02, 0x98, 0xb6, 0xed, 0x78, 0xa2, 0xb9, 0xba, - 0x43, 0xb9, 0x0b, 0xb7, 0x54, 0xf0, 0x41, 0x86, 0x40, 0x30, 0xdb, 0x04, 0x08, 0x66, 0x7a, 0x9a, - 0x6d, 0x1e, 0xd2, 0x6c, 0x0b, 0x87, 0xec, 0x03, 0xd2, 0x5b, 0x6c, 0xa0, 0x43, 0xf8, 0xce, 0x4a, - 0x3f, 0x05, 0xc3, 0xfb, 0xe8, 0xd0, 0xb2, 0xd9, 0x83, 0x59, 0x7a, 0xc0, 0x1f, 0x84, 0x24, 0xfd, - 0x07, 0x21, 0xc5, 0x17, 0x61, 0xba, 0xe6, 0x34, 0xc3, 0xea, 0x16, 0xb5, 0xd0, 0x6d, 0xbe, 0xfb, - 0x9c, 0xf2, 0x19, 0x08, 0x5a, 0xcc, 0x9f, 0x28, 0xca, 0x3f, 0x4c, 0xa8, 0xb7, 0xb7, 0x8b, 0xbf, - 0x91, 0x98, 0xbd, 0x4d, 0xa1, 0xdb, 0xfc, 0x4a, 0x0d, 0x74, 0xd0, 0x40, 0x35, 0xac, 0x3d, 0x7c, - 0x6d, 0x01, 0x9e, 0x3a, 0xb4, 0xbc, 0xa3, 0xce, 0xfe, 0x52, 0xcd, 0x69, 0x5e, 0x3c, 0x74, 0x0e, - 0x9d, 0x60, 0xeb, 0x13, 0x1f, 0x91, 0x03, 0xf2, 0x89, 0x6d, 0x7f, 0x8e, 0xf9, 0xa3, 0xb3, 0xb1, - 0x7b, 0xa5, 0xf9, 0x0a, 0x4c, 0x33, 0xe1, 0x2a, 0xd9, 0x7f, 0xa1, 0x77, 0x11, 0x7a, 0xdf, 0x67, - 0x58, 0xd9, 0xdf, 0xfc, 0x3e, 0x59, 0xae, 0x8d, 0x29, 0x06, 0xc5, 0x73, 0xf4, 0x46, 0x23, 0x6f, - 0xc0, 0x69, 0x89, 0x8f, 0xa6, 0x26, 0x6a, 0xc7, 0x30, 0x7e, 0x87, 0x31, 0x4e, 0x0b, 0x8c, 0x3b, - 0x0c, 0x9a, 0x2f, 0xc1, 0xf8, 0x49, 0xb8, 0xfe, 0x1d, 0xe3, 0xca, 0x20, 0x91, 0xe4, 0x36, 0x4c, - 0x12, 0x92, 0x5a, 0xc7, 0xf5, 0x9c, 0x26, 0xa9, 0x7b, 0xfd, 0x69, 0xfe, 0xfd, 0xf7, 0x69, 0xae, - 0x4c, 0x60, 0x58, 0xc9, 0x47, 0xe5, 0xf3, 0x40, 0xb6, 0x9c, 0xea, 0xa8, 0xd6, 0x88, 0x61, 0xb8, - 0xc7, 0x14, 0xf1, 0xe5, 0xf3, 0x9f, 0x86, 0x53, 0xf8, 0x33, 0x29, 0x4b, 0xa2, 0x26, 0xf1, 0x0f, - 0xbc, 0xb2, 0x7f, 0xf0, 0x59, 0x9a, 0x8e, 0xd3, 0x3e, 0x81, 0xa0, 0x93, 0xe0, 0xc5, 0x43, 0xe4, - 0x79, 0xa8, 0xed, 0x56, 0xcd, 0x46, 0x94, 0x7a, 0xc2, 0x13, 0x83, 0xec, 0xaf, 0xfd, 0x50, 0xf6, - 0xe2, 0x6d, 0x8a, 0x2c, 0x34, 0x1a, 0xf9, 0x3d, 0x78, 0x28, 0x22, 0x2a, 0x06, 0xe0, 0xfc, 0x02, - 0xe3, 0x3c, 0xd5, 0x15, 0x19, 0x98, 0x76, 0x1b, 0xf8, 0xb8, 0xef, 0xcb, 0x01, 0x38, 0xff, 0x01, - 0xe3, 0xd4, 0x19, 0x96, 0xbb, 0x14, 0x33, 0xde, 0x81, 0xa9, 0x57, 0x50, 0x7b, 0xdf, 0x71, 0xd9, - 0x53, 0x9a, 0x01, 0xe8, 0xbe, 0xc8, 0xe8, 0x26, 0x19, 0x90, 0x3c, 0xb6, 0xc1, 0x5c, 0x37, 0x21, - 0x75, 0x60, 0xd6, 0xd0, 0x00, 0x14, 0x5f, 0x62, 0x14, 0xa3, 0x58, 0x1e, 0x43, 0x0b, 0x90, 0x39, - 0x74, 0xd8, 0xca, 0x14, 0x0f, 0xff, 0x32, 0x83, 0xa7, 0x39, 0x86, 0x51, 0xb4, 0x9c, 0x56, 0xa7, - 0x81, 0x97, 0xad, 0x78, 0x8a, 0xaf, 0x70, 0x0a, 0x8e, 0x61, 0x14, 0x27, 0x30, 0xeb, 0x9b, 0x9c, - 0xc2, 0x15, 0xec, 0xf9, 0x2c, 0xa4, 0x1d, 0xbb, 0x71, 0xec, 0xd8, 0x83, 0x28, 0xf1, 0x55, 0xc6, - 0x00, 0x0c, 0x82, 0x09, 0x6e, 0xc1, 0xd8, 0xa0, 0x8e, 0xf8, 0xda, 0x0f, 0x79, 0x7a, 0x70, 0x0f, - 0xdc, 0x86, 0x49, 0x5e, 0xa0, 0x2c, 0xc7, 0x1e, 0x80, 0xe2, 0x1f, 0x33, 0x8a, 0x09, 0x01, 0xc6, - 0x2e, 0xc3, 0x43, 0xae, 0x77, 0x88, 0x06, 0x21, 0xf9, 0x3a, 0xbf, 0x0c, 0x06, 0x61, 0xa6, 0xdc, - 0x47, 0x76, 0xed, 0x68, 0x30, 0x86, 0x6f, 0x70, 0x53, 0x72, 0x0c, 0xa6, 0x28, 0xc1, 0x78, 0xd3, - 0x6c, 0xbb, 0x47, 0x66, 0x63, 0x20, 0x77, 0xfc, 0x3a, 0xe3, 0xc8, 0xf8, 0x20, 0x66, 0x91, 0x8e, - 0x7d, 0x12, 0x9a, 0xdf, 0xe0, 0x16, 0x11, 0x60, 0x2c, 0xf5, 0x5c, 0x8f, 0x3c, 0xd2, 0x3a, 0x09, - 0xdb, 0x3f, 0xe1, 0xa9, 0x47, 0xb1, 0x9b, 0x22, 0xe3, 0x2d, 0x18, 0x73, 0xad, 0xd7, 0x07, 0xa2, - 0xf9, 0xa7, 0xdc, 0xd3, 0x04, 0x80, 0xc1, 0x77, 0xe1, 0xe1, 0xc8, 0x65, 0x62, 0x00, 0xb2, 0x7f, - 0xc6, 0xc8, 0x66, 0x22, 0x96, 0x0a, 0x56, 0x12, 0x4e, 0x4a, 0xf9, 0xcf, 0x79, 0x49, 0x40, 0x21, - 0xae, 0x6d, 0x7c, 0xaf, 0xe0, 0x9a, 0x07, 0x27, 0xb3, 0xda, 0xbf, 0xe0, 0x56, 0xa3, 0x58, 0xc9, - 0x6a, 0xbb, 0x30, 0xc3, 0x18, 0x4f, 0xe6, 0xd7, 0x6f, 0xf2, 0xc2, 0x4a, 0xd1, 0x7b, 0xb2, 0x77, - 0x5f, 0x84, 0x59, 0xdf, 0x9c, 0xbc, 0x29, 0x75, 0xab, 0x4d, 0xb3, 0x35, 0x00, 0xf3, 0x6f, 0x32, - 0x66, 0x5e, 0xf1, 0xfd, 0xae, 0xd6, 0xdd, 0x34, 0x5b, 0x98, 0xfc, 0x05, 0xc8, 0x72, 0xf2, 0x8e, - 0xdd, 0x46, 0x35, 0xe7, 0xd0, 0xb6, 0x5e, 0x47, 0xf5, 0x01, 0xa8, 0xbf, 0x15, 0x72, 0xd5, 0x9e, - 0x00, 0xc7, 0xcc, 0xeb, 0xa0, 0xf9, 0xbd, 0x4a, 0xd5, 0x6a, 0xb6, 0x9c, 0xb6, 0x17, 0xc3, 0xf8, - 0x5b, 0xdc, 0x53, 0x3e, 0x6e, 0x9d, 0xc0, 0xf2, 0x65, 0x98, 0x20, 0x87, 0x83, 0x86, 0xe4, 0x6f, - 0x33, 0xa2, 0xf1, 0x00, 0xc5, 0x0a, 0x47, 0xcd, 0x69, 0xb6, 0xcc, 0xf6, 0x20, 0xf5, 0xef, 0x5f, - 0xf2, 0xc2, 0xc1, 0x20, 0xac, 0x70, 0x78, 0xc7, 0x2d, 0x84, 0x57, 0xfb, 0x01, 0x18, 0xbe, 0xcd, - 0x0b, 0x07, 0xc7, 0x30, 0x0a, 0xde, 0x30, 0x0c, 0x40, 0xf1, 0xaf, 0x38, 0x05, 0xc7, 0x60, 0x8a, - 0x4f, 0x05, 0x0b, 0x6d, 0x1b, 0x1d, 0x5a, 0xae, 0xd7, 0xa6, 0xad, 0x70, 0x7f, 0xaa, 0xdf, 0xf9, - 0xa1, 0xdc, 0x84, 0x19, 0x02, 0x14, 0x57, 0x22, 0xf6, 0x08, 0x95, 0xdc, 0x29, 0xc5, 0x2b, 0xf6, - 0xbb, 0xbc, 0x12, 0x09, 0x30, 0x9a, 0x9f, 0x93, 0xa1, 0x5e, 0x45, 0x8f, 0x7b, 0x11, 0x26, 0xfb, - 0x17, 0x7f, 0xcc, 0xb8, 0xe4, 0x56, 0x25, 0xbf, 0x81, 0x03, 0x48, 0x6e, 0x28, 0xe2, 0xc9, 0x3e, - 0xfb, 0x63, 0x3f, 0x86, 0xa4, 0x7e, 0x22, 0xbf, 0x06, 0xe3, 0x52, 0x33, 0x11, 0x4f, 0xf5, 0x97, - 0x18, 0x55, 0x46, 0xec, 0x25, 0xf2, 0x57, 0x21, 0x89, 0x1b, 0x83, 0x78, 0xf8, 0x5f, 0x66, 0x70, - 0x22, 0x9e, 0x7f, 0x1a, 0x52, 0xbc, 0x21, 0x88, 0x87, 0xfe, 0x32, 0x83, 0xfa, 0x10, 0x0c, 0xe7, - 0xcd, 0x40, 0x3c, 0xfc, 0xaf, 0x70, 0x38, 0x87, 0x60, 0xf8, 0xe0, 0x26, 0x7c, 0xeb, 0xaf, 0x25, - 0x59, 0x41, 0xe7, 0xb6, 0xbb, 0x05, 0xa3, 0xac, 0x0b, 0x88, 0x47, 0xff, 0x0a, 0x3b, 0x39, 0x47, - 0xe4, 0xaf, 0xc3, 0xf0, 0x80, 0x06, 0xff, 0xeb, 0x0c, 0x4a, 0xe5, 0xf3, 0x25, 0x48, 0x0b, 0x2b, - 0x7f, 0x3c, 0xfc, 0x6f, 0x30, 0xb8, 0x88, 0xc2, 0xaa, 0xb3, 0x95, 0x3f, 0x9e, 0xe0, 0x6f, 0x72, - 0xd5, 0x19, 0x02, 0x9b, 0x8d, 0x2f, 0xfa, 0xf1, 0xe8, 0xbf, 0xc5, 0xad, 0xce, 0x21, 0xf9, 0x67, - 0x61, 0xcc, 0x2f, 0xe4, 0xf1, 0xf8, 0xbf, 0xcd, 0xf0, 0x01, 0x06, 0x5b, 0x40, 0x58, 0x48, 0xe2, - 0x29, 0xfe, 0x0e, 0xb7, 0x80, 0x80, 0xc2, 0x69, 0x14, 0x6e, 0x0e, 0xe2, 0x99, 0x7e, 0x95, 0xa7, - 0x51, 0xa8, 0x37, 0xc0, 0xde, 0x24, 0xf5, 0x34, 0x9e, 0xe2, 0xef, 0x72, 0x6f, 0x12, 0x79, 0xac, - 0x46, 0x78, 0xb5, 0x8d, 0xe7, 0xf8, 0xfb, 0x5c, 0x8d, 0xd0, 0x62, 0x9b, 0xdf, 0x06, 0xbd, 0x7b, - 0xa5, 0x8d, 0xe7, 0xfb, 0x3c, 0xe3, 0x9b, 0xea, 0x5a, 0x68, 0xf3, 0xcf, 0xc3, 0x4c, 0xf4, 0x2a, - 0x1b, 0xcf, 0xfa, 0x6b, 0x3f, 0x0e, 0xdd, 0x17, 0x89, 0x8b, 0x6c, 0x7e, 0x37, 0x28, 0xd7, 0xe2, - 0x0a, 0x1b, 0x4f, 0xfb, 0x85, 0x1f, 0xcb, 0x15, 0x5b, 0x5c, 0x60, 0xf3, 0x05, 0x80, 0x60, 0x71, - 0x8b, 0xe7, 0xfa, 0x22, 0xe3, 0x12, 0x40, 0x38, 0x35, 0xd8, 0xda, 0x16, 0x8f, 0xff, 0x12, 0x4f, - 0x0d, 0x86, 0xc0, 0xa9, 0xc1, 0x97, 0xb5, 0x78, 0xf4, 0x97, 0x79, 0x6a, 0x70, 0x08, 0x8e, 0x6c, - 0x61, 0xe5, 0x88, 0x67, 0xf8, 0x2a, 0x8f, 0x6c, 0x01, 0x95, 0xbf, 0x05, 0x29, 0xbb, 0xd3, 0x68, - 0xe0, 0x00, 0xd5, 0xfb, 0xbf, 0x20, 0x96, 0xfd, 0x1f, 0x3f, 0x65, 0x1a, 0x70, 0x40, 0xfe, 0x2a, - 0x0c, 0xa3, 0xe6, 0x3e, 0xaa, 0xc7, 0x21, 0xff, 0xe7, 0x4f, 0x79, 0x51, 0xc2, 0xd2, 0xf9, 0x67, - 0x01, 0xe8, 0xad, 0x3d, 0xd9, 0xb6, 0x8a, 0xc1, 0xfe, 0xaf, 0x9f, 0xb2, 0x57, 0x37, 0x02, 0x48, - 0x40, 0x40, 0x5f, 0x04, 0xe9, 0x4f, 0xf0, 0x43, 0x99, 0x80, 0x5c, 0xf5, 0x4d, 0x18, 0x7d, 0xc9, - 0x75, 0x6c, 0xcf, 0x3c, 0x8c, 0x43, 0xff, 0x6f, 0x86, 0xe6, 0xf2, 0xd8, 0x60, 0x4d, 0xa7, 0x8d, - 0x3c, 0xf3, 0xd0, 0x8d, 0xc3, 0xfe, 0x1f, 0x86, 0xf5, 0x01, 0x18, 0x5c, 0x33, 0x5d, 0x6f, 0x90, - 0xeb, 0xfe, 0x43, 0x0e, 0xe6, 0x00, 0xac, 0x34, 0xfe, 0xfc, 0x32, 0x3a, 0x8e, 0xc3, 0xfe, 0x88, - 0x2b, 0xcd, 0xe4, 0xf3, 0x4f, 0xc3, 0x18, 0xfe, 0x48, 0xdf, 0xc7, 0x8a, 0x01, 0xff, 0x5f, 0x06, - 0x0e, 0x10, 0xf8, 0xcc, 0xae, 0x57, 0xf7, 0xac, 0x78, 0x63, 0xff, 0x11, 0xf3, 0x34, 0x97, 0xcf, - 0x17, 0x20, 0xed, 0x7a, 0xf5, 0x7a, 0x87, 0xf5, 0x57, 0x31, 0xf0, 0xff, 0xf7, 0x53, 0xff, 0x96, - 0xdb, 0xc7, 0x14, 0xcb, 0xd1, 0x4f, 0x0f, 0xe1, 0xb6, 0x73, 0xdb, 0xa1, 0xcf, 0x0d, 0x3f, 0x93, - 0x8b, 0x7f, 0x00, 0x08, 0xff, 0xad, 0x01, 0xd7, 0x7b, 0x8a, 0xe1, 0xd5, 0xea, 0x62, 0xcd, 0x69, - 0xee, 0x3b, 0xee, 0xc5, 0x7d, 0xc7, 0x3b, 0xba, 0xe8, 0x1d, 0x21, 0x3c, 0xc6, 0x9e, 0x18, 0x26, - 0xf1, 0xe7, 0xd9, 0x93, 0x3d, 0x66, 0x24, 0x9b, 0xc8, 0x15, 0x0b, 0x5f, 0x5b, 0x85, 0x3c, 0xc7, - 0xd7, 0xcf, 0xc0, 0x08, 0xb9, 0xda, 0xcb, 0x64, 0xaf, 0x4c, 0x29, 0x26, 0xef, 0xbd, 0x33, 0x3f, - 0x64, 0xb0, 0x31, 0x7f, 0x76, 0x99, 0x3c, 0x68, 0x4d, 0x48, 0xb3, 0xcb, 0xfe, 0xec, 0x15, 0xfa, - 0xac, 0x55, 0x9a, 0xbd, 0xe2, 0xcf, 0xae, 0x90, 0xa7, 0xae, 0xaa, 0x34, 0xbb, 0xe2, 0xcf, 0x5e, - 0x25, 0x3b, 0x0b, 0xe3, 0xd2, 0xec, 0x55, 0x7f, 0xf6, 0x1a, 0xd9, 0x4f, 0x48, 0x4a, 0xb3, 0xd7, - 0xfc, 0xd9, 0xeb, 0x64, 0x2b, 0x61, 0x4a, 0x9a, 0xbd, 0xee, 0xcf, 0xde, 0x20, 0x5b, 0x08, 0xba, - 0x34, 0x7b, 0xc3, 0x9f, 0xbd, 0x49, 0xde, 0xcf, 0x19, 0x95, 0x66, 0x6f, 0xea, 0x73, 0x30, 0x4a, - 0xaf, 0xfc, 0x12, 0xd9, 0x6f, 0x9e, 0x64, 0xd3, 0x7c, 0x30, 0x98, 0xbf, 0x4c, 0xde, 0xc5, 0x19, - 0x91, 0xe7, 0x2f, 0x07, 0xf3, 0xcb, 0xe4, 0x6b, 0x01, 0x9a, 0x3c, 0xbf, 0x1c, 0xcc, 0x5f, 0xc9, - 0x8e, 0x93, 0xf7, 0x91, 0xa4, 0xf9, 0x2b, 0xc1, 0xfc, 0x4a, 0x76, 0x02, 0x07, 0xbc, 0x3c, 0xbf, - 0x12, 0xcc, 0x5f, 0xcd, 0x4e, 0x9e, 0x55, 0x16, 0x32, 0xf2, 0xfc, 0xd5, 0xdc, 0x2f, 0x11, 0xf7, - 0xda, 0x81, 0x7b, 0x67, 0x64, 0xf7, 0xfa, 0x8e, 0x9d, 0x91, 0x1d, 0xeb, 0xbb, 0x74, 0x46, 0x76, - 0xa9, 0xef, 0xcc, 0x19, 0xd9, 0x99, 0xbe, 0x1b, 0x67, 0x64, 0x37, 0xfa, 0x0e, 0x9c, 0x91, 0x1d, - 0xe8, 0xbb, 0x6e, 0x46, 0x76, 0x9d, 0xef, 0xb4, 0x19, 0xd9, 0x69, 0xbe, 0xbb, 0x66, 0x64, 0x77, - 0xf9, 0x8e, 0xca, 0x86, 0x1c, 0x15, 0xb8, 0x28, 0x1b, 0x72, 0x51, 0xe0, 0x9c, 0x6c, 0xc8, 0x39, - 0x81, 0x5b, 0xb2, 0x21, 0xb7, 0x04, 0x0e, 0xc9, 0x86, 0x1c, 0x12, 0xb8, 0x22, 0x1b, 0x72, 0x45, - 0xe0, 0x04, 0x96, 0x63, 0x06, 0x6a, 0x45, 0xe4, 0x98, 0xda, 0x37, 0xc7, 0xd4, 0xbe, 0x39, 0xa6, - 0xf6, 0xcd, 0x31, 0xb5, 0x6f, 0x8e, 0xa9, 0x7d, 0x73, 0x4c, 0xed, 0x9b, 0x63, 0x6a, 0xdf, 0x1c, - 0x53, 0xfb, 0xe6, 0x98, 0xda, 0x3f, 0xc7, 0xd4, 0x98, 0x1c, 0x53, 0x63, 0x72, 0x4c, 0x8d, 0xc9, - 0x31, 0x35, 0x26, 0xc7, 0xd4, 0x98, 0x1c, 0x53, 0x7b, 0xe6, 0x58, 0xe0, 0xde, 0x19, 0xd9, 0xbd, - 0x91, 0x39, 0xa6, 0xf6, 0xc8, 0x31, 0xb5, 0x47, 0x8e, 0xa9, 0x3d, 0x72, 0x4c, 0xed, 0x91, 0x63, - 0x6a, 0x8f, 0x1c, 0x53, 0x7b, 0xe4, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x5e, 0x39, 0xa6, 0xf6, 0xcc, - 0x31, 0xb5, 0x67, 0x8e, 0xa9, 0x3d, 0x73, 0x4c, 0xed, 0x99, 0x63, 0x6a, 0xcf, 0x1c, 0x53, 0xc5, - 0x1c, 0xfb, 0xd7, 0x2a, 0xe8, 0x34, 0xc7, 0xb6, 0xc9, 0x1b, 0x4b, 0xcc, 0x15, 0x73, 0xa1, 0x4c, - 0x1b, 0xc1, 0xae, 0xd3, 0x02, 0x97, 0xcc, 0x85, 0x72, 0x4d, 0x9e, 0x5f, 0xf6, 0xe7, 0x79, 0xb6, - 0xc9, 0xf3, 0x57, 0xfc, 0x79, 0x9e, 0x6f, 0xf2, 0xfc, 0x8a, 0x3f, 0xcf, 0x33, 0x4e, 0x9e, 0xbf, - 0xea, 0xcf, 0xf3, 0x9c, 0x93, 0xe7, 0xaf, 0xf9, 0xf3, 0x3c, 0xeb, 0xe4, 0xf9, 0xeb, 0xfe, 0x3c, - 0xcf, 0x3b, 0x79, 0xfe, 0x86, 0x3f, 0xcf, 0x33, 0x4f, 0x9e, 0xbf, 0xa9, 0x9f, 0x0d, 0xe7, 0x1e, - 0x17, 0xf0, 0x5d, 0x7b, 0x36, 0x9c, 0x7d, 0x21, 0x89, 0xcb, 0x81, 0x04, 0xcf, 0xbf, 0x90, 0xc4, - 0x72, 0x20, 0xc1, 0x33, 0x30, 0x24, 0x71, 0x25, 0xf7, 0x39, 0xe2, 0x3e, 0x3b, 0xec, 0xbe, 0xd9, - 0x90, 0xfb, 0x12, 0x82, 0xeb, 0x66, 0x43, 0xae, 0x4b, 0x08, 0x6e, 0x9b, 0x0d, 0xb9, 0x2d, 0x21, - 0xb8, 0x6c, 0x36, 0xe4, 0xb2, 0x84, 0xe0, 0xae, 0xd9, 0x90, 0xbb, 0x12, 0x82, 0xab, 0x66, 0x43, - 0xae, 0x4a, 0x08, 0x6e, 0x9a, 0x0d, 0xb9, 0x29, 0x21, 0xb8, 0x68, 0x36, 0xe4, 0xa2, 0x84, 0xe0, - 0x9e, 0xd9, 0x90, 0x7b, 0x12, 0x82, 0x6b, 0xce, 0x84, 0x5d, 0x93, 0x10, 0xdd, 0x72, 0x26, 0xec, - 0x96, 0x84, 0xe8, 0x92, 0x33, 0x61, 0x97, 0x24, 0x44, 0x77, 0x9c, 0x09, 0xbb, 0x23, 0x21, 0xba, - 0xe2, 0x8f, 0x13, 0xbc, 0x23, 0xdc, 0xf1, 0xda, 0x9d, 0x9a, 0xf7, 0xbe, 0x3a, 0xc2, 0x4b, 0x52, - 0xfb, 0x90, 0x5e, 0xd6, 0x97, 0x48, 0xc3, 0x2a, 0x76, 0x9c, 0xa1, 0x15, 0xec, 0x92, 0xd4, 0x58, - 0x08, 0x08, 0x3b, 0x1a, 0xb1, 0xf2, 0xbe, 0x7a, 0xc3, 0x4b, 0x52, 0x9b, 0x11, 0xaf, 0xdf, 0x8d, - 0x0f, 0xbd, 0x63, 0x7b, 0x2b, 0xc1, 0x3b, 0x36, 0x66, 0xfe, 0x93, 0x76, 0x6c, 0x8b, 0xf1, 0x26, - 0xf7, 0x8d, 0xbd, 0x18, 0x6f, 0xec, 0xae, 0x55, 0x67, 0xd0, 0x0e, 0x6e, 0x31, 0xde, 0xb4, 0xbe, - 0x51, 0x3f, 0xd8, 0x7e, 0x8b, 0x45, 0xb0, 0x81, 0x5a, 0x11, 0x11, 0x7c, 0xd2, 0x7e, 0xeb, 0x92, - 0x54, 0x4a, 0x4e, 0x1a, 0xc1, 0xea, 0x89, 0x23, 0xf8, 0xa4, 0x9d, 0xd7, 0x25, 0xa9, 0xbc, 0x9c, - 0x38, 0x82, 0x3f, 0x84, 0x7e, 0x88, 0x45, 0x70, 0x60, 0xfe, 0x93, 0xf6, 0x43, 0x8b, 0xf1, 0x26, - 0x8f, 0x8c, 0x60, 0xf5, 0x04, 0x11, 0x3c, 0x48, 0x7f, 0xb4, 0x18, 0x6f, 0xda, 0xe8, 0x08, 0x7e, - 0xdf, 0xdd, 0xcc, 0x57, 0x14, 0x98, 0xaa, 0x58, 0xf5, 0x72, 0x73, 0x1f, 0xd5, 0xeb, 0xa8, 0xce, - 0xec, 0x78, 0x49, 0xaa, 0x04, 0x3d, 0x5c, 0xfd, 0xf6, 0x3b, 0xf3, 0x81, 0x85, 0xaf, 0x42, 0x8a, - 0xda, 0xf4, 0xd2, 0xa5, 0xec, 0x3d, 0x25, 0xa6, 0xc2, 0xf9, 0xa2, 0xfa, 0x39, 0x0e, 0xbb, 0x7c, - 0x29, 0xfb, 0x9f, 0x14, 0xa1, 0xca, 0xf9, 0xc3, 0xb9, 0x5f, 0x25, 0x1a, 0xda, 0xef, 0x5b, 0xc3, - 0x8b, 0x03, 0x69, 0x28, 0xe8, 0xf6, 0x48, 0x97, 0x6e, 0x82, 0x56, 0x1d, 0x98, 0xac, 0x58, 0xf5, - 0x0a, 0xf9, 0x42, 0xfa, 0x20, 0x2a, 0x51, 0x99, 0x50, 0x3d, 0xb8, 0x24, 0x85, 0xa5, 0x88, 0xf0, - 0x43, 0x5a, 0xae, 0x11, 0x39, 0x0b, 0x9f, 0xd6, 0x96, 0x4e, 0xbb, 0xd8, 0xeb, 0xb4, 0x41, 0x65, - 0xf7, 0x4f, 0xb8, 0xd8, 0xeb, 0x84, 0x41, 0x0e, 0xf9, 0xa7, 0x7a, 0x8d, 0x2f, 0xce, 0xf4, 0xbd, - 0x21, 0xfd, 0x0c, 0x24, 0xd6, 0xe9, 0x6b, 0xcd, 0x99, 0x62, 0x06, 0x2b, 0xf5, 0xdd, 0x77, 0xe6, - 0x93, 0x7b, 0x1d, 0xab, 0x6e, 0x24, 0xd6, 0xeb, 0xfa, 0x1d, 0x18, 0xfe, 0x34, 0xfb, 0x5a, 0x24, - 0x16, 0x58, 0x61, 0x02, 0x1f, 0x8f, 0x79, 0xc4, 0x44, 0xa8, 0x97, 0xf6, 0x2c, 0xdb, 0xbb, 0xbc, - 0x7c, 0xc3, 0xa0, 0x14, 0xb9, 0x3f, 0x03, 0x40, 0xcf, 0xb9, 0x6a, 0xba, 0x47, 0x7a, 0x85, 0x33, - 0xd3, 0x53, 0xdf, 0xf8, 0xee, 0x3b, 0xf3, 0x2b, 0x83, 0xb0, 0x3e, 0x55, 0x37, 0xdd, 0xa3, 0xa7, - 0xbc, 0xe3, 0x16, 0x5a, 0x2a, 0x1e, 0x7b, 0xc8, 0xe5, 0xec, 0x2d, 0xbe, 0xea, 0xb1, 0xeb, 0xca, - 0x0a, 0xd7, 0x95, 0x92, 0xae, 0x69, 0x4d, 0xbe, 0xa6, 0x4b, 0x0f, 0x7a, 0x3d, 0xaf, 0xf1, 0x45, - 0x22, 0x64, 0x49, 0x35, 0xce, 0x92, 0xea, 0xfb, 0xb5, 0x64, 0x8b, 0xd7, 0xc7, 0xd0, 0xb5, 0xaa, - 0xfd, 0xae, 0x55, 0x7d, 0x3f, 0xd7, 0xfa, 0xff, 0x69, 0xb6, 0xfa, 0xf9, 0xb4, 0x67, 0xd3, 0x57, - 0x2a, 0xff, 0x74, 0x3d, 0x0b, 0xfa, 0x40, 0xbb, 0x80, 0x7c, 0xf2, 0xde, 0x9b, 0xf3, 0x4a, 0xee, - 0x2b, 0x09, 0x7e, 0xe5, 0x34, 0x91, 0x1e, 0xec, 0xca, 0xff, 0xb4, 0xf4, 0x54, 0x1f, 0x86, 0x85, - 0xbe, 0xac, 0xc0, 0x4c, 0x57, 0x25, 0xa7, 0x66, 0xfa, 0x60, 0xcb, 0xb9, 0x7d, 0xd2, 0x72, 0xce, - 0x14, 0xfc, 0x6d, 0x05, 0x4e, 0x85, 0xca, 0x2b, 0x55, 0xef, 0x62, 0x48, 0xbd, 0x87, 0xba, 0xcf, - 0x44, 0x04, 0x05, 0xed, 0x44, 0xf7, 0x86, 0x00, 0x02, 0xb3, 0xef, 0xf7, 0x95, 0x90, 0xdf, 0xcf, - 0xf8, 0x80, 0x08, 0x73, 0xf1, 0x08, 0x60, 0x6a, 0x3b, 0x90, 0xdc, 0x6d, 0x23, 0xa4, 0xcf, 0x41, - 0x62, 0xab, 0xcd, 0x34, 0x9c, 0xa0, 0xf8, 0xad, 0x76, 0xb1, 0x6d, 0xda, 0xb5, 0x23, 0x23, 0xb1, - 0xd5, 0xd6, 0xcf, 0x81, 0x5a, 0x60, 0x5f, 0xc9, 0x4e, 0x2f, 0x4f, 0x52, 0x81, 0x82, 0x5d, 0x67, - 0x12, 0x78, 0x4e, 0x9f, 0x83, 0xe4, 0x06, 0x32, 0x0f, 0x98, 0x12, 0x40, 0x65, 0xf0, 0x88, 0x41, - 0xc6, 0xd9, 0x09, 0x5f, 0x80, 0x14, 0x27, 0xd6, 0xcf, 0x63, 0xc4, 0x81, 0xc7, 0x4e, 0xcb, 0x10, - 0x58, 0x1d, 0xb6, 0x72, 0x91, 0x59, 0xfd, 0x02, 0x0c, 0x1b, 0xd6, 0xe1, 0x91, 0xc7, 0x4e, 0xde, - 0x2d, 0x46, 0xa7, 0x73, 0x77, 0x61, 0xcc, 0xd7, 0xe8, 0x03, 0xa6, 0x5e, 0xa5, 0x97, 0xa6, 0xcf, - 0x8a, 0xeb, 0x09, 0x7f, 0x6e, 0x49, 0x87, 0xf4, 0xb3, 0x90, 0xda, 0xf1, 0xda, 0x41, 0xd1, 0xe7, - 0x1d, 0xa9, 0x3f, 0x9a, 0xfb, 0x25, 0x05, 0x52, 0xab, 0x08, 0xb5, 0x88, 0xc1, 0x1f, 0x87, 0xe4, - 0xaa, 0xf3, 0xaa, 0xcd, 0x14, 0x9c, 0x62, 0x16, 0xc5, 0xd3, 0xcc, 0xa6, 0x64, 0x5a, 0x7f, 0x5c, - 0xb4, 0xfb, 0xb4, 0x6f, 0x77, 0x41, 0x8e, 0xd8, 0x3e, 0x27, 0xd9, 0x9e, 0x39, 0x10, 0x0b, 0x75, - 0xd9, 0xff, 0x3a, 0xa4, 0x85, 0xb3, 0xe8, 0x0b, 0x4c, 0x8d, 0x44, 0x18, 0x28, 0xda, 0x0a, 0x4b, - 0xe4, 0x10, 0x8c, 0x4b, 0x27, 0xc6, 0x50, 0xc1, 0xc4, 0x3d, 0xa0, 0xc4, 0xcc, 0x8b, 0xb2, 0x99, - 0xa3, 0x45, 0x99, 0xa9, 0x2f, 0x51, 0x1b, 0x11, 0x73, 0x9f, 0xa7, 0xc1, 0xd9, 0xdb, 0x89, 0xf8, - 0x73, 0x6e, 0x18, 0xd4, 0x8a, 0xd5, 0xc8, 0x3d, 0x0d, 0x40, 0x53, 0xbe, 0x6c, 0x77, 0x9a, 0xa1, - 0xac, 0x9b, 0xe0, 0x06, 0xde, 0x3d, 0x42, 0xbb, 0xc8, 0x25, 0x22, 0x72, 0x3f, 0x85, 0x0b, 0x0c, - 0xd0, 0x14, 0x23, 0xf8, 0x27, 0x63, 0xf1, 0x91, 0x9d, 0x18, 0x16, 0xcd, 0x52, 0xd1, 0xbb, 0xc8, - 0x2b, 0xd8, 0x8e, 0x77, 0x84, 0xda, 0x21, 0xc4, 0xb2, 0x7e, 0x45, 0x4a, 0xd8, 0x89, 0xe5, 0x47, - 0x7c, 0x44, 0x4f, 0xd0, 0x95, 0xdc, 0x37, 0x89, 0x82, 0xb8, 0x15, 0xe8, 0xba, 0x40, 0x75, 0x80, - 0x0b, 0xd4, 0xaf, 0x49, 0xfd, 0x5b, 0x1f, 0x35, 0x43, 0xb7, 0x96, 0x37, 0xa5, 0xfb, 0x9c, 0xfe, - 0xca, 0xca, 0xf7, 0x98, 0xdc, 0xa6, 0x5c, 0xe5, 0x27, 0x63, 0x55, 0xee, 0xd1, 0xdd, 0x9e, 0xd4, - 0xa6, 0xea, 0xa0, 0x36, 0xfd, 0x3d, 0xbf, 0xe3, 0xa0, 0xbf, 0x7b, 0x41, 0x7e, 0x31, 0x46, 0xff, - 0x78, 0xac, 0xef, 0xf3, 0x4a, 0xc9, 0x57, 0x75, 0x65, 0x50, 0xf7, 0xe7, 0x13, 0xc5, 0xa2, 0xaf, - 0xee, 0xf5, 0x13, 0x84, 0x40, 0x3e, 0x51, 0x2a, 0xf9, 0x65, 0x3b, 0xf5, 0xb9, 0x37, 0xe7, 0x95, - 0x6f, 0xbc, 0x39, 0x3f, 0x94, 0xfb, 0x75, 0x05, 0xa6, 0x98, 0xa4, 0x10, 0xb8, 0x4f, 0x85, 0x94, - 0x3f, 0xcd, 0x6b, 0x46, 0x94, 0x05, 0x7e, 0x66, 0xc1, 0xfb, 0x1d, 0x05, 0xb2, 0x5d, 0xba, 0x72, - 0x7b, 0x5f, 0x1a, 0x48, 0xe5, 0xbc, 0x52, 0xfe, 0xf9, 0xdb, 0xfc, 0x2e, 0x0c, 0xef, 0x5a, 0x4d, - 0xd4, 0xc6, 0x2b, 0x01, 0xfe, 0x40, 0x55, 0xe6, 0x9b, 0x39, 0x74, 0x88, 0xcf, 0x51, 0xe5, 0xa4, - 0xb9, 0x65, 0x3d, 0x0b, 0xc9, 0x55, 0xd3, 0x33, 0x89, 0x06, 0x19, 0xbf, 0xbe, 0x9a, 0x9e, 0x99, - 0xbb, 0x02, 0x99, 0xcd, 0x63, 0xf2, 0xae, 0x4e, 0x9d, 0xbc, 0x42, 0x22, 0x77, 0x7f, 0xbc, 0x5f, - 0xbd, 0xbc, 0x38, 0x9c, 0xaa, 0x6b, 0xf7, 0x94, 0x7c, 0x92, 0xe8, 0xf3, 0x0a, 0x4c, 0x6c, 0x61, - 0xb5, 0x09, 0x8e, 0xc0, 0xce, 0x82, 0xb2, 0x29, 0x37, 0x42, 0x22, 0xab, 0xa1, 0x6c, 0x86, 0xda, - 0x47, 0xd5, 0x37, 0x4f, 0xa8, 0x6d, 0x53, 0xfd, 0xb6, 0x6d, 0x31, 0x99, 0x9a, 0xd0, 0xa6, 0x16, - 0x93, 0x29, 0xd0, 0xc6, 0xd9, 0x79, 0xff, 0x83, 0x0a, 0x1a, 0x6d, 0x75, 0x56, 0xd1, 0x81, 0x65, - 0x5b, 0x5e, 0x77, 0xbf, 0xea, 0x6b, 0xac, 0x3f, 0x0b, 0x63, 0xd8, 0xa4, 0x6b, 0xec, 0x87, 0xe3, - 0xb0, 0xe9, 0xcf, 0xb1, 0x16, 0x25, 0x44, 0xc1, 0x06, 0x48, 0xe8, 0x04, 0x18, 0x7d, 0x0d, 0xd4, - 0x4a, 0x65, 0x93, 0x2d, 0x6e, 0x2b, 0x7d, 0xa1, 0xec, 0x45, 0x1d, 0x76, 0xc4, 0xc6, 0xdc, 0x43, - 0x03, 0x13, 0xe8, 0x2b, 0x90, 0xa8, 0x6c, 0xb2, 0x86, 0xf7, 0xfc, 0x20, 0x34, 0x46, 0xa2, 0xb2, - 0x39, 0xfb, 0x6f, 0x14, 0x18, 0x97, 0x46, 0xf5, 0x1c, 0x64, 0xe8, 0x80, 0x70, 0xb9, 0x23, 0x86, - 0x34, 0xc6, 0x75, 0x4e, 0xbc, 0x4f, 0x9d, 0x67, 0x0b, 0x30, 0x19, 0x1a, 0xd7, 0x97, 0x40, 0x17, - 0x87, 0x98, 0x12, 0xf4, 0x47, 0xab, 0x22, 0x66, 0x72, 0x8f, 0x02, 0x04, 0x76, 0xf5, 0x7f, 0x6b, - 0xa9, 0x52, 0xde, 0xd9, 0x2d, 0xaf, 0x6a, 0x4a, 0xee, 0xdb, 0x0a, 0xa4, 0x59, 0xdb, 0x5a, 0x73, - 0x5a, 0x48, 0x2f, 0x82, 0x52, 0x60, 0x11, 0xf4, 0x60, 0x7a, 0x2b, 0x05, 0xfd, 0x22, 0x28, 0xc5, - 0xc1, 0x5d, 0xad, 0x14, 0xf5, 0x65, 0x50, 0x4a, 0xcc, 0xc1, 0x83, 0x79, 0x46, 0x29, 0xe5, 0xfe, - 0x48, 0x85, 0x69, 0xb1, 0x8d, 0xe6, 0xf5, 0xe4, 0x9c, 0x7c, 0xdf, 0x94, 0x1f, 0xbb, 0xbc, 0x7c, - 0x65, 0x65, 0x09, 0xff, 0xe3, 0x87, 0x64, 0x4e, 0xbe, 0x85, 0xca, 0x83, 0x2f, 0x72, 0xb9, 0xd7, - 0x7b, 0x22, 0xf9, 0xa4, 0xc0, 0xd0, 0xf5, 0x9e, 0x88, 0x34, 0xdb, 0xf5, 0x9e, 0x88, 0x34, 0xdb, - 0xf5, 0x9e, 0x88, 0x34, 0xdb, 0xb5, 0x17, 0x20, 0xcd, 0x76, 0xbd, 0x27, 0x22, 0xcd, 0x76, 0xbd, - 0x27, 0x22, 0xcd, 0x76, 0xbf, 0x27, 0xc2, 0xa6, 0x7b, 0xbe, 0x27, 0x22, 0xcf, 0x77, 0xbf, 0x27, - 0x22, 0xcf, 0x77, 0xbf, 0x27, 0x92, 0x4f, 0x7a, 0xed, 0x0e, 0xea, 0xbd, 0xeb, 0x20, 0xe3, 0xfb, - 0xdd, 0x04, 0x06, 0x15, 0x78, 0x0b, 0x26, 0xe9, 0x03, 0x89, 0x92, 0x63, 0x7b, 0xa6, 0x65, 0xa3, - 0xb6, 0xfe, 0x09, 0xc8, 0xd0, 0x21, 0x7a, 0x9b, 0x13, 0x75, 0x1b, 0x48, 0xe7, 0x59, 0xbd, 0x95, - 0xa4, 0x73, 0x7f, 0x9c, 0x84, 0x19, 0x3a, 0x50, 0x31, 0x9b, 0x48, 0x7a, 0xcb, 0xe8, 0x42, 0x68, - 0x4f, 0x69, 0x02, 0xc3, 0xef, 0xbf, 0x33, 0x4f, 0x47, 0x0b, 0x7e, 0x34, 0x5d, 0x08, 0xed, 0x2e, - 0xc9, 0x72, 0xc1, 0x02, 0x74, 0x21, 0xf4, 0xe6, 0x91, 0x2c, 0xe7, 0xaf, 0x37, 0xbe, 0x1c, 0x7f, - 0x07, 0x49, 0x96, 0x5b, 0xf5, 0xa3, 0xec, 0x42, 0xe8, 0x6d, 0x24, 0x59, 0xae, 0xec, 0xc7, 0xdb, - 0x85, 0xd0, 0xde, 0x93, 0x2c, 0xb7, 0xe6, 0x47, 0xde, 0x85, 0xd0, 0x2e, 0x94, 0x2c, 0x77, 0xdb, - 0x8f, 0xc1, 0x0b, 0xa1, 0x77, 0x95, 0x64, 0xb9, 0xe7, 0xfc, 0x68, 0xbc, 0x10, 0x7a, 0x6b, 0x49, - 0x96, 0x5b, 0xf7, 0xe3, 0x72, 0x21, 0xfc, 0xfe, 0x92, 0x2c, 0x78, 0x27, 0x88, 0xd0, 0x85, 0xf0, - 0x9b, 0x4c, 0xb2, 0xe4, 0x27, 0x83, 0x58, 0x5d, 0x08, 0xbf, 0xd3, 0x24, 0x4b, 0x6e, 0x04, 0x51, - 0xbb, 0x10, 0xde, 0x2b, 0x93, 0x25, 0x37, 0x83, 0xf8, 0x5d, 0x08, 0xef, 0x9a, 0xc9, 0x92, 0x95, - 0x20, 0x92, 0x17, 0xc2, 0xfb, 0x67, 0xb2, 0xe4, 0x56, 0xf0, 0x10, 0xfd, 0xf7, 0x43, 0xe1, 0x27, - 0xbc, 0x05, 0x95, 0x0b, 0x85, 0x1f, 0x44, 0x84, 0x5e, 0xa8, 0x90, 0x09, 0x32, 0x41, 0xd8, 0xe5, - 0x42, 0x61, 0x07, 0x11, 0x21, 0x97, 0x0b, 0x85, 0x1c, 0x44, 0x84, 0x5b, 0x2e, 0x14, 0x6e, 0x10, - 0x11, 0x6a, 0xb9, 0x50, 0xa8, 0x41, 0x44, 0x98, 0xe5, 0x42, 0x61, 0x06, 0x11, 0x21, 0x96, 0x0b, - 0x85, 0x18, 0x44, 0x84, 0x57, 0x2e, 0x14, 0x5e, 0x10, 0x11, 0x5a, 0xe7, 0xc3, 0xa1, 0x05, 0x51, - 0x61, 0x75, 0x3e, 0x1c, 0x56, 0x10, 0x15, 0x52, 0x8f, 0x85, 0x43, 0x6a, 0xec, 0xfe, 0x3b, 0xf3, - 0xc3, 0x78, 0x48, 0x88, 0xa6, 0xf3, 0xe1, 0x68, 0x82, 0xa8, 0x48, 0x3a, 0x1f, 0x8e, 0x24, 0x88, - 0x8a, 0xa2, 0xf3, 0xe1, 0x28, 0x82, 0xa8, 0x08, 0x7a, 0x2b, 0x1c, 0x41, 0xc1, 0x3b, 0x3e, 0xb9, - 0xd0, 0x96, 0x62, 0x5c, 0x04, 0xa9, 0x03, 0x44, 0x90, 0x3a, 0x40, 0x04, 0xa9, 0x03, 0x44, 0x90, - 0x3a, 0x40, 0x04, 0xa9, 0x03, 0x44, 0x90, 0x3a, 0x40, 0x04, 0xa9, 0x03, 0x44, 0x90, 0x3a, 0x48, - 0x04, 0xa9, 0x03, 0x45, 0x90, 0xda, 0x2b, 0x82, 0xce, 0x87, 0xdf, 0x78, 0x80, 0xa8, 0x82, 0x74, - 0x3e, 0xbc, 0xf5, 0x19, 0x1f, 0x42, 0xea, 0x40, 0x21, 0xa4, 0xf6, 0x0a, 0xa1, 0xdf, 0x57, 0x61, - 0x5a, 0x0a, 0x21, 0xb6, 0x3f, 0xf4, 0x41, 0x55, 0xa0, 0x6b, 0x03, 0xbc, 0x60, 0x11, 0x15, 0x53, - 0xd7, 0x06, 0xd8, 0xa4, 0xee, 0x17, 0x67, 0xdd, 0x55, 0xa8, 0x3c, 0x40, 0x15, 0x5a, 0xf3, 0x63, - 0xe8, 0xda, 0x00, 0x2f, 0x5e, 0x74, 0xc7, 0xde, 0x8d, 0x7e, 0x45, 0xe0, 0xb9, 0x81, 0x8a, 0xc0, - 0xfa, 0x40, 0x45, 0xe0, 0x4e, 0xe0, 0xc1, 0x5f, 0x4e, 0xc0, 0xa9, 0xc0, 0x83, 0xf4, 0x13, 0xf9, - 0x61, 0xa7, 0x9c, 0xb0, 0x45, 0xa5, 0xf3, 0x6d, 0x1b, 0xc1, 0x8d, 0x89, 0xf5, 0xba, 0xbe, 0x2d, - 0x6f, 0x56, 0xe5, 0x4f, 0xba, 0x81, 0x23, 0x78, 0x9c, 0x3d, 0x0c, 0x3d, 0x0f, 0xea, 0x7a, 0xdd, - 0x25, 0xd5, 0x22, 0xea, 0xb4, 0x25, 0x03, 0x4f, 0xeb, 0x06, 0x8c, 0x10, 0x71, 0x97, 0xb8, 0xf7, - 0xfd, 0x9c, 0x78, 0xd5, 0x60, 0x4c, 0xb9, 0xb7, 0x14, 0x38, 0x2b, 0x85, 0xf2, 0x07, 0xb3, 0x65, - 0x70, 0x6b, 0xa0, 0x2d, 0x03, 0x29, 0x41, 0x82, 0xed, 0x83, 0x27, 0xba, 0x77, 0xaa, 0xc5, 0x2c, - 0x09, 0x6f, 0x25, 0xfc, 0x05, 0x98, 0x08, 0xae, 0x80, 0xdc, 0xb3, 0x5d, 0x8d, 0x7f, 0x9a, 0x19, - 0x95, 0x9a, 0x57, 0x43, 0x4f, 0xd1, 0xfa, 0xc2, 0xfc, 0x6c, 0xcd, 0xe5, 0x61, 0xb2, 0x22, 0x7f, - 0x6b, 0x28, 0xee, 0x61, 0x44, 0x0a, 0xb7, 0xe6, 0xf7, 0xbe, 0x3a, 0x3f, 0x94, 0xfb, 0x38, 0x64, - 0xc4, 0x2f, 0x06, 0x85, 0x80, 0x63, 0x1c, 0x98, 0x4f, 0xbe, 0x8d, 0xa5, 0xff, 0x9e, 0x02, 0xa7, - 0x45, 0xf1, 0xe7, 0x2d, 0xef, 0x68, 0xdd, 0xc6, 0x3d, 0xfd, 0xd3, 0x90, 0x42, 0xcc, 0x71, 0xec, - 0x37, 0x5a, 0xd8, 0x7d, 0x64, 0xa4, 0xf8, 0x12, 0xf9, 0xd7, 0xf0, 0x21, 0xa1, 0x67, 0x1c, 0xfc, - 0xb4, 0xcb, 0xb3, 0x8f, 0xc3, 0x30, 0xe5, 0x97, 0xf5, 0x1a, 0x0f, 0xe9, 0xf5, 0xb5, 0x08, 0xbd, - 0x48, 0x1c, 0xe9, 0x77, 0x24, 0xbd, 0x84, 0xdb, 0xd5, 0x48, 0xf1, 0x25, 0x1e, 0x7c, 0xc5, 0x14, - 0xee, 0xff, 0x48, 0x44, 0xc5, 0x2b, 0xb9, 0x00, 0xa9, 0x72, 0x58, 0x26, 0x5a, 0xcf, 0x55, 0x48, - 0x56, 0x9c, 0x3a, 0xf9, 0xf5, 0x18, 0xf2, 0x73, 0xc9, 0xcc, 0xc8, 0xec, 0xb7, 0x93, 0x2f, 0x40, - 0xaa, 0x74, 0x64, 0x35, 0xea, 0x6d, 0x64, 0xb3, 0x3d, 0x7b, 0xf6, 0x08, 0x1d, 0x63, 0x0c, 0x7f, - 0x2e, 0x57, 0x82, 0xa9, 0x8a, 0x63, 0x17, 0x8f, 0x3d, 0xb1, 0x6e, 0x2c, 0x85, 0x52, 0x84, 0xed, - 0xf9, 0x90, 0x6f, 0x89, 0x60, 0x81, 0xe2, 0xf0, 0x77, 0xdf, 0x99, 0x57, 0x76, 0xfd, 0xe7, 0xe7, - 0x9b, 0xf0, 0x10, 0x4b, 0x9f, 0x2e, 0xaa, 0xe5, 0x38, 0xaa, 0x31, 0xb6, 0x4f, 0x2d, 0xd0, 0xad, - 0x63, 0x3a, 0x3b, 0x92, 0xee, 0xc1, 0x34, 0xc3, 0x4d, 0x51, 0x5f, 0xcd, 0xd4, 0x13, 0x69, 0x16, - 0x49, 0xb7, 0x14, 0x47, 0x17, 0xd2, 0xec, 0x31, 0x18, 0xf3, 0xe7, 0x84, 0x68, 0x10, 0x33, 0x65, - 0x79, 0x31, 0x07, 0x69, 0x21, 0x61, 0xf5, 0x61, 0x50, 0x0a, 0xda, 0x10, 0xfe, 0xaf, 0xa8, 0x29, - 0xf8, 0xbf, 0x92, 0x96, 0x58, 0x7c, 0x1c, 0x26, 0x43, 0xcf, 0x2f, 0xf1, 0xcc, 0xaa, 0x06, 0xf8, - 0xbf, 0xb2, 0x96, 0x9e, 0x4d, 0x7e, 0xee, 0x1f, 0xcd, 0x0d, 0x2d, 0xde, 0x02, 0xbd, 0xfb, 0x49, - 0xa7, 0x3e, 0x02, 0x89, 0x02, 0xa6, 0x7c, 0x08, 0x12, 0xc5, 0xa2, 0xa6, 0xcc, 0x4e, 0xfe, 0xd5, - 0x2f, 0x9d, 0x4d, 0x17, 0xc9, 0xb7, 0x9e, 0xef, 0x22, 0xaf, 0x58, 0x64, 0xe0, 0x67, 0xe0, 0x74, - 0xe4, 0x93, 0x52, 0x8c, 0x2f, 0x95, 0x28, 0x7e, 0x75, 0xb5, 0x0b, 0xbf, 0xba, 0x4a, 0xf0, 0x4a, - 0x9e, 0xef, 0x38, 0x17, 0xf4, 0x88, 0xe7, 0x92, 0xd9, 0xba, 0xb0, 0xc3, 0x5d, 0xc8, 0x3f, 0xc3, - 0x64, 0x8b, 0x91, 0xb2, 0x28, 0x66, 0xc7, 0xba, 0x98, 0x2f, 0x31, 0x7c, 0x29, 0x12, 0x7f, 0x10, - 0xda, 0x56, 0x95, 0x57, 0x08, 0x46, 0x52, 0xf2, 0x15, 0x5e, 0x8d, 0x24, 0x39, 0x12, 0x5e, 0x76, - 0x5f, 0xf5, 0x15, 0x2e, 0x47, 0xca, 0x5a, 0x31, 0x2f, 0x7d, 0x95, 0xf3, 0x17, 0xd9, 0x22, 0x5f, - 0xb8, 0xac, 0x9f, 0xe6, 0x39, 0x2a, 0x55, 0x60, 0x66, 0x20, 0x2e, 0x95, 0x2f, 0x31, 0x40, 0xb1, - 0x27, 0xa0, 0xb7, 0x95, 0x38, 0x32, 0xff, 0x1c, 0x23, 0x29, 0xf5, 0x24, 0x89, 0x31, 0x15, 0x87, - 0x17, 0x77, 0xef, 0xbd, 0x3b, 0x37, 0xf4, 0xf6, 0xbb, 0x73, 0x43, 0xff, 0xe5, 0xdd, 0xb9, 0xa1, - 0xef, 0xbd, 0x3b, 0xa7, 0xfc, 0xe0, 0xdd, 0x39, 0xe5, 0x47, 0xef, 0xce, 0x29, 0x3f, 0x79, 0x77, - 0x4e, 0x79, 0xe3, 0xfe, 0x9c, 0xf2, 0x8d, 0xfb, 0x73, 0xca, 0x37, 0xef, 0xcf, 0x29, 0xbf, 0x73, - 0x7f, 0x4e, 0x79, 0xeb, 0xfe, 0x9c, 0x72, 0xef, 0xfe, 0x9c, 0xf2, 0xf6, 0xfd, 0x39, 0xe5, 0x7b, - 0xf7, 0xe7, 0x94, 0x1f, 0xdc, 0x9f, 0x1b, 0xfa, 0xd1, 0xfd, 0x39, 0xe5, 0x27, 0xf7, 0xe7, 0x86, - 0xde, 0x78, 0x6f, 0x6e, 0xe8, 0xcd, 0xf7, 0xe6, 0x86, 0xbe, 0xf1, 0xde, 0x9c, 0x02, 0xef, 0xad, - 0xc0, 0x1c, 0xfb, 0x26, 0x99, 0x8d, 0x2c, 0x1c, 0x74, 0x17, 0xbd, 0x23, 0x44, 0x1a, 0x82, 0x2b, - 0xfc, 0x07, 0xa8, 0xfc, 0x81, 0x13, 0x7e, 0xa7, 0x6c, 0xf6, 0x41, 0xbf, 0xc1, 0x96, 0xfb, 0xb7, - 0xc3, 0x30, 0xca, 0x9f, 0x04, 0x47, 0xfd, 0x9a, 0xf6, 0x55, 0x48, 0x1d, 0x59, 0x0d, 0xb3, 0x6d, - 0x79, 0xc7, 0xec, 0x11, 0xe8, 0xc3, 0x4b, 0x81, 0xda, 0xfc, 0xa1, 0xe9, 0x73, 0x9d, 0xa6, 0xd3, - 0x69, 0x1b, 0xbe, 0xa8, 0x7e, 0x16, 0x32, 0x47, 0xc8, 0x3a, 0x3c, 0xf2, 0xaa, 0x96, 0x5d, 0xad, - 0x35, 0x49, 0xa7, 0x3c, 0x6e, 0x00, 0x1d, 0x5b, 0xb7, 0x4b, 0x4d, 0x7c, 0xb2, 0xba, 0xe9, 0x99, - 0xe4, 0x0e, 0x3d, 0x63, 0x90, 0xcf, 0xfa, 0x39, 0xc8, 0xb4, 0x91, 0xdb, 0x69, 0x78, 0xd5, 0x9a, - 0xd3, 0xb1, 0x3d, 0xd2, 0xcb, 0xaa, 0x46, 0x9a, 0x8e, 0x95, 0xf0, 0x90, 0xfe, 0x18, 0x8c, 0x7b, - 0xed, 0x0e, 0xaa, 0xba, 0x35, 0xc7, 0x73, 0x9b, 0xa6, 0x4d, 0x7a, 0xd9, 0x94, 0x91, 0xc1, 0x83, - 0x3b, 0x6c, 0x8c, 0xfc, 0x10, 0x7b, 0xcd, 0x69, 0x23, 0x72, 0x2b, 0x9d, 0x30, 0xe8, 0x81, 0xae, - 0x81, 0xfa, 0x32, 0x3a, 0x26, 0x37, 0x6b, 0x49, 0x03, 0x7f, 0xd4, 0x9f, 0x84, 0x11, 0xfa, 0x97, - 0x54, 0x48, 0x67, 0x4d, 0x36, 0xae, 0xfd, 0x4b, 0xa3, 0x0f, 0x68, 0x0d, 0x26, 0xa0, 0xdf, 0x84, - 0x51, 0x0f, 0xb5, 0xdb, 0xa6, 0x65, 0x93, 0x1b, 0xa7, 0xf4, 0xf2, 0x7c, 0x84, 0x19, 0x76, 0xa9, - 0x04, 0xf9, 0x41, 0x5a, 0x83, 0xcb, 0xeb, 0x57, 0x21, 0x43, 0xe4, 0x96, 0xab, 0xf4, 0xaf, 0xcd, - 0xa4, 0x7b, 0xc6, 0x72, 0x9a, 0xca, 0xf1, 0x7d, 0x02, 0x0e, 0xa3, 0x3f, 0xc6, 0x37, 0x4e, 0x4e, - 0xfb, 0x58, 0xc4, 0x69, 0x49, 0xd9, 0x5d, 0x26, 0x2d, 0x23, 0x3d, 0x35, 0xe3, 0xa1, 0x3f, 0xd7, - 0xb7, 0x09, 0x19, 0x51, 0x2f, 0x6e, 0x06, 0xda, 0xfa, 0x10, 0x33, 0x3c, 0x11, 0xfc, 0x92, 0x7f, - 0x0f, 0x2b, 0xd0, 0xf9, 0x7c, 0xe2, 0x86, 0x32, 0xbb, 0x0d, 0x5a, 0xf8, 0x7c, 0x11, 0x94, 0x17, - 0x64, 0x4a, 0x4d, 0xbc, 0x58, 0xf2, 0x94, 0x3c, 0x60, 0xcc, 0x3d, 0x0b, 0x23, 0x34, 0x7e, 0xf4, - 0x34, 0x8c, 0x06, 0xbf, 0xf3, 0x98, 0x82, 0xe4, 0xf6, 0x5e, 0x65, 0x87, 0xfe, 0x60, 0xeb, 0xce, - 0x46, 0x61, 0x7b, 0x67, 0x77, 0xbd, 0xf4, 0x49, 0x2d, 0xa1, 0x4f, 0x42, 0xba, 0xb8, 0xbe, 0xb1, - 0x51, 0x2d, 0x16, 0xd6, 0x37, 0xca, 0x77, 0x35, 0x35, 0x37, 0x07, 0x23, 0x54, 0x4f, 0xf2, 0xc3, - 0x73, 0x1d, 0xdb, 0x3e, 0xe6, 0xad, 0x03, 0x39, 0xc8, 0x7d, 0x4b, 0x87, 0xd1, 0x42, 0xa3, 0xb1, - 0x69, 0xb6, 0x5c, 0xfd, 0x79, 0x98, 0xa2, 0x3f, 0x5b, 0xb1, 0xeb, 0xac, 0x92, 0xdf, 0x47, 0xc4, - 0x85, 0x41, 0x61, 0x7f, 0xc1, 0x20, 0xb8, 0x6e, 0x26, 0xbe, 0xd4, 0x25, 0x4b, 0x0d, 0xdc, 0xcd, - 0xa1, 0xef, 0x82, 0xc6, 0x07, 0xd7, 0x1a, 0x8e, 0xe9, 0x61, 0xde, 0x04, 0xfb, 0xf9, 0xc2, 0xde, - 0xbc, 0x5c, 0x94, 0xd2, 0x76, 0x31, 0xe8, 0x9f, 0x80, 0xd4, 0xba, 0xed, 0x5d, 0x59, 0xc6, 0x6c, - 0xfc, 0xaf, 0x03, 0x75, 0xb3, 0x71, 0x11, 0xca, 0xe2, 0x23, 0x18, 0xfa, 0xda, 0x0a, 0x46, 0x27, - 0xfb, 0xa1, 0x89, 0x48, 0x80, 0x26, 0x87, 0xfa, 0xb3, 0x30, 0x86, 0xef, 0x4c, 0xe8, 0xc9, 0x87, - 0x79, 0xdb, 0xda, 0x05, 0xf7, 0x65, 0x28, 0x3e, 0xc0, 0x70, 0x02, 0x7a, 0xfe, 0x91, 0xbe, 0x04, - 0x82, 0x02, 0x01, 0x06, 0x13, 0xec, 0xf8, 0x1a, 0x8c, 0xf6, 0x24, 0xd8, 0x09, 0x69, 0xb0, 0x23, - 0x6a, 0xb0, 0xe3, 0x6b, 0x90, 0xea, 0x4b, 0x20, 0x6a, 0xe0, 0x1f, 0xeb, 0x45, 0x80, 0x35, 0xeb, - 0x35, 0x54, 0xa7, 0x2a, 0xd0, 0xbf, 0x1d, 0x94, 0x8b, 0x60, 0x08, 0x84, 0x28, 0x85, 0x80, 0xd2, - 0xcb, 0x90, 0xde, 0x39, 0x08, 0x48, 0xa0, 0x2b, 0x8f, 0x7d, 0x35, 0x0e, 0x42, 0x2c, 0x22, 0xce, - 0x57, 0x85, 0x5e, 0x4c, 0xba, 0xbf, 0x2a, 0xc2, 0xd5, 0x08, 0xa8, 0x40, 0x15, 0x4a, 0x92, 0x89, - 0x51, 0x45, 0x60, 0x11, 0x71, 0xb8, 0x18, 0x16, 0x1d, 0x07, 0x4b, 0xb2, 0xaa, 0x34, 0x1f, 0x41, - 0xc1, 0x24, 0x58, 0x31, 0x64, 0x47, 0xc4, 0x23, 0x24, 0xc8, 0x31, 0x78, 0xa2, 0xb7, 0x47, 0xb8, - 0x0c, 0xf7, 0x08, 0x3f, 0x16, 0xf3, 0x8c, 0xbc, 0xcd, 0x8a, 0x79, 0x26, 0x63, 0xf3, 0x8c, 0x8b, - 0x86, 0xf2, 0x8c, 0x0f, 0xeb, 0x9f, 0x82, 0x49, 0x3e, 0x86, 0xcb, 0x13, 0x26, 0xd5, 0xd8, 0x5f, - 0x57, 0xeb, 0x4d, 0xca, 0x24, 0x29, 0x67, 0x18, 0xaf, 0x57, 0x60, 0x82, 0x0f, 0x6d, 0xba, 0xe4, - 0x72, 0xa7, 0xd8, 0x1f, 0xce, 0xe8, 0xcd, 0x48, 0x05, 0x29, 0x61, 0x08, 0x3d, 0xbb, 0x0a, 0x33, - 0xd1, 0xd5, 0x48, 0x2c, 0xbf, 0x63, 0xb4, 0xfc, 0x9e, 0x12, 0xcb, 0xaf, 0x22, 0x96, 0xef, 0x12, - 0x9c, 0x8e, 0xac, 0x3d, 0x71, 0x24, 0x09, 0x91, 0xe4, 0x16, 0x8c, 0x4b, 0x25, 0x47, 0x04, 0x0f, - 0x47, 0x80, 0x87, 0xbb, 0xc1, 0x41, 0x68, 0x45, 0xac, 0x1e, 0x12, 0x58, 0x15, 0xc1, 0x9f, 0x80, - 0x09, 0xb9, 0xde, 0x88, 0xe8, 0xf1, 0x08, 0xf4, 0x78, 0x04, 0x3a, 0xfa, 0xdc, 0xc9, 0x08, 0x74, - 0x32, 0x84, 0xde, 0xe9, 0x79, 0xee, 0xa9, 0x08, 0xf4, 0x54, 0x04, 0x3a, 0xfa, 0xdc, 0x7a, 0x04, - 0x5a, 0x17, 0xd1, 0x4f, 0xc3, 0x64, 0xa8, 0xc4, 0x88, 0xf0, 0xd1, 0x08, 0xf8, 0xa8, 0x08, 0x7f, - 0x06, 0xb4, 0x70, 0x71, 0x11, 0xf1, 0x93, 0x11, 0xf8, 0xc9, 0xa8, 0xd3, 0x47, 0x6b, 0x3f, 0x12, - 0x01, 0x1f, 0x89, 0x3c, 0x7d, 0x34, 0x5e, 0x8b, 0xc0, 0x6b, 0x22, 0x3e, 0x0f, 0x19, 0xb1, 0x9a, - 0x88, 0xd8, 0x54, 0x04, 0x36, 0x15, 0xb6, 0xbb, 0x54, 0x4c, 0xe2, 0x22, 0x7d, 0xac, 0x47, 0xba, - 0x48, 0x25, 0x24, 0x8e, 0x24, 0x23, 0x92, 0x7c, 0x1a, 0x4e, 0x45, 0x95, 0x8c, 0x08, 0x8e, 0x05, - 0x91, 0x63, 0x02, 0xf7, 0x88, 0x41, 0xb3, 0x67, 0xb6, 0x42, 0x8d, 0xd3, 0xec, 0x8b, 0x30, 0x1d, - 0x51, 0x38, 0x22, 0x68, 0x97, 0xe4, 0x6e, 0x2c, 0x2b, 0xd0, 0x92, 0x22, 0x60, 0xd9, 0x87, 0xdb, - 0x8e, 0x65, 0x7b, 0x62, 0x57, 0xf6, 0xed, 0x69, 0x98, 0x60, 0xe5, 0x69, 0xab, 0x5d, 0x47, 0x6d, - 0x54, 0xd7, 0xff, 0x5c, 0xef, 0xde, 0xe9, 0x52, 0x77, 0x51, 0x63, 0xa8, 0x13, 0xb4, 0x50, 0x2f, - 0xf6, 0x6c, 0xa1, 0x2e, 0xc6, 0xd3, 0xc7, 0x75, 0x52, 0xa5, 0xae, 0x4e, 0xea, 0x89, 0xde, 0xa4, - 0xbd, 0x1a, 0xaa, 0x52, 0x57, 0x43, 0xd5, 0x9f, 0x24, 0xb2, 0xaf, 0x5a, 0xeb, 0xee, 0xab, 0x16, - 0x7a, 0xb3, 0xf4, 0x6e, 0xaf, 0xd6, 0xba, 0xdb, 0xab, 0x18, 0x9e, 0xe8, 0x2e, 0x6b, 0xad, 0xbb, - 0xcb, 0xea, 0xc3, 0xd3, 0xbb, 0xd9, 0x5a, 0xeb, 0x6e, 0xb6, 0x62, 0x78, 0xa2, 0x7b, 0xae, 0xf5, - 0x88, 0x9e, 0xeb, 0xc9, 0xde, 0x44, 0xfd, 0x5a, 0xaf, 0x8d, 0xa8, 0xd6, 0x6b, 0xb1, 0x8f, 0x52, - 0x7d, 0x3b, 0xb0, 0xf5, 0x88, 0x0e, 0x2c, 0x4e, 0xb1, 0x1e, 0x8d, 0xd8, 0x46, 0x54, 0x23, 0x16, - 0xab, 0x58, 0xaf, 0x7e, 0xec, 0x17, 0xc2, 0xfd, 0xd8, 0x85, 0xde, 0x4c, 0xd1, 0x6d, 0xd9, 0x5a, - 0x77, 0x5b, 0xb6, 0x10, 0x97, 0x73, 0x51, 0xdd, 0xd9, 0x8b, 0x3d, 0xbb, 0xb3, 0x01, 0x52, 0x38, - 0xae, 0x49, 0x7b, 0xa1, 0x57, 0x93, 0xb6, 0x14, 0xcf, 0xdd, 0xbf, 0x57, 0xdb, 0xeb, 0xd1, 0xab, - 0x3d, 0x15, 0x4f, 0xfc, 0x51, 0xcb, 0xf6, 0x51, 0xcb, 0xf6, 0x51, 0xcb, 0xf6, 0x51, 0xcb, 0xf6, - 0xf3, 0x6f, 0xd9, 0xf2, 0xc9, 0xcf, 0x7f, 0x75, 0x5e, 0xc9, 0xfd, 0x67, 0xd5, 0xff, 0x5b, 0x5f, - 0xcf, 0x5b, 0xde, 0x11, 0x2e, 0x6f, 0x9b, 0x90, 0x21, 0xbf, 0x3d, 0xdb, 0x34, 0x5b, 0x2d, 0xcb, - 0x3e, 0x64, 0x3d, 0xdb, 0x62, 0xf7, 0xa3, 0x44, 0x06, 0x20, 0x7f, 0xe7, 0x64, 0x93, 0x0a, 0xb3, - 0xe5, 0xc6, 0x0e, 0x46, 0xf4, 0x3b, 0x90, 0x6e, 0xba, 0x87, 0x3e, 0x5b, 0xa2, 0x6b, 0x21, 0x0c, - 0xb1, 0xd1, 0x2b, 0x0d, 0xc8, 0xa0, 0xe9, 0x0f, 0x60, 0xd5, 0xf6, 0x8f, 0xbd, 0x40, 0x35, 0x35, - 0x4e, 0x35, 0xec, 0x53, 0x59, 0xb5, 0xfd, 0x60, 0x04, 0x87, 0x6d, 0x58, 0xf7, 0xb8, 0x4a, 0x27, - 0x05, 0xcf, 0xf3, 0x30, 0x19, 0xd2, 0x36, 0x22, 0xe7, 0x1f, 0xc0, 0x37, 0x58, 0xb1, 0xb0, 0xe6, - 0x71, 0x39, 0x21, 0x06, 0x64, 0xee, 0x51, 0x18, 0x97, 0xb8, 0xf5, 0x0c, 0x28, 0x07, 0xec, 0xab, - 0x94, 0xca, 0x41, 0xee, 0x2b, 0x0a, 0xa4, 0xd9, 0x6b, 0x04, 0xdb, 0xa6, 0xd5, 0xd6, 0x9f, 0x83, - 0x64, 0x83, 0x7f, 0x9d, 0xe9, 0x41, 0xbf, 0x3a, 0x4b, 0x18, 0xf4, 0x35, 0x18, 0x6e, 0xfb, 0x5f, - 0x77, 0x7a, 0xa0, 0xef, 0xc3, 0x12, 0x78, 0xee, 0x9e, 0x02, 0x53, 0xec, 0x2d, 0x57, 0x97, 0xbd, - 0xfc, 0x6c, 0xb6, 0x66, 0xbf, 0xa5, 0xc0, 0x98, 0x7f, 0xa4, 0xef, 0xc3, 0x84, 0x7f, 0x40, 0x5f, - 0xb0, 0xa7, 0x91, 0x9a, 0x17, 0x2c, 0xdc, 0xc5, 0xb1, 0x14, 0xf1, 0x89, 0x6e, 0x44, 0xd1, 0x35, - 0x59, 0x1e, 0x9c, 0x2d, 0xc0, 0x74, 0x84, 0xd8, 0x49, 0x16, 0xe4, 0xdc, 0x39, 0x18, 0xab, 0x38, - 0x1e, 0xfd, 0xd5, 0x1c, 0xfd, 0x94, 0xb0, 0xab, 0x50, 0x4c, 0x68, 0x43, 0x04, 0xbc, 0x78, 0x0e, - 0x46, 0x59, 0xf6, 0xeb, 0x23, 0x90, 0xd8, 0x2c, 0x68, 0x43, 0xe4, 0xff, 0xa2, 0xa6, 0x90, 0xff, - 0x4b, 0x5a, 0xa2, 0xb8, 0xf1, 0x00, 0xbb, 0x4c, 0x43, 0x6f, 0xdf, 0x9f, 0x1b, 0x8a, 0xda, 0x65, - 0xda, 0x1f, 0xa1, 0xe6, 0xf9, 0x93, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x03, 0x59, 0x0e, 0xe8, - 0x81, 0x00, 0x00, + 0x7f, 0xbe, 0xab, 0xa6, 0xd3, 0x65, 0xef, 0xea, 0x20, 0xcb, 0x1e, 0x19, 0x3b, 0x59, 0x6d, 0x4f, + 0x84, 0xd4, 0xf6, 0x9b, 0x30, 0xd9, 0x45, 0x34, 0x70, 0x8d, 0xfd, 0xac, 0x02, 0x99, 0x5e, 0xc6, + 0x89, 0xa8, 0x74, 0xb1, 0x40, 0xa5, 0xbb, 0x29, 0x5b, 0xf0, 0x5c, 0x6f, 0x27, 0x74, 0xf9, 0xfa, + 0x6b, 0x0a, 0x4c, 0x87, 0x77, 0x8a, 0xa1, 0x3a, 0x3c, 0x03, 0xc3, 0x4d, 0xe4, 0x1e, 0xd9, 0xbc, + 0x5b, 0xba, 0x10, 0xb2, 0x06, 0xe3, 0x69, 0xd9, 0xd9, 0x0c, 0x25, 0x2e, 0xe2, 0x6a, 0xaf, 0x76, + 0x8f, 0x6a, 0xd3, 0xa5, 0xe9, 0x2f, 0xc5, 0xe0, 0x74, 0x28, 0x79, 0xa8, 0xa2, 0x8f, 0x02, 0xd4, + 0xad, 0x56, 0xc7, 0xa5, 0x1d, 0x11, 0x2d, 0xb0, 0xa3, 0x64, 0x84, 0x14, 0x2f, 0x5c, 0x3c, 0x3b, + 0xae, 0x37, 0xaf, 0x92, 0x79, 0xa0, 0x43, 0x44, 0xe0, 0xba, 0xaf, 0x68, 0x9c, 0x28, 0x3a, 0xdb, + 0xe3, 0x4a, 0xbb, 0x02, 0x73, 0x09, 0xb4, 0x6a, 0xa3, 0x8e, 0x2c, 0xb7, 0xe2, 0xb8, 0x6d, 0x64, + 0x36, 0xeb, 0xd6, 0x21, 0x59, 0x41, 0x92, 0xb9, 0xc4, 0x81, 0xd9, 0x70, 0x90, 0x31, 0x41, 0xa7, + 0x77, 0xf8, 0x2c, 0x46, 0x90, 0x00, 0x6a, 0x0b, 0x88, 0xe1, 0x00, 0x82, 0x4e, 0x7b, 0x88, 0xec, + 0xef, 0x24, 0x21, 0x25, 0xf4, 0xd5, 0xfa, 0x39, 0x48, 0xbf, 0x64, 0xbe, 0x62, 0x56, 0xf8, 0xbd, + 0x12, 0xb5, 0x44, 0x0a, 0x8f, 0x6d, 0xb3, 0xfb, 0xa5, 0x25, 0x38, 0x45, 0x44, 0xec, 0x8e, 0x8b, + 0xda, 0x95, 0x6a, 0xc3, 0x74, 0x1c, 0x62, 0xb4, 0x24, 0x11, 0xd5, 0xf1, 0xdc, 0x16, 0x9e, 0x2a, + 0xf2, 0x19, 0xfd, 0x0a, 0x4c, 0x11, 0x44, 0xb3, 0xd3, 0x70, 0xeb, 0xad, 0x06, 0xaa, 0xe0, 0xbb, + 0x37, 0x87, 0xac, 0x24, 0x9e, 0x66, 0x93, 0x58, 0x62, 0x93, 0x09, 0x60, 0x8d, 0x1c, 0x7d, 0x15, + 0x1e, 0x25, 0xb0, 0x43, 0x64, 0xa1, 0xb6, 0xe9, 0xa2, 0x0a, 0xfa, 0xf9, 0x8e, 0xd9, 0x70, 0x2a, + 0xa6, 0x55, 0xab, 0x1c, 0x99, 0xce, 0x51, 0xe6, 0x14, 0x26, 0x28, 0xc4, 0x32, 0x8a, 0xf1, 0x30, + 0x16, 0xbc, 0xc5, 0xe4, 0x4a, 0x44, 0x2c, 0x6f, 0xd5, 0x9e, 0x33, 0x9d, 0x23, 0x3d, 0x07, 0xd3, + 0x84, 0xc5, 0x71, 0xdb, 0x75, 0xeb, 0xb0, 0x52, 0x3d, 0x42, 0xd5, 0x97, 0x2b, 0x1d, 0xf7, 0xe0, + 0x7a, 0xe6, 0x11, 0xf1, 0xfc, 0x44, 0xc3, 0x1d, 0x22, 0x53, 0xc4, 0x22, 0x7b, 0xee, 0xc1, 0x75, + 0x7d, 0x07, 0xd2, 0xd8, 0x19, 0xcd, 0xfa, 0xeb, 0xa8, 0x72, 0x60, 0xb7, 0xc9, 0xd2, 0x38, 0x1e, + 0x52, 0x9a, 0x04, 0x0b, 0x2e, 0x6e, 0x31, 0xc0, 0xa6, 0x5d, 0x43, 0xb9, 0xc4, 0xce, 0x76, 0xa9, + 0xb4, 0x6a, 0xa4, 0x38, 0xcb, 0x9a, 0xdd, 0xc6, 0x01, 0x75, 0x68, 0x7b, 0x06, 0x4e, 0xd1, 0x80, + 0x3a, 0xb4, 0xb9, 0x79, 0xaf, 0xc0, 0x54, 0xb5, 0x4a, 0xaf, 0xb9, 0x5e, 0xad, 0xb0, 0x7b, 0x2c, + 0x27, 0xa3, 0x05, 0x8c, 0x55, 0xad, 0xde, 0xa2, 0x02, 0x2c, 0xc6, 0x1d, 0xfd, 0x06, 0x9c, 0xf6, + 0x8d, 0x25, 0x02, 0x27, 0xbb, 0xae, 0x52, 0x86, 0x5e, 0x81, 0xa9, 0xd6, 0x71, 0x37, 0x50, 0x0f, + 0x9c, 0xb1, 0x75, 0x2c, 0xc3, 0xae, 0xc1, 0xa9, 0xd6, 0x51, 0xab, 0x1b, 0xb7, 0x20, 0xe2, 0xf4, + 0xd6, 0x51, 0x4b, 0x06, 0x3e, 0x4e, 0x6e, 0xb8, 0xdb, 0xa8, 0x6a, 0xba, 0xa8, 0x96, 0x79, 0x48, + 0x14, 0x17, 0x26, 0xf4, 0x8b, 0xa0, 0x55, 0xab, 0x15, 0x64, 0x99, 0xfb, 0x0d, 0x54, 0x31, 0xdb, + 0xc8, 0x32, 0x9d, 0xcc, 0x9c, 0x28, 0x3c, 0x5e, 0xad, 0x96, 0xc8, 0x6c, 0x9e, 0x4c, 0xea, 0x0b, + 0x30, 0x69, 0xef, 0xbf, 0x54, 0xa5, 0x21, 0x59, 0x69, 0xb5, 0xd1, 0x41, 0xfd, 0xb5, 0xcc, 0x79, + 0x62, 0xdf, 0x09, 0x3c, 0x41, 0x02, 0x72, 0x9b, 0x0c, 0xeb, 0x4f, 0x82, 0x56, 0x75, 0x8e, 0xcc, + 0x76, 0x8b, 0xd4, 0x64, 0xa7, 0x65, 0x56, 0x51, 0xe6, 0x71, 0x2a, 0x4a, 0xc7, 0xcb, 0x7c, 0x18, + 0xa7, 0x84, 0xf3, 0x6a, 0xfd, 0xc0, 0xe5, 0x8c, 0x4f, 0xd0, 0x94, 0x20, 0x63, 0x8c, 0x6d, 0x1e, + 0x34, 0x6c, 0x8a, 0xc0, 0x89, 0xe7, 0x89, 0xd8, 0x78, 0xeb, 0xa8, 0x25, 0x9e, 0xf7, 0x31, 0x18, + 0xc3, 0x92, 0xfe, 0x49, 0x9f, 0xa4, 0x0d, 0x59, 0xeb, 0x48, 0x38, 0xe3, 0x87, 0xd6, 0x1b, 0x67, + 0x73, 0x90, 0x16, 0xe3, 0x53, 0x1f, 0x05, 0x1a, 0xa1, 0x9a, 0x82, 0x9b, 0x95, 0xe2, 0xd6, 0x2a, + 0x6e, 0x33, 0x3e, 0x53, 0xd2, 0x62, 0xb8, 0xdd, 0xd9, 0x58, 0xdf, 0x2d, 0x55, 0x8c, 0xbd, 0xf2, + 0xee, 0xfa, 0x66, 0x49, 0x53, 0xc5, 0xbe, 0xfa, 0x3b, 0x31, 0x18, 0x0f, 0xde, 0x22, 0xe9, 0x9f, + 0x80, 0x87, 0xf8, 0xf3, 0x0c, 0x07, 0xb9, 0x95, 0x57, 0xeb, 0x6d, 0x92, 0x32, 0x4d, 0x93, 0x2e, + 0x5f, 0x9e, 0xd3, 0x4e, 0x31, 0xa9, 0x1d, 0xe4, 0x3e, 0x5f, 0x6f, 0xe3, 0x84, 0x68, 0x9a, 0xae, + 0xbe, 0x01, 0x73, 0x96, 0x5d, 0x71, 0x5c, 0xd3, 0xaa, 0x99, 0xed, 0x5a, 0xc5, 0x7f, 0x92, 0x54, + 0x31, 0xab, 0x55, 0xe4, 0x38, 0x36, 0x5d, 0xaa, 0x3c, 0x96, 0x33, 0x96, 0xbd, 0xc3, 0x84, 0xfd, + 0x1a, 0x9e, 0x67, 0xa2, 0x52, 0x80, 0xa9, 0xbd, 0x02, 0xec, 0x11, 0x18, 0x6d, 0x9a, 0xad, 0x0a, + 0xb2, 0xdc, 0xf6, 0x31, 0x69, 0x8c, 0x93, 0x46, 0xb2, 0x69, 0xb6, 0x4a, 0xf8, 0xf8, 0xa7, 0x73, + 0x7f, 0xf2, 0x5f, 0x55, 0x48, 0x8b, 0xcd, 0x31, 0xbe, 0xd7, 0xa8, 0x92, 0x75, 0x44, 0x21, 0x95, + 0xe6, 0xb1, 0xbe, 0xad, 0xf4, 0x62, 0x11, 0x2f, 0x30, 0xb9, 0x61, 0xda, 0xb2, 0x1a, 0x14, 0x89, + 0x17, 0x77, 0x5c, 0x5b, 0x10, 0x6d, 0x11, 0x92, 0x06, 0x3b, 0xd2, 0x6f, 0xc1, 0xf0, 0x4b, 0x0e, + 0xe1, 0x1e, 0x26, 0xdc, 0xe7, 0xfb, 0x73, 0xdf, 0xde, 0x21, 0xe4, 0xa3, 0xb7, 0x77, 0x2a, 0xe5, + 0x2d, 0x63, 0x33, 0xbf, 0x61, 0x30, 0xb8, 0xfe, 0x30, 0xc4, 0x1b, 0xe6, 0xeb, 0xc7, 0xc1, 0xa5, + 0x88, 0x0c, 0x0d, 0x6a, 0xf8, 0x87, 0x21, 0xfe, 0x2a, 0x32, 0x5f, 0x0e, 0x2e, 0x00, 0x64, 0xe8, + 0x43, 0x0c, 0xfd, 0x8b, 0x90, 0x20, 0xf6, 0xd2, 0x01, 0x98, 0xc5, 0xb4, 0x21, 0x3d, 0x09, 0xf1, + 0xe2, 0x96, 0x81, 0xc3, 0x5f, 0x83, 0x34, 0x1d, 0xad, 0x6c, 0xaf, 0x97, 0x8a, 0x25, 0x2d, 0x96, + 0xbd, 0x02, 0xc3, 0xd4, 0x08, 0x38, 0x35, 0x3c, 0x33, 0x68, 0x43, 0xec, 0x90, 0x71, 0x28, 0x7c, + 0x76, 0x6f, 0xb3, 0x50, 0x32, 0xb4, 0x98, 0xe8, 0x5e, 0x07, 0xd2, 0x62, 0x5f, 0xfc, 0xd3, 0x89, + 0xa9, 0x6f, 0x2b, 0x90, 0x12, 0xfa, 0x5c, 0xdc, 0xa0, 0x98, 0x8d, 0x86, 0xfd, 0x6a, 0xc5, 0x6c, + 0xd4, 0x4d, 0x87, 0x05, 0x05, 0x90, 0xa1, 0x3c, 0x1e, 0x19, 0xd4, 0x69, 0x3f, 0x15, 0xe5, 0xbf, + 0xac, 0x80, 0x26, 0xb7, 0x98, 0x92, 0x82, 0xca, 0xcf, 0x54, 0xc1, 0x2f, 0x2a, 0x30, 0x1e, 0xec, + 0x2b, 0x25, 0xf5, 0xce, 0xfd, 0x4c, 0xd5, 0xfb, 0x5e, 0x0c, 0xc6, 0x02, 0xdd, 0xe4, 0xa0, 0xda, + 0xfd, 0x3c, 0x4c, 0xd6, 0x6b, 0xa8, 0xd9, 0xb2, 0x5d, 0x64, 0x55, 0x8f, 0x2b, 0x0d, 0xf4, 0x0a, + 0x6a, 0x64, 0xb2, 0xa4, 0x50, 0x5c, 0xec, 0xdf, 0xaf, 0x2e, 0xae, 0xfb, 0xb8, 0x0d, 0x0c, 0xcb, + 0x4d, 0xad, 0xaf, 0x96, 0x36, 0xb7, 0xb7, 0x76, 0x4b, 0xe5, 0xe2, 0x9d, 0xca, 0x5e, 0xf9, 0x93, + 0xe5, 0xad, 0xe7, 0xcb, 0x86, 0x56, 0x97, 0xc4, 0x3e, 0xc4, 0x54, 0xdf, 0x06, 0x4d, 0x56, 0x4a, + 0x7f, 0x08, 0xc2, 0xd4, 0xd2, 0x86, 0xf4, 0x29, 0x98, 0x28, 0x6f, 0x55, 0x76, 0xd6, 0x57, 0x4b, + 0x95, 0xd2, 0xda, 0x5a, 0xa9, 0xb8, 0xbb, 0x43, 0x9f, 0x40, 0x78, 0xd2, 0xbb, 0xc1, 0xa4, 0xfe, + 0x82, 0x0a, 0x53, 0x21, 0x9a, 0xe8, 0x79, 0x76, 0xef, 0x40, 0x6f, 0x67, 0x9e, 0x1a, 0x44, 0xfb, + 0x45, 0xbc, 0xe4, 0x6f, 0x9b, 0x6d, 0x97, 0xdd, 0x6a, 0x3c, 0x09, 0xd8, 0x4a, 0x96, 0x5b, 0x3f, + 0xa8, 0xa3, 0x36, 0x7b, 0x60, 0x43, 0x6f, 0x28, 0x26, 0xfc, 0x71, 0xfa, 0xcc, 0xe6, 0xe3, 0xa0, + 0xb7, 0x6c, 0xa7, 0xee, 0xd6, 0x5f, 0x41, 0x95, 0xba, 0xc5, 0x9f, 0xee, 0xe0, 0x1b, 0x8c, 0xb8, + 0xa1, 0xf1, 0x99, 0x75, 0xcb, 0xf5, 0xa4, 0x2d, 0x74, 0x68, 0x4a, 0xd2, 0xb8, 0x80, 0xab, 0x86, + 0xc6, 0x67, 0x3c, 0xe9, 0x73, 0x90, 0xae, 0xd9, 0x1d, 0xdc, 0x75, 0x51, 0x39, 0xbc, 0x5e, 0x28, + 0x46, 0x8a, 0x8e, 0x79, 0x22, 0xac, 0x9f, 0xf6, 0x1f, 0x2b, 0xa5, 0x8d, 0x14, 0x1d, 0xa3, 0x22, + 0x4f, 0xc0, 0x84, 0x79, 0x78, 0xd8, 0xc6, 0xe4, 0x9c, 0x88, 0xde, 0x21, 0x8c, 0x7b, 0xc3, 0x44, + 0x70, 0xe6, 0x36, 0x24, 0xb9, 0x1d, 0xf0, 0x92, 0x8c, 0x2d, 0x51, 0x69, 0xd1, 0xdb, 0xde, 0xd8, + 0xfc, 0xa8, 0x91, 0xb4, 0xf8, 0xe4, 0x39, 0x48, 0xd7, 0x9d, 0x8a, 0xff, 0x94, 0x3c, 0x76, 0x36, + 0x36, 0x9f, 0x34, 0x52, 0x75, 0xc7, 0x7b, 0xc2, 0x98, 0xfd, 0x5a, 0x0c, 0xc6, 0x83, 0x4f, 0xf9, + 0xf5, 0x55, 0x48, 0x36, 0xec, 0xaa, 0x49, 0x42, 0x8b, 0x6e, 0x31, 0xcd, 0x47, 0x6c, 0x0c, 0x2c, + 0x6e, 0x30, 0x79, 0xc3, 0x43, 0xce, 0xfc, 0x47, 0x05, 0x92, 0x7c, 0x58, 0x9f, 0x86, 0x78, 0xcb, + 0x74, 0x8f, 0x08, 0x5d, 0xa2, 0x10, 0xd3, 0x14, 0x83, 0x1c, 0xe3, 0x71, 0xa7, 0x65, 0x5a, 0x24, + 0x04, 0xd8, 0x38, 0x3e, 0xc6, 0x7e, 0x6d, 0x20, 0xb3, 0x46, 0x6e, 0x3f, 0xec, 0x66, 0x13, 0x59, + 0xae, 0xc3, 0xfd, 0xca, 0xc6, 0x8b, 0x6c, 0x58, 0xff, 0x18, 0x4c, 0xba, 0x6d, 0xb3, 0xde, 0x08, + 0xc8, 0xc6, 0x89, 0xac, 0xc6, 0x27, 0x3c, 0xe1, 0x1c, 0x3c, 0xcc, 0x79, 0x6b, 0xc8, 0x35, 0xab, + 0x47, 0xa8, 0xe6, 0x83, 0x86, 0xc9, 0x63, 0x86, 0x87, 0x98, 0xc0, 0x2a, 0x9b, 0xe7, 0xd8, 0xec, + 0x1f, 0x2a, 0x30, 0xc9, 0x6f, 0x98, 0x6a, 0x9e, 0xb1, 0x36, 0x01, 0x4c, 0xcb, 0xb2, 0x5d, 0xd1, + 0x5c, 0xdd, 0xa1, 0xdc, 0x85, 0x5b, 0xcc, 0x7b, 0x20, 0x43, 0x20, 0x98, 0x69, 0x02, 0xf8, 0x33, + 0x3d, 0xcd, 0x36, 0x07, 0x29, 0xb6, 0x85, 0x43, 0xf6, 0x01, 0xe9, 0x2d, 0x36, 0xd0, 0x21, 0x7c, + 0x67, 0xa5, 0x9f, 0x82, 0xc4, 0x3e, 0x3a, 0xac, 0x5b, 0xec, 0xc1, 0x2c, 0x3d, 0xe0, 0x0f, 0x42, + 0xe2, 0xde, 0x83, 0x90, 0xc2, 0x8b, 0x30, 0x55, 0xb5, 0x9b, 0xb2, 0xba, 0x05, 0x4d, 0xba, 0xcd, + 0x77, 0x9e, 0x53, 0x3e, 0x03, 0x7e, 0x8b, 0xf9, 0x63, 0x45, 0xf9, 0xd5, 0x98, 0x7a, 0x6b, 0xbb, + 0xf0, 0x5b, 0xb1, 0x99, 0x5b, 0x14, 0xba, 0xcd, 0xaf, 0xd4, 0x40, 0x07, 0x0d, 0x54, 0xc5, 0xda, + 0xc3, 0x6f, 0x7c, 0x0c, 0x9e, 0x3a, 0xac, 0xbb, 0x47, 0x9d, 0xfd, 0xc5, 0xaa, 0xdd, 0xbc, 0x78, + 0x68, 0x1f, 0xda, 0xfe, 0xd6, 0x27, 0x3e, 0x22, 0x07, 0xe4, 0x13, 0xdb, 0xfe, 0x1c, 0xf5, 0x46, + 0x67, 0x22, 0xf7, 0x4a, 0x73, 0x65, 0x98, 0x62, 0xc2, 0x15, 0xb2, 0xff, 0x42, 0xef, 0x22, 0xf4, + 0xbe, 0xcf, 0xb0, 0x32, 0xbf, 0xfd, 0x7d, 0xb2, 0x5c, 0x1b, 0x93, 0x0c, 0x8a, 0xe7, 0xe8, 0x8d, + 0x46, 0xce, 0x80, 0xd3, 0x01, 0x3e, 0x9a, 0x9a, 0xa8, 0x1d, 0xc1, 0xf8, 0x1d, 0xc6, 0x38, 0x25, + 0x30, 0xee, 0x30, 0x68, 0xae, 0x08, 0x63, 0x27, 0xe1, 0xfa, 0x77, 0x8c, 0x2b, 0x8d, 0x44, 0x92, + 0x5b, 0x30, 0x41, 0x48, 0xaa, 0x1d, 0xc7, 0xb5, 0x9b, 0xa4, 0xee, 0xf5, 0xa7, 0xf9, 0xf7, 0xdf, + 0xa7, 0xb9, 0x32, 0x8e, 0x61, 0x45, 0x0f, 0x95, 0xcb, 0x01, 0xd9, 0x72, 0xaa, 0xa1, 0x6a, 0x23, + 0x82, 0xe1, 0x2e, 0x53, 0xc4, 0x93, 0xcf, 0x7d, 0x1a, 0x4e, 0xe1, 0xcf, 0xa4, 0x2c, 0x89, 0x9a, + 0x44, 0x3f, 0xf0, 0xca, 0xfc, 0xe1, 0x67, 0x69, 0x3a, 0x4e, 0x79, 0x04, 0x82, 0x4e, 0x82, 0x17, + 0x0f, 0x91, 0xeb, 0xa2, 0xb6, 0x53, 0x31, 0x1b, 0x61, 0xea, 0x09, 0x4f, 0x0c, 0x32, 0xbf, 0xf2, + 0xc3, 0xa0, 0x17, 0x6f, 0x51, 0x64, 0xbe, 0xd1, 0xc8, 0xed, 0xc1, 0x43, 0x21, 0x51, 0x31, 0x00, + 0xe7, 0x17, 0x18, 0xe7, 0xa9, 0xae, 0xc8, 0xc0, 0xb4, 0xdb, 0xc0, 0xc7, 0x3d, 0x5f, 0x0e, 0xc0, + 0xf9, 0x8f, 0x18, 0xa7, 0xce, 0xb0, 0xdc, 0xa5, 0x98, 0xf1, 0x36, 0x4c, 0xbe, 0x82, 0xda, 0xfb, + 0xb6, 0xc3, 0x9e, 0xd2, 0x0c, 0x40, 0xf7, 0x45, 0x46, 0x37, 0xc1, 0x80, 0xe4, 0xb1, 0x0d, 0xe6, + 0xba, 0x01, 0xc9, 0x03, 0xb3, 0x8a, 0x06, 0xa0, 0xf8, 0x12, 0xa3, 0x18, 0xc1, 0xf2, 0x18, 0x9a, + 0x87, 0xf4, 0xa1, 0xcd, 0x56, 0xa6, 0x68, 0xf8, 0x97, 0x19, 0x3c, 0xc5, 0x31, 0x8c, 0xa2, 0x65, + 0xb7, 0x3a, 0x0d, 0xbc, 0x6c, 0x45, 0x53, 0x7c, 0x85, 0x53, 0x70, 0x0c, 0xa3, 0x38, 0x81, 0x59, + 0xdf, 0xe4, 0x14, 0x8e, 0x60, 0xcf, 0x67, 0x21, 0x65, 0x5b, 0x8d, 0x63, 0xdb, 0x1a, 0x44, 0x89, + 0xaf, 0x32, 0x06, 0x60, 0x10, 0x4c, 0x70, 0x13, 0x46, 0x07, 0x75, 0xc4, 0xaf, 0xff, 0x90, 0xa7, + 0x07, 0xf7, 0xc0, 0x2d, 0x98, 0xe0, 0x05, 0xaa, 0x6e, 0x5b, 0x03, 0x50, 0xfc, 0x06, 0xa3, 0x18, + 0x17, 0x60, 0xec, 0x32, 0x5c, 0xe4, 0xb8, 0x87, 0x68, 0x10, 0x92, 0xaf, 0xf1, 0xcb, 0x60, 0x10, + 0x66, 0xca, 0x7d, 0x64, 0x55, 0x8f, 0x06, 0x63, 0xf8, 0x3a, 0x37, 0x25, 0xc7, 0x60, 0x8a, 0x22, + 0x8c, 0x35, 0xcd, 0xb6, 0x73, 0x64, 0x36, 0x06, 0x72, 0xc7, 0x6f, 0x32, 0x8e, 0xb4, 0x07, 0x62, + 0x16, 0xe9, 0x58, 0x27, 0xa1, 0xf9, 0x2d, 0x6e, 0x11, 0x01, 0xc6, 0x52, 0xcf, 0x71, 0xc9, 0x23, + 0xad, 0x93, 0xb0, 0xfd, 0x63, 0x9e, 0x7a, 0x14, 0xbb, 0x29, 0x32, 0xde, 0x84, 0x51, 0xa7, 0xfe, + 0xfa, 0x40, 0x34, 0xff, 0x84, 0x7b, 0x9a, 0x00, 0x30, 0xf8, 0x0e, 0x3c, 0x1c, 0xba, 0x4c, 0x0c, + 0x40, 0xf6, 0x4f, 0x19, 0xd9, 0x74, 0xc8, 0x52, 0xc1, 0x4a, 0xc2, 0x49, 0x29, 0xff, 0x19, 0x2f, + 0x09, 0x48, 0xe2, 0xda, 0xc6, 0xf7, 0x0a, 0x8e, 0x79, 0x70, 0x32, 0xab, 0xfd, 0x73, 0x6e, 0x35, + 0x8a, 0x0d, 0x58, 0x6d, 0x17, 0xa6, 0x19, 0xe3, 0xc9, 0xfc, 0xfa, 0x0d, 0x5e, 0x58, 0x29, 0x7a, + 0x2f, 0xe8, 0xdd, 0x17, 0x61, 0xc6, 0x33, 0x27, 0x6f, 0x4a, 0x9d, 0x4a, 0xd3, 0x6c, 0x0d, 0xc0, + 0xfc, 0xdb, 0x8c, 0x99, 0x57, 0x7c, 0xaf, 0xab, 0x75, 0x36, 0xcd, 0x16, 0x26, 0x7f, 0x01, 0x32, + 0x9c, 0xbc, 0x63, 0xb5, 0x51, 0xd5, 0x3e, 0xb4, 0xea, 0xaf, 0xa3, 0xda, 0x00, 0xd4, 0xdf, 0x94, + 0x5c, 0xb5, 0x27, 0xc0, 0x31, 0xf3, 0x3a, 0x68, 0x5e, 0xaf, 0x52, 0xa9, 0x37, 0x5b, 0x76, 0xdb, + 0x8d, 0x60, 0xfc, 0x1d, 0xee, 0x29, 0x0f, 0xb7, 0x4e, 0x60, 0xb9, 0x12, 0x8c, 0x93, 0xc3, 0x41, + 0x43, 0xf2, 0x77, 0x19, 0xd1, 0x98, 0x8f, 0x62, 0x85, 0xa3, 0x6a, 0x37, 0x5b, 0x66, 0x7b, 0x90, + 0xfa, 0xf7, 0x2f, 0x78, 0xe1, 0x60, 0x10, 0x56, 0x38, 0xdc, 0xe3, 0x16, 0xc2, 0xab, 0xfd, 0x00, + 0x0c, 0xdf, 0xe2, 0x85, 0x83, 0x63, 0x18, 0x05, 0x6f, 0x18, 0x06, 0xa0, 0xf8, 0x97, 0x9c, 0x82, + 0x63, 0x30, 0xc5, 0xa7, 0xfc, 0x85, 0xb6, 0x8d, 0x0e, 0xeb, 0x8e, 0xdb, 0xa6, 0xad, 0x70, 0x7f, + 0xaa, 0xdf, 0xfb, 0x61, 0xb0, 0x09, 0x33, 0x04, 0x28, 0xae, 0x44, 0xec, 0x11, 0x2a, 0xb9, 0x53, + 0x8a, 0x56, 0xec, 0xf7, 0x79, 0x25, 0x12, 0x60, 0x58, 0x37, 0xa1, 0x43, 0xc4, 0x66, 0xaf, 0xe2, + 0xfb, 0x83, 0x01, 0xe8, 0xbe, 0x2d, 0x29, 0xb7, 0xc3, 0xb1, 0x98, 0x53, 0xe8, 0x7f, 0x3a, 0xd6, + 0xcb, 0xe8, 0x78, 0xa0, 0xe8, 0xfc, 0x57, 0x52, 0xff, 0xb3, 0x47, 0x91, 0xb4, 0x86, 0x4c, 0x48, + 0xfd, 0x94, 0x1e, 0xf5, 0xb2, 0x4e, 0xe6, 0x2f, 0xbf, 0xcf, 0xae, 0x37, 0xd8, 0x4e, 0xe5, 0x36, + 0x70, 0x90, 0x07, 0x9b, 0x9e, 0x68, 0xb2, 0xcf, 0xbe, 0xef, 0xc5, 0x79, 0xa0, 0xe7, 0xc9, 0xad, + 0xc1, 0x58, 0xa0, 0xe1, 0x89, 0xa6, 0xfa, 0x2b, 0x8c, 0x2a, 0x2d, 0xf6, 0x3b, 0xb9, 0x2b, 0x10, + 0xc7, 0xcd, 0x4b, 0x34, 0xfc, 0xaf, 0x32, 0x38, 0x11, 0xcf, 0x3d, 0x0d, 0x49, 0xde, 0xb4, 0x44, + 0x43, 0x7f, 0x91, 0x41, 0x3d, 0x08, 0x86, 0xf3, 0x86, 0x25, 0x1a, 0xfe, 0xd7, 0x38, 0x9c, 0x43, + 0x30, 0x7c, 0x70, 0x13, 0xbe, 0xf5, 0x37, 0xe2, 0x6c, 0xd1, 0xe1, 0xb6, 0xbb, 0x09, 0x23, 0xac, + 0x53, 0x89, 0x46, 0xff, 0x12, 0x3b, 0x39, 0x47, 0xe4, 0xae, 0x41, 0x62, 0x40, 0x83, 0xff, 0x4d, + 0x06, 0xa5, 0xf2, 0xb9, 0x22, 0xa4, 0x84, 0xee, 0x24, 0x1a, 0xfe, 0xb7, 0x18, 0x5c, 0x44, 0x61, + 0xd5, 0x59, 0x77, 0x12, 0x4d, 0xf0, 0xb7, 0xb9, 0xea, 0x0c, 0x81, 0xcd, 0xc6, 0x1b, 0x93, 0x68, + 0xf4, 0xdf, 0xe1, 0x56, 0xe7, 0x90, 0xdc, 0xb3, 0x30, 0xea, 0x2d, 0x36, 0xd1, 0xf8, 0xbf, 0xcb, + 0xf0, 0x3e, 0x06, 0x5b, 0x40, 0x58, 0xec, 0xa2, 0x29, 0xfe, 0x1e, 0xb7, 0x80, 0x80, 0xc2, 0x69, + 0x24, 0x37, 0x30, 0xd1, 0x4c, 0xbf, 0xcc, 0xd3, 0x48, 0xea, 0x5f, 0xb0, 0x37, 0x49, 0xcd, 0x8f, + 0xa6, 0xf8, 0xfb, 0xdc, 0x9b, 0x44, 0x1e, 0xab, 0x21, 0x77, 0x04, 0xd1, 0x1c, 0xff, 0x90, 0xab, + 0x21, 0x35, 0x04, 0xb9, 0x6d, 0xd0, 0xbb, 0xbb, 0x81, 0x68, 0xbe, 0xcf, 0x33, 0xbe, 0xc9, 0xae, + 0x66, 0x20, 0xf7, 0x3c, 0x4c, 0x87, 0x77, 0x02, 0xd1, 0xac, 0xbf, 0xf2, 0xbe, 0x74, 0xef, 0x26, + 0x36, 0x02, 0xb9, 0x5d, 0x7f, 0x49, 0x11, 0xbb, 0x80, 0x68, 0xda, 0x2f, 0xbc, 0x1f, 0x2c, 0xdc, + 0x62, 0x13, 0x90, 0xcb, 0x03, 0xf8, 0x0b, 0x70, 0x34, 0xd7, 0x17, 0x19, 0x97, 0x00, 0xc2, 0xa9, + 0xc1, 0xd6, 0xdf, 0x68, 0xfc, 0x97, 0x78, 0x6a, 0x30, 0x04, 0x4e, 0x0d, 0xbe, 0xf4, 0x46, 0xa3, + 0xbf, 0xcc, 0x53, 0x83, 0x43, 0x70, 0x64, 0x0b, 0xab, 0x5b, 0x34, 0xc3, 0x57, 0x79, 0x64, 0x0b, + 0xa8, 0x5c, 0x19, 0x26, 0xbb, 0x16, 0xc4, 0x68, 0xaa, 0x5f, 0x65, 0x54, 0x9a, 0xbc, 0x1e, 0x8a, + 0x8b, 0x17, 0x5b, 0x0c, 0xa3, 0xd9, 0x7e, 0x4d, 0x5a, 0xbc, 0xd8, 0x5a, 0x98, 0xbb, 0x09, 0x49, + 0xab, 0xd3, 0x68, 0xe0, 0xe4, 0xd1, 0xfb, 0xbf, 0x60, 0x97, 0xf9, 0x1f, 0x3f, 0x61, 0xd6, 0xe1, + 0x80, 0xdc, 0x15, 0x48, 0xa0, 0xe6, 0x3e, 0xaa, 0x45, 0x21, 0xff, 0xe7, 0x4f, 0x78, 0xc1, 0xc4, + 0xd2, 0xb9, 0x67, 0x01, 0xe8, 0xa3, 0x11, 0xb2, 0xed, 0x17, 0x81, 0xfd, 0x5f, 0x3f, 0x61, 0xaf, + 0xbe, 0xf8, 0x10, 0x9f, 0x80, 0xbe, 0x48, 0xd3, 0x9f, 0xe0, 0x87, 0x41, 0x02, 0xe2, 0x91, 0x1b, + 0x30, 0xf2, 0x92, 0x63, 0x5b, 0xae, 0x79, 0x18, 0x85, 0xfe, 0xdf, 0x0c, 0xcd, 0xe5, 0xb1, 0xc1, + 0x9a, 0x76, 0x1b, 0xb9, 0xe6, 0xa1, 0x13, 0x85, 0xfd, 0x3f, 0x0c, 0xeb, 0x01, 0x30, 0xb8, 0x6a, + 0x3a, 0xee, 0x20, 0xd7, 0xfd, 0x47, 0x1c, 0xcc, 0x01, 0x58, 0x69, 0xfc, 0xf9, 0x65, 0x74, 0x1c, + 0x85, 0xfd, 0x11, 0x57, 0x9a, 0xc9, 0xe7, 0x9e, 0x86, 0x51, 0xfc, 0x91, 0xbe, 0xcf, 0x16, 0x01, + 0xfe, 0xbf, 0x0c, 0xec, 0x23, 0xf0, 0x99, 0x1d, 0xb7, 0xe6, 0xd6, 0xa3, 0x8d, 0xfd, 0xc7, 0xcc, + 0xd3, 0x5c, 0x3e, 0x97, 0x87, 0x94, 0xe3, 0xd6, 0x6a, 0x1d, 0xd6, 0x9f, 0x46, 0xc0, 0xff, 0xdf, + 0x4f, 0xbc, 0x47, 0x16, 0x1e, 0x06, 0x7b, 0xfb, 0xd5, 0x97, 0xdd, 0x96, 0x4d, 0xb6, 0x39, 0xa2, + 0x18, 0xde, 0x67, 0x0c, 0x02, 0xa4, 0x50, 0x0a, 0x7f, 0x7c, 0x0b, 0xb7, 0xec, 0x5b, 0x36, 0x7d, + 0x70, 0xfb, 0x99, 0x6c, 0xf4, 0x13, 0x58, 0xf8, 0x6f, 0x0d, 0xb8, 0xd6, 0x53, 0x0c, 0x2f, 0xc5, + 0x17, 0xab, 0x76, 0x73, 0xdf, 0x76, 0x2e, 0xee, 0xdb, 0xee, 0xd1, 0x45, 0xf7, 0x08, 0xe1, 0x31, + 0xf6, 0xc8, 0x36, 0x8e, 0x3f, 0xcf, 0x9c, 0xec, 0x39, 0x2f, 0xd9, 0xc5, 0x2f, 0xd7, 0xf1, 0xa5, + 0x95, 0xc9, 0x46, 0x8a, 0x7e, 0x06, 0x86, 0xc9, 0xc5, 0x5e, 0x22, 0x9b, 0x95, 0x4a, 0x21, 0x7e, + 0xf7, 0x9d, 0xb9, 0x21, 0x83, 0x8d, 0x79, 0xb3, 0xcb, 0xe4, 0x49, 0x77, 0x2c, 0x30, 0xbb, 0xec, + 0xcd, 0x5e, 0xa6, 0x0f, 0xbb, 0x03, 0xb3, 0x97, 0xbd, 0xd9, 0x15, 0xf2, 0xd8, 0x5b, 0x0d, 0xcc, + 0xae, 0x78, 0xb3, 0x57, 0xc8, 0xd6, 0xce, 0x58, 0x60, 0xf6, 0x8a, 0x37, 0x7b, 0x95, 0x6c, 0xe8, + 0xc4, 0x03, 0xb3, 0x57, 0xbd, 0xd9, 0x6b, 0x64, 0x2f, 0x67, 0x32, 0x30, 0x7b, 0xcd, 0x9b, 0xbd, + 0x4e, 0xf6, 0x70, 0xf4, 0xc0, 0xec, 0x75, 0x6f, 0xf6, 0x06, 0x79, 0x41, 0x6a, 0x24, 0x30, 0x7b, + 0x43, 0x9f, 0x85, 0x11, 0x7a, 0xe5, 0x4b, 0x64, 0xc3, 0x7f, 0x82, 0x4d, 0xf3, 0x41, 0x7f, 0xfe, + 0x12, 0x79, 0x19, 0x6a, 0x38, 0x38, 0x7f, 0xc9, 0x9f, 0x5f, 0x26, 0xdf, 0xcb, 0xd0, 0x82, 0xf3, + 0xcb, 0xfe, 0xfc, 0xe5, 0xcc, 0x18, 0x79, 0x21, 0x2c, 0x30, 0x7f, 0xd9, 0x9f, 0x5f, 0xc9, 0x8c, + 0xe3, 0x8c, 0x09, 0xce, 0xaf, 0xf8, 0xf3, 0x57, 0x32, 0x13, 0x67, 0x95, 0xf9, 0x74, 0x70, 0xfe, + 0x4a, 0xf6, 0x17, 0x88, 0x7b, 0x2d, 0xdf, 0xbd, 0xd3, 0x41, 0xf7, 0x7a, 0x8e, 0x9d, 0x0e, 0x3a, + 0xd6, 0x73, 0xe9, 0x74, 0xd0, 0xa5, 0x9e, 0x33, 0xa7, 0x83, 0xce, 0xf4, 0xdc, 0x38, 0x1d, 0x74, + 0xa3, 0xe7, 0xc0, 0xe9, 0xa0, 0x03, 0x3d, 0xd7, 0x4d, 0x07, 0x5d, 0xe7, 0x39, 0x6d, 0x3a, 0xe8, + 0x34, 0xcf, 0x5d, 0xd3, 0x41, 0x77, 0x79, 0x8e, 0xca, 0x48, 0x8e, 0xf2, 0x5d, 0x94, 0x91, 0x5c, + 0xe4, 0x3b, 0x27, 0x23, 0x39, 0xc7, 0x77, 0x4b, 0x46, 0x72, 0x8b, 0xef, 0x90, 0x8c, 0xe4, 0x10, + 0xdf, 0x15, 0x19, 0xc9, 0x15, 0xbe, 0x13, 0x58, 0x8e, 0x19, 0xa8, 0x15, 0x92, 0x63, 0x6a, 0xdf, + 0x1c, 0x53, 0xfb, 0xe6, 0x98, 0xda, 0x37, 0xc7, 0xd4, 0xbe, 0x39, 0xa6, 0xf6, 0xcd, 0x31, 0xb5, + 0x6f, 0x8e, 0xa9, 0x7d, 0x73, 0x4c, 0xed, 0x9b, 0x63, 0x6a, 0xff, 0x1c, 0x53, 0x23, 0x72, 0x4c, + 0x8d, 0xc8, 0x31, 0x35, 0x22, 0xc7, 0xd4, 0x88, 0x1c, 0x53, 0x23, 0x72, 0x4c, 0xed, 0x99, 0x63, + 0xbe, 0x7b, 0xa7, 0x83, 0xee, 0x0d, 0xcd, 0x31, 0xb5, 0x47, 0x8e, 0xa9, 0x3d, 0x72, 0x4c, 0xed, + 0x91, 0x63, 0x6a, 0x8f, 0x1c, 0x53, 0x7b, 0xe4, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x1e, 0x39, 0xa6, + 0xf6, 0xca, 0x31, 0xb5, 0x67, 0x8e, 0xa9, 0x3d, 0x73, 0x4c, 0xed, 0x99, 0x63, 0x6a, 0xcf, 0x1c, + 0x53, 0x7b, 0xe6, 0x98, 0x2a, 0xe6, 0xd8, 0xbf, 0x56, 0x41, 0xa7, 0x39, 0xb6, 0x4d, 0x5e, 0x19, + 0x63, 0xae, 0x98, 0x95, 0x32, 0x6d, 0x18, 0xbb, 0x4e, 0xf3, 0x5d, 0x32, 0x2b, 0xe5, 0x5a, 0x70, + 0x7e, 0xd9, 0x9b, 0xe7, 0xd9, 0x16, 0x9c, 0xbf, 0xec, 0xcd, 0xf3, 0x7c, 0x0b, 0xce, 0xaf, 0x78, + 0xf3, 0x3c, 0xe3, 0x82, 0xf3, 0x57, 0xbc, 0x79, 0x9e, 0x73, 0xc1, 0xf9, 0xab, 0xde, 0x3c, 0xcf, + 0xba, 0xe0, 0xfc, 0x35, 0x6f, 0x9e, 0xe7, 0x5d, 0x70, 0xfe, 0xba, 0x37, 0xcf, 0x33, 0x2f, 0x38, + 0x7f, 0x43, 0x3f, 0x2b, 0xe7, 0x1e, 0x17, 0xf0, 0x5c, 0x7b, 0x56, 0xce, 0x3e, 0x49, 0xe2, 0x92, + 0x2f, 0xc1, 0xf3, 0x4f, 0x92, 0x58, 0xf6, 0x25, 0x78, 0x06, 0x4a, 0x12, 0x97, 0xb3, 0x9f, 0x23, + 0xee, 0xb3, 0x64, 0xf7, 0xcd, 0x48, 0xee, 0x8b, 0x09, 0xae, 0x9b, 0x91, 0x5c, 0x17, 0x13, 0xdc, + 0x36, 0x23, 0xb9, 0x2d, 0x26, 0xb8, 0x6c, 0x46, 0x72, 0x59, 0x4c, 0x70, 0xd7, 0x8c, 0xe4, 0xae, + 0x98, 0xe0, 0xaa, 0x19, 0xc9, 0x55, 0x31, 0xc1, 0x4d, 0x33, 0x92, 0x9b, 0x62, 0x82, 0x8b, 0x66, + 0x24, 0x17, 0xc5, 0x04, 0xf7, 0xcc, 0x48, 0xee, 0x89, 0x09, 0xae, 0x39, 0x23, 0xbb, 0x26, 0x26, + 0xba, 0xe5, 0x8c, 0xec, 0x96, 0x98, 0xe8, 0x92, 0x33, 0xb2, 0x4b, 0x62, 0xa2, 0x3b, 0xce, 0xc8, + 0xee, 0x88, 0x89, 0xae, 0xf8, 0x93, 0x18, 0xef, 0x08, 0x77, 0xdc, 0x76, 0xa7, 0xea, 0x3e, 0x50, + 0x47, 0xb8, 0x14, 0x68, 0x1f, 0x52, 0xcb, 0xfa, 0x22, 0x69, 0x58, 0xc5, 0x8e, 0x53, 0x5a, 0xc1, + 0x96, 0x02, 0x8d, 0x85, 0x80, 0xb0, 0xc2, 0x11, 0x2b, 0x0f, 0xd4, 0x1b, 0x2e, 0x05, 0xda, 0x8c, + 0x68, 0xfd, 0xae, 0x7f, 0xe8, 0x1d, 0xdb, 0x5b, 0x31, 0xde, 0xb1, 0x31, 0xf3, 0x9f, 0xb4, 0x63, + 0x5b, 0x88, 0x36, 0xb9, 0x67, 0xec, 0x85, 0x68, 0x63, 0x77, 0xad, 0x3a, 0x83, 0x76, 0x70, 0x0b, + 0xd1, 0xa6, 0xf5, 0x8c, 0xfa, 0xc1, 0xf6, 0x5b, 0x2c, 0x82, 0x0d, 0xd4, 0x0a, 0x89, 0xe0, 0x93, + 0xf6, 0x5b, 0x4b, 0x81, 0x52, 0x72, 0xd2, 0x08, 0x56, 0x4f, 0x1c, 0xc1, 0x27, 0xed, 0xbc, 0x96, + 0x02, 0xe5, 0xe5, 0xc4, 0x11, 0xfc, 0x21, 0xf4, 0x43, 0x2c, 0x82, 0x7d, 0xf3, 0x9f, 0xb4, 0x1f, + 0x5a, 0x88, 0x36, 0x79, 0x68, 0x04, 0xab, 0x27, 0x88, 0xe0, 0x41, 0xfa, 0xa3, 0x85, 0x68, 0xd3, + 0x86, 0x47, 0xf0, 0x03, 0x77, 0x33, 0x5f, 0x51, 0x60, 0xb2, 0x5c, 0xaf, 0x95, 0x9a, 0xfb, 0xa8, + 0x56, 0x43, 0x35, 0x66, 0xc7, 0xa5, 0x40, 0x25, 0xe8, 0xe1, 0xea, 0xb7, 0xdf, 0x99, 0xf3, 0x2d, + 0x7c, 0x05, 0x92, 0xd4, 0xa6, 0x4b, 0x4b, 0x99, 0xbb, 0x4a, 0x44, 0x85, 0xf3, 0x44, 0xf5, 0x73, + 0x1c, 0x76, 0x69, 0x29, 0xf3, 0x9f, 0x14, 0xa1, 0xca, 0x79, 0xc3, 0xd9, 0x5f, 0x26, 0x1a, 0x5a, + 0x0f, 0xac, 0xe1, 0xc5, 0x81, 0x34, 0x14, 0x74, 0x7b, 0xa4, 0x4b, 0x37, 0x41, 0xab, 0x0e, 0x4c, + 0x94, 0xeb, 0xb5, 0x32, 0xf9, 0x45, 0x80, 0x41, 0x54, 0xa2, 0x32, 0x52, 0x3d, 0x58, 0x0a, 0x84, + 0xa5, 0x88, 0xf0, 0x42, 0x3a, 0x58, 0x23, 0xb2, 0x75, 0x7c, 0x5a, 0x2b, 0x70, 0xda, 0x85, 0x5e, + 0xa7, 0xf5, 0x2b, 0xbb, 0x77, 0xc2, 0x85, 0x5e, 0x27, 0xf4, 0x73, 0xc8, 0x3b, 0xd5, 0x6b, 0x7c, + 0x71, 0xa6, 0x2f, 0x6e, 0xe9, 0x67, 0x20, 0xb6, 0x4e, 0xdf, 0x2b, 0x4f, 0x17, 0xd2, 0x58, 0xa9, + 0xef, 0xbe, 0x33, 0x17, 0xdf, 0xeb, 0xd4, 0x6b, 0x46, 0x6c, 0xbd, 0xa6, 0xdf, 0x86, 0xc4, 0xa7, + 0xd9, 0xf7, 0x52, 0xb1, 0xc0, 0x0a, 0x13, 0xf8, 0x78, 0xc4, 0x23, 0x26, 0x42, 0xbd, 0xb8, 0x57, + 0xb7, 0xdc, 0x4b, 0xcb, 0xd7, 0x0d, 0x4a, 0x91, 0xfd, 0x73, 0x00, 0xf4, 0x9c, 0xab, 0xa6, 0x73, + 0xa4, 0x97, 0x39, 0x33, 0x3d, 0xf5, 0xf5, 0xef, 0xbe, 0x33, 0xb7, 0x32, 0x08, 0xeb, 0x53, 0x35, + 0xd3, 0x39, 0x7a, 0xca, 0x3d, 0x6e, 0xa1, 0xc5, 0xc2, 0xb1, 0x8b, 0x1c, 0xce, 0xde, 0xe2, 0xab, + 0x1e, 0xbb, 0xae, 0x8c, 0x70, 0x5d, 0xc9, 0xc0, 0x35, 0xad, 0x05, 0xaf, 0x69, 0xe9, 0x7e, 0xaf, + 0xe7, 0x35, 0xbe, 0x48, 0x48, 0x96, 0x54, 0xa3, 0x2c, 0xa9, 0x3e, 0xa8, 0x25, 0x5b, 0xbc, 0x3e, + 0x4a, 0xd7, 0xaa, 0xf6, 0xbb, 0x56, 0xf5, 0x41, 0xae, 0xf5, 0xff, 0xd3, 0x6c, 0xf5, 0xf2, 0x69, + 0xcf, 0xa2, 0xef, 0xb4, 0xfe, 0xd9, 0x7a, 0x16, 0xf4, 0x81, 0x76, 0x01, 0xb9, 0xf8, 0xdd, 0x37, + 0xe7, 0x94, 0xec, 0x57, 0x62, 0xfc, 0xca, 0x69, 0x22, 0xdd, 0xdf, 0x95, 0xff, 0x59, 0xe9, 0xa9, + 0x3e, 0x0c, 0x0b, 0x7d, 0x59, 0x81, 0xe9, 0xae, 0x4a, 0x4e, 0xcd, 0xf4, 0xc1, 0x96, 0x73, 0xeb, + 0xa4, 0xe5, 0x9c, 0x29, 0xf8, 0xbb, 0x0a, 0x9c, 0x92, 0xca, 0x2b, 0x55, 0xef, 0xa2, 0xa4, 0xde, + 0x43, 0xdd, 0x67, 0x22, 0x82, 0x82, 0x76, 0xa2, 0x7b, 0x25, 0x80, 0xc0, 0xec, 0xf9, 0x7d, 0x45, + 0xf2, 0xfb, 0x19, 0x0f, 0x10, 0x62, 0x2e, 0x1e, 0x01, 0x4c, 0x6d, 0x1b, 0xe2, 0xbb, 0x6d, 0x84, + 0xf4, 0x59, 0x88, 0x6d, 0xb5, 0x99, 0x86, 0xe3, 0x14, 0xbf, 0xd5, 0x2e, 0xb4, 0x4d, 0xab, 0x7a, + 0x64, 0xc4, 0xb6, 0xda, 0xfa, 0x39, 0x50, 0xf3, 0xec, 0x3b, 0xf1, 0xa9, 0xe5, 0x09, 0x2a, 0x90, + 0xb7, 0x6a, 0x4c, 0x02, 0xcf, 0xe9, 0xb3, 0x10, 0xdf, 0x40, 0xe6, 0x01, 0x53, 0x02, 0xa8, 0x0c, + 0x1e, 0x31, 0xc8, 0x38, 0x3b, 0xe1, 0x0b, 0x90, 0xe4, 0xc4, 0xfa, 0x79, 0x8c, 0x38, 0x70, 0xd9, + 0x69, 0x19, 0x02, 0xab, 0xc3, 0x56, 0x2e, 0x32, 0xab, 0x5f, 0x80, 0x84, 0x51, 0x3f, 0x3c, 0x72, + 0xd9, 0xc9, 0xbb, 0xc5, 0xe8, 0x74, 0xf6, 0x0e, 0x8c, 0x7a, 0x1a, 0x7d, 0xc0, 0xd4, 0xab, 0xf4, + 0xd2, 0xf4, 0x19, 0x71, 0x3d, 0xe1, 0xcf, 0x2d, 0xe9, 0x90, 0x7e, 0x16, 0x92, 0x3b, 0x6e, 0xdb, + 0x2f, 0xfa, 0xbc, 0x23, 0xf5, 0x46, 0xb3, 0xbf, 0xa0, 0x40, 0x72, 0x15, 0xa1, 0x16, 0x31, 0xf8, + 0xe3, 0x10, 0x5f, 0xb5, 0x5f, 0xb5, 0x98, 0x82, 0x93, 0xcc, 0xa2, 0x78, 0x9a, 0xd9, 0x94, 0x4c, + 0xeb, 0x8f, 0x8b, 0x76, 0x9f, 0xf2, 0xec, 0x2e, 0xc8, 0x11, 0xdb, 0x67, 0x03, 0xb6, 0x67, 0x0e, + 0xc4, 0x42, 0x5d, 0xf6, 0xbf, 0x06, 0x29, 0xe1, 0x2c, 0xfa, 0x3c, 0x53, 0x23, 0x26, 0x03, 0x45, + 0x5b, 0x61, 0x89, 0x2c, 0x82, 0xb1, 0xc0, 0x89, 0x31, 0x54, 0x30, 0x71, 0x0f, 0x28, 0x31, 0xf3, + 0x42, 0xd0, 0xcc, 0xe1, 0xa2, 0xcc, 0xd4, 0x4b, 0xd4, 0x46, 0xc4, 0xdc, 0xe7, 0x69, 0x70, 0xf6, + 0x76, 0x22, 0xfe, 0x9c, 0x4d, 0x80, 0x5a, 0xae, 0x37, 0xb2, 0x4f, 0x03, 0xd0, 0x94, 0x2f, 0x59, + 0x9d, 0xa6, 0x94, 0x75, 0xe3, 0xdc, 0xc0, 0xbb, 0x47, 0x68, 0x17, 0x39, 0x44, 0x24, 0xd8, 0x4f, + 0xe1, 0x02, 0x03, 0x34, 0xc5, 0x08, 0xfe, 0xc9, 0x48, 0x7c, 0x68, 0x27, 0x86, 0x45, 0x33, 0x54, + 0xf4, 0x0e, 0x72, 0xf3, 0x96, 0xed, 0x1e, 0xa1, 0xb6, 0x84, 0x58, 0xd6, 0x2f, 0x07, 0x12, 0x76, + 0x7c, 0xf9, 0x11, 0x0f, 0xd1, 0x13, 0x74, 0x39, 0xfb, 0x0d, 0xa2, 0x20, 0x6e, 0x05, 0xba, 0x2e, + 0x50, 0x1d, 0xe0, 0x02, 0xf5, 0xab, 0x81, 0xfe, 0xad, 0x8f, 0x9a, 0xd2, 0xad, 0xe5, 0x8d, 0xc0, + 0x7d, 0x4e, 0x7f, 0x65, 0x83, 0xf7, 0x98, 0xdc, 0xa6, 0x5c, 0xe5, 0x27, 0x23, 0x55, 0xee, 0xd1, + 0xdd, 0x9e, 0xd4, 0xa6, 0xea, 0xa0, 0x36, 0xfd, 0xb6, 0xd7, 0x71, 0xd0, 0x1f, 0x1e, 0x21, 0x3f, + 0xd9, 0xa3, 0x7f, 0x3c, 0xd2, 0xf7, 0x39, 0xa5, 0xe8, 0xa9, 0xba, 0x32, 0xa8, 0xfb, 0x73, 0xb1, + 0x42, 0xc1, 0x53, 0xf7, 0xda, 0x09, 0x42, 0x20, 0x17, 0x2b, 0x16, 0xbd, 0xb2, 0x9d, 0xfc, 0xdc, + 0x9b, 0x73, 0xca, 0xd7, 0xdf, 0x9c, 0x1b, 0xca, 0xfe, 0xa6, 0x02, 0x93, 0x4c, 0x52, 0x08, 0xdc, + 0xa7, 0x24, 0xe5, 0x4f, 0xf3, 0x9a, 0x11, 0x66, 0x81, 0x9f, 0x5a, 0xf0, 0x7e, 0x47, 0x81, 0x4c, + 0x97, 0xae, 0xdc, 0xde, 0x4b, 0x03, 0xa9, 0x9c, 0x53, 0x4a, 0x3f, 0x7b, 0x9b, 0xdf, 0x81, 0xc4, + 0x6e, 0xbd, 0x89, 0xda, 0x78, 0x25, 0xc0, 0x1f, 0xa8, 0xca, 0x7c, 0x33, 0x87, 0x0e, 0xf1, 0x39, + 0xaa, 0x5c, 0x60, 0x6e, 0x59, 0xcf, 0x40, 0x7c, 0xd5, 0x74, 0x4d, 0xa2, 0x41, 0xda, 0xab, 0xaf, + 0xa6, 0x6b, 0x66, 0x2f, 0x43, 0x7a, 0xf3, 0x98, 0xbc, 0x88, 0x54, 0x23, 0xef, 0xa0, 0x04, 0xbb, + 0x3f, 0xde, 0xaf, 0x5e, 0x5a, 0x48, 0x24, 0x6b, 0xda, 0x5d, 0x25, 0x17, 0x27, 0xfa, 0xbc, 0x02, + 0xe3, 0x5b, 0x58, 0x6d, 0x82, 0x23, 0xb0, 0xb3, 0xa0, 0x6c, 0x06, 0x1b, 0x21, 0x91, 0xd5, 0x50, + 0x36, 0xa5, 0xf6, 0x51, 0xf5, 0xcc, 0x23, 0xb5, 0x6d, 0xaa, 0xd7, 0xb6, 0x2d, 0xc4, 0x93, 0xe3, + 0xda, 0xe4, 0x42, 0x3c, 0x09, 0xda, 0x18, 0x3b, 0xef, 0x7f, 0x50, 0x41, 0xa3, 0xad, 0xce, 0x2a, + 0x3a, 0xa8, 0x5b, 0x75, 0xb7, 0xbb, 0x5f, 0xf5, 0x34, 0xd6, 0x9f, 0x85, 0x51, 0x6c, 0xd2, 0x35, + 0xf6, 0xcb, 0x7d, 0xd8, 0xf4, 0xe7, 0x58, 0x8b, 0x22, 0x51, 0xb0, 0x01, 0x12, 0x3a, 0x3e, 0x46, + 0x5f, 0x03, 0xb5, 0x5c, 0xde, 0x64, 0x8b, 0xdb, 0x4a, 0x5f, 0x28, 0x7b, 0xd9, 0x87, 0x1d, 0xb1, + 0x31, 0xe7, 0xd0, 0xc0, 0x04, 0xfa, 0x0a, 0xc4, 0xca, 0x9b, 0xac, 0xe1, 0x3d, 0x3f, 0x08, 0x8d, + 0x11, 0x2b, 0x6f, 0xce, 0xfc, 0x1b, 0x05, 0xc6, 0x02, 0xa3, 0x7a, 0x16, 0xd2, 0x74, 0x40, 0xb8, + 0xdc, 0x61, 0x23, 0x30, 0xc6, 0x75, 0x8e, 0x3d, 0xa0, 0xce, 0x33, 0x79, 0x98, 0x90, 0xc6, 0xf5, + 0x45, 0xd0, 0xc5, 0x21, 0xa6, 0x04, 0xfd, 0xd5, 0xb0, 0x90, 0x99, 0xec, 0xa3, 0x00, 0xbe, 0x5d, + 0xbd, 0x1f, 0xbb, 0x2a, 0x97, 0x76, 0x76, 0x4b, 0xab, 0x9a, 0x92, 0xfd, 0x96, 0x02, 0x29, 0xd6, + 0xb6, 0x56, 0xed, 0x16, 0xd2, 0x0b, 0xa0, 0xe4, 0x59, 0x04, 0xdd, 0x9f, 0xde, 0x4a, 0x5e, 0xbf, + 0x08, 0x4a, 0x61, 0x70, 0x57, 0x2b, 0x05, 0x7d, 0x19, 0x94, 0x22, 0x73, 0xf0, 0x60, 0x9e, 0x51, + 0x8a, 0xd9, 0x3f, 0x56, 0x61, 0x4a, 0x6c, 0xa3, 0x79, 0x3d, 0x39, 0x17, 0xbc, 0x6f, 0xca, 0x8d, + 0x5e, 0x5a, 0xbe, 0xbc, 0xb2, 0x88, 0xff, 0xf1, 0x42, 0x32, 0x1b, 0xbc, 0x85, 0xca, 0x81, 0x27, + 0x72, 0xa9, 0xd7, 0x7b, 0x22, 0xb9, 0xb8, 0xc0, 0xd0, 0xf5, 0x9e, 0x48, 0x60, 0xb6, 0xeb, 0x3d, + 0x91, 0xc0, 0x6c, 0xd7, 0x7b, 0x22, 0x81, 0xd9, 0xae, 0xbd, 0x80, 0xc0, 0x6c, 0xd7, 0x7b, 0x22, + 0x81, 0xd9, 0xae, 0xf7, 0x44, 0x02, 0xb3, 0xdd, 0xef, 0x89, 0xb0, 0xe9, 0x9e, 0xef, 0x89, 0x04, + 0xe7, 0xbb, 0xdf, 0x13, 0x09, 0xce, 0x77, 0xbf, 0x27, 0x92, 0x8b, 0xbb, 0xed, 0x0e, 0xea, 0xbd, + 0xeb, 0x10, 0xc4, 0xf7, 0xbb, 0x09, 0xf4, 0x2b, 0xf0, 0x16, 0x4c, 0xd0, 0x07, 0x12, 0x45, 0xdb, + 0x72, 0xcd, 0xba, 0x85, 0xda, 0xfa, 0x27, 0x20, 0x4d, 0x87, 0xe8, 0x6d, 0x4e, 0xd8, 0x6d, 0x20, + 0x9d, 0x67, 0xf5, 0x36, 0x20, 0x9d, 0xfd, 0x93, 0x38, 0x4c, 0xd3, 0x81, 0xb2, 0xd9, 0x44, 0x81, + 0xb7, 0x8c, 0x2e, 0x48, 0x7b, 0x4a, 0xe3, 0x18, 0x7e, 0xef, 0x9d, 0x39, 0x3a, 0x9a, 0xf7, 0xa2, + 0xe9, 0x82, 0xb4, 0xbb, 0x14, 0x94, 0xf3, 0x17, 0xa0, 0x0b, 0xd2, 0x9b, 0x47, 0x41, 0x39, 0x6f, + 0xbd, 0xf1, 0xe4, 0xf8, 0x3b, 0x48, 0x41, 0xb9, 0x55, 0x2f, 0xca, 0x2e, 0x48, 0x6f, 0x23, 0x05, + 0xe5, 0x4a, 0x5e, 0xbc, 0x5d, 0x90, 0xf6, 0x9e, 0x82, 0x72, 0x6b, 0x5e, 0xe4, 0x5d, 0x90, 0x76, + 0xa1, 0x82, 0x72, 0xb7, 0xbc, 0x18, 0xbc, 0x20, 0xbd, 0xab, 0x14, 0x94, 0x7b, 0xce, 0x8b, 0xc6, + 0x0b, 0xd2, 0x5b, 0x4b, 0x41, 0xb9, 0x75, 0x2f, 0x2e, 0xe7, 0xe5, 0xf7, 0x97, 0x82, 0x82, 0xb7, + 0xfd, 0x08, 0x9d, 0x97, 0xdf, 0x64, 0x0a, 0x4a, 0x7e, 0xd2, 0x8f, 0xd5, 0x79, 0xf9, 0x9d, 0xa6, + 0xa0, 0xe4, 0x86, 0x1f, 0xb5, 0xf3, 0xf2, 0x5e, 0x59, 0x50, 0x72, 0xd3, 0x8f, 0xdf, 0x79, 0x79, + 0xd7, 0x2c, 0x28, 0x59, 0xf6, 0x23, 0x79, 0x5e, 0xde, 0x3f, 0x0b, 0x4a, 0x6e, 0xf9, 0x0f, 0xd1, + 0xff, 0x40, 0x0a, 0x3f, 0xe1, 0x2d, 0xa8, 0xac, 0x14, 0x7e, 0x10, 0x12, 0x7a, 0x52, 0x21, 0x13, + 0x64, 0xfc, 0xb0, 0xcb, 0x4a, 0x61, 0x07, 0x21, 0x21, 0x97, 0x95, 0x42, 0x0e, 0x42, 0xc2, 0x2d, + 0x2b, 0x85, 0x1b, 0x84, 0x84, 0x5a, 0x56, 0x0a, 0x35, 0x08, 0x09, 0xb3, 0xac, 0x14, 0x66, 0x10, + 0x12, 0x62, 0x59, 0x29, 0xc4, 0x20, 0x24, 0xbc, 0xb2, 0x52, 0x78, 0x41, 0x48, 0x68, 0x9d, 0x97, + 0x43, 0x0b, 0xc2, 0xc2, 0xea, 0xbc, 0x1c, 0x56, 0x10, 0x16, 0x52, 0x8f, 0xc9, 0x21, 0x35, 0x7a, + 0xef, 0x9d, 0xb9, 0x04, 0x1e, 0x12, 0xa2, 0xe9, 0xbc, 0x1c, 0x4d, 0x10, 0x16, 0x49, 0xe7, 0xe5, + 0x48, 0x82, 0xb0, 0x28, 0x3a, 0x2f, 0x47, 0x11, 0x84, 0x45, 0xd0, 0x5b, 0x72, 0x04, 0xf9, 0xef, + 0xf8, 0x64, 0xa5, 0x2d, 0xc5, 0xa8, 0x08, 0x52, 0x07, 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, + 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, 0x88, 0x20, + 0x75, 0x90, 0x08, 0x52, 0x07, 0x8a, 0x20, 0xb5, 0x57, 0x04, 0x9d, 0x97, 0xdf, 0x78, 0x80, 0xb0, + 0x82, 0x74, 0x5e, 0xde, 0xfa, 0x8c, 0x0e, 0x21, 0x75, 0xa0, 0x10, 0x52, 0x7b, 0x85, 0xd0, 0x1f, + 0xa8, 0x30, 0x15, 0x08, 0x21, 0xb6, 0x3f, 0xf4, 0x41, 0x55, 0xa0, 0xab, 0x03, 0xbc, 0x60, 0x11, + 0x16, 0x53, 0x57, 0x07, 0xd8, 0xa4, 0xee, 0x17, 0x67, 0xdd, 0x55, 0xa8, 0x34, 0x40, 0x15, 0x5a, + 0xf3, 0x62, 0xe8, 0xea, 0x00, 0x2f, 0x5e, 0x74, 0xc7, 0xde, 0xf5, 0x7e, 0x45, 0xe0, 0xb9, 0x81, + 0x8a, 0xc0, 0xfa, 0x40, 0x45, 0xe0, 0xb6, 0xef, 0xc1, 0x5f, 0x8c, 0xc1, 0x29, 0xdf, 0x83, 0xf4, + 0x13, 0xf9, 0x65, 0xad, 0xac, 0xb0, 0x45, 0xa5, 0xf3, 0x6d, 0x1b, 0xc1, 0x8d, 0xb1, 0xf5, 0x9a, + 0xbe, 0x1d, 0xdc, 0xac, 0xca, 0x9d, 0x74, 0x03, 0x47, 0xf0, 0x38, 0x7b, 0x18, 0x7a, 0x1e, 0xd4, + 0xf5, 0x9a, 0x43, 0xaa, 0x45, 0xd8, 0x69, 0x8b, 0x06, 0x9e, 0xd6, 0x0d, 0x18, 0x26, 0xe2, 0x0e, + 0x71, 0xef, 0x83, 0x9c, 0x78, 0xd5, 0x60, 0x4c, 0xd9, 0xb7, 0x14, 0x38, 0x1b, 0x08, 0xe5, 0x0f, + 0x66, 0xcb, 0xe0, 0xe6, 0x40, 0x5b, 0x06, 0x81, 0x04, 0xf1, 0xb7, 0x0f, 0x9e, 0xe8, 0xde, 0xa9, + 0x16, 0xb3, 0x44, 0xde, 0x4a, 0xf8, 0x4b, 0x30, 0xee, 0x5f, 0x01, 0xb9, 0x67, 0xbb, 0x12, 0xfd, + 0x34, 0x33, 0x2c, 0x35, 0xaf, 0x48, 0x4f, 0xd1, 0xfa, 0xc2, 0xbc, 0x6c, 0xcd, 0xe6, 0x60, 0xa2, + 0x1c, 0xfc, 0x4a, 0x54, 0xd4, 0xc3, 0x88, 0x24, 0x6e, 0xcd, 0xef, 0x7e, 0x75, 0x6e, 0x28, 0xfb, + 0x71, 0x48, 0x8b, 0xdf, 0x7a, 0x92, 0x80, 0xa3, 0x1c, 0x98, 0x8b, 0xbf, 0x8d, 0xa5, 0xff, 0x81, + 0x02, 0xa7, 0x45, 0xf1, 0xe7, 0xeb, 0xee, 0xd1, 0xba, 0x85, 0x7b, 0xfa, 0xa7, 0x21, 0x89, 0x98, + 0xe3, 0xd8, 0x8f, 0xe4, 0xb0, 0xfb, 0xc8, 0x50, 0xf1, 0x45, 0xf2, 0xaf, 0xe1, 0x41, 0xa4, 0x67, + 0x1c, 0xfc, 0xb4, 0xcb, 0x33, 0x8f, 0x43, 0x82, 0xf2, 0x07, 0xf5, 0x1a, 0x93, 0xf4, 0xfa, 0xf5, + 0x10, 0xbd, 0x48, 0x1c, 0xe9, 0xb7, 0x03, 0x7a, 0x09, 0xb7, 0xab, 0xa1, 0xe2, 0x8b, 0x3c, 0xf8, + 0x0a, 0x49, 0xdc, 0xff, 0x91, 0x88, 0x8a, 0x56, 0x72, 0x1e, 0x92, 0x25, 0x59, 0x26, 0x5c, 0xcf, + 0x55, 0x88, 0x97, 0xed, 0x1a, 0xf9, 0xf9, 0x1e, 0xf2, 0x7b, 0xd5, 0xcc, 0xc8, 0xec, 0xc7, 0xab, + 0x2f, 0x40, 0xb2, 0x78, 0x54, 0x6f, 0xd4, 0xda, 0xc8, 0x62, 0x7b, 0xf6, 0xec, 0x11, 0x3a, 0xc6, + 0x18, 0xde, 0x5c, 0xb6, 0x08, 0x93, 0x65, 0xdb, 0x2a, 0x1c, 0xbb, 0x62, 0xdd, 0x58, 0x94, 0x52, + 0x84, 0xed, 0xf9, 0x90, 0x6f, 0x89, 0x60, 0x81, 0x42, 0xe2, 0xbb, 0xef, 0xcc, 0x29, 0xbb, 0xde, + 0xf3, 0xf3, 0x4d, 0x78, 0x88, 0xa5, 0x4f, 0x17, 0xd5, 0x72, 0x14, 0xd5, 0x28, 0xdb, 0xa7, 0x16, + 0xe8, 0xd6, 0x31, 0x9d, 0x15, 0x4a, 0x77, 0x7f, 0x9a, 0xe1, 0xa6, 0xa8, 0xaf, 0x66, 0xea, 0x89, + 0x34, 0x0b, 0xa5, 0x5b, 0x8c, 0xa2, 0x93, 0x34, 0x7b, 0x0c, 0x46, 0xbd, 0x39, 0x21, 0x1a, 0xc4, + 0x4c, 0x59, 0x5e, 0xc8, 0x42, 0x4a, 0x48, 0x58, 0x3d, 0x01, 0x4a, 0x5e, 0x1b, 0xc2, 0xff, 0x15, + 0x34, 0x05, 0xff, 0x57, 0xd4, 0x62, 0x0b, 0x8f, 0xc3, 0x84, 0xf4, 0xfc, 0x12, 0xcf, 0xac, 0x6a, + 0x80, 0xff, 0x2b, 0x69, 0xa9, 0x99, 0xf8, 0xe7, 0x7e, 0x6d, 0x76, 0x68, 0xe1, 0x26, 0xe8, 0xdd, + 0x4f, 0x3a, 0xf5, 0x61, 0x88, 0xe5, 0x31, 0xe5, 0x43, 0x10, 0x2b, 0x14, 0x34, 0x65, 0x66, 0xe2, + 0xaf, 0x7f, 0xe9, 0x6c, 0xaa, 0x40, 0xbe, 0xd2, 0x7d, 0x07, 0xb9, 0x85, 0x02, 0x03, 0x3f, 0x03, + 0xa7, 0x43, 0x9f, 0x94, 0x62, 0x7c, 0xb1, 0x48, 0xf1, 0xab, 0xab, 0x5d, 0xf8, 0xd5, 0x55, 0x82, + 0x57, 0x72, 0x7c, 0xc7, 0x39, 0xaf, 0x87, 0x3c, 0x97, 0xcc, 0xd4, 0x84, 0x1d, 0xee, 0x7c, 0xee, + 0x19, 0x26, 0x5b, 0x08, 0x95, 0x45, 0x11, 0x3b, 0xd6, 0x85, 0x5c, 0x91, 0xe1, 0x8b, 0xa1, 0xf8, + 0x03, 0x69, 0x5b, 0x35, 0xb8, 0x42, 0x30, 0x92, 0xa2, 0xa7, 0xf0, 0x6a, 0x28, 0xc9, 0x91, 0xf0, + 0xb2, 0xfb, 0xaa, 0xa7, 0x70, 0x29, 0x54, 0xb6, 0x1e, 0xf1, 0xd2, 0x57, 0x29, 0x77, 0x91, 0x2d, + 0xf2, 0xf9, 0x4b, 0xfa, 0x69, 0x9e, 0xa3, 0x81, 0x0a, 0xcc, 0x0c, 0xc4, 0xa5, 0x72, 0x45, 0x06, + 0x28, 0xf4, 0x04, 0xf4, 0xb6, 0x12, 0x47, 0xe6, 0x9e, 0x63, 0x24, 0xc5, 0x9e, 0x24, 0x11, 0xa6, + 0xe2, 0xf0, 0xc2, 0xee, 0xdd, 0x77, 0x67, 0x87, 0xde, 0x7e, 0x77, 0x76, 0xe8, 0xbf, 0xbc, 0x3b, + 0x3b, 0xf4, 0xbd, 0x77, 0x67, 0x95, 0x1f, 0xbc, 0x3b, 0xab, 0xfc, 0xe8, 0xdd, 0x59, 0xe5, 0xc7, + 0xef, 0xce, 0x2a, 0x6f, 0xdc, 0x9b, 0x55, 0xbe, 0x7e, 0x6f, 0x56, 0xf9, 0xc6, 0xbd, 0x59, 0xe5, + 0xf7, 0xee, 0xcd, 0x2a, 0x6f, 0xdd, 0x9b, 0x55, 0xee, 0xde, 0x9b, 0x55, 0xde, 0xbe, 0x37, 0xab, + 0x7c, 0xef, 0xde, 0xac, 0xf2, 0x83, 0x7b, 0xb3, 0x43, 0x3f, 0xba, 0x37, 0xab, 0xfc, 0xf8, 0xde, + 0xec, 0xd0, 0x1b, 0xef, 0xcd, 0x0e, 0xbd, 0xf9, 0xde, 0xec, 0xd0, 0xd7, 0xdf, 0x9b, 0x55, 0xe0, + 0xbd, 0x15, 0x98, 0x65, 0xdf, 0x24, 0xb3, 0x50, 0x1d, 0x07, 0xdd, 0x45, 0xf7, 0x08, 0x91, 0x86, + 0xe0, 0x32, 0xff, 0x05, 0x30, 0x6f, 0xe0, 0x84, 0xdf, 0x29, 0x9b, 0xb9, 0xdf, 0x6f, 0xb0, 0x65, + 0xff, 0x6d, 0x02, 0x46, 0xf8, 0x93, 0xe0, 0xb0, 0x9f, 0x33, 0xbf, 0x02, 0xc9, 0xa3, 0x7a, 0xc3, + 0x6c, 0xd7, 0xdd, 0x63, 0xf6, 0x08, 0xf4, 0xe1, 0x45, 0x5f, 0x6d, 0xfe, 0xd0, 0xf4, 0xb9, 0x4e, + 0xd3, 0xee, 0xb4, 0x0d, 0x4f, 0x54, 0x3f, 0x0b, 0xe9, 0x23, 0x54, 0x3f, 0x3c, 0x72, 0x2b, 0x75, + 0xab, 0x52, 0x6d, 0x92, 0x4e, 0x79, 0xcc, 0x00, 0x3a, 0xb6, 0x6e, 0x15, 0x9b, 0xf8, 0x64, 0x35, + 0xd3, 0x35, 0xc9, 0x1d, 0x7a, 0xda, 0x20, 0x9f, 0xf5, 0x73, 0x90, 0x6e, 0x23, 0xa7, 0xd3, 0x70, + 0x2b, 0x55, 0xbb, 0x63, 0xb9, 0xa4, 0x97, 0x55, 0x8d, 0x14, 0x1d, 0x2b, 0xe2, 0x21, 0xfd, 0x31, + 0x18, 0x73, 0xdb, 0x1d, 0x54, 0x71, 0xaa, 0xb6, 0xeb, 0x34, 0x4d, 0x8b, 0xf4, 0xb2, 0x49, 0x23, + 0x8d, 0x07, 0x77, 0xd8, 0x18, 0xf9, 0x25, 0xfc, 0xaa, 0xdd, 0x46, 0xe4, 0x56, 0x3a, 0x66, 0xd0, + 0x03, 0x5d, 0x03, 0xf5, 0x65, 0x74, 0x4c, 0x6e, 0xd6, 0xe2, 0x06, 0xfe, 0xa8, 0x3f, 0x09, 0xc3, + 0xf4, 0x4f, 0xd9, 0x90, 0xce, 0x9a, 0x6c, 0x5c, 0x7b, 0x97, 0x46, 0x1f, 0xd0, 0x1a, 0x4c, 0x40, + 0xbf, 0x01, 0x23, 0x2e, 0x6a, 0xb7, 0xcd, 0xba, 0x45, 0x6e, 0x9c, 0x52, 0xcb, 0x73, 0x21, 0x66, + 0xd8, 0xa5, 0x12, 0xe4, 0x17, 0x81, 0x0d, 0x2e, 0xaf, 0x5f, 0x81, 0x34, 0x91, 0x5b, 0xae, 0xd0, + 0x3f, 0xf7, 0x93, 0xea, 0x19, 0xcb, 0x29, 0x2a, 0xc7, 0xf7, 0x09, 0x38, 0x8c, 0xfe, 0x1a, 0xe2, + 0x18, 0x39, 0xed, 0x63, 0x21, 0xa7, 0x25, 0x65, 0x77, 0x99, 0xb4, 0x8c, 0xf4, 0xd4, 0x8c, 0x87, + 0xfe, 0x5e, 0xe2, 0x26, 0xa4, 0x45, 0xbd, 0xb8, 0x19, 0x68, 0xeb, 0x43, 0xcc, 0xf0, 0x84, 0xff, + 0xa7, 0x14, 0x7a, 0x58, 0x81, 0xce, 0xe7, 0x62, 0xd7, 0x95, 0x99, 0x6d, 0xd0, 0xe4, 0xf3, 0x85, + 0x50, 0x5e, 0x08, 0x52, 0x6a, 0xe2, 0xc5, 0x92, 0xa7, 0xe4, 0x3e, 0x63, 0xf6, 0x59, 0x18, 0xa6, + 0xf1, 0xa3, 0xa7, 0x60, 0xc4, 0xff, 0xa1, 0xcd, 0x24, 0xc4, 0xb7, 0xf7, 0xca, 0x3b, 0xf4, 0x17, + 0x73, 0x77, 0x36, 0xf2, 0xdb, 0x3b, 0xbb, 0xeb, 0xc5, 0x4f, 0x6a, 0x31, 0x7d, 0x02, 0x52, 0x85, + 0xf5, 0x8d, 0x8d, 0x4a, 0x21, 0xbf, 0xbe, 0x51, 0xba, 0xa3, 0xa9, 0xd9, 0x59, 0x18, 0xa6, 0x7a, + 0x92, 0x5f, 0xfe, 0xeb, 0x58, 0xd6, 0x31, 0x6f, 0x1d, 0xc8, 0x41, 0xf6, 0x9b, 0x3a, 0x8c, 0xe4, + 0x1b, 0x8d, 0x4d, 0xb3, 0xe5, 0xe8, 0xcf, 0xc3, 0x24, 0xfd, 0x4d, 0x8e, 0x5d, 0x7b, 0x95, 0xfc, + 0x40, 0x25, 0x2e, 0x0c, 0x0a, 0xfb, 0x13, 0x12, 0xfe, 0x75, 0x33, 0xf1, 0xc5, 0x2e, 0x59, 0x6a, + 0xe0, 0x6e, 0x0e, 0x7d, 0x17, 0x34, 0x3e, 0xb8, 0xd6, 0xb0, 0x4d, 0x17, 0xf3, 0xc6, 0xd8, 0xef, + 0x47, 0xf6, 0xe6, 0xe5, 0xa2, 0x94, 0xb6, 0x8b, 0x41, 0xff, 0x04, 0x24, 0xd7, 0x2d, 0xf7, 0xf2, + 0x32, 0x66, 0xe3, 0x7f, 0x9e, 0xa9, 0x9b, 0x8d, 0x8b, 0x50, 0x16, 0x0f, 0xc1, 0xd0, 0x57, 0x57, + 0x30, 0x3a, 0xde, 0x0f, 0x4d, 0x44, 0x7c, 0x34, 0x39, 0xd4, 0x9f, 0x85, 0x51, 0x7c, 0x67, 0x42, + 0x4f, 0x9e, 0xe0, 0x6d, 0x6b, 0x17, 0xdc, 0x93, 0xa1, 0x78, 0x1f, 0xc3, 0x09, 0xe8, 0xf9, 0x87, + 0xfb, 0x12, 0x08, 0x0a, 0xf8, 0x18, 0x4c, 0xb0, 0xe3, 0x69, 0x30, 0xd2, 0x93, 0x60, 0x47, 0xd2, + 0x60, 0x47, 0xd4, 0x60, 0xc7, 0xd3, 0x20, 0xd9, 0x97, 0x40, 0xd4, 0xc0, 0x3b, 0xd6, 0x0b, 0x00, + 0x6b, 0xf5, 0xd7, 0x50, 0x8d, 0xaa, 0x40, 0xff, 0x78, 0x53, 0x36, 0x84, 0xc1, 0x17, 0xa2, 0x14, + 0x02, 0x4a, 0x2f, 0x41, 0x6a, 0xe7, 0xc0, 0x27, 0x81, 0xae, 0x3c, 0xf6, 0xd4, 0x38, 0x90, 0x58, + 0x44, 0x9c, 0xa7, 0x0a, 0xbd, 0x98, 0x54, 0x7f, 0x55, 0x84, 0xab, 0x11, 0x50, 0xbe, 0x2a, 0x94, + 0x24, 0x1d, 0xa1, 0x8a, 0xc0, 0x22, 0xe2, 0x70, 0x31, 0x2c, 0xd8, 0x36, 0x96, 0x64, 0x55, 0x69, + 0x2e, 0x84, 0x82, 0x49, 0xb0, 0x62, 0xc8, 0x8e, 0x88, 0x47, 0x48, 0x90, 0x63, 0xf0, 0x78, 0x6f, + 0x8f, 0x70, 0x19, 0xee, 0x11, 0x7e, 0x2c, 0xe6, 0x19, 0x79, 0x9b, 0x15, 0xf3, 0x4c, 0x44, 0xe6, + 0x19, 0x17, 0x95, 0xf2, 0x8c, 0x0f, 0xeb, 0x9f, 0x82, 0x09, 0x3e, 0x86, 0xcb, 0x13, 0x26, 0xd5, + 0xd8, 0x9f, 0xb7, 0xeb, 0x4d, 0xca, 0x24, 0x29, 0xa7, 0x8c, 0xd7, 0xcb, 0x30, 0xce, 0x87, 0x36, + 0x1d, 0x72, 0xb9, 0x93, 0xec, 0x2f, 0x97, 0xf4, 0x66, 0xa4, 0x82, 0x94, 0x50, 0x42, 0xcf, 0xac, + 0xc2, 0x74, 0x78, 0x35, 0x12, 0xcb, 0xef, 0x28, 0x2d, 0xbf, 0xa7, 0xc4, 0xf2, 0xab, 0x88, 0xe5, + 0xbb, 0x08, 0xa7, 0x43, 0x6b, 0x4f, 0x14, 0x49, 0x4c, 0x24, 0xb9, 0x09, 0x63, 0x81, 0x92, 0x23, + 0x82, 0x13, 0x21, 0xe0, 0x44, 0x37, 0xd8, 0x0f, 0xad, 0x90, 0xd5, 0x23, 0x00, 0x56, 0x45, 0xf0, + 0x27, 0x60, 0x3c, 0x58, 0x6f, 0x44, 0xf4, 0x58, 0x08, 0x7a, 0x2c, 0x04, 0x1d, 0x7e, 0xee, 0x78, + 0x08, 0x3a, 0x2e, 0xa1, 0x77, 0x7a, 0x9e, 0x7b, 0x32, 0x04, 0x3d, 0x19, 0x82, 0x0e, 0x3f, 0xb7, + 0x1e, 0x82, 0xd6, 0x45, 0xf4, 0xd3, 0x30, 0x21, 0x95, 0x18, 0x11, 0x3e, 0x12, 0x02, 0x1f, 0x11, + 0xe1, 0xcf, 0x80, 0x26, 0x17, 0x17, 0x11, 0x3f, 0x11, 0x82, 0x9f, 0x08, 0x3b, 0x7d, 0xb8, 0xf6, + 0xc3, 0x21, 0xf0, 0xe1, 0xd0, 0xd3, 0x87, 0xe3, 0xb5, 0x10, 0xbc, 0x26, 0xe2, 0x73, 0x90, 0x16, + 0xab, 0x89, 0x88, 0x4d, 0x86, 0x60, 0x93, 0xb2, 0xdd, 0x03, 0xc5, 0x24, 0x2a, 0xd2, 0x47, 0x7b, + 0xa4, 0x4b, 0xa0, 0x84, 0x44, 0x91, 0xa4, 0x45, 0x92, 0x4f, 0xc3, 0xa9, 0xb0, 0x92, 0x11, 0xc2, + 0x31, 0x2f, 0x72, 0x8c, 0xe3, 0x1e, 0xd1, 0x6f, 0xf6, 0xcc, 0x96, 0xd4, 0x38, 0xcd, 0xbc, 0x08, + 0x53, 0x21, 0x85, 0x23, 0x84, 0x76, 0x31, 0xd8, 0x8d, 0x65, 0x04, 0x5a, 0x52, 0x04, 0xea, 0xd6, + 0xe1, 0xb6, 0x5d, 0xb7, 0x5c, 0xb1, 0x2b, 0xfb, 0xd6, 0x14, 0x8c, 0xb3, 0xf2, 0xb4, 0xd5, 0xae, + 0xa1, 0x36, 0xaa, 0xe9, 0x7f, 0xa1, 0x77, 0xef, 0xb4, 0xd4, 0x5d, 0xd4, 0x18, 0xea, 0x04, 0x2d, + 0xd4, 0x8b, 0x3d, 0x5b, 0xa8, 0x8b, 0xd1, 0xf4, 0x51, 0x9d, 0x54, 0xb1, 0xab, 0x93, 0x7a, 0xa2, + 0x37, 0x69, 0xaf, 0x86, 0xaa, 0xd8, 0xd5, 0x50, 0xf5, 0x27, 0x09, 0xed, 0xab, 0xd6, 0xba, 0xfb, + 0xaa, 0xf9, 0xde, 0x2c, 0xbd, 0xdb, 0xab, 0xb5, 0xee, 0xf6, 0x2a, 0x82, 0x27, 0xbc, 0xcb, 0x5a, + 0xeb, 0xee, 0xb2, 0xfa, 0xf0, 0xf4, 0x6e, 0xb6, 0xd6, 0xba, 0x9b, 0xad, 0x08, 0x9e, 0xf0, 0x9e, + 0x6b, 0x3d, 0xa4, 0xe7, 0x7a, 0xb2, 0x37, 0x51, 0xbf, 0xd6, 0x6b, 0x23, 0xac, 0xf5, 0x5a, 0xe8, + 0xa3, 0x54, 0xdf, 0x0e, 0x6c, 0x3d, 0xa4, 0x03, 0x8b, 0x52, 0xac, 0x47, 0x23, 0xb6, 0x11, 0xd6, + 0x88, 0x45, 0x2a, 0xd6, 0xab, 0x1f, 0xfb, 0x39, 0xb9, 0x1f, 0xbb, 0xd0, 0x9b, 0x29, 0xbc, 0x2d, + 0x5b, 0xeb, 0x6e, 0xcb, 0xe6, 0xa3, 0x72, 0x2e, 0xac, 0x3b, 0x7b, 0xb1, 0x67, 0x77, 0x36, 0x40, + 0x0a, 0x47, 0x35, 0x69, 0x2f, 0xf4, 0x6a, 0xd2, 0x16, 0xa3, 0xb9, 0xfb, 0xf7, 0x6a, 0x7b, 0x3d, + 0x7a, 0xb5, 0xa7, 0xa2, 0x89, 0x3f, 0x6a, 0xd9, 0x3e, 0x6a, 0xd9, 0x3e, 0x6a, 0xd9, 0x3e, 0x6a, + 0xd9, 0x7e, 0xf6, 0x2d, 0x5b, 0x2e, 0xfe, 0xf9, 0xaf, 0xce, 0x29, 0xd9, 0xff, 0xac, 0x7a, 0x7f, + 0x6c, 0xed, 0xf9, 0xba, 0x7b, 0x84, 0xcb, 0xdb, 0x26, 0xa4, 0xc9, 0x8f, 0xff, 0x36, 0xcd, 0x56, + 0xab, 0x6e, 0x1d, 0xb2, 0x9e, 0x6d, 0xa1, 0xfb, 0x51, 0x22, 0x03, 0x90, 0x3f, 0x34, 0xb3, 0x49, + 0x85, 0xd9, 0x72, 0x63, 0xf9, 0x23, 0xfa, 0x6d, 0x48, 0x35, 0x9d, 0x43, 0x8f, 0x2d, 0xd6, 0xb5, + 0x10, 0x4a, 0x6c, 0xf4, 0x4a, 0x7d, 0x32, 0x68, 0x7a, 0x03, 0x58, 0xb5, 0xfd, 0x63, 0xd7, 0x57, + 0x4d, 0x8d, 0x52, 0x0d, 0xfb, 0x34, 0xa8, 0xda, 0xbe, 0x3f, 0x82, 0xc3, 0x56, 0xd6, 0x3d, 0xaa, + 0xd2, 0x05, 0x82, 0xe7, 0x79, 0x98, 0x90, 0xb4, 0x0d, 0xc9, 0xf9, 0xfb, 0xf0, 0x0d, 0x56, 0x4c, + 0xd6, 0x3c, 0x2a, 0x27, 0xc4, 0x80, 0xcc, 0x3e, 0x0a, 0x63, 0x01, 0x6e, 0x3d, 0x0d, 0xca, 0x01, + 0xfb, 0x2a, 0xa5, 0x72, 0x90, 0xfd, 0x8a, 0x02, 0x29, 0xf6, 0x1a, 0xc1, 0xb6, 0x59, 0x6f, 0xeb, + 0xcf, 0x41, 0xbc, 0xc1, 0xbf, 0xce, 0x74, 0xbf, 0x5f, 0x9d, 0x25, 0x0c, 0xfa, 0x1a, 0x24, 0xda, + 0xde, 0xd7, 0x9d, 0xee, 0xeb, 0xfb, 0xb0, 0x04, 0x9e, 0xbd, 0xab, 0xc0, 0x24, 0x7b, 0xcb, 0xd5, + 0x61, 0x2f, 0x3f, 0x9b, 0xad, 0x99, 0x6f, 0x2a, 0x30, 0xea, 0x1d, 0xe9, 0xfb, 0x30, 0xee, 0x1d, + 0xd0, 0x17, 0xec, 0x69, 0xa4, 0xe6, 0x04, 0x0b, 0x77, 0x71, 0x2c, 0x86, 0x7c, 0xa2, 0x1b, 0x51, + 0x74, 0x4d, 0x0e, 0x0e, 0xce, 0xe4, 0x61, 0x2a, 0x44, 0xec, 0x24, 0x0b, 0x72, 0xf6, 0x1c, 0x8c, + 0x96, 0x6d, 0x97, 0xfe, 0x6a, 0x8e, 0x7e, 0x4a, 0xd8, 0x55, 0x28, 0xc4, 0xb4, 0x21, 0x02, 0x5e, + 0x38, 0x07, 0x23, 0x2c, 0xfb, 0xf5, 0x61, 0x88, 0x6d, 0xe6, 0xb5, 0x21, 0xf2, 0x7f, 0x41, 0x53, + 0xc8, 0xff, 0x45, 0x2d, 0x56, 0xd8, 0xb8, 0x8f, 0x5d, 0xa6, 0xa1, 0xb7, 0xef, 0xcd, 0x0e, 0x85, + 0xed, 0x32, 0xed, 0x0f, 0x53, 0xf3, 0xfc, 0x69, 0x00, 0x00, 0x00, 0xff, 0xff, 0x46, 0x57, 0xac, + 0xcc, 0x69, 0x83, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -4078,6 +4083,9 @@ return dAtA } func (m *Message) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -4151,6 +4159,9 @@ } func (m *Nested) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Bunny) @@ -4164,6 +4175,9 @@ } func (m *AllMaps) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -4318,6 +4332,9 @@ } func (m *AllMapsOrdered) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -4472,6 +4489,9 @@ } func (m *MessageWithMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NameMapping) > 0 { @@ -4514,6 +4534,9 @@ } func (m *FloatingPoint) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F != 0 { @@ -4526,6 +4549,9 @@ } func (m *Uint128Pair) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -4541,6 +4567,9 @@ } func (m *ContainsNestedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -4550,6 +4579,9 @@ } func (m *ContainsNestedMap_NestedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NestedMapField) > 0 { @@ -4567,6 +4599,9 @@ } func (m *NotPacked) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Key) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/combos/unmarshaler/theproto3.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/combos/unmarshaler/theproto3.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/combos/unmarshaler/theproto3.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/combos/unmarshaler/theproto3.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -518,506 +518,511 @@ func Theproto3Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 7980 bytes of a gzipped FileDescriptorSet + // 8063 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x70, 0x23, 0xd7, - 0x99, 0x1e, 0x1b, 0x0d, 0x90, 0xe0, 0x0f, 0x90, 0x6c, 0x36, 0x67, 0x28, 0x88, 0x1e, 0x91, 0x33, - 0xd0, 0x68, 0x44, 0xd1, 0x16, 0x87, 0xc3, 0xe1, 0xdc, 0x30, 0x96, 0xb4, 0xb8, 0x71, 0xc4, 0x31, - 0x09, 0xd2, 0x4d, 0xd2, 0xd2, 0x58, 0x49, 0x50, 0x4d, 0xe0, 0x90, 0x84, 0x04, 0x74, 0x63, 0xd1, - 0x0d, 0x49, 0x54, 0xa5, 0x52, 0xca, 0x3a, 0xd9, 0x78, 0x93, 0xca, 0x75, 0x93, 0x8a, 0xd7, 0xf1, - 0x45, 0x4e, 0xca, 0xb1, 0x77, 0x73, 0xf3, 0x7a, 0x37, 0xce, 0xee, 0x56, 0x2a, 0xab, 0x3c, 0x38, - 0x99, 0xbc, 0xa4, 0xbc, 0xc9, 0x4b, 0xca, 0x95, 0x52, 0x59, 0x63, 0xa7, 0xd6, 0x49, 0x9c, 0xac, - 0xb3, 0x71, 0x55, 0x5c, 0xe5, 0x7d, 0x48, 0x9d, 0x5b, 0xf7, 0x39, 0x8d, 0x06, 0x1a, 0x1c, 0x49, - 0xf6, 0x3e, 0xf8, 0x65, 0x06, 0x7d, 0xce, 0xff, 0x7d, 0xfd, 0xf7, 0x7f, 0x3b, 0x7f, 0xf7, 0x69, - 0x80, 0xf0, 0x47, 0xb7, 0xe0, 0xfc, 0x91, 0x6d, 0x1f, 0x35, 0xd1, 0xe5, 0x76, 0xc7, 0x76, 0xed, - 0x83, 0xee, 0xe1, 0xe5, 0x3a, 0x72, 0x6a, 0x9d, 0x46, 0xdb, 0xb5, 0x3b, 0xcb, 0x64, 0x4c, 0x9f, - 0xa2, 0x12, 0xcb, 0x5c, 0x22, 0xbb, 0x05, 0xd3, 0xeb, 0x8d, 0x26, 0x2a, 0x79, 0x82, 0xbb, 0xc8, - 0xd5, 0x6f, 0x42, 0xfc, 0xb0, 0xd1, 0x44, 0x19, 0xe5, 0xbc, 0xba, 0x98, 0x5a, 0xbd, 0xb8, 0x1c, - 0x00, 0x2d, 0xcb, 0x88, 0x1d, 0x3c, 0x6c, 0x10, 0x44, 0xf6, 0x7b, 0x71, 0x98, 0x09, 0x99, 0xd5, - 0x75, 0x88, 0x5b, 0x66, 0x0b, 0x33, 0x2a, 0x8b, 0xe3, 0x06, 0xf9, 0xac, 0x67, 0x60, 0xac, 0x6d, - 0xd6, 0x5e, 0x31, 0x8f, 0x50, 0x26, 0x46, 0x86, 0xf9, 0xa1, 0x3e, 0x0f, 0x50, 0x47, 0x6d, 0x64, - 0xd5, 0x91, 0x55, 0x3b, 0xc9, 0xa8, 0xe7, 0xd5, 0xc5, 0x71, 0x43, 0x18, 0xd1, 0x3f, 0x0c, 0xd3, - 0xed, 0xee, 0x41, 0xb3, 0x51, 0xab, 0x0a, 0x62, 0x70, 0x5e, 0x5d, 0x4c, 0x18, 0x1a, 0x9d, 0x28, - 0xf9, 0xc2, 0x4f, 0xc2, 0xd4, 0x6b, 0xc8, 0x7c, 0x45, 0x14, 0x4d, 0x11, 0xd1, 0x49, 0x3c, 0x2c, - 0x08, 0x16, 0x21, 0xdd, 0x42, 0x8e, 0x63, 0x1e, 0xa1, 0xaa, 0x7b, 0xd2, 0x46, 0x99, 0x38, 0xb9, - 0xfa, 0xf3, 0x3d, 0x57, 0x1f, 0xbc, 0xf2, 0x14, 0x43, 0xed, 0x9d, 0xb4, 0x91, 0x9e, 0x87, 0x71, - 0x64, 0x75, 0x5b, 0x94, 0x21, 0xd1, 0xc7, 0x7e, 0x65, 0xab, 0xdb, 0x0a, 0xb2, 0x24, 0x31, 0x8c, - 0x51, 0x8c, 0x39, 0xa8, 0xf3, 0x6a, 0xa3, 0x86, 0x32, 0xa3, 0x84, 0xe0, 0xc9, 0x1e, 0x82, 0x5d, - 0x3a, 0x1f, 0xe4, 0xe0, 0x38, 0xbd, 0x08, 0xe3, 0xe8, 0x75, 0x17, 0x59, 0x4e, 0xc3, 0xb6, 0x32, - 0x63, 0x84, 0xe4, 0x89, 0x10, 0x2f, 0xa2, 0x66, 0x3d, 0x48, 0xe1, 0xe3, 0xf4, 0xeb, 0x30, 0x66, - 0xb7, 0xdd, 0x86, 0x6d, 0x39, 0x99, 0xe4, 0x79, 0x65, 0x31, 0xb5, 0x7a, 0x2e, 0x34, 0x10, 0xb6, - 0xa9, 0x8c, 0xc1, 0x85, 0xf5, 0x0d, 0xd0, 0x1c, 0xbb, 0xdb, 0xa9, 0xa1, 0x6a, 0xcd, 0xae, 0xa3, - 0x6a, 0xc3, 0x3a, 0xb4, 0x33, 0xe3, 0x84, 0x60, 0xa1, 0xf7, 0x42, 0x88, 0x60, 0xd1, 0xae, 0xa3, - 0x0d, 0xeb, 0xd0, 0x36, 0x26, 0x1d, 0xe9, 0x58, 0x9f, 0x85, 0x51, 0xe7, 0xc4, 0x72, 0xcd, 0xd7, - 0x33, 0x69, 0x12, 0x21, 0xec, 0x28, 0xfb, 0xbb, 0xa3, 0x30, 0x35, 0x4c, 0x88, 0xdd, 0x86, 0xc4, - 0x21, 0xbe, 0xca, 0x4c, 0xec, 0x34, 0x36, 0xa0, 0x18, 0xd9, 0x88, 0xa3, 0x0f, 0x69, 0xc4, 0x3c, - 0xa4, 0x2c, 0xe4, 0xb8, 0xa8, 0x4e, 0x23, 0x42, 0x1d, 0x32, 0xa6, 0x80, 0x82, 0x7a, 0x43, 0x2a, - 0xfe, 0x50, 0x21, 0xf5, 0x22, 0x4c, 0x79, 0x2a, 0x55, 0x3b, 0xa6, 0x75, 0xc4, 0x63, 0xf3, 0x72, - 0x94, 0x26, 0xcb, 0x65, 0x8e, 0x33, 0x30, 0xcc, 0x98, 0x44, 0xd2, 0xb1, 0x5e, 0x02, 0xb0, 0x2d, - 0x64, 0x1f, 0x56, 0xeb, 0xa8, 0xd6, 0xcc, 0x24, 0xfb, 0x58, 0x69, 0x1b, 0x8b, 0xf4, 0x58, 0xc9, - 0xa6, 0xa3, 0xb5, 0xa6, 0x7e, 0xcb, 0x0f, 0xb5, 0xb1, 0x3e, 0x91, 0xb2, 0x45, 0x93, 0xac, 0x27, - 0xda, 0xf6, 0x61, 0xb2, 0x83, 0x70, 0xdc, 0xa3, 0x3a, 0xbb, 0xb2, 0x71, 0xa2, 0xc4, 0x72, 0xe4, - 0x95, 0x19, 0x0c, 0x46, 0x2f, 0x6c, 0xa2, 0x23, 0x1e, 0xea, 0x8f, 0x83, 0x37, 0x50, 0x25, 0x61, - 0x05, 0xa4, 0x0a, 0xa5, 0xf9, 0x60, 0xc5, 0x6c, 0xa1, 0xb9, 0x37, 0x60, 0x52, 0x36, 0x8f, 0x7e, - 0x06, 0x12, 0x8e, 0x6b, 0x76, 0x5c, 0x12, 0x85, 0x09, 0x83, 0x1e, 0xe8, 0x1a, 0xa8, 0xc8, 0xaa, - 0x93, 0x2a, 0x97, 0x30, 0xf0, 0x47, 0xfd, 0x17, 0xfc, 0x0b, 0x56, 0xc9, 0x05, 0x5f, 0xea, 0xf5, - 0xa8, 0xc4, 0x1c, 0xbc, 0xee, 0xb9, 0x1b, 0x30, 0x21, 0x5d, 0xc0, 0xb0, 0xa7, 0xce, 0xfe, 0x79, - 0x38, 0x1b, 0x4a, 0xad, 0xbf, 0x08, 0x67, 0xba, 0x56, 0xc3, 0x72, 0x51, 0xa7, 0xdd, 0x41, 0x38, - 0x62, 0xe9, 0xa9, 0x32, 0x7f, 0x38, 0xd6, 0x27, 0xe6, 0xf6, 0x45, 0x69, 0xca, 0x62, 0xcc, 0x74, - 0x7b, 0x07, 0x97, 0xc6, 0x93, 0xdf, 0x1f, 0xd3, 0xde, 0x7c, 0xf3, 0xcd, 0x37, 0x63, 0xd9, 0xcf, - 0x8c, 0xc2, 0x99, 0xb0, 0x9c, 0x09, 0x4d, 0xdf, 0x59, 0x18, 0xb5, 0xba, 0xad, 0x03, 0xd4, 0x21, - 0x46, 0x4a, 0x18, 0xec, 0x48, 0xcf, 0x43, 0xa2, 0x69, 0x1e, 0xa0, 0x66, 0x26, 0x7e, 0x5e, 0x59, - 0x9c, 0x5c, 0xfd, 0xf0, 0x50, 0x59, 0xb9, 0xbc, 0x89, 0x21, 0x06, 0x45, 0xea, 0xcf, 0x42, 0x9c, - 0x95, 0x68, 0xcc, 0xb0, 0x34, 0x1c, 0x03, 0xce, 0x25, 0x83, 0xe0, 0xf4, 0x0f, 0xc1, 0x38, 0xfe, - 0x9f, 0xc6, 0xc6, 0x28, 0xd1, 0x39, 0x89, 0x07, 0x70, 0x5c, 0xe8, 0x73, 0x90, 0x24, 0x69, 0x52, - 0x47, 0x7c, 0x69, 0xf3, 0x8e, 0x71, 0x60, 0xd5, 0xd1, 0xa1, 0xd9, 0x6d, 0xba, 0xd5, 0x57, 0xcd, - 0x66, 0x17, 0x91, 0x80, 0x1f, 0x37, 0xd2, 0x6c, 0xf0, 0x13, 0x78, 0x4c, 0x5f, 0x80, 0x14, 0xcd, - 0xaa, 0x86, 0x55, 0x47, 0xaf, 0x93, 0xea, 0x99, 0x30, 0x68, 0xa2, 0x6d, 0xe0, 0x11, 0x7c, 0xfa, - 0x97, 0x1d, 0xdb, 0xe2, 0xa1, 0x49, 0x4e, 0x81, 0x07, 0xc8, 0xe9, 0x6f, 0x04, 0x0b, 0xf7, 0x63, - 0xe1, 0x97, 0x17, 0x8c, 0xa9, 0xec, 0x37, 0x62, 0x10, 0x27, 0xf5, 0x62, 0x0a, 0x52, 0x7b, 0xf7, - 0x76, 0xca, 0xd5, 0xd2, 0xf6, 0x7e, 0x61, 0xb3, 0xac, 0x29, 0xfa, 0x24, 0x00, 0x19, 0x58, 0xdf, - 0xdc, 0xce, 0xef, 0x69, 0x31, 0xef, 0x78, 0xa3, 0xb2, 0x77, 0x7d, 0x4d, 0x53, 0x3d, 0xc0, 0x3e, - 0x1d, 0x88, 0x8b, 0x02, 0x57, 0x57, 0xb5, 0x84, 0xae, 0x41, 0x9a, 0x12, 0x6c, 0xbc, 0x58, 0x2e, - 0x5d, 0x5f, 0xd3, 0x46, 0xe5, 0x91, 0xab, 0xab, 0xda, 0x98, 0x3e, 0x01, 0xe3, 0x64, 0xa4, 0xb0, - 0xbd, 0xbd, 0xa9, 0x25, 0x3d, 0xce, 0xdd, 0x3d, 0x63, 0xa3, 0x72, 0x47, 0x1b, 0xf7, 0x38, 0xef, - 0x18, 0xdb, 0xfb, 0x3b, 0x1a, 0x78, 0x0c, 0x5b, 0xe5, 0xdd, 0xdd, 0xfc, 0x9d, 0xb2, 0x96, 0xf2, - 0x24, 0x0a, 0xf7, 0xf6, 0xca, 0xbb, 0x5a, 0x5a, 0x52, 0xeb, 0xea, 0xaa, 0x36, 0xe1, 0x9d, 0xa2, - 0x5c, 0xd9, 0xdf, 0xd2, 0x26, 0xf5, 0x69, 0x98, 0xa0, 0xa7, 0xe0, 0x4a, 0x4c, 0x05, 0x86, 0xae, - 0xaf, 0x69, 0x9a, 0xaf, 0x08, 0x65, 0x99, 0x96, 0x06, 0xae, 0xaf, 0x69, 0x7a, 0xb6, 0x08, 0x09, - 0x12, 0x5d, 0xba, 0x0e, 0x93, 0x9b, 0xf9, 0x42, 0x79, 0xb3, 0xba, 0xbd, 0xb3, 0xb7, 0xb1, 0x5d, - 0xc9, 0x6f, 0x6a, 0x8a, 0x3f, 0x66, 0x94, 0x3f, 0xbe, 0xbf, 0x61, 0x94, 0x4b, 0x5a, 0x4c, 0x1c, - 0xdb, 0x29, 0xe7, 0xf7, 0xca, 0x25, 0x4d, 0xcd, 0xd6, 0xe0, 0x4c, 0x58, 0x9d, 0x0c, 0xcd, 0x0c, - 0xc1, 0xc5, 0xb1, 0x3e, 0x2e, 0x26, 0x5c, 0x3d, 0x2e, 0xfe, 0x6e, 0x0c, 0x66, 0x42, 0xd6, 0x8a, - 0xd0, 0x93, 0x3c, 0x07, 0x09, 0x1a, 0xa2, 0x74, 0xf5, 0x7c, 0x2a, 0x74, 0xd1, 0x21, 0x01, 0xdb, - 0xb3, 0x82, 0x12, 0x9c, 0xd8, 0x41, 0xa8, 0x7d, 0x3a, 0x08, 0x4c, 0xd1, 0x53, 0xd3, 0xff, 0x6c, - 0x4f, 0x4d, 0xa7, 0xcb, 0xde, 0xf5, 0x61, 0x96, 0x3d, 0x32, 0x76, 0xba, 0xda, 0x9e, 0x08, 0xa9, - 0xed, 0xb7, 0x61, 0xba, 0x87, 0x68, 0xe8, 0x1a, 0xfb, 0x29, 0x05, 0x32, 0xfd, 0x8c, 0x13, 0x51, - 0xe9, 0x62, 0x52, 0xa5, 0xbb, 0x1d, 0xb4, 0xe0, 0x85, 0xfe, 0x4e, 0xe8, 0xf1, 0xf5, 0x57, 0x14, - 0x98, 0x0d, 0xef, 0x14, 0x43, 0x75, 0x78, 0x16, 0x46, 0x5b, 0xc8, 0x3d, 0xb6, 0x79, 0xb7, 0x74, - 0x29, 0x64, 0x0d, 0xc6, 0xd3, 0x41, 0x67, 0x33, 0x94, 0xb8, 0x88, 0xab, 0xfd, 0xda, 0x3d, 0xaa, - 0x4d, 0x8f, 0xa6, 0xbf, 0x12, 0x83, 0xb3, 0xa1, 0xe4, 0xa1, 0x8a, 0x3e, 0x06, 0xd0, 0xb0, 0xda, - 0x5d, 0x97, 0x76, 0x44, 0xb4, 0xc0, 0x8e, 0x93, 0x11, 0x52, 0xbc, 0x70, 0xf1, 0xec, 0xba, 0xde, - 0xbc, 0x4a, 0xe6, 0x81, 0x0e, 0x11, 0x81, 0x9b, 0xbe, 0xa2, 0x71, 0xa2, 0xe8, 0x7c, 0x9f, 0x2b, - 0xed, 0x09, 0xcc, 0x15, 0xd0, 0x6a, 0xcd, 0x06, 0xb2, 0xdc, 0xaa, 0xe3, 0x76, 0x90, 0xd9, 0x6a, - 0x58, 0x47, 0x64, 0x05, 0x49, 0xe6, 0x12, 0x87, 0x66, 0xd3, 0x41, 0xc6, 0x14, 0x9d, 0xde, 0xe5, - 0xb3, 0x18, 0x41, 0x02, 0xa8, 0x23, 0x20, 0x46, 0x25, 0x04, 0x9d, 0xf6, 0x10, 0xd9, 0xdf, 0x4a, - 0x42, 0x4a, 0xe8, 0xab, 0xf5, 0x0b, 0x90, 0x7e, 0xd9, 0x7c, 0xd5, 0xac, 0xf2, 0x7b, 0x25, 0x6a, - 0x89, 0x14, 0x1e, 0xdb, 0x61, 0xf7, 0x4b, 0x2b, 0x70, 0x86, 0x88, 0xd8, 0x5d, 0x17, 0x75, 0xaa, - 0xb5, 0xa6, 0xe9, 0x38, 0xc4, 0x68, 0x49, 0x22, 0xaa, 0xe3, 0xb9, 0x6d, 0x3c, 0x55, 0xe4, 0x33, - 0xfa, 0x35, 0x98, 0x21, 0x88, 0x56, 0xb7, 0xe9, 0x36, 0xda, 0x4d, 0x54, 0xc5, 0x77, 0x6f, 0x0e, - 0x59, 0x49, 0x3c, 0xcd, 0xa6, 0xb1, 0xc4, 0x16, 0x13, 0xc0, 0x1a, 0x39, 0x7a, 0x09, 0x1e, 0x23, - 0xb0, 0x23, 0x64, 0xa1, 0x8e, 0xe9, 0xa2, 0x2a, 0xfa, 0xc5, 0xae, 0xd9, 0x74, 0xaa, 0xa6, 0x55, - 0xaf, 0x1e, 0x9b, 0xce, 0x71, 0xe6, 0x0c, 0x26, 0x28, 0xc4, 0x32, 0x8a, 0xf1, 0x28, 0x16, 0xbc, - 0xc3, 0xe4, 0xca, 0x44, 0x2c, 0x6f, 0xd5, 0x9f, 0x37, 0x9d, 0x63, 0x3d, 0x07, 0xb3, 0x84, 0xc5, - 0x71, 0x3b, 0x0d, 0xeb, 0xa8, 0x5a, 0x3b, 0x46, 0xb5, 0x57, 0xaa, 0x5d, 0xf7, 0xf0, 0x66, 0xe6, - 0x43, 0xe2, 0xf9, 0x89, 0x86, 0xbb, 0x44, 0xa6, 0x88, 0x45, 0xf6, 0xdd, 0xc3, 0x9b, 0xfa, 0x2e, - 0xa4, 0xb1, 0x33, 0x5a, 0x8d, 0x37, 0x50, 0xf5, 0xd0, 0xee, 0x90, 0xa5, 0x71, 0x32, 0xa4, 0x34, - 0x09, 0x16, 0x5c, 0xde, 0x66, 0x80, 0x2d, 0xbb, 0x8e, 0x72, 0x89, 0xdd, 0x9d, 0x72, 0xb9, 0x64, - 0xa4, 0x38, 0xcb, 0xba, 0xdd, 0xc1, 0x01, 0x75, 0x64, 0x7b, 0x06, 0x4e, 0xd1, 0x80, 0x3a, 0xb2, - 0xb9, 0x79, 0xaf, 0xc1, 0x4c, 0xad, 0x46, 0xaf, 0xb9, 0x51, 0xab, 0xb2, 0x7b, 0x2c, 0x27, 0xa3, - 0x49, 0xc6, 0xaa, 0xd5, 0xee, 0x50, 0x01, 0x16, 0xe3, 0x8e, 0x7e, 0x0b, 0xce, 0xfa, 0xc6, 0x12, - 0x81, 0xd3, 0x3d, 0x57, 0x19, 0x84, 0x5e, 0x83, 0x99, 0xf6, 0x49, 0x2f, 0x50, 0x97, 0xce, 0xd8, - 0x3e, 0x09, 0xc2, 0x6e, 0xc0, 0x99, 0xf6, 0x71, 0xbb, 0x17, 0xb7, 0x24, 0xe2, 0xf4, 0xf6, 0x71, - 0x3b, 0x08, 0x7c, 0x82, 0xdc, 0x70, 0x77, 0x50, 0xcd, 0x74, 0x51, 0x3d, 0xf3, 0x88, 0x28, 0x2e, - 0x4c, 0xe8, 0x97, 0x41, 0xab, 0xd5, 0xaa, 0xc8, 0x32, 0x0f, 0x9a, 0xa8, 0x6a, 0x76, 0x90, 0x65, - 0x3a, 0x99, 0x05, 0x51, 0x78, 0xb2, 0x56, 0x2b, 0x93, 0xd9, 0x3c, 0x99, 0xd4, 0x97, 0x60, 0xda, - 0x3e, 0x78, 0xb9, 0x46, 0x43, 0xb2, 0xda, 0xee, 0xa0, 0xc3, 0xc6, 0xeb, 0x99, 0x8b, 0xc4, 0xbe, - 0x53, 0x78, 0x82, 0x04, 0xe4, 0x0e, 0x19, 0xd6, 0x9f, 0x02, 0xad, 0xe6, 0x1c, 0x9b, 0x9d, 0x36, - 0xa9, 0xc9, 0x4e, 0xdb, 0xac, 0xa1, 0xcc, 0x13, 0x54, 0x94, 0x8e, 0x57, 0xf8, 0x30, 0x4e, 0x09, - 0xe7, 0xb5, 0xc6, 0xa1, 0xcb, 0x19, 0x9f, 0xa4, 0x29, 0x41, 0xc6, 0x18, 0xdb, 0x22, 0x68, 0xd8, - 0x14, 0xd2, 0x89, 0x17, 0x89, 0xd8, 0x64, 0xfb, 0xb8, 0x2d, 0x9e, 0xf7, 0x71, 0x98, 0xc0, 0x92, - 0xfe, 0x49, 0x9f, 0xa2, 0x0d, 0x59, 0xfb, 0x58, 0x38, 0xe3, 0x07, 0xd6, 0x1b, 0x67, 0x73, 0x90, - 0x16, 0xe3, 0x53, 0x1f, 0x07, 0x1a, 0xa1, 0x9a, 0x82, 0x9b, 0x95, 0xe2, 0x76, 0x09, 0xb7, 0x19, - 0x9f, 0x2c, 0x6b, 0x31, 0xdc, 0xee, 0x6c, 0x6e, 0xec, 0x95, 0xab, 0xc6, 0x7e, 0x65, 0x6f, 0x63, - 0xab, 0xac, 0xa9, 0x62, 0x5f, 0xfd, 0xcd, 0x18, 0x4c, 0xca, 0xb7, 0x48, 0xfa, 0x47, 0xe1, 0x11, - 0xfe, 0x3c, 0xc3, 0x41, 0x6e, 0xf5, 0xb5, 0x46, 0x87, 0xa4, 0x4c, 0xcb, 0xa4, 0xcb, 0x97, 0xe7, - 0xb4, 0x33, 0x4c, 0x6a, 0x17, 0xb9, 0x2f, 0x34, 0x3a, 0x38, 0x21, 0x5a, 0xa6, 0xab, 0x6f, 0xc2, - 0x82, 0x65, 0x57, 0x1d, 0xd7, 0xb4, 0xea, 0x66, 0xa7, 0x5e, 0xf5, 0x9f, 0x24, 0x55, 0xcd, 0x5a, - 0x0d, 0x39, 0x8e, 0x4d, 0x97, 0x2a, 0x8f, 0xe5, 0x9c, 0x65, 0xef, 0x32, 0x61, 0xbf, 0x86, 0xe7, - 0x99, 0x68, 0x20, 0xc0, 0xd4, 0x7e, 0x01, 0xf6, 0x21, 0x18, 0x6f, 0x99, 0xed, 0x2a, 0xb2, 0xdc, - 0xce, 0x09, 0x69, 0x8c, 0x93, 0x46, 0xb2, 0x65, 0xb6, 0xcb, 0xf8, 0xf8, 0xa7, 0x73, 0x7f, 0xf2, - 0x5f, 0x55, 0x48, 0x8b, 0xcd, 0x31, 0xbe, 0xd7, 0xa8, 0x91, 0x75, 0x44, 0x21, 0x95, 0xe6, 0xf1, - 0x81, 0xad, 0xf4, 0x72, 0x11, 0x2f, 0x30, 0xb9, 0x51, 0xda, 0xb2, 0x1a, 0x14, 0x89, 0x17, 0x77, - 0x5c, 0x5b, 0x10, 0x6d, 0x11, 0x92, 0x06, 0x3b, 0xd2, 0xef, 0xc0, 0xe8, 0xcb, 0x0e, 0xe1, 0x1e, - 0x25, 0xdc, 0x17, 0x07, 0x73, 0xdf, 0xdd, 0x25, 0xe4, 0xe3, 0x77, 0x77, 0xab, 0x95, 0x6d, 0x63, - 0x2b, 0xbf, 0x69, 0x30, 0xb8, 0xfe, 0x28, 0xc4, 0x9b, 0xe6, 0x1b, 0x27, 0xf2, 0x52, 0x44, 0x86, - 0x86, 0x35, 0xfc, 0xa3, 0x10, 0x7f, 0x0d, 0x99, 0xaf, 0xc8, 0x0b, 0x00, 0x19, 0xfa, 0x00, 0x43, - 0xff, 0x32, 0x24, 0x88, 0xbd, 0x74, 0x00, 0x66, 0x31, 0x6d, 0x44, 0x4f, 0x42, 0xbc, 0xb8, 0x6d, - 0xe0, 0xf0, 0xd7, 0x20, 0x4d, 0x47, 0xab, 0x3b, 0x1b, 0xe5, 0x62, 0x59, 0x8b, 0x65, 0xaf, 0xc1, - 0x28, 0x35, 0x02, 0x4e, 0x0d, 0xcf, 0x0c, 0xda, 0x08, 0x3b, 0x64, 0x1c, 0x0a, 0x9f, 0xdd, 0xdf, - 0x2a, 0x94, 0x0d, 0x2d, 0x26, 0xba, 0xd7, 0x81, 0xb4, 0xd8, 0x17, 0xff, 0x74, 0x62, 0xea, 0xf7, - 0x14, 0x48, 0x09, 0x7d, 0x2e, 0x6e, 0x50, 0xcc, 0x66, 0xd3, 0x7e, 0xad, 0x6a, 0x36, 0x1b, 0xa6, - 0xc3, 0x82, 0x02, 0xc8, 0x50, 0x1e, 0x8f, 0x0c, 0xeb, 0xb4, 0x9f, 0x8a, 0xf2, 0x5f, 0x50, 0x40, - 0x0b, 0xb6, 0x98, 0x01, 0x05, 0x95, 0x9f, 0xa9, 0x82, 0x9f, 0x53, 0x60, 0x52, 0xee, 0x2b, 0x03, - 0xea, 0x5d, 0xf8, 0x99, 0xaa, 0xf7, 0x9d, 0x18, 0x4c, 0x48, 0xdd, 0xe4, 0xb0, 0xda, 0xfd, 0x22, - 0x4c, 0x37, 0xea, 0xa8, 0xd5, 0xb6, 0x5d, 0x64, 0xd5, 0x4e, 0xaa, 0x4d, 0xf4, 0x2a, 0x6a, 0x66, - 0xb2, 0xa4, 0x50, 0x5c, 0x1e, 0xdc, 0xaf, 0x2e, 0x6f, 0xf8, 0xb8, 0x4d, 0x0c, 0xcb, 0xcd, 0x6c, - 0x94, 0xca, 0x5b, 0x3b, 0xdb, 0x7b, 0xe5, 0x4a, 0xf1, 0x5e, 0x75, 0xbf, 0xf2, 0xb1, 0xca, 0xf6, - 0x0b, 0x15, 0x43, 0x6b, 0x04, 0xc4, 0x3e, 0xc0, 0x54, 0xdf, 0x01, 0x2d, 0xa8, 0x94, 0xfe, 0x08, - 0x84, 0xa9, 0xa5, 0x8d, 0xe8, 0x33, 0x30, 0x55, 0xd9, 0xae, 0xee, 0x6e, 0x94, 0xca, 0xd5, 0xf2, - 0xfa, 0x7a, 0xb9, 0xb8, 0xb7, 0x4b, 0x9f, 0x40, 0x78, 0xd2, 0x7b, 0x72, 0x52, 0x7f, 0x56, 0x85, - 0x99, 0x10, 0x4d, 0xf4, 0x3c, 0xbb, 0x77, 0xa0, 0xb7, 0x33, 0x4f, 0x0f, 0xa3, 0xfd, 0x32, 0x5e, - 0xf2, 0x77, 0xcc, 0x8e, 0xcb, 0x6e, 0x35, 0x9e, 0x02, 0x6c, 0x25, 0xcb, 0x6d, 0x1c, 0x36, 0x50, - 0x87, 0x3d, 0xb0, 0xa1, 0x37, 0x14, 0x53, 0xfe, 0x38, 0x7d, 0x66, 0xf3, 0x11, 0xd0, 0xdb, 0xb6, - 0xd3, 0x70, 0x1b, 0xaf, 0xa2, 0x6a, 0xc3, 0xe2, 0x4f, 0x77, 0xf0, 0x0d, 0x46, 0xdc, 0xd0, 0xf8, - 0xcc, 0x86, 0xe5, 0x7a, 0xd2, 0x16, 0x3a, 0x32, 0x03, 0xd2, 0xb8, 0x80, 0xab, 0x86, 0xc6, 0x67, - 0x3c, 0xe9, 0x0b, 0x90, 0xae, 0xdb, 0x5d, 0xdc, 0x75, 0x51, 0x39, 0xbc, 0x5e, 0x28, 0x46, 0x8a, - 0x8e, 0x79, 0x22, 0xac, 0x9f, 0xf6, 0x1f, 0x2b, 0xa5, 0x8d, 0x14, 0x1d, 0xa3, 0x22, 0x4f, 0xc2, - 0x94, 0x79, 0x74, 0xd4, 0xc1, 0xe4, 0x9c, 0x88, 0xde, 0x21, 0x4c, 0x7a, 0xc3, 0x44, 0x70, 0xee, - 0x2e, 0x24, 0xb9, 0x1d, 0xf0, 0x92, 0x8c, 0x2d, 0x51, 0x6d, 0xd3, 0xdb, 0xde, 0xd8, 0xe2, 0xb8, - 0x91, 0xb4, 0xf8, 0xe4, 0x05, 0x48, 0x37, 0x9c, 0xaa, 0xff, 0x94, 0x3c, 0x76, 0x3e, 0xb6, 0x98, - 0x34, 0x52, 0x0d, 0xc7, 0x7b, 0xc2, 0x98, 0xfd, 0x4a, 0x0c, 0x26, 0xe5, 0xa7, 0xfc, 0x7a, 0x09, - 0x92, 0x4d, 0xbb, 0x66, 0x92, 0xd0, 0xa2, 0x5b, 0x4c, 0x8b, 0x11, 0x1b, 0x03, 0xcb, 0x9b, 0x4c, - 0xde, 0xf0, 0x90, 0x73, 0xff, 0x51, 0x81, 0x24, 0x1f, 0xd6, 0x67, 0x21, 0xde, 0x36, 0xdd, 0x63, - 0x42, 0x97, 0x28, 0xc4, 0x34, 0xc5, 0x20, 0xc7, 0x78, 0xdc, 0x69, 0x9b, 0x16, 0x09, 0x01, 0x36, - 0x8e, 0x8f, 0xb1, 0x5f, 0x9b, 0xc8, 0xac, 0x93, 0xdb, 0x0f, 0xbb, 0xd5, 0x42, 0x96, 0xeb, 0x70, - 0xbf, 0xb2, 0xf1, 0x22, 0x1b, 0xd6, 0x3f, 0x0c, 0xd3, 0x6e, 0xc7, 0x6c, 0x34, 0x25, 0xd9, 0x38, - 0x91, 0xd5, 0xf8, 0x84, 0x27, 0x9c, 0x83, 0x47, 0x39, 0x6f, 0x1d, 0xb9, 0x66, 0xed, 0x18, 0xd5, - 0x7d, 0xd0, 0x28, 0x79, 0xcc, 0xf0, 0x08, 0x13, 0x28, 0xb1, 0x79, 0x8e, 0xcd, 0xfe, 0x81, 0x02, - 0xd3, 0xfc, 0x86, 0xa9, 0xee, 0x19, 0x6b, 0x0b, 0xc0, 0xb4, 0x2c, 0xdb, 0x15, 0xcd, 0xd5, 0x1b, - 0xca, 0x3d, 0xb8, 0xe5, 0xbc, 0x07, 0x32, 0x04, 0x82, 0xb9, 0x16, 0x80, 0x3f, 0xd3, 0xd7, 0x6c, - 0x0b, 0x90, 0x62, 0x5b, 0x38, 0x64, 0x1f, 0x90, 0xde, 0x62, 0x03, 0x1d, 0xc2, 0x77, 0x56, 0xfa, - 0x19, 0x48, 0x1c, 0xa0, 0xa3, 0x86, 0xc5, 0x1e, 0xcc, 0xd2, 0x03, 0xfe, 0x20, 0x24, 0xee, 0x3d, - 0x08, 0x29, 0xbc, 0x04, 0x33, 0x35, 0xbb, 0x15, 0x54, 0xb7, 0xa0, 0x05, 0x6e, 0xf3, 0x9d, 0xe7, - 0x95, 0x4f, 0x82, 0xdf, 0x62, 0xfe, 0x58, 0x51, 0xfe, 0x61, 0x4c, 0xbd, 0xb3, 0x53, 0xf8, 0x8d, - 0xd8, 0xdc, 0x1d, 0x0a, 0xdd, 0xe1, 0x57, 0x6a, 0xa0, 0xc3, 0x26, 0xaa, 0x61, 0xed, 0xe1, 0xcb, - 0x8b, 0xf0, 0xf4, 0x51, 0xc3, 0x3d, 0xee, 0x1e, 0x2c, 0xd7, 0xec, 0xd6, 0xe5, 0x23, 0xfb, 0xc8, - 0xf6, 0xb7, 0x3e, 0xf1, 0x11, 0x39, 0x20, 0x9f, 0xd8, 0xf6, 0xe7, 0xb8, 0x37, 0x3a, 0x17, 0xb9, - 0x57, 0x9a, 0xab, 0xc0, 0x0c, 0x13, 0xae, 0x92, 0xfd, 0x17, 0x7a, 0x17, 0xa1, 0x0f, 0x7c, 0x86, - 0x95, 0xf9, 0xcd, 0xef, 0x91, 0xe5, 0xda, 0x98, 0x66, 0x50, 0x3c, 0x47, 0x6f, 0x34, 0x72, 0x06, - 0x9c, 0x95, 0xf8, 0x68, 0x6a, 0xa2, 0x4e, 0x04, 0xe3, 0x37, 0x19, 0xe3, 0x8c, 0xc0, 0xb8, 0xcb, - 0xa0, 0xb9, 0x22, 0x4c, 0x9c, 0x86, 0xeb, 0xdf, 0x31, 0xae, 0x34, 0x12, 0x49, 0xee, 0xc0, 0x14, - 0x21, 0xa9, 0x75, 0x1d, 0xd7, 0x6e, 0x91, 0xba, 0x37, 0x98, 0xe6, 0xdf, 0x7f, 0x8f, 0xe6, 0xca, - 0x24, 0x86, 0x15, 0x3d, 0x54, 0x2e, 0x07, 0x64, 0xcb, 0xa9, 0x8e, 0x6a, 0xcd, 0x08, 0x86, 0xfb, - 0x4c, 0x11, 0x4f, 0x3e, 0xf7, 0x09, 0x38, 0x83, 0x3f, 0x93, 0xb2, 0x24, 0x6a, 0x12, 0xfd, 0xc0, - 0x2b, 0xf3, 0x07, 0x9f, 0xa2, 0xe9, 0x38, 0xe3, 0x11, 0x08, 0x3a, 0x09, 0x5e, 0x3c, 0x42, 0xae, - 0x8b, 0x3a, 0x4e, 0xd5, 0x6c, 0x86, 0xa9, 0x27, 0x3c, 0x31, 0xc8, 0xfc, 0xda, 0x0f, 0x64, 0x2f, - 0xde, 0xa1, 0xc8, 0x7c, 0xb3, 0x99, 0xdb, 0x87, 0x47, 0x42, 0xa2, 0x62, 0x08, 0xce, 0xcf, 0x32, - 0xce, 0x33, 0x3d, 0x91, 0x81, 0x69, 0x77, 0x80, 0x8f, 0x7b, 0xbe, 0x1c, 0x82, 0xf3, 0x1f, 0x30, - 0x4e, 0x9d, 0x61, 0xb9, 0x4b, 0x31, 0xe3, 0x5d, 0x98, 0x7e, 0x15, 0x75, 0x0e, 0x6c, 0x87, 0x3d, - 0xa5, 0x19, 0x82, 0xee, 0x73, 0x8c, 0x6e, 0x8a, 0x01, 0xc9, 0x63, 0x1b, 0xcc, 0x75, 0x0b, 0x92, - 0x87, 0x66, 0x0d, 0x0d, 0x41, 0xf1, 0x79, 0x46, 0x31, 0x86, 0xe5, 0x31, 0x34, 0x0f, 0xe9, 0x23, - 0x9b, 0xad, 0x4c, 0xd1, 0xf0, 0x2f, 0x30, 0x78, 0x8a, 0x63, 0x18, 0x45, 0xdb, 0x6e, 0x77, 0x9b, - 0x78, 0xd9, 0x8a, 0xa6, 0xf8, 0x22, 0xa7, 0xe0, 0x18, 0x46, 0x71, 0x0a, 0xb3, 0xbe, 0xc5, 0x29, - 0x1c, 0xc1, 0x9e, 0xcf, 0x41, 0xca, 0xb6, 0x9a, 0x27, 0xb6, 0x35, 0x8c, 0x12, 0x5f, 0x62, 0x0c, - 0xc0, 0x20, 0x98, 0xe0, 0x36, 0x8c, 0x0f, 0xeb, 0x88, 0x2f, 0xff, 0x80, 0xa7, 0x07, 0xf7, 0xc0, - 0x1d, 0x98, 0xe2, 0x05, 0xaa, 0x61, 0x5b, 0x43, 0x50, 0xfc, 0x63, 0x46, 0x31, 0x29, 0xc0, 0xd8, - 0x65, 0xb8, 0xc8, 0x71, 0x8f, 0xd0, 0x30, 0x24, 0x5f, 0xe1, 0x97, 0xc1, 0x20, 0xcc, 0x94, 0x07, - 0xc8, 0xaa, 0x1d, 0x0f, 0xc7, 0xf0, 0x55, 0x6e, 0x4a, 0x8e, 0xc1, 0x14, 0x45, 0x98, 0x68, 0x99, - 0x1d, 0xe7, 0xd8, 0x6c, 0x0e, 0xe5, 0x8e, 0x5f, 0x67, 0x1c, 0x69, 0x0f, 0xc4, 0x2c, 0xd2, 0xb5, - 0x4e, 0x43, 0xf3, 0x1b, 0xdc, 0x22, 0x02, 0x8c, 0xa5, 0x9e, 0xe3, 0x92, 0x47, 0x5a, 0xa7, 0x61, - 0xfb, 0x27, 0x3c, 0xf5, 0x28, 0x76, 0x4b, 0x64, 0xbc, 0x0d, 0xe3, 0x4e, 0xe3, 0x8d, 0xa1, 0x68, - 0xfe, 0x29, 0xf7, 0x34, 0x01, 0x60, 0xf0, 0x3d, 0x78, 0x34, 0x74, 0x99, 0x18, 0x82, 0xec, 0x9f, - 0x31, 0xb2, 0xd9, 0x90, 0xa5, 0x82, 0x95, 0x84, 0xd3, 0x52, 0xfe, 0x73, 0x5e, 0x12, 0x50, 0x80, - 0x6b, 0x07, 0xdf, 0x2b, 0x38, 0xe6, 0xe1, 0xe9, 0xac, 0xf6, 0x2f, 0xb8, 0xd5, 0x28, 0x56, 0xb2, - 0xda, 0x1e, 0xcc, 0x32, 0xc6, 0xd3, 0xf9, 0xf5, 0x6b, 0xbc, 0xb0, 0x52, 0xf4, 0xbe, 0xec, 0xdd, - 0x97, 0x60, 0xce, 0x33, 0x27, 0x6f, 0x4a, 0x9d, 0x6a, 0xcb, 0x6c, 0x0f, 0xc1, 0xfc, 0x9b, 0x8c, - 0x99, 0x57, 0x7c, 0xaf, 0xab, 0x75, 0xb6, 0xcc, 0x36, 0x26, 0x7f, 0x11, 0x32, 0x9c, 0xbc, 0x6b, - 0x75, 0x50, 0xcd, 0x3e, 0xb2, 0x1a, 0x6f, 0xa0, 0xfa, 0x10, 0xd4, 0x5f, 0x0f, 0xb8, 0x6a, 0x5f, - 0x80, 0x63, 0xe6, 0x0d, 0xd0, 0xbc, 0x5e, 0xa5, 0xda, 0x68, 0xb5, 0xed, 0x8e, 0x1b, 0xc1, 0xf8, - 0x5b, 0xdc, 0x53, 0x1e, 0x6e, 0x83, 0xc0, 0x72, 0x65, 0x98, 0x24, 0x87, 0xc3, 0x86, 0xe4, 0x6f, - 0x33, 0xa2, 0x09, 0x1f, 0xc5, 0x0a, 0x47, 0xcd, 0x6e, 0xb5, 0xcd, 0xce, 0x30, 0xf5, 0xef, 0x5f, - 0xf2, 0xc2, 0xc1, 0x20, 0xac, 0x70, 0xb8, 0x27, 0x6d, 0x84, 0x57, 0xfb, 0x21, 0x18, 0xbe, 0xc1, - 0x0b, 0x07, 0xc7, 0x30, 0x0a, 0xde, 0x30, 0x0c, 0x41, 0xf1, 0xaf, 0x38, 0x05, 0xc7, 0x60, 0x8a, - 0x8f, 0xfb, 0x0b, 0x6d, 0x07, 0x1d, 0x35, 0x1c, 0xb7, 0x43, 0x5b, 0xe1, 0xc1, 0x54, 0xbf, 0xf3, - 0x03, 0xb9, 0x09, 0x33, 0x04, 0x28, 0xae, 0x44, 0xec, 0x11, 0x2a, 0xb9, 0x53, 0x8a, 0x56, 0xec, - 0x77, 0x79, 0x25, 0x12, 0x60, 0x34, 0x3f, 0xa7, 0x02, 0xbd, 0x8a, 0x1e, 0xf5, 0x22, 0x4c, 0xe6, - 0x2f, 0xfe, 0x88, 0x71, 0xc9, 0xad, 0x4a, 0x6e, 0x13, 0x07, 0x90, 0xdc, 0x50, 0x44, 0x93, 0x7d, - 0xea, 0x47, 0x5e, 0x0c, 0x49, 0xfd, 0x44, 0x6e, 0x1d, 0x26, 0xa4, 0x66, 0x22, 0x9a, 0xea, 0x2f, - 0x31, 0xaa, 0xb4, 0xd8, 0x4b, 0xe4, 0xae, 0x41, 0x1c, 0x37, 0x06, 0xd1, 0xf0, 0xbf, 0xcc, 0xe0, - 0x44, 0x3c, 0xf7, 0x0c, 0x24, 0x79, 0x43, 0x10, 0x0d, 0xfd, 0x65, 0x06, 0xf5, 0x20, 0x18, 0xce, - 0x9b, 0x81, 0x68, 0xf8, 0x5f, 0xe1, 0x70, 0x0e, 0xc1, 0xf0, 0xe1, 0x4d, 0xf8, 0xf6, 0x5f, 0x8b, - 0xb3, 0x82, 0xce, 0x6d, 0x77, 0x1b, 0xc6, 0x58, 0x17, 0x10, 0x8d, 0xfe, 0x15, 0x76, 0x72, 0x8e, - 0xc8, 0xdd, 0x80, 0xc4, 0x90, 0x06, 0xff, 0xeb, 0x0c, 0x4a, 0xe5, 0x73, 0x45, 0x48, 0x09, 0x2b, - 0x7f, 0x34, 0xfc, 0x6f, 0x30, 0xb8, 0x88, 0xc2, 0xaa, 0xb3, 0x95, 0x3f, 0x9a, 0xe0, 0x6f, 0x72, - 0xd5, 0x19, 0x02, 0x9b, 0x8d, 0x2f, 0xfa, 0xd1, 0xe8, 0xbf, 0xc5, 0xad, 0xce, 0x21, 0xb9, 0xe7, - 0x60, 0xdc, 0x2b, 0xe4, 0xd1, 0xf8, 0xbf, 0xcd, 0xf0, 0x3e, 0x06, 0x5b, 0x40, 0x58, 0x48, 0xa2, - 0x29, 0xfe, 0x0e, 0xb7, 0x80, 0x80, 0xc2, 0x69, 0x14, 0x6c, 0x0e, 0xa2, 0x99, 0x7e, 0x95, 0xa7, - 0x51, 0xa0, 0x37, 0xc0, 0xde, 0x24, 0xf5, 0x34, 0x9a, 0xe2, 0xef, 0x72, 0x6f, 0x12, 0x79, 0xac, - 0x46, 0x70, 0xb5, 0x8d, 0xe6, 0xf8, 0xfb, 0x5c, 0x8d, 0xc0, 0x62, 0x9b, 0xdb, 0x01, 0xbd, 0x77, - 0xa5, 0x8d, 0xe6, 0xfb, 0x0c, 0xe3, 0x9b, 0xee, 0x59, 0x68, 0x73, 0x2f, 0xc0, 0x6c, 0xf8, 0x2a, - 0x1b, 0xcd, 0xfa, 0x6b, 0x3f, 0x0a, 0xdc, 0x17, 0x89, 0x8b, 0x6c, 0x6e, 0xcf, 0x2f, 0xd7, 0xe2, - 0x0a, 0x1b, 0x4d, 0xfb, 0xd9, 0x1f, 0xc9, 0x15, 0x5b, 0x5c, 0x60, 0x73, 0x79, 0x00, 0x7f, 0x71, - 0x8b, 0xe6, 0xfa, 0x1c, 0xe3, 0x12, 0x40, 0x38, 0x35, 0xd8, 0xda, 0x16, 0x8d, 0xff, 0x3c, 0x4f, - 0x0d, 0x86, 0xc0, 0xa9, 0xc1, 0x97, 0xb5, 0x68, 0xf4, 0x17, 0x78, 0x6a, 0x70, 0x08, 0x8e, 0x6c, - 0x61, 0xe5, 0x88, 0x66, 0xf8, 0x12, 0x8f, 0x6c, 0x01, 0x95, 0xbb, 0x0d, 0x49, 0xab, 0xdb, 0x6c, - 0xe2, 0x00, 0xd5, 0x07, 0xbf, 0x20, 0x96, 0xf9, 0xef, 0x3f, 0x61, 0x1a, 0x70, 0x40, 0xee, 0x1a, - 0x24, 0x50, 0xeb, 0x00, 0xd5, 0xa3, 0x90, 0xff, 0xe3, 0x27, 0xbc, 0x28, 0x61, 0xe9, 0xdc, 0x73, - 0x00, 0xf4, 0xd6, 0x9e, 0x6c, 0x5b, 0x45, 0x60, 0xff, 0xe7, 0x4f, 0xd8, 0xab, 0x1b, 0x3e, 0xc4, - 0x27, 0xa0, 0x2f, 0x82, 0x0c, 0x26, 0xf8, 0x81, 0x4c, 0x40, 0xae, 0xfa, 0x16, 0x8c, 0xbd, 0xec, - 0xd8, 0x96, 0x6b, 0x1e, 0x45, 0xa1, 0xff, 0x17, 0x43, 0x73, 0x79, 0x6c, 0xb0, 0x96, 0xdd, 0x41, - 0xae, 0x79, 0xe4, 0x44, 0x61, 0xff, 0x37, 0xc3, 0x7a, 0x00, 0x0c, 0xae, 0x99, 0x8e, 0x3b, 0xcc, - 0x75, 0xff, 0x11, 0x07, 0x73, 0x00, 0x56, 0x1a, 0x7f, 0x7e, 0x05, 0x9d, 0x44, 0x61, 0x7f, 0xc8, - 0x95, 0x66, 0xf2, 0xb9, 0x67, 0x60, 0x1c, 0x7f, 0xa4, 0xef, 0x63, 0x45, 0x80, 0xff, 0x0f, 0x03, - 0xfb, 0x08, 0x7c, 0x66, 0xc7, 0xad, 0xbb, 0x8d, 0x68, 0x63, 0xff, 0x31, 0xf3, 0x34, 0x97, 0xcf, - 0xe5, 0x21, 0xe5, 0xb8, 0xf5, 0x7a, 0x97, 0xf5, 0x57, 0x11, 0xf0, 0xff, 0xfb, 0x13, 0xef, 0x96, - 0xdb, 0xc3, 0x14, 0xca, 0xe1, 0x4f, 0x0f, 0xe1, 0x8e, 0x7d, 0xc7, 0xa6, 0xcf, 0x0d, 0x3f, 0x99, - 0x8d, 0x7e, 0x00, 0x08, 0xff, 0xad, 0x09, 0x37, 0xfa, 0x8a, 0xe1, 0xd5, 0xea, 0x72, 0xcd, 0x6e, - 0x1d, 0xd8, 0xce, 0xe5, 0x03, 0xdb, 0x3d, 0xbe, 0xec, 0x1e, 0x23, 0x3c, 0xc6, 0x9e, 0x18, 0xc6, - 0xf1, 0xe7, 0xb9, 0xd3, 0x3d, 0x66, 0x24, 0x9b, 0xc8, 0x95, 0x06, 0xbe, 0xb6, 0x0a, 0x79, 0x8e, - 0xaf, 0x9f, 0x83, 0x51, 0x72, 0xb5, 0x57, 0xc8, 0x5e, 0x99, 0x52, 0x88, 0xdf, 0x7f, 0x67, 0x61, - 0xc4, 0x60, 0x63, 0xde, 0xec, 0x2a, 0x79, 0xd0, 0x1a, 0x93, 0x66, 0x57, 0xbd, 0xd9, 0xab, 0xf4, - 0x59, 0xab, 0x34, 0x7b, 0xd5, 0x9b, 0x5d, 0x23, 0x4f, 0x5d, 0x55, 0x69, 0x76, 0xcd, 0x9b, 0xbd, - 0x46, 0x76, 0x16, 0x26, 0xa4, 0xd9, 0x6b, 0xde, 0xec, 0x75, 0xb2, 0x9f, 0x10, 0x97, 0x66, 0xaf, - 0x7b, 0xb3, 0x37, 0xc8, 0x56, 0xc2, 0xb4, 0x34, 0x7b, 0xc3, 0x9b, 0xbd, 0x49, 0xb6, 0x10, 0x74, - 0x69, 0xf6, 0xa6, 0x37, 0x7b, 0x8b, 0xbc, 0x9f, 0x33, 0x26, 0xcd, 0xde, 0xd2, 0xe7, 0x61, 0x8c, - 0x5e, 0xf9, 0x0a, 0xd9, 0x6f, 0x9e, 0x62, 0xd3, 0x7c, 0xd0, 0x9f, 0xbf, 0x42, 0xde, 0xc5, 0x19, - 0x95, 0xe7, 0xaf, 0xf8, 0xf3, 0xab, 0xe4, 0x6b, 0x01, 0x9a, 0x3c, 0xbf, 0xea, 0xcf, 0x5f, 0xcd, - 0x4c, 0x90, 0xf7, 0x91, 0xa4, 0xf9, 0xab, 0xfe, 0xfc, 0x5a, 0x66, 0x12, 0x07, 0xbc, 0x3c, 0xbf, - 0xe6, 0xcf, 0x5f, 0xcb, 0x4c, 0x9d, 0x57, 0x16, 0xd3, 0xf2, 0xfc, 0xb5, 0xec, 0x2f, 0x11, 0xf7, - 0x5a, 0xbe, 0x7b, 0x67, 0x65, 0xf7, 0x7a, 0x8e, 0x9d, 0x95, 0x1d, 0xeb, 0xb9, 0x74, 0x56, 0x76, - 0xa9, 0xe7, 0xcc, 0x59, 0xd9, 0x99, 0x9e, 0x1b, 0x67, 0x65, 0x37, 0x7a, 0x0e, 0x9c, 0x95, 0x1d, - 0xe8, 0xb9, 0x6e, 0x56, 0x76, 0x9d, 0xe7, 0xb4, 0x59, 0xd9, 0x69, 0x9e, 0xbb, 0x66, 0x65, 0x77, - 0x79, 0x8e, 0xca, 0x04, 0x1c, 0xe5, 0xbb, 0x28, 0x13, 0x70, 0x91, 0xef, 0x9c, 0x4c, 0xc0, 0x39, - 0xbe, 0x5b, 0x32, 0x01, 0xb7, 0xf8, 0x0e, 0xc9, 0x04, 0x1c, 0xe2, 0xbb, 0x22, 0x13, 0x70, 0x85, - 0xef, 0x04, 0x96, 0x63, 0x06, 0x6a, 0x87, 0xe4, 0x98, 0x3a, 0x30, 0xc7, 0xd4, 0x81, 0x39, 0xa6, - 0x0e, 0xcc, 0x31, 0x75, 0x60, 0x8e, 0xa9, 0x03, 0x73, 0x4c, 0x1d, 0x98, 0x63, 0xea, 0xc0, 0x1c, - 0x53, 0x07, 0xe6, 0x98, 0x3a, 0x38, 0xc7, 0xd4, 0x88, 0x1c, 0x53, 0x23, 0x72, 0x4c, 0x8d, 0xc8, - 0x31, 0x35, 0x22, 0xc7, 0xd4, 0x88, 0x1c, 0x53, 0xfb, 0xe6, 0x98, 0xef, 0xde, 0x59, 0xd9, 0xbd, - 0xa1, 0x39, 0xa6, 0xf6, 0xc9, 0x31, 0xb5, 0x4f, 0x8e, 0xa9, 0x7d, 0x72, 0x4c, 0xed, 0x93, 0x63, - 0x6a, 0x9f, 0x1c, 0x53, 0xfb, 0xe4, 0x98, 0xda, 0x27, 0xc7, 0xd4, 0x7e, 0x39, 0xa6, 0xf6, 0xcd, - 0x31, 0xb5, 0x6f, 0x8e, 0xa9, 0x7d, 0x73, 0x4c, 0xed, 0x9b, 0x63, 0x6a, 0xdf, 0x1c, 0x53, 0xc5, - 0x1c, 0xfb, 0xd7, 0x2a, 0xe8, 0x34, 0xc7, 0x76, 0xc8, 0x1b, 0x4b, 0xcc, 0x15, 0xf3, 0x81, 0x4c, - 0x1b, 0xc5, 0xae, 0xd3, 0x7c, 0x97, 0xcc, 0x07, 0x72, 0x4d, 0x9e, 0x5f, 0xf5, 0xe6, 0x79, 0xb6, - 0xc9, 0xf3, 0x57, 0xbd, 0x79, 0x9e, 0x6f, 0xf2, 0xfc, 0x9a, 0x37, 0xcf, 0x33, 0x4e, 0x9e, 0xbf, - 0xe6, 0xcd, 0xf3, 0x9c, 0x93, 0xe7, 0xaf, 0x7b, 0xf3, 0x3c, 0xeb, 0xe4, 0xf9, 0x1b, 0xde, 0x3c, - 0xcf, 0x3b, 0x79, 0xfe, 0xa6, 0x37, 0xcf, 0x33, 0x4f, 0x9e, 0xbf, 0xa5, 0x9f, 0x0f, 0xe6, 0x1e, - 0x17, 0xf0, 0x5c, 0x7b, 0x3e, 0x98, 0x7d, 0x01, 0x89, 0x2b, 0xbe, 0x04, 0xcf, 0xbf, 0x80, 0xc4, - 0xaa, 0x2f, 0xc1, 0x33, 0x30, 0x20, 0x71, 0x35, 0xfb, 0x69, 0xe2, 0x3e, 0x2b, 0xe8, 0xbe, 0xb9, - 0x80, 0xfb, 0x62, 0x82, 0xeb, 0xe6, 0x02, 0xae, 0x8b, 0x09, 0x6e, 0x9b, 0x0b, 0xb8, 0x2d, 0x26, - 0xb8, 0x6c, 0x2e, 0xe0, 0xb2, 0x98, 0xe0, 0xae, 0xb9, 0x80, 0xbb, 0x62, 0x82, 0xab, 0xe6, 0x02, - 0xae, 0x8a, 0x09, 0x6e, 0x9a, 0x0b, 0xb8, 0x29, 0x26, 0xb8, 0x68, 0x2e, 0xe0, 0xa2, 0x98, 0xe0, - 0x9e, 0xb9, 0x80, 0x7b, 0x62, 0x82, 0x6b, 0xce, 0x05, 0x5d, 0x13, 0x13, 0xdd, 0x72, 0x2e, 0xe8, - 0x96, 0x98, 0xe8, 0x92, 0x73, 0x41, 0x97, 0xc4, 0x44, 0x77, 0x9c, 0x0b, 0xba, 0x23, 0x26, 0xba, - 0xe2, 0x4f, 0x62, 0xbc, 0x23, 0xdc, 0x75, 0x3b, 0xdd, 0x9a, 0xfb, 0x9e, 0x3a, 0xc2, 0x15, 0xa9, - 0x7d, 0x48, 0xad, 0xea, 0xcb, 0xa4, 0x61, 0x15, 0x3b, 0xce, 0xc0, 0x0a, 0xb6, 0x22, 0x35, 0x16, - 0x02, 0xc2, 0x0a, 0x47, 0xac, 0xbd, 0xa7, 0xde, 0x70, 0x45, 0x6a, 0x33, 0xa2, 0xf5, 0xbb, 0xf9, - 0x81, 0x77, 0x6c, 0x6f, 0xc7, 0x78, 0xc7, 0xc6, 0xcc, 0x7f, 0xda, 0x8e, 0x6d, 0x29, 0xda, 0xe4, - 0x9e, 0xb1, 0x97, 0xa2, 0x8d, 0xdd, 0xb3, 0xea, 0x0c, 0xdb, 0xc1, 0x2d, 0x45, 0x9b, 0xd6, 0x33, - 0xea, 0xfb, 0xdb, 0x6f, 0xb1, 0x08, 0x36, 0x50, 0x3b, 0x24, 0x82, 0x4f, 0xdb, 0x6f, 0xad, 0x48, - 0xa5, 0xe4, 0xb4, 0x11, 0xac, 0x9e, 0x3a, 0x82, 0x4f, 0xdb, 0x79, 0xad, 0x48, 0xe5, 0xe5, 0xd4, - 0x11, 0xfc, 0x01, 0xf4, 0x43, 0x2c, 0x82, 0x7d, 0xf3, 0x9f, 0xb6, 0x1f, 0x5a, 0x8a, 0x36, 0x79, - 0x68, 0x04, 0xab, 0xa7, 0x88, 0xe0, 0x61, 0xfa, 0xa3, 0xa5, 0x68, 0xd3, 0x86, 0x47, 0xf0, 0x7b, - 0xee, 0x66, 0xbe, 0xa8, 0xc0, 0x74, 0xa5, 0x51, 0x2f, 0xb7, 0x0e, 0x50, 0xbd, 0x8e, 0xea, 0xcc, - 0x8e, 0x2b, 0x52, 0x25, 0xe8, 0xe3, 0xea, 0x6f, 0xbd, 0xb3, 0xe0, 0x5b, 0xf8, 0x1a, 0x24, 0xa9, - 0x4d, 0x57, 0x56, 0x32, 0xf7, 0x95, 0x88, 0x0a, 0xe7, 0x89, 0xea, 0x17, 0x38, 0xec, 0xca, 0x4a, - 0xe6, 0x3f, 0x29, 0x42, 0x95, 0xf3, 0x86, 0xb3, 0xbf, 0x4a, 0x34, 0xb4, 0xde, 0xb3, 0x86, 0x97, - 0x87, 0xd2, 0x50, 0xd0, 0xed, 0x43, 0x3d, 0xba, 0x09, 0x5a, 0x75, 0x61, 0xaa, 0xd2, 0xa8, 0x57, - 0xc8, 0x17, 0xd2, 0x87, 0x51, 0x89, 0xca, 0x04, 0xea, 0xc1, 0x8a, 0x14, 0x96, 0x22, 0xc2, 0x0b, - 0x69, 0xb9, 0x46, 0x64, 0x1b, 0xf8, 0xb4, 0x96, 0x74, 0xda, 0xa5, 0x7e, 0xa7, 0xf5, 0x2b, 0xbb, - 0x77, 0xc2, 0xa5, 0x7e, 0x27, 0xf4, 0x73, 0xc8, 0x3b, 0xd5, 0xeb, 0x7c, 0x71, 0xa6, 0xef, 0x0d, - 0xe9, 0xe7, 0x20, 0xb6, 0x41, 0x5f, 0x6b, 0x4e, 0x17, 0xd2, 0x58, 0xa9, 0x6f, 0xbf, 0xb3, 0x10, - 0xdf, 0xef, 0x36, 0xea, 0x46, 0x6c, 0xa3, 0xae, 0xdf, 0x85, 0xc4, 0x27, 0xd8, 0xd7, 0x22, 0xb1, - 0xc0, 0x1a, 0x13, 0xf8, 0x48, 0xc4, 0x23, 0x26, 0x42, 0xbd, 0xbc, 0xdf, 0xb0, 0xdc, 0x2b, 0xab, - 0x37, 0x0d, 0x4a, 0x91, 0xfd, 0x33, 0x00, 0xf4, 0x9c, 0x25, 0xd3, 0x39, 0xd6, 0x2b, 0x9c, 0x99, - 0x9e, 0xfa, 0xe6, 0xb7, 0xdf, 0x59, 0x58, 0x1b, 0x86, 0xf5, 0xe9, 0xba, 0xe9, 0x1c, 0x3f, 0xed, - 0x9e, 0xb4, 0xd1, 0x72, 0xe1, 0xc4, 0x45, 0x0e, 0x67, 0x6f, 0xf3, 0x55, 0x8f, 0x5d, 0x57, 0x46, - 0xb8, 0xae, 0xa4, 0x74, 0x4d, 0xeb, 0xf2, 0x35, 0xad, 0x3c, 0xec, 0xf5, 0xbc, 0xce, 0x17, 0x89, - 0x80, 0x25, 0xd5, 0x28, 0x4b, 0xaa, 0xef, 0xd5, 0x92, 0x6d, 0x5e, 0x1f, 0x03, 0xd7, 0xaa, 0x0e, - 0xba, 0x56, 0xf5, 0xbd, 0x5c, 0xeb, 0xff, 0xa3, 0xd9, 0xea, 0xe5, 0xd3, 0xbe, 0x45, 0x5f, 0xa9, - 0xfc, 0xd3, 0xf5, 0x2c, 0xe8, 0x7d, 0xed, 0x02, 0x72, 0xf1, 0xfb, 0x6f, 0x2d, 0x28, 0xd9, 0x2f, - 0xc6, 0xf8, 0x95, 0xd3, 0x44, 0x7a, 0xb8, 0x2b, 0xff, 0xd3, 0xd2, 0x53, 0x7d, 0x10, 0x16, 0xfa, - 0x82, 0x02, 0xb3, 0x3d, 0x95, 0x9c, 0x9a, 0xe9, 0xfd, 0x2d, 0xe7, 0xd6, 0x69, 0xcb, 0x39, 0x53, - 0xf0, 0xb7, 0x15, 0x38, 0x13, 0x28, 0xaf, 0x54, 0xbd, 0xcb, 0x01, 0xf5, 0x1e, 0xe9, 0x3d, 0x13, - 0x11, 0x14, 0xb4, 0x13, 0xdd, 0x1b, 0x00, 0x08, 0xcc, 0x9e, 0xdf, 0xd7, 0x02, 0x7e, 0x3f, 0xe7, - 0x01, 0x42, 0xcc, 0xc5, 0x23, 0x80, 0xa9, 0x6d, 0x43, 0x7c, 0xaf, 0x83, 0x90, 0x3e, 0x0f, 0xb1, - 0xed, 0x0e, 0xd3, 0x70, 0x92, 0xe2, 0xb7, 0x3b, 0x85, 0x8e, 0x69, 0xd5, 0x8e, 0x8d, 0xd8, 0x76, - 0x47, 0xbf, 0x00, 0x6a, 0x9e, 0x7d, 0x25, 0x3b, 0xb5, 0x3a, 0x45, 0x05, 0xf2, 0x56, 0x9d, 0x49, - 0xe0, 0x39, 0x7d, 0x1e, 0xe2, 0x9b, 0xc8, 0x3c, 0x64, 0x4a, 0x00, 0x95, 0xc1, 0x23, 0x06, 0x19, - 0x67, 0x27, 0x7c, 0x11, 0x92, 0x9c, 0x58, 0xbf, 0x88, 0x11, 0x87, 0x2e, 0x3b, 0x2d, 0x43, 0x60, - 0x75, 0xd8, 0xca, 0x45, 0x66, 0xf5, 0x4b, 0x90, 0x30, 0x1a, 0x47, 0xc7, 0x2e, 0x3b, 0x79, 0xaf, - 0x18, 0x9d, 0xce, 0xde, 0x83, 0x71, 0x4f, 0xa3, 0xf7, 0x99, 0xba, 0x44, 0x2f, 0x4d, 0x9f, 0x13, - 0xd7, 0x13, 0xfe, 0xdc, 0x92, 0x0e, 0xe9, 0xe7, 0x21, 0xb9, 0xeb, 0x76, 0xfc, 0xa2, 0xcf, 0x3b, - 0x52, 0x6f, 0x34, 0xfb, 0x4b, 0x0a, 0x24, 0x4b, 0x08, 0xb5, 0x89, 0xc1, 0x9f, 0x80, 0x78, 0xc9, - 0x7e, 0xcd, 0x62, 0x0a, 0x4e, 0x33, 0x8b, 0xe2, 0x69, 0x66, 0x53, 0x32, 0xad, 0x3f, 0x21, 0xda, - 0x7d, 0xc6, 0xb3, 0xbb, 0x20, 0x47, 0x6c, 0x9f, 0x95, 0x6c, 0xcf, 0x1c, 0x88, 0x85, 0x7a, 0xec, - 0x7f, 0x03, 0x52, 0xc2, 0x59, 0xf4, 0x45, 0xa6, 0x46, 0x2c, 0x08, 0x14, 0x6d, 0x85, 0x25, 0xb2, - 0x08, 0x26, 0xa4, 0x13, 0x63, 0xa8, 0x60, 0xe2, 0x3e, 0x50, 0x62, 0xe6, 0x25, 0xd9, 0xcc, 0xe1, - 0xa2, 0xcc, 0xd4, 0x2b, 0xd4, 0x46, 0xc4, 0xdc, 0x17, 0x69, 0x70, 0xf6, 0x77, 0x22, 0xfe, 0x9c, - 0x4d, 0x80, 0x5a, 0x69, 0x34, 0xb3, 0xcf, 0x00, 0xd0, 0x94, 0x2f, 0x5b, 0xdd, 0x56, 0x20, 0xeb, - 0x26, 0xb9, 0x81, 0xf7, 0x8e, 0xd1, 0x1e, 0x72, 0x88, 0x88, 0xdc, 0x4f, 0xe1, 0x02, 0x03, 0x34, - 0xc5, 0x08, 0xfe, 0xa9, 0x48, 0x7c, 0x68, 0x27, 0x86, 0x45, 0x33, 0x54, 0xf4, 0x1e, 0x72, 0xf3, - 0x96, 0xed, 0x1e, 0xa3, 0x4e, 0x00, 0xb1, 0xaa, 0x5f, 0x95, 0x12, 0x76, 0x72, 0xf5, 0x43, 0x1e, - 0xa2, 0x2f, 0xe8, 0x6a, 0xf6, 0x6b, 0x44, 0x41, 0xdc, 0x0a, 0xf4, 0x5c, 0xa0, 0x3a, 0xc4, 0x05, - 0xea, 0xd7, 0xa5, 0xfe, 0x6d, 0x80, 0x9a, 0x81, 0x5b, 0xcb, 0x5b, 0xd2, 0x7d, 0xce, 0x60, 0x65, - 0xe5, 0x7b, 0x4c, 0x6e, 0x53, 0xae, 0xf2, 0x53, 0x91, 0x2a, 0xf7, 0xe9, 0x6e, 0x4f, 0x6b, 0x53, - 0x75, 0x58, 0x9b, 0xfe, 0x9e, 0xd7, 0x71, 0xd0, 0xdf, 0xbd, 0x20, 0xbf, 0x18, 0xa3, 0x7f, 0x24, - 0xd2, 0xf7, 0x39, 0xa5, 0xe8, 0xa9, 0xba, 0x36, 0xac, 0xfb, 0x73, 0xb1, 0x42, 0xc1, 0x53, 0xf7, - 0xc6, 0x29, 0x42, 0x20, 0x17, 0x2b, 0x16, 0xbd, 0xb2, 0x9d, 0xfc, 0xf4, 0x5b, 0x0b, 0xca, 0x57, - 0xdf, 0x5a, 0x18, 0xc9, 0xfe, 0xba, 0x02, 0xd3, 0x4c, 0x52, 0x08, 0xdc, 0xa7, 0x03, 0xca, 0x9f, - 0xe5, 0x35, 0x23, 0xcc, 0x02, 0x3f, 0xb5, 0xe0, 0xfd, 0xa6, 0x02, 0x99, 0x1e, 0x5d, 0xb9, 0xbd, - 0x57, 0x86, 0x52, 0x39, 0xa7, 0x94, 0x7f, 0xf6, 0x36, 0xbf, 0x07, 0x89, 0xbd, 0x46, 0x0b, 0x75, - 0xf0, 0x4a, 0x80, 0x3f, 0x50, 0x95, 0xf9, 0x66, 0x0e, 0x1d, 0xe2, 0x73, 0x54, 0x39, 0x69, 0x6e, - 0x55, 0xcf, 0x40, 0xbc, 0x64, 0xba, 0x26, 0xd1, 0x20, 0xed, 0xd5, 0x57, 0xd3, 0x35, 0xb3, 0x57, - 0x21, 0xbd, 0x75, 0x42, 0xde, 0xd5, 0xa9, 0x93, 0x57, 0x48, 0xe4, 0xee, 0x8f, 0xf7, 0xab, 0x57, - 0x96, 0x12, 0xc9, 0xba, 0x76, 0x5f, 0xc9, 0xc5, 0x89, 0x3e, 0xaf, 0xc2, 0xe4, 0x36, 0x56, 0x9b, - 0xe0, 0x08, 0xec, 0x3c, 0x28, 0x5b, 0x72, 0x23, 0x24, 0xb2, 0x1a, 0xca, 0x56, 0xa0, 0x7d, 0x54, - 0x3d, 0xf3, 0x04, 0xda, 0x36, 0xd5, 0x6b, 0xdb, 0x96, 0xe2, 0xc9, 0x49, 0x6d, 0x7a, 0x29, 0x9e, - 0x04, 0x6d, 0x82, 0x9d, 0xf7, 0x3f, 0xa8, 0xa0, 0xd1, 0x56, 0xa7, 0x84, 0x0e, 0x1b, 0x56, 0xc3, - 0xed, 0xed, 0x57, 0x3d, 0x8d, 0xf5, 0xe7, 0x60, 0x1c, 0x9b, 0x74, 0x9d, 0xfd, 0x70, 0x1c, 0x36, - 0xfd, 0x05, 0xd6, 0xa2, 0x04, 0x28, 0xd8, 0x00, 0x09, 0x1d, 0x1f, 0xa3, 0xaf, 0x83, 0x5a, 0xa9, - 0x6c, 0xb1, 0xc5, 0x6d, 0x6d, 0x20, 0x94, 0xbd, 0xa8, 0xc3, 0x8e, 0xd8, 0x98, 0x73, 0x64, 0x60, - 0x02, 0x7d, 0x0d, 0x62, 0x95, 0x2d, 0xd6, 0xf0, 0x5e, 0x1c, 0x86, 0xc6, 0x88, 0x55, 0xb6, 0xe6, - 0xfe, 0x8d, 0x02, 0x13, 0xd2, 0xa8, 0x9e, 0x85, 0x34, 0x1d, 0x10, 0x2e, 0x77, 0xd4, 0x90, 0xc6, - 0xb8, 0xce, 0xb1, 0xf7, 0xa8, 0xf3, 0x5c, 0x1e, 0xa6, 0x02, 0xe3, 0xfa, 0x32, 0xe8, 0xe2, 0x10, - 0x53, 0x82, 0xfe, 0x68, 0x55, 0xc8, 0x4c, 0xf6, 0x31, 0x00, 0xdf, 0xae, 0xde, 0x6f, 0x2d, 0x55, - 0xca, 0xbb, 0x7b, 0xe5, 0x92, 0xa6, 0x64, 0xbf, 0xa1, 0x40, 0x8a, 0xb5, 0xad, 0x35, 0xbb, 0x8d, - 0xf4, 0x02, 0x28, 0x79, 0x16, 0x41, 0x0f, 0xa7, 0xb7, 0x92, 0xd7, 0x2f, 0x83, 0x52, 0x18, 0xde, - 0xd5, 0x4a, 0x41, 0x5f, 0x05, 0xa5, 0xc8, 0x1c, 0x3c, 0x9c, 0x67, 0x94, 0x62, 0xf6, 0x8f, 0x55, - 0x98, 0x11, 0xdb, 0x68, 0x5e, 0x4f, 0x2e, 0xc8, 0xf7, 0x4d, 0xb9, 0xf1, 0x2b, 0xab, 0x57, 0xd7, - 0x96, 0xf1, 0x3f, 0x5e, 0x48, 0x66, 0xe5, 0x5b, 0xa8, 0x1c, 0x78, 0x22, 0x57, 0xfa, 0xbd, 0x27, - 0x92, 0x8b, 0x0b, 0x0c, 0x3d, 0xef, 0x89, 0x48, 0xb3, 0x3d, 0xef, 0x89, 0x48, 0xb3, 0x3d, 0xef, - 0x89, 0x48, 0xb3, 0x3d, 0x7b, 0x01, 0xd2, 0x6c, 0xcf, 0x7b, 0x22, 0xd2, 0x6c, 0xcf, 0x7b, 0x22, - 0xd2, 0x6c, 0xef, 0x7b, 0x22, 0x6c, 0xba, 0xef, 0x7b, 0x22, 0xf2, 0x7c, 0xef, 0x7b, 0x22, 0xf2, - 0x7c, 0xef, 0x7b, 0x22, 0xb9, 0xb8, 0xdb, 0xe9, 0xa2, 0xfe, 0xbb, 0x0e, 0x32, 0x7e, 0xd0, 0x4d, - 0xa0, 0x5f, 0x81, 0xb7, 0x61, 0x8a, 0x3e, 0x90, 0x28, 0xda, 0x96, 0x6b, 0x36, 0x2c, 0xd4, 0xd1, - 0x3f, 0x0a, 0x69, 0x3a, 0x44, 0x6f, 0x73, 0xc2, 0x6e, 0x03, 0xe9, 0x3c, 0xab, 0xb7, 0x92, 0x74, - 0xf6, 0x4f, 0xe2, 0x30, 0x4b, 0x07, 0x2a, 0x66, 0x0b, 0x49, 0x6f, 0x19, 0x5d, 0x0a, 0xec, 0x29, - 0x4d, 0x62, 0xf8, 0x83, 0x77, 0x16, 0xe8, 0x68, 0xde, 0x8b, 0xa6, 0x4b, 0x81, 0xdd, 0x25, 0x59, - 0xce, 0x5f, 0x80, 0x2e, 0x05, 0xde, 0x3c, 0x92, 0xe5, 0xbc, 0xf5, 0xc6, 0x93, 0xe3, 0xef, 0x20, - 0xc9, 0x72, 0x25, 0x2f, 0xca, 0x2e, 0x05, 0xde, 0x46, 0x92, 0xe5, 0xca, 0x5e, 0xbc, 0x5d, 0x0a, - 0xec, 0x3d, 0xc9, 0x72, 0xeb, 0x5e, 0xe4, 0x5d, 0x0a, 0xec, 0x42, 0xc9, 0x72, 0x77, 0xbc, 0x18, - 0xbc, 0x14, 0x78, 0x57, 0x49, 0x96, 0x7b, 0xde, 0x8b, 0xc6, 0x4b, 0x81, 0xb7, 0x96, 0x64, 0xb9, - 0x0d, 0x2f, 0x2e, 0x17, 0x83, 0xef, 0x2f, 0xc9, 0x82, 0x77, 0xfd, 0x08, 0x5d, 0x0c, 0xbe, 0xc9, - 0x24, 0x4b, 0x7e, 0xcc, 0x8f, 0xd5, 0xc5, 0xe0, 0x3b, 0x4d, 0xb2, 0xe4, 0xa6, 0x1f, 0xb5, 0x8b, - 0xc1, 0xbd, 0x32, 0x59, 0x72, 0xcb, 0x8f, 0xdf, 0xc5, 0xe0, 0xae, 0x99, 0x2c, 0x59, 0xf1, 0x23, - 0x79, 0x31, 0xb8, 0x7f, 0x26, 0x4b, 0x6e, 0xfb, 0x0f, 0xd1, 0x7f, 0x3f, 0x10, 0x7e, 0xc2, 0x5b, - 0x50, 0xd9, 0x40, 0xf8, 0x41, 0x48, 0xe8, 0x05, 0x0a, 0x99, 0x20, 0xe3, 0x87, 0x5d, 0x36, 0x10, - 0x76, 0x10, 0x12, 0x72, 0xd9, 0x40, 0xc8, 0x41, 0x48, 0xb8, 0x65, 0x03, 0xe1, 0x06, 0x21, 0xa1, - 0x96, 0x0d, 0x84, 0x1a, 0x84, 0x84, 0x59, 0x36, 0x10, 0x66, 0x10, 0x12, 0x62, 0xd9, 0x40, 0x88, - 0x41, 0x48, 0x78, 0x65, 0x03, 0xe1, 0x05, 0x21, 0xa1, 0x75, 0x31, 0x18, 0x5a, 0x10, 0x16, 0x56, - 0x17, 0x83, 0x61, 0x05, 0x61, 0x21, 0xf5, 0x78, 0x30, 0xa4, 0xc6, 0x1f, 0xbc, 0xb3, 0x90, 0xc0, - 0x43, 0x42, 0x34, 0x5d, 0x0c, 0x46, 0x13, 0x84, 0x45, 0xd2, 0xc5, 0x60, 0x24, 0x41, 0x58, 0x14, - 0x5d, 0x0c, 0x46, 0x11, 0x84, 0x45, 0xd0, 0xdb, 0xc1, 0x08, 0xf2, 0xdf, 0xf1, 0xc9, 0x06, 0xb6, - 0x14, 0xa3, 0x22, 0x48, 0x1d, 0x22, 0x82, 0xd4, 0x21, 0x22, 0x48, 0x1d, 0x22, 0x82, 0xd4, 0x21, - 0x22, 0x48, 0x1d, 0x22, 0x82, 0xd4, 0x21, 0x22, 0x48, 0x1d, 0x22, 0x82, 0xd4, 0x61, 0x22, 0x48, - 0x1d, 0x2a, 0x82, 0xd4, 0x7e, 0x11, 0x74, 0x31, 0xf8, 0xc6, 0x03, 0x84, 0x15, 0xa4, 0x8b, 0xc1, - 0xad, 0xcf, 0xe8, 0x10, 0x52, 0x87, 0x0a, 0x21, 0xb5, 0x5f, 0x08, 0xfd, 0xbe, 0x0a, 0x33, 0x52, - 0x08, 0xb1, 0xfd, 0xa1, 0xf7, 0xab, 0x02, 0x5d, 0x1f, 0xe2, 0x05, 0x8b, 0xb0, 0x98, 0xba, 0x3e, - 0xc4, 0x26, 0xf5, 0xa0, 0x38, 0xeb, 0xad, 0x42, 0xe5, 0x21, 0xaa, 0xd0, 0xba, 0x17, 0x43, 0xd7, - 0x87, 0x78, 0xf1, 0xa2, 0x37, 0xf6, 0x6e, 0x0e, 0x2a, 0x02, 0xcf, 0x0f, 0x55, 0x04, 0x36, 0x86, - 0x2a, 0x02, 0x77, 0x7d, 0x0f, 0xfe, 0x72, 0x0c, 0xce, 0xf8, 0x1e, 0xa4, 0x9f, 0xc8, 0x0f, 0x3b, - 0x65, 0x85, 0x2d, 0x2a, 0x9d, 0x6f, 0xdb, 0x08, 0x6e, 0x8c, 0x6d, 0xd4, 0xf5, 0x1d, 0x79, 0xb3, - 0x2a, 0x77, 0xda, 0x0d, 0x1c, 0xc1, 0xe3, 0xec, 0x61, 0xe8, 0x45, 0x50, 0x37, 0xea, 0x0e, 0xa9, - 0x16, 0x61, 0xa7, 0x2d, 0x1a, 0x78, 0x5a, 0x37, 0x60, 0x94, 0x88, 0x3b, 0xc4, 0xbd, 0xef, 0xe5, - 0xc4, 0x25, 0x83, 0x31, 0x65, 0xdf, 0x56, 0xe0, 0xbc, 0x14, 0xca, 0xef, 0xcf, 0x96, 0xc1, 0xed, - 0xa1, 0xb6, 0x0c, 0xa4, 0x04, 0xf1, 0xb7, 0x0f, 0x9e, 0xec, 0xdd, 0xa9, 0x16, 0xb3, 0x24, 0xb8, - 0x95, 0xf0, 0x17, 0x60, 0xd2, 0xbf, 0x02, 0x72, 0xcf, 0x76, 0x2d, 0xfa, 0x69, 0x66, 0x58, 0x6a, - 0x5e, 0x0b, 0x3c, 0x45, 0x1b, 0x08, 0xf3, 0xb2, 0x35, 0x9b, 0x83, 0xa9, 0x8a, 0xfc, 0xad, 0xa1, - 0xa8, 0x87, 0x11, 0x49, 0xdc, 0x9a, 0xdf, 0xff, 0xd2, 0xc2, 0x48, 0xf6, 0x23, 0x90, 0x16, 0xbf, - 0x18, 0x14, 0x00, 0x8e, 0x73, 0x60, 0x2e, 0xfe, 0x2d, 0x2c, 0xfd, 0xf7, 0x14, 0x38, 0x2b, 0x8a, - 0xbf, 0xd0, 0x70, 0x8f, 0x37, 0x2c, 0xdc, 0xd3, 0x3f, 0x03, 0x49, 0xc4, 0x1c, 0xc7, 0x7e, 0xa3, - 0x85, 0xdd, 0x47, 0x86, 0x8a, 0x2f, 0x93, 0x7f, 0x0d, 0x0f, 0x12, 0x78, 0xc6, 0xc1, 0x4f, 0xbb, - 0x3a, 0xf7, 0x04, 0x24, 0x28, 0xbf, 0xac, 0xd7, 0x44, 0x40, 0xaf, 0x2f, 0x87, 0xe8, 0x45, 0xe2, - 0x48, 0xbf, 0x2b, 0xe9, 0x25, 0xdc, 0xae, 0x86, 0x8a, 0x2f, 0xf3, 0xe0, 0x2b, 0x24, 0x71, 0xff, - 0x47, 0x22, 0x2a, 0x5a, 0xc9, 0x45, 0x48, 0x96, 0x83, 0x32, 0xe1, 0x7a, 0x96, 0x20, 0x5e, 0xb1, - 0xeb, 0xe4, 0xd7, 0x63, 0xc8, 0xcf, 0x25, 0x33, 0x23, 0xb3, 0xdf, 0x4e, 0xbe, 0x04, 0xc9, 0xe2, - 0x71, 0xa3, 0x59, 0xef, 0x20, 0x8b, 0xed, 0xd9, 0xb3, 0x47, 0xe8, 0x18, 0x63, 0x78, 0x73, 0xd9, - 0x22, 0x4c, 0x57, 0x6c, 0xab, 0x70, 0xe2, 0x8a, 0x75, 0x63, 0x39, 0x90, 0x22, 0x6c, 0xcf, 0x87, - 0x7c, 0x4b, 0x04, 0x0b, 0x14, 0x12, 0xdf, 0x7e, 0x67, 0x41, 0xd9, 0xf3, 0x9e, 0x9f, 0x6f, 0xc1, - 0x23, 0x2c, 0x7d, 0x7a, 0xa8, 0x56, 0xa3, 0xa8, 0xc6, 0xd9, 0x3e, 0xb5, 0x40, 0xb7, 0x81, 0xe9, - 0xac, 0x50, 0xba, 0x87, 0xd3, 0x0c, 0x37, 0x45, 0x03, 0x35, 0x53, 0x4f, 0xa5, 0x59, 0x28, 0xdd, - 0x72, 0x14, 0x5d, 0x40, 0xb3, 0xc7, 0x61, 0xdc, 0x9b, 0x13, 0xa2, 0x41, 0xcc, 0x94, 0xd5, 0xa5, - 0x2c, 0xa4, 0x84, 0x84, 0xd5, 0x13, 0xa0, 0xe4, 0xb5, 0x11, 0xfc, 0x5f, 0x41, 0x53, 0xf0, 0x7f, - 0x45, 0x2d, 0xb6, 0xf4, 0x04, 0x4c, 0x05, 0x9e, 0x5f, 0xe2, 0x99, 0x92, 0x06, 0xf8, 0xbf, 0xb2, - 0x96, 0x9a, 0x8b, 0x7f, 0xfa, 0x1f, 0xcd, 0x8f, 0x2c, 0xdd, 0x06, 0xbd, 0xf7, 0x49, 0xa7, 0x3e, - 0x0a, 0xb1, 0x3c, 0xa6, 0x7c, 0x04, 0x62, 0x85, 0x82, 0xa6, 0xcc, 0x4d, 0xfd, 0xd5, 0xcf, 0x9f, - 0x4f, 0x15, 0xc8, 0xb7, 0x9e, 0xef, 0x21, 0xb7, 0x50, 0x60, 0xe0, 0x67, 0xe1, 0x6c, 0xe8, 0x93, - 0x52, 0x8c, 0x2f, 0x16, 0x29, 0xbe, 0x54, 0xea, 0xc1, 0x97, 0x4a, 0x04, 0xaf, 0xe4, 0xf8, 0x8e, - 0x73, 0x5e, 0x0f, 0x79, 0x2e, 0x99, 0xa9, 0x0b, 0x3b, 0xdc, 0xf9, 0xdc, 0xb3, 0x4c, 0xb6, 0x10, - 0x2a, 0x8b, 0x22, 0x76, 0xac, 0x0b, 0xb9, 0x22, 0xc3, 0x17, 0x43, 0xf1, 0x87, 0x81, 0x6d, 0x55, - 0x79, 0x85, 0x60, 0x24, 0x45, 0x4f, 0xe1, 0x52, 0x28, 0xc9, 0xb1, 0xf0, 0xb2, 0x7b, 0xc9, 0x53, - 0xb8, 0x1c, 0x2a, 0xdb, 0x88, 0x78, 0xe9, 0xab, 0x9c, 0xbb, 0xcc, 0x16, 0xf9, 0xfc, 0x15, 0xfd, - 0x2c, 0xcf, 0x51, 0xa9, 0x02, 0x33, 0x03, 0x71, 0xa9, 0x5c, 0x91, 0x01, 0x0a, 0x7d, 0x01, 0xfd, - 0xad, 0xc4, 0x91, 0xb9, 0xe7, 0x19, 0x49, 0xb1, 0x2f, 0x49, 0x84, 0xa9, 0x38, 0xbc, 0xb0, 0x77, - 0xff, 0xdd, 0xf9, 0x91, 0x6f, 0xbd, 0x3b, 0x3f, 0xf2, 0x5f, 0xde, 0x9d, 0x1f, 0xf9, 0xce, 0xbb, - 0xf3, 0xca, 0xf7, 0xdf, 0x9d, 0x57, 0x7e, 0xf8, 0xee, 0xbc, 0xf2, 0xe3, 0x77, 0xe7, 0x95, 0x37, - 0x1f, 0xcc, 0x2b, 0x5f, 0x7d, 0x30, 0xaf, 0x7c, 0xed, 0xc1, 0xbc, 0xf2, 0x3b, 0x0f, 0xe6, 0x95, - 0xb7, 0x1f, 0xcc, 0x2b, 0xf7, 0x1f, 0xcc, 0x2b, 0xdf, 0x7a, 0x30, 0xaf, 0x7c, 0xe7, 0xc1, 0xbc, - 0xf2, 0xfd, 0x07, 0xf3, 0x23, 0x3f, 0x7c, 0x30, 0xaf, 0xfc, 0xf8, 0xc1, 0xfc, 0xc8, 0x9b, 0xdf, - 0x9d, 0x1f, 0x79, 0xeb, 0xbb, 0xf3, 0x23, 0x5f, 0xfd, 0xee, 0xbc, 0x02, 0x7f, 0xb8, 0x06, 0x59, - 0xf6, 0x4d, 0x32, 0xe1, 0x7b, 0xb5, 0x97, 0xdd, 0x63, 0x44, 0x9a, 0x82, 0xab, 0xfc, 0x47, 0xa8, - 0xbc, 0x81, 0x53, 0x7e, 0xaf, 0x6c, 0xee, 0x61, 0xbf, 0xc5, 0x96, 0xfd, 0xb7, 0x09, 0x18, 0xe3, - 0x4f, 0x83, 0xc3, 0x7e, 0x51, 0xfb, 0x1a, 0x24, 0x8f, 0x1b, 0x4d, 0xb3, 0xd3, 0x70, 0x4f, 0xd8, - 0x63, 0xd0, 0x47, 0x97, 0x7d, 0xb5, 0xf9, 0x83, 0xd3, 0xe7, 0xbb, 0x2d, 0xbb, 0xdb, 0x31, 0x3c, - 0x51, 0xfd, 0x3c, 0xa4, 0x8f, 0x51, 0xe3, 0xe8, 0xd8, 0xad, 0x36, 0xac, 0x6a, 0xad, 0x45, 0xba, - 0xe5, 0x09, 0x03, 0xe8, 0xd8, 0x86, 0x55, 0x6c, 0xe1, 0x93, 0xd5, 0x4d, 0xd7, 0x24, 0x77, 0xe9, - 0x69, 0x83, 0x7c, 0xd6, 0x2f, 0x40, 0xba, 0x83, 0x9c, 0x6e, 0xd3, 0xad, 0xd6, 0xec, 0xae, 0xe5, - 0x92, 0x7e, 0x56, 0x35, 0x52, 0x74, 0xac, 0x88, 0x87, 0xf4, 0xc7, 0x61, 0xc2, 0xed, 0x74, 0x51, - 0xd5, 0xa9, 0xd9, 0xae, 0xd3, 0x32, 0x2d, 0xd2, 0xcf, 0x26, 0x8d, 0x34, 0x1e, 0xdc, 0x65, 0x63, - 0xe4, 0xc7, 0xd8, 0x6b, 0x76, 0x07, 0x91, 0xdb, 0xe9, 0x98, 0x41, 0x0f, 0x74, 0x0d, 0xd4, 0x57, - 0xd0, 0x09, 0xb9, 0x61, 0x8b, 0x1b, 0xf8, 0xa3, 0xfe, 0x14, 0x8c, 0xd2, 0xbf, 0xa6, 0x42, 0xba, - 0x6b, 0xb2, 0x79, 0xed, 0x5d, 0x1a, 0x7d, 0x48, 0x6b, 0x30, 0x01, 0xfd, 0x16, 0x8c, 0xb9, 0xa8, - 0xd3, 0x31, 0x1b, 0x16, 0xb9, 0x79, 0x4a, 0xad, 0x2e, 0x84, 0x98, 0x61, 0x8f, 0x4a, 0x90, 0x1f, - 0xa5, 0x35, 0xb8, 0xbc, 0x7e, 0x0d, 0xd2, 0x44, 0x6e, 0xb5, 0x4a, 0xff, 0xe2, 0x4c, 0xaa, 0x6f, - 0x3c, 0xa7, 0xa8, 0x1c, 0xdf, 0x2b, 0xe0, 0x30, 0xfa, 0x83, 0x7c, 0x13, 0xe4, 0xb4, 0x8f, 0x87, - 0x9c, 0x96, 0x94, 0xde, 0x55, 0xd2, 0x36, 0xd2, 0x53, 0x33, 0x1e, 0xfa, 0x93, 0x7d, 0x5b, 0x90, - 0x16, 0xf5, 0xe2, 0x66, 0xa0, 0xed, 0x0f, 0x31, 0xc3, 0x93, 0xfe, 0xaf, 0xf9, 0xf7, 0xb1, 0x02, - 0x9d, 0xcf, 0xc5, 0x6e, 0x2a, 0x73, 0x3b, 0xa0, 0x05, 0xcf, 0x17, 0x42, 0x79, 0x49, 0xa6, 0xd4, - 0xc4, 0x8b, 0x25, 0x4f, 0xca, 0x7d, 0xc6, 0xec, 0x73, 0x30, 0x4a, 0xe3, 0x47, 0x4f, 0xc1, 0x98, - 0xff, 0x5b, 0x8f, 0x49, 0x88, 0xef, 0xec, 0x57, 0x76, 0xe9, 0x8f, 0xb6, 0xee, 0x6e, 0xe6, 0x77, - 0x76, 0xf7, 0x36, 0x8a, 0x1f, 0xd3, 0x62, 0xfa, 0x14, 0xa4, 0x0a, 0x1b, 0x9b, 0x9b, 0xd5, 0x42, - 0x7e, 0x63, 0xb3, 0x7c, 0x4f, 0x53, 0xb3, 0xf3, 0x30, 0x4a, 0xf5, 0x24, 0x3f, 0x3e, 0xd7, 0xb5, - 0xac, 0x13, 0xde, 0x3e, 0x90, 0x83, 0xec, 0xd7, 0x75, 0x18, 0xcb, 0x37, 0x9b, 0x5b, 0x66, 0xdb, - 0xd1, 0x5f, 0x80, 0x69, 0xfa, 0xd3, 0x15, 0x7b, 0x76, 0x89, 0xfc, 0x46, 0x22, 0x2e, 0x0e, 0x0a, - 0xfb, 0x2b, 0x06, 0xfe, 0x75, 0x33, 0xf1, 0xe5, 0x1e, 0x59, 0x6a, 0xe0, 0x5e, 0x0e, 0x7d, 0x0f, - 0x34, 0x3e, 0xb8, 0xde, 0xb4, 0x4d, 0x17, 0xf3, 0xc6, 0xd8, 0x4f, 0x18, 0xf6, 0xe7, 0xe5, 0xa2, - 0x94, 0xb6, 0x87, 0x41, 0xff, 0x28, 0x24, 0x37, 0x2c, 0xf7, 0xea, 0x2a, 0x66, 0xe3, 0x7f, 0x21, - 0xa8, 0x97, 0x8d, 0x8b, 0x50, 0x16, 0x0f, 0xc1, 0xd0, 0xd7, 0xd7, 0x30, 0x3a, 0x3e, 0x08, 0x4d, - 0x44, 0x7c, 0x34, 0x39, 0xd4, 0x9f, 0x83, 0x71, 0x7c, 0x77, 0x42, 0x4f, 0x9e, 0xe0, 0xad, 0x6b, - 0x0f, 0xdc, 0x93, 0xa1, 0x78, 0x1f, 0xc3, 0x09, 0xe8, 0xf9, 0x47, 0x07, 0x12, 0x08, 0x0a, 0xf8, - 0x18, 0x4c, 0xb0, 0xeb, 0x69, 0x30, 0xd6, 0x97, 0x60, 0x37, 0xa0, 0xc1, 0xae, 0xa8, 0xc1, 0xae, - 0xa7, 0x41, 0x72, 0x20, 0x81, 0xa8, 0x81, 0x77, 0xac, 0x17, 0x00, 0xd6, 0x1b, 0xaf, 0xa3, 0x3a, - 0x55, 0x81, 0xfe, 0xfd, 0xa0, 0x6c, 0x08, 0x83, 0x2f, 0x44, 0x29, 0x04, 0x94, 0x5e, 0x86, 0xd4, - 0xee, 0xa1, 0x4f, 0x02, 0x3d, 0x79, 0xec, 0xa9, 0x71, 0x18, 0x60, 0x11, 0x71, 0x9e, 0x2a, 0xf4, - 0x62, 0x52, 0x83, 0x55, 0x11, 0xae, 0x46, 0x40, 0xf9, 0xaa, 0x50, 0x92, 0x74, 0x84, 0x2a, 0x02, - 0x8b, 0x88, 0xc3, 0xc5, 0xb0, 0x60, 0xdb, 0x58, 0x92, 0x55, 0xa5, 0x85, 0x10, 0x0a, 0x26, 0xc1, - 0x8a, 0x21, 0x3b, 0x22, 0x1e, 0x21, 0x41, 0x8e, 0xc1, 0x93, 0xfd, 0x3d, 0xc2, 0x65, 0xb8, 0x47, - 0xf8, 0xb1, 0x98, 0x67, 0xe4, 0x8d, 0x56, 0xcc, 0x33, 0x15, 0x99, 0x67, 0x5c, 0x34, 0x90, 0x67, - 0x7c, 0x58, 0xff, 0x38, 0x4c, 0xf1, 0x31, 0x5c, 0x9e, 0x30, 0xa9, 0xc6, 0xfe, 0xc2, 0x5a, 0x7f, - 0x52, 0x26, 0x49, 0x39, 0x83, 0x78, 0xbd, 0x02, 0x93, 0x7c, 0x68, 0xcb, 0x21, 0x97, 0x3b, 0xcd, - 0xfe, 0x78, 0x46, 0x7f, 0x46, 0x2a, 0x48, 0x09, 0x03, 0xe8, 0xb9, 0x12, 0xcc, 0x86, 0x57, 0x23, - 0xb1, 0xfc, 0x8e, 0xd3, 0xf2, 0x7b, 0x46, 0x2c, 0xbf, 0x8a, 0x58, 0xbe, 0x8b, 0x70, 0x36, 0xb4, - 0xf6, 0x44, 0x91, 0xc4, 0x44, 0x92, 0xdb, 0x30, 0x21, 0x95, 0x1c, 0x11, 0x9c, 0x08, 0x01, 0x27, - 0x7a, 0xc1, 0x7e, 0x68, 0x85, 0xac, 0x1e, 0x12, 0x58, 0x15, 0xc1, 0x1f, 0x85, 0x49, 0xb9, 0xde, - 0x88, 0xe8, 0x89, 0x10, 0xf4, 0x44, 0x08, 0x3a, 0xfc, 0xdc, 0xf1, 0x10, 0x74, 0x3c, 0x80, 0xde, - 0xed, 0x7b, 0xee, 0xe9, 0x10, 0xf4, 0x74, 0x08, 0x3a, 0xfc, 0xdc, 0x7a, 0x08, 0x5a, 0x17, 0xd1, - 0xcf, 0xc0, 0x54, 0xa0, 0xc4, 0x88, 0xf0, 0xb1, 0x10, 0xf8, 0x98, 0x08, 0x7f, 0x16, 0xb4, 0x60, - 0x71, 0x11, 0xf1, 0x53, 0x21, 0xf8, 0xa9, 0xb0, 0xd3, 0x87, 0x6b, 0x3f, 0x1a, 0x02, 0x1f, 0x0d, - 0x3d, 0x7d, 0x38, 0x5e, 0x0b, 0xc1, 0x6b, 0x22, 0x3e, 0x07, 0x69, 0xb1, 0x9a, 0x88, 0xd8, 0x64, - 0x08, 0x36, 0x19, 0xb4, 0xbb, 0x54, 0x4c, 0xa2, 0x22, 0x7d, 0xbc, 0x4f, 0xba, 0x48, 0x25, 0x24, - 0x8a, 0x24, 0x2d, 0x92, 0x7c, 0x02, 0xce, 0x84, 0x95, 0x8c, 0x10, 0x8e, 0x45, 0x91, 0x63, 0x12, - 0xf7, 0x88, 0x7e, 0xb3, 0x67, 0xb6, 0x03, 0x8d, 0xd3, 0xdc, 0x4b, 0x30, 0x13, 0x52, 0x38, 0x42, - 0x68, 0x97, 0xe5, 0x6e, 0x2c, 0x23, 0xd0, 0x92, 0x22, 0xd0, 0xb0, 0x8e, 0x76, 0xec, 0x86, 0xe5, - 0x8a, 0x5d, 0xd9, 0x37, 0x66, 0x60, 0x92, 0x95, 0xa7, 0xed, 0x4e, 0x1d, 0x75, 0x50, 0x5d, 0xff, - 0x73, 0xfd, 0x7b, 0xa7, 0x95, 0xde, 0xa2, 0xc6, 0x50, 0xa7, 0x68, 0xa1, 0x5e, 0xea, 0xdb, 0x42, - 0x5d, 0x8e, 0xa6, 0x8f, 0xea, 0xa4, 0x8a, 0x3d, 0x9d, 0xd4, 0x93, 0xfd, 0x49, 0xfb, 0x35, 0x54, - 0xc5, 0x9e, 0x86, 0x6a, 0x30, 0x49, 0x68, 0x5f, 0xb5, 0xde, 0xdb, 0x57, 0x2d, 0xf6, 0x67, 0xe9, - 0xdf, 0x5e, 0xad, 0xf7, 0xb6, 0x57, 0x11, 0x3c, 0xe1, 0x5d, 0xd6, 0x7a, 0x6f, 0x97, 0x35, 0x80, - 0xa7, 0x7f, 0xb3, 0xb5, 0xde, 0xdb, 0x6c, 0x45, 0xf0, 0x84, 0xf7, 0x5c, 0x1b, 0x21, 0x3d, 0xd7, - 0x53, 0xfd, 0x89, 0x06, 0xb5, 0x5e, 0x9b, 0x61, 0xad, 0xd7, 0xd2, 0x00, 0xa5, 0x06, 0x76, 0x60, - 0x1b, 0x21, 0x1d, 0x58, 0x94, 0x62, 0x7d, 0x1a, 0xb1, 0xcd, 0xb0, 0x46, 0x2c, 0x52, 0xb1, 0x7e, - 0xfd, 0xd8, 0x2f, 0x04, 0xfb, 0xb1, 0x4b, 0xfd, 0x99, 0xc2, 0xdb, 0xb2, 0xf5, 0xde, 0xb6, 0x6c, - 0x31, 0x2a, 0xe7, 0xc2, 0xba, 0xb3, 0x97, 0xfa, 0x76, 0x67, 0x43, 0xa4, 0x70, 0x54, 0x93, 0xf6, - 0x62, 0xbf, 0x26, 0x6d, 0x39, 0x9a, 0x7b, 0x70, 0xaf, 0xb6, 0xdf, 0xa7, 0x57, 0x7b, 0x3a, 0x9a, - 0xf8, 0xe7, 0x2d, 0xdb, 0xcf, 0x5b, 0xb6, 0x9f, 0xb7, 0x6c, 0x3f, 0x6f, 0xd9, 0x7e, 0xf6, 0x2d, - 0x5b, 0x2e, 0xfe, 0x99, 0x2f, 0x2d, 0x28, 0xd9, 0xff, 0xac, 0x7a, 0x7f, 0xef, 0xeb, 0x85, 0x86, - 0x7b, 0x8c, 0xcb, 0xdb, 0x16, 0xa4, 0xc9, 0xef, 0xcf, 0xb6, 0xcc, 0x76, 0xbb, 0x61, 0x1d, 0xb1, - 0x9e, 0x6d, 0xa9, 0xf7, 0x51, 0x22, 0x03, 0x90, 0xbf, 0x75, 0xb2, 0x45, 0x85, 0xd9, 0x72, 0x63, - 0xf9, 0x23, 0xfa, 0x5d, 0x48, 0xb5, 0x9c, 0x23, 0x8f, 0x2d, 0xd6, 0xb3, 0x10, 0x06, 0xd8, 0xe8, - 0x95, 0xfa, 0x64, 0xd0, 0xf2, 0x06, 0xb0, 0x6a, 0x07, 0x27, 0xae, 0xaf, 0x9a, 0x1a, 0xa5, 0x1a, - 0xf6, 0xa9, 0xac, 0xda, 0x81, 0x3f, 0x82, 0xc3, 0x36, 0xa8, 0x7b, 0x54, 0xa5, 0x93, 0x82, 0xe7, - 0x05, 0x98, 0x0a, 0x68, 0x1b, 0x92, 0xf3, 0x0f, 0xe1, 0x1b, 0xac, 0x58, 0x50, 0xf3, 0xa8, 0x9c, - 0x10, 0x03, 0x32, 0xfb, 0x18, 0x4c, 0x48, 0xdc, 0x7a, 0x1a, 0x94, 0x43, 0xf6, 0x75, 0x4a, 0xe5, - 0x30, 0xfb, 0x45, 0x05, 0x52, 0xec, 0x55, 0x82, 0x1d, 0xb3, 0xd1, 0xd1, 0x9f, 0x87, 0x78, 0x93, - 0x7f, 0xa5, 0xe9, 0x61, 0xbf, 0x3e, 0x4b, 0x18, 0xf4, 0x75, 0x48, 0x74, 0xbc, 0xaf, 0x3c, 0x3d, - 0xd4, 0x77, 0x62, 0x09, 0x3c, 0x7b, 0x5f, 0x81, 0x69, 0xf6, 0xa6, 0xab, 0xc3, 0x5e, 0x80, 0x36, - 0xdb, 0x73, 0x5f, 0x57, 0x60, 0xdc, 0x3b, 0xd2, 0x0f, 0x60, 0xd2, 0x3b, 0xa0, 0x2f, 0xd9, 0xd3, - 0x48, 0xcd, 0x09, 0x16, 0xee, 0xe1, 0x58, 0x0e, 0xf9, 0x44, 0x37, 0xa3, 0xe8, 0x9a, 0x2c, 0x0f, - 0xce, 0xe5, 0x61, 0x26, 0x44, 0xec, 0x34, 0x0b, 0x72, 0xf6, 0x02, 0x8c, 0x57, 0x6c, 0x97, 0xfe, - 0x72, 0x8e, 0x7e, 0x46, 0xd8, 0x55, 0x28, 0xc4, 0xb4, 0x11, 0x02, 0x5e, 0xba, 0x00, 0x63, 0x2c, - 0xfb, 0xf5, 0x51, 0x88, 0x6d, 0xe5, 0xb5, 0x11, 0xf2, 0x7f, 0x41, 0x53, 0xc8, 0xff, 0x45, 0x2d, - 0x56, 0xd8, 0x7c, 0x88, 0x9d, 0xa6, 0x91, 0x7e, 0x3b, 0x4d, 0x07, 0xa3, 0xd4, 0x3c, 0xff, 0x3f, - 0x00, 0x00, 0xff, 0xff, 0x59, 0xa3, 0x4d, 0xdb, 0xec, 0x81, 0x00, 0x00, + 0x99, 0x1e, 0x1b, 0x0d, 0x92, 0xe0, 0x0f, 0x90, 0x6c, 0x36, 0x67, 0x28, 0x88, 0x1a, 0x91, 0x33, + 0xd0, 0x68, 0x44, 0xd1, 0x16, 0x67, 0x86, 0xc3, 0xb9, 0x61, 0x2c, 0x69, 0x01, 0x10, 0x1c, 0x71, + 0x4c, 0x82, 0x74, 0x93, 0xb4, 0x34, 0x56, 0x12, 0x54, 0x13, 0x38, 0x24, 0x21, 0x01, 0xdd, 0x58, + 0x74, 0x43, 0x12, 0x55, 0xa9, 0x94, 0xb2, 0x4e, 0x36, 0xde, 0xa4, 0x72, 0xdd, 0xa4, 0xe2, 0x75, + 0x7c, 0x91, 0x77, 0x6b, 0xd7, 0xde, 0xcd, 0xcd, 0xeb, 0xdd, 0x38, 0xbb, 0x4e, 0x2a, 0xab, 0x3c, + 0x38, 0x99, 0xbc, 0xa4, 0xbc, 0xc9, 0x4b, 0xca, 0x95, 0x52, 0x59, 0x63, 0xa7, 0xd6, 0x49, 0x9c, + 0xac, 0xb3, 0x51, 0x55, 0x5c, 0xe5, 0x7d, 0x48, 0x9d, 0x5b, 0xf7, 0xe9, 0xd3, 0x0d, 0x34, 0x38, + 0x92, 0xec, 0x7d, 0xd0, 0xcb, 0x0c, 0xfa, 0x9c, 0xff, 0xfb, 0xfa, 0xef, 0xff, 0x76, 0xfe, 0xee, + 0xd3, 0x00, 0xe1, 0x8f, 0x6f, 0xc2, 0xd9, 0x43, 0xdb, 0x3e, 0x6c, 0xa2, 0x8b, 0xed, 0x8e, 0xed, + 0xda, 0xfb, 0xdd, 0x83, 0x8b, 0x75, 0xe4, 0xd4, 0x3a, 0x8d, 0xb6, 0x6b, 0x77, 0x96, 0xc8, 0x98, + 0x3e, 0x49, 0x25, 0x96, 0xb8, 0x44, 0x6e, 0x13, 0xa6, 0xd6, 0x1a, 0x4d, 0xb4, 0xea, 0x09, 0xee, + 0x20, 0x57, 0xbf, 0x01, 0xc9, 0x83, 0x46, 0x13, 0x65, 0x95, 0xb3, 0xea, 0x42, 0x7a, 0xf9, 0xfc, + 0x92, 0x04, 0x5a, 0x0a, 0x22, 0xb6, 0xf1, 0xb0, 0x41, 0x10, 0xb9, 0xef, 0x27, 0x61, 0x3a, 0x62, + 0x56, 0xd7, 0x21, 0x69, 0x99, 0x2d, 0xcc, 0xa8, 0x2c, 0x8c, 0x19, 0xe4, 0xb3, 0x9e, 0x85, 0xd1, + 0xb6, 0x59, 0x7b, 0xd9, 0x3c, 0x44, 0xd9, 0x04, 0x19, 0xe6, 0x87, 0xfa, 0x1c, 0x40, 0x1d, 0xb5, + 0x91, 0x55, 0x47, 0x56, 0xed, 0x38, 0xab, 0x9e, 0x55, 0x17, 0xc6, 0x0c, 0x61, 0x44, 0xff, 0x08, + 0x4c, 0xb5, 0xbb, 0xfb, 0xcd, 0x46, 0xad, 0x2a, 0x88, 0xc1, 0x59, 0x75, 0x61, 0xd8, 0xd0, 0xe8, + 0xc4, 0xaa, 0x2f, 0xfc, 0x04, 0x4c, 0xbe, 0x8a, 0xcc, 0x97, 0x45, 0xd1, 0x34, 0x11, 0x9d, 0xc0, + 0xc3, 0x82, 0x60, 0x09, 0x32, 0x2d, 0xe4, 0x38, 0xe6, 0x21, 0xaa, 0xba, 0xc7, 0x6d, 0x94, 0x4d, + 0x92, 0xab, 0x3f, 0x1b, 0xba, 0x7a, 0xf9, 0xca, 0xd3, 0x0c, 0xb5, 0x7b, 0xdc, 0x46, 0x7a, 0x01, + 0xc6, 0x90, 0xd5, 0x6d, 0x51, 0x86, 0xe1, 0x1e, 0xf6, 0x2b, 0x5b, 0xdd, 0x96, 0xcc, 0x92, 0xc2, + 0x30, 0x46, 0x31, 0xea, 0xa0, 0xce, 0x2b, 0x8d, 0x1a, 0xca, 0x8e, 0x10, 0x82, 0x27, 0x42, 0x04, + 0x3b, 0x74, 0x5e, 0xe6, 0xe0, 0x38, 0xbd, 0x04, 0x63, 0xe8, 0x35, 0x17, 0x59, 0x4e, 0xc3, 0xb6, + 0xb2, 0xa3, 0x84, 0xe4, 0xf1, 0x08, 0x2f, 0xa2, 0x66, 0x5d, 0xa6, 0xf0, 0x71, 0xfa, 0x35, 0x18, + 0xb5, 0xdb, 0x6e, 0xc3, 0xb6, 0x9c, 0x6c, 0xea, 0xac, 0xb2, 0x90, 0x5e, 0x3e, 0x13, 0x19, 0x08, + 0x5b, 0x54, 0xc6, 0xe0, 0xc2, 0xfa, 0x3a, 0x68, 0x8e, 0xdd, 0xed, 0xd4, 0x50, 0xb5, 0x66, 0xd7, + 0x51, 0xb5, 0x61, 0x1d, 0xd8, 0xd9, 0x31, 0x42, 0x30, 0x1f, 0xbe, 0x10, 0x22, 0x58, 0xb2, 0xeb, + 0x68, 0xdd, 0x3a, 0xb0, 0x8d, 0x09, 0x27, 0x70, 0xac, 0xcf, 0xc0, 0x88, 0x73, 0x6c, 0xb9, 0xe6, + 0x6b, 0xd9, 0x0c, 0x89, 0x10, 0x76, 0x94, 0xfb, 0xfd, 0x11, 0x98, 0x1c, 0x24, 0xc4, 0x6e, 0xc1, + 0xf0, 0x01, 0xbe, 0xca, 0x6c, 0xe2, 0x24, 0x36, 0xa0, 0x98, 0xa0, 0x11, 0x47, 0x1e, 0xd0, 0x88, + 0x05, 0x48, 0x5b, 0xc8, 0x71, 0x51, 0x9d, 0x46, 0x84, 0x3a, 0x60, 0x4c, 0x01, 0x05, 0x85, 0x43, + 0x2a, 0xf9, 0x40, 0x21, 0xf5, 0x02, 0x4c, 0x7a, 0x2a, 0x55, 0x3b, 0xa6, 0x75, 0xc8, 0x63, 0xf3, + 0x62, 0x9c, 0x26, 0x4b, 0x65, 0x8e, 0x33, 0x30, 0xcc, 0x98, 0x40, 0x81, 0x63, 0x7d, 0x15, 0xc0, + 0xb6, 0x90, 0x7d, 0x50, 0xad, 0xa3, 0x5a, 0x33, 0x9b, 0xea, 0x61, 0xa5, 0x2d, 0x2c, 0x12, 0xb2, + 0x92, 0x4d, 0x47, 0x6b, 0x4d, 0xfd, 0xa6, 0x1f, 0x6a, 0xa3, 0x3d, 0x22, 0x65, 0x93, 0x26, 0x59, + 0x28, 0xda, 0xf6, 0x60, 0xa2, 0x83, 0x70, 0xdc, 0xa3, 0x3a, 0xbb, 0xb2, 0x31, 0xa2, 0xc4, 0x52, + 0xec, 0x95, 0x19, 0x0c, 0x46, 0x2f, 0x6c, 0xbc, 0x23, 0x1e, 0xea, 0x8f, 0x81, 0x37, 0x50, 0x25, + 0x61, 0x05, 0xa4, 0x0a, 0x65, 0xf8, 0x60, 0xc5, 0x6c, 0xa1, 0xd9, 0xd7, 0x61, 0x22, 0x68, 0x1e, + 0xfd, 0x14, 0x0c, 0x3b, 0xae, 0xd9, 0x71, 0x49, 0x14, 0x0e, 0x1b, 0xf4, 0x40, 0xd7, 0x40, 0x45, + 0x56, 0x9d, 0x54, 0xb9, 0x61, 0x03, 0x7f, 0xd4, 0x7f, 0xce, 0xbf, 0x60, 0x95, 0x5c, 0xf0, 0x85, + 0xb0, 0x47, 0x03, 0xcc, 0xf2, 0x75, 0xcf, 0x5e, 0x87, 0xf1, 0xc0, 0x05, 0x0c, 0x7a, 0xea, 0xdc, + 0x5f, 0x84, 0xd3, 0x91, 0xd4, 0xfa, 0x0b, 0x70, 0xaa, 0x6b, 0x35, 0x2c, 0x17, 0x75, 0xda, 0x1d, + 0x84, 0x23, 0x96, 0x9e, 0x2a, 0xfb, 0x47, 0xa3, 0x3d, 0x62, 0x6e, 0x4f, 0x94, 0xa6, 0x2c, 0xc6, + 0x74, 0x37, 0x3c, 0xb8, 0x38, 0x96, 0xfa, 0xc1, 0xa8, 0xf6, 0xc6, 0x1b, 0x6f, 0xbc, 0x91, 0xc8, + 0x7d, 0x76, 0x04, 0x4e, 0x45, 0xe5, 0x4c, 0x64, 0xfa, 0xce, 0xc0, 0x88, 0xd5, 0x6d, 0xed, 0xa3, + 0x0e, 0x31, 0xd2, 0xb0, 0xc1, 0x8e, 0xf4, 0x02, 0x0c, 0x37, 0xcd, 0x7d, 0xd4, 0xcc, 0x26, 0xcf, + 0x2a, 0x0b, 0x13, 0xcb, 0x1f, 0x19, 0x28, 0x2b, 0x97, 0x36, 0x30, 0xc4, 0xa0, 0x48, 0xfd, 0x19, + 0x48, 0xb2, 0x12, 0x8d, 0x19, 0x16, 0x07, 0x63, 0xc0, 0xb9, 0x64, 0x10, 0x9c, 0xfe, 0x08, 0x8c, + 0xe1, 0xff, 0x69, 0x6c, 0x8c, 0x10, 0x9d, 0x53, 0x78, 0x00, 0xc7, 0x85, 0x3e, 0x0b, 0x29, 0x92, + 0x26, 0x75, 0xc4, 0x97, 0x36, 0xef, 0x18, 0x07, 0x56, 0x1d, 0x1d, 0x98, 0xdd, 0xa6, 0x5b, 0x7d, + 0xc5, 0x6c, 0x76, 0x11, 0x09, 0xf8, 0x31, 0x23, 0xc3, 0x06, 0x3f, 0x89, 0xc7, 0xf4, 0x79, 0x48, + 0xd3, 0xac, 0x6a, 0x58, 0x75, 0xf4, 0x1a, 0xa9, 0x9e, 0xc3, 0x06, 0x4d, 0xb4, 0x75, 0x3c, 0x82, + 0x4f, 0xff, 0x92, 0x63, 0x5b, 0x3c, 0x34, 0xc9, 0x29, 0xf0, 0x00, 0x39, 0xfd, 0x75, 0xb9, 0x70, + 0x3f, 0x1a, 0x7d, 0x79, 0x72, 0x4c, 0xe5, 0xbe, 0x91, 0x80, 0x24, 0xa9, 0x17, 0x93, 0x90, 0xde, + 0xbd, 0xbb, 0x5d, 0xae, 0xae, 0x6e, 0xed, 0x15, 0x37, 0xca, 0x9a, 0xa2, 0x4f, 0x00, 0x90, 0x81, + 0xb5, 0x8d, 0xad, 0xc2, 0xae, 0x96, 0xf0, 0x8e, 0xd7, 0x2b, 0xbb, 0xd7, 0x56, 0x34, 0xd5, 0x03, + 0xec, 0xd1, 0x81, 0xa4, 0x28, 0x70, 0x65, 0x59, 0x1b, 0xd6, 0x35, 0xc8, 0x50, 0x82, 0xf5, 0x17, + 0xca, 0xab, 0xd7, 0x56, 0xb4, 0x91, 0xe0, 0xc8, 0x95, 0x65, 0x6d, 0x54, 0x1f, 0x87, 0x31, 0x32, + 0x52, 0xdc, 0xda, 0xda, 0xd0, 0x52, 0x1e, 0xe7, 0xce, 0xae, 0xb1, 0x5e, 0xb9, 0xad, 0x8d, 0x79, + 0x9c, 0xb7, 0x8d, 0xad, 0xbd, 0x6d, 0x0d, 0x3c, 0x86, 0xcd, 0xf2, 0xce, 0x4e, 0xe1, 0x76, 0x59, + 0x4b, 0x7b, 0x12, 0xc5, 0xbb, 0xbb, 0xe5, 0x1d, 0x2d, 0x13, 0x50, 0xeb, 0xca, 0xb2, 0x36, 0xee, + 0x9d, 0xa2, 0x5c, 0xd9, 0xdb, 0xd4, 0x26, 0xf4, 0x29, 0x18, 0xa7, 0xa7, 0xe0, 0x4a, 0x4c, 0x4a, + 0x43, 0xd7, 0x56, 0x34, 0xcd, 0x57, 0x84, 0xb2, 0x4c, 0x05, 0x06, 0xae, 0xad, 0x68, 0x7a, 0xae, + 0x04, 0xc3, 0x24, 0xba, 0x74, 0x1d, 0x26, 0x36, 0x0a, 0xc5, 0xf2, 0x46, 0x75, 0x6b, 0x7b, 0x77, + 0x7d, 0xab, 0x52, 0xd8, 0xd0, 0x14, 0x7f, 0xcc, 0x28, 0x7f, 0x62, 0x6f, 0xdd, 0x28, 0xaf, 0x6a, + 0x09, 0x71, 0x6c, 0xbb, 0x5c, 0xd8, 0x2d, 0xaf, 0x6a, 0x6a, 0xae, 0x06, 0xa7, 0xa2, 0xea, 0x64, + 0x64, 0x66, 0x08, 0x2e, 0x4e, 0xf4, 0x70, 0x31, 0xe1, 0x0a, 0xb9, 0xf8, 0x7b, 0x09, 0x98, 0x8e, + 0x58, 0x2b, 0x22, 0x4f, 0xf2, 0x2c, 0x0c, 0xd3, 0x10, 0xa5, 0xab, 0xe7, 0x93, 0x91, 0x8b, 0x0e, + 0x09, 0xd8, 0xd0, 0x0a, 0x4a, 0x70, 0x62, 0x07, 0xa1, 0xf6, 0xe8, 0x20, 0x30, 0x45, 0xa8, 0xa6, + 0xff, 0xf9, 0x50, 0x4d, 0xa7, 0xcb, 0xde, 0xb5, 0x41, 0x96, 0x3d, 0x32, 0x76, 0xb2, 0xda, 0x3e, + 0x1c, 0x51, 0xdb, 0x6f, 0xc1, 0x54, 0x88, 0x68, 0xe0, 0x1a, 0xfb, 0x69, 0x05, 0xb2, 0xbd, 0x8c, + 0x13, 0x53, 0xe9, 0x12, 0x81, 0x4a, 0x77, 0x4b, 0xb6, 0xe0, 0xb9, 0xde, 0x4e, 0x08, 0xf9, 0xfa, + 0x2b, 0x0a, 0xcc, 0x44, 0x77, 0x8a, 0x91, 0x3a, 0x3c, 0x03, 0x23, 0x2d, 0xe4, 0x1e, 0xd9, 0xbc, + 0x5b, 0xba, 0x10, 0xb1, 0x06, 0xe3, 0x69, 0xd9, 0xd9, 0x0c, 0x25, 0x2e, 0xe2, 0x6a, 0xaf, 0x76, + 0x8f, 0x6a, 0x13, 0xd2, 0xf4, 0x97, 0x12, 0x70, 0x3a, 0x92, 0x3c, 0x52, 0xd1, 0x47, 0x01, 0x1a, + 0x56, 0xbb, 0xeb, 0xd2, 0x8e, 0x88, 0x16, 0xd8, 0x31, 0x32, 0x42, 0x8a, 0x17, 0x2e, 0x9e, 0x5d, + 0xd7, 0x9b, 0x57, 0xc9, 0x3c, 0xd0, 0x21, 0x22, 0x70, 0xc3, 0x57, 0x34, 0x49, 0x14, 0x9d, 0xeb, + 0x71, 0xa5, 0xa1, 0xc0, 0xbc, 0x04, 0x5a, 0xad, 0xd9, 0x40, 0x96, 0x5b, 0x75, 0xdc, 0x0e, 0x32, + 0x5b, 0x0d, 0xeb, 0x90, 0xac, 0x20, 0xa9, 0xfc, 0xf0, 0x81, 0xd9, 0x74, 0x90, 0x31, 0x49, 0xa7, + 0x77, 0xf8, 0x2c, 0x46, 0x90, 0x00, 0xea, 0x08, 0x88, 0x91, 0x00, 0x82, 0x4e, 0x7b, 0x88, 0xdc, + 0xef, 0xa4, 0x20, 0x2d, 0xf4, 0xd5, 0xfa, 0x39, 0xc8, 0xbc, 0x64, 0xbe, 0x62, 0x56, 0xf9, 0xbd, + 0x12, 0xb5, 0x44, 0x1a, 0x8f, 0x6d, 0xb3, 0xfb, 0xa5, 0x4b, 0x70, 0x8a, 0x88, 0xd8, 0x5d, 0x17, + 0x75, 0xaa, 0xb5, 0xa6, 0xe9, 0x38, 0xc4, 0x68, 0x29, 0x22, 0xaa, 0xe3, 0xb9, 0x2d, 0x3c, 0x55, + 0xe2, 0x33, 0xfa, 0x55, 0x98, 0x26, 0x88, 0x56, 0xb7, 0xe9, 0x36, 0xda, 0x4d, 0x54, 0xc5, 0x77, + 0x6f, 0x0e, 0x59, 0x49, 0x3c, 0xcd, 0xa6, 0xb0, 0xc4, 0x26, 0x13, 0xc0, 0x1a, 0x39, 0xfa, 0x2a, + 0x3c, 0x4a, 0x60, 0x87, 0xc8, 0x42, 0x1d, 0xd3, 0x45, 0x55, 0xf4, 0xf3, 0x5d, 0xb3, 0xe9, 0x54, + 0x4d, 0xab, 0x5e, 0x3d, 0x32, 0x9d, 0xa3, 0xec, 0x29, 0x4c, 0x50, 0x4c, 0x64, 0x15, 0xe3, 0x61, + 0x2c, 0x78, 0x9b, 0xc9, 0x95, 0x89, 0x58, 0xc1, 0xaa, 0x3f, 0x67, 0x3a, 0x47, 0x7a, 0x1e, 0x66, + 0x08, 0x8b, 0xe3, 0x76, 0x1a, 0xd6, 0x61, 0xb5, 0x76, 0x84, 0x6a, 0x2f, 0x57, 0xbb, 0xee, 0xc1, + 0x8d, 0xec, 0x23, 0xe2, 0xf9, 0x89, 0x86, 0x3b, 0x44, 0xa6, 0x84, 0x45, 0xf6, 0xdc, 0x83, 0x1b, + 0xfa, 0x0e, 0x64, 0xb0, 0x33, 0x5a, 0x8d, 0xd7, 0x51, 0xf5, 0xc0, 0xee, 0x90, 0xa5, 0x71, 0x22, + 0xa2, 0x34, 0x09, 0x16, 0x5c, 0xda, 0x62, 0x80, 0x4d, 0xbb, 0x8e, 0xf2, 0xc3, 0x3b, 0xdb, 0xe5, + 0xf2, 0xaa, 0x91, 0xe6, 0x2c, 0x6b, 0x76, 0x07, 0x07, 0xd4, 0xa1, 0xed, 0x19, 0x38, 0x4d, 0x03, + 0xea, 0xd0, 0xe6, 0xe6, 0xbd, 0x0a, 0xd3, 0xb5, 0x1a, 0xbd, 0xe6, 0x46, 0xad, 0xca, 0xee, 0xb1, + 0x9c, 0xac, 0x16, 0x30, 0x56, 0xad, 0x76, 0x9b, 0x0a, 0xb0, 0x18, 0x77, 0xf4, 0x9b, 0x70, 0xda, + 0x37, 0x96, 0x08, 0x9c, 0x0a, 0x5d, 0xa5, 0x0c, 0xbd, 0x0a, 0xd3, 0xed, 0xe3, 0x30, 0x50, 0x0f, + 0x9c, 0xb1, 0x7d, 0x2c, 0xc3, 0xae, 0xc3, 0xa9, 0xf6, 0x51, 0x3b, 0x8c, 0x5b, 0x14, 0x71, 0x7a, + 0xfb, 0xa8, 0x2d, 0x03, 0x1f, 0x27, 0x37, 0xdc, 0x1d, 0x54, 0x33, 0x5d, 0x54, 0xcf, 0x3e, 0x24, + 0x8a, 0x0b, 0x13, 0xfa, 0x45, 0xd0, 0x6a, 0xb5, 0x2a, 0xb2, 0xcc, 0xfd, 0x26, 0xaa, 0x9a, 0x1d, + 0x64, 0x99, 0x4e, 0x76, 0x5e, 0x14, 0x9e, 0xa8, 0xd5, 0xca, 0x64, 0xb6, 0x40, 0x26, 0xf5, 0x45, + 0x98, 0xb2, 0xf7, 0x5f, 0xaa, 0xd1, 0x90, 0xac, 0xb6, 0x3b, 0xe8, 0xa0, 0xf1, 0x5a, 0xf6, 0x3c, + 0xb1, 0xef, 0x24, 0x9e, 0x20, 0x01, 0xb9, 0x4d, 0x86, 0xf5, 0x27, 0x41, 0xab, 0x39, 0x47, 0x66, + 0xa7, 0x4d, 0x6a, 0xb2, 0xd3, 0x36, 0x6b, 0x28, 0xfb, 0x38, 0x15, 0xa5, 0xe3, 0x15, 0x3e, 0x8c, + 0x53, 0xc2, 0x79, 0xb5, 0x71, 0xe0, 0x72, 0xc6, 0x27, 0x68, 0x4a, 0x90, 0x31, 0xc6, 0xb6, 0x00, + 0x1a, 0x36, 0x45, 0xe0, 0xc4, 0x0b, 0x44, 0x6c, 0xa2, 0x7d, 0xd4, 0x16, 0xcf, 0xfb, 0x18, 0x8c, + 0x63, 0x49, 0xff, 0xa4, 0x4f, 0xd2, 0x86, 0xac, 0x7d, 0x24, 0x9c, 0xf1, 0x03, 0xeb, 0x8d, 0x73, + 0x79, 0xc8, 0x88, 0xf1, 0xa9, 0x8f, 0x01, 0x8d, 0x50, 0x4d, 0xc1, 0xcd, 0x4a, 0x69, 0x6b, 0x15, + 0xb7, 0x19, 0x9f, 0x2a, 0x6b, 0x09, 0xdc, 0xee, 0x6c, 0xac, 0xef, 0x96, 0xab, 0xc6, 0x5e, 0x65, + 0x77, 0x7d, 0xb3, 0xac, 0xa9, 0x62, 0x5f, 0xfd, 0xad, 0x04, 0x4c, 0x04, 0x6f, 0x91, 0xf4, 0x8f, + 0xc1, 0x43, 0xfc, 0x79, 0x86, 0x83, 0xdc, 0xea, 0xab, 0x8d, 0x0e, 0x49, 0x99, 0x96, 0x49, 0x97, + 0x2f, 0xcf, 0x69, 0xa7, 0x98, 0xd4, 0x0e, 0x72, 0x9f, 0x6f, 0x74, 0x70, 0x42, 0xb4, 0x4c, 0x57, + 0xdf, 0x80, 0x79, 0xcb, 0xae, 0x3a, 0xae, 0x69, 0xd5, 0xcd, 0x4e, 0xbd, 0xea, 0x3f, 0x49, 0xaa, + 0x9a, 0xb5, 0x1a, 0x72, 0x1c, 0x9b, 0x2e, 0x55, 0x1e, 0xcb, 0x19, 0xcb, 0xde, 0x61, 0xc2, 0x7e, + 0x0d, 0x2f, 0x30, 0x51, 0x29, 0xc0, 0xd4, 0x5e, 0x01, 0xf6, 0x08, 0x8c, 0xb5, 0xcc, 0x76, 0x15, + 0x59, 0x6e, 0xe7, 0x98, 0x34, 0xc6, 0x29, 0x23, 0xd5, 0x32, 0xdb, 0x65, 0x7c, 0xfc, 0xd3, 0xb9, + 0x3f, 0xf9, 0xaf, 0x2a, 0x64, 0xc4, 0xe6, 0x18, 0xdf, 0x6b, 0xd4, 0xc8, 0x3a, 0xa2, 0x90, 0x4a, + 0xf3, 0x58, 0xdf, 0x56, 0x7a, 0xa9, 0x84, 0x17, 0x98, 0xfc, 0x08, 0x6d, 0x59, 0x0d, 0x8a, 0xc4, + 0x8b, 0x3b, 0xae, 0x2d, 0x88, 0xb6, 0x08, 0x29, 0x83, 0x1d, 0xe9, 0xb7, 0x61, 0xe4, 0x25, 0x87, + 0x70, 0x8f, 0x10, 0xee, 0xf3, 0xfd, 0xb9, 0xef, 0xec, 0x10, 0xf2, 0xb1, 0x3b, 0x3b, 0xd5, 0xca, + 0x96, 0xb1, 0x59, 0xd8, 0x30, 0x18, 0x5c, 0x7f, 0x18, 0x92, 0x4d, 0xf3, 0xf5, 0xe3, 0xe0, 0x52, + 0x44, 0x86, 0x06, 0x35, 0xfc, 0xc3, 0x90, 0x7c, 0x15, 0x99, 0x2f, 0x07, 0x17, 0x00, 0x32, 0xf4, + 0x01, 0x86, 0xfe, 0x45, 0x18, 0x26, 0xf6, 0xd2, 0x01, 0x98, 0xc5, 0xb4, 0x21, 0x3d, 0x05, 0xc9, + 0xd2, 0x96, 0x81, 0xc3, 0x5f, 0x83, 0x0c, 0x1d, 0xad, 0x6e, 0xaf, 0x97, 0x4b, 0x65, 0x2d, 0x91, + 0xbb, 0x0a, 0x23, 0xd4, 0x08, 0x38, 0x35, 0x3c, 0x33, 0x68, 0x43, 0xec, 0x90, 0x71, 0x28, 0x7c, + 0x76, 0x6f, 0xb3, 0x58, 0x36, 0xb4, 0x84, 0xe8, 0x5e, 0x07, 0x32, 0x62, 0x5f, 0xfc, 0xd3, 0x89, + 0xa9, 0x6f, 0x2a, 0x90, 0x16, 0xfa, 0x5c, 0xdc, 0xa0, 0x98, 0xcd, 0xa6, 0xfd, 0x6a, 0xd5, 0x6c, + 0x36, 0x4c, 0x87, 0x05, 0x05, 0x90, 0xa1, 0x02, 0x1e, 0x19, 0xd4, 0x69, 0x3f, 0x15, 0xe5, 0xbf, + 0xa8, 0x80, 0x26, 0xb7, 0x98, 0x92, 0x82, 0xca, 0xcf, 0x54, 0xc1, 0xcf, 0x2b, 0x30, 0x11, 0xec, + 0x2b, 0x25, 0xf5, 0xce, 0xfd, 0x4c, 0xd5, 0xfb, 0x6e, 0x02, 0xc6, 0x03, 0xdd, 0xe4, 0xa0, 0xda, + 0xfd, 0x3c, 0x4c, 0x35, 0xea, 0xa8, 0xd5, 0xb6, 0x5d, 0x64, 0xd5, 0x8e, 0xab, 0x4d, 0xf4, 0x0a, + 0x6a, 0x66, 0x73, 0xa4, 0x50, 0x5c, 0xec, 0xdf, 0xaf, 0x2e, 0xad, 0xfb, 0xb8, 0x0d, 0x0c, 0xcb, + 0x4f, 0xaf, 0xaf, 0x96, 0x37, 0xb7, 0xb7, 0x76, 0xcb, 0x95, 0xd2, 0xdd, 0xea, 0x5e, 0xe5, 0xe3, + 0x95, 0xad, 0xe7, 0x2b, 0x86, 0xd6, 0x90, 0xc4, 0x3e, 0xc0, 0x54, 0xdf, 0x06, 0x4d, 0x56, 0x4a, + 0x7f, 0x08, 0xa2, 0xd4, 0xd2, 0x86, 0xf4, 0x69, 0x98, 0xac, 0x6c, 0x55, 0x77, 0xd6, 0x57, 0xcb, + 0xd5, 0xf2, 0xda, 0x5a, 0xb9, 0xb4, 0xbb, 0x43, 0x9f, 0x40, 0x78, 0xd2, 0xbb, 0xc1, 0xa4, 0xfe, + 0x9c, 0x0a, 0xd3, 0x11, 0x9a, 0xe8, 0x05, 0x76, 0xef, 0x40, 0x6f, 0x67, 0x9e, 0x1a, 0x44, 0xfb, + 0x25, 0xbc, 0xe4, 0x6f, 0x9b, 0x1d, 0x97, 0xdd, 0x6a, 0x3c, 0x09, 0xd8, 0x4a, 0x96, 0xdb, 0x38, + 0x68, 0xa0, 0x0e, 0x7b, 0x60, 0x43, 0x6f, 0x28, 0x26, 0xfd, 0x71, 0xfa, 0xcc, 0xe6, 0xa3, 0xa0, + 0xb7, 0x6d, 0xa7, 0xe1, 0x36, 0x5e, 0x41, 0xd5, 0x86, 0xc5, 0x9f, 0xee, 0xe0, 0x1b, 0x8c, 0xa4, + 0xa1, 0xf1, 0x99, 0x75, 0xcb, 0xf5, 0xa4, 0x2d, 0x74, 0x68, 0x4a, 0xd2, 0xb8, 0x80, 0xab, 0x86, + 0xc6, 0x67, 0x3c, 0xe9, 0x73, 0x90, 0xa9, 0xdb, 0x5d, 0xdc, 0x75, 0x51, 0x39, 0xbc, 0x5e, 0x28, + 0x46, 0x9a, 0x8e, 0x79, 0x22, 0xac, 0x9f, 0xf6, 0x1f, 0x2b, 0x65, 0x8c, 0x34, 0x1d, 0xa3, 0x22, + 0x4f, 0xc0, 0xa4, 0x79, 0x78, 0xd8, 0xc1, 0xe4, 0x9c, 0x88, 0xde, 0x21, 0x4c, 0x78, 0xc3, 0x44, + 0x70, 0xf6, 0x0e, 0xa4, 0xb8, 0x1d, 0xf0, 0x92, 0x8c, 0x2d, 0x51, 0x6d, 0xd3, 0xdb, 0xde, 0xc4, + 0xc2, 0x98, 0x91, 0xb2, 0xf8, 0xe4, 0x39, 0xc8, 0x34, 0x9c, 0xaa, 0xff, 0x94, 0x3c, 0x71, 0x36, + 0xb1, 0x90, 0x32, 0xd2, 0x0d, 0xc7, 0x7b, 0xc2, 0x98, 0xfb, 0x4a, 0x02, 0x26, 0x82, 0x4f, 0xf9, + 0xf5, 0x55, 0x48, 0x35, 0xed, 0x9a, 0x49, 0x42, 0x8b, 0x6e, 0x31, 0x2d, 0xc4, 0x6c, 0x0c, 0x2c, + 0x6d, 0x30, 0x79, 0xc3, 0x43, 0xce, 0xfe, 0x47, 0x05, 0x52, 0x7c, 0x58, 0x9f, 0x81, 0x64, 0xdb, + 0x74, 0x8f, 0x08, 0xdd, 0x70, 0x31, 0xa1, 0x29, 0x06, 0x39, 0xc6, 0xe3, 0x4e, 0xdb, 0xb4, 0x48, + 0x08, 0xb0, 0x71, 0x7c, 0x8c, 0xfd, 0xda, 0x44, 0x66, 0x9d, 0xdc, 0x7e, 0xd8, 0xad, 0x16, 0xb2, + 0x5c, 0x87, 0xfb, 0x95, 0x8d, 0x97, 0xd8, 0xb0, 0xfe, 0x11, 0x98, 0x72, 0x3b, 0x66, 0xa3, 0x19, + 0x90, 0x4d, 0x12, 0x59, 0x8d, 0x4f, 0x78, 0xc2, 0x79, 0x78, 0x98, 0xf3, 0xd6, 0x91, 0x6b, 0xd6, + 0x8e, 0x50, 0xdd, 0x07, 0x8d, 0x90, 0xc7, 0x0c, 0x0f, 0x31, 0x81, 0x55, 0x36, 0xcf, 0xb1, 0xb9, + 0x3f, 0x54, 0x60, 0x8a, 0xdf, 0x30, 0xd5, 0x3d, 0x63, 0x6d, 0x02, 0x98, 0x96, 0x65, 0xbb, 0xa2, + 0xb9, 0xc2, 0xa1, 0x1c, 0xc2, 0x2d, 0x15, 0x3c, 0x90, 0x21, 0x10, 0xcc, 0xb6, 0x00, 0xfc, 0x99, + 0x9e, 0x66, 0x9b, 0x87, 0x34, 0xdb, 0xc2, 0x21, 0xfb, 0x80, 0xf4, 0x16, 0x1b, 0xe8, 0x10, 0xbe, + 0xb3, 0xd2, 0x4f, 0xc1, 0xf0, 0x3e, 0x3a, 0x6c, 0x58, 0xec, 0xc1, 0x2c, 0x3d, 0xe0, 0x0f, 0x42, + 0x92, 0xde, 0x83, 0x90, 0xe2, 0x8b, 0x30, 0x5d, 0xb3, 0x5b, 0xb2, 0xba, 0x45, 0x4d, 0xba, 0xcd, + 0x77, 0x9e, 0x53, 0x3e, 0x05, 0x7e, 0x8b, 0xf9, 0x63, 0x45, 0xf9, 0xd5, 0x84, 0x7a, 0x7b, 0xbb, + 0xf8, 0x5b, 0x89, 0xd9, 0xdb, 0x14, 0xba, 0xcd, 0xaf, 0xd4, 0x40, 0x07, 0x4d, 0x54, 0xc3, 0xda, + 0xc3, 0x6f, 0x7c, 0x04, 0x9e, 0x3a, 0x6c, 0xb8, 0x47, 0xdd, 0xfd, 0xa5, 0x9a, 0xdd, 0xba, 0x78, + 0x68, 0x1f, 0xda, 0xfe, 0xd6, 0x27, 0x3e, 0x22, 0x07, 0xe4, 0x13, 0xdb, 0xfe, 0x1c, 0xf3, 0x46, + 0x67, 0x63, 0xf7, 0x4a, 0xf3, 0x15, 0x98, 0x66, 0xc2, 0x55, 0xb2, 0xff, 0x42, 0xef, 0x22, 0xf4, + 0xbe, 0xcf, 0xb0, 0xb2, 0xbf, 0xfd, 0x7d, 0xb2, 0x5c, 0x1b, 0x53, 0x0c, 0x8a, 0xe7, 0xe8, 0x8d, + 0x46, 0xde, 0x80, 0xd3, 0x01, 0x3e, 0x9a, 0x9a, 0xa8, 0x13, 0xc3, 0xf8, 0x2d, 0xc6, 0x38, 0x2d, + 0x30, 0xee, 0x30, 0x68, 0xbe, 0x04, 0xe3, 0x27, 0xe1, 0xfa, 0x77, 0x8c, 0x2b, 0x83, 0x44, 0x92, + 0xdb, 0x30, 0x49, 0x48, 0x6a, 0x5d, 0xc7, 0xb5, 0x5b, 0xa4, 0xee, 0xf5, 0xa7, 0xf9, 0xf7, 0xdf, + 0xa7, 0xb9, 0x32, 0x81, 0x61, 0x25, 0x0f, 0x95, 0xcf, 0x03, 0xd9, 0x72, 0xaa, 0xa3, 0x5a, 0x33, + 0x86, 0xe1, 0x1e, 0x53, 0xc4, 0x93, 0xcf, 0x7f, 0x12, 0x4e, 0xe1, 0xcf, 0xa4, 0x2c, 0x89, 0x9a, + 0xc4, 0x3f, 0xf0, 0xca, 0xfe, 0xe1, 0xa7, 0x69, 0x3a, 0x4e, 0x7b, 0x04, 0x82, 0x4e, 0x82, 0x17, + 0x0f, 0x91, 0xeb, 0xa2, 0x8e, 0x53, 0x35, 0x9b, 0x51, 0xea, 0x09, 0x4f, 0x0c, 0xb2, 0xbf, 0xf2, + 0xc3, 0xa0, 0x17, 0x6f, 0x53, 0x64, 0xa1, 0xd9, 0xcc, 0xef, 0xc1, 0x43, 0x11, 0x51, 0x31, 0x00, + 0xe7, 0xe7, 0x18, 0xe7, 0xa9, 0x50, 0x64, 0x60, 0xda, 0x6d, 0xe0, 0xe3, 0x9e, 0x2f, 0x07, 0xe0, + 0xfc, 0x47, 0x8c, 0x53, 0x67, 0x58, 0xee, 0x52, 0xcc, 0x78, 0x07, 0xa6, 0x5e, 0x41, 0x9d, 0x7d, + 0xdb, 0x61, 0x4f, 0x69, 0x06, 0xa0, 0xfb, 0x3c, 0xa3, 0x9b, 0x64, 0x40, 0xf2, 0xd8, 0x06, 0x73, + 0xdd, 0x84, 0xd4, 0x81, 0x59, 0x43, 0x03, 0x50, 0x7c, 0x81, 0x51, 0x8c, 0x62, 0x79, 0x0c, 0x2d, + 0x40, 0xe6, 0xd0, 0x66, 0x2b, 0x53, 0x3c, 0xfc, 0x8b, 0x0c, 0x9e, 0xe6, 0x18, 0x46, 0xd1, 0xb6, + 0xdb, 0xdd, 0x26, 0x5e, 0xb6, 0xe2, 0x29, 0xbe, 0xc4, 0x29, 0x38, 0x86, 0x51, 0x9c, 0xc0, 0xac, + 0x6f, 0x72, 0x0a, 0x47, 0xb0, 0xe7, 0xb3, 0x90, 0xb6, 0xad, 0xe6, 0xb1, 0x6d, 0x0d, 0xa2, 0xc4, + 0x97, 0x19, 0x03, 0x30, 0x08, 0x26, 0xb8, 0x05, 0x63, 0x83, 0x3a, 0xe2, 0xd7, 0x7f, 0xc8, 0xd3, + 0x83, 0x7b, 0xe0, 0x36, 0x4c, 0xf2, 0x02, 0xd5, 0xb0, 0xad, 0x01, 0x28, 0x7e, 0x83, 0x51, 0x4c, + 0x08, 0x30, 0x76, 0x19, 0x2e, 0x72, 0xdc, 0x43, 0x34, 0x08, 0xc9, 0x57, 0xf8, 0x65, 0x30, 0x08, + 0x33, 0xe5, 0x3e, 0xb2, 0x6a, 0x47, 0x83, 0x31, 0x7c, 0x95, 0x9b, 0x92, 0x63, 0x30, 0x45, 0x09, + 0xc6, 0x5b, 0x66, 0xc7, 0x39, 0x32, 0x9b, 0x03, 0xb9, 0xe3, 0x37, 0x19, 0x47, 0xc6, 0x03, 0x31, + 0x8b, 0x74, 0xad, 0x93, 0xd0, 0xfc, 0x16, 0xb7, 0x88, 0x00, 0x63, 0xa9, 0xe7, 0xb8, 0xe4, 0x91, + 0xd6, 0x49, 0xd8, 0xfe, 0x31, 0x4f, 0x3d, 0x8a, 0xdd, 0x14, 0x19, 0x6f, 0xc1, 0x98, 0xd3, 0x78, + 0x7d, 0x20, 0x9a, 0x7f, 0xc2, 0x3d, 0x4d, 0x00, 0x18, 0x7c, 0x17, 0x1e, 0x8e, 0x5c, 0x26, 0x06, + 0x20, 0xfb, 0xa7, 0x8c, 0x6c, 0x26, 0x62, 0xa9, 0x60, 0x25, 0xe1, 0xa4, 0x94, 0xff, 0x8c, 0x97, + 0x04, 0x24, 0x71, 0x6d, 0xe3, 0x7b, 0x05, 0xc7, 0x3c, 0x38, 0x99, 0xd5, 0xfe, 0x39, 0xb7, 0x1a, + 0xc5, 0x06, 0xac, 0xb6, 0x0b, 0x33, 0x8c, 0xf1, 0x64, 0x7e, 0xfd, 0x1a, 0x2f, 0xac, 0x14, 0xbd, + 0x17, 0xf4, 0xee, 0x8b, 0x30, 0xeb, 0x99, 0x93, 0x37, 0xa5, 0x4e, 0xb5, 0x65, 0xb6, 0x07, 0x60, + 0xfe, 0x6d, 0xc6, 0xcc, 0x2b, 0xbe, 0xd7, 0xd5, 0x3a, 0x9b, 0x66, 0x1b, 0x93, 0xbf, 0x00, 0x59, + 0x4e, 0xde, 0xb5, 0x3a, 0xa8, 0x66, 0x1f, 0x5a, 0x8d, 0xd7, 0x51, 0x7d, 0x00, 0xea, 0xaf, 0x4b, + 0xae, 0xda, 0x13, 0xe0, 0x98, 0x79, 0x1d, 0x34, 0xaf, 0x57, 0xa9, 0x36, 0x5a, 0x6d, 0xbb, 0xe3, + 0xc6, 0x30, 0xfe, 0x0e, 0xf7, 0x94, 0x87, 0x5b, 0x27, 0xb0, 0x7c, 0x19, 0x26, 0xc8, 0xe1, 0xa0, + 0x21, 0xf9, 0xbb, 0x8c, 0x68, 0xdc, 0x47, 0xb1, 0xc2, 0x51, 0xb3, 0x5b, 0x6d, 0xb3, 0x33, 0x48, + 0xfd, 0xfb, 0x17, 0xbc, 0x70, 0x30, 0x08, 0x2b, 0x1c, 0xee, 0x71, 0x1b, 0xe1, 0xd5, 0x7e, 0x00, + 0x86, 0x6f, 0xf0, 0xc2, 0xc1, 0x31, 0x8c, 0x82, 0x37, 0x0c, 0x03, 0x50, 0xfc, 0x4b, 0x4e, 0xc1, + 0x31, 0x98, 0xe2, 0x13, 0xfe, 0x42, 0xdb, 0x41, 0x87, 0x0d, 0xc7, 0xed, 0xd0, 0x56, 0xb8, 0x3f, + 0xd5, 0xef, 0xfd, 0x30, 0xd8, 0x84, 0x19, 0x02, 0x14, 0x57, 0x22, 0xf6, 0x08, 0x95, 0xdc, 0x29, + 0xc5, 0x2b, 0xf6, 0xfb, 0xbc, 0x12, 0x09, 0x30, 0xac, 0x9b, 0xd0, 0x21, 0x62, 0xb3, 0xd7, 0xf0, + 0xfd, 0xc1, 0x00, 0x74, 0xdf, 0x94, 0x94, 0xdb, 0xe1, 0x58, 0xcc, 0x29, 0xf4, 0x3f, 0x5d, 0xeb, + 0x65, 0x74, 0x3c, 0x50, 0x74, 0xfe, 0x2b, 0xa9, 0xff, 0xd9, 0xa3, 0x48, 0x5a, 0x43, 0x26, 0xa5, + 0x7e, 0x4a, 0x8f, 0x7b, 0x59, 0x27, 0xfb, 0x97, 0xdf, 0x65, 0xd7, 0x1b, 0x6c, 0xa7, 0xf2, 0x1b, + 0x38, 0xc8, 0x83, 0x4d, 0x4f, 0x3c, 0xd9, 0xa7, 0xdf, 0xf5, 0xe2, 0x3c, 0xd0, 0xf3, 0xe4, 0xd7, + 0x60, 0x3c, 0xd0, 0xf0, 0xc4, 0x53, 0xfd, 0x15, 0x46, 0x95, 0x11, 0xfb, 0x9d, 0xfc, 0x55, 0x48, + 0xe2, 0xe6, 0x25, 0x1e, 0xfe, 0x57, 0x19, 0x9c, 0x88, 0xe7, 0x9f, 0x86, 0x14, 0x6f, 0x5a, 0xe2, + 0xa1, 0xbf, 0xc8, 0xa0, 0x1e, 0x04, 0xc3, 0x79, 0xc3, 0x12, 0x0f, 0xff, 0x6b, 0x1c, 0xce, 0x21, + 0x18, 0x3e, 0xb8, 0x09, 0xdf, 0xfa, 0x1b, 0x49, 0xb6, 0xe8, 0x70, 0xdb, 0xdd, 0x82, 0x51, 0xd6, + 0xa9, 0xc4, 0xa3, 0x7f, 0x89, 0x9d, 0x9c, 0x23, 0xf2, 0xd7, 0x61, 0x78, 0x40, 0x83, 0xff, 0x4d, + 0x06, 0xa5, 0xf2, 0xf9, 0x12, 0xa4, 0x85, 0xee, 0x24, 0x1e, 0xfe, 0xb7, 0x18, 0x5c, 0x44, 0x61, + 0xd5, 0x59, 0x77, 0x12, 0x4f, 0xf0, 0xb7, 0xb9, 0xea, 0x0c, 0x81, 0xcd, 0xc6, 0x1b, 0x93, 0x78, + 0xf4, 0xdf, 0xe1, 0x56, 0xe7, 0x90, 0xfc, 0xb3, 0x30, 0xe6, 0x2d, 0x36, 0xf1, 0xf8, 0xbf, 0xcb, + 0xf0, 0x3e, 0x06, 0x5b, 0x40, 0x58, 0xec, 0xe2, 0x29, 0xfe, 0x1e, 0xb7, 0x80, 0x80, 0xc2, 0x69, + 0x24, 0x37, 0x30, 0xf1, 0x4c, 0xbf, 0xcc, 0xd3, 0x48, 0xea, 0x5f, 0xb0, 0x37, 0x49, 0xcd, 0x8f, + 0xa7, 0xf8, 0xfb, 0xdc, 0x9b, 0x44, 0x1e, 0xab, 0x21, 0x77, 0x04, 0xf1, 0x1c, 0xff, 0x90, 0xab, + 0x21, 0x35, 0x04, 0xf9, 0x6d, 0xd0, 0xc3, 0xdd, 0x40, 0x3c, 0xdf, 0x67, 0x19, 0xdf, 0x54, 0xa8, + 0x19, 0xc8, 0x3f, 0x0f, 0x33, 0xd1, 0x9d, 0x40, 0x3c, 0xeb, 0xaf, 0xbc, 0x2b, 0xdd, 0xbb, 0x89, + 0x8d, 0x40, 0x7e, 0xd7, 0x5f, 0x52, 0xc4, 0x2e, 0x20, 0x9e, 0xf6, 0x73, 0xef, 0x06, 0x0b, 0xb7, + 0xd8, 0x04, 0xe4, 0x0b, 0x00, 0xfe, 0x02, 0x1c, 0xcf, 0xf5, 0x79, 0xc6, 0x25, 0x80, 0x70, 0x6a, + 0xb0, 0xf5, 0x37, 0x1e, 0xff, 0x05, 0x9e, 0x1a, 0x0c, 0x81, 0x53, 0x83, 0x2f, 0xbd, 0xf1, 0xe8, + 0x2f, 0xf2, 0xd4, 0xe0, 0x10, 0x1c, 0xd9, 0xc2, 0xea, 0x16, 0xcf, 0xf0, 0x65, 0x1e, 0xd9, 0x02, + 0x2a, 0x5f, 0x81, 0xa9, 0xd0, 0x82, 0x18, 0x4f, 0xf5, 0xab, 0x8c, 0x4a, 0x93, 0xd7, 0x43, 0x71, + 0xf1, 0x62, 0x8b, 0x61, 0x3c, 0xdb, 0xaf, 0x49, 0x8b, 0x17, 0x5b, 0x0b, 0xf3, 0xb7, 0x20, 0x65, + 0x75, 0x9b, 0x4d, 0x9c, 0x3c, 0x7a, 0xff, 0x17, 0xec, 0xb2, 0xff, 0xfd, 0x27, 0xcc, 0x3a, 0x1c, + 0x90, 0xbf, 0x0a, 0xc3, 0xa8, 0xb5, 0x8f, 0xea, 0x71, 0xc8, 0xff, 0xf1, 0x13, 0x5e, 0x30, 0xb1, + 0x74, 0xfe, 0x59, 0x00, 0xfa, 0x68, 0x84, 0x6c, 0xfb, 0xc5, 0x60, 0xff, 0xe7, 0x4f, 0xd8, 0xab, + 0x2f, 0x3e, 0xc4, 0x27, 0xa0, 0x2f, 0xd2, 0xf4, 0x27, 0xf8, 0x61, 0x90, 0x80, 0x78, 0xe4, 0x26, + 0x8c, 0xbe, 0xe4, 0xd8, 0x96, 0x6b, 0x1e, 0xc6, 0xa1, 0xff, 0x17, 0x43, 0x73, 0x79, 0x6c, 0xb0, + 0x96, 0xdd, 0x41, 0xae, 0x79, 0xe8, 0xc4, 0x61, 0xff, 0x37, 0xc3, 0x7a, 0x00, 0x0c, 0xae, 0x99, + 0x8e, 0x3b, 0xc8, 0x75, 0xff, 0x31, 0x07, 0x73, 0x00, 0x56, 0x1a, 0x7f, 0x7e, 0x19, 0x1d, 0xc7, + 0x61, 0x7f, 0xc4, 0x95, 0x66, 0xf2, 0xf9, 0xa7, 0x61, 0x0c, 0x7f, 0xa4, 0xef, 0xb3, 0xc5, 0x80, + 0xff, 0x0f, 0x03, 0xfb, 0x08, 0x7c, 0x66, 0xc7, 0xad, 0xbb, 0x8d, 0x78, 0x63, 0xff, 0x09, 0xf3, + 0x34, 0x97, 0xcf, 0x17, 0x20, 0xed, 0xb8, 0xf5, 0x7a, 0x97, 0xf5, 0xa7, 0x31, 0xf0, 0xff, 0xfb, + 0x13, 0xef, 0x91, 0x85, 0x87, 0xc1, 0xde, 0x7e, 0xf5, 0x65, 0xb7, 0x6d, 0x93, 0x6d, 0x8e, 0x38, + 0x86, 0x77, 0x19, 0x83, 0x00, 0x29, 0x96, 0xa3, 0x1f, 0xdf, 0xc2, 0x6d, 0xfb, 0xb6, 0x4d, 0x1f, + 0xdc, 0x7e, 0x2a, 0x17, 0xff, 0x04, 0x16, 0xfe, 0x5b, 0x13, 0xae, 0xf7, 0x14, 0xc3, 0x4b, 0xf1, + 0xc5, 0x9a, 0xdd, 0xda, 0xb7, 0x9d, 0x8b, 0xfb, 0xb6, 0x7b, 0x74, 0xd1, 0x3d, 0x42, 0x78, 0x8c, + 0x3d, 0xb2, 0x4d, 0xe2, 0xcf, 0xb3, 0x27, 0x7b, 0xce, 0x4b, 0x76, 0xf1, 0x2b, 0x0d, 0x7c, 0x69, + 0x15, 0xb2, 0x91, 0xa2, 0x9f, 0x81, 0x11, 0x72, 0xb1, 0x97, 0xc9, 0x66, 0xa5, 0x52, 0x4c, 0xde, + 0x7b, 0x7b, 0x7e, 0xc8, 0x60, 0x63, 0xde, 0xec, 0x32, 0x79, 0xd2, 0x9d, 0x08, 0xcc, 0x2e, 0x7b, + 0xb3, 0x57, 0xe8, 0xc3, 0xee, 0xc0, 0xec, 0x15, 0x6f, 0x76, 0x85, 0x3c, 0xf6, 0x56, 0x03, 0xb3, + 0x2b, 0xde, 0xec, 0x55, 0xb2, 0xb5, 0x33, 0x1e, 0x98, 0xbd, 0xea, 0xcd, 0x5e, 0x23, 0x1b, 0x3a, + 0xc9, 0xc0, 0xec, 0x35, 0x6f, 0xf6, 0x3a, 0xd9, 0xcb, 0x99, 0x0a, 0xcc, 0x5e, 0xf7, 0x66, 0x6f, + 0x90, 0x3d, 0x1c, 0x3d, 0x30, 0x7b, 0xc3, 0x9b, 0xbd, 0x49, 0x5e, 0x90, 0x1a, 0x0d, 0xcc, 0xde, + 0xd4, 0xe7, 0x60, 0x94, 0x5e, 0xf9, 0x25, 0xb2, 0xe1, 0x3f, 0xc9, 0xa6, 0xf9, 0xa0, 0x3f, 0x7f, + 0x99, 0xbc, 0x0c, 0x35, 0x12, 0x9c, 0xbf, 0xec, 0xcf, 0x2f, 0x93, 0xef, 0x65, 0x68, 0xc1, 0xf9, + 0x65, 0x7f, 0xfe, 0x4a, 0x76, 0x9c, 0xbc, 0x10, 0x16, 0x98, 0xbf, 0xe2, 0xcf, 0xaf, 0x64, 0x27, + 0x70, 0xc6, 0x04, 0xe7, 0x57, 0xfc, 0xf9, 0xab, 0xd9, 0xc9, 0xb3, 0xca, 0x42, 0x26, 0x38, 0x7f, + 0x35, 0xf7, 0x0b, 0xc4, 0xbd, 0x96, 0xef, 0xde, 0x99, 0xa0, 0x7b, 0x3d, 0xc7, 0xce, 0x04, 0x1d, + 0xeb, 0xb9, 0x74, 0x26, 0xe8, 0x52, 0xcf, 0x99, 0x33, 0x41, 0x67, 0x7a, 0x6e, 0x9c, 0x09, 0xba, + 0xd1, 0x73, 0xe0, 0x4c, 0xd0, 0x81, 0x9e, 0xeb, 0x66, 0x82, 0xae, 0xf3, 0x9c, 0x36, 0x13, 0x74, + 0x9a, 0xe7, 0xae, 0x99, 0xa0, 0xbb, 0x3c, 0x47, 0x65, 0x25, 0x47, 0xf9, 0x2e, 0xca, 0x4a, 0x2e, + 0xf2, 0x9d, 0x93, 0x95, 0x9c, 0xe3, 0xbb, 0x25, 0x2b, 0xb9, 0xc5, 0x77, 0x48, 0x56, 0x72, 0x88, + 0xef, 0x8a, 0xac, 0xe4, 0x0a, 0xdf, 0x09, 0x2c, 0xc7, 0x0c, 0xd4, 0x8e, 0xc8, 0x31, 0xb5, 0x6f, + 0x8e, 0xa9, 0x7d, 0x73, 0x4c, 0xed, 0x9b, 0x63, 0x6a, 0xdf, 0x1c, 0x53, 0xfb, 0xe6, 0x98, 0xda, + 0x37, 0xc7, 0xd4, 0xbe, 0x39, 0xa6, 0xf6, 0xcd, 0x31, 0xb5, 0x7f, 0x8e, 0xa9, 0x31, 0x39, 0xa6, + 0xc6, 0xe4, 0x98, 0x1a, 0x93, 0x63, 0x6a, 0x4c, 0x8e, 0xa9, 0x31, 0x39, 0xa6, 0xf6, 0xcc, 0x31, + 0xdf, 0xbd, 0x33, 0x41, 0xf7, 0x46, 0xe6, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x1e, 0x39, 0xa6, 0xf6, + 0xc8, 0x31, 0xb5, 0x47, 0x8e, 0xa9, 0x3d, 0x72, 0x4c, 0xed, 0x91, 0x63, 0x6a, 0x8f, 0x1c, 0x53, + 0x7b, 0xe5, 0x98, 0xda, 0x33, 0xc7, 0xd4, 0x9e, 0x39, 0xa6, 0xf6, 0xcc, 0x31, 0xb5, 0x67, 0x8e, + 0xa9, 0x3d, 0x73, 0x4c, 0x15, 0x73, 0xec, 0x5f, 0xab, 0xa0, 0xd3, 0x1c, 0xdb, 0x26, 0xaf, 0x8c, + 0x31, 0x57, 0xcc, 0x49, 0x99, 0x36, 0x82, 0x5d, 0xa7, 0xf9, 0x2e, 0x99, 0x93, 0x72, 0x2d, 0x38, + 0xbf, 0xec, 0xcd, 0xf3, 0x6c, 0x0b, 0xce, 0x5f, 0xf1, 0xe6, 0x79, 0xbe, 0x05, 0xe7, 0x57, 0xbc, + 0x79, 0x9e, 0x71, 0xc1, 0xf9, 0xab, 0xde, 0x3c, 0xcf, 0xb9, 0xe0, 0xfc, 0x35, 0x6f, 0x9e, 0x67, + 0x5d, 0x70, 0xfe, 0xba, 0x37, 0xcf, 0xf3, 0x2e, 0x38, 0x7f, 0xc3, 0x9b, 0xe7, 0x99, 0x17, 0x9c, + 0xbf, 0xa9, 0x9f, 0x95, 0x73, 0x8f, 0x0b, 0x78, 0xae, 0x3d, 0x2b, 0x67, 0x9f, 0x24, 0x71, 0xd9, + 0x97, 0xe0, 0xf9, 0x27, 0x49, 0x2c, 0xfb, 0x12, 0x3c, 0x03, 0x25, 0x89, 0x2b, 0xb9, 0xcf, 0x10, + 0xf7, 0x59, 0xb2, 0xfb, 0x66, 0x25, 0xf7, 0x25, 0x04, 0xd7, 0xcd, 0x4a, 0xae, 0x4b, 0x08, 0x6e, + 0x9b, 0x95, 0xdc, 0x96, 0x10, 0x5c, 0x36, 0x2b, 0xb9, 0x2c, 0x21, 0xb8, 0x6b, 0x56, 0x72, 0x57, + 0x42, 0x70, 0xd5, 0xac, 0xe4, 0xaa, 0x84, 0xe0, 0xa6, 0x59, 0xc9, 0x4d, 0x09, 0xc1, 0x45, 0xb3, + 0x92, 0x8b, 0x12, 0x82, 0x7b, 0x66, 0x25, 0xf7, 0x24, 0x04, 0xd7, 0x9c, 0x91, 0x5d, 0x93, 0x10, + 0xdd, 0x72, 0x46, 0x76, 0x4b, 0x42, 0x74, 0xc9, 0x19, 0xd9, 0x25, 0x09, 0xd1, 0x1d, 0x67, 0x64, + 0x77, 0x24, 0x44, 0x57, 0xfc, 0x69, 0x82, 0x77, 0x84, 0x3b, 0x6e, 0xa7, 0x5b, 0x73, 0xdf, 0x53, + 0x47, 0x78, 0x29, 0xd0, 0x3e, 0xa4, 0x97, 0xf5, 0x25, 0xd2, 0xb0, 0x8a, 0x1d, 0xa7, 0xb4, 0x82, + 0x5d, 0x0a, 0x34, 0x16, 0x02, 0xc2, 0x8a, 0x46, 0xac, 0xbc, 0xa7, 0xde, 0xf0, 0x52, 0xa0, 0xcd, + 0x88, 0xd7, 0xef, 0xc6, 0x07, 0xde, 0xb1, 0xbd, 0x95, 0xe0, 0x1d, 0x1b, 0x33, 0xff, 0x49, 0x3b, + 0xb6, 0xc5, 0x78, 0x93, 0x7b, 0xc6, 0x5e, 0x8c, 0x37, 0x76, 0x68, 0xd5, 0x19, 0xb4, 0x83, 0x5b, + 0x8c, 0x37, 0xad, 0x67, 0xd4, 0xf7, 0xb7, 0xdf, 0x62, 0x11, 0x6c, 0xa0, 0x76, 0x44, 0x04, 0x9f, + 0xb4, 0xdf, 0xba, 0x14, 0x28, 0x25, 0x27, 0x8d, 0x60, 0xf5, 0xc4, 0x11, 0x7c, 0xd2, 0xce, 0xeb, + 0x52, 0xa0, 0xbc, 0x9c, 0x38, 0x82, 0x3f, 0x80, 0x7e, 0x88, 0x45, 0xb0, 0x6f, 0xfe, 0x93, 0xf6, + 0x43, 0x8b, 0xf1, 0x26, 0x8f, 0x8c, 0x60, 0xf5, 0x04, 0x11, 0x3c, 0x48, 0x7f, 0xb4, 0x18, 0x6f, + 0xda, 0xe8, 0x08, 0x7e, 0xcf, 0xdd, 0xcc, 0x97, 0x14, 0x98, 0xaa, 0x34, 0xea, 0xe5, 0xd6, 0x3e, + 0xaa, 0xd7, 0x51, 0x9d, 0xd9, 0xf1, 0x52, 0xa0, 0x12, 0xf4, 0x70, 0xf5, 0xb7, 0xdf, 0x9e, 0xf7, + 0x2d, 0x7c, 0x15, 0x52, 0xd4, 0xa6, 0x97, 0x2e, 0x65, 0xef, 0x29, 0x31, 0x15, 0xce, 0x13, 0xd5, + 0xcf, 0x71, 0xd8, 0xe5, 0x4b, 0xd9, 0xff, 0xa4, 0x08, 0x55, 0xce, 0x1b, 0xce, 0xfd, 0x32, 0xd1, + 0xd0, 0x7a, 0xcf, 0x1a, 0x5e, 0x1c, 0x48, 0x43, 0x41, 0xb7, 0x47, 0x42, 0xba, 0x09, 0x5a, 0x75, + 0x61, 0xb2, 0xd2, 0xa8, 0x57, 0xc8, 0x2f, 0x02, 0x0c, 0xa2, 0x12, 0x95, 0x91, 0xea, 0xc1, 0xa5, + 0x40, 0x58, 0x8a, 0x08, 0x2f, 0xa4, 0x83, 0x35, 0x22, 0xd7, 0xc0, 0xa7, 0xb5, 0x02, 0xa7, 0x5d, + 0xec, 0x75, 0x5a, 0xbf, 0xb2, 0x7b, 0x27, 0x5c, 0xec, 0x75, 0x42, 0x3f, 0x87, 0xbc, 0x53, 0xbd, + 0xc6, 0x17, 0x67, 0xfa, 0xe2, 0x96, 0x7e, 0x06, 0x12, 0xeb, 0xf4, 0xbd, 0xf2, 0x4c, 0x31, 0x83, + 0x95, 0xfa, 0xce, 0xdb, 0xf3, 0xc9, 0xbd, 0x6e, 0xa3, 0x6e, 0x24, 0xd6, 0xeb, 0xfa, 0x1d, 0x18, + 0xfe, 0x24, 0xfb, 0x5e, 0x2a, 0x16, 0x58, 0x61, 0x02, 0x1f, 0x8d, 0x79, 0xc4, 0x44, 0xa8, 0x97, + 0xf6, 0x1a, 0x96, 0x7b, 0x79, 0xf9, 0x86, 0x41, 0x29, 0x72, 0x7f, 0x0e, 0x80, 0x9e, 0x73, 0xd5, + 0x74, 0x8e, 0xf4, 0x0a, 0x67, 0xa6, 0xa7, 0xbe, 0xf1, 0x9d, 0xb7, 0xe7, 0x57, 0x06, 0x61, 0x7d, + 0xaa, 0x6e, 0x3a, 0x47, 0x4f, 0xb9, 0xc7, 0x6d, 0xb4, 0x54, 0x3c, 0x76, 0x91, 0xc3, 0xd9, 0xdb, + 0x7c, 0xd5, 0x63, 0xd7, 0x95, 0x15, 0xae, 0x2b, 0x15, 0xb8, 0xa6, 0xb5, 0xe0, 0x35, 0x5d, 0x7a, + 0xd0, 0xeb, 0x79, 0x8d, 0x2f, 0x12, 0x92, 0x25, 0xd5, 0x38, 0x4b, 0xaa, 0xef, 0xd5, 0x92, 0x6d, + 0x5e, 0x1f, 0xa5, 0x6b, 0x55, 0xfb, 0x5d, 0xab, 0xfa, 0x5e, 0xae, 0xf5, 0xff, 0xd1, 0x6c, 0xf5, + 0xf2, 0x69, 0xcf, 0xa2, 0xef, 0xb4, 0xfe, 0xd9, 0x7a, 0x16, 0xf4, 0xbe, 0x76, 0x01, 0xf9, 0xe4, + 0xbd, 0x37, 0xe7, 0x95, 0xdc, 0x97, 0x12, 0xfc, 0xca, 0x69, 0x22, 0x3d, 0xd8, 0x95, 0xff, 0x59, + 0xe9, 0xa9, 0x3e, 0x08, 0x0b, 0x7d, 0x51, 0x81, 0x99, 0x50, 0x25, 0xa7, 0x66, 0x7a, 0x7f, 0xcb, + 0xb9, 0x75, 0xd2, 0x72, 0xce, 0x14, 0xfc, 0x5d, 0x05, 0x4e, 0x49, 0xe5, 0x95, 0xaa, 0x77, 0x51, + 0x52, 0xef, 0xa1, 0xf0, 0x99, 0x88, 0xa0, 0xa0, 0x9d, 0xe8, 0x5e, 0x09, 0x20, 0x30, 0x7b, 0x7e, + 0x5f, 0x91, 0xfc, 0x7e, 0xc6, 0x03, 0x44, 0x98, 0x8b, 0x47, 0x00, 0x53, 0xdb, 0x86, 0xe4, 0x6e, + 0x07, 0x21, 0x7d, 0x0e, 0x12, 0x5b, 0x1d, 0xa6, 0xe1, 0x04, 0xc5, 0x6f, 0x75, 0x8a, 0x1d, 0xd3, + 0xaa, 0x1d, 0x19, 0x89, 0xad, 0x8e, 0x7e, 0x0e, 0xd4, 0x02, 0xfb, 0x4e, 0x7c, 0x7a, 0x79, 0x92, + 0x0a, 0x14, 0xac, 0x3a, 0x93, 0xc0, 0x73, 0xfa, 0x1c, 0x24, 0x37, 0x90, 0x79, 0xc0, 0x94, 0x00, + 0x2a, 0x83, 0x47, 0x0c, 0x32, 0xce, 0x4e, 0xf8, 0x02, 0xa4, 0x38, 0xb1, 0x7e, 0x1e, 0x23, 0x0e, + 0x5c, 0x76, 0x5a, 0x86, 0xc0, 0xea, 0xb0, 0x95, 0x8b, 0xcc, 0xea, 0x17, 0x60, 0xd8, 0x68, 0x1c, + 0x1e, 0xb9, 0xec, 0xe4, 0x61, 0x31, 0x3a, 0x9d, 0xbb, 0x0b, 0x63, 0x9e, 0x46, 0xef, 0x33, 0xf5, + 0x2a, 0xbd, 0x34, 0x7d, 0x56, 0x5c, 0x4f, 0xf8, 0x73, 0x4b, 0x3a, 0xa4, 0x9f, 0x85, 0xd4, 0x8e, + 0xdb, 0xf1, 0x8b, 0x3e, 0xef, 0x48, 0xbd, 0xd1, 0xdc, 0x2f, 0x28, 0x90, 0x5a, 0x45, 0xa8, 0x4d, + 0x0c, 0xfe, 0x38, 0x24, 0x57, 0xed, 0x57, 0x2d, 0xa6, 0xe0, 0x14, 0xb3, 0x28, 0x9e, 0x66, 0x36, + 0x25, 0xd3, 0xfa, 0xe3, 0xa2, 0xdd, 0xa7, 0x3d, 0xbb, 0x0b, 0x72, 0xc4, 0xf6, 0xb9, 0x80, 0xed, + 0x99, 0x03, 0xb1, 0x50, 0xc8, 0xfe, 0xd7, 0x21, 0x2d, 0x9c, 0x45, 0x5f, 0x60, 0x6a, 0x24, 0x64, + 0xa0, 0x68, 0x2b, 0x2c, 0x91, 0x43, 0x30, 0x1e, 0x38, 0x31, 0x86, 0x0a, 0x26, 0xee, 0x01, 0x25, + 0x66, 0x5e, 0x0c, 0x9a, 0x39, 0x5a, 0x94, 0x99, 0xfa, 0x12, 0xb5, 0x11, 0x31, 0xf7, 0x79, 0x1a, + 0x9c, 0xbd, 0x9d, 0x88, 0x3f, 0xe7, 0x86, 0x41, 0xad, 0x34, 0x9a, 0xb9, 0xa7, 0x01, 0x68, 0xca, + 0x97, 0xad, 0x6e, 0x4b, 0xca, 0xba, 0x09, 0x6e, 0xe0, 0xdd, 0x23, 0xb4, 0x8b, 0x1c, 0x22, 0x12, + 0xec, 0xa7, 0x70, 0x81, 0x01, 0x9a, 0x62, 0x04, 0xff, 0x64, 0x2c, 0x3e, 0xb2, 0x13, 0xc3, 0xa2, + 0x59, 0x2a, 0x7a, 0x17, 0xb9, 0x05, 0xcb, 0x76, 0x8f, 0x50, 0x47, 0x42, 0x2c, 0xeb, 0x57, 0x02, + 0x09, 0x3b, 0xb1, 0xfc, 0x88, 0x87, 0xe8, 0x09, 0xba, 0x92, 0xfb, 0x1a, 0x51, 0x10, 0xb7, 0x02, + 0xa1, 0x0b, 0x54, 0x07, 0xb8, 0x40, 0xfd, 0x5a, 0xa0, 0x7f, 0xeb, 0xa3, 0xa6, 0x74, 0x6b, 0x79, + 0x33, 0x70, 0x9f, 0xd3, 0x5f, 0xd9, 0xe0, 0x3d, 0x26, 0xb7, 0x29, 0x57, 0xf9, 0xc9, 0x58, 0x95, + 0x7b, 0x74, 0xb7, 0x27, 0xb5, 0xa9, 0x3a, 0xa8, 0x4d, 0xbf, 0xe9, 0x75, 0x1c, 0xf4, 0x87, 0x47, + 0xc8, 0x4f, 0xf6, 0xe8, 0x1f, 0x8d, 0xf5, 0x7d, 0x5e, 0x29, 0x79, 0xaa, 0xae, 0x0c, 0xea, 0xfe, + 0x7c, 0xa2, 0x58, 0xf4, 0xd4, 0xbd, 0x7e, 0x82, 0x10, 0xc8, 0x27, 0x4a, 0x25, 0xaf, 0x6c, 0xa7, + 0x3e, 0xf3, 0xe6, 0xbc, 0xf2, 0xd5, 0x37, 0xe7, 0x87, 0x72, 0xbf, 0xa9, 0xc0, 0x14, 0x93, 0x14, + 0x02, 0xf7, 0x29, 0x49, 0xf9, 0xd3, 0xbc, 0x66, 0x44, 0x59, 0xe0, 0xa7, 0x16, 0xbc, 0xdf, 0x52, + 0x20, 0x1b, 0xd2, 0x95, 0xdb, 0xfb, 0xd2, 0x40, 0x2a, 0xe7, 0x95, 0xf2, 0xcf, 0xde, 0xe6, 0x77, + 0x61, 0x78, 0xb7, 0xd1, 0x42, 0x1d, 0xbc, 0x12, 0xe0, 0x0f, 0x54, 0x65, 0xbe, 0x99, 0x43, 0x87, + 0xf8, 0x1c, 0x55, 0x2e, 0x30, 0xb7, 0xac, 0x67, 0x21, 0xb9, 0x6a, 0xba, 0x26, 0xd1, 0x20, 0xe3, + 0xd5, 0x57, 0xd3, 0x35, 0x73, 0x57, 0x20, 0xb3, 0x79, 0x4c, 0x5e, 0x44, 0xaa, 0x93, 0x77, 0x50, + 0x82, 0xdd, 0x1f, 0xef, 0x57, 0x2f, 0x2f, 0x0e, 0xa7, 0xea, 0xda, 0x3d, 0x25, 0x9f, 0x24, 0xfa, + 0xbc, 0x02, 0x13, 0x5b, 0x58, 0x6d, 0x82, 0x23, 0xb0, 0xb3, 0xa0, 0x6c, 0x06, 0x1b, 0x21, 0x91, + 0xd5, 0x50, 0x36, 0xa5, 0xf6, 0x51, 0xf5, 0xcc, 0x23, 0xb5, 0x6d, 0xaa, 0xd7, 0xb6, 0x2d, 0x26, + 0x53, 0x13, 0xda, 0xd4, 0x62, 0x32, 0x05, 0xda, 0x38, 0x3b, 0xef, 0x7f, 0x50, 0x41, 0xa3, 0xad, + 0xce, 0x2a, 0x3a, 0x68, 0x58, 0x0d, 0x37, 0xdc, 0xaf, 0x7a, 0x1a, 0xeb, 0xcf, 0xc2, 0x18, 0x36, + 0xe9, 0x1a, 0xfb, 0xe5, 0x3e, 0x6c, 0xfa, 0x73, 0xac, 0x45, 0x91, 0x28, 0xd8, 0x00, 0x09, 0x1d, + 0x1f, 0xa3, 0xaf, 0x81, 0x5a, 0xa9, 0x6c, 0xb2, 0xc5, 0x6d, 0xa5, 0x2f, 0x94, 0xbd, 0xec, 0xc3, + 0x8e, 0xd8, 0x98, 0x73, 0x68, 0x60, 0x02, 0x7d, 0x05, 0x12, 0x95, 0x4d, 0xd6, 0xf0, 0x9e, 0x1f, + 0x84, 0xc6, 0x48, 0x54, 0x36, 0x67, 0xff, 0x8d, 0x02, 0xe3, 0x81, 0x51, 0x3d, 0x07, 0x19, 0x3a, + 0x20, 0x5c, 0xee, 0x88, 0x11, 0x18, 0xe3, 0x3a, 0x27, 0xde, 0xa3, 0xce, 0xb3, 0x05, 0x98, 0x94, + 0xc6, 0xf5, 0x25, 0xd0, 0xc5, 0x21, 0xa6, 0x04, 0xfd, 0xd5, 0xb0, 0x88, 0x99, 0xdc, 0xa3, 0x00, + 0xbe, 0x5d, 0xbd, 0x1f, 0xbb, 0xaa, 0x94, 0x77, 0x76, 0xcb, 0xab, 0x9a, 0x92, 0xfb, 0x86, 0x02, + 0x69, 0xd6, 0xb6, 0xd6, 0xec, 0x36, 0xd2, 0x8b, 0xa0, 0x14, 0x58, 0x04, 0x3d, 0x98, 0xde, 0x4a, + 0x41, 0xbf, 0x08, 0x4a, 0x71, 0x70, 0x57, 0x2b, 0x45, 0x7d, 0x19, 0x94, 0x12, 0x73, 0xf0, 0x60, + 0x9e, 0x51, 0x4a, 0xb9, 0x3f, 0x51, 0x61, 0x5a, 0x6c, 0xa3, 0x79, 0x3d, 0x39, 0x17, 0xbc, 0x6f, + 0xca, 0x8f, 0x5d, 0x5e, 0xbe, 0xb2, 0xb2, 0x84, 0xff, 0xf1, 0x42, 0x32, 0x17, 0xbc, 0x85, 0xca, + 0x83, 0x27, 0x72, 0xb9, 0xd7, 0x7b, 0x22, 0xf9, 0xa4, 0xc0, 0x10, 0x7a, 0x4f, 0x24, 0x30, 0x1b, + 0x7a, 0x4f, 0x24, 0x30, 0x1b, 0x7a, 0x4f, 0x24, 0x30, 0x1b, 0xda, 0x0b, 0x08, 0xcc, 0x86, 0xde, + 0x13, 0x09, 0xcc, 0x86, 0xde, 0x13, 0x09, 0xcc, 0x86, 0xdf, 0x13, 0x61, 0xd3, 0x3d, 0xdf, 0x13, + 0x09, 0xce, 0x87, 0xdf, 0x13, 0x09, 0xce, 0x87, 0xdf, 0x13, 0xc9, 0x27, 0xdd, 0x4e, 0x17, 0xf5, + 0xde, 0x75, 0x08, 0xe2, 0xfb, 0xdd, 0x04, 0xfa, 0x15, 0x78, 0x0b, 0x26, 0xe9, 0x03, 0x89, 0x92, + 0x6d, 0xb9, 0x66, 0xc3, 0x42, 0x1d, 0xfd, 0x63, 0x90, 0xa1, 0x43, 0xf4, 0x36, 0x27, 0xea, 0x36, + 0x90, 0xce, 0xb3, 0x7a, 0x1b, 0x90, 0xce, 0xfd, 0x69, 0x12, 0x66, 0xe8, 0x40, 0xc5, 0x6c, 0xa1, + 0xc0, 0x5b, 0x46, 0x17, 0xa4, 0x3d, 0xa5, 0x09, 0x0c, 0xbf, 0xff, 0xf6, 0x3c, 0x1d, 0x2d, 0x78, + 0xd1, 0x74, 0x41, 0xda, 0x5d, 0x0a, 0xca, 0xf9, 0x0b, 0xd0, 0x05, 0xe9, 0xcd, 0xa3, 0xa0, 0x9c, + 0xb7, 0xde, 0x78, 0x72, 0xfc, 0x1d, 0xa4, 0xa0, 0xdc, 0xaa, 0x17, 0x65, 0x17, 0xa4, 0xb7, 0x91, + 0x82, 0x72, 0x65, 0x2f, 0xde, 0x2e, 0x48, 0x7b, 0x4f, 0x41, 0xb9, 0x35, 0x2f, 0xf2, 0x2e, 0x48, + 0xbb, 0x50, 0x41, 0xb9, 0xdb, 0x5e, 0x0c, 0x5e, 0x90, 0xde, 0x55, 0x0a, 0xca, 0x3d, 0xe7, 0x45, + 0xe3, 0x05, 0xe9, 0xad, 0xa5, 0xa0, 0xdc, 0xba, 0x17, 0x97, 0x0b, 0xf2, 0xfb, 0x4b, 0x41, 0xc1, + 0x3b, 0x7e, 0x84, 0x2e, 0xc8, 0x6f, 0x32, 0x05, 0x25, 0x3f, 0xee, 0xc7, 0xea, 0x82, 0xfc, 0x4e, + 0x53, 0x50, 0x72, 0xc3, 0x8f, 0xda, 0x05, 0x79, 0xaf, 0x2c, 0x28, 0xb9, 0xe9, 0xc7, 0xef, 0x82, + 0xbc, 0x6b, 0x16, 0x94, 0xac, 0xf8, 0x91, 0xbc, 0x20, 0xef, 0x9f, 0x05, 0x25, 0xb7, 0xfc, 0x87, + 0xe8, 0x7f, 0x20, 0x85, 0x9f, 0xf0, 0x16, 0x54, 0x4e, 0x0a, 0x3f, 0x88, 0x08, 0x3d, 0xa9, 0x90, + 0x09, 0x32, 0x7e, 0xd8, 0xe5, 0xa4, 0xb0, 0x83, 0x88, 0x90, 0xcb, 0x49, 0x21, 0x07, 0x11, 0xe1, + 0x96, 0x93, 0xc2, 0x0d, 0x22, 0x42, 0x2d, 0x27, 0x85, 0x1a, 0x44, 0x84, 0x59, 0x4e, 0x0a, 0x33, + 0x88, 0x08, 0xb1, 0x9c, 0x14, 0x62, 0x10, 0x11, 0x5e, 0x39, 0x29, 0xbc, 0x20, 0x22, 0xb4, 0xce, + 0xcb, 0xa1, 0x05, 0x51, 0x61, 0x75, 0x5e, 0x0e, 0x2b, 0x88, 0x0a, 0xa9, 0xc7, 0xe4, 0x90, 0x1a, + 0xbb, 0xff, 0xf6, 0xfc, 0x30, 0x1e, 0x12, 0xa2, 0xe9, 0xbc, 0x1c, 0x4d, 0x10, 0x15, 0x49, 0xe7, + 0xe5, 0x48, 0x82, 0xa8, 0x28, 0x3a, 0x2f, 0x47, 0x11, 0x44, 0x45, 0xd0, 0x5b, 0x72, 0x04, 0xf9, + 0xef, 0xf8, 0xe4, 0xa4, 0x2d, 0xc5, 0xb8, 0x08, 0x52, 0x07, 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, + 0x07, 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, 0x88, 0x20, 0x75, 0x80, 0x08, 0x52, 0x07, 0x88, + 0x20, 0x75, 0x90, 0x08, 0x52, 0x07, 0x8a, 0x20, 0xb5, 0x57, 0x04, 0x9d, 0x97, 0xdf, 0x78, 0x80, + 0xa8, 0x82, 0x74, 0x5e, 0xde, 0xfa, 0x8c, 0x0f, 0x21, 0x75, 0xa0, 0x10, 0x52, 0x7b, 0x85, 0xd0, + 0x1f, 0xa8, 0x30, 0x1d, 0x08, 0x21, 0xb6, 0x3f, 0xf4, 0x7e, 0x55, 0xa0, 0x6b, 0x03, 0xbc, 0x60, + 0x11, 0x15, 0x53, 0xd7, 0x06, 0xd8, 0xa4, 0xee, 0x17, 0x67, 0xe1, 0x2a, 0x54, 0x1e, 0xa0, 0x0a, + 0xad, 0x79, 0x31, 0x74, 0x6d, 0x80, 0x17, 0x2f, 0xc2, 0xb1, 0x77, 0xa3, 0x5f, 0x11, 0x78, 0x6e, + 0xa0, 0x22, 0xb0, 0x3e, 0x50, 0x11, 0xb8, 0xe3, 0x7b, 0xf0, 0x17, 0x13, 0x70, 0xca, 0xf7, 0x20, + 0xfd, 0x44, 0x7e, 0x59, 0x2b, 0x27, 0x6c, 0x51, 0xe9, 0x7c, 0xdb, 0x46, 0x70, 0x63, 0x62, 0xbd, + 0xae, 0x6f, 0x07, 0x37, 0xab, 0xf2, 0x27, 0xdd, 0xc0, 0x11, 0x3c, 0xce, 0x1e, 0x86, 0x9e, 0x07, + 0x75, 0xbd, 0xee, 0x90, 0x6a, 0x11, 0x75, 0xda, 0x92, 0x81, 0xa7, 0x75, 0x03, 0x46, 0x88, 0xb8, + 0x43, 0xdc, 0xfb, 0x5e, 0x4e, 0xbc, 0x6a, 0x30, 0xa6, 0xdc, 0x5b, 0x0a, 0x9c, 0x0d, 0x84, 0xf2, + 0xfb, 0xb3, 0x65, 0x70, 0x6b, 0xa0, 0x2d, 0x83, 0x40, 0x82, 0xf8, 0xdb, 0x07, 0x4f, 0x84, 0x77, + 0xaa, 0xc5, 0x2c, 0x91, 0xb7, 0x12, 0xfe, 0x12, 0x4c, 0xf8, 0x57, 0x40, 0xee, 0xd9, 0xae, 0xc6, + 0x3f, 0xcd, 0x8c, 0x4a, 0xcd, 0xab, 0xd2, 0x53, 0xb4, 0xbe, 0x30, 0x2f, 0x5b, 0x73, 0x79, 0x98, + 0xac, 0x04, 0xbf, 0x12, 0x15, 0xf7, 0x30, 0x22, 0x85, 0x5b, 0xf3, 0x7b, 0x5f, 0x9e, 0x1f, 0xca, + 0x7d, 0x14, 0x32, 0xe2, 0xb7, 0x9e, 0x24, 0xe0, 0x18, 0x07, 0xe6, 0x93, 0xdf, 0xc6, 0xd2, 0xff, + 0x40, 0x81, 0xd3, 0xa2, 0xf8, 0xf3, 0x0d, 0xf7, 0x68, 0xdd, 0xc2, 0x3d, 0xfd, 0xd3, 0x90, 0x42, + 0xcc, 0x71, 0xec, 0x47, 0x72, 0xd8, 0x7d, 0x64, 0xa4, 0xf8, 0x12, 0xf9, 0xd7, 0xf0, 0x20, 0xd2, + 0x33, 0x0e, 0x7e, 0xda, 0xe5, 0xd9, 0xc7, 0x61, 0x98, 0xf2, 0x07, 0xf5, 0x1a, 0x97, 0xf4, 0xfa, + 0xf5, 0x08, 0xbd, 0x48, 0x1c, 0xe9, 0x77, 0x02, 0x7a, 0x09, 0xb7, 0xab, 0x91, 0xe2, 0x4b, 0x3c, + 0xf8, 0x8a, 0x29, 0xdc, 0xff, 0x91, 0x88, 0x8a, 0x57, 0x72, 0x01, 0x52, 0x65, 0x59, 0x26, 0x5a, + 0xcf, 0x55, 0x48, 0x56, 0xec, 0x3a, 0xf9, 0xf9, 0x1e, 0xf2, 0x7b, 0xd5, 0xcc, 0xc8, 0xec, 0xc7, + 0xab, 0x2f, 0x40, 0xaa, 0x74, 0xd4, 0x68, 0xd6, 0x3b, 0xc8, 0x62, 0x7b, 0xf6, 0xec, 0x11, 0x3a, + 0xc6, 0x18, 0xde, 0x5c, 0xae, 0x04, 0x53, 0x15, 0xdb, 0x2a, 0x1e, 0xbb, 0x62, 0xdd, 0x58, 0x92, + 0x52, 0x84, 0xed, 0xf9, 0x90, 0x6f, 0x89, 0x60, 0x81, 0xe2, 0xf0, 0x77, 0xde, 0x9e, 0x57, 0x76, + 0xbd, 0xe7, 0xe7, 0x9b, 0xf0, 0x10, 0x4b, 0x9f, 0x10, 0xd5, 0x72, 0x1c, 0xd5, 0x18, 0xdb, 0xa7, + 0x16, 0xe8, 0xd6, 0x31, 0x9d, 0x15, 0x49, 0xf7, 0x60, 0x9a, 0xe1, 0xa6, 0xa8, 0xaf, 0x66, 0xea, + 0x89, 0x34, 0x8b, 0xa4, 0x5b, 0x8a, 0xa3, 0x93, 0x34, 0x7b, 0x0c, 0xc6, 0xbc, 0x39, 0x21, 0x1a, + 0xc4, 0x4c, 0x59, 0x5e, 0xcc, 0x41, 0x5a, 0x48, 0x58, 0x7d, 0x18, 0x94, 0x82, 0x36, 0x84, 0xff, + 0x2b, 0x6a, 0x0a, 0xfe, 0xaf, 0xa4, 0x25, 0x16, 0x1f, 0x87, 0x49, 0xe9, 0xf9, 0x25, 0x9e, 0x59, + 0xd5, 0x00, 0xff, 0x57, 0xd6, 0xd2, 0xb3, 0xc9, 0xcf, 0xfc, 0xda, 0xdc, 0xd0, 0xe2, 0x2d, 0xd0, + 0xc3, 0x4f, 0x3a, 0xf5, 0x11, 0x48, 0x14, 0x30, 0xe5, 0x43, 0x90, 0x28, 0x16, 0x35, 0x65, 0x76, + 0xf2, 0xaf, 0x7f, 0xe1, 0x6c, 0xba, 0x48, 0xbe, 0xd2, 0x7d, 0x17, 0xb9, 0xc5, 0x22, 0x03, 0x3f, + 0x03, 0xa7, 0x23, 0x9f, 0x94, 0x62, 0x7c, 0xa9, 0x44, 0xf1, 0xab, 0xab, 0x21, 0xfc, 0xea, 0x2a, + 0xc1, 0x2b, 0x79, 0xbe, 0xe3, 0x5c, 0xd0, 0x23, 0x9e, 0x4b, 0x66, 0xeb, 0xc2, 0x0e, 0x77, 0x21, + 0xff, 0x0c, 0x93, 0x2d, 0x46, 0xca, 0xa2, 0x98, 0x1d, 0xeb, 0x62, 0xbe, 0xc4, 0xf0, 0xa5, 0x48, + 0xfc, 0x81, 0xb4, 0xad, 0x1a, 0x5c, 0x21, 0x18, 0x49, 0xc9, 0x53, 0x78, 0x35, 0x92, 0xe4, 0x48, + 0x78, 0xd9, 0x7d, 0xd5, 0x53, 0xb8, 0x1c, 0x29, 0xdb, 0x88, 0x79, 0xe9, 0xab, 0x9c, 0xbf, 0xc8, + 0x16, 0xf9, 0xc2, 0x65, 0xfd, 0x34, 0xcf, 0xd1, 0x40, 0x05, 0x66, 0x06, 0xe2, 0x52, 0xf9, 0x12, + 0x03, 0x14, 0x7b, 0x02, 0x7a, 0x5b, 0x89, 0x23, 0xf3, 0xcf, 0x31, 0x92, 0x52, 0x4f, 0x92, 0x18, + 0x53, 0x71, 0x78, 0x71, 0xf7, 0xde, 0x3b, 0x73, 0x43, 0xdf, 0x7e, 0x67, 0x6e, 0xe8, 0xbf, 0xbc, + 0x33, 0x37, 0xf4, 0xdd, 0x77, 0xe6, 0x94, 0x1f, 0xbc, 0x33, 0xa7, 0xfc, 0xe8, 0x9d, 0x39, 0xe5, + 0xc7, 0xef, 0xcc, 0x29, 0x6f, 0xdc, 0x9f, 0x53, 0xbe, 0x7a, 0x7f, 0x4e, 0xf9, 0xda, 0xfd, 0x39, + 0xe5, 0xf7, 0xee, 0xcf, 0x29, 0x6f, 0xdd, 0x9f, 0x53, 0xee, 0xdd, 0x9f, 0x53, 0xbe, 0x7d, 0x7f, + 0x4e, 0xf9, 0xee, 0xfd, 0x39, 0xe5, 0x07, 0xf7, 0xe7, 0x86, 0x7e, 0x74, 0x7f, 0x4e, 0xf9, 0xf1, + 0xfd, 0xb9, 0xa1, 0x37, 0xbe, 0x37, 0x37, 0xf4, 0xe6, 0xf7, 0xe6, 0x86, 0xbe, 0xfa, 0xbd, 0x39, + 0x05, 0xfe, 0x68, 0x05, 0x72, 0xec, 0x9b, 0x64, 0xc2, 0x97, 0x86, 0x2f, 0xba, 0x47, 0x88, 0x34, + 0x05, 0x57, 0xf8, 0xaf, 0x80, 0x79, 0x03, 0x27, 0xfc, 0x5e, 0xd9, 0xec, 0x83, 0x7e, 0x8b, 0x2d, + 0xf7, 0x6f, 0x87, 0x61, 0x94, 0x3f, 0x0d, 0x8e, 0xfa, 0x49, 0xf3, 0xab, 0x90, 0x3a, 0x6a, 0x34, + 0xcd, 0x4e, 0xc3, 0x3d, 0x66, 0x8f, 0x41, 0x1f, 0x5e, 0xf2, 0xd5, 0xe6, 0x0f, 0x4e, 0x9f, 0xeb, + 0xb6, 0xec, 0x6e, 0xc7, 0xf0, 0x44, 0xf5, 0xb3, 0x90, 0x39, 0x42, 0x8d, 0xc3, 0x23, 0xb7, 0xda, + 0xb0, 0xaa, 0xb5, 0x16, 0xe9, 0x96, 0xc7, 0x0d, 0xa0, 0x63, 0xeb, 0x56, 0xa9, 0x85, 0x4f, 0x56, + 0x37, 0x5d, 0x93, 0xdc, 0xa5, 0x67, 0x0c, 0xf2, 0x59, 0x3f, 0x07, 0x99, 0x0e, 0x72, 0xba, 0x4d, + 0xb7, 0x5a, 0xb3, 0xbb, 0x96, 0x4b, 0xfa, 0x59, 0xd5, 0x48, 0xd3, 0xb1, 0x12, 0x1e, 0xd2, 0x1f, + 0x83, 0x71, 0xb7, 0xd3, 0x45, 0x55, 0xa7, 0x66, 0xbb, 0x4e, 0xcb, 0xb4, 0x48, 0x3f, 0x9b, 0x32, + 0x32, 0x78, 0x70, 0x87, 0x8d, 0x91, 0x5f, 0xc3, 0xaf, 0xd9, 0x1d, 0x44, 0x6e, 0xa7, 0x13, 0x06, + 0x3d, 0xd0, 0x35, 0x50, 0x5f, 0x46, 0xc7, 0xe4, 0x86, 0x2d, 0x69, 0xe0, 0x8f, 0xfa, 0x93, 0x30, + 0x42, 0xff, 0x9c, 0x0d, 0xe9, 0xae, 0xc9, 0xe6, 0xb5, 0x77, 0x69, 0xf4, 0x21, 0xad, 0xc1, 0x04, + 0xf4, 0x9b, 0x30, 0xea, 0xa2, 0x4e, 0xc7, 0x6c, 0x58, 0xe4, 0xe6, 0x29, 0xbd, 0x3c, 0x1f, 0x61, + 0x86, 0x5d, 0x2a, 0x41, 0x7e, 0x15, 0xd8, 0xe0, 0xf2, 0xfa, 0x55, 0xc8, 0x10, 0xb9, 0xe5, 0x2a, + 0xfd, 0x93, 0x3f, 0xe9, 0x9e, 0xf1, 0x9c, 0xa6, 0x72, 0x7c, 0xaf, 0x80, 0xc3, 0xe8, 0x2f, 0x22, + 0x8e, 0x93, 0xd3, 0x3e, 0x16, 0x71, 0x5a, 0x52, 0x7a, 0x97, 0x49, 0xdb, 0x48, 0x4f, 0xcd, 0x78, + 0xe8, 0x6f, 0x26, 0x6e, 0x42, 0x46, 0xd4, 0x8b, 0x9b, 0x81, 0xb6, 0x3f, 0xc4, 0x0c, 0x4f, 0xf8, + 0x7f, 0x4e, 0xa1, 0x87, 0x15, 0xe8, 0x7c, 0x3e, 0x71, 0x43, 0x99, 0xdd, 0x06, 0x4d, 0x3e, 0x5f, + 0x04, 0xe5, 0x85, 0x20, 0xa5, 0x26, 0x5e, 0x2c, 0x79, 0x52, 0xee, 0x33, 0xe6, 0x9e, 0x85, 0x11, + 0x1a, 0x3f, 0x7a, 0x1a, 0x46, 0xfd, 0x1f, 0xdb, 0x4c, 0x41, 0x72, 0x7b, 0xaf, 0xb2, 0x43, 0x7f, + 0x35, 0x77, 0x67, 0xa3, 0xb0, 0xbd, 0xb3, 0xbb, 0x5e, 0xfa, 0xb8, 0x96, 0xd0, 0x27, 0x21, 0x5d, + 0x5c, 0xdf, 0xd8, 0xa8, 0x16, 0x0b, 0xeb, 0x1b, 0xe5, 0xbb, 0x9a, 0x9a, 0x9b, 0x83, 0x11, 0xaa, + 0x27, 0xf9, 0xf5, 0xbf, 0xae, 0x65, 0x1d, 0xf3, 0xf6, 0x81, 0x1c, 0xe4, 0xbe, 0xae, 0xc3, 0x68, + 0xa1, 0xd9, 0xdc, 0x34, 0xdb, 0x8e, 0xfe, 0x3c, 0x4c, 0xd1, 0xdf, 0xe5, 0xd8, 0xb5, 0x57, 0xc9, + 0x8f, 0x54, 0xe2, 0xe2, 0xa0, 0xb0, 0x3f, 0x23, 0xe1, 0x5f, 0x37, 0x13, 0x5f, 0x0a, 0xc9, 0x52, + 0x03, 0x87, 0x39, 0xf4, 0x5d, 0xd0, 0xf8, 0xe0, 0x5a, 0xd3, 0x36, 0x5d, 0xcc, 0x9b, 0x60, 0xbf, + 0x21, 0xd9, 0x9b, 0x97, 0x8b, 0x52, 0xda, 0x10, 0x83, 0xfe, 0x31, 0x48, 0xad, 0x5b, 0xee, 0x95, + 0x65, 0xcc, 0xc6, 0xff, 0x44, 0x53, 0x98, 0x8d, 0x8b, 0x50, 0x16, 0x0f, 0xc1, 0xd0, 0xd7, 0x56, + 0x30, 0x3a, 0xd9, 0x0f, 0x4d, 0x44, 0x7c, 0x34, 0x39, 0xd4, 0x9f, 0x85, 0x31, 0x7c, 0x77, 0x42, + 0x4f, 0x3e, 0xcc, 0x5b, 0xd7, 0x10, 0xdc, 0x93, 0xa1, 0x78, 0x1f, 0xc3, 0x09, 0xe8, 0xf9, 0x47, + 0xfa, 0x12, 0x08, 0x0a, 0xf8, 0x18, 0x4c, 0xb0, 0xe3, 0x69, 0x30, 0xda, 0x93, 0x60, 0x47, 0xd2, + 0x60, 0x47, 0xd4, 0x60, 0xc7, 0xd3, 0x20, 0xd5, 0x97, 0x40, 0xd4, 0xc0, 0x3b, 0xd6, 0x8b, 0x00, + 0x6b, 0x8d, 0xd7, 0x50, 0x9d, 0xaa, 0x40, 0xff, 0x80, 0x53, 0x2e, 0x82, 0xc1, 0x17, 0xa2, 0x14, + 0x02, 0x4a, 0x2f, 0x43, 0x7a, 0xe7, 0xc0, 0x27, 0x81, 0x50, 0x1e, 0x7b, 0x6a, 0x1c, 0x48, 0x2c, + 0x22, 0xce, 0x53, 0x85, 0x5e, 0x4c, 0xba, 0xbf, 0x2a, 0xc2, 0xd5, 0x08, 0x28, 0x5f, 0x15, 0x4a, + 0x92, 0x89, 0x51, 0x45, 0x60, 0x11, 0x71, 0xb8, 0x18, 0x16, 0x6d, 0x1b, 0x4b, 0xb2, 0xaa, 0x34, + 0x1f, 0x41, 0xc1, 0x24, 0x58, 0x31, 0x64, 0x47, 0xc4, 0x23, 0x24, 0xc8, 0x31, 0x78, 0xa2, 0xb7, + 0x47, 0xb8, 0x0c, 0xf7, 0x08, 0x3f, 0x16, 0xf3, 0x8c, 0xbc, 0xd1, 0x8a, 0x79, 0x26, 0x63, 0xf3, + 0x8c, 0x8b, 0x4a, 0x79, 0xc6, 0x87, 0xf5, 0x4f, 0xc0, 0x24, 0x1f, 0xc3, 0xe5, 0x09, 0x93, 0x6a, + 0xec, 0x4f, 0xdc, 0xf5, 0x26, 0x65, 0x92, 0x94, 0x53, 0xc6, 0xeb, 0x15, 0x98, 0xe0, 0x43, 0x9b, + 0x0e, 0xb9, 0xdc, 0x29, 0xf6, 0xd7, 0x4b, 0x7a, 0x33, 0x52, 0x41, 0x4a, 0x28, 0xa1, 0x67, 0x57, + 0x61, 0x26, 0xba, 0x1a, 0x89, 0xe5, 0x77, 0x8c, 0x96, 0xdf, 0x53, 0x62, 0xf9, 0x55, 0xc4, 0xf2, + 0x5d, 0x82, 0xd3, 0x91, 0xb5, 0x27, 0x8e, 0x24, 0x21, 0x92, 0xdc, 0x82, 0xf1, 0x40, 0xc9, 0x11, + 0xc1, 0xc3, 0x11, 0xe0, 0xe1, 0x30, 0xd8, 0x0f, 0xad, 0x88, 0xd5, 0x23, 0x00, 0x56, 0x45, 0xf0, + 0xc7, 0x60, 0x22, 0x58, 0x6f, 0x44, 0xf4, 0x78, 0x04, 0x7a, 0x3c, 0x02, 0x1d, 0x7d, 0xee, 0x64, + 0x04, 0x3a, 0x29, 0xa1, 0x77, 0x7a, 0x9e, 0x7b, 0x2a, 0x02, 0x3d, 0x15, 0x81, 0x8e, 0x3e, 0xb7, + 0x1e, 0x81, 0xd6, 0x45, 0xf4, 0xd3, 0x30, 0x29, 0x95, 0x18, 0x11, 0x3e, 0x1a, 0x01, 0x1f, 0x15, + 0xe1, 0xcf, 0x80, 0x26, 0x17, 0x17, 0x11, 0x3f, 0x19, 0x81, 0x9f, 0x8c, 0x3a, 0x7d, 0xb4, 0xf6, + 0x23, 0x11, 0xf0, 0x91, 0xc8, 0xd3, 0x47, 0xe3, 0xb5, 0x08, 0xbc, 0x26, 0xe2, 0xf3, 0x90, 0x11, + 0xab, 0x89, 0x88, 0x4d, 0x45, 0x60, 0x53, 0xb2, 0xdd, 0x03, 0xc5, 0x24, 0x2e, 0xd2, 0xc7, 0x7a, + 0xa4, 0x4b, 0xa0, 0x84, 0xc4, 0x91, 0x64, 0x44, 0x92, 0x4f, 0xc2, 0xa9, 0xa8, 0x92, 0x11, 0xc1, + 0xb1, 0x20, 0x72, 0x4c, 0xe0, 0x1e, 0xd1, 0x6f, 0xf6, 0xcc, 0xb6, 0xd4, 0x38, 0xcd, 0xbe, 0x08, + 0xd3, 0x11, 0x85, 0x23, 0x82, 0x76, 0x29, 0xd8, 0x8d, 0x65, 0x05, 0x5a, 0x52, 0x04, 0x1a, 0xd6, + 0xe1, 0xb6, 0xdd, 0xb0, 0x5c, 0xb1, 0x2b, 0xfb, 0xc6, 0x34, 0x4c, 0xb0, 0xf2, 0xb4, 0xd5, 0xa9, + 0xa3, 0x0e, 0xaa, 0xeb, 0x7f, 0xa1, 0x77, 0xef, 0x74, 0x29, 0x5c, 0xd4, 0x18, 0xea, 0x04, 0x2d, + 0xd4, 0x8b, 0x3d, 0x5b, 0xa8, 0x8b, 0xf1, 0xf4, 0x71, 0x9d, 0x54, 0x29, 0xd4, 0x49, 0x3d, 0xd1, + 0x9b, 0xb4, 0x57, 0x43, 0x55, 0x0a, 0x35, 0x54, 0xfd, 0x49, 0x22, 0xfb, 0xaa, 0xb5, 0x70, 0x5f, + 0xb5, 0xd0, 0x9b, 0xa5, 0x77, 0x7b, 0xb5, 0x16, 0x6e, 0xaf, 0x62, 0x78, 0xa2, 0xbb, 0xac, 0xb5, + 0x70, 0x97, 0xd5, 0x87, 0xa7, 0x77, 0xb3, 0xb5, 0x16, 0x6e, 0xb6, 0x62, 0x78, 0xa2, 0x7b, 0xae, + 0xf5, 0x88, 0x9e, 0xeb, 0xc9, 0xde, 0x44, 0xfd, 0x5a, 0xaf, 0x8d, 0xa8, 0xd6, 0x6b, 0xb1, 0x8f, + 0x52, 0x7d, 0x3b, 0xb0, 0xf5, 0x88, 0x0e, 0x2c, 0x4e, 0xb1, 0x1e, 0x8d, 0xd8, 0x46, 0x54, 0x23, + 0x16, 0xab, 0x58, 0xaf, 0x7e, 0xec, 0xe7, 0xe4, 0x7e, 0xec, 0x42, 0x6f, 0xa6, 0xe8, 0xb6, 0x6c, + 0x2d, 0xdc, 0x96, 0x2d, 0xc4, 0xe5, 0x5c, 0x54, 0x77, 0xf6, 0x62, 0xcf, 0xee, 0x6c, 0x80, 0x14, + 0x8e, 0x6b, 0xd2, 0x5e, 0xe8, 0xd5, 0xa4, 0x2d, 0xc5, 0x73, 0xf7, 0xef, 0xd5, 0xf6, 0x7a, 0xf4, + 0x6a, 0x4f, 0xc5, 0x13, 0x7f, 0xd8, 0xb2, 0x7d, 0xd8, 0xb2, 0x7d, 0xd8, 0xb2, 0x7d, 0xd8, 0xb2, + 0xfd, 0xec, 0x5b, 0xb6, 0x7c, 0xf2, 0xb3, 0x5f, 0x9e, 0x57, 0x72, 0xff, 0x59, 0xf5, 0xfe, 0xe0, + 0xda, 0xf3, 0x0d, 0xf7, 0x08, 0x97, 0xb7, 0x4d, 0xc8, 0x90, 0x1f, 0x00, 0x6e, 0x99, 0xed, 0x76, + 0xc3, 0x3a, 0x64, 0x3d, 0xdb, 0x62, 0xf8, 0x51, 0x22, 0x03, 0x90, 0x3f, 0x36, 0xb3, 0x49, 0x85, + 0xd9, 0x72, 0x63, 0xf9, 0x23, 0xfa, 0x1d, 0x48, 0xb7, 0x9c, 0x43, 0x8f, 0x2d, 0x11, 0x5a, 0x08, + 0x25, 0x36, 0x7a, 0xa5, 0x3e, 0x19, 0xb4, 0xbc, 0x01, 0xac, 0xda, 0xfe, 0xb1, 0xeb, 0xab, 0xa6, + 0xc6, 0xa9, 0x86, 0x7d, 0x1a, 0x54, 0x6d, 0xdf, 0x1f, 0xc1, 0x61, 0x2b, 0xeb, 0x1e, 0x57, 0xe9, + 0x02, 0xc1, 0xf3, 0x3c, 0x4c, 0x4a, 0xda, 0x46, 0xe4, 0xfc, 0x03, 0xf8, 0x06, 0x2b, 0x26, 0x6b, + 0x1e, 0x97, 0x13, 0x62, 0x40, 0xe6, 0x1e, 0x85, 0xf1, 0x00, 0xb7, 0x9e, 0x01, 0xe5, 0x80, 0x7d, + 0x9d, 0x52, 0x39, 0xc8, 0x7d, 0x49, 0x81, 0x34, 0x7b, 0x95, 0x60, 0xdb, 0x6c, 0x74, 0xf4, 0xe7, + 0x20, 0xd9, 0xe4, 0x5f, 0x69, 0x7a, 0xd0, 0xaf, 0xcf, 0x12, 0x06, 0x7d, 0x0d, 0x86, 0x3b, 0xde, + 0x57, 0x9e, 0x1e, 0xe8, 0x3b, 0xb1, 0x04, 0x9e, 0xbb, 0xa7, 0xc0, 0x14, 0x7b, 0xd3, 0xd5, 0x61, + 0x2f, 0x40, 0x9b, 0xed, 0xd9, 0xaf, 0x2b, 0x30, 0xe6, 0x1d, 0xe9, 0xfb, 0x30, 0xe1, 0x1d, 0xd0, + 0x97, 0xec, 0x69, 0xa4, 0xe6, 0x05, 0x0b, 0x87, 0x38, 0x96, 0x22, 0x3e, 0xd1, 0xcd, 0x28, 0xba, + 0x26, 0x07, 0x07, 0x67, 0x0b, 0x30, 0x1d, 0x21, 0x76, 0x92, 0x05, 0x39, 0x77, 0x0e, 0xc6, 0x2a, + 0xb6, 0x4b, 0x7f, 0x39, 0x47, 0x3f, 0x25, 0xec, 0x2a, 0x14, 0x13, 0xda, 0x10, 0x01, 0x2f, 0x9e, + 0x83, 0x51, 0x96, 0xfd, 0xfa, 0x08, 0x24, 0x36, 0x0b, 0xda, 0x10, 0xf9, 0xbf, 0xa8, 0x29, 0xe4, + 0xff, 0x92, 0x96, 0x28, 0x6e, 0x3c, 0xc0, 0x4e, 0xd3, 0x50, 0xaf, 0x9d, 0xa6, 0xfd, 0x11, 0x6a, + 0x9e, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x88, 0xd5, 0x59, 0xc4, 0x6d, 0x83, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -4080,6 +4085,9 @@ return dAtA } func (m *Message) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -4153,6 +4161,9 @@ } func (m *Nested) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Bunny) @@ -4166,6 +4177,9 @@ } func (m *AllMaps) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -4320,6 +4334,9 @@ } func (m *AllMapsOrdered) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.StringToDoubleMap) > 0 { @@ -4474,6 +4491,9 @@ } func (m *MessageWithMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NameMapping) > 0 { @@ -4516,6 +4536,9 @@ } func (m *FloatingPoint) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.F != 0 { @@ -4528,6 +4551,9 @@ } func (m *Uint128Pair) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -4543,6 +4569,9 @@ } func (m *ContainsNestedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -4552,6 +4581,9 @@ } func (m *ContainsNestedMap_NestedMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.NestedMapField) > 0 { @@ -4569,6 +4601,9 @@ } func (m *NotPacked) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Key) > 0 { @@ -5376,6 +5411,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Key) == 0 { + m.Key = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { @@ -10055,6 +10101,17 @@ if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Key) == 0 { + m.Key = make([]uint64, 0, elementCount) + } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/theproto3/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/theproto3/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -32,5 +32,5 @@ cp header.proto theproto3.proto cat maps.proto >> theproto3.proto cat footer.proto >> theproto3.proto - protoc-gen-combo --version="3.0.0" --gogo_out=. --proto_path=../../../../../:../../protobuf/:. theproto3.proto + protoc-gen-combo --version="3.0.0" --gogo_out=. --proto_path=../../protobuf/:../../../../../:. theproto3.proto find combos -type d -not -name combos -exec cp proto3_test.go.in {}/proto3_test.go \; diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/thetest.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/thetest.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/thetest.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/thetest.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -8320,422 +8320,427 @@ func ThetestDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 6636 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x6b, 0x70, 0x24, 0x57, - 0x75, 0xbf, 0x7a, 0x7a, 0xa4, 0x1d, 0x1d, 0xbd, 0x5a, 0xad, 0x5d, 0xed, 0x58, 0x5e, 0x4b, 0xda, - 0xf1, 0x7a, 0x2d, 0x0b, 0x5b, 0xab, 0xd5, 0x6a, 0x5f, 0xb3, 0xd8, 0xfe, 0xcf, 0x6b, 0xd7, 0x5a, - 0xa4, 0x91, 0x68, 0x49, 0xd8, 0x0b, 0xff, 0x7f, 0x4d, 0xf5, 0xce, 0x5c, 0x49, 0x63, 0xcf, 0x74, - 0x0f, 0xd3, 0x2d, 0xdb, 0x72, 0xfd, 0x2b, 0xe5, 0x40, 0x42, 0x20, 0xa9, 0x3c, 0x49, 0x2a, 0x40, - 0xc0, 0x98, 0xa4, 0x08, 0x86, 0xbc, 0x20, 0x10, 0x02, 0x24, 0x15, 0xfc, 0x85, 0x64, 0xf3, 0x25, - 0x65, 0xf2, 0x29, 0x45, 0xa5, 0x5c, 0xec, 0x9a, 0xaa, 0x90, 0xc4, 0x09, 0x84, 0xb8, 0x2a, 0x54, - 0x99, 0x0f, 0xa9, 0xfb, 0xea, 0xee, 0x7b, 0xa7, 0x47, 0xdd, 0xf2, 0xda, 0x86, 0x2f, 0xbb, 0x33, - 0xf7, 0x9c, 0xdf, 0xe9, 0x73, 0xcf, 0xeb, 0x9e, 0xbe, 0xf7, 0x6a, 0xe0, 0x07, 0x17, 0x61, 0x7a, - 0xdb, 0xb6, 0xb7, 0x1b, 0xe8, 0x54, 0xab, 0x6d, 0xbb, 0xf6, 0xf5, 0xdd, 0xad, 0x53, 0x35, 0xe4, - 0x54, 0xdb, 0xf5, 0x96, 0x6b, 0xb7, 0xe7, 0xc8, 0x98, 0x3e, 0x42, 0x39, 0xe6, 0x38, 0x47, 0x66, - 0x05, 0x46, 0x2f, 0xd7, 0x1b, 0xa8, 0xe8, 0x31, 0xae, 0x23, 0x57, 0xbf, 0x00, 0xc9, 0xad, 0x7a, - 0x03, 0xa5, 0x95, 0x69, 0x75, 0x66, 0x60, 0xe1, 0xc4, 0x9c, 0x04, 0x9a, 0x13, 0x11, 0x6b, 0x78, - 0xd8, 0x20, 0x88, 0xcc, 0xf7, 0x92, 0x30, 0x16, 0x42, 0xd5, 0x75, 0x48, 0x5a, 0x66, 0x13, 0x4b, - 0x54, 0x66, 0xfa, 0x0d, 0xf2, 0x59, 0x4f, 0xc3, 0xa1, 0x96, 0x59, 0x7d, 0xc2, 0xdc, 0x46, 0xe9, - 0x04, 0x19, 0xe6, 0x5f, 0xf5, 0x49, 0x80, 0x1a, 0x6a, 0x21, 0xab, 0x86, 0xac, 0xea, 0x5e, 0x5a, - 0x9d, 0x56, 0x67, 0xfa, 0x8d, 0xc0, 0x88, 0xfe, 0x0e, 0x18, 0x6d, 0xed, 0x5e, 0x6f, 0xd4, 0xab, - 0x95, 0x00, 0x1b, 0x4c, 0xab, 0x33, 0xbd, 0x86, 0x46, 0x09, 0x45, 0x9f, 0xf9, 0x5e, 0x18, 0x79, - 0x0a, 0x99, 0x4f, 0x04, 0x59, 0x07, 0x08, 0xeb, 0x30, 0x1e, 0x0e, 0x30, 0x16, 0x60, 0xb0, 0x89, - 0x1c, 0xc7, 0xdc, 0x46, 0x15, 0x77, 0xaf, 0x85, 0xd2, 0x49, 0x32, 0xfb, 0xe9, 0x8e, 0xd9, 0xcb, - 0x33, 0x1f, 0x60, 0xa8, 0x8d, 0xbd, 0x16, 0xd2, 0x73, 0xd0, 0x8f, 0xac, 0xdd, 0x26, 0x95, 0xd0, - 0xdb, 0xc5, 0x7e, 0x25, 0x6b, 0xb7, 0x29, 0x4b, 0x49, 0x61, 0x18, 0x13, 0x71, 0xc8, 0x41, 0xed, - 0x27, 0xeb, 0x55, 0x94, 0xee, 0x23, 0x02, 0xee, 0xed, 0x10, 0xb0, 0x4e, 0xe9, 0xb2, 0x0c, 0x8e, - 0xd3, 0x0b, 0xd0, 0x8f, 0x9e, 0x76, 0x91, 0xe5, 0xd4, 0x6d, 0x2b, 0x7d, 0x88, 0x08, 0xb9, 0x27, - 0xc4, 0x8b, 0xa8, 0x51, 0x93, 0x45, 0xf8, 0x38, 0xfd, 0x1c, 0x1c, 0xb2, 0x5b, 0x6e, 0xdd, 0xb6, - 0x9c, 0x74, 0x6a, 0x5a, 0x99, 0x19, 0x58, 0x38, 0x16, 0x1a, 0x08, 0xab, 0x94, 0xc7, 0xe0, 0xcc, - 0xfa, 0x12, 0x68, 0x8e, 0xbd, 0xdb, 0xae, 0xa2, 0x4a, 0xd5, 0xae, 0xa1, 0x4a, 0xdd, 0xda, 0xb2, - 0xd3, 0xfd, 0x44, 0xc0, 0x54, 0xe7, 0x44, 0x08, 0x63, 0xc1, 0xae, 0xa1, 0x25, 0x6b, 0xcb, 0x36, - 0x86, 0x1d, 0xe1, 0xbb, 0x3e, 0x0e, 0x7d, 0xce, 0x9e, 0xe5, 0x9a, 0x4f, 0xa7, 0x07, 0x49, 0x84, - 0xb0, 0x6f, 0x99, 0xaf, 0xf7, 0xc1, 0x48, 0x9c, 0x10, 0xbb, 0x04, 0xbd, 0x5b, 0x78, 0x96, 0xe9, - 0xc4, 0x41, 0x6c, 0x40, 0x31, 0xa2, 0x11, 0xfb, 0xde, 0xa0, 0x11, 0x73, 0x30, 0x60, 0x21, 0xc7, - 0x45, 0x35, 0x1a, 0x11, 0x6a, 0xcc, 0x98, 0x02, 0x0a, 0xea, 0x0c, 0xa9, 0xe4, 0x1b, 0x0a, 0xa9, - 0xc7, 0x60, 0xc4, 0x53, 0xa9, 0xd2, 0x36, 0xad, 0x6d, 0x1e, 0x9b, 0xa7, 0xa2, 0x34, 0x99, 0x2b, - 0x71, 0x9c, 0x81, 0x61, 0xc6, 0x30, 0x12, 0xbe, 0xeb, 0x45, 0x00, 0xdb, 0x42, 0xf6, 0x56, 0xa5, - 0x86, 0xaa, 0x8d, 0x74, 0xaa, 0x8b, 0x95, 0x56, 0x31, 0x4b, 0x87, 0x95, 0x6c, 0x3a, 0x5a, 0x6d, - 0xe8, 0x17, 0xfd, 0x50, 0x3b, 0xd4, 0x25, 0x52, 0x56, 0x68, 0x92, 0x75, 0x44, 0xdb, 0x26, 0x0c, - 0xb7, 0x11, 0x8e, 0x7b, 0x54, 0x63, 0x33, 0xeb, 0x27, 0x4a, 0xcc, 0x45, 0xce, 0xcc, 0x60, 0x30, - 0x3a, 0xb1, 0xa1, 0x76, 0xf0, 0xab, 0x7e, 0x37, 0x78, 0x03, 0x15, 0x12, 0x56, 0x40, 0xaa, 0xd0, - 0x20, 0x1f, 0x2c, 0x9b, 0x4d, 0x34, 0xf1, 0x0c, 0x0c, 0x8b, 0xe6, 0xd1, 0x0f, 0x43, 0xaf, 0xe3, - 0x9a, 0x6d, 0x97, 0x44, 0x61, 0xaf, 0x41, 0xbf, 0xe8, 0x1a, 0xa8, 0xc8, 0xaa, 0x91, 0x2a, 0xd7, - 0x6b, 0xe0, 0x8f, 0xfa, 0xff, 0xf1, 0x27, 0xac, 0x92, 0x09, 0x9f, 0xec, 0xf4, 0xa8, 0x20, 0x59, - 0x9e, 0xf7, 0xc4, 0x79, 0x18, 0x12, 0x26, 0x10, 0xf7, 0xd1, 0x99, 0xff, 0x0f, 0x47, 0x42, 0x45, - 0xeb, 0x8f, 0xc1, 0xe1, 0x5d, 0xab, 0x6e, 0xb9, 0xa8, 0xdd, 0x6a, 0x23, 0x1c, 0xb1, 0xf4, 0x51, - 0xe9, 0x7f, 0x39, 0xd4, 0x25, 0xe6, 0x36, 0x83, 0xdc, 0x54, 0x8a, 0x31, 0xb6, 0xdb, 0x39, 0x38, - 0xdb, 0x9f, 0xfa, 0xfe, 0x21, 0xed, 0xd9, 0x67, 0x9f, 0x7d, 0x36, 0x91, 0xf9, 0x58, 0x1f, 0x1c, - 0x0e, 0xcb, 0x99, 0xd0, 0xf4, 0x1d, 0x87, 0x3e, 0x6b, 0xb7, 0x79, 0x1d, 0xb5, 0x89, 0x91, 0x7a, - 0x0d, 0xf6, 0x4d, 0xcf, 0x41, 0x6f, 0xc3, 0xbc, 0x8e, 0x1a, 0xe9, 0xe4, 0xb4, 0x32, 0x33, 0xbc, - 0xf0, 0x8e, 0x58, 0x59, 0x39, 0xb7, 0x8c, 0x21, 0x06, 0x45, 0xea, 0x0f, 0x41, 0x92, 0x95, 0x68, - 0x2c, 0x61, 0x36, 0x9e, 0x04, 0x9c, 0x4b, 0x06, 0xc1, 0xe9, 0x77, 0x42, 0x3f, 0xfe, 0x9f, 0xc6, - 0x46, 0x1f, 0xd1, 0x39, 0x85, 0x07, 0x70, 0x5c, 0xe8, 0x13, 0x90, 0x22, 0x69, 0x52, 0x43, 0x7c, - 0x69, 0xf3, 0xbe, 0xe3, 0xc0, 0xaa, 0xa1, 0x2d, 0x73, 0xb7, 0xe1, 0x56, 0x9e, 0x34, 0x1b, 0xbb, - 0x88, 0x04, 0x7c, 0xbf, 0x31, 0xc8, 0x06, 0xdf, 0x83, 0xc7, 0xf4, 0x29, 0x18, 0xa0, 0x59, 0x55, - 0xb7, 0x6a, 0xe8, 0x69, 0x52, 0x3d, 0x7b, 0x0d, 0x9a, 0x68, 0x4b, 0x78, 0x04, 0x3f, 0xfe, 0x71, - 0xc7, 0xb6, 0x78, 0x68, 0x92, 0x47, 0xe0, 0x01, 0xf2, 0xf8, 0xf3, 0x72, 0xe1, 0xbe, 0x2b, 0x7c, - 0x7a, 0x72, 0x4c, 0x65, 0xbe, 0x9a, 0x80, 0x24, 0xa9, 0x17, 0x23, 0x30, 0xb0, 0x71, 0x6d, 0xad, - 0x54, 0x29, 0xae, 0x6e, 0xe6, 0x97, 0x4b, 0x9a, 0xa2, 0x0f, 0x03, 0x90, 0x81, 0xcb, 0xcb, 0xab, - 0xb9, 0x0d, 0x2d, 0xe1, 0x7d, 0x5f, 0x2a, 0x6f, 0x9c, 0x5b, 0xd4, 0x54, 0x0f, 0xb0, 0x49, 0x07, - 0x92, 0x41, 0x86, 0x33, 0x0b, 0x5a, 0xaf, 0xae, 0xc1, 0x20, 0x15, 0xb0, 0xf4, 0x58, 0xa9, 0x78, - 0x6e, 0x51, 0xeb, 0x13, 0x47, 0xce, 0x2c, 0x68, 0x87, 0xf4, 0x21, 0xe8, 0x27, 0x23, 0xf9, 0xd5, - 0xd5, 0x65, 0x2d, 0xe5, 0xc9, 0x5c, 0xdf, 0x30, 0x96, 0xca, 0x57, 0xb4, 0x7e, 0x4f, 0xe6, 0x15, - 0x63, 0x75, 0x73, 0x4d, 0x03, 0x4f, 0xc2, 0x4a, 0x69, 0x7d, 0x3d, 0x77, 0xa5, 0xa4, 0x0d, 0x78, - 0x1c, 0xf9, 0x6b, 0x1b, 0xa5, 0x75, 0x6d, 0x50, 0x50, 0xeb, 0xcc, 0x82, 0x36, 0xe4, 0x3d, 0xa2, - 0x54, 0xde, 0x5c, 0xd1, 0x86, 0xf5, 0x51, 0x18, 0xa2, 0x8f, 0xe0, 0x4a, 0x8c, 0x48, 0x43, 0xe7, - 0x16, 0x35, 0xcd, 0x57, 0x84, 0x4a, 0x19, 0x15, 0x06, 0xce, 0x2d, 0x6a, 0x7a, 0xa6, 0x00, 0xbd, - 0x24, 0xba, 0x74, 0x1d, 0x86, 0x97, 0x73, 0xf9, 0xd2, 0x72, 0x65, 0x75, 0x6d, 0x63, 0x69, 0xb5, - 0x9c, 0x5b, 0xd6, 0x14, 0x7f, 0xcc, 0x28, 0xbd, 0x7b, 0x73, 0xc9, 0x28, 0x15, 0xb5, 0x44, 0x70, - 0x6c, 0xad, 0x94, 0xdb, 0x28, 0x15, 0x35, 0x35, 0x53, 0x85, 0xc3, 0x61, 0x75, 0x32, 0x34, 0x33, - 0x02, 0x2e, 0x4e, 0x74, 0x71, 0x31, 0x91, 0xd5, 0xe1, 0xe2, 0x57, 0x12, 0x30, 0x16, 0xb2, 0x56, - 0x84, 0x3e, 0xe4, 0x61, 0xe8, 0xa5, 0x21, 0x4a, 0x57, 0xcf, 0xfb, 0x42, 0x17, 0x1d, 0x12, 0xb0, - 0x1d, 0x2b, 0x28, 0xc1, 0x05, 0x3b, 0x08, 0xb5, 0x4b, 0x07, 0x81, 0x45, 0x74, 0xd4, 0xf4, 0xff, - 0xd7, 0x51, 0xd3, 0xe9, 0xb2, 0x77, 0x2e, 0xce, 0xb2, 0x47, 0xc6, 0x0e, 0x56, 0xdb, 0x7b, 0x43, - 0x6a, 0xfb, 0x25, 0x18, 0xed, 0x10, 0x14, 0xbb, 0xc6, 0x7e, 0x50, 0x81, 0x74, 0x37, 0xe3, 0x44, - 0x54, 0xba, 0x84, 0x50, 0xe9, 0x2e, 0xc9, 0x16, 0x3c, 0xde, 0xdd, 0x09, 0x1d, 0xbe, 0xfe, 0x9c, - 0x02, 0xe3, 0xe1, 0x9d, 0x62, 0xa8, 0x0e, 0x0f, 0x41, 0x5f, 0x13, 0xb9, 0x3b, 0x36, 0xef, 0x96, - 0x4e, 0x86, 0xac, 0xc1, 0x98, 0x2c, 0x3b, 0x9b, 0xa1, 0x82, 0x8b, 0xb8, 0xda, 0xad, 0xdd, 0xa3, - 0xda, 0x74, 0x68, 0xfa, 0x91, 0x04, 0x1c, 0x09, 0x15, 0x1e, 0xaa, 0xe8, 0x5d, 0x00, 0x75, 0xab, - 0xb5, 0xeb, 0xd2, 0x8e, 0x88, 0x16, 0xd8, 0x7e, 0x32, 0x42, 0x8a, 0x17, 0x2e, 0x9e, 0xbb, 0xae, - 0x47, 0x57, 0x09, 0x1d, 0xe8, 0x10, 0x61, 0xb8, 0xe0, 0x2b, 0x9a, 0x24, 0x8a, 0x4e, 0x76, 0x99, - 0x69, 0x47, 0x60, 0xce, 0x83, 0x56, 0x6d, 0xd4, 0x91, 0xe5, 0x56, 0x1c, 0xb7, 0x8d, 0xcc, 0x66, - 0xdd, 0xda, 0x26, 0x2b, 0x48, 0x2a, 0xdb, 0xbb, 0x65, 0x36, 0x1c, 0x64, 0x8c, 0x50, 0xf2, 0x3a, - 0xa7, 0x62, 0x04, 0x09, 0xa0, 0x76, 0x00, 0xd1, 0x27, 0x20, 0x28, 0xd9, 0x43, 0x64, 0xbe, 0x9c, - 0x82, 0x81, 0x40, 0x5f, 0xad, 0x1f, 0x87, 0xc1, 0xc7, 0xcd, 0x27, 0xcd, 0x0a, 0x7f, 0x57, 0xa2, - 0x96, 0x18, 0xc0, 0x63, 0x6b, 0xec, 0x7d, 0x69, 0x1e, 0x0e, 0x13, 0x16, 0x7b, 0xd7, 0x45, 0xed, - 0x4a, 0xb5, 0x61, 0x3a, 0x0e, 0x31, 0x5a, 0x8a, 0xb0, 0xea, 0x98, 0xb6, 0x8a, 0x49, 0x05, 0x4e, - 0xd1, 0xcf, 0xc2, 0x18, 0x41, 0x34, 0x77, 0x1b, 0x6e, 0xbd, 0xd5, 0x40, 0x15, 0xfc, 0xf6, 0xe6, - 0x90, 0x95, 0xc4, 0xd3, 0x6c, 0x14, 0x73, 0xac, 0x30, 0x06, 0xac, 0x91, 0xa3, 0x17, 0xe1, 0x2e, - 0x02, 0xdb, 0x46, 0x16, 0x6a, 0x9b, 0x2e, 0xaa, 0xa0, 0xf7, 0xef, 0x9a, 0x0d, 0xa7, 0x62, 0x5a, - 0xb5, 0xca, 0x8e, 0xe9, 0xec, 0xa4, 0x0f, 0x63, 0x01, 0xf9, 0x44, 0x5a, 0x31, 0xee, 0xc0, 0x8c, - 0x57, 0x18, 0x5f, 0x89, 0xb0, 0xe5, 0xac, 0xda, 0x23, 0xa6, 0xb3, 0xa3, 0x67, 0x61, 0x9c, 0x48, - 0x71, 0xdc, 0x76, 0xdd, 0xda, 0xae, 0x54, 0x77, 0x50, 0xf5, 0x89, 0xca, 0xae, 0xbb, 0x75, 0x21, - 0x7d, 0x67, 0xf0, 0xf9, 0x44, 0xc3, 0x75, 0xc2, 0x53, 0xc0, 0x2c, 0x9b, 0xee, 0xd6, 0x05, 0x7d, - 0x1d, 0x06, 0xb1, 0x33, 0x9a, 0xf5, 0x67, 0x50, 0x65, 0xcb, 0x6e, 0x93, 0xa5, 0x71, 0x38, 0xa4, - 0x34, 0x05, 0x2c, 0x38, 0xb7, 0xca, 0x00, 0x2b, 0x76, 0x0d, 0x65, 0x7b, 0xd7, 0xd7, 0x4a, 0xa5, - 0xa2, 0x31, 0xc0, 0xa5, 0x5c, 0xb6, 0xdb, 0x38, 0xa0, 0xb6, 0x6d, 0xcf, 0xc0, 0x03, 0x34, 0xa0, - 0xb6, 0x6d, 0x6e, 0xde, 0xb3, 0x30, 0x56, 0xad, 0xd2, 0x39, 0xd7, 0xab, 0x15, 0xf6, 0x8e, 0xe5, - 0xa4, 0x35, 0xc1, 0x58, 0xd5, 0xea, 0x15, 0xca, 0xc0, 0x62, 0xdc, 0xd1, 0x2f, 0xc2, 0x11, 0xdf, - 0x58, 0x41, 0xe0, 0x68, 0xc7, 0x2c, 0x65, 0xe8, 0x59, 0x18, 0x6b, 0xed, 0x75, 0x02, 0x75, 0xe1, - 0x89, 0xad, 0x3d, 0x19, 0x76, 0x1e, 0x0e, 0xb7, 0x76, 0x5a, 0x9d, 0xb8, 0xd9, 0x20, 0x4e, 0x6f, - 0xed, 0xb4, 0x64, 0xe0, 0x3d, 0xe4, 0x85, 0xbb, 0x8d, 0xaa, 0xa6, 0x8b, 0x6a, 0xe9, 0xa3, 0x41, - 0xf6, 0x00, 0x41, 0x3f, 0x05, 0x5a, 0xb5, 0x5a, 0x41, 0x96, 0x79, 0xbd, 0x81, 0x2a, 0x66, 0x1b, - 0x59, 0xa6, 0x93, 0x9e, 0x0a, 0x32, 0x0f, 0x57, 0xab, 0x25, 0x42, 0xcd, 0x11, 0xa2, 0x3e, 0x0b, - 0xa3, 0xf6, 0xf5, 0xc7, 0xab, 0x34, 0x24, 0x2b, 0xad, 0x36, 0xda, 0xaa, 0x3f, 0x9d, 0x3e, 0x41, - 0xec, 0x3b, 0x82, 0x09, 0x24, 0x20, 0xd7, 0xc8, 0xb0, 0x7e, 0x1f, 0x68, 0x55, 0x67, 0xc7, 0x6c, - 0xb7, 0x48, 0x4d, 0x76, 0x5a, 0x66, 0x15, 0xa5, 0xef, 0xa1, 0xac, 0x74, 0xbc, 0xcc, 0x87, 0x71, - 0x4a, 0x38, 0x4f, 0xd5, 0xb7, 0x5c, 0x2e, 0xf1, 0x5e, 0x9a, 0x12, 0x64, 0x8c, 0x49, 0x9b, 0x01, - 0x0d, 0x9b, 0x42, 0x78, 0xf0, 0x0c, 0x61, 0x1b, 0x6e, 0xed, 0xb4, 0x82, 0xcf, 0xbd, 0x1b, 0x86, - 0x30, 0xa7, 0xff, 0xd0, 0xfb, 0x68, 0x43, 0xd6, 0xda, 0x09, 0x3c, 0xf1, 0x2d, 0xeb, 0x8d, 0x33, - 0x59, 0x18, 0x0c, 0xc6, 0xa7, 0xde, 0x0f, 0x34, 0x42, 0x35, 0x05, 0x37, 0x2b, 0x85, 0xd5, 0x22, - 0x6e, 0x33, 0xde, 0x5b, 0xd2, 0x12, 0xb8, 0xdd, 0x59, 0x5e, 0xda, 0x28, 0x55, 0x8c, 0xcd, 0xf2, - 0xc6, 0xd2, 0x4a, 0x49, 0x53, 0x83, 0x7d, 0xf5, 0xb7, 0x12, 0x30, 0x2c, 0xbe, 0x22, 0xe9, 0xef, - 0x84, 0xa3, 0x7c, 0x3f, 0xc3, 0x41, 0x6e, 0xe5, 0xa9, 0x7a, 0x9b, 0xa4, 0x4c, 0xd3, 0xa4, 0xcb, - 0x97, 0xe7, 0xb4, 0xc3, 0x8c, 0x6b, 0x1d, 0xb9, 0x8f, 0xd6, 0xdb, 0x38, 0x21, 0x9a, 0xa6, 0xab, - 0x2f, 0xc3, 0x94, 0x65, 0x57, 0x1c, 0xd7, 0xb4, 0x6a, 0x66, 0xbb, 0x56, 0xf1, 0x77, 0x92, 0x2a, - 0x66, 0xb5, 0x8a, 0x1c, 0xc7, 0xa6, 0x4b, 0x95, 0x27, 0xe5, 0x98, 0x65, 0xaf, 0x33, 0x66, 0xbf, - 0x86, 0xe7, 0x18, 0xab, 0x14, 0x60, 0x6a, 0xb7, 0x00, 0xbb, 0x13, 0xfa, 0x9b, 0x66, 0xab, 0x82, - 0x2c, 0xb7, 0xbd, 0x47, 0x1a, 0xe3, 0x94, 0x91, 0x6a, 0x9a, 0xad, 0x12, 0xfe, 0xfe, 0xf6, 0xbc, - 0x9f, 0xfc, 0xb3, 0x0a, 0x83, 0xc1, 0xe6, 0x18, 0xbf, 0x6b, 0x54, 0xc9, 0x3a, 0xa2, 0x90, 0x4a, - 0x73, 0xf7, 0xbe, 0xad, 0xf4, 0x5c, 0x01, 0x2f, 0x30, 0xd9, 0x3e, 0xda, 0xb2, 0x1a, 0x14, 0x89, - 0x17, 0x77, 0x5c, 0x5b, 0x10, 0x6d, 0x11, 0x52, 0x06, 0xfb, 0xa6, 0x5f, 0x81, 0xbe, 0xc7, 0x1d, - 0x22, 0xbb, 0x8f, 0xc8, 0x3e, 0xb1, 0xbf, 0xec, 0xab, 0xeb, 0x44, 0x78, 0xff, 0xd5, 0xf5, 0x4a, - 0x79, 0xd5, 0x58, 0xc9, 0x2d, 0x1b, 0x0c, 0xae, 0xdf, 0x01, 0xc9, 0x86, 0xf9, 0xcc, 0x9e, 0xb8, - 0x14, 0x91, 0xa1, 0xb8, 0x86, 0xbf, 0x03, 0x92, 0x4f, 0x21, 0xf3, 0x09, 0x71, 0x01, 0x20, 0x43, - 0x6f, 0x61, 0xe8, 0x9f, 0x82, 0x5e, 0x62, 0x2f, 0x1d, 0x80, 0x59, 0x4c, 0xeb, 0xd1, 0x53, 0x90, - 0x2c, 0xac, 0x1a, 0x38, 0xfc, 0x35, 0x18, 0xa4, 0xa3, 0x95, 0xb5, 0xa5, 0x52, 0xa1, 0xa4, 0x25, - 0x32, 0x67, 0xa1, 0x8f, 0x1a, 0x01, 0xa7, 0x86, 0x67, 0x06, 0xad, 0x87, 0x7d, 0x65, 0x32, 0x14, - 0x4e, 0xdd, 0x5c, 0xc9, 0x97, 0x0c, 0x2d, 0x11, 0x74, 0xaf, 0x03, 0x83, 0xc1, 0xbe, 0xf8, 0xed, - 0x89, 0xa9, 0x6f, 0x28, 0x30, 0x10, 0xe8, 0x73, 0x71, 0x83, 0x62, 0x36, 0x1a, 0xf6, 0x53, 0x15, - 0xb3, 0x51, 0x37, 0x1d, 0x16, 0x14, 0x40, 0x86, 0x72, 0x78, 0x24, 0xae, 0xd3, 0xde, 0x16, 0xe5, - 0x9f, 0x53, 0x40, 0x93, 0x5b, 0x4c, 0x49, 0x41, 0xe5, 0xa7, 0xaa, 0xe0, 0x27, 0x15, 0x18, 0x16, - 0xfb, 0x4a, 0x49, 0xbd, 0xe3, 0x3f, 0x55, 0xf5, 0xbe, 0x9b, 0x80, 0x21, 0xa1, 0x9b, 0x8c, 0xab, - 0xdd, 0xfb, 0x61, 0xb4, 0x5e, 0x43, 0xcd, 0x96, 0xed, 0x22, 0xab, 0xba, 0x57, 0x69, 0xa0, 0x27, - 0x51, 0x23, 0x9d, 0x21, 0x85, 0xe2, 0xd4, 0xfe, 0xfd, 0xea, 0xdc, 0x92, 0x8f, 0x5b, 0xc6, 0xb0, - 0xec, 0xd8, 0x52, 0xb1, 0xb4, 0xb2, 0xb6, 0xba, 0x51, 0x2a, 0x17, 0xae, 0x55, 0x36, 0xcb, 0xef, - 0x2a, 0xaf, 0x3e, 0x5a, 0x36, 0xb4, 0xba, 0xc4, 0xf6, 0x16, 0xa6, 0xfa, 0x1a, 0x68, 0xb2, 0x52, - 0xfa, 0x51, 0x08, 0x53, 0x4b, 0xeb, 0xd1, 0xc7, 0x60, 0xa4, 0xbc, 0x5a, 0x59, 0x5f, 0x2a, 0x96, - 0x2a, 0xa5, 0xcb, 0x97, 0x4b, 0x85, 0x8d, 0x75, 0xba, 0x03, 0xe1, 0x71, 0x6f, 0x88, 0x49, 0xfd, - 0x09, 0x15, 0xc6, 0x42, 0x34, 0xd1, 0x73, 0xec, 0xdd, 0x81, 0xbe, 0xce, 0x3c, 0x10, 0x47, 0xfb, - 0x39, 0xbc, 0xe4, 0xaf, 0x99, 0x6d, 0x97, 0xbd, 0x6a, 0xdc, 0x07, 0xd8, 0x4a, 0x96, 0x5b, 0xdf, - 0xaa, 0xa3, 0x36, 0xdb, 0xb0, 0xa1, 0x2f, 0x14, 0x23, 0xfe, 0x38, 0xdd, 0xb3, 0xb9, 0x1f, 0xf4, - 0x96, 0xed, 0xd4, 0xdd, 0xfa, 0x93, 0xa8, 0x52, 0xb7, 0xf8, 0xee, 0x0e, 0x7e, 0xc1, 0x48, 0x1a, - 0x1a, 0xa7, 0x2c, 0x59, 0xae, 0xc7, 0x6d, 0xa1, 0x6d, 0x53, 0xe2, 0xc6, 0x05, 0x5c, 0x35, 0x34, - 0x4e, 0xf1, 0xb8, 0x8f, 0xc3, 0x60, 0xcd, 0xde, 0xc5, 0x5d, 0x17, 0xe5, 0xc3, 0xeb, 0x85, 0x62, - 0x0c, 0xd0, 0x31, 0x8f, 0x85, 0xf5, 0xd3, 0xfe, 0xb6, 0xd2, 0xa0, 0x31, 0x40, 0xc7, 0x28, 0xcb, - 0xbd, 0x30, 0x62, 0x6e, 0x6f, 0xb7, 0xb1, 0x70, 0x2e, 0x88, 0xbe, 0x21, 0x0c, 0x7b, 0xc3, 0x84, - 0x71, 0xe2, 0x2a, 0xa4, 0xb8, 0x1d, 0xf0, 0x92, 0x8c, 0x2d, 0x51, 0x69, 0xd1, 0xd7, 0xde, 0xc4, - 0x4c, 0xbf, 0x91, 0xb2, 0x38, 0xf1, 0x38, 0x0c, 0xd6, 0x9d, 0x8a, 0xbf, 0x4b, 0x9e, 0x98, 0x4e, - 0xcc, 0xa4, 0x8c, 0x81, 0xba, 0xe3, 0xed, 0x30, 0x66, 0x3e, 0x97, 0x80, 0x61, 0x71, 0x97, 0x5f, - 0x2f, 0x42, 0xaa, 0x61, 0x57, 0x4d, 0x12, 0x5a, 0xf4, 0x88, 0x69, 0x26, 0xe2, 0x60, 0x60, 0x6e, - 0x99, 0xf1, 0x1b, 0x1e, 0x72, 0xe2, 0x1f, 0x14, 0x48, 0xf1, 0x61, 0x7d, 0x1c, 0x92, 0x2d, 0xd3, - 0xdd, 0x21, 0xe2, 0x7a, 0xf3, 0x09, 0x4d, 0x31, 0xc8, 0x77, 0x3c, 0xee, 0xb4, 0x4c, 0x8b, 0x84, - 0x00, 0x1b, 0xc7, 0xdf, 0xb1, 0x5f, 0x1b, 0xc8, 0xac, 0x91, 0xd7, 0x0f, 0xbb, 0xd9, 0x44, 0x96, - 0xeb, 0x70, 0xbf, 0xb2, 0xf1, 0x02, 0x1b, 0xd6, 0xdf, 0x01, 0xa3, 0x6e, 0xdb, 0xac, 0x37, 0x04, - 0xde, 0x24, 0xe1, 0xd5, 0x38, 0xc1, 0x63, 0xce, 0xc2, 0x1d, 0x5c, 0x6e, 0x0d, 0xb9, 0x66, 0x75, - 0x07, 0xd5, 0x7c, 0x50, 0x1f, 0xd9, 0x66, 0x38, 0xca, 0x18, 0x8a, 0x8c, 0xce, 0xb1, 0x99, 0x6f, - 0x2b, 0x30, 0xca, 0x5f, 0x98, 0x6a, 0x9e, 0xb1, 0x56, 0x00, 0x4c, 0xcb, 0xb2, 0xdd, 0xa0, 0xb9, - 0x3a, 0x43, 0xb9, 0x03, 0x37, 0x97, 0xf3, 0x40, 0x46, 0x40, 0xc0, 0x44, 0x13, 0xc0, 0xa7, 0x74, - 0x35, 0xdb, 0x14, 0x0c, 0xb0, 0x23, 0x1c, 0x72, 0x0e, 0x48, 0x5f, 0xb1, 0x81, 0x0e, 0xe1, 0x37, - 0x2b, 0xfd, 0x30, 0xf4, 0x5e, 0x47, 0xdb, 0x75, 0x8b, 0x6d, 0xcc, 0xd2, 0x2f, 0x7c, 0x23, 0x24, - 0xe9, 0x6d, 0x84, 0xe4, 0xdf, 0x07, 0x63, 0x55, 0xbb, 0x29, 0xab, 0x9b, 0xd7, 0xa4, 0xd7, 0x7c, - 0xe7, 0x11, 0xe5, 0xbd, 0xe0, 0xb7, 0x98, 0x3f, 0x56, 0x94, 0xdf, 0x4f, 0xa8, 0x57, 0xd6, 0xf2, - 0x5f, 0x48, 0x4c, 0x5c, 0xa1, 0xd0, 0x35, 0x3e, 0x53, 0x03, 0x6d, 0x35, 0x50, 0x15, 0x6b, 0x0f, - 0x9f, 0x9d, 0x81, 0x07, 0xb6, 0xeb, 0xee, 0xce, 0xee, 0xf5, 0xb9, 0xaa, 0xdd, 0x3c, 0xb5, 0x6d, - 0x6f, 0xdb, 0xfe, 0xd1, 0x27, 0xfe, 0x46, 0xbe, 0x90, 0x4f, 0xec, 0xf8, 0xb3, 0xdf, 0x1b, 0x9d, - 0x88, 0x3c, 0x2b, 0xcd, 0x96, 0x61, 0x8c, 0x31, 0x57, 0xc8, 0xf9, 0x0b, 0x7d, 0x8b, 0xd0, 0xf7, - 0xdd, 0xc3, 0x4a, 0x7f, 0xe9, 0x7b, 0x64, 0xb9, 0x36, 0x46, 0x19, 0x14, 0xd3, 0xe8, 0x8b, 0x46, - 0xd6, 0x80, 0x23, 0x82, 0x3c, 0x9a, 0x9a, 0xa8, 0x1d, 0x21, 0xf1, 0x5b, 0x4c, 0xe2, 0x58, 0x40, - 0xe2, 0x3a, 0x83, 0x66, 0x0b, 0x30, 0x74, 0x10, 0x59, 0x7f, 0xcb, 0x64, 0x0d, 0xa2, 0xa0, 0x90, - 0x2b, 0x30, 0x42, 0x84, 0x54, 0x77, 0x1d, 0xd7, 0x6e, 0x92, 0xba, 0xb7, 0xbf, 0x98, 0xbf, 0xfb, - 0x1e, 0xcd, 0x95, 0x61, 0x0c, 0x2b, 0x78, 0xa8, 0x6c, 0x16, 0xc8, 0x91, 0x53, 0x0d, 0x55, 0x1b, - 0x11, 0x12, 0x6e, 0x30, 0x45, 0x3c, 0xfe, 0xec, 0x7b, 0xe0, 0x30, 0xfe, 0x4c, 0xca, 0x52, 0x50, - 0x93, 0xe8, 0x0d, 0xaf, 0xf4, 0xb7, 0x3f, 0x48, 0xd3, 0x71, 0xcc, 0x13, 0x10, 0xd0, 0x29, 0xe0, - 0xc5, 0x6d, 0xe4, 0xba, 0xa8, 0xed, 0x54, 0xcc, 0x46, 0x98, 0x7a, 0x81, 0x1d, 0x83, 0xf4, 0xc7, - 0x5f, 0x15, 0xbd, 0x78, 0x85, 0x22, 0x73, 0x8d, 0x46, 0x76, 0x13, 0x8e, 0x86, 0x44, 0x45, 0x0c, - 0x99, 0x9f, 0x60, 0x32, 0x0f, 0x77, 0x44, 0x06, 0x16, 0xbb, 0x06, 0x7c, 0xdc, 0xf3, 0x65, 0x0c, - 0x99, 0xbf, 0xc7, 0x64, 0xea, 0x0c, 0xcb, 0x5d, 0x8a, 0x25, 0x5e, 0x85, 0xd1, 0x27, 0x51, 0xfb, - 0xba, 0xed, 0xb0, 0x5d, 0x9a, 0x18, 0xe2, 0x3e, 0xc9, 0xc4, 0x8d, 0x30, 0x20, 0xd9, 0xb6, 0xc1, - 0xb2, 0x2e, 0x42, 0x6a, 0xcb, 0xac, 0xa2, 0x18, 0x22, 0x3e, 0xc5, 0x44, 0x1c, 0xc2, 0xfc, 0x18, - 0x9a, 0x83, 0xc1, 0x6d, 0x9b, 0xad, 0x4c, 0xd1, 0xf0, 0xe7, 0x18, 0x7c, 0x80, 0x63, 0x98, 0x88, - 0x96, 0xdd, 0xda, 0x6d, 0xe0, 0x65, 0x2b, 0x5a, 0xc4, 0xa7, 0xb9, 0x08, 0x8e, 0x61, 0x22, 0x0e, - 0x60, 0xd6, 0xe7, 0xb9, 0x08, 0x27, 0x60, 0xcf, 0x87, 0x61, 0xc0, 0xb6, 0x1a, 0x7b, 0xb6, 0x15, - 0x47, 0x89, 0xcf, 0x30, 0x09, 0xc0, 0x20, 0x58, 0xc0, 0x25, 0xe8, 0x8f, 0xeb, 0x88, 0xcf, 0xbe, - 0xca, 0xd3, 0x83, 0x7b, 0xe0, 0x0a, 0x8c, 0xf0, 0x02, 0x55, 0xb7, 0xad, 0x18, 0x22, 0xfe, 0x90, - 0x89, 0x18, 0x0e, 0xc0, 0xd8, 0x34, 0x5c, 0xe4, 0xb8, 0xdb, 0x28, 0x8e, 0x90, 0xcf, 0xf1, 0x69, - 0x30, 0x08, 0x33, 0xe5, 0x75, 0x64, 0x55, 0x77, 0xe2, 0x49, 0x78, 0x81, 0x9b, 0x92, 0x63, 0xb0, - 0x88, 0x02, 0x0c, 0x35, 0xcd, 0xb6, 0xb3, 0x63, 0x36, 0x62, 0xb9, 0xe3, 0xf3, 0x4c, 0xc6, 0xa0, - 0x07, 0x62, 0x16, 0xd9, 0xb5, 0x0e, 0x22, 0xe6, 0x0b, 0xdc, 0x22, 0x01, 0x18, 0x4b, 0x3d, 0xc7, - 0x25, 0x5b, 0x5a, 0x07, 0x91, 0xf6, 0x47, 0x3c, 0xf5, 0x28, 0x76, 0x25, 0x28, 0xf1, 0x12, 0xf4, - 0x3b, 0xf5, 0x67, 0x62, 0x89, 0xf9, 0x63, 0xee, 0x69, 0x02, 0xc0, 0xe0, 0x6b, 0x70, 0x47, 0xe8, - 0x32, 0x11, 0x43, 0xd8, 0x9f, 0x30, 0x61, 0xe3, 0x21, 0x4b, 0x05, 0x2b, 0x09, 0x07, 0x15, 0xf9, - 0xa7, 0xbc, 0x24, 0x20, 0x49, 0xd6, 0x1a, 0x7e, 0x57, 0x70, 0xcc, 0xad, 0x83, 0x59, 0xed, 0xcf, - 0xb8, 0xd5, 0x28, 0x56, 0xb0, 0xda, 0x06, 0x8c, 0x33, 0x89, 0x07, 0xf3, 0xeb, 0x17, 0x79, 0x61, - 0xa5, 0xe8, 0x4d, 0xd1, 0xbb, 0xef, 0x83, 0x09, 0xcf, 0x9c, 0xbc, 0x29, 0x75, 0x2a, 0x4d, 0xb3, - 0x15, 0x43, 0xf2, 0x97, 0x98, 0x64, 0x5e, 0xf1, 0xbd, 0xae, 0xd6, 0x59, 0x31, 0x5b, 0x58, 0xf8, - 0x63, 0x90, 0xe6, 0xc2, 0x77, 0xad, 0x36, 0xaa, 0xda, 0xdb, 0x56, 0xfd, 0x19, 0x54, 0x8b, 0x21, - 0xfa, 0xcf, 0x25, 0x57, 0x6d, 0x06, 0xe0, 0x58, 0xf2, 0x12, 0x68, 0x5e, 0xaf, 0x52, 0xa9, 0x37, - 0x5b, 0x76, 0xdb, 0x8d, 0x90, 0xf8, 0x65, 0xee, 0x29, 0x0f, 0xb7, 0x44, 0x60, 0xd9, 0x12, 0x0c, - 0x93, 0xaf, 0x71, 0x43, 0xf2, 0x2b, 0x4c, 0xd0, 0x90, 0x8f, 0x62, 0x85, 0xa3, 0x6a, 0x37, 0x5b, - 0x66, 0x3b, 0x4e, 0xfd, 0xfb, 0x0b, 0x5e, 0x38, 0x18, 0x84, 0x15, 0x0e, 0x77, 0xaf, 0x85, 0xf0, - 0x6a, 0x1f, 0x43, 0xc2, 0x57, 0x79, 0xe1, 0xe0, 0x18, 0x26, 0x82, 0x37, 0x0c, 0x31, 0x44, 0xfc, - 0x25, 0x17, 0xc1, 0x31, 0x58, 0xc4, 0xbb, 0xfd, 0x85, 0xb6, 0x8d, 0xb6, 0xeb, 0x8e, 0xdb, 0xa6, - 0xad, 0xf0, 0xfe, 0xa2, 0xbe, 0xf6, 0xaa, 0xd8, 0x84, 0x19, 0x01, 0x28, 0xae, 0x44, 0x6c, 0x0b, - 0x95, 0xbc, 0x29, 0x45, 0x2b, 0xf6, 0x75, 0x5e, 0x89, 0x02, 0x30, 0x9a, 0x9f, 0x23, 0x52, 0xaf, - 0xa2, 0x47, 0x5d, 0x84, 0x49, 0xff, 0xfc, 0x6b, 0x4c, 0x96, 0xd8, 0xaa, 0x64, 0x97, 0x71, 0x00, - 0x89, 0x0d, 0x45, 0xb4, 0xb0, 0x0f, 0xbe, 0xe6, 0xc5, 0x90, 0xd0, 0x4f, 0x64, 0x2f, 0xc3, 0x90, - 0xd0, 0x4c, 0x44, 0x8b, 0xfa, 0x05, 0x26, 0x6a, 0x30, 0xd8, 0x4b, 0x64, 0xcf, 0x42, 0x12, 0x37, - 0x06, 0xd1, 0xf0, 0x5f, 0x64, 0x70, 0xc2, 0x9e, 0x7d, 0x10, 0x52, 0xbc, 0x21, 0x88, 0x86, 0x7e, - 0x88, 0x41, 0x3d, 0x08, 0x86, 0xf3, 0x66, 0x20, 0x1a, 0xfe, 0x4b, 0x1c, 0xce, 0x21, 0x18, 0x1e, - 0xdf, 0x84, 0x2f, 0xfe, 0x4a, 0x92, 0x15, 0x74, 0x6e, 0xbb, 0x4b, 0x70, 0x88, 0x75, 0x01, 0xd1, - 0xe8, 0x8f, 0xb0, 0x87, 0x73, 0x44, 0xf6, 0x3c, 0xf4, 0xc6, 0x34, 0xf8, 0xaf, 0x32, 0x28, 0xe5, - 0xcf, 0x16, 0x60, 0x20, 0xb0, 0xf2, 0x47, 0xc3, 0x7f, 0x8d, 0xc1, 0x83, 0x28, 0xac, 0x3a, 0x5b, - 0xf9, 0xa3, 0x05, 0xfc, 0x3a, 0x57, 0x9d, 0x21, 0xb0, 0xd9, 0xf8, 0xa2, 0x1f, 0x8d, 0xfe, 0x0d, - 0x6e, 0x75, 0x0e, 0xc9, 0x3e, 0x0c, 0xfd, 0x5e, 0x21, 0x8f, 0xc6, 0xff, 0x26, 0xc3, 0xfb, 0x18, - 0x6c, 0x81, 0xc0, 0x42, 0x12, 0x2d, 0xe2, 0xb7, 0xb8, 0x05, 0x02, 0x28, 0x9c, 0x46, 0x72, 0x73, - 0x10, 0x2d, 0xe9, 0xa3, 0x3c, 0x8d, 0xa4, 0xde, 0x00, 0x7b, 0x93, 0xd4, 0xd3, 0x68, 0x11, 0xbf, - 0xcd, 0xbd, 0x49, 0xf8, 0xb1, 0x1a, 0xf2, 0x6a, 0x1b, 0x2d, 0xe3, 0x77, 0xb9, 0x1a, 0xd2, 0x62, - 0x9b, 0x5d, 0x03, 0xbd, 0x73, 0xa5, 0x8d, 0x96, 0xf7, 0x31, 0x26, 0x6f, 0xb4, 0x63, 0xa1, 0xcd, - 0x3e, 0x0a, 0xe3, 0xe1, 0xab, 0x6c, 0xb4, 0xd4, 0x8f, 0xbf, 0x26, 0xbd, 0x17, 0x05, 0x17, 0xd9, - 0xec, 0x86, 0x5f, 0xae, 0x83, 0x2b, 0x6c, 0xb4, 0xd8, 0x4f, 0xbc, 0x26, 0x56, 0xec, 0xe0, 0x02, - 0x9b, 0xcd, 0x01, 0xf8, 0x8b, 0x5b, 0xb4, 0xac, 0x4f, 0x32, 0x59, 0x01, 0x10, 0x4e, 0x0d, 0xb6, - 0xb6, 0x45, 0xe3, 0x3f, 0xc5, 0x53, 0x83, 0x21, 0x70, 0x6a, 0xf0, 0x65, 0x2d, 0x1a, 0xfd, 0x1c, - 0x4f, 0x0d, 0x0e, 0xc1, 0x91, 0x1d, 0x58, 0x39, 0xa2, 0x25, 0x7c, 0x86, 0x47, 0x76, 0x00, 0x95, - 0xbd, 0x04, 0x29, 0x6b, 0xb7, 0xd1, 0xc0, 0x01, 0xaa, 0xef, 0x7f, 0x41, 0x2c, 0xfd, 0xaf, 0xaf, - 0x33, 0x0d, 0x38, 0x20, 0x7b, 0x16, 0x7a, 0x51, 0xf3, 0x3a, 0xaa, 0x45, 0x21, 0xff, 0xed, 0x75, - 0x5e, 0x94, 0x30, 0x77, 0xf6, 0x61, 0x00, 0xfa, 0x6a, 0x4f, 0x8e, 0xad, 0x22, 0xb0, 0xff, 0xfe, - 0x3a, 0xbb, 0xba, 0xe1, 0x43, 0x7c, 0x01, 0xf4, 0x22, 0xc8, 0xfe, 0x02, 0x5e, 0x15, 0x05, 0x90, - 0x59, 0x5f, 0x84, 0x43, 0x8f, 0x3b, 0xb6, 0xe5, 0x9a, 0xdb, 0x51, 0xe8, 0xff, 0x60, 0x68, 0xce, - 0x8f, 0x0d, 0xd6, 0xb4, 0xdb, 0xc8, 0x35, 0xb7, 0x9d, 0x28, 0xec, 0x7f, 0x32, 0xac, 0x07, 0xc0, - 0xe0, 0xaa, 0xe9, 0xb8, 0x71, 0xe6, 0xfd, 0x03, 0x0e, 0xe6, 0x00, 0xac, 0x34, 0xfe, 0xfc, 0x04, - 0xda, 0x8b, 0xc2, 0xfe, 0x90, 0x2b, 0xcd, 0xf8, 0xb3, 0x0f, 0x42, 0x3f, 0xfe, 0x48, 0xef, 0x63, - 0x45, 0x80, 0xff, 0x8b, 0x81, 0x7d, 0x04, 0x7e, 0xb2, 0xe3, 0xd6, 0xdc, 0x7a, 0xb4, 0xb1, 0x7f, - 0xc4, 0x3c, 0xcd, 0xf9, 0xb3, 0x39, 0x18, 0x70, 0xdc, 0x5a, 0x6d, 0x97, 0xf5, 0x57, 0x11, 0xf0, - 0xff, 0x7e, 0xdd, 0x7b, 0xe5, 0xf6, 0x30, 0xf9, 0x52, 0xf8, 0xee, 0x21, 0x5c, 0xb1, 0xaf, 0xd8, - 0x74, 0xdf, 0xf0, 0xbd, 0x99, 0xe8, 0x0d, 0x40, 0xf8, 0xab, 0x06, 0x0c, 0xb9, 0x3b, 0x08, 0xaf, - 0x4b, 0x6c, 0x1f, 0x30, 0x89, 0x3f, 0x4f, 0x1c, 0x6c, 0xf3, 0x90, 0x1c, 0x0d, 0x97, 0xeb, 0x58, - 0xe3, 0x32, 0xd9, 0x9d, 0xd7, 0x8f, 0x41, 0x1f, 0x99, 0xc3, 0x69, 0x72, 0x02, 0xa6, 0xe4, 0x93, - 0x37, 0x5e, 0x9e, 0xea, 0x31, 0xd8, 0x98, 0x47, 0x5d, 0x20, 0xdb, 0xa7, 0x09, 0x81, 0xba, 0xe0, - 0x51, 0xcf, 0xd0, 0x1d, 0x54, 0x81, 0x7a, 0xc6, 0xa3, 0x2e, 0x92, 0xbd, 0x54, 0x55, 0xa0, 0x2e, - 0x7a, 0xd4, 0xb3, 0xe4, 0xbc, 0x60, 0x48, 0xa0, 0x9e, 0xf5, 0xa8, 0xe7, 0xc8, 0x29, 0x41, 0x52, - 0xa0, 0x9e, 0xf3, 0xa8, 0xe7, 0xc9, 0x01, 0xc1, 0xa8, 0x40, 0x3d, 0xef, 0x51, 0x2f, 0x90, 0x83, - 0x01, 0x5d, 0xa0, 0x5e, 0xf0, 0xa8, 0x17, 0xc9, 0xad, 0x9b, 0x43, 0x02, 0xf5, 0xa2, 0x3e, 0x09, - 0x87, 0xe8, 0xcc, 0xe7, 0xc9, 0x29, 0xf2, 0x08, 0x23, 0xf3, 0x41, 0x9f, 0x7e, 0x9a, 0xdc, 0xb0, - 0xe9, 0x13, 0xe9, 0xa7, 0x7d, 0xfa, 0x02, 0xb9, 0xec, 0xaf, 0x89, 0xf4, 0x05, 0x9f, 0x7e, 0x26, - 0x3d, 0x44, 0x6e, 0x19, 0x09, 0xf4, 0x33, 0x3e, 0x7d, 0x31, 0x3d, 0x8c, 0xc3, 0x58, 0xa4, 0x2f, - 0xfa, 0xf4, 0xb3, 0xe9, 0x91, 0x69, 0x65, 0x66, 0x50, 0xa4, 0x9f, 0xcd, 0x7c, 0x80, 0xb8, 0xd7, - 0xf2, 0xdd, 0x3b, 0x2e, 0xba, 0xd7, 0x73, 0xec, 0xb8, 0xe8, 0x58, 0xcf, 0xa5, 0xe3, 0xa2, 0x4b, - 0x3d, 0x67, 0x8e, 0x8b, 0xce, 0xf4, 0xdc, 0x38, 0x2e, 0xba, 0xd1, 0x73, 0xe0, 0xb8, 0xe8, 0x40, - 0xcf, 0x75, 0xe3, 0xa2, 0xeb, 0x3c, 0xa7, 0x8d, 0x8b, 0x4e, 0xf3, 0xdc, 0x35, 0x2e, 0xba, 0xcb, - 0x73, 0x54, 0x5a, 0x72, 0x94, 0xef, 0xa2, 0xb4, 0xe4, 0x22, 0xdf, 0x39, 0x69, 0xc9, 0x39, 0xbe, - 0x5b, 0xd2, 0x92, 0x5b, 0x7c, 0x87, 0xa4, 0x25, 0x87, 0xf8, 0xae, 0x48, 0x4b, 0xae, 0xf0, 0x9d, - 0xc0, 0x72, 0xcc, 0x40, 0xad, 0x90, 0x1c, 0x53, 0xf7, 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, - 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, 0xcd, 0x31, 0x75, 0xdf, 0x1c, 0x53, 0xf7, 0xcd, 0x31, - 0x75, 0xdf, 0x1c, 0x53, 0xf7, 0xcf, 0x31, 0x35, 0x22, 0xc7, 0xd4, 0x88, 0x1c, 0x53, 0x23, 0x72, - 0x4c, 0x8d, 0xc8, 0x31, 0x35, 0x22, 0xc7, 0xd4, 0xae, 0x39, 0xe6, 0xbb, 0x77, 0x5c, 0x74, 0x6f, - 0x68, 0x8e, 0xa9, 0x5d, 0x72, 0x4c, 0xed, 0x92, 0x63, 0x6a, 0x97, 0x1c, 0x53, 0xbb, 0xe4, 0x98, - 0xda, 0x25, 0xc7, 0xd4, 0x2e, 0x39, 0xa6, 0x76, 0xc9, 0x31, 0xb5, 0x5b, 0x8e, 0xa9, 0x5d, 0x73, - 0x4c, 0xed, 0x9a, 0x63, 0x6a, 0xd7, 0x1c, 0x53, 0xbb, 0xe6, 0x98, 0xda, 0x35, 0xc7, 0xd4, 0x60, - 0x8e, 0xfd, 0xb5, 0x0a, 0x3a, 0xcd, 0xb1, 0x35, 0x72, 0x0f, 0x89, 0xb9, 0x62, 0x52, 0xca, 0xb4, - 0x3e, 0xec, 0x3a, 0xcd, 0x77, 0xc9, 0xa4, 0x94, 0x6b, 0x22, 0x7d, 0xc1, 0xa3, 0xf3, 0x6c, 0x13, - 0xe9, 0x67, 0x3c, 0x3a, 0xcf, 0x37, 0x91, 0xbe, 0xe8, 0xd1, 0x79, 0xc6, 0x89, 0xf4, 0xb3, 0x1e, - 0x9d, 0xe7, 0x9c, 0x48, 0x3f, 0xe7, 0xd1, 0x79, 0xd6, 0x89, 0xf4, 0xf3, 0x1e, 0x9d, 0xe7, 0x9d, - 0x48, 0xbf, 0xe0, 0xd1, 0x79, 0xe6, 0x89, 0xf4, 0x8b, 0xfa, 0xb4, 0x9c, 0x7b, 0x9c, 0xc1, 0x73, - 0xed, 0xb4, 0x9c, 0x7d, 0x12, 0xc7, 0x69, 0x9f, 0x83, 0xe7, 0x9f, 0xc4, 0xb1, 0xe0, 0x73, 0xf0, - 0x0c, 0x94, 0x38, 0xce, 0x64, 0x3e, 0x4c, 0xdc, 0x67, 0xc9, 0xee, 0x9b, 0x90, 0xdc, 0x97, 0x08, - 0xb8, 0x6e, 0x42, 0x72, 0x5d, 0x22, 0xe0, 0xb6, 0x09, 0xc9, 0x6d, 0x89, 0x80, 0xcb, 0x26, 0x24, - 0x97, 0x25, 0x02, 0xee, 0x9a, 0x90, 0xdc, 0x95, 0x08, 0xb8, 0x6a, 0x42, 0x72, 0x55, 0x22, 0xe0, - 0xa6, 0x09, 0xc9, 0x4d, 0x89, 0x80, 0x8b, 0x26, 0x24, 0x17, 0x25, 0x02, 0xee, 0x99, 0x90, 0xdc, - 0x93, 0x08, 0xb8, 0xe6, 0x98, 0xec, 0x9a, 0x44, 0xd0, 0x2d, 0xc7, 0x64, 0xb7, 0x24, 0x82, 0x2e, - 0x39, 0x26, 0xbb, 0x24, 0x11, 0x74, 0xc7, 0x31, 0xd9, 0x1d, 0x89, 0xa0, 0x2b, 0x7e, 0x92, 0xe0, - 0x1d, 0xe1, 0xba, 0xdb, 0xde, 0xad, 0xba, 0xb7, 0xd5, 0x11, 0xce, 0x0b, 0xed, 0xc3, 0xc0, 0x82, - 0x3e, 0x47, 0x1a, 0xd6, 0x60, 0xc7, 0x29, 0xad, 0x60, 0xf3, 0x42, 0x63, 0x11, 0x40, 0x58, 0xe1, - 0x88, 0xc5, 0xdb, 0xea, 0x0d, 0xe7, 0x85, 0x36, 0x23, 0x5a, 0xbf, 0x0b, 0x6f, 0x79, 0xc7, 0xf6, - 0x62, 0x82, 0x77, 0x6c, 0xcc, 0xfc, 0x07, 0xed, 0xd8, 0x66, 0xa3, 0x4d, 0xee, 0x19, 0x7b, 0x36, - 0xda, 0xd8, 0x1d, 0xab, 0x4e, 0xdc, 0x0e, 0x6e, 0x36, 0xda, 0xb4, 0x9e, 0x51, 0xdf, 0xdc, 0x7e, - 0x8b, 0x45, 0xb0, 0x81, 0x5a, 0x21, 0x11, 0x7c, 0xd0, 0x7e, 0x6b, 0x5e, 0x28, 0x25, 0x07, 0x8d, - 0x60, 0xf5, 0xc0, 0x11, 0x7c, 0xd0, 0xce, 0x6b, 0x5e, 0x28, 0x2f, 0x07, 0x8e, 0xe0, 0xb7, 0xa0, - 0x1f, 0x62, 0x11, 0xec, 0x9b, 0xff, 0xa0, 0xfd, 0xd0, 0x6c, 0xb4, 0xc9, 0x43, 0x23, 0x58, 0x3d, - 0x40, 0x04, 0xc7, 0xe9, 0x8f, 0x66, 0xa3, 0x4d, 0x1b, 0x1e, 0xc1, 0xb7, 0xdd, 0xcd, 0x7c, 0x5a, - 0x81, 0xd1, 0x72, 0xbd, 0x56, 0x6a, 0x5e, 0x47, 0xb5, 0x1a, 0xaa, 0x31, 0x3b, 0xce, 0x0b, 0x95, - 0xa0, 0x8b, 0xab, 0x5f, 0x7a, 0x79, 0xca, 0xb7, 0xf0, 0x59, 0x48, 0x51, 0x9b, 0xce, 0xcf, 0xa7, - 0x6f, 0x28, 0x11, 0x15, 0xce, 0x63, 0xd5, 0x8f, 0x73, 0xd8, 0xe9, 0xf9, 0xf4, 0x3f, 0x2a, 0x81, - 0x2a, 0xe7, 0x0d, 0x67, 0x3e, 0x4a, 0x34, 0xb4, 0x6e, 0x5b, 0xc3, 0x53, 0xb1, 0x34, 0x0c, 0xe8, - 0x76, 0x67, 0x87, 0x6e, 0x01, 0xad, 0x76, 0x61, 0xa4, 0x5c, 0xaf, 0x95, 0xc9, 0x9f, 0x99, 0xc7, - 0x51, 0x89, 0xf2, 0x48, 0xf5, 0x60, 0x5e, 0x08, 0xcb, 0x20, 0xc2, 0x0b, 0x69, 0xb1, 0x46, 0x64, - 0xea, 0xf8, 0xb1, 0x96, 0xf0, 0xd8, 0xd9, 0x6e, 0x8f, 0xf5, 0x2b, 0xbb, 0xf7, 0xc0, 0xd9, 0x6e, - 0x0f, 0xf4, 0x73, 0xc8, 0x7b, 0xd4, 0xd3, 0x7c, 0x71, 0xa6, 0xb7, 0x81, 0xf4, 0x63, 0x90, 0x58, - 0xa2, 0x97, 0x95, 0x07, 0xf3, 0x83, 0x58, 0xa9, 0xef, 0xbc, 0x3c, 0x95, 0xdc, 0xdc, 0xad, 0xd7, - 0x8c, 0xc4, 0x52, 0x4d, 0xbf, 0x0a, 0xbd, 0xef, 0x61, 0x7f, 0xec, 0x88, 0x19, 0x16, 0x19, 0xc3, - 0xfd, 0x5d, 0xf7, 0x88, 0xf0, 0x83, 0x4f, 0xd1, 0x9d, 0xc5, 0xb9, 0xcd, 0xba, 0xe5, 0x9e, 0x5e, - 0xb8, 0x60, 0x50, 0x11, 0x99, 0xff, 0x0b, 0x40, 0x9f, 0x59, 0x34, 0x9d, 0x1d, 0xbd, 0xcc, 0x25, - 0xd3, 0x47, 0x5f, 0xf8, 0xce, 0xcb, 0x53, 0x8b, 0x71, 0xa4, 0x3e, 0x50, 0x33, 0x9d, 0x9d, 0x07, - 0xdc, 0xbd, 0x16, 0x9a, 0xcb, 0xef, 0xb9, 0xc8, 0xe1, 0xd2, 0x5b, 0x7c, 0xd5, 0x63, 0xf3, 0x4a, - 0x07, 0xe6, 0x95, 0x12, 0xe6, 0x74, 0x59, 0x9c, 0xd3, 0xfc, 0x1b, 0x9d, 0xcf, 0xd3, 0x7c, 0x91, - 0x90, 0x2c, 0xa9, 0x46, 0x59, 0x52, 0xbd, 0x5d, 0x4b, 0xb6, 0x78, 0x7d, 0x94, 0xe6, 0xaa, 0xee, - 0x37, 0x57, 0xf5, 0x76, 0xe6, 0xfa, 0x3f, 0x34, 0x5b, 0xbd, 0x7c, 0xda, 0xb4, 0xe8, 0x45, 0xc9, - 0x9f, 0xad, 0xbd, 0xa0, 0x37, 0xb5, 0x0b, 0xc8, 0x26, 0x6f, 0x3c, 0x3f, 0xa5, 0x64, 0x3e, 0x9d, - 0xe0, 0x33, 0xa7, 0x89, 0xf4, 0xc6, 0x66, 0xfe, 0xb3, 0xd2, 0x53, 0xbd, 0x15, 0x16, 0x7a, 0x4e, - 0x81, 0xf1, 0x8e, 0x4a, 0x4e, 0xcd, 0xf4, 0xe6, 0x96, 0x73, 0xeb, 0xa0, 0xe5, 0x9c, 0x29, 0xf8, - 0x15, 0x05, 0x0e, 0x4b, 0xe5, 0x95, 0xaa, 0x77, 0x4a, 0x52, 0xef, 0x68, 0xe7, 0x93, 0x08, 0x63, - 0x40, 0xbb, 0xa0, 0x7b, 0x25, 0x40, 0x40, 0xb2, 0xe7, 0xf7, 0x45, 0xc9, 0xef, 0xc7, 0x3c, 0x40, - 0x88, 0xb9, 0x78, 0x04, 0x30, 0xb5, 0x6d, 0x48, 0x6e, 0xb4, 0x11, 0xd2, 0x27, 0x21, 0xb1, 0xda, - 0x66, 0x1a, 0x0e, 0x53, 0xfc, 0x6a, 0x3b, 0xdf, 0x36, 0xad, 0xea, 0x8e, 0x91, 0x58, 0x6d, 0xeb, - 0xc7, 0x41, 0xcd, 0xb1, 0x3f, 0xb4, 0x1e, 0x58, 0x18, 0xa1, 0x0c, 0x39, 0xab, 0xc6, 0x38, 0x30, - 0x4d, 0x9f, 0x84, 0xe4, 0x32, 0x32, 0xb7, 0x98, 0x12, 0x40, 0x79, 0xf0, 0x88, 0x41, 0xc6, 0xd9, - 0x03, 0x1f, 0x83, 0x14, 0x17, 0xac, 0x9f, 0xc0, 0x88, 0x2d, 0x97, 0x3d, 0x96, 0x21, 0xb0, 0x3a, - 0x6c, 0xe5, 0x22, 0x54, 0xfd, 0x24, 0xf4, 0x1a, 0xf5, 0xed, 0x1d, 0x97, 0x3d, 0xbc, 0x93, 0x8d, - 0x92, 0x33, 0xd7, 0xa0, 0xdf, 0xd3, 0xe8, 0x4d, 0x16, 0x5d, 0xa4, 0x53, 0xd3, 0x27, 0x82, 0xeb, - 0x09, 0xdf, 0xb7, 0xa4, 0x43, 0xfa, 0x34, 0xa4, 0xd6, 0xdd, 0xb6, 0x5f, 0xf4, 0x79, 0x47, 0xea, - 0x8d, 0x66, 0x3e, 0xa0, 0x40, 0xaa, 0x88, 0x50, 0x8b, 0x18, 0xfc, 0x1e, 0x48, 0x16, 0xed, 0xa7, - 0x2c, 0xa6, 0xe0, 0x28, 0xb3, 0x28, 0x26, 0x33, 0x9b, 0x12, 0xb2, 0x7e, 0x4f, 0xd0, 0xee, 0x63, - 0x9e, 0xdd, 0x03, 0x7c, 0xc4, 0xf6, 0x19, 0xc1, 0xf6, 0xcc, 0x81, 0x98, 0xa9, 0xc3, 0xfe, 0xe7, - 0x61, 0x20, 0xf0, 0x14, 0x7d, 0x86, 0xa9, 0x91, 0x90, 0x81, 0x41, 0x5b, 0x61, 0x8e, 0x0c, 0x82, - 0x21, 0xe1, 0xc1, 0x18, 0x1a, 0x30, 0x71, 0x17, 0x28, 0x31, 0xf3, 0xac, 0x68, 0xe6, 0x70, 0x56, - 0x66, 0xea, 0x79, 0x6a, 0x23, 0x62, 0xee, 0x13, 0x34, 0x38, 0xbb, 0x3b, 0x11, 0x7f, 0xce, 0xf4, - 0x82, 0x5a, 0xae, 0x37, 0x32, 0x0f, 0x02, 0xd0, 0x94, 0x2f, 0x59, 0xbb, 0x4d, 0x29, 0xeb, 0x86, - 0xb9, 0x81, 0x37, 0x76, 0xd0, 0x06, 0x72, 0x08, 0x8b, 0xd8, 0x4f, 0xe1, 0x02, 0x03, 0x34, 0xc5, - 0x08, 0xfe, 0xbe, 0x48, 0x7c, 0x68, 0x27, 0x86, 0x59, 0xd3, 0x94, 0xf5, 0x1a, 0x72, 0x73, 0x96, - 0xed, 0xee, 0xa0, 0xb6, 0x84, 0x58, 0xd0, 0xcf, 0x08, 0x09, 0x3b, 0xbc, 0x70, 0xa7, 0x87, 0xe8, - 0x0a, 0x3a, 0x93, 0xf9, 0x22, 0x51, 0x10, 0xb7, 0x02, 0x1d, 0x13, 0x54, 0x63, 0x4c, 0x50, 0x3f, - 0x27, 0xf4, 0x6f, 0xfb, 0xa8, 0x29, 0xbd, 0x5a, 0x5e, 0x14, 0xde, 0x73, 0xf6, 0x57, 0x56, 0x7c, - 0xc7, 0xe4, 0x36, 0xe5, 0x2a, 0xdf, 0x17, 0xa9, 0x72, 0x97, 0xee, 0xf6, 0xa0, 0x36, 0x55, 0xe3, - 0xda, 0xf4, 0x1b, 0x5e, 0xc7, 0x41, 0x7f, 0xcd, 0x82, 0xfc, 0x0e, 0x8c, 0x7e, 0x7f, 0xa4, 0xef, - 0xb3, 0x4a, 0xc1, 0x53, 0x75, 0x31, 0xae, 0xfb, 0xb3, 0x89, 0x7c, 0xde, 0x53, 0xf7, 0xfc, 0x01, - 0x42, 0x20, 0x9b, 0x28, 0x14, 0xbc, 0xb2, 0x9d, 0xfa, 0xf0, 0xf3, 0x53, 0xca, 0x0b, 0xcf, 0x4f, - 0xf5, 0x64, 0x3e, 0xaf, 0xc0, 0x28, 0xe3, 0x0c, 0x04, 0xee, 0x03, 0x92, 0xf2, 0x47, 0x78, 0xcd, - 0x08, 0xb3, 0xc0, 0xdb, 0x16, 0xbc, 0xdf, 0x52, 0x20, 0xdd, 0xa1, 0x2b, 0xb7, 0xf7, 0x7c, 0x2c, - 0x95, 0xb3, 0x4a, 0xe9, 0xa7, 0x6f, 0xf3, 0x6b, 0xd0, 0xbb, 0x51, 0x6f, 0xa2, 0x36, 0x5e, 0x09, - 0xf0, 0x07, 0xaa, 0x32, 0x3f, 0xcc, 0xa1, 0x43, 0x9c, 0x46, 0x95, 0x13, 0x68, 0x0b, 0x7a, 0x1a, - 0x92, 0x45, 0xd3, 0x35, 0x89, 0x06, 0x83, 0x5e, 0x7d, 0x35, 0x5d, 0x33, 0x73, 0x06, 0x06, 0x57, - 0xf6, 0xc8, 0x0d, 0x9c, 0x1a, 0xb9, 0x18, 0x22, 0x76, 0x7f, 0xbc, 0x5f, 0x3d, 0x3d, 0xdb, 0x9b, - 0xaa, 0x69, 0x37, 0x94, 0x6c, 0x92, 0xe8, 0xf3, 0x24, 0x0c, 0xaf, 0x62, 0xb5, 0x09, 0x4e, 0x80, - 0xd1, 0xa7, 0xab, 0xde, 0xe4, 0xa5, 0xa6, 0x4c, 0xf5, 0x9b, 0xb2, 0x69, 0x50, 0x56, 0xc4, 0xd6, - 0x29, 0xa8, 0x87, 0xa1, 0xac, 0xcc, 0x26, 0x53, 0xc3, 0xda, 0xe8, 0x6c, 0x32, 0x05, 0xda, 0x10, - 0x7b, 0xee, 0xdf, 0xab, 0xa0, 0xd1, 0x56, 0xa7, 0x88, 0xb6, 0xea, 0x56, 0xdd, 0xed, 0xec, 0x57, - 0x3d, 0x8d, 0xf5, 0x87, 0xa1, 0x1f, 0x9b, 0xf4, 0x32, 0xfb, 0x39, 0x38, 0x6c, 0xfa, 0xe3, 0xac, - 0x45, 0x91, 0x44, 0xb0, 0x01, 0x12, 0x3a, 0x3e, 0x46, 0xbf, 0x0c, 0x6a, 0xb9, 0xbc, 0xc2, 0x16, - 0xb7, 0xc5, 0x7d, 0xa1, 0xec, 0xfa, 0x0d, 0xfb, 0xc6, 0xc6, 0x9c, 0x6d, 0x03, 0x0b, 0xd0, 0x17, - 0x21, 0x51, 0x5e, 0x61, 0x0d, 0xef, 0x89, 0x38, 0x62, 0x8c, 0x44, 0x79, 0x65, 0xe2, 0x6f, 0x14, - 0x18, 0x12, 0x46, 0xf5, 0x0c, 0x0c, 0xd2, 0x81, 0xc0, 0x74, 0xfb, 0x0c, 0x61, 0x8c, 0xeb, 0x9c, - 0xb8, 0x4d, 0x9d, 0x27, 0x72, 0x30, 0x22, 0x8d, 0xeb, 0x73, 0xa0, 0x07, 0x87, 0x98, 0x12, 0xf4, - 0xa7, 0xa8, 0x42, 0x28, 0x99, 0xbb, 0x00, 0x7c, 0xbb, 0x7a, 0xbf, 0xa0, 0x54, 0x2e, 0xad, 0x6f, - 0x94, 0x8a, 0x9a, 0x92, 0xf9, 0xaa, 0x02, 0x03, 0xac, 0x6d, 0xad, 0xda, 0x2d, 0xa4, 0xe7, 0x41, - 0xc9, 0xb1, 0x78, 0x78, 0x63, 0x7a, 0x2b, 0x39, 0xfd, 0x14, 0x28, 0xf9, 0xf8, 0xae, 0x56, 0xf2, - 0xfa, 0x02, 0x28, 0x05, 0xe6, 0xe0, 0x78, 0x9e, 0x51, 0x0a, 0x99, 0x1f, 0xa9, 0x30, 0x16, 0x6c, - 0xa3, 0x79, 0x3d, 0x39, 0x2e, 0xbe, 0x37, 0x65, 0xfb, 0x4f, 0x2f, 0x9c, 0x59, 0x9c, 0xc3, 0xff, - 0x78, 0x21, 0x99, 0x11, 0x5f, 0xa1, 0xb2, 0xe0, 0xb1, 0x9c, 0xee, 0x76, 0x4f, 0x24, 0x9b, 0x0c, - 0x48, 0xe8, 0xb8, 0x27, 0x22, 0x50, 0x3b, 0xee, 0x89, 0x08, 0xd4, 0x8e, 0x7b, 0x22, 0x02, 0xb5, - 0xe3, 0x2c, 0x40, 0xa0, 0x76, 0xdc, 0x13, 0x11, 0xa8, 0x1d, 0xf7, 0x44, 0x04, 0x6a, 0xe7, 0x3d, - 0x11, 0x46, 0xee, 0x7a, 0x4f, 0x44, 0xa4, 0x77, 0xde, 0x13, 0x11, 0xe9, 0x9d, 0xf7, 0x44, 0xb2, - 0x49, 0xb7, 0xbd, 0x8b, 0xba, 0x9f, 0x3a, 0x88, 0xf8, 0xfd, 0x5e, 0x02, 0xfd, 0x0a, 0xbc, 0x0a, - 0x23, 0x74, 0x43, 0xa2, 0x60, 0x5b, 0xae, 0x59, 0xb7, 0x50, 0x5b, 0x7f, 0x27, 0x0c, 0xd2, 0x21, - 0xfa, 0x9a, 0x13, 0xf6, 0x1a, 0x48, 0xe9, 0xac, 0xde, 0x0a, 0xdc, 0x99, 0x9f, 0x24, 0x61, 0x9c, - 0x0e, 0x94, 0xcd, 0x26, 0x12, 0x6e, 0x19, 0x9d, 0x94, 0xce, 0x94, 0x86, 0x31, 0xfc, 0xd6, 0xcb, - 0x53, 0x74, 0x34, 0xe7, 0x45, 0xd3, 0x49, 0xe9, 0x74, 0x49, 0xe4, 0xf3, 0x17, 0xa0, 0x93, 0xd2, - 0xcd, 0x23, 0x91, 0xcf, 0x5b, 0x6f, 0x3c, 0x3e, 0x7e, 0x07, 0x49, 0xe4, 0x2b, 0x7a, 0x51, 0x76, - 0x52, 0xba, 0x8d, 0x24, 0xf2, 0x95, 0xbc, 0x78, 0x3b, 0x29, 0x9d, 0x3d, 0x89, 0x7c, 0x97, 0xbd, - 0xc8, 0x3b, 0x29, 0x9d, 0x42, 0x89, 0x7c, 0x57, 0xbc, 0x18, 0x3c, 0x29, 0xdd, 0x55, 0x12, 0xf9, - 0x1e, 0xf1, 0xa2, 0xf1, 0xa4, 0x74, 0x6b, 0x49, 0xe4, 0x5b, 0xf2, 0xe2, 0x72, 0x46, 0xbe, 0xbf, - 0x24, 0x32, 0x5e, 0xf5, 0x23, 0x74, 0x46, 0xbe, 0xc9, 0x24, 0x72, 0xbe, 0xcb, 0x8f, 0xd5, 0x19, - 0xf9, 0x4e, 0x93, 0xc8, 0xb9, 0xec, 0x47, 0xed, 0x8c, 0x7c, 0x56, 0x26, 0x72, 0xae, 0xf8, 0xf1, - 0x3b, 0x23, 0x9f, 0x9a, 0x89, 0x9c, 0x65, 0x3f, 0x92, 0x67, 0xe4, 0xf3, 0x33, 0x91, 0x73, 0xd5, - 0xdf, 0x44, 0xff, 0xa6, 0x14, 0x7e, 0x81, 0x5b, 0x50, 0x19, 0x29, 0xfc, 0x20, 0x24, 0xf4, 0xa4, - 0x42, 0x16, 0xe0, 0xf1, 0xc3, 0x2e, 0x23, 0x85, 0x1d, 0x84, 0x84, 0x5c, 0x46, 0x0a, 0x39, 0x08, - 0x09, 0xb7, 0x8c, 0x14, 0x6e, 0x10, 0x12, 0x6a, 0x19, 0x29, 0xd4, 0x20, 0x24, 0xcc, 0x32, 0x52, - 0x98, 0x41, 0x48, 0x88, 0x65, 0xa4, 0x10, 0x83, 0x90, 0xf0, 0xca, 0x48, 0xe1, 0x05, 0x21, 0xa1, - 0x75, 0x42, 0x0e, 0x2d, 0x08, 0x0b, 0xab, 0x13, 0x72, 0x58, 0x41, 0x58, 0x48, 0xdd, 0x2d, 0x87, - 0x54, 0xff, 0xad, 0x97, 0xa7, 0x7a, 0xf1, 0x50, 0x20, 0x9a, 0x4e, 0xc8, 0xd1, 0x04, 0x61, 0x91, - 0x74, 0x42, 0x8e, 0x24, 0x08, 0x8b, 0xa2, 0x13, 0x72, 0x14, 0x41, 0x58, 0x04, 0xbd, 0x28, 0x47, - 0x90, 0x7f, 0xc7, 0x27, 0x23, 0x1d, 0x29, 0x46, 0x45, 0x90, 0x1a, 0x23, 0x82, 0xd4, 0x18, 0x11, - 0xa4, 0xc6, 0x88, 0x20, 0x35, 0x46, 0x04, 0xa9, 0x31, 0x22, 0x48, 0x8d, 0x11, 0x41, 0x6a, 0x8c, - 0x08, 0x52, 0xe3, 0x44, 0x90, 0x1a, 0x2b, 0x82, 0xd4, 0x6e, 0x11, 0x74, 0x42, 0xbe, 0xf1, 0x00, - 0x61, 0x05, 0xe9, 0x84, 0x7c, 0xf4, 0x19, 0x1d, 0x42, 0x6a, 0xac, 0x10, 0x52, 0xbb, 0x85, 0xd0, - 0x37, 0x55, 0x18, 0x13, 0x42, 0x88, 0x9d, 0x0f, 0xbd, 0x59, 0x15, 0xe8, 0x5c, 0x8c, 0x0b, 0x16, - 0x61, 0x31, 0x75, 0x2e, 0xc6, 0x21, 0xf5, 0x7e, 0x71, 0xd6, 0x59, 0x85, 0x4a, 0x31, 0xaa, 0xd0, - 0x65, 0x2f, 0x86, 0xce, 0xc5, 0xb8, 0x78, 0xd1, 0x19, 0x7b, 0x17, 0xf6, 0x2b, 0x02, 0x8f, 0xc4, - 0x2a, 0x02, 0x4b, 0xb1, 0x8a, 0xc0, 0x55, 0xdf, 0x83, 0x1f, 0x4a, 0xc0, 0x61, 0xdf, 0x83, 0xf4, - 0x13, 0xf9, 0xb9, 0xa6, 0x4c, 0xe0, 0x88, 0x4a, 0xe7, 0xc7, 0x36, 0x01, 0x37, 0x26, 0x96, 0x6a, - 0xfa, 0x9a, 0x78, 0x58, 0x95, 0x3d, 0xe8, 0x01, 0x4e, 0xc0, 0xe3, 0x6c, 0x33, 0xf4, 0x04, 0xa8, - 0x4b, 0x35, 0x87, 0x54, 0x8b, 0xb0, 0xc7, 0x16, 0x0c, 0x4c, 0xd6, 0x0d, 0xe8, 0x23, 0xec, 0x0e, - 0x71, 0xef, 0xed, 0x3c, 0xb8, 0x68, 0x30, 0x49, 0x99, 0x17, 0x15, 0x98, 0x16, 0x42, 0xf9, 0xcd, - 0x39, 0x32, 0xb8, 0x14, 0xeb, 0xc8, 0x40, 0x48, 0x10, 0xff, 0xf8, 0xe0, 0xde, 0xce, 0x93, 0xea, - 0x60, 0x96, 0xc8, 0x47, 0x09, 0x3f, 0x07, 0xc3, 0xfe, 0x0c, 0xc8, 0x3b, 0xdb, 0xd9, 0xe8, 0xdd, - 0xcc, 0xb0, 0xd4, 0x3c, 0x2b, 0xed, 0xa2, 0xed, 0x0b, 0xf3, 0xb2, 0x35, 0x93, 0x85, 0x91, 0xb2, - 0xf8, 0xb7, 0x40, 0x51, 0x9b, 0x11, 0x29, 0xdc, 0x9a, 0xdf, 0xf8, 0xcc, 0x54, 0x4f, 0xe6, 0x7e, - 0x18, 0x0c, 0xfe, 0xb9, 0x8f, 0x04, 0xec, 0xe7, 0xc0, 0x6c, 0xf2, 0x25, 0xcc, 0xfd, 0x3b, 0x0a, - 0x1c, 0x09, 0xb2, 0x3f, 0x5a, 0x77, 0x77, 0x96, 0x2c, 0xdc, 0xd3, 0x3f, 0x08, 0x29, 0xc4, 0x1c, - 0xc7, 0x7e, 0x79, 0x85, 0xbd, 0x47, 0x86, 0xb2, 0xcf, 0x91, 0x7f, 0x0d, 0x0f, 0x22, 0xed, 0x82, - 0xf0, 0xc7, 0x2e, 0x4c, 0xdc, 0x03, 0xbd, 0x54, 0xbe, 0xa8, 0xd7, 0x90, 0xa4, 0xd7, 0x67, 0x43, - 0xf4, 0x22, 0x71, 0xa4, 0x5f, 0x15, 0xf4, 0x0a, 0xbc, 0xae, 0x86, 0xb2, 0xcf, 0xf1, 0xe0, 0xcb, - 0xa7, 0x70, 0xff, 0x47, 0x22, 0x2a, 0x5a, 0xc9, 0x19, 0x48, 0x95, 0x64, 0x9e, 0x70, 0x3d, 0x8b, - 0x90, 0x2c, 0xdb, 0x35, 0xf2, 0x9b, 0x30, 0xe4, 0x47, 0x90, 0x99, 0x91, 0xd9, 0x2f, 0x22, 0x9f, - 0x84, 0x54, 0x61, 0xa7, 0xde, 0xa8, 0xb5, 0x91, 0xc5, 0xce, 0xec, 0xd9, 0x16, 0x3a, 0xc6, 0x18, - 0x1e, 0x2d, 0x53, 0x80, 0xd1, 0xb2, 0x6d, 0xe5, 0xf7, 0xdc, 0x60, 0xdd, 0x98, 0x93, 0x52, 0x84, - 0x9d, 0xf9, 0x90, 0xbf, 0xfd, 0xc0, 0x0c, 0xf9, 0xde, 0xef, 0xbc, 0x3c, 0xa5, 0x6c, 0x78, 0xfb, - 0xe7, 0x2b, 0x70, 0x94, 0xa5, 0x4f, 0x87, 0xa8, 0x85, 0x28, 0x51, 0xfd, 0xec, 0x9c, 0x3a, 0x20, - 0x6e, 0x09, 0x8b, 0xb3, 0x42, 0xc5, 0xbd, 0x31, 0xcd, 0x70, 0x53, 0xb4, 0xaf, 0x66, 0xea, 0x81, - 0x34, 0x0b, 0x15, 0x37, 0x17, 0x25, 0x4e, 0xd2, 0xec, 0x6e, 0xe8, 0xf7, 0x68, 0x81, 0x68, 0x08, - 0x66, 0xca, 0xc2, 0x6c, 0x06, 0x06, 0x02, 0x09, 0xab, 0xf7, 0x82, 0x92, 0xd3, 0x7a, 0xf0, 0x7f, - 0x79, 0x4d, 0xc1, 0xff, 0x15, 0xb4, 0xc4, 0xec, 0x3d, 0x30, 0x22, 0xed, 0x5f, 0x62, 0x4a, 0x51, - 0x03, 0xfc, 0x5f, 0x49, 0x1b, 0x98, 0x48, 0x7e, 0xf8, 0x0f, 0x26, 0x7b, 0x66, 0x2f, 0x81, 0xde, - 0xb9, 0xd3, 0xa9, 0xf7, 0x41, 0x22, 0x87, 0x45, 0x1e, 0x85, 0x44, 0x3e, 0xaf, 0x29, 0x13, 0x23, - 0xbf, 0xfc, 0xa9, 0xe9, 0x81, 0x3c, 0xf9, 0x5b, 0xe6, 0x6b, 0xc8, 0xcd, 0xe7, 0x19, 0xf8, 0x21, - 0x38, 0x12, 0xba, 0x53, 0x8a, 0xf1, 0x85, 0x02, 0xc5, 0x17, 0x8b, 0x1d, 0xf8, 0x62, 0x91, 0xe0, - 0x95, 0x2c, 0x3f, 0x71, 0xce, 0xe9, 0x21, 0xbb, 0x8c, 0xe9, 0x5a, 0xe0, 0x84, 0x3b, 0x97, 0x7d, - 0x88, 0xf1, 0xe6, 0x43, 0x79, 0x51, 0xc4, 0x89, 0x75, 0x3e, 0x5b, 0x60, 0xf8, 0x42, 0x28, 0x7e, - 0x4b, 0x3a, 0x56, 0x15, 0x57, 0x08, 0x26, 0xa4, 0xe0, 0x29, 0x5c, 0x0c, 0x15, 0xb2, 0x13, 0xb8, - 0xec, 0x5e, 0xf4, 0x14, 0x2e, 0x85, 0xf2, 0xd6, 0x23, 0x2e, 0x7d, 0x95, 0xb2, 0xa7, 0xd8, 0x22, - 0x9f, 0x3b, 0xad, 0x1f, 0xe1, 0x39, 0x2a, 0x54, 0x60, 0x66, 0x20, 0xce, 0x95, 0x2d, 0x30, 0x40, - 0xbe, 0x2b, 0xa0, 0xbb, 0x95, 0x38, 0x32, 0xfb, 0x08, 0x13, 0x52, 0xe8, 0x2a, 0x24, 0xc2, 0x54, - 0x1c, 0x9e, 0xdf, 0xb8, 0x71, 0x73, 0xb2, 0xe7, 0xa5, 0x9b, 0x93, 0x3d, 0xff, 0x74, 0x73, 0xb2, - 0xe7, 0xbb, 0x37, 0x27, 0x95, 0xef, 0xdf, 0x9c, 0x54, 0x7e, 0x78, 0x73, 0x52, 0xf9, 0xf1, 0xcd, - 0x49, 0xe5, 0xd9, 0x5b, 0x93, 0xca, 0x0b, 0xb7, 0x26, 0x95, 0x2f, 0xde, 0x9a, 0x54, 0xbe, 0x76, - 0x6b, 0x52, 0x79, 0xf1, 0xd6, 0xa4, 0x72, 0xe3, 0xd6, 0x64, 0xcf, 0x4b, 0xb7, 0x26, 0x7b, 0xbe, - 0x7b, 0x6b, 0x52, 0xf9, 0xfe, 0xad, 0xc9, 0x9e, 0x1f, 0xde, 0x9a, 0x54, 0x7e, 0x7c, 0x6b, 0xb2, - 0xe7, 0xd9, 0x57, 0x26, 0x7b, 0x9e, 0x7f, 0x65, 0xb2, 0xe7, 0x85, 0x57, 0x26, 0x95, 0xff, 0x0d, - 0x00, 0x00, 0xff, 0xff, 0xad, 0xc5, 0x4a, 0xfd, 0x58, 0x67, 0x00, 0x00, + // 6720 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x6b, 0x70, 0x1c, 0xc7, + 0x75, 0x2e, 0x66, 0x67, 0x01, 0x2e, 0x0e, 0x5e, 0x83, 0x01, 0x09, 0xae, 0x20, 0x0a, 0x20, 0x57, + 0x14, 0x05, 0x41, 0x12, 0x08, 0x82, 0xe0, 0x6b, 0x69, 0x49, 0x77, 0x5f, 0xa4, 0x40, 0x13, 0x0b, + 0x78, 0x00, 0x58, 0xa2, 0x7d, 0x6f, 0x6d, 0x0d, 0x77, 0x1b, 0xc0, 0x4a, 0xbb, 0x33, 0xeb, 0x9d, + 0x59, 0x49, 0x50, 0xdd, 0xba, 0xa5, 0x6b, 0xdf, 0xeb, 0xd8, 0x49, 0xe5, 0xe9, 0xa4, 0x62, 0x3b, + 0xb6, 0x2c, 0xdb, 0x65, 0x5b, 0x76, 0x5e, 0x76, 0xec, 0x38, 0x7e, 0xa4, 0x62, 0xfd, 0x71, 0xc2, + 0xfc, 0x49, 0xc9, 0xf9, 0x95, 0x72, 0xa5, 0x54, 0x16, 0xe5, 0xaa, 0x38, 0x89, 0x12, 0x3b, 0x8e, + 0xaa, 0xe2, 0x2a, 0xf9, 0x47, 0xaa, 0x5f, 0x33, 0xd3, 0xbd, 0xb3, 0x98, 0x81, 0x28, 0xc9, 0xfe, + 0x43, 0xee, 0xf6, 0x39, 0xdf, 0x99, 0xd3, 0xe7, 0xd5, 0x67, 0xba, 0x1b, 0x0b, 0x3f, 0xbe, 0x00, + 0x47, 0xb7, 0x6d, 0x7b, 0xbb, 0x81, 0x4e, 0xb6, 0xda, 0xb6, 0x6b, 0x5f, 0xef, 0x6c, 0x9d, 0xac, + 0x21, 0xa7, 0xda, 0xae, 0xb7, 0x5c, 0xbb, 0x3d, 0x4f, 0xc6, 0xf4, 0x31, 0xca, 0x31, 0xcf, 0x39, + 0x32, 0x2b, 0x30, 0x7e, 0xa9, 0xde, 0x40, 0x45, 0x8f, 0x71, 0x1d, 0xb9, 0xfa, 0x79, 0x48, 0x6e, + 0xd5, 0x1b, 0x28, 0xad, 0x1c, 0x55, 0x67, 0x87, 0x16, 0x8f, 0xcf, 0x4b, 0xa0, 0x79, 0x11, 0xb1, + 0x86, 0x87, 0x0d, 0x82, 0xc8, 0xfc, 0x30, 0x09, 0x13, 0x21, 0x54, 0x5d, 0x87, 0xa4, 0x65, 0x36, + 0xb1, 0x44, 0x65, 0x76, 0xd0, 0x20, 0x9f, 0xf5, 0x34, 0x1c, 0x68, 0x99, 0xd5, 0xc7, 0xcd, 0x6d, + 0x94, 0x4e, 0x90, 0x61, 0xfe, 0x55, 0x9f, 0x06, 0xa8, 0xa1, 0x16, 0xb2, 0x6a, 0xc8, 0xaa, 0xee, + 0xa6, 0xd5, 0xa3, 0xea, 0xec, 0xa0, 0x11, 0x18, 0xd1, 0xef, 0x85, 0xf1, 0x56, 0xe7, 0x7a, 0xa3, + 0x5e, 0xad, 0x04, 0xd8, 0xe0, 0xa8, 0x3a, 0xdb, 0x6f, 0x68, 0x94, 0x50, 0xf4, 0x99, 0xef, 0x86, + 0xb1, 0x27, 0x91, 0xf9, 0x78, 0x90, 0x75, 0x88, 0xb0, 0x8e, 0xe2, 0xe1, 0x00, 0x63, 0x01, 0x86, + 0x9b, 0xc8, 0x71, 0xcc, 0x6d, 0x54, 0x71, 0x77, 0x5b, 0x28, 0x9d, 0x24, 0xb3, 0x3f, 0xda, 0x35, + 0x7b, 0x79, 0xe6, 0x43, 0x0c, 0xb5, 0xb1, 0xdb, 0x42, 0x7a, 0x0e, 0x06, 0x91, 0xd5, 0x69, 0x52, + 0x09, 0xfd, 0x3d, 0xec, 0x57, 0xb2, 0x3a, 0x4d, 0x59, 0x4a, 0x0a, 0xc3, 0x98, 0x88, 0x03, 0x0e, + 0x6a, 0x3f, 0x51, 0xaf, 0xa2, 0xf4, 0x00, 0x11, 0x70, 0x77, 0x97, 0x80, 0x75, 0x4a, 0x97, 0x65, + 0x70, 0x9c, 0x5e, 0x80, 0x41, 0xf4, 0x94, 0x8b, 0x2c, 0xa7, 0x6e, 0x5b, 0xe9, 0x03, 0x44, 0xc8, + 0x5d, 0x21, 0x5e, 0x44, 0x8d, 0x9a, 0x2c, 0xc2, 0xc7, 0xe9, 0x67, 0xe1, 0x80, 0xdd, 0x72, 0xeb, + 0xb6, 0xe5, 0xa4, 0x53, 0x47, 0x95, 0xd9, 0xa1, 0xc5, 0x23, 0xa1, 0x81, 0xb0, 0x4a, 0x79, 0x0c, + 0xce, 0xac, 0x2f, 0x83, 0xe6, 0xd8, 0x9d, 0x76, 0x15, 0x55, 0xaa, 0x76, 0x0d, 0x55, 0xea, 0xd6, + 0x96, 0x9d, 0x1e, 0x24, 0x02, 0x66, 0xba, 0x27, 0x42, 0x18, 0x0b, 0x76, 0x0d, 0x2d, 0x5b, 0x5b, + 0xb6, 0x31, 0xea, 0x08, 0xdf, 0xf5, 0x49, 0x18, 0x70, 0x76, 0x2d, 0xd7, 0x7c, 0x2a, 0x3d, 0x4c, + 0x22, 0x84, 0x7d, 0xcb, 0x7c, 0x73, 0x00, 0xc6, 0xe2, 0x84, 0xd8, 0x45, 0xe8, 0xdf, 0xc2, 0xb3, + 0x4c, 0x27, 0xf6, 0x63, 0x03, 0x8a, 0x11, 0x8d, 0x38, 0xf0, 0x06, 0x8d, 0x98, 0x83, 0x21, 0x0b, + 0x39, 0x2e, 0xaa, 0xd1, 0x88, 0x50, 0x63, 0xc6, 0x14, 0x50, 0x50, 0x77, 0x48, 0x25, 0xdf, 0x50, + 0x48, 0x3d, 0x0a, 0x63, 0x9e, 0x4a, 0x95, 0xb6, 0x69, 0x6d, 0xf3, 0xd8, 0x3c, 0x19, 0xa5, 0xc9, + 0x7c, 0x89, 0xe3, 0x0c, 0x0c, 0x33, 0x46, 0x91, 0xf0, 0x5d, 0x2f, 0x02, 0xd8, 0x16, 0xb2, 0xb7, + 0x2a, 0x35, 0x54, 0x6d, 0xa4, 0x53, 0x3d, 0xac, 0xb4, 0x8a, 0x59, 0xba, 0xac, 0x64, 0xd3, 0xd1, + 0x6a, 0x43, 0xbf, 0xe0, 0x87, 0xda, 0x81, 0x1e, 0x91, 0xb2, 0x42, 0x93, 0xac, 0x2b, 0xda, 0x36, + 0x61, 0xb4, 0x8d, 0x70, 0xdc, 0xa3, 0x1a, 0x9b, 0xd9, 0x20, 0x51, 0x62, 0x3e, 0x72, 0x66, 0x06, + 0x83, 0xd1, 0x89, 0x8d, 0xb4, 0x83, 0x5f, 0xf5, 0x3b, 0xc1, 0x1b, 0xa8, 0x90, 0xb0, 0x02, 0x52, + 0x85, 0x86, 0xf9, 0x60, 0xd9, 0x6c, 0xa2, 0xa9, 0xa7, 0x61, 0x54, 0x34, 0x8f, 0x7e, 0x10, 0xfa, + 0x1d, 0xd7, 0x6c, 0xbb, 0x24, 0x0a, 0xfb, 0x0d, 0xfa, 0x45, 0xd7, 0x40, 0x45, 0x56, 0x8d, 0x54, + 0xb9, 0x7e, 0x03, 0x7f, 0xd4, 0xff, 0x87, 0x3f, 0x61, 0x95, 0x4c, 0xf8, 0x44, 0xb7, 0x47, 0x05, + 0xc9, 0xf2, 0xbc, 0xa7, 0xce, 0xc1, 0x88, 0x30, 0x81, 0xb8, 0x8f, 0xce, 0xfc, 0x6f, 0x38, 0x14, + 0x2a, 0x5a, 0x7f, 0x14, 0x0e, 0x76, 0xac, 0xba, 0xe5, 0xa2, 0x76, 0xab, 0x8d, 0x70, 0xc4, 0xd2, + 0x47, 0xa5, 0xff, 0xe9, 0x40, 0x8f, 0x98, 0xdb, 0x0c, 0x72, 0x53, 0x29, 0xc6, 0x44, 0xa7, 0x7b, + 0x70, 0x6e, 0x30, 0xf5, 0xa3, 0x03, 0xda, 0x33, 0xcf, 0x3c, 0xf3, 0x4c, 0x22, 0xf3, 0xd1, 0x01, + 0x38, 0x18, 0x96, 0x33, 0xa1, 0xe9, 0x3b, 0x09, 0x03, 0x56, 0xa7, 0x79, 0x1d, 0xb5, 0x89, 0x91, + 0xfa, 0x0d, 0xf6, 0x4d, 0xcf, 0x41, 0x7f, 0xc3, 0xbc, 0x8e, 0x1a, 0xe9, 0xe4, 0x51, 0x65, 0x76, + 0x74, 0xf1, 0xde, 0x58, 0x59, 0x39, 0x7f, 0x15, 0x43, 0x0c, 0x8a, 0xd4, 0x1f, 0x84, 0x24, 0x2b, + 0xd1, 0x58, 0xc2, 0x5c, 0x3c, 0x09, 0x38, 0x97, 0x0c, 0x82, 0xd3, 0x6f, 0x87, 0x41, 0xfc, 0x3f, + 0x8d, 0x8d, 0x01, 0xa2, 0x73, 0x0a, 0x0f, 0xe0, 0xb8, 0xd0, 0xa7, 0x20, 0x45, 0xd2, 0xa4, 0x86, + 0xf8, 0xd2, 0xe6, 0x7d, 0xc7, 0x81, 0x55, 0x43, 0x5b, 0x66, 0xa7, 0xe1, 0x56, 0x9e, 0x30, 0x1b, + 0x1d, 0x44, 0x02, 0x7e, 0xd0, 0x18, 0x66, 0x83, 0xef, 0xc6, 0x63, 0xfa, 0x0c, 0x0c, 0xd1, 0xac, + 0xaa, 0x5b, 0x35, 0xf4, 0x14, 0xa9, 0x9e, 0xfd, 0x06, 0x4d, 0xb4, 0x65, 0x3c, 0x82, 0x1f, 0xff, + 0x98, 0x63, 0x5b, 0x3c, 0x34, 0xc9, 0x23, 0xf0, 0x00, 0x79, 0xfc, 0x39, 0xb9, 0x70, 0xdf, 0x11, + 0x3e, 0x3d, 0x39, 0xa6, 0x32, 0x5f, 0x4f, 0x40, 0x92, 0xd4, 0x8b, 0x31, 0x18, 0xda, 0xb8, 0xb6, + 0x56, 0xaa, 0x14, 0x57, 0x37, 0xf3, 0x57, 0x4b, 0x9a, 0xa2, 0x8f, 0x02, 0x90, 0x81, 0x4b, 0x57, + 0x57, 0x73, 0x1b, 0x5a, 0xc2, 0xfb, 0xbe, 0x5c, 0xde, 0x38, 0xbb, 0xa4, 0xa9, 0x1e, 0x60, 0x93, + 0x0e, 0x24, 0x83, 0x0c, 0xa7, 0x17, 0xb5, 0x7e, 0x5d, 0x83, 0x61, 0x2a, 0x60, 0xf9, 0xd1, 0x52, + 0xf1, 0xec, 0x92, 0x36, 0x20, 0x8e, 0x9c, 0x5e, 0xd4, 0x0e, 0xe8, 0x23, 0x30, 0x48, 0x46, 0xf2, + 0xab, 0xab, 0x57, 0xb5, 0x94, 0x27, 0x73, 0x7d, 0xc3, 0x58, 0x2e, 0x5f, 0xd6, 0x06, 0x3d, 0x99, + 0x97, 0x8d, 0xd5, 0xcd, 0x35, 0x0d, 0x3c, 0x09, 0x2b, 0xa5, 0xf5, 0xf5, 0xdc, 0xe5, 0x92, 0x36, + 0xe4, 0x71, 0xe4, 0xaf, 0x6d, 0x94, 0xd6, 0xb5, 0x61, 0x41, 0xad, 0xd3, 0x8b, 0xda, 0x88, 0xf7, + 0x88, 0x52, 0x79, 0x73, 0x45, 0x1b, 0xd5, 0xc7, 0x61, 0x84, 0x3e, 0x82, 0x2b, 0x31, 0x26, 0x0d, + 0x9d, 0x5d, 0xd2, 0x34, 0x5f, 0x11, 0x2a, 0x65, 0x5c, 0x18, 0x38, 0xbb, 0xa4, 0xe9, 0x99, 0x02, + 0xf4, 0x93, 0xe8, 0xd2, 0x75, 0x18, 0xbd, 0x9a, 0xcb, 0x97, 0xae, 0x56, 0x56, 0xd7, 0x36, 0x96, + 0x57, 0xcb, 0xb9, 0xab, 0x9a, 0xe2, 0x8f, 0x19, 0xa5, 0x77, 0x6d, 0x2e, 0x1b, 0xa5, 0xa2, 0x96, + 0x08, 0x8e, 0xad, 0x95, 0x72, 0x1b, 0xa5, 0xa2, 0xa6, 0x66, 0xaa, 0x70, 0x30, 0xac, 0x4e, 0x86, + 0x66, 0x46, 0xc0, 0xc5, 0x89, 0x1e, 0x2e, 0x26, 0xb2, 0xba, 0x5c, 0xfc, 0x4a, 0x02, 0x26, 0x42, + 0xd6, 0x8a, 0xd0, 0x87, 0x3c, 0x04, 0xfd, 0x34, 0x44, 0xe9, 0xea, 0x79, 0x4f, 0xe8, 0xa2, 0x43, + 0x02, 0xb6, 0x6b, 0x05, 0x25, 0xb8, 0x60, 0x07, 0xa1, 0xf6, 0xe8, 0x20, 0xb0, 0x88, 0xae, 0x9a, + 0xfe, 0xbf, 0xba, 0x6a, 0x3a, 0x5d, 0xf6, 0xce, 0xc6, 0x59, 0xf6, 0xc8, 0xd8, 0xfe, 0x6a, 0x7b, + 0x7f, 0x48, 0x6d, 0xbf, 0x08, 0xe3, 0x5d, 0x82, 0x62, 0xd7, 0xd8, 0x0f, 0x28, 0x90, 0xee, 0x65, + 0x9c, 0x88, 0x4a, 0x97, 0x10, 0x2a, 0xdd, 0x45, 0xd9, 0x82, 0xc7, 0x7a, 0x3b, 0xa1, 0xcb, 0xd7, + 0x5f, 0x50, 0x60, 0x32, 0xbc, 0x53, 0x0c, 0xd5, 0xe1, 0x41, 0x18, 0x68, 0x22, 0x77, 0xc7, 0xe6, + 0xdd, 0xd2, 0x89, 0x90, 0x35, 0x18, 0x93, 0x65, 0x67, 0x33, 0x54, 0x70, 0x11, 0x57, 0x7b, 0xb5, + 0x7b, 0x54, 0x9b, 0x2e, 0x4d, 0x3f, 0x9c, 0x80, 0x43, 0xa1, 0xc2, 0x43, 0x15, 0xbd, 0x03, 0xa0, + 0x6e, 0xb5, 0x3a, 0x2e, 0xed, 0x88, 0x68, 0x81, 0x1d, 0x24, 0x23, 0xa4, 0x78, 0xe1, 0xe2, 0xd9, + 0x71, 0x3d, 0xba, 0x4a, 0xe8, 0x40, 0x87, 0x08, 0xc3, 0x79, 0x5f, 0xd1, 0x24, 0x51, 0x74, 0xba, + 0xc7, 0x4c, 0xbb, 0x02, 0x73, 0x01, 0xb4, 0x6a, 0xa3, 0x8e, 0x2c, 0xb7, 0xe2, 0xb8, 0x6d, 0x64, + 0x36, 0xeb, 0xd6, 0x36, 0x59, 0x41, 0x52, 0xd9, 0xfe, 0x2d, 0xb3, 0xe1, 0x20, 0x63, 0x8c, 0x92, + 0xd7, 0x39, 0x15, 0x23, 0x48, 0x00, 0xb5, 0x03, 0x88, 0x01, 0x01, 0x41, 0xc9, 0x1e, 0x22, 0xf3, + 0xd5, 0x14, 0x0c, 0x05, 0xfa, 0x6a, 0xfd, 0x18, 0x0c, 0x3f, 0x66, 0x3e, 0x61, 0x56, 0xf8, 0xbb, + 0x12, 0xb5, 0xc4, 0x10, 0x1e, 0x5b, 0x63, 0xef, 0x4b, 0x0b, 0x70, 0x90, 0xb0, 0xd8, 0x1d, 0x17, + 0xb5, 0x2b, 0xd5, 0x86, 0xe9, 0x38, 0xc4, 0x68, 0x29, 0xc2, 0xaa, 0x63, 0xda, 0x2a, 0x26, 0x15, + 0x38, 0x45, 0x3f, 0x03, 0x13, 0x04, 0xd1, 0xec, 0x34, 0xdc, 0x7a, 0xab, 0x81, 0x2a, 0xf8, 0xed, + 0xcd, 0x21, 0x2b, 0x89, 0xa7, 0xd9, 0x38, 0xe6, 0x58, 0x61, 0x0c, 0x58, 0x23, 0x47, 0x2f, 0xc2, + 0x1d, 0x04, 0xb6, 0x8d, 0x2c, 0xd4, 0x36, 0x5d, 0x54, 0x41, 0xef, 0xeb, 0x98, 0x0d, 0xa7, 0x62, + 0x5a, 0xb5, 0xca, 0x8e, 0xe9, 0xec, 0xa4, 0x0f, 0x62, 0x01, 0xf9, 0x44, 0x5a, 0x31, 0x6e, 0xc3, + 0x8c, 0x97, 0x19, 0x5f, 0x89, 0xb0, 0xe5, 0xac, 0xda, 0xc3, 0xa6, 0xb3, 0xa3, 0x67, 0x61, 0x92, + 0x48, 0x71, 0xdc, 0x76, 0xdd, 0xda, 0xae, 0x54, 0x77, 0x50, 0xf5, 0xf1, 0x4a, 0xc7, 0xdd, 0x3a, + 0x9f, 0xbe, 0x3d, 0xf8, 0x7c, 0xa2, 0xe1, 0x3a, 0xe1, 0x29, 0x60, 0x96, 0x4d, 0x77, 0xeb, 0xbc, + 0xbe, 0x0e, 0xc3, 0xd8, 0x19, 0xcd, 0xfa, 0xd3, 0xa8, 0xb2, 0x65, 0xb7, 0xc9, 0xd2, 0x38, 0x1a, + 0x52, 0x9a, 0x02, 0x16, 0x9c, 0x5f, 0x65, 0x80, 0x15, 0xbb, 0x86, 0xb2, 0xfd, 0xeb, 0x6b, 0xa5, + 0x52, 0xd1, 0x18, 0xe2, 0x52, 0x2e, 0xd9, 0x6d, 0x1c, 0x50, 0xdb, 0xb6, 0x67, 0xe0, 0x21, 0x1a, + 0x50, 0xdb, 0x36, 0x37, 0xef, 0x19, 0x98, 0xa8, 0x56, 0xe9, 0x9c, 0xeb, 0xd5, 0x0a, 0x7b, 0xc7, + 0x72, 0xd2, 0x9a, 0x60, 0xac, 0x6a, 0xf5, 0x32, 0x65, 0x60, 0x31, 0xee, 0xe8, 0x17, 0xe0, 0x90, + 0x6f, 0xac, 0x20, 0x70, 0xbc, 0x6b, 0x96, 0x32, 0xf4, 0x0c, 0x4c, 0xb4, 0x76, 0xbb, 0x81, 0xba, + 0xf0, 0xc4, 0xd6, 0xae, 0x0c, 0x3b, 0x07, 0x07, 0x5b, 0x3b, 0xad, 0x6e, 0xdc, 0x5c, 0x10, 0xa7, + 0xb7, 0x76, 0x5a, 0x32, 0xf0, 0x2e, 0xf2, 0xc2, 0xdd, 0x46, 0x55, 0xd3, 0x45, 0xb5, 0xf4, 0xe1, + 0x20, 0x7b, 0x80, 0xa0, 0x9f, 0x04, 0xad, 0x5a, 0xad, 0x20, 0xcb, 0xbc, 0xde, 0x40, 0x15, 0xb3, + 0x8d, 0x2c, 0xd3, 0x49, 0xcf, 0x04, 0x99, 0x47, 0xab, 0xd5, 0x12, 0xa1, 0xe6, 0x08, 0x51, 0x9f, + 0x83, 0x71, 0xfb, 0xfa, 0x63, 0x55, 0x1a, 0x92, 0x95, 0x56, 0x1b, 0x6d, 0xd5, 0x9f, 0x4a, 0x1f, + 0x27, 0xf6, 0x1d, 0xc3, 0x04, 0x12, 0x90, 0x6b, 0x64, 0x58, 0xbf, 0x07, 0xb4, 0xaa, 0xb3, 0x63, + 0xb6, 0x5b, 0xa4, 0x26, 0x3b, 0x2d, 0xb3, 0x8a, 0xd2, 0x77, 0x51, 0x56, 0x3a, 0x5e, 0xe6, 0xc3, + 0x38, 0x25, 0x9c, 0x27, 0xeb, 0x5b, 0x2e, 0x97, 0x78, 0x37, 0x4d, 0x09, 0x32, 0xc6, 0xa4, 0xcd, + 0x82, 0x86, 0x4d, 0x21, 0x3c, 0x78, 0x96, 0xb0, 0x8d, 0xb6, 0x76, 0x5a, 0xc1, 0xe7, 0xde, 0x09, + 0x23, 0x98, 0xd3, 0x7f, 0xe8, 0x3d, 0xb4, 0x21, 0x6b, 0xed, 0x04, 0x9e, 0xf8, 0x96, 0xf5, 0xc6, + 0x99, 0x2c, 0x0c, 0x07, 0xe3, 0x53, 0x1f, 0x04, 0x1a, 0xa1, 0x9a, 0x82, 0x9b, 0x95, 0xc2, 0x6a, + 0x11, 0xb7, 0x19, 0xef, 0x29, 0x69, 0x09, 0xdc, 0xee, 0x5c, 0x5d, 0xde, 0x28, 0x55, 0x8c, 0xcd, + 0xf2, 0xc6, 0xf2, 0x4a, 0x49, 0x53, 0x83, 0x7d, 0xf5, 0x77, 0x13, 0x30, 0x2a, 0xbe, 0x22, 0xe9, + 0xef, 0x80, 0xc3, 0x7c, 0x3f, 0xc3, 0x41, 0x6e, 0xe5, 0xc9, 0x7a, 0x9b, 0xa4, 0x4c, 0xd3, 0xa4, + 0xcb, 0x97, 0xe7, 0xb4, 0x83, 0x8c, 0x6b, 0x1d, 0xb9, 0x8f, 0xd4, 0xdb, 0x38, 0x21, 0x9a, 0xa6, + 0xab, 0x5f, 0x85, 0x19, 0xcb, 0xae, 0x38, 0xae, 0x69, 0xd5, 0xcc, 0x76, 0xad, 0xe2, 0xef, 0x24, + 0x55, 0xcc, 0x6a, 0x15, 0x39, 0x8e, 0x4d, 0x97, 0x2a, 0x4f, 0xca, 0x11, 0xcb, 0x5e, 0x67, 0xcc, + 0x7e, 0x0d, 0xcf, 0x31, 0x56, 0x29, 0xc0, 0xd4, 0x5e, 0x01, 0x76, 0x3b, 0x0c, 0x36, 0xcd, 0x56, + 0x05, 0x59, 0x6e, 0x7b, 0x97, 0x34, 0xc6, 0x29, 0x23, 0xd5, 0x34, 0x5b, 0x25, 0xfc, 0xfd, 0xed, + 0x79, 0x3f, 0xf9, 0x47, 0x15, 0x86, 0x83, 0xcd, 0x31, 0x7e, 0xd7, 0xa8, 0x92, 0x75, 0x44, 0x21, + 0x95, 0xe6, 0xce, 0x3d, 0x5b, 0xe9, 0xf9, 0x02, 0x5e, 0x60, 0xb2, 0x03, 0xb4, 0x65, 0x35, 0x28, + 0x12, 0x2f, 0xee, 0xb8, 0xb6, 0x20, 0xda, 0x22, 0xa4, 0x0c, 0xf6, 0x4d, 0xbf, 0x0c, 0x03, 0x8f, + 0x39, 0x44, 0xf6, 0x00, 0x91, 0x7d, 0x7c, 0x6f, 0xd9, 0x57, 0xd6, 0x89, 0xf0, 0xc1, 0x2b, 0xeb, + 0x95, 0xf2, 0xaa, 0xb1, 0x92, 0xbb, 0x6a, 0x30, 0xb8, 0x7e, 0x1b, 0x24, 0x1b, 0xe6, 0xd3, 0xbb, + 0xe2, 0x52, 0x44, 0x86, 0xe2, 0x1a, 0xfe, 0x36, 0x48, 0x3e, 0x89, 0xcc, 0xc7, 0xc5, 0x05, 0x80, + 0x0c, 0xbd, 0x85, 0xa1, 0x7f, 0x12, 0xfa, 0x89, 0xbd, 0x74, 0x00, 0x66, 0x31, 0xad, 0x4f, 0x4f, + 0x41, 0xb2, 0xb0, 0x6a, 0xe0, 0xf0, 0xd7, 0x60, 0x98, 0x8e, 0x56, 0xd6, 0x96, 0x4b, 0x85, 0x92, + 0x96, 0xc8, 0x9c, 0x81, 0x01, 0x6a, 0x04, 0x9c, 0x1a, 0x9e, 0x19, 0xb4, 0x3e, 0xf6, 0x95, 0xc9, + 0x50, 0x38, 0x75, 0x73, 0x25, 0x5f, 0x32, 0xb4, 0x44, 0xd0, 0xbd, 0x0e, 0x0c, 0x07, 0xfb, 0xe2, + 0xb7, 0x27, 0xa6, 0xbe, 0xa5, 0xc0, 0x50, 0xa0, 0xcf, 0xc5, 0x0d, 0x8a, 0xd9, 0x68, 0xd8, 0x4f, + 0x56, 0xcc, 0x46, 0xdd, 0x74, 0x58, 0x50, 0x00, 0x19, 0xca, 0xe1, 0x91, 0xb8, 0x4e, 0x7b, 0x5b, + 0x94, 0x7f, 0x56, 0x01, 0x4d, 0x6e, 0x31, 0x25, 0x05, 0x95, 0x5f, 0xa8, 0x82, 0x9f, 0x50, 0x60, + 0x54, 0xec, 0x2b, 0x25, 0xf5, 0x8e, 0xfd, 0x42, 0xd5, 0xfb, 0x41, 0x02, 0x46, 0x84, 0x6e, 0x32, + 0xae, 0x76, 0xef, 0x83, 0xf1, 0x7a, 0x0d, 0x35, 0x5b, 0xb6, 0x8b, 0xac, 0xea, 0x6e, 0xa5, 0x81, + 0x9e, 0x40, 0x8d, 0x74, 0x86, 0x14, 0x8a, 0x93, 0x7b, 0xf7, 0xab, 0xf3, 0xcb, 0x3e, 0xee, 0x2a, + 0x86, 0x65, 0x27, 0x96, 0x8b, 0xa5, 0x95, 0xb5, 0xd5, 0x8d, 0x52, 0xb9, 0x70, 0xad, 0xb2, 0x59, + 0x7e, 0x67, 0x79, 0xf5, 0x91, 0xb2, 0xa1, 0xd5, 0x25, 0xb6, 0xb7, 0x30, 0xd5, 0xd7, 0x40, 0x93, + 0x95, 0xd2, 0x0f, 0x43, 0x98, 0x5a, 0x5a, 0x9f, 0x3e, 0x01, 0x63, 0xe5, 0xd5, 0xca, 0xfa, 0x72, + 0xb1, 0x54, 0x29, 0x5d, 0xba, 0x54, 0x2a, 0x6c, 0xac, 0xd3, 0x1d, 0x08, 0x8f, 0x7b, 0x43, 0x4c, + 0xea, 0x8f, 0xab, 0x30, 0x11, 0xa2, 0x89, 0x9e, 0x63, 0xef, 0x0e, 0xf4, 0x75, 0xe6, 0xfe, 0x38, + 0xda, 0xcf, 0xe3, 0x25, 0x7f, 0xcd, 0x6c, 0xbb, 0xec, 0x55, 0xe3, 0x1e, 0xc0, 0x56, 0xb2, 0xdc, + 0xfa, 0x56, 0x1d, 0xb5, 0xd9, 0x86, 0x0d, 0x7d, 0xa1, 0x18, 0xf3, 0xc7, 0xe9, 0x9e, 0xcd, 0x7d, + 0xa0, 0xb7, 0x6c, 0xa7, 0xee, 0xd6, 0x9f, 0x40, 0x95, 0xba, 0xc5, 0x77, 0x77, 0xf0, 0x0b, 0x46, + 0xd2, 0xd0, 0x38, 0x65, 0xd9, 0x72, 0x3d, 0x6e, 0x0b, 0x6d, 0x9b, 0x12, 0x37, 0x2e, 0xe0, 0xaa, + 0xa1, 0x71, 0x8a, 0xc7, 0x7d, 0x0c, 0x86, 0x6b, 0x76, 0x07, 0x77, 0x5d, 0x94, 0x0f, 0xaf, 0x17, + 0x8a, 0x31, 0x44, 0xc7, 0x3c, 0x16, 0xd6, 0x4f, 0xfb, 0xdb, 0x4a, 0xc3, 0xc6, 0x10, 0x1d, 0xa3, + 0x2c, 0x77, 0xc3, 0x98, 0xb9, 0xbd, 0xdd, 0xc6, 0xc2, 0xb9, 0x20, 0xfa, 0x86, 0x30, 0xea, 0x0d, + 0x13, 0xc6, 0xa9, 0x2b, 0x90, 0xe2, 0x76, 0xc0, 0x4b, 0x32, 0xb6, 0x44, 0xa5, 0x45, 0x5f, 0x7b, + 0x13, 0xb3, 0x83, 0x46, 0xca, 0xe2, 0xc4, 0x63, 0x30, 0x5c, 0x77, 0x2a, 0xfe, 0x2e, 0x79, 0xe2, + 0x68, 0x62, 0x36, 0x65, 0x0c, 0xd5, 0x1d, 0x6f, 0x87, 0x31, 0xf3, 0x85, 0x04, 0x8c, 0x8a, 0xbb, + 0xfc, 0x7a, 0x11, 0x52, 0x0d, 0xbb, 0x6a, 0x92, 0xd0, 0xa2, 0x47, 0x4c, 0xb3, 0x11, 0x07, 0x03, + 0xf3, 0x57, 0x19, 0xbf, 0xe1, 0x21, 0xa7, 0xfe, 0x4e, 0x81, 0x14, 0x1f, 0xd6, 0x27, 0x21, 0xd9, + 0x32, 0xdd, 0x1d, 0x22, 0xae, 0x3f, 0x9f, 0xd0, 0x14, 0x83, 0x7c, 0xc7, 0xe3, 0x4e, 0xcb, 0xb4, + 0x48, 0x08, 0xb0, 0x71, 0xfc, 0x1d, 0xfb, 0xb5, 0x81, 0xcc, 0x1a, 0x79, 0xfd, 0xb0, 0x9b, 0x4d, + 0x64, 0xb9, 0x0e, 0xf7, 0x2b, 0x1b, 0x2f, 0xb0, 0x61, 0xfd, 0x5e, 0x18, 0x77, 0xdb, 0x66, 0xbd, + 0x21, 0xf0, 0x26, 0x09, 0xaf, 0xc6, 0x09, 0x1e, 0x73, 0x16, 0x6e, 0xe3, 0x72, 0x6b, 0xc8, 0x35, + 0xab, 0x3b, 0xa8, 0xe6, 0x83, 0x06, 0xc8, 0x36, 0xc3, 0x61, 0xc6, 0x50, 0x64, 0x74, 0x8e, 0xcd, + 0x7c, 0x4f, 0x81, 0x71, 0xfe, 0xc2, 0x54, 0xf3, 0x8c, 0xb5, 0x02, 0x60, 0x5a, 0x96, 0xed, 0x06, + 0xcd, 0xd5, 0x1d, 0xca, 0x5d, 0xb8, 0xf9, 0x9c, 0x07, 0x32, 0x02, 0x02, 0xa6, 0x9a, 0x00, 0x3e, + 0xa5, 0xa7, 0xd9, 0x66, 0x60, 0x88, 0x1d, 0xe1, 0x90, 0x73, 0x40, 0xfa, 0x8a, 0x0d, 0x74, 0x08, + 0xbf, 0x59, 0xe9, 0x07, 0xa1, 0xff, 0x3a, 0xda, 0xae, 0x5b, 0x6c, 0x63, 0x96, 0x7e, 0xe1, 0x1b, + 0x21, 0x49, 0x6f, 0x23, 0x24, 0xff, 0x5e, 0x98, 0xa8, 0xda, 0x4d, 0x59, 0xdd, 0xbc, 0x26, 0xbd, + 0xe6, 0x3b, 0x0f, 0x2b, 0xef, 0x01, 0xbf, 0xc5, 0xfc, 0x99, 0xa2, 0x7c, 0x26, 0xa1, 0x5e, 0x5e, + 0xcb, 0x7f, 0x29, 0x31, 0x75, 0x99, 0x42, 0xd7, 0xf8, 0x4c, 0x0d, 0xb4, 0xd5, 0x40, 0x55, 0xac, + 0x3d, 0x7c, 0xfe, 0x5e, 0xb8, 0x7f, 0xbb, 0xee, 0xee, 0x74, 0xae, 0xcf, 0x57, 0xed, 0xe6, 0xc9, + 0x6d, 0x7b, 0xdb, 0xf6, 0x8f, 0x3e, 0xf1, 0x37, 0xf2, 0x85, 0x7c, 0x62, 0xc7, 0x9f, 0x83, 0xde, + 0xe8, 0x54, 0xe4, 0x59, 0x69, 0xb6, 0x0c, 0x13, 0x8c, 0xb9, 0x42, 0xce, 0x5f, 0xe8, 0x5b, 0x84, + 0xbe, 0xe7, 0x1e, 0x56, 0xfa, 0x2b, 0x3f, 0x24, 0xcb, 0xb5, 0x31, 0xce, 0xa0, 0x98, 0x46, 0x5f, + 0x34, 0xb2, 0x06, 0x1c, 0x12, 0xe4, 0xd1, 0xd4, 0x44, 0xed, 0x08, 0x89, 0xdf, 0x65, 0x12, 0x27, + 0x02, 0x12, 0xd7, 0x19, 0x34, 0x5b, 0x80, 0x91, 0xfd, 0xc8, 0xfa, 0x6b, 0x26, 0x6b, 0x18, 0x05, + 0x85, 0x5c, 0x86, 0x31, 0x22, 0xa4, 0xda, 0x71, 0x5c, 0xbb, 0x49, 0xea, 0xde, 0xde, 0x62, 0xfe, + 0xe6, 0x87, 0x34, 0x57, 0x46, 0x31, 0xac, 0xe0, 0xa1, 0xb2, 0x59, 0x20, 0x47, 0x4e, 0x35, 0x54, + 0x6d, 0x44, 0x48, 0xb8, 0xc1, 0x14, 0xf1, 0xf8, 0xb3, 0xef, 0x86, 0x83, 0xf8, 0x33, 0x29, 0x4b, + 0x41, 0x4d, 0xa2, 0x37, 0xbc, 0xd2, 0xdf, 0xfb, 0x00, 0x4d, 0xc7, 0x09, 0x4f, 0x40, 0x40, 0xa7, + 0x80, 0x17, 0xb7, 0x91, 0xeb, 0xa2, 0xb6, 0x53, 0x31, 0x1b, 0x61, 0xea, 0x05, 0x76, 0x0c, 0xd2, + 0x1f, 0x7b, 0x55, 0xf4, 0xe2, 0x65, 0x8a, 0xcc, 0x35, 0x1a, 0xd9, 0x4d, 0x38, 0x1c, 0x12, 0x15, + 0x31, 0x64, 0x7e, 0x9c, 0xc9, 0x3c, 0xd8, 0x15, 0x19, 0x58, 0xec, 0x1a, 0xf0, 0x71, 0xcf, 0x97, + 0x31, 0x64, 0xfe, 0x01, 0x93, 0xa9, 0x33, 0x2c, 0x77, 0x29, 0x96, 0x78, 0x05, 0xc6, 0x9f, 0x40, + 0xed, 0xeb, 0xb6, 0xc3, 0x76, 0x69, 0x62, 0x88, 0xfb, 0x04, 0x13, 0x37, 0xc6, 0x80, 0x64, 0xdb, + 0x06, 0xcb, 0xba, 0x00, 0xa9, 0x2d, 0xb3, 0x8a, 0x62, 0x88, 0xf8, 0x24, 0x13, 0x71, 0x00, 0xf3, + 0x63, 0x68, 0x0e, 0x86, 0xb7, 0x6d, 0xb6, 0x32, 0x45, 0xc3, 0x9f, 0x65, 0xf0, 0x21, 0x8e, 0x61, + 0x22, 0x5a, 0x76, 0xab, 0xd3, 0xc0, 0xcb, 0x56, 0xb4, 0x88, 0x4f, 0x71, 0x11, 0x1c, 0xc3, 0x44, + 0xec, 0xc3, 0xac, 0xcf, 0x71, 0x11, 0x4e, 0xc0, 0x9e, 0x0f, 0xc1, 0x90, 0x6d, 0x35, 0x76, 0x6d, + 0x2b, 0x8e, 0x12, 0x9f, 0x66, 0x12, 0x80, 0x41, 0xb0, 0x80, 0x8b, 0x30, 0x18, 0xd7, 0x11, 0x9f, + 0x7b, 0x95, 0xa7, 0x07, 0xf7, 0xc0, 0x65, 0x18, 0xe3, 0x05, 0xaa, 0x6e, 0x5b, 0x31, 0x44, 0x7c, + 0x9e, 0x89, 0x18, 0x0d, 0xc0, 0xd8, 0x34, 0x5c, 0xe4, 0xb8, 0xdb, 0x28, 0x8e, 0x90, 0x2f, 0xf0, + 0x69, 0x30, 0x08, 0x33, 0xe5, 0x75, 0x64, 0x55, 0x77, 0xe2, 0x49, 0x78, 0x9e, 0x9b, 0x92, 0x63, + 0xb0, 0x88, 0x02, 0x8c, 0x34, 0xcd, 0xb6, 0xb3, 0x63, 0x36, 0x62, 0xb9, 0xe3, 0x8b, 0x4c, 0xc6, + 0xb0, 0x07, 0x62, 0x16, 0xe9, 0x58, 0xfb, 0x11, 0xf3, 0x25, 0x6e, 0x91, 0x00, 0x8c, 0xa5, 0x9e, + 0xe3, 0x92, 0x2d, 0xad, 0xfd, 0x48, 0xfb, 0x43, 0x9e, 0x7a, 0x14, 0xbb, 0x12, 0x94, 0x78, 0x11, + 0x06, 0x9d, 0xfa, 0xd3, 0xb1, 0xc4, 0xfc, 0x11, 0xf7, 0x34, 0x01, 0x60, 0xf0, 0x35, 0xb8, 0x2d, + 0x74, 0x99, 0x88, 0x21, 0xec, 0x8f, 0x99, 0xb0, 0xc9, 0x90, 0xa5, 0x82, 0x95, 0x84, 0xfd, 0x8a, + 0xfc, 0x13, 0x5e, 0x12, 0x90, 0x24, 0x6b, 0x0d, 0xbf, 0x2b, 0x38, 0xe6, 0xd6, 0xfe, 0xac, 0xf6, + 0xa7, 0xdc, 0x6a, 0x14, 0x2b, 0x58, 0x6d, 0x03, 0x26, 0x99, 0xc4, 0xfd, 0xf9, 0xf5, 0xcb, 0xbc, + 0xb0, 0x52, 0xf4, 0xa6, 0xe8, 0xdd, 0xf7, 0xc2, 0x94, 0x67, 0x4e, 0xde, 0x94, 0x3a, 0x95, 0xa6, + 0xd9, 0x8a, 0x21, 0xf9, 0x2b, 0x4c, 0x32, 0xaf, 0xf8, 0x5e, 0x57, 0xeb, 0xac, 0x98, 0x2d, 0x2c, + 0xfc, 0x51, 0x48, 0x73, 0xe1, 0x1d, 0xab, 0x8d, 0xaa, 0xf6, 0xb6, 0x55, 0x7f, 0x1a, 0xd5, 0x62, + 0x88, 0xfe, 0x33, 0xc9, 0x55, 0x9b, 0x01, 0x38, 0x96, 0xbc, 0x0c, 0x9a, 0xd7, 0xab, 0x54, 0xea, + 0xcd, 0x96, 0xdd, 0x76, 0x23, 0x24, 0x7e, 0x95, 0x7b, 0xca, 0xc3, 0x2d, 0x13, 0x58, 0xb6, 0x04, + 0xa3, 0xe4, 0x6b, 0xdc, 0x90, 0xfc, 0x1a, 0x13, 0x34, 0xe2, 0xa3, 0x58, 0xe1, 0xa8, 0xda, 0xcd, + 0x96, 0xd9, 0x8e, 0x53, 0xff, 0xfe, 0x9c, 0x17, 0x0e, 0x06, 0x61, 0x85, 0xc3, 0xdd, 0x6d, 0x21, + 0xbc, 0xda, 0xc7, 0x90, 0xf0, 0x75, 0x5e, 0x38, 0x38, 0x86, 0x89, 0xe0, 0x0d, 0x43, 0x0c, 0x11, + 0x7f, 0xc1, 0x45, 0x70, 0x0c, 0x16, 0xf1, 0x2e, 0x7f, 0xa1, 0x6d, 0xa3, 0xed, 0xba, 0xe3, 0xb6, + 0x69, 0x2b, 0xbc, 0xb7, 0xa8, 0x6f, 0xbc, 0x2a, 0x36, 0x61, 0x46, 0x00, 0x8a, 0x2b, 0x11, 0xdb, + 0x42, 0x25, 0x6f, 0x4a, 0xd1, 0x8a, 0x7d, 0x93, 0x57, 0xa2, 0x00, 0x0c, 0xeb, 0x16, 0xe8, 0x10, + 0xb1, 0xd9, 0xab, 0xf8, 0xfd, 0x20, 0x86, 0xb8, 0x6f, 0x49, 0xca, 0xad, 0x73, 0x2c, 0x96, 0x19, + 0xe8, 0x7f, 0x3a, 0xd6, 0xe3, 0x68, 0x37, 0x56, 0x74, 0x7e, 0x5b, 0xea, 0x7f, 0x36, 0x29, 0x92, + 0xd6, 0x90, 0x31, 0xa9, 0x9f, 0xd2, 0xa3, 0x2e, 0xeb, 0xa4, 0xff, 0xef, 0x6b, 0x6c, 0xbe, 0x62, + 0x3b, 0x95, 0xbd, 0x8a, 0x83, 0x5c, 0x6c, 0x7a, 0xa2, 0x85, 0x7d, 0xe0, 0x35, 0x2f, 0xce, 0x85, + 0x9e, 0x27, 0x7b, 0x09, 0x46, 0x84, 0x86, 0x27, 0x5a, 0xd4, 0xff, 0x63, 0xa2, 0x86, 0x83, 0xfd, + 0x4e, 0xf6, 0x0c, 0x24, 0x71, 0xf3, 0x12, 0x0d, 0xff, 0xff, 0x0c, 0x4e, 0xd8, 0xb3, 0x0f, 0x40, + 0x8a, 0x37, 0x2d, 0xd1, 0xd0, 0x0f, 0x32, 0xa8, 0x07, 0xc1, 0x70, 0xde, 0xb0, 0x44, 0xc3, 0x7f, + 0x85, 0xc3, 0x39, 0x04, 0xc3, 0xe3, 0x9b, 0xf0, 0x85, 0x5f, 0x4b, 0xb2, 0x45, 0x87, 0xdb, 0xee, + 0x22, 0x1c, 0x60, 0x9d, 0x4a, 0x34, 0xfa, 0xc3, 0xec, 0xe1, 0x1c, 0x91, 0x3d, 0x07, 0xfd, 0x31, + 0x0d, 0xfe, 0xeb, 0x0c, 0x4a, 0xf9, 0xb3, 0x05, 0x18, 0x0a, 0x74, 0x27, 0xd1, 0xf0, 0xdf, 0x60, + 0xf0, 0x20, 0x0a, 0xab, 0xce, 0xba, 0x93, 0x68, 0x01, 0xbf, 0xc9, 0x55, 0x67, 0x08, 0x6c, 0x36, + 0xde, 0x98, 0x44, 0xa3, 0x7f, 0x8b, 0x5b, 0x9d, 0x43, 0xb2, 0x0f, 0xc1, 0xa0, 0xb7, 0xd8, 0x44, + 0xe3, 0x7f, 0x9b, 0xe1, 0x7d, 0x0c, 0xb6, 0x40, 0x60, 0xb1, 0x8b, 0x16, 0xf1, 0x3b, 0xdc, 0x02, + 0x01, 0x14, 0x4e, 0x23, 0xb9, 0x81, 0x89, 0x96, 0xf4, 0x11, 0x9e, 0x46, 0x52, 0xff, 0x82, 0xbd, + 0x49, 0x6a, 0x7e, 0xb4, 0x88, 0xdf, 0xe5, 0xde, 0x24, 0xfc, 0x58, 0x0d, 0xb9, 0x23, 0x88, 0x96, + 0xf1, 0xfb, 0x5c, 0x0d, 0xa9, 0x21, 0xc8, 0xae, 0x81, 0xde, 0xdd, 0x0d, 0x44, 0xcb, 0xfb, 0x28, + 0x93, 0x37, 0xde, 0xd5, 0x0c, 0x64, 0x1f, 0x81, 0xc9, 0xf0, 0x4e, 0x20, 0x5a, 0xea, 0xc7, 0x5e, + 0x93, 0xde, 0xdd, 0x82, 0x8d, 0x40, 0x76, 0xc3, 0x5f, 0x52, 0x82, 0x5d, 0x40, 0xb4, 0xd8, 0x8f, + 0xbf, 0x26, 0x16, 0xee, 0x60, 0x13, 0x90, 0xcd, 0x01, 0xf8, 0x0b, 0x70, 0xb4, 0xac, 0x4f, 0x30, + 0x59, 0x01, 0x10, 0x4e, 0x0d, 0xb6, 0xfe, 0x46, 0xe3, 0x3f, 0xc9, 0x53, 0x83, 0x21, 0x70, 0x6a, + 0xf0, 0xa5, 0x37, 0x1a, 0xfd, 0x2c, 0x4f, 0x0d, 0x0e, 0xc1, 0x91, 0x1d, 0x58, 0xdd, 0xa2, 0x25, + 0x7c, 0x9a, 0x47, 0x76, 0x00, 0x95, 0x2d, 0xc3, 0x78, 0xd7, 0x82, 0x18, 0x2d, 0xea, 0x33, 0x4c, + 0x94, 0x26, 0xaf, 0x87, 0xc1, 0xc5, 0x8b, 0x2d, 0x86, 0xd1, 0xd2, 0x3e, 0x2b, 0x2d, 0x5e, 0x6c, + 0x2d, 0xcc, 0x5e, 0x84, 0x94, 0xd5, 0x69, 0x34, 0x70, 0xf2, 0xe8, 0x7b, 0x5f, 0xb0, 0x4b, 0xff, + 0xf3, 0xeb, 0xcc, 0x3a, 0x1c, 0x90, 0x3d, 0x03, 0xfd, 0xa8, 0x79, 0x1d, 0xd5, 0xa2, 0x90, 0xff, + 0xf2, 0x3a, 0x2f, 0x98, 0x98, 0x3b, 0xfb, 0x10, 0x00, 0xdd, 0x1a, 0x21, 0xc7, 0x7e, 0x11, 0xd8, + 0x7f, 0x7d, 0x9d, 0x5d, 0x7d, 0xf1, 0x21, 0xbe, 0x00, 0x7a, 0x91, 0x66, 0x6f, 0x01, 0xaf, 0x8a, + 0x02, 0x88, 0x47, 0x2e, 0xc0, 0x81, 0xc7, 0x1c, 0xdb, 0x72, 0xcd, 0xed, 0x28, 0xf4, 0xbf, 0x31, + 0x34, 0xe7, 0xc7, 0x06, 0x6b, 0xda, 0x6d, 0xe4, 0x9a, 0xdb, 0x4e, 0x14, 0xf6, 0xdf, 0x19, 0xd6, + 0x03, 0x60, 0x70, 0xd5, 0x74, 0xdc, 0x38, 0xf3, 0xfe, 0x31, 0x07, 0x73, 0x00, 0x56, 0x1a, 0x7f, + 0x7e, 0x1c, 0xed, 0x46, 0x61, 0x7f, 0xc2, 0x95, 0x66, 0xfc, 0xd9, 0x07, 0x60, 0x10, 0x7f, 0xa4, + 0xf7, 0xd9, 0x22, 0xc0, 0xff, 0xc1, 0xc0, 0x3e, 0x02, 0x3f, 0xd9, 0x71, 0x6b, 0x6e, 0x3d, 0xda, + 0xd8, 0x3f, 0x65, 0x9e, 0xe6, 0xfc, 0xd9, 0x1c, 0x0c, 0x39, 0x6e, 0xad, 0xd6, 0x61, 0xfd, 0x69, + 0x04, 0xfc, 0x3f, 0x5f, 0xf7, 0xb6, 0x2c, 0x3c, 0x0c, 0xf6, 0xf6, 0x93, 0x8f, 0xbb, 0x2d, 0x9b, + 0x1c, 0x73, 0x44, 0x49, 0x78, 0x8d, 0x49, 0x08, 0x40, 0xf2, 0xa5, 0xf0, 0xed, 0x5b, 0xb8, 0x6c, + 0x5f, 0xb6, 0xe9, 0xc6, 0xed, 0x7b, 0x32, 0xd1, 0x3b, 0xb0, 0xf0, 0xed, 0x06, 0x8c, 0xb8, 0x3b, + 0x08, 0x2f, 0xba, 0x6c, 0x23, 0x36, 0x89, 0x3f, 0x4f, 0xed, 0x6f, 0xf7, 0x96, 0x9c, 0xcd, 0x97, + 0xeb, 0x58, 0xe1, 0x32, 0x39, 0x1e, 0xd1, 0x8f, 0xc0, 0x00, 0x99, 0xc2, 0x29, 0x72, 0x04, 0xa9, + 0xe4, 0x93, 0x37, 0x5e, 0x9a, 0xe9, 0x33, 0xd8, 0x98, 0x47, 0x5d, 0x24, 0xfb, 0xd7, 0x09, 0x81, + 0xba, 0xe8, 0x51, 0x4f, 0xd3, 0x2d, 0x6c, 0x81, 0x7a, 0xda, 0xa3, 0x2e, 0x91, 0xcd, 0x6c, 0x55, + 0xa0, 0x2e, 0x79, 0xd4, 0x33, 0xe4, 0xc0, 0x66, 0x44, 0xa0, 0x9e, 0xf1, 0xa8, 0x67, 0xc9, 0x31, + 0x4d, 0x52, 0xa0, 0x9e, 0xf5, 0xa8, 0xe7, 0xc8, 0x09, 0xcd, 0xb8, 0x40, 0x3d, 0xe7, 0x51, 0xcf, + 0x93, 0x93, 0x19, 0x5d, 0xa0, 0x9e, 0xf7, 0xa8, 0x17, 0xc8, 0xb5, 0xa7, 0x03, 0x02, 0xf5, 0x82, + 0x3e, 0x0d, 0x07, 0xe8, 0xcc, 0x17, 0xc8, 0x31, 0xfe, 0x18, 0x23, 0xf3, 0x41, 0x9f, 0x7e, 0x8a, + 0x5c, 0x71, 0x1a, 0x10, 0xe9, 0xa7, 0x7c, 0xfa, 0x22, 0xf9, 0x6b, 0x0b, 0x4d, 0xa4, 0x2f, 0xfa, + 0xf4, 0xd3, 0xe9, 0x11, 0x72, 0xcd, 0x4b, 0xa0, 0x9f, 0xf6, 0xe9, 0x4b, 0xe9, 0x51, 0x9c, 0x07, + 0x22, 0x7d, 0xc9, 0xa7, 0x9f, 0x49, 0x8f, 0x1d, 0x55, 0x66, 0x87, 0x45, 0xfa, 0x99, 0xcc, 0xfb, + 0x89, 0x7b, 0x2d, 0xdf, 0xbd, 0x93, 0xa2, 0x7b, 0x3d, 0xc7, 0x4e, 0x8a, 0x8e, 0xf5, 0x5c, 0x3a, + 0x29, 0xba, 0xd4, 0x73, 0xe6, 0xa4, 0xe8, 0x4c, 0xcf, 0x8d, 0x93, 0xa2, 0x1b, 0x3d, 0x07, 0x4e, + 0x8a, 0x0e, 0xf4, 0x5c, 0x37, 0x29, 0xba, 0xce, 0x73, 0xda, 0xa4, 0xe8, 0x34, 0xcf, 0x5d, 0x93, + 0xa2, 0xbb, 0x3c, 0x47, 0xa5, 0x25, 0x47, 0xf9, 0x2e, 0x4a, 0x4b, 0x2e, 0xf2, 0x9d, 0x93, 0x96, + 0x9c, 0xe3, 0xbb, 0x25, 0x2d, 0xb9, 0xc5, 0x77, 0x48, 0x5a, 0x72, 0x88, 0xef, 0x8a, 0xb4, 0xe4, + 0x0a, 0xdf, 0x09, 0x2c, 0xc7, 0x0c, 0xd4, 0x0a, 0xc9, 0x31, 0x75, 0xcf, 0x1c, 0x53, 0xf7, 0xcc, + 0x31, 0x75, 0xcf, 0x1c, 0x53, 0xf7, 0xcc, 0x31, 0x75, 0xcf, 0x1c, 0x53, 0xf7, 0xcc, 0x31, 0x75, + 0xcf, 0x1c, 0x53, 0xf7, 0xcc, 0x31, 0x75, 0xef, 0x1c, 0x53, 0x23, 0x72, 0x4c, 0x8d, 0xc8, 0x31, + 0x35, 0x22, 0xc7, 0xd4, 0x88, 0x1c, 0x53, 0x23, 0x72, 0x4c, 0xed, 0x99, 0x63, 0xbe, 0x7b, 0x27, + 0x45, 0xf7, 0x86, 0xe6, 0x98, 0xda, 0x23, 0xc7, 0xd4, 0x1e, 0x39, 0xa6, 0xf6, 0xc8, 0x31, 0xb5, + 0x47, 0x8e, 0xa9, 0x3d, 0x72, 0x4c, 0xed, 0x91, 0x63, 0x6a, 0x8f, 0x1c, 0x53, 0x7b, 0xe5, 0x98, + 0xda, 0x33, 0xc7, 0xd4, 0x9e, 0x39, 0xa6, 0xf6, 0xcc, 0x31, 0xb5, 0x67, 0x8e, 0xa9, 0x3d, 0x73, + 0x4c, 0x0d, 0xe6, 0xd8, 0x5f, 0xaa, 0xa0, 0xd3, 0x1c, 0x5b, 0x23, 0x17, 0xc1, 0x98, 0x2b, 0xa6, + 0xa5, 0x4c, 0x1b, 0xc0, 0xae, 0xd3, 0x7c, 0x97, 0x4c, 0x4b, 0xb9, 0x26, 0xd2, 0x17, 0x3d, 0x3a, + 0xcf, 0x36, 0x91, 0x7e, 0xda, 0xa3, 0xf3, 0x7c, 0x13, 0xe9, 0x4b, 0x1e, 0x9d, 0x67, 0x9c, 0x48, + 0x3f, 0xe3, 0xd1, 0x79, 0xce, 0x89, 0xf4, 0xb3, 0x1e, 0x9d, 0x67, 0x9d, 0x48, 0x3f, 0xe7, 0xd1, + 0x79, 0xde, 0x89, 0xf4, 0xf3, 0x1e, 0x9d, 0x67, 0x9e, 0x48, 0xbf, 0xa0, 0x1f, 0x95, 0x73, 0x8f, + 0x33, 0x78, 0xae, 0x3d, 0x2a, 0x67, 0x9f, 0xc4, 0x71, 0xca, 0xe7, 0xe0, 0xf9, 0x27, 0x71, 0x2c, + 0xfa, 0x1c, 0x3c, 0x03, 0x25, 0x8e, 0xd3, 0x99, 0x0f, 0x11, 0xf7, 0x59, 0xb2, 0xfb, 0xa6, 0x24, + 0xf7, 0x25, 0x02, 0xae, 0x9b, 0x92, 0x5c, 0x97, 0x08, 0xb8, 0x6d, 0x4a, 0x72, 0x5b, 0x22, 0xe0, + 0xb2, 0x29, 0xc9, 0x65, 0x89, 0x80, 0xbb, 0xa6, 0x24, 0x77, 0x25, 0x02, 0xae, 0x9a, 0x92, 0x5c, + 0x95, 0x08, 0xb8, 0x69, 0x4a, 0x72, 0x53, 0x22, 0xe0, 0xa2, 0x29, 0xc9, 0x45, 0x89, 0x80, 0x7b, + 0xa6, 0x24, 0xf7, 0x24, 0x02, 0xae, 0x39, 0x22, 0xbb, 0x26, 0x11, 0x74, 0xcb, 0x11, 0xd9, 0x2d, + 0x89, 0xa0, 0x4b, 0x8e, 0xc8, 0x2e, 0x49, 0x04, 0xdd, 0x71, 0x44, 0x76, 0x47, 0x22, 0xe8, 0x8a, + 0x9f, 0x27, 0x78, 0x47, 0xb8, 0xee, 0xb6, 0x3b, 0x55, 0xf7, 0x96, 0x3a, 0xc2, 0x05, 0xa1, 0x7d, + 0x18, 0x5a, 0xd4, 0xe7, 0x49, 0xc3, 0x1a, 0xec, 0x38, 0xa5, 0x15, 0x6c, 0x41, 0x68, 0x2c, 0x02, + 0x08, 0x2b, 0x1c, 0xb1, 0x74, 0x4b, 0xbd, 0xe1, 0x82, 0xd0, 0x66, 0x44, 0xeb, 0x77, 0xfe, 0x2d, + 0xef, 0xd8, 0x5e, 0x48, 0xf0, 0x8e, 0x8d, 0x99, 0x7f, 0xbf, 0x1d, 0xdb, 0x5c, 0xb4, 0xc9, 0x3d, + 0x63, 0xcf, 0x45, 0x1b, 0xbb, 0x6b, 0xd5, 0x89, 0xdb, 0xc1, 0xcd, 0x45, 0x9b, 0xd6, 0x33, 0xea, + 0x9b, 0xdb, 0x6f, 0xb1, 0x08, 0x36, 0x50, 0x2b, 0x24, 0x82, 0xf7, 0xdb, 0x6f, 0x2d, 0x08, 0xa5, + 0x64, 0xbf, 0x11, 0xac, 0xee, 0x3b, 0x82, 0xf7, 0xdb, 0x79, 0x2d, 0x08, 0xe5, 0x65, 0xdf, 0x11, + 0xfc, 0x16, 0xf4, 0x43, 0x2c, 0x82, 0x7d, 0xf3, 0xef, 0xb7, 0x1f, 0x9a, 0x8b, 0x36, 0x79, 0x68, + 0x04, 0xab, 0xfb, 0x88, 0xe0, 0x38, 0xfd, 0xd1, 0x5c, 0xb4, 0x69, 0xc3, 0x23, 0xf8, 0x96, 0xbb, + 0x99, 0x4f, 0x29, 0x30, 0x5e, 0xae, 0xd7, 0x4a, 0xcd, 0xeb, 0xa8, 0x56, 0x43, 0x35, 0x66, 0xc7, + 0x05, 0xa1, 0x12, 0xf4, 0x70, 0xf5, 0x8b, 0x2f, 0xcd, 0xf8, 0x16, 0x3e, 0x03, 0x29, 0x6a, 0xd3, + 0x85, 0x85, 0xf4, 0x0d, 0x25, 0xa2, 0xc2, 0x79, 0xac, 0xfa, 0x31, 0x0e, 0x3b, 0xb5, 0x90, 0xfe, + 0x7b, 0x25, 0x50, 0xe5, 0xbc, 0xe1, 0xcc, 0x47, 0x88, 0x86, 0xd6, 0x2d, 0x6b, 0x78, 0x32, 0x96, + 0x86, 0x01, 0xdd, 0x6e, 0xef, 0xd2, 0x2d, 0xa0, 0x55, 0x07, 0xc6, 0xca, 0xf5, 0x5a, 0x99, 0xfc, + 0x9d, 0x7f, 0x1c, 0x95, 0x28, 0x8f, 0x54, 0x0f, 0x16, 0x84, 0xb0, 0x0c, 0x22, 0xbc, 0x90, 0x16, + 0x6b, 0x44, 0xa6, 0x8e, 0x1f, 0x6b, 0x09, 0x8f, 0x9d, 0xeb, 0xf5, 0x58, 0xbf, 0xb2, 0x7b, 0x0f, + 0x9c, 0xeb, 0xf5, 0x40, 0x3f, 0x87, 0xbc, 0x47, 0x3d, 0xc5, 0x17, 0x67, 0x7a, 0x1d, 0x4b, 0x3f, + 0x02, 0x89, 0x65, 0x7a, 0x5b, 0x7c, 0x38, 0x3f, 0x8c, 0x95, 0xfa, 0xfe, 0x4b, 0x33, 0xc9, 0xcd, + 0x4e, 0xbd, 0x66, 0x24, 0x96, 0x6b, 0xfa, 0x15, 0xe8, 0x7f, 0x37, 0xfb, 0x6b, 0x53, 0xcc, 0xb0, + 0xc4, 0x18, 0xee, 0xeb, 0xb9, 0x47, 0x84, 0x1f, 0x7c, 0x92, 0x6e, 0x4d, 0xce, 0x6f, 0xd6, 0x2d, + 0xf7, 0xd4, 0xe2, 0x79, 0x83, 0x8a, 0xc8, 0xfc, 0x4f, 0x00, 0xfa, 0xcc, 0xa2, 0xe9, 0xec, 0xe8, + 0x65, 0x2e, 0x99, 0x3e, 0xfa, 0xfc, 0xf7, 0x5f, 0x9a, 0x59, 0x8a, 0x23, 0xf5, 0xfe, 0x9a, 0xe9, + 0xec, 0xdc, 0xef, 0xee, 0xb6, 0xd0, 0x7c, 0x7e, 0xd7, 0x45, 0x0e, 0x97, 0xde, 0xe2, 0xab, 0x1e, + 0x9b, 0x57, 0x3a, 0x30, 0xaf, 0x94, 0x30, 0xa7, 0x4b, 0xe2, 0x9c, 0x16, 0xde, 0xe8, 0x7c, 0x9e, + 0xe2, 0x8b, 0x84, 0x64, 0x49, 0x35, 0xca, 0x92, 0xea, 0xad, 0x5a, 0xb2, 0xc5, 0xeb, 0xa3, 0x34, + 0x57, 0x75, 0xaf, 0xb9, 0xaa, 0xb7, 0x32, 0xd7, 0xff, 0xa2, 0xd9, 0xea, 0xe5, 0xd3, 0xa6, 0x45, + 0x6f, 0xaa, 0xfe, 0x72, 0xed, 0x05, 0xbd, 0xa9, 0x5d, 0x40, 0x36, 0x79, 0xe3, 0xb9, 0x19, 0x25, + 0xf3, 0xa9, 0x04, 0x9f, 0x39, 0x4d, 0xa4, 0x37, 0x36, 0xf3, 0x5f, 0x96, 0x9e, 0xea, 0xad, 0xb0, + 0xd0, 0xb3, 0x0a, 0x4c, 0x76, 0x55, 0x72, 0x6a, 0xa6, 0x37, 0xb7, 0x9c, 0x5b, 0xfb, 0x2d, 0xe7, + 0x4c, 0xc1, 0xaf, 0x29, 0x70, 0x50, 0x2a, 0xaf, 0x54, 0xbd, 0x93, 0x92, 0x7a, 0x87, 0xbb, 0x9f, + 0x44, 0x18, 0x03, 0xda, 0x05, 0xdd, 0x2b, 0x01, 0x02, 0x92, 0x3d, 0xbf, 0x2f, 0x49, 0x7e, 0x3f, + 0xe2, 0x01, 0x42, 0xcc, 0xc5, 0x23, 0x80, 0xa9, 0x6d, 0x43, 0x72, 0xa3, 0x8d, 0x90, 0x3e, 0x0d, + 0x89, 0xd5, 0x36, 0xd3, 0x70, 0x94, 0xe2, 0x57, 0xdb, 0xf9, 0xb6, 0x69, 0x55, 0x77, 0x8c, 0xc4, + 0x6a, 0x5b, 0x3f, 0x06, 0x6a, 0x8e, 0xfd, 0xa5, 0xfb, 0xd0, 0xe2, 0x18, 0x65, 0xc8, 0x59, 0x35, + 0xc6, 0x81, 0x69, 0xfa, 0x34, 0x24, 0xaf, 0x22, 0x73, 0x8b, 0x29, 0x01, 0x94, 0x07, 0x8f, 0x18, + 0x64, 0x9c, 0x3d, 0xf0, 0x51, 0x48, 0x71, 0xc1, 0xfa, 0x71, 0x8c, 0xd8, 0x72, 0xd9, 0x63, 0x19, + 0x02, 0xab, 0xc3, 0x56, 0x2e, 0x42, 0xd5, 0x4f, 0x40, 0xbf, 0x51, 0xdf, 0xde, 0x71, 0xd9, 0xc3, + 0xbb, 0xd9, 0x28, 0x39, 0x73, 0x0d, 0x06, 0x3d, 0x8d, 0xde, 0x64, 0xd1, 0x45, 0x3a, 0x35, 0x7d, + 0x2a, 0xb8, 0x9e, 0xf0, 0x7d, 0x4b, 0x3a, 0xa4, 0x1f, 0x85, 0xd4, 0xba, 0xdb, 0xf6, 0x8b, 0x3e, + 0xef, 0x48, 0xbd, 0xd1, 0xcc, 0xfb, 0x15, 0x48, 0x15, 0x11, 0x6a, 0x11, 0x83, 0xdf, 0x05, 0xc9, + 0xa2, 0xfd, 0xa4, 0xc5, 0x14, 0x1c, 0x67, 0x16, 0xc5, 0x64, 0x66, 0x53, 0x42, 0xd6, 0xef, 0x0a, + 0xda, 0x7d, 0xc2, 0xb3, 0x7b, 0x80, 0x8f, 0xd8, 0x3e, 0x23, 0xd8, 0x9e, 0x39, 0x10, 0x33, 0x75, + 0xd9, 0xff, 0x1c, 0x0c, 0x05, 0x9e, 0xa2, 0xcf, 0x32, 0x35, 0x12, 0x32, 0x30, 0x68, 0x2b, 0xcc, + 0x91, 0x41, 0x30, 0x22, 0x3c, 0x18, 0x43, 0x03, 0x26, 0xee, 0x01, 0x25, 0x66, 0x9e, 0x13, 0xcd, + 0x1c, 0xce, 0xca, 0x4c, 0xbd, 0x40, 0x6d, 0x44, 0xcc, 0x7d, 0x9c, 0x06, 0x67, 0x6f, 0x27, 0xe2, + 0xcf, 0x99, 0x7e, 0x50, 0xcb, 0xf5, 0x46, 0xe6, 0x01, 0x00, 0x9a, 0xf2, 0x25, 0xab, 0xd3, 0x94, + 0xb2, 0x6e, 0x94, 0x1b, 0x78, 0x63, 0x07, 0x6d, 0x20, 0x87, 0xb0, 0x88, 0xfd, 0x14, 0x2e, 0x30, + 0x40, 0x53, 0x8c, 0xe0, 0xef, 0x89, 0xc4, 0x87, 0x76, 0x62, 0x98, 0x35, 0x4d, 0x59, 0xaf, 0x21, + 0x37, 0x67, 0xd9, 0xee, 0x0e, 0x6a, 0x4b, 0x88, 0x45, 0xfd, 0xb4, 0x90, 0xb0, 0xa3, 0x8b, 0xb7, + 0x7b, 0x88, 0x9e, 0xa0, 0xd3, 0x99, 0x2f, 0x13, 0x05, 0x71, 0x2b, 0xd0, 0x35, 0x41, 0x35, 0xc6, + 0x04, 0xf5, 0xb3, 0x42, 0xff, 0xb6, 0x87, 0x9a, 0xd2, 0xab, 0xe5, 0x05, 0xe1, 0x3d, 0x67, 0x6f, + 0x65, 0xc5, 0x77, 0x4c, 0x6e, 0x53, 0xae, 0xf2, 0x3d, 0x91, 0x2a, 0xf7, 0xe8, 0x6e, 0xf7, 0x6b, + 0x53, 0x35, 0xae, 0x4d, 0xbf, 0xe5, 0x75, 0x1c, 0xf4, 0xe7, 0x44, 0xc8, 0x0f, 0xf1, 0xe8, 0xf7, + 0x45, 0xfa, 0x3e, 0xab, 0x14, 0x3c, 0x55, 0x97, 0xe2, 0xba, 0x3f, 0x9b, 0xc8, 0xe7, 0x3d, 0x75, + 0xcf, 0xed, 0x23, 0x04, 0xb2, 0x89, 0x42, 0xc1, 0x2b, 0xdb, 0xa9, 0x0f, 0x3d, 0x37, 0xa3, 0x3c, + 0xff, 0xdc, 0x4c, 0x5f, 0xe6, 0x8b, 0x0a, 0x8c, 0x33, 0xce, 0x40, 0xe0, 0xde, 0x2f, 0x29, 0x7f, + 0x88, 0xd7, 0x8c, 0x30, 0x0b, 0xbc, 0x6d, 0xc1, 0xfb, 0x5d, 0x05, 0xd2, 0x5d, 0xba, 0x72, 0x7b, + 0x2f, 0xc4, 0x52, 0x39, 0xab, 0x94, 0x7e, 0xf1, 0x36, 0xbf, 0x06, 0xfd, 0x1b, 0xf5, 0x26, 0x6a, + 0xe3, 0x95, 0x00, 0x7f, 0xa0, 0x2a, 0xf3, 0xc3, 0x1c, 0x3a, 0xc4, 0x69, 0x54, 0x39, 0x81, 0xb6, + 0xa8, 0xa7, 0x21, 0x59, 0x34, 0x5d, 0x93, 0x68, 0x30, 0xec, 0xd5, 0x57, 0xd3, 0x35, 0x33, 0xa7, + 0x61, 0x78, 0x65, 0x97, 0x5c, 0x2f, 0xaa, 0x91, 0x9b, 0x25, 0x62, 0xf7, 0xc7, 0xfb, 0xd5, 0x53, + 0x73, 0xfd, 0xa9, 0x9a, 0x76, 0x43, 0xc9, 0x26, 0x89, 0x3e, 0x4f, 0xc0, 0xe8, 0x2a, 0x56, 0x9b, + 0xe0, 0x04, 0x18, 0x7d, 0xba, 0xea, 0x4d, 0x5e, 0x6a, 0xca, 0x54, 0xbf, 0x29, 0x3b, 0x0a, 0xca, + 0x8a, 0xd8, 0x3a, 0x05, 0xf5, 0x30, 0x94, 0x95, 0xb9, 0x64, 0x6a, 0x54, 0x1b, 0x9f, 0x4b, 0xa6, + 0x40, 0x1b, 0x61, 0xcf, 0xfd, 0x5b, 0x15, 0x34, 0xda, 0xea, 0x14, 0xd1, 0x56, 0xdd, 0xaa, 0xbb, + 0xdd, 0xfd, 0xaa, 0xa7, 0xb1, 0xfe, 0x10, 0x0c, 0x62, 0x93, 0x5e, 0x62, 0xbf, 0xc7, 0x87, 0x4d, + 0x7f, 0x8c, 0xb5, 0x28, 0x92, 0x08, 0x36, 0x40, 0x42, 0xc7, 0xc7, 0xe8, 0x97, 0x40, 0x2d, 0x97, + 0x57, 0xd8, 0xe2, 0xb6, 0xb4, 0x27, 0x94, 0x5d, 0xe1, 0x61, 0xdf, 0xd8, 0x98, 0xb3, 0x6d, 0x60, + 0x01, 0xfa, 0x12, 0x24, 0xca, 0x2b, 0xac, 0xe1, 0x3d, 0x1e, 0x47, 0x8c, 0x91, 0x28, 0xaf, 0x4c, + 0xfd, 0x95, 0x02, 0x23, 0xc2, 0xa8, 0x9e, 0x81, 0x61, 0x3a, 0x10, 0x98, 0xee, 0x80, 0x21, 0x8c, + 0x71, 0x9d, 0x13, 0xb7, 0xa8, 0xf3, 0x54, 0x0e, 0xc6, 0xa4, 0x71, 0x7d, 0x1e, 0xf4, 0xe0, 0x10, + 0x53, 0x82, 0xfe, 0x16, 0x58, 0x08, 0x25, 0x73, 0x07, 0x80, 0x6f, 0x57, 0xef, 0x27, 0xac, 0xca, + 0xa5, 0xf5, 0x8d, 0x52, 0x51, 0x53, 0x32, 0x5f, 0x57, 0x60, 0x88, 0xb5, 0xad, 0x55, 0xbb, 0x85, + 0xf4, 0x3c, 0x28, 0x39, 0x16, 0x0f, 0x6f, 0x4c, 0x6f, 0x25, 0xa7, 0x9f, 0x04, 0x25, 0x1f, 0xdf, + 0xd5, 0x4a, 0x5e, 0x5f, 0x04, 0xa5, 0xc0, 0x1c, 0x1c, 0xcf, 0x33, 0x4a, 0x21, 0xf3, 0x53, 0x15, + 0x26, 0x82, 0x6d, 0x34, 0xaf, 0x27, 0xc7, 0xc4, 0xf7, 0xa6, 0xec, 0xe0, 0xa9, 0xc5, 0xd3, 0x4b, + 0xf3, 0xf8, 0x1f, 0x2f, 0x24, 0x33, 0xe2, 0x2b, 0x54, 0x16, 0x3c, 0x96, 0x53, 0xbd, 0xee, 0x89, + 0x64, 0x93, 0x01, 0x09, 0x5d, 0xf7, 0x44, 0x04, 0x6a, 0xd7, 0x3d, 0x11, 0x81, 0xda, 0x75, 0x4f, + 0x44, 0xa0, 0x76, 0x9d, 0x05, 0x08, 0xd4, 0xae, 0x7b, 0x22, 0x02, 0xb5, 0xeb, 0x9e, 0x88, 0x40, + 0xed, 0xbe, 0x27, 0xc2, 0xc8, 0x3d, 0xef, 0x89, 0x88, 0xf4, 0xee, 0x7b, 0x22, 0x22, 0xbd, 0xfb, + 0x9e, 0x48, 0x36, 0xe9, 0xb6, 0x3b, 0xa8, 0xf7, 0xa9, 0x83, 0x88, 0xdf, 0xeb, 0x25, 0xd0, 0xaf, + 0xc0, 0xab, 0x30, 0x46, 0x37, 0x24, 0x0a, 0xb6, 0xe5, 0x9a, 0x75, 0x0b, 0xb5, 0xf5, 0x77, 0xc0, + 0x30, 0x1d, 0xa2, 0xaf, 0x39, 0x61, 0xaf, 0x81, 0x94, 0xce, 0xea, 0xad, 0xc0, 0x9d, 0xf9, 0x79, + 0x12, 0x26, 0xe9, 0x40, 0xd9, 0x6c, 0x22, 0xe1, 0x96, 0xd1, 0x09, 0xe9, 0x4c, 0x69, 0x14, 0xc3, + 0x6f, 0xbe, 0x34, 0x43, 0x47, 0x73, 0x5e, 0x34, 0x9d, 0x90, 0x4e, 0x97, 0x44, 0x3e, 0x7f, 0x01, + 0x3a, 0x21, 0xdd, 0x3c, 0x12, 0xf9, 0xbc, 0xf5, 0xc6, 0xe3, 0xe3, 0x77, 0x90, 0x44, 0xbe, 0xa2, + 0x17, 0x65, 0x27, 0xa4, 0xdb, 0x48, 0x22, 0x5f, 0xc9, 0x8b, 0xb7, 0x13, 0xd2, 0xd9, 0x93, 0xc8, + 0x77, 0xc9, 0x8b, 0xbc, 0x13, 0xd2, 0x29, 0x94, 0xc8, 0x77, 0xd9, 0x8b, 0xc1, 0x13, 0xd2, 0x5d, + 0x25, 0x91, 0xef, 0x61, 0x2f, 0x1a, 0x4f, 0x48, 0xb7, 0x96, 0x44, 0xbe, 0x65, 0x2f, 0x2e, 0x67, + 0xe5, 0xfb, 0x4b, 0x22, 0xe3, 0x15, 0x3f, 0x42, 0x67, 0xe5, 0x9b, 0x4c, 0x22, 0xe7, 0x3b, 0xfd, + 0x58, 0x9d, 0x95, 0xef, 0x34, 0x89, 0x9c, 0x57, 0xfd, 0xa8, 0x9d, 0x95, 0xcf, 0xca, 0x44, 0xce, + 0x15, 0x3f, 0x7e, 0x67, 0xe5, 0x53, 0x33, 0x91, 0xb3, 0xec, 0x47, 0xf2, 0xac, 0x7c, 0x7e, 0x26, + 0x72, 0xae, 0xfa, 0x9b, 0xe8, 0xdf, 0x91, 0xc2, 0x2f, 0x70, 0x0b, 0x2a, 0x23, 0x85, 0x1f, 0x84, + 0x84, 0x9e, 0x54, 0xc8, 0x02, 0x3c, 0x7e, 0xd8, 0x65, 0xa4, 0xb0, 0x83, 0x90, 0x90, 0xcb, 0x48, + 0x21, 0x07, 0x21, 0xe1, 0x96, 0x91, 0xc2, 0x0d, 0x42, 0x42, 0x2d, 0x23, 0x85, 0x1a, 0x84, 0x84, + 0x59, 0x46, 0x0a, 0x33, 0x08, 0x09, 0xb1, 0x8c, 0x14, 0x62, 0x10, 0x12, 0x5e, 0x19, 0x29, 0xbc, + 0x20, 0x24, 0xb4, 0x8e, 0xcb, 0xa1, 0x05, 0x61, 0x61, 0x75, 0x5c, 0x0e, 0x2b, 0x08, 0x0b, 0xa9, + 0x3b, 0xe5, 0x90, 0x1a, 0xbc, 0xf9, 0xd2, 0x4c, 0x3f, 0x1e, 0x0a, 0x44, 0xd3, 0x71, 0x39, 0x9a, + 0x20, 0x2c, 0x92, 0x8e, 0xcb, 0x91, 0x04, 0x61, 0x51, 0x74, 0x5c, 0x8e, 0x22, 0x08, 0x8b, 0xa0, + 0x17, 0xe4, 0x08, 0xf2, 0xef, 0xf8, 0x64, 0xa4, 0x23, 0xc5, 0xa8, 0x08, 0x52, 0x63, 0x44, 0x90, + 0x1a, 0x23, 0x82, 0xd4, 0x18, 0x11, 0xa4, 0xc6, 0x88, 0x20, 0x35, 0x46, 0x04, 0xa9, 0x31, 0x22, + 0x48, 0x8d, 0x11, 0x41, 0x6a, 0x9c, 0x08, 0x52, 0x63, 0x45, 0x90, 0xda, 0x2b, 0x82, 0x8e, 0xcb, + 0x37, 0x1e, 0x20, 0xac, 0x20, 0x1d, 0x97, 0x8f, 0x3e, 0xa3, 0x43, 0x48, 0x8d, 0x15, 0x42, 0x6a, + 0xaf, 0x10, 0xfa, 0x8e, 0x0a, 0x13, 0x42, 0x08, 0xb1, 0xf3, 0xa1, 0x37, 0xab, 0x02, 0x9d, 0x8d, + 0x71, 0xc1, 0x22, 0x2c, 0xa6, 0xce, 0xc6, 0x38, 0xa4, 0xde, 0x2b, 0xce, 0xba, 0xab, 0x50, 0x29, + 0x46, 0x15, 0xba, 0xe4, 0xc5, 0xd0, 0xd9, 0x18, 0x17, 0x2f, 0xba, 0x63, 0xef, 0xfc, 0x5e, 0x45, + 0xe0, 0xe1, 0x58, 0x45, 0x60, 0x39, 0x56, 0x11, 0xb8, 0xe2, 0x7b, 0xf0, 0x83, 0x09, 0x38, 0xe8, + 0x7b, 0x90, 0x7e, 0x22, 0xbf, 0x97, 0x95, 0x09, 0x1c, 0x51, 0xe9, 0xfc, 0xd8, 0x26, 0xe0, 0xc6, + 0xc4, 0x72, 0x4d, 0x5f, 0x13, 0x0f, 0xab, 0xb2, 0xfb, 0x3d, 0xc0, 0x09, 0x78, 0x9c, 0x6d, 0x86, + 0x1e, 0x07, 0x75, 0xb9, 0xe6, 0x90, 0x6a, 0x11, 0xf6, 0xd8, 0x82, 0x81, 0xc9, 0xba, 0x01, 0x03, + 0x84, 0xdd, 0x21, 0xee, 0xbd, 0x95, 0x07, 0x17, 0x0d, 0x26, 0x29, 0xf3, 0x82, 0x02, 0x47, 0x85, + 0x50, 0x7e, 0x73, 0x8e, 0x0c, 0x2e, 0xc6, 0x3a, 0x32, 0x10, 0x12, 0xc4, 0x3f, 0x3e, 0xb8, 0xbb, + 0xfb, 0xa4, 0x3a, 0x98, 0x25, 0xf2, 0x51, 0xc2, 0xff, 0x81, 0x51, 0x7f, 0x06, 0xe4, 0x9d, 0xed, + 0x4c, 0xf4, 0x6e, 0x66, 0x58, 0x6a, 0x9e, 0x91, 0x76, 0xd1, 0xf6, 0x84, 0x79, 0xd9, 0x9a, 0xc9, + 0xc2, 0x58, 0x59, 0xfc, 0x43, 0xa7, 0xa8, 0xcd, 0x88, 0x14, 0x6e, 0xcd, 0x6f, 0x7c, 0x7a, 0xa6, + 0x2f, 0x73, 0x1f, 0x0c, 0x07, 0xff, 0x96, 0x49, 0x02, 0x0e, 0x72, 0x60, 0x36, 0xf9, 0x22, 0xe6, + 0xfe, 0x3d, 0x05, 0x0e, 0x05, 0xd9, 0x1f, 0xa9, 0xbb, 0x3b, 0xcb, 0x16, 0xee, 0xe9, 0x1f, 0x80, + 0x14, 0x62, 0x8e, 0x63, 0x3f, 0x7d, 0xc3, 0xde, 0x23, 0x43, 0xd9, 0xe7, 0xc9, 0xbf, 0x86, 0x07, + 0x91, 0x76, 0x41, 0xf8, 0x63, 0x17, 0xa7, 0xee, 0x82, 0x7e, 0x2a, 0x5f, 0xd4, 0x6b, 0x44, 0xd2, + 0xeb, 0x73, 0x21, 0x7a, 0x91, 0x38, 0xd2, 0xaf, 0x08, 0x7a, 0x05, 0x5e, 0x57, 0x43, 0xd9, 0xe7, + 0x79, 0xf0, 0xe5, 0x53, 0xb8, 0xff, 0x23, 0x11, 0x15, 0xad, 0xe4, 0x2c, 0xa4, 0x4a, 0x32, 0x4f, + 0xb8, 0x9e, 0x45, 0x48, 0x96, 0xed, 0x1a, 0xf9, 0x51, 0x1e, 0xf2, 0x2b, 0xd4, 0xcc, 0xc8, 0xec, + 0x27, 0xa9, 0x4f, 0x40, 0xaa, 0xb0, 0x53, 0x6f, 0xd4, 0xda, 0xc8, 0x62, 0x67, 0xf6, 0x6c, 0x0b, + 0x1d, 0x63, 0x0c, 0x8f, 0x96, 0x29, 0xc0, 0x78, 0xd9, 0xb6, 0xf2, 0xbb, 0x6e, 0xb0, 0x6e, 0xcc, + 0x4b, 0x29, 0xc2, 0xce, 0x7c, 0xc8, 0xdf, 0x7e, 0x60, 0x86, 0x7c, 0xff, 0xf7, 0x5f, 0x9a, 0x51, + 0x36, 0xbc, 0xfd, 0xf3, 0x15, 0x38, 0xcc, 0xd2, 0xa7, 0x4b, 0xd4, 0x62, 0x94, 0xa8, 0x41, 0x76, + 0x4e, 0x1d, 0x10, 0xb7, 0x8c, 0xc5, 0x59, 0xa1, 0xe2, 0xde, 0x98, 0x66, 0xb8, 0x29, 0xda, 0x53, + 0x33, 0x75, 0x5f, 0x9a, 0x85, 0x8a, 0x9b, 0x8f, 0x12, 0x27, 0x69, 0x76, 0x27, 0x0c, 0x7a, 0xb4, + 0x40, 0x34, 0x04, 0x33, 0x65, 0x71, 0x2e, 0x03, 0x43, 0x81, 0x84, 0xd5, 0xfb, 0x41, 0xc9, 0x69, + 0x7d, 0xf8, 0xbf, 0xbc, 0xa6, 0xe0, 0xff, 0x0a, 0x5a, 0x62, 0xee, 0x2e, 0x18, 0x93, 0xf6, 0x2f, + 0x31, 0xa5, 0xa8, 0x01, 0xfe, 0xaf, 0xa4, 0x0d, 0x4d, 0x25, 0x3f, 0xf4, 0xd9, 0xe9, 0xbe, 0xb9, + 0x8b, 0xa0, 0x77, 0xef, 0x74, 0xea, 0x03, 0x90, 0xc8, 0x61, 0x91, 0x87, 0x21, 0x91, 0xcf, 0x6b, + 0xca, 0xd4, 0xd8, 0xaf, 0x7e, 0xf2, 0xe8, 0x50, 0x9e, 0xfc, 0xa1, 0xf6, 0x35, 0xe4, 0xe6, 0xf3, + 0x0c, 0xfc, 0x20, 0x1c, 0x0a, 0xdd, 0x29, 0xc5, 0xf8, 0x42, 0x81, 0xe2, 0x8b, 0xc5, 0x2e, 0x7c, + 0xb1, 0x48, 0xf0, 0x4a, 0x96, 0x9f, 0x38, 0xe7, 0xf4, 0x90, 0x5d, 0xc6, 0x74, 0x2d, 0x70, 0xc2, + 0x9d, 0xcb, 0x3e, 0xc8, 0x78, 0xf3, 0xa1, 0xbc, 0x28, 0xe2, 0xc4, 0x3a, 0x9f, 0x2d, 0x30, 0x7c, + 0x21, 0x14, 0xbf, 0x25, 0x1d, 0xab, 0x8a, 0x2b, 0x04, 0x13, 0x52, 0xf0, 0x14, 0x2e, 0x86, 0x0a, + 0xd9, 0x09, 0x5c, 0x76, 0x2f, 0x7a, 0x0a, 0x97, 0x42, 0x79, 0xeb, 0x11, 0x97, 0xbe, 0x4a, 0xd9, + 0x93, 0x6c, 0x91, 0xcf, 0x9d, 0xd2, 0x0f, 0xf1, 0x1c, 0x15, 0x2a, 0x30, 0x33, 0x10, 0xe7, 0xca, + 0x16, 0x18, 0x20, 0xdf, 0x13, 0xd0, 0xdb, 0x4a, 0x1c, 0x99, 0x7d, 0x98, 0x09, 0x29, 0xf4, 0x14, + 0x12, 0x61, 0x2a, 0x0e, 0xcf, 0x6f, 0xdc, 0x78, 0x79, 0xba, 0xef, 0xc5, 0x97, 0xa7, 0xfb, 0xfe, + 0xe1, 0xe5, 0xe9, 0xbe, 0x1f, 0xbc, 0x3c, 0xad, 0xfc, 0xe8, 0xe5, 0x69, 0xe5, 0x27, 0x2f, 0x4f, + 0x2b, 0x3f, 0x7b, 0x79, 0x5a, 0x79, 0xe6, 0xe6, 0xb4, 0xf2, 0xfc, 0xcd, 0x69, 0xe5, 0xcb, 0x37, + 0xa7, 0x95, 0x6f, 0xdc, 0x9c, 0x56, 0x5e, 0xb8, 0x39, 0xad, 0xdc, 0xb8, 0x39, 0xdd, 0xf7, 0xe2, + 0xcd, 0xe9, 0xbe, 0x1f, 0xdc, 0x9c, 0x56, 0x7e, 0x74, 0x73, 0xba, 0xef, 0x27, 0x37, 0xa7, 0x95, + 0x9f, 0xdd, 0x9c, 0xee, 0x7b, 0xe6, 0x95, 0xe9, 0xbe, 0xe7, 0x5e, 0x99, 0xee, 0x7b, 0xfe, 0x95, + 0x69, 0xe5, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x03, 0x1e, 0xc6, 0x1e, 0xd9, 0x68, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -23679,6 +23684,9 @@ return dAtA } func (m *NidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -23707,6 +23715,9 @@ } func (m *NinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -23763,6 +23774,9 @@ } func (m *NidRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -23835,6 +23849,9 @@ } func (m *NinRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -23907,6 +23924,9 @@ } func (m *NidRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -23979,6 +23999,9 @@ } func (m *NinRepPackedNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24051,6 +24074,9 @@ } func (m *NidOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -24077,6 +24103,9 @@ } func (m *NinOptStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24121,6 +24150,9 @@ } func (m *NidRepStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24179,6 +24211,9 @@ } func (m *NinRepStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24237,6 +24272,9 @@ } func (m *NidEmbeddedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -24253,6 +24291,9 @@ } func (m *NinEmbeddedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -24273,6 +24314,9 @@ } func (m *NidNestedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Field1.Size() @@ -24290,6 +24334,9 @@ } func (m *NinNestedStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24309,6 +24356,9 @@ } func (m *NidOptCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Id.Size() @@ -24322,6 +24372,9 @@ } func (m *CustomDash) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != nil { @@ -24335,6 +24388,9 @@ } func (m *NinOptCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Id != nil { @@ -24352,6 +24408,9 @@ } func (m *NidRepCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Id) > 0 { @@ -24373,6 +24432,9 @@ } func (m *NinRepCustom) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Id) > 0 { @@ -24394,6 +24456,9 @@ } func (m *NinOptNativeUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24432,6 +24497,9 @@ } func (m *NinOptStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24472,6 +24540,9 @@ } func (m *NinEmbeddedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -24492,6 +24563,9 @@ } func (m *NinNestedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24513,6 +24587,9 @@ } func (m *Tree) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Or != nil { @@ -24534,6 +24611,9 @@ } func (m *OrBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -24547,6 +24627,9 @@ } func (m *AndBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -24560,6 +24643,9 @@ } func (m *Leaf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovThetest(uint64(m.Value)) @@ -24572,6 +24658,9 @@ } func (m *DeepTree) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Down != nil { @@ -24593,6 +24682,9 @@ } func (m *ADeepBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Down.Size() @@ -24604,6 +24696,9 @@ } func (m *AndDeepBranch) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Left.Size() @@ -24617,6 +24712,9 @@ } func (m *DeepLeaf) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Tree.Size() @@ -24628,6 +24726,9 @@ } func (m *Nil) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { @@ -24637,6 +24738,9 @@ } func (m *NidOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovThetest(uint64(m.Field1)) @@ -24647,6 +24751,9 @@ } func (m *NinOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24665,6 +24772,9 @@ } func (m *NidRepEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24689,6 +24799,9 @@ } func (m *NinRepEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -24713,6 +24826,9 @@ } func (m *NinOptEnumDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24731,6 +24847,9 @@ } func (m *AnotherNinOptEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24749,6 +24868,9 @@ } func (m *AnotherNinOptEnumDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24767,6 +24889,9 @@ } func (m *Timer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -24782,6 +24907,9 @@ } func (m *MyExtendable) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24795,6 +24923,9 @@ } func (m *OtherExtenable) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field2 != nil { @@ -24815,6 +24946,9 @@ } func (m *NestedDefinition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24838,6 +24972,9 @@ } func (m *NestedDefinition_NestedMessage) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NestedField1 != nil { @@ -24854,6 +24991,9 @@ } func (m *NestedDefinition_NestedMessage_NestedNestedMsg) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NestedNestedField1 != nil { @@ -24867,6 +25007,9 @@ } func (m *NestedScope) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.A != nil { @@ -24887,6 +25030,9 @@ } func (m *NinOptNativeDefault) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -24943,6 +25089,9 @@ } func (m *CustomContainer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.CustomStruct.Size() @@ -24954,6 +25103,9 @@ } func (m *CustomNameNidOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 @@ -24982,6 +25134,9 @@ } func (m *CustomNameNinOptNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -25038,6 +25193,9 @@ } func (m *CustomNameNinRepNative) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.FieldA) > 0 { @@ -25110,6 +25268,9 @@ } func (m *CustomNameNinStruct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -25156,6 +25317,9 @@ } func (m *CustomNameCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -25185,6 +25349,9 @@ } func (m *CustomNameNinEmbeddedStructUnion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.NidOptNative != nil { @@ -25205,6 +25372,9 @@ } func (m *CustomNameEnum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.FieldA != nil { @@ -25222,6 +25392,9 @@ } func (m *NoExtensionsMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25237,6 +25410,9 @@ } func (m *Unrecognized) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25247,6 +25423,9 @@ } func (m *UnrecognizedWithInner) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Embedded) > 0 { @@ -25266,6 +25445,9 @@ } func (m *UnrecognizedWithInner_Inner) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25275,6 +25457,9 @@ } func (m *UnrecognizedWithEmbed) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.UnrecognizedWithEmbed_Embedded.Size() @@ -25290,6 +25475,9 @@ } func (m *UnrecognizedWithEmbed_Embedded) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25299,6 +25487,9 @@ } func (m *Node) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Label != nil { @@ -25318,6 +25509,9 @@ } func (m *NonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25331,6 +25525,9 @@ } func (m *NidOptNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Field1.Size() @@ -25342,6 +25539,9 @@ } func (m *NinOptNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -25355,6 +25555,9 @@ } func (m *NidRepNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -25370,6 +25573,9 @@ } func (m *NinRepNonByteCustomType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field1) > 0 { @@ -25385,6 +25591,9 @@ } func (m *ProtoType) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field2 != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/typedecl/typedecl.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/typedecl/typedecl.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/typedecl/typedecl.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/typedecl/typedecl.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -547,6 +547,9 @@ return dAtA } func (m *Dropped) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -560,6 +563,9 @@ } func (m *DroppedWithoutGetters) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Height != 0 { @@ -572,6 +578,9 @@ } func (m *Kept) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/typedecl_all/typedeclall.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/typedecl_all/typedeclall.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/typedecl_all/typedeclall.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/typedecl_all/typedeclall.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -547,6 +547,9 @@ return dAtA } func (m *Dropped) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -560,6 +563,9 @@ } func (m *DroppedWithoutGetters) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Height != 0 { @@ -572,6 +578,9 @@ } func (m *Kept) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/both/types.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/both/types.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/both/types.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/both/types.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -49,7 +49,7 @@ func (m *KnownTypes) String() string { return proto.CompactTextString(m) } func (*KnownTypes) ProtoMessage() {} func (*KnownTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{0} + return fileDescriptor_types_6d7bfc155f665581, []int{0} } func (m *KnownTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -156,20 +156,38 @@ } type ProtoTypes struct { - NullableTimestamp *types.Timestamp `protobuf:"bytes,1,opt,name=nullableTimestamp" json:"nullableTimestamp,omitempty"` - NullableDuration *types.Duration `protobuf:"bytes,2,opt,name=nullableDuration" json:"nullableDuration,omitempty"` - Timestamp types.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp"` - Duration types.Duration `protobuf:"bytes,4,opt,name=duration" json:"duration"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableTimestamp *types.Timestamp `protobuf:"bytes,1,opt,name=nullableTimestamp" json:"nullableTimestamp,omitempty"` + NullableDuration *types.Duration `protobuf:"bytes,2,opt,name=nullableDuration" json:"nullableDuration,omitempty"` + NullableDouble *types.DoubleValue `protobuf:"bytes,3,opt,name=nullableDouble" json:"nullableDouble,omitempty"` + NullableFloat *types.FloatValue `protobuf:"bytes,4,opt,name=nullableFloat" json:"nullableFloat,omitempty"` + NullableInt64 *types.Int64Value `protobuf:"bytes,5,opt,name=nullableInt64" json:"nullableInt64,omitempty"` + NullableUInt64 *types.UInt64Value `protobuf:"bytes,6,opt,name=nullableUInt64" json:"nullableUInt64,omitempty"` + NullableInt32 *types.Int32Value `protobuf:"bytes,7,opt,name=nullableInt32" json:"nullableInt32,omitempty"` + NullableUInt32 *types.UInt32Value `protobuf:"bytes,8,opt,name=nullableUInt32" json:"nullableUInt32,omitempty"` + NullableBool *types.BoolValue `protobuf:"bytes,9,opt,name=nullableBool" json:"nullableBool,omitempty"` + NullableString *types.StringValue `protobuf:"bytes,10,opt,name=nullableString" json:"nullableString,omitempty"` + NullableBytes *types.BytesValue `protobuf:"bytes,11,opt,name=nullableBytes" json:"nullableBytes,omitempty"` + Timestamp types.Timestamp `protobuf:"bytes,12,opt,name=timestamp" json:"timestamp"` + Duration types.Duration `protobuf:"bytes,13,opt,name=duration" json:"duration"` + NonnullDouble types.DoubleValue `protobuf:"bytes,14,opt,name=nonnullDouble" json:"nonnullDouble"` + NonnullFloat types.FloatValue `protobuf:"bytes,15,opt,name=nonnullFloat" json:"nonnullFloat"` + NonnullInt64 types.Int64Value `protobuf:"bytes,16,opt,name=nonnullInt64" json:"nonnullInt64"` + NonnullUInt64 types.UInt64Value `protobuf:"bytes,17,opt,name=nonnullUInt64" json:"nonnullUInt64"` + NonnullInt32 types.Int32Value `protobuf:"bytes,18,opt,name=nonnullInt32" json:"nonnullInt32"` + NonnullUInt32 types.UInt32Value `protobuf:"bytes,19,opt,name=nonnullUInt32" json:"nonnullUInt32"` + NonnullBool types.BoolValue `protobuf:"bytes,20,opt,name=nonnullBool" json:"nonnullBool"` + NonnullString types.StringValue `protobuf:"bytes,21,opt,name=nonnullString" json:"nonnullString"` + NonnullBytes types.BytesValue `protobuf:"bytes,22,opt,name=nonnullBytes" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProtoTypes) Reset() { *m = ProtoTypes{} } func (m *ProtoTypes) String() string { return proto.CompactTextString(m) } func (*ProtoTypes) ProtoMessage() {} func (*ProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{1} + return fileDescriptor_types_6d7bfc155f665581, []int{1} } func (m *ProtoTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -212,6 +230,69 @@ return nil } +func (m *ProtoTypes) GetNullableDouble() *types.DoubleValue { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *ProtoTypes) GetNullableFloat() *types.FloatValue { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *ProtoTypes) GetNullableInt64() *types.Int64Value { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *ProtoTypes) GetNullableUInt64() *types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *ProtoTypes) GetNullableInt32() *types.Int32Value { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *ProtoTypes) GetNullableUInt32() *types.UInt32Value { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *ProtoTypes) GetNullableBool() *types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *ProtoTypes) GetNullableString() *types.StringValue { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *ProtoTypes) GetNullableBytes() *types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + func (m *ProtoTypes) GetTimestamp() types.Timestamp { if m != nil { return m.Timestamp @@ -226,11 +307,92 @@ return types.Duration{} } +func (m *ProtoTypes) GetNonnullDouble() types.DoubleValue { + if m != nil { + return m.NonnullDouble + } + return types.DoubleValue{} +} + +func (m *ProtoTypes) GetNonnullFloat() types.FloatValue { + if m != nil { + return m.NonnullFloat + } + return types.FloatValue{} +} + +func (m *ProtoTypes) GetNonnullInt64() types.Int64Value { + if m != nil { + return m.NonnullInt64 + } + return types.Int64Value{} +} + +func (m *ProtoTypes) GetNonnullUInt64() types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return types.UInt64Value{} +} + +func (m *ProtoTypes) GetNonnullInt32() types.Int32Value { + if m != nil { + return m.NonnullInt32 + } + return types.Int32Value{} +} + +func (m *ProtoTypes) GetNonnullUInt32() types.UInt32Value { + if m != nil { + return m.NonnullUInt32 + } + return types.UInt32Value{} +} + +func (m *ProtoTypes) GetNonnullBool() types.BoolValue { + if m != nil { + return m.NonnullBool + } + return types.BoolValue{} +} + +func (m *ProtoTypes) GetNonnullString() types.StringValue { + if m != nil { + return m.NonnullString + } + return types.StringValue{} +} + +func (m *ProtoTypes) GetNonnullBytes() types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return types.BytesValue{} +} + type StdTypes struct { NullableTimestamp *time.Time `protobuf:"bytes,1,opt,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty"` NullableDuration *time.Duration `protobuf:"bytes,2,opt,name=nullableDuration,stdduration" json:"nullableDuration,omitempty"` - Timestamp time.Time `protobuf:"bytes,3,opt,name=timestamp,stdtime" json:"timestamp"` - Duration time.Duration `protobuf:"bytes,4,opt,name=duration,stdduration" json:"duration"` + NullableDouble *float64 `protobuf:"bytes,3,opt,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NullableFloat *float32 `protobuf:"bytes,4,opt,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NullableInt64 *int64 `protobuf:"bytes,5,opt,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NullableUInt64 *uint64 `protobuf:"bytes,6,opt,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NullableInt32 *int32 `protobuf:"bytes,7,opt,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NullableUInt32 *uint32 `protobuf:"bytes,8,opt,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NullableBool *bool `protobuf:"bytes,9,opt,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NullableString *string `protobuf:"bytes,10,opt,name=nullableString,wktptr" json:"nullableString,omitempty"` + NullableBytes *[]byte `protobuf:"bytes,11,opt,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + Timestamp time.Time `protobuf:"bytes,12,opt,name=timestamp,stdtime" json:"timestamp"` + Duration time.Duration `protobuf:"bytes,13,opt,name=duration,stdduration" json:"duration"` + NonnullDouble float64 `protobuf:"bytes,14,opt,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NonnullFloat float32 `protobuf:"bytes,15,opt,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NonnullInt64 int64 `protobuf:"bytes,16,opt,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NonnullUInt64 uint64 `protobuf:"bytes,17,opt,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NonnullInt32 int32 `protobuf:"bytes,18,opt,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NonnullUInt32 uint32 `protobuf:"bytes,19,opt,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NonnullBool bool `protobuf:"bytes,20,opt,name=nonnullBool,wktptr" json:"nonnullBool"` + NonnullString string `protobuf:"bytes,21,opt,name=nonnullString,wktptr" json:"nonnullString"` + NonnullBytes []byte `protobuf:"bytes,22,opt,name=nonnullBytes,wktptr" json:"nonnullBytes"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -240,7 +402,7 @@ func (m *StdTypes) String() string { return proto.CompactTextString(m) } func (*StdTypes) ProtoMessage() {} func (*StdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{2} + return fileDescriptor_types_6d7bfc155f665581, []int{2} } func (m *StdTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -283,6 +445,69 @@ return nil } +func (m *StdTypes) GetNullableDouble() *float64 { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *StdTypes) GetNullableFloat() *float32 { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *StdTypes) GetNullableInt64() *int64 { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *StdTypes) GetNullableUInt64() *uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *StdTypes) GetNullableInt32() *int32 { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *StdTypes) GetNullableUInt32() *uint32 { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *StdTypes) GetNullableBool() *bool { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *StdTypes) GetNullableString() *string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *StdTypes) GetNullableBytes() *[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + func (m *StdTypes) GetTimestamp() time.Time { if m != nil { return m.Timestamp @@ -297,21 +522,102 @@ return 0 } +func (m *StdTypes) GetNonnullDouble() float64 { + if m != nil { + return m.NonnullDouble + } + return 0 +} + +func (m *StdTypes) GetNonnullFloat() float32 { + if m != nil { + return m.NonnullFloat + } + return 0 +} + +func (m *StdTypes) GetNonnullInt64() int64 { + if m != nil { + return m.NonnullInt64 + } + return 0 +} + +func (m *StdTypes) GetNonnullUInt64() uint64 { + if m != nil { + return m.NonnullUInt64 + } + return 0 +} + +func (m *StdTypes) GetNonnullInt32() int32 { + if m != nil { + return m.NonnullInt32 + } + return 0 +} + +func (m *StdTypes) GetNonnullUInt32() uint32 { + if m != nil { + return m.NonnullUInt32 + } + return 0 +} + +func (m *StdTypes) GetNonnullBool() bool { + if m != nil { + return m.NonnullBool + } + return false +} + +func (m *StdTypes) GetNonnullString() string { + if m != nil { + return m.NonnullString + } + return "" +} + +func (m *StdTypes) GetNonnullBytes() []byte { + if m != nil { + return m.NonnullBytes + } + return []byte{} +} + type RepProtoTypes struct { - NullableTimestamps []*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamps" json:"nullableTimestamps,omitempty"` - NullableDurations []*types.Duration `protobuf:"bytes,2,rep,name=nullableDurations" json:"nullableDurations,omitempty"` - Timestamps []types.Timestamp `protobuf:"bytes,3,rep,name=timestamps" json:"timestamps"` - Durations []types.Duration `protobuf:"bytes,4,rep,name=durations" json:"durations"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableTimestamps []*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamps" json:"nullableTimestamps,omitempty"` + NullableDurations []*types.Duration `protobuf:"bytes,2,rep,name=nullableDurations" json:"nullableDurations,omitempty"` + Timestamps []types.Timestamp `protobuf:"bytes,3,rep,name=timestamps" json:"timestamps"` + Durations []types.Duration `protobuf:"bytes,4,rep,name=durations" json:"durations"` + NullableDouble []*types.DoubleValue `protobuf:"bytes,5,rep,name=nullableDouble" json:"nullableDouble,omitempty"` + NonnullDouble []types.DoubleValue `protobuf:"bytes,6,rep,name=nonnullDouble" json:"nonnullDouble"` + NullableFloat []*types.FloatValue `protobuf:"bytes,7,rep,name=nullableFloat" json:"nullableFloat,omitempty"` + NonnullFloat []types.FloatValue `protobuf:"bytes,8,rep,name=nonnullFloat" json:"nonnullFloat"` + NullableInt64 []*types.Int64Value `protobuf:"bytes,9,rep,name=nullableInt64" json:"nullableInt64,omitempty"` + NonnullInt64 []types.Int64Value `protobuf:"bytes,10,rep,name=nonnullInt64" json:"nonnullInt64"` + NullableUInt64 []*types.UInt64Value `protobuf:"bytes,11,rep,name=nullableUInt64" json:"nullableUInt64,omitempty"` + NonnullUInt64 []types.UInt64Value `protobuf:"bytes,12,rep,name=nonnullUInt64" json:"nonnullUInt64"` + NullableInt32 []*types.Int32Value `protobuf:"bytes,13,rep,name=nullableInt32" json:"nullableInt32,omitempty"` + NonnullInt32 []types.Int32Value `protobuf:"bytes,14,rep,name=nonnullInt32" json:"nonnullInt32"` + NullableUInt32 []*types.UInt32Value `protobuf:"bytes,15,rep,name=nullableUInt32" json:"nullableUInt32,omitempty"` + NonnullUInt32 []types.UInt32Value `protobuf:"bytes,16,rep,name=nonnullUInt32" json:"nonnullUInt32"` + NullableBool []*types.BoolValue `protobuf:"bytes,17,rep,name=nullableBool" json:"nullableBool,omitempty"` + NonnullBool []types.BoolValue `protobuf:"bytes,18,rep,name=nonnullBool" json:"nonnullBool"` + NullableString []*types.StringValue `protobuf:"bytes,19,rep,name=nullableString" json:"nullableString,omitempty"` + NonnullString []types.StringValue `protobuf:"bytes,20,rep,name=nonnullString" json:"nonnullString"` + NullableBytes []*types.BytesValue `protobuf:"bytes,21,rep,name=nullableBytes" json:"nullableBytes,omitempty"` + NonnullBytes []types.BytesValue `protobuf:"bytes,22,rep,name=nonnullBytes" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RepProtoTypes) Reset() { *m = RepProtoTypes{} } func (m *RepProtoTypes) String() string { return proto.CompactTextString(m) } func (*RepProtoTypes) ProtoMessage() {} func (*RepProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{3} + return fileDescriptor_types_6d7bfc155f665581, []int{3} } func (m *RepProtoTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -368,99 +674,172 @@ return nil } -type RepStdTypes struct { - NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` - NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` - Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` - Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableDouble() []*types.DoubleValue { + if m != nil { + return m.NullableDouble + } + return nil } -func (m *RepStdTypes) Reset() { *m = RepStdTypes{} } -func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } -func (*RepStdTypes) ProtoMessage() {} -func (*RepStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{4} +func (m *RepProtoTypes) GetNonnullDouble() []types.DoubleValue { + if m != nil { + return m.NonnullDouble + } + return nil } -func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (m *RepProtoTypes) GetNullableFloat() []*types.FloatValue { + if m != nil { + return m.NullableFloat + } + return nil } -func (m *RepStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RepStdTypes.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + +func (m *RepProtoTypes) GetNonnullFloat() []types.FloatValue { + if m != nil { + return m.NonnullFloat } + return nil } -func (dst *RepStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepStdTypes.Merge(dst, src) + +func (m *RepProtoTypes) GetNullableInt64() []*types.Int64Value { + if m != nil { + return m.NullableInt64 + } + return nil } -func (m *RepStdTypes) XXX_Size() int { - return m.Size() + +func (m *RepProtoTypes) GetNonnullInt64() []types.Int64Value { + if m != nil { + return m.NonnullInt64 + } + return nil } -func (m *RepStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_RepStdTypes.DiscardUnknown(m) + +func (m *RepProtoTypes) GetNullableUInt64() []*types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil } -var xxx_messageInfo_RepStdTypes proto.InternalMessageInfo +func (m *RepProtoTypes) GetNonnullUInt64() []types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return nil +} -func (m *RepStdTypes) GetNullableTimestamps() []*time.Time { +func (m *RepProtoTypes) GetNullableInt32() []*types.Int32Value { if m != nil { - return m.NullableTimestamps + return m.NullableInt32 } return nil } -func (m *RepStdTypes) GetNullableDurations() []*time.Duration { +func (m *RepProtoTypes) GetNonnullInt32() []types.Int32Value { if m != nil { - return m.NullableDurations + return m.NonnullInt32 } return nil } -func (m *RepStdTypes) GetTimestamps() []time.Time { +func (m *RepProtoTypes) GetNullableUInt32() []*types.UInt32Value { if m != nil { - return m.Timestamps + return m.NullableUInt32 } return nil } -func (m *RepStdTypes) GetDurations() []time.Duration { +func (m *RepProtoTypes) GetNonnullUInt32() []types.UInt32Value { if m != nil { - return m.Durations + return m.NonnullUInt32 } return nil } -type MapProtoTypes struct { - NullableTimestamp map[int32]*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamp" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Timestamp map[int32]types.Timestamp `protobuf:"bytes,2,rep,name=timestamp" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - NullableDuration map[int32]*types.Duration `protobuf:"bytes,3,rep,name=nullableDuration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Duration map[int32]types.Duration `protobuf:"bytes,4,rep,name=duration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableBool() []*types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil } -func (m *MapProtoTypes) Reset() { *m = MapProtoTypes{} } -func (m *MapProtoTypes) String() string { return proto.CompactTextString(m) } -func (*MapProtoTypes) ProtoMessage() {} -func (*MapProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{5} +func (m *RepProtoTypes) GetNonnullBool() []types.BoolValue { + if m != nil { + return m.NonnullBool + } + return nil } -func (m *MapProtoTypes) XXX_Unmarshal(b []byte) error { + +func (m *RepProtoTypes) GetNullableString() []*types.StringValue { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *RepProtoTypes) GetNonnullString() []types.StringValue { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *RepProtoTypes) GetNullableBytes() []*types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *RepProtoTypes) GetNonnullBytes() []types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type RepStdTypes struct { + NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` + NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` + Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` + Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` + NullableDouble []*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NonnullDouble []float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NullableFloat []*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NonnullFloat []float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NullableInt64 []*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NonnullInt64 []int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NullableUInt64 []*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NonnullUInt64 []uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NullableInt32 []*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NonnullInt32 []int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NullableUInt32 []*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NonnullUInt32 []uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NullableBool []*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NonnullBool []bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool"` + NullableString []*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty"` + NonnullString []string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString"` + NullableBytes []*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + NonnullBytes [][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RepStdTypes) Reset() { *m = RepStdTypes{} } +func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } +func (*RepStdTypes) ProtoMessage() {} +func (*RepStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6d7bfc155f665581, []int{4} +} +func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MapProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *RepStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MapProtoTypes.Marshal(b, m, deterministic) + return xxx_messageInfo_RepStdTypes.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -470,139 +849,212 @@ return b[:n], nil } } -func (dst *MapProtoTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MapProtoTypes.Merge(dst, src) +func (dst *RepStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepStdTypes.Merge(dst, src) } -func (m *MapProtoTypes) XXX_Size() int { +func (m *RepStdTypes) XXX_Size() int { return m.Size() } -func (m *MapProtoTypes) XXX_DiscardUnknown() { - xxx_messageInfo_MapProtoTypes.DiscardUnknown(m) +func (m *RepStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_RepStdTypes.DiscardUnknown(m) } -var xxx_messageInfo_MapProtoTypes proto.InternalMessageInfo +var xxx_messageInfo_RepStdTypes proto.InternalMessageInfo -func (m *MapProtoTypes) GetNullableTimestamp() map[int32]*types.Timestamp { +func (m *RepStdTypes) GetNullableTimestamps() []*time.Time { if m != nil { - return m.NullableTimestamp + return m.NullableTimestamps } return nil } -func (m *MapProtoTypes) GetTimestamp() map[int32]types.Timestamp { +func (m *RepStdTypes) GetNullableDurations() []*time.Duration { if m != nil { - return m.Timestamp + return m.NullableDurations } return nil } -func (m *MapProtoTypes) GetNullableDuration() map[int32]*types.Duration { +func (m *RepStdTypes) GetTimestamps() []time.Time { if m != nil { - return m.NullableDuration + return m.Timestamps } return nil } -func (m *MapProtoTypes) GetDuration() map[int32]types.Duration { +func (m *RepStdTypes) GetDurations() []time.Duration { if m != nil { - return m.Duration + return m.Durations } return nil } -type MapStdTypes struct { - NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepStdTypes) GetNullableDouble() []*float64 { + if m != nil { + return m.NullableDouble + } + return nil } -func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } -func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } -func (*MapStdTypes) ProtoMessage() {} -func (*MapStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{6} +func (m *RepStdTypes) GetNonnullDouble() []float64 { + if m != nil { + return m.NonnullDouble + } + return nil } -func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (m *RepStdTypes) GetNullableFloat() []*float32 { + if m != nil { + return m.NullableFloat + } + return nil } -func (m *MapStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MapStdTypes.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + +func (m *RepStdTypes) GetNonnullFloat() []float32 { + if m != nil { + return m.NonnullFloat } + return nil } -func (dst *MapStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MapStdTypes.Merge(dst, src) + +func (m *RepStdTypes) GetNullableInt64() []*int64 { + if m != nil { + return m.NullableInt64 + } + return nil } -func (m *MapStdTypes) XXX_Size() int { - return m.Size() + +func (m *RepStdTypes) GetNonnullInt64() []int64 { + if m != nil { + return m.NonnullInt64 + } + return nil } -func (m *MapStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_MapStdTypes.DiscardUnknown(m) + +func (m *RepStdTypes) GetNullableUInt64() []*uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil } -var xxx_messageInfo_MapStdTypes proto.InternalMessageInfo +func (m *RepStdTypes) GetNonnullUInt64() []uint64 { + if m != nil { + return m.NonnullUInt64 + } + return nil +} -func (m *MapStdTypes) GetNullableTimestamp() map[int32]*time.Time { +func (m *RepStdTypes) GetNullableInt32() []*int32 { if m != nil { - return m.NullableTimestamp + return m.NullableInt32 } return nil } -func (m *MapStdTypes) GetTimestamp() map[int32]time.Time { +func (m *RepStdTypes) GetNonnullInt32() []int32 { if m != nil { - return m.Timestamp + return m.NonnullInt32 } return nil } -func (m *MapStdTypes) GetNullableDuration() map[int32]*time.Duration { +func (m *RepStdTypes) GetNullableUInt32() []*uint32 { if m != nil { - return m.NullableDuration + return m.NullableUInt32 } return nil } -func (m *MapStdTypes) GetDuration() map[int32]time.Duration { +func (m *RepStdTypes) GetNonnullUInt32() []uint32 { if m != nil { - return m.Duration + return m.NonnullUInt32 } return nil } -type OneofProtoTypes struct { - // Types that are valid to be assigned to OneOfProtoTimes: - // *OneofProtoTypes_Timestamp - // *OneofProtoTypes_Duration - OneOfProtoTimes isOneofProtoTypes_OneOfProtoTimes `protobuf_oneof:"OneOfProtoTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepStdTypes) GetNullableBool() []*bool { + if m != nil { + return m.NullableBool + } + return nil } -func (m *OneofProtoTypes) Reset() { *m = OneofProtoTypes{} } -func (m *OneofProtoTypes) String() string { return proto.CompactTextString(m) } -func (*OneofProtoTypes) ProtoMessage() {} -func (*OneofProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{7} +func (m *RepStdTypes) GetNonnullBool() []bool { + if m != nil { + return m.NonnullBool + } + return nil } -func (m *OneofProtoTypes) XXX_Unmarshal(b []byte) error { + +func (m *RepStdTypes) GetNullableString() []*string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *RepStdTypes) GetNonnullString() []string { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *RepStdTypes) GetNullableBytes() []*[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *RepStdTypes) GetNonnullBytes() [][]byte { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type MapProtoTypes struct { + NullableTimestamp map[int32]*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamp" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Timestamp map[int32]types.Timestamp `protobuf:"bytes,2,rep,name=timestamp" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDuration map[int32]*types.Duration `protobuf:"bytes,3,rep,name=nullableDuration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Duration map[int32]types.Duration `protobuf:"bytes,4,rep,name=duration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*types.DoubleValue `protobuf:"bytes,5,rep,name=nullableDouble" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]types.DoubleValue `protobuf:"bytes,6,rep,name=nonnullDouble" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*types.FloatValue `protobuf:"bytes,7,rep,name=nullableFloat" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]types.FloatValue `protobuf:"bytes,8,rep,name=nonnullFloat" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*types.Int64Value `protobuf:"bytes,9,rep,name=nullableInt64" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]types.Int64Value `protobuf:"bytes,10,rep,name=nonnullInt64" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*types.UInt64Value `protobuf:"bytes,11,rep,name=nullableUInt64" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]types.UInt64Value `protobuf:"bytes,12,rep,name=nonnullUInt64" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*types.Int32Value `protobuf:"bytes,13,rep,name=nullableInt32" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]types.Int32Value `protobuf:"bytes,14,rep,name=nonnullInt32" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*types.UInt32Value `protobuf:"bytes,15,rep,name=nullableUInt32" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]types.UInt32Value `protobuf:"bytes,16,rep,name=nonnullUInt32" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*types.BoolValue `protobuf:"bytes,17,rep,name=nullableBool" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]types.BoolValue `protobuf:"bytes,18,rep,name=nonnullBool" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*types.StringValue `protobuf:"bytes,19,rep,name=nullableString" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]types.StringValue `protobuf:"bytes,20,rep,name=nonnullString" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*types.BytesValue `protobuf:"bytes,21,rep,name=nullableBytes" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32]types.BytesValue `protobuf:"bytes,22,rep,name=nonnullBytes" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MapProtoTypes) Reset() { *m = MapProtoTypes{} } +func (m *MapProtoTypes) String() string { return proto.CompactTextString(m) } +func (*MapProtoTypes) ProtoMessage() {} +func (*MapProtoTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6d7bfc155f665581, []int{5} +} +func (m *MapProtoTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *OneofProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MapProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_OneofProtoTypes.Marshal(b, m, deterministic) + return xxx_messageInfo_MapProtoTypes.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -612,153 +1064,212 @@ return b[:n], nil } } -func (dst *OneofProtoTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofProtoTypes.Merge(dst, src) +func (dst *MapProtoTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MapProtoTypes.Merge(dst, src) } -func (m *OneofProtoTypes) XXX_Size() int { +func (m *MapProtoTypes) XXX_Size() int { return m.Size() } -func (m *OneofProtoTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofProtoTypes.DiscardUnknown(m) +func (m *MapProtoTypes) XXX_DiscardUnknown() { + xxx_messageInfo_MapProtoTypes.DiscardUnknown(m) } -var xxx_messageInfo_OneofProtoTypes proto.InternalMessageInfo +var xxx_messageInfo_MapProtoTypes proto.InternalMessageInfo -type isOneofProtoTypes_OneOfProtoTimes interface { - isOneofProtoTypes_OneOfProtoTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - MarshalTo([]byte) (int, error) - Size() int +func (m *MapProtoTypes) GetNullableTimestamp() map[int32]*types.Timestamp { + if m != nil { + return m.NullableTimestamp + } + return nil } -type OneofProtoTypes_Timestamp struct { - Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,oneof"` +func (m *MapProtoTypes) GetTimestamp() map[int32]types.Timestamp { + if m != nil { + return m.Timestamp + } + return nil } -type OneofProtoTypes_Duration struct { - Duration *types.Duration `protobuf:"bytes,2,opt,name=duration,oneof"` + +func (m *MapProtoTypes) GetNullableDuration() map[int32]*types.Duration { + if m != nil { + return m.NullableDuration + } + return nil } -func (*OneofProtoTypes_Timestamp) isOneofProtoTypes_OneOfProtoTimes() {} -func (*OneofProtoTypes_Duration) isOneofProtoTypes_OneOfProtoTimes() {} +func (m *MapProtoTypes) GetDuration() map[int32]types.Duration { + if m != nil { + return m.Duration + } + return nil +} -func (m *OneofProtoTypes) GetOneOfProtoTimes() isOneofProtoTypes_OneOfProtoTimes { +func (m *MapProtoTypes) GetNullableDouble() map[int32]*types.DoubleValue { if m != nil { - return m.OneOfProtoTimes + return m.NullableDouble } return nil } -func (m *OneofProtoTypes) GetTimestamp() *types.Timestamp { - if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Timestamp); ok { - return x.Timestamp +func (m *MapProtoTypes) GetNonnullDouble() map[int32]types.DoubleValue { + if m != nil { + return m.NonnullDouble } return nil } -func (m *OneofProtoTypes) GetDuration() *types.Duration { - if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Duration); ok { - return x.Duration +func (m *MapProtoTypes) GetNullableFloat() map[int32]*types.FloatValue { + if m != nil { + return m.NullableFloat } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofProtoTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofProtoTypes_OneofMarshaler, _OneofProtoTypes_OneofUnmarshaler, _OneofProtoTypes_OneofSizer, []interface{}{ - (*OneofProtoTypes_Timestamp)(nil), - (*OneofProtoTypes_Duration)(nil), +func (m *MapProtoTypes) GetNonnullFloat() map[int32]types.FloatValue { + if m != nil { + return m.NonnullFloat } + return nil } -func _OneofProtoTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofProtoTypes) - // OneOfProtoTimes - switch x := m.OneOfProtoTimes.(type) { - case *OneofProtoTypes_Timestamp: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Timestamp); err != nil { - return err - } - case *OneofProtoTypes_Duration: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Duration); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("OneofProtoTypes.OneOfProtoTimes has unexpected type %T", x) +func (m *MapProtoTypes) GetNullableInt64() map[int32]*types.Int64Value { + if m != nil { + return m.NullableInt64 } return nil } -func _OneofProtoTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofProtoTypes) - switch tag { - case 1: // OneOfProtoTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Timestamp) - err := b.DecodeMessage(msg) - m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{msg} - return true, err - case 2: // OneOfProtoTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Duration) - err := b.DecodeMessage(msg) - m.OneOfProtoTimes = &OneofProtoTypes_Duration{msg} - return true, err - default: - return false, nil +func (m *MapProtoTypes) GetNonnullInt64() map[int32]types.Int64Value { + if m != nil { + return m.NonnullInt64 } + return nil } -func _OneofProtoTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofProtoTypes) - // OneOfProtoTimes - switch x := m.OneOfProtoTimes.(type) { - case *OneofProtoTypes_Timestamp: - s := proto.Size(x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofProtoTypes_Duration: - s := proto.Size(x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *MapProtoTypes) GetNullableUInt64() map[int32]*types.UInt64Value { + if m != nil { + return m.NullableUInt64 } - return n + return nil } -type OneofStdTypes struct { - // Types that are valid to be assigned to OneOfStdTimes: - // *OneofStdTypes_Timestamp - // *OneofStdTypes_Duration - OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *MapProtoTypes) GetNonnullUInt64() map[int32]types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return nil } -func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } -func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } -func (*OneofStdTypes) ProtoMessage() {} -func (*OneofStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_d941a2fa3776b329, []int{8} +func (m *MapProtoTypes) GetNullableInt32() map[int32]*types.Int32Value { + if m != nil { + return m.NullableInt32 + } + return nil } -func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { + +func (m *MapProtoTypes) GetNonnullInt32() map[int32]types.Int32Value { + if m != nil { + return m.NonnullInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNullableUInt32() map[int32]*types.UInt32Value { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNonnullUInt32() map[int32]types.UInt32Value { + if m != nil { + return m.NonnullUInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNullableBool() map[int32]*types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *MapProtoTypes) GetNonnullBool() map[int32]types.BoolValue { + if m != nil { + return m.NonnullBool + } + return nil +} + +func (m *MapProtoTypes) GetNullableString() map[int32]*types.StringValue { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *MapProtoTypes) GetNonnullString() map[int32]types.StringValue { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *MapProtoTypes) GetNullableBytes() map[int32]*types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *MapProtoTypes) GetNonnullBytes() map[int32]types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type MapStdTypes struct { + NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } +func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } +func (*MapStdTypes) ProtoMessage() {} +func (*MapStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6d7bfc155f665581, []int{6} +} +func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MapStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) + return xxx_messageInfo_MapStdTypes.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -768,1379 +1279,1639 @@ return b[:n], nil } } -func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofStdTypes.Merge(dst, src) +func (dst *MapStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MapStdTypes.Merge(dst, src) } -func (m *OneofStdTypes) XXX_Size() int { +func (m *MapStdTypes) XXX_Size() int { return m.Size() } -func (m *OneofStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +func (m *MapStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_MapStdTypes.DiscardUnknown(m) } -var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo +var xxx_messageInfo_MapStdTypes proto.InternalMessageInfo -type isOneofStdTypes_OneOfStdTimes interface { - isOneofStdTypes_OneOfStdTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - MarshalTo([]byte) (int, error) - Size() int +func (m *MapStdTypes) GetNullableTimestamp() map[int32]*time.Time { + if m != nil { + return m.NullableTimestamp + } + return nil } -type OneofStdTypes_Timestamp struct { - Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` +func (m *MapStdTypes) GetTimestamp() map[int32]time.Time { + if m != nil { + return m.Timestamp + } + return nil } -type OneofStdTypes_Duration struct { - Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` + +func (m *MapStdTypes) GetNullableDuration() map[int32]*time.Duration { + if m != nil { + return m.NullableDuration + } + return nil } -func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} -func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} +func (m *MapStdTypes) GetDuration() map[int32]time.Duration { + if m != nil { + return m.Duration + } + return nil +} -func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { +func (m *MapStdTypes) GetNullableDouble() map[int32]*float64 { if m != nil { - return m.OneOfStdTimes + return m.NullableDouble } return nil } -func (m *OneofStdTypes) GetTimestamp() *time.Time { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { - return x.Timestamp +func (m *MapStdTypes) GetNonnullDouble() map[int32]float64 { + if m != nil { + return m.NonnullDouble } return nil } -func (m *OneofStdTypes) GetDuration() *time.Duration { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { - return x.Duration +func (m *MapStdTypes) GetNullableFloat() map[int32]*float32 { + if m != nil { + return m.NullableFloat } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ - (*OneofStdTypes_Timestamp)(nil), - (*OneofStdTypes_Duration)(nil), +func (m *MapStdTypes) GetNonnullFloat() map[int32]float32 { + if m != nil { + return m.NonnullFloat } + return nil } -func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - dAtA, err := github_com_gogo_protobuf_types.StdTimeMarshal(*x.Timestamp) - if err != nil { - return err - } - if err := b.EncodeRawBytes(dAtA); err != nil { - return err - } - case *OneofStdTypes_Duration: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - dAtA, err := github_com_gogo_protobuf_types.StdDurationMarshal(*x.Duration) - if err != nil { - return err - } - if err := b.EncodeRawBytes(dAtA); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) +func (m *MapStdTypes) GetNullableInt64() map[int32]*int64 { + if m != nil { + return m.NullableInt64 } return nil } -func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofStdTypes) - switch tag { - case 1: // OneOfStdTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err - } - c := new(time.Time) - if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { - return true, err - } - m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} - return true, err - case 2: // OneOfStdTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err - } - c := new(time.Duration) - if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { - return true, err - } - m.OneOfStdTimes = &OneofStdTypes_Duration{c} - return true, err - default: - return false, nil +func (m *MapStdTypes) GetNonnullInt64() map[int32]int64 { + if m != nil { + return m.NonnullInt64 } + return nil } -func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofStdTypes_Duration: - s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *MapStdTypes) GetNullableUInt64() map[int32]*uint64 { + if m != nil { + return m.NullableUInt64 } - return n + return nil } -func init() { - proto.RegisterType((*KnownTypes)(nil), "types.KnownTypes") - proto.RegisterType((*ProtoTypes)(nil), "types.ProtoTypes") - proto.RegisterType((*StdTypes)(nil), "types.StdTypes") - proto.RegisterType((*RepProtoTypes)(nil), "types.RepProtoTypes") - proto.RegisterType((*RepStdTypes)(nil), "types.RepStdTypes") - proto.RegisterType((*MapProtoTypes)(nil), "types.MapProtoTypes") - proto.RegisterMapType((map[int32]types.Duration)(nil), "types.MapProtoTypes.DurationEntry") - proto.RegisterMapType((map[int32]*types.Duration)(nil), "types.MapProtoTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*types.Timestamp)(nil), "types.MapProtoTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]types.Timestamp)(nil), "types.MapProtoTypes.TimestampEntry") - proto.RegisterType((*MapStdTypes)(nil), "types.MapStdTypes") - proto.RegisterMapType((map[int32]time.Duration)(nil), "types.MapStdTypes.DurationEntry") - proto.RegisterMapType((map[int32]*time.Duration)(nil), "types.MapStdTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*time.Time)(nil), "types.MapStdTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]time.Time)(nil), "types.MapStdTypes.TimestampEntry") - proto.RegisterType((*OneofProtoTypes)(nil), "types.OneofProtoTypes") - proto.RegisterType((*OneofStdTypes)(nil), "types.OneofStdTypes") -} -func (this *KnownTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 +func (m *MapStdTypes) GetNonnullUInt64() map[int32]uint64 { + if m != nil { + return m.NonnullUInt64 } + return nil +} - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return 1 - } +func (m *MapStdTypes) GetNullableInt32() map[int32]*int32 { + if m != nil { + return m.NullableInt32 } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 + return nil +} + +func (m *MapStdTypes) GetNonnullInt32() map[int32]int32 { + if m != nil { + return m.NonnullInt32 } - if c := this.Dur.Compare(that1.Dur); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNullableUInt32() map[int32]*uint32 { + if m != nil { + return m.NullableUInt32 } - if c := this.Ts.Compare(that1.Ts); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullUInt32() map[int32]uint32 { + if m != nil { + return m.NonnullUInt32 } - if c := this.Dbl.Compare(that1.Dbl); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNullableBool() map[int32]*bool { + if m != nil { + return m.NullableBool } - if c := this.Flt.Compare(that1.Flt); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullBool() map[int32]bool { + if m != nil { + return m.NonnullBool } - if c := this.I64.Compare(that1.I64); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNullableString() map[int32]*string { + if m != nil { + return m.NullableString } - if c := this.U64.Compare(that1.U64); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullString() map[int32]string { + if m != nil { + return m.NonnullString } - if c := this.I32.Compare(that1.I32); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNullableBytes() map[int32]*[]byte { + if m != nil { + return m.NullableBytes } - if c := this.U32.Compare(that1.U32); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullBytes() map[int32][]byte { + if m != nil { + return m.NonnullBytes } - if c := this.Bool.Compare(that1.Bool); c != 0 { - return c + return nil +} + +type OneofProtoTypes struct { + // Types that are valid to be assigned to OneOfProtoTimes: + // *OneofProtoTypes_Timestamp + // *OneofProtoTypes_Duration + // *OneofProtoTypes_RepDouble + // *OneofProtoTypes_RepFloat + // *OneofProtoTypes_RepInt64 + // *OneofProtoTypes_RepUInt64 + // *OneofProtoTypes_RepInt32 + // *OneofProtoTypes_RepUInt32 + // *OneofProtoTypes_RepBool + // *OneofProtoTypes_RepString + // *OneofProtoTypes_RepBytes + OneOfProtoTimes isOneofProtoTypes_OneOfProtoTimes `protobuf_oneof:"OneOfProtoTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofProtoTypes) Reset() { *m = OneofProtoTypes{} } +func (m *OneofProtoTypes) String() string { return proto.CompactTextString(m) } +func (*OneofProtoTypes) ProtoMessage() {} +func (*OneofProtoTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6d7bfc155f665581, []int{7} +} +func (m *OneofProtoTypes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OneofProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OneofProtoTypes.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil } - if c := this.Str.Compare(that1.Str); c != 0 { - return c +} +func (dst *OneofProtoTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofProtoTypes.Merge(dst, src) +} +func (m *OneofProtoTypes) XXX_Size() int { + return m.Size() +} +func (m *OneofProtoTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofProtoTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofProtoTypes proto.InternalMessageInfo + +type isOneofProtoTypes_OneOfProtoTimes interface { + isOneofProtoTypes_OneOfProtoTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + MarshalTo([]byte) (int, error) + Size() int +} + +type OneofProtoTypes_Timestamp struct { + Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,oneof"` +} +type OneofProtoTypes_Duration struct { + Duration *types.Duration `protobuf:"bytes,2,opt,name=duration,oneof"` +} +type OneofProtoTypes_RepDouble struct { + RepDouble *types.DoubleValue `protobuf:"bytes,3,opt,name=repDouble,oneof"` +} +type OneofProtoTypes_RepFloat struct { + RepFloat *types.FloatValue `protobuf:"bytes,4,opt,name=repFloat,oneof"` +} +type OneofProtoTypes_RepInt64 struct { + RepInt64 *types.Int64Value `protobuf:"bytes,5,opt,name=repInt64,oneof"` +} +type OneofProtoTypes_RepUInt64 struct { + RepUInt64 *types.UInt64Value `protobuf:"bytes,6,opt,name=repUInt64,oneof"` +} +type OneofProtoTypes_RepInt32 struct { + RepInt32 *types.Int32Value `protobuf:"bytes,7,opt,name=repInt32,oneof"` +} +type OneofProtoTypes_RepUInt32 struct { + RepUInt32 *types.UInt32Value `protobuf:"bytes,8,opt,name=repUInt32,oneof"` +} +type OneofProtoTypes_RepBool struct { + RepBool *types.BoolValue `protobuf:"bytes,9,opt,name=repBool,oneof"` +} +type OneofProtoTypes_RepString struct { + RepString *types.StringValue `protobuf:"bytes,10,opt,name=repString,oneof"` +} +type OneofProtoTypes_RepBytes struct { + RepBytes *types.BytesValue `protobuf:"bytes,11,opt,name=repBytes,oneof"` +} + +func (*OneofProtoTypes_Timestamp) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_Duration) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepDouble) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepFloat) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepInt64) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepUInt64) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepInt32) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepUInt32) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepBool) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepString) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepBytes) isOneofProtoTypes_OneOfProtoTimes() {} + +func (m *OneofProtoTypes) GetOneOfProtoTimes() isOneofProtoTypes_OneOfProtoTimes { + if m != nil { + return m.OneOfProtoTimes } - if c := this.Bytes.Compare(that1.Bytes); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetTimestamp() *types.Timestamp { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Timestamp); ok { + return x.Timestamp } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetDuration() *types.Duration { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Duration); ok { + return x.Duration } - return 0 + return nil } -func (this *ProtoTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 + +func (m *OneofProtoTypes) GetRepDouble() *types.DoubleValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepDouble); ok { + return x.RepDouble } + return nil +} - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return 1 - } +func (m *OneofProtoTypes) GetRepFloat() *types.FloatValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepFloat); ok { + return x.RepFloat } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 + return nil +} + +func (m *OneofProtoTypes) GetRepInt64() *types.Int64Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepInt64); ok { + return x.RepInt64 } - if c := this.NullableTimestamp.Compare(that1.NullableTimestamp); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepUInt64() *types.UInt64Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepUInt64); ok { + return x.RepUInt64 } - if c := this.NullableDuration.Compare(that1.NullableDuration); c != 0 { - return c - } - if c := this.Timestamp.Compare(&that1.Timestamp); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepInt32() *types.Int32Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepInt32); ok { + return x.RepInt32 } - if c := this.Duration.Compare(&that1.Duration); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepUInt32() *types.UInt32Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepUInt32); ok { + return x.RepUInt32 } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepBool() *types.BoolValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepBool); ok { + return x.RepBool } - return 0 + return nil } -func (this *RepProtoTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 + +func (m *OneofProtoTypes) GetRepString() *types.StringValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepString); ok { + return x.RepString } + return nil +} - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return 1 - } +func (m *OneofProtoTypes) GetRepBytes() *types.BytesValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepBytes); ok { + return x.RepBytes } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofProtoTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofProtoTypes_OneofMarshaler, _OneofProtoTypes_OneofUnmarshaler, _OneofProtoTypes_OneofSizer, []interface{}{ + (*OneofProtoTypes_Timestamp)(nil), + (*OneofProtoTypes_Duration)(nil), + (*OneofProtoTypes_RepDouble)(nil), + (*OneofProtoTypes_RepFloat)(nil), + (*OneofProtoTypes_RepInt64)(nil), + (*OneofProtoTypes_RepUInt64)(nil), + (*OneofProtoTypes_RepInt32)(nil), + (*OneofProtoTypes_RepUInt32)(nil), + (*OneofProtoTypes_RepBool)(nil), + (*OneofProtoTypes_RepString)(nil), + (*OneofProtoTypes_RepBytes)(nil), } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - if len(this.NullableTimestamps) < len(that1.NullableTimestamps) { - return -1 +} + +func _OneofProtoTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofProtoTypes) + // OneOfProtoTimes + switch x := m.OneOfProtoTimes.(type) { + case *OneofProtoTypes_Timestamp: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Timestamp); err != nil { + return err } - return 1 - } - for i := range this.NullableTimestamps { - if c := this.NullableTimestamps[i].Compare(that1.NullableTimestamps[i]); c != 0 { - return c + case *OneofProtoTypes_Duration: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Duration); err != nil { + return err } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - if len(this.NullableDurations) < len(that1.NullableDurations) { - return -1 + case *OneofProtoTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepDouble); err != nil { + return err } - return 1 - } - for i := range this.NullableDurations { - if c := this.NullableDurations[i].Compare(that1.NullableDurations[i]); c != 0 { - return c + case *OneofProtoTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepFloat); err != nil { + return err } - } - if len(this.Timestamps) != len(that1.Timestamps) { - if len(this.Timestamps) < len(that1.Timestamps) { - return -1 + case *OneofProtoTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepInt64); err != nil { + return err } - return 1 - } - for i := range this.Timestamps { - if c := this.Timestamps[i].Compare(&that1.Timestamps[i]); c != 0 { - return c + case *OneofProtoTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepUInt64); err != nil { + return err } - } - if len(this.Durations) != len(that1.Durations) { - if len(this.Durations) < len(that1.Durations) { - return -1 + case *OneofProtoTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepInt32); err != nil { + return err } - return 1 - } - for i := range this.Durations { - if c := this.Durations[i].Compare(&that1.Durations[i]); c != 0 { - return c + case *OneofProtoTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepUInt32); err != nil { + return err } - } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c - } - return 0 -} -func (this *KnownTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + case *OneofProtoTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepBool); err != nil { + return err } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *KnownTypes") + case *OneofProtoTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepString); err != nil { + return err } - } - if that1 == nil { - if this == nil { - return nil + case *OneofProtoTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepBytes); err != nil { + return err } - return fmt.Errorf("that is type *KnownTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *KnownTypes but is not nil && this == nil") - } - if !this.Dur.Equal(that1.Dur) { - return fmt.Errorf("Dur this(%v) Not Equal that(%v)", this.Dur, that1.Dur) - } - if !this.Ts.Equal(that1.Ts) { - return fmt.Errorf("Ts this(%v) Not Equal that(%v)", this.Ts, that1.Ts) - } - if !this.Dbl.Equal(that1.Dbl) { - return fmt.Errorf("Dbl this(%v) Not Equal that(%v)", this.Dbl, that1.Dbl) - } - if !this.Flt.Equal(that1.Flt) { - return fmt.Errorf("Flt this(%v) Not Equal that(%v)", this.Flt, that1.Flt) - } - if !this.I64.Equal(that1.I64) { - return fmt.Errorf("I64 this(%v) Not Equal that(%v)", this.I64, that1.I64) - } - if !this.U64.Equal(that1.U64) { - return fmt.Errorf("U64 this(%v) Not Equal that(%v)", this.U64, that1.U64) - } - if !this.I32.Equal(that1.I32) { - return fmt.Errorf("I32 this(%v) Not Equal that(%v)", this.I32, that1.I32) - } - if !this.U32.Equal(that1.U32) { - return fmt.Errorf("U32 this(%v) Not Equal that(%v)", this.U32, that1.U32) - } - if !this.Bool.Equal(that1.Bool) { - return fmt.Errorf("Bool this(%v) Not Equal that(%v)", this.Bool, that1.Bool) - } - if !this.Str.Equal(that1.Str) { - return fmt.Errorf("Str this(%v) Not Equal that(%v)", this.Str, that1.Str) - } - if !this.Bytes.Equal(that1.Bytes) { - return fmt.Errorf("Bytes this(%v) Not Equal that(%v)", this.Bytes, that1.Bytes) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + case nil: + default: + return fmt.Errorf("OneofProtoTypes.OneOfProtoTimes has unexpected type %T", x) } return nil } -func (this *KnownTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return false +func _OneofProtoTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofProtoTypes) + switch tag { + case 1: // OneOfProtoTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Dur.Equal(that1.Dur) { - return false - } - if !this.Ts.Equal(that1.Ts) { - return false - } - if !this.Dbl.Equal(that1.Dbl) { - return false - } - if !this.Flt.Equal(that1.Flt) { - return false - } - if !this.I64.Equal(that1.I64) { - return false - } - if !this.U64.Equal(that1.U64) { - return false - } - if !this.I32.Equal(that1.I32) { - return false - } - if !this.U32.Equal(that1.U32) { - return false - } - if !this.Bool.Equal(that1.Bool) { - return false - } - if !this.Str.Equal(that1.Str) { - return false - } - if !this.Bytes.Equal(that1.Bytes) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *ProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + msg := new(types.Timestamp) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{msg} + return true, err + case 2: // OneOfProtoTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *ProtoTypes") + msg := new(types.Duration) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_Duration{msg} + return true, err + case 3: // OneOfProtoTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - if this == nil { - return nil + msg := new(types.DoubleValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepDouble{msg} + return true, err + case 4: // OneOfProtoTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - return fmt.Errorf("that is type *ProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *ProtoTypes but is not nil && this == nil") - } - if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) + msg := new(types.FloatValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepFloat{msg} + return true, err + case 5: // OneOfProtoTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Int64Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepInt64{msg} + return true, err + case 6: // OneOfProtoTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.UInt64Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt64{msg} + return true, err + case 7: // OneOfProtoTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Int32Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepInt32{msg} + return true, err + case 8: // OneOfProtoTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.UInt32Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt32{msg} + return true, err + case 9: // OneOfProtoTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.BoolValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepBool{msg} + return true, err + case 10: // OneOfProtoTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.StringValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepString{msg} + return true, err + case 11: // OneOfProtoTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.BytesValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepBytes{msg} + return true, err + default: + return false, nil } - if !this.NullableDuration.Equal(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) +} + +func _OneofProtoTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofProtoTypes) + // OneOfProtoTimes + switch x := m.OneOfProtoTimes.(type) { + case *OneofProtoTypes_Timestamp: + s := proto.Size(x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_Duration: + s := proto.Size(x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepDouble: + s := proto.Size(x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepFloat: + s := proto.Size(x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepInt64: + s := proto.Size(x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepUInt64: + s := proto.Size(x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepInt32: + s := proto.Size(x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepUInt32: + s := proto.Size(x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepBool: + s := proto.Size(x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepString: + s := proto.Size(x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepBytes: + s := proto.Size(x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - if !this.Timestamp.Equal(&that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + return n +} + +type OneofStdTypes struct { + // Types that are valid to be assigned to OneOfStdTimes: + // *OneofStdTypes_Timestamp + // *OneofStdTypes_Duration + // *OneofStdTypes_RepDouble + // *OneofStdTypes_RepFloat + // *OneofStdTypes_RepInt64 + // *OneofStdTypes_RepUInt64 + // *OneofStdTypes_RepInt32 + // *OneofStdTypes_RepUInt32 + // *OneofStdTypes_RepBool + // *OneofStdTypes_RepString + // *OneofStdTypes_RepBytes + OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } +func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } +func (*OneofStdTypes) ProtoMessage() {} +func (*OneofStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6d7bfc155f665581, []int{8} +} +func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil } - if !this.Duration.Equal(&that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) +} +func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofStdTypes.Merge(dst, src) +} +func (m *OneofStdTypes) XXX_Size() int { + return m.Size() +} +func (m *OneofStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo + +type isOneofStdTypes_OneOfStdTimes interface { + isOneofStdTypes_OneOfStdTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + MarshalTo([]byte) (int, error) + Size() int +} + +type OneofStdTypes_Timestamp struct { + Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` +} +type OneofStdTypes_Duration struct { + Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` +} +type OneofStdTypes_RepDouble struct { + RepDouble *float64 `protobuf:"bytes,3,opt,name=repDouble,oneof,wktptr"` +} +type OneofStdTypes_RepFloat struct { + RepFloat *float32 `protobuf:"bytes,4,opt,name=repFloat,oneof,wktptr"` +} +type OneofStdTypes_RepInt64 struct { + RepInt64 *int64 `protobuf:"bytes,5,opt,name=repInt64,oneof,wktptr"` +} +type OneofStdTypes_RepUInt64 struct { + RepUInt64 *uint64 `protobuf:"bytes,6,opt,name=repUInt64,oneof,wktptr"` +} +type OneofStdTypes_RepInt32 struct { + RepInt32 *int32 `protobuf:"bytes,7,opt,name=repInt32,oneof,wktptr"` +} +type OneofStdTypes_RepUInt32 struct { + RepUInt32 *uint32 `protobuf:"bytes,8,opt,name=repUInt32,oneof,wktptr"` +} +type OneofStdTypes_RepBool struct { + RepBool *bool `protobuf:"bytes,9,opt,name=repBool,oneof,wktptr"` +} +type OneofStdTypes_RepString struct { + RepString *string `protobuf:"bytes,10,opt,name=repString,oneof,wktptr"` +} +type OneofStdTypes_RepBytes struct { + RepBytes *[]byte `protobuf:"bytes,11,opt,name=repBytes,oneof,wktptr"` +} + +func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepDouble) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepFloat) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBool) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepString) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBytes) isOneofStdTypes_OneOfStdTimes() {} + +func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { + if m != nil { + return m.OneOfStdTimes } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + return nil +} + +func (m *OneofStdTypes) GetTimestamp() *time.Time { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { + return x.Timestamp } return nil } -func (this *ProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + +func (m *OneofStdTypes) GetDuration() *time.Duration { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { + return x.Duration } + return nil +} - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return false - } +func (m *OneofStdTypes) GetRepDouble() *float64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepDouble); ok { + return x.RepDouble } - if that1 == nil { - return this == nil - } else if this == nil { - return false + return nil +} + +func (m *OneofStdTypes) GetRepFloat() *float32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepFloat); ok { + return x.RepFloat } - if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepInt64() *int64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt64); ok { + return x.RepInt64 } - if !this.NullableDuration.Equal(that1.NullableDuration) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepUInt64() *uint64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt64); ok { + return x.RepUInt64 } - if !this.Timestamp.Equal(&that1.Timestamp) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepInt32() *int32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt32); ok { + return x.RepInt32 } - if !this.Duration.Equal(&that1.Duration) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepUInt32() *uint32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt32); ok { + return x.RepUInt32 } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepBool() *bool { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBool); ok { + return x.RepBool } - return true + return nil } -func (this *StdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + +func (m *OneofStdTypes) GetRepString() *string { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepString); ok { + return x.RepString } + return nil +} - that1, ok := that.(*StdTypes) - if !ok { - that2, ok := that.(StdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *StdTypes") - } - } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *StdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") - } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") - } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) - } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) - } - } else if this.NullableDuration != nil { - return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") - } else if that1.NullableDuration != nil { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) - } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) - } - if this.Duration != that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) +func (m *OneofStdTypes) GetRepBytes() *[]byte { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBytes); ok { + return x.RepBytes } return nil } -func (this *StdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ + (*OneofStdTypes_Timestamp)(nil), + (*OneofStdTypes_Duration)(nil), + (*OneofStdTypes_RepDouble)(nil), + (*OneofStdTypes_RepFloat)(nil), + (*OneofStdTypes_RepInt64)(nil), + (*OneofStdTypes_RepUInt64)(nil), + (*OneofStdTypes_RepInt32)(nil), + (*OneofStdTypes_RepUInt32)(nil), + (*OneofStdTypes_RepBool)(nil), + (*OneofStdTypes_RepString)(nil), + (*OneofStdTypes_RepBytes)(nil), } +} - that1, ok := that.(*StdTypes) - if !ok { - that2, ok := that.(StdTypes) - if ok { - that1 = &that2 - } else { - return false +func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdTimeMarshal(*x.Timestamp) + if err != nil { + return err } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return false + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return false - } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return false + case *OneofStdTypes_Duration: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDurationMarshal(*x.Duration) + if err != nil { + return err } - } else if this.NullableDuration != nil { - return false - } else if that1.NullableDuration != nil { - return false - } - if !this.Timestamp.Equal(that1.Timestamp) { - return false - } - if this.Duration != that1.Duration { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RepProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *RepProtoTypes") + case *OneofStdTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDoubleMarshal(*x.RepDouble) + if err != nil { + return err } - } - if that1 == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that is type *RepProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *RepProtoTypes but is not nil && this == nil") - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + case *OneofStdTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdFloatMarshal(*x.RepFloat) + if err != nil { + return err } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) - } - for i := range this.NullableDurations { - if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + case *OneofStdTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt64Marshal(*x.RepInt64) + if err != nil { + return err } - } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) - } - for i := range this.Durations { - if !this.Durations[i].Equal(&that1.Durations[i]) { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil -} -func (this *RepProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return false + case *OneofStdTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt64Marshal(*x.RepUInt64) + if err != nil { + return err } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { - return false + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return false - } - for i := range this.NullableDurations { - if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { - return false + case *OneofStdTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt32Marshal(*x.RepInt32) + if err != nil { + return err } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return false - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { - return false + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.Durations) != len(that1.Durations) { - return false - } - for i := range this.Durations { - if !this.Durations[i].Equal(&that1.Durations[i]) { - return false + case *OneofStdTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt32Marshal(*x.RepUInt32) + if err != nil { + return err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RepStdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*RepStdTypes) - if !ok { - that2, ok := that.(RepStdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *RepStdTypes") + case *OneofStdTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBoolMarshal(*x.RepBool) + if err != nil { + return err } - } - if that1 == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + case *OneofStdTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdStringMarshal(*x.RepString) + if err != nil { + return err } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) - } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + case *OneofStdTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBytesMarshal(*x.RepBytes) + if err != nil { + return err } - } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) - } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + case nil: + default: + return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) } return nil } -func (this *RepStdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*RepStdTypes) - if !ok { - that2, ok := that.(RepStdTypes) - if ok { - that1 = &that2 - } else { - return false +func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofStdTypes) + switch tag { + case 1: // OneOfStdTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return false + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return false - } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false + c := new(time.Time) + if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { + return true, err } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return false - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return false + m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} + return true, err + case 2: // OneOfStdTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if len(this.Durations) != len(that1.Durations) { - return false - } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return false + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *MapProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + c := new(time.Duration) + if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { + return true, err } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*MapProtoTypes) - if !ok { - that2, ok := that.(MapProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *MapProtoTypes") + m.OneOfStdTimes = &OneofStdTypes_Duration{c} + return true, err + case 3: // OneOfStdTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - if this == nil { - return nil + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } - return fmt.Errorf("that is type *MapProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *MapProtoTypes but is not nil && this == nil") - } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) - } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + c := new(float64) + if err2 := github_com_gogo_protobuf_types.StdDoubleUnmarshal(c, x); err2 != nil { + return true, err } - } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) - } - for i := range this.Timestamp { - a := this.Timestamp[i] - b := that1.Timestamp[i] - if !(&a).Equal(&b) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + m.OneOfStdTimes = &OneofStdTypes_RepDouble{c} + return true, err + case 4: // OneOfStdTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) - } - for i := range this.NullableDuration { - if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } - } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) - } - for i := range this.Duration { - a := this.Duration[i] - b := that1.Duration[i] - if !(&a).Equal(&b) { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + c := new(float32) + if err2 := github_com_gogo_protobuf_types.StdFloatUnmarshal(c, x); err2 != nil { + return true, err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil -} -func (this *MapProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*MapProtoTypes) - if !ok { - that2, ok := that.(MapProtoTypes) - if ok { - that1 = &that2 - } else { - return false + m.OneOfStdTimes = &OneofStdTypes_RepFloat{c} + return true, err + case 5: // OneOfStdTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return false - } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { - return false + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } - } - if len(this.Timestamp) != len(that1.Timestamp) { - return false - } - for i := range this.Timestamp { - a := this.Timestamp[i] - b := that1.Timestamp[i] - if !(&a).Equal(&b) { - return false + c := new(int64) + if err2 := github_com_gogo_protobuf_types.StdInt64Unmarshal(c, x); err2 != nil { + return true, err } - } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return false - } - for i := range this.NullableDuration { - if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { - return false + m.OneOfStdTimes = &OneofStdTypes_RepInt64{c} + return true, err + case 6: // OneOfStdTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if len(this.Duration) != len(that1.Duration) { - return false - } - for i := range this.Duration { - a := this.Duration[i] - b := that1.Duration[i] - if !(&a).Equal(&b) { - return false + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } + c := new(uint64) + if err2 := github_com_gogo_protobuf_types.StdUInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt64{c} + return true, err + case 7: // OneOfStdTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int32) + if err2 := github_com_gogo_protobuf_types.StdInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt32{c} + return true, err + case 8: // OneOfStdTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(uint32) + if err2 := github_com_gogo_protobuf_types.StdUInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt32{c} + return true, err + case 9: // OneOfStdTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(bool) + if err2 := github_com_gogo_protobuf_types.StdBoolUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBool{c} + return true, err + case 10: // OneOfStdTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(string) + if err2 := github_com_gogo_protobuf_types.StdStringUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepString{c} + return true, err + case 11: // OneOfStdTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new([]byte) + if err2 := github_com_gogo_protobuf_types.StdBytesUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBytes{c} + return true, err + default: + return false, nil } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false +} + +func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_Duration: + s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepDouble: + s := github_com_gogo_protobuf_types.SizeOfStdDouble(*x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepFloat: + s := github_com_gogo_protobuf_types.SizeOfStdFloat(*x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt64: + s := github_com_gogo_protobuf_types.SizeOfStdInt64(*x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt64: + s := github_com_gogo_protobuf_types.SizeOfStdUInt64(*x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt32: + s := github_com_gogo_protobuf_types.SizeOfStdInt32(*x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt32: + s := github_com_gogo_protobuf_types.SizeOfStdUInt32(*x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBool: + s := github_com_gogo_protobuf_types.SizeOfStdBool(*x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepString: + s := github_com_gogo_protobuf_types.SizeOfStdString(*x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBytes: + s := github_com_gogo_protobuf_types.SizeOfStdBytes(*x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - return true + return n } -func (this *MapStdTypes) VerboseEqual(that interface{}) error { + +func init() { + proto.RegisterType((*KnownTypes)(nil), "types.KnownTypes") + proto.RegisterType((*ProtoTypes)(nil), "types.ProtoTypes") + proto.RegisterType((*StdTypes)(nil), "types.StdTypes") + proto.RegisterType((*RepProtoTypes)(nil), "types.RepProtoTypes") + proto.RegisterType((*RepStdTypes)(nil), "types.RepStdTypes") + proto.RegisterType((*MapProtoTypes)(nil), "types.MapProtoTypes") + proto.RegisterMapType((map[int32]types.Duration)(nil), "types.MapProtoTypes.DurationEntry") + proto.RegisterMapType((map[int32]types.BoolValue)(nil), "types.MapProtoTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32]types.BytesValue)(nil), "types.MapProtoTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]types.DoubleValue)(nil), "types.MapProtoTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]types.FloatValue)(nil), "types.MapProtoTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]types.Int32Value)(nil), "types.MapProtoTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]types.Int64Value)(nil), "types.MapProtoTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]types.StringValue)(nil), "types.MapProtoTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]types.UInt32Value)(nil), "types.MapProtoTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]types.UInt64Value)(nil), "types.MapProtoTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*types.BoolValue)(nil), "types.MapProtoTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*types.BytesValue)(nil), "types.MapProtoTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*types.DoubleValue)(nil), "types.MapProtoTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*types.Duration)(nil), "types.MapProtoTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*types.FloatValue)(nil), "types.MapProtoTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*types.Int32Value)(nil), "types.MapProtoTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*types.Int64Value)(nil), "types.MapProtoTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*types.StringValue)(nil), "types.MapProtoTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*types.Timestamp)(nil), "types.MapProtoTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*types.UInt32Value)(nil), "types.MapProtoTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*types.UInt64Value)(nil), "types.MapProtoTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]types.Timestamp)(nil), "types.MapProtoTypes.TimestampEntry") + proto.RegisterType((*MapStdTypes)(nil), "types.MapStdTypes") + proto.RegisterMapType((map[int32]time.Duration)(nil), "types.MapStdTypes.DurationEntry") + proto.RegisterMapType((map[int32]bool)(nil), "types.MapStdTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32][]byte)(nil), "types.MapStdTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]float64)(nil), "types.MapStdTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]float32)(nil), "types.MapStdTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]int32)(nil), "types.MapStdTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]int64)(nil), "types.MapStdTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]string)(nil), "types.MapStdTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]uint32)(nil), "types.MapStdTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]uint64)(nil), "types.MapStdTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*bool)(nil), "types.MapStdTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*[]byte)(nil), "types.MapStdTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*float64)(nil), "types.MapStdTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*time.Duration)(nil), "types.MapStdTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*float32)(nil), "types.MapStdTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*int32)(nil), "types.MapStdTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*int64)(nil), "types.MapStdTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*string)(nil), "types.MapStdTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*time.Time)(nil), "types.MapStdTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*uint32)(nil), "types.MapStdTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*uint64)(nil), "types.MapStdTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]time.Time)(nil), "types.MapStdTypes.TimestampEntry") + proto.RegisterType((*OneofProtoTypes)(nil), "types.OneofProtoTypes") + proto.RegisterType((*OneofStdTypes)(nil), "types.OneofStdTypes") +} +func (this *KnownTypes) Compare(that interface{}) int { if that == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - that1, ok := that.(*MapStdTypes) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(MapStdTypes) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *MapStdTypes") + return 1 } } if that1 == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") + return 1 } else if this == nil { - return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") + return -1 } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + if c := this.Dur.Compare(that1.Dur); c != 0 { + return c } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) - } + if c := this.Ts.Compare(that1.Ts); c != 0 { + return c } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + if c := this.Dbl.Compare(that1.Dbl); c != 0 { + return c } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) - } + if c := this.Flt.Compare(that1.Flt); c != 0 { + return c } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + if c := this.I64.Compare(that1.I64); c != 0 { + return c } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) - } + if c := this.U64.Compare(that1.U64); c != 0 { + return c } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + if c := this.I32.Compare(that1.I32); c != 0 { + return c } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) - } + if c := this.U32.Compare(that1.U32); c != 0 { + return c } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if c := this.Bool.Compare(that1.Bool); c != 0 { + return c } - return nil + if c := this.Str.Compare(that1.Str); c != 0 { + return c + } + if c := this.Bytes.Compare(that1.Bytes); c != 0 { + return c + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 } -func (this *MapStdTypes) Equal(that interface{}) bool { +func (this *ProtoTypes) Compare(that interface{}) int { if that == nil { - return this == nil + if this == nil { + return 0 + } + return 1 } - that1, ok := that.(*MapStdTypes) + that1, ok := that.(*ProtoTypes) if !ok { - that2, ok := that.(MapStdTypes) + that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { - return false + return 1 } } if that1 == nil { - return this == nil + if this == nil { + return 0 + } + return 1 } else if this == nil { - return false + return -1 } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return false + if c := this.NullableTimestamp.Compare(that1.NullableTimestamp); c != 0 { + return c } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return false - } + if c := this.NullableDuration.Compare(that1.NullableDuration); c != 0 { + return c } - if len(this.Timestamp) != len(that1.Timestamp) { - return false + if c := this.NullableDouble.Compare(that1.NullableDouble); c != 0 { + return c } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return false - } + if c := this.NullableFloat.Compare(that1.NullableFloat); c != 0 { + return c } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return false + if c := this.NullableInt64.Compare(that1.NullableInt64); c != 0 { + return c } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false - } + if c := this.NullableUInt64.Compare(that1.NullableUInt64); c != 0 { + return c } - if len(this.Duration) != len(that1.Duration) { - return false + if c := this.NullableInt32.Compare(that1.NullableInt32); c != 0 { + return c } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return false - } + if c := this.NullableUInt32.Compare(that1.NullableUInt32); c != 0 { + return c } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if c := this.NullableBool.Compare(that1.NullableBool); c != 0 { + return c } - return true + if c := this.NullableString.Compare(that1.NullableString); c != 0 { + return c + } + if c := this.NullableBytes.Compare(that1.NullableBytes); c != 0 { + return c + } + if c := this.Timestamp.Compare(&that1.Timestamp); c != 0 { + return c + } + if c := this.Duration.Compare(&that1.Duration); c != 0 { + return c + } + if c := this.NonnullDouble.Compare(&that1.NonnullDouble); c != 0 { + return c + } + if c := this.NonnullFloat.Compare(&that1.NonnullFloat); c != 0 { + return c + } + if c := this.NonnullInt64.Compare(&that1.NonnullInt64); c != 0 { + return c + } + if c := this.NonnullUInt64.Compare(&that1.NonnullUInt64); c != 0 { + return c + } + if c := this.NonnullInt32.Compare(&that1.NonnullInt32); c != 0 { + return c + } + if c := this.NonnullUInt32.Compare(&that1.NonnullUInt32); c != 0 { + return c + } + if c := this.NonnullBool.Compare(&that1.NonnullBool); c != 0 { + return c + } + if c := this.NonnullString.Compare(&that1.NonnullString); c != 0 { + return c + } + if c := this.NonnullBytes.Compare(&that1.NonnullBytes); c != 0 { + return c + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 } -func (this *OneofProtoTypes) VerboseEqual(that interface{}) error { +func (this *RepProtoTypes) Compare(that interface{}) int { if that == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - that1, ok := that.(*OneofProtoTypes) + that1, ok := that.(*RepProtoTypes) if !ok { - that2, ok := that.(OneofProtoTypes) + that2, ok := that.(RepProtoTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofProtoTypes") + return 1 } } if that1 == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that is type *OneofProtoTypes but is nil && this != nil") + return 1 } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes but is not nil && this == nil") + return -1 } - if that1.OneOfProtoTimes == nil { - if this.OneOfProtoTimes != nil { - return fmt.Errorf("this.OneOfProtoTimes != nil && that1.OneOfProtoTimes == nil") + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + if len(this.NullableTimestamps) < len(that1.NullableTimestamps) { + return -1 } - } else if this.OneOfProtoTimes == nil { - return fmt.Errorf("this.OneOfProtoTimes == nil && that1.OneOfProtoTimes != nil") - } else if err := this.OneOfProtoTimes.VerboseEqual(that1.OneOfProtoTimes); err != nil { - return err - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + return 1 } - return nil -} -func (this *OneofProtoTypes_Timestamp) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + for i := range this.NullableTimestamps { + if c := this.NullableTimestamps[i].Compare(that1.NullableTimestamps[i]); c != 0 { + return c } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*OneofProtoTypes_Timestamp) - if !ok { - that2, ok := that.(OneofProtoTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofProtoTypes_Timestamp") + if len(this.NullableDurations) != len(that1.NullableDurations) { + if len(this.NullableDurations) < len(that1.NullableDurations) { + return -1 } + return 1 } - if that1 == nil { - if this == nil { - return nil + for i := range this.NullableDurations { + if c := this.NullableDurations[i].Compare(that1.NullableDurations[i]); c != 0 { + return c } - return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is not nil && this == nil") } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + if len(this.Timestamps) != len(that1.Timestamps) { + if len(this.Timestamps) < len(that1.Timestamps) { + return -1 + } + return 1 } - return nil -} -func (this *OneofProtoTypes_Duration) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + for i := range this.Timestamps { + if c := this.Timestamps[i].Compare(&that1.Timestamps[i]); c != 0 { + return c } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*OneofProtoTypes_Duration) - if !ok { - that2, ok := that.(OneofProtoTypes_Duration) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofProtoTypes_Duration") + if len(this.Durations) != len(that1.Durations) { + if len(this.Durations) < len(that1.Durations) { + return -1 } + return 1 } - if that1 == nil { - if this == nil { - return nil + for i := range this.Durations { + if c := this.Durations[i].Compare(&that1.Durations[i]); c != 0 { + return c } - return fmt.Errorf("that is type *OneofProtoTypes_Duration but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes_Duration but is not nil && this == nil") } - if !this.Duration.Equal(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + if len(this.NullableDouble) != len(that1.NullableDouble) { + if len(this.NullableDouble) < len(that1.NullableDouble) { + return -1 + } + return 1 } - return nil -} -func (this *OneofProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + for i := range this.NullableDouble { + if c := this.NullableDouble[i].Compare(that1.NullableDouble[i]); c != 0 { + return c + } } - - that1, ok := that.(*OneofProtoTypes) - if !ok { - that2, ok := that.(OneofProtoTypes) - if ok { - that1 = &that2 - } else { - return false + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + if len(this.NonnullDouble) < len(that1.NonnullDouble) { + return -1 } + return 1 } - if that1 == nil { - return this == nil - } else if this == nil { - return false + for i := range this.NonnullDouble { + if c := this.NonnullDouble[i].Compare(&that1.NonnullDouble[i]); c != 0 { + return c + } } - if that1.OneOfProtoTimes == nil { - if this.OneOfProtoTimes != nil { - return false + if len(this.NullableFloat) != len(that1.NullableFloat) { + if len(this.NullableFloat) < len(that1.NullableFloat) { + return -1 } - } else if this.OneOfProtoTimes == nil { - return false - } else if !this.OneOfProtoTimes.Equal(that1.OneOfProtoTimes) { - return false + return 1 } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + for i := range this.NullableFloat { + if c := this.NullableFloat[i].Compare(that1.NullableFloat[i]); c != 0 { + return c + } } - return true -} -func (this *OneofProtoTypes_Timestamp) Equal(that interface{}) bool { - if that == nil { - return this == nil + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + if len(this.NonnullFloat) < len(that1.NonnullFloat) { + return -1 + } + return 1 } - - that1, ok := that.(*OneofProtoTypes_Timestamp) - if !ok { - that2, ok := that.(OneofProtoTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return false + for i := range this.NonnullFloat { + if c := this.NonnullFloat[i].Compare(&that1.NonnullFloat[i]); c != 0 { + return c } } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if len(this.NullableInt64) != len(that1.NullableInt64) { + if len(this.NullableInt64) < len(that1.NullableInt64) { + return -1 + } + return 1 } - if !this.Timestamp.Equal(that1.Timestamp) { - return false + for i := range this.NullableInt64 { + if c := this.NullableInt64[i].Compare(that1.NullableInt64[i]); c != 0 { + return c + } } - return true -} -func (this *OneofProtoTypes_Duration) Equal(that interface{}) bool { - if that == nil { - return this == nil + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + if len(this.NonnullInt64) < len(that1.NonnullInt64) { + return -1 + } + return 1 } - - that1, ok := that.(*OneofProtoTypes_Duration) - if !ok { - that2, ok := that.(OneofProtoTypes_Duration) - if ok { - that1 = &that2 - } else { - return false + for i := range this.NonnullInt64 { + if c := this.NonnullInt64[i].Compare(&that1.NonnullInt64[i]); c != 0 { + return c } } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + if len(this.NullableUInt64) < len(that1.NullableUInt64) { + return -1 + } + return 1 } - if !this.Duration.Equal(that1.Duration) { - return false + for i := range this.NullableUInt64 { + if c := this.NullableUInt64[i].Compare(that1.NullableUInt64[i]); c != 0 { + return c + } } - return true -} -func (this *OneofStdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + if len(this.NonnullUInt64) < len(that1.NonnullUInt64) { + return -1 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - - that1, ok := that.(*OneofStdTypes) - if !ok { - that2, ok := that.(OneofStdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofStdTypes") + for i := range this.NonnullUInt64 { + if c := this.NonnullUInt64[i].Compare(&that1.NonnullUInt64[i]); c != 0 { + return c } } - if that1 == nil { - if this == nil { - return nil + if len(this.NullableInt32) != len(that1.NullableInt32) { + if len(this.NullableInt32) < len(that1.NullableInt32) { + return -1 } - return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + return 1 } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { - return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") + for i := range this.NullableInt32 { + if c := this.NullableInt32[i].Compare(that1.NullableInt32[i]); c != 0 { + return c } - } else if this.OneOfStdTimes == nil { - return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") - } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { - return err } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + if len(this.NonnullInt32) < len(that1.NonnullInt32) { + return -1 + } + return 1 } - return nil -} -func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + for i := range this.NonnullInt32 { + if c := this.NonnullInt32[i].Compare(&that1.NonnullInt32[i]); c != 0 { + return c } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*OneofStdTypes_Timestamp) - if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + if len(this.NullableUInt32) < len(that1.NullableUInt32) { + return -1 } + return 1 } - if that1 == nil { - if this == nil { - return nil + for i := range this.NullableUInt32 { + if c := this.NullableUInt32[i].Compare(that1.NullableUInt32[i]); c != 0 { + return c } - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") } - if that1.Timestamp == nil { - if this.Timestamp != nil { - return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + if len(this.NonnullUInt32) < len(that1.NonnullUInt32) { + return -1 } - } else if !this.Timestamp.Equal(*that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + return 1 } - return nil + for i := range this.NonnullUInt32 { + if c := this.NonnullUInt32[i].Compare(&that1.NonnullUInt32[i]); c != 0 { + return c + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + if len(this.NullableBool) < len(that1.NullableBool) { + return -1 + } + return 1 + } + for i := range this.NullableBool { + if c := this.NullableBool[i].Compare(that1.NullableBool[i]); c != 0 { + return c + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + if len(this.NonnullBool) < len(that1.NonnullBool) { + return -1 + } + return 1 + } + for i := range this.NonnullBool { + if c := this.NonnullBool[i].Compare(&that1.NonnullBool[i]); c != 0 { + return c + } + } + if len(this.NullableString) != len(that1.NullableString) { + if len(this.NullableString) < len(that1.NullableString) { + return -1 + } + return 1 + } + for i := range this.NullableString { + if c := this.NullableString[i].Compare(that1.NullableString[i]); c != 0 { + return c + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + if len(this.NonnullString) < len(that1.NonnullString) { + return -1 + } + return 1 + } + for i := range this.NonnullString { + if c := this.NonnullString[i].Compare(&that1.NonnullString[i]); c != 0 { + return c + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + if len(this.NullableBytes) < len(that1.NullableBytes) { + return -1 + } + return 1 + } + for i := range this.NullableBytes { + if c := this.NullableBytes[i].Compare(that1.NullableBytes[i]); c != 0 { + return c + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + if len(this.NonnullBytes) < len(that1.NonnullBytes) { + return -1 + } + return 1 + } + for i := range this.NonnullBytes { + if c := this.NonnullBytes[i].Compare(&that1.NonnullBytes[i]); c != 0 { + return c + } + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 } -func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { +func (this *KnownTypes) VerboseEqual(that interface{}) error { if that == nil { if this == nil { return nil @@ -2148,42 +2919,69 @@ return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*OneofStdTypes_Duration) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(OneofStdTypes_Duration) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + return fmt.Errorf("that is not of type *KnownTypes") } } if that1 == nil { if this == nil { return nil } - return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + return fmt.Errorf("that is type *KnownTypes but is nil && this != nil") } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + return fmt.Errorf("that is type *KnownTypes but is not nil && this == nil") } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) - } - } else if this.Duration != nil { - return fmt.Errorf("this.Duration == nil && that.Duration != nil") - } else if that1.Duration != nil { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + if !this.Dur.Equal(that1.Dur) { + return fmt.Errorf("Dur this(%v) Not Equal that(%v)", this.Dur, that1.Dur) + } + if !this.Ts.Equal(that1.Ts) { + return fmt.Errorf("Ts this(%v) Not Equal that(%v)", this.Ts, that1.Ts) + } + if !this.Dbl.Equal(that1.Dbl) { + return fmt.Errorf("Dbl this(%v) Not Equal that(%v)", this.Dbl, that1.Dbl) + } + if !this.Flt.Equal(that1.Flt) { + return fmt.Errorf("Flt this(%v) Not Equal that(%v)", this.Flt, that1.Flt) + } + if !this.I64.Equal(that1.I64) { + return fmt.Errorf("I64 this(%v) Not Equal that(%v)", this.I64, that1.I64) + } + if !this.U64.Equal(that1.U64) { + return fmt.Errorf("U64 this(%v) Not Equal that(%v)", this.U64, that1.U64) + } + if !this.I32.Equal(that1.I32) { + return fmt.Errorf("I32 this(%v) Not Equal that(%v)", this.I32, that1.I32) + } + if !this.U32.Equal(that1.U32) { + return fmt.Errorf("U32 this(%v) Not Equal that(%v)", this.U32, that1.U32) + } + if !this.Bool.Equal(that1.Bool) { + return fmt.Errorf("Bool this(%v) Not Equal that(%v)", this.Bool, that1.Bool) + } + if !this.Str.Equal(that1.Str) { + return fmt.Errorf("Str this(%v) Not Equal that(%v)", this.Str, that1.Str) + } + if !this.Bytes.Equal(that1.Bytes) { + return fmt.Errorf("Bytes this(%v) Not Equal that(%v)", this.Bytes, that1.Bytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) } return nil } -func (this *OneofStdTypes) Equal(that interface{}) bool { +func (this *KnownTypes) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*OneofStdTypes) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(OneofStdTypes) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { @@ -2195,1553 +2993,15390 @@ } else if this == nil { return false } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { - return false - } - } else if this.OneOfStdTimes == nil { + if !this.Dur.Equal(that1.Dur) { return false - } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { + } + if !this.Ts.Equal(that1.Ts) { return false } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + if !this.Dbl.Equal(that1.Dbl) { return false } - return true -} -func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { - if that == nil { - return this == nil + if !this.Flt.Equal(that1.Flt) { + return false } - - that1, ok := that.(*OneofStdTypes_Timestamp) - if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return false - } + if !this.I64.Equal(that1.I64) { + return false } - if that1 == nil { - return this == nil - } else if this == nil { + if !this.U64.Equal(that1.U64) { return false } - if that1.Timestamp == nil { - if this.Timestamp != nil { - return false - } - } else if !this.Timestamp.Equal(*that1.Timestamp) { + if !this.I32.Equal(that1.I32) { + return false + } + if !this.U32.Equal(that1.U32) { + return false + } + if !this.Bool.Equal(that1.Bool) { + return false + } + if !this.Str.Equal(that1.Str) { + return false + } + if !this.Bytes.Equal(that1.Bytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } return true } -func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { +func (this *ProtoTypes) VerboseEqual(that interface{}) error { if that == nil { - return this == nil + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*OneofStdTypes_Duration) + that1, ok := that.(*ProtoTypes) if !ok { - that2, ok := that.(OneofStdTypes_Duration) + that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { - return false + return fmt.Errorf("that is not of type *ProtoTypes") } } if that1 == nil { - return this == nil + if this == nil { + return nil + } + return fmt.Errorf("that is type *ProtoTypes but is nil && this != nil") } else if this == nil { - return false + return fmt.Errorf("that is type *ProtoTypes but is not nil && this == nil") } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return false - } - } else if this.Duration != nil { - return false - } else if that1.Duration != nil { - return false + if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) } - return true -} -func (m *KnownTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if !this.NullableDuration.Equal(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) } - return dAtA[:n], nil -} - -func (m *KnownTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Dur != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Dur.Size())) - n1, err := m.Dur.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 + if !this.NullableDouble.Equal(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) } - if m.Ts != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Ts.Size())) - n2, err := m.Ts.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 + if !this.NullableFloat.Equal(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) } - if m.Dbl != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Dbl.Size())) - n3, err := m.Dbl.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 + if !this.NullableInt64.Equal(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) } - if m.Flt != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Flt.Size())) - n4, err := m.Flt.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 + if !this.NullableUInt64.Equal(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) } - if m.I64 != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.I64.Size())) - n5, err := m.I64.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 + if !this.NullableInt32.Equal(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) } - if m.U64 != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.U64.Size())) - n6, err := m.U64.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 + if !this.NullableUInt32.Equal(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) } - if m.I32 != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.I32.Size())) - n7, err := m.I32.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 + if !this.NullableBool.Equal(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) } - if m.U32 != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.U32.Size())) - n8, err := m.U32.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 + if !this.NullableString.Equal(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) } - if m.Bool != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Bool.Size())) - n9, err := m.Bool.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 + if !this.NullableBytes.Equal(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) } - if m.Str != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Str.Size())) - n10, err := m.Str.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 + if !this.Timestamp.Equal(&that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) } - if m.Bytes != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Bytes.Size())) - n11, err := m.Bytes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 + if !this.Duration.Equal(&that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if !this.NonnullDouble.Equal(&that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) } - return i, nil -} - -func (m *ProtoTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if !this.NonnullFloat.Equal(&that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) } - return dAtA[:n], nil -} - -func (m *ProtoTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.NullableTimestamp != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.NullableTimestamp.Size())) - n12, err := m.NullableTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 + if !this.NonnullInt64.Equal(&that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) } - if m.NullableDuration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.NullableDuration.Size())) - n13, err := m.NullableDuration.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 + if !this.NonnullUInt64.Equal(&that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) } - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) - n14, err := m.Timestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if !this.NonnullInt32.Equal(&that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) } - i += n14 - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Duration.Size())) - n15, err := m.Duration.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if !this.NonnullUInt32.Equal(&that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) } - i += n15 - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if !this.NonnullBool.Equal(&that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) } - return i, nil -} - -func (m *StdTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if !this.NonnullString.Equal(&that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) } - return dAtA[:n], nil + if !this.NonnullBytes.Equal(&that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil } +func (this *ProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } -func (m *StdTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.NullableTimestamp != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp))) - n16, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.NullableTimestamp, dAtA[i:]) - if err != nil { - return 0, err + that1, ok := that.(*ProtoTypes) + if !ok { + that2, ok := that.(ProtoTypes) + if ok { + that1 = &that2 + } else { + return false } - i += n16 } - if m.NullableDuration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration))) - n17, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.NullableDuration, dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 + if that1 == nil { + return this == nil + } else if this == nil { + return false } - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp))) - n18, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:]) - if err != nil { - return 0, err + if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { + return false } - i += n18 - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration))) - n19, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Duration, dAtA[i:]) - if err != nil { - return 0, err + if !this.NullableDuration.Equal(that1.NullableDuration) { + return false } - i += n19 - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if !this.NullableDouble.Equal(that1.NullableDouble) { + return false } - return i, nil -} - -func (m *RepProtoTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if !this.NullableFloat.Equal(that1.NullableFloat) { + return false } - return dAtA[:n], nil -} - -func (m *RepProtoTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, msg := range m.NullableTimestamps { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + if !this.NullableInt64.Equal(that1.NullableInt64) { + return false } - if len(m.NullableDurations) > 0 { - for _, msg := range m.NullableDurations { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + if !this.NullableUInt64.Equal(that1.NullableUInt64) { + return false } - if len(m.Timestamps) > 0 { - for _, msg := range m.Timestamps { - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + if !this.NullableInt32.Equal(that1.NullableInt32) { + return false } - if len(m.Durations) > 0 { - for _, msg := range m.Durations { - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + if !this.NullableUInt32.Equal(that1.NullableUInt32) { + return false } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if !this.NullableBool.Equal(that1.NullableBool) { + return false } - return i, nil -} - -func (m *RepStdTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if !this.NullableString.Equal(that1.NullableString) { + return false } - return dAtA[:n], nil + if !this.NullableBytes.Equal(that1.NullableBytes) { + return false + } + if !this.Timestamp.Equal(&that1.Timestamp) { + return false + } + if !this.Duration.Equal(&that1.Duration) { + return false + } + if !this.NonnullDouble.Equal(&that1.NonnullDouble) { + return false + } + if !this.NonnullFloat.Equal(&that1.NonnullFloat) { + return false + } + if !this.NonnullInt64.Equal(&that1.NonnullInt64) { + return false + } + if !this.NonnullUInt64.Equal(&that1.NonnullUInt64) { + return false + } + if !this.NonnullInt32.Equal(&that1.NonnullInt32) { + return false + } + if !this.NonnullUInt32.Equal(&that1.NonnullUInt32) { + return false + } + if !this.NonnullBool.Equal(&that1.NonnullBool) { + return false + } + if !this.NonnullString.Equal(&that1.NonnullString) { + return false + } + if !this.NonnullBytes.Equal(&that1.NonnullBytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true } +func (this *StdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } -func (m *RepStdTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, msg := range m.NullableTimestamps { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*msg))) - n, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*msg, dAtA[i:]) - if err != nil { - return 0, err - } - i += n + that1, ok := that.(*StdTypes) + if !ok { + that2, ok := that.(StdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *StdTypes") } } - if len(m.NullableDurations) > 0 { - for _, msg := range m.NullableDurations { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*msg))) - n, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*msg, dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if that1 == nil { + if this == nil { + return nil } + return fmt.Errorf("that is type *StdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") } - if len(m.Timestamps) > 0 { - for _, msg := range m.Timestamps { - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(msg))) - n, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(msg, dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") } + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) } - if len(m.Durations) > 0 { - for _, msg := range m.Durations { - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(msg))) - n, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(msg, dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) } + } else if this.NullableDuration != nil { + return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") + } else if that1.NullableDuration != nil { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", *this.NullableDouble, *that1.NullableDouble) + } + } else if this.NullableDouble != nil { + return fmt.Errorf("this.NullableDouble == nil && that.NullableDouble != nil") + } else if that1.NullableDouble != nil { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) + } + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", *this.NullableFloat, *that1.NullableFloat) + } + } else if this.NullableFloat != nil { + return fmt.Errorf("this.NullableFloat == nil && that.NullableFloat != nil") + } else if that1.NullableFloat != nil { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) + } + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", *this.NullableInt64, *that1.NullableInt64) + } + } else if this.NullableInt64 != nil { + return fmt.Errorf("this.NullableInt64 == nil && that.NullableInt64 != nil") + } else if that1.NullableInt64 != nil { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) + } + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", *this.NullableUInt64, *that1.NullableUInt64) + } + } else if this.NullableUInt64 != nil { + return fmt.Errorf("this.NullableUInt64 == nil && that.NullableUInt64 != nil") + } else if that1.NullableUInt64 != nil { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) + } + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", *this.NullableInt32, *that1.NullableInt32) + } + } else if this.NullableInt32 != nil { + return fmt.Errorf("this.NullableInt32 == nil && that.NullableInt32 != nil") + } else if that1.NullableInt32 != nil { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) + } + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", *this.NullableUInt32, *that1.NullableUInt32) + } + } else if this.NullableUInt32 != nil { + return fmt.Errorf("this.NullableUInt32 == nil && that.NullableUInt32 != nil") + } else if that1.NullableUInt32 != nil { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) + } + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", *this.NullableBool, *that1.NullableBool) + } + } else if this.NullableBool != nil { + return fmt.Errorf("this.NullableBool == nil && that.NullableBool != nil") + } else if that1.NullableBool != nil { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) + } + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", *this.NullableString, *that1.NullableString) + } + } else if this.NullableString != nil { + return fmt.Errorf("this.NullableString == nil && that.NullableString != nil") + } else if that1.NullableString != nil { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) + } + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return fmt.Errorf("this.NullableBytes != nil && that1.NullableBytes == nil") + } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) } - return i, nil -} - -func (m *MapProtoTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) } - return dAtA[:n], nil + if this.Duration != that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + if this.NonnullDouble != that1.NonnullDouble { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) + } + if this.NonnullFloat != that1.NonnullFloat { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) + } + if this.NonnullInt64 != that1.NonnullInt64 { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) + } + if this.NonnullUInt64 != that1.NonnullUInt64 { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) + } + if this.NonnullInt32 != that1.NonnullInt32 { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) + } + if this.NonnullUInt32 != that1.NonnullUInt32 { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) + } + if this.NonnullBool != that1.NonnullBool { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) + } + if this.NonnullString != that1.NonnullString { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) + } + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil } +func (this *StdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } -func (m *MapProtoTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k := range m.NullableTimestamp { - dAtA[i] = 0xa - i++ - v := m.NullableTimestamp[k] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(v.Size())) - n20, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } + that1, ok := that.(*StdTypes) + if !ok { + that2, ok := that.(StdTypes) + if ok { + that1 = &that2 + } else { + return false } } - if len(m.Timestamp) > 0 { - for k := range m.Timestamp { - dAtA[i] = 0x12 - i++ - v := m.Timestamp[k] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) - n21, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return false } + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return false } - if len(m.NullableDuration) > 0 { - for k := range m.NullableDuration { - dAtA[i] = 0x1a - i++ - v := m.NullableDuration[k] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(v.Size())) - n22, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return false } + } else if this.NullableDuration != nil { + return false + } else if that1.NullableDuration != nil { + return false } - if len(m.Duration) > 0 { - for k := range m.Duration { - dAtA[i] = 0x22 - i++ - v := m.Duration[k] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) - n23, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return false } + } else if this.NullableDouble != nil { + return false + } else if that1.NullableDouble != nil { + return false } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *MapStdTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MapStdTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k := range m.NullableTimestamp { - dAtA[i] = 0xa - i++ - v := m.NullableTimestamp[k] - msgSize := 0 - if v != nil { - msgSize = github_com_gogo_protobuf_types.SizeOfStdTime(*v) - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*v))) - n24, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*v, dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return false } + } else if this.NullableFloat != nil { + return false + } else if that1.NullableFloat != nil { + return false } - if len(m.Timestamp) > 0 { - for k := range m.Timestamp { - dAtA[i] = 0x12 - i++ - v := m.Timestamp[k] - msgSize := 0 - if (&v) != nil { - msgSize = github_com_gogo_protobuf_types.SizeOfStdTime(*(&v)) - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*(&v)))) - n25, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*(&v), dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return false } + } else if this.NullableInt64 != nil { + return false + } else if that1.NullableInt64 != nil { + return false } - if len(m.NullableDuration) > 0 { - for k := range m.NullableDuration { - dAtA[i] = 0x1a - i++ - v := m.NullableDuration[k] - msgSize := 0 - if v != nil { - msgSize = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*v))) - n26, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*v, dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return false } + } else if this.NullableUInt64 != nil { + return false + } else if that1.NullableUInt64 != nil { + return false } - if len(m.Duration) > 0 { - for k := range m.Duration { - dAtA[i] = 0x22 - i++ - v := m.Duration[k] - msgSize := 0 - if (&v) != nil { - msgSize = github_com_gogo_protobuf_types.SizeOfStdDuration(*(&v)) - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*(&v)))) - n27, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*(&v), dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return false } + } else if this.NullableInt32 != nil { + return false + } else if that1.NullableInt32 != nil { + return false } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *OneofProtoTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *OneofProtoTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.OneOfProtoTimes != nil { - nn28, err := m.OneOfProtoTimes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return false } - i += nn28 + } else if this.NullableUInt32 != nil { + return false + } else if that1.NullableUInt32 != nil { + return false } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return false + } + } else if this.NullableBool != nil { + return false + } else if that1.NullableBool != nil { + return false } - return i, nil -} - -func (m *OneofProtoTypes_Timestamp) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Timestamp != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) - n29, err := m.Timestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return false } - i += n29 + } else if this.NullableString != nil { + return false + } else if that1.NullableString != nil { + return false } - return i, nil -} -func (m *OneofProtoTypes_Duration) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Duration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Duration.Size())) - n30, err := m.Duration.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return false } - i += n30 + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return false } - return i, nil -} -func (m *OneofStdTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if !this.Timestamp.Equal(that1.Timestamp) { + return false } - return dAtA[:n], nil -} - -func (m *OneofStdTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.OneOfStdTimes != nil { - nn31, err := m.OneOfStdTimes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn31 + if this.Duration != that1.Duration { + return false } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if this.NonnullDouble != that1.NonnullDouble { + return false } - return i, nil -} - -func (m *OneofStdTypes_Timestamp) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Timestamp != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Timestamp))) - n32, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Timestamp, dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 + if this.NonnullFloat != that1.NonnullFloat { + return false } - return i, nil -} -func (m *OneofStdTypes_Duration) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Duration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Duration))) - n33, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Duration, dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 + if this.NonnullInt64 != that1.NonnullInt64 { + return false } - return i, nil -} -func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ + if this.NonnullUInt64 != that1.NonnullUInt64 { + return false } - dAtA[offset] = uint8(v) - return offset + 1 -} -func NewPopulatedKnownTypes(r randyTypes, easy bool) *KnownTypes { - this := &KnownTypes{} - if r.Intn(10) != 0 { - this.Dur = types.NewPopulatedDuration(r, easy) + if this.NonnullInt32 != that1.NonnullInt32 { + return false } - if r.Intn(10) != 0 { - this.Ts = types.NewPopulatedTimestamp(r, easy) + if this.NonnullUInt32 != that1.NonnullUInt32 { + return false } - if r.Intn(10) != 0 { - this.Dbl = types.NewPopulatedDoubleValue(r, easy) + if this.NonnullBool != that1.NonnullBool { + return false } - if r.Intn(10) != 0 { - this.Flt = types.NewPopulatedFloatValue(r, easy) + if this.NonnullString != that1.NonnullString { + return false } - if r.Intn(10) != 0 { - this.I64 = types.NewPopulatedInt64Value(r, easy) + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return false } - if r.Intn(10) != 0 { - this.U64 = types.NewPopulatedUInt64Value(r, easy) + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false } - if r.Intn(10) != 0 { - this.I32 = types.NewPopulatedInt32Value(r, easy) + return true +} +func (this *RepProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") } - if r.Intn(10) != 0 { - this.U32 = types.NewPopulatedUInt32Value(r, easy) + + that1, ok := that.(*RepProtoTypes) + if !ok { + that2, ok := that.(RepProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *RepProtoTypes") + } } - if r.Intn(10) != 0 { - this.Bool = types.NewPopulatedBoolValue(r, easy) + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *RepProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *RepProtoTypes but is not nil && this == nil") } - if r.Intn(10) != 0 { - this.Str = types.NewPopulatedStringValue(r, easy) + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) } - if r.Intn(10) != 0 { - this.Bytes = types.NewPopulatedBytesValue(r, easy) + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) } - return this -} - -func NewPopulatedProtoTypes(r randyTypes, easy bool) *ProtoTypes { - this := &ProtoTypes{} - if r.Intn(10) != 0 { - this.NullableTimestamp = types.NewPopulatedTimestamp(r, easy) + for i := range this.NullableDurations { + if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + } } - if r.Intn(10) != 0 { - this.NullableDuration = types.NewPopulatedDuration(r, easy) + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) } - v1 := types.NewPopulatedTimestamp(r, easy) - this.Timestamp = *v1 - v2 := types.NewPopulatedDuration(r, easy) - this.Duration = *v2 - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + } } - return this -} - -func NewPopulatedStdTypes(r randyTypes, easy bool) *StdTypes { - this := &StdTypes{} - if r.Intn(10) != 0 { - this.NullableTimestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) } - if r.Intn(10) != 0 { - this.NullableDuration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + for i := range this.Durations { + if !this.Durations[i].Equal(&that1.Durations[i]) { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + } } - v3 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamp = *v3 - v4 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Duration = *v4 - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) } - return this -} - -func NewPopulatedRepProtoTypes(r randyTypes, easy bool) *RepProtoTypes { - this := &RepProtoTypes{} - if r.Intn(10) != 0 { - v5 := r.Intn(5) - this.NullableTimestamps = make([]*types.Timestamp, v5) - for i := 0; i < v5; i++ { - this.NullableTimestamps[i] = types.NewPopulatedTimestamp(r, easy) + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) } } - if r.Intn(10) != 0 { - v6 := r.Intn(5) - this.NullableDurations = make([]*types.Duration, v6) - for i := 0; i < v6; i++ { - this.NullableDurations[i] = types.NewPopulatedDuration(r, easy) + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + if !this.NonnullDouble[i].Equal(&that1.NonnullDouble[i]) { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) } } - if r.Intn(10) != 0 { - v7 := r.Intn(5) - this.Timestamps = make([]types.Timestamp, v7) - for i := 0; i < v7; i++ { - v8 := types.NewPopulatedTimestamp(r, easy) - this.Timestamps[i] = *v8 + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) } } - if r.Intn(10) != 0 { - v9 := r.Intn(5) - this.Durations = make([]types.Duration, v9) - for i := 0; i < v9; i++ { - v10 := types.NewPopulatedDuration(r, easy) - this.Durations[i] = *v10 + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if !this.NonnullFloat[i].Equal(&that1.NonnullFloat[i]) { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) } - return this -} - -func NewPopulatedRepStdTypes(r randyTypes, easy bool) *RepStdTypes { - this := &RepStdTypes{} - if r.Intn(10) != 0 { - v11 := r.Intn(5) - this.NullableTimestamps = make([]*time.Time, v11) - for i := 0; i < v11; i++ { - this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) } } - if r.Intn(10) != 0 { - v12 := r.Intn(5) - this.NullableDurations = make([]*time.Duration, v12) - for i := 0; i < v12; i++ { - this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if !this.NonnullInt64[i].Equal(&that1.NonnullInt64[i]) { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) } } - if r.Intn(10) != 0 { - v13 := r.Intn(5) - this.Timestamps = make([]time.Time, v13) - for i := 0; i < v13; i++ { - v14 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamps[i] = *v14 + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) } } - if r.Intn(10) != 0 { - v15 := r.Intn(5) - this.Durations = make([]time.Duration, v15) - for i := 0; i < v15; i++ { - v16 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Durations[i] = *v16 + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if !this.NonnullUInt64[i].Equal(&that1.NonnullUInt64[i]) { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) } - return this -} - -func NewPopulatedMapProtoTypes(r randyTypes, easy bool) *MapProtoTypes { - this := &MapProtoTypes{} - if r.Intn(10) != 0 { - v17 := r.Intn(10) - this.NullableTimestamp = make(map[int32]*types.Timestamp) - for i := 0; i < v17; i++ { - this.NullableTimestamp[int32(r.Int31())] = types.NewPopulatedTimestamp(r, easy) + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) } } - if r.Intn(10) != 0 { - v18 := r.Intn(10) - this.Timestamp = make(map[int32]types.Timestamp) - for i := 0; i < v18; i++ { - this.Timestamp[int32(r.Int31())] = *types.NewPopulatedTimestamp(r, easy) + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if !this.NonnullInt32[i].Equal(&that1.NonnullInt32[i]) { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) } } - if r.Intn(10) != 0 { - v19 := r.Intn(10) - this.NullableDuration = make(map[int32]*types.Duration) - for i := 0; i < v19; i++ { - this.NullableDuration[int32(r.Int31())] = types.NewPopulatedDuration(r, easy) + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) } } - if r.Intn(10) != 0 { - v20 := r.Intn(10) - this.Duration = make(map[int32]types.Duration) - for i := 0; i < v20; i++ { - this.Duration[int32(r.Int31())] = *types.NewPopulatedDuration(r, easy) + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + if !this.NonnullUInt32[i].Equal(&that1.NonnullUInt32[i]) { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) } - return this -} - -func NewPopulatedMapStdTypes(r randyTypes, easy bool) *MapStdTypes { - this := &MapStdTypes{} - if r.Intn(10) != 0 { - v21 := r.Intn(10) - this.NullableTimestamp = make(map[int32]*time.Time) - for i := 0; i < v21; i++ { - this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) } } - if r.Intn(10) != 0 { - v22 := r.Intn(10) - this.Timestamp = make(map[int32]time.Time) - for i := 0; i < v22; i++ { - this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + if !this.NonnullBool[i].Equal(&that1.NonnullBool[i]) { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) } } - if r.Intn(10) != 0 { - v23 := r.Intn(10) - this.NullableDuration = make(map[int32]*time.Duration) - for i := 0; i < v23; i++ { - this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) } } - if r.Intn(10) != 0 { - v24 := r.Intn(10) - this.Duration = make(map[int32]time.Duration) - for i := 0; i < v24; i++ { - this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + if !this.NonnullString[i].Equal(&that1.NonnullString[i]) { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) } - return this -} - -func NewPopulatedOneofProtoTypes(r randyTypes, easy bool) *OneofProtoTypes { - this := &OneofProtoTypes{} - oneofNumber_OneOfProtoTimes := []int32{1, 2}[r.Intn(2)] - switch oneofNumber_OneOfProtoTimes { - case 1: - this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Timestamp(r, easy) - case 2: - this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Duration(r, easy) + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 3) + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) } - return this -} - -func NewPopulatedOneofProtoTypes_Timestamp(r randyTypes, easy bool) *OneofProtoTypes_Timestamp { - this := &OneofProtoTypes_Timestamp{} - this.Timestamp = types.NewPopulatedTimestamp(r, easy) - return this -} -func NewPopulatedOneofProtoTypes_Duration(r randyTypes, easy bool) *OneofProtoTypes_Duration { - this := &OneofProtoTypes_Duration{} - this.Duration = types.NewPopulatedDuration(r, easy) - return this -} -func NewPopulatedOneofStdTypes(r randyTypes, easy bool) *OneofStdTypes { - this := &OneofStdTypes{} - oneofNumber_OneOfStdTimes := []int32{1, 2}[r.Intn(2)] - switch oneofNumber_OneOfStdTimes { - case 1: - this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) - case 2: - this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) + for i := range this.NonnullBytes { + if !this.NonnullBytes[i].Equal(&that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 3) + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) } - return this + return nil } +func (this *RepProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } -func NewPopulatedOneofStdTypes_Timestamp(r randyTypes, easy bool) *OneofStdTypes_Timestamp { - this := &OneofStdTypes_Timestamp{} - this.Timestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - return this -} -func NewPopulatedOneofStdTypes_Duration(r randyTypes, easy bool) *OneofStdTypes_Duration { - this := &OneofStdTypes_Duration{} - this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - return this -} - -type randyTypes interface { - Float32() float32 - Float64() float64 - Int63() int64 - Int31() int32 - Uint32() uint32 - Intn(n int) int -} - -func randUTF8RuneTypes(r randyTypes) rune { - ru := r.Intn(62) - if ru < 10 { - return rune(ru + 48) - } else if ru < 36 { - return rune(ru + 55) + that1, ok := that.(*RepProtoTypes) + if !ok { + that2, ok := that.(RepProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } } - return rune(ru + 61) -} -func randStringTypes(r randyTypes) string { - v25 := r.Intn(100) - tmps := make([]rune, v25) - for i := 0; i < v25; i++ { - tmps[i] = randUTF8RuneTypes(r) + if that1 == nil { + return this == nil + } else if this == nil { + return false } - return string(tmps) -} -func randUnrecognizedTypes(r randyTypes, maxFieldNumber int) (dAtA []byte) { - l := r.Intn(5) - for i := 0; i < l; i++ { - wire := r.Intn(4) - if wire == 3 { - wire = 5 - } - fieldNumber := maxFieldNumber + r.Intn(100) - dAtA = randFieldTypes(dAtA, r, fieldNumber, wire) + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false } - return dAtA -} -func randFieldTypes(dAtA []byte, r randyTypes, fieldNumber int, wire int) []byte { - key := uint32(fieldNumber)<<3 | uint32(wire) - switch wire { - case 0: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - v26 := r.Int63() - if r.Intn(2) == 0 { - v26 *= -1 - } - dAtA = encodeVarintPopulateTypes(dAtA, uint64(v26)) - case 1: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - case 2: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - ll := r.Intn(100) - dAtA = encodeVarintPopulateTypes(dAtA, uint64(ll)) - for j := 0; j < ll; j++ { - dAtA = append(dAtA, byte(r.Intn(256))) + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { + return false } - default: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) } - return dAtA -} -func encodeVarintPopulateTypes(dAtA []byte, v uint64) []byte { - for v >= 1<<7 { - dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) - v >>= 7 + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false } - dAtA = append(dAtA, uint8(v)) - return dAtA -} -func (m *KnownTypes) Size() (n int) { - var l int - _ = l - if m.Dur != nil { - l = m.Dur.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NullableDurations { + if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { + return false + } } - if m.Ts != nil { - l = m.Ts.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.Timestamps) != len(that1.Timestamps) { + return false } - if m.Dbl != nil { - l = m.Dbl.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { + return false + } } - if m.Flt != nil { - l = m.Flt.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.Durations) != len(that1.Durations) { + return false } - if m.I64 != nil { - l = m.I64.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.Durations { + if !this.Durations[i].Equal(&that1.Durations[i]) { + return false + } } - if m.U64 != nil { - l = m.U64.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false } - if m.I32 != nil { - l = m.I32.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return false + } } - if m.U32 != nil { - l = m.U32.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false } - if m.Bool != nil { - l = m.Bool.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NonnullDouble { + if !this.NonnullDouble[i].Equal(&that1.NonnullDouble[i]) { + return false + } } - if m.Str != nil { - l = m.Str.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false } - if m.Bytes != nil { - l = m.Bytes.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return false + } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false } - return n -} - -func (m *ProtoTypes) Size() (n int) { - var l int - _ = l - if m.NullableTimestamp != nil { - l = m.NullableTimestamp.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NonnullFloat { + if !this.NonnullFloat[i].Equal(&that1.NonnullFloat[i]) { + return false + } } - if m.NullableDuration != nil { - l = m.NullableDuration.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false } - l = m.Timestamp.Size() - n += 1 + l + sovTypes(uint64(l)) - l = m.Duration.Size() - n += 1 + l + sovTypes(uint64(l)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return false + } } - return n -} - -func (m *StdTypes) Size() (n int) { - var l int - _ = l - if m.NullableTimestamp != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp) - n += 1 + l + sovTypes(uint64(l)) + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false } - if m.NullableDuration != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration) - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NonnullInt64 { + if !this.NonnullInt64[i].Equal(&that1.NonnullInt64[i]) { + return false + } } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) - n += 1 + l + sovTypes(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) - n += 1 + l + sovTypes(uint64(l)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false } - return n -} - -func (m *RepProtoTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, e := range m.NullableTimestamps { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return false } } - if len(m.NullableDurations) > 0 { - for _, e := range m.NullableDurations { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false } - if len(m.Timestamps) > 0 { - for _, e := range m.Timestamps { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NonnullUInt64 { + if !this.NonnullUInt64[i].Equal(&that1.NonnullUInt64[i]) { + return false } } - if len(m.Durations) > 0 { - for _, e := range m.Durations { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return false } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false } - return n -} - -func (m *RepStdTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, e := range m.NullableTimestamps { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*e) - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NonnullInt32 { + if !this.NonnullInt32[i].Equal(&that1.NonnullInt32[i]) { + return false } } - if len(m.NullableDurations) > 0 { - for _, e := range m.NullableDurations { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*e) - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return false } } - if len(m.Timestamps) > 0 { - for _, e := range m.Timestamps { - l = github_com_gogo_protobuf_types.SizeOfStdTime(e) - n += 1 + l + sovTypes(uint64(l)) + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if !this.NonnullUInt32[i].Equal(&that1.NonnullUInt32[i]) { + return false } } - if len(m.Durations) > 0 { - for _, e := range m.Durations { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(e) - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return false } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false } - return n -} - -func (m *MapProtoTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k, v := range m.NullableTimestamp { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovTypes(uint64(l)) - } - mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + for i := range this.NonnullBool { + if !this.NonnullBool[i].Equal(&that1.NonnullBool[i]) { + return false } } - if len(m.Timestamp) > 0 { - for k, v := range m.Timestamp { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return false } } - if len(m.NullableDuration) > 0 { - for k, v := range m.NullableDuration { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovTypes(uint64(l)) - } - mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if !this.NonnullString[i].Equal(&that1.NonnullString[i]) { + return false } } - if len(m.Duration) > 0 { - for k, v := range m.Duration { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return false } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false } - return n + for i := range this.NonnullBytes { + if !this.NonnullBytes[i].Equal(&that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true } +func (this *RepStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } -func (m *MapStdTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k, v := range m.NullableTimestamp { - _ = k - _ = v - l = 0 - if v != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*v) - l += 1 + sovTypes(uint64(l)) - } - mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *RepStdTypes") } } - if len(m.Timestamp) > 0 { - for k, v := range m.Timestamp { - _ = k - _ = v - l = github_com_gogo_protobuf_types.SizeOfStdTime(v) - mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if that1 == nil { + if this == nil { + return nil } + return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") } - if len(m.NullableDuration) > 0 { - for k, v := range m.NullableDuration { - _ = k - _ = v - l = 0 - if v != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) - l += 1 + sovTypes(uint64(l)) - } - mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) } } - if len(m.Duration) > 0 { - for k, v := range m.Duration { - _ = k - _ = v - l = github_com_gogo_protobuf_types.SizeOfStdDuration(v) - mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) } - return n -} - -func (m *OneofProtoTypes) Size() (n int) { - var l int - _ = l - if m.OneOfProtoTimes != nil { - n += m.OneOfProtoTimes.Size() + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) } - return n -} - -func (m *OneofProtoTypes_Timestamp) Size() (n int) { - var l int - _ = l - if m.Timestamp != nil { - l = m.Timestamp.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + } } - return n -} -func (m *OneofProtoTypes_Duration) Size() (n int) { - var l int - _ = l - if m.Duration != nil { - l = m.Duration.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) } - return n -} -func (m *OneofStdTypes) Size() (n int) { - var l int - _ = l - if m.OneOfStdTimes != nil { - n += m.OneOfStdTimes.Size() + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) } - return n -} - -func (m *OneofStdTypes_Timestamp) Size() (n int) { - var l int - _ = l - if m.Timestamp != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.Timestamp) - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } } - return n -} -func (m *OneofStdTypes_Duration) Size() (n int) { - var l int - _ = l - if m.Duration != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Duration) - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) } - return n -} - -func sovTypes(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) } } - return n -} -func sozTypes(x uint64) (n int) { - return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *KnownTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *RepStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return false + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return false + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return false + } + } + if len(this.Durations) != len(that1.Durations) { + return false + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapProtoTypes) + if !ok { + that2, ok := that.(MapProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapProtoTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + a := this.Timestamp[i] + b := that1.Timestamp[i] + if !(&a).Equal(&b) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + a := this.Duration[i] + b := that1.Duration[i] + if !(&a).Equal(&b) { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapProtoTypes) + if !ok { + that2, ok := that.(MapProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + a := this.Timestamp[i] + b := that1.Timestamp[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + a := this.Duration[i] + b := that1.Duration[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !(&a).Equal(&b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes) + if !ok { + that2, ok := that.(OneofProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes but is not nil && this == nil") + } + if that1.OneOfProtoTimes == nil { + if this.OneOfProtoTimes != nil { + return fmt.Errorf("this.OneOfProtoTimes != nil && that1.OneOfProtoTimes == nil") + } + } else if this.OneOfProtoTimes == nil { + return fmt.Errorf("this.OneOfProtoTimes == nil && that1.OneOfProtoTimes != nil") + } else if err := this.OneOfProtoTimes.VerboseEqual(that1.OneOfProtoTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofProtoTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_Timestamp) + if !ok { + that2, ok := that.(OneofProtoTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is not nil && this == nil") + } + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + return nil +} +func (this *OneofProtoTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_Duration) + if !ok { + that2, ok := that.(OneofProtoTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_Duration") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_Duration but is not nil && this == nil") + } + if !this.Duration.Equal(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofProtoTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepDouble) + if !ok { + that2, ok := that.(OneofProtoTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepDouble") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepDouble but is not nil && this == nil") + } + if !this.RepDouble.Equal(that1.RepDouble) { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) + } + return nil +} +func (this *OneofProtoTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepFloat) + if !ok { + that2, ok := that.(OneofProtoTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepFloat but is not nil && this == nil") + } + if !this.RepFloat.Equal(that1.RepFloat) { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil +} +func (this *OneofProtoTypes_RepInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepInt64 but is not nil && this == nil") + } + if !this.RepInt64.Equal(that1.RepInt64) { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) + } + return nil +} +func (this *OneofProtoTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepUInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt64 but is not nil && this == nil") + } + if !this.RepUInt64.Equal(that1.RepUInt64) { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) + } + return nil +} +func (this *OneofProtoTypes_RepInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepInt32 but is not nil && this == nil") + } + if !this.RepInt32.Equal(that1.RepInt32) { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) + } + return nil +} +func (this *OneofProtoTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepUInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt32 but is not nil && this == nil") + } + if !this.RepUInt32.Equal(that1.RepUInt32) { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) + } + return nil +} +func (this *OneofProtoTypes_RepBool) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepBool) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBool) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepBool") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepBool but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepBool but is not nil && this == nil") + } + if !this.RepBool.Equal(that1.RepBool) { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) + } + return nil +} +func (this *OneofProtoTypes_RepString) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepString) + if !ok { + that2, ok := that.(OneofProtoTypes_RepString) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepString") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepString but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepString but is not nil && this == nil") + } + if !this.RepString.Equal(that1.RepString) { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) + } + return nil +} +func (this *OneofProtoTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepBytes) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepBytes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepBytes but is not nil && this == nil") + } + if !this.RepBytes.Equal(that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) + } + return nil +} +func (this *OneofProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes) + if !ok { + that2, ok := that.(OneofProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.OneOfProtoTimes == nil { + if this.OneOfProtoTimes != nil { + return false + } + } else if this.OneOfProtoTimes == nil { + return false + } else if !this.OneOfProtoTimes.Equal(that1.OneOfProtoTimes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofProtoTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_Timestamp) + if !ok { + that2, ok := that.(OneofProtoTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Timestamp.Equal(that1.Timestamp) { + return false + } + return true +} +func (this *OneofProtoTypes_Duration) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_Duration) + if !ok { + that2, ok := that.(OneofProtoTypes_Duration) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Duration.Equal(that1.Duration) { + return false + } + return true +} +func (this *OneofProtoTypes_RepDouble) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepDouble) + if !ok { + that2, ok := that.(OneofProtoTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepDouble.Equal(that1.RepDouble) { + return false + } + return true +} +func (this *OneofProtoTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepFloat) + if !ok { + that2, ok := that.(OneofProtoTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepFloat.Equal(that1.RepFloat) { + return false + } + return true +} +func (this *OneofProtoTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepInt64.Equal(that1.RepInt64) { + return false + } + return true +} +func (this *OneofProtoTypes_RepUInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepUInt64.Equal(that1.RepUInt64) { + return false + } + return true +} +func (this *OneofProtoTypes_RepInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepInt32.Equal(that1.RepInt32) { + return false + } + return true +} +func (this *OneofProtoTypes_RepUInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepUInt32.Equal(that1.RepUInt32) { + return false + } + return true +} +func (this *OneofProtoTypes_RepBool) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepBool) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBool) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepBool.Equal(that1.RepBool) { + return false + } + return true +} +func (this *OneofProtoTypes_RepString) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepString) + if !ok { + that2, ok := that.(OneofProtoTypes_RepString) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepString.Equal(that1.RepString) { + return false + } + return true +} +func (this *OneofProtoTypes_RepBytes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepBytes) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepBytes.Equal(that1.RepBytes) { + return false + } + return true +} +func (this *OneofStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") + } + } else if this.OneOfStdTimes == nil { + return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") + } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + return nil +} +func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) + } + } else if this.Duration != nil { + return fmt.Errorf("this.Duration == nil && that.Duration != nil") + } else if that1.Duration != nil { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofStdTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepDouble") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is not nil && this == nil") + } + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", *this.RepDouble, *that1.RepDouble) + } + } else if this.RepDouble != nil { + return fmt.Errorf("this.RepDouble == nil && that.RepDouble != nil") + } else if that1.RepDouble != nil { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) + } + return nil +} +func (this *OneofStdTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is not nil && this == nil") + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", *this.RepFloat, *that1.RepFloat) + } + } else if this.RepFloat != nil { + return fmt.Errorf("this.RepFloat == nil && that.RepFloat != nil") + } else if that1.RepFloat != nil { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil +} +func (this *OneofStdTypes_RepInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is not nil && this == nil") + } + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", *this.RepInt64, *that1.RepInt64) + } + } else if this.RepInt64 != nil { + return fmt.Errorf("this.RepInt64 == nil && that.RepInt64 != nil") + } else if that1.RepInt64 != nil { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) + } + return nil +} +func (this *OneofStdTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is not nil && this == nil") + } + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", *this.RepUInt64, *that1.RepUInt64) + } + } else if this.RepUInt64 != nil { + return fmt.Errorf("this.RepUInt64 == nil && that.RepUInt64 != nil") + } else if that1.RepUInt64 != nil { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) + } + return nil +} +func (this *OneofStdTypes_RepInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is not nil && this == nil") + } + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", *this.RepInt32, *that1.RepInt32) + } + } else if this.RepInt32 != nil { + return fmt.Errorf("this.RepInt32 == nil && that.RepInt32 != nil") + } else if that1.RepInt32 != nil { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) + } + return nil +} +func (this *OneofStdTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is not nil && this == nil") + } + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", *this.RepUInt32, *that1.RepUInt32) + } + } else if this.RepUInt32 != nil { + return fmt.Errorf("this.RepUInt32 == nil && that.RepUInt32 != nil") + } else if that1.RepUInt32 != nil { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) + } + return nil +} +func (this *OneofStdTypes_RepBool) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepBool) + if !ok { + that2, ok := that.(OneofStdTypes_RepBool) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBool") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is not nil && this == nil") + } + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", *this.RepBool, *that1.RepBool) + } + } else if this.RepBool != nil { + return fmt.Errorf("this.RepBool == nil && that.RepBool != nil") + } else if that1.RepBool != nil { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) + } + return nil +} +func (this *OneofStdTypes_RepString) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepString) + if !ok { + that2, ok := that.(OneofStdTypes_RepString) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepString") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepString but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepString but is not nil && this == nil") + } + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", *this.RepString, *that1.RepString) + } + } else if this.RepString != nil { + return fmt.Errorf("this.RepString == nil && that.RepString != nil") + } else if that1.RepString != nil { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) + } + return nil +} +func (this *OneofStdTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepBytes) + if !ok { + that2, ok := that.(OneofStdTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBytes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is not nil && this == nil") + } + if that1.RepBytes == nil { + if this.RepBytes != nil { + return fmt.Errorf("this.RepBytes != nil && that1.RepBytes == nil") + } + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) + } + return nil +} +func (this *OneofStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return false + } + } else if this.OneOfStdTimes == nil { + return false + } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return false + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return false + } + return true +} +func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return false + } + } else if this.Duration != nil { + return false + } else if that1.Duration != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepDouble) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return false + } + } else if this.RepDouble != nil { + return false + } else if that1.RepDouble != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return false + } + } else if this.RepFloat != nil { + return false + } else if that1.RepFloat != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return false + } + } else if this.RepInt64 != nil { + return false + } else if that1.RepInt64 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepUInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return false + } + } else if this.RepUInt64 != nil { + return false + } else if that1.RepUInt64 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return false + } + } else if this.RepInt32 != nil { + return false + } else if that1.RepInt32 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepUInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return false + } + } else if this.RepUInt32 != nil { + return false + } else if that1.RepUInt32 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepBool) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepBool) + if !ok { + that2, ok := that.(OneofStdTypes_RepBool) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return false + } + } else if this.RepBool != nil { + return false + } else if that1.RepBool != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepString) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepString) + if !ok { + that2, ok := that.(OneofStdTypes_RepString) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return false + } + } else if this.RepString != nil { + return false + } else if that1.RepString != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepBytes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepBytes) + if !ok { + that2, ok := that.(OneofStdTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.RepBytes == nil { + if this.RepBytes != nil { + return false + } + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return false + } + return true +} +func (m *KnownTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *KnownTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Dur != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Dur.Size())) + n1, err := m.Dur.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if m.Ts != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Ts.Size())) + n2, err := m.Ts.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + } + if m.Dbl != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Dbl.Size())) + n3, err := m.Dbl.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + } + if m.Flt != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Flt.Size())) + n4, err := m.Flt.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } + if m.I64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.I64.Size())) + n5, err := m.I64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + } + if m.U64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.U64.Size())) + n6, err := m.U64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + } + if m.I32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.I32.Size())) + n7, err := m.I32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + } + if m.U32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.U32.Size())) + n8, err := m.U32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + if m.Bool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Bool.Size())) + n9, err := m.Bool.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } + if m.Str != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Str.Size())) + n10, err := m.Str.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n10 + } + if m.Bytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Bytes.Size())) + n11, err := m.Bytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n11 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *ProtoTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProtoTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.NullableTimestamp != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableTimestamp.Size())) + n12, err := m.NullableTimestamp.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n12 + } + if m.NullableDuration != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableDuration.Size())) + n13, err := m.NullableDuration.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n13 + } + if m.NullableDouble != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableDouble.Size())) + n14, err := m.NullableDouble.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n14 + } + if m.NullableFloat != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableFloat.Size())) + n15, err := m.NullableFloat.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n15 + } + if m.NullableInt64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableInt64.Size())) + n16, err := m.NullableInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n16 + } + if m.NullableUInt64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableUInt64.Size())) + n17, err := m.NullableUInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n17 + } + if m.NullableInt32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableInt32.Size())) + n18, err := m.NullableInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n18 + } + if m.NullableUInt32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableUInt32.Size())) + n19, err := m.NullableUInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n19 + } + if m.NullableBool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableBool.Size())) + n20, err := m.NullableBool.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n20 + } + if m.NullableString != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableString.Size())) + n21, err := m.NullableString.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n21 + } + if m.NullableBytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableBytes.Size())) + n22, err := m.NullableBytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n22 + } + dAtA[i] = 0x62 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) + n23, err := m.Timestamp.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n23 + dAtA[i] = 0x6a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Duration.Size())) + n24, err := m.Duration.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n24 + dAtA[i] = 0x72 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullDouble.Size())) + n25, err := m.NonnullDouble.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n25 + dAtA[i] = 0x7a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullFloat.Size())) + n26, err := m.NonnullFloat.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n26 + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullInt64.Size())) + n27, err := m.NonnullInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n27 + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullUInt64.Size())) + n28, err := m.NonnullUInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n28 + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullInt32.Size())) + n29, err := m.NonnullInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n29 + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullUInt32.Size())) + n30, err := m.NonnullUInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n30 + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullBool.Size())) + n31, err := m.NonnullBool.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n31 + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullString.Size())) + n32, err := m.NonnullString.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n32 + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullBytes.Size())) + n33, err := m.NonnullBytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n33 + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *StdTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StdTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.NullableTimestamp != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp))) + n34, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.NullableTimestamp, dAtA[i:]) + if err != nil { + return 0, err + } + i += n34 + } + if m.NullableDuration != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration))) + n35, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.NullableDuration, dAtA[i:]) + if err != nil { + return 0, err + } + i += n35 + } + if m.NullableDouble != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*m.NullableDouble))) + n36, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*m.NullableDouble, dAtA[i:]) + if err != nil { + return 0, err + } + i += n36 + } + if m.NullableFloat != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*m.NullableFloat))) + n37, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*m.NullableFloat, dAtA[i:]) + if err != nil { + return 0, err + } + i += n37 + } + if m.NullableInt64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*m.NullableInt64))) + n38, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*m.NullableInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n38 + } + if m.NullableUInt64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.NullableUInt64))) + n39, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*m.NullableUInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n39 + } + if m.NullableInt32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*m.NullableInt32))) + n40, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*m.NullableInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n40 + } + if m.NullableUInt32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.NullableUInt32))) + n41, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.NullableUInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n41 + } + if m.NullableBool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*m.NullableBool))) + n42, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*m.NullableBool, dAtA[i:]) + if err != nil { + return 0, err + } + i += n42 + } + if m.NullableString != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*m.NullableString))) + n43, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*m.NullableString, dAtA[i:]) + if err != nil { + return 0, err + } + i += n43 + } + if m.NullableBytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*m.NullableBytes))) + n44, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*m.NullableBytes, dAtA[i:]) + if err != nil { + return 0, err + } + i += n44 + } + dAtA[i] = 0x62 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp))) + n45, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:]) + if err != nil { + return 0, err + } + i += n45 + dAtA[i] = 0x6a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration))) + n46, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Duration, dAtA[i:]) + if err != nil { + return 0, err + } + i += n46 + dAtA[i] = 0x72 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(m.NonnullDouble))) + n47, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(m.NonnullDouble, dAtA[i:]) + if err != nil { + return 0, err + } + i += n47 + dAtA[i] = 0x7a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(m.NonnullFloat))) + n48, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(m.NonnullFloat, dAtA[i:]) + if err != nil { + return 0, err + } + i += n48 + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(m.NonnullInt64))) + n49, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(m.NonnullInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n49 + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(m.NonnullUInt64))) + n50, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(m.NonnullUInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n50 + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(m.NonnullInt32))) + n51, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(m.NonnullInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n51 + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(m.NonnullUInt32))) + n52, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(m.NonnullUInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n52 + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(m.NonnullBool))) + n53, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(m.NonnullBool, dAtA[i:]) + if err != nil { + return 0, err + } + i += n53 + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(m.NonnullString))) + n54, err := github_com_gogo_protobuf_types.StdStringMarshalTo(m.NonnullString, dAtA[i:]) + if err != nil { + return 0, err + } + i += n54 + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(m.NonnullBytes))) + n55, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(m.NonnullBytes, dAtA[i:]) + if err != nil { + return 0, err + } + i += n55 + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *RepProtoTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RepProtoTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, msg := range m.NullableTimestamps { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableDurations) > 0 { + for _, msg := range m.NullableDurations { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Timestamps) > 0 { + for _, msg := range m.Timestamps { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Durations) > 0 { + for _, msg := range m.Durations { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableDouble) > 0 { + for _, msg := range m.NullableDouble { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullDouble) > 0 { + for _, msg := range m.NonnullDouble { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableFloat) > 0 { + for _, msg := range m.NullableFloat { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullFloat) > 0 { + for _, msg := range m.NonnullFloat { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableInt64) > 0 { + for _, msg := range m.NullableInt64 { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullInt64) > 0 { + for _, msg := range m.NonnullInt64 { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableUInt64) > 0 { + for _, msg := range m.NullableUInt64 { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullUInt64) > 0 { + for _, msg := range m.NonnullUInt64 { + dAtA[i] = 0x62 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableInt32) > 0 { + for _, msg := range m.NullableInt32 { + dAtA[i] = 0x6a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullInt32) > 0 { + for _, msg := range m.NonnullInt32 { + dAtA[i] = 0x72 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableUInt32) > 0 { + for _, msg := range m.NullableUInt32 { + dAtA[i] = 0x7a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullUInt32) > 0 { + for _, msg := range m.NonnullUInt32 { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableBool) > 0 { + for _, msg := range m.NullableBool { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullBool) > 0 { + for _, msg := range m.NonnullBool { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableString) > 0 { + for _, msg := range m.NullableString { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullString) > 0 { + for _, msg := range m.NonnullString { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableBytes) > 0 { + for _, msg := range m.NullableBytes { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullBytes) > 0 { + for _, msg := range m.NonnullBytes { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *RepStdTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RepStdTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, msg := range m.NullableTimestamps { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*msg))) + n, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableDurations) > 0 { + for _, msg := range m.NullableDurations { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*msg))) + n, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Timestamps) > 0 { + for _, msg := range m.Timestamps { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(msg))) + n, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Durations) > 0 { + for _, msg := range m.Durations { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(msg))) + n, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableDouble) > 0 { + for _, msg := range m.NullableDouble { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*msg))) + n, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullDouble) > 0 { + for _, msg := range m.NonnullDouble { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(msg))) + n, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableFloat) > 0 { + for _, msg := range m.NullableFloat { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*msg))) + n, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullFloat) > 0 { + for _, msg := range m.NonnullFloat { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(msg))) + n, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableInt64) > 0 { + for _, msg := range m.NullableInt64 { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*msg))) + n, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullInt64) > 0 { + for _, msg := range m.NonnullInt64 { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(msg))) + n, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableUInt64) > 0 { + for _, msg := range m.NullableUInt64 { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*msg))) + n, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullUInt64) > 0 { + for _, msg := range m.NonnullUInt64 { + dAtA[i] = 0x62 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(msg))) + n, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableInt32) > 0 { + for _, msg := range m.NullableInt32 { + dAtA[i] = 0x6a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*msg))) + n, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullInt32) > 0 { + for _, msg := range m.NonnullInt32 { + dAtA[i] = 0x72 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(msg))) + n, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableUInt32) > 0 { + for _, msg := range m.NullableUInt32 { + dAtA[i] = 0x7a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*msg))) + n, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullUInt32) > 0 { + for _, msg := range m.NonnullUInt32 { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(msg))) + n, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableBool) > 0 { + for _, msg := range m.NullableBool { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*msg))) + n, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullBool) > 0 { + for _, msg := range m.NonnullBool { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(msg))) + n, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableString) > 0 { + for _, msg := range m.NullableString { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*msg))) + n, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullString) > 0 { + for _, msg := range m.NonnullString { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(msg))) + n, err := github_com_gogo_protobuf_types.StdStringMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableBytes) > 0 { + for _, msg := range m.NullableBytes { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*msg))) + n, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullBytes) > 0 { + for _, msg := range m.NonnullBytes { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(msg))) + n, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *MapProtoTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MapProtoTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k := range m.NullableTimestamp { + dAtA[i] = 0xa + i++ + v := m.NullableTimestamp[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n56, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n56 + } + } + } + if len(m.Timestamp) > 0 { + for k := range m.Timestamp { + dAtA[i] = 0x12 + i++ + v := m.Timestamp[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n57, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n57 + } + } + if len(m.NullableDuration) > 0 { + for k := range m.NullableDuration { + dAtA[i] = 0x1a + i++ + v := m.NullableDuration[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n58, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n58 + } + } + } + if len(m.Duration) > 0 { + for k := range m.Duration { + dAtA[i] = 0x22 + i++ + v := m.Duration[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n59, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n59 + } + } + if len(m.NullableDouble) > 0 { + for k := range m.NullableDouble { + dAtA[i] = 0x2a + i++ + v := m.NullableDouble[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n60, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n60 + } + } + } + if len(m.NonnullDouble) > 0 { + for k := range m.NonnullDouble { + dAtA[i] = 0x32 + i++ + v := m.NonnullDouble[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n61, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n61 + } + } + if len(m.NullableFloat) > 0 { + for k := range m.NullableFloat { + dAtA[i] = 0x3a + i++ + v := m.NullableFloat[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n62, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n62 + } + } + } + if len(m.NonnullFloat) > 0 { + for k := range m.NonnullFloat { + dAtA[i] = 0x42 + i++ + v := m.NonnullFloat[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n63, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n63 + } + } + if len(m.NullableInt64) > 0 { + for k := range m.NullableInt64 { + dAtA[i] = 0x4a + i++ + v := m.NullableInt64[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n64, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n64 + } + } + } + if len(m.NonnullInt64) > 0 { + for k := range m.NonnullInt64 { + dAtA[i] = 0x52 + i++ + v := m.NonnullInt64[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n65, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n65 + } + } + if len(m.NullableUInt64) > 0 { + for k := range m.NullableUInt64 { + dAtA[i] = 0x5a + i++ + v := m.NullableUInt64[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n66, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n66 + } + } + } + if len(m.NonnullUInt64) > 0 { + for k := range m.NonnullUInt64 { + dAtA[i] = 0x62 + i++ + v := m.NonnullUInt64[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n67, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n67 + } + } + if len(m.NullableInt32) > 0 { + for k := range m.NullableInt32 { + dAtA[i] = 0x6a + i++ + v := m.NullableInt32[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n68, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n68 + } + } + } + if len(m.NonnullInt32) > 0 { + for k := range m.NonnullInt32 { + dAtA[i] = 0x72 + i++ + v := m.NonnullInt32[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n69, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n69 + } + } + if len(m.NullableUInt32) > 0 { + for k := range m.NullableUInt32 { + dAtA[i] = 0x7a + i++ + v := m.NullableUInt32[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n70, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n70 + } + } + } + if len(m.NonnullUInt32) > 0 { + for k := range m.NonnullUInt32 { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullUInt32[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n71, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n71 + } + } + if len(m.NullableBool) > 0 { + for k := range m.NullableBool { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableBool[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n72, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n72 + } + } + } + if len(m.NonnullBool) > 0 { + for k := range m.NonnullBool { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullBool[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n73, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n73 + } + } + if len(m.NullableString) > 0 { + for k := range m.NullableString { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableString[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n74, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n74 + } + } + } + if len(m.NonnullString) > 0 { + for k := range m.NonnullString { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullString[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n75, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n75 + } + } + if len(m.NullableBytes) > 0 { + for k := range m.NullableBytes { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableBytes[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n76, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n76 + } + } + } + if len(m.NonnullBytes) > 0 { + for k := range m.NonnullBytes { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullBytes[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n77, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n77 + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *MapStdTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MapStdTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k := range m.NullableTimestamp { + dAtA[i] = 0xa + i++ + v := m.NullableTimestamp[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdTime(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*v))) + n78, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n78 + } + } + } + if len(m.Timestamp) > 0 { + for k := range m.Timestamp { + dAtA[i] = 0x12 + i++ + v := m.Timestamp[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdTime(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*(&v)))) + n79, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n79 + } + } + if len(m.NullableDuration) > 0 { + for k := range m.NullableDuration { + dAtA[i] = 0x1a + i++ + v := m.NullableDuration[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*v))) + n80, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n80 + } + } + } + if len(m.Duration) > 0 { + for k := range m.Duration { + dAtA[i] = 0x22 + i++ + v := m.Duration[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdDuration(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*(&v)))) + n81, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n81 + } + } + if len(m.NullableDouble) > 0 { + for k := range m.NullableDouble { + dAtA[i] = 0x2a + i++ + v := m.NullableDouble[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdDouble(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*v))) + n82, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n82 + } + } + } + if len(m.NonnullDouble) > 0 { + for k := range m.NonnullDouble { + dAtA[i] = 0x32 + i++ + v := m.NonnullDouble[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdDouble(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*(&v)))) + n83, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n83 + } + } + if len(m.NullableFloat) > 0 { + for k := range m.NullableFloat { + dAtA[i] = 0x3a + i++ + v := m.NullableFloat[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdFloat(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*v))) + n84, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n84 + } + } + } + if len(m.NonnullFloat) > 0 { + for k := range m.NonnullFloat { + dAtA[i] = 0x42 + i++ + v := m.NonnullFloat[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdFloat(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*(&v)))) + n85, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n85 + } + } + if len(m.NullableInt64) > 0 { + for k := range m.NullableInt64 { + dAtA[i] = 0x4a + i++ + v := m.NullableInt64[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdInt64(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*v))) + n86, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n86 + } + } + } + if len(m.NonnullInt64) > 0 { + for k := range m.NonnullInt64 { + dAtA[i] = 0x52 + i++ + v := m.NonnullInt64[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdInt64(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*(&v)))) + n87, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n87 + } + } + if len(m.NullableUInt64) > 0 { + for k := range m.NullableUInt64 { + dAtA[i] = 0x5a + i++ + v := m.NullableUInt64[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdUInt64(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*v))) + n88, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n88 + } + } + } + if len(m.NonnullUInt64) > 0 { + for k := range m.NonnullUInt64 { + dAtA[i] = 0x62 + i++ + v := m.NonnullUInt64[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdUInt64(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*(&v)))) + n89, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n89 + } + } + if len(m.NullableInt32) > 0 { + for k := range m.NullableInt32 { + dAtA[i] = 0x6a + i++ + v := m.NullableInt32[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdInt32(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*v))) + n90, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n90 + } + } + } + if len(m.NonnullInt32) > 0 { + for k := range m.NonnullInt32 { + dAtA[i] = 0x72 + i++ + v := m.NonnullInt32[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdInt32(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*(&v)))) + n91, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n91 + } + } + if len(m.NullableUInt32) > 0 { + for k := range m.NullableUInt32 { + dAtA[i] = 0x7a + i++ + v := m.NullableUInt32[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdUInt32(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*v))) + n92, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n92 + } + } + } + if len(m.NonnullUInt32) > 0 { + for k := range m.NonnullUInt32 { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullUInt32[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdUInt32(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*(&v)))) + n93, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n93 + } + } + if len(m.NullableBool) > 0 { + for k := range m.NullableBool { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableBool[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdBool(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*v))) + n94, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n94 + } + } + } + if len(m.NonnullBool) > 0 { + for k := range m.NonnullBool { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullBool[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdBool(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*(&v)))) + n95, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n95 + } + } + if len(m.NullableString) > 0 { + for k := range m.NullableString { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableString[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdString(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*v))) + n96, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n96 + } + } + } + if len(m.NonnullString) > 0 { + for k := range m.NonnullString { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullString[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdString(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*(&v)))) + n97, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n97 + } + } + if len(m.NullableBytes) > 0 { + for k := range m.NullableBytes { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableBytes[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdBytes(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*v))) + n98, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n98 + } + } + } + if len(m.NonnullBytes) > 0 { + for k := range m.NonnullBytes { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullBytes[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdBytes(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*(&v)))) + n99, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n99 + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *OneofProtoTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OneofProtoTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.OneOfProtoTimes != nil { + nn100, err := m.OneOfProtoTimes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn100 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *OneofProtoTypes_Timestamp) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Timestamp != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) + n101, err := m.Timestamp.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n101 + } + return i, nil +} +func (m *OneofProtoTypes_Duration) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Duration != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Duration.Size())) + n102, err := m.Duration.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n102 + } + return i, nil +} +func (m *OneofProtoTypes_RepDouble) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepDouble != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepDouble.Size())) + n103, err := m.RepDouble.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n103 + } + return i, nil +} +func (m *OneofProtoTypes_RepFloat) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepFloat != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepFloat.Size())) + n104, err := m.RepFloat.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n104 + } + return i, nil +} +func (m *OneofProtoTypes_RepInt64) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepInt64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepInt64.Size())) + n105, err := m.RepInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n105 + } + return i, nil +} +func (m *OneofProtoTypes_RepUInt64) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepUInt64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepUInt64.Size())) + n106, err := m.RepUInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n106 + } + return i, nil +} +func (m *OneofProtoTypes_RepInt32) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepInt32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepInt32.Size())) + n107, err := m.RepInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n107 + } + return i, nil +} +func (m *OneofProtoTypes_RepUInt32) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepUInt32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepUInt32.Size())) + n108, err := m.RepUInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n108 + } + return i, nil +} +func (m *OneofProtoTypes_RepBool) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepBool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepBool.Size())) + n109, err := m.RepBool.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n109 + } + return i, nil +} +func (m *OneofProtoTypes_RepString) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepString != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepString.Size())) + n110, err := m.RepString.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n110 + } + return i, nil +} +func (m *OneofProtoTypes_RepBytes) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepBytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepBytes.Size())) + n111, err := m.RepBytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n111 + } + return i, nil +} +func (m *OneofStdTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OneofStdTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.OneOfStdTimes != nil { + nn112, err := m.OneOfStdTimes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn112 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *OneofStdTypes_Timestamp) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Timestamp != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Timestamp))) + n113, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Timestamp, dAtA[i:]) + if err != nil { + return 0, err + } + i += n113 + } + return i, nil +} +func (m *OneofStdTypes_Duration) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Duration != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Duration))) + n114, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Duration, dAtA[i:]) + if err != nil { + return 0, err + } + i += n114 + } + return i, nil +} +func (m *OneofStdTypes_RepDouble) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepDouble != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*m.RepDouble))) + n115, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*m.RepDouble, dAtA[i:]) + if err != nil { + return 0, err + } + i += n115 + } + return i, nil +} +func (m *OneofStdTypes_RepFloat) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepFloat != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*m.RepFloat))) + n116, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*m.RepFloat, dAtA[i:]) + if err != nil { + return 0, err + } + i += n116 + } + return i, nil +} +func (m *OneofStdTypes_RepInt64) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepInt64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*m.RepInt64))) + n117, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*m.RepInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n117 + } + return i, nil +} +func (m *OneofStdTypes_RepUInt64) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepUInt64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.RepUInt64))) + n118, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*m.RepUInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n118 + } + return i, nil +} +func (m *OneofStdTypes_RepInt32) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepInt32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*m.RepInt32))) + n119, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*m.RepInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n119 + } + return i, nil +} +func (m *OneofStdTypes_RepUInt32) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepUInt32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.RepUInt32))) + n120, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.RepUInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n120 + } + return i, nil +} +func (m *OneofStdTypes_RepBool) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepBool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*m.RepBool))) + n121, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*m.RepBool, dAtA[i:]) + if err != nil { + return 0, err + } + i += n121 + } + return i, nil +} +func (m *OneofStdTypes_RepString) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepString != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*m.RepString))) + n122, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*m.RepString, dAtA[i:]) + if err != nil { + return 0, err + } + i += n122 + } + return i, nil +} +func (m *OneofStdTypes_RepBytes) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepBytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*m.RepBytes))) + n123, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*m.RepBytes, dAtA[i:]) + if err != nil { + return 0, err + } + i += n123 + } + return i, nil +} +func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func NewPopulatedKnownTypes(r randyTypes, easy bool) *KnownTypes { + this := &KnownTypes{} + if r.Intn(10) != 0 { + this.Dur = types.NewPopulatedDuration(r, easy) + } + if r.Intn(10) != 0 { + this.Ts = types.NewPopulatedTimestamp(r, easy) + } + if r.Intn(10) != 0 { + this.Dbl = types.NewPopulatedDoubleValue(r, easy) + } + if r.Intn(10) != 0 { + this.Flt = types.NewPopulatedFloatValue(r, easy) + } + if r.Intn(10) != 0 { + this.I64 = types.NewPopulatedInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.U64 = types.NewPopulatedUInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.I32 = types.NewPopulatedInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.U32 = types.NewPopulatedUInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.Bool = types.NewPopulatedBoolValue(r, easy) + } + if r.Intn(10) != 0 { + this.Str = types.NewPopulatedStringValue(r, easy) + } + if r.Intn(10) != 0 { + this.Bytes = types.NewPopulatedBytesValue(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedProtoTypes(r randyTypes, easy bool) *ProtoTypes { + this := &ProtoTypes{} + if r.Intn(10) != 0 { + this.NullableTimestamp = types.NewPopulatedTimestamp(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDuration = types.NewPopulatedDuration(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDouble = types.NewPopulatedDoubleValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableFloat = types.NewPopulatedFloatValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt64 = types.NewPopulatedInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt64 = types.NewPopulatedUInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt32 = types.NewPopulatedInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt32 = types.NewPopulatedUInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBool = types.NewPopulatedBoolValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableString = types.NewPopulatedStringValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBytes = types.NewPopulatedBytesValue(r, easy) + } + v1 := types.NewPopulatedTimestamp(r, easy) + this.Timestamp = *v1 + v2 := types.NewPopulatedDuration(r, easy) + this.Duration = *v2 + v3 := types.NewPopulatedDoubleValue(r, easy) + this.NonnullDouble = *v3 + v4 := types.NewPopulatedFloatValue(r, easy) + this.NonnullFloat = *v4 + v5 := types.NewPopulatedInt64Value(r, easy) + this.NonnullInt64 = *v5 + v6 := types.NewPopulatedUInt64Value(r, easy) + this.NonnullUInt64 = *v6 + v7 := types.NewPopulatedInt32Value(r, easy) + this.NonnullInt32 = *v7 + v8 := types.NewPopulatedUInt32Value(r, easy) + this.NonnullUInt32 = *v8 + v9 := types.NewPopulatedBoolValue(r, easy) + this.NonnullBool = *v9 + v10 := types.NewPopulatedStringValue(r, easy) + this.NonnullString = *v10 + v11 := types.NewPopulatedBytesValue(r, easy) + this.NonnullBytes = *v11 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedStdTypes(r randyTypes, easy bool) *StdTypes { + this := &StdTypes{} + if r.Intn(10) != 0 { + this.NullableTimestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDuration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + if r.Intn(10) != 0 { + this.NullableFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } + if r.Intn(10) != 0 { + this.NullableString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + } + v12 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamp = *v12 + v13 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Duration = *v13 + v14 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble = *v14 + v15 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat = *v15 + v16 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64 = *v16 + v17 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64 = *v17 + v18 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32 = *v18 + v19 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32 = *v19 + v20 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool = *v20 + v21 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString = *v21 + v22 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes = *v22 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedRepProtoTypes(r randyTypes, easy bool) *RepProtoTypes { + this := &RepProtoTypes{} + if r.Intn(10) != 0 { + v23 := r.Intn(5) + this.NullableTimestamps = make([]*types.Timestamp, v23) + for i := 0; i < v23; i++ { + this.NullableTimestamps[i] = types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v24 := r.Intn(5) + this.NullableDurations = make([]*types.Duration, v24) + for i := 0; i < v24; i++ { + this.NullableDurations[i] = types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v25 := r.Intn(5) + this.Timestamps = make([]types.Timestamp, v25) + for i := 0; i < v25; i++ { + v26 := types.NewPopulatedTimestamp(r, easy) + this.Timestamps[i] = *v26 + } + } + if r.Intn(10) != 0 { + v27 := r.Intn(5) + this.Durations = make([]types.Duration, v27) + for i := 0; i < v27; i++ { + v28 := types.NewPopulatedDuration(r, easy) + this.Durations[i] = *v28 + } + } + if r.Intn(10) != 0 { + v29 := r.Intn(5) + this.NullableDouble = make([]*types.DoubleValue, v29) + for i := 0; i < v29; i++ { + this.NullableDouble[i] = types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v30 := r.Intn(5) + this.NonnullDouble = make([]types.DoubleValue, v30) + for i := 0; i < v30; i++ { + v31 := types.NewPopulatedDoubleValue(r, easy) + this.NonnullDouble[i] = *v31 + } + } + if r.Intn(10) != 0 { + v32 := r.Intn(5) + this.NullableFloat = make([]*types.FloatValue, v32) + for i := 0; i < v32; i++ { + this.NullableFloat[i] = types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v33 := r.Intn(5) + this.NonnullFloat = make([]types.FloatValue, v33) + for i := 0; i < v33; i++ { + v34 := types.NewPopulatedFloatValue(r, easy) + this.NonnullFloat[i] = *v34 + } + } + if r.Intn(10) != 0 { + v35 := r.Intn(5) + this.NullableInt64 = make([]*types.Int64Value, v35) + for i := 0; i < v35; i++ { + this.NullableInt64[i] = types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v36 := r.Intn(5) + this.NonnullInt64 = make([]types.Int64Value, v36) + for i := 0; i < v36; i++ { + v37 := types.NewPopulatedInt64Value(r, easy) + this.NonnullInt64[i] = *v37 + } + } + if r.Intn(10) != 0 { + v38 := r.Intn(5) + this.NullableUInt64 = make([]*types.UInt64Value, v38) + for i := 0; i < v38; i++ { + this.NullableUInt64[i] = types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v39 := r.Intn(5) + this.NonnullUInt64 = make([]types.UInt64Value, v39) + for i := 0; i < v39; i++ { + v40 := types.NewPopulatedUInt64Value(r, easy) + this.NonnullUInt64[i] = *v40 + } + } + if r.Intn(10) != 0 { + v41 := r.Intn(5) + this.NullableInt32 = make([]*types.Int32Value, v41) + for i := 0; i < v41; i++ { + this.NullableInt32[i] = types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v42 := r.Intn(5) + this.NonnullInt32 = make([]types.Int32Value, v42) + for i := 0; i < v42; i++ { + v43 := types.NewPopulatedInt32Value(r, easy) + this.NonnullInt32[i] = *v43 + } + } + if r.Intn(10) != 0 { + v44 := r.Intn(5) + this.NullableUInt32 = make([]*types.UInt32Value, v44) + for i := 0; i < v44; i++ { + this.NullableUInt32[i] = types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v45 := r.Intn(5) + this.NonnullUInt32 = make([]types.UInt32Value, v45) + for i := 0; i < v45; i++ { + v46 := types.NewPopulatedUInt32Value(r, easy) + this.NonnullUInt32[i] = *v46 + } + } + if r.Intn(10) != 0 { + v47 := r.Intn(5) + this.NullableBool = make([]*types.BoolValue, v47) + for i := 0; i < v47; i++ { + this.NullableBool[i] = types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v48 := r.Intn(5) + this.NonnullBool = make([]types.BoolValue, v48) + for i := 0; i < v48; i++ { + v49 := types.NewPopulatedBoolValue(r, easy) + this.NonnullBool[i] = *v49 + } + } + if r.Intn(10) != 0 { + v50 := r.Intn(5) + this.NullableString = make([]*types.StringValue, v50) + for i := 0; i < v50; i++ { + this.NullableString[i] = types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v51 := r.Intn(5) + this.NonnullString = make([]types.StringValue, v51) + for i := 0; i < v51; i++ { + v52 := types.NewPopulatedStringValue(r, easy) + this.NonnullString[i] = *v52 + } + } + if r.Intn(10) != 0 { + v53 := r.Intn(5) + this.NullableBytes = make([]*types.BytesValue, v53) + for i := 0; i < v53; i++ { + this.NullableBytes[i] = types.NewPopulatedBytesValue(r, easy) + } + } + if r.Intn(10) != 0 { + v54 := r.Intn(5) + this.NonnullBytes = make([]types.BytesValue, v54) + for i := 0; i < v54; i++ { + v55 := types.NewPopulatedBytesValue(r, easy) + this.NonnullBytes[i] = *v55 + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedRepStdTypes(r randyTypes, easy bool) *RepStdTypes { + this := &RepStdTypes{} + if r.Intn(10) != 0 { + v56 := r.Intn(5) + this.NullableTimestamps = make([]*time.Time, v56) + for i := 0; i < v56; i++ { + this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v57 := r.Intn(5) + this.NullableDurations = make([]*time.Duration, v57) + for i := 0; i < v57; i++ { + this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v58 := r.Intn(5) + this.Timestamps = make([]time.Time, v58) + for i := 0; i < v58; i++ { + v59 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamps[i] = *v59 + } + } + if r.Intn(10) != 0 { + v60 := r.Intn(5) + this.Durations = make([]time.Duration, v60) + for i := 0; i < v60; i++ { + v61 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Durations[i] = *v61 + } + } + if r.Intn(10) != 0 { + v62 := r.Intn(5) + this.NullableDouble = make([]*float64, v62) + for i := 0; i < v62; i++ { + this.NullableDouble[i] = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + } + if r.Intn(10) != 0 { + v63 := r.Intn(5) + this.NonnullDouble = make([]float64, v63) + for i := 0; i < v63; i++ { + v64 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble[i] = *v64 + } + } + if r.Intn(10) != 0 { + v65 := r.Intn(5) + this.NullableFloat = make([]*float32, v65) + for i := 0; i < v65; i++ { + this.NullableFloat[i] = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + } + if r.Intn(10) != 0 { + v66 := r.Intn(5) + this.NonnullFloat = make([]float32, v66) + for i := 0; i < v66; i++ { + v67 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat[i] = *v67 + } + } + if r.Intn(10) != 0 { + v68 := r.Intn(5) + this.NullableInt64 = make([]*int64, v68) + for i := 0; i < v68; i++ { + this.NullableInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + } + if r.Intn(10) != 0 { + v69 := r.Intn(5) + this.NonnullInt64 = make([]int64, v69) + for i := 0; i < v69; i++ { + v70 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64[i] = *v70 + } + } + if r.Intn(10) != 0 { + v71 := r.Intn(5) + this.NullableUInt64 = make([]*uint64, v71) + for i := 0; i < v71; i++ { + this.NullableUInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + } + if r.Intn(10) != 0 { + v72 := r.Intn(5) + this.NonnullUInt64 = make([]uint64, v72) + for i := 0; i < v72; i++ { + v73 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64[i] = *v73 + } + } + if r.Intn(10) != 0 { + v74 := r.Intn(5) + this.NullableInt32 = make([]*int32, v74) + for i := 0; i < v74; i++ { + this.NullableInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v75 := r.Intn(5) + this.NonnullInt32 = make([]int32, v75) + for i := 0; i < v75; i++ { + v76 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32[i] = *v76 + } + } + if r.Intn(10) != 0 { + v77 := r.Intn(5) + this.NullableUInt32 = make([]*uint32, v77) + for i := 0; i < v77; i++ { + this.NullableUInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v78 := r.Intn(5) + this.NonnullUInt32 = make([]uint32, v78) + for i := 0; i < v78; i++ { + v79 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32[i] = *v79 + } + } + if r.Intn(10) != 0 { + v80 := r.Intn(5) + this.NullableBool = make([]*bool, v80) + for i := 0; i < v80; i++ { + this.NullableBool[i] = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } + } + if r.Intn(10) != 0 { + v81 := r.Intn(5) + this.NonnullBool = make([]bool, v81) + for i := 0; i < v81; i++ { + v82 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool[i] = *v82 + } + } + if r.Intn(10) != 0 { + v83 := r.Intn(5) + this.NullableString = make([]*string, v83) + for i := 0; i < v83; i++ { + this.NullableString[i] = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } + } + if r.Intn(10) != 0 { + v84 := r.Intn(5) + this.NonnullString = make([]string, v84) + for i := 0; i < v84; i++ { + v85 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString[i] = *v85 + } + } + if r.Intn(10) != 0 { + v86 := r.Intn(5) + this.NullableBytes = make([]*[]byte, v86) + for i := 0; i < v86; i++ { + this.NullableBytes[i] = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + } + } + if r.Intn(10) != 0 { + v87 := r.Intn(5) + this.NonnullBytes = make([][]byte, v87) + for i := 0; i < v87; i++ { + v88 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes[i] = *v88 + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedMapProtoTypes(r randyTypes, easy bool) *MapProtoTypes { + this := &MapProtoTypes{} + if r.Intn(10) != 0 { + v89 := r.Intn(10) + this.NullableTimestamp = make(map[int32]*types.Timestamp) + for i := 0; i < v89; i++ { + this.NullableTimestamp[int32(r.Int31())] = types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v90 := r.Intn(10) + this.Timestamp = make(map[int32]types.Timestamp) + for i := 0; i < v90; i++ { + this.Timestamp[int32(r.Int31())] = *types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v91 := r.Intn(10) + this.NullableDuration = make(map[int32]*types.Duration) + for i := 0; i < v91; i++ { + this.NullableDuration[int32(r.Int31())] = types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v92 := r.Intn(10) + this.Duration = make(map[int32]types.Duration) + for i := 0; i < v92; i++ { + this.Duration[int32(r.Int31())] = *types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v93 := r.Intn(10) + this.NullableDouble = make(map[int32]*types.DoubleValue) + for i := 0; i < v93; i++ { + this.NullableDouble[int32(r.Int31())] = types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v94 := r.Intn(10) + this.NonnullDouble = make(map[int32]types.DoubleValue) + for i := 0; i < v94; i++ { + this.NonnullDouble[int32(r.Int31())] = *types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v95 := r.Intn(10) + this.NullableFloat = make(map[int32]*types.FloatValue) + for i := 0; i < v95; i++ { + this.NullableFloat[int32(r.Int31())] = types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v96 := r.Intn(10) + this.NonnullFloat = make(map[int32]types.FloatValue) + for i := 0; i < v96; i++ { + this.NonnullFloat[int32(r.Int31())] = *types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v97 := r.Intn(10) + this.NullableInt64 = make(map[int32]*types.Int64Value) + for i := 0; i < v97; i++ { + this.NullableInt64[int32(r.Int31())] = types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v98 := r.Intn(10) + this.NonnullInt64 = make(map[int32]types.Int64Value) + for i := 0; i < v98; i++ { + this.NonnullInt64[int32(r.Int31())] = *types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v99 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*types.UInt64Value) + for i := 0; i < v99; i++ { + this.NullableUInt64[int32(r.Int31())] = types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v100 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]types.UInt64Value) + for i := 0; i < v100; i++ { + this.NonnullUInt64[int32(r.Int31())] = *types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v101 := r.Intn(10) + this.NullableInt32 = make(map[int32]*types.Int32Value) + for i := 0; i < v101; i++ { + this.NullableInt32[int32(r.Int31())] = types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v102 := r.Intn(10) + this.NonnullInt32 = make(map[int32]types.Int32Value) + for i := 0; i < v102; i++ { + this.NonnullInt32[int32(r.Int31())] = *types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v103 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*types.UInt32Value) + for i := 0; i < v103; i++ { + this.NullableUInt32[int32(r.Int31())] = types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v104 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]types.UInt32Value) + for i := 0; i < v104; i++ { + this.NonnullUInt32[int32(r.Int31())] = *types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v105 := r.Intn(10) + this.NullableBool = make(map[int32]*types.BoolValue) + for i := 0; i < v105; i++ { + this.NullableBool[int32(r.Int31())] = types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v106 := r.Intn(10) + this.NonnullBool = make(map[int32]types.BoolValue) + for i := 0; i < v106; i++ { + this.NonnullBool[int32(r.Int31())] = *types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v107 := r.Intn(10) + this.NullableString = make(map[int32]*types.StringValue) + for i := 0; i < v107; i++ { + this.NullableString[int32(r.Int31())] = types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v108 := r.Intn(10) + this.NonnullString = make(map[int32]types.StringValue) + for i := 0; i < v108; i++ { + this.NonnullString[int32(r.Int31())] = *types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v109 := r.Intn(10) + this.NullableBytes = make(map[int32]*types.BytesValue) + for i := 0; i < v109; i++ { + this.NullableBytes[int32(r.Int31())] = types.NewPopulatedBytesValue(r, easy) + } + } + if r.Intn(10) != 0 { + v110 := r.Intn(10) + this.NonnullBytes = make(map[int32]types.BytesValue) + for i := 0; i < v110; i++ { + this.NonnullBytes[int32(r.Int31())] = *types.NewPopulatedBytesValue(r, easy) + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedMapStdTypes(r randyTypes, easy bool) *MapStdTypes { + this := &MapStdTypes{} + if r.Intn(10) != 0 { + v111 := r.Intn(10) + this.NullableTimestamp = make(map[int32]*time.Time) + for i := 0; i < v111; i++ { + this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v112 := r.Intn(10) + this.Timestamp = make(map[int32]time.Time) + for i := 0; i < v112; i++ { + this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v113 := r.Intn(10) + this.NullableDuration = make(map[int32]*time.Duration) + for i := 0; i < v113; i++ { + this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v114 := r.Intn(10) + this.Duration = make(map[int32]time.Duration) + for i := 0; i < v114; i++ { + this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v115 := r.Intn(10) + this.NullableDouble = make(map[int32]*float64) + for i := 0; i < v115; i++ { + this.NullableDouble[int32(r.Int31())] = (*float64)(github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } + } + if r.Intn(10) != 0 { + v116 := r.Intn(10) + this.NonnullDouble = make(map[int32]float64) + for i := 0; i < v116; i++ { + this.NonnullDouble[int32(r.Int31())] = (float64)(*github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } + } + if r.Intn(10) != 0 { + v117 := r.Intn(10) + this.NullableFloat = make(map[int32]*float32) + for i := 0; i < v117; i++ { + this.NullableFloat[int32(r.Int31())] = (*float32)(github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } + } + if r.Intn(10) != 0 { + v118 := r.Intn(10) + this.NonnullFloat = make(map[int32]float32) + for i := 0; i < v118; i++ { + this.NonnullFloat[int32(r.Int31())] = (float32)(*github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } + } + if r.Intn(10) != 0 { + v119 := r.Intn(10) + this.NullableInt64 = make(map[int32]*int64) + for i := 0; i < v119; i++ { + this.NullableInt64[int32(r.Int31())] = (*int64)(github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v120 := r.Intn(10) + this.NonnullInt64 = make(map[int32]int64) + for i := 0; i < v120; i++ { + this.NonnullInt64[int32(r.Int31())] = (int64)(*github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v121 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*uint64) + for i := 0; i < v121; i++ { + this.NullableUInt64[int32(r.Int31())] = (*uint64)(github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v122 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]uint64) + for i := 0; i < v122; i++ { + this.NonnullUInt64[int32(r.Int31())] = (uint64)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v123 := r.Intn(10) + this.NullableInt32 = make(map[int32]*int32) + for i := 0; i < v123; i++ { + this.NullableInt32[int32(r.Int31())] = (*int32)(github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v124 := r.Intn(10) + this.NonnullInt32 = make(map[int32]int32) + for i := 0; i < v124; i++ { + this.NonnullInt32[int32(r.Int31())] = (int32)(*github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v125 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*uint32) + for i := 0; i < v125; i++ { + this.NullableUInt32[int32(r.Int31())] = (*uint32)(github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v126 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]uint32) + for i := 0; i < v126; i++ { + this.NonnullUInt32[int32(r.Int31())] = (uint32)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v127 := r.Intn(10) + this.NullableBool = make(map[int32]*bool) + for i := 0; i < v127; i++ { + this.NullableBool[int32(r.Int31())] = (*bool)(github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } + } + if r.Intn(10) != 0 { + v128 := r.Intn(10) + this.NonnullBool = make(map[int32]bool) + for i := 0; i < v128; i++ { + this.NonnullBool[int32(r.Int31())] = (bool)(*github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } + } + if r.Intn(10) != 0 { + v129 := r.Intn(10) + this.NullableString = make(map[int32]*string) + for i := 0; i < v129; i++ { + this.NullableString[int32(r.Int31())] = (*string)(github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } + } + if r.Intn(10) != 0 { + v130 := r.Intn(10) + this.NonnullString = make(map[int32]string) + for i := 0; i < v130; i++ { + this.NonnullString[int32(r.Int31())] = (string)(*github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } + } + if r.Intn(10) != 0 { + v131 := r.Intn(10) + this.NullableBytes = make(map[int32]*[]byte) + for i := 0; i < v131; i++ { + this.NullableBytes[int32(r.Int31())] = (*[]byte)(github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } + } + if r.Intn(10) != 0 { + v132 := r.Intn(10) + this.NonnullBytes = make(map[int32][]byte) + for i := 0; i < v132; i++ { + this.NonnullBytes[int32(r.Int31())] = ([]byte)(*github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedOneofProtoTypes(r randyTypes, easy bool) *OneofProtoTypes { + this := &OneofProtoTypes{} + oneofNumber_OneOfProtoTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] + switch oneofNumber_OneOfProtoTimes { + case 1: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Timestamp(r, easy) + case 2: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Duration(r, easy) + case 3: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepDouble(r, easy) + case 4: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepFloat(r, easy) + case 5: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepInt64(r, easy) + case 6: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepUInt64(r, easy) + case 7: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepInt32(r, easy) + case 8: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepUInt32(r, easy) + case 9: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepBool(r, easy) + case 10: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepString(r, easy) + case 11: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepBytes(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedOneofProtoTypes_Timestamp(r randyTypes, easy bool) *OneofProtoTypes_Timestamp { + this := &OneofProtoTypes_Timestamp{} + this.Timestamp = types.NewPopulatedTimestamp(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_Duration(r randyTypes, easy bool) *OneofProtoTypes_Duration { + this := &OneofProtoTypes_Duration{} + this.Duration = types.NewPopulatedDuration(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepDouble(r randyTypes, easy bool) *OneofProtoTypes_RepDouble { + this := &OneofProtoTypes_RepDouble{} + this.RepDouble = types.NewPopulatedDoubleValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepFloat(r randyTypes, easy bool) *OneofProtoTypes_RepFloat { + this := &OneofProtoTypes_RepFloat{} + this.RepFloat = types.NewPopulatedFloatValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepInt64(r randyTypes, easy bool) *OneofProtoTypes_RepInt64 { + this := &OneofProtoTypes_RepInt64{} + this.RepInt64 = types.NewPopulatedInt64Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepUInt64(r randyTypes, easy bool) *OneofProtoTypes_RepUInt64 { + this := &OneofProtoTypes_RepUInt64{} + this.RepUInt64 = types.NewPopulatedUInt64Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepInt32(r randyTypes, easy bool) *OneofProtoTypes_RepInt32 { + this := &OneofProtoTypes_RepInt32{} + this.RepInt32 = types.NewPopulatedInt32Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepUInt32(r randyTypes, easy bool) *OneofProtoTypes_RepUInt32 { + this := &OneofProtoTypes_RepUInt32{} + this.RepUInt32 = types.NewPopulatedUInt32Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepBool(r randyTypes, easy bool) *OneofProtoTypes_RepBool { + this := &OneofProtoTypes_RepBool{} + this.RepBool = types.NewPopulatedBoolValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepString(r randyTypes, easy bool) *OneofProtoTypes_RepString { + this := &OneofProtoTypes_RepString{} + this.RepString = types.NewPopulatedStringValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepBytes(r randyTypes, easy bool) *OneofProtoTypes_RepBytes { + this := &OneofProtoTypes_RepBytes{} + this.RepBytes = types.NewPopulatedBytesValue(r, easy) + return this +} +func NewPopulatedOneofStdTypes(r randyTypes, easy bool) *OneofStdTypes { + this := &OneofStdTypes{} + oneofNumber_OneOfStdTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] + switch oneofNumber_OneOfStdTimes { + case 1: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) + case 2: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) + case 3: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepDouble(r, easy) + case 4: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepFloat(r, easy) + case 5: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt64(r, easy) + case 6: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt64(r, easy) + case 7: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt32(r, easy) + case 8: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt32(r, easy) + case 9: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBool(r, easy) + case 10: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepString(r, easy) + case 11: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBytes(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedOneofStdTypes_Timestamp(r randyTypes, easy bool) *OneofStdTypes_Timestamp { + this := &OneofStdTypes_Timestamp{} + this.Timestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + return this +} +func NewPopulatedOneofStdTypes_Duration(r randyTypes, easy bool) *OneofStdTypes_Duration { + this := &OneofStdTypes_Duration{} + this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepDouble(r randyTypes, easy bool) *OneofStdTypes_RepDouble { + this := &OneofStdTypes_RepDouble{} + this.RepDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepFloat(r randyTypes, easy bool) *OneofStdTypes_RepFloat { + this := &OneofStdTypes_RepFloat{} + this.RepFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt64(r randyTypes, easy bool) *OneofStdTypes_RepInt64 { + this := &OneofStdTypes_RepInt64{} + this.RepInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt64(r randyTypes, easy bool) *OneofStdTypes_RepUInt64 { + this := &OneofStdTypes_RepUInt64{} + this.RepUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt32(r randyTypes, easy bool) *OneofStdTypes_RepInt32 { + this := &OneofStdTypes_RepInt32{} + this.RepInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt32(r randyTypes, easy bool) *OneofStdTypes_RepUInt32 { + this := &OneofStdTypes_RepUInt32{} + this.RepUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBool(r randyTypes, easy bool) *OneofStdTypes_RepBool { + this := &OneofStdTypes_RepBool{} + this.RepBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepString(r randyTypes, easy bool) *OneofStdTypes_RepString { + this := &OneofStdTypes_RepString{} + this.RepString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBytes(r randyTypes, easy bool) *OneofStdTypes_RepBytes { + this := &OneofStdTypes_RepBytes{} + this.RepBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + return this +} + +type randyTypes interface { + Float32() float32 + Float64() float64 + Int63() int64 + Int31() int32 + Uint32() uint32 + Intn(n int) int +} + +func randUTF8RuneTypes(r randyTypes) rune { + ru := r.Intn(62) + if ru < 10 { + return rune(ru + 48) + } else if ru < 36 { + return rune(ru + 55) + } + return rune(ru + 61) +} +func randStringTypes(r randyTypes) string { + v133 := r.Intn(100) + tmps := make([]rune, v133) + for i := 0; i < v133; i++ { + tmps[i] = randUTF8RuneTypes(r) + } + return string(tmps) +} +func randUnrecognizedTypes(r randyTypes, maxFieldNumber int) (dAtA []byte) { + l := r.Intn(5) + for i := 0; i < l; i++ { + wire := r.Intn(4) + if wire == 3 { + wire = 5 + } + fieldNumber := maxFieldNumber + r.Intn(100) + dAtA = randFieldTypes(dAtA, r, fieldNumber, wire) + } + return dAtA +} +func randFieldTypes(dAtA []byte, r randyTypes, fieldNumber int, wire int) []byte { + key := uint32(fieldNumber)<<3 | uint32(wire) + switch wire { + case 0: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + v134 := r.Int63() + if r.Intn(2) == 0 { + v134 *= -1 + } + dAtA = encodeVarintPopulateTypes(dAtA, uint64(v134)) + case 1: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + case 2: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + ll := r.Intn(100) + dAtA = encodeVarintPopulateTypes(dAtA, uint64(ll)) + for j := 0; j < ll; j++ { + dAtA = append(dAtA, byte(r.Intn(256))) + } + default: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + } + return dAtA +} +func encodeVarintPopulateTypes(dAtA []byte, v uint64) []byte { + for v >= 1<<7 { + dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) + v >>= 7 + } + dAtA = append(dAtA, uint8(v)) + return dAtA +} +func (m *KnownTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Dur != nil { + l = m.Dur.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Ts != nil { + l = m.Ts.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Dbl != nil { + l = m.Dbl.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Flt != nil { + l = m.Flt.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.I64 != nil { + l = m.I64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.U64 != nil { + l = m.U64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.I32 != nil { + l = m.I32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.U32 != nil { + l = m.U32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Bool != nil { + l = m.Bool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Str != nil { + l = m.Str.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Bytes != nil { + l = m.Bytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NullableTimestamp != nil { + l = m.NullableTimestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDuration != nil { + l = m.NullableDuration.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDouble != nil { + l = m.NullableDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableFloat != nil { + l = m.NullableFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt64 != nil { + l = m.NullableInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt64 != nil { + l = m.NullableUInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt32 != nil { + l = m.NullableInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt32 != nil { + l = m.NullableUInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBool != nil { + l = m.NullableBool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableString != nil { + l = m.NullableString.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBytes != nil { + l = m.NullableBytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + l = m.Timestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.Duration.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullInt64.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullUInt64.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullInt32.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullUInt32.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullBool.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullString.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullBytes.Size() + n += 2 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *StdTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NullableTimestamp != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDuration != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.NullableDouble) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.NullableFloat) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.NullableInt64) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.NullableUInt64) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.NullableInt32) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.NullableUInt32) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.NullableBool) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.NullableString) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.NullableBytes) + n += 1 + l + sovTypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDouble(m.NonnullDouble) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdFloat(m.NonnullFloat) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdInt64(m.NonnullInt64) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(m.NonnullUInt64) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdInt32(m.NonnullInt32) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(m.NonnullUInt32) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdBool(m.NonnullBool) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdString(m.NonnullString) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdBytes(m.NonnullBytes) + n += 2 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *RepProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, e := range m.NullableTimestamps { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDurations) > 0 { + for _, e := range m.NullableDurations { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Timestamps) > 0 { + for _, e := range m.Timestamps { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Durations) > 0 { + for _, e := range m.Durations { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *RepStdTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, e := range m.NullableTimestamps { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDurations) > 0 { + for _, e := range m.NullableDurations { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Timestamps) > 0 { + for _, e := range m.Timestamps { + l = github_com_gogo_protobuf_types.SizeOfStdTime(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Durations) > 0 { + for _, e := range m.Durations { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = github_com_gogo_protobuf_types.SizeOfStdString(*e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = github_com_gogo_protobuf_types.SizeOfStdString(e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *MapProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k, v := range m.NullableTimestamp { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.Timestamp) > 0 { + for k, v := range m.Timestamp { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableDuration) > 0 { + for k, v := range m.NullableDuration { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.Duration) > 0 { + for k, v := range m.Duration { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *MapStdTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k, v := range m.NullableTimestamp { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.Timestamp) > 0 { + for k, v := range m.Timestamp { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdTime(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableDuration) > 0 { + for k, v := range m.NullableDuration { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.Duration) > 0 { + for k, v := range m.Duration { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDuration(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDouble(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdFloat(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdInt64(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdInt32(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdBool(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdString(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdBytes(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *OneofProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.OneOfProtoTimes != nil { + n += m.OneOfProtoTimes.Size() + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *OneofProtoTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Timestamp != nil { + l = m.Timestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Duration != nil { + l = m.Duration.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = m.RepDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = m.RepFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = m.RepInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = m.RepUInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = m.RepInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = m.RepUInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = m.RepBool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = m.RepString.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = m.RepBytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.OneOfStdTimes != nil { + n += m.OneOfStdTimes.Size() + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *OneofStdTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Timestamp != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.Timestamp) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Duration != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Duration) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.RepDouble) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.RepFloat) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.RepInt64) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.RepUInt64) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.RepInt32) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.RepUInt32) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.RepBool) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.RepString) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.RepBytes) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func sovTypes(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozTypes(x uint64) (n int) { + return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *KnownTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KnownTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KnownTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Dur", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Dur == nil { + m.Dur = &types.Duration{} + } + if err := m.Dur.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Ts == nil { + m.Ts = &types.Timestamp{} + } + if err := m.Ts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Dbl", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Dbl == nil { + m.Dbl = &types.DoubleValue{} + } + if err := m.Dbl.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Flt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Flt == nil { + m.Flt = &types.FloatValue{} + } + if err := m.Flt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field I64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.I64 == nil { + m.I64 = &types.Int64Value{} + } + if err := m.I64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field U64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.U64 == nil { + m.U64 = &types.UInt64Value{} + } + if err := m.U64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field I32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.I32 == nil { + m.I32 = &types.Int32Value{} + } + if err := m.I32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field U32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.U32 == nil { + m.U32 = &types.UInt32Value{} + } + if err := m.U32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Bool == nil { + m.Bool = &types.BoolValue{} + } + if err := m.Bool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Str", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Str == nil { + m.Str = &types.StringValue{} + } + if err := m.Str.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Bytes == nil { + m.Bytes = &types.BytesValue{} + } + if err := m.Bytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProtoTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProtoTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableTimestamp == nil { + m.NullableTimestamp = &types.Timestamp{} + } + if err := m.NullableTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDuration == nil { + m.NullableDuration = &types.Duration{} + } + if err := m.NullableDuration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDouble == nil { + m.NullableDouble = &types.DoubleValue{} + } + if err := m.NullableDouble.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableFloat == nil { + m.NullableFloat = &types.FloatValue{} + } + if err := m.NullableFloat.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt64 == nil { + m.NullableInt64 = &types.Int64Value{} + } + if err := m.NullableInt64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt64 == nil { + m.NullableUInt64 = &types.UInt64Value{} + } + if err := m.NullableUInt64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt32 == nil { + m.NullableInt32 = &types.Int32Value{} + } + if err := m.NullableInt32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt32 == nil { + m.NullableUInt32 = &types.UInt32Value{} + } + if err := m.NullableUInt32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBool == nil { + m.NullableBool = &types.BoolValue{} + } + if err := m.NullableBool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableString == nil { + m.NullableString = &types.StringValue{} + } + if err := m.NullableString.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBytes == nil { + m.NullableBytes = &types.BytesValue{} + } + if err := m.NullableBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Duration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullDouble.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullFloat.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullInt64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullUInt64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullInt32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullUInt32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullBool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullString.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StdTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StdTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableTimestamp == nil { + m.NullableTimestamp = new(time.Time) + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.NullableTimestamp, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDuration == nil { + m.NullableDuration = new(time.Duration) + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.NullableDuration, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDouble == nil { + m.NullableDouble = new(float64) + } + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(m.NullableDouble, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableFloat == nil { + m.NullableFloat = new(float32) + } + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(m.NullableFloat, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt64 == nil { + m.NullableInt64 = new(int64) + } + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(m.NullableInt64, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt64 == nil { + m.NullableUInt64 = new(uint64) + } + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(m.NullableUInt64, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt32 == nil { + m.NullableInt32 = new(int32) + } + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(m.NullableInt32, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt32 == nil { + m.NullableUInt32 = new(uint32) + } + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(m.NullableUInt32, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBool == nil { + m.NullableBool = new(bool) + } + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(m.NullableBool, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableString == nil { + m.NullableString = new(string) + } + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(m.NullableString, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBytes == nil { + m.NullableBytes = new([]byte) + } + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(m.NullableBytes, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Timestamp, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(&m.NonnullDouble, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(&m.NonnullFloat, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(&m.NonnullInt64, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(&m.NonnullUInt64, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(&m.NonnullInt32, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(&m.NonnullUInt32, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(&m.NonnullBool, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(&m.NonnullString, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(&m.NonnullBytes, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RepProtoTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RepProtoTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RepProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableTimestamps = append(m.NullableTimestamps, &types.Timestamp{}) + if err := m.NullableTimestamps[len(m.NullableTimestamps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDurations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableDurations = append(m.NullableDurations, &types.Duration{}) + if err := m.NullableDurations[len(m.NullableDurations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Timestamps = append(m.Timestamps, types.Timestamp{}) + if err := m.Timestamps[len(m.Timestamps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Durations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Durations = append(m.Durations, types.Duration{}) + if err := m.Durations[len(m.Durations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableDouble = append(m.NullableDouble, &types.DoubleValue{}) + if err := m.NullableDouble[len(m.NullableDouble)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullDouble = append(m.NonnullDouble, types.DoubleValue{}) + if err := m.NonnullDouble[len(m.NonnullDouble)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableFloat = append(m.NullableFloat, &types.FloatValue{}) + if err := m.NullableFloat[len(m.NullableFloat)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullFloat = append(m.NonnullFloat, types.FloatValue{}) + if err := m.NonnullFloat[len(m.NonnullFloat)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableInt64 = append(m.NullableInt64, &types.Int64Value{}) + if err := m.NullableInt64[len(m.NullableInt64)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullInt64 = append(m.NonnullInt64, types.Int64Value{}) + if err := m.NonnullInt64[len(m.NonnullInt64)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableUInt64 = append(m.NullableUInt64, &types.UInt64Value{}) + if err := m.NullableUInt64[len(m.NullableUInt64)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullUInt64 = append(m.NonnullUInt64, types.UInt64Value{}) + if err := m.NonnullUInt64[len(m.NonnullUInt64)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableInt32 = append(m.NullableInt32, &types.Int32Value{}) + if err := m.NullableInt32[len(m.NullableInt32)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullInt32 = append(m.NonnullInt32, types.Int32Value{}) + if err := m.NonnullInt32[len(m.NonnullInt32)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableUInt32 = append(m.NullableUInt32, &types.UInt32Value{}) + if err := m.NullableUInt32[len(m.NullableUInt32)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullUInt32 = append(m.NonnullUInt32, types.UInt32Value{}) + if err := m.NonnullUInt32[len(m.NonnullUInt32)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableBool = append(m.NullableBool, &types.BoolValue{}) + if err := m.NullableBool[len(m.NullableBool)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullBool = append(m.NonnullBool, types.BoolValue{}) + if err := m.NonnullBool[len(m.NonnullBool)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableString = append(m.NullableString, &types.StringValue{}) + if err := m.NullableString[len(m.NullableString)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullString = append(m.NonnullString, types.StringValue{}) + if err := m.NonnullString[len(m.NonnullString)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableBytes = append(m.NullableBytes, &types.BytesValue{}) + if err := m.NullableBytes[len(m.NullableBytes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullBytes = append(m.NonnullBytes, types.BytesValue{}) + if err := m.NonnullBytes[len(m.NonnullBytes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RepStdTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RepStdTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RepStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableTimestamps = append(m.NullableTimestamps, new(time.Time)) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.NullableTimestamps[len(m.NullableTimestamps)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDurations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableDurations = append(m.NullableDurations, new(time.Duration)) + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.NullableDurations[len(m.NullableDurations)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Timestamps = append(m.Timestamps, time.Time{}) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&(m.Timestamps[len(m.Timestamps)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Durations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Durations = append(m.Durations, time.Duration(0)) + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&(m.Durations[len(m.Durations)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableDouble = append(m.NullableDouble, new(float64)) + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(m.NullableDouble[len(m.NullableDouble)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullDouble = append(m.NonnullDouble, 0) + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(&(m.NonnullDouble[len(m.NonnullDouble)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableFloat = append(m.NullableFloat, new(float32)) + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(m.NullableFloat[len(m.NullableFloat)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullFloat = append(m.NonnullFloat, 0) + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(&(m.NonnullFloat[len(m.NonnullFloat)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableInt64 = append(m.NullableInt64, new(int64)) + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(m.NullableInt64[len(m.NullableInt64)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullInt64 = append(m.NonnullInt64, 0) + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(&(m.NonnullInt64[len(m.NonnullInt64)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableUInt64 = append(m.NullableUInt64, new(uint64)) + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(m.NullableUInt64[len(m.NullableUInt64)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullUInt64 = append(m.NonnullUInt64, 0) + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(&(m.NonnullUInt64[len(m.NonnullUInt64)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableInt32 = append(m.NullableInt32, new(int32)) + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(m.NullableInt32[len(m.NullableInt32)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullInt32 = append(m.NonnullInt32, 0) + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(&(m.NonnullInt32[len(m.NonnullInt32)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableUInt32 = append(m.NullableUInt32, new(uint32)) + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(m.NullableUInt32[len(m.NullableUInt32)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullUInt32 = append(m.NonnullUInt32, 0) + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(&(m.NonnullUInt32[len(m.NonnullUInt32)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableBool = append(m.NullableBool, new(bool)) + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(m.NullableBool[len(m.NullableBool)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullBool = append(m.NonnullBool, false) + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(&(m.NonnullBool[len(m.NonnullBool)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableString = append(m.NullableString, new(string)) + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(m.NullableString[len(m.NullableString)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullString = append(m.NonnullString, "") + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(&(m.NonnullString[len(m.NonnullString)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableBytes = append(m.NullableBytes, new([]byte)) + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(m.NullableBytes[len(m.NullableBytes)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullBytes = append(m.NonnullBytes, []byte{}) + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(&(m.NonnullBytes[len(m.NonnullBytes)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MapProtoTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MapProtoTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MapProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableTimestamp == nil { + m.NullableTimestamp = make(map[int32]*types.Timestamp) + } + var mapkey int32 + var mapvalue *types.Timestamp + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Timestamp{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableTimestamp[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Timestamp == nil { + m.Timestamp = make(map[int32]types.Timestamp) + } + var mapkey int32 + mapvalue := &types.Timestamp{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Timestamp{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Timestamp[mapkey] = *mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDuration == nil { + m.NullableDuration = make(map[int32]*types.Duration) + } + var mapkey int32 + var mapvalue *types.Duration + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Duration{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableDuration[mapkey] = mapvalue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Duration == nil { + m.Duration = make(map[int32]types.Duration) + } + var mapkey int32 + mapvalue := &types.Duration{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Duration{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Duration[mapkey] = *mapvalue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDouble == nil { + m.NullableDouble = make(map[int32]*types.DoubleValue) + } + var mapkey int32 + var mapvalue *types.DoubleValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.DoubleValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableDouble[mapkey] = mapvalue + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullDouble == nil { + m.NonnullDouble = make(map[int32]types.DoubleValue) + } + var mapkey int32 + mapvalue := &types.DoubleValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.DoubleValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullDouble[mapkey] = *mapvalue + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableFloat == nil { + m.NullableFloat = make(map[int32]*types.FloatValue) + } + var mapkey int32 + var mapvalue *types.FloatValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.FloatValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableFloat[mapkey] = mapvalue + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullFloat == nil { + m.NonnullFloat = make(map[int32]types.FloatValue) + } + var mapkey int32 + mapvalue := &types.FloatValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.FloatValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullFloat[mapkey] = *mapvalue + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt64 == nil { + m.NullableInt64 = make(map[int32]*types.Int64Value) + } + var mapkey int32 + var mapvalue *types.Int64Value + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Int64Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableInt64[mapkey] = mapvalue + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullInt64 == nil { + m.NonnullInt64 = make(map[int32]types.Int64Value) + } + var mapkey int32 + mapvalue := &types.Int64Value{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Int64Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullInt64[mapkey] = *mapvalue + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt64 == nil { + m.NullableUInt64 = make(map[int32]*types.UInt64Value) + } + var mapkey int32 + var mapvalue *types.UInt64Value + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.UInt64Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableUInt64[mapkey] = mapvalue + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullUInt64 == nil { + m.NonnullUInt64 = make(map[int32]types.UInt64Value) + } + var mapkey int32 + mapvalue := &types.UInt64Value{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.UInt64Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullUInt64[mapkey] = *mapvalue + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt32 == nil { + m.NullableInt32 = make(map[int32]*types.Int32Value) + } + var mapkey int32 + var mapvalue *types.Int32Value + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Int32Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableInt32[mapkey] = mapvalue + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullInt32 == nil { + m.NonnullInt32 = make(map[int32]types.Int32Value) + } + var mapkey int32 + mapvalue := &types.Int32Value{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Int32Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullInt32[mapkey] = *mapvalue + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt32 == nil { + m.NullableUInt32 = make(map[int32]*types.UInt32Value) + } + var mapkey int32 + var mapvalue *types.UInt32Value + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.UInt32Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableUInt32[mapkey] = mapvalue + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullUInt32 == nil { + m.NonnullUInt32 = make(map[int32]types.UInt32Value) + } + var mapkey int32 + mapvalue := &types.UInt32Value{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.UInt32Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullUInt32[mapkey] = *mapvalue + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBool == nil { + m.NullableBool = make(map[int32]*types.BoolValue) + } + var mapkey int32 + var mapvalue *types.BoolValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.BoolValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableBool[mapkey] = mapvalue + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullBool == nil { + m.NonnullBool = make(map[int32]types.BoolValue) + } + var mapkey int32 + mapvalue := &types.BoolValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.BoolValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullBool[mapkey] = *mapvalue + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableString == nil { + m.NullableString = make(map[int32]*types.StringValue) + } + var mapkey int32 + var mapvalue *types.StringValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.StringValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableString[mapkey] = mapvalue + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullString == nil { + m.NonnullString = make(map[int32]types.StringValue) + } + var mapkey int32 + mapvalue := &types.StringValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.StringValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullString[mapkey] = *mapvalue + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBytes == nil { + m.NullableBytes = make(map[int32]*types.BytesValue) + } + var mapkey int32 + var mapvalue *types.BytesValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.BytesValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableBytes[mapkey] = mapvalue + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullBytes == nil { + m.NonnullBytes = make(map[int32]types.BytesValue) + } + var mapkey int32 + mapvalue := &types.BytesValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.BytesValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullBytes[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MapStdTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MapStdTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MapStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableTimestamp == nil { + m.NullableTimestamp = make(map[int32]*time.Time) + } + var mapkey int32 + mapvalue := new(time.Time) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableTimestamp[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Timestamp == nil { + m.Timestamp = make(map[int32]time.Time) + } + var mapkey int32 + mapvalue := new(time.Time) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Timestamp[mapkey] = *mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDuration == nil { + m.NullableDuration = make(map[int32]*time.Duration) + } + var mapkey int32 + mapvalue := new(time.Duration) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableDuration[mapkey] = mapvalue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Duration == nil { + m.Duration = make(map[int32]time.Duration) + } + var mapkey int32 + mapvalue := new(time.Duration) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Duration[mapkey] = *mapvalue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KnownTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KnownTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + if m.NullableDouble == nil { + m.NullableDouble = make(map[int32]*float64) + } + var mapkey int32 + mapvalue := new(float64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableDouble[mapkey] = ((*float64)(mapvalue)) + iNdEx = postIndex + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Dur", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3765,16 +18400,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Dur == nil { - m.Dur = &types.Duration{} + if m.NonnullDouble == nil { + m.NonnullDouble = make(map[int32]float64) } - if err := m.Dur.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(float64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullDouble[mapkey] = ((float64)(*mapvalue)) iNdEx = postIndex - case 2: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3798,16 +18511,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Ts == nil { - m.Ts = &types.Timestamp{} + if m.NullableFloat == nil { + m.NullableFloat = make(map[int32]*float32) } - if err := m.Ts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(float32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NullableFloat[mapkey] = ((*float32)(mapvalue)) iNdEx = postIndex - case 3: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Dbl", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3831,16 +18622,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Dbl == nil { - m.Dbl = &types.DoubleValue{} + if m.NonnullFloat == nil { + m.NonnullFloat = make(map[int32]float32) } - if err := m.Dbl.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(float32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullFloat[mapkey] = ((float32)(*mapvalue)) iNdEx = postIndex - case 4: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Flt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3864,16 +18733,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Flt == nil { - m.Flt = &types.FloatValue{} + if m.NullableInt64 == nil { + m.NullableInt64 = make(map[int32]*int64) } - if err := m.Flt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(int64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NullableInt64[mapkey] = ((*int64)(mapvalue)) iNdEx = postIndex - case 5: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field I64", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3897,16 +18844,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.I64 == nil { - m.I64 = &types.Int64Value{} + if m.NonnullInt64 == nil { + m.NonnullInt64 = make(map[int32]int64) } - if err := m.I64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(int64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullInt64[mapkey] = ((int64)(*mapvalue)) iNdEx = postIndex - case 6: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field U64", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3930,16 +18955,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.U64 == nil { - m.U64 = &types.UInt64Value{} + if m.NullableUInt64 == nil { + m.NullableUInt64 = make(map[int32]*uint64) } - if err := m.U64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(uint64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NullableUInt64[mapkey] = ((*uint64)(mapvalue)) iNdEx = postIndex - case 7: + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field I32", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3963,16 +19066,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.I32 == nil { - m.I32 = &types.Int32Value{} + if m.NonnullUInt64 == nil { + m.NonnullUInt64 = make(map[int32]uint64) } - if err := m.I32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(uint64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullUInt64[mapkey] = ((uint64)(*mapvalue)) iNdEx = postIndex - case 8: + case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field U32", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3996,49 +19177,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.U32 == nil { - m.U32 = &types.UInt32Value{} - } - if err := m.U32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Bool", wireType) + if m.NullableInt32 == nil { + m.NullableInt32 = make(map[int32]*int32) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(int32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Bool == nil { - m.Bool = &types.BoolValue{} - } - if err := m.Bool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NullableInt32[mapkey] = ((*int32)(mapvalue)) iNdEx = postIndex - case 10: + case 14: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Str", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4062,16 +19288,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Str == nil { - m.Str = &types.StringValue{} + if m.NonnullInt32 == nil { + m.NonnullInt32 = make(map[int32]int32) } - if err := m.Str.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(int32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullInt32[mapkey] = ((int32)(*mapvalue)) iNdEx = postIndex - case 11: + case 15: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Bytes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4095,100 +19399,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Bytes == nil { - m.Bytes = &types.BytesValue{} - } - if err := m.Bytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ProtoTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ProtoTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + if m.NullableUInt32 == nil { + m.NullableUInt32 = make(map[int32]*uint32) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(uint32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NullableTimestamp == nil { - m.NullableTimestamp = &types.Timestamp{} - } - if err := m.NullableTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NullableUInt32[mapkey] = ((*uint32)(mapvalue)) iNdEx = postIndex - case 2: + case 16: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4212,46 +19510,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableDuration == nil { - m.NullableDuration = &types.Duration{} - } - if err := m.NullableDuration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + if m.NonnullUInt32 == nil { + m.NonnullUInt32 = make(map[int32]uint32) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(uint32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NonnullUInt32[mapkey] = ((uint32)(*mapvalue)) iNdEx = postIndex - case 4: + case 17: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4275,97 +19621,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Duration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StdTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StdTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StdTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + if m.NullableBool == nil { + m.NullableBool = make(map[int32]*bool) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(bool) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NullableTimestamp == nil { - m.NullableTimestamp = new(time.Time) - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.NullableTimestamp, dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NullableBool[mapkey] = ((*bool)(mapvalue)) iNdEx = postIndex - case 2: + case 18: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4389,46 +19732,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableDuration == nil { - m.NullableDuration = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.NullableDuration, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + if m.NonnullBool == nil { + m.NonnullBool = make(map[int32]bool) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(bool) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Timestamp, dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NonnullBool[mapkey] = ((bool)(*mapvalue)) iNdEx = postIndex - case 4: + case 19: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4452,64 +19843,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RepProtoTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + if m.NullableString == nil { + m.NullableString = make(map[int32]*string) } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + var mapkey int32 + mapvalue := new(string) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RepProtoTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RepProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.NullableString[mapkey] = ((*string)(mapvalue)) + iNdEx = postIndex + case 20: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4533,14 +19954,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.NullableTimestamps = append(m.NullableTimestamps, &types.Timestamp{}) - if err := m.NullableTimestamps[len(m.NullableTimestamps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.NonnullString == nil { + m.NonnullString = make(map[int32]string) + } + var mapkey int32 + mapvalue := new(string) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullString[mapkey] = ((string)(*mapvalue)) iNdEx = postIndex - case 2: + case 21: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDurations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4564,14 +20065,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.NullableDurations = append(m.NullableDurations, &types.Duration{}) - if err := m.NullableDurations[len(m.NullableDurations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.NullableBytes == nil { + m.NullableBytes = make(map[int32]*[]byte) + } + var mapkey int32 + mapvalue := new([]byte) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NullableBytes[mapkey] = ((*[]byte)(mapvalue)) iNdEx = postIndex - case 3: + case 22: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4595,41 +20176,90 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.Timestamps = append(m.Timestamps, types.Timestamp{}) - if err := m.Timestamps[len(m.Timestamps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Durations", wireType) + if m.NonnullBytes == nil { + m.NonnullBytes = make(map[int32][]byte) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new([]byte) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Durations = append(m.Durations, types.Duration{}) - if err := m.Durations[len(m.Durations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NonnullBytes[mapkey] = (([]byte)(*mapvalue)) iNdEx = postIndex default: iNdEx = preIndex @@ -4653,7 +20283,7 @@ } return nil } -func (m *RepStdTypes) Unmarshal(dAtA []byte) error { +func (m *OneofProtoTypes) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4676,15 +20306,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RepStdTypes: wiretype end group for non-group") + return fmt.Errorf("proto: OneofProtoTypes: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RepStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: OneofProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4708,14 +20338,15 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.NullableTimestamps = append(m.NullableTimestamps, new(time.Time)) - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.NullableTimestamps[len(m.NullableTimestamps)-1], dAtA[iNdEx:postIndex]); err != nil { + v := &types.Timestamp{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{v} iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDurations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4739,127 +20370,15 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.NullableDurations = append(m.NullableDurations, new(time.Duration)) - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.NullableDurations[len(m.NullableDurations)-1], dAtA[iNdEx:postIndex]); err != nil { + v := &types.Duration{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.OneOfProtoTimes = &OneofProtoTypes_Duration{v} iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Timestamps = append(m.Timestamps, time.Time{}) - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&(m.Timestamps[len(m.Timestamps)-1]), dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Durations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Durations = append(m.Durations, time.Duration(0)) - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&(m.Durations[len(m.Durations)-1]), dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MapProtoTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MapProtoTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MapProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepDouble", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4873,105 +20392,25 @@ iNdEx++ msglen |= (int(b) & 0x7F) << shift if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NullableTimestamp == nil { - m.NullableTimestamp = make(map[int32]*types.Timestamp) - } - var mapkey int32 - var mapvalue *types.Timestamp - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Timestamp{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + break } } - m.NullableTimestamp[mapkey] = mapvalue + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.DoubleValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfProtoTimes = &OneofProtoTypes_RepDouble{v} iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepFloat", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4995,95 +20434,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timestamp == nil { - m.Timestamp = make(map[int32]types.Timestamp) + v := &types.FloatValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := &types.Timestamp{} - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfProtoTimes = &OneofProtoTypes_RepFloat{v} + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Timestamp{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.Timestamp[mapkey] = *mapvalue + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.Int64Value{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfProtoTimes = &OneofProtoTypes_RepInt64{v} iNdEx = postIndex - case 3: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepUInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5107,95 +20498,79 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableDuration == nil { - m.NullableDuration = make(map[int32]*types.Duration) + v := &types.UInt64Value{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - var mapvalue *types.Duration - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt64{v} + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Duration{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.Int32Value{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfProtoTimes = &OneofProtoTypes_RepInt32{v} + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes } - m.NullableDuration[mapkey] = mapvalue + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.UInt32Value{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt32{v} iNdEx = postIndex - case 4: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepBool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5219,146 +20594,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Duration == nil { - m.Duration = make(map[int32]types.Duration) + v := &types.BoolValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := &types.Duration{} - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfProtoTimes = &OneofProtoTypes_RepBool{v} + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Duration{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.Duration[mapkey] = *mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MapStdTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { + postIndex := iNdEx + msglen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + v := &types.StringValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MapStdTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MapStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.OneOfProtoTimes = &OneofProtoTypes_RepString{v} + iNdEx = postIndex + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepBytes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5382,92 +20658,64 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableTimestamp == nil { - m.NullableTimestamp = make(map[int32]*time.Time) + v := &types.BytesValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := new(time.Time) - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + m.OneOfProtoTimes = &OneofProtoTypes_RepBytes{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err } - m.NullableTimestamp[mapkey] = mapvalue - iNdEx = postIndex - case 2: + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OneofStdTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OneofStdTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OneofStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) } @@ -5493,94 +20741,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timestamp == nil { - m.Timestamp = make(map[int32]time.Time) + v := new(time.Time) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := new(time.Time) - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfStdTimes = &OneofStdTypes_Timestamp{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.Timestamp[mapkey] = *mapvalue + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := new(time.Duration) + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfStdTimes = &OneofStdTypes_Duration{v} iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepDouble", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5604,94 +20805,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableDuration == nil { - m.NullableDuration = make(map[int32]*time.Duration) + v := new(float64) + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := new(time.Duration) - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfStdTimes = &OneofStdTypes_RepDouble{v} + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.NullableDuration[mapkey] = mapvalue + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := new(float32) + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfStdTimes = &OneofStdTypes_RepFloat{v} iNdEx = postIndex - case 4: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5715,145 +20869,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Duration == nil { - m.Duration = make(map[int32]time.Duration) + v := new(int64) + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := new(time.Duration) - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfStdTimes = &OneofStdTypes_RepInt64{v} + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.Duration[mapkey] = *mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *OneofProtoTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { + postIndex := iNdEx + msglen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + v := new(uint64) + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: OneofProtoTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OneofProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.OneOfStdTimes = &OneofStdTypes_RepUInt64{v} + iNdEx = postIndex + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5877,15 +20933,15 @@ if postIndex > l { return io.ErrUnexpectedEOF } - v := &types.Timestamp{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := new(int32) + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(v, dAtA[iNdEx:postIndex]); err != nil { return err } - m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{v} + m.OneOfStdTimes = &OneofStdTypes_RepInt32{v} iNdEx = postIndex - case 2: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepUInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5909,66 +20965,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - v := &types.Duration{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := new(uint32) + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(v, dAtA[iNdEx:postIndex]); err != nil { return err } - m.OneOfProtoTimes = &OneofProtoTypes_Duration{v} + m.OneOfStdTimes = &OneofStdTypes_RepUInt32{v} iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepBool", wireType) } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *OneofStdTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes + if msglen < 0 { + return ErrInvalidLengthTypes } - if iNdEx >= l { + postIndex := iNdEx + msglen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + v := new(bool) + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: OneofStdTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OneofStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.OneOfStdTimes = &OneofStdTypes_RepBool{v} + iNdEx = postIndex + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepString", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5992,15 +21029,15 @@ if postIndex > l { return io.ErrUnexpectedEOF } - v := new(time.Time) - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + v := new(string) + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { return err } - m.OneOfStdTimes = &OneofStdTypes_Timestamp{v} + m.OneOfStdTimes = &OneofStdTypes_RepString{v} iNdEx = postIndex - case 2: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepBytes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6024,11 +21061,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } - v := new(time.Duration) - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + v := new([]byte) + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { return err } - m.OneOfStdTimes = &OneofStdTypes_Duration{v} + m.OneOfStdTimes = &OneofStdTypes_RepBytes{v} iNdEx = postIndex default: iNdEx = preIndex @@ -6157,66 +21194,152 @@ ErrIntOverflowTypes = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("combos/both/types.proto", fileDescriptor_types_d941a2fa3776b329) } +func init() { proto.RegisterFile("combos/both/types.proto", fileDescriptor_types_6d7bfc155f665581) } -var fileDescriptor_types_d941a2fa3776b329 = []byte{ - // 923 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0x4f, 0x8f, 0xdb, 0x44, - 0x1c, 0xdd, 0xb1, 0x9d, 0xb2, 0xfb, 0x5b, 0x2d, 0x6d, 0x2d, 0x01, 0x26, 0x20, 0x67, 0x09, 0x97, - 0xa5, 0x55, 0x1d, 0x48, 0xa2, 0x80, 0x16, 0x15, 0x8a, 0xb5, 0x6d, 0xb7, 0x54, 0xdb, 0xad, 0xd2, - 0xb2, 0x02, 0x24, 0x10, 0x76, 0xe3, 0xa4, 0x11, 0x8e, 0x27, 0xb2, 0xc7, 0x54, 0xb9, 0xf1, 0x11, - 0x38, 0x82, 0xb8, 0xd0, 0x1b, 0x12, 0xdc, 0xe1, 0xc8, 0x05, 0xa9, 0x37, 0xf8, 0x04, 0xd0, 0x86, - 0x0b, 0x1f, 0xa1, 0x47, 0x34, 0xe3, 0xf1, 0xbf, 0x78, 0xec, 0x90, 0x48, 0x2b, 0x2e, 0xdc, 0xd6, - 0xeb, 0xf7, 0x9e, 0x9f, 0x9f, 0xdf, 0xef, 0x37, 0x81, 0x17, 0xee, 0xe1, 0x89, 0x8d, 0x83, 0x96, - 0x8d, 0xc9, 0xfd, 0x16, 0x99, 0x4d, 0x9d, 0xc0, 0x98, 0xfa, 0x98, 0x60, 0xb5, 0xc6, 0x2e, 0xea, - 0x97, 0x46, 0x63, 0x72, 0x3f, 0xb4, 0x8d, 0x7b, 0x78, 0xd2, 0x1a, 0xe1, 0x11, 0x6e, 0xb1, 0xbb, - 0x76, 0x38, 0x64, 0x57, 0xec, 0x82, 0xfd, 0x15, 0xb1, 0xea, 0xfa, 0x08, 0xe3, 0x91, 0xeb, 0xa4, - 0xa8, 0x41, 0xe8, 0x5b, 0x64, 0x8c, 0x3d, 0x7e, 0xbf, 0xb1, 0x78, 0x9f, 0x8c, 0x27, 0x4e, 0x40, - 0xac, 0xc9, 0xb4, 0x4c, 0xe0, 0x81, 0x6f, 0x4d, 0xa7, 0x8e, 0xcf, 0x6d, 0x35, 0xbf, 0x55, 0x00, - 0x6e, 0x7a, 0xf8, 0x81, 0x77, 0x97, 0xda, 0x53, 0x2f, 0x82, 0x3c, 0x08, 0x7d, 0x0d, 0xed, 0xa2, - 0xbd, 0xed, 0xf6, 0x8b, 0x46, 0x44, 0x36, 0x62, 0xb2, 0x71, 0xc0, 0x9f, 0xde, 0xa7, 0x28, 0xf5, - 0x02, 0x48, 0x24, 0xd0, 0x24, 0x86, 0xad, 0x17, 0xb0, 0x77, 0x63, 0x27, 0x7d, 0x89, 0x04, 0xaa, - 0x01, 0xf2, 0xc0, 0x76, 0x35, 0x99, 0x81, 0x5f, 0x2e, 0x0a, 0xe3, 0xd0, 0x76, 0x9d, 0x13, 0xcb, - 0x0d, 0x9d, 0x3e, 0x05, 0xaa, 0x97, 0x40, 0x1e, 0xba, 0x44, 0x53, 0x18, 0xfe, 0xa5, 0x02, 0xfe, - 0x9a, 0x8b, 0x2d, 0xc2, 0xe1, 0x43, 0x97, 0x50, 0xf8, 0xb8, 0xd7, 0xd5, 0x6a, 0x25, 0xf0, 0x1b, - 0x1e, 0xe9, 0x75, 0x39, 0x7c, 0xdc, 0xeb, 0x52, 0x37, 0x61, 0xaf, 0xab, 0x9d, 0x29, 0x71, 0xf3, - 0x41, 0x16, 0x1f, 0xf6, 0xba, 0x4c, 0xbe, 0xd3, 0xd6, 0x9e, 0x29, 0x97, 0xef, 0xb4, 0x63, 0xf9, - 0x4e, 0x9b, 0xc9, 0x77, 0xda, 0xda, 0x66, 0x85, 0x7c, 0x82, 0x0f, 0x19, 0x5e, 0xb1, 0x31, 0x76, - 0xb5, 0xad, 0x92, 0x28, 0x4d, 0x8c, 0xdd, 0x08, 0xce, 0x70, 0x54, 0x3f, 0x20, 0xbe, 0x06, 0x25, - 0xfa, 0x77, 0x88, 0x3f, 0xf6, 0x46, 0x5c, 0x3f, 0x20, 0xbe, 0xfa, 0x06, 0xd4, 0xec, 0x19, 0x71, - 0x02, 0x6d, 0xbb, 0xe4, 0x05, 0x4c, 0x7a, 0x37, 0x22, 0x44, 0xc8, 0x7d, 0xe5, 0xef, 0x87, 0x0d, - 0xd4, 0xfc, 0x4e, 0x02, 0xb8, 0x4d, 0x41, 0x51, 0x3b, 0x0e, 0xe1, 0xbc, 0x17, 0xba, 0xae, 0x65, - 0xbb, 0x4e, 0xf2, 0x75, 0x79, 0x57, 0xaa, 0xbe, 0x7f, 0x91, 0xa4, 0x5e, 0x85, 0x73, 0xf1, 0x3f, - 0xe3, 0x4e, 0xf1, 0x22, 0x55, 0x94, 0xae, 0x40, 0x51, 0xdf, 0x81, 0xad, 0xa4, 0xf0, 0xbc, 0x5b, - 0x15, 0x46, 0x4c, 0xe5, 0xd1, 0x1f, 0x8d, 0x8d, 0x7e, 0x4a, 0x51, 0xdf, 0x86, 0xcd, 0x78, 0xa0, - 0x78, 0xd5, 0xca, 0x1f, 0xcf, 0xd9, 0x09, 0x81, 0x47, 0xf4, 0xa3, 0x04, 0x9b, 0x77, 0xc8, 0x20, - 0x0a, 0xe8, 0xd6, 0x5a, 0x01, 0x99, 0xca, 0x57, 0x7f, 0x36, 0x90, 0x28, 0xa6, 0x9b, 0x6b, 0xc4, - 0x64, 0x2a, 0x5f, 0x53, 0xb5, 0x62, 0x58, 0xe6, 0x6a, 0x61, 0x6d, 0xd2, 0xd7, 0x65, 0xc6, 0x32, - 0x81, 0xbd, 0xbb, 0x4a, 0x60, 0x4c, 0x81, 0x99, 0x49, 0x48, 0xcd, 0x1f, 0x24, 0xd8, 0xe9, 0x3b, - 0xd3, 0x4c, 0xa9, 0xde, 0x07, 0xb5, 0xf0, 0xe2, 0x81, 0x86, 0x76, 0xe5, 0x25, 0xad, 0x12, 0xb0, - 0xd4, 0xeb, 0x69, 0xfe, 0xb1, 0x0b, 0xba, 0xa0, 0xe4, 0xea, 0x5e, 0x15, 0x39, 0xea, 0x15, 0x00, - 0x92, 0x9a, 0x91, 0x97, 0x99, 0xe1, 0xdd, 0xc8, 0x70, 0xd4, 0xcb, 0xb0, 0x35, 0x48, 0x2c, 0x28, - 0x4b, 0x2c, 0xc4, 0xcd, 0x4c, 0x18, 0xbc, 0x5c, 0x3f, 0x49, 0xb0, 0xdd, 0x77, 0xa6, 0x49, 0xbf, - 0x6e, 0xaf, 0x97, 0x15, 0x2f, 0x98, 0x28, 0xb1, 0xa3, 0x75, 0x12, 0xe3, 0x15, 0x13, 0xe4, 0x76, - 0xb0, 0x62, 0x6e, 0x69, 0xc9, 0xb2, 0xd9, 0xbd, 0xb7, 0x52, 0x76, 0x69, 0xcd, 0x52, 0x56, 0xf3, - 0xd7, 0x1a, 0xec, 0x1c, 0x59, 0xd9, 0x9e, 0x7d, 0x24, 0x9e, 0x4d, 0x2a, 0x7e, 0xd1, 0x88, 0x4e, - 0xea, 0x1c, 0xc1, 0xb8, 0xb5, 0x88, 0xbe, 0xea, 0x11, 0x7f, 0x26, 0x1a, 0xd3, 0xeb, 0xd9, 0xc9, - 0x8a, 0xc2, 0x7b, 0x55, 0x28, 0x99, 0x97, 0x2a, 0xee, 0xa3, 0x13, 0xc1, 0xbc, 0x47, 0x21, 0x5e, - 0xa8, 0xb4, 0x18, 0x83, 0x23, 0x87, 0xc5, 0xd1, 0x3f, 0xc8, 0x8d, 0x2d, 0xd5, 0x6b, 0x0a, 0xf5, - 0x72, 0x3a, 0x8b, 0x0b, 0xaf, 0xfe, 0x19, 0x3c, 0x2f, 0xce, 0x44, 0x3d, 0x07, 0xf2, 0xe7, 0xce, - 0x8c, 0x6d, 0xba, 0x5a, 0x9f, 0xfe, 0xa9, 0xbe, 0x0e, 0xb5, 0x2f, 0xe8, 0x79, 0xf2, 0x2f, 0x7e, - 0x1e, 0x44, 0xc0, 0x7d, 0xe9, 0x2d, 0x54, 0xff, 0x10, 0x9e, 0x3d, 0x25, 0xe5, 0x4f, 0xe1, 0x39, - 0x61, 0x58, 0x82, 0x07, 0xb4, 0xf2, 0x0f, 0xa8, 0x58, 0x1c, 0x19, 0xfd, 0x13, 0xd8, 0x39, 0x0d, - 0xdd, 0xe6, 0x6f, 0x35, 0xd8, 0x3e, 0xb2, 0xd2, 0x0d, 0xf0, 0x49, 0x79, 0x8b, 0x5f, 0x4b, 0x3f, - 0x69, 0x0c, 0x2f, 0xe9, 0x70, 0xf9, 0x81, 0x73, 0xa3, 0xd8, 0xe4, 0x57, 0x04, 0xb2, 0x0b, 0x72, - 0xc2, 0xa3, 0xe2, 0xe3, 0xd2, 0x2e, 0xef, 0x55, 0x18, 0x5d, 0x68, 0x60, 0xc9, 0x51, 0x76, 0xad, - 0xd0, 0xe7, 0x5d, 0x81, 0x66, 0x5e, 0x4b, 0x70, 0x1a, 0xfd, 0xdf, 0xe8, 0xff, 0xa0, 0xd1, 0xdf, - 0x20, 0x38, 0x7b, 0xec, 0x39, 0x78, 0x98, 0xd9, 0xcd, 0xfb, 0xd9, 0xda, 0x2d, 0xfd, 0xbd, 0x74, - 0x98, 0xdb, 0x99, 0x6f, 0x66, 0xba, 0xb0, 0xcc, 0xc7, 0x61, 0x66, 0x9d, 0x99, 0xe7, 0x99, 0x8f, - 0x63, 0xee, 0x83, 0xea, 0x35, 0x1f, 0x22, 0xd8, 0x61, 0xde, 0x92, 0x79, 0xbb, 0xb2, 0x92, 0xb3, - 0x68, 0xb0, 0xf2, 0xfe, 0x2e, 0xaf, 0xe0, 0x2f, 0x2a, 0x7c, 0xce, 0xe5, 0x59, 0xe6, 0xe8, 0x98, - 0x39, 0xa2, 0x9a, 0xe6, 0xde, 0xe3, 0x27, 0x3a, 0x7a, 0xfa, 0x44, 0x47, 0xdf, 0xcf, 0x75, 0xf4, - 0xf3, 0x5c, 0x47, 0xbf, 0xcc, 0x75, 0xf4, 0x68, 0xae, 0xa3, 0xdf, 0xe7, 0x3a, 0x7a, 0x3c, 0xd7, - 0xd1, 0xd3, 0xb9, 0xbe, 0xf1, 0xe5, 0x5f, 0xfa, 0x86, 0x7d, 0x86, 0xe9, 0x77, 0xfe, 0x09, 0x00, - 0x00, 0xff, 0xff, 0x48, 0x89, 0xae, 0xdb, 0x94, 0x0e, 0x00, 0x00, +var fileDescriptor_types_6d7bfc155f665581 = []byte{ + // 2294 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcf, 0x73, 0x1b, 0x49, + 0x19, 0x8d, 0x22, 0x39, 0xb1, 0xdb, 0x76, 0x62, 0x4f, 0x36, 0xcb, 0x60, 0x28, 0x25, 0x78, 0x37, + 0xd9, 0xb0, 0x5b, 0x2b, 0xb3, 0x33, 0x2e, 0x03, 0x81, 0x5d, 0xef, 0x4e, 0x25, 0x91, 0xa5, 0xb5, + 0x12, 0x45, 0xb6, 0x52, 0xb0, 0xb0, 0x80, 0xb4, 0x56, 0xbc, 0x2e, 0x14, 0x8d, 0x4a, 0x1a, 0xb1, + 0xe5, 0x1b, 0x7f, 0x00, 0x07, 0x6e, 0x50, 0xc5, 0x05, 0x6e, 0x5c, 0x39, 0x50, 0xc5, 0x91, 0xe3, + 0x1e, 0xf9, 0x0b, 0x60, 0xd7, 0x5c, 0xb8, 0x02, 0x97, 0x5c, 0xa8, 0xa2, 0xa6, 0xbb, 0x67, 0xa6, + 0x7f, 0x7c, 0xdd, 0x3d, 0x3d, 0x65, 0xdf, 0x74, 0xb3, 0xa5, 0xaf, 0xdf, 0xbc, 0xf9, 0xe6, 0x8d, + 0x5f, 0xbf, 0x6f, 0x3c, 0xe8, 0x2b, 0x9f, 0x84, 0x2f, 0xfa, 0xe1, 0x74, 0xab, 0x1f, 0x46, 0x9f, + 0x6e, 0x45, 0xa7, 0xe3, 0xc1, 0xb4, 0x36, 0x9e, 0x84, 0x51, 0xe8, 0x2c, 0xe0, 0x5f, 0x36, 0xde, + 0x3e, 0x3e, 0x89, 0x3e, 0x9d, 0xf5, 0x6b, 0x9f, 0x84, 0x2f, 0xb6, 0x8e, 0xc3, 0xe3, 0x70, 0x0b, + 0x7f, 0xdb, 0x9f, 0x3d, 0xc7, 0xbf, 0xe1, 0x5f, 0xf0, 0x4f, 0x64, 0xd5, 0x46, 0xf5, 0x38, 0x0c, + 0x8f, 0x87, 0x83, 0xac, 0xea, 0x68, 0x36, 0xe9, 0x45, 0x27, 0xe1, 0x88, 0x7e, 0x7f, 0x4b, 0xfc, + 0x3e, 0x3a, 0x79, 0x31, 0x98, 0x46, 0xbd, 0x17, 0x63, 0x15, 0xc0, 0x67, 0x93, 0xde, 0x78, 0x3c, + 0x98, 0x50, 0x5a, 0x9b, 0xbf, 0xab, 0x20, 0xf4, 0xe1, 0x28, 0xfc, 0x6c, 0x74, 0x18, 0xd3, 0x73, + 0xde, 0x42, 0xe5, 0xa3, 0xd9, 0xc4, 0x2d, 0xdd, 0x2e, 0xdd, 0x5b, 0xf6, 0xbe, 0x5a, 0x23, 0x8b, + 0x6b, 0xc9, 0xe2, 0xda, 0x03, 0x7a, 0xf4, 0x4e, 0x5c, 0xe5, 0xbc, 0x89, 0x2e, 0x47, 0x53, 0xf7, + 0x32, 0xae, 0xdd, 0x90, 0x6a, 0x0f, 0x13, 0x26, 0x9d, 0xcb, 0xd1, 0xd4, 0xa9, 0xa1, 0xf2, 0x51, + 0x7f, 0xe8, 0x96, 0x71, 0xf1, 0xd7, 0x65, 0xe0, 0x70, 0xd6, 0x1f, 0x0e, 0x9e, 0xf5, 0x86, 0xb3, + 0x41, 0x27, 0x2e, 0x74, 0xde, 0x46, 0xe5, 0xe7, 0xc3, 0xc8, 0xad, 0xe0, 0xfa, 0xaf, 0x49, 0xf5, + 0x8f, 0x86, 0x61, 0x2f, 0xa2, 0xe5, 0xcf, 0x87, 0x51, 0x5c, 0x7e, 0xb2, 0xb3, 0xed, 0x2e, 0x28, + 0xca, 0x1b, 0xa3, 0x68, 0x67, 0x9b, 0x96, 0x9f, 0xec, 0x6c, 0xc7, 0x6c, 0x66, 0x3b, 0xdb, 0xee, + 0x15, 0x05, 0x9b, 0x2e, 0x5b, 0x3f, 0xdb, 0xd9, 0xc6, 0xf0, 0xbe, 0xe7, 0x5e, 0x55, 0xc3, 0xfb, + 0x5e, 0x02, 0xef, 0x7b, 0x18, 0xde, 0xf7, 0xdc, 0x45, 0x0d, 0x7c, 0x5a, 0x3f, 0xc3, 0xf5, 0x95, + 0x7e, 0x18, 0x0e, 0xdd, 0x25, 0x45, 0x2b, 0x83, 0x30, 0x1c, 0x92, 0x72, 0x5c, 0x17, 0xe3, 0x4f, + 0xa3, 0x89, 0x8b, 0x14, 0xf8, 0x07, 0xd1, 0xe4, 0x64, 0x74, 0x4c, 0xf1, 0xa7, 0xd1, 0xc4, 0x79, + 0x07, 0x2d, 0xf4, 0x4f, 0xa3, 0xc1, 0xd4, 0x5d, 0x56, 0x9c, 0x40, 0x10, 0x7f, 0x4b, 0x16, 0x90, + 0xca, 0xfb, 0x95, 0x7f, 0xfd, 0xe1, 0x56, 0x69, 0xf3, 0x57, 0x2b, 0x08, 0xb5, 0xe3, 0x22, 0xa2, + 0x8e, 0x3d, 0xb4, 0x3e, 0x9a, 0x0d, 0x87, 0xbd, 0xfe, 0x70, 0x90, 0x5e, 0x5d, 0xaa, 0x15, 0xdd, + 0xf5, 0x97, 0x17, 0x39, 0x0f, 0xd1, 0x5a, 0xf2, 0x61, 0xa2, 0x29, 0x2a, 0x24, 0x8d, 0xe8, 0xa4, + 0x25, 0xce, 0x03, 0x74, 0x2d, 0xfd, 0x0c, 0x2b, 0x28, 0x97, 0xc0, 0x84, 0x35, 0xce, 0x07, 0x68, + 0x35, 0xf9, 0x04, 0xeb, 0x2a, 0x8f, 0xea, 0xf8, 0x15, 0x2c, 0x04, 0xd6, 0x4e, 0x1e, 0x25, 0xf2, + 0x2b, 0xd8, 0x73, 0x21, 0xfa, 0xcb, 0x25, 0x4f, 0x61, 0x8d, 0x40, 0x24, 0x9f, 0x66, 0xf9, 0x15, + 0x22, 0x91, 0x9c, 0x42, 0x16, 0xd6, 0x38, 0xef, 0xa1, 0x95, 0xe4, 0x93, 0x20, 0x9f, 0xb6, 0xb9, + 0x7a, 0x96, 0x05, 0xd1, 0x73, 0x2e, 0xb9, 0x0b, 0x6b, 0xd8, 0x76, 0x04, 0x79, 0xef, 0x00, 0x7e, + 0x85, 0xf3, 0x1e, 0x5a, 0x4a, 0xff, 0xa8, 0xba, 0x2b, 0x26, 0xb1, 0x07, 0x95, 0xcf, 0xff, 0x7e, + 0xeb, 0x52, 0x27, 0x5b, 0xe2, 0x7c, 0x0f, 0x2d, 0x26, 0x7f, 0xb4, 0xdd, 0x55, 0x83, 0xc4, 0xe9, + 0xea, 0x74, 0x81, 0xb3, 0x87, 0x56, 0x47, 0xe1, 0x28, 0x26, 0x44, 0xf5, 0x7d, 0xcd, 0xac, 0x6f, + 0x0a, 0xc2, 0x2f, 0x74, 0x1e, 0xa2, 0x15, 0xfa, 0x01, 0xd1, 0xf8, 0x75, 0xa3, 0xc6, 0x29, 0x0e, + 0xb7, 0x8c, 0x81, 0x21, 0x1a, 0x5d, 0x33, 0xea, 0x5c, 0x80, 0x21, 0x32, 0xcd, 0xce, 0x8b, 0x6a, + 0x7d, 0xdd, 0xac, 0x75, 0xe1, 0xbc, 0xa8, 0xe0, 0x39, 0x42, 0xbe, 0xe7, 0x3a, 0x46, 0xbd, 0xcb, + 0x84, 0x7c, 0x4f, 0x20, 0xe4, 0x7b, 0xee, 0x0d, 0xb3, 0xe6, 0x01, 0x42, 0xbe, 0xe7, 0x04, 0x68, + 0x99, 0x7e, 0x80, 0x75, 0xff, 0x8a, 0x49, 0xf7, 0x14, 0x85, 0x5d, 0xc4, 0xb0, 0xa1, 0xda, 0xbf, + 0x69, 0xd6, 0xbe, 0xc0, 0x86, 0xde, 0x00, 0x59, 0x7b, 0x88, 0xfe, 0x5f, 0x35, 0xea, 0x5f, 0x68, + 0x4f, 0xc0, 0xd8, 0xc1, 0x7f, 0x56, 0xd0, 0xe2, 0x41, 0x74, 0x44, 0xcc, 0xe0, 0x71, 0x21, 0x33, + 0x08, 0x2a, 0xbf, 0xfe, 0xc7, 0xad, 0x12, 0x64, 0x09, 0x1f, 0x16, 0xb0, 0x84, 0xa0, 0xf2, 0xdb, + 0x18, 0x4d, 0x36, 0x86, 0x66, 0x11, 0x63, 0x08, 0x2a, 0xbf, 0x8f, 0xd1, 0x44, 0x7b, 0xa8, 0xdb, + 0xdb, 0x03, 0x45, 0x12, 0x4c, 0xa2, 0x6e, 0x6f, 0x12, 0x22, 0x10, 0xd1, 0x7c, 0xb3, 0x88, 0x55, + 0x88, 0x67, 0x47, 0xef, 0x9f, 0xba, 0xbd, 0x61, 0x00, 0xa4, 0x7c, 0x4f, 0x24, 0x95, 0xcf, 0x36, + 0x20, 0x52, 0xd8, 0x82, 0x2c, 0xcd, 0x83, 0xe2, 0xf0, 0x16, 0xd2, 0x2c, 0x62, 0x21, 0x22, 0x23, + 0x7a, 0x1f, 0xd5, 0xed, 0x8d, 0x44, 0x6c, 0x13, 0xb1, 0x93, 0xc0, 0xce, 0x4e, 0x16, 0xe3, 0x9b, + 0x11, 0xdf, 0x32, 0x8c, 0xa5, 0xec, 0xda, 0x58, 0x0a, 0x46, 0xc0, 0xb7, 0x49, 0x66, 0x2b, 0xfb, + 0x45, 0x6c, 0x05, 0x03, 0xd1, 0x53, 0xe2, 0xac, 0xa5, 0x61, 0x6f, 0x2d, 0x19, 0x16, 0x6f, 0x2f, + 0x0d, 0x7b, 0x7b, 0x91, 0xa1, 0x88, 0xb0, 0xf7, 0x8b, 0x58, 0x8c, 0x7c, 0x8e, 0xf4, 0x36, 0x69, + 0xd8, 0xdb, 0x0c, 0x48, 0xcc, 0xf7, 0x04, 0x62, 0x39, 0xad, 0x06, 0x26, 0xe6, 0x7b, 0xce, 0x23, + 0x5b, 0xbb, 0xc9, 0x90, 0x38, 0xcb, 0xd9, 0x2f, 0x62, 0x39, 0x32, 0x2b, 0x7a, 0xbb, 0x34, 0xec, + 0x6d, 0x47, 0x6e, 0x17, 0xfe, 0x72, 0xf3, 0x37, 0x2b, 0x68, 0xb5, 0x33, 0x18, 0x33, 0x31, 0xa4, + 0x89, 0x1c, 0xc9, 0x3e, 0xa6, 0x6e, 0xe9, 0x76, 0xd9, 0x90, 0x43, 0x80, 0x55, 0x4e, 0x3d, 0x73, + 0xb1, 0xe4, 0x8e, 0x89, 0x23, 0x6d, 0x59, 0x9f, 0x44, 0xe4, 0x35, 0xce, 0xfb, 0x08, 0x45, 0x19, + 0x99, 0xb2, 0x89, 0x0c, 0x75, 0x59, 0x66, 0x8d, 0xf3, 0x2e, 0x5a, 0x3a, 0x4a, 0x29, 0x54, 0x0c, + 0x14, 0x92, 0x7d, 0x66, 0xba, 0x02, 0xc8, 0x42, 0x0b, 0x18, 0xc3, 0x2e, 0x0b, 0x49, 0x1b, 0xce, + 0x2b, 0x66, 0x10, 0x78, 0xc3, 0x29, 0xa5, 0xaa, 0xab, 0x18, 0xc9, 0x26, 0x55, 0x89, 0x7b, 0xd6, + 0x45, 0x23, 0x02, 0xb8, 0x67, 0x95, 0xc2, 0xd9, 0x92, 0x02, 0x47, 0x1d, 0xce, 0xc4, 0x6d, 0x2f, + 0x32, 0x22, 0x80, 0xdb, 0x5e, 0x39, 0xe3, 0x2d, 0x2b, 0xda, 0xab, 0xcb, 0x78, 0xd2, 0xe6, 0x79, + 0xc5, 0x0c, 0x02, 0x6f, 0x9e, 0xa5, 0xb4, 0xb8, 0xaa, 0x3e, 0x2f, 0x45, 0x5a, 0x14, 0xf7, 0xdf, + 0xd7, 0x8c, 0x08, 0xe0, 0xfe, 0x5b, 0x0e, 0x9d, 0xd7, 0x35, 0x27, 0xa5, 0x0a, 0x9d, 0xd2, 0x2e, + 0x7e, 0xcd, 0x0c, 0x02, 0xef, 0xe2, 0xc5, 0xf8, 0xba, 0xae, 0xb8, 0xa1, 0x55, 0xf1, 0x55, 0x48, + 0x01, 0x8e, 0x69, 0x39, 0x94, 0x02, 0xe4, 0x08, 0x7c, 0x43, 0x71, 0x3a, 0xba, 0x08, 0x2c, 0x65, + 0x89, 0x57, 0xcc, 0x20, 0x70, 0x96, 0x90, 0xc2, 0xf4, 0x4d, 0xc5, 0xb5, 0x56, 0x87, 0x69, 0x39, + 0x8e, 0x94, 0x8b, 0xc7, 0x91, 0xff, 0xad, 0xa0, 0xe5, 0xce, 0x60, 0x9c, 0x26, 0x92, 0x76, 0x31, + 0x5f, 0xa0, 0x91, 0x04, 0x72, 0x87, 0x56, 0x11, 0x77, 0xa0, 0xa1, 0x04, 0xf0, 0x88, 0x07, 0x96, + 0x1e, 0x91, 0x6d, 0xfe, 0x58, 0x9f, 0xf8, 0xc0, 0xca, 0x27, 0xb2, 0xed, 0x1f, 0xe3, 0x15, 0xcd, + 0x22, 0x5e, 0xa1, 0x88, 0x47, 0xfb, 0x45, 0x1c, 0x43, 0xb9, 0x97, 0xac, 0xdb, 0xbb, 0x06, 0x1c, + 0xb6, 0x1a, 0xf6, 0xde, 0xa1, 0xda, 0x94, 0xd6, 0xed, 0xfd, 0x03, 0xce, 0x6d, 0x0d, 0x7b, 0x17, + 0x51, 0xed, 0x6e, 0x9b, 0x45, 0x9c, 0x44, 0x11, 0x01, 0xf7, 0x8b, 0xf8, 0x89, 0x72, 0xa7, 0x5c, + 0xb7, 0xf7, 0x14, 0x38, 0x50, 0x36, 0xec, 0x9d, 0x45, 0xb5, 0xe5, 0x6e, 0x16, 0x71, 0x17, 0x45, + 0x36, 0xdd, 0x2f, 0xe2, 0x31, 0xca, 0xed, 0xfb, 0x03, 0x5b, 0x9f, 0x01, 0x93, 0xee, 0x23, 0x5b, + 0xb7, 0x51, 0x84, 0x80, 0x66, 0x11, 0xc7, 0x51, 0x24, 0xe6, 0xfd, 0x22, 0xbe, 0xa3, 0x0c, 0x14, + 0x75, 0x7b, 0xef, 0x81, 0xf3, 0x77, 0xc3, 0xde, 0x81, 0x54, 0xc9, 0xe4, 0x4f, 0x55, 0xb4, 0xda, + 0xea, 0xb1, 0xc9, 0xe4, 0x87, 0xf0, 0x4c, 0x2c, 0x3e, 0xc2, 0x5b, 0x35, 0xf2, 0x34, 0x90, 0x5b, + 0x50, 0x7b, 0x2c, 0x56, 0x3f, 0x1c, 0x45, 0x93, 0x53, 0x68, 0x3c, 0x56, 0x67, 0xe7, 0x06, 0xc4, + 0x82, 0x5e, 0x03, 0x21, 0x79, 0x28, 0x79, 0x1e, 0xfd, 0x0c, 0x98, 0xb3, 0x11, 0x2b, 0x7a, 0x53, + 0x4b, 0x31, 0x29, 0x26, 0x0c, 0xa1, 0x67, 0x31, 0xd9, 0x50, 0x82, 0xb8, 0xd2, 0x26, 0x88, 0xc7, + 0xe1, 0x48, 0x03, 0xef, 0xb6, 0xc2, 0x99, 0xee, 0xe9, 0xb9, 0xe1, 0x52, 0xc2, 0x4c, 0xf4, 0xa7, + 0x03, 0xd8, 0x9f, 0xde, 0x80, 0x01, 0xd9, 0x4a, 0x96, 0xa1, 0x60, 0x53, 0x2d, 0xd8, 0xa6, 0xde, + 0xd0, 0xb2, 0xc4, 0x95, 0x84, 0xa4, 0x60, 0x56, 0x6d, 0xd0, 0xac, 0xee, 0xea, 0x28, 0x66, 0x60, + 0x60, 0xe6, 0x69, 0xc1, 0x9e, 0xa5, 0x27, 0x88, 0x2b, 0x05, 0x82, 0xe4, 0x8f, 0x7a, 0x1b, 0x74, + 0x2e, 0x2d, 0xc1, 0x0c, 0x0c, 0x8c, 0x42, 0x6d, 0x85, 0x81, 0xe9, 0x2f, 0x74, 0x97, 0xa1, 0x28, + 0xda, 0xd8, 0x01, 0x6c, 0x63, 0xda, 0x0b, 0xdd, 0x95, 0x58, 0x0a, 0x6e, 0xd6, 0x82, 0xdd, 0xcc, + 0xd8, 0x47, 0xdf, 0x93, 0xfb, 0xe8, 0x7b, 0x7c, 0x1f, 0x53, 0x4f, 0x33, 0xf5, 0x91, 0x82, 0x81, + 0xc1, 0xa9, 0xad, 0xb0, 0x36, 0x73, 0x1f, 0x13, 0x8a, 0xa2, 0xc1, 0x1d, 0xc0, 0x06, 0x67, 0xec, + 0x23, 0xcf, 0x52, 0xf0, 0xb9, 0x26, 0xe8, 0x73, 0x77, 0xb5, 0x24, 0xe3, 0x42, 0x42, 0x91, 0x77, + 0xbb, 0x16, 0xe4, 0x76, 0x77, 0x74, 0xf4, 0x52, 0x24, 0x28, 0x66, 0xb5, 0x15, 0xa6, 0xa7, 0xef, + 0x20, 0x29, 0x15, 0x3a, 0x48, 0xcd, 0xea, 0x00, 0xb6, 0x3e, 0x6d, 0x07, 0x19, 0x3c, 0x38, 0x7d, + 0xb5, 0x60, 0x07, 0xd4, 0x2b, 0x11, 0x57, 0x0a, 0x4a, 0x24, 0x3e, 0xd8, 0x06, 0x7d, 0x50, 0xab, + 0xc4, 0x0c, 0x0c, 0x0a, 0x65, 0x1b, 0x3f, 0x43, 0xaf, 0xc2, 0x76, 0xe6, 0xac, 0xa1, 0xf2, 0xcf, + 0x07, 0xa7, 0xf8, 0xe1, 0xd0, 0x42, 0x27, 0xfe, 0xd1, 0xf9, 0x16, 0x5a, 0xf8, 0x45, 0xec, 0xad, + 0x39, 0xfe, 0x7b, 0x84, 0x14, 0xde, 0xbf, 0xfc, 0x9d, 0xd2, 0xc6, 0x0f, 0xd0, 0xb5, 0x0b, 0x42, + 0xfe, 0x09, 0xba, 0x09, 0xfa, 0x1c, 0x70, 0x80, 0x2d, 0xfe, 0x00, 0x9a, 0x29, 0x21, 0x83, 0xff, + 0x0c, 0xad, 0x5e, 0x08, 0xee, 0x4f, 0xd1, 0x0d, 0xc0, 0x03, 0x01, 0x74, 0x8f, 0x47, 0xd7, 0x0f, + 0x05, 0xb9, 0xc6, 0x38, 0xb2, 0x27, 0x9e, 0x23, 0xfe, 0xc7, 0xc8, 0x91, 0xed, 0x11, 0xc0, 0x7f, + 0x87, 0xc7, 0xd7, 0x4e, 0x11, 0x19, 0xf8, 0x1f, 0xa3, 0x75, 0xc9, 0x2f, 0xcf, 0x0f, 0x9d, 0x21, + 0x9f, 0xf9, 0x48, 0x11, 0x78, 0x66, 0xd8, 0x07, 0x92, 0xbf, 0x08, 0x74, 0x46, 0x3a, 0x5d, 0x2d, + 0xbe, 0xf1, 0xd2, 0x76, 0xe1, 0x03, 0x64, 0xd2, 0xb9, 0x18, 0x7c, 0xbe, 0xfb, 0xd4, 0x7d, 0x0a, + 0xf6, 0x27, 0x19, 0x28, 0xaa, 0xba, 0x7f, 0xee, 0xe8, 0x42, 0xf7, 0xd5, 0xf8, 0xb9, 0xba, 0x03, + 0x1c, 0x80, 0xef, 0xfe, 0xf9, 0xe3, 0xff, 0x08, 0xad, 0x4b, 0x3e, 0x5d, 0xe4, 0xcf, 0x71, 0x36, + 0x40, 0x65, 0xc0, 0x3f, 0x42, 0x6b, 0xa2, 0x73, 0x9f, 0x1b, 0x36, 0xd3, 0x79, 0xc6, 0x73, 0x8b, + 0x74, 0x86, 0x9d, 0xba, 0x82, 0x9d, 0xbf, 0x18, 0x7c, 0x46, 0xf7, 0x99, 0x23, 0x17, 0x51, 0x26, + 0xfb, 0x5f, 0x7f, 0x90, 0xee, 0x2f, 0x00, 0x7d, 0xf3, 0xdf, 0x55, 0xb4, 0xdc, 0xea, 0x65, 0x33, + 0xdb, 0x8f, 0xd5, 0x89, 0xf9, 0x9b, 0xd9, 0x5e, 0x24, 0x29, 0x57, 0xe4, 0x65, 0xf5, 0x3f, 0x95, + 0x34, 0xe4, 0xd4, 0xfc, 0x0d, 0x00, 0x56, 0x80, 0x03, 0x1f, 0xba, 0x7f, 0xa4, 0xcc, 0xcd, 0xf7, + 0x34, 0x44, 0x85, 0xb4, 0xab, 0xf8, 0x77, 0x95, 0x47, 0x52, 0x76, 0xbe, 0x0d, 0x60, 0xf2, 0x58, + 0xd0, 0x73, 0xfd, 0x43, 0x45, 0x7a, 0xbe, 0xab, 0x63, 0xc8, 0x66, 0x5d, 0x70, 0xc2, 0xdb, 0x85, + 0x13, 0xf4, 0x1d, 0x08, 0x54, 0xce, 0xcf, 0xca, 0x51, 0xef, 0x53, 0x38, 0x43, 0xdf, 0xd1, 0x70, + 0x65, 0x43, 0x2f, 0x34, 0xf4, 0xed, 0x80, 0x39, 0xfa, 0x75, 0x35, 0x51, 0x06, 0x50, 0x35, 0xfd, + 0x7d, 0x0a, 0x27, 0x69, 0x1d, 0x4d, 0x36, 0x54, 0x42, 0x73, 0xe0, 0x0e, 0x98, 0xa6, 0x35, 0x34, + 0x19, 0x40, 0xd5, 0x40, 0xf8, 0x50, 0x91, 0xa7, 0x75, 0x97, 0xbe, 0x2b, 0x11, 0x15, 0x33, 0x75, + 0x17, 0xce, 0xd4, 0x9a, 0x4b, 0xdf, 0x05, 0xb9, 0x0a, 0xa9, 0xfa, 0x29, 0x9c, 0xaa, 0x0d, 0x3d, + 0x4d, 0x03, 0x26, 0x34, 0x2d, 0xee, 0x80, 0xc9, 0x5a, 0xdf, 0xd3, 0x04, 0x50, 0x35, 0x36, 0x3e, + 0x54, 0x64, 0x6b, 0x53, 0x4f, 0x79, 0xa2, 0x62, 0xbe, 0xee, 0xc2, 0xf9, 0xda, 0xd0, 0x53, 0x99, + 0xab, 0x90, 0xb0, 0x1f, 0x83, 0x09, 0xfb, 0x75, 0x0d, 0x55, 0x26, 0x15, 0x03, 0x33, 0xe5, 0x27, + 0x50, 0xca, 0x7e, 0x4d, 0x4d, 0x32, 0x43, 0x53, 0x0c, 0x97, 0x0f, 0x15, 0x39, 0x5b, 0xd7, 0x4d, + 0x2e, 0x15, 0x83, 0x63, 0xe6, 0x2e, 0x9c, 0xb5, 0x35, 0xdd, 0x64, 0x31, 0x95, 0xf3, 0xe6, 0xa7, + 0x70, 0xda, 0xd6, 0x29, 0x94, 0x8d, 0xc7, 0xd0, 0xe4, 0xb9, 0x03, 0x26, 0x6e, 0x8d, 0x42, 0x19, + 0x40, 0xc5, 0x08, 0x7a, 0x9e, 0xb9, 0xe7, 0x99, 0x7b, 0x9e, 0xb9, 0xe7, 0x99, 0x7b, 0x9e, 0xb9, + 0xe7, 0x99, 0x7b, 0x9e, 0xb9, 0xe7, 0x99, 0x1b, 0xce, 0xdc, 0x7f, 0x5e, 0x40, 0xd7, 0x9f, 0x8c, + 0x06, 0xe1, 0x73, 0xe6, 0x49, 0xf5, 0x7d, 0x36, 0x18, 0x1b, 0xdf, 0xda, 0xd8, 0xe3, 0x9e, 0x20, + 0x7f, 0x9b, 0x49, 0xab, 0x26, 0xe3, 0xdc, 0x63, 0x1f, 0xee, 0x7e, 0x1f, 0x2d, 0x4d, 0x06, 0xe3, + 0xfc, 0x2f, 0x64, 0xc4, 0x87, 0x4d, 0x17, 0x38, 0xdf, 0x45, 0x8b, 0x93, 0xc1, 0x38, 0xef, 0x2b, + 0x18, 0xf1, 0x81, 0x93, 0x72, 0xba, 0x34, 0xef, 0x4b, 0x17, 0x74, 0x29, 0x89, 0x2a, 0x84, 0x73, + 0xfe, 0xd7, 0x2c, 0x28, 0x67, 0x1a, 0x74, 0xd2, 0x03, 0xe7, 0x7a, 0xb1, 0x22, 0x3b, 0xb0, 0xef, + 0x31, 0x07, 0xce, 0xf7, 0x2a, 0x05, 0x73, 0x60, 0xdf, 0x73, 0x76, 0xd0, 0xd5, 0xc9, 0x60, 0x9c, + 0xef, 0xe5, 0x89, 0xbd, 0x4b, 0x9d, 0xa4, 0x98, 0x1e, 0x35, 0xff, 0xeb, 0x12, 0xf4, 0xa8, 0x74, + 0xd7, 0x4c, 0x4e, 0x37, 0xef, 0x0b, 0x12, 0xf4, 0x74, 0xf1, 0x07, 0xc1, 0x3a, 0xd6, 0xe8, 0x13, + 0xaa, 0xd1, 0x58, 0x6b, 0x9b, 0xff, 0x5d, 0x40, 0xab, 0x58, 0xb7, 0xe9, 0xb4, 0xe8, 0x7d, 0x2b, + 0xd5, 0x92, 0xb1, 0x10, 0xaf, 0xdd, 0x77, 0x2d, 0xb4, 0x4b, 0xc6, 0x35, 0x9c, 0x82, 0x03, 0x4b, + 0x05, 0x93, 0x24, 0xc0, 0xeb, 0x78, 0xd7, 0x4a, 0xc7, 0x29, 0x42, 0xa6, 0xe6, 0x5d, 0x2b, 0x35, + 0x73, 0x00, 0x44, 0x95, 0x81, 0xa5, 0xa6, 0xb9, 0xb3, 0xa0, 0xca, 0xde, 0xb5, 0x52, 0xb6, 0x48, + 0x02, 0xbf, 0x27, 0x67, 0xa7, 0x6f, 0x89, 0x04, 0xbe, 0x47, 0xf2, 0xab, 0x3c, 0x5d, 0x9f, 0x6a, + 0x3d, 0xb0, 0xd4, 0x3a, 0xc7, 0x80, 0x2a, 0x7e, 0xd7, 0x4a, 0xf1, 0x5c, 0x1b, 0x88, 0xee, 0xaf, + 0x63, 0x8d, 0x3f, 0xc1, 0x1a, 0x8f, 0x55, 0x1a, 0xdc, 0xfb, 0xe2, 0xcb, 0x6a, 0xe9, 0xe5, 0x97, + 0xd5, 0xd2, 0x1f, 0xcf, 0xaa, 0xa5, 0xbf, 0x9c, 0x55, 0x4b, 0x7f, 0x3d, 0xab, 0x96, 0x3e, 0x3f, + 0xab, 0x96, 0xfe, 0x76, 0x56, 0x2d, 0x7d, 0x71, 0x56, 0x2d, 0xbd, 0x3c, 0xab, 0x5e, 0xfa, 0xe5, + 0x3f, 0xab, 0x97, 0xfa, 0x57, 0xf0, 0x11, 0xfc, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xb3, + 0x35, 0x4d, 0x74, 0x40, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/both/types.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/both/types.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/both/types.proto 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/both/types.proto 2018-11-22 20:53:45.000000000 +0000 @@ -73,15 +73,53 @@ option (gogoproto.compare) = true; google.protobuf.Timestamp nullableTimestamp = 1; google.protobuf.Duration nullableDuration = 2; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3; + google.protobuf.FloatValue nullableFloat = 4; + google.protobuf.Int64Value nullableInt64 = 5; + google.protobuf.UInt64Value nullableUInt64 = 6; + google.protobuf.Int32Value nullableInt32 = 7; + google.protobuf.UInt32Value nullableUInt32 = 8; + google.protobuf.BoolValue nullableBool = 9; + google.protobuf.StringValue nullableString = 10; + google.protobuf.BytesValue nullableBytes = 11; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message StdTypes { google.protobuf.Timestamp nullableTimestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration nullableDuration = 2 [(gogoproto.stdduration) = true]; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3 [(gogoproto.wktpointer) = true];; + google.protobuf.FloatValue nullableFloat = 4 [(gogoproto.wktpointer) = true];; + google.protobuf.Int64Value nullableInt64 = 5 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt64Value nullableUInt64 = 6 [(gogoproto.wktpointer) = true];; + google.protobuf.Int32Value nullableInt32 = 7 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt32Value nullableUInt32 = 8 [(gogoproto.wktpointer) = true];; + google.protobuf.BoolValue nullableBool = 9 [(gogoproto.wktpointer) = true];; + google.protobuf.StringValue nullableString = 10 [(gogoproto.wktpointer) = true];; + google.protobuf.BytesValue nullableBytes = 11 [(gogoproto.wktpointer) = true];; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message RepProtoTypes { @@ -90,6 +128,33 @@ repeated google.protobuf.Duration nullableDurations = 2; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message RepStdTypes { @@ -97,6 +162,33 @@ repeated google.protobuf.Duration nullableDurations = 2 [(gogoproto.stdduration) = true]; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message MapProtoTypes { @@ -105,6 +197,33 @@ map nullableDuration = 3; map duration = 4 [(gogoproto.nullable) = false]; + + map nullableDouble = 5; + map nonnullDouble = 6 [(gogoproto.nullable) = false]; + + map nullableFloat = 7; + map nonnullFloat = 8 [(gogoproto.nullable) = false]; + + map nullableInt64 = 9; + map nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + map nullableUInt64 = 11; + map nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + map nullableInt32 = 13; + map nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + map nullableUInt32 = 15; + map nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + map nullableBool = 17; + map nonnullBool = 18 [(gogoproto.nullable) = false]; + + map nullableString = 19; + map nonnullString = 20 [(gogoproto.nullable) = false]; + + map nullableBytes = 21; + map nonnullBytes = 22 [(gogoproto.nullable) = false]; } message MapStdTypes { @@ -113,12 +232,48 @@ map nullableDuration = 3 [(gogoproto.stdduration) = true]; map duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + map nullableDouble = 5 [(gogoproto.wktpointer) = true]; + map nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableFloat = 7 [(gogoproto.wktpointer) = true]; + map nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + map nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + map nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + map nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + map nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBool = 17 [(gogoproto.wktpointer) = true]; + map nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableString = 19 [(gogoproto.wktpointer) = true]; + map nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBytes = 21 [(gogoproto.wktpointer) = true]; + map nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message OneofProtoTypes { oneof OneOfProtoTimes { google.protobuf.Timestamp timestamp = 1; google.protobuf.Duration duration = 2; + google.protobuf.DoubleValue repDouble = 3; + google.protobuf.FloatValue repFloat = 4; + google.protobuf.Int64Value repInt64 = 5; + google.protobuf.UInt64Value repUInt64 = 6; + google.protobuf.Int32Value repInt32 = 7; + google.protobuf.UInt32Value repUInt32 = 8; + google.protobuf.BoolValue repBool = 9; + google.protobuf.StringValue repString = 10; + google.protobuf.BytesValue repBytes = 11; } } @@ -126,6 +281,15 @@ oneof OneOfStdTimes { google.protobuf.Timestamp timestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration duration = 2 [(gogoproto.stdduration) = true]; + google.protobuf.DoubleValue repDouble = 3 [(gogoproto.wktpointer) = true]; + google.protobuf.FloatValue repFloat = 4 [(gogoproto.wktpointer) = true]; + google.protobuf.Int64Value repInt64 = 5 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt64Value repUInt64 = 6 [(gogoproto.wktpointer) = true]; + google.protobuf.Int32Value repInt32 = 7 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt32Value repUInt32 = 8 [(gogoproto.wktpointer) = true]; + google.protobuf.BoolValue repBool = 9 [(gogoproto.wktpointer) = true]; + google.protobuf.StringValue repString = 10 [(gogoproto.wktpointer) = true]; + google.protobuf.BytesValue repBytes = 11 [(gogoproto.wktpointer) = true]; } } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/marshaler/types.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/marshaler/types.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/marshaler/types.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/marshaler/types.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -47,7 +47,7 @@ func (m *KnownTypes) String() string { return proto.CompactTextString(m) } func (*KnownTypes) ProtoMessage() {} func (*KnownTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{0} + return fileDescriptor_types_84a5c6bb8f2642e0, []int{0} } func (m *KnownTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KnownTypes.Unmarshal(m, b) @@ -154,20 +154,38 @@ } type ProtoTypes struct { - NullableTimestamp *types.Timestamp `protobuf:"bytes,1,opt,name=nullableTimestamp" json:"nullableTimestamp,omitempty"` - NullableDuration *types.Duration `protobuf:"bytes,2,opt,name=nullableDuration" json:"nullableDuration,omitempty"` - Timestamp types.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp"` - Duration types.Duration `protobuf:"bytes,4,opt,name=duration" json:"duration"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableTimestamp *types.Timestamp `protobuf:"bytes,1,opt,name=nullableTimestamp" json:"nullableTimestamp,omitempty"` + NullableDuration *types.Duration `protobuf:"bytes,2,opt,name=nullableDuration" json:"nullableDuration,omitempty"` + NullableDouble *types.DoubleValue `protobuf:"bytes,3,opt,name=nullableDouble" json:"nullableDouble,omitempty"` + NullableFloat *types.FloatValue `protobuf:"bytes,4,opt,name=nullableFloat" json:"nullableFloat,omitempty"` + NullableInt64 *types.Int64Value `protobuf:"bytes,5,opt,name=nullableInt64" json:"nullableInt64,omitempty"` + NullableUInt64 *types.UInt64Value `protobuf:"bytes,6,opt,name=nullableUInt64" json:"nullableUInt64,omitempty"` + NullableInt32 *types.Int32Value `protobuf:"bytes,7,opt,name=nullableInt32" json:"nullableInt32,omitempty"` + NullableUInt32 *types.UInt32Value `protobuf:"bytes,8,opt,name=nullableUInt32" json:"nullableUInt32,omitempty"` + NullableBool *types.BoolValue `protobuf:"bytes,9,opt,name=nullableBool" json:"nullableBool,omitempty"` + NullableString *types.StringValue `protobuf:"bytes,10,opt,name=nullableString" json:"nullableString,omitempty"` + NullableBytes *types.BytesValue `protobuf:"bytes,11,opt,name=nullableBytes" json:"nullableBytes,omitempty"` + Timestamp types.Timestamp `protobuf:"bytes,12,opt,name=timestamp" json:"timestamp"` + Duration types.Duration `protobuf:"bytes,13,opt,name=duration" json:"duration"` + NonnullDouble types.DoubleValue `protobuf:"bytes,14,opt,name=nonnullDouble" json:"nonnullDouble"` + NonnullFloat types.FloatValue `protobuf:"bytes,15,opt,name=nonnullFloat" json:"nonnullFloat"` + NonnullInt64 types.Int64Value `protobuf:"bytes,16,opt,name=nonnullInt64" json:"nonnullInt64"` + NonnullUInt64 types.UInt64Value `protobuf:"bytes,17,opt,name=nonnullUInt64" json:"nonnullUInt64"` + NonnullInt32 types.Int32Value `protobuf:"bytes,18,opt,name=nonnullInt32" json:"nonnullInt32"` + NonnullUInt32 types.UInt32Value `protobuf:"bytes,19,opt,name=nonnullUInt32" json:"nonnullUInt32"` + NonnullBool types.BoolValue `protobuf:"bytes,20,opt,name=nonnullBool" json:"nonnullBool"` + NonnullString types.StringValue `protobuf:"bytes,21,opt,name=nonnullString" json:"nonnullString"` + NonnullBytes types.BytesValue `protobuf:"bytes,22,opt,name=nonnullBytes" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProtoTypes) Reset() { *m = ProtoTypes{} } func (m *ProtoTypes) String() string { return proto.CompactTextString(m) } func (*ProtoTypes) ProtoMessage() {} func (*ProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{1} + return fileDescriptor_types_84a5c6bb8f2642e0, []int{1} } func (m *ProtoTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProtoTypes.Unmarshal(m, b) @@ -210,6 +228,69 @@ return nil } +func (m *ProtoTypes) GetNullableDouble() *types.DoubleValue { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *ProtoTypes) GetNullableFloat() *types.FloatValue { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *ProtoTypes) GetNullableInt64() *types.Int64Value { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *ProtoTypes) GetNullableUInt64() *types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *ProtoTypes) GetNullableInt32() *types.Int32Value { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *ProtoTypes) GetNullableUInt32() *types.UInt32Value { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *ProtoTypes) GetNullableBool() *types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *ProtoTypes) GetNullableString() *types.StringValue { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *ProtoTypes) GetNullableBytes() *types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + func (m *ProtoTypes) GetTimestamp() types.Timestamp { if m != nil { return m.Timestamp @@ -224,11 +305,92 @@ return types.Duration{} } +func (m *ProtoTypes) GetNonnullDouble() types.DoubleValue { + if m != nil { + return m.NonnullDouble + } + return types.DoubleValue{} +} + +func (m *ProtoTypes) GetNonnullFloat() types.FloatValue { + if m != nil { + return m.NonnullFloat + } + return types.FloatValue{} +} + +func (m *ProtoTypes) GetNonnullInt64() types.Int64Value { + if m != nil { + return m.NonnullInt64 + } + return types.Int64Value{} +} + +func (m *ProtoTypes) GetNonnullUInt64() types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return types.UInt64Value{} +} + +func (m *ProtoTypes) GetNonnullInt32() types.Int32Value { + if m != nil { + return m.NonnullInt32 + } + return types.Int32Value{} +} + +func (m *ProtoTypes) GetNonnullUInt32() types.UInt32Value { + if m != nil { + return m.NonnullUInt32 + } + return types.UInt32Value{} +} + +func (m *ProtoTypes) GetNonnullBool() types.BoolValue { + if m != nil { + return m.NonnullBool + } + return types.BoolValue{} +} + +func (m *ProtoTypes) GetNonnullString() types.StringValue { + if m != nil { + return m.NonnullString + } + return types.StringValue{} +} + +func (m *ProtoTypes) GetNonnullBytes() types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return types.BytesValue{} +} + type StdTypes struct { NullableTimestamp *time.Time `protobuf:"bytes,1,opt,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty"` NullableDuration *time.Duration `protobuf:"bytes,2,opt,name=nullableDuration,stdduration" json:"nullableDuration,omitempty"` - Timestamp time.Time `protobuf:"bytes,3,opt,name=timestamp,stdtime" json:"timestamp"` - Duration time.Duration `protobuf:"bytes,4,opt,name=duration,stdduration" json:"duration"` + NullableDouble *float64 `protobuf:"bytes,3,opt,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NullableFloat *float32 `protobuf:"bytes,4,opt,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NullableInt64 *int64 `protobuf:"bytes,5,opt,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NullableUInt64 *uint64 `protobuf:"bytes,6,opt,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NullableInt32 *int32 `protobuf:"bytes,7,opt,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NullableUInt32 *uint32 `protobuf:"bytes,8,opt,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NullableBool *bool `protobuf:"bytes,9,opt,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NullableString *string `protobuf:"bytes,10,opt,name=nullableString,wktptr" json:"nullableString,omitempty"` + NullableBytes *[]byte `protobuf:"bytes,11,opt,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + Timestamp time.Time `protobuf:"bytes,12,opt,name=timestamp,stdtime" json:"timestamp"` + Duration time.Duration `protobuf:"bytes,13,opt,name=duration,stdduration" json:"duration"` + NonnullDouble float64 `protobuf:"bytes,14,opt,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NonnullFloat float32 `protobuf:"bytes,15,opt,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NonnullInt64 int64 `protobuf:"bytes,16,opt,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NonnullUInt64 uint64 `protobuf:"bytes,17,opt,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NonnullInt32 int32 `protobuf:"bytes,18,opt,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NonnullUInt32 uint32 `protobuf:"bytes,19,opt,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NonnullBool bool `protobuf:"bytes,20,opt,name=nonnullBool,wktptr" json:"nonnullBool"` + NonnullString string `protobuf:"bytes,21,opt,name=nonnullString,wktptr" json:"nonnullString"` + NonnullBytes []byte `protobuf:"bytes,22,opt,name=nonnullBytes,wktptr" json:"nonnullBytes"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -238,7 +400,7 @@ func (m *StdTypes) String() string { return proto.CompactTextString(m) } func (*StdTypes) ProtoMessage() {} func (*StdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{2} + return fileDescriptor_types_84a5c6bb8f2642e0, []int{2} } func (m *StdTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StdTypes.Unmarshal(m, b) @@ -281,6 +443,69 @@ return nil } +func (m *StdTypes) GetNullableDouble() *float64 { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *StdTypes) GetNullableFloat() *float32 { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *StdTypes) GetNullableInt64() *int64 { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *StdTypes) GetNullableUInt64() *uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *StdTypes) GetNullableInt32() *int32 { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *StdTypes) GetNullableUInt32() *uint32 { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *StdTypes) GetNullableBool() *bool { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *StdTypes) GetNullableString() *string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *StdTypes) GetNullableBytes() *[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + func (m *StdTypes) GetTimestamp() time.Time { if m != nil { return m.Timestamp @@ -295,21 +520,102 @@ return 0 } +func (m *StdTypes) GetNonnullDouble() float64 { + if m != nil { + return m.NonnullDouble + } + return 0 +} + +func (m *StdTypes) GetNonnullFloat() float32 { + if m != nil { + return m.NonnullFloat + } + return 0 +} + +func (m *StdTypes) GetNonnullInt64() int64 { + if m != nil { + return m.NonnullInt64 + } + return 0 +} + +func (m *StdTypes) GetNonnullUInt64() uint64 { + if m != nil { + return m.NonnullUInt64 + } + return 0 +} + +func (m *StdTypes) GetNonnullInt32() int32 { + if m != nil { + return m.NonnullInt32 + } + return 0 +} + +func (m *StdTypes) GetNonnullUInt32() uint32 { + if m != nil { + return m.NonnullUInt32 + } + return 0 +} + +func (m *StdTypes) GetNonnullBool() bool { + if m != nil { + return m.NonnullBool + } + return false +} + +func (m *StdTypes) GetNonnullString() string { + if m != nil { + return m.NonnullString + } + return "" +} + +func (m *StdTypes) GetNonnullBytes() []byte { + if m != nil { + return m.NonnullBytes + } + return []byte{} +} + type RepProtoTypes struct { - NullableTimestamps []*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamps" json:"nullableTimestamps,omitempty"` - NullableDurations []*types.Duration `protobuf:"bytes,2,rep,name=nullableDurations" json:"nullableDurations,omitempty"` - Timestamps []types.Timestamp `protobuf:"bytes,3,rep,name=timestamps" json:"timestamps"` - Durations []types.Duration `protobuf:"bytes,4,rep,name=durations" json:"durations"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableTimestamps []*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamps" json:"nullableTimestamps,omitempty"` + NullableDurations []*types.Duration `protobuf:"bytes,2,rep,name=nullableDurations" json:"nullableDurations,omitempty"` + Timestamps []types.Timestamp `protobuf:"bytes,3,rep,name=timestamps" json:"timestamps"` + Durations []types.Duration `protobuf:"bytes,4,rep,name=durations" json:"durations"` + NullableDouble []*types.DoubleValue `protobuf:"bytes,5,rep,name=nullableDouble" json:"nullableDouble,omitempty"` + NonnullDouble []types.DoubleValue `protobuf:"bytes,6,rep,name=nonnullDouble" json:"nonnullDouble"` + NullableFloat []*types.FloatValue `protobuf:"bytes,7,rep,name=nullableFloat" json:"nullableFloat,omitempty"` + NonnullFloat []types.FloatValue `protobuf:"bytes,8,rep,name=nonnullFloat" json:"nonnullFloat"` + NullableInt64 []*types.Int64Value `protobuf:"bytes,9,rep,name=nullableInt64" json:"nullableInt64,omitempty"` + NonnullInt64 []types.Int64Value `protobuf:"bytes,10,rep,name=nonnullInt64" json:"nonnullInt64"` + NullableUInt64 []*types.UInt64Value `protobuf:"bytes,11,rep,name=nullableUInt64" json:"nullableUInt64,omitempty"` + NonnullUInt64 []types.UInt64Value `protobuf:"bytes,12,rep,name=nonnullUInt64" json:"nonnullUInt64"` + NullableInt32 []*types.Int32Value `protobuf:"bytes,13,rep,name=nullableInt32" json:"nullableInt32,omitempty"` + NonnullInt32 []types.Int32Value `protobuf:"bytes,14,rep,name=nonnullInt32" json:"nonnullInt32"` + NullableUInt32 []*types.UInt32Value `protobuf:"bytes,15,rep,name=nullableUInt32" json:"nullableUInt32,omitempty"` + NonnullUInt32 []types.UInt32Value `protobuf:"bytes,16,rep,name=nonnullUInt32" json:"nonnullUInt32"` + NullableBool []*types.BoolValue `protobuf:"bytes,17,rep,name=nullableBool" json:"nullableBool,omitempty"` + NonnullBool []types.BoolValue `protobuf:"bytes,18,rep,name=nonnullBool" json:"nonnullBool"` + NullableString []*types.StringValue `protobuf:"bytes,19,rep,name=nullableString" json:"nullableString,omitempty"` + NonnullString []types.StringValue `protobuf:"bytes,20,rep,name=nonnullString" json:"nonnullString"` + NullableBytes []*types.BytesValue `protobuf:"bytes,21,rep,name=nullableBytes" json:"nullableBytes,omitempty"` + NonnullBytes []types.BytesValue `protobuf:"bytes,22,rep,name=nonnullBytes" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RepProtoTypes) Reset() { *m = RepProtoTypes{} } func (m *RepProtoTypes) String() string { return proto.CompactTextString(m) } func (*RepProtoTypes) ProtoMessage() {} func (*RepProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{3} + return fileDescriptor_types_84a5c6bb8f2642e0, []int{3} } func (m *RepProtoTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepProtoTypes.Unmarshal(m, b) @@ -366,99 +672,172 @@ return nil } -type RepStdTypes struct { - NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` - NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` - Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` - Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableDouble() []*types.DoubleValue { + if m != nil { + return m.NullableDouble + } + return nil } -func (m *RepStdTypes) Reset() { *m = RepStdTypes{} } -func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } -func (*RepStdTypes) ProtoMessage() {} -func (*RepStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{4} +func (m *RepProtoTypes) GetNonnullDouble() []types.DoubleValue { + if m != nil { + return m.NonnullDouble + } + return nil } -func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RepStdTypes.Unmarshal(m, b) + +func (m *RepProtoTypes) GetNullableFloat() []*types.FloatValue { + if m != nil { + return m.NullableFloat + } + return nil } -func (m *RepStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RepStdTypes.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + +func (m *RepProtoTypes) GetNonnullFloat() []types.FloatValue { + if m != nil { + return m.NonnullFloat } + return nil } -func (dst *RepStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepStdTypes.Merge(dst, src) + +func (m *RepProtoTypes) GetNullableInt64() []*types.Int64Value { + if m != nil { + return m.NullableInt64 + } + return nil } -func (m *RepStdTypes) XXX_Size() int { - return m.Size() + +func (m *RepProtoTypes) GetNonnullInt64() []types.Int64Value { + if m != nil { + return m.NonnullInt64 + } + return nil } -func (m *RepStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_RepStdTypes.DiscardUnknown(m) + +func (m *RepProtoTypes) GetNullableUInt64() []*types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil } -var xxx_messageInfo_RepStdTypes proto.InternalMessageInfo +func (m *RepProtoTypes) GetNonnullUInt64() []types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return nil +} -func (m *RepStdTypes) GetNullableTimestamps() []*time.Time { +func (m *RepProtoTypes) GetNullableInt32() []*types.Int32Value { if m != nil { - return m.NullableTimestamps + return m.NullableInt32 } return nil } -func (m *RepStdTypes) GetNullableDurations() []*time.Duration { +func (m *RepProtoTypes) GetNonnullInt32() []types.Int32Value { if m != nil { - return m.NullableDurations + return m.NonnullInt32 } return nil } -func (m *RepStdTypes) GetTimestamps() []time.Time { +func (m *RepProtoTypes) GetNullableUInt32() []*types.UInt32Value { if m != nil { - return m.Timestamps + return m.NullableUInt32 } return nil } -func (m *RepStdTypes) GetDurations() []time.Duration { +func (m *RepProtoTypes) GetNonnullUInt32() []types.UInt32Value { if m != nil { - return m.Durations + return m.NonnullUInt32 } return nil } -type MapProtoTypes struct { - NullableTimestamp map[int32]*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamp" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Timestamp map[int32]types.Timestamp `protobuf:"bytes,2,rep,name=timestamp" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - NullableDuration map[int32]*types.Duration `protobuf:"bytes,3,rep,name=nullableDuration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Duration map[int32]types.Duration `protobuf:"bytes,4,rep,name=duration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableBool() []*types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil } -func (m *MapProtoTypes) Reset() { *m = MapProtoTypes{} } -func (m *MapProtoTypes) String() string { return proto.CompactTextString(m) } -func (*MapProtoTypes) ProtoMessage() {} -func (*MapProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{5} +func (m *RepProtoTypes) GetNonnullBool() []types.BoolValue { + if m != nil { + return m.NonnullBool + } + return nil } -func (m *MapProtoTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MapProtoTypes.Unmarshal(m, b) + +func (m *RepProtoTypes) GetNullableString() []*types.StringValue { + if m != nil { + return m.NullableString + } + return nil } -func (m *MapProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + +func (m *RepProtoTypes) GetNonnullString() []types.StringValue { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *RepProtoTypes) GetNullableBytes() []*types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *RepProtoTypes) GetNonnullBytes() []types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type RepStdTypes struct { + NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` + NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` + Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` + Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` + NullableDouble []*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NonnullDouble []float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NullableFloat []*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NonnullFloat []float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NullableInt64 []*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NonnullInt64 []int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NullableUInt64 []*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NonnullUInt64 []uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NullableInt32 []*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NonnullInt32 []int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NullableUInt32 []*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NonnullUInt32 []uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NullableBool []*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NonnullBool []bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool"` + NullableString []*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty"` + NonnullString []string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString"` + NullableBytes []*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + NonnullBytes [][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RepStdTypes) Reset() { *m = RepStdTypes{} } +func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } +func (*RepStdTypes) ProtoMessage() {} +func (*RepStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_84a5c6bb8f2642e0, []int{4} +} +func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RepStdTypes.Unmarshal(m, b) +} +func (m *RepStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MapProtoTypes.Marshal(b, m, deterministic) + return xxx_messageInfo_RepStdTypes.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -468,139 +847,212 @@ return b[:n], nil } } -func (dst *MapProtoTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MapProtoTypes.Merge(dst, src) +func (dst *RepStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepStdTypes.Merge(dst, src) } -func (m *MapProtoTypes) XXX_Size() int { +func (m *RepStdTypes) XXX_Size() int { return m.Size() } -func (m *MapProtoTypes) XXX_DiscardUnknown() { - xxx_messageInfo_MapProtoTypes.DiscardUnknown(m) +func (m *RepStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_RepStdTypes.DiscardUnknown(m) } -var xxx_messageInfo_MapProtoTypes proto.InternalMessageInfo +var xxx_messageInfo_RepStdTypes proto.InternalMessageInfo -func (m *MapProtoTypes) GetNullableTimestamp() map[int32]*types.Timestamp { +func (m *RepStdTypes) GetNullableTimestamps() []*time.Time { if m != nil { - return m.NullableTimestamp + return m.NullableTimestamps } return nil } -func (m *MapProtoTypes) GetTimestamp() map[int32]types.Timestamp { +func (m *RepStdTypes) GetNullableDurations() []*time.Duration { if m != nil { - return m.Timestamp + return m.NullableDurations } return nil } -func (m *MapProtoTypes) GetNullableDuration() map[int32]*types.Duration { +func (m *RepStdTypes) GetTimestamps() []time.Time { if m != nil { - return m.NullableDuration + return m.Timestamps } return nil } -func (m *MapProtoTypes) GetDuration() map[int32]types.Duration { +func (m *RepStdTypes) GetDurations() []time.Duration { if m != nil { - return m.Duration + return m.Durations } return nil } -type MapStdTypes struct { - NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepStdTypes) GetNullableDouble() []*float64 { + if m != nil { + return m.NullableDouble + } + return nil } -func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } -func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } -func (*MapStdTypes) ProtoMessage() {} -func (*MapStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{6} +func (m *RepStdTypes) GetNonnullDouble() []float64 { + if m != nil { + return m.NonnullDouble + } + return nil } -func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MapStdTypes.Unmarshal(m, b) + +func (m *RepStdTypes) GetNullableFloat() []*float32 { + if m != nil { + return m.NullableFloat + } + return nil } -func (m *MapStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MapStdTypes.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + +func (m *RepStdTypes) GetNonnullFloat() []float32 { + if m != nil { + return m.NonnullFloat } + return nil } -func (dst *MapStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MapStdTypes.Merge(dst, src) + +func (m *RepStdTypes) GetNullableInt64() []*int64 { + if m != nil { + return m.NullableInt64 + } + return nil } -func (m *MapStdTypes) XXX_Size() int { - return m.Size() + +func (m *RepStdTypes) GetNonnullInt64() []int64 { + if m != nil { + return m.NonnullInt64 + } + return nil } -func (m *MapStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_MapStdTypes.DiscardUnknown(m) + +func (m *RepStdTypes) GetNullableUInt64() []*uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil } -var xxx_messageInfo_MapStdTypes proto.InternalMessageInfo +func (m *RepStdTypes) GetNonnullUInt64() []uint64 { + if m != nil { + return m.NonnullUInt64 + } + return nil +} -func (m *MapStdTypes) GetNullableTimestamp() map[int32]*time.Time { +func (m *RepStdTypes) GetNullableInt32() []*int32 { if m != nil { - return m.NullableTimestamp + return m.NullableInt32 } return nil } -func (m *MapStdTypes) GetTimestamp() map[int32]time.Time { +func (m *RepStdTypes) GetNonnullInt32() []int32 { if m != nil { - return m.Timestamp + return m.NonnullInt32 } return nil } -func (m *MapStdTypes) GetNullableDuration() map[int32]*time.Duration { +func (m *RepStdTypes) GetNullableUInt32() []*uint32 { if m != nil { - return m.NullableDuration + return m.NullableUInt32 } return nil } -func (m *MapStdTypes) GetDuration() map[int32]time.Duration { +func (m *RepStdTypes) GetNonnullUInt32() []uint32 { if m != nil { - return m.Duration + return m.NonnullUInt32 } return nil } -type OneofProtoTypes struct { - // Types that are valid to be assigned to OneOfProtoTimes: - // *OneofProtoTypes_Timestamp - // *OneofProtoTypes_Duration - OneOfProtoTimes isOneofProtoTypes_OneOfProtoTimes `protobuf_oneof:"OneOfProtoTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepStdTypes) GetNullableBool() []*bool { + if m != nil { + return m.NullableBool + } + return nil } -func (m *OneofProtoTypes) Reset() { *m = OneofProtoTypes{} } -func (m *OneofProtoTypes) String() string { return proto.CompactTextString(m) } -func (*OneofProtoTypes) ProtoMessage() {} -func (*OneofProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{7} +func (m *RepStdTypes) GetNonnullBool() []bool { + if m != nil { + return m.NonnullBool + } + return nil } -func (m *OneofProtoTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OneofProtoTypes.Unmarshal(m, b) + +func (m *RepStdTypes) GetNullableString() []*string { + if m != nil { + return m.NullableString + } + return nil } -func (m *OneofProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + +func (m *RepStdTypes) GetNonnullString() []string { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *RepStdTypes) GetNullableBytes() []*[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *RepStdTypes) GetNonnullBytes() [][]byte { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type MapProtoTypes struct { + NullableTimestamp map[int32]*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamp" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Timestamp map[int32]types.Timestamp `protobuf:"bytes,2,rep,name=timestamp" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDuration map[int32]*types.Duration `protobuf:"bytes,3,rep,name=nullableDuration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Duration map[int32]types.Duration `protobuf:"bytes,4,rep,name=duration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*types.DoubleValue `protobuf:"bytes,5,rep,name=nullableDouble" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]types.DoubleValue `protobuf:"bytes,6,rep,name=nonnullDouble" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*types.FloatValue `protobuf:"bytes,7,rep,name=nullableFloat" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]types.FloatValue `protobuf:"bytes,8,rep,name=nonnullFloat" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*types.Int64Value `protobuf:"bytes,9,rep,name=nullableInt64" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]types.Int64Value `protobuf:"bytes,10,rep,name=nonnullInt64" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*types.UInt64Value `protobuf:"bytes,11,rep,name=nullableUInt64" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]types.UInt64Value `protobuf:"bytes,12,rep,name=nonnullUInt64" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*types.Int32Value `protobuf:"bytes,13,rep,name=nullableInt32" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]types.Int32Value `protobuf:"bytes,14,rep,name=nonnullInt32" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*types.UInt32Value `protobuf:"bytes,15,rep,name=nullableUInt32" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]types.UInt32Value `protobuf:"bytes,16,rep,name=nonnullUInt32" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*types.BoolValue `protobuf:"bytes,17,rep,name=nullableBool" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]types.BoolValue `protobuf:"bytes,18,rep,name=nonnullBool" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*types.StringValue `protobuf:"bytes,19,rep,name=nullableString" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]types.StringValue `protobuf:"bytes,20,rep,name=nonnullString" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*types.BytesValue `protobuf:"bytes,21,rep,name=nullableBytes" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32]types.BytesValue `protobuf:"bytes,22,rep,name=nonnullBytes" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MapProtoTypes) Reset() { *m = MapProtoTypes{} } +func (m *MapProtoTypes) String() string { return proto.CompactTextString(m) } +func (*MapProtoTypes) ProtoMessage() {} +func (*MapProtoTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_84a5c6bb8f2642e0, []int{5} +} +func (m *MapProtoTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MapProtoTypes.Unmarshal(m, b) +} +func (m *MapProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_OneofProtoTypes.Marshal(b, m, deterministic) + return xxx_messageInfo_MapProtoTypes.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -610,153 +1062,212 @@ return b[:n], nil } } -func (dst *OneofProtoTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofProtoTypes.Merge(dst, src) +func (dst *MapProtoTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MapProtoTypes.Merge(dst, src) } -func (m *OneofProtoTypes) XXX_Size() int { +func (m *MapProtoTypes) XXX_Size() int { return m.Size() } -func (m *OneofProtoTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofProtoTypes.DiscardUnknown(m) +func (m *MapProtoTypes) XXX_DiscardUnknown() { + xxx_messageInfo_MapProtoTypes.DiscardUnknown(m) } -var xxx_messageInfo_OneofProtoTypes proto.InternalMessageInfo +var xxx_messageInfo_MapProtoTypes proto.InternalMessageInfo -type isOneofProtoTypes_OneOfProtoTimes interface { - isOneofProtoTypes_OneOfProtoTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - MarshalTo([]byte) (int, error) - Size() int +func (m *MapProtoTypes) GetNullableTimestamp() map[int32]*types.Timestamp { + if m != nil { + return m.NullableTimestamp + } + return nil } -type OneofProtoTypes_Timestamp struct { - Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,oneof"` -} -type OneofProtoTypes_Duration struct { - Duration *types.Duration `protobuf:"bytes,2,opt,name=duration,oneof"` +func (m *MapProtoTypes) GetTimestamp() map[int32]types.Timestamp { + if m != nil { + return m.Timestamp + } + return nil } -func (*OneofProtoTypes_Timestamp) isOneofProtoTypes_OneOfProtoTimes() {} -func (*OneofProtoTypes_Duration) isOneofProtoTypes_OneOfProtoTimes() {} +func (m *MapProtoTypes) GetNullableDuration() map[int32]*types.Duration { + if m != nil { + return m.NullableDuration + } + return nil +} -func (m *OneofProtoTypes) GetOneOfProtoTimes() isOneofProtoTypes_OneOfProtoTimes { +func (m *MapProtoTypes) GetDuration() map[int32]types.Duration { if m != nil { - return m.OneOfProtoTimes + return m.Duration } return nil } -func (m *OneofProtoTypes) GetTimestamp() *types.Timestamp { - if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Timestamp); ok { - return x.Timestamp +func (m *MapProtoTypes) GetNullableDouble() map[int32]*types.DoubleValue { + if m != nil { + return m.NullableDouble } return nil } -func (m *OneofProtoTypes) GetDuration() *types.Duration { - if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Duration); ok { - return x.Duration +func (m *MapProtoTypes) GetNonnullDouble() map[int32]types.DoubleValue { + if m != nil { + return m.NonnullDouble } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofProtoTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofProtoTypes_OneofMarshaler, _OneofProtoTypes_OneofUnmarshaler, _OneofProtoTypes_OneofSizer, []interface{}{ - (*OneofProtoTypes_Timestamp)(nil), - (*OneofProtoTypes_Duration)(nil), +func (m *MapProtoTypes) GetNullableFloat() map[int32]*types.FloatValue { + if m != nil { + return m.NullableFloat } + return nil } -func _OneofProtoTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofProtoTypes) - // OneOfProtoTimes - switch x := m.OneOfProtoTimes.(type) { - case *OneofProtoTypes_Timestamp: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Timestamp); err != nil { - return err - } - case *OneofProtoTypes_Duration: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Duration); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("OneofProtoTypes.OneOfProtoTimes has unexpected type %T", x) +func (m *MapProtoTypes) GetNonnullFloat() map[int32]types.FloatValue { + if m != nil { + return m.NonnullFloat } return nil } -func _OneofProtoTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofProtoTypes) - switch tag { - case 1: // OneOfProtoTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Timestamp) - err := b.DecodeMessage(msg) - m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{msg} - return true, err - case 2: // OneOfProtoTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Duration) - err := b.DecodeMessage(msg) - m.OneOfProtoTimes = &OneofProtoTypes_Duration{msg} - return true, err - default: - return false, nil +func (m *MapProtoTypes) GetNullableInt64() map[int32]*types.Int64Value { + if m != nil { + return m.NullableInt64 } + return nil } -func _OneofProtoTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofProtoTypes) - // OneOfProtoTimes - switch x := m.OneOfProtoTimes.(type) { - case *OneofProtoTypes_Timestamp: - s := proto.Size(x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofProtoTypes_Duration: - s := proto.Size(x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *MapProtoTypes) GetNonnullInt64() map[int32]types.Int64Value { + if m != nil { + return m.NonnullInt64 } - return n + return nil } -type OneofStdTypes struct { - // Types that are valid to be assigned to OneOfStdTimes: - // *OneofStdTypes_Timestamp - // *OneofStdTypes_Duration - OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *MapProtoTypes) GetNullableUInt64() map[int32]*types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil } -func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } -func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } -func (*OneofStdTypes) ProtoMessage() {} -func (*OneofStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_f8a2648e6b1ebf0f, []int{8} +func (m *MapProtoTypes) GetNonnullUInt64() map[int32]types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return nil } -func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OneofStdTypes.Unmarshal(m, b) + +func (m *MapProtoTypes) GetNullableInt32() map[int32]*types.Int32Value { + if m != nil { + return m.NullableInt32 + } + return nil } -func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + +func (m *MapProtoTypes) GetNonnullInt32() map[int32]types.Int32Value { + if m != nil { + return m.NonnullInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNullableUInt32() map[int32]*types.UInt32Value { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNonnullUInt32() map[int32]types.UInt32Value { + if m != nil { + return m.NonnullUInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNullableBool() map[int32]*types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *MapProtoTypes) GetNonnullBool() map[int32]types.BoolValue { + if m != nil { + return m.NonnullBool + } + return nil +} + +func (m *MapProtoTypes) GetNullableString() map[int32]*types.StringValue { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *MapProtoTypes) GetNonnullString() map[int32]types.StringValue { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *MapProtoTypes) GetNullableBytes() map[int32]*types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *MapProtoTypes) GetNonnullBytes() map[int32]types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type MapStdTypes struct { + NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } +func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } +func (*MapStdTypes) ProtoMessage() {} +func (*MapStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_84a5c6bb8f2642e0, []int{6} +} +func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MapStdTypes.Unmarshal(m, b) +} +func (m *MapStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) + return xxx_messageInfo_MapStdTypes.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -766,1195 +1277,1639 @@ return b[:n], nil } } -func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofStdTypes.Merge(dst, src) +func (dst *MapStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MapStdTypes.Merge(dst, src) } -func (m *OneofStdTypes) XXX_Size() int { +func (m *MapStdTypes) XXX_Size() int { return m.Size() } -func (m *OneofStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +func (m *MapStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_MapStdTypes.DiscardUnknown(m) } -var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo +var xxx_messageInfo_MapStdTypes proto.InternalMessageInfo -type isOneofStdTypes_OneOfStdTimes interface { - isOneofStdTypes_OneOfStdTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - MarshalTo([]byte) (int, error) - Size() int +func (m *MapStdTypes) GetNullableTimestamp() map[int32]*time.Time { + if m != nil { + return m.NullableTimestamp + } + return nil } -type OneofStdTypes_Timestamp struct { - Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` +func (m *MapStdTypes) GetTimestamp() map[int32]time.Time { + if m != nil { + return m.Timestamp + } + return nil } -type OneofStdTypes_Duration struct { - Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` + +func (m *MapStdTypes) GetNullableDuration() map[int32]*time.Duration { + if m != nil { + return m.NullableDuration + } + return nil } -func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} -func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} +func (m *MapStdTypes) GetDuration() map[int32]time.Duration { + if m != nil { + return m.Duration + } + return nil +} -func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { +func (m *MapStdTypes) GetNullableDouble() map[int32]*float64 { if m != nil { - return m.OneOfStdTimes + return m.NullableDouble } return nil } -func (m *OneofStdTypes) GetTimestamp() *time.Time { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { - return x.Timestamp +func (m *MapStdTypes) GetNonnullDouble() map[int32]float64 { + if m != nil { + return m.NonnullDouble } return nil } -func (m *OneofStdTypes) GetDuration() *time.Duration { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { - return x.Duration +func (m *MapStdTypes) GetNullableFloat() map[int32]*float32 { + if m != nil { + return m.NullableFloat } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ - (*OneofStdTypes_Timestamp)(nil), - (*OneofStdTypes_Duration)(nil), +func (m *MapStdTypes) GetNonnullFloat() map[int32]float32 { + if m != nil { + return m.NonnullFloat } + return nil } -func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - dAtA, err := github_com_gogo_protobuf_types.StdTimeMarshal(*x.Timestamp) - if err != nil { - return err - } - if err := b.EncodeRawBytes(dAtA); err != nil { - return err - } - case *OneofStdTypes_Duration: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - dAtA, err := github_com_gogo_protobuf_types.StdDurationMarshal(*x.Duration) - if err != nil { - return err - } - if err := b.EncodeRawBytes(dAtA); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) +func (m *MapStdTypes) GetNullableInt64() map[int32]*int64 { + if m != nil { + return m.NullableInt64 } return nil } -func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofStdTypes) - switch tag { - case 1: // OneOfStdTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err - } - c := new(time.Time) - if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { - return true, err - } - m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} - return true, err - case 2: // OneOfStdTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err - } - c := new(time.Duration) - if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { - return true, err - } - m.OneOfStdTimes = &OneofStdTypes_Duration{c} - return true, err - default: - return false, nil +func (m *MapStdTypes) GetNonnullInt64() map[int32]int64 { + if m != nil { + return m.NonnullInt64 } + return nil } -func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofStdTypes_Duration: - s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *MapStdTypes) GetNullableUInt64() map[int32]*uint64 { + if m != nil { + return m.NullableUInt64 } - return n + return nil } -func init() { - proto.RegisterType((*KnownTypes)(nil), "types.KnownTypes") - proto.RegisterType((*ProtoTypes)(nil), "types.ProtoTypes") - proto.RegisterType((*StdTypes)(nil), "types.StdTypes") - proto.RegisterType((*RepProtoTypes)(nil), "types.RepProtoTypes") - proto.RegisterType((*RepStdTypes)(nil), "types.RepStdTypes") - proto.RegisterType((*MapProtoTypes)(nil), "types.MapProtoTypes") - proto.RegisterMapType((map[int32]types.Duration)(nil), "types.MapProtoTypes.DurationEntry") - proto.RegisterMapType((map[int32]*types.Duration)(nil), "types.MapProtoTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*types.Timestamp)(nil), "types.MapProtoTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]types.Timestamp)(nil), "types.MapProtoTypes.TimestampEntry") - proto.RegisterType((*MapStdTypes)(nil), "types.MapStdTypes") - proto.RegisterMapType((map[int32]time.Duration)(nil), "types.MapStdTypes.DurationEntry") - proto.RegisterMapType((map[int32]*time.Duration)(nil), "types.MapStdTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*time.Time)(nil), "types.MapStdTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]time.Time)(nil), "types.MapStdTypes.TimestampEntry") - proto.RegisterType((*OneofProtoTypes)(nil), "types.OneofProtoTypes") - proto.RegisterType((*OneofStdTypes)(nil), "types.OneofStdTypes") +func (m *MapStdTypes) GetNonnullUInt64() map[int32]uint64 { + if m != nil { + return m.NonnullUInt64 + } + return nil } -func (this *KnownTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 + +func (m *MapStdTypes) GetNullableInt32() map[int32]*int32 { + if m != nil { + return m.NullableInt32 } + return nil +} - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return 1 - } +func (m *MapStdTypes) GetNonnullInt32() map[int32]int32 { + if m != nil { + return m.NonnullInt32 } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 + return nil +} + +func (m *MapStdTypes) GetNullableUInt32() map[int32]*uint32 { + if m != nil { + return m.NullableUInt32 } - if c := this.Dur.Compare(that1.Dur); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullUInt32() map[int32]uint32 { + if m != nil { + return m.NonnullUInt32 } - if c := this.Ts.Compare(that1.Ts); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNullableBool() map[int32]*bool { + if m != nil { + return m.NullableBool } - if c := this.Dbl.Compare(that1.Dbl); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullBool() map[int32]bool { + if m != nil { + return m.NonnullBool } - if c := this.Flt.Compare(that1.Flt); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNullableString() map[int32]*string { + if m != nil { + return m.NullableString } - if c := this.I64.Compare(that1.I64); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullString() map[int32]string { + if m != nil { + return m.NonnullString } - if c := this.U64.Compare(that1.U64); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNullableBytes() map[int32]*[]byte { + if m != nil { + return m.NullableBytes } - if c := this.I32.Compare(that1.I32); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullBytes() map[int32][]byte { + if m != nil { + return m.NonnullBytes } - if c := this.U32.Compare(that1.U32); c != 0 { - return c + return nil +} + +type OneofProtoTypes struct { + // Types that are valid to be assigned to OneOfProtoTimes: + // *OneofProtoTypes_Timestamp + // *OneofProtoTypes_Duration + // *OneofProtoTypes_RepDouble + // *OneofProtoTypes_RepFloat + // *OneofProtoTypes_RepInt64 + // *OneofProtoTypes_RepUInt64 + // *OneofProtoTypes_RepInt32 + // *OneofProtoTypes_RepUInt32 + // *OneofProtoTypes_RepBool + // *OneofProtoTypes_RepString + // *OneofProtoTypes_RepBytes + OneOfProtoTimes isOneofProtoTypes_OneOfProtoTimes `protobuf_oneof:"OneOfProtoTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofProtoTypes) Reset() { *m = OneofProtoTypes{} } +func (m *OneofProtoTypes) String() string { return proto.CompactTextString(m) } +func (*OneofProtoTypes) ProtoMessage() {} +func (*OneofProtoTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_84a5c6bb8f2642e0, []int{7} +} +func (m *OneofProtoTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OneofProtoTypes.Unmarshal(m, b) +} +func (m *OneofProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OneofProtoTypes.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil } - if c := this.Bool.Compare(that1.Bool); c != 0 { - return c +} +func (dst *OneofProtoTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofProtoTypes.Merge(dst, src) +} +func (m *OneofProtoTypes) XXX_Size() int { + return m.Size() +} +func (m *OneofProtoTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofProtoTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofProtoTypes proto.InternalMessageInfo + +type isOneofProtoTypes_OneOfProtoTimes interface { + isOneofProtoTypes_OneOfProtoTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + MarshalTo([]byte) (int, error) + Size() int +} + +type OneofProtoTypes_Timestamp struct { + Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,oneof"` +} +type OneofProtoTypes_Duration struct { + Duration *types.Duration `protobuf:"bytes,2,opt,name=duration,oneof"` +} +type OneofProtoTypes_RepDouble struct { + RepDouble *types.DoubleValue `protobuf:"bytes,3,opt,name=repDouble,oneof"` +} +type OneofProtoTypes_RepFloat struct { + RepFloat *types.FloatValue `protobuf:"bytes,4,opt,name=repFloat,oneof"` +} +type OneofProtoTypes_RepInt64 struct { + RepInt64 *types.Int64Value `protobuf:"bytes,5,opt,name=repInt64,oneof"` +} +type OneofProtoTypes_RepUInt64 struct { + RepUInt64 *types.UInt64Value `protobuf:"bytes,6,opt,name=repUInt64,oneof"` +} +type OneofProtoTypes_RepInt32 struct { + RepInt32 *types.Int32Value `protobuf:"bytes,7,opt,name=repInt32,oneof"` +} +type OneofProtoTypes_RepUInt32 struct { + RepUInt32 *types.UInt32Value `protobuf:"bytes,8,opt,name=repUInt32,oneof"` +} +type OneofProtoTypes_RepBool struct { + RepBool *types.BoolValue `protobuf:"bytes,9,opt,name=repBool,oneof"` +} +type OneofProtoTypes_RepString struct { + RepString *types.StringValue `protobuf:"bytes,10,opt,name=repString,oneof"` +} +type OneofProtoTypes_RepBytes struct { + RepBytes *types.BytesValue `protobuf:"bytes,11,opt,name=repBytes,oneof"` +} + +func (*OneofProtoTypes_Timestamp) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_Duration) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepDouble) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepFloat) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepInt64) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepUInt64) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepInt32) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepUInt32) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepBool) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepString) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepBytes) isOneofProtoTypes_OneOfProtoTimes() {} + +func (m *OneofProtoTypes) GetOneOfProtoTimes() isOneofProtoTypes_OneOfProtoTimes { + if m != nil { + return m.OneOfProtoTimes } - if c := this.Str.Compare(that1.Str); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetTimestamp() *types.Timestamp { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Timestamp); ok { + return x.Timestamp } - if c := this.Bytes.Compare(that1.Bytes); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetDuration() *types.Duration { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Duration); ok { + return x.Duration } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepDouble() *types.DoubleValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepDouble); ok { + return x.RepDouble } - return 0 + return nil } -func (this *ProtoTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 + +func (m *OneofProtoTypes) GetRepFloat() *types.FloatValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepFloat); ok { + return x.RepFloat } + return nil +} - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return 1 - } +func (m *OneofProtoTypes) GetRepInt64() *types.Int64Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepInt64); ok { + return x.RepInt64 } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 + return nil +} + +func (m *OneofProtoTypes) GetRepUInt64() *types.UInt64Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepUInt64); ok { + return x.RepUInt64 } - if c := this.NullableTimestamp.Compare(that1.NullableTimestamp); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepInt32() *types.Int32Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepInt32); ok { + return x.RepInt32 } - if c := this.NullableDuration.Compare(that1.NullableDuration); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepUInt32() *types.UInt32Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepUInt32); ok { + return x.RepUInt32 } - if c := this.Timestamp.Compare(&that1.Timestamp); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepBool() *types.BoolValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepBool); ok { + return x.RepBool } - if c := this.Duration.Compare(&that1.Duration); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepString() *types.StringValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepString); ok { + return x.RepString } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + return nil +} + +func (m *OneofProtoTypes) GetRepBytes() *types.BytesValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepBytes); ok { + return x.RepBytes } - return 0 + return nil } -func (this *RepProtoTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofProtoTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofProtoTypes_OneofMarshaler, _OneofProtoTypes_OneofUnmarshaler, _OneofProtoTypes_OneofSizer, []interface{}{ + (*OneofProtoTypes_Timestamp)(nil), + (*OneofProtoTypes_Duration)(nil), + (*OneofProtoTypes_RepDouble)(nil), + (*OneofProtoTypes_RepFloat)(nil), + (*OneofProtoTypes_RepInt64)(nil), + (*OneofProtoTypes_RepUInt64)(nil), + (*OneofProtoTypes_RepInt32)(nil), + (*OneofProtoTypes_RepUInt32)(nil), + (*OneofProtoTypes_RepBool)(nil), + (*OneofProtoTypes_RepString)(nil), + (*OneofProtoTypes_RepBytes)(nil), } +} - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return 1 +func _OneofProtoTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofProtoTypes) + // OneOfProtoTimes + switch x := m.OneOfProtoTimes.(type) { + case *OneofProtoTypes_Timestamp: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Timestamp); err != nil { + return err } - } - if that1 == nil { - if this == nil { - return 0 + case *OneofProtoTypes_Duration: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Duration); err != nil { + return err } - return 1 - } else if this == nil { - return -1 - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - if len(this.NullableTimestamps) < len(that1.NullableTimestamps) { - return -1 + case *OneofProtoTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepDouble); err != nil { + return err } - return 1 - } - for i := range this.NullableTimestamps { - if c := this.NullableTimestamps[i].Compare(that1.NullableTimestamps[i]); c != 0 { - return c + case *OneofProtoTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepFloat); err != nil { + return err } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - if len(this.NullableDurations) < len(that1.NullableDurations) { - return -1 + case *OneofProtoTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepInt64); err != nil { + return err } - return 1 - } - for i := range this.NullableDurations { - if c := this.NullableDurations[i].Compare(that1.NullableDurations[i]); c != 0 { - return c + case *OneofProtoTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepUInt64); err != nil { + return err } - } - if len(this.Timestamps) != len(that1.Timestamps) { - if len(this.Timestamps) < len(that1.Timestamps) { - return -1 + case *OneofProtoTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepInt32); err != nil { + return err } - return 1 - } - for i := range this.Timestamps { - if c := this.Timestamps[i].Compare(&that1.Timestamps[i]); c != 0 { - return c + case *OneofProtoTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepUInt32); err != nil { + return err } - } - if len(this.Durations) != len(that1.Durations) { - if len(this.Durations) < len(that1.Durations) { - return -1 + case *OneofProtoTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepBool); err != nil { + return err } - return 1 - } - for i := range this.Durations { - if c := this.Durations[i].Compare(&that1.Durations[i]); c != 0 { - return c + case *OneofProtoTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepString); err != nil { + return err } - } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c - } - return 0 -} -func (this *KnownTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + case *OneofProtoTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepBytes); err != nil { + return err } - return fmt.Errorf("that == nil && this != nil") + case nil: + default: + return fmt.Errorf("OneofProtoTypes.OneOfProtoTimes has unexpected type %T", x) } + return nil +} - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *KnownTypes") +func _OneofProtoTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofProtoTypes) + switch tag { + case 1: // OneOfProtoTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - if this == nil { - return nil + msg := new(types.Timestamp) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{msg} + return true, err + case 2: // OneOfProtoTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - return fmt.Errorf("that is type *KnownTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *KnownTypes but is not nil && this == nil") - } - if !this.Dur.Equal(that1.Dur) { - return fmt.Errorf("Dur this(%v) Not Equal that(%v)", this.Dur, that1.Dur) - } - if !this.Ts.Equal(that1.Ts) { - return fmt.Errorf("Ts this(%v) Not Equal that(%v)", this.Ts, that1.Ts) - } - if !this.Dbl.Equal(that1.Dbl) { - return fmt.Errorf("Dbl this(%v) Not Equal that(%v)", this.Dbl, that1.Dbl) - } - if !this.Flt.Equal(that1.Flt) { - return fmt.Errorf("Flt this(%v) Not Equal that(%v)", this.Flt, that1.Flt) - } - if !this.I64.Equal(that1.I64) { - return fmt.Errorf("I64 this(%v) Not Equal that(%v)", this.I64, that1.I64) - } - if !this.U64.Equal(that1.U64) { - return fmt.Errorf("U64 this(%v) Not Equal that(%v)", this.U64, that1.U64) - } - if !this.I32.Equal(that1.I32) { - return fmt.Errorf("I32 this(%v) Not Equal that(%v)", this.I32, that1.I32) - } - if !this.U32.Equal(that1.U32) { - return fmt.Errorf("U32 this(%v) Not Equal that(%v)", this.U32, that1.U32) - } - if !this.Bool.Equal(that1.Bool) { - return fmt.Errorf("Bool this(%v) Not Equal that(%v)", this.Bool, that1.Bool) - } - if !this.Str.Equal(that1.Str) { - return fmt.Errorf("Str this(%v) Not Equal that(%v)", this.Str, that1.Str) - } - if !this.Bytes.Equal(that1.Bytes) { - return fmt.Errorf("Bytes this(%v) Not Equal that(%v)", this.Bytes, that1.Bytes) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + msg := new(types.Duration) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_Duration{msg} + return true, err + case 3: // OneOfProtoTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.DoubleValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepDouble{msg} + return true, err + case 4: // OneOfProtoTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.FloatValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepFloat{msg} + return true, err + case 5: // OneOfProtoTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Int64Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepInt64{msg} + return true, err + case 6: // OneOfProtoTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.UInt64Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt64{msg} + return true, err + case 7: // OneOfProtoTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Int32Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepInt32{msg} + return true, err + case 8: // OneOfProtoTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.UInt32Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt32{msg} + return true, err + case 9: // OneOfProtoTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.BoolValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepBool{msg} + return true, err + case 10: // OneOfProtoTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.StringValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepString{msg} + return true, err + case 11: // OneOfProtoTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.BytesValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepBytes{msg} + return true, err + default: + return false, nil } - return nil } -func (this *KnownTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Dur.Equal(that1.Dur) { - return false - } - if !this.Ts.Equal(that1.Ts) { - return false - } - if !this.Dbl.Equal(that1.Dbl) { - return false - } - if !this.Flt.Equal(that1.Flt) { - return false - } - if !this.I64.Equal(that1.I64) { - return false - } - if !this.U64.Equal(that1.U64) { - return false - } - if !this.I32.Equal(that1.I32) { - return false - } - if !this.U32.Equal(that1.U32) { - return false - } - if !this.Bool.Equal(that1.Bool) { - return false - } - if !this.Str.Equal(that1.Str) { - return false - } - if !this.Bytes.Equal(that1.Bytes) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false +func _OneofProtoTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofProtoTypes) + // OneOfProtoTimes + switch x := m.OneOfProtoTimes.(type) { + case *OneofProtoTypes_Timestamp: + s := proto.Size(x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_Duration: + s := proto.Size(x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepDouble: + s := proto.Size(x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepFloat: + s := proto.Size(x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepInt64: + s := proto.Size(x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepUInt64: + s := proto.Size(x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepInt32: + s := proto.Size(x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepUInt32: + s := proto.Size(x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepBool: + s := proto.Size(x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepString: + s := proto.Size(x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepBytes: + s := proto.Size(x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - return true + return n } -func (this *ProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") - } - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *ProtoTypes") - } - } - if that1 == nil { - if this == nil { - return nil +type OneofStdTypes struct { + // Types that are valid to be assigned to OneOfStdTimes: + // *OneofStdTypes_Timestamp + // *OneofStdTypes_Duration + // *OneofStdTypes_RepDouble + // *OneofStdTypes_RepFloat + // *OneofStdTypes_RepInt64 + // *OneofStdTypes_RepUInt64 + // *OneofStdTypes_RepInt32 + // *OneofStdTypes_RepUInt32 + // *OneofStdTypes_RepBool + // *OneofStdTypes_RepString + // *OneofStdTypes_RepBytes + OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } +func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } +func (*OneofStdTypes) ProtoMessage() {} +func (*OneofStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_84a5c6bb8f2642e0, []int{8} +} +func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OneofStdTypes.Unmarshal(m, b) +} +func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err } - return fmt.Errorf("that is type *ProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *ProtoTypes but is not nil && this == nil") - } - if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) + return b[:n], nil } - if !this.NullableDuration.Equal(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) +} +func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofStdTypes.Merge(dst, src) +} +func (m *OneofStdTypes) XXX_Size() int { + return m.Size() +} +func (m *OneofStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo + +type isOneofStdTypes_OneOfStdTimes interface { + isOneofStdTypes_OneOfStdTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + MarshalTo([]byte) (int, error) + Size() int +} + +type OneofStdTypes_Timestamp struct { + Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` +} +type OneofStdTypes_Duration struct { + Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` +} +type OneofStdTypes_RepDouble struct { + RepDouble *float64 `protobuf:"bytes,3,opt,name=repDouble,oneof,wktptr"` +} +type OneofStdTypes_RepFloat struct { + RepFloat *float32 `protobuf:"bytes,4,opt,name=repFloat,oneof,wktptr"` +} +type OneofStdTypes_RepInt64 struct { + RepInt64 *int64 `protobuf:"bytes,5,opt,name=repInt64,oneof,wktptr"` +} +type OneofStdTypes_RepUInt64 struct { + RepUInt64 *uint64 `protobuf:"bytes,6,opt,name=repUInt64,oneof,wktptr"` +} +type OneofStdTypes_RepInt32 struct { + RepInt32 *int32 `protobuf:"bytes,7,opt,name=repInt32,oneof,wktptr"` +} +type OneofStdTypes_RepUInt32 struct { + RepUInt32 *uint32 `protobuf:"bytes,8,opt,name=repUInt32,oneof,wktptr"` +} +type OneofStdTypes_RepBool struct { + RepBool *bool `protobuf:"bytes,9,opt,name=repBool,oneof,wktptr"` +} +type OneofStdTypes_RepString struct { + RepString *string `protobuf:"bytes,10,opt,name=repString,oneof,wktptr"` +} +type OneofStdTypes_RepBytes struct { + RepBytes *[]byte `protobuf:"bytes,11,opt,name=repBytes,oneof,wktptr"` +} + +func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepDouble) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepFloat) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBool) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepString) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBytes) isOneofStdTypes_OneOfStdTimes() {} + +func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { + if m != nil { + return m.OneOfStdTimes } - if !this.Timestamp.Equal(&that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + return nil +} + +func (m *OneofStdTypes) GetTimestamp() *time.Time { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { + return x.Timestamp } - if !this.Duration.Equal(&that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + return nil +} + +func (m *OneofStdTypes) GetDuration() *time.Duration { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { + return x.Duration } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + return nil +} + +func (m *OneofStdTypes) GetRepDouble() *float64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepDouble); ok { + return x.RepDouble } return nil } -func (this *ProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + +func (m *OneofStdTypes) GetRepFloat() *float32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepFloat); ok { + return x.RepFloat } + return nil +} - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return false - } +func (m *OneofStdTypes) GetRepInt64() *int64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt64); ok { + return x.RepInt64 } - if that1 == nil { - return this == nil - } else if this == nil { - return false + return nil +} + +func (m *OneofStdTypes) GetRepUInt64() *uint64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt64); ok { + return x.RepUInt64 } - if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepInt32() *int32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt32); ok { + return x.RepInt32 } - if !this.NullableDuration.Equal(that1.NullableDuration) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepUInt32() *uint32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt32); ok { + return x.RepUInt32 } - if !this.Timestamp.Equal(&that1.Timestamp) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepBool() *bool { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBool); ok { + return x.RepBool } - if !this.Duration.Equal(&that1.Duration) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepString() *string { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepString); ok { + return x.RepString } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + return nil +} + +func (m *OneofStdTypes) GetRepBytes() *[]byte { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBytes); ok { + return x.RepBytes } - return true + return nil } -func (this *StdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ + (*OneofStdTypes_Timestamp)(nil), + (*OneofStdTypes_Duration)(nil), + (*OneofStdTypes_RepDouble)(nil), + (*OneofStdTypes_RepFloat)(nil), + (*OneofStdTypes_RepInt64)(nil), + (*OneofStdTypes_RepUInt64)(nil), + (*OneofStdTypes_RepInt32)(nil), + (*OneofStdTypes_RepUInt32)(nil), + (*OneofStdTypes_RepBool)(nil), + (*OneofStdTypes_RepString)(nil), + (*OneofStdTypes_RepBytes)(nil), } +} - that1, ok := that.(*StdTypes) - if !ok { - that2, ok := that.(StdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *StdTypes") +func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdTimeMarshal(*x.Timestamp) + if err != nil { + return err } - } - if that1 == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that is type *StdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") - } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") + case *OneofStdTypes_Duration: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDurationMarshal(*x.Duration) + if err != nil { + return err } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) - } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } else if this.NullableDuration != nil { - return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") - } else if that1.NullableDuration != nil { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) - } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) - } - if this.Duration != that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil -} -func (this *StdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*StdTypes) - if !ok { - that2, ok := that.(StdTypes) - if ok { - that1 = &that2 - } else { - return false + case *OneofStdTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDoubleMarshal(*x.RepDouble) + if err != nil { + return err } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return false + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return false - } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return false + case *OneofStdTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdFloatMarshal(*x.RepFloat) + if err != nil { + return err } - } else if this.NullableDuration != nil { - return false - } else if that1.NullableDuration != nil { - return false - } - if !this.Timestamp.Equal(that1.Timestamp) { - return false - } - if this.Duration != that1.Duration { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RepProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *RepProtoTypes") + case *OneofStdTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt64Marshal(*x.RepInt64) + if err != nil { + return err } - } - if that1 == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that is type *RepProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *RepProtoTypes but is not nil && this == nil") - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + case *OneofStdTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt64Marshal(*x.RepUInt64) + if err != nil { + return err } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) - } - for i := range this.NullableDurations { - if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + case *OneofStdTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt32Marshal(*x.RepInt32) + if err != nil { + return err } - } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) - } - for i := range this.Durations { - if !this.Durations[i].Equal(&that1.Durations[i]) { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + case *OneofStdTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt32Marshal(*x.RepUInt32) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBoolMarshal(*x.RepBool) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdStringMarshal(*x.RepString) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBytesMarshal(*x.RepBytes) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) } return nil } -func (this *RepProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return false +func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofStdTypes) + switch tag { + case 1: // OneOfStdTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { - return false + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return false - } - for i := range this.NullableDurations { - if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { - return false + c := new(time.Time) + if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { + return true, err } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return false - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { - return false + m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} + return true, err + case 2: // OneOfStdTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if len(this.Durations) != len(that1.Durations) { - return false - } - for i := range this.Durations { - if !this.Durations[i].Equal(&that1.Durations[i]) { - return false + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(time.Duration) + if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_Duration{c} + return true, err + case 3: // OneOfStdTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(float64) + if err2 := github_com_gogo_protobuf_types.StdDoubleUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepDouble{c} + return true, err + case 4: // OneOfStdTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(float32) + if err2 := github_com_gogo_protobuf_types.StdFloatUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepFloat{c} + return true, err + case 5: // OneOfStdTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int64) + if err2 := github_com_gogo_protobuf_types.StdInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt64{c} + return true, err + case 6: // OneOfStdTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } + c := new(uint64) + if err2 := github_com_gogo_protobuf_types.StdUInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt64{c} + return true, err + case 7: // OneOfStdTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int32) + if err2 := github_com_gogo_protobuf_types.StdInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt32{c} + return true, err + case 8: // OneOfStdTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(uint32) + if err2 := github_com_gogo_protobuf_types.StdUInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt32{c} + return true, err + case 9: // OneOfStdTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(bool) + if err2 := github_com_gogo_protobuf_types.StdBoolUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBool{c} + return true, err + case 10: // OneOfStdTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(string) + if err2 := github_com_gogo_protobuf_types.StdStringUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepString{c} + return true, err + case 11: // OneOfStdTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new([]byte) + if err2 := github_com_gogo_protobuf_types.StdBytesUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBytes{c} + return true, err + default: + return false, nil } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false +} + +func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_Duration: + s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepDouble: + s := github_com_gogo_protobuf_types.SizeOfStdDouble(*x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepFloat: + s := github_com_gogo_protobuf_types.SizeOfStdFloat(*x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt64: + s := github_com_gogo_protobuf_types.SizeOfStdInt64(*x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt64: + s := github_com_gogo_protobuf_types.SizeOfStdUInt64(*x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt32: + s := github_com_gogo_protobuf_types.SizeOfStdInt32(*x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt32: + s := github_com_gogo_protobuf_types.SizeOfStdUInt32(*x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBool: + s := github_com_gogo_protobuf_types.SizeOfStdBool(*x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepString: + s := github_com_gogo_protobuf_types.SizeOfStdString(*x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBytes: + s := github_com_gogo_protobuf_types.SizeOfStdBytes(*x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - return true + return n } -func (this *RepStdTypes) VerboseEqual(that interface{}) error { + +func init() { + proto.RegisterType((*KnownTypes)(nil), "types.KnownTypes") + proto.RegisterType((*ProtoTypes)(nil), "types.ProtoTypes") + proto.RegisterType((*StdTypes)(nil), "types.StdTypes") + proto.RegisterType((*RepProtoTypes)(nil), "types.RepProtoTypes") + proto.RegisterType((*RepStdTypes)(nil), "types.RepStdTypes") + proto.RegisterType((*MapProtoTypes)(nil), "types.MapProtoTypes") + proto.RegisterMapType((map[int32]types.Duration)(nil), "types.MapProtoTypes.DurationEntry") + proto.RegisterMapType((map[int32]types.BoolValue)(nil), "types.MapProtoTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32]types.BytesValue)(nil), "types.MapProtoTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]types.DoubleValue)(nil), "types.MapProtoTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]types.FloatValue)(nil), "types.MapProtoTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]types.Int32Value)(nil), "types.MapProtoTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]types.Int64Value)(nil), "types.MapProtoTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]types.StringValue)(nil), "types.MapProtoTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]types.UInt32Value)(nil), "types.MapProtoTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]types.UInt64Value)(nil), "types.MapProtoTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*types.BoolValue)(nil), "types.MapProtoTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*types.BytesValue)(nil), "types.MapProtoTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*types.DoubleValue)(nil), "types.MapProtoTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*types.Duration)(nil), "types.MapProtoTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*types.FloatValue)(nil), "types.MapProtoTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*types.Int32Value)(nil), "types.MapProtoTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*types.Int64Value)(nil), "types.MapProtoTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*types.StringValue)(nil), "types.MapProtoTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*types.Timestamp)(nil), "types.MapProtoTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*types.UInt32Value)(nil), "types.MapProtoTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*types.UInt64Value)(nil), "types.MapProtoTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]types.Timestamp)(nil), "types.MapProtoTypes.TimestampEntry") + proto.RegisterType((*MapStdTypes)(nil), "types.MapStdTypes") + proto.RegisterMapType((map[int32]time.Duration)(nil), "types.MapStdTypes.DurationEntry") + proto.RegisterMapType((map[int32]bool)(nil), "types.MapStdTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32][]byte)(nil), "types.MapStdTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]float64)(nil), "types.MapStdTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]float32)(nil), "types.MapStdTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]int32)(nil), "types.MapStdTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]int64)(nil), "types.MapStdTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]string)(nil), "types.MapStdTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]uint32)(nil), "types.MapStdTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]uint64)(nil), "types.MapStdTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*bool)(nil), "types.MapStdTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*[]byte)(nil), "types.MapStdTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*float64)(nil), "types.MapStdTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*time.Duration)(nil), "types.MapStdTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*float32)(nil), "types.MapStdTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*int32)(nil), "types.MapStdTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*int64)(nil), "types.MapStdTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*string)(nil), "types.MapStdTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*time.Time)(nil), "types.MapStdTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*uint32)(nil), "types.MapStdTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*uint64)(nil), "types.MapStdTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]time.Time)(nil), "types.MapStdTypes.TimestampEntry") + proto.RegisterType((*OneofProtoTypes)(nil), "types.OneofProtoTypes") + proto.RegisterType((*OneofStdTypes)(nil), "types.OneofStdTypes") +} +func (this *KnownTypes) Compare(that interface{}) int { if that == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - that1, ok := that.(*RepStdTypes) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(RepStdTypes) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *RepStdTypes") + return 1 } } if that1 == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") + return 1 } else if this == nil { - return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") + return -1 } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + if c := this.Dur.Compare(that1.Dur); c != 0 { + return c } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) - } + if c := this.Ts.Compare(that1.Ts); c != 0 { + return c } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + if c := this.Dbl.Compare(that1.Dbl); c != 0 { + return c } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) - } + if c := this.Flt.Compare(that1.Flt); c != 0 { + return c } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + if c := this.I64.Compare(that1.I64); c != 0 { + return c } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) - } + if c := this.U64.Compare(that1.U64); c != 0 { + return c } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + if c := this.I32.Compare(that1.I32); c != 0 { + return c } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) - } + if c := this.U32.Compare(that1.U32); c != 0 { + return c } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if c := this.Bool.Compare(that1.Bool); c != 0 { + return c } - return nil -} -func (this *RepStdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RepStdTypes) - if !ok { - that2, ok := that.(RepStdTypes) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return false - } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return false - } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false - } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return false - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return false - } - } - if len(this.Durations) != len(that1.Durations) { - return false + if c := this.Str.Compare(that1.Str); c != 0 { + return c } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return false - } + if c := this.Bytes.Compare(that1.Bytes); c != 0 { + return c } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c } - return true + return 0 } -func (this *MapProtoTypes) VerboseEqual(that interface{}) error { +func (this *ProtoTypes) Compare(that interface{}) int { if that == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - that1, ok := that.(*MapProtoTypes) + that1, ok := that.(*ProtoTypes) if !ok { - that2, ok := that.(MapProtoTypes) + that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *MapProtoTypes") + return 1 } } if that1 == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that is type *MapProtoTypes but is nil && this != nil") + return 1 } else if this == nil { - return fmt.Errorf("that is type *MapProtoTypes but is not nil && this == nil") + return -1 } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + if c := this.NullableTimestamp.Compare(that1.NullableTimestamp); c != 0 { + return c } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) - } + if c := this.NullableDuration.Compare(that1.NullableDuration); c != 0 { + return c } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + if c := this.NullableDouble.Compare(that1.NullableDouble); c != 0 { + return c } - for i := range this.Timestamp { - a := this.Timestamp[i] - b := that1.Timestamp[i] - if !(&a).Equal(&b) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) - } + if c := this.NullableFloat.Compare(that1.NullableFloat); c != 0 { + return c } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + if c := this.NullableInt64.Compare(that1.NullableInt64); c != 0 { + return c } - for i := range this.NullableDuration { - if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) - } + if c := this.NullableUInt64.Compare(that1.NullableUInt64); c != 0 { + return c } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + if c := this.NullableInt32.Compare(that1.NullableInt32); c != 0 { + return c } - for i := range this.Duration { - a := this.Duration[i] - b := that1.Duration[i] - if !(&a).Equal(&b) { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) - } + if c := this.NullableUInt32.Compare(that1.NullableUInt32); c != 0 { + return c } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if c := this.NullableBool.Compare(that1.NullableBool); c != 0 { + return c } - return nil -} -func (this *MapProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + if c := this.NullableString.Compare(that1.NullableString); c != 0 { + return c } - - that1, ok := that.(*MapProtoTypes) - if !ok { - that2, ok := that.(MapProtoTypes) - if ok { - that1 = &that2 - } else { - return false - } + if c := this.NullableBytes.Compare(that1.NullableBytes); c != 0 { + return c } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if c := this.Timestamp.Compare(&that1.Timestamp); c != 0 { + return c } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return false + if c := this.Duration.Compare(&that1.Duration); c != 0 { + return c } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { - return false - } + if c := this.NonnullDouble.Compare(&that1.NonnullDouble); c != 0 { + return c } - if len(this.Timestamp) != len(that1.Timestamp) { - return false + if c := this.NonnullFloat.Compare(&that1.NonnullFloat); c != 0 { + return c } - for i := range this.Timestamp { - a := this.Timestamp[i] - b := that1.Timestamp[i] - if !(&a).Equal(&b) { - return false - } + if c := this.NonnullInt64.Compare(&that1.NonnullInt64); c != 0 { + return c } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return false + if c := this.NonnullUInt64.Compare(&that1.NonnullUInt64); c != 0 { + return c } - for i := range this.NullableDuration { - if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { - return false - } + if c := this.NonnullInt32.Compare(&that1.NonnullInt32); c != 0 { + return c } - if len(this.Duration) != len(that1.Duration) { - return false + if c := this.NonnullUInt32.Compare(&that1.NonnullUInt32); c != 0 { + return c } - for i := range this.Duration { - a := this.Duration[i] - b := that1.Duration[i] - if !(&a).Equal(&b) { - return false - } + if c := this.NonnullBool.Compare(&that1.NonnullBool); c != 0 { + return c } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if c := this.NonnullString.Compare(&that1.NonnullString); c != 0 { + return c } - return true + if c := this.NonnullBytes.Compare(&that1.NonnullBytes); c != 0 { + return c + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 } -func (this *MapStdTypes) VerboseEqual(that interface{}) error { +func (this *RepProtoTypes) Compare(that interface{}) int { if that == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - that1, ok := that.(*MapStdTypes) + that1, ok := that.(*RepProtoTypes) if !ok { - that2, ok := that.(MapStdTypes) + that2, ok := that.(RepProtoTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *MapStdTypes") + return 1 } } if that1 == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") + return 1 } else if this == nil { - return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") + return -1 } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + if len(this.NullableTimestamps) < len(that1.NullableTimestamps) { + return -1 + } + return 1 } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + for i := range this.NullableTimestamps { + if c := this.NullableTimestamps[i].Compare(that1.NullableTimestamps[i]); c != 0 { + return c } } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + if len(this.NullableDurations) != len(that1.NullableDurations) { + if len(this.NullableDurations) < len(that1.NullableDurations) { + return -1 + } + return 1 } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + for i := range this.NullableDurations { + if c := this.NullableDurations[i].Compare(that1.NullableDurations[i]); c != 0 { + return c } } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + if len(this.Timestamps) != len(that1.Timestamps) { + if len(this.Timestamps) < len(that1.Timestamps) { + return -1 + } + return 1 } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + for i := range this.Timestamps { + if c := this.Timestamps[i].Compare(&that1.Timestamps[i]); c != 0 { + return c } } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + if len(this.Durations) != len(that1.Durations) { + if len(this.Durations) < len(that1.Durations) { + return -1 + } + return 1 } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + for i := range this.Durations { + if c := this.Durations[i].Compare(&that1.Durations[i]); c != 0 { + return c } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if len(this.NullableDouble) != len(that1.NullableDouble) { + if len(this.NullableDouble) < len(that1.NullableDouble) { + return -1 + } + return 1 } - return nil -} -func (this *MapStdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + for i := range this.NullableDouble { + if c := this.NullableDouble[i].Compare(that1.NullableDouble[i]); c != 0 { + return c + } } - - that1, ok := that.(*MapStdTypes) - if !ok { - that2, ok := that.(MapStdTypes) - if ok { - that1 = &that2 - } else { - return false + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + if len(this.NonnullDouble) < len(that1.NonnullDouble) { + return -1 } + return 1 } - if that1 == nil { - return this == nil - } else if this == nil { - return false + for i := range this.NonnullDouble { + if c := this.NonnullDouble[i].Compare(&that1.NonnullDouble[i]); c != 0 { + return c + } } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return false + if len(this.NullableFloat) != len(that1.NullableFloat) { + if len(this.NullableFloat) < len(that1.NullableFloat) { + return -1 + } + return 1 } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return false + for i := range this.NullableFloat { + if c := this.NullableFloat[i].Compare(that1.NullableFloat[i]); c != 0 { + return c } } - if len(this.Timestamp) != len(that1.Timestamp) { - return false + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + if len(this.NonnullFloat) < len(that1.NonnullFloat) { + return -1 + } + return 1 } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return false + for i := range this.NonnullFloat { + if c := this.NonnullFloat[i].Compare(&that1.NonnullFloat[i]); c != 0 { + return c } } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return false + if len(this.NullableInt64) != len(that1.NullableInt64) { + if len(this.NullableInt64) < len(that1.NullableInt64) { + return -1 + } + return 1 } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false + for i := range this.NullableInt64 { + if c := this.NullableInt64[i].Compare(that1.NullableInt64[i]); c != 0 { + return c } } - if len(this.Duration) != len(that1.Duration) { - return false + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + if len(this.NonnullInt64) < len(that1.NonnullInt64) { + return -1 + } + return 1 } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return false + for i := range this.NonnullInt64 { + if c := this.NonnullInt64[i].Compare(&that1.NonnullInt64[i]); c != 0 { + return c } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + if len(this.NullableUInt64) < len(that1.NullableUInt64) { + return -1 + } + return 1 } - return true -} -func (this *OneofProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + for i := range this.NullableUInt64 { + if c := this.NullableUInt64[i].Compare(that1.NullableUInt64[i]); c != 0 { + return c } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*OneofProtoTypes) - if !ok { - that2, ok := that.(OneofProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofProtoTypes") + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + if len(this.NonnullUInt64) < len(that1.NonnullUInt64) { + return -1 } + return 1 } - if that1 == nil { - if this == nil { - return nil + for i := range this.NonnullUInt64 { + if c := this.NonnullUInt64[i].Compare(&that1.NonnullUInt64[i]); c != 0 { + return c } - return fmt.Errorf("that is type *OneofProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes but is not nil && this == nil") } - if that1.OneOfProtoTimes == nil { - if this.OneOfProtoTimes != nil { - return fmt.Errorf("this.OneOfProtoTimes != nil && that1.OneOfProtoTimes == nil") + if len(this.NullableInt32) != len(that1.NullableInt32) { + if len(this.NullableInt32) < len(that1.NullableInt32) { + return -1 } - } else if this.OneOfProtoTimes == nil { - return fmt.Errorf("this.OneOfProtoTimes == nil && that1.OneOfProtoTimes != nil") - } else if err := this.OneOfProtoTimes.VerboseEqual(that1.OneOfProtoTimes); err != nil { - return err + return 1 } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + for i := range this.NullableInt32 { + if c := this.NullableInt32[i].Compare(that1.NullableInt32[i]); c != 0 { + return c + } } - return nil -} -func (this *OneofProtoTypes_Timestamp) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + if len(this.NonnullInt32) < len(that1.NonnullInt32) { + return -1 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - - that1, ok := that.(*OneofProtoTypes_Timestamp) - if !ok { - that2, ok := that.(OneofProtoTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofProtoTypes_Timestamp") + for i := range this.NonnullInt32 { + if c := this.NonnullInt32[i].Compare(&that1.NonnullInt32[i]); c != 0 { + return c } } - if that1 == nil { - if this == nil { - return nil + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + if len(this.NullableUInt32) < len(that1.NullableUInt32) { + return -1 } - return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is not nil && this == nil") + return 1 } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + for i := range this.NullableUInt32 { + if c := this.NullableUInt32[i].Compare(that1.NullableUInt32[i]); c != 0 { + return c + } } - return nil + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + if len(this.NonnullUInt32) < len(that1.NonnullUInt32) { + return -1 + } + return 1 + } + for i := range this.NonnullUInt32 { + if c := this.NonnullUInt32[i].Compare(&that1.NonnullUInt32[i]); c != 0 { + return c + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + if len(this.NullableBool) < len(that1.NullableBool) { + return -1 + } + return 1 + } + for i := range this.NullableBool { + if c := this.NullableBool[i].Compare(that1.NullableBool[i]); c != 0 { + return c + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + if len(this.NonnullBool) < len(that1.NonnullBool) { + return -1 + } + return 1 + } + for i := range this.NonnullBool { + if c := this.NonnullBool[i].Compare(&that1.NonnullBool[i]); c != 0 { + return c + } + } + if len(this.NullableString) != len(that1.NullableString) { + if len(this.NullableString) < len(that1.NullableString) { + return -1 + } + return 1 + } + for i := range this.NullableString { + if c := this.NullableString[i].Compare(that1.NullableString[i]); c != 0 { + return c + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + if len(this.NonnullString) < len(that1.NonnullString) { + return -1 + } + return 1 + } + for i := range this.NonnullString { + if c := this.NonnullString[i].Compare(&that1.NonnullString[i]); c != 0 { + return c + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + if len(this.NullableBytes) < len(that1.NullableBytes) { + return -1 + } + return 1 + } + for i := range this.NullableBytes { + if c := this.NullableBytes[i].Compare(that1.NullableBytes[i]); c != 0 { + return c + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + if len(this.NonnullBytes) < len(that1.NonnullBytes) { + return -1 + } + return 1 + } + for i := range this.NonnullBytes { + if c := this.NonnullBytes[i].Compare(&that1.NonnullBytes[i]); c != 0 { + return c + } + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 } -func (this *OneofProtoTypes_Duration) VerboseEqual(that interface{}) error { +func (this *KnownTypes) VerboseEqual(that interface{}) error { if that == nil { if this == nil { return nil @@ -1962,36 +2917,69 @@ return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*OneofProtoTypes_Duration) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(OneofProtoTypes_Duration) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofProtoTypes_Duration") + return fmt.Errorf("that is not of type *KnownTypes") } } if that1 == nil { if this == nil { return nil } - return fmt.Errorf("that is type *OneofProtoTypes_Duration but is nil && this != nil") + return fmt.Errorf("that is type *KnownTypes but is nil && this != nil") } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes_Duration but is not nil && this == nil") + return fmt.Errorf("that is type *KnownTypes but is not nil && this == nil") } - if !this.Duration.Equal(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + if !this.Dur.Equal(that1.Dur) { + return fmt.Errorf("Dur this(%v) Not Equal that(%v)", this.Dur, that1.Dur) + } + if !this.Ts.Equal(that1.Ts) { + return fmt.Errorf("Ts this(%v) Not Equal that(%v)", this.Ts, that1.Ts) + } + if !this.Dbl.Equal(that1.Dbl) { + return fmt.Errorf("Dbl this(%v) Not Equal that(%v)", this.Dbl, that1.Dbl) + } + if !this.Flt.Equal(that1.Flt) { + return fmt.Errorf("Flt this(%v) Not Equal that(%v)", this.Flt, that1.Flt) + } + if !this.I64.Equal(that1.I64) { + return fmt.Errorf("I64 this(%v) Not Equal that(%v)", this.I64, that1.I64) + } + if !this.U64.Equal(that1.U64) { + return fmt.Errorf("U64 this(%v) Not Equal that(%v)", this.U64, that1.U64) + } + if !this.I32.Equal(that1.I32) { + return fmt.Errorf("I32 this(%v) Not Equal that(%v)", this.I32, that1.I32) + } + if !this.U32.Equal(that1.U32) { + return fmt.Errorf("U32 this(%v) Not Equal that(%v)", this.U32, that1.U32) + } + if !this.Bool.Equal(that1.Bool) { + return fmt.Errorf("Bool this(%v) Not Equal that(%v)", this.Bool, that1.Bool) + } + if !this.Str.Equal(that1.Str) { + return fmt.Errorf("Str this(%v) Not Equal that(%v)", this.Str, that1.Str) + } + if !this.Bytes.Equal(that1.Bytes) { + return fmt.Errorf("Bytes this(%v) Not Equal that(%v)", this.Bytes, that1.Bytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) } return nil } -func (this *OneofProtoTypes) Equal(that interface{}) bool { +func (this *KnownTypes) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*OneofProtoTypes) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(OneofProtoTypes) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { @@ -2003,69 +2991,45 @@ } else if this == nil { return false } - if that1.OneOfProtoTimes == nil { - if this.OneOfProtoTimes != nil { - return false - } - } else if this.OneOfProtoTimes == nil { + if !this.Dur.Equal(that1.Dur) { return false - } else if !this.OneOfProtoTimes.Equal(that1.OneOfProtoTimes) { + } + if !this.Ts.Equal(that1.Ts) { return false } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + if !this.Dbl.Equal(that1.Dbl) { return false } - return true -} -func (this *OneofProtoTypes_Timestamp) Equal(that interface{}) bool { - if that == nil { - return this == nil + if !this.Flt.Equal(that1.Flt) { + return false } - - that1, ok := that.(*OneofProtoTypes_Timestamp) - if !ok { - that2, ok := that.(OneofProtoTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return false - } + if !this.I64.Equal(that1.I64) { + return false } - if that1 == nil { - return this == nil - } else if this == nil { + if !this.U64.Equal(that1.U64) { return false } - if !this.Timestamp.Equal(that1.Timestamp) { + if !this.I32.Equal(that1.I32) { return false } - return true -} -func (this *OneofProtoTypes_Duration) Equal(that interface{}) bool { - if that == nil { - return this == nil + if !this.U32.Equal(that1.U32) { + return false } - - that1, ok := that.(*OneofProtoTypes_Duration) - if !ok { - that2, ok := that.(OneofProtoTypes_Duration) - if ok { - that1 = &that2 - } else { - return false - } + if !this.Bool.Equal(that1.Bool) { + return false } - if that1 == nil { - return this == nil - } else if this == nil { + if !this.Str.Equal(that1.Str) { return false } - if !this.Duration.Equal(that1.Duration) { + if !this.Bytes.Equal(that1.Bytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } return true } -func (this *OneofStdTypes) VerboseEqual(that interface{}) error { +func (this *ProtoTypes) VerboseEqual(that interface{}) error { if that == nil { if this == nil { return nil @@ -2073,72 +3037,185 @@ return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*OneofStdTypes) + that1, ok := that.(*ProtoTypes) if !ok { - that2, ok := that.(OneofStdTypes) + that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes") + return fmt.Errorf("that is not of type *ProtoTypes") } } if that1 == nil { if this == nil { return nil } - return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") + return fmt.Errorf("that is type *ProtoTypes but is nil && this != nil") } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + return fmt.Errorf("that is type *ProtoTypes but is not nil && this == nil") } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { - return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") - } - } else if this.OneOfStdTimes == nil { - return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") - } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { - return err + if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) + } + if !this.NullableDuration.Equal(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) + } + if !this.NullableDouble.Equal(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) + } + if !this.NullableFloat.Equal(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) + } + if !this.NullableInt64.Equal(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) + } + if !this.NullableUInt64.Equal(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) + } + if !this.NullableInt32.Equal(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) + } + if !this.NullableUInt32.Equal(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) + } + if !this.NullableBool.Equal(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) + } + if !this.NullableString.Equal(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) + } + if !this.NullableBytes.Equal(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) + } + if !this.Timestamp.Equal(&that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + if !this.Duration.Equal(&that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + if !this.NonnullDouble.Equal(&that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) + } + if !this.NonnullFloat.Equal(&that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) + } + if !this.NonnullInt64.Equal(&that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) + } + if !this.NonnullUInt64.Equal(&that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) + } + if !this.NonnullInt32.Equal(&that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) + } + if !this.NonnullUInt32.Equal(&that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) + } + if !this.NonnullBool.Equal(&that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) + } + if !this.NonnullString.Equal(&that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) + } + if !this.NonnullBytes.Equal(&that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) } return nil } -func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { +func (this *ProtoTypes) Equal(that interface{}) bool { if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + return this == nil } - that1, ok := that.(*OneofStdTypes_Timestamp) + that1, ok := that.(*ProtoTypes) if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) + that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + return false } } if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") + return this == nil } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") + return false } - if that1.Timestamp == nil { - if this.Timestamp != nil { - return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") - } - } else if !this.Timestamp.Equal(*that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { + return false } - return nil + if !this.NullableDuration.Equal(that1.NullableDuration) { + return false + } + if !this.NullableDouble.Equal(that1.NullableDouble) { + return false + } + if !this.NullableFloat.Equal(that1.NullableFloat) { + return false + } + if !this.NullableInt64.Equal(that1.NullableInt64) { + return false + } + if !this.NullableUInt64.Equal(that1.NullableUInt64) { + return false + } + if !this.NullableInt32.Equal(that1.NullableInt32) { + return false + } + if !this.NullableUInt32.Equal(that1.NullableUInt32) { + return false + } + if !this.NullableBool.Equal(that1.NullableBool) { + return false + } + if !this.NullableString.Equal(that1.NullableString) { + return false + } + if !this.NullableBytes.Equal(that1.NullableBytes) { + return false + } + if !this.Timestamp.Equal(&that1.Timestamp) { + return false + } + if !this.Duration.Equal(&that1.Duration) { + return false + } + if !this.NonnullDouble.Equal(&that1.NonnullDouble) { + return false + } + if !this.NonnullFloat.Equal(&that1.NonnullFloat) { + return false + } + if !this.NonnullInt64.Equal(&that1.NonnullInt64) { + return false + } + if !this.NonnullUInt64.Equal(&that1.NonnullUInt64) { + return false + } + if !this.NonnullInt32.Equal(&that1.NonnullInt32) { + return false + } + if !this.NonnullUInt32.Equal(&that1.NonnullUInt32) { + return false + } + if !this.NonnullBool.Equal(&that1.NonnullBool) { + return false + } + if !this.NonnullString.Equal(&that1.NonnullString) { + return false + } + if !this.NonnullBytes.Equal(&that1.NonnullBytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true } -func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { +func (this *StdTypes) VerboseEqual(that interface{}) error { if that == nil { if this == nil { return nil @@ -2146,42 +3223,164 @@ return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*OneofStdTypes_Duration) + that1, ok := that.(*StdTypes) if !ok { - that2, ok := that.(OneofStdTypes_Duration) + that2, ok := that.(StdTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + return fmt.Errorf("that is not of type *StdTypes") } } if that1 == nil { if this == nil { return nil } - return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + return fmt.Errorf("that is type *StdTypes but is nil && this != nil") } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") } - } else if this.Duration != nil { - return fmt.Errorf("this.Duration == nil && that.Duration != nil") - } else if that1.Duration != nil { + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) + } + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) + } + } else if this.NullableDuration != nil { + return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") + } else if that1.NullableDuration != nil { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) + } + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", *this.NullableDouble, *that1.NullableDouble) + } + } else if this.NullableDouble != nil { + return fmt.Errorf("this.NullableDouble == nil && that.NullableDouble != nil") + } else if that1.NullableDouble != nil { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) + } + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", *this.NullableFloat, *that1.NullableFloat) + } + } else if this.NullableFloat != nil { + return fmt.Errorf("this.NullableFloat == nil && that.NullableFloat != nil") + } else if that1.NullableFloat != nil { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) + } + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", *this.NullableInt64, *that1.NullableInt64) + } + } else if this.NullableInt64 != nil { + return fmt.Errorf("this.NullableInt64 == nil && that.NullableInt64 != nil") + } else if that1.NullableInt64 != nil { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) + } + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", *this.NullableUInt64, *that1.NullableUInt64) + } + } else if this.NullableUInt64 != nil { + return fmt.Errorf("this.NullableUInt64 == nil && that.NullableUInt64 != nil") + } else if that1.NullableUInt64 != nil { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) + } + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", *this.NullableInt32, *that1.NullableInt32) + } + } else if this.NullableInt32 != nil { + return fmt.Errorf("this.NullableInt32 == nil && that.NullableInt32 != nil") + } else if that1.NullableInt32 != nil { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) + } + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", *this.NullableUInt32, *that1.NullableUInt32) + } + } else if this.NullableUInt32 != nil { + return fmt.Errorf("this.NullableUInt32 == nil && that.NullableUInt32 != nil") + } else if that1.NullableUInt32 != nil { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) + } + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", *this.NullableBool, *that1.NullableBool) + } + } else if this.NullableBool != nil { + return fmt.Errorf("this.NullableBool == nil && that.NullableBool != nil") + } else if that1.NullableBool != nil { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) + } + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", *this.NullableString, *that1.NullableString) + } + } else if this.NullableString != nil { + return fmt.Errorf("this.NullableString == nil && that.NullableString != nil") + } else if that1.NullableString != nil { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) + } + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return fmt.Errorf("this.NullableBytes != nil && that1.NullableBytes == nil") + } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) + } + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + if this.Duration != that1.Duration { return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) } + if this.NonnullDouble != that1.NonnullDouble { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) + } + if this.NonnullFloat != that1.NonnullFloat { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) + } + if this.NonnullInt64 != that1.NonnullInt64 { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) + } + if this.NonnullUInt64 != that1.NonnullUInt64 { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) + } + if this.NonnullInt32 != that1.NonnullInt32 { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) + } + if this.NonnullUInt32 != that1.NonnullUInt32 { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) + } + if this.NonnullBool != that1.NonnullBool { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) + } + if this.NonnullString != that1.NonnullString { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) + } + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } return nil } -func (this *OneofStdTypes) Equal(that interface{}) bool { +func (this *StdTypes) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*OneofStdTypes) + that1, ok := that.(*StdTypes) if !ok { - that2, ok := that.(OneofStdTypes) + that2, ok := that.(StdTypes) if ok { that1 = &that2 } else { @@ -2193,1439 +3392,8203 @@ } else if this == nil { return false } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { return false } - } else if this.OneOfStdTimes == nil { + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { return false - } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { + } + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return false + } + } else if this.NullableDuration != nil { + return false + } else if that1.NullableDuration != nil { return false } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return false + } + } else if this.NullableDouble != nil { + return false + } else if that1.NullableDouble != nil { return false } - return true -} -func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { - if that == nil { - return this == nil + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return false + } + } else if this.NullableFloat != nil { + return false + } else if that1.NullableFloat != nil { + return false } - - that1, ok := that.(*OneofStdTypes_Timestamp) - if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) - if ok { - that1 = &that2 - } else { + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { return false } + } else if this.NullableInt64 != nil { + return false + } else if that1.NullableInt64 != nil { + return false } - if that1 == nil { - return this == nil - } else if this == nil { + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return false + } + } else if this.NullableUInt64 != nil { + return false + } else if that1.NullableUInt64 != nil { return false } - if that1.Timestamp == nil { - if this.Timestamp != nil { + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { return false } - } else if !this.Timestamp.Equal(*that1.Timestamp) { + } else if this.NullableInt32 != nil { + return false + } else if that1.NullableInt32 != nil { + return false + } + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return false + } + } else if this.NullableUInt32 != nil { + return false + } else if that1.NullableUInt32 != nil { + return false + } + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return false + } + } else if this.NullableBool != nil { + return false + } else if that1.NullableBool != nil { + return false + } + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return false + } + } else if this.NullableString != nil { + return false + } else if that1.NullableString != nil { + return false + } + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return false + } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return false + } + if !this.Timestamp.Equal(that1.Timestamp) { + return false + } + if this.Duration != that1.Duration { + return false + } + if this.NonnullDouble != that1.NonnullDouble { + return false + } + if this.NonnullFloat != that1.NonnullFloat { + return false + } + if this.NonnullInt64 != that1.NonnullInt64 { + return false + } + if this.NonnullUInt64 != that1.NonnullUInt64 { + return false + } + if this.NonnullInt32 != that1.NonnullInt32 { + return false + } + if this.NonnullUInt32 != that1.NonnullUInt32 { + return false + } + if this.NonnullBool != that1.NonnullBool { + return false + } + if this.NonnullString != that1.NonnullString { + return false + } + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } return true } -func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { +func (this *RepProtoTypes) VerboseEqual(that interface{}) error { if that == nil { - return this == nil + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*OneofStdTypes_Duration) + that1, ok := that.(*RepProtoTypes) if !ok { - that2, ok := that.(OneofStdTypes_Duration) + that2, ok := that.(RepProtoTypes) if ok { that1 = &that2 } else { - return false + return fmt.Errorf("that is not of type *RepProtoTypes") } } if that1 == nil { - return this == nil + if this == nil { + return nil + } + return fmt.Errorf("that is type *RepProtoTypes but is nil && this != nil") } else if this == nil { - return false + return fmt.Errorf("that is type *RepProtoTypes but is not nil && this == nil") } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return false + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) } - } else if this.Duration != nil { - return false - } else if that1.Duration != nil { - return false } - return true -} -func (m *KnownTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) } - return dAtA[:n], nil -} - -func (m *KnownTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Dur != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Dur.Size())) - n1, err := m.Dur.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for i := range this.NullableDurations { + if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) } - i += n1 } - if m.Ts != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Ts.Size())) - n2, err := m.Ts.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) } - i += n2 } - if m.Dbl != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Dbl.Size())) - n3, err := m.Dbl.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + } + for i := range this.Durations { + if !this.Durations[i].Equal(&that1.Durations[i]) { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) } - i += n3 } - if m.Flt != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Flt.Size())) - n4, err := m.Flt.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) } - i += n4 } - if m.I64 != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.I64.Size())) - n5, err := m.I64.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + if !this.NonnullDouble[i].Equal(&that1.NonnullDouble[i]) { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) } - i += n5 } - if m.U64 != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.U64.Size())) - n6, err := m.U64.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) } - i += n6 } - if m.I32 != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.I32.Size())) - n7, err := m.I32.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if !this.NonnullFloat[i].Equal(&that1.NonnullFloat[i]) { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) } - i += n7 } - if m.U32 != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.U32.Size())) - n8, err := m.U32.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) } - i += n8 } - if m.Bool != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Bool.Size())) - n9, err := m.Bool.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if !this.NonnullInt64[i].Equal(&that1.NonnullInt64[i]) { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) } - i += n9 } - if m.Str != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Str.Size())) - n10, err := m.Str.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) } - i += n10 } - if m.Bytes != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Bytes.Size())) - n11, err := m.Bytes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if !this.NonnullUInt64[i].Equal(&that1.NonnullUInt64[i]) { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) } - i += n11 } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) } - return i, nil -} - -func (m *ProtoTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } } - return dAtA[:n], nil -} - -func (m *ProtoTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.NullableTimestamp != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.NullableTimestamp.Size())) - n12, err := m.NullableTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if !this.NonnullInt32[i].Equal(&that1.NonnullInt32[i]) { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) } - i += n12 } - if m.NullableDuration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.NullableDuration.Size())) - n13, err := m.NullableDuration.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) } - i += n13 } - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) - n14, err := m.Timestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) } - i += n14 - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Duration.Size())) - n15, err := m.Duration.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for i := range this.NonnullUInt32 { + if !this.NonnullUInt32[i].Equal(&that1.NonnullUInt32[i]) { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } } - i += n15 - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) } - return i, nil -} - -func (m *StdTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } } - return dAtA[:n], nil -} - -func (m *StdTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.NullableTimestamp != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp))) - n16, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.NullableTimestamp, dAtA[i:]) - if err != nil { - return 0, err + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + if !this.NonnullBool[i].Equal(&that1.NonnullBool[i]) { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) } - i += n16 } - if m.NullableDuration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration))) - n17, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.NullableDuration, dAtA[i:]) - if err != nil { - return 0, err + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) } - i += n17 } - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp))) - n18, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:]) - if err != nil { - return 0, err + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) } - i += n18 - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration))) - n19, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Duration, dAtA[i:]) - if err != nil { - return 0, err + for i := range this.NonnullString { + if !this.NonnullString[i].Equal(&that1.NonnullString[i]) { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } } - i += n19 - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) } - return i, nil -} - -func (m *RepProtoTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } } - return dAtA[:n], nil + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + if !this.NonnullBytes[i].Equal(&that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil } +func (this *RepProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } -func (m *RepProtoTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, msg := range m.NullableTimestamps { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + that1, ok := that.(*RepProtoTypes) + if !ok { + that2, ok := that.(RepProtoTypes) + if ok { + that1 = &that2 + } else { + return false } } - if len(m.NullableDurations) > 0 { - for _, msg := range m.NullableDurations { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + if that1 == nil { + return this == nil + } else if this == nil { + return false } - if len(m.Timestamps) > 0 { - for _, msg := range m.Timestamps { - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { + return false } } - if len(m.Durations) > 0 { - for _, msg := range m.Durations { - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false + } + for i := range this.NullableDurations { + if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { + return false } } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if len(this.Timestamps) != len(that1.Timestamps) { + return false } - return i, nil -} - -func (m *RepStdTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { + return false + } } - return dAtA[:n], nil -} - -func (m *RepStdTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, msg := range m.NullableTimestamps { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*msg))) - n, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*msg, dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(this.Durations) != len(that1.Durations) { + return false + } + for i := range this.Durations { + if !this.Durations[i].Equal(&that1.Durations[i]) { + return false } } - if len(m.NullableDurations) > 0 { - for _, msg := range m.NullableDurations { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*msg))) - n, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*msg, dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return false } } - if len(m.Timestamps) > 0 { - for _, msg := range m.Timestamps { - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(msg))) - n, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(msg, dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + if !this.NonnullDouble[i].Equal(&that1.NonnullDouble[i]) { + return false } } - if len(m.Durations) > 0 { - for _, msg := range m.Durations { - dAtA[i] = 0x22 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(msg))) - n, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(msg, dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return false } } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false } - return i, nil -} - -func (m *MapProtoTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + for i := range this.NonnullFloat { + if !this.NonnullFloat[i].Equal(&that1.NonnullFloat[i]) { + return false + } } - return dAtA[:n], nil -} - -func (m *MapProtoTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k := range m.NullableTimestamp { - dAtA[i] = 0xa - i++ - v := m.NullableTimestamp[k] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(v.Size())) - n20, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return false } } - if len(m.Timestamp) > 0 { - for k := range m.Timestamp { - dAtA[i] = 0x12 - i++ - v := m.Timestamp[k] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) - n21, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + if !this.NonnullInt64[i].Equal(&that1.NonnullInt64[i]) { + return false } } - if len(m.NullableDuration) > 0 { - for k := range m.NullableDuration { - dAtA[i] = 0x1a - i++ - v := m.NullableDuration[k] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(v.Size())) - n22, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return false } } - if len(m.Duration) > 0 { - for k := range m.Duration { - dAtA[i] = 0x22 - i++ - v := m.Duration[k] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) - n23, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + if !this.NonnullUInt64[i].Equal(&that1.NonnullUInt64[i]) { + return false } } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false } - return i, nil -} - -func (m *MapStdTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return false + } } - return dAtA[:n], nil -} - -func (m *MapStdTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k := range m.NullableTimestamp { - dAtA[i] = 0xa - i++ - v := m.NullableTimestamp[k] - msgSize := 0 - if v != nil { - msgSize = github_com_gogo_protobuf_types.SizeOfStdTime(*v) - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*v))) - n24, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*v, dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + if !this.NonnullInt32[i].Equal(&that1.NonnullInt32[i]) { + return false } } - if len(m.Timestamp) > 0 { - for k := range m.Timestamp { - dAtA[i] = 0x12 - i++ - v := m.Timestamp[k] - msgSize := 0 - if (&v) != nil { - msgSize = github_com_gogo_protobuf_types.SizeOfStdTime(*(&v)) - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*(&v)))) - n25, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*(&v), dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return false } } - if len(m.NullableDuration) > 0 { - for k := range m.NullableDuration { - dAtA[i] = 0x1a - i++ - v := m.NullableDuration[k] - msgSize := 0 - if v != nil { - msgSize = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*v))) - n26, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*v, dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if !this.NonnullUInt32[i].Equal(&that1.NonnullUInt32[i]) { + return false } } - if len(m.Duration) > 0 { - for k := range m.Duration { - dAtA[i] = 0x22 - i++ - v := m.Duration[k] - msgSize := 0 - if (&v) != nil { - msgSize = github_com_gogo_protobuf_types.SizeOfStdDuration(*(&v)) - msgSize += 1 + sovTypes(uint64(msgSize)) - } - mapSize := 1 + sovTypes(uint64(k)) + msgSize - i = encodeVarintTypes(dAtA, i, uint64(mapSize)) - dAtA[i] = 0x8 - i++ - i = encodeVarintTypes(dAtA, i, uint64(k)) - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*(&v)))) - n27, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*(&v), dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + if !this.NonnullBool[i].Equal(&that1.NonnullBool[i]) { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return false } } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if !this.NonnullString[i].Equal(&that1.NonnullString[i]) { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + if !this.NonnullBytes[i].Equal(&that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *RepStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *RepStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + } + } + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *RepStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return false + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return false + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return false + } + } + if len(this.Durations) != len(that1.Durations) { + return false + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapProtoTypes) + if !ok { + that2, ok := that.(MapProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapProtoTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + a := this.Timestamp[i] + b := that1.Timestamp[i] + if !(&a).Equal(&b) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + a := this.Duration[i] + b := that1.Duration[i] + if !(&a).Equal(&b) { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapProtoTypes) + if !ok { + that2, ok := that.(MapProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + a := this.Timestamp[i] + b := that1.Timestamp[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + a := this.Duration[i] + b := that1.Duration[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !(&a).Equal(&b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes) + if !ok { + that2, ok := that.(OneofProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes but is not nil && this == nil") + } + if that1.OneOfProtoTimes == nil { + if this.OneOfProtoTimes != nil { + return fmt.Errorf("this.OneOfProtoTimes != nil && that1.OneOfProtoTimes == nil") + } + } else if this.OneOfProtoTimes == nil { + return fmt.Errorf("this.OneOfProtoTimes == nil && that1.OneOfProtoTimes != nil") + } else if err := this.OneOfProtoTimes.VerboseEqual(that1.OneOfProtoTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofProtoTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_Timestamp) + if !ok { + that2, ok := that.(OneofProtoTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is not nil && this == nil") + } + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + return nil +} +func (this *OneofProtoTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_Duration) + if !ok { + that2, ok := that.(OneofProtoTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_Duration") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_Duration but is not nil && this == nil") + } + if !this.Duration.Equal(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofProtoTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepDouble) + if !ok { + that2, ok := that.(OneofProtoTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepDouble") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepDouble but is not nil && this == nil") + } + if !this.RepDouble.Equal(that1.RepDouble) { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) + } + return nil +} +func (this *OneofProtoTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepFloat) + if !ok { + that2, ok := that.(OneofProtoTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepFloat but is not nil && this == nil") + } + if !this.RepFloat.Equal(that1.RepFloat) { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil +} +func (this *OneofProtoTypes_RepInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepInt64 but is not nil && this == nil") + } + if !this.RepInt64.Equal(that1.RepInt64) { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) + } + return nil +} +func (this *OneofProtoTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepUInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt64 but is not nil && this == nil") + } + if !this.RepUInt64.Equal(that1.RepUInt64) { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) + } + return nil +} +func (this *OneofProtoTypes_RepInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepInt32 but is not nil && this == nil") + } + if !this.RepInt32.Equal(that1.RepInt32) { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) + } + return nil +} +func (this *OneofProtoTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepUInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt32 but is not nil && this == nil") + } + if !this.RepUInt32.Equal(that1.RepUInt32) { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) + } + return nil +} +func (this *OneofProtoTypes_RepBool) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepBool) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBool) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepBool") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepBool but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepBool but is not nil && this == nil") + } + if !this.RepBool.Equal(that1.RepBool) { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) + } + return nil +} +func (this *OneofProtoTypes_RepString) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepString) + if !ok { + that2, ok := that.(OneofProtoTypes_RepString) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepString") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepString but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepString but is not nil && this == nil") + } + if !this.RepString.Equal(that1.RepString) { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) + } + return nil +} +func (this *OneofProtoTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepBytes) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepBytes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepBytes but is not nil && this == nil") + } + if !this.RepBytes.Equal(that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) + } + return nil +} +func (this *OneofProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes) + if !ok { + that2, ok := that.(OneofProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.OneOfProtoTimes == nil { + if this.OneOfProtoTimes != nil { + return false + } + } else if this.OneOfProtoTimes == nil { + return false + } else if !this.OneOfProtoTimes.Equal(that1.OneOfProtoTimes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofProtoTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_Timestamp) + if !ok { + that2, ok := that.(OneofProtoTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Timestamp.Equal(that1.Timestamp) { + return false + } + return true +} +func (this *OneofProtoTypes_Duration) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_Duration) + if !ok { + that2, ok := that.(OneofProtoTypes_Duration) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Duration.Equal(that1.Duration) { + return false + } + return true +} +func (this *OneofProtoTypes_RepDouble) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepDouble) + if !ok { + that2, ok := that.(OneofProtoTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepDouble.Equal(that1.RepDouble) { + return false + } + return true +} +func (this *OneofProtoTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepFloat) + if !ok { + that2, ok := that.(OneofProtoTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepFloat.Equal(that1.RepFloat) { + return false + } + return true +} +func (this *OneofProtoTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepInt64.Equal(that1.RepInt64) { + return false + } + return true +} +func (this *OneofProtoTypes_RepUInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepUInt64.Equal(that1.RepUInt64) { + return false + } + return true +} +func (this *OneofProtoTypes_RepInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepInt32.Equal(that1.RepInt32) { + return false + } + return true +} +func (this *OneofProtoTypes_RepUInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepUInt32.Equal(that1.RepUInt32) { + return false + } + return true +} +func (this *OneofProtoTypes_RepBool) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepBool) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBool) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepBool.Equal(that1.RepBool) { + return false + } + return true +} +func (this *OneofProtoTypes_RepString) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepString) + if !ok { + that2, ok := that.(OneofProtoTypes_RepString) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepString.Equal(that1.RepString) { + return false + } + return true +} +func (this *OneofProtoTypes_RepBytes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepBytes) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepBytes.Equal(that1.RepBytes) { + return false + } + return true +} +func (this *OneofStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") + } + } else if this.OneOfStdTimes == nil { + return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") + } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + return nil +} +func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) + } + } else if this.Duration != nil { + return fmt.Errorf("this.Duration == nil && that.Duration != nil") + } else if that1.Duration != nil { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofStdTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepDouble") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is not nil && this == nil") + } + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", *this.RepDouble, *that1.RepDouble) + } + } else if this.RepDouble != nil { + return fmt.Errorf("this.RepDouble == nil && that.RepDouble != nil") + } else if that1.RepDouble != nil { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) + } + return nil +} +func (this *OneofStdTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is not nil && this == nil") + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", *this.RepFloat, *that1.RepFloat) + } + } else if this.RepFloat != nil { + return fmt.Errorf("this.RepFloat == nil && that.RepFloat != nil") + } else if that1.RepFloat != nil { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil +} +func (this *OneofStdTypes_RepInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is not nil && this == nil") + } + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", *this.RepInt64, *that1.RepInt64) + } + } else if this.RepInt64 != nil { + return fmt.Errorf("this.RepInt64 == nil && that.RepInt64 != nil") + } else if that1.RepInt64 != nil { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) + } + return nil +} +func (this *OneofStdTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is not nil && this == nil") + } + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", *this.RepUInt64, *that1.RepUInt64) + } + } else if this.RepUInt64 != nil { + return fmt.Errorf("this.RepUInt64 == nil && that.RepUInt64 != nil") + } else if that1.RepUInt64 != nil { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) + } + return nil +} +func (this *OneofStdTypes_RepInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is not nil && this == nil") + } + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", *this.RepInt32, *that1.RepInt32) + } + } else if this.RepInt32 != nil { + return fmt.Errorf("this.RepInt32 == nil && that.RepInt32 != nil") + } else if that1.RepInt32 != nil { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) + } + return nil +} +func (this *OneofStdTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is not nil && this == nil") + } + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", *this.RepUInt32, *that1.RepUInt32) + } + } else if this.RepUInt32 != nil { + return fmt.Errorf("this.RepUInt32 == nil && that.RepUInt32 != nil") + } else if that1.RepUInt32 != nil { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) + } + return nil +} +func (this *OneofStdTypes_RepBool) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepBool) + if !ok { + that2, ok := that.(OneofStdTypes_RepBool) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBool") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is not nil && this == nil") + } + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", *this.RepBool, *that1.RepBool) + } + } else if this.RepBool != nil { + return fmt.Errorf("this.RepBool == nil && that.RepBool != nil") + } else if that1.RepBool != nil { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) + } + return nil +} +func (this *OneofStdTypes_RepString) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepString) + if !ok { + that2, ok := that.(OneofStdTypes_RepString) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepString") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepString but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepString but is not nil && this == nil") + } + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", *this.RepString, *that1.RepString) + } + } else if this.RepString != nil { + return fmt.Errorf("this.RepString == nil && that.RepString != nil") + } else if that1.RepString != nil { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) + } + return nil +} +func (this *OneofStdTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepBytes) + if !ok { + that2, ok := that.(OneofStdTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBytes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is not nil && this == nil") + } + if that1.RepBytes == nil { + if this.RepBytes != nil { + return fmt.Errorf("this.RepBytes != nil && that1.RepBytes == nil") + } + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) + } + return nil +} +func (this *OneofStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return false + } + } else if this.OneOfStdTimes == nil { + return false + } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return false + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return false + } + return true +} +func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return false + } + } else if this.Duration != nil { + return false + } else if that1.Duration != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepDouble) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return false + } + } else if this.RepDouble != nil { + return false + } else if that1.RepDouble != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return false + } + } else if this.RepFloat != nil { + return false + } else if that1.RepFloat != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return false + } + } else if this.RepInt64 != nil { + return false + } else if that1.RepInt64 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepUInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return false + } + } else if this.RepUInt64 != nil { + return false + } else if that1.RepUInt64 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return false + } + } else if this.RepInt32 != nil { + return false + } else if that1.RepInt32 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepUInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return false + } + } else if this.RepUInt32 != nil { + return false + } else if that1.RepUInt32 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepBool) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepBool) + if !ok { + that2, ok := that.(OneofStdTypes_RepBool) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return false + } + } else if this.RepBool != nil { + return false + } else if that1.RepBool != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepString) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepString) + if !ok { + that2, ok := that.(OneofStdTypes_RepString) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return false + } + } else if this.RepString != nil { + return false + } else if that1.RepString != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepBytes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepBytes) + if !ok { + that2, ok := that.(OneofStdTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.RepBytes == nil { + if this.RepBytes != nil { + return false + } + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return false + } + return true +} +func (m *KnownTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *KnownTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Dur != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Dur.Size())) + n1, err := m.Dur.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if m.Ts != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Ts.Size())) + n2, err := m.Ts.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + } + if m.Dbl != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Dbl.Size())) + n3, err := m.Dbl.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + } + if m.Flt != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Flt.Size())) + n4, err := m.Flt.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } + if m.I64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.I64.Size())) + n5, err := m.I64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + } + if m.U64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.U64.Size())) + n6, err := m.U64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + } + if m.I32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.I32.Size())) + n7, err := m.I32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + } + if m.U32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.U32.Size())) + n8, err := m.U32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + if m.Bool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Bool.Size())) + n9, err := m.Bool.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } + if m.Str != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Str.Size())) + n10, err := m.Str.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n10 + } + if m.Bytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Bytes.Size())) + n11, err := m.Bytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n11 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *ProtoTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProtoTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.NullableTimestamp != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableTimestamp.Size())) + n12, err := m.NullableTimestamp.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n12 + } + if m.NullableDuration != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableDuration.Size())) + n13, err := m.NullableDuration.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n13 + } + if m.NullableDouble != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableDouble.Size())) + n14, err := m.NullableDouble.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n14 + } + if m.NullableFloat != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableFloat.Size())) + n15, err := m.NullableFloat.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n15 + } + if m.NullableInt64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableInt64.Size())) + n16, err := m.NullableInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n16 + } + if m.NullableUInt64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableUInt64.Size())) + n17, err := m.NullableUInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n17 + } + if m.NullableInt32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableInt32.Size())) + n18, err := m.NullableInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n18 + } + if m.NullableUInt32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableUInt32.Size())) + n19, err := m.NullableUInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n19 + } + if m.NullableBool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableBool.Size())) + n20, err := m.NullableBool.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n20 + } + if m.NullableString != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableString.Size())) + n21, err := m.NullableString.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n21 + } + if m.NullableBytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NullableBytes.Size())) + n22, err := m.NullableBytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n22 + } + dAtA[i] = 0x62 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) + n23, err := m.Timestamp.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n23 + dAtA[i] = 0x6a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Duration.Size())) + n24, err := m.Duration.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n24 + dAtA[i] = 0x72 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullDouble.Size())) + n25, err := m.NonnullDouble.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n25 + dAtA[i] = 0x7a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullFloat.Size())) + n26, err := m.NonnullFloat.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n26 + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullInt64.Size())) + n27, err := m.NonnullInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n27 + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullUInt64.Size())) + n28, err := m.NonnullUInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n28 + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullInt32.Size())) + n29, err := m.NonnullInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n29 + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullUInt32.Size())) + n30, err := m.NonnullUInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n30 + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullBool.Size())) + n31, err := m.NonnullBool.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n31 + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullString.Size())) + n32, err := m.NonnullString.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n32 + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.NonnullBytes.Size())) + n33, err := m.NonnullBytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n33 + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *StdTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StdTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.NullableTimestamp != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp))) + n34, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.NullableTimestamp, dAtA[i:]) + if err != nil { + return 0, err + } + i += n34 + } + if m.NullableDuration != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration))) + n35, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.NullableDuration, dAtA[i:]) + if err != nil { + return 0, err + } + i += n35 + } + if m.NullableDouble != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*m.NullableDouble))) + n36, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*m.NullableDouble, dAtA[i:]) + if err != nil { + return 0, err + } + i += n36 + } + if m.NullableFloat != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*m.NullableFloat))) + n37, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*m.NullableFloat, dAtA[i:]) + if err != nil { + return 0, err + } + i += n37 + } + if m.NullableInt64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*m.NullableInt64))) + n38, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*m.NullableInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n38 + } + if m.NullableUInt64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.NullableUInt64))) + n39, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*m.NullableUInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n39 + } + if m.NullableInt32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*m.NullableInt32))) + n40, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*m.NullableInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n40 + } + if m.NullableUInt32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.NullableUInt32))) + n41, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.NullableUInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n41 + } + if m.NullableBool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*m.NullableBool))) + n42, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*m.NullableBool, dAtA[i:]) + if err != nil { + return 0, err + } + i += n42 + } + if m.NullableString != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*m.NullableString))) + n43, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*m.NullableString, dAtA[i:]) + if err != nil { + return 0, err + } + i += n43 + } + if m.NullableBytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*m.NullableBytes))) + n44, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*m.NullableBytes, dAtA[i:]) + if err != nil { + return 0, err + } + i += n44 + } + dAtA[i] = 0x62 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp))) + n45, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:]) + if err != nil { + return 0, err + } + i += n45 + dAtA[i] = 0x6a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration))) + n46, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Duration, dAtA[i:]) + if err != nil { + return 0, err + } + i += n46 + dAtA[i] = 0x72 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(m.NonnullDouble))) + n47, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(m.NonnullDouble, dAtA[i:]) + if err != nil { + return 0, err + } + i += n47 + dAtA[i] = 0x7a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(m.NonnullFloat))) + n48, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(m.NonnullFloat, dAtA[i:]) + if err != nil { + return 0, err + } + i += n48 + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(m.NonnullInt64))) + n49, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(m.NonnullInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n49 + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(m.NonnullUInt64))) + n50, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(m.NonnullUInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n50 + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(m.NonnullInt32))) + n51, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(m.NonnullInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n51 + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(m.NonnullUInt32))) + n52, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(m.NonnullUInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n52 + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(m.NonnullBool))) + n53, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(m.NonnullBool, dAtA[i:]) + if err != nil { + return 0, err + } + i += n53 + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(m.NonnullString))) + n54, err := github_com_gogo_protobuf_types.StdStringMarshalTo(m.NonnullString, dAtA[i:]) + if err != nil { + return 0, err + } + i += n54 + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(m.NonnullBytes))) + n55, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(m.NonnullBytes, dAtA[i:]) + if err != nil { + return 0, err + } + i += n55 + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *RepProtoTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RepProtoTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, msg := range m.NullableTimestamps { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableDurations) > 0 { + for _, msg := range m.NullableDurations { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Timestamps) > 0 { + for _, msg := range m.Timestamps { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Durations) > 0 { + for _, msg := range m.Durations { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableDouble) > 0 { + for _, msg := range m.NullableDouble { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullDouble) > 0 { + for _, msg := range m.NonnullDouble { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableFloat) > 0 { + for _, msg := range m.NullableFloat { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullFloat) > 0 { + for _, msg := range m.NonnullFloat { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableInt64) > 0 { + for _, msg := range m.NullableInt64 { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullInt64) > 0 { + for _, msg := range m.NonnullInt64 { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableUInt64) > 0 { + for _, msg := range m.NullableUInt64 { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullUInt64) > 0 { + for _, msg := range m.NonnullUInt64 { + dAtA[i] = 0x62 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableInt32) > 0 { + for _, msg := range m.NullableInt32 { + dAtA[i] = 0x6a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullInt32) > 0 { + for _, msg := range m.NonnullInt32 { + dAtA[i] = 0x72 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableUInt32) > 0 { + for _, msg := range m.NullableUInt32 { + dAtA[i] = 0x7a + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullUInt32) > 0 { + for _, msg := range m.NonnullUInt32 { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableBool) > 0 { + for _, msg := range m.NullableBool { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullBool) > 0 { + for _, msg := range m.NonnullBool { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableString) > 0 { + for _, msg := range m.NullableString { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullString) > 0 { + for _, msg := range m.NonnullString { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableBytes) > 0 { + for _, msg := range m.NullableBytes { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullBytes) > 0 { + for _, msg := range m.NonnullBytes { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *RepStdTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RepStdTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, msg := range m.NullableTimestamps { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*msg))) + n, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableDurations) > 0 { + for _, msg := range m.NullableDurations { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*msg))) + n, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Timestamps) > 0 { + for _, msg := range m.Timestamps { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(msg))) + n, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Durations) > 0 { + for _, msg := range m.Durations { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(msg))) + n, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableDouble) > 0 { + for _, msg := range m.NullableDouble { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*msg))) + n, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullDouble) > 0 { + for _, msg := range m.NonnullDouble { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(msg))) + n, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableFloat) > 0 { + for _, msg := range m.NullableFloat { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*msg))) + n, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullFloat) > 0 { + for _, msg := range m.NonnullFloat { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(msg))) + n, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableInt64) > 0 { + for _, msg := range m.NullableInt64 { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*msg))) + n, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullInt64) > 0 { + for _, msg := range m.NonnullInt64 { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(msg))) + n, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableUInt64) > 0 { + for _, msg := range m.NullableUInt64 { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*msg))) + n, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullUInt64) > 0 { + for _, msg := range m.NonnullUInt64 { + dAtA[i] = 0x62 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(msg))) + n, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableInt32) > 0 { + for _, msg := range m.NullableInt32 { + dAtA[i] = 0x6a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*msg))) + n, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullInt32) > 0 { + for _, msg := range m.NonnullInt32 { + dAtA[i] = 0x72 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(msg))) + n, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableUInt32) > 0 { + for _, msg := range m.NullableUInt32 { + dAtA[i] = 0x7a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*msg))) + n, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullUInt32) > 0 { + for _, msg := range m.NonnullUInt32 { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(msg))) + n, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableBool) > 0 { + for _, msg := range m.NullableBool { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*msg))) + n, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullBool) > 0 { + for _, msg := range m.NonnullBool { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(msg))) + n, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableString) > 0 { + for _, msg := range m.NullableString { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*msg))) + n, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullString) > 0 { + for _, msg := range m.NonnullString { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(msg))) + n, err := github_com_gogo_protobuf_types.StdStringMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NullableBytes) > 0 { + for _, msg := range m.NullableBytes { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*msg))) + n, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NonnullBytes) > 0 { + for _, msg := range m.NonnullBytes { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(msg))) + n, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(msg, dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *MapProtoTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MapProtoTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k := range m.NullableTimestamp { + dAtA[i] = 0xa + i++ + v := m.NullableTimestamp[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n56, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n56 + } + } + } + if len(m.Timestamp) > 0 { + for k := range m.Timestamp { + dAtA[i] = 0x12 + i++ + v := m.Timestamp[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n57, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n57 + } + } + if len(m.NullableDuration) > 0 { + for k := range m.NullableDuration { + dAtA[i] = 0x1a + i++ + v := m.NullableDuration[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n58, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n58 + } + } + } + if len(m.Duration) > 0 { + for k := range m.Duration { + dAtA[i] = 0x22 + i++ + v := m.Duration[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n59, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n59 + } + } + if len(m.NullableDouble) > 0 { + for k := range m.NullableDouble { + dAtA[i] = 0x2a + i++ + v := m.NullableDouble[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n60, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n60 + } + } + } + if len(m.NonnullDouble) > 0 { + for k := range m.NonnullDouble { + dAtA[i] = 0x32 + i++ + v := m.NonnullDouble[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n61, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n61 + } + } + if len(m.NullableFloat) > 0 { + for k := range m.NullableFloat { + dAtA[i] = 0x3a + i++ + v := m.NullableFloat[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n62, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n62 + } + } + } + if len(m.NonnullFloat) > 0 { + for k := range m.NonnullFloat { + dAtA[i] = 0x42 + i++ + v := m.NonnullFloat[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n63, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n63 + } + } + if len(m.NullableInt64) > 0 { + for k := range m.NullableInt64 { + dAtA[i] = 0x4a + i++ + v := m.NullableInt64[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n64, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n64 + } + } + } + if len(m.NonnullInt64) > 0 { + for k := range m.NonnullInt64 { + dAtA[i] = 0x52 + i++ + v := m.NonnullInt64[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n65, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n65 + } + } + if len(m.NullableUInt64) > 0 { + for k := range m.NullableUInt64 { + dAtA[i] = 0x5a + i++ + v := m.NullableUInt64[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n66, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n66 + } + } + } + if len(m.NonnullUInt64) > 0 { + for k := range m.NonnullUInt64 { + dAtA[i] = 0x62 + i++ + v := m.NonnullUInt64[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n67, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n67 + } + } + if len(m.NullableInt32) > 0 { + for k := range m.NullableInt32 { + dAtA[i] = 0x6a + i++ + v := m.NullableInt32[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n68, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n68 + } + } + } + if len(m.NonnullInt32) > 0 { + for k := range m.NonnullInt32 { + dAtA[i] = 0x72 + i++ + v := m.NonnullInt32[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n69, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n69 + } + } + if len(m.NullableUInt32) > 0 { + for k := range m.NullableUInt32 { + dAtA[i] = 0x7a + i++ + v := m.NullableUInt32[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n70, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n70 + } + } + } + if len(m.NonnullUInt32) > 0 { + for k := range m.NonnullUInt32 { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullUInt32[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n71, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n71 + } + } + if len(m.NullableBool) > 0 { + for k := range m.NullableBool { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableBool[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n72, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n72 + } + } + } + if len(m.NonnullBool) > 0 { + for k := range m.NonnullBool { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullBool[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n73, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n73 + } + } + if len(m.NullableString) > 0 { + for k := range m.NullableString { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableString[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n74, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n74 + } + } + } + if len(m.NonnullString) > 0 { + for k := range m.NonnullString { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullString[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n75, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n75 + } + } + if len(m.NullableBytes) > 0 { + for k := range m.NullableBytes { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableBytes[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(v.Size())) + n76, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n76 + } + } + } + if len(m.NonnullBytes) > 0 { + for k := range m.NonnullBytes { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullBytes[k] + msgSize := 0 + if (&v) != nil { + msgSize = (&v).Size() + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64((&v).Size())) + n77, err := (&v).MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n77 + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *MapStdTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MapStdTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k := range m.NullableTimestamp { + dAtA[i] = 0xa + i++ + v := m.NullableTimestamp[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdTime(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*v))) + n78, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n78 + } + } + } + if len(m.Timestamp) > 0 { + for k := range m.Timestamp { + dAtA[i] = 0x12 + i++ + v := m.Timestamp[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdTime(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*(&v)))) + n79, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n79 + } + } + if len(m.NullableDuration) > 0 { + for k := range m.NullableDuration { + dAtA[i] = 0x1a + i++ + v := m.NullableDuration[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*v))) + n80, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n80 + } + } + } + if len(m.Duration) > 0 { + for k := range m.Duration { + dAtA[i] = 0x22 + i++ + v := m.Duration[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdDuration(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*(&v)))) + n81, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n81 + } + } + if len(m.NullableDouble) > 0 { + for k := range m.NullableDouble { + dAtA[i] = 0x2a + i++ + v := m.NullableDouble[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdDouble(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*v))) + n82, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n82 + } + } + } + if len(m.NonnullDouble) > 0 { + for k := range m.NonnullDouble { + dAtA[i] = 0x32 + i++ + v := m.NonnullDouble[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdDouble(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*(&v)))) + n83, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n83 + } + } + if len(m.NullableFloat) > 0 { + for k := range m.NullableFloat { + dAtA[i] = 0x3a + i++ + v := m.NullableFloat[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdFloat(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*v))) + n84, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n84 + } + } + } + if len(m.NonnullFloat) > 0 { + for k := range m.NonnullFloat { + dAtA[i] = 0x42 + i++ + v := m.NonnullFloat[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdFloat(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*(&v)))) + n85, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n85 + } + } + if len(m.NullableInt64) > 0 { + for k := range m.NullableInt64 { + dAtA[i] = 0x4a + i++ + v := m.NullableInt64[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdInt64(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*v))) + n86, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n86 + } + } + } + if len(m.NonnullInt64) > 0 { + for k := range m.NonnullInt64 { + dAtA[i] = 0x52 + i++ + v := m.NonnullInt64[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdInt64(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*(&v)))) + n87, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n87 + } + } + if len(m.NullableUInt64) > 0 { + for k := range m.NullableUInt64 { + dAtA[i] = 0x5a + i++ + v := m.NullableUInt64[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdUInt64(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*v))) + n88, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n88 + } + } + } + if len(m.NonnullUInt64) > 0 { + for k := range m.NonnullUInt64 { + dAtA[i] = 0x62 + i++ + v := m.NonnullUInt64[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdUInt64(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*(&v)))) + n89, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n89 + } + } + if len(m.NullableInt32) > 0 { + for k := range m.NullableInt32 { + dAtA[i] = 0x6a + i++ + v := m.NullableInt32[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdInt32(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*v))) + n90, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n90 + } + } + } + if len(m.NonnullInt32) > 0 { + for k := range m.NonnullInt32 { + dAtA[i] = 0x72 + i++ + v := m.NonnullInt32[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdInt32(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*(&v)))) + n91, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n91 + } + } + if len(m.NullableUInt32) > 0 { + for k := range m.NullableUInt32 { + dAtA[i] = 0x7a + i++ + v := m.NullableUInt32[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdUInt32(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*v))) + n92, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n92 + } + } + } + if len(m.NonnullUInt32) > 0 { + for k := range m.NonnullUInt32 { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullUInt32[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdUInt32(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*(&v)))) + n93, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n93 + } + } + if len(m.NullableBool) > 0 { + for k := range m.NullableBool { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableBool[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdBool(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*v))) + n94, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n94 + } + } + } + if len(m.NonnullBool) > 0 { + for k := range m.NonnullBool { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullBool[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdBool(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*(&v)))) + n95, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n95 + } + } + if len(m.NullableString) > 0 { + for k := range m.NullableString { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableString[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdString(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*v))) + n96, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n96 + } + } + } + if len(m.NonnullString) > 0 { + for k := range m.NonnullString { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullString[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdString(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*(&v)))) + n97, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n97 + } + } + if len(m.NullableBytes) > 0 { + for k := range m.NullableBytes { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + v := m.NullableBytes[k] + msgSize := 0 + if v != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdBytes(*v) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*v))) + n98, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*v, dAtA[i:]) + if err != nil { + return 0, err + } + i += n98 + } + } + } + if len(m.NonnullBytes) > 0 { + for k := range m.NonnullBytes { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + v := m.NonnullBytes[k] + msgSize := 0 + if (&v) != nil { + msgSize = github_com_gogo_protobuf_types.SizeOfStdBytes(*(&v)) + msgSize += 1 + sovTypes(uint64(msgSize)) + } + mapSize := 1 + sovTypes(uint64(k)) + msgSize + i = encodeVarintTypes(dAtA, i, uint64(mapSize)) + dAtA[i] = 0x8 + i++ + i = encodeVarintTypes(dAtA, i, uint64(k)) + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*(&v)))) + n99, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*(&v), dAtA[i:]) + if err != nil { + return 0, err + } + i += n99 + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *OneofProtoTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OneofProtoTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.OneOfProtoTimes != nil { + nn100, err := m.OneOfProtoTimes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn100 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *OneofProtoTypes_Timestamp) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Timestamp != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) + n101, err := m.Timestamp.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n101 + } + return i, nil +} +func (m *OneofProtoTypes_Duration) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Duration != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Duration.Size())) + n102, err := m.Duration.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n102 + } + return i, nil +} +func (m *OneofProtoTypes_RepDouble) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepDouble != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepDouble.Size())) + n103, err := m.RepDouble.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n103 + } + return i, nil +} +func (m *OneofProtoTypes_RepFloat) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepFloat != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepFloat.Size())) + n104, err := m.RepFloat.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n104 + } + return i, nil +} +func (m *OneofProtoTypes_RepInt64) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepInt64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepInt64.Size())) + n105, err := m.RepInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n105 + } + return i, nil +} +func (m *OneofProtoTypes_RepUInt64) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepUInt64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepUInt64.Size())) + n106, err := m.RepUInt64.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n106 + } + return i, nil +} +func (m *OneofProtoTypes_RepInt32) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepInt32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepInt32.Size())) + n107, err := m.RepInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n107 + } + return i, nil +} +func (m *OneofProtoTypes_RepUInt32) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepUInt32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepUInt32.Size())) + n108, err := m.RepUInt32.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n108 + } + return i, nil +} +func (m *OneofProtoTypes_RepBool) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepBool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepBool.Size())) + n109, err := m.RepBool.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n109 + } + return i, nil +} +func (m *OneofProtoTypes_RepString) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepString != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepString.Size())) + n110, err := m.RepString.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n110 + } + return i, nil +} +func (m *OneofProtoTypes_RepBytes) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepBytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.RepBytes.Size())) + n111, err := m.RepBytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n111 + } + return i, nil +} +func (m *OneofStdTypes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OneofStdTypes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.OneOfStdTimes != nil { + nn112, err := m.OneOfStdTimes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn112 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *OneofStdTypes_Timestamp) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Timestamp != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Timestamp))) + n113, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Timestamp, dAtA[i:]) + if err != nil { + return 0, err + } + i += n113 + } + return i, nil +} +func (m *OneofStdTypes_Duration) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Duration != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Duration))) + n114, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Duration, dAtA[i:]) + if err != nil { + return 0, err + } + i += n114 + } + return i, nil +} +func (m *OneofStdTypes_RepDouble) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepDouble != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDouble(*m.RepDouble))) + n115, err := github_com_gogo_protobuf_types.StdDoubleMarshalTo(*m.RepDouble, dAtA[i:]) + if err != nil { + return 0, err + } + i += n115 + } + return i, nil +} +func (m *OneofStdTypes_RepFloat) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepFloat != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdFloat(*m.RepFloat))) + n116, err := github_com_gogo_protobuf_types.StdFloatMarshalTo(*m.RepFloat, dAtA[i:]) + if err != nil { + return 0, err + } + i += n116 + } + return i, nil +} +func (m *OneofStdTypes_RepInt64) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepInt64 != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt64(*m.RepInt64))) + n117, err := github_com_gogo_protobuf_types.StdInt64MarshalTo(*m.RepInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n117 + } + return i, nil +} +func (m *OneofStdTypes_RepUInt64) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepUInt64 != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.RepUInt64))) + n118, err := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*m.RepUInt64, dAtA[i:]) + if err != nil { + return 0, err + } + i += n118 + } + return i, nil +} +func (m *OneofStdTypes_RepInt32) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepInt32 != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdInt32(*m.RepInt32))) + n119, err := github_com_gogo_protobuf_types.StdInt32MarshalTo(*m.RepInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n119 + } + return i, nil +} +func (m *OneofStdTypes_RepUInt32) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepUInt32 != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.RepUInt32))) + n120, err := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.RepUInt32, dAtA[i:]) + if err != nil { + return 0, err + } + i += n120 + } + return i, nil +} +func (m *OneofStdTypes_RepBool) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepBool != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBool(*m.RepBool))) + n121, err := github_com_gogo_protobuf_types.StdBoolMarshalTo(*m.RepBool, dAtA[i:]) + if err != nil { + return 0, err + } + i += n121 + } + return i, nil +} +func (m *OneofStdTypes_RepString) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepString != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdString(*m.RepString))) + n122, err := github_com_gogo_protobuf_types.StdStringMarshalTo(*m.RepString, dAtA[i:]) + if err != nil { + return 0, err + } + i += n122 + } + return i, nil +} +func (m *OneofStdTypes_RepBytes) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.RepBytes != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdBytes(*m.RepBytes))) + n123, err := github_com_gogo_protobuf_types.StdBytesMarshalTo(*m.RepBytes, dAtA[i:]) + if err != nil { + return 0, err + } + i += n123 + } + return i, nil +} +func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func NewPopulatedKnownTypes(r randyTypes, easy bool) *KnownTypes { + this := &KnownTypes{} + if r.Intn(10) != 0 { + this.Dur = types.NewPopulatedDuration(r, easy) + } + if r.Intn(10) != 0 { + this.Ts = types.NewPopulatedTimestamp(r, easy) + } + if r.Intn(10) != 0 { + this.Dbl = types.NewPopulatedDoubleValue(r, easy) + } + if r.Intn(10) != 0 { + this.Flt = types.NewPopulatedFloatValue(r, easy) + } + if r.Intn(10) != 0 { + this.I64 = types.NewPopulatedInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.U64 = types.NewPopulatedUInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.I32 = types.NewPopulatedInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.U32 = types.NewPopulatedUInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.Bool = types.NewPopulatedBoolValue(r, easy) + } + if r.Intn(10) != 0 { + this.Str = types.NewPopulatedStringValue(r, easy) + } + if r.Intn(10) != 0 { + this.Bytes = types.NewPopulatedBytesValue(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedProtoTypes(r randyTypes, easy bool) *ProtoTypes { + this := &ProtoTypes{} + if r.Intn(10) != 0 { + this.NullableTimestamp = types.NewPopulatedTimestamp(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDuration = types.NewPopulatedDuration(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDouble = types.NewPopulatedDoubleValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableFloat = types.NewPopulatedFloatValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt64 = types.NewPopulatedInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt64 = types.NewPopulatedUInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt32 = types.NewPopulatedInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt32 = types.NewPopulatedUInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBool = types.NewPopulatedBoolValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableString = types.NewPopulatedStringValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBytes = types.NewPopulatedBytesValue(r, easy) + } + v1 := types.NewPopulatedTimestamp(r, easy) + this.Timestamp = *v1 + v2 := types.NewPopulatedDuration(r, easy) + this.Duration = *v2 + v3 := types.NewPopulatedDoubleValue(r, easy) + this.NonnullDouble = *v3 + v4 := types.NewPopulatedFloatValue(r, easy) + this.NonnullFloat = *v4 + v5 := types.NewPopulatedInt64Value(r, easy) + this.NonnullInt64 = *v5 + v6 := types.NewPopulatedUInt64Value(r, easy) + this.NonnullUInt64 = *v6 + v7 := types.NewPopulatedInt32Value(r, easy) + this.NonnullInt32 = *v7 + v8 := types.NewPopulatedUInt32Value(r, easy) + this.NonnullUInt32 = *v8 + v9 := types.NewPopulatedBoolValue(r, easy) + this.NonnullBool = *v9 + v10 := types.NewPopulatedStringValue(r, easy) + this.NonnullString = *v10 + v11 := types.NewPopulatedBytesValue(r, easy) + this.NonnullBytes = *v11 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedStdTypes(r randyTypes, easy bool) *StdTypes { + this := &StdTypes{} + if r.Intn(10) != 0 { + this.NullableTimestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDuration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + if r.Intn(10) != 0 { + this.NullableFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } + if r.Intn(10) != 0 { + this.NullableString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + } + v12 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamp = *v12 + v13 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Duration = *v13 + v14 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble = *v14 + v15 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat = *v15 + v16 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64 = *v16 + v17 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64 = *v17 + v18 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32 = *v18 + v19 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32 = *v19 + v20 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool = *v20 + v21 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString = *v21 + v22 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes = *v22 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedRepProtoTypes(r randyTypes, easy bool) *RepProtoTypes { + this := &RepProtoTypes{} + if r.Intn(10) != 0 { + v23 := r.Intn(5) + this.NullableTimestamps = make([]*types.Timestamp, v23) + for i := 0; i < v23; i++ { + this.NullableTimestamps[i] = types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v24 := r.Intn(5) + this.NullableDurations = make([]*types.Duration, v24) + for i := 0; i < v24; i++ { + this.NullableDurations[i] = types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v25 := r.Intn(5) + this.Timestamps = make([]types.Timestamp, v25) + for i := 0; i < v25; i++ { + v26 := types.NewPopulatedTimestamp(r, easy) + this.Timestamps[i] = *v26 + } + } + if r.Intn(10) != 0 { + v27 := r.Intn(5) + this.Durations = make([]types.Duration, v27) + for i := 0; i < v27; i++ { + v28 := types.NewPopulatedDuration(r, easy) + this.Durations[i] = *v28 + } + } + if r.Intn(10) != 0 { + v29 := r.Intn(5) + this.NullableDouble = make([]*types.DoubleValue, v29) + for i := 0; i < v29; i++ { + this.NullableDouble[i] = types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v30 := r.Intn(5) + this.NonnullDouble = make([]types.DoubleValue, v30) + for i := 0; i < v30; i++ { + v31 := types.NewPopulatedDoubleValue(r, easy) + this.NonnullDouble[i] = *v31 + } + } + if r.Intn(10) != 0 { + v32 := r.Intn(5) + this.NullableFloat = make([]*types.FloatValue, v32) + for i := 0; i < v32; i++ { + this.NullableFloat[i] = types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v33 := r.Intn(5) + this.NonnullFloat = make([]types.FloatValue, v33) + for i := 0; i < v33; i++ { + v34 := types.NewPopulatedFloatValue(r, easy) + this.NonnullFloat[i] = *v34 + } + } + if r.Intn(10) != 0 { + v35 := r.Intn(5) + this.NullableInt64 = make([]*types.Int64Value, v35) + for i := 0; i < v35; i++ { + this.NullableInt64[i] = types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v36 := r.Intn(5) + this.NonnullInt64 = make([]types.Int64Value, v36) + for i := 0; i < v36; i++ { + v37 := types.NewPopulatedInt64Value(r, easy) + this.NonnullInt64[i] = *v37 + } + } + if r.Intn(10) != 0 { + v38 := r.Intn(5) + this.NullableUInt64 = make([]*types.UInt64Value, v38) + for i := 0; i < v38; i++ { + this.NullableUInt64[i] = types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v39 := r.Intn(5) + this.NonnullUInt64 = make([]types.UInt64Value, v39) + for i := 0; i < v39; i++ { + v40 := types.NewPopulatedUInt64Value(r, easy) + this.NonnullUInt64[i] = *v40 + } + } + if r.Intn(10) != 0 { + v41 := r.Intn(5) + this.NullableInt32 = make([]*types.Int32Value, v41) + for i := 0; i < v41; i++ { + this.NullableInt32[i] = types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v42 := r.Intn(5) + this.NonnullInt32 = make([]types.Int32Value, v42) + for i := 0; i < v42; i++ { + v43 := types.NewPopulatedInt32Value(r, easy) + this.NonnullInt32[i] = *v43 + } + } + if r.Intn(10) != 0 { + v44 := r.Intn(5) + this.NullableUInt32 = make([]*types.UInt32Value, v44) + for i := 0; i < v44; i++ { + this.NullableUInt32[i] = types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v45 := r.Intn(5) + this.NonnullUInt32 = make([]types.UInt32Value, v45) + for i := 0; i < v45; i++ { + v46 := types.NewPopulatedUInt32Value(r, easy) + this.NonnullUInt32[i] = *v46 + } + } + if r.Intn(10) != 0 { + v47 := r.Intn(5) + this.NullableBool = make([]*types.BoolValue, v47) + for i := 0; i < v47; i++ { + this.NullableBool[i] = types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v48 := r.Intn(5) + this.NonnullBool = make([]types.BoolValue, v48) + for i := 0; i < v48; i++ { + v49 := types.NewPopulatedBoolValue(r, easy) + this.NonnullBool[i] = *v49 + } + } + if r.Intn(10) != 0 { + v50 := r.Intn(5) + this.NullableString = make([]*types.StringValue, v50) + for i := 0; i < v50; i++ { + this.NullableString[i] = types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v51 := r.Intn(5) + this.NonnullString = make([]types.StringValue, v51) + for i := 0; i < v51; i++ { + v52 := types.NewPopulatedStringValue(r, easy) + this.NonnullString[i] = *v52 + } + } + if r.Intn(10) != 0 { + v53 := r.Intn(5) + this.NullableBytes = make([]*types.BytesValue, v53) + for i := 0; i < v53; i++ { + this.NullableBytes[i] = types.NewPopulatedBytesValue(r, easy) + } + } + if r.Intn(10) != 0 { + v54 := r.Intn(5) + this.NonnullBytes = make([]types.BytesValue, v54) + for i := 0; i < v54; i++ { + v55 := types.NewPopulatedBytesValue(r, easy) + this.NonnullBytes[i] = *v55 + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedRepStdTypes(r randyTypes, easy bool) *RepStdTypes { + this := &RepStdTypes{} + if r.Intn(10) != 0 { + v56 := r.Intn(5) + this.NullableTimestamps = make([]*time.Time, v56) + for i := 0; i < v56; i++ { + this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v57 := r.Intn(5) + this.NullableDurations = make([]*time.Duration, v57) + for i := 0; i < v57; i++ { + this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v58 := r.Intn(5) + this.Timestamps = make([]time.Time, v58) + for i := 0; i < v58; i++ { + v59 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamps[i] = *v59 + } + } + if r.Intn(10) != 0 { + v60 := r.Intn(5) + this.Durations = make([]time.Duration, v60) + for i := 0; i < v60; i++ { + v61 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Durations[i] = *v61 + } + } + if r.Intn(10) != 0 { + v62 := r.Intn(5) + this.NullableDouble = make([]*float64, v62) + for i := 0; i < v62; i++ { + this.NullableDouble[i] = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + } + if r.Intn(10) != 0 { + v63 := r.Intn(5) + this.NonnullDouble = make([]float64, v63) + for i := 0; i < v63; i++ { + v64 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble[i] = *v64 + } + } + if r.Intn(10) != 0 { + v65 := r.Intn(5) + this.NullableFloat = make([]*float32, v65) + for i := 0; i < v65; i++ { + this.NullableFloat[i] = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + } + if r.Intn(10) != 0 { + v66 := r.Intn(5) + this.NonnullFloat = make([]float32, v66) + for i := 0; i < v66; i++ { + v67 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat[i] = *v67 + } + } + if r.Intn(10) != 0 { + v68 := r.Intn(5) + this.NullableInt64 = make([]*int64, v68) + for i := 0; i < v68; i++ { + this.NullableInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + } + if r.Intn(10) != 0 { + v69 := r.Intn(5) + this.NonnullInt64 = make([]int64, v69) + for i := 0; i < v69; i++ { + v70 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64[i] = *v70 + } + } + if r.Intn(10) != 0 { + v71 := r.Intn(5) + this.NullableUInt64 = make([]*uint64, v71) + for i := 0; i < v71; i++ { + this.NullableUInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + } + if r.Intn(10) != 0 { + v72 := r.Intn(5) + this.NonnullUInt64 = make([]uint64, v72) + for i := 0; i < v72; i++ { + v73 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64[i] = *v73 + } + } + if r.Intn(10) != 0 { + v74 := r.Intn(5) + this.NullableInt32 = make([]*int32, v74) + for i := 0; i < v74; i++ { + this.NullableInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v75 := r.Intn(5) + this.NonnullInt32 = make([]int32, v75) + for i := 0; i < v75; i++ { + v76 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32[i] = *v76 + } + } + if r.Intn(10) != 0 { + v77 := r.Intn(5) + this.NullableUInt32 = make([]*uint32, v77) + for i := 0; i < v77; i++ { + this.NullableUInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v78 := r.Intn(5) + this.NonnullUInt32 = make([]uint32, v78) + for i := 0; i < v78; i++ { + v79 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32[i] = *v79 + } + } + if r.Intn(10) != 0 { + v80 := r.Intn(5) + this.NullableBool = make([]*bool, v80) + for i := 0; i < v80; i++ { + this.NullableBool[i] = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } + } + if r.Intn(10) != 0 { + v81 := r.Intn(5) + this.NonnullBool = make([]bool, v81) + for i := 0; i < v81; i++ { + v82 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool[i] = *v82 + } + } + if r.Intn(10) != 0 { + v83 := r.Intn(5) + this.NullableString = make([]*string, v83) + for i := 0; i < v83; i++ { + this.NullableString[i] = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } + } + if r.Intn(10) != 0 { + v84 := r.Intn(5) + this.NonnullString = make([]string, v84) + for i := 0; i < v84; i++ { + v85 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString[i] = *v85 + } + } + if r.Intn(10) != 0 { + v86 := r.Intn(5) + this.NullableBytes = make([]*[]byte, v86) + for i := 0; i < v86; i++ { + this.NullableBytes[i] = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + } + } + if r.Intn(10) != 0 { + v87 := r.Intn(5) + this.NonnullBytes = make([][]byte, v87) + for i := 0; i < v87; i++ { + v88 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes[i] = *v88 + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedMapProtoTypes(r randyTypes, easy bool) *MapProtoTypes { + this := &MapProtoTypes{} + if r.Intn(10) != 0 { + v89 := r.Intn(10) + this.NullableTimestamp = make(map[int32]*types.Timestamp) + for i := 0; i < v89; i++ { + this.NullableTimestamp[int32(r.Int31())] = types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v90 := r.Intn(10) + this.Timestamp = make(map[int32]types.Timestamp) + for i := 0; i < v90; i++ { + this.Timestamp[int32(r.Int31())] = *types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v91 := r.Intn(10) + this.NullableDuration = make(map[int32]*types.Duration) + for i := 0; i < v91; i++ { + this.NullableDuration[int32(r.Int31())] = types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v92 := r.Intn(10) + this.Duration = make(map[int32]types.Duration) + for i := 0; i < v92; i++ { + this.Duration[int32(r.Int31())] = *types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v93 := r.Intn(10) + this.NullableDouble = make(map[int32]*types.DoubleValue) + for i := 0; i < v93; i++ { + this.NullableDouble[int32(r.Int31())] = types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v94 := r.Intn(10) + this.NonnullDouble = make(map[int32]types.DoubleValue) + for i := 0; i < v94; i++ { + this.NonnullDouble[int32(r.Int31())] = *types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v95 := r.Intn(10) + this.NullableFloat = make(map[int32]*types.FloatValue) + for i := 0; i < v95; i++ { + this.NullableFloat[int32(r.Int31())] = types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v96 := r.Intn(10) + this.NonnullFloat = make(map[int32]types.FloatValue) + for i := 0; i < v96; i++ { + this.NonnullFloat[int32(r.Int31())] = *types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v97 := r.Intn(10) + this.NullableInt64 = make(map[int32]*types.Int64Value) + for i := 0; i < v97; i++ { + this.NullableInt64[int32(r.Int31())] = types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v98 := r.Intn(10) + this.NonnullInt64 = make(map[int32]types.Int64Value) + for i := 0; i < v98; i++ { + this.NonnullInt64[int32(r.Int31())] = *types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v99 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*types.UInt64Value) + for i := 0; i < v99; i++ { + this.NullableUInt64[int32(r.Int31())] = types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v100 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]types.UInt64Value) + for i := 0; i < v100; i++ { + this.NonnullUInt64[int32(r.Int31())] = *types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v101 := r.Intn(10) + this.NullableInt32 = make(map[int32]*types.Int32Value) + for i := 0; i < v101; i++ { + this.NullableInt32[int32(r.Int31())] = types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v102 := r.Intn(10) + this.NonnullInt32 = make(map[int32]types.Int32Value) + for i := 0; i < v102; i++ { + this.NonnullInt32[int32(r.Int31())] = *types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v103 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*types.UInt32Value) + for i := 0; i < v103; i++ { + this.NullableUInt32[int32(r.Int31())] = types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v104 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]types.UInt32Value) + for i := 0; i < v104; i++ { + this.NonnullUInt32[int32(r.Int31())] = *types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v105 := r.Intn(10) + this.NullableBool = make(map[int32]*types.BoolValue) + for i := 0; i < v105; i++ { + this.NullableBool[int32(r.Int31())] = types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v106 := r.Intn(10) + this.NonnullBool = make(map[int32]types.BoolValue) + for i := 0; i < v106; i++ { + this.NonnullBool[int32(r.Int31())] = *types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v107 := r.Intn(10) + this.NullableString = make(map[int32]*types.StringValue) + for i := 0; i < v107; i++ { + this.NullableString[int32(r.Int31())] = types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v108 := r.Intn(10) + this.NonnullString = make(map[int32]types.StringValue) + for i := 0; i < v108; i++ { + this.NonnullString[int32(r.Int31())] = *types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v109 := r.Intn(10) + this.NullableBytes = make(map[int32]*types.BytesValue) + for i := 0; i < v109; i++ { + this.NullableBytes[int32(r.Int31())] = types.NewPopulatedBytesValue(r, easy) + } + } + if r.Intn(10) != 0 { + v110 := r.Intn(10) + this.NonnullBytes = make(map[int32]types.BytesValue) + for i := 0; i < v110; i++ { + this.NonnullBytes[int32(r.Int31())] = *types.NewPopulatedBytesValue(r, easy) + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedMapStdTypes(r randyTypes, easy bool) *MapStdTypes { + this := &MapStdTypes{} + if r.Intn(10) != 0 { + v111 := r.Intn(10) + this.NullableTimestamp = make(map[int32]*time.Time) + for i := 0; i < v111; i++ { + this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v112 := r.Intn(10) + this.Timestamp = make(map[int32]time.Time) + for i := 0; i < v112; i++ { + this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v113 := r.Intn(10) + this.NullableDuration = make(map[int32]*time.Duration) + for i := 0; i < v113; i++ { + this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v114 := r.Intn(10) + this.Duration = make(map[int32]time.Duration) + for i := 0; i < v114; i++ { + this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v115 := r.Intn(10) + this.NullableDouble = make(map[int32]*float64) + for i := 0; i < v115; i++ { + this.NullableDouble[int32(r.Int31())] = (*float64)(github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } + } + if r.Intn(10) != 0 { + v116 := r.Intn(10) + this.NonnullDouble = make(map[int32]float64) + for i := 0; i < v116; i++ { + this.NonnullDouble[int32(r.Int31())] = (float64)(*github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } + } + if r.Intn(10) != 0 { + v117 := r.Intn(10) + this.NullableFloat = make(map[int32]*float32) + for i := 0; i < v117; i++ { + this.NullableFloat[int32(r.Int31())] = (*float32)(github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } + } + if r.Intn(10) != 0 { + v118 := r.Intn(10) + this.NonnullFloat = make(map[int32]float32) + for i := 0; i < v118; i++ { + this.NonnullFloat[int32(r.Int31())] = (float32)(*github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } + } + if r.Intn(10) != 0 { + v119 := r.Intn(10) + this.NullableInt64 = make(map[int32]*int64) + for i := 0; i < v119; i++ { + this.NullableInt64[int32(r.Int31())] = (*int64)(github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v120 := r.Intn(10) + this.NonnullInt64 = make(map[int32]int64) + for i := 0; i < v120; i++ { + this.NonnullInt64[int32(r.Int31())] = (int64)(*github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v121 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*uint64) + for i := 0; i < v121; i++ { + this.NullableUInt64[int32(r.Int31())] = (*uint64)(github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v122 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]uint64) + for i := 0; i < v122; i++ { + this.NonnullUInt64[int32(r.Int31())] = (uint64)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v123 := r.Intn(10) + this.NullableInt32 = make(map[int32]*int32) + for i := 0; i < v123; i++ { + this.NullableInt32[int32(r.Int31())] = (*int32)(github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v124 := r.Intn(10) + this.NonnullInt32 = make(map[int32]int32) + for i := 0; i < v124; i++ { + this.NonnullInt32[int32(r.Int31())] = (int32)(*github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v125 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*uint32) + for i := 0; i < v125; i++ { + this.NullableUInt32[int32(r.Int31())] = (*uint32)(github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v126 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]uint32) + for i := 0; i < v126; i++ { + this.NonnullUInt32[int32(r.Int31())] = (uint32)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v127 := r.Intn(10) + this.NullableBool = make(map[int32]*bool) + for i := 0; i < v127; i++ { + this.NullableBool[int32(r.Int31())] = (*bool)(github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } + } + if r.Intn(10) != 0 { + v128 := r.Intn(10) + this.NonnullBool = make(map[int32]bool) + for i := 0; i < v128; i++ { + this.NonnullBool[int32(r.Int31())] = (bool)(*github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } + } + if r.Intn(10) != 0 { + v129 := r.Intn(10) + this.NullableString = make(map[int32]*string) + for i := 0; i < v129; i++ { + this.NullableString[int32(r.Int31())] = (*string)(github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } + } + if r.Intn(10) != 0 { + v130 := r.Intn(10) + this.NonnullString = make(map[int32]string) + for i := 0; i < v130; i++ { + this.NonnullString[int32(r.Int31())] = (string)(*github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } + } + if r.Intn(10) != 0 { + v131 := r.Intn(10) + this.NullableBytes = make(map[int32]*[]byte) + for i := 0; i < v131; i++ { + this.NullableBytes[int32(r.Int31())] = (*[]byte)(github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } + } + if r.Intn(10) != 0 { + v132 := r.Intn(10) + this.NonnullBytes = make(map[int32][]byte) + for i := 0; i < v132; i++ { + this.NonnullBytes[int32(r.Int31())] = ([]byte)(*github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedOneofProtoTypes(r randyTypes, easy bool) *OneofProtoTypes { + this := &OneofProtoTypes{} + oneofNumber_OneOfProtoTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] + switch oneofNumber_OneOfProtoTimes { + case 1: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Timestamp(r, easy) + case 2: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Duration(r, easy) + case 3: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepDouble(r, easy) + case 4: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepFloat(r, easy) + case 5: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepInt64(r, easy) + case 6: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepUInt64(r, easy) + case 7: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepInt32(r, easy) + case 8: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepUInt32(r, easy) + case 9: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepBool(r, easy) + case 10: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepString(r, easy) + case 11: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepBytes(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedOneofProtoTypes_Timestamp(r randyTypes, easy bool) *OneofProtoTypes_Timestamp { + this := &OneofProtoTypes_Timestamp{} + this.Timestamp = types.NewPopulatedTimestamp(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_Duration(r randyTypes, easy bool) *OneofProtoTypes_Duration { + this := &OneofProtoTypes_Duration{} + this.Duration = types.NewPopulatedDuration(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepDouble(r randyTypes, easy bool) *OneofProtoTypes_RepDouble { + this := &OneofProtoTypes_RepDouble{} + this.RepDouble = types.NewPopulatedDoubleValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepFloat(r randyTypes, easy bool) *OneofProtoTypes_RepFloat { + this := &OneofProtoTypes_RepFloat{} + this.RepFloat = types.NewPopulatedFloatValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepInt64(r randyTypes, easy bool) *OneofProtoTypes_RepInt64 { + this := &OneofProtoTypes_RepInt64{} + this.RepInt64 = types.NewPopulatedInt64Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepUInt64(r randyTypes, easy bool) *OneofProtoTypes_RepUInt64 { + this := &OneofProtoTypes_RepUInt64{} + this.RepUInt64 = types.NewPopulatedUInt64Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepInt32(r randyTypes, easy bool) *OneofProtoTypes_RepInt32 { + this := &OneofProtoTypes_RepInt32{} + this.RepInt32 = types.NewPopulatedInt32Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepUInt32(r randyTypes, easy bool) *OneofProtoTypes_RepUInt32 { + this := &OneofProtoTypes_RepUInt32{} + this.RepUInt32 = types.NewPopulatedUInt32Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepBool(r randyTypes, easy bool) *OneofProtoTypes_RepBool { + this := &OneofProtoTypes_RepBool{} + this.RepBool = types.NewPopulatedBoolValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepString(r randyTypes, easy bool) *OneofProtoTypes_RepString { + this := &OneofProtoTypes_RepString{} + this.RepString = types.NewPopulatedStringValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepBytes(r randyTypes, easy bool) *OneofProtoTypes_RepBytes { + this := &OneofProtoTypes_RepBytes{} + this.RepBytes = types.NewPopulatedBytesValue(r, easy) + return this +} +func NewPopulatedOneofStdTypes(r randyTypes, easy bool) *OneofStdTypes { + this := &OneofStdTypes{} + oneofNumber_OneOfStdTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] + switch oneofNumber_OneOfStdTimes { + case 1: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) + case 2: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) + case 3: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepDouble(r, easy) + case 4: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepFloat(r, easy) + case 5: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt64(r, easy) + case 6: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt64(r, easy) + case 7: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt32(r, easy) + case 8: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt32(r, easy) + case 9: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBool(r, easy) + case 10: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepString(r, easy) + case 11: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBytes(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedOneofStdTypes_Timestamp(r randyTypes, easy bool) *OneofStdTypes_Timestamp { + this := &OneofStdTypes_Timestamp{} + this.Timestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + return this +} +func NewPopulatedOneofStdTypes_Duration(r randyTypes, easy bool) *OneofStdTypes_Duration { + this := &OneofStdTypes_Duration{} + this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepDouble(r randyTypes, easy bool) *OneofStdTypes_RepDouble { + this := &OneofStdTypes_RepDouble{} + this.RepDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepFloat(r randyTypes, easy bool) *OneofStdTypes_RepFloat { + this := &OneofStdTypes_RepFloat{} + this.RepFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt64(r randyTypes, easy bool) *OneofStdTypes_RepInt64 { + this := &OneofStdTypes_RepInt64{} + this.RepInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt64(r randyTypes, easy bool) *OneofStdTypes_RepUInt64 { + this := &OneofStdTypes_RepUInt64{} + this.RepUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt32(r randyTypes, easy bool) *OneofStdTypes_RepInt32 { + this := &OneofStdTypes_RepInt32{} + this.RepInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt32(r randyTypes, easy bool) *OneofStdTypes_RepUInt32 { + this := &OneofStdTypes_RepUInt32{} + this.RepUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBool(r randyTypes, easy bool) *OneofStdTypes_RepBool { + this := &OneofStdTypes_RepBool{} + this.RepBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepString(r randyTypes, easy bool) *OneofStdTypes_RepString { + this := &OneofStdTypes_RepString{} + this.RepString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBytes(r randyTypes, easy bool) *OneofStdTypes_RepBytes { + this := &OneofStdTypes_RepBytes{} + this.RepBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + return this +} + +type randyTypes interface { + Float32() float32 + Float64() float64 + Int63() int64 + Int31() int32 + Uint32() uint32 + Intn(n int) int +} + +func randUTF8RuneTypes(r randyTypes) rune { + ru := r.Intn(62) + if ru < 10 { + return rune(ru + 48) + } else if ru < 36 { + return rune(ru + 55) + } + return rune(ru + 61) +} +func randStringTypes(r randyTypes) string { + v133 := r.Intn(100) + tmps := make([]rune, v133) + for i := 0; i < v133; i++ { + tmps[i] = randUTF8RuneTypes(r) + } + return string(tmps) +} +func randUnrecognizedTypes(r randyTypes, maxFieldNumber int) (dAtA []byte) { + l := r.Intn(5) + for i := 0; i < l; i++ { + wire := r.Intn(4) + if wire == 3 { + wire = 5 + } + fieldNumber := maxFieldNumber + r.Intn(100) + dAtA = randFieldTypes(dAtA, r, fieldNumber, wire) + } + return dAtA +} +func randFieldTypes(dAtA []byte, r randyTypes, fieldNumber int, wire int) []byte { + key := uint32(fieldNumber)<<3 | uint32(wire) + switch wire { + case 0: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + v134 := r.Int63() + if r.Intn(2) == 0 { + v134 *= -1 + } + dAtA = encodeVarintPopulateTypes(dAtA, uint64(v134)) + case 1: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + case 2: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + ll := r.Intn(100) + dAtA = encodeVarintPopulateTypes(dAtA, uint64(ll)) + for j := 0; j < ll; j++ { + dAtA = append(dAtA, byte(r.Intn(256))) + } + default: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + } + return dAtA +} +func encodeVarintPopulateTypes(dAtA []byte, v uint64) []byte { + for v >= 1<<7 { + dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) + v >>= 7 + } + dAtA = append(dAtA, uint8(v)) + return dAtA +} +func (m *KnownTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Dur != nil { + l = m.Dur.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Ts != nil { + l = m.Ts.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Dbl != nil { + l = m.Dbl.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Flt != nil { + l = m.Flt.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.I64 != nil { + l = m.I64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.U64 != nil { + l = m.U64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.I32 != nil { + l = m.I32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.U32 != nil { + l = m.U32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Bool != nil { + l = m.Bool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Str != nil { + l = m.Str.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Bytes != nil { + l = m.Bytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NullableTimestamp != nil { + l = m.NullableTimestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDuration != nil { + l = m.NullableDuration.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDouble != nil { + l = m.NullableDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableFloat != nil { + l = m.NullableFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt64 != nil { + l = m.NullableInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt64 != nil { + l = m.NullableUInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt32 != nil { + l = m.NullableInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt32 != nil { + l = m.NullableUInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBool != nil { + l = m.NullableBool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableString != nil { + l = m.NullableString.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBytes != nil { + l = m.NullableBytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + l = m.Timestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.Duration.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullInt64.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullUInt64.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullInt32.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullUInt32.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullBool.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullString.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullBytes.Size() + n += 2 + l + sovTypes(uint64(l)) if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + n += len(m.XXX_unrecognized) } - return i, nil + return n } -func (m *OneofProtoTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err +func (m *StdTypes) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *OneofProtoTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i var l int _ = l - if m.OneOfProtoTimes != nil { - nn28, err := m.OneOfProtoTimes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn28 + if m.NullableTimestamp != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDuration != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration) + n += 1 + l + sovTypes(uint64(l)) } + if m.NullableDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.NullableDouble) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.NullableFloat) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.NullableInt64) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.NullableUInt64) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.NullableInt32) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.NullableUInt32) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.NullableBool) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.NullableString) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.NullableBytes) + n += 1 + l + sovTypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDouble(m.NonnullDouble) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdFloat(m.NonnullFloat) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdInt64(m.NonnullInt64) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(m.NonnullUInt64) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdInt32(m.NonnullInt32) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(m.NonnullUInt32) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdBool(m.NonnullBool) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdString(m.NonnullString) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdBytes(m.NonnullBytes) + n += 2 + l + sovTypes(uint64(l)) if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + n += len(m.XXX_unrecognized) } - return i, nil + return n } -func (m *OneofProtoTypes_Timestamp) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Timestamp != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) - n29, err := m.Timestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err +func (m *RepProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, e := range m.NullableTimestamps { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - i += n29 } - return i, nil -} -func (m *OneofProtoTypes_Duration) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Duration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.Duration.Size())) - n30, err := m.Duration.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.NullableDurations) > 0 { + for _, e := range m.NullableDurations { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - i += n30 } - return i, nil -} -func (m *OneofStdTypes) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if len(m.Timestamps) > 0 { + for _, e := range m.Timestamps { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - return dAtA[:n], nil -} - -func (m *OneofStdTypes) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.OneOfStdTimes != nil { - nn31, err := m.OneOfStdTimes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Durations) > 0 { + for _, e := range m.Durations { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - i += nn31 } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - return i, nil -} - -func (m *OneofStdTypes_Timestamp) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Timestamp != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(*m.Timestamp))) - n32, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Timestamp, dAtA[i:]) - if err != nil { - return 0, err + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - i += n32 } - return i, nil -} -func (m *OneofStdTypes_Duration) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Duration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Duration))) - n33, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Duration, dAtA[i:]) - if err != nil { - return 0, err + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - i += n33 } - return i, nil -} -func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - dAtA[offset] = uint8(v) - return offset + 1 -} -func NewPopulatedKnownTypes(r randyTypes, easy bool) *KnownTypes { - this := &KnownTypes{} - if r.Intn(10) != 0 { - this.Dur = types.NewPopulatedDuration(r, easy) + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Ts = types.NewPopulatedTimestamp(r, easy) + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Dbl = types.NewPopulatedDoubleValue(r, easy) + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Flt = types.NewPopulatedFloatValue(r, easy) + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.I64 = types.NewPopulatedInt64Value(r, easy) + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.U64 = types.NewPopulatedUInt64Value(r, easy) + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.I32 = types.NewPopulatedInt32Value(r, easy) + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.U32 = types.NewPopulatedUInt32Value(r, easy) + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Bool = types.NewPopulatedBoolValue(r, easy) + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Str = types.NewPopulatedStringValue(r, easy) + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Bytes = types.NewPopulatedBytesValue(r, easy) + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedProtoTypes(r randyTypes, easy bool) *ProtoTypes { - this := &ProtoTypes{} - if r.Intn(10) != 0 { - this.NullableTimestamp = types.NewPopulatedTimestamp(r, easy) + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.NullableDuration = types.NewPopulatedDuration(r, easy) + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - v1 := types.NewPopulatedTimestamp(r, easy) - this.Timestamp = *v1 - v2 := types.NewPopulatedDuration(r, easy) - this.Duration = *v2 - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } - return this + return n } -func NewPopulatedStdTypes(r randyTypes, easy bool) *StdTypes { - this := &StdTypes{} - if r.Intn(10) != 0 { - this.NullableTimestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) +func (m *RepStdTypes) Size() (n int) { + if m == nil { + return 0 } - if r.Intn(10) != 0 { - this.NullableDuration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, e := range m.NullableTimestamps { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDurations) > 0 { + for _, e := range m.NullableDurations { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*e) + n += 1 + l + sovTypes(uint64(l)) + } } - v3 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamp = *v3 - v4 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Duration = *v4 - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(m.Timestamps) > 0 { + for _, e := range m.Timestamps { + l = github_com_gogo_protobuf_types.SizeOfStdTime(e) + n += 1 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedRepProtoTypes(r randyTypes, easy bool) *RepProtoTypes { - this := &RepProtoTypes{} - if r.Intn(10) != 0 { - v5 := r.Intn(5) - this.NullableTimestamps = make([]*types.Timestamp, v5) - for i := 0; i < v5; i++ { - this.NullableTimestamps[i] = types.NewPopulatedTimestamp(r, easy) + if len(m.Durations) > 0 { + for _, e := range m.Durations { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v6 := r.Intn(5) - this.NullableDurations = make([]*types.Duration, v6) - for i := 0; i < v6; i++ { - this.NullableDurations[i] = types.NewPopulatedDuration(r, easy) + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v7 := r.Intn(5) - this.Timestamps = make([]types.Timestamp, v7) - for i := 0; i < v7; i++ { - v8 := types.NewPopulatedTimestamp(r, easy) - this.Timestamps[i] = *v8 + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v9 := r.Intn(5) - this.Durations = make([]types.Duration, v9) - for i := 0; i < v9; i++ { - v10 := types.NewPopulatedDuration(r, easy) - this.Durations[i] = *v10 + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(e) + n += 1 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedRepStdTypes(r randyTypes, easy bool) *RepStdTypes { - this := &RepStdTypes{} - if r.Intn(10) != 0 { - v11 := r.Intn(5) - this.NullableTimestamps = make([]*time.Time, v11) - for i := 0; i < v11; i++ { - this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v12 := r.Intn(5) - this.NullableDurations = make([]*time.Duration, v12) - for i := 0; i < v12; i++ { - this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v13 := r.Intn(5) - this.Timestamps = make([]time.Time, v13) - for i := 0; i < v13; i++ { - v14 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamps[i] = *v14 + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v15 := r.Intn(5) - this.Durations = make([]time.Duration, v15) - for i := 0; i < v15; i++ { - v16 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Durations[i] = *v16 + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(e) + n += 1 + l + sovTypes(uint64(l)) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*e) + n += 1 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedMapProtoTypes(r randyTypes, easy bool) *MapProtoTypes { - this := &MapProtoTypes{} - if r.Intn(10) != 0 { - v17 := r.Intn(10) - this.NullableTimestamp = make(map[int32]*types.Timestamp) - for i := 0; i < v17; i++ { - this.NullableTimestamp[int32(r.Int31())] = types.NewPopulatedTimestamp(r, easy) + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v18 := r.Intn(10) - this.Timestamp = make(map[int32]types.Timestamp) - for i := 0; i < v18; i++ { - this.Timestamp[int32(r.Int31())] = *types.NewPopulatedTimestamp(r, easy) + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v19 := r.Intn(10) - this.NullableDuration = make(map[int32]*types.Duration) - for i := 0; i < v19; i++ { - this.NullableDuration[int32(r.Int31())] = types.NewPopulatedDuration(r, easy) + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(e) + n += 2 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v20 := r.Intn(10) - this.Duration = make(map[int32]types.Duration) - for i := 0; i < v20; i++ { - this.Duration[int32(r.Int31())] = *types.NewPopulatedDuration(r, easy) + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*e) + n += 2 + l + sovTypes(uint64(l)) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(e) + n += 2 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedMapStdTypes(r randyTypes, easy bool) *MapStdTypes { - this := &MapStdTypes{} - if r.Intn(10) != 0 { - v21 := r.Intn(10) - this.NullableTimestamp = make(map[int32]*time.Time) - for i := 0; i < v21; i++ { - this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = github_com_gogo_protobuf_types.SizeOfStdString(*e) + n += 2 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v22 := r.Intn(10) - this.Timestamp = make(map[int32]time.Time) - for i := 0; i < v22; i++ { - this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = github_com_gogo_protobuf_types.SizeOfStdString(e) + n += 2 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v23 := r.Intn(10) - this.NullableDuration = make(map[int32]*time.Duration) - for i := 0; i < v23; i++ { - this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*e) + n += 2 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v24 := r.Intn(10) - this.Duration = make(map[int32]time.Duration) - for i := 0; i < v24; i++ { - this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(e) + n += 2 + l + sovTypes(uint64(l)) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } - return this + return n } -func NewPopulatedOneofProtoTypes(r randyTypes, easy bool) *OneofProtoTypes { - this := &OneofProtoTypes{} - oneofNumber_OneOfProtoTimes := []int32{1, 2}[r.Intn(2)] - switch oneofNumber_OneOfProtoTimes { - case 1: - this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Timestamp(r, easy) - case 2: - this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Duration(r, easy) +func (m *MapProtoTypes) Size() (n int) { + if m == nil { + return 0 } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 3) + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k, v := range m.NullableTimestamp { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return this -} - -func NewPopulatedOneofProtoTypes_Timestamp(r randyTypes, easy bool) *OneofProtoTypes_Timestamp { - this := &OneofProtoTypes_Timestamp{} - this.Timestamp = types.NewPopulatedTimestamp(r, easy) - return this -} -func NewPopulatedOneofProtoTypes_Duration(r randyTypes, easy bool) *OneofProtoTypes_Duration { - this := &OneofProtoTypes_Duration{} - this.Duration = types.NewPopulatedDuration(r, easy) - return this -} -func NewPopulatedOneofStdTypes(r randyTypes, easy bool) *OneofStdTypes { - this := &OneofStdTypes{} - oneofNumber_OneOfStdTimes := []int32{1, 2}[r.Intn(2)] - switch oneofNumber_OneOfStdTimes { - case 1: - this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) - case 2: - this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) + if len(m.Timestamp) > 0 { + for k, v := range m.Timestamp { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 3) + if len(m.NullableDuration) > 0 { + for k, v := range m.NullableDuration { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return this -} - -func NewPopulatedOneofStdTypes_Timestamp(r randyTypes, easy bool) *OneofStdTypes_Timestamp { - this := &OneofStdTypes_Timestamp{} - this.Timestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - return this -} -func NewPopulatedOneofStdTypes_Duration(r randyTypes, easy bool) *OneofStdTypes_Duration { - this := &OneofStdTypes_Duration{} - this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - return this -} - -type randyTypes interface { - Float32() float32 - Float64() float64 - Int63() int64 - Int31() int32 - Uint32() uint32 - Intn(n int) int -} - -func randUTF8RuneTypes(r randyTypes) rune { - ru := r.Intn(62) - if ru < 10 { - return rune(ru + 48) - } else if ru < 36 { - return rune(ru + 55) + if len(m.Duration) > 0 { + for k, v := range m.Duration { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return rune(ru + 61) -} -func randStringTypes(r randyTypes) string { - v25 := r.Intn(100) - tmps := make([]rune, v25) - for i := 0; i < v25; i++ { - tmps[i] = randUTF8RuneTypes(r) + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return string(tmps) -} -func randUnrecognizedTypes(r randyTypes, maxFieldNumber int) (dAtA []byte) { - l := r.Intn(5) - for i := 0; i < l; i++ { - wire := r.Intn(4) - if wire == 3 { - wire = 5 + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } - fieldNumber := maxFieldNumber + r.Intn(100) - dAtA = randFieldTypes(dAtA, r, fieldNumber, wire) } - return dAtA -} -func randFieldTypes(dAtA []byte, r randyTypes, fieldNumber int, wire int) []byte { - key := uint32(fieldNumber)<<3 | uint32(wire) - switch wire { - case 0: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - v26 := r.Int63() - if r.Intn(2) == 0 { - v26 *= -1 + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } - dAtA = encodeVarintPopulateTypes(dAtA, uint64(v26)) - case 1: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - case 2: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - ll := r.Intn(100) - dAtA = encodeVarintPopulateTypes(dAtA, uint64(ll)) - for j := 0; j < ll; j++ { - dAtA = append(dAtA, byte(r.Intn(256))) + } + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } - default: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - } - return dAtA -} -func encodeVarintPopulateTypes(dAtA []byte, v uint64) []byte { - for v >= 1<<7 { - dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) - v >>= 7 } - dAtA = append(dAtA, uint8(v)) - return dAtA -} -func (m *KnownTypes) Size() (n int) { - var l int - _ = l - if m.Dur != nil { - l = m.Dur.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.Ts != nil { - l = m.Ts.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.Dbl != nil { - l = m.Dbl.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.Flt != nil { - l = m.Flt.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.I64 != nil { - l = m.I64.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.U64 != nil { - l = m.U64.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.I32 != nil { - l = m.I32.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.U32 != nil { - l = m.U32.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.Bool != nil { - l = m.Bool.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.Str != nil { - l = m.Str.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.Bytes != nil { - l = m.Bytes.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - return n -} - -func (m *ProtoTypes) Size() (n int) { - var l int - _ = l - if m.NullableTimestamp != nil { - l = m.NullableTimestamp.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.NullableDuration != nil { - l = m.NullableDuration.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - l = m.Timestamp.Size() - n += 1 + l + sovTypes(uint64(l)) - l = m.Duration.Size() - n += 1 + l + sovTypes(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } -func (m *StdTypes) Size() (n int) { +func (m *MapStdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.NullableTimestamp != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableTimestamp) > 0 { + for k, v := range m.NullableTimestamp { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.NullableDuration != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration) - n += 1 + l + sovTypes(uint64(l)) + if len(m.Timestamp) > 0 { + for k, v := range m.Timestamp { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdTime(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) - n += 1 + l + sovTypes(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) - n += 1 + l + sovTypes(uint64(l)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(m.NullableDuration) > 0 { + for k, v := range m.NullableDuration { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return n -} - -func (m *RepProtoTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, e := range m.NullableTimestamps { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.Duration) > 0 { + for k, v := range m.Duration { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDuration(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.NullableDurations) > 0 { - for _, e := range m.NullableDurations { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Timestamps) > 0 { - for _, e := range m.Timestamps { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDouble(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Durations) > 0 { - for _, e := range m.Durations { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RepStdTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, e := range m.NullableTimestamps { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*e) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdFloat(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.NullableDurations) > 0 { - for _, e := range m.NullableDurations { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*e) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Timestamps) > 0 { - for _, e := range m.Timestamps { - l = github_com_gogo_protobuf_types.SizeOfStdTime(e) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdInt64(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Durations) > 0 { - for _, e := range m.Durations { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(e) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return n -} - -func (m *MapProtoTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k, v := range m.NullableTimestamp { + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { _ = k _ = v l = 0 if v != nil { - l = v.Size() + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*v) l += 1 + sovTypes(uint64(l)) } mapEntrySize := 1 + sovTypes(uint64(k)) + l n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Timestamp) > 0 { - for k, v := range m.Timestamp { + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { _ = k _ = v - l = v.Size() + l = github_com_gogo_protobuf_types.SizeOfStdInt32(v) mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.NullableDuration) > 0 { - for k, v := range m.NullableDuration { + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { _ = k _ = v l = 0 if v != nil { - l = v.Size() + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*v) l += 1 + sovTypes(uint64(l)) } mapEntrySize := 1 + sovTypes(uint64(k)) + l n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Duration) > 0 { - for k, v := range m.Duration { + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { _ = k _ = v - l = v.Size() + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(v) mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - return n -} - -func (m *MapStdTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k, v := range m.NullableTimestamp { + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdBool(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { _ = k _ = v l = 0 if v != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*v) + l = github_com_gogo_protobuf_types.SizeOfStdString(*v) l += 1 + sovTypes(uint64(l)) } mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Timestamp) > 0 { - for k, v := range m.Timestamp { + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { _ = k _ = v - l = github_com_gogo_protobuf_types.SizeOfStdTime(v) + l = github_com_gogo_protobuf_types.SizeOfStdString(v) mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } - if len(m.NullableDuration) > 0 { - for k, v := range m.NullableDuration { + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { _ = k _ = v l = 0 if v != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*v) l += 1 + sovTypes(uint64(l)) } mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Duration) > 0 { - for k, v := range m.Duration { + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { _ = k _ = v - l = github_com_gogo_protobuf_types.SizeOfStdDuration(v) + l = github_com_gogo_protobuf_types.SizeOfStdBytes(v) mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } if m.XXX_unrecognized != nil { @@ -3635,6 +11598,9 @@ } func (m *OneofProtoTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.OneOfProtoTimes != nil { @@ -3647,6 +11613,9 @@ } func (m *OneofProtoTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Timestamp != nil { @@ -3656,6 +11625,9 @@ return n } func (m *OneofProtoTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Duration != nil { @@ -3664,7 +11636,118 @@ } return n } +func (m *OneofProtoTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = m.RepDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = m.RepFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = m.RepInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = m.RepUInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = m.RepInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = m.RepUInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = m.RepBool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = m.RepString.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = m.RepBytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func (m *OneofStdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.OneOfStdTimes != nil { @@ -3677,6 +11760,9 @@ } func (m *OneofStdTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Timestamp != nil { @@ -3686,6 +11772,9 @@ return n } func (m *OneofStdTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Duration != nil { @@ -3694,6 +11783,114 @@ } return n } +func (m *OneofStdTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.RepDouble) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.RepFloat) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.RepInt64) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.RepUInt64) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.RepInt32) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.RepUInt32) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.RepBool) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.RepString) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.RepBytes) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func sovTypes(x uint64) (n int) { for { @@ -3709,66 +11906,152 @@ return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func init() { proto.RegisterFile("combos/marshaler/types.proto", fileDescriptor_types_f8a2648e6b1ebf0f) } +func init() { proto.RegisterFile("combos/marshaler/types.proto", fileDescriptor_types_84a5c6bb8f2642e0) } -var fileDescriptor_types_f8a2648e6b1ebf0f = []byte{ - // 927 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0xcd, 0x8e, 0xdb, 0x54, - 0x18, 0x8d, 0x7f, 0x52, 0x32, 0x5f, 0x14, 0xda, 0x5a, 0x02, 0x99, 0x50, 0x39, 0x43, 0xd8, 0x0c, - 0xad, 0xea, 0x40, 0x12, 0x05, 0x34, 0xa8, 0x50, 0xac, 0x69, 0x3b, 0xa5, 0x9a, 0x4e, 0x95, 0x96, - 0x11, 0x20, 0x81, 0xb0, 0x1b, 0x27, 0x8d, 0x70, 0x7c, 0x23, 0xfb, 0x9a, 0x2a, 0x3b, 0x1e, 0x81, - 0x25, 0x88, 0x0d, 0xdd, 0x21, 0xc1, 0x1e, 0x96, 0x6c, 0x90, 0xba, 0x83, 0x27, 0x80, 0x36, 0x6c, - 0x78, 0x84, 0x2e, 0xd1, 0xbd, 0xbe, 0xfe, 0x8b, 0xaf, 0x1d, 0x12, 0x69, 0xc4, 0x86, 0xdd, 0x78, - 0x7c, 0xce, 0xf1, 0xf1, 0xf1, 0xf9, 0xbe, 0x1b, 0xb8, 0x70, 0x1f, 0xcd, 0x2c, 0xe4, 0x77, 0x66, - 0xa6, 0xe7, 0x3f, 0x30, 0x1d, 0xdb, 0xeb, 0xe0, 0xc5, 0xdc, 0xf6, 0xf5, 0xb9, 0x87, 0x30, 0x52, - 0xaa, 0xf4, 0xa2, 0x79, 0x79, 0x32, 0xc5, 0x0f, 0x02, 0x4b, 0xbf, 0x8f, 0x66, 0x9d, 0x09, 0x9a, - 0xa0, 0x0e, 0xbd, 0x6b, 0x05, 0x63, 0x7a, 0x45, 0x2f, 0xe8, 0x5f, 0x21, 0xab, 0xa9, 0x4d, 0x10, - 0x9a, 0x38, 0x76, 0x82, 0x1a, 0x05, 0x9e, 0x89, 0xa7, 0xc8, 0x65, 0xf7, 0x5b, 0xab, 0xf7, 0xf1, - 0x74, 0x66, 0xfb, 0xd8, 0x9c, 0xcd, 0x8b, 0x04, 0x1e, 0x7a, 0xe6, 0x7c, 0x6e, 0x7b, 0xcc, 0x56, - 0xfb, 0x5b, 0x19, 0xe0, 0x96, 0x8b, 0x1e, 0xba, 0xf7, 0x88, 0x3d, 0xe5, 0x12, 0x48, 0xa3, 0xc0, - 0x53, 0x85, 0x5d, 0x61, 0xaf, 0xde, 0x7d, 0x49, 0x0f, 0xc9, 0x7a, 0x44, 0xd6, 0x0f, 0xd8, 0xd3, - 0x87, 0x04, 0xa5, 0x5c, 0x04, 0x11, 0xfb, 0xaa, 0x48, 0xb1, 0xcd, 0x1c, 0xf6, 0x5e, 0xe4, 0x64, - 0x28, 0x62, 0x5f, 0xd1, 0x41, 0x1a, 0x59, 0x8e, 0x2a, 0x51, 0xf0, 0x85, 0xbc, 0x30, 0x0a, 0x2c, - 0xc7, 0x3e, 0x31, 0x9d, 0xc0, 0x1e, 0x12, 0xa0, 0x72, 0x19, 0xa4, 0xb1, 0x83, 0x55, 0x99, 0xe2, - 0x5f, 0xce, 0xe1, 0xaf, 0x3b, 0xc8, 0xc4, 0x0c, 0x3e, 0x76, 0x30, 0x81, 0x4f, 0x07, 0x7d, 0xb5, - 0x5a, 0x00, 0xbf, 0xe9, 0xe2, 0x41, 0x9f, 0xc1, 0xa7, 0x83, 0x3e, 0x71, 0x13, 0x0c, 0xfa, 0xea, - 0x99, 0x02, 0x37, 0x1f, 0xa4, 0xf1, 0xc1, 0xa0, 0x4f, 0xe5, 0x7b, 0x5d, 0xf5, 0xb9, 0x62, 0xf9, - 0x5e, 0x37, 0x92, 0xef, 0x75, 0xa9, 0x7c, 0xaf, 0xab, 0xd6, 0x4a, 0xe4, 0x63, 0x7c, 0x40, 0xf1, - 0xb2, 0x85, 0x90, 0xa3, 0xee, 0x14, 0x44, 0x69, 0x20, 0xe4, 0x84, 0x70, 0x8a, 0x23, 0xfa, 0x3e, - 0xf6, 0x54, 0x28, 0xd0, 0xbf, 0x8b, 0xbd, 0xa9, 0x3b, 0x61, 0xfa, 0x3e, 0xf6, 0x94, 0x37, 0xa0, - 0x6a, 0x2d, 0xb0, 0xed, 0xab, 0xf5, 0x82, 0x17, 0x30, 0xc8, 0xdd, 0x90, 0x10, 0x22, 0xf7, 0xe5, - 0xbf, 0x1f, 0xb5, 0x84, 0xf6, 0x77, 0x22, 0xc0, 0x1d, 0x02, 0x0a, 0xdb, 0x71, 0x08, 0xe7, 0xdd, - 0xc0, 0x71, 0x4c, 0xcb, 0xb1, 0xe3, 0xaf, 0xcb, 0xba, 0x52, 0xf6, 0xfd, 0xf3, 0x24, 0xe5, 0x1a, - 0x9c, 0x8b, 0xfe, 0x19, 0x75, 0x8a, 0x15, 0xa9, 0xa4, 0x74, 0x39, 0x8a, 0xf2, 0x0e, 0xec, 0xc4, - 0x85, 0x67, 0xdd, 0x2a, 0x31, 0x62, 0xc8, 0x8f, 0xff, 0x68, 0x55, 0x86, 0x09, 0x45, 0x79, 0x1b, - 0x6a, 0xd1, 0x40, 0xb1, 0xaa, 0x15, 0x3f, 0x9e, 0xb1, 0x63, 0x02, 0x8b, 0xe8, 0x47, 0x11, 0x6a, - 0x77, 0xf1, 0x28, 0x0c, 0xe8, 0xf6, 0x56, 0x01, 0x19, 0xf2, 0x57, 0x7f, 0xb6, 0x04, 0x5e, 0x4c, - 0xb7, 0xb6, 0x88, 0xc9, 0x90, 0xbf, 0x26, 0x6a, 0xf9, 0xb0, 0x8c, 0xcd, 0xc2, 0xaa, 0x91, 0xd7, - 0xa5, 0xc6, 0x52, 0x81, 0xbd, 0xbb, 0x49, 0x60, 0x54, 0x81, 0x9a, 0x89, 0x49, 0xed, 0x1f, 0x44, - 0x68, 0x0c, 0xed, 0x79, 0xaa, 0x54, 0xef, 0x83, 0x92, 0x7b, 0x71, 0x5f, 0x15, 0x76, 0xa5, 0x35, - 0xad, 0xe2, 0xb0, 0x94, 0x1b, 0x49, 0xfe, 0x91, 0x0b, 0xb2, 0xa0, 0xa4, 0xf2, 0x5e, 0xe5, 0x39, - 0xca, 0x55, 0x00, 0x9c, 0x98, 0x91, 0xd6, 0x99, 0x61, 0xdd, 0x48, 0x71, 0x94, 0x2b, 0xb0, 0x33, - 0x8a, 0x2d, 0xc8, 0x6b, 0x2c, 0x44, 0xcd, 0x8c, 0x19, 0xac, 0x5c, 0x3f, 0x89, 0x50, 0x1f, 0xda, - 0xf3, 0xb8, 0x5f, 0x77, 0xb6, 0xcb, 0x8a, 0x15, 0x8c, 0x97, 0xd8, 0xd1, 0x36, 0x89, 0xb1, 0x8a, - 0x71, 0x72, 0x3b, 0xd8, 0x30, 0xb7, 0xa4, 0x64, 0xe9, 0xec, 0xde, 0xdb, 0x28, 0xbb, 0xa4, 0x66, - 0x09, 0xab, 0xfd, 0x6b, 0x15, 0x1a, 0x47, 0x66, 0xba, 0x67, 0x1f, 0xf1, 0x67, 0x93, 0x88, 0x5f, - 0xd2, 0xc3, 0x93, 0x3a, 0x43, 0xd0, 0x6f, 0xaf, 0xa2, 0xaf, 0xb9, 0xd8, 0x5b, 0xf0, 0xc6, 0xf4, - 0x46, 0x7a, 0xb2, 0xc2, 0xf0, 0x5e, 0xe5, 0x4a, 0x66, 0xa5, 0xf2, 0xfb, 0xe8, 0x84, 0x33, 0xef, - 0x61, 0x88, 0x17, 0x4b, 0x2d, 0x46, 0xe0, 0xd0, 0x61, 0x7e, 0xf4, 0x0f, 0x32, 0x63, 0x4b, 0xf4, - 0xda, 0x5c, 0xbd, 0x8c, 0xce, 0xea, 0xc2, 0x6b, 0x7e, 0x06, 0x2f, 0xf2, 0x33, 0x51, 0xce, 0x81, - 0xf4, 0xb9, 0xbd, 0xa0, 0x9b, 0xae, 0x3a, 0x24, 0x7f, 0x2a, 0xaf, 0x43, 0xf5, 0x0b, 0x72, 0x9e, - 0xfc, 0x8b, 0x9f, 0x07, 0x21, 0x70, 0x5f, 0x7c, 0x4b, 0x68, 0x7e, 0x08, 0xcf, 0x9f, 0x92, 0xf2, - 0xa7, 0xf0, 0x02, 0x37, 0x2c, 0xce, 0x03, 0x3a, 0xd9, 0x07, 0x94, 0x2c, 0x8e, 0x94, 0xfe, 0x09, - 0x34, 0x4e, 0x43, 0xb7, 0xfd, 0x5b, 0x15, 0xea, 0x47, 0x66, 0xb2, 0x01, 0x3e, 0x29, 0x6e, 0xf1, - 0x6b, 0xc9, 0x27, 0x8d, 0xe0, 0x05, 0x1d, 0x2e, 0x3e, 0x70, 0x6e, 0xe6, 0x9b, 0xfc, 0x0a, 0x47, - 0x76, 0x45, 0x8e, 0x7b, 0x54, 0x7c, 0x5c, 0xd8, 0xe5, 0xbd, 0x12, 0xa3, 0x2b, 0x0d, 0x2c, 0x38, - 0xca, 0xae, 0xe7, 0xfa, 0xbc, 0xcb, 0xd1, 0xcc, 0x6a, 0x71, 0x4e, 0xa3, 0xff, 0x1b, 0xfd, 0x1f, - 0x34, 0xfa, 0x1b, 0x01, 0xce, 0x1e, 0xbb, 0x36, 0x1a, 0xa7, 0x76, 0xf3, 0x7e, 0xba, 0x76, 0x6b, - 0x7f, 0x2f, 0x1d, 0x66, 0x76, 0xe6, 0x9b, 0xa9, 0x2e, 0xac, 0xf3, 0x71, 0x98, 0x5a, 0x67, 0xc6, - 0x79, 0xea, 0xe3, 0x98, 0xf9, 0x20, 0x7a, 0xed, 0x47, 0x02, 0x34, 0xa8, 0xb7, 0x78, 0xde, 0xae, - 0x6e, 0xe4, 0x2c, 0x1c, 0xac, 0xac, 0xbf, 0x2b, 0x1b, 0xf8, 0x0b, 0x0b, 0x9f, 0x71, 0x79, 0x96, - 0x3a, 0x3a, 0xa6, 0x8e, 0x88, 0xa6, 0xb1, 0xf7, 0xe4, 0xa9, 0x26, 0x3c, 0x7b, 0xaa, 0x09, 0xdf, - 0x2f, 0x35, 0xe1, 0xe7, 0xa5, 0x26, 0xfc, 0xb2, 0xd4, 0x84, 0xc7, 0x4b, 0x4d, 0xf8, 0x7d, 0xa9, - 0x55, 0x9e, 0x2c, 0x35, 0xe1, 0xd9, 0x52, 0xab, 0x7c, 0xf9, 0x97, 0x56, 0xb1, 0xce, 0x50, 0xfd, - 0xde, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x8a, 0x72, 0x25, 0x99, 0x0e, 0x00, 0x00, +var fileDescriptor_types_84a5c6bb8f2642e0 = []byte{ + // 2299 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcf, 0x73, 0x1c, 0x47, + 0x19, 0xd5, 0x7a, 0x57, 0xb6, 0xd4, 0x92, 0x6c, 0x69, 0x1c, 0xa7, 0x06, 0x91, 0x5a, 0x1b, 0x25, + 0x76, 0x4c, 0x52, 0x91, 0xc8, 0x8c, 0x4a, 0x80, 0x21, 0x51, 0x32, 0x65, 0x7b, 0xb5, 0x1b, 0xc9, + 0x5e, 0xaf, 0xb4, 0x2e, 0x08, 0x04, 0xd8, 0x8d, 0xc6, 0x8a, 0x8a, 0xd5, 0xce, 0xd6, 0xee, 0x2c, + 0x29, 0xdd, 0xf8, 0x03, 0x38, 0x70, 0x83, 0x2a, 0x2e, 0x70, 0xe3, 0xca, 0x81, 0x2a, 0x8e, 0x1c, + 0x73, 0xe4, 0x2f, 0x80, 0x44, 0x5c, 0xb8, 0x02, 0x17, 0x5f, 0xa8, 0xa2, 0xa6, 0xbb, 0x67, 0xa6, + 0x7f, 0x7c, 0xdd, 0x3d, 0x3d, 0x25, 0xdd, 0x74, 0x93, 0x76, 0xbf, 0x7e, 0xf3, 0xe6, 0x9b, 0x37, + 0x7a, 0xfd, 0xbe, 0xd1, 0xa0, 0xd7, 0x3e, 0x8d, 0x4e, 0xfa, 0xd1, 0x64, 0xe3, 0xa4, 0x37, 0x9e, + 0x7c, 0xd6, 0x1b, 0x84, 0xe3, 0x8d, 0xf8, 0x74, 0x14, 0x4e, 0xd6, 0x47, 0xe3, 0x28, 0x8e, 0x9c, + 0x59, 0xfc, 0xcb, 0xea, 0x3b, 0x47, 0xc7, 0xf1, 0x67, 0xd3, 0xfe, 0xfa, 0xa7, 0xd1, 0xc9, 0xc6, + 0x51, 0x74, 0x14, 0x6d, 0xe0, 0x6f, 0xfb, 0xd3, 0x17, 0xf8, 0x37, 0xfc, 0x0b, 0xfe, 0x89, 0xac, + 0x5a, 0xad, 0x1f, 0x45, 0xd1, 0xd1, 0x20, 0xcc, 0xab, 0x0e, 0xa7, 0xe3, 0x5e, 0x7c, 0x1c, 0x0d, + 0xe9, 0xf7, 0xb7, 0xc5, 0xef, 0xe3, 0xe3, 0x93, 0x70, 0x12, 0xf7, 0x4e, 0x46, 0x2a, 0x80, 0xcf, + 0xc7, 0xbd, 0xd1, 0x28, 0x1c, 0x53, 0x5a, 0x6b, 0xbf, 0xab, 0x21, 0xf4, 0xd1, 0x30, 0xfa, 0x7c, + 0x78, 0x90, 0xd0, 0x73, 0xde, 0x46, 0xd5, 0xc3, 0xe9, 0xd8, 0xad, 0xdc, 0xa9, 0xdc, 0x5f, 0xf0, + 0xbe, 0xb6, 0x4e, 0x16, 0xaf, 0xa7, 0x8b, 0xd7, 0x1f, 0xd2, 0xa3, 0x77, 0x92, 0x2a, 0xe7, 0x2d, + 0x74, 0x25, 0x9e, 0xb8, 0x57, 0x70, 0xed, 0xaa, 0x54, 0x7b, 0x90, 0x32, 0xe9, 0x5c, 0x89, 0x27, + 0xce, 0x3a, 0xaa, 0x1e, 0xf6, 0x07, 0x6e, 0x15, 0x17, 0xbf, 0x26, 0x03, 0x47, 0xd3, 0xfe, 0x20, + 0x7c, 0xde, 0x1b, 0x4c, 0xc3, 0x4e, 0x52, 0xe8, 0xbc, 0x83, 0xaa, 0x2f, 0x06, 0xb1, 0x5b, 0xc3, + 0xf5, 0x5f, 0x97, 0xea, 0x1f, 0x0f, 0xa2, 0x5e, 0x4c, 0xcb, 0x5f, 0x0c, 0xe2, 0xa4, 0xfc, 0x78, + 0x6b, 0xd3, 0x9d, 0x55, 0x94, 0x37, 0x87, 0xf1, 0xd6, 0x26, 0x2d, 0x3f, 0xde, 0xda, 0x4c, 0xd8, + 0x4c, 0xb7, 0x36, 0xdd, 0xab, 0x0a, 0x36, 0x5d, 0xb6, 0x7e, 0xba, 0xb5, 0x89, 0xe1, 0x7d, 0xcf, + 0xbd, 0xa6, 0x86, 0xf7, 0xbd, 0x14, 0xde, 0xf7, 0x30, 0xbc, 0xef, 0xb9, 0x73, 0x1a, 0xf8, 0xac, + 0x7e, 0x8a, 0xeb, 0x6b, 0xfd, 0x28, 0x1a, 0xb8, 0xf3, 0x8a, 0x56, 0x06, 0x51, 0x34, 0x20, 0xe5, + 0xb8, 0x2e, 0xc1, 0x9f, 0xc4, 0x63, 0x17, 0x29, 0xf0, 0xf7, 0xe3, 0xf1, 0xf1, 0xf0, 0x88, 0xe2, + 0x4f, 0xe2, 0xb1, 0xf3, 0x2e, 0x9a, 0xed, 0x9f, 0xc6, 0xe1, 0xc4, 0x5d, 0x50, 0x9c, 0x40, 0x90, + 0x7c, 0x4b, 0x16, 0x90, 0xca, 0x07, 0xb5, 0x7f, 0xfd, 0xe1, 0x76, 0x65, 0xed, 0x57, 0x8b, 0x08, + 0xb5, 0x93, 0x22, 0xa2, 0x8e, 0x1d, 0xb4, 0x32, 0x9c, 0x0e, 0x06, 0xbd, 0xfe, 0x20, 0xcc, 0xae, + 0x2e, 0xd5, 0x8a, 0xee, 0xfa, 0xcb, 0x8b, 0x9c, 0x47, 0x68, 0x39, 0xfd, 0x30, 0xd5, 0x14, 0x15, + 0x92, 0x46, 0x74, 0xd2, 0x12, 0xe7, 0x21, 0xba, 0x9e, 0x7d, 0x86, 0x15, 0x54, 0x48, 0x60, 0xc2, + 0x1a, 0xe7, 0x43, 0xb4, 0x94, 0x7e, 0x82, 0x75, 0x55, 0x44, 0x75, 0xfc, 0x0a, 0x16, 0x02, 0x6b, + 0xa7, 0x88, 0x12, 0xf9, 0x15, 0xec, 0xb9, 0x10, 0xfd, 0x15, 0x92, 0xa7, 0xb0, 0x46, 0x20, 0x52, + 0x4c, 0xb3, 0xfc, 0x0a, 0x91, 0x48, 0x41, 0x21, 0x0b, 0x6b, 0x9c, 0xf7, 0xd1, 0x62, 0xfa, 0x49, + 0x50, 0x4c, 0xdb, 0x5c, 0x3d, 0xcb, 0x82, 0xe8, 0xb9, 0x90, 0xdc, 0x85, 0x35, 0x6c, 0x3b, 0x82, + 0xa2, 0x77, 0x00, 0xbf, 0xc2, 0x79, 0x1f, 0xcd, 0x67, 0x7f, 0x54, 0xdd, 0x45, 0x93, 0xd8, 0x83, + 0xda, 0x17, 0x7f, 0xbf, 0x3d, 0xd3, 0xc9, 0x97, 0x38, 0xdf, 0x43, 0x73, 0xe9, 0x1f, 0x6d, 0x77, + 0xc9, 0x20, 0x71, 0xba, 0x3a, 0x5b, 0xe0, 0xec, 0xa0, 0xa5, 0x61, 0x34, 0x4c, 0x08, 0x51, 0x7d, + 0x5f, 0x37, 0xeb, 0x9b, 0x82, 0xf0, 0x0b, 0x9d, 0x47, 0x68, 0x91, 0x7e, 0x40, 0x34, 0x7e, 0xc3, + 0xa8, 0x71, 0x8a, 0xc3, 0x2d, 0x63, 0x60, 0x88, 0x46, 0x97, 0x8d, 0x3a, 0x17, 0x60, 0x88, 0x4c, + 0xf3, 0xf3, 0xa2, 0x5a, 0x5f, 0x31, 0x6b, 0x5d, 0x38, 0x2f, 0x2a, 0x78, 0x8e, 0x90, 0xef, 0xb9, + 0x8e, 0x51, 0xef, 0x32, 0x21, 0xdf, 0x13, 0x08, 0xf9, 0x9e, 0x7b, 0xd3, 0xac, 0x79, 0x80, 0x90, + 0xef, 0x39, 0x01, 0x5a, 0xa0, 0x1f, 0x60, 0xdd, 0xbf, 0x62, 0xd2, 0x3d, 0x45, 0x61, 0x17, 0x31, + 0x6c, 0xa8, 0xf6, 0x6f, 0x99, 0xb5, 0x2f, 0xb0, 0xa1, 0x37, 0x40, 0xde, 0x1e, 0xa2, 0xff, 0x57, + 0x8d, 0xfa, 0x17, 0xda, 0x13, 0x30, 0x76, 0xf0, 0x9f, 0x45, 0x34, 0xb7, 0x1f, 0x1f, 0x12, 0x33, + 0x78, 0x52, 0xca, 0x0c, 0x82, 0xda, 0xaf, 0xff, 0x71, 0xbb, 0x02, 0x59, 0xc2, 0x47, 0x25, 0x2c, + 0x21, 0xa8, 0xfd, 0x36, 0x41, 0x93, 0x8d, 0xa1, 0x55, 0xc6, 0x18, 0x82, 0xda, 0xef, 0x13, 0x34, + 0xd1, 0x1e, 0x1a, 0xf6, 0xf6, 0x40, 0x91, 0x04, 0x93, 0x68, 0xd8, 0x9b, 0x84, 0x08, 0x44, 0x34, + 0xdf, 0x2a, 0x63, 0x15, 0xe2, 0xd9, 0xd1, 0xfb, 0xa7, 0x61, 0x6f, 0x18, 0x00, 0x29, 0xdf, 0x13, + 0x49, 0x15, 0xb3, 0x0d, 0x88, 0x14, 0xb6, 0x20, 0x4b, 0xf3, 0xa0, 0x38, 0xbc, 0x85, 0xb4, 0xca, + 0x58, 0x88, 0xc8, 0x88, 0xde, 0x47, 0x0d, 0x7b, 0x23, 0x11, 0xdb, 0x44, 0xec, 0x24, 0xb0, 0xb3, + 0x93, 0xb9, 0xe4, 0x66, 0xc4, 0xb7, 0x0c, 0x63, 0x29, 0xdb, 0x36, 0x96, 0x82, 0x11, 0xf0, 0x6d, + 0x92, 0xdb, 0xca, 0x6e, 0x19, 0x5b, 0xc1, 0x40, 0xf4, 0x94, 0x38, 0x6b, 0x69, 0xda, 0x5b, 0x4b, + 0x8e, 0xc5, 0xdb, 0x4b, 0xd3, 0xde, 0x5e, 0x64, 0x28, 0x22, 0xec, 0xdd, 0x32, 0x16, 0x23, 0x9f, + 0x23, 0xbd, 0x4d, 0x9a, 0xf6, 0x36, 0x03, 0x12, 0xf3, 0x3d, 0x81, 0x58, 0x41, 0xab, 0x81, 0x89, + 0xf9, 0x9e, 0xf3, 0xd8, 0xd6, 0x6e, 0x72, 0x24, 0xce, 0x72, 0x76, 0xcb, 0x58, 0x8e, 0xcc, 0x8a, + 0xde, 0x2e, 0x4d, 0x7b, 0xdb, 0x91, 0xdb, 0x85, 0xbf, 0x5c, 0xfb, 0xcd, 0x22, 0x5a, 0xea, 0x84, + 0x23, 0x26, 0x86, 0xb4, 0x90, 0x23, 0xd9, 0xc7, 0xc4, 0xad, 0xdc, 0xa9, 0x1a, 0x72, 0x08, 0xb0, + 0xca, 0x69, 0xe4, 0x2e, 0x96, 0xde, 0x31, 0x49, 0xa4, 0xad, 0xea, 0x93, 0x88, 0xbc, 0xc6, 0xf9, + 0x00, 0xa1, 0x38, 0x27, 0x53, 0x35, 0x91, 0xa1, 0x2e, 0xcb, 0xac, 0x71, 0xde, 0x43, 0xf3, 0x87, + 0x19, 0x85, 0x9a, 0x81, 0x42, 0xba, 0xcf, 0xcc, 0x56, 0x00, 0x59, 0x68, 0x16, 0x63, 0xd8, 0x65, + 0x21, 0x69, 0xc3, 0x79, 0xd5, 0x0c, 0x02, 0x6f, 0x38, 0xa5, 0x54, 0x75, 0x0d, 0x23, 0xd9, 0xa4, + 0x2a, 0x71, 0xcf, 0x3a, 0x67, 0x44, 0x00, 0xf7, 0xac, 0x52, 0x38, 0x9b, 0x57, 0xe0, 0xa8, 0xc3, + 0x99, 0xb8, 0xed, 0x45, 0x46, 0x04, 0x70, 0xdb, 0x2b, 0x67, 0xbc, 0x05, 0x45, 0x7b, 0x75, 0x19, + 0x4f, 0xda, 0x3c, 0x2f, 0x9a, 0x41, 0xe0, 0xcd, 0xb3, 0x94, 0x16, 0x97, 0xd4, 0xe7, 0xa5, 0x48, + 0x8b, 0xe2, 0xfe, 0xfb, 0xba, 0x11, 0x01, 0xdc, 0x7f, 0xcb, 0xa1, 0xf3, 0x86, 0xe6, 0xa4, 0x54, + 0xa1, 0x53, 0xda, 0xc5, 0x2f, 0x9b, 0x41, 0xe0, 0x5d, 0xbc, 0x18, 0x5f, 0x57, 0x14, 0x37, 0xb4, + 0x2a, 0xbe, 0x0a, 0x29, 0xc0, 0x31, 0x2d, 0x87, 0x52, 0x80, 0x1c, 0x81, 0x6f, 0x2a, 0x4e, 0x47, + 0x17, 0x81, 0xa5, 0x2c, 0xf1, 0x8a, 0x19, 0x04, 0xce, 0x12, 0x52, 0x98, 0xbe, 0xa5, 0xb8, 0xd6, + 0xea, 0x30, 0x2d, 0xc7, 0x91, 0x6a, 0xf9, 0x38, 0xf2, 0xbf, 0x45, 0xb4, 0xd0, 0x09, 0x47, 0x59, + 0x22, 0x69, 0x97, 0xf3, 0x05, 0x1a, 0x49, 0x20, 0x77, 0xd8, 0x2b, 0xe3, 0x0e, 0x34, 0x94, 0x00, + 0x1e, 0xf1, 0xd0, 0xd2, 0x23, 0xf2, 0xcd, 0x1f, 0xeb, 0x13, 0x1f, 0x5a, 0xf9, 0x44, 0xbe, 0xfd, + 0x63, 0xbc, 0xa2, 0x55, 0xc6, 0x2b, 0x14, 0xf1, 0x68, 0xb7, 0x8c, 0x63, 0x28, 0xf7, 0x92, 0x0d, + 0x7b, 0xd7, 0x80, 0xc3, 0x56, 0xd3, 0xde, 0x3b, 0x54, 0x9b, 0xd2, 0x86, 0xbd, 0x7f, 0xc0, 0xb9, + 0xad, 0x69, 0xef, 0x22, 0xaa, 0xdd, 0x6d, 0xab, 0x8c, 0x93, 0x28, 0x22, 0xe0, 0x6e, 0x19, 0x3f, + 0x51, 0xee, 0x94, 0x1b, 0xf6, 0x9e, 0x02, 0x07, 0xca, 0xa6, 0xbd, 0xb3, 0xa8, 0xb6, 0xdc, 0xad, + 0x32, 0xee, 0xa2, 0xc8, 0xa6, 0xbb, 0x65, 0x3c, 0x46, 0xb9, 0x7d, 0x7f, 0x68, 0xeb, 0x33, 0x60, + 0xd2, 0x7d, 0x6c, 0xeb, 0x36, 0x8a, 0x10, 0xd0, 0x2a, 0xe3, 0x38, 0x8a, 0xc4, 0xbc, 0x5b, 0xc6, + 0x77, 0x94, 0x81, 0xa2, 0x61, 0xef, 0x3d, 0x70, 0xfe, 0x6e, 0xda, 0x3b, 0x90, 0x2a, 0x99, 0xfc, + 0xa9, 0x8e, 0x96, 0xf6, 0x7a, 0x6c, 0x32, 0xf9, 0x21, 0x3c, 0x13, 0x4b, 0x8e, 0xf0, 0xf6, 0x3a, + 0x79, 0x1a, 0xc8, 0x2d, 0x58, 0x7f, 0x22, 0x56, 0x3f, 0x1a, 0xc6, 0xe3, 0x53, 0x68, 0x3c, 0xd6, + 0x60, 0xe7, 0x06, 0xc4, 0x82, 0x5e, 0x07, 0x21, 0x79, 0x28, 0x79, 0x1e, 0xfd, 0x1c, 0x98, 0xb3, + 0x11, 0x2b, 0x7a, 0x4b, 0x4b, 0x31, 0x2d, 0x26, 0x0c, 0xa1, 0x67, 0x31, 0xf9, 0x50, 0x82, 0xb8, + 0xd2, 0x1a, 0x88, 0xc7, 0xe1, 0x48, 0x03, 0xef, 0xb6, 0xc2, 0x99, 0xee, 0xeb, 0xb9, 0xe1, 0x52, + 0xc2, 0x4c, 0xf4, 0xa7, 0x7d, 0xd8, 0x9f, 0xde, 0x84, 0x01, 0xd9, 0x4a, 0x96, 0xa1, 0x60, 0x53, + 0x7b, 0xb0, 0x4d, 0xbd, 0xa9, 0x65, 0x89, 0x2b, 0x09, 0x49, 0xc1, 0xac, 0xda, 0xa0, 0x59, 0xdd, + 0xd3, 0x51, 0xcc, 0xc1, 0xc0, 0xcc, 0xb3, 0x07, 0x7b, 0x96, 0x9e, 0x20, 0xae, 0x14, 0x08, 0x92, + 0x3f, 0xea, 0x6d, 0xd0, 0xb9, 0xb4, 0x04, 0x73, 0x30, 0x30, 0x0a, 0xb5, 0x15, 0x06, 0xa6, 0xbf, + 0xd0, 0x5d, 0x86, 0xa2, 0x68, 0x63, 0xfb, 0xb0, 0x8d, 0x69, 0x2f, 0x74, 0x57, 0x62, 0x29, 0xb8, + 0xd9, 0x1e, 0xec, 0x66, 0xc6, 0x3e, 0xfa, 0x9e, 0xdc, 0x47, 0xdf, 0xe3, 0xfb, 0x98, 0x79, 0x9a, + 0xa9, 0x8f, 0x14, 0x0c, 0x0c, 0x4e, 0x6d, 0x85, 0xb5, 0x99, 0xfb, 0x98, 0x52, 0x14, 0x0d, 0x6e, + 0x1f, 0x36, 0x38, 0x63, 0x1f, 0x79, 0x96, 0x82, 0xcf, 0xb5, 0x40, 0x9f, 0xbb, 0xa7, 0x25, 0x99, + 0x14, 0x12, 0x8a, 0xbc, 0xdb, 0xed, 0x41, 0x6e, 0x77, 0x57, 0x47, 0x2f, 0x43, 0x82, 0x62, 0x56, + 0x5b, 0x61, 0x7a, 0xfa, 0x0e, 0x92, 0x52, 0xa1, 0x83, 0xd4, 0xac, 0xf6, 0x61, 0xeb, 0xd3, 0x76, + 0x90, 0xc1, 0x83, 0xd3, 0xd7, 0x1e, 0xec, 0x80, 0x7a, 0x25, 0xe2, 0x4a, 0x41, 0x89, 0xc4, 0x07, + 0xdb, 0xa0, 0x0f, 0x6a, 0x95, 0x98, 0x83, 0x41, 0xa1, 0x6c, 0xf5, 0x67, 0xe8, 0x55, 0xd8, 0xce, + 0x9c, 0x65, 0x54, 0xfd, 0x79, 0x78, 0x8a, 0x1f, 0x0e, 0xcd, 0x76, 0x92, 0x1f, 0x9d, 0x6f, 0xa1, + 0xd9, 0x5f, 0x24, 0xde, 0x5a, 0xe0, 0xbf, 0x47, 0x48, 0xe1, 0x83, 0x2b, 0xdf, 0xa9, 0xac, 0xfe, + 0x00, 0x5d, 0xbf, 0x20, 0xe4, 0x9f, 0xa0, 0x5b, 0xa0, 0xcf, 0x01, 0x07, 0xd8, 0xe0, 0x0f, 0xa0, + 0x99, 0x12, 0x32, 0xf8, 0xcf, 0xd1, 0xd2, 0x85, 0xe0, 0xfe, 0x14, 0xdd, 0x04, 0x3c, 0x10, 0x40, + 0xf7, 0x78, 0x74, 0xfd, 0x50, 0x90, 0x6b, 0x8c, 0x23, 0x7b, 0xe2, 0x39, 0xe2, 0x7f, 0x82, 0x1c, + 0xd9, 0x1e, 0x01, 0xfc, 0x77, 0x79, 0x7c, 0xed, 0x14, 0x91, 0x81, 0xff, 0x31, 0x5a, 0x91, 0xfc, + 0xf2, 0xfc, 0xd0, 0x19, 0xf2, 0xb9, 0x8f, 0x94, 0x81, 0x67, 0x86, 0x7d, 0x20, 0xf9, 0x8b, 0x40, + 0x67, 0xa4, 0xd3, 0xd5, 0xe2, 0x1b, 0x2f, 0x6d, 0x17, 0x3e, 0x40, 0x2e, 0x9d, 0x8b, 0xc1, 0xe7, + 0xbb, 0x4f, 0xdd, 0xa7, 0x64, 0x7f, 0xd2, 0x81, 0xa2, 0xaa, 0xfb, 0xe7, 0x8e, 0x2e, 0x74, 0x5f, + 0x8d, 0x5f, 0xa8, 0x3b, 0xc0, 0x01, 0xf8, 0xee, 0x9f, 0x3f, 0xfe, 0x8f, 0xd0, 0x8a, 0xe4, 0xd3, + 0x65, 0xfe, 0x1c, 0xe7, 0x03, 0x54, 0x06, 0xfc, 0x63, 0xb4, 0x2c, 0x3a, 0xf7, 0xb9, 0x61, 0x33, + 0x9d, 0x67, 0x3c, 0xb7, 0x4c, 0x67, 0xd8, 0xa9, 0x2b, 0xd8, 0xf9, 0x8b, 0xc1, 0x67, 0x74, 0x9f, + 0x3b, 0x72, 0x19, 0x65, 0xb2, 0xff, 0xf5, 0x07, 0xe9, 0xfe, 0x02, 0xd0, 0xd7, 0xfe, 0x5d, 0x47, + 0x0b, 0x7b, 0xbd, 0x7c, 0x66, 0xfb, 0x89, 0x3a, 0x31, 0x7f, 0x33, 0xdf, 0x8b, 0xa4, 0xe5, 0x8a, + 0xbc, 0xac, 0xfe, 0xa7, 0x92, 0xa6, 0x9c, 0x9a, 0xbf, 0x01, 0xc0, 0x0a, 0x70, 0xe0, 0x43, 0xf7, + 0x8f, 0x95, 0xb9, 0xf9, 0xbe, 0x86, 0xa8, 0x90, 0x76, 0x15, 0xff, 0xae, 0xf2, 0x58, 0xca, 0xce, + 0x77, 0x00, 0x4c, 0x1e, 0x0b, 0x7a, 0xae, 0x7f, 0xa0, 0x48, 0xcf, 0xf7, 0x74, 0x0c, 0xd9, 0xac, + 0x0b, 0x4e, 0x78, 0xbb, 0x70, 0x82, 0xbe, 0x0b, 0x81, 0xca, 0xf9, 0x59, 0x39, 0xea, 0x7d, 0x06, + 0x67, 0xe8, 0xbb, 0x1a, 0xae, 0x6c, 0xe8, 0x85, 0x86, 0xbe, 0x1d, 0x30, 0x47, 0xbf, 0xa1, 0x26, + 0xca, 0x00, 0xaa, 0xa6, 0xbf, 0xcf, 0xe0, 0x24, 0xad, 0xa3, 0xc9, 0x86, 0x4a, 0x68, 0x0e, 0xdc, + 0x01, 0xd3, 0xb4, 0x86, 0x26, 0x03, 0xa8, 0x1a, 0x08, 0x1f, 0x28, 0xf2, 0xb4, 0xee, 0xd2, 0x77, + 0x25, 0xa2, 0x62, 0xa6, 0xee, 0xc2, 0x99, 0x5a, 0x73, 0xe9, 0xbb, 0x20, 0x57, 0x21, 0x55, 0x3f, + 0x83, 0x53, 0xb5, 0xa1, 0xa7, 0x59, 0xc0, 0x84, 0xa6, 0xc5, 0x1d, 0x30, 0x59, 0xeb, 0x7b, 0x9a, + 0x02, 0xaa, 0xc6, 0xc6, 0x07, 0x8a, 0x6c, 0x6d, 0xea, 0x29, 0x4f, 0x54, 0xcc, 0xd7, 0x5d, 0x38, + 0x5f, 0x1b, 0x7a, 0x2a, 0x73, 0x15, 0x12, 0xf6, 0x13, 0x30, 0x61, 0xbf, 0xa1, 0xa1, 0xca, 0xa4, + 0x62, 0x60, 0xa6, 0xfc, 0x14, 0x4a, 0xd9, 0xaf, 0xab, 0x49, 0xe6, 0x68, 0x8a, 0xe1, 0xf2, 0x81, + 0x22, 0x67, 0xeb, 0xba, 0xc9, 0xa5, 0x62, 0x70, 0xcc, 0xdc, 0x85, 0xb3, 0xb6, 0xa6, 0x9b, 0x2c, + 0xa6, 0x72, 0xde, 0xfc, 0x0c, 0x4e, 0xdb, 0x3a, 0x85, 0xb2, 0xf1, 0x18, 0x9a, 0x3c, 0x77, 0xc0, + 0xc4, 0xad, 0x51, 0x28, 0x03, 0xa8, 0x18, 0x41, 0x5f, 0x66, 0xee, 0xcb, 0xcc, 0x7d, 0x99, 0xb9, + 0x2f, 0x33, 0xf7, 0x65, 0xe6, 0xbe, 0xcc, 0xdc, 0x97, 0x99, 0xfb, 0x32, 0x73, 0xc3, 0x99, 0xfb, + 0xcf, 0xb3, 0xe8, 0xc6, 0xd3, 0x61, 0x18, 0xbd, 0x60, 0x9e, 0x54, 0x3f, 0x60, 0x83, 0xb1, 0xf1, + 0xad, 0x8d, 0x1d, 0xee, 0x09, 0xf2, 0xb7, 0x99, 0xb4, 0x6a, 0x32, 0xce, 0x1d, 0xf6, 0xe1, 0xee, + 0xf7, 0xd1, 0xfc, 0x38, 0x1c, 0x15, 0x7f, 0x21, 0x23, 0x39, 0x6c, 0xb6, 0xc0, 0xf9, 0x2e, 0x9a, + 0x1b, 0x87, 0xa3, 0xa2, 0xaf, 0x60, 0x24, 0x07, 0x4e, 0xcb, 0xe9, 0xd2, 0xa2, 0x2f, 0x5d, 0xd0, + 0xa5, 0x24, 0xaa, 0x10, 0xce, 0xc5, 0x5f, 0xb3, 0xa0, 0x9c, 0x69, 0xd0, 0xc9, 0x0e, 0x5c, 0xe8, + 0xc5, 0x8a, 0xfc, 0xc0, 0xbe, 0xc7, 0x1c, 0xb8, 0xd8, 0xab, 0x14, 0xcc, 0x81, 0x7d, 0xcf, 0xd9, + 0x42, 0xd7, 0xc6, 0xe1, 0xa8, 0xd8, 0xcb, 0x13, 0x3b, 0x33, 0x9d, 0xb4, 0x98, 0x1e, 0xb5, 0xf8, + 0xeb, 0x12, 0xf4, 0xa8, 0x74, 0xd7, 0x4c, 0x4e, 0xb7, 0xe8, 0x0b, 0x12, 0xf4, 0x74, 0xf1, 0x07, + 0xc1, 0x0a, 0xd6, 0xe8, 0x53, 0xaa, 0xd1, 0x44, 0x6b, 0x6b, 0xff, 0x9d, 0x45, 0x4b, 0x58, 0xb7, + 0xd9, 0xb4, 0xe8, 0x03, 0x2b, 0xd5, 0x92, 0xb1, 0x10, 0xaf, 0xdd, 0xf7, 0x2c, 0xb4, 0x4b, 0xc6, + 0x35, 0x9c, 0x82, 0x03, 0x4b, 0x05, 0x93, 0x24, 0xc0, 0xeb, 0x78, 0xdb, 0x4a, 0xc7, 0x19, 0x42, + 0xae, 0xe6, 0x6d, 0x2b, 0x35, 0x73, 0x00, 0x44, 0x95, 0x81, 0xa5, 0xa6, 0xb9, 0xb3, 0xa0, 0xca, + 0xde, 0xb6, 0x52, 0xb6, 0x48, 0x02, 0xbf, 0x27, 0x67, 0xa7, 0x6f, 0x89, 0x04, 0xbe, 0x47, 0x8a, + 0xab, 0x3c, 0x5b, 0x9f, 0x69, 0x3d, 0xb0, 0xd4, 0x3a, 0xc7, 0x80, 0x2a, 0x7e, 0xdb, 0x4a, 0xf1, + 0x5c, 0x1b, 0x88, 0xee, 0x6f, 0x60, 0x8d, 0x3f, 0xc5, 0x1a, 0x4f, 0x54, 0x1a, 0xdc, 0xff, 0xf2, + 0xab, 0x7a, 0xe5, 0xe5, 0x57, 0xf5, 0xca, 0x1f, 0xcf, 0xea, 0x95, 0xbf, 0x9c, 0xd5, 0x2b, 0x7f, + 0x3d, 0xab, 0x57, 0xbe, 0x38, 0xab, 0x57, 0xfe, 0x76, 0x56, 0x9f, 0xf9, 0xf2, 0xac, 0x5e, 0x79, + 0x79, 0x56, 0x9f, 0xf9, 0xe5, 0x3f, 0xeb, 0x33, 0xfd, 0xab, 0xf8, 0x08, 0xfe, 0xff, 0x03, 0x00, + 0x00, 0xff, 0xff, 0x4f, 0x81, 0x1f, 0xa5, 0x79, 0x40, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/marshaler/types.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/marshaler/types.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/marshaler/types.proto 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/marshaler/types.proto 2018-11-22 20:53:45.000000000 +0000 @@ -73,15 +73,53 @@ option (gogoproto.compare) = true; google.protobuf.Timestamp nullableTimestamp = 1; google.protobuf.Duration nullableDuration = 2; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3; + google.protobuf.FloatValue nullableFloat = 4; + google.protobuf.Int64Value nullableInt64 = 5; + google.protobuf.UInt64Value nullableUInt64 = 6; + google.protobuf.Int32Value nullableInt32 = 7; + google.protobuf.UInt32Value nullableUInt32 = 8; + google.protobuf.BoolValue nullableBool = 9; + google.protobuf.StringValue nullableString = 10; + google.protobuf.BytesValue nullableBytes = 11; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message StdTypes { google.protobuf.Timestamp nullableTimestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration nullableDuration = 2 [(gogoproto.stdduration) = true]; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3 [(gogoproto.wktpointer) = true];; + google.protobuf.FloatValue nullableFloat = 4 [(gogoproto.wktpointer) = true];; + google.protobuf.Int64Value nullableInt64 = 5 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt64Value nullableUInt64 = 6 [(gogoproto.wktpointer) = true];; + google.protobuf.Int32Value nullableInt32 = 7 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt32Value nullableUInt32 = 8 [(gogoproto.wktpointer) = true];; + google.protobuf.BoolValue nullableBool = 9 [(gogoproto.wktpointer) = true];; + google.protobuf.StringValue nullableString = 10 [(gogoproto.wktpointer) = true];; + google.protobuf.BytesValue nullableBytes = 11 [(gogoproto.wktpointer) = true];; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message RepProtoTypes { @@ -90,6 +128,33 @@ repeated google.protobuf.Duration nullableDurations = 2; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message RepStdTypes { @@ -97,6 +162,33 @@ repeated google.protobuf.Duration nullableDurations = 2 [(gogoproto.stdduration) = true]; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message MapProtoTypes { @@ -105,6 +197,33 @@ map nullableDuration = 3; map duration = 4 [(gogoproto.nullable) = false]; + + map nullableDouble = 5; + map nonnullDouble = 6 [(gogoproto.nullable) = false]; + + map nullableFloat = 7; + map nonnullFloat = 8 [(gogoproto.nullable) = false]; + + map nullableInt64 = 9; + map nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + map nullableUInt64 = 11; + map nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + map nullableInt32 = 13; + map nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + map nullableUInt32 = 15; + map nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + map nullableBool = 17; + map nonnullBool = 18 [(gogoproto.nullable) = false]; + + map nullableString = 19; + map nonnullString = 20 [(gogoproto.nullable) = false]; + + map nullableBytes = 21; + map nonnullBytes = 22 [(gogoproto.nullable) = false]; } message MapStdTypes { @@ -113,12 +232,48 @@ map nullableDuration = 3 [(gogoproto.stdduration) = true]; map duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + map nullableDouble = 5 [(gogoproto.wktpointer) = true]; + map nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableFloat = 7 [(gogoproto.wktpointer) = true]; + map nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + map nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + map nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + map nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + map nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBool = 17 [(gogoproto.wktpointer) = true]; + map nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableString = 19 [(gogoproto.wktpointer) = true]; + map nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBytes = 21 [(gogoproto.wktpointer) = true]; + map nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message OneofProtoTypes { oneof OneOfProtoTimes { google.protobuf.Timestamp timestamp = 1; google.protobuf.Duration duration = 2; + google.protobuf.DoubleValue repDouble = 3; + google.protobuf.FloatValue repFloat = 4; + google.protobuf.Int64Value repInt64 = 5; + google.protobuf.UInt64Value repUInt64 = 6; + google.protobuf.Int32Value repInt32 = 7; + google.protobuf.UInt32Value repUInt32 = 8; + google.protobuf.BoolValue repBool = 9; + google.protobuf.StringValue repString = 10; + google.protobuf.BytesValue repBytes = 11; } } @@ -126,6 +281,15 @@ oneof OneOfStdTimes { google.protobuf.Timestamp timestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration duration = 2 [(gogoproto.stdduration) = true]; + google.protobuf.DoubleValue repDouble = 3 [(gogoproto.wktpointer) = true]; + google.protobuf.FloatValue repFloat = 4 [(gogoproto.wktpointer) = true]; + google.protobuf.Int64Value repInt64 = 5 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt64Value repUInt64 = 6 [(gogoproto.wktpointer) = true]; + google.protobuf.Int32Value repInt32 = 7 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt32Value repUInt32 = 8 [(gogoproto.wktpointer) = true]; + google.protobuf.BoolValue repBool = 9 [(gogoproto.wktpointer) = true]; + google.protobuf.StringValue repString = 10 [(gogoproto.wktpointer) = true]; + google.protobuf.BytesValue repBytes = 11 [(gogoproto.wktpointer) = true]; } } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/neither/types.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/neither/types.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/neither/types.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/neither/types.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -47,7 +47,7 @@ func (m *KnownTypes) String() string { return proto.CompactTextString(m) } func (*KnownTypes) ProtoMessage() {} func (*KnownTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{0} + return fileDescriptor_types_a6ccc2435d23b615, []int{0} } func (m *KnownTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KnownTypes.Unmarshal(m, b) @@ -145,20 +145,38 @@ } type ProtoTypes struct { - NullableTimestamp *types.Timestamp `protobuf:"bytes,1,opt,name=nullableTimestamp" json:"nullableTimestamp,omitempty"` - NullableDuration *types.Duration `protobuf:"bytes,2,opt,name=nullableDuration" json:"nullableDuration,omitempty"` - Timestamp types.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp"` - Duration types.Duration `protobuf:"bytes,4,opt,name=duration" json:"duration"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableTimestamp *types.Timestamp `protobuf:"bytes,1,opt,name=nullableTimestamp" json:"nullableTimestamp,omitempty"` + NullableDuration *types.Duration `protobuf:"bytes,2,opt,name=nullableDuration" json:"nullableDuration,omitempty"` + NullableDouble *types.DoubleValue `protobuf:"bytes,3,opt,name=nullableDouble" json:"nullableDouble,omitempty"` + NullableFloat *types.FloatValue `protobuf:"bytes,4,opt,name=nullableFloat" json:"nullableFloat,omitempty"` + NullableInt64 *types.Int64Value `protobuf:"bytes,5,opt,name=nullableInt64" json:"nullableInt64,omitempty"` + NullableUInt64 *types.UInt64Value `protobuf:"bytes,6,opt,name=nullableUInt64" json:"nullableUInt64,omitempty"` + NullableInt32 *types.Int32Value `protobuf:"bytes,7,opt,name=nullableInt32" json:"nullableInt32,omitempty"` + NullableUInt32 *types.UInt32Value `protobuf:"bytes,8,opt,name=nullableUInt32" json:"nullableUInt32,omitempty"` + NullableBool *types.BoolValue `protobuf:"bytes,9,opt,name=nullableBool" json:"nullableBool,omitempty"` + NullableString *types.StringValue `protobuf:"bytes,10,opt,name=nullableString" json:"nullableString,omitempty"` + NullableBytes *types.BytesValue `protobuf:"bytes,11,opt,name=nullableBytes" json:"nullableBytes,omitempty"` + Timestamp types.Timestamp `protobuf:"bytes,12,opt,name=timestamp" json:"timestamp"` + Duration types.Duration `protobuf:"bytes,13,opt,name=duration" json:"duration"` + NonnullDouble types.DoubleValue `protobuf:"bytes,14,opt,name=nonnullDouble" json:"nonnullDouble"` + NonnullFloat types.FloatValue `protobuf:"bytes,15,opt,name=nonnullFloat" json:"nonnullFloat"` + NonnullInt64 types.Int64Value `protobuf:"bytes,16,opt,name=nonnullInt64" json:"nonnullInt64"` + NonnullUInt64 types.UInt64Value `protobuf:"bytes,17,opt,name=nonnullUInt64" json:"nonnullUInt64"` + NonnullInt32 types.Int32Value `protobuf:"bytes,18,opt,name=nonnullInt32" json:"nonnullInt32"` + NonnullUInt32 types.UInt32Value `protobuf:"bytes,19,opt,name=nonnullUInt32" json:"nonnullUInt32"` + NonnullBool types.BoolValue `protobuf:"bytes,20,opt,name=nonnullBool" json:"nonnullBool"` + NonnullString types.StringValue `protobuf:"bytes,21,opt,name=nonnullString" json:"nonnullString"` + NonnullBytes types.BytesValue `protobuf:"bytes,22,opt,name=nonnullBytes" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProtoTypes) Reset() { *m = ProtoTypes{} } func (m *ProtoTypes) String() string { return proto.CompactTextString(m) } func (*ProtoTypes) ProtoMessage() {} func (*ProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{1} + return fileDescriptor_types_a6ccc2435d23b615, []int{1} } func (m *ProtoTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProtoTypes.Unmarshal(m, b) @@ -192,6 +210,69 @@ return nil } +func (m *ProtoTypes) GetNullableDouble() *types.DoubleValue { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *ProtoTypes) GetNullableFloat() *types.FloatValue { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *ProtoTypes) GetNullableInt64() *types.Int64Value { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *ProtoTypes) GetNullableUInt64() *types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *ProtoTypes) GetNullableInt32() *types.Int32Value { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *ProtoTypes) GetNullableUInt32() *types.UInt32Value { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *ProtoTypes) GetNullableBool() *types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *ProtoTypes) GetNullableString() *types.StringValue { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *ProtoTypes) GetNullableBytes() *types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + func (m *ProtoTypes) GetTimestamp() types.Timestamp { if m != nil { return m.Timestamp @@ -206,11 +287,92 @@ return types.Duration{} } +func (m *ProtoTypes) GetNonnullDouble() types.DoubleValue { + if m != nil { + return m.NonnullDouble + } + return types.DoubleValue{} +} + +func (m *ProtoTypes) GetNonnullFloat() types.FloatValue { + if m != nil { + return m.NonnullFloat + } + return types.FloatValue{} +} + +func (m *ProtoTypes) GetNonnullInt64() types.Int64Value { + if m != nil { + return m.NonnullInt64 + } + return types.Int64Value{} +} + +func (m *ProtoTypes) GetNonnullUInt64() types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return types.UInt64Value{} +} + +func (m *ProtoTypes) GetNonnullInt32() types.Int32Value { + if m != nil { + return m.NonnullInt32 + } + return types.Int32Value{} +} + +func (m *ProtoTypes) GetNonnullUInt32() types.UInt32Value { + if m != nil { + return m.NonnullUInt32 + } + return types.UInt32Value{} +} + +func (m *ProtoTypes) GetNonnullBool() types.BoolValue { + if m != nil { + return m.NonnullBool + } + return types.BoolValue{} +} + +func (m *ProtoTypes) GetNonnullString() types.StringValue { + if m != nil { + return m.NonnullString + } + return types.StringValue{} +} + +func (m *ProtoTypes) GetNonnullBytes() types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return types.BytesValue{} +} + type StdTypes struct { NullableTimestamp *time.Time `protobuf:"bytes,1,opt,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty"` NullableDuration *time.Duration `protobuf:"bytes,2,opt,name=nullableDuration,stdduration" json:"nullableDuration,omitempty"` - Timestamp time.Time `protobuf:"bytes,3,opt,name=timestamp,stdtime" json:"timestamp"` - Duration time.Duration `protobuf:"bytes,4,opt,name=duration,stdduration" json:"duration"` + NullableDouble *float64 `protobuf:"bytes,3,opt,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NullableFloat *float32 `protobuf:"bytes,4,opt,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NullableInt64 *int64 `protobuf:"bytes,5,opt,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NullableUInt64 *uint64 `protobuf:"bytes,6,opt,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NullableInt32 *int32 `protobuf:"bytes,7,opt,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NullableUInt32 *uint32 `protobuf:"bytes,8,opt,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NullableBool *bool `protobuf:"bytes,9,opt,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NullableString *string `protobuf:"bytes,10,opt,name=nullableString,wktptr" json:"nullableString,omitempty"` + NullableBytes *[]byte `protobuf:"bytes,11,opt,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + Timestamp time.Time `protobuf:"bytes,12,opt,name=timestamp,stdtime" json:"timestamp"` + Duration time.Duration `protobuf:"bytes,13,opt,name=duration,stdduration" json:"duration"` + NonnullDouble float64 `protobuf:"bytes,14,opt,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NonnullFloat float32 `protobuf:"bytes,15,opt,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NonnullInt64 int64 `protobuf:"bytes,16,opt,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NonnullUInt64 uint64 `protobuf:"bytes,17,opt,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NonnullInt32 int32 `protobuf:"bytes,18,opt,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NonnullUInt32 uint32 `protobuf:"bytes,19,opt,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NonnullBool bool `protobuf:"bytes,20,opt,name=nonnullBool,wktptr" json:"nonnullBool"` + NonnullString string `protobuf:"bytes,21,opt,name=nonnullString,wktptr" json:"nonnullString"` + NonnullBytes []byte `protobuf:"bytes,22,opt,name=nonnullBytes,wktptr" json:"nonnullBytes"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -220,7 +382,7 @@ func (m *StdTypes) String() string { return proto.CompactTextString(m) } func (*StdTypes) ProtoMessage() {} func (*StdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{2} + return fileDescriptor_types_a6ccc2435d23b615, []int{2} } func (m *StdTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StdTypes.Unmarshal(m, b) @@ -254,6 +416,69 @@ return nil } +func (m *StdTypes) GetNullableDouble() *float64 { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *StdTypes) GetNullableFloat() *float32 { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *StdTypes) GetNullableInt64() *int64 { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *StdTypes) GetNullableUInt64() *uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *StdTypes) GetNullableInt32() *int32 { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *StdTypes) GetNullableUInt32() *uint32 { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *StdTypes) GetNullableBool() *bool { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *StdTypes) GetNullableString() *string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *StdTypes) GetNullableBytes() *[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + func (m *StdTypes) GetTimestamp() time.Time { if m != nil { return m.Timestamp @@ -268,21 +493,102 @@ return 0 } +func (m *StdTypes) GetNonnullDouble() float64 { + if m != nil { + return m.NonnullDouble + } + return 0 +} + +func (m *StdTypes) GetNonnullFloat() float32 { + if m != nil { + return m.NonnullFloat + } + return 0 +} + +func (m *StdTypes) GetNonnullInt64() int64 { + if m != nil { + return m.NonnullInt64 + } + return 0 +} + +func (m *StdTypes) GetNonnullUInt64() uint64 { + if m != nil { + return m.NonnullUInt64 + } + return 0 +} + +func (m *StdTypes) GetNonnullInt32() int32 { + if m != nil { + return m.NonnullInt32 + } + return 0 +} + +func (m *StdTypes) GetNonnullUInt32() uint32 { + if m != nil { + return m.NonnullUInt32 + } + return 0 +} + +func (m *StdTypes) GetNonnullBool() bool { + if m != nil { + return m.NonnullBool + } + return false +} + +func (m *StdTypes) GetNonnullString() string { + if m != nil { + return m.NonnullString + } + return "" +} + +func (m *StdTypes) GetNonnullBytes() []byte { + if m != nil { + return m.NonnullBytes + } + return []byte{} +} + type RepProtoTypes struct { - NullableTimestamps []*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamps" json:"nullableTimestamps,omitempty"` - NullableDurations []*types.Duration `protobuf:"bytes,2,rep,name=nullableDurations" json:"nullableDurations,omitempty"` - Timestamps []types.Timestamp `protobuf:"bytes,3,rep,name=timestamps" json:"timestamps"` - Durations []types.Duration `protobuf:"bytes,4,rep,name=durations" json:"durations"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableTimestamps []*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamps" json:"nullableTimestamps,omitempty"` + NullableDurations []*types.Duration `protobuf:"bytes,2,rep,name=nullableDurations" json:"nullableDurations,omitempty"` + Timestamps []types.Timestamp `protobuf:"bytes,3,rep,name=timestamps" json:"timestamps"` + Durations []types.Duration `protobuf:"bytes,4,rep,name=durations" json:"durations"` + NullableDouble []*types.DoubleValue `protobuf:"bytes,5,rep,name=nullableDouble" json:"nullableDouble,omitempty"` + NonnullDouble []types.DoubleValue `protobuf:"bytes,6,rep,name=nonnullDouble" json:"nonnullDouble"` + NullableFloat []*types.FloatValue `protobuf:"bytes,7,rep,name=nullableFloat" json:"nullableFloat,omitempty"` + NonnullFloat []types.FloatValue `protobuf:"bytes,8,rep,name=nonnullFloat" json:"nonnullFloat"` + NullableInt64 []*types.Int64Value `protobuf:"bytes,9,rep,name=nullableInt64" json:"nullableInt64,omitempty"` + NonnullInt64 []types.Int64Value `protobuf:"bytes,10,rep,name=nonnullInt64" json:"nonnullInt64"` + NullableUInt64 []*types.UInt64Value `protobuf:"bytes,11,rep,name=nullableUInt64" json:"nullableUInt64,omitempty"` + NonnullUInt64 []types.UInt64Value `protobuf:"bytes,12,rep,name=nonnullUInt64" json:"nonnullUInt64"` + NullableInt32 []*types.Int32Value `protobuf:"bytes,13,rep,name=nullableInt32" json:"nullableInt32,omitempty"` + NonnullInt32 []types.Int32Value `protobuf:"bytes,14,rep,name=nonnullInt32" json:"nonnullInt32"` + NullableUInt32 []*types.UInt32Value `protobuf:"bytes,15,rep,name=nullableUInt32" json:"nullableUInt32,omitempty"` + NonnullUInt32 []types.UInt32Value `protobuf:"bytes,16,rep,name=nonnullUInt32" json:"nonnullUInt32"` + NullableBool []*types.BoolValue `protobuf:"bytes,17,rep,name=nullableBool" json:"nullableBool,omitempty"` + NonnullBool []types.BoolValue `protobuf:"bytes,18,rep,name=nonnullBool" json:"nonnullBool"` + NullableString []*types.StringValue `protobuf:"bytes,19,rep,name=nullableString" json:"nullableString,omitempty"` + NonnullString []types.StringValue `protobuf:"bytes,20,rep,name=nonnullString" json:"nonnullString"` + NullableBytes []*types.BytesValue `protobuf:"bytes,21,rep,name=nullableBytes" json:"nullableBytes,omitempty"` + NonnullBytes []types.BytesValue `protobuf:"bytes,22,rep,name=nonnullBytes" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RepProtoTypes) Reset() { *m = RepProtoTypes{} } func (m *RepProtoTypes) String() string { return proto.CompactTextString(m) } func (*RepProtoTypes) ProtoMessage() {} func (*RepProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{3} + return fileDescriptor_types_a6ccc2435d23b615, []int{3} } func (m *RepProtoTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepProtoTypes.Unmarshal(m, b) @@ -330,773 +636,5868 @@ return nil } -type RepStdTypes struct { - NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` - NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` - Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` - Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableDouble() []*types.DoubleValue { + if m != nil { + return m.NullableDouble + } + return nil } -func (m *RepStdTypes) Reset() { *m = RepStdTypes{} } -func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } -func (*RepStdTypes) ProtoMessage() {} -func (*RepStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{4} -} -func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RepStdTypes.Unmarshal(m, b) -} -func (m *RepStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RepStdTypes.Marshal(b, m, deterministic) -} -func (dst *RepStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepStdTypes.Merge(dst, src) -} -func (m *RepStdTypes) XXX_Size() int { - return xxx_messageInfo_RepStdTypes.Size(m) -} -func (m *RepStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_RepStdTypes.DiscardUnknown(m) +func (m *RepProtoTypes) GetNonnullDouble() []types.DoubleValue { + if m != nil { + return m.NonnullDouble + } + return nil } -var xxx_messageInfo_RepStdTypes proto.InternalMessageInfo - -func (m *RepStdTypes) GetNullableTimestamps() []*time.Time { +func (m *RepProtoTypes) GetNullableFloat() []*types.FloatValue { if m != nil { - return m.NullableTimestamps + return m.NullableFloat } return nil } -func (m *RepStdTypes) GetNullableDurations() []*time.Duration { +func (m *RepProtoTypes) GetNonnullFloat() []types.FloatValue { if m != nil { - return m.NullableDurations + return m.NonnullFloat } return nil } -func (m *RepStdTypes) GetTimestamps() []time.Time { +func (m *RepProtoTypes) GetNullableInt64() []*types.Int64Value { if m != nil { - return m.Timestamps + return m.NullableInt64 } return nil } -func (m *RepStdTypes) GetDurations() []time.Duration { +func (m *RepProtoTypes) GetNonnullInt64() []types.Int64Value { if m != nil { - return m.Durations + return m.NonnullInt64 } return nil } -type MapProtoTypes struct { - NullableTimestamp map[int32]*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamp" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Timestamp map[int32]types.Timestamp `protobuf:"bytes,2,rep,name=timestamp" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - NullableDuration map[int32]*types.Duration `protobuf:"bytes,3,rep,name=nullableDuration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Duration map[int32]types.Duration `protobuf:"bytes,4,rep,name=duration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableUInt64() []*types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil } -func (m *MapProtoTypes) Reset() { *m = MapProtoTypes{} } -func (m *MapProtoTypes) String() string { return proto.CompactTextString(m) } -func (*MapProtoTypes) ProtoMessage() {} -func (*MapProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{5} -} -func (m *MapProtoTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MapProtoTypes.Unmarshal(m, b) -} -func (m *MapProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MapProtoTypes.Marshal(b, m, deterministic) -} -func (dst *MapProtoTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MapProtoTypes.Merge(dst, src) -} -func (m *MapProtoTypes) XXX_Size() int { - return xxx_messageInfo_MapProtoTypes.Size(m) -} -func (m *MapProtoTypes) XXX_DiscardUnknown() { - xxx_messageInfo_MapProtoTypes.DiscardUnknown(m) +func (m *RepProtoTypes) GetNonnullUInt64() []types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return nil } -var xxx_messageInfo_MapProtoTypes proto.InternalMessageInfo - -func (m *MapProtoTypes) GetNullableTimestamp() map[int32]*types.Timestamp { +func (m *RepProtoTypes) GetNullableInt32() []*types.Int32Value { if m != nil { - return m.NullableTimestamp + return m.NullableInt32 } return nil } -func (m *MapProtoTypes) GetTimestamp() map[int32]types.Timestamp { +func (m *RepProtoTypes) GetNonnullInt32() []types.Int32Value { if m != nil { - return m.Timestamp + return m.NonnullInt32 } return nil } -func (m *MapProtoTypes) GetNullableDuration() map[int32]*types.Duration { +func (m *RepProtoTypes) GetNullableUInt32() []*types.UInt32Value { if m != nil { - return m.NullableDuration + return m.NullableUInt32 } return nil } -func (m *MapProtoTypes) GetDuration() map[int32]types.Duration { +func (m *RepProtoTypes) GetNonnullUInt32() []types.UInt32Value { if m != nil { - return m.Duration + return m.NonnullUInt32 } return nil } -type MapStdTypes struct { - NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableBool() []*types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil } -func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } -func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } -func (*MapStdTypes) ProtoMessage() {} -func (*MapStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{6} -} -func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MapStdTypes.Unmarshal(m, b) -} -func (m *MapStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MapStdTypes.Marshal(b, m, deterministic) -} -func (dst *MapStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MapStdTypes.Merge(dst, src) -} -func (m *MapStdTypes) XXX_Size() int { - return xxx_messageInfo_MapStdTypes.Size(m) -} -func (m *MapStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_MapStdTypes.DiscardUnknown(m) +func (m *RepProtoTypes) GetNonnullBool() []types.BoolValue { + if m != nil { + return m.NonnullBool + } + return nil } -var xxx_messageInfo_MapStdTypes proto.InternalMessageInfo - -func (m *MapStdTypes) GetNullableTimestamp() map[int32]*time.Time { +func (m *RepProtoTypes) GetNullableString() []*types.StringValue { if m != nil { - return m.NullableTimestamp + return m.NullableString } return nil } -func (m *MapStdTypes) GetTimestamp() map[int32]time.Time { +func (m *RepProtoTypes) GetNonnullString() []types.StringValue { if m != nil { - return m.Timestamp + return m.NonnullString } return nil } -func (m *MapStdTypes) GetNullableDuration() map[int32]*time.Duration { +func (m *RepProtoTypes) GetNullableBytes() []*types.BytesValue { if m != nil { - return m.NullableDuration + return m.NullableBytes } return nil } -func (m *MapStdTypes) GetDuration() map[int32]time.Duration { +func (m *RepProtoTypes) GetNonnullBytes() []types.BytesValue { if m != nil { - return m.Duration + return m.NonnullBytes } return nil } -type OneofProtoTypes struct { - // Types that are valid to be assigned to OneOfProtoTimes: - // *OneofProtoTypes_Timestamp - // *OneofProtoTypes_Duration - OneOfProtoTimes isOneofProtoTypes_OneOfProtoTimes `protobuf_oneof:"OneOfProtoTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type RepStdTypes struct { + NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` + NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` + Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` + Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` + NullableDouble []*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NonnullDouble []float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NullableFloat []*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NonnullFloat []float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NullableInt64 []*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NonnullInt64 []int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NullableUInt64 []*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NonnullUInt64 []uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NullableInt32 []*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NonnullInt32 []int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NullableUInt32 []*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NonnullUInt32 []uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NullableBool []*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NonnullBool []bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool"` + NullableString []*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty"` + NonnullString []string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString"` + NullableBytes []*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + NonnullBytes [][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *OneofProtoTypes) Reset() { *m = OneofProtoTypes{} } -func (m *OneofProtoTypes) String() string { return proto.CompactTextString(m) } -func (*OneofProtoTypes) ProtoMessage() {} -func (*OneofProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{7} -} -func (m *OneofProtoTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OneofProtoTypes.Unmarshal(m, b) -} -func (m *OneofProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OneofProtoTypes.Marshal(b, m, deterministic) -} -func (dst *OneofProtoTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofProtoTypes.Merge(dst, src) +func (m *RepStdTypes) Reset() { *m = RepStdTypes{} } +func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } +func (*RepStdTypes) ProtoMessage() {} +func (*RepStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_a6ccc2435d23b615, []int{4} } -func (m *OneofProtoTypes) XXX_Size() int { - return xxx_messageInfo_OneofProtoTypes.Size(m) +func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RepStdTypes.Unmarshal(m, b) } -func (m *OneofProtoTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofProtoTypes.DiscardUnknown(m) +func (m *RepStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RepStdTypes.Marshal(b, m, deterministic) } - -var xxx_messageInfo_OneofProtoTypes proto.InternalMessageInfo - -type isOneofProtoTypes_OneOfProtoTimes interface { - isOneofProtoTypes_OneOfProtoTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - Size() int +func (dst *RepStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepStdTypes.Merge(dst, src) } - -type OneofProtoTypes_Timestamp struct { - Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,oneof"` +func (m *RepStdTypes) XXX_Size() int { + return xxx_messageInfo_RepStdTypes.Size(m) } -type OneofProtoTypes_Duration struct { - Duration *types.Duration `protobuf:"bytes,2,opt,name=duration,oneof"` +func (m *RepStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_RepStdTypes.DiscardUnknown(m) } -func (*OneofProtoTypes_Timestamp) isOneofProtoTypes_OneOfProtoTimes() {} -func (*OneofProtoTypes_Duration) isOneofProtoTypes_OneOfProtoTimes() {} +var xxx_messageInfo_RepStdTypes proto.InternalMessageInfo -func (m *OneofProtoTypes) GetOneOfProtoTimes() isOneofProtoTypes_OneOfProtoTimes { +func (m *RepStdTypes) GetNullableTimestamps() []*time.Time { if m != nil { - return m.OneOfProtoTimes + return m.NullableTimestamps } return nil } -func (m *OneofProtoTypes) GetTimestamp() *types.Timestamp { - if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Timestamp); ok { - return x.Timestamp +func (m *RepStdTypes) GetNullableDurations() []*time.Duration { + if m != nil { + return m.NullableDurations } return nil } -func (m *OneofProtoTypes) GetDuration() *types.Duration { - if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Duration); ok { - return x.Duration +func (m *RepStdTypes) GetTimestamps() []time.Time { + if m != nil { + return m.Timestamps } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofProtoTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofProtoTypes_OneofMarshaler, _OneofProtoTypes_OneofUnmarshaler, _OneofProtoTypes_OneofSizer, []interface{}{ - (*OneofProtoTypes_Timestamp)(nil), - (*OneofProtoTypes_Duration)(nil), +func (m *RepStdTypes) GetDurations() []time.Duration { + if m != nil { + return m.Durations } + return nil } -func _OneofProtoTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofProtoTypes) - // OneOfProtoTimes - switch x := m.OneOfProtoTimes.(type) { - case *OneofProtoTypes_Timestamp: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Timestamp); err != nil { - return err - } - case *OneofProtoTypes_Duration: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Duration); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("OneofProtoTypes.OneOfProtoTimes has unexpected type %T", x) +func (m *RepStdTypes) GetNullableDouble() []*float64 { + if m != nil { + return m.NullableDouble } return nil } -func _OneofProtoTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofProtoTypes) - switch tag { - case 1: // OneOfProtoTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Timestamp) - err := b.DecodeMessage(msg) - m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{msg} - return true, err - case 2: // OneOfProtoTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Duration) - err := b.DecodeMessage(msg) - m.OneOfProtoTimes = &OneofProtoTypes_Duration{msg} - return true, err - default: - return false, nil +func (m *RepStdTypes) GetNonnullDouble() []float64 { + if m != nil { + return m.NonnullDouble } + return nil } -func _OneofProtoTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofProtoTypes) - // OneOfProtoTimes - switch x := m.OneOfProtoTimes.(type) { - case *OneofProtoTypes_Timestamp: - s := proto.Size(x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofProtoTypes_Duration: - s := proto.Size(x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *RepStdTypes) GetNullableFloat() []*float32 { + if m != nil { + return m.NullableFloat } - return n + return nil } -type OneofStdTypes struct { - // Types that are valid to be assigned to OneOfStdTimes: - // *OneofStdTypes_Timestamp - // *OneofStdTypes_Duration - OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepStdTypes) GetNonnullFloat() []float32 { + if m != nil { + return m.NonnullFloat + } + return nil } -func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } -func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } -func (*OneofStdTypes) ProtoMessage() {} -func (*OneofStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_c5bf548d49a2d5e3, []int{8} -} -func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OneofStdTypes.Unmarshal(m, b) -} -func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) -} -func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofStdTypes.Merge(dst, src) -} -func (m *OneofStdTypes) XXX_Size() int { - return xxx_messageInfo_OneofStdTypes.Size(m) -} -func (m *OneofStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +func (m *RepStdTypes) GetNullableInt64() []*int64 { + if m != nil { + return m.NullableInt64 + } + return nil } -var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo - -type isOneofStdTypes_OneOfStdTimes interface { - isOneofStdTypes_OneOfStdTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - Size() int +func (m *RepStdTypes) GetNonnullInt64() []int64 { + if m != nil { + return m.NonnullInt64 + } + return nil } -type OneofStdTypes_Timestamp struct { - Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` -} -type OneofStdTypes_Duration struct { - Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` +func (m *RepStdTypes) GetNullableUInt64() []*uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil } -func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} -func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} - -func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { +func (m *RepStdTypes) GetNonnullUInt64() []uint64 { if m != nil { - return m.OneOfStdTimes + return m.NonnullUInt64 } return nil } -func (m *OneofStdTypes) GetTimestamp() *time.Time { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { - return x.Timestamp +func (m *RepStdTypes) GetNullableInt32() []*int32 { + if m != nil { + return m.NullableInt32 } return nil } -func (m *OneofStdTypes) GetDuration() *time.Duration { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { - return x.Duration +func (m *RepStdTypes) GetNonnullInt32() []int32 { + if m != nil { + return m.NonnullInt32 } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ - (*OneofStdTypes_Timestamp)(nil), - (*OneofStdTypes_Duration)(nil), +func (m *RepStdTypes) GetNullableUInt32() []*uint32 { + if m != nil { + return m.NullableUInt32 } + return nil } -func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - dAtA, err := github_com_gogo_protobuf_types.StdTimeMarshal(*x.Timestamp) - if err != nil { - return err - } - if err := b.EncodeRawBytes(dAtA); err != nil { - return err - } - case *OneofStdTypes_Duration: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - dAtA, err := github_com_gogo_protobuf_types.StdDurationMarshal(*x.Duration) - if err != nil { - return err - } - if err := b.EncodeRawBytes(dAtA); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) +func (m *RepStdTypes) GetNonnullUInt32() []uint32 { + if m != nil { + return m.NonnullUInt32 } return nil } -func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofStdTypes) - switch tag { - case 1: // OneOfStdTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err - } - c := new(time.Time) - if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { - return true, err - } - m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} - return true, err - case 2: // OneOfStdTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err - } - c := new(time.Duration) - if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { - return true, err - } - m.OneOfStdTimes = &OneofStdTypes_Duration{c} - return true, err - default: - return false, nil +func (m *RepStdTypes) GetNullableBool() []*bool { + if m != nil { + return m.NullableBool } + return nil } -func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofStdTypes_Duration: - s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *RepStdTypes) GetNonnullBool() []bool { + if m != nil { + return m.NonnullBool } - return n + return nil } -func init() { - proto.RegisterType((*KnownTypes)(nil), "types.KnownTypes") - proto.RegisterType((*ProtoTypes)(nil), "types.ProtoTypes") - proto.RegisterType((*StdTypes)(nil), "types.StdTypes") - proto.RegisterType((*RepProtoTypes)(nil), "types.RepProtoTypes") - proto.RegisterType((*RepStdTypes)(nil), "types.RepStdTypes") - proto.RegisterType((*MapProtoTypes)(nil), "types.MapProtoTypes") - proto.RegisterMapType((map[int32]types.Duration)(nil), "types.MapProtoTypes.DurationEntry") - proto.RegisterMapType((map[int32]*types.Duration)(nil), "types.MapProtoTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*types.Timestamp)(nil), "types.MapProtoTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]types.Timestamp)(nil), "types.MapProtoTypes.TimestampEntry") - proto.RegisterType((*MapStdTypes)(nil), "types.MapStdTypes") - proto.RegisterMapType((map[int32]time.Duration)(nil), "types.MapStdTypes.DurationEntry") - proto.RegisterMapType((map[int32]*time.Duration)(nil), "types.MapStdTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*time.Time)(nil), "types.MapStdTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]time.Time)(nil), "types.MapStdTypes.TimestampEntry") - proto.RegisterType((*OneofProtoTypes)(nil), "types.OneofProtoTypes") - proto.RegisterType((*OneofStdTypes)(nil), "types.OneofStdTypes") -} -func (this *KnownTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 +func (m *RepStdTypes) GetNullableString() []*string { + if m != nil { + return m.NullableString } + return nil +} - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return 1 - } +func (m *RepStdTypes) GetNonnullString() []string { + if m != nil { + return m.NonnullString } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 + return nil +} + +func (m *RepStdTypes) GetNullableBytes() []*[]byte { + if m != nil { + return m.NullableBytes } - if c := this.Dur.Compare(that1.Dur); c != 0 { - return c + return nil +} + +func (m *RepStdTypes) GetNonnullBytes() [][]byte { + if m != nil { + return m.NonnullBytes } - if c := this.Ts.Compare(that1.Ts); c != 0 { - return c + return nil +} + +type MapProtoTypes struct { + NullableTimestamp map[int32]*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamp" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Timestamp map[int32]types.Timestamp `protobuf:"bytes,2,rep,name=timestamp" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDuration map[int32]*types.Duration `protobuf:"bytes,3,rep,name=nullableDuration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Duration map[int32]types.Duration `protobuf:"bytes,4,rep,name=duration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*types.DoubleValue `protobuf:"bytes,5,rep,name=nullableDouble" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]types.DoubleValue `protobuf:"bytes,6,rep,name=nonnullDouble" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*types.FloatValue `protobuf:"bytes,7,rep,name=nullableFloat" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]types.FloatValue `protobuf:"bytes,8,rep,name=nonnullFloat" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*types.Int64Value `protobuf:"bytes,9,rep,name=nullableInt64" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]types.Int64Value `protobuf:"bytes,10,rep,name=nonnullInt64" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*types.UInt64Value `protobuf:"bytes,11,rep,name=nullableUInt64" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]types.UInt64Value `protobuf:"bytes,12,rep,name=nonnullUInt64" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*types.Int32Value `protobuf:"bytes,13,rep,name=nullableInt32" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]types.Int32Value `protobuf:"bytes,14,rep,name=nonnullInt32" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*types.UInt32Value `protobuf:"bytes,15,rep,name=nullableUInt32" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]types.UInt32Value `protobuf:"bytes,16,rep,name=nonnullUInt32" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*types.BoolValue `protobuf:"bytes,17,rep,name=nullableBool" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]types.BoolValue `protobuf:"bytes,18,rep,name=nonnullBool" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*types.StringValue `protobuf:"bytes,19,rep,name=nullableString" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]types.StringValue `protobuf:"bytes,20,rep,name=nonnullString" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*types.BytesValue `protobuf:"bytes,21,rep,name=nullableBytes" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32]types.BytesValue `protobuf:"bytes,22,rep,name=nonnullBytes" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MapProtoTypes) Reset() { *m = MapProtoTypes{} } +func (m *MapProtoTypes) String() string { return proto.CompactTextString(m) } +func (*MapProtoTypes) ProtoMessage() {} +func (*MapProtoTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_a6ccc2435d23b615, []int{5} +} +func (m *MapProtoTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MapProtoTypes.Unmarshal(m, b) +} +func (m *MapProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MapProtoTypes.Marshal(b, m, deterministic) +} +func (dst *MapProtoTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MapProtoTypes.Merge(dst, src) +} +func (m *MapProtoTypes) XXX_Size() int { + return xxx_messageInfo_MapProtoTypes.Size(m) +} +func (m *MapProtoTypes) XXX_DiscardUnknown() { + xxx_messageInfo_MapProtoTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_MapProtoTypes proto.InternalMessageInfo + +func (m *MapProtoTypes) GetNullableTimestamp() map[int32]*types.Timestamp { + if m != nil { + return m.NullableTimestamp } - if c := this.Dbl.Compare(that1.Dbl); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetTimestamp() map[int32]types.Timestamp { + if m != nil { + return m.Timestamp } - if c := this.Flt.Compare(that1.Flt); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableDuration() map[int32]*types.Duration { + if m != nil { + return m.NullableDuration } - if c := this.I64.Compare(that1.I64); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetDuration() map[int32]types.Duration { + if m != nil { + return m.Duration } - if c := this.U64.Compare(that1.U64); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableDouble() map[int32]*types.DoubleValue { + if m != nil { + return m.NullableDouble } - if c := this.I32.Compare(that1.I32); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullDouble() map[int32]types.DoubleValue { + if m != nil { + return m.NonnullDouble } - if c := this.U32.Compare(that1.U32); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableFloat() map[int32]*types.FloatValue { + if m != nil { + return m.NullableFloat } - if c := this.Bool.Compare(that1.Bool); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullFloat() map[int32]types.FloatValue { + if m != nil { + return m.NonnullFloat } - if c := this.Str.Compare(that1.Str); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableInt64() map[int32]*types.Int64Value { + if m != nil { + return m.NullableInt64 } - if c := this.Bytes.Compare(that1.Bytes); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullInt64() map[int32]types.Int64Value { + if m != nil { + return m.NonnullInt64 } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableUInt64() map[int32]*types.UInt64Value { + if m != nil { + return m.NullableUInt64 } - return 0 + return nil } -func (this *ProtoTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 + +func (m *MapProtoTypes) GetNonnullUInt64() map[int32]types.UInt64Value { + if m != nil { + return m.NonnullUInt64 } + return nil +} - that1, ok := that.(*ProtoTypes) - if !ok { +func (m *MapProtoTypes) GetNullableInt32() map[int32]*types.Int32Value { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNonnullInt32() map[int32]types.Int32Value { + if m != nil { + return m.NonnullInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNullableUInt32() map[int32]*types.UInt32Value { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNonnullUInt32() map[int32]types.UInt32Value { + if m != nil { + return m.NonnullUInt32 + } + return nil +} + +func (m *MapProtoTypes) GetNullableBool() map[int32]*types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *MapProtoTypes) GetNonnullBool() map[int32]types.BoolValue { + if m != nil { + return m.NonnullBool + } + return nil +} + +func (m *MapProtoTypes) GetNullableString() map[int32]*types.StringValue { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *MapProtoTypes) GetNonnullString() map[int32]types.StringValue { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *MapProtoTypes) GetNullableBytes() map[int32]*types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *MapProtoTypes) GetNonnullBytes() map[int32]types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type MapStdTypes struct { + NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } +func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } +func (*MapStdTypes) ProtoMessage() {} +func (*MapStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_a6ccc2435d23b615, []int{6} +} +func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MapStdTypes.Unmarshal(m, b) +} +func (m *MapStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MapStdTypes.Marshal(b, m, deterministic) +} +func (dst *MapStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MapStdTypes.Merge(dst, src) +} +func (m *MapStdTypes) XXX_Size() int { + return xxx_messageInfo_MapStdTypes.Size(m) +} +func (m *MapStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_MapStdTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_MapStdTypes proto.InternalMessageInfo + +func (m *MapStdTypes) GetNullableTimestamp() map[int32]*time.Time { + if m != nil { + return m.NullableTimestamp + } + return nil +} + +func (m *MapStdTypes) GetTimestamp() map[int32]time.Time { + if m != nil { + return m.Timestamp + } + return nil +} + +func (m *MapStdTypes) GetNullableDuration() map[int32]*time.Duration { + if m != nil { + return m.NullableDuration + } + return nil +} + +func (m *MapStdTypes) GetDuration() map[int32]time.Duration { + if m != nil { + return m.Duration + } + return nil +} + +func (m *MapStdTypes) GetNullableDouble() map[int32]*float64 { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *MapStdTypes) GetNonnullDouble() map[int32]float64 { + if m != nil { + return m.NonnullDouble + } + return nil +} + +func (m *MapStdTypes) GetNullableFloat() map[int32]*float32 { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *MapStdTypes) GetNonnullFloat() map[int32]float32 { + if m != nil { + return m.NonnullFloat + } + return nil +} + +func (m *MapStdTypes) GetNullableInt64() map[int32]*int64 { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *MapStdTypes) GetNonnullInt64() map[int32]int64 { + if m != nil { + return m.NonnullInt64 + } + return nil +} + +func (m *MapStdTypes) GetNullableUInt64() map[int32]*uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *MapStdTypes) GetNonnullUInt64() map[int32]uint64 { + if m != nil { + return m.NonnullUInt64 + } + return nil +} + +func (m *MapStdTypes) GetNullableInt32() map[int32]*int32 { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *MapStdTypes) GetNonnullInt32() map[int32]int32 { + if m != nil { + return m.NonnullInt32 + } + return nil +} + +func (m *MapStdTypes) GetNullableUInt32() map[int32]*uint32 { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *MapStdTypes) GetNonnullUInt32() map[int32]uint32 { + if m != nil { + return m.NonnullUInt32 + } + return nil +} + +func (m *MapStdTypes) GetNullableBool() map[int32]*bool { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *MapStdTypes) GetNonnullBool() map[int32]bool { + if m != nil { + return m.NonnullBool + } + return nil +} + +func (m *MapStdTypes) GetNullableString() map[int32]*string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *MapStdTypes) GetNonnullString() map[int32]string { + if m != nil { + return m.NonnullString + } + return nil +} + +func (m *MapStdTypes) GetNullableBytes() map[int32]*[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + +func (m *MapStdTypes) GetNonnullBytes() map[int32][]byte { + if m != nil { + return m.NonnullBytes + } + return nil +} + +type OneofProtoTypes struct { + // Types that are valid to be assigned to OneOfProtoTimes: + // *OneofProtoTypes_Timestamp + // *OneofProtoTypes_Duration + // *OneofProtoTypes_RepDouble + // *OneofProtoTypes_RepFloat + // *OneofProtoTypes_RepInt64 + // *OneofProtoTypes_RepUInt64 + // *OneofProtoTypes_RepInt32 + // *OneofProtoTypes_RepUInt32 + // *OneofProtoTypes_RepBool + // *OneofProtoTypes_RepString + // *OneofProtoTypes_RepBytes + OneOfProtoTimes isOneofProtoTypes_OneOfProtoTimes `protobuf_oneof:"OneOfProtoTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofProtoTypes) Reset() { *m = OneofProtoTypes{} } +func (m *OneofProtoTypes) String() string { return proto.CompactTextString(m) } +func (*OneofProtoTypes) ProtoMessage() {} +func (*OneofProtoTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_a6ccc2435d23b615, []int{7} +} +func (m *OneofProtoTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OneofProtoTypes.Unmarshal(m, b) +} +func (m *OneofProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OneofProtoTypes.Marshal(b, m, deterministic) +} +func (dst *OneofProtoTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofProtoTypes.Merge(dst, src) +} +func (m *OneofProtoTypes) XXX_Size() int { + return xxx_messageInfo_OneofProtoTypes.Size(m) +} +func (m *OneofProtoTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofProtoTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofProtoTypes proto.InternalMessageInfo + +type isOneofProtoTypes_OneOfProtoTimes interface { + isOneofProtoTypes_OneOfProtoTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + Size() int +} + +type OneofProtoTypes_Timestamp struct { + Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,oneof"` +} +type OneofProtoTypes_Duration struct { + Duration *types.Duration `protobuf:"bytes,2,opt,name=duration,oneof"` +} +type OneofProtoTypes_RepDouble struct { + RepDouble *types.DoubleValue `protobuf:"bytes,3,opt,name=repDouble,oneof"` +} +type OneofProtoTypes_RepFloat struct { + RepFloat *types.FloatValue `protobuf:"bytes,4,opt,name=repFloat,oneof"` +} +type OneofProtoTypes_RepInt64 struct { + RepInt64 *types.Int64Value `protobuf:"bytes,5,opt,name=repInt64,oneof"` +} +type OneofProtoTypes_RepUInt64 struct { + RepUInt64 *types.UInt64Value `protobuf:"bytes,6,opt,name=repUInt64,oneof"` +} +type OneofProtoTypes_RepInt32 struct { + RepInt32 *types.Int32Value `protobuf:"bytes,7,opt,name=repInt32,oneof"` +} +type OneofProtoTypes_RepUInt32 struct { + RepUInt32 *types.UInt32Value `protobuf:"bytes,8,opt,name=repUInt32,oneof"` +} +type OneofProtoTypes_RepBool struct { + RepBool *types.BoolValue `protobuf:"bytes,9,opt,name=repBool,oneof"` +} +type OneofProtoTypes_RepString struct { + RepString *types.StringValue `protobuf:"bytes,10,opt,name=repString,oneof"` +} +type OneofProtoTypes_RepBytes struct { + RepBytes *types.BytesValue `protobuf:"bytes,11,opt,name=repBytes,oneof"` +} + +func (*OneofProtoTypes_Timestamp) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_Duration) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepDouble) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepFloat) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepInt64) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepUInt64) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepInt32) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepUInt32) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepBool) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepString) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepBytes) isOneofProtoTypes_OneOfProtoTimes() {} + +func (m *OneofProtoTypes) GetOneOfProtoTimes() isOneofProtoTypes_OneOfProtoTimes { + if m != nil { + return m.OneOfProtoTimes + } + return nil +} + +func (m *OneofProtoTypes) GetTimestamp() *types.Timestamp { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Timestamp); ok { + return x.Timestamp + } + return nil +} + +func (m *OneofProtoTypes) GetDuration() *types.Duration { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Duration); ok { + return x.Duration + } + return nil +} + +func (m *OneofProtoTypes) GetRepDouble() *types.DoubleValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepDouble); ok { + return x.RepDouble + } + return nil +} + +func (m *OneofProtoTypes) GetRepFloat() *types.FloatValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepFloat); ok { + return x.RepFloat + } + return nil +} + +func (m *OneofProtoTypes) GetRepInt64() *types.Int64Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepInt64); ok { + return x.RepInt64 + } + return nil +} + +func (m *OneofProtoTypes) GetRepUInt64() *types.UInt64Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepUInt64); ok { + return x.RepUInt64 + } + return nil +} + +func (m *OneofProtoTypes) GetRepInt32() *types.Int32Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepInt32); ok { + return x.RepInt32 + } + return nil +} + +func (m *OneofProtoTypes) GetRepUInt32() *types.UInt32Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepUInt32); ok { + return x.RepUInt32 + } + return nil +} + +func (m *OneofProtoTypes) GetRepBool() *types.BoolValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepBool); ok { + return x.RepBool + } + return nil +} + +func (m *OneofProtoTypes) GetRepString() *types.StringValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepString); ok { + return x.RepString + } + return nil +} + +func (m *OneofProtoTypes) GetRepBytes() *types.BytesValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepBytes); ok { + return x.RepBytes + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofProtoTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofProtoTypes_OneofMarshaler, _OneofProtoTypes_OneofUnmarshaler, _OneofProtoTypes_OneofSizer, []interface{}{ + (*OneofProtoTypes_Timestamp)(nil), + (*OneofProtoTypes_Duration)(nil), + (*OneofProtoTypes_RepDouble)(nil), + (*OneofProtoTypes_RepFloat)(nil), + (*OneofProtoTypes_RepInt64)(nil), + (*OneofProtoTypes_RepUInt64)(nil), + (*OneofProtoTypes_RepInt32)(nil), + (*OneofProtoTypes_RepUInt32)(nil), + (*OneofProtoTypes_RepBool)(nil), + (*OneofProtoTypes_RepString)(nil), + (*OneofProtoTypes_RepBytes)(nil), + } +} + +func _OneofProtoTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofProtoTypes) + // OneOfProtoTimes + switch x := m.OneOfProtoTimes.(type) { + case *OneofProtoTypes_Timestamp: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Timestamp); err != nil { + return err + } + case *OneofProtoTypes_Duration: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Duration); err != nil { + return err + } + case *OneofProtoTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepDouble); err != nil { + return err + } + case *OneofProtoTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepFloat); err != nil { + return err + } + case *OneofProtoTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepInt64); err != nil { + return err + } + case *OneofProtoTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepUInt64); err != nil { + return err + } + case *OneofProtoTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepInt32); err != nil { + return err + } + case *OneofProtoTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepUInt32); err != nil { + return err + } + case *OneofProtoTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepBool); err != nil { + return err + } + case *OneofProtoTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepString); err != nil { + return err + } + case *OneofProtoTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepBytes); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("OneofProtoTypes.OneOfProtoTimes has unexpected type %T", x) + } + return nil +} + +func _OneofProtoTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofProtoTypes) + switch tag { + case 1: // OneOfProtoTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Timestamp) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{msg} + return true, err + case 2: // OneOfProtoTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Duration) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_Duration{msg} + return true, err + case 3: // OneOfProtoTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.DoubleValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepDouble{msg} + return true, err + case 4: // OneOfProtoTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.FloatValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepFloat{msg} + return true, err + case 5: // OneOfProtoTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Int64Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepInt64{msg} + return true, err + case 6: // OneOfProtoTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.UInt64Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt64{msg} + return true, err + case 7: // OneOfProtoTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Int32Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepInt32{msg} + return true, err + case 8: // OneOfProtoTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.UInt32Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt32{msg} + return true, err + case 9: // OneOfProtoTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.BoolValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepBool{msg} + return true, err + case 10: // OneOfProtoTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.StringValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepString{msg} + return true, err + case 11: // OneOfProtoTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.BytesValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepBytes{msg} + return true, err + default: + return false, nil + } +} + +func _OneofProtoTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofProtoTypes) + // OneOfProtoTimes + switch x := m.OneOfProtoTimes.(type) { + case *OneofProtoTypes_Timestamp: + s := proto.Size(x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_Duration: + s := proto.Size(x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepDouble: + s := proto.Size(x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepFloat: + s := proto.Size(x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepInt64: + s := proto.Size(x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepUInt64: + s := proto.Size(x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepInt32: + s := proto.Size(x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepUInt32: + s := proto.Size(x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepBool: + s := proto.Size(x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepString: + s := proto.Size(x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepBytes: + s := proto.Size(x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type OneofStdTypes struct { + // Types that are valid to be assigned to OneOfStdTimes: + // *OneofStdTypes_Timestamp + // *OneofStdTypes_Duration + // *OneofStdTypes_RepDouble + // *OneofStdTypes_RepFloat + // *OneofStdTypes_RepInt64 + // *OneofStdTypes_RepUInt64 + // *OneofStdTypes_RepInt32 + // *OneofStdTypes_RepUInt32 + // *OneofStdTypes_RepBool + // *OneofStdTypes_RepString + // *OneofStdTypes_RepBytes + OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } +func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } +func (*OneofStdTypes) ProtoMessage() {} +func (*OneofStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_a6ccc2435d23b615, []int{8} +} +func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OneofStdTypes.Unmarshal(m, b) +} +func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) +} +func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofStdTypes.Merge(dst, src) +} +func (m *OneofStdTypes) XXX_Size() int { + return xxx_messageInfo_OneofStdTypes.Size(m) +} +func (m *OneofStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo + +type isOneofStdTypes_OneOfStdTimes interface { + isOneofStdTypes_OneOfStdTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + Size() int +} + +type OneofStdTypes_Timestamp struct { + Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` +} +type OneofStdTypes_Duration struct { + Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` +} +type OneofStdTypes_RepDouble struct { + RepDouble *float64 `protobuf:"bytes,3,opt,name=repDouble,oneof,wktptr"` +} +type OneofStdTypes_RepFloat struct { + RepFloat *float32 `protobuf:"bytes,4,opt,name=repFloat,oneof,wktptr"` +} +type OneofStdTypes_RepInt64 struct { + RepInt64 *int64 `protobuf:"bytes,5,opt,name=repInt64,oneof,wktptr"` +} +type OneofStdTypes_RepUInt64 struct { + RepUInt64 *uint64 `protobuf:"bytes,6,opt,name=repUInt64,oneof,wktptr"` +} +type OneofStdTypes_RepInt32 struct { + RepInt32 *int32 `protobuf:"bytes,7,opt,name=repInt32,oneof,wktptr"` +} +type OneofStdTypes_RepUInt32 struct { + RepUInt32 *uint32 `protobuf:"bytes,8,opt,name=repUInt32,oneof,wktptr"` +} +type OneofStdTypes_RepBool struct { + RepBool *bool `protobuf:"bytes,9,opt,name=repBool,oneof,wktptr"` +} +type OneofStdTypes_RepString struct { + RepString *string `protobuf:"bytes,10,opt,name=repString,oneof,wktptr"` +} +type OneofStdTypes_RepBytes struct { + RepBytes *[]byte `protobuf:"bytes,11,opt,name=repBytes,oneof,wktptr"` +} + +func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepDouble) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepFloat) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBool) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepString) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBytes) isOneofStdTypes_OneOfStdTimes() {} + +func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { + if m != nil { + return m.OneOfStdTimes + } + return nil +} + +func (m *OneofStdTypes) GetTimestamp() *time.Time { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { + return x.Timestamp + } + return nil +} + +func (m *OneofStdTypes) GetDuration() *time.Duration { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { + return x.Duration + } + return nil +} + +func (m *OneofStdTypes) GetRepDouble() *float64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepDouble); ok { + return x.RepDouble + } + return nil +} + +func (m *OneofStdTypes) GetRepFloat() *float32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepFloat); ok { + return x.RepFloat + } + return nil +} + +func (m *OneofStdTypes) GetRepInt64() *int64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt64); ok { + return x.RepInt64 + } + return nil +} + +func (m *OneofStdTypes) GetRepUInt64() *uint64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt64); ok { + return x.RepUInt64 + } + return nil +} + +func (m *OneofStdTypes) GetRepInt32() *int32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt32); ok { + return x.RepInt32 + } + return nil +} + +func (m *OneofStdTypes) GetRepUInt32() *uint32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt32); ok { + return x.RepUInt32 + } + return nil +} + +func (m *OneofStdTypes) GetRepBool() *bool { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBool); ok { + return x.RepBool + } + return nil +} + +func (m *OneofStdTypes) GetRepString() *string { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepString); ok { + return x.RepString + } + return nil +} + +func (m *OneofStdTypes) GetRepBytes() *[]byte { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBytes); ok { + return x.RepBytes + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ + (*OneofStdTypes_Timestamp)(nil), + (*OneofStdTypes_Duration)(nil), + (*OneofStdTypes_RepDouble)(nil), + (*OneofStdTypes_RepFloat)(nil), + (*OneofStdTypes_RepInt64)(nil), + (*OneofStdTypes_RepUInt64)(nil), + (*OneofStdTypes_RepInt32)(nil), + (*OneofStdTypes_RepUInt32)(nil), + (*OneofStdTypes_RepBool)(nil), + (*OneofStdTypes_RepString)(nil), + (*OneofStdTypes_RepBytes)(nil), + } +} + +func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdTimeMarshal(*x.Timestamp) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_Duration: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDurationMarshal(*x.Duration) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDoubleMarshal(*x.RepDouble) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdFloatMarshal(*x.RepFloat) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt64Marshal(*x.RepInt64) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt64Marshal(*x.RepUInt64) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt32Marshal(*x.RepInt32) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt32Marshal(*x.RepUInt32) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBoolMarshal(*x.RepBool) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdStringMarshal(*x.RepString) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case *OneofStdTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBytesMarshal(*x.RepBytes) + if err != nil { + return err + } + if err := b.EncodeRawBytes(dAtA); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) + } + return nil +} + +func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofStdTypes) + switch tag { + case 1: // OneOfStdTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(time.Time) + if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} + return true, err + case 2: // OneOfStdTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(time.Duration) + if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_Duration{c} + return true, err + case 3: // OneOfStdTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(float64) + if err2 := github_com_gogo_protobuf_types.StdDoubleUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepDouble{c} + return true, err + case 4: // OneOfStdTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(float32) + if err2 := github_com_gogo_protobuf_types.StdFloatUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepFloat{c} + return true, err + case 5: // OneOfStdTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int64) + if err2 := github_com_gogo_protobuf_types.StdInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt64{c} + return true, err + case 6: // OneOfStdTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(uint64) + if err2 := github_com_gogo_protobuf_types.StdUInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt64{c} + return true, err + case 7: // OneOfStdTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int32) + if err2 := github_com_gogo_protobuf_types.StdInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt32{c} + return true, err + case 8: // OneOfStdTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(uint32) + if err2 := github_com_gogo_protobuf_types.StdUInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt32{c} + return true, err + case 9: // OneOfStdTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(bool) + if err2 := github_com_gogo_protobuf_types.StdBoolUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBool{c} + return true, err + case 10: // OneOfStdTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(string) + if err2 := github_com_gogo_protobuf_types.StdStringUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepString{c} + return true, err + case 11: // OneOfStdTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new([]byte) + if err2 := github_com_gogo_protobuf_types.StdBytesUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBytes{c} + return true, err + default: + return false, nil + } +} + +func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_Duration: + s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepDouble: + s := github_com_gogo_protobuf_types.SizeOfStdDouble(*x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepFloat: + s := github_com_gogo_protobuf_types.SizeOfStdFloat(*x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt64: + s := github_com_gogo_protobuf_types.SizeOfStdInt64(*x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt64: + s := github_com_gogo_protobuf_types.SizeOfStdUInt64(*x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt32: + s := github_com_gogo_protobuf_types.SizeOfStdInt32(*x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt32: + s := github_com_gogo_protobuf_types.SizeOfStdUInt32(*x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBool: + s := github_com_gogo_protobuf_types.SizeOfStdBool(*x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepString: + s := github_com_gogo_protobuf_types.SizeOfStdString(*x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBytes: + s := github_com_gogo_protobuf_types.SizeOfStdBytes(*x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*KnownTypes)(nil), "types.KnownTypes") + proto.RegisterType((*ProtoTypes)(nil), "types.ProtoTypes") + proto.RegisterType((*StdTypes)(nil), "types.StdTypes") + proto.RegisterType((*RepProtoTypes)(nil), "types.RepProtoTypes") + proto.RegisterType((*RepStdTypes)(nil), "types.RepStdTypes") + proto.RegisterType((*MapProtoTypes)(nil), "types.MapProtoTypes") + proto.RegisterMapType((map[int32]types.Duration)(nil), "types.MapProtoTypes.DurationEntry") + proto.RegisterMapType((map[int32]types.BoolValue)(nil), "types.MapProtoTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32]types.BytesValue)(nil), "types.MapProtoTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]types.DoubleValue)(nil), "types.MapProtoTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]types.FloatValue)(nil), "types.MapProtoTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]types.Int32Value)(nil), "types.MapProtoTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]types.Int64Value)(nil), "types.MapProtoTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]types.StringValue)(nil), "types.MapProtoTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]types.UInt32Value)(nil), "types.MapProtoTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]types.UInt64Value)(nil), "types.MapProtoTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*types.BoolValue)(nil), "types.MapProtoTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*types.BytesValue)(nil), "types.MapProtoTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*types.DoubleValue)(nil), "types.MapProtoTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*types.Duration)(nil), "types.MapProtoTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*types.FloatValue)(nil), "types.MapProtoTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*types.Int32Value)(nil), "types.MapProtoTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*types.Int64Value)(nil), "types.MapProtoTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*types.StringValue)(nil), "types.MapProtoTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*types.Timestamp)(nil), "types.MapProtoTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*types.UInt32Value)(nil), "types.MapProtoTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*types.UInt64Value)(nil), "types.MapProtoTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]types.Timestamp)(nil), "types.MapProtoTypes.TimestampEntry") + proto.RegisterType((*MapStdTypes)(nil), "types.MapStdTypes") + proto.RegisterMapType((map[int32]time.Duration)(nil), "types.MapStdTypes.DurationEntry") + proto.RegisterMapType((map[int32]bool)(nil), "types.MapStdTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32][]byte)(nil), "types.MapStdTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]float64)(nil), "types.MapStdTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]float32)(nil), "types.MapStdTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]int32)(nil), "types.MapStdTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]int64)(nil), "types.MapStdTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]string)(nil), "types.MapStdTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]uint32)(nil), "types.MapStdTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]uint64)(nil), "types.MapStdTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*bool)(nil), "types.MapStdTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*[]byte)(nil), "types.MapStdTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*float64)(nil), "types.MapStdTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*time.Duration)(nil), "types.MapStdTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*float32)(nil), "types.MapStdTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*int32)(nil), "types.MapStdTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*int64)(nil), "types.MapStdTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*string)(nil), "types.MapStdTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*time.Time)(nil), "types.MapStdTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*uint32)(nil), "types.MapStdTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*uint64)(nil), "types.MapStdTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]time.Time)(nil), "types.MapStdTypes.TimestampEntry") + proto.RegisterType((*OneofProtoTypes)(nil), "types.OneofProtoTypes") + proto.RegisterType((*OneofStdTypes)(nil), "types.OneofStdTypes") +} +func (this *KnownTypes) Compare(that interface{}) int { + if that == nil { + if this == nil { + return 0 + } + return 1 + } + + that1, ok := that.(*KnownTypes) + if !ok { + that2, ok := that.(KnownTypes) + if ok { + that1 = &that2 + } else { + return 1 + } + } + if that1 == nil { + if this == nil { + return 0 + } + return 1 + } else if this == nil { + return -1 + } + if c := this.Dur.Compare(that1.Dur); c != 0 { + return c + } + if c := this.Ts.Compare(that1.Ts); c != 0 { + return c + } + if c := this.Dbl.Compare(that1.Dbl); c != 0 { + return c + } + if c := this.Flt.Compare(that1.Flt); c != 0 { + return c + } + if c := this.I64.Compare(that1.I64); c != 0 { + return c + } + if c := this.U64.Compare(that1.U64); c != 0 { + return c + } + if c := this.I32.Compare(that1.I32); c != 0 { + return c + } + if c := this.U32.Compare(that1.U32); c != 0 { + return c + } + if c := this.Bool.Compare(that1.Bool); c != 0 { + return c + } + if c := this.Str.Compare(that1.Str); c != 0 { + return c + } + if c := this.Bytes.Compare(that1.Bytes); c != 0 { + return c + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 +} +func (this *ProtoTypes) Compare(that interface{}) int { + if that == nil { + if this == nil { + return 0 + } + return 1 + } + + that1, ok := that.(*ProtoTypes) + if !ok { + that2, ok := that.(ProtoTypes) + if ok { + that1 = &that2 + } else { + return 1 + } + } + if that1 == nil { + if this == nil { + return 0 + } + return 1 + } else if this == nil { + return -1 + } + if c := this.NullableTimestamp.Compare(that1.NullableTimestamp); c != 0 { + return c + } + if c := this.NullableDuration.Compare(that1.NullableDuration); c != 0 { + return c + } + if c := this.NullableDouble.Compare(that1.NullableDouble); c != 0 { + return c + } + if c := this.NullableFloat.Compare(that1.NullableFloat); c != 0 { + return c + } + if c := this.NullableInt64.Compare(that1.NullableInt64); c != 0 { + return c + } + if c := this.NullableUInt64.Compare(that1.NullableUInt64); c != 0 { + return c + } + if c := this.NullableInt32.Compare(that1.NullableInt32); c != 0 { + return c + } + if c := this.NullableUInt32.Compare(that1.NullableUInt32); c != 0 { + return c + } + if c := this.NullableBool.Compare(that1.NullableBool); c != 0 { + return c + } + if c := this.NullableString.Compare(that1.NullableString); c != 0 { + return c + } + if c := this.NullableBytes.Compare(that1.NullableBytes); c != 0 { + return c + } + if c := this.Timestamp.Compare(&that1.Timestamp); c != 0 { + return c + } + if c := this.Duration.Compare(&that1.Duration); c != 0 { + return c + } + if c := this.NonnullDouble.Compare(&that1.NonnullDouble); c != 0 { + return c + } + if c := this.NonnullFloat.Compare(&that1.NonnullFloat); c != 0 { + return c + } + if c := this.NonnullInt64.Compare(&that1.NonnullInt64); c != 0 { + return c + } + if c := this.NonnullUInt64.Compare(&that1.NonnullUInt64); c != 0 { + return c + } + if c := this.NonnullInt32.Compare(&that1.NonnullInt32); c != 0 { + return c + } + if c := this.NonnullUInt32.Compare(&that1.NonnullUInt32); c != 0 { + return c + } + if c := this.NonnullBool.Compare(&that1.NonnullBool); c != 0 { + return c + } + if c := this.NonnullString.Compare(&that1.NonnullString); c != 0 { + return c + } + if c := this.NonnullBytes.Compare(&that1.NonnullBytes); c != 0 { + return c + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 +} +func (this *RepProtoTypes) Compare(that interface{}) int { + if that == nil { + if this == nil { + return 0 + } + return 1 + } + + that1, ok := that.(*RepProtoTypes) + if !ok { + that2, ok := that.(RepProtoTypes) + if ok { + that1 = &that2 + } else { + return 1 + } + } + if that1 == nil { + if this == nil { + return 0 + } + return 1 + } else if this == nil { + return -1 + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + if len(this.NullableTimestamps) < len(that1.NullableTimestamps) { + return -1 + } + return 1 + } + for i := range this.NullableTimestamps { + if c := this.NullableTimestamps[i].Compare(that1.NullableTimestamps[i]); c != 0 { + return c + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + if len(this.NullableDurations) < len(that1.NullableDurations) { + return -1 + } + return 1 + } + for i := range this.NullableDurations { + if c := this.NullableDurations[i].Compare(that1.NullableDurations[i]); c != 0 { + return c + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + if len(this.Timestamps) < len(that1.Timestamps) { + return -1 + } + return 1 + } + for i := range this.Timestamps { + if c := this.Timestamps[i].Compare(&that1.Timestamps[i]); c != 0 { + return c + } + } + if len(this.Durations) != len(that1.Durations) { + if len(this.Durations) < len(that1.Durations) { + return -1 + } + return 1 + } + for i := range this.Durations { + if c := this.Durations[i].Compare(&that1.Durations[i]); c != 0 { + return c + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + if len(this.NullableDouble) < len(that1.NullableDouble) { + return -1 + } + return 1 + } + for i := range this.NullableDouble { + if c := this.NullableDouble[i].Compare(that1.NullableDouble[i]); c != 0 { + return c + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + if len(this.NonnullDouble) < len(that1.NonnullDouble) { + return -1 + } + return 1 + } + for i := range this.NonnullDouble { + if c := this.NonnullDouble[i].Compare(&that1.NonnullDouble[i]); c != 0 { + return c + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + if len(this.NullableFloat) < len(that1.NullableFloat) { + return -1 + } + return 1 + } + for i := range this.NullableFloat { + if c := this.NullableFloat[i].Compare(that1.NullableFloat[i]); c != 0 { + return c + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + if len(this.NonnullFloat) < len(that1.NonnullFloat) { + return -1 + } + return 1 + } + for i := range this.NonnullFloat { + if c := this.NonnullFloat[i].Compare(&that1.NonnullFloat[i]); c != 0 { + return c + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + if len(this.NullableInt64) < len(that1.NullableInt64) { + return -1 + } + return 1 + } + for i := range this.NullableInt64 { + if c := this.NullableInt64[i].Compare(that1.NullableInt64[i]); c != 0 { + return c + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + if len(this.NonnullInt64) < len(that1.NonnullInt64) { + return -1 + } + return 1 + } + for i := range this.NonnullInt64 { + if c := this.NonnullInt64[i].Compare(&that1.NonnullInt64[i]); c != 0 { + return c + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + if len(this.NullableUInt64) < len(that1.NullableUInt64) { + return -1 + } + return 1 + } + for i := range this.NullableUInt64 { + if c := this.NullableUInt64[i].Compare(that1.NullableUInt64[i]); c != 0 { + return c + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + if len(this.NonnullUInt64) < len(that1.NonnullUInt64) { + return -1 + } + return 1 + } + for i := range this.NonnullUInt64 { + if c := this.NonnullUInt64[i].Compare(&that1.NonnullUInt64[i]); c != 0 { + return c + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + if len(this.NullableInt32) < len(that1.NullableInt32) { + return -1 + } + return 1 + } + for i := range this.NullableInt32 { + if c := this.NullableInt32[i].Compare(that1.NullableInt32[i]); c != 0 { + return c + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + if len(this.NonnullInt32) < len(that1.NonnullInt32) { + return -1 + } + return 1 + } + for i := range this.NonnullInt32 { + if c := this.NonnullInt32[i].Compare(&that1.NonnullInt32[i]); c != 0 { + return c + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + if len(this.NullableUInt32) < len(that1.NullableUInt32) { + return -1 + } + return 1 + } + for i := range this.NullableUInt32 { + if c := this.NullableUInt32[i].Compare(that1.NullableUInt32[i]); c != 0 { + return c + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + if len(this.NonnullUInt32) < len(that1.NonnullUInt32) { + return -1 + } + return 1 + } + for i := range this.NonnullUInt32 { + if c := this.NonnullUInt32[i].Compare(&that1.NonnullUInt32[i]); c != 0 { + return c + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + if len(this.NullableBool) < len(that1.NullableBool) { + return -1 + } + return 1 + } + for i := range this.NullableBool { + if c := this.NullableBool[i].Compare(that1.NullableBool[i]); c != 0 { + return c + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + if len(this.NonnullBool) < len(that1.NonnullBool) { + return -1 + } + return 1 + } + for i := range this.NonnullBool { + if c := this.NonnullBool[i].Compare(&that1.NonnullBool[i]); c != 0 { + return c + } + } + if len(this.NullableString) != len(that1.NullableString) { + if len(this.NullableString) < len(that1.NullableString) { + return -1 + } + return 1 + } + for i := range this.NullableString { + if c := this.NullableString[i].Compare(that1.NullableString[i]); c != 0 { + return c + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + if len(this.NonnullString) < len(that1.NonnullString) { + return -1 + } + return 1 + } + for i := range this.NonnullString { + if c := this.NonnullString[i].Compare(&that1.NonnullString[i]); c != 0 { + return c + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + if len(this.NullableBytes) < len(that1.NullableBytes) { + return -1 + } + return 1 + } + for i := range this.NullableBytes { + if c := this.NullableBytes[i].Compare(that1.NullableBytes[i]); c != 0 { + return c + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + if len(this.NonnullBytes) < len(that1.NonnullBytes) { + return -1 + } + return 1 + } + for i := range this.NonnullBytes { + if c := this.NonnullBytes[i].Compare(&that1.NonnullBytes[i]); c != 0 { + return c + } + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 +} +func (this *KnownTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*KnownTypes) + if !ok { + that2, ok := that.(KnownTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *KnownTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *KnownTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *KnownTypes but is not nil && this == nil") + } + if !this.Dur.Equal(that1.Dur) { + return fmt.Errorf("Dur this(%v) Not Equal that(%v)", this.Dur, that1.Dur) + } + if !this.Ts.Equal(that1.Ts) { + return fmt.Errorf("Ts this(%v) Not Equal that(%v)", this.Ts, that1.Ts) + } + if !this.Dbl.Equal(that1.Dbl) { + return fmt.Errorf("Dbl this(%v) Not Equal that(%v)", this.Dbl, that1.Dbl) + } + if !this.Flt.Equal(that1.Flt) { + return fmt.Errorf("Flt this(%v) Not Equal that(%v)", this.Flt, that1.Flt) + } + if !this.I64.Equal(that1.I64) { + return fmt.Errorf("I64 this(%v) Not Equal that(%v)", this.I64, that1.I64) + } + if !this.U64.Equal(that1.U64) { + return fmt.Errorf("U64 this(%v) Not Equal that(%v)", this.U64, that1.U64) + } + if !this.I32.Equal(that1.I32) { + return fmt.Errorf("I32 this(%v) Not Equal that(%v)", this.I32, that1.I32) + } + if !this.U32.Equal(that1.U32) { + return fmt.Errorf("U32 this(%v) Not Equal that(%v)", this.U32, that1.U32) + } + if !this.Bool.Equal(that1.Bool) { + return fmt.Errorf("Bool this(%v) Not Equal that(%v)", this.Bool, that1.Bool) + } + if !this.Str.Equal(that1.Str) { + return fmt.Errorf("Str this(%v) Not Equal that(%v)", this.Str, that1.Str) + } + if !this.Bytes.Equal(that1.Bytes) { + return fmt.Errorf("Bytes this(%v) Not Equal that(%v)", this.Bytes, that1.Bytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *KnownTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*KnownTypes) + if !ok { + that2, ok := that.(KnownTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Dur.Equal(that1.Dur) { + return false + } + if !this.Ts.Equal(that1.Ts) { + return false + } + if !this.Dbl.Equal(that1.Dbl) { + return false + } + if !this.Flt.Equal(that1.Flt) { + return false + } + if !this.I64.Equal(that1.I64) { + return false + } + if !this.U64.Equal(that1.U64) { + return false + } + if !this.I32.Equal(that1.I32) { + return false + } + if !this.U32.Equal(that1.U32) { + return false + } + if !this.Bool.Equal(that1.Bool) { + return false + } + if !this.Str.Equal(that1.Str) { + return false + } + if !this.Bytes.Equal(that1.Bytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *ProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*ProtoTypes) + if !ok { + that2, ok := that.(ProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *ProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *ProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *ProtoTypes but is not nil && this == nil") + } + if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) + } + if !this.NullableDuration.Equal(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) + } + if !this.NullableDouble.Equal(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) + } + if !this.NullableFloat.Equal(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) + } + if !this.NullableInt64.Equal(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) + } + if !this.NullableUInt64.Equal(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) + } + if !this.NullableInt32.Equal(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) + } + if !this.NullableUInt32.Equal(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) + } + if !this.NullableBool.Equal(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) + } + if !this.NullableString.Equal(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) + } + if !this.NullableBytes.Equal(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) + } + if !this.Timestamp.Equal(&that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + if !this.Duration.Equal(&that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + if !this.NonnullDouble.Equal(&that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) + } + if !this.NonnullFloat.Equal(&that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) + } + if !this.NonnullInt64.Equal(&that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) + } + if !this.NonnullUInt64.Equal(&that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) + } + if !this.NonnullInt32.Equal(&that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) + } + if !this.NonnullUInt32.Equal(&that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) + } + if !this.NonnullBool.Equal(&that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) + } + if !this.NonnullString.Equal(&that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) + } + if !this.NonnullBytes.Equal(&that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *ProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*ProtoTypes) + if !ok { that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { - return 1 + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { + return false + } + if !this.NullableDuration.Equal(that1.NullableDuration) { + return false + } + if !this.NullableDouble.Equal(that1.NullableDouble) { + return false + } + if !this.NullableFloat.Equal(that1.NullableFloat) { + return false + } + if !this.NullableInt64.Equal(that1.NullableInt64) { + return false + } + if !this.NullableUInt64.Equal(that1.NullableUInt64) { + return false + } + if !this.NullableInt32.Equal(that1.NullableInt32) { + return false + } + if !this.NullableUInt32.Equal(that1.NullableUInt32) { + return false + } + if !this.NullableBool.Equal(that1.NullableBool) { + return false + } + if !this.NullableString.Equal(that1.NullableString) { + return false + } + if !this.NullableBytes.Equal(that1.NullableBytes) { + return false + } + if !this.Timestamp.Equal(&that1.Timestamp) { + return false + } + if !this.Duration.Equal(&that1.Duration) { + return false + } + if !this.NonnullDouble.Equal(&that1.NonnullDouble) { + return false + } + if !this.NonnullFloat.Equal(&that1.NonnullFloat) { + return false + } + if !this.NonnullInt64.Equal(&that1.NonnullInt64) { + return false + } + if !this.NonnullUInt64.Equal(&that1.NonnullUInt64) { + return false + } + if !this.NonnullInt32.Equal(&that1.NonnullInt32) { + return false + } + if !this.NonnullUInt32.Equal(&that1.NonnullUInt32) { + return false + } + if !this.NonnullBool.Equal(&that1.NonnullBool) { + return false + } + if !this.NonnullString.Equal(&that1.NonnullString) { + return false + } + if !this.NonnullBytes.Equal(&that1.NonnullBytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *StdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*StdTypes) + if !ok { + that2, ok := that.(StdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *StdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *StdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") + } + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") + } + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) + } + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) + } + } else if this.NullableDuration != nil { + return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") + } else if that1.NullableDuration != nil { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) + } + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", *this.NullableDouble, *that1.NullableDouble) + } + } else if this.NullableDouble != nil { + return fmt.Errorf("this.NullableDouble == nil && that.NullableDouble != nil") + } else if that1.NullableDouble != nil { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) + } + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", *this.NullableFloat, *that1.NullableFloat) + } + } else if this.NullableFloat != nil { + return fmt.Errorf("this.NullableFloat == nil && that.NullableFloat != nil") + } else if that1.NullableFloat != nil { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) + } + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", *this.NullableInt64, *that1.NullableInt64) + } + } else if this.NullableInt64 != nil { + return fmt.Errorf("this.NullableInt64 == nil && that.NullableInt64 != nil") + } else if that1.NullableInt64 != nil { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) + } + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", *this.NullableUInt64, *that1.NullableUInt64) + } + } else if this.NullableUInt64 != nil { + return fmt.Errorf("this.NullableUInt64 == nil && that.NullableUInt64 != nil") + } else if that1.NullableUInt64 != nil { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) + } + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", *this.NullableInt32, *that1.NullableInt32) + } + } else if this.NullableInt32 != nil { + return fmt.Errorf("this.NullableInt32 == nil && that.NullableInt32 != nil") + } else if that1.NullableInt32 != nil { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) + } + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", *this.NullableUInt32, *that1.NullableUInt32) + } + } else if this.NullableUInt32 != nil { + return fmt.Errorf("this.NullableUInt32 == nil && that.NullableUInt32 != nil") + } else if that1.NullableUInt32 != nil { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) + } + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", *this.NullableBool, *that1.NullableBool) + } + } else if this.NullableBool != nil { + return fmt.Errorf("this.NullableBool == nil && that.NullableBool != nil") + } else if that1.NullableBool != nil { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) + } + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", *this.NullableString, *that1.NullableString) + } + } else if this.NullableString != nil { + return fmt.Errorf("this.NullableString == nil && that.NullableString != nil") + } else if that1.NullableString != nil { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) + } + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return fmt.Errorf("this.NullableBytes != nil && that1.NullableBytes == nil") + } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) + } + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + if this.Duration != that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + if this.NonnullDouble != that1.NonnullDouble { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) + } + if this.NonnullFloat != that1.NonnullFloat { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) + } + if this.NonnullInt64 != that1.NonnullInt64 { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) + } + if this.NonnullUInt64 != that1.NonnullUInt64 { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) + } + if this.NonnullInt32 != that1.NonnullInt32 { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) + } + if this.NonnullUInt32 != that1.NonnullUInt32 { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) + } + if this.NonnullBool != that1.NonnullBool { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) + } + if this.NonnullString != that1.NonnullString { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) + } + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *StdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StdTypes) + if !ok { + that2, ok := that.(StdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return false + } + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return false + } + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return false + } + } else if this.NullableDuration != nil { + return false + } else if that1.NullableDuration != nil { + return false + } + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return false + } + } else if this.NullableDouble != nil { + return false + } else if that1.NullableDouble != nil { + return false + } + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return false + } + } else if this.NullableFloat != nil { + return false + } else if that1.NullableFloat != nil { + return false + } + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return false + } + } else if this.NullableInt64 != nil { + return false + } else if that1.NullableInt64 != nil { + return false + } + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return false + } + } else if this.NullableUInt64 != nil { + return false + } else if that1.NullableUInt64 != nil { + return false + } + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return false + } + } else if this.NullableInt32 != nil { + return false + } else if that1.NullableInt32 != nil { + return false + } + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return false + } + } else if this.NullableUInt32 != nil { + return false + } else if that1.NullableUInt32 != nil { + return false + } + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return false + } + } else if this.NullableBool != nil { + return false + } else if that1.NullableBool != nil { + return false + } + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return false + } + } else if this.NullableString != nil { + return false + } else if that1.NullableString != nil { + return false + } + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return false + } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return false + } + if !this.Timestamp.Equal(that1.Timestamp) { + return false + } + if this.Duration != that1.Duration { + return false + } + if this.NonnullDouble != that1.NonnullDouble { + return false + } + if this.NonnullFloat != that1.NonnullFloat { + return false + } + if this.NonnullInt64 != that1.NonnullInt64 { + return false + } + if this.NonnullUInt64 != that1.NonnullUInt64 { + return false + } + if this.NonnullInt32 != that1.NonnullInt32 { + return false + } + if this.NonnullUInt32 != that1.NonnullUInt32 { + return false + } + if this.NonnullBool != that1.NonnullBool { + return false + } + if this.NonnullString != that1.NonnullString { + return false + } + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *RepProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*RepProtoTypes) + if !ok { + that2, ok := that.(RepProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *RepProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *RepProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *RepProtoTypes but is not nil && this == nil") + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + } + for i := range this.NullableDurations { + if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + } + } + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + } + for i := range this.Durations { + if !this.Durations[i].Equal(&that1.Durations[i]) { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + if !this.NonnullDouble[i].Equal(&that1.NonnullDouble[i]) { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if !this.NonnullFloat[i].Equal(&that1.NonnullFloat[i]) { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if !this.NonnullInt64[i].Equal(&that1.NonnullInt64[i]) { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if !this.NonnullUInt64[i].Equal(&that1.NonnullUInt64[i]) { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if !this.NonnullInt32[i].Equal(&that1.NonnullInt32[i]) { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + if !this.NonnullUInt32[i].Equal(&that1.NonnullUInt32[i]) { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + if !this.NonnullBool[i].Equal(&that1.NonnullBool[i]) { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + if !this.NonnullString[i].Equal(&that1.NonnullString[i]) { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + if !this.NonnullBytes[i].Equal(&that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *RepProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*RepProtoTypes) + if !ok { + that2, ok := that.(RepProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { + return false + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false + } + for i := range this.NullableDurations { + if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { + return false + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return false + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { + return false + } + } + if len(this.Durations) != len(that1.Durations) { + return false + } + for i := range this.Durations { + if !this.Durations[i].Equal(&that1.Durations[i]) { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + if !this.NonnullDouble[i].Equal(&that1.NonnullDouble[i]) { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + if !this.NonnullFloat[i].Equal(&that1.NonnullFloat[i]) { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + if !this.NonnullInt64[i].Equal(&that1.NonnullInt64[i]) { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + if !this.NonnullUInt64[i].Equal(&that1.NonnullUInt64[i]) { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + if !this.NonnullInt32[i].Equal(&that1.NonnullInt32[i]) { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if !this.NonnullUInt32[i].Equal(&that1.NonnullUInt32[i]) { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + if !this.NonnullBool[i].Equal(&that1.NonnullBool[i]) { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if !this.NonnullString[i].Equal(&that1.NonnullString[i]) { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + if !this.NonnullBytes[i].Equal(&that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *RepStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *RepStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + } + } + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *RepStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return false + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return false + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return false + } + } + if len(this.Durations) != len(that1.Durations) { + return false + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapProtoTypes) + if !ok { + that2, ok := that.(MapProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapProtoTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + a := this.Timestamp[i] + b := that1.Timestamp[i] + if !(&a).Equal(&b) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + a := this.Duration[i] + b := that1.Duration[i] + if !(&a).Equal(&b) { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapProtoTypes) + if !ok { + that2, ok := that.(MapProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + a := this.Timestamp[i] + b := that1.Timestamp[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + a := this.Duration[i] + b := that1.Duration[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !(&a).Equal(&b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes) + if !ok { + that2, ok := that.(OneofProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes but is not nil && this == nil") + } + if that1.OneOfProtoTimes == nil { + if this.OneOfProtoTimes != nil { + return fmt.Errorf("this.OneOfProtoTimes != nil && that1.OneOfProtoTimes == nil") + } + } else if this.OneOfProtoTimes == nil { + return fmt.Errorf("this.OneOfProtoTimes == nil && that1.OneOfProtoTimes != nil") + } else if err := this.OneOfProtoTimes.VerboseEqual(that1.OneOfProtoTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofProtoTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_Timestamp) + if !ok { + that2, ok := that.(OneofProtoTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is not nil && this == nil") + } + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + return nil +} +func (this *OneofProtoTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_Duration) + if !ok { + that2, ok := that.(OneofProtoTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_Duration") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_Duration but is not nil && this == nil") + } + if !this.Duration.Equal(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofProtoTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepDouble) + if !ok { + that2, ok := that.(OneofProtoTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepDouble") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepDouble but is not nil && this == nil") + } + if !this.RepDouble.Equal(that1.RepDouble) { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) + } + return nil +} +func (this *OneofProtoTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepFloat) + if !ok { + that2, ok := that.(OneofProtoTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepFloat but is not nil && this == nil") + } + if !this.RepFloat.Equal(that1.RepFloat) { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil +} +func (this *OneofProtoTypes_RepInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepInt64 but is not nil && this == nil") + } + if !this.RepInt64.Equal(that1.RepInt64) { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) + } + return nil +} +func (this *OneofProtoTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepUInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt64 but is not nil && this == nil") + } + if !this.RepUInt64.Equal(that1.RepUInt64) { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) + } + return nil +} +func (this *OneofProtoTypes_RepInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepInt32 but is not nil && this == nil") + } + if !this.RepInt32.Equal(that1.RepInt32) { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) + } + return nil +} +func (this *OneofProtoTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepUInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt32 but is not nil && this == nil") + } + if !this.RepUInt32.Equal(that1.RepUInt32) { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) + } + return nil +} +func (this *OneofProtoTypes_RepBool) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepBool) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBool) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepBool") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepBool but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepBool but is not nil && this == nil") + } + if !this.RepBool.Equal(that1.RepBool) { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) + } + return nil +} +func (this *OneofProtoTypes_RepString) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepString) + if !ok { + that2, ok := that.(OneofProtoTypes_RepString) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepString") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepString but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepString but is not nil && this == nil") + } + if !this.RepString.Equal(that1.RepString) { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) + } + return nil +} +func (this *OneofProtoTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepBytes) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepBytes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepBytes but is not nil && this == nil") + } + if !this.RepBytes.Equal(that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) + } + return nil +} +func (this *OneofProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes) + if !ok { + that2, ok := that.(OneofProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.OneOfProtoTimes == nil { + if this.OneOfProtoTimes != nil { + return false + } + } else if this.OneOfProtoTimes == nil { + return false + } else if !this.OneOfProtoTimes.Equal(that1.OneOfProtoTimes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofProtoTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_Timestamp) + if !ok { + that2, ok := that.(OneofProtoTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Timestamp.Equal(that1.Timestamp) { + return false + } + return true +} +func (this *OneofProtoTypes_Duration) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_Duration) + if !ok { + that2, ok := that.(OneofProtoTypes_Duration) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Duration.Equal(that1.Duration) { + return false + } + return true +} +func (this *OneofProtoTypes_RepDouble) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepDouble) + if !ok { + that2, ok := that.(OneofProtoTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepDouble.Equal(that1.RepDouble) { + return false + } + return true +} +func (this *OneofProtoTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepFloat) + if !ok { + that2, ok := that.(OneofProtoTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepFloat.Equal(that1.RepFloat) { + return false + } + return true +} +func (this *OneofProtoTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepInt64.Equal(that1.RepInt64) { + return false + } + return true +} +func (this *OneofProtoTypes_RepUInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepUInt64.Equal(that1.RepUInt64) { + return false + } + return true +} +func (this *OneofProtoTypes_RepInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepInt32.Equal(that1.RepInt32) { + return false + } + return true +} +func (this *OneofProtoTypes_RepUInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepUInt32.Equal(that1.RepUInt32) { + return false + } + return true +} +func (this *OneofProtoTypes_RepBool) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepBool) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBool) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepBool.Equal(that1.RepBool) { + return false + } + return true +} +func (this *OneofProtoTypes_RepString) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepString) + if !ok { + that2, ok := that.(OneofProtoTypes_RepString) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepString.Equal(that1.RepString) { + return false + } + return true +} +func (this *OneofProtoTypes_RepBytes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepBytes) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepBytes.Equal(that1.RepBytes) { + return false + } + return true +} +func (this *OneofStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") + } + } else if this.OneOfStdTimes == nil { + return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") + } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + return nil +} +func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) + } + } else if this.Duration != nil { + return fmt.Errorf("this.Duration == nil && that.Duration != nil") + } else if that1.Duration != nil { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofStdTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepDouble") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is not nil && this == nil") + } + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", *this.RepDouble, *that1.RepDouble) + } + } else if this.RepDouble != nil { + return fmt.Errorf("this.RepDouble == nil && that.RepDouble != nil") + } else if that1.RepDouble != nil { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) + } + return nil +} +func (this *OneofStdTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is not nil && this == nil") + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", *this.RepFloat, *that1.RepFloat) + } + } else if this.RepFloat != nil { + return fmt.Errorf("this.RepFloat == nil && that.RepFloat != nil") + } else if that1.RepFloat != nil { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil +} +func (this *OneofStdTypes_RepInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is not nil && this == nil") + } + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", *this.RepInt64, *that1.RepInt64) + } + } else if this.RepInt64 != nil { + return fmt.Errorf("this.RepInt64 == nil && that.RepInt64 != nil") + } else if that1.RepInt64 != nil { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) + } + return nil +} +func (this *OneofStdTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is not nil && this == nil") + } + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", *this.RepUInt64, *that1.RepUInt64) + } + } else if this.RepUInt64 != nil { + return fmt.Errorf("this.RepUInt64 == nil && that.RepUInt64 != nil") + } else if that1.RepUInt64 != nil { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) + } + return nil +} +func (this *OneofStdTypes_RepInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is not nil && this == nil") + } + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", *this.RepInt32, *that1.RepInt32) + } + } else if this.RepInt32 != nil { + return fmt.Errorf("this.RepInt32 == nil && that.RepInt32 != nil") + } else if that1.RepInt32 != nil { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) + } + return nil +} +func (this *OneofStdTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt32") } } if that1 == nil { if this == nil { - return 0 + return nil } - return 1 + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is nil && this != nil") } else if this == nil { - return -1 + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is not nil && this == nil") } - if c := this.NullableTimestamp.Compare(that1.NullableTimestamp); c != 0 { - return c + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", *this.RepUInt32, *that1.RepUInt32) + } + } else if this.RepUInt32 != nil { + return fmt.Errorf("this.RepUInt32 == nil && that.RepUInt32 != nil") + } else if that1.RepUInt32 != nil { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) } - if c := this.NullableDuration.Compare(that1.NullableDuration); c != 0 { - return c + return nil +} +func (this *OneofStdTypes_RepBool) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") } - if c := this.Timestamp.Compare(&that1.Timestamp); c != 0 { - return c + + that1, ok := that.(*OneofStdTypes_RepBool) + if !ok { + that2, ok := that.(OneofStdTypes_RepBool) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBool") + } } - if c := this.Duration.Compare(&that1.Duration); c != 0 { - return c + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is not nil && this == nil") } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", *this.RepBool, *that1.RepBool) + } + } else if this.RepBool != nil { + return fmt.Errorf("this.RepBool == nil && that.RepBool != nil") + } else if that1.RepBool != nil { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) } - return 0 + return nil } -func (this *RepProtoTypes) Compare(that interface{}) int { +func (this *OneofStdTypes_RepString) VerboseEqual(that interface{}) error { if that == nil { if this == nil { - return 0 + return nil } - return 1 + return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*RepProtoTypes) + that1, ok := that.(*OneofStdTypes_RepString) if !ok { - that2, ok := that.(RepProtoTypes) + that2, ok := that.(OneofStdTypes_RepString) if ok { that1 = &that2 } else { - return 1 + return fmt.Errorf("that is not of type *OneofStdTypes_RepString") } } if that1 == nil { if this == nil { - return 0 + return nil } - return 1 + return fmt.Errorf("that is type *OneofStdTypes_RepString but is nil && this != nil") } else if this == nil { - return -1 + return fmt.Errorf("that is type *OneofStdTypes_RepString but is not nil && this == nil") } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - if len(this.NullableTimestamps) < len(that1.NullableTimestamps) { - return -1 + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", *this.RepString, *that1.RepString) } - return 1 + } else if this.RepString != nil { + return fmt.Errorf("this.RepString == nil && that.RepString != nil") + } else if that1.RepString != nil { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) } - for i := range this.NullableTimestamps { - if c := this.NullableTimestamps[i].Compare(that1.NullableTimestamps[i]); c != 0 { - return c + return nil +} +func (this *OneofStdTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil } + return fmt.Errorf("that == nil && this != nil") } - if len(this.NullableDurations) != len(that1.NullableDurations) { - if len(this.NullableDurations) < len(that1.NullableDurations) { - return -1 + + that1, ok := that.(*OneofStdTypes_RepBytes) + if !ok { + that2, ok := that.(OneofStdTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBytes") } - return 1 } - for i := range this.NullableDurations { - if c := this.NullableDurations[i].Compare(that1.NullableDurations[i]); c != 0 { - return c + if that1 == nil { + if this == nil { + return nil } + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is not nil && this == nil") } - if len(this.Timestamps) != len(that1.Timestamps) { - if len(this.Timestamps) < len(that1.Timestamps) { - return -1 + if that1.RepBytes == nil { + if this.RepBytes != nil { + return fmt.Errorf("this.RepBytes != nil && that1.RepBytes == nil") } - return 1 + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) } - for i := range this.Timestamps { - if c := this.Timestamps[i].Compare(&that1.Timestamps[i]); c != 0 { - return c + return nil +} +func (this *OneofStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return false } } - if len(this.Durations) != len(that1.Durations) { - if len(this.Durations) < len(that1.Durations) { - return -1 + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return false } - return 1 + } else if this.OneOfStdTimes == nil { + return false + } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { + return false } - for i := range this.Durations { - if c := this.Durations[i].Compare(&that1.Durations[i]); c != 0 { - return c + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return false } } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return false + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return false + } + return true +} +func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return false + } + } else if this.Duration != nil { + return false + } else if that1.Duration != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepDouble) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return false + } + } else if this.RepDouble != nil { + return false + } else if that1.RepDouble != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return false + } + } else if this.RepFloat != nil { + return false + } else if that1.RepFloat != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return false + } + } else if this.RepInt64 != nil { + return false + } else if that1.RepInt64 != nil { + return false } - return 0 + return true } -func (this *KnownTypes) VerboseEqual(that interface{}) error { +func (this *OneofStdTypes_RepUInt64) Equal(that interface{}) bool { if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + return this == nil } - that1, ok := that.(*KnownTypes) + that1, ok := that.(*OneofStdTypes_RepUInt64) if !ok { - that2, ok := that.(KnownTypes) + that2, ok := that.(OneofStdTypes_RepUInt64) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *KnownTypes") + return false } } if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *KnownTypes but is nil && this != nil") + return this == nil } else if this == nil { - return fmt.Errorf("that is type *KnownTypes but is not nil && this == nil") - } - if !this.Dur.Equal(that1.Dur) { - return fmt.Errorf("Dur this(%v) Not Equal that(%v)", this.Dur, that1.Dur) - } - if !this.Ts.Equal(that1.Ts) { - return fmt.Errorf("Ts this(%v) Not Equal that(%v)", this.Ts, that1.Ts) - } - if !this.Dbl.Equal(that1.Dbl) { - return fmt.Errorf("Dbl this(%v) Not Equal that(%v)", this.Dbl, that1.Dbl) - } - if !this.Flt.Equal(that1.Flt) { - return fmt.Errorf("Flt this(%v) Not Equal that(%v)", this.Flt, that1.Flt) - } - if !this.I64.Equal(that1.I64) { - return fmt.Errorf("I64 this(%v) Not Equal that(%v)", this.I64, that1.I64) - } - if !this.U64.Equal(that1.U64) { - return fmt.Errorf("U64 this(%v) Not Equal that(%v)", this.U64, that1.U64) - } - if !this.I32.Equal(that1.I32) { - return fmt.Errorf("I32 this(%v) Not Equal that(%v)", this.I32, that1.I32) - } - if !this.U32.Equal(that1.U32) { - return fmt.Errorf("U32 this(%v) Not Equal that(%v)", this.U32, that1.U32) - } - if !this.Bool.Equal(that1.Bool) { - return fmt.Errorf("Bool this(%v) Not Equal that(%v)", this.Bool, that1.Bool) - } - if !this.Str.Equal(that1.Str) { - return fmt.Errorf("Str this(%v) Not Equal that(%v)", this.Str, that1.Str) - } - if !this.Bytes.Equal(that1.Bytes) { - return fmt.Errorf("Bytes this(%v) Not Equal that(%v)", this.Bytes, that1.Bytes) + return false } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return false + } + } else if this.RepUInt64 != nil { + return false + } else if that1.RepUInt64 != nil { + return false } - return nil + return true } -func (this *KnownTypes) Equal(that interface{}) bool { +func (this *OneofStdTypes_RepInt32) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*KnownTypes) + that1, ok := that.(*OneofStdTypes_RepInt32) if !ok { - that2, ok := that.(KnownTypes) + that2, ok := that.(OneofStdTypes_RepInt32) if ok { that1 = &that2 } else { @@ -1108,94 +6509,115 @@ } else if this == nil { return false } - if !this.Dur.Equal(that1.Dur) { + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return false + } + } else if this.RepInt32 != nil { return false - } - if !this.Ts.Equal(that1.Ts) { + } else if that1.RepInt32 != nil { return false } - if !this.Dbl.Equal(that1.Dbl) { - return false + return true +} +func (this *OneofStdTypes_RepUInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil } - if !this.Flt.Equal(that1.Flt) { - return false + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return false + } } - if !this.I64.Equal(that1.I64) { + if that1 == nil { + return this == nil + } else if this == nil { return false } - if !this.U64.Equal(that1.U64) { + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return false + } + } else if this.RepUInt32 != nil { return false - } - if !this.I32.Equal(that1.I32) { + } else if that1.RepUInt32 != nil { return false } - if !this.U32.Equal(that1.U32) { - return false + return true +} +func (this *OneofStdTypes_RepBool) Equal(that interface{}) bool { + if that == nil { + return this == nil } - if !this.Bool.Equal(that1.Bool) { - return false + + that1, ok := that.(*OneofStdTypes_RepBool) + if !ok { + that2, ok := that.(OneofStdTypes_RepBool) + if ok { + that1 = &that2 + } else { + return false + } } - if !this.Str.Equal(that1.Str) { + if that1 == nil { + return this == nil + } else if this == nil { return false } - if !this.Bytes.Equal(that1.Bytes) { + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return false + } + } else if this.RepBool != nil { return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + } else if that1.RepBool != nil { return false } return true } -func (this *ProtoTypes) VerboseEqual(that interface{}) error { +func (this *OneofStdTypes_RepString) Equal(that interface{}) bool { if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + return this == nil } - that1, ok := that.(*ProtoTypes) + that1, ok := that.(*OneofStdTypes_RepString) if !ok { - that2, ok := that.(ProtoTypes) + that2, ok := that.(OneofStdTypes_RepString) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *ProtoTypes") + return false } } if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *ProtoTypes but is nil && this != nil") + return this == nil } else if this == nil { - return fmt.Errorf("that is type *ProtoTypes but is not nil && this == nil") - } - if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) - } - if !this.NullableDuration.Equal(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) - } - if !this.Timestamp.Equal(&that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) - } - if !this.Duration.Equal(&that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + return false } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return false + } + } else if this.RepString != nil { + return false + } else if that1.RepString != nil { + return false } - return nil + return true } -func (this *ProtoTypes) Equal(that interface{}) bool { +func (this *OneofStdTypes_RepBytes) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*ProtoTypes) + that1, ok := that.(*OneofStdTypes_RepBytes) if !ok { - that2, ok := that.(ProtoTypes) + that2, ok := that.(OneofStdTypes_RepBytes) if ok { that1 = &that2 } else { @@ -1207,1588 +6629,2101 @@ } else if this == nil { return false } - if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { - return false + if that1.RepBytes == nil { + if this.RepBytes != nil { + return false + } + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return false + } + return true +} +func NewPopulatedKnownTypes(r randyTypes, easy bool) *KnownTypes { + this := &KnownTypes{} + if r.Intn(10) != 0 { + this.Dur = types.NewPopulatedDuration(r, easy) + } + if r.Intn(10) != 0 { + this.Ts = types.NewPopulatedTimestamp(r, easy) + } + if r.Intn(10) != 0 { + this.Dbl = types.NewPopulatedDoubleValue(r, easy) + } + if r.Intn(10) != 0 { + this.Flt = types.NewPopulatedFloatValue(r, easy) + } + if r.Intn(10) != 0 { + this.I64 = types.NewPopulatedInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.U64 = types.NewPopulatedUInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.I32 = types.NewPopulatedInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.U32 = types.NewPopulatedUInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.Bool = types.NewPopulatedBoolValue(r, easy) + } + if r.Intn(10) != 0 { + this.Str = types.NewPopulatedStringValue(r, easy) + } + if r.Intn(10) != 0 { + this.Bytes = types.NewPopulatedBytesValue(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedProtoTypes(r randyTypes, easy bool) *ProtoTypes { + this := &ProtoTypes{} + if r.Intn(10) != 0 { + this.NullableTimestamp = types.NewPopulatedTimestamp(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDuration = types.NewPopulatedDuration(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDouble = types.NewPopulatedDoubleValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableFloat = types.NewPopulatedFloatValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt64 = types.NewPopulatedInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt64 = types.NewPopulatedUInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt32 = types.NewPopulatedInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt32 = types.NewPopulatedUInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBool = types.NewPopulatedBoolValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableString = types.NewPopulatedStringValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBytes = types.NewPopulatedBytesValue(r, easy) + } + v1 := types.NewPopulatedTimestamp(r, easy) + this.Timestamp = *v1 + v2 := types.NewPopulatedDuration(r, easy) + this.Duration = *v2 + v3 := types.NewPopulatedDoubleValue(r, easy) + this.NonnullDouble = *v3 + v4 := types.NewPopulatedFloatValue(r, easy) + this.NonnullFloat = *v4 + v5 := types.NewPopulatedInt64Value(r, easy) + this.NonnullInt64 = *v5 + v6 := types.NewPopulatedUInt64Value(r, easy) + this.NonnullUInt64 = *v6 + v7 := types.NewPopulatedInt32Value(r, easy) + this.NonnullInt32 = *v7 + v8 := types.NewPopulatedUInt32Value(r, easy) + this.NonnullUInt32 = *v8 + v9 := types.NewPopulatedBoolValue(r, easy) + this.NonnullBool = *v9 + v10 := types.NewPopulatedStringValue(r, easy) + this.NonnullString = *v10 + v11 := types.NewPopulatedBytesValue(r, easy) + this.NonnullBytes = *v11 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedStdTypes(r randyTypes, easy bool) *StdTypes { + this := &StdTypes{} + if r.Intn(10) != 0 { + this.NullableTimestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDuration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + if r.Intn(10) != 0 { + this.NullableFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) } - if !this.NullableDuration.Equal(that1.NullableDuration) { - return false + if r.Intn(10) != 0 { + this.NullableUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) } - if !this.Timestamp.Equal(&that1.Timestamp) { - return false + if r.Intn(10) != 0 { + this.NullableBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) } - if !this.Duration.Equal(&that1.Duration) { - return false + if r.Intn(10) != 0 { + this.NullableString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if r.Intn(10) != 0 { + this.NullableBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) } - return true -} -func (this *StdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + v12 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamp = *v12 + v13 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Duration = *v13 + v14 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble = *v14 + v15 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat = *v15 + v16 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64 = *v16 + v17 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64 = *v17 + v18 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32 = *v18 + v19 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32 = *v19 + v20 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool = *v20 + v21 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString = *v21 + v22 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes = *v22 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) } + return this +} - that1, ok := that.(*StdTypes) - if !ok { - that2, ok := that.(StdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *StdTypes") +func NewPopulatedRepProtoTypes(r randyTypes, easy bool) *RepProtoTypes { + this := &RepProtoTypes{} + if r.Intn(10) != 0 { + v23 := r.Intn(5) + this.NullableTimestamps = make([]*types.Timestamp, v23) + for i := 0; i < v23; i++ { + this.NullableTimestamps[i] = types.NewPopulatedTimestamp(r, easy) } } - if that1 == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v24 := r.Intn(5) + this.NullableDurations = make([]*types.Duration, v24) + for i := 0; i < v24; i++ { + this.NullableDurations[i] = types.NewPopulatedDuration(r, easy) } - return fmt.Errorf("that is type *StdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") + if r.Intn(10) != 0 { + v25 := r.Intn(5) + this.Timestamps = make([]types.Timestamp, v25) + for i := 0; i < v25; i++ { + v26 := types.NewPopulatedTimestamp(r, easy) + this.Timestamps[i] = *v26 } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) + if r.Intn(10) != 0 { + v27 := r.Intn(5) + this.Durations = make([]types.Duration, v27) + for i := 0; i < v27; i++ { + v28 := types.NewPopulatedDuration(r, easy) + this.Durations[i] = *v28 } - } else if this.NullableDuration != nil { - return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") - } else if that1.NullableDuration != nil { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) - } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) } - if this.Duration != that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil -} -func (this *StdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*StdTypes) - if !ok { - that2, ok := that.(StdTypes) - if ok { - that1 = &that2 - } else { - return false + if r.Intn(10) != 0 { + v29 := r.Intn(5) + this.NullableDouble = make([]*types.DoubleValue, v29) + for i := 0; i < v29; i++ { + this.NullableDouble[i] = types.NewPopulatedDoubleValue(r, easy) } } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if r.Intn(10) != 0 { + v30 := r.Intn(5) + this.NonnullDouble = make([]types.DoubleValue, v30) + for i := 0; i < v30; i++ { + v31 := types.NewPopulatedDoubleValue(r, easy) + this.NonnullDouble[i] = *v31 + } } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return false + if r.Intn(10) != 0 { + v32 := r.Intn(5) + this.NullableFloat = make([]*types.FloatValue, v32) + for i := 0; i < v32; i++ { + this.NullableFloat[i] = types.NewPopulatedFloatValue(r, easy) } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return false } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return false + if r.Intn(10) != 0 { + v33 := r.Intn(5) + this.NonnullFloat = make([]types.FloatValue, v33) + for i := 0; i < v33; i++ { + v34 := types.NewPopulatedFloatValue(r, easy) + this.NonnullFloat[i] = *v34 } - } else if this.NullableDuration != nil { - return false - } else if that1.NullableDuration != nil { - return false } - if !this.Timestamp.Equal(that1.Timestamp) { - return false + if r.Intn(10) != 0 { + v35 := r.Intn(5) + this.NullableInt64 = make([]*types.Int64Value, v35) + for i := 0; i < v35; i++ { + this.NullableInt64[i] = types.NewPopulatedInt64Value(r, easy) + } } - if this.Duration != that1.Duration { - return false + if r.Intn(10) != 0 { + v36 := r.Intn(5) + this.NonnullInt64 = make([]types.Int64Value, v36) + for i := 0; i < v36; i++ { + v37 := types.NewPopulatedInt64Value(r, easy) + this.NonnullInt64[i] = *v37 + } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if r.Intn(10) != 0 { + v38 := r.Intn(5) + this.NullableUInt64 = make([]*types.UInt64Value, v38) + for i := 0; i < v38; i++ { + this.NullableUInt64[i] = types.NewPopulatedUInt64Value(r, easy) + } } - return true -} -func (this *RepProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v39 := r.Intn(5) + this.NonnullUInt64 = make([]types.UInt64Value, v39) + for i := 0; i < v39; i++ { + v40 := types.NewPopulatedUInt64Value(r, easy) + this.NonnullUInt64[i] = *v40 } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *RepProtoTypes") + if r.Intn(10) != 0 { + v41 := r.Intn(5) + this.NullableInt32 = make([]*types.Int32Value, v41) + for i := 0; i < v41; i++ { + this.NullableInt32[i] = types.NewPopulatedInt32Value(r, easy) } } - if that1 == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v42 := r.Intn(5) + this.NonnullInt32 = make([]types.Int32Value, v42) + for i := 0; i < v42; i++ { + v43 := types.NewPopulatedInt32Value(r, easy) + this.NonnullInt32[i] = *v43 } - return fmt.Errorf("that is type *RepProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *RepProtoTypes but is not nil && this == nil") } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + if r.Intn(10) != 0 { + v44 := r.Intn(5) + this.NullableUInt32 = make([]*types.UInt32Value, v44) + for i := 0; i < v44; i++ { + this.NullableUInt32[i] = types.NewPopulatedUInt32Value(r, easy) + } } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + if r.Intn(10) != 0 { + v45 := r.Intn(5) + this.NonnullUInt32 = make([]types.UInt32Value, v45) + for i := 0; i < v45; i++ { + v46 := types.NewPopulatedUInt32Value(r, easy) + this.NonnullUInt32[i] = *v46 } } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + if r.Intn(10) != 0 { + v47 := r.Intn(5) + this.NullableBool = make([]*types.BoolValue, v47) + for i := 0; i < v47; i++ { + this.NullableBool[i] = types.NewPopulatedBoolValue(r, easy) + } } - for i := range this.NullableDurations { - if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + if r.Intn(10) != 0 { + v48 := r.Intn(5) + this.NonnullBool = make([]types.BoolValue, v48) + for i := 0; i < v48; i++ { + v49 := types.NewPopulatedBoolValue(r, easy) + this.NonnullBool[i] = *v49 } } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + if r.Intn(10) != 0 { + v50 := r.Intn(5) + this.NullableString = make([]*types.StringValue, v50) + for i := 0; i < v50; i++ { + this.NullableString[i] = types.NewPopulatedStringValue(r, easy) + } } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + if r.Intn(10) != 0 { + v51 := r.Intn(5) + this.NonnullString = make([]types.StringValue, v51) + for i := 0; i < v51; i++ { + v52 := types.NewPopulatedStringValue(r, easy) + this.NonnullString[i] = *v52 } } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + if r.Intn(10) != 0 { + v53 := r.Intn(5) + this.NullableBytes = make([]*types.BytesValue, v53) + for i := 0; i < v53; i++ { + this.NullableBytes[i] = types.NewPopulatedBytesValue(r, easy) + } } - for i := range this.Durations { - if !this.Durations[i].Equal(&that1.Durations[i]) { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + if r.Intn(10) != 0 { + v54 := r.Intn(5) + this.NonnullBytes = make([]types.BytesValue, v54) + for i := 0; i < v54; i++ { + v55 := types.NewPopulatedBytesValue(r, easy) + this.NonnullBytes[i] = *v55 } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) } - return nil + return this } -func (this *RepProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return false +func NewPopulatedRepStdTypes(r randyTypes, easy bool) *RepStdTypes { + this := &RepStdTypes{} + if r.Intn(10) != 0 { + v56 := r.Intn(5) + this.NullableTimestamps = make([]*time.Time, v56) + for i := 0; i < v56; i++ { + this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) } } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if r.Intn(10) != 0 { + v57 := r.Intn(5) + this.NullableDurations = make([]*time.Duration, v57) + for i := 0; i < v57; i++ { + this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false + if r.Intn(10) != 0 { + v58 := r.Intn(5) + this.Timestamps = make([]time.Time, v58) + for i := 0; i < v58; i++ { + v59 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamps[i] = *v59 + } } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { - return false + if r.Intn(10) != 0 { + v60 := r.Intn(5) + this.Durations = make([]time.Duration, v60) + for i := 0; i < v60; i++ { + v61 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Durations[i] = *v61 } } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return false + if r.Intn(10) != 0 { + v62 := r.Intn(5) + this.NullableDouble = make([]*float64, v62) + for i := 0; i < v62; i++ { + this.NullableDouble[i] = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } } - for i := range this.NullableDurations { - if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { - return false + if r.Intn(10) != 0 { + v63 := r.Intn(5) + this.NonnullDouble = make([]float64, v63) + for i := 0; i < v63; i++ { + v64 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble[i] = *v64 } } - if len(this.Timestamps) != len(that1.Timestamps) { - return false + if r.Intn(10) != 0 { + v65 := r.Intn(5) + this.NullableFloat = make([]*float32, v65) + for i := 0; i < v65; i++ { + this.NullableFloat[i] = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { - return false + if r.Intn(10) != 0 { + v66 := r.Intn(5) + this.NonnullFloat = make([]float32, v66) + for i := 0; i < v66; i++ { + v67 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat[i] = *v67 } } - if len(this.Durations) != len(that1.Durations) { - return false + if r.Intn(10) != 0 { + v68 := r.Intn(5) + this.NullableInt64 = make([]*int64, v68) + for i := 0; i < v68; i++ { + this.NullableInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } } - for i := range this.Durations { - if !this.Durations[i].Equal(&that1.Durations[i]) { - return false + if r.Intn(10) != 0 { + v69 := r.Intn(5) + this.NonnullInt64 = make([]int64, v69) + for i := 0; i < v69; i++ { + v70 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64[i] = *v70 } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if r.Intn(10) != 0 { + v71 := r.Intn(5) + this.NullableUInt64 = make([]*uint64, v71) + for i := 0; i < v71; i++ { + this.NullableUInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } } - return true -} -func (this *RepStdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v72 := r.Intn(5) + this.NonnullUInt64 = make([]uint64, v72) + for i := 0; i < v72; i++ { + v73 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64[i] = *v73 } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*RepStdTypes) - if !ok { - that2, ok := that.(RepStdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *RepStdTypes") + if r.Intn(10) != 0 { + v74 := r.Intn(5) + this.NullableInt32 = make([]*int32, v74) + for i := 0; i < v74; i++ { + this.NullableInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v75 := r.Intn(5) + this.NonnullInt32 = make([]int32, v75) + for i := 0; i < v75; i++ { + v76 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32[i] = *v76 } } - if that1 == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v77 := r.Intn(5) + this.NullableUInt32 = make([]*uint32, v77) + for i := 0; i < v77; i++ { + this.NullableUInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) } - return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + if r.Intn(10) != 0 { + v78 := r.Intn(5) + this.NonnullUInt32 = make([]uint32, v78) + for i := 0; i < v78; i++ { + v79 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32[i] = *v79 } } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + if r.Intn(10) != 0 { + v80 := r.Intn(5) + this.NullableBool = make([]*bool, v80) + for i := 0; i < v80; i++ { + this.NullableBool[i] = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + if r.Intn(10) != 0 { + v81 := r.Intn(5) + this.NonnullBool = make([]bool, v81) + for i := 0; i < v81; i++ { + v82 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool[i] = *v82 } } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + if r.Intn(10) != 0 { + v83 := r.Intn(5) + this.NullableString = make([]*string, v83) + for i := 0; i < v83; i++ { + this.NullableString[i] = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + if r.Intn(10) != 0 { + v84 := r.Intn(5) + this.NonnullString = make([]string, v84) + for i := 0; i < v84; i++ { + v85 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString[i] = *v85 } } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + if r.Intn(10) != 0 { + v86 := r.Intn(5) + this.NullableBytes = make([]*[]byte, v86) + for i := 0; i < v86; i++ { + this.NullableBytes[i] = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + } } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + if r.Intn(10) != 0 { + v87 := r.Intn(5) + this.NonnullBytes = make([][]byte, v87) + for i := 0; i < v87; i++ { + v88 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes[i] = *v88 } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) } - return nil + return this } -func (this *RepStdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*RepStdTypes) - if !ok { - that2, ok := that.(RepStdTypes) - if ok { - that1 = &that2 - } else { - return false +func NewPopulatedMapProtoTypes(r randyTypes, easy bool) *MapProtoTypes { + this := &MapProtoTypes{} + if r.Intn(10) != 0 { + v89 := r.Intn(10) + this.NullableTimestamp = make(map[int32]*types.Timestamp) + for i := 0; i < v89; i++ { + this.NullableTimestamp[int32(r.Int31())] = types.NewPopulatedTimestamp(r, easy) } } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if r.Intn(10) != 0 { + v90 := r.Intn(10) + this.Timestamp = make(map[int32]types.Timestamp) + for i := 0; i < v90; i++ { + this.Timestamp[int32(r.Int31())] = *types.NewPopulatedTimestamp(r, easy) + } } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false + if r.Intn(10) != 0 { + v91 := r.Intn(10) + this.NullableDuration = make(map[int32]*types.Duration) + for i := 0; i < v91; i++ { + this.NullableDuration[int32(r.Int31())] = types.NewPopulatedDuration(r, easy) + } } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return false + if r.Intn(10) != 0 { + v92 := r.Intn(10) + this.Duration = make(map[int32]types.Duration) + for i := 0; i < v92; i++ { + this.Duration[int32(r.Int31())] = *types.NewPopulatedDuration(r, easy) } } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return false + if r.Intn(10) != 0 { + v93 := r.Intn(10) + this.NullableDouble = make(map[int32]*types.DoubleValue) + for i := 0; i < v93; i++ { + this.NullableDouble[int32(r.Int31())] = types.NewPopulatedDoubleValue(r, easy) + } } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false + if r.Intn(10) != 0 { + v94 := r.Intn(10) + this.NonnullDouble = make(map[int32]types.DoubleValue) + for i := 0; i < v94; i++ { + this.NonnullDouble[int32(r.Int31())] = *types.NewPopulatedDoubleValue(r, easy) } } - if len(this.Timestamps) != len(that1.Timestamps) { - return false + if r.Intn(10) != 0 { + v95 := r.Intn(10) + this.NullableFloat = make(map[int32]*types.FloatValue) + for i := 0; i < v95; i++ { + this.NullableFloat[int32(r.Int31())] = types.NewPopulatedFloatValue(r, easy) + } } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return false + if r.Intn(10) != 0 { + v96 := r.Intn(10) + this.NonnullFloat = make(map[int32]types.FloatValue) + for i := 0; i < v96; i++ { + this.NonnullFloat[int32(r.Int31())] = *types.NewPopulatedFloatValue(r, easy) } } - if len(this.Durations) != len(that1.Durations) { - return false + if r.Intn(10) != 0 { + v97 := r.Intn(10) + this.NullableInt64 = make(map[int32]*types.Int64Value) + for i := 0; i < v97; i++ { + this.NullableInt64[int32(r.Int31())] = types.NewPopulatedInt64Value(r, easy) + } } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return false + if r.Intn(10) != 0 { + v98 := r.Intn(10) + this.NonnullInt64 = make(map[int32]types.Int64Value) + for i := 0; i < v98; i++ { + this.NonnullInt64[int32(r.Int31())] = *types.NewPopulatedInt64Value(r, easy) } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if r.Intn(10) != 0 { + v99 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*types.UInt64Value) + for i := 0; i < v99; i++ { + this.NullableUInt64[int32(r.Int31())] = types.NewPopulatedUInt64Value(r, easy) + } } - return true -} -func (this *MapProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v100 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]types.UInt64Value) + for i := 0; i < v100; i++ { + this.NonnullUInt64[int32(r.Int31())] = *types.NewPopulatedUInt64Value(r, easy) } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*MapProtoTypes) - if !ok { - that2, ok := that.(MapProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *MapProtoTypes") + if r.Intn(10) != 0 { + v101 := r.Intn(10) + this.NullableInt32 = make(map[int32]*types.Int32Value) + for i := 0; i < v101; i++ { + this.NullableInt32[int32(r.Int31())] = types.NewPopulatedInt32Value(r, easy) } } - if that1 == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v102 := r.Intn(10) + this.NonnullInt32 = make(map[int32]types.Int32Value) + for i := 0; i < v102; i++ { + this.NonnullInt32[int32(r.Int31())] = *types.NewPopulatedInt32Value(r, easy) } - return fmt.Errorf("that is type *MapProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *MapProtoTypes but is not nil && this == nil") } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + if r.Intn(10) != 0 { + v103 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*types.UInt32Value) + for i := 0; i < v103; i++ { + this.NullableUInt32[int32(r.Int31())] = types.NewPopulatedUInt32Value(r, easy) + } } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + if r.Intn(10) != 0 { + v104 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]types.UInt32Value) + for i := 0; i < v104; i++ { + this.NonnullUInt32[int32(r.Int31())] = *types.NewPopulatedUInt32Value(r, easy) } } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + if r.Intn(10) != 0 { + v105 := r.Intn(10) + this.NullableBool = make(map[int32]*types.BoolValue) + for i := 0; i < v105; i++ { + this.NullableBool[int32(r.Int31())] = types.NewPopulatedBoolValue(r, easy) + } } - for i := range this.Timestamp { - a := this.Timestamp[i] - b := that1.Timestamp[i] - if !(&a).Equal(&b) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + if r.Intn(10) != 0 { + v106 := r.Intn(10) + this.NonnullBool = make(map[int32]types.BoolValue) + for i := 0; i < v106; i++ { + this.NonnullBool[int32(r.Int31())] = *types.NewPopulatedBoolValue(r, easy) } } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + if r.Intn(10) != 0 { + v107 := r.Intn(10) + this.NullableString = make(map[int32]*types.StringValue) + for i := 0; i < v107; i++ { + this.NullableString[int32(r.Int31())] = types.NewPopulatedStringValue(r, easy) + } } - for i := range this.NullableDuration { - if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + if r.Intn(10) != 0 { + v108 := r.Intn(10) + this.NonnullString = make(map[int32]types.StringValue) + for i := 0; i < v108; i++ { + this.NonnullString[int32(r.Int31())] = *types.NewPopulatedStringValue(r, easy) } } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + if r.Intn(10) != 0 { + v109 := r.Intn(10) + this.NullableBytes = make(map[int32]*types.BytesValue) + for i := 0; i < v109; i++ { + this.NullableBytes[int32(r.Int31())] = types.NewPopulatedBytesValue(r, easy) + } } - for i := range this.Duration { - a := this.Duration[i] - b := that1.Duration[i] - if !(&a).Equal(&b) { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + if r.Intn(10) != 0 { + v110 := r.Intn(10) + this.NonnullBytes = make(map[int32]types.BytesValue) + for i := 0; i < v110; i++ { + this.NonnullBytes[int32(r.Int31())] = *types.NewPopulatedBytesValue(r, easy) } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) } - return nil + return this } -func (this *MapProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*MapProtoTypes) - if !ok { - that2, ok := that.(MapProtoTypes) - if ok { - that1 = &that2 - } else { - return false +func NewPopulatedMapStdTypes(r randyTypes, easy bool) *MapStdTypes { + this := &MapStdTypes{} + if r.Intn(10) != 0 { + v111 := r.Intn(10) + this.NullableTimestamp = make(map[int32]*time.Time) + for i := 0; i < v111; i++ { + this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) } } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if r.Intn(10) != 0 { + v112 := r.Intn(10) + this.Timestamp = make(map[int32]time.Time) + for i := 0; i < v112; i++ { + this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return false + if r.Intn(10) != 0 { + v113 := r.Intn(10) + this.NullableDuration = make(map[int32]*time.Duration) + for i := 0; i < v113; i++ { + this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { - return false + if r.Intn(10) != 0 { + v114 := r.Intn(10) + this.Duration = make(map[int32]time.Duration) + for i := 0; i < v114; i++ { + this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) } } - if len(this.Timestamp) != len(that1.Timestamp) { - return false + if r.Intn(10) != 0 { + v115 := r.Intn(10) + this.NullableDouble = make(map[int32]*float64) + for i := 0; i < v115; i++ { + this.NullableDouble[int32(r.Int31())] = (*float64)(github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } } - for i := range this.Timestamp { - a := this.Timestamp[i] - b := that1.Timestamp[i] - if !(&a).Equal(&b) { - return false + if r.Intn(10) != 0 { + v116 := r.Intn(10) + this.NonnullDouble = make(map[int32]float64) + for i := 0; i < v116; i++ { + this.NonnullDouble[int32(r.Int31())] = (float64)(*github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) } } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return false + if r.Intn(10) != 0 { + v117 := r.Intn(10) + this.NullableFloat = make(map[int32]*float32) + for i := 0; i < v117; i++ { + this.NullableFloat[int32(r.Int31())] = (*float32)(github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } } - for i := range this.NullableDuration { - if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { - return false + if r.Intn(10) != 0 { + v118 := r.Intn(10) + this.NonnullFloat = make(map[int32]float32) + for i := 0; i < v118; i++ { + this.NonnullFloat[int32(r.Int31())] = (float32)(*github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) } } - if len(this.Duration) != len(that1.Duration) { - return false + if r.Intn(10) != 0 { + v119 := r.Intn(10) + this.NullableInt64 = make(map[int32]*int64) + for i := 0; i < v119; i++ { + this.NullableInt64[int32(r.Int31())] = (*int64)(github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } } - for i := range this.Duration { - a := this.Duration[i] - b := that1.Duration[i] - if !(&a).Equal(&b) { - return false + if r.Intn(10) != 0 { + v120 := r.Intn(10) + this.NonnullInt64 = make(map[int32]int64) + for i := 0; i < v120; i++ { + this.NonnullInt64[int32(r.Int31())] = (int64)(*github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if r.Intn(10) != 0 { + v121 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*uint64) + for i := 0; i < v121; i++ { + this.NullableUInt64[int32(r.Int31())] = (*uint64)(github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } } - return true -} -func (this *MapStdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v122 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]uint64) + for i := 0; i < v122; i++ { + this.NonnullUInt64[int32(r.Int31())] = (uint64)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*MapStdTypes) - if !ok { - that2, ok := that.(MapStdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *MapStdTypes") + if r.Intn(10) != 0 { + v123 := r.Intn(10) + this.NullableInt32 = make(map[int32]*int32) + for i := 0; i < v123; i++ { + this.NullableInt32[int32(r.Int31())] = (*int32)(github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) } } - if that1 == nil { - if this == nil { - return nil + if r.Intn(10) != 0 { + v124 := r.Intn(10) + this.NonnullInt32 = make(map[int32]int32) + for i := 0; i < v124; i++ { + this.NonnullInt32[int32(r.Int31())] = (int32)(*github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) } - return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + if r.Intn(10) != 0 { + v125 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*uint32) + for i := 0; i < v125; i++ { + this.NullableUInt32[int32(r.Int31())] = (*uint32)(github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + if r.Intn(10) != 0 { + v126 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]uint32) + for i := 0; i < v126; i++ { + this.NonnullUInt32[int32(r.Int31())] = (uint32)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) } } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + if r.Intn(10) != 0 { + v127 := r.Intn(10) + this.NullableBool = make(map[int32]*bool) + for i := 0; i < v127; i++ { + this.NullableBool[int32(r.Int31())] = (*bool)(github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + if r.Intn(10) != 0 { + v128 := r.Intn(10) + this.NonnullBool = make(map[int32]bool) + for i := 0; i < v128; i++ { + this.NonnullBool[int32(r.Int31())] = (bool)(*github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) } } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + if r.Intn(10) != 0 { + v129 := r.Intn(10) + this.NullableString = make(map[int32]*string) + for i := 0; i < v129; i++ { + this.NullableString[int32(r.Int31())] = (*string)(github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + if r.Intn(10) != 0 { + v130 := r.Intn(10) + this.NonnullString = make(map[int32]string) + for i := 0; i < v130; i++ { + this.NonnullString[int32(r.Int31())] = (string)(*github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) } } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + if r.Intn(10) != 0 { + v131 := r.Intn(10) + this.NullableBytes = make(map[int32]*[]byte) + for i := 0; i < v131; i++ { + this.NullableBytes[int32(r.Int31())] = (*[]byte)(github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + if r.Intn(10) != 0 { + v132 := r.Intn(10) + this.NonnullBytes = make(map[int32][]byte) + for i := 0; i < v132; i++ { + this.NonnullBytes[int32(r.Int31())] = ([]byte)(*github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) } } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) } - return nil + return this } -func (this *MapStdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + +func NewPopulatedOneofProtoTypes(r randyTypes, easy bool) *OneofProtoTypes { + this := &OneofProtoTypes{} + oneofNumber_OneOfProtoTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] + switch oneofNumber_OneOfProtoTimes { + case 1: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Timestamp(r, easy) + case 2: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Duration(r, easy) + case 3: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepDouble(r, easy) + case 4: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepFloat(r, easy) + case 5: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepInt64(r, easy) + case 6: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepUInt64(r, easy) + case 7: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepInt32(r, easy) + case 8: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepUInt32(r, easy) + case 9: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepBool(r, easy) + case 10: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepString(r, easy) + case 11: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepBytes(r, easy) } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} - that1, ok := that.(*MapStdTypes) - if !ok { - that2, ok := that.(MapStdTypes) - if ok { - that1 = &that2 - } else { - return false - } +func NewPopulatedOneofProtoTypes_Timestamp(r randyTypes, easy bool) *OneofProtoTypes_Timestamp { + this := &OneofProtoTypes_Timestamp{} + this.Timestamp = types.NewPopulatedTimestamp(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_Duration(r randyTypes, easy bool) *OneofProtoTypes_Duration { + this := &OneofProtoTypes_Duration{} + this.Duration = types.NewPopulatedDuration(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepDouble(r randyTypes, easy bool) *OneofProtoTypes_RepDouble { + this := &OneofProtoTypes_RepDouble{} + this.RepDouble = types.NewPopulatedDoubleValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepFloat(r randyTypes, easy bool) *OneofProtoTypes_RepFloat { + this := &OneofProtoTypes_RepFloat{} + this.RepFloat = types.NewPopulatedFloatValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepInt64(r randyTypes, easy bool) *OneofProtoTypes_RepInt64 { + this := &OneofProtoTypes_RepInt64{} + this.RepInt64 = types.NewPopulatedInt64Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepUInt64(r randyTypes, easy bool) *OneofProtoTypes_RepUInt64 { + this := &OneofProtoTypes_RepUInt64{} + this.RepUInt64 = types.NewPopulatedUInt64Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepInt32(r randyTypes, easy bool) *OneofProtoTypes_RepInt32 { + this := &OneofProtoTypes_RepInt32{} + this.RepInt32 = types.NewPopulatedInt32Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepUInt32(r randyTypes, easy bool) *OneofProtoTypes_RepUInt32 { + this := &OneofProtoTypes_RepUInt32{} + this.RepUInt32 = types.NewPopulatedUInt32Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepBool(r randyTypes, easy bool) *OneofProtoTypes_RepBool { + this := &OneofProtoTypes_RepBool{} + this.RepBool = types.NewPopulatedBoolValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepString(r randyTypes, easy bool) *OneofProtoTypes_RepString { + this := &OneofProtoTypes_RepString{} + this.RepString = types.NewPopulatedStringValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepBytes(r randyTypes, easy bool) *OneofProtoTypes_RepBytes { + this := &OneofProtoTypes_RepBytes{} + this.RepBytes = types.NewPopulatedBytesValue(r, easy) + return this +} +func NewPopulatedOneofStdTypes(r randyTypes, easy bool) *OneofStdTypes { + this := &OneofStdTypes{} + oneofNumber_OneOfStdTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] + switch oneofNumber_OneOfStdTimes { + case 1: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) + case 2: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) + case 3: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepDouble(r, easy) + case 4: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepFloat(r, easy) + case 5: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt64(r, easy) + case 6: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt64(r, easy) + case 7: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt32(r, easy) + case 8: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt32(r, easy) + case 9: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBool(r, easy) + case 10: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepString(r, easy) + case 11: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBytes(r, easy) } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return false + return this +} + +func NewPopulatedOneofStdTypes_Timestamp(r randyTypes, easy bool) *OneofStdTypes_Timestamp { + this := &OneofStdTypes_Timestamp{} + this.Timestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + return this +} +func NewPopulatedOneofStdTypes_Duration(r randyTypes, easy bool) *OneofStdTypes_Duration { + this := &OneofStdTypes_Duration{} + this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepDouble(r randyTypes, easy bool) *OneofStdTypes_RepDouble { + this := &OneofStdTypes_RepDouble{} + this.RepDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepFloat(r randyTypes, easy bool) *OneofStdTypes_RepFloat { + this := &OneofStdTypes_RepFloat{} + this.RepFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt64(r randyTypes, easy bool) *OneofStdTypes_RepInt64 { + this := &OneofStdTypes_RepInt64{} + this.RepInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt64(r randyTypes, easy bool) *OneofStdTypes_RepUInt64 { + this := &OneofStdTypes_RepUInt64{} + this.RepUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt32(r randyTypes, easy bool) *OneofStdTypes_RepInt32 { + this := &OneofStdTypes_RepInt32{} + this.RepInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt32(r randyTypes, easy bool) *OneofStdTypes_RepUInt32 { + this := &OneofStdTypes_RepUInt32{} + this.RepUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBool(r randyTypes, easy bool) *OneofStdTypes_RepBool { + this := &OneofStdTypes_RepBool{} + this.RepBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepString(r randyTypes, easy bool) *OneofStdTypes_RepString { + this := &OneofStdTypes_RepString{} + this.RepString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBytes(r randyTypes, easy bool) *OneofStdTypes_RepBytes { + this := &OneofStdTypes_RepBytes{} + this.RepBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + return this +} + +type randyTypes interface { + Float32() float32 + Float64() float64 + Int63() int64 + Int31() int32 + Uint32() uint32 + Intn(n int) int +} + +func randUTF8RuneTypes(r randyTypes) rune { + ru := r.Intn(62) + if ru < 10 { + return rune(ru + 48) + } else if ru < 36 { + return rune(ru + 55) } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return false - } + return rune(ru + 61) +} +func randStringTypes(r randyTypes) string { + v133 := r.Intn(100) + tmps := make([]rune, v133) + for i := 0; i < v133; i++ { + tmps[i] = randUTF8RuneTypes(r) } - if len(this.Timestamp) != len(that1.Timestamp) { - return false + return string(tmps) +} +func randUnrecognizedTypes(r randyTypes, maxFieldNumber int) (dAtA []byte) { + l := r.Intn(5) + for i := 0; i < l; i++ { + wire := r.Intn(4) + if wire == 3 { + wire = 5 + } + fieldNumber := maxFieldNumber + r.Intn(100) + dAtA = randFieldTypes(dAtA, r, fieldNumber, wire) } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return false + return dAtA +} +func randFieldTypes(dAtA []byte, r randyTypes, fieldNumber int, wire int) []byte { + key := uint32(fieldNumber)<<3 | uint32(wire) + switch wire { + case 0: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + v134 := r.Int63() + if r.Intn(2) == 0 { + v134 *= -1 + } + dAtA = encodeVarintPopulateTypes(dAtA, uint64(v134)) + case 1: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + case 2: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + ll := r.Intn(100) + dAtA = encodeVarintPopulateTypes(dAtA, uint64(ll)) + for j := 0; j < ll; j++ { + dAtA = append(dAtA, byte(r.Intn(256))) } + default: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return false + return dAtA +} +func encodeVarintPopulateTypes(dAtA []byte, v uint64) []byte { + for v >= 1<<7 { + dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) + v >>= 7 } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false - } + dAtA = append(dAtA, uint8(v)) + return dAtA +} +func (m *KnownTypes) Size() (n int) { + if m == nil { + return 0 } - if len(this.Duration) != len(that1.Duration) { - return false + var l int + _ = l + if m.Dur != nil { + l = m.Dur.Size() + n += 1 + l + sovTypes(uint64(l)) } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return false - } + if m.Ts != nil { + l = m.Ts.Size() + n += 1 + l + sovTypes(uint64(l)) } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if m.Dbl != nil { + l = m.Dbl.Size() + n += 1 + l + sovTypes(uint64(l)) } - return true -} -func (this *OneofProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + if m.Flt != nil { + l = m.Flt.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.I64 != nil { + l = m.I64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.U64 != nil { + l = m.U64.Size() + n += 1 + l + sovTypes(uint64(l)) } - - that1, ok := that.(*OneofProtoTypes) - if !ok { - that2, ok := that.(OneofProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofProtoTypes") - } + if m.I32 != nil { + l = m.I32.Size() + n += 1 + l + sovTypes(uint64(l)) } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes but is not nil && this == nil") + if m.U32 != nil { + l = m.U32.Size() + n += 1 + l + sovTypes(uint64(l)) } - if that1.OneOfProtoTimes == nil { - if this.OneOfProtoTimes != nil { - return fmt.Errorf("this.OneOfProtoTimes != nil && that1.OneOfProtoTimes == nil") - } - } else if this.OneOfProtoTimes == nil { - return fmt.Errorf("this.OneOfProtoTimes == nil && that1.OneOfProtoTimes != nil") - } else if err := this.OneOfProtoTimes.VerboseEqual(that1.OneOfProtoTimes); err != nil { - return err + if m.Bool != nil { + l = m.Bool.Size() + n += 1 + l + sovTypes(uint64(l)) } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if m.Str != nil { + l = m.Str.Size() + n += 1 + l + sovTypes(uint64(l)) } - return nil -} -func (this *OneofProtoTypes_Timestamp) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + if m.Bytes != nil { + l = m.Bytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } + return n +} - that1, ok := that.(*OneofProtoTypes_Timestamp) - if !ok { - that2, ok := that.(OneofProtoTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofProtoTypes_Timestamp") - } +func (m *ProtoTypes) Size() (n int) { + if m == nil { + return 0 } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is not nil && this == nil") + var l int + _ = l + if m.NullableTimestamp != nil { + l = m.NullableTimestamp.Size() + n += 1 + l + sovTypes(uint64(l)) } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + if m.NullableDuration != nil { + l = m.NullableDuration.Size() + n += 1 + l + sovTypes(uint64(l)) } - return nil -} -func (this *OneofProtoTypes_Duration) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + if m.NullableDouble != nil { + l = m.NullableDouble.Size() + n += 1 + l + sovTypes(uint64(l)) } - - that1, ok := that.(*OneofProtoTypes_Duration) - if !ok { - that2, ok := that.(OneofProtoTypes_Duration) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofProtoTypes_Duration") - } + if m.NullableFloat != nil { + l = m.NullableFloat.Size() + n += 1 + l + sovTypes(uint64(l)) } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofProtoTypes_Duration but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes_Duration but is not nil && this == nil") + if m.NullableInt64 != nil { + l = m.NullableInt64.Size() + n += 1 + l + sovTypes(uint64(l)) } - if !this.Duration.Equal(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + if m.NullableUInt64 != nil { + l = m.NullableUInt64.Size() + n += 1 + l + sovTypes(uint64(l)) } - return nil -} -func (this *OneofProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + if m.NullableInt32 != nil { + l = m.NullableInt32.Size() + n += 1 + l + sovTypes(uint64(l)) } - - that1, ok := that.(*OneofProtoTypes) - if !ok { - that2, ok := that.(OneofProtoTypes) - if ok { - that1 = &that2 - } else { - return false - } + if m.NullableUInt32 != nil { + l = m.NullableUInt32.Size() + n += 1 + l + sovTypes(uint64(l)) } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if m.NullableBool != nil { + l = m.NullableBool.Size() + n += 1 + l + sovTypes(uint64(l)) } - if that1.OneOfProtoTimes == nil { - if this.OneOfProtoTimes != nil { - return false - } - } else if this.OneOfProtoTimes == nil { - return false - } else if !this.OneOfProtoTimes.Equal(that1.OneOfProtoTimes) { - return false + if m.NullableString != nil { + l = m.NullableString.Size() + n += 1 + l + sovTypes(uint64(l)) } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if m.NullableBytes != nil { + l = m.NullableBytes.Size() + n += 1 + l + sovTypes(uint64(l)) } - return true -} -func (this *OneofProtoTypes_Timestamp) Equal(that interface{}) bool { - if that == nil { - return this == nil + l = m.Timestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.Duration.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullInt64.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullUInt64.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullInt32.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullUInt32.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullBool.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullString.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullBytes.Size() + n += 2 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } + return n +} - that1, ok := that.(*OneofProtoTypes_Timestamp) - if !ok { - that2, ok := that.(OneofProtoTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return false - } +func (m *StdTypes) Size() (n int) { + if m == nil { + return 0 } - if that1 == nil { - return this == nil - } else if this == nil { - return false + var l int + _ = l + if m.NullableTimestamp != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp) + n += 1 + l + sovTypes(uint64(l)) } - if !this.Timestamp.Equal(that1.Timestamp) { - return false + if m.NullableDuration != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration) + n += 1 + l + sovTypes(uint64(l)) } - return true -} -func (this *OneofProtoTypes_Duration) Equal(that interface{}) bool { - if that == nil { - return this == nil + if m.NullableDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.NullableDouble) + n += 1 + l + sovTypes(uint64(l)) } - - that1, ok := that.(*OneofProtoTypes_Duration) - if !ok { - that2, ok := that.(OneofProtoTypes_Duration) - if ok { - that1 = &that2 - } else { - return false - } + if m.NullableFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.NullableFloat) + n += 1 + l + sovTypes(uint64(l)) } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if m.NullableInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.NullableInt64) + n += 1 + l + sovTypes(uint64(l)) } - if !this.Duration.Equal(that1.Duration) { - return false + if m.NullableUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.NullableUInt64) + n += 1 + l + sovTypes(uint64(l)) } - return true -} -func (this *OneofStdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + if m.NullableInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.NullableInt32) + n += 1 + l + sovTypes(uint64(l)) } - - that1, ok := that.(*OneofStdTypes) - if !ok { - that2, ok := that.(OneofStdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofStdTypes") - } + if m.NullableUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.NullableUInt32) + n += 1 + l + sovTypes(uint64(l)) } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + if m.NullableBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.NullableBool) + n += 1 + l + sovTypes(uint64(l)) } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { - return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") - } - } else if this.OneOfStdTimes == nil { - return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") - } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { - return err + if m.NullableString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.NullableString) + n += 1 + l + sovTypes(uint64(l)) } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if m.NullableBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.NullableBytes) + n += 1 + l + sovTypes(uint64(l)) } - return nil -} -func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDouble(m.NonnullDouble) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdFloat(m.NonnullFloat) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdInt64(m.NonnullInt64) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(m.NonnullUInt64) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdInt32(m.NonnullInt32) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(m.NonnullUInt32) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdBool(m.NonnullBool) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdString(m.NonnullString) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdBytes(m.NonnullBytes) + n += 2 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } + return n +} - that1, ok := that.(*OneofStdTypes_Timestamp) - if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") - } +func (m *RepProtoTypes) Size() (n int) { + if m == nil { + return 0 } - if that1 == nil { - if this == nil { - return nil + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, e := range m.NullableTimestamps { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") } - if that1.Timestamp == nil { - if this.Timestamp != nil { - return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + if len(m.NullableDurations) > 0 { + for _, e := range m.NullableDurations { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - } else if !this.Timestamp.Equal(*that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) } - return nil -} -func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if len(m.Timestamps) > 0 { + for _, e := range m.Timestamps { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - return fmt.Errorf("that == nil && this != nil") } - - that1, ok := that.(*OneofStdTypes_Duration) - if !ok { - that2, ok := that.(OneofStdTypes_Duration) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + if len(m.Durations) > 0 { + for _, e := range m.Durations { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } } - if that1 == nil { - if this == nil { - return nil + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - } else if this.Duration != nil { - return fmt.Errorf("this.Duration == nil && that.Duration != nil") - } else if that1.Duration != nil { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) - } - return nil -} -func (this *OneofStdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil } - - that1, ok := that.(*OneofStdTypes) - if !ok { - that2, ok := that.(OneofStdTypes) - if ok { - that1 = &that2 - } else { - return false + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { - return false + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - } else if this.OneOfStdTimes == nil { - return false - } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { - if that == nil { - return this == nil } - - that1, ok := that.(*OneofStdTypes_Timestamp) - if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return false + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.Timestamp == nil { - if this.Timestamp != nil { - return false + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - } else if !this.Timestamp.Equal(*that1.Timestamp) { - return false - } - return true -} -func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { - if that == nil { - return this == nil } - - that1, ok := that.(*OneofStdTypes_Duration) - if !ok { - that2, ok := that.(OneofStdTypes_Duration) - if ok { - that1 = &that2 - } else { - return false + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return false + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) } - } else if this.Duration != nil { - return false - } else if that1.Duration != nil { - return false - } - return true -} -func NewPopulatedKnownTypes(r randyTypes, easy bool) *KnownTypes { - this := &KnownTypes{} - if r.Intn(10) != 0 { - this.Dur = types.NewPopulatedDuration(r, easy) } - if r.Intn(10) != 0 { - this.Ts = types.NewPopulatedTimestamp(r, easy) + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Dbl = types.NewPopulatedDoubleValue(r, easy) + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Flt = types.NewPopulatedFloatValue(r, easy) + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.I64 = types.NewPopulatedInt64Value(r, easy) + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.U64 = types.NewPopulatedUInt64Value(r, easy) + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.I32 = types.NewPopulatedInt32Value(r, easy) + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.U32 = types.NewPopulatedUInt32Value(r, easy) + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Bool = types.NewPopulatedBoolValue(r, easy) + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Str = types.NewPopulatedStringValue(r, easy) + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.Bytes = types.NewPopulatedBytesValue(r, easy) + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } - return this + return n } -func NewPopulatedProtoTypes(r randyTypes, easy bool) *ProtoTypes { - this := &ProtoTypes{} - if r.Intn(10) != 0 { - this.NullableTimestamp = types.NewPopulatedTimestamp(r, easy) - } - if r.Intn(10) != 0 { - this.NullableDuration = types.NewPopulatedDuration(r, easy) - } - v1 := types.NewPopulatedTimestamp(r, easy) - this.Timestamp = *v1 - v2 := types.NewPopulatedDuration(r, easy) - this.Duration = *v2 - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) +func (m *RepStdTypes) Size() (n int) { + if m == nil { + return 0 } - return this -} - -func NewPopulatedStdTypes(r randyTypes, easy bool) *StdTypes { - this := &StdTypes{} - if r.Intn(10) != 0 { - this.NullableTimestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, e := range m.NullableTimestamps { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*e) + n += 1 + l + sovTypes(uint64(l)) + } } - if r.Intn(10) != 0 { - this.NullableDuration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(m.NullableDurations) > 0 { + for _, e := range m.NullableDurations { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*e) + n += 1 + l + sovTypes(uint64(l)) + } } - v3 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamp = *v3 - v4 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Duration = *v4 - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(m.Timestamps) > 0 { + for _, e := range m.Timestamps { + l = github_com_gogo_protobuf_types.SizeOfStdTime(e) + n += 1 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedRepProtoTypes(r randyTypes, easy bool) *RepProtoTypes { - this := &RepProtoTypes{} - if r.Intn(10) != 0 { - v5 := r.Intn(5) - this.NullableTimestamps = make([]*types.Timestamp, v5) - for i := 0; i < v5; i++ { - this.NullableTimestamps[i] = types.NewPopulatedTimestamp(r, easy) + if len(m.Durations) > 0 { + for _, e := range m.Durations { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v6 := r.Intn(5) - this.NullableDurations = make([]*types.Duration, v6) - for i := 0; i < v6; i++ { - this.NullableDurations[i] = types.NewPopulatedDuration(r, easy) + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v7 := r.Intn(5) - this.Timestamps = make([]types.Timestamp, v7) - for i := 0; i < v7; i++ { - v8 := types.NewPopulatedTimestamp(r, easy) - this.Timestamps[i] = *v8 + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v9 := r.Intn(5) - this.Durations = make([]types.Duration, v9) - for i := 0; i < v9; i++ { - v10 := types.NewPopulatedDuration(r, easy) - this.Durations[i] = *v10 + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(e) + n += 1 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedRepStdTypes(r randyTypes, easy bool) *RepStdTypes { - this := &RepStdTypes{} - if r.Intn(10) != 0 { - v11 := r.Intn(5) - this.NullableTimestamps = make([]*time.Time, v11) - for i := 0; i < v11; i++ { - this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v12 := r.Intn(5) - this.NullableDurations = make([]*time.Duration, v12) - for i := 0; i < v12; i++ { - this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v13 := r.Intn(5) - this.Timestamps = make([]time.Time, v13) - for i := 0; i < v13; i++ { - v14 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamps[i] = *v14 + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v15 := r.Intn(5) - this.Durations = make([]time.Duration, v15) - for i := 0; i < v15; i++ { - v16 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Durations[i] = *v16 + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(e) + n += 1 + l + sovTypes(uint64(l)) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*e) + n += 1 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedMapProtoTypes(r randyTypes, easy bool) *MapProtoTypes { - this := &MapProtoTypes{} - if r.Intn(10) != 0 { - v17 := r.Intn(10) - this.NullableTimestamp = make(map[int32]*types.Timestamp) - for i := 0; i < v17; i++ { - this.NullableTimestamp[int32(r.Int31())] = types.NewPopulatedTimestamp(r, easy) + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v18 := r.Intn(10) - this.Timestamp = make(map[int32]types.Timestamp) - for i := 0; i < v18; i++ { - this.Timestamp[int32(r.Int31())] = *types.NewPopulatedTimestamp(r, easy) + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*e) + n += 1 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v19 := r.Intn(10) - this.NullableDuration = make(map[int32]*types.Duration) - for i := 0; i < v19; i++ { - this.NullableDuration[int32(r.Int31())] = types.NewPopulatedDuration(r, easy) + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(e) + n += 2 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v20 := r.Intn(10) - this.Duration = make(map[int32]types.Duration) - for i := 0; i < v20; i++ { - this.Duration[int32(r.Int31())] = *types.NewPopulatedDuration(r, easy) + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*e) + n += 2 + l + sovTypes(uint64(l)) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(e) + n += 2 + l + sovTypes(uint64(l)) + } } - return this -} - -func NewPopulatedMapStdTypes(r randyTypes, easy bool) *MapStdTypes { - this := &MapStdTypes{} - if r.Intn(10) != 0 { - v21 := r.Intn(10) - this.NullableTimestamp = make(map[int32]*time.Time) - for i := 0; i < v21; i++ { - this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = github_com_gogo_protobuf_types.SizeOfStdString(*e) + n += 2 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v22 := r.Intn(10) - this.Timestamp = make(map[int32]time.Time) - for i := 0; i < v22; i++ { - this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = github_com_gogo_protobuf_types.SizeOfStdString(e) + n += 2 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v23 := r.Intn(10) - this.NullableDuration = make(map[int32]*time.Duration) - for i := 0; i < v23; i++ { - this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*e) + n += 2 + l + sovTypes(uint64(l)) } } - if r.Intn(10) != 0 { - v24 := r.Intn(10) - this.Duration = make(map[int32]time.Duration) - for i := 0; i < v24; i++ { - this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(e) + n += 2 + l + sovTypes(uint64(l)) } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } - return this + return n } -func NewPopulatedOneofProtoTypes(r randyTypes, easy bool) *OneofProtoTypes { - this := &OneofProtoTypes{} - oneofNumber_OneOfProtoTimes := []int32{1, 2}[r.Intn(2)] - switch oneofNumber_OneOfProtoTimes { - case 1: - this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Timestamp(r, easy) - case 2: - this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Duration(r, easy) +func (m *MapProtoTypes) Size() (n int) { + if m == nil { + return 0 } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 3) + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k, v := range m.NullableTimestamp { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return this -} - -func NewPopulatedOneofProtoTypes_Timestamp(r randyTypes, easy bool) *OneofProtoTypes_Timestamp { - this := &OneofProtoTypes_Timestamp{} - this.Timestamp = types.NewPopulatedTimestamp(r, easy) - return this -} -func NewPopulatedOneofProtoTypes_Duration(r randyTypes, easy bool) *OneofProtoTypes_Duration { - this := &OneofProtoTypes_Duration{} - this.Duration = types.NewPopulatedDuration(r, easy) - return this -} -func NewPopulatedOneofStdTypes(r randyTypes, easy bool) *OneofStdTypes { - this := &OneofStdTypes{} - oneofNumber_OneOfStdTimes := []int32{1, 2}[r.Intn(2)] - switch oneofNumber_OneOfStdTimes { - case 1: - this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) - case 2: - this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) + if len(m.Timestamp) > 0 { + for k, v := range m.Timestamp { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 3) + if len(m.NullableDuration) > 0 { + for k, v := range m.NullableDuration { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return this -} - -func NewPopulatedOneofStdTypes_Timestamp(r randyTypes, easy bool) *OneofStdTypes_Timestamp { - this := &OneofStdTypes_Timestamp{} - this.Timestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - return this -} -func NewPopulatedOneofStdTypes_Duration(r randyTypes, easy bool) *OneofStdTypes_Duration { - this := &OneofStdTypes_Duration{} - this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - return this -} - -type randyTypes interface { - Float32() float32 - Float64() float64 - Int63() int64 - Int31() int32 - Uint32() uint32 - Intn(n int) int -} - -func randUTF8RuneTypes(r randyTypes) rune { - ru := r.Intn(62) - if ru < 10 { - return rune(ru + 48) - } else if ru < 36 { - return rune(ru + 55) + if len(m.Duration) > 0 { + for k, v := range m.Duration { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return rune(ru + 61) -} -func randStringTypes(r randyTypes) string { - v25 := r.Intn(100) - tmps := make([]rune, v25) - for i := 0; i < v25; i++ { - tmps[i] = randUTF8RuneTypes(r) + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return string(tmps) -} -func randUnrecognizedTypes(r randyTypes, maxFieldNumber int) (dAtA []byte) { - l := r.Intn(5) - for i := 0; i < l; i++ { - wire := r.Intn(4) - if wire == 3 { - wire = 5 + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } - fieldNumber := maxFieldNumber + r.Intn(100) - dAtA = randFieldTypes(dAtA, r, fieldNumber, wire) } - return dAtA -} -func randFieldTypes(dAtA []byte, r randyTypes, fieldNumber int, wire int) []byte { - key := uint32(fieldNumber)<<3 | uint32(wire) - switch wire { - case 0: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - v26 := r.Int63() - if r.Intn(2) == 0 { - v26 *= -1 + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } - dAtA = encodeVarintPopulateTypes(dAtA, uint64(v26)) - case 1: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - case 2: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - ll := r.Intn(100) - dAtA = encodeVarintPopulateTypes(dAtA, uint64(ll)) - for j := 0; j < ll; j++ { - dAtA = append(dAtA, byte(r.Intn(256))) + } + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } - default: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - } - return dAtA -} -func encodeVarintPopulateTypes(dAtA []byte, v uint64) []byte { - for v >= 1<<7 { - dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) - v >>= 7 } - dAtA = append(dAtA, uint8(v)) - return dAtA -} -func (m *KnownTypes) Size() (n int) { - var l int - _ = l - if m.Dur != nil { - l = m.Dur.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.Ts != nil { - l = m.Ts.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.Dbl != nil { - l = m.Dbl.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.Flt != nil { - l = m.Flt.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.I64 != nil { - l = m.I64.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.U64 != nil { - l = m.U64.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.I32 != nil { - l = m.I32.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.U32 != nil { - l = m.U32.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.Bool != nil { - l = m.Bool.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.Str != nil { - l = m.Str.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.Bytes != nil { - l = m.Bytes.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - return n -} - -func (m *ProtoTypes) Size() (n int) { - var l int - _ = l - if m.NullableTimestamp != nil { - l = m.NullableTimestamp.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - if m.NullableDuration != nil { - l = m.NullableDuration.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - l = m.Timestamp.Size() - n += 1 + l + sovTypes(uint64(l)) - l = m.Duration.Size() - n += 1 + l + sovTypes(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } -func (m *StdTypes) Size() (n int) { +func (m *MapStdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.NullableTimestamp != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableTimestamp) > 0 { + for k, v := range m.NullableTimestamp { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - if m.NullableDuration != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration) - n += 1 + l + sovTypes(uint64(l)) + if len(m.Timestamp) > 0 { + for k, v := range m.Timestamp { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdTime(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) - n += 1 + l + sovTypes(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) - n += 1 + l + sovTypes(uint64(l)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(m.NullableDuration) > 0 { + for k, v := range m.NullableDuration { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return n -} - -func (m *RepProtoTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, e := range m.NullableTimestamps { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.Duration) > 0 { + for k, v := range m.Duration { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDuration(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.NullableDurations) > 0 { - for _, e := range m.NullableDurations { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Timestamps) > 0 { - for _, e := range m.Timestamps { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDouble(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Durations) > 0 { - for _, e := range m.Durations { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RepStdTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, e := range m.NullableTimestamps { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*e) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdFloat(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.NullableDurations) > 0 { - for _, e := range m.NullableDurations { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*e) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Timestamps) > 0 { - for _, e := range m.Timestamps { - l = github_com_gogo_protobuf_types.SizeOfStdTime(e) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdInt64(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Durations) > 0 { - for _, e := range m.Durations { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(e) - n += 1 + l + sovTypes(uint64(l)) + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } } - return n -} - -func (m *MapProtoTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k, v := range m.NullableTimestamp { + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { _ = k _ = v l = 0 if v != nil { - l = v.Size() + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*v) l += 1 + sovTypes(uint64(l)) } mapEntrySize := 1 + sovTypes(uint64(k)) + l n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Timestamp) > 0 { - for k, v := range m.Timestamp { + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { _ = k _ = v - l = v.Size() + l = github_com_gogo_protobuf_types.SizeOfStdInt32(v) mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.NullableDuration) > 0 { - for k, v := range m.NullableDuration { + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { _ = k _ = v l = 0 if v != nil { - l = v.Size() + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*v) l += 1 + sovTypes(uint64(l)) } mapEntrySize := 1 + sovTypes(uint64(k)) + l n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Duration) > 0 { - for k, v := range m.Duration { + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { _ = k _ = v - l = v.Size() + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(v) mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } } - return n -} - -func (m *MapStdTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k, v := range m.NullableTimestamp { + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdBool(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { _ = k _ = v l = 0 if v != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*v) + l = github_com_gogo_protobuf_types.SizeOfStdString(*v) l += 1 + sovTypes(uint64(l)) } mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Timestamp) > 0 { - for k, v := range m.Timestamp { + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { _ = k _ = v - l = github_com_gogo_protobuf_types.SizeOfStdTime(v) + l = github_com_gogo_protobuf_types.SizeOfStdString(v) mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } - if len(m.NullableDuration) > 0 { - for k, v := range m.NullableDuration { + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { _ = k _ = v l = 0 if v != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*v) l += 1 + sovTypes(uint64(l)) } mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } - if len(m.Duration) > 0 { - for k, v := range m.Duration { + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { _ = k _ = v - l = github_com_gogo_protobuf_types.SizeOfStdDuration(v) + l = github_com_gogo_protobuf_types.SizeOfStdBytes(v) mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) } } if m.XXX_unrecognized != nil { @@ -2798,6 +8733,9 @@ } func (m *OneofProtoTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.OneOfProtoTimes != nil { @@ -2810,6 +8748,9 @@ } func (m *OneofProtoTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Timestamp != nil { @@ -2819,6 +8760,9 @@ return n } func (m *OneofProtoTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Duration != nil { @@ -2827,7 +8771,118 @@ } return n } +func (m *OneofProtoTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = m.RepDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = m.RepFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = m.RepInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = m.RepUInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = m.RepInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = m.RepUInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = m.RepBool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = m.RepString.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = m.RepBytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func (m *OneofStdTypes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.OneOfStdTimes != nil { @@ -2840,6 +8895,9 @@ } func (m *OneofStdTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Timestamp != nil { @@ -2849,6 +8907,9 @@ return n } func (m *OneofStdTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Duration != nil { @@ -2857,6 +8918,114 @@ } return n } +func (m *OneofStdTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.RepDouble) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.RepFloat) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.RepInt64) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.RepUInt64) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.RepInt32) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.RepUInt32) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.RepBool) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.RepString) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.RepBytes) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func sovTypes(x uint64) (n int) { for { @@ -2872,66 +9041,152 @@ return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func init() { proto.RegisterFile("combos/neither/types.proto", fileDescriptor_types_c5bf548d49a2d5e3) } +func init() { proto.RegisterFile("combos/neither/types.proto", fileDescriptor_types_a6ccc2435d23b615) } -var fileDescriptor_types_c5bf548d49a2d5e3 = []byte{ - // 925 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0xcd, 0x8e, 0xdb, 0x54, - 0x18, 0x8d, 0x7f, 0x52, 0x32, 0x5f, 0x14, 0xda, 0x5a, 0x02, 0x99, 0x80, 0x9c, 0x21, 0x6c, 0x86, - 0x56, 0x75, 0x20, 0x89, 0x02, 0x1a, 0x54, 0x28, 0xd6, 0xb4, 0x9d, 0x52, 0x4d, 0xa7, 0x4a, 0xcb, - 0x08, 0x90, 0x40, 0xd8, 0x8d, 0x93, 0x46, 0x38, 0xbe, 0x91, 0x7d, 0x4d, 0x95, 0x1d, 0x8f, 0xc0, - 0x12, 0xc4, 0x86, 0xee, 0x90, 0x60, 0x0f, 0x4b, 0x36, 0x48, 0xdd, 0xc1, 0x13, 0x40, 0x1b, 0x36, - 0x3c, 0x42, 0x97, 0xe8, 0x5e, 0x5f, 0xff, 0xc5, 0xd7, 0x0e, 0x89, 0x34, 0x62, 0xd3, 0xdd, 0x78, - 0x7c, 0xce, 0xf1, 0xf1, 0xf1, 0xf9, 0xbe, 0x1b, 0x68, 0xde, 0x43, 0x33, 0x0b, 0xf9, 0x1d, 0xd7, - 0x9e, 0xe2, 0xfb, 0xb6, 0xd7, 0xc1, 0x8b, 0xb9, 0xed, 0xeb, 0x73, 0x0f, 0x61, 0xa4, 0x54, 0xe9, - 0x45, 0xf3, 0xd2, 0x64, 0x8a, 0xef, 0x07, 0x96, 0x7e, 0x0f, 0xcd, 0x3a, 0x13, 0x34, 0x41, 0x1d, - 0x7a, 0xd7, 0x0a, 0xc6, 0xf4, 0x8a, 0x5e, 0xd0, 0xbf, 0x42, 0x56, 0x53, 0x9b, 0x20, 0x34, 0x71, - 0xec, 0x04, 0x35, 0x0a, 0x3c, 0x13, 0x4f, 0x91, 0xcb, 0xee, 0xb7, 0x56, 0xef, 0xe3, 0xe9, 0xcc, - 0xf6, 0xb1, 0x39, 0x9b, 0x17, 0x09, 0x3c, 0xf0, 0xcc, 0xf9, 0xdc, 0xf6, 0x98, 0xad, 0xf6, 0x77, - 0x32, 0xc0, 0x4d, 0x17, 0x3d, 0x70, 0xef, 0x12, 0x7b, 0xca, 0x45, 0x90, 0x46, 0x81, 0xa7, 0x0a, - 0xbb, 0xc2, 0x5e, 0xbd, 0xfb, 0x92, 0x1e, 0x92, 0xf5, 0x88, 0xac, 0x1f, 0xb0, 0xa7, 0x0f, 0x09, - 0x4a, 0xb9, 0x00, 0x22, 0xf6, 0x55, 0x91, 0x62, 0x9b, 0x39, 0xec, 0xdd, 0xc8, 0xc9, 0x50, 0xc4, - 0xbe, 0xa2, 0x83, 0x34, 0xb2, 0x1c, 0x55, 0xa2, 0xe0, 0x57, 0xf2, 0xc2, 0x28, 0xb0, 0x1c, 0xfb, - 0xc4, 0x74, 0x02, 0x7b, 0x48, 0x80, 0xca, 0x25, 0x90, 0xc6, 0x0e, 0x56, 0x65, 0x8a, 0x7f, 0x39, - 0x87, 0xbf, 0xe6, 0x20, 0x13, 0x33, 0xf8, 0xd8, 0xc1, 0x04, 0x3e, 0x1d, 0xf4, 0xd5, 0x6a, 0x01, - 0xfc, 0x86, 0x8b, 0x07, 0x7d, 0x06, 0x9f, 0x0e, 0xfa, 0xc4, 0x4d, 0x30, 0xe8, 0xab, 0x67, 0x0a, - 0xdc, 0x7c, 0x98, 0xc6, 0x07, 0x83, 0x3e, 0x95, 0xef, 0x75, 0xd5, 0xe7, 0x8a, 0xe5, 0x7b, 0xdd, - 0x48, 0xbe, 0xd7, 0xa5, 0xf2, 0xbd, 0xae, 0x5a, 0x2b, 0x91, 0x8f, 0xf1, 0x01, 0xc5, 0xcb, 0x16, - 0x42, 0x8e, 0xba, 0x53, 0x10, 0xa5, 0x81, 0x90, 0x13, 0xc2, 0x29, 0x8e, 0xe8, 0xfb, 0xd8, 0x53, - 0xa1, 0x40, 0xff, 0x0e, 0xf6, 0xa6, 0xee, 0x84, 0xe9, 0xfb, 0xd8, 0x53, 0xde, 0x84, 0xaa, 0xb5, - 0xc0, 0xb6, 0xaf, 0xd6, 0x0b, 0x5e, 0xc0, 0x20, 0x77, 0x43, 0x42, 0x88, 0xdc, 0x97, 0xff, 0x79, - 0xd8, 0x12, 0xda, 0xdf, 0x8b, 0x00, 0xb7, 0x09, 0x28, 0x6c, 0xc7, 0x21, 0x9c, 0x77, 0x03, 0xc7, - 0x31, 0x2d, 0xc7, 0x8e, 0xbf, 0x2e, 0xeb, 0x4a, 0xd9, 0xf7, 0xcf, 0x93, 0x94, 0xab, 0x70, 0x2e, - 0xfa, 0x67, 0xd4, 0x29, 0x56, 0xa4, 0x92, 0xd2, 0xe5, 0x28, 0xca, 0xbb, 0xb0, 0x13, 0x17, 0x9e, - 0x75, 0xab, 0xc4, 0x88, 0x21, 0x3f, 0xfa, 0xb3, 0x55, 0x19, 0x26, 0x14, 0xe5, 0x1d, 0xa8, 0x45, - 0x03, 0xc5, 0xaa, 0x56, 0xfc, 0x78, 0xc6, 0x8e, 0x09, 0x2c, 0xa2, 0x9f, 0x44, 0xa8, 0xdd, 0xc1, - 0xa3, 0x30, 0xa0, 0x5b, 0x5b, 0x05, 0x64, 0xc8, 0x5f, 0xff, 0xd5, 0x12, 0x78, 0x31, 0xdd, 0xdc, - 0x22, 0x26, 0x43, 0xfe, 0x86, 0xa8, 0xe5, 0xc3, 0x32, 0x36, 0x0b, 0xab, 0x46, 0x5e, 0x97, 0x1a, - 0x4b, 0x05, 0xf6, 0xde, 0x26, 0x81, 0x51, 0x05, 0x6a, 0x26, 0x26, 0xb5, 0x7f, 0x14, 0xa1, 0x31, - 0xb4, 0xe7, 0xa9, 0x52, 0x7d, 0x00, 0x4a, 0xee, 0xc5, 0x7d, 0x55, 0xd8, 0x95, 0xd6, 0xb4, 0x8a, - 0xc3, 0x52, 0xae, 0x27, 0xf9, 0x47, 0x2e, 0xc8, 0x82, 0x92, 0xca, 0x7b, 0x95, 0xe7, 0x28, 0x57, - 0x00, 0x70, 0x62, 0x46, 0x5a, 0x67, 0x86, 0x75, 0x23, 0xc5, 0x51, 0x2e, 0xc3, 0xce, 0x28, 0xb6, - 0x20, 0xaf, 0xb1, 0x10, 0x35, 0x33, 0x66, 0xb0, 0x72, 0xfd, 0x2c, 0x42, 0x7d, 0x68, 0xcf, 0xe3, - 0x7e, 0xdd, 0xde, 0x2e, 0x2b, 0x56, 0x30, 0x5e, 0x62, 0x47, 0xdb, 0x24, 0xc6, 0x2a, 0xc6, 0xc9, - 0xed, 0x60, 0xc3, 0xdc, 0x92, 0x92, 0xa5, 0xb3, 0x7b, 0x7f, 0xa3, 0xec, 0x92, 0x9a, 0x25, 0xac, - 0xf6, 0x6f, 0x55, 0x68, 0x1c, 0x99, 0xe9, 0x9e, 0x7d, 0xcc, 0x9f, 0x4d, 0x22, 0x7e, 0x51, 0x0f, - 0x4f, 0xea, 0x0c, 0x41, 0xbf, 0xb5, 0x8a, 0xbe, 0xea, 0x62, 0x6f, 0xc1, 0x1b, 0xd3, 0xeb, 0xe9, - 0xc9, 0x0a, 0xc3, 0x7b, 0x8d, 0x2b, 0x99, 0x95, 0xca, 0xef, 0xa3, 0x13, 0xce, 0xbc, 0x87, 0x21, - 0x5e, 0x28, 0xb5, 0x18, 0x81, 0x43, 0x87, 0xf9, 0xd1, 0x3f, 0xc8, 0x8c, 0x2d, 0xd1, 0x6b, 0x73, - 0xf5, 0x32, 0x3a, 0xab, 0x0b, 0xaf, 0xf9, 0x39, 0xbc, 0xc8, 0xcf, 0x44, 0x39, 0x07, 0xd2, 0x17, - 0xf6, 0x82, 0x6e, 0xba, 0xea, 0x90, 0xfc, 0xa9, 0xbc, 0x01, 0xd5, 0x2f, 0xc9, 0x79, 0xf2, 0x1f, - 0x7e, 0x1e, 0x84, 0xc0, 0x7d, 0xf1, 0x6d, 0xa1, 0xf9, 0x11, 0x3c, 0x7f, 0x4a, 0xca, 0x9f, 0xc1, - 0x0b, 0xdc, 0xb0, 0x38, 0x0f, 0xe8, 0x64, 0x1f, 0x50, 0xb2, 0x38, 0x52, 0xfa, 0x27, 0xd0, 0x38, - 0x0d, 0xdd, 0xf6, 0xef, 0x55, 0xa8, 0x1f, 0x99, 0xc9, 0x06, 0xf8, 0xb4, 0xb8, 0xc5, 0xaf, 0x27, - 0x9f, 0x34, 0x82, 0x17, 0x74, 0xb8, 0xf8, 0xc0, 0xb9, 0x91, 0x6f, 0xf2, 0xab, 0x1c, 0xd9, 0x15, - 0x39, 0xee, 0x51, 0xf1, 0x49, 0x61, 0x97, 0xf7, 0x4a, 0x8c, 0xae, 0x34, 0xb0, 0xe0, 0x28, 0xbb, - 0x96, 0xeb, 0xf3, 0x2e, 0x47, 0x33, 0xab, 0xc5, 0x39, 0x8d, 0x9e, 0x35, 0xfa, 0x7f, 0x68, 0xf4, - 0xb7, 0x02, 0x9c, 0x3d, 0x76, 0x6d, 0x34, 0x4e, 0xed, 0xe6, 0xfd, 0x74, 0xed, 0xd6, 0xfe, 0x5e, - 0x3a, 0xcc, 0xec, 0xcc, 0xb7, 0x52, 0x5d, 0x58, 0xe7, 0xe3, 0x30, 0xb5, 0xce, 0x8c, 0xf3, 0xd4, - 0xc7, 0x31, 0xf3, 0x41, 0xf4, 0xda, 0x0f, 0x05, 0x68, 0x50, 0x6f, 0xf1, 0xbc, 0x5d, 0xd9, 0xc8, - 0x59, 0x38, 0x58, 0x59, 0x7f, 0x97, 0x37, 0xf0, 0x17, 0x16, 0x3e, 0xe3, 0xf2, 0x2c, 0x75, 0x74, - 0x4c, 0x1d, 0x11, 0x4d, 0x63, 0xef, 0xf1, 0x13, 0x4d, 0x78, 0xfa, 0x44, 0x13, 0x7e, 0x58, 0x6a, - 0xc2, 0x2f, 0x4b, 0x4d, 0xf8, 0x75, 0xa9, 0x09, 0x8f, 0x96, 0x5a, 0xe5, 0x8f, 0xa5, 0x56, 0x79, - 0xbc, 0xd4, 0x84, 0xa7, 0x4b, 0xad, 0xf2, 0xd5, 0xdf, 0x5a, 0xc5, 0x3a, 0x43, 0xf5, 0x7b, 0xff, - 0x06, 0x00, 0x00, 0xff, 0xff, 0x72, 0x11, 0x02, 0x8e, 0x97, 0x0e, 0x00, 0x00, +var fileDescriptor_types_a6ccc2435d23b615 = []byte{ + // 2297 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcf, 0x73, 0x1c, 0x47, + 0x19, 0xd5, 0x7a, 0x57, 0xb6, 0xd4, 0x92, 0x6c, 0x69, 0x1c, 0xa7, 0x06, 0x41, 0xad, 0x8d, 0x12, + 0x3b, 0x26, 0xa9, 0x48, 0x64, 0x46, 0x25, 0xc0, 0x90, 0x28, 0x99, 0xb2, 0xbd, 0xda, 0x8d, 0x64, + 0xaf, 0x57, 0x5a, 0x17, 0x04, 0x02, 0xec, 0x46, 0x63, 0x45, 0xc5, 0x7a, 0x67, 0x6b, 0x77, 0x96, + 0x94, 0x6f, 0xfc, 0x01, 0x1c, 0xb8, 0x41, 0x15, 0x17, 0xb8, 0x71, 0xe5, 0x40, 0x15, 0x47, 0x8e, + 0x39, 0xf2, 0x17, 0x40, 0x22, 0x2e, 0x5c, 0x81, 0x8b, 0x2f, 0x54, 0xa5, 0xa6, 0xbb, 0x67, 0xa6, + 0x7f, 0x7c, 0xdd, 0x3d, 0x3d, 0x25, 0xdd, 0xf6, 0x26, 0xed, 0x7e, 0xfd, 0xe6, 0xcd, 0x37, 0x6f, + 0xf4, 0xfa, 0x7d, 0xa3, 0x41, 0xeb, 0x9f, 0x44, 0xcf, 0xfb, 0xd1, 0x64, 0x6b, 0x18, 0x9e, 0xc6, + 0x9f, 0x86, 0xe3, 0xad, 0xf8, 0xc5, 0x28, 0x9c, 0x6c, 0x8e, 0xc6, 0x51, 0x1c, 0x39, 0xf3, 0xf8, + 0x97, 0xf5, 0xb7, 0x4f, 0x4e, 0xe3, 0x4f, 0xa7, 0xfd, 0xcd, 0x4f, 0xa2, 0xe7, 0x5b, 0x27, 0xd1, + 0x49, 0xb4, 0x85, 0xbf, 0xed, 0x4f, 0x9f, 0xe1, 0xdf, 0xf0, 0x2f, 0xf8, 0x27, 0xb2, 0x6a, 0xbd, + 0x7e, 0x12, 0x45, 0x27, 0x83, 0x30, 0xaf, 0x3a, 0x9e, 0x8e, 0x7b, 0xf1, 0x69, 0x34, 0xa4, 0xdf, + 0xdf, 0x14, 0xbf, 0x8f, 0x4f, 0x9f, 0x87, 0x93, 0xb8, 0xf7, 0x7c, 0xa4, 0x02, 0xf8, 0x6c, 0xdc, + 0x1b, 0x8d, 0xc2, 0x31, 0xa5, 0xb5, 0xf1, 0xfb, 0x1a, 0x42, 0x1f, 0x0e, 0xa3, 0xcf, 0x86, 0x47, + 0x09, 0x3d, 0xe7, 0x2d, 0x54, 0x3d, 0x9e, 0x8e, 0xdd, 0xca, 0xad, 0xca, 0xdd, 0x25, 0xef, 0x6b, + 0x9b, 0x64, 0xf1, 0x66, 0xba, 0x78, 0xf3, 0x3e, 0x3d, 0x7a, 0x27, 0xa9, 0x72, 0xde, 0x44, 0x97, + 0xe2, 0x89, 0x7b, 0x09, 0xd7, 0xae, 0x4b, 0xb5, 0x47, 0x29, 0x93, 0xce, 0xa5, 0x78, 0xe2, 0x6c, + 0xa2, 0xea, 0x71, 0x7f, 0xe0, 0x56, 0x71, 0xf1, 0x37, 0x64, 0xe0, 0x68, 0xda, 0x1f, 0x84, 0x4f, + 0x7b, 0x83, 0x69, 0xd8, 0x49, 0x0a, 0x9d, 0xb7, 0x51, 0xf5, 0xd9, 0x20, 0x76, 0x6b, 0xb8, 0xfe, + 0xeb, 0x52, 0xfd, 0xc3, 0x41, 0xd4, 0x8b, 0x69, 0xf9, 0xb3, 0x41, 0x9c, 0x94, 0x9f, 0xee, 0x6c, + 0xbb, 0xf3, 0x8a, 0xf2, 0xe6, 0x30, 0xde, 0xd9, 0xa6, 0xe5, 0xa7, 0x3b, 0xdb, 0x09, 0x9b, 0xe9, + 0xce, 0xb6, 0x7b, 0x59, 0xc1, 0xa6, 0xcb, 0xd6, 0x4f, 0x77, 0xb6, 0x31, 0xbc, 0xef, 0xb9, 0x57, + 0xd4, 0xf0, 0xbe, 0x97, 0xc2, 0xfb, 0x1e, 0x86, 0xf7, 0x3d, 0x77, 0x41, 0x03, 0x9f, 0xd5, 0x4f, + 0x71, 0x7d, 0xad, 0x1f, 0x45, 0x03, 0x77, 0x51, 0xd1, 0xca, 0x20, 0x8a, 0x06, 0xa4, 0x1c, 0xd7, + 0x25, 0xf8, 0x93, 0x78, 0xec, 0x22, 0x05, 0xfe, 0x61, 0x3c, 0x3e, 0x1d, 0x9e, 0x50, 0xfc, 0x49, + 0x3c, 0x76, 0xde, 0x41, 0xf3, 0xfd, 0x17, 0x71, 0x38, 0x71, 0x97, 0x14, 0x27, 0x10, 0x24, 0xdf, + 0x92, 0x05, 0xa4, 0xf2, 0x5e, 0xed, 0xdf, 0x7f, 0xbc, 0x59, 0xd9, 0xf8, 0xf5, 0x32, 0x42, 0xed, + 0xa4, 0x88, 0xa8, 0x63, 0x0f, 0xad, 0x0d, 0xa7, 0x83, 0x41, 0xaf, 0x3f, 0x08, 0xb3, 0xab, 0x4b, + 0xb5, 0xa2, 0xbb, 0xfe, 0xf2, 0x22, 0xe7, 0x01, 0x5a, 0x4d, 0x3f, 0x4c, 0x35, 0x45, 0x85, 0xa4, + 0x11, 0x9d, 0xb4, 0xc4, 0xb9, 0x8f, 0xae, 0x66, 0x9f, 0x61, 0x05, 0x15, 0x12, 0x98, 0xb0, 0xc6, + 0xf9, 0x00, 0xad, 0xa4, 0x9f, 0x60, 0x5d, 0x15, 0x51, 0x1d, 0xbf, 0x82, 0x85, 0xc0, 0xda, 0x29, + 0xa2, 0x44, 0x7e, 0x05, 0x7b, 0x2e, 0x44, 0x7f, 0x85, 0xe4, 0x29, 0xac, 0x11, 0x88, 0x14, 0xd3, + 0x2c, 0xbf, 0x42, 0x24, 0x52, 0x50, 0xc8, 0xc2, 0x1a, 0xe7, 0x3d, 0xb4, 0x9c, 0x7e, 0x12, 0x14, + 0xd3, 0x36, 0x57, 0xcf, 0xb2, 0x20, 0x7a, 0x2e, 0x24, 0x77, 0x61, 0x0d, 0xdb, 0x8e, 0xa0, 0xe8, + 0x1d, 0xc0, 0xaf, 0x70, 0xde, 0x43, 0x8b, 0xd9, 0x1f, 0x55, 0x77, 0xd9, 0x24, 0xf6, 0xa0, 0xf6, + 0xf9, 0x3f, 0x6e, 0xce, 0x75, 0xf2, 0x25, 0xce, 0xf7, 0xd1, 0x42, 0xfa, 0x47, 0xdb, 0x5d, 0x31, + 0x48, 0x9c, 0xae, 0xce, 0x16, 0x38, 0x7b, 0x68, 0x65, 0x18, 0x0d, 0x13, 0x42, 0x54, 0xdf, 0x57, + 0xcd, 0xfa, 0xa6, 0x20, 0xfc, 0x42, 0xe7, 0x01, 0x5a, 0xa6, 0x1f, 0x10, 0x8d, 0x5f, 0x33, 0x6a, + 0x9c, 0xe2, 0x70, 0xcb, 0x18, 0x18, 0xa2, 0xd1, 0x55, 0xa3, 0xce, 0x05, 0x18, 0x22, 0xd3, 0xfc, + 0xbc, 0xa8, 0xd6, 0xd7, 0xcc, 0x5a, 0x17, 0xce, 0x8b, 0x0a, 0x9e, 0x23, 0xe4, 0x7b, 0xae, 0x63, + 0xd4, 0xbb, 0x4c, 0xc8, 0xf7, 0x04, 0x42, 0xbe, 0xe7, 0x5e, 0x37, 0x6b, 0x1e, 0x20, 0xe4, 0x7b, + 0x4e, 0x80, 0x96, 0xe8, 0x07, 0x58, 0xf7, 0xaf, 0x98, 0x74, 0x4f, 0x51, 0xd8, 0x45, 0x0c, 0x1b, + 0xaa, 0xfd, 0x1b, 0x66, 0xed, 0x0b, 0x6c, 0xe8, 0x0d, 0x90, 0xb7, 0x87, 0xe8, 0xff, 0x55, 0xa3, + 0xfe, 0x85, 0xf6, 0x04, 0x8c, 0x1d, 0xfc, 0x77, 0x19, 0x2d, 0x1c, 0xc6, 0xc7, 0xc4, 0x0c, 0x1e, + 0x95, 0x32, 0x83, 0xa0, 0xf6, 0x9b, 0x7f, 0xde, 0xac, 0x40, 0x96, 0xf0, 0x61, 0x09, 0x4b, 0x08, + 0x6a, 0xbf, 0x4b, 0xd0, 0x64, 0x63, 0x68, 0x95, 0x31, 0x86, 0xa0, 0xf6, 0x87, 0x04, 0x4d, 0xb4, + 0x87, 0x86, 0xbd, 0x3d, 0x50, 0x24, 0xc1, 0x24, 0x1a, 0xf6, 0x26, 0x21, 0x02, 0x11, 0xcd, 0xb7, + 0xca, 0x58, 0x85, 0x78, 0x76, 0xf4, 0xfe, 0x69, 0xd8, 0x1b, 0x06, 0x40, 0xca, 0xf7, 0x44, 0x52, + 0xc5, 0x6c, 0x03, 0x22, 0x85, 0x2d, 0xc8, 0xd2, 0x3c, 0x28, 0x0e, 0x6f, 0x21, 0xad, 0x32, 0x16, + 0x22, 0x32, 0xa2, 0xf7, 0x51, 0xc3, 0xde, 0x48, 0xc4, 0x36, 0x11, 0x3b, 0x09, 0xec, 0xec, 0x64, + 0x21, 0xb9, 0x19, 0xf1, 0x2d, 0xc3, 0x58, 0xca, 0xae, 0x8d, 0xa5, 0x60, 0x04, 0x7c, 0x9b, 0xe4, + 0xb6, 0xb2, 0x5f, 0xc6, 0x56, 0x30, 0x10, 0x3d, 0x25, 0xce, 0x5a, 0x9a, 0xf6, 0xd6, 0x92, 0x63, + 0xf1, 0xf6, 0xd2, 0xb4, 0xb7, 0x17, 0x19, 0x8a, 0x08, 0x7b, 0xbf, 0x8c, 0xc5, 0xc8, 0xe7, 0x48, + 0x6f, 0x93, 0xa6, 0xbd, 0xcd, 0x80, 0xc4, 0x7c, 0x4f, 0x20, 0x56, 0xd0, 0x6a, 0x60, 0x62, 0xbe, + 0xe7, 0x3c, 0xb4, 0xb5, 0x9b, 0x1c, 0x89, 0xb3, 0x9c, 0xfd, 0x32, 0x96, 0x23, 0xb3, 0xa2, 0xb7, + 0x4b, 0xd3, 0xde, 0x76, 0xe4, 0x76, 0xe1, 0x2f, 0x37, 0x7e, 0xbb, 0x8c, 0x56, 0x3a, 0xe1, 0x88, + 0x89, 0x21, 0x2d, 0xe4, 0x48, 0xf6, 0x31, 0x71, 0x2b, 0xb7, 0xaa, 0x86, 0x1c, 0x02, 0xac, 0x72, + 0x1a, 0xb9, 0x8b, 0xa5, 0x77, 0x4c, 0x12, 0x69, 0xab, 0xfa, 0x24, 0x22, 0xaf, 0x71, 0xde, 0x47, + 0x28, 0xce, 0xc9, 0x54, 0x4d, 0x64, 0xa8, 0xcb, 0x32, 0x6b, 0x9c, 0x77, 0xd1, 0xe2, 0x71, 0x46, + 0xa1, 0x66, 0xa0, 0x90, 0xee, 0x33, 0xb3, 0x15, 0x40, 0x16, 0x9a, 0xc7, 0x18, 0x76, 0x59, 0x48, + 0xda, 0x70, 0x5e, 0x36, 0x83, 0xc0, 0x1b, 0x4e, 0x29, 0x55, 0x5d, 0xc1, 0x48, 0x36, 0xa9, 0x4a, + 0xdc, 0xb3, 0x2e, 0x18, 0x11, 0xc0, 0x3d, 0xab, 0x14, 0xce, 0x16, 0x15, 0x38, 0xea, 0x70, 0x26, + 0x6e, 0x7b, 0x91, 0x11, 0x01, 0xdc, 0xf6, 0xca, 0x19, 0x6f, 0x49, 0xd1, 0x5e, 0x5d, 0xc6, 0x93, + 0x36, 0xcf, 0xcb, 0x66, 0x10, 0x78, 0xf3, 0x2c, 0xa5, 0xc5, 0x15, 0xf5, 0x79, 0x29, 0xd2, 0xa2, + 0xb8, 0xff, 0xbe, 0x6a, 0x44, 0x00, 0xf7, 0xdf, 0x72, 0xe8, 0xbc, 0xa6, 0x39, 0x29, 0x55, 0xe8, + 0x94, 0x76, 0xf1, 0xab, 0x66, 0x10, 0x78, 0x17, 0x2f, 0xc6, 0xd7, 0x35, 0xc5, 0x0d, 0xad, 0x8a, + 0xaf, 0x42, 0x0a, 0x70, 0x4c, 0xcb, 0xa1, 0x14, 0x20, 0x47, 0xe0, 0xeb, 0x8a, 0xd3, 0xd1, 0x45, + 0x60, 0x29, 0x4b, 0xbc, 0x62, 0x06, 0x81, 0xb3, 0x84, 0x14, 0xa6, 0x6f, 0x28, 0xae, 0xb5, 0x3a, + 0x4c, 0xcb, 0x71, 0xa4, 0x5a, 0x3e, 0x8e, 0xfc, 0x7f, 0x19, 0x2d, 0x75, 0xc2, 0x51, 0x96, 0x48, + 0xda, 0xe5, 0x7c, 0x81, 0x46, 0x12, 0xc8, 0x1d, 0x0e, 0xca, 0xb8, 0x03, 0x0d, 0x25, 0x80, 0x47, + 0xdc, 0xb7, 0xf4, 0x88, 0x7c, 0xf3, 0xc7, 0xfa, 0xc4, 0x07, 0x56, 0x3e, 0x91, 0x6f, 0xff, 0x18, + 0xaf, 0x68, 0x95, 0xf1, 0x0a, 0x45, 0x3c, 0xda, 0x2f, 0xe3, 0x18, 0xca, 0xbd, 0x64, 0xc3, 0xde, + 0x35, 0xe0, 0xb0, 0xd5, 0xb4, 0xf7, 0x0e, 0xd5, 0xa6, 0xb4, 0x61, 0xef, 0x1f, 0x70, 0x6e, 0x6b, + 0xda, 0xbb, 0x88, 0x6a, 0x77, 0xdb, 0x2a, 0xe3, 0x24, 0x8a, 0x08, 0xb8, 0x5f, 0xc6, 0x4f, 0x94, + 0x3b, 0xe5, 0x86, 0xbd, 0xa7, 0xc0, 0x81, 0xb2, 0x69, 0xef, 0x2c, 0xaa, 0x2d, 0x77, 0xab, 0x8c, + 0xbb, 0x28, 0xb2, 0xe9, 0x7e, 0x19, 0x8f, 0x51, 0x6e, 0xdf, 0xef, 0xdb, 0xfa, 0x0c, 0x98, 0x74, + 0x1f, 0xda, 0xba, 0x8d, 0x22, 0x04, 0xb4, 0xca, 0x38, 0x8e, 0x22, 0x31, 0xef, 0x97, 0xf1, 0x1d, + 0x65, 0xa0, 0x68, 0xd8, 0x7b, 0x0f, 0x9c, 0xbf, 0x9b, 0xf6, 0x0e, 0xa4, 0x4a, 0x26, 0x7f, 0xae, + 0xa3, 0x95, 0x83, 0x1e, 0x9b, 0x4c, 0x7e, 0x04, 0xcf, 0xc4, 0x92, 0x23, 0xbc, 0xb5, 0x49, 0x9e, + 0x06, 0x72, 0x0b, 0x36, 0x1f, 0x89, 0xd5, 0x0f, 0x86, 0xf1, 0xf8, 0x05, 0x34, 0x1e, 0x6b, 0xb0, + 0x73, 0x03, 0x62, 0x41, 0xaf, 0x81, 0x90, 0x3c, 0x94, 0x3c, 0x8f, 0x7e, 0x0a, 0xcc, 0xd9, 0x88, + 0x15, 0xbd, 0xa9, 0xa5, 0x98, 0x16, 0x13, 0x86, 0xd0, 0xb3, 0x98, 0x7c, 0x28, 0x41, 0x5c, 0x69, + 0x03, 0xc4, 0xe3, 0x70, 0xa4, 0x81, 0x77, 0x5b, 0xe1, 0x4c, 0x77, 0xf5, 0xdc, 0x70, 0x29, 0x61, + 0x26, 0xfa, 0xd3, 0x21, 0xec, 0x4f, 0x6f, 0xc0, 0x80, 0x6c, 0x25, 0xcb, 0x50, 0xb0, 0xa9, 0x03, + 0xd8, 0xa6, 0xde, 0xd0, 0xb2, 0xc4, 0x95, 0x84, 0xa4, 0x60, 0x56, 0x6d, 0xd0, 0xac, 0xee, 0xe8, + 0x28, 0xe6, 0x60, 0x60, 0xe6, 0x39, 0x80, 0x3d, 0x4b, 0x4f, 0x10, 0x57, 0x0a, 0x04, 0xc9, 0x1f, + 0xf5, 0x36, 0xe8, 0x5c, 0x5a, 0x82, 0x39, 0x18, 0x18, 0x85, 0xda, 0x0a, 0x03, 0xd3, 0x5f, 0xe8, + 0x2e, 0x43, 0x51, 0xb4, 0xb1, 0x43, 0xd8, 0xc6, 0xb4, 0x17, 0xba, 0x2b, 0xb1, 0x14, 0xdc, 0xec, + 0x00, 0x76, 0x33, 0x63, 0x1f, 0x7d, 0x4f, 0xee, 0xa3, 0xef, 0xf1, 0x7d, 0xcc, 0x3c, 0xcd, 0xd4, + 0x47, 0x0a, 0x06, 0x06, 0xa7, 0xb6, 0xc2, 0xda, 0xcc, 0x7d, 0x4c, 0x29, 0x8a, 0x06, 0x77, 0x08, + 0x1b, 0x9c, 0xb1, 0x8f, 0x3c, 0x4b, 0xc1, 0xe7, 0x5a, 0xa0, 0xcf, 0xdd, 0xd1, 0x92, 0x4c, 0x0a, + 0x09, 0x45, 0xde, 0xed, 0x0e, 0x20, 0xb7, 0xbb, 0xad, 0xa3, 0x97, 0x21, 0x41, 0x31, 0xab, 0xad, + 0x30, 0x3d, 0x7d, 0x07, 0x49, 0xa9, 0xd0, 0x41, 0x6a, 0x56, 0x87, 0xb0, 0xf5, 0x69, 0x3b, 0xc8, + 0xe0, 0xc1, 0xe9, 0xeb, 0x00, 0x76, 0x40, 0xbd, 0x12, 0x71, 0xa5, 0xa0, 0x44, 0xe2, 0x83, 0x6d, + 0xd0, 0x07, 0xb5, 0x4a, 0xcc, 0xc1, 0xa0, 0x50, 0xb6, 0xfe, 0x73, 0xf4, 0x2a, 0x6c, 0x67, 0xce, + 0x2a, 0xaa, 0xfe, 0x22, 0x7c, 0x81, 0x1f, 0x0e, 0xcd, 0x77, 0x92, 0x1f, 0x9d, 0x6f, 0xa3, 0xf9, + 0x5f, 0x26, 0xde, 0x5a, 0xe0, 0xbf, 0x47, 0x48, 0xe1, 0xbd, 0x4b, 0xdf, 0xad, 0xac, 0xff, 0x10, + 0x5d, 0xbd, 0x20, 0xe4, 0x9f, 0xa2, 0x1b, 0xa0, 0xcf, 0x01, 0x07, 0xd8, 0xe2, 0x0f, 0xa0, 0x99, + 0x12, 0x32, 0xf8, 0x4f, 0xd1, 0xca, 0x85, 0xe0, 0xfe, 0x0c, 0x5d, 0x07, 0x3c, 0x10, 0x40, 0xf7, + 0x78, 0x74, 0xfd, 0x50, 0x90, 0x6b, 0x8c, 0x23, 0x7b, 0xe2, 0x39, 0xe2, 0x7f, 0x8c, 0x1c, 0xd9, + 0x1e, 0x01, 0xfc, 0x77, 0x78, 0x7c, 0xed, 0x14, 0x91, 0x81, 0xff, 0x09, 0x5a, 0x93, 0xfc, 0xf2, + 0xfc, 0xd0, 0x19, 0xf2, 0xb9, 0x8f, 0x94, 0x81, 0x67, 0x86, 0x7d, 0x20, 0xf9, 0x8b, 0x40, 0x67, + 0xa4, 0xd3, 0xd5, 0xe2, 0x1b, 0x2f, 0x6d, 0x17, 0x3e, 0x40, 0x2e, 0x9d, 0x8b, 0xc1, 0xe7, 0xbb, + 0x4f, 0xdd, 0xa7, 0x64, 0x7f, 0xd2, 0x81, 0xa2, 0xaa, 0xfb, 0xe7, 0x8e, 0x2e, 0x74, 0x5f, 0x8d, + 0x5f, 0xa8, 0x3b, 0xc0, 0x01, 0xf8, 0xee, 0x9f, 0x3f, 0xfe, 0x8f, 0xd1, 0x9a, 0xe4, 0xd3, 0x65, + 0xfe, 0x1c, 0xe7, 0x03, 0x54, 0x06, 0xfc, 0x23, 0xb4, 0x2a, 0x3a, 0xf7, 0xb9, 0x61, 0x33, 0x9d, + 0x67, 0x3c, 0xb7, 0x4c, 0x67, 0xd8, 0xa9, 0x2b, 0xd8, 0xf9, 0x8b, 0xc1, 0x67, 0x74, 0x9f, 0x3b, + 0x72, 0x19, 0x65, 0xb2, 0xff, 0xf5, 0x07, 0xe9, 0xfe, 0x02, 0xd0, 0x37, 0xfe, 0x53, 0x47, 0x4b, + 0x07, 0xbd, 0x7c, 0x66, 0xfb, 0xb1, 0x3a, 0x31, 0x7f, 0x2b, 0xdf, 0x8b, 0xa4, 0xe5, 0x8a, 0xbc, + 0xac, 0xfe, 0xa7, 0x92, 0xa6, 0x9c, 0x9a, 0xbf, 0x09, 0xc0, 0x0a, 0x70, 0xe0, 0x43, 0xf7, 0x8f, + 0x94, 0xb9, 0xf9, 0xae, 0x86, 0xa8, 0x90, 0x76, 0x15, 0xff, 0xae, 0xf2, 0x50, 0xca, 0xce, 0xb7, + 0x00, 0x4c, 0x1e, 0x0b, 0x7a, 0xae, 0x7f, 0xa4, 0x48, 0xcf, 0x77, 0x74, 0x0c, 0xd9, 0xac, 0x0b, + 0x4e, 0x78, 0xbb, 0x70, 0x82, 0xbe, 0x0d, 0x81, 0xca, 0xf9, 0x59, 0x39, 0xea, 0x7d, 0x02, 0x67, + 0xe8, 0xdb, 0x1a, 0xae, 0x6c, 0xe8, 0x85, 0x86, 0xbe, 0x1d, 0x30, 0x47, 0xbf, 0xae, 0x26, 0xca, + 0x00, 0xaa, 0xa6, 0xbf, 0x4f, 0xe0, 0x24, 0xad, 0xa3, 0xc9, 0x86, 0x4a, 0x68, 0x0e, 0xdc, 0x01, + 0xd3, 0xb4, 0x86, 0x26, 0x03, 0xa8, 0x1a, 0x08, 0x1f, 0x29, 0xf2, 0xb4, 0xee, 0xd2, 0x77, 0x25, + 0xa2, 0x62, 0xa6, 0xee, 0xc2, 0x99, 0x5a, 0x73, 0xe9, 0xbb, 0x20, 0x57, 0x21, 0x55, 0x3f, 0x81, + 0x53, 0xb5, 0xa1, 0xa7, 0x59, 0xc0, 0x84, 0xa6, 0xc5, 0x1d, 0x30, 0x59, 0xeb, 0x7b, 0x9a, 0x02, + 0xaa, 0xc6, 0xc6, 0x47, 0x8a, 0x6c, 0x6d, 0xea, 0x29, 0x4f, 0x54, 0xcc, 0xd7, 0x5d, 0x38, 0x5f, + 0x1b, 0x7a, 0x2a, 0x73, 0x15, 0x12, 0xf6, 0x23, 0x30, 0x61, 0xbf, 0xae, 0xa1, 0xca, 0xa4, 0x62, + 0x60, 0xa6, 0xfc, 0x18, 0x4a, 0xd9, 0xaf, 0xa9, 0x49, 0xe6, 0x68, 0x8a, 0xe1, 0xf2, 0x91, 0x22, + 0x67, 0xeb, 0xba, 0xc9, 0xa5, 0x62, 0x70, 0xcc, 0xdc, 0x85, 0xb3, 0xb6, 0xa6, 0x9b, 0x2c, 0xa6, + 0x72, 0xde, 0xfc, 0x04, 0x4e, 0xdb, 0x3a, 0x85, 0xb2, 0xf1, 0x18, 0x9a, 0x3c, 0x77, 0xc0, 0xc4, + 0xad, 0x51, 0x28, 0x03, 0xa8, 0x18, 0x41, 0xcf, 0x32, 0xf7, 0x2c, 0x73, 0xcf, 0x32, 0xf7, 0x2c, + 0x73, 0xcf, 0x32, 0xf7, 0x2c, 0x73, 0xcf, 0x32, 0xf7, 0x2c, 0x73, 0xc3, 0x99, 0xfb, 0x2f, 0xf3, + 0xe8, 0xda, 0xe3, 0x61, 0x18, 0x3d, 0x63, 0x9e, 0x54, 0xdf, 0x63, 0x83, 0xb1, 0xf1, 0xad, 0x8d, + 0x3d, 0xee, 0x09, 0xf2, 0x77, 0x98, 0xb4, 0x6a, 0x32, 0xce, 0x3d, 0xf6, 0xe1, 0xee, 0x0f, 0xd0, + 0xe2, 0x38, 0x1c, 0x15, 0x7f, 0x21, 0x23, 0x39, 0x6c, 0xb6, 0xc0, 0xf9, 0x1e, 0x5a, 0x18, 0x87, + 0xa3, 0xa2, 0xaf, 0x60, 0x24, 0x07, 0x4e, 0xcb, 0xe9, 0xd2, 0xa2, 0x2f, 0x5d, 0xd0, 0xa5, 0x24, + 0xaa, 0x10, 0xce, 0xc5, 0x5f, 0xb3, 0xa0, 0x9c, 0x69, 0xd0, 0xc9, 0x0e, 0x5c, 0xe8, 0xc5, 0x8a, + 0xfc, 0xc0, 0xbe, 0xc7, 0x1c, 0xb8, 0xd8, 0xab, 0x14, 0xcc, 0x81, 0x7d, 0xcf, 0xd9, 0x41, 0x57, + 0xc6, 0xe1, 0xa8, 0xd8, 0xcb, 0x13, 0x7b, 0x73, 0x9d, 0xb4, 0x98, 0x1e, 0xb5, 0xf8, 0xeb, 0x12, + 0xf4, 0xa8, 0x74, 0xd7, 0x4c, 0x4e, 0xb7, 0xe8, 0x0b, 0x12, 0xf4, 0x74, 0xf1, 0x07, 0xc1, 0x1a, + 0xd6, 0xe8, 0x63, 0xaa, 0xd1, 0x44, 0x6b, 0x1b, 0xff, 0x9b, 0x47, 0x2b, 0x58, 0xb7, 0xd9, 0xb4, + 0xe8, 0x7d, 0x2b, 0xd5, 0x92, 0xb1, 0x10, 0xaf, 0xdd, 0x77, 0x2d, 0xb4, 0x4b, 0xc6, 0x35, 0x9c, + 0x82, 0x03, 0x4b, 0x05, 0x93, 0x24, 0xc0, 0xeb, 0x78, 0xd7, 0x4a, 0xc7, 0x19, 0x42, 0xae, 0xe6, + 0x5d, 0x2b, 0x35, 0x73, 0x00, 0x44, 0x95, 0x81, 0xa5, 0xa6, 0xb9, 0xb3, 0xa0, 0xca, 0xde, 0xb5, + 0x52, 0xb6, 0x48, 0x02, 0xbf, 0x27, 0x67, 0xa7, 0x6f, 0x89, 0x04, 0xbe, 0x47, 0x8a, 0xab, 0x3c, + 0x5b, 0x9f, 0x69, 0x3d, 0xb0, 0xd4, 0x3a, 0xc7, 0x80, 0x2a, 0x7e, 0xd7, 0x4a, 0xf1, 0x5c, 0x1b, + 0x88, 0xee, 0xaf, 0x61, 0x8d, 0x3f, 0xc6, 0x1a, 0x4f, 0x54, 0x1a, 0xdc, 0xfd, 0xe2, 0xcb, 0x7a, + 0xe5, 0xe5, 0x97, 0xf5, 0xca, 0x9f, 0xce, 0xea, 0x95, 0xbf, 0x9e, 0xd5, 0x2b, 0x7f, 0x3b, 0xab, + 0x57, 0x3e, 0x3f, 0xab, 0xcf, 0xfd, 0xfd, 0xac, 0x3e, 0xf7, 0xc5, 0x59, 0xbd, 0xf2, 0xf2, 0xac, + 0x3e, 0xf7, 0xab, 0x7f, 0xd5, 0xe7, 0xfa, 0x97, 0xf1, 0x11, 0xfc, 0xaf, 0x02, 0x00, 0x00, 0xff, + 0xff, 0xf1, 0x88, 0x43, 0x17, 0x77, 0x40, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/neither/types.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/neither/types.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/neither/types.proto 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/neither/types.proto 2018-11-22 20:53:45.000000000 +0000 @@ -73,15 +73,53 @@ option (gogoproto.compare) = true; google.protobuf.Timestamp nullableTimestamp = 1; google.protobuf.Duration nullableDuration = 2; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3; + google.protobuf.FloatValue nullableFloat = 4; + google.protobuf.Int64Value nullableInt64 = 5; + google.protobuf.UInt64Value nullableUInt64 = 6; + google.protobuf.Int32Value nullableInt32 = 7; + google.protobuf.UInt32Value nullableUInt32 = 8; + google.protobuf.BoolValue nullableBool = 9; + google.protobuf.StringValue nullableString = 10; + google.protobuf.BytesValue nullableBytes = 11; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message StdTypes { google.protobuf.Timestamp nullableTimestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration nullableDuration = 2 [(gogoproto.stdduration) = true]; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3 [(gogoproto.wktpointer) = true];; + google.protobuf.FloatValue nullableFloat = 4 [(gogoproto.wktpointer) = true];; + google.protobuf.Int64Value nullableInt64 = 5 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt64Value nullableUInt64 = 6 [(gogoproto.wktpointer) = true];; + google.protobuf.Int32Value nullableInt32 = 7 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt32Value nullableUInt32 = 8 [(gogoproto.wktpointer) = true];; + google.protobuf.BoolValue nullableBool = 9 [(gogoproto.wktpointer) = true];; + google.protobuf.StringValue nullableString = 10 [(gogoproto.wktpointer) = true];; + google.protobuf.BytesValue nullableBytes = 11 [(gogoproto.wktpointer) = true];; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message RepProtoTypes { @@ -90,6 +128,33 @@ repeated google.protobuf.Duration nullableDurations = 2; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message RepStdTypes { @@ -97,6 +162,33 @@ repeated google.protobuf.Duration nullableDurations = 2 [(gogoproto.stdduration) = true]; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message MapProtoTypes { @@ -105,6 +197,33 @@ map nullableDuration = 3; map duration = 4 [(gogoproto.nullable) = false]; + + map nullableDouble = 5; + map nonnullDouble = 6 [(gogoproto.nullable) = false]; + + map nullableFloat = 7; + map nonnullFloat = 8 [(gogoproto.nullable) = false]; + + map nullableInt64 = 9; + map nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + map nullableUInt64 = 11; + map nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + map nullableInt32 = 13; + map nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + map nullableUInt32 = 15; + map nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + map nullableBool = 17; + map nonnullBool = 18 [(gogoproto.nullable) = false]; + + map nullableString = 19; + map nonnullString = 20 [(gogoproto.nullable) = false]; + + map nullableBytes = 21; + map nonnullBytes = 22 [(gogoproto.nullable) = false]; } message MapStdTypes { @@ -113,12 +232,48 @@ map nullableDuration = 3 [(gogoproto.stdduration) = true]; map duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + map nullableDouble = 5 [(gogoproto.wktpointer) = true]; + map nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableFloat = 7 [(gogoproto.wktpointer) = true]; + map nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + map nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + map nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + map nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + map nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBool = 17 [(gogoproto.wktpointer) = true]; + map nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableString = 19 [(gogoproto.wktpointer) = true]; + map nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBytes = 21 [(gogoproto.wktpointer) = true]; + map nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message OneofProtoTypes { oneof OneOfProtoTimes { google.protobuf.Timestamp timestamp = 1; google.protobuf.Duration duration = 2; + google.protobuf.DoubleValue repDouble = 3; + google.protobuf.FloatValue repFloat = 4; + google.protobuf.Int64Value repInt64 = 5; + google.protobuf.UInt64Value repUInt64 = 6; + google.protobuf.Int32Value repInt32 = 7; + google.protobuf.UInt32Value repUInt32 = 8; + google.protobuf.BoolValue repBool = 9; + google.protobuf.StringValue repString = 10; + google.protobuf.BytesValue repBytes = 11; } } @@ -126,6 +281,15 @@ oneof OneOfStdTimes { google.protobuf.Timestamp timestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration duration = 2 [(gogoproto.stdduration) = true]; + google.protobuf.DoubleValue repDouble = 3 [(gogoproto.wktpointer) = true]; + google.protobuf.FloatValue repFloat = 4 [(gogoproto.wktpointer) = true]; + google.protobuf.Int64Value repInt64 = 5 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt64Value repUInt64 = 6 [(gogoproto.wktpointer) = true]; + google.protobuf.Int32Value repInt32 = 7 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt32Value repUInt32 = 8 [(gogoproto.wktpointer) = true]; + google.protobuf.BoolValue repBool = 9 [(gogoproto.wktpointer) = true]; + google.protobuf.StringValue repString = 10 [(gogoproto.wktpointer) = true]; + google.protobuf.BytesValue repBytes = 11 [(gogoproto.wktpointer) = true]; } } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/unmarshaler/types.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/unmarshaler/types.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/unmarshaler/types.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/unmarshaler/types.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -49,7 +49,7 @@ func (m *KnownTypes) String() string { return proto.CompactTextString(m) } func (*KnownTypes) ProtoMessage() {} func (*KnownTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{0} + return fileDescriptor_types_1fa8d07678f7c296, []int{0} } func (m *KnownTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -147,20 +147,38 @@ } type ProtoTypes struct { - NullableTimestamp *types.Timestamp `protobuf:"bytes,1,opt,name=nullableTimestamp" json:"nullableTimestamp,omitempty"` - NullableDuration *types.Duration `protobuf:"bytes,2,opt,name=nullableDuration" json:"nullableDuration,omitempty"` - Timestamp types.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp"` - Duration types.Duration `protobuf:"bytes,4,opt,name=duration" json:"duration"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableTimestamp *types.Timestamp `protobuf:"bytes,1,opt,name=nullableTimestamp" json:"nullableTimestamp,omitempty"` + NullableDuration *types.Duration `protobuf:"bytes,2,opt,name=nullableDuration" json:"nullableDuration,omitempty"` + NullableDouble *types.DoubleValue `protobuf:"bytes,3,opt,name=nullableDouble" json:"nullableDouble,omitempty"` + NullableFloat *types.FloatValue `protobuf:"bytes,4,opt,name=nullableFloat" json:"nullableFloat,omitempty"` + NullableInt64 *types.Int64Value `protobuf:"bytes,5,opt,name=nullableInt64" json:"nullableInt64,omitempty"` + NullableUInt64 *types.UInt64Value `protobuf:"bytes,6,opt,name=nullableUInt64" json:"nullableUInt64,omitempty"` + NullableInt32 *types.Int32Value `protobuf:"bytes,7,opt,name=nullableInt32" json:"nullableInt32,omitempty"` + NullableUInt32 *types.UInt32Value `protobuf:"bytes,8,opt,name=nullableUInt32" json:"nullableUInt32,omitempty"` + NullableBool *types.BoolValue `protobuf:"bytes,9,opt,name=nullableBool" json:"nullableBool,omitempty"` + NullableString *types.StringValue `protobuf:"bytes,10,opt,name=nullableString" json:"nullableString,omitempty"` + NullableBytes *types.BytesValue `protobuf:"bytes,11,opt,name=nullableBytes" json:"nullableBytes,omitempty"` + Timestamp types.Timestamp `protobuf:"bytes,12,opt,name=timestamp" json:"timestamp"` + Duration types.Duration `protobuf:"bytes,13,opt,name=duration" json:"duration"` + NonnullDouble types.DoubleValue `protobuf:"bytes,14,opt,name=nonnullDouble" json:"nonnullDouble"` + NonnullFloat types.FloatValue `protobuf:"bytes,15,opt,name=nonnullFloat" json:"nonnullFloat"` + NonnullInt64 types.Int64Value `protobuf:"bytes,16,opt,name=nonnullInt64" json:"nonnullInt64"` + NonnullUInt64 types.UInt64Value `protobuf:"bytes,17,opt,name=nonnullUInt64" json:"nonnullUInt64"` + NonnullInt32 types.Int32Value `protobuf:"bytes,18,opt,name=nonnullInt32" json:"nonnullInt32"` + NonnullUInt32 types.UInt32Value `protobuf:"bytes,19,opt,name=nonnullUInt32" json:"nonnullUInt32"` + NonnullBool types.BoolValue `protobuf:"bytes,20,opt,name=nonnullBool" json:"nonnullBool"` + NonnullString types.StringValue `protobuf:"bytes,21,opt,name=nonnullString" json:"nonnullString"` + NonnullBytes types.BytesValue `protobuf:"bytes,22,opt,name=nonnullBytes" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProtoTypes) Reset() { *m = ProtoTypes{} } func (m *ProtoTypes) String() string { return proto.CompactTextString(m) } func (*ProtoTypes) ProtoMessage() {} func (*ProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{1} + return fileDescriptor_types_1fa8d07678f7c296, []int{1} } func (m *ProtoTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -194,6 +212,69 @@ return nil } +func (m *ProtoTypes) GetNullableDouble() *types.DoubleValue { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *ProtoTypes) GetNullableFloat() *types.FloatValue { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *ProtoTypes) GetNullableInt64() *types.Int64Value { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *ProtoTypes) GetNullableUInt64() *types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *ProtoTypes) GetNullableInt32() *types.Int32Value { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *ProtoTypes) GetNullableUInt32() *types.UInt32Value { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *ProtoTypes) GetNullableBool() *types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *ProtoTypes) GetNullableString() *types.StringValue { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *ProtoTypes) GetNullableBytes() *types.BytesValue { + if m != nil { + return m.NullableBytes + } + return nil +} + func (m *ProtoTypes) GetTimestamp() types.Timestamp { if m != nil { return m.Timestamp @@ -208,11 +289,92 @@ return types.Duration{} } +func (m *ProtoTypes) GetNonnullDouble() types.DoubleValue { + if m != nil { + return m.NonnullDouble + } + return types.DoubleValue{} +} + +func (m *ProtoTypes) GetNonnullFloat() types.FloatValue { + if m != nil { + return m.NonnullFloat + } + return types.FloatValue{} +} + +func (m *ProtoTypes) GetNonnullInt64() types.Int64Value { + if m != nil { + return m.NonnullInt64 + } + return types.Int64Value{} +} + +func (m *ProtoTypes) GetNonnullUInt64() types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return types.UInt64Value{} +} + +func (m *ProtoTypes) GetNonnullInt32() types.Int32Value { + if m != nil { + return m.NonnullInt32 + } + return types.Int32Value{} +} + +func (m *ProtoTypes) GetNonnullUInt32() types.UInt32Value { + if m != nil { + return m.NonnullUInt32 + } + return types.UInt32Value{} +} + +func (m *ProtoTypes) GetNonnullBool() types.BoolValue { + if m != nil { + return m.NonnullBool + } + return types.BoolValue{} +} + +func (m *ProtoTypes) GetNonnullString() types.StringValue { + if m != nil { + return m.NonnullString + } + return types.StringValue{} +} + +func (m *ProtoTypes) GetNonnullBytes() types.BytesValue { + if m != nil { + return m.NonnullBytes + } + return types.BytesValue{} +} + type StdTypes struct { NullableTimestamp *time.Time `protobuf:"bytes,1,opt,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty"` NullableDuration *time.Duration `protobuf:"bytes,2,opt,name=nullableDuration,stdduration" json:"nullableDuration,omitempty"` - Timestamp time.Time `protobuf:"bytes,3,opt,name=timestamp,stdtime" json:"timestamp"` - Duration time.Duration `protobuf:"bytes,4,opt,name=duration,stdduration" json:"duration"` + NullableDouble *float64 `protobuf:"bytes,3,opt,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NullableFloat *float32 `protobuf:"bytes,4,opt,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NullableInt64 *int64 `protobuf:"bytes,5,opt,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NullableUInt64 *uint64 `protobuf:"bytes,6,opt,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NullableInt32 *int32 `protobuf:"bytes,7,opt,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NullableUInt32 *uint32 `protobuf:"bytes,8,opt,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NullableBool *bool `protobuf:"bytes,9,opt,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NullableString *string `protobuf:"bytes,10,opt,name=nullableString,wktptr" json:"nullableString,omitempty"` + NullableBytes *[]byte `protobuf:"bytes,11,opt,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + Timestamp time.Time `protobuf:"bytes,12,opt,name=timestamp,stdtime" json:"timestamp"` + Duration time.Duration `protobuf:"bytes,13,opt,name=duration,stdduration" json:"duration"` + NonnullDouble float64 `protobuf:"bytes,14,opt,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NonnullFloat float32 `protobuf:"bytes,15,opt,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NonnullInt64 int64 `protobuf:"bytes,16,opt,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NonnullUInt64 uint64 `protobuf:"bytes,17,opt,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NonnullInt32 int32 `protobuf:"bytes,18,opt,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NonnullUInt32 uint32 `protobuf:"bytes,19,opt,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NonnullBool bool `protobuf:"bytes,20,opt,name=nonnullBool,wktptr" json:"nonnullBool"` + NonnullString string `protobuf:"bytes,21,opt,name=nonnullString,wktptr" json:"nonnullString"` + NonnullBytes []byte `protobuf:"bytes,22,opt,name=nonnullBytes,wktptr" json:"nonnullBytes"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -222,7 +384,7 @@ func (m *StdTypes) String() string { return proto.CompactTextString(m) } func (*StdTypes) ProtoMessage() {} func (*StdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{2} + return fileDescriptor_types_1fa8d07678f7c296, []int{2} } func (m *StdTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -256,6 +418,69 @@ return nil } +func (m *StdTypes) GetNullableDouble() *float64 { + if m != nil { + return m.NullableDouble + } + return nil +} + +func (m *StdTypes) GetNullableFloat() *float32 { + if m != nil { + return m.NullableFloat + } + return nil +} + +func (m *StdTypes) GetNullableInt64() *int64 { + if m != nil { + return m.NullableInt64 + } + return nil +} + +func (m *StdTypes) GetNullableUInt64() *uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil +} + +func (m *StdTypes) GetNullableInt32() *int32 { + if m != nil { + return m.NullableInt32 + } + return nil +} + +func (m *StdTypes) GetNullableUInt32() *uint32 { + if m != nil { + return m.NullableUInt32 + } + return nil +} + +func (m *StdTypes) GetNullableBool() *bool { + if m != nil { + return m.NullableBool + } + return nil +} + +func (m *StdTypes) GetNullableString() *string { + if m != nil { + return m.NullableString + } + return nil +} + +func (m *StdTypes) GetNullableBytes() *[]byte { + if m != nil { + return m.NullableBytes + } + return nil +} + func (m *StdTypes) GetTimestamp() time.Time { if m != nil { return m.Timestamp @@ -270,21 +495,102 @@ return 0 } +func (m *StdTypes) GetNonnullDouble() float64 { + if m != nil { + return m.NonnullDouble + } + return 0 +} + +func (m *StdTypes) GetNonnullFloat() float32 { + if m != nil { + return m.NonnullFloat + } + return 0 +} + +func (m *StdTypes) GetNonnullInt64() int64 { + if m != nil { + return m.NonnullInt64 + } + return 0 +} + +func (m *StdTypes) GetNonnullUInt64() uint64 { + if m != nil { + return m.NonnullUInt64 + } + return 0 +} + +func (m *StdTypes) GetNonnullInt32() int32 { + if m != nil { + return m.NonnullInt32 + } + return 0 +} + +func (m *StdTypes) GetNonnullUInt32() uint32 { + if m != nil { + return m.NonnullUInt32 + } + return 0 +} + +func (m *StdTypes) GetNonnullBool() bool { + if m != nil { + return m.NonnullBool + } + return false +} + +func (m *StdTypes) GetNonnullString() string { + if m != nil { + return m.NonnullString + } + return "" +} + +func (m *StdTypes) GetNonnullBytes() []byte { + if m != nil { + return m.NonnullBytes + } + return []byte{} +} + type RepProtoTypes struct { - NullableTimestamps []*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamps" json:"nullableTimestamps,omitempty"` - NullableDurations []*types.Duration `protobuf:"bytes,2,rep,name=nullableDurations" json:"nullableDurations,omitempty"` - Timestamps []types.Timestamp `protobuf:"bytes,3,rep,name=timestamps" json:"timestamps"` - Durations []types.Duration `protobuf:"bytes,4,rep,name=durations" json:"durations"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NullableTimestamps []*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamps" json:"nullableTimestamps,omitempty"` + NullableDurations []*types.Duration `protobuf:"bytes,2,rep,name=nullableDurations" json:"nullableDurations,omitempty"` + Timestamps []types.Timestamp `protobuf:"bytes,3,rep,name=timestamps" json:"timestamps"` + Durations []types.Duration `protobuf:"bytes,4,rep,name=durations" json:"durations"` + NullableDouble []*types.DoubleValue `protobuf:"bytes,5,rep,name=nullableDouble" json:"nullableDouble,omitempty"` + NonnullDouble []types.DoubleValue `protobuf:"bytes,6,rep,name=nonnullDouble" json:"nonnullDouble"` + NullableFloat []*types.FloatValue `protobuf:"bytes,7,rep,name=nullableFloat" json:"nullableFloat,omitempty"` + NonnullFloat []types.FloatValue `protobuf:"bytes,8,rep,name=nonnullFloat" json:"nonnullFloat"` + NullableInt64 []*types.Int64Value `protobuf:"bytes,9,rep,name=nullableInt64" json:"nullableInt64,omitempty"` + NonnullInt64 []types.Int64Value `protobuf:"bytes,10,rep,name=nonnullInt64" json:"nonnullInt64"` + NullableUInt64 []*types.UInt64Value `protobuf:"bytes,11,rep,name=nullableUInt64" json:"nullableUInt64,omitempty"` + NonnullUInt64 []types.UInt64Value `protobuf:"bytes,12,rep,name=nonnullUInt64" json:"nonnullUInt64"` + NullableInt32 []*types.Int32Value `protobuf:"bytes,13,rep,name=nullableInt32" json:"nullableInt32,omitempty"` + NonnullInt32 []types.Int32Value `protobuf:"bytes,14,rep,name=nonnullInt32" json:"nonnullInt32"` + NullableUInt32 []*types.UInt32Value `protobuf:"bytes,15,rep,name=nullableUInt32" json:"nullableUInt32,omitempty"` + NonnullUInt32 []types.UInt32Value `protobuf:"bytes,16,rep,name=nonnullUInt32" json:"nonnullUInt32"` + NullableBool []*types.BoolValue `protobuf:"bytes,17,rep,name=nullableBool" json:"nullableBool,omitempty"` + NonnullBool []types.BoolValue `protobuf:"bytes,18,rep,name=nonnullBool" json:"nonnullBool"` + NullableString []*types.StringValue `protobuf:"bytes,19,rep,name=nullableString" json:"nullableString,omitempty"` + NonnullString []types.StringValue `protobuf:"bytes,20,rep,name=nonnullString" json:"nonnullString"` + NullableBytes []*types.BytesValue `protobuf:"bytes,21,rep,name=nullableBytes" json:"nullableBytes,omitempty"` + NonnullBytes []types.BytesValue `protobuf:"bytes,22,rep,name=nonnullBytes" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RepProtoTypes) Reset() { *m = RepProtoTypes{} } func (m *RepProtoTypes) String() string { return proto.CompactTextString(m) } func (*RepProtoTypes) ProtoMessage() {} func (*RepProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{3} + return fileDescriptor_types_1fa8d07678f7c296, []int{3} } func (m *RepProtoTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -332,1732 +638,2197 @@ return nil } -type RepStdTypes struct { - NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` - NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` - Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` - Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableDouble() []*types.DoubleValue { + if m != nil { + return m.NullableDouble + } + return nil } -func (m *RepStdTypes) Reset() { *m = RepStdTypes{} } -func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } -func (*RepStdTypes) ProtoMessage() {} -func (*RepStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{4} -} -func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RepStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RepStdTypes.Marshal(b, m, deterministic) -} -func (dst *RepStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepStdTypes.Merge(dst, src) -} -func (m *RepStdTypes) XXX_Size() int { - return xxx_messageInfo_RepStdTypes.Size(m) -} -func (m *RepStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_RepStdTypes.DiscardUnknown(m) +func (m *RepProtoTypes) GetNonnullDouble() []types.DoubleValue { + if m != nil { + return m.NonnullDouble + } + return nil } -var xxx_messageInfo_RepStdTypes proto.InternalMessageInfo - -func (m *RepStdTypes) GetNullableTimestamps() []*time.Time { +func (m *RepProtoTypes) GetNullableFloat() []*types.FloatValue { if m != nil { - return m.NullableTimestamps + return m.NullableFloat } return nil } -func (m *RepStdTypes) GetNullableDurations() []*time.Duration { +func (m *RepProtoTypes) GetNonnullFloat() []types.FloatValue { if m != nil { - return m.NullableDurations + return m.NonnullFloat } return nil } -func (m *RepStdTypes) GetTimestamps() []time.Time { +func (m *RepProtoTypes) GetNullableInt64() []*types.Int64Value { if m != nil { - return m.Timestamps + return m.NullableInt64 } return nil } -func (m *RepStdTypes) GetDurations() []time.Duration { +func (m *RepProtoTypes) GetNonnullInt64() []types.Int64Value { if m != nil { - return m.Durations + return m.NonnullInt64 } return nil } -type MapProtoTypes struct { - NullableTimestamp map[int32]*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamp" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Timestamp map[int32]types.Timestamp `protobuf:"bytes,2,rep,name=timestamp" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - NullableDuration map[int32]*types.Duration `protobuf:"bytes,3,rep,name=nullableDuration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Duration map[int32]types.Duration `protobuf:"bytes,4,rep,name=duration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableUInt64() []*types.UInt64Value { + if m != nil { + return m.NullableUInt64 + } + return nil } -func (m *MapProtoTypes) Reset() { *m = MapProtoTypes{} } -func (m *MapProtoTypes) String() string { return proto.CompactTextString(m) } -func (*MapProtoTypes) ProtoMessage() {} -func (*MapProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{5} -} -func (m *MapProtoTypes) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MapProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MapProtoTypes.Marshal(b, m, deterministic) -} -func (dst *MapProtoTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MapProtoTypes.Merge(dst, src) -} -func (m *MapProtoTypes) XXX_Size() int { - return xxx_messageInfo_MapProtoTypes.Size(m) -} -func (m *MapProtoTypes) XXX_DiscardUnknown() { - xxx_messageInfo_MapProtoTypes.DiscardUnknown(m) +func (m *RepProtoTypes) GetNonnullUInt64() []types.UInt64Value { + if m != nil { + return m.NonnullUInt64 + } + return nil } -var xxx_messageInfo_MapProtoTypes proto.InternalMessageInfo - -func (m *MapProtoTypes) GetNullableTimestamp() map[int32]*types.Timestamp { +func (m *RepProtoTypes) GetNullableInt32() []*types.Int32Value { if m != nil { - return m.NullableTimestamp + return m.NullableInt32 } return nil } -func (m *MapProtoTypes) GetTimestamp() map[int32]types.Timestamp { +func (m *RepProtoTypes) GetNonnullInt32() []types.Int32Value { if m != nil { - return m.Timestamp + return m.NonnullInt32 } return nil } -func (m *MapProtoTypes) GetNullableDuration() map[int32]*types.Duration { +func (m *RepProtoTypes) GetNullableUInt32() []*types.UInt32Value { if m != nil { - return m.NullableDuration + return m.NullableUInt32 } return nil } -func (m *MapProtoTypes) GetDuration() map[int32]types.Duration { +func (m *RepProtoTypes) GetNonnullUInt32() []types.UInt32Value { if m != nil { - return m.Duration + return m.NonnullUInt32 } return nil } -type MapStdTypes struct { - NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepProtoTypes) GetNullableBool() []*types.BoolValue { + if m != nil { + return m.NullableBool + } + return nil } -func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } -func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } -func (*MapStdTypes) ProtoMessage() {} -func (*MapStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{6} -} -func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MapStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MapStdTypes.Marshal(b, m, deterministic) -} -func (dst *MapStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MapStdTypes.Merge(dst, src) -} -func (m *MapStdTypes) XXX_Size() int { - return xxx_messageInfo_MapStdTypes.Size(m) -} -func (m *MapStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_MapStdTypes.DiscardUnknown(m) +func (m *RepProtoTypes) GetNonnullBool() []types.BoolValue { + if m != nil { + return m.NonnullBool + } + return nil } -var xxx_messageInfo_MapStdTypes proto.InternalMessageInfo - -func (m *MapStdTypes) GetNullableTimestamp() map[int32]*time.Time { +func (m *RepProtoTypes) GetNullableString() []*types.StringValue { if m != nil { - return m.NullableTimestamp + return m.NullableString } return nil } -func (m *MapStdTypes) GetTimestamp() map[int32]time.Time { +func (m *RepProtoTypes) GetNonnullString() []types.StringValue { if m != nil { - return m.Timestamp + return m.NonnullString } return nil } -func (m *MapStdTypes) GetNullableDuration() map[int32]*time.Duration { +func (m *RepProtoTypes) GetNullableBytes() []*types.BytesValue { if m != nil { - return m.NullableDuration + return m.NullableBytes } return nil } -func (m *MapStdTypes) GetDuration() map[int32]time.Duration { +func (m *RepProtoTypes) GetNonnullBytes() []types.BytesValue { if m != nil { - return m.Duration + return m.NonnullBytes } return nil } -type OneofProtoTypes struct { - // Types that are valid to be assigned to OneOfProtoTimes: - // *OneofProtoTypes_Timestamp - // *OneofProtoTypes_Duration - OneOfProtoTimes isOneofProtoTypes_OneOfProtoTimes `protobuf_oneof:"OneOfProtoTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type RepStdTypes struct { + NullableTimestamps []*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamps,stdtime" json:"nullableTimestamps,omitempty"` + NullableDurations []*time.Duration `protobuf:"bytes,2,rep,name=nullableDurations,stdduration" json:"nullableDurations,omitempty"` + Timestamps []time.Time `protobuf:"bytes,3,rep,name=timestamps,stdtime" json:"timestamps"` + Durations []time.Duration `protobuf:"bytes,4,rep,name=durations,stdduration" json:"durations"` + NullableDouble []*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty"` + NonnullDouble []float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble"` + NullableFloat []*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty"` + NonnullFloat []float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat"` + NullableInt64 []*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty"` + NonnullInt64 []int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64"` + NullableUInt64 []*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty"` + NonnullUInt64 []uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64"` + NullableInt32 []*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty"` + NonnullInt32 []int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32"` + NullableUInt32 []*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty"` + NonnullUInt32 []uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32"` + NullableBool []*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty"` + NonnullBool []bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool"` + NullableString []*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty"` + NonnullString []string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString"` + NullableBytes []*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty"` + NonnullBytes [][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *OneofProtoTypes) Reset() { *m = OneofProtoTypes{} } -func (m *OneofProtoTypes) String() string { return proto.CompactTextString(m) } -func (*OneofProtoTypes) ProtoMessage() {} -func (*OneofProtoTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{7} +func (m *RepStdTypes) Reset() { *m = RepStdTypes{} } +func (m *RepStdTypes) String() string { return proto.CompactTextString(m) } +func (*RepStdTypes) ProtoMessage() {} +func (*RepStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_1fa8d07678f7c296, []int{4} } -func (m *OneofProtoTypes) XXX_Unmarshal(b []byte) error { +func (m *RepStdTypes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *OneofProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OneofProtoTypes.Marshal(b, m, deterministic) +func (m *RepStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RepStdTypes.Marshal(b, m, deterministic) } -func (dst *OneofProtoTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofProtoTypes.Merge(dst, src) +func (dst *RepStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepStdTypes.Merge(dst, src) } -func (m *OneofProtoTypes) XXX_Size() int { - return xxx_messageInfo_OneofProtoTypes.Size(m) +func (m *RepStdTypes) XXX_Size() int { + return xxx_messageInfo_RepStdTypes.Size(m) } -func (m *OneofProtoTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofProtoTypes.DiscardUnknown(m) +func (m *RepStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_RepStdTypes.DiscardUnknown(m) } -var xxx_messageInfo_OneofProtoTypes proto.InternalMessageInfo +var xxx_messageInfo_RepStdTypes proto.InternalMessageInfo -type isOneofProtoTypes_OneOfProtoTimes interface { - isOneofProtoTypes_OneOfProtoTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - Size() int +func (m *RepStdTypes) GetNullableTimestamps() []*time.Time { + if m != nil { + return m.NullableTimestamps + } + return nil } -type OneofProtoTypes_Timestamp struct { - Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,oneof"` -} -type OneofProtoTypes_Duration struct { - Duration *types.Duration `protobuf:"bytes,2,opt,name=duration,oneof"` +func (m *RepStdTypes) GetNullableDurations() []*time.Duration { + if m != nil { + return m.NullableDurations + } + return nil } -func (*OneofProtoTypes_Timestamp) isOneofProtoTypes_OneOfProtoTimes() {} -func (*OneofProtoTypes_Duration) isOneofProtoTypes_OneOfProtoTimes() {} - -func (m *OneofProtoTypes) GetOneOfProtoTimes() isOneofProtoTypes_OneOfProtoTimes { +func (m *RepStdTypes) GetTimestamps() []time.Time { if m != nil { - return m.OneOfProtoTimes + return m.Timestamps } return nil } -func (m *OneofProtoTypes) GetTimestamp() *types.Timestamp { - if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Timestamp); ok { - return x.Timestamp +func (m *RepStdTypes) GetDurations() []time.Duration { + if m != nil { + return m.Durations } return nil } -func (m *OneofProtoTypes) GetDuration() *types.Duration { - if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Duration); ok { - return x.Duration +func (m *RepStdTypes) GetNullableDouble() []*float64 { + if m != nil { + return m.NullableDouble } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofProtoTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofProtoTypes_OneofMarshaler, _OneofProtoTypes_OneofUnmarshaler, _OneofProtoTypes_OneofSizer, []interface{}{ - (*OneofProtoTypes_Timestamp)(nil), - (*OneofProtoTypes_Duration)(nil), +func (m *RepStdTypes) GetNonnullDouble() []float64 { + if m != nil { + return m.NonnullDouble } + return nil } -func _OneofProtoTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofProtoTypes) - // OneOfProtoTimes - switch x := m.OneOfProtoTimes.(type) { - case *OneofProtoTypes_Timestamp: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Timestamp); err != nil { - return err - } - case *OneofProtoTypes_Duration: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Duration); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("OneofProtoTypes.OneOfProtoTimes has unexpected type %T", x) +func (m *RepStdTypes) GetNullableFloat() []*float32 { + if m != nil { + return m.NullableFloat } return nil } -func _OneofProtoTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofProtoTypes) - switch tag { - case 1: // OneOfProtoTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Timestamp) - err := b.DecodeMessage(msg) - m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{msg} - return true, err - case 2: // OneOfProtoTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Duration) - err := b.DecodeMessage(msg) - m.OneOfProtoTimes = &OneofProtoTypes_Duration{msg} - return true, err - default: - return false, nil +func (m *RepStdTypes) GetNonnullFloat() []float32 { + if m != nil { + return m.NonnullFloat } + return nil } -func _OneofProtoTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofProtoTypes) - // OneOfProtoTimes - switch x := m.OneOfProtoTimes.(type) { - case *OneofProtoTypes_Timestamp: - s := proto.Size(x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofProtoTypes_Duration: - s := proto.Size(x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *RepStdTypes) GetNullableInt64() []*int64 { + if m != nil { + return m.NullableInt64 } - return n + return nil } -type OneofStdTypes struct { - // Types that are valid to be assigned to OneOfStdTimes: - // *OneofStdTypes_Timestamp - // *OneofStdTypes_Duration - OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RepStdTypes) GetNonnullInt64() []int64 { + if m != nil { + return m.NonnullInt64 + } + return nil } -func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } -func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } -func (*OneofStdTypes) ProtoMessage() {} -func (*OneofStdTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_types_cfade28d66c5afd2, []int{8} -} -func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) -} -func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofStdTypes.Merge(dst, src) -} -func (m *OneofStdTypes) XXX_Size() int { - return xxx_messageInfo_OneofStdTypes.Size(m) -} -func (m *OneofStdTypes) XXX_DiscardUnknown() { - xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +func (m *RepStdTypes) GetNullableUInt64() []*uint64 { + if m != nil { + return m.NullableUInt64 + } + return nil } -var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo - -type isOneofStdTypes_OneOfStdTimes interface { - isOneofStdTypes_OneOfStdTimes() - Equal(interface{}) bool - VerboseEqual(interface{}) error - Size() int +func (m *RepStdTypes) GetNonnullUInt64() []uint64 { + if m != nil { + return m.NonnullUInt64 + } + return nil } -type OneofStdTypes_Timestamp struct { - Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` -} -type OneofStdTypes_Duration struct { - Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` +func (m *RepStdTypes) GetNullableInt32() []*int32 { + if m != nil { + return m.NullableInt32 + } + return nil } -func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} -func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} - -func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { +func (m *RepStdTypes) GetNonnullInt32() []int32 { if m != nil { - return m.OneOfStdTimes + return m.NonnullInt32 } return nil } -func (m *OneofStdTypes) GetTimestamp() *time.Time { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { - return x.Timestamp +func (m *RepStdTypes) GetNullableUInt32() []*uint32 { + if m != nil { + return m.NullableUInt32 } return nil } -func (m *OneofStdTypes) GetDuration() *time.Duration { - if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { - return x.Duration +func (m *RepStdTypes) GetNonnullUInt32() []uint32 { + if m != nil { + return m.NonnullUInt32 } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ - (*OneofStdTypes_Timestamp)(nil), - (*OneofStdTypes_Duration)(nil), +func (m *RepStdTypes) GetNullableBool() []*bool { + if m != nil { + return m.NullableBool } + return nil } -func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - dAtA, err := github_com_gogo_protobuf_types.StdTimeMarshal(*x.Timestamp) - if err != nil { - return err - } - if err := b.EncodeRawBytes(dAtA); err != nil { - return err - } - case *OneofStdTypes_Duration: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - dAtA, err := github_com_gogo_protobuf_types.StdDurationMarshal(*x.Duration) - if err != nil { - return err - } - if err := b.EncodeRawBytes(dAtA); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) +func (m *RepStdTypes) GetNonnullBool() []bool { + if m != nil { + return m.NonnullBool } return nil } -func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*OneofStdTypes) - switch tag { - case 1: // OneOfStdTimes.timestamp - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err - } - c := new(time.Time) - if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { - return true, err - } - m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} - return true, err - case 2: // OneOfStdTimes.duration - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - if err != nil { - return true, err - } - c := new(time.Duration) - if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { - return true, err - } - m.OneOfStdTimes = &OneofStdTypes_Duration{c} - return true, err - default: - return false, nil +func (m *RepStdTypes) GetNullableString() []*string { + if m != nil { + return m.NullableString } + return nil } -func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { - m := msg.(*OneofStdTypes) - // OneOfStdTimes - switch x := m.OneOfStdTimes.(type) { - case *OneofStdTypes_Timestamp: - s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *OneofStdTypes_Duration: - s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *RepStdTypes) GetNonnullString() []string { + if m != nil { + return m.NonnullString } - return n + return nil } -func init() { - proto.RegisterType((*KnownTypes)(nil), "types.KnownTypes") - proto.RegisterType((*ProtoTypes)(nil), "types.ProtoTypes") - proto.RegisterType((*StdTypes)(nil), "types.StdTypes") - proto.RegisterType((*RepProtoTypes)(nil), "types.RepProtoTypes") - proto.RegisterType((*RepStdTypes)(nil), "types.RepStdTypes") - proto.RegisterType((*MapProtoTypes)(nil), "types.MapProtoTypes") - proto.RegisterMapType((map[int32]types.Duration)(nil), "types.MapProtoTypes.DurationEntry") - proto.RegisterMapType((map[int32]*types.Duration)(nil), "types.MapProtoTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*types.Timestamp)(nil), "types.MapProtoTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]types.Timestamp)(nil), "types.MapProtoTypes.TimestampEntry") - proto.RegisterType((*MapStdTypes)(nil), "types.MapStdTypes") - proto.RegisterMapType((map[int32]time.Duration)(nil), "types.MapStdTypes.DurationEntry") - proto.RegisterMapType((map[int32]*time.Duration)(nil), "types.MapStdTypes.NullableDurationEntry") - proto.RegisterMapType((map[int32]*time.Time)(nil), "types.MapStdTypes.NullableTimestampEntry") - proto.RegisterMapType((map[int32]time.Time)(nil), "types.MapStdTypes.TimestampEntry") - proto.RegisterType((*OneofProtoTypes)(nil), "types.OneofProtoTypes") - proto.RegisterType((*OneofStdTypes)(nil), "types.OneofStdTypes") -} -func (this *KnownTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 +func (m *RepStdTypes) GetNullableBytes() []*[]byte { + if m != nil { + return m.NullableBytes } + return nil +} - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return 1 - } +func (m *RepStdTypes) GetNonnullBytes() [][]byte { + if m != nil { + return m.NonnullBytes } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 + return nil +} + +type MapProtoTypes struct { + NullableTimestamp map[int32]*types.Timestamp `protobuf:"bytes,1,rep,name=nullableTimestamp" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Timestamp map[int32]types.Timestamp `protobuf:"bytes,2,rep,name=timestamp" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDuration map[int32]*types.Duration `protobuf:"bytes,3,rep,name=nullableDuration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Duration map[int32]types.Duration `protobuf:"bytes,4,rep,name=duration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*types.DoubleValue `protobuf:"bytes,5,rep,name=nullableDouble" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]types.DoubleValue `protobuf:"bytes,6,rep,name=nonnullDouble" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*types.FloatValue `protobuf:"bytes,7,rep,name=nullableFloat" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]types.FloatValue `protobuf:"bytes,8,rep,name=nonnullFloat" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*types.Int64Value `protobuf:"bytes,9,rep,name=nullableInt64" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]types.Int64Value `protobuf:"bytes,10,rep,name=nonnullInt64" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*types.UInt64Value `protobuf:"bytes,11,rep,name=nullableUInt64" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]types.UInt64Value `protobuf:"bytes,12,rep,name=nonnullUInt64" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*types.Int32Value `protobuf:"bytes,13,rep,name=nullableInt32" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]types.Int32Value `protobuf:"bytes,14,rep,name=nonnullInt32" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*types.UInt32Value `protobuf:"bytes,15,rep,name=nullableUInt32" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]types.UInt32Value `protobuf:"bytes,16,rep,name=nonnullUInt32" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*types.BoolValue `protobuf:"bytes,17,rep,name=nullableBool" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]types.BoolValue `protobuf:"bytes,18,rep,name=nonnullBool" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*types.StringValue `protobuf:"bytes,19,rep,name=nullableString" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]types.StringValue `protobuf:"bytes,20,rep,name=nonnullString" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*types.BytesValue `protobuf:"bytes,21,rep,name=nullableBytes" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32]types.BytesValue `protobuf:"bytes,22,rep,name=nonnullBytes" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MapProtoTypes) Reset() { *m = MapProtoTypes{} } +func (m *MapProtoTypes) String() string { return proto.CompactTextString(m) } +func (*MapProtoTypes) ProtoMessage() {} +func (*MapProtoTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_1fa8d07678f7c296, []int{5} +} +func (m *MapProtoTypes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MapProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MapProtoTypes.Marshal(b, m, deterministic) +} +func (dst *MapProtoTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MapProtoTypes.Merge(dst, src) +} +func (m *MapProtoTypes) XXX_Size() int { + return xxx_messageInfo_MapProtoTypes.Size(m) +} +func (m *MapProtoTypes) XXX_DiscardUnknown() { + xxx_messageInfo_MapProtoTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_MapProtoTypes proto.InternalMessageInfo + +func (m *MapProtoTypes) GetNullableTimestamp() map[int32]*types.Timestamp { + if m != nil { + return m.NullableTimestamp } - if c := this.Dur.Compare(that1.Dur); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetTimestamp() map[int32]types.Timestamp { + if m != nil { + return m.Timestamp } - if c := this.Ts.Compare(that1.Ts); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableDuration() map[int32]*types.Duration { + if m != nil { + return m.NullableDuration } - if c := this.Dbl.Compare(that1.Dbl); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetDuration() map[int32]types.Duration { + if m != nil { + return m.Duration } - if c := this.Flt.Compare(that1.Flt); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableDouble() map[int32]*types.DoubleValue { + if m != nil { + return m.NullableDouble } - if c := this.I64.Compare(that1.I64); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullDouble() map[int32]types.DoubleValue { + if m != nil { + return m.NonnullDouble } - if c := this.U64.Compare(that1.U64); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableFloat() map[int32]*types.FloatValue { + if m != nil { + return m.NullableFloat } - if c := this.I32.Compare(that1.I32); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullFloat() map[int32]types.FloatValue { + if m != nil { + return m.NonnullFloat } - if c := this.U32.Compare(that1.U32); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableInt64() map[int32]*types.Int64Value { + if m != nil { + return m.NullableInt64 } - if c := this.Bool.Compare(that1.Bool); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullInt64() map[int32]types.Int64Value { + if m != nil { + return m.NonnullInt64 } - if c := this.Str.Compare(that1.Str); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableUInt64() map[int32]*types.UInt64Value { + if m != nil { + return m.NullableUInt64 } - if c := this.Bytes.Compare(that1.Bytes); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullUInt64() map[int32]types.UInt64Value { + if m != nil { + return m.NonnullUInt64 } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableInt32() map[int32]*types.Int32Value { + if m != nil { + return m.NullableInt32 } - return 0 + return nil } -func (this *ProtoTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 + +func (m *MapProtoTypes) GetNonnullInt32() map[int32]types.Int32Value { + if m != nil { + return m.NonnullInt32 } + return nil +} - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return 1 - } - } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 +func (m *MapProtoTypes) GetNullableUInt32() map[int32]*types.UInt32Value { + if m != nil { + return m.NullableUInt32 } - if c := this.NullableTimestamp.Compare(that1.NullableTimestamp); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullUInt32() map[int32]types.UInt32Value { + if m != nil { + return m.NonnullUInt32 } - if c := this.NullableDuration.Compare(that1.NullableDuration); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableBool() map[int32]*types.BoolValue { + if m != nil { + return m.NullableBool } - if c := this.Timestamp.Compare(&that1.Timestamp); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullBool() map[int32]types.BoolValue { + if m != nil { + return m.NonnullBool } - if c := this.Duration.Compare(&that1.Duration); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNullableString() map[int32]*types.StringValue { + if m != nil { + return m.NullableString } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + return nil +} + +func (m *MapProtoTypes) GetNonnullString() map[int32]types.StringValue { + if m != nil { + return m.NonnullString } - return 0 + return nil } -func (this *RepProtoTypes) Compare(that interface{}) int { - if that == nil { - if this == nil { - return 0 - } - return 1 + +func (m *MapProtoTypes) GetNullableBytes() map[int32]*types.BytesValue { + if m != nil { + return m.NullableBytes } + return nil +} - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return 1 - } +func (m *MapProtoTypes) GetNonnullBytes() map[int32]types.BytesValue { + if m != nil { + return m.NonnullBytes } - if that1 == nil { - if this == nil { - return 0 - } - return 1 - } else if this == nil { - return -1 + return nil +} + +type MapStdTypes struct { + NullableTimestamp map[int32]*time.Time `protobuf:"bytes,1,rep,name=nullableTimestamp,stdtime" json:"nullableTimestamp,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Timestamp map[int32]time.Time `protobuf:"bytes,2,rep,name=timestamp,stdtime" json:"timestamp" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDuration map[int32]*time.Duration `protobuf:"bytes,3,rep,name=nullableDuration,stdduration" json:"nullableDuration,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + Duration map[int32]time.Duration `protobuf:"bytes,4,rep,name=duration,stdduration" json:"duration" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableDouble map[int32]*float64 `protobuf:"bytes,5,rep,name=nullableDouble,wktptr" json:"nullableDouble,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullDouble map[int32]float64 `protobuf:"bytes,6,rep,name=nonnullDouble,wktptr" json:"nonnullDouble" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableFloat map[int32]*float32 `protobuf:"bytes,7,rep,name=nullableFloat,wktptr" json:"nullableFloat,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullFloat map[int32]float32 `protobuf:"bytes,8,rep,name=nonnullFloat,wktptr" json:"nonnullFloat" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt64 map[int32]*int64 `protobuf:"bytes,9,rep,name=nullableInt64,wktptr" json:"nullableInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt64 map[int32]int64 `protobuf:"bytes,10,rep,name=nonnullInt64,wktptr" json:"nonnullInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt64 map[int32]*uint64 `protobuf:"bytes,11,rep,name=nullableUInt64,wktptr" json:"nullableUInt64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt64 map[int32]uint64 `protobuf:"bytes,12,rep,name=nonnullUInt64,wktptr" json:"nonnullUInt64" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableInt32 map[int32]*int32 `protobuf:"bytes,13,rep,name=nullableInt32,wktptr" json:"nullableInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullInt32 map[int32]int32 `protobuf:"bytes,14,rep,name=nonnullInt32,wktptr" json:"nonnullInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableUInt32 map[int32]*uint32 `protobuf:"bytes,15,rep,name=nullableUInt32,wktptr" json:"nullableUInt32,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullUInt32 map[int32]uint32 `protobuf:"bytes,16,rep,name=nonnullUInt32,wktptr" json:"nonnullUInt32" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBool map[int32]*bool `protobuf:"bytes,17,rep,name=nullableBool,wktptr" json:"nullableBool,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBool map[int32]bool `protobuf:"bytes,18,rep,name=nonnullBool,wktptr" json:"nonnullBool" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableString map[int32]*string `protobuf:"bytes,19,rep,name=nullableString,wktptr" json:"nullableString,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullString map[int32]string `protobuf:"bytes,20,rep,name=nonnullString,wktptr" json:"nonnullString" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NullableBytes map[int32]*[]byte `protobuf:"bytes,21,rep,name=nullableBytes,wktptr" json:"nullableBytes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + NonnullBytes map[int32][]byte `protobuf:"bytes,22,rep,name=nonnullBytes,wktptr" json:"nonnullBytes" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MapStdTypes) Reset() { *m = MapStdTypes{} } +func (m *MapStdTypes) String() string { return proto.CompactTextString(m) } +func (*MapStdTypes) ProtoMessage() {} +func (*MapStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_1fa8d07678f7c296, []int{6} +} +func (m *MapStdTypes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MapStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MapStdTypes.Marshal(b, m, deterministic) +} +func (dst *MapStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MapStdTypes.Merge(dst, src) +} +func (m *MapStdTypes) XXX_Size() int { + return xxx_messageInfo_MapStdTypes.Size(m) +} +func (m *MapStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_MapStdTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_MapStdTypes proto.InternalMessageInfo + +func (m *MapStdTypes) GetNullableTimestamp() map[int32]*time.Time { + if m != nil { + return m.NullableTimestamp } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - if len(this.NullableTimestamps) < len(that1.NullableTimestamps) { - return -1 - } - return 1 + return nil +} + +func (m *MapStdTypes) GetTimestamp() map[int32]time.Time { + if m != nil { + return m.Timestamp } - for i := range this.NullableTimestamps { - if c := this.NullableTimestamps[i].Compare(that1.NullableTimestamps[i]); c != 0 { - return c - } + return nil +} + +func (m *MapStdTypes) GetNullableDuration() map[int32]*time.Duration { + if m != nil { + return m.NullableDuration } - if len(this.NullableDurations) != len(that1.NullableDurations) { - if len(this.NullableDurations) < len(that1.NullableDurations) { - return -1 - } - return 1 + return nil +} + +func (m *MapStdTypes) GetDuration() map[int32]time.Duration { + if m != nil { + return m.Duration } - for i := range this.NullableDurations { - if c := this.NullableDurations[i].Compare(that1.NullableDurations[i]); c != 0 { - return c - } + return nil +} + +func (m *MapStdTypes) GetNullableDouble() map[int32]*float64 { + if m != nil { + return m.NullableDouble } - if len(this.Timestamps) != len(that1.Timestamps) { - if len(this.Timestamps) < len(that1.Timestamps) { - return -1 - } - return 1 + return nil +} + +func (m *MapStdTypes) GetNonnullDouble() map[int32]float64 { + if m != nil { + return m.NonnullDouble } - for i := range this.Timestamps { - if c := this.Timestamps[i].Compare(&that1.Timestamps[i]); c != 0 { - return c - } + return nil +} + +func (m *MapStdTypes) GetNullableFloat() map[int32]*float32 { + if m != nil { + return m.NullableFloat } - if len(this.Durations) != len(that1.Durations) { - if len(this.Durations) < len(that1.Durations) { - return -1 - } - return 1 + return nil +} + +func (m *MapStdTypes) GetNonnullFloat() map[int32]float32 { + if m != nil { + return m.NonnullFloat } - for i := range this.Durations { - if c := this.Durations[i].Compare(&that1.Durations[i]); c != 0 { - return c - } + return nil +} + +func (m *MapStdTypes) GetNullableInt64() map[int32]*int64 { + if m != nil { + return m.NullableInt64 } - if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { - return c + return nil +} + +func (m *MapStdTypes) GetNonnullInt64() map[int32]int64 { + if m != nil { + return m.NonnullInt64 } - return 0 + return nil } -func (this *KnownTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + +func (m *MapStdTypes) GetNullableUInt64() map[int32]*uint64 { + if m != nil { + return m.NullableUInt64 } + return nil +} - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *KnownTypes") - } +func (m *MapStdTypes) GetNonnullUInt64() map[int32]uint64 { + if m != nil { + return m.NonnullUInt64 } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *KnownTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *KnownTypes but is not nil && this == nil") + return nil +} + +func (m *MapStdTypes) GetNullableInt32() map[int32]*int32 { + if m != nil { + return m.NullableInt32 } - if !this.Dur.Equal(that1.Dur) { - return fmt.Errorf("Dur this(%v) Not Equal that(%v)", this.Dur, that1.Dur) + return nil +} + +func (m *MapStdTypes) GetNonnullInt32() map[int32]int32 { + if m != nil { + return m.NonnullInt32 } - if !this.Ts.Equal(that1.Ts) { - return fmt.Errorf("Ts this(%v) Not Equal that(%v)", this.Ts, that1.Ts) + return nil +} + +func (m *MapStdTypes) GetNullableUInt32() map[int32]*uint32 { + if m != nil { + return m.NullableUInt32 } - if !this.Dbl.Equal(that1.Dbl) { - return fmt.Errorf("Dbl this(%v) Not Equal that(%v)", this.Dbl, that1.Dbl) + return nil +} + +func (m *MapStdTypes) GetNonnullUInt32() map[int32]uint32 { + if m != nil { + return m.NonnullUInt32 } - if !this.Flt.Equal(that1.Flt) { - return fmt.Errorf("Flt this(%v) Not Equal that(%v)", this.Flt, that1.Flt) + return nil +} + +func (m *MapStdTypes) GetNullableBool() map[int32]*bool { + if m != nil { + return m.NullableBool } - if !this.I64.Equal(that1.I64) { - return fmt.Errorf("I64 this(%v) Not Equal that(%v)", this.I64, that1.I64) + return nil +} + +func (m *MapStdTypes) GetNonnullBool() map[int32]bool { + if m != nil { + return m.NonnullBool } - if !this.U64.Equal(that1.U64) { - return fmt.Errorf("U64 this(%v) Not Equal that(%v)", this.U64, that1.U64) - } - if !this.I32.Equal(that1.I32) { - return fmt.Errorf("I32 this(%v) Not Equal that(%v)", this.I32, that1.I32) - } - if !this.U32.Equal(that1.U32) { - return fmt.Errorf("U32 this(%v) Not Equal that(%v)", this.U32, that1.U32) - } - if !this.Bool.Equal(that1.Bool) { - return fmt.Errorf("Bool this(%v) Not Equal that(%v)", this.Bool, that1.Bool) - } - if !this.Str.Equal(that1.Str) { - return fmt.Errorf("Str this(%v) Not Equal that(%v)", this.Str, that1.Str) - } - if !this.Bytes.Equal(that1.Bytes) { - return fmt.Errorf("Bytes this(%v) Not Equal that(%v)", this.Bytes, that1.Bytes) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + return nil +} + +func (m *MapStdTypes) GetNullableString() map[int32]*string { + if m != nil { + return m.NullableString } return nil } -func (this *KnownTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + +func (m *MapStdTypes) GetNonnullString() map[int32]string { + if m != nil { + return m.NonnullString } + return nil +} - that1, ok := that.(*KnownTypes) - if !ok { - that2, ok := that.(KnownTypes) - if ok { - that1 = &that2 - } else { - return false - } +func (m *MapStdTypes) GetNullableBytes() map[int32]*[]byte { + if m != nil { + return m.NullableBytes } - if that1 == nil { - return this == nil - } else if this == nil { - return false + return nil +} + +func (m *MapStdTypes) GetNonnullBytes() map[int32][]byte { + if m != nil { + return m.NonnullBytes } - if !this.Dur.Equal(that1.Dur) { - return false + return nil +} + +type OneofProtoTypes struct { + // Types that are valid to be assigned to OneOfProtoTimes: + // *OneofProtoTypes_Timestamp + // *OneofProtoTypes_Duration + // *OneofProtoTypes_RepDouble + // *OneofProtoTypes_RepFloat + // *OneofProtoTypes_RepInt64 + // *OneofProtoTypes_RepUInt64 + // *OneofProtoTypes_RepInt32 + // *OneofProtoTypes_RepUInt32 + // *OneofProtoTypes_RepBool + // *OneofProtoTypes_RepString + // *OneofProtoTypes_RepBytes + OneOfProtoTimes isOneofProtoTypes_OneOfProtoTimes `protobuf_oneof:"OneOfProtoTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofProtoTypes) Reset() { *m = OneofProtoTypes{} } +func (m *OneofProtoTypes) String() string { return proto.CompactTextString(m) } +func (*OneofProtoTypes) ProtoMessage() {} +func (*OneofProtoTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_1fa8d07678f7c296, []int{7} +} +func (m *OneofProtoTypes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OneofProtoTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OneofProtoTypes.Marshal(b, m, deterministic) +} +func (dst *OneofProtoTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofProtoTypes.Merge(dst, src) +} +func (m *OneofProtoTypes) XXX_Size() int { + return xxx_messageInfo_OneofProtoTypes.Size(m) +} +func (m *OneofProtoTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofProtoTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofProtoTypes proto.InternalMessageInfo + +type isOneofProtoTypes_OneOfProtoTimes interface { + isOneofProtoTypes_OneOfProtoTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + Size() int +} + +type OneofProtoTypes_Timestamp struct { + Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,oneof"` +} +type OneofProtoTypes_Duration struct { + Duration *types.Duration `protobuf:"bytes,2,opt,name=duration,oneof"` +} +type OneofProtoTypes_RepDouble struct { + RepDouble *types.DoubleValue `protobuf:"bytes,3,opt,name=repDouble,oneof"` +} +type OneofProtoTypes_RepFloat struct { + RepFloat *types.FloatValue `protobuf:"bytes,4,opt,name=repFloat,oneof"` +} +type OneofProtoTypes_RepInt64 struct { + RepInt64 *types.Int64Value `protobuf:"bytes,5,opt,name=repInt64,oneof"` +} +type OneofProtoTypes_RepUInt64 struct { + RepUInt64 *types.UInt64Value `protobuf:"bytes,6,opt,name=repUInt64,oneof"` +} +type OneofProtoTypes_RepInt32 struct { + RepInt32 *types.Int32Value `protobuf:"bytes,7,opt,name=repInt32,oneof"` +} +type OneofProtoTypes_RepUInt32 struct { + RepUInt32 *types.UInt32Value `protobuf:"bytes,8,opt,name=repUInt32,oneof"` +} +type OneofProtoTypes_RepBool struct { + RepBool *types.BoolValue `protobuf:"bytes,9,opt,name=repBool,oneof"` +} +type OneofProtoTypes_RepString struct { + RepString *types.StringValue `protobuf:"bytes,10,opt,name=repString,oneof"` +} +type OneofProtoTypes_RepBytes struct { + RepBytes *types.BytesValue `protobuf:"bytes,11,opt,name=repBytes,oneof"` +} + +func (*OneofProtoTypes_Timestamp) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_Duration) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepDouble) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepFloat) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepInt64) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepUInt64) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepInt32) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepUInt32) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepBool) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepString) isOneofProtoTypes_OneOfProtoTimes() {} +func (*OneofProtoTypes_RepBytes) isOneofProtoTypes_OneOfProtoTimes() {} + +func (m *OneofProtoTypes) GetOneOfProtoTimes() isOneofProtoTypes_OneOfProtoTimes { + if m != nil { + return m.OneOfProtoTimes } - if !this.Ts.Equal(that1.Ts) { - return false + return nil +} + +func (m *OneofProtoTypes) GetTimestamp() *types.Timestamp { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Timestamp); ok { + return x.Timestamp } - if !this.Dbl.Equal(that1.Dbl) { - return false + return nil +} + +func (m *OneofProtoTypes) GetDuration() *types.Duration { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_Duration); ok { + return x.Duration } - if !this.Flt.Equal(that1.Flt) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepDouble() *types.DoubleValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepDouble); ok { + return x.RepDouble } - if !this.I64.Equal(that1.I64) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepFloat() *types.FloatValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepFloat); ok { + return x.RepFloat } - if !this.U64.Equal(that1.U64) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepInt64() *types.Int64Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepInt64); ok { + return x.RepInt64 } - if !this.I32.Equal(that1.I32) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepUInt64() *types.UInt64Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepUInt64); ok { + return x.RepUInt64 } - if !this.U32.Equal(that1.U32) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepInt32() *types.Int32Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepInt32); ok { + return x.RepInt32 } - if !this.Bool.Equal(that1.Bool) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepUInt32() *types.UInt32Value { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepUInt32); ok { + return x.RepUInt32 } - if !this.Str.Equal(that1.Str) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepBool() *types.BoolValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepBool); ok { + return x.RepBool } - if !this.Bytes.Equal(that1.Bytes) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepString() *types.StringValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepString); ok { + return x.RepString } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + return nil +} + +func (m *OneofProtoTypes) GetRepBytes() *types.BytesValue { + if x, ok := m.GetOneOfProtoTimes().(*OneofProtoTypes_RepBytes); ok { + return x.RepBytes } - return true + return nil } -func (this *ProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofProtoTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofProtoTypes_OneofMarshaler, _OneofProtoTypes_OneofUnmarshaler, _OneofProtoTypes_OneofSizer, []interface{}{ + (*OneofProtoTypes_Timestamp)(nil), + (*OneofProtoTypes_Duration)(nil), + (*OneofProtoTypes_RepDouble)(nil), + (*OneofProtoTypes_RepFloat)(nil), + (*OneofProtoTypes_RepInt64)(nil), + (*OneofProtoTypes_RepUInt64)(nil), + (*OneofProtoTypes_RepInt32)(nil), + (*OneofProtoTypes_RepUInt32)(nil), + (*OneofProtoTypes_RepBool)(nil), + (*OneofProtoTypes_RepString)(nil), + (*OneofProtoTypes_RepBytes)(nil), } +} - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *ProtoTypes") +func _OneofProtoTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofProtoTypes) + // OneOfProtoTimes + switch x := m.OneOfProtoTimes.(type) { + case *OneofProtoTypes_Timestamp: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Timestamp); err != nil { + return err } - } - if that1 == nil { - if this == nil { - return nil + case *OneofProtoTypes_Duration: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Duration); err != nil { + return err } - return fmt.Errorf("that is type *ProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *ProtoTypes but is not nil && this == nil") - } - if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) - } - if !this.NullableDuration.Equal(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) - } - if !this.Timestamp.Equal(&that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) - } - if !this.Duration.Equal(&that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + case *OneofProtoTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepDouble); err != nil { + return err + } + case *OneofProtoTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepFloat); err != nil { + return err + } + case *OneofProtoTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepInt64); err != nil { + return err + } + case *OneofProtoTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepUInt64); err != nil { + return err + } + case *OneofProtoTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepInt32); err != nil { + return err + } + case *OneofProtoTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepUInt32); err != nil { + return err + } + case *OneofProtoTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepBool); err != nil { + return err + } + case *OneofProtoTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepString); err != nil { + return err + } + case *OneofProtoTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepBytes); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("OneofProtoTypes.OneOfProtoTimes has unexpected type %T", x) } return nil } -func (this *ProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*ProtoTypes) - if !ok { - that2, ok := that.(ProtoTypes) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { - return false - } - if !this.NullableDuration.Equal(that1.NullableDuration) { - return false - } - if !this.Timestamp.Equal(&that1.Timestamp) { - return false - } - if !this.Duration.Equal(&that1.Duration) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *StdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*StdTypes) - if !ok { - that2, ok := that.(StdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *StdTypes") - } - } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *StdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") - } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") - } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) - } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) +func _OneofProtoTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofProtoTypes) + switch tag { + case 1: // OneOfProtoTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } else if this.NullableDuration != nil { - return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") - } else if that1.NullableDuration != nil { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) - } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) - } - if this.Duration != that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil -} -func (this *StdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*StdTypes) - if !ok { - that2, ok := that.(StdTypes) - if ok { - that1 = &that2 - } else { - return false + msg := new(types.Timestamp) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{msg} + return true, err + case 2: // OneOfProtoTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.NullableTimestamp == nil { - if this.NullableTimestamp != nil { - return false + msg := new(types.Duration) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_Duration{msg} + return true, err + case 3: // OneOfProtoTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { - return false - } - if this.NullableDuration != nil && that1.NullableDuration != nil { - if *this.NullableDuration != *that1.NullableDuration { - return false + msg := new(types.DoubleValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepDouble{msg} + return true, err + case 4: // OneOfProtoTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } else if this.NullableDuration != nil { - return false - } else if that1.NullableDuration != nil { - return false - } - if !this.Timestamp.Equal(that1.Timestamp) { - return false - } - if this.Duration != that1.Duration { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RepProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + msg := new(types.FloatValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepFloat{msg} + return true, err + case 5: // OneOfProtoTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *RepProtoTypes") + msg := new(types.Int64Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepInt64{msg} + return true, err + case 6: // OneOfProtoTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - if this == nil { - return nil + msg := new(types.UInt64Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt64{msg} + return true, err + case 7: // OneOfProtoTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - return fmt.Errorf("that is type *RepProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *RepProtoTypes but is not nil && this == nil") - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + msg := new(types.Int32Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepInt32{msg} + return true, err + case 8: // OneOfProtoTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) - } - for i := range this.NullableDurations { - if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + msg := new(types.UInt32Value) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt32{msg} + return true, err + case 9: // OneOfProtoTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + msg := new(types.BoolValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepBool{msg} + return true, err + case 10: // OneOfProtoTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) - } - for i := range this.Durations { - if !this.Durations[i].Equal(&that1.Durations[i]) { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + msg := new(types.StringValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepString{msg} + return true, err + case 11: // OneOfProtoTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } + msg := new(types.BytesValue) + err := b.DecodeMessage(msg) + m.OneOfProtoTimes = &OneofProtoTypes_RepBytes{msg} + return true, err + default: + return false, nil } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil } -func (this *RepProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*RepProtoTypes) - if !ok { - that2, ok := that.(RepProtoTypes) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { - return false - } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return false - } - for i := range this.NullableDurations { - if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { - return false - } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return false - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { - return false - } - } - if len(this.Durations) != len(that1.Durations) { - return false - } - for i := range this.Durations { - if !this.Durations[i].Equal(&that1.Durations[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false +func _OneofProtoTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofProtoTypes) + // OneOfProtoTimes + switch x := m.OneOfProtoTimes.(type) { + case *OneofProtoTypes_Timestamp: + s := proto.Size(x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_Duration: + s := proto.Size(x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepDouble: + s := proto.Size(x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepFloat: + s := proto.Size(x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepInt64: + s := proto.Size(x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepUInt64: + s := proto.Size(x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepInt32: + s := proto.Size(x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepUInt32: + s := proto.Size(x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepBool: + s := proto.Size(x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepString: + s := proto.Size(x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofProtoTypes_RepBytes: + s := proto.Size(x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - return true + return n } -func (this *RepStdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + +type OneofStdTypes struct { + // Types that are valid to be assigned to OneOfStdTimes: + // *OneofStdTypes_Timestamp + // *OneofStdTypes_Duration + // *OneofStdTypes_RepDouble + // *OneofStdTypes_RepFloat + // *OneofStdTypes_RepInt64 + // *OneofStdTypes_RepUInt64 + // *OneofStdTypes_RepInt32 + // *OneofStdTypes_RepUInt32 + // *OneofStdTypes_RepBool + // *OneofStdTypes_RepString + // *OneofStdTypes_RepBytes + OneOfStdTimes isOneofStdTypes_OneOfStdTimes `protobuf_oneof:"OneOfStdTimes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofStdTypes) Reset() { *m = OneofStdTypes{} } +func (m *OneofStdTypes) String() string { return proto.CompactTextString(m) } +func (*OneofStdTypes) ProtoMessage() {} +func (*OneofStdTypes) Descriptor() ([]byte, []int) { + return fileDescriptor_types_1fa8d07678f7c296, []int{8} +} +func (m *OneofStdTypes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OneofStdTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OneofStdTypes.Marshal(b, m, deterministic) +} +func (dst *OneofStdTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofStdTypes.Merge(dst, src) +} +func (m *OneofStdTypes) XXX_Size() int { + return xxx_messageInfo_OneofStdTypes.Size(m) +} +func (m *OneofStdTypes) XXX_DiscardUnknown() { + xxx_messageInfo_OneofStdTypes.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofStdTypes proto.InternalMessageInfo + +type isOneofStdTypes_OneOfStdTimes interface { + isOneofStdTypes_OneOfStdTimes() + Equal(interface{}) bool + VerboseEqual(interface{}) error + Size() int +} + +type OneofStdTypes_Timestamp struct { + Timestamp *time.Time `protobuf:"bytes,1,opt,name=timestamp,oneof,stdtime"` +} +type OneofStdTypes_Duration struct { + Duration *time.Duration `protobuf:"bytes,2,opt,name=duration,oneof,stdduration"` +} +type OneofStdTypes_RepDouble struct { + RepDouble *float64 `protobuf:"bytes,3,opt,name=repDouble,oneof,wktptr"` +} +type OneofStdTypes_RepFloat struct { + RepFloat *float32 `protobuf:"bytes,4,opt,name=repFloat,oneof,wktptr"` +} +type OneofStdTypes_RepInt64 struct { + RepInt64 *int64 `protobuf:"bytes,5,opt,name=repInt64,oneof,wktptr"` +} +type OneofStdTypes_RepUInt64 struct { + RepUInt64 *uint64 `protobuf:"bytes,6,opt,name=repUInt64,oneof,wktptr"` +} +type OneofStdTypes_RepInt32 struct { + RepInt32 *int32 `protobuf:"bytes,7,opt,name=repInt32,oneof,wktptr"` +} +type OneofStdTypes_RepUInt32 struct { + RepUInt32 *uint32 `protobuf:"bytes,8,opt,name=repUInt32,oneof,wktptr"` +} +type OneofStdTypes_RepBool struct { + RepBool *bool `protobuf:"bytes,9,opt,name=repBool,oneof,wktptr"` +} +type OneofStdTypes_RepString struct { + RepString *string `protobuf:"bytes,10,opt,name=repString,oneof,wktptr"` +} +type OneofStdTypes_RepBytes struct { + RepBytes *[]byte `protobuf:"bytes,11,opt,name=repBytes,oneof,wktptr"` +} + +func (*OneofStdTypes_Timestamp) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_Duration) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepDouble) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepFloat) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt64) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepUInt32) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBool) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepString) isOneofStdTypes_OneOfStdTimes() {} +func (*OneofStdTypes_RepBytes) isOneofStdTypes_OneOfStdTimes() {} + +func (m *OneofStdTypes) GetOneOfStdTimes() isOneofStdTypes_OneOfStdTimes { + if m != nil { + return m.OneOfStdTimes } + return nil +} - that1, ok := that.(*RepStdTypes) - if !ok { - that2, ok := that.(RepStdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *RepStdTypes") - } +func (m *OneofStdTypes) GetTimestamp() *time.Time { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Timestamp); ok { + return x.Timestamp } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") + return nil +} + +func (m *OneofStdTypes) GetDuration() *time.Duration { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_Duration); ok { + return x.Duration } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + return nil +} + +func (m *OneofStdTypes) GetRepDouble() *float64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepDouble); ok { + return x.RepDouble } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) - } + return nil +} + +func (m *OneofStdTypes) GetRepFloat() *float32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepFloat); ok { + return x.RepFloat } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + return nil +} + +func (m *OneofStdTypes) GetRepInt64() *int64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt64); ok { + return x.RepInt64 } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) - } + return nil +} + +func (m *OneofStdTypes) GetRepUInt64() *uint64 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt64); ok { + return x.RepUInt64 } - if len(this.Timestamps) != len(that1.Timestamps) { - return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + return nil +} + +func (m *OneofStdTypes) GetRepInt32() *int32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepInt32); ok { + return x.RepInt32 } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) - } + return nil +} + +func (m *OneofStdTypes) GetRepUInt32() *uint32 { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepUInt32); ok { + return x.RepUInt32 } - if len(this.Durations) != len(that1.Durations) { - return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + return nil +} + +func (m *OneofStdTypes) GetRepBool() *bool { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBool); ok { + return x.RepBool } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) - } + return nil +} + +func (m *OneofStdTypes) GetRepString() *string { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepString); ok { + return x.RepString } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + return nil +} + +func (m *OneofStdTypes) GetRepBytes() *[]byte { + if x, ok := m.GetOneOfStdTimes().(*OneofStdTypes_RepBytes); ok { + return x.RepBytes } return nil } -func (this *RepStdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OneofStdTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OneofStdTypes_OneofMarshaler, _OneofStdTypes_OneofUnmarshaler, _OneofStdTypes_OneofSizer, []interface{}{ + (*OneofStdTypes_Timestamp)(nil), + (*OneofStdTypes_Duration)(nil), + (*OneofStdTypes_RepDouble)(nil), + (*OneofStdTypes_RepFloat)(nil), + (*OneofStdTypes_RepInt64)(nil), + (*OneofStdTypes_RepUInt64)(nil), + (*OneofStdTypes_RepInt32)(nil), + (*OneofStdTypes_RepUInt32)(nil), + (*OneofStdTypes_RepBool)(nil), + (*OneofStdTypes_RepString)(nil), + (*OneofStdTypes_RepBytes)(nil), } +} - that1, ok := that.(*RepStdTypes) - if !ok { - that2, ok := that.(RepStdTypes) - if ok { - that1 = &that2 - } else { - return false +func _OneofStdTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdTimeMarshal(*x.Timestamp) + if err != nil { + return err } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { - return false - } - for i := range this.NullableTimestamps { - if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { - return false - } - } - if len(this.NullableDurations) != len(that1.NullableDurations) { - return false - } - for i := range this.NullableDurations { - if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false - } - } - if len(this.Timestamps) != len(that1.Timestamps) { - return false - } - for i := range this.Timestamps { - if !this.Timestamps[i].Equal(that1.Timestamps[i]) { - return false + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.Durations) != len(that1.Durations) { - return false - } - for i := range this.Durations { - if this.Durations[i] != that1.Durations[i] { - return false + case *OneofStdTypes_Duration: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDurationMarshal(*x.Duration) + if err != nil { + return err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *MapProtoTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*MapProtoTypes) - if !ok { - that2, ok := that.(MapProtoTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *MapProtoTypes") + case *OneofStdTypes_RepDouble: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdDoubleMarshal(*x.RepDouble) + if err != nil { + return err } - } - if that1 == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that is type *MapProtoTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *MapProtoTypes but is not nil && this == nil") - } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) - } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + case *OneofStdTypes_RepFloat: + _ = b.EncodeVarint(4<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdFloatMarshal(*x.RepFloat) + if err != nil { + return err } - } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) - } - for i := range this.Timestamp { - a := this.Timestamp[i] - b := that1.Timestamp[i] - if !(&a).Equal(&b) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) - } - for i := range this.NullableDuration { - if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + case *OneofStdTypes_RepInt64: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt64Marshal(*x.RepInt64) + if err != nil { + return err } - } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) - } - for i := range this.Duration { - a := this.Duration[i] - b := that1.Duration[i] - if !(&a).Equal(&b) { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil -} -func (this *MapProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*MapProtoTypes) - if !ok { - that2, ok := that.(MapProtoTypes) - if ok { - that1 = &that2 - } else { - return false + case *OneofStdTypes_RepUInt64: + _ = b.EncodeVarint(6<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt64Marshal(*x.RepUInt64) + if err != nil { + return err } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return false - } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { - return false + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.Timestamp) != len(that1.Timestamp) { - return false - } - for i := range this.Timestamp { - a := this.Timestamp[i] - b := that1.Timestamp[i] - if !(&a).Equal(&b) { - return false + case *OneofStdTypes_RepInt32: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdInt32Marshal(*x.RepInt32) + if err != nil { + return err } - } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return false - } - for i := range this.NullableDuration { - if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { - return false + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.Duration) != len(that1.Duration) { - return false - } - for i := range this.Duration { - a := this.Duration[i] - b := that1.Duration[i] - if !(&a).Equal(&b) { - return false + case *OneofStdTypes_RepUInt32: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdUInt32Marshal(*x.RepUInt32) + if err != nil { + return err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *MapStdTypes) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*MapStdTypes) - if !ok { - that2, ok := that.(MapStdTypes) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *MapStdTypes") + case *OneofStdTypes_RepBool: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBoolMarshal(*x.RepBool) + if err != nil { + return err } - } - if that1 == nil { - if this == nil { - return nil + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") - } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) - } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + case *OneofStdTypes_RepString: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdStringMarshal(*x.RepString) + if err != nil { + return err } - } - if len(this.Timestamp) != len(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) - } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) - } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + case *OneofStdTypes_RepBytes: + _ = b.EncodeVarint(11<<3 | proto.WireBytes) + dAtA, err := github_com_gogo_protobuf_types.StdBytesMarshal(*x.RepBytes) + if err != nil { + return err } - } - if len(this.Duration) != len(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) - } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + if err := b.EncodeRawBytes(dAtA); err != nil { + return err } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + case nil: + default: + return fmt.Errorf("OneofStdTypes.OneOfStdTimes has unexpected type %T", x) } return nil } -func (this *MapStdTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - that1, ok := that.(*MapStdTypes) - if !ok { - that2, ok := that.(MapStdTypes) - if ok { - that1 = &that2 - } else { - return false +func _OneofStdTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OneofStdTypes) + switch tag { + case 1: // OneOfStdTimes.timestamp + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { - return false - } - for i := range this.NullableTimestamp { - if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { - return false + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } - } - if len(this.Timestamp) != len(that1.Timestamp) { - return false - } - for i := range this.Timestamp { - if !this.Timestamp[i].Equal(that1.Timestamp[i]) { - return false + c := new(time.Time) + if err2 := github_com_gogo_protobuf_types.StdTimeUnmarshal(c, x); err2 != nil { + return true, err } - } - if len(this.NullableDuration) != len(that1.NullableDuration) { - return false - } - for i := range this.NullableDuration { - if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { - return false + m.OneOfStdTimes = &OneofStdTypes_Timestamp{c} + return true, err + case 2: // OneOfStdTimes.duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType } - } - if len(this.Duration) != len(that1.Duration) { - return false - } - for i := range this.Duration { - if this.Duration[i] != that1.Duration[i] { - return false + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(time.Duration) + if err2 := github_com_gogo_protobuf_types.StdDurationUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_Duration{c} + return true, err + case 3: // OneOfStdTimes.repDouble + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(float64) + if err2 := github_com_gogo_protobuf_types.StdDoubleUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepDouble{c} + return true, err + case 4: // OneOfStdTimes.repFloat + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(float32) + if err2 := github_com_gogo_protobuf_types.StdFloatUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepFloat{c} + return true, err + case 5: // OneOfStdTimes.repInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int64) + if err2 := github_com_gogo_protobuf_types.StdInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt64{c} + return true, err + case 6: // OneOfStdTimes.repUInt64 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(uint64) + if err2 := github_com_gogo_protobuf_types.StdUInt64Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt64{c} + return true, err + case 7: // OneOfStdTimes.repInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(int32) + if err2 := github_com_gogo_protobuf_types.StdInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepInt32{c} + return true, err + case 8: // OneOfStdTimes.repUInt32 + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(uint32) + if err2 := github_com_gogo_protobuf_types.StdUInt32Unmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepUInt32{c} + return true, err + case 9: // OneOfStdTimes.repBool + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err } + c := new(bool) + if err2 := github_com_gogo_protobuf_types.StdBoolUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBool{c} + return true, err + case 10: // OneOfStdTimes.repString + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new(string) + if err2 := github_com_gogo_protobuf_types.StdStringUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepString{c} + return true, err + case 11: // OneOfStdTimes.repBytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + if err != nil { + return true, err + } + c := new([]byte) + if err2 := github_com_gogo_protobuf_types.StdBytesUnmarshal(c, x); err2 != nil { + return true, err + } + m.OneOfStdTimes = &OneofStdTypes_RepBytes{c} + return true, err + default: + return false, nil } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false +} + +func _OneofStdTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OneofStdTypes) + // OneOfStdTimes + switch x := m.OneOfStdTimes.(type) { + case *OneofStdTypes_Timestamp: + s := github_com_gogo_protobuf_types.SizeOfStdTime(*x.Timestamp) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_Duration: + s := github_com_gogo_protobuf_types.SizeOfStdDuration(*x.Duration) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepDouble: + s := github_com_gogo_protobuf_types.SizeOfStdDouble(*x.RepDouble) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepFloat: + s := github_com_gogo_protobuf_types.SizeOfStdFloat(*x.RepFloat) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt64: + s := github_com_gogo_protobuf_types.SizeOfStdInt64(*x.RepInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt64: + s := github_com_gogo_protobuf_types.SizeOfStdUInt64(*x.RepUInt64) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepInt32: + s := github_com_gogo_protobuf_types.SizeOfStdInt32(*x.RepInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepUInt32: + s := github_com_gogo_protobuf_types.SizeOfStdUInt32(*x.RepUInt32) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBool: + s := github_com_gogo_protobuf_types.SizeOfStdBool(*x.RepBool) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepString: + s := github_com_gogo_protobuf_types.SizeOfStdString(*x.RepString) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *OneofStdTypes_RepBytes: + s := github_com_gogo_protobuf_types.SizeOfStdBytes(*x.RepBytes) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - return true + return n } -func (this *OneofProtoTypes) VerboseEqual(that interface{}) error { + +func init() { + proto.RegisterType((*KnownTypes)(nil), "types.KnownTypes") + proto.RegisterType((*ProtoTypes)(nil), "types.ProtoTypes") + proto.RegisterType((*StdTypes)(nil), "types.StdTypes") + proto.RegisterType((*RepProtoTypes)(nil), "types.RepProtoTypes") + proto.RegisterType((*RepStdTypes)(nil), "types.RepStdTypes") + proto.RegisterType((*MapProtoTypes)(nil), "types.MapProtoTypes") + proto.RegisterMapType((map[int32]types.Duration)(nil), "types.MapProtoTypes.DurationEntry") + proto.RegisterMapType((map[int32]types.BoolValue)(nil), "types.MapProtoTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32]types.BytesValue)(nil), "types.MapProtoTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]types.DoubleValue)(nil), "types.MapProtoTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]types.FloatValue)(nil), "types.MapProtoTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]types.Int32Value)(nil), "types.MapProtoTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]types.Int64Value)(nil), "types.MapProtoTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]types.StringValue)(nil), "types.MapProtoTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]types.UInt32Value)(nil), "types.MapProtoTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]types.UInt64Value)(nil), "types.MapProtoTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*types.BoolValue)(nil), "types.MapProtoTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*types.BytesValue)(nil), "types.MapProtoTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*types.DoubleValue)(nil), "types.MapProtoTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*types.Duration)(nil), "types.MapProtoTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*types.FloatValue)(nil), "types.MapProtoTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*types.Int32Value)(nil), "types.MapProtoTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*types.Int64Value)(nil), "types.MapProtoTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*types.StringValue)(nil), "types.MapProtoTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*types.Timestamp)(nil), "types.MapProtoTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*types.UInt32Value)(nil), "types.MapProtoTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*types.UInt64Value)(nil), "types.MapProtoTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]types.Timestamp)(nil), "types.MapProtoTypes.TimestampEntry") + proto.RegisterType((*MapStdTypes)(nil), "types.MapStdTypes") + proto.RegisterMapType((map[int32]time.Duration)(nil), "types.MapStdTypes.DurationEntry") + proto.RegisterMapType((map[int32]bool)(nil), "types.MapStdTypes.NonnullBoolEntry") + proto.RegisterMapType((map[int32][]byte)(nil), "types.MapStdTypes.NonnullBytesEntry") + proto.RegisterMapType((map[int32]float64)(nil), "types.MapStdTypes.NonnullDoubleEntry") + proto.RegisterMapType((map[int32]float32)(nil), "types.MapStdTypes.NonnullFloatEntry") + proto.RegisterMapType((map[int32]int32)(nil), "types.MapStdTypes.NonnullInt32Entry") + proto.RegisterMapType((map[int32]int64)(nil), "types.MapStdTypes.NonnullInt64Entry") + proto.RegisterMapType((map[int32]string)(nil), "types.MapStdTypes.NonnullStringEntry") + proto.RegisterMapType((map[int32]uint32)(nil), "types.MapStdTypes.NonnullUInt32Entry") + proto.RegisterMapType((map[int32]uint64)(nil), "types.MapStdTypes.NonnullUInt64Entry") + proto.RegisterMapType((map[int32]*bool)(nil), "types.MapStdTypes.NullableBoolEntry") + proto.RegisterMapType((map[int32]*[]byte)(nil), "types.MapStdTypes.NullableBytesEntry") + proto.RegisterMapType((map[int32]*float64)(nil), "types.MapStdTypes.NullableDoubleEntry") + proto.RegisterMapType((map[int32]*time.Duration)(nil), "types.MapStdTypes.NullableDurationEntry") + proto.RegisterMapType((map[int32]*float32)(nil), "types.MapStdTypes.NullableFloatEntry") + proto.RegisterMapType((map[int32]*int32)(nil), "types.MapStdTypes.NullableInt32Entry") + proto.RegisterMapType((map[int32]*int64)(nil), "types.MapStdTypes.NullableInt64Entry") + proto.RegisterMapType((map[int32]*string)(nil), "types.MapStdTypes.NullableStringEntry") + proto.RegisterMapType((map[int32]*time.Time)(nil), "types.MapStdTypes.NullableTimestampEntry") + proto.RegisterMapType((map[int32]*uint32)(nil), "types.MapStdTypes.NullableUInt32Entry") + proto.RegisterMapType((map[int32]*uint64)(nil), "types.MapStdTypes.NullableUInt64Entry") + proto.RegisterMapType((map[int32]time.Time)(nil), "types.MapStdTypes.TimestampEntry") + proto.RegisterType((*OneofProtoTypes)(nil), "types.OneofProtoTypes") + proto.RegisterType((*OneofStdTypes)(nil), "types.OneofStdTypes") +} +func (this *KnownTypes) Compare(that interface{}) int { if that == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - that1, ok := that.(*OneofProtoTypes) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(OneofProtoTypes) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofProtoTypes") + return 1 } } if that1 == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that is type *OneofProtoTypes but is nil && this != nil") + return 1 } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes but is not nil && this == nil") + return -1 } - if that1.OneOfProtoTimes == nil { - if this.OneOfProtoTimes != nil { - return fmt.Errorf("this.OneOfProtoTimes != nil && that1.OneOfProtoTimes == nil") - } - } else if this.OneOfProtoTimes == nil { - return fmt.Errorf("this.OneOfProtoTimes == nil && that1.OneOfProtoTimes != nil") - } else if err := this.OneOfProtoTimes.VerboseEqual(that1.OneOfProtoTimes); err != nil { - return err + if c := this.Dur.Compare(that1.Dur); c != 0 { + return c } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + if c := this.Ts.Compare(that1.Ts); c != 0 { + return c } - return nil -} -func (this *OneofProtoTypes_Timestamp) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") + if c := this.Dbl.Compare(that1.Dbl); c != 0 { + return c } - - that1, ok := that.(*OneofProtoTypes_Timestamp) - if !ok { - that2, ok := that.(OneofProtoTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofProtoTypes_Timestamp") - } + if c := this.Flt.Compare(that1.Flt); c != 0 { + return c } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is not nil && this == nil") + if c := this.I64.Compare(that1.I64); c != 0 { + return c } - if !this.Timestamp.Equal(that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + if c := this.U64.Compare(that1.U64); c != 0 { + return c } - return nil + if c := this.I32.Compare(that1.I32); c != 0 { + return c + } + if c := this.U32.Compare(that1.U32); c != 0 { + return c + } + if c := this.Bool.Compare(that1.Bool); c != 0 { + return c + } + if c := this.Str.Compare(that1.Str); c != 0 { + return c + } + if c := this.Bytes.Compare(that1.Bytes); c != 0 { + return c + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 } -func (this *OneofProtoTypes_Duration) VerboseEqual(that interface{}) error { +func (this *ProtoTypes) Compare(that interface{}) int { if that == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - that1, ok := that.(*OneofProtoTypes_Duration) + that1, ok := that.(*ProtoTypes) if !ok { - that2, ok := that.(OneofProtoTypes_Duration) + that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofProtoTypes_Duration") + return 1 } } if that1 == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that is type *OneofProtoTypes_Duration but is nil && this != nil") + return 1 } else if this == nil { - return fmt.Errorf("that is type *OneofProtoTypes_Duration but is not nil && this == nil") + return -1 } - if !this.Duration.Equal(that1.Duration) { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + if c := this.NullableTimestamp.Compare(that1.NullableTimestamp); c != 0 { + return c } - return nil -} -func (this *OneofProtoTypes) Equal(that interface{}) bool { - if that == nil { - return this == nil + if c := this.NullableDuration.Compare(that1.NullableDuration); c != 0 { + return c } - - that1, ok := that.(*OneofProtoTypes) - if !ok { - that2, ok := that.(OneofProtoTypes) - if ok { - that1 = &that2 - } else { - return false - } + if c := this.NullableDouble.Compare(that1.NullableDouble); c != 0 { + return c } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if c := this.NullableFloat.Compare(that1.NullableFloat); c != 0 { + return c } - if that1.OneOfProtoTimes == nil { - if this.OneOfProtoTimes != nil { - return false - } - } else if this.OneOfProtoTimes == nil { - return false - } else if !this.OneOfProtoTimes.Equal(that1.OneOfProtoTimes) { - return false + if c := this.NullableInt64.Compare(that1.NullableInt64); c != 0 { + return c } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false + if c := this.NullableUInt64.Compare(that1.NullableUInt64); c != 0 { + return c } - return true -} -func (this *OneofProtoTypes_Timestamp) Equal(that interface{}) bool { - if that == nil { - return this == nil + if c := this.NullableInt32.Compare(that1.NullableInt32); c != 0 { + return c } - - that1, ok := that.(*OneofProtoTypes_Timestamp) - if !ok { - that2, ok := that.(OneofProtoTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return false - } + if c := this.NullableUInt32.Compare(that1.NullableUInt32); c != 0 { + return c } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if c := this.NullableBool.Compare(that1.NullableBool); c != 0 { + return c } - if !this.Timestamp.Equal(that1.Timestamp) { - return false + if c := this.NullableString.Compare(that1.NullableString); c != 0 { + return c } - return true -} -func (this *OneofProtoTypes_Duration) Equal(that interface{}) bool { - if that == nil { - return this == nil + if c := this.NullableBytes.Compare(that1.NullableBytes); c != 0 { + return c } - - that1, ok := that.(*OneofProtoTypes_Duration) - if !ok { - that2, ok := that.(OneofProtoTypes_Duration) - if ok { - that1 = &that2 - } else { - return false - } + if c := this.Timestamp.Compare(&that1.Timestamp); c != 0 { + return c } - if that1 == nil { - return this == nil - } else if this == nil { - return false + if c := this.Duration.Compare(&that1.Duration); c != 0 { + return c } - if !this.Duration.Equal(that1.Duration) { - return false + if c := this.NonnullDouble.Compare(&that1.NonnullDouble); c != 0 { + return c } - return true + if c := this.NonnullFloat.Compare(&that1.NonnullFloat); c != 0 { + return c + } + if c := this.NonnullInt64.Compare(&that1.NonnullInt64); c != 0 { + return c + } + if c := this.NonnullUInt64.Compare(&that1.NonnullUInt64); c != 0 { + return c + } + if c := this.NonnullInt32.Compare(&that1.NonnullInt32); c != 0 { + return c + } + if c := this.NonnullUInt32.Compare(&that1.NonnullUInt32); c != 0 { + return c + } + if c := this.NonnullBool.Compare(&that1.NonnullBool); c != 0 { + return c + } + if c := this.NonnullString.Compare(&that1.NonnullString); c != 0 { + return c + } + if c := this.NonnullBytes.Compare(&that1.NonnullBytes); c != 0 { + return c + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 } -func (this *OneofStdTypes) VerboseEqual(that interface{}) error { +func (this *RepProtoTypes) Compare(that interface{}) int { if that == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - that1, ok := that.(*OneofStdTypes) + that1, ok := that.(*RepProtoTypes) if !ok { - that2, ok := that.(OneofStdTypes) + that2, ok := that.(RepProtoTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes") + return 1 } } if that1 == nil { if this == nil { - return nil + return 0 } - return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") + return 1 } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + return -1 } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { - return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + if len(this.NullableTimestamps) < len(that1.NullableTimestamps) { + return -1 } - } else if this.OneOfStdTimes == nil { - return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") - } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { - return err + return 1 } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + for i := range this.NullableTimestamps { + if c := this.NullableTimestamps[i].Compare(that1.NullableTimestamps[i]); c != 0 { + return c + } } - return nil -} -func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil + if len(this.NullableDurations) != len(that1.NullableDurations) { + if len(this.NullableDurations) < len(that1.NullableDurations) { + return -1 } - return fmt.Errorf("that == nil && this != nil") + return 1 } - - that1, ok := that.(*OneofStdTypes_Timestamp) - if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + for i := range this.NullableDurations { + if c := this.NullableDurations[i].Compare(that1.NullableDurations[i]); c != 0 { + return c } } - if that1 == nil { - if this == nil { - return nil + if len(this.Timestamps) != len(that1.Timestamps) { + if len(this.Timestamps) < len(that1.Timestamps) { + return -1 } - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") + return 1 } - if that1.Timestamp == nil { - if this.Timestamp != nil { - return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + for i := range this.Timestamps { + if c := this.Timestamps[i].Compare(&that1.Timestamps[i]); c != 0 { + return c } - } else if !this.Timestamp.Equal(*that1.Timestamp) { - return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) } - return nil + if len(this.Durations) != len(that1.Durations) { + if len(this.Durations) < len(that1.Durations) { + return -1 + } + return 1 + } + for i := range this.Durations { + if c := this.Durations[i].Compare(&that1.Durations[i]); c != 0 { + return c + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + if len(this.NullableDouble) < len(that1.NullableDouble) { + return -1 + } + return 1 + } + for i := range this.NullableDouble { + if c := this.NullableDouble[i].Compare(that1.NullableDouble[i]); c != 0 { + return c + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + if len(this.NonnullDouble) < len(that1.NonnullDouble) { + return -1 + } + return 1 + } + for i := range this.NonnullDouble { + if c := this.NonnullDouble[i].Compare(&that1.NonnullDouble[i]); c != 0 { + return c + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + if len(this.NullableFloat) < len(that1.NullableFloat) { + return -1 + } + return 1 + } + for i := range this.NullableFloat { + if c := this.NullableFloat[i].Compare(that1.NullableFloat[i]); c != 0 { + return c + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + if len(this.NonnullFloat) < len(that1.NonnullFloat) { + return -1 + } + return 1 + } + for i := range this.NonnullFloat { + if c := this.NonnullFloat[i].Compare(&that1.NonnullFloat[i]); c != 0 { + return c + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + if len(this.NullableInt64) < len(that1.NullableInt64) { + return -1 + } + return 1 + } + for i := range this.NullableInt64 { + if c := this.NullableInt64[i].Compare(that1.NullableInt64[i]); c != 0 { + return c + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + if len(this.NonnullInt64) < len(that1.NonnullInt64) { + return -1 + } + return 1 + } + for i := range this.NonnullInt64 { + if c := this.NonnullInt64[i].Compare(&that1.NonnullInt64[i]); c != 0 { + return c + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + if len(this.NullableUInt64) < len(that1.NullableUInt64) { + return -1 + } + return 1 + } + for i := range this.NullableUInt64 { + if c := this.NullableUInt64[i].Compare(that1.NullableUInt64[i]); c != 0 { + return c + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + if len(this.NonnullUInt64) < len(that1.NonnullUInt64) { + return -1 + } + return 1 + } + for i := range this.NonnullUInt64 { + if c := this.NonnullUInt64[i].Compare(&that1.NonnullUInt64[i]); c != 0 { + return c + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + if len(this.NullableInt32) < len(that1.NullableInt32) { + return -1 + } + return 1 + } + for i := range this.NullableInt32 { + if c := this.NullableInt32[i].Compare(that1.NullableInt32[i]); c != 0 { + return c + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + if len(this.NonnullInt32) < len(that1.NonnullInt32) { + return -1 + } + return 1 + } + for i := range this.NonnullInt32 { + if c := this.NonnullInt32[i].Compare(&that1.NonnullInt32[i]); c != 0 { + return c + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + if len(this.NullableUInt32) < len(that1.NullableUInt32) { + return -1 + } + return 1 + } + for i := range this.NullableUInt32 { + if c := this.NullableUInt32[i].Compare(that1.NullableUInt32[i]); c != 0 { + return c + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + if len(this.NonnullUInt32) < len(that1.NonnullUInt32) { + return -1 + } + return 1 + } + for i := range this.NonnullUInt32 { + if c := this.NonnullUInt32[i].Compare(&that1.NonnullUInt32[i]); c != 0 { + return c + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + if len(this.NullableBool) < len(that1.NullableBool) { + return -1 + } + return 1 + } + for i := range this.NullableBool { + if c := this.NullableBool[i].Compare(that1.NullableBool[i]); c != 0 { + return c + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + if len(this.NonnullBool) < len(that1.NonnullBool) { + return -1 + } + return 1 + } + for i := range this.NonnullBool { + if c := this.NonnullBool[i].Compare(&that1.NonnullBool[i]); c != 0 { + return c + } + } + if len(this.NullableString) != len(that1.NullableString) { + if len(this.NullableString) < len(that1.NullableString) { + return -1 + } + return 1 + } + for i := range this.NullableString { + if c := this.NullableString[i].Compare(that1.NullableString[i]); c != 0 { + return c + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + if len(this.NonnullString) < len(that1.NonnullString) { + return -1 + } + return 1 + } + for i := range this.NonnullString { + if c := this.NonnullString[i].Compare(&that1.NonnullString[i]); c != 0 { + return c + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + if len(this.NullableBytes) < len(that1.NullableBytes) { + return -1 + } + return 1 + } + for i := range this.NullableBytes { + if c := this.NullableBytes[i].Compare(that1.NullableBytes[i]); c != 0 { + return c + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + if len(this.NonnullBytes) < len(that1.NonnullBytes) { + return -1 + } + return 1 + } + for i := range this.NonnullBytes { + if c := this.NonnullBytes[i].Compare(&that1.NonnullBytes[i]); c != 0 { + return c + } + } + if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 { + return c + } + return 0 } -func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { +func (this *KnownTypes) VerboseEqual(that interface{}) error { if that == nil { if this == nil { return nil @@ -2065,42 +2836,69 @@ return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*OneofStdTypes_Duration) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(OneofStdTypes_Duration) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { - return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + return fmt.Errorf("that is not of type *KnownTypes") } } if that1 == nil { if this == nil { return nil } - return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + return fmt.Errorf("that is type *KnownTypes but is nil && this != nil") } else if this == nil { - return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + return fmt.Errorf("that is type *KnownTypes but is not nil && this == nil") } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) - } - } else if this.Duration != nil { - return fmt.Errorf("this.Duration == nil && that.Duration != nil") - } else if that1.Duration != nil { - return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + if !this.Dur.Equal(that1.Dur) { + return fmt.Errorf("Dur this(%v) Not Equal that(%v)", this.Dur, that1.Dur) + } + if !this.Ts.Equal(that1.Ts) { + return fmt.Errorf("Ts this(%v) Not Equal that(%v)", this.Ts, that1.Ts) + } + if !this.Dbl.Equal(that1.Dbl) { + return fmt.Errorf("Dbl this(%v) Not Equal that(%v)", this.Dbl, that1.Dbl) + } + if !this.Flt.Equal(that1.Flt) { + return fmt.Errorf("Flt this(%v) Not Equal that(%v)", this.Flt, that1.Flt) + } + if !this.I64.Equal(that1.I64) { + return fmt.Errorf("I64 this(%v) Not Equal that(%v)", this.I64, that1.I64) + } + if !this.U64.Equal(that1.U64) { + return fmt.Errorf("U64 this(%v) Not Equal that(%v)", this.U64, that1.U64) + } + if !this.I32.Equal(that1.I32) { + return fmt.Errorf("I32 this(%v) Not Equal that(%v)", this.I32, that1.I32) + } + if !this.U32.Equal(that1.U32) { + return fmt.Errorf("U32 this(%v) Not Equal that(%v)", this.U32, that1.U32) + } + if !this.Bool.Equal(that1.Bool) { + return fmt.Errorf("Bool this(%v) Not Equal that(%v)", this.Bool, that1.Bool) + } + if !this.Str.Equal(that1.Str) { + return fmt.Errorf("Str this(%v) Not Equal that(%v)", this.Str, that1.Str) + } + if !this.Bytes.Equal(that1.Bytes) { + return fmt.Errorf("Bytes this(%v) Not Equal that(%v)", this.Bytes, that1.Bytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) } return nil } -func (this *OneofStdTypes) Equal(that interface{}) bool { +func (this *KnownTypes) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*OneofStdTypes) + that1, ok := that.(*KnownTypes) if !ok { - that2, ok := that.(OneofStdTypes) + that2, ok := that.(KnownTypes) if ok { that1 = &that2 } else { @@ -2112,13 +2910,37 @@ } else if this == nil { return false } - if that1.OneOfStdTimes == nil { - if this.OneOfStdTimes != nil { - return false - } - } else if this.OneOfStdTimes == nil { + if !this.Dur.Equal(that1.Dur) { return false - } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { + } + if !this.Ts.Equal(that1.Ts) { + return false + } + if !this.Dbl.Equal(that1.Dbl) { + return false + } + if !this.Flt.Equal(that1.Flt) { + return false + } + if !this.I64.Equal(that1.I64) { + return false + } + if !this.U64.Equal(that1.U64) { + return false + } + if !this.I32.Equal(that1.I32) { + return false + } + if !this.U32.Equal(that1.U32) { + return false + } + if !this.Bool.Equal(that1.Bool) { + return false + } + if !this.Str.Equal(that1.Str) { + return false + } + if !this.Bytes.Equal(that1.Bytes) { return false } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { @@ -2126,42 +2948,110 @@ } return true } -func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { +func (this *ProtoTypes) VerboseEqual(that interface{}) error { if that == nil { - return this == nil + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") } - that1, ok := that.(*OneofStdTypes_Timestamp) + that1, ok := that.(*ProtoTypes) if !ok { - that2, ok := that.(OneofStdTypes_Timestamp) + that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { - return false + return fmt.Errorf("that is not of type *ProtoTypes") } } if that1 == nil { - return this == nil + if this == nil { + return nil + } + return fmt.Errorf("that is type *ProtoTypes but is nil && this != nil") } else if this == nil { - return false + return fmt.Errorf("that is type *ProtoTypes but is not nil && this == nil") } - if that1.Timestamp == nil { - if this.Timestamp != nil { - return false - } - } else if !this.Timestamp.Equal(*that1.Timestamp) { - return false + if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) } - return true + if !this.NullableDuration.Equal(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) + } + if !this.NullableDouble.Equal(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) + } + if !this.NullableFloat.Equal(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) + } + if !this.NullableInt64.Equal(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) + } + if !this.NullableUInt64.Equal(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) + } + if !this.NullableInt32.Equal(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) + } + if !this.NullableUInt32.Equal(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) + } + if !this.NullableBool.Equal(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) + } + if !this.NullableString.Equal(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) + } + if !this.NullableBytes.Equal(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) + } + if !this.Timestamp.Equal(&that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + if !this.Duration.Equal(&that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + if !this.NonnullDouble.Equal(&that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) + } + if !this.NonnullFloat.Equal(&that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) + } + if !this.NonnullInt64.Equal(&that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) + } + if !this.NonnullUInt64.Equal(&that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) + } + if !this.NonnullInt32.Equal(&that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) + } + if !this.NonnullUInt32.Equal(&that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) + } + if !this.NonnullBool.Equal(&that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) + } + if !this.NonnullString.Equal(&that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) + } + if !this.NonnullBytes.Equal(&that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil } -func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { +func (this *ProtoTypes) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*OneofStdTypes_Duration) + that1, ok := that.(*ProtoTypes) if !ok { - that2, ok := that.(OneofStdTypes_Duration) + that2, ok := that.(ProtoTypes) if ok { that1 = &that2 } else { @@ -2173,707 +3063,11869 @@ } else if this == nil { return false } - if this.Duration != nil && that1.Duration != nil { - if *this.Duration != *that1.Duration { - return false - } - } else if this.Duration != nil { + if !this.NullableTimestamp.Equal(that1.NullableTimestamp) { return false - } else if that1.Duration != nil { + } + if !this.NullableDuration.Equal(that1.NullableDuration) { return false } - return true -} -func NewPopulatedKnownTypes(r randyTypes, easy bool) *KnownTypes { - this := &KnownTypes{} - if r.Intn(10) != 0 { - this.Dur = types.NewPopulatedDuration(r, easy) + if !this.NullableDouble.Equal(that1.NullableDouble) { + return false } - if r.Intn(10) != 0 { - this.Ts = types.NewPopulatedTimestamp(r, easy) + if !this.NullableFloat.Equal(that1.NullableFloat) { + return false } - if r.Intn(10) != 0 { - this.Dbl = types.NewPopulatedDoubleValue(r, easy) + if !this.NullableInt64.Equal(that1.NullableInt64) { + return false } - if r.Intn(10) != 0 { - this.Flt = types.NewPopulatedFloatValue(r, easy) + if !this.NullableUInt64.Equal(that1.NullableUInt64) { + return false } - if r.Intn(10) != 0 { - this.I64 = types.NewPopulatedInt64Value(r, easy) + if !this.NullableInt32.Equal(that1.NullableInt32) { + return false } - if r.Intn(10) != 0 { - this.U64 = types.NewPopulatedUInt64Value(r, easy) + if !this.NullableUInt32.Equal(that1.NullableUInt32) { + return false } - if r.Intn(10) != 0 { - this.I32 = types.NewPopulatedInt32Value(r, easy) + if !this.NullableBool.Equal(that1.NullableBool) { + return false } - if r.Intn(10) != 0 { - this.U32 = types.NewPopulatedUInt32Value(r, easy) + if !this.NullableString.Equal(that1.NullableString) { + return false } - if r.Intn(10) != 0 { - this.Bool = types.NewPopulatedBoolValue(r, easy) + if !this.NullableBytes.Equal(that1.NullableBytes) { + return false } - if r.Intn(10) != 0 { - this.Str = types.NewPopulatedStringValue(r, easy) + if !this.Timestamp.Equal(&that1.Timestamp) { + return false } - if r.Intn(10) != 0 { - this.Bytes = types.NewPopulatedBytesValue(r, easy) + if !this.Duration.Equal(&that1.Duration) { + return false } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + if !this.NonnullDouble.Equal(&that1.NonnullDouble) { + return false } - return this -} - -func NewPopulatedProtoTypes(r randyTypes, easy bool) *ProtoTypes { - this := &ProtoTypes{} - if r.Intn(10) != 0 { - this.NullableTimestamp = types.NewPopulatedTimestamp(r, easy) + if !this.NonnullFloat.Equal(&that1.NonnullFloat) { + return false } - if r.Intn(10) != 0 { - this.NullableDuration = types.NewPopulatedDuration(r, easy) + if !this.NonnullInt64.Equal(&that1.NonnullInt64) { + return false } - v1 := types.NewPopulatedTimestamp(r, easy) - this.Timestamp = *v1 - v2 := types.NewPopulatedDuration(r, easy) - this.Duration = *v2 - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if !this.NonnullUInt64.Equal(&that1.NonnullUInt64) { + return false } - return this -} - -func NewPopulatedStdTypes(r randyTypes, easy bool) *StdTypes { - this := &StdTypes{} - if r.Intn(10) != 0 { - this.NullableTimestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + if !this.NonnullInt32.Equal(&that1.NonnullInt32) { + return false } - if r.Intn(10) != 0 { - this.NullableDuration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if !this.NonnullUInt32.Equal(&that1.NonnullUInt32) { + return false } - v3 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamp = *v3 - v4 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Duration = *v4 - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if !this.NonnullBool.Equal(&that1.NonnullBool) { + return false } - return this -} - -func NewPopulatedRepProtoTypes(r randyTypes, easy bool) *RepProtoTypes { - this := &RepProtoTypes{} - if r.Intn(10) != 0 { - v5 := r.Intn(5) - this.NullableTimestamps = make([]*types.Timestamp, v5) - for i := 0; i < v5; i++ { - this.NullableTimestamps[i] = types.NewPopulatedTimestamp(r, easy) - } + if !this.NonnullString.Equal(&that1.NonnullString) { + return false } - if r.Intn(10) != 0 { - v6 := r.Intn(5) - this.NullableDurations = make([]*types.Duration, v6) - for i := 0; i < v6; i++ { - this.NullableDurations[i] = types.NewPopulatedDuration(r, easy) - } + if !this.NonnullBytes.Equal(&that1.NonnullBytes) { + return false } - if r.Intn(10) != 0 { - v7 := r.Intn(5) - this.Timestamps = make([]types.Timestamp, v7) - for i := 0; i < v7; i++ { - v8 := types.NewPopulatedTimestamp(r, easy) - this.Timestamps[i] = *v8 - } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false } - if r.Intn(10) != 0 { - v9 := r.Intn(5) - this.Durations = make([]types.Duration, v9) - for i := 0; i < v9; i++ { - v10 := types.NewPopulatedDuration(r, easy) - this.Durations[i] = *v10 + return true +} +func (this *StdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil } + return fmt.Errorf("that == nil && this != nil") } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) - } - return this -} -func NewPopulatedRepStdTypes(r randyTypes, easy bool) *RepStdTypes { - this := &RepStdTypes{} - if r.Intn(10) != 0 { - v11 := r.Intn(5) - this.NullableTimestamps = make([]*time.Time, v11) - for i := 0; i < v11; i++ { - this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + that1, ok := that.(*StdTypes) + if !ok { + that2, ok := that.(StdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *StdTypes") } } - if r.Intn(10) != 0 { - v12 := r.Intn(5) - this.NullableDurations = make([]*time.Duration, v12) - for i := 0; i < v12; i++ { - this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + if that1 == nil { + if this == nil { + return nil } + return fmt.Errorf("that is type *StdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *StdTypes but is not nil && this == nil") } - if r.Intn(10) != 0 { - v13 := r.Intn(5) - this.Timestamps = make([]time.Time, v13) - for i := 0; i < v13; i++ { - v14 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - this.Timestamps[i] = *v14 + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return fmt.Errorf("this.NullableTimestamp != nil && that1.NullableTimestamp == nil") } + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", this.NullableTimestamp, that1.NullableTimestamp) } - if r.Intn(10) != 0 { - v15 := r.Intn(5) - this.Durations = make([]time.Duration, v15) - for i := 0; i < v15; i++ { - v16 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - this.Durations[i] = *v16 + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", *this.NullableDuration, *that1.NullableDuration) } + } else if this.NullableDuration != nil { + return fmt.Errorf("this.NullableDuration == nil && that.NullableDuration != nil") + } else if that1.NullableDuration != nil { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", this.NullableDuration, that1.NullableDuration) } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) - } - return this -} - -func NewPopulatedMapProtoTypes(r randyTypes, easy bool) *MapProtoTypes { - this := &MapProtoTypes{} - if r.Intn(10) != 0 { - v17 := r.Intn(10) - this.NullableTimestamp = make(map[int32]*types.Timestamp) - for i := 0; i < v17; i++ { - this.NullableTimestamp[int32(r.Int31())] = types.NewPopulatedTimestamp(r, easy) + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", *this.NullableDouble, *that1.NullableDouble) + } + } else if this.NullableDouble != nil { + return fmt.Errorf("this.NullableDouble == nil && that.NullableDouble != nil") + } else if that1.NullableDouble != nil { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", this.NullableDouble, that1.NullableDouble) + } + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", *this.NullableFloat, *that1.NullableFloat) + } + } else if this.NullableFloat != nil { + return fmt.Errorf("this.NullableFloat == nil && that.NullableFloat != nil") + } else if that1.NullableFloat != nil { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", this.NullableFloat, that1.NullableFloat) + } + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", *this.NullableInt64, *that1.NullableInt64) + } + } else if this.NullableInt64 != nil { + return fmt.Errorf("this.NullableInt64 == nil && that.NullableInt64 != nil") + } else if that1.NullableInt64 != nil { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", this.NullableInt64, that1.NullableInt64) + } + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", *this.NullableUInt64, *that1.NullableUInt64) + } + } else if this.NullableUInt64 != nil { + return fmt.Errorf("this.NullableUInt64 == nil && that.NullableUInt64 != nil") + } else if that1.NullableUInt64 != nil { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", this.NullableUInt64, that1.NullableUInt64) + } + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", *this.NullableInt32, *that1.NullableInt32) + } + } else if this.NullableInt32 != nil { + return fmt.Errorf("this.NullableInt32 == nil && that.NullableInt32 != nil") + } else if that1.NullableInt32 != nil { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", this.NullableInt32, that1.NullableInt32) + } + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", *this.NullableUInt32, *that1.NullableUInt32) + } + } else if this.NullableUInt32 != nil { + return fmt.Errorf("this.NullableUInt32 == nil && that.NullableUInt32 != nil") + } else if that1.NullableUInt32 != nil { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", this.NullableUInt32, that1.NullableUInt32) + } + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", *this.NullableBool, *that1.NullableBool) + } + } else if this.NullableBool != nil { + return fmt.Errorf("this.NullableBool == nil && that.NullableBool != nil") + } else if that1.NullableBool != nil { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", this.NullableBool, that1.NullableBool) + } + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", *this.NullableString, *that1.NullableString) + } + } else if this.NullableString != nil { + return fmt.Errorf("this.NullableString == nil && that.NullableString != nil") + } else if that1.NullableString != nil { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", this.NullableString, that1.NullableString) + } + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return fmt.Errorf("this.NullableBytes != nil && that1.NullableBytes == nil") } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", this.NullableBytes, that1.NullableBytes) } - if r.Intn(10) != 0 { - v18 := r.Intn(10) - this.Timestamp = make(map[int32]types.Timestamp) - for i := 0; i < v18; i++ { - this.Timestamp[int32(r.Int31())] = *types.NewPopulatedTimestamp(r, easy) - } + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) } - if r.Intn(10) != 0 { - v19 := r.Intn(10) - this.NullableDuration = make(map[int32]*types.Duration) - for i := 0; i < v19; i++ { - this.NullableDuration[int32(r.Int31())] = types.NewPopulatedDuration(r, easy) - } + if this.Duration != that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) } - if r.Intn(10) != 0 { - v20 := r.Intn(10) - this.Duration = make(map[int32]types.Duration) - for i := 0; i < v20; i++ { - this.Duration[int32(r.Int31())] = *types.NewPopulatedDuration(r, easy) - } + if this.NonnullDouble != that1.NonnullDouble { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", this.NonnullDouble, that1.NonnullDouble) } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if this.NonnullFloat != that1.NonnullFloat { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", this.NonnullFloat, that1.NonnullFloat) } - return this -} - -func NewPopulatedMapStdTypes(r randyTypes, easy bool) *MapStdTypes { - this := &MapStdTypes{} - if r.Intn(10) != 0 { - v21 := r.Intn(10) - this.NullableTimestamp = make(map[int32]*time.Time) - for i := 0; i < v21; i++ { - this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - } + if this.NonnullInt64 != that1.NonnullInt64 { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", this.NonnullInt64, that1.NonnullInt64) } - if r.Intn(10) != 0 { - v22 := r.Intn(10) - this.Timestamp = make(map[int32]time.Time) - for i := 0; i < v22; i++ { - this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - } + if this.NonnullUInt64 != that1.NonnullUInt64 { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", this.NonnullUInt64, that1.NonnullUInt64) } - if r.Intn(10) != 0 { - v23 := r.Intn(10) - this.NullableDuration = make(map[int32]*time.Duration) - for i := 0; i < v23; i++ { - this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - } + if this.NonnullInt32 != that1.NonnullInt32 { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", this.NonnullInt32, that1.NonnullInt32) } - if r.Intn(10) != 0 { - v24 := r.Intn(10) - this.Duration = make(map[int32]time.Duration) - for i := 0; i < v24; i++ { - this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - } + if this.NonnullUInt32 != that1.NonnullUInt32 { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", this.NonnullUInt32, that1.NonnullUInt32) } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 5) + if this.NonnullBool != that1.NonnullBool { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", this.NonnullBool, that1.NonnullBool) } - return this -} - -func NewPopulatedOneofProtoTypes(r randyTypes, easy bool) *OneofProtoTypes { - this := &OneofProtoTypes{} - oneofNumber_OneOfProtoTimes := []int32{1, 2}[r.Intn(2)] - switch oneofNumber_OneOfProtoTimes { - case 1: - this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Timestamp(r, easy) - case 2: - this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Duration(r, easy) + if this.NonnullString != that1.NonnullString { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", this.NonnullString, that1.NonnullString) } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 3) + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", this.NonnullBytes, that1.NonnullBytes) } - return this -} - -func NewPopulatedOneofProtoTypes_Timestamp(r randyTypes, easy bool) *OneofProtoTypes_Timestamp { - this := &OneofProtoTypes_Timestamp{} - this.Timestamp = types.NewPopulatedTimestamp(r, easy) - return this -} -func NewPopulatedOneofProtoTypes_Duration(r randyTypes, easy bool) *OneofProtoTypes_Duration { - this := &OneofProtoTypes_Duration{} - this.Duration = types.NewPopulatedDuration(r, easy) - return this -} -func NewPopulatedOneofStdTypes(r randyTypes, easy bool) *OneofStdTypes { - this := &OneofStdTypes{} - oneofNumber_OneOfStdTimes := []int32{1, 2}[r.Intn(2)] - switch oneofNumber_OneOfStdTimes { - case 1: - this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) - case 2: - this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) - } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedTypes(r, 3) + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) } - return this -} - -func NewPopulatedOneofStdTypes_Timestamp(r randyTypes, easy bool) *OneofStdTypes_Timestamp { - this := &OneofStdTypes_Timestamp{} - this.Timestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) - return this -} -func NewPopulatedOneofStdTypes_Duration(r randyTypes, easy bool) *OneofStdTypes_Duration { - this := &OneofStdTypes_Duration{} - this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) - return this -} - -type randyTypes interface { - Float32() float32 - Float64() float64 - Int63() int64 - Int31() int32 - Uint32() uint32 - Intn(n int) int + return nil } +func (this *StdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } -func randUTF8RuneTypes(r randyTypes) rune { - ru := r.Intn(62) - if ru < 10 { - return rune(ru + 48) - } else if ru < 36 { - return rune(ru + 55) + that1, ok := that.(*StdTypes) + if !ok { + that2, ok := that.(StdTypes) + if ok { + that1 = &that2 + } else { + return false + } } - return rune(ru + 61) -} -func randStringTypes(r randyTypes) string { - v25 := r.Intn(100) - tmps := make([]rune, v25) - for i := 0; i < v25; i++ { - tmps[i] = randUTF8RuneTypes(r) + if that1 == nil { + return this == nil + } else if this == nil { + return false } - return string(tmps) -} -func randUnrecognizedTypes(r randyTypes, maxFieldNumber int) (dAtA []byte) { - l := r.Intn(5) - for i := 0; i < l; i++ { - wire := r.Intn(4) - if wire == 3 { - wire = 5 + if that1.NullableTimestamp == nil { + if this.NullableTimestamp != nil { + return false } - fieldNumber := maxFieldNumber + r.Intn(100) - dAtA = randFieldTypes(dAtA, r, fieldNumber, wire) + } else if !this.NullableTimestamp.Equal(*that1.NullableTimestamp) { + return false } - return dAtA -} -func randFieldTypes(dAtA []byte, r randyTypes, fieldNumber int, wire int) []byte { - key := uint32(fieldNumber)<<3 | uint32(wire) - switch wire { - case 0: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - v26 := r.Int63() - if r.Intn(2) == 0 { - v26 *= -1 + if this.NullableDuration != nil && that1.NullableDuration != nil { + if *this.NullableDuration != *that1.NullableDuration { + return false } - dAtA = encodeVarintPopulateTypes(dAtA, uint64(v26)) - case 1: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - case 2: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - ll := r.Intn(100) - dAtA = encodeVarintPopulateTypes(dAtA, uint64(ll)) - for j := 0; j < ll; j++ { - dAtA = append(dAtA, byte(r.Intn(256))) + } else if this.NullableDuration != nil { + return false + } else if that1.NullableDuration != nil { + return false + } + if this.NullableDouble != nil && that1.NullableDouble != nil { + if *this.NullableDouble != *that1.NullableDouble { + return false } - default: - dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + } else if this.NullableDouble != nil { + return false + } else if that1.NullableDouble != nil { + return false } - return dAtA -} -func encodeVarintPopulateTypes(dAtA []byte, v uint64) []byte { - for v >= 1<<7 { - dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) - v >>= 7 + if this.NullableFloat != nil && that1.NullableFloat != nil { + if *this.NullableFloat != *that1.NullableFloat { + return false + } + } else if this.NullableFloat != nil { + return false + } else if that1.NullableFloat != nil { + return false } - dAtA = append(dAtA, uint8(v)) - return dAtA -} -func (m *KnownTypes) Size() (n int) { - var l int - _ = l - if m.Dur != nil { - l = m.Dur.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NullableInt64 != nil && that1.NullableInt64 != nil { + if *this.NullableInt64 != *that1.NullableInt64 { + return false + } + } else if this.NullableInt64 != nil { + return false + } else if that1.NullableInt64 != nil { + return false } - if m.Ts != nil { - l = m.Ts.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NullableUInt64 != nil && that1.NullableUInt64 != nil { + if *this.NullableUInt64 != *that1.NullableUInt64 { + return false + } + } else if this.NullableUInt64 != nil { + return false + } else if that1.NullableUInt64 != nil { + return false } - if m.Dbl != nil { - l = m.Dbl.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NullableInt32 != nil && that1.NullableInt32 != nil { + if *this.NullableInt32 != *that1.NullableInt32 { + return false + } + } else if this.NullableInt32 != nil { + return false + } else if that1.NullableInt32 != nil { + return false } - if m.Flt != nil { - l = m.Flt.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NullableUInt32 != nil && that1.NullableUInt32 != nil { + if *this.NullableUInt32 != *that1.NullableUInt32 { + return false + } + } else if this.NullableUInt32 != nil { + return false + } else if that1.NullableUInt32 != nil { + return false } - if m.I64 != nil { - l = m.I64.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NullableBool != nil && that1.NullableBool != nil { + if *this.NullableBool != *that1.NullableBool { + return false + } + } else if this.NullableBool != nil { + return false + } else if that1.NullableBool != nil { + return false } - if m.U64 != nil { - l = m.U64.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NullableString != nil && that1.NullableString != nil { + if *this.NullableString != *that1.NullableString { + return false + } + } else if this.NullableString != nil { + return false + } else if that1.NullableString != nil { + return false } - if m.I32 != nil { - l = m.I32.Size() - n += 1 + l + sovTypes(uint64(l)) + if that1.NullableBytes == nil { + if this.NullableBytes != nil { + return false + } + } else if !bytes.Equal(*this.NullableBytes, *that1.NullableBytes) { + return false } - if m.U32 != nil { - l = m.U32.Size() - n += 1 + l + sovTypes(uint64(l)) + if !this.Timestamp.Equal(that1.Timestamp) { + return false } - if m.Bool != nil { - l = m.Bool.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.Duration != that1.Duration { + return false } - if m.Str != nil { - l = m.Str.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NonnullDouble != that1.NonnullDouble { + return false } - if m.Bytes != nil { - l = m.Bytes.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NonnullFloat != that1.NonnullFloat { + return false } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if this.NonnullInt64 != that1.NonnullInt64 { + return false } - return n -} - -func (m *ProtoTypes) Size() (n int) { - var l int - _ = l - if m.NullableTimestamp != nil { - l = m.NullableTimestamp.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NonnullUInt64 != that1.NonnullUInt64 { + return false } - if m.NullableDuration != nil { - l = m.NullableDuration.Size() - n += 1 + l + sovTypes(uint64(l)) + if this.NonnullInt32 != that1.NonnullInt32 { + return false } - l = m.Timestamp.Size() - n += 1 + l + sovTypes(uint64(l)) - l = m.Duration.Size() - n += 1 + l + sovTypes(uint64(l)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if this.NonnullUInt32 != that1.NonnullUInt32 { + return false } - return n -} - -func (m *StdTypes) Size() (n int) { - var l int - _ = l - if m.NullableTimestamp != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp) - n += 1 + l + sovTypes(uint64(l)) + if this.NonnullBool != that1.NonnullBool { + return false } - if m.NullableDuration != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration) - n += 1 + l + sovTypes(uint64(l)) + if this.NonnullString != that1.NonnullString { + return false } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) - n += 1 + l + sovTypes(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) - n += 1 + l + sovTypes(uint64(l)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if !bytes.Equal(this.NonnullBytes, that1.NonnullBytes) { + return false } - return n + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true } +func (this *RepProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } -func (m *RepProtoTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, e := range m.NullableTimestamps { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + that1, ok := that.(*RepProtoTypes) + if !ok { + that2, ok := that.(RepProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *RepProtoTypes") } } - if len(m.NullableDurations) > 0 { - for _, e := range m.NullableDurations { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if that1 == nil { + if this == nil { + return nil } + return fmt.Errorf("that is type *RepProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *RepProtoTypes but is not nil && this == nil") } - if len(m.Timestamps) > 0 { - for _, e := range m.Timestamps { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) } } - if len(m.Durations) > 0 { - for _, e := range m.Durations { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + } + for i := range this.NullableDurations { + if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) } - return n -} - -func (m *RepStdTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamps) > 0 { - for _, e := range m.NullableTimestamps { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*e) - n += 1 + l + sovTypes(uint64(l)) + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) } } - if len(m.NullableDurations) > 0 { - for _, e := range m.NullableDurations { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*e) - n += 1 + l + sovTypes(uint64(l)) + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + } + for i := range this.Durations { + if !this.Durations[i].Equal(&that1.Durations[i]) { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) } } - if len(m.Timestamps) > 0 { - for _, e := range m.Timestamps { - l = github_com_gogo_protobuf_types.SizeOfStdTime(e) - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) } } - if len(m.Durations) > 0 { - for _, e := range m.Durations { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(e) - n += 1 + l + sovTypes(uint64(l)) + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + if !this.NonnullDouble[i].Equal(&that1.NonnullDouble[i]) { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) } - return n -} - -func (m *MapProtoTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k, v := range m.NullableTimestamp { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovTypes(uint64(l)) - } - mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) } } - if len(m.Timestamp) > 0 { - for k, v := range m.Timestamp { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if !this.NonnullFloat[i].Equal(&that1.NonnullFloat[i]) { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) } } - if len(m.NullableDuration) > 0 { - for k, v := range m.NullableDuration { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovTypes(uint64(l)) - } - mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) } } - if len(m.Duration) > 0 { - for k, v := range m.Duration { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if !this.NonnullInt64[i].Equal(&that1.NonnullInt64[i]) { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) } - return n -} - -func (m *MapStdTypes) Size() (n int) { - var l int - _ = l - if len(m.NullableTimestamp) > 0 { - for k, v := range m.NullableTimestamp { - _ = k - _ = v - l = 0 - if v != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*v) - l += 1 + sovTypes(uint64(l)) - } - mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) } } - if len(m.Timestamp) > 0 { - for k, v := range m.Timestamp { - _ = k - _ = v - l = github_com_gogo_protobuf_types.SizeOfStdTime(v) - mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if !this.NonnullUInt64[i].Equal(&that1.NonnullUInt64[i]) { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) } } - if len(m.NullableDuration) > 0 { - for k, v := range m.NullableDuration { - _ = k - _ = v - l = 0 - if v != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) - l += 1 + sovTypes(uint64(l)) - } - mapEntrySize := 1 + sovTypes(uint64(k)) + l - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) } } - if len(m.Duration) > 0 { - for k, v := range m.Duration { - _ = k - _ = v - l = github_com_gogo_protobuf_types.SizeOfStdDuration(v) - mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if !this.NonnullInt32[i].Equal(&that1.NonnullInt32[i]) { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) } - return n -} - -func (m *OneofProtoTypes) Size() (n int) { - var l int - _ = l - if m.OneOfProtoTimes != nil { - n += m.OneOfProtoTimes.Size() + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) } - return n -} - -func (m *OneofProtoTypes_Timestamp) Size() (n int) { - var l int - _ = l - if m.Timestamp != nil { - l = m.Timestamp.Size() - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NonnullUInt32 { + if !this.NonnullUInt32[i].Equal(&that1.NonnullUInt32[i]) { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } } - return n -} -func (m *OneofProtoTypes_Duration) Size() (n int) { - var l int - _ = l - if m.Duration != nil { - l = m.Duration.Size() - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) } - return n -} -func (m *OneofStdTypes) Size() (n int) { - var l int - _ = l - if m.OneOfStdTimes != nil { - n += m.OneOfStdTimes.Size() + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) } - return n -} - -func (m *OneofStdTypes_Timestamp) Size() (n int) { - var l int - _ = l - if m.Timestamp != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.Timestamp) - n += 1 + l + sovTypes(uint64(l)) + for i := range this.NonnullBool { + if !this.NonnullBool[i].Equal(&that1.NonnullBool[i]) { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } } - return n -} -func (m *OneofStdTypes_Duration) Size() (n int) { - var l int - _ = l - if m.Duration != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Duration) - n += 1 + l + sovTypes(uint64(l)) + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) } - return n -} - -func sovTypes(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) } } - return n + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + if !this.NonnullString[i].Equal(&that1.NonnullString[i]) { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + if !this.NonnullBytes[i].Equal(&that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil } -func sozTypes(x uint64) (n int) { +func (this *RepProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*RepProtoTypes) + if !ok { + that2, ok := that.(RepProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(that1.NullableTimestamps[i]) { + return false + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false + } + for i := range this.NullableDurations { + if !this.NullableDurations[i].Equal(that1.NullableDurations[i]) { + return false + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return false + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(&that1.Timestamps[i]) { + return false + } + } + if len(this.Durations) != len(that1.Durations) { + return false + } + for i := range this.Durations { + if !this.Durations[i].Equal(&that1.Durations[i]) { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + if !this.NonnullDouble[i].Equal(&that1.NonnullDouble[i]) { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + if !this.NonnullFloat[i].Equal(&that1.NonnullFloat[i]) { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + if !this.NonnullInt64[i].Equal(&that1.NonnullInt64[i]) { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + if !this.NonnullUInt64[i].Equal(&that1.NonnullUInt64[i]) { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + if !this.NonnullInt32[i].Equal(&that1.NonnullInt32[i]) { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if !this.NonnullUInt32[i].Equal(&that1.NonnullUInt32[i]) { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + if !this.NonnullBool[i].Equal(&that1.NonnullBool[i]) { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if !this.NonnullString[i].Equal(&that1.NonnullString[i]) { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + if !this.NonnullBytes[i].Equal(&that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *RepStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *RepStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *RepStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *RepStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return fmt.Errorf("NullableTimestamps this(%v) Not Equal that(%v)", len(this.NullableTimestamps), len(that1.NullableTimestamps)) + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return fmt.Errorf("NullableTimestamps this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamps[i], i, that1.NullableTimestamps[i]) + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return fmt.Errorf("NullableDurations this(%v) Not Equal that(%v)", len(this.NullableDurations), len(that1.NullableDurations)) + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDurations this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDurations[i], i, that1.NullableDurations[i]) + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return fmt.Errorf("Timestamps this(%v) Not Equal that(%v)", len(this.Timestamps), len(that1.Timestamps)) + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return fmt.Errorf("Timestamps this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamps[i], i, that1.Timestamps[i]) + } + } + if len(this.Durations) != len(that1.Durations) { + return fmt.Errorf("Durations this(%v) Not Equal that(%v)", len(this.Durations), len(that1.Durations)) + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return fmt.Errorf("Durations this[%v](%v) Not Equal that[%v](%v)", i, this.Durations[i], i, that1.Durations[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *RepStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*RepStdTypes) + if !ok { + that2, ok := that.(RepStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamps) != len(that1.NullableTimestamps) { + return false + } + for i := range this.NullableTimestamps { + if !this.NullableTimestamps[i].Equal(*that1.NullableTimestamps[i]) { + return false + } + } + if len(this.NullableDurations) != len(that1.NullableDurations) { + return false + } + for i := range this.NullableDurations { + if dthis, dthat := this.NullableDurations[i], that1.NullableDurations[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Timestamps) != len(that1.Timestamps) { + return false + } + for i := range this.Timestamps { + if !this.Timestamps[i].Equal(that1.Timestamps[i]) { + return false + } + } + if len(this.Durations) != len(that1.Durations) { + return false + } + for i := range this.Durations { + if this.Durations[i] != that1.Durations[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if dthis, dthat := this.NullableDouble[i], that1.NullableDouble[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + if this.NonnullDouble[i] != that1.NonnullDouble[i] { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if dthis, dthat := this.NullableFloat[i], that1.NullableFloat[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + if this.NonnullFloat[i] != that1.NonnullFloat[i] { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if dthis, dthat := this.NullableInt64[i], that1.NullableInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + if this.NonnullInt64[i] != that1.NonnullInt64[i] { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if dthis, dthat := this.NullableUInt64[i], that1.NullableUInt64[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + if this.NonnullUInt64[i] != that1.NonnullUInt64[i] { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if dthis, dthat := this.NullableInt32[i], that1.NullableInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + if this.NonnullInt32[i] != that1.NonnullInt32[i] { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if dthis, dthat := this.NullableUInt32[i], that1.NullableUInt32[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + if this.NonnullUInt32[i] != that1.NonnullUInt32[i] { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if dthis, dthat := this.NullableBool[i], that1.NullableBool[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + if this.NonnullBool[i] != that1.NonnullBool[i] { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if dthis, dthat := this.NullableString[i], that1.NullableString[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + if this.NonnullString[i] != that1.NonnullString[i] { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !bytes.Equal(*this.NullableBytes[i], *that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + if !bytes.Equal(this.NonnullBytes[i], that1.NonnullBytes[i]) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapProtoTypes) + if !ok { + that2, ok := that.(MapProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapProtoTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + a := this.Timestamp[i] + b := that1.Timestamp[i] + if !(&a).Equal(&b) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + a := this.Duration[i] + b := that1.Duration[i] + if !(&a).Equal(&b) { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !(&a).Equal(&b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapProtoTypes) + if !ok { + that2, ok := that.(MapProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + a := this.Timestamp[i] + b := that1.Timestamp[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if !this.NullableDuration[i].Equal(that1.NullableDuration[i]) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + a := this.Duration[i] + b := that1.Duration[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + if !this.NullableDouble[i].Equal(that1.NullableDouble[i]) { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + if !this.NullableFloat[i].Equal(that1.NullableFloat[i]) { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + if !this.NullableInt64[i].Equal(that1.NullableInt64[i]) { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + if !this.NullableUInt64[i].Equal(that1.NullableUInt64[i]) { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + if !this.NullableInt32[i].Equal(that1.NullableInt32[i]) { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + if !this.NullableUInt32[i].Equal(that1.NullableUInt32[i]) { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + if !this.NullableBool[i].Equal(that1.NullableBool[i]) { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + if !this.NullableString[i].Equal(that1.NullableString[i]) { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if !(&a).Equal(&b) { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + if !this.NullableBytes[i].Equal(that1.NullableBytes[i]) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !(&a).Equal(&b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *MapStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *MapStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *MapStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *MapStdTypes but is not nil && this == nil") + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return fmt.Errorf("NullableTimestamp this(%v) Not Equal that(%v)", len(this.NullableTimestamp), len(that1.NullableTimestamp)) + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return fmt.Errorf("NullableTimestamp this[%v](%v) Not Equal that[%v](%v)", i, this.NullableTimestamp[i], i, that1.NullableTimestamp[i]) + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", len(this.Timestamp), len(that1.Timestamp)) + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return fmt.Errorf("Timestamp this[%v](%v) Not Equal that[%v](%v)", i, this.Timestamp[i], i, that1.Timestamp[i]) + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return fmt.Errorf("NullableDuration this(%v) Not Equal that(%v)", len(this.NullableDuration), len(that1.NullableDuration)) + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return fmt.Errorf("NullableDuration this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDuration[i], i, that1.NullableDuration[i]) + } + } + if len(this.Duration) != len(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", len(this.Duration), len(that1.Duration)) + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return fmt.Errorf("Duration this[%v](%v) Not Equal that[%v](%v)", i, this.Duration[i], i, that1.Duration[i]) + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return fmt.Errorf("NullableDouble this(%v) Not Equal that(%v)", len(this.NullableDouble), len(that1.NullableDouble)) + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return fmt.Errorf("NullableDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NullableDouble[i], i, that1.NullableDouble[i]) + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return fmt.Errorf("NonnullDouble this(%v) Not Equal that(%v)", len(this.NonnullDouble), len(that1.NonnullDouble)) + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return fmt.Errorf("NonnullDouble this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullDouble[i], i, that1.NonnullDouble[i]) + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return fmt.Errorf("NullableFloat this(%v) Not Equal that(%v)", len(this.NullableFloat), len(that1.NullableFloat)) + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return fmt.Errorf("NullableFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NullableFloat[i], i, that1.NullableFloat[i]) + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return fmt.Errorf("NonnullFloat this(%v) Not Equal that(%v)", len(this.NonnullFloat), len(that1.NonnullFloat)) + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return fmt.Errorf("NonnullFloat this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullFloat[i], i, that1.NonnullFloat[i]) + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return fmt.Errorf("NullableInt64 this(%v) Not Equal that(%v)", len(this.NullableInt64), len(that1.NullableInt64)) + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return fmt.Errorf("NullableInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt64[i], i, that1.NullableInt64[i]) + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return fmt.Errorf("NonnullInt64 this(%v) Not Equal that(%v)", len(this.NonnullInt64), len(that1.NonnullInt64)) + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return fmt.Errorf("NonnullInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt64[i], i, that1.NonnullInt64[i]) + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return fmt.Errorf("NullableUInt64 this(%v) Not Equal that(%v)", len(this.NullableUInt64), len(that1.NullableUInt64)) + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return fmt.Errorf("NullableUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt64[i], i, that1.NullableUInt64[i]) + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return fmt.Errorf("NonnullUInt64 this(%v) Not Equal that(%v)", len(this.NonnullUInt64), len(that1.NonnullUInt64)) + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return fmt.Errorf("NonnullUInt64 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt64[i], i, that1.NonnullUInt64[i]) + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return fmt.Errorf("NullableInt32 this(%v) Not Equal that(%v)", len(this.NullableInt32), len(that1.NullableInt32)) + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return fmt.Errorf("NullableInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableInt32[i], i, that1.NullableInt32[i]) + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return fmt.Errorf("NonnullInt32 this(%v) Not Equal that(%v)", len(this.NonnullInt32), len(that1.NonnullInt32)) + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return fmt.Errorf("NonnullInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullInt32[i], i, that1.NonnullInt32[i]) + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return fmt.Errorf("NullableUInt32 this(%v) Not Equal that(%v)", len(this.NullableUInt32), len(that1.NullableUInt32)) + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return fmt.Errorf("NullableUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NullableUInt32[i], i, that1.NullableUInt32[i]) + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return fmt.Errorf("NonnullUInt32 this(%v) Not Equal that(%v)", len(this.NonnullUInt32), len(that1.NonnullUInt32)) + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return fmt.Errorf("NonnullUInt32 this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullUInt32[i], i, that1.NonnullUInt32[i]) + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return fmt.Errorf("NullableBool this(%v) Not Equal that(%v)", len(this.NullableBool), len(that1.NullableBool)) + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return fmt.Errorf("NullableBool this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBool[i], i, that1.NullableBool[i]) + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return fmt.Errorf("NonnullBool this(%v) Not Equal that(%v)", len(this.NonnullBool), len(that1.NonnullBool)) + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return fmt.Errorf("NonnullBool this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBool[i], i, that1.NonnullBool[i]) + } + } + if len(this.NullableString) != len(that1.NullableString) { + return fmt.Errorf("NullableString this(%v) Not Equal that(%v)", len(this.NullableString), len(that1.NullableString)) + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return fmt.Errorf("NullableString this[%v](%v) Not Equal that[%v](%v)", i, this.NullableString[i], i, that1.NullableString[i]) + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return fmt.Errorf("NonnullString this(%v) Not Equal that(%v)", len(this.NonnullString), len(that1.NonnullString)) + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return fmt.Errorf("NonnullString this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullString[i], i, that1.NonnullString[i]) + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return fmt.Errorf("NullableBytes this(%v) Not Equal that(%v)", len(this.NullableBytes), len(that1.NullableBytes)) + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return fmt.Errorf("NullableBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NullableBytes[i], i, that1.NullableBytes[i]) + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return fmt.Errorf("NonnullBytes this(%v) Not Equal that(%v)", len(this.NonnullBytes), len(that1.NonnullBytes)) + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return fmt.Errorf("NonnullBytes this[%v](%v) Not Equal that[%v](%v)", i, this.NonnullBytes[i], i, that1.NonnullBytes[i]) + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *MapStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MapStdTypes) + if !ok { + that2, ok := that.(MapStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.NullableTimestamp) != len(that1.NullableTimestamp) { + return false + } + for i := range this.NullableTimestamp { + if !this.NullableTimestamp[i].Equal(*that1.NullableTimestamp[i]) { + return false + } + } + if len(this.Timestamp) != len(that1.Timestamp) { + return false + } + for i := range this.Timestamp { + if !this.Timestamp[i].Equal(that1.Timestamp[i]) { + return false + } + } + if len(this.NullableDuration) != len(that1.NullableDuration) { + return false + } + for i := range this.NullableDuration { + if dthis, dthat := this.NullableDuration[i], that1.NullableDuration[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) { + return false + } + } + if len(this.Duration) != len(that1.Duration) { + return false + } + for i := range this.Duration { + if this.Duration[i] != that1.Duration[i] { + return false + } + } + if len(this.NullableDouble) != len(that1.NullableDouble) { + return false + } + for i := range this.NullableDouble { + a := this.NullableDouble[i] + b := that1.NullableDouble[i] + if *a != *b { + return false + } + } + if len(this.NonnullDouble) != len(that1.NonnullDouble) { + return false + } + for i := range this.NonnullDouble { + a := this.NonnullDouble[i] + b := that1.NonnullDouble[i] + if a != b { + return false + } + } + if len(this.NullableFloat) != len(that1.NullableFloat) { + return false + } + for i := range this.NullableFloat { + a := this.NullableFloat[i] + b := that1.NullableFloat[i] + if *a != *b { + return false + } + } + if len(this.NonnullFloat) != len(that1.NonnullFloat) { + return false + } + for i := range this.NonnullFloat { + a := this.NonnullFloat[i] + b := that1.NonnullFloat[i] + if a != b { + return false + } + } + if len(this.NullableInt64) != len(that1.NullableInt64) { + return false + } + for i := range this.NullableInt64 { + a := this.NullableInt64[i] + b := that1.NullableInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt64) != len(that1.NonnullInt64) { + return false + } + for i := range this.NonnullInt64 { + a := this.NonnullInt64[i] + b := that1.NonnullInt64[i] + if a != b { + return false + } + } + if len(this.NullableUInt64) != len(that1.NullableUInt64) { + return false + } + for i := range this.NullableUInt64 { + a := this.NullableUInt64[i] + b := that1.NullableUInt64[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt64) != len(that1.NonnullUInt64) { + return false + } + for i := range this.NonnullUInt64 { + a := this.NonnullUInt64[i] + b := that1.NonnullUInt64[i] + if a != b { + return false + } + } + if len(this.NullableInt32) != len(that1.NullableInt32) { + return false + } + for i := range this.NullableInt32 { + a := this.NullableInt32[i] + b := that1.NullableInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullInt32) != len(that1.NonnullInt32) { + return false + } + for i := range this.NonnullInt32 { + a := this.NonnullInt32[i] + b := that1.NonnullInt32[i] + if a != b { + return false + } + } + if len(this.NullableUInt32) != len(that1.NullableUInt32) { + return false + } + for i := range this.NullableUInt32 { + a := this.NullableUInt32[i] + b := that1.NullableUInt32[i] + if *a != *b { + return false + } + } + if len(this.NonnullUInt32) != len(that1.NonnullUInt32) { + return false + } + for i := range this.NonnullUInt32 { + a := this.NonnullUInt32[i] + b := that1.NonnullUInt32[i] + if a != b { + return false + } + } + if len(this.NullableBool) != len(that1.NullableBool) { + return false + } + for i := range this.NullableBool { + a := this.NullableBool[i] + b := that1.NullableBool[i] + if *a != *b { + return false + } + } + if len(this.NonnullBool) != len(that1.NonnullBool) { + return false + } + for i := range this.NonnullBool { + a := this.NonnullBool[i] + b := that1.NonnullBool[i] + if a != b { + return false + } + } + if len(this.NullableString) != len(that1.NullableString) { + return false + } + for i := range this.NullableString { + a := this.NullableString[i] + b := that1.NullableString[i] + if *a != *b { + return false + } + } + if len(this.NonnullString) != len(that1.NonnullString) { + return false + } + for i := range this.NonnullString { + a := this.NonnullString[i] + b := that1.NonnullString[i] + if a != b { + return false + } + } + if len(this.NullableBytes) != len(that1.NullableBytes) { + return false + } + for i := range this.NullableBytes { + a := this.NullableBytes[i] + b := that1.NullableBytes[i] + if !bytes.Equal(*a, *b) { + return false + } + } + if len(this.NonnullBytes) != len(that1.NonnullBytes) { + return false + } + for i := range this.NonnullBytes { + a := this.NonnullBytes[i] + b := that1.NonnullBytes[i] + if !bytes.Equal(a, b) { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofProtoTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes) + if !ok { + that2, ok := that.(OneofProtoTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes but is not nil && this == nil") + } + if that1.OneOfProtoTimes == nil { + if this.OneOfProtoTimes != nil { + return fmt.Errorf("this.OneOfProtoTimes != nil && that1.OneOfProtoTimes == nil") + } + } else if this.OneOfProtoTimes == nil { + return fmt.Errorf("this.OneOfProtoTimes == nil && that1.OneOfProtoTimes != nil") + } else if err := this.OneOfProtoTimes.VerboseEqual(that1.OneOfProtoTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofProtoTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_Timestamp) + if !ok { + that2, ok := that.(OneofProtoTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_Timestamp but is not nil && this == nil") + } + if !this.Timestamp.Equal(that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + return nil +} +func (this *OneofProtoTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_Duration) + if !ok { + that2, ok := that.(OneofProtoTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_Duration") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_Duration but is not nil && this == nil") + } + if !this.Duration.Equal(that1.Duration) { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofProtoTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepDouble) + if !ok { + that2, ok := that.(OneofProtoTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepDouble") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepDouble but is not nil && this == nil") + } + if !this.RepDouble.Equal(that1.RepDouble) { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) + } + return nil +} +func (this *OneofProtoTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepFloat) + if !ok { + that2, ok := that.(OneofProtoTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepFloat but is not nil && this == nil") + } + if !this.RepFloat.Equal(that1.RepFloat) { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil +} +func (this *OneofProtoTypes_RepInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepInt64 but is not nil && this == nil") + } + if !this.RepInt64.Equal(that1.RepInt64) { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) + } + return nil +} +func (this *OneofProtoTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepUInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt64 but is not nil && this == nil") + } + if !this.RepUInt64.Equal(that1.RepUInt64) { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) + } + return nil +} +func (this *OneofProtoTypes_RepInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepInt32 but is not nil && this == nil") + } + if !this.RepInt32.Equal(that1.RepInt32) { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) + } + return nil +} +func (this *OneofProtoTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepUInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepUInt32 but is not nil && this == nil") + } + if !this.RepUInt32.Equal(that1.RepUInt32) { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) + } + return nil +} +func (this *OneofProtoTypes_RepBool) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepBool) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBool) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepBool") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepBool but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepBool but is not nil && this == nil") + } + if !this.RepBool.Equal(that1.RepBool) { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) + } + return nil +} +func (this *OneofProtoTypes_RepString) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepString) + if !ok { + that2, ok := that.(OneofProtoTypes_RepString) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepString") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepString but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepString but is not nil && this == nil") + } + if !this.RepString.Equal(that1.RepString) { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) + } + return nil +} +func (this *OneofProtoTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofProtoTypes_RepBytes) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofProtoTypes_RepBytes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofProtoTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofProtoTypes_RepBytes but is not nil && this == nil") + } + if !this.RepBytes.Equal(that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) + } + return nil +} +func (this *OneofProtoTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes) + if !ok { + that2, ok := that.(OneofProtoTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.OneOfProtoTimes == nil { + if this.OneOfProtoTimes != nil { + return false + } + } else if this.OneOfProtoTimes == nil { + return false + } else if !this.OneOfProtoTimes.Equal(that1.OneOfProtoTimes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofProtoTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_Timestamp) + if !ok { + that2, ok := that.(OneofProtoTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Timestamp.Equal(that1.Timestamp) { + return false + } + return true +} +func (this *OneofProtoTypes_Duration) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_Duration) + if !ok { + that2, ok := that.(OneofProtoTypes_Duration) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Duration.Equal(that1.Duration) { + return false + } + return true +} +func (this *OneofProtoTypes_RepDouble) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepDouble) + if !ok { + that2, ok := that.(OneofProtoTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepDouble.Equal(that1.RepDouble) { + return false + } + return true +} +func (this *OneofProtoTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepFloat) + if !ok { + that2, ok := that.(OneofProtoTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepFloat.Equal(that1.RepFloat) { + return false + } + return true +} +func (this *OneofProtoTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepInt64.Equal(that1.RepInt64) { + return false + } + return true +} +func (this *OneofProtoTypes_RepUInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepUInt64.Equal(that1.RepUInt64) { + return false + } + return true +} +func (this *OneofProtoTypes_RepInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepInt32.Equal(that1.RepInt32) { + return false + } + return true +} +func (this *OneofProtoTypes_RepUInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofProtoTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepUInt32.Equal(that1.RepUInt32) { + return false + } + return true +} +func (this *OneofProtoTypes_RepBool) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepBool) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBool) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepBool.Equal(that1.RepBool) { + return false + } + return true +} +func (this *OneofProtoTypes_RepString) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepString) + if !ok { + that2, ok := that.(OneofProtoTypes_RepString) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepString.Equal(that1.RepString) { + return false + } + return true +} +func (this *OneofProtoTypes_RepBytes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofProtoTypes_RepBytes) + if !ok { + that2, ok := that.(OneofProtoTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.RepBytes.Equal(that1.RepBytes) { + return false + } + return true +} +func (this *OneofStdTypes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes but is not nil && this == nil") + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return fmt.Errorf("this.OneOfStdTimes != nil && that1.OneOfStdTimes == nil") + } + } else if this.OneOfStdTimes == nil { + return fmt.Errorf("this.OneOfStdTimes == nil && that1.OneOfStdTimes != nil") + } else if err := this.OneOfStdTimes.VerboseEqual(that1.OneOfStdTimes); err != nil { + return err + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) + } + return nil +} +func (this *OneofStdTypes_Timestamp) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Timestamp") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Timestamp but is not nil && this == nil") + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return fmt.Errorf("this.Timestamp != nil && that1.Timestamp == nil") + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return fmt.Errorf("Timestamp this(%v) Not Equal that(%v)", this.Timestamp, that1.Timestamp) + } + return nil +} +func (this *OneofStdTypes_Duration) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_Duration") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_Duration but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_Duration but is not nil && this == nil") + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", *this.Duration, *that1.Duration) + } + } else if this.Duration != nil { + return fmt.Errorf("this.Duration == nil && that.Duration != nil") + } else if that1.Duration != nil { + return fmt.Errorf("Duration this(%v) Not Equal that(%v)", this.Duration, that1.Duration) + } + return nil +} +func (this *OneofStdTypes_RepDouble) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepDouble") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepDouble but is not nil && this == nil") + } + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", *this.RepDouble, *that1.RepDouble) + } + } else if this.RepDouble != nil { + return fmt.Errorf("this.RepDouble == nil && that.RepDouble != nil") + } else if that1.RepDouble != nil { + return fmt.Errorf("RepDouble this(%v) Not Equal that(%v)", this.RepDouble, that1.RepDouble) + } + return nil +} +func (this *OneofStdTypes_RepFloat) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepFloat") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepFloat but is not nil && this == nil") + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", *this.RepFloat, *that1.RepFloat) + } + } else if this.RepFloat != nil { + return fmt.Errorf("this.RepFloat == nil && that.RepFloat != nil") + } else if that1.RepFloat != nil { + return fmt.Errorf("RepFloat this(%v) Not Equal that(%v)", this.RepFloat, that1.RepFloat) + } + return nil +} +func (this *OneofStdTypes_RepInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepInt64 but is not nil && this == nil") + } + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", *this.RepInt64, *that1.RepInt64) + } + } else if this.RepInt64 != nil { + return fmt.Errorf("this.RepInt64 == nil && that.RepInt64 != nil") + } else if that1.RepInt64 != nil { + return fmt.Errorf("RepInt64 this(%v) Not Equal that(%v)", this.RepInt64, that1.RepInt64) + } + return nil +} +func (this *OneofStdTypes_RepUInt64) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt64") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt64 but is not nil && this == nil") + } + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", *this.RepUInt64, *that1.RepUInt64) + } + } else if this.RepUInt64 != nil { + return fmt.Errorf("this.RepUInt64 == nil && that.RepUInt64 != nil") + } else if that1.RepUInt64 != nil { + return fmt.Errorf("RepUInt64 this(%v) Not Equal that(%v)", this.RepUInt64, that1.RepUInt64) + } + return nil +} +func (this *OneofStdTypes_RepInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepInt32 but is not nil && this == nil") + } + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", *this.RepInt32, *that1.RepInt32) + } + } else if this.RepInt32 != nil { + return fmt.Errorf("this.RepInt32 == nil && that.RepInt32 != nil") + } else if that1.RepInt32 != nil { + return fmt.Errorf("RepInt32 this(%v) Not Equal that(%v)", this.RepInt32, that1.RepInt32) + } + return nil +} +func (this *OneofStdTypes_RepUInt32) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepUInt32") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepUInt32 but is not nil && this == nil") + } + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", *this.RepUInt32, *that1.RepUInt32) + } + } else if this.RepUInt32 != nil { + return fmt.Errorf("this.RepUInt32 == nil && that.RepUInt32 != nil") + } else if that1.RepUInt32 != nil { + return fmt.Errorf("RepUInt32 this(%v) Not Equal that(%v)", this.RepUInt32, that1.RepUInt32) + } + return nil +} +func (this *OneofStdTypes_RepBool) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepBool) + if !ok { + that2, ok := that.(OneofStdTypes_RepBool) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBool") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBool but is not nil && this == nil") + } + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", *this.RepBool, *that1.RepBool) + } + } else if this.RepBool != nil { + return fmt.Errorf("this.RepBool == nil && that.RepBool != nil") + } else if that1.RepBool != nil { + return fmt.Errorf("RepBool this(%v) Not Equal that(%v)", this.RepBool, that1.RepBool) + } + return nil +} +func (this *OneofStdTypes_RepString) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepString) + if !ok { + that2, ok := that.(OneofStdTypes_RepString) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepString") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepString but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepString but is not nil && this == nil") + } + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", *this.RepString, *that1.RepString) + } + } else if this.RepString != nil { + return fmt.Errorf("this.RepString == nil && that.RepString != nil") + } else if that1.RepString != nil { + return fmt.Errorf("RepString this(%v) Not Equal that(%v)", this.RepString, that1.RepString) + } + return nil +} +func (this *OneofStdTypes_RepBytes) VerboseEqual(that interface{}) error { + if that == nil { + if this == nil { + return nil + } + return fmt.Errorf("that == nil && this != nil") + } + + that1, ok := that.(*OneofStdTypes_RepBytes) + if !ok { + that2, ok := that.(OneofStdTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return fmt.Errorf("that is not of type *OneofStdTypes_RepBytes") + } + } + if that1 == nil { + if this == nil { + return nil + } + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is nil && this != nil") + } else if this == nil { + return fmt.Errorf("that is type *OneofStdTypes_RepBytes but is not nil && this == nil") + } + if that1.RepBytes == nil { + if this.RepBytes != nil { + return fmt.Errorf("this.RepBytes != nil && that1.RepBytes == nil") + } + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return fmt.Errorf("RepBytes this(%v) Not Equal that(%v)", this.RepBytes, that1.RepBytes) + } + return nil +} +func (this *OneofStdTypes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes) + if !ok { + that2, ok := that.(OneofStdTypes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.OneOfStdTimes == nil { + if this.OneOfStdTimes != nil { + return false + } + } else if this.OneOfStdTimes == nil { + return false + } else if !this.OneOfStdTimes.Equal(that1.OneOfStdTimes) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OneofStdTypes_Timestamp) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Timestamp) + if !ok { + that2, ok := that.(OneofStdTypes_Timestamp) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.Timestamp == nil { + if this.Timestamp != nil { + return false + } + } else if !this.Timestamp.Equal(*that1.Timestamp) { + return false + } + return true +} +func (this *OneofStdTypes_Duration) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_Duration) + if !ok { + that2, ok := that.(OneofStdTypes_Duration) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Duration != nil && that1.Duration != nil { + if *this.Duration != *that1.Duration { + return false + } + } else if this.Duration != nil { + return false + } else if that1.Duration != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepDouble) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepDouble) + if !ok { + that2, ok := that.(OneofStdTypes_RepDouble) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepDouble != nil && that1.RepDouble != nil { + if *this.RepDouble != *that1.RepDouble { + return false + } + } else if this.RepDouble != nil { + return false + } else if that1.RepDouble != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepFloat) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepFloat) + if !ok { + that2, ok := that.(OneofStdTypes_RepFloat) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepFloat != nil && that1.RepFloat != nil { + if *this.RepFloat != *that1.RepFloat { + return false + } + } else if this.RepFloat != nil { + return false + } else if that1.RepFloat != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepInt64 != nil && that1.RepInt64 != nil { + if *this.RepInt64 != *that1.RepInt64 { + return false + } + } else if this.RepInt64 != nil { + return false + } else if that1.RepInt64 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepUInt64) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepUInt64) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt64) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepUInt64 != nil && that1.RepUInt64 != nil { + if *this.RepUInt64 != *that1.RepUInt64 { + return false + } + } else if this.RepUInt64 != nil { + return false + } else if that1.RepUInt64 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepInt32 != nil && that1.RepInt32 != nil { + if *this.RepInt32 != *that1.RepInt32 { + return false + } + } else if this.RepInt32 != nil { + return false + } else if that1.RepInt32 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepUInt32) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepUInt32) + if !ok { + that2, ok := that.(OneofStdTypes_RepUInt32) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepUInt32 != nil && that1.RepUInt32 != nil { + if *this.RepUInt32 != *that1.RepUInt32 { + return false + } + } else if this.RepUInt32 != nil { + return false + } else if that1.RepUInt32 != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepBool) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepBool) + if !ok { + that2, ok := that.(OneofStdTypes_RepBool) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepBool != nil && that1.RepBool != nil { + if *this.RepBool != *that1.RepBool { + return false + } + } else if this.RepBool != nil { + return false + } else if that1.RepBool != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepString) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepString) + if !ok { + that2, ok := that.(OneofStdTypes_RepString) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RepString != nil && that1.RepString != nil { + if *this.RepString != *that1.RepString { + return false + } + } else if this.RepString != nil { + return false + } else if that1.RepString != nil { + return false + } + return true +} +func (this *OneofStdTypes_RepBytes) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OneofStdTypes_RepBytes) + if !ok { + that2, ok := that.(OneofStdTypes_RepBytes) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.RepBytes == nil { + if this.RepBytes != nil { + return false + } + } else if !bytes.Equal(*this.RepBytes, *that1.RepBytes) { + return false + } + return true +} +func NewPopulatedKnownTypes(r randyTypes, easy bool) *KnownTypes { + this := &KnownTypes{} + if r.Intn(10) != 0 { + this.Dur = types.NewPopulatedDuration(r, easy) + } + if r.Intn(10) != 0 { + this.Ts = types.NewPopulatedTimestamp(r, easy) + } + if r.Intn(10) != 0 { + this.Dbl = types.NewPopulatedDoubleValue(r, easy) + } + if r.Intn(10) != 0 { + this.Flt = types.NewPopulatedFloatValue(r, easy) + } + if r.Intn(10) != 0 { + this.I64 = types.NewPopulatedInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.U64 = types.NewPopulatedUInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.I32 = types.NewPopulatedInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.U32 = types.NewPopulatedUInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.Bool = types.NewPopulatedBoolValue(r, easy) + } + if r.Intn(10) != 0 { + this.Str = types.NewPopulatedStringValue(r, easy) + } + if r.Intn(10) != 0 { + this.Bytes = types.NewPopulatedBytesValue(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedProtoTypes(r randyTypes, easy bool) *ProtoTypes { + this := &ProtoTypes{} + if r.Intn(10) != 0 { + this.NullableTimestamp = types.NewPopulatedTimestamp(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDuration = types.NewPopulatedDuration(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDouble = types.NewPopulatedDoubleValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableFloat = types.NewPopulatedFloatValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt64 = types.NewPopulatedInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt64 = types.NewPopulatedUInt64Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt32 = types.NewPopulatedInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt32 = types.NewPopulatedUInt32Value(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBool = types.NewPopulatedBoolValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableString = types.NewPopulatedStringValue(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBytes = types.NewPopulatedBytesValue(r, easy) + } + v1 := types.NewPopulatedTimestamp(r, easy) + this.Timestamp = *v1 + v2 := types.NewPopulatedDuration(r, easy) + this.Duration = *v2 + v3 := types.NewPopulatedDoubleValue(r, easy) + this.NonnullDouble = *v3 + v4 := types.NewPopulatedFloatValue(r, easy) + this.NonnullFloat = *v4 + v5 := types.NewPopulatedInt64Value(r, easy) + this.NonnullInt64 = *v5 + v6 := types.NewPopulatedUInt64Value(r, easy) + this.NonnullUInt64 = *v6 + v7 := types.NewPopulatedInt32Value(r, easy) + this.NonnullInt32 = *v7 + v8 := types.NewPopulatedUInt32Value(r, easy) + this.NonnullUInt32 = *v8 + v9 := types.NewPopulatedBoolValue(r, easy) + this.NonnullBool = *v9 + v10 := types.NewPopulatedStringValue(r, easy) + this.NonnullString = *v10 + v11 := types.NewPopulatedBytesValue(r, easy) + this.NonnullBytes = *v11 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedStdTypes(r randyTypes, easy bool) *StdTypes { + this := &StdTypes{} + if r.Intn(10) != 0 { + this.NullableTimestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDuration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + if r.Intn(10) != 0 { + this.NullableDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + if r.Intn(10) != 0 { + this.NullableFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + if r.Intn(10) != 0 { + this.NullableInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + if r.Intn(10) != 0 { + this.NullableUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } + if r.Intn(10) != 0 { + this.NullableString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } + if r.Intn(10) != 0 { + this.NullableBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + } + v12 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamp = *v12 + v13 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Duration = *v13 + v14 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble = *v14 + v15 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat = *v15 + v16 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64 = *v16 + v17 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64 = *v17 + v18 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32 = *v18 + v19 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32 = *v19 + v20 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool = *v20 + v21 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString = *v21 + v22 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes = *v22 + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedRepProtoTypes(r randyTypes, easy bool) *RepProtoTypes { + this := &RepProtoTypes{} + if r.Intn(10) != 0 { + v23 := r.Intn(5) + this.NullableTimestamps = make([]*types.Timestamp, v23) + for i := 0; i < v23; i++ { + this.NullableTimestamps[i] = types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v24 := r.Intn(5) + this.NullableDurations = make([]*types.Duration, v24) + for i := 0; i < v24; i++ { + this.NullableDurations[i] = types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v25 := r.Intn(5) + this.Timestamps = make([]types.Timestamp, v25) + for i := 0; i < v25; i++ { + v26 := types.NewPopulatedTimestamp(r, easy) + this.Timestamps[i] = *v26 + } + } + if r.Intn(10) != 0 { + v27 := r.Intn(5) + this.Durations = make([]types.Duration, v27) + for i := 0; i < v27; i++ { + v28 := types.NewPopulatedDuration(r, easy) + this.Durations[i] = *v28 + } + } + if r.Intn(10) != 0 { + v29 := r.Intn(5) + this.NullableDouble = make([]*types.DoubleValue, v29) + for i := 0; i < v29; i++ { + this.NullableDouble[i] = types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v30 := r.Intn(5) + this.NonnullDouble = make([]types.DoubleValue, v30) + for i := 0; i < v30; i++ { + v31 := types.NewPopulatedDoubleValue(r, easy) + this.NonnullDouble[i] = *v31 + } + } + if r.Intn(10) != 0 { + v32 := r.Intn(5) + this.NullableFloat = make([]*types.FloatValue, v32) + for i := 0; i < v32; i++ { + this.NullableFloat[i] = types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v33 := r.Intn(5) + this.NonnullFloat = make([]types.FloatValue, v33) + for i := 0; i < v33; i++ { + v34 := types.NewPopulatedFloatValue(r, easy) + this.NonnullFloat[i] = *v34 + } + } + if r.Intn(10) != 0 { + v35 := r.Intn(5) + this.NullableInt64 = make([]*types.Int64Value, v35) + for i := 0; i < v35; i++ { + this.NullableInt64[i] = types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v36 := r.Intn(5) + this.NonnullInt64 = make([]types.Int64Value, v36) + for i := 0; i < v36; i++ { + v37 := types.NewPopulatedInt64Value(r, easy) + this.NonnullInt64[i] = *v37 + } + } + if r.Intn(10) != 0 { + v38 := r.Intn(5) + this.NullableUInt64 = make([]*types.UInt64Value, v38) + for i := 0; i < v38; i++ { + this.NullableUInt64[i] = types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v39 := r.Intn(5) + this.NonnullUInt64 = make([]types.UInt64Value, v39) + for i := 0; i < v39; i++ { + v40 := types.NewPopulatedUInt64Value(r, easy) + this.NonnullUInt64[i] = *v40 + } + } + if r.Intn(10) != 0 { + v41 := r.Intn(5) + this.NullableInt32 = make([]*types.Int32Value, v41) + for i := 0; i < v41; i++ { + this.NullableInt32[i] = types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v42 := r.Intn(5) + this.NonnullInt32 = make([]types.Int32Value, v42) + for i := 0; i < v42; i++ { + v43 := types.NewPopulatedInt32Value(r, easy) + this.NonnullInt32[i] = *v43 + } + } + if r.Intn(10) != 0 { + v44 := r.Intn(5) + this.NullableUInt32 = make([]*types.UInt32Value, v44) + for i := 0; i < v44; i++ { + this.NullableUInt32[i] = types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v45 := r.Intn(5) + this.NonnullUInt32 = make([]types.UInt32Value, v45) + for i := 0; i < v45; i++ { + v46 := types.NewPopulatedUInt32Value(r, easy) + this.NonnullUInt32[i] = *v46 + } + } + if r.Intn(10) != 0 { + v47 := r.Intn(5) + this.NullableBool = make([]*types.BoolValue, v47) + for i := 0; i < v47; i++ { + this.NullableBool[i] = types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v48 := r.Intn(5) + this.NonnullBool = make([]types.BoolValue, v48) + for i := 0; i < v48; i++ { + v49 := types.NewPopulatedBoolValue(r, easy) + this.NonnullBool[i] = *v49 + } + } + if r.Intn(10) != 0 { + v50 := r.Intn(5) + this.NullableString = make([]*types.StringValue, v50) + for i := 0; i < v50; i++ { + this.NullableString[i] = types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v51 := r.Intn(5) + this.NonnullString = make([]types.StringValue, v51) + for i := 0; i < v51; i++ { + v52 := types.NewPopulatedStringValue(r, easy) + this.NonnullString[i] = *v52 + } + } + if r.Intn(10) != 0 { + v53 := r.Intn(5) + this.NullableBytes = make([]*types.BytesValue, v53) + for i := 0; i < v53; i++ { + this.NullableBytes[i] = types.NewPopulatedBytesValue(r, easy) + } + } + if r.Intn(10) != 0 { + v54 := r.Intn(5) + this.NonnullBytes = make([]types.BytesValue, v54) + for i := 0; i < v54; i++ { + v55 := types.NewPopulatedBytesValue(r, easy) + this.NonnullBytes[i] = *v55 + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedRepStdTypes(r randyTypes, easy bool) *RepStdTypes { + this := &RepStdTypes{} + if r.Intn(10) != 0 { + v56 := r.Intn(5) + this.NullableTimestamps = make([]*time.Time, v56) + for i := 0; i < v56; i++ { + this.NullableTimestamps[i] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v57 := r.Intn(5) + this.NullableDurations = make([]*time.Duration, v57) + for i := 0; i < v57; i++ { + this.NullableDurations[i] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v58 := r.Intn(5) + this.Timestamps = make([]time.Time, v58) + for i := 0; i < v58; i++ { + v59 := github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + this.Timestamps[i] = *v59 + } + } + if r.Intn(10) != 0 { + v60 := r.Intn(5) + this.Durations = make([]time.Duration, v60) + for i := 0; i < v60; i++ { + v61 := github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + this.Durations[i] = *v61 + } + } + if r.Intn(10) != 0 { + v62 := r.Intn(5) + this.NullableDouble = make([]*float64, v62) + for i := 0; i < v62; i++ { + this.NullableDouble[i] = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + } + } + if r.Intn(10) != 0 { + v63 := r.Intn(5) + this.NonnullDouble = make([]float64, v63) + for i := 0; i < v63; i++ { + v64 := github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + this.NonnullDouble[i] = *v64 + } + } + if r.Intn(10) != 0 { + v65 := r.Intn(5) + this.NullableFloat = make([]*float32, v65) + for i := 0; i < v65; i++ { + this.NullableFloat[i] = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + } + } + if r.Intn(10) != 0 { + v66 := r.Intn(5) + this.NonnullFloat = make([]float32, v66) + for i := 0; i < v66; i++ { + v67 := github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + this.NonnullFloat[i] = *v67 + } + } + if r.Intn(10) != 0 { + v68 := r.Intn(5) + this.NullableInt64 = make([]*int64, v68) + for i := 0; i < v68; i++ { + this.NullableInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + } + } + if r.Intn(10) != 0 { + v69 := r.Intn(5) + this.NonnullInt64 = make([]int64, v69) + for i := 0; i < v69; i++ { + v70 := github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + this.NonnullInt64[i] = *v70 + } + } + if r.Intn(10) != 0 { + v71 := r.Intn(5) + this.NullableUInt64 = make([]*uint64, v71) + for i := 0; i < v71; i++ { + this.NullableUInt64[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + } + } + if r.Intn(10) != 0 { + v72 := r.Intn(5) + this.NonnullUInt64 = make([]uint64, v72) + for i := 0; i < v72; i++ { + v73 := github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + this.NonnullUInt64[i] = *v73 + } + } + if r.Intn(10) != 0 { + v74 := r.Intn(5) + this.NullableInt32 = make([]*int32, v74) + for i := 0; i < v74; i++ { + this.NullableInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v75 := r.Intn(5) + this.NonnullInt32 = make([]int32, v75) + for i := 0; i < v75; i++ { + v76 := github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + this.NonnullInt32[i] = *v76 + } + } + if r.Intn(10) != 0 { + v77 := r.Intn(5) + this.NullableUInt32 = make([]*uint32, v77) + for i := 0; i < v77; i++ { + this.NullableUInt32[i] = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + } + } + if r.Intn(10) != 0 { + v78 := r.Intn(5) + this.NonnullUInt32 = make([]uint32, v78) + for i := 0; i < v78; i++ { + v79 := github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + this.NonnullUInt32[i] = *v79 + } + } + if r.Intn(10) != 0 { + v80 := r.Intn(5) + this.NullableBool = make([]*bool, v80) + for i := 0; i < v80; i++ { + this.NullableBool[i] = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + } + } + if r.Intn(10) != 0 { + v81 := r.Intn(5) + this.NonnullBool = make([]bool, v81) + for i := 0; i < v81; i++ { + v82 := github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + this.NonnullBool[i] = *v82 + } + } + if r.Intn(10) != 0 { + v83 := r.Intn(5) + this.NullableString = make([]*string, v83) + for i := 0; i < v83; i++ { + this.NullableString[i] = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + } + } + if r.Intn(10) != 0 { + v84 := r.Intn(5) + this.NonnullString = make([]string, v84) + for i := 0; i < v84; i++ { + v85 := github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + this.NonnullString[i] = *v85 + } + } + if r.Intn(10) != 0 { + v86 := r.Intn(5) + this.NullableBytes = make([]*[]byte, v86) + for i := 0; i < v86; i++ { + this.NullableBytes[i] = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + } + } + if r.Intn(10) != 0 { + v87 := r.Intn(5) + this.NonnullBytes = make([][]byte, v87) + for i := 0; i < v87; i++ { + v88 := github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + this.NonnullBytes[i] = *v88 + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedMapProtoTypes(r randyTypes, easy bool) *MapProtoTypes { + this := &MapProtoTypes{} + if r.Intn(10) != 0 { + v89 := r.Intn(10) + this.NullableTimestamp = make(map[int32]*types.Timestamp) + for i := 0; i < v89; i++ { + this.NullableTimestamp[int32(r.Int31())] = types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v90 := r.Intn(10) + this.Timestamp = make(map[int32]types.Timestamp) + for i := 0; i < v90; i++ { + this.Timestamp[int32(r.Int31())] = *types.NewPopulatedTimestamp(r, easy) + } + } + if r.Intn(10) != 0 { + v91 := r.Intn(10) + this.NullableDuration = make(map[int32]*types.Duration) + for i := 0; i < v91; i++ { + this.NullableDuration[int32(r.Int31())] = types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v92 := r.Intn(10) + this.Duration = make(map[int32]types.Duration) + for i := 0; i < v92; i++ { + this.Duration[int32(r.Int31())] = *types.NewPopulatedDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v93 := r.Intn(10) + this.NullableDouble = make(map[int32]*types.DoubleValue) + for i := 0; i < v93; i++ { + this.NullableDouble[int32(r.Int31())] = types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v94 := r.Intn(10) + this.NonnullDouble = make(map[int32]types.DoubleValue) + for i := 0; i < v94; i++ { + this.NonnullDouble[int32(r.Int31())] = *types.NewPopulatedDoubleValue(r, easy) + } + } + if r.Intn(10) != 0 { + v95 := r.Intn(10) + this.NullableFloat = make(map[int32]*types.FloatValue) + for i := 0; i < v95; i++ { + this.NullableFloat[int32(r.Int31())] = types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v96 := r.Intn(10) + this.NonnullFloat = make(map[int32]types.FloatValue) + for i := 0; i < v96; i++ { + this.NonnullFloat[int32(r.Int31())] = *types.NewPopulatedFloatValue(r, easy) + } + } + if r.Intn(10) != 0 { + v97 := r.Intn(10) + this.NullableInt64 = make(map[int32]*types.Int64Value) + for i := 0; i < v97; i++ { + this.NullableInt64[int32(r.Int31())] = types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v98 := r.Intn(10) + this.NonnullInt64 = make(map[int32]types.Int64Value) + for i := 0; i < v98; i++ { + this.NonnullInt64[int32(r.Int31())] = *types.NewPopulatedInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v99 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*types.UInt64Value) + for i := 0; i < v99; i++ { + this.NullableUInt64[int32(r.Int31())] = types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v100 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]types.UInt64Value) + for i := 0; i < v100; i++ { + this.NonnullUInt64[int32(r.Int31())] = *types.NewPopulatedUInt64Value(r, easy) + } + } + if r.Intn(10) != 0 { + v101 := r.Intn(10) + this.NullableInt32 = make(map[int32]*types.Int32Value) + for i := 0; i < v101; i++ { + this.NullableInt32[int32(r.Int31())] = types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v102 := r.Intn(10) + this.NonnullInt32 = make(map[int32]types.Int32Value) + for i := 0; i < v102; i++ { + this.NonnullInt32[int32(r.Int31())] = *types.NewPopulatedInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v103 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*types.UInt32Value) + for i := 0; i < v103; i++ { + this.NullableUInt32[int32(r.Int31())] = types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v104 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]types.UInt32Value) + for i := 0; i < v104; i++ { + this.NonnullUInt32[int32(r.Int31())] = *types.NewPopulatedUInt32Value(r, easy) + } + } + if r.Intn(10) != 0 { + v105 := r.Intn(10) + this.NullableBool = make(map[int32]*types.BoolValue) + for i := 0; i < v105; i++ { + this.NullableBool[int32(r.Int31())] = types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v106 := r.Intn(10) + this.NonnullBool = make(map[int32]types.BoolValue) + for i := 0; i < v106; i++ { + this.NonnullBool[int32(r.Int31())] = *types.NewPopulatedBoolValue(r, easy) + } + } + if r.Intn(10) != 0 { + v107 := r.Intn(10) + this.NullableString = make(map[int32]*types.StringValue) + for i := 0; i < v107; i++ { + this.NullableString[int32(r.Int31())] = types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v108 := r.Intn(10) + this.NonnullString = make(map[int32]types.StringValue) + for i := 0; i < v108; i++ { + this.NonnullString[int32(r.Int31())] = *types.NewPopulatedStringValue(r, easy) + } + } + if r.Intn(10) != 0 { + v109 := r.Intn(10) + this.NullableBytes = make(map[int32]*types.BytesValue) + for i := 0; i < v109; i++ { + this.NullableBytes[int32(r.Int31())] = types.NewPopulatedBytesValue(r, easy) + } + } + if r.Intn(10) != 0 { + v110 := r.Intn(10) + this.NonnullBytes = make(map[int32]types.BytesValue) + for i := 0; i < v110; i++ { + this.NonnullBytes[int32(r.Int31())] = *types.NewPopulatedBytesValue(r, easy) + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedMapStdTypes(r randyTypes, easy bool) *MapStdTypes { + this := &MapStdTypes{} + if r.Intn(10) != 0 { + v111 := r.Intn(10) + this.NullableTimestamp = make(map[int32]*time.Time) + for i := 0; i < v111; i++ { + this.NullableTimestamp[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v112 := r.Intn(10) + this.Timestamp = make(map[int32]time.Time) + for i := 0; i < v112; i++ { + this.Timestamp[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + } + } + if r.Intn(10) != 0 { + v113 := r.Intn(10) + this.NullableDuration = make(map[int32]*time.Duration) + for i := 0; i < v113; i++ { + this.NullableDuration[int32(r.Int31())] = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v114 := r.Intn(10) + this.Duration = make(map[int32]time.Duration) + for i := 0; i < v114; i++ { + this.Duration[int32(r.Int31())] = *github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + } + } + if r.Intn(10) != 0 { + v115 := r.Intn(10) + this.NullableDouble = make(map[int32]*float64) + for i := 0; i < v115; i++ { + this.NullableDouble[int32(r.Int31())] = (*float64)(github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } + } + if r.Intn(10) != 0 { + v116 := r.Intn(10) + this.NonnullDouble = make(map[int32]float64) + for i := 0; i < v116; i++ { + this.NonnullDouble[int32(r.Int31())] = (float64)(*github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy)) + } + } + if r.Intn(10) != 0 { + v117 := r.Intn(10) + this.NullableFloat = make(map[int32]*float32) + for i := 0; i < v117; i++ { + this.NullableFloat[int32(r.Int31())] = (*float32)(github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } + } + if r.Intn(10) != 0 { + v118 := r.Intn(10) + this.NonnullFloat = make(map[int32]float32) + for i := 0; i < v118; i++ { + this.NonnullFloat[int32(r.Int31())] = (float32)(*github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy)) + } + } + if r.Intn(10) != 0 { + v119 := r.Intn(10) + this.NullableInt64 = make(map[int32]*int64) + for i := 0; i < v119; i++ { + this.NullableInt64[int32(r.Int31())] = (*int64)(github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v120 := r.Intn(10) + this.NonnullInt64 = make(map[int32]int64) + for i := 0; i < v120; i++ { + this.NonnullInt64[int32(r.Int31())] = (int64)(*github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v121 := r.Intn(10) + this.NullableUInt64 = make(map[int32]*uint64) + for i := 0; i < v121; i++ { + this.NullableUInt64[int32(r.Int31())] = (*uint64)(github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v122 := r.Intn(10) + this.NonnullUInt64 = make(map[int32]uint64) + for i := 0; i < v122; i++ { + this.NonnullUInt64[int32(r.Int31())] = (uint64)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy)) + } + } + if r.Intn(10) != 0 { + v123 := r.Intn(10) + this.NullableInt32 = make(map[int32]*int32) + for i := 0; i < v123; i++ { + this.NullableInt32[int32(r.Int31())] = (*int32)(github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v124 := r.Intn(10) + this.NonnullInt32 = make(map[int32]int32) + for i := 0; i < v124; i++ { + this.NonnullInt32[int32(r.Int31())] = (int32)(*github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v125 := r.Intn(10) + this.NullableUInt32 = make(map[int32]*uint32) + for i := 0; i < v125; i++ { + this.NullableUInt32[int32(r.Int31())] = (*uint32)(github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v126 := r.Intn(10) + this.NonnullUInt32 = make(map[int32]uint32) + for i := 0; i < v126; i++ { + this.NonnullUInt32[int32(r.Int31())] = (uint32)(*github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy)) + } + } + if r.Intn(10) != 0 { + v127 := r.Intn(10) + this.NullableBool = make(map[int32]*bool) + for i := 0; i < v127; i++ { + this.NullableBool[int32(r.Int31())] = (*bool)(github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } + } + if r.Intn(10) != 0 { + v128 := r.Intn(10) + this.NonnullBool = make(map[int32]bool) + for i := 0; i < v128; i++ { + this.NonnullBool[int32(r.Int31())] = (bool)(*github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy)) + } + } + if r.Intn(10) != 0 { + v129 := r.Intn(10) + this.NullableString = make(map[int32]*string) + for i := 0; i < v129; i++ { + this.NullableString[int32(r.Int31())] = (*string)(github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } + } + if r.Intn(10) != 0 { + v130 := r.Intn(10) + this.NonnullString = make(map[int32]string) + for i := 0; i < v130; i++ { + this.NonnullString[int32(r.Int31())] = (string)(*github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy)) + } + } + if r.Intn(10) != 0 { + v131 := r.Intn(10) + this.NullableBytes = make(map[int32]*[]byte) + for i := 0; i < v131; i++ { + this.NullableBytes[int32(r.Int31())] = (*[]byte)(github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } + } + if r.Intn(10) != 0 { + v132 := r.Intn(10) + this.NonnullBytes = make(map[int32][]byte) + for i := 0; i < v132; i++ { + this.NonnullBytes[int32(r.Int31())] = ([]byte)(*github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy)) + } + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 23) + } + return this +} + +func NewPopulatedOneofProtoTypes(r randyTypes, easy bool) *OneofProtoTypes { + this := &OneofProtoTypes{} + oneofNumber_OneOfProtoTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] + switch oneofNumber_OneOfProtoTimes { + case 1: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Timestamp(r, easy) + case 2: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_Duration(r, easy) + case 3: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepDouble(r, easy) + case 4: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepFloat(r, easy) + case 5: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepInt64(r, easy) + case 6: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepUInt64(r, easy) + case 7: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepInt32(r, easy) + case 8: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepUInt32(r, easy) + case 9: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepBool(r, easy) + case 10: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepString(r, easy) + case 11: + this.OneOfProtoTimes = NewPopulatedOneofProtoTypes_RepBytes(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedOneofProtoTypes_Timestamp(r randyTypes, easy bool) *OneofProtoTypes_Timestamp { + this := &OneofProtoTypes_Timestamp{} + this.Timestamp = types.NewPopulatedTimestamp(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_Duration(r randyTypes, easy bool) *OneofProtoTypes_Duration { + this := &OneofProtoTypes_Duration{} + this.Duration = types.NewPopulatedDuration(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepDouble(r randyTypes, easy bool) *OneofProtoTypes_RepDouble { + this := &OneofProtoTypes_RepDouble{} + this.RepDouble = types.NewPopulatedDoubleValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepFloat(r randyTypes, easy bool) *OneofProtoTypes_RepFloat { + this := &OneofProtoTypes_RepFloat{} + this.RepFloat = types.NewPopulatedFloatValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepInt64(r randyTypes, easy bool) *OneofProtoTypes_RepInt64 { + this := &OneofProtoTypes_RepInt64{} + this.RepInt64 = types.NewPopulatedInt64Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepUInt64(r randyTypes, easy bool) *OneofProtoTypes_RepUInt64 { + this := &OneofProtoTypes_RepUInt64{} + this.RepUInt64 = types.NewPopulatedUInt64Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepInt32(r randyTypes, easy bool) *OneofProtoTypes_RepInt32 { + this := &OneofProtoTypes_RepInt32{} + this.RepInt32 = types.NewPopulatedInt32Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepUInt32(r randyTypes, easy bool) *OneofProtoTypes_RepUInt32 { + this := &OneofProtoTypes_RepUInt32{} + this.RepUInt32 = types.NewPopulatedUInt32Value(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepBool(r randyTypes, easy bool) *OneofProtoTypes_RepBool { + this := &OneofProtoTypes_RepBool{} + this.RepBool = types.NewPopulatedBoolValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepString(r randyTypes, easy bool) *OneofProtoTypes_RepString { + this := &OneofProtoTypes_RepString{} + this.RepString = types.NewPopulatedStringValue(r, easy) + return this +} +func NewPopulatedOneofProtoTypes_RepBytes(r randyTypes, easy bool) *OneofProtoTypes_RepBytes { + this := &OneofProtoTypes_RepBytes{} + this.RepBytes = types.NewPopulatedBytesValue(r, easy) + return this +} +func NewPopulatedOneofStdTypes(r randyTypes, easy bool) *OneofStdTypes { + this := &OneofStdTypes{} + oneofNumber_OneOfStdTimes := []int32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}[r.Intn(11)] + switch oneofNumber_OneOfStdTimes { + case 1: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_Timestamp(r, easy) + case 2: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_Duration(r, easy) + case 3: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepDouble(r, easy) + case 4: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepFloat(r, easy) + case 5: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt64(r, easy) + case 6: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt64(r, easy) + case 7: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepInt32(r, easy) + case 8: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepUInt32(r, easy) + case 9: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBool(r, easy) + case 10: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepString(r, easy) + case 11: + this.OneOfStdTimes = NewPopulatedOneofStdTypes_RepBytes(r, easy) + } + if !easy && r.Intn(10) != 0 { + this.XXX_unrecognized = randUnrecognizedTypes(r, 12) + } + return this +} + +func NewPopulatedOneofStdTypes_Timestamp(r randyTypes, easy bool) *OneofStdTypes_Timestamp { + this := &OneofStdTypes_Timestamp{} + this.Timestamp = github_com_gogo_protobuf_types.NewPopulatedStdTime(r, easy) + return this +} +func NewPopulatedOneofStdTypes_Duration(r randyTypes, easy bool) *OneofStdTypes_Duration { + this := &OneofStdTypes_Duration{} + this.Duration = github_com_gogo_protobuf_types.NewPopulatedStdDuration(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepDouble(r randyTypes, easy bool) *OneofStdTypes_RepDouble { + this := &OneofStdTypes_RepDouble{} + this.RepDouble = github_com_gogo_protobuf_types.NewPopulatedStdDouble(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepFloat(r randyTypes, easy bool) *OneofStdTypes_RepFloat { + this := &OneofStdTypes_RepFloat{} + this.RepFloat = github_com_gogo_protobuf_types.NewPopulatedStdFloat(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt64(r randyTypes, easy bool) *OneofStdTypes_RepInt64 { + this := &OneofStdTypes_RepInt64{} + this.RepInt64 = github_com_gogo_protobuf_types.NewPopulatedStdInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt64(r randyTypes, easy bool) *OneofStdTypes_RepUInt64 { + this := &OneofStdTypes_RepUInt64{} + this.RepUInt64 = github_com_gogo_protobuf_types.NewPopulatedStdUInt64(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepInt32(r randyTypes, easy bool) *OneofStdTypes_RepInt32 { + this := &OneofStdTypes_RepInt32{} + this.RepInt32 = github_com_gogo_protobuf_types.NewPopulatedStdInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepUInt32(r randyTypes, easy bool) *OneofStdTypes_RepUInt32 { + this := &OneofStdTypes_RepUInt32{} + this.RepUInt32 = github_com_gogo_protobuf_types.NewPopulatedStdUInt32(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBool(r randyTypes, easy bool) *OneofStdTypes_RepBool { + this := &OneofStdTypes_RepBool{} + this.RepBool = github_com_gogo_protobuf_types.NewPopulatedStdBool(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepString(r randyTypes, easy bool) *OneofStdTypes_RepString { + this := &OneofStdTypes_RepString{} + this.RepString = github_com_gogo_protobuf_types.NewPopulatedStdString(r, easy) + return this +} +func NewPopulatedOneofStdTypes_RepBytes(r randyTypes, easy bool) *OneofStdTypes_RepBytes { + this := &OneofStdTypes_RepBytes{} + this.RepBytes = github_com_gogo_protobuf_types.NewPopulatedStdBytes(r, easy) + return this +} + +type randyTypes interface { + Float32() float32 + Float64() float64 + Int63() int64 + Int31() int32 + Uint32() uint32 + Intn(n int) int +} + +func randUTF8RuneTypes(r randyTypes) rune { + ru := r.Intn(62) + if ru < 10 { + return rune(ru + 48) + } else if ru < 36 { + return rune(ru + 55) + } + return rune(ru + 61) +} +func randStringTypes(r randyTypes) string { + v133 := r.Intn(100) + tmps := make([]rune, v133) + for i := 0; i < v133; i++ { + tmps[i] = randUTF8RuneTypes(r) + } + return string(tmps) +} +func randUnrecognizedTypes(r randyTypes, maxFieldNumber int) (dAtA []byte) { + l := r.Intn(5) + for i := 0; i < l; i++ { + wire := r.Intn(4) + if wire == 3 { + wire = 5 + } + fieldNumber := maxFieldNumber + r.Intn(100) + dAtA = randFieldTypes(dAtA, r, fieldNumber, wire) + } + return dAtA +} +func randFieldTypes(dAtA []byte, r randyTypes, fieldNumber int, wire int) []byte { + key := uint32(fieldNumber)<<3 | uint32(wire) + switch wire { + case 0: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + v134 := r.Int63() + if r.Intn(2) == 0 { + v134 *= -1 + } + dAtA = encodeVarintPopulateTypes(dAtA, uint64(v134)) + case 1: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + case 2: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + ll := r.Intn(100) + dAtA = encodeVarintPopulateTypes(dAtA, uint64(ll)) + for j := 0; j < ll; j++ { + dAtA = append(dAtA, byte(r.Intn(256))) + } + default: + dAtA = encodeVarintPopulateTypes(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + } + return dAtA +} +func encodeVarintPopulateTypes(dAtA []byte, v uint64) []byte { + for v >= 1<<7 { + dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) + v >>= 7 + } + dAtA = append(dAtA, uint8(v)) + return dAtA +} +func (m *KnownTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Dur != nil { + l = m.Dur.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Ts != nil { + l = m.Ts.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Dbl != nil { + l = m.Dbl.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Flt != nil { + l = m.Flt.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.I64 != nil { + l = m.I64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.U64 != nil { + l = m.U64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.I32 != nil { + l = m.I32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.U32 != nil { + l = m.U32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Bool != nil { + l = m.Bool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Str != nil { + l = m.Str.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Bytes != nil { + l = m.Bytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NullableTimestamp != nil { + l = m.NullableTimestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDuration != nil { + l = m.NullableDuration.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDouble != nil { + l = m.NullableDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableFloat != nil { + l = m.NullableFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt64 != nil { + l = m.NullableInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt64 != nil { + l = m.NullableUInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt32 != nil { + l = m.NullableInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt32 != nil { + l = m.NullableUInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBool != nil { + l = m.NullableBool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableString != nil { + l = m.NullableString.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBytes != nil { + l = m.NullableBytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + l = m.Timestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.Duration.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.NonnullInt64.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullUInt64.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullInt32.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullUInt32.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullBool.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullString.Size() + n += 2 + l + sovTypes(uint64(l)) + l = m.NonnullBytes.Size() + n += 2 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *StdTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NullableTimestamp != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.NullableTimestamp) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDuration != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.NullableDuration) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.NullableDouble) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.NullableFloat) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.NullableInt64) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.NullableUInt64) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.NullableInt32) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.NullableUInt32) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.NullableBool) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.NullableString) + n += 1 + l + sovTypes(uint64(l)) + } + if m.NullableBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.NullableBytes) + n += 1 + l + sovTypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDouble(m.NonnullDouble) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdFloat(m.NonnullFloat) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdInt64(m.NonnullInt64) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(m.NonnullUInt64) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdInt32(m.NonnullInt32) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(m.NonnullUInt32) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdBool(m.NonnullBool) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdString(m.NonnullString) + n += 2 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdBytes(m.NonnullBytes) + n += 2 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *RepProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, e := range m.NullableTimestamps { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDurations) > 0 { + for _, e := range m.NullableDurations { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Timestamps) > 0 { + for _, e := range m.Timestamps { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Durations) > 0 { + for _, e := range m.Durations { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = e.Size() + n += 2 + l + sovTypes(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *RepStdTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamps) > 0 { + for _, e := range m.NullableTimestamps { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDurations) > 0 { + for _, e := range m.NullableDurations { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Timestamps) > 0 { + for _, e := range m.Timestamps { + l = github_com_gogo_protobuf_types.SizeOfStdTime(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.Durations) > 0 { + for _, e := range m.Durations { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableDouble) > 0 { + for _, e := range m.NullableDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullDouble) > 0 { + for _, e := range m.NonnullDouble { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableFloat) > 0 { + for _, e := range m.NullableFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullFloat) > 0 { + for _, e := range m.NonnullFloat { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableInt64) > 0 { + for _, e := range m.NullableInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullInt64) > 0 { + for _, e := range m.NonnullInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableUInt64) > 0 { + for _, e := range m.NullableUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullUInt64) > 0 { + for _, e := range m.NonnullUInt64 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableInt32) > 0 { + for _, e := range m.NullableInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullInt32) > 0 { + for _, e := range m.NonnullInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableUInt32) > 0 { + for _, e := range m.NullableUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*e) + n += 1 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullUInt32) > 0 { + for _, e := range m.NonnullUInt32 { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableBool) > 0 { + for _, e := range m.NullableBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullBool) > 0 { + for _, e := range m.NonnullBool { + l = github_com_gogo_protobuf_types.SizeOfStdBool(e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableString) > 0 { + for _, e := range m.NullableString { + l = github_com_gogo_protobuf_types.SizeOfStdString(*e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullString) > 0 { + for _, e := range m.NonnullString { + l = github_com_gogo_protobuf_types.SizeOfStdString(e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NullableBytes) > 0 { + for _, e := range m.NullableBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if len(m.NonnullBytes) > 0 { + for _, e := range m.NonnullBytes { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(e) + n += 2 + l + sovTypes(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *MapProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k, v := range m.NullableTimestamp { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.Timestamp) > 0 { + for k, v := range m.Timestamp { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableDuration) > 0 { + for k, v := range m.NullableDuration { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.Duration) > 0 { + for k, v := range m.Duration { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *MapStdTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NullableTimestamp) > 0 { + for k, v := range m.NullableTimestamp { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.Timestamp) > 0 { + for k, v := range m.Timestamp { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdTime(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableDuration) > 0 { + for k, v := range m.NullableDuration { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.Duration) > 0 { + for k, v := range m.Duration { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDuration(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableDouble) > 0 { + for k, v := range m.NullableDouble { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullDouble) > 0 { + for k, v := range m.NonnullDouble { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdDouble(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableFloat) > 0 { + for k, v := range m.NullableFloat { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullFloat) > 0 { + for k, v := range m.NonnullFloat { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdFloat(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt64) > 0 { + for k, v := range m.NullableInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt64) > 0 { + for k, v := range m.NonnullInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdInt64(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt64) > 0 { + for k, v := range m.NullableUInt64 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt64) > 0 { + for k, v := range m.NonnullUInt64 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableInt32) > 0 { + for k, v := range m.NullableInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullInt32) > 0 { + for k, v := range m.NonnullInt32 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdInt32(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableUInt32) > 0 { + for k, v := range m.NullableUInt32 { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullUInt32) > 0 { + for k, v := range m.NonnullUInt32 { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBool) > 0 { + for k, v := range m.NullableBool { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBool) > 0 { + for k, v := range m.NonnullBool { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdBool(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableString) > 0 { + for k, v := range m.NullableString { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullString) > 0 { + for k, v := range m.NonnullString { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdString(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NullableBytes) > 0 { + for k, v := range m.NullableBytes { + _ = k + _ = v + l = 0 + if v != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*v) + l += 1 + sovTypes(uint64(l)) + } + mapEntrySize := 1 + sovTypes(uint64(k)) + l + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if len(m.NonnullBytes) > 0 { + for k, v := range m.NonnullBytes { + _ = k + _ = v + l = github_com_gogo_protobuf_types.SizeOfStdBytes(v) + mapEntrySize := 1 + sovTypes(uint64(k)) + 1 + l + sovTypes(uint64(l)) + n += mapEntrySize + 2 + sovTypes(uint64(mapEntrySize)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *OneofProtoTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.OneOfProtoTimes != nil { + n += m.OneOfProtoTimes.Size() + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *OneofProtoTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Timestamp != nil { + l = m.Timestamp.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Duration != nil { + l = m.Duration.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = m.RepDouble.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = m.RepFloat.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = m.RepInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = m.RepUInt64.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = m.RepInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = m.RepUInt32.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = m.RepBool.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = m.RepString.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofProtoTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = m.RepBytes.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.OneOfStdTimes != nil { + n += m.OneOfStdTimes.Size() + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *OneofStdTypes_Timestamp) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Timestamp != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.Timestamp) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_Duration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Duration != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Duration) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepDouble) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepDouble != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDouble(*m.RepDouble) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepFloat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepFloat != nil { + l = github_com_gogo_protobuf_types.SizeOfStdFloat(*m.RepFloat) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt64(*m.RepInt64) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt64) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt64 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.RepUInt64) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdInt32(*m.RepInt32) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepUInt32) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepUInt32 != nil { + l = github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.RepUInt32) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBool != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBool(*m.RepBool) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepString) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepString != nil { + l = github_com_gogo_protobuf_types.SizeOfStdString(*m.RepString) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *OneofStdTypes_RepBytes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RepBytes != nil { + l = github_com_gogo_protobuf_types.SizeOfStdBytes(*m.RepBytes) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func sovTypes(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozTypes(x uint64) (n int) { return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *KnownTypes) Unmarshal(dAtA []byte) error { +func (m *KnownTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KnownTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KnownTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Dur", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Dur == nil { + m.Dur = &types.Duration{} + } + if err := m.Dur.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Ts == nil { + m.Ts = &types.Timestamp{} + } + if err := m.Ts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Dbl", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Dbl == nil { + m.Dbl = &types.DoubleValue{} + } + if err := m.Dbl.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Flt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Flt == nil { + m.Flt = &types.FloatValue{} + } + if err := m.Flt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field I64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.I64 == nil { + m.I64 = &types.Int64Value{} + } + if err := m.I64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field U64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.U64 == nil { + m.U64 = &types.UInt64Value{} + } + if err := m.U64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field I32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.I32 == nil { + m.I32 = &types.Int32Value{} + } + if err := m.I32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field U32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.U32 == nil { + m.U32 = &types.UInt32Value{} + } + if err := m.U32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Bool == nil { + m.Bool = &types.BoolValue{} + } + if err := m.Bool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Str", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Str == nil { + m.Str = &types.StringValue{} + } + if err := m.Str.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Bytes == nil { + m.Bytes = &types.BytesValue{} + } + if err := m.Bytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProtoTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProtoTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableTimestamp == nil { + m.NullableTimestamp = &types.Timestamp{} + } + if err := m.NullableTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDuration == nil { + m.NullableDuration = &types.Duration{} + } + if err := m.NullableDuration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDouble == nil { + m.NullableDouble = &types.DoubleValue{} + } + if err := m.NullableDouble.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableFloat == nil { + m.NullableFloat = &types.FloatValue{} + } + if err := m.NullableFloat.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt64 == nil { + m.NullableInt64 = &types.Int64Value{} + } + if err := m.NullableInt64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt64 == nil { + m.NullableUInt64 = &types.UInt64Value{} + } + if err := m.NullableUInt64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt32 == nil { + m.NullableInt32 = &types.Int32Value{} + } + if err := m.NullableInt32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt32 == nil { + m.NullableUInt32 = &types.UInt32Value{} + } + if err := m.NullableUInt32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBool == nil { + m.NullableBool = &types.BoolValue{} + } + if err := m.NullableBool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableString == nil { + m.NullableString = &types.StringValue{} + } + if err := m.NullableString.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBytes == nil { + m.NullableBytes = &types.BytesValue{} + } + if err := m.NullableBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Duration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullDouble.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullFloat.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullInt64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullUInt64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullInt32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullUInt32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullBool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullString.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonnullBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StdTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StdTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableTimestamp == nil { + m.NullableTimestamp = new(time.Time) + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.NullableTimestamp, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDuration == nil { + m.NullableDuration = new(time.Duration) + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.NullableDuration, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDouble == nil { + m.NullableDouble = new(float64) + } + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(m.NullableDouble, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableFloat == nil { + m.NullableFloat = new(float32) + } + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(m.NullableFloat, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt64 == nil { + m.NullableInt64 = new(int64) + } + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(m.NullableInt64, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt64 == nil { + m.NullableUInt64 = new(uint64) + } + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(m.NullableUInt64, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt32 == nil { + m.NullableInt32 = new(int32) + } + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(m.NullableInt32, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt32 == nil { + m.NullableUInt32 = new(uint32) + } + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(m.NullableUInt32, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBool == nil { + m.NullableBool = new(bool) + } + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(m.NullableBool, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableString == nil { + m.NullableString = new(string) + } + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(m.NullableString, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBytes == nil { + m.NullableBytes = new([]byte) + } + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(m.NullableBytes, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Timestamp, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(&m.NonnullDouble, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(&m.NonnullFloat, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(&m.NonnullInt64, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(&m.NonnullUInt64, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(&m.NonnullInt32, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(&m.NonnullUInt32, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(&m.NonnullBool, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(&m.NonnullString, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(&m.NonnullBytes, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RepProtoTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RepProtoTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RepProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableTimestamps = append(m.NullableTimestamps, &types.Timestamp{}) + if err := m.NullableTimestamps[len(m.NullableTimestamps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDurations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableDurations = append(m.NullableDurations, &types.Duration{}) + if err := m.NullableDurations[len(m.NullableDurations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Timestamps = append(m.Timestamps, types.Timestamp{}) + if err := m.Timestamps[len(m.Timestamps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Durations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Durations = append(m.Durations, types.Duration{}) + if err := m.Durations[len(m.Durations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableDouble = append(m.NullableDouble, &types.DoubleValue{}) + if err := m.NullableDouble[len(m.NullableDouble)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullDouble = append(m.NonnullDouble, types.DoubleValue{}) + if err := m.NonnullDouble[len(m.NonnullDouble)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableFloat = append(m.NullableFloat, &types.FloatValue{}) + if err := m.NullableFloat[len(m.NullableFloat)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullFloat = append(m.NonnullFloat, types.FloatValue{}) + if err := m.NonnullFloat[len(m.NonnullFloat)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableInt64 = append(m.NullableInt64, &types.Int64Value{}) + if err := m.NullableInt64[len(m.NullableInt64)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullInt64 = append(m.NonnullInt64, types.Int64Value{}) + if err := m.NonnullInt64[len(m.NonnullInt64)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableUInt64 = append(m.NullableUInt64, &types.UInt64Value{}) + if err := m.NullableUInt64[len(m.NullableUInt64)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullUInt64 = append(m.NonnullUInt64, types.UInt64Value{}) + if err := m.NonnullUInt64[len(m.NonnullUInt64)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableInt32 = append(m.NullableInt32, &types.Int32Value{}) + if err := m.NullableInt32[len(m.NullableInt32)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullInt32 = append(m.NonnullInt32, types.Int32Value{}) + if err := m.NonnullInt32[len(m.NonnullInt32)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableUInt32 = append(m.NullableUInt32, &types.UInt32Value{}) + if err := m.NullableUInt32[len(m.NullableUInt32)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullUInt32 = append(m.NonnullUInt32, types.UInt32Value{}) + if err := m.NonnullUInt32[len(m.NonnullUInt32)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableBool = append(m.NullableBool, &types.BoolValue{}) + if err := m.NullableBool[len(m.NullableBool)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullBool = append(m.NonnullBool, types.BoolValue{}) + if err := m.NonnullBool[len(m.NonnullBool)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableString = append(m.NullableString, &types.StringValue{}) + if err := m.NullableString[len(m.NullableString)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullString = append(m.NonnullString, types.StringValue{}) + if err := m.NonnullString[len(m.NonnullString)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableBytes = append(m.NullableBytes, &types.BytesValue{}) + if err := m.NullableBytes[len(m.NullableBytes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullBytes = append(m.NonnullBytes, types.BytesValue{}) + if err := m.NonnullBytes[len(m.NonnullBytes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RepStdTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RepStdTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RepStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableTimestamps = append(m.NullableTimestamps, new(time.Time)) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.NullableTimestamps[len(m.NullableTimestamps)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDurations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableDurations = append(m.NullableDurations, new(time.Duration)) + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.NullableDurations[len(m.NullableDurations)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Timestamps = append(m.Timestamps, time.Time{}) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&(m.Timestamps[len(m.Timestamps)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Durations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Durations = append(m.Durations, time.Duration(0)) + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&(m.Durations[len(m.Durations)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableDouble = append(m.NullableDouble, new(float64)) + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(m.NullableDouble[len(m.NullableDouble)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullDouble = append(m.NonnullDouble, 0) + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(&(m.NonnullDouble[len(m.NonnullDouble)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableFloat = append(m.NullableFloat, new(float32)) + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(m.NullableFloat[len(m.NullableFloat)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullFloat = append(m.NonnullFloat, 0) + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(&(m.NonnullFloat[len(m.NonnullFloat)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableInt64 = append(m.NullableInt64, new(int64)) + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(m.NullableInt64[len(m.NullableInt64)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullInt64 = append(m.NonnullInt64, 0) + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(&(m.NonnullInt64[len(m.NonnullInt64)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableUInt64 = append(m.NullableUInt64, new(uint64)) + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(m.NullableUInt64[len(m.NullableUInt64)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullUInt64 = append(m.NonnullUInt64, 0) + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(&(m.NonnullUInt64[len(m.NonnullUInt64)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableInt32 = append(m.NullableInt32, new(int32)) + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(m.NullableInt32[len(m.NullableInt32)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullInt32 = append(m.NonnullInt32, 0) + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(&(m.NonnullInt32[len(m.NonnullInt32)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableUInt32 = append(m.NullableUInt32, new(uint32)) + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(m.NullableUInt32[len(m.NullableUInt32)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullUInt32 = append(m.NonnullUInt32, 0) + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(&(m.NonnullUInt32[len(m.NonnullUInt32)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableBool = append(m.NullableBool, new(bool)) + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(m.NullableBool[len(m.NullableBool)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullBool = append(m.NonnullBool, false) + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(&(m.NonnullBool[len(m.NonnullBool)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableString = append(m.NullableString, new(string)) + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(m.NullableString[len(m.NullableString)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullString = append(m.NonnullString, "") + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(&(m.NonnullString[len(m.NonnullString)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NullableBytes = append(m.NullableBytes, new([]byte)) + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(m.NullableBytes[len(m.NullableBytes)-1], dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonnullBytes = append(m.NonnullBytes, []byte{}) + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(&(m.NonnullBytes[len(m.NonnullBytes)-1]), dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MapProtoTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MapProtoTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MapProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableTimestamp == nil { + m.NullableTimestamp = make(map[int32]*types.Timestamp) + } + var mapkey int32 + var mapvalue *types.Timestamp + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Timestamp{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableTimestamp[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Timestamp == nil { + m.Timestamp = make(map[int32]types.Timestamp) + } + var mapkey int32 + mapvalue := &types.Timestamp{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Timestamp{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Timestamp[mapkey] = *mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDuration == nil { + m.NullableDuration = make(map[int32]*types.Duration) + } + var mapkey int32 + var mapvalue *types.Duration + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Duration{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableDuration[mapkey] = mapvalue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Duration == nil { + m.Duration = make(map[int32]types.Duration) + } + var mapkey int32 + mapvalue := &types.Duration{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Duration{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Duration[mapkey] = *mapvalue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableDouble == nil { + m.NullableDouble = make(map[int32]*types.DoubleValue) + } + var mapkey int32 + var mapvalue *types.DoubleValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.DoubleValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableDouble[mapkey] = mapvalue + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullDouble == nil { + m.NonnullDouble = make(map[int32]types.DoubleValue) + } + var mapkey int32 + mapvalue := &types.DoubleValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.DoubleValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullDouble[mapkey] = *mapvalue + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableFloat == nil { + m.NullableFloat = make(map[int32]*types.FloatValue) + } + var mapkey int32 + var mapvalue *types.FloatValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.FloatValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableFloat[mapkey] = mapvalue + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullFloat == nil { + m.NonnullFloat = make(map[int32]types.FloatValue) + } + var mapkey int32 + mapvalue := &types.FloatValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.FloatValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullFloat[mapkey] = *mapvalue + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt64 == nil { + m.NullableInt64 = make(map[int32]*types.Int64Value) + } + var mapkey int32 + var mapvalue *types.Int64Value + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Int64Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableInt64[mapkey] = mapvalue + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullInt64 == nil { + m.NonnullInt64 = make(map[int32]types.Int64Value) + } + var mapkey int32 + mapvalue := &types.Int64Value{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Int64Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullInt64[mapkey] = *mapvalue + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt64 == nil { + m.NullableUInt64 = make(map[int32]*types.UInt64Value) + } + var mapkey int32 + var mapvalue *types.UInt64Value + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.UInt64Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableUInt64[mapkey] = mapvalue + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullUInt64 == nil { + m.NonnullUInt64 = make(map[int32]types.UInt64Value) + } + var mapkey int32 + mapvalue := &types.UInt64Value{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.UInt64Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullUInt64[mapkey] = *mapvalue + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableInt32 == nil { + m.NullableInt32 = make(map[int32]*types.Int32Value) + } + var mapkey int32 + var mapvalue *types.Int32Value + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Int32Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableInt32[mapkey] = mapvalue + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullInt32 == nil { + m.NonnullInt32 = make(map[int32]types.Int32Value) + } + var mapkey int32 + mapvalue := &types.Int32Value{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.Int32Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullInt32[mapkey] = *mapvalue + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableUInt32 == nil { + m.NullableUInt32 = make(map[int32]*types.UInt32Value) + } + var mapkey int32 + var mapvalue *types.UInt32Value + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.UInt32Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableUInt32[mapkey] = mapvalue + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullUInt32 == nil { + m.NonnullUInt32 = make(map[int32]types.UInt32Value) + } + var mapkey int32 + mapvalue := &types.UInt32Value{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.UInt32Value{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullUInt32[mapkey] = *mapvalue + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBool == nil { + m.NullableBool = make(map[int32]*types.BoolValue) + } + var mapkey int32 + var mapvalue *types.BoolValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.BoolValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableBool[mapkey] = mapvalue + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullBool == nil { + m.NonnullBool = make(map[int32]types.BoolValue) + } + var mapkey int32 + mapvalue := &types.BoolValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.BoolValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullBool[mapkey] = *mapvalue + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableString == nil { + m.NullableString = make(map[int32]*types.StringValue) + } + var mapkey int32 + var mapvalue *types.StringValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.StringValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableString[mapkey] = mapvalue + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullString == nil { + m.NonnullString = make(map[int32]types.StringValue) + } + var mapkey int32 + mapvalue := &types.StringValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.StringValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullString[mapkey] = *mapvalue + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableBytes == nil { + m.NullableBytes = make(map[int32]*types.BytesValue) + } + var mapkey int32 + var mapvalue *types.BytesValue + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.BytesValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableBytes[mapkey] = mapvalue + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonnullBytes == nil { + m.NonnullBytes = make(map[int32]types.BytesValue) + } + var mapkey int32 + mapvalue := &types.BytesValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &types.BytesValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NonnullBytes[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MapStdTypes) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2883,28 +14935,583 @@ if shift >= 64 { return ErrIntOverflowTypes } - if iNdEx >= l { + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MapStdTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MapStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NullableTimestamp == nil { + m.NullableTimestamp = make(map[int32]*time.Time) + } + var mapkey int32 + mapvalue := new(time.Time) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableTimestamp[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Timestamp == nil { + m.Timestamp = make(map[int32]time.Time) + } + var mapkey int32 + mapvalue := new(time.Time) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Timestamp[mapkey] = *mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if m.NullableDuration == nil { + m.NullableDuration = make(map[int32]*time.Duration) + } + var mapkey int32 + mapvalue := new(time.Duration) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableDuration[mapkey] = mapvalue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Duration == nil { + m.Duration = make(map[int32]time.Duration) + } + var mapkey int32 + mapvalue := new(time.Duration) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Duration[mapkey] = *mapvalue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NullableDouble", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KnownTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KnownTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + if m.NullableDouble == nil { + m.NullableDouble = make(map[int32]*float64) + } + var mapkey int32 + mapvalue := new(float64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NullableDouble[mapkey] = ((*float64)(mapvalue)) + iNdEx = postIndex + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Dur", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullDouble", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2928,16 +15535,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Dur == nil { - m.Dur = &types.Duration{} + if m.NonnullDouble == nil { + m.NonnullDouble = make(map[int32]float64) } - if err := m.Dur.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(float64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullDouble[mapkey] = ((float64)(*mapvalue)) iNdEx = postIndex - case 2: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableFloat", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2961,16 +15646,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Ts == nil { - m.Ts = &types.Timestamp{} + if m.NullableFloat == nil { + m.NullableFloat = make(map[int32]*float32) } - if err := m.Ts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(float32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NullableFloat[mapkey] = ((*float32)(mapvalue)) iNdEx = postIndex - case 3: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Dbl", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullFloat", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2994,16 +15757,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Dbl == nil { - m.Dbl = &types.DoubleValue{} + if m.NonnullFloat == nil { + m.NonnullFloat = make(map[int32]float32) } - if err := m.Dbl.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(float32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullFloat[mapkey] = ((float32)(*mapvalue)) iNdEx = postIndex - case 4: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Flt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3027,16 +15868,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Flt == nil { - m.Flt = &types.FloatValue{} + if m.NullableInt64 == nil { + m.NullableInt64 = make(map[int32]*int64) } - if err := m.Flt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(int64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NullableInt64[mapkey] = ((*int64)(mapvalue)) iNdEx = postIndex - case 5: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field I64", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3060,16 +15979,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.I64 == nil { - m.I64 = &types.Int64Value{} + if m.NonnullInt64 == nil { + m.NonnullInt64 = make(map[int32]int64) } - if err := m.I64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(int64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullInt64[mapkey] = ((int64)(*mapvalue)) iNdEx = postIndex - case 6: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field U64", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3093,16 +16090,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.U64 == nil { - m.U64 = &types.UInt64Value{} + if m.NullableUInt64 == nil { + m.NullableUInt64 = make(map[int32]*uint64) } - if err := m.U64.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(uint64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NullableUInt64[mapkey] = ((*uint64)(mapvalue)) iNdEx = postIndex - case 7: + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field I32", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3126,16 +16201,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.I32 == nil { - m.I32 = &types.Int32Value{} + if m.NonnullUInt64 == nil { + m.NonnullUInt64 = make(map[int32]uint64) } - if err := m.I32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(uint64) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullUInt64[mapkey] = ((uint64)(*mapvalue)) iNdEx = postIndex - case 8: + case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field U32", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3159,49 +16312,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.U32 == nil { - m.U32 = &types.UInt32Value{} - } - if err := m.U32.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Bool", wireType) + if m.NullableInt32 == nil { + m.NullableInt32 = make(map[int32]*int32) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(int32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Bool == nil { - m.Bool = &types.BoolValue{} - } - if err := m.Bool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NullableInt32[mapkey] = ((*int32)(mapvalue)) iNdEx = postIndex - case 10: + case 14: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Str", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3225,16 +16423,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Str == nil { - m.Str = &types.StringValue{} + if m.NonnullInt32 == nil { + m.NonnullInt32 = make(map[int32]int32) } - if err := m.Str.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey int32 + mapvalue := new(int32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullInt32[mapkey] = ((int32)(*mapvalue)) iNdEx = postIndex - case 11: + case 15: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Bytes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableUInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3258,100 +16534,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Bytes == nil { - m.Bytes = &types.BytesValue{} - } - if err := m.Bytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ProtoTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ProtoTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + if m.NullableUInt32 == nil { + m.NullableUInt32 = make(map[int32]*uint32) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(uint32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NullableTimestamp == nil { - m.NullableTimestamp = &types.Timestamp{} - } - if err := m.NullableTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NullableUInt32[mapkey] = ((*uint32)(mapvalue)) iNdEx = postIndex - case 2: + case 16: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullUInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3375,46 +16645,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableDuration == nil { - m.NullableDuration = &types.Duration{} - } - if err := m.NullableDuration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + if m.NonnullUInt32 == nil { + m.NonnullUInt32 = make(map[int32]uint32) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(uint32) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NonnullUInt32[mapkey] = ((uint32)(*mapvalue)) iNdEx = postIndex - case 4: + case 17: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableBool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3438,97 +16756,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Duration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StdTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StdTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StdTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + if m.NullableBool == nil { + m.NullableBool = make(map[int32]*bool) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(bool) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NullableTimestamp == nil { - m.NullableTimestamp = new(time.Time) - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.NullableTimestamp, dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NullableBool[mapkey] = ((*bool)(mapvalue)) iNdEx = postIndex - case 2: + case 18: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3552,46 +16867,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableDuration == nil { - m.NullableDuration = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.NullableDuration, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + if m.NonnullBool == nil { + m.NonnullBool = make(map[int32]bool) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new(bool) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Timestamp, dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NonnullBool[mapkey] = ((bool)(*mapvalue)) iNdEx = postIndex - case 4: + case 19: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableString", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3615,64 +16978,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RepProtoTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + if m.NullableString == nil { + m.NullableString = make(map[int32]*string) } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + var mapkey int32 + mapvalue := new(string) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RepProtoTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RepProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.NullableString[mapkey] = ((*string)(mapvalue)) + iNdEx = postIndex + case 20: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullString", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3696,14 +17089,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.NullableTimestamps = append(m.NullableTimestamps, &types.Timestamp{}) - if err := m.NullableTimestamps[len(m.NullableTimestamps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.NonnullString == nil { + m.NonnullString = make(map[int32]string) + } + var mapkey int32 + mapvalue := new(string) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NonnullString[mapkey] = ((string)(*mapvalue)) iNdEx = postIndex - case 2: + case 21: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDurations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NullableBytes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3727,14 +17200,94 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.NullableDurations = append(m.NullableDurations, &types.Duration{}) - if err := m.NullableDurations[len(m.NullableDurations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.NullableBytes == nil { + m.NullableBytes = make(map[int32]*[]byte) + } + var mapkey int32 + mapvalue := new([]byte) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.NullableBytes[mapkey] = ((*[]byte)(mapvalue)) iNdEx = postIndex - case 3: + case 22: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NonnullBytes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3758,41 +17311,90 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.Timestamps = append(m.Timestamps, types.Timestamp{}) - if err := m.Timestamps[len(m.Timestamps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Durations", wireType) + if m.NonnullBytes == nil { + m.NonnullBytes = make(map[int32][]byte) } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey int32 + mapvalue := new([]byte) + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Durations = append(m.Durations, types.Duration{}) - if err := m.Durations[len(m.Durations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NonnullBytes[mapkey] = (([]byte)(*mapvalue)) iNdEx = postIndex default: iNdEx = preIndex @@ -3816,7 +17418,7 @@ } return nil } -func (m *RepStdTypes) Unmarshal(dAtA []byte) error { +func (m *OneofProtoTypes) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3839,15 +17441,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RepStdTypes: wiretype end group for non-group") + return fmt.Errorf("proto: OneofProtoTypes: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RepStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: OneofProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3871,14 +17473,15 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.NullableTimestamps = append(m.NullableTimestamps, new(time.Time)) - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.NullableTimestamps[len(m.NullableTimestamps)-1], dAtA[iNdEx:postIndex]); err != nil { + v := &types.Timestamp{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{v} iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDurations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3902,127 +17505,15 @@ if postIndex > l { return io.ErrUnexpectedEOF } - m.NullableDurations = append(m.NullableDurations, new(time.Duration)) - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.NullableDurations[len(m.NullableDurations)-1], dAtA[iNdEx:postIndex]); err != nil { + v := &types.Duration{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.OneOfProtoTimes = &OneofProtoTypes_Duration{v} iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Timestamps = append(m.Timestamps, time.Time{}) - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&(m.Timestamps[len(m.Timestamps)-1]), dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Durations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Durations = append(m.Durations, time.Duration(0)) - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&(m.Durations[len(m.Durations)-1]), dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MapProtoTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MapProtoTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MapProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepDouble", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4036,105 +17527,25 @@ iNdEx++ msglen |= (int(b) & 0x7F) << shift if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NullableTimestamp == nil { - m.NullableTimestamp = make(map[int32]*types.Timestamp) - } - var mapkey int32 - var mapvalue *types.Timestamp - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Timestamp{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + break } } - m.NullableTimestamp[mapkey] = mapvalue + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.DoubleValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfProtoTimes = &OneofProtoTypes_RepDouble{v} iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepFloat", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4158,95 +17569,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timestamp == nil { - m.Timestamp = make(map[int32]types.Timestamp) + v := &types.FloatValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := &types.Timestamp{} - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfProtoTimes = &OneofProtoTypes_RepFloat{v} + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Timestamp{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.Timestamp[mapkey] = *mapvalue + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.Int64Value{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfProtoTimes = &OneofProtoTypes_RepInt64{v} iNdEx = postIndex - case 3: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepUInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4270,95 +17633,79 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableDuration == nil { - m.NullableDuration = make(map[int32]*types.Duration) + v := &types.UInt64Value{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - var mapvalue *types.Duration - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt64{v} + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Duration{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.Int32Value{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfProtoTimes = &OneofProtoTypes_RepInt32{v} + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepUInt32", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes } - m.NullableDuration[mapkey] = mapvalue + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.UInt32Value{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfProtoTimes = &OneofProtoTypes_RepUInt32{v} iNdEx = postIndex - case 4: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepBool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4382,146 +17729,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Duration == nil { - m.Duration = make(map[int32]types.Duration) + v := &types.BoolValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := &types.Duration{} - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfProtoTimes = &OneofProtoTypes_RepBool{v} + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepString", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Duration{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.Duration[mapkey] = *mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MapStdTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { + postIndex := iNdEx + msglen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + v := &types.StringValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MapStdTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MapStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.OneOfProtoTimes = &OneofProtoTypes_RepString{v} + iNdEx = postIndex + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableTimestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepBytes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4545,92 +17793,64 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableTimestamp == nil { - m.NullableTimestamp = make(map[int32]*time.Time) + v := &types.BytesValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := new(time.Time) - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + m.OneOfProtoTimes = &OneofProtoTypes_RepBytes{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err } - m.NullableTimestamp[mapkey] = mapvalue - iNdEx = postIndex - case 2: + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OneofStdTypes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OneofStdTypes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OneofStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) } @@ -4656,94 +17876,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timestamp == nil { - m.Timestamp = make(map[int32]time.Time) + v := new(time.Time) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := new(time.Time) - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfStdTimes = &OneofStdTypes_Timestamp{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.Timestamp[mapkey] = *mapvalue + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := new(time.Duration) + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfStdTimes = &OneofStdTypes_Duration{v} iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NullableDuration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepDouble", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4767,94 +17940,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.NullableDuration == nil { - m.NullableDuration = make(map[int32]*time.Duration) + v := new(float64) + if err := github_com_gogo_protobuf_types.StdDoubleUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := new(time.Duration) - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfStdTimes = &OneofStdTypes_RepDouble{v} + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepFloat", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.NullableDuration[mapkey] = mapvalue + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := new(float32) + if err := github_com_gogo_protobuf_types.StdFloatUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.OneOfStdTimes = &OneofStdTypes_RepFloat{v} iNdEx = postIndex - case 4: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepInt64", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4878,145 +18004,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if m.Duration == nil { - m.Duration = make(map[int32]time.Duration) + v := new(int64) + if err := github_com_gogo_protobuf_types.StdInt64Unmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey int32 - mapvalue := new(time.Duration) - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.OneOfStdTimes = &OneofStdTypes_RepInt64{v} + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepUInt64", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(mapvalue, dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break } } - m.Duration[mapkey] = *mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *OneofProtoTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { + postIndex := iNdEx + msglen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + v := new(uint64) + if err := github_com_gogo_protobuf_types.StdUInt64Unmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: OneofProtoTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OneofProtoTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.OneOfStdTimes = &OneofStdTypes_RepUInt64{v} + iNdEx = postIndex + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5040,15 +18068,15 @@ if postIndex > l { return io.ErrUnexpectedEOF } - v := &types.Timestamp{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := new(int32) + if err := github_com_gogo_protobuf_types.StdInt32Unmarshal(v, dAtA[iNdEx:postIndex]); err != nil { return err } - m.OneOfProtoTimes = &OneofProtoTypes_Timestamp{v} + m.OneOfStdTimes = &OneofStdTypes_RepInt32{v} iNdEx = postIndex - case 2: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepUInt32", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5072,66 +18100,47 @@ if postIndex > l { return io.ErrUnexpectedEOF } - v := &types.Duration{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := new(uint32) + if err := github_com_gogo_protobuf_types.StdUInt32Unmarshal(v, dAtA[iNdEx:postIndex]); err != nil { return err } - m.OneOfProtoTimes = &OneofProtoTypes_Duration{v} + m.OneOfStdTimes = &OneofStdTypes_RepUInt32{v} iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTypes + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepBool", wireType) } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *OneofStdTypes) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes + if msglen < 0 { + return ErrInvalidLengthTypes } - if iNdEx >= l { + postIndex := iNdEx + msglen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + v := new(bool) + if err := github_com_gogo_protobuf_types.StdBoolUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: OneofStdTypes: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OneofStdTypes: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.OneOfStdTimes = &OneofStdTypes_RepBool{v} + iNdEx = postIndex + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepString", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5155,15 +18164,15 @@ if postIndex > l { return io.ErrUnexpectedEOF } - v := new(time.Time) - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + v := new(string) + if err := github_com_gogo_protobuf_types.StdStringUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { return err } - m.OneOfStdTimes = &OneofStdTypes_Timestamp{v} + m.OneOfStdTimes = &OneofStdTypes_RepString{v} iNdEx = postIndex - case 2: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepBytes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5187,11 +18196,11 @@ if postIndex > l { return io.ErrUnexpectedEOF } - v := new(time.Duration) - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + v := new([]byte) + if err := github_com_gogo_protobuf_types.StdBytesUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { return err } - m.OneOfStdTimes = &OneofStdTypes_Duration{v} + m.OneOfStdTimes = &OneofStdTypes_RepBytes{v} iNdEx = postIndex default: iNdEx = preIndex @@ -5321,67 +18330,153 @@ ) func init() { - proto.RegisterFile("combos/unmarshaler/types.proto", fileDescriptor_types_cfade28d66c5afd2) + proto.RegisterFile("combos/unmarshaler/types.proto", fileDescriptor_types_1fa8d07678f7c296) } -var fileDescriptor_types_cfade28d66c5afd2 = []byte{ - // 928 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0xcd, 0x8e, 0xdb, 0x54, - 0x18, 0x8d, 0x7f, 0x52, 0x32, 0x5f, 0x14, 0xda, 0x5a, 0x02, 0x99, 0x80, 0x9c, 0x21, 0x6c, 0x86, - 0x56, 0x75, 0x20, 0x89, 0x02, 0x1a, 0x54, 0x28, 0xd6, 0xb4, 0x9d, 0x52, 0x4d, 0xa7, 0x4a, 0xcb, - 0x08, 0x90, 0x40, 0xd8, 0x8d, 0x93, 0x46, 0x38, 0xbe, 0x91, 0x7d, 0x4d, 0x95, 0x1d, 0x8f, 0xc0, - 0x12, 0xc4, 0x86, 0xee, 0x90, 0x60, 0x0f, 0x4b, 0x36, 0x48, 0xdd, 0xc1, 0x13, 0x40, 0x1b, 0x36, - 0x3c, 0x42, 0x97, 0xe8, 0x5e, 0x5f, 0xff, 0xc5, 0xd7, 0x0e, 0x89, 0x34, 0x62, 0xd3, 0xdd, 0x78, - 0x7c, 0xce, 0xf1, 0xf1, 0xf1, 0xf9, 0xbe, 0x1b, 0xd0, 0xee, 0xa1, 0x99, 0x85, 0xfc, 0x4e, 0xe0, - 0xce, 0x4c, 0xcf, 0xbf, 0x6f, 0x3a, 0xb6, 0xd7, 0xc1, 0x8b, 0xb9, 0xed, 0xeb, 0x73, 0x0f, 0x61, - 0xa4, 0x54, 0xe9, 0x45, 0xf3, 0xd2, 0x64, 0x8a, 0xef, 0x07, 0x96, 0x7e, 0x0f, 0xcd, 0x3a, 0x13, - 0x34, 0x41, 0x1d, 0x7a, 0xd7, 0x0a, 0xc6, 0xf4, 0x8a, 0x5e, 0xd0, 0xbf, 0x42, 0x56, 0x53, 0x9b, - 0x20, 0x34, 0x71, 0xec, 0x04, 0x35, 0x0a, 0x3c, 0x13, 0x4f, 0x91, 0xcb, 0xee, 0xb7, 0x56, 0xef, - 0xe3, 0xe9, 0xcc, 0xf6, 0xb1, 0x39, 0x9b, 0x17, 0x09, 0x3c, 0xf0, 0xcc, 0xf9, 0xdc, 0xf6, 0x98, - 0xad, 0xf6, 0x77, 0x32, 0xc0, 0x4d, 0x17, 0x3d, 0x70, 0xef, 0x12, 0x7b, 0xca, 0x45, 0x90, 0x46, - 0x81, 0xa7, 0x0a, 0xbb, 0xc2, 0x5e, 0xbd, 0xfb, 0x92, 0x1e, 0x92, 0xf5, 0x88, 0xac, 0x1f, 0xb0, - 0xa7, 0x0f, 0x09, 0x4a, 0xb9, 0x00, 0x22, 0xf6, 0x55, 0x91, 0x62, 0x9b, 0x39, 0xec, 0xdd, 0xc8, - 0xc9, 0x50, 0xc4, 0xbe, 0xa2, 0x83, 0x34, 0xb2, 0x1c, 0x55, 0xa2, 0xe0, 0x57, 0xf2, 0xc2, 0x28, - 0xb0, 0x1c, 0xfb, 0xc4, 0x74, 0x02, 0x7b, 0x48, 0x80, 0xca, 0x25, 0x90, 0xc6, 0x0e, 0x56, 0x65, - 0x8a, 0x7f, 0x39, 0x87, 0xbf, 0xe6, 0x20, 0x13, 0x33, 0xf8, 0xd8, 0xc1, 0x04, 0x3e, 0x1d, 0xf4, - 0xd5, 0x6a, 0x01, 0xfc, 0x86, 0x8b, 0x07, 0x7d, 0x06, 0x9f, 0x0e, 0xfa, 0xc4, 0x4d, 0x30, 0xe8, - 0xab, 0x67, 0x0a, 0xdc, 0x7c, 0x98, 0xc6, 0x07, 0x83, 0x3e, 0x95, 0xef, 0x75, 0xd5, 0xe7, 0x8a, - 0xe5, 0x7b, 0xdd, 0x48, 0xbe, 0xd7, 0xa5, 0xf2, 0xbd, 0xae, 0x5a, 0x2b, 0x91, 0x8f, 0xf1, 0x01, - 0xc5, 0xcb, 0x16, 0x42, 0x8e, 0xba, 0x53, 0x10, 0xa5, 0x81, 0x90, 0x13, 0xc2, 0x29, 0x8e, 0xe8, - 0xfb, 0xd8, 0x53, 0xa1, 0x40, 0xff, 0x0e, 0xf6, 0xa6, 0xee, 0x84, 0xe9, 0xfb, 0xd8, 0x53, 0xde, - 0x84, 0xaa, 0xb5, 0xc0, 0xb6, 0xaf, 0xd6, 0x0b, 0x5e, 0xc0, 0x20, 0x77, 0x43, 0x42, 0x88, 0xdc, - 0x97, 0xff, 0x79, 0xd8, 0x12, 0xda, 0xdf, 0x8b, 0x00, 0xb7, 0x09, 0x28, 0x6c, 0xc7, 0x21, 0x9c, - 0x77, 0x03, 0xc7, 0x31, 0x2d, 0xc7, 0x8e, 0xbf, 0x2e, 0xeb, 0x4a, 0xd9, 0xf7, 0xcf, 0x93, 0x94, - 0xab, 0x70, 0x2e, 0xfa, 0x67, 0xd4, 0x29, 0x56, 0xa4, 0x92, 0xd2, 0xe5, 0x28, 0xca, 0xbb, 0xb0, - 0x13, 0x17, 0x9e, 0x75, 0xab, 0xc4, 0x88, 0x21, 0x3f, 0xfa, 0xb3, 0x55, 0x19, 0x26, 0x14, 0xe5, - 0x1d, 0xa8, 0x45, 0x03, 0xc5, 0xaa, 0x56, 0xfc, 0x78, 0xc6, 0x8e, 0x09, 0x2c, 0xa2, 0x9f, 0x44, - 0xa8, 0xdd, 0xc1, 0xa3, 0x30, 0xa0, 0x5b, 0x5b, 0x05, 0x64, 0xc8, 0x5f, 0xff, 0xd5, 0x12, 0x78, - 0x31, 0xdd, 0xdc, 0x22, 0x26, 0x43, 0xfe, 0x86, 0xa8, 0xe5, 0xc3, 0x32, 0x36, 0x0b, 0xab, 0x46, - 0x5e, 0x97, 0x1a, 0x4b, 0x05, 0xf6, 0xde, 0x26, 0x81, 0x51, 0x05, 0x6a, 0x26, 0x26, 0xb5, 0x7f, - 0x14, 0xa1, 0x31, 0xb4, 0xe7, 0xa9, 0x52, 0x7d, 0x00, 0x4a, 0xee, 0xc5, 0x7d, 0x55, 0xd8, 0x95, - 0xd6, 0xb4, 0x8a, 0xc3, 0x52, 0xae, 0x27, 0xf9, 0x47, 0x2e, 0xc8, 0x82, 0x92, 0xca, 0x7b, 0x95, - 0xe7, 0x28, 0x57, 0x00, 0x70, 0x62, 0x46, 0x5a, 0x67, 0x86, 0x75, 0x23, 0xc5, 0x51, 0x2e, 0xc3, - 0xce, 0x28, 0xb6, 0x20, 0xaf, 0xb1, 0x10, 0x35, 0x33, 0x66, 0xb0, 0x72, 0xfd, 0x2c, 0x42, 0x7d, - 0x68, 0xcf, 0xe3, 0x7e, 0xdd, 0xde, 0x2e, 0x2b, 0x56, 0x30, 0x5e, 0x62, 0x47, 0xdb, 0x24, 0xc6, - 0x2a, 0xc6, 0xc9, 0xed, 0x60, 0xc3, 0xdc, 0x92, 0x92, 0xa5, 0xb3, 0x7b, 0x7f, 0xa3, 0xec, 0x92, - 0x9a, 0x25, 0xac, 0xf6, 0x6f, 0x55, 0x68, 0x1c, 0x99, 0xe9, 0x9e, 0x7d, 0xcc, 0x9f, 0x4d, 0x22, - 0x7e, 0x51, 0x0f, 0x4f, 0xea, 0x0c, 0x41, 0xbf, 0xb5, 0x8a, 0xbe, 0xea, 0x62, 0x6f, 0xc1, 0x1b, - 0xd3, 0xeb, 0xe9, 0xc9, 0x0a, 0xc3, 0x7b, 0x8d, 0x2b, 0x99, 0x95, 0xca, 0xef, 0xa3, 0x13, 0xce, - 0xbc, 0x87, 0x21, 0x5e, 0x28, 0xb5, 0x18, 0x81, 0x43, 0x87, 0xf9, 0xd1, 0x3f, 0xc8, 0x8c, 0x2d, - 0xd1, 0x6b, 0x73, 0xf5, 0x32, 0x3a, 0xab, 0x0b, 0xaf, 0xf9, 0x39, 0xbc, 0xc8, 0xcf, 0x44, 0x39, - 0x07, 0xd2, 0x17, 0xf6, 0x82, 0x6e, 0xba, 0xea, 0x90, 0xfc, 0xa9, 0xbc, 0x01, 0xd5, 0x2f, 0xc9, - 0x79, 0xf2, 0x1f, 0x7e, 0x1e, 0x84, 0xc0, 0x7d, 0xf1, 0x6d, 0xa1, 0xf9, 0x11, 0x3c, 0x7f, 0x4a, - 0xca, 0x9f, 0xc1, 0x0b, 0xdc, 0xb0, 0x38, 0x0f, 0xe8, 0x64, 0x1f, 0x50, 0xb2, 0x38, 0x52, 0xfa, - 0x27, 0xd0, 0x38, 0x0d, 0xdd, 0xf6, 0xef, 0x55, 0xa8, 0x1f, 0x99, 0xc9, 0x06, 0xf8, 0xb4, 0xb8, - 0xc5, 0xaf, 0x27, 0x9f, 0x34, 0x82, 0x17, 0x74, 0xb8, 0xf8, 0xc0, 0xb9, 0x91, 0x6f, 0xf2, 0xab, - 0x1c, 0xd9, 0x15, 0x39, 0xee, 0x51, 0xf1, 0x49, 0x61, 0x97, 0xf7, 0x4a, 0x8c, 0xae, 0x34, 0xb0, - 0xe0, 0x28, 0xbb, 0x96, 0xeb, 0xf3, 0x2e, 0x47, 0x33, 0xab, 0xc5, 0x39, 0x8d, 0x9e, 0x35, 0xfa, - 0x7f, 0x68, 0xf4, 0xb7, 0x02, 0x9c, 0x3d, 0x76, 0x6d, 0x34, 0x4e, 0xed, 0xe6, 0xfd, 0x74, 0xed, - 0xd6, 0xfe, 0x5e, 0x3a, 0xcc, 0xec, 0xcc, 0xb7, 0x52, 0x5d, 0x58, 0xe7, 0xe3, 0x30, 0xb5, 0xce, - 0x8c, 0xf3, 0xd4, 0xc7, 0x31, 0xf3, 0x41, 0xf4, 0xda, 0x0f, 0x05, 0x68, 0x50, 0x6f, 0xf1, 0xbc, - 0x5d, 0xd9, 0xc8, 0x59, 0x38, 0x58, 0x59, 0x7f, 0x97, 0x37, 0xf0, 0x17, 0x16, 0x3e, 0xe3, 0xf2, - 0x2c, 0x75, 0x74, 0x4c, 0x1d, 0x11, 0x4d, 0x63, 0xef, 0xf1, 0x13, 0x4d, 0x78, 0xfa, 0x44, 0x13, - 0x7e, 0x58, 0x6a, 0xc2, 0x2f, 0x4b, 0x4d, 0xf8, 0x75, 0xa9, 0x09, 0x8f, 0x96, 0x5a, 0xe5, 0x8f, - 0xa5, 0x26, 0x3c, 0x5e, 0x6a, 0xc2, 0xd3, 0xa5, 0x56, 0xf9, 0xea, 0x6f, 0xad, 0x62, 0x9d, 0xa1, - 0xfa, 0xbd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xd2, 0xea, 0x00, 0x6a, 0x9b, 0x0e, 0x00, 0x00, +var fileDescriptor_types_1fa8d07678f7c296 = []byte{ + // 2300 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcf, 0x73, 0x1c, 0x47, + 0x19, 0xd5, 0x7a, 0x57, 0xb6, 0xd4, 0x92, 0x6c, 0x69, 0x1c, 0xa7, 0x06, 0x41, 0xad, 0x8d, 0x12, + 0x3b, 0x26, 0xa9, 0x48, 0x64, 0x46, 0x25, 0xc0, 0x90, 0x28, 0x99, 0xb2, 0xbd, 0xda, 0x8d, 0x64, + 0xaf, 0x57, 0x5a, 0x17, 0x04, 0x02, 0xec, 0x46, 0x63, 0x45, 0xc5, 0x6a, 0x67, 0x6b, 0x77, 0x96, + 0x94, 0x6e, 0xfc, 0x01, 0x1c, 0xb8, 0x41, 0x15, 0x17, 0xb8, 0x71, 0xe5, 0x40, 0x15, 0x47, 0x8e, + 0x39, 0xf2, 0x17, 0x40, 0x22, 0x2e, 0x5c, 0x81, 0x8b, 0x2f, 0x54, 0xa5, 0xa6, 0xbb, 0x67, 0xa6, + 0x7f, 0x7c, 0xdd, 0x3d, 0x3d, 0x25, 0xdd, 0x74, 0x93, 0x76, 0xbf, 0x7e, 0xf3, 0xe6, 0x9b, 0x37, + 0x7a, 0xfd, 0xbe, 0xd1, 0xa0, 0xfa, 0x27, 0xd1, 0x49, 0x3f, 0x9a, 0x6c, 0x4c, 0x87, 0x27, 0xbd, + 0xf1, 0xe4, 0xd3, 0xde, 0x20, 0x1c, 0x6f, 0xc4, 0xa7, 0xa3, 0x70, 0xb2, 0x3e, 0x1a, 0x47, 0x71, + 0xe4, 0xcc, 0xe2, 0x5f, 0x56, 0xdf, 0x3e, 0x3a, 0x8e, 0x3f, 0x9d, 0xf6, 0xd7, 0x3f, 0x89, 0x4e, + 0x36, 0x8e, 0xa2, 0xa3, 0x68, 0x03, 0x7f, 0xdb, 0x9f, 0xbe, 0xc0, 0xbf, 0xe1, 0x5f, 0xf0, 0x4f, + 0x64, 0xd5, 0x6a, 0xfd, 0x28, 0x8a, 0x8e, 0x06, 0x61, 0x5e, 0x75, 0x38, 0x1d, 0xf7, 0xe2, 0xe3, + 0x68, 0x48, 0xbf, 0xbf, 0x2d, 0x7e, 0x1f, 0x1f, 0x9f, 0x84, 0x93, 0xb8, 0x77, 0x32, 0x52, 0x01, + 0x7c, 0x36, 0xee, 0x8d, 0x46, 0xe1, 0x98, 0xd2, 0x5a, 0xfb, 0x7d, 0x0d, 0xa1, 0x0f, 0x87, 0xd1, + 0x67, 0xc3, 0x83, 0x84, 0x9e, 0xf3, 0x16, 0xaa, 0x1e, 0x4e, 0xc7, 0x6e, 0xe5, 0x4e, 0xe5, 0xfe, + 0x82, 0xf7, 0xb5, 0x75, 0xb2, 0x78, 0x3d, 0x5d, 0xbc, 0xfe, 0x90, 0x1e, 0xbd, 0x93, 0x54, 0x39, + 0x6f, 0xa2, 0x2b, 0xf1, 0xc4, 0xbd, 0x82, 0x6b, 0x57, 0xa5, 0xda, 0x83, 0x94, 0x49, 0xe7, 0x4a, + 0x3c, 0x71, 0xd6, 0x51, 0xf5, 0xb0, 0x3f, 0x70, 0xab, 0xb8, 0xf8, 0x1b, 0x32, 0x70, 0x34, 0xed, + 0x0f, 0xc2, 0xe7, 0xbd, 0xc1, 0x34, 0xec, 0x24, 0x85, 0xce, 0xdb, 0xa8, 0xfa, 0x62, 0x10, 0xbb, + 0x35, 0x5c, 0xff, 0x75, 0xa9, 0xfe, 0xf1, 0x20, 0xea, 0xc5, 0xb4, 0xfc, 0xc5, 0x20, 0x4e, 0xca, + 0x8f, 0xb7, 0x36, 0xdd, 0x59, 0x45, 0x79, 0x73, 0x18, 0x6f, 0x6d, 0xd2, 0xf2, 0xe3, 0xad, 0xcd, + 0x84, 0xcd, 0x74, 0x6b, 0xd3, 0xbd, 0xaa, 0x60, 0xd3, 0x65, 0xeb, 0xa7, 0x5b, 0x9b, 0x18, 0xde, + 0xf7, 0xdc, 0x6b, 0x6a, 0x78, 0xdf, 0x4b, 0xe1, 0x7d, 0x0f, 0xc3, 0xfb, 0x9e, 0x3b, 0xa7, 0x81, + 0xcf, 0xea, 0xa7, 0xb8, 0xbe, 0xd6, 0x8f, 0xa2, 0x81, 0x3b, 0xaf, 0x68, 0x65, 0x10, 0x45, 0x03, + 0x52, 0x8e, 0xeb, 0x12, 0xfc, 0x49, 0x3c, 0x76, 0x91, 0x02, 0x7f, 0x3f, 0x1e, 0x1f, 0x0f, 0x8f, + 0x28, 0xfe, 0x24, 0x1e, 0x3b, 0xef, 0xa0, 0xd9, 0xfe, 0x69, 0x1c, 0x4e, 0xdc, 0x05, 0xc5, 0x09, + 0x04, 0xc9, 0xb7, 0x64, 0x01, 0xa9, 0x7c, 0x50, 0xfb, 0xf7, 0x1f, 0x6f, 0x57, 0xd6, 0x7e, 0xbd, + 0x88, 0x50, 0x3b, 0x29, 0x22, 0xea, 0xd8, 0x41, 0x2b, 0xc3, 0xe9, 0x60, 0xd0, 0xeb, 0x0f, 0xc2, + 0xec, 0xea, 0x52, 0xad, 0xe8, 0xae, 0xbf, 0xbc, 0xc8, 0x79, 0x84, 0x96, 0xd3, 0x0f, 0x53, 0x4d, + 0x51, 0x21, 0x69, 0x44, 0x27, 0x2d, 0x71, 0x1e, 0xa2, 0xeb, 0xd9, 0x67, 0x58, 0x41, 0x85, 0x04, + 0x26, 0xac, 0x71, 0x3e, 0x40, 0x4b, 0xe9, 0x27, 0x58, 0x57, 0x45, 0x54, 0xc7, 0xaf, 0x60, 0x21, + 0xb0, 0x76, 0x8a, 0x28, 0x91, 0x5f, 0xc1, 0x9e, 0x0b, 0xd1, 0x5f, 0x21, 0x79, 0x0a, 0x6b, 0x04, + 0x22, 0xc5, 0x34, 0xcb, 0xaf, 0x10, 0x89, 0x14, 0x14, 0xb2, 0xb0, 0xc6, 0x79, 0x0f, 0x2d, 0xa6, + 0x9f, 0x04, 0xc5, 0xb4, 0xcd, 0xd5, 0xb3, 0x2c, 0x88, 0x9e, 0x0b, 0xc9, 0x5d, 0x58, 0xc3, 0xb6, + 0x23, 0x28, 0x7a, 0x07, 0xf0, 0x2b, 0x9c, 0xf7, 0xd0, 0x7c, 0xf6, 0x47, 0xd5, 0x5d, 0x34, 0x89, + 0x3d, 0xa8, 0x7d, 0xfe, 0x8f, 0xdb, 0x33, 0x9d, 0x7c, 0x89, 0xf3, 0x7d, 0x34, 0x97, 0xfe, 0xd1, + 0x76, 0x97, 0x0c, 0x12, 0xa7, 0xab, 0xb3, 0x05, 0xce, 0x0e, 0x5a, 0x1a, 0x46, 0xc3, 0x84, 0x10, + 0xd5, 0xf7, 0x75, 0xb3, 0xbe, 0x29, 0x08, 0xbf, 0xd0, 0x79, 0x84, 0x16, 0xe9, 0x07, 0x44, 0xe3, + 0x37, 0x8c, 0x1a, 0xa7, 0x38, 0xdc, 0x32, 0x06, 0x86, 0x68, 0x74, 0xd9, 0xa8, 0x73, 0x01, 0x86, + 0xc8, 0x34, 0x3f, 0x2f, 0xaa, 0xf5, 0x15, 0xb3, 0xd6, 0x85, 0xf3, 0xa2, 0x82, 0xe7, 0x08, 0xf9, + 0x9e, 0xeb, 0x18, 0xf5, 0x2e, 0x13, 0xf2, 0x3d, 0x81, 0x90, 0xef, 0xb9, 0x37, 0xcd, 0x9a, 0x07, + 0x08, 0xf9, 0x9e, 0x13, 0xa0, 0x05, 0xfa, 0x01, 0xd6, 0xfd, 0x2b, 0x26, 0xdd, 0x53, 0x14, 0x76, + 0x11, 0xc3, 0x86, 0x6a, 0xff, 0x96, 0x59, 0xfb, 0x02, 0x1b, 0x7a, 0x03, 0xe4, 0xed, 0x21, 0xfa, + 0x7f, 0xd5, 0xa8, 0x7f, 0xa1, 0x3d, 0x01, 0x63, 0x07, 0xff, 0x5d, 0x44, 0x73, 0xfb, 0xf1, 0x21, + 0x31, 0x83, 0x27, 0xa5, 0xcc, 0x20, 0xa8, 0xfd, 0xe6, 0x9f, 0xb7, 0x2b, 0x90, 0x25, 0x7c, 0x58, + 0xc2, 0x12, 0x82, 0xda, 0xef, 0x12, 0x34, 0xd9, 0x18, 0x5a, 0x65, 0x8c, 0x21, 0xa8, 0xfd, 0x21, + 0x41, 0x13, 0xed, 0xa1, 0x61, 0x6f, 0x0f, 0x14, 0x49, 0x30, 0x89, 0x86, 0xbd, 0x49, 0x88, 0x40, + 0x44, 0xf3, 0xad, 0x32, 0x56, 0x21, 0x9e, 0x1d, 0xbd, 0x7f, 0x1a, 0xf6, 0x86, 0x01, 0x90, 0xf2, + 0x3d, 0x91, 0x54, 0x31, 0xdb, 0x80, 0x48, 0x61, 0x0b, 0xb2, 0x34, 0x0f, 0x8a, 0xc3, 0x5b, 0x48, + 0xab, 0x8c, 0x85, 0x88, 0x8c, 0xe8, 0x7d, 0xd4, 0xb0, 0x37, 0x12, 0xb1, 0x4d, 0xc4, 0x4e, 0x02, + 0x3b, 0x3b, 0x99, 0x4b, 0x6e, 0x46, 0x7c, 0xcb, 0x30, 0x96, 0xb2, 0x6d, 0x63, 0x29, 0x18, 0x01, + 0xdf, 0x26, 0xb9, 0xad, 0xec, 0x96, 0xb1, 0x15, 0x0c, 0x44, 0x4f, 0x89, 0xb3, 0x96, 0xa6, 0xbd, + 0xb5, 0xe4, 0x58, 0xbc, 0xbd, 0x34, 0xed, 0xed, 0x45, 0x86, 0x22, 0xc2, 0xde, 0x2d, 0x63, 0x31, + 0xf2, 0x39, 0xd2, 0xdb, 0xa4, 0x69, 0x6f, 0x33, 0x20, 0x31, 0xdf, 0x13, 0x88, 0x15, 0xb4, 0x1a, + 0x98, 0x98, 0xef, 0x39, 0x8f, 0x6d, 0xed, 0x26, 0x47, 0xe2, 0x2c, 0x67, 0xb7, 0x8c, 0xe5, 0xc8, + 0xac, 0xe8, 0xed, 0xd2, 0xb4, 0xb7, 0x1d, 0xb9, 0x5d, 0xf8, 0xcb, 0xb5, 0xdf, 0x2e, 0xa2, 0xa5, + 0x4e, 0x38, 0x62, 0x62, 0x48, 0x0b, 0x39, 0x92, 0x7d, 0x4c, 0xdc, 0xca, 0x9d, 0xaa, 0x21, 0x87, + 0x00, 0xab, 0x9c, 0x46, 0xee, 0x62, 0xe9, 0x1d, 0x93, 0x44, 0xda, 0xaa, 0x3e, 0x89, 0xc8, 0x6b, + 0x9c, 0xf7, 0x11, 0x8a, 0x73, 0x32, 0x55, 0x13, 0x19, 0xea, 0xb2, 0xcc, 0x1a, 0xe7, 0x5d, 0x34, + 0x7f, 0x98, 0x51, 0xa8, 0x19, 0x28, 0xa4, 0xfb, 0xcc, 0x6c, 0x05, 0x90, 0x85, 0x66, 0x31, 0x86, + 0x5d, 0x16, 0x92, 0x36, 0x9c, 0x57, 0xcd, 0x20, 0xf0, 0x86, 0x53, 0x4a, 0x55, 0xd7, 0x30, 0x92, + 0x4d, 0xaa, 0x12, 0xf7, 0xac, 0x73, 0x46, 0x04, 0x70, 0xcf, 0x2a, 0x85, 0xb3, 0x79, 0x05, 0x8e, + 0x3a, 0x9c, 0x89, 0xdb, 0x5e, 0x64, 0x44, 0x00, 0xb7, 0xbd, 0x72, 0xc6, 0x5b, 0x50, 0xb4, 0x57, + 0x97, 0xf1, 0xa4, 0xcd, 0xf3, 0xa2, 0x19, 0x04, 0xde, 0x3c, 0x4b, 0x69, 0x71, 0x49, 0x7d, 0x5e, + 0x8a, 0xb4, 0x28, 0xee, 0xbf, 0xaf, 0x1b, 0x11, 0xc0, 0xfd, 0xb7, 0x1c, 0x3a, 0x6f, 0x68, 0x4e, + 0x4a, 0x15, 0x3a, 0xa5, 0x5d, 0xfc, 0xb2, 0x19, 0x04, 0xde, 0xc5, 0x8b, 0xf1, 0x75, 0x45, 0x71, + 0x43, 0xab, 0xe2, 0xab, 0x90, 0x02, 0x1c, 0xd3, 0x72, 0x28, 0x05, 0xc8, 0x11, 0xf8, 0xa6, 0xe2, + 0x74, 0x74, 0x11, 0x58, 0xca, 0x12, 0xaf, 0x98, 0x41, 0xe0, 0x2c, 0x21, 0x85, 0xe9, 0x5b, 0x8a, + 0x6b, 0xad, 0x0e, 0xd3, 0x72, 0x1c, 0xa9, 0x96, 0x8f, 0x23, 0xff, 0x5f, 0x44, 0x0b, 0x9d, 0x70, + 0x94, 0x25, 0x92, 0x76, 0x39, 0x5f, 0xa0, 0x91, 0x04, 0x72, 0x87, 0xbd, 0x32, 0xee, 0x40, 0x43, + 0x09, 0xe0, 0x11, 0x0f, 0x2d, 0x3d, 0x22, 0xdf, 0xfc, 0xb1, 0x3e, 0xf1, 0x81, 0x95, 0x4f, 0xe4, + 0xdb, 0x3f, 0xc6, 0x2b, 0x5a, 0x65, 0xbc, 0x42, 0x11, 0x8f, 0x76, 0xcb, 0x38, 0x86, 0x72, 0x2f, + 0xd9, 0xb0, 0x77, 0x0d, 0x38, 0x6c, 0x35, 0xed, 0xbd, 0x43, 0xb5, 0x29, 0x6d, 0xd8, 0xfb, 0x07, + 0x9c, 0xdb, 0x9a, 0xf6, 0x2e, 0xa2, 0xda, 0xdd, 0xb6, 0xca, 0x38, 0x89, 0x22, 0x02, 0xee, 0x96, + 0xf1, 0x13, 0xe5, 0x4e, 0xb9, 0x61, 0xef, 0x29, 0x70, 0xa0, 0x6c, 0xda, 0x3b, 0x8b, 0x6a, 0xcb, + 0xdd, 0x2a, 0xe3, 0x2e, 0x8a, 0x6c, 0xba, 0x5b, 0xc6, 0x63, 0x94, 0xdb, 0xf7, 0x87, 0xb6, 0x3e, + 0x03, 0x26, 0xdd, 0xc7, 0xb6, 0x6e, 0xa3, 0x08, 0x01, 0xad, 0x32, 0x8e, 0xa3, 0x48, 0xcc, 0xbb, + 0x65, 0x7c, 0x47, 0x19, 0x28, 0x1a, 0xf6, 0xde, 0x03, 0xe7, 0xef, 0xa6, 0xbd, 0x03, 0xa9, 0x92, + 0xc9, 0x9f, 0xeb, 0x68, 0x69, 0xaf, 0xc7, 0x26, 0x93, 0x1f, 0xc1, 0x33, 0xb1, 0xe4, 0x08, 0x6f, + 0xad, 0x93, 0xa7, 0x81, 0xdc, 0x82, 0xf5, 0x27, 0x62, 0xf5, 0xa3, 0x61, 0x3c, 0x3e, 0x85, 0xc6, + 0x63, 0x0d, 0x76, 0x6e, 0x40, 0x2c, 0xe8, 0x35, 0x10, 0x92, 0x87, 0x92, 0xe7, 0xd1, 0xcf, 0x81, + 0x39, 0x1b, 0xb1, 0xa2, 0x37, 0xb5, 0x14, 0xd3, 0x62, 0xc2, 0x10, 0x7a, 0x16, 0x93, 0x0f, 0x25, + 0x88, 0x2b, 0xad, 0x81, 0x78, 0x1c, 0x8e, 0x34, 0xf0, 0x6e, 0x2b, 0x9c, 0xe9, 0xbe, 0x9e, 0x1b, + 0x2e, 0x25, 0xcc, 0x44, 0x7f, 0xda, 0x87, 0xfd, 0xe9, 0x0d, 0x18, 0x90, 0xad, 0x64, 0x19, 0x0a, + 0x36, 0xb5, 0x07, 0xdb, 0xd4, 0x1b, 0x5a, 0x96, 0xb8, 0x92, 0x90, 0x14, 0xcc, 0xaa, 0x0d, 0x9a, + 0xd5, 0x3d, 0x1d, 0xc5, 0x1c, 0x0c, 0xcc, 0x3c, 0x7b, 0xb0, 0x67, 0xe9, 0x09, 0xe2, 0x4a, 0x81, + 0x20, 0xf9, 0xa3, 0xde, 0x06, 0x9d, 0x4b, 0x4b, 0x30, 0x07, 0x03, 0xa3, 0x50, 0x5b, 0x61, 0x60, + 0xfa, 0x0b, 0xdd, 0x65, 0x28, 0x8a, 0x36, 0xb6, 0x0f, 0xdb, 0x98, 0xf6, 0x42, 0x77, 0x25, 0x96, + 0x82, 0x9b, 0xed, 0xc1, 0x6e, 0x66, 0xec, 0xa3, 0xef, 0xc9, 0x7d, 0xf4, 0x3d, 0xbe, 0x8f, 0x99, + 0xa7, 0x99, 0xfa, 0x48, 0xc1, 0xc0, 0xe0, 0xd4, 0x56, 0x58, 0x9b, 0xb9, 0x8f, 0x29, 0x45, 0xd1, + 0xe0, 0xf6, 0x61, 0x83, 0x33, 0xf6, 0x91, 0x67, 0x29, 0xf8, 0x5c, 0x0b, 0xf4, 0xb9, 0x7b, 0x5a, + 0x92, 0x49, 0x21, 0xa1, 0xc8, 0xbb, 0xdd, 0x1e, 0xe4, 0x76, 0x77, 0x75, 0xf4, 0x32, 0x24, 0x28, + 0x66, 0xb5, 0x15, 0xa6, 0xa7, 0xef, 0x20, 0x29, 0x15, 0x3a, 0x48, 0xcd, 0x6a, 0x1f, 0xb6, 0x3e, + 0x6d, 0x07, 0x19, 0x3c, 0x38, 0x7d, 0xed, 0xc1, 0x0e, 0xa8, 0x57, 0x22, 0xae, 0x14, 0x94, 0x48, + 0x7c, 0xb0, 0x0d, 0xfa, 0xa0, 0x56, 0x89, 0x39, 0x18, 0x14, 0xca, 0x56, 0x7f, 0x8e, 0x5e, 0x85, + 0xed, 0xcc, 0x59, 0x46, 0xd5, 0x5f, 0x84, 0xa7, 0xf8, 0xe1, 0xd0, 0x6c, 0x27, 0xf9, 0xd1, 0xf9, + 0x36, 0x9a, 0xfd, 0x65, 0xe2, 0xad, 0x05, 0xfe, 0x7b, 0x84, 0x14, 0x3e, 0xb8, 0xf2, 0xdd, 0xca, + 0xea, 0x0f, 0xd1, 0xf5, 0x0b, 0x42, 0xfe, 0x29, 0xba, 0x05, 0xfa, 0x1c, 0x70, 0x80, 0x0d, 0xfe, + 0x00, 0x9a, 0x29, 0x21, 0x83, 0xff, 0x1c, 0x2d, 0x5d, 0x08, 0xee, 0xcf, 0xd0, 0x4d, 0xc0, 0x03, + 0x01, 0x74, 0x8f, 0x47, 0xd7, 0x0f, 0x05, 0xb9, 0xc6, 0x38, 0xb2, 0x27, 0x9e, 0x23, 0xfe, 0xc7, + 0xc8, 0x91, 0xed, 0x11, 0xc0, 0x7f, 0x87, 0xc7, 0xd7, 0x4e, 0x11, 0x19, 0xf8, 0x9f, 0xa0, 0x15, + 0xc9, 0x2f, 0xcf, 0x0f, 0x9d, 0x21, 0x9f, 0xfb, 0x48, 0x19, 0x78, 0x66, 0xd8, 0x07, 0x92, 0xbf, + 0x08, 0x74, 0x46, 0x3a, 0x5d, 0x2d, 0xbe, 0xf1, 0xd2, 0x76, 0xe1, 0x03, 0xe4, 0xd2, 0xb9, 0x18, + 0x7c, 0xbe, 0xfb, 0xd4, 0x7d, 0x4a, 0xf6, 0x27, 0x1d, 0x28, 0xaa, 0xba, 0x7f, 0xee, 0xe8, 0x42, + 0xf7, 0xd5, 0xf8, 0x85, 0xba, 0x03, 0x1c, 0x80, 0xef, 0xfe, 0xf9, 0xe3, 0xff, 0x18, 0xad, 0x48, + 0x3e, 0x5d, 0xe6, 0xcf, 0x71, 0x3e, 0x40, 0x65, 0xc0, 0x3f, 0x42, 0xcb, 0xa2, 0x73, 0x9f, 0x1b, + 0x36, 0xd3, 0x79, 0xc6, 0x73, 0xcb, 0x74, 0x86, 0x9d, 0xba, 0x82, 0x9d, 0xbf, 0x18, 0x7c, 0x46, + 0xf7, 0xb9, 0x23, 0x97, 0x51, 0x26, 0xfb, 0x5f, 0x7f, 0x90, 0xee, 0x2f, 0x00, 0x7d, 0xed, 0x3f, + 0x75, 0xb4, 0xb0, 0xd7, 0xcb, 0x67, 0xb6, 0x1f, 0xab, 0x13, 0xf3, 0xb7, 0xf2, 0xbd, 0x48, 0x5a, + 0xae, 0xc8, 0xcb, 0xea, 0x7f, 0x2a, 0x69, 0xca, 0xa9, 0xf9, 0x9b, 0x00, 0xac, 0x00, 0x07, 0x3e, + 0x74, 0xff, 0x48, 0x99, 0x9b, 0xef, 0x6b, 0x88, 0x0a, 0x69, 0x57, 0xf1, 0xef, 0x2a, 0x8f, 0xa5, + 0xec, 0x7c, 0x07, 0xc0, 0xe4, 0xb1, 0xa0, 0xe7, 0xfa, 0x07, 0x8a, 0xf4, 0x7c, 0x4f, 0xc7, 0x90, + 0xcd, 0xba, 0xe0, 0x84, 0xb7, 0x0b, 0x27, 0xe8, 0xbb, 0x10, 0xa8, 0x9c, 0x9f, 0x95, 0xa3, 0xde, + 0x67, 0x70, 0x86, 0xbe, 0xab, 0xe1, 0xca, 0x86, 0x5e, 0x68, 0xe8, 0xdb, 0x01, 0x73, 0xf4, 0xeb, + 0x6a, 0xa2, 0x0c, 0xa0, 0x6a, 0xfa, 0xfb, 0x0c, 0x4e, 0xd2, 0x3a, 0x9a, 0x6c, 0xa8, 0x84, 0xe6, + 0xc0, 0x1d, 0x30, 0x4d, 0x6b, 0x68, 0x32, 0x80, 0xaa, 0x81, 0xf0, 0x81, 0x22, 0x4f, 0xeb, 0x2e, + 0x7d, 0x57, 0x22, 0x2a, 0x66, 0xea, 0x2e, 0x9c, 0xa9, 0x35, 0x97, 0xbe, 0x0b, 0x72, 0x15, 0x52, + 0xf5, 0x33, 0x38, 0x55, 0x1b, 0x7a, 0x9a, 0x05, 0x4c, 0x68, 0x5a, 0xdc, 0x01, 0x93, 0xb5, 0xbe, + 0xa7, 0x29, 0xa0, 0x6a, 0x6c, 0x7c, 0xa0, 0xc8, 0xd6, 0xa6, 0x9e, 0xf2, 0x44, 0xc5, 0x7c, 0xdd, + 0x85, 0xf3, 0xb5, 0xa1, 0xa7, 0x32, 0x57, 0x21, 0x61, 0x3f, 0x01, 0x13, 0xf6, 0xeb, 0x1a, 0xaa, + 0x4c, 0x2a, 0x06, 0x66, 0xca, 0x4f, 0xa1, 0x94, 0xfd, 0x9a, 0x9a, 0x64, 0x8e, 0xa6, 0x18, 0x2e, + 0x1f, 0x28, 0x72, 0xb6, 0xae, 0x9b, 0x5c, 0x2a, 0x06, 0xc7, 0xcc, 0x5d, 0x38, 0x6b, 0x6b, 0xba, + 0xc9, 0x62, 0x2a, 0xe7, 0xcd, 0xcf, 0xe0, 0xb4, 0xad, 0x53, 0x28, 0x1b, 0x8f, 0xa1, 0xc9, 0x73, + 0x07, 0x4c, 0xdc, 0x1a, 0x85, 0x32, 0x80, 0x8a, 0x11, 0xf4, 0x65, 0xe6, 0xbe, 0xcc, 0xdc, 0x97, + 0x99, 0xfb, 0x32, 0x73, 0x5f, 0x66, 0xee, 0xcb, 0xcc, 0x7d, 0x99, 0xb9, 0x2f, 0x33, 0x37, 0x9c, + 0xb9, 0xff, 0x32, 0x8b, 0x6e, 0x3c, 0x1d, 0x86, 0xd1, 0x0b, 0xe6, 0x49, 0xf5, 0x03, 0x36, 0x18, + 0x1b, 0xdf, 0xda, 0xd8, 0xe1, 0x9e, 0x20, 0x7f, 0x87, 0x49, 0xab, 0x26, 0xe3, 0xdc, 0x61, 0x1f, + 0xee, 0xfe, 0x00, 0xcd, 0x8f, 0xc3, 0x51, 0xf1, 0x17, 0x32, 0x92, 0xc3, 0x66, 0x0b, 0x9c, 0xef, + 0xa1, 0xb9, 0x71, 0x38, 0x2a, 0xfa, 0x0a, 0x46, 0x72, 0xe0, 0xb4, 0x9c, 0x2e, 0x2d, 0xfa, 0xd2, + 0x05, 0x5d, 0x4a, 0xa2, 0x0a, 0xe1, 0x5c, 0xfc, 0x35, 0x0b, 0xca, 0x99, 0x06, 0x9d, 0xec, 0xc0, + 0x85, 0x5e, 0xac, 0xc8, 0x0f, 0xec, 0x7b, 0xcc, 0x81, 0x8b, 0xbd, 0x4a, 0xc1, 0x1c, 0xd8, 0xf7, + 0x9c, 0x2d, 0x74, 0x6d, 0x1c, 0x8e, 0x8a, 0xbd, 0x3c, 0xb1, 0x33, 0xd3, 0x49, 0x8b, 0xe9, 0x51, + 0x8b, 0xbf, 0x2e, 0x41, 0x8f, 0x4a, 0x77, 0xcd, 0xe4, 0x74, 0x8b, 0xbe, 0x20, 0x41, 0x4f, 0x17, + 0x7f, 0x10, 0xac, 0x60, 0x8d, 0x3e, 0xa5, 0x1a, 0x4d, 0xb4, 0xb6, 0xf6, 0xbf, 0x59, 0xb4, 0x84, + 0x75, 0x9b, 0x4d, 0x8b, 0xde, 0xb7, 0x52, 0x2d, 0x19, 0x0b, 0xf1, 0xda, 0x7d, 0xd7, 0x42, 0xbb, + 0x64, 0x5c, 0xc3, 0x29, 0x38, 0xb0, 0x54, 0x30, 0x49, 0x02, 0xbc, 0x8e, 0xb7, 0xad, 0x74, 0x9c, + 0x21, 0xe4, 0x6a, 0xde, 0xb6, 0x52, 0x33, 0x07, 0x40, 0x54, 0x19, 0x58, 0x6a, 0x9a, 0x3b, 0x0b, + 0xaa, 0xec, 0x6d, 0x2b, 0x65, 0x8b, 0x24, 0xf0, 0x7b, 0x72, 0x76, 0xfa, 0x96, 0x48, 0xe0, 0x7b, + 0xa4, 0xb8, 0xca, 0xb3, 0xf5, 0x99, 0xd6, 0x03, 0x4b, 0xad, 0x73, 0x0c, 0xa8, 0xe2, 0xb7, 0xad, + 0x14, 0xcf, 0xb5, 0x81, 0xe8, 0xfe, 0x06, 0xd6, 0xf8, 0x53, 0xac, 0xf1, 0x44, 0xa5, 0xc1, 0xfd, + 0x2f, 0xbe, 0xac, 0x57, 0x5e, 0x7e, 0x59, 0xaf, 0xfc, 0xe9, 0xac, 0x5e, 0xf9, 0xeb, 0x59, 0xbd, + 0xf2, 0xb7, 0xb3, 0x7a, 0xe5, 0xf3, 0xb3, 0xfa, 0xcc, 0xdf, 0xcf, 0xea, 0x95, 0x2f, 0xce, 0xea, + 0x95, 0x97, 0x67, 0xf5, 0x99, 0x5f, 0xfd, 0xab, 0x3e, 0xd3, 0xbf, 0x8a, 0x8f, 0xe0, 0x7f, 0x15, + 0x00, 0x00, 0xff, 0xff, 0xc0, 0xbf, 0x2e, 0x8e, 0x7b, 0x40, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/unmarshaler/types.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/unmarshaler/types.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/combos/unmarshaler/types.proto 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/combos/unmarshaler/types.proto 2018-11-22 20:53:45.000000000 +0000 @@ -73,15 +73,53 @@ option (gogoproto.compare) = true; google.protobuf.Timestamp nullableTimestamp = 1; google.protobuf.Duration nullableDuration = 2; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3; + google.protobuf.FloatValue nullableFloat = 4; + google.protobuf.Int64Value nullableInt64 = 5; + google.protobuf.UInt64Value nullableUInt64 = 6; + google.protobuf.Int32Value nullableInt32 = 7; + google.protobuf.UInt32Value nullableUInt32 = 8; + google.protobuf.BoolValue nullableBool = 9; + google.protobuf.StringValue nullableString = 10; + google.protobuf.BytesValue nullableBytes = 11; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message StdTypes { google.protobuf.Timestamp nullableTimestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration nullableDuration = 2 [(gogoproto.stdduration) = true]; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3 [(gogoproto.wktpointer) = true];; + google.protobuf.FloatValue nullableFloat = 4 [(gogoproto.wktpointer) = true];; + google.protobuf.Int64Value nullableInt64 = 5 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt64Value nullableUInt64 = 6 [(gogoproto.wktpointer) = true];; + google.protobuf.Int32Value nullableInt32 = 7 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt32Value nullableUInt32 = 8 [(gogoproto.wktpointer) = true];; + google.protobuf.BoolValue nullableBool = 9 [(gogoproto.wktpointer) = true];; + google.protobuf.StringValue nullableString = 10 [(gogoproto.wktpointer) = true];; + google.protobuf.BytesValue nullableBytes = 11 [(gogoproto.wktpointer) = true];; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message RepProtoTypes { @@ -90,6 +128,33 @@ repeated google.protobuf.Duration nullableDurations = 2; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message RepStdTypes { @@ -97,6 +162,33 @@ repeated google.protobuf.Duration nullableDurations = 2 [(gogoproto.stdduration) = true]; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message MapProtoTypes { @@ -105,6 +197,33 @@ map nullableDuration = 3; map duration = 4 [(gogoproto.nullable) = false]; + + map nullableDouble = 5; + map nonnullDouble = 6 [(gogoproto.nullable) = false]; + + map nullableFloat = 7; + map nonnullFloat = 8 [(gogoproto.nullable) = false]; + + map nullableInt64 = 9; + map nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + map nullableUInt64 = 11; + map nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + map nullableInt32 = 13; + map nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + map nullableUInt32 = 15; + map nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + map nullableBool = 17; + map nonnullBool = 18 [(gogoproto.nullable) = false]; + + map nullableString = 19; + map nonnullString = 20 [(gogoproto.nullable) = false]; + + map nullableBytes = 21; + map nonnullBytes = 22 [(gogoproto.nullable) = false]; } message MapStdTypes { @@ -113,12 +232,48 @@ map nullableDuration = 3 [(gogoproto.stdduration) = true]; map duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + map nullableDouble = 5 [(gogoproto.wktpointer) = true]; + map nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableFloat = 7 [(gogoproto.wktpointer) = true]; + map nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + map nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + map nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + map nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + map nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBool = 17 [(gogoproto.wktpointer) = true]; + map nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableString = 19 [(gogoproto.wktpointer) = true]; + map nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBytes = 21 [(gogoproto.wktpointer) = true]; + map nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message OneofProtoTypes { oneof OneOfProtoTimes { google.protobuf.Timestamp timestamp = 1; google.protobuf.Duration duration = 2; + google.protobuf.DoubleValue repDouble = 3; + google.protobuf.FloatValue repFloat = 4; + google.protobuf.Int64Value repInt64 = 5; + google.protobuf.UInt64Value repUInt64 = 6; + google.protobuf.Int32Value repInt32 = 7; + google.protobuf.UInt32Value repUInt32 = 8; + google.protobuf.BoolValue repBool = 9; + google.protobuf.StringValue repString = 10; + google.protobuf.BytesValue repBytes = 11; } } @@ -126,6 +281,15 @@ oneof OneOfStdTimes { google.protobuf.Timestamp timestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration duration = 2 [(gogoproto.stdduration) = true]; + google.protobuf.DoubleValue repDouble = 3 [(gogoproto.wktpointer) = true]; + google.protobuf.FloatValue repFloat = 4 [(gogoproto.wktpointer) = true]; + google.protobuf.Int64Value repInt64 = 5 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt64Value repUInt64 = 6 [(gogoproto.wktpointer) = true]; + google.protobuf.Int32Value repInt32 = 7 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt32Value repUInt32 = 8 [(gogoproto.wktpointer) = true]; + google.protobuf.BoolValue repBool = 9 [(gogoproto.wktpointer) = true]; + google.protobuf.StringValue repString = 10 [(gogoproto.wktpointer) = true]; + google.protobuf.BytesValue repBytes = 11 [(gogoproto.wktpointer) = true]; } } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/types.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/types.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/types/types.proto 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/types/types.proto 2018-11-22 20:53:45.000000000 +0000 @@ -73,15 +73,53 @@ option (gogoproto.compare) = true; google.protobuf.Timestamp nullableTimestamp = 1; google.protobuf.Duration nullableDuration = 2; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3; + google.protobuf.FloatValue nullableFloat = 4; + google.protobuf.Int64Value nullableInt64 = 5; + google.protobuf.UInt64Value nullableUInt64 = 6; + google.protobuf.Int32Value nullableInt32 = 7; + google.protobuf.UInt32Value nullableUInt32 = 8; + google.protobuf.BoolValue nullableBool = 9; + google.protobuf.StringValue nullableString = 10; + google.protobuf.BytesValue nullableBytes = 11; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message StdTypes { google.protobuf.Timestamp nullableTimestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration nullableDuration = 2 [(gogoproto.stdduration) = true]; - google.protobuf.Timestamp timestamp = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - google.protobuf.Duration duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nullableDouble = 3 [(gogoproto.wktpointer) = true];; + google.protobuf.FloatValue nullableFloat = 4 [(gogoproto.wktpointer) = true];; + google.protobuf.Int64Value nullableInt64 = 5 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt64Value nullableUInt64 = 6 [(gogoproto.wktpointer) = true];; + google.protobuf.Int32Value nullableInt32 = 7 [(gogoproto.wktpointer) = true];; + google.protobuf.UInt32Value nullableUInt32 = 8 [(gogoproto.wktpointer) = true];; + google.protobuf.BoolValue nullableBool = 9 [(gogoproto.wktpointer) = true];; + google.protobuf.StringValue nullableString = 10 [(gogoproto.wktpointer) = true];; + google.protobuf.BytesValue nullableBytes = 11 [(gogoproto.wktpointer) = true];; + + google.protobuf.Timestamp timestamp = 12 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration duration = 13 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.DoubleValue nonnullDouble = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.FloatValue nonnullFloat = 15 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int64Value nonnullInt64 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt64Value nonnullUInt64 = 17 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.Int32Value nonnullInt32 = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.UInt32Value nonnullUInt32 = 19 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BoolValue nonnullBool = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.StringValue nonnullString = 21 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message RepProtoTypes { @@ -90,6 +128,33 @@ repeated google.protobuf.Duration nullableDurations = 2; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.nullable) = false]; } message RepStdTypes { @@ -97,6 +162,33 @@ repeated google.protobuf.Duration nullableDurations = 2 [(gogoproto.stdduration) = true]; repeated google.protobuf.Timestamp timestamps = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; repeated google.protobuf.Duration durations = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.DoubleValue nullableDouble = 5 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.DoubleValue nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.FloatValue nullableFloat = 7 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.FloatValue nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int64Value nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int64Value nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt64Value nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt64Value nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.Int32Value nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.Int32Value nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.UInt32Value nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.UInt32Value nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BoolValue nullableBool = 17 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BoolValue nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.StringValue nullableString = 19 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.StringValue nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + repeated google.protobuf.BytesValue nullableBytes = 21 [(gogoproto.wktpointer) = true]; + repeated google.protobuf.BytesValue nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message MapProtoTypes { @@ -105,6 +197,33 @@ map nullableDuration = 3; map duration = 4 [(gogoproto.nullable) = false]; + + map nullableDouble = 5; + map nonnullDouble = 6 [(gogoproto.nullable) = false]; + + map nullableFloat = 7; + map nonnullFloat = 8 [(gogoproto.nullable) = false]; + + map nullableInt64 = 9; + map nonnullInt64 = 10 [(gogoproto.nullable) = false]; + + map nullableUInt64 = 11; + map nonnullUInt64 = 12 [(gogoproto.nullable) = false]; + + map nullableInt32 = 13; + map nonnullInt32 = 14 [(gogoproto.nullable) = false]; + + map nullableUInt32 = 15; + map nonnullUInt32 = 16 [(gogoproto.nullable) = false]; + + map nullableBool = 17; + map nonnullBool = 18 [(gogoproto.nullable) = false]; + + map nullableString = 19; + map nonnullString = 20 [(gogoproto.nullable) = false]; + + map nullableBytes = 21; + map nonnullBytes = 22 [(gogoproto.nullable) = false]; } message MapStdTypes { @@ -113,12 +232,48 @@ map nullableDuration = 3 [(gogoproto.stdduration) = true]; map duration = 4 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + map nullableDouble = 5 [(gogoproto.wktpointer) = true]; + map nonnullDouble = 6 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableFloat = 7 [(gogoproto.wktpointer) = true]; + map nonnullFloat = 8 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt64 = 9 [(gogoproto.wktpointer) = true]; + map nonnullInt64 = 10 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt64 = 11 [(gogoproto.wktpointer) = true]; + map nonnullUInt64 = 12 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableInt32 = 13 [(gogoproto.wktpointer) = true]; + map nonnullInt32 = 14 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableUInt32 = 15 [(gogoproto.wktpointer) = true]; + map nonnullUInt32 = 16 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBool = 17 [(gogoproto.wktpointer) = true]; + map nonnullBool = 18 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableString = 19 [(gogoproto.wktpointer) = true]; + map nonnullString = 20 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; + + map nullableBytes = 21 [(gogoproto.wktpointer) = true]; + map nonnullBytes = 22 [(gogoproto.wktpointer) = true, (gogoproto.nullable) = false]; } message OneofProtoTypes { oneof OneOfProtoTimes { google.protobuf.Timestamp timestamp = 1; google.protobuf.Duration duration = 2; + google.protobuf.DoubleValue repDouble = 3; + google.protobuf.FloatValue repFloat = 4; + google.protobuf.Int64Value repInt64 = 5; + google.protobuf.UInt64Value repUInt64 = 6; + google.protobuf.Int32Value repInt32 = 7; + google.protobuf.UInt32Value repUInt32 = 8; + google.protobuf.BoolValue repBool = 9; + google.protobuf.StringValue repString = 10; + google.protobuf.BytesValue repBytes = 11; } } @@ -126,6 +281,15 @@ oneof OneOfStdTimes { google.protobuf.Timestamp timestamp = 1 [(gogoproto.stdtime) = true]; google.protobuf.Duration duration = 2 [(gogoproto.stdduration) = true]; + google.protobuf.DoubleValue repDouble = 3 [(gogoproto.wktpointer) = true]; + google.protobuf.FloatValue repFloat = 4 [(gogoproto.wktpointer) = true]; + google.protobuf.Int64Value repInt64 = 5 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt64Value repUInt64 = 6 [(gogoproto.wktpointer) = true]; + google.protobuf.Int32Value repInt32 = 7 [(gogoproto.wktpointer) = true]; + google.protobuf.UInt32Value repUInt32 = 8 [(gogoproto.wktpointer) = true]; + google.protobuf.BoolValue repBool = 9 [(gogoproto.wktpointer) = true]; + google.protobuf.StringValue repString = 10 [(gogoproto.wktpointer) = true]; + google.protobuf.BytesValue repBytes = 11 [(gogoproto.wktpointer) = true]; } } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/unrecognized/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/unrecognized/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/unrecognized/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/unrecognized/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -27,4 +27,4 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. regenerate: - (protoc --proto_path=../../../../../:../../protobuf/:. --gogo_out=. unrecognized.proto) + (protoc --proto_path=../../protobuf/:../../../../../:. --gogo_out=. unrecognized.proto) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/unrecognized/unrecognized.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/unrecognized/unrecognized.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/unrecognized/unrecognized.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/unrecognized/unrecognized.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -506,258 +506,263 @@ func UnrecognizedDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 4003 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0xe3, 0xd6, - 0x75, 0x16, 0xf8, 0x23, 0x91, 0x87, 0x14, 0x05, 0x41, 0xb2, 0xcc, 0x95, 0x63, 0x49, 0x4b, 0xdb, - 0xb1, 0x6c, 0x37, 0xda, 0x54, 0xde, 0xd5, 0x7a, 0xb9, 0x4d, 0x1c, 0x8a, 0xa4, 0x64, 0x6d, 0x25, - 0x51, 0x81, 0xc4, 0xf8, 0x27, 0xd3, 0xc1, 0x40, 0xe0, 0x25, 0x85, 0x5d, 0x10, 0x40, 0x00, 0x70, - 0xd7, 0xda, 0xe9, 0x74, 0xb6, 0xe3, 0xfe, 0x65, 0x3a, 0x6d, 0xd3, 0xa6, 0x33, 0x4d, 0x5c, 0xc7, - 0xcd, 0x76, 0x26, 0x75, 0x9a, 0xfe, 0x25, 0x4d, 0x9b, 0x26, 0x7d, 0xea, 0x4b, 0x5a, 0x3f, 0x75, - 0x9c, 0xb7, 0x3e, 0xf4, 0xc1, 0xbb, 0xf5, 0x4c, 0xff, 0xdc, 0x26, 0x6d, 0xfd, 0x90, 0x99, 0x7d, - 0xe9, 0xdc, 0x3f, 0x10, 0x20, 0xa9, 0x05, 0xe4, 0x19, 0x3b, 0x4f, 0x2b, 0x9c, 0x7b, 0xbe, 0x0f, - 0xe7, 0x9e, 0x7b, 0xee, 0x39, 0xe7, 0x5e, 0x70, 0xe1, 0x87, 0x97, 0x60, 0xa9, 0x63, 0x59, 0x1d, - 0x03, 0x9d, 0xb3, 0x1d, 0xcb, 0xb3, 0x0e, 0x7b, 0xed, 0x73, 0x2d, 0xe4, 0x6a, 0x8e, 0x6e, 0x7b, - 0x96, 0xb3, 0x42, 0x64, 0xd2, 0x14, 0xd5, 0x58, 0xe1, 0x1a, 0xa5, 0x1d, 0x98, 0xde, 0xd0, 0x0d, - 0x54, 0xf3, 0x15, 0xf7, 0x91, 0x27, 0x3d, 0x03, 0xa9, 0xb6, 0x6e, 0xa0, 0xa2, 0xb0, 0x94, 0x5c, - 0xce, 0xad, 0x3e, 0xba, 0x32, 0x00, 0x5a, 0x09, 0x23, 0xf6, 0xb0, 0x58, 0x26, 0x88, 0xd2, 0x3b, - 0x29, 0x98, 0x19, 0x31, 0x2a, 0x49, 0x90, 0x32, 0xd5, 0x2e, 0x66, 0x14, 0x96, 0xb3, 0x32, 0xf9, - 0x5b, 0x2a, 0xc2, 0x84, 0xad, 0x6a, 0xd7, 0xd4, 0x0e, 0x2a, 0x26, 0x88, 0x98, 0x3f, 0x4a, 0x0b, - 0x00, 0x2d, 0x64, 0x23, 0xb3, 0x85, 0x4c, 0xed, 0xb8, 0x98, 0x5c, 0x4a, 0x2e, 0x67, 0xe5, 0x80, - 0x44, 0x7a, 0x0a, 0xa6, 0xed, 0xde, 0xa1, 0xa1, 0x6b, 0x4a, 0x40, 0x0d, 0x96, 0x92, 0xcb, 0x69, - 0x59, 0xa4, 0x03, 0xb5, 0xbe, 0xf2, 0xe3, 0x30, 0x75, 0x03, 0xa9, 0xd7, 0x82, 0xaa, 0x39, 0xa2, - 0x5a, 0xc0, 0xe2, 0x80, 0x62, 0x15, 0xf2, 0x5d, 0xe4, 0xba, 0x6a, 0x07, 0x29, 0xde, 0xb1, 0x8d, - 0x8a, 0x29, 0x32, 0xfb, 0xa5, 0xa1, 0xd9, 0x0f, 0xce, 0x3c, 0xc7, 0x50, 0x07, 0xc7, 0x36, 0x92, - 0x2a, 0x90, 0x45, 0x66, 0xaf, 0x4b, 0x19, 0xd2, 0x27, 0xf8, 0xaf, 0x6e, 0xf6, 0xba, 0x83, 0x2c, - 0x19, 0x0c, 0x63, 0x14, 0x13, 0x2e, 0x72, 0xae, 0xeb, 0x1a, 0x2a, 0x8e, 0x13, 0x82, 0xc7, 0x87, - 0x08, 0xf6, 0xe9, 0xf8, 0x20, 0x07, 0xc7, 0x49, 0x55, 0xc8, 0xa2, 0x97, 0x3d, 0x64, 0xba, 0xba, - 0x65, 0x16, 0x27, 0x08, 0xc9, 0x63, 0x23, 0x56, 0x11, 0x19, 0xad, 0x41, 0x8a, 0x3e, 0x4e, 0x5a, - 0x83, 0x09, 0xcb, 0xf6, 0x74, 0xcb, 0x74, 0x8b, 0x99, 0x25, 0x61, 0x39, 0xb7, 0xfa, 0x91, 0x91, - 0x81, 0xd0, 0xa0, 0x3a, 0x32, 0x57, 0x96, 0xb6, 0x40, 0x74, 0xad, 0x9e, 0xa3, 0x21, 0x45, 0xb3, - 0x5a, 0x48, 0xd1, 0xcd, 0xb6, 0x55, 0xcc, 0x12, 0x82, 0xc5, 0xe1, 0x89, 0x10, 0xc5, 0xaa, 0xd5, - 0x42, 0x5b, 0x66, 0xdb, 0x92, 0x0b, 0x6e, 0xe8, 0x59, 0x9a, 0x83, 0x71, 0xf7, 0xd8, 0xf4, 0xd4, - 0x97, 0x8b, 0x79, 0x12, 0x21, 0xec, 0xa9, 0xf4, 0xbd, 0x71, 0x98, 0x8a, 0x13, 0x62, 0x97, 0x21, - 0xdd, 0xc6, 0xb3, 0x2c, 0x26, 0x4e, 0xe3, 0x03, 0x8a, 0x09, 0x3b, 0x71, 0xfc, 0x7d, 0x3a, 0xb1, - 0x02, 0x39, 0x13, 0xb9, 0x1e, 0x6a, 0xd1, 0x88, 0x48, 0xc6, 0x8c, 0x29, 0xa0, 0xa0, 0xe1, 0x90, - 0x4a, 0xbd, 0xaf, 0x90, 0x7a, 0x01, 0xa6, 0x7c, 0x93, 0x14, 0x47, 0x35, 0x3b, 0x3c, 0x36, 0xcf, - 0x45, 0x59, 0xb2, 0x52, 0xe7, 0x38, 0x19, 0xc3, 0xe4, 0x02, 0x0a, 0x3d, 0x4b, 0x35, 0x00, 0xcb, - 0x44, 0x56, 0x5b, 0x69, 0x21, 0xcd, 0x28, 0x66, 0x4e, 0xf0, 0x52, 0x03, 0xab, 0x0c, 0x79, 0xc9, - 0xa2, 0x52, 0xcd, 0x90, 0x2e, 0xf5, 0x43, 0x6d, 0xe2, 0x84, 0x48, 0xd9, 0xa1, 0x9b, 0x6c, 0x28, - 0xda, 0x9a, 0x50, 0x70, 0x10, 0x8e, 0x7b, 0xd4, 0x62, 0x33, 0xcb, 0x12, 0x23, 0x56, 0x22, 0x67, - 0x26, 0x33, 0x18, 0x9d, 0xd8, 0xa4, 0x13, 0x7c, 0x94, 0x1e, 0x01, 0x5f, 0xa0, 0x90, 0xb0, 0x02, - 0x92, 0x85, 0xf2, 0x5c, 0xb8, 0xab, 0x76, 0xd1, 0xfc, 0x4d, 0x28, 0x84, 0xdd, 0x23, 0xcd, 0x42, - 0xda, 0xf5, 0x54, 0xc7, 0x23, 0x51, 0x98, 0x96, 0xe9, 0x83, 0x24, 0x42, 0x12, 0x99, 0x2d, 0x92, - 0xe5, 0xd2, 0x32, 0xfe, 0x53, 0xfa, 0x54, 0x7f, 0xc2, 0x49, 0x32, 0xe1, 0x8f, 0x0e, 0xaf, 0x68, - 0x88, 0x79, 0x70, 0xde, 0xf3, 0x17, 0x61, 0x32, 0x34, 0x81, 0xb8, 0xaf, 0x2e, 0xfd, 0x3c, 0x3c, - 0x30, 0x92, 0x5a, 0x7a, 0x01, 0x66, 0x7b, 0xa6, 0x6e, 0x7a, 0xc8, 0xb1, 0x1d, 0x84, 0x23, 0x96, - 0xbe, 0xaa, 0xf8, 0xaf, 0x13, 0x27, 0xc4, 0x5c, 0x33, 0xa8, 0x4d, 0x59, 0xe4, 0x99, 0xde, 0xb0, - 0xf0, 0xc9, 0x6c, 0xe6, 0xdf, 0x26, 0xc4, 0x5b, 0xb7, 0x6e, 0xdd, 0x4a, 0x94, 0xbe, 0x34, 0x0e, - 0xb3, 0xa3, 0xf6, 0xcc, 0xc8, 0xed, 0x3b, 0x07, 0xe3, 0x66, 0xaf, 0x7b, 0x88, 0x1c, 0xe2, 0xa4, - 0xb4, 0xcc, 0x9e, 0xa4, 0x0a, 0xa4, 0x0d, 0xf5, 0x10, 0x19, 0xc5, 0xd4, 0x92, 0xb0, 0x5c, 0x58, - 0x7d, 0x2a, 0xd6, 0xae, 0x5c, 0xd9, 0xc6, 0x10, 0x99, 0x22, 0xa5, 0x4f, 0x42, 0x8a, 0xa5, 0x68, - 0xcc, 0xf0, 0x64, 0x3c, 0x06, 0xbc, 0x97, 0x64, 0x82, 0x93, 0x1e, 0x82, 0x2c, 0xfe, 0x97, 0xc6, - 0xc6, 0x38, 0xb1, 0x39, 0x83, 0x05, 0x38, 0x2e, 0xa4, 0x79, 0xc8, 0x90, 0x6d, 0xd2, 0x42, 0xbc, - 0xb4, 0xf9, 0xcf, 0x38, 0xb0, 0x5a, 0xa8, 0xad, 0xf6, 0x0c, 0x4f, 0xb9, 0xae, 0x1a, 0x3d, 0x44, - 0x02, 0x3e, 0x2b, 0xe7, 0x99, 0xf0, 0x33, 0x58, 0x26, 0x2d, 0x42, 0x8e, 0xee, 0x2a, 0xdd, 0x6c, - 0xa1, 0x97, 0x49, 0xf6, 0x4c, 0xcb, 0x74, 0xa3, 0x6d, 0x61, 0x09, 0x7e, 0xfd, 0x55, 0xd7, 0x32, - 0x79, 0x68, 0x92, 0x57, 0x60, 0x01, 0x79, 0xfd, 0xc5, 0xc1, 0xc4, 0xfd, 0xf0, 0xe8, 0xe9, 0x0d, - 0xc6, 0x54, 0xe9, 0x3b, 0x09, 0x48, 0x91, 0x7c, 0x31, 0x05, 0xb9, 0x83, 0x17, 0xf7, 0xea, 0x4a, - 0xad, 0xd1, 0x5c, 0xdf, 0xae, 0x8b, 0x82, 0x54, 0x00, 0x20, 0x82, 0x8d, 0xed, 0x46, 0xe5, 0x40, - 0x4c, 0xf8, 0xcf, 0x5b, 0xbb, 0x07, 0x6b, 0xe7, 0xc5, 0xa4, 0x0f, 0x68, 0x52, 0x41, 0x2a, 0xa8, - 0xf0, 0xf4, 0xaa, 0x98, 0x96, 0x44, 0xc8, 0x53, 0x82, 0xad, 0x17, 0xea, 0xb5, 0xb5, 0xf3, 0xe2, - 0x78, 0x58, 0xf2, 0xf4, 0xaa, 0x38, 0x21, 0x4d, 0x42, 0x96, 0x48, 0xd6, 0x1b, 0x8d, 0x6d, 0x31, - 0xe3, 0x73, 0xee, 0x1f, 0xc8, 0x5b, 0xbb, 0x9b, 0x62, 0xd6, 0xe7, 0xdc, 0x94, 0x1b, 0xcd, 0x3d, - 0x11, 0x7c, 0x86, 0x9d, 0xfa, 0xfe, 0x7e, 0x65, 0xb3, 0x2e, 0xe6, 0x7c, 0x8d, 0xf5, 0x17, 0x0f, - 0xea, 0xfb, 0x62, 0x3e, 0x64, 0xd6, 0xd3, 0xab, 0xe2, 0xa4, 0xff, 0x8a, 0xfa, 0x6e, 0x73, 0x47, - 0x2c, 0x48, 0xd3, 0x30, 0x49, 0x5f, 0xc1, 0x8d, 0x98, 0x1a, 0x10, 0xad, 0x9d, 0x17, 0xc5, 0xbe, - 0x21, 0x94, 0x65, 0x3a, 0x24, 0x58, 0x3b, 0x2f, 0x4a, 0xa5, 0x2a, 0xa4, 0x49, 0x74, 0x49, 0x12, - 0x14, 0xb6, 0x2b, 0xeb, 0xf5, 0x6d, 0xa5, 0xb1, 0x77, 0xb0, 0xd5, 0xd8, 0xad, 0x6c, 0x8b, 0x42, - 0x5f, 0x26, 0xd7, 0x3f, 0xdd, 0xdc, 0x92, 0xeb, 0x35, 0x31, 0x11, 0x94, 0xed, 0xd5, 0x2b, 0x07, - 0xf5, 0x9a, 0x98, 0x2c, 0x69, 0x30, 0x3b, 0x2a, 0x4f, 0x8e, 0xdc, 0x19, 0x81, 0x25, 0x4e, 0x9c, - 0xb0, 0xc4, 0x84, 0x6b, 0x68, 0x89, 0xff, 0x25, 0x01, 0x33, 0x23, 0x6a, 0xc5, 0xc8, 0x97, 0x3c, - 0x0b, 0x69, 0x1a, 0xa2, 0xb4, 0x7a, 0x3e, 0x31, 0xb2, 0xe8, 0x90, 0x80, 0x1d, 0xaa, 0xa0, 0x04, - 0x17, 0xec, 0x20, 0x92, 0x27, 0x74, 0x10, 0x98, 0x62, 0x28, 0xa7, 0xff, 0xdc, 0x50, 0x4e, 0xa7, - 0x65, 0x6f, 0x2d, 0x4e, 0xd9, 0x23, 0xb2, 0xd3, 0xe5, 0xf6, 0xf4, 0x88, 0xdc, 0x7e, 0x19, 0xa6, - 0x87, 0x88, 0x62, 0xe7, 0xd8, 0x57, 0x04, 0x28, 0x9e, 0xe4, 0x9c, 0x88, 0x4c, 0x97, 0x08, 0x65, - 0xba, 0xcb, 0x83, 0x1e, 0x3c, 0x7b, 0xf2, 0x22, 0x0c, 0xad, 0xf5, 0x1b, 0x02, 0xcc, 0x8d, 0xee, - 0x14, 0x47, 0xda, 0xf0, 0x49, 0x18, 0xef, 0x22, 0xef, 0xc8, 0xe2, 0xdd, 0xd2, 0x47, 0x47, 0xd4, - 0x60, 0x3c, 0x3c, 0xb8, 0xd8, 0x0c, 0x15, 0x2c, 0xe2, 0xc9, 0x93, 0xda, 0x3d, 0x6a, 0xcd, 0x90, - 0xa5, 0x9f, 0x4f, 0xc0, 0x03, 0x23, 0xc9, 0x47, 0x1a, 0xfa, 0x30, 0x80, 0x6e, 0xda, 0x3d, 0x8f, - 0x76, 0x44, 0x34, 0xc1, 0x66, 0x89, 0x84, 0x24, 0x2f, 0x9c, 0x3c, 0x7b, 0x9e, 0x3f, 0x9e, 0x24, - 0xe3, 0x40, 0x45, 0x44, 0xe1, 0x99, 0xbe, 0xa1, 0x29, 0x62, 0xe8, 0xc2, 0x09, 0x33, 0x1d, 0x0a, - 0xcc, 0x8f, 0x83, 0xa8, 0x19, 0x3a, 0x32, 0x3d, 0xc5, 0xf5, 0x1c, 0xa4, 0x76, 0x75, 0xb3, 0x43, - 0x2a, 0x48, 0xa6, 0x9c, 0x6e, 0xab, 0x86, 0x8b, 0xe4, 0x29, 0x3a, 0xbc, 0xcf, 0x47, 0x31, 0x82, - 0x04, 0x90, 0x13, 0x40, 0x8c, 0x87, 0x10, 0x74, 0xd8, 0x47, 0x94, 0xbe, 0x9d, 0x81, 0x5c, 0xa0, - 0xaf, 0x96, 0xce, 0x42, 0xfe, 0xaa, 0x7a, 0x5d, 0x55, 0xf8, 0x59, 0x89, 0x7a, 0x22, 0x87, 0x65, - 0x7b, 0xec, 0xbc, 0xf4, 0x71, 0x98, 0x25, 0x2a, 0x56, 0xcf, 0x43, 0x8e, 0xa2, 0x19, 0xaa, 0xeb, - 0x12, 0xa7, 0x65, 0x88, 0xaa, 0x84, 0xc7, 0x1a, 0x78, 0xa8, 0xca, 0x47, 0xa4, 0x0b, 0x30, 0x43, - 0x10, 0xdd, 0x9e, 0xe1, 0xe9, 0xb6, 0x81, 0x14, 0x7c, 0x7a, 0x73, 0x49, 0x25, 0xf1, 0x2d, 0x9b, - 0xc6, 0x1a, 0x3b, 0x4c, 0x01, 0x5b, 0xe4, 0x4a, 0x35, 0x78, 0x98, 0xc0, 0x3a, 0xc8, 0x44, 0x8e, - 0xea, 0x21, 0x05, 0x7d, 0xae, 0xa7, 0x1a, 0xae, 0xa2, 0x9a, 0x2d, 0xe5, 0x48, 0x75, 0x8f, 0x8a, - 0xb3, 0x98, 0x60, 0x3d, 0x51, 0x14, 0xe4, 0x33, 0x58, 0x71, 0x93, 0xe9, 0xd5, 0x89, 0x5a, 0xc5, - 0x6c, 0x3d, 0xa7, 0xba, 0x47, 0x52, 0x19, 0xe6, 0x08, 0x8b, 0xeb, 0x39, 0xba, 0xd9, 0x51, 0xb4, - 0x23, 0xa4, 0x5d, 0x53, 0x7a, 0x5e, 0xfb, 0x99, 0xe2, 0x43, 0xc1, 0xf7, 0x13, 0x0b, 0xf7, 0x89, - 0x4e, 0x15, 0xab, 0x34, 0xbd, 0xf6, 0x33, 0xd2, 0x3e, 0xe4, 0xf1, 0x62, 0x74, 0xf5, 0x9b, 0x48, - 0x69, 0x5b, 0x0e, 0x29, 0x8d, 0x85, 0x11, 0xa9, 0x29, 0xe0, 0xc1, 0x95, 0x06, 0x03, 0xec, 0x58, - 0x2d, 0x54, 0x4e, 0xef, 0xef, 0xd5, 0xeb, 0x35, 0x39, 0xc7, 0x59, 0x36, 0x2c, 0x07, 0x07, 0x54, - 0xc7, 0xf2, 0x1d, 0x9c, 0xa3, 0x01, 0xd5, 0xb1, 0xb8, 0x7b, 0x2f, 0xc0, 0x8c, 0xa6, 0xd1, 0x39, - 0xeb, 0x9a, 0xc2, 0xce, 0x58, 0x6e, 0x51, 0x0c, 0x39, 0x4b, 0xd3, 0x36, 0xa9, 0x02, 0x8b, 0x71, - 0x57, 0xba, 0x04, 0x0f, 0xf4, 0x9d, 0x15, 0x04, 0x4e, 0x0f, 0xcd, 0x72, 0x10, 0x7a, 0x01, 0x66, - 0xec, 0xe3, 0x61, 0xa0, 0x14, 0x7a, 0xa3, 0x7d, 0x3c, 0x08, 0xbb, 0x08, 0xb3, 0xf6, 0x91, 0x3d, - 0x8c, 0x7b, 0x32, 0x88, 0x93, 0xec, 0x23, 0x7b, 0x10, 0xf8, 0x18, 0x39, 0x70, 0x3b, 0x48, 0x53, - 0x3d, 0xd4, 0x2a, 0x3e, 0x18, 0x54, 0x0f, 0x0c, 0x48, 0xe7, 0x40, 0xd4, 0x34, 0x05, 0x99, 0xea, - 0xa1, 0x81, 0x14, 0xd5, 0x41, 0xa6, 0xea, 0x16, 0x17, 0x83, 0xca, 0x05, 0x4d, 0xab, 0x93, 0xd1, - 0x0a, 0x19, 0x94, 0x9e, 0x84, 0x69, 0xeb, 0xf0, 0xaa, 0x46, 0x43, 0x52, 0xb1, 0x1d, 0xd4, 0xd6, - 0x5f, 0x2e, 0x3e, 0x4a, 0xfc, 0x3b, 0x85, 0x07, 0x48, 0x40, 0xee, 0x11, 0xb1, 0xf4, 0x04, 0x88, - 0x9a, 0x7b, 0xa4, 0x3a, 0x36, 0xc9, 0xc9, 0xae, 0xad, 0x6a, 0xa8, 0xf8, 0x18, 0x55, 0xa5, 0xf2, - 0x5d, 0x2e, 0xc6, 0x5b, 0xc2, 0xbd, 0xa1, 0xb7, 0x3d, 0xce, 0xf8, 0x38, 0xdd, 0x12, 0x44, 0xc6, - 0xd8, 0x96, 0x41, 0xc4, 0xae, 0x08, 0xbd, 0x78, 0x99, 0xa8, 0x15, 0xec, 0x23, 0x3b, 0xf8, 0xde, - 0x47, 0x60, 0x12, 0x6b, 0xf6, 0x5f, 0xfa, 0x04, 0x6d, 0xc8, 0xec, 0xa3, 0xc0, 0x1b, 0x3f, 0xb0, - 0xde, 0xb8, 0x54, 0x86, 0x7c, 0x30, 0x3e, 0xa5, 0x2c, 0xd0, 0x08, 0x15, 0x05, 0xdc, 0xac, 0x54, - 0x1b, 0x35, 0xdc, 0x66, 0xbc, 0x54, 0x17, 0x13, 0xb8, 0xdd, 0xd9, 0xde, 0x3a, 0xa8, 0x2b, 0x72, - 0x73, 0xf7, 0x60, 0x6b, 0xa7, 0x2e, 0x26, 0x83, 0x7d, 0xf5, 0xf7, 0x13, 0x50, 0x08, 0x1f, 0x91, - 0xa4, 0x9f, 0x81, 0x07, 0xf9, 0x7d, 0x86, 0x8b, 0x3c, 0xe5, 0x86, 0xee, 0x90, 0x2d, 0xd3, 0x55, - 0x69, 0xf9, 0xf2, 0x17, 0x6d, 0x96, 0x69, 0xed, 0x23, 0xef, 0x79, 0xdd, 0xc1, 0x1b, 0xa2, 0xab, - 0x7a, 0xd2, 0x36, 0x2c, 0x9a, 0x96, 0xe2, 0x7a, 0xaa, 0xd9, 0x52, 0x9d, 0x96, 0xd2, 0xbf, 0x49, - 0x52, 0x54, 0x4d, 0x43, 0xae, 0x6b, 0xd1, 0x52, 0xe5, 0xb3, 0x7c, 0xc4, 0xb4, 0xf6, 0x99, 0x72, - 0x3f, 0x87, 0x57, 0x98, 0xea, 0x40, 0x80, 0x25, 0x4f, 0x0a, 0xb0, 0x87, 0x20, 0xdb, 0x55, 0x6d, - 0x05, 0x99, 0x9e, 0x73, 0x4c, 0x1a, 0xe3, 0x8c, 0x9c, 0xe9, 0xaa, 0x76, 0x1d, 0x3f, 0x7f, 0x38, - 0xe7, 0x93, 0x7f, 0x4e, 0x42, 0x3e, 0xd8, 0x1c, 0xe3, 0xb3, 0x86, 0x46, 0xea, 0x88, 0x40, 0x32, - 0xcd, 0x23, 0xf7, 0x6d, 0xa5, 0x57, 0xaa, 0xb8, 0xc0, 0x94, 0xc7, 0x69, 0xcb, 0x2a, 0x53, 0x24, - 0x2e, 0xee, 0x38, 0xb7, 0x20, 0xda, 0x22, 0x64, 0x64, 0xf6, 0x24, 0x6d, 0xc2, 0xf8, 0x55, 0x97, - 0x70, 0x8f, 0x13, 0xee, 0x47, 0xef, 0xcf, 0x7d, 0x65, 0x9f, 0x90, 0x67, 0xaf, 0xec, 0x2b, 0xbb, - 0x0d, 0x79, 0xa7, 0xb2, 0x2d, 0x33, 0xb8, 0x74, 0x06, 0x52, 0x86, 0x7a, 0xf3, 0x38, 0x5c, 0x8a, - 0x88, 0x28, 0xae, 0xe3, 0xcf, 0x40, 0xea, 0x06, 0x52, 0xaf, 0x85, 0x0b, 0x00, 0x11, 0x7d, 0x80, - 0xa1, 0x7f, 0x0e, 0xd2, 0xc4, 0x5f, 0x12, 0x00, 0xf3, 0x98, 0x38, 0x26, 0x65, 0x20, 0x55, 0x6d, - 0xc8, 0x38, 0xfc, 0x45, 0xc8, 0x53, 0xa9, 0xb2, 0xb7, 0x55, 0xaf, 0xd6, 0xc5, 0x44, 0xe9, 0x02, - 0x8c, 0x53, 0x27, 0xe0, 0xad, 0xe1, 0xbb, 0x41, 0x1c, 0x63, 0x8f, 0x8c, 0x43, 0xe0, 0xa3, 0xcd, - 0x9d, 0xf5, 0xba, 0x2c, 0x26, 0x82, 0xcb, 0xeb, 0x42, 0x3e, 0xd8, 0x17, 0x7f, 0x38, 0x31, 0xf5, - 0xb7, 0x02, 0xe4, 0x02, 0x7d, 0x2e, 0x6e, 0x50, 0x54, 0xc3, 0xb0, 0x6e, 0x28, 0xaa, 0xa1, 0xab, - 0x2e, 0x0b, 0x0a, 0x20, 0xa2, 0x0a, 0x96, 0xc4, 0x5d, 0xb4, 0x0f, 0xc5, 0xf8, 0xd7, 0x05, 0x10, - 0x07, 0x5b, 0xcc, 0x01, 0x03, 0x85, 0x9f, 0xa8, 0x81, 0xaf, 0x09, 0x50, 0x08, 0xf7, 0x95, 0x03, - 0xe6, 0x9d, 0xfd, 0x89, 0x9a, 0xf7, 0x76, 0x02, 0x26, 0x43, 0xdd, 0x64, 0x5c, 0xeb, 0x3e, 0x07, - 0xd3, 0x7a, 0x0b, 0x75, 0x6d, 0xcb, 0x43, 0xa6, 0x76, 0xac, 0x18, 0xe8, 0x3a, 0x32, 0x8a, 0x25, - 0x92, 0x28, 0xce, 0xdd, 0xbf, 0x5f, 0x5d, 0xd9, 0xea, 0xe3, 0xb6, 0x31, 0xac, 0x3c, 0xb3, 0x55, - 0xab, 0xef, 0xec, 0x35, 0x0e, 0xea, 0xbb, 0xd5, 0x17, 0x95, 0xe6, 0xee, 0xcf, 0xee, 0x36, 0x9e, - 0xdf, 0x95, 0x45, 0x7d, 0x40, 0xed, 0x03, 0xdc, 0xea, 0x7b, 0x20, 0x0e, 0x1a, 0x25, 0x3d, 0x08, - 0xa3, 0xcc, 0x12, 0xc7, 0xa4, 0x19, 0x98, 0xda, 0x6d, 0x28, 0xfb, 0x5b, 0xb5, 0xba, 0x52, 0xdf, - 0xd8, 0xa8, 0x57, 0x0f, 0xf6, 0xe9, 0x0d, 0x84, 0xaf, 0x7d, 0x10, 0xde, 0xd4, 0xaf, 0x26, 0x61, - 0x66, 0x84, 0x25, 0x52, 0x85, 0x9d, 0x1d, 0xe8, 0x71, 0xe6, 0x63, 0x71, 0xac, 0x5f, 0xc1, 0x25, - 0x7f, 0x4f, 0x75, 0x3c, 0x76, 0xd4, 0x78, 0x02, 0xb0, 0x97, 0x4c, 0x4f, 0x6f, 0xeb, 0xc8, 0x61, - 0x17, 0x36, 0xf4, 0x40, 0x31, 0xd5, 0x97, 0xd3, 0x3b, 0x9b, 0x9f, 0x02, 0xc9, 0xb6, 0x5c, 0xdd, - 0xd3, 0xaf, 0x23, 0x45, 0x37, 0xf9, 0xed, 0x0e, 0x3e, 0x60, 0xa4, 0x64, 0x91, 0x8f, 0x6c, 0x99, - 0x9e, 0xaf, 0x6d, 0xa2, 0x8e, 0x3a, 0xa0, 0x8d, 0x13, 0x78, 0x52, 0x16, 0xf9, 0x88, 0xaf, 0x7d, - 0x16, 0xf2, 0x2d, 0xab, 0x87, 0xbb, 0x2e, 0xaa, 0x87, 0xeb, 0x85, 0x20, 0xe7, 0xa8, 0xcc, 0x57, - 0x61, 0xfd, 0x74, 0xff, 0x5a, 0x29, 0x2f, 0xe7, 0xa8, 0x8c, 0xaa, 0x3c, 0x0e, 0x53, 0x6a, 0xa7, - 0xe3, 0x60, 0x72, 0x4e, 0x44, 0x4f, 0x08, 0x05, 0x5f, 0x4c, 0x14, 0xe7, 0xaf, 0x40, 0x86, 0xfb, - 0x01, 0x97, 0x64, 0xec, 0x09, 0xc5, 0xa6, 0xc7, 0xde, 0xc4, 0x72, 0x56, 0xce, 0x98, 0x7c, 0xf0, - 0x2c, 0xe4, 0x75, 0x57, 0xe9, 0xdf, 0x92, 0x27, 0x96, 0x12, 0xcb, 0x19, 0x39, 0xa7, 0xbb, 0xfe, - 0x0d, 0x63, 0xe9, 0x8d, 0x04, 0x14, 0xc2, 0xb7, 0xfc, 0x52, 0x0d, 0x32, 0x86, 0xa5, 0xa9, 0x24, - 0xb4, 0xe8, 0x27, 0xa6, 0xe5, 0x88, 0x0f, 0x03, 0x2b, 0xdb, 0x4c, 0x5f, 0xf6, 0x91, 0xf3, 0xff, - 0x28, 0x40, 0x86, 0x8b, 0xa5, 0x39, 0x48, 0xd9, 0xaa, 0x77, 0x44, 0xe8, 0xd2, 0xeb, 0x09, 0x51, - 0x90, 0xc9, 0x33, 0x96, 0xbb, 0xb6, 0x6a, 0x92, 0x10, 0x60, 0x72, 0xfc, 0x8c, 0xd7, 0xd5, 0x40, - 0x6a, 0x8b, 0x1c, 0x3f, 0xac, 0x6e, 0x17, 0x99, 0x9e, 0xcb, 0xd7, 0x95, 0xc9, 0xab, 0x4c, 0x2c, - 0x3d, 0x05, 0xd3, 0x9e, 0xa3, 0xea, 0x46, 0x48, 0x37, 0x45, 0x74, 0x45, 0x3e, 0xe0, 0x2b, 0x97, - 0xe1, 0x0c, 0xe7, 0x6d, 0x21, 0x4f, 0xd5, 0x8e, 0x50, 0xab, 0x0f, 0x1a, 0x27, 0xd7, 0x0c, 0x0f, - 0x32, 0x85, 0x1a, 0x1b, 0xe7, 0xd8, 0xd2, 0x0f, 0x04, 0x98, 0xe6, 0x07, 0xa6, 0x96, 0xef, 0xac, - 0x1d, 0x00, 0xd5, 0x34, 0x2d, 0x2f, 0xe8, 0xae, 0xe1, 0x50, 0x1e, 0xc2, 0xad, 0x54, 0x7c, 0x90, - 0x1c, 0x20, 0x98, 0xef, 0x02, 0xf4, 0x47, 0x4e, 0x74, 0xdb, 0x22, 0xe4, 0xd8, 0x27, 0x1c, 0xf2, - 0x1d, 0x90, 0x1e, 0xb1, 0x81, 0x8a, 0xf0, 0xc9, 0x4a, 0x9a, 0x85, 0xf4, 0x21, 0xea, 0xe8, 0x26, - 0xbb, 0x98, 0xa5, 0x0f, 0xfc, 0x22, 0x24, 0xe5, 0x5f, 0x84, 0xac, 0x7f, 0x16, 0x66, 0x34, 0xab, - 0x3b, 0x68, 0xee, 0xba, 0x38, 0x70, 0xcc, 0x77, 0x9f, 0x13, 0x5e, 0x82, 0x7e, 0x8b, 0xf9, 0x63, - 0x41, 0xf8, 0xc3, 0x44, 0x72, 0x73, 0x6f, 0xfd, 0x1b, 0x89, 0xf9, 0x4d, 0x0a, 0xdd, 0xe3, 0x33, - 0x95, 0x51, 0xdb, 0x40, 0x1a, 0xb6, 0x1e, 0xbe, 0xb6, 0x0c, 0x1f, 0xeb, 0xe8, 0xde, 0x51, 0xef, - 0x70, 0x45, 0xb3, 0xba, 0xe7, 0x3a, 0x56, 0xc7, 0xea, 0x7f, 0xfa, 0xc4, 0x4f, 0xe4, 0x81, 0xfc, - 0xc5, 0x3e, 0x7f, 0x66, 0x7d, 0xe9, 0x7c, 0xe4, 0xb7, 0xd2, 0xf2, 0x2e, 0xcc, 0x30, 0x65, 0x85, - 0x7c, 0x7f, 0xa1, 0xa7, 0x08, 0xe9, 0xbe, 0x77, 0x58, 0xc5, 0x6f, 0xbd, 0x43, 0xca, 0xb5, 0x3c, - 0xcd, 0xa0, 0x78, 0x8c, 0x1e, 0x34, 0xca, 0x32, 0x3c, 0x10, 0xe2, 0xa3, 0x5b, 0x13, 0x39, 0x11, - 0x8c, 0xdf, 0x67, 0x8c, 0x33, 0x01, 0xc6, 0x7d, 0x06, 0x2d, 0x57, 0x61, 0xf2, 0x34, 0x5c, 0x7f, - 0xcf, 0xb8, 0xf2, 0x28, 0x48, 0xb2, 0x09, 0x53, 0x84, 0x44, 0xeb, 0xb9, 0x9e, 0xd5, 0x25, 0x79, - 0xef, 0xfe, 0x34, 0xff, 0xf0, 0x0e, 0xdd, 0x2b, 0x05, 0x0c, 0xab, 0xfa, 0xa8, 0x72, 0x19, 0xc8, - 0x27, 0xa7, 0x16, 0xd2, 0x8c, 0x08, 0x86, 0x37, 0x99, 0x21, 0xbe, 0x7e, 0xf9, 0x33, 0x30, 0x8b, - 0xff, 0x26, 0x69, 0x29, 0x68, 0x49, 0xf4, 0x85, 0x57, 0xf1, 0x07, 0xaf, 0xd0, 0xed, 0x38, 0xe3, - 0x13, 0x04, 0x6c, 0x0a, 0xac, 0x62, 0x07, 0x79, 0x1e, 0x72, 0x5c, 0x45, 0x35, 0x46, 0x99, 0x17, - 0xb8, 0x31, 0x28, 0x7e, 0xf9, 0xdd, 0xf0, 0x2a, 0x6e, 0x52, 0x64, 0xc5, 0x30, 0xca, 0x4d, 0x78, - 0x70, 0x44, 0x54, 0xc4, 0xe0, 0x7c, 0x95, 0x71, 0xce, 0x0e, 0x45, 0x06, 0xa6, 0xdd, 0x03, 0x2e, - 0xf7, 0xd7, 0x32, 0x06, 0xe7, 0xef, 0x33, 0x4e, 0x89, 0x61, 0xf9, 0x92, 0x62, 0xc6, 0x2b, 0x30, - 0x7d, 0x1d, 0x39, 0x87, 0x96, 0xcb, 0x6e, 0x69, 0x62, 0xd0, 0xbd, 0xc6, 0xe8, 0xa6, 0x18, 0x90, - 0x5c, 0xdb, 0x60, 0xae, 0x4b, 0x90, 0x69, 0xab, 0x1a, 0x8a, 0x41, 0xf1, 0x15, 0x46, 0x31, 0x81, - 0xf5, 0x31, 0xb4, 0x02, 0xf9, 0x8e, 0xc5, 0x2a, 0x53, 0x34, 0xfc, 0x75, 0x06, 0xcf, 0x71, 0x0c, - 0xa3, 0xb0, 0x2d, 0xbb, 0x67, 0xe0, 0xb2, 0x15, 0x4d, 0xf1, 0x07, 0x9c, 0x82, 0x63, 0x18, 0xc5, - 0x29, 0xdc, 0xfa, 0x55, 0x4e, 0xe1, 0x06, 0xfc, 0xf9, 0x2c, 0xe4, 0x2c, 0xd3, 0x38, 0xb6, 0xcc, - 0x38, 0x46, 0xdc, 0x66, 0x0c, 0xc0, 0x20, 0x98, 0xe0, 0x32, 0x64, 0xe3, 0x2e, 0xc4, 0xd7, 0xde, - 0xe5, 0xdb, 0x83, 0xaf, 0xc0, 0x26, 0x4c, 0xf1, 0x04, 0xa5, 0x5b, 0x66, 0x0c, 0x8a, 0x3f, 0x62, - 0x14, 0x85, 0x00, 0x8c, 0x4d, 0xc3, 0x43, 0xae, 0xd7, 0x41, 0x71, 0x48, 0xde, 0xe0, 0xd3, 0x60, - 0x10, 0xe6, 0xca, 0x43, 0x64, 0x6a, 0x47, 0xf1, 0x18, 0xbe, 0xce, 0x5d, 0xc9, 0x31, 0x98, 0xa2, - 0x0a, 0x93, 0x5d, 0xd5, 0x71, 0x8f, 0x54, 0x23, 0xd6, 0x72, 0xfc, 0x31, 0xe3, 0xc8, 0xfb, 0x20, - 0xe6, 0x91, 0x9e, 0x79, 0x1a, 0x9a, 0x6f, 0x70, 0x8f, 0x04, 0x60, 0x6c, 0xeb, 0xb9, 0x1e, 0xb9, - 0xd2, 0x3a, 0x0d, 0xdb, 0x9f, 0xf0, 0xad, 0x47, 0xb1, 0x3b, 0x41, 0xc6, 0xcb, 0x90, 0x75, 0xf5, - 0x9b, 0xb1, 0x68, 0xfe, 0x94, 0xaf, 0x34, 0x01, 0x60, 0xf0, 0x8b, 0x70, 0x66, 0x64, 0x99, 0x88, - 0x41, 0xf6, 0x67, 0x8c, 0x6c, 0x6e, 0x44, 0xa9, 0x60, 0x29, 0xe1, 0xb4, 0x94, 0x7f, 0xce, 0x53, - 0x02, 0x1a, 0xe0, 0xda, 0xc3, 0x67, 0x05, 0x57, 0x6d, 0x9f, 0xce, 0x6b, 0x7f, 0xc1, 0xbd, 0x46, - 0xb1, 0x21, 0xaf, 0x1d, 0xc0, 0x1c, 0x63, 0x3c, 0xdd, 0xba, 0x7e, 0x93, 0x27, 0x56, 0x8a, 0x6e, - 0x86, 0x57, 0xf7, 0xb3, 0x30, 0xef, 0xbb, 0x93, 0x37, 0xa5, 0xae, 0xd2, 0x55, 0xed, 0x18, 0xcc, - 0xdf, 0x62, 0xcc, 0x3c, 0xe3, 0xfb, 0x5d, 0xad, 0xbb, 0xa3, 0xda, 0x98, 0xfc, 0x05, 0x28, 0x72, - 0xf2, 0x9e, 0xe9, 0x20, 0xcd, 0xea, 0x98, 0xfa, 0x4d, 0xd4, 0x8a, 0x41, 0xfd, 0x97, 0x03, 0x4b, - 0xd5, 0x0c, 0xc0, 0x31, 0xf3, 0x16, 0x88, 0x7e, 0xaf, 0xa2, 0xe8, 0x5d, 0xdb, 0x72, 0xbc, 0x08, - 0xc6, 0x6f, 0xf3, 0x95, 0xf2, 0x71, 0x5b, 0x04, 0x56, 0xae, 0x43, 0x81, 0x3c, 0xc6, 0x0d, 0xc9, - 0xbf, 0x62, 0x44, 0x93, 0x7d, 0x14, 0x4b, 0x1c, 0x9a, 0xd5, 0xb5, 0x55, 0x27, 0x4e, 0xfe, 0xfb, - 0x6b, 0x9e, 0x38, 0x18, 0x84, 0x25, 0x0e, 0xef, 0xd8, 0x46, 0xb8, 0xda, 0xc7, 0x60, 0xf8, 0x0e, - 0x4f, 0x1c, 0x1c, 0xc3, 0x28, 0x78, 0xc3, 0x10, 0x83, 0xe2, 0x6f, 0x38, 0x05, 0xc7, 0x60, 0x8a, - 0x4f, 0xf7, 0x0b, 0xad, 0x83, 0x3a, 0xba, 0xeb, 0x39, 0xb4, 0x15, 0xbe, 0x3f, 0xd5, 0x77, 0xdf, - 0x0d, 0x37, 0x61, 0x72, 0x00, 0x8a, 0x33, 0x11, 0xbb, 0x42, 0x25, 0x27, 0xa5, 0x68, 0xc3, 0xbe, - 0xc7, 0x33, 0x51, 0x00, 0x46, 0xf7, 0xe7, 0xd4, 0x40, 0xaf, 0x22, 0x45, 0xfd, 0x10, 0xa6, 0xf8, - 0x8b, 0xef, 0x31, 0xae, 0x70, 0xab, 0x52, 0xde, 0xc6, 0x01, 0x14, 0x6e, 0x28, 0xa2, 0xc9, 0x5e, - 0x79, 0xcf, 0x8f, 0xa1, 0x50, 0x3f, 0x51, 0xde, 0x80, 0xc9, 0x50, 0x33, 0x11, 0x4d, 0xf5, 0x4b, - 0x8c, 0x2a, 0x1f, 0xec, 0x25, 0xca, 0x17, 0x20, 0x85, 0x1b, 0x83, 0x68, 0xf8, 0x2f, 0x33, 0x38, - 0x51, 0x2f, 0x7f, 0x02, 0x32, 0xbc, 0x21, 0x88, 0x86, 0xfe, 0x0a, 0x83, 0xfa, 0x10, 0x0c, 0xe7, - 0xcd, 0x40, 0x34, 0xfc, 0x57, 0x39, 0x9c, 0x43, 0x30, 0x3c, 0xbe, 0x0b, 0xff, 0xee, 0xd7, 0x53, - 0x2c, 0xa1, 0x73, 0xdf, 0x5d, 0x86, 0x09, 0xd6, 0x05, 0x44, 0xa3, 0x3f, 0xcf, 0x5e, 0xce, 0x11, - 0xe5, 0x8b, 0x90, 0x8e, 0xe9, 0xf0, 0xdf, 0x60, 0x50, 0xaa, 0x5f, 0xae, 0x42, 0x2e, 0x50, 0xf9, - 0xa3, 0xe1, 0xbf, 0xc9, 0xe0, 0x41, 0x14, 0x36, 0x9d, 0x55, 0xfe, 0x68, 0x82, 0xdf, 0xe2, 0xa6, - 0x33, 0x04, 0x76, 0x1b, 0x2f, 0xfa, 0xd1, 0xe8, 0x2f, 0x70, 0xaf, 0x73, 0x48, 0xf9, 0x59, 0xc8, - 0xfa, 0x89, 0x3c, 0x1a, 0xff, 0xdb, 0x0c, 0xdf, 0xc7, 0x60, 0x0f, 0x04, 0x0a, 0x49, 0x34, 0xc5, - 0xef, 0x70, 0x0f, 0x04, 0x50, 0x78, 0x1b, 0x0d, 0x36, 0x07, 0xd1, 0x4c, 0x5f, 0xe4, 0xdb, 0x68, - 0xa0, 0x37, 0xc0, 0xab, 0x49, 0xf2, 0x69, 0x34, 0xc5, 0xef, 0xf2, 0xd5, 0x24, 0xfa, 0xd8, 0x8c, - 0xc1, 0x6a, 0x1b, 0xcd, 0xf1, 0x7b, 0xdc, 0x8c, 0x81, 0x62, 0x5b, 0xde, 0x03, 0x69, 0xb8, 0xd2, - 0x46, 0xf3, 0x7d, 0x89, 0xf1, 0x4d, 0x0f, 0x15, 0xda, 0xf2, 0xf3, 0x30, 0x37, 0xba, 0xca, 0x46, - 0xb3, 0x7e, 0xf9, 0xbd, 0x81, 0x73, 0x51, 0xb0, 0xc8, 0x96, 0x0f, 0xfa, 0xe9, 0x3a, 0x58, 0x61, - 0xa3, 0x69, 0x5f, 0x7d, 0x2f, 0x9c, 0xb1, 0x83, 0x05, 0xb6, 0x5c, 0x01, 0xe8, 0x17, 0xb7, 0x68, - 0xae, 0xd7, 0x18, 0x57, 0x00, 0x84, 0xb7, 0x06, 0xab, 0x6d, 0xd1, 0xf8, 0xaf, 0xf0, 0xad, 0xc1, - 0x10, 0x78, 0x6b, 0xf0, 0xb2, 0x16, 0x8d, 0x7e, 0x9d, 0x6f, 0x0d, 0x0e, 0xc1, 0x91, 0x1d, 0xa8, - 0x1c, 0xd1, 0x0c, 0xb7, 0x79, 0x64, 0x07, 0x50, 0xe5, 0xcb, 0x90, 0x31, 0x7b, 0x86, 0x81, 0x03, - 0x54, 0xba, 0xff, 0x0f, 0xc4, 0x8a, 0xff, 0x7e, 0x8f, 0x59, 0xc0, 0x01, 0xe5, 0x0b, 0x90, 0x46, - 0xdd, 0x43, 0xd4, 0x8a, 0x42, 0xfe, 0xc7, 0x3d, 0x9e, 0x94, 0xb0, 0x76, 0xf9, 0x59, 0x00, 0x7a, - 0xb4, 0x27, 0x9f, 0xad, 0x22, 0xb0, 0xff, 0x79, 0x8f, 0xfd, 0x74, 0xa3, 0x0f, 0xe9, 0x13, 0xd0, - 0x1f, 0x82, 0xdc, 0x9f, 0xe0, 0xdd, 0x30, 0x01, 0x99, 0xf5, 0x25, 0x98, 0xb8, 0xea, 0x5a, 0xa6, - 0xa7, 0x76, 0xa2, 0xd0, 0xff, 0xc5, 0xd0, 0x5c, 0x1f, 0x3b, 0xac, 0x6b, 0x39, 0xc8, 0x53, 0x3b, - 0x6e, 0x14, 0xf6, 0xbf, 0x19, 0xd6, 0x07, 0x60, 0xb0, 0xa6, 0xba, 0x5e, 0x9c, 0x79, 0xff, 0x90, - 0x83, 0x39, 0x00, 0x1b, 0x8d, 0xff, 0xbe, 0x86, 0x8e, 0xa3, 0xb0, 0x3f, 0xe2, 0x46, 0x33, 0xfd, - 0xf2, 0x27, 0x20, 0x8b, 0xff, 0xa4, 0xbf, 0xc7, 0x8a, 0x00, 0xff, 0x0f, 0x03, 0xf7, 0x11, 0xf8, - 0xcd, 0xae, 0xd7, 0xf2, 0xf4, 0x68, 0x67, 0xff, 0x2f, 0x5b, 0x69, 0xae, 0x5f, 0xae, 0x40, 0xce, - 0xf5, 0x5a, 0xad, 0x1e, 0xeb, 0xaf, 0x22, 0xe0, 0xff, 0x77, 0xcf, 0x3f, 0x72, 0xfb, 0x98, 0xf5, - 0xfa, 0xe8, 0xdb, 0x43, 0xd8, 0xb4, 0x36, 0x2d, 0x7a, 0x6f, 0xf8, 0x52, 0x29, 0xfa, 0x02, 0x10, - 0xee, 0x4d, 0xe0, 0x7c, 0xd7, 0xdf, 0xfe, 0xec, 0x32, 0x30, 0x1f, 0x94, 0xcd, 0x9f, 0xee, 0x26, - 0xb1, 0xf4, 0x29, 0x10, 0x2a, 0xd2, 0x1c, 0x8c, 0x93, 0x49, 0xfc, 0x34, 0xb9, 0x21, 0x4d, 0xca, - 0xec, 0x49, 0x7a, 0x18, 0x84, 0x75, 0x76, 0x55, 0x3b, 0xb5, 0x12, 0x7a, 0xf3, 0xba, 0x2c, 0xac, - 0x97, 0x53, 0x6f, 0xdd, 0x5e, 0x1c, 0x2b, 0x69, 0x20, 0xac, 0x63, 0xcd, 0x2a, 0xf9, 0x7e, 0x36, - 0xa4, 0x59, 0x95, 0x85, 0x2a, 0x1e, 0xae, 0xb1, 0x1f, 0xf8, 0x0d, 0x0c, 0xd7, 0x64, 0xa1, 0x26, - 0x2d, 0x81, 0xb0, 0x41, 0xbe, 0x19, 0xe4, 0x56, 0xa5, 0xf0, 0x70, 0xc3, 0x68, 0x55, 0x65, 0x61, - 0xa3, 0xf4, 0x10, 0x08, 0xb5, 0x80, 0x99, 0x42, 0xd0, 0xcc, 0xd2, 0x17, 0x05, 0x10, 0xaa, 0xfe, - 0xe8, 0x2a, 0x79, 0x91, 0xc0, 0x46, 0x57, 0x7d, 0xf9, 0xd3, 0xec, 0x62, 0x9c, 0x3d, 0xf9, 0xf2, - 0xf3, 0xe4, 0x9e, 0x97, 0xeb, 0x9f, 0xf7, 0xe5, 0x17, 0xc8, 0xcf, 0xe9, 0xf2, 0x4c, 0x7e, 0xc1, - 0x97, 0xaf, 0x91, 0xaf, 0x16, 0xfc, 0xed, 0x6b, 0xbe, 0xfc, 0x22, 0xf9, 0x0f, 0x0a, 0x09, 0x26, - 0xbf, 0x58, 0xba, 0x04, 0x42, 0x33, 0x64, 0x54, 0xf2, 0x44, 0xa3, 0x26, 0xb9, 0x51, 0xcc, 0xa5, - 0xcf, 0x41, 0xaa, 0x69, 0x5a, 0x3b, 0xa7, 0x46, 0x8b, 0xbf, 0x76, 0x7b, 0x71, 0xec, 0x0b, 0xb7, - 0x17, 0xc7, 0xbe, 0x7a, 0x7b, 0x71, 0x8c, 0x30, 0x6d, 0x40, 0xaa, 0x61, 0xb4, 0x4e, 0x5e, 0xe1, - 0xa5, 0xfe, 0x0a, 0x0f, 0x7b, 0x3e, 0xb0, 0xc8, 0x57, 0x08, 0xcf, 0x3a, 0xd6, 0xe7, 0xeb, 0x3c, - 0x72, 0xa5, 0xaa, 0x31, 0xd6, 0xf2, 0x17, 0x08, 0x57, 0xf5, 0xa4, 0xe5, 0x7c, 0xdf, 0x0b, 0x19, - 0x77, 0x61, 0xd6, 0xc8, 0xfb, 0x9b, 0x03, 0xef, 0xcf, 0x8e, 0x7c, 0x7f, 0xc0, 0xeb, 0xa5, 0x4d, - 0x98, 0xc0, 0xb8, 0xe0, 0xc2, 0xc4, 0x84, 0x96, 0xf3, 0xc1, 0x85, 0x59, 0x3f, 0xff, 0xe6, 0x9d, - 0x85, 0xb1, 0xb7, 0xee, 0x2c, 0x8c, 0xfd, 0xd3, 0x9d, 0x85, 0xb1, 0xb7, 0xef, 0x2c, 0x08, 0x3f, - 0xba, 0xb3, 0x20, 0xfc, 0xf8, 0xce, 0x82, 0x70, 0xeb, 0xee, 0x82, 0xf0, 0xf5, 0xbb, 0x0b, 0xc2, - 0x37, 0xef, 0x2e, 0x08, 0xdf, 0xbd, 0xbb, 0x20, 0xbc, 0x79, 0x77, 0x41, 0x78, 0xeb, 0xee, 0x82, - 0xf0, 0xf6, 0xdd, 0x05, 0xe1, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x3b, 0x5a, 0xd3, 0x18, - 0x35, 0x00, 0x00, + // 4085 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5b, 0x5d, 0x70, 0x1b, 0xd7, + 0x75, 0xe6, 0xe2, 0x87, 0x04, 0x0e, 0x40, 0x70, 0xb9, 0xa4, 0x65, 0x88, 0x8e, 0x29, 0x0a, 0xb6, + 0x63, 0xda, 0x6e, 0xa8, 0x54, 0xd6, 0x8f, 0x05, 0x35, 0x71, 0x40, 0x00, 0xa2, 0xa9, 0x92, 0x04, + 0xb3, 0x20, 0xe2, 0x9f, 0x4c, 0x67, 0x67, 0xb9, 0xb8, 0x04, 0x57, 0x5a, 0xec, 0x6e, 0x76, 0x17, + 0x92, 0xa9, 0xe9, 0x74, 0xd4, 0x71, 0xff, 0x32, 0x9d, 0xb6, 0x69, 0xd3, 0x99, 0x26, 0xae, 0xe3, + 0x46, 0xe9, 0x34, 0x4e, 0xd3, 0xbf, 0xa4, 0x69, 0xd3, 0x24, 0x7d, 0xe9, 0x4b, 0x5a, 0x3f, 0x75, + 0x9c, 0xb7, 0x3e, 0xf4, 0xc1, 0x52, 0x3d, 0xd3, 0x3f, 0xb7, 0x49, 0x5b, 0x3d, 0x64, 0x46, 0x2f, + 0x9d, 0xfb, 0xb7, 0xd8, 0x5d, 0x80, 0xda, 0xa5, 0x67, 0xec, 0x3c, 0x89, 0x7b, 0xee, 0xf9, 0xbe, + 0x3d, 0xf7, 0xdc, 0x73, 0xcf, 0x39, 0xf7, 0x2e, 0x04, 0x3f, 0xbc, 0x00, 0x4b, 0x3d, 0xcb, 0xea, + 0x19, 0xe8, 0x94, 0xed, 0x58, 0x9e, 0xb5, 0x3b, 0xd8, 0x3b, 0xd5, 0x45, 0xae, 0xe6, 0xe8, 0xb6, + 0x67, 0x39, 0x2b, 0x44, 0x26, 0xcd, 0x50, 0x8d, 0x15, 0xae, 0x51, 0xd9, 0x84, 0xd9, 0x4b, 0xba, + 0x81, 0x1a, 0xbe, 0x62, 0x1b, 0x79, 0xd2, 0x33, 0x90, 0xd9, 0xd3, 0x0d, 0x54, 0x16, 0x96, 0xd2, + 0xcb, 0x85, 0xd3, 0x8f, 0xae, 0x44, 0x40, 0x2b, 0x61, 0xc4, 0x36, 0x16, 0xcb, 0x04, 0x51, 0x79, + 0x27, 0x03, 0x73, 0x63, 0x46, 0x25, 0x09, 0x32, 0xa6, 0xda, 0xc7, 0x8c, 0xc2, 0x72, 0x5e, 0x26, + 0x7f, 0x4b, 0x65, 0x98, 0xb2, 0x55, 0xed, 0xaa, 0xda, 0x43, 0xe5, 0x14, 0x11, 0xf3, 0x47, 0x69, + 0x11, 0xa0, 0x8b, 0x6c, 0x64, 0x76, 0x91, 0xa9, 0x1d, 0x94, 0xd3, 0x4b, 0xe9, 0xe5, 0xbc, 0x1c, + 0x90, 0x48, 0x4f, 0xc1, 0xac, 0x3d, 0xd8, 0x35, 0x74, 0x4d, 0x09, 0xa8, 0xc1, 0x52, 0x7a, 0x39, + 0x2b, 0x8b, 0x74, 0xa0, 0x31, 0x54, 0x7e, 0x1c, 0x66, 0xae, 0x23, 0xf5, 0x6a, 0x50, 0xb5, 0x40, + 0x54, 0x4b, 0x58, 0x1c, 0x50, 0xac, 0x43, 0xb1, 0x8f, 0x5c, 0x57, 0xed, 0x21, 0xc5, 0x3b, 0xb0, + 0x51, 0x39, 0x43, 0x66, 0xbf, 0x34, 0x32, 0xfb, 0xe8, 0xcc, 0x0b, 0x0c, 0xb5, 0x73, 0x60, 0x23, + 0xa9, 0x06, 0x79, 0x64, 0x0e, 0xfa, 0x94, 0x21, 0x7b, 0x88, 0xff, 0x9a, 0xe6, 0xa0, 0x1f, 0x65, + 0xc9, 0x61, 0x18, 0xa3, 0x98, 0x72, 0x91, 0x73, 0x4d, 0xd7, 0x50, 0x79, 0x92, 0x10, 0x3c, 0x3e, + 0x42, 0xd0, 0xa6, 0xe3, 0x51, 0x0e, 0x8e, 0x93, 0xea, 0x90, 0x47, 0x2f, 0x7b, 0xc8, 0x74, 0x75, + 0xcb, 0x2c, 0x4f, 0x11, 0x92, 0xc7, 0xc6, 0xac, 0x22, 0x32, 0xba, 0x51, 0x8a, 0x21, 0x4e, 0x3a, + 0x07, 0x53, 0x96, 0xed, 0xe9, 0x96, 0xe9, 0x96, 0x73, 0x4b, 0xc2, 0x72, 0xe1, 0xf4, 0x87, 0xc6, + 0x06, 0x42, 0x8b, 0xea, 0xc8, 0x5c, 0x59, 0x5a, 0x07, 0xd1, 0xb5, 0x06, 0x8e, 0x86, 0x14, 0xcd, + 0xea, 0x22, 0x45, 0x37, 0xf7, 0xac, 0x72, 0x9e, 0x10, 0x9c, 0x18, 0x9d, 0x08, 0x51, 0xac, 0x5b, + 0x5d, 0xb4, 0x6e, 0xee, 0x59, 0x72, 0xc9, 0x0d, 0x3d, 0x4b, 0xc7, 0x60, 0xd2, 0x3d, 0x30, 0x3d, + 0xf5, 0xe5, 0x72, 0x91, 0x44, 0x08, 0x7b, 0xaa, 0x7c, 0x77, 0x12, 0x66, 0x92, 0x84, 0xd8, 0x45, + 0xc8, 0xee, 0xe1, 0x59, 0x96, 0x53, 0x47, 0xf1, 0x01, 0xc5, 0x84, 0x9d, 0x38, 0xf9, 0x1e, 0x9d, + 0x58, 0x83, 0x82, 0x89, 0x5c, 0x0f, 0x75, 0x69, 0x44, 0xa4, 0x13, 0xc6, 0x14, 0x50, 0xd0, 0x68, + 0x48, 0x65, 0xde, 0x53, 0x48, 0xbd, 0x00, 0x33, 0xbe, 0x49, 0x8a, 0xa3, 0x9a, 0x3d, 0x1e, 0x9b, + 0xa7, 0xe2, 0x2c, 0x59, 0x69, 0x72, 0x9c, 0x8c, 0x61, 0x72, 0x09, 0x85, 0x9e, 0xa5, 0x06, 0x80, + 0x65, 0x22, 0x6b, 0x4f, 0xe9, 0x22, 0xcd, 0x28, 0xe7, 0x0e, 0xf1, 0x52, 0x0b, 0xab, 0x8c, 0x78, + 0xc9, 0xa2, 0x52, 0xcd, 0x90, 0x2e, 0x0c, 0x43, 0x6d, 0xea, 0x90, 0x48, 0xd9, 0xa4, 0x9b, 0x6c, + 0x24, 0xda, 0x3a, 0x50, 0x72, 0x10, 0x8e, 0x7b, 0xd4, 0x65, 0x33, 0xcb, 0x13, 0x23, 0x56, 0x62, + 0x67, 0x26, 0x33, 0x18, 0x9d, 0xd8, 0xb4, 0x13, 0x7c, 0x94, 0x1e, 0x01, 0x5f, 0xa0, 0x90, 0xb0, + 0x02, 0x92, 0x85, 0x8a, 0x5c, 0xb8, 0xa5, 0xf6, 0xd1, 0xc2, 0x0d, 0x28, 0x85, 0xdd, 0x23, 0xcd, + 0x43, 0xd6, 0xf5, 0x54, 0xc7, 0x23, 0x51, 0x98, 0x95, 0xe9, 0x83, 0x24, 0x42, 0x1a, 0x99, 0x5d, + 0x92, 0xe5, 0xb2, 0x32, 0xfe, 0x53, 0xfa, 0xc4, 0x70, 0xc2, 0x69, 0x32, 0xe1, 0x0f, 0x8f, 0xae, + 0x68, 0x88, 0x39, 0x3a, 0xef, 0x85, 0xf3, 0x30, 0x1d, 0x9a, 0x40, 0xd2, 0x57, 0x57, 0x7e, 0x1e, + 0x1e, 0x18, 0x4b, 0x2d, 0xbd, 0x00, 0xf3, 0x03, 0x53, 0x37, 0x3d, 0xe4, 0xd8, 0x0e, 0xc2, 0x11, + 0x4b, 0x5f, 0x55, 0xfe, 0xd7, 0xa9, 0x43, 0x62, 0xae, 0x13, 0xd4, 0xa6, 0x2c, 0xf2, 0xdc, 0x60, + 0x54, 0xf8, 0x64, 0x3e, 0xf7, 0x6f, 0x53, 0xe2, 0xcd, 0x9b, 0x37, 0x6f, 0xa6, 0x2a, 0x5f, 0x98, + 0x84, 0xf9, 0x71, 0x7b, 0x66, 0xec, 0xf6, 0x3d, 0x06, 0x93, 0xe6, 0xa0, 0xbf, 0x8b, 0x1c, 0xe2, + 0xa4, 0xac, 0xcc, 0x9e, 0xa4, 0x1a, 0x64, 0x0d, 0x75, 0x17, 0x19, 0xe5, 0xcc, 0x92, 0xb0, 0x5c, + 0x3a, 0xfd, 0x54, 0xa2, 0x5d, 0xb9, 0xb2, 0x81, 0x21, 0x32, 0x45, 0x4a, 0x1f, 0x87, 0x0c, 0x4b, + 0xd1, 0x98, 0xe1, 0xc9, 0x64, 0x0c, 0x78, 0x2f, 0xc9, 0x04, 0x27, 0x3d, 0x04, 0x79, 0xfc, 0x2f, + 0x8d, 0x8d, 0x49, 0x62, 0x73, 0x0e, 0x0b, 0x70, 0x5c, 0x48, 0x0b, 0x90, 0x23, 0xdb, 0xa4, 0x8b, + 0x78, 0x69, 0xf3, 0x9f, 0x71, 0x60, 0x75, 0xd1, 0x9e, 0x3a, 0x30, 0x3c, 0xe5, 0x9a, 0x6a, 0x0c, + 0x10, 0x09, 0xf8, 0xbc, 0x5c, 0x64, 0xc2, 0x4f, 0x61, 0x99, 0x74, 0x02, 0x0a, 0x74, 0x57, 0xe9, + 0x66, 0x17, 0xbd, 0x4c, 0xb2, 0x67, 0x56, 0xa6, 0x1b, 0x6d, 0x1d, 0x4b, 0xf0, 0xeb, 0xaf, 0xb8, + 0x96, 0xc9, 0x43, 0x93, 0xbc, 0x02, 0x0b, 0xc8, 0xeb, 0xcf, 0x47, 0x13, 0xf7, 0xc3, 0xe3, 0xa7, + 0x17, 0x8d, 0xa9, 0xca, 0xb7, 0x53, 0x90, 0x21, 0xf9, 0x62, 0x06, 0x0a, 0x3b, 0x2f, 0x6e, 0x37, + 0x95, 0x46, 0xab, 0xb3, 0xba, 0xd1, 0x14, 0x05, 0xa9, 0x04, 0x40, 0x04, 0x97, 0x36, 0x5a, 0xb5, + 0x1d, 0x31, 0xe5, 0x3f, 0xaf, 0x6f, 0xed, 0x9c, 0x3b, 0x23, 0xa6, 0x7d, 0x40, 0x87, 0x0a, 0x32, + 0x41, 0x85, 0xa7, 0x4f, 0x8b, 0x59, 0x49, 0x84, 0x22, 0x25, 0x58, 0x7f, 0xa1, 0xd9, 0x38, 0x77, + 0x46, 0x9c, 0x0c, 0x4b, 0x9e, 0x3e, 0x2d, 0x4e, 0x49, 0xd3, 0x90, 0x27, 0x92, 0xd5, 0x56, 0x6b, + 0x43, 0xcc, 0xf9, 0x9c, 0xed, 0x1d, 0x79, 0x7d, 0x6b, 0x4d, 0xcc, 0xfb, 0x9c, 0x6b, 0x72, 0xab, + 0xb3, 0x2d, 0x82, 0xcf, 0xb0, 0xd9, 0x6c, 0xb7, 0x6b, 0x6b, 0x4d, 0xb1, 0xe0, 0x6b, 0xac, 0xbe, + 0xb8, 0xd3, 0x6c, 0x8b, 0xc5, 0x90, 0x59, 0x4f, 0x9f, 0x16, 0xa7, 0xfd, 0x57, 0x34, 0xb7, 0x3a, + 0x9b, 0x62, 0x49, 0x9a, 0x85, 0x69, 0xfa, 0x0a, 0x6e, 0xc4, 0x4c, 0x44, 0x74, 0xee, 0x8c, 0x28, + 0x0e, 0x0d, 0xa1, 0x2c, 0xb3, 0x21, 0xc1, 0xb9, 0x33, 0xa2, 0x54, 0xa9, 0x43, 0x96, 0x44, 0x97, + 0x24, 0x41, 0x69, 0xa3, 0xb6, 0xda, 0xdc, 0x50, 0x5a, 0xdb, 0x3b, 0xeb, 0xad, 0xad, 0xda, 0x86, + 0x28, 0x0c, 0x65, 0x72, 0xf3, 0x93, 0x9d, 0x75, 0xb9, 0xd9, 0x10, 0x53, 0x41, 0xd9, 0x76, 0xb3, + 0xb6, 0xd3, 0x6c, 0x88, 0xe9, 0x8a, 0x06, 0xf3, 0xe3, 0xf2, 0xe4, 0xd8, 0x9d, 0x11, 0x58, 0xe2, + 0xd4, 0x21, 0x4b, 0x4c, 0xb8, 0x46, 0x96, 0xf8, 0x5f, 0x52, 0x30, 0x37, 0xa6, 0x56, 0x8c, 0x7d, + 0xc9, 0xb3, 0x90, 0xa5, 0x21, 0x4a, 0xab, 0xe7, 0x13, 0x63, 0x8b, 0x0e, 0x09, 0xd8, 0x91, 0x0a, + 0x4a, 0x70, 0xc1, 0x0e, 0x22, 0x7d, 0x48, 0x07, 0x81, 0x29, 0x46, 0x72, 0xfa, 0xcf, 0x8d, 0xe4, + 0x74, 0x5a, 0xf6, 0xce, 0x25, 0x29, 0x7b, 0x44, 0x76, 0xb4, 0xdc, 0x9e, 0x1d, 0x93, 0xdb, 0x2f, + 0xc2, 0xec, 0x08, 0x51, 0xe2, 0x1c, 0xfb, 0x8a, 0x00, 0xe5, 0xc3, 0x9c, 0x13, 0x93, 0xe9, 0x52, + 0xa1, 0x4c, 0x77, 0x31, 0xea, 0xc1, 0x93, 0x87, 0x2f, 0xc2, 0xc8, 0x5a, 0xbf, 0x21, 0xc0, 0xb1, + 0xf1, 0x9d, 0xe2, 0x58, 0x1b, 0x3e, 0x0e, 0x93, 0x7d, 0xe4, 0xed, 0x5b, 0xbc, 0x5b, 0xfa, 0xf0, + 0x98, 0x1a, 0x8c, 0x87, 0xa3, 0x8b, 0xcd, 0x50, 0xc1, 0x22, 0x9e, 0x3e, 0xac, 0xdd, 0xa3, 0xd6, + 0x8c, 0x58, 0xfa, 0xd9, 0x14, 0x3c, 0x30, 0x96, 0x7c, 0xac, 0xa1, 0x0f, 0x03, 0xe8, 0xa6, 0x3d, + 0xf0, 0x68, 0x47, 0x44, 0x13, 0x6c, 0x9e, 0x48, 0x48, 0xf2, 0xc2, 0xc9, 0x73, 0xe0, 0xf9, 0xe3, + 0x69, 0x32, 0x0e, 0x54, 0x44, 0x14, 0x9e, 0x19, 0x1a, 0x9a, 0x21, 0x86, 0x2e, 0x1e, 0x32, 0xd3, + 0x91, 0xc0, 0xfc, 0x28, 0x88, 0x9a, 0xa1, 0x23, 0xd3, 0x53, 0x5c, 0xcf, 0x41, 0x6a, 0x5f, 0x37, + 0x7b, 0xa4, 0x82, 0xe4, 0xaa, 0xd9, 0x3d, 0xd5, 0x70, 0x91, 0x3c, 0x43, 0x87, 0xdb, 0x7c, 0x14, + 0x23, 0x48, 0x00, 0x39, 0x01, 0xc4, 0x64, 0x08, 0x41, 0x87, 0x7d, 0x44, 0xe5, 0x5b, 0x39, 0x28, + 0x04, 0xfa, 0x6a, 0xe9, 0x24, 0x14, 0xaf, 0xa8, 0xd7, 0x54, 0x85, 0x9f, 0x95, 0xa8, 0x27, 0x0a, + 0x58, 0xb6, 0xcd, 0xce, 0x4b, 0x1f, 0x85, 0x79, 0xa2, 0x62, 0x0d, 0x3c, 0xe4, 0x28, 0x9a, 0xa1, + 0xba, 0x2e, 0x71, 0x5a, 0x8e, 0xa8, 0x4a, 0x78, 0xac, 0x85, 0x87, 0xea, 0x7c, 0x44, 0x3a, 0x0b, + 0x73, 0x04, 0xd1, 0x1f, 0x18, 0x9e, 0x6e, 0x1b, 0x48, 0xc1, 0xa7, 0x37, 0x97, 0x54, 0x12, 0xdf, + 0xb2, 0x59, 0xac, 0xb1, 0xc9, 0x14, 0xb0, 0x45, 0xae, 0xd4, 0x80, 0x87, 0x09, 0xac, 0x87, 0x4c, + 0xe4, 0xa8, 0x1e, 0x52, 0xd0, 0x67, 0x06, 0xaa, 0xe1, 0x2a, 0xaa, 0xd9, 0x55, 0xf6, 0x55, 0x77, + 0xbf, 0x3c, 0x8f, 0x09, 0x56, 0x53, 0x65, 0x41, 0x3e, 0x8e, 0x15, 0xd7, 0x98, 0x5e, 0x93, 0xa8, + 0xd5, 0xcc, 0xee, 0x73, 0xaa, 0xbb, 0x2f, 0x55, 0xe1, 0x18, 0x61, 0x71, 0x3d, 0x47, 0x37, 0x7b, + 0x8a, 0xb6, 0x8f, 0xb4, 0xab, 0xca, 0xc0, 0xdb, 0x7b, 0xa6, 0xfc, 0x50, 0xf0, 0xfd, 0xc4, 0xc2, + 0x36, 0xd1, 0xa9, 0x63, 0x95, 0x8e, 0xb7, 0xf7, 0x8c, 0xd4, 0x86, 0x22, 0x5e, 0x8c, 0xbe, 0x7e, + 0x03, 0x29, 0x7b, 0x96, 0x43, 0x4a, 0x63, 0x69, 0x4c, 0x6a, 0x0a, 0x78, 0x70, 0xa5, 0xc5, 0x00, + 0x9b, 0x56, 0x17, 0x55, 0xb3, 0xed, 0xed, 0x66, 0xb3, 0x21, 0x17, 0x38, 0xcb, 0x25, 0xcb, 0xc1, + 0x01, 0xd5, 0xb3, 0x7c, 0x07, 0x17, 0x68, 0x40, 0xf5, 0x2c, 0xee, 0xde, 0xb3, 0x30, 0xa7, 0x69, + 0x74, 0xce, 0xba, 0xa6, 0xb0, 0x33, 0x96, 0x5b, 0x16, 0x43, 0xce, 0xd2, 0xb4, 0x35, 0xaa, 0xc0, + 0x62, 0xdc, 0x95, 0x2e, 0xc0, 0x03, 0x43, 0x67, 0x05, 0x81, 0xb3, 0x23, 0xb3, 0x8c, 0x42, 0xcf, + 0xc2, 0x9c, 0x7d, 0x30, 0x0a, 0x94, 0x42, 0x6f, 0xb4, 0x0f, 0xa2, 0xb0, 0xf3, 0x30, 0x6f, 0xef, + 0xdb, 0xa3, 0xb8, 0x27, 0x83, 0x38, 0xc9, 0xde, 0xb7, 0xa3, 0xc0, 0xc7, 0xc8, 0x81, 0xdb, 0x41, + 0x9a, 0xea, 0xa1, 0x6e, 0xf9, 0xc1, 0xa0, 0x7a, 0x60, 0x40, 0x3a, 0x05, 0xa2, 0xa6, 0x29, 0xc8, + 0x54, 0x77, 0x0d, 0xa4, 0xa8, 0x0e, 0x32, 0x55, 0xb7, 0x7c, 0x22, 0xa8, 0x5c, 0xd2, 0xb4, 0x26, + 0x19, 0xad, 0x91, 0x41, 0xe9, 0x49, 0x98, 0xb5, 0x76, 0xaf, 0x68, 0x34, 0x24, 0x15, 0xdb, 0x41, + 0x7b, 0xfa, 0xcb, 0xe5, 0x47, 0x89, 0x7f, 0x67, 0xf0, 0x00, 0x09, 0xc8, 0x6d, 0x22, 0x96, 0x9e, + 0x00, 0x51, 0x73, 0xf7, 0x55, 0xc7, 0x26, 0x39, 0xd9, 0xb5, 0x55, 0x0d, 0x95, 0x1f, 0xa3, 0xaa, + 0x54, 0xbe, 0xc5, 0xc5, 0x78, 0x4b, 0xb8, 0xd7, 0xf5, 0x3d, 0x8f, 0x33, 0x3e, 0x4e, 0xb7, 0x04, + 0x91, 0x31, 0xb6, 0x65, 0x10, 0xb1, 0x2b, 0x42, 0x2f, 0x5e, 0x26, 0x6a, 0x25, 0x7b, 0xdf, 0x0e, + 0xbe, 0xf7, 0x11, 0x98, 0xc6, 0x9a, 0xc3, 0x97, 0x3e, 0x41, 0x1b, 0x32, 0x7b, 0x3f, 0xf0, 0xc6, + 0xf7, 0xad, 0x37, 0xae, 0x54, 0xa1, 0x18, 0x8c, 0x4f, 0x29, 0x0f, 0x34, 0x42, 0x45, 0x01, 0x37, + 0x2b, 0xf5, 0x56, 0x03, 0xb7, 0x19, 0x2f, 0x35, 0xc5, 0x14, 0x6e, 0x77, 0x36, 0xd6, 0x77, 0x9a, + 0x8a, 0xdc, 0xd9, 0xda, 0x59, 0xdf, 0x6c, 0x8a, 0xe9, 0x60, 0x5f, 0xfd, 0xfd, 0x14, 0x94, 0xc2, + 0x47, 0x24, 0xe9, 0x67, 0xe0, 0x41, 0x7e, 0x9f, 0xe1, 0x22, 0x4f, 0xb9, 0xae, 0x3b, 0x64, 0xcb, + 0xf4, 0x55, 0x5a, 0xbe, 0xfc, 0x45, 0x9b, 0x67, 0x5a, 0x6d, 0xe4, 0x3d, 0xaf, 0x3b, 0x78, 0x43, + 0xf4, 0x55, 0x4f, 0xda, 0x80, 0x13, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0x76, 0x55, 0xa7, 0xab, 0x0c, + 0x6f, 0x92, 0x14, 0x55, 0xd3, 0x90, 0xeb, 0x5a, 0xb4, 0x54, 0xf9, 0x2c, 0x1f, 0x32, 0xad, 0x36, + 0x53, 0x1e, 0xe6, 0xf0, 0x1a, 0x53, 0x8d, 0x04, 0x58, 0xfa, 0xb0, 0x00, 0x7b, 0x08, 0xf2, 0x7d, + 0xd5, 0x56, 0x90, 0xe9, 0x39, 0x07, 0xa4, 0x31, 0xce, 0xc9, 0xb9, 0xbe, 0x6a, 0x37, 0xf1, 0xf3, + 0x07, 0x73, 0x3e, 0xf9, 0xe7, 0x34, 0x14, 0x83, 0xcd, 0x31, 0x3e, 0x6b, 0x68, 0xa4, 0x8e, 0x08, + 0x24, 0xd3, 0x3c, 0x72, 0xdf, 0x56, 0x7a, 0xa5, 0x8e, 0x0b, 0x4c, 0x75, 0x92, 0xb6, 0xac, 0x32, + 0x45, 0xe2, 0xe2, 0x8e, 0x73, 0x0b, 0xa2, 0x2d, 0x42, 0x4e, 0x66, 0x4f, 0xd2, 0x1a, 0x4c, 0x5e, + 0x71, 0x09, 0xf7, 0x24, 0xe1, 0x7e, 0xf4, 0xfe, 0xdc, 0x97, 0xdb, 0x84, 0x3c, 0x7f, 0xb9, 0xad, + 0x6c, 0xb5, 0xe4, 0xcd, 0xda, 0x86, 0xcc, 0xe0, 0xd2, 0x71, 0xc8, 0x18, 0xea, 0x8d, 0x83, 0x70, + 0x29, 0x22, 0xa2, 0xa4, 0x8e, 0x3f, 0x0e, 0x99, 0xeb, 0x48, 0xbd, 0x1a, 0x2e, 0x00, 0x44, 0xf4, + 0x3e, 0x86, 0xfe, 0x29, 0xc8, 0x12, 0x7f, 0x49, 0x00, 0xcc, 0x63, 0xe2, 0x84, 0x94, 0x83, 0x4c, + 0xbd, 0x25, 0xe3, 0xf0, 0x17, 0xa1, 0x48, 0xa5, 0xca, 0xf6, 0x7a, 0xb3, 0xde, 0x14, 0x53, 0x95, + 0xb3, 0x30, 0x49, 0x9d, 0x80, 0xb7, 0x86, 0xef, 0x06, 0x71, 0x82, 0x3d, 0x32, 0x0e, 0x81, 0x8f, + 0x76, 0x36, 0x57, 0x9b, 0xb2, 0x98, 0x0a, 0x2e, 0xaf, 0x0b, 0xc5, 0x60, 0x5f, 0xfc, 0xc1, 0xc4, + 0xd4, 0xf7, 0x04, 0x28, 0x04, 0xfa, 0x5c, 0xdc, 0xa0, 0xa8, 0x86, 0x61, 0x5d, 0x57, 0x54, 0x43, + 0x57, 0x5d, 0x16, 0x14, 0x40, 0x44, 0x35, 0x2c, 0x49, 0xba, 0x68, 0x1f, 0x88, 0xf1, 0xaf, 0x0b, + 0x20, 0x46, 0x5b, 0xcc, 0x88, 0x81, 0xc2, 0x4f, 0xd4, 0xc0, 0xd7, 0x04, 0x28, 0x85, 0xfb, 0xca, + 0x88, 0x79, 0x27, 0x7f, 0xa2, 0xe6, 0xbd, 0x9d, 0x82, 0xe9, 0x50, 0x37, 0x99, 0xd4, 0xba, 0xcf, + 0xc0, 0xac, 0xde, 0x45, 0x7d, 0xdb, 0xf2, 0x90, 0xa9, 0x1d, 0x28, 0x06, 0xba, 0x86, 0x8c, 0x72, + 0x85, 0x24, 0x8a, 0x53, 0xf7, 0xef, 0x57, 0x57, 0xd6, 0x87, 0xb8, 0x0d, 0x0c, 0xab, 0xce, 0xad, + 0x37, 0x9a, 0x9b, 0xdb, 0xad, 0x9d, 0xe6, 0x56, 0xfd, 0x45, 0xa5, 0xb3, 0xf5, 0xb3, 0x5b, 0xad, + 0xe7, 0xb7, 0x64, 0x51, 0x8f, 0xa8, 0xbd, 0x8f, 0x5b, 0x7d, 0x1b, 0xc4, 0xa8, 0x51, 0xd2, 0x83, + 0x30, 0xce, 0x2c, 0x71, 0x42, 0x9a, 0x83, 0x99, 0xad, 0x96, 0xd2, 0x5e, 0x6f, 0x34, 0x95, 0xe6, + 0xa5, 0x4b, 0xcd, 0xfa, 0x4e, 0x9b, 0xde, 0x40, 0xf8, 0xda, 0x3b, 0xe1, 0x4d, 0xfd, 0x6a, 0x1a, + 0xe6, 0xc6, 0x58, 0x22, 0xd5, 0xd8, 0xd9, 0x81, 0x1e, 0x67, 0x3e, 0x92, 0xc4, 0xfa, 0x15, 0x5c, + 0xf2, 0xb7, 0x55, 0xc7, 0x63, 0x47, 0x8d, 0x27, 0x00, 0x7b, 0xc9, 0xf4, 0xf4, 0x3d, 0x1d, 0x39, + 0xec, 0xc2, 0x86, 0x1e, 0x28, 0x66, 0x86, 0x72, 0x7a, 0x67, 0xf3, 0x53, 0x20, 0xd9, 0x96, 0xab, + 0x7b, 0xfa, 0x35, 0xa4, 0xe8, 0x26, 0xbf, 0xdd, 0xc1, 0x07, 0x8c, 0x8c, 0x2c, 0xf2, 0x91, 0x75, + 0xd3, 0xf3, 0xb5, 0x4d, 0xd4, 0x53, 0x23, 0xda, 0x38, 0x81, 0xa7, 0x65, 0x91, 0x8f, 0xf8, 0xda, + 0x27, 0xa1, 0xd8, 0xb5, 0x06, 0xb8, 0xeb, 0xa2, 0x7a, 0xb8, 0x5e, 0x08, 0x72, 0x81, 0xca, 0x7c, + 0x15, 0xd6, 0x4f, 0x0f, 0xaf, 0x95, 0x8a, 0x72, 0x81, 0xca, 0xa8, 0xca, 0xe3, 0x30, 0xa3, 0xf6, + 0x7a, 0x0e, 0x26, 0xe7, 0x44, 0xf4, 0x84, 0x50, 0xf2, 0xc5, 0x44, 0x71, 0xe1, 0x32, 0xe4, 0xb8, + 0x1f, 0x70, 0x49, 0xc6, 0x9e, 0x50, 0x6c, 0x7a, 0xec, 0x4d, 0x2d, 0xe7, 0xe5, 0x9c, 0xc9, 0x07, + 0x4f, 0x42, 0x51, 0x77, 0x95, 0xe1, 0x2d, 0x79, 0x6a, 0x29, 0xb5, 0x9c, 0x93, 0x0b, 0xba, 0xeb, + 0xdf, 0x30, 0x56, 0xde, 0x48, 0x41, 0x29, 0x7c, 0xcb, 0x2f, 0x35, 0x20, 0x67, 0x58, 0x9a, 0x4a, + 0x42, 0x8b, 0x7e, 0x62, 0x5a, 0x8e, 0xf9, 0x30, 0xb0, 0xb2, 0xc1, 0xf4, 0x65, 0x1f, 0xb9, 0xf0, + 0x8f, 0x02, 0xe4, 0xb8, 0x58, 0x3a, 0x06, 0x19, 0x5b, 0xf5, 0xf6, 0x09, 0x5d, 0x76, 0x35, 0x25, + 0x0a, 0x32, 0x79, 0xc6, 0x72, 0xd7, 0x56, 0x4d, 0x12, 0x02, 0x4c, 0x8e, 0x9f, 0xf1, 0xba, 0x1a, + 0x48, 0xed, 0x92, 0xe3, 0x87, 0xd5, 0xef, 0x23, 0xd3, 0x73, 0xf9, 0xba, 0x32, 0x79, 0x9d, 0x89, + 0xa5, 0xa7, 0x60, 0xd6, 0x73, 0x54, 0xdd, 0x08, 0xe9, 0x66, 0x88, 0xae, 0xc8, 0x07, 0x7c, 0xe5, + 0x2a, 0x1c, 0xe7, 0xbc, 0x5d, 0xe4, 0xa9, 0xda, 0x3e, 0xea, 0x0e, 0x41, 0x93, 0xe4, 0x9a, 0xe1, + 0x41, 0xa6, 0xd0, 0x60, 0xe3, 0x1c, 0x5b, 0xf9, 0x81, 0x00, 0xb3, 0xfc, 0xc0, 0xd4, 0xf5, 0x9d, + 0xb5, 0x09, 0xa0, 0x9a, 0xa6, 0xe5, 0x05, 0xdd, 0x35, 0x1a, 0xca, 0x23, 0xb8, 0x95, 0x9a, 0x0f, + 0x92, 0x03, 0x04, 0x0b, 0x7d, 0x80, 0xe1, 0xc8, 0xa1, 0x6e, 0x3b, 0x01, 0x05, 0xf6, 0x09, 0x87, + 0x7c, 0x07, 0xa4, 0x47, 0x6c, 0xa0, 0x22, 0x7c, 0xb2, 0x92, 0xe6, 0x21, 0xbb, 0x8b, 0x7a, 0xba, + 0xc9, 0x2e, 0x66, 0xe9, 0x03, 0xbf, 0x08, 0xc9, 0xf8, 0x17, 0x21, 0xab, 0x9f, 0x86, 0x39, 0xcd, + 0xea, 0x47, 0xcd, 0x5d, 0x15, 0x23, 0xc7, 0x7c, 0xf7, 0x39, 0xe1, 0x25, 0x18, 0xb6, 0x98, 0x3f, + 0x16, 0x84, 0xaf, 0xa4, 0xd2, 0x6b, 0xdb, 0xab, 0x5f, 0x4f, 0x2d, 0xac, 0x51, 0xe8, 0x36, 0x9f, + 0xa9, 0x8c, 0xf6, 0x0c, 0xa4, 0x61, 0xeb, 0xe1, 0xab, 0x4f, 0xc1, 0x47, 0x7a, 0xba, 0xb7, 0x3f, + 0xd8, 0x5d, 0xd1, 0xac, 0xfe, 0xa9, 0x9e, 0xd5, 0xb3, 0x86, 0x9f, 0x3e, 0xf1, 0x13, 0x79, 0x20, + 0x7f, 0xb1, 0xcf, 0x9f, 0x79, 0x5f, 0xba, 0x10, 0xfb, 0xad, 0xb4, 0xba, 0x05, 0x73, 0x4c, 0x59, + 0x21, 0xdf, 0x5f, 0xe8, 0x29, 0x42, 0xba, 0xef, 0x1d, 0x56, 0xf9, 0x9b, 0xef, 0x90, 0x72, 0x2d, + 0xcf, 0x32, 0x28, 0x1e, 0xa3, 0x07, 0x8d, 0xaa, 0x0c, 0x0f, 0x84, 0xf8, 0xe8, 0xd6, 0x44, 0x4e, + 0x0c, 0xe3, 0xf7, 0x19, 0xe3, 0x5c, 0x80, 0xb1, 0xcd, 0xa0, 0xd5, 0x3a, 0x4c, 0x1f, 0x85, 0xeb, + 0xef, 0x19, 0x57, 0x11, 0x05, 0x49, 0xd6, 0x60, 0x86, 0x90, 0x68, 0x03, 0xd7, 0xb3, 0xfa, 0x24, + 0xef, 0xdd, 0x9f, 0xe6, 0x1f, 0xde, 0xa1, 0x7b, 0xa5, 0x84, 0x61, 0x75, 0x1f, 0x55, 0xad, 0x02, + 0xf9, 0xe4, 0xd4, 0x45, 0x9a, 0x11, 0xc3, 0xf0, 0x26, 0x33, 0xc4, 0xd7, 0xaf, 0x7e, 0x0a, 0xe6, + 0xf1, 0xdf, 0x24, 0x2d, 0x05, 0x2d, 0x89, 0xbf, 0xf0, 0x2a, 0xff, 0xe0, 0x15, 0xba, 0x1d, 0xe7, + 0x7c, 0x82, 0x80, 0x4d, 0x81, 0x55, 0xec, 0x21, 0xcf, 0x43, 0x8e, 0xab, 0xa8, 0xc6, 0x38, 0xf3, + 0x02, 0x37, 0x06, 0xe5, 0x2f, 0xbe, 0x1b, 0x5e, 0xc5, 0x35, 0x8a, 0xac, 0x19, 0x46, 0xb5, 0x03, + 0x0f, 0x8e, 0x89, 0x8a, 0x04, 0x9c, 0xaf, 0x32, 0xce, 0xf9, 0x91, 0xc8, 0xc0, 0xb4, 0xdb, 0xc0, + 0xe5, 0xfe, 0x5a, 0x26, 0xe0, 0xfc, 0x7d, 0xc6, 0x29, 0x31, 0x2c, 0x5f, 0x52, 0xcc, 0x78, 0x19, + 0x66, 0xaf, 0x21, 0x67, 0xd7, 0x72, 0xd9, 0x2d, 0x4d, 0x02, 0xba, 0xd7, 0x18, 0xdd, 0x0c, 0x03, + 0x92, 0x6b, 0x1b, 0xcc, 0x75, 0x01, 0x72, 0x7b, 0xaa, 0x86, 0x12, 0x50, 0x7c, 0x89, 0x51, 0x4c, + 0x61, 0x7d, 0x0c, 0xad, 0x41, 0xb1, 0x67, 0xb1, 0xca, 0x14, 0x0f, 0x7f, 0x9d, 0xc1, 0x0b, 0x1c, + 0xc3, 0x28, 0x6c, 0xcb, 0x1e, 0x18, 0xb8, 0x6c, 0xc5, 0x53, 0xfc, 0x01, 0xa7, 0xe0, 0x18, 0x46, + 0x71, 0x04, 0xb7, 0x7e, 0x99, 0x53, 0xb8, 0x01, 0x7f, 0x3e, 0x0b, 0x05, 0xcb, 0x34, 0x0e, 0x2c, + 0x33, 0x89, 0x11, 0xb7, 0x18, 0x03, 0x30, 0x08, 0x26, 0xb8, 0x08, 0xf9, 0xa4, 0x0b, 0xf1, 0x47, + 0xef, 0xf2, 0xed, 0xc1, 0x57, 0x60, 0x0d, 0x66, 0x78, 0x82, 0xd2, 0x2d, 0x33, 0x01, 0xc5, 0x57, + 0x19, 0x45, 0x29, 0x00, 0x63, 0xd3, 0xf0, 0x90, 0xeb, 0xf5, 0x50, 0x12, 0x92, 0x37, 0xf8, 0x34, + 0x18, 0x84, 0xb9, 0x72, 0x17, 0x99, 0xda, 0x7e, 0x32, 0x86, 0xaf, 0x71, 0x57, 0x72, 0x0c, 0xa6, + 0xa8, 0xc3, 0x74, 0x5f, 0x75, 0xdc, 0x7d, 0xd5, 0x48, 0xb4, 0x1c, 0x7f, 0xcc, 0x38, 0x8a, 0x3e, + 0x88, 0x79, 0x64, 0x60, 0x1e, 0x85, 0xe6, 0xeb, 0xdc, 0x23, 0x01, 0x18, 0xdb, 0x7a, 0xae, 0x47, + 0xae, 0xb4, 0x8e, 0xc2, 0xf6, 0x27, 0x7c, 0xeb, 0x51, 0xec, 0x66, 0x90, 0xf1, 0x22, 0xe4, 0x5d, + 0xfd, 0x46, 0x22, 0x9a, 0x3f, 0xe5, 0x2b, 0x4d, 0x00, 0x18, 0xfc, 0x22, 0x1c, 0x1f, 0x5b, 0x26, + 0x12, 0x90, 0xfd, 0x19, 0x23, 0x3b, 0x36, 0xa6, 0x54, 0xb0, 0x94, 0x70, 0x54, 0xca, 0x3f, 0xe7, + 0x29, 0x01, 0x45, 0xb8, 0xb6, 0xf1, 0x59, 0xc1, 0x55, 0xf7, 0x8e, 0xe6, 0xb5, 0xbf, 0xe0, 0x5e, + 0xa3, 0xd8, 0x90, 0xd7, 0x76, 0xe0, 0x18, 0x63, 0x3c, 0xda, 0xba, 0x7e, 0x83, 0x27, 0x56, 0x8a, + 0xee, 0x84, 0x57, 0xf7, 0xd3, 0xb0, 0xe0, 0xbb, 0x93, 0x37, 0xa5, 0xae, 0xd2, 0x57, 0xed, 0x04, + 0xcc, 0xdf, 0x64, 0xcc, 0x3c, 0xe3, 0xfb, 0x5d, 0xad, 0xbb, 0xa9, 0xda, 0x98, 0xfc, 0x05, 0x28, + 0x73, 0xf2, 0x81, 0xe9, 0x20, 0xcd, 0xea, 0x99, 0xfa, 0x0d, 0xd4, 0x4d, 0x40, 0xfd, 0x97, 0x91, + 0xa5, 0xea, 0x04, 0xe0, 0x98, 0x79, 0x1d, 0x44, 0xbf, 0x57, 0x51, 0xf4, 0xbe, 0x6d, 0x39, 0x5e, + 0x0c, 0xe3, 0xb7, 0xf8, 0x4a, 0xf9, 0xb8, 0x75, 0x02, 0xab, 0x36, 0xa1, 0x44, 0x1e, 0x93, 0x86, + 0xe4, 0x5f, 0x31, 0xa2, 0xe9, 0x21, 0x8a, 0x25, 0x0e, 0xcd, 0xea, 0xdb, 0xaa, 0x93, 0x24, 0xff, + 0xfd, 0x35, 0x4f, 0x1c, 0x0c, 0xc2, 0x12, 0x87, 0x77, 0x60, 0x23, 0x5c, 0xed, 0x13, 0x30, 0x7c, + 0x9b, 0x27, 0x0e, 0x8e, 0x61, 0x14, 0xbc, 0x61, 0x48, 0x40, 0xf1, 0x37, 0x9c, 0x82, 0x63, 0x30, + 0xc5, 0x27, 0x87, 0x85, 0xd6, 0x41, 0x3d, 0xdd, 0xf5, 0x1c, 0xda, 0x0a, 0xdf, 0x9f, 0xea, 0x3b, + 0xef, 0x86, 0x9b, 0x30, 0x39, 0x00, 0xc5, 0x99, 0x88, 0x5d, 0xa1, 0x92, 0x93, 0x52, 0xbc, 0x61, + 0xdf, 0xe5, 0x99, 0x28, 0x00, 0xc3, 0xb6, 0x05, 0x3a, 0x44, 0xec, 0x76, 0x0d, 0x9f, 0x0f, 0x12, + 0xd0, 0x7d, 0x2f, 0x62, 0x5c, 0x9b, 0x63, 0x31, 0x67, 0xa0, 0xff, 0x19, 0x98, 0x57, 0xd1, 0x41, + 0xa2, 0xe8, 0xfc, 0xdb, 0x48, 0xff, 0xd3, 0xa1, 0x48, 0x9a, 0x43, 0x66, 0x22, 0xfd, 0x94, 0x14, + 0xf7, 0x63, 0x9d, 0xf2, 0x2f, 0xde, 0x65, 0xf3, 0x0d, 0xb7, 0x53, 0xd5, 0x0d, 0x1c, 0xe4, 0xe1, + 0xa6, 0x27, 0x9e, 0xec, 0x95, 0xbb, 0x7e, 0x9c, 0x87, 0x7a, 0x9e, 0xea, 0x25, 0x98, 0x0e, 0x35, + 0x3c, 0xf1, 0x54, 0xbf, 0xc4, 0xa8, 0x8a, 0xc1, 0x7e, 0xa7, 0x7a, 0x16, 0x32, 0xb8, 0x79, 0x89, + 0x87, 0xff, 0x32, 0x83, 0x13, 0xf5, 0xea, 0xc7, 0x20, 0xc7, 0x9b, 0x96, 0x78, 0xe8, 0xaf, 0x30, + 0xa8, 0x0f, 0xc1, 0x70, 0xde, 0xb0, 0xc4, 0xc3, 0x7f, 0x95, 0xc3, 0x39, 0x04, 0xc3, 0x93, 0xbb, + 0xf0, 0xef, 0x7e, 0x3d, 0xc3, 0x8a, 0x0e, 0xf7, 0xdd, 0x45, 0x98, 0x62, 0x9d, 0x4a, 0x3c, 0xfa, + 0xb3, 0xec, 0xe5, 0x1c, 0x51, 0x3d, 0x0f, 0xd9, 0x84, 0x0e, 0xff, 0x0d, 0x06, 0xa5, 0xfa, 0xd5, + 0x3a, 0x14, 0x02, 0xdd, 0x49, 0x3c, 0xfc, 0x37, 0x19, 0x3c, 0x88, 0xc2, 0xa6, 0xb3, 0xee, 0x24, + 0x9e, 0xe0, 0xb7, 0xb8, 0xe9, 0x0c, 0x81, 0xdd, 0xc6, 0x1b, 0x93, 0x78, 0xf4, 0xe7, 0xb8, 0xd7, + 0x39, 0xa4, 0xfa, 0x2c, 0xe4, 0xfd, 0x62, 0x13, 0x8f, 0xff, 0x6d, 0x86, 0x1f, 0x62, 0xb0, 0x07, + 0x02, 0xc5, 0x2e, 0x9e, 0xe2, 0x77, 0xb8, 0x07, 0x02, 0x28, 0xbc, 0x8d, 0xa2, 0x0d, 0x4c, 0x3c, + 0xd3, 0xe7, 0xf9, 0x36, 0x8a, 0xf4, 0x2f, 0x78, 0x35, 0x49, 0xce, 0x8f, 0xa7, 0xf8, 0x5d, 0xbe, + 0x9a, 0x44, 0x1f, 0x9b, 0x11, 0xed, 0x08, 0xe2, 0x39, 0x7e, 0x8f, 0x9b, 0x11, 0x69, 0x08, 0xaa, + 0xdb, 0x20, 0x8d, 0x76, 0x03, 0xf1, 0x7c, 0x5f, 0x60, 0x7c, 0xb3, 0x23, 0xcd, 0x40, 0xf5, 0x79, + 0x38, 0x36, 0xbe, 0x13, 0x88, 0x67, 0xfd, 0xe2, 0xdd, 0xc8, 0xd9, 0x2d, 0xd8, 0x08, 0x54, 0x77, + 0x86, 0x25, 0x25, 0xd8, 0x05, 0xc4, 0xd3, 0xbe, 0x7a, 0x37, 0x9c, 0xb8, 0x83, 0x4d, 0x40, 0xb5, + 0x06, 0x30, 0x2c, 0xc0, 0xf1, 0x5c, 0xaf, 0x31, 0xae, 0x00, 0x08, 0x6f, 0x0d, 0x56, 0x7f, 0xe3, + 0xf1, 0x5f, 0xe2, 0x5b, 0x83, 0x21, 0xf0, 0xd6, 0xe0, 0xa5, 0x37, 0x1e, 0xfd, 0x3a, 0xdf, 0x1a, + 0x1c, 0x82, 0x23, 0x3b, 0x50, 0xdd, 0xe2, 0x19, 0x6e, 0xf1, 0xc8, 0x0e, 0xa0, 0xaa, 0x5b, 0x30, + 0x3b, 0x52, 0x10, 0xe3, 0xa9, 0xbe, 0xc2, 0xa8, 0xc4, 0x68, 0x3d, 0x0c, 0x16, 0x2f, 0x56, 0x0c, + 0xe3, 0xd9, 0xfe, 0x30, 0x52, 0xbc, 0x58, 0x2d, 0xac, 0x5e, 0x84, 0x9c, 0x39, 0x30, 0x0c, 0xbc, + 0x79, 0xa4, 0xfb, 0xff, 0xc0, 0xae, 0xfc, 0xef, 0xf7, 0x98, 0x77, 0x38, 0xa0, 0x7a, 0x16, 0xb2, + 0xa8, 0xbf, 0x8b, 0xba, 0x71, 0xc8, 0xff, 0xb8, 0xc7, 0x13, 0x26, 0xd6, 0xae, 0x3e, 0x0b, 0x40, + 0xaf, 0x46, 0xc8, 0x67, 0xbf, 0x18, 0xec, 0x7f, 0xde, 0x63, 0x3f, 0x7d, 0x19, 0x42, 0x86, 0x04, + 0xf4, 0x87, 0x34, 0xf7, 0x27, 0x78, 0x37, 0x4c, 0x40, 0x56, 0xe4, 0x02, 0x4c, 0x5d, 0x71, 0x2d, + 0xd3, 0x53, 0x7b, 0x71, 0xe8, 0xff, 0x62, 0x68, 0xae, 0x8f, 0x1d, 0xd6, 0xb7, 0x1c, 0xe4, 0xa9, + 0x3d, 0x37, 0x0e, 0xfb, 0xdf, 0x0c, 0xeb, 0x03, 0x30, 0x58, 0x53, 0x5d, 0x2f, 0xc9, 0xbc, 0x7f, + 0xc8, 0xc1, 0x1c, 0x80, 0x8d, 0xc6, 0x7f, 0x5f, 0x45, 0x07, 0x71, 0xd8, 0x1f, 0x71, 0xa3, 0x99, + 0x7e, 0xf5, 0x63, 0x90, 0xc7, 0x7f, 0xd2, 0xdf, 0xb3, 0xc5, 0x80, 0xff, 0x87, 0x81, 0x87, 0x08, + 0xfc, 0x66, 0xd7, 0xeb, 0x7a, 0x7a, 0xbc, 0xb3, 0xff, 0x97, 0xad, 0x34, 0xd7, 0xaf, 0xd6, 0xa0, + 0xe0, 0x7a, 0xdd, 0xee, 0x80, 0xf5, 0xa7, 0x31, 0xf0, 0xff, 0xbb, 0xe7, 0x5f, 0x59, 0xf8, 0x18, + 0xbc, 0xda, 0xd7, 0xaf, 0x7a, 0xb6, 0x45, 0x3e, 0x73, 0xc4, 0x31, 0xdc, 0x65, 0x0c, 0x01, 0xc8, + 0x6a, 0x73, 0xfc, 0xf5, 0x2d, 0xac, 0x59, 0x6b, 0x16, 0xbd, 0xb8, 0x7d, 0xa9, 0x12, 0x7f, 0x03, + 0x0b, 0xf7, 0xa6, 0x70, 0x32, 0x1f, 0xe6, 0x36, 0x76, 0x1b, 0x5b, 0x0c, 0xca, 0x16, 0x8e, 0x76, + 0x95, 0x5b, 0xf9, 0x04, 0x08, 0x35, 0xe9, 0x18, 0x4c, 0x92, 0x39, 0xfc, 0x34, 0xb9, 0xa2, 0x4e, + 0xcb, 0xec, 0x49, 0x7a, 0x18, 0x84, 0x55, 0x76, 0x57, 0x3e, 0xb3, 0x12, 0x7a, 0xf3, 0xaa, 0x2c, + 0xac, 0x56, 0x33, 0x6f, 0xdd, 0x3a, 0x31, 0x51, 0xd1, 0x40, 0x58, 0xc5, 0x9a, 0x75, 0xf2, 0x01, + 0x73, 0x44, 0xb3, 0x2e, 0x0b, 0x75, 0x3c, 0xdc, 0x60, 0xbf, 0xb0, 0x8c, 0x0c, 0x37, 0x64, 0xa1, + 0x21, 0x2d, 0x81, 0x70, 0x89, 0x7c, 0xb4, 0x29, 0x9c, 0x96, 0xc2, 0xc3, 0x2d, 0xa3, 0x5b, 0x97, + 0x85, 0x4b, 0x95, 0x87, 0x40, 0x68, 0x04, 0xcc, 0x14, 0x82, 0x66, 0x56, 0x3e, 0x2f, 0x80, 0x50, + 0xf7, 0x47, 0x4f, 0x93, 0x17, 0x09, 0x6c, 0xf4, 0xb4, 0x2f, 0x7f, 0x9a, 0x7d, 0x99, 0x60, 0x4f, + 0xbe, 0xfc, 0x0c, 0xb9, 0x68, 0xe7, 0xfa, 0x67, 0x7c, 0xf9, 0x59, 0xf2, 0x7b, 0xc6, 0x22, 0x93, + 0x9f, 0xf5, 0xe5, 0xe7, 0xc8, 0x67, 0x23, 0xfe, 0xf6, 0x73, 0xbe, 0xfc, 0x3c, 0xf9, 0x1f, 0x22, + 0x29, 0x26, 0x3f, 0x5f, 0xb9, 0x00, 0x42, 0x27, 0x64, 0x54, 0xfa, 0x50, 0xa3, 0xa6, 0xb9, 0x51, + 0xcc, 0xa5, 0xcf, 0x41, 0xa6, 0x63, 0x5a, 0x9b, 0x47, 0x46, 0x8b, 0xbf, 0x76, 0xeb, 0xc4, 0xc4, + 0xe7, 0x6e, 0x9d, 0x98, 0xf8, 0xf2, 0xad, 0x13, 0x13, 0x84, 0xe9, 0x12, 0x64, 0x5a, 0x46, 0xf7, + 0xf0, 0x15, 0x5e, 0x1a, 0xae, 0xf0, 0xa8, 0xe7, 0x03, 0x8b, 0x7c, 0x99, 0xf0, 0xac, 0x62, 0x7d, + 0xbe, 0xce, 0x63, 0x57, 0xaa, 0x9e, 0x60, 0x2d, 0x7f, 0x81, 0x70, 0xd5, 0x0f, 0x5b, 0xce, 0xf7, + 0xbc, 0x90, 0x49, 0x17, 0xe6, 0x1c, 0x79, 0x7f, 0x27, 0xf2, 0xfe, 0xfc, 0xd8, 0xf7, 0x07, 0xbc, + 0x5e, 0x59, 0x83, 0x29, 0x8c, 0x0b, 0x2e, 0x4c, 0x42, 0x68, 0xb5, 0x18, 0x5c, 0x98, 0xd5, 0x33, + 0x6f, 0xde, 0x5e, 0x9c, 0x78, 0xeb, 0xf6, 0xe2, 0xc4, 0x3f, 0xdd, 0x5e, 0x9c, 0x78, 0xfb, 0xf6, + 0xa2, 0xf0, 0xa3, 0xdb, 0x8b, 0xc2, 0x8f, 0x6f, 0x2f, 0x0a, 0x37, 0xef, 0x2c, 0x0a, 0x5f, 0xbb, + 0xb3, 0x28, 0x7c, 0xe3, 0xce, 0xa2, 0xf0, 0x9d, 0x3b, 0x8b, 0xc2, 0x9b, 0x77, 0x16, 0x85, 0xb7, + 0xee, 0x2c, 0x0a, 0x6f, 0xdf, 0x59, 0x14, 0xfe, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xe4, 0xd9, 0x59, + 0x5a, 0x99, 0x36, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2724,6 +2729,9 @@ return dAtA } func (m *A) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.B) > 0 { @@ -2739,6 +2747,9 @@ } func (m *B) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.C != nil { @@ -2760,6 +2771,9 @@ } func (m *D) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -2772,6 +2786,9 @@ } func (m *C) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field2 != nil { @@ -2803,6 +2820,9 @@ } func (m *U) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Field2) > 0 { @@ -2815,6 +2835,9 @@ } func (m *OldA) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.B) > 0 { @@ -2830,6 +2853,9 @@ } func (m *OldB) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.C != nil { @@ -2847,6 +2873,9 @@ } func (m *OldC) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -2872,6 +2901,9 @@ } func (m *OldU) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -3530,8 +3562,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field7) == 0 { - m.Field7 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -3630,8 +3664,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 @@ -4049,8 +4085,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field7) == 0 { - m.Field7 = make([]float32, 0, packedLen/4) + var elementCount int + elementCount = packedLen / 4 + if elementCount != 0 && len(m.Field7) == 0 { + m.Field7 = make([]float32, 0, elementCount) } for iNdEx < postIndex { var v uint32 @@ -4179,8 +4217,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field2) == 0 { - m.Field2 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field2) == 0 { + m.Field2 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/unrecognizedgroup/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/unrecognizedgroup/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/unrecognizedgroup/Makefile 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/unrecognizedgroup/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -27,4 +27,4 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. regenerate: - (protoc --proto_path=../../../../../:../../protobuf/:. --gogo_out=. unrecognizedgroup.proto) + (protoc --proto_path=../../protobuf/:../../../../../:. --gogo_out=. unrecognizedgroup.proto) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/unrecognizedgroup/unrecognizedgroup.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/unrecognizedgroup/unrecognizedgroup.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/unrecognizedgroup/unrecognizedgroup.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/unrecognizedgroup/unrecognizedgroup.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -233,251 +233,256 @@ func UnrecognizedgroupDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 3892 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x70, 0x1b, 0xe7, - 0x75, 0xd6, 0xe2, 0x46, 0xe0, 0x00, 0x04, 0x97, 0x4b, 0x9a, 0x82, 0xe8, 0x98, 0xa2, 0xe0, 0x1b, - 0x65, 0x37, 0x54, 0x4c, 0x59, 0xb2, 0x04, 0x35, 0x76, 0x41, 0x10, 0x62, 0xe0, 0x92, 0x04, 0xb2, - 0x20, 0xe3, 0x4b, 0xa6, 0xb3, 0xb3, 0x5c, 0xfc, 0x00, 0x57, 0x5a, 0xec, 0x6e, 0x76, 0x17, 0x92, - 0xa9, 0xe9, 0x83, 0x3a, 0xee, 0x2d, 0xd3, 0x69, 0x9b, 0x5e, 0x66, 0x9a, 0xb8, 0x8e, 0x1b, 0x75, - 0x26, 0x75, 0x9a, 0xde, 0x92, 0xa6, 0x4d, 0x93, 0x3e, 0xf5, 0x25, 0x6d, 0xa6, 0x0f, 0x9d, 0xe6, - 0xad, 0x0f, 0x7d, 0x88, 0x5c, 0xcf, 0xf4, 0xe6, 0x34, 0x69, 0xeb, 0x87, 0xcc, 0xf8, 0x25, 0xf3, - 0xdf, 0x16, 0xbb, 0x00, 0xc8, 0x5d, 0x66, 0xc6, 0xce, 0x8b, 0xc4, 0x3d, 0xff, 0xf9, 0xbe, 0x3d, - 0xff, 0xf9, 0xcf, 0x7f, 0xce, 0xf9, 0xff, 0x05, 0x7c, 0xff, 0x2a, 0x2c, 0xf7, 0x2c, 0xab, 0x67, - 0xa0, 0x0b, 0xb6, 0x63, 0x79, 0xd6, 0xfe, 0xa0, 0x7b, 0xa1, 0x83, 0x5c, 0xcd, 0xd1, 0x6d, 0xcf, - 0x72, 0x56, 0x89, 0x4c, 0x9a, 0xa1, 0x1a, 0xab, 0x5c, 0xa3, 0xbc, 0x0d, 0xb3, 0xd7, 0x75, 0x03, - 0x6d, 0xf8, 0x8a, 0x6d, 0xe4, 0x49, 0x57, 0x20, 0xd5, 0xd5, 0x0d, 0x54, 0x12, 0x96, 0x93, 0x2b, - 0xf9, 0xb5, 0x47, 0x56, 0x47, 0x40, 0xab, 0x61, 0x44, 0x0b, 0x8b, 0x65, 0x82, 0x28, 0xbf, 0x9d, - 0x82, 0xb9, 0x09, 0xa3, 0x92, 0x04, 0x29, 0x53, 0xed, 0x63, 0x46, 0x61, 0x25, 0x27, 0x93, 0xbf, - 0xa5, 0x12, 0x4c, 0xd9, 0xaa, 0x76, 0x53, 0xed, 0xa1, 0x52, 0x82, 0x88, 0xf9, 0xa3, 0xb4, 0x04, - 0xd0, 0x41, 0x36, 0x32, 0x3b, 0xc8, 0xd4, 0x0e, 0x4b, 0xc9, 0xe5, 0xe4, 0x4a, 0x4e, 0x0e, 0x48, - 0xa4, 0x27, 0x61, 0xd6, 0x1e, 0xec, 0x1b, 0xba, 0xa6, 0x04, 0xd4, 0x60, 0x39, 0xb9, 0x92, 0x96, - 0x45, 0x3a, 0xb0, 0x31, 0x54, 0x7e, 0x1c, 0x66, 0x6e, 0x23, 0xf5, 0x66, 0x50, 0x35, 0x4f, 0x54, - 0x8b, 0x58, 0x1c, 0x50, 0xac, 0x41, 0xa1, 0x8f, 0x5c, 0x57, 0xed, 0x21, 0xc5, 0x3b, 0xb4, 0x51, - 0x29, 0x45, 0x66, 0xbf, 0x3c, 0x36, 0xfb, 0xd1, 0x99, 0xe7, 0x19, 0x6a, 0xf7, 0xd0, 0x46, 0x52, - 0x15, 0x72, 0xc8, 0x1c, 0xf4, 0x29, 0x43, 0xfa, 0x08, 0xff, 0xd5, 0xcd, 0x41, 0x7f, 0x94, 0x25, - 0x8b, 0x61, 0x8c, 0x62, 0xca, 0x45, 0xce, 0x2d, 0x5d, 0x43, 0xa5, 0x0c, 0x21, 0x78, 0x7c, 0x8c, - 0xa0, 0x4d, 0xc7, 0x47, 0x39, 0x38, 0x4e, 0xaa, 0x41, 0x0e, 0xbd, 0xe2, 0x21, 0xd3, 0xd5, 0x2d, - 0xb3, 0x34, 0x45, 0x48, 0x1e, 0x9d, 0xb0, 0x8a, 0xc8, 0xe8, 0x8c, 0x52, 0x0c, 0x71, 0xd2, 0x65, - 0x98, 0xb2, 0x6c, 0x4f, 0xb7, 0x4c, 0xb7, 0x94, 0x5d, 0x16, 0x56, 0xf2, 0x6b, 0x1f, 0x9a, 0x18, - 0x08, 0x4d, 0xaa, 0x23, 0x73, 0x65, 0xa9, 0x01, 0xa2, 0x6b, 0x0d, 0x1c, 0x0d, 0x29, 0x9a, 0xd5, - 0x41, 0x8a, 0x6e, 0x76, 0xad, 0x52, 0x8e, 0x10, 0x9c, 0x1d, 0x9f, 0x08, 0x51, 0xac, 0x59, 0x1d, - 0xd4, 0x30, 0xbb, 0x96, 0x5c, 0x74, 0x43, 0xcf, 0xd2, 0x02, 0x64, 0xdc, 0x43, 0xd3, 0x53, 0x5f, - 0x29, 0x15, 0x48, 0x84, 0xb0, 0xa7, 0xf2, 0x37, 0x33, 0x30, 0x13, 0x27, 0xc4, 0xae, 0x41, 0xba, - 0x8b, 0x67, 0x59, 0x4a, 0x9c, 0xc4, 0x07, 0x14, 0x13, 0x76, 0x62, 0xe6, 0xc7, 0x74, 0x62, 0x15, - 0xf2, 0x26, 0x72, 0x3d, 0xd4, 0xa1, 0x11, 0x91, 0x8c, 0x19, 0x53, 0x40, 0x41, 0xe3, 0x21, 0x95, - 0xfa, 0xb1, 0x42, 0xea, 0x45, 0x98, 0xf1, 0x4d, 0x52, 0x1c, 0xd5, 0xec, 0xf1, 0xd8, 0xbc, 0x10, - 0x65, 0xc9, 0x6a, 0x9d, 0xe3, 0x64, 0x0c, 0x93, 0x8b, 0x28, 0xf4, 0x2c, 0x6d, 0x00, 0x58, 0x26, - 0xb2, 0xba, 0x4a, 0x07, 0x69, 0x46, 0x29, 0x7b, 0x84, 0x97, 0x9a, 0x58, 0x65, 0xcc, 0x4b, 0x16, - 0x95, 0x6a, 0x86, 0x74, 0x75, 0x18, 0x6a, 0x53, 0x47, 0x44, 0xca, 0x36, 0xdd, 0x64, 0x63, 0xd1, - 0xb6, 0x07, 0x45, 0x07, 0xe1, 0xb8, 0x47, 0x1d, 0x36, 0xb3, 0x1c, 0x31, 0x62, 0x35, 0x72, 0x66, - 0x32, 0x83, 0xd1, 0x89, 0x4d, 0x3b, 0xc1, 0x47, 0xe9, 0x61, 0xf0, 0x05, 0x0a, 0x09, 0x2b, 0x20, - 0x59, 0xa8, 0xc0, 0x85, 0x3b, 0x6a, 0x1f, 0x2d, 0xde, 0x81, 0x62, 0xd8, 0x3d, 0xd2, 0x3c, 0xa4, - 0x5d, 0x4f, 0x75, 0x3c, 0x12, 0x85, 0x69, 0x99, 0x3e, 0x48, 0x22, 0x24, 0x91, 0xd9, 0x21, 0x59, - 0x2e, 0x2d, 0xe3, 0x3f, 0xa5, 0x9f, 0x19, 0x4e, 0x38, 0x49, 0x26, 0xfc, 0xd8, 0xf8, 0x8a, 0x86, - 0x98, 0x47, 0xe7, 0xbd, 0xf8, 0x0c, 0x4c, 0x87, 0x26, 0x10, 0xf7, 0xd5, 0xe5, 0x9f, 0x87, 0x07, - 0x26, 0x52, 0x4b, 0x2f, 0xc2, 0xfc, 0xc0, 0xd4, 0x4d, 0x0f, 0x39, 0xb6, 0x83, 0x70, 0xc4, 0xd2, - 0x57, 0x95, 0xfe, 0x7d, 0xea, 0x88, 0x98, 0xdb, 0x0b, 0x6a, 0x53, 0x16, 0x79, 0x6e, 0x30, 0x2e, - 0x7c, 0x22, 0x97, 0xfd, 0x8f, 0x29, 0xf1, 0xee, 0xdd, 0xbb, 0x77, 0x13, 0xe5, 0xcf, 0x66, 0x60, - 0x7e, 0xd2, 0x9e, 0x99, 0xb8, 0x7d, 0x17, 0x20, 0x63, 0x0e, 0xfa, 0xfb, 0xc8, 0x21, 0x4e, 0x4a, - 0xcb, 0xec, 0x49, 0xaa, 0x42, 0xda, 0x50, 0xf7, 0x91, 0x51, 0x4a, 0x2d, 0x0b, 0x2b, 0xc5, 0xb5, - 0x27, 0x63, 0xed, 0xca, 0xd5, 0x2d, 0x0c, 0x91, 0x29, 0x52, 0x7a, 0x16, 0x52, 0x2c, 0x45, 0x63, - 0x86, 0x27, 0xe2, 0x31, 0xe0, 0xbd, 0x24, 0x13, 0x9c, 0xf4, 0x20, 0xe4, 0xf0, 0xff, 0x34, 0x36, - 0x32, 0xc4, 0xe6, 0x2c, 0x16, 0xe0, 0xb8, 0x90, 0x16, 0x21, 0x4b, 0xb6, 0x49, 0x07, 0xf1, 0xd2, - 0xe6, 0x3f, 0xe3, 0xc0, 0xea, 0xa0, 0xae, 0x3a, 0x30, 0x3c, 0xe5, 0x96, 0x6a, 0x0c, 0x10, 0x09, - 0xf8, 0x9c, 0x5c, 0x60, 0xc2, 0x4f, 0x60, 0x99, 0x74, 0x16, 0xf2, 0x74, 0x57, 0xe9, 0x66, 0x07, - 0xbd, 0x42, 0xb2, 0x67, 0x5a, 0xa6, 0x1b, 0xad, 0x81, 0x25, 0xf8, 0xf5, 0x37, 0x5c, 0xcb, 0xe4, - 0xa1, 0x49, 0x5e, 0x81, 0x05, 0xe4, 0xf5, 0xcf, 0x8c, 0x26, 0xee, 0x87, 0x26, 0x4f, 0x6f, 0x34, - 0xa6, 0xca, 0x5f, 0x4f, 0x40, 0x8a, 0xe4, 0x8b, 0x19, 0xc8, 0xef, 0xbe, 0xd4, 0xaa, 0x2b, 0x1b, - 0xcd, 0xbd, 0xf5, 0xad, 0xba, 0x28, 0x48, 0x45, 0x00, 0x22, 0xb8, 0xbe, 0xd5, 0xac, 0xee, 0x8a, - 0x09, 0xff, 0xb9, 0xb1, 0xb3, 0x7b, 0xf9, 0x69, 0x31, 0xe9, 0x03, 0xf6, 0xa8, 0x20, 0x15, 0x54, - 0xb8, 0xb8, 0x26, 0xa6, 0x25, 0x11, 0x0a, 0x94, 0xa0, 0xf1, 0x62, 0x7d, 0xe3, 0xf2, 0xd3, 0x62, - 0x26, 0x2c, 0xb9, 0xb8, 0x26, 0x4e, 0x49, 0xd3, 0x90, 0x23, 0x92, 0xf5, 0x66, 0x73, 0x4b, 0xcc, - 0xfa, 0x9c, 0xed, 0x5d, 0xb9, 0xb1, 0xb3, 0x29, 0xe6, 0x7c, 0xce, 0x4d, 0xb9, 0xb9, 0xd7, 0x12, - 0xc1, 0x67, 0xd8, 0xae, 0xb7, 0xdb, 0xd5, 0xcd, 0xba, 0x98, 0xf7, 0x35, 0xd6, 0x5f, 0xda, 0xad, - 0xb7, 0xc5, 0x42, 0xc8, 0xac, 0x8b, 0x6b, 0xe2, 0xb4, 0xff, 0x8a, 0xfa, 0xce, 0xde, 0xb6, 0x58, - 0x94, 0x66, 0x61, 0x9a, 0xbe, 0x82, 0x1b, 0x31, 0x33, 0x22, 0xba, 0xfc, 0xb4, 0x28, 0x0e, 0x0d, - 0xa1, 0x2c, 0xb3, 0x21, 0xc1, 0xe5, 0xa7, 0x45, 0xa9, 0x5c, 0x83, 0x34, 0x89, 0x2e, 0x49, 0x82, - 0xe2, 0x56, 0x75, 0xbd, 0xbe, 0xa5, 0x34, 0x5b, 0xbb, 0x8d, 0xe6, 0x4e, 0x75, 0x4b, 0x14, 0x86, - 0x32, 0xb9, 0xfe, 0xf1, 0xbd, 0x86, 0x5c, 0xdf, 0x10, 0x13, 0x41, 0x59, 0xab, 0x5e, 0xdd, 0xad, - 0x6f, 0x88, 0xc9, 0xb2, 0x06, 0xf3, 0x93, 0xf2, 0xe4, 0xc4, 0x9d, 0x11, 0x58, 0xe2, 0xc4, 0x11, - 0x4b, 0x4c, 0xb8, 0xc6, 0x96, 0xf8, 0xdf, 0x12, 0x30, 0x37, 0xa1, 0x56, 0x4c, 0x7c, 0xc9, 0x73, - 0x90, 0xa6, 0x21, 0x4a, 0xab, 0xe7, 0xf9, 0x89, 0x45, 0x87, 0x04, 0xec, 0x58, 0x05, 0x25, 0xb8, - 0x60, 0x07, 0x91, 0x3c, 0xa2, 0x83, 0xc0, 0x14, 0x63, 0x39, 0xfd, 0xe7, 0xc6, 0x72, 0x3a, 0x2d, - 0x7b, 0x97, 0xe3, 0x94, 0x3d, 0x22, 0x3b, 0x59, 0x6e, 0x4f, 0x4f, 0xc8, 0xed, 0xd7, 0x60, 0x76, - 0x8c, 0x28, 0x76, 0x8e, 0x7d, 0x55, 0x80, 0xd2, 0x51, 0xce, 0x89, 0xc8, 0x74, 0x89, 0x50, 0xa6, - 0xbb, 0x36, 0xea, 0xc1, 0x73, 0x47, 0x2f, 0xc2, 0xd8, 0x5a, 0xbf, 0x29, 0xc0, 0xc2, 0xe4, 0x4e, - 0x71, 0xa2, 0x0d, 0xcf, 0x42, 0xa6, 0x8f, 0xbc, 0x03, 0x8b, 0x77, 0x4b, 0x8f, 0x4d, 0xa8, 0xc1, - 0x78, 0x78, 0x74, 0xb1, 0x19, 0x2a, 0x58, 0xc4, 0x93, 0x47, 0xb5, 0x7b, 0xd4, 0x9a, 0x31, 0x4b, - 0x3f, 0x9d, 0x80, 0x07, 0x26, 0x92, 0x4f, 0x34, 0xf4, 0x21, 0x00, 0xdd, 0xb4, 0x07, 0x1e, 0xed, - 0x88, 0x68, 0x82, 0xcd, 0x11, 0x09, 0x49, 0x5e, 0x38, 0x79, 0x0e, 0x3c, 0x7f, 0x3c, 0x49, 0xc6, - 0x81, 0x8a, 0x88, 0xc2, 0x95, 0xa1, 0xa1, 0x29, 0x62, 0xe8, 0xd2, 0x11, 0x33, 0x1d, 0x0b, 0xcc, - 0x8f, 0x80, 0xa8, 0x19, 0x3a, 0x32, 0x3d, 0xc5, 0xf5, 0x1c, 0xa4, 0xf6, 0x75, 0xb3, 0x47, 0x2a, - 0x48, 0xb6, 0x92, 0xee, 0xaa, 0x86, 0x8b, 0xe4, 0x19, 0x3a, 0xdc, 0xe6, 0xa3, 0x18, 0x41, 0x02, - 0xc8, 0x09, 0x20, 0x32, 0x21, 0x04, 0x1d, 0xf6, 0x11, 0xe5, 0xaf, 0x65, 0x21, 0x1f, 0xe8, 0xab, - 0xa5, 0x73, 0x50, 0xb8, 0xa1, 0xde, 0x52, 0x15, 0x7e, 0x56, 0xa2, 0x9e, 0xc8, 0x63, 0x59, 0x8b, - 0x9d, 0x97, 0x3e, 0x02, 0xf3, 0x44, 0xc5, 0x1a, 0x78, 0xc8, 0x51, 0x34, 0x43, 0x75, 0x5d, 0xe2, - 0xb4, 0x2c, 0x51, 0x95, 0xf0, 0x58, 0x13, 0x0f, 0xd5, 0xf8, 0x88, 0x74, 0x09, 0xe6, 0x08, 0xa2, - 0x3f, 0x30, 0x3c, 0xdd, 0x36, 0x90, 0x82, 0x4f, 0x6f, 0x2e, 0xa9, 0x24, 0xbe, 0x65, 0xb3, 0x58, - 0x63, 0x9b, 0x29, 0x60, 0x8b, 0x5c, 0x69, 0x03, 0x1e, 0x22, 0xb0, 0x1e, 0x32, 0x91, 0xa3, 0x7a, - 0x48, 0x41, 0x9f, 0x1a, 0xa8, 0x86, 0xab, 0xa8, 0x66, 0x47, 0x39, 0x50, 0xdd, 0x83, 0xd2, 0x3c, - 0x26, 0x58, 0x4f, 0x94, 0x04, 0xf9, 0x0c, 0x56, 0xdc, 0x64, 0x7a, 0x75, 0xa2, 0x56, 0x35, 0x3b, - 0x1f, 0x53, 0xdd, 0x03, 0xa9, 0x02, 0x0b, 0x84, 0xc5, 0xf5, 0x1c, 0xdd, 0xec, 0x29, 0xda, 0x01, - 0xd2, 0x6e, 0x2a, 0x03, 0xaf, 0x7b, 0xa5, 0xf4, 0x60, 0xf0, 0xfd, 0xc4, 0xc2, 0x36, 0xd1, 0xa9, - 0x61, 0x95, 0x3d, 0xaf, 0x7b, 0x45, 0x6a, 0x43, 0x01, 0x2f, 0x46, 0x5f, 0xbf, 0x83, 0x94, 0xae, - 0xe5, 0x90, 0xd2, 0x58, 0x9c, 0x90, 0x9a, 0x02, 0x1e, 0x5c, 0x6d, 0x32, 0xc0, 0xb6, 0xd5, 0x41, - 0x95, 0x74, 0xbb, 0x55, 0xaf, 0x6f, 0xc8, 0x79, 0xce, 0x72, 0xdd, 0x72, 0x70, 0x40, 0xf5, 0x2c, - 0xdf, 0xc1, 0x79, 0x1a, 0x50, 0x3d, 0x8b, 0xbb, 0xf7, 0x12, 0xcc, 0x69, 0x1a, 0x9d, 0xb3, 0xae, - 0x29, 0xec, 0x8c, 0xe5, 0x96, 0xc4, 0x90, 0xb3, 0x34, 0x6d, 0x93, 0x2a, 0xb0, 0x18, 0x77, 0xa5, - 0xab, 0xf0, 0xc0, 0xd0, 0x59, 0x41, 0xe0, 0xec, 0xd8, 0x2c, 0x47, 0xa1, 0x97, 0x60, 0xce, 0x3e, - 0x1c, 0x07, 0x4a, 0xa1, 0x37, 0xda, 0x87, 0xa3, 0xb0, 0x67, 0x60, 0xde, 0x3e, 0xb0, 0xc7, 0x71, - 0x4f, 0x04, 0x71, 0x92, 0x7d, 0x60, 0x8f, 0x02, 0x1f, 0x25, 0x07, 0x6e, 0x07, 0x69, 0xaa, 0x87, - 0x3a, 0xa5, 0xd3, 0x41, 0xf5, 0xc0, 0x80, 0x74, 0x01, 0x44, 0x4d, 0x53, 0x90, 0xa9, 0xee, 0x1b, - 0x48, 0x51, 0x1d, 0x64, 0xaa, 0x6e, 0xe9, 0x6c, 0x50, 0xb9, 0xa8, 0x69, 0x75, 0x32, 0x5a, 0x25, - 0x83, 0xd2, 0x13, 0x30, 0x6b, 0xed, 0xdf, 0xd0, 0x68, 0x48, 0x2a, 0xb6, 0x83, 0xba, 0xfa, 0x2b, - 0xa5, 0x47, 0x88, 0x7f, 0x67, 0xf0, 0x00, 0x09, 0xc8, 0x16, 0x11, 0x4b, 0xe7, 0x41, 0xd4, 0xdc, - 0x03, 0xd5, 0xb1, 0x49, 0x4e, 0x76, 0x6d, 0x55, 0x43, 0xa5, 0x47, 0xa9, 0x2a, 0x95, 0xef, 0x70, - 0x31, 0xde, 0x12, 0xee, 0x6d, 0xbd, 0xeb, 0x71, 0xc6, 0xc7, 0xe9, 0x96, 0x20, 0x32, 0xc6, 0xb6, - 0x02, 0x22, 0x76, 0x45, 0xe8, 0xc5, 0x2b, 0x44, 0xad, 0x68, 0x1f, 0xd8, 0xc1, 0xf7, 0x3e, 0x0c, - 0xd3, 0x58, 0x73, 0xf8, 0xd2, 0xf3, 0xb4, 0x21, 0xb3, 0x0f, 0x02, 0x6f, 0x7c, 0xdf, 0x7a, 0xe3, - 0x72, 0x05, 0x0a, 0xc1, 0xf8, 0x94, 0x72, 0x40, 0x23, 0x54, 0x14, 0x70, 0xb3, 0x52, 0x6b, 0x6e, - 0xe0, 0x36, 0xe3, 0xe5, 0xba, 0x98, 0xc0, 0xed, 0xce, 0x56, 0x63, 0xb7, 0xae, 0xc8, 0x7b, 0x3b, - 0xbb, 0x8d, 0xed, 0xba, 0x98, 0x0c, 0xf6, 0xd5, 0xdf, 0x4a, 0x40, 0x31, 0x7c, 0x44, 0x92, 0x7e, - 0x1a, 0x4e, 0xf3, 0xfb, 0x0c, 0x17, 0x79, 0xca, 0x6d, 0xdd, 0x21, 0x5b, 0xa6, 0xaf, 0xd2, 0xf2, - 0xe5, 0x2f, 0xda, 0x3c, 0xd3, 0x6a, 0x23, 0xef, 0x05, 0xdd, 0xc1, 0x1b, 0xa2, 0xaf, 0x7a, 0xd2, - 0x16, 0x9c, 0x35, 0x2d, 0xc5, 0xf5, 0x54, 0xb3, 0xa3, 0x3a, 0x1d, 0x65, 0x78, 0x93, 0xa4, 0xa8, - 0x9a, 0x86, 0x5c, 0xd7, 0xa2, 0xa5, 0xca, 0x67, 0xf9, 0x90, 0x69, 0xb5, 0x99, 0xf2, 0x30, 0x87, - 0x57, 0x99, 0xea, 0x48, 0x80, 0x25, 0x8f, 0x0a, 0xb0, 0x07, 0x21, 0xd7, 0x57, 0x6d, 0x05, 0x99, - 0x9e, 0x73, 0x48, 0x1a, 0xe3, 0xac, 0x9c, 0xed, 0xab, 0x76, 0x1d, 0x3f, 0x7f, 0x30, 0xe7, 0x93, - 0x7f, 0x4d, 0x42, 0x21, 0xd8, 0x1c, 0xe3, 0xb3, 0x86, 0x46, 0xea, 0x88, 0x40, 0x32, 0xcd, 0xc3, - 0xc7, 0xb6, 0xd2, 0xab, 0x35, 0x5c, 0x60, 0x2a, 0x19, 0xda, 0xb2, 0xca, 0x14, 0x89, 0x8b, 0x3b, - 0xce, 0x2d, 0x88, 0xb6, 0x08, 0x59, 0x99, 0x3d, 0x49, 0x9b, 0x90, 0xb9, 0xe1, 0x12, 0xee, 0x0c, - 0xe1, 0x7e, 0xe4, 0x78, 0xee, 0xe7, 0xdb, 0x84, 0x3c, 0xf7, 0x7c, 0x5b, 0xd9, 0x69, 0xca, 0xdb, - 0xd5, 0x2d, 0x99, 0xc1, 0xa5, 0x33, 0x90, 0x32, 0xd4, 0x3b, 0x87, 0xe1, 0x52, 0x44, 0x44, 0x71, - 0x1d, 0x7f, 0x06, 0x52, 0xb7, 0x91, 0x7a, 0x33, 0x5c, 0x00, 0x88, 0xe8, 0x7d, 0x0c, 0xfd, 0x0b, - 0x90, 0x26, 0xfe, 0x92, 0x00, 0x98, 0xc7, 0xc4, 0x53, 0x52, 0x16, 0x52, 0xb5, 0xa6, 0x8c, 0xc3, - 0x5f, 0x84, 0x02, 0x95, 0x2a, 0xad, 0x46, 0xbd, 0x56, 0x17, 0x13, 0xe5, 0x4b, 0x90, 0xa1, 0x4e, - 0xc0, 0x5b, 0xc3, 0x77, 0x83, 0x78, 0x8a, 0x3d, 0x32, 0x0e, 0x81, 0x8f, 0xee, 0x6d, 0xaf, 0xd7, - 0x65, 0x31, 0x11, 0x5c, 0x5e, 0x17, 0x0a, 0xc1, 0xbe, 0xf8, 0x83, 0x89, 0xa9, 0xbf, 0x15, 0x20, - 0x1f, 0xe8, 0x73, 0x71, 0x83, 0xa2, 0x1a, 0x86, 0x75, 0x5b, 0x51, 0x0d, 0x5d, 0x75, 0x59, 0x50, - 0x00, 0x11, 0x55, 0xb1, 0x24, 0xee, 0xa2, 0x7d, 0x20, 0xc6, 0xbf, 0x21, 0x80, 0x38, 0xda, 0x62, - 0x8e, 0x18, 0x28, 0xfc, 0x44, 0x0d, 0x7c, 0x5d, 0x80, 0x62, 0xb8, 0xaf, 0x1c, 0x31, 0xef, 0xdc, - 0x4f, 0xd4, 0xbc, 0xef, 0x26, 0x60, 0x3a, 0xd4, 0x4d, 0xc6, 0xb5, 0xee, 0x53, 0x30, 0xab, 0x77, - 0x50, 0xdf, 0xb6, 0x3c, 0x64, 0x6a, 0x87, 0x8a, 0x81, 0x6e, 0x21, 0xa3, 0x54, 0x26, 0x89, 0xe2, - 0xc2, 0xf1, 0xfd, 0xea, 0x6a, 0x63, 0x88, 0xdb, 0xc2, 0xb0, 0xca, 0x5c, 0x63, 0xa3, 0xbe, 0xdd, - 0x6a, 0xee, 0xd6, 0x77, 0x6a, 0x2f, 0x29, 0x7b, 0x3b, 0x3f, 0xbb, 0xd3, 0x7c, 0x61, 0x47, 0x16, - 0xf5, 0x11, 0xb5, 0xf7, 0x71, 0xab, 0xb7, 0x40, 0x1c, 0x35, 0x4a, 0x3a, 0x0d, 0x93, 0xcc, 0x12, - 0x4f, 0x49, 0x73, 0x30, 0xb3, 0xd3, 0x54, 0xda, 0x8d, 0x8d, 0xba, 0x52, 0xbf, 0x7e, 0xbd, 0x5e, - 0xdb, 0x6d, 0xd3, 0x1b, 0x08, 0x5f, 0x7b, 0x37, 0xbc, 0xa9, 0x5f, 0x4b, 0xc2, 0xdc, 0x04, 0x4b, - 0xa4, 0x2a, 0x3b, 0x3b, 0xd0, 0xe3, 0xcc, 0x87, 0xe3, 0x58, 0xbf, 0x8a, 0x4b, 0x7e, 0x4b, 0x75, - 0x3c, 0x76, 0xd4, 0x38, 0x0f, 0xd8, 0x4b, 0xa6, 0xa7, 0x77, 0x75, 0xe4, 0xb0, 0x0b, 0x1b, 0x7a, - 0xa0, 0x98, 0x19, 0xca, 0xe9, 0x9d, 0xcd, 0x4f, 0x81, 0x64, 0x5b, 0xae, 0xee, 0xe9, 0xb7, 0x90, - 0xa2, 0x9b, 0xfc, 0x76, 0x07, 0x1f, 0x30, 0x52, 0xb2, 0xc8, 0x47, 0x1a, 0xa6, 0xe7, 0x6b, 0x9b, - 0xa8, 0xa7, 0x8e, 0x68, 0xe3, 0x04, 0x9e, 0x94, 0x45, 0x3e, 0xe2, 0x6b, 0x9f, 0x83, 0x42, 0xc7, - 0x1a, 0xe0, 0xae, 0x8b, 0xea, 0xe1, 0x7a, 0x21, 0xc8, 0x79, 0x2a, 0xf3, 0x55, 0x58, 0x3f, 0x3d, - 0xbc, 0x56, 0x2a, 0xc8, 0x79, 0x2a, 0xa3, 0x2a, 0x8f, 0xc3, 0x8c, 0xda, 0xeb, 0x39, 0x98, 0x9c, - 0x13, 0xd1, 0x13, 0x42, 0xd1, 0x17, 0x13, 0xc5, 0xc5, 0xe7, 0x21, 0xcb, 0xfd, 0x80, 0x4b, 0x32, - 0xf6, 0x84, 0x62, 0xd3, 0x63, 0x6f, 0x62, 0x25, 0x27, 0x67, 0x4d, 0x3e, 0x78, 0x0e, 0x0a, 0xba, - 0xab, 0x0c, 0x6f, 0xc9, 0x13, 0xcb, 0x89, 0x95, 0xac, 0x9c, 0xd7, 0x5d, 0xff, 0x86, 0xb1, 0xfc, - 0x66, 0x02, 0x8a, 0xe1, 0x5b, 0x7e, 0x69, 0x03, 0xb2, 0x86, 0xa5, 0xa9, 0x24, 0xb4, 0xe8, 0x27, - 0xa6, 0x95, 0x88, 0x0f, 0x03, 0xab, 0x5b, 0x4c, 0x5f, 0xf6, 0x91, 0x8b, 0xff, 0x24, 0x40, 0x96, - 0x8b, 0xa5, 0x05, 0x48, 0xd9, 0xaa, 0x77, 0x40, 0xe8, 0xd2, 0xeb, 0x09, 0x51, 0x90, 0xc9, 0x33, - 0x96, 0xbb, 0xb6, 0x6a, 0x92, 0x10, 0x60, 0x72, 0xfc, 0x8c, 0xd7, 0xd5, 0x40, 0x6a, 0x87, 0x1c, - 0x3f, 0xac, 0x7e, 0x1f, 0x99, 0x9e, 0xcb, 0xd7, 0x95, 0xc9, 0x6b, 0x4c, 0x2c, 0x3d, 0x09, 0xb3, - 0x9e, 0xa3, 0xea, 0x46, 0x48, 0x37, 0x45, 0x74, 0x45, 0x3e, 0xe0, 0x2b, 0x57, 0xe0, 0x0c, 0xe7, - 0xed, 0x20, 0x4f, 0xd5, 0x0e, 0x50, 0x67, 0x08, 0xca, 0x90, 0x6b, 0x86, 0xd3, 0x4c, 0x61, 0x83, - 0x8d, 0x73, 0x6c, 0xf9, 0x3b, 0x02, 0xcc, 0xf2, 0x03, 0x53, 0xc7, 0x77, 0xd6, 0x36, 0x80, 0x6a, - 0x9a, 0x96, 0x17, 0x74, 0xd7, 0x78, 0x28, 0x8f, 0xe1, 0x56, 0xab, 0x3e, 0x48, 0x0e, 0x10, 0x2c, - 0xf6, 0x01, 0x86, 0x23, 0x47, 0xba, 0xed, 0x2c, 0xe4, 0xd9, 0x27, 0x1c, 0xf2, 0x1d, 0x90, 0x1e, - 0xb1, 0x81, 0x8a, 0xf0, 0xc9, 0x4a, 0x9a, 0x87, 0xf4, 0x3e, 0xea, 0xe9, 0x26, 0xbb, 0x98, 0xa5, - 0x0f, 0xfc, 0x22, 0x24, 0xe5, 0x5f, 0x84, 0xac, 0x7f, 0x12, 0xe6, 0x34, 0xab, 0x3f, 0x6a, 0xee, - 0xba, 0x38, 0x72, 0xcc, 0x77, 0x3f, 0x26, 0xbc, 0x0c, 0xc3, 0x16, 0xf3, 0x87, 0x82, 0xf0, 0x87, - 0x89, 0xe4, 0x66, 0x6b, 0xfd, 0xcb, 0x89, 0xc5, 0x4d, 0x0a, 0x6d, 0xf1, 0x99, 0xca, 0xa8, 0x6b, - 0x20, 0x0d, 0x5b, 0x0f, 0x5f, 0x5c, 0x81, 0x0f, 0xf7, 0x74, 0xef, 0x60, 0xb0, 0xbf, 0xaa, 0x59, - 0xfd, 0x0b, 0x3d, 0xab, 0x67, 0x0d, 0x3f, 0x7d, 0xe2, 0x27, 0xf2, 0x40, 0xfe, 0x62, 0x9f, 0x3f, - 0x73, 0xbe, 0x74, 0x31, 0xf2, 0x5b, 0x69, 0x65, 0x07, 0xe6, 0x98, 0xb2, 0x42, 0xbe, 0xbf, 0xd0, - 0x53, 0x84, 0x74, 0xec, 0x1d, 0x56, 0xe9, 0xab, 0x6f, 0x93, 0x72, 0x2d, 0xcf, 0x32, 0x28, 0x1e, - 0xa3, 0x07, 0x8d, 0x8a, 0x0c, 0x0f, 0x84, 0xf8, 0xe8, 0xd6, 0x44, 0x4e, 0x04, 0xe3, 0xb7, 0x18, - 0xe3, 0x5c, 0x80, 0xb1, 0xcd, 0xa0, 0x95, 0x1a, 0x4c, 0x9f, 0x84, 0xeb, 0xef, 0x19, 0x57, 0x01, - 0x05, 0x49, 0x36, 0x61, 0x86, 0x90, 0x68, 0x03, 0xd7, 0xb3, 0xfa, 0x24, 0xef, 0x1d, 0x4f, 0xf3, - 0x0f, 0x6f, 0xd3, 0xbd, 0x52, 0xc4, 0xb0, 0x9a, 0x8f, 0xaa, 0x54, 0x80, 0x7c, 0x72, 0xea, 0x20, - 0xcd, 0x88, 0x60, 0xf8, 0x36, 0x33, 0xc4, 0xd7, 0xaf, 0x7c, 0x02, 0xe6, 0xf1, 0xdf, 0x24, 0x2d, - 0x05, 0x2d, 0x89, 0xbe, 0xf0, 0x2a, 0x7d, 0xe7, 0x55, 0xba, 0x1d, 0xe7, 0x7c, 0x82, 0x80, 0x4d, - 0x81, 0x55, 0xec, 0x21, 0xcf, 0x43, 0x8e, 0xab, 0xa8, 0xc6, 0x24, 0xf3, 0x02, 0x37, 0x06, 0xa5, - 0xcf, 0xbd, 0x13, 0x5e, 0xc5, 0x4d, 0x8a, 0xac, 0x1a, 0x46, 0x65, 0x0f, 0x4e, 0x4f, 0x88, 0x8a, - 0x18, 0x9c, 0xaf, 0x31, 0xce, 0xf9, 0xb1, 0xc8, 0xc0, 0xb4, 0x2d, 0xe0, 0x72, 0x7f, 0x2d, 0x63, - 0x70, 0xfe, 0x3e, 0xe3, 0x94, 0x18, 0x96, 0x2f, 0x29, 0x66, 0x7c, 0x1e, 0x66, 0x6f, 0x21, 0x67, - 0xdf, 0x72, 0xd9, 0x2d, 0x4d, 0x0c, 0xba, 0xd7, 0x19, 0xdd, 0x0c, 0x03, 0x92, 0x6b, 0x1b, 0xcc, - 0x75, 0x15, 0xb2, 0x5d, 0x55, 0x43, 0x31, 0x28, 0x3e, 0xcf, 0x28, 0xa6, 0xb0, 0x3e, 0x86, 0x56, - 0xa1, 0xd0, 0xb3, 0x58, 0x65, 0x8a, 0x86, 0xbf, 0xc1, 0xe0, 0x79, 0x8e, 0x61, 0x14, 0xb6, 0x65, - 0x0f, 0x0c, 0x5c, 0xb6, 0xa2, 0x29, 0xfe, 0x80, 0x53, 0x70, 0x0c, 0xa3, 0x38, 0x81, 0x5b, 0xbf, - 0xc0, 0x29, 0xdc, 0x80, 0x3f, 0x9f, 0x83, 0xbc, 0x65, 0x1a, 0x87, 0x96, 0x19, 0xc7, 0x88, 0x7b, - 0x8c, 0x01, 0x18, 0x04, 0x13, 0x5c, 0x83, 0x5c, 0xdc, 0x85, 0xf8, 0xe2, 0x3b, 0x7c, 0x7b, 0xf0, - 0x15, 0xd8, 0x84, 0x19, 0x9e, 0xa0, 0x74, 0xcb, 0x8c, 0x41, 0xf1, 0x47, 0x8c, 0xa2, 0x18, 0x80, - 0xb1, 0x69, 0x78, 0xc8, 0xf5, 0x7a, 0x28, 0x0e, 0xc9, 0x9b, 0x7c, 0x1a, 0x0c, 0xc2, 0x5c, 0xb9, - 0x8f, 0x4c, 0xed, 0x20, 0x1e, 0xc3, 0x97, 0xb8, 0x2b, 0x39, 0x06, 0x53, 0xd4, 0x60, 0xba, 0xaf, - 0x3a, 0xee, 0x81, 0x6a, 0xc4, 0x5a, 0x8e, 0x3f, 0x66, 0x1c, 0x05, 0x1f, 0xc4, 0x3c, 0x32, 0x30, - 0x4f, 0x42, 0xf3, 0x65, 0xee, 0x91, 0x00, 0x8c, 0x6d, 0x3d, 0xd7, 0x23, 0x57, 0x5a, 0x27, 0x61, - 0xfb, 0x13, 0xbe, 0xf5, 0x28, 0x76, 0x3b, 0xc8, 0x78, 0x0d, 0x72, 0xae, 0x7e, 0x27, 0x16, 0xcd, - 0x9f, 0xf2, 0x95, 0x26, 0x00, 0x0c, 0x7e, 0x09, 0xce, 0x4c, 0x2c, 0x13, 0x31, 0xc8, 0xfe, 0x8c, - 0x91, 0x2d, 0x4c, 0x28, 0x15, 0x2c, 0x25, 0x9c, 0x94, 0xf2, 0xcf, 0x79, 0x4a, 0x40, 0x23, 0x5c, - 0x2d, 0x7c, 0x56, 0x70, 0xd5, 0xee, 0xc9, 0xbc, 0xf6, 0x17, 0xdc, 0x6b, 0x14, 0x1b, 0xf2, 0xda, - 0x2e, 0x2c, 0x30, 0xc6, 0x93, 0xad, 0xeb, 0x57, 0x78, 0x62, 0xa5, 0xe8, 0xbd, 0xf0, 0xea, 0x7e, - 0x12, 0x16, 0x7d, 0x77, 0xf2, 0xa6, 0xd4, 0x55, 0xfa, 0xaa, 0x1d, 0x83, 0xf9, 0xab, 0x8c, 0x99, - 0x67, 0x7c, 0xbf, 0xab, 0x75, 0xb7, 0x55, 0x1b, 0x93, 0xbf, 0x08, 0x25, 0x4e, 0x3e, 0x30, 0x1d, - 0xa4, 0x59, 0x3d, 0x53, 0xbf, 0x83, 0x3a, 0x31, 0xa8, 0xff, 0x72, 0x64, 0xa9, 0xf6, 0x02, 0x70, - 0xcc, 0xdc, 0x00, 0xd1, 0xef, 0x55, 0x14, 0xbd, 0x6f, 0x5b, 0x8e, 0x17, 0xc1, 0xf8, 0x35, 0xbe, - 0x52, 0x3e, 0xae, 0x41, 0x60, 0x95, 0x3a, 0x14, 0xc9, 0x63, 0xdc, 0x90, 0xfc, 0x2b, 0x46, 0x34, - 0x3d, 0x44, 0xb1, 0xc4, 0xa1, 0x59, 0x7d, 0x5b, 0x75, 0xe2, 0xe4, 0xbf, 0xbf, 0xe6, 0x89, 0x83, - 0x41, 0x58, 0xe2, 0xf0, 0x0e, 0x6d, 0x84, 0xab, 0x7d, 0x0c, 0x86, 0xaf, 0xf3, 0xc4, 0xc1, 0x31, - 0x8c, 0x82, 0x37, 0x0c, 0x31, 0x28, 0xfe, 0x86, 0x53, 0x70, 0x0c, 0xa6, 0xf8, 0xf8, 0xb0, 0xd0, - 0x3a, 0xa8, 0xa7, 0xbb, 0x9e, 0x43, 0x5b, 0xe1, 0xe3, 0xa9, 0xbe, 0xf1, 0x4e, 0xb8, 0x09, 0x93, - 0x03, 0x50, 0x9c, 0x89, 0xd8, 0x15, 0x2a, 0x39, 0x29, 0x45, 0x1b, 0xf6, 0x4d, 0x9e, 0x89, 0x02, - 0x30, 0xba, 0x3f, 0x67, 0x46, 0x7a, 0x15, 0x29, 0xea, 0x87, 0x30, 0xa5, 0x5f, 0x78, 0x97, 0x71, - 0x85, 0x5b, 0x95, 0xca, 0x16, 0x0e, 0xa0, 0x70, 0x43, 0x11, 0x4d, 0xf6, 0xea, 0xbb, 0x7e, 0x0c, - 0x85, 0xfa, 0x89, 0xca, 0x75, 0x98, 0x0e, 0x35, 0x13, 0xd1, 0x54, 0xbf, 0xc8, 0xa8, 0x0a, 0xc1, - 0x5e, 0xa2, 0x72, 0x09, 0x52, 0xb8, 0x31, 0x88, 0x86, 0xff, 0x12, 0x83, 0x13, 0xf5, 0xca, 0x47, - 0x21, 0xcb, 0x1b, 0x82, 0x68, 0xe8, 0x2f, 0x33, 0xa8, 0x0f, 0xc1, 0x70, 0xde, 0x0c, 0x44, 0xc3, - 0x7f, 0x85, 0xc3, 0x39, 0x04, 0xc3, 0xe3, 0xbb, 0xf0, 0xef, 0x7e, 0x2d, 0xc5, 0x12, 0x3a, 0xf7, - 0xdd, 0x35, 0x98, 0x62, 0x5d, 0x40, 0x34, 0xfa, 0xd3, 0xec, 0xe5, 0x1c, 0x51, 0x79, 0x06, 0xd2, - 0x31, 0x1d, 0xfe, 0xeb, 0x0c, 0x4a, 0xf5, 0x2b, 0x35, 0xc8, 0x07, 0x2a, 0x7f, 0x34, 0xfc, 0x37, - 0x18, 0x3c, 0x88, 0xc2, 0xa6, 0xb3, 0xca, 0x1f, 0x4d, 0xf0, 0x9b, 0xdc, 0x74, 0x86, 0xc0, 0x6e, - 0xe3, 0x45, 0x3f, 0x1a, 0xfd, 0x19, 0xee, 0x75, 0x0e, 0xa9, 0x3c, 0x07, 0x39, 0x3f, 0x91, 0x47, - 0xe3, 0x7f, 0x8b, 0xe1, 0x87, 0x18, 0xec, 0x81, 0x40, 0x21, 0x89, 0xa6, 0xf8, 0x6d, 0xee, 0x81, - 0x00, 0x0a, 0x6f, 0xa3, 0xd1, 0xe6, 0x20, 0x9a, 0xe9, 0x77, 0xf8, 0x36, 0x1a, 0xe9, 0x0d, 0xf0, - 0x6a, 0x92, 0x7c, 0x1a, 0x4d, 0xf1, 0xbb, 0x7c, 0x35, 0x89, 0x3e, 0x36, 0x63, 0xb4, 0xda, 0x46, - 0x73, 0xfc, 0x1e, 0x37, 0x63, 0xa4, 0xd8, 0x56, 0x5a, 0x20, 0x8d, 0x57, 0xda, 0x68, 0xbe, 0xcf, - 0x32, 0xbe, 0xd9, 0xb1, 0x42, 0x5b, 0x79, 0x01, 0x16, 0x26, 0x57, 0xd9, 0x68, 0xd6, 0xcf, 0xbd, - 0x3b, 0x72, 0x2e, 0x0a, 0x16, 0xd9, 0xca, 0xee, 0x30, 0x5d, 0x07, 0x2b, 0x6c, 0x34, 0xed, 0x6b, - 0xef, 0x86, 0x33, 0x76, 0xb0, 0xc0, 0x56, 0xaa, 0x00, 0xc3, 0xe2, 0x16, 0xcd, 0xf5, 0x3a, 0xe3, - 0x0a, 0x80, 0xf0, 0xd6, 0x60, 0xb5, 0x2d, 0x1a, 0xff, 0x79, 0xbe, 0x35, 0x18, 0x02, 0x6f, 0x0d, - 0x5e, 0xd6, 0xa2, 0xd1, 0x6f, 0xf0, 0xad, 0xc1, 0x21, 0x38, 0xb2, 0x03, 0x95, 0x23, 0x9a, 0xe1, - 0x1e, 0x8f, 0xec, 0x00, 0xaa, 0x72, 0x0d, 0xb2, 0xe6, 0xc0, 0x30, 0x70, 0x80, 0x4a, 0xc7, 0xff, - 0x40, 0xac, 0xf4, 0x9f, 0xef, 0x31, 0x0b, 0x38, 0xa0, 0x72, 0x09, 0xd2, 0xa8, 0xbf, 0x8f, 0x3a, - 0x51, 0xc8, 0xff, 0x7a, 0x8f, 0x27, 0x25, 0xac, 0x5d, 0x79, 0x0e, 0x80, 0x1e, 0xed, 0xc9, 0x67, - 0xab, 0x08, 0xec, 0x7f, 0xbf, 0xc7, 0x7e, 0xba, 0x31, 0x84, 0x0c, 0x09, 0xe8, 0x0f, 0x41, 0x8e, - 0x27, 0x78, 0x27, 0x4c, 0x40, 0x66, 0x7d, 0x15, 0xa6, 0x6e, 0xb8, 0x96, 0xe9, 0xa9, 0xbd, 0x28, - 0xf4, 0xf7, 0x18, 0x9a, 0xeb, 0x63, 0x87, 0xf5, 0x2d, 0x07, 0x79, 0x6a, 0xcf, 0x8d, 0xc2, 0xfe, - 0x0f, 0xc3, 0xfa, 0x00, 0x0c, 0xd6, 0x54, 0xd7, 0x8b, 0x33, 0xef, 0xef, 0x73, 0x30, 0x07, 0x60, - 0xa3, 0xf1, 0xdf, 0x37, 0xd1, 0x61, 0x14, 0xf6, 0x07, 0xdc, 0x68, 0xa6, 0x5f, 0xf9, 0x28, 0xe4, - 0xf0, 0x9f, 0xf4, 0xf7, 0x58, 0x11, 0xe0, 0xff, 0x65, 0xe0, 0x21, 0x02, 0xbf, 0xd9, 0xf5, 0x3a, - 0x9e, 0x1e, 0xed, 0xec, 0xff, 0x63, 0x2b, 0xcd, 0xf5, 0x2b, 0x55, 0xc8, 0xbb, 0x5e, 0xa7, 0x33, - 0x60, 0xfd, 0x55, 0x04, 0xfc, 0xff, 0xdf, 0xf3, 0x8f, 0xdc, 0x3e, 0x66, 0xbd, 0x3e, 0xf9, 0xf6, - 0x10, 0x36, 0xad, 0x4d, 0x8b, 0xde, 0x1b, 0xbe, 0x5c, 0x8e, 0xbe, 0x00, 0x84, 0xef, 0xa5, 0xe0, - 0x74, 0x30, 0x79, 0xf4, 0x1c, 0x6b, 0x60, 0xb3, 0x1b, 0xc1, 0xd9, 0xb1, 0x81, 0xc5, 0x93, 0xdd, - 0x29, 0x96, 0x4d, 0x80, 0x1d, 0x74, 0x7b, 0xc7, 0xda, 0xc4, 0x60, 0x69, 0x01, 0x32, 0x64, 0x5e, - 0x4f, 0x91, 0xaf, 0x62, 0x49, 0x99, 0x3d, 0xf9, 0xf2, 0x8b, 0xe4, 0x27, 0xe0, 0x02, 0x93, 0x5f, - 0x94, 0xca, 0x20, 0x54, 0xc9, 0xb5, 0x7f, 0x7e, 0x6d, 0x7e, 0x75, 0xdc, 0xc8, 0xaa, 0x2c, 0x54, - 0x2b, 0x85, 0x5f, 0xbd, 0x77, 0x56, 0xf8, 0xcc, 0xbd, 0xb3, 0xc2, 0x17, 0xee, 0x9d, 0x15, 0xca, - 0xe7, 0x41, 0xa8, 0x62, 0xba, 0x2a, 0x61, 0xe0, 0xaf, 0xa1, 0x4f, 0x23, 0xaa, 0xff, 0x98, 0x80, - 0x42, 0xd3, 0xe8, 0xbc, 0xa0, 0x7b, 0x07, 0xc7, 0x5b, 0xf7, 0x2c, 0x64, 0xc8, 0xfb, 0x9e, 0x22, - 0x57, 0xbd, 0xb0, 0xf6, 0xd8, 0x04, 0x53, 0x82, 0x44, 0xab, 0xe4, 0xdf, 0xa7, 0x64, 0x86, 0x3a, - 0x72, 0x76, 0x9c, 0x77, 0x8d, 0xdc, 0x09, 0xc7, 0xe5, 0x5d, 0x63, 0xbc, 0x6b, 0x8b, 0x2d, 0xc8, - 0x6c, 0x86, 0xdf, 0x70, 0x94, 0x5f, 0xd7, 0xf8, 0x0f, 0xe7, 0xe8, 0xd3, 0x51, 0x16, 0x2d, 0x5e, - 0x61, 0x8c, 0x6b, 0xb1, 0x18, 0x87, 0xc8, 0xb5, 0xf5, 0x95, 0x6f, 0xdf, 0x5f, 0x3a, 0xf5, 0xcf, - 0xf7, 0x97, 0x4e, 0xfd, 0xcb, 0xfd, 0xa5, 0x53, 0xdf, 0xbd, 0xbf, 0x24, 0xfc, 0xe0, 0xfe, 0x92, - 0xf0, 0xc3, 0xfb, 0x4b, 0xc2, 0xdd, 0xb7, 0x96, 0x84, 0x2f, 0xbd, 0xb5, 0x24, 0x7c, 0xe5, 0xad, - 0x25, 0xe1, 0x1b, 0x6f, 0x2d, 0x09, 0x3f, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x55, 0x5d, 0xb3, 0xaa, - 0x8a, 0x33, 0x00, 0x00, + // 3974 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x70, 0xdc, 0xe6, + 0x75, 0x16, 0xf6, 0xc6, 0xdd, 0xb3, 0xcb, 0x25, 0x08, 0xd2, 0xd4, 0x8a, 0x8e, 0x29, 0x69, 0x7d, + 0xa3, 0xec, 0x86, 0x8a, 0x29, 0x4b, 0x96, 0x56, 0x8d, 0xdd, 0x25, 0xb9, 0x62, 0xe8, 0x92, 0xdc, + 0x0d, 0x96, 0x8c, 0x2f, 0x99, 0x0e, 0x06, 0xc4, 0xfe, 0xbb, 0x84, 0x84, 0x05, 0x10, 0x00, 0x2b, + 0x99, 0x9a, 0x3e, 0xa8, 0xe3, 0xde, 0x32, 0x9d, 0xb6, 0xe9, 0x65, 0xa6, 0x89, 0xeb, 0xb8, 0x51, + 0x3a, 0x8d, 0xd3, 0xf4, 0x96, 0x34, 0x6d, 0x9a, 0xa4, 0x2f, 0x7d, 0x49, 0x9b, 0xe9, 0x43, 0xa7, + 0x79, 0xeb, 0x43, 0x1f, 0x22, 0xd7, 0x33, 0xbd, 0x39, 0x4d, 0xda, 0xea, 0x21, 0x33, 0x7e, 0xc9, + 0xfc, 0x37, 0x2c, 0x80, 0x5d, 0x12, 0x60, 0x66, 0xec, 0xbc, 0x48, 0xc4, 0xf9, 0xcf, 0xf7, 0xe1, + 0xfc, 0xe7, 0x3f, 0xff, 0x39, 0xe7, 0xff, 0xb1, 0xf0, 0xfd, 0x2b, 0x70, 0xa6, 0x67, 0x59, 0x3d, + 0x03, 0x9d, 0xb7, 0x1d, 0xcb, 0xb3, 0xf6, 0x06, 0xdd, 0xf3, 0x1d, 0xe4, 0x6a, 0x8e, 0x6e, 0x7b, + 0x96, 0xb3, 0x44, 0x64, 0xd2, 0x14, 0xd5, 0x58, 0xe2, 0x1a, 0xd5, 0x2d, 0x98, 0xbe, 0xa6, 0x1b, + 0x68, 0xcd, 0x57, 0x6c, 0x23, 0x4f, 0xba, 0x0c, 0x99, 0xae, 0x6e, 0xa0, 0x8a, 0x70, 0x26, 0xbd, + 0x58, 0x5c, 0x7e, 0x64, 0x29, 0x02, 0x5a, 0x0a, 0x23, 0x5a, 0x58, 0x2c, 0x13, 0x44, 0xf5, 0xed, + 0x0c, 0xcc, 0x8c, 0x19, 0x95, 0x24, 0xc8, 0x98, 0x6a, 0x1f, 0x33, 0x0a, 0x8b, 0x05, 0x99, 0xfc, + 0x2d, 0x55, 0x60, 0xc2, 0x56, 0xb5, 0x1b, 0x6a, 0x0f, 0x55, 0x52, 0x44, 0xcc, 0x1f, 0xa5, 0x05, + 0x80, 0x0e, 0xb2, 0x91, 0xd9, 0x41, 0xa6, 0x76, 0x50, 0x49, 0x9f, 0x49, 0x2f, 0x16, 0xe4, 0x80, + 0x44, 0x7a, 0x12, 0xa6, 0xed, 0xc1, 0x9e, 0xa1, 0x6b, 0x4a, 0x40, 0x0d, 0xce, 0xa4, 0x17, 0xb3, + 0xb2, 0x48, 0x07, 0xd6, 0x86, 0xca, 0x8f, 0xc3, 0xd4, 0x2d, 0xa4, 0xde, 0x08, 0xaa, 0x16, 0x89, + 0x6a, 0x19, 0x8b, 0x03, 0x8a, 0xab, 0x50, 0xea, 0x23, 0xd7, 0x55, 0x7b, 0x48, 0xf1, 0x0e, 0x6c, + 0x54, 0xc9, 0x90, 0xd9, 0x9f, 0x19, 0x99, 0x7d, 0x74, 0xe6, 0x45, 0x86, 0xda, 0x39, 0xb0, 0x91, + 0x54, 0x87, 0x02, 0x32, 0x07, 0x7d, 0xca, 0x90, 0x3d, 0xc4, 0x7f, 0x0d, 0x73, 0xd0, 0x8f, 0xb2, + 0xe4, 0x31, 0x8c, 0x51, 0x4c, 0xb8, 0xc8, 0xb9, 0xa9, 0x6b, 0xa8, 0x92, 0x23, 0x04, 0x8f, 0x8f, + 0x10, 0xb4, 0xe9, 0x78, 0x94, 0x83, 0xe3, 0xa4, 0x55, 0x28, 0xa0, 0x57, 0x3c, 0x64, 0xba, 0xba, + 0x65, 0x56, 0x26, 0x08, 0xc9, 0xa3, 0x63, 0x56, 0x11, 0x19, 0x9d, 0x28, 0xc5, 0x10, 0x27, 0x5d, + 0x82, 0x09, 0xcb, 0xf6, 0x74, 0xcb, 0x74, 0x2b, 0xf9, 0x33, 0xc2, 0x62, 0x71, 0xf9, 0x03, 0x63, + 0x03, 0xa1, 0x49, 0x75, 0x64, 0xae, 0x2c, 0x6d, 0x80, 0xe8, 0x5a, 0x03, 0x47, 0x43, 0x8a, 0x66, + 0x75, 0x90, 0xa2, 0x9b, 0x5d, 0xab, 0x52, 0x20, 0x04, 0xa7, 0x47, 0x27, 0x42, 0x14, 0x57, 0xad, + 0x0e, 0xda, 0x30, 0xbb, 0x96, 0x5c, 0x76, 0x43, 0xcf, 0xd2, 0x1c, 0xe4, 0xdc, 0x03, 0xd3, 0x53, + 0x5f, 0xa9, 0x94, 0x48, 0x84, 0xb0, 0xa7, 0xea, 0x37, 0x72, 0x30, 0x95, 0x24, 0xc4, 0xae, 0x42, + 0xb6, 0x8b, 0x67, 0x59, 0x49, 0x1d, 0xc7, 0x07, 0x14, 0x13, 0x76, 0x62, 0xee, 0xc7, 0x74, 0x62, + 0x1d, 0x8a, 0x26, 0x72, 0x3d, 0xd4, 0xa1, 0x11, 0x91, 0x4e, 0x18, 0x53, 0x40, 0x41, 0xa3, 0x21, + 0x95, 0xf9, 0xb1, 0x42, 0xea, 0x45, 0x98, 0xf2, 0x4d, 0x52, 0x1c, 0xd5, 0xec, 0xf1, 0xd8, 0x3c, + 0x1f, 0x67, 0xc9, 0x52, 0x83, 0xe3, 0x64, 0x0c, 0x93, 0xcb, 0x28, 0xf4, 0x2c, 0xad, 0x01, 0x58, + 0x26, 0xb2, 0xba, 0x4a, 0x07, 0x69, 0x46, 0x25, 0x7f, 0x88, 0x97, 0x9a, 0x58, 0x65, 0xc4, 0x4b, + 0x16, 0x95, 0x6a, 0x86, 0x74, 0x65, 0x18, 0x6a, 0x13, 0x87, 0x44, 0xca, 0x16, 0xdd, 0x64, 0x23, + 0xd1, 0xb6, 0x0b, 0x65, 0x07, 0xe1, 0xb8, 0x47, 0x1d, 0x36, 0xb3, 0x02, 0x31, 0x62, 0x29, 0x76, + 0x66, 0x32, 0x83, 0xd1, 0x89, 0x4d, 0x3a, 0xc1, 0x47, 0xe9, 0x61, 0xf0, 0x05, 0x0a, 0x09, 0x2b, + 0x20, 0x59, 0xa8, 0xc4, 0x85, 0xdb, 0x6a, 0x1f, 0xcd, 0xdf, 0x86, 0x72, 0xd8, 0x3d, 0xd2, 0x2c, + 0x64, 0x5d, 0x4f, 0x75, 0x3c, 0x12, 0x85, 0x59, 0x99, 0x3e, 0x48, 0x22, 0xa4, 0x91, 0xd9, 0x21, + 0x59, 0x2e, 0x2b, 0xe3, 0x3f, 0xa5, 0x9f, 0x19, 0x4e, 0x38, 0x4d, 0x26, 0xfc, 0xd8, 0xe8, 0x8a, + 0x86, 0x98, 0xa3, 0xf3, 0x9e, 0x7f, 0x06, 0x26, 0x43, 0x13, 0x48, 0xfa, 0xea, 0xea, 0xcf, 0xc3, + 0x03, 0x63, 0xa9, 0xa5, 0x17, 0x61, 0x76, 0x60, 0xea, 0xa6, 0x87, 0x1c, 0xdb, 0x41, 0x38, 0x62, + 0xe9, 0xab, 0x2a, 0xff, 0x3e, 0x71, 0x48, 0xcc, 0xed, 0x06, 0xb5, 0x29, 0x8b, 0x3c, 0x33, 0x18, + 0x15, 0x3e, 0x51, 0xc8, 0xff, 0xc7, 0x84, 0x78, 0xe7, 0xce, 0x9d, 0x3b, 0xa9, 0xea, 0xa7, 0x73, + 0x30, 0x3b, 0x6e, 0xcf, 0x8c, 0xdd, 0xbe, 0x73, 0x90, 0x33, 0x07, 0xfd, 0x3d, 0xe4, 0x10, 0x27, + 0x65, 0x65, 0xf6, 0x24, 0xd5, 0x21, 0x6b, 0xa8, 0x7b, 0xc8, 0xa8, 0x64, 0xce, 0x08, 0x8b, 0xe5, + 0xe5, 0x27, 0x13, 0xed, 0xca, 0xa5, 0x4d, 0x0c, 0x91, 0x29, 0x52, 0x7a, 0x16, 0x32, 0x2c, 0x45, + 0x63, 0x86, 0x27, 0x92, 0x31, 0xe0, 0xbd, 0x24, 0x13, 0x9c, 0xf4, 0x20, 0x14, 0xf0, 0xff, 0x34, + 0x36, 0x72, 0xc4, 0xe6, 0x3c, 0x16, 0xe0, 0xb8, 0x90, 0xe6, 0x21, 0x4f, 0xb6, 0x49, 0x07, 0xf1, + 0xd2, 0xe6, 0x3f, 0xe3, 0xc0, 0xea, 0xa0, 0xae, 0x3a, 0x30, 0x3c, 0xe5, 0xa6, 0x6a, 0x0c, 0x10, + 0x09, 0xf8, 0x82, 0x5c, 0x62, 0xc2, 0x8f, 0x61, 0x99, 0x74, 0x1a, 0x8a, 0x74, 0x57, 0xe9, 0x66, + 0x07, 0xbd, 0x42, 0xb2, 0x67, 0x56, 0xa6, 0x1b, 0x6d, 0x03, 0x4b, 0xf0, 0xeb, 0xaf, 0xbb, 0x96, + 0xc9, 0x43, 0x93, 0xbc, 0x02, 0x0b, 0xc8, 0xeb, 0x9f, 0x89, 0x26, 0xee, 0x87, 0xc6, 0x4f, 0x2f, + 0x1a, 0x53, 0xd5, 0xaf, 0xa5, 0x20, 0x43, 0xf2, 0xc5, 0x14, 0x14, 0x77, 0x5e, 0x6a, 0x35, 0x94, + 0xb5, 0xe6, 0xee, 0xca, 0x66, 0x43, 0x14, 0xa4, 0x32, 0x00, 0x11, 0x5c, 0xdb, 0x6c, 0xd6, 0x77, + 0xc4, 0x94, 0xff, 0xbc, 0xb1, 0xbd, 0x73, 0xe9, 0x69, 0x31, 0xed, 0x03, 0x76, 0xa9, 0x20, 0x13, + 0x54, 0xb8, 0xb0, 0x2c, 0x66, 0x25, 0x11, 0x4a, 0x94, 0x60, 0xe3, 0xc5, 0xc6, 0xda, 0xa5, 0xa7, + 0xc5, 0x5c, 0x58, 0x72, 0x61, 0x59, 0x9c, 0x90, 0x26, 0xa1, 0x40, 0x24, 0x2b, 0xcd, 0xe6, 0xa6, + 0x98, 0xf7, 0x39, 0xdb, 0x3b, 0xf2, 0xc6, 0xf6, 0xba, 0x58, 0xf0, 0x39, 0xd7, 0xe5, 0xe6, 0x6e, + 0x4b, 0x04, 0x9f, 0x61, 0xab, 0xd1, 0x6e, 0xd7, 0xd7, 0x1b, 0x62, 0xd1, 0xd7, 0x58, 0x79, 0x69, + 0xa7, 0xd1, 0x16, 0x4b, 0x21, 0xb3, 0x2e, 0x2c, 0x8b, 0x93, 0xfe, 0x2b, 0x1a, 0xdb, 0xbb, 0x5b, + 0x62, 0x59, 0x9a, 0x86, 0x49, 0xfa, 0x0a, 0x6e, 0xc4, 0x54, 0x44, 0x74, 0xe9, 0x69, 0x51, 0x1c, + 0x1a, 0x42, 0x59, 0xa6, 0x43, 0x82, 0x4b, 0x4f, 0x8b, 0x52, 0x75, 0x15, 0xb2, 0x24, 0xba, 0x24, + 0x09, 0xca, 0x9b, 0xf5, 0x95, 0xc6, 0xa6, 0xd2, 0x6c, 0xed, 0x6c, 0x34, 0xb7, 0xeb, 0x9b, 0xa2, + 0x30, 0x94, 0xc9, 0x8d, 0x8f, 0xee, 0x6e, 0xc8, 0x8d, 0x35, 0x31, 0x15, 0x94, 0xb5, 0x1a, 0xf5, + 0x9d, 0xc6, 0x9a, 0x98, 0xae, 0x6a, 0x30, 0x3b, 0x2e, 0x4f, 0x8e, 0xdd, 0x19, 0x81, 0x25, 0x4e, + 0x1d, 0xb2, 0xc4, 0x84, 0x6b, 0x64, 0x89, 0xff, 0x2d, 0x05, 0x33, 0x63, 0x6a, 0xc5, 0xd8, 0x97, + 0x3c, 0x07, 0x59, 0x1a, 0xa2, 0xb4, 0x7a, 0x9e, 0x1b, 0x5b, 0x74, 0x48, 0xc0, 0x8e, 0x54, 0x50, + 0x82, 0x0b, 0x76, 0x10, 0xe9, 0x43, 0x3a, 0x08, 0x4c, 0x31, 0x92, 0xd3, 0x7f, 0x6e, 0x24, 0xa7, + 0xd3, 0xb2, 0x77, 0x29, 0x49, 0xd9, 0x23, 0xb2, 0xe3, 0xe5, 0xf6, 0xec, 0x98, 0xdc, 0x7e, 0x15, + 0xa6, 0x47, 0x88, 0x12, 0xe7, 0xd8, 0x57, 0x05, 0xa8, 0x1c, 0xe6, 0x9c, 0x98, 0x4c, 0x97, 0x0a, + 0x65, 0xba, 0xab, 0x51, 0x0f, 0x9e, 0x3d, 0x7c, 0x11, 0x46, 0xd6, 0xfa, 0x4d, 0x01, 0xe6, 0xc6, + 0x77, 0x8a, 0x63, 0x6d, 0x78, 0x16, 0x72, 0x7d, 0xe4, 0xed, 0x5b, 0xbc, 0x5b, 0x7a, 0x6c, 0x4c, + 0x0d, 0xc6, 0xc3, 0xd1, 0xc5, 0x66, 0xa8, 0x60, 0x11, 0x4f, 0x1f, 0xd6, 0xee, 0x51, 0x6b, 0x46, + 0x2c, 0xfd, 0x64, 0x0a, 0x1e, 0x18, 0x4b, 0x3e, 0xd6, 0xd0, 0x87, 0x00, 0x74, 0xd3, 0x1e, 0x78, + 0xb4, 0x23, 0xa2, 0x09, 0xb6, 0x40, 0x24, 0x24, 0x79, 0xe1, 0xe4, 0x39, 0xf0, 0xfc, 0xf1, 0x34, + 0x19, 0x07, 0x2a, 0x22, 0x0a, 0x97, 0x87, 0x86, 0x66, 0x88, 0xa1, 0x0b, 0x87, 0xcc, 0x74, 0x24, + 0x30, 0x3f, 0x04, 0xa2, 0x66, 0xe8, 0xc8, 0xf4, 0x14, 0xd7, 0x73, 0x90, 0xda, 0xd7, 0xcd, 0x1e, + 0xa9, 0x20, 0xf9, 0x5a, 0xb6, 0xab, 0x1a, 0x2e, 0x92, 0xa7, 0xe8, 0x70, 0x9b, 0x8f, 0x62, 0x04, + 0x09, 0x20, 0x27, 0x80, 0xc8, 0x85, 0x10, 0x74, 0xd8, 0x47, 0x54, 0xbf, 0x9a, 0x87, 0x62, 0xa0, + 0xaf, 0x96, 0xce, 0x42, 0xe9, 0xba, 0x7a, 0x53, 0x55, 0xf8, 0x59, 0x89, 0x7a, 0xa2, 0x88, 0x65, + 0x2d, 0x76, 0x5e, 0xfa, 0x10, 0xcc, 0x12, 0x15, 0x6b, 0xe0, 0x21, 0x47, 0xd1, 0x0c, 0xd5, 0x75, + 0x89, 0xd3, 0xf2, 0x44, 0x55, 0xc2, 0x63, 0x4d, 0x3c, 0xb4, 0xca, 0x47, 0xa4, 0x8b, 0x30, 0x43, + 0x10, 0xfd, 0x81, 0xe1, 0xe9, 0xb6, 0x81, 0x14, 0x7c, 0x7a, 0x73, 0x49, 0x25, 0xf1, 0x2d, 0x9b, + 0xc6, 0x1a, 0x5b, 0x4c, 0x01, 0x5b, 0xe4, 0x4a, 0x6b, 0xf0, 0x10, 0x81, 0xf5, 0x90, 0x89, 0x1c, + 0xd5, 0x43, 0x0a, 0xfa, 0xc4, 0x40, 0x35, 0x5c, 0x45, 0x35, 0x3b, 0xca, 0xbe, 0xea, 0xee, 0x57, + 0x66, 0x31, 0xc1, 0x4a, 0xaa, 0x22, 0xc8, 0xa7, 0xb0, 0xe2, 0x3a, 0xd3, 0x6b, 0x10, 0xb5, 0xba, + 0xd9, 0xf9, 0x88, 0xea, 0xee, 0x4b, 0x35, 0x98, 0x23, 0x2c, 0xae, 0xe7, 0xe8, 0x66, 0x4f, 0xd1, + 0xf6, 0x91, 0x76, 0x43, 0x19, 0x78, 0xdd, 0xcb, 0x95, 0x07, 0x83, 0xef, 0x27, 0x16, 0xb6, 0x89, + 0xce, 0x2a, 0x56, 0xd9, 0xf5, 0xba, 0x97, 0xa5, 0x36, 0x94, 0xf0, 0x62, 0xf4, 0xf5, 0xdb, 0x48, + 0xe9, 0x5a, 0x0e, 0x29, 0x8d, 0xe5, 0x31, 0xa9, 0x29, 0xe0, 0xc1, 0xa5, 0x26, 0x03, 0x6c, 0x59, + 0x1d, 0x54, 0xcb, 0xb6, 0x5b, 0x8d, 0xc6, 0x9a, 0x5c, 0xe4, 0x2c, 0xd7, 0x2c, 0x07, 0x07, 0x54, + 0xcf, 0xf2, 0x1d, 0x5c, 0xa4, 0x01, 0xd5, 0xb3, 0xb8, 0x7b, 0x2f, 0xc2, 0x8c, 0xa6, 0xd1, 0x39, + 0xeb, 0x9a, 0xc2, 0xce, 0x58, 0x6e, 0x45, 0x0c, 0x39, 0x4b, 0xd3, 0xd6, 0xa9, 0x02, 0x8b, 0x71, + 0x57, 0xba, 0x02, 0x0f, 0x0c, 0x9d, 0x15, 0x04, 0x4e, 0x8f, 0xcc, 0x32, 0x0a, 0xbd, 0x08, 0x33, + 0xf6, 0xc1, 0x28, 0x50, 0x0a, 0xbd, 0xd1, 0x3e, 0x88, 0xc2, 0x9e, 0x81, 0x59, 0x7b, 0xdf, 0x1e, + 0xc5, 0x3d, 0x11, 0xc4, 0x49, 0xf6, 0xbe, 0x1d, 0x05, 0x3e, 0x4a, 0x0e, 0xdc, 0x0e, 0xd2, 0x54, + 0x0f, 0x75, 0x2a, 0x27, 0x83, 0xea, 0x81, 0x01, 0xe9, 0x3c, 0x88, 0x9a, 0xa6, 0x20, 0x53, 0xdd, + 0x33, 0x90, 0xa2, 0x3a, 0xc8, 0x54, 0xdd, 0xca, 0xe9, 0xa0, 0x72, 0x59, 0xd3, 0x1a, 0x64, 0xb4, + 0x4e, 0x06, 0xa5, 0x27, 0x60, 0xda, 0xda, 0xbb, 0xae, 0xd1, 0x90, 0x54, 0x6c, 0x07, 0x75, 0xf5, + 0x57, 0x2a, 0x8f, 0x10, 0xff, 0x4e, 0xe1, 0x01, 0x12, 0x90, 0x2d, 0x22, 0x96, 0xce, 0x81, 0xa8, + 0xb9, 0xfb, 0xaa, 0x63, 0x93, 0x9c, 0xec, 0xda, 0xaa, 0x86, 0x2a, 0x8f, 0x52, 0x55, 0x2a, 0xdf, + 0xe6, 0x62, 0xbc, 0x25, 0xdc, 0x5b, 0x7a, 0xd7, 0xe3, 0x8c, 0x8f, 0xd3, 0x2d, 0x41, 0x64, 0x8c, + 0x6d, 0x11, 0x44, 0xec, 0x8a, 0xd0, 0x8b, 0x17, 0x89, 0x5a, 0xd9, 0xde, 0xb7, 0x83, 0xef, 0x7d, + 0x18, 0x26, 0xb1, 0xe6, 0xf0, 0xa5, 0xe7, 0x68, 0x43, 0x66, 0xef, 0x07, 0xde, 0xf8, 0x9e, 0xf5, + 0xc6, 0xd5, 0x1a, 0x94, 0x82, 0xf1, 0x29, 0x15, 0x80, 0x46, 0xa8, 0x28, 0xe0, 0x66, 0x65, 0xb5, + 0xb9, 0x86, 0xdb, 0x8c, 0x97, 0x1b, 0x62, 0x0a, 0xb7, 0x3b, 0x9b, 0x1b, 0x3b, 0x0d, 0x45, 0xde, + 0xdd, 0xde, 0xd9, 0xd8, 0x6a, 0x88, 0xe9, 0x60, 0x5f, 0xfd, 0xad, 0x14, 0x94, 0xc3, 0x47, 0x24, + 0xe9, 0xa7, 0xe1, 0x24, 0xbf, 0xcf, 0x70, 0x91, 0xa7, 0xdc, 0xd2, 0x1d, 0xb2, 0x65, 0xfa, 0x2a, + 0x2d, 0x5f, 0xfe, 0xa2, 0xcd, 0x32, 0xad, 0x36, 0xf2, 0x5e, 0xd0, 0x1d, 0xbc, 0x21, 0xfa, 0xaa, + 0x27, 0x6d, 0xc2, 0x69, 0xd3, 0x52, 0x5c, 0x4f, 0x35, 0x3b, 0xaa, 0xd3, 0x51, 0x86, 0x37, 0x49, + 0x8a, 0xaa, 0x69, 0xc8, 0x75, 0x2d, 0x5a, 0xaa, 0x7c, 0x96, 0x0f, 0x98, 0x56, 0x9b, 0x29, 0x0f, + 0x73, 0x78, 0x9d, 0xa9, 0x46, 0x02, 0x2c, 0x7d, 0x58, 0x80, 0x3d, 0x08, 0x85, 0xbe, 0x6a, 0x2b, + 0xc8, 0xf4, 0x9c, 0x03, 0xd2, 0x18, 0xe7, 0xe5, 0x7c, 0x5f, 0xb5, 0x1b, 0xf8, 0xf9, 0xfd, 0x39, + 0x9f, 0xfc, 0x6b, 0x1a, 0x4a, 0xc1, 0xe6, 0x18, 0x9f, 0x35, 0x34, 0x52, 0x47, 0x04, 0x92, 0x69, + 0x1e, 0x3e, 0xb2, 0x95, 0x5e, 0x5a, 0xc5, 0x05, 0xa6, 0x96, 0xa3, 0x2d, 0xab, 0x4c, 0x91, 0xb8, + 0xb8, 0xe3, 0xdc, 0x82, 0x68, 0x8b, 0x90, 0x97, 0xd9, 0x93, 0xb4, 0x0e, 0xb9, 0xeb, 0x2e, 0xe1, + 0xce, 0x11, 0xee, 0x47, 0x8e, 0xe6, 0x7e, 0xbe, 0x4d, 0xc8, 0x0b, 0xcf, 0xb7, 0x95, 0xed, 0xa6, + 0xbc, 0x55, 0xdf, 0x94, 0x19, 0x5c, 0x3a, 0x05, 0x19, 0x43, 0xbd, 0x7d, 0x10, 0x2e, 0x45, 0x44, + 0x94, 0xd4, 0xf1, 0xa7, 0x20, 0x73, 0x0b, 0xa9, 0x37, 0xc2, 0x05, 0x80, 0x88, 0xde, 0xc3, 0xd0, + 0x3f, 0x0f, 0x59, 0xe2, 0x2f, 0x09, 0x80, 0x79, 0x4c, 0x3c, 0x21, 0xe5, 0x21, 0xb3, 0xda, 0x94, + 0x71, 0xf8, 0x8b, 0x50, 0xa2, 0x52, 0xa5, 0xb5, 0xd1, 0x58, 0x6d, 0x88, 0xa9, 0xea, 0x45, 0xc8, + 0x51, 0x27, 0xe0, 0xad, 0xe1, 0xbb, 0x41, 0x3c, 0xc1, 0x1e, 0x19, 0x87, 0xc0, 0x47, 0x77, 0xb7, + 0x56, 0x1a, 0xb2, 0x98, 0x0a, 0x2e, 0xaf, 0x0b, 0xa5, 0x60, 0x5f, 0xfc, 0xfe, 0xc4, 0xd4, 0x37, + 0x05, 0x28, 0x06, 0xfa, 0x5c, 0xdc, 0xa0, 0xa8, 0x86, 0x61, 0xdd, 0x52, 0x54, 0x43, 0x57, 0x5d, + 0x16, 0x14, 0x40, 0x44, 0x75, 0x2c, 0x49, 0xba, 0x68, 0xef, 0x8b, 0xf1, 0x6f, 0x08, 0x20, 0x46, + 0x5b, 0xcc, 0x88, 0x81, 0xc2, 0x4f, 0xd4, 0xc0, 0xd7, 0x05, 0x28, 0x87, 0xfb, 0xca, 0x88, 0x79, + 0x67, 0x7f, 0xa2, 0xe6, 0x7d, 0x37, 0x05, 0x93, 0xa1, 0x6e, 0x32, 0xa9, 0x75, 0x9f, 0x80, 0x69, + 0xbd, 0x83, 0xfa, 0xb6, 0xe5, 0x21, 0x53, 0x3b, 0x50, 0x0c, 0x74, 0x13, 0x19, 0x95, 0x2a, 0x49, + 0x14, 0xe7, 0x8f, 0xee, 0x57, 0x97, 0x36, 0x86, 0xb8, 0x4d, 0x0c, 0xab, 0xcd, 0x6c, 0xac, 0x35, + 0xb6, 0x5a, 0xcd, 0x9d, 0xc6, 0xf6, 0xea, 0x4b, 0xca, 0xee, 0xf6, 0xcf, 0x6e, 0x37, 0x5f, 0xd8, + 0x96, 0x45, 0x3d, 0xa2, 0xf6, 0x1e, 0x6e, 0xf5, 0x16, 0x88, 0x51, 0xa3, 0xa4, 0x93, 0x30, 0xce, + 0x2c, 0xf1, 0x84, 0x34, 0x03, 0x53, 0xdb, 0x4d, 0xa5, 0xbd, 0xb1, 0xd6, 0x50, 0x1a, 0xd7, 0xae, + 0x35, 0x56, 0x77, 0xda, 0xf4, 0x06, 0xc2, 0xd7, 0xde, 0x09, 0x6f, 0xea, 0xd7, 0xd2, 0x30, 0x33, + 0xc6, 0x12, 0xa9, 0xce, 0xce, 0x0e, 0xf4, 0x38, 0xf3, 0xc1, 0x24, 0xd6, 0x2f, 0xe1, 0x92, 0xdf, + 0x52, 0x1d, 0x8f, 0x1d, 0x35, 0xce, 0x01, 0xf6, 0x92, 0xe9, 0xe9, 0x5d, 0x1d, 0x39, 0xec, 0xc2, + 0x86, 0x1e, 0x28, 0xa6, 0x86, 0x72, 0x7a, 0x67, 0xf3, 0x53, 0x20, 0xd9, 0x96, 0xab, 0x7b, 0xfa, + 0x4d, 0xa4, 0xe8, 0x26, 0xbf, 0xdd, 0xc1, 0x07, 0x8c, 0x8c, 0x2c, 0xf2, 0x91, 0x0d, 0xd3, 0xf3, + 0xb5, 0x4d, 0xd4, 0x53, 0x23, 0xda, 0x38, 0x81, 0xa7, 0x65, 0x91, 0x8f, 0xf8, 0xda, 0x67, 0xa1, + 0xd4, 0xb1, 0x06, 0xb8, 0xeb, 0xa2, 0x7a, 0xb8, 0x5e, 0x08, 0x72, 0x91, 0xca, 0x7c, 0x15, 0xd6, + 0x4f, 0x0f, 0xaf, 0x95, 0x4a, 0x72, 0x91, 0xca, 0xa8, 0xca, 0xe3, 0x30, 0xa5, 0xf6, 0x7a, 0x0e, + 0x26, 0xe7, 0x44, 0xf4, 0x84, 0x50, 0xf6, 0xc5, 0x44, 0x71, 0xfe, 0x79, 0xc8, 0x73, 0x3f, 0xe0, + 0x92, 0x8c, 0x3d, 0xa1, 0xd8, 0xf4, 0xd8, 0x9b, 0x5a, 0x2c, 0xc8, 0x79, 0x93, 0x0f, 0x9e, 0x85, + 0x92, 0xee, 0x2a, 0xc3, 0x5b, 0xf2, 0xd4, 0x99, 0xd4, 0x62, 0x5e, 0x2e, 0xea, 0xae, 0x7f, 0xc3, + 0x58, 0x7d, 0x33, 0x05, 0xe5, 0xf0, 0x2d, 0xbf, 0xb4, 0x06, 0x79, 0xc3, 0xd2, 0x54, 0x12, 0x5a, + 0xf4, 0x13, 0xd3, 0x62, 0xcc, 0x87, 0x81, 0xa5, 0x4d, 0xa6, 0x2f, 0xfb, 0xc8, 0xf9, 0x7f, 0x12, + 0x20, 0xcf, 0xc5, 0xd2, 0x1c, 0x64, 0x6c, 0xd5, 0xdb, 0x27, 0x74, 0xd9, 0x95, 0x94, 0x28, 0xc8, + 0xe4, 0x19, 0xcb, 0x5d, 0x5b, 0x35, 0x49, 0x08, 0x30, 0x39, 0x7e, 0xc6, 0xeb, 0x6a, 0x20, 0xb5, + 0x43, 0x8e, 0x1f, 0x56, 0xbf, 0x8f, 0x4c, 0xcf, 0xe5, 0xeb, 0xca, 0xe4, 0xab, 0x4c, 0x2c, 0x3d, + 0x09, 0xd3, 0x9e, 0xa3, 0xea, 0x46, 0x48, 0x37, 0x43, 0x74, 0x45, 0x3e, 0xe0, 0x2b, 0xd7, 0xe0, + 0x14, 0xe7, 0xed, 0x20, 0x4f, 0xd5, 0xf6, 0x51, 0x67, 0x08, 0xca, 0x91, 0x6b, 0x86, 0x93, 0x4c, + 0x61, 0x8d, 0x8d, 0x73, 0x6c, 0xf5, 0x3b, 0x02, 0x4c, 0xf3, 0x03, 0x53, 0xc7, 0x77, 0xd6, 0x16, + 0x80, 0x6a, 0x9a, 0x96, 0x17, 0x74, 0xd7, 0x68, 0x28, 0x8f, 0xe0, 0x96, 0xea, 0x3e, 0x48, 0x0e, + 0x10, 0xcc, 0xf7, 0x01, 0x86, 0x23, 0x87, 0xba, 0xed, 0x34, 0x14, 0xd9, 0x27, 0x1c, 0xf2, 0x1d, + 0x90, 0x1e, 0xb1, 0x81, 0x8a, 0xf0, 0xc9, 0x4a, 0x9a, 0x85, 0xec, 0x1e, 0xea, 0xe9, 0x26, 0xbb, + 0x98, 0xa5, 0x0f, 0xfc, 0x22, 0x24, 0xe3, 0x5f, 0x84, 0xac, 0x7c, 0x1c, 0x66, 0x34, 0xab, 0x1f, + 0x35, 0x77, 0x45, 0x8c, 0x1c, 0xf3, 0xdd, 0x8f, 0x08, 0x2f, 0xc3, 0xb0, 0xc5, 0xfc, 0xa1, 0x20, + 0x7c, 0x3e, 0x95, 0x5e, 0x6f, 0xad, 0x7c, 0x29, 0x35, 0xbf, 0x4e, 0xa1, 0x2d, 0x3e, 0x53, 0x19, + 0x75, 0x0d, 0xa4, 0x61, 0xeb, 0xe1, 0x0b, 0x4f, 0xc2, 0x07, 0x7b, 0xba, 0xb7, 0x3f, 0xd8, 0x5b, + 0xd2, 0xac, 0xfe, 0xf9, 0x9e, 0xd5, 0xb3, 0x86, 0x9f, 0x3e, 0xf1, 0x13, 0x79, 0x20, 0x7f, 0xb1, + 0xcf, 0x9f, 0x05, 0x5f, 0x3a, 0x1f, 0xfb, 0xad, 0xb4, 0xb6, 0x0d, 0x33, 0x4c, 0x59, 0x21, 0xdf, + 0x5f, 0xe8, 0x29, 0x42, 0x3a, 0xf2, 0x0e, 0xab, 0xf2, 0x95, 0xb7, 0x49, 0xb9, 0x96, 0xa7, 0x19, + 0x14, 0x8f, 0xd1, 0x83, 0x46, 0x4d, 0x86, 0x07, 0x42, 0x7c, 0x74, 0x6b, 0x22, 0x27, 0x86, 0xf1, + 0x5b, 0x8c, 0x71, 0x26, 0xc0, 0xd8, 0x66, 0xd0, 0xda, 0x2a, 0x4c, 0x1e, 0x87, 0xeb, 0xef, 0x19, + 0x57, 0x09, 0x05, 0x49, 0xd6, 0x61, 0x8a, 0x90, 0x68, 0x03, 0xd7, 0xb3, 0xfa, 0x24, 0xef, 0x1d, + 0x4d, 0xf3, 0x0f, 0x6f, 0xd3, 0xbd, 0x52, 0xc6, 0xb0, 0x55, 0x1f, 0x55, 0xab, 0x01, 0xf9, 0xe4, + 0xd4, 0x41, 0x9a, 0x11, 0xc3, 0xf0, 0x6d, 0x66, 0x88, 0xaf, 0x5f, 0xfb, 0x18, 0xcc, 0xe2, 0xbf, + 0x49, 0x5a, 0x0a, 0x5a, 0x12, 0x7f, 0xe1, 0x55, 0xf9, 0xce, 0xab, 0x74, 0x3b, 0xce, 0xf8, 0x04, + 0x01, 0x9b, 0x02, 0xab, 0xd8, 0x43, 0x9e, 0x87, 0x1c, 0x57, 0x51, 0x8d, 0x71, 0xe6, 0x05, 0x6e, + 0x0c, 0x2a, 0x9f, 0x79, 0x27, 0xbc, 0x8a, 0xeb, 0x14, 0x59, 0x37, 0x8c, 0xda, 0x2e, 0x9c, 0x1c, + 0x13, 0x15, 0x09, 0x38, 0x5f, 0x63, 0x9c, 0xb3, 0x23, 0x91, 0x81, 0x69, 0x5b, 0xc0, 0xe5, 0xfe, + 0x5a, 0x26, 0xe0, 0xfc, 0x7d, 0xc6, 0x29, 0x31, 0x2c, 0x5f, 0x52, 0xcc, 0xf8, 0x3c, 0x4c, 0xdf, + 0x44, 0xce, 0x9e, 0xe5, 0xb2, 0x5b, 0x9a, 0x04, 0x74, 0xaf, 0x33, 0xba, 0x29, 0x06, 0x24, 0xd7, + 0x36, 0x98, 0xeb, 0x0a, 0xe4, 0xbb, 0xaa, 0x86, 0x12, 0x50, 0x7c, 0x96, 0x51, 0x4c, 0x60, 0x7d, + 0x0c, 0xad, 0x43, 0xa9, 0x67, 0xb1, 0xca, 0x14, 0x0f, 0x7f, 0x83, 0xc1, 0x8b, 0x1c, 0xc3, 0x28, + 0x6c, 0xcb, 0x1e, 0x18, 0xb8, 0x6c, 0xc5, 0x53, 0xfc, 0x01, 0xa7, 0xe0, 0x18, 0x46, 0x71, 0x0c, + 0xb7, 0x7e, 0x8e, 0x53, 0xb8, 0x01, 0x7f, 0x3e, 0x07, 0x45, 0xcb, 0x34, 0x0e, 0x2c, 0x33, 0x89, + 0x11, 0x77, 0x19, 0x03, 0x30, 0x08, 0x26, 0xb8, 0x0a, 0x85, 0xa4, 0x0b, 0xf1, 0x47, 0xef, 0xf0, + 0xed, 0xc1, 0x57, 0x60, 0x1d, 0xa6, 0x78, 0x82, 0xd2, 0x2d, 0x33, 0x01, 0xc5, 0x17, 0x18, 0x45, + 0x39, 0x00, 0x63, 0xd3, 0xf0, 0x90, 0xeb, 0xf5, 0x50, 0x12, 0x92, 0x37, 0xf9, 0x34, 0x18, 0x84, + 0xb9, 0x72, 0x0f, 0x99, 0xda, 0x7e, 0x32, 0x86, 0x2f, 0x72, 0x57, 0x72, 0x0c, 0xa6, 0x58, 0x85, + 0xc9, 0xbe, 0xea, 0xb8, 0xfb, 0xaa, 0x91, 0x68, 0x39, 0xfe, 0x98, 0x71, 0x94, 0x7c, 0x10, 0xf3, + 0xc8, 0xc0, 0x3c, 0x0e, 0xcd, 0x97, 0xb8, 0x47, 0x02, 0x30, 0xb6, 0xf5, 0x5c, 0x8f, 0x5c, 0x69, + 0x1d, 0x87, 0xed, 0x4f, 0xf8, 0xd6, 0xa3, 0xd8, 0xad, 0x20, 0xe3, 0x55, 0x28, 0xb8, 0xfa, 0xed, + 0x44, 0x34, 0x7f, 0xca, 0x57, 0x9a, 0x00, 0x30, 0xf8, 0x25, 0x38, 0x35, 0xb6, 0x4c, 0x24, 0x20, + 0xfb, 0x33, 0x46, 0x36, 0x37, 0xa6, 0x54, 0xb0, 0x94, 0x70, 0x5c, 0xca, 0x3f, 0xe7, 0x29, 0x01, + 0x45, 0xb8, 0x5a, 0xf8, 0xac, 0xe0, 0xaa, 0xdd, 0xe3, 0x79, 0xed, 0x2f, 0xb8, 0xd7, 0x28, 0x36, + 0xe4, 0xb5, 0x1d, 0x98, 0x63, 0x8c, 0xc7, 0x5b, 0xd7, 0x2f, 0xf3, 0xc4, 0x4a, 0xd1, 0xbb, 0xe1, + 0xd5, 0xfd, 0x38, 0xcc, 0xfb, 0xee, 0xe4, 0x4d, 0xa9, 0xab, 0xf4, 0x55, 0x3b, 0x01, 0xf3, 0x57, + 0x18, 0x33, 0xcf, 0xf8, 0x7e, 0x57, 0xeb, 0x6e, 0xa9, 0x36, 0x26, 0x7f, 0x11, 0x2a, 0x9c, 0x7c, + 0x60, 0x3a, 0x48, 0xb3, 0x7a, 0xa6, 0x7e, 0x1b, 0x75, 0x12, 0x50, 0xff, 0x65, 0x64, 0xa9, 0x76, + 0x03, 0x70, 0xcc, 0xbc, 0x01, 0xa2, 0xdf, 0xab, 0x28, 0x7a, 0xdf, 0xb6, 0x1c, 0x2f, 0x86, 0xf1, + 0xab, 0x7c, 0xa5, 0x7c, 0xdc, 0x06, 0x81, 0xd5, 0x1a, 0x50, 0x26, 0x8f, 0x49, 0x43, 0xf2, 0xaf, + 0x18, 0xd1, 0xe4, 0x10, 0xc5, 0x12, 0x87, 0x66, 0xf5, 0x6d, 0xd5, 0x49, 0x92, 0xff, 0xfe, 0x9a, + 0x27, 0x0e, 0x06, 0x61, 0x89, 0xc3, 0x3b, 0xb0, 0x11, 0xae, 0xf6, 0x09, 0x18, 0xbe, 0xc6, 0x13, + 0x07, 0xc7, 0x30, 0x0a, 0xde, 0x30, 0x24, 0xa0, 0xf8, 0x1b, 0x4e, 0xc1, 0x31, 0x98, 0xe2, 0xa3, + 0xc3, 0x42, 0xeb, 0xa0, 0x9e, 0xee, 0x7a, 0x0e, 0x6d, 0x85, 0x8f, 0xa6, 0xfa, 0xfa, 0x3b, 0xe1, + 0x26, 0x4c, 0x0e, 0x40, 0x71, 0x26, 0x62, 0x57, 0xa8, 0xe4, 0xa4, 0x14, 0x6f, 0xd8, 0x37, 0x78, + 0x26, 0x0a, 0xc0, 0xb0, 0x6d, 0x81, 0x0e, 0x11, 0xbb, 0x5d, 0xc3, 0xe7, 0x83, 0x04, 0x74, 0xdf, + 0x8c, 0x18, 0xd7, 0xe6, 0x58, 0xcc, 0x19, 0xe8, 0x7f, 0x06, 0xe6, 0x0d, 0x74, 0x90, 0x28, 0x3a, + 0xff, 0x36, 0xd2, 0xff, 0xec, 0x52, 0x24, 0xcd, 0x21, 0x53, 0x91, 0x7e, 0x4a, 0x8a, 0xfb, 0xb1, + 0x4e, 0xe5, 0x17, 0xee, 0xb3, 0xf9, 0x86, 0xdb, 0xa9, 0xda, 0x26, 0x0e, 0xf2, 0x70, 0xd3, 0x13, + 0x4f, 0xf6, 0xea, 0x7d, 0x3f, 0xce, 0x43, 0x3d, 0x4f, 0xed, 0x1a, 0x4c, 0x86, 0x1a, 0x9e, 0x78, + 0xaa, 0x5f, 0x64, 0x54, 0xa5, 0x60, 0xbf, 0x53, 0xbb, 0x08, 0x19, 0xdc, 0xbc, 0xc4, 0xc3, 0x7f, + 0x89, 0xc1, 0x89, 0x7a, 0xed, 0xc3, 0x90, 0xe7, 0x4d, 0x4b, 0x3c, 0xf4, 0x97, 0x19, 0xd4, 0x87, + 0x60, 0x38, 0x6f, 0x58, 0xe2, 0xe1, 0xbf, 0xc2, 0xe1, 0x1c, 0x82, 0xe1, 0xc9, 0x5d, 0xf8, 0x77, + 0xbf, 0x96, 0x61, 0x45, 0x87, 0xfb, 0xee, 0x2a, 0x4c, 0xb0, 0x4e, 0x25, 0x1e, 0xfd, 0x49, 0xf6, + 0x72, 0x8e, 0xa8, 0x3d, 0x03, 0xd9, 0x84, 0x0e, 0xff, 0x75, 0x06, 0xa5, 0xfa, 0xb5, 0x55, 0x28, + 0x06, 0xba, 0x93, 0x78, 0xf8, 0x6f, 0x30, 0x78, 0x10, 0x85, 0x4d, 0x67, 0xdd, 0x49, 0x3c, 0xc1, + 0x6f, 0x72, 0xd3, 0x19, 0x02, 0xbb, 0x8d, 0x37, 0x26, 0xf1, 0xe8, 0x4f, 0x71, 0xaf, 0x73, 0x48, + 0xed, 0x39, 0x28, 0xf8, 0xc5, 0x26, 0x1e, 0xff, 0x5b, 0x0c, 0x3f, 0xc4, 0x60, 0x0f, 0x04, 0x8a, + 0x5d, 0x3c, 0xc5, 0x6f, 0x73, 0x0f, 0x04, 0x50, 0x78, 0x1b, 0x45, 0x1b, 0x98, 0x78, 0xa6, 0xdf, + 0xe1, 0xdb, 0x28, 0xd2, 0xbf, 0xe0, 0xd5, 0x24, 0x39, 0x3f, 0x9e, 0xe2, 0x77, 0xf9, 0x6a, 0x12, + 0x7d, 0x6c, 0x46, 0xb4, 0x23, 0x88, 0xe7, 0xf8, 0x3d, 0x6e, 0x46, 0xa4, 0x21, 0xa8, 0xb5, 0x40, + 0x1a, 0xed, 0x06, 0xe2, 0xf9, 0x3e, 0xcd, 0xf8, 0xa6, 0x47, 0x9a, 0x81, 0xda, 0x0b, 0x30, 0x37, + 0xbe, 0x13, 0x88, 0x67, 0xfd, 0xcc, 0xfd, 0xc8, 0xd9, 0x2d, 0xd8, 0x08, 0xd4, 0x76, 0x86, 0x25, + 0x25, 0xd8, 0x05, 0xc4, 0xd3, 0xbe, 0x76, 0x3f, 0x9c, 0xb8, 0x83, 0x4d, 0x40, 0xad, 0x0e, 0x30, + 0x2c, 0xc0, 0xf1, 0x5c, 0xaf, 0x33, 0xae, 0x00, 0x08, 0x6f, 0x0d, 0x56, 0x7f, 0xe3, 0xf1, 0x9f, + 0xe5, 0x5b, 0x83, 0x21, 0xf0, 0xd6, 0xe0, 0xa5, 0x37, 0x1e, 0xfd, 0x06, 0xdf, 0x1a, 0x1c, 0x82, + 0x23, 0x3b, 0x50, 0xdd, 0xe2, 0x19, 0xee, 0xf2, 0xc8, 0x0e, 0xa0, 0x6a, 0xdb, 0x30, 0x3d, 0x52, + 0x10, 0xe3, 0xa9, 0x3e, 0xcf, 0xa8, 0xc4, 0x68, 0x3d, 0x0c, 0x16, 0x2f, 0x56, 0x0c, 0xe3, 0xd9, + 0xfe, 0x30, 0x52, 0xbc, 0x58, 0x2d, 0xac, 0x5d, 0x85, 0xbc, 0x39, 0x30, 0x0c, 0xbc, 0x79, 0xa4, + 0xa3, 0x7f, 0x60, 0x57, 0xf9, 0xcf, 0x77, 0x99, 0x77, 0x38, 0xa0, 0x76, 0x11, 0xb2, 0xa8, 0xbf, + 0x87, 0x3a, 0x71, 0xc8, 0xff, 0x7a, 0x97, 0x27, 0x4c, 0xac, 0x5d, 0x7b, 0x0e, 0x80, 0x5e, 0x8d, + 0x90, 0xcf, 0x7e, 0x31, 0xd8, 0xff, 0x7e, 0x97, 0xfd, 0xf4, 0x65, 0x08, 0x19, 0x12, 0xd0, 0x1f, + 0xd2, 0x1c, 0x4d, 0xf0, 0x4e, 0x98, 0x80, 0xac, 0xc8, 0x15, 0x98, 0xb8, 0xee, 0x5a, 0xa6, 0xa7, + 0xf6, 0xe2, 0xd0, 0xdf, 0x63, 0x68, 0xae, 0x8f, 0x1d, 0xd6, 0xb7, 0x1c, 0xe4, 0xa9, 0x3d, 0x37, + 0x0e, 0xfb, 0x3f, 0x0c, 0xeb, 0x03, 0x30, 0x58, 0x53, 0x5d, 0x2f, 0xc9, 0xbc, 0xbf, 0xcf, 0xc1, + 0x1c, 0x80, 0x8d, 0xc6, 0x7f, 0xdf, 0x40, 0x07, 0x71, 0xd8, 0x1f, 0x70, 0xa3, 0x99, 0x7e, 0xed, + 0xc3, 0x50, 0xc0, 0x7f, 0xd2, 0xdf, 0xb3, 0xc5, 0x80, 0xff, 0x97, 0x81, 0x87, 0x08, 0xfc, 0x66, + 0xd7, 0xeb, 0x78, 0x7a, 0xbc, 0xb3, 0xff, 0x8f, 0xad, 0x34, 0xd7, 0xaf, 0xd5, 0xa1, 0xe8, 0x7a, + 0x9d, 0xce, 0x80, 0xf5, 0xa7, 0x31, 0xf0, 0xff, 0x7f, 0xd7, 0xbf, 0xb2, 0xf0, 0x31, 0x78, 0xb5, + 0x6f, 0xdd, 0xf0, 0x6c, 0x8b, 0x7c, 0xe6, 0x88, 0x63, 0xb8, 0xcf, 0x18, 0x02, 0x90, 0x95, 0xc6, + 0xf8, 0xeb, 0x5b, 0x58, 0xb7, 0xd6, 0x2d, 0x7a, 0x71, 0xfb, 0x72, 0x35, 0xfe, 0x06, 0x16, 0xbe, + 0x97, 0x81, 0x93, 0xc1, 0xcc, 0xd8, 0x73, 0xac, 0x81, 0xcd, 0xae, 0x64, 0xa7, 0x47, 0x06, 0xe6, + 0x8f, 0x77, 0xa9, 0x5b, 0x35, 0x01, 0xb6, 0xd1, 0xad, 0x6d, 0x6b, 0x1d, 0x83, 0xa5, 0x39, 0xc8, + 0x91, 0x69, 0x3d, 0x45, 0x3e, 0x4b, 0xa6, 0x65, 0xf6, 0xe4, 0xcb, 0x2f, 0x90, 0xdf, 0xe0, 0x0b, + 0x4c, 0x7e, 0x41, 0xaa, 0x82, 0x50, 0x27, 0xdf, 0x5d, 0x8a, 0xcb, 0xb3, 0x4b, 0xa3, 0x46, 0xd6, + 0x65, 0xa1, 0x5e, 0x2b, 0xfd, 0xea, 0xdd, 0xd3, 0xc2, 0xa7, 0xee, 0x9e, 0x16, 0x3e, 0x77, 0xf7, + 0xb4, 0x50, 0x3d, 0x07, 0x42, 0x1d, 0xd3, 0xd5, 0x09, 0x03, 0x7f, 0x0d, 0x7d, 0x8a, 0xa8, 0xfe, + 0x63, 0x0a, 0x4a, 0x4d, 0xa3, 0xf3, 0x82, 0xee, 0xed, 0x1f, 0x6d, 0xdd, 0xb3, 0x90, 0x23, 0xef, + 0x7b, 0x8a, 0xdc, 0xb5, 0xc3, 0xf2, 0x63, 0x63, 0x4c, 0x09, 0x12, 0x2d, 0x91, 0x7f, 0x9f, 0x92, + 0x19, 0xea, 0xd0, 0xd9, 0x71, 0xde, 0x65, 0x72, 0x29, 0x9f, 0x94, 0x77, 0x99, 0xf1, 0x2e, 0xcf, + 0xb7, 0x20, 0xb7, 0x1e, 0x7e, 0xc3, 0x61, 0x7e, 0x5d, 0xe6, 0xbf, 0x5c, 0xa4, 0x4f, 0x87, 0x59, + 0x34, 0x7f, 0x99, 0x31, 0x2e, 0x27, 0x62, 0x1c, 0x22, 0x97, 0x57, 0x16, 0xbf, 0x7d, 0x6f, 0xe1, + 0xc4, 0x3f, 0xdf, 0x5b, 0x38, 0xf1, 0x2f, 0xf7, 0x16, 0x4e, 0x7c, 0xf7, 0xde, 0x82, 0xf0, 0x83, + 0x7b, 0x0b, 0xc2, 0x0f, 0xef, 0x2d, 0x08, 0x77, 0xde, 0x5a, 0x10, 0xbe, 0xf8, 0xd6, 0x82, 0xf0, + 0xe5, 0xb7, 0x16, 0x84, 0xaf, 0xbf, 0xb5, 0x20, 0xfc, 0x28, 0x00, 0x00, 0xff, 0xff, 0x80, 0x8e, + 0x51, 0x68, 0x0b, 0x35, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -1344,6 +1349,9 @@ return dAtA } func (m *NewNoGroup) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Field1 != nil { @@ -1363,6 +1371,9 @@ } func (m *A) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.AField != nil { @@ -1540,8 +1551,10 @@ if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.Field3) == 0 { - m.Field3 = make([]float64, 0, packedLen/8) + var elementCount int + elementCount = packedLen / 8 + if elementCount != 0 && len(m.Field3) == 0 { + m.Field3 = make([]float64, 0, elementCount) } for iNdEx < postIndex { var v uint64 diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/xxxfields/Makefile lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/xxxfields/Makefile --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/xxxfields/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/xxxfields/Makefile 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,32 @@ +# Protocol Buffers for Go with Gadgets +# +# Copyright (c) 2018, 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. + +regenerate: + go install github.com/gogo/protobuf/protoc-gen-combo + go install github.com/gogo/protobuf/protoc-gen-gogo + protoc-min-version --version="3.0.0" --gogo_out=. --proto_path=../../../../../:../../protobuf/:. xxxfields.proto diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfields.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfields.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfields.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfields.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,993 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: xxxfields.proto + +package test + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +import bytes "bytes" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +type NativeWithSizeCache struct { + Field1 *float64 `protobuf:"fixed64,1,opt,name=Field1" json:"Field1,omitempty"` + Field2 *float32 `protobuf:"fixed32,2,opt,name=Field2" json:"Field2,omitempty"` + Field3 *int32 `protobuf:"varint,3,opt,name=Field3" json:"Field3,omitempty"` + Field4 *int64 `protobuf:"varint,4,opt,name=Field4" json:"Field4,omitempty"` + Field11 uint64 `protobuf:"fixed64,11,opt,name=Field11" json:"Field11"` + Field13 *bool `protobuf:"varint,13,opt,name=Field13" json:"Field13,omitempty"` + Field14 *string `protobuf:"bytes,14,opt,name=Field14" json:"Field14,omitempty"` + Field15 []byte `protobuf:"bytes,15,opt,name=Field15" json:"Field15,omitempty"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NativeWithSizeCache) Reset() { *m = NativeWithSizeCache{} } +func (m *NativeWithSizeCache) String() string { return proto.CompactTextString(m) } +func (*NativeWithSizeCache) ProtoMessage() {} +func (*NativeWithSizeCache) Descriptor() ([]byte, []int) { + return fileDescriptor_xxxfields_2cd53c16cfe389cd, []int{0} +} +func (m *NativeWithSizeCache) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NativeWithSizeCache.Unmarshal(m, b) +} +func (m *NativeWithSizeCache) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NativeWithSizeCache.Marshal(b, m, deterministic) +} +func (dst *NativeWithSizeCache) XXX_Merge(src proto.Message) { + xxx_messageInfo_NativeWithSizeCache.Merge(dst, src) +} +func (m *NativeWithSizeCache) XXX_Size() int { + return xxx_messageInfo_NativeWithSizeCache.Size(m) +} +func (m *NativeWithSizeCache) XXX_DiscardUnknown() { + xxx_messageInfo_NativeWithSizeCache.DiscardUnknown(m) +} + +var xxx_messageInfo_NativeWithSizeCache proto.InternalMessageInfo + +func (m *NativeWithSizeCache) GetField1() float64 { + if m != nil && m.Field1 != nil { + return *m.Field1 + } + return 0 +} + +func (m *NativeWithSizeCache) GetField2() float32 { + if m != nil && m.Field2 != nil { + return *m.Field2 + } + return 0 +} + +func (m *NativeWithSizeCache) GetField3() int32 { + if m != nil && m.Field3 != nil { + return *m.Field3 + } + return 0 +} + +func (m *NativeWithSizeCache) GetField4() int64 { + if m != nil && m.Field4 != nil { + return *m.Field4 + } + return 0 +} + +func (m *NativeWithSizeCache) GetField11() uint64 { + if m != nil { + return m.Field11 + } + return 0 +} + +func (m *NativeWithSizeCache) GetField13() bool { + if m != nil && m.Field13 != nil { + return *m.Field13 + } + return false +} + +func (m *NativeWithSizeCache) GetField14() string { + if m != nil && m.Field14 != nil { + return *m.Field14 + } + return "" +} + +func (m *NativeWithSizeCache) GetField15() []byte { + if m != nil { + return m.Field15 + } + return nil +} + +type StructWithSizeCache struct { + Field1 float64 `protobuf:"fixed64,1,opt,name=Field1" json:"Field1"` + Field2 float32 `protobuf:"fixed32,2,opt,name=Field2" json:"Field2"` + Field3 NativeWithSizeCache `protobuf:"bytes,3,opt,name=Field3" json:"Field3"` + Field6 *uint64 `protobuf:"varint,6,opt,name=Field6" json:"Field6,omitempty"` + Field7 int32 `protobuf:"zigzag32,7,opt,name=Field7" json:"Field7"` + Field8 NativeWithoutSizeCache `protobuf:"bytes,8,opt,name=Field8" json:"Field8"` + Field13 []bool `protobuf:"varint,13,rep,name=Field13" json:"Field13,omitempty"` + Field14 *string `protobuf:"bytes,14,opt,name=Field14" json:"Field14,omitempty"` + Field15 []byte `protobuf:"bytes,15,opt,name=Field15" json:"Field15"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StructWithSizeCache) Reset() { *m = StructWithSizeCache{} } +func (m *StructWithSizeCache) String() string { return proto.CompactTextString(m) } +func (*StructWithSizeCache) ProtoMessage() {} +func (*StructWithSizeCache) Descriptor() ([]byte, []int) { + return fileDescriptor_xxxfields_2cd53c16cfe389cd, []int{1} +} +func (m *StructWithSizeCache) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StructWithSizeCache.Unmarshal(m, b) +} +func (m *StructWithSizeCache) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StructWithSizeCache.Marshal(b, m, deterministic) +} +func (dst *StructWithSizeCache) XXX_Merge(src proto.Message) { + xxx_messageInfo_StructWithSizeCache.Merge(dst, src) +} +func (m *StructWithSizeCache) XXX_Size() int { + return xxx_messageInfo_StructWithSizeCache.Size(m) +} +func (m *StructWithSizeCache) XXX_DiscardUnknown() { + xxx_messageInfo_StructWithSizeCache.DiscardUnknown(m) +} + +var xxx_messageInfo_StructWithSizeCache proto.InternalMessageInfo + +func (m *StructWithSizeCache) GetField1() float64 { + if m != nil { + return m.Field1 + } + return 0 +} + +func (m *StructWithSizeCache) GetField2() float32 { + if m != nil { + return m.Field2 + } + return 0 +} + +func (m *StructWithSizeCache) GetField3() NativeWithSizeCache { + if m != nil { + return m.Field3 + } + return NativeWithSizeCache{} +} + +func (m *StructWithSizeCache) GetField6() uint64 { + if m != nil && m.Field6 != nil { + return *m.Field6 + } + return 0 +} + +func (m *StructWithSizeCache) GetField7() int32 { + if m != nil { + return m.Field7 + } + return 0 +} + +func (m *StructWithSizeCache) GetField8() NativeWithoutSizeCache { + if m != nil { + return m.Field8 + } + return NativeWithoutSizeCache{} +} + +func (m *StructWithSizeCache) GetField13() []bool { + if m != nil { + return m.Field13 + } + return nil +} + +func (m *StructWithSizeCache) GetField14() string { + if m != nil && m.Field14 != nil { + return *m.Field14 + } + return "" +} + +func (m *StructWithSizeCache) GetField15() []byte { + if m != nil { + return m.Field15 + } + return nil +} + +type NativeWithoutSizeCache struct { + Field1 *float64 `protobuf:"fixed64,1,opt,name=Field1" json:"Field1,omitempty"` + Field2 *float32 `protobuf:"fixed32,2,opt,name=Field2" json:"Field2,omitempty"` + Field3 *int32 `protobuf:"varint,3,opt,name=Field3" json:"Field3,omitempty"` + Field4 *int64 `protobuf:"varint,4,opt,name=Field4" json:"Field4,omitempty"` + Field11 uint64 `protobuf:"fixed64,11,opt,name=Field11" json:"Field11"` + Field13 *bool `protobuf:"varint,13,opt,name=Field13" json:"Field13,omitempty"` + Field14 *string `protobuf:"bytes,14,opt,name=Field14" json:"Field14,omitempty"` + Field15 []byte `protobuf:"bytes,15,opt,name=Field15" json:"Field15,omitempty"` +} + +func (m *NativeWithoutSizeCache) Reset() { *m = NativeWithoutSizeCache{} } +func (m *NativeWithoutSizeCache) String() string { return proto.CompactTextString(m) } +func (*NativeWithoutSizeCache) ProtoMessage() {} +func (*NativeWithoutSizeCache) Descriptor() ([]byte, []int) { + return fileDescriptor_xxxfields_2cd53c16cfe389cd, []int{2} +} +func (m *NativeWithoutSizeCache) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NativeWithoutSizeCache.Unmarshal(m, b) +} +func (m *NativeWithoutSizeCache) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NativeWithoutSizeCache.Marshal(b, m, deterministic) +} +func (dst *NativeWithoutSizeCache) XXX_Merge(src proto.Message) { + xxx_messageInfo_NativeWithoutSizeCache.Merge(dst, src) +} +func (m *NativeWithoutSizeCache) XXX_Size() int { + return xxx_messageInfo_NativeWithoutSizeCache.Size(m) +} +func (m *NativeWithoutSizeCache) XXX_DiscardUnknown() { + xxx_messageInfo_NativeWithoutSizeCache.DiscardUnknown(m) +} + +var xxx_messageInfo_NativeWithoutSizeCache proto.InternalMessageInfo + +func (m *NativeWithoutSizeCache) GetField1() float64 { + if m != nil && m.Field1 != nil { + return *m.Field1 + } + return 0 +} + +func (m *NativeWithoutSizeCache) GetField2() float32 { + if m != nil && m.Field2 != nil { + return *m.Field2 + } + return 0 +} + +func (m *NativeWithoutSizeCache) GetField3() int32 { + if m != nil && m.Field3 != nil { + return *m.Field3 + } + return 0 +} + +func (m *NativeWithoutSizeCache) GetField4() int64 { + if m != nil && m.Field4 != nil { + return *m.Field4 + } + return 0 +} + +func (m *NativeWithoutSizeCache) GetField11() uint64 { + if m != nil { + return m.Field11 + } + return 0 +} + +func (m *NativeWithoutSizeCache) GetField13() bool { + if m != nil && m.Field13 != nil { + return *m.Field13 + } + return false +} + +func (m *NativeWithoutSizeCache) GetField14() string { + if m != nil && m.Field14 != nil { + return *m.Field14 + } + return "" +} + +func (m *NativeWithoutSizeCache) GetField15() []byte { + if m != nil { + return m.Field15 + } + return nil +} + +type StructWithoutSizeCache struct { + Field1 float64 `protobuf:"fixed64,1,opt,name=Field1" json:"Field1"` + Field2 float32 `protobuf:"fixed32,2,opt,name=Field2" json:"Field2"` + Field3 NativeWithSizeCache `protobuf:"bytes,3,opt,name=Field3" json:"Field3"` + Field6 *uint64 `protobuf:"varint,6,opt,name=Field6" json:"Field6,omitempty"` + Field7 int32 `protobuf:"zigzag32,7,opt,name=Field7" json:"Field7"` + Field8 NativeWithoutSizeCache `protobuf:"bytes,8,opt,name=Field8" json:"Field8"` + Field13 []bool `protobuf:"varint,13,rep,name=Field13" json:"Field13,omitempty"` + Field14 *string `protobuf:"bytes,14,opt,name=Field14" json:"Field14,omitempty"` + Field15 []byte `protobuf:"bytes,15,opt,name=Field15" json:"Field15"` +} + +func (m *StructWithoutSizeCache) Reset() { *m = StructWithoutSizeCache{} } +func (m *StructWithoutSizeCache) String() string { return proto.CompactTextString(m) } +func (*StructWithoutSizeCache) ProtoMessage() {} +func (*StructWithoutSizeCache) Descriptor() ([]byte, []int) { + return fileDescriptor_xxxfields_2cd53c16cfe389cd, []int{3} +} +func (m *StructWithoutSizeCache) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StructWithoutSizeCache.Unmarshal(m, b) +} +func (m *StructWithoutSizeCache) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StructWithoutSizeCache.Marshal(b, m, deterministic) +} +func (dst *StructWithoutSizeCache) XXX_Merge(src proto.Message) { + xxx_messageInfo_StructWithoutSizeCache.Merge(dst, src) +} +func (m *StructWithoutSizeCache) XXX_Size() int { + return xxx_messageInfo_StructWithoutSizeCache.Size(m) +} +func (m *StructWithoutSizeCache) XXX_DiscardUnknown() { + xxx_messageInfo_StructWithoutSizeCache.DiscardUnknown(m) +} + +var xxx_messageInfo_StructWithoutSizeCache proto.InternalMessageInfo + +func (m *StructWithoutSizeCache) GetField1() float64 { + if m != nil { + return m.Field1 + } + return 0 +} + +func (m *StructWithoutSizeCache) GetField2() float32 { + if m != nil { + return m.Field2 + } + return 0 +} + +func (m *StructWithoutSizeCache) GetField3() NativeWithSizeCache { + if m != nil { + return m.Field3 + } + return NativeWithSizeCache{} +} + +func (m *StructWithoutSizeCache) GetField6() uint64 { + if m != nil && m.Field6 != nil { + return *m.Field6 + } + return 0 +} + +func (m *StructWithoutSizeCache) GetField7() int32 { + if m != nil { + return m.Field7 + } + return 0 +} + +func (m *StructWithoutSizeCache) GetField8() NativeWithoutSizeCache { + if m != nil { + return m.Field8 + } + return NativeWithoutSizeCache{} +} + +func (m *StructWithoutSizeCache) GetField13() []bool { + if m != nil { + return m.Field13 + } + return nil +} + +func (m *StructWithoutSizeCache) GetField14() string { + if m != nil && m.Field14 != nil { + return *m.Field14 + } + return "" +} + +func (m *StructWithoutSizeCache) GetField15() []byte { + if m != nil { + return m.Field15 + } + return nil +} + +func init() { + proto.RegisterType((*NativeWithSizeCache)(nil), "test.NativeWithSizeCache") + proto.RegisterType((*StructWithSizeCache)(nil), "test.StructWithSizeCache") + proto.RegisterType((*NativeWithoutSizeCache)(nil), "test.NativeWithoutSizeCache") + proto.RegisterType((*StructWithoutSizeCache)(nil), "test.StructWithoutSizeCache") +} +func (this *NativeWithSizeCache) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*NativeWithSizeCache) + if !ok { + that2, ok := that.(NativeWithSizeCache) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Field1 != nil && that1.Field1 != nil { + if *this.Field1 != *that1.Field1 { + return false + } + } else if this.Field1 != nil { + return false + } else if that1.Field1 != nil { + return false + } + if this.Field2 != nil && that1.Field2 != nil { + if *this.Field2 != *that1.Field2 { + return false + } + } else if this.Field2 != nil { + return false + } else if that1.Field2 != nil { + return false + } + if this.Field3 != nil && that1.Field3 != nil { + if *this.Field3 != *that1.Field3 { + return false + } + } else if this.Field3 != nil { + return false + } else if that1.Field3 != nil { + return false + } + if this.Field4 != nil && that1.Field4 != nil { + if *this.Field4 != *that1.Field4 { + return false + } + } else if this.Field4 != nil { + return false + } else if that1.Field4 != nil { + return false + } + if this.Field11 != that1.Field11 { + return false + } + if this.Field13 != nil && that1.Field13 != nil { + if *this.Field13 != *that1.Field13 { + return false + } + } else if this.Field13 != nil { + return false + } else if that1.Field13 != nil { + return false + } + if this.Field14 != nil && that1.Field14 != nil { + if *this.Field14 != *that1.Field14 { + return false + } + } else if this.Field14 != nil { + return false + } else if that1.Field14 != nil { + return false + } + if !bytes.Equal(this.Field15, that1.Field15) { + return false + } + return true +} +func (this *StructWithSizeCache) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StructWithSizeCache) + if !ok { + that2, ok := that.(StructWithSizeCache) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Field1 != that1.Field1 { + return false + } + if this.Field2 != that1.Field2 { + return false + } + if !this.Field3.Equal(&that1.Field3) { + return false + } + if this.Field6 != nil && that1.Field6 != nil { + if *this.Field6 != *that1.Field6 { + return false + } + } else if this.Field6 != nil { + return false + } else if that1.Field6 != nil { + return false + } + if this.Field7 != that1.Field7 { + return false + } + if !this.Field8.Equal(&that1.Field8) { + return false + } + if len(this.Field13) != len(that1.Field13) { + return false + } + for i := range this.Field13 { + if this.Field13[i] != that1.Field13[i] { + return false + } + } + if this.Field14 != nil && that1.Field14 != nil { + if *this.Field14 != *that1.Field14 { + return false + } + } else if this.Field14 != nil { + return false + } else if that1.Field14 != nil { + return false + } + if !bytes.Equal(this.Field15, that1.Field15) { + return false + } + return true +} +func (this *NativeWithoutSizeCache) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*NativeWithoutSizeCache) + if !ok { + that2, ok := that.(NativeWithoutSizeCache) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Field1 != nil && that1.Field1 != nil { + if *this.Field1 != *that1.Field1 { + return false + } + } else if this.Field1 != nil { + return false + } else if that1.Field1 != nil { + return false + } + if this.Field2 != nil && that1.Field2 != nil { + if *this.Field2 != *that1.Field2 { + return false + } + } else if this.Field2 != nil { + return false + } else if that1.Field2 != nil { + return false + } + if this.Field3 != nil && that1.Field3 != nil { + if *this.Field3 != *that1.Field3 { + return false + } + } else if this.Field3 != nil { + return false + } else if that1.Field3 != nil { + return false + } + if this.Field4 != nil && that1.Field4 != nil { + if *this.Field4 != *that1.Field4 { + return false + } + } else if this.Field4 != nil { + return false + } else if that1.Field4 != nil { + return false + } + if this.Field11 != that1.Field11 { + return false + } + if this.Field13 != nil && that1.Field13 != nil { + if *this.Field13 != *that1.Field13 { + return false + } + } else if this.Field13 != nil { + return false + } else if that1.Field13 != nil { + return false + } + if this.Field14 != nil && that1.Field14 != nil { + if *this.Field14 != *that1.Field14 { + return false + } + } else if this.Field14 != nil { + return false + } else if that1.Field14 != nil { + return false + } + if !bytes.Equal(this.Field15, that1.Field15) { + return false + } + return true +} +func (this *StructWithoutSizeCache) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StructWithoutSizeCache) + if !ok { + that2, ok := that.(StructWithoutSizeCache) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Field1 != that1.Field1 { + return false + } + if this.Field2 != that1.Field2 { + return false + } + if !this.Field3.Equal(&that1.Field3) { + return false + } + if this.Field6 != nil && that1.Field6 != nil { + if *this.Field6 != *that1.Field6 { + return false + } + } else if this.Field6 != nil { + return false + } else if that1.Field6 != nil { + return false + } + if this.Field7 != that1.Field7 { + return false + } + if !this.Field8.Equal(&that1.Field8) { + return false + } + if len(this.Field13) != len(that1.Field13) { + return false + } + for i := range this.Field13 { + if this.Field13[i] != that1.Field13[i] { + return false + } + } + if this.Field14 != nil && that1.Field14 != nil { + if *this.Field14 != *that1.Field14 { + return false + } + } else if this.Field14 != nil { + return false + } else if that1.Field14 != nil { + return false + } + if !bytes.Equal(this.Field15, that1.Field15) { + return false + } + return true +} +func NewPopulatedNativeWithSizeCache(r randyXxxfields, easy bool) *NativeWithSizeCache { + this := &NativeWithSizeCache{} + if r.Intn(10) != 0 { + v1 := float64(r.Float64()) + if r.Intn(2) == 0 { + v1 *= -1 + } + this.Field1 = &v1 + } + if r.Intn(10) != 0 { + v2 := float32(r.Float32()) + if r.Intn(2) == 0 { + v2 *= -1 + } + this.Field2 = &v2 + } + if r.Intn(10) != 0 { + v3 := int32(r.Int31()) + if r.Intn(2) == 0 { + v3 *= -1 + } + this.Field3 = &v3 + } + if r.Intn(10) != 0 { + v4 := int64(r.Int63()) + if r.Intn(2) == 0 { + v4 *= -1 + } + this.Field4 = &v4 + } + this.Field11 = uint64(uint64(r.Uint32())) + if r.Intn(10) != 0 { + v5 := bool(bool(r.Intn(2) == 0)) + this.Field13 = &v5 + } + if r.Intn(10) != 0 { + v6 := string(randStringXxxfields(r)) + this.Field14 = &v6 + } + if r.Intn(10) != 0 { + v7 := r.Intn(100) + this.Field15 = make([]byte, v7) + for i := 0; i < v7; i++ { + this.Field15[i] = byte(r.Intn(256)) + } + } + if !easy && r.Intn(10) != 0 { + } + return this +} + +func NewPopulatedStructWithSizeCache(r randyXxxfields, easy bool) *StructWithSizeCache { + this := &StructWithSizeCache{} + this.Field1 = float64(r.Float64()) + if r.Intn(2) == 0 { + this.Field1 *= -1 + } + this.Field2 = float32(r.Float32()) + if r.Intn(2) == 0 { + this.Field2 *= -1 + } + v8 := NewPopulatedNativeWithSizeCache(r, easy) + this.Field3 = *v8 + if r.Intn(10) != 0 { + v9 := uint64(uint64(r.Uint32())) + this.Field6 = &v9 + } + this.Field7 = int32(r.Int31()) + if r.Intn(2) == 0 { + this.Field7 *= -1 + } + v10 := NewPopulatedNativeWithoutSizeCache(r, easy) + this.Field8 = *v10 + if r.Intn(10) != 0 { + v11 := r.Intn(10) + this.Field13 = make([]bool, v11) + for i := 0; i < v11; i++ { + this.Field13[i] = bool(bool(r.Intn(2) == 0)) + } + } + if r.Intn(10) != 0 { + v12 := string(randStringXxxfields(r)) + this.Field14 = &v12 + } + v13 := r.Intn(100) + this.Field15 = make([]byte, v13) + for i := 0; i < v13; i++ { + this.Field15[i] = byte(r.Intn(256)) + } + if !easy && r.Intn(10) != 0 { + } + return this +} + +func NewPopulatedNativeWithoutSizeCache(r randyXxxfields, easy bool) *NativeWithoutSizeCache { + this := &NativeWithoutSizeCache{} + if r.Intn(10) != 0 { + v14 := float64(r.Float64()) + if r.Intn(2) == 0 { + v14 *= -1 + } + this.Field1 = &v14 + } + if r.Intn(10) != 0 { + v15 := float32(r.Float32()) + if r.Intn(2) == 0 { + v15 *= -1 + } + this.Field2 = &v15 + } + if r.Intn(10) != 0 { + v16 := int32(r.Int31()) + if r.Intn(2) == 0 { + v16 *= -1 + } + this.Field3 = &v16 + } + if r.Intn(10) != 0 { + v17 := int64(r.Int63()) + if r.Intn(2) == 0 { + v17 *= -1 + } + this.Field4 = &v17 + } + this.Field11 = uint64(uint64(r.Uint32())) + if r.Intn(10) != 0 { + v18 := bool(bool(r.Intn(2) == 0)) + this.Field13 = &v18 + } + if r.Intn(10) != 0 { + v19 := string(randStringXxxfields(r)) + this.Field14 = &v19 + } + if r.Intn(10) != 0 { + v20 := r.Intn(100) + this.Field15 = make([]byte, v20) + for i := 0; i < v20; i++ { + this.Field15[i] = byte(r.Intn(256)) + } + } + if !easy && r.Intn(10) != 0 { + } + return this +} + +func NewPopulatedStructWithoutSizeCache(r randyXxxfields, easy bool) *StructWithoutSizeCache { + this := &StructWithoutSizeCache{} + this.Field1 = float64(r.Float64()) + if r.Intn(2) == 0 { + this.Field1 *= -1 + } + this.Field2 = float32(r.Float32()) + if r.Intn(2) == 0 { + this.Field2 *= -1 + } + v21 := NewPopulatedNativeWithSizeCache(r, easy) + this.Field3 = *v21 + if r.Intn(10) != 0 { + v22 := uint64(uint64(r.Uint32())) + this.Field6 = &v22 + } + this.Field7 = int32(r.Int31()) + if r.Intn(2) == 0 { + this.Field7 *= -1 + } + v23 := NewPopulatedNativeWithoutSizeCache(r, easy) + this.Field8 = *v23 + if r.Intn(10) != 0 { + v24 := r.Intn(10) + this.Field13 = make([]bool, v24) + for i := 0; i < v24; i++ { + this.Field13[i] = bool(bool(r.Intn(2) == 0)) + } + } + if r.Intn(10) != 0 { + v25 := string(randStringXxxfields(r)) + this.Field14 = &v25 + } + v26 := r.Intn(100) + this.Field15 = make([]byte, v26) + for i := 0; i < v26; i++ { + this.Field15[i] = byte(r.Intn(256)) + } + if !easy && r.Intn(10) != 0 { + } + return this +} + +type randyXxxfields interface { + Float32() float32 + Float64() float64 + Int63() int64 + Int31() int32 + Uint32() uint32 + Intn(n int) int +} + +func randUTF8RuneXxxfields(r randyXxxfields) rune { + ru := r.Intn(62) + if ru < 10 { + return rune(ru + 48) + } else if ru < 36 { + return rune(ru + 55) + } + return rune(ru + 61) +} +func randStringXxxfields(r randyXxxfields) string { + v27 := r.Intn(100) + tmps := make([]rune, v27) + for i := 0; i < v27; i++ { + tmps[i] = randUTF8RuneXxxfields(r) + } + return string(tmps) +} +func randUnrecognizedXxxfields(r randyXxxfields, maxFieldNumber int) (dAtA []byte) { + l := r.Intn(5) + for i := 0; i < l; i++ { + wire := r.Intn(4) + if wire == 3 { + wire = 5 + } + fieldNumber := maxFieldNumber + r.Intn(100) + dAtA = randFieldXxxfields(dAtA, r, fieldNumber, wire) + } + return dAtA +} +func randFieldXxxfields(dAtA []byte, r randyXxxfields, fieldNumber int, wire int) []byte { + key := uint32(fieldNumber)<<3 | uint32(wire) + switch wire { + case 0: + dAtA = encodeVarintPopulateXxxfields(dAtA, uint64(key)) + v28 := r.Int63() + if r.Intn(2) == 0 { + v28 *= -1 + } + dAtA = encodeVarintPopulateXxxfields(dAtA, uint64(v28)) + case 1: + dAtA = encodeVarintPopulateXxxfields(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + case 2: + dAtA = encodeVarintPopulateXxxfields(dAtA, uint64(key)) + ll := r.Intn(100) + dAtA = encodeVarintPopulateXxxfields(dAtA, uint64(ll)) + for j := 0; j < ll; j++ { + dAtA = append(dAtA, byte(r.Intn(256))) + } + default: + dAtA = encodeVarintPopulateXxxfields(dAtA, uint64(key)) + dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) + } + return dAtA +} +func encodeVarintPopulateXxxfields(dAtA []byte, v uint64) []byte { + for v >= 1<<7 { + dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) + v >>= 7 + } + dAtA = append(dAtA, uint8(v)) + return dAtA +} + +func init() { proto.RegisterFile("xxxfields.proto", fileDescriptor_xxxfields_2cd53c16cfe389cd) } + +var fileDescriptor_xxxfields_2cd53c16cfe389cd = []byte{ + // 375 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xaf, 0xa8, 0xa8, 0x48, + 0xcb, 0x4c, 0xcd, 0x49, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x29, 0x49, 0x2d, + 0x2e, 0x91, 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, + 0x4f, 0xcf, 0xd7, 0x07, 0x4b, 0x26, 0x95, 0xa6, 0x81, 0x79, 0x60, 0x0e, 0x98, 0x05, 0xd1, 0xa4, + 0xf4, 0x96, 0x91, 0x4b, 0xd8, 0x2f, 0xb1, 0x24, 0xb3, 0x2c, 0x35, 0x3c, 0xb3, 0x24, 0x23, 0x38, + 0xb3, 0x2a, 0xd5, 0x39, 0x31, 0x39, 0x23, 0x55, 0x48, 0x8c, 0x8b, 0xcd, 0x0d, 0x64, 0xb8, 0xa1, + 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x63, 0x10, 0x94, 0x07, 0x17, 0x37, 0x92, 0x60, 0x52, 0x60, 0xd4, + 0x60, 0x82, 0x8a, 0x1b, 0xc1, 0xc5, 0x8d, 0x25, 0x98, 0x15, 0x18, 0x35, 0x58, 0xa1, 0xe2, 0xc6, + 0x70, 0x71, 0x13, 0x09, 0x16, 0x05, 0x46, 0x0d, 0x66, 0xa8, 0xb8, 0x89, 0x90, 0x1c, 0x17, 0x3b, + 0xc4, 0x44, 0x43, 0x09, 0x6e, 0x05, 0x46, 0x0d, 0x36, 0x27, 0x96, 0x13, 0xf7, 0xe4, 0x19, 0x82, + 0x60, 0x82, 0x42, 0x12, 0x30, 0x79, 0x63, 0x09, 0x5e, 0x05, 0x46, 0x0d, 0x0e, 0x98, 0x8c, 0x31, + 0x42, 0xc6, 0x44, 0x82, 0x4f, 0x81, 0x51, 0x83, 0x13, 0x26, 0x63, 0x82, 0x90, 0x31, 0x95, 0xe0, + 0x57, 0x60, 0xd4, 0xe0, 0x81, 0xc9, 0x98, 0x5a, 0x71, 0x5c, 0x58, 0x28, 0xcf, 0x30, 0x63, 0x91, + 0x3c, 0x83, 0xd2, 0x2d, 0x26, 0x2e, 0xe1, 0xe0, 0x92, 0xa2, 0xd2, 0xe4, 0x12, 0x54, 0xff, 0xca, + 0xa0, 0xfa, 0x17, 0xea, 0x1c, 0x98, 0xaf, 0x65, 0x50, 0x7d, 0x8d, 0x22, 0x6b, 0x24, 0x64, 0x8e, + 0xe2, 0x77, 0x6e, 0x23, 0x49, 0x3d, 0x50, 0x4c, 0xe8, 0x61, 0x09, 0x56, 0x14, 0x8d, 0x88, 0xc0, + 0x31, 0x93, 0x60, 0x53, 0x60, 0xd4, 0x60, 0x81, 0x8a, 0x9b, 0xc1, 0xad, 0x33, 0x97, 0x60, 0x57, + 0x60, 0xd4, 0x10, 0x44, 0xd1, 0x65, 0x2e, 0x64, 0x05, 0x95, 0xb5, 0x90, 0xe0, 0x00, 0x5b, 0x27, + 0x83, 0x6e, 0x5d, 0x7e, 0x69, 0x09, 0x76, 0x1b, 0x2d, 0x50, 0x83, 0x95, 0x99, 0xb8, 0x60, 0x95, + 0x43, 0x0b, 0x56, 0xd4, 0xa8, 0x42, 0x0e, 0xdc, 0x2f, 0x8c, 0x5c, 0x62, 0xd8, 0x9d, 0x31, 0xcc, + 0xd2, 0x13, 0x0f, 0xc8, 0xcb, 0x13, 0x16, 0x41, 0xbd, 0xfd, 0x90, 0x89, 0x4b, 0x0c, 0x91, 0xa6, + 0x50, 0xbc, 0x3d, 0x9a, 0xac, 0xc8, 0x4e, 0x56, 0x28, 0x61, 0xec, 0xc4, 0xf3, 0xe3, 0xa1, 0x1c, + 0xe3, 0x8a, 0x47, 0x72, 0x8c, 0x3b, 0x1e, 0xc9, 0x31, 0x02, 0x02, 0x00, 0x00, 0xff, 0xff, 0x72, + 0x3b, 0x20, 0xc7, 0xfc, 0x04, 0x00, 0x00, +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfieldspb_test.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfieldspb_test.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfieldspb_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfieldspb_test.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,329 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: xxxfields.proto + +package test + +import testing "testing" +import math_rand "math/rand" +import time "time" +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" +import github_com_gogo_protobuf_jsonpb "github.com/gogo/protobuf/jsonpb" +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +func TestNativeWithSizeCacheProto(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedNativeWithSizeCache(popr, false) + dAtA, err := github_com_gogo_protobuf_proto.Marshal(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &NativeWithSizeCache{} + if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + littlefuzz := make([]byte, len(dAtA)) + copy(littlefuzz, dAtA) + for i := range dAtA { + dAtA[i] = byte(popr.Intn(256)) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } + if len(littlefuzz) > 0 { + fuzzamount := 100 + for i := 0; i < fuzzamount; i++ { + littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256)) + littlefuzz = append(littlefuzz, byte(popr.Intn(256))) + } + // shouldn't panic + _ = github_com_gogo_protobuf_proto.Unmarshal(littlefuzz, msg) + } +} + +func TestStructWithSizeCacheProto(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedStructWithSizeCache(popr, false) + dAtA, err := github_com_gogo_protobuf_proto.Marshal(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &StructWithSizeCache{} + if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + littlefuzz := make([]byte, len(dAtA)) + copy(littlefuzz, dAtA) + for i := range dAtA { + dAtA[i] = byte(popr.Intn(256)) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } + if len(littlefuzz) > 0 { + fuzzamount := 100 + for i := 0; i < fuzzamount; i++ { + littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256)) + littlefuzz = append(littlefuzz, byte(popr.Intn(256))) + } + // shouldn't panic + _ = github_com_gogo_protobuf_proto.Unmarshal(littlefuzz, msg) + } +} + +func TestNativeWithoutSizeCacheProto(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedNativeWithoutSizeCache(popr, false) + dAtA, err := github_com_gogo_protobuf_proto.Marshal(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &NativeWithoutSizeCache{} + if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + littlefuzz := make([]byte, len(dAtA)) + copy(littlefuzz, dAtA) + for i := range dAtA { + dAtA[i] = byte(popr.Intn(256)) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } + if len(littlefuzz) > 0 { + fuzzamount := 100 + for i := 0; i < fuzzamount; i++ { + littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256)) + littlefuzz = append(littlefuzz, byte(popr.Intn(256))) + } + // shouldn't panic + _ = github_com_gogo_protobuf_proto.Unmarshal(littlefuzz, msg) + } +} + +func TestStructWithoutSizeCacheProto(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedStructWithoutSizeCache(popr, false) + dAtA, err := github_com_gogo_protobuf_proto.Marshal(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &StructWithoutSizeCache{} + if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + littlefuzz := make([]byte, len(dAtA)) + copy(littlefuzz, dAtA) + for i := range dAtA { + dAtA[i] = byte(popr.Intn(256)) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } + if len(littlefuzz) > 0 { + fuzzamount := 100 + for i := 0; i < fuzzamount; i++ { + littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256)) + littlefuzz = append(littlefuzz, byte(popr.Intn(256))) + } + // shouldn't panic + _ = github_com_gogo_protobuf_proto.Unmarshal(littlefuzz, msg) + } +} + +func TestNativeWithSizeCacheJSON(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedNativeWithSizeCache(popr, true) + marshaler := github_com_gogo_protobuf_jsonpb.Marshaler{} + jsondata, err := marshaler.MarshalToString(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &NativeWithSizeCache{} + err = github_com_gogo_protobuf_jsonpb.UnmarshalString(jsondata, msg) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Json Equal %#v", seed, msg, p) + } +} +func TestStructWithSizeCacheJSON(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedStructWithSizeCache(popr, true) + marshaler := github_com_gogo_protobuf_jsonpb.Marshaler{} + jsondata, err := marshaler.MarshalToString(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &StructWithSizeCache{} + err = github_com_gogo_protobuf_jsonpb.UnmarshalString(jsondata, msg) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Json Equal %#v", seed, msg, p) + } +} +func TestNativeWithoutSizeCacheJSON(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedNativeWithoutSizeCache(popr, true) + marshaler := github_com_gogo_protobuf_jsonpb.Marshaler{} + jsondata, err := marshaler.MarshalToString(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &NativeWithoutSizeCache{} + err = github_com_gogo_protobuf_jsonpb.UnmarshalString(jsondata, msg) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Json Equal %#v", seed, msg, p) + } +} +func TestStructWithoutSizeCacheJSON(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedStructWithoutSizeCache(popr, true) + marshaler := github_com_gogo_protobuf_jsonpb.Marshaler{} + jsondata, err := marshaler.MarshalToString(p) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + msg := &StructWithoutSizeCache{} + err = github_com_gogo_protobuf_jsonpb.UnmarshalString(jsondata, msg) + if err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Json Equal %#v", seed, msg, p) + } +} +func TestNativeWithSizeCacheProtoText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedNativeWithSizeCache(popr, true) + dAtA := github_com_gogo_protobuf_proto.MarshalTextString(p) + msg := &NativeWithSizeCache{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestNativeWithSizeCacheProtoCompactText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedNativeWithSizeCache(popr, true) + dAtA := github_com_gogo_protobuf_proto.CompactTextString(p) + msg := &NativeWithSizeCache{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestStructWithSizeCacheProtoText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedStructWithSizeCache(popr, true) + dAtA := github_com_gogo_protobuf_proto.MarshalTextString(p) + msg := &StructWithSizeCache{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestStructWithSizeCacheProtoCompactText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedStructWithSizeCache(popr, true) + dAtA := github_com_gogo_protobuf_proto.CompactTextString(p) + msg := &StructWithSizeCache{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestNativeWithoutSizeCacheProtoText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedNativeWithoutSizeCache(popr, true) + dAtA := github_com_gogo_protobuf_proto.MarshalTextString(p) + msg := &NativeWithoutSizeCache{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestNativeWithoutSizeCacheProtoCompactText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedNativeWithoutSizeCache(popr, true) + dAtA := github_com_gogo_protobuf_proto.CompactTextString(p) + msg := &NativeWithoutSizeCache{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestStructWithoutSizeCacheProtoText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedStructWithoutSizeCache(popr, true) + dAtA := github_com_gogo_protobuf_proto.MarshalTextString(p) + msg := &StructWithoutSizeCache{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +func TestStructWithoutSizeCacheProtoCompactText(t *testing.T) { + seed := time.Now().UnixNano() + popr := math_rand.New(math_rand.NewSource(seed)) + p := NewPopulatedStructWithoutSizeCache(popr, true) + dAtA := github_com_gogo_protobuf_proto.CompactTextString(p) + msg := &StructWithoutSizeCache{} + if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil { + t.Fatalf("seed = %d, err = %v", seed, err) + } + if !p.Equal(msg) { + t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p) + } +} + +//These tests are generated by github.com/gogo/protobuf/plugin/testgen diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfields.proto lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfields.proto --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfields.proto 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/test/xxxfields/xxxfields.proto 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,92 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2018, 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. + +syntax = "proto2"; +package test; + +import "github.com/gogo/protobuf/gogoproto/gogo.proto"; + +option (gogoproto.testgen_all) = true; +option (gogoproto.populate_all) = true; +option (gogoproto.equal_all) = true; + +message NativeWithSizeCache { + option (gogoproto.goproto_unrecognized) = false; + option (gogoproto.goproto_unkeyed) = false; + optional double Field1 = 1; + optional float Field2 = 2; + optional int32 Field3 = 3; + optional int64 Field4 = 4; + optional fixed64 Field11 = 11 [(gogoproto.nullable) = false]; + optional bool Field13 = 13; + optional string Field14 = 14; + optional bytes Field15 = 15; +} + +message StructWithSizeCache { + option (gogoproto.goproto_unrecognized) = false; + option (gogoproto.goproto_unkeyed) = false; + optional double Field1 = 1 [(gogoproto.nullable) = false]; + optional float Field2 = 2 [(gogoproto.nullable) = false]; + optional NativeWithSizeCache Field3 = 3 [(gogoproto.nullable) = false]; + optional uint64 Field6 = 6 ; + optional sint32 Field7 = 7 [(gogoproto.nullable) = false]; + optional NativeWithoutSizeCache Field8 = 8 [(gogoproto.nullable) = false]; + repeated bool Field13 = 13; + optional string Field14 = 14; + optional bytes Field15 = 15 [(gogoproto.nullable) = false]; +} + +message NativeWithoutSizeCache { + option (gogoproto.goproto_unrecognized) = false; + option (gogoproto.goproto_unkeyed) = false; + option (gogoproto.goproto_sizecache) = false; + optional double Field1 = 1; + optional float Field2 = 2; + optional int32 Field3 = 3; + optional int64 Field4 = 4; + optional fixed64 Field11 = 11 [(gogoproto.nullable) = false]; + optional bool Field13 = 13; + optional string Field14 = 14; + optional bytes Field15 = 15; +} + +message StructWithoutSizeCache { + option (gogoproto.goproto_unrecognized) = false; + option (gogoproto.goproto_unkeyed) = false; + option (gogoproto.goproto_sizecache) = false; + optional double Field1 = 1 [(gogoproto.nullable) = false]; + optional float Field2 = 2 [(gogoproto.nullable) = false]; + optional NativeWithSizeCache Field3 = 3 [(gogoproto.nullable) = false]; + optional uint64 Field6 = 6; + optional sint32 Field7 = 7 [(gogoproto.nullable) = false]; + optional NativeWithoutSizeCache Field8 = 8 [(gogoproto.nullable) = false]; + repeated bool Field13 = 13; + optional string Field14 = 14; + optional bytes Field15 = 15 [(gogoproto.nullable) = false]; +} \ No newline at end of file diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/.travis.yml lxd-3.0.3/dist/src/github.com/gogo/protobuf/.travis.yml --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/.travis.yml 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/.travis.yml 2018-11-22 20:53:45.000000000 +0000 @@ -13,10 +13,10 @@ script: - PATH=/home/travis/bin:$PATH make buildserverall - echo $TRAVIS_GO_VERSION - - if [[ "$PROTOBUF_VERSION" == "3.5.1" ]] && [[ "$TRAVIS_GO_VERSION" == "1.10.x" ]]; then ! git status --porcelain | read || (git status; git diff; exit 1); fi + - if [[ "$PROTOBUF_VERSION" == "3.5.1" ]] && [[ "$TRAVIS_GO_VERSION" == "1.11.x" ]]; then ! git status --porcelain | read || (git status; git diff; exit 1); fi language: go go: - - 1.9.x - 1.10.x + - 1.11.x diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/any.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/any.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/any.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/any.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -414,6 +414,9 @@ return dAtA } func (m *Any) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.TypeUrl) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/api.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/api.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/api.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/api.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1164,6 +1164,9 @@ return dAtA } func (m *Api) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1206,6 +1209,9 @@ } func (m *Method) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1242,6 +1248,9 @@ } func (m *Mixin) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/duration.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/duration.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/duration.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/duration.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -290,6 +290,9 @@ return offset + 1 } func (m *Duration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Seconds != 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/empty.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/empty.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/empty.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/empty.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -264,6 +264,9 @@ return dAtA } func (m *Empty) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.XXX_unrecognized != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/field_mask.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/field_mask.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/field_mask.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/field_mask.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -513,6 +513,9 @@ return dAtA } func (m *FieldMask) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Paths) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/source_context.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/source_context.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/source_context.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/source_context.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -283,6 +283,9 @@ return dAtA } func (m *SourceContext) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.FileName) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/struct.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/struct.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/struct.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/struct.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1150,6 +1150,9 @@ return dAtA } func (m *Struct) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Fields) > 0 { @@ -1172,6 +1175,9 @@ } func (m *Value) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Kind != nil { @@ -1184,18 +1190,27 @@ } func (m *Value_NullValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovStruct(uint64(m.NullValue)) return n } func (m *Value_NumberValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 9 return n } func (m *Value_StringValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.StringValue) @@ -1203,12 +1218,18 @@ return n } func (m *Value_BoolValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 return n } func (m *Value_StructValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.StructValue != nil { @@ -1218,6 +1239,9 @@ return n } func (m *Value_ListValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.ListValue != nil { @@ -1227,6 +1251,9 @@ return n } func (m *ListValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Values) > 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/timestamp.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/timestamp.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/timestamp.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/timestamp.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -308,6 +308,9 @@ return offset + 1 } func (m *Timestamp) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Seconds != 0 { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/type.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/type.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/type.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/type.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1858,6 +1858,9 @@ return dAtA } func (m *Type) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1896,6 +1899,9 @@ } func (m *Field) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Kind != 0 { @@ -1942,6 +1948,9 @@ } func (m *Enum) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1974,6 +1983,9 @@ } func (m *EnumValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1996,6 +2008,9 @@ } func (m *Option) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/wrappers_gogo.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/wrappers_gogo.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/wrappers_gogo.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/wrappers_gogo.go 2018-11-22 20:53:45.000000000 +0000 @@ -0,0 +1,300 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2018, 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 types + +func NewPopulatedStdDouble(r randyWrappers, easy bool) *float64 { + v := NewPopulatedDoubleValue(r, easy) + return &v.Value +} + +func SizeOfStdDouble(v float64) int { + pv := &DoubleValue{Value: v} + return pv.Size() +} + +func StdDoubleMarshal(v float64) ([]byte, error) { + size := SizeOfStdDouble(v) + buf := make([]byte, size) + _, err := StdDoubleMarshalTo(v, buf) + return buf, err +} + +func StdDoubleMarshalTo(v float64, data []byte) (int, error) { + pv := &DoubleValue{Value: v} + return pv.MarshalTo(data) +} + +func StdDoubleUnmarshal(v *float64, data []byte) error { + pv := &DoubleValue{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} +func NewPopulatedStdFloat(r randyWrappers, easy bool) *float32 { + v := NewPopulatedFloatValue(r, easy) + return &v.Value +} + +func SizeOfStdFloat(v float32) int { + pv := &FloatValue{Value: v} + return pv.Size() +} + +func StdFloatMarshal(v float32) ([]byte, error) { + size := SizeOfStdFloat(v) + buf := make([]byte, size) + _, err := StdFloatMarshalTo(v, buf) + return buf, err +} + +func StdFloatMarshalTo(v float32, data []byte) (int, error) { + pv := &FloatValue{Value: v} + return pv.MarshalTo(data) +} + +func StdFloatUnmarshal(v *float32, data []byte) error { + pv := &FloatValue{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} +func NewPopulatedStdInt64(r randyWrappers, easy bool) *int64 { + v := NewPopulatedInt64Value(r, easy) + return &v.Value +} + +func SizeOfStdInt64(v int64) int { + pv := &Int64Value{Value: v} + return pv.Size() +} + +func StdInt64Marshal(v int64) ([]byte, error) { + size := SizeOfStdInt64(v) + buf := make([]byte, size) + _, err := StdInt64MarshalTo(v, buf) + return buf, err +} + +func StdInt64MarshalTo(v int64, data []byte) (int, error) { + pv := &Int64Value{Value: v} + return pv.MarshalTo(data) +} + +func StdInt64Unmarshal(v *int64, data []byte) error { + pv := &Int64Value{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} +func NewPopulatedStdUInt64(r randyWrappers, easy bool) *uint64 { + v := NewPopulatedUInt64Value(r, easy) + return &v.Value +} + +func SizeOfStdUInt64(v uint64) int { + pv := &UInt64Value{Value: v} + return pv.Size() +} + +func StdUInt64Marshal(v uint64) ([]byte, error) { + size := SizeOfStdUInt64(v) + buf := make([]byte, size) + _, err := StdUInt64MarshalTo(v, buf) + return buf, err +} + +func StdUInt64MarshalTo(v uint64, data []byte) (int, error) { + pv := &UInt64Value{Value: v} + return pv.MarshalTo(data) +} + +func StdUInt64Unmarshal(v *uint64, data []byte) error { + pv := &UInt64Value{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} +func NewPopulatedStdInt32(r randyWrappers, easy bool) *int32 { + v := NewPopulatedInt32Value(r, easy) + return &v.Value +} + +func SizeOfStdInt32(v int32) int { + pv := &Int32Value{Value: v} + return pv.Size() +} + +func StdInt32Marshal(v int32) ([]byte, error) { + size := SizeOfStdInt32(v) + buf := make([]byte, size) + _, err := StdInt32MarshalTo(v, buf) + return buf, err +} + +func StdInt32MarshalTo(v int32, data []byte) (int, error) { + pv := &Int32Value{Value: v} + return pv.MarshalTo(data) +} + +func StdInt32Unmarshal(v *int32, data []byte) error { + pv := &Int32Value{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} +func NewPopulatedStdUInt32(r randyWrappers, easy bool) *uint32 { + v := NewPopulatedUInt32Value(r, easy) + return &v.Value +} + +func SizeOfStdUInt32(v uint32) int { + pv := &UInt32Value{Value: v} + return pv.Size() +} + +func StdUInt32Marshal(v uint32) ([]byte, error) { + size := SizeOfStdUInt32(v) + buf := make([]byte, size) + _, err := StdUInt32MarshalTo(v, buf) + return buf, err +} + +func StdUInt32MarshalTo(v uint32, data []byte) (int, error) { + pv := &UInt32Value{Value: v} + return pv.MarshalTo(data) +} + +func StdUInt32Unmarshal(v *uint32, data []byte) error { + pv := &UInt32Value{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} +func NewPopulatedStdBool(r randyWrappers, easy bool) *bool { + v := NewPopulatedBoolValue(r, easy) + return &v.Value +} + +func SizeOfStdBool(v bool) int { + pv := &BoolValue{Value: v} + return pv.Size() +} + +func StdBoolMarshal(v bool) ([]byte, error) { + size := SizeOfStdBool(v) + buf := make([]byte, size) + _, err := StdBoolMarshalTo(v, buf) + return buf, err +} + +func StdBoolMarshalTo(v bool, data []byte) (int, error) { + pv := &BoolValue{Value: v} + return pv.MarshalTo(data) +} + +func StdBoolUnmarshal(v *bool, data []byte) error { + pv := &BoolValue{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} +func NewPopulatedStdString(r randyWrappers, easy bool) *string { + v := NewPopulatedStringValue(r, easy) + return &v.Value +} + +func SizeOfStdString(v string) int { + pv := &StringValue{Value: v} + return pv.Size() +} + +func StdStringMarshal(v string) ([]byte, error) { + size := SizeOfStdString(v) + buf := make([]byte, size) + _, err := StdStringMarshalTo(v, buf) + return buf, err +} + +func StdStringMarshalTo(v string, data []byte) (int, error) { + pv := &StringValue{Value: v} + return pv.MarshalTo(data) +} + +func StdStringUnmarshal(v *string, data []byte) error { + pv := &StringValue{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} +func NewPopulatedStdBytes(r randyWrappers, easy bool) *[]byte { + v := NewPopulatedBytesValue(r, easy) + return &v.Value +} + +func SizeOfStdBytes(v []byte) int { + pv := &BytesValue{Value: v} + return pv.Size() +} + +func StdBytesMarshal(v []byte) ([]byte, error) { + size := SizeOfStdBytes(v) + buf := make([]byte, size) + _, err := StdBytesMarshalTo(v, buf) + return buf, err +} + +func StdBytesMarshalTo(v []byte, data []byte) (int, error) { + pv := &BytesValue{Value: v} + return pv.MarshalTo(data) +} + +func StdBytesUnmarshal(v *[]byte, data []byte) error { + pv := &BytesValue{} + if err := pv.Unmarshal(data); err != nil { + return err + } + *v = pv.Value + return nil +} diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/wrappers.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/wrappers.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/types/wrappers.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/types/wrappers.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -1643,6 +1643,9 @@ return dAtA } func (m *DoubleValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != 0 { @@ -1655,6 +1658,9 @@ } func (m *FloatValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != 0 { @@ -1667,6 +1673,9 @@ } func (m *Int64Value) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != 0 { @@ -1679,6 +1688,9 @@ } func (m *UInt64Value) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != 0 { @@ -1691,6 +1703,9 @@ } func (m *Int32Value) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != 0 { @@ -1703,6 +1718,9 @@ } func (m *UInt32Value) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value != 0 { @@ -1715,6 +1733,9 @@ } func (m *BoolValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Value { @@ -1727,6 +1748,9 @@ } func (m *StringValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Value) @@ -1740,6 +1764,9 @@ } func (m *BytesValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Value) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/file.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/file.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/file.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/file.go 2018-11-22 20:53:45.000000000 +0000 @@ -172,6 +172,14 @@ SetBoolFileOption(gogoproto.E_GoprotoUnrecognizedAll, false)(file) } +func TurnOffGoUnkeyedAll(file *descriptor.FileDescriptorProto) { + SetBoolFileOption(gogoproto.E_GoprotoUnkeyedAll, false)(file) +} + +func TurnOffGoSizecacheAll(file *descriptor.FileDescriptorProto) { + SetBoolFileOption(gogoproto.E_GoprotoSizecacheAll, false)(file) +} + func TurnOffGogoImport(file *descriptor.FileDescriptorProto) { SetBoolFileOption(gogoproto.E_GogoprotoImport, false)(file) } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/msg.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/msg.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/msg.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/msg.go 2018-11-22 20:53:45.000000000 +0000 @@ -137,6 +137,14 @@ SetBoolMessageOption(gogoproto.E_GoprotoUnrecognized, false)(msg) } +func TurnOffGoUnkeyed(msg *descriptor.DescriptorProto) { + SetBoolMessageOption(gogoproto.E_GoprotoUnkeyed, false)(msg) +} + +func TurnOffGoSizecache(msg *descriptor.DescriptorProto) { + SetBoolMessageOption(gogoproto.E_GoprotoSizecache, false)(msg) +} + func TurnOnCompare(msg *descriptor.DescriptorProto) { SetBoolMessageOption(gogoproto.E_Compare, true)(msg) } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/fast/gogovanity.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/fast/gogovanity.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/fast/gogovanity.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/fast/gogovanity.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -136,6 +136,9 @@ return offset + 1 } func (m *B) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.String_ != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/fast/proto3.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/fast/proto3.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/fast/proto3.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/fast/proto3.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -107,6 +107,9 @@ return offset + 1 } func (m *Aproto3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.B) diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/fast/vanity.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/fast/vanity.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/fast/vanity.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/fast/vanity.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -124,6 +124,9 @@ return offset + 1 } func (m *A) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Strings != nil { diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/faster/gogovanity.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/faster/gogovanity.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/faster/gogovanity.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/faster/gogovanity.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -22,18 +22,16 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type B struct { - String_ *string `protobuf:"bytes,1,opt,name=String" json:"String,omitempty"` - Int64 int64 `protobuf:"varint,2,opt,name=Int64" json:"Int64"` - Int32 *int32 `protobuf:"varint,3,opt,name=Int32,def=1234" json:"Int32,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + String_ *string `protobuf:"bytes,1,opt,name=String" json:"String,omitempty"` + Int64 int64 `protobuf:"varint,2,opt,name=Int64" json:"Int64"` + Int32 *int32 `protobuf:"varint,3,opt,name=Int32,def=1234" json:"Int32,omitempty"` } func (m *B) Reset() { *m = B{} } func (m *B) String() string { return proto.CompactTextString(m) } func (*B) ProtoMessage() {} func (*B) Descriptor() ([]byte, []int) { - return fileDescriptor_gogovanity_3d56375bbc5ff070, []int{0} + return fileDescriptor_gogovanity_5ec1359daac061c2, []int{0} } func (m *B) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -130,6 +128,9 @@ return offset + 1 } func (m *B) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.String_ != nil { @@ -380,10 +381,10 @@ ErrIntOverflowGogovanity = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("gogovanity.proto", fileDescriptor_gogovanity_3d56375bbc5ff070) } +func init() { proto.RegisterFile("gogovanity.proto", fileDescriptor_gogovanity_5ec1359daac061c2) } -var fileDescriptor_gogovanity_3d56375bbc5ff070 = []byte{ - // 163 bytes of a gzipped FileDescriptorProto +var fileDescriptor_gogovanity_5ec1359daac061c2 = []byte{ + // 171 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x48, 0xcf, 0x4f, 0xcf, 0x2f, 0x4b, 0xcc, 0xcb, 0x2c, 0xa9, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0xf0, 0xa4, 0x74, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x41, 0x8a, 0xf4, @@ -392,7 +393,7 @@ 0x70, 0x3a, 0xb1, 0x9c, 0xb8, 0x27, 0xcf, 0x18, 0x04, 0x15, 0x13, 0x92, 0xe2, 0x62, 0xf5, 0xcc, 0x2b, 0x31, 0x33, 0x91, 0x60, 0x52, 0x60, 0xd4, 0x60, 0x06, 0x4b, 0x32, 0x04, 0x41, 0x84, 0xa0, 0x72, 0xc6, 0x46, 0x12, 0xcc, 0x0a, 0x8c, 0x1a, 0xac, 0x56, 0x2c, 0x86, 0x46, 0xc6, 0x26, 0x41, - 0x10, 0x21, 0x27, 0x81, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, - 0x71, 0xc2, 0x63, 0x39, 0x06, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xde, 0x29, 0x72, 0xb6, - 0x00, 0x00, 0x00, + 0x10, 0x21, 0x27, 0x89, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, + 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x00, 0x04, 0x00, + 0x00, 0xff, 0xff, 0xbf, 0xbb, 0x2c, 0x28, 0xbe, 0x00, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/faster/proto3.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/faster/proto3.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/faster/proto3.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/faster/proto3.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -21,16 +21,14 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type Aproto3 struct { - B string `protobuf:"bytes,1,opt,name=B,proto3" json:"B,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + B string `protobuf:"bytes,1,opt,name=B,proto3" json:"B,omitempty"` } func (m *Aproto3) Reset() { *m = Aproto3{} } func (m *Aproto3) String() string { return proto.CompactTextString(m) } func (*Aproto3) ProtoMessage() {} func (*Aproto3) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_efd1bbd2b7dd033b, []int{0} + return fileDescriptor_proto3_b593ea763dc96224, []int{0} } func (m *Aproto3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -103,6 +101,9 @@ return offset + 1 } func (m *Aproto3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.B) @@ -309,14 +310,14 @@ ErrIntOverflowProto3 = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("proto3.proto", fileDescriptor_proto3_efd1bbd2b7dd033b) } +func init() { proto.RegisterFile("proto3.proto", fileDescriptor_proto3_b593ea763dc96224) } -var fileDescriptor_proto3_efd1bbd2b7dd033b = []byte{ - // 87 bytes of a gzipped FileDescriptorProto +var fileDescriptor_proto3_b593ea763dc96224 = []byte{ + // 95 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x28, 0xca, 0x2f, 0xc9, 0x37, 0xd6, 0x03, 0x53, 0x42, 0x6c, 0x65, 0x89, 0x79, 0x99, 0x25, 0x95, 0x4a, 0xe2, 0x5c, 0xec, 0x8e, 0x10, 0x09, 0x21, 0x1e, 0x2e, 0x46, 0x27, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20, - 0x46, 0x27, 0x27, 0x81, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, - 0x71, 0xc2, 0x63, 0x39, 0x86, 0x24, 0x36, 0x88, 0x3a, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, - 0x21, 0xa3, 0xc0, 0x49, 0x00, 0x00, 0x00, + 0x46, 0x27, 0x27, 0x89, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, + 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x48, 0x62, 0x83, + 0xa8, 0x07, 0x04, 0x00, 0x00, 0xff, 0xff, 0x73, 0xb1, 0xdb, 0xd2, 0x51, 0x00, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/faster/vanity.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/faster/vanity.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/faster/vanity.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/faster/vanity.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -22,17 +22,15 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type A struct { - Strings string `protobuf:"bytes,1,opt,name=Strings" json:"Strings"` - Int int64 `protobuf:"varint,2,req,name=Int" json:"Int"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Strings string `protobuf:"bytes,1,opt,name=Strings" json:"Strings"` + Int int64 `protobuf:"varint,2,req,name=Int" json:"Int"` } func (m *A) Reset() { *m = A{} } func (m *A) String() string { return proto.CompactTextString(m) } func (*A) ProtoMessage() {} func (*A) Descriptor() ([]byte, []int) { - return fileDescriptor_vanity_ee422b61c12e2be7, []int{0} + return fileDescriptor_vanity_c8a9a949a2e14347, []int{0} } func (m *A) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -113,6 +111,9 @@ return offset + 1 } func (m *A) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Strings) @@ -342,15 +343,16 @@ ErrIntOverflowVanity = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("vanity.proto", fileDescriptor_vanity_ee422b61c12e2be7) } +func init() { proto.RegisterFile("vanity.proto", fileDescriptor_vanity_c8a9a949a2e14347) } -var fileDescriptor_vanity_ee422b61c12e2be7 = []byte{ - // 109 bytes of a gzipped FileDescriptorProto +var fileDescriptor_vanity_c8a9a949a2e14347 = []byte{ + // 117 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x4b, 0xcc, 0xcb, 0x2c, 0xa9, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0xf0, 0x94, 0xac, 0xb9, 0x18, 0x1d, 0x85, 0xe4, 0xb8, 0xd8, 0x83, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, 0x8b, 0x25, 0x18, 0x15, 0x18, 0x35, 0x38, 0x9d, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82, 0x09, 0x0a, 0x89, 0x71, 0x31, 0x7b, - 0xe6, 0x95, 0x48, 0x30, 0x29, 0x30, 0x69, 0x30, 0x43, 0xe5, 0x40, 0x02, 0x4e, 0x02, 0x27, 0x1e, - 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x80, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x0d, 0x52, 0xbb, 0x65, 0x00, 0x00, 0x00, + 0xe6, 0x95, 0x48, 0x30, 0x29, 0x30, 0x69, 0x30, 0x43, 0xe5, 0x40, 0x02, 0x4e, 0x12, 0x27, 0x1e, + 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, + 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x00, 0x08, 0x00, 0x00, 0xff, 0xff, 0x8b, 0x2e, 0x6a, + 0x0c, 0x6d, 0x00, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/slick/gogovanity.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/slick/gogovanity.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/slick/gogovanity.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/slick/gogovanity.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -25,17 +25,15 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type B struct { - String_ *string `protobuf:"bytes,1,opt,name=String" json:"String,omitempty"` - Int64 int64 `protobuf:"varint,2,opt,name=Int64" json:"Int64"` - Int32 *int32 `protobuf:"varint,3,opt,name=Int32,def=1234" json:"Int32,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + String_ *string `protobuf:"bytes,1,opt,name=String" json:"String,omitempty"` + Int64 int64 `protobuf:"varint,2,opt,name=Int64" json:"Int64"` + Int32 *int32 `protobuf:"varint,3,opt,name=Int32,def=1234" json:"Int32,omitempty"` } func (m *B) Reset() { *m = B{} } func (*B) ProtoMessage() {} func (*B) Descriptor() ([]byte, []int) { - return fileDescriptor_gogovanity_fc574e04ada47644, []int{0} + return fileDescriptor_gogovanity_d28d049fcf27b277, []int{0} } func (m *B) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -198,6 +196,9 @@ return offset + 1 } func (m *B) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.String_ != nil { @@ -468,10 +469,10 @@ ErrIntOverflowGogovanity = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("gogovanity.proto", fileDescriptor_gogovanity_fc574e04ada47644) } +func init() { proto.RegisterFile("gogovanity.proto", fileDescriptor_gogovanity_d28d049fcf27b277) } -var fileDescriptor_gogovanity_fc574e04ada47644 = []byte{ - // 192 bytes of a gzipped FileDescriptorProto +var fileDescriptor_gogovanity_d28d049fcf27b277 = []byte{ + // 201 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x48, 0xcf, 0x4f, 0xcf, 0x2f, 0x4b, 0xcc, 0xcb, 0x2c, 0xa9, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0xf0, 0xa4, 0x74, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x41, 0x8a, 0xf4, @@ -480,8 +481,9 @@ 0x70, 0x3a, 0xb1, 0x9c, 0xb8, 0x27, 0xcf, 0x18, 0x04, 0x15, 0x13, 0x92, 0xe2, 0x62, 0xf5, 0xcc, 0x2b, 0x31, 0x33, 0x91, 0x60, 0x52, 0x60, 0xd4, 0x60, 0x06, 0x4b, 0x32, 0x04, 0x41, 0x84, 0xa0, 0x72, 0xc6, 0x46, 0x12, 0xcc, 0x0a, 0x8c, 0x1a, 0xac, 0x56, 0x2c, 0x86, 0x46, 0xc6, 0x26, 0x41, - 0x10, 0x21, 0x27, 0x9d, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c, 0x94, 0x63, 0xf8, 0xf0, 0x50, 0x8e, + 0x10, 0x21, 0x27, 0x93, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c, 0x94, 0x63, 0xf8, 0xf0, 0x50, 0x8e, 0xb1, 0xe1, 0x91, 0x1c, 0xe3, 0x8a, 0x47, 0x72, 0x8c, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x8b, 0x47, 0x72, 0x0c, 0x1f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, - 0x2c, 0xc7, 0x00, 0x08, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x7e, 0xee, 0xf2, 0xd2, 0x00, 0x00, 0x00, + 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x80, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xab, 0xeb, 0xeb, 0x07, 0xda, 0x00, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/slick/proto3.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/slick/proto3.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/slick/proto3.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/slick/proto3.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -24,15 +24,13 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type Aproto3 struct { - B string `protobuf:"bytes,1,opt,name=B,proto3" json:"B,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + B string `protobuf:"bytes,1,opt,name=B,proto3" json:"B,omitempty"` } func (m *Aproto3) Reset() { *m = Aproto3{} } func (*Aproto3) ProtoMessage() {} func (*Aproto3) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_5ebceb1b2969522e, []int{0} + return fileDescriptor_proto3_1bf23e323c5dd138, []int{0} } func (m *Aproto3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -147,6 +145,9 @@ return offset + 1 } func (m *Aproto3) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.B) @@ -371,16 +372,16 @@ ErrIntOverflowProto3 = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("proto3.proto", fileDescriptor_proto3_5ebceb1b2969522e) } +func init() { proto.RegisterFile("proto3.proto", fileDescriptor_proto3_1bf23e323c5dd138) } -var fileDescriptor_proto3_5ebceb1b2969522e = []byte{ - // 116 bytes of a gzipped FileDescriptorProto +var fileDescriptor_proto3_1bf23e323c5dd138 = []byte{ + // 125 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x28, 0xca, 0x2f, 0xc9, 0x37, 0xd6, 0x03, 0x53, 0x42, 0x6c, 0x65, 0x89, 0x79, 0x99, 0x25, 0x95, 0x4a, 0xe2, 0x5c, 0xec, 0x8e, 0x10, 0x09, 0x21, 0x1e, 0x2e, 0x46, 0x27, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20, - 0x46, 0x27, 0x27, 0x9d, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c, 0x94, 0x63, 0xf8, 0xf0, 0x50, 0x8e, + 0x46, 0x27, 0x27, 0x93, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c, 0x94, 0x63, 0xf8, 0xf0, 0x50, 0x8e, 0xb1, 0xe1, 0x91, 0x1c, 0xe3, 0x8a, 0x47, 0x72, 0x8c, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x8b, 0x47, 0x72, 0x0c, 0x1f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, - 0x2c, 0xc7, 0x90, 0xc4, 0x06, 0x31, 0x03, 0x10, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xa0, 0x15, 0x6b, - 0x65, 0x00, 0x00, 0x00, + 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x49, 0x6c, 0x10, 0xb3, 0x00, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x3d, 0x6e, 0x6a, 0x0e, 0x6d, 0x00, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/slick/vanity.pb.go lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/slick/vanity.pb.go --- lxd-3.0.2/dist/src/github.com/gogo/protobuf/vanity/test/slick/vanity.pb.go 2018-08-20 23:47:16.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gogo/protobuf/vanity/test/slick/vanity.pb.go 2018-11-22 20:53:45.000000000 +0000 @@ -25,16 +25,14 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type A struct { - Strings string `protobuf:"bytes,1,opt,name=Strings" json:"Strings"` - Int int64 `protobuf:"varint,2,req,name=Int" json:"Int"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Strings string `protobuf:"bytes,1,opt,name=Strings" json:"Strings"` + Int int64 `protobuf:"varint,2,req,name=Int" json:"Int"` } func (m *A) Reset() { *m = A{} } func (*A) ProtoMessage() {} func (*A) Descriptor() ([]byte, []int) { - return fileDescriptor_vanity_a964ed6473033f4a, []int{0} + return fileDescriptor_vanity_0b672c3d48e40257, []int{0} } func (m *A) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -161,6 +159,9 @@ return offset + 1 } func (m *A) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Strings) @@ -409,17 +410,18 @@ ErrIntOverflowVanity = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("vanity.proto", fileDescriptor_vanity_a964ed6473033f4a) } +func init() { proto.RegisterFile("vanity.proto", fileDescriptor_vanity_0b672c3d48e40257) } -var fileDescriptor_vanity_a964ed6473033f4a = []byte{ - // 138 bytes of a gzipped FileDescriptorProto +var fileDescriptor_vanity_0b672c3d48e40257 = []byte{ + // 147 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x4b, 0xcc, 0xcb, 0x2c, 0xa9, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0xf0, 0x94, 0xac, 0xb9, 0x18, 0x1d, 0x85, 0xe4, 0xb8, 0xd8, 0x83, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, 0x8b, 0x25, 0x18, 0x15, 0x18, 0x35, 0x38, 0x9d, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82, 0x09, 0x0a, 0x89, 0x71, 0x31, 0x7b, - 0xe6, 0x95, 0x48, 0x30, 0x29, 0x30, 0x69, 0x30, 0x43, 0xe5, 0x40, 0x02, 0x4e, 0x3a, 0x17, 0x1e, + 0xe6, 0x95, 0x48, 0x30, 0x29, 0x30, 0x69, 0x30, 0x43, 0xe5, 0x40, 0x02, 0x4e, 0x26, 0x17, 0x1e, 0xca, 0x31, 0xdc, 0x78, 0x28, 0xc7, 0xf0, 0xe1, 0xa1, 0x1c, 0x63, 0xc3, 0x23, 0x39, 0xc6, 0x15, 0x8f, 0xe4, 0x18, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, - 0x17, 0x8f, 0xe4, 0x18, 0x3e, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0x01, 0x10, 0x00, 0x00, - 0xff, 0xff, 0x4d, 0xd9, 0xba, 0x18, 0x81, 0x00, 0x00, 0x00, + 0x17, 0x8f, 0xe4, 0x18, 0x3e, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, + 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x20, 0x58, 0xc4, 0x53, 0x89, + 0x00, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/conformance/internal/conformance_proto/conformance.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/conformance/internal/conformance_proto/conformance.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/conformance/internal/conformance_proto/conformance.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/conformance/internal/conformance_proto/conformance.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -3,15 +3,17 @@ package conformance -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import any "github.com/golang/protobuf/ptypes/any" -import duration "github.com/golang/protobuf/ptypes/duration" -import _struct "github.com/golang/protobuf/ptypes/struct" -import timestamp "github.com/golang/protobuf/ptypes/timestamp" -import wrappers "github.com/golang/protobuf/ptypes/wrappers" -import field_mask "google.golang.org/genproto/protobuf/field_mask" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + duration "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + timestamp "github.com/golang/protobuf/ptypes/timestamp" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + field_mask "google.golang.org/genproto/protobuf/field_mask" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -37,6 +39,7 @@ 1: "PROTOBUF", 2: "JSON", } + var WireFormat_value = map[string]int32{ "UNSPECIFIED": 0, "PROTOBUF": 1, @@ -46,8 +49,9 @@ func (x WireFormat) String() string { return proto.EnumName(WireFormat_name, int32(x)) } + func (WireFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_conformance_48ac832451f5d6c3, []int{0} + return fileDescriptor_e7c910178d599565, []int{0} } type ForeignEnum int32 @@ -63,6 +67,7 @@ 1: "FOREIGN_BAR", 2: "FOREIGN_BAZ", } + var ForeignEnum_value = map[string]int32{ "FOREIGN_FOO": 0, "FOREIGN_BAR": 1, @@ -72,8 +77,9 @@ func (x ForeignEnum) String() string { return proto.EnumName(ForeignEnum_name, int32(x)) } + func (ForeignEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_conformance_48ac832451f5d6c3, []int{1} + return fileDescriptor_e7c910178d599565, []int{1} } type TestAllTypes_NestedEnum int32 @@ -91,6 +97,7 @@ 2: "BAZ", -1: "NEG", } + var TestAllTypes_NestedEnum_value = map[string]int32{ "FOO": 0, "BAR": 1, @@ -101,8 +108,9 @@ func (x TestAllTypes_NestedEnum) String() string { return proto.EnumName(TestAllTypes_NestedEnum_name, int32(x)) } + func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_conformance_48ac832451f5d6c3, []int{2, 0} + return fileDescriptor_e7c910178d599565, []int{2, 0} } // Represents a single test case's input. The testee should: @@ -129,16 +137,17 @@ func (m *ConformanceRequest) String() string { return proto.CompactTextString(m) } func (*ConformanceRequest) ProtoMessage() {} func (*ConformanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_conformance_48ac832451f5d6c3, []int{0} + return fileDescriptor_e7c910178d599565, []int{0} } + func (m *ConformanceRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConformanceRequest.Unmarshal(m, b) } func (m *ConformanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ConformanceRequest.Marshal(b, m, deterministic) } -func (dst *ConformanceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConformanceRequest.Merge(dst, src) +func (m *ConformanceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConformanceRequest.Merge(m, src) } func (m *ConformanceRequest) XXX_Size() int { return xxx_messageInfo_ConformanceRequest.Size(m) @@ -278,16 +287,17 @@ func (m *ConformanceResponse) String() string { return proto.CompactTextString(m) } func (*ConformanceResponse) ProtoMessage() {} func (*ConformanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_conformance_48ac832451f5d6c3, []int{1} + return fileDescriptor_e7c910178d599565, []int{1} } + func (m *ConformanceResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConformanceResponse.Unmarshal(m, b) } func (m *ConformanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ConformanceResponse.Marshal(b, m, deterministic) } -func (dst *ConformanceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConformanceResponse.Merge(dst, src) +func (m *ConformanceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConformanceResponse.Merge(m, src) } func (m *ConformanceResponse) XXX_Size() int { return xxx_messageInfo_ConformanceResponse.Size(m) @@ -640,16 +650,17 @@ func (m *TestAllTypes) String() string { return proto.CompactTextString(m) } func (*TestAllTypes) ProtoMessage() {} func (*TestAllTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_conformance_48ac832451f5d6c3, []int{2} + return fileDescriptor_e7c910178d599565, []int{2} } + func (m *TestAllTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TestAllTypes.Unmarshal(m, b) } func (m *TestAllTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_TestAllTypes.Marshal(b, m, deterministic) } -func (dst *TestAllTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_TestAllTypes.Merge(dst, src) +func (m *TestAllTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_TestAllTypes.Merge(m, src) } func (m *TestAllTypes) XXX_Size() int { return xxx_messageInfo_TestAllTypes.Size(m) @@ -1562,16 +1573,17 @@ func (m *TestAllTypes_NestedMessage) String() string { return proto.CompactTextString(m) } func (*TestAllTypes_NestedMessage) ProtoMessage() {} func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_conformance_48ac832451f5d6c3, []int{2, 0} + return fileDescriptor_e7c910178d599565, []int{2, 0} } + func (m *TestAllTypes_NestedMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TestAllTypes_NestedMessage.Unmarshal(m, b) } func (m *TestAllTypes_NestedMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_TestAllTypes_NestedMessage.Marshal(b, m, deterministic) } -func (dst *TestAllTypes_NestedMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_TestAllTypes_NestedMessage.Merge(dst, src) +func (m *TestAllTypes_NestedMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_TestAllTypes_NestedMessage.Merge(m, src) } func (m *TestAllTypes_NestedMessage) XXX_Size() int { return xxx_messageInfo_TestAllTypes_NestedMessage.Size(m) @@ -1607,16 +1619,17 @@ func (m *ForeignMessage) String() string { return proto.CompactTextString(m) } func (*ForeignMessage) ProtoMessage() {} func (*ForeignMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_conformance_48ac832451f5d6c3, []int{3} + return fileDescriptor_e7c910178d599565, []int{3} } + func (m *ForeignMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ForeignMessage.Unmarshal(m, b) } func (m *ForeignMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ForeignMessage.Marshal(b, m, deterministic) } -func (dst *ForeignMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_ForeignMessage.Merge(dst, src) +func (m *ForeignMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForeignMessage.Merge(m, src) } func (m *ForeignMessage) XXX_Size() int { return xxx_messageInfo_ForeignMessage.Size(m) @@ -1635,6 +1648,9 @@ } func init() { + proto.RegisterEnum("conformance.WireFormat", WireFormat_name, WireFormat_value) + proto.RegisterEnum("conformance.ForeignEnum", ForeignEnum_name, ForeignEnum_value) + proto.RegisterEnum("conformance.TestAllTypes_NestedEnum", TestAllTypes_NestedEnum_name, TestAllTypes_NestedEnum_value) proto.RegisterType((*ConformanceRequest)(nil), "conformance.ConformanceRequest") proto.RegisterType((*ConformanceResponse)(nil), "conformance.ConformanceResponse") proto.RegisterType((*TestAllTypes)(nil), "conformance.TestAllTypes") @@ -1659,14 +1675,11 @@ proto.RegisterMapType((map[uint64]uint64)(nil), "conformance.TestAllTypes.MapUint64Uint64Entry") proto.RegisterType((*TestAllTypes_NestedMessage)(nil), "conformance.TestAllTypes.NestedMessage") proto.RegisterType((*ForeignMessage)(nil), "conformance.ForeignMessage") - proto.RegisterEnum("conformance.WireFormat", WireFormat_name, WireFormat_value) - proto.RegisterEnum("conformance.ForeignEnum", ForeignEnum_name, ForeignEnum_value) - proto.RegisterEnum("conformance.TestAllTypes_NestedEnum", TestAllTypes_NestedEnum_name, TestAllTypes_NestedEnum_value) } -func init() { proto.RegisterFile("conformance.proto", fileDescriptor_conformance_48ac832451f5d6c3) } +func init() { proto.RegisterFile("conformance.proto", fileDescriptor_e7c910178d599565) } -var fileDescriptor_conformance_48ac832451f5d6c3 = []byte{ +var fileDescriptor_e7c910178d599565 = []byte{ // 2600 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x5a, 0x5b, 0x73, 0x13, 0xc9, 0x15, 0xf6, 0x68, 0xc0, 0x36, 0x2d, 0xd9, 0x96, 0xdb, 0xb7, 0xc6, 0x50, 0xcb, 0x60, 0x96, 0x20, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/go.mod lxd-3.0.3/dist/src/github.com/golang/protobuf/go.mod --- lxd-3.0.2/dist/src/github.com/golang/protobuf/go.mod 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/go.mod 2018-11-22 20:53:18.000000000 +0000 @@ -0,0 +1,7 @@ +module github.com/golang/protobuf + +require ( + golang.org/x/net v0.0.0-20180906233101-161cd47e91fd // indirect + golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f + google.golang.org/genproto v0.0.0-20180831171423-11092d34479b +) diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/go.sum lxd-3.0.3/dist/src/github.com/golang/protobuf/go.sum --- lxd-3.0.2/dist/src/github.com/golang/protobuf/go.sum 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/go.sum 2018-11-22 20:53:18.000000000 +0000 @@ -0,0 +1,6 @@ +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b h1:lohp5blsw53GBXtLyLNaTXPXS9pJ1tiTw61ZHUoE9Qw= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -3,9 +3,11 @@ package jsonpb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -31,6 +33,7 @@ 1: "ARABIC", 2: "ROMAN", } + var Numeral_value = map[string]int32{ "UNKNOWN": 0, "ARABIC": 1, @@ -40,8 +43,9 @@ func (x Numeral) String() string { return proto.EnumName(Numeral_name, int32(x)) } + func (Numeral) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_more_test_objects_bef0d79b901f4c4a, []int{0} + return fileDescriptor_e6c135db3023e377, []int{0} } type Simple3 struct { @@ -55,16 +59,17 @@ func (m *Simple3) String() string { return proto.CompactTextString(m) } func (*Simple3) ProtoMessage() {} func (*Simple3) Descriptor() ([]byte, []int) { - return fileDescriptor_more_test_objects_bef0d79b901f4c4a, []int{0} + return fileDescriptor_e6c135db3023e377, []int{0} } + func (m *Simple3) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Simple3.Unmarshal(m, b) } func (m *Simple3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Simple3.Marshal(b, m, deterministic) } -func (dst *Simple3) XXX_Merge(src proto.Message) { - xxx_messageInfo_Simple3.Merge(dst, src) +func (m *Simple3) XXX_Merge(src proto.Message) { + xxx_messageInfo_Simple3.Merge(m, src) } func (m *Simple3) XXX_Size() int { return xxx_messageInfo_Simple3.Size(m) @@ -93,16 +98,17 @@ func (m *SimpleSlice3) String() string { return proto.CompactTextString(m) } func (*SimpleSlice3) ProtoMessage() {} func (*SimpleSlice3) Descriptor() ([]byte, []int) { - return fileDescriptor_more_test_objects_bef0d79b901f4c4a, []int{1} + return fileDescriptor_e6c135db3023e377, []int{1} } + func (m *SimpleSlice3) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SimpleSlice3.Unmarshal(m, b) } func (m *SimpleSlice3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SimpleSlice3.Marshal(b, m, deterministic) } -func (dst *SimpleSlice3) XXX_Merge(src proto.Message) { - xxx_messageInfo_SimpleSlice3.Merge(dst, src) +func (m *SimpleSlice3) XXX_Merge(src proto.Message) { + xxx_messageInfo_SimpleSlice3.Merge(m, src) } func (m *SimpleSlice3) XXX_Size() int { return xxx_messageInfo_SimpleSlice3.Size(m) @@ -131,16 +137,17 @@ func (m *SimpleMap3) String() string { return proto.CompactTextString(m) } func (*SimpleMap3) ProtoMessage() {} func (*SimpleMap3) Descriptor() ([]byte, []int) { - return fileDescriptor_more_test_objects_bef0d79b901f4c4a, []int{2} + return fileDescriptor_e6c135db3023e377, []int{2} } + func (m *SimpleMap3) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SimpleMap3.Unmarshal(m, b) } func (m *SimpleMap3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SimpleMap3.Marshal(b, m, deterministic) } -func (dst *SimpleMap3) XXX_Merge(src proto.Message) { - xxx_messageInfo_SimpleMap3.Merge(dst, src) +func (m *SimpleMap3) XXX_Merge(src proto.Message) { + xxx_messageInfo_SimpleMap3.Merge(m, src) } func (m *SimpleMap3) XXX_Size() int { return xxx_messageInfo_SimpleMap3.Size(m) @@ -169,16 +176,17 @@ func (m *SimpleNull3) String() string { return proto.CompactTextString(m) } func (*SimpleNull3) ProtoMessage() {} func (*SimpleNull3) Descriptor() ([]byte, []int) { - return fileDescriptor_more_test_objects_bef0d79b901f4c4a, []int{3} + return fileDescriptor_e6c135db3023e377, []int{3} } + func (m *SimpleNull3) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SimpleNull3.Unmarshal(m, b) } func (m *SimpleNull3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SimpleNull3.Marshal(b, m, deterministic) } -func (dst *SimpleNull3) XXX_Merge(src proto.Message) { - xxx_messageInfo_SimpleNull3.Merge(dst, src) +func (m *SimpleNull3) XXX_Merge(src proto.Message) { + xxx_messageInfo_SimpleNull3.Merge(m, src) } func (m *SimpleNull3) XXX_Size() int { return xxx_messageInfo_SimpleNull3.Size(m) @@ -216,16 +224,17 @@ func (m *Mappy) String() string { return proto.CompactTextString(m) } func (*Mappy) ProtoMessage() {} func (*Mappy) Descriptor() ([]byte, []int) { - return fileDescriptor_more_test_objects_bef0d79b901f4c4a, []int{4} + return fileDescriptor_e6c135db3023e377, []int{4} } + func (m *Mappy) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Mappy.Unmarshal(m, b) } func (m *Mappy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Mappy.Marshal(b, m, deterministic) } -func (dst *Mappy) XXX_Merge(src proto.Message) { - xxx_messageInfo_Mappy.Merge(dst, src) +func (m *Mappy) XXX_Merge(src proto.Message) { + xxx_messageInfo_Mappy.Merge(m, src) } func (m *Mappy) XXX_Size() int { return xxx_messageInfo_Mappy.Size(m) @@ -307,6 +316,7 @@ } func init() { + proto.RegisterEnum("jsonpb.Numeral", Numeral_name, Numeral_value) proto.RegisterType((*Simple3)(nil), "jsonpb.Simple3") proto.RegisterType((*SimpleSlice3)(nil), "jsonpb.SimpleSlice3") proto.RegisterType((*SimpleMap3)(nil), "jsonpb.SimpleMap3") @@ -323,14 +333,11 @@ proto.RegisterMapType((map[string]string)(nil), "jsonpb.Mappy.StrryEntry") proto.RegisterMapType((map[uint32]bool)(nil), "jsonpb.Mappy.U32boolyEntry") proto.RegisterMapType((map[uint64]bool)(nil), "jsonpb.Mappy.U64boolyEntry") - proto.RegisterEnum("jsonpb.Numeral", Numeral_name, Numeral_value) } -func init() { - proto.RegisterFile("more_test_objects.proto", fileDescriptor_more_test_objects_bef0d79b901f4c4a) -} +func init() { proto.RegisterFile("more_test_objects.proto", fileDescriptor_e6c135db3023e377) } -var fileDescriptor_more_test_objects_bef0d79b901f4c4a = []byte{ +var fileDescriptor_e6c135db3023e377 = []byte{ // 526 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdd, 0x6b, 0xdb, 0x3c, 0x14, 0x87, 0x5f, 0x27, 0xf5, 0xd7, 0x49, 0xfb, 0x2e, 0x88, 0xb1, 0x99, 0xf4, 0x62, 0xc5, 0xb0, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -3,14 +3,16 @@ package jsonpb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import any "github.com/golang/protobuf/ptypes/any" -import duration "github.com/golang/protobuf/ptypes/duration" -import _struct "github.com/golang/protobuf/ptypes/struct" -import timestamp "github.com/golang/protobuf/ptypes/timestamp" -import wrappers "github.com/golang/protobuf/ptypes/wrappers" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + duration "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + timestamp "github.com/golang/protobuf/ptypes/timestamp" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -36,6 +38,7 @@ 1: "GREEN", 2: "BLUE", } + var Widget_Color_value = map[string]int32{ "RED": 0, "GREEN": 1, @@ -47,9 +50,11 @@ *p = x return p } + func (x Widget_Color) String() string { return proto.EnumName(Widget_Color_name, int32(x)) } + func (x *Widget_Color) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(Widget_Color_value, data, "Widget_Color") if err != nil { @@ -58,8 +63,9 @@ *x = Widget_Color(value) return nil } + func (Widget_Color) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{3, 0} + return fileDescriptor_e97c739a0ce14cc6, []int{3, 0} } // Test message for holding primitive types. @@ -92,16 +98,17 @@ func (m *Simple) String() string { return proto.CompactTextString(m) } func (*Simple) ProtoMessage() {} func (*Simple) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{0} + return fileDescriptor_e97c739a0ce14cc6, []int{0} } + func (m *Simple) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Simple.Unmarshal(m, b) } func (m *Simple) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Simple.Marshal(b, m, deterministic) } -func (dst *Simple) XXX_Merge(src proto.Message) { - xxx_messageInfo_Simple.Merge(dst, src) +func (m *Simple) XXX_Merge(src proto.Message) { + xxx_messageInfo_Simple.Merge(m, src) } func (m *Simple) XXX_Size() int { return xxx_messageInfo_Simple.Size(m) @@ -262,16 +269,17 @@ func (m *NonFinites) String() string { return proto.CompactTextString(m) } func (*NonFinites) ProtoMessage() {} func (*NonFinites) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{1} + return fileDescriptor_e97c739a0ce14cc6, []int{1} } + func (m *NonFinites) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonFinites.Unmarshal(m, b) } func (m *NonFinites) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonFinites.Marshal(b, m, deterministic) } -func (dst *NonFinites) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonFinites.Merge(dst, src) +func (m *NonFinites) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonFinites.Merge(m, src) } func (m *NonFinites) XXX_Size() int { return xxx_messageInfo_NonFinites.Size(m) @@ -346,16 +354,17 @@ func (m *Repeats) String() string { return proto.CompactTextString(m) } func (*Repeats) ProtoMessage() {} func (*Repeats) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{2} + return fileDescriptor_e97c739a0ce14cc6, []int{2} } + func (m *Repeats) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Repeats.Unmarshal(m, b) } func (m *Repeats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Repeats.Marshal(b, m, deterministic) } -func (dst *Repeats) XXX_Merge(src proto.Message) { - xxx_messageInfo_Repeats.Merge(dst, src) +func (m *Repeats) XXX_Merge(src proto.Message) { + xxx_messageInfo_Repeats.Merge(m, src) } func (m *Repeats) XXX_Size() int { return xxx_messageInfo_Repeats.Size(m) @@ -460,16 +469,17 @@ func (m *Widget) String() string { return proto.CompactTextString(m) } func (*Widget) ProtoMessage() {} func (*Widget) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{3} + return fileDescriptor_e97c739a0ce14cc6, []int{3} } + func (m *Widget) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Widget.Unmarshal(m, b) } func (m *Widget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Widget.Marshal(b, m, deterministic) } -func (dst *Widget) XXX_Merge(src proto.Message) { - xxx_messageInfo_Widget.Merge(dst, src) +func (m *Widget) XXX_Merge(src proto.Message) { + xxx_messageInfo_Widget.Merge(m, src) } func (m *Widget) XXX_Size() int { return xxx_messageInfo_Widget.Size(m) @@ -534,16 +544,17 @@ func (m *Maps) String() string { return proto.CompactTextString(m) } func (*Maps) ProtoMessage() {} func (*Maps) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{4} + return fileDescriptor_e97c739a0ce14cc6, []int{4} } + func (m *Maps) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Maps.Unmarshal(m, b) } func (m *Maps) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Maps.Marshal(b, m, deterministic) } -func (dst *Maps) XXX_Merge(src proto.Message) { - xxx_messageInfo_Maps.Merge(dst, src) +func (m *Maps) XXX_Merge(src proto.Message) { + xxx_messageInfo_Maps.Merge(m, src) } func (m *Maps) XXX_Size() int { return xxx_messageInfo_Maps.Size(m) @@ -585,16 +596,17 @@ func (m *MsgWithOneof) String() string { return proto.CompactTextString(m) } func (*MsgWithOneof) ProtoMessage() {} func (*MsgWithOneof) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{5} + return fileDescriptor_e97c739a0ce14cc6, []int{5} } + func (m *MsgWithOneof) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgWithOneof.Unmarshal(m, b) } func (m *MsgWithOneof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MsgWithOneof.Marshal(b, m, deterministic) } -func (dst *MsgWithOneof) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgWithOneof.Merge(dst, src) +func (m *MsgWithOneof) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithOneof.Merge(m, src) } func (m *MsgWithOneof) XXX_Size() int { return xxx_messageInfo_MsgWithOneof.Size(m) @@ -807,7 +819,7 @@ func (m *Real) String() string { return proto.CompactTextString(m) } func (*Real) ProtoMessage() {} func (*Real) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{6} + return fileDescriptor_e97c739a0ce14cc6, []int{6} } var extRange_Real = []proto.ExtensionRange{ @@ -817,14 +829,15 @@ func (*Real) ExtensionRangeArray() []proto.ExtensionRange { return extRange_Real } + func (m *Real) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Real.Unmarshal(m, b) } func (m *Real) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Real.Marshal(b, m, deterministic) } -func (dst *Real) XXX_Merge(src proto.Message) { - xxx_messageInfo_Real.Merge(dst, src) +func (m *Real) XXX_Merge(src proto.Message) { + xxx_messageInfo_Real.Merge(m, src) } func (m *Real) XXX_Size() int { return xxx_messageInfo_Real.Size(m) @@ -854,7 +867,7 @@ func (m *Complex) String() string { return proto.CompactTextString(m) } func (*Complex) ProtoMessage() {} func (*Complex) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{7} + return fileDescriptor_e97c739a0ce14cc6, []int{7} } var extRange_Complex = []proto.ExtensionRange{ @@ -864,14 +877,15 @@ func (*Complex) ExtensionRangeArray() []proto.ExtensionRange { return extRange_Complex } + func (m *Complex) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Complex.Unmarshal(m, b) } func (m *Complex) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Complex.Marshal(b, m, deterministic) } -func (dst *Complex) XXX_Merge(src proto.Message) { - xxx_messageInfo_Complex.Merge(dst, src) +func (m *Complex) XXX_Merge(src proto.Message) { + xxx_messageInfo_Complex.Merge(m, src) } func (m *Complex) XXX_Size() int { return xxx_messageInfo_Complex.Size(m) @@ -894,7 +908,7 @@ ExtensionType: (*Complex)(nil), Field: 123, Name: "jsonpb.Complex.real_extension", - Tag: "bytes,123,opt,name=real_extension,json=realExtension", + Tag: "bytes,123,opt,name=real_extension", Filename: "test_objects.proto", } @@ -923,16 +937,17 @@ func (m *KnownTypes) String() string { return proto.CompactTextString(m) } func (*KnownTypes) ProtoMessage() {} func (*KnownTypes) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{8} + return fileDescriptor_e97c739a0ce14cc6, []int{8} } + func (m *KnownTypes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KnownTypes.Unmarshal(m, b) } func (m *KnownTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_KnownTypes.Marshal(b, m, deterministic) } -func (dst *KnownTypes) XXX_Merge(src proto.Message) { - xxx_messageInfo_KnownTypes.Merge(dst, src) +func (m *KnownTypes) XXX_Merge(src proto.Message) { + xxx_messageInfo_KnownTypes.Merge(m, src) } func (m *KnownTypes) XXX_Size() int { return xxx_messageInfo_KnownTypes.Size(m) @@ -1060,16 +1075,17 @@ func (m *MsgWithRequired) String() string { return proto.CompactTextString(m) } func (*MsgWithRequired) ProtoMessage() {} func (*MsgWithRequired) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{9} + return fileDescriptor_e97c739a0ce14cc6, []int{9} } + func (m *MsgWithRequired) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgWithRequired.Unmarshal(m, b) } func (m *MsgWithRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MsgWithRequired.Marshal(b, m, deterministic) } -func (dst *MsgWithRequired) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgWithRequired.Merge(dst, src) +func (m *MsgWithRequired) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithRequired.Merge(m, src) } func (m *MsgWithRequired) XXX_Size() int { return xxx_messageInfo_MsgWithRequired.Size(m) @@ -1100,16 +1116,17 @@ func (m *MsgWithIndirectRequired) String() string { return proto.CompactTextString(m) } func (*MsgWithIndirectRequired) ProtoMessage() {} func (*MsgWithIndirectRequired) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{10} + return fileDescriptor_e97c739a0ce14cc6, []int{10} } + func (m *MsgWithIndirectRequired) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgWithIndirectRequired.Unmarshal(m, b) } func (m *MsgWithIndirectRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MsgWithIndirectRequired.Marshal(b, m, deterministic) } -func (dst *MsgWithIndirectRequired) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgWithIndirectRequired.Merge(dst, src) +func (m *MsgWithIndirectRequired) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithIndirectRequired.Merge(m, src) } func (m *MsgWithIndirectRequired) XXX_Size() int { return xxx_messageInfo_MsgWithIndirectRequired.Size(m) @@ -1152,16 +1169,17 @@ func (m *MsgWithRequiredBytes) String() string { return proto.CompactTextString(m) } func (*MsgWithRequiredBytes) ProtoMessage() {} func (*MsgWithRequiredBytes) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{11} + return fileDescriptor_e97c739a0ce14cc6, []int{11} } + func (m *MsgWithRequiredBytes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgWithRequiredBytes.Unmarshal(m, b) } func (m *MsgWithRequiredBytes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MsgWithRequiredBytes.Marshal(b, m, deterministic) } -func (dst *MsgWithRequiredBytes) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgWithRequiredBytes.Merge(dst, src) +func (m *MsgWithRequiredBytes) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithRequiredBytes.Merge(m, src) } func (m *MsgWithRequiredBytes) XXX_Size() int { return xxx_messageInfo_MsgWithRequiredBytes.Size(m) @@ -1190,16 +1208,17 @@ func (m *MsgWithRequiredWKT) String() string { return proto.CompactTextString(m) } func (*MsgWithRequiredWKT) ProtoMessage() {} func (*MsgWithRequiredWKT) Descriptor() ([]byte, []int) { - return fileDescriptor_test_objects_a4d3e593ea3c686f, []int{12} + return fileDescriptor_e97c739a0ce14cc6, []int{12} } + func (m *MsgWithRequiredWKT) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgWithRequiredWKT.Unmarshal(m, b) } func (m *MsgWithRequiredWKT) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MsgWithRequiredWKT.Marshal(b, m, deterministic) } -func (dst *MsgWithRequiredWKT) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgWithRequiredWKT.Merge(dst, src) +func (m *MsgWithRequiredWKT) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithRequiredWKT.Merge(m, src) } func (m *MsgWithRequiredWKT) XXX_Size() int { return xxx_messageInfo_MsgWithRequiredWKT.Size(m) @@ -1236,6 +1255,7 @@ } func init() { + proto.RegisterEnum("jsonpb.Widget_Color", Widget_Color_name, Widget_Color_value) proto.RegisterType((*Simple)(nil), "jsonpb.Simple") proto.RegisterType((*NonFinites)(nil), "jsonpb.NonFinites") proto.RegisterType((*Repeats)(nil), "jsonpb.Repeats") @@ -1245,6 +1265,7 @@ proto.RegisterMapType((map[int64]string)(nil), "jsonpb.Maps.MInt64StrEntry") proto.RegisterType((*MsgWithOneof)(nil), "jsonpb.MsgWithOneof") proto.RegisterType((*Real)(nil), "jsonpb.Real") + proto.RegisterExtension(E_Complex_RealExtension) proto.RegisterType((*Complex)(nil), "jsonpb.Complex") proto.RegisterType((*KnownTypes)(nil), "jsonpb.KnownTypes") proto.RegisterType((*MsgWithRequired)(nil), "jsonpb.MsgWithRequired") @@ -1252,15 +1273,13 @@ proto.RegisterMapType((map[string]*MsgWithRequired)(nil), "jsonpb.MsgWithIndirectRequired.MapFieldEntry") proto.RegisterType((*MsgWithRequiredBytes)(nil), "jsonpb.MsgWithRequiredBytes") proto.RegisterType((*MsgWithRequiredWKT)(nil), "jsonpb.MsgWithRequiredWKT") - proto.RegisterEnum("jsonpb.Widget_Color", Widget_Color_name, Widget_Color_value) - proto.RegisterExtension(E_Complex_RealExtension) proto.RegisterExtension(E_Name) proto.RegisterExtension(E_Extm) } -func init() { proto.RegisterFile("test_objects.proto", fileDescriptor_test_objects_a4d3e593ea3c686f) } +func init() { proto.RegisterFile("test_objects.proto", fileDescriptor_e97c739a0ce14cc6) } -var fileDescriptor_test_objects_a4d3e593ea3c686f = []byte{ +var fileDescriptor_e97c739a0ce14cc6 = []byte{ // 1460 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xdd, 0x72, 0xdb, 0x44, 0x14, 0x8e, 0x24, 0xcb, 0xb6, 0x8e, 0xf3, 0xd7, 0x6d, 0xda, 0x2a, 0xa1, 0x14, 0x8d, 0x5b, 0x8a, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/clone_test.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/clone_test.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/clone_test.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/clone_test.go 2018-11-22 20:53:18.000000000 +0000 @@ -67,34 +67,50 @@ if err := proto.SetExtension(cloneTestMessage, pb.E_Ext_More, ext); err != nil { panic("SetExtension: " + err.Error()) } + if err := proto.SetExtension(cloneTestMessage, pb.E_Ext_Text, proto.String("hello")); err != nil { + panic("SetExtension: " + err.Error()) + } + if err := proto.SetExtension(cloneTestMessage, pb.E_Greeting, []string{"one", "two"}); err != nil { + panic("SetExtension: " + err.Error()) + } } func TestClone(t *testing.T) { + // Create a clone using a marshal/unmarshal roundtrip. + vanilla := new(pb.MyMessage) + b, err := proto.Marshal(cloneTestMessage) + if err != nil { + t.Errorf("unexpected Marshal error: %v", err) + } + if err := proto.Unmarshal(b, vanilla); err != nil { + t.Errorf("unexpected Unarshal error: %v", err) + } + + // Create a clone using Clone and verify that it is equal to the original. m := proto.Clone(cloneTestMessage).(*pb.MyMessage) if !proto.Equal(m, cloneTestMessage) { t.Fatalf("Clone(%v) = %v", cloneTestMessage, m) } - // Verify it was a deep copy. - *m.Inner.Port++ - if proto.Equal(m, cloneTestMessage) { - t.Error("Mutating clone changed the original") - } - // Byte fields and repeated fields should be copied. - if &m.Pet[0] == &cloneTestMessage.Pet[0] { - t.Error("Pet: repeated field not copied") - } - if &m.Others[0] == &cloneTestMessage.Others[0] { - t.Error("Others: repeated field not copied") + // Mutate the clone, which should not affect the original. + x1, err := proto.GetExtension(m, pb.E_Ext_More) + if err != nil { + t.Errorf("unexpected GetExtension(%v) error: %v", pb.E_Ext_More.Name, err) + } + x2, err := proto.GetExtension(m, pb.E_Ext_Text) + if err != nil { + t.Errorf("unexpected GetExtension(%v) error: %v", pb.E_Ext_Text.Name, err) + } + x3, err := proto.GetExtension(m, pb.E_Greeting) + if err != nil { + t.Errorf("unexpected GetExtension(%v) error: %v", pb.E_Greeting.Name, err) } - if &m.Others[0].Value[0] == &cloneTestMessage.Others[0].Value[0] { - t.Error("Others[0].Value: bytes field not copied") - } - if &m.RepBytes[0] == &cloneTestMessage.RepBytes[0] { - t.Error("RepBytes: repeated field not copied") - } - if &m.RepBytes[0][0] == &cloneTestMessage.RepBytes[0][0] { - t.Error("RepBytes[0]: bytes field not copied") + *m.Inner.Port++ + *(x1.(*pb.Ext)).Data = "blah blah" + *(x2.(*string)) = "goodbye" + x3.([]string)[0] = "zero" + if !proto.Equal(cloneTestMessage, vanilla) { + t.Fatalf("mutation on original detected:\ngot %v\nwant %v", cloneTestMessage, vanilla) } } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/decode.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/decode.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/decode.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/decode.go 2018-11-22 20:53:18.000000000 +0000 @@ -186,7 +186,6 @@ if b&0x80 == 0 { goto done } - // x -= 0x80 << 63 // Always zero. return 0, errOverflow diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/deprecated.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/deprecated.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/deprecated.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/deprecated.go 2018-11-22 20:53:18.000000000 +0000 @@ -0,0 +1,63 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2018 The Go Authors. All rights reserved. +// https://github.com/golang/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. +// * 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. + +package proto + +import "errors" + +// Deprecated: do not use. +type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 } + +// Deprecated: do not use. +func GetStats() Stats { return Stats{} } + +// Deprecated: do not use. +func MarshalMessageSet(interface{}) ([]byte, error) { + return nil, errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func UnmarshalMessageSet([]byte, interface{}) error { + return errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func MarshalMessageSetJSON(interface{}) ([]byte, error) { + return nil, errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func UnmarshalMessageSetJSON([]byte, interface{}) error { + return errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func RegisterMessageSetType(Message, int32, string) {} diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/equal.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/equal.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/equal.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/equal.go 2018-11-22 20:53:18.000000000 +0000 @@ -246,7 +246,8 @@ return false } - m1, m2 := e1.value, e2.value + m1 := extensionAsLegacyType(e1.value) + m2 := extensionAsLegacyType(e2.value) if m1 == nil && m2 == nil { // Both have only encoded form. diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/extensions.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/extensions.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/extensions.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/extensions.go 2018-11-22 20:53:18.000000000 +0000 @@ -185,9 +185,25 @@ // extension will have only enc set. When such an extension is // accessed using GetExtension (or GetExtensions) desc and value // will be set. - desc *ExtensionDesc + desc *ExtensionDesc + + // value is a concrete value for the extension field. Let the type of + // desc.ExtensionType be the "API type" and the type of Extension.value + // be the "storage type". The API type and storage type are the same except: + // * For scalars (except []byte), the API type uses *T, + // while the storage type uses T. + // * For repeated fields, the API type uses []T, while the storage type + // uses *[]T. + // + // The reason for the divergence is so that the storage type more naturally + // matches what is expected of when retrieving the values through the + // protobuf reflection APIs. + // + // The value may only be populated if desc is also populated. value interface{} - enc []byte + + // enc is the raw bytes for the extension field. + enc []byte } // SetRawExtension is for testing only. @@ -334,7 +350,7 @@ // descriptors with the same field number. return nil, errors.New("proto: descriptor conflict") } - return e.value, nil + return extensionAsLegacyType(e.value), nil } if extension.ExtensionType == nil { @@ -349,11 +365,11 @@ // Remember the decoded version and drop the encoded version. // That way it is safe to mutate what we return. - e.value = v + e.value = extensionAsStorageType(v) e.desc = extension e.enc = nil emap[extension.Field] = e - return e.value, nil + return extensionAsLegacyType(e.value), nil } // defaultExtensionValue returns the default value for extension. @@ -488,7 +504,7 @@ } typ := reflect.TypeOf(extension.ExtensionType) if typ != reflect.TypeOf(value) { - return errors.New("proto: bad extension value type") + return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType) } // nil extension values need to be caught early, because the // encoder can't distinguish an ErrNil due to a nil extension @@ -500,7 +516,7 @@ } extmap := epb.extensionsWrite() - extmap[extension.Field] = Extension{desc: extension, value: value} + extmap[extension.Field] = Extension{desc: extension, value: extensionAsStorageType(value)} return nil } @@ -541,3 +557,51 @@ func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { return extensionMaps[reflect.TypeOf(pb).Elem()] } + +// extensionAsLegacyType converts an value in the storage type as the API type. +// See Extension.value. +func extensionAsLegacyType(v interface{}) interface{} { + switch rv := reflect.ValueOf(v); rv.Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + // Represent primitive types as a pointer to the value. + rv2 := reflect.New(rv.Type()) + rv2.Elem().Set(rv) + v = rv2.Interface() + case reflect.Ptr: + // Represent slice types as the value itself. + switch rv.Type().Elem().Kind() { + case reflect.Slice: + if rv.IsNil() { + v = reflect.Zero(rv.Type().Elem()).Interface() + } else { + v = rv.Elem().Interface() + } + } + } + return v +} + +// extensionAsStorageType converts an value in the API type as the storage type. +// See Extension.value. +func extensionAsStorageType(v interface{}) interface{} { + switch rv := reflect.ValueOf(v); rv.Kind() { + case reflect.Ptr: + // Represent slice types as the value itself. + switch rv.Type().Elem().Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + if rv.IsNil() { + v = reflect.Zero(rv.Type().Elem()).Interface() + } else { + v = rv.Elem().Interface() + } + } + case reflect.Slice: + // Represent slice types as a pointer to the value. + if rv.Type().Elem().Kind() != reflect.Uint8 { + rv2 := reflect.New(rv.Type()) + rv2.Elem().Set(rv) + v = rv2.Interface() + } + } + return v +} diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/lib.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/lib.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/lib.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/lib.go 2018-11-22 20:53:18.000000000 +0000 @@ -341,26 +341,6 @@ ProtoMessage() } -// Stats records allocation details about the protocol buffer encoders -// and decoders. Useful for tuning the library itself. -type Stats struct { - Emalloc uint64 // mallocs in encode - Dmalloc uint64 // mallocs in decode - Encode uint64 // number of encodes - Decode uint64 // number of decodes - Chit uint64 // number of cache hits - Cmiss uint64 // number of cache misses - Size uint64 // number of sizes -} - -// Set to true to enable stats collection. -const collectStats = false - -var stats Stats - -// GetStats returns a copy of the global Stats structure. -func GetStats() Stats { return stats } - // A Buffer is a buffer manager for marshaling and unmarshaling // protocol buffers. It may be reused between invocations to // reduce memory usage. It is not necessary to use a Buffer; diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/message_set.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/message_set.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/message_set.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/message_set.go 2018-11-22 20:53:18.000000000 +0000 @@ -36,13 +36,7 @@ */ import ( - "bytes" - "encoding/json" "errors" - "fmt" - "reflect" - "sort" - "sync" ) // errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. @@ -145,46 +139,9 @@ return buf[i+1:] } -// MarshalMessageSet encodes the extension map represented by m in the message set wire format. -// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSet(exts interface{}) ([]byte, error) { - return marshalMessageSet(exts, false) -} - -// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal. -func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) { - switch exts := exts.(type) { - case *XXX_InternalExtensions: - var u marshalInfo - siz := u.sizeMessageSet(exts) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, exts, deterministic) - - case map[int32]Extension: - // This is an old-style extension map. - // Wrap it in a new-style XXX_InternalExtensions. - ie := XXX_InternalExtensions{ - p: &struct { - mu sync.Mutex - extensionMap map[int32]Extension - }{ - extensionMap: exts, - }, - } - - var u marshalInfo - siz := u.sizeMessageSet(&ie) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, &ie, deterministic) - - default: - return nil, errors.New("proto: not an extension map") - } -} - -// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. +// unmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. // It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSet(buf []byte, exts interface{}) error { +func unmarshalMessageSet(buf []byte, exts interface{}) error { var m map[int32]Extension switch exts := exts.(type) { case *XXX_InternalExtensions: @@ -222,93 +179,3 @@ } return nil } - -// MarshalMessageSetJSON encodes the extension map represented by m in JSON format. -// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - var mu sync.Locker - m, mu = exts.extensionsRead() - if m != nil { - // Keep the extensions map locked until we're done marshaling to prevent - // races between marshaling and unmarshaling the lazily-{en,de}coded - // values. - mu.Lock() - defer mu.Unlock() - } - case map[int32]Extension: - m = exts - default: - return nil, errors.New("proto: not an extension map") - } - var b bytes.Buffer - b.WriteByte('{') - - // Process the map in key order for deterministic output. - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) // int32Slice defined in text.go - - for i, id := range ids { - ext := m[id] - msd, ok := messageSetMap[id] - if !ok { - // Unknown type; we can't render it, so skip it. - continue - } - - if i > 0 && b.Len() > 1 { - b.WriteByte(',') - } - - fmt.Fprintf(&b, `"[%s]":`, msd.name) - - x := ext.value - if x == nil { - x = reflect.New(msd.t.Elem()).Interface() - if err := Unmarshal(ext.enc, x.(Message)); err != nil { - return nil, err - } - } - d, err := json.Marshal(x) - if err != nil { - return nil, err - } - b.Write(d) - } - b.WriteByte('}') - return b.Bytes(), nil -} - -// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. -// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { - // Common-case fast path. - if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { - return nil - } - - // This is fairly tricky, and it's not clear that it is needed. - return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented") -} - -// A global registry of types that can be used in a MessageSet. - -var messageSetMap = make(map[int32]messageSetDesc) - -type messageSetDesc struct { - t reflect.Type // pointer to struct - name string -} - -// RegisterMessageSetType is called from the generated code. -func RegisterMessageSetType(m Message, fieldNum int32, name string) { - messageSetMap[fieldNum] = messageSetDesc{ - t: reflect.TypeOf(m), - name: name, - } -} diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/message_set_test.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/message_set_test.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/message_set_test.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/message_set_test.go 2018-11-22 20:53:18.000000000 +0000 @@ -29,49 +29,60 @@ // (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 proto +package proto_test import ( "bytes" + "fmt" "testing" + + "github.com/golang/protobuf/proto" + . "github.com/golang/protobuf/proto/test_proto" ) func TestUnmarshalMessageSetWithDuplicate(t *testing.T) { - // Check that a repeated message set entry will be concatenated. - in := &messageSet{ - Item: []*_MessageSet_Item{ - {TypeId: Int32(12345), Message: []byte("hoo")}, - {TypeId: Int32(12345), Message: []byte("hah")}, - }, - } - b, err := Marshal(in) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - t.Logf("Marshaled bytes: %q", b) + /* + Message{ + Tag{1, StartGroup}, + Message{ + Tag{2, Varint}, Uvarint(12345), + Tag{3, Bytes}, Bytes("hoo"), + }, + Tag{1, EndGroup}, + Tag{1, StartGroup}, + Message{ + Tag{2, Varint}, Uvarint(12345), + Tag{3, Bytes}, Bytes("hah"), + }, + Tag{1, EndGroup}, + } + */ + var in []byte + fmt.Sscanf("0b10b9601a03686f6f0c0b10b9601a036861680c", "%x", &in) - var extensions XXX_InternalExtensions - if err := UnmarshalMessageSet(b, &extensions); err != nil { - t.Fatalf("UnmarshalMessageSet: %v", err) - } - ext, ok := extensions.p.extensionMap[12345] - if !ok { - t.Fatalf("Didn't retrieve extension 12345; map is %v", extensions.p.extensionMap) - } - // Skip wire type/field number and length varints. - got := skipVarint(skipVarint(ext.enc)) - if want := []byte("hoohah"); !bytes.Equal(got, want) { - t.Errorf("Combined extension is %q, want %q", got, want) - } -} + /* + Message{ + Tag{1, StartGroup}, + Message{ + Tag{2, Varint}, Uvarint(12345), + Tag{3, Bytes}, Bytes("hoohah"), + }, + Tag{1, EndGroup}, + } + */ + var want []byte + fmt.Sscanf("0b10b9601a06686f6f6861680c", "%x", &want) -func TestMarshalMessageSetJSON_UnknownType(t *testing.T) { - extMap := map[int32]Extension{12345: Extension{}} - got, err := MarshalMessageSetJSON(extMap) + var m MyMessageSet + if err := proto.Unmarshal(in, &m); err != nil { + t.Fatalf("unexpected Unmarshal error: %v", err) + } + got, err := proto.Marshal(&m) if err != nil { - t.Fatalf("MarshalMessageSetJSON: %v", err) + t.Fatalf("unexpected Marshal error: %v", err) } - if want := []byte("{}"); !bytes.Equal(got, want) { - t.Errorf("MarshalMessageSetJSON(%v) = %q, want %q", extMap, got, want) + + if !bytes.Equal(got, want) { + t.Errorf("output mismatch:\ngot %x\nwant %x", got, want) } } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/pointer_reflect.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/pointer_reflect.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/pointer_reflect.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/pointer_reflect.go 2018-11-22 20:53:18.000000000 +0000 @@ -79,10 +79,13 @@ // toAddrPointer converts an interface to a pointer that points to // the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { +func toAddrPointer(i *interface{}, isptr, deref bool) pointer { v := reflect.ValueOf(*i) u := reflect.New(v.Type()) u.Elem().Set(v) + if deref { + u = u.Elem() + } return pointer{v: u} } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/pointer_unsafe.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/pointer_unsafe.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/pointer_unsafe.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/pointer_unsafe.go 2018-11-22 20:53:18.000000000 +0000 @@ -85,16 +85,21 @@ // toAddrPointer converts an interface to a pointer that points to // the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { +func toAddrPointer(i *interface{}, isptr, deref bool) (p pointer) { // Super-tricky - read or get the address of data word of interface value. if isptr { // The interface is of pointer type, thus it is a direct interface. // The data word is the pointer data itself. We take its address. - return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} + p = pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} + } else { + // The interface is not of pointer type. The data word is the pointer + // to the data. + p = pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} } - // The interface is not of pointer type. The data word is the pointer - // to the data. - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} + if deref { + p.p = *(*unsafe.Pointer)(p.p) + } + return p } // valToPointer converts v to a pointer. v must be of pointer type. diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/properties.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/properties.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/properties.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/properties.go 2018-11-22 20:53:18.000000000 +0000 @@ -334,9 +334,6 @@ sprop, ok := propertiesMap[t] propertiesMu.RUnlock() if ok { - if collectStats { - stats.Chit++ - } return sprop } @@ -349,14 +346,8 @@ // getPropertiesLocked requires that propertiesMu is held. func getPropertiesLocked(t reflect.Type) *StructProperties { if prop, ok := propertiesMap[t]; ok { - if collectStats { - stats.Chit++ - } return prop } - if collectStats { - stats.Cmiss++ - } prop := new(StructProperties) // in case of recursive protos, fill this in now. diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -3,11 +3,13 @@ package proto3_proto -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import test_proto "github.com/golang/protobuf/proto/test_proto" -import any "github.com/golang/protobuf/ptypes/any" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + test_proto "github.com/golang/protobuf/proto/test_proto" + any "github.com/golang/protobuf/ptypes/any" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -35,6 +37,7 @@ 2: "SLAPSTICK", 3: "BILL_BAILEY", } + var Message_Humour_value = map[string]int32{ "UNKNOWN": 0, "PUNS": 1, @@ -45,8 +48,9 @@ func (x Message_Humour) String() string { return proto.EnumName(Message_Humour_name, int32(x)) } + func (Message_Humour) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_proto3_78ae00cd7e6e5e35, []int{0, 0} + return fileDescriptor_1c50d9b824d4ac38, []int{0, 0} } type Message struct { @@ -78,16 +82,17 @@ func (m *Message) String() string { return proto.CompactTextString(m) } func (*Message) ProtoMessage() {} func (*Message) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_78ae00cd7e6e5e35, []int{0} + return fileDescriptor_1c50d9b824d4ac38, []int{0} } + func (m *Message) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Message.Unmarshal(m, b) } func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Message.Marshal(b, m, deterministic) } -func (dst *Message) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message.Merge(dst, src) +func (m *Message) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message.Merge(m, src) } func (m *Message) XXX_Size() int { return xxx_messageInfo_Message.Size(m) @@ -243,16 +248,17 @@ func (m *Nested) String() string { return proto.CompactTextString(m) } func (*Nested) ProtoMessage() {} func (*Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_78ae00cd7e6e5e35, []int{1} + return fileDescriptor_1c50d9b824d4ac38, []int{1} } + func (m *Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Nested.Unmarshal(m, b) } func (m *Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Nested.Marshal(b, m, deterministic) } -func (dst *Nested) XXX_Merge(src proto.Message) { - xxx_messageInfo_Nested.Merge(dst, src) +func (m *Nested) XXX_Merge(src proto.Message) { + xxx_messageInfo_Nested.Merge(m, src) } func (m *Nested) XXX_Size() int { return xxx_messageInfo_Nested.Size(m) @@ -288,16 +294,17 @@ func (m *MessageWithMap) String() string { return proto.CompactTextString(m) } func (*MessageWithMap) ProtoMessage() {} func (*MessageWithMap) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_78ae00cd7e6e5e35, []int{2} + return fileDescriptor_1c50d9b824d4ac38, []int{2} } + func (m *MessageWithMap) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithMap.Unmarshal(m, b) } func (m *MessageWithMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MessageWithMap.Marshal(b, m, deterministic) } -func (dst *MessageWithMap) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessageWithMap.Merge(dst, src) +func (m *MessageWithMap) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessageWithMap.Merge(m, src) } func (m *MessageWithMap) XXX_Size() int { return xxx_messageInfo_MessageWithMap.Size(m) @@ -326,16 +333,17 @@ func (m *IntMap) String() string { return proto.CompactTextString(m) } func (*IntMap) ProtoMessage() {} func (*IntMap) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_78ae00cd7e6e5e35, []int{3} + return fileDescriptor_1c50d9b824d4ac38, []int{3} } + func (m *IntMap) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_IntMap.Unmarshal(m, b) } func (m *IntMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_IntMap.Marshal(b, m, deterministic) } -func (dst *IntMap) XXX_Merge(src proto.Message) { - xxx_messageInfo_IntMap.Merge(dst, src) +func (m *IntMap) XXX_Merge(src proto.Message) { + xxx_messageInfo_IntMap.Merge(m, src) } func (m *IntMap) XXX_Size() int { return xxx_messageInfo_IntMap.Size(m) @@ -364,16 +372,17 @@ func (m *IntMaps) String() string { return proto.CompactTextString(m) } func (*IntMaps) ProtoMessage() {} func (*IntMaps) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_78ae00cd7e6e5e35, []int{4} + return fileDescriptor_1c50d9b824d4ac38, []int{4} } + func (m *IntMaps) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_IntMaps.Unmarshal(m, b) } func (m *IntMaps) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_IntMaps.Marshal(b, m, deterministic) } -func (dst *IntMaps) XXX_Merge(src proto.Message) { - xxx_messageInfo_IntMaps.Merge(dst, src) +func (m *IntMaps) XXX_Merge(src proto.Message) { + xxx_messageInfo_IntMaps.Merge(m, src) } func (m *IntMaps) XXX_Size() int { return xxx_messageInfo_IntMaps.Size(m) @@ -408,16 +417,17 @@ func (m *TestUTF8) String() string { return proto.CompactTextString(m) } func (*TestUTF8) ProtoMessage() {} func (*TestUTF8) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_78ae00cd7e6e5e35, []int{5} + return fileDescriptor_1c50d9b824d4ac38, []int{5} } + func (m *TestUTF8) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TestUTF8.Unmarshal(m, b) } func (m *TestUTF8) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_TestUTF8.Marshal(b, m, deterministic) } -func (dst *TestUTF8) XXX_Merge(src proto.Message) { - xxx_messageInfo_TestUTF8.Merge(dst, src) +func (m *TestUTF8) XXX_Merge(src proto.Message) { + xxx_messageInfo_TestUTF8.Merge(m, src) } func (m *TestUTF8) XXX_Size() int { return xxx_messageInfo_TestUTF8.Size(m) @@ -532,6 +542,7 @@ } func init() { + proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) proto.RegisterType((*Message)(nil), "proto3_proto.Message") proto.RegisterMapType((map[string]*test_proto.SubDefaults)(nil), "proto3_proto.Message.Proto2ValueEntry") proto.RegisterMapType((map[string]string)(nil), "proto3_proto.Message.StringMapEntry") @@ -545,12 +556,11 @@ proto.RegisterType((*TestUTF8)(nil), "proto3_proto.TestUTF8") proto.RegisterMapType((map[string]int64)(nil), "proto3_proto.TestUTF8.MapKeyEntry") proto.RegisterMapType((map[int64]string)(nil), "proto3_proto.TestUTF8.MapValueEntry") - proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) } -func init() { proto.RegisterFile("proto3_proto/proto3.proto", fileDescriptor_proto3_78ae00cd7e6e5e35) } +func init() { proto.RegisterFile("proto3_proto/proto3.proto", fileDescriptor_1c50d9b824d4ac38) } -var fileDescriptor_proto3_78ae00cd7e6e5e35 = []byte{ +var fileDescriptor_1c50d9b824d4ac38 = []byte{ // 896 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x6f, 0x6f, 0xdb, 0xb6, 0x13, 0xae, 0x2c, 0xff, 0x91, 0xcf, 0x76, 0xea, 0x1f, 0x7f, 0x6e, 0xc7, 0x7a, 0x1b, 0xa0, 0x79, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/size2_test.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/size2_test.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/size2_test.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/size2_test.go 2018-11-22 20:53:18.000000000 +0000 @@ -32,6 +32,7 @@ package proto import ( + "math" "testing" ) @@ -51,8 +52,8 @@ {128, 2}, {16383, 2}, {16384, 3}, - {1<<63 - 1, 9}, - {1 << 63, 10}, + {math.MaxInt64, 9}, + {math.MaxInt64 + 1, 10}, } for _, tc := range testCases { size := SizeVarint(tc.n) diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/table_marshal.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/table_marshal.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/table_marshal.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/table_marshal.go 2018-11-22 20:53:18.000000000 +0000 @@ -87,6 +87,7 @@ sizer sizer marshaler marshaler isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) + deref bool // dereference the pointer before operating on it; implies isptr } var ( @@ -407,13 +408,22 @@ panic("tag is not an integer") } wt := wiretype(tags[0]) + if t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct { + t = t.Elem() + } sizer, marshaler := typeMarshaler(t, tags, false, false) + var deref bool + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + t = reflect.PtrTo(t) + deref = true + } e = &marshalElemInfo{ wiretag: uint64(tag)<<3 | wt, tagsize: SizeVarint(uint64(tag) << 3), sizer: sizer, marshaler: marshaler, isptr: t.Kind() == reflect.Ptr, + deref: deref, } // update cache @@ -448,7 +458,7 @@ func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { fi.field = toField(f) - fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. + fi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. fi.isPointer = true fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) @@ -2310,8 +2320,8 @@ for _, k := range m.MapKeys() { ki := k.Interface() vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value + kaddr := toAddrPointer(&ki, false, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) n += siz + SizeVarint(uint64(siz)) + tagsize } @@ -2329,8 +2339,8 @@ for _, k := range keys { ki := k.Interface() vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value + kaddr := toAddrPointer(&ki, false, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value b = appendVarint(b, tag) siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) b = appendVarint(b, uint64(siz)) @@ -2399,7 +2409,7 @@ // the last time this function was called. ei := u.getExtElemInfo(e.desc) v := e.value - p := toAddrPointer(&v, ei.isptr) + p := toAddrPointer(&v, ei.isptr, ei.deref) n += ei.sizer(p, ei.tagsize) } mu.Unlock() @@ -2434,7 +2444,7 @@ ei := u.getExtElemInfo(e.desc) v := e.value - p := toAddrPointer(&v, ei.isptr) + p := toAddrPointer(&v, ei.isptr, ei.deref) b, err = ei.marshaler(b, p, ei.wiretag, deterministic) if !nerr.Merge(err) { return b, err @@ -2465,7 +2475,7 @@ ei := u.getExtElemInfo(e.desc) v := e.value - p := toAddrPointer(&v, ei.isptr) + p := toAddrPointer(&v, ei.isptr, ei.deref) b, err = ei.marshaler(b, p, ei.wiretag, deterministic) if !nerr.Merge(err) { return b, err @@ -2510,7 +2520,7 @@ ei := u.getExtElemInfo(e.desc) v := e.value - p := toAddrPointer(&v, ei.isptr) + p := toAddrPointer(&v, ei.isptr, ei.deref) n += ei.sizer(p, 1) // message, tag = 3 (size=1) } mu.Unlock() @@ -2553,7 +2563,7 @@ ei := u.getExtElemInfo(e.desc) v := e.value - p := toAddrPointer(&v, ei.isptr) + p := toAddrPointer(&v, ei.isptr, ei.deref) b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) if !nerr.Merge(err) { return b, err @@ -2591,7 +2601,7 @@ ei := u.getExtElemInfo(e.desc) v := e.value - p := toAddrPointer(&v, ei.isptr) + p := toAddrPointer(&v, ei.isptr, ei.deref) b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) b = append(b, 1<<3|WireEndGroup) if !nerr.Merge(err) { @@ -2621,7 +2631,7 @@ ei := u.getExtElemInfo(e.desc) v := e.value - p := toAddrPointer(&v, ei.isptr) + p := toAddrPointer(&v, ei.isptr, ei.deref) n += ei.sizer(p, ei.tagsize) } return n @@ -2656,7 +2666,7 @@ ei := u.getExtElemInfo(e.desc) v := e.value - p := toAddrPointer(&v, ei.isptr) + p := toAddrPointer(&v, ei.isptr, ei.deref) b, err = ei.marshaler(b, p, ei.wiretag, deterministic) if !nerr.Merge(err) { return b, err diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/table_unmarshal.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/table_unmarshal.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/table_unmarshal.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/table_unmarshal.go 2018-11-22 20:53:18.000000000 +0000 @@ -136,7 +136,7 @@ u.computeUnmarshalInfo() } if u.isMessageSet { - return UnmarshalMessageSet(b, m.offset(u.extensions).toExtensions()) + return unmarshalMessageSet(b, m.offset(u.extensions).toExtensions()) } var reqMask uint64 // bitmask of required fields we've seen. var errLater error @@ -1948,7 +1948,7 @@ // If there is an error, it returns 0,0. func decodeVarint(b []byte) (uint64, int) { var x, y uint64 - if len(b) <= 0 { + if len(b) == 0 { goto bad } x = uint64(b[0]) diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/test_proto/test.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/test_proto/test.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/proto/test_proto/test.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/proto/test_proto/test.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: test_proto/test.proto -package test_proto // import "github.com/golang/protobuf/proto/test_proto" +package test_proto -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -27,6 +29,7 @@ var FOO_name = map[int32]string{ 1: "FOO1", } + var FOO_value = map[string]int32{ "FOO1": 1, } @@ -36,9 +39,11 @@ *p = x return p } + func (x FOO) String() string { return proto.EnumName(FOO_name, int32(x)) } + func (x *FOO) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FOO_value, data, "FOO") if err != nil { @@ -47,8 +52,9 @@ *x = FOO(value) return nil } + func (FOO) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{0} + return fileDescriptor_8ca34d01332f1402, []int{0} } // An enum, for completeness. @@ -89,6 +95,7 @@ 11: "TABLE", 12: "FUNCTION", } + var GoTest_KIND_value = map[string]int32{ "VOID": 0, "BOOL": 1, @@ -110,9 +117,11 @@ *p = x return p } + func (x GoTest_KIND) String() string { return proto.EnumName(GoTest_KIND_name, int32(x)) } + func (x *GoTest_KIND) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(GoTest_KIND_value, data, "GoTest_KIND") if err != nil { @@ -121,8 +130,9 @@ *x = GoTest_KIND(value) return nil } + func (GoTest_KIND) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{2, 0} + return fileDescriptor_8ca34d01332f1402, []int{2, 0} } type MyMessage_Color int32 @@ -138,6 +148,7 @@ 1: "GREEN", 2: "BLUE", } + var MyMessage_Color_value = map[string]int32{ "RED": 0, "GREEN": 1, @@ -149,9 +160,11 @@ *p = x return p } + func (x MyMessage_Color) String() string { return proto.EnumName(MyMessage_Color_name, int32(x)) } + func (x *MyMessage_Color) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(MyMessage_Color_value, data, "MyMessage_Color") if err != nil { @@ -160,8 +173,9 @@ *x = MyMessage_Color(value) return nil } + func (MyMessage_Color) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{13, 0} + return fileDescriptor_8ca34d01332f1402, []int{13, 0} } type DefaultsMessage_DefaultsEnum int32 @@ -177,6 +191,7 @@ 1: "ONE", 2: "TWO", } + var DefaultsMessage_DefaultsEnum_value = map[string]int32{ "ZERO": 0, "ONE": 1, @@ -188,9 +203,11 @@ *p = x return p } + func (x DefaultsMessage_DefaultsEnum) String() string { return proto.EnumName(DefaultsMessage_DefaultsEnum_name, int32(x)) } + func (x *DefaultsMessage_DefaultsEnum) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(DefaultsMessage_DefaultsEnum_value, data, "DefaultsMessage_DefaultsEnum") if err != nil { @@ -199,8 +216,9 @@ *x = DefaultsMessage_DefaultsEnum(value) return nil } + func (DefaultsMessage_DefaultsEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{16, 0} + return fileDescriptor_8ca34d01332f1402, []int{16, 0} } type Defaults_Color int32 @@ -216,6 +234,7 @@ 1: "GREEN", 2: "BLUE", } + var Defaults_Color_value = map[string]int32{ "RED": 0, "GREEN": 1, @@ -227,9 +246,11 @@ *p = x return p } + func (x Defaults_Color) String() string { return proto.EnumName(Defaults_Color_name, int32(x)) } + func (x *Defaults_Color) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(Defaults_Color_value, data, "Defaults_Color") if err != nil { @@ -238,8 +259,9 @@ *x = Defaults_Color(value) return nil } + func (Defaults_Color) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{21, 0} + return fileDescriptor_8ca34d01332f1402, []int{21, 0} } type RepeatedEnum_Color int32 @@ -251,6 +273,7 @@ var RepeatedEnum_Color_name = map[int32]string{ 1: "RED", } + var RepeatedEnum_Color_value = map[string]int32{ "RED": 1, } @@ -260,9 +283,11 @@ *p = x return p } + func (x RepeatedEnum_Color) String() string { return proto.EnumName(RepeatedEnum_Color_name, int32(x)) } + func (x *RepeatedEnum_Color) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(RepeatedEnum_Color_value, data, "RepeatedEnum_Color") if err != nil { @@ -271,8 +296,9 @@ *x = RepeatedEnum_Color(value) return nil } + func (RepeatedEnum_Color) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{23, 0} + return fileDescriptor_8ca34d01332f1402, []int{23, 0} } type GoEnum struct { @@ -286,16 +312,17 @@ func (m *GoEnum) String() string { return proto.CompactTextString(m) } func (*GoEnum) ProtoMessage() {} func (*GoEnum) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{0} + return fileDescriptor_8ca34d01332f1402, []int{0} } + func (m *GoEnum) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoEnum.Unmarshal(m, b) } func (m *GoEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoEnum.Marshal(b, m, deterministic) } -func (dst *GoEnum) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoEnum.Merge(dst, src) +func (m *GoEnum) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoEnum.Merge(m, src) } func (m *GoEnum) XXX_Size() int { return xxx_messageInfo_GoEnum.Size(m) @@ -325,16 +352,17 @@ func (m *GoTestField) String() string { return proto.CompactTextString(m) } func (*GoTestField) ProtoMessage() {} func (*GoTestField) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{1} + return fileDescriptor_8ca34d01332f1402, []int{1} } + func (m *GoTestField) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoTestField.Unmarshal(m, b) } func (m *GoTestField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoTestField.Marshal(b, m, deterministic) } -func (dst *GoTestField) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoTestField.Merge(dst, src) +func (m *GoTestField) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoTestField.Merge(m, src) } func (m *GoTestField) XXX_Size() int { return xxx_messageInfo_GoTestField.Size(m) @@ -458,16 +486,17 @@ func (m *GoTest) String() string { return proto.CompactTextString(m) } func (*GoTest) ProtoMessage() {} func (*GoTest) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{2} + return fileDescriptor_8ca34d01332f1402, []int{2} } + func (m *GoTest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoTest.Unmarshal(m, b) } func (m *GoTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoTest.Marshal(b, m, deterministic) } -func (dst *GoTest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoTest.Merge(dst, src) +func (m *GoTest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoTest.Merge(m, src) } func (m *GoTest) XXX_Size() int { return xxx_messageInfo_GoTest.Size(m) @@ -1082,16 +1111,17 @@ func (m *GoTest_RequiredGroup) String() string { return proto.CompactTextString(m) } func (*GoTest_RequiredGroup) ProtoMessage() {} func (*GoTest_RequiredGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{2, 0} + return fileDescriptor_8ca34d01332f1402, []int{2, 0} } + func (m *GoTest_RequiredGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoTest_RequiredGroup.Unmarshal(m, b) } func (m *GoTest_RequiredGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoTest_RequiredGroup.Marshal(b, m, deterministic) } -func (dst *GoTest_RequiredGroup) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoTest_RequiredGroup.Merge(dst, src) +func (m *GoTest_RequiredGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoTest_RequiredGroup.Merge(m, src) } func (m *GoTest_RequiredGroup) XXX_Size() int { return xxx_messageInfo_GoTest_RequiredGroup.Size(m) @@ -1120,16 +1150,17 @@ func (m *GoTest_RepeatedGroup) String() string { return proto.CompactTextString(m) } func (*GoTest_RepeatedGroup) ProtoMessage() {} func (*GoTest_RepeatedGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{2, 1} + return fileDescriptor_8ca34d01332f1402, []int{2, 1} } + func (m *GoTest_RepeatedGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoTest_RepeatedGroup.Unmarshal(m, b) } func (m *GoTest_RepeatedGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoTest_RepeatedGroup.Marshal(b, m, deterministic) } -func (dst *GoTest_RepeatedGroup) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoTest_RepeatedGroup.Merge(dst, src) +func (m *GoTest_RepeatedGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoTest_RepeatedGroup.Merge(m, src) } func (m *GoTest_RepeatedGroup) XXX_Size() int { return xxx_messageInfo_GoTest_RepeatedGroup.Size(m) @@ -1158,16 +1189,17 @@ func (m *GoTest_OptionalGroup) String() string { return proto.CompactTextString(m) } func (*GoTest_OptionalGroup) ProtoMessage() {} func (*GoTest_OptionalGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{2, 2} + return fileDescriptor_8ca34d01332f1402, []int{2, 2} } + func (m *GoTest_OptionalGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoTest_OptionalGroup.Unmarshal(m, b) } func (m *GoTest_OptionalGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoTest_OptionalGroup.Marshal(b, m, deterministic) } -func (dst *GoTest_OptionalGroup) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoTest_OptionalGroup.Merge(dst, src) +func (m *GoTest_OptionalGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoTest_OptionalGroup.Merge(m, src) } func (m *GoTest_OptionalGroup) XXX_Size() int { return xxx_messageInfo_GoTest_OptionalGroup.Size(m) @@ -1197,16 +1229,17 @@ func (m *GoTestRequiredGroupField) String() string { return proto.CompactTextString(m) } func (*GoTestRequiredGroupField) ProtoMessage() {} func (*GoTestRequiredGroupField) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{3} + return fileDescriptor_8ca34d01332f1402, []int{3} } + func (m *GoTestRequiredGroupField) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoTestRequiredGroupField.Unmarshal(m, b) } func (m *GoTestRequiredGroupField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoTestRequiredGroupField.Marshal(b, m, deterministic) } -func (dst *GoTestRequiredGroupField) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoTestRequiredGroupField.Merge(dst, src) +func (m *GoTestRequiredGroupField) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoTestRequiredGroupField.Merge(m, src) } func (m *GoTestRequiredGroupField) XXX_Size() int { return xxx_messageInfo_GoTestRequiredGroupField.Size(m) @@ -1235,16 +1268,17 @@ func (m *GoTestRequiredGroupField_Group) String() string { return proto.CompactTextString(m) } func (*GoTestRequiredGroupField_Group) ProtoMessage() {} func (*GoTestRequiredGroupField_Group) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{3, 0} + return fileDescriptor_8ca34d01332f1402, []int{3, 0} } + func (m *GoTestRequiredGroupField_Group) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoTestRequiredGroupField_Group.Unmarshal(m, b) } func (m *GoTestRequiredGroupField_Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoTestRequiredGroupField_Group.Marshal(b, m, deterministic) } -func (dst *GoTestRequiredGroupField_Group) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoTestRequiredGroupField_Group.Merge(dst, src) +func (m *GoTestRequiredGroupField_Group) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoTestRequiredGroupField_Group.Merge(m, src) } func (m *GoTestRequiredGroupField_Group) XXX_Size() int { return xxx_messageInfo_GoTestRequiredGroupField_Group.Size(m) @@ -1280,16 +1314,17 @@ func (m *GoSkipTest) String() string { return proto.CompactTextString(m) } func (*GoSkipTest) ProtoMessage() {} func (*GoSkipTest) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{4} + return fileDescriptor_8ca34d01332f1402, []int{4} } + func (m *GoSkipTest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoSkipTest.Unmarshal(m, b) } func (m *GoSkipTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoSkipTest.Marshal(b, m, deterministic) } -func (dst *GoSkipTest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoSkipTest.Merge(dst, src) +func (m *GoSkipTest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoSkipTest.Merge(m, src) } func (m *GoSkipTest) XXX_Size() int { return xxx_messageInfo_GoSkipTest.Size(m) @@ -1347,16 +1382,17 @@ func (m *GoSkipTest_SkipGroup) String() string { return proto.CompactTextString(m) } func (*GoSkipTest_SkipGroup) ProtoMessage() {} func (*GoSkipTest_SkipGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{4, 0} + return fileDescriptor_8ca34d01332f1402, []int{4, 0} } + func (m *GoSkipTest_SkipGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GoSkipTest_SkipGroup.Unmarshal(m, b) } func (m *GoSkipTest_SkipGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GoSkipTest_SkipGroup.Marshal(b, m, deterministic) } -func (dst *GoSkipTest_SkipGroup) XXX_Merge(src proto.Message) { - xxx_messageInfo_GoSkipTest_SkipGroup.Merge(dst, src) +func (m *GoSkipTest_SkipGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_GoSkipTest_SkipGroup.Merge(m, src) } func (m *GoSkipTest_SkipGroup) XXX_Size() int { return xxx_messageInfo_GoSkipTest_SkipGroup.Size(m) @@ -1394,16 +1430,17 @@ func (m *NonPackedTest) String() string { return proto.CompactTextString(m) } func (*NonPackedTest) ProtoMessage() {} func (*NonPackedTest) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{5} + return fileDescriptor_8ca34d01332f1402, []int{5} } + func (m *NonPackedTest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonPackedTest.Unmarshal(m, b) } func (m *NonPackedTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonPackedTest.Marshal(b, m, deterministic) } -func (dst *NonPackedTest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonPackedTest.Merge(dst, src) +func (m *NonPackedTest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonPackedTest.Merge(m, src) } func (m *NonPackedTest) XXX_Size() int { return xxx_messageInfo_NonPackedTest.Size(m) @@ -1432,16 +1469,17 @@ func (m *PackedTest) String() string { return proto.CompactTextString(m) } func (*PackedTest) ProtoMessage() {} func (*PackedTest) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{6} + return fileDescriptor_8ca34d01332f1402, []int{6} } + func (m *PackedTest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PackedTest.Unmarshal(m, b) } func (m *PackedTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_PackedTest.Marshal(b, m, deterministic) } -func (dst *PackedTest) XXX_Merge(src proto.Message) { - xxx_messageInfo_PackedTest.Merge(dst, src) +func (m *PackedTest) XXX_Merge(src proto.Message) { + xxx_messageInfo_PackedTest.Merge(m, src) } func (m *PackedTest) XXX_Size() int { return xxx_messageInfo_PackedTest.Size(m) @@ -1471,16 +1509,17 @@ func (m *MaxTag) String() string { return proto.CompactTextString(m) } func (*MaxTag) ProtoMessage() {} func (*MaxTag) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{7} + return fileDescriptor_8ca34d01332f1402, []int{7} } + func (m *MaxTag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxTag.Unmarshal(m, b) } func (m *MaxTag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MaxTag.Marshal(b, m, deterministic) } -func (dst *MaxTag) XXX_Merge(src proto.Message) { - xxx_messageInfo_MaxTag.Merge(dst, src) +func (m *MaxTag) XXX_Merge(src proto.Message) { + xxx_messageInfo_MaxTag.Merge(m, src) } func (m *MaxTag) XXX_Size() int { return xxx_messageInfo_MaxTag.Size(m) @@ -1510,16 +1549,17 @@ func (m *OldMessage) String() string { return proto.CompactTextString(m) } func (*OldMessage) ProtoMessage() {} func (*OldMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{8} + return fileDescriptor_8ca34d01332f1402, []int{8} } + func (m *OldMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OldMessage.Unmarshal(m, b) } func (m *OldMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OldMessage.Marshal(b, m, deterministic) } -func (dst *OldMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_OldMessage.Merge(dst, src) +func (m *OldMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_OldMessage.Merge(m, src) } func (m *OldMessage) XXX_Size() int { return xxx_messageInfo_OldMessage.Size(m) @@ -1555,16 +1595,17 @@ func (m *OldMessage_Nested) String() string { return proto.CompactTextString(m) } func (*OldMessage_Nested) ProtoMessage() {} func (*OldMessage_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{8, 0} + return fileDescriptor_8ca34d01332f1402, []int{8, 0} } + func (m *OldMessage_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OldMessage_Nested.Unmarshal(m, b) } func (m *OldMessage_Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OldMessage_Nested.Marshal(b, m, deterministic) } -func (dst *OldMessage_Nested) XXX_Merge(src proto.Message) { - xxx_messageInfo_OldMessage_Nested.Merge(dst, src) +func (m *OldMessage_Nested) XXX_Merge(src proto.Message) { + xxx_messageInfo_OldMessage_Nested.Merge(m, src) } func (m *OldMessage_Nested) XXX_Size() int { return xxx_messageInfo_OldMessage_Nested.Size(m) @@ -1597,16 +1638,17 @@ func (m *NewMessage) String() string { return proto.CompactTextString(m) } func (*NewMessage) ProtoMessage() {} func (*NewMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{9} + return fileDescriptor_8ca34d01332f1402, []int{9} } + func (m *NewMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NewMessage.Unmarshal(m, b) } func (m *NewMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NewMessage.Marshal(b, m, deterministic) } -func (dst *NewMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_NewMessage.Merge(dst, src) +func (m *NewMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_NewMessage.Merge(m, src) } func (m *NewMessage) XXX_Size() int { return xxx_messageInfo_NewMessage.Size(m) @@ -1643,16 +1685,17 @@ func (m *NewMessage_Nested) String() string { return proto.CompactTextString(m) } func (*NewMessage_Nested) ProtoMessage() {} func (*NewMessage_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{9, 0} + return fileDescriptor_8ca34d01332f1402, []int{9, 0} } + func (m *NewMessage_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NewMessage_Nested.Unmarshal(m, b) } func (m *NewMessage_Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NewMessage_Nested.Marshal(b, m, deterministic) } -func (dst *NewMessage_Nested) XXX_Merge(src proto.Message) { - xxx_messageInfo_NewMessage_Nested.Merge(dst, src) +func (m *NewMessage_Nested) XXX_Merge(src proto.Message) { + xxx_messageInfo_NewMessage_Nested.Merge(m, src) } func (m *NewMessage_Nested) XXX_Size() int { return xxx_messageInfo_NewMessage_Nested.Size(m) @@ -1690,16 +1733,17 @@ func (m *InnerMessage) String() string { return proto.CompactTextString(m) } func (*InnerMessage) ProtoMessage() {} func (*InnerMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{10} + return fileDescriptor_8ca34d01332f1402, []int{10} } + func (m *InnerMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InnerMessage.Unmarshal(m, b) } func (m *InnerMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_InnerMessage.Marshal(b, m, deterministic) } -func (dst *InnerMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_InnerMessage.Merge(dst, src) +func (m *InnerMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_InnerMessage.Merge(m, src) } func (m *InnerMessage) XXX_Size() int { return xxx_messageInfo_InnerMessage.Size(m) @@ -1748,7 +1792,7 @@ func (m *OtherMessage) String() string { return proto.CompactTextString(m) } func (*OtherMessage) ProtoMessage() {} func (*OtherMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{11} + return fileDescriptor_8ca34d01332f1402, []int{11} } var extRange_OtherMessage = []proto.ExtensionRange{ @@ -1758,14 +1802,15 @@ func (*OtherMessage) ExtensionRangeArray() []proto.ExtensionRange { return extRange_OtherMessage } + func (m *OtherMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OtherMessage.Unmarshal(m, b) } func (m *OtherMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OtherMessage.Marshal(b, m, deterministic) } -func (dst *OtherMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_OtherMessage.Merge(dst, src) +func (m *OtherMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_OtherMessage.Merge(m, src) } func (m *OtherMessage) XXX_Size() int { return xxx_messageInfo_OtherMessage.Size(m) @@ -1815,16 +1860,17 @@ func (m *RequiredInnerMessage) String() string { return proto.CompactTextString(m) } func (*RequiredInnerMessage) ProtoMessage() {} func (*RequiredInnerMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{12} + return fileDescriptor_8ca34d01332f1402, []int{12} } + func (m *RequiredInnerMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequiredInnerMessage.Unmarshal(m, b) } func (m *RequiredInnerMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_RequiredInnerMessage.Marshal(b, m, deterministic) } -func (dst *RequiredInnerMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_RequiredInnerMessage.Merge(dst, src) +func (m *RequiredInnerMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequiredInnerMessage.Merge(m, src) } func (m *RequiredInnerMessage) XXX_Size() int { return xxx_messageInfo_RequiredInnerMessage.Size(m) @@ -1866,7 +1912,7 @@ func (m *MyMessage) String() string { return proto.CompactTextString(m) } func (*MyMessage) ProtoMessage() {} func (*MyMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{13} + return fileDescriptor_8ca34d01332f1402, []int{13} } var extRange_MyMessage = []proto.ExtensionRange{ @@ -1876,14 +1922,15 @@ func (*MyMessage) ExtensionRangeArray() []proto.ExtensionRange { return extRange_MyMessage } + func (m *MyMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MyMessage.Unmarshal(m, b) } func (m *MyMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MyMessage.Marshal(b, m, deterministic) } -func (dst *MyMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_MyMessage.Merge(dst, src) +func (m *MyMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_MyMessage.Merge(m, src) } func (m *MyMessage) XXX_Size() int { return xxx_messageInfo_MyMessage.Size(m) @@ -1989,16 +2036,17 @@ func (m *MyMessage_SomeGroup) String() string { return proto.CompactTextString(m) } func (*MyMessage_SomeGroup) ProtoMessage() {} func (*MyMessage_SomeGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{13, 0} + return fileDescriptor_8ca34d01332f1402, []int{13, 0} } + func (m *MyMessage_SomeGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MyMessage_SomeGroup.Unmarshal(m, b) } func (m *MyMessage_SomeGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MyMessage_SomeGroup.Marshal(b, m, deterministic) } -func (dst *MyMessage_SomeGroup) XXX_Merge(src proto.Message) { - xxx_messageInfo_MyMessage_SomeGroup.Merge(dst, src) +func (m *MyMessage_SomeGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_MyMessage_SomeGroup.Merge(m, src) } func (m *MyMessage_SomeGroup) XXX_Size() int { return xxx_messageInfo_MyMessage_SomeGroup.Size(m) @@ -2028,16 +2076,17 @@ func (m *Ext) String() string { return proto.CompactTextString(m) } func (*Ext) ProtoMessage() {} func (*Ext) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{14} + return fileDescriptor_8ca34d01332f1402, []int{14} } + func (m *Ext) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Ext.Unmarshal(m, b) } func (m *Ext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Ext.Marshal(b, m, deterministic) } -func (dst *Ext) XXX_Merge(src proto.Message) { - xxx_messageInfo_Ext.Merge(dst, src) +func (m *Ext) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ext.Merge(m, src) } func (m *Ext) XXX_Size() int { return xxx_messageInfo_Ext.Size(m) @@ -2102,16 +2151,17 @@ func (m *ComplexExtension) String() string { return proto.CompactTextString(m) } func (*ComplexExtension) ProtoMessage() {} func (*ComplexExtension) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{15} + return fileDescriptor_8ca34d01332f1402, []int{15} } + func (m *ComplexExtension) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ComplexExtension.Unmarshal(m, b) } func (m *ComplexExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ComplexExtension.Marshal(b, m, deterministic) } -func (dst *ComplexExtension) XXX_Merge(src proto.Message) { - xxx_messageInfo_ComplexExtension.Merge(dst, src) +func (m *ComplexExtension) XXX_Merge(src proto.Message) { + xxx_messageInfo_ComplexExtension.Merge(m, src) } func (m *ComplexExtension) XXX_Size() int { return xxx_messageInfo_ComplexExtension.Size(m) @@ -2154,7 +2204,7 @@ func (m *DefaultsMessage) String() string { return proto.CompactTextString(m) } func (*DefaultsMessage) ProtoMessage() {} func (*DefaultsMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{16} + return fileDescriptor_8ca34d01332f1402, []int{16} } var extRange_DefaultsMessage = []proto.ExtensionRange{ @@ -2164,14 +2214,15 @@ func (*DefaultsMessage) ExtensionRangeArray() []proto.ExtensionRange { return extRange_DefaultsMessage } + func (m *DefaultsMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DefaultsMessage.Unmarshal(m, b) } func (m *DefaultsMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DefaultsMessage.Marshal(b, m, deterministic) } -func (dst *DefaultsMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_DefaultsMessage.Merge(dst, src) +func (m *DefaultsMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_DefaultsMessage.Merge(m, src) } func (m *DefaultsMessage) XXX_Size() int { return xxx_messageInfo_DefaultsMessage.Size(m) @@ -2193,14 +2244,7 @@ func (m *MyMessageSet) String() string { return proto.CompactTextString(m) } func (*MyMessageSet) ProtoMessage() {} func (*MyMessageSet) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{17} -} - -func (m *MyMessageSet) MarshalJSON() ([]byte, error) { - return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions) -} -func (m *MyMessageSet) UnmarshalJSON(buf []byte) error { - return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions) + return fileDescriptor_8ca34d01332f1402, []int{17} } var extRange_MyMessageSet = []proto.ExtensionRange{ @@ -2210,14 +2254,15 @@ func (*MyMessageSet) ExtensionRangeArray() []proto.ExtensionRange { return extRange_MyMessageSet } + func (m *MyMessageSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MyMessageSet.Unmarshal(m, b) } func (m *MyMessageSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MyMessageSet.Marshal(b, m, deterministic) } -func (dst *MyMessageSet) XXX_Merge(src proto.Message) { - xxx_messageInfo_MyMessageSet.Merge(dst, src) +func (m *MyMessageSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_MyMessageSet.Merge(m, src) } func (m *MyMessageSet) XXX_Size() int { return xxx_messageInfo_MyMessageSet.Size(m) @@ -2238,16 +2283,17 @@ func (m *Empty) String() string { return proto.CompactTextString(m) } func (*Empty) ProtoMessage() {} func (*Empty) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{18} + return fileDescriptor_8ca34d01332f1402, []int{18} } + func (m *Empty) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Empty.Unmarshal(m, b) } func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Empty.Marshal(b, m, deterministic) } -func (dst *Empty) XXX_Merge(src proto.Message) { - xxx_messageInfo_Empty.Merge(dst, src) +func (m *Empty) XXX_Merge(src proto.Message) { + xxx_messageInfo_Empty.Merge(m, src) } func (m *Empty) XXX_Size() int { return xxx_messageInfo_Empty.Size(m) @@ -2269,16 +2315,17 @@ func (m *MessageList) String() string { return proto.CompactTextString(m) } func (*MessageList) ProtoMessage() {} func (*MessageList) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{19} + return fileDescriptor_8ca34d01332f1402, []int{19} } + func (m *MessageList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageList.Unmarshal(m, b) } func (m *MessageList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MessageList.Marshal(b, m, deterministic) } -func (dst *MessageList) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessageList.Merge(dst, src) +func (m *MessageList) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessageList.Merge(m, src) } func (m *MessageList) XXX_Size() int { return xxx_messageInfo_MessageList.Size(m) @@ -2308,16 +2355,17 @@ func (m *MessageList_Message) String() string { return proto.CompactTextString(m) } func (*MessageList_Message) ProtoMessage() {} func (*MessageList_Message) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{19, 0} + return fileDescriptor_8ca34d01332f1402, []int{19, 0} } + func (m *MessageList_Message) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageList_Message.Unmarshal(m, b) } func (m *MessageList_Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MessageList_Message.Marshal(b, m, deterministic) } -func (dst *MessageList_Message) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessageList_Message.Merge(dst, src) +func (m *MessageList_Message) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessageList_Message.Merge(m, src) } func (m *MessageList_Message) XXX_Size() int { return xxx_messageInfo_MessageList_Message.Size(m) @@ -2354,16 +2402,17 @@ func (m *Strings) String() string { return proto.CompactTextString(m) } func (*Strings) ProtoMessage() {} func (*Strings) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{20} + return fileDescriptor_8ca34d01332f1402, []int{20} } + func (m *Strings) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Strings.Unmarshal(m, b) } func (m *Strings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Strings.Marshal(b, m, deterministic) } -func (dst *Strings) XXX_Merge(src proto.Message) { - xxx_messageInfo_Strings.Merge(dst, src) +func (m *Strings) XXX_Merge(src proto.Message) { + xxx_messageInfo_Strings.Merge(m, src) } func (m *Strings) XXX_Size() int { return xxx_messageInfo_Strings.Size(m) @@ -2422,16 +2471,17 @@ func (m *Defaults) String() string { return proto.CompactTextString(m) } func (*Defaults) ProtoMessage() {} func (*Defaults) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{21} + return fileDescriptor_8ca34d01332f1402, []int{21} } + func (m *Defaults) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Defaults.Unmarshal(m, b) } func (m *Defaults) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Defaults.Marshal(b, m, deterministic) } -func (dst *Defaults) XXX_Merge(src proto.Message) { - xxx_messageInfo_Defaults.Merge(dst, src) +func (m *Defaults) XXX_Merge(src proto.Message) { + xxx_messageInfo_Defaults.Merge(m, src) } func (m *Defaults) XXX_Size() int { return xxx_messageInfo_Defaults.Size(m) @@ -2607,16 +2657,17 @@ func (m *SubDefaults) String() string { return proto.CompactTextString(m) } func (*SubDefaults) ProtoMessage() {} func (*SubDefaults) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{22} + return fileDescriptor_8ca34d01332f1402, []int{22} } + func (m *SubDefaults) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SubDefaults.Unmarshal(m, b) } func (m *SubDefaults) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SubDefaults.Marshal(b, m, deterministic) } -func (dst *SubDefaults) XXX_Merge(src proto.Message) { - xxx_messageInfo_SubDefaults.Merge(dst, src) +func (m *SubDefaults) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubDefaults.Merge(m, src) } func (m *SubDefaults) XXX_Size() int { return xxx_messageInfo_SubDefaults.Size(m) @@ -2647,16 +2698,17 @@ func (m *RepeatedEnum) String() string { return proto.CompactTextString(m) } func (*RepeatedEnum) ProtoMessage() {} func (*RepeatedEnum) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{23} + return fileDescriptor_8ca34d01332f1402, []int{23} } + func (m *RepeatedEnum) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedEnum.Unmarshal(m, b) } func (m *RepeatedEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_RepeatedEnum.Marshal(b, m, deterministic) } -func (dst *RepeatedEnum) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedEnum.Merge(dst, src) +func (m *RepeatedEnum) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedEnum.Merge(m, src) } func (m *RepeatedEnum) XXX_Size() int { return xxx_messageInfo_RepeatedEnum.Size(m) @@ -2691,16 +2743,17 @@ func (m *MoreRepeated) String() string { return proto.CompactTextString(m) } func (*MoreRepeated) ProtoMessage() {} func (*MoreRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{24} + return fileDescriptor_8ca34d01332f1402, []int{24} } + func (m *MoreRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MoreRepeated.Unmarshal(m, b) } func (m *MoreRepeated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MoreRepeated.Marshal(b, m, deterministic) } -func (dst *MoreRepeated) XXX_Merge(src proto.Message) { - xxx_messageInfo_MoreRepeated.Merge(dst, src) +func (m *MoreRepeated) XXX_Merge(src proto.Message) { + xxx_messageInfo_MoreRepeated.Merge(m, src) } func (m *MoreRepeated) XXX_Size() int { return xxx_messageInfo_MoreRepeated.Size(m) @@ -2771,16 +2824,17 @@ func (m *GroupOld) String() string { return proto.CompactTextString(m) } func (*GroupOld) ProtoMessage() {} func (*GroupOld) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{25} + return fileDescriptor_8ca34d01332f1402, []int{25} } + func (m *GroupOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOld.Unmarshal(m, b) } func (m *GroupOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GroupOld.Marshal(b, m, deterministic) } -func (dst *GroupOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupOld.Merge(dst, src) +func (m *GroupOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupOld.Merge(m, src) } func (m *GroupOld) XXX_Size() int { return xxx_messageInfo_GroupOld.Size(m) @@ -2809,16 +2863,17 @@ func (m *GroupOld_G) String() string { return proto.CompactTextString(m) } func (*GroupOld_G) ProtoMessage() {} func (*GroupOld_G) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{25, 0} + return fileDescriptor_8ca34d01332f1402, []int{25, 0} } + func (m *GroupOld_G) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOld_G.Unmarshal(m, b) } func (m *GroupOld_G) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GroupOld_G.Marshal(b, m, deterministic) } -func (dst *GroupOld_G) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupOld_G.Merge(dst, src) +func (m *GroupOld_G) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupOld_G.Merge(m, src) } func (m *GroupOld_G) XXX_Size() int { return xxx_messageInfo_GroupOld_G.Size(m) @@ -2847,16 +2902,17 @@ func (m *GroupNew) String() string { return proto.CompactTextString(m) } func (*GroupNew) ProtoMessage() {} func (*GroupNew) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{26} + return fileDescriptor_8ca34d01332f1402, []int{26} } + func (m *GroupNew) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupNew.Unmarshal(m, b) } func (m *GroupNew) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GroupNew.Marshal(b, m, deterministic) } -func (dst *GroupNew) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupNew.Merge(dst, src) +func (m *GroupNew) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupNew.Merge(m, src) } func (m *GroupNew) XXX_Size() int { return xxx_messageInfo_GroupNew.Size(m) @@ -2886,16 +2942,17 @@ func (m *GroupNew_G) String() string { return proto.CompactTextString(m) } func (*GroupNew_G) ProtoMessage() {} func (*GroupNew_G) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{26, 0} + return fileDescriptor_8ca34d01332f1402, []int{26, 0} } + func (m *GroupNew_G) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupNew_G.Unmarshal(m, b) } func (m *GroupNew_G) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GroupNew_G.Marshal(b, m, deterministic) } -func (dst *GroupNew_G) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupNew_G.Merge(dst, src) +func (m *GroupNew_G) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupNew_G.Merge(m, src) } func (m *GroupNew_G) XXX_Size() int { return xxx_messageInfo_GroupNew_G.Size(m) @@ -2932,16 +2989,17 @@ func (m *FloatingPoint) String() string { return proto.CompactTextString(m) } func (*FloatingPoint) ProtoMessage() {} func (*FloatingPoint) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{27} + return fileDescriptor_8ca34d01332f1402, []int{27} } + func (m *FloatingPoint) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FloatingPoint.Unmarshal(m, b) } func (m *FloatingPoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_FloatingPoint.Marshal(b, m, deterministic) } -func (dst *FloatingPoint) XXX_Merge(src proto.Message) { - xxx_messageInfo_FloatingPoint.Merge(dst, src) +func (m *FloatingPoint) XXX_Merge(src proto.Message) { + xxx_messageInfo_FloatingPoint.Merge(m, src) } func (m *FloatingPoint) XXX_Size() int { return xxx_messageInfo_FloatingPoint.Size(m) @@ -2980,16 +3038,17 @@ func (m *MessageWithMap) String() string { return proto.CompactTextString(m) } func (*MessageWithMap) ProtoMessage() {} func (*MessageWithMap) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{28} + return fileDescriptor_8ca34d01332f1402, []int{28} } + func (m *MessageWithMap) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithMap.Unmarshal(m, b) } func (m *MessageWithMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MessageWithMap.Marshal(b, m, deterministic) } -func (dst *MessageWithMap) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessageWithMap.Merge(dst, src) +func (m *MessageWithMap) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessageWithMap.Merge(m, src) } func (m *MessageWithMap) XXX_Size() int { return xxx_messageInfo_MessageWithMap.Size(m) @@ -3060,16 +3119,17 @@ func (m *Oneof) String() string { return proto.CompactTextString(m) } func (*Oneof) ProtoMessage() {} func (*Oneof) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{29} + return fileDescriptor_8ca34d01332f1402, []int{29} } + func (m *Oneof) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Oneof.Unmarshal(m, b) } func (m *Oneof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Oneof.Marshal(b, m, deterministic) } -func (dst *Oneof) XXX_Merge(src proto.Message) { - xxx_messageInfo_Oneof.Merge(dst, src) +func (m *Oneof) XXX_Merge(src proto.Message) { + xxx_messageInfo_Oneof.Merge(m, src) } func (m *Oneof) XXX_Size() int { return xxx_messageInfo_Oneof.Size(m) @@ -3663,16 +3723,17 @@ func (m *Oneof_F_Group) String() string { return proto.CompactTextString(m) } func (*Oneof_F_Group) ProtoMessage() {} func (*Oneof_F_Group) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{29, 0} + return fileDescriptor_8ca34d01332f1402, []int{29, 0} } + func (m *Oneof_F_Group) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Oneof_F_Group.Unmarshal(m, b) } func (m *Oneof_F_Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Oneof_F_Group.Marshal(b, m, deterministic) } -func (dst *Oneof_F_Group) XXX_Merge(src proto.Message) { - xxx_messageInfo_Oneof_F_Group.Merge(dst, src) +func (m *Oneof_F_Group) XXX_Merge(src proto.Message) { + xxx_messageInfo_Oneof_F_Group.Merge(m, src) } func (m *Oneof_F_Group) XXX_Size() int { return xxx_messageInfo_Oneof_F_Group.Size(m) @@ -3711,16 +3772,17 @@ func (m *Communique) String() string { return proto.CompactTextString(m) } func (*Communique) ProtoMessage() {} func (*Communique) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{30} + return fileDescriptor_8ca34d01332f1402, []int{30} } + func (m *Communique) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Communique.Unmarshal(m, b) } func (m *Communique) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Communique.Marshal(b, m, deterministic) } -func (dst *Communique) XXX_Merge(src proto.Message) { - xxx_messageInfo_Communique.Merge(dst, src) +func (m *Communique) XXX_Merge(src proto.Message) { + xxx_messageInfo_Communique.Merge(m, src) } func (m *Communique) XXX_Size() int { return xxx_messageInfo_Communique.Size(m) @@ -3971,16 +4033,17 @@ func (m *TestUTF8) String() string { return proto.CompactTextString(m) } func (*TestUTF8) ProtoMessage() {} func (*TestUTF8) Descriptor() ([]byte, []int) { - return fileDescriptor_test_ee9f66cbbebc227c, []int{31} + return fileDescriptor_8ca34d01332f1402, []int{31} } + func (m *TestUTF8) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TestUTF8.Unmarshal(m, b) } func (m *TestUTF8) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_TestUTF8.Marshal(b, m, deterministic) } -func (dst *TestUTF8) XXX_Merge(src proto.Message) { - xxx_messageInfo_TestUTF8.Merge(dst, src) +func (m *TestUTF8) XXX_Merge(src proto.Message) { + xxx_messageInfo_TestUTF8.Merge(m, src) } func (m *TestUTF8) XXX_Size() int { return xxx_messageInfo_TestUTF8.Size(m) @@ -4117,7 +4180,7 @@ ExtensionType: ([]*ComplexExtension)(nil), Field: 201, Name: "test_proto.r_complex", - Tag: "bytes,201,rep,name=r_complex,json=rComplex", + Tag: "bytes,201,rep,name=r_complex", Filename: "test_proto/test.proto", } @@ -4126,7 +4189,7 @@ ExtensionType: (*float64)(nil), Field: 101, Name: "test_proto.no_default_double", - Tag: "fixed64,101,opt,name=no_default_double,json=noDefaultDouble", + Tag: "fixed64,101,opt,name=no_default_double", Filename: "test_proto/test.proto", } @@ -4135,7 +4198,7 @@ ExtensionType: (*float32)(nil), Field: 102, Name: "test_proto.no_default_float", - Tag: "fixed32,102,opt,name=no_default_float,json=noDefaultFloat", + Tag: "fixed32,102,opt,name=no_default_float", Filename: "test_proto/test.proto", } @@ -4144,7 +4207,7 @@ ExtensionType: (*int32)(nil), Field: 103, Name: "test_proto.no_default_int32", - Tag: "varint,103,opt,name=no_default_int32,json=noDefaultInt32", + Tag: "varint,103,opt,name=no_default_int32", Filename: "test_proto/test.proto", } @@ -4153,7 +4216,7 @@ ExtensionType: (*int64)(nil), Field: 104, Name: "test_proto.no_default_int64", - Tag: "varint,104,opt,name=no_default_int64,json=noDefaultInt64", + Tag: "varint,104,opt,name=no_default_int64", Filename: "test_proto/test.proto", } @@ -4162,7 +4225,7 @@ ExtensionType: (*uint32)(nil), Field: 105, Name: "test_proto.no_default_uint32", - Tag: "varint,105,opt,name=no_default_uint32,json=noDefaultUint32", + Tag: "varint,105,opt,name=no_default_uint32", Filename: "test_proto/test.proto", } @@ -4171,7 +4234,7 @@ ExtensionType: (*uint64)(nil), Field: 106, Name: "test_proto.no_default_uint64", - Tag: "varint,106,opt,name=no_default_uint64,json=noDefaultUint64", + Tag: "varint,106,opt,name=no_default_uint64", Filename: "test_proto/test.proto", } @@ -4180,7 +4243,7 @@ ExtensionType: (*int32)(nil), Field: 107, Name: "test_proto.no_default_sint32", - Tag: "zigzag32,107,opt,name=no_default_sint32,json=noDefaultSint32", + Tag: "zigzag32,107,opt,name=no_default_sint32", Filename: "test_proto/test.proto", } @@ -4189,7 +4252,7 @@ ExtensionType: (*int64)(nil), Field: 108, Name: "test_proto.no_default_sint64", - Tag: "zigzag64,108,opt,name=no_default_sint64,json=noDefaultSint64", + Tag: "zigzag64,108,opt,name=no_default_sint64", Filename: "test_proto/test.proto", } @@ -4198,7 +4261,7 @@ ExtensionType: (*uint32)(nil), Field: 109, Name: "test_proto.no_default_fixed32", - Tag: "fixed32,109,opt,name=no_default_fixed32,json=noDefaultFixed32", + Tag: "fixed32,109,opt,name=no_default_fixed32", Filename: "test_proto/test.proto", } @@ -4207,7 +4270,7 @@ ExtensionType: (*uint64)(nil), Field: 110, Name: "test_proto.no_default_fixed64", - Tag: "fixed64,110,opt,name=no_default_fixed64,json=noDefaultFixed64", + Tag: "fixed64,110,opt,name=no_default_fixed64", Filename: "test_proto/test.proto", } @@ -4216,7 +4279,7 @@ ExtensionType: (*int32)(nil), Field: 111, Name: "test_proto.no_default_sfixed32", - Tag: "fixed32,111,opt,name=no_default_sfixed32,json=noDefaultSfixed32", + Tag: "fixed32,111,opt,name=no_default_sfixed32", Filename: "test_proto/test.proto", } @@ -4225,7 +4288,7 @@ ExtensionType: (*int64)(nil), Field: 112, Name: "test_proto.no_default_sfixed64", - Tag: "fixed64,112,opt,name=no_default_sfixed64,json=noDefaultSfixed64", + Tag: "fixed64,112,opt,name=no_default_sfixed64", Filename: "test_proto/test.proto", } @@ -4234,7 +4297,7 @@ ExtensionType: (*bool)(nil), Field: 113, Name: "test_proto.no_default_bool", - Tag: "varint,113,opt,name=no_default_bool,json=noDefaultBool", + Tag: "varint,113,opt,name=no_default_bool", Filename: "test_proto/test.proto", } @@ -4243,7 +4306,7 @@ ExtensionType: (*string)(nil), Field: 114, Name: "test_proto.no_default_string", - Tag: "bytes,114,opt,name=no_default_string,json=noDefaultString", + Tag: "bytes,114,opt,name=no_default_string", Filename: "test_proto/test.proto", } @@ -4252,7 +4315,7 @@ ExtensionType: ([]byte)(nil), Field: 115, Name: "test_proto.no_default_bytes", - Tag: "bytes,115,opt,name=no_default_bytes,json=noDefaultBytes", + Tag: "bytes,115,opt,name=no_default_bytes", Filename: "test_proto/test.proto", } @@ -4261,7 +4324,7 @@ ExtensionType: (*DefaultsMessage_DefaultsEnum)(nil), Field: 116, Name: "test_proto.no_default_enum", - Tag: "varint,116,opt,name=no_default_enum,json=noDefaultEnum,enum=test_proto.DefaultsMessage_DefaultsEnum", + Tag: "varint,116,opt,name=no_default_enum,enum=test_proto.DefaultsMessage_DefaultsEnum", Filename: "test_proto/test.proto", } @@ -4270,7 +4333,7 @@ ExtensionType: (*float64)(nil), Field: 201, Name: "test_proto.default_double", - Tag: "fixed64,201,opt,name=default_double,json=defaultDouble,def=3.1415", + Tag: "fixed64,201,opt,name=default_double,def=3.1415", Filename: "test_proto/test.proto", } @@ -4279,7 +4342,7 @@ ExtensionType: (*float32)(nil), Field: 202, Name: "test_proto.default_float", - Tag: "fixed32,202,opt,name=default_float,json=defaultFloat,def=3.14", + Tag: "fixed32,202,opt,name=default_float,def=3.14", Filename: "test_proto/test.proto", } @@ -4288,7 +4351,7 @@ ExtensionType: (*int32)(nil), Field: 203, Name: "test_proto.default_int32", - Tag: "varint,203,opt,name=default_int32,json=defaultInt32,def=42", + Tag: "varint,203,opt,name=default_int32,def=42", Filename: "test_proto/test.proto", } @@ -4297,7 +4360,7 @@ ExtensionType: (*int64)(nil), Field: 204, Name: "test_proto.default_int64", - Tag: "varint,204,opt,name=default_int64,json=defaultInt64,def=43", + Tag: "varint,204,opt,name=default_int64,def=43", Filename: "test_proto/test.proto", } @@ -4306,7 +4369,7 @@ ExtensionType: (*uint32)(nil), Field: 205, Name: "test_proto.default_uint32", - Tag: "varint,205,opt,name=default_uint32,json=defaultUint32,def=44", + Tag: "varint,205,opt,name=default_uint32,def=44", Filename: "test_proto/test.proto", } @@ -4315,7 +4378,7 @@ ExtensionType: (*uint64)(nil), Field: 206, Name: "test_proto.default_uint64", - Tag: "varint,206,opt,name=default_uint64,json=defaultUint64,def=45", + Tag: "varint,206,opt,name=default_uint64,def=45", Filename: "test_proto/test.proto", } @@ -4324,7 +4387,7 @@ ExtensionType: (*int32)(nil), Field: 207, Name: "test_proto.default_sint32", - Tag: "zigzag32,207,opt,name=default_sint32,json=defaultSint32,def=46", + Tag: "zigzag32,207,opt,name=default_sint32,def=46", Filename: "test_proto/test.proto", } @@ -4333,7 +4396,7 @@ ExtensionType: (*int64)(nil), Field: 208, Name: "test_proto.default_sint64", - Tag: "zigzag64,208,opt,name=default_sint64,json=defaultSint64,def=47", + Tag: "zigzag64,208,opt,name=default_sint64,def=47", Filename: "test_proto/test.proto", } @@ -4342,7 +4405,7 @@ ExtensionType: (*uint32)(nil), Field: 209, Name: "test_proto.default_fixed32", - Tag: "fixed32,209,opt,name=default_fixed32,json=defaultFixed32,def=48", + Tag: "fixed32,209,opt,name=default_fixed32,def=48", Filename: "test_proto/test.proto", } @@ -4351,7 +4414,7 @@ ExtensionType: (*uint64)(nil), Field: 210, Name: "test_proto.default_fixed64", - Tag: "fixed64,210,opt,name=default_fixed64,json=defaultFixed64,def=49", + Tag: "fixed64,210,opt,name=default_fixed64,def=49", Filename: "test_proto/test.proto", } @@ -4360,7 +4423,7 @@ ExtensionType: (*int32)(nil), Field: 211, Name: "test_proto.default_sfixed32", - Tag: "fixed32,211,opt,name=default_sfixed32,json=defaultSfixed32,def=50", + Tag: "fixed32,211,opt,name=default_sfixed32,def=50", Filename: "test_proto/test.proto", } @@ -4369,7 +4432,7 @@ ExtensionType: (*int64)(nil), Field: 212, Name: "test_proto.default_sfixed64", - Tag: "fixed64,212,opt,name=default_sfixed64,json=defaultSfixed64,def=51", + Tag: "fixed64,212,opt,name=default_sfixed64,def=51", Filename: "test_proto/test.proto", } @@ -4378,7 +4441,7 @@ ExtensionType: (*bool)(nil), Field: 213, Name: "test_proto.default_bool", - Tag: "varint,213,opt,name=default_bool,json=defaultBool,def=1", + Tag: "varint,213,opt,name=default_bool,def=1", Filename: "test_proto/test.proto", } @@ -4387,7 +4450,7 @@ ExtensionType: (*string)(nil), Field: 214, Name: "test_proto.default_string", - Tag: "bytes,214,opt,name=default_string,json=defaultString,def=Hello, string,def=foo", + Tag: "bytes,214,opt,name=default_string,def=Hello, string,def=foo", Filename: "test_proto/test.proto", } @@ -4396,7 +4459,7 @@ ExtensionType: ([]byte)(nil), Field: 215, Name: "test_proto.default_bytes", - Tag: "bytes,215,opt,name=default_bytes,json=defaultBytes,def=Hello, bytes", + Tag: "bytes,215,opt,name=default_bytes,def=Hello, bytes", Filename: "test_proto/test.proto", } @@ -4405,7 +4468,7 @@ ExtensionType: (*DefaultsMessage_DefaultsEnum)(nil), Field: 216, Name: "test_proto.default_enum", - Tag: "varint,216,opt,name=default_enum,json=defaultEnum,enum=test_proto.DefaultsMessage_DefaultsEnum,def=1", + Tag: "varint,216,opt,name=default_enum,enum=test_proto.DefaultsMessage_DefaultsEnum,def=1", Filename: "test_proto/test.proto", } @@ -4860,6 +4923,12 @@ } func init() { + proto.RegisterEnum("test_proto.FOO", FOO_name, FOO_value) + proto.RegisterEnum("test_proto.GoTest_KIND", GoTest_KIND_name, GoTest_KIND_value) + proto.RegisterEnum("test_proto.MyMessage_Color", MyMessage_Color_name, MyMessage_Color_value) + proto.RegisterEnum("test_proto.DefaultsMessage_DefaultsEnum", DefaultsMessage_DefaultsEnum_name, DefaultsMessage_DefaultsEnum_value) + proto.RegisterEnum("test_proto.Defaults_Color", Defaults_Color_name, Defaults_Color_value) + proto.RegisterEnum("test_proto.RepeatedEnum_Color", RepeatedEnum_Color_name, RepeatedEnum_Color_value) proto.RegisterType((*GoEnum)(nil), "test_proto.GoEnum") proto.RegisterType((*GoTestField)(nil), "test_proto.GoTestField") proto.RegisterType((*GoTest)(nil), "test_proto.GoTest") @@ -4882,6 +4951,9 @@ proto.RegisterType((*RequiredInnerMessage)(nil), "test_proto.RequiredInnerMessage") proto.RegisterType((*MyMessage)(nil), "test_proto.MyMessage") proto.RegisterType((*MyMessage_SomeGroup)(nil), "test_proto.MyMessage.SomeGroup") + proto.RegisterExtension(E_Ext_More) + proto.RegisterExtension(E_Ext_Text) + proto.RegisterExtension(E_Ext_Number) proto.RegisterType((*Ext)(nil), "test_proto.Ext") proto.RegisterMapType((map[int32]int32)(nil), "test_proto.Ext.MapFieldEntry") proto.RegisterType((*ComplexExtension)(nil), "test_proto.ComplexExtension") @@ -4911,15 +4983,6 @@ proto.RegisterType((*TestUTF8)(nil), "test_proto.TestUTF8") proto.RegisterMapType((map[string]int64)(nil), "test_proto.TestUTF8.MapKeyEntry") proto.RegisterMapType((map[int64]string)(nil), "test_proto.TestUTF8.MapValueEntry") - proto.RegisterEnum("test_proto.FOO", FOO_name, FOO_value) - proto.RegisterEnum("test_proto.GoTest_KIND", GoTest_KIND_name, GoTest_KIND_value) - proto.RegisterEnum("test_proto.MyMessage_Color", MyMessage_Color_name, MyMessage_Color_value) - proto.RegisterEnum("test_proto.DefaultsMessage_DefaultsEnum", DefaultsMessage_DefaultsEnum_name, DefaultsMessage_DefaultsEnum_value) - proto.RegisterEnum("test_proto.Defaults_Color", Defaults_Color_name, Defaults_Color_value) - proto.RegisterEnum("test_proto.RepeatedEnum_Color", RepeatedEnum_Color_name, RepeatedEnum_Color_value) - proto.RegisterExtension(E_Ext_More) - proto.RegisterExtension(E_Ext_Text) - proto.RegisterExtension(E_Ext_Number) proto.RegisterExtension(E_Greeting) proto.RegisterExtension(E_Complex) proto.RegisterExtension(E_RComplex) @@ -5007,9 +5070,9 @@ proto.RegisterExtension(E_X250) } -func init() { proto.RegisterFile("test_proto/test.proto", fileDescriptor_test_ee9f66cbbebc227c) } +func init() { proto.RegisterFile("test_proto/test.proto", fileDescriptor_8ca34d01332f1402) } -var fileDescriptor_test_ee9f66cbbebc227c = []byte{ +var fileDescriptor_8ca34d01332f1402 = []byte{ // 4795 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x5b, 0xd9, 0x73, 0x1b, 0x47, 0x7a, 0xd7, 0x0c, 0xee, 0x0f, 0x20, 0x31, 0x6c, 0xc9, 0x12, 0x44, 0x59, 0xd2, 0x08, 0x6b, 0xaf, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: google/protobuf/descriptor.proto -package descriptor // import "github.com/golang/protobuf/protoc-gen-go/descriptor" +package descriptor -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -72,6 +74,7 @@ 17: "TYPE_SINT32", 18: "TYPE_SINT64", } + var FieldDescriptorProto_Type_value = map[string]int32{ "TYPE_DOUBLE": 1, "TYPE_FLOAT": 2, @@ -98,9 +101,11 @@ *p = x return p } + func (x FieldDescriptorProto_Type) String() string { return proto.EnumName(FieldDescriptorProto_Type_name, int32(x)) } + func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type") if err != nil { @@ -109,8 +114,9 @@ *x = FieldDescriptorProto_Type(value) return nil } + func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{4, 0} + return fileDescriptor_e5baabe45344a177, []int{4, 0} } type FieldDescriptorProto_Label int32 @@ -127,6 +133,7 @@ 2: "LABEL_REQUIRED", 3: "LABEL_REPEATED", } + var FieldDescriptorProto_Label_value = map[string]int32{ "LABEL_OPTIONAL": 1, "LABEL_REQUIRED": 2, @@ -138,9 +145,11 @@ *p = x return p } + func (x FieldDescriptorProto_Label) String() string { return proto.EnumName(FieldDescriptorProto_Label_name, int32(x)) } + func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label") if err != nil { @@ -149,8 +158,9 @@ *x = FieldDescriptorProto_Label(value) return nil } + func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{4, 1} + return fileDescriptor_e5baabe45344a177, []int{4, 1} } // Generated classes can be optimized for speed or code size. @@ -168,6 +178,7 @@ 2: "CODE_SIZE", 3: "LITE_RUNTIME", } + var FileOptions_OptimizeMode_value = map[string]int32{ "SPEED": 1, "CODE_SIZE": 2, @@ -179,9 +190,11 @@ *p = x return p } + func (x FileOptions_OptimizeMode) String() string { return proto.EnumName(FileOptions_OptimizeMode_name, int32(x)) } + func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode") if err != nil { @@ -190,8 +203,9 @@ *x = FileOptions_OptimizeMode(value) return nil } + func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{10, 0} + return fileDescriptor_e5baabe45344a177, []int{10, 0} } type FieldOptions_CType int32 @@ -208,6 +222,7 @@ 1: "CORD", 2: "STRING_PIECE", } + var FieldOptions_CType_value = map[string]int32{ "STRING": 0, "CORD": 1, @@ -219,9 +234,11 @@ *p = x return p } + func (x FieldOptions_CType) String() string { return proto.EnumName(FieldOptions_CType_name, int32(x)) } + func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType") if err != nil { @@ -230,8 +247,9 @@ *x = FieldOptions_CType(value) return nil } + func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{12, 0} + return fileDescriptor_e5baabe45344a177, []int{12, 0} } type FieldOptions_JSType int32 @@ -250,6 +268,7 @@ 1: "JS_STRING", 2: "JS_NUMBER", } + var FieldOptions_JSType_value = map[string]int32{ "JS_NORMAL": 0, "JS_STRING": 1, @@ -261,9 +280,11 @@ *p = x return p } + func (x FieldOptions_JSType) String() string { return proto.EnumName(FieldOptions_JSType_name, int32(x)) } + func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType") if err != nil { @@ -272,8 +293,9 @@ *x = FieldOptions_JSType(value) return nil } + func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{12, 1} + return fileDescriptor_e5baabe45344a177, []int{12, 1} } // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, @@ -292,6 +314,7 @@ 1: "NO_SIDE_EFFECTS", 2: "IDEMPOTENT", } + var MethodOptions_IdempotencyLevel_value = map[string]int32{ "IDEMPOTENCY_UNKNOWN": 0, "NO_SIDE_EFFECTS": 1, @@ -303,9 +326,11 @@ *p = x return p } + func (x MethodOptions_IdempotencyLevel) String() string { return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x)) } + func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel") if err != nil { @@ -314,8 +339,9 @@ *x = MethodOptions_IdempotencyLevel(value) return nil } + func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{17, 0} + return fileDescriptor_e5baabe45344a177, []int{17, 0} } // The protocol compiler can output a FileDescriptorSet containing the .proto @@ -331,16 +357,17 @@ func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) } func (*FileDescriptorSet) ProtoMessage() {} func (*FileDescriptorSet) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{0} + return fileDescriptor_e5baabe45344a177, []int{0} } + func (m *FileDescriptorSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FileDescriptorSet.Unmarshal(m, b) } func (m *FileDescriptorSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_FileDescriptorSet.Marshal(b, m, deterministic) } -func (dst *FileDescriptorSet) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileDescriptorSet.Merge(dst, src) +func (m *FileDescriptorSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileDescriptorSet.Merge(m, src) } func (m *FileDescriptorSet) XXX_Size() int { return xxx_messageInfo_FileDescriptorSet.Size(m) @@ -392,16 +419,17 @@ func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) } func (*FileDescriptorProto) ProtoMessage() {} func (*FileDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{1} + return fileDescriptor_e5baabe45344a177, []int{1} } + func (m *FileDescriptorProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FileDescriptorProto.Unmarshal(m, b) } func (m *FileDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_FileDescriptorProto.Marshal(b, m, deterministic) } -func (dst *FileDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileDescriptorProto.Merge(dst, src) +func (m *FileDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileDescriptorProto.Merge(m, src) } func (m *FileDescriptorProto) XXX_Size() int { return xxx_messageInfo_FileDescriptorProto.Size(m) @@ -519,16 +547,17 @@ func (m *DescriptorProto) String() string { return proto.CompactTextString(m) } func (*DescriptorProto) ProtoMessage() {} func (*DescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{2} + return fileDescriptor_e5baabe45344a177, []int{2} } + func (m *DescriptorProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DescriptorProto.Unmarshal(m, b) } func (m *DescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DescriptorProto.Marshal(b, m, deterministic) } -func (dst *DescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_DescriptorProto.Merge(dst, src) +func (m *DescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_DescriptorProto.Merge(m, src) } func (m *DescriptorProto) XXX_Size() int { return xxx_messageInfo_DescriptorProto.Size(m) @@ -622,16 +651,17 @@ func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) } func (*DescriptorProto_ExtensionRange) ProtoMessage() {} func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{2, 0} + return fileDescriptor_e5baabe45344a177, []int{2, 0} } + func (m *DescriptorProto_ExtensionRange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DescriptorProto_ExtensionRange.Unmarshal(m, b) } func (m *DescriptorProto_ExtensionRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DescriptorProto_ExtensionRange.Marshal(b, m, deterministic) } -func (dst *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_DescriptorProto_ExtensionRange.Merge(dst, src) +func (m *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_DescriptorProto_ExtensionRange.Merge(m, src) } func (m *DescriptorProto_ExtensionRange) XXX_Size() int { return xxx_messageInfo_DescriptorProto_ExtensionRange.Size(m) @@ -678,16 +708,17 @@ func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) } func (*DescriptorProto_ReservedRange) ProtoMessage() {} func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{2, 1} + return fileDescriptor_e5baabe45344a177, []int{2, 1} } + func (m *DescriptorProto_ReservedRange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DescriptorProto_ReservedRange.Unmarshal(m, b) } func (m *DescriptorProto_ReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DescriptorProto_ReservedRange.Marshal(b, m, deterministic) } -func (dst *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_DescriptorProto_ReservedRange.Merge(dst, src) +func (m *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_DescriptorProto_ReservedRange.Merge(m, src) } func (m *DescriptorProto_ReservedRange) XXX_Size() int { return xxx_messageInfo_DescriptorProto_ReservedRange.Size(m) @@ -725,7 +756,7 @@ func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) } func (*ExtensionRangeOptions) ProtoMessage() {} func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{3} + return fileDescriptor_e5baabe45344a177, []int{3} } var extRange_ExtensionRangeOptions = []proto.ExtensionRange{ @@ -735,14 +766,15 @@ func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_ExtensionRangeOptions } + func (m *ExtensionRangeOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExtensionRangeOptions.Unmarshal(m, b) } func (m *ExtensionRangeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ExtensionRangeOptions.Marshal(b, m, deterministic) } -func (dst *ExtensionRangeOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExtensionRangeOptions.Merge(dst, src) +func (m *ExtensionRangeOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtensionRangeOptions.Merge(m, src) } func (m *ExtensionRangeOptions) XXX_Size() int { return xxx_messageInfo_ExtensionRangeOptions.Size(m) @@ -801,16 +833,17 @@ func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) } func (*FieldDescriptorProto) ProtoMessage() {} func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{4} + return fileDescriptor_e5baabe45344a177, []int{4} } + func (m *FieldDescriptorProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FieldDescriptorProto.Unmarshal(m, b) } func (m *FieldDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_FieldDescriptorProto.Marshal(b, m, deterministic) } -func (dst *FieldDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_FieldDescriptorProto.Merge(dst, src) +func (m *FieldDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_FieldDescriptorProto.Merge(m, src) } func (m *FieldDescriptorProto) XXX_Size() int { return xxx_messageInfo_FieldDescriptorProto.Size(m) @@ -904,16 +937,17 @@ func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) } func (*OneofDescriptorProto) ProtoMessage() {} func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{5} + return fileDescriptor_e5baabe45344a177, []int{5} } + func (m *OneofDescriptorProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OneofDescriptorProto.Unmarshal(m, b) } func (m *OneofDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OneofDescriptorProto.Marshal(b, m, deterministic) } -func (dst *OneofDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofDescriptorProto.Merge(dst, src) +func (m *OneofDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofDescriptorProto.Merge(m, src) } func (m *OneofDescriptorProto) XXX_Size() int { return xxx_messageInfo_OneofDescriptorProto.Size(m) @@ -959,16 +993,17 @@ func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) } func (*EnumDescriptorProto) ProtoMessage() {} func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{6} + return fileDescriptor_e5baabe45344a177, []int{6} } + func (m *EnumDescriptorProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EnumDescriptorProto.Unmarshal(m, b) } func (m *EnumDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EnumDescriptorProto.Marshal(b, m, deterministic) } -func (dst *EnumDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumDescriptorProto.Merge(dst, src) +func (m *EnumDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumDescriptorProto.Merge(m, src) } func (m *EnumDescriptorProto) XXX_Size() int { return xxx_messageInfo_EnumDescriptorProto.Size(m) @@ -1032,16 +1067,17 @@ func (m *EnumDescriptorProto_EnumReservedRange) String() string { return proto.CompactTextString(m) } func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{6, 0} + return fileDescriptor_e5baabe45344a177, []int{6, 0} } + func (m *EnumDescriptorProto_EnumReservedRange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Unmarshal(m, b) } func (m *EnumDescriptorProto_EnumReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Marshal(b, m, deterministic) } -func (dst *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(dst, src) +func (m *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(m, src) } func (m *EnumDescriptorProto_EnumReservedRange) XXX_Size() int { return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Size(m) @@ -1080,16 +1116,17 @@ func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) } func (*EnumValueDescriptorProto) ProtoMessage() {} func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{7} + return fileDescriptor_e5baabe45344a177, []int{7} } + func (m *EnumValueDescriptorProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EnumValueDescriptorProto.Unmarshal(m, b) } func (m *EnumValueDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EnumValueDescriptorProto.Marshal(b, m, deterministic) } -func (dst *EnumValueDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumValueDescriptorProto.Merge(dst, src) +func (m *EnumValueDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumValueDescriptorProto.Merge(m, src) } func (m *EnumValueDescriptorProto) XXX_Size() int { return xxx_messageInfo_EnumValueDescriptorProto.Size(m) @@ -1135,16 +1172,17 @@ func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) } func (*ServiceDescriptorProto) ProtoMessage() {} func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{8} + return fileDescriptor_e5baabe45344a177, []int{8} } + func (m *ServiceDescriptorProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ServiceDescriptorProto.Unmarshal(m, b) } func (m *ServiceDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ServiceDescriptorProto.Marshal(b, m, deterministic) } -func (dst *ServiceDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_ServiceDescriptorProto.Merge(dst, src) +func (m *ServiceDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceDescriptorProto.Merge(m, src) } func (m *ServiceDescriptorProto) XXX_Size() int { return xxx_messageInfo_ServiceDescriptorProto.Size(m) @@ -1197,16 +1235,17 @@ func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) } func (*MethodDescriptorProto) ProtoMessage() {} func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{9} + return fileDescriptor_e5baabe45344a177, []int{9} } + func (m *MethodDescriptorProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MethodDescriptorProto.Unmarshal(m, b) } func (m *MethodDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MethodDescriptorProto.Marshal(b, m, deterministic) } -func (dst *MethodDescriptorProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_MethodDescriptorProto.Merge(dst, src) +func (m *MethodDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_MethodDescriptorProto.Merge(m, src) } func (m *MethodDescriptorProto) XXX_Size() int { return xxx_messageInfo_MethodDescriptorProto.Size(m) @@ -1336,6 +1375,14 @@ // is empty. When this option is empty, the package name will be used for // determining the namespace. PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"` + // 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:"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace" json:"php_metadata_namespace,omitempty"` + // 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:"bytes,45,opt,name=ruby_package,json=rubyPackage" json:"ruby_package,omitempty"` // The parser stores options it doesn't recognize here. // See the documentation for the "Options" section above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` @@ -1349,7 +1396,7 @@ func (m *FileOptions) String() string { return proto.CompactTextString(m) } func (*FileOptions) ProtoMessage() {} func (*FileOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{10} + return fileDescriptor_e5baabe45344a177, []int{10} } var extRange_FileOptions = []proto.ExtensionRange{ @@ -1359,14 +1406,15 @@ func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_FileOptions } + func (m *FileOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FileOptions.Unmarshal(m, b) } func (m *FileOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_FileOptions.Marshal(b, m, deterministic) } -func (dst *FileOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileOptions.Merge(dst, src) +func (m *FileOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileOptions.Merge(m, src) } func (m *FileOptions) XXX_Size() int { return xxx_messageInfo_FileOptions.Size(m) @@ -1514,6 +1562,20 @@ return "" } +func (m *FileOptions) GetPhpMetadataNamespace() string { + if m != nil && m.PhpMetadataNamespace != nil { + return *m.PhpMetadataNamespace + } + return "" +} + +func (m *FileOptions) GetRubyPackage() string { + if m != nil && m.RubyPackage != nil { + return *m.RubyPackage + } + return "" +} + func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption { if m != nil { return m.UninterpretedOption @@ -1584,7 +1646,7 @@ func (m *MessageOptions) String() string { return proto.CompactTextString(m) } func (*MessageOptions) ProtoMessage() {} func (*MessageOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{11} + return fileDescriptor_e5baabe45344a177, []int{11} } var extRange_MessageOptions = []proto.ExtensionRange{ @@ -1594,14 +1656,15 @@ func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_MessageOptions } + func (m *MessageOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageOptions.Unmarshal(m, b) } func (m *MessageOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MessageOptions.Marshal(b, m, deterministic) } -func (dst *MessageOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessageOptions.Merge(dst, src) +func (m *MessageOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessageOptions.Merge(m, src) } func (m *MessageOptions) XXX_Size() int { return xxx_messageInfo_MessageOptions.Size(m) @@ -1723,7 +1786,7 @@ func (m *FieldOptions) String() string { return proto.CompactTextString(m) } func (*FieldOptions) ProtoMessage() {} func (*FieldOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{12} + return fileDescriptor_e5baabe45344a177, []int{12} } var extRange_FieldOptions = []proto.ExtensionRange{ @@ -1733,14 +1796,15 @@ func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_FieldOptions } + func (m *FieldOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FieldOptions.Unmarshal(m, b) } func (m *FieldOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_FieldOptions.Marshal(b, m, deterministic) } -func (dst *FieldOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_FieldOptions.Merge(dst, src) +func (m *FieldOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_FieldOptions.Merge(m, src) } func (m *FieldOptions) XXX_Size() int { return xxx_messageInfo_FieldOptions.Size(m) @@ -1819,7 +1883,7 @@ func (m *OneofOptions) String() string { return proto.CompactTextString(m) } func (*OneofOptions) ProtoMessage() {} func (*OneofOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{13} + return fileDescriptor_e5baabe45344a177, []int{13} } var extRange_OneofOptions = []proto.ExtensionRange{ @@ -1829,14 +1893,15 @@ func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_OneofOptions } + func (m *OneofOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OneofOptions.Unmarshal(m, b) } func (m *OneofOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OneofOptions.Marshal(b, m, deterministic) } -func (dst *OneofOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_OneofOptions.Merge(dst, src) +func (m *OneofOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofOptions.Merge(m, src) } func (m *OneofOptions) XXX_Size() int { return xxx_messageInfo_OneofOptions.Size(m) @@ -1875,7 +1940,7 @@ func (m *EnumOptions) String() string { return proto.CompactTextString(m) } func (*EnumOptions) ProtoMessage() {} func (*EnumOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{14} + return fileDescriptor_e5baabe45344a177, []int{14} } var extRange_EnumOptions = []proto.ExtensionRange{ @@ -1885,14 +1950,15 @@ func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_EnumOptions } + func (m *EnumOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EnumOptions.Unmarshal(m, b) } func (m *EnumOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EnumOptions.Marshal(b, m, deterministic) } -func (dst *EnumOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumOptions.Merge(dst, src) +func (m *EnumOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumOptions.Merge(m, src) } func (m *EnumOptions) XXX_Size() int { return xxx_messageInfo_EnumOptions.Size(m) @@ -1944,7 +2010,7 @@ func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) } func (*EnumValueOptions) ProtoMessage() {} func (*EnumValueOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{15} + return fileDescriptor_e5baabe45344a177, []int{15} } var extRange_EnumValueOptions = []proto.ExtensionRange{ @@ -1954,14 +2020,15 @@ func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_EnumValueOptions } + func (m *EnumValueOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EnumValueOptions.Unmarshal(m, b) } func (m *EnumValueOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EnumValueOptions.Marshal(b, m, deterministic) } -func (dst *EnumValueOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_EnumValueOptions.Merge(dst, src) +func (m *EnumValueOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumValueOptions.Merge(m, src) } func (m *EnumValueOptions) XXX_Size() int { return xxx_messageInfo_EnumValueOptions.Size(m) @@ -2006,7 +2073,7 @@ func (m *ServiceOptions) String() string { return proto.CompactTextString(m) } func (*ServiceOptions) ProtoMessage() {} func (*ServiceOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{16} + return fileDescriptor_e5baabe45344a177, []int{16} } var extRange_ServiceOptions = []proto.ExtensionRange{ @@ -2016,14 +2083,15 @@ func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_ServiceOptions } + func (m *ServiceOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ServiceOptions.Unmarshal(m, b) } func (m *ServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ServiceOptions.Marshal(b, m, deterministic) } -func (dst *ServiceOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ServiceOptions.Merge(dst, src) +func (m *ServiceOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceOptions.Merge(m, src) } func (m *ServiceOptions) XXX_Size() int { return xxx_messageInfo_ServiceOptions.Size(m) @@ -2069,7 +2137,7 @@ func (m *MethodOptions) String() string { return proto.CompactTextString(m) } func (*MethodOptions) ProtoMessage() {} func (*MethodOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{17} + return fileDescriptor_e5baabe45344a177, []int{17} } var extRange_MethodOptions = []proto.ExtensionRange{ @@ -2079,14 +2147,15 @@ func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_MethodOptions } + func (m *MethodOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MethodOptions.Unmarshal(m, b) } func (m *MethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MethodOptions.Marshal(b, m, deterministic) } -func (dst *MethodOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_MethodOptions.Merge(dst, src) +func (m *MethodOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_MethodOptions.Merge(m, src) } func (m *MethodOptions) XXX_Size() int { return xxx_messageInfo_MethodOptions.Size(m) @@ -2146,16 +2215,17 @@ func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) } func (*UninterpretedOption) ProtoMessage() {} func (*UninterpretedOption) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{18} + return fileDescriptor_e5baabe45344a177, []int{18} } + func (m *UninterpretedOption) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UninterpretedOption.Unmarshal(m, b) } func (m *UninterpretedOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UninterpretedOption.Marshal(b, m, deterministic) } -func (dst *UninterpretedOption) XXX_Merge(src proto.Message) { - xxx_messageInfo_UninterpretedOption.Merge(dst, src) +func (m *UninterpretedOption) XXX_Merge(src proto.Message) { + xxx_messageInfo_UninterpretedOption.Merge(m, src) } func (m *UninterpretedOption) XXX_Size() int { return xxx_messageInfo_UninterpretedOption.Size(m) @@ -2232,16 +2302,17 @@ func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) } func (*UninterpretedOption_NamePart) ProtoMessage() {} func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{18, 0} + return fileDescriptor_e5baabe45344a177, []int{18, 0} } + func (m *UninterpretedOption_NamePart) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UninterpretedOption_NamePart.Unmarshal(m, b) } func (m *UninterpretedOption_NamePart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UninterpretedOption_NamePart.Marshal(b, m, deterministic) } -func (dst *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) { - xxx_messageInfo_UninterpretedOption_NamePart.Merge(dst, src) +func (m *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) { + xxx_messageInfo_UninterpretedOption_NamePart.Merge(m, src) } func (m *UninterpretedOption_NamePart) XXX_Size() int { return xxx_messageInfo_UninterpretedOption_NamePart.Size(m) @@ -2322,16 +2393,17 @@ func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) } func (*SourceCodeInfo) ProtoMessage() {} func (*SourceCodeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{19} + return fileDescriptor_e5baabe45344a177, []int{19} } + func (m *SourceCodeInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SourceCodeInfo.Unmarshal(m, b) } func (m *SourceCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SourceCodeInfo.Marshal(b, m, deterministic) } -func (dst *SourceCodeInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_SourceCodeInfo.Merge(dst, src) +func (m *SourceCodeInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceCodeInfo.Merge(m, src) } func (m *SourceCodeInfo) XXX_Size() int { return xxx_messageInfo_SourceCodeInfo.Size(m) @@ -2439,16 +2511,17 @@ func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) } func (*SourceCodeInfo_Location) ProtoMessage() {} func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{19, 0} + return fileDescriptor_e5baabe45344a177, []int{19, 0} } + func (m *SourceCodeInfo_Location) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SourceCodeInfo_Location.Unmarshal(m, b) } func (m *SourceCodeInfo_Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SourceCodeInfo_Location.Marshal(b, m, deterministic) } -func (dst *SourceCodeInfo_Location) XXX_Merge(src proto.Message) { - xxx_messageInfo_SourceCodeInfo_Location.Merge(dst, src) +func (m *SourceCodeInfo_Location) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceCodeInfo_Location.Merge(m, src) } func (m *SourceCodeInfo_Location) XXX_Size() int { return xxx_messageInfo_SourceCodeInfo_Location.Size(m) @@ -2510,16 +2583,17 @@ func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) } func (*GeneratedCodeInfo) ProtoMessage() {} func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{20} + return fileDescriptor_e5baabe45344a177, []int{20} } + func (m *GeneratedCodeInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GeneratedCodeInfo.Unmarshal(m, b) } func (m *GeneratedCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GeneratedCodeInfo.Marshal(b, m, deterministic) } -func (dst *GeneratedCodeInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_GeneratedCodeInfo.Merge(dst, src) +func (m *GeneratedCodeInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GeneratedCodeInfo.Merge(m, src) } func (m *GeneratedCodeInfo) XXX_Size() int { return xxx_messageInfo_GeneratedCodeInfo.Size(m) @@ -2559,16 +2633,17 @@ func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) } func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { - return fileDescriptor_descriptor_4df4cb5f42392df6, []int{20, 0} + return fileDescriptor_e5baabe45344a177, []int{20, 0} } + func (m *GeneratedCodeInfo_Annotation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GeneratedCodeInfo_Annotation.Unmarshal(m, b) } func (m *GeneratedCodeInfo_Annotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GeneratedCodeInfo_Annotation.Marshal(b, m, deterministic) } -func (dst *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) { - xxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(dst, src) +func (m *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(m, src) } func (m *GeneratedCodeInfo_Annotation) XXX_Size() int { return xxx_messageInfo_GeneratedCodeInfo_Annotation.Size(m) @@ -2608,6 +2683,12 @@ } func init() { + proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value) + proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value) + proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value) + proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value) + proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) + proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value) proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet") proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto") proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto") @@ -2635,178 +2716,172 @@ proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location") proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo") proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation") - proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value) - proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value) - proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value) - proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value) - proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) - proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value) } -func init() { - proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor_descriptor_4df4cb5f42392df6) -} +func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor_e5baabe45344a177) } -var fileDescriptor_descriptor_4df4cb5f42392df6 = []byte{ - // 2555 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6e, 0x1b, 0xc7, - 0xf5, 0xcf, 0xf2, 0x4b, 0xe4, 0x21, 0x45, 0x8d, 0x46, 0x8a, 0xbd, 0x56, 0x3e, 0x2c, 0x33, 0x1f, - 0x96, 0x9d, 0x7f, 0xa8, 0xc0, 0xb1, 0x1d, 0x47, 0xfe, 0x23, 0x2d, 0x45, 0xae, 0x15, 0xaa, 0x12, - 0xc9, 0x2e, 0xa9, 0xe6, 0x03, 0x28, 0x16, 0xa3, 0xdd, 0x21, 0xb9, 0xf6, 0x72, 0x77, 0xb3, 0xbb, - 0xb4, 0xad, 0xa0, 0x17, 0x06, 0x7a, 0xd5, 0xab, 0xde, 0x16, 0x45, 0xd1, 0x8b, 0xde, 0x04, 0xe8, - 0x03, 0x14, 0xc8, 0x5d, 0x9f, 0xa0, 0x40, 0xde, 0xa0, 0x68, 0x0b, 0xb4, 0x8f, 0xd0, 0xcb, 0x62, - 0x66, 0x76, 0x97, 0xbb, 0x24, 0x15, 0x2b, 0x01, 0xe2, 0x5c, 0x91, 0xf3, 0x9b, 0xdf, 0x39, 0x73, - 0xe6, 0xcc, 0x99, 0x33, 0x67, 0x66, 0x61, 0x7b, 0xe4, 0x38, 0x23, 0x8b, 0xee, 0xba, 0x9e, 0x13, - 0x38, 0xa7, 0xd3, 0xe1, 0xae, 0x41, 0x7d, 0xdd, 0x33, 0xdd, 0xc0, 0xf1, 0xea, 0x1c, 0xc3, 0x6b, - 0x82, 0x51, 0x8f, 0x18, 0xb5, 0x63, 0x58, 0x7f, 0x60, 0x5a, 0xb4, 0x15, 0x13, 0xfb, 0x34, 0xc0, - 0xf7, 0x20, 0x37, 0x34, 0x2d, 0x2a, 0x4b, 0xdb, 0xd9, 0x9d, 0xf2, 0xad, 0x37, 0xeb, 0x73, 0x42, - 0xf5, 0xb4, 0x44, 0x8f, 0xc1, 0x2a, 0x97, 0xa8, 0xfd, 0x2b, 0x07, 0x1b, 0x4b, 0x7a, 0x31, 0x86, - 0x9c, 0x4d, 0x26, 0x4c, 0xa3, 0xb4, 0x53, 0x52, 0xf9, 0x7f, 0x2c, 0xc3, 0x8a, 0x4b, 0xf4, 0x47, - 0x64, 0x44, 0xe5, 0x0c, 0x87, 0xa3, 0x26, 0x7e, 0x1d, 0xc0, 0xa0, 0x2e, 0xb5, 0x0d, 0x6a, 0xeb, - 0x67, 0x72, 0x76, 0x3b, 0xbb, 0x53, 0x52, 0x13, 0x08, 0x7e, 0x07, 0xd6, 0xdd, 0xe9, 0xa9, 0x65, - 0xea, 0x5a, 0x82, 0x06, 0xdb, 0xd9, 0x9d, 0xbc, 0x8a, 0x44, 0x47, 0x6b, 0x46, 0xbe, 0x0e, 0x6b, - 0x4f, 0x28, 0x79, 0x94, 0xa4, 0x96, 0x39, 0xb5, 0xca, 0xe0, 0x04, 0xb1, 0x09, 0x95, 0x09, 0xf5, - 0x7d, 0x32, 0xa2, 0x5a, 0x70, 0xe6, 0x52, 0x39, 0xc7, 0x67, 0xbf, 0xbd, 0x30, 0xfb, 0xf9, 0x99, - 0x97, 0x43, 0xa9, 0xc1, 0x99, 0x4b, 0x71, 0x03, 0x4a, 0xd4, 0x9e, 0x4e, 0x84, 0x86, 0xfc, 0x39, - 0xfe, 0x53, 0xec, 0xe9, 0x64, 0x5e, 0x4b, 0x91, 0x89, 0x85, 0x2a, 0x56, 0x7c, 0xea, 0x3d, 0x36, - 0x75, 0x2a, 0x17, 0xb8, 0x82, 0xeb, 0x0b, 0x0a, 0xfa, 0xa2, 0x7f, 0x5e, 0x47, 0x24, 0x87, 0x9b, - 0x50, 0xa2, 0x4f, 0x03, 0x6a, 0xfb, 0xa6, 0x63, 0xcb, 0x2b, 0x5c, 0xc9, 0x5b, 0x4b, 0x56, 0x91, - 0x5a, 0xc6, 0xbc, 0x8a, 0x99, 0x1c, 0xbe, 0x0b, 0x2b, 0x8e, 0x1b, 0x98, 0x8e, 0xed, 0xcb, 0xc5, - 0x6d, 0x69, 0xa7, 0x7c, 0xeb, 0xd5, 0xa5, 0x81, 0xd0, 0x15, 0x1c, 0x35, 0x22, 0xe3, 0x36, 0x20, - 0xdf, 0x99, 0x7a, 0x3a, 0xd5, 0x74, 0xc7, 0xa0, 0x9a, 0x69, 0x0f, 0x1d, 0xb9, 0xc4, 0x15, 0x5c, - 0x5d, 0x9c, 0x08, 0x27, 0x36, 0x1d, 0x83, 0xb6, 0xed, 0xa1, 0xa3, 0x56, 0xfd, 0x54, 0x1b, 0x5f, - 0x82, 0x82, 0x7f, 0x66, 0x07, 0xe4, 0xa9, 0x5c, 0xe1, 0x11, 0x12, 0xb6, 0x6a, 0x5f, 0x17, 0x60, - 0xed, 0x22, 0x21, 0x76, 0x1f, 0xf2, 0x43, 0x36, 0x4b, 0x39, 0xf3, 0x5d, 0x7c, 0x20, 0x64, 0xd2, - 0x4e, 0x2c, 0x7c, 0x4f, 0x27, 0x36, 0xa0, 0x6c, 0x53, 0x3f, 0xa0, 0x86, 0x88, 0x88, 0xec, 0x05, - 0x63, 0x0a, 0x84, 0xd0, 0x62, 0x48, 0xe5, 0xbe, 0x57, 0x48, 0x7d, 0x0a, 0x6b, 0xb1, 0x49, 0x9a, - 0x47, 0xec, 0x51, 0x14, 0x9b, 0xbb, 0xcf, 0xb3, 0xa4, 0xae, 0x44, 0x72, 0x2a, 0x13, 0x53, 0xab, - 0x34, 0xd5, 0xc6, 0x2d, 0x00, 0xc7, 0xa6, 0xce, 0x50, 0x33, 0xa8, 0x6e, 0xc9, 0xc5, 0x73, 0xbc, - 0xd4, 0x65, 0x94, 0x05, 0x2f, 0x39, 0x02, 0xd5, 0x2d, 0xfc, 0xe1, 0x2c, 0xd4, 0x56, 0xce, 0x89, - 0x94, 0x63, 0xb1, 0xc9, 0x16, 0xa2, 0xed, 0x04, 0xaa, 0x1e, 0x65, 0x71, 0x4f, 0x8d, 0x70, 0x66, - 0x25, 0x6e, 0x44, 0xfd, 0xb9, 0x33, 0x53, 0x43, 0x31, 0x31, 0xb1, 0x55, 0x2f, 0xd9, 0xc4, 0x6f, - 0x40, 0x0c, 0x68, 0x3c, 0xac, 0x80, 0x67, 0xa1, 0x4a, 0x04, 0x76, 0xc8, 0x84, 0x6e, 0x7d, 0x09, - 0xd5, 0xb4, 0x7b, 0xf0, 0x26, 0xe4, 0xfd, 0x80, 0x78, 0x01, 0x8f, 0xc2, 0xbc, 0x2a, 0x1a, 0x18, - 0x41, 0x96, 0xda, 0x06, 0xcf, 0x72, 0x79, 0x95, 0xfd, 0xc5, 0x3f, 0x9d, 0x4d, 0x38, 0xcb, 0x27, - 0xfc, 0xf6, 0xe2, 0x8a, 0xa6, 0x34, 0xcf, 0xcf, 0x7b, 0xeb, 0x03, 0x58, 0x4d, 0x4d, 0xe0, 0xa2, - 0x43, 0xd7, 0x7e, 0x05, 0x2f, 0x2f, 0x55, 0x8d, 0x3f, 0x85, 0xcd, 0xa9, 0x6d, 0xda, 0x01, 0xf5, - 0x5c, 0x8f, 0xb2, 0x88, 0x15, 0x43, 0xc9, 0xff, 0x5e, 0x39, 0x27, 0xe6, 0x4e, 0x92, 0x6c, 0xa1, - 0x45, 0xdd, 0x98, 0x2e, 0x82, 0x37, 0x4b, 0xc5, 0xff, 0xac, 0xa0, 0x67, 0xcf, 0x9e, 0x3d, 0xcb, - 0xd4, 0x7e, 0x57, 0x80, 0xcd, 0x65, 0x7b, 0x66, 0xe9, 0xf6, 0xbd, 0x04, 0x05, 0x7b, 0x3a, 0x39, - 0xa5, 0x1e, 0x77, 0x52, 0x5e, 0x0d, 0x5b, 0xb8, 0x01, 0x79, 0x8b, 0x9c, 0x52, 0x4b, 0xce, 0x6d, - 0x4b, 0x3b, 0xd5, 0x5b, 0xef, 0x5c, 0x68, 0x57, 0xd6, 0x8f, 0x98, 0x88, 0x2a, 0x24, 0xf1, 0x47, - 0x90, 0x0b, 0x53, 0x34, 0xd3, 0x70, 0xf3, 0x62, 0x1a, 0xd8, 0x5e, 0x52, 0xb9, 0x1c, 0x7e, 0x05, - 0x4a, 0xec, 0x57, 0xc4, 0x46, 0x81, 0xdb, 0x5c, 0x64, 0x00, 0x8b, 0x0b, 0xbc, 0x05, 0x45, 0xbe, - 0x4d, 0x0c, 0x1a, 0x1d, 0x6d, 0x71, 0x9b, 0x05, 0x96, 0x41, 0x87, 0x64, 0x6a, 0x05, 0xda, 0x63, - 0x62, 0x4d, 0x29, 0x0f, 0xf8, 0x92, 0x5a, 0x09, 0xc1, 0x5f, 0x30, 0x0c, 0x5f, 0x85, 0xb2, 0xd8, - 0x55, 0xa6, 0x6d, 0xd0, 0xa7, 0x3c, 0x7b, 0xe6, 0x55, 0xb1, 0xd1, 0xda, 0x0c, 0x61, 0xc3, 0x3f, - 0xf4, 0x1d, 0x3b, 0x0a, 0x4d, 0x3e, 0x04, 0x03, 0xf8, 0xf0, 0x1f, 0xcc, 0x27, 0xee, 0xd7, 0x96, - 0x4f, 0x6f, 0x3e, 0xa6, 0x6a, 0x7f, 0xc9, 0x40, 0x8e, 0xe7, 0x8b, 0x35, 0x28, 0x0f, 0x3e, 0xeb, - 0x29, 0x5a, 0xab, 0x7b, 0xb2, 0x7f, 0xa4, 0x20, 0x09, 0x57, 0x01, 0x38, 0xf0, 0xe0, 0xa8, 0xdb, - 0x18, 0xa0, 0x4c, 0xdc, 0x6e, 0x77, 0x06, 0x77, 0x6f, 0xa3, 0x6c, 0x2c, 0x70, 0x22, 0x80, 0x5c, - 0x92, 0xf0, 0xfe, 0x2d, 0x94, 0xc7, 0x08, 0x2a, 0x42, 0x41, 0xfb, 0x53, 0xa5, 0x75, 0xf7, 0x36, - 0x2a, 0xa4, 0x91, 0xf7, 0x6f, 0xa1, 0x15, 0xbc, 0x0a, 0x25, 0x8e, 0xec, 0x77, 0xbb, 0x47, 0xa8, - 0x18, 0xeb, 0xec, 0x0f, 0xd4, 0x76, 0xe7, 0x00, 0x95, 0x62, 0x9d, 0x07, 0x6a, 0xf7, 0xa4, 0x87, - 0x20, 0xd6, 0x70, 0xac, 0xf4, 0xfb, 0x8d, 0x03, 0x05, 0x95, 0x63, 0xc6, 0xfe, 0x67, 0x03, 0xa5, - 0x8f, 0x2a, 0x29, 0xb3, 0xde, 0xbf, 0x85, 0x56, 0xe3, 0x21, 0x94, 0xce, 0xc9, 0x31, 0xaa, 0xe2, - 0x75, 0x58, 0x15, 0x43, 0x44, 0x46, 0xac, 0xcd, 0x41, 0x77, 0x6f, 0x23, 0x34, 0x33, 0x44, 0x68, - 0x59, 0x4f, 0x01, 0x77, 0x6f, 0x23, 0x5c, 0x6b, 0x42, 0x9e, 0x47, 0x17, 0xc6, 0x50, 0x3d, 0x6a, - 0xec, 0x2b, 0x47, 0x5a, 0xb7, 0x37, 0x68, 0x77, 0x3b, 0x8d, 0x23, 0x24, 0xcd, 0x30, 0x55, 0xf9, - 0xf9, 0x49, 0x5b, 0x55, 0x5a, 0x28, 0x93, 0xc4, 0x7a, 0x4a, 0x63, 0xa0, 0xb4, 0x50, 0xb6, 0xa6, - 0xc3, 0xe6, 0xb2, 0x3c, 0xb9, 0x74, 0x67, 0x24, 0x96, 0x38, 0x73, 0xce, 0x12, 0x73, 0x5d, 0x0b, - 0x4b, 0xfc, 0xcf, 0x0c, 0x6c, 0x2c, 0x39, 0x2b, 0x96, 0x0e, 0xf2, 0x13, 0xc8, 0x8b, 0x10, 0x15, - 0xa7, 0xe7, 0x8d, 0xa5, 0x87, 0x0e, 0x0f, 0xd8, 0x85, 0x13, 0x94, 0xcb, 0x25, 0x2b, 0x88, 0xec, - 0x39, 0x15, 0x04, 0x53, 0xb1, 0x90, 0xd3, 0x7f, 0xb9, 0x90, 0xd3, 0xc5, 0xb1, 0x77, 0xf7, 0x22, - 0xc7, 0x1e, 0xc7, 0xbe, 0x5b, 0x6e, 0xcf, 0x2f, 0xc9, 0xed, 0xf7, 0x61, 0x7d, 0x41, 0xd1, 0x85, - 0x73, 0xec, 0xaf, 0x25, 0x90, 0xcf, 0x73, 0xce, 0x73, 0x32, 0x5d, 0x26, 0x95, 0xe9, 0xee, 0xcf, - 0x7b, 0xf0, 0xda, 0xf9, 0x8b, 0xb0, 0xb0, 0xd6, 0x5f, 0x49, 0x70, 0x69, 0x79, 0xa5, 0xb8, 0xd4, - 0x86, 0x8f, 0xa0, 0x30, 0xa1, 0xc1, 0xd8, 0x89, 0xaa, 0xa5, 0xb7, 0x97, 0x9c, 0xc1, 0xac, 0x7b, - 0x7e, 0xb1, 0x43, 0xa9, 0xe4, 0x21, 0x9e, 0x3d, 0xaf, 0xdc, 0x13, 0xd6, 0x2c, 0x58, 0xfa, 0x9b, - 0x0c, 0xbc, 0xbc, 0x54, 0xf9, 0x52, 0x43, 0x5f, 0x03, 0x30, 0x6d, 0x77, 0x1a, 0x88, 0x8a, 0x48, - 0x24, 0xd8, 0x12, 0x47, 0x78, 0xf2, 0x62, 0xc9, 0x73, 0x1a, 0xc4, 0xfd, 0x59, 0xde, 0x0f, 0x02, - 0xe2, 0x84, 0x7b, 0x33, 0x43, 0x73, 0xdc, 0xd0, 0xd7, 0xcf, 0x99, 0xe9, 0x42, 0x60, 0xbe, 0x07, - 0x48, 0xb7, 0x4c, 0x6a, 0x07, 0x9a, 0x1f, 0x78, 0x94, 0x4c, 0x4c, 0x7b, 0xc4, 0x4f, 0x90, 0xe2, - 0x5e, 0x7e, 0x48, 0x2c, 0x9f, 0xaa, 0x6b, 0xa2, 0xbb, 0x1f, 0xf5, 0x32, 0x09, 0x1e, 0x40, 0x5e, - 0x42, 0xa2, 0x90, 0x92, 0x10, 0xdd, 0xb1, 0x44, 0xed, 0xeb, 0x22, 0x94, 0x13, 0x75, 0x35, 0xbe, - 0x06, 0x95, 0x87, 0xe4, 0x31, 0xd1, 0xa2, 0xbb, 0x92, 0xf0, 0x44, 0x99, 0x61, 0xbd, 0xf0, 0xbe, - 0xf4, 0x1e, 0x6c, 0x72, 0x8a, 0x33, 0x0d, 0xa8, 0xa7, 0xe9, 0x16, 0xf1, 0x7d, 0xee, 0xb4, 0x22, - 0xa7, 0x62, 0xd6, 0xd7, 0x65, 0x5d, 0xcd, 0xa8, 0x07, 0xdf, 0x81, 0x0d, 0x2e, 0x31, 0x99, 0x5a, - 0x81, 0xe9, 0x5a, 0x54, 0x63, 0xb7, 0x37, 0x9f, 0x9f, 0x24, 0xb1, 0x65, 0xeb, 0x8c, 0x71, 0x1c, - 0x12, 0x98, 0x45, 0x3e, 0x6e, 0xc1, 0x6b, 0x5c, 0x6c, 0x44, 0x6d, 0xea, 0x91, 0x80, 0x6a, 0xf4, - 0x8b, 0x29, 0xb1, 0x7c, 0x8d, 0xd8, 0x86, 0x36, 0x26, 0xfe, 0x58, 0xde, 0x64, 0x0a, 0xf6, 0x33, - 0xb2, 0xa4, 0x5e, 0x61, 0xc4, 0x83, 0x90, 0xa7, 0x70, 0x5a, 0xc3, 0x36, 0x3e, 0x26, 0xfe, 0x18, - 0xef, 0xc1, 0x25, 0xae, 0xc5, 0x0f, 0x3c, 0xd3, 0x1e, 0x69, 0xfa, 0x98, 0xea, 0x8f, 0xb4, 0x69, - 0x30, 0xbc, 0x27, 0xbf, 0x92, 0x1c, 0x9f, 0x5b, 0xd8, 0xe7, 0x9c, 0x26, 0xa3, 0x9c, 0x04, 0xc3, - 0x7b, 0xb8, 0x0f, 0x15, 0xb6, 0x18, 0x13, 0xf3, 0x4b, 0xaa, 0x0d, 0x1d, 0x8f, 0x1f, 0x8d, 0xd5, - 0x25, 0xa9, 0x29, 0xe1, 0xc1, 0x7a, 0x37, 0x14, 0x38, 0x76, 0x0c, 0xba, 0x97, 0xef, 0xf7, 0x14, - 0xa5, 0xa5, 0x96, 0x23, 0x2d, 0x0f, 0x1c, 0x8f, 0x05, 0xd4, 0xc8, 0x89, 0x1d, 0x5c, 0x16, 0x01, - 0x35, 0x72, 0x22, 0xf7, 0xde, 0x81, 0x0d, 0x5d, 0x17, 0x73, 0x36, 0x75, 0x2d, 0xbc, 0x63, 0xf9, - 0x32, 0x4a, 0x39, 0x4b, 0xd7, 0x0f, 0x04, 0x21, 0x8c, 0x71, 0x1f, 0x7f, 0x08, 0x2f, 0xcf, 0x9c, - 0x95, 0x14, 0x5c, 0x5f, 0x98, 0xe5, 0xbc, 0xe8, 0x1d, 0xd8, 0x70, 0xcf, 0x16, 0x05, 0x71, 0x6a, - 0x44, 0xf7, 0x6c, 0x5e, 0xec, 0x03, 0xd8, 0x74, 0xc7, 0xee, 0xa2, 0xdc, 0xcd, 0xa4, 0x1c, 0x76, - 0xc7, 0xee, 0xbc, 0xe0, 0x5b, 0xfc, 0xc2, 0xed, 0x51, 0x9d, 0x04, 0xd4, 0x90, 0x2f, 0x27, 0xe9, - 0x89, 0x0e, 0xbc, 0x0b, 0x48, 0xd7, 0x35, 0x6a, 0x93, 0x53, 0x8b, 0x6a, 0xc4, 0xa3, 0x36, 0xf1, - 0xe5, 0xab, 0x49, 0x72, 0x55, 0xd7, 0x15, 0xde, 0xdb, 0xe0, 0x9d, 0xf8, 0x26, 0xac, 0x3b, 0xa7, - 0x0f, 0x75, 0x11, 0x92, 0x9a, 0xeb, 0xd1, 0xa1, 0xf9, 0x54, 0x7e, 0x93, 0xfb, 0x77, 0x8d, 0x75, - 0xf0, 0x80, 0xec, 0x71, 0x18, 0xdf, 0x00, 0xa4, 0xfb, 0x63, 0xe2, 0xb9, 0x3c, 0x27, 0xfb, 0x2e, - 0xd1, 0xa9, 0xfc, 0x96, 0xa0, 0x0a, 0xbc, 0x13, 0xc1, 0x6c, 0x4b, 0xf8, 0x4f, 0xcc, 0x61, 0x10, - 0x69, 0xbc, 0x2e, 0xb6, 0x04, 0xc7, 0x42, 0x6d, 0x3b, 0x80, 0x98, 0x2b, 0x52, 0x03, 0xef, 0x70, - 0x5a, 0xd5, 0x1d, 0xbb, 0xc9, 0x71, 0xdf, 0x80, 0x55, 0xc6, 0x9c, 0x0d, 0x7a, 0x43, 0x14, 0x64, - 0xee, 0x38, 0x31, 0xe2, 0x0f, 0x56, 0x1b, 0xd7, 0xf6, 0xa0, 0x92, 0x8c, 0x4f, 0x5c, 0x02, 0x11, - 0xa1, 0x48, 0x62, 0xc5, 0x4a, 0xb3, 0xdb, 0x62, 0x65, 0xc6, 0xe7, 0x0a, 0xca, 0xb0, 0x72, 0xe7, - 0xa8, 0x3d, 0x50, 0x34, 0xf5, 0xa4, 0x33, 0x68, 0x1f, 0x2b, 0x28, 0x9b, 0xa8, 0xab, 0x0f, 0x73, - 0xc5, 0xb7, 0xd1, 0xf5, 0xda, 0x37, 0x19, 0xa8, 0xa6, 0x2f, 0x4a, 0xf8, 0xff, 0xe1, 0x72, 0xf4, - 0xaa, 0xe1, 0xd3, 0x40, 0x7b, 0x62, 0x7a, 0x7c, 0xe3, 0x4c, 0x88, 0x38, 0xc4, 0xe2, 0xa5, 0xdb, - 0x0c, 0x59, 0x7d, 0x1a, 0x7c, 0x62, 0x7a, 0x6c, 0x5b, 0x4c, 0x48, 0x80, 0x8f, 0xe0, 0xaa, 0xed, - 0x68, 0x7e, 0x40, 0x6c, 0x83, 0x78, 0x86, 0x36, 0x7b, 0x4f, 0xd2, 0x88, 0xae, 0x53, 0xdf, 0x77, - 0xc4, 0x81, 0x15, 0x6b, 0x79, 0xd5, 0x76, 0xfa, 0x21, 0x79, 0x96, 0xc9, 0x1b, 0x21, 0x75, 0x2e, - 0xcc, 0xb2, 0xe7, 0x85, 0xd9, 0x2b, 0x50, 0x9a, 0x10, 0x57, 0xa3, 0x76, 0xe0, 0x9d, 0xf1, 0xf2, - 0xb8, 0xa8, 0x16, 0x27, 0xc4, 0x55, 0x58, 0xfb, 0x85, 0xdc, 0x52, 0x0e, 0x73, 0xc5, 0x22, 0x2a, - 0x1d, 0xe6, 0x8a, 0x25, 0x04, 0xb5, 0x7f, 0x64, 0xa1, 0x92, 0x2c, 0x97, 0xd9, 0xed, 0x43, 0xe7, - 0x27, 0x8b, 0xc4, 0x73, 0xcf, 0x1b, 0xdf, 0x5a, 0x5c, 0xd7, 0x9b, 0xec, 0xc8, 0xd9, 0x2b, 0x88, - 0x22, 0x56, 0x15, 0x92, 0xec, 0xb8, 0x67, 0xd9, 0x86, 0x8a, 0xa2, 0xa1, 0xa8, 0x86, 0x2d, 0x7c, - 0x00, 0x85, 0x87, 0x3e, 0xd7, 0x5d, 0xe0, 0xba, 0xdf, 0xfc, 0x76, 0xdd, 0x87, 0x7d, 0xae, 0xbc, - 0x74, 0xd8, 0xd7, 0x3a, 0x5d, 0xf5, 0xb8, 0x71, 0xa4, 0x86, 0xe2, 0xf8, 0x0a, 0xe4, 0x2c, 0xf2, - 0xe5, 0x59, 0xfa, 0x70, 0xe2, 0xd0, 0x45, 0x17, 0xe1, 0x0a, 0xe4, 0x9e, 0x50, 0xf2, 0x28, 0x7d, - 0x24, 0x70, 0xe8, 0x07, 0xdc, 0x0c, 0xbb, 0x90, 0xe7, 0xfe, 0xc2, 0x00, 0xa1, 0xc7, 0xd0, 0x4b, - 0xb8, 0x08, 0xb9, 0x66, 0x57, 0x65, 0x1b, 0x02, 0x41, 0x45, 0xa0, 0x5a, 0xaf, 0xad, 0x34, 0x15, - 0x94, 0xa9, 0xdd, 0x81, 0x82, 0x70, 0x02, 0xdb, 0x2c, 0xb1, 0x1b, 0xd0, 0x4b, 0x61, 0x33, 0xd4, - 0x21, 0x45, 0xbd, 0x27, 0xc7, 0xfb, 0x8a, 0x8a, 0x32, 0xe9, 0xa5, 0xce, 0xa1, 0x7c, 0xcd, 0x87, - 0x4a, 0xb2, 0x5e, 0x7e, 0x31, 0x77, 0xe1, 0xbf, 0x4a, 0x50, 0x4e, 0xd4, 0xbf, 0xac, 0x70, 0x21, - 0x96, 0xe5, 0x3c, 0xd1, 0x88, 0x65, 0x12, 0x3f, 0x0c, 0x0d, 0xe0, 0x50, 0x83, 0x21, 0x17, 0x5d, - 0xba, 0x17, 0xb4, 0x45, 0xf2, 0xa8, 0x50, 0xfb, 0xa3, 0x04, 0x68, 0xbe, 0x00, 0x9d, 0x33, 0x53, - 0xfa, 0x31, 0xcd, 0xac, 0xfd, 0x41, 0x82, 0x6a, 0xba, 0xea, 0x9c, 0x33, 0xef, 0xda, 0x8f, 0x6a, - 0xde, 0xdf, 0x33, 0xb0, 0x9a, 0xaa, 0x35, 0x2f, 0x6a, 0xdd, 0x17, 0xb0, 0x6e, 0x1a, 0x74, 0xe2, - 0x3a, 0x01, 0xb5, 0xf5, 0x33, 0xcd, 0xa2, 0x8f, 0xa9, 0x25, 0xd7, 0x78, 0xd2, 0xd8, 0xfd, 0xf6, - 0x6a, 0xb6, 0xde, 0x9e, 0xc9, 0x1d, 0x31, 0xb1, 0xbd, 0x8d, 0x76, 0x4b, 0x39, 0xee, 0x75, 0x07, - 0x4a, 0xa7, 0xf9, 0x99, 0x76, 0xd2, 0xf9, 0x59, 0xa7, 0xfb, 0x49, 0x47, 0x45, 0xe6, 0x1c, 0xed, - 0x07, 0xdc, 0xf6, 0x3d, 0x40, 0xf3, 0x46, 0xe1, 0xcb, 0xb0, 0xcc, 0x2c, 0xf4, 0x12, 0xde, 0x80, - 0xb5, 0x4e, 0x57, 0xeb, 0xb7, 0x5b, 0x8a, 0xa6, 0x3c, 0x78, 0xa0, 0x34, 0x07, 0x7d, 0xf1, 0x3e, - 0x11, 0xb3, 0x07, 0xa9, 0x0d, 0x5e, 0xfb, 0x7d, 0x16, 0x36, 0x96, 0x58, 0x82, 0x1b, 0xe1, 0xcd, - 0x42, 0x5c, 0x76, 0xde, 0xbd, 0x88, 0xf5, 0x75, 0x56, 0x10, 0xf4, 0x88, 0x17, 0x84, 0x17, 0x91, - 0x1b, 0xc0, 0xbc, 0x64, 0x07, 0xe6, 0xd0, 0xa4, 0x5e, 0xf8, 0x9c, 0x23, 0xae, 0x1b, 0x6b, 0x33, - 0x5c, 0xbc, 0xe8, 0xfc, 0x1f, 0x60, 0xd7, 0xf1, 0xcd, 0xc0, 0x7c, 0x4c, 0x35, 0xd3, 0x8e, 0xde, - 0x7e, 0xd8, 0xf5, 0x23, 0xa7, 0xa2, 0xa8, 0xa7, 0x6d, 0x07, 0x31, 0xdb, 0xa6, 0x23, 0x32, 0xc7, - 0x66, 0xc9, 0x3c, 0xab, 0xa2, 0xa8, 0x27, 0x66, 0x5f, 0x83, 0x8a, 0xe1, 0x4c, 0x59, 0x4d, 0x26, - 0x78, 0xec, 0xec, 0x90, 0xd4, 0xb2, 0xc0, 0x62, 0x4a, 0x58, 0x6d, 0xcf, 0x1e, 0x9d, 0x2a, 0x6a, - 0x59, 0x60, 0x82, 0x72, 0x1d, 0xd6, 0xc8, 0x68, 0xe4, 0x31, 0xe5, 0x91, 0x22, 0x71, 0x7f, 0xa8, - 0xc6, 0x30, 0x27, 0x6e, 0x1d, 0x42, 0x31, 0xf2, 0x03, 0x3b, 0xaa, 0x99, 0x27, 0x34, 0x57, 0x5c, - 0x8a, 0x33, 0x3b, 0x25, 0xb5, 0x68, 0x47, 0x9d, 0xd7, 0xa0, 0x62, 0xfa, 0xda, 0xec, 0x0d, 0x3d, - 0xb3, 0x9d, 0xd9, 0x29, 0xaa, 0x65, 0xd3, 0x8f, 0xdf, 0x1f, 0x6b, 0x5f, 0x65, 0xa0, 0x9a, 0xfe, - 0x06, 0x80, 0x5b, 0x50, 0xb4, 0x1c, 0x9d, 0xf0, 0xd0, 0x12, 0x1f, 0xa0, 0x76, 0x9e, 0xf3, 0xd9, - 0xa0, 0x7e, 0x14, 0xf2, 0xd5, 0x58, 0x72, 0xeb, 0x6f, 0x12, 0x14, 0x23, 0x18, 0x5f, 0x82, 0x9c, - 0x4b, 0x82, 0x31, 0x57, 0x97, 0xdf, 0xcf, 0x20, 0x49, 0xe5, 0x6d, 0x86, 0xfb, 0x2e, 0xb1, 0x79, - 0x08, 0x84, 0x38, 0x6b, 0xb3, 0x75, 0xb5, 0x28, 0x31, 0xf8, 0xe5, 0xc4, 0x99, 0x4c, 0xa8, 0x1d, - 0xf8, 0xd1, 0xba, 0x86, 0x78, 0x33, 0x84, 0xf1, 0x3b, 0xb0, 0x1e, 0x78, 0xc4, 0xb4, 0x52, 0xdc, - 0x1c, 0xe7, 0xa2, 0xa8, 0x23, 0x26, 0xef, 0xc1, 0x95, 0x48, 0xaf, 0x41, 0x03, 0xa2, 0x8f, 0xa9, - 0x31, 0x13, 0x2a, 0xf0, 0x47, 0x88, 0xcb, 0x21, 0xa1, 0x15, 0xf6, 0x47, 0xb2, 0xb5, 0x6f, 0x24, - 0x58, 0x8f, 0xae, 0x53, 0x46, 0xec, 0xac, 0x63, 0x00, 0x62, 0xdb, 0x4e, 0x90, 0x74, 0xd7, 0x62, - 0x28, 0x2f, 0xc8, 0xd5, 0x1b, 0xb1, 0x90, 0x9a, 0x50, 0xb0, 0x35, 0x01, 0x98, 0xf5, 0x9c, 0xeb, - 0xb6, 0xab, 0x50, 0x0e, 0x3f, 0xf0, 0xf0, 0xaf, 0x84, 0xe2, 0x02, 0x0e, 0x02, 0x62, 0xf7, 0x2e, - 0xbc, 0x09, 0xf9, 0x53, 0x3a, 0x32, 0xed, 0xf0, 0xd9, 0x56, 0x34, 0xa2, 0x67, 0x92, 0x5c, 0xfc, - 0x4c, 0xb2, 0xff, 0x5b, 0x09, 0x36, 0x74, 0x67, 0x32, 0x6f, 0xef, 0x3e, 0x9a, 0x7b, 0x05, 0xf0, - 0x3f, 0x96, 0x3e, 0xff, 0x68, 0x64, 0x06, 0xe3, 0xe9, 0x69, 0x5d, 0x77, 0x26, 0xbb, 0x23, 0xc7, - 0x22, 0xf6, 0x68, 0xf6, 0x99, 0x93, 0xff, 0xd1, 0xdf, 0x1d, 0x51, 0xfb, 0xdd, 0x91, 0x93, 0xf8, - 0xe8, 0x79, 0x7f, 0xf6, 0xf7, 0xbf, 0x92, 0xf4, 0xa7, 0x4c, 0xf6, 0xa0, 0xb7, 0xff, 0xe7, 0xcc, - 0xd6, 0x81, 0x18, 0xae, 0x17, 0xb9, 0x47, 0xa5, 0x43, 0x8b, 0xea, 0x6c, 0xca, 0xff, 0x0b, 0x00, - 0x00, 0xff, 0xff, 0x1a, 0x28, 0x25, 0x79, 0x42, 0x1d, 0x00, 0x00, +var fileDescriptor_e5baabe45344a177 = []byte{ + // 2589 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x8e, 0xdb, 0xc6, + 0x15, 0x0e, 0xf5, 0xb7, 0xd2, 0x91, 0x56, 0x3b, 0x3b, 0xbb, 0xb1, 0xe9, 0xcd, 0x8f, 0xd7, 0xca, + 0x8f, 0xd7, 0x4e, 0xac, 0x0d, 0x1c, 0xdb, 0x71, 0xd6, 0x45, 0x5a, 0xad, 0x44, 0x6f, 0xe4, 0xee, + 0x4a, 0x2a, 0xa5, 0x6d, 0x7e, 0x80, 0x82, 0x98, 0x25, 0x47, 0x12, 0x6d, 0x8a, 0x64, 0x48, 0xca, + 0xf6, 0x06, 0xbd, 0x30, 0xd0, 0xab, 0x5e, 0x15, 0xe8, 0x55, 0x51, 0x14, 0xbd, 0xe8, 0x4d, 0x80, + 0x3e, 0x40, 0x81, 0xde, 0xf5, 0x09, 0x0a, 0xe4, 0x0d, 0x8a, 0xb6, 0x40, 0xfb, 0x08, 0xbd, 0x2c, + 0x66, 0x86, 0xa4, 0x48, 0x49, 0x1b, 0x6f, 0x02, 0xc4, 0xb9, 0x92, 0xe6, 0x3b, 0xdf, 0x39, 0x73, + 0xe6, 0xcc, 0x99, 0x99, 0x33, 0x43, 0xd8, 0x1e, 0x39, 0xce, 0xc8, 0xa2, 0xbb, 0xae, 0xe7, 0x04, + 0xce, 0xc9, 0x74, 0xb8, 0x6b, 0x50, 0x5f, 0xf7, 0x4c, 0x37, 0x70, 0xbc, 0x3a, 0xc7, 0xf0, 0x9a, + 0x60, 0xd4, 0x23, 0x46, 0xed, 0x08, 0xd6, 0xef, 0x9b, 0x16, 0x6d, 0xc5, 0xc4, 0x3e, 0x0d, 0xf0, + 0x5d, 0xc8, 0x0d, 0x4d, 0x8b, 0xca, 0xd2, 0x76, 0x76, 0xa7, 0x7c, 0xf3, 0xcd, 0xfa, 0x9c, 0x52, + 0x3d, 0xad, 0xd1, 0x63, 0xb0, 0xca, 0x35, 0x6a, 0xff, 0xce, 0xc1, 0xc6, 0x12, 0x29, 0xc6, 0x90, + 0xb3, 0xc9, 0x84, 0x59, 0x94, 0x76, 0x4a, 0x2a, 0xff, 0x8f, 0x65, 0x58, 0x71, 0x89, 0xfe, 0x88, + 0x8c, 0xa8, 0x9c, 0xe1, 0x70, 0xd4, 0xc4, 0xaf, 0x03, 0x18, 0xd4, 0xa5, 0xb6, 0x41, 0x6d, 0xfd, + 0x54, 0xce, 0x6e, 0x67, 0x77, 0x4a, 0x6a, 0x02, 0xc1, 0xef, 0xc0, 0xba, 0x3b, 0x3d, 0xb1, 0x4c, + 0x5d, 0x4b, 0xd0, 0x60, 0x3b, 0xbb, 0x93, 0x57, 0x91, 0x10, 0xb4, 0x66, 0xe4, 0xab, 0xb0, 0xf6, + 0x84, 0x92, 0x47, 0x49, 0x6a, 0x99, 0x53, 0xab, 0x0c, 0x4e, 0x10, 0x9b, 0x50, 0x99, 0x50, 0xdf, + 0x27, 0x23, 0xaa, 0x05, 0xa7, 0x2e, 0x95, 0x73, 0x7c, 0xf4, 0xdb, 0x0b, 0xa3, 0x9f, 0x1f, 0x79, + 0x39, 0xd4, 0x1a, 0x9c, 0xba, 0x14, 0x37, 0xa0, 0x44, 0xed, 0xe9, 0x44, 0x58, 0xc8, 0x9f, 0x11, + 0x3f, 0xc5, 0x9e, 0x4e, 0xe6, 0xad, 0x14, 0x99, 0x5a, 0x68, 0x62, 0xc5, 0xa7, 0xde, 0x63, 0x53, + 0xa7, 0x72, 0x81, 0x1b, 0xb8, 0xba, 0x60, 0xa0, 0x2f, 0xe4, 0xf3, 0x36, 0x22, 0x3d, 0xdc, 0x84, + 0x12, 0x7d, 0x1a, 0x50, 0xdb, 0x37, 0x1d, 0x5b, 0x5e, 0xe1, 0x46, 0xde, 0x5a, 0x32, 0x8b, 0xd4, + 0x32, 0xe6, 0x4d, 0xcc, 0xf4, 0xf0, 0x1d, 0x58, 0x71, 0xdc, 0xc0, 0x74, 0x6c, 0x5f, 0x2e, 0x6e, + 0x4b, 0x3b, 0xe5, 0x9b, 0xaf, 0x2e, 0x4d, 0x84, 0xae, 0xe0, 0xa8, 0x11, 0x19, 0xb7, 0x01, 0xf9, + 0xce, 0xd4, 0xd3, 0xa9, 0xa6, 0x3b, 0x06, 0xd5, 0x4c, 0x7b, 0xe8, 0xc8, 0x25, 0x6e, 0xe0, 0xf2, + 0xe2, 0x40, 0x38, 0xb1, 0xe9, 0x18, 0xb4, 0x6d, 0x0f, 0x1d, 0xb5, 0xea, 0xa7, 0xda, 0xf8, 0x02, + 0x14, 0xfc, 0x53, 0x3b, 0x20, 0x4f, 0xe5, 0x0a, 0xcf, 0x90, 0xb0, 0x55, 0xfb, 0x6b, 0x01, 0xd6, + 0xce, 0x93, 0x62, 0xf7, 0x20, 0x3f, 0x64, 0xa3, 0x94, 0x33, 0xdf, 0x26, 0x06, 0x42, 0x27, 0x1d, + 0xc4, 0xc2, 0x77, 0x0c, 0x62, 0x03, 0xca, 0x36, 0xf5, 0x03, 0x6a, 0x88, 0x8c, 0xc8, 0x9e, 0x33, + 0xa7, 0x40, 0x28, 0x2d, 0xa6, 0x54, 0xee, 0x3b, 0xa5, 0xd4, 0xa7, 0xb0, 0x16, 0xbb, 0xa4, 0x79, + 0xc4, 0x1e, 0x45, 0xb9, 0xb9, 0xfb, 0x3c, 0x4f, 0xea, 0x4a, 0xa4, 0xa7, 0x32, 0x35, 0xb5, 0x4a, + 0x53, 0x6d, 0xdc, 0x02, 0x70, 0x6c, 0xea, 0x0c, 0x35, 0x83, 0xea, 0x96, 0x5c, 0x3c, 0x23, 0x4a, + 0x5d, 0x46, 0x59, 0x88, 0x92, 0x23, 0x50, 0xdd, 0xc2, 0x1f, 0xce, 0x52, 0x6d, 0xe5, 0x8c, 0x4c, + 0x39, 0x12, 0x8b, 0x6c, 0x21, 0xdb, 0x8e, 0xa1, 0xea, 0x51, 0x96, 0xf7, 0xd4, 0x08, 0x47, 0x56, + 0xe2, 0x4e, 0xd4, 0x9f, 0x3b, 0x32, 0x35, 0x54, 0x13, 0x03, 0x5b, 0xf5, 0x92, 0x4d, 0xfc, 0x06, + 0xc4, 0x80, 0xc6, 0xd3, 0x0a, 0xf8, 0x2e, 0x54, 0x89, 0xc0, 0x0e, 0x99, 0xd0, 0xad, 0x2f, 0xa1, + 0x9a, 0x0e, 0x0f, 0xde, 0x84, 0xbc, 0x1f, 0x10, 0x2f, 0xe0, 0x59, 0x98, 0x57, 0x45, 0x03, 0x23, + 0xc8, 0x52, 0xdb, 0xe0, 0xbb, 0x5c, 0x5e, 0x65, 0x7f, 0xf1, 0x4f, 0x66, 0x03, 0xce, 0xf2, 0x01, + 0xbf, 0xbd, 0x38, 0xa3, 0x29, 0xcb, 0xf3, 0xe3, 0xde, 0xfa, 0x00, 0x56, 0x53, 0x03, 0x38, 0x6f, + 0xd7, 0xb5, 0x5f, 0xc2, 0xcb, 0x4b, 0x4d, 0xe3, 0x4f, 0x61, 0x73, 0x6a, 0x9b, 0x76, 0x40, 0x3d, + 0xd7, 0xa3, 0x2c, 0x63, 0x45, 0x57, 0xf2, 0x7f, 0x56, 0xce, 0xc8, 0xb9, 0xe3, 0x24, 0x5b, 0x58, + 0x51, 0x37, 0xa6, 0x8b, 0xe0, 0xf5, 0x52, 0xf1, 0xbf, 0x2b, 0xe8, 0xd9, 0xb3, 0x67, 0xcf, 0x32, + 0xb5, 0xdf, 0x15, 0x60, 0x73, 0xd9, 0x9a, 0x59, 0xba, 0x7c, 0x2f, 0x40, 0xc1, 0x9e, 0x4e, 0x4e, + 0xa8, 0xc7, 0x83, 0x94, 0x57, 0xc3, 0x16, 0x6e, 0x40, 0xde, 0x22, 0x27, 0xd4, 0x92, 0x73, 0xdb, + 0xd2, 0x4e, 0xf5, 0xe6, 0x3b, 0xe7, 0x5a, 0x95, 0xf5, 0x43, 0xa6, 0xa2, 0x0a, 0x4d, 0xfc, 0x11, + 0xe4, 0xc2, 0x2d, 0x9a, 0x59, 0xb8, 0x7e, 0x3e, 0x0b, 0x6c, 0x2d, 0xa9, 0x5c, 0x0f, 0xbf, 0x02, + 0x25, 0xf6, 0x2b, 0x72, 0xa3, 0xc0, 0x7d, 0x2e, 0x32, 0x80, 0xe5, 0x05, 0xde, 0x82, 0x22, 0x5f, + 0x26, 0x06, 0x8d, 0x8e, 0xb6, 0xb8, 0xcd, 0x12, 0xcb, 0xa0, 0x43, 0x32, 0xb5, 0x02, 0xed, 0x31, + 0xb1, 0xa6, 0x94, 0x27, 0x7c, 0x49, 0xad, 0x84, 0xe0, 0xcf, 0x19, 0x86, 0x2f, 0x43, 0x59, 0xac, + 0x2a, 0xd3, 0x36, 0xe8, 0x53, 0xbe, 0x7b, 0xe6, 0x55, 0xb1, 0xd0, 0xda, 0x0c, 0x61, 0xdd, 0x3f, + 0xf4, 0x1d, 0x3b, 0x4a, 0x4d, 0xde, 0x05, 0x03, 0x78, 0xf7, 0x1f, 0xcc, 0x6f, 0xdc, 0xaf, 0x2d, + 0x1f, 0xde, 0x7c, 0x4e, 0xd5, 0xfe, 0x92, 0x81, 0x1c, 0xdf, 0x2f, 0xd6, 0xa0, 0x3c, 0xf8, 0xac, + 0xa7, 0x68, 0xad, 0xee, 0xf1, 0xfe, 0xa1, 0x82, 0x24, 0x5c, 0x05, 0xe0, 0xc0, 0xfd, 0xc3, 0x6e, + 0x63, 0x80, 0x32, 0x71, 0xbb, 0xdd, 0x19, 0xdc, 0xb9, 0x85, 0xb2, 0xb1, 0xc2, 0xb1, 0x00, 0x72, + 0x49, 0xc2, 0xfb, 0x37, 0x51, 0x1e, 0x23, 0xa8, 0x08, 0x03, 0xed, 0x4f, 0x95, 0xd6, 0x9d, 0x5b, + 0xa8, 0x90, 0x46, 0xde, 0xbf, 0x89, 0x56, 0xf0, 0x2a, 0x94, 0x38, 0xb2, 0xdf, 0xed, 0x1e, 0xa2, + 0x62, 0x6c, 0xb3, 0x3f, 0x50, 0xdb, 0x9d, 0x03, 0x54, 0x8a, 0x6d, 0x1e, 0xa8, 0xdd, 0xe3, 0x1e, + 0x82, 0xd8, 0xc2, 0x91, 0xd2, 0xef, 0x37, 0x0e, 0x14, 0x54, 0x8e, 0x19, 0xfb, 0x9f, 0x0d, 0x94, + 0x3e, 0xaa, 0xa4, 0xdc, 0x7a, 0xff, 0x26, 0x5a, 0x8d, 0xbb, 0x50, 0x3a, 0xc7, 0x47, 0xa8, 0x8a, + 0xd7, 0x61, 0x55, 0x74, 0x11, 0x39, 0xb1, 0x36, 0x07, 0xdd, 0xb9, 0x85, 0xd0, 0xcc, 0x11, 0x61, + 0x65, 0x3d, 0x05, 0xdc, 0xb9, 0x85, 0x70, 0xad, 0x09, 0x79, 0x9e, 0x5d, 0x18, 0x43, 0xf5, 0xb0, + 0xb1, 0xaf, 0x1c, 0x6a, 0xdd, 0xde, 0xa0, 0xdd, 0xed, 0x34, 0x0e, 0x91, 0x34, 0xc3, 0x54, 0xe5, + 0x67, 0xc7, 0x6d, 0x55, 0x69, 0xa1, 0x4c, 0x12, 0xeb, 0x29, 0x8d, 0x81, 0xd2, 0x42, 0xd9, 0x9a, + 0x0e, 0x9b, 0xcb, 0xf6, 0xc9, 0xa5, 0x2b, 0x23, 0x31, 0xc5, 0x99, 0x33, 0xa6, 0x98, 0xdb, 0x5a, + 0x98, 0xe2, 0x7f, 0x65, 0x60, 0x63, 0xc9, 0x59, 0xb1, 0xb4, 0x93, 0x1f, 0x43, 0x5e, 0xa4, 0xa8, + 0x38, 0x3d, 0xaf, 0x2d, 0x3d, 0x74, 0x78, 0xc2, 0x2e, 0x9c, 0xa0, 0x5c, 0x2f, 0x59, 0x41, 0x64, + 0xcf, 0xa8, 0x20, 0x98, 0x89, 0x85, 0x3d, 0xfd, 0x17, 0x0b, 0x7b, 0xba, 0x38, 0xf6, 0xee, 0x9c, + 0xe7, 0xd8, 0xe3, 0xd8, 0xb7, 0xdb, 0xdb, 0xf3, 0x4b, 0xf6, 0xf6, 0x7b, 0xb0, 0xbe, 0x60, 0xe8, + 0xdc, 0x7b, 0xec, 0xaf, 0x24, 0x90, 0xcf, 0x0a, 0xce, 0x73, 0x76, 0xba, 0x4c, 0x6a, 0xa7, 0xbb, + 0x37, 0x1f, 0xc1, 0x2b, 0x67, 0x4f, 0xc2, 0xc2, 0x5c, 0x7f, 0x25, 0xc1, 0x85, 0xe5, 0x95, 0xe2, + 0x52, 0x1f, 0x3e, 0x82, 0xc2, 0x84, 0x06, 0x63, 0x27, 0xaa, 0x96, 0xde, 0x5e, 0x72, 0x06, 0x33, + 0xf1, 0xfc, 0x64, 0x87, 0x5a, 0xc9, 0x43, 0x3c, 0x7b, 0x56, 0xb9, 0x27, 0xbc, 0x59, 0xf0, 0xf4, + 0xd7, 0x19, 0x78, 0x79, 0xa9, 0xf1, 0xa5, 0x8e, 0xbe, 0x06, 0x60, 0xda, 0xee, 0x34, 0x10, 0x15, + 0x91, 0xd8, 0x60, 0x4b, 0x1c, 0xe1, 0x9b, 0x17, 0xdb, 0x3c, 0xa7, 0x41, 0x2c, 0xcf, 0x72, 0x39, + 0x08, 0x88, 0x13, 0xee, 0xce, 0x1c, 0xcd, 0x71, 0x47, 0x5f, 0x3f, 0x63, 0xa4, 0x0b, 0x89, 0xf9, + 0x1e, 0x20, 0xdd, 0x32, 0xa9, 0x1d, 0x68, 0x7e, 0xe0, 0x51, 0x32, 0x31, 0xed, 0x11, 0x3f, 0x41, + 0x8a, 0x7b, 0xf9, 0x21, 0xb1, 0x7c, 0xaa, 0xae, 0x09, 0x71, 0x3f, 0x92, 0x32, 0x0d, 0x9e, 0x40, + 0x5e, 0x42, 0xa3, 0x90, 0xd2, 0x10, 0xe2, 0x58, 0xa3, 0xf6, 0xdb, 0x12, 0x94, 0x13, 0x75, 0x35, + 0xbe, 0x02, 0x95, 0x87, 0xe4, 0x31, 0xd1, 0xa2, 0xbb, 0x92, 0x88, 0x44, 0x99, 0x61, 0xbd, 0xf0, + 0xbe, 0xf4, 0x1e, 0x6c, 0x72, 0x8a, 0x33, 0x0d, 0xa8, 0xa7, 0xe9, 0x16, 0xf1, 0x7d, 0x1e, 0xb4, + 0x22, 0xa7, 0x62, 0x26, 0xeb, 0x32, 0x51, 0x33, 0x92, 0xe0, 0xdb, 0xb0, 0xc1, 0x35, 0x26, 0x53, + 0x2b, 0x30, 0x5d, 0x8b, 0x6a, 0xec, 0xf6, 0xe6, 0xf3, 0x93, 0x24, 0xf6, 0x6c, 0x9d, 0x31, 0x8e, + 0x42, 0x02, 0xf3, 0xc8, 0xc7, 0x2d, 0x78, 0x8d, 0xab, 0x8d, 0xa8, 0x4d, 0x3d, 0x12, 0x50, 0x8d, + 0x7e, 0x31, 0x25, 0x96, 0xaf, 0x11, 0xdb, 0xd0, 0xc6, 0xc4, 0x1f, 0xcb, 0x9b, 0xcc, 0xc0, 0x7e, + 0x46, 0x96, 0xd4, 0x4b, 0x8c, 0x78, 0x10, 0xf2, 0x14, 0x4e, 0x6b, 0xd8, 0xc6, 0xc7, 0xc4, 0x1f, + 0xe3, 0x3d, 0xb8, 0xc0, 0xad, 0xf8, 0x81, 0x67, 0xda, 0x23, 0x4d, 0x1f, 0x53, 0xfd, 0x91, 0x36, + 0x0d, 0x86, 0x77, 0xe5, 0x57, 0x92, 0xfd, 0x73, 0x0f, 0xfb, 0x9c, 0xd3, 0x64, 0x94, 0xe3, 0x60, + 0x78, 0x17, 0xf7, 0xa1, 0xc2, 0x26, 0x63, 0x62, 0x7e, 0x49, 0xb5, 0xa1, 0xe3, 0xf1, 0xa3, 0xb1, + 0xba, 0x64, 0x6b, 0x4a, 0x44, 0xb0, 0xde, 0x0d, 0x15, 0x8e, 0x1c, 0x83, 0xee, 0xe5, 0xfb, 0x3d, + 0x45, 0x69, 0xa9, 0xe5, 0xc8, 0xca, 0x7d, 0xc7, 0x63, 0x09, 0x35, 0x72, 0xe2, 0x00, 0x97, 0x45, + 0x42, 0x8d, 0x9c, 0x28, 0xbc, 0xb7, 0x61, 0x43, 0xd7, 0xc5, 0x98, 0x4d, 0x5d, 0x0b, 0xef, 0x58, + 0xbe, 0x8c, 0x52, 0xc1, 0xd2, 0xf5, 0x03, 0x41, 0x08, 0x73, 0xdc, 0xc7, 0x1f, 0xc2, 0xcb, 0xb3, + 0x60, 0x25, 0x15, 0xd7, 0x17, 0x46, 0x39, 0xaf, 0x7a, 0x1b, 0x36, 0xdc, 0xd3, 0x45, 0x45, 0x9c, + 0xea, 0xd1, 0x3d, 0x9d, 0x57, 0xfb, 0x00, 0x36, 0xdd, 0xb1, 0xbb, 0xa8, 0x77, 0x3d, 0xa9, 0x87, + 0xdd, 0xb1, 0x3b, 0xaf, 0xf8, 0x16, 0xbf, 0x70, 0x7b, 0x54, 0x27, 0x01, 0x35, 0xe4, 0x8b, 0x49, + 0x7a, 0x42, 0x80, 0x77, 0x01, 0xe9, 0xba, 0x46, 0x6d, 0x72, 0x62, 0x51, 0x8d, 0x78, 0xd4, 0x26, + 0xbe, 0x7c, 0x39, 0x49, 0xae, 0xea, 0xba, 0xc2, 0xa5, 0x0d, 0x2e, 0xc4, 0xd7, 0x61, 0xdd, 0x39, + 0x79, 0xa8, 0x8b, 0x94, 0xd4, 0x5c, 0x8f, 0x0e, 0xcd, 0xa7, 0xf2, 0x9b, 0x3c, 0xbe, 0x6b, 0x4c, + 0xc0, 0x13, 0xb2, 0xc7, 0x61, 0x7c, 0x0d, 0x90, 0xee, 0x8f, 0x89, 0xe7, 0xf2, 0x3d, 0xd9, 0x77, + 0x89, 0x4e, 0xe5, 0xb7, 0x04, 0x55, 0xe0, 0x9d, 0x08, 0x66, 0x4b, 0xc2, 0x7f, 0x62, 0x0e, 0x83, + 0xc8, 0xe2, 0x55, 0xb1, 0x24, 0x38, 0x16, 0x5a, 0xdb, 0x01, 0xc4, 0x42, 0x91, 0xea, 0x78, 0x87, + 0xd3, 0xaa, 0xee, 0xd8, 0x4d, 0xf6, 0xfb, 0x06, 0xac, 0x32, 0xe6, 0xac, 0xd3, 0x6b, 0xa2, 0x20, + 0x73, 0xc7, 0x89, 0x1e, 0x6f, 0xc1, 0x05, 0x46, 0x9a, 0xd0, 0x80, 0x18, 0x24, 0x20, 0x09, 0xf6, + 0xbb, 0x9c, 0xcd, 0xe2, 0x7e, 0x14, 0x0a, 0x53, 0x7e, 0x7a, 0xd3, 0x93, 0xd3, 0x38, 0xb3, 0x6e, + 0x08, 0x3f, 0x19, 0x16, 0xe5, 0xd6, 0xf7, 0x56, 0x74, 0xd7, 0xf6, 0xa0, 0x92, 0x4c, 0x7c, 0x5c, + 0x02, 0x91, 0xfa, 0x48, 0x62, 0x55, 0x50, 0xb3, 0xdb, 0x62, 0xf5, 0xcb, 0xe7, 0x0a, 0xca, 0xb0, + 0x3a, 0xea, 0xb0, 0x3d, 0x50, 0x34, 0xf5, 0xb8, 0x33, 0x68, 0x1f, 0x29, 0x28, 0x9b, 0x28, 0xd8, + 0x1f, 0xe4, 0x8a, 0x6f, 0xa3, 0xab, 0xb5, 0xaf, 0x33, 0x50, 0x4d, 0xdf, 0xc0, 0xf0, 0x8f, 0xe0, + 0x62, 0xf4, 0x5c, 0xe2, 0xd3, 0x40, 0x7b, 0x62, 0x7a, 0x7c, 0x45, 0x4e, 0x88, 0x38, 0x1d, 0xe3, + 0x9c, 0xd8, 0x0c, 0x59, 0x7d, 0x1a, 0x7c, 0x62, 0x7a, 0x6c, 0xbd, 0x4d, 0x48, 0x80, 0x0f, 0xe1, + 0xb2, 0xed, 0x68, 0x7e, 0x40, 0x6c, 0x83, 0x78, 0x86, 0x36, 0x7b, 0xa8, 0xd2, 0x88, 0xae, 0x53, + 0xdf, 0x77, 0xc4, 0x49, 0x18, 0x5b, 0x79, 0xd5, 0x76, 0xfa, 0x21, 0x79, 0x76, 0x44, 0x34, 0x42, + 0xea, 0x5c, 0xfe, 0x66, 0xcf, 0xca, 0xdf, 0x57, 0xa0, 0x34, 0x21, 0xae, 0x46, 0xed, 0xc0, 0x3b, + 0xe5, 0x75, 0x77, 0x51, 0x2d, 0x4e, 0x88, 0xab, 0xb0, 0xf6, 0x0b, 0xb9, 0xfe, 0x3c, 0xc8, 0x15, + 0x8b, 0xa8, 0xf4, 0x20, 0x57, 0x2c, 0x21, 0xa8, 0xfd, 0x33, 0x0b, 0x95, 0x64, 0x1d, 0xce, 0xae, + 0x35, 0x3a, 0x3f, 0xb2, 0x24, 0xbe, 0xa9, 0xbd, 0xf1, 0x8d, 0x55, 0x7b, 0xbd, 0xc9, 0xce, 0xb2, + 0xbd, 0x82, 0xa8, 0x8e, 0x55, 0xa1, 0xc9, 0xea, 0x08, 0x96, 0x6c, 0x54, 0x54, 0x23, 0x45, 0x35, + 0x6c, 0xe1, 0x03, 0x28, 0x3c, 0xf4, 0xb9, 0xed, 0x02, 0xb7, 0xfd, 0xe6, 0x37, 0xdb, 0x7e, 0xd0, + 0xe7, 0xc6, 0x4b, 0x0f, 0xfa, 0x5a, 0xa7, 0xab, 0x1e, 0x35, 0x0e, 0xd5, 0x50, 0x1d, 0x5f, 0x82, + 0x9c, 0x45, 0xbe, 0x3c, 0x4d, 0x9f, 0x7a, 0x1c, 0x3a, 0xef, 0x24, 0x5c, 0x82, 0xdc, 0x13, 0x4a, + 0x1e, 0xa5, 0xcf, 0x1a, 0x0e, 0x7d, 0x8f, 0x8b, 0x61, 0x17, 0xf2, 0x3c, 0x5e, 0x18, 0x20, 0x8c, + 0x18, 0x7a, 0x09, 0x17, 0x21, 0xd7, 0xec, 0xaa, 0x6c, 0x41, 0x20, 0xa8, 0x08, 0x54, 0xeb, 0xb5, + 0x95, 0xa6, 0x82, 0x32, 0xb5, 0xdb, 0x50, 0x10, 0x41, 0x60, 0x8b, 0x25, 0x0e, 0x03, 0x7a, 0x29, + 0x6c, 0x86, 0x36, 0xa4, 0x48, 0x7a, 0x7c, 0xb4, 0xaf, 0xa8, 0x28, 0x93, 0x9e, 0xea, 0x1c, 0xca, + 0xd7, 0x7c, 0xa8, 0x24, 0x0b, 0xf1, 0x17, 0x73, 0xc9, 0xfe, 0x9b, 0x04, 0xe5, 0x44, 0x61, 0xcd, + 0x2a, 0x22, 0x62, 0x59, 0xce, 0x13, 0x8d, 0x58, 0x26, 0xf1, 0xc3, 0xd4, 0x00, 0x0e, 0x35, 0x18, + 0x72, 0xde, 0xa9, 0x7b, 0x41, 0x4b, 0x24, 0x8f, 0x0a, 0xb5, 0x3f, 0x4a, 0x80, 0xe6, 0x2b, 0xdb, + 0x39, 0x37, 0xa5, 0x1f, 0xd2, 0xcd, 0xda, 0x1f, 0x24, 0xa8, 0xa6, 0xcb, 0xd9, 0x39, 0xf7, 0xae, + 0xfc, 0xa0, 0xee, 0xfd, 0x23, 0x03, 0xab, 0xa9, 0x22, 0xf6, 0xbc, 0xde, 0x7d, 0x01, 0xeb, 0xa6, + 0x41, 0x27, 0xae, 0x13, 0x50, 0x5b, 0x3f, 0xd5, 0x2c, 0xfa, 0x98, 0x5a, 0x72, 0x8d, 0x6f, 0x1a, + 0xbb, 0xdf, 0x5c, 0x26, 0xd7, 0xdb, 0x33, 0xbd, 0x43, 0xa6, 0xb6, 0xb7, 0xd1, 0x6e, 0x29, 0x47, + 0xbd, 0xee, 0x40, 0xe9, 0x34, 0x3f, 0xd3, 0x8e, 0x3b, 0x3f, 0xed, 0x74, 0x3f, 0xe9, 0xa8, 0xc8, + 0x9c, 0xa3, 0x7d, 0x8f, 0xcb, 0xbe, 0x07, 0x68, 0xde, 0x29, 0x7c, 0x11, 0x96, 0xb9, 0x85, 0x5e, + 0xc2, 0x1b, 0xb0, 0xd6, 0xe9, 0x6a, 0xfd, 0x76, 0x4b, 0xd1, 0x94, 0xfb, 0xf7, 0x95, 0xe6, 0xa0, + 0x2f, 0x1e, 0x3e, 0x62, 0xf6, 0x20, 0xb5, 0xc0, 0x6b, 0xbf, 0xcf, 0xc2, 0xc6, 0x12, 0x4f, 0x70, + 0x23, 0xbc, 0xb2, 0x88, 0x5b, 0xd4, 0x8d, 0xf3, 0x78, 0x5f, 0x67, 0x35, 0x43, 0x8f, 0x78, 0x41, + 0x78, 0xc3, 0xb9, 0x06, 0x2c, 0x4a, 0x76, 0x60, 0x0e, 0x4d, 0xea, 0x85, 0xef, 0x44, 0xe2, 0x1e, + 0xb3, 0x36, 0xc3, 0xc5, 0x53, 0xd1, 0xbb, 0x80, 0x5d, 0xc7, 0x37, 0x03, 0xf3, 0x31, 0xd5, 0x4c, + 0x3b, 0x7a, 0x54, 0x62, 0xf7, 0x9a, 0x9c, 0x8a, 0x22, 0x49, 0xdb, 0x0e, 0x62, 0xb6, 0x4d, 0x47, + 0x64, 0x8e, 0xcd, 0x36, 0xf3, 0xac, 0x8a, 0x22, 0x49, 0xcc, 0xbe, 0x02, 0x15, 0xc3, 0x99, 0xb2, + 0x62, 0x4f, 0xf0, 0xd8, 0xd9, 0x21, 0xa9, 0x65, 0x81, 0xc5, 0x94, 0xb0, 0x8c, 0x9f, 0xbd, 0x66, + 0x55, 0xd4, 0xb2, 0xc0, 0x04, 0xe5, 0x2a, 0xac, 0x91, 0xd1, 0xc8, 0x63, 0xc6, 0x23, 0x43, 0xe2, + 0x62, 0x52, 0x8d, 0x61, 0x4e, 0xdc, 0x7a, 0x00, 0xc5, 0x28, 0x0e, 0xec, 0xa8, 0x66, 0x91, 0xd0, + 0x5c, 0x71, 0xdb, 0xce, 0xec, 0x94, 0xd4, 0xa2, 0x1d, 0x09, 0xaf, 0x40, 0xc5, 0xf4, 0xb5, 0xd9, + 0xe3, 0x7c, 0x66, 0x3b, 0xb3, 0x53, 0x54, 0xcb, 0xa6, 0x1f, 0x3f, 0x6c, 0xd6, 0xbe, 0xca, 0x40, + 0x35, 0xfd, 0x71, 0x01, 0xb7, 0xa0, 0x68, 0x39, 0x3a, 0xe1, 0xa9, 0x25, 0xbe, 0x6c, 0xed, 0x3c, + 0xe7, 0x7b, 0x44, 0xfd, 0x30, 0xe4, 0xab, 0xb1, 0xe6, 0xd6, 0xdf, 0x25, 0x28, 0x46, 0x30, 0xbe, + 0x00, 0x39, 0x97, 0x04, 0x63, 0x6e, 0x2e, 0xbf, 0x9f, 0x41, 0x92, 0xca, 0xdb, 0x0c, 0xf7, 0x5d, + 0x62, 0xf3, 0x14, 0x08, 0x71, 0xd6, 0x66, 0xf3, 0x6a, 0x51, 0x62, 0xf0, 0x5b, 0x8f, 0x33, 0x99, + 0x50, 0x3b, 0xf0, 0xa3, 0x79, 0x0d, 0xf1, 0x66, 0x08, 0xe3, 0x77, 0x60, 0x3d, 0xf0, 0x88, 0x69, + 0xa5, 0xb8, 0x39, 0xce, 0x45, 0x91, 0x20, 0x26, 0xef, 0xc1, 0xa5, 0xc8, 0xae, 0x41, 0x03, 0xa2, + 0x8f, 0xa9, 0x31, 0x53, 0x2a, 0xf0, 0xd7, 0x8d, 0x8b, 0x21, 0xa1, 0x15, 0xca, 0x23, 0xdd, 0xda, + 0xd7, 0x12, 0xac, 0x47, 0xf7, 0x34, 0x23, 0x0e, 0xd6, 0x11, 0x00, 0xb1, 0x6d, 0x27, 0x48, 0x86, + 0x6b, 0x31, 0x95, 0x17, 0xf4, 0xea, 0x8d, 0x58, 0x49, 0x4d, 0x18, 0xd8, 0x9a, 0x00, 0xcc, 0x24, + 0x67, 0x86, 0xed, 0x32, 0x94, 0xc3, 0x2f, 0x47, 0xfc, 0xf3, 0xa3, 0xb8, 0xd9, 0x83, 0x80, 0xd8, + 0x85, 0x0e, 0x6f, 0x42, 0xfe, 0x84, 0x8e, 0x4c, 0x3b, 0x7c, 0x0f, 0x16, 0x8d, 0xe8, 0xfd, 0x25, + 0x17, 0xbf, 0xbf, 0xec, 0xff, 0x46, 0x82, 0x0d, 0xdd, 0x99, 0xcc, 0xfb, 0xbb, 0x8f, 0xe6, 0x9e, + 0x17, 0xfc, 0x8f, 0xa5, 0xcf, 0x3f, 0x1a, 0x99, 0xc1, 0x78, 0x7a, 0x52, 0xd7, 0x9d, 0xc9, 0xee, + 0xc8, 0xb1, 0x88, 0x3d, 0x9a, 0x7d, 0x3f, 0xe5, 0x7f, 0xf4, 0x1b, 0x23, 0x6a, 0xdf, 0x18, 0x39, + 0x89, 0xaf, 0xa9, 0xf7, 0x66, 0x7f, 0xff, 0x27, 0x49, 0x7f, 0xca, 0x64, 0x0f, 0x7a, 0xfb, 0x7f, + 0xce, 0x6c, 0x1d, 0x88, 0xee, 0x7a, 0x51, 0x78, 0x54, 0x3a, 0xb4, 0xa8, 0xce, 0x86, 0xfc, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xe8, 0xef, 0xc4, 0x9b, 0x1d, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto 2018-11-22 20:53:18.000000000 +0000 @@ -417,6 +417,17 @@ // determining the namespace. optional string php_namespace = 41; + + // 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. + optional string php_metadata_namespace = 44; + + // 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. + optional string ruby_package = 45; + // The parser stores options it doesn't recognize here. // See the documentation for the "Options" section above. repeated UninterpretedOption uninterpreted_option = 999; diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/generator/generator.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/generator/generator.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/generator/generator.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/generator/generator.go 2018-11-22 20:53:18.000000000 +0000 @@ -43,6 +43,7 @@ "crypto/sha256" "encoding/hex" "fmt" + "go/ast" "go/build" "go/parser" "go/printer" @@ -271,7 +272,6 @@ // This is used for supporting public imports. exported map[Object][]symbol - fingerprint string // Fingerprint of this file's contents. importPath GoImportPath // Import path of this file's package. packageName GoPackageName // Name of this file's Go package. @@ -282,8 +282,8 @@ // to the compressed bytes of this descriptor. It is not exported, so // it is only valid inside the generated package. func (d *FileDescriptor) VarName() string { - name := strings.Map(badToUnderscore, baseName(d.GetName())) - return fmt.Sprintf("fileDescriptor_%s_%s", name, d.fingerprint) + h := sha256.Sum256([]byte(d.GetName())) + return fmt.Sprintf("fileDescriptor_%s", hex.EncodeToString(h[:8])) } // goPackageOption interprets the file's go_package option. @@ -340,7 +340,7 @@ type symbol interface { // GenerateAlias should generate an appropriate alias // for the symbol from the named package. - GenerateAlias(g *Generator, pkg GoPackageName) + GenerateAlias(g *Generator, filename string, pkg GoPackageName) } type messageSymbol struct { @@ -356,7 +356,8 @@ genType bool // whether typ contains a generated type (message/group/enum) } -func (ms *messageSymbol) GenerateAlias(g *Generator, pkg GoPackageName) { +func (ms *messageSymbol) GenerateAlias(g *Generator, filename string, pkg GoPackageName) { + g.P("// ", ms.sym, " from public import ", filename) g.P("type ", ms.sym, " = ", pkg, ".", ms.sym) for _, name := range ms.oneofTypes { g.P("type ", name, " = ", pkg, ".", name) @@ -368,8 +369,9 @@ proto3 bool // Whether this came from a proto3 file. } -func (es enumSymbol) GenerateAlias(g *Generator, pkg GoPackageName) { +func (es enumSymbol) GenerateAlias(g *Generator, filename string, pkg GoPackageName) { s := es.name + g.P("// ", s, " from public import ", filename) g.P("type ", s, " = ", pkg, ".", s) g.P("var ", s, "_name = ", pkg, ".", s, "_name") g.P("var ", s, "_value = ", pkg, ".", s, "_value") @@ -381,7 +383,7 @@ cast string // if non-empty, a type cast is required (used for enums) } -func (cs constOrVarSymbol) GenerateAlias(g *Generator, pkg GoPackageName) { +func (cs constOrVarSymbol) GenerateAlias(g *Generator, filename string, pkg GoPackageName) { v := string(pkg) + "." + cs.sym if cs.cast != "" { v = cs.cast + "(" + v + ")" @@ -418,6 +420,7 @@ packageNames map[GoImportPath]GoPackageName // Imported package names in the current file. usedPackages map[GoImportPath]bool // Packages used in current file. usedPackageNames map[GoPackageName]bool // Package names used in the current file. + addedImports map[GoImportPath]bool // Additional imports to emit. typeNameToObject map[string]Object // Key is a fully-qualified name in input syntax. init []string // Lines to emit in the init function. indent string @@ -532,7 +535,7 @@ return name } name := cleanPackageName(baseName(string(importPath))) - for i, orig := 1, name; g.usedPackageNames[name]; i++ { + for i, orig := 1, name; g.usedPackageNames[name] || isGoPredeclaredIdentifier[string(name)]; i++ { name = orig + GoPackageName(strconv.Itoa(i)) } g.packageNames[importPath] = name @@ -540,6 +543,13 @@ return name } +// AddImport adds a package to the generated file's import section. +// It returns the name used for the package. +func (g *Generator) AddImport(importPath GoImportPath) GoPackageName { + g.addedImports[importPath] = true + return g.GoPackageName(importPath) +} + var globalPackageNames = map[GoPackageName]bool{ "fmt": true, "math": true, @@ -585,9 +595,51 @@ "var": true, } +var isGoPredeclaredIdentifier = map[string]bool{ + "append": true, + "bool": true, + "byte": true, + "cap": true, + "close": true, + "complex": true, + "complex128": true, + "complex64": true, + "copy": true, + "delete": true, + "error": true, + "false": true, + "float32": true, + "float64": true, + "imag": true, + "int": true, + "int16": true, + "int32": true, + "int64": true, + "int8": true, + "iota": true, + "len": true, + "make": true, + "new": true, + "nil": true, + "panic": true, + "print": true, + "println": true, + "real": true, + "recover": true, + "rune": true, + "string": true, + "true": true, + "uint": true, + "uint16": true, + "uint32": true, + "uint64": true, + "uint8": true, + "uintptr": true, +} + func cleanPackageName(name string) GoPackageName { name = strings.Map(badToUnderscore, name) - // Identifier must not be keyword: insert _. + // Identifier must not be keyword or predeclared identifier: insert _. if isGoKeyword[name] { name = "_" + name } @@ -724,27 +776,10 @@ if fd == nil { g.Fail("could not find file named", fileName) } - fingerprint, err := fingerprintProto(fd.FileDescriptorProto) - if err != nil { - g.Error(err) - } - fd.fingerprint = fingerprint g.genFiles = append(g.genFiles, fd) } } -// fingerprintProto returns a fingerprint for a message. -// The fingerprint is intended to prevent conflicts between generated fileds, -// not to provide cryptographic security. -func fingerprintProto(m proto.Message) (string, error) { - b, err := proto.Marshal(m) - if err != nil { - return "", err - } - h := sha256.Sum256(b) - return hex.EncodeToString(h[:8]), nil -} - // Scan the descriptors in this file. For each one, build the slice of nested descriptors func (g *Generator) buildNestedDescriptors(descs []*Descriptor) { for _, desc := range descs { @@ -938,39 +973,6 @@ if !ok { g.Fail("can't find object with type", typeName) } - - // If the file of this object isn't a direct dependency of the current file, - // or in the current file, then this object has been publicly imported into - // a dependency of the current file. - // We should return the ImportedDescriptor object for it instead. - direct := *o.File().Name == *g.file.Name - if !direct { - for _, dep := range g.file.Dependency { - if *g.fileByName(dep).Name == *o.File().Name { - direct = true - break - } - } - } - if !direct { - found := false - Loop: - for _, dep := range g.file.Dependency { - df := g.fileByName(*g.fileByName(dep).Name) - for _, td := range df.imp { - if td.o == o { - // Found it! - o = td - found = true - break Loop - } - } - } - if !found { - log.Printf("protoc-gen-go: WARNING: failed finding publicly imported dependency for %v, used in %v", typeName, *g.file.Name) - } - } - return o } @@ -1124,6 +1126,7 @@ g.usedPackages = make(map[GoImportPath]bool) g.packageNames = make(map[GoImportPath]GoPackageName) g.usedPackageNames = make(map[GoPackageName]bool) + g.addedImports = make(map[GoImportPath]bool) for name := range globalPackageNames { g.usedPackageNames[name] = true } @@ -1152,12 +1155,11 @@ g.generateExtension(ext) } g.generateInitFunction() + g.generateFileDescriptor(file) // Run the plugins before the imports so we know which imports are necessary. g.runPlugins(file) - g.generateFileDescriptor(file) - // Generate header and imports last, though they appear first in the output. rem := g.Buffer remAnno := g.annotations @@ -1183,7 +1185,7 @@ // make a copy independent of g; we'll need it after Reset. original = append([]byte(nil), original...) } - ast, err := parser.ParseFile(fset, "", original, parser.ParseComments) + fileAST, err := parser.ParseFile(fset, "", original, parser.ParseComments) if err != nil { // Print out the bad code with line numbers. // This should never happen in practice, but it can while changing generated code, @@ -1195,8 +1197,9 @@ } g.Fail("bad Go source code was generated:", err.Error(), "\n"+src.String()) } + ast.SortImports(fset, fileAST) g.Reset() - err = (&printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}).Fprint(g, fset, ast) + err = (&printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}).Fprint(g, fset, fileAST) if err != nil { g.Fail("generated Go source code could not be reformatted:", err.Error()) } @@ -1225,28 +1228,10 @@ g.P("// source: ", g.file.Name) } g.P() - - importPath, _, _ := g.file.goPackageOption() - if importPath == "" { - g.P("package ", g.file.packageName) - } else { - g.P("package ", g.file.packageName, " // import ", GoImportPath(g.ImportPrefix)+importPath) - } + g.PrintComments(strconv.Itoa(packagePath)) + g.P() + g.P("package ", g.file.packageName) g.P() - - if loc, ok := g.file.comments[strconv.Itoa(packagePath)]; ok { - g.P("/*") - // not using g.PrintComments because this is a /* */ comment block. - text := strings.TrimSuffix(loc.GetLeadingComments(), "\n") - for _, line := range strings.Split(text, "\n") { - line = strings.TrimPrefix(line, " ") - // ensure we don't escape from the block comment - line = strings.Replace(line, "*/", "* /", -1) - g.P(line) - } - g.P("*/") - g.P() - } } // deprecationComment is the standard comment added to deprecated @@ -1277,7 +1262,7 @@ w := new(bytes.Buffer) nl := "" for _, line := range strings.Split(strings.TrimSuffix(loc.GetLeadingComments(), "\n"), "\n") { - fmt.Fprintf(w, "%s// %s", nl, strings.TrimPrefix(line, " ")) + fmt.Fprintf(w, "%s//%s", nl, line) nl = "\n" } return w.String(), true @@ -1299,17 +1284,7 @@ // Generate the imports func (g *Generator) generateImports() { - // We almost always need a proto import. Rather than computing when we - // do, which is tricky when there's a plugin, just import it and - // reference it later. The same argument applies to the fmt and math packages. - g.P("import "+g.Pkg["proto"]+" ", GoImportPath(g.ImportPrefix)+"github.com/golang/protobuf/proto") - g.P("import " + g.Pkg["fmt"] + ` "fmt"`) - g.P("import " + g.Pkg["math"] + ` "math"`) - var ( - imports = make(map[GoImportPath]bool) - strongImports = make(map[GoImportPath]bool) - importPaths []string - ) + imports := make(map[GoImportPath]GoPackageName) for i, s := range g.file.Dependency { fd := g.fileByName(s) importPath := fd.importPath @@ -1317,32 +1292,37 @@ if importPath == g.file.importPath { continue } - if !imports[importPath] { - importPaths = append(importPaths, string(importPath)) - } - imports[importPath] = true - if !g.weak(int32(i)) { - strongImports[importPath] = true + // Do not import weak imports. + if g.weak(int32(i)) { + continue } - } - sort.Strings(importPaths) - for i := range importPaths { - importPath := GoImportPath(importPaths[i]) - packageName := g.GoPackageName(importPath) - fullPath := GoImportPath(g.ImportPrefix) + importPath - // Skip weak imports. - if !strongImports[importPath] { - g.P("// skipping weak import ", packageName, " ", fullPath) + // Do not import a package twice. + if _, ok := imports[importPath]; ok { continue } // We need to import all the dependencies, even if we don't reference them, // because other code and tools depend on having the full transitive closure // of protocol buffer types in the binary. + packageName := g.GoPackageName(importPath) if _, ok := g.usedPackages[importPath]; !ok { packageName = "_" } - g.P("import ", packageName, " ", fullPath) + imports[importPath] = packageName + } + for importPath := range g.addedImports { + imports[importPath] = g.GoPackageName(importPath) + } + // We almost always need a proto import. Rather than computing when we + // do, which is tricky when there's a plugin, just import it and + // reference it later. The same argument applies to the fmt and math packages. + g.P("import (") + g.P(g.Pkg["fmt"] + ` "fmt"`) + g.P(g.Pkg["math"] + ` "math"`) + g.P(g.Pkg["proto"]+" ", GoImportPath(g.ImportPrefix)+"github.com/golang/protobuf/proto") + for importPath, packageName := range imports { + g.P(packageName, " ", GoImportPath(g.ImportPrefix)+importPath) } + g.P(")") g.P() // TODO: may need to worry about uniqueness across plugins for _, p := range plugins { @@ -1357,24 +1337,19 @@ } func (g *Generator) generateImported(id *ImportedDescriptor) { - tn := id.TypeName() - sn := tn[len(tn)-1] df := id.o.File() filename := *df.Name if df.importPath == g.file.importPath { // Don't generate type aliases for files in the same Go package as this one. - g.P("// Ignoring public import of ", sn, " from ", filename) - g.P() return } if !supportTypeAliases { g.Fail(fmt.Sprintf("%s: public imports require at least go1.9", filename)) } - g.P("// ", sn, " from public import ", filename) g.usedPackages[df.importPath] = true for _, sym := range df.exported[id.o] { - sym.GenerateAlias(g, g.GoPackageName(df.importPath)) + sym.GenerateAlias(g, filename, g.GoPackageName(df.importPath)) } g.P() @@ -1410,6 +1385,7 @@ g.file.addExport(enum, constOrVarSymbol{name, "const", ccTypeName}) } g.P(")") + g.P() g.P("var ", ccTypeName, "_name = map[int32]string{") generated := make(map[int32]bool) // avoid duplicate values for _, e := range enum.Value { @@ -1421,11 +1397,13 @@ generated[*e.Number] = true } g.P("}") + g.P() g.P("var ", ccTypeName, "_value = map[string]int32{") for _, e := range enum.Value { g.P(strconv.Quote(*e.Name), ": ", e.Number, ",") } g.P("}") + g.P() if !enum.proto3() { g.P("func (x ", ccTypeName, ") Enum() *", ccTypeName, " {") @@ -1433,11 +1411,13 @@ g.P("*p = x") g.P("return p") g.P("}") + g.P() } g.P("func (x ", ccTypeName, ") String() string {") g.P("return ", g.Pkg["proto"], ".EnumName(", ccTypeName, "_name, int32(x))") g.P("}") + g.P() if !enum.proto3() { g.P("func (x *", ccTypeName, ") UnmarshalJSON(data []byte) error {") @@ -1448,6 +1428,7 @@ g.P("*x = ", ccTypeName, "(value)") g.P("return nil") g.P("}") + g.P() } var indexes []string @@ -1459,11 +1440,13 @@ g.P("func (", ccTypeName, ") EnumDescriptor() ([]byte, []int) {") g.P("return ", g.file.VarName(), ", []int{", strings.Join(indexes, ", "), "}") g.P("}") + g.P() if enum.file.GetPackage() == "google.protobuf" && enum.GetName() == "NullValue" { g.P("func (", ccTypeName, `) XXX_WellKnownType() string { return "`, enum.GetName(), `" }`) + g.P() } - g.P() + g.generateEnumRegistration(enum) } // The tag is a string like "varint,2,opt,name=fieldname,def=7" that @@ -1520,6 +1503,18 @@ g.Fail("unknown enum type", CamelCaseSlice(obj.TypeName())) } defaultValue = enum.integerValueAsString(defaultValue) + case descriptor.FieldDescriptorProto_TYPE_FLOAT: + if def := defaultValue; def != "inf" && def != "-inf" && def != "nan" { + if f, err := strconv.ParseFloat(defaultValue, 32); err == nil { + defaultValue = fmt.Sprint(float32(f)) + } + } + case descriptor.FieldDescriptorProto_TYPE_DOUBLE: + if def := defaultValue; def != "inf" && def != "-inf" && def != "nan" { + if f, err := strconv.ParseFloat(defaultValue, 64); err == nil { + defaultValue = fmt.Sprint(f) + } + } } defaultValue = ",def=" + defaultValue } @@ -1557,7 +1552,7 @@ name = name[i+1:] } } - if json := field.GetJsonName(); json != "" && json != name { + if json := field.GetJsonName(); field.Extendee == nil && json != "" && json != name { // TODO: escaping might be needed, in which case // perhaps this should be in its own "json" tag. name += ",json=" + json @@ -1661,11 +1656,16 @@ } func (g *Generator) RecordTypeUse(t string) { - if _, ok := g.typeNameToObject[t]; ok { - // Call ObjectNamed to get the true object to record the use. - obj := g.ObjectNamed(t) - g.usedPackages[obj.GoImportPath()] = true + if _, ok := g.typeNameToObject[t]; !ok { + return } + importPath := g.ObjectNamed(t).GoImportPath() + if importPath == g.outputImportPath { + // Don't record use of objects in our package. + return + } + g.AddImport(importPath) + g.usedPackages[importPath] = true } // Method names that may be generated. Fields with these names get an @@ -1765,7 +1765,7 @@ // oneofField - field containing list of subfields: // - oneofSubField - a field within the oneof -// msgCtx contais the context for the generator functions. +// msgCtx contains the context for the generator functions. type msgCtx struct { goName string // Go struct name of the message, e.g. MessageName message *Descriptor // The descriptor for the message @@ -1869,6 +1869,7 @@ fieldNumber int // Actual field number, as defined in proto, e.g. 12 getterDef string // Default for getters, e.g. "nil", `""` or "Default_MessageType_FieldName" protoDef string // Default value as defined in the proto file, e.g "yoshi" or "5" + deprecated string // Deprecation comment, if any. } // wireTypeName returns a textual wire type, needed for oneof sub fields in generated code. @@ -2138,6 +2139,9 @@ g.P() // Getters for each oneof for _, sf := range f.subFields { + if sf.deprecated != "" { + g.P(sf.deprecated) + } g.P("func (m *", mc.goName, ") ", Annotate(mc.message.file, sf.fullPath, sf.getterName), "() "+sf.goType+" {") g.P("if x, ok := m.", f.getterName, "().(*", sf.oneofTypeName, "); ok {") g.P("return x.", sf.goName) @@ -2215,6 +2219,14 @@ def = "float32(" + def + ")" } kind = "var " + case df.getProtoType() == descriptor.FieldDescriptorProto_TYPE_FLOAT: + if f, err := strconv.ParseFloat(def, 32); err == nil { + def = fmt.Sprint(float32(f)) + } + case df.getProtoType() == descriptor.FieldDescriptorProto_TYPE_DOUBLE: + if f, err := strconv.ParseFloat(def, 64); err == nil { + def = fmt.Sprint(f) + } case df.getProtoType() == descriptor.FieldDescriptorProto_TYPE_ENUM: // Must be an enum. Need to construct the prefixed name. obj := g.ObjectNamed(df.getProtoTypeName()) @@ -2386,25 +2398,16 @@ g.P("func (*", mc.goName, ") Descriptor() ([]byte, []int) {") g.P("return ", g.file.VarName(), ", []int{", strings.Join(indexes, ", "), "}") g.P("}") + g.P() // TODO: Revisit the decision to use a XXX_WellKnownType method // if we change proto.MessageName to work with multiple equivalents. if mc.message.file.GetPackage() == "google.protobuf" && wellKnownTypes[mc.message.GetName()] { g.P("func (*", mc.goName, `) XXX_WellKnownType() string { return "`, mc.message.GetName(), `" }`) + g.P() } // Extension support methods if len(mc.message.ExtensionRange) > 0 { - // message_set_wire_format only makes sense when extensions are defined. - if opts := mc.message.Options; opts != nil && opts.GetMessageSetWireFormat() { - g.P() - g.P("func (m *", mc.goName, ") MarshalJSON() ([]byte, error) {") - g.P("return ", g.Pkg["proto"], ".MarshalMessageSetJSON(&m.XXX_InternalExtensions)") - g.P("}") - g.P("func (m *", mc.goName, ") UnmarshalJSON(buf []byte) error {") - g.P("return ", g.Pkg["proto"], ".UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions)") - g.P("}") - } - g.P() g.P("var extRange_", mc.goName, " = []", g.Pkg["proto"], ".ExtensionRange{") for _, r := range mc.message.ExtensionRange { @@ -2415,6 +2418,7 @@ g.P("func (*", mc.goName, ") ExtensionRangeArray() []", g.Pkg["proto"], ".ExtensionRange {") g.P("return extRange_", mc.goName) g.P("}") + g.P() } // TODO: It does not scale to keep adding another method for every @@ -2432,8 +2436,8 @@ g.P("return xxx_messageInfo_", mc.goName, ".Marshal(b, m, deterministic)") g.P("}") - g.P("func (dst *", mc.goName, ") XXX_Merge(src ", g.Pkg["proto"], ".Message) {") - g.P("xxx_messageInfo_", mc.goName, ".Merge(dst, src)") + g.P("func (m *", mc.goName, ") XXX_Merge(src ", g.Pkg["proto"], ".Message) {") + g.P("xxx_messageInfo_", mc.goName, ".Merge(m, src)") g.P("}") g.P("func (m *", mc.goName, ") XXX_Size() int {") // avoid name clash with "Size" field in some message @@ -2564,6 +2568,11 @@ } } + fieldDeprecated := "" + if field.GetOptions().GetDeprecated() { + fieldDeprecated = deprecationComment + } + dvalue := g.getterDefault(field, goTypeName) if oneof { tname := goTypeName + "_" + fieldName @@ -2607,17 +2616,13 @@ getterDef: dvalue, protoDef: field.GetDefaultValue(), oneofTypeName: tname, + deprecated: fieldDeprecated, } oneofField.subFields = append(oneofField.subFields, &sf) g.RecordTypeUse(field.GetTypeName()) continue } - fieldDeprecated := "" - if field.GetOptions().GetDeprecated() { - fieldDeprecated = deprecationComment - } - fieldFullPath := fmt.Sprintf("%s,%d,%d", message.path, messageFieldPath, i) c, ok := g.makeComments(fieldFullPath) if ok { @@ -2663,26 +2668,23 @@ g.generateOneofFuncs(mc, topLevelFields) g.P() - if !message.group { - - var oneofTypes []string - for _, f := range topLevelFields { - if of, ok := f.(*oneofField); ok { - for _, osf := range of.subFields { - oneofTypes = append(oneofTypes, osf.oneofTypeName) - } + var oneofTypes []string + for _, f := range topLevelFields { + if of, ok := f.(*oneofField); ok { + for _, osf := range of.subFields { + oneofTypes = append(oneofTypes, osf.oneofTypeName) } } + } - opts := message.Options - ms := &messageSymbol{ - sym: goTypeName, - hasExtensions: len(message.ExtensionRange) > 0, - isMessageSet: opts != nil && opts.GetMessageSetWireFormat(), - oneofTypes: oneofTypes, - } - g.file.addExport(message, ms) + opts := message.Options + ms := &messageSymbol{ + sym: goTypeName, + hasExtensions: len(message.ExtensionRange) > 0, + isMessageSet: opts != nil && opts.GetMessageSetWireFormat(), + oneofTypes: oneofTypes, } + g.file.addExport(message, ms) for _, ext := range message.ext { g.generateExtension(ext) @@ -2811,10 +2813,8 @@ // In addition, the situation for when to apply this special case is implemented // differently in other languages: // https://github.com/google/protobuf/blob/aff10976/src/google/protobuf/text_format.cc#L1560 - mset := false if extDesc.GetOptions().GetMessageSetWireFormat() && typeName[len(typeName)-1] == "message_set_extension" { typeName = typeName[:len(typeName)-1] - mset = true } // For text formatting, the package must be exactly what the .proto file declares, @@ -2835,26 +2835,12 @@ g.P("}") g.P() - if mset { - // Generate a bit more code to register with message_set.go. - g.addInitf("%s.RegisterMessageSetType((%s)(nil), %d, %q)", g.Pkg["proto"], fieldType, *field.Number, extName) - } + g.addInitf("%s.RegisterExtension(%s)", g.Pkg["proto"], ext.DescName()) g.file.addExport(ext, constOrVarSymbol{ccTypeName, "var", ""}) } func (g *Generator) generateInitFunction() { - for _, enum := range g.file.enum { - g.generateEnumRegistration(enum) - } - for _, d := range g.file.desc { - for _, ext := range d.ext { - g.generateExtensionRegistration(ext) - } - } - for _, ext := range g.file.ext { - g.generateExtensionRegistration(ext) - } if len(g.init) == 0 { return } @@ -2918,10 +2904,6 @@ g.addInitf("%s.RegisterEnum(%q, %[3]s_name, %[3]s_value)", g.Pkg["proto"], pkg+ccTypeName, ccTypeName) } -func (g *Generator) generateExtensionRegistration(ext *ExtensionDescriptor) { - g.addInitf("%s.RegisterExtension(%s)", g.Pkg["proto"], ext.DescName()) -} - // And now lots of helper functions. // Is c an ASCII lower-case letter? diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go 2018-11-22 20:53:18.000000000 +0000 @@ -68,6 +68,7 @@ {"foo", "", "foo", true}, {"github.com/golang/bar", "github.com/golang/bar", "bar", true}, {"github.com/golang/bar;baz", "github.com/golang/bar", "baz", true}, + {"github.com/golang/string", "github.com/golang/string", "string", true}, } for _, tc := range tests { d := &FileDescriptor{ @@ -84,6 +85,25 @@ } } } + +func TestPackageNames(t *testing.T) { + g := New() + g.packageNames = make(map[GoImportPath]GoPackageName) + g.usedPackageNames = make(map[GoPackageName]bool) + for _, test := range []struct { + importPath GoImportPath + want GoPackageName + }{ + {"github.com/golang/foo", "foo"}, + {"github.com/golang/second/package/named/foo", "foo1"}, + {"github.com/golang/third/package/named/foo", "foo2"}, + {"github.com/golang/conflicts/with/predeclared/ident/string", "string1"}, + } { + if got := g.GoPackageName(test.importPath); got != test.want { + t.Errorf("GoPackageName(%v) = %v, want %v", test.importPath, got, test.want) + } + } +} func TestUnescape(t *testing.T) { tests := []struct { diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/golden_test.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/golden_test.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/golden_test.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/golden_test.go 2018-11-22 20:53:18.000000000 +0000 @@ -3,7 +3,6 @@ import ( "bytes" "flag" - "fmt" "go/build" "go/parser" "go/token" @@ -150,7 +149,7 @@ wantPackageB: "test_beta", wantImportsA: map[string]bool{ "github.com/golang/protobuf/proto": true, - "beta": true, + "beta": true, }, }, { parameters: "import_prefix=prefix", @@ -322,64 +321,6 @@ } } } - -func TestPackageComment(t *testing.T) { - workdir, err := ioutil.TempDir("", "proto-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(workdir) - - var packageRE = regexp.MustCompile(`(?m)^package .*`) - - for i, test := range []struct { - goPackageOption string - wantPackage string - }{{ - goPackageOption: ``, - wantPackage: `package proto_package`, - }, { - goPackageOption: `option go_package = "go_package";`, - wantPackage: `package go_package`, - }, { - goPackageOption: `option go_package = "import/path/of/go_package";`, - wantPackage: `package go_package // import "import/path/of/go_package"`, - }, { - goPackageOption: `option go_package = "import/path/of/something;go_package";`, - wantPackage: `package go_package // import "import/path/of/something"`, - }, { - goPackageOption: `option go_package = "import_path;go_package";`, - wantPackage: `package go_package // import "import_path"`, - }} { - srcName := filepath.Join(workdir, fmt.Sprintf("%d.proto", i)) - tgtName := filepath.Join(workdir, fmt.Sprintf("%d.pb.go", i)) - - buf := &bytes.Buffer{} - fmt.Fprintln(buf, `syntax = "proto3";`) - fmt.Fprintln(buf, `package proto_package;`) - fmt.Fprintln(buf, test.goPackageOption) - if err := ioutil.WriteFile(srcName, buf.Bytes(), 0666); err != nil { - t.Fatal(err) - } - - protoc(t, []string{"-I" + workdir, "--go_out=paths=source_relative:" + workdir, srcName}) - - out, err := ioutil.ReadFile(tgtName) - if err != nil { - t.Fatal(err) - } - - pkg := packageRE.Find(out) - if pkg == nil { - t.Errorf("generated .pb.go contains no package line\n\nsource:\n%v\n\noutput:\n%v", buf.String(), string(out)) - continue - } - - if got, want := string(pkg), test.wantPackage; got != want { - t.Errorf("unexpected package statement with go_package = %q\n got: %v\nwant: %v", test.goPackageOption, got, want) - } - } -} // parseFile returns a file's package name and a list of all packages it imports. func parseFile(source string) (packageName string, imports []string, err error) { diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go 2018-11-22 20:53:18.000000000 +0000 @@ -36,7 +36,6 @@ import ( "fmt" - "path" "strconv" "strings" @@ -53,7 +52,7 @@ // Paths for packages used by code generated in this file, // relative to the import_prefix of the generator.Generator. const ( - contextPkgPath = "golang.org/x/net/context" + contextPkgPath = "context" grpcPkgPath = "google.golang.org/grpc" ) @@ -83,8 +82,6 @@ // Init initializes the plugin. func (g *grpc) Init(gen *generator.Generator) { g.gen = gen - contextPkg = generator.RegisterUniquePackageName("context", nil) - grpcPkg = generator.RegisterUniquePackageName("grpc", nil) } // Given a type name defined in a .proto, return its object. @@ -108,6 +105,9 @@ return } + contextPkg = string(g.gen.AddImport(contextPkgPath)) + grpcPkg = string(g.gen.AddImport(grpcPkgPath)) + g.P("// Reference imports to suppress errors if they are not otherwise used.") g.P("var _ ", contextPkg, ".Context") g.P("var _ ", grpcPkg, ".ClientConn") @@ -126,14 +126,6 @@ // GenerateImports generates the import declaration for this file. func (g *grpc) GenerateImports(file *generator.FileDescriptor) { - if len(file.FileDescriptorProto.Service) == 0 { - return - } - g.P("import (") - g.P(contextPkg, " ", generator.GoImportPath(path.Join(string(g.gen.ImportPrefix), contextPkgPath))) - g.P(grpcPkg, " ", generator.GoImportPath(path.Join(string(g.gen.ImportPrefix), grpcPkgPath))) - g.P(")") - g.P() } // reservedClientName records whether a client name is reserved on the client side. diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,19 +1,16 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // deprecated/deprecated.proto is a deprecated file. -package deprecated // import "github.com/golang/protobuf/protoc-gen-go/testdata/deprecated" +// package deprecated contains only deprecated messages and services. -/* -package deprecated contains only deprecated messages and services. -*/ - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +package deprecated import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" grpc "google.golang.org/grpc" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -37,6 +34,7 @@ var DeprecatedEnum_name = map[int32]string{ 0: "DEPRECATED", } + var DeprecatedEnum_value = map[string]int32{ "DEPRECATED": 0, } @@ -44,8 +42,9 @@ func (x DeprecatedEnum) String() string { return proto.EnumName(DeprecatedEnum_name, int32(x)) } + func (DeprecatedEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_deprecated_9e1889ba21817fad, []int{0} + return fileDescriptor_f64ba265cd7eae3f, []int{0} } // DeprecatedRequest is a request to DeprecatedCall. @@ -61,16 +60,17 @@ func (m *DeprecatedRequest) String() string { return proto.CompactTextString(m) } func (*DeprecatedRequest) ProtoMessage() {} func (*DeprecatedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_deprecated_9e1889ba21817fad, []int{0} + return fileDescriptor_f64ba265cd7eae3f, []int{0} } + func (m *DeprecatedRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeprecatedRequest.Unmarshal(m, b) } func (m *DeprecatedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DeprecatedRequest.Marshal(b, m, deterministic) } -func (dst *DeprecatedRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeprecatedRequest.Merge(dst, src) +func (m *DeprecatedRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeprecatedRequest.Merge(m, src) } func (m *DeprecatedRequest) XXX_Size() int { return xxx_messageInfo_DeprecatedRequest.Size(m) @@ -84,26 +84,32 @@ // Deprecated: Do not use. type DeprecatedResponse struct { // DeprecatedField contains a DeprecatedEnum. - DeprecatedField DeprecatedEnum `protobuf:"varint,1,opt,name=deprecated_field,json=deprecatedField,proto3,enum=deprecated.DeprecatedEnum" json:"deprecated_field,omitempty"` // Deprecated: Do not use. - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + DeprecatedField DeprecatedEnum `protobuf:"varint,1,opt,name=deprecated_field,json=deprecatedField,proto3,enum=deprecated.DeprecatedEnum" json:"deprecated_field,omitempty"` // Deprecated: Do not use. + // DeprecatedOneof contains a deprecated field. + // + // Types that are valid to be assigned to DeprecatedOneof: + // *DeprecatedResponse_DeprecatedOneofField + DeprecatedOneof isDeprecatedResponse_DeprecatedOneof `protobuf_oneof:"deprecated_oneof"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DeprecatedResponse) Reset() { *m = DeprecatedResponse{} } func (m *DeprecatedResponse) String() string { return proto.CompactTextString(m) } func (*DeprecatedResponse) ProtoMessage() {} func (*DeprecatedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_deprecated_9e1889ba21817fad, []int{1} + return fileDescriptor_f64ba265cd7eae3f, []int{1} } + func (m *DeprecatedResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeprecatedResponse.Unmarshal(m, b) } func (m *DeprecatedResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DeprecatedResponse.Marshal(b, m, deterministic) } -func (dst *DeprecatedResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeprecatedResponse.Merge(dst, src) +func (m *DeprecatedResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeprecatedResponse.Merge(m, src) } func (m *DeprecatedResponse) XXX_Size() int { return xxx_messageInfo_DeprecatedResponse.Size(m) @@ -122,10 +128,110 @@ return DeprecatedEnum_DEPRECATED } +type isDeprecatedResponse_DeprecatedOneof interface { + isDeprecatedResponse_DeprecatedOneof() +} + +type DeprecatedResponse_DeprecatedOneofField struct { + DeprecatedOneofField string `protobuf:"bytes,2,opt,name=deprecated_oneof_field,json=deprecatedOneofField,proto3,oneof"` +} + +func (*DeprecatedResponse_DeprecatedOneofField) isDeprecatedResponse_DeprecatedOneof() {} + +func (m *DeprecatedResponse) GetDeprecatedOneof() isDeprecatedResponse_DeprecatedOneof { + if m != nil { + return m.DeprecatedOneof + } + return nil +} + +// Deprecated: Do not use. +func (m *DeprecatedResponse) GetDeprecatedOneofField() string { + if x, ok := m.GetDeprecatedOneof().(*DeprecatedResponse_DeprecatedOneofField); ok { + return x.DeprecatedOneofField + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DeprecatedResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DeprecatedResponse_OneofMarshaler, _DeprecatedResponse_OneofUnmarshaler, _DeprecatedResponse_OneofSizer, []interface{}{ + (*DeprecatedResponse_DeprecatedOneofField)(nil), + } +} + +func _DeprecatedResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DeprecatedResponse) + // deprecated_oneof + switch x := m.DeprecatedOneof.(type) { + case *DeprecatedResponse_DeprecatedOneofField: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.DeprecatedOneofField) + case nil: + default: + return fmt.Errorf("DeprecatedResponse.DeprecatedOneof has unexpected type %T", x) + } + return nil +} + +func _DeprecatedResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DeprecatedResponse) + switch tag { + case 2: // deprecated_oneof.deprecated_oneof_field + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.DeprecatedOneof = &DeprecatedResponse_DeprecatedOneofField{x} + return true, err + default: + return false, nil + } +} + +func _DeprecatedResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DeprecatedResponse) + // deprecated_oneof + switch x := m.DeprecatedOneof.(type) { + case *DeprecatedResponse_DeprecatedOneofField: + n += 1 // tag and wire + n += proto.SizeVarint(uint64(len(x.DeprecatedOneofField))) + n += len(x.DeprecatedOneofField) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + func init() { + proto.RegisterEnum("deprecated.DeprecatedEnum", DeprecatedEnum_name, DeprecatedEnum_value) proto.RegisterType((*DeprecatedRequest)(nil), "deprecated.DeprecatedRequest") proto.RegisterType((*DeprecatedResponse)(nil), "deprecated.DeprecatedResponse") - proto.RegisterEnum("deprecated.DeprecatedEnum", DeprecatedEnum_name, DeprecatedEnum_value) +} + +func init() { proto.RegisterFile("deprecated/deprecated.proto", fileDescriptor_f64ba265cd7eae3f) } + +var fileDescriptor_f64ba265cd7eae3f = []byte{ + // 287 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xcd, 0x4a, 0xf3, 0x40, + 0x14, 0x86, 0x7b, 0xe6, 0x83, 0x0f, 0x9d, 0x45, 0xad, 0x83, 0x68, 0x88, 0x28, 0x25, 0xab, 0x20, + 0x34, 0x81, 0xba, 0x2b, 0x6e, 0x9a, 0x26, 0xa2, 0x2b, 0x25, 0x76, 0xe5, 0x46, 0xf2, 0x73, 0x12, + 0x03, 0xe9, 0x4c, 0x4c, 0x26, 0x5e, 0x83, 0xf7, 0xe3, 0xc6, 0xcb, 0x93, 0x49, 0x8b, 0x33, 0x05, + 0xdd, 0x84, 0x93, 0x79, 0xdf, 0xe7, 0xfc, 0xd2, 0xf3, 0x1c, 0x9b, 0x16, 0xb3, 0x44, 0x62, 0xee, + 0xeb, 0xd0, 0x6b, 0x5a, 0x21, 0x05, 0xa3, 0xfa, 0xc5, 0x39, 0xa3, 0xc7, 0xe1, 0xcf, 0x5f, 0x8c, + 0x6f, 0x3d, 0x76, 0x72, 0x41, 0x2c, 0x70, 0x3e, 0x81, 0x32, 0x53, 0xe9, 0x1a, 0xc1, 0x3b, 0x64, + 0xf7, 0x74, 0xa2, 0xe9, 0x97, 0xa2, 0xc2, 0x3a, 0xb7, 0x60, 0x0a, 0xee, 0x78, 0x6e, 0x7b, 0x46, + 0x21, 0x4d, 0x46, 0xbc, 0xdf, 0x04, 0xc4, 0x82, 0xf8, 0x48, 0xcb, 0xb7, 0x0a, 0x63, 0x0b, 0x7a, + 0x6a, 0xa4, 0x12, 0x1c, 0x45, 0xb1, 0x4b, 0x48, 0xa6, 0xe0, 0x1e, 0x2a, 0xe8, 0x6e, 0x14, 0x9f, + 0x68, 0xcf, 0x83, 0xb2, 0x0c, 0xac, 0xea, 0x30, 0x60, 0x7b, 0xad, 0x0c, 0xfc, 0x95, 0x4b, 0xc7, + 0xfb, 0xa5, 0x19, 0xa3, 0x34, 0x8c, 0x1e, 0xe3, 0x68, 0xb5, 0x5c, 0x47, 0xe1, 0x64, 0x64, 0x93, + 0x03, 0xb0, 0x89, 0x05, 0x73, 0x6e, 0x0e, 0xfe, 0x84, 0xed, 0x7b, 0x95, 0x21, 0x5b, 0x9b, 0xf8, + 0x2a, 0xa9, 0x6b, 0x76, 0xf1, 0xfb, 0x54, 0xbb, 0x4d, 0xd9, 0x97, 0x7f, 0xc9, 0xdb, 0x75, 0x39, + 0xff, 0x3e, 0x08, 0xd8, 0xea, 0x13, 0x2c, 0x9f, 0x6f, 0xca, 0x4a, 0xbe, 0xf6, 0xa9, 0x97, 0x89, + 0x8d, 0x5f, 0x8a, 0x3a, 0xe1, 0xa5, 0x3f, 0xdc, 0x23, 0xed, 0x8b, 0x6d, 0x90, 0xcd, 0x4a, 0xe4, + 0xb3, 0x52, 0xf8, 0x12, 0x3b, 0x99, 0x27, 0x32, 0x31, 0x4e, 0xf7, 0x05, 0x90, 0xfe, 0x1f, 0x5c, + 0xd7, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x08, 0xd5, 0xa0, 0x89, 0xdd, 0x01, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -208,27 +314,3 @@ Streams: []grpc.StreamDesc{}, Metadata: "deprecated/deprecated.proto", } - -func init() { - proto.RegisterFile("deprecated/deprecated.proto", fileDescriptor_deprecated_9e1889ba21817fad) -} - -var fileDescriptor_deprecated_9e1889ba21817fad = []byte{ - // 248 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0x49, 0x2d, 0x28, - 0x4a, 0x4d, 0x4e, 0x2c, 0x49, 0x4d, 0xd1, 0x47, 0x30, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, - 0xb8, 0x10, 0x22, 0x4a, 0xe2, 0x5c, 0x82, 0x2e, 0x70, 0x5e, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, - 0x89, 0x15, 0x93, 0x04, 0xa3, 0x52, 0x32, 0x97, 0x10, 0xb2, 0x44, 0x71, 0x41, 0x7e, 0x5e, 0x71, - 0xaa, 0x90, 0x27, 0x97, 0x00, 0x42, 0x73, 0x7c, 0x5a, 0x66, 0x6a, 0x4e, 0x8a, 0x04, 0xa3, 0x02, - 0xa3, 0x06, 0x9f, 0x91, 0x94, 0x1e, 0x92, 0x3d, 0x08, 0x9d, 0xae, 0x79, 0xa5, 0xb9, 0x4e, 0x4c, - 0x12, 0x8c, 0x41, 0xfc, 0x08, 0x69, 0x37, 0x90, 0x36, 0x90, 0x25, 0x5a, 0x1a, 0x5c, 0x7c, 0xa8, - 0x4a, 0x85, 0x84, 0xb8, 0xb8, 0x5c, 0x5c, 0x03, 0x82, 0x5c, 0x9d, 0x1d, 0x43, 0x5c, 0x5d, 0x04, - 0x18, 0xa4, 0x98, 0x38, 0x18, 0xa5, 0x98, 0x24, 0x18, 0x8d, 0xf2, 0x90, 0xdd, 0x19, 0x9c, 0x5a, - 0x54, 0x96, 0x99, 0x9c, 0x2a, 0x14, 0x82, 0xac, 0xdd, 0x39, 0x31, 0x27, 0x47, 0x48, 0x16, 0xbb, - 0x2b, 0xa0, 0x1e, 0x93, 0x92, 0xc3, 0x25, 0x0d, 0xf1, 0x9e, 0x12, 0x73, 0x07, 0x13, 0xa3, 0x14, - 0x88, 0x70, 0x72, 0x8c, 0xb2, 0x49, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, - 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x07, 0x07, 0x5f, 0x52, 0x69, 0x1a, 0x84, 0x91, 0xac, - 0x9b, 0x9e, 0x9a, 0xa7, 0x9b, 0x9e, 0xaf, 0x5f, 0x92, 0x5a, 0x5c, 0x92, 0x92, 0x58, 0x92, 0x88, - 0x14, 0xd2, 0x3b, 0x18, 0x19, 0x93, 0xd8, 0xc0, 0xaa, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, - 0x0e, 0xf5, 0x6c, 0x87, 0x8c, 0x01, 0x00, 0x00, -} diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.proto 2018-11-22 20:53:18.000000000 +0000 @@ -49,6 +49,11 @@ option deprecated = true; // DeprecatedField contains a DeprecatedEnum. DeprecatedEnum deprecated_field = 1 [deprecated=true]; + // DeprecatedOneof contains a deprecated field. + oneof deprecated_oneof { + // DeprecatedOneofField is a deprecated field. + string deprecated_oneof_field = 2 [deprecated=true]; + } } // DeprecatedEnum contains deprecated values. diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base/extension_base.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base/extension_base.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base/extension_base.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base/extension_base.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: extension_base/extension_base.proto -package extension_base // import "github.com/golang/protobuf/protoc-gen-go/testdata/extension_base" +package extension_base -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -30,7 +32,7 @@ func (m *BaseMessage) String() string { return proto.CompactTextString(m) } func (*BaseMessage) ProtoMessage() {} func (*BaseMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_base_41d3c712c9fc37fc, []int{0} + return fileDescriptor_2fbd53bac0b7ca8a, []int{0} } var extRange_BaseMessage = []proto.ExtensionRange{ @@ -41,14 +43,15 @@ func (*BaseMessage) ExtensionRangeArray() []proto.ExtensionRange { return extRange_BaseMessage } + func (m *BaseMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BaseMessage.Unmarshal(m, b) } func (m *BaseMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BaseMessage.Marshal(b, m, deterministic) } -func (dst *BaseMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_BaseMessage.Merge(dst, src) +func (m *BaseMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_BaseMessage.Merge(m, src) } func (m *BaseMessage) XXX_Size() int { return xxx_messageInfo_BaseMessage.Size(m) @@ -78,14 +81,7 @@ func (m *OldStyleMessage) String() string { return proto.CompactTextString(m) } func (*OldStyleMessage) ProtoMessage() {} func (*OldStyleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_base_41d3c712c9fc37fc, []int{1} -} - -func (m *OldStyleMessage) MarshalJSON() ([]byte, error) { - return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions) -} -func (m *OldStyleMessage) UnmarshalJSON(buf []byte) error { - return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions) + return fileDescriptor_2fbd53bac0b7ca8a, []int{1} } var extRange_OldStyleMessage = []proto.ExtensionRange{ @@ -95,14 +91,15 @@ func (*OldStyleMessage) ExtensionRangeArray() []proto.ExtensionRange { return extRange_OldStyleMessage } + func (m *OldStyleMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OldStyleMessage.Unmarshal(m, b) } func (m *OldStyleMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OldStyleMessage.Marshal(b, m, deterministic) } -func (dst *OldStyleMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_OldStyleMessage.Merge(dst, src) +func (m *OldStyleMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_OldStyleMessage.Merge(m, src) } func (m *OldStyleMessage) XXX_Size() int { return xxx_messageInfo_OldStyleMessage.Size(m) @@ -119,10 +116,10 @@ } func init() { - proto.RegisterFile("extension_base/extension_base.proto", fileDescriptor_extension_base_41d3c712c9fc37fc) + proto.RegisterFile("extension_base/extension_base.proto", fileDescriptor_2fbd53bac0b7ca8a) } -var fileDescriptor_extension_base_41d3c712c9fc37fc = []byte{ +var fileDescriptor_2fbd53bac0b7ca8a = []byte{ // 179 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4e, 0xad, 0x28, 0x49, 0xcd, 0x2b, 0xce, 0xcc, 0xcf, 0x8b, 0x4f, 0x4a, 0x2c, 0x4e, 0xd5, 0x47, 0xe5, 0xea, 0x15, 0x14, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra/extension_extra.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra/extension_extra.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra/extension_extra.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra/extension_extra.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: extension_extra/extension_extra.proto -package extension_extra // import "github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra" +package extension_extra -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -29,16 +31,17 @@ func (m *ExtraMessage) String() string { return proto.CompactTextString(m) } func (*ExtraMessage) ProtoMessage() {} func (*ExtraMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_extra_83adf2410f49f816, []int{0} + return fileDescriptor_fce75f5a63502cd5, []int{0} } + func (m *ExtraMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExtraMessage.Unmarshal(m, b) } func (m *ExtraMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ExtraMessage.Marshal(b, m, deterministic) } -func (dst *ExtraMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExtraMessage.Merge(dst, src) +func (m *ExtraMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtraMessage.Merge(m, src) } func (m *ExtraMessage) XXX_Size() int { return xxx_messageInfo_ExtraMessage.Size(m) @@ -61,10 +64,10 @@ } func init() { - proto.RegisterFile("extension_extra/extension_extra.proto", fileDescriptor_extension_extra_83adf2410f49f816) + proto.RegisterFile("extension_extra/extension_extra.proto", fileDescriptor_fce75f5a63502cd5) } -var fileDescriptor_extension_extra_83adf2410f49f816 = []byte{ +var fileDescriptor_fce75f5a63502cd5 = []byte{ // 133 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0xad, 0x28, 0x49, 0xcd, 0x2b, 0xce, 0xcc, 0xcf, 0x8b, 0x4f, 0xad, 0x28, 0x29, 0x4a, 0xd4, 0x47, 0xe3, 0xeb, 0x15, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user/extension_user.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user/extension_user.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user/extension_user.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user/extension_user.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,13 +1,15 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: extension_user/extension_user.proto -package extension_user // import "github.com/golang/protobuf/protoc-gen-go/testdata/extension_user" +package extension_user -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import extension_base "github.com/golang/protobuf/protoc-gen-go/testdata/extension_base" -import extension_extra "github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + extension_base "github.com/golang/protobuf/protoc-gen-go/testdata/extension_base" + extension_extra "github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -32,16 +34,17 @@ func (m *UserMessage) String() string { return proto.CompactTextString(m) } func (*UserMessage) ProtoMessage() {} func (*UserMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_user_af41b5e0bdfb7846, []int{0} + return fileDescriptor_359ba8abf543ca10, []int{0} } + func (m *UserMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserMessage.Unmarshal(m, b) } func (m *UserMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UserMessage.Marshal(b, m, deterministic) } -func (dst *UserMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserMessage.Merge(dst, src) +func (m *UserMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserMessage.Merge(m, src) } func (m *UserMessage) XXX_Size() int { return xxx_messageInfo_UserMessage.Size(m) @@ -78,7 +81,7 @@ func (m *LoudMessage) String() string { return proto.CompactTextString(m) } func (*LoudMessage) ProtoMessage() {} func (*LoudMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_user_af41b5e0bdfb7846, []int{1} + return fileDescriptor_359ba8abf543ca10, []int{1} } var extRange_LoudMessage = []proto.ExtensionRange{ @@ -88,14 +91,15 @@ func (*LoudMessage) ExtensionRangeArray() []proto.ExtensionRange { return extRange_LoudMessage } + func (m *LoudMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LoudMessage.Unmarshal(m, b) } func (m *LoudMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_LoudMessage.Marshal(b, m, deterministic) } -func (dst *LoudMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_LoudMessage.Merge(dst, src) +func (m *LoudMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoudMessage.Merge(m, src) } func (m *LoudMessage) XXX_Size() int { return xxx_messageInfo_LoudMessage.Size(m) @@ -126,16 +130,17 @@ func (m *LoginMessage) String() string { return proto.CompactTextString(m) } func (*LoginMessage) ProtoMessage() {} func (*LoginMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_user_af41b5e0bdfb7846, []int{2} + return fileDescriptor_359ba8abf543ca10, []int{2} } + func (m *LoginMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LoginMessage.Unmarshal(m, b) } func (m *LoginMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_LoginMessage.Marshal(b, m, deterministic) } -func (dst *LoginMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_LoginMessage.Merge(dst, src) +func (m *LoginMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoginMessage.Merge(m, src) } func (m *LoginMessage) XXX_Size() int { return xxx_messageInfo_LoginMessage.Size(m) @@ -151,7 +156,7 @@ ExtensionType: (*UserMessage)(nil), Field: 16, Name: "extension_user.LoginMessage.user_message", - Tag: "bytes,16,opt,name=user_message,json=userMessage", + Tag: "bytes,16,opt,name=user_message", Filename: "extension_user/extension_user.proto", } @@ -166,16 +171,17 @@ func (m *Detail) String() string { return proto.CompactTextString(m) } func (*Detail) ProtoMessage() {} func (*Detail) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_user_af41b5e0bdfb7846, []int{3} + return fileDescriptor_359ba8abf543ca10, []int{3} } + func (m *Detail) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Detail.Unmarshal(m, b) } func (m *Detail) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Detail.Marshal(b, m, deterministic) } -func (dst *Detail) XXX_Merge(src proto.Message) { - xxx_messageInfo_Detail.Merge(dst, src) +func (m *Detail) XXX_Merge(src proto.Message) { + xxx_messageInfo_Detail.Merge(m, src) } func (m *Detail) XXX_Size() int { return xxx_messageInfo_Detail.Size(m) @@ -205,16 +211,17 @@ func (m *Announcement) String() string { return proto.CompactTextString(m) } func (*Announcement) ProtoMessage() {} func (*Announcement) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_user_af41b5e0bdfb7846, []int{4} + return fileDescriptor_359ba8abf543ca10, []int{4} } + func (m *Announcement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Announcement.Unmarshal(m, b) } func (m *Announcement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Announcement.Marshal(b, m, deterministic) } -func (dst *Announcement) XXX_Merge(src proto.Message) { - xxx_messageInfo_Announcement.Merge(dst, src) +func (m *Announcement) XXX_Merge(src proto.Message) { + xxx_messageInfo_Announcement.Merge(m, src) } func (m *Announcement) XXX_Size() int { return xxx_messageInfo_Announcement.Size(m) @@ -237,7 +244,7 @@ ExtensionType: (*Announcement)(nil), Field: 100, Name: "extension_user.Announcement.loud_ext", - Tag: "bytes,100,opt,name=loud_ext,json=loudExt", + Tag: "bytes,100,opt,name=loud_ext", Filename: "extension_user/extension_user.proto", } @@ -254,16 +261,17 @@ func (m *OldStyleParcel) String() string { return proto.CompactTextString(m) } func (*OldStyleParcel) ProtoMessage() {} func (*OldStyleParcel) Descriptor() ([]byte, []int) { - return fileDescriptor_extension_user_af41b5e0bdfb7846, []int{5} + return fileDescriptor_359ba8abf543ca10, []int{5} } + func (m *OldStyleParcel) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OldStyleParcel.Unmarshal(m, b) } func (m *OldStyleParcel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OldStyleParcel.Marshal(b, m, deterministic) } -func (dst *OldStyleParcel) XXX_Merge(src proto.Message) { - xxx_messageInfo_OldStyleParcel.Merge(dst, src) +func (m *OldStyleParcel) XXX_Merge(src proto.Message) { + xxx_messageInfo_OldStyleParcel.Merge(m, src) } func (m *OldStyleParcel) XXX_Size() int { return xxx_messageInfo_OldStyleParcel.Size(m) @@ -293,7 +301,7 @@ ExtensionType: (*OldStyleParcel)(nil), Field: 2001, Name: "extension_user.OldStyleParcel", - Tag: "bytes,2001,opt,name=message_set_extension,json=messageSetExtension", + Tag: "bytes,2001,opt,name=message_set_extension", Filename: "extension_user/extension_user.proto", } @@ -302,7 +310,7 @@ ExtensionType: (*UserMessage)(nil), Field: 5, Name: "extension_user.user_message", - Tag: "bytes,5,opt,name=user_message,json=userMessage", + Tag: "bytes,5,opt,name=user_message", Filename: "extension_user/extension_user.proto", } @@ -311,7 +319,7 @@ ExtensionType: (*extension_extra.ExtraMessage)(nil), Field: 9, Name: "extension_user.extra_message", - Tag: "bytes,9,opt,name=extra_message,json=extraMessage", + Tag: "bytes,9,opt,name=extra_message", Filename: "extension_user/extension_user.proto", } @@ -344,16 +352,15 @@ func init() { proto.RegisterType((*UserMessage)(nil), "extension_user.UserMessage") + proto.RegisterExtension(E_LoudMessage_Volume) proto.RegisterType((*LoudMessage)(nil), "extension_user.LoudMessage") + proto.RegisterExtension(E_LoginMessage_UserMessage) proto.RegisterType((*LoginMessage)(nil), "extension_user.LoginMessage") proto.RegisterType((*Detail)(nil), "extension_user.Detail") - proto.RegisterType((*Announcement)(nil), "extension_user.Announcement") - proto.RegisterMessageSetType((*OldStyleParcel)(nil), 2001, "extension_user.OldStyleParcel") - proto.RegisterType((*OldStyleParcel)(nil), "extension_user.OldStyleParcel") - proto.RegisterExtension(E_LoudMessage_Volume) - proto.RegisterExtension(E_LoginMessage_UserMessage) proto.RegisterExtension(E_Announcement_LoudExt) + proto.RegisterType((*Announcement)(nil), "extension_user.Announcement") proto.RegisterExtension(E_OldStyleParcel_MessageSetExtension) + proto.RegisterType((*OldStyleParcel)(nil), "extension_user.OldStyleParcel") proto.RegisterExtension(E_UserMessage) proto.RegisterExtension(E_ExtraMessage) proto.RegisterExtension(E_Width) @@ -362,10 +369,10 @@ } func init() { - proto.RegisterFile("extension_user/extension_user.proto", fileDescriptor_extension_user_af41b5e0bdfb7846) + proto.RegisterFile("extension_user/extension_user.proto", fileDescriptor_359ba8abf543ca10) } -var fileDescriptor_extension_user_af41b5e0bdfb7846 = []byte{ +var fileDescriptor_359ba8abf543ca10 = []byte{ // 492 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x51, 0x6f, 0x94, 0x40, 0x10, 0x0e, 0x6d, 0x8f, 0x5e, 0x87, 0x6b, 0xad, 0xa8, 0xcd, 0xa5, 0x6a, 0x25, 0x18, 0x13, 0x62, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/grpc/grpc.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/grpc/grpc.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/grpc/grpc.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/grpc/grpc.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,15 +1,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: grpc/grpc.proto -package testing // import "github.com/golang/protobuf/protoc-gen-go/testdata/grpc" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +package testing import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" grpc "google.golang.org/grpc" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -33,16 +32,17 @@ func (m *SimpleRequest) String() string { return proto.CompactTextString(m) } func (*SimpleRequest) ProtoMessage() {} func (*SimpleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_65bf3902e49ee873, []int{0} + return fileDescriptor_81ea47a3f88c2082, []int{0} } + func (m *SimpleRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SimpleRequest.Unmarshal(m, b) } func (m *SimpleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SimpleRequest.Marshal(b, m, deterministic) } -func (dst *SimpleRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_SimpleRequest.Merge(dst, src) +func (m *SimpleRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_SimpleRequest.Merge(m, src) } func (m *SimpleRequest) XXX_Size() int { return xxx_messageInfo_SimpleRequest.Size(m) @@ -63,16 +63,17 @@ func (m *SimpleResponse) String() string { return proto.CompactTextString(m) } func (*SimpleResponse) ProtoMessage() {} func (*SimpleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_65bf3902e49ee873, []int{1} + return fileDescriptor_81ea47a3f88c2082, []int{1} } + func (m *SimpleResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SimpleResponse.Unmarshal(m, b) } func (m *SimpleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SimpleResponse.Marshal(b, m, deterministic) } -func (dst *SimpleResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_SimpleResponse.Merge(dst, src) +func (m *SimpleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_SimpleResponse.Merge(m, src) } func (m *SimpleResponse) XXX_Size() int { return xxx_messageInfo_SimpleResponse.Size(m) @@ -93,16 +94,17 @@ func (m *StreamMsg) String() string { return proto.CompactTextString(m) } func (*StreamMsg) ProtoMessage() {} func (*StreamMsg) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_65bf3902e49ee873, []int{2} + return fileDescriptor_81ea47a3f88c2082, []int{2} } + func (m *StreamMsg) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamMsg.Unmarshal(m, b) } func (m *StreamMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_StreamMsg.Marshal(b, m, deterministic) } -func (dst *StreamMsg) XXX_Merge(src proto.Message) { - xxx_messageInfo_StreamMsg.Merge(dst, src) +func (m *StreamMsg) XXX_Merge(src proto.Message) { + xxx_messageInfo_StreamMsg.Merge(m, src) } func (m *StreamMsg) XXX_Size() int { return xxx_messageInfo_StreamMsg.Size(m) @@ -123,16 +125,17 @@ func (m *StreamMsg2) String() string { return proto.CompactTextString(m) } func (*StreamMsg2) ProtoMessage() {} func (*StreamMsg2) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_65bf3902e49ee873, []int{3} + return fileDescriptor_81ea47a3f88c2082, []int{3} } + func (m *StreamMsg2) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamMsg2.Unmarshal(m, b) } func (m *StreamMsg2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_StreamMsg2.Marshal(b, m, deterministic) } -func (dst *StreamMsg2) XXX_Merge(src proto.Message) { - xxx_messageInfo_StreamMsg2.Merge(dst, src) +func (m *StreamMsg2) XXX_Merge(src proto.Message) { + xxx_messageInfo_StreamMsg2.Merge(m, src) } func (m *StreamMsg2) XXX_Size() int { return xxx_messageInfo_StreamMsg2.Size(m) @@ -150,6 +153,28 @@ proto.RegisterType((*StreamMsg2)(nil), "grpc.testing.StreamMsg2") } +func init() { proto.RegisterFile("grpc/grpc.proto", fileDescriptor_81ea47a3f88c2082) } + +var fileDescriptor_81ea47a3f88c2082 = []byte{ + // 244 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4f, 0x2f, 0x2a, 0x48, + 0xd6, 0x07, 0x11, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x3c, 0x60, 0x76, 0x49, 0x6a, 0x71, + 0x49, 0x66, 0x5e, 0xba, 0x12, 0x3f, 0x17, 0x6f, 0x70, 0x66, 0x6e, 0x41, 0x4e, 0x6a, 0x50, 0x6a, + 0x61, 0x69, 0x6a, 0x71, 0x89, 0x92, 0x00, 0x17, 0x1f, 0x4c, 0xa0, 0xb8, 0x20, 0x3f, 0xaf, 0x38, + 0x55, 0x89, 0x9b, 0x8b, 0x33, 0xb8, 0xa4, 0x28, 0x35, 0x31, 0xd7, 0xb7, 0x38, 0x5d, 0x89, 0x87, + 0x8b, 0x0b, 0xce, 0x31, 0x32, 0x9a, 0xc1, 0xc4, 0xc5, 0x12, 0x92, 0x5a, 0x5c, 0x22, 0xe4, 0xc6, + 0xc5, 0x19, 0x9a, 0x97, 0x58, 0x54, 0xe9, 0x9c, 0x98, 0x93, 0x23, 0x24, 0xad, 0x87, 0x6c, 0x85, + 0x1e, 0x8a, 0xf9, 0x52, 0x32, 0xd8, 0x25, 0x21, 0x76, 0x09, 0xb9, 0x70, 0x71, 0xb9, 0xe4, 0x97, + 0xe7, 0x15, 0x83, 0xad, 0xc0, 0x6f, 0x90, 0x38, 0x9a, 0x24, 0xcc, 0x55, 0x06, 0x8c, 0x42, 0xce, + 0x5c, 0x1c, 0xa1, 0x05, 0x50, 0x33, 0x70, 0x29, 0xc3, 0xef, 0x10, 0x0d, 0x46, 0x21, 0x5b, 0x2e, + 0x16, 0xa7, 0xcc, 0x94, 0x4c, 0xdc, 0x06, 0x48, 0xe0, 0x90, 0x30, 0xd2, 0x60, 0x34, 0x60, 0x74, + 0x72, 0x88, 0xb2, 0x4b, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, + 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x07, 0xc7, 0x40, 0x52, 0x69, 0x1a, 0x84, 0x91, 0xac, 0x9b, 0x9e, + 0x9a, 0xa7, 0x9b, 0x9e, 0xaf, 0x0f, 0x32, 0x22, 0x25, 0xb1, 0x24, 0x11, 0x1c, 0x4d, 0xd6, 0x50, + 0x03, 0x93, 0xd8, 0xc0, 0x8a, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x90, 0xb9, 0x95, 0x42, + 0xc2, 0x01, 0x00, 0x00, +} + // Reference imports to suppress errors if they are not otherwise used. var _ context.Context var _ grpc.ClientConn @@ -420,25 +445,3 @@ }, Metadata: "grpc/grpc.proto", } - -func init() { proto.RegisterFile("grpc/grpc.proto", fileDescriptor_grpc_65bf3902e49ee873) } - -var fileDescriptor_grpc_65bf3902e49ee873 = []byte{ - // 244 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4f, 0x2f, 0x2a, 0x48, - 0xd6, 0x07, 0x11, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x3c, 0x60, 0x76, 0x49, 0x6a, 0x71, - 0x49, 0x66, 0x5e, 0xba, 0x12, 0x3f, 0x17, 0x6f, 0x70, 0x66, 0x6e, 0x41, 0x4e, 0x6a, 0x50, 0x6a, - 0x61, 0x69, 0x6a, 0x71, 0x89, 0x92, 0x00, 0x17, 0x1f, 0x4c, 0xa0, 0xb8, 0x20, 0x3f, 0xaf, 0x38, - 0x55, 0x89, 0x9b, 0x8b, 0x33, 0xb8, 0xa4, 0x28, 0x35, 0x31, 0xd7, 0xb7, 0x38, 0x5d, 0x89, 0x87, - 0x8b, 0x0b, 0xce, 0x31, 0x32, 0x9a, 0xc1, 0xc4, 0xc5, 0x12, 0x92, 0x5a, 0x5c, 0x22, 0xe4, 0xc6, - 0xc5, 0x19, 0x9a, 0x97, 0x58, 0x54, 0xe9, 0x9c, 0x98, 0x93, 0x23, 0x24, 0xad, 0x87, 0x6c, 0x85, - 0x1e, 0x8a, 0xf9, 0x52, 0x32, 0xd8, 0x25, 0x21, 0x76, 0x09, 0xb9, 0x70, 0x71, 0xb9, 0xe4, 0x97, - 0xe7, 0x15, 0x83, 0xad, 0xc0, 0x6f, 0x90, 0x38, 0x9a, 0x24, 0xcc, 0x55, 0x06, 0x8c, 0x42, 0xce, - 0x5c, 0x1c, 0xa1, 0x05, 0x50, 0x33, 0x70, 0x29, 0xc3, 0xef, 0x10, 0x0d, 0x46, 0x21, 0x5b, 0x2e, - 0x16, 0xa7, 0xcc, 0x94, 0x4c, 0xdc, 0x06, 0x48, 0xe0, 0x90, 0x30, 0xd2, 0x60, 0x34, 0x60, 0x74, - 0x72, 0x88, 0xb2, 0x4b, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, - 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x07, 0xc7, 0x40, 0x52, 0x69, 0x1a, 0x84, 0x91, 0xac, 0x9b, 0x9e, - 0x9a, 0xa7, 0x9b, 0x9e, 0xaf, 0x0f, 0x32, 0x22, 0x25, 0xb1, 0x24, 0x11, 0x1c, 0x4d, 0xd6, 0x50, - 0x03, 0x93, 0xd8, 0xc0, 0x8a, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x90, 0xb9, 0x95, 0x42, - 0xc2, 0x01, 0x00, 0x00, -} diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,12 +1,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: import_public/a.proto -package import_public // import "github.com/golang/protobuf/protoc-gen-go/testdata/import_public" +package import_public -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import sub "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + sub "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -19,8 +21,20 @@ // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const Default_M_DefaultField = sub.Default_M_DefaultField + // M from public import import_public/sub/a.proto type M = sub.M +type M_OneofInt32 = sub.M_OneofInt32 +type M_OneofInt64 = sub.M_OneofInt64 + +// M_Grouping from public import import_public/sub/a.proto +type M_Grouping = sub.M_Grouping + +// M_Submessage from public import import_public/sub/a.proto +type M_Submessage = sub.M_Submessage +type M_Submessage_SubmessageOneofInt32 = sub.M_Submessage_SubmessageOneofInt32 +type M_Submessage_SubmessageOneofInt64 = sub.M_Submessage_SubmessageOneofInt64 // E from public import import_public/sub/a.proto type E = sub.E @@ -30,12 +44,28 @@ const E_ZERO = E(sub.E_ZERO) -// Ignoring public import of Local from import_public/b.proto +// M_Subenum from public import import_public/sub/a.proto +type M_Subenum = sub.M_Subenum + +var M_Subenum_name = sub.M_Subenum_name +var M_Subenum_value = sub.M_Subenum_value + +const M_M_ZERO = M_Subenum(sub.M_M_ZERO) + +// M_Submessage_Submessage_Subenum from public import import_public/sub/a.proto +type M_Submessage_Submessage_Subenum = sub.M_Submessage_Submessage_Subenum + +var M_Submessage_Submessage_Subenum_name = sub.M_Submessage_Submessage_Subenum_name +var M_Submessage_Submessage_Subenum_value = sub.M_Submessage_Submessage_Subenum_value + +const M_Submessage_M_SUBMESSAGE_ZERO = M_Submessage_Submessage_Subenum(sub.M_Submessage_M_SUBMESSAGE_ZERO) + +var E_ExtensionField = sub.E_ExtensionField type Public struct { - M *sub.M `protobuf:"bytes,1,opt,name=m,proto3" json:"m,omitempty"` - E sub.E `protobuf:"varint,2,opt,name=e,proto3,enum=goproto.test.import_public.sub.E" json:"e,omitempty"` - Local *Local `protobuf:"bytes,3,opt,name=local,proto3" json:"local,omitempty"` + M *sub.M `protobuf:"bytes,1,opt,name=m" json:"m,omitempty"` + E *sub.E `protobuf:"varint,2,opt,name=e,enum=goproto.test.import_public.sub.E" json:"e,omitempty"` + Local *Local `protobuf:"bytes,3,opt,name=local" json:"local,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -45,16 +75,17 @@ func (m *Public) String() string { return proto.CompactTextString(m) } func (*Public) ProtoMessage() {} func (*Public) Descriptor() ([]byte, []int) { - return fileDescriptor_a_c0314c022b7c17d8, []int{0} + return fileDescriptor_73b7577c95fa6b70, []int{0} } + func (m *Public) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Public.Unmarshal(m, b) } func (m *Public) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Public.Marshal(b, m, deterministic) } -func (dst *Public) XXX_Merge(src proto.Message) { - xxx_messageInfo_Public.Merge(dst, src) +func (m *Public) XXX_Merge(src proto.Message) { + xxx_messageInfo_Public.Merge(m, src) } func (m *Public) XXX_Size() int { return xxx_messageInfo_Public.Size(m) @@ -73,8 +104,8 @@ } func (m *Public) GetE() sub.E { - if m != nil { - return m.E + if m != nil && m.E != nil { + return *m.E } return sub.E_ZERO } @@ -90,10 +121,10 @@ proto.RegisterType((*Public)(nil), "goproto.test.import_public.Public") } -func init() { proto.RegisterFile("import_public/a.proto", fileDescriptor_a_c0314c022b7c17d8) } +func init() { proto.RegisterFile("import_public/a.proto", fileDescriptor_73b7577c95fa6b70) } -var fileDescriptor_a_c0314c022b7c17d8 = []byte{ - // 200 bytes of a gzipped FileDescriptorProto +var fileDescriptor_73b7577c95fa6b70 = []byte{ + // 195 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xcd, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x89, 0x2f, 0x28, 0x4d, 0xca, 0xc9, 0x4c, 0xd6, 0x4f, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x4a, 0xcf, 0x07, 0x33, 0xf4, 0x4a, 0x52, 0x8b, 0x4b, 0xf4, 0x50, 0xd4, 0x48, @@ -105,6 +136,6 @@ 0x04, 0x51, 0xef, 0xe4, 0x18, 0x65, 0x9f, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x0f, 0xd6, 0x9a, 0x54, 0x9a, 0x06, 0x61, 0x24, 0xeb, 0xa6, 0xa7, 0xe6, 0xe9, 0xa6, 0xe7, 0xeb, 0x83, 0xcc, 0x4a, 0x49, 0x2c, 0x49, 0xd4, 0x47, - 0x31, 0x2f, 0x80, 0x21, 0x80, 0x31, 0x89, 0x0d, 0xac, 0xd2, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, - 0x70, 0xc5, 0xc3, 0x79, 0x5a, 0x01, 0x00, 0x00, + 0x31, 0x2f, 0x80, 0x21, 0x80, 0x11, 0x10, 0x00, 0x00, 0xff, 0xff, 0x17, 0x83, 0x2d, 0xd4, 0x52, + 0x01, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.proto 2018-11-22 20:53:18.000000000 +0000 @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -syntax = "proto3"; +syntax = "proto2"; package goproto.test.import_public; @@ -39,7 +39,7 @@ import public "import_public/b.proto"; // Same Go package. message Public { - goproto.test.import_public.sub.M m = 1; - goproto.test.import_public.sub.E e = 2; - Local local = 3; + optional goproto.test.import_public.sub.M m = 1; + optional goproto.test.import_public.sub.E e = 2; + optional Local local = 3; } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,12 +1,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: import_public/b.proto -package import_public // import "github.com/golang/protobuf/protoc-gen-go/testdata/import_public" +package import_public -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import sub "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + sub "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -20,8 +22,8 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type Local struct { - M *sub.M `protobuf:"bytes,1,opt,name=m,proto3" json:"m,omitempty"` - E sub.E `protobuf:"varint,2,opt,name=e,proto3,enum=goproto.test.import_public.sub.E" json:"e,omitempty"` + M *sub.M `protobuf:"bytes,1,opt,name=m" json:"m,omitempty"` + E *sub.E `protobuf:"varint,2,opt,name=e,enum=goproto.test.import_public.sub.E" json:"e,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -31,16 +33,17 @@ func (m *Local) String() string { return proto.CompactTextString(m) } func (*Local) ProtoMessage() {} func (*Local) Descriptor() ([]byte, []int) { - return fileDescriptor_b_7f20a805fad67bd0, []int{0} + return fileDescriptor_84995586b3d09710, []int{0} } + func (m *Local) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Local.Unmarshal(m, b) } func (m *Local) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Local.Marshal(b, m, deterministic) } -func (dst *Local) XXX_Merge(src proto.Message) { - xxx_messageInfo_Local.Merge(dst, src) +func (m *Local) XXX_Merge(src proto.Message) { + xxx_messageInfo_Local.Merge(m, src) } func (m *Local) XXX_Size() int { return xxx_messageInfo_Local.Size(m) @@ -59,8 +62,8 @@ } func (m *Local) GetE() sub.E { - if m != nil { - return m.E + if m != nil && m.E != nil { + return *m.E } return sub.E_ZERO } @@ -69,10 +72,10 @@ proto.RegisterType((*Local)(nil), "goproto.test.import_public.Local") } -func init() { proto.RegisterFile("import_public/b.proto", fileDescriptor_b_7f20a805fad67bd0) } +func init() { proto.RegisterFile("import_public/b.proto", fileDescriptor_84995586b3d09710) } -var fileDescriptor_b_7f20a805fad67bd0 = []byte{ - // 174 bytes of a gzipped FileDescriptorProto +var fileDescriptor_84995586b3d09710 = []byte{ + // 169 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xcd, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x89, 0x2f, 0x28, 0x4d, 0xca, 0xc9, 0x4c, 0xd6, 0x4f, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x4a, 0xcf, 0x07, 0x33, 0xf4, 0x4a, 0x52, 0x8b, 0x4b, 0xf4, 0x50, 0xd4, 0x48, @@ -82,6 +85,6 @@ 0x04, 0x93, 0x02, 0xa3, 0x06, 0x1f, 0x61, 0x0d, 0xae, 0x41, 0x8c, 0xa9, 0x4e, 0x8e, 0x51, 0xf6, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0xfa, 0x60, 0x6d, 0x49, 0xa5, 0x69, 0x10, 0x46, 0xb2, 0x6e, 0x7a, 0x6a, 0x9e, 0x6e, 0x7a, - 0xbe, 0x3e, 0xc8, 0x9c, 0x94, 0xc4, 0x92, 0x44, 0x7d, 0x14, 0xb3, 0x92, 0xd8, 0xc0, 0xaa, 0x8c, - 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x2b, 0x5f, 0x8e, 0x04, 0x01, 0x00, 0x00, + 0xbe, 0x3e, 0xc8, 0x9c, 0x94, 0xc4, 0x92, 0x44, 0x7d, 0x14, 0xb3, 0x00, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x35, 0x0e, 0x6a, 0x82, 0xfc, 0x00, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.proto 2018-11-22 20:53:18.000000000 +0000 @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -syntax = "proto3"; +syntax = "proto2"; package goproto.test.import_public; @@ -38,6 +38,6 @@ import "import_public/sub/a.proto"; message Local { - goproto.test.import_public.sub.M m = 1; - goproto.test.import_public.sub.E e = 2; + optional goproto.test.import_public.sub.M m = 1; + optional goproto.test.import_public.sub.E e = 2; } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing/importing.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing/importing.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing/importing.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing/importing.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -0,0 +1,85 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: import_public/importing/importing.proto + +package importing + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + _ "github.com/golang/protobuf/protoc-gen-go/testdata/import_public" + sub "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type M struct { + // Message type defined in a file publicly imported by a file we import. + M *sub.M `protobuf:"bytes,1,opt,name=m" json:"m,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *M) Reset() { *m = M{} } +func (m *M) String() string { return proto.CompactTextString(m) } +func (*M) ProtoMessage() {} +func (*M) Descriptor() ([]byte, []int) { + return fileDescriptor_36b835b3b8f6171a, []int{0} +} + +func (m *M) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_M.Unmarshal(m, b) +} +func (m *M) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_M.Marshal(b, m, deterministic) +} +func (m *M) XXX_Merge(src proto.Message) { + xxx_messageInfo_M.Merge(m, src) +} +func (m *M) XXX_Size() int { + return xxx_messageInfo_M.Size(m) +} +func (m *M) XXX_DiscardUnknown() { + xxx_messageInfo_M.DiscardUnknown(m) +} + +var xxx_messageInfo_M proto.InternalMessageInfo + +func (m *M) GetM() *sub.M { + if m != nil { + return m.M + } + return nil +} + +func init() { + proto.RegisterType((*M)(nil), "goproto.test.import_public.importing.M") +} + +func init() { + proto.RegisterFile("import_public/importing/importing.proto", fileDescriptor_36b835b3b8f6171a) +} + +var fileDescriptor_36b835b3b8f6171a = []byte{ + // 153 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0xcc, 0x2d, 0xc8, + 0x2f, 0x2a, 0x89, 0x2f, 0x28, 0x4d, 0xca, 0xc9, 0x4c, 0xd6, 0x87, 0xf0, 0x32, 0xf3, 0xd2, 0x11, + 0x2c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x95, 0xf4, 0x7c, 0x30, 0x43, 0xaf, 0x24, 0xb5, + 0xb8, 0x44, 0x0f, 0x45, 0x97, 0x1e, 0x5c, 0xad, 0x94, 0x28, 0xaa, 0x71, 0x89, 0x10, 0xcd, 0x4a, + 0x26, 0x5c, 0x8c, 0xbe, 0x42, 0xfa, 0x5c, 0x8c, 0xb9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, + 0x8a, 0x7a, 0x78, 0x4c, 0x2b, 0x2e, 0x4d, 0xd2, 0xf3, 0x0d, 0x62, 0xcc, 0x75, 0xf2, 0x8e, 0xf2, + 0x4c, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, + 0x4b, 0xd7, 0x07, 0x6b, 0x4b, 0x2a, 0x4d, 0x83, 0x30, 0x92, 0x75, 0xd3, 0x53, 0xf3, 0x74, 0xd3, + 0xf3, 0xf5, 0x41, 0xe6, 0xa4, 0x24, 0x96, 0x24, 0xea, 0xe3, 0xf0, 0x0f, 0x20, 0x00, 0x00, 0xff, + 0xff, 0xd8, 0x7e, 0x58, 0x1c, 0xe9, 0x00, 0x00, 0x00, +} diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing/importing.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing/importing.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing/importing.proto 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing/importing.proto 2018-11-22 20:53:18.000000000 +0000 @@ -0,0 +1,43 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2018 The Go Authors. All rights reserved. +// https://github.com/golang/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. +// * 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. + +syntax = "proto2"; + +package goproto.test.import_public.importing; + +option go_package = "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/importing"; + +import "import_public/a.proto"; + +message M { + // Message type defined in a file publicly imported by a file we import. + optional goproto.test.import_public.sub.M m = 1; +} diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: import_public/sub/a.proto -package sub // import "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub" +package sub -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -27,39 +29,137 @@ var E_name = map[int32]string{ 0: "ZERO", } + var E_value = map[string]int32{ "ZERO": 0, } +func (x E) Enum() *E { + p := new(E) + *p = x + return p +} + func (x E) String() string { return proto.EnumName(E_name, int32(x)) } + +func (x *E) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(E_value, data, "E") + if err != nil { + return err + } + *x = E(value) + return nil +} + func (E) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_91ca0264a534463a, []int{0} + return fileDescriptor_382f7805394b5c4e, []int{0} +} + +type M_Subenum int32 + +const ( + M_M_ZERO M_Subenum = 0 +) + +var M_Subenum_name = map[int32]string{ + 0: "M_ZERO", +} + +var M_Subenum_value = map[string]int32{ + "M_ZERO": 0, +} + +func (x M_Subenum) Enum() *M_Subenum { + p := new(M_Subenum) + *p = x + return p +} + +func (x M_Subenum) String() string { + return proto.EnumName(M_Subenum_name, int32(x)) +} + +func (x *M_Subenum) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(M_Subenum_value, data, "M_Subenum") + if err != nil { + return err + } + *x = M_Subenum(value) + return nil +} + +func (M_Subenum) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_382f7805394b5c4e, []int{0, 0} +} + +type M_Submessage_Submessage_Subenum int32 + +const ( + M_Submessage_M_SUBMESSAGE_ZERO M_Submessage_Submessage_Subenum = 0 +) + +var M_Submessage_Submessage_Subenum_name = map[int32]string{ + 0: "M_SUBMESSAGE_ZERO", +} + +var M_Submessage_Submessage_Subenum_value = map[string]int32{ + "M_SUBMESSAGE_ZERO": 0, +} + +func (x M_Submessage_Submessage_Subenum) Enum() *M_Submessage_Submessage_Subenum { + p := new(M_Submessage_Submessage_Subenum) + *p = x + return p +} + +func (x M_Submessage_Submessage_Subenum) String() string { + return proto.EnumName(M_Submessage_Submessage_Subenum_name, int32(x)) +} + +func (x *M_Submessage_Submessage_Subenum) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(M_Submessage_Submessage_Subenum_value, data, "M_Submessage_Submessage_Subenum") + if err != nil { + return err + } + *x = M_Submessage_Submessage_Subenum(value) + return nil +} + +func (M_Submessage_Submessage_Subenum) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_382f7805394b5c4e, []int{0, 1, 0} } type M struct { // Field using a type in the same Go package, but a different source file. - M2 *M2 `protobuf:"bytes,1,opt,name=m2,proto3" json:"m2,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + M2 *M2 `protobuf:"bytes,1,opt,name=m2" json:"m2,omitempty"` + // Types that are valid to be assigned to OneofField: + // *M_OneofInt32 + // *M_OneofInt64 + OneofField isM_OneofField `protobuf_oneof:"oneof_field"` + Grouping *M_Grouping `protobuf:"group,4,opt,name=Grouping,json=grouping" json:"grouping,omitempty"` + DefaultField *string `protobuf:"bytes,6,opt,name=default_field,json=defaultField,def=def" json:"default_field,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *M) Reset() { *m = M{} } func (m *M) String() string { return proto.CompactTextString(m) } func (*M) ProtoMessage() {} func (*M) Descriptor() ([]byte, []int) { - return fileDescriptor_a_91ca0264a534463a, []int{0} + return fileDescriptor_382f7805394b5c4e, []int{0} } + func (m *M) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M.Unmarshal(m, b) } func (m *M) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M.Marshal(b, m, deterministic) } -func (dst *M) XXX_Merge(src proto.Message) { - xxx_messageInfo_M.Merge(dst, src) +func (m *M) XXX_Merge(src proto.Message) { + xxx_messageInfo_M.Merge(m, src) } func (m *M) XXX_Size() int { return xxx_messageInfo_M.Size(m) @@ -70,6 +170,8 @@ var xxx_messageInfo_M proto.InternalMessageInfo +const Default_M_DefaultField string = "def" + func (m *M) GetM2() *M2 { if m != nil { return m.M2 @@ -77,24 +179,343 @@ return nil } -func init() { - proto.RegisterType((*M)(nil), "goproto.test.import_public.sub.M") - proto.RegisterEnum("goproto.test.import_public.sub.E", E_name, E_value) +type isM_OneofField interface { + isM_OneofField() +} + +type M_OneofInt32 struct { + OneofInt32 int32 `protobuf:"varint,2,opt,name=oneof_int32,json=oneofInt32,oneof"` +} + +type M_OneofInt64 struct { + OneofInt64 int64 `protobuf:"varint,3,opt,name=oneof_int64,json=oneofInt64,oneof"` } -func init() { proto.RegisterFile("import_public/sub/a.proto", fileDescriptor_a_91ca0264a534463a) } +func (*M_OneofInt32) isM_OneofField() {} -var fileDescriptor_a_91ca0264a534463a = []byte{ - // 172 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8, - 0x2f, 0x2a, 0x89, 0x2f, 0x28, 0x4d, 0xca, 0xc9, 0x4c, 0xd6, 0x2f, 0x2e, 0x4d, 0xd2, 0x4f, 0xd4, - 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x4b, 0xcf, 0x07, 0x33, 0xf4, 0x4a, 0x52, 0x8b, 0x4b, - 0xf4, 0x50, 0xd4, 0xe9, 0x15, 0x97, 0x26, 0x49, 0x61, 0xd1, 0x9a, 0x04, 0xd1, 0xaa, 0x64, 0xce, - 0xc5, 0xe8, 0x2b, 0x64, 0xc4, 0xc5, 0x94, 0x6b, 0x24, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x6d, 0xa4, - 0xa4, 0x87, 0xdf, 0x30, 0x3d, 0x5f, 0xa3, 0x20, 0xa6, 0x5c, 0x23, 0x2d, 0x5e, 0x2e, 0x46, 0x57, - 0x21, 0x0e, 0x2e, 0x96, 0x28, 0xd7, 0x20, 0x7f, 0x01, 0x06, 0x27, 0xd7, 0x28, 0xe7, 0xf4, 0xcc, - 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0x7d, - 0xb0, 0x39, 0x49, 0xa5, 0x69, 0x10, 0x46, 0xb2, 0x6e, 0x7a, 0x6a, 0x9e, 0x6e, 0x7a, 0xbe, 0x3e, - 0xc8, 0xe0, 0x94, 0xc4, 0x92, 0x44, 0x7d, 0x0c, 0x67, 0x25, 0xb1, 0x81, 0x55, 0x1a, 0x03, 0x02, - 0x00, 0x00, 0xff, 0xff, 0x81, 0xcc, 0x07, 0x7d, 0xed, 0x00, 0x00, 0x00, +func (*M_OneofInt64) isM_OneofField() {} + +func (m *M) GetOneofField() isM_OneofField { + if m != nil { + return m.OneofField + } + return nil +} + +func (m *M) GetOneofInt32() int32 { + if x, ok := m.GetOneofField().(*M_OneofInt32); ok { + return x.OneofInt32 + } + return 0 +} + +func (m *M) GetOneofInt64() int64 { + if x, ok := m.GetOneofField().(*M_OneofInt64); ok { + return x.OneofInt64 + } + return 0 +} + +func (m *M) GetGrouping() *M_Grouping { + if m != nil { + return m.Grouping + } + return nil +} + +func (m *M) GetDefaultField() string { + if m != nil && m.DefaultField != nil { + return *m.DefaultField + } + return Default_M_DefaultField +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*M) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _M_OneofMarshaler, _M_OneofUnmarshaler, _M_OneofSizer, []interface{}{ + (*M_OneofInt32)(nil), + (*M_OneofInt64)(nil), + } +} + +func _M_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*M) + // oneof_field + switch x := m.OneofField.(type) { + case *M_OneofInt32: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.OneofInt32)) + case *M_OneofInt64: + b.EncodeVarint(3<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.OneofInt64)) + case nil: + default: + return fmt.Errorf("M.OneofField has unexpected type %T", x) + } + return nil +} + +func _M_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*M) + switch tag { + case 2: // oneof_field.oneof_int32 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.OneofField = &M_OneofInt32{int32(x)} + return true, err + case 3: // oneof_field.oneof_int64 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.OneofField = &M_OneofInt64{int64(x)} + return true, err + default: + return false, nil + } +} + +func _M_OneofSizer(msg proto.Message) (n int) { + m := msg.(*M) + // oneof_field + switch x := m.OneofField.(type) { + case *M_OneofInt32: + n += 1 // tag and wire + n += proto.SizeVarint(uint64(x.OneofInt32)) + case *M_OneofInt64: + n += 1 // tag and wire + n += proto.SizeVarint(uint64(x.OneofInt64)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type M_Grouping struct { + GroupField *string `protobuf:"bytes,5,opt,name=group_field,json=groupField" json:"group_field,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *M_Grouping) Reset() { *m = M_Grouping{} } +func (m *M_Grouping) String() string { return proto.CompactTextString(m) } +func (*M_Grouping) ProtoMessage() {} +func (*M_Grouping) Descriptor() ([]byte, []int) { + return fileDescriptor_382f7805394b5c4e, []int{0, 0} +} + +func (m *M_Grouping) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_M_Grouping.Unmarshal(m, b) +} +func (m *M_Grouping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_M_Grouping.Marshal(b, m, deterministic) +} +func (m *M_Grouping) XXX_Merge(src proto.Message) { + xxx_messageInfo_M_Grouping.Merge(m, src) +} +func (m *M_Grouping) XXX_Size() int { + return xxx_messageInfo_M_Grouping.Size(m) +} +func (m *M_Grouping) XXX_DiscardUnknown() { + xxx_messageInfo_M_Grouping.DiscardUnknown(m) +} + +var xxx_messageInfo_M_Grouping proto.InternalMessageInfo + +func (m *M_Grouping) GetGroupField() string { + if m != nil && m.GroupField != nil { + return *m.GroupField + } + return "" +} + +type M_Submessage struct { + // Types that are valid to be assigned to SubmessageOneofField: + // *M_Submessage_SubmessageOneofInt32 + // *M_Submessage_SubmessageOneofInt64 + SubmessageOneofField isM_Submessage_SubmessageOneofField `protobuf_oneof:"submessage_oneof_field"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *M_Submessage) Reset() { *m = M_Submessage{} } +func (m *M_Submessage) String() string { return proto.CompactTextString(m) } +func (*M_Submessage) ProtoMessage() {} +func (*M_Submessage) Descriptor() ([]byte, []int) { + return fileDescriptor_382f7805394b5c4e, []int{0, 1} +} + +func (m *M_Submessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_M_Submessage.Unmarshal(m, b) +} +func (m *M_Submessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_M_Submessage.Marshal(b, m, deterministic) +} +func (m *M_Submessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_M_Submessage.Merge(m, src) +} +func (m *M_Submessage) XXX_Size() int { + return xxx_messageInfo_M_Submessage.Size(m) +} +func (m *M_Submessage) XXX_DiscardUnknown() { + xxx_messageInfo_M_Submessage.DiscardUnknown(m) +} + +var xxx_messageInfo_M_Submessage proto.InternalMessageInfo + +type isM_Submessage_SubmessageOneofField interface { + isM_Submessage_SubmessageOneofField() +} + +type M_Submessage_SubmessageOneofInt32 struct { + SubmessageOneofInt32 int32 `protobuf:"varint,1,opt,name=submessage_oneof_int32,json=submessageOneofInt32,oneof"` +} + +type M_Submessage_SubmessageOneofInt64 struct { + SubmessageOneofInt64 int64 `protobuf:"varint,2,opt,name=submessage_oneof_int64,json=submessageOneofInt64,oneof"` +} + +func (*M_Submessage_SubmessageOneofInt32) isM_Submessage_SubmessageOneofField() {} + +func (*M_Submessage_SubmessageOneofInt64) isM_Submessage_SubmessageOneofField() {} + +func (m *M_Submessage) GetSubmessageOneofField() isM_Submessage_SubmessageOneofField { + if m != nil { + return m.SubmessageOneofField + } + return nil +} + +func (m *M_Submessage) GetSubmessageOneofInt32() int32 { + if x, ok := m.GetSubmessageOneofField().(*M_Submessage_SubmessageOneofInt32); ok { + return x.SubmessageOneofInt32 + } + return 0 +} + +func (m *M_Submessage) GetSubmessageOneofInt64() int64 { + if x, ok := m.GetSubmessageOneofField().(*M_Submessage_SubmessageOneofInt64); ok { + return x.SubmessageOneofInt64 + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*M_Submessage) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _M_Submessage_OneofMarshaler, _M_Submessage_OneofUnmarshaler, _M_Submessage_OneofSizer, []interface{}{ + (*M_Submessage_SubmessageOneofInt32)(nil), + (*M_Submessage_SubmessageOneofInt64)(nil), + } +} + +func _M_Submessage_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*M_Submessage) + // submessage_oneof_field + switch x := m.SubmessageOneofField.(type) { + case *M_Submessage_SubmessageOneofInt32: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.SubmessageOneofInt32)) + case *M_Submessage_SubmessageOneofInt64: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.SubmessageOneofInt64)) + case nil: + default: + return fmt.Errorf("M_Submessage.SubmessageOneofField has unexpected type %T", x) + } + return nil +} + +func _M_Submessage_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*M_Submessage) + switch tag { + case 1: // submessage_oneof_field.submessage_oneof_int32 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.SubmessageOneofField = &M_Submessage_SubmessageOneofInt32{int32(x)} + return true, err + case 2: // submessage_oneof_field.submessage_oneof_int64 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.SubmessageOneofField = &M_Submessage_SubmessageOneofInt64{int64(x)} + return true, err + default: + return false, nil + } +} + +func _M_Submessage_OneofSizer(msg proto.Message) (n int) { + m := msg.(*M_Submessage) + // submessage_oneof_field + switch x := m.SubmessageOneofField.(type) { + case *M_Submessage_SubmessageOneofInt32: + n += 1 // tag and wire + n += proto.SizeVarint(uint64(x.SubmessageOneofInt32)) + case *M_Submessage_SubmessageOneofInt64: + n += 1 // tag and wire + n += proto.SizeVarint(uint64(x.SubmessageOneofInt64)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +var E_ExtensionField = &proto.ExtensionDesc{ + ExtendedType: (*M2)(nil), + ExtensionType: (*string)(nil), + Field: 1, + Name: "goproto.test.import_public.sub.extension_field", + Tag: "bytes,1,opt,name=extension_field", + Filename: "import_public/sub/a.proto", +} + +func init() { + proto.RegisterEnum("goproto.test.import_public.sub.E", E_name, E_value) + proto.RegisterEnum("goproto.test.import_public.sub.M_Subenum", M_Subenum_name, M_Subenum_value) + proto.RegisterEnum("goproto.test.import_public.sub.M_Submessage_Submessage_Subenum", M_Submessage_Submessage_Subenum_name, M_Submessage_Submessage_Subenum_value) + proto.RegisterType((*M)(nil), "goproto.test.import_public.sub.M") + proto.RegisterType((*M_Grouping)(nil), "goproto.test.import_public.sub.M.Grouping") + proto.RegisterType((*M_Submessage)(nil), "goproto.test.import_public.sub.M.Submessage") + proto.RegisterExtension(E_ExtensionField) +} + +func init() { proto.RegisterFile("import_public/sub/a.proto", fileDescriptor_382f7805394b5c4e) } + +var fileDescriptor_382f7805394b5c4e = []byte{ + // 410 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcf, 0x6e, 0xd3, 0x40, + 0x10, 0xc6, 0xbb, 0x49, 0x5a, 0xd2, 0x09, 0xe1, 0xcf, 0x8a, 0x22, 0xd3, 0x03, 0x98, 0x9c, 0xac, + 0x56, 0x5d, 0x4b, 0x26, 0xf2, 0xa1, 0x37, 0x82, 0xdc, 0x82, 0x90, 0x55, 0xc9, 0x16, 0x97, 0x5e, + 0x2c, 0x6f, 0xbc, 0x5e, 0x2c, 0xd9, 0xbb, 0x56, 0xbc, 0x2b, 0xf1, 0x08, 0xbc, 0x17, 0x2f, 0x86, + 0xbc, 0xb6, 0x93, 0x46, 0x04, 0xe8, 0x6d, 0x3d, 0xf3, 0xfd, 0xbe, 0xd1, 0x7c, 0x1e, 0x78, 0x53, + 0x54, 0xb5, 0xdc, 0xa8, 0xa4, 0xd6, 0xb4, 0x2c, 0xd6, 0x6e, 0xa3, 0xa9, 0x9b, 0x92, 0x7a, 0x23, + 0x95, 0xc4, 0x6f, 0xb9, 0x34, 0x0f, 0xa2, 0x58, 0xa3, 0xc8, 0x9e, 0x8e, 0x34, 0x9a, 0x9e, 0x1f, + 0x40, 0x69, 0x87, 0x2e, 0x7e, 0x4e, 0x00, 0x85, 0xd8, 0x83, 0x51, 0xe5, 0x59, 0xc8, 0x46, 0xce, + 0xcc, 0x5b, 0x90, 0x7f, 0xbb, 0x91, 0xd0, 0x8b, 0x46, 0x95, 0x87, 0xdf, 0xc3, 0x4c, 0x0a, 0x26, + 0xf3, 0xa4, 0x10, 0xea, 0x83, 0x67, 0x8d, 0x6c, 0xe4, 0x1c, 0x7f, 0x3e, 0x8a, 0xc0, 0x14, 0xbf, + 0xb4, 0xb5, 0x3d, 0x89, 0xbf, 0xb4, 0xc6, 0x36, 0x72, 0xc6, 0x0f, 0x25, 0xfe, 0x12, 0xdf, 0xc0, + 0x94, 0x6f, 0xa4, 0xae, 0x0b, 0xc1, 0xad, 0x89, 0x8d, 0x1c, 0xf0, 0x2e, 0xfe, 0x3b, 0x9f, 0xdc, + 0xf6, 0x44, 0xb4, 0x65, 0xb1, 0x03, 0xf3, 0x8c, 0xe5, 0xa9, 0x2e, 0x55, 0x92, 0x17, 0xac, 0xcc, + 0xac, 0x13, 0x1b, 0x39, 0xa7, 0xd7, 0xe3, 0x8c, 0xe5, 0xd1, 0xd3, 0xbe, 0x73, 0xd3, 0x36, 0xce, + 0x2f, 0x61, 0x3a, 0xf0, 0xf8, 0x1d, 0xcc, 0x8c, 0x43, 0xcf, 0x1c, 0xb7, 0x4c, 0x04, 0xa6, 0xd4, + 0x89, 0x7f, 0x21, 0x80, 0x58, 0xd3, 0x8a, 0x35, 0x4d, 0xca, 0x19, 0xf6, 0xe1, 0x75, 0xb3, 0xfd, + 0x4a, 0x1e, 0xae, 0x8f, 0xfa, 0xf5, 0x5f, 0xed, 0xfa, 0x77, 0xbb, 0x20, 0xfe, 0xc2, 0xf9, 0x4b, + 0x13, 0xdb, 0xf8, 0x30, 0xe7, 0x2f, 0x17, 0x97, 0x80, 0x77, 0xd3, 0x93, 0x58, 0x53, 0x26, 0x74, + 0x85, 0xcf, 0xe0, 0x65, 0x98, 0xc4, 0xdf, 0x56, 0x61, 0x10, 0xc7, 0x1f, 0x6f, 0x83, 0xe4, 0x3e, + 0x88, 0xee, 0x5e, 0x1c, 0xad, 0xac, 0x03, 0x43, 0xcc, 0x5e, 0x8b, 0x33, 0x78, 0x32, 0xb0, 0x00, + 0x27, 0xe1, 0x00, 0xcc, 0x87, 0xdf, 0x63, 0x54, 0x17, 0x73, 0x40, 0x01, 0x9e, 0xc2, 0xa4, 0xeb, + 0x5e, 0x7f, 0x85, 0xe7, 0xec, 0x87, 0x62, 0xa2, 0x29, 0xa4, 0xe8, 0x14, 0xf8, 0x11, 0xa7, 0x61, + 0x82, 0x38, 0x8d, 0x9e, 0x6d, 0x51, 0x93, 0xe3, 0x2a, 0xb8, 0xff, 0xc4, 0x0b, 0xf5, 0x5d, 0x53, + 0xb2, 0x96, 0x95, 0xcb, 0x65, 0x99, 0x0a, 0xee, 0x1a, 0x2b, 0xaa, 0xf3, 0xee, 0xb1, 0xbe, 0xe2, + 0x4c, 0x5c, 0x71, 0xe9, 0xb6, 0xde, 0x59, 0xaa, 0x52, 0xf7, 0x8f, 0xab, 0xfd, 0x1d, 0x00, 0x00, + 0xff, 0xff, 0x13, 0x4f, 0x31, 0x07, 0x04, 0x03, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.proto 2018-11-22 20:53:18.000000000 +0000 @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -syntax = "proto3"; +syntax = "proto2"; package goproto.test.import_public.sub; @@ -39,9 +39,39 @@ message M { // Field using a type in the same Go package, but a different source file. - M2 m2 = 1; + optional M2 m2 = 1; + + oneof oneof_field { + int32 oneof_int32 = 2; + int64 oneof_int64 = 3; + } + + optional group Grouping = 4 { + optional string group_field = 5; + } + + optional string default_field = 6 [default="def"]; + + message Submessage { + enum Submessage_Subenum { + M_SUBMESSAGE_ZERO = 0; + } + + oneof submessage_oneof_field { + int32 submessage_oneof_int32 = 1; + int64 submessage_oneof_int64 = 2; + } + } + + enum Subenum { + M_ZERO = 0; + } } enum E { ZERO = 0; } + +extend M2 { + optional string extension_field = 1; +} diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: import_public/sub/b.proto -package sub // import "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub" +package sub -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -19,25 +21,35 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type M2 struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *M2) Reset() { *m = M2{} } func (m *M2) String() string { return proto.CompactTextString(m) } func (*M2) ProtoMessage() {} func (*M2) Descriptor() ([]byte, []int) { - return fileDescriptor_b_eba25180453d86b4, []int{0} + return fileDescriptor_fc66afda3d7c2232, []int{0} } + +var extRange_M2 = []proto.ExtensionRange{ + {Start: 1, End: 536870911}, +} + +func (*M2) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_M2 +} + func (m *M2) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M2.Unmarshal(m, b) } func (m *M2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M2.Marshal(b, m, deterministic) } -func (dst *M2) XXX_Merge(src proto.Message) { - xxx_messageInfo_M2.Merge(dst, src) +func (m *M2) XXX_Merge(src proto.Message) { + xxx_messageInfo_M2.Merge(m, src) } func (m *M2) XXX_Size() int { return xxx_messageInfo_M2.Size(m) @@ -52,16 +64,17 @@ proto.RegisterType((*M2)(nil), "goproto.test.import_public.sub.M2") } -func init() { proto.RegisterFile("import_public/sub/b.proto", fileDescriptor_b_eba25180453d86b4) } +func init() { proto.RegisterFile("import_public/sub/b.proto", fileDescriptor_fc66afda3d7c2232) } -var fileDescriptor_b_eba25180453d86b4 = []byte{ - // 127 bytes of a gzipped FileDescriptorProto +var fileDescriptor_fc66afda3d7c2232 = []byte{ + // 132 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x89, 0x2f, 0x28, 0x4d, 0xca, 0xc9, 0x4c, 0xd6, 0x2f, 0x2e, 0x4d, 0xd2, 0x4f, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x4b, 0xcf, 0x07, 0x33, 0xf4, 0x4a, 0x52, 0x8b, 0x4b, - 0xf4, 0x50, 0xd4, 0xe9, 0x15, 0x97, 0x26, 0x29, 0xb1, 0x70, 0x31, 0xf9, 0x1a, 0x39, 0xb9, 0x46, - 0x39, 0xa7, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xa7, 0xe7, 0xe7, 0x24, - 0xe6, 0xa5, 0xeb, 0x83, 0xf5, 0x25, 0x95, 0xa6, 0x41, 0x18, 0xc9, 0xba, 0xe9, 0xa9, 0x79, 0xba, - 0xe9, 0xf9, 0xfa, 0x20, 0x83, 0x52, 0x12, 0x4b, 0x12, 0xf5, 0x31, 0x2c, 0x4d, 0x62, 0x03, 0xab, - 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x64, 0x42, 0xe4, 0xa8, 0x90, 0x00, 0x00, 0x00, + 0xf4, 0x50, 0xd4, 0xe9, 0x15, 0x97, 0x26, 0x29, 0xf1, 0x71, 0x31, 0xf9, 0x1a, 0x69, 0x71, 0x70, + 0x30, 0x0a, 0x34, 0x34, 0x34, 0x34, 0x30, 0x39, 0xb9, 0x46, 0x39, 0xa7, 0x67, 0x96, 0x64, 0x94, + 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0x83, 0x4d, 0x48, + 0x2a, 0x4d, 0x83, 0x30, 0x92, 0x75, 0xd3, 0x53, 0xf3, 0x74, 0xd3, 0xf3, 0xf5, 0x41, 0x46, 0xa6, + 0x24, 0x96, 0x24, 0xea, 0x63, 0x58, 0x0f, 0x08, 0x00, 0x00, 0xff, 0xff, 0x87, 0x44, 0x22, 0x2d, + 0x92, 0x00, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.proto 2018-11-22 20:53:18.000000000 +0000 @@ -29,11 +29,12 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -syntax = "proto3"; +syntax = "proto2"; package goproto.test.import_public.sub; option go_package = "github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub"; message M2 { + extensions 1 to max; } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public_test.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public_test.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public_test.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public_test.go 2018-11-22 20:53:18.000000000 +0000 @@ -46,18 +46,18 @@ var _ mainpb.E = subpb.E(0) _ = &mainpb.Public{ M: &mainpb.M{}, - E: mainpb.E_ZERO, + E: mainpb.E_ZERO.Enum(), Local: &mainpb.Local{ M: &mainpb.M{}, - E: mainpb.E_ZERO, + E: mainpb.E_ZERO.Enum(), }, } _ = &mainpb.Public{ M: &subpb.M{}, - E: subpb.E_ZERO, + E: subpb.E_ZERO.Enum(), Local: &mainpb.Local{ M: &subpb.M{}, - E: subpb.E_ZERO, + E: subpb.E_ZERO.Enum(), }, } _ = &mainpb.M{ diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt/m.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt/m.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt/m.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt/m.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/fmt/m.proto -package fmt // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt" +package fmt -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -28,16 +30,17 @@ func (m *M) String() string { return proto.CompactTextString(m) } func (*M) ProtoMessage() {} func (*M) Descriptor() ([]byte, []int) { - return fileDescriptor_m_867dd34c461422b8, []int{0} + return fileDescriptor_72c126fcd452e392, []int{0} } + func (m *M) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M.Unmarshal(m, b) } func (m *M) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M.Marshal(b, m, deterministic) } -func (dst *M) XXX_Merge(src proto.Message) { - xxx_messageInfo_M.Merge(dst, src) +func (m *M) XXX_Merge(src proto.Message) { + xxx_messageInfo_M.Merge(m, src) } func (m *M) XXX_Size() int { return xxx_messageInfo_M.Size(m) @@ -52,9 +55,9 @@ proto.RegisterType((*M)(nil), "fmt.M") } -func init() { proto.RegisterFile("imports/fmt/m.proto", fileDescriptor_m_867dd34c461422b8) } +func init() { proto.RegisterFile("imports/fmt/m.proto", fileDescriptor_72c126fcd452e392) } -var fileDescriptor_m_867dd34c461422b8 = []byte{ +var fileDescriptor_72c126fcd452e392 = []byte{ // 109 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xce, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x4f, 0xcb, 0x2d, 0xd1, 0xcf, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_a_1/m1.proto -package test_a_1 // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1" +package test_a_1 -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -27,6 +29,7 @@ var E1_name = map[int32]string{ 0: "E1_ZERO", } + var E1_value = map[string]int32{ "E1_ZERO": 0, } @@ -34,8 +37,9 @@ func (x E1) String() string { return proto.EnumName(E1_name, int32(x)) } + func (E1) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_m1_56a2598431d21e61, []int{0} + return fileDescriptor_c1091de3fa870a14, []int{0} } type M1 struct { @@ -48,16 +52,17 @@ func (m *M1) String() string { return proto.CompactTextString(m) } func (*M1) ProtoMessage() {} func (*M1) Descriptor() ([]byte, []int) { - return fileDescriptor_m1_56a2598431d21e61, []int{0} + return fileDescriptor_c1091de3fa870a14, []int{0} } + func (m *M1) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M1.Unmarshal(m, b) } func (m *M1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M1.Marshal(b, m, deterministic) } -func (dst *M1) XXX_Merge(src proto.Message) { - xxx_messageInfo_M1.Merge(dst, src) +func (m *M1) XXX_Merge(src proto.Message) { + xxx_messageInfo_M1.Merge(m, src) } func (m *M1) XXX_Size() int { return xxx_messageInfo_M1.Size(m) @@ -79,16 +84,17 @@ func (m *M1_1) String() string { return proto.CompactTextString(m) } func (*M1_1) ProtoMessage() {} func (*M1_1) Descriptor() ([]byte, []int) { - return fileDescriptor_m1_56a2598431d21e61, []int{1} + return fileDescriptor_c1091de3fa870a14, []int{1} } + func (m *M1_1) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M1_1.Unmarshal(m, b) } func (m *M1_1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M1_1.Marshal(b, m, deterministic) } -func (dst *M1_1) XXX_Merge(src proto.Message) { - xxx_messageInfo_M1_1.Merge(dst, src) +func (m *M1_1) XXX_Merge(src proto.Message) { + xxx_messageInfo_M1_1.Merge(m, src) } func (m *M1_1) XXX_Size() int { return xxx_messageInfo_M1_1.Size(m) @@ -107,14 +113,14 @@ } func init() { + proto.RegisterEnum("test.a.E1", E1_name, E1_value) proto.RegisterType((*M1)(nil), "test.a.M1") proto.RegisterType((*M1_1)(nil), "test.a.M1_1") - proto.RegisterEnum("test.a.E1", E1_name, E1_value) } -func init() { proto.RegisterFile("imports/test_a_1/m1.proto", fileDescriptor_m1_56a2598431d21e61) } +func init() { proto.RegisterFile("imports/test_a_1/m1.proto", fileDescriptor_c1091de3fa870a14) } -var fileDescriptor_m1_56a2598431d21e61 = []byte{ +var fileDescriptor_c1091de3fa870a14 = []byte{ // 165 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8c, 0x37, 0xd4, 0xcf, 0x35, 0xd4, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_a_1/m2.proto -package test_a_1 // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1" +package test_a_1 -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -28,16 +30,17 @@ func (m *M2) String() string { return proto.CompactTextString(m) } func (*M2) ProtoMessage() {} func (*M2) Descriptor() ([]byte, []int) { - return fileDescriptor_m2_ccd6356c045a9ac3, []int{0} + return fileDescriptor_20cf27515c0d621c, []int{0} } + func (m *M2) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M2.Unmarshal(m, b) } func (m *M2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M2.Marshal(b, m, deterministic) } -func (dst *M2) XXX_Merge(src proto.Message) { - xxx_messageInfo_M2.Merge(dst, src) +func (m *M2) XXX_Merge(src proto.Message) { + xxx_messageInfo_M2.Merge(m, src) } func (m *M2) XXX_Size() int { return xxx_messageInfo_M2.Size(m) @@ -52,9 +55,9 @@ proto.RegisterType((*M2)(nil), "test.a.M2") } -func init() { proto.RegisterFile("imports/test_a_1/m2.proto", fileDescriptor_m2_ccd6356c045a9ac3) } +func init() { proto.RegisterFile("imports/test_a_1/m2.proto", fileDescriptor_20cf27515c0d621c) } -var fileDescriptor_m2_ccd6356c045a9ac3 = []byte{ +var fileDescriptor_20cf27515c0d621c = []byte{ // 114 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8c, 0x37, 0xd4, 0xcf, 0x35, 0xd2, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_a_2/m3.proto -package test_a_2 // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2" +package test_a_2 -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -28,16 +30,17 @@ func (m *M3) String() string { return proto.CompactTextString(m) } func (*M3) ProtoMessage() {} func (*M3) Descriptor() ([]byte, []int) { - return fileDescriptor_m3_de310e87d08d4216, []int{0} + return fileDescriptor_ff9d8f834875c9c5, []int{0} } + func (m *M3) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M3.Unmarshal(m, b) } func (m *M3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M3.Marshal(b, m, deterministic) } -func (dst *M3) XXX_Merge(src proto.Message) { - xxx_messageInfo_M3.Merge(dst, src) +func (m *M3) XXX_Merge(src proto.Message) { + xxx_messageInfo_M3.Merge(m, src) } func (m *M3) XXX_Size() int { return xxx_messageInfo_M3.Size(m) @@ -52,9 +55,9 @@ proto.RegisterType((*M3)(nil), "test.a.M3") } -func init() { proto.RegisterFile("imports/test_a_2/m3.proto", fileDescriptor_m3_de310e87d08d4216) } +func init() { proto.RegisterFile("imports/test_a_2/m3.proto", fileDescriptor_ff9d8f834875c9c5) } -var fileDescriptor_m3_de310e87d08d4216 = []byte{ +var fileDescriptor_ff9d8f834875c9c5 = []byte{ // 114 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8c, 0x37, 0xd2, 0xcf, 0x35, 0xd6, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go 2018-11-22 20:53:18.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_a_2/m4.proto -package test_a_2 // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2" +package test_a_2 -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -28,16 +30,17 @@ func (m *M4) String() string { return proto.CompactTextString(m) } func (*M4) ProtoMessage() {} func (*M4) Descriptor() ([]byte, []int) { - return fileDescriptor_m4_da12b386229f3791, []int{0} + return fileDescriptor_fdd24f82f6c5a786, []int{0} } + func (m *M4) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M4.Unmarshal(m, b) } func (m *M4) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M4.Marshal(b, m, deterministic) } -func (dst *M4) XXX_Merge(src proto.Message) { - xxx_messageInfo_M4.Merge(dst, src) +func (m *M4) XXX_Merge(src proto.Message) { + xxx_messageInfo_M4.Merge(m, src) } func (m *M4) XXX_Size() int { return xxx_messageInfo_M4.Size(m) @@ -52,9 +55,9 @@ proto.RegisterType((*M4)(nil), "test.a.M4") } -func init() { proto.RegisterFile("imports/test_a_2/m4.proto", fileDescriptor_m4_da12b386229f3791) } +func init() { proto.RegisterFile("imports/test_a_2/m4.proto", fileDescriptor_fdd24f82f6c5a786) } -var fileDescriptor_m4_da12b386229f3791 = []byte{ +var fileDescriptor_fdd24f82f6c5a786 = []byte{ // 114 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8c, 0x37, 0xd2, 0xcf, 0x35, 0xd1, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_b_1/m1.proto -package beta // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1" +package beta -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -28,16 +30,17 @@ func (m *M1) String() string { return proto.CompactTextString(m) } func (*M1) ProtoMessage() {} func (*M1) Descriptor() ([]byte, []int) { - return fileDescriptor_m1_aff127b054aec649, []int{0} + return fileDescriptor_7f49573d035512a8, []int{0} } + func (m *M1) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M1.Unmarshal(m, b) } func (m *M1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M1.Marshal(b, m, deterministic) } -func (dst *M1) XXX_Merge(src proto.Message) { - xxx_messageInfo_M1.Merge(dst, src) +func (m *M1) XXX_Merge(src proto.Message) { + xxx_messageInfo_M1.Merge(m, src) } func (m *M1) XXX_Size() int { return xxx_messageInfo_M1.Size(m) @@ -52,9 +55,9 @@ proto.RegisterType((*M1)(nil), "test.b.part1.M1") } -func init() { proto.RegisterFile("imports/test_b_1/m1.proto", fileDescriptor_m1_aff127b054aec649) } +func init() { proto.RegisterFile("imports/test_b_1/m1.proto", fileDescriptor_7f49573d035512a8) } -var fileDescriptor_m1_aff127b054aec649 = []byte{ +var fileDescriptor_7f49573d035512a8 = []byte{ // 125 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8a, 0x37, 0xd4, 0xcf, 0x35, 0xd4, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_b_1/m2.proto -package beta // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1" +package beta -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -28,16 +30,17 @@ func (m *M2) String() string { return proto.CompactTextString(m) } func (*M2) ProtoMessage() {} func (*M2) Descriptor() ([]byte, []int) { - return fileDescriptor_m2_0c59cab35ba1b0d8, []int{0} + return fileDescriptor_a1becddceeb586f2, []int{0} } + func (m *M2) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_M2.Unmarshal(m, b) } func (m *M2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_M2.Marshal(b, m, deterministic) } -func (dst *M2) XXX_Merge(src proto.Message) { - xxx_messageInfo_M2.Merge(dst, src) +func (m *M2) XXX_Merge(src proto.Message) { + xxx_messageInfo_M2.Merge(m, src) } func (m *M2) XXX_Size() int { return xxx_messageInfo_M2.Size(m) @@ -52,9 +55,9 @@ proto.RegisterType((*M2)(nil), "test.b.part2.M2") } -func init() { proto.RegisterFile("imports/test_b_1/m2.proto", fileDescriptor_m2_0c59cab35ba1b0d8) } +func init() { proto.RegisterFile("imports/test_b_1/m2.proto", fileDescriptor_a1becddceeb586f2) } -var fileDescriptor_m2_0c59cab35ba1b0d8 = []byte{ +var fileDescriptor_a1becddceeb586f2 = []byte{ // 125 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8a, 0x37, 0xd4, 0xcf, 0x35, 0xd2, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,12 +1,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_import_a1m1.proto -package imports // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports" +package imports -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -30,16 +32,17 @@ func (m *A1M1) String() string { return proto.CompactTextString(m) } func (*A1M1) ProtoMessage() {} func (*A1M1) Descriptor() ([]byte, []int) { - return fileDescriptor_test_import_a1m1_d7f2b5c638a69f6e, []int{0} + return fileDescriptor_3b904a47327455f3, []int{0} } + func (m *A1M1) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_A1M1.Unmarshal(m, b) } func (m *A1M1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_A1M1.Marshal(b, m, deterministic) } -func (dst *A1M1) XXX_Merge(src proto.Message) { - xxx_messageInfo_A1M1.Merge(dst, src) +func (m *A1M1) XXX_Merge(src proto.Message) { + xxx_messageInfo_A1M1.Merge(m, src) } func (m *A1M1) XXX_Size() int { return xxx_messageInfo_A1M1.Size(m) @@ -61,11 +64,9 @@ proto.RegisterType((*A1M1)(nil), "test.A1M1") } -func init() { - proto.RegisterFile("imports/test_import_a1m1.proto", fileDescriptor_test_import_a1m1_d7f2b5c638a69f6e) -} +func init() { proto.RegisterFile("imports/test_import_a1m1.proto", fileDescriptor_3b904a47327455f3) } -var fileDescriptor_test_import_a1m1_d7f2b5c638a69f6e = []byte{ +var fileDescriptor_3b904a47327455f3 = []byte{ // 149 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcb, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x87, 0x70, 0xe2, 0x13, 0x0d, 0x73, 0x0d, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,12 +1,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_import_a1m2.proto -package imports // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports" +package imports -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -30,16 +32,17 @@ func (m *A1M2) String() string { return proto.CompactTextString(m) } func (*A1M2) ProtoMessage() {} func (*A1M2) Descriptor() ([]byte, []int) { - return fileDescriptor_test_import_a1m2_9a3281ce9464e116, []int{0} + return fileDescriptor_bdb27b114687957d, []int{0} } + func (m *A1M2) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_A1M2.Unmarshal(m, b) } func (m *A1M2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_A1M2.Marshal(b, m, deterministic) } -func (dst *A1M2) XXX_Merge(src proto.Message) { - xxx_messageInfo_A1M2.Merge(dst, src) +func (m *A1M2) XXX_Merge(src proto.Message) { + xxx_messageInfo_A1M2.Merge(m, src) } func (m *A1M2) XXX_Size() int { return xxx_messageInfo_A1M2.Size(m) @@ -61,11 +64,9 @@ proto.RegisterType((*A1M2)(nil), "test.A1M2") } -func init() { - proto.RegisterFile("imports/test_import_a1m2.proto", fileDescriptor_test_import_a1m2_9a3281ce9464e116) -} +func init() { proto.RegisterFile("imports/test_import_a1m2.proto", fileDescriptor_bdb27b114687957d) } -var fileDescriptor_test_import_a1m2_9a3281ce9464e116 = []byte{ +var fileDescriptor_bdb27b114687957d = []byte{ // 149 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcb, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x87, 0x70, 0xe2, 0x13, 0x0d, 0x73, 0x8d, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_all.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_all.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_all.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_all.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,15 +1,17 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: imports/test_import_all.proto -package imports // import "github.com/golang/protobuf/protoc-gen-go/testdata/imports" +package imports -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import fmt1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt" -import test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1" -import test_a_2 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2" -import test_b_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + fmt1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt" + test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1" + test_a_2 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2" + test_b_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -39,16 +41,17 @@ func (m *All) String() string { return proto.CompactTextString(m) } func (*All) ProtoMessage() {} func (*All) Descriptor() ([]byte, []int) { - return fileDescriptor_test_import_all_b41dc4592e4a4f3b, []int{0} + return fileDescriptor_324466f0afc16f77, []int{0} } + func (m *All) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_All.Unmarshal(m, b) } func (m *All) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_All.Marshal(b, m, deterministic) } -func (dst *All) XXX_Merge(src proto.Message) { - xxx_messageInfo_All.Merge(dst, src) +func (m *All) XXX_Merge(src proto.Message) { + xxx_messageInfo_All.Merge(m, src) } func (m *All) XXX_Size() int { return xxx_messageInfo_All.Size(m) @@ -112,11 +115,9 @@ proto.RegisterType((*All)(nil), "test.All") } -func init() { - proto.RegisterFile("imports/test_import_all.proto", fileDescriptor_test_import_all_b41dc4592e4a4f3b) -} +func init() { proto.RegisterFile("imports/test_import_all.proto", fileDescriptor_324466f0afc16f77) } -var fileDescriptor_test_import_all_b41dc4592e4a4f3b = []byte{ +var fileDescriptor_324466f0afc16f77 = []byte{ // 258 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0xd0, 0xb1, 0x4e, 0xc3, 0x30, 0x10, 0x06, 0x60, 0x15, 0x97, 0x20, 0x99, 0x05, 0x85, 0xc5, 0x20, 0x90, 0x50, 0x27, 0x96, 0xda, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: multi/multi1.proto -package multitest // import "github.com/golang/protobuf/protoc-gen-go/testdata/multi" +package multitest -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -31,16 +33,17 @@ func (m *Multi1) String() string { return proto.CompactTextString(m) } func (*Multi1) ProtoMessage() {} func (*Multi1) Descriptor() ([]byte, []int) { - return fileDescriptor_multi1_08e50c6822e808b8, []int{0} + return fileDescriptor_e0bffc140cd1b1d9, []int{0} } + func (m *Multi1) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Multi1.Unmarshal(m, b) } func (m *Multi1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Multi1.Marshal(b, m, deterministic) } -func (dst *Multi1) XXX_Merge(src proto.Message) { - xxx_messageInfo_Multi1.Merge(dst, src) +func (m *Multi1) XXX_Merge(src proto.Message) { + xxx_messageInfo_Multi1.Merge(m, src) } func (m *Multi1) XXX_Size() int { return xxx_messageInfo_Multi1.Size(m) @@ -76,9 +79,9 @@ proto.RegisterType((*Multi1)(nil), "multitest.Multi1") } -func init() { proto.RegisterFile("multi/multi1.proto", fileDescriptor_multi1_08e50c6822e808b8) } +func init() { proto.RegisterFile("multi/multi1.proto", fileDescriptor_e0bffc140cd1b1d9) } -var fileDescriptor_multi1_08e50c6822e808b8 = []byte{ +var fileDescriptor_e0bffc140cd1b1d9 = []byte{ // 200 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xca, 0x2d, 0xcd, 0x29, 0xc9, 0xd4, 0x07, 0x93, 0x86, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x9c, 0x60, 0x5e, 0x49, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: multi/multi2.proto -package multitest // import "github.com/golang/protobuf/protoc-gen-go/testdata/multi" +package multitest -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -31,6 +33,7 @@ 2: "GREEN", 3: "RED", } + var Multi2_Color_value = map[string]int32{ "BLUE": 1, "GREEN": 2, @@ -42,9 +45,11 @@ *p = x return p } + func (x Multi2_Color) String() string { return proto.EnumName(Multi2_Color_name, int32(x)) } + func (x *Multi2_Color) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(Multi2_Color_value, data, "Multi2_Color") if err != nil { @@ -53,8 +58,9 @@ *x = Multi2_Color(value) return nil } + func (Multi2_Color) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_multi2_c47490ad66d93e67, []int{0, 0} + return fileDescriptor_a2aebe588a0b2853, []int{0, 0} } type Multi2 struct { @@ -69,16 +75,17 @@ func (m *Multi2) String() string { return proto.CompactTextString(m) } func (*Multi2) ProtoMessage() {} func (*Multi2) Descriptor() ([]byte, []int) { - return fileDescriptor_multi2_c47490ad66d93e67, []int{0} + return fileDescriptor_a2aebe588a0b2853, []int{0} } + func (m *Multi2) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Multi2.Unmarshal(m, b) } func (m *Multi2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Multi2.Marshal(b, m, deterministic) } -func (dst *Multi2) XXX_Merge(src proto.Message) { - xxx_messageInfo_Multi2.Merge(dst, src) +func (m *Multi2) XXX_Merge(src proto.Message) { + xxx_messageInfo_Multi2.Merge(m, src) } func (m *Multi2) XXX_Size() int { return xxx_messageInfo_Multi2.Size(m) @@ -104,13 +111,13 @@ } func init() { - proto.RegisterType((*Multi2)(nil), "multitest.Multi2") proto.RegisterEnum("multitest.Multi2_Color", Multi2_Color_name, Multi2_Color_value) + proto.RegisterType((*Multi2)(nil), "multitest.Multi2") } -func init() { proto.RegisterFile("multi/multi2.proto", fileDescriptor_multi2_c47490ad66d93e67) } +func init() { proto.RegisterFile("multi/multi2.proto", fileDescriptor_a2aebe588a0b2853) } -var fileDescriptor_multi2_c47490ad66d93e67 = []byte{ +var fileDescriptor_a2aebe588a0b2853 = []byte{ // 202 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xca, 0x2d, 0xcd, 0x29, 0xc9, 0xd4, 0x07, 0x93, 0x46, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x9c, 0x60, 0x5e, 0x49, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: multi/multi3.proto -package multitest // import "github.com/golang/protobuf/protoc-gen-go/testdata/multi" +package multitest -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -29,6 +31,7 @@ 1: "FEDORA", 2: "FEZ", } + var Multi3_HatType_value = map[string]int32{ "FEDORA": 1, "FEZ": 2, @@ -39,9 +42,11 @@ *p = x return p } + func (x Multi3_HatType) String() string { return proto.EnumName(Multi3_HatType_name, int32(x)) } + func (x *Multi3_HatType) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(Multi3_HatType_value, data, "Multi3_HatType") if err != nil { @@ -50,8 +55,9 @@ *x = Multi3_HatType(value) return nil } + func (Multi3_HatType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_multi3_d55a72b4628b7875, []int{0, 0} + return fileDescriptor_580398fc0bbeeaa7, []int{0, 0} } type Multi3 struct { @@ -65,16 +71,17 @@ func (m *Multi3) String() string { return proto.CompactTextString(m) } func (*Multi3) ProtoMessage() {} func (*Multi3) Descriptor() ([]byte, []int) { - return fileDescriptor_multi3_d55a72b4628b7875, []int{0} + return fileDescriptor_580398fc0bbeeaa7, []int{0} } + func (m *Multi3) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Multi3.Unmarshal(m, b) } func (m *Multi3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Multi3.Marshal(b, m, deterministic) } -func (dst *Multi3) XXX_Merge(src proto.Message) { - xxx_messageInfo_Multi3.Merge(dst, src) +func (m *Multi3) XXX_Merge(src proto.Message) { + xxx_messageInfo_Multi3.Merge(m, src) } func (m *Multi3) XXX_Size() int { return xxx_messageInfo_Multi3.Size(m) @@ -93,13 +100,13 @@ } func init() { - proto.RegisterType((*Multi3)(nil), "multitest.Multi3") proto.RegisterEnum("multitest.Multi3_HatType", Multi3_HatType_name, Multi3_HatType_value) + proto.RegisterType((*Multi3)(nil), "multitest.Multi3") } -func init() { proto.RegisterFile("multi/multi3.proto", fileDescriptor_multi3_d55a72b4628b7875) } +func init() { proto.RegisterFile("multi/multi3.proto", fileDescriptor_580398fc0bbeeaa7) } -var fileDescriptor_multi3_d55a72b4628b7875 = []byte{ +var fileDescriptor_580398fc0bbeeaa7 = []byte{ // 170 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xca, 0x2d, 0xcd, 0x29, 0xc9, 0xd4, 0x07, 0x93, 0xc6, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x9c, 0x60, 0x5e, 0x49, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,16 +1,16 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: my_test/test.proto -package test // import "github.com/golang/protobuf/protoc-gen-go/testdata/my_test" +// This package holds interesting messages. -/* -This package holds interesting messages. -*/ - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "github.com/golang/protobuf/protoc-gen-go/testdata/multi" +package test + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + _ "github.com/golang/protobuf/protoc-gen-go/testdata/multi" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -35,6 +35,7 @@ 1: "FEDORA", 2: "FEZ", } + var HatType_value = map[string]int32{ "FEDORA": 1, "FEZ": 2, @@ -45,9 +46,11 @@ *p = x return p } + func (x HatType) String() string { return proto.EnumName(HatType_name, int32(x)) } + func (x *HatType) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(HatType_value, data, "HatType") if err != nil { @@ -56,8 +59,9 @@ *x = HatType(value) return nil } + func (HatType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{0} + return fileDescriptor_2c9b60a40d5131b9, []int{0} } // This enum represents days of the week. @@ -74,6 +78,7 @@ 2: "TUESDAY", // Duplicate value: 1: "LUNDI", } + var Days_value = map[string]int32{ "MONDAY": 1, "TUESDAY": 2, @@ -85,9 +90,11 @@ *p = x return p } + func (x Days) String() string { return proto.EnumName(Days_name, int32(x)) } + func (x *Days) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(Days_value, data, "Days") if err != nil { @@ -96,8 +103,9 @@ *x = Days(value) return nil } + func (Days) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{1} + return fileDescriptor_2c9b60a40d5131b9, []int{1} } type Request_Color int32 @@ -113,6 +121,7 @@ 1: "GREEN", 2: "BLUE", } + var Request_Color_value = map[string]int32{ "RED": 0, "GREEN": 1, @@ -124,9 +133,11 @@ *p = x return p } + func (x Request_Color) String() string { return proto.EnumName(Request_Color_name, int32(x)) } + func (x *Request_Color) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(Request_Color_value, data, "Request_Color") if err != nil { @@ -135,8 +146,9 @@ *x = Request_Color(value) return nil } + func (Request_Color) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{0, 0} + return fileDescriptor_2c9b60a40d5131b9, []int{0, 0} } type Reply_Entry_Game int32 @@ -150,6 +162,7 @@ 1: "FOOTBALL", 2: "TENNIS", } + var Reply_Entry_Game_value = map[string]int32{ "FOOTBALL": 1, "TENNIS": 2, @@ -160,9 +173,11 @@ *p = x return p } + func (x Reply_Entry_Game) String() string { return proto.EnumName(Reply_Entry_Game_name, int32(x)) } + func (x *Reply_Entry_Game) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(Reply_Entry_Game_value, data, "Reply_Entry_Game") if err != nil { @@ -171,8 +186,9 @@ *x = Reply_Entry_Game(value) return nil } + func (Reply_Entry_Game) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{1, 0, 0} + return fileDescriptor_2c9b60a40d5131b9, []int{1, 0, 0} } // This is a message that might be sent somewhere. @@ -191,6 +207,12 @@ Reset_ *int32 `protobuf:"varint,12,opt,name=reset" json:"reset,omitempty"` // This field should not conflict with any getters. GetKey_ *string `protobuf:"bytes,16,opt,name=get_key,json=getKey" json:"get_key,omitempty"` + FloatNinf *float32 `protobuf:"fixed32,20,opt,name=float_ninf,json=floatNinf,def=-inf" json:"float_ninf,omitempty"` + FloatPinf *float32 `protobuf:"fixed32,21,opt,name=float_pinf,json=floatPinf,def=inf" json:"float_pinf,omitempty"` + FloatExp *float32 `protobuf:"fixed32,22,opt,name=float_exp,json=floatExp,def=1e+09" json:"float_exp,omitempty"` + DoubleNinf *float64 `protobuf:"fixed64,23,opt,name=double_ninf,json=doubleNinf,def=-inf" json:"double_ninf,omitempty"` + DoublePinf *float64 `protobuf:"fixed64,24,opt,name=double_pinf,json=doublePinf,def=inf" json:"double_pinf,omitempty"` + DoubleExp *float64 `protobuf:"fixed64,25,opt,name=double_exp,json=doubleExp,def=1e+09" json:"double_exp,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -200,16 +222,17 @@ func (m *Request) String() string { return proto.CompactTextString(m) } func (*Request) ProtoMessage() {} func (*Request) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{0} + return fileDescriptor_2c9b60a40d5131b9, []int{0} } + func (m *Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Request.Unmarshal(m, b) } func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Request.Marshal(b, m, deterministic) } -func (dst *Request) XXX_Merge(src proto.Message) { - xxx_messageInfo_Request.Merge(dst, src) +func (m *Request) XXX_Merge(src proto.Message) { + xxx_messageInfo_Request.Merge(m, src) } func (m *Request) XXX_Size() int { return xxx_messageInfo_Request.Size(m) @@ -223,6 +246,15 @@ const Default_Request_Hat HatType = HatType_FEDORA var Default_Request_Deadline float32 = float32(math.Inf(1)) +var Default_Request_FloatNinf float32 = float32(math.Inf(-1)) +var Default_Request_FloatPinf float32 = float32(math.Inf(1)) + +const Default_Request_FloatExp float32 = 1e+09 + +var Default_Request_DoubleNinf float64 = math.Inf(-1) +var Default_Request_DoublePinf float64 = math.Inf(1) + +const Default_Request_DoubleExp float64 = 1e+09 func (m *Request) GetKey() []int64 { if m != nil { @@ -287,6 +319,48 @@ return "" } +func (m *Request) GetFloatNinf() float32 { + if m != nil && m.FloatNinf != nil { + return *m.FloatNinf + } + return Default_Request_FloatNinf +} + +func (m *Request) GetFloatPinf() float32 { + if m != nil && m.FloatPinf != nil { + return *m.FloatPinf + } + return Default_Request_FloatPinf +} + +func (m *Request) GetFloatExp() float32 { + if m != nil && m.FloatExp != nil { + return *m.FloatExp + } + return Default_Request_FloatExp +} + +func (m *Request) GetDoubleNinf() float64 { + if m != nil && m.DoubleNinf != nil { + return *m.DoubleNinf + } + return Default_Request_DoubleNinf +} + +func (m *Request) GetDoublePinf() float64 { + if m != nil && m.DoublePinf != nil { + return *m.DoublePinf + } + return Default_Request_DoublePinf +} + +func (m *Request) GetDoubleExp() float64 { + if m != nil && m.DoubleExp != nil { + return *m.DoubleExp + } + return Default_Request_DoubleExp +} + type Request_SomeGroup struct { GroupField *int32 `protobuf:"varint,9,opt,name=group_field,json=groupField" json:"group_field,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -298,16 +372,17 @@ func (m *Request_SomeGroup) String() string { return proto.CompactTextString(m) } func (*Request_SomeGroup) ProtoMessage() {} func (*Request_SomeGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{0, 0} + return fileDescriptor_2c9b60a40d5131b9, []int{0, 0} } + func (m *Request_SomeGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Request_SomeGroup.Unmarshal(m, b) } func (m *Request_SomeGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Request_SomeGroup.Marshal(b, m, deterministic) } -func (dst *Request_SomeGroup) XXX_Merge(src proto.Message) { - xxx_messageInfo_Request_SomeGroup.Merge(dst, src) +func (m *Request_SomeGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_Request_SomeGroup.Merge(m, src) } func (m *Request_SomeGroup) XXX_Size() int { return xxx_messageInfo_Request_SomeGroup.Size(m) @@ -338,7 +413,7 @@ func (m *Reply) String() string { return proto.CompactTextString(m) } func (*Reply) ProtoMessage() {} func (*Reply) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{1} + return fileDescriptor_2c9b60a40d5131b9, []int{1} } var extRange_Reply = []proto.ExtensionRange{ @@ -348,14 +423,15 @@ func (*Reply) ExtensionRangeArray() []proto.ExtensionRange { return extRange_Reply } + func (m *Reply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Reply.Unmarshal(m, b) } func (m *Reply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Reply.Marshal(b, m, deterministic) } -func (dst *Reply) XXX_Merge(src proto.Message) { - xxx_messageInfo_Reply.Merge(dst, src) +func (m *Reply) XXX_Merge(src proto.Message) { + xxx_messageInfo_Reply.Merge(m, src) } func (m *Reply) XXX_Size() int { return xxx_messageInfo_Reply.Size(m) @@ -393,16 +469,17 @@ func (m *Reply_Entry) String() string { return proto.CompactTextString(m) } func (*Reply_Entry) ProtoMessage() {} func (*Reply_Entry) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{1, 0} + return fileDescriptor_2c9b60a40d5131b9, []int{1, 0} } + func (m *Reply_Entry) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Reply_Entry.Unmarshal(m, b) } func (m *Reply_Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Reply_Entry.Marshal(b, m, deterministic) } -func (dst *Reply_Entry) XXX_Merge(src proto.Message) { - xxx_messageInfo_Reply_Entry.Merge(dst, src) +func (m *Reply_Entry) XXX_Merge(src proto.Message) { + xxx_messageInfo_Reply_Entry.Merge(m, src) } func (m *Reply_Entry) XXX_Size() int { return xxx_messageInfo_Reply_Entry.Size(m) @@ -448,7 +525,7 @@ func (m *OtherBase) String() string { return proto.CompactTextString(m) } func (*OtherBase) ProtoMessage() {} func (*OtherBase) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{2} + return fileDescriptor_2c9b60a40d5131b9, []int{2} } var extRange_OtherBase = []proto.ExtensionRange{ @@ -458,14 +535,15 @@ func (*OtherBase) ExtensionRangeArray() []proto.ExtensionRange { return extRange_OtherBase } + func (m *OtherBase) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OtherBase.Unmarshal(m, b) } func (m *OtherBase) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OtherBase.Marshal(b, m, deterministic) } -func (dst *OtherBase) XXX_Merge(src proto.Message) { - xxx_messageInfo_OtherBase.Merge(dst, src) +func (m *OtherBase) XXX_Merge(src proto.Message) { + xxx_messageInfo_OtherBase.Merge(m, src) } func (m *OtherBase) XXX_Size() int { return xxx_messageInfo_OtherBase.Size(m) @@ -493,16 +571,17 @@ func (m *ReplyExtensions) String() string { return proto.CompactTextString(m) } func (*ReplyExtensions) ProtoMessage() {} func (*ReplyExtensions) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{3} + return fileDescriptor_2c9b60a40d5131b9, []int{3} } + func (m *ReplyExtensions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ReplyExtensions.Unmarshal(m, b) } func (m *ReplyExtensions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ReplyExtensions.Marshal(b, m, deterministic) } -func (dst *ReplyExtensions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReplyExtensions.Merge(dst, src) +func (m *ReplyExtensions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplyExtensions.Merge(m, src) } func (m *ReplyExtensions) XXX_Size() int { return xxx_messageInfo_ReplyExtensions.Size(m) @@ -551,16 +630,17 @@ func (m *OtherReplyExtensions) String() string { return proto.CompactTextString(m) } func (*OtherReplyExtensions) ProtoMessage() {} func (*OtherReplyExtensions) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{4} + return fileDescriptor_2c9b60a40d5131b9, []int{4} } + func (m *OtherReplyExtensions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OtherReplyExtensions.Unmarshal(m, b) } func (m *OtherReplyExtensions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OtherReplyExtensions.Marshal(b, m, deterministic) } -func (dst *OtherReplyExtensions) XXX_Merge(src proto.Message) { - xxx_messageInfo_OtherReplyExtensions.Merge(dst, src) +func (m *OtherReplyExtensions) XXX_Merge(src proto.Message) { + xxx_messageInfo_OtherReplyExtensions.Merge(m, src) } func (m *OtherReplyExtensions) XXX_Size() int { return xxx_messageInfo_OtherReplyExtensions.Size(m) @@ -589,14 +669,7 @@ func (m *OldReply) String() string { return proto.CompactTextString(m) } func (*OldReply) ProtoMessage() {} func (*OldReply) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{5} -} - -func (m *OldReply) MarshalJSON() ([]byte, error) { - return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions) -} -func (m *OldReply) UnmarshalJSON(buf []byte) error { - return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions) + return fileDescriptor_2c9b60a40d5131b9, []int{5} } var extRange_OldReply = []proto.ExtensionRange{ @@ -606,14 +679,15 @@ func (*OldReply) ExtensionRangeArray() []proto.ExtensionRange { return extRange_OldReply } + func (m *OldReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OldReply.Unmarshal(m, b) } func (m *OldReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OldReply.Marshal(b, m, deterministic) } -func (dst *OldReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_OldReply.Merge(dst, src) +func (m *OldReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_OldReply.Merge(m, src) } func (m *OldReply) XXX_Size() int { return xxx_messageInfo_OldReply.Size(m) @@ -649,16 +723,17 @@ func (m *Communique) String() string { return proto.CompactTextString(m) } func (*Communique) ProtoMessage() {} func (*Communique) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{6} + return fileDescriptor_2c9b60a40d5131b9, []int{6} } + func (m *Communique) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Communique.Unmarshal(m, b) } func (m *Communique) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Communique.Marshal(b, m, deterministic) } -func (dst *Communique) XXX_Merge(src proto.Message) { - xxx_messageInfo_Communique.Merge(dst, src) +func (m *Communique) XXX_Merge(src proto.Message) { + xxx_messageInfo_Communique.Merge(m, src) } func (m *Communique) XXX_Size() int { return xxx_messageInfo_Communique.Size(m) @@ -1020,16 +1095,17 @@ func (m *Communique_SomeGroup) String() string { return proto.CompactTextString(m) } func (*Communique_SomeGroup) ProtoMessage() {} func (*Communique_SomeGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{6, 0} + return fileDescriptor_2c9b60a40d5131b9, []int{6, 0} } + func (m *Communique_SomeGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Communique_SomeGroup.Unmarshal(m, b) } func (m *Communique_SomeGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Communique_SomeGroup.Marshal(b, m, deterministic) } -func (dst *Communique_SomeGroup) XXX_Merge(src proto.Message) { - xxx_messageInfo_Communique_SomeGroup.Merge(dst, src) +func (m *Communique_SomeGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_Communique_SomeGroup.Merge(m, src) } func (m *Communique_SomeGroup) XXX_Size() int { return xxx_messageInfo_Communique_SomeGroup.Size(m) @@ -1057,16 +1133,17 @@ func (m *Communique_Delta) String() string { return proto.CompactTextString(m) } func (*Communique_Delta) ProtoMessage() {} func (*Communique_Delta) Descriptor() ([]byte, []int) { - return fileDescriptor_test_2309d445eee26af7, []int{6, 1} + return fileDescriptor_2c9b60a40d5131b9, []int{6, 1} } + func (m *Communique_Delta) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Communique_Delta.Unmarshal(m, b) } func (m *Communique_Delta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Communique_Delta.Marshal(b, m, deterministic) } -func (dst *Communique_Delta) XXX_Merge(src proto.Message) { - xxx_messageInfo_Communique_Delta.Merge(dst, src) +func (m *Communique_Delta) XXX_Merge(src proto.Message) { + xxx_messageInfo_Communique_Delta.Merge(m, src) } func (m *Communique_Delta) XXX_Size() int { return xxx_messageInfo_Communique_Delta.Size(m) @@ -1096,6 +1173,10 @@ } func init() { + proto.RegisterEnum("my.test.HatType", HatType_name, HatType_value) + proto.RegisterEnum("my.test.Days", Days_name, Days_value) + proto.RegisterEnum("my.test.Request_Color", Request_Color_name, Request_Color_value) + proto.RegisterEnum("my.test.Reply_Entry_Game", Reply_Entry_Game_name, Reply_Entry_Game_value) proto.RegisterType((*Request)(nil), "my.test.Request") proto.RegisterMapType((map[int64]*Reply)(nil), "my.test.Request.MsgMappingEntry") proto.RegisterMapType((map[int32]string)(nil), "my.test.Request.NameMappingEntry") @@ -1103,90 +1184,93 @@ proto.RegisterType((*Reply)(nil), "my.test.Reply") proto.RegisterType((*Reply_Entry)(nil), "my.test.Reply.Entry") proto.RegisterType((*OtherBase)(nil), "my.test.OtherBase") + proto.RegisterExtension(E_ReplyExtensions_Time) + proto.RegisterExtension(E_ReplyExtensions_Carrot) + proto.RegisterExtension(E_ReplyExtensions_Donut) proto.RegisterType((*ReplyExtensions)(nil), "my.test.ReplyExtensions") proto.RegisterType((*OtherReplyExtensions)(nil), "my.test.OtherReplyExtensions") proto.RegisterType((*OldReply)(nil), "my.test.OldReply") proto.RegisterType((*Communique)(nil), "my.test.Communique") proto.RegisterType((*Communique_SomeGroup)(nil), "my.test.Communique.SomeGroup") proto.RegisterType((*Communique_Delta)(nil), "my.test.Communique.Delta") - proto.RegisterEnum("my.test.HatType", HatType_name, HatType_value) - proto.RegisterEnum("my.test.Days", Days_name, Days_value) - proto.RegisterEnum("my.test.Request_Color", Request_Color_name, Request_Color_value) - proto.RegisterEnum("my.test.Reply_Entry_Game", Reply_Entry_Game_name, Reply_Entry_Game_value) - proto.RegisterExtension(E_ReplyExtensions_Time) - proto.RegisterExtension(E_ReplyExtensions_Carrot) - proto.RegisterExtension(E_ReplyExtensions_Donut) proto.RegisterExtension(E_Tag) proto.RegisterExtension(E_Donut) } -func init() { proto.RegisterFile("my_test/test.proto", fileDescriptor_test_2309d445eee26af7) } +func init() { proto.RegisterFile("my_test/test.proto", fileDescriptor_2c9b60a40d5131b9) } -var fileDescriptor_test_2309d445eee26af7 = []byte{ - // 1033 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0xdd, 0x6e, 0xe3, 0x44, - 0x14, 0xce, 0xd8, 0x71, 0x7e, 0x4e, 0x42, 0x6b, 0x46, 0x55, 0x6b, 0x05, 0xed, 0xd6, 0x04, 0x8a, - 0x4c, 0xc5, 0xa6, 0xda, 0x80, 0xc4, 0x2a, 0x88, 0xd5, 0x36, 0x3f, 0x6d, 0xaa, 0x6d, 0x12, 0x69, - 0xda, 0x5e, 0xb0, 0x37, 0xd6, 0x34, 0x9e, 0x3a, 0xa6, 0x19, 0x3b, 0x6b, 0x8f, 0x11, 0xbe, 0xeb, - 0x53, 0xc0, 0x6b, 0x70, 0xcf, 0x0b, 0xf1, 0x16, 0x45, 0x33, 0x0e, 0x49, 0xda, 0xa0, 0xbd, 0xb1, - 0x7c, 0xce, 0xf9, 0xce, 0xe7, 0x39, 0x3f, 0xfe, 0x06, 0x30, 0xcf, 0x5c, 0xc1, 0x12, 0x71, 0x22, - 0x1f, 0xad, 0x45, 0x1c, 0x89, 0x08, 0x97, 0x79, 0xd6, 0x92, 0x66, 0x03, 0xf3, 0x74, 0x2e, 0x82, - 0x13, 0xf5, 0x7c, 0x9d, 0x07, 0x9b, 0xff, 0x14, 0xa1, 0x4c, 0xd8, 0xc7, 0x94, 0x25, 0x02, 0x9b, - 0xa0, 0xdf, 0xb3, 0xcc, 0x42, 0xb6, 0xee, 0xe8, 0x44, 0xbe, 0x62, 0x07, 0xf4, 0x59, 0xca, 0x2c, - 0xdd, 0x46, 0xce, 0x4e, 0x7b, 0xbf, 0xb5, 0x24, 0x6a, 0x2d, 0x13, 0x5a, 0xbd, 0x68, 0x1e, 0xc5, - 0x44, 0x42, 0xf0, 0x31, 0xe8, 0x33, 0x2a, 0xac, 0xa2, 0x42, 0x9a, 0x2b, 0xe4, 0x90, 0x8a, 0xeb, - 0x6c, 0xc1, 0x3a, 0xa5, 0xb3, 0x41, 0x7f, 0x42, 0x4e, 0x89, 0x04, 0xe1, 0x43, 0xa8, 0x78, 0x8c, - 0x7a, 0xf3, 0x20, 0x64, 0x56, 0xd9, 0x46, 0x8e, 0xd6, 0xd1, 0x83, 0xf0, 0x8e, 0xac, 0x9c, 0xf8, - 0x0d, 0x54, 0x93, 0x88, 0x33, 0x3f, 0x8e, 0xd2, 0x85, 0x55, 0xb1, 0x91, 0x03, 0xed, 0xc6, 0xd6, - 0xc7, 0xaf, 0x22, 0xce, 0xce, 0x25, 0x82, 0xac, 0xc1, 0xb8, 0x0f, 0xf5, 0x90, 0x72, 0xe6, 0x72, - 0xba, 0x58, 0x04, 0xa1, 0x6f, 0xed, 0xd8, 0xba, 0x53, 0x6b, 0x7f, 0xb9, 0x95, 0x3c, 0xa6, 0x9c, - 0x8d, 0x72, 0xcc, 0x20, 0x14, 0x71, 0x46, 0x6a, 0xe1, 0xda, 0x83, 0x4f, 0xa1, 0xc6, 0x13, 0x7f, - 0x45, 0xb2, 0xab, 0x48, 0xec, 0x2d, 0x92, 0x51, 0xe2, 0x3f, 0xe1, 0x00, 0xbe, 0x72, 0xe0, 0x3d, - 0x30, 0x62, 0x96, 0x30, 0x61, 0xd5, 0x6d, 0xe4, 0x18, 0x24, 0x37, 0xf0, 0x01, 0x94, 0x7d, 0x26, - 0x5c, 0xd9, 0x65, 0xd3, 0x46, 0x4e, 0x95, 0x94, 0x7c, 0x26, 0xde, 0xb3, 0xac, 0xf1, 0x1d, 0x54, - 0x57, 0xf5, 0xe0, 0x43, 0xa8, 0xa9, 0x6a, 0xdc, 0xbb, 0x80, 0xcd, 0x3d, 0xab, 0xaa, 0x18, 0x40, - 0xb9, 0xce, 0xa4, 0xa7, 0xf1, 0x16, 0xcc, 0xe7, 0x05, 0xac, 0x87, 0x27, 0xc1, 0x6a, 0x78, 0x7b, - 0x60, 0xfc, 0x46, 0xe7, 0x29, 0xb3, 0x34, 0xf5, 0xa9, 0xdc, 0xe8, 0x68, 0x6f, 0x50, 0x63, 0x04, - 0xbb, 0xcf, 0xce, 0xbe, 0x99, 0x8e, 0xf3, 0xf4, 0xaf, 0x37, 0xd3, 0x6b, 0xed, 0x9d, 0x8d, 0xf2, - 0x17, 0xf3, 0x6c, 0x83, 0xae, 0x79, 0x04, 0x86, 0xda, 0x04, 0x5c, 0x06, 0x9d, 0x0c, 0xfa, 0x66, - 0x01, 0x57, 0xc1, 0x38, 0x27, 0x83, 0xc1, 0xd8, 0x44, 0xb8, 0x02, 0xc5, 0xee, 0xe5, 0xcd, 0xc0, - 0xd4, 0x9a, 0x7f, 0x6a, 0x60, 0xa8, 0x5c, 0x7c, 0x0c, 0xc6, 0x5d, 0x94, 0x86, 0x9e, 0x5a, 0xb5, - 0x5a, 0x7b, 0xef, 0x29, 0x75, 0x2b, 0xef, 0x66, 0x0e, 0xc1, 0x47, 0x50, 0x9f, 0x46, 0x7c, 0x41, - 0xa7, 0xaa, 0x6d, 0x89, 0xa5, 0xd9, 0xba, 0x63, 0x74, 0x35, 0x13, 0x91, 0xda, 0xd2, 0xff, 0x9e, - 0x65, 0x49, 0xe3, 0x2f, 0x04, 0x46, 0x5e, 0x49, 0x1f, 0x0e, 0xef, 0x59, 0xe6, 0x8a, 0x19, 0x15, - 0x6e, 0xc8, 0x98, 0x97, 0xb8, 0xaf, 0xdb, 0xdf, 0xff, 0x30, 0xa5, 0x9c, 0xcd, 0xdd, 0x1e, 0x4d, - 0x2e, 0x42, 0xdf, 0x42, 0xb6, 0xe6, 0xe8, 0xe4, 0x8b, 0x7b, 0x96, 0x5d, 0xcf, 0xa8, 0x18, 0x4b, - 0xd0, 0x0a, 0x93, 0x43, 0xf0, 0xc1, 0x66, 0xf5, 0x7a, 0x07, 0xfd, 0xb8, 0x2c, 0x18, 0x7f, 0x03, - 0xa6, 0xcb, 0xb3, 0x7c, 0x34, 0xae, 0xda, 0xb5, 0xb6, 0xfa, 0x3f, 0x74, 0x52, 0x1f, 0x65, 0x6a, - 0x3c, 0x72, 0x34, 0xed, 0xa6, 0x0d, 0xc5, 0x73, 0xca, 0x19, 0xae, 0x43, 0xe5, 0x6c, 0x32, 0xb9, - 0xee, 0x9e, 0x5e, 0x5e, 0x9a, 0x08, 0x03, 0x94, 0xae, 0x07, 0xe3, 0xf1, 0xc5, 0x95, 0xa9, 0x1d, - 0x57, 0x2a, 0x9e, 0xf9, 0xf0, 0xf0, 0xf0, 0xa0, 0x35, 0xbf, 0x85, 0xea, 0x44, 0xcc, 0x58, 0xdc, - 0xa5, 0x09, 0xc3, 0x18, 0x8a, 0x92, 0x56, 0x8d, 0xa2, 0x4a, 0xd4, 0xfb, 0x06, 0xf4, 0x6f, 0x04, - 0xbb, 0xaa, 0x4b, 0x83, 0xdf, 0x05, 0x0b, 0x93, 0x20, 0x0a, 0x93, 0x76, 0x13, 0x8a, 0x22, 0xe0, - 0x0c, 0x3f, 0x1b, 0x91, 0xc5, 0x6c, 0xe4, 0x20, 0xa2, 0x62, 0xed, 0x77, 0x50, 0x9a, 0xd2, 0x38, - 0x8e, 0xc4, 0x16, 0x2a, 0x50, 0xe3, 0xb5, 0x9e, 0x7a, 0xd7, 0xec, 0x64, 0x99, 0xd7, 0xee, 0x82, - 0xe1, 0x45, 0x61, 0x2a, 0x30, 0x5e, 0x41, 0x57, 0x87, 0x56, 0x9f, 0xfa, 0x14, 0x49, 0x9e, 0xda, - 0x74, 0x60, 0x4f, 0xe5, 0x3c, 0x0b, 0x6f, 0x2f, 0x6f, 0xd3, 0x82, 0xca, 0x64, 0xee, 0x29, 0x9c, - 0xaa, 0xfe, 0xf1, 0xf1, 0xf1, 0xb1, 0xdc, 0xd1, 0x2a, 0xa8, 0xf9, 0x87, 0x0e, 0xd0, 0x8b, 0x38, - 0x4f, 0xc3, 0xe0, 0x63, 0xca, 0xf0, 0x4b, 0xa8, 0x71, 0x7a, 0xcf, 0x5c, 0xce, 0xdc, 0x69, 0x9c, - 0x53, 0x54, 0x48, 0x55, 0xba, 0x46, 0xac, 0x17, 0x67, 0xd8, 0x82, 0x52, 0x98, 0xf2, 0x5b, 0x16, - 0x5b, 0x86, 0x64, 0x1f, 0x16, 0xc8, 0xd2, 0xc6, 0x7b, 0xcb, 0x46, 0x97, 0x64, 0xa3, 0x87, 0x85, - 0xbc, 0xd5, 0xd2, 0xeb, 0x51, 0x41, 0x95, 0x30, 0xd5, 0xa5, 0x57, 0x5a, 0xf8, 0x00, 0x4a, 0x82, - 0xf1, 0x85, 0x3b, 0x55, 0x72, 0x84, 0x86, 0x05, 0x62, 0x48, 0xbb, 0x27, 0xe9, 0x67, 0x2c, 0xf0, - 0x67, 0x42, 0xfd, 0xa6, 0x9a, 0xa4, 0xcf, 0x6d, 0x7c, 0x04, 0x86, 0x88, 0x3c, 0x9a, 0x59, 0xa0, - 0x34, 0xf1, 0xb3, 0x55, 0x6f, 0xfa, 0x34, 0x4b, 0x14, 0x81, 0x8c, 0xe2, 0x7d, 0x30, 0x38, 0xcd, - 0x6e, 0x99, 0x55, 0x93, 0x27, 0x97, 0x7e, 0x65, 0x4a, 0xbf, 0xc7, 0xe6, 0x82, 0x2a, 0x01, 0xf9, - 0x5c, 0xfa, 0x95, 0x89, 0x9b, 0xa0, 0xf3, 0xc4, 0x57, 0xf2, 0xb1, 0xf5, 0x53, 0x0e, 0x0b, 0x44, - 0x06, 0xf1, 0xcf, 0x9b, 0xfa, 0xb9, 0xa3, 0xf4, 0xf3, 0xc5, 0x0a, 0xb9, 0xee, 0xdd, 0x5a, 0x42, - 0x87, 0x85, 0x0d, 0x11, 0x6d, 0x7c, 0xb5, 0x29, 0x46, 0xfb, 0x50, 0xe2, 0x4c, 0xf5, 0x6f, 0x37, - 0x57, 0xac, 0xdc, 0x6a, 0x94, 0xc1, 0xe8, 0xcb, 0x03, 0x75, 0xcb, 0x60, 0xa4, 0x61, 0x10, 0x85, - 0xc7, 0x2f, 0xa1, 0xbc, 0x94, 0x7b, 0xb9, 0xe6, 0xb9, 0xe0, 0x9b, 0x48, 0x8a, 0xc2, 0xd9, 0xe0, - 0x83, 0xa9, 0x1d, 0xb7, 0xa0, 0x28, 0x4b, 0x97, 0xc1, 0xd1, 0x64, 0xdc, 0x3f, 0xfd, 0xc5, 0x44, - 0xb8, 0x06, 0xe5, 0xeb, 0x9b, 0xc1, 0x95, 0x34, 0x34, 0xa9, 0x1a, 0x97, 0x37, 0xe3, 0xfe, 0x85, - 0x89, 0x1a, 0x9a, 0x89, 0x3a, 0x36, 0xe8, 0x82, 0xfa, 0x5b, 0xfb, 0xea, 0xab, 0x63, 0xc8, 0x50, - 0xa7, 0xf7, 0xdf, 0x4a, 0x3e, 0xc7, 0xfc, 0xaa, 0xba, 0xf3, 0xe2, 0xe9, 0xa2, 0xfe, 0xff, 0x4e, - 0x76, 0xdf, 0x7d, 0x78, 0xeb, 0x07, 0x62, 0x96, 0xde, 0xb6, 0xa6, 0x11, 0x3f, 0xf1, 0xa3, 0x39, - 0x0d, 0xfd, 0x13, 0x75, 0x39, 0xde, 0xa6, 0x77, 0xf9, 0xcb, 0xf4, 0x95, 0xcf, 0xc2, 0x57, 0x7e, - 0xa4, 0x6e, 0x55, 0xb9, 0x0f, 0x27, 0xcb, 0x6b, 0xf6, 0x27, 0xf9, 0xf8, 0x37, 0x00, 0x00, 0xff, - 0xff, 0x12, 0xd5, 0x46, 0x00, 0x75, 0x07, 0x00, 0x00, +var fileDescriptor_2c9b60a40d5131b9 = []byte{ + // 1148 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x56, 0xcf, 0x6e, 0xdb, 0x46, + 0x13, 0x37, 0x49, 0x51, 0x7f, 0x46, 0xfe, 0x6c, 0x7e, 0x0b, 0xd7, 0x66, 0x55, 0x24, 0x61, 0x95, + 0xb8, 0x50, 0xdc, 0x46, 0x8e, 0xd5, 0x02, 0x4d, 0x55, 0x34, 0x88, 0x65, 0xc9, 0x71, 0x10, 0x5b, + 0x2e, 0x36, 0xce, 0xa1, 0xb9, 0x10, 0x6b, 0x69, 0x45, 0xb1, 0xd6, 0x92, 0x8c, 0xb8, 0x2c, 0xcc, + 0x9b, 0x9f, 0xa2, 0x7d, 0x8d, 0xde, 0xfb, 0x0c, 0x7d, 0x26, 0x17, 0x3b, 0xab, 0x48, 0xb2, 0x55, + 0x94, 0x07, 0x82, 0x33, 0xf3, 0x9b, 0xdf, 0xec, 0xce, 0xcc, 0xce, 0x12, 0x88, 0xc8, 0x7d, 0xc9, + 0x53, 0xb9, 0xaf, 0x5e, 0xcd, 0x64, 0x1a, 0xcb, 0x98, 0x94, 0x44, 0xde, 0x54, 0x62, 0x8d, 0x88, + 0x6c, 0x22, 0xc3, 0x7d, 0x7c, 0x1f, 0x68, 0x63, 0xfd, 0xef, 0x22, 0x94, 0x28, 0xff, 0x98, 0xf1, + 0x54, 0x12, 0x07, 0xac, 0x2b, 0x9e, 0xbb, 0x86, 0x67, 0x35, 0x2c, 0xaa, 0x3e, 0x49, 0x03, 0xac, + 0x71, 0xc6, 0x5d, 0xcb, 0x33, 0x1a, 0x1b, 0xad, 0xed, 0xe6, 0x8c, 0xa8, 0x39, 0x73, 0x68, 0x1e, + 0xc5, 0x93, 0x78, 0x4a, 0x15, 0x84, 0xec, 0x81, 0x35, 0x66, 0xd2, 0x2d, 0x20, 0xd2, 0x99, 0x23, + 0x4f, 0x98, 0xbc, 0xc8, 0x13, 0xde, 0x2e, 0x1e, 0xf7, 0xba, 0xe7, 0xf4, 0x90, 0x2a, 0x10, 0x79, + 0x04, 0xe5, 0x21, 0x67, 0xc3, 0x49, 0x18, 0x71, 0xb7, 0xe4, 0x19, 0x0d, 0xb3, 0x6d, 0x85, 0xd1, + 0x88, 0xce, 0x95, 0xe4, 0x05, 0x54, 0xd2, 0x58, 0xf0, 0x60, 0x1a, 0x67, 0x89, 0x5b, 0xf6, 0x8c, + 0x06, 0xb4, 0x6a, 0x2b, 0xc1, 0xdf, 0xc5, 0x82, 0xbf, 0x56, 0x08, 0xba, 0x00, 0x93, 0x2e, 0xac, + 0x47, 0x4c, 0x70, 0x5f, 0xb0, 0x24, 0x09, 0xa3, 0xc0, 0xdd, 0xf0, 0xac, 0x46, 0xb5, 0xf5, 0xe5, + 0x8a, 0x73, 0x9f, 0x09, 0x7e, 0xa6, 0x31, 0xbd, 0x48, 0x4e, 0x73, 0x5a, 0x8d, 0x16, 0x1a, 0x72, + 0x08, 0x55, 0x91, 0x06, 0x73, 0x92, 0x4d, 0x24, 0xf1, 0x56, 0x48, 0xce, 0xd2, 0xe0, 0x0e, 0x07, + 0x88, 0xb9, 0x82, 0x6c, 0x81, 0x3d, 0xe5, 0x29, 0x97, 0xee, 0xba, 0x67, 0x34, 0x6c, 0xaa, 0x05, + 0xb2, 0x03, 0xa5, 0x80, 0x4b, 0x5f, 0x65, 0xd9, 0xf1, 0x8c, 0x46, 0x85, 0x16, 0x03, 0x2e, 0xdf, + 0xf2, 0x9c, 0x3c, 0x06, 0x18, 0x4d, 0x62, 0x26, 0xfd, 0x28, 0x8c, 0x46, 0xee, 0x16, 0x26, 0xa5, + 0xf0, 0x4c, 0x65, 0xa5, 0x82, 0xfa, 0x7e, 0x18, 0x8d, 0x48, 0xfd, 0x13, 0x28, 0x51, 0xa0, 0xcf, + 0x16, 0x99, 0xd3, 0x98, 0x9f, 0x35, 0x46, 0x0b, 0x3e, 0xbf, 0x4e, 0xdc, 0x6d, 0x84, 0xd8, 0x07, + 0xfc, 0xeb, 0xe7, 0x3f, 0xd0, 0x32, 0xea, 0x7b, 0xd7, 0x09, 0xd9, 0x85, 0xea, 0x30, 0xce, 0x2e, + 0x27, 0x5c, 0x47, 0xdb, 0xf1, 0x8c, 0x86, 0x31, 0x8b, 0x06, 0xda, 0x80, 0xe1, 0x9e, 0xcc, 0x61, + 0x18, 0xcf, 0x45, 0x98, 0xb5, 0x84, 0xc2, 0x80, 0x4f, 0x61, 0x26, 0x61, 0xc4, 0xcf, 0x11, 0x04, + 0x07, 0xcf, 0x3f, 0x3d, 0xb4, 0xa2, 0xad, 0xbd, 0xeb, 0xa4, 0xf6, 0x0d, 0x54, 0xe6, 0x45, 0x23, + 0x8f, 0xa0, 0x8a, 0x25, 0xf3, 0x47, 0x21, 0x9f, 0x0c, 0xdd, 0x0a, 0xa6, 0x09, 0x50, 0x75, 0xac, + 0x34, 0xb5, 0x97, 0xe0, 0xdc, 0xaf, 0xd2, 0xa2, 0x43, 0x15, 0x18, 0x3b, 0x74, 0x0b, 0xec, 0xdf, + 0xd8, 0x24, 0xe3, 0xae, 0x89, 0xf9, 0xd4, 0x42, 0xdb, 0x7c, 0x61, 0xd4, 0xce, 0x60, 0xf3, 0x5e, + 0x81, 0x96, 0xdd, 0x89, 0x76, 0x7f, 0xb2, 0xec, 0x5e, 0x6d, 0x6d, 0x2c, 0xd5, 0x38, 0x99, 0xe4, + 0x4b, 0x74, 0xf5, 0x5d, 0xb0, 0xb1, 0xdd, 0x49, 0x09, 0x2c, 0xda, 0xeb, 0x3a, 0x6b, 0xa4, 0x02, + 0xf6, 0x6b, 0xda, 0xeb, 0xf5, 0x1d, 0x83, 0x94, 0xa1, 0xd0, 0x39, 0x7d, 0xdf, 0x73, 0xcc, 0xfa, + 0x1f, 0x26, 0xd8, 0xe8, 0x4b, 0xf6, 0xc0, 0x1e, 0xc5, 0x59, 0x34, 0xc4, 0xf3, 0x54, 0x6d, 0x6d, + 0xdd, 0xa5, 0x6e, 0xea, 0x96, 0xd1, 0x10, 0xb2, 0x0b, 0xeb, 0x83, 0x58, 0x24, 0x6c, 0x80, 0xbd, + 0x91, 0xba, 0xa6, 0x67, 0x35, 0xec, 0x8e, 0xe9, 0x18, 0xb4, 0x3a, 0xd3, 0xbf, 0xe5, 0x79, 0x5a, + 0xfb, 0xd3, 0x00, 0x5b, 0xef, 0xa4, 0x0b, 0x8f, 0xae, 0x78, 0xee, 0xcb, 0xb1, 0x6a, 0x19, 0xce, + 0x87, 0xa9, 0x7f, 0xd0, 0xfa, 0xf6, 0xbb, 0x01, 0x13, 0x7c, 0xe2, 0x1f, 0xb1, 0xf4, 0x4d, 0x14, + 0xb8, 0x86, 0x67, 0x36, 0x2c, 0xfa, 0xc5, 0x15, 0xcf, 0x2f, 0xc6, 0x4c, 0xf6, 0x15, 0x68, 0x8e, + 0xd1, 0x10, 0xb2, 0xb3, 0xbc, 0x7b, 0xab, 0x6d, 0x7c, 0x3f, 0xdb, 0x30, 0xf9, 0x0a, 0x1c, 0x5f, + 0xe4, 0xba, 0x34, 0x3e, 0x1e, 0xa8, 0x16, 0x0e, 0x01, 0x8b, 0xae, 0x9f, 0xe5, 0x58, 0x1e, 0x55, + 0x9a, 0x56, 0xdd, 0x83, 0xc2, 0x6b, 0x26, 0x38, 0x59, 0x87, 0xf2, 0xf1, 0xf9, 0xf9, 0x45, 0xe7, + 0xf0, 0xf4, 0xd4, 0x31, 0x08, 0x40, 0xf1, 0xa2, 0xd7, 0xef, 0xbf, 0x79, 0xe7, 0x98, 0x7b, 0xe5, + 0xf2, 0xd0, 0xb9, 0xb9, 0xb9, 0xb9, 0x31, 0xeb, 0x4f, 0xa1, 0x72, 0x2e, 0xc7, 0x7c, 0xda, 0x61, + 0x29, 0x27, 0x04, 0x0a, 0x8a, 0x16, 0x4b, 0x51, 0xa1, 0xf8, 0xbd, 0x04, 0xfd, 0xcb, 0x80, 0x4d, + 0xcc, 0x52, 0xef, 0x5a, 0xf2, 0x28, 0x0d, 0xe3, 0x28, 0x6d, 0xd5, 0xa1, 0x20, 0x43, 0xc1, 0xc9, + 0xbd, 0x12, 0xb9, 0x5c, 0x75, 0x1c, 0x45, 0x5b, 0xeb, 0x15, 0x14, 0x07, 0x6c, 0x3a, 0x8d, 0xe5, + 0x0a, 0x2a, 0xc4, 0xf2, 0xba, 0x77, 0xb5, 0x0b, 0x76, 0x3a, 0xf3, 0x6b, 0x75, 0xc0, 0x1e, 0xc6, + 0x51, 0x26, 0x09, 0x99, 0x43, 0xe7, 0x8b, 0xc6, 0x50, 0xff, 0x45, 0xa2, 0x5d, 0xeb, 0x0d, 0xd8, + 0x42, 0x9f, 0x7b, 0xe6, 0xd5, 0xe6, 0xad, 0xbb, 0x50, 0x3e, 0x9f, 0x0c, 0x11, 0x87, 0xbb, 0xbf, + 0xbd, 0xbd, 0xbd, 0x2d, 0xb5, 0xcd, 0xb2, 0x51, 0xff, 0xdd, 0x02, 0x38, 0x8a, 0x85, 0xc8, 0xa2, + 0xf0, 0x63, 0xc6, 0xc9, 0x43, 0xa8, 0x0a, 0x76, 0xc5, 0x7d, 0xc1, 0xfd, 0xc1, 0x54, 0x53, 0x94, + 0x69, 0x45, 0xa9, 0xce, 0xf8, 0xd1, 0x34, 0x27, 0x2e, 0x14, 0xa3, 0x4c, 0x5c, 0xf2, 0xa9, 0x6b, + 0x2b, 0xf6, 0x93, 0x35, 0x3a, 0x93, 0xc9, 0xd6, 0x2c, 0xd1, 0x45, 0x95, 0xe8, 0x93, 0x35, 0x9d, + 0x6a, 0xa5, 0x1d, 0x32, 0xc9, 0x70, 0xfa, 0xae, 0x2b, 0xad, 0x92, 0xc8, 0x0e, 0x14, 0x25, 0x17, + 0x89, 0x3f, 0xc0, 0x99, 0x6b, 0x9c, 0xac, 0x51, 0x5b, 0xc9, 0x47, 0x8a, 0x7e, 0xcc, 0xc3, 0x60, + 0x2c, 0xf1, 0x98, 0x9a, 0x8a, 0x5e, 0xcb, 0x64, 0x17, 0x6c, 0x19, 0x0f, 0x59, 0xee, 0x02, 0x0e, + 0xfe, 0xff, 0xcd, 0x73, 0xd3, 0x65, 0x79, 0x8a, 0x04, 0xca, 0x4a, 0xb6, 0xc1, 0x16, 0x2c, 0xbf, + 0xe4, 0x6e, 0x55, 0xad, 0x5c, 0xe9, 0x51, 0x54, 0xfa, 0x21, 0x9f, 0x48, 0x86, 0x53, 0xf2, 0xff, + 0x4a, 0x8f, 0x22, 0xa9, 0x83, 0x25, 0xd2, 0x00, 0x67, 0xe4, 0xca, 0xa1, 0x3c, 0x59, 0xa3, 0xca, + 0x48, 0x7e, 0x5a, 0xbe, 0x24, 0x36, 0xf0, 0x92, 0x78, 0x30, 0x47, 0x2e, 0x72, 0xb7, 0xb8, 0x27, + 0x4e, 0xd6, 0x96, 0x6e, 0x8a, 0xda, 0xe3, 0xe5, 0x61, 0xb4, 0x0d, 0x45, 0xc1, 0x31, 0x7f, 0x9b, + 0x7a, 0x2c, 0x6b, 0xa9, 0x56, 0x02, 0xbb, 0xab, 0x16, 0xd4, 0x29, 0x81, 0x9d, 0x45, 0x61, 0x1c, + 0xed, 0x3d, 0x84, 0xd2, 0xec, 0x4e, 0x53, 0x6d, 0xae, 0x6f, 0x35, 0xc7, 0x50, 0x43, 0xe1, 0xb8, + 0xf7, 0xc1, 0x31, 0xf7, 0x9a, 0x50, 0x50, 0x5b, 0x57, 0xc6, 0xb3, 0xf3, 0x7e, 0xf7, 0xf0, 0x17, + 0xc7, 0x20, 0x55, 0x28, 0x5d, 0xbc, 0xef, 0xbd, 0x53, 0x82, 0xa9, 0xa6, 0xc6, 0xe9, 0xfb, 0x7e, + 0xf7, 0x8d, 0x63, 0xd4, 0x4c, 0xc7, 0x68, 0x7b, 0x60, 0x49, 0x16, 0xac, 0xf4, 0x6b, 0x80, 0xcb, + 0x50, 0xa6, 0xf6, 0xd1, 0xa7, 0x96, 0xbc, 0x8f, 0xf9, 0x15, 0xb3, 0xf3, 0xe0, 0x6e, 0xa3, 0xfe, + 0x7b, 0x4f, 0x76, 0x5e, 0x7d, 0x78, 0x19, 0x84, 0x72, 0x9c, 0x5d, 0x36, 0x07, 0xb1, 0xd8, 0x0f, + 0xe2, 0x09, 0x8b, 0x82, 0x7d, 0xfc, 0x03, 0xb8, 0xcc, 0x46, 0xfa, 0x63, 0xf0, 0x2c, 0xe0, 0xd1, + 0xb3, 0x20, 0xc6, 0x5f, 0x07, 0xd5, 0x0f, 0xfb, 0xb3, 0x7f, 0x89, 0x1f, 0xd5, 0xeb, 0x9f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x31, 0xff, 0x4e, 0x30, 0x5a, 0x08, 0x00, 0x00, } diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto 2018-11-22 20:53:19.000000000 +0000 @@ -85,6 +85,13 @@ optional int32 reset = 12; // This field should not conflict with any getters. optional string get_key = 16; + + optional float float_ninf = 20 [default=-inf]; + optional float float_pinf = 21 [default=inf]; + optional float float_exp = 22 [default=1e9]; + optional double double_ninf = 23 [default=-inf]; + optional double double_pinf = 24 [default=inf]; + optional double double_exp = 25 [default=1e9]; } message Reply { diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/proto3/proto3.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/proto3/proto3.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/proto3/proto3.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/protoc-gen-go/testdata/proto3/proto3.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: proto3/proto3.proto -package proto3 // import "github.com/golang/protobuf/protoc-gen-go/testdata/proto3" +package proto3 -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -33,6 +35,7 @@ 2: "UMAMI", 3: "GOPHERLICIOUS", } + var Request_Flavour_value = map[string]int32{ "SWEET": 0, "SOUR": 1, @@ -43,8 +46,9 @@ func (x Request_Flavour) String() string { return proto.EnumName(Request_Flavour_name, int32(x)) } + func (Request_Flavour) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_proto3_a752e09251f17e01, []int{0, 0} + return fileDescriptor_ab04eb4084a521db, []int{0, 0} } type Request struct { @@ -62,16 +66,17 @@ func (m *Request) String() string { return proto.CompactTextString(m) } func (*Request) ProtoMessage() {} func (*Request) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_a752e09251f17e01, []int{0} + return fileDescriptor_ab04eb4084a521db, []int{0} } + func (m *Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Request.Unmarshal(m, b) } func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Request.Marshal(b, m, deterministic) } -func (dst *Request) XXX_Merge(src proto.Message) { - xxx_messageInfo_Request.Merge(dst, src) +func (m *Request) XXX_Merge(src proto.Message) { + xxx_messageInfo_Request.Merge(m, src) } func (m *Request) XXX_Size() int { return xxx_messageInfo_Request.Size(m) @@ -129,16 +134,17 @@ func (m *Book) String() string { return proto.CompactTextString(m) } func (*Book) ProtoMessage() {} func (*Book) Descriptor() ([]byte, []int) { - return fileDescriptor_proto3_a752e09251f17e01, []int{1} + return fileDescriptor_ab04eb4084a521db, []int{1} } + func (m *Book) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Book.Unmarshal(m, b) } func (m *Book) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Book.Marshal(b, m, deterministic) } -func (dst *Book) XXX_Merge(src proto.Message) { - xxx_messageInfo_Book.Merge(dst, src) +func (m *Book) XXX_Merge(src proto.Message) { + xxx_messageInfo_Book.Merge(m, src) } func (m *Book) XXX_Size() int { return xxx_messageInfo_Book.Size(m) @@ -164,14 +170,14 @@ } func init() { + proto.RegisterEnum("proto3.Request_Flavour", Request_Flavour_name, Request_Flavour_value) proto.RegisterType((*Request)(nil), "proto3.Request") proto.RegisterType((*Book)(nil), "proto3.Book") - proto.RegisterEnum("proto3.Request_Flavour", Request_Flavour_name, Request_Flavour_value) } -func init() { proto.RegisterFile("proto3/proto3.proto", fileDescriptor_proto3_a752e09251f17e01) } +func init() { proto.RegisterFile("proto3/proto3.proto", fileDescriptor_ab04eb4084a521db) } -var fileDescriptor_proto3_a752e09251f17e01 = []byte{ +var fileDescriptor_ab04eb4084a521db = []byte{ // 306 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x3c, 0x90, 0xcf, 0x4e, 0xf2, 0x40, 0x14, 0xc5, 0x99, 0xfe, 0xf9, 0x80, 0xfb, 0xa1, 0x19, 0xaf, 0x26, 0x8e, 0x1b, 0x33, 0x61, 0xd5, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/any/any.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/any/any.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/any/any.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/any/any.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: google/protobuf/any.proto -package any // import "github.com/golang/protobuf/ptypes/any" +package any -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -99,17 +101,18 @@ // } // type Any struct { - // A URL/resource name whose content describes the type of the - // serialized protocol buffer message. + // A URL/resource name that uniquely identifies the type of the serialized + // protocol buffer message. The last segment of the URL's path must represent + // the fully qualified name of the type (as in + // `path/google.protobuf.Duration`). The name should be in a canonical form + // (e.g., leading "." is not accepted). // - // For URLs which use the scheme `http`, `https`, or no scheme, the - // following restrictions and interpretations apply: + // In practice, teams usually precompile into the binary all types that they + // expect it to use in the context of Any. However, for URLs which use the + // scheme `http`, `https`, or no scheme, one can optionally set up a type + // server that maps type URLs to message definitions as follows: // // * If no scheme is provided, `https` is assumed. - // * The last segment of the URL's path must represent the fully - // qualified name of the type (as in `path/google.protobuf.Duration`). - // The name should be in a canonical form (e.g., leading "." is - // not accepted). // * An HTTP GET on the URL must yield a [google.protobuf.Type][] // value in binary format, or produce an error. // * Applications are allowed to cache lookup results based on the @@ -118,6 +121,10 @@ // on changes to types. (Use versioned type names to manage // breaking changes.) // + // Note: this functionality is not currently available in the official + // protobuf release, and it is not used for type URLs beginning with + // type.googleapis.com. + // // Schemes other than `http`, `https` (or the empty scheme) might be // used with implementation specific semantics. // @@ -133,17 +140,19 @@ func (m *Any) String() string { return proto.CompactTextString(m) } func (*Any) ProtoMessage() {} func (*Any) Descriptor() ([]byte, []int) { - return fileDescriptor_any_744b9ca530f228db, []int{0} + return fileDescriptor_b53526c13ae22eb4, []int{0} } + func (*Any) XXX_WellKnownType() string { return "Any" } + func (m *Any) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Any.Unmarshal(m, b) } func (m *Any) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Any.Marshal(b, m, deterministic) } -func (dst *Any) XXX_Merge(src proto.Message) { - xxx_messageInfo_Any.Merge(dst, src) +func (m *Any) XXX_Merge(src proto.Message) { + xxx_messageInfo_Any.Merge(m, src) } func (m *Any) XXX_Size() int { return xxx_messageInfo_Any.Size(m) @@ -172,9 +181,9 @@ proto.RegisterType((*Any)(nil), "google.protobuf.Any") } -func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor_any_744b9ca530f228db) } +func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor_b53526c13ae22eb4) } -var fileDescriptor_any_744b9ca530f228db = []byte{ +var fileDescriptor_b53526c13ae22eb4 = []byte{ // 185 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/any/any.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/any/any.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/any/any.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/any/any.proto 2018-11-22 20:53:19.000000000 +0000 @@ -120,17 +120,18 @@ // } // message Any { - // A URL/resource name whose content describes the type of the - // serialized protocol buffer message. + // A URL/resource name that uniquely identifies the type of the serialized + // protocol buffer message. The last segment of the URL's path must represent + // the fully qualified name of the type (as in + // `path/google.protobuf.Duration`). The name should be in a canonical form + // (e.g., leading "." is not accepted). // - // For URLs which use the scheme `http`, `https`, or no scheme, the - // following restrictions and interpretations apply: + // In practice, teams usually precompile into the binary all types that they + // expect it to use in the context of Any. However, for URLs which use the + // scheme `http`, `https`, or no scheme, one can optionally set up a type + // server that maps type URLs to message definitions as follows: // // * If no scheme is provided, `https` is assumed. - // * The last segment of the URL's path must represent the fully - // qualified name of the type (as in `path/google.protobuf.Duration`). - // The name should be in a canonical form (e.g., leading "." is - // not accepted). // * An HTTP GET on the URL must yield a [google.protobuf.Type][] // value in binary format, or produce an error. // * Applications are allowed to cache lookup results based on the @@ -139,6 +140,10 @@ // on changes to types. (Use versioned type names to manage // breaking changes.) // + // Note: this functionality is not currently available in the official + // protobuf release, and it is not used for type URLs beginning with + // type.googleapis.com. + // // Schemes other than `http`, `https` (or the empty scheme) might be // used with implementation specific semantics. // diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/duration/duration.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/duration/duration.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/duration/duration.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/duration/duration.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: google/protobuf/duration.proto -package duration // import "github.com/golang/protobuf/ptypes/duration" +package duration -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -99,17 +101,19 @@ func (m *Duration) String() string { return proto.CompactTextString(m) } func (*Duration) ProtoMessage() {} func (*Duration) Descriptor() ([]byte, []int) { - return fileDescriptor_duration_e7d612259e3f0613, []int{0} + return fileDescriptor_23597b2ebd7ac6c5, []int{0} } + func (*Duration) XXX_WellKnownType() string { return "Duration" } + func (m *Duration) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Duration.Unmarshal(m, b) } func (m *Duration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Duration.Marshal(b, m, deterministic) } -func (dst *Duration) XXX_Merge(src proto.Message) { - xxx_messageInfo_Duration.Merge(dst, src) +func (m *Duration) XXX_Merge(src proto.Message) { + xxx_messageInfo_Duration.Merge(m, src) } func (m *Duration) XXX_Size() int { return xxx_messageInfo_Duration.Size(m) @@ -138,11 +142,9 @@ proto.RegisterType((*Duration)(nil), "google.protobuf.Duration") } -func init() { - proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor_duration_e7d612259e3f0613) -} +func init() { proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor_23597b2ebd7ac6c5) } -var fileDescriptor_duration_e7d612259e3f0613 = []byte{ +var fileDescriptor_23597b2ebd7ac6c5 = []byte{ // 190 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/empty/empty.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/empty/empty.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/empty/empty.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/empty/empty.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: google/protobuf/empty.proto -package empty // import "github.com/golang/protobuf/ptypes/empty" +package empty -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -37,17 +39,19 @@ func (m *Empty) String() string { return proto.CompactTextString(m) } func (*Empty) ProtoMessage() {} func (*Empty) Descriptor() ([]byte, []int) { - return fileDescriptor_empty_39e6d6db0632e5b2, []int{0} + return fileDescriptor_900544acb223d5b8, []int{0} } + func (*Empty) XXX_WellKnownType() string { return "Empty" } + func (m *Empty) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Empty.Unmarshal(m, b) } func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Empty.Marshal(b, m, deterministic) } -func (dst *Empty) XXX_Merge(src proto.Message) { - xxx_messageInfo_Empty.Merge(dst, src) +func (m *Empty) XXX_Merge(src proto.Message) { + xxx_messageInfo_Empty.Merge(m, src) } func (m *Empty) XXX_Size() int { return xxx_messageInfo_Empty.Size(m) @@ -62,9 +66,9 @@ proto.RegisterType((*Empty)(nil), "google.protobuf.Empty") } -func init() { proto.RegisterFile("google/protobuf/empty.proto", fileDescriptor_empty_39e6d6db0632e5b2) } +func init() { proto.RegisterFile("google/protobuf/empty.proto", fileDescriptor_900544acb223d5b8) } -var fileDescriptor_empty_39e6d6db0632e5b2 = []byte{ +var fileDescriptor_900544acb223d5b8 = []byte{ // 148 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcd, 0x2d, 0x28, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/struct/struct.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/struct/struct.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/struct/struct.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/struct/struct.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: google/protobuf/struct.proto -package structpb // import "github.com/golang/protobuf/ptypes/struct" +package structpb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -32,6 +34,7 @@ var NullValue_name = map[int32]string{ 0: "NULL_VALUE", } + var NullValue_value = map[string]int32{ "NULL_VALUE": 0, } @@ -39,9 +42,11 @@ func (x NullValue) String() string { return proto.EnumName(NullValue_name, int32(x)) } + func (NullValue) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_struct_3a5a94e0c7801b27, []int{0} + return fileDescriptor_df322afd6c9fb402, []int{0} } + func (NullValue) XXX_WellKnownType() string { return "NullValue" } // `Struct` represents a structured data value, consisting of fields @@ -64,17 +69,19 @@ func (m *Struct) String() string { return proto.CompactTextString(m) } func (*Struct) ProtoMessage() {} func (*Struct) Descriptor() ([]byte, []int) { - return fileDescriptor_struct_3a5a94e0c7801b27, []int{0} + return fileDescriptor_df322afd6c9fb402, []int{0} } + func (*Struct) XXX_WellKnownType() string { return "Struct" } + func (m *Struct) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Struct.Unmarshal(m, b) } func (m *Struct) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Struct.Marshal(b, m, deterministic) } -func (dst *Struct) XXX_Merge(src proto.Message) { - xxx_messageInfo_Struct.Merge(dst, src) +func (m *Struct) XXX_Merge(src proto.Message) { + xxx_messageInfo_Struct.Merge(m, src) } func (m *Struct) XXX_Size() int { return xxx_messageInfo_Struct.Size(m) @@ -118,17 +125,19 @@ func (m *Value) String() string { return proto.CompactTextString(m) } func (*Value) ProtoMessage() {} func (*Value) Descriptor() ([]byte, []int) { - return fileDescriptor_struct_3a5a94e0c7801b27, []int{1} + return fileDescriptor_df322afd6c9fb402, []int{1} } + func (*Value) XXX_WellKnownType() string { return "Value" } + func (m *Value) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Value.Unmarshal(m, b) } func (m *Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Value.Marshal(b, m, deterministic) } -func (dst *Value) XXX_Merge(src proto.Message) { - xxx_messageInfo_Value.Merge(dst, src) +func (m *Value) XXX_Merge(src proto.Message) { + xxx_messageInfo_Value.Merge(m, src) } func (m *Value) XXX_Size() int { return xxx_messageInfo_Value.Size(m) @@ -378,17 +387,19 @@ func (m *ListValue) String() string { return proto.CompactTextString(m) } func (*ListValue) ProtoMessage() {} func (*ListValue) Descriptor() ([]byte, []int) { - return fileDescriptor_struct_3a5a94e0c7801b27, []int{2} + return fileDescriptor_df322afd6c9fb402, []int{2} } + func (*ListValue) XXX_WellKnownType() string { return "ListValue" } + func (m *ListValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListValue.Unmarshal(m, b) } func (m *ListValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ListValue.Marshal(b, m, deterministic) } -func (dst *ListValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListValue.Merge(dst, src) +func (m *ListValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListValue.Merge(m, src) } func (m *ListValue) XXX_Size() int { return xxx_messageInfo_ListValue.Size(m) @@ -407,18 +418,16 @@ } func init() { + proto.RegisterEnum("google.protobuf.NullValue", NullValue_name, NullValue_value) proto.RegisterType((*Struct)(nil), "google.protobuf.Struct") proto.RegisterMapType((map[string]*Value)(nil), "google.protobuf.Struct.FieldsEntry") proto.RegisterType((*Value)(nil), "google.protobuf.Value") proto.RegisterType((*ListValue)(nil), "google.protobuf.ListValue") - proto.RegisterEnum("google.protobuf.NullValue", NullValue_name, NullValue_value) } -func init() { - proto.RegisterFile("google/protobuf/struct.proto", fileDescriptor_struct_3a5a94e0c7801b27) -} +func init() { proto.RegisterFile("google/protobuf/struct.proto", fileDescriptor_df322afd6c9fb402) } -var fileDescriptor_struct_3a5a94e0c7801b27 = []byte{ +var fileDescriptor_df322afd6c9fb402 = []byte{ // 417 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x41, 0x8b, 0xd3, 0x40, 0x14, 0xc7, 0x3b, 0xc9, 0x36, 0x98, 0x17, 0x59, 0x97, 0x11, 0xb4, 0xac, 0xa2, 0xa1, 0x7b, 0x09, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: google/protobuf/timestamp.proto -package timestamp // import "github.com/golang/protobuf/ptypes/timestamp" +package timestamp -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -81,7 +83,9 @@ // {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional // seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), // are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone -// is required, though only UTC (as indicated by "Z") is presently supported. +// is required. A proto3 JSON serializer should always use UTC (as indicated by +// "Z") when printing the Timestamp type and a proto3 JSON parser should be +// able to accept both UTC and other timezones (as indicated by an offset). // // For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past // 01:30 UTC on January 15, 2017. @@ -92,8 +96,8 @@ // to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) // with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one // can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( -// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--) -// to obtain a formatter capable of generating timestamps in this format. +// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime-- +// ) to obtain a formatter capable of generating timestamps in this format. // // type Timestamp struct { @@ -115,17 +119,19 @@ func (m *Timestamp) String() string { return proto.CompactTextString(m) } func (*Timestamp) ProtoMessage() {} func (*Timestamp) Descriptor() ([]byte, []int) { - return fileDescriptor_timestamp_b826e8e5fba671a8, []int{0} + return fileDescriptor_292007bbfe81227e, []int{0} } + func (*Timestamp) XXX_WellKnownType() string { return "Timestamp" } + func (m *Timestamp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Timestamp.Unmarshal(m, b) } func (m *Timestamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Timestamp.Marshal(b, m, deterministic) } -func (dst *Timestamp) XXX_Merge(src proto.Message) { - xxx_messageInfo_Timestamp.Merge(dst, src) +func (m *Timestamp) XXX_Merge(src proto.Message) { + xxx_messageInfo_Timestamp.Merge(m, src) } func (m *Timestamp) XXX_Size() int { return xxx_messageInfo_Timestamp.Size(m) @@ -154,11 +160,9 @@ proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp") } -func init() { - proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor_timestamp_b826e8e5fba671a8) -} +func init() { proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor_292007bbfe81227e) } -var fileDescriptor_timestamp_b826e8e5fba671a8 = []byte{ +var fileDescriptor_292007bbfe81227e = []byte{ // 191 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto --- lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto 2018-11-22 20:53:19.000000000 +0000 @@ -103,7 +103,9 @@ // {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional // seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), // are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone -// is required, though only UTC (as indicated by "Z") is presently supported. +// is required. A proto3 JSON serializer should always use UTC (as indicated by +// "Z") when printing the Timestamp type and a proto3 JSON parser should be +// able to accept both UTC and other timezones (as indicated by an offset). // // For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past // 01:30 UTC on January 15, 2017. @@ -114,8 +116,8 @@ // to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) // with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one // can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( -// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--) -// to obtain a formatter capable of generating timestamps in this format. +// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime-- +// ) to obtain a formatter capable of generating timestamps in this format. // // message Timestamp { diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go --- lxd-3.0.2/dist/src/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go 2018-11-22 20:53:19.000000000 +0000 @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: google/protobuf/wrappers.proto -package wrappers // import "github.com/golang/protobuf/ptypes/wrappers" +package wrappers -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -33,17 +35,19 @@ func (m *DoubleValue) String() string { return proto.CompactTextString(m) } func (*DoubleValue) ProtoMessage() {} func (*DoubleValue) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{0} + return fileDescriptor_5377b62bda767935, []int{0} } + func (*DoubleValue) XXX_WellKnownType() string { return "DoubleValue" } + func (m *DoubleValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DoubleValue.Unmarshal(m, b) } func (m *DoubleValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DoubleValue.Marshal(b, m, deterministic) } -func (dst *DoubleValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_DoubleValue.Merge(dst, src) +func (m *DoubleValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_DoubleValue.Merge(m, src) } func (m *DoubleValue) XXX_Size() int { return xxx_messageInfo_DoubleValue.Size(m) @@ -76,17 +80,19 @@ func (m *FloatValue) String() string { return proto.CompactTextString(m) } func (*FloatValue) ProtoMessage() {} func (*FloatValue) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{1} + return fileDescriptor_5377b62bda767935, []int{1} } + func (*FloatValue) XXX_WellKnownType() string { return "FloatValue" } + func (m *FloatValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FloatValue.Unmarshal(m, b) } func (m *FloatValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_FloatValue.Marshal(b, m, deterministic) } -func (dst *FloatValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_FloatValue.Merge(dst, src) +func (m *FloatValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_FloatValue.Merge(m, src) } func (m *FloatValue) XXX_Size() int { return xxx_messageInfo_FloatValue.Size(m) @@ -119,17 +125,19 @@ func (m *Int64Value) String() string { return proto.CompactTextString(m) } func (*Int64Value) ProtoMessage() {} func (*Int64Value) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{2} + return fileDescriptor_5377b62bda767935, []int{2} } + func (*Int64Value) XXX_WellKnownType() string { return "Int64Value" } + func (m *Int64Value) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Int64Value.Unmarshal(m, b) } func (m *Int64Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Int64Value.Marshal(b, m, deterministic) } -func (dst *Int64Value) XXX_Merge(src proto.Message) { - xxx_messageInfo_Int64Value.Merge(dst, src) +func (m *Int64Value) XXX_Merge(src proto.Message) { + xxx_messageInfo_Int64Value.Merge(m, src) } func (m *Int64Value) XXX_Size() int { return xxx_messageInfo_Int64Value.Size(m) @@ -162,17 +170,19 @@ func (m *UInt64Value) String() string { return proto.CompactTextString(m) } func (*UInt64Value) ProtoMessage() {} func (*UInt64Value) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{3} + return fileDescriptor_5377b62bda767935, []int{3} } + func (*UInt64Value) XXX_WellKnownType() string { return "UInt64Value" } + func (m *UInt64Value) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UInt64Value.Unmarshal(m, b) } func (m *UInt64Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UInt64Value.Marshal(b, m, deterministic) } -func (dst *UInt64Value) XXX_Merge(src proto.Message) { - xxx_messageInfo_UInt64Value.Merge(dst, src) +func (m *UInt64Value) XXX_Merge(src proto.Message) { + xxx_messageInfo_UInt64Value.Merge(m, src) } func (m *UInt64Value) XXX_Size() int { return xxx_messageInfo_UInt64Value.Size(m) @@ -205,17 +215,19 @@ func (m *Int32Value) String() string { return proto.CompactTextString(m) } func (*Int32Value) ProtoMessage() {} func (*Int32Value) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{4} + return fileDescriptor_5377b62bda767935, []int{4} } + func (*Int32Value) XXX_WellKnownType() string { return "Int32Value" } + func (m *Int32Value) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Int32Value.Unmarshal(m, b) } func (m *Int32Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Int32Value.Marshal(b, m, deterministic) } -func (dst *Int32Value) XXX_Merge(src proto.Message) { - xxx_messageInfo_Int32Value.Merge(dst, src) +func (m *Int32Value) XXX_Merge(src proto.Message) { + xxx_messageInfo_Int32Value.Merge(m, src) } func (m *Int32Value) XXX_Size() int { return xxx_messageInfo_Int32Value.Size(m) @@ -248,17 +260,19 @@ func (m *UInt32Value) String() string { return proto.CompactTextString(m) } func (*UInt32Value) ProtoMessage() {} func (*UInt32Value) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{5} + return fileDescriptor_5377b62bda767935, []int{5} } + func (*UInt32Value) XXX_WellKnownType() string { return "UInt32Value" } + func (m *UInt32Value) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UInt32Value.Unmarshal(m, b) } func (m *UInt32Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UInt32Value.Marshal(b, m, deterministic) } -func (dst *UInt32Value) XXX_Merge(src proto.Message) { - xxx_messageInfo_UInt32Value.Merge(dst, src) +func (m *UInt32Value) XXX_Merge(src proto.Message) { + xxx_messageInfo_UInt32Value.Merge(m, src) } func (m *UInt32Value) XXX_Size() int { return xxx_messageInfo_UInt32Value.Size(m) @@ -291,17 +305,19 @@ func (m *BoolValue) String() string { return proto.CompactTextString(m) } func (*BoolValue) ProtoMessage() {} func (*BoolValue) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{6} + return fileDescriptor_5377b62bda767935, []int{6} } + func (*BoolValue) XXX_WellKnownType() string { return "BoolValue" } + func (m *BoolValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BoolValue.Unmarshal(m, b) } func (m *BoolValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BoolValue.Marshal(b, m, deterministic) } -func (dst *BoolValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_BoolValue.Merge(dst, src) +func (m *BoolValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_BoolValue.Merge(m, src) } func (m *BoolValue) XXX_Size() int { return xxx_messageInfo_BoolValue.Size(m) @@ -334,17 +350,19 @@ func (m *StringValue) String() string { return proto.CompactTextString(m) } func (*StringValue) ProtoMessage() {} func (*StringValue) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{7} + return fileDescriptor_5377b62bda767935, []int{7} } + func (*StringValue) XXX_WellKnownType() string { return "StringValue" } + func (m *StringValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StringValue.Unmarshal(m, b) } func (m *StringValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_StringValue.Marshal(b, m, deterministic) } -func (dst *StringValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_StringValue.Merge(dst, src) +func (m *StringValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_StringValue.Merge(m, src) } func (m *StringValue) XXX_Size() int { return xxx_messageInfo_StringValue.Size(m) @@ -377,17 +395,19 @@ func (m *BytesValue) String() string { return proto.CompactTextString(m) } func (*BytesValue) ProtoMessage() {} func (*BytesValue) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_16c7c35c009f3253, []int{8} + return fileDescriptor_5377b62bda767935, []int{8} } + func (*BytesValue) XXX_WellKnownType() string { return "BytesValue" } + func (m *BytesValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BytesValue.Unmarshal(m, b) } func (m *BytesValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BytesValue.Marshal(b, m, deterministic) } -func (dst *BytesValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_BytesValue.Merge(dst, src) +func (m *BytesValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_BytesValue.Merge(m, src) } func (m *BytesValue) XXX_Size() int { return xxx_messageInfo_BytesValue.Size(m) @@ -417,11 +437,9 @@ proto.RegisterType((*BytesValue)(nil), "google.protobuf.BytesValue") } -func init() { - proto.RegisterFile("google/protobuf/wrappers.proto", fileDescriptor_wrappers_16c7c35c009f3253) -} +func init() { proto.RegisterFile("google/protobuf/wrappers.proto", fileDescriptor_5377b62bda767935) } -var fileDescriptor_wrappers_16c7c35c009f3253 = []byte{ +var fileDescriptor_5377b62bda767935 = []byte{ // 259 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x2f, 0x4a, 0x2c, diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/README.md lxd-3.0.3/dist/src/github.com/golang/protobuf/README.md --- lxd-3.0.2/dist/src/github.com/golang/protobuf/README.md 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/README.md 2018-11-22 20:53:18.000000000 +0000 @@ -7,7 +7,7 @@ Copyright 2010 The Go Authors. https://github.com/golang/protobuf -This package and the code it generates requires at least Go 1.6. +This package and the code it generates requires at least Go 1.9. This software implements Go bindings for protocol buffers. For information about protocol buffers themselves, see diff -Nru lxd-3.0.2/dist/src/github.com/golang/protobuf/.travis.yml lxd-3.0.3/dist/src/github.com/golang/protobuf/.travis.yml --- lxd-3.0.2/dist/src/github.com/golang/protobuf/.travis.yml 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/golang/protobuf/.travis.yml 2018-11-22 20:53:18.000000000 +0000 @@ -1,14 +1,15 @@ sudo: false language: go go: -- 1.6.x +- 1.9.x - 1.10.x +- 1.11.x - 1.x install: - go get -v -d google.golang.org/grpc - go get -v -d -t github.com/golang/protobuf/... - - curl -L https://github.com/google/protobuf/releases/download/v3.5.1/protoc-3.5.1-linux-x86_64.zip -o /tmp/protoc.zip + - curl -L https://github.com/google/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip -o /tmp/protoc.zip - unzip /tmp/protoc.zip -d "$HOME"/protoc - mkdir -p "$HOME"/src && ln -s "$HOME"/protoc "$HOME"/src/protobuf diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/CONTRIBUTING.md lxd-3.0.3/dist/src/github.com/google/uuid/CONTRIBUTING.md --- lxd-3.0.2/dist/src/github.com/google/uuid/CONTRIBUTING.md 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/CONTRIBUTING.md 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,10 @@ +# How to contribute + +We definitely welcome patches and contribution to this project! + +### Legal requirements + +In order to protect both you and ourselves, you will need to sign the +[Contributor License Agreement](https://cla.developers.google.com/clas). + +You may have already signed it for other Google projects. diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/CONTRIBUTORS lxd-3.0.3/dist/src/github.com/google/uuid/CONTRIBUTORS --- lxd-3.0.2/dist/src/github.com/google/uuid/CONTRIBUTORS 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/CONTRIBUTORS 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,9 @@ +Paul Borman +bmatsuo +shawnps +theory +jboverfelt +dsymonds +cd1 +wallclockbuilder +dansouza diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/dce.go lxd-3.0.3/dist/src/github.com/google/uuid/dce.go --- lxd-3.0.2/dist/src/github.com/google/uuid/dce.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/dce.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,80 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" + "fmt" + "os" +) + +// A Domain represents a Version 2 domain +type Domain byte + +// Domain constants for DCE Security (Version 2) UUIDs. +const ( + Person = Domain(0) + Group = Domain(1) + Org = Domain(2) +) + +// NewDCESecurity returns a DCE Security (Version 2) UUID. +// +// The domain should be one of Person, Group or Org. +// On a POSIX system the id should be the users UID for the Person +// domain and the users GID for the Group. The meaning of id for +// the domain Org or on non-POSIX systems is site defined. +// +// For a given domain/id pair the same token may be returned for up to +// 7 minutes and 10 seconds. +func NewDCESecurity(domain Domain, id uint32) (UUID, error) { + uuid, err := NewUUID() + if err == nil { + uuid[6] = (uuid[6] & 0x0f) | 0x20 // Version 2 + uuid[9] = byte(domain) + binary.BigEndian.PutUint32(uuid[0:], id) + } + return uuid, err +} + +// NewDCEPerson returns a DCE Security (Version 2) UUID in the person +// domain with the id returned by os.Getuid. +// +// NewDCESecurity(Person, uint32(os.Getuid())) +func NewDCEPerson() (UUID, error) { + return NewDCESecurity(Person, uint32(os.Getuid())) +} + +// NewDCEGroup returns a DCE Security (Version 2) UUID in the group +// domain with the id returned by os.Getgid. +// +// NewDCESecurity(Group, uint32(os.Getgid())) +func NewDCEGroup() (UUID, error) { + return NewDCESecurity(Group, uint32(os.Getgid())) +} + +// Domain returns the domain for a Version 2 UUID. Domains are only defined +// for Version 2 UUIDs. +func (uuid UUID) Domain() Domain { + return Domain(uuid[9]) +} + +// ID returns the id for a Version 2 UUID. IDs are only defined for Version 2 +// UUIDs. +func (uuid UUID) ID() uint32 { + return binary.BigEndian.Uint32(uuid[0:4]) +} + +func (d Domain) String() string { + switch d { + case Person: + return "Person" + case Group: + return "Group" + case Org: + return "Org" + } + return fmt.Sprintf("Domain%d", int(d)) +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/doc.go lxd-3.0.3/dist/src/github.com/google/uuid/doc.go --- lxd-3.0.2/dist/src/github.com/google/uuid/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/doc.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,12 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package uuid generates and inspects UUIDs. +// +// UUIDs are based on RFC 4122 and DCE 1.1: Authentication and Security +// Services. +// +// A UUID is a 16 byte (128 bit) array. UUIDs may be used as keys to +// maps or compared directly. +package uuid diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/go.mod lxd-3.0.3/dist/src/github.com/google/uuid/go.mod --- lxd-3.0.2/dist/src/github.com/google/uuid/go.mod 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/go.mod 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1 @@ +module github.com/google/uuid diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/hash.go lxd-3.0.3/dist/src/github.com/google/uuid/hash.go --- lxd-3.0.2/dist/src/github.com/google/uuid/hash.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/hash.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,53 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "crypto/md5" + "crypto/sha1" + "hash" +) + +// Well known namespace IDs and UUIDs +var ( + NameSpaceDNS = Must(Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceURL = Must(Parse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceOID = Must(Parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceX500 = Must(Parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8")) + Nil UUID // empty UUID, all zeros +) + +// NewHash returns a new UUID derived from the hash of space concatenated with +// data generated by h. The hash should be at least 16 byte in length. The +// first 16 bytes of the hash are used to form the UUID. The version of the +// UUID will be the lower 4 bits of version. NewHash is used to implement +// NewMD5 and NewSHA1. +func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID { + h.Reset() + h.Write(space[:]) + h.Write(data) + s := h.Sum(nil) + var uuid UUID + copy(uuid[:], s) + uuid[6] = (uuid[6] & 0x0f) | uint8((version&0xf)<<4) + uuid[8] = (uuid[8] & 0x3f) | 0x80 // RFC 4122 variant + return uuid +} + +// NewMD5 returns a new MD5 (Version 3) UUID based on the +// supplied name space and data. It is the same as calling: +// +// NewHash(md5.New(), space, data, 3) +func NewMD5(space UUID, data []byte) UUID { + return NewHash(md5.New(), space, data, 3) +} + +// NewSHA1 returns a new SHA1 (Version 5) UUID based on the +// supplied name space and data. It is the same as calling: +// +// NewHash(sha1.New(), space, data, 5) +func NewSHA1(space UUID, data []byte) UUID { + return NewHash(sha1.New(), space, data, 5) +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/json_test.go lxd-3.0.3/dist/src/github.com/google/uuid/json_test.go --- lxd-3.0.2/dist/src/github.com/google/uuid/json_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/json_test.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,62 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/json" + "reflect" + "testing" +) + +var testUUID = Must(Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479")) + +func TestJSON(t *testing.T) { + type S struct { + ID1 UUID + ID2 UUID + } + s1 := S{ID1: testUUID} + data, err := json.Marshal(&s1) + if err != nil { + t.Fatal(err) + } + var s2 S + if err := json.Unmarshal(data, &s2); err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(&s1, &s2) { + t.Errorf("got %#v, want %#v", s2, s1) + } +} + +func BenchmarkUUID_MarshalJSON(b *testing.B) { + x := &struct { + UUID UUID `json:"uuid"` + }{} + var err error + x.UUID, err = Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479") + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + js, err := json.Marshal(x) + if err != nil { + b.Fatalf("marshal json: %#v (%v)", js, err) + } + } +} + +func BenchmarkUUID_UnmarshalJSON(b *testing.B) { + js := []byte(`{"uuid":"f47ac10b-58cc-0372-8567-0e02b2c3d479"}`) + var x *struct { + UUID UUID `json:"uuid"` + } + for i := 0; i < b.N; i++ { + err := json.Unmarshal(js, &x) + if err != nil { + b.Fatalf("marshal json: %#v (%v)", js, err) + } + } +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/LICENSE lxd-3.0.3/dist/src/github.com/google/uuid/LICENSE --- lxd-3.0.2/dist/src/github.com/google/uuid/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/LICENSE 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,27 @@ +Copyright (c) 2009,2014 Google Inc. All rights reserved. + +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. diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/marshal.go lxd-3.0.3/dist/src/github.com/google/uuid/marshal.go --- lxd-3.0.2/dist/src/github.com/google/uuid/marshal.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/marshal.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,37 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import "fmt" + +// MarshalText implements encoding.TextMarshaler. +func (uuid UUID) MarshalText() ([]byte, error) { + var js [36]byte + encodeHex(js[:], uuid) + return js[:], nil +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (uuid *UUID) UnmarshalText(data []byte) error { + id, err := ParseBytes(data) + if err == nil { + *uuid = id + } + return err +} + +// MarshalBinary implements encoding.BinaryMarshaler. +func (uuid UUID) MarshalBinary() ([]byte, error) { + return uuid[:], nil +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler. +func (uuid *UUID) UnmarshalBinary(data []byte) error { + if len(data) != 16 { + return fmt.Errorf("invalid UUID (got %d bytes)", len(data)) + } + copy(uuid[:], data) + return nil +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/node.go lxd-3.0.3/dist/src/github.com/google/uuid/node.go --- lxd-3.0.2/dist/src/github.com/google/uuid/node.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/node.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,89 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "sync" +) + +var ( + nodeMu sync.Mutex + ifname string // name of interface being used + nodeID [6]byte // hardware for version 1 UUIDs + zeroID [6]byte // nodeID with only 0's +) + +// NodeInterface returns the name of the interface from which the NodeID was +// derived. The interface "user" is returned if the NodeID was set by +// SetNodeID. +func NodeInterface() string { + defer nodeMu.Unlock() + nodeMu.Lock() + return ifname +} + +// SetNodeInterface selects the hardware address to be used for Version 1 UUIDs. +// If name is "" then the first usable interface found will be used or a random +// Node ID will be generated. If a named interface cannot be found then false +// is returned. +// +// SetNodeInterface never fails when name is "". +func SetNodeInterface(name string) bool { + defer nodeMu.Unlock() + nodeMu.Lock() + return setNodeInterface(name) +} + +func setNodeInterface(name string) bool { + iname, addr := getHardwareInterface(name) // null implementation for js + if iname != "" && addr != nil { + ifname = iname + copy(nodeID[:], addr) + return true + } + + // We found no interfaces with a valid hardware address. If name + // does not specify a specific interface generate a random Node ID + // (section 4.1.6) + if name == "" { + randomBits(nodeID[:]) + return true + } + return false +} + +// NodeID returns a slice of a copy of the current Node ID, setting the Node ID +// if not already set. +func NodeID() []byte { + defer nodeMu.Unlock() + nodeMu.Lock() + if nodeID == zeroID { + setNodeInterface("") + } + nid := nodeID + return nid[:] +} + +// SetNodeID sets the Node ID to be used for Version 1 UUIDs. The first 6 bytes +// of id are used. If id is less than 6 bytes then false is returned and the +// Node ID is not set. +func SetNodeID(id []byte) bool { + if len(id) < 6 { + return false + } + defer nodeMu.Unlock() + nodeMu.Lock() + copy(nodeID[:], id) + ifname = "user" + return true +} + +// NodeID returns the 6 byte node id encoded in uuid. It returns nil if uuid is +// not valid. The NodeID is only well defined for version 1 and 2 UUIDs. +func (uuid UUID) NodeID() []byte { + var node [6]byte + copy(node[:], uuid[10:]) + return node[:] +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/node_js.go lxd-3.0.3/dist/src/github.com/google/uuid/node_js.go --- lxd-3.0.2/dist/src/github.com/google/uuid/node_js.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/node_js.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,12 @@ +// Copyright 2017 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build js + +package uuid + +// getHardwareInterface returns nil values for the JS version of the code. +// This remvoves the "net" dependency, because it is not used in the browser. +// Using the "net" library inflates the size of the transpiled JS code by 673k bytes. +func getHardwareInterface(name string) (string, []byte) { return "", nil } diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/node_net.go lxd-3.0.3/dist/src/github.com/google/uuid/node_net.go --- lxd-3.0.2/dist/src/github.com/google/uuid/node_net.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/node_net.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,33 @@ +// Copyright 2017 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !js + +package uuid + +import "net" + +var interfaces []net.Interface // cached list of interfaces + +// getHardwareInterface returns the name and hardware address of interface name. +// If name is "" then the name and hardware address of one of the system's +// interfaces is returned. If no interfaces are found (name does not exist or +// there are no interfaces) then "", nil is returned. +// +// Only addresses of at least 6 bytes are returned. +func getHardwareInterface(name string) (string, []byte) { + if interfaces == nil { + var err error + interfaces, err = net.Interfaces() + if err != nil { + return "", nil + } + } + for _, ifs := range interfaces { + if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) { + return ifs.Name, ifs.HardwareAddr + } + } + return "", nil +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/README.md lxd-3.0.3/dist/src/github.com/google/uuid/README.md --- lxd-3.0.2/dist/src/github.com/google/uuid/README.md 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/README.md 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,19 @@ +# uuid ![build status](https://travis-ci.org/google/uuid.svg?branch=master) +The uuid package generates and inspects UUIDs based on +[RFC 4122](http://tools.ietf.org/html/rfc4122) +and DCE 1.1: Authentication and Security Services. + +This package is based on the github.com/pborman/uuid package (previously named +code.google.com/p/go-uuid). It differs from these earlier packages in that +a UUID is a 16 byte array rather than a byte slice. One loss due to this +change is the ability to represent an invalid UUID (vs a NIL UUID). + +###### Install +`go get github.com/google/uuid` + +###### Documentation +[![GoDoc](https://godoc.org/github.com/google/uuid?status.svg)](http://godoc.org/github.com/google/uuid) + +Full `go doc` style documentation for the package can be viewed online without +installing this package by using the GoDoc site here: +http://godoc.org/github.com/google/uuid diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/seq_test.go lxd-3.0.3/dist/src/github.com/google/uuid/seq_test.go --- lxd-3.0.2/dist/src/github.com/google/uuid/seq_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/seq_test.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,66 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "flag" + "runtime" + "testing" + "time" +) + +// This test is only run when --regressions is passed on the go test line. +var regressions = flag.Bool("regressions", false, "run uuid regression tests") + +// TestClockSeqRace tests for a particular race condition of returning two +// identical Version1 UUIDs. The duration of 1 minute was chosen as the race +// condition, before being fixed, nearly always occurred in under 30 seconds. +func TestClockSeqRace(t *testing.T) { + if !*regressions { + t.Skip("skipping regression tests") + } + duration := time.Minute + + done := make(chan struct{}) + defer close(done) + + ch := make(chan UUID, 10000) + ncpu := runtime.NumCPU() + switch ncpu { + case 0, 1: + // We can't run the test effectively. + t.Skip("skipping race test, only one CPU detected") + return + default: + runtime.GOMAXPROCS(ncpu) + } + for i := 0; i < ncpu; i++ { + go func() { + for { + select { + case <-done: + return + case ch <- Must(NewUUID()): + } + } + }() + } + + uuids := make(map[string]bool) + cnt := 0 + start := time.Now() + for u := range ch { + s := u.String() + if uuids[s] { + t.Errorf("duplicate uuid after %d in %v: %s", cnt, time.Since(start), s) + return + } + uuids[s] = true + if time.Since(start) > duration { + return + } + cnt++ + } +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/sql.go lxd-3.0.3/dist/src/github.com/google/uuid/sql.go --- lxd-3.0.2/dist/src/github.com/google/uuid/sql.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/sql.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,59 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "database/sql/driver" + "fmt" +) + +// Scan implements sql.Scanner so UUIDs can be read from databases transparently +// Currently, database types that map to string and []byte are supported. Please +// consult database-specific driver documentation for matching types. +func (uuid *UUID) Scan(src interface{}) error { + switch src := src.(type) { + case nil: + return nil + + case string: + // if an empty UUID comes from a table, we return a null UUID + if src == "" { + return nil + } + + // see Parse for required string format + u, err := Parse(src) + if err != nil { + return fmt.Errorf("Scan: %v", err) + } + + *uuid = u + + case []byte: + // if an empty UUID comes from a table, we return a null UUID + if len(src) == 0 { + return nil + } + + // assumes a simple slice of bytes if 16 bytes + // otherwise attempts to parse + if len(src) != 16 { + return uuid.Scan(string(src)) + } + copy((*uuid)[:], src) + + default: + return fmt.Errorf("Scan: unable to scan type %T into UUID", src) + } + + return nil +} + +// Value implements sql.Valuer so that UUIDs can be written to databases +// transparently. Currently, UUIDs map to strings. Please consult +// database-specific driver documentation for matching types. +func (uuid UUID) Value() (driver.Value, error) { + return uuid.String(), nil +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/sql_test.go lxd-3.0.3/dist/src/github.com/google/uuid/sql_test.go --- lxd-3.0.2/dist/src/github.com/google/uuid/sql_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/sql_test.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,113 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "strings" + "testing" +) + +func TestScan(t *testing.T) { + stringTest := "f47ac10b-58cc-0372-8567-0e02b2c3d479" + badTypeTest := 6 + invalidTest := "f47ac10b-58cc-0372-8567-0e02b2c3d4" + + byteTest := make([]byte, 16) + byteTestUUID := Must(Parse(stringTest)) + copy(byteTest, byteTestUUID[:]) + + // sunny day tests + + var uuid UUID + err := (&uuid).Scan(stringTest) + if err != nil { + t.Fatal(err) + } + + err = (&uuid).Scan([]byte(stringTest)) + if err != nil { + t.Fatal(err) + } + + err = (&uuid).Scan(byteTest) + if err != nil { + t.Fatal(err) + } + + // bad type tests + + err = (&uuid).Scan(badTypeTest) + if err == nil { + t.Error("int correctly parsed and shouldn't have") + } + if !strings.Contains(err.Error(), "unable to scan type") { + t.Error("attempting to parse an int returned an incorrect error message") + } + + // invalid/incomplete uuids + + err = (&uuid).Scan(invalidTest) + if err == nil { + t.Error("invalid uuid was parsed without error") + } + if !strings.Contains(err.Error(), "invalid UUID") { + t.Error("attempting to parse an invalid UUID returned an incorrect error message") + } + + err = (&uuid).Scan(byteTest[:len(byteTest)-2]) + if err == nil { + t.Error("invalid byte uuid was parsed without error") + } + if !strings.Contains(err.Error(), "invalid UUID") { + t.Error("attempting to parse an invalid byte UUID returned an incorrect error message") + } + + // empty tests + + uuid = UUID{} + var emptySlice []byte + err = (&uuid).Scan(emptySlice) + if err != nil { + t.Fatal(err) + } + + for _, v := range uuid { + if v != 0 { + t.Error("UUID was not nil after scanning empty byte slice") + } + } + + uuid = UUID{} + var emptyString string + err = (&uuid).Scan(emptyString) + if err != nil { + t.Fatal(err) + } + for _, v := range uuid { + if v != 0 { + t.Error("UUID was not nil after scanning empty byte slice") + } + } + + uuid = UUID{} + err = (&uuid).Scan(nil) + if err != nil { + t.Fatal(err) + } + for _, v := range uuid { + if v != 0 { + t.Error("UUID was not nil after scanning nil") + } + } +} + +func TestValue(t *testing.T) { + stringTest := "f47ac10b-58cc-0372-8567-0e02b2c3d479" + uuid := Must(Parse(stringTest)) + val, _ := uuid.Value() + if val != stringTest { + t.Error("Value() did not return expected string") + } +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/time.go lxd-3.0.3/dist/src/github.com/google/uuid/time.go --- lxd-3.0.2/dist/src/github.com/google/uuid/time.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/time.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,123 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" + "sync" + "time" +) + +// A Time represents a time as the number of 100's of nanoseconds since 15 Oct +// 1582. +type Time int64 + +const ( + lillian = 2299160 // Julian day of 15 Oct 1582 + unix = 2440587 // Julian day of 1 Jan 1970 + epoch = unix - lillian // Days between epochs + g1582 = epoch * 86400 // seconds between epochs + g1582ns100 = g1582 * 10000000 // 100s of a nanoseconds between epochs +) + +var ( + timeMu sync.Mutex + lasttime uint64 // last time we returned + clockSeq uint16 // clock sequence for this run + + timeNow = time.Now // for testing +) + +// UnixTime converts t the number of seconds and nanoseconds using the Unix +// epoch of 1 Jan 1970. +func (t Time) UnixTime() (sec, nsec int64) { + sec = int64(t - g1582ns100) + nsec = (sec % 10000000) * 100 + sec /= 10000000 + return sec, nsec +} + +// GetTime returns the current Time (100s of nanoseconds since 15 Oct 1582) and +// clock sequence as well as adjusting the clock sequence as needed. An error +// is returned if the current time cannot be determined. +func GetTime() (Time, uint16, error) { + defer timeMu.Unlock() + timeMu.Lock() + return getTime() +} + +func getTime() (Time, uint16, error) { + t := timeNow() + + // If we don't have a clock sequence already, set one. + if clockSeq == 0 { + setClockSequence(-1) + } + now := uint64(t.UnixNano()/100) + g1582ns100 + + // If time has gone backwards with this clock sequence then we + // increment the clock sequence + if now <= lasttime { + clockSeq = ((clockSeq + 1) & 0x3fff) | 0x8000 + } + lasttime = now + return Time(now), clockSeq, nil +} + +// ClockSequence returns the current clock sequence, generating one if not +// already set. The clock sequence is only used for Version 1 UUIDs. +// +// The uuid package does not use global static storage for the clock sequence or +// the last time a UUID was generated. Unless SetClockSequence is used, a new +// random clock sequence is generated the first time a clock sequence is +// requested by ClockSequence, GetTime, or NewUUID. (section 4.2.1.1) +func ClockSequence() int { + defer timeMu.Unlock() + timeMu.Lock() + return clockSequence() +} + +func clockSequence() int { + if clockSeq == 0 { + setClockSequence(-1) + } + return int(clockSeq & 0x3fff) +} + +// SetClockSequence sets the clock sequence to the lower 14 bits of seq. Setting to +// -1 causes a new sequence to be generated. +func SetClockSequence(seq int) { + defer timeMu.Unlock() + timeMu.Lock() + setClockSequence(seq) +} + +func setClockSequence(seq int) { + if seq == -1 { + var b [2]byte + randomBits(b[:]) // clock sequence + seq = int(b[0])<<8 | int(b[1]) + } + oldSeq := clockSeq + clockSeq = uint16(seq&0x3fff) | 0x8000 // Set our variant + if oldSeq != clockSeq { + lasttime = 0 + } +} + +// Time returns the time in 100s of nanoseconds since 15 Oct 1582 encoded in +// uuid. The time is only defined for version 1 and 2 UUIDs. +func (uuid UUID) Time() Time { + time := int64(binary.BigEndian.Uint32(uuid[0:4])) + time |= int64(binary.BigEndian.Uint16(uuid[4:6])) << 32 + time |= int64(binary.BigEndian.Uint16(uuid[6:8])&0xfff) << 48 + return Time(time) +} + +// ClockSequence returns the clock sequence encoded in uuid. +// The clock sequence is only well defined for version 1 and 2 UUIDs. +func (uuid UUID) ClockSequence() int { + return int(binary.BigEndian.Uint16(uuid[8:10])) & 0x3fff +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/.travis.yml lxd-3.0.3/dist/src/github.com/google/uuid/.travis.yml --- lxd-3.0.2/dist/src/github.com/google/uuid/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/.travis.yml 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,9 @@ +language: go + +go: + - 1.4.3 + - 1.5.3 + - tip + +script: + - go test -v ./... diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/util.go lxd-3.0.3/dist/src/github.com/google/uuid/util.go --- lxd-3.0.2/dist/src/github.com/google/uuid/util.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/util.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,43 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "io" +) + +// randomBits completely fills slice b with random data. +func randomBits(b []byte) { + if _, err := io.ReadFull(rander, b); err != nil { + panic(err.Error()) // rand should never fail + } +} + +// xvalues returns the value of a byte as a hexadecimal digit or 255. +var xvalues = [256]byte{ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255, + 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +} + +// xtob converts hex characters x1 and x2 into a byte. +func xtob(x1, x2 byte) (byte, bool) { + b1 := xvalues[x1] + b2 := xvalues[x2] + return (b1 << 4) | b2, b1 != 255 && b2 != 255 +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/uuid.go lxd-3.0.3/dist/src/github.com/google/uuid/uuid.go --- lxd-3.0.2/dist/src/github.com/google/uuid/uuid.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/uuid.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,245 @@ +// Copyright 2018 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "bytes" + "crypto/rand" + "encoding/hex" + "errors" + "fmt" + "io" + "strings" +) + +// A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC +// 4122. +type UUID [16]byte + +// A Version represents a UUID's version. +type Version byte + +// A Variant represents a UUID's variant. +type Variant byte + +// Constants returned by Variant. +const ( + Invalid = Variant(iota) // Invalid UUID + RFC4122 // The variant specified in RFC4122 + Reserved // Reserved, NCS backward compatibility. + Microsoft // Reserved, Microsoft Corporation backward compatibility. + Future // Reserved for future definition. +) + +var rander = rand.Reader // random function + +// Parse decodes s into a UUID or returns an error. Both the standard UUID +// forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and +// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded as well as the +// Microsoft encoding {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} and the raw hex +// encoding: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. +func Parse(s string) (UUID, error) { + var uuid UUID + switch len(s) { + // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36: + + // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36 + 9: + if strings.ToLower(s[:9]) != "urn:uuid:" { + return uuid, fmt.Errorf("invalid urn prefix: %q", s[:9]) + } + s = s[9:] + + // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} + case 36 + 2: + s = s[1:] + + // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + case 32: + var ok bool + for i := range uuid { + uuid[i], ok = xtob(s[i*2], s[i*2+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + } + return uuid, nil + default: + return uuid, fmt.Errorf("invalid UUID length: %d", len(s)) + } + // s is now at least 36 bytes long + // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' { + return uuid, errors.New("invalid UUID format") + } + for i, x := range [16]int{ + 0, 2, 4, 6, + 9, 11, + 14, 16, + 19, 21, + 24, 26, 28, 30, 32, 34} { + v, ok := xtob(s[x], s[x+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + uuid[i] = v + } + return uuid, nil +} + +// ParseBytes is like Parse, except it parses a byte slice instead of a string. +func ParseBytes(b []byte) (UUID, error) { + var uuid UUID + switch len(b) { + case 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if !bytes.Equal(bytes.ToLower(b[:9]), []byte("urn:uuid:")) { + return uuid, fmt.Errorf("invalid urn prefix: %q", b[:9]) + } + b = b[9:] + case 36 + 2: // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} + b = b[1:] + case 32: // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + var ok bool + for i := 0; i < 32; i += 2 { + uuid[i/2], ok = xtob(b[i], b[i+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + } + return uuid, nil + default: + return uuid, fmt.Errorf("invalid UUID length: %d", len(b)) + } + // s is now at least 36 bytes long + // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if b[8] != '-' || b[13] != '-' || b[18] != '-' || b[23] != '-' { + return uuid, errors.New("invalid UUID format") + } + for i, x := range [16]int{ + 0, 2, 4, 6, + 9, 11, + 14, 16, + 19, 21, + 24, 26, 28, 30, 32, 34} { + v, ok := xtob(b[x], b[x+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + uuid[i] = v + } + return uuid, nil +} + +// MustParse is like Parse but panics if the string cannot be parsed. +// It simplifies safe initialization of global variables holding compiled UUIDs. +func MustParse(s string) UUID { + uuid, err := Parse(s) + if err != nil { + panic(`uuid: Parse(` + s + `): ` + err.Error()) + } + return uuid +} + +// FromBytes creates a new UUID from a byte slice. Returns an error if the slice +// does not have a length of 16. The bytes are copied from the slice. +func FromBytes(b []byte) (uuid UUID, err error) { + err = uuid.UnmarshalBinary(b) + return uuid, err +} + +// Must returns uuid if err is nil and panics otherwise. +func Must(uuid UUID, err error) UUID { + if err != nil { + panic(err) + } + return uuid +} + +// String returns the string form of uuid, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +// , or "" if uuid is invalid. +func (uuid UUID) String() string { + var buf [36]byte + encodeHex(buf[:], uuid) + return string(buf[:]) +} + +// URN returns the RFC 2141 URN form of uuid, +// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, or "" if uuid is invalid. +func (uuid UUID) URN() string { + var buf [36 + 9]byte + copy(buf[:], "urn:uuid:") + encodeHex(buf[9:], uuid) + return string(buf[:]) +} + +func encodeHex(dst []byte, uuid UUID) { + hex.Encode(dst, uuid[:4]) + dst[8] = '-' + hex.Encode(dst[9:13], uuid[4:6]) + dst[13] = '-' + hex.Encode(dst[14:18], uuid[6:8]) + dst[18] = '-' + hex.Encode(dst[19:23], uuid[8:10]) + dst[23] = '-' + hex.Encode(dst[24:], uuid[10:]) +} + +// Variant returns the variant encoded in uuid. +func (uuid UUID) Variant() Variant { + switch { + case (uuid[8] & 0xc0) == 0x80: + return RFC4122 + case (uuid[8] & 0xe0) == 0xc0: + return Microsoft + case (uuid[8] & 0xe0) == 0xe0: + return Future + default: + return Reserved + } +} + +// Version returns the version of uuid. +func (uuid UUID) Version() Version { + return Version(uuid[6] >> 4) +} + +func (v Version) String() string { + if v > 15 { + return fmt.Sprintf("BAD_VERSION_%d", v) + } + return fmt.Sprintf("VERSION_%d", v) +} + +func (v Variant) String() string { + switch v { + case RFC4122: + return "RFC4122" + case Reserved: + return "Reserved" + case Microsoft: + return "Microsoft" + case Future: + return "Future" + case Invalid: + return "Invalid" + } + return fmt.Sprintf("BadVariant%d", int(v)) +} + +// SetRand sets the random number generator to r, which implements io.Reader. +// If r.Read returns an error when the package requests random data then +// a panic will be issued. +// +// Calling SetRand with nil sets the random number generator to the default +// generator. +func SetRand(r io.Reader) { + if r == nil { + rander = rand.Reader + return + } + rander = r +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/uuid_test.go lxd-3.0.3/dist/src/github.com/google/uuid/uuid_test.go --- lxd-3.0.2/dist/src/github.com/google/uuid/uuid_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/uuid_test.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,559 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "bytes" + "fmt" + "os" + "runtime" + "strings" + "testing" + "time" + "unsafe" +) + +type test struct { + in string + version Version + variant Variant + isuuid bool +} + +var tests = []test{ + {"f47ac10b-58cc-0372-8567-0e02b2c3d479", 0, RFC4122, true}, + {"f47ac10b-58cc-1372-8567-0e02b2c3d479", 1, RFC4122, true}, + {"f47ac10b-58cc-2372-8567-0e02b2c3d479", 2, RFC4122, true}, + {"f47ac10b-58cc-3372-8567-0e02b2c3d479", 3, RFC4122, true}, + {"f47ac10b-58cc-4372-8567-0e02b2c3d479", 4, RFC4122, true}, + {"f47ac10b-58cc-5372-8567-0e02b2c3d479", 5, RFC4122, true}, + {"f47ac10b-58cc-6372-8567-0e02b2c3d479", 6, RFC4122, true}, + {"f47ac10b-58cc-7372-8567-0e02b2c3d479", 7, RFC4122, true}, + {"f47ac10b-58cc-8372-8567-0e02b2c3d479", 8, RFC4122, true}, + {"f47ac10b-58cc-9372-8567-0e02b2c3d479", 9, RFC4122, true}, + {"f47ac10b-58cc-a372-8567-0e02b2c3d479", 10, RFC4122, true}, + {"f47ac10b-58cc-b372-8567-0e02b2c3d479", 11, RFC4122, true}, + {"f47ac10b-58cc-c372-8567-0e02b2c3d479", 12, RFC4122, true}, + {"f47ac10b-58cc-d372-8567-0e02b2c3d479", 13, RFC4122, true}, + {"f47ac10b-58cc-e372-8567-0e02b2c3d479", 14, RFC4122, true}, + {"f47ac10b-58cc-f372-8567-0e02b2c3d479", 15, RFC4122, true}, + + {"urn:uuid:f47ac10b-58cc-4372-0567-0e02b2c3d479", 4, Reserved, true}, + {"URN:UUID:f47ac10b-58cc-4372-0567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-0567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-1567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-2567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-3567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-4567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-5567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-6567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-7567-0e02b2c3d479", 4, Reserved, true}, + {"f47ac10b-58cc-4372-8567-0e02b2c3d479", 4, RFC4122, true}, + {"f47ac10b-58cc-4372-9567-0e02b2c3d479", 4, RFC4122, true}, + {"f47ac10b-58cc-4372-a567-0e02b2c3d479", 4, RFC4122, true}, + {"f47ac10b-58cc-4372-b567-0e02b2c3d479", 4, RFC4122, true}, + {"f47ac10b-58cc-4372-c567-0e02b2c3d479", 4, Microsoft, true}, + {"f47ac10b-58cc-4372-d567-0e02b2c3d479", 4, Microsoft, true}, + {"f47ac10b-58cc-4372-e567-0e02b2c3d479", 4, Future, true}, + {"f47ac10b-58cc-4372-f567-0e02b2c3d479", 4, Future, true}, + + + {"f47ac10b158cc-5372-a567-0e02b2c3d479", 0, Invalid, false}, + {"f47ac10b-58cc25372-a567-0e02b2c3d479", 0, Invalid, false}, + {"f47ac10b-58cc-53723a567-0e02b2c3d479", 0, Invalid, false}, + {"f47ac10b-58cc-5372-a56740e02b2c3d479", 0, Invalid, false}, + {"f47ac10b-58cc-5372-a567-0e02-2c3d479", 0, Invalid, false}, + {"g47ac10b-58cc-4372-a567-0e02b2c3d479", 0, Invalid, false}, + + + {"{f47ac10b-58cc-0372-8567-0e02b2c3d479}", 0, RFC4122, true}, + {"{f47ac10b-58cc-0372-8567-0e02b2c3d479", 0, Invalid, false}, + {"f47ac10b-58cc-0372-8567-0e02b2c3d479}", 0, Invalid, false}, + + {"f47ac10b58cc037285670e02b2c3d479", 0, RFC4122, true}, + {"f47ac10b58cc037285670e02b2c3d4790", 0, Invalid, false}, + {"f47ac10b58cc037285670e02b2c3d47", 0, Invalid, false}, +} + +var constants = []struct { + c interface{} + name string +}{ + {Person, "Person"}, + {Group, "Group"}, + {Org, "Org"}, + {Invalid, "Invalid"}, + {RFC4122, "RFC4122"}, + {Reserved, "Reserved"}, + {Microsoft, "Microsoft"}, + {Future, "Future"}, + {Domain(17), "Domain17"}, + {Variant(42), "BadVariant42"}, +} + +func testTest(t *testing.T, in string, tt test) { + uuid, err := Parse(in) + if ok := (err == nil); ok != tt.isuuid { + t.Errorf("Parse(%s) got %v expected %v\b", in, ok, tt.isuuid) + } + if err != nil { + return + } + + if v := uuid.Variant(); v != tt.variant { + t.Errorf("Variant(%s) got %d expected %d\b", in, v, tt.variant) + } + if v := uuid.Version(); v != tt.version { + t.Errorf("Version(%s) got %d expected %d\b", in, v, tt.version) + } +} + +func testBytes(t *testing.T, in []byte, tt test) { + uuid, err := ParseBytes(in) + if ok := (err == nil); ok != tt.isuuid { + t.Errorf("ParseBytes(%s) got %v expected %v\b", in, ok, tt.isuuid) + } + if err != nil { + return + } + suuid, _ := Parse(string(in)) + if uuid != suuid { + t.Errorf("ParseBytes(%s) got %v expected %v\b", in, uuid, suuid) + } +} + +func TestUUID(t *testing.T) { + for _, tt := range tests { + testTest(t, tt.in, tt) + testTest(t, strings.ToUpper(tt.in), tt) + testBytes(t, []byte(tt.in), tt) + } +} + +func TestFromBytes(t *testing.T) { + b := []byte{ + 0x7d, 0x44, 0x48, 0x40, + 0x9d, 0xc0, + 0x11, 0xd1, + 0xb2, 0x45, + 0x5f, 0xfd, 0xce, 0x74, 0xfa, 0xd2, + } + uuid, err := FromBytes(b) + if err != nil { + t.Fatalf("%s", err) + } + for i := 0; i < len(uuid); i++ { + if b[i] != uuid[i] { + t.Fatalf("FromBytes() got %v expected %v\b", uuid[:], b) + } + } +} + +func TestConstants(t *testing.T) { + for x, tt := range constants { + v, ok := tt.c.(fmt.Stringer) + if !ok { + t.Errorf("%x: %v: not a stringer", x, v) + } else if s := v.String(); s != tt.name { + v, _ := tt.c.(int) + t.Errorf("%x: Constant %T:%d gives %q, expected %q", x, tt.c, v, s, tt.name) + } + } +} + +func TestRandomUUID(t *testing.T) { + m := make(map[string]bool) + for x := 1; x < 32; x++ { + uuid := New() + s := uuid.String() + if m[s] { + t.Errorf("NewRandom returned duplicated UUID %s", s) + } + m[s] = true + if v := uuid.Version(); v != 4 { + t.Errorf("Random UUID of version %s", v) + } + if uuid.Variant() != RFC4122 { + t.Errorf("Random UUID is variant %d", uuid.Variant()) + } + } +} + +func TestNew(t *testing.T) { + m := make(map[UUID]bool) + for x := 1; x < 32; x++ { + s := New() + if m[s] { + t.Errorf("New returned duplicated UUID %s", s) + } + m[s] = true + uuid, err := Parse(s.String()) + if err != nil { + t.Errorf("New.String() returned %q which does not decode", s) + continue + } + if v := uuid.Version(); v != 4 { + t.Errorf("Random UUID of version %s", v) + } + if uuid.Variant() != RFC4122 { + t.Errorf("Random UUID is variant %d", uuid.Variant()) + } + } +} + +func TestClockSeq(t *testing.T) { + // Fake time.Now for this test to return a monotonically advancing time; restore it at end. + defer func(orig func() time.Time) { timeNow = orig }(timeNow) + monTime := time.Now() + timeNow = func() time.Time { + monTime = monTime.Add(1 * time.Second) + return monTime + } + + SetClockSequence(-1) + uuid1, err := NewUUID() + if err != nil { + t.Fatalf("could not create UUID: %v", err) + } + uuid2, err := NewUUID() + if err != nil { + t.Fatalf("could not create UUID: %v", err) + } + + if s1, s2 := uuid1.ClockSequence(), uuid2.ClockSequence(); s1 != s2 { + t.Errorf("clock sequence %d != %d", s1, s2) + } + + SetClockSequence(-1) + uuid2, err = NewUUID() + if err != nil { + t.Fatalf("could not create UUID: %v", err) + } + + // Just on the very off chance we generated the same sequence + // two times we try again. + if uuid1.ClockSequence() == uuid2.ClockSequence() { + SetClockSequence(-1) + uuid2, err = NewUUID() + if err != nil { + t.Fatalf("could not create UUID: %v", err) + } + } + if s1, s2 := uuid1.ClockSequence(), uuid2.ClockSequence(); s1 == s2 { + t.Errorf("Duplicate clock sequence %d", s1) + } + + SetClockSequence(0x1234) + uuid1, err = NewUUID() + if err != nil { + t.Fatalf("could not create UUID: %v", err) + } + if seq := uuid1.ClockSequence(); seq != 0x1234 { + t.Errorf("%s: expected seq 0x1234 got 0x%04x", uuid1, seq) + } +} + +func TestCoding(t *testing.T) { + text := "7d444840-9dc0-11d1-b245-5ffdce74fad2" + urn := "urn:uuid:7d444840-9dc0-11d1-b245-5ffdce74fad2" + data := UUID{ + 0x7d, 0x44, 0x48, 0x40, + 0x9d, 0xc0, + 0x11, 0xd1, + 0xb2, 0x45, + 0x5f, 0xfd, 0xce, 0x74, 0xfa, 0xd2, + } + if v := data.String(); v != text { + t.Errorf("%x: encoded to %s, expected %s", data, v, text) + } + if v := data.URN(); v != urn { + t.Errorf("%x: urn is %s, expected %s", data, v, urn) + } + + uuid, err := Parse(text) + if err != nil { + t.Errorf("Parse returned unexpected error %v", err) + } + if data != uuid { + t.Errorf("%s: decoded to %s, expected %s", text, uuid, data) + } +} + +func TestVersion1(t *testing.T) { + uuid1, err := NewUUID() + if err != nil { + t.Fatalf("could not create UUID: %v", err) + } + uuid2, err := NewUUID() + if err != nil { + t.Fatalf("could not create UUID: %v", err) + } + + if uuid1 == uuid2 { + t.Errorf("%s:duplicate uuid", uuid1) + } + if v := uuid1.Version(); v != 1 { + t.Errorf("%s: version %s expected 1", uuid1, v) + } + if v := uuid2.Version(); v != 1 { + t.Errorf("%s: version %s expected 1", uuid2, v) + } + n1 := uuid1.NodeID() + n2 := uuid2.NodeID() + if !bytes.Equal(n1, n2) { + t.Errorf("Different nodes %x != %x", n1, n2) + } + t1 := uuid1.Time() + t2 := uuid2.Time() + q1 := uuid1.ClockSequence() + q2 := uuid2.ClockSequence() + + switch { + case t1 == t2 && q1 == q2: + t.Error("time stopped") + case t1 > t2 && q1 == q2: + t.Error("time reversed") + case t1 < t2 && q1 != q2: + t.Error("clock sequence changed unexpectedly") + } +} + +func TestNode(t *testing.T) { + // This test is mostly to make sure we don't leave nodeMu locked. + ifname = "" + if ni := NodeInterface(); ni != "" { + t.Errorf("NodeInterface got %q, want %q", ni, "") + } + if SetNodeInterface("xyzzy") { + t.Error("SetNodeInterface succeeded on a bad interface name") + } + if !SetNodeInterface("") { + t.Error("SetNodeInterface failed") + } + if runtime.GOARCH != "js" { + if ni := NodeInterface(); ni == "" { + t.Error("NodeInterface returned an empty string") + } + } + + ni := NodeID() + if len(ni) != 6 { + t.Errorf("ni got %d bytes, want 6", len(ni)) + } + hasData := false + for _, b := range ni { + if b != 0 { + hasData = true + } + } + if !hasData { + t.Error("nodeid is all zeros") + } + + id := []byte{1, 2, 3, 4, 5, 6, 7, 8} + SetNodeID(id) + ni = NodeID() + if !bytes.Equal(ni, id[:6]) { + t.Errorf("got nodeid %v, want %v", ni, id[:6]) + } + + if ni := NodeInterface(); ni != "user" { + t.Errorf("got interface %q, want %q", ni, "user") + } +} + +func TestNodeAndTime(t *testing.T) { + // Time is February 5, 1998 12:30:23.136364800 AM GMT + + uuid, err := Parse("7d444840-9dc0-11d1-b245-5ffdce74fad2") + if err != nil { + t.Fatalf("Parser returned unexpected error %v", err) + } + node := []byte{0x5f, 0xfd, 0xce, 0x74, 0xfa, 0xd2} + + ts := uuid.Time() + c := time.Unix(ts.UnixTime()) + want := time.Date(1998, 2, 5, 0, 30, 23, 136364800, time.UTC) + if !c.Equal(want) { + t.Errorf("Got time %v, want %v", c, want) + } + if !bytes.Equal(node, uuid.NodeID()) { + t.Errorf("Expected node %v got %v", node, uuid.NodeID()) + } +} + +func TestMD5(t *testing.T) { + uuid := NewMD5(NameSpaceDNS, []byte("python.org")).String() + want := "6fa459ea-ee8a-3ca4-894e-db77e160355e" + if uuid != want { + t.Errorf("MD5: got %q expected %q", uuid, want) + } +} + +func TestSHA1(t *testing.T) { + uuid := NewSHA1(NameSpaceDNS, []byte("python.org")).String() + want := "886313e1-3b8a-5372-9b90-0c9aee199e5d" + if uuid != want { + t.Errorf("SHA1: got %q expected %q", uuid, want) + } +} + +func TestNodeID(t *testing.T) { + nid := []byte{1, 2, 3, 4, 5, 6} + SetNodeInterface("") + s := NodeInterface() + if runtime.GOARCH != "js" { + if s == "" || s == "user" { + t.Errorf("NodeInterface %q after SetInterface", s) + } + } + node1 := NodeID() + if node1 == nil { + t.Error("NodeID nil after SetNodeInterface", s) + } + SetNodeID(nid) + s = NodeInterface() + if s != "user" { + t.Errorf("Expected NodeInterface %q got %q", "user", s) + } + node2 := NodeID() + if node2 == nil { + t.Error("NodeID nil after SetNodeID", s) + } + if bytes.Equal(node1, node2) { + t.Error("NodeID not changed after SetNodeID", s) + } else if !bytes.Equal(nid, node2) { + t.Errorf("NodeID is %x, expected %x", node2, nid) + } +} + +func testDCE(t *testing.T, name string, uuid UUID, err error, domain Domain, id uint32) { + if err != nil { + t.Errorf("%s failed: %v", name, err) + return + } + if v := uuid.Version(); v != 2 { + t.Errorf("%s: %s: expected version 2, got %s", name, uuid, v) + return + } + if v := uuid.Domain(); v != domain { + t.Errorf("%s: %s: expected domain %d, got %d", name, uuid, domain, v) + } + if v := uuid.ID(); v != id { + t.Errorf("%s: %s: expected id %d, got %d", name, uuid, id, v) + } +} + +func TestDCE(t *testing.T) { + uuid, err := NewDCESecurity(42, 12345678) + testDCE(t, "NewDCESecurity", uuid, err, 42, 12345678) + uuid, err = NewDCEPerson() + testDCE(t, "NewDCEPerson", uuid, err, Person, uint32(os.Getuid())) + uuid, err = NewDCEGroup() + testDCE(t, "NewDCEGroup", uuid, err, Group, uint32(os.Getgid())) +} + +type badRand struct{} + +func (r badRand) Read(buf []byte) (int, error) { + for i := range buf { + buf[i] = byte(i) + } + return len(buf), nil +} + +func TestBadRand(t *testing.T) { + SetRand(badRand{}) + uuid1 := New() + uuid2 := New() + if uuid1 != uuid2 { + t.Errorf("expected duplicates, got %q and %q", uuid1, uuid2) + } + SetRand(nil) + uuid1 = New() + uuid2 = New() + if uuid1 == uuid2 { + t.Errorf("unexpected duplicates, got %q", uuid1) + } +} + +var asString = "f47ac10b-58cc-0372-8567-0e02b2c3d479" +var asBytes = []byte(asString) + +func BenchmarkParse(b *testing.B) { + for i := 0; i < b.N; i++ { + _, err := Parse(asString) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkParseBytes(b *testing.B) { + for i := 0; i < b.N; i++ { + _, err := ParseBytes(asBytes) + if err != nil { + b.Fatal(err) + } + } +} + +// parseBytesUnsafe is to benchmark using unsafe. +func parseBytesUnsafe(b []byte) (UUID, error) { + return Parse(*(*string)(unsafe.Pointer(&b))) +} + +func BenchmarkParseBytesUnsafe(b *testing.B) { + for i := 0; i < b.N; i++ { + _, err := parseBytesUnsafe(asBytes) + if err != nil { + b.Fatal(err) + } + } +} + +// parseBytesCopy is to benchmark not using unsafe. +func parseBytesCopy(b []byte) (UUID, error) { + return Parse(string(b)) +} + +func BenchmarkParseBytesCopy(b *testing.B) { + for i := 0; i < b.N; i++ { + _, err := parseBytesCopy(asBytes) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkNew(b *testing.B) { + for i := 0; i < b.N; i++ { + New() + } +} + +func BenchmarkUUID_String(b *testing.B) { + uuid, err := Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479") + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + if uuid.String() == "" { + b.Fatal("invalid uuid") + } + } +} + +func BenchmarkUUID_URN(b *testing.B) { + uuid, err := Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479") + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + if uuid.URN() == "" { + b.Fatal("invalid uuid") + } + } +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/version1.go lxd-3.0.3/dist/src/github.com/google/uuid/version1.go --- lxd-3.0.2/dist/src/github.com/google/uuid/version1.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/version1.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,44 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" +) + +// NewUUID returns a Version 1 UUID based on the current NodeID and clock +// sequence, and the current time. If the NodeID has not been set by SetNodeID +// or SetNodeInterface then it will be set automatically. If the NodeID cannot +// be set NewUUID returns nil. If clock sequence has not been set by +// SetClockSequence then it will be set automatically. If GetTime fails to +// return the current NewUUID returns nil and an error. +// +// In most cases, New should be used. +func NewUUID() (UUID, error) { + nodeMu.Lock() + if nodeID == zeroID { + setNodeInterface("") + } + nodeMu.Unlock() + + var uuid UUID + now, seq, err := GetTime() + if err != nil { + return uuid, err + } + + timeLow := uint32(now & 0xffffffff) + timeMid := uint16((now >> 32) & 0xffff) + timeHi := uint16((now >> 48) & 0x0fff) + timeHi |= 0x1000 // Version 1 + + binary.BigEndian.PutUint32(uuid[0:], timeLow) + binary.BigEndian.PutUint16(uuid[4:], timeMid) + binary.BigEndian.PutUint16(uuid[6:], timeHi) + binary.BigEndian.PutUint16(uuid[8:], seq) + copy(uuid[10:], nodeID[:]) + + return uuid, nil +} diff -Nru lxd-3.0.2/dist/src/github.com/google/uuid/version4.go lxd-3.0.3/dist/src/github.com/google/uuid/version4.go --- lxd-3.0.2/dist/src/github.com/google/uuid/version4.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/google/uuid/version4.go 2018-11-22 20:54:10.000000000 +0000 @@ -0,0 +1,38 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import "io" + +// New creates a new random UUID or panics. New is equivalent to +// the expression +// +// uuid.Must(uuid.NewRandom()) +func New() UUID { + return Must(NewRandom()) +} + +// NewRandom returns a Random (Version 4) UUID. +// +// The strength of the UUIDs is based on the strength of the crypto/rand +// package. +// +// A note about uniqueness derived from the UUID Wikipedia entry: +// +// Randomly generated UUIDs have 122 random bits. One's annual risk of being +// hit by a meteorite is estimated to be one chance in 17 billion, that +// means the probability is about 0.00000000006 (6 × 10−11), +// equivalent to the odds of creating a few tens of trillions of UUIDs in a +// year and having one duplicate. +func NewRandom() (UUID, error) { + var uuid UUID + _, err := io.ReadFull(rander, uuid[:]) + if err != nil { + return Nil, err + } + uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 + uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 + return uuid, nil +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/context.go lxd-3.0.3/dist/src/github.com/gorilla/mux/context.go --- lxd-3.0.2/dist/src/github.com/gorilla/mux/context.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/context.go 2018-11-22 20:53:55.000000000 +0000 @@ -0,0 +1,22 @@ +package mux + +import ( + "context" + "net/http" +) + +func contextGet(r *http.Request, key interface{}) interface{} { + return r.Context().Value(key) +} + +func contextSet(r *http.Request, key, val interface{}) *http.Request { + if val == nil { + return r + } + + return r.WithContext(context.WithValue(r.Context(), key, val)) +} + +func contextClear(r *http.Request) { + return +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/context_gorilla.go lxd-3.0.3/dist/src/github.com/gorilla/mux/context_gorilla.go --- lxd-3.0.2/dist/src/github.com/gorilla/mux/context_gorilla.go 2018-08-20 23:48:25.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/context_gorilla.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -// +build !go1.7 - -package mux - -import ( - "net/http" - - "github.com/gorilla/context" -) - -func contextGet(r *http.Request, key interface{}) interface{} { - return context.Get(r, key) -} - -func contextSet(r *http.Request, key, val interface{}) *http.Request { - if val == nil { - return r - } - - context.Set(r, key, val) - return r -} - -func contextClear(r *http.Request) { - context.Clear(r) -} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/context_gorilla_test.go lxd-3.0.3/dist/src/github.com/gorilla/mux/context_gorilla_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/mux/context_gorilla_test.go 2018-08-20 23:48:25.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/context_gorilla_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -// +build !go1.7 - -package mux - -import ( - "net/http" - "testing" - - "github.com/gorilla/context" -) - -// Tests that the context is cleared or not cleared properly depending on -// the configuration of the router -func TestKeepContext(t *testing.T) { - func1 := func(w http.ResponseWriter, r *http.Request) {} - - r := NewRouter() - r.HandleFunc("/", func1).Name("func1") - - req, _ := http.NewRequest("GET", "http://localhost/", nil) - context.Set(req, "t", 1) - - res := new(http.ResponseWriter) - r.ServeHTTP(*res, req) - - if _, ok := context.GetOk(req, "t"); ok { - t.Error("Context should have been cleared at end of request") - } - - r.KeepContext = true - - req, _ = http.NewRequest("GET", "http://localhost/", nil) - context.Set(req, "t", 1) - - r.ServeHTTP(*res, req) - if _, ok := context.GetOk(req, "t"); !ok { - t.Error("Context should NOT have been cleared at end of request") - } - -} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/context_native.go lxd-3.0.3/dist/src/github.com/gorilla/mux/context_native.go --- lxd-3.0.2/dist/src/github.com/gorilla/mux/context_native.go 2018-08-20 23:48:25.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/context_native.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -// +build go1.7 - -package mux - -import ( - "context" - "net/http" -) - -func contextGet(r *http.Request, key interface{}) interface{} { - return r.Context().Value(key) -} - -func contextSet(r *http.Request, key, val interface{}) *http.Request { - if val == nil { - return r - } - - return r.WithContext(context.WithValue(r.Context(), key, val)) -} - -func contextClear(r *http.Request) { - return -} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/context_native_test.go lxd-3.0.3/dist/src/github.com/gorilla/mux/context_native_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/mux/context_native_test.go 2018-08-20 23:48:25.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/context_native_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -// +build go1.7 - -package mux - -import ( - "context" - "net/http" - "testing" - "time" -) - -func TestNativeContextMiddleware(t *testing.T) { - withTimeout := func(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ctx, cancel := context.WithTimeout(r.Context(), time.Minute) - defer cancel() - h.ServeHTTP(w, r.WithContext(ctx)) - }) - } - - r := NewRouter() - r.Handle("/path/{foo}", withTimeout(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - vars := Vars(r) - if vars["foo"] != "bar" { - t.Fatal("Expected foo var to be set") - } - }))) - - rec := NewRecorder() - req := newRequest("GET", "/path/bar") - r.ServeHTTP(rec, req) -} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/context_test.go lxd-3.0.3/dist/src/github.com/gorilla/mux/context_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/mux/context_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/context_test.go 2018-11-22 20:53:55.000000000 +0000 @@ -0,0 +1,30 @@ +package mux + +import ( + "context" + "net/http" + "testing" + "time" +) + +func TestNativeContextMiddleware(t *testing.T) { + withTimeout := func(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx, cancel := context.WithTimeout(r.Context(), time.Minute) + defer cancel() + h.ServeHTTP(w, r.WithContext(ctx)) + }) + } + + r := NewRouter() + r.Handle("/path/{foo}", withTimeout(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + vars := Vars(r) + if vars["foo"] != "bar" { + t.Fatal("Expected foo var to be set") + } + }))) + + rec := NewRecorder() + req := newRequest("GET", "/path/bar") + r.ServeHTTP(rec, req) +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/.github/release-drafter.yml lxd-3.0.3/dist/src/github.com/gorilla/mux/.github/release-drafter.yml --- lxd-3.0.2/dist/src/github.com/gorilla/mux/.github/release-drafter.yml 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/.github/release-drafter.yml 2018-11-22 20:53:55.000000000 +0000 @@ -0,0 +1,8 @@ +# Config for https://github.com/apps/release-drafter +template: | + + + + ## CHANGELOG + + $CHANGES diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/mux_test.go lxd-3.0.3/dist/src/github.com/gorilla/mux/mux_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/mux/mux_test.go 2018-08-20 23:48:25.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/mux_test.go 2018-11-22 20:53:55.000000000 +0000 @@ -205,8 +205,10 @@ }, } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + }) } } @@ -437,10 +439,12 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) - testUseEscapedRoute(t, test) - testRegexp(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) + testRegexp(t, test) + }) } } @@ -516,9 +520,11 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) - testUseEscapedRoute(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) + }) } } @@ -623,9 +629,11 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) - testUseEscapedRoute(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) + }) } } @@ -682,8 +690,10 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + }) } } @@ -732,9 +742,11 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) - testMethods(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + testMethods(t, test) + }) } } @@ -1039,11 +1051,12 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) - testQueriesTemplates(t, test) - testUseEscapedRoute(t, test) - testQueriesRegexp(t, test) + t.Run(test.title, func(t *testing.T) { + testTemplate(t, test) + testQueriesTemplates(t, test) + testUseEscapedRoute(t, test) + testQueriesRegexp(t, test) + }) } } @@ -1092,8 +1105,10 @@ }, } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + }) } } @@ -1127,8 +1142,10 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + }) } } @@ -1163,8 +1180,10 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + }) } } @@ -1294,9 +1313,11 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) - testUseEscapedRoute(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) + }) } } @@ -1400,9 +1421,11 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) - testUseEscapedRoute(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) + }) } } @@ -1434,8 +1457,10 @@ } for _, test := range tests { - testRoute(t, test) - testTemplate(t, test) + t.Run(test.title, func(t *testing.T) { + testRoute(t, test) + testTemplate(t, test) + }) } } @@ -2040,7 +2065,9 @@ } for _, test := range tests { - testMethodsSubrouter(t, test) + t.Run(test.title, func(t *testing.T) { + testMethodsSubrouter(t, test) + }) } } @@ -2096,7 +2123,9 @@ } for _, test := range tests { - testMethodsSubrouter(t, test) + t.Run(test.title, func(t *testing.T) { + testMethodsSubrouter(t, test) + }) } } @@ -2143,7 +2172,9 @@ } for _, test := range tests { - testMethodsSubrouter(t, test) + t.Run(test.title, func(t *testing.T) { + testMethodsSubrouter(t, test) + }) } } @@ -2199,7 +2230,9 @@ } for _, test := range tests { - testMethodsSubrouter(t, test) + t.Run(test.title, func(t *testing.T) { + testMethodsSubrouter(t, test) + }) } } @@ -2253,7 +2286,9 @@ } for _, test := range tests { - testMethodsSubrouter(t, test) + t.Run(test.title, func(t *testing.T) { + testMethodsSubrouter(t, test) + }) } } diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/README.md lxd-3.0.3/dist/src/github.com/gorilla/mux/README.md --- lxd-3.0.2/dist/src/github.com/gorilla/mux/README.md 2018-08-20 23:48:25.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/README.md 2018-11-22 20:53:55.000000000 +0000 @@ -6,7 +6,7 @@ ![Gorilla Logo](http://www.gorillatoolkit.org/static/images/gorilla-icon-64.png) -http://www.gorillatoolkit.org/pkg/mux +https://www.gorillatoolkit.org/pkg/mux Package `gorilla/mux` implements a request router and dispatcher for matching incoming requests to their respective handler. diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/regexp.go lxd-3.0.3/dist/src/github.com/gorilla/mux/regexp.go --- lxd-3.0.2/dist/src/github.com/gorilla/mux/regexp.go 2018-08-20 23:48:25.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/regexp.go 2018-11-22 20:53:55.000000000 +0000 @@ -296,7 +296,7 @@ } else { u.Path += "/" } - m.Handler = http.RedirectHandler(u.String(), 301) + m.Handler = http.RedirectHandler(u.String(), http.StatusMovedPermanently) } } } diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/mux/.travis.yml lxd-3.0.3/dist/src/github.com/gorilla/mux/.travis.yml --- lxd-3.0.2/dist/src/github.com/gorilla/mux/.travis.yml 2018-08-20 23:48:25.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/mux/.travis.yml 2018-11-22 20:53:55.000000000 +0000 @@ -3,12 +3,13 @@ matrix: include: - - go: 1.5.x - - go: 1.6.x - go: 1.7.x - go: 1.8.x - go: 1.9.x - go: 1.10.x + - go: 1.11.x + - go: 1.x + env: LATEST=true - go: tip allow_failures: - go: tip @@ -19,5 +20,5 @@ script: - go get -t -v ./... - diff -u <(echo -n) <(gofmt -d .) - - go tool vet . + - if [[ "$LATEST" = true ]]; then go tool vet .; fi - go test -v -race ./... diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/client.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/client.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/client.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/client.go 2018-11-22 20:53:09.000000000 +0000 @@ -6,12 +6,14 @@ import ( "bytes" + "context" "crypto/tls" "errors" "io" "io/ioutil" "net" "net/http" + "net/http/httptrace" "net/url" "strings" "time" @@ -51,6 +53,10 @@ // NetDial is nil, net.Dial is used. NetDial func(network, addr string) (net.Conn, error) + // NetDialContext specifies the dial function for creating TCP connections. If + // NetDialContext is nil, net.DialContext is used. + NetDialContext func(ctx context.Context, network, addr string) (net.Conn, error) + // Proxy specifies a function to return a proxy for a given // Request. If the function returns a non-nil error, the // request is aborted with the provided error. @@ -64,11 +70,22 @@ // HandshakeTimeout specifies the duration for the handshake to complete. HandshakeTimeout time.Duration - // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer // size is zero, then a useful default size is used. The I/O buffer sizes // do not limit the size of the messages that can be sent or received. ReadBufferSize, WriteBufferSize int + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + // Subprotocols specifies the client's requested subprotocols. Subprotocols []string @@ -84,6 +101,11 @@ Jar http.CookieJar } +// Dial creates a new client connection by calling DialContext with a background context. +func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + return d.DialContext(context.Background(), urlStr, requestHeader) +} + var errMalformedURL = errors.New("malformed ws or wss URL") func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { @@ -111,19 +133,20 @@ } // nilDialer is dialer to use when receiver is nil. -var nilDialer Dialer = *DefaultDialer +var nilDialer = *DefaultDialer -// Dial creates a new client connection. Use requestHeader to specify the +// DialContext creates a new client connection. Use requestHeader to specify the // origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). // Use the response.Header to get the selected subprotocol // (Sec-WebSocket-Protocol) and cookies (Set-Cookie). // +// The context will be used in the request and in the Dialer. +// // If the WebSocket handshake fails, ErrBadHandshake is returned along with a // non-nil *http.Response so that callers can handle redirects, authentication, // etcetera. The response body may not contain the entire response and does not // need to be closed by the application. -func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { - +func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { if d == nil { d = &nilDialer } @@ -161,6 +184,7 @@ Header: make(http.Header), Host: u.Host, } + req = req.WithContext(ctx) // Set the cookies present in the cookie jar of the dialer if d.Jar != nil { @@ -204,20 +228,30 @@ req.Header["Sec-WebSocket-Extensions"] = []string{"permessage-deflate; server_no_context_takeover; client_no_context_takeover"} } - var deadline time.Time if d.HandshakeTimeout != 0 { - deadline = time.Now().Add(d.HandshakeTimeout) + var cancel func() + ctx, cancel = context.WithTimeout(ctx, d.HandshakeTimeout) + defer cancel() } // Get network dial function. - netDial := d.NetDial - if netDial == nil { - netDialer := &net.Dialer{Deadline: deadline} - netDial = netDialer.Dial + var netDial func(network, add string) (net.Conn, error) + + if d.NetDialContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialContext(ctx, network, addr) + } + } else if d.NetDial != nil { + netDial = d.NetDial + } else { + netDialer := &net.Dialer{} + netDial = func(network, addr string) (net.Conn, error) { + return netDialer.DialContext(ctx, network, addr) + } } // If needed, wrap the dial function to set the connection deadline. - if !deadline.Equal(time.Time{}) { + if deadline, ok := ctx.Deadline(); ok { forwardDial := netDial netDial = func(network, addr string) (net.Conn, error) { c, err := forwardDial(network, addr) @@ -249,7 +283,17 @@ } hostPort, hostNoPort := hostPortNoPort(u) + trace := httptrace.ContextClientTrace(ctx) + if trace != nil && trace.GetConn != nil { + trace.GetConn(hostPort) + } + netConn, err := netDial("tcp", hostPort) + if trace != nil && trace.GotConn != nil { + trace.GotConn(httptrace.GotConnInfo{ + Conn: netConn, + }) + } if err != nil { return nil, nil, err } @@ -267,22 +311,31 @@ } tlsConn := tls.Client(netConn, cfg) netConn = tlsConn - if err := tlsConn.Handshake(); err != nil { - return nil, nil, err + + var err error + if trace != nil { + err = doHandshakeWithTrace(trace, tlsConn, cfg) + } else { + err = doHandshake(tlsConn, cfg) } - if !cfg.InsecureSkipVerify { - if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { - return nil, nil, err - } + + if err != nil { + return nil, nil, err } } - conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize) + conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize, d.WriteBufferPool, nil, nil) if err := req.Write(netConn); err != nil { return nil, nil, err } + if trace != nil && trace.GotFirstResponseByte != nil { + if peek, err := conn.br.Peek(1); err == nil && len(peek) == 1 { + trace.GotFirstResponseByte() + } + } + resp, err := http.ReadResponse(conn.br, req) if err != nil { return nil, nil, err @@ -328,3 +381,15 @@ netConn = nil // to avoid close in defer. return conn, resp, nil } + +func doHandshake(tlsConn *tls.Conn, cfg *tls.Config) error { + if err := tlsConn.Handshake(); err != nil { + return err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return err + } + } + return nil +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/client_server_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/client_server_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/client_server_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/client_server_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -6,16 +6,20 @@ import ( "bytes" + "context" "crypto/tls" "crypto/x509" "encoding/base64" "encoding/binary" + "fmt" "io" "io/ioutil" + "log" "net" "net/http" "net/http/cookiejar" "net/http/httptest" + "net/http/httptrace" "net/url" "reflect" "strings" @@ -45,6 +49,7 @@ type cstServer struct { *httptest.Server URL string + t *testing.T } const ( @@ -280,10 +285,7 @@ sendRecv(t, ws) } -func TestDialTLS(t *testing.T) { - s := newTLSServer(t) - defer s.Close() - +func rootCAs(t *testing.T, s *httptest.Server) *x509.CertPool { certs := x509.NewCertPool() for _, c := range s.TLS.Certificates { roots, err := x509.ParseCertificates(c.Certificate[len(c.Certificate)-1]) @@ -294,35 +296,15 @@ certs.AddCert(root) } } - - d := cstDialer - d.TLSClientConfig = &tls.Config{RootCAs: certs} - ws, _, err := d.Dial(s.URL, nil) - if err != nil { - t.Fatalf("Dial: %v", err) - } - defer ws.Close() - sendRecv(t, ws) + return certs } -func xTestDialTLSBadCert(t *testing.T) { - // This test is deactivated because of noisy logging from the net/http package. - s := newTLSServer(t) - defer s.Close() - - ws, _, err := cstDialer.Dial(s.URL, nil) - if err == nil { - ws.Close() - t.Fatalf("Dial: nil") - } -} - -func TestDialTLSNoVerify(t *testing.T) { +func TestDialTLS(t *testing.T) { s := newTLSServer(t) defer s.Close() d := cstDialer - d.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} + d.TLSClientConfig = &tls.Config{RootCAs: rootCAs(t, s.Server)} ws, _, err := d.Dial(s.URL, nil) if err != nil { t.Fatalf("Dial: %v", err) @@ -403,6 +385,27 @@ ws.Close() } +func TestHandshakeTimeoutInContext(t *testing.T) { + s := newServer(t) + defer s.Close() + + d := cstDialer + d.HandshakeTimeout = 0 + d.NetDialContext = func(ctx context.Context, n, a string) (net.Conn, error) { + netDialer := &net.Dialer{} + c, err := netDialer.DialContext(ctx, n, a) + return &requireDeadlineNetConn{c: c, t: t}, err + } + + ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(30*time.Second)) + defer cancel() + ws, _, err := d.DialContext(ctx, s.URL, nil) + if err != nil { + t.Fatal("Dial:", err) + } + ws.Close() +} + func TestDialBadScheme(t *testing.T) { s := newServer(t) defer s.Close() @@ -538,33 +541,195 @@ } } -// TestHostHeader confirms that the host header provided in the call to Dial is -// sent to the server. -func TestHostHeader(t *testing.T) { - s := newServer(t) - defer s.Close() +type testLogWriter struct { + t *testing.T +} - specifiedHost := make(chan string, 1) - origHandler := s.Server.Config.Handler +func (w testLogWriter) Write(p []byte) (int, error) { + w.t.Logf("%s", p) + return len(p), nil +} - // Capture the request Host header. - s.Server.Config.Handler = http.HandlerFunc( - func(w http.ResponseWriter, r *http.Request) { - specifiedHost <- r.Host - origHandler.ServeHTTP(w, r) - }) +// TestHost tests handling of host names and confirms that it matches net/http. +func TestHost(t *testing.T) { - ws, _, err := cstDialer.Dial(s.URL, http.Header{"Host": {"testhost"}}) - if err != nil { - t.Fatalf("Dial: %v", err) - } - defer ws.Close() + upgrader := Upgrader{} + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if IsWebSocketUpgrade(r) { + c, err := upgrader.Upgrade(w, r, http.Header{"X-Test-Host": {r.Host}}) + if err != nil { + t.Fatal(err) + } + c.Close() + } else { + w.Header().Set("X-Test-Host", r.Host) + } + }) + + server := httptest.NewServer(handler) + defer server.Close() + + tlsServer := httptest.NewTLSServer(handler) + defer tlsServer.Close() + + addrs := map[*httptest.Server]string{server: server.Listener.Addr().String(), tlsServer: tlsServer.Listener.Addr().String()} + wsProtos := map[*httptest.Server]string{server: "ws://", tlsServer: "wss://"} + httpProtos := map[*httptest.Server]string{server: "http://", tlsServer: "https://"} + + // Avoid log noise from net/http server by logging to testing.T + server.Config.ErrorLog = log.New(testLogWriter{t}, "", 0) + tlsServer.Config.ErrorLog = server.Config.ErrorLog + + cas := rootCAs(t, tlsServer) + + tests := []struct { + fail bool // true if dial / get should fail + server *httptest.Server // server to use + url string // host for request URI + header string // optional request host header + tls string // optiona host for tls ServerName + wantAddr string // expected host for dial + wantHeader string // expected request header on server + insecureSkipVerify bool + }{ + { + server: server, + url: addrs[server], + wantAddr: addrs[server], + wantHeader: addrs[server], + }, + { + server: tlsServer, + url: addrs[tlsServer], + wantAddr: addrs[tlsServer], + wantHeader: addrs[tlsServer], + }, + + { + server: server, + url: addrs[server], + header: "badhost.com", + wantAddr: addrs[server], + wantHeader: "badhost.com", + }, + { + server: tlsServer, + url: addrs[tlsServer], + header: "badhost.com", + wantAddr: addrs[tlsServer], + wantHeader: "badhost.com", + }, + + { + server: server, + url: "example.com", + header: "badhost.com", + wantAddr: "example.com:80", + wantHeader: "badhost.com", + }, + { + server: tlsServer, + url: "example.com", + header: "badhost.com", + wantAddr: "example.com:443", + wantHeader: "badhost.com", + }, + + { + server: server, + url: "badhost.com", + header: "example.com", + wantAddr: "badhost.com:80", + wantHeader: "example.com", + }, + { + fail: true, + server: tlsServer, + url: "badhost.com", + header: "example.com", + wantAddr: "badhost.com:443", + }, + { + server: tlsServer, + url: "badhost.com", + insecureSkipVerify: true, + wantAddr: "badhost.com:443", + wantHeader: "badhost.com", + }, + { + server: tlsServer, + url: "badhost.com", + tls: "example.com", + wantAddr: "badhost.com:443", + wantHeader: "badhost.com", + }, + } + + for i, tt := range tests { + + tls := &tls.Config{ + RootCAs: cas, + ServerName: tt.tls, + InsecureSkipVerify: tt.insecureSkipVerify, + } + + var gotAddr string + dialer := Dialer{ + NetDial: func(network, addr string) (net.Conn, error) { + gotAddr = addr + return net.Dial(network, addrs[tt.server]) + }, + TLSClientConfig: tls, + } - if gotHost := <-specifiedHost; gotHost != "testhost" { - t.Fatalf("gotHost = %q, want \"testhost\"", gotHost) - } + // Test websocket dial - sendRecv(t, ws) + h := http.Header{} + if tt.header != "" { + h.Set("Host", tt.header) + } + c, resp, err := dialer.Dial(wsProtos[tt.server]+tt.url+"/", h) + if err == nil { + c.Close() + } + + check := func(protos map[*httptest.Server]string) { + name := fmt.Sprintf("%d: %s%s/ header[Host]=%q, tls.ServerName=%q", i+1, protos[tt.server], tt.url, tt.header, tt.tls) + if gotAddr != tt.wantAddr { + t.Errorf("%s: got addr %s, want %s", name, gotAddr, tt.wantAddr) + } + switch { + case tt.fail && err == nil: + t.Errorf("%s: unexpected success", name) + case !tt.fail && err != nil: + t.Errorf("%s: unexpected error %v", name, err) + case !tt.fail && err == nil: + if gotHost := resp.Header.Get("X-Test-Host"); gotHost != tt.wantHeader { + t.Errorf("%s: got host %s, want %s", name, gotHost, tt.wantHeader) + } + } + } + + check(wsProtos) + + // Confirm that net/http has same result + + transport := &http.Transport{ + Dial: dialer.NetDial, + TLSClientConfig: dialer.TLSClientConfig, + } + req, _ := http.NewRequest("GET", httpProtos[tt.server]+tt.url+"/", nil) + if tt.header != "" { + req.Host = tt.header + } + client := &http.Client{Transport: transport} + resp, err = client.Do(req) + if err == nil { + resp.Body.Close() + } + transport.CloseIdleConnections() + check(httpProtos) + } } func TestDialCompression(t *testing.T) { @@ -659,3 +824,82 @@ defer ws.Close() sendRecv(t, ws) } + +func TestTracingDialWithContext(t *testing.T) { + + var headersWrote, requestWrote, getConn, gotConn, connectDone, gotFirstResponseByte bool + trace := &httptrace.ClientTrace{ + WroteHeaders: func() { + headersWrote = true + }, + WroteRequest: func(httptrace.WroteRequestInfo) { + requestWrote = true + }, + GetConn: func(hostPort string) { + getConn = true + }, + GotConn: func(info httptrace.GotConnInfo) { + gotConn = true + }, + ConnectDone: func(network, addr string, err error) { + connectDone = true + }, + GotFirstResponseByte: func() { + gotFirstResponseByte = true + }, + } + ctx := httptrace.WithClientTrace(context.Background(), trace) + + s := newTLSServer(t) + defer s.Close() + + d := cstDialer + d.TLSClientConfig = &tls.Config{RootCAs: rootCAs(t, s.Server)} + + ws, _, err := d.DialContext(ctx, s.URL, nil) + if err != nil { + t.Fatalf("Dial: %v", err) + } + + if !headersWrote { + t.Fatal("Headers was not written") + } + if !requestWrote { + t.Fatal("Request was not written") + } + if !getConn { + t.Fatal("getConn was not called") + } + if !gotConn { + t.Fatal("gotConn was not called") + } + if !connectDone { + t.Fatal("connectDone was not called") + } + if !gotFirstResponseByte { + t.Fatal("GotFirstResponseByte was not called") + } + + defer ws.Close() + sendRecv(t, ws) +} + +func TestEmptyTracingDialWithContext(t *testing.T) { + + trace := &httptrace.ClientTrace{} + ctx := httptrace.WithClientTrace(context.Background(), trace) + + s := newTLSServer(t) + defer s.Close() + + d := cstDialer + d.TLSClientConfig = &tls.Config{RootCAs: rootCAs(t, s.Server)} + + ws, _, err := d.DialContext(ctx, s.URL, nil) + if err != nil { + t.Fatalf("Dial: %v", err) + } + + defer ws.Close() + sendRecv(t, ws) +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/compression_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/compression_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/compression_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/compression_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -43,7 +43,7 @@ func BenchmarkWriteNoCompression(b *testing.B) { w := ioutil.Discard - c := newConn(fakeNetConn{Reader: nil, Writer: w}, false, 1024, 1024) + c := newTestConn(nil, w, false) messages := textMessages(100) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -54,7 +54,7 @@ func BenchmarkWriteWithCompression(b *testing.B) { w := ioutil.Discard - c := newConn(fakeNetConn{Reader: nil, Writer: w}, false, 1024, 1024) + c := newTestConn(nil, w, false) messages := textMessages(100) c.enableWriteCompression = true c.newCompressionWriter = compressNoContextTakeover @@ -66,7 +66,7 @@ } func TestValidCompressionLevel(t *testing.T) { - c := newConn(fakeNetConn{}, false, 1024, 1024) + c := newTestConn(nil, nil, false) for _, level := range []int{minCompressionLevel - 1, maxCompressionLevel + 1} { if err := c.SetCompressionLevel(level); err == nil { t.Errorf("no error for level %d", level) diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn_broadcast_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn_broadcast_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn_broadcast_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn_broadcast_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build go1.7 - package websocket import ( @@ -70,7 +68,7 @@ conns := make([]*broadcastConn, numConns) for i := 0; i < numConns; i++ { - c := newConn(fakeNetConn{Reader: nil, Writer: b.w}, true, 1024, 1024) + c := newTestConn(nil, b.w, true) if b.compression { c.enableWriteCompression = true c.newCompressionWriter = compressNoContextTakeover diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn.go 2018-11-22 20:53:09.000000000 +0000 @@ -223,6 +223,20 @@ return validReceivedCloseCodes[code] || (code >= 3000 && code <= 4999) } +// BufferPool represents a pool of buffers. The *sync.Pool type satisfies this +// interface. The type of the value stored in a pool is not specified. +type BufferPool interface { + // Get gets a value from the pool or returns nil if the pool is empty. + Get() interface{} + // Put adds a value to the pool. + Put(interface{}) +} + +// writePoolData is the type added to the write buffer pool. This wrapper is +// used to prevent applications from peeking at and depending on the values +// added to the pool. +type writePoolData struct{ buf []byte } + // The Conn type represents a WebSocket connection. type Conn struct { conn net.Conn @@ -232,6 +246,8 @@ // Write fields mu chan bool // used as mutex to protect write to conn writeBuf []byte // frame is constructed in this buffer. + writePool BufferPool + writeBufSize int writeDeadline time.Time writer io.WriteCloser // the current writer returned to the application isWriting bool // for best-effort concurrent write detection @@ -263,64 +279,29 @@ newDecompressionReader func(io.Reader) io.ReadCloser } -func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int) *Conn { - return newConnBRW(conn, isServer, readBufferSize, writeBufferSize, nil) -} - -type writeHook struct { - p []byte -} - -func (wh *writeHook) Write(p []byte) (int, error) { - wh.p = p - return len(p), nil -} - -func newConnBRW(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int, brw *bufio.ReadWriter) *Conn { - mu := make(chan bool, 1) - mu <- true +func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int, writeBufferPool BufferPool, br *bufio.Reader, writeBuf []byte) *Conn { - var br *bufio.Reader - if readBufferSize == 0 && brw != nil && brw.Reader != nil { - // Reuse the supplied bufio.Reader if the buffer has a useful size. - // This code assumes that peek on a reader returns - // bufio.Reader.buf[:0]. - brw.Reader.Reset(conn) - if p, err := brw.Reader.Peek(0); err == nil && cap(p) >= 256 { - br = brw.Reader - } - } if br == nil { if readBufferSize == 0 { readBufferSize = defaultReadBufferSize - } - if readBufferSize < maxControlFramePayloadSize { + } else if readBufferSize < maxControlFramePayloadSize { + // must be large enough for control frame readBufferSize = maxControlFramePayloadSize } br = bufio.NewReaderSize(conn, readBufferSize) } - var writeBuf []byte - if writeBufferSize == 0 && brw != nil && brw.Writer != nil { - // Use the bufio.Writer's buffer if the buffer has a useful size. This - // code assumes that bufio.Writer.buf[:1] is passed to the - // bufio.Writer's underlying writer. - var wh writeHook - brw.Writer.Reset(&wh) - brw.Writer.WriteByte(0) - brw.Flush() - if cap(wh.p) >= maxFrameHeaderSize+256 { - writeBuf = wh.p[:cap(wh.p)] - } + if writeBufferSize <= 0 { + writeBufferSize = defaultWriteBufferSize } + writeBufferSize += maxFrameHeaderSize - if writeBuf == nil { - if writeBufferSize == 0 { - writeBufferSize = defaultWriteBufferSize - } - writeBuf = make([]byte, writeBufferSize+maxFrameHeaderSize) + if writeBuf == nil && writeBufferPool == nil { + writeBuf = make([]byte, writeBufferSize) } + mu := make(chan bool, 1) + mu <- true c := &Conn{ isServer: isServer, br: br, @@ -328,6 +309,8 @@ mu: mu, readFinal: true, writeBuf: writeBuf, + writePool: writeBufferPool, + writeBufSize: writeBufferSize, enableWriteCompression: true, compressionLevel: defaultCompressionLevel, } @@ -370,6 +353,15 @@ return err } +func (c *Conn) read(n int) ([]byte, error) { + p, err := c.br.Peek(n) + if err == io.EOF { + err = errUnexpectedEOF + } + c.br.Discard(len(p)) + return p, err +} + func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error { <-c.mu defer func() { c.mu <- true }() @@ -459,7 +451,8 @@ return err } -func (c *Conn) prepWrite(messageType int) error { +// beginMessage prepares a connection and message writer for a new message. +func (c *Conn) beginMessage(mw *messageWriter, messageType int) error { // Close previous writer if not already closed by the application. It's // probably better to return an error in this situation, but we cannot // change this without breaking existing applications. @@ -475,7 +468,23 @@ c.writeErrMu.Lock() err := c.writeErr c.writeErrMu.Unlock() - return err + if err != nil { + return err + } + + mw.c = c + mw.frameType = messageType + mw.pos = maxFrameHeaderSize + + if c.writeBuf == nil { + wpd, ok := c.writePool.Get().(writePoolData) + if ok { + c.writeBuf = wpd.buf + } else { + c.writeBuf = make([]byte, c.writeBufSize) + } + } + return nil } // NextWriter returns a writer for the next message to send. The writer's Close @@ -487,16 +496,11 @@ // All message types (TextMessage, BinaryMessage, CloseMessage, PingMessage and // PongMessage) are supported. func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { - if err := c.prepWrite(messageType); err != nil { + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { return nil, err } - - mw := &messageWriter{ - c: c, - frameType: messageType, - pos: maxFrameHeaderSize, - } - c.writer = mw + c.writer = &mw if c.newCompressionWriter != nil && c.enableWriteCompression && isData(messageType) { w := c.newCompressionWriter(c.writer, c.compressionLevel) mw.compress = true @@ -513,10 +517,16 @@ err error } -func (w *messageWriter) fatal(err error) error { +func (w *messageWriter) endMessage(err error) error { if w.err != nil { - w.err = err - w.c.writer = nil + return err + } + c := w.c + w.err = err + c.writer = nil + if c.writePool != nil { + c.writePool.Put(writePoolData{buf: c.writeBuf}) + c.writeBuf = nil } return err } @@ -530,7 +540,7 @@ // Check for invalid control frames. if isControl(w.frameType) && (!final || length > maxControlFramePayloadSize) { - return w.fatal(errInvalidControlFrame) + return w.endMessage(errInvalidControlFrame) } b0 := byte(w.frameType) @@ -575,7 +585,7 @@ copy(c.writeBuf[maxFrameHeaderSize-4:], key[:]) maskBytes(key, 0, c.writeBuf[maxFrameHeaderSize:w.pos]) if len(extra) > 0 { - return c.writeFatal(errors.New("websocket: internal error, extra used in client mode")) + return w.endMessage(c.writeFatal(errors.New("websocket: internal error, extra used in client mode"))) } } @@ -596,11 +606,11 @@ c.isWriting = false if err != nil { - return w.fatal(err) + return w.endMessage(err) } if final { - c.writer = nil + w.endMessage(errWriteClosed) return nil } @@ -701,7 +711,6 @@ if err := w.flushFrame(true, nil); err != nil { return err } - w.err = errWriteClosed return nil } @@ -734,10 +743,10 @@ if c.isServer && (c.newCompressionWriter == nil || !c.enableWriteCompression) { // Fast path with no allocations and single frame. - if err := c.prepWrite(messageType); err != nil { + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { return err } - mw := messageWriter{c: c, frameType: messageType, pos: maxFrameHeaderSize} n := copy(c.writeBuf[mw.pos:], data) mw.pos += n data = data[n:] @@ -1033,7 +1042,7 @@ return c.conn.SetReadDeadline(t) } -// SetReadLimit sets the maximum size for a message read from the peer. If a +// SetReadLimit sets the maximum size in bytes for a message read from the peer. If a // message exceeds the limit, the connection sends a close message to the peer // and returns ErrReadLimit to the application. func (c *Conn) SetReadLimit(limit int64) { diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn_read.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn_read.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn_read.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn_read.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.5 - -package websocket - -import "io" - -func (c *Conn) read(n int) ([]byte, error) { - p, err := c.br.Peek(n) - if err == io.EOF { - err = errUnexpectedEOF - } - c.br.Discard(len(p)) - return p, err -} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn_read_legacy.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn_read_legacy.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn_read_legacy.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn_read_legacy.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !go1.5 - -package websocket - -import "io" - -func (c *Conn) read(n int) ([]byte, error) { - p, err := c.br.Peek(n) - if err == io.EOF { - err = errUnexpectedEOF - } - if len(p) > 0 { - // advance over the bytes just read - io.ReadFull(c.br, p) - } - return p, err -} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/conn_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/conn_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -13,6 +13,7 @@ "io/ioutil" "net" "reflect" + "sync" "testing" "testing/iotest" "time" @@ -47,6 +48,12 @@ return "str" } +// newTestConn creates a connnection backed by a fake network connection using +// default values for buffering. +func newTestConn(r io.Reader, w io.Writer, isServer bool) *Conn { + return newConn(fakeNetConn{Reader: r, Writer: w}, isServer, 1024, 1024, nil, nil, nil) +} + func TestFraming(t *testing.T) { frameSizes := []int{0, 1, 2, 124, 125, 126, 127, 128, 129, 65534, 65535, 65536, 65537} var readChunkers = []struct { @@ -82,8 +89,8 @@ for _, chunker := range readChunkers { var connBuf bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &connBuf}, isServer, 1024, 1024) - rc := newConn(fakeNetConn{Reader: chunker.f(&connBuf), Writer: nil}, !isServer, 1024, 1024) + wc := newTestConn(nil, &connBuf, isServer) + rc := newTestConn(chunker.f(&connBuf), nil, !isServer) if compress { wc.newCompressionWriter = compressNoContextTakeover rc.newDecompressionReader = decompressNoContextTakeover @@ -143,8 +150,8 @@ for _, isWriteControl := range []bool{true, false} { name := fmt.Sprintf("s:%v, wc:%v", isServer, isWriteControl) var connBuf bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &connBuf}, isServer, 1024, 1024) - rc := newConn(fakeNetConn{Reader: &connBuf, Writer: nil}, !isServer, 1024, 1024) + wc := newTestConn(nil, &connBuf, isServer) + rc := newTestConn(&connBuf, nil, !isServer) if isWriteControl { wc.WriteControl(PongMessage, []byte(message), time.Now().Add(time.Second)) } else { @@ -173,14 +180,178 @@ } } +// simpleBufferPool is an implementation of BufferPool for TestWriteBufferPool. +type simpleBufferPool struct { + v interface{} +} + +func (p *simpleBufferPool) Get() interface{} { + v := p.v + p.v = nil + return v +} + +func (p *simpleBufferPool) Put(v interface{}) { + p.v = v +} + +func TestWriteBufferPool(t *testing.T) { + const message = "Now is the time for all good people to come to the aid of the party." + + var buf bytes.Buffer + var pool simpleBufferPool + rc := newTestConn(&buf, nil, false) + + // Specify writeBufferSize smaller than message size to ensure that pooling + // works with fragmented messages. + wc := newConn(fakeNetConn{Writer: &buf}, true, 1024, len(message)-1, &pool, nil, nil) + + if wc.writeBuf != nil { + t.Fatal("writeBuf not nil after create") + } + + // Part 1: test NextWriter/Write/Close + + w, err := wc.NextWriter(TextMessage) + if err != nil { + t.Fatalf("wc.NextWriter() returned %v", err) + } + + if wc.writeBuf == nil { + t.Fatal("writeBuf is nil after NextWriter") + } + + writeBufAddr := &wc.writeBuf[0] + + if _, err := io.WriteString(w, message); err != nil { + t.Fatalf("io.WriteString(w, message) returned %v", err) + } + + if err := w.Close(); err != nil { + t.Fatalf("w.Close() returned %v", err) + } + + if wc.writeBuf != nil { + t.Fatal("writeBuf not nil after w.Close()") + } + + if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { + t.Fatal("writeBuf not returned to pool") + } + + opCode, p, err := rc.ReadMessage() + if opCode != TextMessage || err != nil { + t.Fatalf("ReadMessage() returned %d, p, %v", opCode, err) + } + + if s := string(p); s != message { + t.Fatalf("message is %s, want %s", s, message) + } + + // Part 2: Test WriteMessage. + + if err := wc.WriteMessage(TextMessage, []byte(message)); err != nil { + t.Fatalf("wc.WriteMessage() returned %v", err) + } + + if wc.writeBuf != nil { + t.Fatal("writeBuf not nil after wc.WriteMessage()") + } + + if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { + t.Fatal("writeBuf not returned to pool after WriteMessage") + } + + opCode, p, err = rc.ReadMessage() + if opCode != TextMessage || err != nil { + t.Fatalf("ReadMessage() returned %d, p, %v", opCode, err) + } + + if s := string(p); s != message { + t.Fatalf("message is %s, want %s", s, message) + } +} + +// TestWriteBufferPoolSync ensures that *sync.Pool works as a buffer pool. +func TestWriteBufferPoolSync(t *testing.T) { + var buf bytes.Buffer + var pool sync.Pool + wc := newConn(fakeNetConn{Writer: &buf}, true, 1024, 1024, &pool, nil, nil) + rc := newTestConn(&buf, nil, false) + + const message = "Hello World!" + for i := 0; i < 3; i++ { + if err := wc.WriteMessage(TextMessage, []byte(message)); err != nil { + t.Fatalf("wc.WriteMessage() returned %v", err) + } + opCode, p, err := rc.ReadMessage() + if opCode != TextMessage || err != nil { + t.Fatalf("ReadMessage() returned %d, p, %v", opCode, err) + } + if s := string(p); s != message { + t.Fatalf("message is %s, want %s", s, message) + } + } +} + +// errorWriter is an io.Writer than returns an error on all writes. +type errorWriter struct{} + +func (ew errorWriter) Write(p []byte) (int, error) { return 0, errors.New("Error!") } + +// TestWriteBufferPoolError ensures that buffer is returned to pool after error +// on write. +func TestWriteBufferPoolError(t *testing.T) { + + // Part 1: Test NextWriter/Write/Close + + var pool simpleBufferPool + wc := newConn(fakeNetConn{Writer: errorWriter{}}, true, 1024, 1024, &pool, nil, nil) + + w, err := wc.NextWriter(TextMessage) + if err != nil { + t.Fatalf("wc.NextWriter() returned %v", err) + } + + if wc.writeBuf == nil { + t.Fatal("writeBuf is nil after NextWriter") + } + + writeBufAddr := &wc.writeBuf[0] + + if _, err := io.WriteString(w, "Hello"); err != nil { + t.Fatalf("io.WriteString(w, message) returned %v", err) + } + + if err := w.Close(); err == nil { + t.Fatalf("w.Close() did not return error") + } + + if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { + t.Fatal("writeBuf not returned to pool") + } + + // Part 2: Test WriteMessage + + wc = newConn(fakeNetConn{Writer: errorWriter{}}, true, 1024, 1024, &pool, nil, nil) + + if err := wc.WriteMessage(TextMessage, []byte("Hello")); err == nil { + t.Fatalf("wc.WriteMessage did not return error") + } + + if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { + t.Fatal("writeBuf not returned to pool") + } +} + func TestCloseFrameBeforeFinalMessageFrame(t *testing.T) { const bufSize = 512 expectedErr := &CloseError{Code: CloseNormalClosure, Text: "hello"} var b1, b2 bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, 1024, bufSize) - rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, 1024, 1024) + wc := newConn(&fakeNetConn{Reader: nil, Writer: &b1}, false, 1024, bufSize, nil, nil, nil) + rc := newTestConn(&b1, &b2, true) w, _ := wc.NextWriter(BinaryMessage) w.Write(make([]byte, bufSize+bufSize/2)) @@ -206,8 +377,8 @@ for n := 0; ; n++ { var b bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &b}, false, 1024, 1024) - rc := newConn(fakeNetConn{Reader: &b, Writer: nil}, true, 1024, 1024) + wc := newTestConn(nil, &b, false) + rc := newTestConn(&b, nil, true) w, _ := wc.NextWriter(BinaryMessage) w.Write(make([]byte, bufSize)) @@ -240,8 +411,8 @@ const bufSize = 512 var b1, b2 bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, 1024, bufSize) - rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, 1024, 1024) + wc := newConn(&fakeNetConn{Writer: &b1}, false, 1024, bufSize, nil, nil, nil) + rc := newTestConn(&b1, &b2, true) w, _ := wc.NextWriter(BinaryMessage) w.Write(make([]byte, bufSize+bufSize/2)) @@ -261,7 +432,7 @@ } func TestWriteAfterMessageWriterClose(t *testing.T) { - wc := newConn(fakeNetConn{Reader: nil, Writer: &bytes.Buffer{}}, false, 1024, 1024) + wc := newTestConn(nil, &bytes.Buffer{}, false) w, _ := wc.NextWriter(BinaryMessage) io.WriteString(w, "hello") if err := w.Close(); err != nil { @@ -292,8 +463,8 @@ message := make([]byte, readLimit+1) var b1, b2 bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, 1024, readLimit-2) - rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, 1024, 1024) + wc := newConn(&fakeNetConn{Writer: &b1}, false, 1024, readLimit-2, nil, nil, nil) + rc := newTestConn(&b1, &b2, true) rc.SetReadLimit(readLimit) // Send message at the limit with interleaved pong. @@ -321,7 +492,7 @@ } func TestAddrs(t *testing.T) { - c := newConn(&fakeNetConn{}, true, 1024, 1024) + c := newTestConn(nil, nil, true) if c.LocalAddr() != localAddr { t.Errorf("LocalAddr = %v, want %v", c.LocalAddr(), localAddr) } @@ -333,7 +504,7 @@ func TestUnderlyingConn(t *testing.T) { var b1, b2 bytes.Buffer fc := fakeNetConn{Reader: &b1, Writer: &b2} - c := newConn(fc, true, 1024, 1024) + c := newConn(fc, true, 1024, 1024, nil, nil, nil) ul := c.UnderlyingConn() if ul != fc { t.Fatalf("Underlying conn is not what it should be.") @@ -347,8 +518,8 @@ m[len(m)-1] = '\n' var b1, b2 bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, len(m)+64, len(m)+64) - rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, len(m)-64, len(m)-64) + wc := newConn(fakeNetConn{Writer: &b1}, false, len(m)+64, len(m)+64, nil, nil, nil) + rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, len(m)-64, len(m)-64, nil, nil, nil) w, _ := wc.NextWriter(BinaryMessage) w.Write(m) @@ -423,7 +594,7 @@ func TestConcurrentWritePanic(t *testing.T) { w := blockingWriter{make(chan struct{}), make(chan struct{})} - c := newConn(fakeNetConn{Reader: nil, Writer: w}, false, 1024, 1024) + c := newTestConn(nil, w, false) go func() { c.WriteMessage(TextMessage, []byte{}) }() @@ -449,7 +620,7 @@ } func TestFailedConnectionReadPanic(t *testing.T) { - c := newConn(fakeNetConn{Reader: failingReader{}, Writer: nil}, false, 1024, 1024) + c := newTestConn(failingReader{}, nil, false) defer func() { if v := recover(); v != nil { @@ -462,35 +633,3 @@ } t.Fatal("should not get here") } - -func TestBufioReuse(t *testing.T) { - brw := bufio.NewReadWriter(bufio.NewReader(nil), bufio.NewWriter(nil)) - c := newConnBRW(nil, false, 0, 0, brw) - - if c.br != brw.Reader { - t.Error("connection did not reuse bufio.Reader") - } - - var wh writeHook - brw.Writer.Reset(&wh) - brw.WriteByte(0) - brw.Flush() - if &c.writeBuf[0] != &wh.p[0] { - t.Error("connection did not reuse bufio.Writer") - } - - brw = bufio.NewReadWriter(bufio.NewReaderSize(nil, 0), bufio.NewWriterSize(nil, 0)) - c = newConnBRW(nil, false, 0, 0, brw) - - if c.br == brw.Reader { - t.Error("connection used bufio.Reader with small size") - } - - brw.Writer.Reset(&wh) - brw.WriteByte(0) - brw.Flush() - if &c.writeBuf[0] != &wh.p[0] { - t.Error("connection used bufio.Writer with small size") - } - -} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/json_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/json_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/json_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/json_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -14,9 +14,8 @@ func TestJSON(t *testing.T) { var buf bytes.Buffer - c := fakeNetConn{&buf, &buf} - wc := newConn(c, true, 1024, 1024) - rc := newConn(c, false, 1024, 1024) + wc := newTestConn(nil, &buf, true) + rc := newTestConn(&buf, nil, false) var actual, expect struct { A int @@ -39,10 +38,9 @@ } func TestPartialJSONRead(t *testing.T) { - var buf bytes.Buffer - c := fakeNetConn{&buf, &buf} - wc := newConn(c, true, 1024, 1024) - rc := newConn(c, false, 1024, 1024) + var buf0, buf1 bytes.Buffer + wc := newTestConn(nil, &buf0, true) + rc := newTestConn(&buf0, &buf1, false) var v struct { A int @@ -94,9 +92,8 @@ func TestDeprecatedJSON(t *testing.T) { var buf bytes.Buffer - c := fakeNetConn{&buf, &buf} - wc := newConn(c, true, 1024, 1024) - rc := newConn(c, false, 1024, 1024) + wc := newTestConn(nil, &buf, true) + rc := newTestConn(&buf, nil, false) var actual, expect struct { A int diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/mask_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/mask_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/mask_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/mask_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -2,8 +2,7 @@ // this source code is governed by a BSD-style license that can be found in the // LICENSE file. -// Require 1.7 for sub-bencmarks -// +build go1.7,!appengine +// !appengine package websocket diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/prepared.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/prepared.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/prepared.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/prepared.go 2018-11-22 20:53:09.000000000 +0000 @@ -19,7 +19,6 @@ type PreparedMessage struct { messageType int data []byte - err error mu sync.Mutex frames map[prepareKey]*preparedFrame } diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/prepared_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/prepared_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/prepared_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/prepared_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -36,7 +36,7 @@ for _, tt := range preparedMessageTests { var data = []byte("this is a test") var buf bytes.Buffer - c := newConn(fakeNetConn{Reader: nil, Writer: &buf}, tt.isServer, 1024, 1024) + c := newTestConn(nil, &buf, tt.isServer) if tt.enableWriteCompression { c.newCompressionWriter = compressNoContextTakeover } diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/server.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/server.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/server.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/server.go 2018-11-22 20:53:09.000000000 +0000 @@ -7,7 +7,7 @@ import ( "bufio" "errors" - "net" + "io" "net/http" "net/url" "strings" @@ -27,12 +27,23 @@ // HandshakeTimeout specifies the duration for the handshake to complete. HandshakeTimeout time.Duration - // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer // size is zero, then buffers allocated by the HTTP server are used. The // I/O buffer sizes do not limit the size of the messages that can be sent // or received. ReadBufferSize, WriteBufferSize int + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + // Subprotocols specifies the server's supported protocols in order of // preference. If this field is not nil, then the Upgrade method negotiates a // subprotocol by selecting the first match in this list with a protocol @@ -159,17 +170,12 @@ } } - var ( - netConn net.Conn - err error - ) - h, ok := w.(http.Hijacker) if !ok { return u.returnError(w, r, http.StatusInternalServerError, "websocket: response does not implement http.Hijacker") } var brw *bufio.ReadWriter - netConn, brw, err = h.Hijack() + netConn, brw, err := h.Hijack() if err != nil { return u.returnError(w, r, http.StatusInternalServerError, err.Error()) } @@ -179,7 +185,21 @@ return nil, errors.New("websocket: client sent data before handshake is complete") } - c := newConnBRW(netConn, true, u.ReadBufferSize, u.WriteBufferSize, brw) + var br *bufio.Reader + if u.ReadBufferSize == 0 && bufioReaderSize(netConn, brw.Reader) > 256 { + // Reuse hijacked buffered reader as connection reader. + br = brw.Reader + } + + buf := bufioWriterBuffer(netConn, brw.Writer) + + var writeBuf []byte + if u.WriteBufferPool == nil && u.WriteBufferSize == 0 && len(buf) >= maxFrameHeaderSize+256 { + // Reuse hijacked write buffer as connection buffer. + writeBuf = buf + } + + c := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize, u.WriteBufferPool, br, writeBuf) c.subprotocol = subprotocol if compress { @@ -187,7 +207,13 @@ c.newDecompressionReader = decompressNoContextTakeover } - p := c.writeBuf[:0] + // Use larger of hijacked buffer and connection write buffer for header. + p := buf + if len(c.writeBuf) > len(p) { + p = c.writeBuf + } + p = p[:0] + p = append(p, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "...) p = append(p, computeAcceptKey(challengeKey)...) p = append(p, "\r\n"...) @@ -298,3 +324,40 @@ return tokenListContainsValue(r.Header, "Connection", "upgrade") && tokenListContainsValue(r.Header, "Upgrade", "websocket") } + +// bufioReaderSize size returns the size of a bufio.Reader. +func bufioReaderSize(originalReader io.Reader, br *bufio.Reader) int { + // This code assumes that peek on a reset reader returns + // bufio.Reader.buf[:0]. + // TODO: Use bufio.Reader.Size() after Go 1.10 + br.Reset(originalReader) + if p, err := br.Peek(0); err == nil { + return cap(p) + } + return 0 +} + +// writeHook is an io.Writer that records the last slice passed to it vio +// io.Writer.Write. +type writeHook struct { + p []byte +} + +func (wh *writeHook) Write(p []byte) (int, error) { + wh.p = p + return len(p), nil +} + +// bufioWriterBuffer grabs the buffer from a bufio.Writer. +func bufioWriterBuffer(originalWriter io.Writer, bw *bufio.Writer) []byte { + // This code assumes that bufio.Writer.buf[:1] is passed to the + // bufio.Writer's underlying writer. + var wh writeHook + bw.Reset(&wh) + bw.WriteByte(0) + bw.Flush() + + bw.Reset(originalWriter) + + return wh.p[:cap(wh.p)] +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/server_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/server_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/server_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/server_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -5,8 +5,12 @@ package websocket import ( + "bufio" + "bytes" + "net" "net/http" "reflect" + "strings" "testing" ) @@ -54,9 +58,9 @@ ok bool r *http.Request }{ - {false, &http.Request{Host: "example.org", Header: map[string][]string{"Origin": []string{"https://other.org"}}}}, - {true, &http.Request{Host: "example.org", Header: map[string][]string{"Origin": []string{"https://example.org"}}}}, - {true, &http.Request{Host: "Example.org", Header: map[string][]string{"Origin": []string{"https://example.org"}}}}, + {false, &http.Request{Host: "example.org", Header: map[string][]string{"Origin": {"https://other.org"}}}}, + {true, &http.Request{Host: "example.org", Header: map[string][]string{"Origin": {"https://example.org"}}}}, + {true, &http.Request{Host: "Example.org", Header: map[string][]string{"Origin": {"https://example.org"}}}}, } func TestCheckSameOrigin(t *testing.T) { @@ -67,3 +71,49 @@ } } } + +type reuseTestResponseWriter struct { + brw *bufio.ReadWriter + http.ResponseWriter +} + +func (resp *reuseTestResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { + return fakeNetConn{strings.NewReader(""), &bytes.Buffer{}}, resp.brw, nil +} + +var bufioReuseTests = []struct { + n int + reuse bool +}{ + {4096, true}, + {128, false}, +} + +func TestBufioReuse(t *testing.T) { + for i, tt := range bufioReuseTests { + br := bufio.NewReaderSize(strings.NewReader(""), tt.n) + bw := bufio.NewWriterSize(&bytes.Buffer{}, tt.n) + resp := &reuseTestResponseWriter{ + brw: bufio.NewReadWriter(br, bw), + } + upgrader := Upgrader{} + c, err := upgrader.Upgrade(resp, &http.Request{ + Method: "GET", + Header: http.Header{ + "Upgrade": []string{"websocket"}, + "Connection": []string{"upgrade"}, + "Sec-Websocket-Key": []string{"dGhlIHNhbXBsZSBub25jZQ=="}, + "Sec-Websocket-Version": []string{"13"}, + }}, nil) + if err != nil { + t.Fatal(err) + } + if reuse := c.br == br; reuse != tt.reuse { + t.Errorf("%d: buffered reader reuse=%v, want %v", i, reuse, tt.reuse) + } + writeBuf := bufioWriterBuffer(c.UnderlyingConn(), bw) + if reuse := &c.writeBuf[0] == &writeBuf[0]; reuse != tt.reuse { + t.Errorf("%d: write buffer reuse=%v, want %v", i, reuse, tt.reuse) + } + } +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/trace_17.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/trace_17.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/trace_17.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/trace_17.go 2018-11-22 20:53:09.000000000 +0000 @@ -0,0 +1,12 @@ +// +build !go1.8 + +package websocket + +import ( + "crypto/tls" + "net/http/httptrace" +) + +func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error { + return doHandshake(tlsConn, cfg) +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/trace.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/trace.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/trace.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/trace.go 2018-11-22 20:53:09.000000000 +0000 @@ -0,0 +1,19 @@ +// +build go1.8 + +package websocket + +import ( + "crypto/tls" + "net/http/httptrace" +) + +func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error { + if trace.TLSHandshakeStart != nil { + trace.TLSHandshakeStart() + } + err := doHandshake(tlsConn, cfg) + if trace.TLSHandshakeDone != nil { + trace.TLSHandshakeDone(tlsConn.ConnectionState(), err) + } + return err +} diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/.travis.yml lxd-3.0.3/dist/src/github.com/gorilla/websocket/.travis.yml --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/.travis.yml 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/.travis.yml 2018-11-22 20:53:09.000000000 +0000 @@ -3,13 +3,11 @@ matrix: include: - - go: 1.4 - - go: 1.5.x - - go: 1.6.x - go: 1.7.x - go: 1.8.x - go: 1.9.x - go: 1.10.x + - go: 1.11.x - go: tip allow_failures: - go: tip diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/util.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/util.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/util.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/util.go 2018-11-22 20:53:09.000000000 +0000 @@ -31,68 +31,113 @@ return base64.StdEncoding.EncodeToString(p), nil } -// Octet types from RFC 2616. -var octetTypes [256]byte - -const ( - isTokenOctet = 1 << iota - isSpaceOctet -) - -func init() { - // From RFC 2616 - // - // OCTET = - // CHAR = - // CTL = - // CR = - // LF = - // SP = - // HT = - // <"> = - // CRLF = CR LF - // LWS = [CRLF] 1*( SP | HT ) - // TEXT = - // separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> - // | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT - // token = 1* - // qdtext = > - - for c := 0; c < 256; c++ { - var t byte - isCtl := c <= 31 || c == 127 - isChar := 0 <= c && c <= 127 - isSeparator := strings.IndexRune(" \t\"(),/:;<=>?@[]\\{}", rune(c)) >= 0 - if strings.IndexRune(" \t\r\n", rune(c)) >= 0 { - t |= isSpaceOctet - } - if isChar && !isCtl && !isSeparator { - t |= isTokenOctet - } - octetTypes[c] = t - } +// Token octets per RFC 2616. +var isTokenOctet = [256]bool{ + '!': true, + '#': true, + '$': true, + '%': true, + '&': true, + '\'': true, + '*': true, + '+': true, + '-': true, + '.': true, + '0': true, + '1': true, + '2': true, + '3': true, + '4': true, + '5': true, + '6': true, + '7': true, + '8': true, + '9': true, + 'A': true, + 'B': true, + 'C': true, + 'D': true, + 'E': true, + 'F': true, + 'G': true, + 'H': true, + 'I': true, + 'J': true, + 'K': true, + 'L': true, + 'M': true, + 'N': true, + 'O': true, + 'P': true, + 'Q': true, + 'R': true, + 'S': true, + 'T': true, + 'U': true, + 'W': true, + 'V': true, + 'X': true, + 'Y': true, + 'Z': true, + '^': true, + '_': true, + '`': true, + 'a': true, + 'b': true, + 'c': true, + 'd': true, + 'e': true, + 'f': true, + 'g': true, + 'h': true, + 'i': true, + 'j': true, + 'k': true, + 'l': true, + 'm': true, + 'n': true, + 'o': true, + 'p': true, + 'q': true, + 'r': true, + 's': true, + 't': true, + 'u': true, + 'v': true, + 'w': true, + 'x': true, + 'y': true, + 'z': true, + '|': true, + '~': true, } +// skipSpace returns a slice of the string s with all leading RFC 2616 linear +// whitespace removed. func skipSpace(s string) (rest string) { i := 0 for ; i < len(s); i++ { - if octetTypes[s[i]]&isSpaceOctet == 0 { + if b := s[i]; b != ' ' && b != '\t' { break } } return s[i:] } +// nextToken returns the leading RFC 2616 token of s and the string following +// the token. func nextToken(s string) (token, rest string) { i := 0 for ; i < len(s); i++ { - if octetTypes[s[i]]&isTokenOctet == 0 { + if !isTokenOctet[s[i]] { break } } return s[:i], s[i:] } +// nextTokenOrQuoted returns the leading token or quoted string per RFC 2616 +// and the string following the token or quoted string. func nextTokenOrQuoted(s string) (value string, rest string) { if !strings.HasPrefix(s, "\"") { return nextToken(s) @@ -128,7 +173,8 @@ return "", "" } -// equalASCIIFold returns true if s is equal to t with ASCII case folding. +// equalASCIIFold returns true if s is equal to t with ASCII case folding as +// defined in RFC 4790. func equalASCIIFold(s, t string) bool { for s != "" && t != "" { sr, size := utf8.DecodeRuneInString(s) @@ -178,7 +224,7 @@ return false } -// parseExtensiosn parses WebSocket extensions from a header. +// parseExtensions parses WebSocket extensions from a header. func parseExtensions(header http.Header) []map[string]string { // From RFC 6455: // diff -Nru lxd-3.0.2/dist/src/github.com/gorilla/websocket/util_test.go lxd-3.0.3/dist/src/github.com/gorilla/websocket/util_test.go --- lxd-3.0.2/dist/src/github.com/gorilla/websocket/util_test.go 2018-08-20 23:45:24.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/gorilla/websocket/util_test.go 2018-11-22 20:53:09.000000000 +0000 @@ -17,6 +17,7 @@ {"WebSocket", "websocket", true}, {"websocket", "WebSocket", true}, {"Öyster", "öyster", false}, + {"WebSocket", "WetSocket", false}, } func TestEqualASCIIFold(t *testing.T) { diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/go-immutable-radix/go.mod lxd-3.0.3/dist/src/github.com/hashicorp/go-immutable-radix/go.mod --- lxd-3.0.2/dist/src/github.com/hashicorp/go-immutable-radix/go.mod 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/go-immutable-radix/go.mod 2018-11-22 20:53:48.000000000 +0000 @@ -0,0 +1,6 @@ +module github.com/hashicorp/go-immutable-radix + +require ( + github.com/hashicorp/go-uuid v1.0.0 + github.com/hashicorp/golang-lru v0.5.0 +) diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/go-immutable-radix/go.sum lxd-3.0.3/dist/src/github.com/hashicorp/go-immutable-radix/go.sum --- lxd-3.0.2/dist/src/github.com/hashicorp/go-immutable-radix/go.sum 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/go-immutable-radix/go.sum 2018-11-22 20:53:48.000000000 +0000 @@ -0,0 +1,4 @@ +github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/golang-lru/go.mod lxd-3.0.3/dist/src/github.com/hashicorp/golang-lru/go.mod --- lxd-3.0.2/dist/src/github.com/hashicorp/golang-lru/go.mod 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/golang-lru/go.mod 2018-11-22 20:53:48.000000000 +0000 @@ -0,0 +1 @@ +module github.com/hashicorp/golang-lru diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/golang-lru/simplelru/lru_interface.go lxd-3.0.3/dist/src/github.com/hashicorp/golang-lru/simplelru/lru_interface.go --- lxd-3.0.2/dist/src/github.com/hashicorp/golang-lru/simplelru/lru_interface.go 2018-08-20 23:47:22.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/golang-lru/simplelru/lru_interface.go 2018-11-22 20:53:48.000000000 +0000 @@ -1,37 +1,36 @@ package simplelru - // LRUCache is the interface for simple LRU cache. type LRUCache interface { - // Adds a value to the cache, returns true if an eviction occurred and - // updates the "recently used"-ness of the key. - Add(key, value interface{}) bool + // Adds a value to the cache, returns true if an eviction occurred and + // updates the "recently used"-ness of the key. + Add(key, value interface{}) bool - // Returns key's value from the cache and - // updates the "recently used"-ness of the key. #value, isFound - Get(key interface{}) (value interface{}, ok bool) + // Returns key's value from the cache and + // updates the "recently used"-ness of the key. #value, isFound + Get(key interface{}) (value interface{}, ok bool) - // Check if a key exsists in cache without updating the recent-ness. - Contains(key interface{}) (ok bool) + // Check if a key exsists in cache without updating the recent-ness. + Contains(key interface{}) (ok bool) - // Returns key's value without updating the "recently used"-ness of the key. - Peek(key interface{}) (value interface{}, ok bool) + // Returns key's value without updating the "recently used"-ness of the key. + Peek(key interface{}) (value interface{}, ok bool) - // Removes a key from the cache. - Remove(key interface{}) bool + // Removes a key from the cache. + Remove(key interface{}) bool - // Removes the oldest entry from cache. - RemoveOldest() (interface{}, interface{}, bool) + // Removes the oldest entry from cache. + RemoveOldest() (interface{}, interface{}, bool) - // Returns the oldest entry from the cache. #key, value, isFound - GetOldest() (interface{}, interface{}, bool) + // Returns the oldest entry from the cache. #key, value, isFound + GetOldest() (interface{}, interface{}, bool) - // Returns a slice of the keys in the cache, from oldest to newest. - Keys() []interface{} + // Returns a slice of the keys in the cache, from oldest to newest. + Keys() []interface{} - // Returns the number of items in the cache. - Len() int + // Returns the number of items in the cache. + Len() int - // Clear all cache entries - Purge() + // Clear all cache entries + Purge() } diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/logutils/go.mod lxd-3.0.3/dist/src/github.com/hashicorp/logutils/go.mod --- lxd-3.0.2/dist/src/github.com/hashicorp/logutils/go.mod 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/logutils/go.mod 2018-11-22 20:53:57.000000000 +0000 @@ -0,0 +1 @@ +module github.com/hashicorp/logutils diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/api.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/api.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/api.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/api.go 2018-11-22 20:53:46.000000000 +0000 @@ -164,7 +164,7 @@ // configuration on all the Voter servers. There is no need to bootstrap // Nonvoter and Staging servers. // -// One sane approach is to boostrap a single server with a configuration +// One sane approach is to bootstrap a single server with a configuration // listing just itself as a Voter, then invoke AddVoter() on it to add other // servers to the cluster. func BootstrapCluster(conf *Config, logs LogStore, stable StableStore, diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/commitment.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/commitment.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/commitment.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/commitment.go 2018-11-22 20:53:46.000000000 +0000 @@ -9,7 +9,7 @@ // replication goroutines report in newly written entries with Match(), and // this notifies on commitCh when the commit index has advanced. type commitment struct { - // protectes matchIndexes and commitIndex + // protects matchIndexes and commitIndex sync.Mutex // notified when commitIndex increases commitCh chan struct{} diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/configuration.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/configuration.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/configuration.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/configuration.go 2018-11-22 20:53:46.000000000 +0000 @@ -115,7 +115,7 @@ // prior one has been committed). // // One downside to storing just two configurations is that if you try to take a -// snahpsot when your state machine hasn't yet applied the committedIndex, we +// snapshot when your state machine hasn't yet applied the committedIndex, we // have no record of the configuration that would logically fit into that // snapshot. We disallow snapshots in that case now. An alternative approach, // which LogCabin uses, is to track every configuration change in the @@ -198,7 +198,7 @@ // TODO: barf on new address? newServer := Server{ // TODO: This should add the server as Staging, to be automatically - // promoted to Voter later. However, the promoton to Voter is not yet + // promoted to Voter later. However, the promotion to Voter is not yet // implemented, and doing so is not trivial with the way the leader loop // coordinates with the replication goroutines today. So, for now, the // server will have a vote right away, and the Promote case below is diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/apply_src.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/apply_src.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/apply_src.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/apply_src.go 2018-11-22 20:53:46.000000000 +0000 @@ -21,7 +21,7 @@ return s } -// reset this source back to its initial state, it'll generate the same sequence of data it initally did +// reset this source back to its initial state, it'll generate the same sequence of data it initially did func (a *applySource) reset() { a.rnd = rand.New(rand.NewSource(a.seed)) } diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/cluster.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/cluster.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/cluster.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/cluster.go 2018-11-22 20:53:46.000000000 +0000 @@ -169,7 +169,7 @@ } // WaitTilUptoDate blocks until all nodes in the cluster have gotten their -// commitedIndex upto the Index from the last sucecssfull call to Apply +// commitedIndex upto the Index from the last successful call to Apply func (c *cluster) WaitTilUptoDate(t *testing.T, maxWait time.Duration) { idx := c.lastApplySuccess.Index() start := time.Now() @@ -365,7 +365,7 @@ } // assertLogEntryEqual compares the 2 raft Log entries and reports any differences to the supplied testing.T instance -// it return true if the 2 entrie are equal, false otherwise. +// it return true if the 2 entries are equal, false otherwise. func assertLogEntryEqual(t *testing.T, node string, exp *raft.Log, act *raft.Log) bool { res := true if exp.Term != act.Term { diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/partition_test.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/partition_test.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/partition_test.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/partition_test.go 2018-11-22 20:53:46.000000000 +0000 @@ -43,7 +43,7 @@ type Partitioner struct { verifier appendEntriesVerifier - lock sync.RWMutex // protects partitoned / nextGroup + lock sync.RWMutex // protects partitioned / nextGroup // this is a map of node -> partition group, only nodes in the same partition group can communicate with each other partitioned map[string]int nextGroup int diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/readme.md lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/readme.md --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/readme.md 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/readme.md 2018-11-22 20:53:46.000000000 +0000 @@ -1,13 +1,13 @@ # Fuzzy Raft Inspired by http://colin-scott.github.io/blog/2015/10/07/fuzzing-raft-for-fun-and-profit/ this package -is a framework and set of test scenarios for testing the behavoir and correctness of the raft library +is a framework and set of test scenarios for testing the behavior and correctness of the raft library under various conditions. ## Framework The framework allows you to construct multiple node raft clusters, connected by an instrumented transport -that allows a test to inject various transport level behavours to simulate various scenarios (e.g. you +that allows a test to inject various transport level behaviors to simulate various scenarios (e.g. you can have your hook fail all transport calls to a particular node to simulate it being partitioned off the network). There are helper classes to create and Apply well know sequences of test data, and to examine the final state of the cluster, the nodes FSMs and the raft log. @@ -16,7 +16,7 @@ The tests run with the standard go test framework, run with go test . [from this dir] or use make fuzz from the parent directory. As these tests are looking for timing and other edge cases, a pass from a single run -itsn't enough, the tests needs running repeatedly to build up confidence. +isn't enough, the tests needs running repeatedly to build up confidence. ## Test Scenarios diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/transport.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/transport.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/fuzzy/transport.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/fuzzy/transport.go 2018-11-22 20:53:46.000000000 +0000 @@ -51,7 +51,7 @@ return t } -// TransportHooks allow a test to customize the behavour of the transport. +// TransportHooks allow a test to customize the behavior of the transport. // [if you return an error from a PreXXX call, then the error is returned to the caller, and the RPC never made] type TransportHooks interface { // PreRPC is called before every single RPC call from the transport diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/inmem_store.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/inmem_store.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/inmem_store.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/inmem_store.go 2018-11-22 20:53:46.000000000 +0000 @@ -1,6 +1,7 @@ package raft import ( + "errors" "sync" ) @@ -106,7 +107,11 @@ func (i *InmemStore) Get(key []byte) ([]byte, error) { i.l.RLock() defer i.l.RUnlock() - return i.kv[string(key)], nil + val := i.kv[string(key)] + if val == nil { + return nil, errors.New("not found") + } + return val, nil } // SetUint64 implements the StableStore interface. diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/inmem_transport.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/inmem_transport.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/inmem_transport.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/inmem_transport.go 2018-11-22 20:53:46.000000000 +0000 @@ -43,9 +43,11 @@ timeout time.Duration } -// NewInmemTransport is used to initialize a new transport -// and generates a random local address if none is specified -func NewInmemTransport(addr ServerAddress) (ServerAddress, *InmemTransport) { +// NewInmemTransportWithTimeout is used to initialize a new transport and +// generates a random local address if none is specified. The given timeout +// will be used to decide how long to wait for a connected peer to process the +// RPCs that we're sending it. See also Connect() and Consumer(). +func NewInmemTransportWithTimeout(addr ServerAddress, timeout time.Duration) (ServerAddress, *InmemTransport) { if string(addr) == "" { addr = NewInmemAddr() } @@ -53,11 +55,17 @@ consumerCh: make(chan RPC, 16), localAddr: addr, peers: make(map[ServerAddress]*InmemTransport), - timeout: 50 * time.Millisecond, + timeout: timeout, } return addr, trans } +// NewInmemTransport is used to initialize a new transport +// and generates a random local address if none is specified +func NewInmemTransport(addr ServerAddress) (ServerAddress, *InmemTransport) { + return NewInmemTransportWithTimeout(addr, 50*time.Millisecond) +} + // SetHeartbeatHandler is used to set optional fast-path for // heartbeats, not supported for this transport. func (i *InmemTransport) SetHeartbeatHandler(cb func(RPC)) { @@ -76,16 +84,15 @@ // AppendEntriesPipeline returns an interface that can be used to pipeline // AppendEntries requests. func (i *InmemTransport) AppendEntriesPipeline(id ServerID, target ServerAddress) (AppendPipeline, error) { - i.RLock() + i.Lock() + defer i.Unlock() + peer, ok := i.peers[target] - i.RUnlock() if !ok { return nil, fmt.Errorf("failed to connect to peer: %v", target) } pipeline := newInmemPipeline(i, peer, target) - i.Lock() i.pipelines = append(i.pipelines, pipeline) - i.Unlock() return pipeline, nil } diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/integ_test.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/integ_test.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/integ_test.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/integ_test.go 2018-11-22 20:53:46.000000000 +0000 @@ -279,7 +279,7 @@ // snapshot the leader [leaders log should be compacted past the disconnected follower log now] NoErr(WaitFuture(leader.raft.Snapshot(), t), t) - // Unfortuantly we need to wait for the leader to start backing off RPCs to the down follower + // Unfortunately we need to wait for the leader to start backing off RPCs to the down follower // such that when the follower comes back up it'll run an election before it gets an rpc from // the leader time.Sleep(time.Second * 5) diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/raft_test.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/raft_test.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/raft_test.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/raft_test.go 2018-11-22 20:53:46.000000000 +0000 @@ -2144,7 +2144,7 @@ } } -func TestRaft_VerifyLeader_ParitalConnect(t *testing.T) { +func TestRaft_VerifyLeader_PartialConnect(t *testing.T) { // Make a cluster conf := inmemConfig(t) c := MakeCluster(3, t, conf) diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/README.md lxd-3.0.3/dist/src/github.com/hashicorp/raft/README.md --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/README.md 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/README.md 2018-11-22 20:53:46.000000000 +0000 @@ -34,7 +34,7 @@ ## Tagged Releases -As of September 2017, Hashicorp will start using tags for this library to clearly indicate +As of September 2017, HashiCorp will start using tags for this library to clearly indicate major version updates. We recommend you vendor your application's dependency on this library. * v0.1.0 is the original stable version of the library that was in master and has been maintained diff -Nru lxd-3.0.2/dist/src/github.com/hashicorp/raft/replication.go lxd-3.0.3/dist/src/github.com/hashicorp/raft/replication.go --- lxd-3.0.2/dist/src/github.com/hashicorp/raft/replication.go 2018-08-20 23:47:20.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/hashicorp/raft/replication.go 2018-11-22 20:53:46.000000000 +0000 @@ -31,7 +31,7 @@ peer Server // commitment tracks the entries acknowledged by followers so that the - // leader's commit index can advance. It is updated on successsful + // leader's commit index can advance. It is updated on successful // AppendEntries responses. commitment *commitment diff -Nru lxd-3.0.2/dist/src/github.com/juju/errors/error.go lxd-3.0.3/dist/src/github.com/juju/errors/error.go --- lxd-3.0.2/dist/src/github.com/juju/errors/error.go 2018-08-20 23:46:13.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/errors/error.go 2018-11-22 20:53:33.000000000 +0000 @@ -52,7 +52,7 @@ } } -// NewErrWithCause is used to return an Err with case by other error for the purpose of embedding in other +// NewErrWithCause is used to return an Err with cause by other error for the purpose of embedding in other // structures. The location is not specified, and needs to be set with a call // to SetLocation. // @@ -143,6 +143,10 @@ fallthrough case 's': fmt.Fprintf(s, "%s", e.Error()) + case 'q': + fmt.Fprintf(s, "%q", e.Error()) + default: + fmt.Fprintf(s, "%%!%c(%T=%s)", verb, e, e.Error()) } } diff -Nru lxd-3.0.2/dist/src/github.com/juju/errors/functions_test.go lxd-3.0.3/dist/src/github.com/juju/errors/functions_test.go --- lxd-3.0.2/dist/src/github.com/juju/errors/functions_test.go 2018-08-20 23:46:13.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/errors/functions_test.go 2018-11-22 20:53:33.000000000 +0000 @@ -198,95 +198,93 @@ generator func() error expected string tracer bool - }{ - { - message: "nil", - generator: func() error { - return nil - }, - }, { - message: "raw error", - generator: func() error { - return fmt.Errorf("raw") - }, - expected: "raw", - }, { - message: "single error stack", - generator: func() error { - return errors.New("first error") //err single - }, - expected: "$single$: first error", - tracer: true, - }, { - message: "annotated error", - generator: func() error { - err := errors.New("first error") //err annotated-0 - return errors.Annotate(err, "annotation") //err annotated-1 - }, - expected: "" + - "$annotated-0$: first error\n" + - "$annotated-1$: annotation", - tracer: true, - }, { - message: "wrapped error", - generator: func() error { - err := errors.New("first error") //err wrapped-0 - return errors.Wrap(err, newError("detailed error")) //err wrapped-1 - }, - expected: "" + - "$wrapped-0$: first error\n" + - "$wrapped-1$: detailed error", - tracer: true, - }, { - message: "annotated wrapped error", - generator: func() error { - err := errors.Errorf("first error") //err ann-wrap-0 - err = errors.Wrap(err, fmt.Errorf("detailed error")) //err ann-wrap-1 - return errors.Annotatef(err, "annotated") //err ann-wrap-2 - }, - expected: "" + - "$ann-wrap-0$: first error\n" + - "$ann-wrap-1$: detailed error\n" + - "$ann-wrap-2$: annotated", - tracer: true, - }, { - message: "traced, and annotated", - generator: func() error { - err := errors.New("first error") //err stack-0 - err = errors.Trace(err) //err stack-1 - err = errors.Annotate(err, "some context") //err stack-2 - err = errors.Trace(err) //err stack-3 - err = errors.Annotate(err, "more context") //err stack-4 - return errors.Trace(err) //err stack-5 - }, - expected: "" + - "$stack-0$: first error\n" + - "$stack-1$: \n" + - "$stack-2$: some context\n" + - "$stack-3$: \n" + - "$stack-4$: more context\n" + - "$stack-5$: ", - tracer: true, - }, { - message: "uncomparable, wrapped with a value error", - generator: func() error { - err := newNonComparableError("first error") //err mixed-0 - err = errors.Trace(err) //err mixed-1 - err = errors.Wrap(err, newError("value error")) //err mixed-2 - err = errors.Maskf(err, "masked") //err mixed-3 - err = errors.Annotate(err, "more context") //err mixed-4 - return errors.Trace(err) //err mixed-5 - }, - expected: "" + - "first error\n" + - "$mixed-1$: \n" + - "$mixed-2$: value error\n" + - "$mixed-3$: masked\n" + - "$mixed-4$: more context\n" + - "$mixed-5$: ", - tracer: true, + }{{ + message: "nil", + generator: func() error { + return nil }, - } { + }, { + message: "raw error", + generator: func() error { + return fmt.Errorf("raw") + }, + expected: "raw", + }, { + message: "single error stack", + generator: func() error { + return errors.New("first error") //err single + }, + expected: "$single$: first error", + tracer: true, + }, { + message: "annotated error", + generator: func() error { + err := errors.New("first error") //err annotated-0 + return errors.Annotate(err, "annotation") //err annotated-1 + }, + expected: "" + + "$annotated-0$: first error\n" + + "$annotated-1$: annotation", + tracer: true, + }, { + message: "wrapped error", + generator: func() error { + err := errors.New("first error") //err wrapped-0 + return errors.Wrap(err, newError("detailed error")) //err wrapped-1 + }, + expected: "" + + "$wrapped-0$: first error\n" + + "$wrapped-1$: detailed error", + tracer: true, + }, { + message: "annotated wrapped error", + generator: func() error { + err := errors.Errorf("first error") //err ann-wrap-0 + err = errors.Wrap(err, fmt.Errorf("detailed error")) //err ann-wrap-1 + return errors.Annotatef(err, "annotated") //err ann-wrap-2 + }, + expected: "" + + "$ann-wrap-0$: first error\n" + + "$ann-wrap-1$: detailed error\n" + + "$ann-wrap-2$: annotated", + tracer: true, + }, { + message: "traced, and annotated", + generator: func() error { + err := errors.New("first error") //err stack-0 + err = errors.Trace(err) //err stack-1 + err = errors.Annotate(err, "some context") //err stack-2 + err = errors.Trace(err) //err stack-3 + err = errors.Annotate(err, "more context") //err stack-4 + return errors.Trace(err) //err stack-5 + }, + expected: "" + + "$stack-0$: first error\n" + + "$stack-1$: \n" + + "$stack-2$: some context\n" + + "$stack-3$: \n" + + "$stack-4$: more context\n" + + "$stack-5$: ", + tracer: true, + }, { + message: "uncomparable, wrapped with a value error", + generator: func() error { + err := newNonComparableError("first error") //err mixed-0 + err = errors.Trace(err) //err mixed-1 + err = errors.Wrap(err, newError("value error")) //err mixed-2 + err = errors.Maskf(err, "masked") //err mixed-3 + err = errors.Annotate(err, "more context") //err mixed-4 + return errors.Trace(err) //err mixed-5 + }, + expected: "" + + "first error\n" + + "$mixed-1$: \n" + + "$mixed-2$: value error\n" + + "$mixed-3$: masked\n" + + "$mixed-4$: more context\n" + + "$mixed-5$: ", + tracer: true, + }} { c.Logf("%v: %s", i, test.message) err := test.generator() expected := replaceLocations(test.expected) @@ -303,3 +301,34 @@ } } } + +func (*functionSuite) TestFormat(c *gc.C) { + err := errors.New("TestFormat") //err testformat + err = errors.Mask(err) //err testformat-wrap + for i, test := range []struct { + format string + expect string + }{{ + format: "%s", + expect: "TestFormat", + }, { + format: "%v", + expect: "TestFormat", + }, { + format: "%q", + expect: `"TestFormat"`, + }, { + format: "%A", + expect: `%!A(*errors.Err=TestFormat)`, + }, { + format: "%+v", + expect: "" + + "$testformat$: TestFormat\n" + + "$testformat-wrap$: ", + }} { + c.Logf("test %d: %q", i, test.format) + s := fmt.Sprintf(test.format, err) + expect := replaceLocations(test.expect) + c.Check(s, gc.Equals, expect) + } +} diff -Nru lxd-3.0.2/dist/src/github.com/juju/errors/README.md lxd-3.0.3/dist/src/github.com/juju/errors/README.md --- lxd-3.0.2/dist/src/github.com/juju/errors/README.md 2018-08-20 23:46:13.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/errors/README.md 2018-11-22 20:53:33.000000000 +0000 @@ -595,7 +595,7 @@ ``` go func NewErrWithCause(other error, format string, args ...interface{}) Err ``` -NewErrWithCause is used to return an Err with case by other error for the purpose of embedding in other +NewErrWithCause is used to return an Err with cause by other error for the purpose of embedding in other structures. The location is not specified, and needs to be set with a call to SetLocation. diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/blockdevice.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/blockdevice.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/blockdevice.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/blockdevice.go 2018-11-22 20:54:00.000000000 +0000 @@ -13,6 +13,7 @@ resourceURI string id int + uuid string name string model string idPath string @@ -24,14 +25,25 @@ usedSize uint64 size uint64 + filesystem *filesystem partitions []*partition } +// Type implements BlockDevice +func (b *blockdevice) Type() string { + return "blockdevice" +} + // ID implements BlockDevice. func (b *blockdevice) ID() int { return b.id } +// UUID implements BlockDevice. +func (b *blockdevice) UUID() string { + return b.uuid +} + // Name implements BlockDevice. func (b *blockdevice) Name() string { return b.name @@ -77,6 +89,11 @@ return b.size } +// FileSystem implements BlockDevice. +func (b *blockdevice) FileSystem() FileSystem { + return b.filesystem +} + // Partitions implements BlockDevice. func (b *blockdevice) Partitions() []Partition { result := make([]Partition, len(b.partitions)) @@ -135,6 +152,7 @@ "resource_uri": schema.String(), "id": schema.ForceInt(), + "uuid": schema.OneOf(schema.Nil(""), schema.String()), "name": schema.String(), "model": schema.OneOf(schema.Nil(""), schema.String()), "id_path": schema.OneOf(schema.Nil(""), schema.String()), @@ -146,6 +164,7 @@ "used_size": schema.ForceUint(), "size": schema.ForceUint(), + "filesystem": schema.OneOf(schema.Nil(""), schema.StringMap(schema.Any())), "partitions": schema.List(schema.StringMap(schema.Any())), } checker := schema.FieldMap(fields, nil) @@ -157,17 +176,25 @@ // From here we know that the map returned from the schema coercion // contains fields of the right type. + var filesystem *filesystem + if fsSource, ok := valid["filesystem"].(map[string]interface{}); ok { + if filesystem, err = filesystem2_0(fsSource); err != nil { + return nil, errors.Trace(err) + } + } partitions, err := readPartitionList(valid["partitions"].([]interface{}), partition_2_0) if err != nil { return nil, errors.Trace(err) } + uuid, _ := valid["uuid"].(string) model, _ := valid["model"].(string) idPath, _ := valid["id_path"].(string) result := &blockdevice{ resourceURI: valid["resource_uri"].(string), id: valid["id"].(int), + uuid: uuid, name: valid["name"].(string), model: model, idPath: idPath, @@ -179,6 +206,7 @@ usedSize: valid["used_size"].(uint64), size: valid["size"].(uint64), + filesystem: filesystem, partitions: partitions, } return result, nil diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/blockdevice_test.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/blockdevice_test.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/blockdevice_test.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/blockdevice_test.go 2018-11-22 20:54:00.000000000 +0000 @@ -30,6 +30,7 @@ c.Check(blockdevice.Model(), gc.Equals, "QEMU HARDDISK") c.Check(blockdevice.Path(), gc.Equals, "/dev/disk/by-dname/sda") c.Check(blockdevice.IDPath(), gc.Equals, "/dev/disk/by-id/ata-QEMU_HARDDISK_QM00001") + c.Check(blockdevice.UUID(), gc.Equals, "6199b7c9-b66f-40f6-a238-a938a58a0adf") c.Check(blockdevice.UsedFor(), gc.Equals, "MBR partitioned with 1 partition") c.Check(blockdevice.Tags(), jc.DeepEquals, []string{"rotary"}) c.Check(blockdevice.BlockSize(), gc.Equals, uint64(4096)) @@ -41,6 +42,11 @@ partition := partitions[0] c.Check(partition.ID(), gc.Equals, 1) c.Check(partition.UsedFor(), gc.Equals, "ext4 formatted filesystem mounted at /") + + fs := blockdevice.FileSystem() + c.Assert(fs, gc.NotNil) + c.Assert(fs.Type(), gc.Equals, "ext4") + c.Assert(fs.MountPoint(), gc.Equals, "/srv") } func (*blockdeviceSuite) TestReadBlockDevicesWithNulls(c *gc.C) { @@ -51,6 +57,7 @@ c.Check(blockdevice.Model(), gc.Equals, "") c.Check(blockdevice.IDPath(), gc.Equals, "") + c.Check(blockdevice.FileSystem(), gc.IsNil) } func (*blockdeviceSuite) TestLowVersion(c *gc.C) { @@ -89,7 +96,13 @@ "size": 8581545984 } ], - "filesystem": null, + "filesystem": { + "fstype": "ext4", + "mount_point": "/srv", + "label": "root", + "mount_options": null, + "uuid": "fcd7745e-f1b5-4f5d-9575-9b0bb796b752" + }, "id_path": "/dev/disk/by-id/ata-QEMU_HARDDISK_QM00001", "resource_uri": "/MAAS/api/2.0/nodes/4y3ha3/blockdevices/34/", "id": 34, @@ -99,7 +112,7 @@ "used_size": 8586788864, "available_size": 0, "partition_table_type": "MBR", - "uuid": null, + "uuid": "6199b7c9-b66f-40f6-a238-a938a58a0adf", "size": 8589934592, "model": "QEMU HARDDISK", "tags": [ diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/controller.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/controller.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/controller.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/controller.go 2018-11-22 20:54:00.000000000 +0000 @@ -11,6 +11,7 @@ "net/http" "net/url" "path" + "strconv" "strings" "sync/atomic" @@ -530,9 +531,9 @@ // that match that constraint. Interfaces map[string][]Interface - // Storage is a mapping of the constraint label specified to the BlockDevices + // Storage is a mapping of the constraint label specified to the StorageDevice // that match that constraint. - Storage map[string][]BlockDevice + Storage map[string][]StorageDevice } // AllocateMachine implements Controller. @@ -912,7 +913,7 @@ func parseAllocateConstraintsResponse(source interface{}, machine *machine) (ConstraintMatches, error) { var empty ConstraintMatches matchFields := schema.Fields{ - "storage": schema.StringMap(schema.List(schema.ForceInt())), + "storage": schema.StringMap(schema.List(schema.Any())), "interfaces": schema.StringMap(schema.List(schema.ForceInt())), } matchDefaults := schema.Defaults{ @@ -931,11 +932,11 @@ constraintsMap := valid["constraints_by_type"].(map[string]interface{}) result := ConstraintMatches{ Interfaces: make(map[string][]Interface), - Storage: make(map[string][]BlockDevice), + Storage: make(map[string][]StorageDevice), } if interfaceMatches, found := constraintsMap["interfaces"]; found { - matches := convertConstraintMatches(interfaceMatches) + matches := convertConstraintMatchesInt(interfaceMatches) for label, ids := range matches { interfaces := make([]Interface, len(ids)) for index, id := range ids { @@ -950,23 +951,45 @@ } if storageMatches, found := constraintsMap["storage"]; found { - matches := convertConstraintMatches(storageMatches) + matches := convertConstraintMatchesAny(storageMatches) for label, ids := range matches { - blockDevices := make([]BlockDevice, len(ids)) - for index, id := range ids { - blockDevice := machine.BlockDevice(id) - if blockDevice == nil { - return empty, NewDeserializationError("constraint match storage %q: %d does not match a block device for the machine", label, id) + storageDevices := make([]StorageDevice, len(ids)) + for index, storageId := range ids { + // The key value can be either an `int` which `json.Unmarshal` converts to a `float64` or a + // `string` when the key is "partition:{part_id}". + if id, ok := storageId.(float64); ok { + // Links to a block device. + blockDevice := machine.BlockDevice(int(id)) + if blockDevice == nil { + return empty, NewDeserializationError("constraint match storage %q: %d does not match a block device for the machine", label, int(id)) + } + storageDevices[index] = blockDevice + } else if id, ok := storageId.(string); ok { + // Should link to a partition. + const partPrefix = "partition:" + if !strings.HasPrefix(id, partPrefix) { + return empty, NewDeserializationError("constraint match storage %q: %s is not prefixed with partition", label, id) + } + partId, err := strconv.Atoi(id[len(partPrefix):]) + if err != nil { + return empty, NewDeserializationError("constraint match storage %q: %s cannot convert to int.", label, id[len(partPrefix):]) + } + partition := machine.Partition(partId) + if partition == nil { + return empty, NewDeserializationError("constraint match storage %q: %d does not match a partition for the machine", label, partId) + } + storageDevices[index] = partition + } else { + return empty, NewDeserializationError("constraint match storage %q: %v is not an int or string", label, storageId) } - blockDevices[index] = blockDevice } - result.Storage[label] = blockDevices + result.Storage[label] = storageDevices } } return result, nil } -func convertConstraintMatches(source interface{}) map[string][]int { +func convertConstraintMatchesInt(source interface{}) map[string][]int { // These casts are all safe because of the schema check. result := make(map[string][]int) matchMap := source.(map[string]interface{}) @@ -978,4 +1001,18 @@ } } return result +} + +func convertConstraintMatchesAny(source interface{}) map[string][]interface{} { + // These casts are all safe because of the schema check. + result := make(map[string][]interface{}) + matchMap := source.(map[string]interface{}) + for label, values := range matchMap { + items := values.([]interface{}) + result[label] = make([]interface{}, len(items)) + for index, value := range items { + result[label][index] = value + } + } + return result } diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/controller_test.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/controller_test.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/controller_test.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/controller_test.go 2018-11-22 20:54:00.000000000 +0000 @@ -644,15 +644,23 @@ s.server.AddPostResponse("/api/2.0/machines/?op=allocate", http.StatusOK, machineResponse) controller := s.getController(c) machine, matches, err := controller.AllocateMachine(AllocateMachineArgs{ - Storage: []StorageSpec{{ - Tags: []string{"raid0"}, - }}, + Storage: []StorageSpec{ + { + Tags: []string{"raid0"}, + }, + { + Tags: []string{"partition"}, + }, + }, }) c.Assert(err, jc.ErrorIsNil) var virtualDeviceID = 23 + var partitionID = 1 //matches storage must contain the "raid0" virtual block device c.Assert(matches.Storage["0"][0], gc.Equals, machine.BlockDevice(virtualDeviceID)) + //matches storage must contain the partition from physical block device + c.Assert(matches.Storage["1"][0], gc.Equals, machine.Partition(partitionID)) } func (s *controllerSuite) TestAllocateMachineStorageMatchMissing(c *gc.C) { diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/domain.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/domain.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/domain.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/domain.go 2018-11-22 20:54:00.000000000 +0000 @@ -37,10 +37,10 @@ fields := schema.Fields{ "authoritative": schema.Bool(), "resource_record_count": schema.ForceInt(), - "ttl": schema.OneOf(schema.Nil("null"), schema.ForceInt()), - "resource_uri": schema.String(), - "id": schema.ForceInt(), - "name": schema.String(), + "ttl": schema.OneOf(schema.Nil("null"), schema.ForceInt()), + "resource_uri": schema.String(), + "id": schema.ForceInt(), + "name": schema.String(), } checker := schema.FieldMap(fields, nil) // no defaults coerced, err := checker.Coerce(source, nil) diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/interfaces.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/interfaces.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/interfaces.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/interfaces.go 2018-11-22 20:54:00.000000000 +0000 @@ -235,6 +235,10 @@ // id specified. If there is no match, nil is returned. BlockDevice(id int) BlockDevice + // Partition returns the partition for the machine that matches the + // id specified. If there is no match, nil is returned. + Partition(id int) Partition + Zone() Zone // Start the machine and install the operating system specified in the args. @@ -345,33 +349,41 @@ UUID() string } -// Partition represents a partition of a block device. It may be mounted -// as a filesystem. -type Partition interface { +// StorageDevice represents any piece of storage on a machine. Partition +// and BlockDevice are storage devices. +type StorageDevice interface { + // Type is the type of item. + Type() string + + // ID is the unique ID of the item of that type. ID() int + Path() string - // FileSystem may be nil if not mounted. - FileSystem() FileSystem - UUID() string - // UsedFor is a human readable string. UsedFor() string - // Size is the number of bytes in the partition. Size() uint64 + UUID() string + Tags() []string + + // FileSystem may be nil if not mounted. + FileSystem() FileSystem +} + +// Partition represents a partition of a block device. It may be mounted +// as a filesystem. +type Partition interface { + StorageDevice } // BlockDevice represents an entire block device on the machine. type BlockDevice interface { - ID() int + StorageDevice + Name() string Model() string IDPath() string - Path() string - UsedFor() string - Tags() []string BlockSize() uint64 UsedSize() uint64 - Size() uint64 Partitions() []Partition diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/machine.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/machine.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/machine.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/machine.go 2018-11-22 20:54:00.000000000 +0000 @@ -204,6 +204,22 @@ return nil } +// Partition implements Machine. +func (m *machine) Partition(id int) Partition { + return partitionById(id, m.BlockDevices()) +} + +func partitionById(id int, blockDevices []BlockDevice) Partition { + for _, blockDevice := range blockDevices { + for _, partition := range blockDevice.Partitions() { + if partition.ID() == id { + return partition + } + } + } + return nil +} + // Devices implements Machine. func (m *machine) Devices(args DevicesArgs) ([]Device, error) { // Perhaps in the future, MAAS will give us a way to query just for the diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/machine_test.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/machine_test.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/machine_test.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/machine_test.go 2018-11-22 20:54:00.000000000 +0000 @@ -425,6 +425,9 @@ "storage": { "0": [ 23 + ], + "1": [ + "partition:1" ] } }, diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/partition.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/partition.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/partition.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/partition.go 2018-11-22 20:54:00.000000000 +0000 @@ -12,16 +12,21 @@ type partition struct { resourceURI string - id int - path string - uuid string - + id int + path string + uuid string usedFor string size uint64 + tags []string filesystem *filesystem } +// Type implements Partition. +func (p *partition) Type() string { + return "partition" +} + // ID implements Partition. func (p *partition) ID() int { return p.id @@ -55,6 +60,11 @@ return p.size } +// Tags implements Partition. +func (p *partition) Tags() []string { + return p.tags +} + func readPartitions(controllerVersion version.Number, source interface{}) ([]*partition, error) { checker := schema.List(schema.StringMap(schema.Any())) coerced, err := checker.Coerce(source, nil) @@ -103,17 +113,17 @@ fields := schema.Fields{ "resource_uri": schema.String(), - "id": schema.ForceInt(), - "path": schema.String(), - "uuid": schema.OneOf(schema.Nil(""), schema.String()), - + "id": schema.ForceInt(), + "path": schema.String(), + "uuid": schema.OneOf(schema.Nil(""), schema.String()), "used_for": schema.String(), "size": schema.ForceUint(), + "tags": schema.List(schema.String()), "filesystem": schema.OneOf(schema.Nil(""), schema.StringMap(schema.Any())), } defaults := schema.Defaults{ - "uuid": "", + "tags": []string{}, } checker := schema.FieldMap(fields, defaults) coerced, err := checker.Coerce(source, nil) @@ -125,21 +135,24 @@ // contains fields of the right type. var filesystem *filesystem - if fsSource := valid["filesystem"]; fsSource != nil { - filesystem, err = filesystem2_0(fsSource.(map[string]interface{})) - if err != nil { + if fsSource, ok := valid["filesystem"].(map[string]interface{}); ok { + if filesystem, err = filesystem2_0(fsSource); err != nil { return nil, errors.Trace(err) } } + uuid, _ := valid["uuid"].(string) result := &partition{ resourceURI: valid["resource_uri"].(string), - id: valid["id"].(int), - path: valid["path"].(string), - uuid: uuid, - usedFor: valid["used_for"].(string), - size: valid["size"].(uint64), - filesystem: filesystem, + + id: valid["id"].(int), + path: valid["path"].(string), + uuid: uuid, + usedFor: valid["used_for"].(string), + size: valid["size"].(uint64), + tags: convertToStringSlice(valid["tags"]), + + filesystem: filesystem, } return result, nil } diff -Nru lxd-3.0.2/dist/src/github.com/juju/gomaasapi/partition_test.go lxd-3.0.3/dist/src/github.com/juju/gomaasapi/partition_test.go --- lxd-3.0.2/dist/src/github.com/juju/gomaasapi/partition_test.go 2018-08-20 23:48:34.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/gomaasapi/partition_test.go 2018-11-22 20:54:00.000000000 +0000 @@ -13,6 +13,11 @@ var _ = gc.Suite(&partitionSuite{}) +func (*partitionSuite) TestTypePartition(c *gc.C) { + var empty partition + c.Assert(empty.Type() == "partition", jc.IsTrue) +} + func (*partitionSuite) TestNilFileSystem(c *gc.C) { var empty partition c.Assert(empty.FileSystem() == nil, jc.IsTrue) @@ -30,11 +35,13 @@ c.Assert(partitions, gc.HasLen, 1) partition := partitions[0] + c.Check(partition.Type(), gc.Equals, "partition") c.Check(partition.ID(), gc.Equals, 1) c.Check(partition.Path(), gc.Equals, "/dev/disk/by-dname/sda-part1") c.Check(partition.UUID(), gc.Equals, "6199b7c9-b66f-40f6-a238-a938a58a0adf") c.Check(partition.UsedFor(), gc.Equals, "ext4 formatted filesystem mounted at /") c.Check(partition.Size(), gc.Equals, uint64(8581545984)) + c.Check(partition.Tags(), gc.DeepEquals, []string{"ssd-part", "osd-part"}) fs := partition.FileSystem() c.Assert(fs, gc.NotNil) @@ -80,7 +87,8 @@ "resource_uri": "/MAAS/api/2.0/nodes/4y3ha3/blockdevices/34/partition/1", "uuid": "6199b7c9-b66f-40f6-a238-a938a58a0adf", "used_for": "ext4 formatted filesystem mounted at /", - "size": 8581545984 + "size": 8581545984, + "tags": ["ssd-part", "osd-part"] } ] ` diff -Nru lxd-3.0.2/dist/src/github.com/juju/webbrowser/webbrowser.go lxd-3.0.3/dist/src/github.com/juju/webbrowser/webbrowser.go --- lxd-3.0.2/dist/src/github.com/juju/webbrowser/webbrowser.go 2018-08-20 23:45:44.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/juju/webbrowser/webbrowser.go 2018-11-22 20:53:19.000000000 +0000 @@ -37,9 +37,9 @@ var ErrNoBrowser = errors.New("cannot find a browser to open the web page") var browser = map[string]string{ - "linux": "sensible-browser", "darwin": "open", "freebsd": "xdg-open", + "linux": "xdg-open", "netbsd": "xdg-open", "openbsd": "xdg-open", } diff -Nru lxd-3.0.2/dist/src/github.com/julienschmidt/httprouter/.travis.yml lxd-3.0.3/dist/src/github.com/julienschmidt/httprouter/.travis.yml --- lxd-3.0.2/dist/src/github.com/julienschmidt/httprouter/.travis.yml 2018-08-20 23:45:45.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/julienschmidt/httprouter/.travis.yml 2018-11-22 20:53:20.000000000 +0000 @@ -1,15 +1,16 @@ sudo: false language: go go: - - 1.7 - - 1.8 - - 1.9 - - "1.10" - - tip + - 1.7.x + - 1.8.x + - 1.9.x + - 1.10.x + - 1.11.x + - master before_install: + - go get golang.org/x/lint/golint - go get golang.org/x/tools/cmd/cover - go get github.com/mattn/goveralls - - go get github.com/golang/lint/golint script: - go test -v -covermode=count -coverprofile=coverage.out - go vet ./... diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_appengine.go lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_appengine.go --- lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_appengine.go 2018-08-20 23:46:01.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_appengine.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -// +build appengine - -package isatty - -// IsTerminal returns true if the file descriptor is terminal which -// is always false on on appengine classic which is a sandboxed PaaS. -func IsTerminal(fd uintptr) bool { - return false -} - -// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_bsd.go lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_bsd.go --- lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_bsd.go 2018-08-20 23:46:01.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_bsd.go 2018-11-22 20:53:29.000000000 +0000 @@ -16,3 +16,9 @@ _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) return err == 0 } + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_linux.go lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_linux.go --- lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_linux.go 2018-08-20 23:46:01.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_linux.go 2018-11-22 20:53:29.000000000 +0000 @@ -16,3 +16,9 @@ _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) return err == 0 } + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_linux_ppc64x.go lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_linux_ppc64x.go --- lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_linux_ppc64x.go 2018-08-20 23:46:01.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_linux_ppc64x.go 2018-11-22 20:53:29.000000000 +0000 @@ -17,3 +17,9 @@ _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) return err == 0 } + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_others.go lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_others.go --- lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_others.go 2018-08-20 23:46:01.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_others.go 2018-11-22 20:53:29.000000000 +0000 @@ -1,9 +1,14 @@ -// +build !windows -// +build !appengine +// +build appengine js package isatty -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// IsTerminal returns true if the file descriptor is terminal which +// is always false on js and appengine classic which is a sandboxed PaaS. +func IsTerminal(fd uintptr) bool { + return false +} + +// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 // terminal. This is also always false on this environment. func IsCygwinTerminal(fd uintptr) bool { return false diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_solaris.go lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_solaris.go --- lxd-3.0.2/dist/src/github.com/mattn/go-isatty/isatty_solaris.go 2018-08-20 23:46:01.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-isatty/isatty_solaris.go 2018-11-22 20:53:29.000000000 +0000 @@ -14,3 +14,9 @@ err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio) return err == nil } + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/benchmark_test.go lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/benchmark_test.go --- lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/benchmark_test.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/benchmark_test.go 2018-11-22 20:53:30.000000000 +0000 @@ -0,0 +1,45 @@ +package runewidth + +import ( + "testing" + "unicode/utf8" +) + +var benchSink int + +func benchTable(b *testing.B, tbl table) int { + n := 0 + for i := 0; i < b.N; i++ { + for r := rune(0); r <= utf8.MaxRune; r++ { + if inTable(r, tbl) { + n++ + } + } + } + return n +} + +func BenchmarkTablePrivate(b *testing.B) { + benchSink = benchTable(b, private) +} +func BenchmarkTableNonprint(b *testing.B) { + benchSink = benchTable(b, nonprint) +} +func BenchmarkTableCombining(b *testing.B) { + benchSink = benchTable(b, combining) +} +func BenchmarkTableDoublewidth(b *testing.B) { + benchSink = benchTable(b, doublewidth) +} +func BenchmarkTableAmbiguous(b *testing.B) { + benchSink = benchTable(b, ambiguous) +} +func BenchmarkTableEmoji(b *testing.B) { + benchSink = benchTable(b, emoji) +} +func BenchmarkTableNotassigned(b *testing.B) { + benchSink = benchTable(b, notassigned) +} +func BenchmarkTableNeutral(b *testing.B) { + benchSink = benchTable(b, neutral) +} diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_appengine.go lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_appengine.go --- lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_appengine.go 1970-01-01 00:00:00.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_appengine.go 2018-11-22 20:53:30.000000000 +0000 @@ -0,0 +1,8 @@ +// +build appengine + +package runewidth + +// IsEastAsian return true if the current locale is CJK +func IsEastAsian() bool { + return false +} diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth.go lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth.go --- lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth.go 2018-08-20 23:46:03.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth.go 2018-11-22 20:53:30.000000000 +0000 @@ -1,22 +1,34 @@ package runewidth -import "os" +import ( + "os" +) var ( // EastAsianWidth will be set true if the current locale is CJK EastAsianWidth bool + // ZeroWidthJoiner is flag to set to use UTR#51 ZWJ + ZeroWidthJoiner bool + // DefaultCondition is a condition in current locale - DefaultCondition = &Condition{EastAsianWidth} + DefaultCondition = &Condition{} ) func init() { + handleEnv() +} + +func handleEnv() { env := os.Getenv("RUNEWIDTH_EASTASIAN") if env == "" { EastAsianWidth = IsEastAsian() } else { EastAsianWidth = env == "1" } + // update DefaultCondition + DefaultCondition.EastAsianWidth = EastAsianWidth + DefaultCondition.ZeroWidthJoiner = ZeroWidthJoiner } type interval struct { @@ -44,7 +56,7 @@ bot := 0 top := len(t) - 1 for top >= bot { - mid := (bot + top) / 2 + mid := (bot + top) >> 1 switch { case t[mid].last < r: @@ -66,8 +78,7 @@ var nonprint = table{ {0x0000, 0x001F}, {0x007F, 0x009F}, {0x00AD, 0x00AD}, {0x070F, 0x070F}, {0x180B, 0x180E}, {0x200B, 0x200F}, - {0x2028, 0x2029}, - {0x202A, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF}, + {0x2028, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF}, {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFE, 0xFFFF}, } @@ -261,19 +272,54 @@ } var emoji = table{ - {0x1F1E6, 0x1F1FF}, {0x1F321, 0x1F321}, {0x1F324, 0x1F32C}, - {0x1F336, 0x1F336}, {0x1F37D, 0x1F37D}, {0x1F396, 0x1F397}, - {0x1F399, 0x1F39B}, {0x1F39E, 0x1F39F}, {0x1F3CB, 0x1F3CE}, - {0x1F3D4, 0x1F3DF}, {0x1F3F3, 0x1F3F5}, {0x1F3F7, 0x1F3F7}, - {0x1F43F, 0x1F43F}, {0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FD}, - {0x1F549, 0x1F54A}, {0x1F56F, 0x1F570}, {0x1F573, 0x1F579}, + {0x203C, 0x203C}, {0x2049, 0x2049}, {0x2122, 0x2122}, + {0x2139, 0x2139}, {0x2194, 0x2199}, {0x21A9, 0x21AA}, + {0x231A, 0x231B}, {0x2328, 0x2328}, {0x23CF, 0x23CF}, + {0x23E9, 0x23F3}, {0x23F8, 0x23FA}, {0x24C2, 0x24C2}, + {0x25AA, 0x25AB}, {0x25B6, 0x25B6}, {0x25C0, 0x25C0}, + {0x25FB, 0x25FE}, {0x2600, 0x2604}, {0x260E, 0x260E}, + {0x2611, 0x2611}, {0x2614, 0x2615}, {0x2618, 0x2618}, + {0x261D, 0x261D}, {0x2620, 0x2620}, {0x2622, 0x2623}, + {0x2626, 0x2626}, {0x262A, 0x262A}, {0x262E, 0x262F}, + {0x2638, 0x263A}, {0x2640, 0x2640}, {0x2642, 0x2642}, + {0x2648, 0x2653}, {0x265F, 0x2660}, {0x2663, 0x2663}, + {0x2665, 0x2666}, {0x2668, 0x2668}, {0x267B, 0x267B}, + {0x267E, 0x267F}, {0x2692, 0x2697}, {0x2699, 0x2699}, + {0x269B, 0x269C}, {0x26A0, 0x26A1}, {0x26AA, 0x26AB}, + {0x26B0, 0x26B1}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5}, + {0x26C8, 0x26C8}, {0x26CE, 0x26CF}, {0x26D1, 0x26D1}, + {0x26D3, 0x26D4}, {0x26E9, 0x26EA}, {0x26F0, 0x26F5}, + {0x26F7, 0x26FA}, {0x26FD, 0x26FD}, {0x2702, 0x2702}, + {0x2705, 0x2705}, {0x2708, 0x270D}, {0x270F, 0x270F}, + {0x2712, 0x2712}, {0x2714, 0x2714}, {0x2716, 0x2716}, + {0x271D, 0x271D}, {0x2721, 0x2721}, {0x2728, 0x2728}, + {0x2733, 0x2734}, {0x2744, 0x2744}, {0x2747, 0x2747}, + {0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755}, + {0x2757, 0x2757}, {0x2763, 0x2764}, {0x2795, 0x2797}, + {0x27A1, 0x27A1}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, + {0x2934, 0x2935}, {0x2B05, 0x2B07}, {0x2B1B, 0x2B1C}, + {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x3030, 0x3030}, + {0x303D, 0x303D}, {0x3297, 0x3297}, {0x3299, 0x3299}, + {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF}, {0x1F170, 0x1F171}, + {0x1F17E, 0x1F17F}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, + {0x1F1E6, 0x1F1FF}, {0x1F201, 0x1F202}, {0x1F21A, 0x1F21A}, + {0x1F22F, 0x1F22F}, {0x1F232, 0x1F23A}, {0x1F250, 0x1F251}, + {0x1F300, 0x1F321}, {0x1F324, 0x1F393}, {0x1F396, 0x1F397}, + {0x1F399, 0x1F39B}, {0x1F39E, 0x1F3F0}, {0x1F3F3, 0x1F3F5}, + {0x1F3F7, 0x1F4FD}, {0x1F4FF, 0x1F53D}, {0x1F549, 0x1F54E}, + {0x1F550, 0x1F567}, {0x1F56F, 0x1F570}, {0x1F573, 0x1F57A}, {0x1F587, 0x1F587}, {0x1F58A, 0x1F58D}, {0x1F590, 0x1F590}, - {0x1F5A5, 0x1F5A5}, {0x1F5A8, 0x1F5A8}, {0x1F5B1, 0x1F5B2}, - {0x1F5BC, 0x1F5BC}, {0x1F5C2, 0x1F5C4}, {0x1F5D1, 0x1F5D3}, - {0x1F5DC, 0x1F5DE}, {0x1F5E1, 0x1F5E1}, {0x1F5E3, 0x1F5E3}, - {0x1F5E8, 0x1F5E8}, {0x1F5EF, 0x1F5EF}, {0x1F5F3, 0x1F5F3}, - {0x1F5FA, 0x1F5FA}, {0x1F6CB, 0x1F6CF}, {0x1F6E0, 0x1F6E5}, - {0x1F6E9, 0x1F6E9}, {0x1F6F0, 0x1F6F0}, {0x1F6F3, 0x1F6F3}, + {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A5}, {0x1F5A8, 0x1F5A8}, + {0x1F5B1, 0x1F5B2}, {0x1F5BC, 0x1F5BC}, {0x1F5C2, 0x1F5C4}, + {0x1F5D1, 0x1F5D3}, {0x1F5DC, 0x1F5DE}, {0x1F5E1, 0x1F5E1}, + {0x1F5E3, 0x1F5E3}, {0x1F5E8, 0x1F5E8}, {0x1F5EF, 0x1F5EF}, + {0x1F5F3, 0x1F5F3}, {0x1F5FA, 0x1F64F}, {0x1F680, 0x1F6C5}, + {0x1F6CB, 0x1F6D2}, {0x1F6E0, 0x1F6E5}, {0x1F6E9, 0x1F6E9}, + {0x1F6EB, 0x1F6EC}, {0x1F6F0, 0x1F6F0}, {0x1F6F3, 0x1F6F9}, + {0x1F910, 0x1F93A}, {0x1F93C, 0x1F93E}, {0x1F940, 0x1F945}, + {0x1F947, 0x1F970}, {0x1F973, 0x1F976}, {0x1F97A, 0x1F97A}, + {0x1F97C, 0x1F9A2}, {0x1F9B0, 0x1F9B9}, {0x1F9C0, 0x1F9C2}, + {0x1F9D0, 0x1F9FF}, } var notassigned = table{ @@ -493,314 +539,141 @@ } var neutral = table{ - {0x0000, 0x001F}, {0x007F, 0x007F}, {0x0080, 0x009F}, - {0x00A0, 0x00A0}, {0x00A9, 0x00A9}, {0x00AB, 0x00AB}, - {0x00B5, 0x00B5}, {0x00BB, 0x00BB}, {0x00C0, 0x00C5}, - {0x00C7, 0x00CF}, {0x00D1, 0x00D6}, {0x00D9, 0x00DD}, - {0x00E2, 0x00E5}, {0x00E7, 0x00E7}, {0x00EB, 0x00EB}, - {0x00EE, 0x00EF}, {0x00F1, 0x00F1}, {0x00F4, 0x00F6}, - {0x00FB, 0x00FB}, {0x00FD, 0x00FD}, {0x00FF, 0x00FF}, - {0x0100, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112}, + {0x0000, 0x001F}, {0x007F, 0x00A0}, {0x00A9, 0x00A9}, + {0x00AB, 0x00AB}, {0x00B5, 0x00B5}, {0x00BB, 0x00BB}, + {0x00C0, 0x00C5}, {0x00C7, 0x00CF}, {0x00D1, 0x00D6}, + {0x00D9, 0x00DD}, {0x00E2, 0x00E5}, {0x00E7, 0x00E7}, + {0x00EB, 0x00EB}, {0x00EE, 0x00EF}, {0x00F1, 0x00F1}, + {0x00F4, 0x00F6}, {0x00FB, 0x00FB}, {0x00FD, 0x00FD}, + {0x00FF, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112}, {0x0114, 0x011A}, {0x011C, 0x0125}, {0x0128, 0x012A}, {0x012C, 0x0130}, {0x0134, 0x0137}, {0x0139, 0x013E}, {0x0143, 0x0143}, {0x0145, 0x0147}, {0x014C, 0x014C}, {0x014E, 0x0151}, {0x0154, 0x0165}, {0x0168, 0x016A}, - {0x016C, 0x017F}, {0x0180, 0x01BA}, {0x01BB, 0x01BB}, - {0x01BC, 0x01BF}, {0x01C0, 0x01C3}, {0x01C4, 0x01CD}, - {0x01CF, 0x01CF}, {0x01D1, 0x01D1}, {0x01D3, 0x01D3}, - {0x01D5, 0x01D5}, {0x01D7, 0x01D7}, {0x01D9, 0x01D9}, - {0x01DB, 0x01DB}, {0x01DD, 0x024F}, {0x0250, 0x0250}, - {0x0252, 0x0260}, {0x0262, 0x0293}, {0x0294, 0x0294}, - {0x0295, 0x02AF}, {0x02B0, 0x02C1}, {0x02C2, 0x02C3}, - {0x02C5, 0x02C5}, {0x02C6, 0x02C6}, {0x02C8, 0x02C8}, - {0x02CC, 0x02CC}, {0x02CE, 0x02CF}, {0x02D1, 0x02D1}, - {0x02D2, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE}, - {0x02E0, 0x02E4}, {0x02E5, 0x02EB}, {0x02EC, 0x02EC}, - {0x02ED, 0x02ED}, {0x02EE, 0x02EE}, {0x02EF, 0x02FF}, - {0x0370, 0x0373}, {0x0374, 0x0374}, {0x0375, 0x0375}, - {0x0376, 0x0377}, {0x037A, 0x037A}, {0x037B, 0x037D}, - {0x037E, 0x037E}, {0x037F, 0x037F}, {0x0384, 0x0385}, - {0x0386, 0x0386}, {0x0387, 0x0387}, {0x0388, 0x038A}, - {0x038C, 0x038C}, {0x038E, 0x0390}, {0x03AA, 0x03B0}, - {0x03C2, 0x03C2}, {0x03CA, 0x03F5}, {0x03F6, 0x03F6}, - {0x03F7, 0x03FF}, {0x0400, 0x0400}, {0x0402, 0x040F}, - {0x0450, 0x0450}, {0x0452, 0x0481}, {0x0482, 0x0482}, - {0x0483, 0x0487}, {0x0488, 0x0489}, {0x048A, 0x04FF}, - {0x0500, 0x052F}, {0x0531, 0x0556}, {0x0559, 0x0559}, - {0x055A, 0x055F}, {0x0561, 0x0587}, {0x0589, 0x0589}, - {0x058A, 0x058A}, {0x058D, 0x058E}, {0x058F, 0x058F}, - {0x0591, 0x05BD}, {0x05BE, 0x05BE}, {0x05BF, 0x05BF}, - {0x05C0, 0x05C0}, {0x05C1, 0x05C2}, {0x05C3, 0x05C3}, - {0x05C4, 0x05C5}, {0x05C6, 0x05C6}, {0x05C7, 0x05C7}, - {0x05D0, 0x05EA}, {0x05F0, 0x05F2}, {0x05F3, 0x05F4}, - {0x0600, 0x0605}, {0x0606, 0x0608}, {0x0609, 0x060A}, - {0x060B, 0x060B}, {0x060C, 0x060D}, {0x060E, 0x060F}, - {0x0610, 0x061A}, {0x061B, 0x061B}, {0x061C, 0x061C}, - {0x061E, 0x061F}, {0x0620, 0x063F}, {0x0640, 0x0640}, - {0x0641, 0x064A}, {0x064B, 0x065F}, {0x0660, 0x0669}, - {0x066A, 0x066D}, {0x066E, 0x066F}, {0x0670, 0x0670}, - {0x0671, 0x06D3}, {0x06D4, 0x06D4}, {0x06D5, 0x06D5}, - {0x06D6, 0x06DC}, {0x06DD, 0x06DD}, {0x06DE, 0x06DE}, - {0x06DF, 0x06E4}, {0x06E5, 0x06E6}, {0x06E7, 0x06E8}, - {0x06E9, 0x06E9}, {0x06EA, 0x06ED}, {0x06EE, 0x06EF}, - {0x06F0, 0x06F9}, {0x06FA, 0x06FC}, {0x06FD, 0x06FE}, - {0x06FF, 0x06FF}, {0x0700, 0x070D}, {0x070F, 0x070F}, - {0x0710, 0x0710}, {0x0711, 0x0711}, {0x0712, 0x072F}, - {0x0730, 0x074A}, {0x074D, 0x074F}, {0x0750, 0x077F}, - {0x0780, 0x07A5}, {0x07A6, 0x07B0}, {0x07B1, 0x07B1}, - {0x07C0, 0x07C9}, {0x07CA, 0x07EA}, {0x07EB, 0x07F3}, - {0x07F4, 0x07F5}, {0x07F6, 0x07F6}, {0x07F7, 0x07F9}, - {0x07FA, 0x07FA}, {0x0800, 0x0815}, {0x0816, 0x0819}, - {0x081A, 0x081A}, {0x081B, 0x0823}, {0x0824, 0x0824}, - {0x0825, 0x0827}, {0x0828, 0x0828}, {0x0829, 0x082D}, - {0x0830, 0x083E}, {0x0840, 0x0858}, {0x0859, 0x085B}, - {0x085E, 0x085E}, {0x08A0, 0x08B4}, {0x08B6, 0x08BD}, - {0x08D4, 0x08E1}, {0x08E2, 0x08E2}, {0x08E3, 0x08FF}, - {0x0900, 0x0902}, {0x0903, 0x0903}, {0x0904, 0x0939}, - {0x093A, 0x093A}, {0x093B, 0x093B}, {0x093C, 0x093C}, - {0x093D, 0x093D}, {0x093E, 0x0940}, {0x0941, 0x0948}, - {0x0949, 0x094C}, {0x094D, 0x094D}, {0x094E, 0x094F}, - {0x0950, 0x0950}, {0x0951, 0x0957}, {0x0958, 0x0961}, - {0x0962, 0x0963}, {0x0964, 0x0965}, {0x0966, 0x096F}, - {0x0970, 0x0970}, {0x0971, 0x0971}, {0x0972, 0x097F}, - {0x0980, 0x0980}, {0x0981, 0x0981}, {0x0982, 0x0983}, - {0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8}, - {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, - {0x09BC, 0x09BC}, {0x09BD, 0x09BD}, {0x09BE, 0x09C0}, - {0x09C1, 0x09C4}, {0x09C7, 0x09C8}, {0x09CB, 0x09CC}, - {0x09CD, 0x09CD}, {0x09CE, 0x09CE}, {0x09D7, 0x09D7}, - {0x09DC, 0x09DD}, {0x09DF, 0x09E1}, {0x09E2, 0x09E3}, - {0x09E6, 0x09EF}, {0x09F0, 0x09F1}, {0x09F2, 0x09F3}, - {0x09F4, 0x09F9}, {0x09FA, 0x09FA}, {0x09FB, 0x09FB}, - {0x0A01, 0x0A02}, {0x0A03, 0x0A03}, {0x0A05, 0x0A0A}, - {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, - {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, - {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A40}, {0x0A41, 0x0A42}, - {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, - {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A6F}, - {0x0A70, 0x0A71}, {0x0A72, 0x0A74}, {0x0A75, 0x0A75}, - {0x0A81, 0x0A82}, {0x0A83, 0x0A83}, {0x0A85, 0x0A8D}, + {0x016C, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1}, + {0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7}, + {0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DD, 0x0250}, + {0x0252, 0x0260}, {0x0262, 0x02C3}, {0x02C5, 0x02C6}, + {0x02C8, 0x02C8}, {0x02CC, 0x02CC}, {0x02CE, 0x02CF}, + {0x02D1, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE}, + {0x02E0, 0x02FF}, {0x0370, 0x0377}, {0x037A, 0x037F}, + {0x0384, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x0390}, + {0x03AA, 0x03B0}, {0x03C2, 0x03C2}, {0x03CA, 0x0400}, + {0x0402, 0x040F}, {0x0450, 0x0450}, {0x0452, 0x052F}, + {0x0531, 0x0556}, {0x0559, 0x055F}, {0x0561, 0x0587}, + {0x0589, 0x058A}, {0x058D, 0x058F}, {0x0591, 0x05C7}, + {0x05D0, 0x05EA}, {0x05F0, 0x05F4}, {0x0600, 0x061C}, + {0x061E, 0x070D}, {0x070F, 0x074A}, {0x074D, 0x07B1}, + {0x07C0, 0x07FA}, {0x0800, 0x082D}, {0x0830, 0x083E}, + {0x0840, 0x085B}, {0x085E, 0x085E}, {0x08A0, 0x08B4}, + {0x08B6, 0x08BD}, {0x08D4, 0x0983}, {0x0985, 0x098C}, + {0x098F, 0x0990}, {0x0993, 0x09A8}, {0x09AA, 0x09B0}, + {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, {0x09BC, 0x09C4}, + {0x09C7, 0x09C8}, {0x09CB, 0x09CE}, {0x09D7, 0x09D7}, + {0x09DC, 0x09DD}, {0x09DF, 0x09E3}, {0x09E6, 0x09FB}, + {0x0A01, 0x0A03}, {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, + {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, + {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, + {0x0A3E, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, + {0x0A51, 0x0A51}, {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, + {0x0A66, 0x0A75}, {0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, - {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABC, 0x0ABC}, - {0x0ABD, 0x0ABD}, {0x0ABE, 0x0AC0}, {0x0AC1, 0x0AC5}, - {0x0AC7, 0x0AC8}, {0x0AC9, 0x0AC9}, {0x0ACB, 0x0ACC}, - {0x0ACD, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE1}, - {0x0AE2, 0x0AE3}, {0x0AE6, 0x0AEF}, {0x0AF0, 0x0AF0}, - {0x0AF1, 0x0AF1}, {0x0AF9, 0x0AF9}, {0x0B01, 0x0B01}, - {0x0B02, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, + {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, + {0x0AC7, 0x0AC9}, {0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, + {0x0AE0, 0x0AE3}, {0x0AE6, 0x0AF1}, {0x0AF9, 0x0AF9}, + {0x0B01, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, - {0x0B35, 0x0B39}, {0x0B3C, 0x0B3C}, {0x0B3D, 0x0B3D}, - {0x0B3E, 0x0B3E}, {0x0B3F, 0x0B3F}, {0x0B40, 0x0B40}, - {0x0B41, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4C}, - {0x0B4D, 0x0B4D}, {0x0B56, 0x0B56}, {0x0B57, 0x0B57}, - {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B61}, {0x0B62, 0x0B63}, - {0x0B66, 0x0B6F}, {0x0B70, 0x0B70}, {0x0B71, 0x0B71}, - {0x0B72, 0x0B77}, {0x0B82, 0x0B82}, {0x0B83, 0x0B83}, + {0x0B35, 0x0B39}, {0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, + {0x0B4B, 0x0B4D}, {0x0B56, 0x0B57}, {0x0B5C, 0x0B5D}, + {0x0B5F, 0x0B63}, {0x0B66, 0x0B77}, {0x0B82, 0x0B83}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, - {0x0BBE, 0x0BBF}, {0x0BC0, 0x0BC0}, {0x0BC1, 0x0BC2}, - {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCC}, {0x0BCD, 0x0BCD}, - {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, {0x0BE6, 0x0BEF}, - {0x0BF0, 0x0BF2}, {0x0BF3, 0x0BF8}, {0x0BF9, 0x0BF9}, - {0x0BFA, 0x0BFA}, {0x0C00, 0x0C00}, {0x0C01, 0x0C03}, - {0x0C05, 0x0C0C}, {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, - {0x0C2A, 0x0C39}, {0x0C3D, 0x0C3D}, {0x0C3E, 0x0C40}, - {0x0C41, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, - {0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C60, 0x0C61}, - {0x0C62, 0x0C63}, {0x0C66, 0x0C6F}, {0x0C78, 0x0C7E}, - {0x0C7F, 0x0C7F}, {0x0C80, 0x0C80}, {0x0C81, 0x0C81}, - {0x0C82, 0x0C83}, {0x0C85, 0x0C8C}, {0x0C8E, 0x0C90}, + {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD}, + {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, {0x0BE6, 0x0BFA}, + {0x0C00, 0x0C03}, {0x0C05, 0x0C0C}, {0x0C0E, 0x0C10}, + {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, {0x0C3D, 0x0C44}, + {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, + {0x0C58, 0x0C5A}, {0x0C60, 0x0C63}, {0x0C66, 0x0C6F}, + {0x0C78, 0x0C83}, {0x0C85, 0x0C8C}, {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9}, - {0x0CBC, 0x0CBC}, {0x0CBD, 0x0CBD}, {0x0CBE, 0x0CBE}, - {0x0CBF, 0x0CBF}, {0x0CC0, 0x0CC4}, {0x0CC6, 0x0CC6}, - {0x0CC7, 0x0CC8}, {0x0CCA, 0x0CCB}, {0x0CCC, 0x0CCD}, - {0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE1}, - {0x0CE2, 0x0CE3}, {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, - {0x0D01, 0x0D01}, {0x0D02, 0x0D03}, {0x0D05, 0x0D0C}, - {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, {0x0D3D, 0x0D3D}, - {0x0D3E, 0x0D40}, {0x0D41, 0x0D44}, {0x0D46, 0x0D48}, - {0x0D4A, 0x0D4C}, {0x0D4D, 0x0D4D}, {0x0D4E, 0x0D4E}, - {0x0D4F, 0x0D4F}, {0x0D54, 0x0D56}, {0x0D57, 0x0D57}, - {0x0D58, 0x0D5E}, {0x0D5F, 0x0D61}, {0x0D62, 0x0D63}, - {0x0D66, 0x0D6F}, {0x0D70, 0x0D78}, {0x0D79, 0x0D79}, - {0x0D7A, 0x0D7F}, {0x0D82, 0x0D83}, {0x0D85, 0x0D96}, - {0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, - {0x0DC0, 0x0DC6}, {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD1}, - {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, - {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF3}, {0x0DF4, 0x0DF4}, - {0x0E01, 0x0E30}, {0x0E31, 0x0E31}, {0x0E32, 0x0E33}, - {0x0E34, 0x0E3A}, {0x0E3F, 0x0E3F}, {0x0E40, 0x0E45}, - {0x0E46, 0x0E46}, {0x0E47, 0x0E4E}, {0x0E4F, 0x0E4F}, - {0x0E50, 0x0E59}, {0x0E5A, 0x0E5B}, {0x0E81, 0x0E82}, - {0x0E84, 0x0E84}, {0x0E87, 0x0E88}, {0x0E8A, 0x0E8A}, - {0x0E8D, 0x0E8D}, {0x0E94, 0x0E97}, {0x0E99, 0x0E9F}, - {0x0EA1, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EA7}, - {0x0EAA, 0x0EAB}, {0x0EAD, 0x0EB0}, {0x0EB1, 0x0EB1}, - {0x0EB2, 0x0EB3}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC}, - {0x0EBD, 0x0EBD}, {0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6}, - {0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF}, - {0x0F00, 0x0F00}, {0x0F01, 0x0F03}, {0x0F04, 0x0F12}, - {0x0F13, 0x0F13}, {0x0F14, 0x0F14}, {0x0F15, 0x0F17}, - {0x0F18, 0x0F19}, {0x0F1A, 0x0F1F}, {0x0F20, 0x0F29}, - {0x0F2A, 0x0F33}, {0x0F34, 0x0F34}, {0x0F35, 0x0F35}, - {0x0F36, 0x0F36}, {0x0F37, 0x0F37}, {0x0F38, 0x0F38}, - {0x0F39, 0x0F39}, {0x0F3A, 0x0F3A}, {0x0F3B, 0x0F3B}, - {0x0F3C, 0x0F3C}, {0x0F3D, 0x0F3D}, {0x0F3E, 0x0F3F}, - {0x0F40, 0x0F47}, {0x0F49, 0x0F6C}, {0x0F71, 0x0F7E}, - {0x0F7F, 0x0F7F}, {0x0F80, 0x0F84}, {0x0F85, 0x0F85}, - {0x0F86, 0x0F87}, {0x0F88, 0x0F8C}, {0x0F8D, 0x0F97}, - {0x0F99, 0x0FBC}, {0x0FBE, 0x0FC5}, {0x0FC6, 0x0FC6}, - {0x0FC7, 0x0FCC}, {0x0FCE, 0x0FCF}, {0x0FD0, 0x0FD4}, - {0x0FD5, 0x0FD8}, {0x0FD9, 0x0FDA}, {0x1000, 0x102A}, - {0x102B, 0x102C}, {0x102D, 0x1030}, {0x1031, 0x1031}, - {0x1032, 0x1037}, {0x1038, 0x1038}, {0x1039, 0x103A}, - {0x103B, 0x103C}, {0x103D, 0x103E}, {0x103F, 0x103F}, - {0x1040, 0x1049}, {0x104A, 0x104F}, {0x1050, 0x1055}, - {0x1056, 0x1057}, {0x1058, 0x1059}, {0x105A, 0x105D}, - {0x105E, 0x1060}, {0x1061, 0x1061}, {0x1062, 0x1064}, - {0x1065, 0x1066}, {0x1067, 0x106D}, {0x106E, 0x1070}, - {0x1071, 0x1074}, {0x1075, 0x1081}, {0x1082, 0x1082}, - {0x1083, 0x1084}, {0x1085, 0x1086}, {0x1087, 0x108C}, - {0x108D, 0x108D}, {0x108E, 0x108E}, {0x108F, 0x108F}, - {0x1090, 0x1099}, {0x109A, 0x109C}, {0x109D, 0x109D}, - {0x109E, 0x109F}, {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, - {0x10CD, 0x10CD}, {0x10D0, 0x10FA}, {0x10FB, 0x10FB}, - {0x10FC, 0x10FC}, {0x10FD, 0x10FF}, {0x1160, 0x11FF}, - {0x1200, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256}, - {0x1258, 0x1258}, {0x125A, 0x125D}, {0x1260, 0x1288}, - {0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5}, - {0x12B8, 0x12BE}, {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, - {0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315}, - {0x1318, 0x135A}, {0x135D, 0x135F}, {0x1360, 0x1368}, - {0x1369, 0x137C}, {0x1380, 0x138F}, {0x1390, 0x1399}, - {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1400, 0x1400}, - {0x1401, 0x166C}, {0x166D, 0x166E}, {0x166F, 0x167F}, - {0x1680, 0x1680}, {0x1681, 0x169A}, {0x169B, 0x169B}, - {0x169C, 0x169C}, {0x16A0, 0x16EA}, {0x16EB, 0x16ED}, - {0x16EE, 0x16F0}, {0x16F1, 0x16F8}, {0x1700, 0x170C}, - {0x170E, 0x1711}, {0x1712, 0x1714}, {0x1720, 0x1731}, - {0x1732, 0x1734}, {0x1735, 0x1736}, {0x1740, 0x1751}, - {0x1752, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770}, - {0x1772, 0x1773}, {0x1780, 0x17B3}, {0x17B4, 0x17B5}, - {0x17B6, 0x17B6}, {0x17B7, 0x17BD}, {0x17BE, 0x17C5}, - {0x17C6, 0x17C6}, {0x17C7, 0x17C8}, {0x17C9, 0x17D3}, - {0x17D4, 0x17D6}, {0x17D7, 0x17D7}, {0x17D8, 0x17DA}, - {0x17DB, 0x17DB}, {0x17DC, 0x17DC}, {0x17DD, 0x17DD}, - {0x17E0, 0x17E9}, {0x17F0, 0x17F9}, {0x1800, 0x1805}, - {0x1806, 0x1806}, {0x1807, 0x180A}, {0x180B, 0x180D}, - {0x180E, 0x180E}, {0x1810, 0x1819}, {0x1820, 0x1842}, - {0x1843, 0x1843}, {0x1844, 0x1877}, {0x1880, 0x1884}, - {0x1885, 0x1886}, {0x1887, 0x18A8}, {0x18A9, 0x18A9}, - {0x18AA, 0x18AA}, {0x18B0, 0x18F5}, {0x1900, 0x191E}, - {0x1920, 0x1922}, {0x1923, 0x1926}, {0x1927, 0x1928}, - {0x1929, 0x192B}, {0x1930, 0x1931}, {0x1932, 0x1932}, - {0x1933, 0x1938}, {0x1939, 0x193B}, {0x1940, 0x1940}, - {0x1944, 0x1945}, {0x1946, 0x194F}, {0x1950, 0x196D}, - {0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9}, - {0x19D0, 0x19D9}, {0x19DA, 0x19DA}, {0x19DE, 0x19DF}, - {0x19E0, 0x19FF}, {0x1A00, 0x1A16}, {0x1A17, 0x1A18}, - {0x1A19, 0x1A1A}, {0x1A1B, 0x1A1B}, {0x1A1E, 0x1A1F}, - {0x1A20, 0x1A54}, {0x1A55, 0x1A55}, {0x1A56, 0x1A56}, - {0x1A57, 0x1A57}, {0x1A58, 0x1A5E}, {0x1A60, 0x1A60}, - {0x1A61, 0x1A61}, {0x1A62, 0x1A62}, {0x1A63, 0x1A64}, - {0x1A65, 0x1A6C}, {0x1A6D, 0x1A72}, {0x1A73, 0x1A7C}, - {0x1A7F, 0x1A7F}, {0x1A80, 0x1A89}, {0x1A90, 0x1A99}, - {0x1AA0, 0x1AA6}, {0x1AA7, 0x1AA7}, {0x1AA8, 0x1AAD}, - {0x1AB0, 0x1ABD}, {0x1ABE, 0x1ABE}, {0x1B00, 0x1B03}, - {0x1B04, 0x1B04}, {0x1B05, 0x1B33}, {0x1B34, 0x1B34}, - {0x1B35, 0x1B35}, {0x1B36, 0x1B3A}, {0x1B3B, 0x1B3B}, - {0x1B3C, 0x1B3C}, {0x1B3D, 0x1B41}, {0x1B42, 0x1B42}, - {0x1B43, 0x1B44}, {0x1B45, 0x1B4B}, {0x1B50, 0x1B59}, - {0x1B5A, 0x1B60}, {0x1B61, 0x1B6A}, {0x1B6B, 0x1B73}, - {0x1B74, 0x1B7C}, {0x1B80, 0x1B81}, {0x1B82, 0x1B82}, - {0x1B83, 0x1BA0}, {0x1BA1, 0x1BA1}, {0x1BA2, 0x1BA5}, - {0x1BA6, 0x1BA7}, {0x1BA8, 0x1BA9}, {0x1BAA, 0x1BAA}, - {0x1BAB, 0x1BAD}, {0x1BAE, 0x1BAF}, {0x1BB0, 0x1BB9}, - {0x1BBA, 0x1BBF}, {0x1BC0, 0x1BE5}, {0x1BE6, 0x1BE6}, - {0x1BE7, 0x1BE7}, {0x1BE8, 0x1BE9}, {0x1BEA, 0x1BEC}, - {0x1BED, 0x1BED}, {0x1BEE, 0x1BEE}, {0x1BEF, 0x1BF1}, - {0x1BF2, 0x1BF3}, {0x1BFC, 0x1BFF}, {0x1C00, 0x1C23}, - {0x1C24, 0x1C2B}, {0x1C2C, 0x1C33}, {0x1C34, 0x1C35}, - {0x1C36, 0x1C37}, {0x1C3B, 0x1C3F}, {0x1C40, 0x1C49}, - {0x1C4D, 0x1C4F}, {0x1C50, 0x1C59}, {0x1C5A, 0x1C77}, - {0x1C78, 0x1C7D}, {0x1C7E, 0x1C7F}, {0x1C80, 0x1C88}, - {0x1CC0, 0x1CC7}, {0x1CD0, 0x1CD2}, {0x1CD3, 0x1CD3}, - {0x1CD4, 0x1CE0}, {0x1CE1, 0x1CE1}, {0x1CE2, 0x1CE8}, - {0x1CE9, 0x1CEC}, {0x1CED, 0x1CED}, {0x1CEE, 0x1CF1}, - {0x1CF2, 0x1CF3}, {0x1CF4, 0x1CF4}, {0x1CF5, 0x1CF6}, - {0x1CF8, 0x1CF9}, {0x1D00, 0x1D2B}, {0x1D2C, 0x1D6A}, - {0x1D6B, 0x1D77}, {0x1D78, 0x1D78}, {0x1D79, 0x1D7F}, - {0x1D80, 0x1D9A}, {0x1D9B, 0x1DBF}, {0x1DC0, 0x1DF5}, - {0x1DFB, 0x1DFF}, {0x1E00, 0x1EFF}, {0x1F00, 0x1F15}, + {0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD}, + {0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE3}, + {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, {0x0D01, 0x0D03}, + {0x0D05, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, + {0x0D3D, 0x0D44}, {0x0D46, 0x0D48}, {0x0D4A, 0x0D4F}, + {0x0D54, 0x0D63}, {0x0D66, 0x0D7F}, {0x0D82, 0x0D83}, + {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB}, + {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, {0x0DCA, 0x0DCA}, + {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, + {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF4}, {0x0E01, 0x0E3A}, + {0x0E3F, 0x0E5B}, {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, + {0x0E87, 0x0E88}, {0x0E8A, 0x0E8A}, {0x0E8D, 0x0E8D}, + {0x0E94, 0x0E97}, {0x0E99, 0x0E9F}, {0x0EA1, 0x0EA3}, + {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EA7}, {0x0EAA, 0x0EAB}, + {0x0EAD, 0x0EB9}, {0x0EBB, 0x0EBD}, {0x0EC0, 0x0EC4}, + {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9}, + {0x0EDC, 0x0EDF}, {0x0F00, 0x0F47}, {0x0F49, 0x0F6C}, + {0x0F71, 0x0F97}, {0x0F99, 0x0FBC}, {0x0FBE, 0x0FCC}, + {0x0FCE, 0x0FDA}, {0x1000, 0x10C5}, {0x10C7, 0x10C7}, + {0x10CD, 0x10CD}, {0x10D0, 0x10FF}, {0x1160, 0x1248}, + {0x124A, 0x124D}, {0x1250, 0x1256}, {0x1258, 0x1258}, + {0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D}, + {0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE}, + {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6}, + {0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A}, + {0x135D, 0x137C}, {0x1380, 0x1399}, {0x13A0, 0x13F5}, + {0x13F8, 0x13FD}, {0x1400, 0x169C}, {0x16A0, 0x16F8}, + {0x1700, 0x170C}, {0x170E, 0x1714}, {0x1720, 0x1736}, + {0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770}, + {0x1772, 0x1773}, {0x1780, 0x17DD}, {0x17E0, 0x17E9}, + {0x17F0, 0x17F9}, {0x1800, 0x180E}, {0x1810, 0x1819}, + {0x1820, 0x1877}, {0x1880, 0x18AA}, {0x18B0, 0x18F5}, + {0x1900, 0x191E}, {0x1920, 0x192B}, {0x1930, 0x193B}, + {0x1940, 0x1940}, {0x1944, 0x196D}, {0x1970, 0x1974}, + {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA}, + {0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E}, {0x1A60, 0x1A7C}, + {0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, {0x1AA0, 0x1AAD}, + {0x1AB0, 0x1ABE}, {0x1B00, 0x1B4B}, {0x1B50, 0x1B7C}, + {0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, {0x1C3B, 0x1C49}, + {0x1C4D, 0x1C88}, {0x1CC0, 0x1CC7}, {0x1CD0, 0x1CF6}, + {0x1CF8, 0x1CF9}, {0x1D00, 0x1DF5}, {0x1DFB, 0x1F15}, {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, - {0x1FB6, 0x1FBC}, {0x1FBD, 0x1FBD}, {0x1FBE, 0x1FBE}, - {0x1FBF, 0x1FC1}, {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FCC}, - {0x1FCD, 0x1FCF}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, - {0x1FDD, 0x1FDF}, {0x1FE0, 0x1FEC}, {0x1FED, 0x1FEF}, - {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, {0x1FFD, 0x1FFE}, - {0x2000, 0x200A}, {0x200B, 0x200F}, {0x2011, 0x2012}, - {0x2017, 0x2017}, {0x201A, 0x201A}, {0x201B, 0x201B}, - {0x201E, 0x201E}, {0x201F, 0x201F}, {0x2023, 0x2023}, - {0x2028, 0x2028}, {0x2029, 0x2029}, {0x202A, 0x202E}, - {0x202F, 0x202F}, {0x2031, 0x2031}, {0x2034, 0x2034}, - {0x2036, 0x2038}, {0x2039, 0x2039}, {0x203A, 0x203A}, - {0x203C, 0x203D}, {0x203F, 0x2040}, {0x2041, 0x2043}, - {0x2044, 0x2044}, {0x2045, 0x2045}, {0x2046, 0x2046}, - {0x2047, 0x2051}, {0x2052, 0x2052}, {0x2053, 0x2053}, - {0x2054, 0x2054}, {0x2055, 0x205E}, {0x205F, 0x205F}, - {0x2060, 0x2064}, {0x2066, 0x206F}, {0x2070, 0x2070}, - {0x2071, 0x2071}, {0x2075, 0x2079}, {0x207A, 0x207C}, - {0x207D, 0x207D}, {0x207E, 0x207E}, {0x2080, 0x2080}, - {0x2085, 0x2089}, {0x208A, 0x208C}, {0x208D, 0x208D}, - {0x208E, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8}, - {0x20AA, 0x20AB}, {0x20AD, 0x20BE}, {0x20D0, 0x20DC}, - {0x20DD, 0x20E0}, {0x20E1, 0x20E1}, {0x20E2, 0x20E4}, - {0x20E5, 0x20F0}, {0x2100, 0x2101}, {0x2102, 0x2102}, - {0x2104, 0x2104}, {0x2106, 0x2106}, {0x2107, 0x2107}, - {0x2108, 0x2108}, {0x210A, 0x2112}, {0x2114, 0x2114}, - {0x2115, 0x2115}, {0x2117, 0x2117}, {0x2118, 0x2118}, - {0x2119, 0x211D}, {0x211E, 0x2120}, {0x2123, 0x2123}, - {0x2124, 0x2124}, {0x2125, 0x2125}, {0x2127, 0x2127}, - {0x2128, 0x2128}, {0x2129, 0x2129}, {0x212A, 0x212A}, - {0x212C, 0x212D}, {0x212E, 0x212E}, {0x212F, 0x2134}, - {0x2135, 0x2138}, {0x2139, 0x2139}, {0x213A, 0x213B}, - {0x213C, 0x213F}, {0x2140, 0x2144}, {0x2145, 0x2149}, - {0x214A, 0x214A}, {0x214B, 0x214B}, {0x214C, 0x214D}, - {0x214E, 0x214E}, {0x214F, 0x214F}, {0x2150, 0x2152}, + {0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3}, {0x1FD6, 0x1FDB}, + {0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFE}, + {0x2000, 0x200F}, {0x2011, 0x2012}, {0x2017, 0x2017}, + {0x201A, 0x201B}, {0x201E, 0x201F}, {0x2023, 0x2023}, + {0x2028, 0x202F}, {0x2031, 0x2031}, {0x2034, 0x2034}, + {0x2036, 0x203A}, {0x203C, 0x203D}, {0x203F, 0x2064}, + {0x2066, 0x2071}, {0x2075, 0x207E}, {0x2080, 0x2080}, + {0x2085, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8}, + {0x20AA, 0x20AB}, {0x20AD, 0x20BE}, {0x20D0, 0x20F0}, + {0x2100, 0x2102}, {0x2104, 0x2104}, {0x2106, 0x2108}, + {0x210A, 0x2112}, {0x2114, 0x2115}, {0x2117, 0x2120}, + {0x2123, 0x2125}, {0x2127, 0x212A}, {0x212C, 0x2152}, {0x2155, 0x215A}, {0x215F, 0x215F}, {0x216C, 0x216F}, - {0x217A, 0x2182}, {0x2183, 0x2184}, {0x2185, 0x2188}, - {0x218A, 0x218B}, {0x219A, 0x219B}, {0x219C, 0x219F}, - {0x21A0, 0x21A0}, {0x21A1, 0x21A2}, {0x21A3, 0x21A3}, - {0x21A4, 0x21A5}, {0x21A6, 0x21A6}, {0x21A7, 0x21AD}, - {0x21AE, 0x21AE}, {0x21AF, 0x21B7}, {0x21BA, 0x21CD}, - {0x21CE, 0x21CF}, {0x21D0, 0x21D1}, {0x21D3, 0x21D3}, - {0x21D5, 0x21E6}, {0x21E8, 0x21F3}, {0x21F4, 0x21FF}, - {0x2201, 0x2201}, {0x2204, 0x2206}, {0x2209, 0x220A}, - {0x220C, 0x220E}, {0x2210, 0x2210}, {0x2212, 0x2214}, - {0x2216, 0x2219}, {0x221B, 0x221C}, {0x2221, 0x2222}, - {0x2224, 0x2224}, {0x2226, 0x2226}, {0x222D, 0x222D}, - {0x222F, 0x2233}, {0x2238, 0x223B}, {0x223E, 0x2247}, - {0x2249, 0x224B}, {0x224D, 0x2251}, {0x2253, 0x225F}, - {0x2262, 0x2263}, {0x2268, 0x2269}, {0x226C, 0x226D}, - {0x2270, 0x2281}, {0x2284, 0x2285}, {0x2288, 0x2294}, - {0x2296, 0x2298}, {0x229A, 0x22A4}, {0x22A6, 0x22BE}, - {0x22C0, 0x22FF}, {0x2300, 0x2307}, {0x2308, 0x2308}, - {0x2309, 0x2309}, {0x230A, 0x230A}, {0x230B, 0x230B}, - {0x230C, 0x2311}, {0x2313, 0x2319}, {0x231C, 0x231F}, - {0x2320, 0x2321}, {0x2322, 0x2328}, {0x232B, 0x237B}, - {0x237C, 0x237C}, {0x237D, 0x239A}, {0x239B, 0x23B3}, - {0x23B4, 0x23DB}, {0x23DC, 0x23E1}, {0x23E2, 0x23E8}, - {0x23ED, 0x23EF}, {0x23F1, 0x23F2}, {0x23F4, 0x23FE}, - {0x2400, 0x2426}, {0x2440, 0x244A}, {0x24EA, 0x24EA}, - {0x254C, 0x254F}, {0x2574, 0x257F}, {0x2590, 0x2591}, - {0x2596, 0x259F}, {0x25A2, 0x25A2}, {0x25AA, 0x25B1}, - {0x25B4, 0x25B5}, {0x25B8, 0x25BB}, {0x25BE, 0x25BF}, - {0x25C2, 0x25C5}, {0x25C9, 0x25CA}, {0x25CC, 0x25CD}, - {0x25D2, 0x25E1}, {0x25E6, 0x25EE}, {0x25F0, 0x25F7}, - {0x25F8, 0x25FC}, {0x25FF, 0x25FF}, {0x2600, 0x2604}, + {0x217A, 0x2188}, {0x218A, 0x218B}, {0x219A, 0x21B7}, + {0x21BA, 0x21D1}, {0x21D3, 0x21D3}, {0x21D5, 0x21E6}, + {0x21E8, 0x21FF}, {0x2201, 0x2201}, {0x2204, 0x2206}, + {0x2209, 0x220A}, {0x220C, 0x220E}, {0x2210, 0x2210}, + {0x2212, 0x2214}, {0x2216, 0x2219}, {0x221B, 0x221C}, + {0x2221, 0x2222}, {0x2224, 0x2224}, {0x2226, 0x2226}, + {0x222D, 0x222D}, {0x222F, 0x2233}, {0x2238, 0x223B}, + {0x223E, 0x2247}, {0x2249, 0x224B}, {0x224D, 0x2251}, + {0x2253, 0x225F}, {0x2262, 0x2263}, {0x2268, 0x2269}, + {0x226C, 0x226D}, {0x2270, 0x2281}, {0x2284, 0x2285}, + {0x2288, 0x2294}, {0x2296, 0x2298}, {0x229A, 0x22A4}, + {0x22A6, 0x22BE}, {0x22C0, 0x2311}, {0x2313, 0x2319}, + {0x231C, 0x2328}, {0x232B, 0x23E8}, {0x23ED, 0x23EF}, + {0x23F1, 0x23F2}, {0x23F4, 0x23FE}, {0x2400, 0x2426}, + {0x2440, 0x244A}, {0x24EA, 0x24EA}, {0x254C, 0x254F}, + {0x2574, 0x257F}, {0x2590, 0x2591}, {0x2596, 0x259F}, + {0x25A2, 0x25A2}, {0x25AA, 0x25B1}, {0x25B4, 0x25B5}, + {0x25B8, 0x25BB}, {0x25BE, 0x25BF}, {0x25C2, 0x25C5}, + {0x25C9, 0x25CA}, {0x25CC, 0x25CD}, {0x25D2, 0x25E1}, + {0x25E6, 0x25EE}, {0x25F0, 0x25FC}, {0x25FF, 0x2604}, {0x2607, 0x2608}, {0x260A, 0x260D}, {0x2610, 0x2613}, {0x2616, 0x261B}, {0x261D, 0x261D}, {0x261F, 0x263F}, {0x2641, 0x2641}, {0x2643, 0x2647}, {0x2654, 0x265F}, @@ -811,256 +684,98 @@ {0x26E4, 0x26E7}, {0x2700, 0x2704}, {0x2706, 0x2709}, {0x270C, 0x2727}, {0x2729, 0x273C}, {0x273E, 0x274B}, {0x274D, 0x274D}, {0x274F, 0x2752}, {0x2756, 0x2756}, - {0x2758, 0x2767}, {0x2768, 0x2768}, {0x2769, 0x2769}, - {0x276A, 0x276A}, {0x276B, 0x276B}, {0x276C, 0x276C}, - {0x276D, 0x276D}, {0x276E, 0x276E}, {0x276F, 0x276F}, - {0x2770, 0x2770}, {0x2771, 0x2771}, {0x2772, 0x2772}, - {0x2773, 0x2773}, {0x2774, 0x2774}, {0x2775, 0x2775}, - {0x2780, 0x2793}, {0x2794, 0x2794}, {0x2798, 0x27AF}, - {0x27B1, 0x27BE}, {0x27C0, 0x27C4}, {0x27C5, 0x27C5}, - {0x27C6, 0x27C6}, {0x27C7, 0x27E5}, {0x27EE, 0x27EE}, - {0x27EF, 0x27EF}, {0x27F0, 0x27FF}, {0x2800, 0x28FF}, - {0x2900, 0x297F}, {0x2980, 0x2982}, {0x2983, 0x2983}, - {0x2984, 0x2984}, {0x2987, 0x2987}, {0x2988, 0x2988}, - {0x2989, 0x2989}, {0x298A, 0x298A}, {0x298B, 0x298B}, - {0x298C, 0x298C}, {0x298D, 0x298D}, {0x298E, 0x298E}, - {0x298F, 0x298F}, {0x2990, 0x2990}, {0x2991, 0x2991}, - {0x2992, 0x2992}, {0x2993, 0x2993}, {0x2994, 0x2994}, - {0x2995, 0x2995}, {0x2996, 0x2996}, {0x2997, 0x2997}, - {0x2998, 0x2998}, {0x2999, 0x29D7}, {0x29D8, 0x29D8}, - {0x29D9, 0x29D9}, {0x29DA, 0x29DA}, {0x29DB, 0x29DB}, - {0x29DC, 0x29FB}, {0x29FC, 0x29FC}, {0x29FD, 0x29FD}, - {0x29FE, 0x29FF}, {0x2A00, 0x2AFF}, {0x2B00, 0x2B1A}, - {0x2B1D, 0x2B2F}, {0x2B30, 0x2B44}, {0x2B45, 0x2B46}, - {0x2B47, 0x2B4C}, {0x2B4D, 0x2B4F}, {0x2B51, 0x2B54}, + {0x2758, 0x2775}, {0x2780, 0x2794}, {0x2798, 0x27AF}, + {0x27B1, 0x27BE}, {0x27C0, 0x27E5}, {0x27EE, 0x2984}, + {0x2987, 0x2B1A}, {0x2B1D, 0x2B4F}, {0x2B51, 0x2B54}, {0x2B5A, 0x2B73}, {0x2B76, 0x2B95}, {0x2B98, 0x2BB9}, {0x2BBD, 0x2BC8}, {0x2BCA, 0x2BD1}, {0x2BEC, 0x2BEF}, - {0x2C00, 0x2C2E}, {0x2C30, 0x2C5E}, {0x2C60, 0x2C7B}, - {0x2C7C, 0x2C7D}, {0x2C7E, 0x2C7F}, {0x2C80, 0x2CE4}, - {0x2CE5, 0x2CEA}, {0x2CEB, 0x2CEE}, {0x2CEF, 0x2CF1}, - {0x2CF2, 0x2CF3}, {0x2CF9, 0x2CFC}, {0x2CFD, 0x2CFD}, - {0x2CFE, 0x2CFF}, {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, - {0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D6F}, - {0x2D70, 0x2D70}, {0x2D7F, 0x2D7F}, {0x2D80, 0x2D96}, + {0x2C00, 0x2C2E}, {0x2C30, 0x2C5E}, {0x2C60, 0x2CF3}, + {0x2CF9, 0x2D25}, {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, + {0x2D30, 0x2D67}, {0x2D6F, 0x2D70}, {0x2D7F, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, - {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2DFF}, - {0x2E00, 0x2E01}, {0x2E02, 0x2E02}, {0x2E03, 0x2E03}, - {0x2E04, 0x2E04}, {0x2E05, 0x2E05}, {0x2E06, 0x2E08}, - {0x2E09, 0x2E09}, {0x2E0A, 0x2E0A}, {0x2E0B, 0x2E0B}, - {0x2E0C, 0x2E0C}, {0x2E0D, 0x2E0D}, {0x2E0E, 0x2E16}, - {0x2E17, 0x2E17}, {0x2E18, 0x2E19}, {0x2E1A, 0x2E1A}, - {0x2E1B, 0x2E1B}, {0x2E1C, 0x2E1C}, {0x2E1D, 0x2E1D}, - {0x2E1E, 0x2E1F}, {0x2E20, 0x2E20}, {0x2E21, 0x2E21}, - {0x2E22, 0x2E22}, {0x2E23, 0x2E23}, {0x2E24, 0x2E24}, - {0x2E25, 0x2E25}, {0x2E26, 0x2E26}, {0x2E27, 0x2E27}, - {0x2E28, 0x2E28}, {0x2E29, 0x2E29}, {0x2E2A, 0x2E2E}, - {0x2E2F, 0x2E2F}, {0x2E30, 0x2E39}, {0x2E3A, 0x2E3B}, - {0x2E3C, 0x2E3F}, {0x2E40, 0x2E40}, {0x2E41, 0x2E41}, - {0x2E42, 0x2E42}, {0x2E43, 0x2E44}, {0x303F, 0x303F}, - {0x4DC0, 0x4DFF}, {0xA4D0, 0xA4F7}, {0xA4F8, 0xA4FD}, - {0xA4FE, 0xA4FF}, {0xA500, 0xA60B}, {0xA60C, 0xA60C}, - {0xA60D, 0xA60F}, {0xA610, 0xA61F}, {0xA620, 0xA629}, - {0xA62A, 0xA62B}, {0xA640, 0xA66D}, {0xA66E, 0xA66E}, - {0xA66F, 0xA66F}, {0xA670, 0xA672}, {0xA673, 0xA673}, - {0xA674, 0xA67D}, {0xA67E, 0xA67E}, {0xA67F, 0xA67F}, - {0xA680, 0xA69B}, {0xA69C, 0xA69D}, {0xA69E, 0xA69F}, - {0xA6A0, 0xA6E5}, {0xA6E6, 0xA6EF}, {0xA6F0, 0xA6F1}, - {0xA6F2, 0xA6F7}, {0xA700, 0xA716}, {0xA717, 0xA71F}, - {0xA720, 0xA721}, {0xA722, 0xA76F}, {0xA770, 0xA770}, - {0xA771, 0xA787}, {0xA788, 0xA788}, {0xA789, 0xA78A}, - {0xA78B, 0xA78E}, {0xA78F, 0xA78F}, {0xA790, 0xA7AE}, - {0xA7B0, 0xA7B7}, {0xA7F7, 0xA7F7}, {0xA7F8, 0xA7F9}, - {0xA7FA, 0xA7FA}, {0xA7FB, 0xA7FF}, {0xA800, 0xA801}, - {0xA802, 0xA802}, {0xA803, 0xA805}, {0xA806, 0xA806}, - {0xA807, 0xA80A}, {0xA80B, 0xA80B}, {0xA80C, 0xA822}, - {0xA823, 0xA824}, {0xA825, 0xA826}, {0xA827, 0xA827}, - {0xA828, 0xA82B}, {0xA830, 0xA835}, {0xA836, 0xA837}, - {0xA838, 0xA838}, {0xA839, 0xA839}, {0xA840, 0xA873}, - {0xA874, 0xA877}, {0xA880, 0xA881}, {0xA882, 0xA8B3}, - {0xA8B4, 0xA8C3}, {0xA8C4, 0xA8C5}, {0xA8CE, 0xA8CF}, - {0xA8D0, 0xA8D9}, {0xA8E0, 0xA8F1}, {0xA8F2, 0xA8F7}, - {0xA8F8, 0xA8FA}, {0xA8FB, 0xA8FB}, {0xA8FC, 0xA8FC}, - {0xA8FD, 0xA8FD}, {0xA900, 0xA909}, {0xA90A, 0xA925}, - {0xA926, 0xA92D}, {0xA92E, 0xA92F}, {0xA930, 0xA946}, - {0xA947, 0xA951}, {0xA952, 0xA953}, {0xA95F, 0xA95F}, - {0xA980, 0xA982}, {0xA983, 0xA983}, {0xA984, 0xA9B2}, - {0xA9B3, 0xA9B3}, {0xA9B4, 0xA9B5}, {0xA9B6, 0xA9B9}, - {0xA9BA, 0xA9BB}, {0xA9BC, 0xA9BC}, {0xA9BD, 0xA9C0}, - {0xA9C1, 0xA9CD}, {0xA9CF, 0xA9CF}, {0xA9D0, 0xA9D9}, - {0xA9DE, 0xA9DF}, {0xA9E0, 0xA9E4}, {0xA9E5, 0xA9E5}, - {0xA9E6, 0xA9E6}, {0xA9E7, 0xA9EF}, {0xA9F0, 0xA9F9}, - {0xA9FA, 0xA9FE}, {0xAA00, 0xAA28}, {0xAA29, 0xAA2E}, - {0xAA2F, 0xAA30}, {0xAA31, 0xAA32}, {0xAA33, 0xAA34}, - {0xAA35, 0xAA36}, {0xAA40, 0xAA42}, {0xAA43, 0xAA43}, - {0xAA44, 0xAA4B}, {0xAA4C, 0xAA4C}, {0xAA4D, 0xAA4D}, - {0xAA50, 0xAA59}, {0xAA5C, 0xAA5F}, {0xAA60, 0xAA6F}, - {0xAA70, 0xAA70}, {0xAA71, 0xAA76}, {0xAA77, 0xAA79}, - {0xAA7A, 0xAA7A}, {0xAA7B, 0xAA7B}, {0xAA7C, 0xAA7C}, - {0xAA7D, 0xAA7D}, {0xAA7E, 0xAA7F}, {0xAA80, 0xAAAF}, - {0xAAB0, 0xAAB0}, {0xAAB1, 0xAAB1}, {0xAAB2, 0xAAB4}, - {0xAAB5, 0xAAB6}, {0xAAB7, 0xAAB8}, {0xAAB9, 0xAABD}, - {0xAABE, 0xAABF}, {0xAAC0, 0xAAC0}, {0xAAC1, 0xAAC1}, - {0xAAC2, 0xAAC2}, {0xAADB, 0xAADC}, {0xAADD, 0xAADD}, - {0xAADE, 0xAADF}, {0xAAE0, 0xAAEA}, {0xAAEB, 0xAAEB}, - {0xAAEC, 0xAAED}, {0xAAEE, 0xAAEF}, {0xAAF0, 0xAAF1}, - {0xAAF2, 0xAAF2}, {0xAAF3, 0xAAF4}, {0xAAF5, 0xAAF5}, - {0xAAF6, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, + {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2E44}, + {0x303F, 0x303F}, {0x4DC0, 0x4DFF}, {0xA4D0, 0xA62B}, + {0xA640, 0xA6F7}, {0xA700, 0xA7AE}, {0xA7B0, 0xA7B7}, + {0xA7F7, 0xA82B}, {0xA830, 0xA839}, {0xA840, 0xA877}, + {0xA880, 0xA8C5}, {0xA8CE, 0xA8D9}, {0xA8E0, 0xA8FD}, + {0xA900, 0xA953}, {0xA95F, 0xA95F}, {0xA980, 0xA9CD}, + {0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE}, {0xAA00, 0xAA36}, + {0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, {0xAA5C, 0xAAC2}, + {0xAADB, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, - {0xAB30, 0xAB5A}, {0xAB5B, 0xAB5B}, {0xAB5C, 0xAB5F}, - {0xAB60, 0xAB65}, {0xAB70, 0xABBF}, {0xABC0, 0xABE2}, - {0xABE3, 0xABE4}, {0xABE5, 0xABE5}, {0xABE6, 0xABE7}, - {0xABE8, 0xABE8}, {0xABE9, 0xABEA}, {0xABEB, 0xABEB}, - {0xABEC, 0xABEC}, {0xABED, 0xABED}, {0xABF0, 0xABF9}, - {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDB7F}, - {0xDB80, 0xDBFF}, {0xDC00, 0xDFFF}, {0xFB00, 0xFB06}, - {0xFB13, 0xFB17}, {0xFB1D, 0xFB1D}, {0xFB1E, 0xFB1E}, - {0xFB1F, 0xFB28}, {0xFB29, 0xFB29}, {0xFB2A, 0xFB36}, + {0xAB30, 0xAB65}, {0xAB70, 0xABED}, {0xABF0, 0xABF9}, + {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDFFF}, + {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFB1D, 0xFB36}, {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, - {0xFB43, 0xFB44}, {0xFB46, 0xFB4F}, {0xFB50, 0xFBB1}, - {0xFBB2, 0xFBC1}, {0xFBD3, 0xFD3D}, {0xFD3E, 0xFD3E}, - {0xFD3F, 0xFD3F}, {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, - {0xFDF0, 0xFDFB}, {0xFDFC, 0xFDFC}, {0xFDFD, 0xFDFD}, + {0xFB43, 0xFB44}, {0xFB46, 0xFBC1}, {0xFBD3, 0xFD3F}, + {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFD}, {0xFE20, 0xFE2F}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, - {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFC, 0xFFFC}, - {0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A}, - {0x1003C, 0x1003D}, {0x1003F, 0x1004D}, {0x10050, 0x1005D}, - {0x10080, 0x100FA}, {0x10100, 0x10102}, {0x10107, 0x10133}, - {0x10137, 0x1013F}, {0x10140, 0x10174}, {0x10175, 0x10178}, - {0x10179, 0x10189}, {0x1018A, 0x1018B}, {0x1018C, 0x1018E}, - {0x10190, 0x1019B}, {0x101A0, 0x101A0}, {0x101D0, 0x101FC}, - {0x101FD, 0x101FD}, {0x10280, 0x1029C}, {0x102A0, 0x102D0}, - {0x102E0, 0x102E0}, {0x102E1, 0x102FB}, {0x10300, 0x1031F}, - {0x10320, 0x10323}, {0x10330, 0x10340}, {0x10341, 0x10341}, - {0x10342, 0x10349}, {0x1034A, 0x1034A}, {0x10350, 0x10375}, - {0x10376, 0x1037A}, {0x10380, 0x1039D}, {0x1039F, 0x1039F}, - {0x103A0, 0x103C3}, {0x103C8, 0x103CF}, {0x103D0, 0x103D0}, - {0x103D1, 0x103D5}, {0x10400, 0x1044F}, {0x10450, 0x1047F}, - {0x10480, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3}, + {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFC}, {0x10000, 0x1000B}, + {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D}, + {0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA}, + {0x10100, 0x10102}, {0x10107, 0x10133}, {0x10137, 0x1018E}, + {0x10190, 0x1019B}, {0x101A0, 0x101A0}, {0x101D0, 0x101FD}, + {0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x102E0, 0x102FB}, + {0x10300, 0x10323}, {0x10330, 0x1034A}, {0x10350, 0x1037A}, + {0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5}, + {0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3}, {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563}, {0x1056F, 0x1056F}, {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C}, - {0x1083F, 0x1083F}, {0x10840, 0x10855}, {0x10857, 0x10857}, - {0x10858, 0x1085F}, {0x10860, 0x10876}, {0x10877, 0x10878}, - {0x10879, 0x1087F}, {0x10880, 0x1089E}, {0x108A7, 0x108AF}, - {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x108FF}, - {0x10900, 0x10915}, {0x10916, 0x1091B}, {0x1091F, 0x1091F}, - {0x10920, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x1099F}, - {0x109A0, 0x109B7}, {0x109BC, 0x109BD}, {0x109BE, 0x109BF}, - {0x109C0, 0x109CF}, {0x109D2, 0x109FF}, {0x10A00, 0x10A00}, - {0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, - {0x10A10, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A33}, - {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x10A40, 0x10A47}, - {0x10A50, 0x10A58}, {0x10A60, 0x10A7C}, {0x10A7D, 0x10A7E}, - {0x10A7F, 0x10A7F}, {0x10A80, 0x10A9C}, {0x10A9D, 0x10A9F}, - {0x10AC0, 0x10AC7}, {0x10AC8, 0x10AC8}, {0x10AC9, 0x10AE4}, - {0x10AE5, 0x10AE6}, {0x10AEB, 0x10AEF}, {0x10AF0, 0x10AF6}, - {0x10B00, 0x10B35}, {0x10B39, 0x10B3F}, {0x10B40, 0x10B55}, - {0x10B58, 0x10B5F}, {0x10B60, 0x10B72}, {0x10B78, 0x10B7F}, - {0x10B80, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF}, + {0x1083F, 0x10855}, {0x10857, 0x1089E}, {0x108A7, 0x108AF}, + {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x1091B}, + {0x1091F, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x109B7}, + {0x109BC, 0x109CF}, {0x109D2, 0x10A03}, {0x10A05, 0x10A06}, + {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A33}, + {0x10A38, 0x10A3A}, {0x10A3F, 0x10A47}, {0x10A50, 0x10A58}, + {0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6}, {0x10AEB, 0x10AF6}, + {0x10B00, 0x10B35}, {0x10B39, 0x10B55}, {0x10B58, 0x10B72}, + {0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF}, {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, - {0x10CFA, 0x10CFF}, {0x10E60, 0x10E7E}, {0x11000, 0x11000}, - {0x11001, 0x11001}, {0x11002, 0x11002}, {0x11003, 0x11037}, - {0x11038, 0x11046}, {0x11047, 0x1104D}, {0x11052, 0x11065}, - {0x11066, 0x1106F}, {0x1107F, 0x1107F}, {0x11080, 0x11081}, - {0x11082, 0x11082}, {0x11083, 0x110AF}, {0x110B0, 0x110B2}, - {0x110B3, 0x110B6}, {0x110B7, 0x110B8}, {0x110B9, 0x110BA}, - {0x110BB, 0x110BC}, {0x110BD, 0x110BD}, {0x110BE, 0x110C1}, - {0x110D0, 0x110E8}, {0x110F0, 0x110F9}, {0x11100, 0x11102}, - {0x11103, 0x11126}, {0x11127, 0x1112B}, {0x1112C, 0x1112C}, - {0x1112D, 0x11134}, {0x11136, 0x1113F}, {0x11140, 0x11143}, - {0x11150, 0x11172}, {0x11173, 0x11173}, {0x11174, 0x11175}, - {0x11176, 0x11176}, {0x11180, 0x11181}, {0x11182, 0x11182}, - {0x11183, 0x111B2}, {0x111B3, 0x111B5}, {0x111B6, 0x111BE}, - {0x111BF, 0x111C0}, {0x111C1, 0x111C4}, {0x111C5, 0x111C9}, - {0x111CA, 0x111CC}, {0x111CD, 0x111CD}, {0x111D0, 0x111D9}, - {0x111DA, 0x111DA}, {0x111DB, 0x111DB}, {0x111DC, 0x111DC}, - {0x111DD, 0x111DF}, {0x111E1, 0x111F4}, {0x11200, 0x11211}, - {0x11213, 0x1122B}, {0x1122C, 0x1122E}, {0x1122F, 0x11231}, - {0x11232, 0x11233}, {0x11234, 0x11234}, {0x11235, 0x11235}, - {0x11236, 0x11237}, {0x11238, 0x1123D}, {0x1123E, 0x1123E}, + {0x10CFA, 0x10CFF}, {0x10E60, 0x10E7E}, {0x11000, 0x1104D}, + {0x11052, 0x1106F}, {0x1107F, 0x110C1}, {0x110D0, 0x110E8}, + {0x110F0, 0x110F9}, {0x11100, 0x11134}, {0x11136, 0x11143}, + {0x11150, 0x11176}, {0x11180, 0x111CD}, {0x111D0, 0x111DF}, + {0x111E1, 0x111F4}, {0x11200, 0x11211}, {0x11213, 0x1123E}, {0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128A, 0x1128D}, - {0x1128F, 0x1129D}, {0x1129F, 0x112A8}, {0x112A9, 0x112A9}, - {0x112B0, 0x112DE}, {0x112DF, 0x112DF}, {0x112E0, 0x112E2}, - {0x112E3, 0x112EA}, {0x112F0, 0x112F9}, {0x11300, 0x11301}, - {0x11302, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310}, - {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333}, - {0x11335, 0x11339}, {0x1133C, 0x1133C}, {0x1133D, 0x1133D}, - {0x1133E, 0x1133F}, {0x11340, 0x11340}, {0x11341, 0x11344}, + {0x1128F, 0x1129D}, {0x1129F, 0x112A9}, {0x112B0, 0x112EA}, + {0x112F0, 0x112F9}, {0x11300, 0x11303}, {0x11305, 0x1130C}, + {0x1130F, 0x11310}, {0x11313, 0x11328}, {0x1132A, 0x11330}, + {0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133C, 0x11344}, {0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11350, 0x11350}, - {0x11357, 0x11357}, {0x1135D, 0x11361}, {0x11362, 0x11363}, - {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11400, 0x11434}, - {0x11435, 0x11437}, {0x11438, 0x1143F}, {0x11440, 0x11441}, - {0x11442, 0x11444}, {0x11445, 0x11445}, {0x11446, 0x11446}, - {0x11447, 0x1144A}, {0x1144B, 0x1144F}, {0x11450, 0x11459}, - {0x1145B, 0x1145B}, {0x1145D, 0x1145D}, {0x11480, 0x114AF}, - {0x114B0, 0x114B2}, {0x114B3, 0x114B8}, {0x114B9, 0x114B9}, - {0x114BA, 0x114BA}, {0x114BB, 0x114BE}, {0x114BF, 0x114C0}, - {0x114C1, 0x114C1}, {0x114C2, 0x114C3}, {0x114C4, 0x114C5}, - {0x114C6, 0x114C6}, {0x114C7, 0x114C7}, {0x114D0, 0x114D9}, - {0x11580, 0x115AE}, {0x115AF, 0x115B1}, {0x115B2, 0x115B5}, - {0x115B8, 0x115BB}, {0x115BC, 0x115BD}, {0x115BE, 0x115BE}, - {0x115BF, 0x115C0}, {0x115C1, 0x115D7}, {0x115D8, 0x115DB}, - {0x115DC, 0x115DD}, {0x11600, 0x1162F}, {0x11630, 0x11632}, - {0x11633, 0x1163A}, {0x1163B, 0x1163C}, {0x1163D, 0x1163D}, - {0x1163E, 0x1163E}, {0x1163F, 0x11640}, {0x11641, 0x11643}, - {0x11644, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C}, - {0x11680, 0x116AA}, {0x116AB, 0x116AB}, {0x116AC, 0x116AC}, - {0x116AD, 0x116AD}, {0x116AE, 0x116AF}, {0x116B0, 0x116B5}, - {0x116B6, 0x116B6}, {0x116B7, 0x116B7}, {0x116C0, 0x116C9}, - {0x11700, 0x11719}, {0x1171D, 0x1171F}, {0x11720, 0x11721}, - {0x11722, 0x11725}, {0x11726, 0x11726}, {0x11727, 0x1172B}, - {0x11730, 0x11739}, {0x1173A, 0x1173B}, {0x1173C, 0x1173E}, - {0x1173F, 0x1173F}, {0x118A0, 0x118DF}, {0x118E0, 0x118E9}, - {0x118EA, 0x118F2}, {0x118FF, 0x118FF}, {0x11AC0, 0x11AF8}, - {0x11C00, 0x11C08}, {0x11C0A, 0x11C2E}, {0x11C2F, 0x11C2F}, - {0x11C30, 0x11C36}, {0x11C38, 0x11C3D}, {0x11C3E, 0x11C3E}, - {0x11C3F, 0x11C3F}, {0x11C40, 0x11C40}, {0x11C41, 0x11C45}, - {0x11C50, 0x11C59}, {0x11C5A, 0x11C6C}, {0x11C70, 0x11C71}, - {0x11C72, 0x11C8F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CA9}, - {0x11CAA, 0x11CB0}, {0x11CB1, 0x11CB1}, {0x11CB2, 0x11CB3}, - {0x11CB4, 0x11CB4}, {0x11CB5, 0x11CB6}, {0x12000, 0x12399}, + {0x11357, 0x11357}, {0x1135D, 0x11363}, {0x11366, 0x1136C}, + {0x11370, 0x11374}, {0x11400, 0x11459}, {0x1145B, 0x1145B}, + {0x1145D, 0x1145D}, {0x11480, 0x114C7}, {0x114D0, 0x114D9}, + {0x11580, 0x115B5}, {0x115B8, 0x115DD}, {0x11600, 0x11644}, + {0x11650, 0x11659}, {0x11660, 0x1166C}, {0x11680, 0x116B7}, + {0x116C0, 0x116C9}, {0x11700, 0x11719}, {0x1171D, 0x1172B}, + {0x11730, 0x1173F}, {0x118A0, 0x118F2}, {0x118FF, 0x118FF}, + {0x11AC0, 0x11AF8}, {0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, + {0x11C38, 0x11C45}, {0x11C50, 0x11C6C}, {0x11C70, 0x11C8F}, + {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6}, {0x12000, 0x12399}, {0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543}, {0x13000, 0x1342E}, {0x14400, 0x14646}, {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, {0x16A6E, 0x16A6F}, - {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF4}, {0x16AF5, 0x16AF5}, - {0x16B00, 0x16B2F}, {0x16B30, 0x16B36}, {0x16B37, 0x16B3B}, - {0x16B3C, 0x16B3F}, {0x16B40, 0x16B43}, {0x16B44, 0x16B44}, - {0x16B45, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61}, - {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16F00, 0x16F44}, - {0x16F50, 0x16F50}, {0x16F51, 0x16F7E}, {0x16F8F, 0x16F92}, - {0x16F93, 0x16F9F}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, - {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BC9C}, - {0x1BC9D, 0x1BC9E}, {0x1BC9F, 0x1BC9F}, {0x1BCA0, 0x1BCA3}, - {0x1D000, 0x1D0F5}, {0x1D100, 0x1D126}, {0x1D129, 0x1D164}, - {0x1D165, 0x1D166}, {0x1D167, 0x1D169}, {0x1D16A, 0x1D16C}, - {0x1D16D, 0x1D172}, {0x1D173, 0x1D17A}, {0x1D17B, 0x1D182}, - {0x1D183, 0x1D184}, {0x1D185, 0x1D18B}, {0x1D18C, 0x1D1A9}, - {0x1D1AA, 0x1D1AD}, {0x1D1AE, 0x1D1E8}, {0x1D200, 0x1D241}, - {0x1D242, 0x1D244}, {0x1D245, 0x1D245}, {0x1D300, 0x1D356}, - {0x1D360, 0x1D371}, {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, - {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, - {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, - {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, - {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, - {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, - {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D6C0}, - {0x1D6C1, 0x1D6C1}, {0x1D6C2, 0x1D6DA}, {0x1D6DB, 0x1D6DB}, - {0x1D6DC, 0x1D6FA}, {0x1D6FB, 0x1D6FB}, {0x1D6FC, 0x1D714}, - {0x1D715, 0x1D715}, {0x1D716, 0x1D734}, {0x1D735, 0x1D735}, - {0x1D736, 0x1D74E}, {0x1D74F, 0x1D74F}, {0x1D750, 0x1D76E}, - {0x1D76F, 0x1D76F}, {0x1D770, 0x1D788}, {0x1D789, 0x1D789}, - {0x1D78A, 0x1D7A8}, {0x1D7A9, 0x1D7A9}, {0x1D7AA, 0x1D7C2}, - {0x1D7C3, 0x1D7C3}, {0x1D7C4, 0x1D7CB}, {0x1D7CE, 0x1D7FF}, - {0x1D800, 0x1D9FF}, {0x1DA00, 0x1DA36}, {0x1DA37, 0x1DA3A}, - {0x1DA3B, 0x1DA6C}, {0x1DA6D, 0x1DA74}, {0x1DA75, 0x1DA75}, - {0x1DA76, 0x1DA83}, {0x1DA84, 0x1DA84}, {0x1DA85, 0x1DA86}, - {0x1DA87, 0x1DA8B}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, - {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, - {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, {0x1E800, 0x1E8C4}, - {0x1E8C7, 0x1E8CF}, {0x1E8D0, 0x1E8D6}, {0x1E900, 0x1E943}, - {0x1E944, 0x1E94A}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F}, + {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5}, {0x16B00, 0x16B45}, + {0x16B50, 0x16B59}, {0x16B5B, 0x16B61}, {0x16B63, 0x16B77}, + {0x16B7D, 0x16B8F}, {0x16F00, 0x16F44}, {0x16F50, 0x16F7E}, + {0x16F8F, 0x16F9F}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, + {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3}, + {0x1D000, 0x1D0F5}, {0x1D100, 0x1D126}, {0x1D129, 0x1D1E8}, + {0x1D200, 0x1D245}, {0x1D300, 0x1D356}, {0x1D360, 0x1D371}, + {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, + {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, + {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, + {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, + {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, + {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, + {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B}, + {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006}, + {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, + {0x1E026, 0x1E02A}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6}, + {0x1E900, 0x1E94A}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F}, {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, @@ -1091,12 +806,16 @@ // Condition have flag EastAsianWidth whether the current locale is CJK or not. type Condition struct { - EastAsianWidth bool + EastAsianWidth bool + ZeroWidthJoiner bool } // NewCondition return new instance of Condition which is current locale. func NewCondition() *Condition { - return &Condition{EastAsianWidth} + return &Condition{ + EastAsianWidth: EastAsianWidth, + ZeroWidthJoiner: ZeroWidthJoiner, + } } // RuneWidth returns the number of cells in r. @@ -1116,8 +835,17 @@ // StringWidth return width as you can see func (c *Condition) StringWidth(s string) (width int) { + r1, r2 := rune(0), rune(0) for _, r := range []rune(s) { - width += c.RuneWidth(r) + if r == 0xFE0E || r == 0xFE0F { + continue + } + w := c.RuneWidth(r) + if r2 == 0x200D && inTables(r, emoji) && inTables(r1, emoji) { + w = 0 + } + width += w + r1, r2 = r2, r } return width } diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_js.go lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_js.go --- lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_js.go 2018-08-20 23:46:03.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_js.go 2018-11-22 20:53:30.000000000 +0000 @@ -1,4 +1,5 @@ // +build js +// +build !appengine package runewidth diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_posix.go lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_posix.go --- lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_posix.go 2018-08-20 23:46:03.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_posix.go 2018-11-22 20:53:30.000000000 +0000 @@ -1,4 +1,6 @@ -// +build !windows,!js +// +build !windows +// +build !js +// +build !appengine package runewidth diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_posix_test.go lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_posix_test.go --- lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_posix_test.go 2018-08-20 23:46:03.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_posix_test.go 2018-11-22 20:53:30.000000000 +0000 @@ -1,4 +1,6 @@ -// +build !windows,!js +// +build !windows +// +build !js +// +build !appengine package runewidth diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_test.go lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_test.go --- lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_test.go 2018-08-20 23:46:03.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_test.go 2018-11-22 20:53:30.000000000 +0000 @@ -1,17 +1,21 @@ -// +build !windows,!js +// +build !js,!appengine package runewidth import ( + "crypto/sha256" + "fmt" "os" "sort" "testing" + "unicode/utf8" ) var _ sort.Interface = (*table)(nil) func init() { os.Setenv("RUNEWIDTH_EASTASIAN", "") + handleEnv() } func (t table) Len() int { @@ -37,10 +41,85 @@ neutral, } +func TestTableChecksums(t *testing.T) { + check := func(tbl table, wantN int, wantSHA string) { + gotN := 0 + buf := make([]byte, utf8.MaxRune+1) + for r := rune(0); r <= utf8.MaxRune; r++ { + if inTable(r, tbl) { + gotN++ + buf[r] = 1 + } + } + gotSHA := fmt.Sprintf("%x", sha256.Sum256(buf)) + if gotN != wantN || gotSHA != wantSHA { + t.Errorf("n = %d want %d, sha256 = %s want %s", gotN, wantN, gotSHA, wantSHA) + } + } + + check(private, 137468, "a4a641206dc8c5de80bd9f03515a54a706a5a4904c7684dc6a33d65c967a51b2") + check(nonprint, 2143, "288904683eb225e7c4c0bd3ee481b53e8dace404ec31d443afdbc4d13729fe95") + check(combining, 2097, "b1dabe5f35b7ccf868999bf6df6134f346ae14a4eb16f22e1dc8a98240ba1b53") + check(doublewidth, 180993, "06f5d5d5ebb8b9ee74fdf6003ecfbb313f9c042eb3cb4fce2a9e06089eb68dda") + check(ambiguous, 138739, "d05e339a10f296de6547ff3d6c5aee32f627f6555477afebd4a3b7e3cf74c9e3") + check(emoji, 1236, "9b2d75cf8ca48c5075c525a92ce5cf2608fa451c589f33d7d153e9df93f4e2f7") + check(notassigned, 846357, "b06b7acc03725de394d92b09306aa7a9c0c0b53f36884db4c835cbb04971e421") + check(neutral, 25561, "87fffca79a3a6d413d23adf1c591bdcc1ea5d906d0d466b12a76357bbbb74607") +} + +func isCompact(t *testing.T, tbl table) bool { + for i := range tbl { + if tbl[i].last < tbl[i].first { // sanity check + t.Errorf("table invalid: %v", tbl[i]) + return false + } + if i+1 < len(tbl) && tbl[i].last+1 >= tbl[i+1].first { // can be combined into one entry + t.Errorf("table not compact: %v %v", tbl[i-1], tbl[i]) + return false + } + } + return true +} + +// This is a utility function in case that a table has changed. +func printCompactTable(tbl table) { + counter := 0 + printEntry := func(first, last rune) { + if counter%3 == 0 { + fmt.Printf("\t") + } + fmt.Printf("{0x%04X, 0x%04X},", first, last) + if (counter+1)%3 == 0 { + fmt.Printf("\n") + } else { + fmt.Printf(" ") + } + counter++ + } + + sort.Sort(&tbl) // just in case + first := rune(-1) + for i := range tbl { + if first < 0 { + first = tbl[i].first + } + if i+1 < len(tbl) && tbl[i].last+1 >= tbl[i+1].first { // can be combined into one entry + continue + } + printEntry(first, tbl[i].last) + first = -1 + } + fmt.Printf("\n\n") +} + func TestSorted(t *testing.T) { for _, tbl := range tables { if !sort.IsSorted(&tbl) { - t.Errorf("not sorted") + t.Errorf("table not sorted") + } + if !isCompact(t, tbl) { + t.Errorf("table not compact") + // printCompactTable(tbl) } } } @@ -289,9 +368,37 @@ old := os.Getenv("RUNEWIDTH_EASTASIAN") defer os.Setenv("RUNEWIDTH_EASTASIAN", old) - os.Setenv("RUNEWIDTH_EASTASIAN", "1") + os.Setenv("RUNEWIDTH_EASTASIAN", "0") + handleEnv() if w := RuneWidth('│'); w != 1 { t.Errorf("RuneWidth('│') = %d, want %d", w, 1) } } + +func TestZeroWidthJointer(t *testing.T) { + c := NewCondition() + c.ZeroWidthJoiner = true + + var tests = []struct { + in string + want int + }{ + {"👩", 2}, + {"👩‍", 2}, + {"👩‍🍳", 2}, + {"‍🍳", 2}, + {"👨‍👨", 2}, + {"👨‍👨‍👧", 2}, + {"🏳️‍🌈", 2}, + {"あ👩‍🍳い", 6}, + {"あ‍🍳い", 6}, + {"あ‍い", 4}, + } + + for _, tt := range tests { + if got := c.StringWidth(tt.in); got != tt.want { + t.Errorf("StringWidth(%q) = %d, want %d", tt.in, got, tt.want) + } + } +} diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_windows.go lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_windows.go --- lxd-3.0.2/dist/src/github.com/mattn/go-runewidth/runewidth_windows.go 2018-08-20 23:46:03.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-runewidth/runewidth_windows.go 2018-11-22 20:53:30.000000000 +0000 @@ -1,3 +1,6 @@ +// +build windows +// +build !appengine + package runewidth import ( diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-sqlite3/callback.go lxd-3.0.3/dist/src/github.com/mattn/go-sqlite3/callback.go --- lxd-3.0.2/dist/src/github.com/mattn/go-sqlite3/callback.go 2018-08-20 23:48:22.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-sqlite3/callback.go 2018-11-22 20:53:53.000000000 +0000 @@ -77,6 +77,12 @@ callback(op, C.GoString(db), C.GoString(table), rowid) } +//export authorizerTrampoline +func authorizerTrampoline(handle uintptr, op int, arg1 *C.char, arg2 *C.char, arg3 *C.char) int { + callback := lookupHandle(handle).(func(int, string, string, string) int) + return callback(op, C.GoString(arg1), C.GoString(arg2), C.GoString(arg3)) +} + // Use handles to avoid passing Go pointers to C. type handleVal struct { @@ -362,7 +368,7 @@ func callbackError(ctx *C.sqlite3_context, err error) { cstr := C.CString(err.Error()) defer C.free(unsafe.Pointer(cstr)) - C.sqlite3_result_error(ctx, cstr, -1) + C.sqlite3_result_error(ctx, cstr, C.int(-1)) } // Test support code. Tests are not allowed to import "C", so we can't diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-sqlite3/README.md lxd-3.0.3/dist/src/github.com/mattn/go-sqlite3/README.md --- lxd-3.0.2/dist/src/github.com/mattn/go-sqlite3/README.md 2018-08-20 23:48:22.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-sqlite3/README.md 2018-11-22 20:53:53.000000000 +0000 @@ -10,9 +10,7 @@ sqlite3 driver conforming to the built-in database/sql interface -Supported Golang version: -- 1.9.x -- 1.10.x +Supported Golang version: See .travis.yml [This package follows the official Golang Release Policy.](https://golang.org/doc/devel/release.html#policy) @@ -67,6 +65,7 @@ Options are append after the filename of the SQLite database. The database filename and options are seperated by an `?` (Question Mark). +Options should be URL-encoded (see [url.QueryEscape](https://golang.org/pkg/net/url/#QueryEscape)). This also applies when using an in-memory database instead of a file. @@ -198,7 +197,7 @@ # Google Cloud Platform -Building on GCP is not possible because `Google Cloud Platform does not allow `gcc` to be executed. +Building on GCP is not possible because Google Cloud Platform does not allow `gcc` to be executed. Please work only with compiled final binaries. @@ -281,7 +280,7 @@ 3) Open a terminal for the TDM-GCC toolchain, can be found in the Windows Start menu. 4) Navigate to your project folder and run the `go build ...` command for this package. -For example the TDM-GCC Toolchain can be found [here](ttps://sourceforge.net/projects/tdm-gcc/). +For example the TDM-GCC Toolchain can be found [here](https://sourceforge.net/projects/tdm-gcc/). ## Errors @@ -290,7 +289,7 @@ When receiving a compile time error referencing recompile with `-FPIC` then you are probably using a hardend system. - You can copile the library on a hardend system with the following command. + You can compile the library on a hardend system with the following command. ```bash go build -ldflags '-extldflags=-fno-PIC' diff -Nru lxd-3.0.2/dist/src/github.com/mattn/go-sqlite3/sqlite3-binding.c lxd-3.0.3/dist/src/github.com/mattn/go-sqlite3/sqlite3-binding.c --- lxd-3.0.2/dist/src/github.com/mattn/go-sqlite3/sqlite3-binding.c 2018-08-20 23:48:22.000000000 +0000 +++ lxd-3.0.3/dist/src/github.com/mattn/go-sqlite3/sqlite3-binding.c 2018-11-22 20:53:53.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef USE_LIBSQLITE3 /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.24.0. By combining all the individual C code files into this +** version 3.25.2. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -56,6 +56,12 @@ #define CTIMEOPT_VAL_(opt) #opt #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) +/* Like CTIMEOPT_VAL, but especially for SQLITE_DEFAULT_LOOKASIDE. This +** option requires a separate macro because legal values contain a single +** comma. e.g. (-DSQLITE_DEFAULT_LOOKASIDE="100,100") */ +#define CTIMEOPT_VAL2_(opt1,opt2) #opt1 "," #opt2 +#define CTIMEOPT_VAL2(opt) CTIMEOPT_VAL2_(opt) + /* ** An array of names of all compile-time options. This array should ** be sorted A-Z. @@ -139,7 +145,7 @@ "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE), #endif #ifdef SQLITE_DEFAULT_LOOKASIDE - "DEFAULT_LOOKASIDE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOOKASIDE), + "DEFAULT_LOOKASIDE=" CTIMEOPT_VAL2(SQLITE_DEFAULT_LOOKASIDE), #endif #if SQLITE_DEFAULT_MEMSTATUS "DEFAULT_MEMSTATUS", @@ -1151,9 +1157,9 @@ ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.24.0" -#define SQLITE_VERSION_NUMBER 3024000 -#define SQLITE_SOURCE_ID "2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca" +#define SQLITE_VERSION "3.25.2" +#define SQLITE_VERSION_NUMBER 3025002 +#define SQLITE_SOURCE_ID "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -1500,6 +1506,7 @@ */ #define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8)) #define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8)) +#define SQLITE_ERROR_SNAPSHOT (SQLITE_ERROR | (3<<8)) #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) @@ -1539,6 +1546,7 @@ #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) #define SQLITE_CANTOPEN_CONVPATH (SQLITE_CANTOPEN | (4<<8)) +#define SQLITE_CANTOPEN_DIRTYWAL (SQLITE_CANTOPEN | (5<<8)) /* Not Used */ #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8)) #define SQLITE_CORRUPT_SEQUENCE (SQLITE_CORRUPT | (2<<8)) #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8)) @@ -1914,7 +1922,8 @@ **
      • [[SQLITE_FCNTL_PERSIST_WAL]] ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the ** persistent [WAL | Write Ahead Log] setting. By default, the auxiliary -** write ahead log and shared memory files used for transaction control +** write ahead log ([WAL file]) and shared memory +** files used for transaction control ** are automatically deleted when the latest connection to the database ** closes. Setting persistent WAL mode causes those files to persist after ** close. Persisting the files is useful when other processes that do not @@ -2100,6 +2109,26 @@ ** a file lock using the xLock or xShmLock methods of the VFS to wait ** for up to M milliseconds before failing, where M is the single ** unsigned integer parameter. +** +**
      • [[SQLITE_FCNTL_DATA_VERSION]] +** The [SQLITE_FCNTL_DATA_VERSION] opcode is used to detect changes to +** a database file. The argument is a pointer to a 32-bit unsigned integer. +** The "data version" for the pager is written into the pointer. The +** "data version" changes whenever any change occurs to the corresponding +** database file, either through SQL statements on the same database +** connection or through transactions committed by separate database +** connections possibly in other processes. The [sqlite3_total_changes()] +** interface can be used to find if any database on the connection has changed, +** but that interface responds to changes on TEMP as well as MAIN and does +** not provide a mechanism to detect changes to MAIN only. Also, the +** [sqlite3_total_changes()] interface responds to internal changes only and +** omits changes made by other database connections. The +** [PRAGMA data_version] command provide a mechanism to detect changes to +** a single attached database that occur due to other database connections, +** but omits changes implemented by the database connection on which it is +** called. This file control is the only mechanism to detect changes that +** happen either internally or externally and that are associated with +** a particular attached database. **
      */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -2135,6 +2164,7 @@ #define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32 #define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33 #define SQLITE_FCNTL_LOCK_TIMEOUT 34 +#define SQLITE_FCNTL_DATA_VERSION 35 /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE @@ -3149,6 +3179,12 @@ ** with no schema and no content. The following process works even for ** a badly corrupted database file: **
        +**
      1. If the database connection is newly opened, make sure it has read the +** database schema by preparing then discarding some query against the +** database, or calling sqlite3_table_column_metadata(), ignoring any +** errors. This step is only necessary if the application desires to keep +** the database in WAL mode after the reset if it was in WAL mode before +** the reset. **
      2. sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0); **
      3. [sqlite3_exec](db, "[VACUUM]", 0, 0, 0); **
      4. sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0); @@ -3297,12 +3333,17 @@ ** program, the value returned reflects the number of rows modified by the ** previous INSERT, UPDATE or DELETE statement within the same trigger. ** -** See also the [sqlite3_total_changes()] interface, the -** [count_changes pragma], and the [changes() SQL function]. -** ** If a separate thread makes changes on the same database connection ** while [sqlite3_changes()] is running then the value returned ** is unpredictable and not meaningful. +** +** See also: +**
          +**
        • the [sqlite3_total_changes()] interface +**
        • the [count_changes pragma] +**
        • the [changes() SQL function] +**
        • the [data_version pragma] +**
        */ SQLITE_API int sqlite3_changes(sqlite3*); @@ -3320,13 +3361,26 @@ ** count, but those made as part of REPLACE constraint resolution are ** not. ^Changes to a view that are intercepted by INSTEAD OF triggers ** are not counted. -** -** See also the [sqlite3_changes()] interface, the -** [count_changes pragma], and the [total_changes() SQL function]. ** +** This the [sqlite3_total_changes(D)] interface only reports the number +** of rows that changed due to SQL statement run against database +** connection D. Any changes by other database connections are ignored. +** To detect changes against a database file from other database +** connections use the [PRAGMA data_version] command or the +** [SQLITE_FCNTL_DATA_VERSION] [file control]. +** ** If a separate thread makes changes on the same database connection ** while [sqlite3_total_changes()] is running then the value ** returned is unpredictable and not meaningful. +** +** See also: +**
          +**
        • the [sqlite3_changes()] interface +**
        • the [count_changes pragma] +**
        • the [changes() SQL function] +**
        • the [data_version pragma] +**
        • the [SQLITE_FCNTL_DATA_VERSION] [file control] +**
        */ SQLITE_API int sqlite3_total_changes(sqlite3*); @@ -4382,13 +4436,24 @@ ** [database connection] D failed, then the sqlite3_errcode(D) interface ** returns the numeric [result code] or [extended result code] for that ** API call. -** If the most recent API call was successful, -** then the return value from sqlite3_errcode() is undefined. ** ^The sqlite3_extended_errcode() ** interface is the same except that it always returns the ** [extended result code] even when extended result codes are ** disabled. ** +** The values returned by sqlite3_errcode() and/or +** sqlite3_extended_errcode() might change with each API call. +** Except, there are some interfaces that are guaranteed to never +** change the value of the error code. The error-code preserving +** interfaces are: +** +**
          +**
        • sqlite3_errcode() +**
        • sqlite3_extended_errcode() +**
        • sqlite3_errmsg() +**
        • sqlite3_errmsg16() +**
        +** ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language ** text that describes the error, as either UTF-8 or UTF-16 respectively. ** ^(Memory to hold the error message string is managed internally. @@ -5542,11 +5607,25 @@ ** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** -** ^(If a memory allocation error occurs during the evaluation of any -** of these routines, a default value is returned. The default value -** is either the integer 0, the floating point number 0.0, or a NULL -** pointer. Subsequent calls to [sqlite3_errcode()] will return -** [SQLITE_NOMEM].)^ +** As long as the input parameters are correct, these routines will only +** fail if an out-of-memory error occurs during a format conversion. +** Only the following subset of interfaces are subject to out-of-memory +** errors: +** +**
          +**
        • sqlite3_column_blob() +**
        • sqlite3_column_text() +**
        • sqlite3_column_text16() +**
        • sqlite3_column_bytes() +**
        • sqlite3_column_bytes16() +**
        +** +** If an out-of-memory error occurs, then the return value from these +** routines is the same as if the column had contained an SQL NULL value. +** Valid SQL NULL returns can be distinguished from out-of-memory errors +** by invoking the [sqlite3_errcode()] immediately after the suspect +** return value is obtained and before any +** other SQLite interface is called on the same [database connection]. */ SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol); @@ -5623,11 +5702,13 @@ ** ** ^These functions (collectively known as "function creation routines") ** are used to add SQL functions or aggregates or to redefine the behavior -** of existing SQL functions or aggregates. The only differences between -** these routines are the text encoding expected for -** the second parameter (the name of the function being created) -** and the presence or absence of a destructor callback for -** the application data pointer. +** of existing SQL functions or aggregates. The only differences between +** the three "sqlite3_create_function*" routines are the text encoding +** expected for the second parameter (the name of the function being +** created) and the presence or absence of a destructor callback for +** the application data pointer. Function sqlite3_create_window_function() +** is similar, but allows the user to supply the extra callback functions +** needed by [aggregate window functions]. ** ** ^The first parameter is the [database connection] to which the SQL ** function is to be added. ^If an application uses more than one database @@ -5673,7 +5754,8 @@ ** ^(The fifth parameter is an arbitrary pointer. The implementation of the ** function can gain access to this pointer using [sqlite3_user_data()].)^ ** -** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are +** ^The sixth, seventh and eighth parameters passed to the three +** "sqlite3_create_function*" functions, xFunc, xStep and xFinal, are ** pointers to C-language functions that implement the SQL function or ** aggregate. ^A scalar SQL function requires an implementation of the xFunc ** callback only; NULL pointers must be passed as the xStep and xFinal @@ -5682,15 +5764,24 @@ ** SQL function or aggregate, pass NULL pointers for all three function ** callbacks. ** -** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL, -** then it is destructor for the application data pointer. -** The destructor is invoked when the function is deleted, either by being -** overloaded or when the database connection closes.)^ -** ^The destructor is also invoked if the call to -** sqlite3_create_function_v2() fails. -** ^When the destructor callback of the tenth parameter is invoked, it -** is passed a single argument which is a copy of the application data -** pointer which was the fifth parameter to sqlite3_create_function_v2(). +** ^The sixth, seventh, eighth and ninth parameters (xStep, xFinal, xValue +** and xInverse) passed to sqlite3_create_window_function are pointers to +** C-language callbacks that implement the new function. xStep and xFinal +** must both be non-NULL. xValue and xInverse may either both be NULL, in +** which case a regular aggregate function is created, or must both be +** non-NULL, in which case the new function may be used as either an aggregate +** or aggregate window function. More details regarding the implementation +** of aggregate window functions are +** [user-defined window functions|available here]. +** +** ^(If the final parameter to sqlite3_create_function_v2() or +** sqlite3_create_window_function() is not NULL, then it is destructor for +** the application data pointer. The destructor is invoked when the function +** is deleted, either by being overloaded or when the database connection +** closes.)^ ^The destructor is also invoked if the call to +** sqlite3_create_function_v2() fails. ^When the destructor callback is +** invoked, it is passed a single argument which is a copy of the application +** data pointer which was the fifth parameter to sqlite3_create_function_v2(). ** ** ^It is permitted to register multiple implementations of the same ** functions with the same name but with either differing numbers of @@ -5743,6 +5834,18 @@ void (*xFinal)(sqlite3_context*), void(*xDestroy)(void*) ); +SQLITE_API int sqlite3_create_window_function( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int eTextRep, + void *pApp, + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*) +); /* ** CAPI3REF: Text Encodings @@ -5885,6 +5988,28 @@ ** ** These routines must be called from the same thread as ** the SQL function that supplied the [sqlite3_value*] parameters. +** +** As long as the input parameter is correct, these routines can only +** fail if an out-of-memory error occurs during a format conversion. +** Only the following subset of interfaces are subject to out-of-memory +** errors: +** +**
          +**
        • sqlite3_value_blob() +**
        • sqlite3_value_text() +**
        • sqlite3_value_text16() +**
        • sqlite3_value_text16le() +**
        • sqlite3_value_text16be() +**
        • sqlite3_value_bytes() +**
        • sqlite3_value_bytes16() +**
        +** +** If an out-of-memory error occurs, then the return value from these +** routines is the same as if the column had contained an SQL NULL value. +** Valid SQL NULL returns can be distinguished from out-of-memory errors +** by invoking the [sqlite3_errcode()] immediately after the suspect +** return value is obtained and before any +** other SQLite interface is called on the same [database connection]. */ SQLITE_API const void *sqlite3_value_blob(sqlite3_value*); SQLITE_API double sqlite3_value_double(sqlite3_value*); @@ -7351,6 +7476,7 @@ #define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70 #define SQLITE_INDEX_CONSTRAINT_ISNULL 71 #define SQLITE_INDEX_CONSTRAINT_IS 72 +#define SQLITE_INDEX_CONSTRAINT_FUNCTION 150 /* ** CAPI3REF: Register A Virtual Table Implementation @@ -8027,6 +8153,7 @@ /* ** CAPI3REF: Low-Level Control Of Database Files ** METHOD: sqlite3 +** KEYWORDS: {file control} ** ** ^The [sqlite3_file_control()] interface makes a direct call to the ** xFileControl method for the [sqlite3_io_methods] object associated @@ -8041,11 +8168,18 @@ ** the xFileControl method. ^The return value of the xFileControl ** method becomes the return value of this routine. ** +** A few opcodes for [sqlite3_file_control()] are handled directly +** by the SQLite core and never invoke the +** sqlite3_io_methods.xFileControl method. ** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes ** a pointer to the underlying [sqlite3_file] object to be written into -** the space pointed to by the 4th parameter. ^The [SQLITE_FCNTL_FILE_POINTER] -** case is a short-circuit path which does not actually invoke the -** underlying sqlite3_io_methods.xFileControl method. +** the space pointed to by the 4th parameter. The +** [SQLITE_FCNTL_JOURNAL_POINTER] works similarly except that it returns +** the [sqlite3_file] object associated with the journal file instead of +** the main database. The [SQLITE_FCNTL_VFS_POINTER] opcode returns +** a pointer to the underlying [sqlite3_vfs] object for the file. +** The [SQLITE_FCNTL_DATA_VERSION] returns the data version counter +** from the pager. ** ** ^If the second parameter (zDbName) does not match the name of any ** open database file, then SQLITE_ERROR is returned. ^This error @@ -9864,7 +9998,6 @@ /* ** CAPI3REF: Database Snapshot ** KEYWORDS: {snapshot} {sqlite3_snapshot} -** EXPERIMENTAL ** ** An instance of the snapshot object records the state of a [WAL mode] ** database for some specific point in history. @@ -9881,11 +10014,6 @@ ** version of the database file so that it is possible to later open a new read ** transaction that sees that historical version of the database rather than ** the most recent version. -** -** The constructor for this object is [sqlite3_snapshot_get()]. The -** [sqlite3_snapshot_open()] method causes a fresh read transaction to refer -** to an historical snapshot (if possible). The destructor for -** sqlite3_snapshot objects is [sqlite3_snapshot_free()]. */ typedef struct sqlite3_snapshot { unsigned char hidden[48]; @@ -9893,7 +10021,7 @@ /* ** CAPI3REF: Record A Database Snapshot -** EXPERIMENTAL +** CONSTRUCTOR: sqlite3_snapshot ** ** ^The [sqlite3_snapshot_get(D,S,P)] interface attempts to make a ** new [sqlite3_snapshot] object that records the current state of @@ -9909,7 +10037,7 @@ ** in this case. ** **
          -**
        • The database handle must be in [autocommit mode]. +**
        • The database handle must not be in [autocommit mode]. ** **
        • Schema S of [database connection] D must be a [WAL mode] database. ** @@ -9932,7 +10060,7 @@ ** to avoid a memory leak. ** ** The [sqlite3_snapshot_get()] interface is only available when the -** SQLITE_ENABLE_SNAPSHOT compile-time option is used. +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_get( sqlite3 *db, @@ -9942,24 +10070,35 @@ /* ** CAPI3REF: Start a read transaction on an historical snapshot -** EXPERIMENTAL +** METHOD: sqlite3_snapshot +** +** ^The [sqlite3_snapshot_open(D,S,P)] interface either starts a new read +** transaction or upgrades an existing one for schema S of +** [database connection] D such that the read transaction refers to +** historical [snapshot] P, rather than the most recent change to the +** database. ^The [sqlite3_snapshot_open()] interface returns SQLITE_OK +** on success or an appropriate [error code] if it fails. +** +** ^In order to succeed, the database connection must not be in +** [autocommit mode] when [sqlite3_snapshot_open(D,S,P)] is called. If there +** is already a read transaction open on schema S, then the database handle +** must have no active statements (SELECT statements that have been passed +** to sqlite3_step() but not sqlite3_reset() or sqlite3_finalize()). +** SQLITE_ERROR is returned if either of these conditions is violated, or +** if schema S does not exist, or if the snapshot object is invalid. +** +** ^A call to sqlite3_snapshot_open() will fail to open if the specified +** snapshot has been overwritten by a [checkpoint]. In this case +** SQLITE_ERROR_SNAPSHOT is returned. +** +** If there is already a read transaction open when this function is +** invoked, then the same read transaction remains open (on the same +** database snapshot) if SQLITE_ERROR, SQLITE_BUSY or SQLITE_ERROR_SNAPSHOT +** is returned. If another error code - for example SQLITE_PROTOCOL or an +** SQLITE_IOERR error code - is returned, then the final state of the +** read transaction is undefined. If SQLITE_OK is returned, then the +** read transaction is now open on database snapshot P. ** -** ^The [sqlite3_snapshot_open(D,S,P)] interface starts a -** read transaction for schema S of -** [database connection] D such that the read transaction -** refers to historical [snapshot] P, rather than the most -** recent change to the database. -** ^The [sqlite3_snapshot_open()] interface returns SQLITE_OK on success -** or an appropriate [error code] if it fails. -** -** ^In order to succeed, a call to [sqlite3_snapshot_open(D,S,P)] must be -** the first operation following the [BEGIN] that takes the schema S -** out of [autocommit mode]. -** ^In other words, schema S must not currently be in -** a transaction for [sqlite3_snapshot_open(D,S,P)] to work, but the -** database connection D must be out of [autocommit mode]. -** ^A [snapshot] will fail to open if it has been overwritten by a -** [checkpoint]. ** ^(A call to [sqlite3_snapshot_open(D,S,P)] will fail if the ** database connection D does not know that the database file for ** schema S is in [WAL mode]. A database connection might not know @@ -9970,7 +10109,7 @@ ** database connection in order to make it ready to use snapshots.) ** ** The [sqlite3_snapshot_open()] interface is only available when the -** SQLITE_ENABLE_SNAPSHOT compile-time option is used. +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_open( sqlite3 *db, @@ -9980,20 +10119,20 @@ /* ** CAPI3REF: Destroy a snapshot -** EXPERIMENTAL +** DESTRUCTOR: sqlite3_snapshot ** ** ^The [sqlite3_snapshot_free(P)] interface destroys [sqlite3_snapshot] P. ** The application must eventually free every [sqlite3_snapshot] object ** using this routine to avoid a memory leak. ** ** The [sqlite3_snapshot_free()] interface is only available when the -** SQLITE_ENABLE_SNAPSHOT compile-time option is used. +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_snapshot_free(sqlite3_snapshot*); /* ** CAPI3REF: Compare the ages of two snapshot handles. -** EXPERIMENTAL +** METHOD: sqlite3_snapshot ** ** The sqlite3_snapshot_cmp(P1, P2) interface is used to compare the ages ** of two valid snapshot handles. @@ -10012,6 +10151,9 @@ ** Otherwise, this API returns a negative value if P1 refers to an older ** snapshot than P2, zero if the two handles refer to the same database ** snapshot, and a positive value if P1 is a newer snapshot than P2. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_SNAPSHOT] option. */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( sqlite3_snapshot *p1, @@ -10020,23 +10162,26 @@ /* ** CAPI3REF: Recover snapshots from a wal file -** EXPERIMENTAL +** METHOD: sqlite3_snapshot ** -** If all connections disconnect from a database file but do not perform -** a checkpoint, the existing wal file is opened along with the database -** file the next time the database is opened. At this point it is only -** possible to successfully call sqlite3_snapshot_open() to open the most -** recent snapshot of the database (the one at the head of the wal file), -** even though the wal file may contain other valid snapshots for which -** clients have sqlite3_snapshot handles. +** If a [WAL file] remains on disk after all database connections close +** (either through the use of the [SQLITE_FCNTL_PERSIST_WAL] [file control] +** or because the last process to have the database opened exited without +** calling [sqlite3_close()]) and a new connection is subsequently opened +** on that database and [WAL file], the [sqlite3_snapshot_open()] interface +** will only be able to open the last transaction added to the WAL file +** even though the WAL file contains other valid transactions. ** -** This function attempts to scan the wal file associated with database zDb +** This function attempts to scan the WAL file associated with database zDb ** of database handle db and make all valid snapshots available to ** sqlite3_snapshot_open(). It is an error if there is already a read -** transaction open on the database, or if the database is not a wal mode +** transaction open on the database, or if the database is not a WAL mode ** database. ** ** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_SNAPSHOT] option. */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); @@ -10147,7 +10292,7 @@ ** in the P argument is held in memory obtained from [sqlite3_malloc64()] ** and that SQLite should take ownership of this memory and automatically ** free it when it has finished using it. Without this flag, the caller -** is resposible for freeing any dynamically allocated memory. +** is responsible for freeing any dynamically allocated memory. ** ** The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to ** grow the size of the database using calls to [sqlite3_realloc64()]. This @@ -12325,7 +12470,7 @@ ** This way, even if the tokenizer does not provide synonyms ** when tokenizing query text (it should not - to do would be ** inefficient), it doesn't matter if the user queries for -** 'first + place' or '1st + place', as there are entires in the +** 'first + place' or '1st + place', as there are entries in the ** FTS index corresponding to both forms of the first token. **
      ** @@ -12353,7 +12498,7 @@ ** extra data to the FTS index or require FTS5 to query for multiple terms, ** so it is efficient in terms of disk space and query speed. However, it ** does not support prefix queries very well. If, as suggested above, the -** token "first" is subsituted for "1st" by the tokenizer, then the query: +** token "first" is substituted for "1st" by the tokenizer, then the query: ** ** ** ... MATCH '1s*' @@ -13217,94 +13362,104 @@ #define TK_REPLACE 73 #define TK_RESTRICT 74 #define TK_ROW 75 -#define TK_TRIGGER 76 -#define TK_VACUUM 77 -#define TK_VIEW 78 -#define TK_VIRTUAL 79 -#define TK_WITH 80 -#define TK_REINDEX 81 -#define TK_RENAME 82 -#define TK_CTIME_KW 83 -#define TK_ANY 84 -#define TK_BITAND 85 -#define TK_BITOR 86 -#define TK_LSHIFT 87 -#define TK_RSHIFT 88 -#define TK_PLUS 89 -#define TK_MINUS 90 -#define TK_STAR 91 -#define TK_SLASH 92 -#define TK_REM 93 -#define TK_CONCAT 94 -#define TK_COLLATE 95 -#define TK_BITNOT 96 -#define TK_ON 97 -#define TK_INDEXED 98 -#define TK_STRING 99 -#define TK_JOIN_KW 100 -#define TK_CONSTRAINT 101 -#define TK_DEFAULT 102 -#define TK_NULL 103 -#define TK_PRIMARY 104 -#define TK_UNIQUE 105 -#define TK_CHECK 106 -#define TK_REFERENCES 107 -#define TK_AUTOINCR 108 -#define TK_INSERT 109 -#define TK_DELETE 110 -#define TK_UPDATE 111 -#define TK_SET 112 -#define TK_DEFERRABLE 113 -#define TK_FOREIGN 114 -#define TK_DROP 115 -#define TK_UNION 116 -#define TK_ALL 117 -#define TK_EXCEPT 118 -#define TK_INTERSECT 119 -#define TK_SELECT 120 -#define TK_VALUES 121 -#define TK_DISTINCT 122 -#define TK_DOT 123 -#define TK_FROM 124 -#define TK_JOIN 125 -#define TK_USING 126 -#define TK_ORDER 127 -#define TK_GROUP 128 -#define TK_HAVING 129 -#define TK_LIMIT 130 -#define TK_WHERE 131 -#define TK_INTO 132 -#define TK_NOTHING 133 -#define TK_FLOAT 134 -#define TK_BLOB 135 -#define TK_INTEGER 136 -#define TK_VARIABLE 137 -#define TK_CASE 138 -#define TK_WHEN 139 -#define TK_THEN 140 -#define TK_ELSE 141 -#define TK_INDEX 142 -#define TK_ALTER 143 -#define TK_ADD 144 -#define TK_TRUEFALSE 145 -#define TK_ISNOT 146 -#define TK_FUNCTION 147 -#define TK_COLUMN 148 -#define TK_AGG_FUNCTION 149 -#define TK_AGG_COLUMN 150 -#define TK_UMINUS 151 -#define TK_UPLUS 152 -#define TK_TRUTH 153 -#define TK_REGISTER 154 -#define TK_VECTOR 155 -#define TK_SELECT_COLUMN 156 -#define TK_IF_NULL_ROW 157 -#define TK_ASTERISK 158 -#define TK_SPAN 159 -#define TK_END_OF_FILE 160 -#define TK_UNCLOSED_STRING 161 -#define TK_SPACE 162 -#define TK_ILLEGAL 163 +#define TK_ROWS 76 +#define TK_TRIGGER 77 +#define TK_VACUUM 78 +#define TK_VIEW 79 +#define TK_VIRTUAL 80 +#define TK_WITH 81 +#define TK_CURRENT 82 +#define TK_FOLLOWING 83 +#define TK_PARTITION 84 +#define TK_PRECEDING 85 +#define TK_RANGE 86 +#define TK_UNBOUNDED 87 +#define TK_REINDEX 88 +#define TK_RENAME 89 +#define TK_CTIME_KW 90 +#define TK_ANY 91 +#define TK_BITAND 92 +#define TK_BITOR 93 +#define TK_LSHIFT 94 +#define TK_RSHIFT 95 +#define TK_PLUS 96 +#define TK_MINUS 97 +#define TK_STAR 98 +#define TK_SLASH 99 +#define TK_REM 100 +#define TK_CONCAT 101 +#define TK_COLLATE 102 +#define TK_BITNOT 103 +#define TK_ON 104 +#define TK_INDEXED 105 +#define TK_STRING 106 +#define TK_JOIN_KW 107 +#define TK_CONSTRAINT 108 +#define TK_DEFAULT 109 +#define TK_NULL 110 +#define TK_PRIMARY 111 +#define TK_UNIQUE 112 +#define TK_CHECK 113 +#define TK_REFERENCES 114 +#define TK_AUTOINCR 115 +#define TK_INSERT 116 +#define TK_DELETE 117 +#define TK_UPDATE 118 +#define TK_SET 119 +#define TK_DEFERRABLE 120 +#define TK_FOREIGN 121 +#define TK_DROP 122 +#define TK_UNION 123 +#define TK_ALL 124 +#define TK_EXCEPT 125 +#define TK_INTERSECT 126 +#define TK_SELECT 127 +#define TK_VALUES 128 +#define TK_DISTINCT 129 +#define TK_DOT 130 +#define TK_FROM 131 +#define TK_JOIN 132 +#define TK_USING 133 +#define TK_ORDER 134 +#define TK_GROUP 135 +#define TK_HAVING 136 +#define TK_LIMIT 137 +#define TK_WHERE 138 +#define TK_INTO 139 +#define TK_NOTHING 140 +#define TK_FLOAT 141 +#define TK_BLOB 142 +#define TK_INTEGER 143 +#define TK_VARIABLE 144 +#define TK_CASE 145 +#define TK_WHEN 146 +#define TK_THEN 147 +#define TK_ELSE 148 +#define TK_INDEX 149 +#define TK_ALTER 150 +#define TK_ADD 151 +#define TK_WINDOW 152 +#define TK_OVER 153 +#define TK_FILTER 154 +#define TK_TRUEFALSE 155 +#define TK_ISNOT 156 +#define TK_FUNCTION 157 +#define TK_COLUMN 158 +#define TK_AGG_FUNCTION 159 +#define TK_AGG_COLUMN 160 +#define TK_UMINUS 161 +#define TK_UPLUS 162 +#define TK_TRUTH 163 +#define TK_REGISTER 164 +#define TK_VECTOR 165 +#define TK_SELECT_COLUMN 166 +#define TK_IF_NULL_ROW 167 +#define TK_ASTERISK 168 +#define TK_SPAN 169 +#define TK_END_OF_FILE 170 +#define TK_UNCLOSED_STRING 171 +#define TK_SPACE 172 +#define TK_ILLEGAL 173 /* The token codes above must all fit in 8 bits */ #define TKFLG_MASK 0xff @@ -13578,7 +13733,8 @@ # if defined(__SIZEOF_POINTER__) # define SQLITE_PTRSIZE __SIZEOF_POINTER__ # elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(_M_ARM) || defined(__arm__) || defined(__x86) + defined(_M_ARM) || defined(__arm__) || defined(__x86) || \ + (defined(__TOS_AIX__) && !defined(__64BIT__)) # define SQLITE_PTRSIZE 4 # else # define SQLITE_PTRSIZE 8 @@ -13619,7 +13775,7 @@ # if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ - defined(__arm__) + defined(__arm__) || defined(_M_ARM64) # define SQLITE_BYTEORDER 1234 # elif defined(sparc) || defined(__ppc__) # define SQLITE_BYTEORDER 4321 @@ -13874,6 +14030,7 @@ typedef struct Parse Parse; typedef struct PreUpdate PreUpdate; typedef struct PrintfArguments PrintfArguments; +typedef struct RenameToken RenameToken; typedef struct RowSet RowSet; typedef struct Savepoint Savepoint; typedef struct Select Select; @@ -13894,8 +14051,35 @@ typedef struct VtabCtx VtabCtx; typedef struct Walker Walker; typedef struct WhereInfo WhereInfo; +typedef struct Window Window; typedef struct With With; + +/* +** The bitmask datatype defined below is used for various optimizations. +** +** Changing this from a 64-bit to a 32-bit type limits the number of +** tables in a join to 32 instead of 64. But it also reduces the size +** of the library by 738 bytes on ix86. +*/ +#ifdef SQLITE_BITMASK_TYPE + typedef SQLITE_BITMASK_TYPE Bitmask; +#else + typedef u64 Bitmask; +#endif + +/* +** The number of bits in a Bitmask. "BMS" means "BitMask Size". +*/ +#define BMS ((int)(sizeof(Bitmask)*8)) + +/* +** A bit in a Bitmask +*/ +#define MASKBIT(n) (((Bitmask)1)<<(n)) +#define MASKBIT32(n) (((unsigned int)1)<<(n)) +#define ALLBITS ((Bitmask)-1) + /* A VList object records a mapping between parameters/variables/wildcards ** in the SQL statement (such as $abc, @pqr, or :xyz) and the integer ** variable number associated with that parameter. See the format description @@ -13991,7 +14175,7 @@ SQLITE_PRIVATE int sqlite3BtreeGetReserveNoMutex(Btree *p); SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *, int); SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *); -SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int); +SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int,int*); SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster); SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*, int); SQLITE_PRIVATE int sqlite3BtreeCommit(Btree*); @@ -14214,6 +14398,9 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const BtreePayload *pPayload, int flags, int seekResult); SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes); +#ifndef SQLITE_OMIT_WINDOWFUNC +SQLITE_PRIVATE void sqlite3BtreeSkipNext(BtCursor*); +#endif SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int flags); SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*); @@ -14381,7 +14568,8 @@ u64 cycles; /* Total time spent executing this instruction */ #endif #ifdef SQLITE_VDBE_COVERAGE - int iSrcLine; /* Source-code line that generated this opcode */ + u32 iSrcLine; /* Source-code line that generated this opcode + ** with flags in the upper 8 bits */ #endif }; typedef struct VdbeOp VdbeOp; @@ -14482,52 +14670,52 @@ #define OP_AutoCommit 1 #define OP_Transaction 2 #define OP_SorterNext 3 /* jump */ -#define OP_PrevIfOpen 4 /* jump */ -#define OP_NextIfOpen 5 /* jump */ -#define OP_Prev 6 /* jump */ -#define OP_Next 7 /* jump */ -#define OP_Checkpoint 8 -#define OP_JournalMode 9 -#define OP_Vacuum 10 -#define OP_VFilter 11 /* jump, synopsis: iplan=r[P3] zplan='P4' */ -#define OP_VUpdate 12 /* synopsis: data=r[P3@P2] */ -#define OP_Goto 13 /* jump */ -#define OP_Gosub 14 /* jump */ -#define OP_InitCoroutine 15 /* jump */ -#define OP_Yield 16 /* jump */ -#define OP_MustBeInt 17 /* jump */ -#define OP_Jump 18 /* jump */ +#define OP_Prev 4 /* jump */ +#define OP_Next 5 /* jump */ +#define OP_Checkpoint 6 +#define OP_JournalMode 7 +#define OP_Vacuum 8 +#define OP_VFilter 9 /* jump, synopsis: iplan=r[P3] zplan='P4' */ +#define OP_VUpdate 10 /* synopsis: data=r[P3@P2] */ +#define OP_Goto 11 /* jump */ +#define OP_Gosub 12 /* jump */ +#define OP_InitCoroutine 13 /* jump */ +#define OP_Yield 14 /* jump */ +#define OP_MustBeInt 15 /* jump */ +#define OP_Jump 16 /* jump */ +#define OP_Once 17 /* jump */ +#define OP_If 18 /* jump */ #define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */ -#define OP_Once 20 /* jump */ -#define OP_If 21 /* jump */ -#define OP_IfNot 22 /* jump */ -#define OP_IfNullRow 23 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */ -#define OP_SeekLT 24 /* jump, synopsis: key=r[P3@P4] */ -#define OP_SeekLE 25 /* jump, synopsis: key=r[P3@P4] */ -#define OP_SeekGE 26 /* jump, synopsis: key=r[P3@P4] */ -#define OP_SeekGT 27 /* jump, synopsis: key=r[P3@P4] */ -#define OP_NoConflict 28 /* jump, synopsis: key=r[P3@P4] */ -#define OP_NotFound 29 /* jump, synopsis: key=r[P3@P4] */ -#define OP_Found 30 /* jump, synopsis: key=r[P3@P4] */ -#define OP_SeekRowid 31 /* jump, synopsis: intkey=r[P3] */ -#define OP_NotExists 32 /* jump, synopsis: intkey=r[P3] */ -#define OP_Last 33 /* jump */ -#define OP_IfSmaller 34 /* jump */ -#define OP_SorterSort 35 /* jump */ -#define OP_Sort 36 /* jump */ -#define OP_Rewind 37 /* jump */ -#define OP_IdxLE 38 /* jump, synopsis: key=r[P3@P4] */ -#define OP_IdxGT 39 /* jump, synopsis: key=r[P3@P4] */ -#define OP_IdxLT 40 /* jump, synopsis: key=r[P3@P4] */ -#define OP_IdxGE 41 /* jump, synopsis: key=r[P3@P4] */ -#define OP_RowSetRead 42 /* jump, synopsis: r[P3]=rowset(P1) */ +#define OP_IfNot 20 /* jump */ +#define OP_IfNullRow 21 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */ +#define OP_SeekLT 22 /* jump, synopsis: key=r[P3@P4] */ +#define OP_SeekLE 23 /* jump, synopsis: key=r[P3@P4] */ +#define OP_SeekGE 24 /* jump, synopsis: key=r[P3@P4] */ +#define OP_SeekGT 25 /* jump, synopsis: key=r[P3@P4] */ +#define OP_IfNoHope 26 /* jump, synopsis: key=r[P3@P4] */ +#define OP_NoConflict 27 /* jump, synopsis: key=r[P3@P4] */ +#define OP_NotFound 28 /* jump, synopsis: key=r[P3@P4] */ +#define OP_Found 29 /* jump, synopsis: key=r[P3@P4] */ +#define OP_SeekRowid 30 /* jump, synopsis: intkey=r[P3] */ +#define OP_NotExists 31 /* jump, synopsis: intkey=r[P3] */ +#define OP_Last 32 /* jump */ +#define OP_IfSmaller 33 /* jump */ +#define OP_SorterSort 34 /* jump */ +#define OP_Sort 35 /* jump */ +#define OP_Rewind 36 /* jump */ +#define OP_IdxLE 37 /* jump, synopsis: key=r[P3@P4] */ +#define OP_IdxGT 38 /* jump, synopsis: key=r[P3@P4] */ +#define OP_IdxLT 39 /* jump, synopsis: key=r[P3@P4] */ +#define OP_IdxGE 40 /* jump, synopsis: key=r[P3@P4] */ +#define OP_RowSetRead 41 /* jump, synopsis: r[P3]=rowset(P1) */ +#define OP_RowSetTest 42 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ #define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */ #define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */ -#define OP_RowSetTest 45 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ -#define OP_Program 46 /* jump */ -#define OP_FkIfZero 47 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ -#define OP_IfPos 48 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ -#define OP_IfNotZero 49 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ +#define OP_Program 45 /* jump */ +#define OP_FkIfZero 46 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ +#define OP_IfPos 47 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ +#define OP_IfNotZero 48 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ +#define OP_DecrJumpZero 49 /* jump, synopsis: if (--r[P1])==0 goto P2 */ #define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ #define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ #define OP_Ne 52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */ @@ -14537,119 +14725,121 @@ #define OP_Lt 56 /* jump, same as TK_LT, synopsis: IF r[P3]=r[P1] */ #define OP_ElseNotEq 58 /* jump, same as TK_ESCAPE */ -#define OP_DecrJumpZero 59 /* jump, synopsis: if (--r[P1])==0 goto P2 */ -#define OP_IncrVacuum 60 /* jump */ -#define OP_VNext 61 /* jump */ -#define OP_Init 62 /* jump, synopsis: Start at P2 */ -#define OP_Return 63 -#define OP_EndCoroutine 64 -#define OP_HaltIfNull 65 /* synopsis: if r[P3]=null halt */ -#define OP_Halt 66 -#define OP_Integer 67 /* synopsis: r[P2]=P1 */ -#define OP_Int64 68 /* synopsis: r[P2]=P4 */ -#define OP_String 69 /* synopsis: r[P2]='P4' (len=P1) */ -#define OP_Null 70 /* synopsis: r[P2..P3]=NULL */ -#define OP_SoftNull 71 /* synopsis: r[P1]=NULL */ -#define OP_Blob 72 /* synopsis: r[P2]=P4 (len=P1) */ -#define OP_Variable 73 /* synopsis: r[P2]=parameter(P1,P4) */ -#define OP_Move 74 /* synopsis: r[P2@P3]=r[P1@P3] */ -#define OP_Copy 75 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */ -#define OP_SCopy 76 /* synopsis: r[P2]=r[P1] */ -#define OP_IntCopy 77 /* synopsis: r[P2]=r[P1] */ -#define OP_ResultRow 78 /* synopsis: output=r[P1@P2] */ -#define OP_CollSeq 79 -#define OP_AddImm 80 /* synopsis: r[P1]=r[P1]+P2 */ -#define OP_RealAffinity 81 -#define OP_Cast 82 /* synopsis: affinity(r[P1]) */ -#define OP_Permutation 83 -#define OP_Compare 84 /* synopsis: r[P1@P3] <-> r[P2@P3] */ -#define OP_BitAnd 85 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */ -#define OP_BitOr 86 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */ -#define OP_ShiftLeft 87 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<>r[P1] */ -#define OP_Add 89 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */ -#define OP_Subtract 90 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */ -#define OP_Multiply 91 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */ -#define OP_Divide 92 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */ -#define OP_Remainder 93 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */ -#define OP_Concat 94 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */ -#define OP_IsTrue 95 /* synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 */ -#define OP_BitNot 96 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */ -#define OP_Offset 97 /* synopsis: r[P3] = sqlite_offset(P1) */ -#define OP_Column 98 /* synopsis: r[P3]=PX */ -#define OP_String8 99 /* same as TK_STRING, synopsis: r[P2]='P4' */ -#define OP_Affinity 100 /* synopsis: affinity(r[P1@P2]) */ -#define OP_MakeRecord 101 /* synopsis: r[P3]=mkrec(r[P1@P2]) */ -#define OP_Count 102 /* synopsis: r[P2]=count() */ -#define OP_ReadCookie 103 -#define OP_SetCookie 104 -#define OP_ReopenIdx 105 /* synopsis: root=P2 iDb=P3 */ -#define OP_OpenRead 106 /* synopsis: root=P2 iDb=P3 */ -#define OP_OpenWrite 107 /* synopsis: root=P2 iDb=P3 */ -#define OP_OpenDup 108 -#define OP_OpenAutoindex 109 /* synopsis: nColumn=P2 */ -#define OP_OpenEphemeral 110 /* synopsis: nColumn=P2 */ -#define OP_SorterOpen 111 -#define OP_SequenceTest 112 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */ -#define OP_OpenPseudo 113 /* synopsis: P3 columns in r[P2] */ -#define OP_Close 114 -#define OP_ColumnsUsed 115 -#define OP_Sequence 116 /* synopsis: r[P2]=cursor[P1].ctr++ */ -#define OP_NewRowid 117 /* synopsis: r[P2]=rowid */ -#define OP_Insert 118 /* synopsis: intkey=r[P3] data=r[P2] */ -#define OP_InsertInt 119 /* synopsis: intkey=P3 data=r[P2] */ -#define OP_Delete 120 -#define OP_ResetCount 121 -#define OP_SorterCompare 122 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */ -#define OP_SorterData 123 /* synopsis: r[P2]=data */ -#define OP_RowData 124 /* synopsis: r[P2]=data */ -#define OP_Rowid 125 /* synopsis: r[P2]=rowid */ -#define OP_NullRow 126 -#define OP_SeekEnd 127 -#define OP_SorterInsert 128 /* synopsis: key=r[P2] */ -#define OP_IdxInsert 129 /* synopsis: key=r[P2] */ -#define OP_IdxDelete 130 /* synopsis: key=r[P2@P3] */ -#define OP_DeferredSeek 131 /* synopsis: Move P3 to P1.rowid if needed */ -#define OP_IdxRowid 132 /* synopsis: r[P2]=rowid */ -#define OP_Destroy 133 -#define OP_Real 134 /* same as TK_FLOAT, synopsis: r[P2]=P4 */ -#define OP_Clear 135 -#define OP_ResetSorter 136 -#define OP_CreateBtree 137 /* synopsis: r[P2]=root iDb=P1 flags=P3 */ -#define OP_SqlExec 138 -#define OP_ParseSchema 139 -#define OP_LoadAnalysis 140 -#define OP_DropTable 141 -#define OP_DropIndex 142 -#define OP_DropTrigger 143 -#define OP_IntegrityCk 144 -#define OP_RowSetAdd 145 /* synopsis: rowset(P1)=r[P2] */ -#define OP_Param 146 -#define OP_FkCounter 147 /* synopsis: fkctr[P1]+=P2 */ -#define OP_MemMax 148 /* synopsis: r[P1]=max(r[P1],r[P2]) */ -#define OP_OffsetLimit 149 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */ -#define OP_AggStep0 150 /* synopsis: accum=r[P3] step(r[P2@P5]) */ -#define OP_AggStep 151 /* synopsis: accum=r[P3] step(r[P2@P5]) */ -#define OP_AggFinal 152 /* synopsis: accum=r[P1] N=P2 */ -#define OP_Expire 153 -#define OP_TableLock 154 /* synopsis: iDb=P1 root=P2 write=P3 */ -#define OP_VBegin 155 -#define OP_VCreate 156 -#define OP_VDestroy 157 -#define OP_VOpen 158 -#define OP_VColumn 159 /* synopsis: r[P3]=vcolumn(P2) */ -#define OP_VRename 160 -#define OP_Pagecount 161 -#define OP_MaxPgcnt 162 -#define OP_PureFunc0 163 -#define OP_Function0 164 /* synopsis: r[P3]=func(r[P2@P5]) */ -#define OP_PureFunc 165 -#define OP_Function 166 /* synopsis: r[P3]=func(r[P2@P5]) */ -#define OP_Trace 167 -#define OP_CursorHint 168 -#define OP_Noop 169 -#define OP_Explain 170 -#define OP_Abortable 171 +#define OP_IncrVacuum 59 /* jump */ +#define OP_VNext 60 /* jump */ +#define OP_Init 61 /* jump, synopsis: Start at P2 */ +#define OP_PureFunc0 62 +#define OP_Function0 63 /* synopsis: r[P3]=func(r[P2@P5]) */ +#define OP_PureFunc 64 +#define OP_Function 65 /* synopsis: r[P3]=func(r[P2@P5]) */ +#define OP_Return 66 +#define OP_EndCoroutine 67 +#define OP_HaltIfNull 68 /* synopsis: if r[P3]=null halt */ +#define OP_Halt 69 +#define OP_Integer 70 /* synopsis: r[P2]=P1 */ +#define OP_Int64 71 /* synopsis: r[P2]=P4 */ +#define OP_String 72 /* synopsis: r[P2]='P4' (len=P1) */ +#define OP_Null 73 /* synopsis: r[P2..P3]=NULL */ +#define OP_SoftNull 74 /* synopsis: r[P1]=NULL */ +#define OP_Blob 75 /* synopsis: r[P2]=P4 (len=P1) */ +#define OP_Variable 76 /* synopsis: r[P2]=parameter(P1,P4) */ +#define OP_Move 77 /* synopsis: r[P2@P3]=r[P1@P3] */ +#define OP_Copy 78 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */ +#define OP_SCopy 79 /* synopsis: r[P2]=r[P1] */ +#define OP_IntCopy 80 /* synopsis: r[P2]=r[P1] */ +#define OP_ResultRow 81 /* synopsis: output=r[P1@P2] */ +#define OP_CollSeq 82 +#define OP_AddImm 83 /* synopsis: r[P1]=r[P1]+P2 */ +#define OP_RealAffinity 84 +#define OP_Cast 85 /* synopsis: affinity(r[P1]) */ +#define OP_Permutation 86 +#define OP_Compare 87 /* synopsis: r[P1@P3] <-> r[P2@P3] */ +#define OP_IsTrue 88 /* synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 */ +#define OP_Offset 89 /* synopsis: r[P3] = sqlite_offset(P1) */ +#define OP_Column 90 /* synopsis: r[P3]=PX */ +#define OP_Affinity 91 /* synopsis: affinity(r[P1@P2]) */ +#define OP_BitAnd 92 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */ +#define OP_BitOr 93 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */ +#define OP_ShiftLeft 94 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<>r[P1] */ +#define OP_Add 96 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */ +#define OP_Subtract 97 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */ +#define OP_Multiply 98 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */ +#define OP_Divide 99 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */ +#define OP_Remainder 100 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */ +#define OP_Concat 101 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */ +#define OP_MakeRecord 102 /* synopsis: r[P3]=mkrec(r[P1@P2]) */ +#define OP_BitNot 103 /* same as TK_BITNOT, synopsis: r[P2]= ~r[P1] */ +#define OP_Count 104 /* synopsis: r[P2]=count() */ +#define OP_ReadCookie 105 +#define OP_String8 106 /* same as TK_STRING, synopsis: r[P2]='P4' */ +#define OP_SetCookie 107 +#define OP_ReopenIdx 108 /* synopsis: root=P2 iDb=P3 */ +#define OP_OpenRead 109 /* synopsis: root=P2 iDb=P3 */ +#define OP_OpenWrite 110 /* synopsis: root=P2 iDb=P3 */ +#define OP_OpenDup 111 +#define OP_OpenAutoindex 112 /* synopsis: nColumn=P2 */ +#define OP_OpenEphemeral 113 /* synopsis: nColumn=P2 */ +#define OP_SorterOpen 114 +#define OP_SequenceTest 115 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */ +#define OP_OpenPseudo 116 /* synopsis: P3 columns in r[P2] */ +#define OP_Close 117 +#define OP_ColumnsUsed 118 +#define OP_SeekHit 119 /* synopsis: seekHit=P2 */ +#define OP_Sequence 120 /* synopsis: r[P2]=cursor[P1].ctr++ */ +#define OP_NewRowid 121 /* synopsis: r[P2]=rowid */ +#define OP_Insert 122 /* synopsis: intkey=r[P3] data=r[P2] */ +#define OP_InsertInt 123 /* synopsis: intkey=P3 data=r[P2] */ +#define OP_Delete 124 +#define OP_ResetCount 125 +#define OP_SorterCompare 126 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */ +#define OP_SorterData 127 /* synopsis: r[P2]=data */ +#define OP_RowData 128 /* synopsis: r[P2]=data */ +#define OP_Rowid 129 /* synopsis: r[P2]=rowid */ +#define OP_NullRow 130 +#define OP_SeekEnd 131 +#define OP_SorterInsert 132 /* synopsis: key=r[P2] */ +#define OP_IdxInsert 133 /* synopsis: key=r[P2] */ +#define OP_IdxDelete 134 /* synopsis: key=r[P2@P3] */ +#define OP_DeferredSeek 135 /* synopsis: Move P3 to P1.rowid if needed */ +#define OP_IdxRowid 136 /* synopsis: r[P2]=rowid */ +#define OP_Destroy 137 +#define OP_Clear 138 +#define OP_ResetSorter 139 +#define OP_CreateBtree 140 /* synopsis: r[P2]=root iDb=P1 flags=P3 */ +#define OP_Real 141 /* same as TK_FLOAT, synopsis: r[P2]=P4 */ +#define OP_SqlExec 142 +#define OP_ParseSchema 143 +#define OP_LoadAnalysis 144 +#define OP_DropTable 145 +#define OP_DropIndex 146 +#define OP_DropTrigger 147 +#define OP_IntegrityCk 148 +#define OP_RowSetAdd 149 /* synopsis: rowset(P1)=r[P2] */ +#define OP_Param 150 +#define OP_FkCounter 151 /* synopsis: fkctr[P1]+=P2 */ +#define OP_MemMax 152 /* synopsis: r[P1]=max(r[P1],r[P2]) */ +#define OP_OffsetLimit 153 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */ +#define OP_AggInverse 154 /* synopsis: accum=r[P3] inverse(r[P2@P5]) */ +#define OP_AggStep 155 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_AggStep1 156 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_AggValue 157 /* synopsis: r[P3]=value N=P2 */ +#define OP_AggFinal 158 /* synopsis: accum=r[P1] N=P2 */ +#define OP_Expire 159 +#define OP_TableLock 160 /* synopsis: iDb=P1 root=P2 write=P3 */ +#define OP_VBegin 161 +#define OP_VCreate 162 +#define OP_VDestroy 163 +#define OP_VOpen 164 +#define OP_VColumn 165 /* synopsis: r[P3]=vcolumn(P2) */ +#define OP_VRename 166 +#define OP_Pagecount 167 +#define OP_MaxPgcnt 168 +#define OP_Trace 169 +#define OP_CursorHint 170 +#define OP_Noop 171 +#define OP_Explain 172 +#define OP_Abortable 173 /* Properties such as "out2" or "jump" that are specified in ** comments following the "case" for each opcode in the vdbe.c @@ -14662,28 +14852,28 @@ #define OPFLG_OUT2 0x10 /* out2: P2 is an output */ #define OPFLG_OUT3 0x20 /* out3: P3 is an output */ #define OPFLG_INITIALIZER {\ -/* 0 */ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01,\ -/* 8 */ 0x00, 0x10, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01,\ -/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x03, 0x03, 0x01,\ +/* 0 */ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x10,\ +/* 8 */ 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03,\ +/* 16 */ 0x01, 0x01, 0x03, 0x12, 0x03, 0x01, 0x09, 0x09,\ /* 24 */ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\ -/* 32 */ 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\ -/* 40 */ 0x01, 0x01, 0x23, 0x26, 0x26, 0x0b, 0x01, 0x01,\ +/* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\ +/* 40 */ 0x01, 0x23, 0x0b, 0x26, 0x26, 0x01, 0x01, 0x03,\ /* 48 */ 0x03, 0x03, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ -/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x01, 0x01, 0x01, 0x02,\ -/* 64 */ 0x02, 0x08, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00,\ -/* 72 */ 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\ -/* 80 */ 0x02, 0x02, 0x02, 0x00, 0x00, 0x26, 0x26, 0x26,\ -/* 88 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x12,\ -/* 96 */ 0x12, 0x20, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10,\ -/* 104 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 112 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\ -/* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,\ -/* 128 */ 0x04, 0x04, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00,\ -/* 136 */ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 144 */ 0x00, 0x06, 0x10, 0x00, 0x04, 0x1a, 0x00, 0x00,\ -/* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 160 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 168 */ 0x00, 0x00, 0x00, 0x00,} +/* 56 */ 0x0b, 0x0b, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,\ +/* 64 */ 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10, 0x10,\ +/* 72 */ 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10,\ +/* 80 */ 0x10, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,\ +/* 88 */ 0x12, 0x20, 0x00, 0x00, 0x26, 0x26, 0x26, 0x26,\ +/* 96 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x00, 0x12,\ +/* 104 */ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 112 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 120 */ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 128 */ 0x00, 0x10, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,\ +/* 136 */ 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\ +/* 144 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x00,\ +/* 152 */ 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 160 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,\ +/* 168 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,} /* The sqlite3P2Values() routine is able to run faster if it knows ** the value of the largest JUMP opcode. The smaller the maximum @@ -14691,7 +14881,7 @@ ** generated this include file strives to group all JUMP opcodes ** together near the beginning of the list. */ -#define SQLITE_MX_JUMP_OPCODE 62 /* Maximum JUMP opcode */ +#define SQLITE_MX_JUMP_OPCODE 61 /* Maximum JUMP opcode */ /************** End of opcodes.h *********************************************/ /************** Continuing where we left off in vdbe.h ***********************/ @@ -14765,9 +14955,6 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*); SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int); -#ifdef SQLITE_COVERAGE_TEST -SQLITE_PRIVATE int sqlite3VdbeLabelHasBeenResolved(Vdbe*,int); -#endif SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*); #ifdef SQLITE_DEBUG SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *, int); @@ -14789,6 +14976,7 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(Vdbe*, const char*); #endif SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*); +SQLITE_PRIVATE int sqlite3BlobCompare(const Mem*, const Mem*); SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,UnpackedRecord*); SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*); @@ -14844,23 +15032,52 @@ ** ** VdbeCoverageNeverTaken(v) // Previous branch is never taken ** +** VdbeCoverageNeverNull(v) // Previous three-way branch is only +** // taken on the first two ways. The +** // NULL option is not possible +** +** VdbeCoverageEqNe(v) // Previous OP_Jump is only interested +** // in distingishing equal and not-equal. +** ** Every VDBE branch operation must be tagged with one of the macros above. ** If not, then when "make test" is run with -DSQLITE_VDBE_COVERAGE and ** -DSQLITE_DEBUG then an ALWAYS() will fail in the vdbeTakeBranch() ** routine in vdbe.c, alerting the developer to the missed tag. +** +** During testing, the test application will invoke +** sqlite3_test_control(SQLITE_TESTCTRL_VDBE_COVERAGE,...) to set a callback +** routine that is invoked as each bytecode branch is taken. The callback +** contains the sqlite3.c source line number ov the VdbeCoverage macro and +** flags to indicate whether or not the branch was taken. The test application +** is responsible for keeping track of this and reporting byte-code branches +** that are never taken. +** +** See the VdbeBranchTaken() macro and vdbeTakeBranch() function in the +** vdbe.c source file for additional information. */ #ifdef SQLITE_VDBE_COVERAGE SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe*,int); # define VdbeCoverage(v) sqlite3VdbeSetLineNumber(v,__LINE__) # define VdbeCoverageIf(v,x) if(x)sqlite3VdbeSetLineNumber(v,__LINE__) -# define VdbeCoverageAlwaysTaken(v) sqlite3VdbeSetLineNumber(v,2); -# define VdbeCoverageNeverTaken(v) sqlite3VdbeSetLineNumber(v,1); +# define VdbeCoverageAlwaysTaken(v) \ + sqlite3VdbeSetLineNumber(v,__LINE__|0x5000000); +# define VdbeCoverageNeverTaken(v) \ + sqlite3VdbeSetLineNumber(v,__LINE__|0x6000000); +# define VdbeCoverageNeverNull(v) \ + sqlite3VdbeSetLineNumber(v,__LINE__|0x4000000); +# define VdbeCoverageNeverNullIf(v,x) \ + if(x)sqlite3VdbeSetLineNumber(v,__LINE__|0x4000000); +# define VdbeCoverageEqNe(v) \ + sqlite3VdbeSetLineNumber(v,__LINE__|0x8000000); # define VDBE_OFFSET_LINENO(x) (__LINE__+x) #else # define VdbeCoverage(v) # define VdbeCoverageIf(v,x) # define VdbeCoverageAlwaysTaken(v) # define VdbeCoverageNeverTaken(v) +# define VdbeCoverageNeverNull(v) +# define VdbeCoverageNeverNullIf(v,x) +# define VdbeCoverageEqNe(v) # define VDBE_OFFSET_LINENO(x) 0 #endif @@ -14870,6 +15087,10 @@ # define sqlite3VdbeScanStatus(a,b,c,d,e) #endif +#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) +SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, VdbeOp*); +#endif + #endif /* SQLITE_VDBE_H */ /************** End of vdbe.h ************************************************/ @@ -15064,6 +15285,8 @@ SQLITE_PRIVATE int sqlite3PagerSnapshotGet(Pager *pPager, sqlite3_snapshot **ppSnapshot); SQLITE_PRIVATE int sqlite3PagerSnapshotOpen(Pager *pPager, sqlite3_snapshot *pSnapshot); SQLITE_PRIVATE int sqlite3PagerSnapshotRecover(Pager *pPager); +SQLITE_PRIVATE int sqlite3PagerSnapshotCheck(Pager *pPager, sqlite3_snapshot *pSnapshot); +SQLITE_PRIVATE void sqlite3PagerSnapshotUnlock(Pager *pPager); # endif #else # define sqlite3PagerUseWal(x,y) 0 @@ -16047,6 +16270,7 @@ #define SQLITE_EnableQPSG 0x00800000 /* Query Planner Stability Guarantee*/ #define SQLITE_TriggerEQP 0x01000000 /* Show trigger EXPLAIN QUERY PLAN */ #define SQLITE_ResetDatabase 0x02000000 /* Reset the database */ +#define SQLITE_LegacyAlter 0x04000000 /* Legacy ALTER TABLE behaviour */ /* Flags used only if debugging */ #ifdef SQLITE_DEBUG @@ -16071,7 +16295,7 @@ ** selectively disable various optimizations. */ #define SQLITE_QueryFlattener 0x0001 /* Query flattening */ -#define SQLITE_ColumnCache 0x0002 /* Column cache */ + /* 0x0002 available for reuse */ #define SQLITE_GroupByOrder 0x0004 /* GROUPBY cover of ORDERBY */ #define SQLITE_FactorOutConst 0x0008 /* Constant factoring */ #define SQLITE_DistinctOpt 0x0010 /* DISTINCT using indexes */ @@ -16085,6 +16309,8 @@ /* TH3 expects the Stat34 ^^^^^^ value to be 0x0800. Don't change it */ #define SQLITE_PushDown 0x1000 /* The push-down optimization */ #define SQLITE_SimplifyJoin 0x2000 /* Convert LEFT JOIN to JOIN */ +#define SQLITE_SkipScan 0x4000 /* Skip-scans */ +#define SQLITE_PropagateConst 0x8000 /* The constant propagation opt */ #define SQLITE_AllOpts 0xffff /* All optimizations */ /* @@ -16123,11 +16349,13 @@ */ struct FuncDef { i8 nArg; /* Number of arguments. -1 means unlimited */ - u16 funcFlags; /* Some combination of SQLITE_FUNC_* */ + u32 funcFlags; /* Some combination of SQLITE_FUNC_* */ void *pUserData; /* User data parameter */ FuncDef *pNext; /* Next function with same name */ void (*xSFunc)(sqlite3_context*,int,sqlite3_value**); /* func or agg-step */ void (*xFinalize)(sqlite3_context*); /* Agg finalizer */ + void (*xValue)(sqlite3_context*); /* Current agg value */ + void (*xInverse)(sqlite3_context*,int,sqlite3_value**); /* inverse agg-step */ const char *zName; /* SQL name of the function. */ union { FuncDef *pHash; /* Next with a different name but the same hash */ @@ -16184,6 +16412,8 @@ ** single query - might change over time */ #define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */ #define SQLITE_FUNC_OFFSET 0x8000 /* Built-in sqlite_offset() function */ +#define SQLITE_FUNC_WINDOW 0x10000 /* Built-in window-only function */ +#define SQLITE_FUNC_WINDOW_SIZE 0x20000 /* Requires partition size as arg. */ /* ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are @@ -16218,6 +16448,12 @@ ** are interpreted in the same way as the first 4 parameters to ** FUNCTION(). ** +** WFUNCTION(zName, nArg, iArg, xStep, xFinal, xValue, xInverse) +** Used to create an aggregate function definition implemented by +** the C functions xStep and xFinal. The first four parameters +** are interpreted in the same way as the first 4 parameters to +** FUNCTION(). +** ** LIKEFUNC(zName, nArg, pArg, flags) ** Used to create a scalar function definition of a function zName ** that accepts nArg arguments and is implemented by a call to C @@ -16228,31 +16464,35 @@ */ #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} } #define VFUNCTION(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} } #define DFUNCTION(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8, \ - 0, 0, xFunc, 0, #zName, {0} } + 0, 0, xFunc, 0, 0, 0, #zName, {0} } #define PURE_DATE(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|SQLITE_FUNC_CONSTANT, \ - (void*)&sqlite3Config, 0, xFunc, 0, #zName, {0} } + (void*)&sqlite3Config, 0, xFunc, 0, 0, 0, #zName, {0} } #define FUNCTION2(zName, nArg, iArg, bNC, xFunc, extraFlags) \ {nArg,SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL)|extraFlags,\ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} } #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ - pArg, 0, xFunc, 0, #zName, } + pArg, 0, xFunc, 0, 0, 0, #zName, } #define LIKEFUNC(zName, nArg, arg, flags) \ {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|flags, \ - (void *)arg, 0, likeFunc, 0, #zName, {0} } -#define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \ + (void *)arg, 0, likeFunc, 0, 0, 0, #zName, {0} } +#define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal, xValue) \ {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL), \ - SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}} + SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,xValue,0,#zName, {0}} #define AGGREGATE2(zName, nArg, arg, nc, xStep, xFinal, extraFlags) \ {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|extraFlags, \ - SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}} + SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,xFinal,0,#zName, {0}} + +#define WAGGREGATE(zName, nArg, arg, nc, xStep, xFinal, xValue, xInverse, f) \ + {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|f, \ + SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,xValue,xInverse,#zName, {0}} /* ** All current savepoints are stored in a linked list starting at @@ -16738,6 +16978,7 @@ tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this index */ tRowcnt nRowEst0; /* Non-logarithmic number of rows in the index */ #endif + Bitmask colNotIdxed; /* 0 for unindexed columns in pTab */ }; /* @@ -16776,9 +17017,11 @@ ** Each token coming out of the lexer is an instance of ** this structure. Tokens are also used as part of an expression. ** -** Note if Token.z==0 then Token.dyn and Token.n are undefined and -** may contain random values. Do not make any assumptions about Token.dyn -** and Token.n when Token.z==0. +** The memory that "z" points to is owned by other objects. Take care +** that the owner of the "z" string does not deallocate the string before +** the Token goes out of scope! Very often, the "z" points to some place +** in the middle of the Parse.zSql text. But it might also point to a +** static string. */ struct Token { const char *z; /* Text of the token. Not NULL-terminated! */ @@ -16953,6 +17196,9 @@ AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */ Table *pTab; /* Table for TK_COLUMN expressions. Can be NULL ** for a column of an index on an expression */ +#ifndef SQLITE_OMIT_WINDOWFUNC + Window *pWin; /* Window definition for window functions */ +#endif }; /* @@ -16961,7 +17207,7 @@ #define EP_FromJoin 0x000001 /* Originates in ON/USING clause of outer join */ #define EP_Agg 0x000002 /* Contains one or more aggregate functions */ #define EP_HasFunc 0x000004 /* Contains one or more functions of any kind */ - /* 0x000008 // available for use */ +#define EP_FixedCol 0x000008 /* TK_Column with a known fixed value */ #define EP_Distinct 0x000010 /* Aggregate function with DISTINCT keyword */ #define EP_VarSelect 0x000020 /* pSelect is correlated, not constant */ #define EP_DblQuoted 0x000040 /* token.z was originally in "..." */ @@ -17084,31 +17330,6 @@ }; /* -** The bitmask datatype defined below is used for various optimizations. -** -** Changing this from a 64-bit to a 32-bit type limits the number of -** tables in a join to 32 instead of 64. But it also reduces the size -** of the library by 738 bytes on ix86. -*/ -#ifdef SQLITE_BITMASK_TYPE - typedef SQLITE_BITMASK_TYPE Bitmask; -#else - typedef u64 Bitmask; -#endif - -/* -** The number of bits in a Bitmask. "BMS" means "BitMask Size". -*/ -#define BMS ((int)(sizeof(Bitmask)*8)) - -/* -** A bit in a Bitmask -*/ -#define MASKBIT(n) (((Bitmask)1)<<(n)) -#define MASKBIT32(n) (((unsigned int)1)<<(n)) -#define ALLBITS ((Bitmask)-1) - -/* ** The following structure describes the FROM clause of a SELECT statement. ** Each table or subquery in the FROM clause is a separate element of ** the SrcList.a[] array. @@ -17239,6 +17460,7 @@ int nRef; /* Number of names resolved by this context */ int nErr; /* Number of errors encountered while resolving names */ u16 ncFlags; /* Zero or more NC_* flags defined below */ + Select *pWinSelect; /* SELECT statement for any window functions */ }; /* @@ -17261,6 +17483,7 @@ #define NC_UUpsert 0x0200 /* True if uNC.pUpsert is used */ #define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */ #define NC_Complex 0x2000 /* True if a function or subquery seen */ +#define NC_AllowWin 0x4000 /* Window functions are allowed here */ /* ** An instance of the following object describes a single ON CONFLICT @@ -17315,9 +17538,7 @@ LogEst nSelectRow; /* Estimated number of result rows */ u32 selFlags; /* Various SF_* values */ int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */ -#if SELECTTRACE_ENABLED - char zSelName[12]; /* Symbolic name of this SELECT use for debugging */ -#endif + u32 selId; /* Unique identifier number for this SELECT */ int addrOpenEphm[2]; /* OP_OpenEphem opcodes related to this select */ SrcList *pSrc; /* The FROM clause */ Expr *pWhere; /* The WHERE clause */ @@ -17328,6 +17549,10 @@ Select *pNext; /* Next select to the left in a compound */ Expr *pLimit; /* LIMIT expression. NULL means not used. */ With *pWith; /* WITH clause attached to this select. Or NULL. */ +#ifndef SQLITE_OMIT_WINDOWFUNC + Window *pWin; /* List of window functions */ + Window *pWinDefn; /* List of named window definitions */ +#endif }; /* @@ -17472,13 +17697,6 @@ }; /* -** Size of the column cache -*/ -#ifndef SQLITE_N_COLCACHE -# define SQLITE_N_COLCACHE 10 -#endif - -/* ** At least one instance of the following structure is created for each ** trigger that may be fired while parsing an INSERT, UPDATE or DELETE ** statement. All such objects are stored in the linked list headed at @@ -17553,7 +17771,6 @@ u8 hasCompound; /* Need to invoke convertCompoundSelectToSubquery() */ u8 okConstFactor; /* OK to factor out constants */ u8 disableLookaside; /* Number of times lookaside has been disabled */ - u8 nColCache; /* Number of entries in aColCache[] */ int nRangeReg; /* Size of the temporary register block */ int iRangeReg; /* First register in temporary register block */ int nErr; /* Number of errors seen */ @@ -17563,8 +17780,6 @@ int szOpAlloc; /* Bytes of memory space allocated for Vdbe.aOp[] */ int iSelfTab; /* Table associated with an index on expr, or negative ** of the base register during check-constraint eval */ - int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */ - int iCacheCnt; /* Counter used to generate aColCache[].lru values */ int nLabel; /* Number of labels used */ int *aLabel; /* Space to hold the labels */ ExprList *pConstExpr;/* Constant expressions */ @@ -17574,9 +17789,7 @@ int regRowid; /* Register holding rowid of CREATE TABLE entry */ int regRoot; /* Register holding root page number for new objects */ int nMaxArg; /* Max args passed to user function by sub-program */ -#if SELECTTRACE_ENABLED - int nSelect; /* Number of SELECT statements seen */ -#endif + int nSelect; /* Number of SELECT stmts. Counter for Select.selId */ #ifndef SQLITE_OMIT_SHARED_CACHE int nTableLock; /* Number of locks in aTableLock */ TableLock *aTableLock; /* Required table locks for shared-cache mode */ @@ -17596,17 +17809,9 @@ ** Fields above must be initialized to zero. The fields that follow, ** down to the beginning of the recursive section, do not need to be ** initialized as they will be set before being used. The boundary is - ** determined by offsetof(Parse,aColCache). + ** determined by offsetof(Parse,aTempReg). **************************************************************************/ - struct yColCache { - int iTable; /* Table cursor number */ - i16 iColumn; /* Table column number */ - u8 tempReg; /* iReg is a temp register that needs to be freed */ - int iLevel; /* Nesting level */ - int iReg; /* Reg with value of this column. 0 means none. */ - int lru; /* Least recently used entry has the smallest value */ - } aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */ int aTempReg[8]; /* Holding area for temporary registers */ Token sNameToken; /* Token with unqualified schema object name */ @@ -17621,8 +17826,10 @@ ynVar nVar; /* Number of '?' variables seen in the SQL so far */ u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */ u8 explain; /* True if the EXPLAIN flag is found on the query */ +#if !(defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_OMIT_ALTERTABLE)) + u8 eParseMode; /* PARSE_MODE_XXX constant */ +#endif #ifndef SQLITE_OMIT_VIRTUALTABLE - u8 declareVtab; /* True if inside sqlite3_declare_vtab() */ int nVtabLock; /* Number of virtual tables to lock */ #endif int nHeight; /* Expression tree height of current sub-select */ @@ -17633,6 +17840,7 @@ Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */ const char *zTail; /* All SQL text past the last semicolon parsed */ Table *pNewTable; /* A table being constructed by CREATE TABLE */ + Index *pNewIndex; /* An index being constructed by CREATE INDEX */ Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */ const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */ #ifndef SQLITE_OMIT_VIRTUALTABLE @@ -17643,12 +17851,20 @@ TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */ With *pWith; /* Current WITH clause, or NULL */ With *pWithToFree; /* Free this WITH object at the end of the parse */ +#ifndef SQLITE_OMIT_ALTERTABLE + RenameToken *pRename; /* Tokens subject to renaming by ALTER TABLE */ +#endif }; +#define PARSE_MODE_NORMAL 0 +#define PARSE_MODE_DECLARE_VTAB 1 +#define PARSE_MODE_RENAME_COLUMN 2 +#define PARSE_MODE_RENAME_TABLE 3 + /* ** Sizes and pointers of various parts of the Parse object. */ -#define PARSE_HDR_SZ offsetof(Parse,aColCache) /* Recursive part w/o aColCache*/ +#define PARSE_HDR_SZ offsetof(Parse,aTempReg) /* Recursive part w/o aColCache*/ #define PARSE_RECURSE_SZ offsetof(Parse,sLastToken) /* Recursive part */ #define PARSE_TAIL_SZ (sizeof(Parse)-PARSE_RECURSE_SZ) /* Non-recursive part */ #define PARSE_TAIL(X) (((char*)(X))+PARSE_RECURSE_SZ) /* Pointer to tail */ @@ -17659,7 +17875,19 @@ #ifdef SQLITE_OMIT_VIRTUALTABLE #define IN_DECLARE_VTAB 0 #else - #define IN_DECLARE_VTAB (pParse->declareVtab) + #define IN_DECLARE_VTAB (pParse->eParseMode==PARSE_MODE_DECLARE_VTAB) +#endif + +#if defined(SQLITE_OMIT_ALTERTABLE) + #define IN_RENAME_OBJECT 0 +#else + #define IN_RENAME_OBJECT (pParse->eParseMode>=PARSE_MODE_RENAME_COLUMN) +#endif + +#if defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_OMIT_ALTERTABLE) + #define IN_SPECIAL_PARSE 0 +#else + #define IN_SPECIAL_PARSE (pParse->eParseMode!=PARSE_MODE_NORMAL) #endif /* @@ -17838,9 +18066,15 @@ char **pzErrMsg; /* Error message stored here */ int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */ int rc; /* Result code stored here */ + u32 mInitFlags; /* Flags controlling error messages */ } InitData; /* +** Allowed values for mInitFlags +*/ +#define INITFLAG_AlterTable 0x0001 /* This is a reparse after ALTER TABLE */ + +/* ** Structure containing global configuration data for the SQLite library. ** ** This structure also contains some state information. @@ -17890,7 +18124,7 @@ /* The following callback (if not NULL) is invoked on every VDBE branch ** operation. Set the callback using SQLITE_TESTCTRL_VDBE_COVERAGE. */ - void (*xVdbeBranch)(void*,int iSrcLine,u8 eThis,u8 eMx); /* Callback */ + void (*xVdbeBranch)(void*,unsigned iSrcLine,u8 eThis,u8 eMx); /* Callback */ void *pVdbeBranchArg; /* 1st argument */ #endif #ifndef SQLITE_UNTESTABLE @@ -17941,6 +18175,9 @@ struct IdxExprTrans *pIdxTrans; /* Convert idxed expr to column */ ExprList *pGroupBy; /* GROUP BY clause */ Select *pSelect; /* HAVING to WHERE clause ctx */ + struct WindowRewrite *pRewrite; /* Window rewrite context */ + struct WhereConst *pConst; /* WHERE clause constants */ + struct RenameCtx *pRename; /* RENAME COLUMN context */ } u; }; @@ -17992,6 +18229,68 @@ #endif /* SQLITE_DEBUG */ /* +** This object is used in varioius ways, all related to window functions +** +** (1) A single instance of this structure is attached to the +** the Expr.pWin field for each window function in an expression tree. +** This object holds the information contained in the OVER clause, +** plus additional fields used during code generation. +** +** (2) All window functions in a single SELECT form a linked-list +** attached to Select.pWin. The Window.pFunc and Window.pExpr +** fields point back to the expression that is the window function. +** +** (3) The terms of the WINDOW clause of a SELECT are instances of this +** object on a linked list attached to Select.pWinDefn. +** +** The uses (1) and (2) are really the same Window object that just happens +** to be accessible in two different ways. Use (3) is are separate objects. +*/ +struct Window { + char *zName; /* Name of window (may be NULL) */ + ExprList *pPartition; /* PARTITION BY clause */ + ExprList *pOrderBy; /* ORDER BY clause */ + u8 eType; /* TK_RANGE or TK_ROWS */ + u8 eStart; /* UNBOUNDED, CURRENT, PRECEDING or FOLLOWING */ + u8 eEnd; /* UNBOUNDED, CURRENT, PRECEDING or FOLLOWING */ + Expr *pStart; /* Expression for " PRECEDING" */ + Expr *pEnd; /* Expression for " FOLLOWING" */ + Window *pNextWin; /* Next window function belonging to this SELECT */ + Expr *pFilter; /* The FILTER expression */ + FuncDef *pFunc; /* The function */ + int iEphCsr; /* Partition buffer or Peer buffer */ + int regAccum; + int regResult; + int csrApp; /* Function cursor (used by min/max) */ + int regApp; /* Function register (also used by min/max) */ + int regPart; /* First in a set of registers holding PARTITION BY + ** and ORDER BY values for the window */ + Expr *pOwner; /* Expression object this window is attached to */ + int nBufferCol; /* Number of columns in buffer table */ + int iArgCol; /* Offset of first argument for this function */ +}; + +#ifndef SQLITE_OMIT_WINDOWFUNC +SQLITE_PRIVATE void sqlite3WindowDelete(sqlite3*, Window*); +SQLITE_PRIVATE void sqlite3WindowListDelete(sqlite3 *db, Window *p); +SQLITE_PRIVATE Window *sqlite3WindowAlloc(Parse*, int, int, Expr*, int , Expr*); +SQLITE_PRIVATE void sqlite3WindowAttach(Parse*, Expr*, Window*); +SQLITE_PRIVATE int sqlite3WindowCompare(Parse*, Window*, Window*); +SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse*, Window*); +SQLITE_PRIVATE void sqlite3WindowCodeStep(Parse*, Select*, WhereInfo*, int, int); +SQLITE_PRIVATE int sqlite3WindowRewrite(Parse*, Select*); +SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse*, struct SrcList_item*); +SQLITE_PRIVATE void sqlite3WindowUpdate(Parse*, Window*, Window*, FuncDef*); +SQLITE_PRIVATE Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p); +SQLITE_PRIVATE Window *sqlite3WindowListDup(sqlite3 *db, Window *p); +SQLITE_PRIVATE void sqlite3WindowFunctions(void); +#else +# define sqlite3WindowDelete(a,b) +# define sqlite3WindowFunctions() +# define sqlite3WindowAttach(a,b,c) +#endif + +/* ** Assuming zIn points to the first byte of a UTF-8 character, ** advance zIn to point to the first byte of the next UTF-8 character. */ @@ -18078,9 +18377,7 @@ # define sqlite3Tolower(x) tolower((unsigned char)(x)) # define sqlite3Isquote(x) ((x)=='"'||(x)=='\''||(x)=='['||(x)=='`') #endif -#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS SQLITE_PRIVATE int sqlite3IsIdChar(u8); -#endif /* ** Internal function prototypes @@ -18205,6 +18502,10 @@ SQLITE_PRIVATE void sqlite3TreeViewExprList(TreeView*, const ExprList*, u8, const char*); SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView*, const Select*, u8); SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView*, const With*, u8); +#ifndef SQLITE_OMIT_WINDOWFUNC +SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView*, const Window*, u8); +SQLITE_PRIVATE void sqlite3TreeViewWinFunc(TreeView*, const Window*, u8); +#endif #endif @@ -18229,7 +18530,7 @@ SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*); SQLITE_PRIVATE void sqlite3PExprAddSelect(Parse*, Expr*, Select*); SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*); -SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*); +SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int); SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*); SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); @@ -18241,6 +18542,7 @@ SQLITE_PRIVATE u32 sqlite3ExprListFlags(const ExprList*); SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**); SQLITE_PRIVATE int sqlite3InitCallback(void*, int, char**, char**); +SQLITE_PRIVATE int sqlite3InitOne(sqlite3*, int, char**, u32); SQLITE_PRIVATE void sqlite3Pragma(Parse*,Token*,Token*,Token*,int); #ifndef SQLITE_OMIT_VIRTUALTABLE SQLITE_PRIVATE Module *sqlite3PragmaVtabRegister(sqlite3*,const char *zName); @@ -18290,8 +18592,9 @@ SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int,int*); #endif -SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3*, void*, unsigned int); -SQLITE_PRIVATE void sqlite3RowSetClear(RowSet*); +SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3*); +SQLITE_PRIVATE void sqlite3RowSetDelete(void*); +SQLITE_PRIVATE void sqlite3RowSetClear(void*); SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet*, i64); SQLITE_PRIVATE int sqlite3RowSetTest(RowSet*, int iBatch, i64); SQLITE_PRIVATE int sqlite3RowSetNext(RowSet*, i64*); @@ -18310,6 +18613,7 @@ SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int); SQLITE_PRIVATE void sqlite3CodeDropTable(Parse*, Table*, int, int); SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*); +SQLITE_PRIVATE void sqlite3FreeIndex(sqlite3*, Index*); #ifndef SQLITE_OMIT_AUTOINCREMENT SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse); SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse); @@ -18319,7 +18623,7 @@ #endif SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, Select*, IdList*, int, Upsert*); SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int*,int*); -SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*); +SQLITE_PRIVATE IdList *sqlite3IdListAppend(Parse*, IdList*, Token*); SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*); SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int); SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*); @@ -18354,7 +18658,7 @@ SQLITE_PRIVATE LogEst sqlite3WhereOutputRowCount(WhereInfo*); SQLITE_PRIVATE int sqlite3WhereIsDistinct(WhereInfo*); SQLITE_PRIVATE int sqlite3WhereIsOrdered(WhereInfo*); -SQLITE_PRIVATE int sqlite3WhereOrderedInnerLoop(WhereInfo*); +SQLITE_PRIVATE int sqlite3WhereOrderByLimitOptLabel(WhereInfo*); SQLITE_PRIVATE int sqlite3WhereIsSorted(WhereInfo*); SQLITE_PRIVATE int sqlite3WhereContinueLabel(WhereInfo*); SQLITE_PRIVATE int sqlite3WhereBreakLabel(WhereInfo*); @@ -18364,15 +18668,8 @@ #define ONEPASS_MULTI 2 /* ONEPASS is valid for multiple rows */ SQLITE_PRIVATE void sqlite3ExprCodeLoadIndexColumn(Parse*, Index*, int, int, int); SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int, u8); -SQLITE_PRIVATE void sqlite3ExprCodeGetColumnToReg(Parse*, Table*, int, int, int); SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int); SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse*, int, int, int); -SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse*, int, int, int); -SQLITE_PRIVATE void sqlite3ExprCachePush(Parse*); -SQLITE_PRIVATE void sqlite3ExprCachePop(Parse*); -SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int, int); -SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse*); -SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int); SQLITE_PRIVATE void sqlite3ExprCode(Parse*, Expr*, int); SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, Expr*, int); SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse*, Expr*, int); @@ -18460,11 +18757,6 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int); SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3*,IdList*); SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3*,Select*,int); -#if SELECTTRACE_ENABLED -SQLITE_PRIVATE void sqlite3SelectSetName(Select*,const char*); -#else -# define sqlite3SelectSetName(A,B) -#endif SQLITE_PRIVATE void sqlite3InsertBuiltinFuncs(FuncDef*,int); SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,u8,u8); SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void); @@ -18493,12 +18785,12 @@ SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*); SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*, const char*,const char*); -SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*, +SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(Parse*,Token*, IdList*, Select*,u8,Upsert*, const char*,const char*); -SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8, +SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(Parse*,Token*,ExprList*, Expr*, u8, const char*,const char*); -SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*, +SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(Parse*,Token*, Expr*, const char*,const char*); SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3*, Trigger*); SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*); @@ -18613,6 +18905,7 @@ SQLITE_PRIVATE const char *sqlite3ErrStr(int); SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse); SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int); +SQLITE_PRIVATE int sqlite3IsBinary(const CollSeq*); SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName); SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr); SQLITE_PRIVATE CollSeq *sqlite3ExprNNCollSeq(Parse *pParse, Expr *pExpr); @@ -18665,9 +18958,10 @@ SQLITE_PRIVATE void sqlite3Reindex(Parse*, Token*, Token*); SQLITE_PRIVATE void sqlite3AlterFunctions(void); SQLITE_PRIVATE void sqlite3AlterRenameTable(Parse*, SrcList*, Token*); +SQLITE_PRIVATE void sqlite3AlterRenameColumn(Parse*, SrcList*, Token*, Token*); SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *, int *); SQLITE_PRIVATE void sqlite3NestedParse(Parse*, const char*, ...); -SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*); +SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*, int); SQLITE_PRIVATE int sqlite3CodeSubselect(Parse*, Expr *, int, int); SQLITE_PRIVATE void sqlite3SelectPrep(Parse*, Select*, NameContext*); SQLITE_PRIVATE void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p); @@ -18680,6 +18974,10 @@ SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *, Table *, int, int); SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *, Token *); SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *, SrcList *); +SQLITE_PRIVATE void *sqlite3RenameTokenMap(Parse*, void*, Token*); +SQLITE_PRIVATE void sqlite3RenameTokenRemap(Parse*, void *pTo, void *pFrom); +SQLITE_PRIVATE void sqlite3RenameExprUnmap(Parse*, Expr*); +SQLITE_PRIVATE void sqlite3RenameExprlistUnmap(Parse*, ExprList*); SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(Parse*, u8, CollSeq *, const char*); SQLITE_PRIVATE char sqlite3AffinityType(const char*, Column*); SQLITE_PRIVATE void sqlite3Analyze(Parse*, Token*, Token*); @@ -18698,12 +18996,17 @@ SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo*); SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoRef(KeyInfo*); SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse*, Index*); +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoFromExprList(Parse*, ExprList*, int, int); + #ifdef SQLITE_DEBUG SQLITE_PRIVATE int sqlite3KeyInfoIsWriteable(KeyInfo*); #endif SQLITE_PRIVATE int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, void (*)(sqlite3_context*,int,sqlite3_value **), - void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*), + void (*)(sqlite3_context*,int,sqlite3_value **), + void (*)(sqlite3_context*), + void (*)(sqlite3_context*), + void (*)(sqlite3_context*,int,sqlite3_value **), FuncDestructor *pDestructor ); SQLITE_PRIVATE void sqlite3NoopDestructor(void*); @@ -18744,6 +19047,7 @@ SQLITE_PRIVATE void sqlite3ParserFree(void*, void(*)(void*)); #endif SQLITE_PRIVATE void sqlite3Parser(void*, int, Token); +SQLITE_PRIVATE int sqlite3ParserFallback(int); #ifdef YYTRACKMAXSTACKDEPTH SQLITE_PRIVATE int sqlite3ParserStackPeak(void*); #endif @@ -19444,6 +19748,7 @@ Bool isEphemeral:1; /* True for an ephemeral table */ Bool useRandomRowid:1; /* Generate new record numbers semi-randomly */ Bool isOrdered:1; /* True if the table is not BTREE_UNORDERED */ + Bool seekHit:1; /* See the OP_SeekHit and OP_IfNoHope opcodes */ Btree *pBtx; /* Separate file holding temporary table */ i64 seqCount; /* Sequence counter */ int *aAltMap; /* Mapping from table to index column numbers */ @@ -19527,6 +19832,9 @@ void *token; /* Copy of SubProgram.token */ i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */ AuxData *pAuxData; /* Linked list of auxdata allocations */ +#if SQLITE_DEBUG + u32 iFrameMagic; /* magic number for sanity checking */ +#endif int nCursor; /* Number of entries in apCsr */ int pc; /* Program Counter in parent (calling) frame */ int nOp; /* Size of aOp array */ @@ -19537,6 +19845,13 @@ int nDbChange; /* Value of db->nChange */ }; +/* Magic number for sanity checking on VdbeFrame objects */ +#define SQLITE_FRAME_MAGIC 0x879fb71e + +/* +** Return a pointer to the array of registers allocated for use +** by a VdbeFrame. +*/ #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))]) /* @@ -19551,8 +19866,6 @@ int nZero; /* Extra zero bytes when MEM_Zero and MEM_Blob set */ const char *zPType; /* Pointer type when MEM_Term|MEM_Subtype|MEM_Null */ FuncDef *pDef; /* Used only when flags==MEM_Agg */ - RowSet *pRowSet; /* Used only when flags==MEM_RowSet */ - VdbeFrame *pFrame; /* Used when flags==MEM_Frame */ } u; u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */ u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */ @@ -19567,7 +19880,7 @@ void (*xDel)(void*);/* Destructor for Mem.z - only valid if MEM_Dyn */ #ifdef SQLITE_DEBUG Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */ - void *pFiller; /* So that sizeof(Mem) is a multiple of 8 */ + u16 mScopyFlags; /* flags value immediately after the shallow copy */ #endif }; @@ -19596,8 +19909,8 @@ #define MEM_Real 0x0008 /* Value is a real number */ #define MEM_Blob 0x0010 /* Value is a BLOB */ #define MEM_AffMask 0x001f /* Mask of affinity bits */ -#define MEM_RowSet 0x0020 /* Value is a RowSet object */ -#define MEM_Frame 0x0040 /* Value is a VdbeFrame object */ +/* Available 0x0020 */ +/* Available 0x0040 */ #define MEM_Undefined 0x0080 /* Value is undefined */ #define MEM_Cleared 0x0100 /* NULL set by OP_Null, not from data */ #define MEM_TypeMask 0xc1ff /* Mask of type bits */ @@ -19624,7 +19937,7 @@ ** that needs to be deallocated to avoid a leak. */ #define VdbeMemDynamic(X) \ - (((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame))!=0) + (((X)->flags&(MEM_Agg|MEM_Dyn))!=0) /* ** Clear any existing type flags from a Mem and replace them with f @@ -19744,9 +20057,9 @@ u8 errorAction; /* Recovery action to do in case of an error */ u8 minWriteFileFormat; /* Minimum file format for writable database files */ u8 prepFlags; /* SQLITE_PREPARE_* flags */ - bft expired:1; /* True if the VM needs to be recompiled */ - bft doingRerun:1; /* True if rerunning after an auto-reprepare */ + bft expired:2; /* 1: recompile VM immediately 2: when convenient */ bft explain:2; /* True if EXPLAIN present on SQL command */ + bft doingRerun:1; /* True if rerunning after an auto-reprepare */ bft changeCntOn:1; /* True to update the change-counter */ bft runOnlyOnce:1; /* Automatically expire on reset */ bft usesStmtJournal:1; /* True if uses a statement journal */ @@ -19807,9 +20120,6 @@ void sqliteVdbePopStack(Vdbe*,int); SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor**, int*); SQLITE_PRIVATE int sqlite3VdbeCursorRestore(VdbeCursor*); -#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) -SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*); -#endif SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32); SQLITE_PRIVATE u8 sqlite3VdbeOneByteSerialTypeLen(u8); SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem*, int, u32*); @@ -19840,7 +20150,10 @@ SQLITE_PRIVATE void sqlite3VdbeMemInit(Mem*,sqlite3*,u16); SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*); SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int); -SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem*); +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3VdbeMemIsRowSet(const Mem*); +#endif +SQLITE_PRIVATE int sqlite3VdbeMemSetRowSet(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, u8, u8); SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*); @@ -19854,11 +20167,18 @@ SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,u32,u32,Mem*); SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p); SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*); +#ifndef SQLITE_OMIT_WINDOWFUNC +SQLITE_PRIVATE int sqlite3VdbeMemAggValue(Mem*, Mem*, FuncDef*); +#endif SQLITE_PRIVATE const char *sqlite3OpcodeName(int); SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve); SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int n); SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int); -SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*); +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3VdbeFrameIsValid(VdbeFrame*); +#endif +SQLITE_PRIVATE void sqlite3VdbeFrameMemDel(void*); /* Destructor on Mem */ +SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*); /* Actually deletes the Frame */ SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *); #ifdef SQLITE_ENABLE_PREUPDATE_HOOK SQLITE_PRIVATE void sqlite3VdbePreUpdateHook(Vdbe*,VdbeCursor*,int,const char*,Table*,i64,int); @@ -21956,9 +22276,12 @@ ** Unregister a VFS so that it is no longer accessible. */ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs *pVfs){ -#if SQLITE_THREADSAFE - sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); + MUTEX_LOGIC(sqlite3_mutex *mutex;) +#ifndef SQLITE_OMIT_AUTOINIT + int rc = sqlite3_initialize(); + if( rc ) return rc; #endif + MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); ) sqlite3_mutex_enter(mutex); vfsUnlink(pVfs); sqlite3_mutex_leave(mutex); @@ -27289,7 +27612,12 @@ if( bufpt==0 ){ bufpt = ""; }else if( xtype==etDYNSTRING ){ - if( pAccum->nChar==0 && pAccum->mxAlloc && width==0 && precision<0 ){ + if( pAccum->nChar==0 + && pAccum->mxAlloc + && width==0 + && precision<0 + && pAccum->accError==0 + ){ /* Special optimization for sqlite3_mprintf("%z..."): ** Extend an existing memory allocation rather than creating ** a new one. */ @@ -27987,21 +28315,13 @@ sqlite3TreeViewPush(pView, 1); } do{ -#if SELECTTRACE_ENABLED sqlite3TreeViewLine(pView, - "SELECT%s%s (%s/%p) selFlags=0x%x nSelectRow=%d", + "SELECT%s%s (%u/%p) selFlags=0x%x nSelectRow=%d", ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""), ((p->selFlags & SF_Aggregate) ? " agg_flag" : ""), - p->zSelName, p, p->selFlags, - (int)p->nSelectRow - ); -#else - sqlite3TreeViewLine(pView, "SELECT%s%s (0x%p) selFlags=0x%x nSelectRow=%d", - ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""), - ((p->selFlags & SF_Aggregate) ? " agg_flag" : ""), p, p->selFlags, + p->selId, p, p->selFlags, (int)p->nSelectRow ); -#endif if( cnt++ ) sqlite3TreeViewPop(pView); if( p->pPrior ){ n = 1000; @@ -28013,8 +28333,23 @@ if( p->pHaving ) n++; if( p->pOrderBy ) n++; if( p->pLimit ) n++; +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ) n++; + if( p->pWinDefn ) n++; +#endif } sqlite3TreeViewExprList(pView, p->pEList, (n--)>0, "result-set"); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ){ + Window *pX; + pView = sqlite3TreeViewPush(pView, (n--)>0); + sqlite3TreeViewLine(pView, "window-functions"); + for(pX=p->pWin; pX; pX=pX->pNextWin){ + sqlite3TreeViewWinFunc(pView, pX, pX->pNextWin!=0); + } + sqlite3TreeViewPop(pView); + } +#endif if( p->pSrc && p->pSrc->nSrc ){ int i; pView = sqlite3TreeViewPush(pView, (n--)>0); @@ -28064,6 +28399,16 @@ sqlite3TreeViewExpr(pView, p->pHaving, 0); sqlite3TreeViewPop(pView); } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWinDefn ){ + Window *pX; + sqlite3TreeViewItem(pView, "WINDOW", (n--)>0); + for(pX=p->pWinDefn; pX; pX=pX->pNextWin){ + sqlite3TreeViewWindow(pView, pX, pX->pNextWin!=0); + } + sqlite3TreeViewPop(pView); + } +#endif if( p->pOrderBy ){ sqlite3TreeViewExprList(pView, p->pOrderBy, (n--)>0, "ORDERBY"); } @@ -28091,6 +28436,83 @@ sqlite3TreeViewPop(pView); } +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a description of starting or stopping bounds +*/ +SQLITE_PRIVATE void sqlite3TreeViewBound( + TreeView *pView, /* View context */ + u8 eBound, /* UNBOUNDED, CURRENT, PRECEDING, FOLLOWING */ + Expr *pExpr, /* Value for PRECEDING or FOLLOWING */ + u8 moreToFollow /* True if more to follow */ +){ + switch( eBound ){ + case TK_UNBOUNDED: { + sqlite3TreeViewItem(pView, "UNBOUNDED", moreToFollow); + sqlite3TreeViewPop(pView); + break; + } + case TK_CURRENT: { + sqlite3TreeViewItem(pView, "CURRENT", moreToFollow); + sqlite3TreeViewPop(pView); + break; + } + case TK_PRECEDING: { + sqlite3TreeViewItem(pView, "PRECEDING", moreToFollow); + sqlite3TreeViewExpr(pView, pExpr, 0); + sqlite3TreeViewPop(pView); + break; + } + case TK_FOLLOWING: { + sqlite3TreeViewItem(pView, "FOLLOWING", moreToFollow); + sqlite3TreeViewExpr(pView, pExpr, 0); + sqlite3TreeViewPop(pView); + break; + } + } +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a human-readable explanation for a Window object +*/ +SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){ + pView = sqlite3TreeViewPush(pView, more); + if( pWin->zName ){ + sqlite3TreeViewLine(pView, "OVER %s", pWin->zName); + }else{ + sqlite3TreeViewLine(pView, "OVER"); + } + if( pWin->pPartition ){ + sqlite3TreeViewExprList(pView, pWin->pPartition, 1, "PARTITION-BY"); + } + if( pWin->pOrderBy ){ + sqlite3TreeViewExprList(pView, pWin->pOrderBy, 1, "ORDER-BY"); + } + if( pWin->eType ){ + sqlite3TreeViewItem(pView, pWin->eType==TK_RANGE ? "RANGE" : "ROWS", 0); + sqlite3TreeViewBound(pView, pWin->eStart, pWin->pStart, 1); + sqlite3TreeViewBound(pView, pWin->eEnd, pWin->pEnd, 0); + sqlite3TreeViewPop(pView); + } + sqlite3TreeViewPop(pView); +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a human-readable explanation for a Window Function object +*/ +SQLITE_PRIVATE void sqlite3TreeViewWinFunc(TreeView *pView, const Window *pWin, u8 more){ + pView = sqlite3TreeViewPush(pView, more); + sqlite3TreeViewLine(pView, "WINFUNC %s(%d)", + pWin->pFunc->zName, pWin->pFunc->nArg); + sqlite3TreeViewWindow(pView, pWin, 0); + sqlite3TreeViewPop(pView); +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + /* ** Generate a human-readable explanation of an expression tree. */ @@ -28128,6 +28550,9 @@ sqlite3TreeViewLine(pView, "{%d:%d}%s", pExpr->iTable, pExpr->iColumn, zFlgs); } + if( ExprHasProperty(pExpr, EP_FixedCol) ){ + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + } break; } case TK_INTEGER: { @@ -28241,10 +28666,17 @@ case TK_AGG_FUNCTION: case TK_FUNCTION: { ExprList *pFarg; /* List of function arguments */ + Window *pWin; if( ExprHasProperty(pExpr, EP_TokenOnly) ){ pFarg = 0; + pWin = 0; }else{ pFarg = pExpr->x.pList; +#ifndef SQLITE_OMIT_WINDOWFUNC + pWin = pExpr->pWin; +#else + pWin = 0; +#endif } if( pExpr->op==TK_AGG_FUNCTION ){ sqlite3TreeViewLine(pView, "AGG_FUNCTION%d %Q", @@ -28253,8 +28685,13 @@ sqlite3TreeViewLine(pView, "FUNCTION %Q", pExpr->u.zToken); } if( pFarg ){ - sqlite3TreeViewExprList(pView, pFarg, 0, 0); + sqlite3TreeViewExprList(pView, pFarg, pWin!=0, 0); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pWin ){ + sqlite3TreeViewWindow(pView, pWin, 0); } +#endif break; } #ifndef SQLITE_OMIT_SUBQUERY @@ -31286,52 +31723,52 @@ /* 1 */ "AutoCommit" OpHelp(""), /* 2 */ "Transaction" OpHelp(""), /* 3 */ "SorterNext" OpHelp(""), - /* 4 */ "PrevIfOpen" OpHelp(""), - /* 5 */ "NextIfOpen" OpHelp(""), - /* 6 */ "Prev" OpHelp(""), - /* 7 */ "Next" OpHelp(""), - /* 8 */ "Checkpoint" OpHelp(""), - /* 9 */ "JournalMode" OpHelp(""), - /* 10 */ "Vacuum" OpHelp(""), - /* 11 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"), - /* 12 */ "VUpdate" OpHelp("data=r[P3@P2]"), - /* 13 */ "Goto" OpHelp(""), - /* 14 */ "Gosub" OpHelp(""), - /* 15 */ "InitCoroutine" OpHelp(""), - /* 16 */ "Yield" OpHelp(""), - /* 17 */ "MustBeInt" OpHelp(""), - /* 18 */ "Jump" OpHelp(""), + /* 4 */ "Prev" OpHelp(""), + /* 5 */ "Next" OpHelp(""), + /* 6 */ "Checkpoint" OpHelp(""), + /* 7 */ "JournalMode" OpHelp(""), + /* 8 */ "Vacuum" OpHelp(""), + /* 9 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"), + /* 10 */ "VUpdate" OpHelp("data=r[P3@P2]"), + /* 11 */ "Goto" OpHelp(""), + /* 12 */ "Gosub" OpHelp(""), + /* 13 */ "InitCoroutine" OpHelp(""), + /* 14 */ "Yield" OpHelp(""), + /* 15 */ "MustBeInt" OpHelp(""), + /* 16 */ "Jump" OpHelp(""), + /* 17 */ "Once" OpHelp(""), + /* 18 */ "If" OpHelp(""), /* 19 */ "Not" OpHelp("r[P2]= !r[P1]"), - /* 20 */ "Once" OpHelp(""), - /* 21 */ "If" OpHelp(""), - /* 22 */ "IfNot" OpHelp(""), - /* 23 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"), - /* 24 */ "SeekLT" OpHelp("key=r[P3@P4]"), - /* 25 */ "SeekLE" OpHelp("key=r[P3@P4]"), - /* 26 */ "SeekGE" OpHelp("key=r[P3@P4]"), - /* 27 */ "SeekGT" OpHelp("key=r[P3@P4]"), - /* 28 */ "NoConflict" OpHelp("key=r[P3@P4]"), - /* 29 */ "NotFound" OpHelp("key=r[P3@P4]"), - /* 30 */ "Found" OpHelp("key=r[P3@P4]"), - /* 31 */ "SeekRowid" OpHelp("intkey=r[P3]"), - /* 32 */ "NotExists" OpHelp("intkey=r[P3]"), - /* 33 */ "Last" OpHelp(""), - /* 34 */ "IfSmaller" OpHelp(""), - /* 35 */ "SorterSort" OpHelp(""), - /* 36 */ "Sort" OpHelp(""), - /* 37 */ "Rewind" OpHelp(""), - /* 38 */ "IdxLE" OpHelp("key=r[P3@P4]"), - /* 39 */ "IdxGT" OpHelp("key=r[P3@P4]"), - /* 40 */ "IdxLT" OpHelp("key=r[P3@P4]"), - /* 41 */ "IdxGE" OpHelp("key=r[P3@P4]"), - /* 42 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), + /* 20 */ "IfNot" OpHelp(""), + /* 21 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"), + /* 22 */ "SeekLT" OpHelp("key=r[P3@P4]"), + /* 23 */ "SeekLE" OpHelp("key=r[P3@P4]"), + /* 24 */ "SeekGE" OpHelp("key=r[P3@P4]"), + /* 25 */ "SeekGT" OpHelp("key=r[P3@P4]"), + /* 26 */ "IfNoHope" OpHelp("key=r[P3@P4]"), + /* 27 */ "NoConflict" OpHelp("key=r[P3@P4]"), + /* 28 */ "NotFound" OpHelp("key=r[P3@P4]"), + /* 29 */ "Found" OpHelp("key=r[P3@P4]"), + /* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"), + /* 31 */ "NotExists" OpHelp("intkey=r[P3]"), + /* 32 */ "Last" OpHelp(""), + /* 33 */ "IfSmaller" OpHelp(""), + /* 34 */ "SorterSort" OpHelp(""), + /* 35 */ "Sort" OpHelp(""), + /* 36 */ "Rewind" OpHelp(""), + /* 37 */ "IdxLE" OpHelp("key=r[P3@P4]"), + /* 38 */ "IdxGT" OpHelp("key=r[P3@P4]"), + /* 39 */ "IdxLT" OpHelp("key=r[P3@P4]"), + /* 40 */ "IdxGE" OpHelp("key=r[P3@P4]"), + /* 41 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), + /* 42 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), - /* 45 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), - /* 46 */ "Program" OpHelp(""), - /* 47 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), - /* 48 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), - /* 49 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), + /* 45 */ "Program" OpHelp(""), + /* 46 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), + /* 47 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), + /* 48 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), + /* 49 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), /* 50 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), /* 51 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), /* 52 */ "Ne" OpHelp("IF r[P3]!=r[P1]"), @@ -31341,119 +31778,121 @@ /* 56 */ "Lt" OpHelp("IF r[P3]=r[P1]"), /* 58 */ "ElseNotEq" OpHelp(""), - /* 59 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), - /* 60 */ "IncrVacuum" OpHelp(""), - /* 61 */ "VNext" OpHelp(""), - /* 62 */ "Init" OpHelp("Start at P2"), - /* 63 */ "Return" OpHelp(""), - /* 64 */ "EndCoroutine" OpHelp(""), - /* 65 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), - /* 66 */ "Halt" OpHelp(""), - /* 67 */ "Integer" OpHelp("r[P2]=P1"), - /* 68 */ "Int64" OpHelp("r[P2]=P4"), - /* 69 */ "String" OpHelp("r[P2]='P4' (len=P1)"), - /* 70 */ "Null" OpHelp("r[P2..P3]=NULL"), - /* 71 */ "SoftNull" OpHelp("r[P1]=NULL"), - /* 72 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), - /* 73 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"), - /* 74 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), - /* 75 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), - /* 76 */ "SCopy" OpHelp("r[P2]=r[P1]"), - /* 77 */ "IntCopy" OpHelp("r[P2]=r[P1]"), - /* 78 */ "ResultRow" OpHelp("output=r[P1@P2]"), - /* 79 */ "CollSeq" OpHelp(""), - /* 80 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"), - /* 81 */ "RealAffinity" OpHelp(""), - /* 82 */ "Cast" OpHelp("affinity(r[P1])"), - /* 83 */ "Permutation" OpHelp(""), - /* 84 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"), - /* 85 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"), - /* 86 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"), - /* 87 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<>r[P1]"), - /* 89 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"), - /* 90 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"), - /* 91 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"), - /* 92 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"), - /* 93 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"), - /* 94 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"), - /* 95 */ "IsTrue" OpHelp("r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4"), - /* 96 */ "BitNot" OpHelp("r[P1]= ~r[P1]"), - /* 97 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"), - /* 98 */ "Column" OpHelp("r[P3]=PX"), - /* 99 */ "String8" OpHelp("r[P2]='P4'"), - /* 100 */ "Affinity" OpHelp("affinity(r[P1@P2])"), - /* 101 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"), - /* 102 */ "Count" OpHelp("r[P2]=count()"), - /* 103 */ "ReadCookie" OpHelp(""), - /* 104 */ "SetCookie" OpHelp(""), - /* 105 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"), - /* 106 */ "OpenRead" OpHelp("root=P2 iDb=P3"), - /* 107 */ "OpenWrite" OpHelp("root=P2 iDb=P3"), - /* 108 */ "OpenDup" OpHelp(""), - /* 109 */ "OpenAutoindex" OpHelp("nColumn=P2"), - /* 110 */ "OpenEphemeral" OpHelp("nColumn=P2"), - /* 111 */ "SorterOpen" OpHelp(""), - /* 112 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"), - /* 113 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"), - /* 114 */ "Close" OpHelp(""), - /* 115 */ "ColumnsUsed" OpHelp(""), - /* 116 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"), - /* 117 */ "NewRowid" OpHelp("r[P2]=rowid"), - /* 118 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"), - /* 119 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"), - /* 120 */ "Delete" OpHelp(""), - /* 121 */ "ResetCount" OpHelp(""), - /* 122 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"), - /* 123 */ "SorterData" OpHelp("r[P2]=data"), - /* 124 */ "RowData" OpHelp("r[P2]=data"), - /* 125 */ "Rowid" OpHelp("r[P2]=rowid"), - /* 126 */ "NullRow" OpHelp(""), - /* 127 */ "SeekEnd" OpHelp(""), - /* 128 */ "SorterInsert" OpHelp("key=r[P2]"), - /* 129 */ "IdxInsert" OpHelp("key=r[P2]"), - /* 130 */ "IdxDelete" OpHelp("key=r[P2@P3]"), - /* 131 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"), - /* 132 */ "IdxRowid" OpHelp("r[P2]=rowid"), - /* 133 */ "Destroy" OpHelp(""), - /* 134 */ "Real" OpHelp("r[P2]=P4"), - /* 135 */ "Clear" OpHelp(""), - /* 136 */ "ResetSorter" OpHelp(""), - /* 137 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"), - /* 138 */ "SqlExec" OpHelp(""), - /* 139 */ "ParseSchema" OpHelp(""), - /* 140 */ "LoadAnalysis" OpHelp(""), - /* 141 */ "DropTable" OpHelp(""), - /* 142 */ "DropIndex" OpHelp(""), - /* 143 */ "DropTrigger" OpHelp(""), - /* 144 */ "IntegrityCk" OpHelp(""), - /* 145 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), - /* 146 */ "Param" OpHelp(""), - /* 147 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), - /* 148 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), - /* 149 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), - /* 150 */ "AggStep0" OpHelp("accum=r[P3] step(r[P2@P5])"), - /* 151 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), - /* 152 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), - /* 153 */ "Expire" OpHelp(""), - /* 154 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), - /* 155 */ "VBegin" OpHelp(""), - /* 156 */ "VCreate" OpHelp(""), - /* 157 */ "VDestroy" OpHelp(""), - /* 158 */ "VOpen" OpHelp(""), - /* 159 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), - /* 160 */ "VRename" OpHelp(""), - /* 161 */ "Pagecount" OpHelp(""), - /* 162 */ "MaxPgcnt" OpHelp(""), - /* 163 */ "PureFunc0" OpHelp(""), - /* 164 */ "Function0" OpHelp("r[P3]=func(r[P2@P5])"), - /* 165 */ "PureFunc" OpHelp(""), - /* 166 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"), - /* 167 */ "Trace" OpHelp(""), - /* 168 */ "CursorHint" OpHelp(""), - /* 169 */ "Noop" OpHelp(""), - /* 170 */ "Explain" OpHelp(""), - /* 171 */ "Abortable" OpHelp(""), + /* 59 */ "IncrVacuum" OpHelp(""), + /* 60 */ "VNext" OpHelp(""), + /* 61 */ "Init" OpHelp("Start at P2"), + /* 62 */ "PureFunc0" OpHelp(""), + /* 63 */ "Function0" OpHelp("r[P3]=func(r[P2@P5])"), + /* 64 */ "PureFunc" OpHelp(""), + /* 65 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"), + /* 66 */ "Return" OpHelp(""), + /* 67 */ "EndCoroutine" OpHelp(""), + /* 68 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), + /* 69 */ "Halt" OpHelp(""), + /* 70 */ "Integer" OpHelp("r[P2]=P1"), + /* 71 */ "Int64" OpHelp("r[P2]=P4"), + /* 72 */ "String" OpHelp("r[P2]='P4' (len=P1)"), + /* 73 */ "Null" OpHelp("r[P2..P3]=NULL"), + /* 74 */ "SoftNull" OpHelp("r[P1]=NULL"), + /* 75 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), + /* 76 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"), + /* 77 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), + /* 78 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), + /* 79 */ "SCopy" OpHelp("r[P2]=r[P1]"), + /* 80 */ "IntCopy" OpHelp("r[P2]=r[P1]"), + /* 81 */ "ResultRow" OpHelp("output=r[P1@P2]"), + /* 82 */ "CollSeq" OpHelp(""), + /* 83 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"), + /* 84 */ "RealAffinity" OpHelp(""), + /* 85 */ "Cast" OpHelp("affinity(r[P1])"), + /* 86 */ "Permutation" OpHelp(""), + /* 87 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"), + /* 88 */ "IsTrue" OpHelp("r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4"), + /* 89 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"), + /* 90 */ "Column" OpHelp("r[P3]=PX"), + /* 91 */ "Affinity" OpHelp("affinity(r[P1@P2])"), + /* 92 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"), + /* 93 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"), + /* 94 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<>r[P1]"), + /* 96 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"), + /* 97 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"), + /* 98 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"), + /* 99 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"), + /* 100 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"), + /* 101 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"), + /* 102 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"), + /* 103 */ "BitNot" OpHelp("r[P2]= ~r[P1]"), + /* 104 */ "Count" OpHelp("r[P2]=count()"), + /* 105 */ "ReadCookie" OpHelp(""), + /* 106 */ "String8" OpHelp("r[P2]='P4'"), + /* 107 */ "SetCookie" OpHelp(""), + /* 108 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"), + /* 109 */ "OpenRead" OpHelp("root=P2 iDb=P3"), + /* 110 */ "OpenWrite" OpHelp("root=P2 iDb=P3"), + /* 111 */ "OpenDup" OpHelp(""), + /* 112 */ "OpenAutoindex" OpHelp("nColumn=P2"), + /* 113 */ "OpenEphemeral" OpHelp("nColumn=P2"), + /* 114 */ "SorterOpen" OpHelp(""), + /* 115 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"), + /* 116 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"), + /* 117 */ "Close" OpHelp(""), + /* 118 */ "ColumnsUsed" OpHelp(""), + /* 119 */ "SeekHit" OpHelp("seekHit=P2"), + /* 120 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"), + /* 121 */ "NewRowid" OpHelp("r[P2]=rowid"), + /* 122 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"), + /* 123 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"), + /* 124 */ "Delete" OpHelp(""), + /* 125 */ "ResetCount" OpHelp(""), + /* 126 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"), + /* 127 */ "SorterData" OpHelp("r[P2]=data"), + /* 128 */ "RowData" OpHelp("r[P2]=data"), + /* 129 */ "Rowid" OpHelp("r[P2]=rowid"), + /* 130 */ "NullRow" OpHelp(""), + /* 131 */ "SeekEnd" OpHelp(""), + /* 132 */ "SorterInsert" OpHelp("key=r[P2]"), + /* 133 */ "IdxInsert" OpHelp("key=r[P2]"), + /* 134 */ "IdxDelete" OpHelp("key=r[P2@P3]"), + /* 135 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"), + /* 136 */ "IdxRowid" OpHelp("r[P2]=rowid"), + /* 137 */ "Destroy" OpHelp(""), + /* 138 */ "Clear" OpHelp(""), + /* 139 */ "ResetSorter" OpHelp(""), + /* 140 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"), + /* 141 */ "Real" OpHelp("r[P2]=P4"), + /* 142 */ "SqlExec" OpHelp(""), + /* 143 */ "ParseSchema" OpHelp(""), + /* 144 */ "LoadAnalysis" OpHelp(""), + /* 145 */ "DropTable" OpHelp(""), + /* 146 */ "DropIndex" OpHelp(""), + /* 147 */ "DropTrigger" OpHelp(""), + /* 148 */ "IntegrityCk" OpHelp(""), + /* 149 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), + /* 150 */ "Param" OpHelp(""), + /* 151 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), + /* 152 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), + /* 153 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), + /* 154 */ "AggInverse" OpHelp("accum=r[P3] inverse(r[P2@P5])"), + /* 155 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 156 */ "AggStep1" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 157 */ "AggValue" OpHelp("r[P3]=value N=P2"), + /* 158 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), + /* 159 */ "Expire" OpHelp(""), + /* 160 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), + /* 161 */ "VBegin" OpHelp(""), + /* 162 */ "VCreate" OpHelp(""), + /* 163 */ "VDestroy" OpHelp(""), + /* 164 */ "VOpen" OpHelp(""), + /* 165 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), + /* 166 */ "VRename" OpHelp(""), + /* 167 */ "Pagecount" OpHelp(""), + /* 168 */ "MaxPgcnt" OpHelp(""), + /* 169 */ "Trace" OpHelp(""), + /* 170 */ "CursorHint" OpHelp(""), + /* 171 */ "Noop" OpHelp(""), + /* 172 */ "Explain" OpHelp(""), + /* 173 */ "Abortable" OpHelp(""), }; return azName[i]; } @@ -32182,7 +32621,11 @@ #define osLstat ((int(*)(const char*,struct stat*))aSyscall[27].pCurrent) #if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE) +# ifdef __ANDROID__ + { "ioctl", (sqlite3_syscall_ptr)(int(*)(int, int, ...))ioctl, 0 }, +# else { "ioctl", (sqlite3_syscall_ptr)ioctl, 0 }, +# endif #else { "ioctl", (sqlite3_syscall_ptr)0, 0 }, #endif @@ -32363,12 +32806,25 @@ ** unixEnterMutex() ** assert( unixMutexHeld() ); ** unixEnterLeave() +** +** To prevent deadlock, the global unixBigLock must must be acquired +** before the unixInodeInfo.pLockMutex mutex, if both are held. It is +** OK to get the pLockMutex without holding unixBigLock first, but if +** that happens, the unixBigLock mutex must not be acquired until after +** pLockMutex is released. +** +** OK: enter(unixBigLock), enter(pLockInfo) +** OK: enter(unixBigLock) +** OK: enter(pLockInfo) +** ERROR: enter(pLockInfo), enter(unixBigLock) */ static sqlite3_mutex *unixBigLock = 0; static void unixEnterMutex(void){ + assert( sqlite3_mutex_notheld(unixBigLock) ); /* Not a recursive mutex */ sqlite3_mutex_enter(unixBigLock); } static void unixLeaveMutex(void){ + assert( sqlite3_mutex_held(unixBigLock) ); sqlite3_mutex_leave(unixBigLock); } #ifdef SQLITE_DEBUG @@ -32769,16 +33225,34 @@ ** A single inode can have multiple file descriptors, so each unixFile ** structure contains a pointer to an instance of this object and this ** object keeps a count of the number of unixFile pointing to it. +** +** Mutex rules: +** +** (1) Only the pLockMutex mutex must be held in order to read or write +** any of the locking fields: +** nShared, nLock, eFileLock, bProcessLock, pUnused +** +** (2) When nRef>0, then the following fields are unchanging and can +** be read (but not written) without holding any mutex: +** fileId, pLockMutex +** +** (3) With the exceptions above, all the fields may only be read +** or written while holding the global unixBigLock mutex. +** +** Deadlock prevention: The global unixBigLock mutex may not +** be acquired while holding the pLockMutex mutex. If both unixBigLock +** and pLockMutex are needed, then unixBigLock must be acquired first. */ struct unixInodeInfo { struct unixFileId fileId; /* The lookup key */ - int nShared; /* Number of SHARED locks held */ - unsigned char eFileLock; /* One of SHARED_LOCK, RESERVED_LOCK etc. */ - unsigned char bProcessLock; /* An exclusive process lock is held */ + sqlite3_mutex *pLockMutex; /* Hold this mutex for... */ + int nShared; /* Number of SHARED locks held */ + int nLock; /* Number of outstanding file locks */ + unsigned char eFileLock; /* One of SHARED_LOCK, RESERVED_LOCK etc. */ + unsigned char bProcessLock; /* An exclusive process lock is held */ + UnixUnusedFd *pUnused; /* Unused file descriptors to close */ int nRef; /* Number of pointers to this structure */ unixShmNode *pShmNode; /* Shared memory associated with this inode */ - int nLock; /* Number of outstanding file locks */ - UnixUnusedFd *pUnused; /* Unused file descriptors to close */ unixInodeInfo *pNext; /* List of all unixInodeInfo objects */ unixInodeInfo *pPrev; /* .... doubly linked */ #if SQLITE_ENABLE_LOCKING_STYLE @@ -32794,7 +33268,21 @@ ** A lists of all unixInodeInfo objects. */ static unixInodeInfo *inodeList = 0; /* All unixInodeInfo objects */ -static unsigned int nUnusedFd = 0; /* Total unused file descriptors */ + +#ifdef SQLITE_DEBUG +/* +** True if the inode mutex is held, or not. Used only within assert() +** to help verify correct mutex usage. +*/ +int unixFileMutexHeld(unixFile *pFile){ + assert( pFile->pInode ); + return sqlite3_mutex_held(pFile->pInode->pLockMutex); +} +int unixFileMutexNotheld(unixFile *pFile){ + assert( pFile->pInode ); + return sqlite3_mutex_notheld(pFile->pInode->pLockMutex); +} +#endif /* ** @@ -32900,11 +33388,11 @@ unixInodeInfo *pInode = pFile->pInode; UnixUnusedFd *p; UnixUnusedFd *pNext; + assert( unixFileMutexHeld(pFile) ); for(p=pInode->pUnused; p; p=pNext){ pNext = p->pNext; robust_close(pFile, p->fd, __LINE__); sqlite3_free(p); - nUnusedFd--; } pInode->pUnused = 0; } @@ -32918,11 +33406,14 @@ static void releaseInodeInfo(unixFile *pFile){ unixInodeInfo *pInode = pFile->pInode; assert( unixMutexHeld() ); + assert( unixFileMutexNotheld(pFile) ); if( ALWAYS(pInode) ){ pInode->nRef--; if( pInode->nRef==0 ){ assert( pInode->pShmNode==0 ); + sqlite3_mutex_enter(pInode->pLockMutex); closePendingFds(pFile); + sqlite3_mutex_leave(pInode->pLockMutex); if( pInode->pPrev ){ assert( pInode->pPrev->pNext==pInode ); pInode->pPrev->pNext = pInode->pNext; @@ -32934,10 +33425,10 @@ assert( pInode->pNext->pPrev==pInode ); pInode->pNext->pPrev = pInode->pPrev; } + sqlite3_mutex_free(pInode->pLockMutex); sqlite3_free(pInode); } } - assert( inodeList!=0 || nUnusedFd==0 ); } /* @@ -33007,7 +33498,6 @@ #else fileId.ino = (u64)statbuf.st_ino; #endif - assert( inodeList!=0 || nUnusedFd==0 ); pInode = inodeList; while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){ pInode = pInode->pNext; @@ -33019,6 +33509,13 @@ } memset(pInode, 0, sizeof(*pInode)); memcpy(&pInode->fileId, &fileId, sizeof(fileId)); + if( sqlite3GlobalConfig.bCoreMutex ){ + pInode->pLockMutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pInode->pLockMutex==0 ){ + sqlite3_free(pInode); + return SQLITE_NOMEM_BKPT; + } + } pInode->nRef = 1; pInode->pNext = inodeList; pInode->pPrev = 0; @@ -33097,7 +33594,7 @@ assert( pFile ); assert( pFile->eFileLock<=SHARED_LOCK ); - unixEnterMutex(); /* Because pFile->pInode is shared across threads */ + sqlite3_mutex_enter(pFile->pInode->pLockMutex); /* Check if a thread in this process holds such a lock */ if( pFile->pInode->eFileLock>SHARED_LOCK ){ @@ -33122,7 +33619,7 @@ } #endif - unixLeaveMutex(); + sqlite3_mutex_leave(pFile->pInode->pLockMutex); OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved)); *pResOut = reserved; @@ -33188,8 +33685,8 @@ static int unixFileLock(unixFile *pFile, struct flock *pLock){ int rc; unixInodeInfo *pInode = pFile->pInode; - assert( unixMutexHeld() ); assert( pInode!=0 ); + assert( sqlite3_mutex_held(pInode->pLockMutex) ); if( (pFile->ctrlFlags & (UNIXFILE_EXCL|UNIXFILE_RDONLY))==UNIXFILE_EXCL ){ if( pInode->bProcessLock==0 ){ struct flock lock; @@ -33308,8 +33805,8 @@ /* This mutex is needed because pFile->pInode is shared across threads */ - unixEnterMutex(); pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); /* If some thread using this PID has a lock via a different unixFile* ** handle that precludes the requested lock, return BUSY. @@ -33452,7 +33949,7 @@ } end_lock: - unixLeaveMutex(); + sqlite3_mutex_leave(pInode->pLockMutex); OSTRACE(("LOCK %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock), rc==SQLITE_OK ? "ok" : "failed")); return rc; @@ -33465,11 +33962,11 @@ static void setPendingFd(unixFile *pFile){ unixInodeInfo *pInode = pFile->pInode; UnixUnusedFd *p = pFile->pPreallocatedUnused; + assert( unixFileMutexHeld(pFile) ); p->pNext = pInode->pUnused; pInode->pUnused = p; pFile->h = -1; pFile->pPreallocatedUnused = 0; - nUnusedFd++; } /* @@ -33500,8 +33997,8 @@ if( pFile->eFileLock<=eFileLock ){ return SQLITE_OK; } - unixEnterMutex(); pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); assert( pInode->nShared!=0 ); if( pFile->eFileLock>SHARED_LOCK ){ assert( pInode->eFileLock==pFile->eFileLock ); @@ -33627,14 +34124,14 @@ */ pInode->nLock--; assert( pInode->nLock>=0 ); - if( pInode->nLock==0 ){ - closePendingFds(pFile); - } + if( pInode->nLock==0 ) closePendingFds(pFile); } end_unlock: - unixLeaveMutex(); - if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock; + sqlite3_mutex_leave(pInode->pLockMutex); + if( rc==SQLITE_OK ){ + pFile->eFileLock = eFileLock; + } return rc; } @@ -33705,15 +34202,20 @@ static int unixClose(sqlite3_file *id){ int rc = SQLITE_OK; unixFile *pFile = (unixFile *)id; + unixInodeInfo *pInode = pFile->pInode; + + assert( pInode!=0 ); verifyDbFile(pFile); unixUnlock(id, NO_LOCK); + assert( unixFileMutexNotheld(pFile) ); unixEnterMutex(); /* unixFile.pInode is always valid here. Otherwise, a different close ** routine (e.g. nolockClose()) would be called instead. */ assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 ); - if( ALWAYS(pFile->pInode) && pFile->pInode->nLock ){ + sqlite3_mutex_enter(pInode->pLockMutex); + if( pInode->nLock ){ /* If there are outstanding locks, do not actually close the file just ** yet because that would clear those locks. Instead, add the file ** descriptor to pInode->pUnused list. It will be automatically closed @@ -33721,6 +34223,7 @@ */ setPendingFd(pFile); } + sqlite3_mutex_leave(pInode->pLockMutex); releaseInodeInfo(pFile); rc = closeUnixFile(id); unixLeaveMutex(); @@ -34318,6 +34821,7 @@ unixFile *pFile = (unixFile*)id; semXUnlock(id, NO_LOCK); assert( pFile ); + assert( unixFileMutexNotheld(pFile) ); unixEnterMutex(); releaseInodeInfo(pFile); unixLeaveMutex(); @@ -34432,8 +34936,7 @@ *pResOut = 1; return SQLITE_OK; } - unixEnterMutex(); /* Because pFile->pInode is shared across threads */ - + sqlite3_mutex_enter(pFile->pInode->pLockMutex); /* Check if a thread in this process holds such a lock */ if( pFile->pInode->eFileLock>SHARED_LOCK ){ reserved = 1; @@ -34457,7 +34960,7 @@ } } - unixLeaveMutex(); + sqlite3_mutex_leave(pFile->pInode->pLockMutex); OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved)); *pResOut = reserved; @@ -34520,8 +35023,8 @@ /* This mutex is needed because pFile->pInode is shared across threads */ - unixEnterMutex(); pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); /* If some thread using this PID has a lock via a different unixFile* ** handle that precludes the requested lock, return BUSY. @@ -34657,7 +35160,7 @@ } afp_end_lock: - unixLeaveMutex(); + sqlite3_mutex_leave(pInode->pLockMutex); OSTRACE(("LOCK %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock), rc==SQLITE_OK ? "ok" : "failed")); return rc; @@ -34689,8 +35192,8 @@ if( pFile->eFileLock<=eFileLock ){ return SQLITE_OK; } - unixEnterMutex(); pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); assert( pInode->nShared!=0 ); if( pFile->eFileLock>SHARED_LOCK ){ assert( pInode->eFileLock==pFile->eFileLock ); @@ -34759,14 +35262,14 @@ if( rc==SQLITE_OK ){ pInode->nLock--; assert( pInode->nLock>=0 ); - if( pInode->nLock==0 ){ - closePendingFds(pFile); - } + if( pInode->nLock==0 ) closePendingFds(pFile); } } - unixLeaveMutex(); - if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock; + sqlite3_mutex_leave(pInode->pLockMutex); + if( rc==SQLITE_OK ){ + pFile->eFileLock = eFileLock; + } return rc; } @@ -34778,14 +35281,20 @@ unixFile *pFile = (unixFile*)id; assert( id!=0 ); afpUnlock(id, NO_LOCK); + assert( unixFileMutexNotheld(pFile) ); unixEnterMutex(); - if( pFile->pInode && pFile->pInode->nLock ){ - /* If there are outstanding locks, do not actually close the file just - ** yet because that would clear those locks. Instead, add the file - ** descriptor to pInode->aPending. It will be automatically closed when - ** the last lock is cleared. - */ - setPendingFd(pFile); + if( pFile->pInode ){ + unixInodeInfo *pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); + if( pInode->nLock ){ + /* If there are outstanding locks, do not actually close the file just + ** yet because that would clear those locks. Instead, add the file + ** descriptor to pInode->aPending. It will be automatically closed when + ** the last lock is cleared. + */ + setPendingFd(pFile); + } + sqlite3_mutex_leave(pInode->pLockMutex); } releaseInodeInfo(pFile); sqlite3_free(pFile->lockingContext); @@ -36091,6 +36600,7 @@ /* Check to see if a unixShmNode object already exists. Reuse an existing ** one if present. Create a new one if necessary. */ + assert( unixFileMutexNotheld(pDbFd) ); unixEnterMutex(); pInode = pDbFd->pInode; pShmNode = pInode->pShmNode; @@ -36473,6 +36983,9 @@ ){ UNUSED_PARAMETER(fd); sqlite3MemoryBarrier(); /* compiler-defined memory barrier */ + assert( fd->pMethods->xLock==nolockLock + || unixFileMutexNotheld((unixFile*)fd) + ); unixEnterMutex(); /* Also mutex, for redundancy */ unixLeaveMutex(); } @@ -36514,6 +37027,7 @@ /* If pShmNode->nRef has reached 0, then close the underlying ** shared-memory file, too */ + assert( unixFileMutexNotheld(pDbFd) ); unixEnterMutex(); assert( pShmNode->nRef>0 ); pShmNode->nRef--; @@ -36840,7 +37354,7 @@ IOMETHODS( nolockIoFinder, /* Finder function name */ nolockIoMethods, /* sqlite3_io_methods object name */ - 3, /* shared memory is disabled */ + 3, /* shared memory and mmap are enabled */ nolockClose, /* xClose method */ nolockLock, /* xLock method */ nolockUnlock, /* xUnlock method */ @@ -37336,7 +37850,7 @@ ** ** Even if a subsequent open() call does succeed, the consequences of ** not searching for a reusable file descriptor are not dire. */ - if( nUnusedFd>0 && 0==osStat(zPath, &sStat) ){ + if( inodeList!=0 && 0==osStat(zPath, &sStat) ){ unixInodeInfo *pInode; pInode = inodeList; @@ -37346,12 +37860,14 @@ } if( pInode ){ UnixUnusedFd **pp; + assert( sqlite3_mutex_notheld(pInode->pLockMutex) ); + sqlite3_mutex_enter(pInode->pLockMutex); for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext)); pUnused = *pp; if( pUnused ){ - nUnusedFd--; *pp = pUnused->pNext; } + sqlite3_mutex_leave(pInode->pLockMutex); } } unixLeaveMutex(); @@ -42554,6 +43070,9 @@ winFile *pFile = (winFile*)id; /* File handle object */ int rc = SQLITE_OK; /* Return code for this function */ DWORD lastErrno; +#if SQLITE_MAX_MMAP_SIZE>0 + sqlite3_int64 oldMmapSize; +#endif assert( pFile ); SimulateIOError(return SQLITE_IOERR_TRUNCATE); @@ -42569,6 +43088,15 @@ nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; } +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->pMapRegion ){ + oldMmapSize = pFile->mmapSize; + }else{ + oldMmapSize = 0; + } + winUnmapfile(pFile); +#endif + /* SetEndOfFile() returns non-zero when successful, or zero when it fails. */ if( winSeekFile(pFile, nByte) ){ rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno, @@ -42581,12 +43109,12 @@ } #if SQLITE_MAX_MMAP_SIZE>0 - /* If the file was truncated to a size smaller than the currently - ** mapped region, reduce the effective mapping size as well. SQLite will - ** use read() and write() to access data beyond this point from now on. - */ - if( pFile->pMapRegion && nBytemmapSize ){ - pFile->mmapSize = nByte; + if( rc==SQLITE_OK && oldMmapSize>0 ){ + if( oldMmapSize>nByte ){ + winMapfile(pFile, -1); + }else{ + winMapfile(pFile, oldMmapSize); + } } #endif @@ -45774,8 +46302,8 @@ ** This file also implements interface sqlite3_serialize() and ** sqlite3_deserialize(). */ -#ifdef SQLITE_ENABLE_DESERIALIZE /* #include "sqliteInt.h" */ +#ifdef SQLITE_ENABLE_DESERIALIZE /* ** Forward declaration of objects used by this utility @@ -49023,30 +49551,23 @@ #define ROWSET_NEXT 0x02 /* True if sqlite3RowSetNext() has been called */ /* -** Turn bulk memory into a RowSet object. N bytes of memory -** are available at pSpace. The db pointer is used as a memory context -** for any subsequent allocations that need to occur. -** Return a pointer to the new RowSet object. -** -** It must be the case that N is sufficient to make a Rowset. If not -** an assertion fault occurs. -** -** If N is larger than the minimum, use the surplus as an initial -** allocation of entries available to be filled. +** Allocate a RowSet object. Return NULL if a memory allocation +** error occurs. */ -SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsigned int N){ - RowSet *p; - assert( N >= ROUND8(sizeof(*p)) ); - p = pSpace; - p->pChunk = 0; - p->db = db; - p->pEntry = 0; - p->pLast = 0; - p->pForest = 0; - p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p); - p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry)); - p->rsFlags = ROWSET_SORTED; - p->iBatch = 0; +SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db){ + RowSet *p = sqlite3DbMallocRawNN(db, sizeof(*p)); + if( p ){ + int N = sqlite3DbMallocSize(db, p); + p->pChunk = 0; + p->db = db; + p->pEntry = 0; + p->pLast = 0; + p->pForest = 0; + p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p); + p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry)); + p->rsFlags = ROWSET_SORTED; + p->iBatch = 0; + } return p; } @@ -49055,7 +49576,8 @@ ** the RowSet has allocated over its lifetime. This routine is ** the destructor for the RowSet. */ -SQLITE_PRIVATE void sqlite3RowSetClear(RowSet *p){ +SQLITE_PRIVATE void sqlite3RowSetClear(void *pArg){ + RowSet *p = (RowSet*)pArg; struct RowSetChunk *pChunk, *pNextChunk; for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){ pNextChunk = pChunk->pNextChunk; @@ -49070,6 +49592,16 @@ } /* +** Deallocate all chunks from a RowSet. This frees all memory that +** the RowSet has allocated over its lifetime. This routine is +** the destructor for the RowSet. +*/ +SQLITE_PRIVATE void sqlite3RowSetDelete(void *pArg){ + sqlite3RowSetClear(pArg); + sqlite3DbFree(((RowSet*)pArg)->db, pArg); +} + +/* ** Allocate a new RowSetEntry object that is associated with the ** given RowSet. Return a pointer to the new and completely uninitialized ** objected. @@ -49556,6 +50088,8 @@ SQLITE_PRIVATE int sqlite3WalSnapshotGet(Wal *pWal, sqlite3_snapshot **ppSnapshot); SQLITE_PRIVATE void sqlite3WalSnapshotOpen(Wal *pWal, sqlite3_snapshot *pSnapshot); SQLITE_PRIVATE int sqlite3WalSnapshotRecover(Wal *pWal); +SQLITE_PRIVATE int sqlite3WalSnapshotCheck(Wal *pWal, sqlite3_snapshot *pSnapshot); +SQLITE_PRIVATE void sqlite3WalSnapshotUnlock(Wal *pWal); #endif #ifdef SQLITE_ENABLE_ZIPVFS @@ -50549,8 +51083,12 @@ ** to "print *pPager" in gdb: ** ** (gdb) printf "%s", print_pager_state(pPager) +** +** This routine has external linkage in order to suppress compiler warnings +** about an unused function. It is enclosed within SQLITE_DEBUG and so does +** not appear in normal builds. */ -static char *print_pager_state(Pager *p){ +char *print_pager_state(Pager *p){ static char zRet[1024]; sqlite3_snprintf(1024, zRet, @@ -51316,7 +51854,6 @@ ** Return the pPager->iDataVersion value */ SQLITE_PRIVATE u32 sqlite3PagerDataVersion(Pager *pPager){ - assert( pPager->eState>PAGER_OPEN ); return pPager->iDataVersion; } @@ -55934,9 +56471,10 @@ ** backup in progress needs to be restarted. */ sqlite3BackupRestart(pPager->pBackup); }else{ + PgHdr *pList; if( pagerUseWal(pPager) ){ - PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache); PgHdr *pPageOne = 0; + pList = sqlite3PcacheDirtyList(pPager->pPCache); if( pList==0 ){ /* Must have at least one page for the WAL commit flag. ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */ @@ -55957,14 +56495,14 @@ ** should be used. No rollback journal is created if batch-atomic-write ** is enabled. */ - sqlite3_file *fd = pPager->fd; #ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE - const int bBatch = zMaster==0 /* An SQLITE_IOCAP_BATCH_ATOMIC commit */ + sqlite3_file *fd = pPager->fd; + int bBatch = zMaster==0 /* An SQLITE_IOCAP_BATCH_ATOMIC commit */ && (sqlite3OsDeviceCharacteristics(fd) & SQLITE_IOCAP_BATCH_ATOMIC) && !pPager->noSync && sqlite3JournalIsInMemory(pPager->jfd); #else -# define bBatch 0 +# define bBatch 0 #endif #ifdef SQLITE_ENABLE_ATOMIC_WRITE @@ -56016,15 +56554,16 @@ } } } -#else +#else /* SQLITE_ENABLE_ATOMIC_WRITE */ #ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE if( zMaster ){ rc = sqlite3JournalCreate(pPager->jfd); if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + assert( bBatch==0 ); } #endif rc = pager_incr_changecounter(pPager, 0); -#endif +#endif /* !SQLITE_ENABLE_ATOMIC_WRITE */ if( rc!=SQLITE_OK ) goto commit_phase_one_exit; /* Write the master journal name into the journal file. If a master @@ -56048,24 +56587,36 @@ rc = syncJournal(pPager, 0); if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + pList = sqlite3PcacheDirtyList(pPager->pPCache); +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE if( bBatch ){ - /* The pager is now in DBMOD state. But regardless of what happens - ** next, attempting to play the journal back into the database would - ** be unsafe. Close it now to make sure that does not happen. */ - sqlite3OsClose(pPager->jfd); rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, 0); - if( rc!=SQLITE_OK ) goto commit_phase_one_exit; - } - rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache)); - if( bBatch ){ if( rc==SQLITE_OK ){ - rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); + rc = pager_write_pagelist(pPager, pList); + if( rc==SQLITE_OK ){ + rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); + } + if( rc!=SQLITE_OK ){ + sqlite3OsFileControlHint(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0); + } } - if( rc!=SQLITE_OK ){ - sqlite3OsFileControlHint(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0); + + if( (rc&0xFF)==SQLITE_IOERR && rc!=SQLITE_IOERR_NOMEM ){ + rc = sqlite3JournalCreate(pPager->jfd); + if( rc!=SQLITE_OK ){ + sqlite3OsClose(pPager->jfd); + goto commit_phase_one_exit; + } + bBatch = 0; + }else{ + sqlite3OsClose(pPager->jfd); } } +#endif /* SQLITE_ENABLE_BATCH_ATOMIC_WRITE */ + if( bBatch==0 ){ + rc = pager_write_pagelist(pPager, pList); + } if( rc!=SQLITE_OK ){ assert( rc!=SQLITE_IOERR_BLOCKED ); goto commit_phase_one_exit; @@ -56817,13 +57368,6 @@ SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){ u8 eOld = pPager->journalMode; /* Prior journalmode */ -#ifdef SQLITE_DEBUG - /* The print_pager_state() routine is intended to be used by the debugger - ** only. We invoke it once here to suppress a compiler warning. */ - print_pager_state(pPager); -#endif - - /* The eMode parameter is always valid */ assert( eMode==PAGER_JOURNALMODE_DELETE || eMode==PAGER_JOURNALMODE_TRUNCATE @@ -57192,6 +57736,38 @@ } return rc; } + +/* +** The caller currently has a read transaction open on the database. +** If this is not a WAL database, SQLITE_ERROR is returned. Otherwise, +** this function takes a SHARED lock on the CHECKPOINTER slot and then +** checks if the snapshot passed as the second argument is still +** available. If so, SQLITE_OK is returned. +** +** If the snapshot is not available, SQLITE_ERROR is returned. Or, if +** the CHECKPOINTER lock cannot be obtained, SQLITE_BUSY. If any error +** occurs (any value other than SQLITE_OK is returned), the CHECKPOINTER +** lock is released before returning. +*/ +SQLITE_PRIVATE int sqlite3PagerSnapshotCheck(Pager *pPager, sqlite3_snapshot *pSnapshot){ + int rc; + if( pPager->pWal ){ + rc = sqlite3WalSnapshotCheck(pPager->pWal, pSnapshot); + }else{ + rc = SQLITE_ERROR; + } + return rc; +} + +/* +** Release a lock obtained by an earlier successful call to +** sqlite3PagerSnapshotCheck(). +*/ +SQLITE_PRIVATE void sqlite3PagerSnapshotUnlock(Pager *pPager){ + assert( pPager->pWal ); + return sqlite3WalSnapshotUnlock(pPager->pWal); +} + #endif /* SQLITE_ENABLE_SNAPSHOT */ #endif /* !SQLITE_OMIT_WAL */ @@ -57474,6 +58050,18 @@ #endif /* +** WAL mode depends on atomic aligned 32-bit loads and stores in a few +** places. The following macros try to make this explicit. +*/ +#if GCC_VESRION>=5004000 +# define AtomicLoad(PTR) __atomic_load_n((PTR),__ATOMIC_RELAXED) +# define AtomicStore(PTR,VAL) __atomic_store_n((PTR),(VAL),__ATOMIC_RELAXED) +#else +# define AtomicLoad(PTR) (*(PTR)) +# define AtomicStore(PTR,VAL) (*(PTR) = (VAL)) +#endif + +/* ** The maximum (and only) versions of the wal and wal-index formats ** that may be interpreted by this version of SQLite. ** @@ -58095,48 +58683,51 @@ return (iPriorHash+1)&(HASHTABLE_NSLOT-1); } +/* +** An instance of the WalHashLoc object is used to describe the location +** of a page hash table in the wal-index. This becomes the return value +** from walHashGet(). +*/ +typedef struct WalHashLoc WalHashLoc; +struct WalHashLoc { + volatile ht_slot *aHash; /* Start of the wal-index hash table */ + volatile u32 *aPgno; /* aPgno[1] is the page of first frame indexed */ + u32 iZero; /* One less than the frame number of first indexed*/ +}; + /* ** Return pointers to the hash table and page number array stored on ** page iHash of the wal-index. The wal-index is broken into 32KB pages ** numbered starting from 0. ** -** Set output variable *paHash to point to the start of the hash table -** in the wal-index file. Set *piZero to one less than the frame +** Set output variable pLoc->aHash to point to the start of the hash table +** in the wal-index file. Set pLoc->iZero to one less than the frame ** number of the first frame indexed by this hash table. If a ** slot in the hash table is set to N, it refers to frame number -** (*piZero+N) in the log. +** (pLoc->iZero+N) in the log. ** -** Finally, set *paPgno so that *paPgno[1] is the page number of the -** first frame indexed by the hash table, frame (*piZero+1). +** Finally, set pLoc->aPgno so that pLoc->aPgno[1] is the page number of the +** first frame indexed by the hash table, frame (pLoc->iZero+1). */ static int walHashGet( Wal *pWal, /* WAL handle */ int iHash, /* Find the iHash'th table */ - volatile ht_slot **paHash, /* OUT: Pointer to hash index */ - volatile u32 **paPgno, /* OUT: Pointer to page number array */ - u32 *piZero /* OUT: Frame associated with *paPgno[0] */ + WalHashLoc *pLoc /* OUT: Hash table location */ ){ int rc; /* Return code */ - volatile u32 *aPgno; - rc = walIndexPage(pWal, iHash, &aPgno); + rc = walIndexPage(pWal, iHash, &pLoc->aPgno); assert( rc==SQLITE_OK || iHash>0 ); if( rc==SQLITE_OK ){ - u32 iZero; - volatile ht_slot *aHash; - - aHash = (volatile ht_slot *)&aPgno[HASHTABLE_NPAGE]; + pLoc->aHash = (volatile ht_slot *)&pLoc->aPgno[HASHTABLE_NPAGE]; if( iHash==0 ){ - aPgno = &aPgno[WALINDEX_HDR_SIZE/sizeof(u32)]; - iZero = 0; + pLoc->aPgno = &pLoc->aPgno[WALINDEX_HDR_SIZE/sizeof(u32)]; + pLoc->iZero = 0; }else{ - iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE; + pLoc->iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE; } - - *paPgno = &aPgno[-1]; - *paHash = aHash; - *piZero = iZero; + pLoc->aPgno = &pLoc->aPgno[-1]; } return rc; } @@ -58182,9 +58773,7 @@ ** actually needed. */ static void walCleanupHash(Wal *pWal){ - volatile ht_slot *aHash = 0; /* Pointer to hash table to clear */ - volatile u32 *aPgno = 0; /* Page number array for hash table */ - u32 iZero = 0; /* frame == (aHash[x]+iZero) */ + WalHashLoc sLoc; /* Hash table location */ int iLimit = 0; /* Zero values greater than this */ int nByte; /* Number of bytes to zero in aPgno[] */ int i; /* Used to iterate through aHash[] */ @@ -58202,24 +58791,24 @@ */ assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) ); assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] ); - walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &aHash, &aPgno, &iZero); + walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &sLoc); /* Zero all hash-table entries that correspond to frame numbers greater ** than pWal->hdr.mxFrame. */ - iLimit = pWal->hdr.mxFrame - iZero; + iLimit = pWal->hdr.mxFrame - sLoc.iZero; assert( iLimit>0 ); for(i=0; iiLimit ){ - aHash[i] = 0; + if( sLoc.aHash[i]>iLimit ){ + sLoc.aHash[i] = 0; } } /* Zero the entries in the aPgno array that correspond to frames with ** frame numbers greater than pWal->hdr.mxFrame. */ - nByte = (int)((char *)aHash - (char *)&aPgno[iLimit+1]); - memset((void *)&aPgno[iLimit+1], 0, nByte); + nByte = (int)((char *)sLoc.aHash - (char *)&sLoc.aPgno[iLimit+1]); + memset((void *)&sLoc.aPgno[iLimit+1], 0, nByte); #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT /* Verify that the every entry in the mapping region is still reachable @@ -58229,10 +58818,10 @@ int j; /* Loop counter */ int iKey; /* Hash key */ for(j=1; j<=iLimit; j++){ - for(iKey=walHash(aPgno[j]); aHash[iKey]; iKey=walNextHash(iKey)){ - if( aHash[iKey]==j ) break; + for(iKey=walHash(sLoc.aPgno[j]);sLoc.aHash[iKey];iKey=walNextHash(iKey)){ + if( sLoc.aHash[iKey]==j ) break; } - assert( aHash[iKey]==j ); + assert( sLoc.aHash[iKey]==j ); } } #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */ @@ -58245,11 +58834,9 @@ */ static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){ int rc; /* Return code */ - u32 iZero = 0; /* One less than frame number of aPgno[1] */ - volatile u32 *aPgno = 0; /* Page number array */ - volatile ht_slot *aHash = 0; /* Hash table */ + WalHashLoc sLoc; /* Wal-index hash table location */ - rc = walHashGet(pWal, walFramePage(iFrame), &aHash, &aPgno, &iZero); + rc = walHashGet(pWal, walFramePage(iFrame), &sLoc); /* Assuming the wal-index file was successfully mapped, populate the ** page number array and hash table entry. @@ -58259,15 +58846,16 @@ int idx; /* Value to write to hash-table slot */ int nCollide; /* Number of hash collisions */ - idx = iFrame - iZero; + idx = iFrame - sLoc.iZero; assert( idx <= HASHTABLE_NSLOT/2 + 1 ); /* If this is the first entry to be added to this hash-table, zero the ** entire hash table and aPgno[] array before proceeding. */ if( idx==1 ){ - int nByte = (int)((u8 *)&aHash[HASHTABLE_NSLOT] - (u8 *)&aPgno[1]); - memset((void*)&aPgno[1], 0, nByte); + int nByte = (int)((u8 *)&sLoc.aHash[HASHTABLE_NSLOT] + - (u8 *)&sLoc.aPgno[1]); + memset((void*)&sLoc.aPgno[1], 0, nByte); } /* If the entry in aPgno[] is already set, then the previous writer @@ -58276,18 +58864,18 @@ ** Remove the remnants of that writers uncommitted transaction from ** the hash-table before writing any new entries. */ - if( aPgno[idx] ){ + if( sLoc.aPgno[idx] ){ walCleanupHash(pWal); - assert( !aPgno[idx] ); + assert( !sLoc.aPgno[idx] ); } /* Write the aPgno[] array entry and the hash-table slot. */ nCollide = idx; - for(iKey=walHash(iPage); aHash[iKey]; iKey=walNextHash(iKey)){ + for(iKey=walHash(iPage); sLoc.aHash[iKey]; iKey=walNextHash(iKey)){ if( (nCollide--)==0 ) return SQLITE_CORRUPT_BKPT; } - aPgno[idx] = iPage; - aHash[iKey] = (ht_slot)idx; + sLoc.aPgno[idx] = iPage; + sLoc.aHash[iKey] = (ht_slot)idx; #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT /* Verify that the number of entries in the hash table exactly equals @@ -58296,7 +58884,7 @@ { int i; /* Loop counter */ int nEntry = 0; /* Number of entries in the hash table */ - for(i=0; iaSegment[p->nSegment])[iZero]; - iZero++; + aIndex = &((ht_slot *)&p->aSegment[p->nSegment])[sLoc.iZero]; + sLoc.iZero++; for(j=0; jaSegment[i].iZero = iZero; + walMergesort((u32 *)sLoc.aPgno, aTmp, aIndex, &nEntry); + p->aSegment[i].iZero = sLoc.iZero; p->aSegment[i].nEntry = nEntry; p->aSegment[i].aIndex = aIndex; - p->aSegment[i].aPgno = (u32 *)aPgno; + p->aSegment[i].aPgno = (u32 *)sLoc.aPgno; } } sqlite3_free(aTmp); @@ -59050,7 +59638,6 @@ if( pIter && (rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(0),1))==SQLITE_OK ){ - i64 nSize; /* Current size of database file */ u32 nBackfill = pInfo->nBackfill; pInfo->nBackfillAttempted = mxSafeFrame; @@ -59063,6 +59650,7 @@ */ if( rc==SQLITE_OK ){ i64 nReq = ((i64)mxPage * szPage); + i64 nSize; /* Current size of database file */ rc = sqlite3OsFileSize(pWal->pDbFd, &nSize); if( rc==SQLITE_OK && nSizepDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq); @@ -59770,7 +60358,7 @@ } #endif for(i=1; iaReadMark[i]; + u32 thisMark = AtomicLoad(pInfo->aReadMark+i); if( mxReadMark<=thisMark && thisMark<=mxFrame ){ assert( thisMark!=READMARK_NOT_USED ); mxReadMark = thisMark; @@ -59783,7 +60371,7 @@ for(i=1; iaReadMark[i] = mxFrame; + mxReadMark = AtomicStore(pInfo->aReadMark+i,mxFrame); mxI = i; walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); break; @@ -59835,9 +60423,9 @@ ** we can guarantee that the checkpointer that set nBackfill could not ** see any pages past pWal->hdr.mxFrame, this problem does not come up. */ - pWal->minFrame = pInfo->nBackfill+1; + pWal->minFrame = AtomicLoad(&pInfo->nBackfill)+1; walShmBarrier(pWal); - if( pInfo->aReadMark[mxI]!=mxReadMark + if( AtomicLoad(pInfo->aReadMark+mxI)!=mxReadMark || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){ walUnlockShared(pWal, WAL_READ_LOCK(mxI)); @@ -59888,16 +60476,14 @@ }else{ u32 i = pInfo->nBackfillAttempted; for(i=pInfo->nBackfillAttempted; i>pInfo->nBackfill; i--){ - volatile ht_slot *dummy; - volatile u32 *aPgno; /* Array of page numbers */ - u32 iZero; /* Frame corresponding to aPgno[0] */ + WalHashLoc sLoc; /* Hash table location */ u32 pgno; /* Page number in db file */ i64 iDbOff; /* Offset of db file entry */ i64 iWalOff; /* Offset of wal file entry */ - rc = walHashGet(pWal, walFramePage(i), &dummy, &aPgno, &iZero); + rc = walHashGet(pWal, walFramePage(i), &sLoc); if( rc!=SQLITE_OK ) break; - pgno = aPgno[i-iZero]; + pgno = sLoc.aPgno[i-sLoc.iZero]; iDbOff = (i64)(pgno-1) * szPage; if( iDbOff+szPage<=szDb ){ @@ -59938,7 +60524,7 @@ ** ** If the database contents have changes since the previous read ** transaction, then *pChanged is set to 1 before returning. The -** Pager layer will use this to know that is cache is stale and +** Pager layer will use this to know that its cache is stale and ** needs to be flushed. */ SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ @@ -60000,7 +60586,7 @@ /* Check that the wal file has not been wrapped. Assuming that it has ** not, also check that no checkpointer has attempted to checkpoint any ** frames beyond pSnapshot->mxFrame. If either of these conditions are - ** true, return SQLITE_BUSY_SNAPSHOT. Otherwise, overwrite pWal->hdr + ** true, return SQLITE_ERROR_SNAPSHOT. Otherwise, overwrite pWal->hdr ** with *pSnapshot and set *pChanged as appropriate for opening the ** snapshot. */ if( !memcmp(pSnapshot->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)) @@ -60010,11 +60596,12 @@ memcpy(&pWal->hdr, pSnapshot, sizeof(WalIndexHdr)); *pChanged = bChanged; }else{ - rc = SQLITE_BUSY_SNAPSHOT; + rc = SQLITE_ERROR_SNAPSHOT; } /* Release the shared CKPT lock obtained above. */ walUnlockShared(pWal, WAL_CKPT_LOCK); + pWal->minFrame = 1; } @@ -60098,21 +60685,20 @@ */ iMinHash = walFramePage(pWal->minFrame); for(iHash=walFramePage(iLast); iHash>=iMinHash; iHash--){ - volatile ht_slot *aHash; /* Pointer to hash table */ - volatile u32 *aPgno; /* Pointer to array of page numbers */ - u32 iZero; /* Frame number corresponding to aPgno[0] */ + WalHashLoc sLoc; /* Hash table location */ int iKey; /* Hash slot index */ int nCollide; /* Number of hash collisions remaining */ int rc; /* Error code */ - rc = walHashGet(pWal, iHash, &aHash, &aPgno, &iZero); + rc = walHashGet(pWal, iHash, &sLoc); if( rc!=SQLITE_OK ){ return rc; } nCollide = HASHTABLE_NSLOT; - for(iKey=walHash(pgno); aHash[iKey]; iKey=walNextHash(iKey)){ - u32 iFrame = aHash[iKey] + iZero; - if( iFrame<=iLast && iFrame>=pWal->minFrame && aPgno[aHash[iKey]]==pgno ){ + for(iKey=walHash(pgno); sLoc.aHash[iKey]; iKey=walNextHash(iKey)){ + u32 iFrame = sLoc.aHash[iKey] + sLoc.iZero; + if( iFrame<=iLast && iFrame>=pWal->minFrame + && sLoc.aPgno[sLoc.aHash[iKey]]==pgno ){ assert( iFrame>iRead || CORRUPT_DB ); iRead = iFrame; } @@ -60987,6 +61573,43 @@ if( pHdr1->mxFrame>pHdr2->mxFrame ) return +1; return 0; } + +/* +** The caller currently has a read transaction open on the database. +** This function takes a SHARED lock on the CHECKPOINTER slot and then +** checks if the snapshot passed as the second argument is still +** available. If so, SQLITE_OK is returned. +** +** If the snapshot is not available, SQLITE_ERROR is returned. Or, if +** the CHECKPOINTER lock cannot be obtained, SQLITE_BUSY. If any error +** occurs (any value other than SQLITE_OK is returned), the CHECKPOINTER +** lock is released before returning. +*/ +SQLITE_PRIVATE int sqlite3WalSnapshotCheck(Wal *pWal, sqlite3_snapshot *pSnapshot){ + int rc; + rc = walLockShared(pWal, WAL_CKPT_LOCK); + if( rc==SQLITE_OK ){ + WalIndexHdr *pNew = (WalIndexHdr*)pSnapshot; + if( memcmp(pNew->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)) + || pNew->mxFramenBackfillAttempted + ){ + rc = SQLITE_ERROR_SNAPSHOT; + walUnlockShared(pWal, WAL_CKPT_LOCK); + } + } + return rc; +} + +/* +** Release a lock obtained by an earlier successful call to +** sqlite3WalSnapshotCheck(). +*/ +SQLITE_PRIVATE void sqlite3WalSnapshotUnlock(Wal *pWal){ + assert( pWal ); + walUnlockShared(pWal, WAL_CKPT_LOCK); +} + + #endif /* SQLITE_ENABLE_SNAPSHOT */ #ifdef SQLITE_ENABLE_ZIPVFS @@ -65332,7 +65955,7 @@ ** when A already has a read lock, we encourage A to give up and let B ** proceed. */ -SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){ +SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag, int *pSchemaVersion){ BtShared *pBt = p->pBt; int rc = SQLITE_OK; @@ -65348,6 +65971,12 @@ } assert( pBt->inTransaction==TRANS_WRITE || IfNotOmitAV(pBt->bDoTruncate)==0 ); + if( (p->db->flags & SQLITE_ResetDatabase) + && sqlite3PagerIsreadonly(pBt->pPager)==0 + ){ + pBt->btsFlags &= ~BTS_READ_ONLY; + } + /* Write transactions are not possible on a read-only database */ if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){ rc = SQLITE_READONLY; @@ -65407,6 +66036,11 @@ rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db)); if( rc==SQLITE_OK ){ rc = newDatabase(pBt); + }else if( rc==SQLITE_BUSY_SNAPSHOT && pBt->inTransaction==TRANS_NONE ){ + /* if there was no transaction opened when this function was + ** called and SQLITE_BUSY_SNAPSHOT is returned, change the error + ** code to SQLITE_BUSY. */ + rc = SQLITE_BUSY; } } } @@ -65458,14 +66092,18 @@ } } - trans_begun: - if( rc==SQLITE_OK && wrflag ){ - /* This call makes sure that the pager has the correct number of - ** open savepoints. If the second parameter is greater than 0 and - ** the sub-journal is not already open, then it will be opened here. - */ - rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint); + if( rc==SQLITE_OK ){ + if( pSchemaVersion ){ + *pSchemaVersion = get4byte(&pBt->pPage1->aData[40]); + } + if( wrflag ){ + /* This call makes sure that the pager has the correct number of + ** open savepoints. If the second parameter is greater than 0 and + ** the sub-journal is not already open, then it will be opened here. + */ + rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint); + } } btreeIntegrity(p); @@ -67212,6 +67850,23 @@ return rc; } +/* +** This function is a no-op if cursor pCur does not point to a valid row. +** Otherwise, if pCur is valid, configure it so that the next call to +** sqlite3BtreeNext() is a no-op. +*/ +#ifndef SQLITE_OMIT_WINDOWFUNC +SQLITE_PRIVATE void sqlite3BtreeSkipNext(BtCursor *pCur){ + /* We believe that the cursor must always be in the valid state when + ** this routine is called, but the proof is difficult, so we add an + ** ALWaYS() test just in case we are wrong. */ + if( ALWAYS(pCur->eState==CURSOR_VALID) ){ + pCur->eState = CURSOR_SKIPNEXT; + pCur->skipNext = 1; + } +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + /* Move the cursor to the last entry in the table. Return SQLITE_OK ** on success. Set *pRes to 0 if the cursor actually points to something ** or set *pRes to 1 if the table is empty. @@ -67616,7 +68271,16 @@ pPage = pCur->pPage; idx = ++pCur->ix; - assert( pPage->isInit ); + if( !pPage->isInit ){ + /* The only known way for this to happen is for there to be a + ** recursive SQL function that does a DELETE operation as part of a + ** SELECT which deletes content out from under an active cursor + ** in a corrupt database file where the table being DELETE-ed from + ** has pages in common with the table being queried. See TH3 + ** module cov1/btree78.test testcase 220 (2018-06-08) for an + ** example. */ + return SQLITE_CORRUPT_BKPT; + } /* If the database file is corrupt, it is possible for the value of idx ** to be invalid here. This can only occur if a second cursor modifies @@ -71328,8 +71992,7 @@ ** Also check that the page number is in bounds. */ static int checkRef(IntegrityCk *pCheck, Pgno iPage){ - if( iPage==0 ) return 1; - if( iPage>pCheck->nPage ){ + if( iPage>pCheck->nPage || iPage==0 ){ checkAppendMsg(pCheck, "invalid page number %d", iPage); return 1; } @@ -71384,17 +72047,12 @@ ){ int i; int expected = N; - int iFirst = iPage; - while( N-- > 0 && pCheck->mxErr ){ + int nErrAtStart = pCheck->nErr; + while( iPage!=0 && pCheck->mxErr ){ DbPage *pOvflPage; unsigned char *pOvflData; - if( iPage<1 ){ - checkAppendMsg(pCheck, - "%d of %d pages missing from overflow list starting at %d", - N+1, expected, iFirst); - break; - } if( checkRef(pCheck, iPage) ) break; + N--; if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage, 0) ){ checkAppendMsg(pCheck, "failed to get page %d", iPage); break; @@ -71438,10 +72096,12 @@ #endif iPage = get4byte(pOvflData); sqlite3PagerUnref(pOvflPage); - - if( isFreeList && N<(iPage!=0) ){ - checkAppendMsg(pCheck, "free-page count in header is too small"); - } + } + if( N && nErrAtStart==pCheck->nErr ){ + checkAppendMsg(pCheck, + "%s is %d but should be %d", + isFreeList ? "size" : "overflow list length", + expected-N, expected); } } #endif /* SQLITE_OMIT_INTEGRITY_CHECK */ @@ -71835,6 +72495,24 @@ /* Check all the tables. */ +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + int mx = 0; + int mxInHdr; + for(i=0; (int)ipPage1->aData[52]); + if( mx!=mxInHdr ){ + checkAppendMsg(&sCheck, + "max rootpage (%d) disagrees with header (%d)", + mx, mxInHdr + ); + } + }else if( get4byte(&pBt->pPage1->aData[64])!=0 ){ + checkAppendMsg(&sCheck, + "incremental_vacuum enabled with a max rootpage of zero" + ); + } +#endif testcase( pBt->db->flags & SQLITE_CellSizeCk ); pBt->db->flags &= ~SQLITE_CellSizeCk; for(i=0; (int)ibtsFlags &= ~BTS_NO_WAL; if( iVersion==1 ) pBt->btsFlags |= BTS_NO_WAL; - rc = sqlite3BtreeBeginTrans(pBtree, 0); + rc = sqlite3BtreeBeginTrans(pBtree, 0, 0); if( rc==SQLITE_OK ){ u8 *aData = pBt->pPage1->aData; if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){ - rc = sqlite3BtreeBeginTrans(pBtree, 2); + rc = sqlite3BtreeBeginTrans(pBtree, 2, 0); if( rc==SQLITE_OK ){ rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); if( rc==SQLITE_OK ){ @@ -72560,7 +73238,7 @@ ** before this function exits. */ if( rc==SQLITE_OK && 0==sqlite3BtreeIsInReadTrans(p->pSrc) ){ - rc = sqlite3BtreeBeginTrans(p->pSrc, 0); + rc = sqlite3BtreeBeginTrans(p->pSrc, 0, 0); bCloseTrans = 1; } @@ -72576,10 +73254,10 @@ /* Lock the destination database, if it is not locked already. */ if( SQLITE_OK==rc && p->bDestLocked==0 - && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2)) + && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2, + (int*)&p->iDestSchema)) ){ p->bDestLocked = 1; - sqlite3BtreeGetMeta(p->pDest, BTREE_SCHEMA_VERSION, &p->iDestSchema); } /* Do not allow backup if the destination database is in WAL mode @@ -73023,8 +73701,7 @@ if( p->flags & MEM_Null ){ /* Cannot be both MEM_Null and some other type */ - assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob - |MEM_RowSet|MEM_Frame|MEM_Agg))==0 ); + assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob|MEM_Agg))==0 ); /* If MEM_Null is set, then either the value is a pure NULL (the usual ** case) or it is a pointer set using sqlite3_bind_pointer() or @@ -73137,7 +73814,7 @@ #ifndef SQLITE_OMIT_UTF16 int rc; #endif - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE || desiredEnc==SQLITE_UTF16BE ); if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){ @@ -73170,7 +73847,7 @@ */ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){ assert( sqlite3VdbeCheckMemInvariants(pMem) ); - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); testcase( pMem->db==0 ); /* If the bPreserve flag is set to true, then the memory cell must already @@ -73258,7 +73935,7 @@ */ SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); if( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ){ if( ExpandBlob(pMem) ) return SQLITE_NOMEM; if( pMem->szMalloc==0 || pMem->z!=pMem->zMalloc ){ @@ -73283,7 +73960,7 @@ int nByte; assert( pMem->flags & MEM_Zero ); assert( pMem->flags&MEM_Blob ); - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); /* Set nByte to the number of bytes required to store the expanded blob. */ @@ -73338,7 +74015,7 @@ assert( !(fg&MEM_Zero) ); assert( !(fg&(MEM_Str|MEM_Blob)) ); assert( fg&(MEM_Int|MEM_Real) ); - assert( (pMem->flags&MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( EIGHT_BYTE_ALIGNMENT(pMem) ); @@ -73397,6 +74074,35 @@ } /* +** Memory cell pAccum contains the context of an aggregate function. +** This routine calls the xValue method for that function and stores +** the results in memory cell pMem. +** +** SQLITE_ERROR is returned if xValue() reports an error. SQLITE_OK +** otherwise. +*/ +#ifndef SQLITE_OMIT_WINDOWFUNC +SQLITE_PRIVATE int sqlite3VdbeMemAggValue(Mem *pAccum, Mem *pOut, FuncDef *pFunc){ + sqlite3_context ctx; + Mem t; + assert( pFunc!=0 ); + assert( pFunc->xValue!=0 ); + assert( (pAccum->flags & MEM_Null)!=0 || pFunc==pAccum->u.pDef ); + assert( pAccum->db==0 || sqlite3_mutex_held(pAccum->db->mutex) ); + memset(&ctx, 0, sizeof(ctx)); + memset(&t, 0, sizeof(t)); + t.flags = MEM_Null; + t.db = pAccum->db; + sqlite3VdbeMemSetNull(pOut); + ctx.pOut = pOut; + ctx.pMem = pAccum; + ctx.pFunc = pFunc; + pFunc->xValue(&ctx); + return ctx.isError; +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* ** If the memory cell contains a value that must be freed by ** invoking the external callback in Mem.xDel, then this routine ** will free that value. It also sets Mem.flags to MEM_Null. @@ -73414,15 +74120,8 @@ testcase( p->flags & MEM_Dyn ); } if( p->flags&MEM_Dyn ){ - assert( (p->flags&MEM_RowSet)==0 ); assert( p->xDel!=SQLITE_DYNAMIC && p->xDel!=0 ); p->xDel((void *)p->z); - }else if( p->flags&MEM_RowSet ){ - sqlite3RowSetClear(p->u.pRowSet); - }else if( p->flags&MEM_Frame ){ - VdbeFrame *pFrame = p->u.pFrame; - pFrame->pParent = pFrame->v->pDelFrame; - pFrame->v->pDelFrame = pFrame; } p->flags = MEM_Null; } @@ -73570,7 +74269,7 @@ SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){ i64 ix; assert( pMem->flags & MEM_Real ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); assert( EIGHT_BYTE_ALIGNMENT(pMem) ); @@ -73597,7 +74296,7 @@ */ SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( EIGHT_BYTE_ALIGNMENT(pMem) ); pMem->u.i = sqlite3VdbeIntValue(pMem); @@ -73815,26 +74514,36 @@ } #endif +#ifdef SQLITE_DEBUG +/* +** Return true if the Mem holds a RowSet object. This routine is intended +** for use inside of assert() statements. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemIsRowSet(const Mem *pMem){ + return (pMem->flags&(MEM_Blob|MEM_Dyn))==(MEM_Blob|MEM_Dyn) + && pMem->xDel==sqlite3RowSetDelete; +} +#endif + /* ** Delete any previous value and set the value of pMem to be an ** empty boolean index. +** +** Return SQLITE_OK on success and SQLITE_NOMEM if a memory allocation +** error occurs. */ -SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){ +SQLITE_PRIVATE int sqlite3VdbeMemSetRowSet(Mem *pMem){ sqlite3 *db = pMem->db; + RowSet *p; assert( db!=0 ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); sqlite3VdbeMemRelease(pMem); - pMem->zMalloc = sqlite3DbMallocRawNN(db, 64); - if( db->mallocFailed ){ - pMem->flags = MEM_Null; - pMem->szMalloc = 0; - }else{ - assert( pMem->zMalloc ); - pMem->szMalloc = sqlite3DbMallocSize(db, pMem->zMalloc); - pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, pMem->szMalloc); - assert( pMem->u.pRowSet!=0 ); - pMem->flags = MEM_RowSet; - } + p = sqlite3RowSetInit(db); + if( p==0 ) return SQLITE_NOMEM; + pMem->z = (char*)p; + pMem->flags = MEM_Blob|MEM_Dyn; + pMem->xDel = sqlite3RowSetDelete; + return SQLITE_OK; } /* @@ -73867,7 +74576,21 @@ Mem *pX; for(i=0, pX=pVdbe->aMem; inMem; i++, pX++){ if( pX->pScopyFrom==pMem ){ - pX->flags |= MEM_Undefined; + /* If pX is marked as a shallow copy of pMem, then verify that + ** no significant changes have been made to pX since the OP_SCopy. + ** A significant change would indicated a missed call to this + ** function for pX. Minor changes, such as adding or removing a + ** dual type, are allowed, as long as the underlying value is the + ** same. */ + u16 mFlags = pMem->flags & pX->flags & pX->mScopyFlags; + assert( (mFlags&MEM_Int)==0 || pMem->u.i==pX->u.i ); + assert( (mFlags&MEM_Real)==0 || pMem->u.r==pX->u.r ); + assert( (mFlags&MEM_Str)==0 || (pMem->n==pX->n && pMem->z==pX->z) ); + assert( (mFlags&MEM_Blob)==0 || sqlite3BlobCompare(pMem,pX)==0 ); + + /* pMem is the register that is changing. But also mark pX as + ** undefined so that we can quickly detect the shallow-copy error */ + pX->flags = MEM_Undefined; pX->pScopyFrom = 0; } } @@ -73888,7 +74611,7 @@ sqlite3VdbeMemShallowCopy(pTo, pFrom, eType); } SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){ - assert( (pFrom->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pFrom) ); assert( pTo->db==pFrom->db ); if( VdbeMemDynamic(pTo) ){ vdbeClrCopy(pTo,pFrom,srcType); return; } memcpy(pTo, pFrom, MEMCELLSIZE); @@ -73906,7 +74629,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){ int rc = SQLITE_OK; - assert( (pFrom->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pFrom) ); if( VdbeMemDynamic(pTo) ) vdbeMemClearExternAndSetNull(pTo); memcpy(pTo, pFrom, MEMCELLSIZE); pTo->flags &= ~MEM_Dyn; @@ -73964,7 +74687,7 @@ u16 flags = 0; /* New value for pMem->flags */ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); /* If z is a NULL pointer, set pMem to contain an SQL NULL. */ if( !z ){ @@ -74086,7 +74809,7 @@ /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() ** that both the BtShared and database handle mutexes are held. */ - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); zData = (char *)sqlite3BtreePayloadFetch(pCur, &available); assert( zData!=0 ); @@ -74110,7 +74833,7 @@ assert( pVal!=0 ); assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) ); assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); - assert( (pVal->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pVal) ); assert( (pVal->flags & (MEM_Null))==0 ); if( pVal->flags & (MEM_Blob|MEM_Str) ){ if( ExpandBlob(pVal) ) return 0; @@ -74153,7 +74876,7 @@ if( !pVal ) return 0; assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) ); assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); - assert( (pVal->flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pVal) ); if( (pVal->flags&(MEM_Str|MEM_Term))==(MEM_Str|MEM_Term) && pVal->enc==enc ){ assert( sqlite3VdbeMemConsistentDualRep(pVal) ); return pVal->z; @@ -74720,11 +75443,11 @@ int iCol, /* Column to extract */ sqlite3_value **ppVal /* OUT: Extracted value */ ){ - u32 t; /* a column type code */ + u32 t = 0; /* a column type code */ int nHdr; /* Size of the header in the record */ int iHdr; /* Next unread header byte */ int iField; /* Next unread data byte */ - int szField; /* Size of the current data field */ + int szField = 0; /* Size of the current data field */ int i; /* Column index */ u8 *a = (u8*)pRec; /* Typecast byte array */ Mem *pMem = *ppVal; /* Write result into this Mem object */ @@ -75017,14 +75740,6 @@ #endif #ifdef SQLITE_DEBUG if( p->db->flags & SQLITE_VdbeAddopTrace ){ - int jj, kk; - Parse *pParse = p->pParse; - for(jj=kk=0; jjnColCache; jj++){ - struct yColCache *x = pParse->aColCache + jj; - printf(" r[%d]={%d:%d}", x->iReg, x->iTable, x->iColumn); - kk++; - } - if( kk ) printf("\n"); sqlite3VdbePrintOp(0, i, &p->aOp[i]); test_addop_breakpoint(); } @@ -75148,7 +75863,7 @@ SQLITE_PRIVATE void sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){ if( pParse->explain==2 ){ char *zMsg; - Vdbe *v = pParse->pVdbe; + Vdbe *v; va_list ap; int iThis; va_start(ap, zFmt); @@ -75269,19 +75984,6 @@ } } -#ifdef SQLITE_COVERAGE_TEST -/* -** Return TRUE if and only if the label x has already been resolved. -** Return FALSE (zero) if label x is still unresolved. -** -** This routine is only used inside of testcase() macros, and so it -** only exists when measuring test coverage. -*/ -SQLITE_PRIVATE int sqlite3VdbeLabelHasBeenResolved(Vdbe *v, int x){ - return v->pParse->aLabel && v->pParse->aLabel[ADDR(x)]>=0; -} -#endif /* SQLITE_COVERAGE_TEST */ - /* ** Mark the VDBE as one that can only be run one time. */ @@ -75513,7 +76215,6 @@ break; } case OP_Next: - case OP_NextIfOpen: case OP_SorterNext: { pOp->p4.xAdvance = sqlite3BtreeNext; pOp->p4type = P4_ADVANCE; @@ -75523,8 +76224,7 @@ assert( pOp->p2>=0 ); break; } - case OP_Prev: - case OP_PrevIfOpen: { + case OP_Prev: { pOp->p4.xAdvance = sqlite3BtreePrevious; pOp->p4type = P4_ADVANCE; /* The code generator never codes any of these opcodes as a jump @@ -76439,7 +77139,7 @@ /* ** Print a single opcode. This routine is used for debugging only. */ -SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){ +SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, VdbeOp *pOp){ char *zP4; char zPtr[50]; char zCom[100]; @@ -76508,9 +77208,8 @@ */ testcase( p->flags & MEM_Agg ); testcase( p->flags & MEM_Dyn ); - testcase( p->flags & MEM_Frame ); - testcase( p->flags & MEM_RowSet ); - if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){ + testcase( p->xDel==sqlite3VdbeFrameMemDel ); + if( p->flags&(MEM_Agg|MEM_Dyn) ){ sqlite3VdbeMemRelease(p); }else if( p->szMalloc ){ sqlite3DbFreeNN(db, p->zMalloc); @@ -76522,6 +77221,35 @@ } } +#ifdef SQLITE_DEBUG +/* +** Verify that pFrame is a valid VdbeFrame pointer. Return true if it is +** and false if something is wrong. +** +** This routine is intended for use inside of assert() statements only. +*/ +SQLITE_PRIVATE int sqlite3VdbeFrameIsValid(VdbeFrame *pFrame){ + if( pFrame->iFrameMagic!=SQLITE_FRAME_MAGIC ) return 0; + return 1; +} +#endif + + +/* +** This is a destructor on a Mem object (which is really an sqlite3_value) +** that deletes the Frame object that is attached to it as a blob. +** +** This routine does not delete the Frame right away. It merely adds the +** frame to a list of frames to be deleted when the Vdbe halts. +*/ +SQLITE_PRIVATE void sqlite3VdbeFrameMemDel(void *pArg){ + VdbeFrame *pFrame = (VdbeFrame*)pArg; + assert( sqlite3VdbeFrameIsValid(pFrame) ); + pFrame->pParent = pFrame->v->pDelFrame; + pFrame->v->pDelFrame = pFrame; +} + + /* ** Delete a VdbeFrame object and its contents. VdbeFrame objects are ** allocated by the OP_Program opcode in sqlite3VdbeExec(). @@ -76530,6 +77258,7 @@ int i; Mem *aMem = VdbeFrameMem(p); VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem]; + assert( sqlite3VdbeFrameIsValid(p) ); for(i=0; inChildCsr; i++){ sqlite3VdbeFreeCursor(p->v, apCsr[i]); } @@ -77826,7 +78555,7 @@ */ sqlite3VdbeHalt(p); - /* If the VDBE has be run even partially, then transfer the error code + /* If the VDBE has been run even partially, then transfer the error code ** and error message from the VDBE into the main database structure. But ** if the VDBE has just been set to run but has not actually executed any ** instructions yet, leave the main database error information unchanged. @@ -78738,7 +79467,7 @@ ** is less than, equal to, or greater than the second, respectively. ** If one blob is a prefix of the other, then the shorter is the lessor. */ -static SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){ +SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){ int c; int n1 = pB1->n; int n2 = pB2->n; @@ -78808,7 +79537,7 @@ f1 = pMem1->flags; f2 = pMem2->flags; combined_flags = f1|f2; - assert( (combined_flags & MEM_RowSet)==0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem1) && !sqlite3VdbeMemIsRowSet(pMem2) ); /* If one value is NULL, it is less than the other. If both values ** are NULL, return 0. @@ -78953,7 +79682,7 @@ u32 idx1; /* Offset of first type in header */ int rc = 0; /* Return value */ Mem *pRhs = pPKey2->aMem; /* Next field of pPKey2 to compare */ - KeyInfo *pKeyInfo = pPKey2->pKeyInfo; + KeyInfo *pKeyInfo; const unsigned char *aKey1 = (const unsigned char *)pKey1; Mem mem1; @@ -79048,7 +79777,7 @@ if( (d1+mem1.n) > (unsigned)nKey1 ){ pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; return 0; /* Corruption */ - }else if( pKeyInfo->aColl[i] ){ + }else if( (pKeyInfo = pPKey2->pKeyInfo)->aColl[i] ){ mem1.enc = pKeyInfo->enc; mem1.db = pKeyInfo->db; mem1.flags = MEM_Str; @@ -79099,7 +79828,7 @@ } if( rc!=0 ){ - if( pKeyInfo->aSortOrder[i] ){ + if( pPKey2->pKeyInfo->aSortOrder[i] ){ rc = -rc; } assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, rc) ); @@ -79108,10 +79837,11 @@ } i++; + if( i==pPKey2->nField ) break; pRhs++; d1 += sqlite3VdbeSerialTypeLen(serial_type); idx1 += sqlite3VarintLen(serial_type); - }while( idx1<(unsigned)szHdr1 && inField && d1<=(unsigned)nKey1 ); + }while( idx1<(unsigned)szHdr1 && d1<=(unsigned)nKey1 ); /* No memory allocation is ever used on mem1. Prove this using ** the following assert(). If the assert() fails, it indicates a @@ -79123,7 +79853,7 @@ ** value. */ assert( CORRUPT_DB || vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, pPKey2->default_rc) - || pKeyInfo->db->mallocFailed + || pPKey2->pKeyInfo->db->mallocFailed ); pPKey2->eqSeen = 1; return pPKey2->default_rc; @@ -79449,7 +80179,7 @@ if( rc ){ return rc; } - *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked); + *res = sqlite3VdbeRecordCompareWithSkip(m.n, m.z, pUnpacked, 0); sqlite3VdbeMemRelease(&m); return SQLITE_OK; } @@ -79481,11 +80211,19 @@ ** programs obsolete. Removing user-defined functions or collating ** sequences, or changing an authorization function are the types of ** things that make prepared statements obsolete. +** +** If iCode is 1, then expiration is advisory. The statement should +** be reprepared before being restarted, but if it is already running +** it is allowed to run to completion. +** +** Internally, this function just sets the Vdbe.expired flag on all +** prepared statements. The flag is set to 1 for an immediate expiration +** and set to 2 for an advisory expiration. */ -SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db){ +SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){ Vdbe *p; for(p = db->pVdbe; p; p=p->pNext){ - p->expired = 1; + p->expired = iCode+1; } } @@ -80645,7 +81383,7 @@ /* .xDel = */ (void(*)(void*))0, #ifdef SQLITE_DEBUG /* .pScopyFrom = */ (Mem*)0, - /* .pFiller = */ (void*)0, + /* .mScopyFlags= */ 0, #endif }; return &nullMem; @@ -81955,32 +82693,56 @@ ** feature is used for test suite validation only and does not appear an ** production builds. ** -** M is an integer, 2 or 3, that indices how many different ways the -** branch can go. It is usually 2. "I" is the direction the branch -** goes. 0 means falls through. 1 means branch is taken. 2 means the -** second alternative branch is taken. +** M is an integer between 2 and 4. 2 indicates a ordinary two-way +** branch (I=0 means fall through and I=1 means taken). 3 indicates +** a 3-way branch where the third way is when one of the operands is +** NULL. 4 indicates the OP_Jump instruction which has three destinations +** depending on whether the first operand is less than, equal to, or greater +** than the second. ** ** iSrcLine is the source code line (from the __LINE__ macro) that -** generated the VDBE instruction. This instrumentation assumes that all -** source code is in a single file (the amalgamation). Special values 1 -** and 2 for the iSrcLine parameter mean that this particular branch is -** always taken or never taken, respectively. +** generated the VDBE instruction combined with flag bits. The source +** code line number is in the lower 24 bits of iSrcLine and the upper +** 8 bytes are flags. The lower three bits of the flags indicate +** values for I that should never occur. For example, if the branch is +** always taken, the flags should be 0x05 since the fall-through and +** alternate branch are never taken. If a branch is never taken then +** flags should be 0x06 since only the fall-through approach is allowed. +** +** Bit 0x04 of the flags indicates an OP_Jump opcode that is only +** interested in equal or not-equal. In other words, I==0 and I==2 +** should be treated the same. +** +** Since only a line number is retained, not the filename, this macro +** only works for amalgamation builds. But that is ok, since these macros +** should be no-ops except for special builds used to measure test coverage. */ #if !defined(SQLITE_VDBE_COVERAGE) # define VdbeBranchTaken(I,M) #else # define VdbeBranchTaken(I,M) vdbeTakeBranch(pOp->iSrcLine,I,M) - static void vdbeTakeBranch(int iSrcLine, u8 I, u8 M){ - if( iSrcLine<=2 && ALWAYS(iSrcLine>0) ){ - M = iSrcLine; - /* Assert the truth of VdbeCoverageAlwaysTaken() and - ** VdbeCoverageNeverTaken() */ - assert( (M & I)==I ); - }else{ - if( sqlite3GlobalConfig.xVdbeBranch==0 ) return; /*NO_TEST*/ - sqlite3GlobalConfig.xVdbeBranch(sqlite3GlobalConfig.pVdbeBranchArg, - iSrcLine,I,M); + static void vdbeTakeBranch(u32 iSrcLine, u8 I, u8 M){ + u8 mNever; + assert( I<=2 ); /* 0: fall through, 1: taken, 2: alternate taken */ + assert( M<=4 ); /* 2: two-way branch, 3: three-way branch, 4: OP_Jump */ + assert( I> 24; + assert( (I & mNever)==0 ); + if( sqlite3GlobalConfig.xVdbeBranch==0 ) return; /*NO_TEST*/ + I |= mNever; + if( M==2 ) I |= 0x04; + if( M==4 ){ + I |= 0x08; + if( (mNever&0x08)!=0 && (I&0x05)!=0) I |= 0x05; /*NO_TEST*/ } + sqlite3GlobalConfig.xVdbeBranch(sqlite3GlobalConfig.pVdbeBranchArg, + iSrcLine&0xffffff, I, M); } #endif @@ -82311,7 +83073,7 @@ }else if( p->flags & MEM_Real ){ printf(" r:%g", p->u.r); #endif - }else if( p->flags & MEM_RowSet ){ + }else if( sqlite3VdbeMemIsRowSet(p) ){ printf(" (rowset)"); }else{ char zBuf[200]; @@ -83065,6 +83827,9 @@ assert( pOp->p3<=(p->nMem+1 - p->nCursor) ); pOut->flags = nullFlag = pOp->p1 ? (MEM_Null|MEM_Cleared) : MEM_Null; pOut->n = 0; +#ifdef SQLITE_DEBUG + pOut->uTemp = 0; +#endif while( cnt>0 ){ pOut++; memAboutToChange(p, pOut); @@ -83186,6 +83951,7 @@ pOut = &aMem[pOp->p2]; assert( pOut!=pIn1 ); while( 1 ){ + memAboutToChange(p, pOut); sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); Deephemeralize(pOut); #ifdef SQLITE_DEBUG @@ -83218,7 +83984,8 @@ assert( pOut!=pIn1 ); sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); #ifdef SQLITE_DEBUG - if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1; + pOut->pScopyFrom = pIn1; + pOut->mScopyFlags = pIn1->flags; #endif break; } @@ -83852,7 +84619,12 @@ if( (flags1 | flags3)&MEM_Str ){ if( (flags1 & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){ applyNumericAffinity(pIn1,0); - testcase( flags3!=pIn3->flags ); /* Possible if pIn1==pIn3 */ + assert( flags3==pIn3->flags ); + /* testcase( flags3!=pIn3->flags ); + ** this used to be possible with pIn1==pIn3, but not since + ** the column cache was removed. The following assignment + ** is essentially a no-op. But, it provides defense-in-depth + ** in case our analysis is incorrect, so it is left in. */ flags3 = pIn3->flags; } if( (flags3 & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){ @@ -84066,11 +84838,11 @@ */ case OP_Jump: { /* jump */ if( iCompare<0 ){ - VdbeBranchTaken(0,3); pOp = &aOp[pOp->p1 - 1]; + VdbeBranchTaken(0,4); pOp = &aOp[pOp->p1 - 1]; }else if( iCompare==0 ){ - VdbeBranchTaken(1,3); pOp = &aOp[pOp->p2 - 1]; + VdbeBranchTaken(1,4); pOp = &aOp[pOp->p2 - 1]; }else{ - VdbeBranchTaken(2,3); pOp = &aOp[pOp->p3 - 1]; + VdbeBranchTaken(2,4); pOp = &aOp[pOp->p3 - 1]; } break; } @@ -84167,7 +84939,7 @@ } /* Opcode: BitNot P1 P2 * * * -** Synopsis: r[P1]= ~r[P1] +** Synopsis: r[P2]= ~r[P1] ** ** Interpret the content of register P1 as an integer. Store the ** ones-complement of the P1 value into register P2. If P1 holds @@ -84982,7 +85754,7 @@ } } if( isSchemaChange ){ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); sqlite3ResetAllSchemasOfConnection(db); db->mDbFlags |= DBFLAG_SchemaChange; } @@ -85124,8 +85896,7 @@ */ case OP_Transaction: { Btree *pBt; - int iMeta; - int iGen; + int iMeta = 0; assert( p->bIsReader ); assert( p->readOnly==0 || pOp->p2==0 ); @@ -85138,7 +85909,7 @@ pBt = db->aDb[pOp->p1].pBt; if( pBt ){ - rc = sqlite3BtreeBeginTrans(pBt, pOp->p2); + rc = sqlite3BtreeBeginTrans(pBt, pOp->p2, &iMeta); testcase( rc==SQLITE_BUSY_SNAPSHOT ); testcase( rc==SQLITE_BUSY_RECOVERY ); if( rc!=SQLITE_OK ){ @@ -85171,19 +85942,17 @@ p->nStmtDefCons = db->nDeferredCons; p->nStmtDefImmCons = db->nDeferredImmCons; } - - /* Gather the schema version number for checking: + } + assert( pOp->p5==0 || pOp->p4type==P4_INT32 ); + if( pOp->p5 + && (iMeta!=pOp->p3 + || db->aDb[pOp->p1].pSchema->iGeneration!=pOp->p4.i) + ){ + /* ** IMPLEMENTATION-OF: R-03189-51135 As each SQL statement runs, the schema ** version is checked to ensure that the schema has not changed since the ** SQL statement was prepared. */ - sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&iMeta); - iGen = db->aDb[pOp->p1].pSchema->iGeneration; - }else{ - iGen = iMeta = 0; - } - assert( pOp->p5==0 || pOp->p4type==P4_INT32 ); - if( pOp->p5 && (iMeta!=pOp->p3 || iGen!=pOp->p4.i) ){ sqlite3DbFree(db, p->zErrMsg); p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed"); /* If the schema-cookie from the database file matches the cookie @@ -85274,7 +86043,7 @@ if( pOp->p1==1 ){ /* Invalidate all prepared statements whenever the TEMP database ** schema is changed. Ticket #1644 */ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); p->expired = 0; } if( rc ) goto abort_due_to_error; @@ -85292,59 +86061,78 @@ ** values need not be contiguous but all P1 values should be small integers. ** It is an error for P1 to be negative. ** -** If P5!=0 then use the content of register P2 as the root page, not -** the value of P2 itself. -** -** There will be a read lock on the database whenever there is an -** open cursor. If the database was unlocked prior to this instruction -** then a read lock is acquired as part of this instruction. A read -** lock allows other processes to read the database but prohibits -** any other process from modifying the database. The read lock is -** released when all cursors are closed. If this instruction attempts -** to get a read lock but fails, the script terminates with an -** SQLITE_BUSY error code. +** Allowed P5 bits: +**
        +**
      • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxGT) +**
      ** ** The P4 value may be either an integer (P4_INT32) or a pointer to ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo -** structure, then said structure defines the content and collating -** sequence of the index being opened. Otherwise, if P4 is an integer -** value, it is set to the number of columns in the table. +** object, then table being opened must be an [index b-tree] where the +** KeyInfo object defines the content and collating +** sequence of that index b-tree. Otherwise, if P4 is an integer +** value, then the table being opened must be a [table b-tree] with a +** number of columns no less than the value of P4. ** ** See also: OpenWrite, ReopenIdx */ /* Opcode: ReopenIdx P1 P2 P3 P4 P5 ** Synopsis: root=P2 iDb=P3 ** -** The ReopenIdx opcode works exactly like ReadOpen except that it first -** checks to see if the cursor on P1 is already open with a root page -** number of P2 and if it is this opcode becomes a no-op. In other words, +** The ReopenIdx opcode works like OP_OpenRead except that it first +** checks to see if the cursor on P1 is already open on the same +** b-tree and if it is this opcode becomes a no-op. In other words, ** if the cursor is already open, do not reopen it. ** -** The ReopenIdx opcode may only be used with P5==0 and with P4 being -** a P4_KEYINFO object. Furthermore, the P3 value must be the same as -** every other ReopenIdx or OpenRead for the same cursor number. +** The ReopenIdx opcode may only be used with P5==0 or P5==OPFLAG_SEEKEQ +** and with P4 being a P4_KEYINFO object. Furthermore, the P3 value must +** be the same as every other ReopenIdx or OpenRead for the same cursor +** number. +** +** Allowed P5 bits: +**
        +**
      • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxGT) +**
      ** -** See the OpenRead opcode documentation for additional information. +** See also: OP_OpenRead, OP_OpenWrite */ /* Opcode: OpenWrite P1 P2 P3 P4 P5 ** Synopsis: root=P2 iDb=P3 ** ** Open a read/write cursor named P1 on the table or index whose root -** page is P2. Or if P5!=0 use the content of register P2 to find the -** root page. +** page is P2 (or whose root page is held in register P2 if the +** OPFLAG_P2ISREG bit is set in P5 - see below). ** ** The P4 value may be either an integer (P4_INT32) or a pointer to ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo -** structure, then said structure defines the content and collating -** sequence of the index being opened. Otherwise, if P4 is an integer -** value, it is set to the number of columns in the table, or to the -** largest index of any column of the table that is actually used. -** -** This instruction works just like OpenRead except that it opens the cursor -** in read/write mode. For a given table, there can be one or more read-only -** cursors or a single read/write cursor but not both. +** object, then table being opened must be an [index b-tree] where the +** KeyInfo object defines the content and collating +** sequence of that index b-tree. Otherwise, if P4 is an integer +** value, then the table being opened must be a [table b-tree] with a +** number of columns no less than the value of P4. +** +** Allowed P5 bits: +**
        +**
      • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxGT) +**
      • 0x08 OPFLAG_FORDELETE: This cursor is used only to seek +** and subsequently delete entries in an index btree. This is a +** hint to the storage engine that the storage engine is allowed to +** ignore. The hint is not used by the official SQLite b*tree storage +** engine, but is used by COMDB2. +**
      • 0x10 OPFLAG_P2ISREG: Use the content of register P2 +** as the root page, not the value of P2 itself. +**
      +** +** This instruction works like OpenRead except that it opens the cursor +** in read/write mode. ** -** See also OpenRead. +** See also: OP_OpenRead, OP_ReopenIdx */ case OP_ReopenIdx: { int nField; @@ -85373,7 +86161,7 @@ assert( pOp->opcode==OP_OpenRead || pOp->opcode==OP_ReopenIdx || p->readOnly==0 ); - if( p->expired ){ + if( p->expired==1 ){ rc = SQLITE_ABORT_ROLLBACK; goto abort_due_to_error; } @@ -85400,6 +86188,7 @@ if( pOp->p5 & OPFLAG_P2ISREG ){ assert( p2>0 ); assert( p2<=(p->nMem+1 - p->nCursor) ); + assert( pOp->opcode==OP_OpenWrite ); pIn2 = &aMem[p2]; assert( memIsValid(pIn2) ); assert( (pIn2->flags & MEM_Int)!=0 ); @@ -85528,7 +86317,7 @@ rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBtx, BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags); if( rc==SQLITE_OK ){ - rc = sqlite3BtreeBeginTrans(pCx->pBtx, 1); + rc = sqlite3BtreeBeginTrans(pCx->pBtx, 1, 0); } if( rc==SQLITE_OK ){ /* If a transient index is required, create it by calling @@ -85755,10 +86544,10 @@ ** ** See also: Found, NotFound, SeekGt, SeekGe, SeekLt */ -case OP_SeekLT: /* jump, in3 */ -case OP_SeekLE: /* jump, in3 */ -case OP_SeekGE: /* jump, in3 */ -case OP_SeekGT: { /* jump, in3 */ +case OP_SeekLT: /* jump, in3, group */ +case OP_SeekLE: /* jump, in3, group */ +case OP_SeekGE: /* jump, in3, group */ +case OP_SeekGT: { /* jump, in3, group */ int res; /* Comparison result */ int oc; /* Opcode */ VdbeCursor *pC; /* The cursor to seek */ @@ -85936,6 +86725,25 @@ break; } +/* Opcode: SeekHit P1 P2 * * * +** Synopsis: seekHit=P2 +** +** Set the seekHit flag on cursor P1 to the value in P2. +** The seekHit flag is used by the IfNoHope opcode. +** +** P1 must be a valid b-tree cursor. P2 must be a boolean value, +** either 0 or 1. +*/ +case OP_SeekHit: { + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pOp->p2==0 || pOp->p2==1 ); + pC->seekHit = pOp->p2 & 1; + break; +} + /* Opcode: Found P1 P2 P3 P4 * ** Synopsis: key=r[P3@P4] ** @@ -85970,7 +86778,34 @@ ** advanced in either direction. In other words, the Next and Prev ** opcodes do not work after this operation. ** -** See also: Found, NotExists, NoConflict +** See also: Found, NotExists, NoConflict, IfNoHope +*/ +/* Opcode: IfNoHope P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** Register P3 is the first of P4 registers that form an unpacked +** record. +** +** Cursor P1 is on an index btree. If the seekHit flag is set on P1, then +** this opcode is a no-op. But if the seekHit flag of P1 is clear, then +** check to see if there is any entry in P1 that matches the +** prefix identified by P3 and P4. If no entry matches the prefix, +** jump to P2. Otherwise fall through. +** +** This opcode behaves like OP_NotFound if the seekHit +** flag is clear and it behaves like OP_Noop if the seekHit flag is set. +** +** This opcode is used in IN clause processing for a multi-column key. +** If an IN clause is attached to an element of the key other than the +** left-most element, and if there are no matches on the most recent +** seek over the whole key, then it might be that one of the key element +** to the left is prohibiting a match, and hence there is "no hope" of +** any match regardless of how many IN clause elements are checked. +** In such a case, we abandon the IN clause search early, using this +** opcode. The opcode name comes from the fact that the +** jump is taken if there is "no hope" of achieving a match. +** +** See also: NotFound, SeekHit */ /* Opcode: NoConflict P1 P2 P3 P4 * ** Synopsis: key=r[P3@P4] @@ -85995,6 +86830,14 @@ ** ** See also: NotFound, Found, NotExists */ +case OP_IfNoHope: { /* jump, in3 */ + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + if( pC->seekHit ) break; + /* Fall through into OP_NotFound */ +} case OP_NoConflict: /* jump, in3 */ case OP_NotFound: /* jump, in3 */ case OP_Found: { /* jump, in3 */ @@ -86132,18 +86975,26 @@ pIn3 = &aMem[pOp->p3]; if( (pIn3->flags & MEM_Int)==0 ){ + /* Make sure pIn3->u.i contains a valid integer representation of + ** the key value, but do not change the datatype of the register, as + ** other parts of the perpared statement might be depending on the + ** current datatype. */ + u16 origFlags = pIn3->flags; + int isNotInt; applyAffinity(pIn3, SQLITE_AFF_NUMERIC, encoding); - if( (pIn3->flags & MEM_Int)==0 ) goto jump_to_p2; + isNotInt = (pIn3->flags & MEM_Int)==0; + pIn3->flags = origFlags; + if( isNotInt ) goto jump_to_p2; } /* Fall through into OP_NotExists */ case OP_NotExists: /* jump, in3 */ pIn3 = &aMem[pOp->p3]; - assert( pIn3->flags & MEM_Int ); + assert( (pIn3->flags & MEM_Int)!=0 || pOp->opcode==OP_SeekRowid ); assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; assert( pC!=0 ); #ifdef SQLITE_DEBUG - pC->seekOp = 0; + pC->seekOp = OP_SeekRowid; #endif assert( pC->isTable ); assert( pC->eCurType==CURTYPE_BTREE ); @@ -86797,6 +87648,9 @@ assert( pC->uc.pCursor!=0 ); sqlite3BtreeClearCursor(pC->uc.pCursor); } +#ifdef SQLITE_DEBUG + if( pC->seekOp==0 ) pC->seekOp = OP_NullRow; +#endif break; } @@ -86915,7 +87769,7 @@ p->aCounter[SQLITE_STMTSTATUS_SORT]++; /* Fall through into OP_Rewind */ } -/* Opcode: Rewind P1 P2 * * * +/* Opcode: Rewind P1 P2 * * P5 ** ** The next use of the Rowid or Column or Next instruction for P1 ** will refer to the first entry in the database table or index. @@ -86923,6 +87777,10 @@ ** If the table or index is not empty, fall through to the following ** instruction. ** +** If P5 is non-zero and the table is not empty, then the "skip-next" +** flag is set on the cursor so that the next OP_Next instruction +** executed on it is a no-op. +** ** This opcode leaves the cursor configured to move in forward order, ** from the beginning toward the end. In other words, the cursor is ** configured to use Next, not Prev. @@ -86947,6 +87805,9 @@ pCrsr = pC->uc.pCursor; assert( pCrsr ); rc = sqlite3BtreeFirst(pCrsr, &res); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pOp->p5 ) sqlite3BtreeSkipNext(pCrsr); +#endif pC->deferredMoveto = 0; pC->cacheStatus = CACHE_STALE; } @@ -86983,12 +87844,7 @@ ** If P5 is positive and the jump is taken, then event counter ** number P5-1 in the prepared statement is incremented. ** -** See also: Prev, NextIfOpen -*/ -/* Opcode: NextIfOpen P1 P2 P3 P4 P5 -** -** This opcode works just like Next except that if cursor P1 is not -** open it behaves a no-op. +** See also: Prev */ /* Opcode: Prev P1 P2 P3 P4 P5 ** @@ -87016,11 +87872,6 @@ ** If P5 is positive and the jump is taken, then event counter ** number P5-1 in the prepared statement is incremented. */ -/* Opcode: PrevIfOpen P1 P2 P3 P4 P5 -** -** This opcode works just like Prev except that if cursor P1 is not -** open it behaves a no-op. -*/ /* Opcode: SorterNext P1 P2 * * P5 ** ** This opcode works just like OP_Next except that P1 must be a @@ -87035,10 +87886,6 @@ assert( isSorter(pC) ); rc = sqlite3VdbeSorterNext(db, pC); goto next_tail; -case OP_PrevIfOpen: /* jump */ -case OP_NextIfOpen: /* jump */ - if( p->apCsr[pOp->p1]==0 ) break; - /* Fall through */ case OP_Prev: /* jump */ case OP_Next: /* jump */ assert( pOp->p1>=0 && pOp->p1nCursor ); @@ -87049,17 +87896,17 @@ assert( pC->eCurType==CURTYPE_BTREE ); assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext ); assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious ); - assert( pOp->opcode!=OP_NextIfOpen || pOp->p4.xAdvance==sqlite3BtreeNext ); - assert( pOp->opcode!=OP_PrevIfOpen || pOp->p4.xAdvance==sqlite3BtreePrevious); - /* The Next opcode is only used after SeekGT, SeekGE, and Rewind. + /* The Next opcode is only used after SeekGT, SeekGE, Rewind, and Found. ** The Prev opcode is only used after SeekLT, SeekLE, and Last. */ - assert( pOp->opcode!=OP_Next || pOp->opcode!=OP_NextIfOpen + assert( pOp->opcode!=OP_Next || pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE - || pC->seekOp==OP_Rewind || pC->seekOp==OP_Found); - assert( pOp->opcode!=OP_Prev || pOp->opcode!=OP_PrevIfOpen + || pC->seekOp==OP_Rewind || pC->seekOp==OP_Found + || pC->seekOp==OP_NullRow); + assert( pOp->opcode!=OP_Prev || pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE - || pC->seekOp==OP_Last ); + || pC->seekOp==OP_Last + || pC->seekOp==OP_NullRow); rc = pOp->p4.xAdvance(pC->uc.pCursor, pOp->p3); next_tail: @@ -87342,7 +88189,13 @@ } r.aMem = &aMem[pOp->p3]; #ifdef SQLITE_DEBUG - { int i; for(i=0; ip3+i, &aMem[pOp->p3+i]); + } + } #endif res = 0; /* Not needed. Only used to silence a warning. */ rc = sqlite3VdbeIdxKeyCompare(db, pC, &r, &res); @@ -87529,7 +88382,8 @@ /* Opcode: ParseSchema P1 * * P4 * ** ** Read and parse all entries from the SQLITE_MASTER table of database P1 -** that match the WHERE clause P4. +** that match the WHERE clause P4. If P4 is a NULL pointer, then the +** entire schema for P1 is reparsed. ** ** This opcode invokes the parser to create a new virtual machine, ** then runs the new virtual machine. It is thus a re-entrant opcode. @@ -87553,11 +88407,22 @@ iDb = pOp->p1; assert( iDb>=0 && iDbnDb ); assert( DbHasProperty(db, iDb, DB_SchemaLoaded) ); - /* Used to be a conditional */ { + +#ifndef SQLITE_OMIT_ALTERTABLE + if( pOp->p4.z==0 ){ + sqlite3SchemaClear(db->aDb[iDb].pSchema); + db->mDbFlags &= ~DBFLAG_SchemaKnownOk; + rc = sqlite3InitOne(db, iDb, &p->zErrMsg, INITFLAG_AlterTable); + db->mDbFlags |= DBFLAG_SchemaChange; + p->expired = 0; + }else +#endif + { zMaster = MASTER_NAME; initData.db = db; initData.iDb = pOp->p1; initData.pzErrMsg = &p->zErrMsg; + initData.mInitFlags = 0; zSql = sqlite3MPrintf(db, "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid", db->aDb[iDb].zDbSName, zMaster, pOp->p4.z); @@ -87710,11 +88575,11 @@ pIn1 = &aMem[pOp->p1]; pIn2 = &aMem[pOp->p2]; assert( (pIn2->flags & MEM_Int)!=0 ); - if( (pIn1->flags & MEM_RowSet)==0 ){ - sqlite3VdbeMemSetRowSet(pIn1); - if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem; + if( (pIn1->flags & MEM_Blob)==0 ){ + if( sqlite3VdbeMemSetRowSet(pIn1) ) goto no_mem; } - sqlite3RowSetInsert(pIn1->u.pRowSet, pIn2->u.i); + assert( sqlite3VdbeMemIsRowSet(pIn1) ); + sqlite3RowSetInsert((RowSet*)pIn1->z, pIn2->u.i); break; } @@ -87730,8 +88595,9 @@ i64 val; pIn1 = &aMem[pOp->p1]; - if( (pIn1->flags & MEM_RowSet)==0 - || sqlite3RowSetNext(pIn1->u.pRowSet, &val)==0 + assert( (pIn1->flags & MEM_Blob)==0 || sqlite3VdbeMemIsRowSet(pIn1) ); + if( (pIn1->flags & MEM_Blob)==0 + || sqlite3RowSetNext((RowSet*)pIn1->z, &val)==0 ){ /* The boolean index is empty */ sqlite3VdbeMemSetNull(pIn1); @@ -87780,20 +88646,19 @@ /* If there is anything other than a rowset object in memory cell P1, ** delete it now and initialize P1 with an empty rowset */ - if( (pIn1->flags & MEM_RowSet)==0 ){ - sqlite3VdbeMemSetRowSet(pIn1); - if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem; + if( (pIn1->flags & MEM_Blob)==0 ){ + if( sqlite3VdbeMemSetRowSet(pIn1) ) goto no_mem; } - + assert( sqlite3VdbeMemIsRowSet(pIn1) ); assert( pOp->p4type==P4_INT32 ); assert( iSet==-1 || iSet>=0 ); if( iSet ){ - exists = sqlite3RowSetTest(pIn1->u.pRowSet, iSet, pIn3->u.i); + exists = sqlite3RowSetTest((RowSet*)pIn1->z, iSet, pIn3->u.i); VdbeBranchTaken(exists!=0,2); if( exists ) goto jump_to_p2; } if( iSet>=0 ){ - sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i); + sqlite3RowSetInsert((RowSet*)pIn1->z, pIn3->u.i); } break; } @@ -87857,7 +88722,7 @@ ** of the current program, and the memory required at runtime to execute ** the trigger program. If this trigger has been fired before, then pRt ** is already allocated. Otherwise, it must be initialized. */ - if( (pRt->flags&MEM_Frame)==0 ){ + if( (pRt->flags&MEM_Blob)==0 ){ /* SubProgram.nMem is set to the number of memory cells used by the ** program stored in SubProgram.aOp. As well as these, one memory ** cell is required for each cursor used by the program. Set local @@ -87875,8 +88740,10 @@ goto no_mem; } sqlite3VdbeMemRelease(pRt); - pRt->flags = MEM_Frame; - pRt->u.pFrame = pFrame; + pRt->flags = MEM_Blob|MEM_Dyn; + pRt->z = (char*)pFrame; + pRt->n = nByte; + pRt->xDel = sqlite3VdbeFrameMemDel; pFrame->v = p; pFrame->nChildMem = nMem; @@ -87892,6 +88759,9 @@ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS pFrame->anExec = p->anExec; #endif +#ifdef SQLITE_DEBUG + pFrame->iFrameMagic = SQLITE_FRAME_MAGIC; +#endif pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem]; for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){ @@ -87899,7 +88769,8 @@ pMem->db = db; } }else{ - pFrame = pRt->u.pFrame; + pFrame = (VdbeFrame*)pRt->z; + assert( pRt->xDel==sqlite3VdbeFrameMemDel ); assert( pProgram->nMem+pProgram->nCsr==pFrame->nChildMem || (pProgram->nCsr==0 && pProgram->nMem+1==pFrame->nChildMem) ); assert( pProgram->nCsr==pFrame->nChildCsr ); @@ -88128,24 +88999,35 @@ } -/* Opcode: AggStep0 * P2 P3 P4 P5 +/* Opcode: AggStep * P2 P3 P4 P5 ** Synopsis: accum=r[P3] step(r[P2@P5]) ** -** Execute the step function for an aggregate. The -** function has P5 arguments. P4 is a pointer to the FuncDef -** structure that specifies the function. Register P3 is the +** Execute the xStep function for an aggregate. +** The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the ** accumulator. ** ** The P5 arguments are taken from register P2 and its ** successors. */ -/* Opcode: AggStep * P2 P3 P4 P5 +/* Opcode: AggInverse * P2 P3 P4 P5 +** Synopsis: accum=r[P3] inverse(r[P2@P5]) +** +** Execute the xInverse function for an aggregate. +** The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the +** accumulator. +** +** The P5 arguments are taken from register P2 and its +** successors. +*/ +/* Opcode: AggStep1 P1 P2 P3 P4 P5 ** Synopsis: accum=r[P3] step(r[P2@P5]) ** -** Execute the step function for an aggregate. The -** function has P5 arguments. P4 is a pointer to an sqlite3_context -** object that is used to run the function. Register P3 is -** as the accumulator. +** Execute the xStep (if P1==0) or xInverse (if P1!=0) function for an +** aggregate. The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the +** accumulator. ** ** The P5 arguments are taken from register P2 and its ** successors. @@ -88156,7 +89038,8 @@ ** sqlite3_context only happens once, instead of on each call to the ** step function. */ -case OP_AggStep0: { +case OP_AggInverse: +case OP_AggStep: { int n; sqlite3_context *pCtx; @@ -88179,10 +89062,14 @@ pCtx->argc = n; pOp->p4type = P4_FUNCCTX; pOp->p4.pCtx = pCtx; - pOp->opcode = OP_AggStep; + + /* OP_AggInverse must have P1==1 and OP_AggStep must have P1==0 */ + assert( pOp->p1==(pOp->opcode==OP_AggInverse) ); + + pOp->opcode = OP_AggStep1; /* Fall through into OP_AggStep */ } -case OP_AggStep: { +case OP_AggStep1: { int i; sqlite3_context *pCtx; Mem *pMem; @@ -88191,6 +89078,17 @@ pCtx = pOp->p4.pCtx; pMem = &aMem[pOp->p3]; +#ifdef SQLITE_DEBUG + if( pOp->p1 ){ + /* This is an OP_AggInverse call. Verify that xStep has always + ** been called at least once prior to any xInverse call. */ + assert( pMem->uTemp==0x1122e0e3 ); + }else{ + /* This is an OP_AggStep call. Mark it as such. */ + pMem->uTemp = 0x1122e0e3; + } +#endif + /* If this function is inside of a trigger, the register array in aMem[] ** might change from one evaluation to the next. The next block of code ** checks to see if the register array has changed, and if so it @@ -88211,7 +89109,13 @@ assert( pCtx->pOut->flags==MEM_Null ); assert( pCtx->isError==0 ); assert( pCtx->skipFlag==0 ); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pOp->p1 ){ + (pCtx->pFunc->xInverse)(pCtx,pCtx->argc,pCtx->argv); + }else +#endif (pCtx->pFunc->xSFunc)(pCtx,pCtx->argc,pCtx->argv); /* IMP: R-24505-23230 */ + if( pCtx->isError ){ if( pCtx->isError>0 ){ sqlite3VdbeError(p, "%s", sqlite3_value_text(pCtx->pOut)); @@ -88236,22 +89140,46 @@ /* Opcode: AggFinal P1 P2 * P4 * ** Synopsis: accum=r[P1] N=P2 ** -** Execute the finalizer function for an aggregate. P1 is -** the memory location that is the accumulator for the aggregate. +** P1 is the memory location that is the accumulator for an aggregate +** or window function. Execute the finalizer function +** for an aggregate and store the result in P1. +** +** P2 is the number of arguments that the step function takes and +** P4 is a pointer to the FuncDef for this function. The P2 +** argument is not used by this opcode. It is only there to disambiguate +** functions that can take varying numbers of arguments. The +** P4 argument is only needed for the case where +** the step function was not previously called. +*/ +/* Opcode: AggValue * P2 P3 P4 * +** Synopsis: r[P3]=value N=P2 +** +** Invoke the xValue() function and store the result in register P3. ** ** P2 is the number of arguments that the step function takes and ** P4 is a pointer to the FuncDef for this function. The P2 ** argument is not used by this opcode. It is only there to disambiguate ** functions that can take varying numbers of arguments. The -** P4 argument is only needed for the degenerate case where +** P4 argument is only needed for the case where ** the step function was not previously called. */ +case OP_AggValue: case OP_AggFinal: { Mem *pMem; assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); + assert( pOp->p3==0 || pOp->opcode==OP_AggValue ); pMem = &aMem[pOp->p1]; assert( (pMem->flags & ~(MEM_Null|MEM_Agg))==0 ); - rc = sqlite3VdbeMemFinalize(pMem, pOp->p4.pFunc); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pOp->p3 ){ + rc = sqlite3VdbeMemAggValue(pMem, &aMem[pOp->p3], pOp->p4.pFunc); + pMem = &aMem[pOp->p3]; + }else +#endif + { + rc = sqlite3VdbeMemFinalize(pMem, pOp->p4.pFunc); + } + if( rc ){ sqlite3VdbeError(p, "%s", sqlite3_value_text(pMem)); goto abort_due_to_error; @@ -88446,7 +89374,7 @@ } #endif -/* Opcode: Expire P1 * * * * +/* Opcode: Expire P1 P2 * * * ** ** Cause precompiled statements to expire. When an expired statement ** is executed using sqlite3_step() it will either automatically @@ -88455,12 +89383,19 @@ ** ** If P1 is 0, then all SQL statements become expired. If P1 is non-zero, ** then only the currently executing statement is expired. +** +** If P2 is 0, then SQL statements are expired immediately. If P2 is 1, +** then running SQL statements are allowed to continue to run to completion. +** The P2==1 case occurs when a CREATE INDEX or similar schema change happens +** that might help the statement run faster but which does not affect the +** correctness of operation. */ case OP_Expire: { + assert( pOp->p2==0 || pOp->p2==1 ); if( !pOp->p1 ){ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, pOp->p2); }else{ - p->expired = 1; + p->expired = pOp->p2+1; } break; } @@ -88784,7 +89719,10 @@ case OP_VRename: { sqlite3_vtab *pVtab; Mem *pName; - + int isLegacy; + + isLegacy = (db->flags & SQLITE_LegacyAlter); + db->flags |= SQLITE_LegacyAlter; pVtab = pOp->p4.pVtab->pVtab; pName = &aMem[pOp->p1]; assert( pVtab->pModule->xRename ); @@ -88798,6 +89736,7 @@ rc = sqlite3VdbeChangeEncoding(pName, SQLITE_UTF8); if( rc ) goto abort_due_to_error; rc = pVtab->pModule->xRename(pVtab, pName->z); + if( isLegacy==0 ) db->flags &= ~SQLITE_LegacyAlter; sqlite3VtabImportErrmsg(p, pVtab); p->expired = 0; if( rc ) goto abort_due_to_error; @@ -88846,6 +89785,7 @@ || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace ); assert( p->readOnly==0 ); + if( db->mallocFailed ) goto no_mem; sqlite3VdbeIncrWriteCounter(p, 0); pVtab = pOp->p4.pVtab->pVtab; if( pVtab==0 || NEVER(pVtab->pModule==0) ){ @@ -88967,8 +89907,8 @@ ** ** See also: Function0, AggStep, AggFinal */ -case OP_PureFunc0: -case OP_Function0: { +case OP_PureFunc0: /* group */ +case OP_Function0: { /* group */ int n; sqlite3_context *pCtx; @@ -88992,8 +89932,8 @@ pOp->opcode += 2; /* Fall through into OP_Function */ } -case OP_PureFunc: -case OP_Function: { +case OP_PureFunc: /* group */ +case OP_Function: { /* group */ int i; sqlite3_context *pCtx; @@ -91918,7 +92858,11 @@ ){ int rc = SQLITE_OK; /* Return code */ int i; /* For looping over PmaReader objects */ - int nTree = pMerger->nTree; + int nTree; /* Number of subtrees to merge */ + + /* Failure to allocate the merge would have been detected prior to + ** invoking this routine */ + assert( pMerger!=0 ); /* eMode is always INCRINIT_NORMAL in single-threaded mode */ assert( SQLITE_MAX_WORKER_THREADS>0 || eMode==INCRINIT_NORMAL ); @@ -91927,6 +92871,7 @@ assert( pMerger->pTask==0 ); pMerger->pTask = pTask; + nTree = pMerger->nTree; for(i=0; i0 && eMode==INCRINIT_ROOT ){ /* PmaReaders should be normally initialized in order, as if they are @@ -93055,6 +94000,14 @@ }else if( pExpr->x.pList ){ if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( !ExprHasProperty(pExpr, EP_Reduced) && pExpr->pWin ){ + Window *pWin = pExpr->pWin; + if( sqlite3WalkExprList(pWalker, pWin->pPartition) ) return WRC_Abort; + if( sqlite3WalkExprList(pWalker, pWin->pOrderBy) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, pWin->pFilter) ) return WRC_Abort; + } +#endif } break; } @@ -93427,6 +94380,9 @@ if( sqlite3StrICmp(zTabName, zTab)!=0 ){ continue; } + if( IN_RENAME_OBJECT && pItem->zAlias ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)&pExpr->pTab); + } } if( 0==(cntTab++) ){ pMatch = pItem; @@ -93512,9 +94468,15 @@ #ifndef SQLITE_OMIT_UPSERT if( pExpr->iTable==2 ){ testcase( iCol==(-1) ); - pExpr->iTable = pNC->uNC.pUpsert->regData + iCol; - eNewExprOp = TK_REGISTER; - ExprSetProperty(pExpr, EP_Alias); + if( IN_RENAME_OBJECT ){ + pExpr->iColumn = iCol; + pExpr->pTab = pTab; + eNewExprOp = TK_COLUMN; + }else{ + pExpr->iTable = pNC->uNC.pUpsert->regData + iCol; + eNewExprOp = TK_REGISTER; + ExprSetProperty(pExpr, EP_Alias); + } }else #endif /* SQLITE_OMIT_UPSERT */ { @@ -93599,6 +94561,9 @@ cnt = 1; pMatch = 0; assert( zTab==0 && zDb==0 ); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pExpr); + } goto lookupname_end; } } @@ -93826,17 +94791,24 @@ zTable = 0; zColumn = pExpr->u.zToken; }else{ + Expr *pLeft = pExpr->pLeft; notValid(pParse, pNC, "the \".\" operator", NC_IdxExpr); pRight = pExpr->pRight; if( pRight->op==TK_ID ){ zDb = 0; - zTable = pExpr->pLeft->u.zToken; - zColumn = pRight->u.zToken; }else{ assert( pRight->op==TK_DOT ); - zDb = pExpr->pLeft->u.zToken; - zTable = pRight->pLeft->u.zToken; - zColumn = pRight->pRight->u.zToken; + zDb = pLeft->u.zToken; + pLeft = pRight->pLeft; + pRight = pRight->pRight; + } + zTable = pLeft->u.zToken; + zColumn = pRight->u.zToken; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, (void*)pExpr, (void*)pRight); + } + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, (void*)&pExpr->pTab, (void*)pLeft); } } return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr); @@ -93919,40 +94891,95 @@ NC_IdxExpr|NC_PartIdx); } } - if( is_agg && (pNC->ncFlags & NC_AllowAgg)==0 ){ - sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId); - pNC->nErr++; - is_agg = 0; - }else if( no_such_func && pParse->db->init.busy==0 + + if( 0==IN_RENAME_OBJECT ){ +#ifndef SQLITE_OMIT_WINDOWFUNC + assert( is_agg==0 || (pDef->funcFlags & SQLITE_FUNC_MINMAX) + || (pDef->xValue==0 && pDef->xInverse==0) + || (pDef->xValue && pDef->xInverse && pDef->xSFunc && pDef->xFinalize) + ); + if( pDef && pDef->xValue==0 && pExpr->pWin ){ + sqlite3ErrorMsg(pParse, + "%.*s() may not be used as a window function", nId, zId + ); + pNC->nErr++; + }else if( + (is_agg && (pNC->ncFlags & NC_AllowAgg)==0) + || (is_agg && (pDef->funcFlags & SQLITE_FUNC_WINDOW) && !pExpr->pWin) + || (is_agg && pExpr->pWin && (pNC->ncFlags & NC_AllowWin)==0) + ){ + const char *zType; + if( (pDef->funcFlags & SQLITE_FUNC_WINDOW) || pExpr->pWin ){ + zType = "window"; + }else{ + zType = "aggregate"; + } + sqlite3ErrorMsg(pParse, "misuse of %s function %.*s()",zType,nId,zId); + pNC->nErr++; + is_agg = 0; + } +#else + if( (is_agg && (pNC->ncFlags & NC_AllowAgg)==0) ){ + sqlite3ErrorMsg(pParse,"misuse of aggregate function %.*s()",nId,zId); + pNC->nErr++; + is_agg = 0; + } +#endif + else if( no_such_func && pParse->db->init.busy==0 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION - && pParse->explain==0 + && pParse->explain==0 #endif - ){ - sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId); - pNC->nErr++; - }else if( wrong_num_args ){ - sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()", - nId, zId); - pNC->nErr++; + ){ + sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId); + pNC->nErr++; + }else if( wrong_num_args ){ + sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()", + nId, zId); + pNC->nErr++; + } + if( is_agg ){ +#ifndef SQLITE_OMIT_WINDOWFUNC + pNC->ncFlags &= ~(pExpr->pWin ? NC_AllowWin : NC_AllowAgg); +#else + pNC->ncFlags &= ~NC_AllowAgg; +#endif + } } - if( is_agg ) pNC->ncFlags &= ~NC_AllowAgg; sqlite3WalkExprList(pWalker, pList); if( is_agg ){ - NameContext *pNC2 = pNC; - pExpr->op = TK_AGG_FUNCTION; - pExpr->op2 = 0; - while( pNC2 && !sqlite3FunctionUsesThisSrc(pExpr, pNC2->pSrcList) ){ - pExpr->op2++; - pNC2 = pNC2->pNext; - } - assert( pDef!=0 ); - if( pNC2 ){ - assert( SQLITE_FUNC_MINMAX==NC_MinMaxAgg ); - testcase( (pDef->funcFlags & SQLITE_FUNC_MINMAX)!=0 ); - pNC2->ncFlags |= NC_HasAgg | (pDef->funcFlags & SQLITE_FUNC_MINMAX); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pExpr->pWin ){ + Select *pSel = pNC->pWinSelect; + sqlite3WalkExprList(pWalker, pExpr->pWin->pPartition); + sqlite3WalkExprList(pWalker, pExpr->pWin->pOrderBy); + sqlite3WalkExpr(pWalker, pExpr->pWin->pFilter); + sqlite3WindowUpdate(pParse, pSel->pWinDefn, pExpr->pWin, pDef); + if( 0==pSel->pWin + || 0==sqlite3WindowCompare(pParse, pSel->pWin, pExpr->pWin) + ){ + pExpr->pWin->pNextWin = pSel->pWin; + pSel->pWin = pExpr->pWin; + } + pNC->ncFlags |= NC_AllowWin; + }else +#endif /* SQLITE_OMIT_WINDOWFUNC */ + { + NameContext *pNC2 = pNC; + pExpr->op = TK_AGG_FUNCTION; + pExpr->op2 = 0; + while( pNC2 && !sqlite3FunctionUsesThisSrc(pExpr, pNC2->pSrcList) ){ + pExpr->op2++; + pNC2 = pNC2->pNext; + } + assert( pDef!=0 ); + if( pNC2 ){ + assert( SQLITE_FUNC_MINMAX==NC_MinMaxAgg ); + testcase( (pDef->funcFlags & SQLITE_FUNC_MINMAX)!=0 ); + pNC2->ncFlags |= NC_HasAgg | (pDef->funcFlags & SQLITE_FUNC_MINMAX); + } + pNC->ncFlags |= NC_AllowAgg; } - pNC->ncFlags |= NC_AllowAgg; } /* FIX ME: Compute pExpr->affinity based on the expected return ** type of the function @@ -94353,6 +95380,19 @@ } for(j=0; jpEList->nExpr; j++){ if( sqlite3ExprCompare(0, pE, pSelect->pEList->a[j].pExpr, -1)==0 ){ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pE->pWin ){ + /* Since this window function is being changed into a reference + ** to the same window function the result set, remove the instance + ** of this window function from the Select.pWin list. */ + Window **pp; + for(pp=&pSelect->pWin; *pp; pp=&(*pp)->pNextWin){ + if( *pp==pE->pWin ){ + *pp = (*pp)->pNextWin; + } + } + } +#endif pItem->u.x.iOrderByCol = j+1; } } @@ -94409,6 +95449,7 @@ */ memset(&sNC, 0, sizeof(sNC)); sNC.pParse = pParse; + sNC.pWinSelect = p; if( sqlite3ResolveExprNames(&sNC, p->pLimit) ){ return WRC_Abort; } @@ -94457,12 +95498,13 @@ /* Set up the local name-context to pass to sqlite3ResolveExprNames() to ** resolve the result-set expression list. */ - sNC.ncFlags = NC_AllowAgg; + sNC.ncFlags = NC_AllowAgg|NC_AllowWin; sNC.pSrcList = p->pSrc; sNC.pNext = pOuterNC; /* Resolve names in the result set. */ if( sqlite3ResolveExprListNames(&sNC, p->pEList) ) return WRC_Abort; + sNC.ncFlags &= ~NC_AllowWin; /* If there are no aggregate functions in the result-set, and no GROUP BY ** expression, do not allow aggregates in any of the other expressions. @@ -94511,7 +95553,7 @@ ** outer queries */ sNC.pNext = 0; - sNC.ncFlags |= NC_AllowAgg; + sNC.ncFlags |= NC_AllowAgg|NC_AllowWin; /* If this is a converted compound query, move the ORDER BY clause from ** the sub-query back to the parent query. At this point each term @@ -94542,6 +95584,7 @@ if( db->mallocFailed ){ return WRC_Abort; } + sNC.ncFlags &= ~NC_AllowWin; /* Resolve the GROUP BY clause. At the same time, make sure ** the GROUP BY clause does not contain aggregate functions. @@ -94890,14 +95933,6 @@ while( p ){ int op = p->op; if( p->flags & EP_Generic ) break; - if( op==TK_CAST || op==TK_UPLUS ){ - p = p->pLeft; - continue; - } - if( op==TK_COLLATE || (op==TK_REGISTER && p->op2==TK_COLLATE) ){ - pColl = sqlite3GetCollSeq(pParse, ENC(db), 0, p->u.zToken); - break; - } if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER || op==TK_TRIGGER) && p->pTab!=0 @@ -94911,6 +95946,14 @@ } break; } + if( op==TK_CAST || op==TK_UPLUS ){ + p = p->pLeft; + continue; + } + if( op==TK_COLLATE || (op==TK_REGISTER && p->op2==TK_COLLATE) ){ + pColl = sqlite3GetCollSeq(pParse, ENC(db), 0, p->u.zToken); + break; + } if( p->flags & EP_Collate ){ if( p->pLeft && (p->pLeft->flags & EP_Collate)!=0 ){ p = p->pLeft; @@ -95330,7 +96373,6 @@ Expr *pL, *pR; int r1, r2; assert( i>=0 && i0 ) sqlite3ExprCachePush(pParse); r1 = exprVectorRegister(pParse, pLeft, i, regLeft, &pL, ®Free1); r2 = exprVectorRegister(pParse, pRight, i, regRight, &pR, ®Free2); codeCompare(pParse, pL, pR, opx, r1, r2, dest, p5); @@ -95342,7 +96384,6 @@ testcase(op==OP_Ne); VdbeCoverageIf(v,op==OP_Ne); sqlite3ReleaseTempReg(pParse, regFree1); sqlite3ReleaseTempReg(pParse, regFree2); - if( i>0 ) sqlite3ExprCachePop(pParse); if( i==nLeft-1 ){ break; } @@ -95690,7 +96731,12 @@ ** Construct a new expression node for a function with multiple ** arguments. */ -SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){ +SQLITE_PRIVATE Expr *sqlite3ExprFunction( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* Argument list */ + Token *pToken, /* Name of the function */ + int eDistinct /* SF_Distinct or SF_ALL or 0 */ +){ Expr *pNew; sqlite3 *db = pParse->db; assert( pToken ); @@ -95699,10 +96745,14 @@ sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */ return 0; } + if( pList && pList->nExpr > pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ + sqlite3ErrorMsg(pParse, "too many arguments on function %T", pToken); + } pNew->x.pList = pList; ExprSetProperty(pNew, EP_HasFunc); assert( !ExprHasProperty(pNew, EP_xIsSelect) ); sqlite3ExprSetHeightAndFlags(pParse, pNew); + if( eDistinct==SF_Distinct ) ExprSetProperty(pNew, EP_Distinct); return pNew; } @@ -95812,6 +96862,9 @@ }else{ sqlite3ExprListDelete(db, p->x.pList); } + if( !ExprHasProperty(p, EP_Reduced) ){ + sqlite3WindowDelete(db, p->pWin); + } } if( ExprHasProperty(p, EP_MemToken) ) sqlite3DbFree(db, p->u.zToken); if( !ExprHasProperty(p, EP_Static) ){ @@ -95860,7 +96913,7 @@ ** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size ** (unreduced) Expr objects as they or originally constructed by the parser. ** During expression analysis, extra information is computed and moved into -** later parts of teh Expr object and that extra information might get chopped +** later parts of the Expr object and that extra information might get chopped ** off if the expression is reduced. Note also that it does not work to ** make an EXPRDUP_REDUCE copy of a reduced expression. It is only legal ** to reduce a pristine expression tree from the parser. The implementation @@ -95872,7 +96925,11 @@ assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */ assert( EXPR_FULLSIZE<=0xfff ); assert( (0xfff & (EP_Reduced|EP_TokenOnly))==0 ); - if( 0==flags || p->op==TK_SELECT_COLUMN ){ + if( 0==flags || p->op==TK_SELECT_COLUMN +#ifndef SQLITE_OMIT_WINDOWFUNC + || p->pWin +#endif + ){ nSize = EXPR_FULLSIZE; }else{ assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); @@ -96000,18 +97057,22 @@ } /* Fill in pNew->pLeft and pNew->pRight. */ + zAlloc += dupedExprNodeSize(p, dupFlags); if( ExprHasProperty(pNew, EP_Reduced|EP_TokenOnly) ){ - zAlloc += dupedExprNodeSize(p, dupFlags); if( !ExprHasProperty(pNew, EP_TokenOnly|EP_Leaf) ){ pNew->pLeft = p->pLeft ? exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc) : 0; pNew->pRight = p->pRight ? exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc) : 0; } - if( pzBuffer ){ - *pzBuffer = zAlloc; - } }else{ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(p, EP_Reduced|EP_TokenOnly) ){ + pNew->pWin = 0; + }else{ + pNew->pWin = sqlite3WindowDup(db, pNew, p->pWin); + } +#endif /* SQLITE_OMIT_WINDOWFUNC */ if( !ExprHasProperty(p, EP_TokenOnly|EP_Leaf) ){ if( pNew->op==TK_SELECT_COLUMN ){ pNew->pLeft = p->pLeft; @@ -96023,6 +97084,9 @@ pNew->pRight = sqlite3ExprDup(db, p->pRight, 0); } } + if( pzBuffer ){ + *pzBuffer = zAlloc; + } } return pNew; } @@ -96218,7 +97282,11 @@ pNew->addrOpenEphm[1] = -1; pNew->nSelectRow = p->nSelectRow; pNew->pWith = withDup(db, p->pWith); - sqlite3SelectSetName(pNew, p->zSelName); +#ifndef SQLITE_OMIT_WINDOWFUNC + pNew->pWin = 0; + pNew->pWinDefn = sqlite3WindowListDup(db, p->pWinDefn); +#endif + pNew->selId = p->selId; *pp = pNew; pp = &pNew->pPrior; pNext = pNew; @@ -96390,6 +97458,9 @@ assert( pItem->zName==0 ); pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n); if( dequote ) sqlite3Dequote(pItem->zName); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)pItem->zName, pName); + } } } @@ -96570,6 +97641,9 @@ testcase( pExpr->op==TK_COLUMN ); testcase( pExpr->op==TK_AGG_FUNCTION ); testcase( pExpr->op==TK_AGG_COLUMN ); + if( ExprHasProperty(pExpr, EP_FixedCol) && pWalker->eCode!=2 ){ + return WRC_Continue; + } if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){ return WRC_Continue; } @@ -96625,10 +97699,17 @@ } /* -** Walk an expression tree. Return non-zero if the expression is constant -** that does no originate from the ON or USING clauses of a join. -** Return 0 if it involves variables or function calls or terms from -** an ON or USING clause. +** Walk an expression tree. Return non-zero if +** +** (1) the expression is constant, and +** (2) the expression does originate in the ON or USING clause +** of a LEFT JOIN, and +** (3) the expression does not contain any EP_FixedCol TK_COLUMN +** operands created by the constant propagation optimization. +** +** When this routine returns true, it indicates that the expression +** can be added to the pParse->pConstExpr list and evaluated once when +** the prepared statement starts up. See sqlite3ExprCodeAtInit(). */ SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){ return exprIsConst(p, 2, 0); @@ -96658,7 +97739,7 @@ Expr *p = pGroupBy->a[i].pExpr; if( sqlite3ExprCompare(0, pExpr, p, -1)<2 ){ CollSeq *pColl = sqlite3ExprNNCollSeq(pWalker->pParse, p); - if( sqlite3_stricmp("BINARY", pColl->zName)==0 ){ + if( sqlite3IsBinary(pColl) ){ return WRC_Prune; } } @@ -97080,7 +98161,8 @@ sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead); eType = IN_INDEX_ROWID; - + ExplainQueryPlan((pParse, 0, + "USING ROWID SEARCH ON TABLE %s FOR IN-OPERATOR",pTab->zName)); sqlite3VdbeJumpHere(v, iAddr); }else{ Index *pIdx; /* Iterator variable */ @@ -97339,7 +98421,6 @@ int rReg = 0; /* Register storing resulting */ Vdbe *v = sqlite3GetVdbe(pParse); if( NEVER(v==0) ) return 0; - sqlite3ExprCachePush(pParse); /* The evaluation of the IN/EXISTS/SELECT must be repeated every time it ** is encountered if any of the following is true: @@ -97475,7 +98556,6 @@ sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3); }else{ sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1); - sqlite3ExprCacheAffinityChange(pParse, r3, 1); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pExpr->iTable, r2, r3, 1); } } @@ -97556,7 +98636,6 @@ if( jmpIfDynamic>=0 ){ sqlite3VdbeJumpHere(v, jmpIfDynamic); } - sqlite3ExprCachePop(pParse); return rReg; } @@ -97675,7 +98754,6 @@ ** aiMap[] array contains a mapping from the original LHS field order to ** the field order that matches the RHS index. */ - sqlite3ExprCachePush(pParse); rLhsOrig = exprCodeVector(pParse, pLeft, &iDummy); for(i=0; idb, aiMap); @@ -97902,145 +98979,6 @@ } } -/* -** Erase column-cache entry number i -*/ -static void cacheEntryClear(Parse *pParse, int i){ - if( pParse->aColCache[i].tempReg ){ - if( pParse->nTempRegaTempReg) ){ - pParse->aTempReg[pParse->nTempReg++] = pParse->aColCache[i].iReg; - } - } - pParse->nColCache--; - if( inColCache ){ - pParse->aColCache[i] = pParse->aColCache[pParse->nColCache]; - } -} - - -/* -** Record in the column cache that a particular column from a -** particular table is stored in a particular register. -*/ -SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){ - int i; - int minLru; - int idxLru; - struct yColCache *p; - - /* Unless an error has occurred, register numbers are always positive. */ - assert( iReg>0 || pParse->nErr || pParse->db->mallocFailed ); - assert( iCol>=-1 && iCol<32768 ); /* Finite column numbers */ - - /* The SQLITE_ColumnCache flag disables the column cache. This is used - ** for testing only - to verify that SQLite always gets the same answer - ** with and without the column cache. - */ - if( OptimizationDisabled(pParse->db, SQLITE_ColumnCache) ) return; - - /* First replace any existing entry. - ** - ** Actually, the way the column cache is currently used, we are guaranteed - ** that the object will never already be in cache. Verify this guarantee. - */ -#ifndef NDEBUG - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - assert( p->iTable!=iTab || p->iColumn!=iCol ); - } -#endif - - /* If the cache is already full, delete the least recently used entry */ - if( pParse->nColCache>=SQLITE_N_COLCACHE ){ - minLru = 0x7fffffff; - idxLru = -1; - for(i=0, p=pParse->aColCache; ilrulru; - } - } - p = &pParse->aColCache[idxLru]; - }else{ - p = &pParse->aColCache[pParse->nColCache++]; - } - - /* Add the new entry to the end of the cache */ - p->iLevel = pParse->iCacheLevel; - p->iTable = iTab; - p->iColumn = iCol; - p->iReg = iReg; - p->tempReg = 0; - p->lru = pParse->iCacheCnt++; -} - -/* -** Indicate that registers between iReg..iReg+nReg-1 are being overwritten. -** Purge the range of registers from the column cache. -*/ -SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){ - int i = 0; - while( inColCache ){ - struct yColCache *p = &pParse->aColCache[i]; - if( p->iReg >= iReg && p->iReg < iReg+nReg ){ - cacheEntryClear(pParse, i); - }else{ - i++; - } - } -} - -/* -** Remember the current column cache context. Any new entries added -** added to the column cache after this call are removed when the -** corresponding pop occurs. -*/ -SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){ - pParse->iCacheLevel++; -#ifdef SQLITE_DEBUG - if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ - printf("PUSH to %d\n", pParse->iCacheLevel); - } -#endif -} - -/* -** Remove from the column cache any entries that were added since the -** the previous sqlite3ExprCachePush operation. In other words, restore -** the cache to the state it was in prior the most recent Push. -*/ -SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse){ - int i = 0; - assert( pParse->iCacheLevel>=1 ); - pParse->iCacheLevel--; -#ifdef SQLITE_DEBUG - if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ - printf("POP to %d\n", pParse->iCacheLevel); - } -#endif - while( inColCache ){ - if( pParse->aColCache[i].iLevel>pParse->iCacheLevel ){ - cacheEntryClear(pParse, i); - }else{ - i++; - } - } -} - -/* -** When a cached column is reused, make sure that its register is -** no longer available as a temp register. ticket #3879: that same -** register might be in the cache in multiple places, so be sure to -** get them all. -*/ -static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - if( p->iReg==iReg ){ - p->tempReg = 0; - } - } -} /* Generate code that will load into register regOut a value that is ** appropriate for the iIdxCol-th column of index pIdx. @@ -98096,12 +99034,7 @@ /* ** Generate code that will extract the iColumn-th column from -** table pTab and store the column value in a register. -** -** An effort is made to store the column value in register iReg. This -** is not garanteeed for GetColumn() - the result can be stored in -** any register. But the result is guaranteed to land in register iReg -** for GetColumnToReg(). +** table pTab and store the column value in register iReg. ** ** There must be an open cursor to pTab in iTable when this routine ** is called. If iColumn<0 then code is generated that extracts the rowid. @@ -98115,95 +99048,22 @@ u8 p5 /* P5 value for OP_Column + FLAGS */ ){ Vdbe *v = pParse->pVdbe; - int i; - struct yColCache *p; - - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - if( p->iTable==iTable && p->iColumn==iColumn ){ - p->lru = pParse->iCacheCnt++; - sqlite3ExprCachePinRegister(pParse, p->iReg); - return p->iReg; - } - } assert( v!=0 ); sqlite3ExprCodeGetColumnOfTable(v, pTab, iTable, iColumn, iReg); if( p5 ){ sqlite3VdbeChangeP5(v, p5); - }else{ - sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg); } return iReg; } -SQLITE_PRIVATE void sqlite3ExprCodeGetColumnToReg( - Parse *pParse, /* Parsing and code generating context */ - Table *pTab, /* Description of the table we are reading from */ - int iColumn, /* Index of the table column */ - int iTable, /* The cursor pointing to the table */ - int iReg /* Store results here */ -){ - int r1 = sqlite3ExprCodeGetColumn(pParse, pTab, iColumn, iTable, iReg, 0); - if( r1!=iReg ) sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, r1, iReg); -} - - -/* -** Clear all column cache entries. -*/ -SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){ - int i; - -#ifdef SQLITE_DEBUG - if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ - printf("CLEAR\n"); - } -#endif - for(i=0; inColCache; i++){ - if( pParse->aColCache[i].tempReg - && pParse->nTempRegaTempReg) - ){ - pParse->aTempReg[pParse->nTempReg++] = pParse->aColCache[i].iReg; - } - } - pParse->nColCache = 0; -} - -/* -** Record the fact that an affinity change has occurred on iCount -** registers starting with iStart. -*/ -SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){ - sqlite3ExprCacheRemove(pParse, iStart, iCount); -} /* ** Generate code to move content from registers iFrom...iFrom+nReg-1 -** over to iTo..iTo+nReg-1. Keep the column cache up-to-date. +** over to iTo..iTo+nReg-1. */ SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){ assert( iFrom>=iTo+nReg || iFrom+nReg<=iTo ); sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg); - sqlite3ExprCacheRemove(pParse, iFrom, nReg); -} - -#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) -/* -** Return true if any register in the range iFrom..iTo (inclusive) -** is used as part of the column cache. -** -** This routine is used within assert() and testcase() macros only -** and does not appear in a normal build. -*/ -static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - int r = p->iReg; - if( r>=iFrom && r<=iTo ) return 1; /*NO_TEST*/ - } - return 0; } -#endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */ - /* ** Convert a scalar expression node to a TK_REGISTER referencing @@ -98302,6 +99162,28 @@ } case TK_COLUMN: { int iTab = pExpr->iTable; + if( ExprHasProperty(pExpr, EP_FixedCol) ){ + /* This COLUMN expression is really a constant due to WHERE clause + ** constraints, and that constant is coded by the pExpr->pLeft + ** expresssion. However, make sure the constant has the correct + ** datatype by applying the Affinity of the table column to the + ** constant. + */ + int iReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft,target); + int aff = sqlite3TableColumnAffinity(pExpr->pTab, pExpr->iColumn); + if( aff!=SQLITE_AFF_BLOB ){ + static const char zAff[] = "B\000C\000D\000E"; + assert( SQLITE_AFF_BLOB=='A' ); + assert( SQLITE_AFF_TEXT=='B' ); + if( iReg!=target ){ + sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target); + iReg = target; + } + sqlite3VdbeAddOp4(v, OP_Affinity, iReg, 1, 0, + &zAff[(aff-'B')*2], P4_STATIC); + } + return iReg; + } if( iTab<0 ){ if( pParse->iSelfTab<0 ){ /* Generating CHECK constraints or inserting into partial index */ @@ -98382,8 +99264,6 @@ } sqlite3VdbeAddOp2(v, OP_Cast, target, sqlite3AffinityType(pExpr->u.zToken, 0)); - testcase( usedAsColumnCache(pParse, inReg, inReg) ); - sqlite3ExprCacheAffinityChange(pParse, inReg, 1); return inReg; } #endif /* SQLITE_OMIT_CAST */ @@ -98527,6 +99407,12 @@ u8 enc = ENC(db); /* The text encoding used by this database */ CollSeq *pColl = 0; /* A collating sequence */ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) && pExpr->pWin ){ + return pExpr->pWin->regResult; + } +#endif + if( ConstFactorOk(pParse) && sqlite3ExprIsConstantNotJoin(pExpr) ){ /* SQL functions can be expensive. So try to move constant functions ** out of the inner loop, even if that means an extra OP_Copy. */ @@ -98563,10 +99449,7 @@ for(i=1; ia[i].pExpr, target); - sqlite3ExprCachePop(pParse); } sqlite3VdbeResolveLabel(v, endCoalesce); break; @@ -98632,10 +99515,8 @@ } } - sqlite3ExprCachePush(pParse); /* Ticket 2ea2425d34be */ sqlite3ExprCodeExprList(pParse, pFarg, r1, 0, SQLITE_ECEL_DUP|SQLITE_ECEL_FACTOR); - sqlite3ExprCachePop(pParse); /* Ticket 2ea2425d34be */ }else{ r1 = 0; } @@ -98652,7 +99533,7 @@ ** "glob(B,A). We want to use the A in "A glob B" to test ** for function overloading. But we use the B term in "glob(B,A)". */ - if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){ + if( nFarg>=2 && ExprHasProperty(pExpr, EP_InfixFunc) ){ pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr); }else if( nFarg>0 ){ pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr); @@ -98808,9 +99689,7 @@ case TK_IF_NULL_ROW: { int addrINR; addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable); - sqlite3ExprCachePush(pParse); inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); - sqlite3ExprCachePop(pParse); sqlite3VdbeJumpHere(v, addrINR); sqlite3VdbeChangeP3(v, addrINR, inReg); break; @@ -98847,7 +99726,6 @@ Expr opCompare; /* The X==Ei expression */ Expr *pX; /* The X expression */ Expr *pTest = 0; /* X==Ei (form A) or just Ei (form B) */ - VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; ) assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList ); assert(pExpr->x.pList->nExpr > 0); @@ -98871,7 +99749,6 @@ regFree1 = 0; } for(i=0; iop==TK_COLUMN ); sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target); sqlite3VdbeGoto(v, endLabel); - sqlite3ExprCachePop(pParse); sqlite3VdbeResolveLabel(v, nextCase); } if( (nExpr&1)!=0 ){ - sqlite3ExprCachePush(pParse); sqlite3ExprCode(pParse, pEList->a[nExpr-1].pExpr, target); - sqlite3ExprCachePop(pParse); }else{ sqlite3VdbeAddOp2(v, OP_Null, 0, target); } - assert( pParse->db->mallocFailed || pParse->nErr>0 - || pParse->iCacheLevel==iCacheLevel ); sqlite3VdbeResolveLabel(v, endLabel); break; } @@ -99045,7 +99917,7 @@ ** might choose to code the expression at initialization time. */ SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){ - if( pParse->okConstFactor && sqlite3ExprIsConstant(pExpr) ){ + if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pExpr) ){ sqlite3ExprCodeAtInit(pParse, pExpr, target); }else{ sqlite3ExprCode(pParse, pExpr, target); @@ -99127,7 +99999,9 @@ }else{ sqlite3VdbeAddOp2(v, copyOp, j+srcReg-1, target+i); } - }else if( (flags & SQLITE_ECEL_FACTOR)!=0 && sqlite3ExprIsConstant(pExpr) ){ + }else if( (flags & SQLITE_ECEL_FACTOR)!=0 + && sqlite3ExprIsConstantNotJoin(pExpr) + ){ sqlite3ExprCodeAtInit(pParse, pExpr, target+i); }else{ int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); @@ -99253,18 +100127,14 @@ int d2 = sqlite3VdbeMakeLabel(v); testcase( jumpIfNull==0 ); sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL); - sqlite3ExprCachePush(pParse); sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3VdbeResolveLabel(v, d2); - sqlite3ExprCachePop(pParse); break; } case TK_OR: { testcase( jumpIfNull==0 ); sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); - sqlite3ExprCachePush(pParse); sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); - sqlite3ExprCachePop(pParse); break; } case TK_NOT: { @@ -99423,19 +100293,15 @@ case TK_AND: { testcase( jumpIfNull==0 ); sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); - sqlite3ExprCachePush(pParse); sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); - sqlite3ExprCachePop(pParse); break; } case TK_OR: { int d2 = sqlite3VdbeMakeLabel(v); testcase( jumpIfNull==0 ); sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL); - sqlite3ExprCachePush(pParse); sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3VdbeResolveLabel(v, d2); - sqlite3ExprCachePop(pParse); break; } case TK_NOT: { @@ -99657,7 +100523,8 @@ if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2; if( ALWAYS((combinedFlags & EP_TokenOnly)==0) ){ if( combinedFlags & EP_xIsSelect ) return 2; - if( sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2; + if( (combinedFlags & EP_FixedCol)==0 + && sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2; if( sqlite3ExprCompare(pParse, pA->pRight, pB->pRight, iTab) ) return 2; if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList, iTab) ) return 2; assert( (combinedFlags & EP_Reduced)==0 ); @@ -99666,6 +100533,21 @@ if( pA->iTable!=pB->iTable && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2; } +#ifndef SQLITE_OMIT_WINDOWFUNC + /* Justification for the assert(): + ** window functions have p->op==TK_FUNCTION but aggregate functions + ** have p->op==TK_AGG_FUNCTION. So any comparison between an aggregate + ** function and a window function should have failed before reaching + ** this point. And, it is not possible to have a window function and + ** a scalar function with the same name and number of arguments. So + ** if we reach this point, either A and B both window functions or + ** neither are a window functions. */ + assert( (pA->pWin==0)==(pB->pWin==0) ); + + if( pA->pWin!=0 ){ + if( sqlite3WindowCompare(pParse,pA->pWin,pB->pWin)!=0 ) return 2; + } +#endif } return 0; } @@ -99756,18 +100638,15 @@ /* ** This is the Expr node callback for sqlite3ExprImpliesNotNullRow(). ** If the expression node requires that the table at pWalker->iCur -** have a non-NULL column, then set pWalker->eCode to 1 and abort. +** have one or more non-NULL column, then set pWalker->eCode to 1 and abort. +** +** This routine controls an optimization. False positives (setting +** pWalker->eCode to 1 when it should not be) are deadly, but false-negatives +** (never setting pWalker->eCode) is a harmless missed optimization. */ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ - /* This routine is only called for WHERE clause expressions and so it - ** cannot have any TK_AGG_COLUMN entries because those are only found - ** in HAVING clauses. We can get a TK_AGG_FUNCTION in a WHERE clause, - ** but that is an illegal construct and the query will be rejected at - ** a later stage of processing, so the TK_AGG_FUNCTION case does not - ** need to be considered here. */ - assert( pExpr->op!=TK_AGG_COLUMN ); + testcase( pExpr->op==TK_AGG_COLUMN ); testcase( pExpr->op==TK_AGG_FUNCTION ); - if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune; switch( pExpr->op ){ case TK_ISNOT: @@ -100187,21 +101066,9 @@ /* ** Deallocate a register, making available for reuse for some other ** purpose. -** -** If a register is currently being used by the column cache, then -** the deallocation is deferred until the column cache line that uses -** the register becomes stale. */ SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){ if( iReg && pParse->nTempRegaTempReg) ){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; inColCache; i++, p++){ - if( p->iReg==iReg ){ - p->tempReg = 1; - return; - } - } pParse->aTempReg[pParse->nTempReg++] = iReg; } } @@ -100215,7 +101082,6 @@ i = pParse->iRangeReg; n = pParse->nRangeReg; if( nReg<=n ){ - assert( !usedAsColumnCache(pParse, i, i+n-1) ); pParse->iRangeReg += nReg; pParse->nRangeReg -= nReg; }else{ @@ -100229,7 +101095,6 @@ sqlite3ReleaseTempReg(pParse, iReg); return; } - sqlite3ExprCacheRemove(pParse, iReg, nReg); if( nReg>pParse->nRangeReg ){ pParse->nRangeReg = nReg; pParse->iRangeReg = iReg; @@ -100291,366 +101156,63 @@ */ #ifndef SQLITE_OMIT_ALTERTABLE - -/* -** This function is used by SQL generated to implement the -** ALTER TABLE command. The first argument is the text of a CREATE TABLE or -** CREATE INDEX command. The second is a table name. The table name in -** the CREATE TABLE or CREATE INDEX statement is replaced with the third -** argument and the result returned. Examples: -** -** sqlite_rename_table('CREATE TABLE abc(a, b, c)', 'def') -** -> 'CREATE TABLE def(a, b, c)' -** -** sqlite_rename_table('CREATE INDEX i ON abc(a)', 'def') -** -> 'CREATE INDEX i ON def(a, b, c)' -*/ -static void renameTableFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - unsigned char const *zSql = sqlite3_value_text(argv[0]); - unsigned char const *zTableName = sqlite3_value_text(argv[1]); - - int token; - Token tname; - unsigned char const *zCsr = zSql; - int len = 0; - char *zRet; - - sqlite3 *db = sqlite3_context_db_handle(context); - - UNUSED_PARAMETER(NotUsed); - - /* The principle used to locate the table name in the CREATE TABLE - ** statement is that the table name is the first non-space token that - ** is immediately followed by a TK_LP or TK_USING token. - */ - if( zSql ){ - do { - if( !*zCsr ){ - /* Ran out of input before finding an opening bracket. Return NULL. */ - return; - } - - /* Store the token that zCsr points to in tname. */ - tname.z = (char*)zCsr; - tname.n = len; - - /* Advance zCsr to the next token. Store that token type in 'token', - ** and its length in 'len' (to be used next iteration of this loop). - */ - do { - zCsr += len; - len = sqlite3GetToken(zCsr, &token); - } while( token==TK_SPACE ); - assert( len>0 ); - } while( token!=TK_LP && token!=TK_USING ); - - zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", (int)(((u8*)tname.z) - zSql), - zSql, zTableName, tname.z+tname.n); - sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC); - } -} - -/* -** This C function implements an SQL user function that is used by SQL code -** generated by the ALTER TABLE ... RENAME command to modify the definition -** of any foreign key constraints that use the table being renamed as the -** parent table. It is passed three arguments: -** -** 1) The complete text of the CREATE TABLE statement being modified, -** 2) The old name of the table being renamed, and -** 3) The new name of the table being renamed. -** -** It returns the new CREATE TABLE statement. For example: -** -** sqlite_rename_parent('CREATE TABLE t1(a REFERENCES t2)', 't2', 't3') -** -> 'CREATE TABLE t1(a REFERENCES t3)' -*/ -#ifndef SQLITE_OMIT_FOREIGN_KEY -static void renameParentFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - sqlite3 *db = sqlite3_context_db_handle(context); - char *zOutput = 0; - char *zResult; - unsigned char const *zInput = sqlite3_value_text(argv[0]); - unsigned char const *zOld = sqlite3_value_text(argv[1]); - unsigned char const *zNew = sqlite3_value_text(argv[2]); - - unsigned const char *z; /* Pointer to token */ - int n; /* Length of token z */ - int token; /* Type of token */ - - UNUSED_PARAMETER(NotUsed); - if( zInput==0 || zOld==0 ) return; - for(z=zInput; *z; z=z+n){ - n = sqlite3GetToken(z, &token); - if( token==TK_REFERENCES ){ - char *zParent; - do { - z += n; - n = sqlite3GetToken(z, &token); - }while( token==TK_SPACE ); - - if( token==TK_ILLEGAL ) break; - zParent = sqlite3DbStrNDup(db, (const char *)z, n); - if( zParent==0 ) break; - sqlite3Dequote(zParent); - if( 0==sqlite3StrICmp((const char *)zOld, zParent) ){ - char *zOut = sqlite3MPrintf(db, "%s%.*s\"%w\"", - (zOutput?zOutput:""), (int)(z-zInput), zInput, (const char *)zNew - ); - sqlite3DbFree(db, zOutput); - zOutput = zOut; - zInput = &z[n]; - } - sqlite3DbFree(db, zParent); - } - } - - zResult = sqlite3MPrintf(db, "%s%s", (zOutput?zOutput:""), zInput), - sqlite3_result_text(context, zResult, -1, SQLITE_DYNAMIC); - sqlite3DbFree(db, zOutput); -} -#endif - -#ifndef SQLITE_OMIT_TRIGGER -/* This function is used by SQL generated to implement the -** ALTER TABLE command. The first argument is the text of a CREATE TRIGGER -** statement. The second is a table name. The table name in the CREATE -** TRIGGER statement is replaced with the third argument and the result -** returned. This is analagous to renameTableFunc() above, except for CREATE -** TRIGGER, not CREATE INDEX and CREATE TABLE. -*/ -static void renameTriggerFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - unsigned char const *zSql = sqlite3_value_text(argv[0]); - unsigned char const *zTableName = sqlite3_value_text(argv[1]); - - int token; - Token tname; - int dist = 3; - unsigned char const *zCsr = zSql; - int len = 0; - char *zRet; - sqlite3 *db = sqlite3_context_db_handle(context); - - UNUSED_PARAMETER(NotUsed); - - /* The principle used to locate the table name in the CREATE TRIGGER - ** statement is that the table name is the first token that is immediately - ** preceded by either TK_ON or TK_DOT and immediately followed by one - ** of TK_WHEN, TK_BEGIN or TK_FOR. - */ - if( zSql ){ - do { - - if( !*zCsr ){ - /* Ran out of input before finding the table name. Return NULL. */ - return; - } - - /* Store the token that zCsr points to in tname. */ - tname.z = (char*)zCsr; - tname.n = len; - - /* Advance zCsr to the next token. Store that token type in 'token', - ** and its length in 'len' (to be used next iteration of this loop). - */ - do { - zCsr += len; - len = sqlite3GetToken(zCsr, &token); - }while( token==TK_SPACE ); - assert( len>0 ); - - /* Variable 'dist' stores the number of tokens read since the most - ** recent TK_DOT or TK_ON. This means that when a WHEN, FOR or BEGIN - ** token is read and 'dist' equals 2, the condition stated above - ** to be met. - ** - ** Note that ON cannot be a database, table or column name, so - ** there is no need to worry about syntax like - ** "CREATE TRIGGER ... ON ON.ON BEGIN ..." etc. - */ - dist++; - if( token==TK_DOT || token==TK_ON ){ - dist = 0; - } - } while( dist!=2 || (token!=TK_WHEN && token!=TK_FOR && token!=TK_BEGIN) ); - - /* Variable tname now contains the token that is the old table-name - ** in the CREATE TRIGGER statement. - */ - zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", (int)(((u8*)tname.z) - zSql), - zSql, zTableName, tname.z+tname.n); - sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC); - } -} -#endif /* !SQLITE_OMIT_TRIGGER */ - -/* -** Register built-in functions used to help implement ALTER TABLE -*/ -SQLITE_PRIVATE void sqlite3AlterFunctions(void){ - static FuncDef aAlterTableFuncs[] = { - FUNCTION(sqlite_rename_table, 2, 0, 0, renameTableFunc), -#ifndef SQLITE_OMIT_TRIGGER - FUNCTION(sqlite_rename_trigger, 2, 0, 0, renameTriggerFunc), -#endif -#ifndef SQLITE_OMIT_FOREIGN_KEY - FUNCTION(sqlite_rename_parent, 3, 0, 0, renameParentFunc), -#endif - }; - sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs)); -} - /* -** This function is used to create the text of expressions of the form: -** -** name= OR name= OR ... +** Parameter zName is the name of a table that is about to be altered +** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN). +** If the table is a system table, this function leaves an error message +** in pParse->zErr (system tables may not be altered) and returns non-zero. ** -** If argument zWhere is NULL, then a pointer string containing the text -** "name=" is returned, where is the quoted version -** of the string passed as argument zConstant. The returned buffer is -** allocated using sqlite3DbMalloc(). It is the responsibility of the -** caller to ensure that it is eventually freed. -** -** If argument zWhere is not NULL, then the string returned is -** " OR name=", where is the contents of zWhere. -** In this case zWhere is passed to sqlite3DbFree() before returning. -** -*/ -static char *whereOrName(sqlite3 *db, char *zWhere, char *zConstant){ - char *zNew; - if( !zWhere ){ - zNew = sqlite3MPrintf(db, "name=%Q", zConstant); - }else{ - zNew = sqlite3MPrintf(db, "%s OR name=%Q", zWhere, zConstant); - sqlite3DbFree(db, zWhere); - } - return zNew; -} - -#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) -/* -** Generate the text of a WHERE expression which can be used to select all -** tables that have foreign key constraints that refer to table pTab (i.e. -** constraints for which pTab is the parent table) from the sqlite_master -** table. -*/ -static char *whereForeignKeys(Parse *pParse, Table *pTab){ - FKey *p; - char *zWhere = 0; - for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ - zWhere = whereOrName(pParse->db, zWhere, p->pFrom->zName); - } - return zWhere; -} -#endif - -/* -** Generate the text of a WHERE expression which can be used to select all -** temporary triggers on table pTab from the sqlite_temp_master table. If -** table pTab has no temporary triggers, or is itself stored in the -** temporary database, NULL is returned. +** Or, if zName is not a system table, zero is returned. */ -static char *whereTempTriggers(Parse *pParse, Table *pTab){ - Trigger *pTrig; - char *zWhere = 0; - const Schema *pTempSchema = pParse->db->aDb[1].pSchema; /* Temp db schema */ - - /* If the table is not located in the temp-db (in which case NULL is - ** returned, loop through the tables list of triggers. For each trigger - ** that is not part of the temp-db schema, add a clause to the WHERE - ** expression being built up in zWhere. - */ - if( pTab->pSchema!=pTempSchema ){ - sqlite3 *db = pParse->db; - for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){ - if( pTrig->pSchema==pTempSchema ){ - zWhere = whereOrName(db, zWhere, pTrig->zName); - } - } - } - if( zWhere ){ - char *zNew = sqlite3MPrintf(pParse->db, "type='trigger' AND (%s)", zWhere); - sqlite3DbFree(pParse->db, zWhere); - zWhere = zNew; +static int isSystemTable(Parse *pParse, const char *zName){ + if( 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ + sqlite3ErrorMsg(pParse, "table %s may not be altered", zName); + return 1; } - return zWhere; + return 0; } /* -** Generate code to drop and reload the internal representation of table -** pTab from the database, including triggers and temporary triggers. -** Argument zName is the name of the table in the database schema at -** the time the generated code is executed. This can be different from -** pTab->zName if this function is being called to code part of an -** "ALTER TABLE RENAME TO" statement. +** Generate code to verify that the schemas of database zDb and, if +** bTemp is not true, database "temp", can still be parsed. This is +** called at the end of the generation of an ALTER TABLE ... RENAME ... +** statement to ensure that the operation has not rendered any schema +** objects unusable. */ -static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){ - Vdbe *v; - char *zWhere; - int iDb; /* Index of database containing pTab */ -#ifndef SQLITE_OMIT_TRIGGER - Trigger *pTrig; -#endif - - v = sqlite3GetVdbe(pParse); - if( NEVER(v==0) ) return; - assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - assert( iDb>=0 ); - -#ifndef SQLITE_OMIT_TRIGGER - /* Drop any table triggers from the internal schema. */ - for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){ - int iTrigDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema); - assert( iTrigDb==iDb || iTrigDb==1 ); - sqlite3VdbeAddOp4(v, OP_DropTrigger, iTrigDb, 0, 0, pTrig->zName, 0); - } -#endif - - /* Drop the table and index from the internal schema. */ - sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0); - - /* Reload the table, index and permanent trigger schemas. */ - zWhere = sqlite3MPrintf(pParse->db, "tbl_name=%Q", zName); - if( !zWhere ) return; - sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere); +static void renameTestSchema(Parse *pParse, const char *zDb, int bTemp){ + sqlite3NestedParse(pParse, + "SELECT 1 " + "FROM \"%w\".%s " + "WHERE name NOT LIKE 'sqlite_%%'" + " AND sql NOT LIKE 'create virtual%%'" + " AND sqlite_rename_test(%Q, sql, type, name, %d)=NULL ", + zDb, MASTER_NAME, + zDb, bTemp + ); -#ifndef SQLITE_OMIT_TRIGGER - /* Now, if the table is not stored in the temp database, reload any temp - ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined. - */ - if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){ - sqlite3VdbeAddParseSchemaOp(v, 1, zWhere); + if( bTemp==0 ){ + sqlite3NestedParse(pParse, + "SELECT 1 " + "FROM temp.%s " + "WHERE name NOT LIKE 'sqlite_%%'" + " AND sql NOT LIKE 'create virtual%%'" + " AND sqlite_rename_test(%Q, sql, type, name, 1)=NULL ", + MASTER_NAME, zDb + ); } -#endif } /* -** Parameter zName is the name of a table that is about to be altered -** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN). -** If the table is a system table, this function leaves an error message -** in pParse->zErr (system tables may not be altered) and returns non-zero. -** -** Or, if zName is not a system table, zero is returned. +** Generate code to reload the schema for database iDb. And, if iDb!=1, for +** the temp database as well. */ -static int isSystemTable(Parse *pParse, const char *zName){ - if( 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ - sqlite3ErrorMsg(pParse, "table %s may not be altered", zName); - return 1; +static void renameReloadSchema(Parse *pParse, int iDb){ + Vdbe *v = pParse->pVdbe; + if( v ){ + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, iDb, 0); + if( iDb!=1 ) sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, 1, 0); } - return 0; } /* @@ -100670,9 +101232,6 @@ int nTabName; /* Number of UTF-8 characters in zTabName */ const char *zTabName; /* Original name of the table */ Vdbe *v; -#ifndef SQLITE_OMIT_TRIGGER - char *zWhere = 0; /* Where clause to locate temp triggers */ -#endif VTable *pVTab = 0; /* Non-zero if this is a v-tab with an xRename() */ u32 savedDbFlags; /* Saved value of db->mDbFlags */ @@ -100745,52 +101304,25 @@ if( v==0 ){ goto exit_rename_table; } - sqlite3BeginWriteOperation(pParse, pVTab!=0, iDb); - sqlite3ChangeCookie(pParse, iDb); - - /* If this is a virtual table, invoke the xRename() function if - ** one is defined. The xRename() callback will modify the names - ** of any resources used by the v-table implementation (including other - ** SQLite tables) that are identified by the name of the virtual table. - */ -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( pVTab ){ - int i = ++pParse->nMem; - sqlite3VdbeLoadString(v, i, zName); - sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB); - sqlite3MayAbort(pParse); - } -#endif /* figure out how many UTF-8 characters are in zName */ zTabName = pTab->zName; nTabName = sqlite3Utf8CharLen(zTabName, -1); -#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) - if( db->flags&SQLITE_ForeignKeys ){ - /* If foreign-key support is enabled, rewrite the CREATE TABLE - ** statements corresponding to all child tables of foreign key constraints - ** for which the renamed table is the parent table. */ - if( (zWhere=whereForeignKeys(pParse, pTab))!=0 ){ - sqlite3NestedParse(pParse, - "UPDATE \"%w\".%s SET " - "sql = sqlite_rename_parent(sql, %Q, %Q) " - "WHERE %s;", zDb, MASTER_NAME, zTabName, zName, zWhere); - sqlite3DbFree(db, zWhere); - } - } -#endif + /* Rewrite all CREATE TABLE, INDEX, TRIGGER or VIEW statements in + ** the schema to use the new table name. */ + sqlite3NestedParse(pParse, + "UPDATE \"%w\".%s SET " + "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, %d) " + "WHERE (type!='index' OR tbl_name=%Q COLLATE nocase)" + "AND name NOT LIKE 'sqlite_%%'" + , zDb, MASTER_NAME, zDb, zTabName, zName, (iDb==1), zTabName + ); - /* Modify the sqlite_master table to use the new table name. */ + /* Update the tbl_name and name columns of the sqlite_master table + ** as required. */ sqlite3NestedParse(pParse, "UPDATE %Q.%s SET " -#ifdef SQLITE_OMIT_TRIGGER - "sql = sqlite_rename_table(sql, %Q), " -#else - "sql = CASE " - "WHEN type = 'trigger' THEN sqlite_rename_trigger(sql, %Q)" - "ELSE sqlite_rename_table(sql, %Q) END, " -#endif "tbl_name = %Q, " "name = CASE " "WHEN type='table' THEN %Q " @@ -100799,11 +101331,9 @@ "ELSE name END " "WHERE tbl_name=%Q COLLATE nocase AND " "(type='table' OR type='index' OR type='trigger');", - zDb, MASTER_NAME, zName, zName, zName, -#ifndef SQLITE_OMIT_TRIGGER - zName, -#endif - zName, nTabName, zTabName + zDb, MASTER_NAME, + zName, zName, zName, + nTabName, zTabName ); #ifndef SQLITE_OMIT_AUTOINCREMENT @@ -100817,35 +101347,37 @@ } #endif -#ifndef SQLITE_OMIT_TRIGGER - /* If there are TEMP triggers on this table, modify the sqlite_temp_master - ** table. Don't do this if the table being ALTERed is itself located in - ** the temp database. - */ - if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){ + /* If the table being renamed is not itself part of the temp database, + ** edit view and trigger definitions within the temp database + ** as required. */ + if( iDb!=1 ){ sqlite3NestedParse(pParse, "UPDATE sqlite_temp_master SET " - "sql = sqlite_rename_trigger(sql, %Q), " - "tbl_name = %Q " - "WHERE %s;", zName, zName, zWhere); - sqlite3DbFree(db, zWhere); + "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, 1), " + "tbl_name = " + "CASE WHEN tbl_name=%Q COLLATE nocase AND " + " sqlite_rename_test(%Q, sql, type, name, 1) " + "THEN %Q ELSE tbl_name END " + "WHERE type IN ('view', 'trigger')" + , zDb, zTabName, zName, zTabName, zDb, zName); } -#endif -#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) - if( db->flags&SQLITE_ForeignKeys ){ - FKey *p; - for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ - Table *pFrom = p->pFrom; - if( pFrom!=pTab ){ - reloadTableSchema(pParse, p->pFrom, pFrom->zName); - } - } + /* If this is a virtual table, invoke the xRename() function if + ** one is defined. The xRename() callback will modify the names + ** of any resources used by the v-table implementation (including other + ** SQLite tables) that are identified by the name of the virtual table. + */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pVTab ){ + int i = ++pParse->nMem; + sqlite3VdbeLoadString(v, i, zName); + sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB); + sqlite3MayAbort(pParse); } #endif - /* Drop and reload the internal table schema. */ - reloadTableSchema(pParse, pTab, zName); + renameReloadSchema(pParse, iDb); + renameTestSchema(pParse, zDb, iDb==1); exit_rename_table: sqlite3SrcListDelete(db, pSrc); @@ -100871,12 +101403,11 @@ Column *pCol; /* The new column */ Expr *pDflt; /* Default value for the new column */ sqlite3 *db; /* The database connection; */ - Vdbe *v = pParse->pVdbe; /* The prepared statement under construction */ + Vdbe *v; /* The prepared statement under construction */ int r1; /* Temporary registers */ db = pParse->db; if( pParse->nErr || db->mallocFailed ) return; - assert( v!=0 ); pNew = pParse->pNewTable; assert( pNew ); @@ -100971,17 +101502,20 @@ ** from less than 3 to 4, as that will corrupt any preexisting DESC ** index. */ - r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT); - sqlite3VdbeUsesBtree(v, iDb); - sqlite3VdbeAddOp2(v, OP_AddImm, r1, -2); - sqlite3VdbeAddOp2(v, OP_IfPos, r1, sqlite3VdbeCurrentAddr(v)+2); - VdbeCoverage(v); - sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, 3); - sqlite3ReleaseTempReg(pParse, r1); + v = sqlite3GetVdbe(pParse); + if( v ){ + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT); + sqlite3VdbeUsesBtree(v, iDb); + sqlite3VdbeAddOp2(v, OP_AddImm, r1, -2); + sqlite3VdbeAddOp2(v, OP_IfPos, r1, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, 3); + sqlite3ReleaseTempReg(pParse, r1); + } - /* Reload the schema of the modified table. */ - reloadTableSchema(pParse, pTab, pTab->zName); + /* Reload the table definition */ + renameReloadSchema(pParse, iDb); } /* @@ -101002,7 +101536,6 @@ SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ Table *pNew; Table *pTab; - Vdbe *v; int iDb; int i; int nAlloc; @@ -101066,45 +101599,1171 @@ pNew->addColOffset = pTab->addColOffset; pNew->nTabRef = 1; - /* Begin a transaction and increment the schema cookie. */ - sqlite3BeginWriteOperation(pParse, 0, iDb); - v = sqlite3GetVdbe(pParse); - if( !v ) goto exit_begin_add_column; - sqlite3ChangeCookie(pParse, iDb); - exit_begin_add_column: sqlite3SrcListDelete(db, pSrc); return; } -#endif /* SQLITE_ALTER_TABLE */ -/************** End of alter.c ***********************************************/ -/************** Begin file analyze.c *****************************************/ /* -** 2005-07-08 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** Parameter pTab is the subject of an ALTER TABLE ... RENAME COLUMN +** command. This function checks if the table is a view or virtual +** table (columns of views or virtual tables may not be renamed). If so, +** it loads an error message into pParse and returns non-zero. ** -************************************************************************* -** This file contains code associated with the ANALYZE command. -** -** The ANALYZE command gather statistics about the content of tables -** and indices. These statistics are made available to the query planner -** to help it make better decisions about how to perform queries. -** -** The following system tables are or have been supported: -** -** CREATE TABLE sqlite_stat1(tbl, idx, stat); -** CREATE TABLE sqlite_stat2(tbl, idx, sampleno, sample); -** CREATE TABLE sqlite_stat3(tbl, idx, nEq, nLt, nDLt, sample); -** CREATE TABLE sqlite_stat4(tbl, idx, nEq, nLt, nDLt, sample); +** Or, if pTab is not a view or virtual table, zero is returned. +*/ +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) +static int isRealTable(Parse *pParse, Table *pTab){ + const char *zType = 0; +#ifndef SQLITE_OMIT_VIEW + if( pTab->pSelect ){ + zType = "view"; + } +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + zType = "virtual table"; + } +#endif + if( zType ){ + sqlite3ErrorMsg( + pParse, "cannot rename columns of %s \"%s\"", zType, pTab->zName + ); + return 1; + } + return 0; +} +#else /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ +# define isRealTable(x,y) (0) +#endif + +/* +** Handles the following parser reduction: ** -** Additional tables might be added in future releases of SQLite. +** cmd ::= ALTER TABLE pSrc RENAME COLUMN pOld TO pNew +*/ +SQLITE_PRIVATE void sqlite3AlterRenameColumn( + Parse *pParse, /* Parsing context */ + SrcList *pSrc, /* Table being altered. pSrc->nSrc==1 */ + Token *pOld, /* Name of column being changed */ + Token *pNew /* New column name */ +){ + sqlite3 *db = pParse->db; /* Database connection */ + Table *pTab; /* Table being updated */ + int iCol; /* Index of column being renamed */ + char *zOld = 0; /* Old column name */ + char *zNew = 0; /* New column name */ + const char *zDb; /* Name of schema containing the table */ + int iSchema; /* Index of the schema */ + int bQuote; /* True to quote the new name */ + + /* Locate the table to be altered */ + pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]); + if( !pTab ) goto exit_rename_column; + + /* Cannot alter a system table */ + if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ) goto exit_rename_column; + if( SQLITE_OK!=isRealTable(pParse, pTab) ) goto exit_rename_column; + + /* Which schema holds the table to be altered */ + iSchema = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iSchema>=0 ); + zDb = db->aDb[iSchema].zDbSName; + +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Invoke the authorization callback. */ + if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ + goto exit_rename_column; + } +#endif + + /* Make sure the old name really is a column name in the table to be + ** altered. Set iCol to be the index of the column being renamed */ + zOld = sqlite3NameFromToken(db, pOld); + if( !zOld ) goto exit_rename_column; + for(iCol=0; iColnCol; iCol++){ + if( 0==sqlite3StrICmp(pTab->aCol[iCol].zName, zOld) ) break; + } + if( iCol==pTab->nCol ){ + sqlite3ErrorMsg(pParse, "no such column: \"%s\"", zOld); + goto exit_rename_column; + } + + /* Do the rename operation using a recursive UPDATE statement that + ** uses the sqlite_rename_column() SQL function to compute the new + ** CREATE statement text for the sqlite_master table. + */ + zNew = sqlite3NameFromToken(db, pNew); + if( !zNew ) goto exit_rename_column; + assert( pNew->n>0 ); + bQuote = sqlite3Isquote(pNew->z[0]); + sqlite3NestedParse(pParse, + "UPDATE \"%w\".%s SET " + "sql = sqlite_rename_column(sql, type, name, %Q, %Q, %d, %Q, %d, %d) " + "WHERE name NOT LIKE 'sqlite_%%' AND (type != 'index' OR tbl_name = %Q)" + " AND sql NOT LIKE 'create virtual%%'", + zDb, MASTER_NAME, + zDb, pTab->zName, iCol, zNew, bQuote, iSchema==1, + pTab->zName + ); + + sqlite3NestedParse(pParse, + "UPDATE temp.%s SET " + "sql = sqlite_rename_column(sql, type, name, %Q, %Q, %d, %Q, %d, 1) " + "WHERE type IN ('trigger', 'view')", + MASTER_NAME, + zDb, pTab->zName, iCol, zNew, bQuote + ); + + /* Drop and reload the database schema. */ + renameReloadSchema(pParse, iSchema); + renameTestSchema(pParse, zDb, iSchema==1); + + exit_rename_column: + sqlite3SrcListDelete(db, pSrc); + sqlite3DbFree(db, zOld); + sqlite3DbFree(db, zNew); + return; +} + +/* +** Each RenameToken object maps an element of the parse tree into +** the token that generated that element. The parse tree element +** might be one of: +** +** * A pointer to an Expr that represents an ID +** * The name of a table column in Column.zName +** +** A list of RenameToken objects can be constructed during parsing. +** Each new object is created by sqlite3RenameTokenMap(). +** As the parse tree is transformed, the sqlite3RenameTokenRemap() +** routine is used to keep the mapping current. +** +** After the parse finishes, renameTokenFind() routine can be used +** to look up the actual token value that created some element in +** the parse tree. +*/ +struct RenameToken { + void *p; /* Parse tree element created by token t */ + Token t; /* The token that created parse tree element p */ + RenameToken *pNext; /* Next is a list of all RenameToken objects */ +}; + +/* +** The context of an ALTER TABLE RENAME COLUMN operation that gets passed +** down into the Walker. +*/ +typedef struct RenameCtx RenameCtx; +struct RenameCtx { + RenameToken *pList; /* List of tokens to overwrite */ + int nList; /* Number of tokens in pList */ + int iCol; /* Index of column being renamed */ + Table *pTab; /* Table being ALTERed */ + const char *zOld; /* Old column name */ +}; + +#ifdef SQLITE_DEBUG +/* +** This function is only for debugging. It performs two tasks: +** +** 1. Checks that pointer pPtr does not already appear in the +** rename-token list. +** +** 2. Dereferences each pointer in the rename-token list. +** +** The second is most effective when debugging under valgrind or +** address-sanitizer or similar. If any of these pointers no longer +** point to valid objects, an exception is raised by the memory-checking +** tool. +** +** The point of this is to prevent comparisons of invalid pointer values. +** Even though this always seems to work, it is undefined according to the +** C standard. Example of undefined comparison: +** +** sqlite3_free(x); +** if( x==y ) ... +** +** Technically, as x no longer points into a valid object or to the byte +** following a valid object, it may not be used in comparison operations. +*/ +static void renameTokenCheckAll(Parse *pParse, void *pPtr){ + if( pParse->nErr==0 && pParse->db->mallocFailed==0 ){ + RenameToken *p; + u8 i = 0; + for(p=pParse->pRename; p; p=p->pNext){ + if( p->p ){ + assert( p->p!=pPtr ); + i += *(u8*)(p->p); + } + } + } +} +#else +# define renameTokenCheckAll(x,y) +#endif + +/* +** Add a new RenameToken object mapping parse tree element pPtr into +** token *pToken to the Parse object currently under construction. +** +** Return a copy of pPtr. +*/ +SQLITE_PRIVATE void *sqlite3RenameTokenMap(Parse *pParse, void *pPtr, Token *pToken){ + RenameToken *pNew; + assert( pPtr || pParse->db->mallocFailed ); + renameTokenCheckAll(pParse, pPtr); + pNew = sqlite3DbMallocZero(pParse->db, sizeof(RenameToken)); + if( pNew ){ + pNew->p = pPtr; + pNew->t = *pToken; + pNew->pNext = pParse->pRename; + pParse->pRename = pNew; + } + + return pPtr; +} + +/* +** It is assumed that there is already a RenameToken object associated +** with parse tree element pFrom. This function remaps the associated token +** to parse tree element pTo. +*/ +SQLITE_PRIVATE void sqlite3RenameTokenRemap(Parse *pParse, void *pTo, void *pFrom){ + RenameToken *p; + renameTokenCheckAll(pParse, pTo); + for(p=pParse->pRename; p; p=p->pNext){ + if( p->p==pFrom ){ + p->p = pTo; + break; + } + } +} + +/* +** Walker callback used by sqlite3RenameExprUnmap(). +*/ +static int renameUnmapExprCb(Walker *pWalker, Expr *pExpr){ + Parse *pParse = pWalker->pParse; + sqlite3RenameTokenRemap(pParse, 0, (void*)pExpr); + return WRC_Continue; +} + +/* +** Remove all nodes that are part of expression pExpr from the rename list. +*/ +SQLITE_PRIVATE void sqlite3RenameExprUnmap(Parse *pParse, Expr *pExpr){ + Walker sWalker; + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = renameUnmapExprCb; + sqlite3WalkExpr(&sWalker, pExpr); +} + +/* +** Remove all nodes that are part of expression-list pEList from the +** rename list. +*/ +SQLITE_PRIVATE void sqlite3RenameExprlistUnmap(Parse *pParse, ExprList *pEList){ + if( pEList ){ + int i; + Walker sWalker; + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = renameUnmapExprCb; + sqlite3WalkExprList(&sWalker, pEList); + for(i=0; inExpr; i++){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pEList->a[i].zName); + } + } +} + +/* +** Free the list of RenameToken objects given in the second argument +*/ +static void renameTokenFree(sqlite3 *db, RenameToken *pToken){ + RenameToken *pNext; + RenameToken *p; + for(p=pToken; p; p=pNext){ + pNext = p->pNext; + sqlite3DbFree(db, p); + } +} + +/* +** Search the Parse object passed as the first argument for a RenameToken +** object associated with parse tree element pPtr. If found, remove it +** from the Parse object and add it to the list maintained by the +** RenameCtx object passed as the second argument. +*/ +static void renameTokenFind(Parse *pParse, struct RenameCtx *pCtx, void *pPtr){ + RenameToken **pp; + assert( pPtr!=0 ); + for(pp=&pParse->pRename; (*pp); pp=&(*pp)->pNext){ + if( (*pp)->p==pPtr ){ + RenameToken *pToken = *pp; + *pp = pToken->pNext; + pToken->pNext = pCtx->pList; + pCtx->pList = pToken; + pCtx->nList++; + break; + } + } +} + +/* +** This is a Walker select callback. It does nothing. It is only required +** because without a dummy callback, sqlite3WalkExpr() and similar do not +** descend into sub-select statements. +*/ +static int renameColumnSelectCb(Walker *pWalker, Select *p){ + UNUSED_PARAMETER(pWalker); + UNUSED_PARAMETER(p); + return WRC_Continue; +} + +/* +** This is a Walker expression callback. +** +** For every TK_COLUMN node in the expression tree, search to see +** if the column being references is the column being renamed by an +** ALTER TABLE statement. If it is, then attach its associated +** RenameToken object to the list of RenameToken objects being +** constructed in RenameCtx object at pWalker->u.pRename. +*/ +static int renameColumnExprCb(Walker *pWalker, Expr *pExpr){ + RenameCtx *p = pWalker->u.pRename; + if( pExpr->op==TK_TRIGGER + && pExpr->iColumn==p->iCol + && pWalker->pParse->pTriggerTab==p->pTab + ){ + renameTokenFind(pWalker->pParse, p, (void*)pExpr); + }else if( pExpr->op==TK_COLUMN + && pExpr->iColumn==p->iCol + && p->pTab==pExpr->pTab + ){ + renameTokenFind(pWalker->pParse, p, (void*)pExpr); + } + return WRC_Continue; +} + +/* +** The RenameCtx contains a list of tokens that reference a column that +** is being renamed by an ALTER TABLE statement. Return the "last" +** RenameToken in the RenameCtx and remove that RenameToken from the +** RenameContext. "Last" means the last RenameToken encountered when +** the input SQL is parsed from left to right. Repeated calls to this routine +** return all column name tokens in the order that they are encountered +** in the SQL statement. +*/ +static RenameToken *renameColumnTokenNext(RenameCtx *pCtx){ + RenameToken *pBest = pCtx->pList; + RenameToken *pToken; + RenameToken **pp; + + for(pToken=pBest->pNext; pToken; pToken=pToken->pNext){ + if( pToken->t.z>pBest->t.z ) pBest = pToken; + } + for(pp=&pCtx->pList; *pp!=pBest; pp=&(*pp)->pNext); + *pp = pBest->pNext; + + return pBest; +} + +/* +** An error occured while parsing or otherwise processing a database +** object (either pParse->pNewTable, pNewIndex or pNewTrigger) as part of an +** ALTER TABLE RENAME COLUMN program. The error message emitted by the +** sub-routine is currently stored in pParse->zErrMsg. This function +** adds context to the error message and then stores it in pCtx. +*/ +static void renameColumnParseError( + sqlite3_context *pCtx, + int bPost, + sqlite3_value *pType, + sqlite3_value *pObject, + Parse *pParse +){ + const char *zT = (const char*)sqlite3_value_text(pType); + const char *zN = (const char*)sqlite3_value_text(pObject); + char *zErr; + + zErr = sqlite3_mprintf("error in %s %s%s: %s", + zT, zN, (bPost ? " after rename" : ""), + pParse->zErrMsg + ); + sqlite3_result_error(pCtx, zErr, -1); + sqlite3_free(zErr); +} + +/* +** For each name in the the expression-list pEList (i.e. each +** pEList->a[i].zName) that matches the string in zOld, extract the +** corresponding rename-token from Parse object pParse and add it +** to the RenameCtx pCtx. +*/ +static void renameColumnElistNames( + Parse *pParse, + RenameCtx *pCtx, + ExprList *pEList, + const char *zOld +){ + if( pEList ){ + int i; + for(i=0; inExpr; i++){ + char *zName = pEList->a[i].zName; + if( 0==sqlite3_stricmp(zName, zOld) ){ + renameTokenFind(pParse, pCtx, (void*)zName); + } + } + } +} + +/* +** For each name in the the id-list pIdList (i.e. each pIdList->a[i].zName) +** that matches the string in zOld, extract the corresponding rename-token +** from Parse object pParse and add it to the RenameCtx pCtx. +*/ +static void renameColumnIdlistNames( + Parse *pParse, + RenameCtx *pCtx, + IdList *pIdList, + const char *zOld +){ + if( pIdList ){ + int i; + for(i=0; inId; i++){ + char *zName = pIdList->a[i].zName; + if( 0==sqlite3_stricmp(zName, zOld) ){ + renameTokenFind(pParse, pCtx, (void*)zName); + } + } + } +} + +/* +** Parse the SQL statement zSql using Parse object (*p). The Parse object +** is initialized by this function before it is used. +*/ +static int renameParseSql( + Parse *p, /* Memory to use for Parse object */ + const char *zDb, /* Name of schema SQL belongs to */ + int bTable, /* 1 -> RENAME TABLE, 0 -> RENAME COLUMN */ + sqlite3 *db, /* Database handle */ + const char *zSql, /* SQL to parse */ + int bTemp /* True if SQL is from temp schema */ +){ + int rc; + char *zErr = 0; + + db->init.iDb = bTemp ? 1 : sqlite3FindDbName(db, zDb); + + /* Parse the SQL statement passed as the first argument. If no error + ** occurs and the parse does not result in a new table, index or + ** trigger object, the database must be corrupt. */ + memset(p, 0, sizeof(Parse)); + p->eParseMode = (bTable ? PARSE_MODE_RENAME_TABLE : PARSE_MODE_RENAME_COLUMN); + p->db = db; + p->nQueryLoop = 1; + rc = sqlite3RunParser(p, zSql, &zErr); + assert( p->zErrMsg==0 ); + assert( rc!=SQLITE_OK || zErr==0 ); + assert( (0!=p->pNewTable) + (0!=p->pNewIndex) + (0!=p->pNewTrigger)<2 ); + p->zErrMsg = zErr; + if( db->mallocFailed ) rc = SQLITE_NOMEM; + if( rc==SQLITE_OK + && p->pNewTable==0 && p->pNewIndex==0 && p->pNewTrigger==0 + ){ + rc = SQLITE_CORRUPT_BKPT; + } + +#ifdef SQLITE_DEBUG + /* Ensure that all mappings in the Parse.pRename list really do map to + ** a part of the input string. */ + if( rc==SQLITE_OK ){ + int nSql = sqlite3Strlen30(zSql); + RenameToken *pToken; + for(pToken=p->pRename; pToken; pToken=pToken->pNext){ + assert( pToken->t.z>=zSql && &pToken->t.z[pToken->t.n]<=&zSql[nSql] ); + } + } +#endif + + db->init.iDb = 0; + return rc; +} + +/* +** This function edits SQL statement zSql, replacing each token identified +** by the linked list pRename with the text of zNew. If argument bQuote is +** true, then zNew is always quoted first. If no error occurs, the result +** is loaded into context object pCtx as the result. +** +** Or, if an error occurs (i.e. an OOM condition), an error is left in +** pCtx and an SQLite error code returned. +*/ +static int renameEditSql( + sqlite3_context *pCtx, /* Return result here */ + RenameCtx *pRename, /* Rename context */ + const char *zSql, /* SQL statement to edit */ + const char *zNew, /* New token text */ + int bQuote /* True to always quote token */ +){ + int nNew = sqlite3Strlen30(zNew); + int nSql = sqlite3Strlen30(zSql); + sqlite3 *db = sqlite3_context_db_handle(pCtx); + int rc = SQLITE_OK; + char *zQuot; + char *zOut; + int nQuot; + + /* Set zQuot to point to a buffer containing a quoted copy of the + ** identifier zNew. If the corresponding identifier in the original + ** ALTER TABLE statement was quoted (bQuote==1), then set zNew to + ** point to zQuot so that all substitutions are made using the + ** quoted version of the new column name. */ + zQuot = sqlite3MPrintf(db, "\"%w\"", zNew); + if( zQuot==0 ){ + return SQLITE_NOMEM; + }else{ + nQuot = sqlite3Strlen30(zQuot); + } + if( bQuote ){ + zNew = zQuot; + nNew = nQuot; + } + + /* At this point pRename->pList contains a list of RenameToken objects + ** corresponding to all tokens in the input SQL that must be replaced + ** with the new column name. All that remains is to construct and + ** return the edited SQL string. */ + assert( nQuot>=nNew ); + zOut = sqlite3DbMallocZero(db, nSql + pRename->nList*nQuot + 1); + if( zOut ){ + int nOut = nSql; + memcpy(zOut, zSql, nSql); + while( pRename->pList ){ + int iOff; /* Offset of token to replace in zOut */ + RenameToken *pBest = renameColumnTokenNext(pRename); + + u32 nReplace; + const char *zReplace; + if( sqlite3IsIdChar(*pBest->t.z) ){ + nReplace = nNew; + zReplace = zNew; + }else{ + nReplace = nQuot; + zReplace = zQuot; + } + + iOff = pBest->t.z - zSql; + if( pBest->t.n!=nReplace ){ + memmove(&zOut[iOff + nReplace], &zOut[iOff + pBest->t.n], + nOut - (iOff + pBest->t.n) + ); + nOut += nReplace - pBest->t.n; + zOut[nOut] = '\0'; + } + memcpy(&zOut[iOff], zReplace, nReplace); + sqlite3DbFree(db, pBest); + } + + sqlite3_result_text(pCtx, zOut, -1, SQLITE_TRANSIENT); + sqlite3DbFree(db, zOut); + }else{ + rc = SQLITE_NOMEM; + } + + sqlite3_free(zQuot); + return rc; +} + +/* +** Resolve all symbols in the trigger at pParse->pNewTrigger, assuming +** it was read from the schema of database zDb. Return SQLITE_OK if +** successful. Otherwise, return an SQLite error code and leave an error +** message in the Parse object. +*/ +static int renameResolveTrigger(Parse *pParse, const char *zDb){ + sqlite3 *db = pParse->db; + Trigger *pNew = pParse->pNewTrigger; + TriggerStep *pStep; + NameContext sNC; + int rc = SQLITE_OK; + + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + assert( pNew->pTabSchema ); + pParse->pTriggerTab = sqlite3FindTable(db, pNew->table, + db->aDb[sqlite3SchemaToIndex(db, pNew->pTabSchema)].zDbSName + ); + pParse->eTriggerOp = pNew->op; + + /* Resolve symbols in WHEN clause */ + if( pNew->pWhen ){ + rc = sqlite3ResolveExprNames(&sNC, pNew->pWhen); + } + + for(pStep=pNew->step_list; rc==SQLITE_OK && pStep; pStep=pStep->pNext){ + if( pStep->pSelect ){ + sqlite3SelectPrep(pParse, pStep->pSelect, &sNC); + if( pParse->nErr ) rc = pParse->rc; + } + if( rc==SQLITE_OK && pStep->zTarget ){ + Table *pTarget = sqlite3LocateTable(pParse, 0, pStep->zTarget, zDb); + if( pTarget==0 ){ + rc = SQLITE_ERROR; + }else if( SQLITE_OK==(rc = sqlite3ViewGetColumnNames(pParse, pTarget)) ){ + SrcList sSrc; + memset(&sSrc, 0, sizeof(sSrc)); + sSrc.nSrc = 1; + sSrc.a[0].zName = pStep->zTarget; + sSrc.a[0].pTab = pTarget; + sNC.pSrcList = &sSrc; + if( pStep->pWhere ){ + rc = sqlite3ResolveExprNames(&sNC, pStep->pWhere); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprListNames(&sNC, pStep->pExprList); + } + assert( !pStep->pUpsert || (!pStep->pWhere && !pStep->pExprList) ); + if( pStep->pUpsert ){ + Upsert *pUpsert = pStep->pUpsert; + assert( rc==SQLITE_OK ); + pUpsert->pUpsertSrc = &sSrc; + sNC.uNC.pUpsert = pUpsert; + sNC.ncFlags = NC_UUpsert; + rc = sqlite3ResolveExprListNames(&sNC, pUpsert->pUpsertTarget); + if( rc==SQLITE_OK ){ + ExprList *pUpsertSet = pUpsert->pUpsertSet; + rc = sqlite3ResolveExprListNames(&sNC, pUpsertSet); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertWhere); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertTargetWhere); + } + sNC.ncFlags = 0; + } + } + } + } + return rc; +} + +/* +** Invoke sqlite3WalkExpr() or sqlite3WalkSelect() on all Select or Expr +** objects that are part of the trigger passed as the second argument. +*/ +static void renameWalkTrigger(Walker *pWalker, Trigger *pTrigger){ + TriggerStep *pStep; + + /* Find tokens to edit in WHEN clause */ + sqlite3WalkExpr(pWalker, pTrigger->pWhen); + + /* Find tokens to edit in trigger steps */ + for(pStep=pTrigger->step_list; pStep; pStep=pStep->pNext){ + sqlite3WalkSelect(pWalker, pStep->pSelect); + sqlite3WalkExpr(pWalker, pStep->pWhere); + sqlite3WalkExprList(pWalker, pStep->pExprList); + if( pStep->pUpsert ){ + Upsert *pUpsert = pStep->pUpsert; + sqlite3WalkExprList(pWalker, pUpsert->pUpsertTarget); + sqlite3WalkExprList(pWalker, pUpsert->pUpsertSet); + sqlite3WalkExpr(pWalker, pUpsert->pUpsertWhere); + sqlite3WalkExpr(pWalker, pUpsert->pUpsertTargetWhere); + } + } +} + +/* +** Free the contents of Parse object (*pParse). Do not free the memory +** occupied by the Parse object itself. +*/ +static void renameParseCleanup(Parse *pParse){ + sqlite3 *db = pParse->db; + if( pParse->pVdbe ){ + sqlite3VdbeFinalize(pParse->pVdbe); + } + sqlite3DeleteTable(db, pParse->pNewTable); + if( pParse->pNewIndex ) sqlite3FreeIndex(db, pParse->pNewIndex); + sqlite3DeleteTrigger(db, pParse->pNewTrigger); + sqlite3DbFree(db, pParse->zErrMsg); + renameTokenFree(db, pParse->pRename); + sqlite3ParserReset(pParse); +} + +/* +** SQL function: +** +** sqlite_rename_column(zSql, iCol, bQuote, zNew, zTable, zOld) +** +** 0. zSql: SQL statement to rewrite +** 1. type: Type of object ("table", "view" etc.) +** 2. object: Name of object +** 3. Database: Database name (e.g. "main") +** 4. Table: Table name +** 5. iCol: Index of column to rename +** 6. zNew: New column name +** 7. bQuote: Non-zero if the new column name should be quoted. +** 8. bTemp: True if zSql comes from temp schema +** +** Do a column rename operation on the CREATE statement given in zSql. +** The iCol-th column (left-most is 0) of table zTable is renamed from zCol +** into zNew. The name should be quoted if bQuote is true. +** +** This function is used internally by the ALTER TABLE RENAME COLUMN command. +** Though accessible to application code, it is not intended for use by +** applications. The existance of this function, and the way it works, +** is subject to change without notice. +** +** If any of the parameters are out-of-bounds, then simply return NULL. +** An out-of-bounds parameter can only occur when the application calls +** this function directly. The parameters will always be well-formed when +** this routine is invoked by the bytecode for a legitimate ALTER TABLE +** statement. +*/ +static void renameColumnFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + RenameCtx sCtx; + const char *zSql = (const char*)sqlite3_value_text(argv[0]); + const char *zDb = (const char*)sqlite3_value_text(argv[3]); + const char *zTable = (const char*)sqlite3_value_text(argv[4]); + int iCol = sqlite3_value_int(argv[5]); + const char *zNew = (const char*)sqlite3_value_text(argv[6]); + int bQuote = sqlite3_value_int(argv[7]); + int bTemp = sqlite3_value_int(argv[8]); + const char *zOld; + int rc; + Parse sParse; + Walker sWalker; + Index *pIdx; + int i; + Table *pTab; +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; +#endif + + UNUSED_PARAMETER(NotUsed); + if( zSql==0 ) return; + if( zTable==0 ) return; + if( zNew==0 ) return; + if( iCol<0 ) return; + sqlite3BtreeEnterAll(db); + pTab = sqlite3FindTable(db, zTable, zDb); + if( pTab==0 || iCol>=pTab->nCol ){ + sqlite3BtreeLeaveAll(db); + return; + } + zOld = pTab->aCol[iCol].zName; + memset(&sCtx, 0, sizeof(sCtx)); + sCtx.iCol = ((iCol==pTab->iPKey) ? -1 : iCol); + +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = 0; +#endif + rc = renameParseSql(&sParse, zDb, 0, db, zSql, bTemp); + + /* Find tokens that need to be replaced. */ + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = &sParse; + sWalker.xExprCallback = renameColumnExprCb; + sWalker.xSelectCallback = renameColumnSelectCb; + sWalker.u.pRename = &sCtx; + + sCtx.pTab = pTab; + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + if( sParse.pNewTable ){ + Select *pSelect = sParse.pNewTable->pSelect; + if( pSelect ){ + sParse.rc = SQLITE_OK; + sqlite3SelectPrep(&sParse, sParse.pNewTable->pSelect, 0); + rc = (db->mallocFailed ? SQLITE_NOMEM : sParse.rc); + if( rc==SQLITE_OK ){ + sqlite3WalkSelect(&sWalker, pSelect); + } + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + }else{ + /* A regular table */ + int bFKOnly = sqlite3_stricmp(zTable, sParse.pNewTable->zName); + FKey *pFKey; + assert( sParse.pNewTable->pSelect==0 ); + sCtx.pTab = sParse.pNewTable; + if( bFKOnly==0 ){ + renameTokenFind( + &sParse, &sCtx, (void*)sParse.pNewTable->aCol[iCol].zName + ); + if( sCtx.iCol<0 ){ + renameTokenFind(&sParse, &sCtx, (void*)&sParse.pNewTable->iPKey); + } + sqlite3WalkExprList(&sWalker, sParse.pNewTable->pCheck); + for(pIdx=sParse.pNewTable->pIndex; pIdx; pIdx=pIdx->pNext){ + sqlite3WalkExprList(&sWalker, pIdx->aColExpr); + } + } + + for(pFKey=sParse.pNewTable->pFKey; pFKey; pFKey=pFKey->pNextFrom){ + for(i=0; inCol; i++){ + if( bFKOnly==0 && pFKey->aCol[i].iFrom==iCol ){ + renameTokenFind(&sParse, &sCtx, (void*)&pFKey->aCol[i]); + } + if( 0==sqlite3_stricmp(pFKey->zTo, zTable) + && 0==sqlite3_stricmp(pFKey->aCol[i].zCol, zOld) + ){ + renameTokenFind(&sParse, &sCtx, (void*)pFKey->aCol[i].zCol); + } + } + } + } + }else if( sParse.pNewIndex ){ + sqlite3WalkExprList(&sWalker, sParse.pNewIndex->aColExpr); + sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere); + }else{ + /* A trigger */ + TriggerStep *pStep; + rc = renameResolveTrigger(&sParse, (bTemp ? 0 : zDb)); + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + + for(pStep=sParse.pNewTrigger->step_list; pStep; pStep=pStep->pNext){ + if( pStep->zTarget ){ + Table *pTarget = sqlite3LocateTable(&sParse, 0, pStep->zTarget, zDb); + if( pTarget==pTab ){ + if( pStep->pUpsert ){ + ExprList *pUpsertSet = pStep->pUpsert->pUpsertSet; + renameColumnElistNames(&sParse, &sCtx, pUpsertSet, zOld); + } + renameColumnIdlistNames(&sParse, &sCtx, pStep->pIdList, zOld); + renameColumnElistNames(&sParse, &sCtx, pStep->pExprList, zOld); + } + } + } + + + /* Find tokens to edit in UPDATE OF clause */ + if( sParse.pTriggerTab==pTab ){ + renameColumnIdlistNames(&sParse, &sCtx,sParse.pNewTrigger->pColumns,zOld); + } + + /* Find tokens to edit in various expressions and selects */ + renameWalkTrigger(&sWalker, sParse.pNewTrigger); + } + + assert( rc==SQLITE_OK ); + rc = renameEditSql(context, &sCtx, zSql, zNew, bQuote); + +renameColumnFunc_done: + if( rc!=SQLITE_OK ){ + if( sParse.zErrMsg ){ + renameColumnParseError(context, 0, argv[1], argv[2], &sParse); + }else{ + sqlite3_result_error_code(context, rc); + } + } + + renameParseCleanup(&sParse); + renameTokenFree(db, sCtx.pList); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + sqlite3BtreeLeaveAll(db); +} + +/* +** Walker expression callback used by "RENAME TABLE". +*/ +static int renameTableExprCb(Walker *pWalker, Expr *pExpr){ + RenameCtx *p = pWalker->u.pRename; + if( pExpr->op==TK_COLUMN && p->pTab==pExpr->pTab ){ + renameTokenFind(pWalker->pParse, p, (void*)&pExpr->pTab); + } + return WRC_Continue; +} + +/* +** Walker select callback used by "RENAME TABLE". +*/ +static int renameTableSelectCb(Walker *pWalker, Select *pSelect){ + int i; + RenameCtx *p = pWalker->u.pRename; + SrcList *pSrc = pSelect->pSrc; + for(i=0; inSrc; i++){ + struct SrcList_item *pItem = &pSrc->a[i]; + if( pItem->pTab==p->pTab ){ + renameTokenFind(pWalker->pParse, p, pItem->zName); + } + } + + return WRC_Continue; +} + + +/* +** This C function implements an SQL user function that is used by SQL code +** generated by the ALTER TABLE ... RENAME command to modify the definition +** of any foreign key constraints that use the table being renamed as the +** parent table. It is passed three arguments: +** +** 0: The database containing the table being renamed. +** 1. type: Type of object ("table", "view" etc.) +** 2. object: Name of object +** 3: The complete text of the schema statement being modified, +** 4: The old name of the table being renamed, and +** 5: The new name of the table being renamed. +** 6: True if the schema statement comes from the temp db. +** +** It returns the new schema statement. For example: +** +** sqlite_rename_table('main', 'CREATE TABLE t1(a REFERENCES t2)','t2','t3',0) +** -> 'CREATE TABLE t1(a REFERENCES t3)' +*/ +static void renameTableFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + const char *zDb = (const char*)sqlite3_value_text(argv[0]); + const char *zInput = (const char*)sqlite3_value_text(argv[3]); + const char *zOld = (const char*)sqlite3_value_text(argv[4]); + const char *zNew = (const char*)sqlite3_value_text(argv[5]); + int bTemp = sqlite3_value_int(argv[6]); + UNUSED_PARAMETER(NotUsed); + + if( zInput && zOld && zNew ){ + Parse sParse; + int rc; + int bQuote = 1; + RenameCtx sCtx; + Walker sWalker; + +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; + db->xAuth = 0; +#endif + + sqlite3BtreeEnterAll(db); + + memset(&sCtx, 0, sizeof(RenameCtx)); + sCtx.pTab = sqlite3FindTable(db, zOld, zDb); + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = &sParse; + sWalker.xExprCallback = renameTableExprCb; + sWalker.xSelectCallback = renameTableSelectCb; + sWalker.u.pRename = &sCtx; + + rc = renameParseSql(&sParse, zDb, 1, db, zInput, bTemp); + + if( rc==SQLITE_OK ){ + int isLegacy = (db->flags & SQLITE_LegacyAlter); + if( sParse.pNewTable ){ + Table *pTab = sParse.pNewTable; + + if( pTab->pSelect ){ + if( isLegacy==0 ){ + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = &sParse; + + sqlite3SelectPrep(&sParse, pTab->pSelect, &sNC); + if( sParse.nErr ) rc = sParse.rc; + sqlite3WalkSelect(&sWalker, pTab->pSelect); + } + }else{ + /* Modify any FK definitions to point to the new table. */ +#ifndef SQLITE_OMIT_FOREIGN_KEY + if( db->flags & SQLITE_ForeignKeys ){ + FKey *pFKey; + for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){ + if( sqlite3_stricmp(pFKey->zTo, zOld)==0 ){ + renameTokenFind(&sParse, &sCtx, (void*)pFKey->zTo); + } + } + } +#endif + + /* If this is the table being altered, fix any table refs in CHECK + ** expressions. Also update the name that appears right after the + ** "CREATE [VIRTUAL] TABLE" bit. */ + if( sqlite3_stricmp(zOld, pTab->zName)==0 ){ + sCtx.pTab = pTab; + if( isLegacy==0 ){ + sqlite3WalkExprList(&sWalker, pTab->pCheck); + } + renameTokenFind(&sParse, &sCtx, pTab->zName); + } + } + } + + else if( sParse.pNewIndex ){ + renameTokenFind(&sParse, &sCtx, sParse.pNewIndex->zName); + if( isLegacy==0 ){ + sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere); + } + } + +#ifndef SQLITE_OMIT_TRIGGER + else{ + Trigger *pTrigger = sParse.pNewTrigger; + TriggerStep *pStep; + if( 0==sqlite3_stricmp(sParse.pNewTrigger->table, zOld) + && sCtx.pTab->pSchema==pTrigger->pTabSchema + ){ + renameTokenFind(&sParse, &sCtx, sParse.pNewTrigger->table); + } + + if( isLegacy==0 ){ + rc = renameResolveTrigger(&sParse, bTemp ? 0 : zDb); + if( rc==SQLITE_OK ){ + renameWalkTrigger(&sWalker, pTrigger); + for(pStep=pTrigger->step_list; pStep; pStep=pStep->pNext){ + if( pStep->zTarget && 0==sqlite3_stricmp(pStep->zTarget, zOld) ){ + renameTokenFind(&sParse, &sCtx, pStep->zTarget); + } + } + } + } + } +#endif + } + + if( rc==SQLITE_OK ){ + rc = renameEditSql(context, &sCtx, zInput, zNew, bQuote); + } + if( rc!=SQLITE_OK ){ + if( sParse.zErrMsg ){ + renameColumnParseError(context, 0, argv[1], argv[2], &sParse); + }else{ + sqlite3_result_error_code(context, rc); + } + } + + renameParseCleanup(&sParse); + renameTokenFree(db, sCtx.pList); + sqlite3BtreeLeaveAll(db); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + } + + return; +} + +/* +** An SQL user function that checks that there are no parse or symbol +** resolution problems in a CREATE TRIGGER|TABLE|VIEW|INDEX statement. +** After an ALTER TABLE .. RENAME operation is performed and the schema +** reloaded, this function is called on each SQL statement in the schema +** to ensure that it is still usable. +** +** 0: Database name ("main", "temp" etc.). +** 1: SQL statement. +** 2: Object type ("view", "table", "trigger" or "index"). +** 3: Object name. +** 4: True if object is from temp schema. +** +** Unless it finds an error, this function normally returns NULL. However, it +** returns integer value 1 if: +** +** * the SQL argument creates a trigger, and +** * the table that the trigger is attached to is in database zDb. +*/ +static void renameTableTest( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + char const *zDb = (const char*)sqlite3_value_text(argv[0]); + char const *zInput = (const char*)sqlite3_value_text(argv[1]); + int bTemp = sqlite3_value_int(argv[4]); + int isLegacy = (db->flags & SQLITE_LegacyAlter); + +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; + db->xAuth = 0; +#endif + + UNUSED_PARAMETER(NotUsed); + if( zDb && zInput ){ + int rc; + Parse sParse; + rc = renameParseSql(&sParse, zDb, 1, db, zInput, bTemp); + if( rc==SQLITE_OK ){ + if( isLegacy==0 && sParse.pNewTable && sParse.pNewTable->pSelect ){ + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = &sParse; + sqlite3SelectPrep(&sParse, sParse.pNewTable->pSelect, &sNC); + if( sParse.nErr ) rc = sParse.rc; + } + + else if( sParse.pNewTrigger ){ + if( isLegacy==0 ){ + rc = renameResolveTrigger(&sParse, bTemp ? 0 : zDb); + } + if( rc==SQLITE_OK ){ + int i1 = sqlite3SchemaToIndex(db, sParse.pNewTrigger->pTabSchema); + int i2 = sqlite3FindDbName(db, zDb); + if( i1==i2 ) sqlite3_result_int(context, 1); + } + } + } + + if( rc!=SQLITE_OK ){ + renameColumnParseError(context, 1, argv[2], argv[3], &sParse); + } + renameParseCleanup(&sParse); + } + +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif +} + +/* +** Register built-in functions used to help implement ALTER TABLE +*/ +SQLITE_PRIVATE void sqlite3AlterFunctions(void){ + static FuncDef aAlterTableFuncs[] = { + FUNCTION(sqlite_rename_column, 9, 0, 0, renameColumnFunc), + FUNCTION(sqlite_rename_table, 7, 0, 0, renameTableFunc), + FUNCTION(sqlite_rename_test, 5, 0, 0, renameTableTest), + }; + sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs)); +} +#endif /* SQLITE_ALTER_TABLE */ + +/************** End of alter.c ***********************************************/ +/************** Begin file analyze.c *****************************************/ +/* +** 2005-07-08 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code associated with the ANALYZE command. +** +** The ANALYZE command gather statistics about the content of tables +** and indices. These statistics are made available to the query planner +** to help it make better decisions about how to perform queries. +** +** The following system tables are or have been supported: +** +** CREATE TABLE sqlite_stat1(tbl, idx, stat); +** CREATE TABLE sqlite_stat2(tbl, idx, sampleno, sample); +** CREATE TABLE sqlite_stat3(tbl, idx, nEq, nLt, nDLt, sample); +** CREATE TABLE sqlite_stat4(tbl, idx, nEq, nLt, nDLt, sample); +** +** Additional tables might be added in future releases of SQLite. ** The sqlite_stat2 table is not created or used unless the SQLite version ** is between 3.6.18 and 3.7.8, inclusive, and unless SQLite is compiled ** with SQLITE_ENABLE_STAT2. The sqlite_stat2 table is deprecated. @@ -101567,6 +103226,7 @@ 0, /* pNext */ statInit, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "stat_init", /* zName */ {0} }; @@ -101883,6 +103543,7 @@ 0, /* pNext */ statPush, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "stat_push", /* zName */ {0} }; @@ -102034,6 +103695,7 @@ 0, /* pNext */ statGet, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "stat_get", /* zName */ {0} }; @@ -102353,10 +104015,7 @@ callStatGet(v, regStat4, STAT_GET_NLT, regLt); callStatGet(v, regStat4, STAT_GET_NDLT, regDLt); sqlite3VdbeAddOp4Int(v, seekOp, iTabCur, addrNext, regSampleRowid, 0); - /* We know that the regSampleRowid row exists because it was read by - ** the previous loop. Thus the not-found jump of seekOp will never - ** be taken */ - VdbeCoverageNeverTaken(v); + VdbeCoverage(v); #ifdef SQLITE_ENABLE_STAT3 sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iTabCur, 0, regSample); #else @@ -102996,7 +104655,7 @@ /* Load the statistics from the sqlite_stat4 table. */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 - if( rc==SQLITE_OK && OptimizationEnabled(db, SQLITE_Stat34) ){ + if( rc==SQLITE_OK ){ db->lookaside.bDisable++; rc = loadStat4(db, sInfo.zDatabase); db->lookaside.bDisable--; @@ -103435,6 +105094,7 @@ 0, /* pNext */ detachFunc, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "sqlite_detach", /* zName */ {0} }; @@ -103454,6 +105114,7 @@ 0, /* pNext */ attachFunc, /* xSFunc */ 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ "sqlite_attach", /* zName */ {0} }; @@ -103726,7 +105387,7 @@ sqlite3_mutex_enter(db->mutex); db->xAuth = (sqlite3_xauth)xAuth; db->pAuthArg = pArg; - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); sqlite3_mutex_leave(db->mutex); return SQLITE_OK; } @@ -103855,7 +105516,7 @@ /* Don't do any authorization checks if the database is initialising ** or if the parser is being invoked from within sqlite3_declare_vtab. */ - if( db->init.busy || IN_DECLARE_VTAB ){ + if( db->init.busy || IN_SPECIAL_PARSE ){ return SQLITE_OK; } @@ -104147,7 +105808,6 @@ /* Get the VDBE program ready for execution */ if( v && pParse->nErr==0 && !db->mallocFailed ){ - assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */ /* A minimum of one cursor is required if autoincrement is used * See ticket [a696379c1f08866] */ if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1; @@ -104362,7 +106022,7 @@ /* ** Reclaim the memory used by an index */ -static void freeIndex(sqlite3 *db, Index *p){ +SQLITE_PRIVATE void sqlite3FreeIndex(sqlite3 *db, Index *p){ #ifndef SQLITE_OMIT_ANALYZE sqlite3DeleteIndexSamples(db, p); #endif @@ -104402,7 +106062,7 @@ p->pNext = pIndex->pNext; } } - freeIndex(db, pIndex); + sqlite3FreeIndex(db, pIndex); } db->mDbFlags |= DBFLAG_SchemaChange; } @@ -104548,7 +106208,7 @@ assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); assert( pOld==pIndex || pOld==0 ); } - freeIndex(db, pIndex); + sqlite3FreeIndex(db, pIndex); } /* Delete any foreign keys attached to this table. */ @@ -104706,7 +106366,7 @@ return -1; } }else{ - assert( db->init.iDb==0 || db->init.busy + assert( db->init.iDb==0 || db->init.busy || IN_RENAME_OBJECT || (db->mDbFlags & DBFLAG_Vacuum)!=0); iDb = db->init.iDb; *pUnqual = pName1; @@ -104801,6 +106461,9 @@ } if( !OMIT_TEMPDB && isTemp ) iDb = 1; zName = sqlite3NameFromToken(db, pName); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)zName, pName); + } } pParse->sNameToken = *pName; if( zName==0 ) return; @@ -104836,7 +106499,7 @@ ** and types will be used, so there is no need to test for namespace ** collisions. */ - if( !IN_DECLARE_VTAB ){ + if( !IN_SPECIAL_PARSE ){ char *zDb = db->aDb[iDb].zDbSName; if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ goto begin_table_error; @@ -104995,6 +106658,7 @@ } z = sqlite3DbMallocRaw(db, pName->n + pType->n + 2); if( z==0 ) return; + if( IN_RENAME_OBJECT ) sqlite3RenameTokenMap(pParse, (void*)z, pName); memcpy(z, pName->z, pName->n); z[pName->n] = 0; sqlite3Dequote(z); @@ -105201,6 +106865,9 @@ sqlite3DbFree(db, x.u.zToken); } } + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprUnmap(pParse, pExpr); + } sqlite3ExprDelete(db, pExpr); } @@ -105292,6 +106959,9 @@ && sqlite3StrICmp(sqlite3ColumnType(pCol,""), "INTEGER")==0 && sortOrder!=SQLITE_SO_DESC ){ + if( IN_RENAME_OBJECT && pList ){ + sqlite3RenameTokenRemap(pParse, &pTab->iPKey, pList->a[0].pExpr); + } pTab->iPKey = iCol; pTab->keyConf = (u8)onError; assert( autoInc==0 || autoInc==1 ); @@ -105617,6 +107287,31 @@ return 0; } +/* Recompute the colNotIdxed field of the Index. +** +** colNotIdxed is a bitmask that has a 0 bit representing each indexed +** columns that are within the first 63 columns of the table. The +** high-order bit of colNotIdxed is always 1. All unindexed columns +** of the table have a 1. +** +** The colNotIdxed mask is AND-ed with the SrcList.a[].colUsed mask +** to determine if the index is covering index. +*/ +static void recomputeColumnsNotIndexed(Index *pIdx){ + Bitmask m = 0; + int j; + for(j=pIdx->nColumn-1; j>=0; j--){ + int x = pIdx->aiColumn[j]; + if( x>=0 ){ + testcase( x==BMS-1 ); + testcase( x==BMS-2 ); + if( xcolNotIdxed = ~m; + assert( (pIdx->colNotIdxed>>63)==1 ); +} + /* ** This routine runs at the end of parsing a CREATE TABLE statement that ** has a WITHOUT ROWID clause. The job of this routine is to convert both @@ -105659,10 +107354,6 @@ } } - /* The remaining transformations only apply to b-tree tables, not to - ** virtual tables */ - if( IN_DECLARE_VTAB ) return; - /* Convert the P3 operand of the OP_CreateBtree opcode from BTREE_INTKEY ** into BTREE_BLOBKEY. */ @@ -105685,7 +107376,7 @@ assert( pParse->pNewTable==pTab ); sqlite3CreateIndex(pParse, 0, 0, 0, pList, pTab->keyConf, 0, 0, 0, 0, SQLITE_IDXTYPE_PRIMARYKEY); - if( db->mallocFailed ) return; + if( db->mallocFailed || pParse->nErr ) return; pPk = sqlite3PrimaryKeyIndex(pTab); pTab->iPKey = -1; }else{ @@ -105765,6 +107456,7 @@ }else{ pPk->nColumn = pTab->nCol; } + recomputeColumnsNotIndexed(pPk); } /* @@ -106068,7 +107760,12 @@ ** allocated rather than point to the input string - which means that ** they will persist after the current sqlite3_exec() call returns. */ - p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + if( IN_RENAME_OBJECT ){ + p->pSelect = pSelect; + pSelect = 0; + }else{ + p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + } p->pCheck = sqlite3ExprListDup(db, pCNames, EXPRDUP_REDUCE); if( db->mallocFailed ) goto create_view_fail; @@ -106093,6 +107790,9 @@ create_view_fail: sqlite3SelectDelete(db, pSelect); + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprlistUnmap(pParse, pCNames); + } sqlite3ExprListDelete(db, pCNames); return; } @@ -106166,6 +107866,10 @@ assert( pTable->pSelect ); pSel = sqlite3SelectDup(db, pTable->pSelect, 0); if( pSel ){ +#ifndef SQLITE_OMIT_ALTERTABLE + u8 eParseMode = pParse->eParseMode; + pParse->eParseMode = PARSE_MODE_NORMAL; +#endif n = pParse->nTab; sqlite3SrcListAssignCursors(pParse, pSel->pSrc); pTable->nCol = -1; @@ -106211,10 +107915,18 @@ sqlite3DeleteTable(db, pSelTab); sqlite3SelectDelete(db, pSel); db->lookaside.bDisable--; +#ifndef SQLITE_OMIT_ALTERTABLE + pParse->eParseMode = eParseMode; +#endif } else { nErr++; } pTable->pSchema->schemaFlags |= DB_UnresetViews; + if( db->mallocFailed ){ + sqlite3DeleteColumnNames(db, pTable); + pTable->aCol = 0; + pTable->nCol = 0; + } #endif /* SQLITE_OMIT_VIEW */ return nErr; } @@ -106553,8 +108265,10 @@ v = sqlite3GetVdbe(pParse); if( v ){ sqlite3BeginWriteOperation(pParse, 1, iDb); - sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName); - sqlite3FkDropTable(pParse, pName, pTab); + if( !isView ){ + sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName); + sqlite3FkDropTable(pParse, pName, pTab); + } sqlite3CodeDropTable(pParse, pTab, iDb, isView); } @@ -106629,6 +108343,9 @@ pFKey->pNextFrom = p->pFKey; z = (char*)&pFKey->aCol[nCol]; pFKey->zTo = z; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)z, pTo); + } memcpy(z, pTo->z, pTo->n); z[pTo->n] = 0; sqlite3Dequote(z); @@ -106651,12 +108368,18 @@ pFromCol->a[i].zName); goto fk_end; } + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, &pFKey->aCol[i], pFromCol->a[i].zName); + } } } if( pToCol ){ for(i=0; ia[i].zName); pFKey->aCol[i].zCol = z; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, z, pToCol->a[i].zName); + } memcpy(z, pToCol->a[i].zName, n); z[n] = 0; z += n+1; @@ -106989,20 +108712,22 @@ if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ goto exit_create_index; } - if( !db->init.busy ){ - if( sqlite3FindTable(db, zName, 0)!=0 ){ - sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); - goto exit_create_index; + if( !IN_RENAME_OBJECT ){ + if( !db->init.busy ){ + if( sqlite3FindTable(db, zName, 0)!=0 ){ + sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); + goto exit_create_index; + } } - } - if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){ - if( !ifNotExist ){ - sqlite3ErrorMsg(pParse, "index %s already exists", zName); - }else{ - assert( !db->init.busy ); - sqlite3CodeVerifySchema(pParse, iDb); + if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){ + if( !ifNotExist ){ + sqlite3ErrorMsg(pParse, "index %s already exists", zName); + }else{ + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); + } + goto exit_create_index; } - goto exit_create_index; } }else{ int n; @@ -107018,13 +108743,13 @@ ** The following statement converts "sqlite3_autoindex..." into ** "sqlite3_butoindex..." in order to make the names distinct. ** The "vtab_err.test" test demonstrates the need of this statement. */ - if( IN_DECLARE_VTAB ) zName[7]++; + if( IN_SPECIAL_PARSE ) zName[7]++; } /* Check for authorization to create an index. */ #ifndef SQLITE_OMIT_AUTHORIZATION - { + if( !IN_RENAME_OBJECT ){ const char *zDb = pDb->zDbSName; if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){ goto exit_create_index; @@ -107111,7 +108836,12 @@ ** TODO: Issue a warning if the table primary key is used as part of the ** index key. */ - for(i=0, pListItem=pList->a; inExpr; i++, pListItem++){ + pListItem = pList->a; + if( IN_RENAME_OBJECT ){ + pIndex->aColExpr = pList; + pList = 0; + } + for(i=0; inKeyCol; i++, pListItem++){ Expr *pCExpr; /* The i-th index expression */ int requestedSortOrder; /* ASC or DESC on the i-th expression */ const char *zColl; /* Collation sequence name */ @@ -107127,12 +108857,8 @@ goto exit_create_index; } if( pIndex->aColExpr==0 ){ - ExprList *pCopy = sqlite3ExprListDup(db, pList, 0); - pIndex->aColExpr = pCopy; - if( !db->mallocFailed ){ - assert( pCopy!=0 ); - pListItem = &pCopy->a[i]; - } + pIndex->aColExpr = pList; + pList = 0; } j = XN_EXPR; pIndex->aiColumn[i] = XN_EXPR; @@ -107198,6 +108924,7 @@ ** it as a covering index */ assert( HasRowid(pTab) || pTab->iPKey<0 || sqlite3ColumnOfIndex(pIndex, pTab->iPKey)>=0 ); + recomputeColumnsNotIndexed(pIndex); if( pTblName!=0 && pIndex->nColumn>=pTab->nCol ){ pIndex->isCovering = 1; for(j=0; jnCol; j++){ @@ -107270,98 +108997,101 @@ } } - /* Link the new Index structure to its table and to the other - ** in-memory database structures. - */ - assert( pParse->nErr==0 ); - if( db->init.busy ){ - Index *p; - assert( !IN_DECLARE_VTAB ); - assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); - p = sqlite3HashInsert(&pIndex->pSchema->idxHash, - pIndex->zName, pIndex); - if( p ){ - assert( p==pIndex ); /* Malloc must have failed */ - sqlite3OomFault(db); - goto exit_create_index; - } - db->mDbFlags |= DBFLAG_SchemaChange; - if( pTblName!=0 ){ - pIndex->tnum = db->init.newTnum; - } - } - - /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the - ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then - ** emit code to allocate the index rootpage on disk and make an entry for - ** the index in the sqlite_master table and populate the index with - ** content. But, do not do this if we are simply reading the sqlite_master - ** table to parse the schema, or if this index is the PRIMARY KEY index - ** of a WITHOUT ROWID table. - ** - ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY - ** or UNIQUE index in a CREATE TABLE statement. Since the table - ** has just been created, it contains no data and the index initialization - ** step can be skipped. - */ - else if( HasRowid(pTab) || pTblName!=0 ){ - Vdbe *v; - char *zStmt; - int iMem = ++pParse->nMem; - - v = sqlite3GetVdbe(pParse); - if( v==0 ) goto exit_create_index; - - sqlite3BeginWriteOperation(pParse, 1, iDb); - - /* Create the rootpage for the index using CreateIndex. But before - ** doing so, code a Noop instruction and store its address in - ** Index.tnum. This is required in case this index is actually a - ** PRIMARY KEY and the table is actually a WITHOUT ROWID table. In - ** that case the convertToWithoutRowidTable() routine will replace - ** the Noop with a Goto to jump over the VDBE code generated below. */ - pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop); - sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, iMem, BTREE_BLOBKEY); + if( !IN_RENAME_OBJECT ){ - /* Gather the complete text of the CREATE INDEX statement into - ** the zStmt variable + /* Link the new Index structure to its table and to the other + ** in-memory database structures. */ - if( pStart ){ - int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n; - if( pName->z[n-1]==';' ) n--; - /* A named index with an explicit CREATE INDEX statement */ - zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s", - onError==OE_None ? "" : " UNIQUE", n, pName->z); - }else{ - /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */ - /* zStmt = sqlite3MPrintf(""); */ - zStmt = 0; + assert( pParse->nErr==0 ); + if( db->init.busy ){ + Index *p; + assert( !IN_SPECIAL_PARSE ); + assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); + p = sqlite3HashInsert(&pIndex->pSchema->idxHash, + pIndex->zName, pIndex); + if( p ){ + assert( p==pIndex ); /* Malloc must have failed */ + sqlite3OomFault(db); + goto exit_create_index; + } + db->mDbFlags |= DBFLAG_SchemaChange; + if( pTblName!=0 ){ + pIndex->tnum = db->init.newTnum; + } } - /* Add an entry in sqlite_master for this index - */ - sqlite3NestedParse(pParse, - "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);", - db->aDb[iDb].zDbSName, MASTER_NAME, - pIndex->zName, - pTab->zName, - iMem, - zStmt - ); - sqlite3DbFree(db, zStmt); + /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the + ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then + ** emit code to allocate the index rootpage on disk and make an entry for + ** the index in the sqlite_master table and populate the index with + ** content. But, do not do this if we are simply reading the sqlite_master + ** table to parse the schema, or if this index is the PRIMARY KEY index + ** of a WITHOUT ROWID table. + ** + ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY + ** or UNIQUE index in a CREATE TABLE statement. Since the table + ** has just been created, it contains no data and the index initialization + ** step can be skipped. + */ + else if( HasRowid(pTab) || pTblName!=0 ){ + Vdbe *v; + char *zStmt; + int iMem = ++pParse->nMem; + + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto exit_create_index; + + sqlite3BeginWriteOperation(pParse, 1, iDb); + + /* Create the rootpage for the index using CreateIndex. But before + ** doing so, code a Noop instruction and store its address in + ** Index.tnum. This is required in case this index is actually a + ** PRIMARY KEY and the table is actually a WITHOUT ROWID table. In + ** that case the convertToWithoutRowidTable() routine will replace + ** the Noop with a Goto to jump over the VDBE code generated below. */ + pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop); + sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, iMem, BTREE_BLOBKEY); + + /* Gather the complete text of the CREATE INDEX statement into + ** the zStmt variable + */ + if( pStart ){ + int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n; + if( pName->z[n-1]==';' ) n--; + /* A named index with an explicit CREATE INDEX statement */ + zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s", + onError==OE_None ? "" : " UNIQUE", n, pName->z); + }else{ + /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */ + /* zStmt = sqlite3MPrintf(""); */ + zStmt = 0; + } - /* Fill the index with data and reparse the schema. Code an OP_Expire - ** to invalidate all pre-compiled statements. - */ - if( pTblName ){ - sqlite3RefillIndex(pParse, pIndex, iMem); - sqlite3ChangeCookie(pParse, iDb); - sqlite3VdbeAddParseSchemaOp(v, iDb, - sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName)); - sqlite3VdbeAddOp0(v, OP_Expire); - } + /* Add an entry in sqlite_master for this index + */ + sqlite3NestedParse(pParse, + "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);", + db->aDb[iDb].zDbSName, MASTER_NAME, + pIndex->zName, + pTab->zName, + iMem, + zStmt + ); + sqlite3DbFree(db, zStmt); + + /* Fill the index with data and reparse the schema. Code an OP_Expire + ** to invalidate all pre-compiled statements. + */ + if( pTblName ){ + sqlite3RefillIndex(pParse, pIndex, iMem); + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(v, iDb, + sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName)); + sqlite3VdbeAddOp2(v, OP_Expire, 0, 1); + } - sqlite3VdbeJumpHere(v, pIndex->tnum); + sqlite3VdbeJumpHere(v, pIndex->tnum); + } } /* When adding an index to the list of indices for a table, make @@ -107385,10 +109115,15 @@ } pIndex = 0; } + else if( IN_RENAME_OBJECT ){ + assert( pParse->pNewIndex==0 ); + pParse->pNewIndex = pIndex; + pIndex = 0; + } /* Clean up before exiting */ exit_create_index: - if( pIndex ) freeIndex(db, pIndex); + if( pIndex ) sqlite3FreeIndex(db, pIndex); sqlite3ExprDelete(db, pPIWhere); sqlite3ExprListDelete(db, pList); sqlite3SrcListDelete(db, pTblName); @@ -107557,7 +109292,8 @@ ** ** A new IdList is returned, or NULL if malloc() fails. */ -SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){ +SQLITE_PRIVATE IdList *sqlite3IdListAppend(Parse *pParse, IdList *pList, Token *pToken){ + sqlite3 *db = pParse->db; int i; if( pList==0 ){ pList = sqlite3DbMallocZero(db, sizeof(IdList) ); @@ -107575,6 +109311,9 @@ return 0; } pList->a[i].zName = sqlite3NameFromToken(db, pToken); + if( IN_RENAME_OBJECT && pList->a[i].zName ){ + sqlite3RenameTokenMap(pParse, (void*)pList->a[i].zName, pToken); + } return pList; } @@ -107821,6 +109560,12 @@ } assert( p->nSrc>0 ); pItem = &p->a[p->nSrc-1]; + assert( (pTable==0)==(pDatabase==0) ); + assert( pItem->zName==0 || pDatabase!=0 ); + if( IN_RENAME_OBJECT && pItem->zName ){ + Token *pToken = (ALWAYS(pDatabase) && pDatabase->z) ? pDatabase : pTable; + sqlite3RenameTokenMap(pParse, pItem->zName, pToken); + } assert( pAlias!=0 ); if( pAlias->n ){ pItem->zAlias = sqlite3NameFromToken(db, pAlias); @@ -109374,9 +111119,8 @@ } iKey = iPk; }else{ - iKey = pParse->nMem + 1; - iKey = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iTabCur, iKey, 0); - if( iKey>pParse->nMem ) pParse->nMem = iKey; + iKey = ++pParse->nMem; + sqlite3ExprCodeGetColumnOfTable(v, pTab, iTabCur, -1, iKey); } if( eOnePass!=ONEPASS_OFF ){ @@ -109809,7 +111553,6 @@ if( pIdx->pPartIdxWhere ){ *piPartIdxLabel = sqlite3VdbeMakeLabel(v); pParse->iSelfTab = iDataCur + 1; - sqlite3ExprCachePush(pParse); sqlite3ExprIfFalseDup(pParse, pIdx->pPartIdxWhere, *piPartIdxLabel, SQLITE_JUMPIFNULL); pParse->iSelfTab = 0; @@ -109856,7 +111599,6 @@ SQLITE_PRIVATE void sqlite3ResolvePartIdxLabel(Parse *pParse, int iLabel){ if( iLabel ){ sqlite3VdbeResolveLabel(pParse->pVdbe, iLabel); - sqlite3ExprCachePop(pParse); } } @@ -111369,7 +113111,7 @@ i64 v = sqlite3_value_int64(argv[0]); p->rSum += v; if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){ - p->overflow = 1; + p->approx = p->overflow = 1; } }else{ p->rSum += sqlite3_value_double(argv[0]); @@ -111377,6 +113119,32 @@ } } } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){ + SumCtx *p; + int type; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + p = sqlite3_aggregate_context(context, sizeof(*p)); + type = sqlite3_value_numeric_type(argv[0]); + /* p is always non-NULL because sumStep() will have been called first + ** to initialize it */ + if( ALWAYS(p) && type!=SQLITE_NULL ){ + assert( p->cnt>0 ); + p->cnt--; + assert( type==SQLITE_INTEGER || p->approx ); + if( type==SQLITE_INTEGER && p->approx==0 ){ + i64 v = sqlite3_value_int64(argv[0]); + p->rSum -= v; + p->iSum -= v; + }else{ + p->rSum -= sqlite3_value_double(argv[0]); + } + } +} +#else +# define sumInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ static void sumFinalize(sqlite3_context *context){ SumCtx *p; p = sqlite3_aggregate_context(context, 0); @@ -111411,6 +113179,9 @@ typedef struct CountCtx CountCtx; struct CountCtx { i64 n; +#ifdef SQLITE_DEBUG + int bInverse; /* True if xInverse() ever called */ +#endif }; /* @@ -111428,7 +113199,7 @@ ** sure it still operates correctly, verify that its count agrees with our ** internal count when using count(*) and when the total count can be ** expressed as a 32-bit integer. */ - assert( argc==1 || p==0 || p->n>0x7fffffff + assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse || p->n==sqlite3_aggregate_count(context) ); #endif } @@ -111437,6 +113208,21 @@ p = sqlite3_aggregate_context(context, 0); sqlite3_result_int64(context, p ? p->n : 0); } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){ + CountCtx *p; + p = sqlite3_aggregate_context(ctx, sizeof(*p)); + /* p is always non-NULL since countStep() will have been called first */ + if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){ + p->n--; +#ifdef SQLITE_DEBUG + p->bInverse = 1; +#endif + } +} +#else +# define countInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ /* ** Routines to implement min() and max() aggregate functions. @@ -111453,7 +113239,7 @@ pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest)); if( !pBest ) return; - if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ + if( sqlite3_value_type(pArg)==SQLITE_NULL ){ if( pBest->flags ) sqlite3SkipAccumulatorLoad(context); }else if( pBest->flags ){ int max; @@ -111479,16 +113265,26 @@ sqlite3VdbeMemCopy(pBest, pArg); } } -static void minMaxFinalize(sqlite3_context *context){ +static void minMaxValueFinalize(sqlite3_context *context, int bValue){ sqlite3_value *pRes; pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0); if( pRes ){ if( pRes->flags ){ sqlite3_result_value(context, pRes); } - sqlite3VdbeMemRelease(pRes); + if( bValue==0 ) sqlite3VdbeMemRelease(pRes); } } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void minMaxValue(sqlite3_context *context){ + minMaxValueFinalize(context, 1); +} +#else +# define minMaxValue 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ +static void minMaxFinalize(sqlite3_context *context){ + minMaxValueFinalize(context, 0); +} /* ** group_concat(EXPR, ?SEPARATOR?) @@ -111525,6 +113321,38 @@ if( zVal ) sqlite3_str_append(pAccum, zVal, nVal); } } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void groupConcatInverse( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int n; + StrAccum *pAccum; + assert( argc==1 || argc==2 ); + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum)); + /* pAccum is always non-NULL since groupConcatStep() will have always + ** run frist to initialize it */ + if( ALWAYS(pAccum) ){ + n = sqlite3_value_bytes(argv[0]); + if( argc==2 ){ + n += sqlite3_value_bytes(argv[1]); + }else{ + n++; + } + if( n>=(int)pAccum->nChar ){ + pAccum->nChar = 0; + }else{ + pAccum->nChar -= n; + memmove(pAccum->zText, &pAccum->zText[n], pAccum->nChar); + } + if( pAccum->nChar==0 ) pAccum->mxAlloc = 0; + } +} +#else +# define groupConcatInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ static void groupConcatFinalize(sqlite3_context *context){ StrAccum *pAccum; pAccum = sqlite3_aggregate_context(context, 0); @@ -111539,6 +113367,24 @@ } } } +#ifndef SQLITE_OMIT_WINDOWFUNC +static void groupConcatValue(sqlite3_context *context){ + sqlite3_str *pAccum; + pAccum = (sqlite3_str*)sqlite3_aggregate_context(context, 0); + if( pAccum ){ + if( pAccum->accError==SQLITE_TOOBIG ){ + sqlite3_result_error_toobig(context); + }else if( pAccum->accError==SQLITE_NOMEM ){ + sqlite3_result_error_nomem(context); + }else{ + const char *zText = sqlite3_str_value(pAccum); + sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT); + } + } +} +#else +# define groupConcatValue 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ /* ** This routine does per-connection function registration. Most @@ -111576,10 +113422,10 @@ }else{ pInfo = (struct compareInfo*)&likeInfoNorm; } - sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0); - sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0); + sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0); + sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0); sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, - (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0); + (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0, 0, 0); setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE); setLikeOptFlag(db, "like", caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE); @@ -111688,11 +113534,11 @@ FUNCTION(trim, 2, 3, 0, trimFunc ), FUNCTION(min, -1, 0, 1, minmaxFunc ), FUNCTION(min, 0, 0, 1, 0 ), - AGGREGATE2(min, 1, 0, 1, minmaxStep, minMaxFinalize, + WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0, SQLITE_FUNC_MINMAX ), FUNCTION(max, -1, 1, 1, minmaxFunc ), FUNCTION(max, 0, 1, 1, 0 ), - AGGREGATE2(max, 1, 1, 1, minmaxStep, minMaxFinalize, + WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0, SQLITE_FUNC_MINMAX ), FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), @@ -111723,14 +113569,17 @@ FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ), FUNCTION(substr, 2, 0, 0, substrFunc ), FUNCTION(substr, 3, 0, 0, substrFunc ), - AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ), - AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ), - AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ), - AGGREGATE2(count, 0, 0, 0, countStep, countFinalize, - SQLITE_FUNC_COUNT ), - AGGREGATE(count, 1, 0, 0, countStep, countFinalize ), - AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize), - AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize), + WAGGREGATE(sum, 1,0,0, sumStep, sumFinalize, sumFinalize, sumInverse, 0), + WAGGREGATE(total, 1,0,0, sumStep,totalFinalize,totalFinalize,sumInverse, 0), + WAGGREGATE(avg, 1,0,0, sumStep, avgFinalize, avgFinalize, sumInverse, 0), + WAGGREGATE(count, 0,0,0, countStep, + countFinalize, countFinalize, countInverse, SQLITE_FUNC_COUNT ), + WAGGREGATE(count, 1,0,0, countStep, + countFinalize, countFinalize, countInverse, 0 ), + WAGGREGATE(group_concat, 1, 0, 0, groupConcatStep, + groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), + WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep, + groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), #ifdef SQLITE_CASE_SENSITIVE_LIKE @@ -111750,6 +113599,7 @@ #ifndef SQLITE_OMIT_ALTERTABLE sqlite3AlterFunctions(); #endif + sqlite3WindowFunctions(); #if defined(SQLITE_ENABLE_STAT3) || defined(SQLITE_ENABLE_STAT4) sqlite3AnalyzeFunctions(); #endif @@ -112487,11 +114337,12 @@ */ SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){ sqlite3 *db = pParse->db; - if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) && !pTab->pSelect ){ + if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) ){ int iSkip = 0; Vdbe *v = sqlite3GetVdbe(pParse); assert( v ); /* VDBE has already been allocated */ + assert( pTab->pSelect==0 ); /* Not a view */ if( sqlite3FkReferences(pTab)==0 ){ /* Search for a deferred foreign key constraint for which this table ** is the child table. If one cannot be found, return without @@ -114387,44 +116238,6 @@ } /* -** An instance of the ConstraintAddr object remembers the byte-code addresses -** for sections of the constraint checks that deal with uniqueness constraints -** on the rowid and on the upsert constraint. -** -** This information is passed into checkReorderConstraintChecks() to insert -** some OP_Goto operations so that the rowid and upsert constraints occur -** in the correct order relative to other constraints. -*/ -typedef struct ConstraintAddr ConstraintAddr; -struct ConstraintAddr { - int ipkTop; /* Subroutine for rowid constraint check */ - int upsertTop; /* Label for upsert constraint check subroutine */ - int upsertTop2; /* Copy of upsertTop not cleared by the call */ - int upsertBtm; /* upsert constraint returns to this label */ - int ipkBtm; /* Return opcode rowid constraint check */ -}; - -/* -** Generate any OP_Goto operations needed to cause constraints to be -** run that haven't already been run. -*/ -static void reorderConstraintChecks(Vdbe *v, ConstraintAddr *p){ - if( p->upsertTop ){ - testcase( sqlite3VdbeLabelHasBeenResolved(v, p->upsertTop) ); - sqlite3VdbeGoto(v, p->upsertTop); - VdbeComment((v, "call upsert subroutine")); - sqlite3VdbeResolveLabel(v, p->upsertBtm); - p->upsertTop = 0; - } - if( p->ipkTop ){ - sqlite3VdbeGoto(v, p->ipkTop); - VdbeComment((v, "call rowid unique-check subroutine")); - sqlite3VdbeJumpHere(v, p->ipkBtm); - p->ipkTop = 0; - } -} - -/* ** Generate code to do constraint checks prior to an INSERT or an UPDATE ** on table pTab. ** @@ -114533,11 +116346,13 @@ int addr1; /* Address of jump instruction */ int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */ int nPkField; /* Number of fields in PRIMARY KEY. 1 for ROWID tables */ - ConstraintAddr sAddr;/* Address information for constraint reordering */ Index *pUpIdx = 0; /* Index to which to apply the upsert */ u8 isUpdate; /* True if this is an UPDATE operation */ u8 bAffinityDone = 0; /* True if the OP_Affinity operation has been run */ int upsertBypass = 0; /* Address of Goto to bypass upsert subroutine */ + int upsertJump = 0; /* Address of Goto that jumps into upsert subroutine */ + int ipkTop = 0; /* Top of the IPK uniqueness check */ + int ipkBottom = 0; /* OP_Goto at the end of the IPK uniqueness check */ isUpdate = regOldData!=0; db = pParse->db; @@ -114545,7 +116360,6 @@ assert( v!=0 ); assert( pTab->pSelect==0 ); /* This table is not a VIEW */ nCol = pTab->nCol; - memset(&sAddr, 0, sizeof(sAddr)); /* pPk is the PRIMARY KEY index for WITHOUT ROWID tables and NULL for ** normal rowid tables. nPkField is the number of key fields in the @@ -114649,8 +116463,8 @@ /* UNIQUE and PRIMARY KEY constraints should be handled in the following ** order: ** - ** (1) OE_Abort, OE_Fail, OE_Rollback, OE_Ignore - ** (2) OE_Update + ** (1) OE_Update + ** (2) OE_Abort, OE_Fail, OE_Rollback, OE_Ignore ** (3) OE_Replace ** ** OE_Fail and OE_Ignore must happen before any changes are made. @@ -114659,6 +116473,11 @@ ** could happen in any order, but they are grouped up front for ** convenience. ** + ** 2018-08-14: Ticket https://www.sqlite.org/src/info/908f001483982c43 + ** The order of constraints used to have OE_Update as (2) and OE_Abort + ** and so forth as (1). But apparently PostgreSQL checks the OE_Update + ** constraint before any others, so it had to be moved. + ** ** Constraint checking code is generated in this order: ** (A) The rowid constraint ** (B) Unique index constraints that do not have OE_Replace as their @@ -114678,11 +116497,10 @@ overrideError = OE_Ignore; pUpsert = 0; }else if( (pUpIdx = pUpsert->pUpsertIdx)!=0 ){ - /* If the constraint-target is on some column other than - ** then ROWID, then we might need to move the UPSERT around - ** so that it occurs in the correct order. */ - sAddr.upsertTop = sAddr.upsertTop2 = sqlite3VdbeMakeLabel(v); - sAddr.upsertBtm = sqlite3VdbeMakeLabel(v); + /* If the constraint-target uniqueness check must be run first. + ** Jump to that uniqueness check now */ + upsertJump = sqlite3VdbeAddOp0(v, OP_Goto); + VdbeComment((v, "UPSERT constraint goes first")); } } @@ -114714,16 +116532,12 @@ ** to defer the running of the rowid conflict checking until after ** the UNIQUE constraints have run. */ - assert( OE_Update>OE_Replace ); - assert( OE_Ignore=OE_Replace - && (pUpsert || onError!=overrideError) - && pTab->pIndex + if( onError==OE_Replace /* IPK rule is REPLACE */ + && onError!=overrideError /* Rules for other contraints are different */ + && pTab->pIndex /* There exist other constraints */ ){ - sAddr.ipkTop = sqlite3VdbeAddOp0(v, OP_Goto)+1; + ipkTop = sqlite3VdbeAddOp0(v, OP_Goto)+1; + VdbeComment((v, "defer IPK REPLACE until last")); } if( isUpdate ){ @@ -114818,9 +116632,9 @@ } } sqlite3VdbeResolveLabel(v, addrRowidOk); - if( sAddr.ipkTop ){ - sAddr.ipkBtm = sqlite3VdbeAddOp0(v, OP_Goto); - sqlite3VdbeJumpHere(v, sAddr.ipkTop-1); + if( ipkTop ){ + ipkBottom = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeJumpHere(v, ipkTop-1); } } @@ -114839,18 +116653,18 @@ if( aRegIdx[ix]==0 ) continue; /* Skip indices that do not change */ if( pUpIdx==pIdx ){ - addrUniqueOk = sAddr.upsertBtm; + addrUniqueOk = upsertJump+1; upsertBypass = sqlite3VdbeGoto(v, 0); VdbeComment((v, "Skip upsert subroutine")); - sqlite3VdbeResolveLabel(v, sAddr.upsertTop2); + sqlite3VdbeJumpHere(v, upsertJump); }else{ addrUniqueOk = sqlite3VdbeMakeLabel(v); } - VdbeNoopComment((v, "uniqueness check for %s", pIdx->zName)); - if( bAffinityDone==0 ){ + if( bAffinityDone==0 && (pUpIdx==0 || pUpIdx==pIdx) ){ sqlite3TableAffinity(v, pTab, regNewData+1); bAffinityDone = 1; } + VdbeNoopComment((v, "uniqueness check for %s", pIdx->zName)); iThisCur = iIdxCur+ix; @@ -114921,15 +116735,6 @@ } } - /* Invoke subroutines to handle IPK replace and upsert prior to running - ** the first REPLACE constraint check. */ - if( onError==OE_Replace ){ - testcase( sAddr.ipkTop ); - testcase( sAddr.upsertTop - && sqlite3VdbeLabelHasBeenResolved(v,sAddr.upsertTop) ); - reorderConstraintChecks(v, &sAddr); - } - /* Collision detection may be omitted if all of the following are true: ** (1) The conflict resolution algorithm is REPLACE ** (2) The table is a WITHOUT ROWID table @@ -114950,7 +116755,6 @@ } /* Check to see if the new index entry will be unique */ - sqlite3ExprCachePush(pParse); sqlite3VdbeVerifyAbortable(v, onError); sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk, regIdx, pIdx->nKeyCol); VdbeCoverage(v); @@ -115052,19 +116856,21 @@ } } if( pUpIdx==pIdx ){ + sqlite3VdbeGoto(v, upsertJump+1); sqlite3VdbeJumpHere(v, upsertBypass); }else{ sqlite3VdbeResolveLabel(v, addrUniqueOk); } - sqlite3ExprCachePop(pParse); if( regR!=regIdx ) sqlite3ReleaseTempRange(pParse, regR, nPkField); + } + /* If the IPK constraint is a REPLACE, run it last */ + if( ipkTop ){ + sqlite3VdbeGoto(v, ipkTop+1); + VdbeComment((v, "Do IPK REPLACE")); + sqlite3VdbeJumpHere(v, ipkBottom); } - testcase( sAddr.ipkTop!=0 ); - testcase( sAddr.upsertTop - && sqlite3VdbeLabelHasBeenResolved(v,sAddr.upsertTop) ); - reorderConstraintChecks(v, &sAddr); - + *pbMayReplace = seenReplace; VdbeModuleComment((v, "END: GenCnstCks(%d)", seenReplace)); } @@ -115160,7 +116966,6 @@ sqlite3SetMakeRecordP5(v, pTab); if( !bAffinityDone ){ sqlite3TableAffinity(v, pTab, 0); - sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol); } if( pParse->nested ){ pik_flags = 0; @@ -116136,6 +117941,12 @@ int (*str_errcode)(sqlite3_str*); int (*str_length)(sqlite3_str*); char *(*str_value)(sqlite3_str*); + int (*create_window_function)(sqlite3*,const char*,int,int,void*, + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInv)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*)); }; /* @@ -116421,6 +118232,8 @@ #define sqlite3_str_errcode sqlite3_api->str_errcode #define sqlite3_str_length sqlite3_api->str_length #define sqlite3_str_value sqlite3_api->str_value +/* Version 3.25.0 and later */ +#define sqlite3_create_window_function sqlite3_api->create_window_function #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) @@ -116874,7 +118687,9 @@ sqlite3_str_reset, sqlite3_str_errcode, sqlite3_str_length, - sqlite3_str_value + sqlite3_str_value, + /* Version 3.25.0 and later */ + sqlite3_create_window_function }; /* @@ -117669,6 +119484,11 @@ /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "legacy_alter_table", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_LegacyAlter }, {/* zName: */ "legacy_file_format", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, @@ -117922,7 +119742,7 @@ /* iArg: */ SQLITE_WriteSchema }, #endif }; -/* Number of pragmas: 60 on by default, 77 total. */ +/* Number of pragmas: 61 on by default, 78 total. */ /************** End of pragma.h **********************************************/ /************** Continuing where we left off in pragma.c *********************/ @@ -119447,7 +121267,6 @@ if( pTab->tnum<1 ) continue; /* Skip VIEWs or VIRTUAL TABLEs */ pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); - sqlite3ExprCacheClear(pParse); sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0, 1, 0, &iDataCur, &iIdxCur); /* reg[7] counts the number of entries in the table. @@ -119461,6 +121280,11 @@ assert( sqlite3NoTempsInRange(pParse,1,7+j) ); sqlite3VdbeAddOp2(v, OP_Rewind, iDataCur, 0); VdbeCoverage(v); loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1); + if( !isQuick ){ + /* Sanity check on record header decoding */ + sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nCol-1, 3); + sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); + } /* Verify that all NOT NULL columns really are NOT NULL */ for(j=0; jnCol; j++){ char *zErr; @@ -119485,7 +121309,6 @@ char *zErr; int k; pParse->iSelfTab = iDataCur + 1; - sqlite3ExprCachePush(pParse); for(k=pCheck->nExpr-1; k>0; k--){ sqlite3ExprIfFalse(pParse, pCheck->a[k].pExpr, addrCkFault, 0); } @@ -119498,14 +121321,10 @@ sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); integrityCheckResultRow(v); sqlite3VdbeResolveLabel(v, addrCkOk); - sqlite3ExprCachePop(pParse); } sqlite3ExprListDelete(db, pCheck); } if( !isQuick ){ /* Omit the remaining tests for quick_check */ - /* Sanity check on record header decoding */ - sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nCol-1, 3); - sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); /* Validate index entries for the current row */ for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ int jmp2, jmp3, jmp4, jmp5; @@ -120120,7 +121939,6 @@ } if( i==0 ){ sqlite3_str_appendf(&acc, "(\"%s\"", pPragma->zName); - cSep = ','; i++; } j = 0; @@ -120413,15 +122231,23 @@ const char *zExtra /* Error information */ ){ sqlite3 *db = pData->db; - if( !db->mallocFailed && (db->flags & SQLITE_WriteSchema)==0 ){ + if( db->mallocFailed ){ + pData->rc = SQLITE_NOMEM_BKPT; + }else if( pData->pzErrMsg[0]!=0 ){ + /* A error message has already been generated. Do not overwrite it */ + }else if( pData->mInitFlags & INITFLAG_AlterTable ){ + *pData->pzErrMsg = sqlite3DbStrDup(db, zExtra); + pData->rc = SQLITE_ERROR; + }else if( db->flags & SQLITE_WriteSchema ){ + pData->rc = SQLITE_CORRUPT_BKPT; + }else{ char *z; if( zObj==0 ) zObj = "?"; z = sqlite3MPrintf(db, "malformed database schema (%s)", zObj); if( zExtra && zExtra[0] ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra); - sqlite3DbFree(db, *pData->pzErrMsg); *pData->pzErrMsg = z; + pData->rc = SQLITE_CORRUPT_BKPT; } - pData->rc = db->mallocFailed ? SQLITE_NOMEM_BKPT : SQLITE_CORRUPT_BKPT; } /* @@ -120473,7 +122299,7 @@ rc = db->errCode; assert( (rc&0xFF)==(rcp&0xFF) ); db->init.iDb = saved_iDb; - assert( saved_iDb==0 || (db->mDbFlags & DBFLAG_Vacuum)!=0 ); + /* assert( saved_iDb==0 || (db->mDbFlags & DBFLAG_Vacuum)!=0 ); */ if( SQLITE_OK!=rc ){ if( db->init.orphanTrigger ){ assert( iDb==1 ); @@ -120520,7 +122346,7 @@ ** auxiliary databases. Return one of the SQLITE_ error codes to ** indicate success or failure. */ -static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ +SQLITE_PRIVATE int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg, u32 mFlags){ int rc; int i; #ifndef SQLITE_OMIT_DEPRECATED @@ -120555,6 +122381,7 @@ initData.iDb = iDb; initData.rc = SQLITE_OK; initData.pzErrMsg = pzErrMsg; + initData.mInitFlags = mFlags; sqlite3InitCallback(&initData, 3, (char **)azArg, 0); if( initData.rc ){ rc = initData.rc; @@ -120576,7 +122403,7 @@ ** will be closed before this function returns. */ sqlite3BtreeEnter(pDb->pBt); if( !sqlite3BtreeIsInReadTrans(pDb->pBt) ){ - rc = sqlite3BtreeBeginTrans(pDb->pBt, 0); + rc = sqlite3BtreeBeginTrans(pDb->pBt, 0, 0); if( rc!=SQLITE_OK ){ sqlite3SetString(pzErrMsg, db, sqlite3ErrStr(rc)); goto initone_error_out; @@ -120761,14 +122588,14 @@ assert( db->nDb>0 ); /* Do the main schema first */ if( !DbHasProperty(db, 0, DB_SchemaLoaded) ){ - rc = sqlite3InitOne(db, 0, pzErrMsg); + rc = sqlite3InitOne(db, 0, pzErrMsg, 0); if( rc ) return rc; } /* All other schemas after the main schema. The "temp" schema must be last */ for(i=db->nDb-1; i>0; i--){ assert( i==1 || sqlite3BtreeHoldsMutex(db->aDb[i].pBt) ); if( !DbHasProperty(db, i, DB_SchemaLoaded) ){ - rc = sqlite3InitOne(db, i, pzErrMsg); + rc = sqlite3InitOne(db, i, pzErrMsg, 0); if( rc ) return rc; } } @@ -120821,7 +122648,7 @@ ** on the b-tree database, open one now. If a transaction is opened, it ** will be closed immediately after reading the meta-value. */ if( !sqlite3BtreeIsInReadTrans(pBt) ){ - rc = sqlite3BtreeBeginTrans(pBt, 0); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ sqlite3OomFault(db); } @@ -121318,7 +123145,7 @@ /***/ int sqlite3SelectTrace = 0; # define SELECTTRACE(K,P,S,X) \ if(sqlite3SelectTrace&(K)) \ - sqlite3DebugPrintf("%s/%d/%p: ",(S)->zSelName,(P)->addrExplain,(S)),\ + sqlite3DebugPrintf("%u/%d/%p: ",(S)->selId,(P)->addrExplain,(S)),\ sqlite3DebugPrintf X #else # define SELECTTRACE(K,P,S,X) @@ -121365,8 +123192,8 @@ int labelBkOut; /* Start label for the block-output subroutine */ int addrSortIndex; /* Address of the OP_SorterOpen or OP_OpenEphemeral */ int labelDone; /* Jump here when done, ex: LIMIT reached */ + int labelOBLopt; /* Jump here when sorter is full */ u8 sortFlags; /* Zero or more SORTFLAG_* bits */ - u8 bOrderedInnerLoop; /* ORDER BY correctly sorts the inner loop */ #ifdef SQLITE_ENABLE_SORTER_REFERENCES u8 nDefer; /* Number of valid entries in aDefer[] */ struct DeferredCsr { @@ -121393,6 +123220,11 @@ sqlite3ExprDelete(db, p->pHaving); sqlite3ExprListDelete(db, p->pOrderBy); sqlite3ExprDelete(db, p->pLimit); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( OK_IF_ALWAYS_TRUE(p->pWinDefn) ){ + sqlite3WindowListDelete(db, p->pWinDefn); + } +#endif if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith); if( bFree ) sqlite3DbFreeNN(db, p); p = pPrior; @@ -121443,9 +123275,7 @@ pNew->selFlags = selFlags; pNew->iLimit = 0; pNew->iOffset = 0; -#if SELECTTRACE_ENABLED - pNew->zSelName[0] = 0; -#endif + pNew->selId = ++pParse->nSelect; pNew->addrOpenEphm[0] = -1; pNew->addrOpenEphm[1] = -1; pNew->nSelectRow = 0; @@ -121459,6 +123289,10 @@ pNew->pNext = 0; pNew->pLimit = pLimit; pNew->pWith = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + pNew->pWin = 0; + pNew->pWinDefn = 0; +#endif if( pParse->db->mallocFailed ) { clearSelect(pParse->db, pNew, pNew!=&standin); pNew = 0; @@ -121469,17 +123303,6 @@ return pNew; } -#if SELECTTRACE_ENABLED -/* -** Set the name of a Select object -*/ -SQLITE_PRIVATE void sqlite3SelectSetName(Select *p, const char *zName){ - if( p && zName ){ - sqlite3_snprintf(sizeof(p->zSelName), p->zSelName, "%s", zName); - } -} -#endif - /* ** Delete the given Select structure and all of its substructures. @@ -121826,14 +123649,6 @@ return 0; } -/* Forward reference */ -static KeyInfo *keyInfoFromExprList( - Parse *pParse, /* Parsing context */ - ExprList *pList, /* Form the KeyInfo object from this ExprList */ - int iStart, /* Begin with this column of pList */ - int nExtra /* Add this many extra columns to the end */ -); - /* ** An instance of this object holds information (beyond pParse and pSelect) ** needed to load the next result row that is to be added to the sorter. @@ -121975,7 +123790,7 @@ memset(pKI->aSortOrder, 0, pKI->nKeyField); /* Makes OP_Jump testable */ sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO); testcase( pKI->nAllField > pKI->nKeyField+2 ); - pOp->p4.pKeyInfo = keyInfoFromExprList(pParse, pSort->pOrderBy, nOBSat, + pOp->p4.pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pSort->pOrderBy,nOBSat, pKI->nAllField-pKI->nKeyField-1); addrJmp = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v); @@ -122002,10 +123817,10 @@ ** than LIMIT+OFFSET items in the sorter. ** ** If the new record does not need to be inserted into the sorter, - ** jump to the next iteration of the loop. Or, if the - ** pSort->bOrderedInnerLoop flag is set to indicate that the inner - ** loop delivers items in sorted order, jump to the next iteration - ** of the outer loop. + ** jump to the next iteration of the loop. If the pSort->labelOBLopt + ** value is not zero, then it is a label of where to jump. Otherwise, + ** just bypass the row insert logic. See the header comment on the + ** sqlite3WhereOrderByLimitOptLabel() function for additional info. */ int iCsr = pSort->iECursor; sqlite3VdbeAddOp2(v, OP_IfNotZero, iLimit, sqlite3VdbeCurrentAddr(v)+4); @@ -122027,9 +123842,8 @@ sqlite3VdbeAddOp4Int(v, op, pSort->iECursor, regRecord, regBase+nOBSat, nBase-nOBSat); if( iSkip ){ - assert( pSort->bOrderedInnerLoop==0 || pSort->bOrderedInnerLoop==1 ); sqlite3VdbeChangeP2(v, iSkip, - sqlite3VdbeCurrentAddr(v) + pSort->bOrderedInnerLoop); + pSort->labelOBLopt ? pSort->labelOBLopt : sqlite3VdbeCurrentAddr(v)); } } @@ -122458,7 +124272,6 @@ assert( sqlite3Strlen30(pDest->zAffSdst)==nResultCol ); sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, nResultCol, r1, pDest->zAffSdst, nResultCol); - sqlite3ExprCacheAffinityChange(pParse, regResult, nResultCol); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, nResultCol); sqlite3ReleaseTempReg(pParse, r1); } @@ -122502,7 +124315,6 @@ sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); }else{ sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nResultCol); - sqlite3ExprCacheAffinityChange(pParse, regResult, nResultCol); } break; } @@ -122645,7 +124457,7 @@ ** function is responsible for seeing that this structure is eventually ** freed. */ -static KeyInfo *keyInfoFromExprList( +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoFromExprList( Parse *pParse, /* Parsing context */ ExprList *pList, /* Form the KeyInfo object from this ExprList */ int iStart, /* Begin with this column of pList */ @@ -122859,7 +124671,6 @@ assert( nColumn==sqlite3Strlen30(pDest->zAffSdst) ); sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, nColumn, regRowid, pDest->zAffSdst, nColumn); - sqlite3ExprCacheAffinityChange(pParse, regRow, nColumn); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, regRowid, regRow, nColumn); break; } @@ -122874,7 +124685,6 @@ testcase( eDest==SRT_Coroutine ); if( eDest==SRT_Output ){ sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iSdst, nColumn); - sqlite3ExprCacheAffinityChange(pParse, pDest->iSdst, nColumn); }else{ sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); } @@ -123475,7 +125285,6 @@ ** The current implementation interprets "LIMIT 0" to mean ** no rows. */ - sqlite3ExprCacheClear(pParse); if( pLimit ){ assert( pLimit->op==TK_LIMIT ); assert( pLimit->pLeft!=0 ); @@ -124261,7 +126070,6 @@ r1 = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, r1, pDest->zAffSdst, pIn->nSdst); - sqlite3ExprCacheAffinityChange(pParse, pIn->iSdst, pIn->nSdst); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pDest->iSDParm, r1, pIn->iSdst, pIn->nSdst); sqlite3ReleaseTempReg(pParse, r1); @@ -124304,7 +126112,6 @@ default: { assert( pDest->eDest==SRT_Output ); sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iSdst, pIn->nSdst); - sqlite3ExprCacheAffinityChange(pParse, pIn->iSdst, pIn->nSdst); break; } } @@ -124759,7 +126566,7 @@ Expr *pCopy = pSubst->pEList->a[pExpr->iColumn].pExpr; Expr ifNullRow; assert( pSubst->pEList!=0 && pExpr->iColumnpEList->nExpr ); - assert( pExpr->pLeft==0 && pExpr->pRight==0 ); + assert( pExpr->pRight==0 ); if( sqlite3ExprIsVector(pCopy) ){ sqlite3VectorErrorMsg(pSubst->pParse, pCopy); }else{ @@ -124973,6 +126780,10 @@ ** "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily ** return the value X for which Y was maximal.) ** +** (25) If either the subquery or the parent query contains a window +** function in the select list or ORDER BY clause, flattening +** is not attempted. +** ** ** In this routine, the "p" parameter is a pointer to the outer query. ** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query @@ -125016,6 +126827,10 @@ pSub = pSubitem->pSelect; assert( pSub!=0 ); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin || pSub->pWin ) return 0; /* Restriction (25) */ +#endif + pSubSrc = pSub->pSrc; assert( pSubSrc ); /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants, @@ -125126,8 +126941,8 @@ assert( (p->selFlags & SF_Recursive)==0 || pSub->pPrior==0 ); /***** If we reach this point, flattening is permitted. *****/ - SELECTTRACE(1,pParse,p,("flatten %s.%p from term %d\n", - pSub->zSelName, pSub, iFrom)); + SELECTTRACE(1,pParse,p,("flatten %u.%p from term %d\n", + pSub->selId, pSub, iFrom)); /* Authorize the subquery */ pParse->zAuthContext = pSubitem->zName; @@ -125178,7 +126993,6 @@ p->pPrior = 0; p->pLimit = 0; pNew = sqlite3SelectDup(db, p, 0); - sqlite3SelectSetName(pNew, pSub->zSelName); p->pLimit = pLimit; p->pOrderBy = pOrderBy; p->pSrc = pSrc; @@ -125191,7 +127005,7 @@ pNew->pNext = p; p->pPrior = pNew; SELECTTRACE(2,pParse,p,("compound-subquery flattener" - " creates %s.%p as peer\n",pNew->zSelName, pNew)); + " creates %u as peer\n",pNew->selId)); } if( db->mallocFailed ) return 1; } @@ -125376,7 +127190,168 @@ } #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ +/* +** A structure to keep track of all of the column values that fixed to +** a known value due to WHERE clause constraints of the form COLUMN=VALUE. +*/ +typedef struct WhereConst WhereConst; +struct WhereConst { + Parse *pParse; /* Parsing context */ + int nConst; /* Number for COLUMN=CONSTANT terms */ + int nChng; /* Number of times a constant is propagated */ + Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */ +}; + +/* +** Add a new entry to the pConst object +*/ +static void constInsert( + WhereConst *pConst, + Expr *pColumn, + Expr *pValue +){ + + pConst->nConst++; + pConst->apExpr = sqlite3DbReallocOrFree(pConst->pParse->db, pConst->apExpr, + pConst->nConst*2*sizeof(Expr*)); + if( pConst->apExpr==0 ){ + pConst->nConst = 0; + }else{ + if( ExprHasProperty(pValue, EP_FixedCol) ) pValue = pValue->pLeft; + pConst->apExpr[pConst->nConst*2-2] = pColumn; + pConst->apExpr[pConst->nConst*2-1] = pValue; + } +} + +/* +** Find all terms of COLUMN=VALUE or VALUE=COLUMN in pExpr where VALUE +** is a constant expression and where the term must be true because it +** is part of the AND-connected terms of the expression. For each term +** found, add it to the pConst structure. +*/ +static void findConstInWhere(WhereConst *pConst, Expr *pExpr){ + Expr *pRight, *pLeft; + if( pExpr==0 ) return; + if( ExprHasProperty(pExpr, EP_FromJoin) ) return; + if( pExpr->op==TK_AND ){ + findConstInWhere(pConst, pExpr->pRight); + findConstInWhere(pConst, pExpr->pLeft); + return; + } + if( pExpr->op!=TK_EQ ) return; + pRight = pExpr->pRight; + pLeft = pExpr->pLeft; + assert( pRight!=0 ); + assert( pLeft!=0 ); + if( pRight->op==TK_COLUMN + && !ExprHasProperty(pRight, EP_FixedCol) + && sqlite3ExprIsConstant(pLeft) + && sqlite3IsBinary(sqlite3BinaryCompareCollSeq(pConst->pParse,pLeft,pRight)) + ){ + constInsert(pConst, pRight, pLeft); + }else + if( pLeft->op==TK_COLUMN + && !ExprHasProperty(pLeft, EP_FixedCol) + && sqlite3ExprIsConstant(pRight) + && sqlite3IsBinary(sqlite3BinaryCompareCollSeq(pConst->pParse,pLeft,pRight)) + ){ + constInsert(pConst, pLeft, pRight); + } +} + +/* +** This is a Walker expression callback. pExpr is a candidate expression +** to be replaced by a value. If pExpr is equivalent to one of the +** columns named in pWalker->u.pConst, then overwrite it with its +** corresponding value. +*/ +static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){ + int i; + WhereConst *pConst; + if( pExpr->op!=TK_COLUMN ) return WRC_Continue; + if( ExprHasProperty(pExpr, EP_FixedCol) ) return WRC_Continue; + pConst = pWalker->u.pConst; + for(i=0; inConst; i++){ + Expr *pColumn = pConst->apExpr[i*2]; + if( pColumn==pExpr ) continue; + if( pColumn->iTable!=pExpr->iTable ) continue; + if( pColumn->iColumn!=pExpr->iColumn ) continue; + /* A match is found. Add the EP_FixedCol property */ + pConst->nChng++; + ExprClearProperty(pExpr, EP_Leaf); + ExprSetProperty(pExpr, EP_FixedCol); + assert( pExpr->pLeft==0 ); + pExpr->pLeft = sqlite3ExprDup(pConst->pParse->db, pConst->apExpr[i*2+1], 0); + break; + } + return WRC_Prune; +} +/* +** The WHERE-clause constant propagation optimization. +** +** If the WHERE clause contains terms of the form COLUMN=CONSTANT or +** CONSTANT=COLUMN that must be tree (in other words, if the terms top-level +** AND-connected terms that are not part of a ON clause from a LEFT JOIN) +** then throughout the query replace all other occurrences of COLUMN +** with CONSTANT within the WHERE clause. +** +** For example, the query: +** +** SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=t1.a AND t3.c=t2.b +** +** Is transformed into +** +** SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=39 AND t3.c=39 +** +** Return true if any transformations where made and false if not. +** +** Implementation note: Constant propagation is tricky due to affinity +** and collating sequence interactions. Consider this example: +** +** CREATE TABLE t1(a INT,b TEXT); +** INSERT INTO t1 VALUES(123,'0123'); +** SELECT * FROM t1 WHERE a=123 AND b=a; +** SELECT * FROM t1 WHERE a=123 AND b=123; +** +** The two SELECT statements above should return different answers. b=a +** is alway true because the comparison uses numeric affinity, but b=123 +** is false because it uses text affinity and '0123' is not the same as '123'. +** To work around this, the expression tree is not actually changed from +** "b=a" to "b=123" but rather the "a" in "b=a" is tagged with EP_FixedCol +** and the "123" value is hung off of the pLeft pointer. Code generator +** routines know to generate the constant "123" instead of looking up the +** column value. Also, to avoid collation problems, this optimization is +** only attempted if the "a=123" term uses the default BINARY collation. +*/ +static int propagateConstants( + Parse *pParse, /* The parsing context */ + Select *p /* The query in which to propagate constants */ +){ + WhereConst x; + Walker w; + int nChng = 0; + x.pParse = pParse; + do{ + x.nConst = 0; + x.nChng = 0; + x.apExpr = 0; + findConstInWhere(&x, p->pWhere); + if( x.nConst ){ + memset(&w, 0, sizeof(w)); + w.pParse = pParse; + w.xExprCallback = propagateConstantExprRewrite; + w.xSelectCallback = sqlite3SelectWalkNoop; + w.xSelectCallback2 = 0; + w.walkerDepth = 0; + w.u.pConst = &x; + sqlite3WalkExpr(&w, p->pWhere); + sqlite3DbFree(x.pParse->db, x.apExpr); + nChng += x.nChng; + } + }while( x.nChng ); + return nChng; +} #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) /* @@ -125406,7 +127381,7 @@ ** (2) The inner query is the recursive part of a common table expression. ** ** (3) The inner query has a LIMIT clause (since the changes to the WHERE -** close would change the meaning of the LIMIT). +** clause would change the meaning of the LIMIT). ** ** (4) The inner query is the right operand of a LEFT JOIN and the ** expression to be pushed down does not come from the ON clause @@ -125425,6 +127400,10 @@ ** But if the (b2=2) term were to be pushed down into the bb subquery, ** then the (1,1,NULL) row would be suppressed. ** +** (6) The inner query features one or more window-functions (since +** changes to the WHERE clause of the inner query could change the +** window over which window functions are calculated). +** ** Return 0 if no changes are made and non-zero if one or more WHERE clause ** terms are duplicated into the subquery. */ @@ -125440,6 +127419,10 @@ if( pWhere==0 ) return 0; if( pSubq->selFlags & SF_Recursive ) return 0; /* restriction (2) */ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pSubq->pWin ) return 0; /* restriction (6) */ +#endif + #ifdef SQLITE_DEBUG /* Only the first term of a compound can have a WITH clause. But make ** sure no other terms are marked SF_Recursive in case something changes @@ -125886,6 +127869,35 @@ #endif /* +** The SrcList_item structure passed as the second argument represents a +** sub-query in the FROM clause of a SELECT statement. This function +** allocates and populates the SrcList_item.pTab object. If successful, +** SQLITE_OK is returned. Otherwise, if an OOM error is encountered, +** SQLITE_NOMEM. +*/ +SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, struct SrcList_item *pFrom){ + Select *pSel = pFrom->pSelect; + Table *pTab; + + assert( pSel ); + pFrom->pTab = pTab = sqlite3DbMallocZero(pParse->db, sizeof(Table)); + if( pTab==0 ) return SQLITE_NOMEM; + pTab->nTabRef = 1; + if( pFrom->zAlias ){ + pTab->zName = sqlite3DbStrDup(pParse->db, pFrom->zAlias); + }else{ + pTab->zName = sqlite3MPrintf(pParse->db, "subquery_%u", pSel->selId); + } + while( pSel->pPrior ){ pSel = pSel->pPrior; } + sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol); + pTab->iPKey = -1; + pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); + pTab->tabFlags |= TF_Ephemeral; + + return SQLITE_OK; +} + +/* ** This routine is a Walker callback for "expanding" a SELECT statement. ** "Expanding" means to do the following: ** @@ -125957,19 +127969,7 @@ assert( pSel!=0 ); assert( pFrom->pTab==0 ); if( sqlite3WalkSelect(pWalker, pSel) ) return WRC_Abort; - pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table)); - if( pTab==0 ) return WRC_Abort; - pTab->nTabRef = 1; - if( pFrom->zAlias ){ - pTab->zName = sqlite3DbStrDup(db, pFrom->zAlias); - }else{ - pTab->zName = sqlite3MPrintf(db, "subquery_%p", (void*)pTab); - } - while( pSel->pPrior ){ pSel = pSel->pPrior; } - sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol); - pTab->iPKey = -1; - pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); - pTab->tabFlags |= TF_Ephemeral; + if( sqlite3ExpandSubquery(pParse, pFrom) ) return WRC_Abort; #endif }else{ /* An ordinary table or view name in the FROM clause */ @@ -125992,7 +127992,6 @@ if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort; assert( pFrom->pSelect==0 ); pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0); - sqlite3SelectSetName(pFrom->pSelect, pTab->zName); nCol = pTab->nCol; pTab->nCol = -1; sqlite3WalkSelect(pWalker, pFrom->pSelect); @@ -126270,7 +128269,7 @@ struct SrcList_item *pFrom; assert( p->selFlags & SF_Resolved ); - assert( (p->selFlags & SF_HasTypeInfo)==0 ); + if( p->selFlags & SF_HasTypeInfo ) return; p->selFlags |= SF_HasTypeInfo; pParse = pWalker->pParse; pTabList = p->pSrc; @@ -126373,7 +128372,7 @@ "argument"); pFunc->iDistinct = -1; }else{ - KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList, 0, 0); + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pE->x.pList,0,0); sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0, (char*)pKeyInfo, P4_KEYINFO); } @@ -126397,11 +128396,17 @@ } } + /* ** Update the accumulator memory cells for an aggregate based on ** the current cursor position. +** +** If regAcc is non-zero and there are no min() or max() aggregates +** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator +** registers i register regAcc contains 0. The caller will take care +** of setting and clearing regAcc. */ -static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){ +static void updateAccumulator(Parse *pParse, int regAcc, AggInfo *pAggInfo){ Vdbe *v = pParse->pVdbe; int i; int regHit = 0; @@ -126444,36 +128449,24 @@ if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ); } - sqlite3VdbeAddOp3(v, OP_AggStep0, 0, regAgg, pF->iMem); + sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, pF->iMem); sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); sqlite3VdbeChangeP5(v, (u8)nArg); - sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg); sqlite3ReleaseTempRange(pParse, regAgg, nArg); if( addrNext ){ sqlite3VdbeResolveLabel(v, addrNext); - sqlite3ExprCacheClear(pParse); } } - - /* Before populating the accumulator registers, clear the column cache. - ** Otherwise, if any of the required column values are already present - ** in registers, sqlite3ExprCode() may use OP_SCopy to copy the value - ** to pC->iMem. But by the time the value is used, the original register - ** may have been used, invalidating the underlying buffer holding the - ** text or blob value. See ticket [883034dcb5]. - ** - ** Another solution would be to change the OP_SCopy used to copy cached - ** values to an OP_Copy. - */ + if( regHit==0 && pAggInfo->nAccumulator ){ + regHit = regAcc; + } if( regHit ){ addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v); } - sqlite3ExprCacheClear(pParse); for(i=0, pC=pAggInfo->aCol; inAccumulator; i++, pC++){ sqlite3ExprCode(pParse, pC->pExpr, pC->iMem); } pAggInfo->directMode = 0; - sqlite3ExprCacheClear(pParse); if( addrHitTest ){ sqlite3VdbeJumpHere(v, addrHitTest); } @@ -126603,6 +128596,7 @@ ** The transformation only works if all of the following are true: ** ** * The subquery is a UNION ALL of two or more terms +** * The subquery does not have a LIMIT clause ** * There is no WHERE or GROUP BY or HAVING clauses on the subqueries ** * The outer query is a simple count(*) ** @@ -126626,6 +128620,7 @@ do{ if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */ if( pSub->pWhere ) return 0; /* No WHERE clause */ + if( pSub->pLimit ) return 0; /* No LIMIT clause */ if( pSub->selFlags & SF_Aggregate ) return 0; /* Not an aggregate */ pSub = pSub->pPrior; /* Repeat over compound */ }while( pSub ); @@ -126738,14 +128733,10 @@ p->selFlags &= ~SF_Distinct; } sqlite3SelectPrep(pParse, p, 0); - memset(&sSort, 0, sizeof(sSort)); - sSort.pOrderBy = p->pOrderBy; - pTabList = p->pSrc; if( pParse->nErr || db->mallocFailed ){ goto select_end; } assert( p->pEList!=0 ); - isAgg = (p->selFlags & SF_Aggregate)!=0; #if SELECTTRACE_ENABLED if( sqlite3SelectTrace & 0x104 ){ SELECTTRACE(0x104,pParse,p, ("after name resolution:\n")); @@ -126757,6 +128748,22 @@ generateColumnNames(pParse, p); } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( sqlite3WindowRewrite(pParse, p) ){ + goto select_end; + } +#if SELECTTRACE_ENABLED + if( sqlite3SelectTrace & 0x108 ){ + SELECTTRACE(0x104,pParse,p, ("after window rewrite:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif +#endif /* SQLITE_OMIT_WINDOWFUNC */ + pTabList = p->pSrc; + isAgg = (p->selFlags & SF_Aggregate)!=0; + memset(&sSort, 0, sizeof(sSort)); + sSort.pOrderBy = p->pOrderBy; + /* Try to various optimizations (flattening subqueries, and strength ** reduction of join operators) in the FROM clause up into the main query */ @@ -126856,6 +128863,35 @@ } #endif + /* Do the WHERE-clause constant propagation optimization if this is + ** a join. No need to speed time on this operation for non-join queries + ** as the equivalent optimization will be handled by query planner in + ** sqlite3WhereBegin(). + */ + if( pTabList->nSrc>1 + && OptimizationEnabled(db, SQLITE_PropagateConst) + && propagateConstants(pParse, p) + ){ +#if SELECTTRACE_ENABLED + if( sqlite3SelectTrace & 0x100 ){ + SELECTTRACE(0x100,pParse,p,("After constant propagation:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + }else{ + SELECTTRACE(0x100,pParse,p,("Constant propagation not helpful\n")); + } + +#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION + if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView) + && countOfViewOptimization(pParse, p) + ){ + if( db->mallocFailed ) goto select_end; + pEList = p->pEList; + pTabList = p->pSrc; + } +#endif + /* For each term in the FROM clause, do two things: ** (1) Authorized unreferenced tables ** (2) Generate code for all sub-queries @@ -126929,7 +128965,8 @@ ){ #if SELECTTRACE_ENABLED if( sqlite3SelectTrace & 0x100 ){ - SELECTTRACE(0x100,pParse,p,("After WHERE-clause push-down:\n")); + SELECTTRACE(0x100,pParse,p, + ("After WHERE-clause push-down into subquery %d:\n", pSub->selId)); sqlite3TreeViewSelect(0, p, 0); } #endif @@ -126963,7 +129000,7 @@ VdbeComment((v, "%s", pItem->pTab->zName)); pItem->addrFillSub = addrTop; sqlite3SelectDestInit(&dest, SRT_Coroutine, pItem->regReturn); - ExplainQueryPlan((pParse, 1, "CO-ROUTINE 0x%p", pSub)); + ExplainQueryPlan((pParse, 1, "CO-ROUTINE %u", pSub->selId)); sqlite3Select(pParse, pSub, &dest); pItem->pTab->nRowLogEst = pSub->nSelectRow; pItem->fg.viaCoroutine = 1; @@ -127002,7 +129039,7 @@ pSub->nSelectRow = pPrior->pSelect->nSelectRow; }else{ sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); - ExplainQueryPlan((pParse, 1, "MATERIALIZE 0x%p", pSub)); + ExplainQueryPlan((pParse, 1, "MATERIALIZE %u", pSub->selId)); sqlite3Select(pParse, pSub, &dest); } pItem->pTab->nRowLogEst = pSub->nSelectRow; @@ -127033,16 +129070,6 @@ } #endif -#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION - if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView) - && countOfViewOptimization(pParse, p) - ){ - if( db->mallocFailed ) goto select_end; - pEList = p->pEList; - pTabList = p->pSrc; - } -#endif - /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and ** if the select-list is the same as the ORDER BY list, then this query ** can be rewritten as a GROUP BY. In other words, this: @@ -127086,7 +129113,8 @@ */ if( sSort.pOrderBy ){ KeyInfo *pKeyInfo; - pKeyInfo = keyInfoFromExprList(pParse, sSort.pOrderBy, 0, pEList->nExpr); + pKeyInfo = sqlite3KeyInfoFromExprList( + pParse, sSort.pOrderBy, 0, pEList->nExpr); sSort.iECursor = pParse->nTab++; sSort.addrSortIndex = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, @@ -127120,9 +129148,9 @@ if( p->selFlags & SF_Distinct ){ sDistinct.tabTnct = pParse->nTab++; sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, - sDistinct.tabTnct, 0, 0, - (char*)keyInfoFromExprList(pParse, p->pEList,0,0), - P4_KEYINFO); + sDistinct.tabTnct, 0, 0, + (char*)sqlite3KeyInfoFromExprList(pParse, p->pEList,0,0), + P4_KEYINFO); sqlite3VdbeChangeP5(v, BTREE_UNORDERED); sDistinct.eTnctType = WHERE_DISTINCT_UNORDERED; }else{ @@ -127131,9 +129159,16 @@ if( !isAgg && pGroupBy==0 ){ /* No aggregate functions and no GROUP BY clause */ - u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0); + u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0) + | (p->selFlags & SF_FixedLimit); +#ifndef SQLITE_OMIT_WINDOWFUNC + Window *pWin = p->pWin; /* Master window object (or NULL) */ + if( pWin ){ + sqlite3WindowCodeInit(pParse, pWin); + } +#endif assert( WHERE_USE_LIMIT==SF_FixedLimit ); - wctrlFlags |= p->selFlags & SF_FixedLimit; + /* Begin the database scan. */ SELECTTRACE(1,pParse,p,("WhereBegin\n")); @@ -127148,7 +129183,7 @@ } if( sSort.pOrderBy ){ sSort.nOBSat = sqlite3WhereIsOrdered(pWInfo); - sSort.bOrderedInnerLoop = sqlite3WhereOrderedInnerLoop(pWInfo); + sSort.labelOBLopt = sqlite3WhereOrderByLimitOptLabel(pWInfo); if( sSort.nOBSat==sSort.pOrderBy->nExpr ){ sSort.pOrderBy = 0; } @@ -127162,15 +129197,37 @@ sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex); } - /* Use the standard inner loop. */ assert( p->pEList==pEList ); - selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, - sqlite3WhereContinueLabel(pWInfo), - sqlite3WhereBreakLabel(pWInfo)); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pWin ){ + int addrGosub = sqlite3VdbeMakeLabel(v); + int iCont = sqlite3VdbeMakeLabel(v); + int iBreak = sqlite3VdbeMakeLabel(v); + int regGosub = ++pParse->nMem; + + sqlite3WindowCodeStep(pParse, p, pWInfo, regGosub, addrGosub); + + sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak); + sqlite3VdbeResolveLabel(v, addrGosub); + VdbeNoopComment((v, "inner-loop subroutine")); + sSort.labelOBLopt = 0; + selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, iCont, iBreak); + sqlite3VdbeResolveLabel(v, iCont); + sqlite3VdbeAddOp1(v, OP_Return, regGosub); + VdbeComment((v, "end inner-loop subroutine")); + sqlite3VdbeResolveLabel(v, iBreak); + }else +#endif /* SQLITE_OMIT_WINDOWFUNC */ + { + /* Use the standard inner loop. */ + selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, + sqlite3WhereContinueLabel(pWInfo), + sqlite3WhereBreakLabel(pWInfo)); - /* End the database scan loop. - */ - sqlite3WhereEnd(pWInfo); + /* End the database scan loop. + */ + sqlite3WhereEnd(pWInfo); + } }else{ /* This case when there exist aggregate functions or a GROUP BY clause ** or both */ @@ -127299,7 +129356,7 @@ ** will be converted into a Noop. */ sAggInfo.sortingIdx = pParse->nTab++; - pKeyInfo = keyInfoFromExprList(pParse, pGroupBy, 0, sAggInfo.nColumn); + pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pGroupBy,0,sAggInfo.nColumn); addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, sAggInfo.sortingIdx, sAggInfo.nSortingColumn, 0, (char*)pKeyInfo, P4_KEYINFO); @@ -127318,8 +129375,6 @@ pParse->nMem += pGroupBy->nExpr; sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag); VdbeComment((v, "clear abort flag")); - sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); - VdbeComment((v, "indicate accumulator empty")); sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1); /* Begin a loop that will extract all source rows in GROUP BY order. @@ -127365,15 +129420,14 @@ } } regBase = sqlite3GetTempRange(pParse, nCol); - sqlite3ExprCacheClear(pParse); sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); j = nGroupBy; for(i=0; iiSorterColumn>=j ){ int r1 = j + regBase; - sqlite3ExprCodeGetColumnToReg(pParse, - pCol->pTab, pCol->iColumn, pCol->iTable, r1); + sqlite3ExprCodeGetColumnOfTable(v, + pCol->pTab, pCol->iTable, pCol->iColumn, r1); j++; } } @@ -127389,8 +129443,6 @@ sqlite3VdbeAddOp2(v, OP_SorterSort, sAggInfo.sortingIdx, addrEnd); VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v); sAggInfo.useSortingIdx = 1; - sqlite3ExprCacheClear(pParse); - } /* If the index or temporary table used by the GROUP BY sort @@ -127413,7 +129465,6 @@ ** from the previous row currently stored in a0, a1, a2... */ addrTopOfLoop = sqlite3VdbeCurrentAddr(v); - sqlite3ExprCacheClear(pParse); if( groupBySort ){ sqlite3VdbeAddOp3(v, OP_SorterData, sAggInfo.sortingIdx, sortOut, sortPTab); @@ -127452,7 +129503,7 @@ ** the current row */ sqlite3VdbeJumpHere(v, addr1); - updateAccumulator(pParse, &sAggInfo); + updateAccumulator(pParse, iUseFlag, &sAggInfo); sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); VdbeComment((v, "indicate data in accumulator")); @@ -127504,6 +129555,8 @@ */ sqlite3VdbeResolveLabel(v, addrReset); resetAccumulator(pParse, &sAggInfo); + sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); + VdbeComment((v, "indicate accumulator empty")); sqlite3VdbeAddOp1(v, OP_Return, regReset); } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ @@ -127569,6 +129622,23 @@ }else #endif /* SQLITE_OMIT_BTREECOUNT */ { + int regAcc = 0; /* "populate accumulators" flag */ + + /* If there are accumulator registers but no min() or max() functions, + ** allocate register regAcc. Register regAcc will contain 0 the first + ** time the inner loop runs, and 1 thereafter. The code generated + ** by updateAccumulator() only updates the accumulator registers if + ** regAcc contains 0. */ + if( sAggInfo.nAccumulator ){ + for(i=0; ifuncFlags&SQLITE_FUNC_NEEDCOLL ) break; + } + if( i==sAggInfo.nFunc ){ + regAcc = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regAcc); + } + } + /* This case runs if the aggregate has no GROUP BY clause. The ** processing is much simpler since there is only a single row ** of output. @@ -127590,7 +129660,8 @@ if( pWInfo==0 ){ goto select_end; } - updateAccumulator(pParse, &sAggInfo); + updateAccumulator(pParse, regAcc, &sAggInfo); + if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); if( sqlite3WhereIsOrdered(pWInfo)>0 ){ sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo)); VdbeComment((v, "%s() by index", @@ -128034,14 +130105,16 @@ goto trigger_cleanup; } assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); - if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),zName) ){ - if( !noErr ){ - sqlite3ErrorMsg(pParse, "trigger %T already exists", pName); - }else{ - assert( !db->init.busy ); - sqlite3CodeVerifySchema(pParse, iDb); + if( !IN_RENAME_OBJECT ){ + if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),zName) ){ + if( !noErr ){ + sqlite3ErrorMsg(pParse, "trigger %T already exists", pName); + }else{ + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); + } + goto trigger_cleanup; } - goto trigger_cleanup; } /* Do not create a trigger on a system table */ @@ -128065,7 +130138,7 @@ } #ifndef SQLITE_OMIT_AUTHORIZATION - { + if( !IN_RENAME_OBJECT ){ int iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); int code = SQLITE_CREATE_TRIGGER; const char *zDb = db->aDb[iTabDb].zDbSName; @@ -128099,8 +130172,15 @@ pTrigger->pTabSchema = pTab->pSchema; pTrigger->op = (u8)op; pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER; - pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); - pTrigger->pColumns = sqlite3IdListDup(db, pColumns); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, pTrigger->table, pTableName->a[0].zName); + pTrigger->pWhen = pWhen; + pWhen = 0; + }else{ + pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); + } + pTrigger->pColumns = pColumns; + pColumns = 0; assert( pParse->pNewTrigger==0 ); pParse->pNewTrigger = pTrigger; @@ -128149,6 +130229,14 @@ goto triggerfinish_cleanup; } +#ifndef SQLITE_OMIT_ALTERTABLE + if( IN_RENAME_OBJECT ){ + assert( !db->init.busy ); + pParse->pNewTrigger = pTrig; + pTrig = 0; + }else +#endif + /* if we are not initializing, ** build the sqlite_master entry */ @@ -128190,7 +130278,7 @@ triggerfinish_cleanup: sqlite3DeleteTrigger(db, pTrig); - assert( !pParse->pNewTrigger ); + assert( IN_RENAME_OBJECT || !pParse->pNewTrigger ); sqlite3DeleteTriggerStep(db, pStepList); } @@ -128237,12 +130325,13 @@ ** If an OOM error occurs, NULL is returned and db->mallocFailed is set. */ static TriggerStep *triggerStepAllocate( - sqlite3 *db, /* Database connection */ + Parse *pParse, /* Parser context */ u8 op, /* Trigger opcode */ Token *pName, /* The target name */ const char *zStart, /* Start of SQL text */ const char *zEnd /* End of SQL text */ ){ + sqlite3 *db = pParse->db; TriggerStep *pTriggerStep; pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n + 1); @@ -128253,6 +130342,9 @@ pTriggerStep->zTarget = z; pTriggerStep->op = op; pTriggerStep->zSpan = triggerSpanDup(db, zStart, zEnd); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, pTriggerStep->zTarget, pName); + } } return pTriggerStep; } @@ -128265,7 +130357,7 @@ ** body of a trigger. */ SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep( - sqlite3 *db, /* The database connection */ + Parse *pParse, /* Parser */ Token *pTableName, /* Name of the table into which we insert */ IdList *pColumn, /* List of columns in pTableName to insert into */ Select *pSelect, /* A SELECT statement that supplies values */ @@ -128274,13 +130366,19 @@ const char *zStart, /* Start of SQL text */ const char *zEnd /* End of SQL text */ ){ + sqlite3 *db = pParse->db; TriggerStep *pTriggerStep; assert(pSelect != 0 || db->mallocFailed); - pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName, zStart, zEnd); + pTriggerStep = triggerStepAllocate(pParse, TK_INSERT, pTableName,zStart,zEnd); if( pTriggerStep ){ - pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + if( IN_RENAME_OBJECT ){ + pTriggerStep->pSelect = pSelect; + pSelect = 0; + }else{ + pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + } pTriggerStep->pIdList = pColumn; pTriggerStep->pUpsert = pUpsert; pTriggerStep->orconf = orconf; @@ -128301,7 +130399,7 @@ ** sees an UPDATE statement inside the body of a CREATE TRIGGER. */ SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep( - sqlite3 *db, /* The database connection */ + Parse *pParse, /* Parser */ Token *pTableName, /* Name of the table to be updated */ ExprList *pEList, /* The SET clause: list of column and new values */ Expr *pWhere, /* The WHERE clause */ @@ -128309,12 +130407,20 @@ const char *zStart, /* Start of SQL text */ const char *zEnd /* End of SQL text */ ){ + sqlite3 *db = pParse->db; TriggerStep *pTriggerStep; - pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName, zStart, zEnd); + pTriggerStep = triggerStepAllocate(pParse, TK_UPDATE, pTableName,zStart,zEnd); if( pTriggerStep ){ - pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); - pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + if( IN_RENAME_OBJECT ){ + pTriggerStep->pExprList = pEList; + pTriggerStep->pWhere = pWhere; + pEList = 0; + pWhere = 0; + }else{ + pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); + pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + } pTriggerStep->orconf = orconf; } sqlite3ExprListDelete(db, pEList); @@ -128328,17 +130434,23 @@ ** sees a DELETE statement inside the body of a CREATE TRIGGER. */ SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep( - sqlite3 *db, /* Database connection */ + Parse *pParse, /* Parser */ Token *pTableName, /* The table from which rows are deleted */ Expr *pWhere, /* The WHERE clause */ const char *zStart, /* Start of SQL text */ const char *zEnd /* End of SQL text */ ){ + sqlite3 *db = pParse->db; TriggerStep *pTriggerStep; - pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName, zStart, zEnd); + pTriggerStep = triggerStepAllocate(pParse, TK_DELETE, pTableName,zStart,zEnd); if( pTriggerStep ){ - pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + if( IN_RENAME_OBJECT ){ + pTriggerStep->pWhere = pWhere; + pWhere = 0; + }else{ + pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + } pTriggerStep->orconf = OE_Default; } sqlite3ExprDelete(db, pWhere); @@ -129523,7 +131635,7 @@ if( !isView && aiCurOnePass[0]!=iDataCur && aiCurOnePass[1]!=iDataCur ){ assert( pPk ); sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelBreak, regKey,nKey); - VdbeCoverageNeverTaken(v); + VdbeCoverage(v); } if( eOnePass!=ONEPASS_SINGLE ){ labelContinue = sqlite3VdbeMakeLabel(v); @@ -129610,13 +131722,7 @@ */ testcase( i==31 ); testcase( i==32 ); - sqlite3ExprCodeGetColumnToReg(pParse, pTab, i, iDataCur, regNew+i); - if( tmask & TRIGGER_BEFORE ){ - /* This value will be recomputed in After-BEFORE-trigger-reload-loop - ** below, so make sure that it is not cached and reused. - ** Ticket d85fffd6ffe856092ed8daefa811b1e399706b28. */ - sqlite3ExprCacheRemove(pParse, regNew+i, 1); - } + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, regNew+i); }else{ sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i); } @@ -130153,10 +132259,12 @@ Vdbe *v = pParse->pVdbe; sqlite3 *db = pParse->db; SrcList *pSrc; /* FROM clause for the UPDATE */ - int iDataCur = pUpsert->iDataCur; + int iDataCur; assert( v!=0 ); + assert( pUpsert!=0 ); VdbeNoopComment((v, "Begin DO UPDATE of UPSERT")); + iDataCur = pUpsert->iDataCur; if( pIdx && iCur!=iDataCur ){ if( HasRowid(pTab) ){ int regRowid = sqlite3GetTempReg(pParse); @@ -130426,7 +132534,7 @@ */ rc = execSql(db, pzErrMsg, "BEGIN"); if( rc!=SQLITE_OK ) goto end_of_vacuum; - rc = sqlite3BtreeBeginTrans(pMain, 2); + rc = sqlite3BtreeBeginTrans(pMain, 2, 0); if( rc!=SQLITE_OK ) goto end_of_vacuum; /* Do not attempt to change the page size for a WAL database */ @@ -130844,7 +132952,7 @@ assert( sqlite3_mutex_held(db->mutex) ); if( p ){ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); do { VTable *pNext = p->pNext; sqlite3VtabUnlock(p); @@ -131340,7 +133448,7 @@ assert( IsVirtual(pTab) ); memset(&sParse, 0, sizeof(sParse)); - sParse.declareVtab = 1; + sParse.eParseMode = PARSE_MODE_DECLARE_VTAB; sParse.db = db; sParse.nQueryLoop = 1; if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable, &zErr) @@ -131381,7 +133489,7 @@ sqlite3DbFree(db, zErr); rc = SQLITE_ERROR; } - sParse.declareVtab = 0; + sParse.eParseMode = PARSE_MODE_NORMAL; if( sParse.pVdbe ){ sqlite3VdbeFinalize(sParse.pVdbe); @@ -131935,6 +134043,8 @@ struct InLoop { int iCur; /* The VDBE cursor used by this IN operator */ int addrInTop; /* Top of the IN loop */ + int iBase; /* Base register of multi-key index record */ + int nPrefix; /* Number of prior entires in the key */ u8 eEndLoopOp; /* IN Loop terminator. OP_Next or OP_Prev */ } *aInLoop; /* Information about each nested IN operator */ } in; /* Used when pWLoop->wsFlags&WHERE_IN_ABLE */ @@ -132173,6 +134283,7 @@ WhereInfo *pWInfo; /* WHERE clause processing context */ WhereClause *pOuter; /* Outer conjunction */ u8 op; /* Split operator. TK_AND or TK_OR */ + u8 hasOr; /* True if any a[].eOperator is WO_OR */ int nTerm; /* Number of terms */ int nSlot; /* Number of entries in a[] */ WhereTerm *a; /* Each a[] describes a term of the WHERE cluase */ @@ -132346,6 +134457,7 @@ SQLITE_PRIVATE void sqlite3WhereClauseClear(WhereClause*); SQLITE_PRIVATE void sqlite3WhereSplit(WhereClause*,Expr*,u8); SQLITE_PRIVATE Bitmask sqlite3WhereExprUsage(WhereMaskSet*, Expr*); +SQLITE_PRIVATE Bitmask sqlite3WhereExprUsageNN(WhereMaskSet*, Expr*); SQLITE_PRIVATE Bitmask sqlite3WhereExprListUsage(WhereMaskSet*, ExprList*); SQLITE_PRIVATE void sqlite3WhereExprAnalyze(SrcList*, WhereClause*); SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereClause*); @@ -132408,6 +134520,7 @@ #define WHERE_SKIPSCAN 0x00008000 /* Uses the skip-scan algorithm */ #define WHERE_UNQ_WANTED 0x00010000 /* WHERE_ONEROW would have been helpful*/ #define WHERE_PARTIALIDX 0x00020000 /* The automatic index is partial */ +#define WHERE_IN_EARLYOUT 0x00040000 /* Perhaps quit IN loops early */ /************** End of whereInt.h ********************************************/ /************** Continuing where we left off in wherecode.c ******************/ @@ -132542,7 +134655,7 @@ sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH); sqlite3_str_appendall(&str, isSearch ? "SEARCH" : "SCAN"); if( pItem->pSelect ){ - sqlite3_str_appendf(&str, " SUBQUERY 0x%p", pItem->pSelect); + sqlite3_str_appendf(&str, " SUBQUERY %u", pItem->pSelect->selId); }else{ sqlite3_str_appendf(&str, " TABLE %s", pItem->zName); } @@ -132739,7 +134852,6 @@ /* Code the OP_Affinity opcode if there is anything left to do. */ if( n>0 ){ sqlite3VdbeAddOp4(v, OP_Affinity, base, n, 0, zAff, n); - sqlite3ExprCacheAffinityChange(pParse, base, n); } } @@ -132983,7 +135095,14 @@ sqlite3VdbeAddOp1(v, OP_IsNull, iOut); VdbeCoverage(v); if( i==iEq ){ pIn->iCur = iTab; - pIn->eEndLoopOp = bRev ? OP_PrevIfOpen : OP_NextIfOpen; + pIn->eEndLoopOp = bRev ? OP_Prev : OP_Next; + if( iEq>0 && (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 ){ + pIn->iBase = iReg - i; + pIn->nPrefix = i; + pLoop->wsFlags |= WHERE_IN_EARLYOUT; + }else{ + pIn->nPrefix = 0; + } }else{ pIn->eEndLoopOp = OP_Noop; } @@ -133270,11 +135389,8 @@ struct CCurHint *pHint = pWalker->u.pCCurHint; if( pExpr->op==TK_COLUMN ){ if( pExpr->iTable!=pHint->iTabCur ){ - Vdbe *v = pWalker->pParse->pVdbe; int reg = ++pWalker->pParse->nMem; /* Register for column value */ - sqlite3ExprCodeGetColumnOfTable( - v, pExpr->pTab, pExpr->iTable, pExpr->iColumn, reg - ); + sqlite3ExprCode(pWalker->pParse, pExpr, reg); pExpr->op = TK_REGISTER; pExpr->iTable = reg; }else if( pHint->pIdx!=0 ){ @@ -133627,7 +135743,7 @@ sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pTabItem->addrFillSub); pLevel->p2 = sqlite3VdbeAddOp2(v, OP_Yield, regYield, addrBrk); VdbeCoverage(v); - VdbeComment((v, "next row of \"%s\"", pTabItem->pTab->zName)); + VdbeComment((v, "next row of %s", pTabItem->pTab->zName)); pLevel->op = OP_Goto; }else @@ -133641,7 +135757,6 @@ int nConstraint = pLoop->nLTerm; int iIn; /* Counter for IN constraints */ - sqlite3ExprCachePush(pParse); iReg = sqlite3GetTempRange(pParse, nConstraint+2); addrNotFound = pLevel->addrBrk; for(j=0; jaddrNxt; sqlite3VdbeAddOp3(v, OP_SeekRowid, iCur, addrNxt, iRowidReg); VdbeCoverage(v); - sqlite3ExprCacheAffinityChange(pParse, iRowidReg, 1); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); - VdbeComment((v, "pk")); pLevel->op = OP_Noop; }else if( (pLoop->wsFlags & WHERE_IPK)!=0 && (pLoop->wsFlags & WHERE_COLUMN_RANGE)!=0 @@ -133810,7 +135921,6 @@ VdbeCoverageIf(v, pX->op==TK_LE); VdbeCoverageIf(v, pX->op==TK_LT); VdbeCoverageIf(v, pX->op==TK_GE); - sqlite3ExprCacheAffinityChange(pParse, r1, 1); sqlite3ReleaseTempReg(pParse, rTemp); }else{ sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrHalt); @@ -133845,7 +135955,6 @@ if( testOp!=OP_Noop ){ iRowidReg = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg); VdbeCoverageIf(v, testOp==OP_Le); VdbeCoverageIf(v, testOp==OP_Lt); @@ -134050,6 +136159,9 @@ ** above has already left the cursor sitting on the correct row, ** so no further seeking is needed */ }else{ + if( pLoop->wsFlags & WHERE_IN_EARLYOUT ){ + sqlite3VdbeAddOp1(v, OP_SeekHit, iIdxCur); + } op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev]; assert( op!=0 ); sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint); @@ -134068,7 +136180,6 @@ nConstraint = nEq; if( pRangeEnd ){ Expr *pRight = pRangeEnd->pExpr->pRight; - sqlite3ExprCacheRemove(pParse, regBase+nEq, 1); codeExprOrVector(pParse, pRight, regBase+nEq, nTop); whereLikeOptimizationStringFixup(v, pLevel, pRangeEnd); if( (pRangeEnd->wtFlags & TERM_VNULL)==0 @@ -134093,7 +136204,6 @@ } }else if( bStopAtNull ){ sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); - sqlite3ExprCacheRemove(pParse, regBase+nEq, 1); endEq = 0; nConstraint++; } @@ -134113,6 +136223,10 @@ testcase( op==OP_IdxLE ); VdbeCoverageIf(v, op==OP_IdxLE ); } + if( pLoop->wsFlags & WHERE_IN_EARLYOUT ){ + sqlite3VdbeAddOp2(v, OP_SeekHit, iIdxCur, 1); + } + /* Seek the table cursor, if required */ if( omitTable ){ /* pIdx is a covering index. No need to access the main table. */ @@ -134123,7 +136237,6 @@ )){ iRowidReg = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, iRowidReg); VdbeCoverage(v); }else{ @@ -134358,23 +136471,23 @@ ** row will be skipped in subsequent sub-WHERE clauses. */ if( (pWInfo->wctrlFlags & WHERE_DUPLICATES_OK)==0 ){ - int r; int iSet = ((ii==pOrWc->nTerm-1)?-1:ii); if( HasRowid(pTab) ){ - r = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, regRowid, 0); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, -1, regRowid); jmp1 = sqlite3VdbeAddOp4Int(v, OP_RowSetTest, regRowset, 0, - r,iSet); + regRowid, iSet); VdbeCoverage(v); }else{ Index *pPk = sqlite3PrimaryKeyIndex(pTab); int nPk = pPk->nKeyCol; int iPk; + int r; /* Read the PK into an array of temp registers. */ r = sqlite3GetTempRange(pParse, nPk); for(iPk=0; iPkaiColumn[iPk]; - sqlite3ExprCodeGetColumnToReg(pParse, pTab, iCol, iCur, r+iPk); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol, r+iPk); } /* Check if the temp table already contains this key. If so, @@ -134607,7 +136720,6 @@ pLevel->addrFirst = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin); VdbeComment((v, "record LEFT JOIN hit")); - sqlite3ExprCacheClear(pParse); for(pTerm=pWC->a, j=0; jnTerm; j++, pTerm++){ testcase( pTerm->wtFlags & TERM_VIRTUAL ); testcase( pTerm->wtFlags & TERM_CODED ); @@ -134823,18 +136935,18 @@ int *pisComplete, /* True if the only wildcard is % in the last character */ int *pnoCase /* True if uppercase is equivalent to lowercase */ ){ - const u8 *z = 0; /* String on RHS of LIKE operator */ + const u8 *z = 0; /* String on RHS of LIKE operator */ Expr *pRight, *pLeft; /* Right and left size of LIKE operator */ ExprList *pList; /* List of operands to the LIKE operator */ - int c; /* One character in z[] */ + u8 c; /* One character in z[] */ int cnt; /* Number of non-wildcard prefix characters */ - char wc[4]; /* Wildcard characters */ + u8 wc[4]; /* Wildcard characters */ sqlite3 *db = pParse->db; /* Database connection */ sqlite3_value *pVal = 0; int op; /* Opcode of pRight */ int rc; /* Result code to return */ - if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){ + if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, (char*)wc) ){ return 0; } #ifdef SQLITE_EBCDIC @@ -134859,23 +136971,6 @@ } if( z ){ - /* If the RHS begins with a digit or a minus sign, then the LHS must - ** be an ordinary column (not a virtual table column) with TEXT affinity. - ** Otherwise the LHS might be numeric and "lhs >= rhs" would be false - ** even though "lhs LIKE rhs" is true. But if the RHS does not start - ** with a digit or '-', then "lhs LIKE rhs" will always be false if - ** the LHS is numeric and so the optimization still works. - */ - if( sqlite3Isdigit(z[0]) || z[0]=='-' ){ - if( pLeft->op!=TK_COLUMN - || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT - || IsVirtual(pLeft->pTab) /* Value might be numeric */ - ){ - sqlite3ValueFree(pVal); - return 0; - } - } - /* Count the number of prefix characters prior to the first wildcard */ cnt = 0; while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){ @@ -134885,11 +136980,13 @@ /* The optimization is possible only if (1) the pattern does not begin ** with a wildcard and if (2) the non-wildcard prefix does not end with - ** an (illegal 0xff) character. The second condition is necessary so + ** an (illegal 0xff) character, or (3) the pattern does not consist of + ** a single escape character. The second condition is necessary so ** that we can increment the prefix key to find an upper bound for the - ** range search. - */ - if( cnt!=0 && 255!=(u8)z[cnt-1] ){ + ** range search. The third is because the caller assumes that the pattern + ** consists of at least one character after all escapes have been + ** removed. */ + if( cnt!=0 && 255!=(u8)z[cnt-1] && (cnt>1 || z[0]!=wc[3]) ){ Expr *pPrefix; /* A "complete" match if the pattern ends with "*" or "%" */ @@ -134906,6 +137003,32 @@ zNew[iTo++] = zNew[iFrom]; } zNew[iTo] = 0; + + /* If the RHS begins with a digit or a minus sign, then the LHS must be + ** an ordinary column (not a virtual table column) with TEXT affinity. + ** Otherwise the LHS might be numeric and "lhs >= rhs" would be false + ** even though "lhs LIKE rhs" is true. But if the RHS does not start + ** with a digit or '-', then "lhs LIKE rhs" will always be false if + ** the LHS is numeric and so the optimization still works. + ** + ** 2018-09-10 ticket c94369cae9b561b1f996d0054bfab11389f9d033 + ** The RHS pattern must not be '/%' because the termination condition + ** will then become "x<'0'" and if the affinity is numeric, will then + ** be converted into "x<0", which is incorrect. + */ + if( sqlite3Isdigit(zNew[0]) + || zNew[0]=='-' + || (zNew[0]+1=='0' && iTo==1) + ){ + if( pLeft->op!=TK_COLUMN + || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT + || IsVirtual(pLeft->pTab) /* Value might be numeric */ + ){ + sqlite3ExprDelete(db, pPrefix); + sqlite3ValueFree(pVal); + return 0; + } + } } *ppPrefix = pPrefix; @@ -134967,6 +137090,7 @@ ** If the expression matches none of the patterns above, return 0. */ static int isAuxiliaryVtabOperator( + sqlite3 *db, /* Parsing context */ Expr *pExpr, /* Test this expression */ unsigned char *peOp2, /* OUT: 0 for MATCH, or else an op2 value */ Expr **ppLeft, /* Column expression to left of MATCH/op2 */ @@ -134990,16 +137114,54 @@ if( pList==0 || pList->nExpr!=2 ){ return 0; } + + /* Built-in operators MATCH, GLOB, LIKE, and REGEXP attach to a + ** virtual table on their second argument, which is the same as + ** the left-hand side operand in their in-fix form. + ** + ** vtab_column MATCH expression + ** MATCH(expression,vtab_column) + */ pCol = pList->a[1].pExpr; - if( pCol->op!=TK_COLUMN || !IsVirtual(pCol->pTab) ){ - return 0; + if( pCol->op==TK_COLUMN && IsVirtual(pCol->pTab) ){ + for(i=0; iu.zToken, aOp[i].zOp)==0 ){ + *peOp2 = aOp[i].eOp2; + *ppRight = pList->a[0].pExpr; + *ppLeft = pCol; + return 1; + } + } } - for(i=0; iu.zToken, aOp[i].zOp)==0 ){ - *peOp2 = aOp[i].eOp2; - *ppRight = pList->a[0].pExpr; - *ppLeft = pCol; - return 1; + + /* We can also match against the first column of overloaded + ** functions where xFindFunction returns a value of at least + ** SQLITE_INDEX_CONSTRAINT_FUNCTION. + ** + ** OVERLOADED(vtab_column,expression) + ** + ** Historically, xFindFunction expected to see lower-case function + ** names. But for this use case, xFindFunction is expected to deal + ** with function names in an arbitrary case. + */ + pCol = pList->a[0].pExpr; + if( pCol->op==TK_COLUMN && IsVirtual(pCol->pTab) ){ + sqlite3_vtab *pVtab; + sqlite3_module *pMod; + void (*xNotUsed)(sqlite3_context*,int,sqlite3_value**); + void *pNotUsed; + pVtab = sqlite3GetVTable(db, pCol->pTab)->pVtab; + assert( pVtab!=0 ); + assert( pVtab->pModule!=0 ); + pMod = (sqlite3_module *)pVtab->pModule; + if( pMod->xFindFunction!=0 ){ + i = pMod->xFindFunction(pVtab,2, pExpr->u.zToken, &xNotUsed, &pNotUsed); + if( i>=SQLITE_INDEX_CONSTRAINT_FUNCTION ){ + *peOp2 = i; + *ppRight = pList->a[1].pExpr; + *ppLeft = pCol; + return 1; + } } } }else if( pExpr->op==TK_NE || pExpr->op==TK_ISNOT || pExpr->op==TK_NOTNULL ){ @@ -135301,7 +137463,12 @@ ** empty. */ pOrInfo->indexable = indexable; - pTerm->eOperator = indexable==0 ? 0 : WO_OR; + if( indexable ){ + pTerm->eOperator = WO_OR; + pWC->hasOr = 1; + }else{ + pTerm->eOperator = WO_OR; + } /* For a two-way OR, attempt to implementation case 2. */ @@ -135442,7 +137609,7 @@ idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC); testcase( idxNew==0 ); exprAnalyze(pSrc, pWC, idxNew); - pTerm = &pWC->a[idxTerm]; + /* pTerm = &pWC->a[idxTerm]; // would be needed if pTerm where used again */ markTermAsChild(pWC, idxNew, idxTerm); }else{ sqlite3ExprListDelete(db, pList); @@ -135481,7 +137648,7 @@ return 0; } pColl = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight); - if( pColl==0 || sqlite3StrICmp(pColl->zName, "BINARY")==0 ) return 1; + if( sqlite3IsBinary(pColl) ) return 1; return sqlite3ExprCollSeqMatch(pParse, pExpr->pLeft, pExpr->pRight); } @@ -135640,7 +137807,7 @@ pTerm->prereqRight = sqlite3WhereExprUsage(pMaskSet, pExpr->pRight); } pMaskSet->bVarSelect = 0; - prereqAll = sqlite3WhereExprUsage(pMaskSet, pExpr); + prereqAll = sqlite3WhereExprUsageNN(pMaskSet, pExpr); if( pMaskSet->bVarSelect ) pTerm->wtFlags |= TERM_VARSELECT; if( ExprHasProperty(pExpr, EP_FromJoin) ){ Bitmask x = sqlite3WhereGetMask(pMaskSet, pExpr->iRightJoinTable); @@ -135822,7 +137989,7 @@ } *pC = c + 1; } - zCollSeqName = noCase ? "NOCASE" : "BINARY"; + zCollSeqName = noCase ? "NOCASE" : sqlite3StrBINARY; pNewExpr1 = sqlite3ExprDup(db, pLeft, 0); pNewExpr1 = sqlite3PExpr(pParse, TK_GE, sqlite3ExprAddCollateString(pParse,pNewExpr1,zCollSeqName), @@ -135859,7 +138026,7 @@ */ if( pWC->op==TK_AND ){ Expr *pRight = 0, *pLeft = 0; - int res = isAuxiliaryVtabOperator(pExpr, &eOp2, &pLeft, &pRight); + int res = isAuxiliaryVtabOperator(db, pExpr, &eOp2, &pLeft, &pRight); while( res-- > 0 ){ int idxNew; WhereTerm *pNewTerm; @@ -136033,6 +138200,7 @@ WhereInfo *pWInfo /* The WHERE processing context */ ){ pWC->pWInfo = pWInfo; + pWC->hasOr = 0; pWC->pOuter = 0; pWC->nTerm = 0; pWC->nSlot = ArraySize(pWC->aStatic); @@ -136069,17 +138237,18 @@ ** a bitmask indicating which tables are used in that expression ** tree. */ -SQLITE_PRIVATE Bitmask sqlite3WhereExprUsage(WhereMaskSet *pMaskSet, Expr *p){ +SQLITE_PRIVATE Bitmask sqlite3WhereExprUsageNN(WhereMaskSet *pMaskSet, Expr *p){ Bitmask mask; - if( p==0 ) return 0; - if( p->op==TK_COLUMN ){ + if( p->op==TK_COLUMN && !ExprHasProperty(p, EP_FixedCol) ){ return sqlite3WhereGetMask(pMaskSet, p->iTable); + }else if( ExprHasProperty(p, EP_TokenOnly|EP_Leaf) ){ + assert( p->op!=TK_IF_NULL_ROW ); + return 0; } mask = (p->op==TK_IF_NULL_ROW) ? sqlite3WhereGetMask(pMaskSet, p->iTable) : 0; - assert( !ExprHasProperty(p, EP_TokenOnly) ); - if( p->pLeft ) mask |= sqlite3WhereExprUsage(pMaskSet, p->pLeft); + if( p->pLeft ) mask |= sqlite3WhereExprUsageNN(pMaskSet, p->pLeft); if( p->pRight ){ - mask |= sqlite3WhereExprUsage(pMaskSet, p->pRight); + mask |= sqlite3WhereExprUsageNN(pMaskSet, p->pRight); assert( p->x.pList==0 ); }else if( ExprHasProperty(p, EP_xIsSelect) ){ if( ExprHasProperty(p, EP_VarSelect) ) pMaskSet->bVarSelect = 1; @@ -136089,6 +138258,9 @@ } return mask; } +SQLITE_PRIVATE Bitmask sqlite3WhereExprUsage(WhereMaskSet *pMaskSet, Expr *p){ + return p ? sqlite3WhereExprUsageNN(pMaskSet,p) : 0; +} SQLITE_PRIVATE Bitmask sqlite3WhereExprListUsage(WhereMaskSet *pMaskSet, ExprList *pList){ int i; Bitmask mask = 0; @@ -136230,15 +138402,38 @@ } /* -** Return TRUE if the innermost loop of the WHERE clause implementation -** returns rows in ORDER BY order for complete run of the inner loop. -** -** Across multiple iterations of outer loops, the output rows need not be -** sorted. As long as rows are sorted for just the innermost loop, this -** routine can return TRUE. -*/ -SQLITE_PRIVATE int sqlite3WhereOrderedInnerLoop(WhereInfo *pWInfo){ - return pWInfo->bOrderedInnerLoop; +** In the ORDER BY LIMIT optimization, if the inner-most loop is known +** to emit rows in increasing order, and if the last row emitted by the +** inner-most loop did not fit within the sorter, then we can skip all +** subsequent rows for the current iteration of the inner loop (because they +** will not fit in the sorter either) and continue with the second inner +** loop - the loop immediately outside the inner-most. +** +** When a row does not fit in the sorter (because the sorter already +** holds LIMIT+OFFSET rows that are smaller), then a jump is made to the +** label returned by this function. +** +** If the ORDER BY LIMIT optimization applies, the jump destination should +** be the continuation for the second-inner-most loop. If the ORDER BY +** LIMIT optimization does not apply, then the jump destination should +** be the continuation for the inner-most loop. +** +** It is always safe for this routine to return the continuation of the +** inner-most loop, in the sense that a correct answer will result. +** Returning the continuation the second inner loop is an optimization +** that might make the code run a little faster, but should not change +** the final answer. +*/ +SQLITE_PRIVATE int sqlite3WhereOrderByLimitOptLabel(WhereInfo *pWInfo){ + WhereLevel *pInner; + if( !pWInfo->bOrderedInnerLoop ){ + /* The ORDER BY LIMIT optimization does not apply. Jump to the + ** continuation of the inner-most loop. */ + return pWInfo->iContinue; + } + pInner = &pWInfo->a[pWInfo->nLevel-1]; + assert( pInner->addrNxt!=0 ); + return pInner->addrNxt; } /* @@ -136965,7 +139160,6 @@ VdbeComment((v, "for %s", pTable->zName)); /* Fill the automatic index with content */ - sqlite3ExprCachePush(pParse); pTabItem = &pWC->pWInfo->pTabList->a[pLevel->iFrom]; if( pTabItem->fg.viaCoroutine ){ int regYield = pTabItem->regReturn; @@ -136973,7 +139167,7 @@ sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pTabItem->addrFillSub); addrTop = sqlite3VdbeAddOp1(v, OP_Yield, regYield); VdbeCoverage(v); - VdbeComment((v, "next row of \"%s\"", pTabItem->pTab->zName)); + VdbeComment((v, "next row of %s", pTabItem->pTab->zName)); }else{ addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v); } @@ -137002,7 +139196,6 @@ sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX); sqlite3VdbeJumpHere(v, addrTop); sqlite3ReleaseTempReg(pParse, regRecord); - sqlite3ExprCachePop(pParse); /* Jump here when skipping the initialization */ sqlite3VdbeJumpHere(v, addrInit); @@ -137108,6 +139301,20 @@ testcase( pTerm->eOperator & WO_ALL ); if( (pTerm->eOperator & ~(WO_EQUIV))==0 ) continue; if( pTerm->wtFlags & TERM_VNULL ) continue; + if( (pSrc->fg.jointype & JT_LEFT)!=0 + && !ExprHasProperty(pTerm->pExpr, EP_FromJoin) + && (pTerm->eOperator & (WO_IS|WO_ISNULL)) + ){ + /* An "IS" term in the WHERE clause where the virtual table is the rhs + ** of a LEFT JOIN. Do not pass this term to the virtual table + ** implementation, as this can lead to incorrect results from SQL such + ** as: + ** + ** "LEFT JOIN vtab WHERE vtab.col IS NULL" */ + testcase( pTerm->eOperator & WO_ISNULL ); + testcase( pTerm->eOperator & WO_IS ); + continue; + } assert( pTerm->u.leftColumn>=(-1) ); pIdxCons[j].iColumn = pTerm->u.leftColumn; pIdxCons[j].iTermOffset = i; @@ -137599,7 +139806,9 @@ Index *p = pLoop->u.btree.pIndex; int nEq = pLoop->u.btree.nEq; - if( p->nSample>0 && nEqnSampleCol ){ + if( p->nSample>0 && nEqnSampleCol + && OptimizationEnabled(pParse->db, SQLITE_Stat34) + ){ if( nEq==pBuilder->nRecValid ){ UnpackedRecord *pRec = pBuilder->pRec; tRowcnt a[2]; @@ -138614,7 +140823,6 @@ if( eOp & WO_IN ){ Expr *pExpr = pTerm->pExpr; - pNew->wsFlags |= WHERE_COLUMN_IN; if( ExprHasProperty(pExpr, EP_xIsSelect) ){ /* "x IN (SELECT ...)": TUNING: the SELECT returns 25 rows */ int i; @@ -138634,6 +140842,42 @@ assert( nIn>0 ); /* RHS always has 2 or more terms... The parser ** changes "x IN (?)" into "x=?". */ } + if( pProbe->hasStat1 ){ + LogEst M, logK, safetyMargin; + /* Let: + ** N = the total number of rows in the table + ** K = the number of entries on the RHS of the IN operator + ** M = the number of rows in the table that match terms to the + ** to the left in the same index. If the IN operator is on + ** the left-most index column, M==N. + ** + ** Given the definitions above, it is better to omit the IN operator + ** from the index lookup and instead do a scan of the M elements, + ** testing each scanned row against the IN operator separately, if: + ** + ** M*log(K) < K*log(N) + ** + ** Our estimates for M, K, and N might be inaccurate, so we build in + ** a safety margin of 2 (LogEst: 10) that favors using the IN operator + ** with the index, as using an index has better worst-case behavior. + ** If we do not have real sqlite_stat1 data, always prefer to use + ** the index. + */ + M = pProbe->aiRowLogEst[saved_nEq]; + logK = estLog(nIn); + safetyMargin = 10; /* TUNING: extra weight for indexed IN */ + if( M + logK + safetyMargin < nIn + rLogSize ){ + WHERETRACE(0x40, + ("Scan preferred over IN operator on column %d of \"%s\" (%d<%d)\n", + saved_nEq, pProbe->zName, M+logK+10, nIn+rLogSize)); + continue; + }else{ + WHERETRACE(0x40, + ("IN operator preferred on column %d of \"%s\" (%d>=%d)\n", + saved_nEq, pProbe->zName, M+logK+10, nIn+rLogSize)); + } + } + pNew->wsFlags |= WHERE_COLUMN_IN; }else if( eOp & (WO_EQ|WO_IS) ){ int iCol = pProbe->aiColumn[saved_nEq]; pNew->wsFlags |= WHERE_COLUMN_EQ; @@ -138712,6 +140956,7 @@ && pProbe->nSample && pNew->u.btree.nEq<=pProbe->nSampleCol && ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect)) + && OptimizationEnabled(db, SQLITE_Stat34) ){ Expr *pExpr = pTerm->pExpr; if( (eOp & (WO_EQ|WO_ISNULL|WO_IS))!=0 ){ @@ -138800,6 +141045,7 @@ if( saved_nEq==saved_nSkip && saved_nEq+1nKeyCol && pProbe->noSkipScan==0 + && OptimizationEnabled(db, SQLITE_SkipScan) && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */ && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK ){ @@ -138863,24 +141109,6 @@ return 0; } -/* -** Return a bitmask where 1s indicate that the corresponding column of -** the table is used by an index. Only the first 63 columns are considered. -*/ -static Bitmask columnsInIndex(Index *pIdx){ - Bitmask m = 0; - int j; - for(j=pIdx->nColumn-1; j>=0; j--){ - int x = pIdx->aiColumn[j]; - if( x>=0 ){ - testcase( x==BMS-1 ); - testcase( x==BMS-2 ); - if( xwsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; m = 0; }else{ - m = pSrc->colUsed & ~columnsInIndex(pProbe); + m = pSrc->colUsed & pProbe->colNotIdxed; pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED; } @@ -139347,7 +141575,7 @@ if( pX->pLeft ){ pC = sqlite3BinaryCompareCollSeq(pHidden->pParse, pX->pLeft, pX->pRight); } - zRet = (pC ? pC->zName : "BINARY"); + zRet = (pC ? pC->zName : sqlite3StrBINARY); } return zRet; } @@ -139663,7 +141891,7 @@ { rc = whereLoopAddBtree(pBuilder, mPrereq); } - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK && pBuilder->pWC->hasOr ){ rc = whereLoopAddOr(pBuilder, mPrereq, mUnusable); } mPrior |= pNew->maskSelf; @@ -140198,7 +142426,11 @@ pWInfo, nRowEst, nOrderBy, isOrdered ); } - rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]); + /* TUNING: Add a small extra penalty (5) to sorting as an + ** extra encouragment to the query planner to select a plan + ** where the rows emerge in the correct order without any sorting + ** required. */ + rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]) + 5; WHERETRACE(0x002, ("---- sort cost=%-3d (%d/%d) increases cost %3d to %-3d\n", @@ -140388,6 +142620,7 @@ pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; } } + pWInfo->bOrderedInnerLoop = 0; if( pWInfo->pOrderBy ){ if( pWInfo->wctrlFlags & WHERE_DISTINCTBY ){ if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){ @@ -140499,7 +142732,7 @@ } if( j!=pIdx->nKeyCol ) continue; pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_ONEROW|WHERE_INDEXED; - if( pIdx->isCovering || (pItem->colUsed & ~columnsInIndex(pIdx))==0 ){ + if( pIdx->isCovering || (pItem->colUsed & pIdx->colNotIdxed)==0 ){ pLoop->wsFlags |= WHERE_IDX_ONLY; } pLoop->nLTerm = j; @@ -141180,6 +143413,26 @@ } /* +** Part of sqlite3WhereEnd() will rewrite opcodes to reference the +** index rather than the main table. In SQLITE_DEBUG mode, we want +** to trace those changes if PRAGMA vdbe_addoptrace=on. This routine +** does that. +*/ +#ifndef SQLITE_DEBUG +# define OpcodeRewriteTrace(D,K,P) /* no-op */ +#else +# define OpcodeRewriteTrace(D,K,P) sqlite3WhereOpcodeRewriteTrace(D,K,P) + static void sqlite3WhereOpcodeRewriteTrace( + sqlite3 *db, + int pc, + VdbeOp *pOp + ){ + if( (db->flags & SQLITE_VdbeAddopTrace)==0 ) return; + sqlite3VdbePrintOp(0, pc, pOp); + } +#endif + +/* ** Generate the end of the WHERE loop. See comments on ** sqlite3WhereBegin() for additional information. */ @@ -141195,7 +143448,6 @@ /* Generate loop termination code. */ VdbeModuleComment((v, "End WHERE-core")); - sqlite3ExprCacheClear(pParse); for(i=pWInfo->nLevel-1; i>=0; i--){ int addr; pLevel = &pWInfo->a[i]; @@ -141246,10 +143498,17 @@ for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){ sqlite3VdbeJumpHere(v, pIn->addrInTop+1); if( pIn->eEndLoopOp!=OP_Noop ){ + if( pIn->nPrefix ){ + assert( pLoop->wsFlags & WHERE_IN_EARLYOUT ); + sqlite3VdbeAddOp4Int(v, OP_IfNoHope, pLevel->iIdxCur, + sqlite3VdbeCurrentAddr(v)+2, + pIn->iBase, pIn->nPrefix); + VdbeCoverage(v); + } sqlite3VdbeAddOp2(v, pIn->eEndLoopOp, pIn->iCur, pIn->addrInTop); VdbeCoverage(v); - VdbeCoverageIf(v, pIn->eEndLoopOp==OP_PrevIfOpen); - VdbeCoverageIf(v, pIn->eEndLoopOp==OP_NextIfOpen); + VdbeCoverageIf(v, pIn->eEndLoopOp==OP_Prev); + VdbeCoverageIf(v, pIn->eEndLoopOp==OP_Next); } sqlite3VdbeJumpHere(v, pIn->addrInTop-1); } @@ -141340,6 +143599,11 @@ ){ last = sqlite3VdbeCurrentAddr(v); k = pLevel->addrBody; +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_VdbeAddopTrace ){ + printf("TRANSLATE opcodes in range %d..%d\n", k, last-1); + } +#endif pOp = sqlite3VdbeGetOp(v, k); for(; kp1!=pLevel->iTabCur ) continue; @@ -141359,16 +143623,22 @@ if( x>=0 ){ pOp->p2 = x; pOp->p1 = pLevel->iIdxCur; + OpcodeRewriteTrace(db, k, pOp); } assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 || x>=0 || pWInfo->eOnePass ); }else if( pOp->opcode==OP_Rowid ){ pOp->p1 = pLevel->iIdxCur; pOp->opcode = OP_IdxRowid; + OpcodeRewriteTrace(db, k, pOp); }else if( pOp->opcode==OP_IfNullRow ){ pOp->p1 = pLevel->iIdxCur; + OpcodeRewriteTrace(db, k, pOp); } } +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_VdbeAddopTrace ) printf("TRANSLATE complete\n"); +#endif } } @@ -141380,9 +143650,9 @@ } /************** End of where.c ***********************************************/ -/************** Begin file parse.c *******************************************/ +/************** Begin file window.c ******************************************/ /* -** 2000-05-29 +** 2018 May 08 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -141392,37 +143662,2292 @@ ** May you share freely, never taking more than you give. ** ************************************************************************* -** Driver template for the LEMON parser generator. -** -** The "lemon" program processes an LALR(1) input grammar file, then uses -** this template to construct a parser. The "lemon" program inserts text -** at each "%%" line. Also, any "P-a-r-s-e" identifer prefix (without the -** interstitial "-" characters) contained in this template is changed into -** the value of the %name directive from the grammar. Otherwise, the content -** of this template is copied straight through into the generate parser -** source file. -** -** The following is the concatenation of all %include directives from the -** input grammar file: */ -/* #include */ -/************ Begin %include sections from the grammar ************************/ - /* #include "sqliteInt.h" */ +#ifndef SQLITE_OMIT_WINDOWFUNC + /* -** Disable all error recovery processing in the parser push-down -** automaton. +** SELECT REWRITING +** +** Any SELECT statement that contains one or more window functions in +** either the select list or ORDER BY clause (the only two places window +** functions may be used) is transformed by function sqlite3WindowRewrite() +** in order to support window function processing. For example, with the +** schema: +** +** CREATE TABLE t1(a, b, c, d, e, f, g); +** +** the statement: +** +** SELECT a+1, max(b) OVER (PARTITION BY c ORDER BY d) FROM t1 ORDER BY e; +** +** is transformed to: +** +** SELECT a+1, max(b) OVER (PARTITION BY c ORDER BY d) FROM ( +** SELECT a, e, c, d, b FROM t1 ORDER BY c, d +** ) ORDER BY e; +** +** The flattening optimization is disabled when processing this transformed +** SELECT statement. This allows the implementation of the window function +** (in this case max()) to process rows sorted in order of (c, d), which +** makes things easier for obvious reasons. More generally: +** +** * FROM, WHERE, GROUP BY and HAVING clauses are all moved to +** the sub-query. +** +** * ORDER BY, LIMIT and OFFSET remain part of the parent query. +** +** * Terminals from each of the expression trees that make up the +** select-list and ORDER BY expressions in the parent query are +** selected by the sub-query. For the purposes of the transformation, +** terminals are column references and aggregate functions. +** +** If there is more than one window function in the SELECT that uses +** the same window declaration (the OVER bit), then a single scan may +** be used to process more than one window function. For example: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d), +** min(e) OVER (PARTITION BY c ORDER BY d) +** FROM t1; +** +** is transformed in the same way as the example above. However: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d), +** min(e) OVER (PARTITION BY a ORDER BY b) +** FROM t1; +** +** Must be transformed to: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d) FROM ( +** SELECT e, min(e) OVER (PARTITION BY a ORDER BY b), c, d, b FROM +** SELECT a, e, c, d, b FROM t1 ORDER BY a, b +** ) ORDER BY c, d +** ) ORDER BY e; +** +** so that both min() and max() may process rows in the order defined by +** their respective window declarations. +** +** INTERFACE WITH SELECT.C +** +** When processing the rewritten SELECT statement, code in select.c calls +** sqlite3WhereBegin() to begin iterating through the results of the +** sub-query, which is always implemented as a co-routine. It then calls +** sqlite3WindowCodeStep() to process rows and finish the scan by calling +** sqlite3WhereEnd(). +** +** sqlite3WindowCodeStep() generates VM code so that, for each row returned +** by the sub-query a sub-routine (OP_Gosub) coded by select.c is invoked. +** When the sub-routine is invoked: +** +** * The results of all window-functions for the row are stored +** in the associated Window.regResult registers. +** +** * The required terminal values are stored in the current row of +** temp table Window.iEphCsr. +** +** In some cases, depending on the window frame and the specific window +** functions invoked, sqlite3WindowCodeStep() caches each entire partition +** in a temp table before returning any rows. In other cases it does not. +** This detail is encapsulated within this file, the code generated by +** select.c is the same in either case. +** +** BUILT-IN WINDOW FUNCTIONS +** +** This implementation features the following built-in window functions: +** +** row_number() +** rank() +** dense_rank() +** percent_rank() +** cume_dist() +** ntile(N) +** lead(expr [, offset [, default]]) +** lag(expr [, offset [, default]]) +** first_value(expr) +** last_value(expr) +** nth_value(expr, N) +** +** These are the same built-in window functions supported by Postgres. +** Although the behaviour of aggregate window functions (functions that +** can be used as either aggregates or window funtions) allows them to +** be implemented using an API, built-in window functions are much more +** esoteric. Additionally, some window functions (e.g. nth_value()) +** may only be implemented by caching the entire partition in memory. +** As such, some built-in window functions use the same API as aggregate +** window functions and some are implemented directly using VDBE +** instructions. Additionally, for those functions that use the API, the +** window frame is sometimes modified before the SELECT statement is +** rewritten. For example, regardless of the specified window frame, the +** row_number() function always uses: +** +** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** See sqlite3WindowUpdate() for details. +** +** As well as some of the built-in window functions, aggregate window +** functions min() and max() are implemented using VDBE instructions if +** the start of the window frame is declared as anything other than +** UNBOUNDED PRECEDING. */ -#define YYNOERRORRECOVERY 1 /* -** Make yytestcase() the same as testcase() +** Implementation of built-in window function row_number(). Assumes that the +** window frame has been coerced to: +** +** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW */ -#define yytestcase(X) testcase(X) +static void row_numberStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + i64 *p = (i64*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ) (*p)++; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void row_numberValueFunc(sqlite3_context *pCtx){ + i64 *p = (i64*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + sqlite3_result_int64(pCtx, (p ? *p : 0)); +} /* -** Indicate that sqlite3ParserFree() will never be called with a null +** Context object type used by rank(), dense_rank(), percent_rank() and +** cume_dist(). +*/ +struct CallCount { + i64 nValue; + i64 nStep; + i64 nTotal; +}; + +/* +** Implementation of built-in window function dense_rank(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void dense_rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ) p->nStep = 1; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void dense_rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nStep ){ + p->nValue++; + p->nStep = 0; + } + sqlite3_result_int64(pCtx, p->nValue); + } +} + +/* +** Implementation of built-in window function rank(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + p->nStep++; + if( p->nValue==0 ){ + p->nValue = p->nStep; + } + } + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + sqlite3_result_int64(pCtx, p->nValue); + p->nValue = 0; + } +} + +/* +** Implementation of built-in window function percent_rank(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void percent_rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + UNUSED_PARAMETER(nArg); assert( nArg==1 ); + + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal==0 ){ + p->nTotal = sqlite3_value_int64(apArg[0]); + } + p->nStep++; + if( p->nValue==0 ){ + p->nValue = p->nStep; + } + } +} +static void percent_rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal>1 ){ + double r = (double)(p->nValue-1) / (double)(p->nTotal-1); + sqlite3_result_double(pCtx, r); + }else{ + sqlite3_result_double(pCtx, 0.0); + } + p->nValue = 0; + } +} + +/* +** Implementation of built-in window function cume_dist(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void cume_distStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + assert( nArg==1 ); UNUSED_PARAMETER(nArg); + + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal==0 ){ + p->nTotal = sqlite3_value_int64(apArg[0]); + } + p->nStep++; + } +} +static void cume_distValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->nTotal ){ + double r = (double)(p->nStep) / (double)(p->nTotal); + sqlite3_result_double(pCtx, r); + } +} + +/* +** Context object for ntile() window function. +*/ +struct NtileCtx { + i64 nTotal; /* Total rows in partition */ + i64 nParam; /* Parameter passed to ntile(N) */ + i64 iRow; /* Current row */ +}; + +/* +** Implementation of ntile(). This assumes that the window frame has +** been coerced to: +** +** ROWS UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void ntileStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct NtileCtx *p; + assert( nArg==2 ); UNUSED_PARAMETER(nArg); + p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal==0 ){ + p->nParam = sqlite3_value_int64(apArg[0]); + p->nTotal = sqlite3_value_int64(apArg[1]); + if( p->nParam<=0 ){ + sqlite3_result_error( + pCtx, "argument of ntile must be a positive integer", -1 + ); + } + } + p->iRow++; + } +} +static void ntileValueFunc(sqlite3_context *pCtx){ + struct NtileCtx *p; + p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->nParam>0 ){ + int nSize = (p->nTotal / p->nParam); + if( nSize==0 ){ + sqlite3_result_int64(pCtx, p->iRow); + }else{ + i64 nLarge = p->nTotal - p->nParam*nSize; + i64 iSmall = nLarge*(nSize+1); + i64 iRow = p->iRow-1; + + assert( (nLarge*(nSize+1) + (p->nParam-nLarge)*nSize)==p->nTotal ); + + if( iRowpVal); + p->pVal = sqlite3_value_dup(apArg[0]); + if( p->pVal==0 ){ + sqlite3_result_error_nomem(pCtx); + }else{ + p->nVal++; + } + } +} +static void last_valueInvFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct LastValueCtx *p; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( ALWAYS(p) ){ + p->nVal--; + if( p->nVal==0 ){ + sqlite3_value_free(p->pVal); + p->pVal = 0; + } + } +} +static void last_valueValueFunc(sqlite3_context *pCtx){ + struct LastValueCtx *p; + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->pVal ){ + sqlite3_result_value(pCtx, p->pVal); + } +} +static void last_valueFinalizeFunc(sqlite3_context *pCtx){ + struct LastValueCtx *p; + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->pVal ){ + sqlite3_result_value(pCtx, p->pVal); + sqlite3_value_free(p->pVal); + p->pVal = 0; + } +} + +/* +** Static names for the built-in window function names. These static +** names are used, rather than string literals, so that FuncDef objects +** can be associated with a particular window function by direct +** comparison of the zName pointer. Example: +** +** if( pFuncDef->zName==row_valueName ){ ... } +*/ +static const char row_numberName[] = "row_number"; +static const char dense_rankName[] = "dense_rank"; +static const char rankName[] = "rank"; +static const char percent_rankName[] = "percent_rank"; +static const char cume_distName[] = "cume_dist"; +static const char ntileName[] = "ntile"; +static const char last_valueName[] = "last_value"; +static const char nth_valueName[] = "nth_value"; +static const char first_valueName[] = "first_value"; +static const char leadName[] = "lead"; +static const char lagName[] = "lag"; + +/* +** No-op implementations of xStep() and xFinalize(). Used as place-holders +** for built-in window functions that never call those interfaces. +** +** The noopValueFunc() is called but is expected to do nothing. The +** noopStepFunc() is never called, and so it is marked with NO_TEST to +** let the test coverage routine know not to expect this function to be +** invoked. +*/ +static void noopStepFunc( /*NO_TEST*/ + sqlite3_context *p, /*NO_TEST*/ + int n, /*NO_TEST*/ + sqlite3_value **a /*NO_TEST*/ +){ /*NO_TEST*/ + UNUSED_PARAMETER(p); /*NO_TEST*/ + UNUSED_PARAMETER(n); /*NO_TEST*/ + UNUSED_PARAMETER(a); /*NO_TEST*/ + assert(0); /*NO_TEST*/ +} /*NO_TEST*/ +static void noopValueFunc(sqlite3_context *p){ UNUSED_PARAMETER(p); /*no-op*/ } + +/* Window functions that use all window interfaces: xStep, xFinal, +** xValue, and xInverse */ +#define WINDOWFUNCALL(name,nArg,extra) { \ + nArg, (SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + name ## StepFunc, name ## FinalizeFunc, name ## ValueFunc, \ + name ## InvFunc, name ## Name, {0} \ +} + +/* Window functions that are implemented using bytecode and thus have +** no-op routines for their methods */ +#define WINDOWFUNCNOOP(name,nArg,extra) { \ + nArg, (SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + noopStepFunc, noopValueFunc, noopValueFunc, \ + noopStepFunc, name ## Name, {0} \ +} + +/* Window functions that use all window interfaces: xStep, the +** same routine for xFinalize and xValue and which never call +** xInverse. */ +#define WINDOWFUNCX(name,nArg,extra) { \ + nArg, (SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + name ## StepFunc, name ## ValueFunc, name ## ValueFunc, \ + noopStepFunc, name ## Name, {0} \ +} + + +/* +** Register those built-in window functions that are not also aggregates. +*/ +SQLITE_PRIVATE void sqlite3WindowFunctions(void){ + static FuncDef aWindowFuncs[] = { + WINDOWFUNCX(row_number, 0, 0), + WINDOWFUNCX(dense_rank, 0, 0), + WINDOWFUNCX(rank, 0, 0), + WINDOWFUNCX(percent_rank, 0, SQLITE_FUNC_WINDOW_SIZE), + WINDOWFUNCX(cume_dist, 0, SQLITE_FUNC_WINDOW_SIZE), + WINDOWFUNCX(ntile, 1, SQLITE_FUNC_WINDOW_SIZE), + WINDOWFUNCALL(last_value, 1, 0), + WINDOWFUNCNOOP(nth_value, 2, 0), + WINDOWFUNCNOOP(first_value, 1, 0), + WINDOWFUNCNOOP(lead, 1, 0), + WINDOWFUNCNOOP(lead, 2, 0), + WINDOWFUNCNOOP(lead, 3, 0), + WINDOWFUNCNOOP(lag, 1, 0), + WINDOWFUNCNOOP(lag, 2, 0), + WINDOWFUNCNOOP(lag, 3, 0), + }; + sqlite3InsertBuiltinFuncs(aWindowFuncs, ArraySize(aWindowFuncs)); +} + +/* +** This function is called immediately after resolving the function name +** for a window function within a SELECT statement. Argument pList is a +** linked list of WINDOW definitions for the current SELECT statement. +** Argument pFunc is the function definition just resolved and pWin +** is the Window object representing the associated OVER clause. This +** function updates the contents of pWin as follows: +** +** * If the OVER clause refered to a named window (as in "max(x) OVER win"), +** search list pList for a matching WINDOW definition, and update pWin +** accordingly. If no such WINDOW clause can be found, leave an error +** in pParse. +** +** * If the function is a built-in window function that requires the +** window to be coerced (see "BUILT-IN WINDOW FUNCTIONS" at the top +** of this file), pWin is updated here. +*/ +SQLITE_PRIVATE void sqlite3WindowUpdate( + Parse *pParse, + Window *pList, /* List of named windows for this SELECT */ + Window *pWin, /* Window frame to update */ + FuncDef *pFunc /* Window function definition */ +){ + if( pWin->zName && pWin->eType==0 ){ + Window *p; + for(p=pList; p; p=p->pNextWin){ + if( sqlite3StrICmp(p->zName, pWin->zName)==0 ) break; + } + if( p==0 ){ + sqlite3ErrorMsg(pParse, "no such window: %s", pWin->zName); + return; + } + pWin->pPartition = sqlite3ExprListDup(pParse->db, p->pPartition, 0); + pWin->pOrderBy = sqlite3ExprListDup(pParse->db, p->pOrderBy, 0); + pWin->pStart = sqlite3ExprDup(pParse->db, p->pStart, 0); + pWin->pEnd = sqlite3ExprDup(pParse->db, p->pEnd, 0); + pWin->eStart = p->eStart; + pWin->eEnd = p->eEnd; + pWin->eType = p->eType; + } + if( pFunc->funcFlags & SQLITE_FUNC_WINDOW ){ + sqlite3 *db = pParse->db; + if( pWin->pFilter ){ + sqlite3ErrorMsg(pParse, + "FILTER clause may only be used with aggregate window functions" + ); + }else + if( pFunc->zName==row_numberName || pFunc->zName==ntileName ){ + sqlite3ExprDelete(db, pWin->pStart); + sqlite3ExprDelete(db, pWin->pEnd); + pWin->pStart = pWin->pEnd = 0; + pWin->eType = TK_ROWS; + pWin->eStart = TK_UNBOUNDED; + pWin->eEnd = TK_CURRENT; + }else + + if( pFunc->zName==dense_rankName || pFunc->zName==rankName + || pFunc->zName==percent_rankName || pFunc->zName==cume_distName + ){ + sqlite3ExprDelete(db, pWin->pStart); + sqlite3ExprDelete(db, pWin->pEnd); + pWin->pStart = pWin->pEnd = 0; + pWin->eType = TK_RANGE; + pWin->eStart = TK_UNBOUNDED; + pWin->eEnd = TK_CURRENT; + } + } + pWin->pFunc = pFunc; +} + +/* +** Context object passed through sqlite3WalkExprList() to +** selectWindowRewriteExprCb() by selectWindowRewriteEList(). +*/ +typedef struct WindowRewrite WindowRewrite; +struct WindowRewrite { + Window *pWin; + SrcList *pSrc; + ExprList *pSub; + Select *pSubSelect; /* Current sub-select, if any */ +}; + +/* +** Callback function used by selectWindowRewriteEList(). If necessary, +** this function appends to the output expression-list and updates +** expression (*ppExpr) in place. +*/ +static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ + struct WindowRewrite *p = pWalker->u.pRewrite; + Parse *pParse = pWalker->pParse; + + /* If this function is being called from within a scalar sub-select + ** that used by the SELECT statement being processed, only process + ** TK_COLUMN expressions that refer to it (the outer SELECT). Do + ** not process aggregates or window functions at all, as they belong + ** to the scalar sub-select. */ + if( p->pSubSelect ){ + if( pExpr->op!=TK_COLUMN ){ + return WRC_Continue; + }else{ + int nSrc = p->pSrc->nSrc; + int i; + for(i=0; iiTable==p->pSrc->a[i].iCursor ) break; + } + if( i==nSrc ) return WRC_Continue; + } + } + + switch( pExpr->op ){ + + case TK_FUNCTION: + if( pExpr->pWin==0 ){ + break; + }else{ + Window *pWin; + for(pWin=p->pWin; pWin; pWin=pWin->pNextWin){ + if( pExpr->pWin==pWin ){ + assert( pWin->pOwner==pExpr ); + return WRC_Prune; + } + } + } + /* Fall through. */ + + case TK_AGG_FUNCTION: + case TK_COLUMN: { + Expr *pDup = sqlite3ExprDup(pParse->db, pExpr, 0); + p->pSub = sqlite3ExprListAppend(pParse, p->pSub, pDup); + if( p->pSub ){ + assert( ExprHasProperty(pExpr, EP_Static)==0 ); + ExprSetProperty(pExpr, EP_Static); + sqlite3ExprDelete(pParse->db, pExpr); + ExprClearProperty(pExpr, EP_Static); + memset(pExpr, 0, sizeof(Expr)); + + pExpr->op = TK_COLUMN; + pExpr->iColumn = p->pSub->nExpr-1; + pExpr->iTable = p->pWin->iEphCsr; + } + + break; + } + + default: /* no-op */ + break; + } + + return WRC_Continue; +} +static int selectWindowRewriteSelectCb(Walker *pWalker, Select *pSelect){ + struct WindowRewrite *p = pWalker->u.pRewrite; + Select *pSave = p->pSubSelect; + if( pSave==pSelect ){ + return WRC_Continue; + }else{ + p->pSubSelect = pSelect; + sqlite3WalkSelect(pWalker, pSelect); + p->pSubSelect = pSave; + } + return WRC_Prune; +} + + +/* +** Iterate through each expression in expression-list pEList. For each: +** +** * TK_COLUMN, +** * aggregate function, or +** * window function with a Window object that is not a member of the +** Window list passed as the second argument (pWin). +** +** Append the node to output expression-list (*ppSub). And replace it +** with a TK_COLUMN that reads the (N-1)th element of table +** pWin->iEphCsr, where N is the number of elements in (*ppSub) after +** appending the new one. +*/ +static void selectWindowRewriteEList( + Parse *pParse, + Window *pWin, + SrcList *pSrc, + ExprList *pEList, /* Rewrite expressions in this list */ + ExprList **ppSub /* IN/OUT: Sub-select expression-list */ +){ + Walker sWalker; + WindowRewrite sRewrite; + + memset(&sWalker, 0, sizeof(Walker)); + memset(&sRewrite, 0, sizeof(WindowRewrite)); + + sRewrite.pSub = *ppSub; + sRewrite.pWin = pWin; + sRewrite.pSrc = pSrc; + + sWalker.pParse = pParse; + sWalker.xExprCallback = selectWindowRewriteExprCb; + sWalker.xSelectCallback = selectWindowRewriteSelectCb; + sWalker.u.pRewrite = &sRewrite; + + (void)sqlite3WalkExprList(&sWalker, pEList); + + *ppSub = sRewrite.pSub; +} + +/* +** Append a copy of each expression in expression-list pAppend to +** expression list pList. Return a pointer to the result list. +*/ +static ExprList *exprListAppendList( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to append. Might be NULL */ + ExprList *pAppend /* List of values to append. Might be NULL */ +){ + if( pAppend ){ + int i; + int nInit = pList ? pList->nExpr : 0; + for(i=0; inExpr; i++){ + Expr *pDup = sqlite3ExprDup(pParse->db, pAppend->a[i].pExpr, 0); + pList = sqlite3ExprListAppend(pParse, pList, pDup); + if( pList ) pList->a[nInit+i].sortOrder = pAppend->a[i].sortOrder; + } + } + return pList; +} + +/* +** If the SELECT statement passed as the second argument does not invoke +** any SQL window functions, this function is a no-op. Otherwise, it +** rewrites the SELECT statement so that window function xStep functions +** are invoked in the correct order as described under "SELECT REWRITING" +** at the top of this file. +*/ +SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){ + int rc = SQLITE_OK; + if( p->pWin ){ + Vdbe *v = sqlite3GetVdbe(pParse); + sqlite3 *db = pParse->db; + Select *pSub = 0; /* The subquery */ + SrcList *pSrc = p->pSrc; + Expr *pWhere = p->pWhere; + ExprList *pGroupBy = p->pGroupBy; + Expr *pHaving = p->pHaving; + ExprList *pSort = 0; + + ExprList *pSublist = 0; /* Expression list for sub-query */ + Window *pMWin = p->pWin; /* Master window object */ + Window *pWin; /* Window object iterator */ + + p->pSrc = 0; + p->pWhere = 0; + p->pGroupBy = 0; + p->pHaving = 0; + + /* Create the ORDER BY clause for the sub-select. This is the concatenation + ** of the window PARTITION and ORDER BY clauses. Then, if this makes it + ** redundant, remove the ORDER BY from the parent SELECT. */ + pSort = sqlite3ExprListDup(db, pMWin->pPartition, 0); + pSort = exprListAppendList(pParse, pSort, pMWin->pOrderBy); + if( pSort && p->pOrderBy ){ + if( sqlite3ExprListCompare(pSort, p->pOrderBy, -1)==0 ){ + sqlite3ExprListDelete(db, p->pOrderBy); + p->pOrderBy = 0; + } + } + + /* Assign a cursor number for the ephemeral table used to buffer rows. + ** The OpenEphemeral instruction is coded later, after it is known how + ** many columns the table will have. */ + pMWin->iEphCsr = pParse->nTab++; + + selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, &pSublist); + selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, &pSublist); + pMWin->nBufferCol = (pSublist ? pSublist->nExpr : 0); + + /* Append the PARTITION BY and ORDER BY expressions to the to the + ** sub-select expression list. They are required to figure out where + ** boundaries for partitions and sets of peer rows lie. */ + pSublist = exprListAppendList(pParse, pSublist, pMWin->pPartition); + pSublist = exprListAppendList(pParse, pSublist, pMWin->pOrderBy); + + /* Append the arguments passed to each window function to the + ** sub-select expression list. Also allocate two registers for each + ** window function - one for the accumulator, another for interim + ** results. */ + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + pWin->iArgCol = (pSublist ? pSublist->nExpr : 0); + pSublist = exprListAppendList(pParse, pSublist, pWin->pOwner->x.pList); + if( pWin->pFilter ){ + Expr *pFilter = sqlite3ExprDup(db, pWin->pFilter, 0); + pSublist = sqlite3ExprListAppend(pParse, pSublist, pFilter); + } + pWin->regAccum = ++pParse->nMem; + pWin->regResult = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + } + + /* If there is no ORDER BY or PARTITION BY clause, and the window + ** function accepts zero arguments, and there are no other columns + ** selected (e.g. "SELECT row_number() OVER () FROM t1"), it is possible + ** that pSublist is still NULL here. Add a constant expression here to + ** keep everything legal in this case. + */ + if( pSublist==0 ){ + pSublist = sqlite3ExprListAppend(pParse, 0, + sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[0], 0) + ); + } + + pSub = sqlite3SelectNew( + pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0 + ); + p->pSrc = sqlite3SrcListAppend(db, 0, 0, 0); + assert( p->pSrc || db->mallocFailed ); + if( p->pSrc ){ + p->pSrc->a[0].pSelect = pSub; + sqlite3SrcListAssignCursors(pParse, p->pSrc); + if( sqlite3ExpandSubquery(pParse, &p->pSrc->a[0]) ){ + rc = SQLITE_NOMEM; + }else{ + pSub->selFlags |= SF_Expanded; + p->selFlags &= ~SF_Aggregate; + sqlite3SelectPrep(pParse, pSub, 0); + } + + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pMWin->iEphCsr, pSublist->nExpr); + }else{ + sqlite3SelectDelete(db, pSub); + } + if( db->mallocFailed ) rc = SQLITE_NOMEM; + } + + return rc; +} + +/* +** Free the Window object passed as the second argument. +*/ +SQLITE_PRIVATE void sqlite3WindowDelete(sqlite3 *db, Window *p){ + if( p ){ + sqlite3ExprDelete(db, p->pFilter); + sqlite3ExprListDelete(db, p->pPartition); + sqlite3ExprListDelete(db, p->pOrderBy); + sqlite3ExprDelete(db, p->pEnd); + sqlite3ExprDelete(db, p->pStart); + sqlite3DbFree(db, p->zName); + sqlite3DbFree(db, p); + } +} + +/* +** Free the linked list of Window objects starting at the second argument. +*/ +SQLITE_PRIVATE void sqlite3WindowListDelete(sqlite3 *db, Window *p){ + while( p ){ + Window *pNext = p->pNextWin; + sqlite3WindowDelete(db, p); + p = pNext; + } +} + +/* +** The argument expression is an PRECEDING or FOLLOWING offset. The +** value should be a non-negative integer. If the value is not a +** constant, change it to NULL. The fact that it is then a non-negative +** integer will be caught later. But it is important not to leave +** variable values in the expression tree. +*/ +static Expr *sqlite3WindowOffsetExpr(Parse *pParse, Expr *pExpr){ + if( 0==sqlite3ExprIsConstant(pExpr) ){ + sqlite3ExprDelete(pParse->db, pExpr); + pExpr = sqlite3ExprAlloc(pParse->db, TK_NULL, 0, 0); + } + return pExpr; +} + +/* +** Allocate and return a new Window object describing a Window Definition. +*/ +SQLITE_PRIVATE Window *sqlite3WindowAlloc( + Parse *pParse, /* Parsing context */ + int eType, /* Frame type. TK_RANGE or TK_ROWS */ + int eStart, /* Start type: CURRENT, PRECEDING, FOLLOWING, UNBOUNDED */ + Expr *pStart, /* Start window size if TK_PRECEDING or FOLLOWING */ + int eEnd, /* End type: CURRENT, FOLLOWING, TK_UNBOUNDED, PRECEDING */ + Expr *pEnd /* End window size if TK_FOLLOWING or PRECEDING */ +){ + Window *pWin = 0; + + /* Parser assures the following: */ + assert( eType==TK_RANGE || eType==TK_ROWS ); + assert( eStart==TK_CURRENT || eStart==TK_PRECEDING + || eStart==TK_UNBOUNDED || eStart==TK_FOLLOWING ); + assert( eEnd==TK_CURRENT || eEnd==TK_FOLLOWING + || eEnd==TK_UNBOUNDED || eEnd==TK_PRECEDING ); + assert( (eStart==TK_PRECEDING || eStart==TK_FOLLOWING)==(pStart!=0) ); + assert( (eEnd==TK_FOLLOWING || eEnd==TK_PRECEDING)==(pEnd!=0) ); + + + /* If a frame is declared "RANGE" (not "ROWS"), then it may not use + ** either " PRECEDING" or " FOLLOWING". + */ + if( eType==TK_RANGE && (pStart!=0 || pEnd!=0) ){ + sqlite3ErrorMsg(pParse, "RANGE must use only UNBOUNDED or CURRENT ROW"); + goto windowAllocErr; + } + + /* Additionally, the + ** starting boundary type may not occur earlier in the following list than + ** the ending boundary type: + ** + ** UNBOUNDED PRECEDING + ** PRECEDING + ** CURRENT ROW + ** FOLLOWING + ** UNBOUNDED FOLLOWING + ** + ** The parser ensures that "UNBOUNDED PRECEDING" cannot be used as an ending + ** boundary, and than "UNBOUNDED FOLLOWING" cannot be used as a starting + ** frame boundary. + */ + if( (eStart==TK_CURRENT && eEnd==TK_PRECEDING) + || (eStart==TK_FOLLOWING && (eEnd==TK_PRECEDING || eEnd==TK_CURRENT)) + ){ + sqlite3ErrorMsg(pParse, "unsupported frame delimiter for ROWS"); + goto windowAllocErr; + } + + pWin = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( pWin==0 ) goto windowAllocErr; + pWin->eType = eType; + pWin->eStart = eStart; + pWin->eEnd = eEnd; + pWin->pEnd = sqlite3WindowOffsetExpr(pParse, pEnd); + pWin->pStart = sqlite3WindowOffsetExpr(pParse, pStart); + return pWin; + +windowAllocErr: + sqlite3ExprDelete(pParse->db, pEnd); + sqlite3ExprDelete(pParse->db, pStart); + return 0; +} + +/* +** Attach window object pWin to expression p. +*/ +SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){ + if( p ){ + /* This routine is only called for the parser. If pWin was not + ** allocated due to an OOM, then the parser would fail before ever + ** invoking this routine */ + if( ALWAYS(pWin) ){ + p->pWin = pWin; + pWin->pOwner = p; + if( p->flags & EP_Distinct ){ + sqlite3ErrorMsg(pParse, + "DISTINCT is not supported for window functions"); + } + } + }else{ + sqlite3WindowDelete(pParse->db, pWin); + } +} + +/* +** Return 0 if the two window objects are identical, or non-zero otherwise. +** Identical window objects can be processed in a single scan. +*/ +SQLITE_PRIVATE int sqlite3WindowCompare(Parse *pParse, Window *p1, Window *p2){ + if( p1->eType!=p2->eType ) return 1; + if( p1->eStart!=p2->eStart ) return 1; + if( p1->eEnd!=p2->eEnd ) return 1; + if( sqlite3ExprCompare(pParse, p1->pStart, p2->pStart, -1) ) return 1; + if( sqlite3ExprCompare(pParse, p1->pEnd, p2->pEnd, -1) ) return 1; + if( sqlite3ExprListCompare(p1->pPartition, p2->pPartition, -1) ) return 1; + if( sqlite3ExprListCompare(p1->pOrderBy, p2->pOrderBy, -1) ) return 1; + return 0; +} + + +/* +** This is called by code in select.c before it calls sqlite3WhereBegin() +** to begin iterating through the sub-query results. It is used to allocate +** and initialize registers and cursors used by sqlite3WindowCodeStep(). +*/ +SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse *pParse, Window *pMWin){ + Window *pWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int nPart = (pMWin->pPartition ? pMWin->pPartition->nExpr : 0); + nPart += (pMWin->pOrderBy ? pMWin->pOrderBy->nExpr : 0); + if( nPart ){ + pMWin->regPart = pParse->nMem+1; + pParse->nMem += nPart; + sqlite3VdbeAddOp3(v, OP_Null, 0, pMWin->regPart, pMWin->regPart+nPart-1); + } + + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *p = pWin->pFunc; + if( (p->funcFlags & SQLITE_FUNC_MINMAX) && pWin->eStart!=TK_UNBOUNDED ){ + /* The inline versions of min() and max() require a single ephemeral + ** table and 3 registers. The registers are used as follows: + ** + ** regApp+0: slot to copy min()/max() argument to for MakeRecord + ** regApp+1: integer value used to ensure keys are unique + ** regApp+2: output of MakeRecord + */ + ExprList *pList = pWin->pOwner->x.pList; + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pList, 0, 0); + pWin->csrApp = pParse->nTab++; + pWin->regApp = pParse->nMem+1; + pParse->nMem += 3; + if( pKeyInfo && pWin->pFunc->zName[1]=='i' ){ + assert( pKeyInfo->aSortOrder[0]==0 ); + pKeyInfo->aSortOrder[0] = 1; + } + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pWin->csrApp, 2); + sqlite3VdbeAppendP4(v, pKeyInfo, P4_KEYINFO); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + else if( p->zName==nth_valueName || p->zName==first_valueName ){ + /* Allocate two registers at pWin->regApp. These will be used to + ** store the start and end index of the current frame. */ + assert( pMWin->iEphCsr ); + pWin->regApp = pParse->nMem+1; + pWin->csrApp = pParse->nTab++; + pParse->nMem += 2; + sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr); + } + else if( p->zName==leadName || p->zName==lagName ){ + assert( pMWin->iEphCsr ); + pWin->csrApp = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr); + } + } +} + +/* +** A "PRECEDING " (eCond==0) or "FOLLOWING " (eCond==1) or the +** value of the second argument to nth_value() (eCond==2) has just been +** evaluated and the result left in register reg. This function generates VM +** code to check that the value is a non-negative integer and throws an +** exception if it is not. +*/ +static void windowCheckIntValue(Parse *pParse, int reg, int eCond){ + static const char *azErr[] = { + "frame starting offset must be a non-negative integer", + "frame ending offset must be a non-negative integer", + "second argument to nth_value must be a positive integer" + }; + static int aOp[] = { OP_Ge, OP_Ge, OP_Gt }; + Vdbe *v = sqlite3GetVdbe(pParse); + int regZero = sqlite3GetTempReg(pParse); + assert( eCond==0 || eCond==1 || eCond==2 ); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regZero); + sqlite3VdbeAddOp2(v, OP_MustBeInt, reg, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverageIf(v, eCond==0); + VdbeCoverageIf(v, eCond==1); + VdbeCoverageIf(v, eCond==2); + sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg); + VdbeCoverageNeverNullIf(v, eCond==0); + VdbeCoverageNeverNullIf(v, eCond==1); + VdbeCoverageNeverNullIf(v, eCond==2); + sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_ERROR, OE_Abort); + sqlite3VdbeAppendP4(v, (void*)azErr[eCond], P4_STATIC); + sqlite3ReleaseTempReg(pParse, regZero); +} + +/* +** Return the number of arguments passed to the window-function associated +** with the object passed as the only argument to this function. +*/ +static int windowArgCount(Window *pWin){ + ExprList *pList = pWin->pOwner->x.pList; + return (pList ? pList->nExpr : 0); +} + +/* +** Generate VM code to invoke either xStep() (if bInverse is 0) or +** xInverse (if bInverse is non-zero) for each window function in the +** linked list starting at pMWin. Or, for built-in window functions +** that do not use the standard function API, generate the required +** inline VM code. +** +** If argument csr is greater than or equal to 0, then argument reg is +** the first register in an array of registers guaranteed to be large +** enough to hold the array of arguments for each function. In this case +** the arguments are extracted from the current row of csr into the +** array of registers before invoking OP_AggStep or OP_AggInverse +** +** Or, if csr is less than zero, then the array of registers at reg is +** already populated with all columns from the current row of the sub-query. +** +** If argument regPartSize is non-zero, then it is a register containing the +** number of rows in the current partition. +*/ +static void windowAggStep( + Parse *pParse, + Window *pMWin, /* Linked list of window functions */ + int csr, /* Read arguments from this cursor */ + int bInverse, /* True to invoke xInverse instead of xStep */ + int reg, /* Array of registers */ + int regPartSize /* Register containing size of partition */ +){ + Vdbe *v = sqlite3GetVdbe(pParse); + Window *pWin; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + int flags = pWin->pFunc->funcFlags; + int regArg; + int nArg = windowArgCount(pWin); + + if( csr>=0 ){ + int i; + for(i=0; iiArgCol+i, reg+i); + } + regArg = reg; + if( flags & SQLITE_FUNC_WINDOW_SIZE ){ + if( nArg==0 ){ + regArg = regPartSize; + }else{ + sqlite3VdbeAddOp2(v, OP_SCopy, regPartSize, reg+nArg); + } + nArg++; + } + }else{ + assert( !(flags & SQLITE_FUNC_WINDOW_SIZE) ); + regArg = reg + pWin->iArgCol; + } + + if( (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX) + && pWin->eStart!=TK_UNBOUNDED + ){ + int addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, regArg); + VdbeCoverage(v); + if( bInverse==0 ){ + sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1, 1); + sqlite3VdbeAddOp2(v, OP_SCopy, regArg, pWin->regApp); + sqlite3VdbeAddOp3(v, OP_MakeRecord, pWin->regApp, 2, pWin->regApp+2); + sqlite3VdbeAddOp2(v, OP_IdxInsert, pWin->csrApp, pWin->regApp+2); + }else{ + sqlite3VdbeAddOp4Int(v, OP_SeekGE, pWin->csrApp, 0, regArg, 1); + VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp1(v, OP_Delete, pWin->csrApp); + sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); + } + sqlite3VdbeJumpHere(v, addrIsNull); + }else if( pWin->regApp ){ + assert( pWin->pFunc->zName==nth_valueName + || pWin->pFunc->zName==first_valueName + ); + assert( bInverse==0 || bInverse==1 ); + sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1-bInverse, 1); + }else if( pWin->pFunc->zName==leadName + || pWin->pFunc->zName==lagName + ){ + /* no-op */ + }else{ + int addrIf = 0; + if( pWin->pFilter ){ + int regTmp; + assert( nArg==0 || nArg==pWin->pOwner->x.pList->nExpr ); + assert( nArg || pWin->pOwner->x.pList==0 ); + if( csr>0 ){ + regTmp = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp); + }else{ + regTmp = regArg + nArg; + } + addrIf = sqlite3VdbeAddOp3(v, OP_IfNot, regTmp, 0, 1); + VdbeCoverage(v); + if( csr>0 ){ + sqlite3ReleaseTempReg(pParse, regTmp); + } + } + if( pWin->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ + CollSeq *pColl; + assert( nArg>0 ); + pColl = sqlite3ExprNNCollSeq(pParse, pWin->pOwner->x.pList->a[0].pExpr); + sqlite3VdbeAddOp4(v, OP_CollSeq, 0,0,0, (const char*)pColl, P4_COLLSEQ); + } + sqlite3VdbeAddOp3(v, bInverse? OP_AggInverse : OP_AggStep, + bInverse, regArg, pWin->regAccum); + sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u8)nArg); + if( addrIf ) sqlite3VdbeJumpHere(v, addrIf); + } + } +} + +/* +** Generate VM code to invoke either xValue() (bFinal==0) or xFinalize() +** (bFinal==1) for each window function in the linked list starting at +** pMWin. Or, for built-in window-functions that do not use the standard +** API, generate the equivalent VM code. +*/ +static void windowAggFinal(Parse *pParse, Window *pMWin, int bFinal){ + Vdbe *v = sqlite3GetVdbe(pParse); + Window *pWin; + + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + if( (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX) + && pWin->eStart!=TK_UNBOUNDED + ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + sqlite3VdbeAddOp1(v, OP_Last, pWin->csrApp); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Column, pWin->csrApp, 0, pWin->regResult); + sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); + if( bFinal ){ + sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp); + } + }else if( pWin->regApp ){ + }else{ + if( bFinal ){ + sqlite3VdbeAddOp2(v, OP_AggFinal, pWin->regAccum, windowArgCount(pWin)); + sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF); + sqlite3VdbeAddOp2(v, OP_Copy, pWin->regAccum, pWin->regResult); + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + }else{ + sqlite3VdbeAddOp3(v, OP_AggValue, pWin->regAccum, windowArgCount(pWin), + pWin->regResult); + sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF); + } + } + } +} + +/* +** This function generates VM code to invoke the sub-routine at address +** lblFlushPart once for each partition with the entire partition cached in +** the Window.iEphCsr temp table. +*/ +static void windowPartitionCache( + Parse *pParse, + Select *p, /* The rewritten SELECT statement */ + WhereInfo *pWInfo, /* WhereInfo to call WhereEnd() on */ + int regFlushPart, /* Register to use with Gosub lblFlushPart */ + int lblFlushPart, /* Subroutine to Gosub to */ + int *pRegSize /* OUT: Register containing partition size */ +){ + Window *pMWin = p->pWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int iSubCsr = p->pSrc->a[0].iCursor; + int nSub = p->pSrc->a[0].pTab->nCol; + int k; + + int reg = pParse->nMem+1; + int regRecord = reg+nSub; + int regRowid = regRecord+1; + + *pRegSize = regRowid; + pParse->nMem += nSub + 2; + + /* Load the column values for the row returned by the sub-select + ** into an array of registers starting at reg. */ + for(k=0; kpPartition ){ + int addr; + ExprList *pPart = pMWin->pPartition; + int nPart = pPart->nExpr; + int regNewPart = reg + pMWin->nBufferCol; + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pPart, 0, 0); + + addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPart, pMWin->regPart,nPart); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + sqlite3VdbeAddOp3(v, OP_Jump, addr+2, addr+4, addr+2); + VdbeCoverageEqNe(v); + sqlite3VdbeAddOp3(v, OP_Copy, regNewPart, pMWin->regPart, nPart-1); + sqlite3VdbeAddOp2(v, OP_Gosub, regFlushPart, lblFlushPart); + VdbeComment((v, "call flush_partition")); + } + + /* Buffer the current row in the ephemeral table. */ + sqlite3VdbeAddOp2(v, OP_NewRowid, pMWin->iEphCsr, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, pMWin->iEphCsr, regRecord, regRowid); + + /* End of the input loop */ + sqlite3WhereEnd(pWInfo); + + /* Invoke "flush_partition" to deal with the final (or only) partition */ + sqlite3VdbeAddOp2(v, OP_Gosub, regFlushPart, lblFlushPart); + VdbeComment((v, "call flush_partition")); +} + +/* +** Invoke the sub-routine at regGosub (generated by code in select.c) to +** return the current row of Window.iEphCsr. If all window functions are +** aggregate window functions that use the standard API, a single +** OP_Gosub instruction is all that this routine generates. Extra VM code +** for per-row processing is only generated for the following built-in window +** functions: +** +** nth_value() +** first_value() +** lag() +** lead() +*/ +static void windowReturnOneRow( + Parse *pParse, + Window *pMWin, + int regGosub, + int addrGosub +){ + Vdbe *v = sqlite3GetVdbe(pParse); + Window *pWin; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pFunc; + if( pFunc->zName==nth_valueName + || pFunc->zName==first_valueName + ){ + int csr = pWin->csrApp; + int lbl = sqlite3VdbeMakeLabel(v); + int tmpReg = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + + if( pFunc->zName==nth_valueName ){ + sqlite3VdbeAddOp3(v, OP_Column, pMWin->iEphCsr, pWin->iArgCol+1,tmpReg); + windowCheckIntValue(pParse, tmpReg, 2); + }else{ + sqlite3VdbeAddOp2(v, OP_Integer, 1, tmpReg); + } + sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg); + sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg); + VdbeCoverageNeverNull(v); + sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, 0, tmpReg); + VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult); + sqlite3VdbeResolveLabel(v, lbl); + sqlite3ReleaseTempReg(pParse, tmpReg); + } + else if( pFunc->zName==leadName || pFunc->zName==lagName ){ + int nArg = pWin->pOwner->x.pList->nExpr; + int iEph = pMWin->iEphCsr; + int csr = pWin->csrApp; + int lbl = sqlite3VdbeMakeLabel(v); + int tmpReg = sqlite3GetTempReg(pParse); + + if( nArg<3 ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + }else{ + sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+2, pWin->regResult); + } + sqlite3VdbeAddOp2(v, OP_Rowid, iEph, tmpReg); + if( nArg<2 ){ + int val = (pFunc->zName==leadName ? 1 : -1); + sqlite3VdbeAddOp2(v, OP_AddImm, tmpReg, val); + }else{ + int op = (pFunc->zName==leadName ? OP_Add : OP_Subtract); + int tmpReg2 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+1, tmpReg2); + sqlite3VdbeAddOp3(v, op, tmpReg2, tmpReg, tmpReg); + sqlite3ReleaseTempReg(pParse, tmpReg2); + } + + sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, lbl, tmpReg); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult); + sqlite3VdbeResolveLabel(v, lbl); + sqlite3ReleaseTempReg(pParse, tmpReg); + } + } + sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub); +} + +/* +** Invoke the code generated by windowReturnOneRow() and, optionally, the +** xInverse() function for each window function, for one or more rows +** from the Window.iEphCsr temp table. This routine generates VM code +** similar to: +** +** while( regCtr>0 ){ +** regCtr--; +** windowReturnOneRow() +** if( bInverse ){ +** AggInverse +** } +** Next (Window.iEphCsr) +** } +*/ +static void windowReturnRows( + Parse *pParse, + Window *pMWin, /* List of window functions */ + int regCtr, /* Register containing number of rows */ + int regGosub, /* Register for Gosub addrGosub */ + int addrGosub, /* Address of sub-routine for ReturnOneRow */ + int regInvArg, /* Array of registers for xInverse args */ + int regInvSize /* Register containing size of partition */ +){ + int addr; + Vdbe *v = sqlite3GetVdbe(pParse); + windowAggFinal(pParse, pMWin, 0); + addr = sqlite3VdbeAddOp3(v, OP_IfPos, regCtr, sqlite3VdbeCurrentAddr(v)+2 ,1); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); + windowReturnOneRow(pParse, pMWin, regGosub, addrGosub); + if( regInvArg ){ + windowAggStep(pParse, pMWin, pMWin->iEphCsr, 1, regInvArg, regInvSize); + } + sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, addr); + VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addr+1); /* The OP_Goto */ +} + +/* +** Generate code to set the accumulator register for each window function +** in the linked list passed as the second argument to NULL. And perform +** any equivalent initialization required by any built-in window functions +** in the list. +*/ +static int windowInitAccum(Parse *pParse, Window *pMWin){ + Vdbe *v = sqlite3GetVdbe(pParse); + int regArg; + int nArg = 0; + Window *pWin; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pFunc; + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + nArg = MAX(nArg, windowArgCount(pWin)); + if( pFunc->zName==nth_valueName + || pFunc->zName==first_valueName + ){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + + if( (pFunc->funcFlags & SQLITE_FUNC_MINMAX) && pWin->csrApp ){ + assert( pWin->eStart!=TK_UNBOUNDED ); + sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + } + regArg = pParse->nMem+1; + pParse->nMem += nArg; + return regArg; +} + + +/* +** This function does the work of sqlite3WindowCodeStep() for all "ROWS" +** window frame types except for "BETWEEN UNBOUNDED PRECEDING AND CURRENT +** ROW". Pseudo-code for each follows. +** +** ROWS BETWEEN PRECEDING AND FOLLOWING +** +** ... +** if( new partition ){ +** Gosub flush_partition +** } +** Insert (record in eph-table) +** sqlite3WhereEnd() +** Gosub flush_partition +** +** flush_partition: +** Once { +** OpenDup (iEphCsr -> csrStart) +** OpenDup (iEphCsr -> csrEnd) +** } +** regStart = // PRECEDING expression +** regEnd = // FOLLOWING expression +** if( regStart<0 || regEnd<0 ){ error! } +** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done +** Next(csrEnd) // if EOF skip Aggstep +** Aggstep (csrEnd) +** if( (regEnd--)<=0 ){ +** AggFinal (xValue) +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** if( (regStart--)<=0 ){ +** AggInverse (csrStart) +** Next(csrStart) +** } +** } +** flush_partition_done: +** ResetSorter (csr) +** Return +** +** ROWS BETWEEN PRECEDING AND CURRENT ROW +** ROWS BETWEEN CURRENT ROW AND FOLLOWING +** ROWS BETWEEN UNBOUNDED PRECEDING AND FOLLOWING +** +** These are similar to the above. For "CURRENT ROW", intialize the +** register to 0. For "UNBOUNDED PRECEDING" to infinity. +** +** ROWS BETWEEN PRECEDING AND UNBOUNDED FOLLOWING +** ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING +** +** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done +** while( 1 ){ +** Next(csrEnd) // Exit while(1) at EOF +** Aggstep (csrEnd) +** } +** while( 1 ){ +** AggFinal (xValue) +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** if( (regStart--)<=0 ){ +** AggInverse (csrStart) +** Next(csrStart) +** } +** } +** +** For the "CURRENT ROW AND UNBOUNDED FOLLOWING" case, the final if() +** condition is always true (as if regStart were initialized to 0). +** +** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING +** +** This is the only RANGE case handled by this routine. It modifies the +** second while( 1 ) loop in "ROWS BETWEEN CURRENT ... UNBOUNDED..." to +** be: +** +** while( 1 ){ +** AggFinal (xValue) +** while( 1 ){ +** regPeer++ +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** if( new peer ) break; +** } +** while( (regPeer--)>0 ){ +** AggInverse (csrStart) +** Next(csrStart) +** } +** } +** +** ROWS BETWEEN FOLLOWING AND FOLLOWING +** +** regEnd = regEnd - regStart +** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done +** Aggstep (csrEnd) +** Next(csrEnd) // if EOF fall-through +** if( (regEnd--)<=0 ){ +** if( (regStart--)<=0 ){ +** AggFinal (xValue) +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** } +** AggInverse (csrStart) +** Next (csrStart) +** } +** +** ROWS BETWEEN PRECEDING AND PRECEDING +** +** Replace the bit after "Rewind" in the above with: +** +** if( (regEnd--)<=0 ){ +** AggStep (csrEnd) +** Next (csrEnd) +** } +** AggFinal (xValue) +** Gosub addrGosub +** Next(csr) // if EOF goto flush_partition_done +** if( (regStart--)<=0 ){ +** AggInverse (csr2) +** Next (csr2) +** } +** +*/ +static void windowCodeRowExprStep( + Parse *pParse, + Select *p, + WhereInfo *pWInfo, + int regGosub, + int addrGosub +){ + Window *pMWin = p->pWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int regFlushPart; /* Register for "Gosub flush_partition" */ + int lblFlushPart; /* Label for "Gosub flush_partition" */ + int lblFlushDone; /* Label for "Gosub flush_partition_done" */ + + int regArg; + int addr; + int csrStart = pParse->nTab++; + int csrEnd = pParse->nTab++; + int regStart; /* Value of PRECEDING */ + int regEnd; /* Value of FOLLOWING */ + int addrGoto; + int addrTop; + int addrIfPos1 = 0; + int addrIfPos2 = 0; + int regSize = 0; + + assert( pMWin->eStart==TK_PRECEDING + || pMWin->eStart==TK_CURRENT + || pMWin->eStart==TK_FOLLOWING + || pMWin->eStart==TK_UNBOUNDED + ); + assert( pMWin->eEnd==TK_FOLLOWING + || pMWin->eEnd==TK_CURRENT + || pMWin->eEnd==TK_UNBOUNDED + || pMWin->eEnd==TK_PRECEDING + ); + + /* Allocate register and label for the "flush_partition" sub-routine. */ + regFlushPart = ++pParse->nMem; + lblFlushPart = sqlite3VdbeMakeLabel(v); + lblFlushDone = sqlite3VdbeMakeLabel(v); + + regStart = ++pParse->nMem; + regEnd = ++pParse->nMem; + + windowPartitionCache(pParse, p, pWInfo, regFlushPart, lblFlushPart, ®Size); + + addrGoto = sqlite3VdbeAddOp0(v, OP_Goto); + + /* Start of "flush_partition" */ + sqlite3VdbeResolveLabel(v, lblFlushPart); + sqlite3VdbeAddOp2(v, OP_Once, 0, sqlite3VdbeCurrentAddr(v)+3); + VdbeCoverage(v); + VdbeComment((v, "Flush_partition subroutine")); + sqlite3VdbeAddOp2(v, OP_OpenDup, csrStart, pMWin->iEphCsr); + sqlite3VdbeAddOp2(v, OP_OpenDup, csrEnd, pMWin->iEphCsr); + + /* If either regStart or regEnd are not non-negative integers, throw + ** an exception. */ + if( pMWin->pStart ){ + sqlite3ExprCode(pParse, pMWin->pStart, regStart); + windowCheckIntValue(pParse, regStart, 0); + } + if( pMWin->pEnd ){ + sqlite3ExprCode(pParse, pMWin->pEnd, regEnd); + windowCheckIntValue(pParse, regEnd, 1); + } + + /* If this is "ROWS FOLLOWING AND ROWS FOLLOWING", do: + ** + ** if( regEndpEnd && pMWin->eStart==TK_FOLLOWING ){ + assert( pMWin->pStart!=0 ); + assert( pMWin->eEnd==TK_FOLLOWING ); + sqlite3VdbeAddOp3(v, OP_Ge, regStart, sqlite3VdbeCurrentAddr(v)+2, regEnd); + VdbeCoverageNeverNull(v); + sqlite3VdbeAddOp2(v, OP_Copy, regSize, regStart); + sqlite3VdbeAddOp3(v, OP_Subtract, regStart, regEnd, regEnd); + } + + if( pMWin->pStart && pMWin->eEnd==TK_PRECEDING ){ + assert( pMWin->pEnd!=0 ); + assert( pMWin->eStart==TK_PRECEDING ); + sqlite3VdbeAddOp3(v, OP_Le, regStart, sqlite3VdbeCurrentAddr(v)+3, regEnd); + VdbeCoverageNeverNull(v); + sqlite3VdbeAddOp2(v, OP_Copy, regSize, regStart); + sqlite3VdbeAddOp2(v, OP_Copy, regSize, regEnd); + } + + /* Initialize the accumulator register for each window function to NULL */ + regArg = windowInitAccum(pParse, pMWin); + + sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr, lblFlushDone); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Rewind, csrStart, lblFlushDone); + VdbeCoverageNeverTaken(v); + sqlite3VdbeChangeP5(v, 1); + sqlite3VdbeAddOp2(v, OP_Rewind, csrEnd, lblFlushDone); + VdbeCoverageNeverTaken(v); + sqlite3VdbeChangeP5(v, 1); + + /* Invoke AggStep function for each window function using the row that + ** csrEnd currently points to. Or, if csrEnd is already at EOF, + ** do nothing. */ + addrTop = sqlite3VdbeCurrentAddr(v); + if( pMWin->eEnd==TK_PRECEDING ){ + addrIfPos1 = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0 , 1); + VdbeCoverage(v); + } + sqlite3VdbeAddOp2(v, OP_Next, csrEnd, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + addr = sqlite3VdbeAddOp0(v, OP_Goto); + windowAggStep(pParse, pMWin, csrEnd, 0, regArg, regSize); + if( pMWin->eEnd==TK_UNBOUNDED ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop); + sqlite3VdbeJumpHere(v, addr); + addrTop = sqlite3VdbeCurrentAddr(v); + }else{ + sqlite3VdbeJumpHere(v, addr); + if( pMWin->eEnd==TK_PRECEDING ){ + sqlite3VdbeJumpHere(v, addrIfPos1); + } + } + + if( pMWin->eEnd==TK_FOLLOWING ){ + addrIfPos1 = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0 , 1); + VdbeCoverage(v); + } + if( pMWin->eStart==TK_FOLLOWING ){ + addrIfPos2 = sqlite3VdbeAddOp3(v, OP_IfPos, regStart, 0 , 1); + VdbeCoverage(v); + } + windowAggFinal(pParse, pMWin, 0); + windowReturnOneRow(pParse, pMWin, regGosub, addrGosub); + sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Goto, 0, lblFlushDone); + if( pMWin->eStart==TK_FOLLOWING ){ + sqlite3VdbeJumpHere(v, addrIfPos2); + } + + if( pMWin->eStart==TK_CURRENT + || pMWin->eStart==TK_PRECEDING + || pMWin->eStart==TK_FOLLOWING + ){ + int lblSkipInverse = sqlite3VdbeMakeLabel(v);; + if( pMWin->eStart==TK_PRECEDING ){ + sqlite3VdbeAddOp3(v, OP_IfPos, regStart, lblSkipInverse, 1); + VdbeCoverage(v); + } + if( pMWin->eStart==TK_FOLLOWING ){ + sqlite3VdbeAddOp2(v, OP_Next, csrStart, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Goto, 0, lblSkipInverse); + }else{ + sqlite3VdbeAddOp2(v, OP_Next, csrStart, sqlite3VdbeCurrentAddr(v)+1); + VdbeCoverageAlwaysTaken(v); + } + windowAggStep(pParse, pMWin, csrStart, 1, regArg, regSize); + sqlite3VdbeResolveLabel(v, lblSkipInverse); + } + if( pMWin->eEnd==TK_FOLLOWING ){ + sqlite3VdbeJumpHere(v, addrIfPos1); + } + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop); + + /* flush_partition_done: */ + sqlite3VdbeResolveLabel(v, lblFlushDone); + sqlite3VdbeAddOp1(v, OP_ResetSorter, pMWin->iEphCsr); + sqlite3VdbeAddOp1(v, OP_Return, regFlushPart); + VdbeComment((v, "end flush_partition subroutine")); + + /* Jump to here to skip over flush_partition */ + sqlite3VdbeJumpHere(v, addrGoto); +} + +/* +** This function does the work of sqlite3WindowCodeStep() for cases that +** would normally be handled by windowCodeDefaultStep() when there are +** one or more built-in window-functions that require the entire partition +** to be cached in a temp table before any rows can be returned. Additionally. +** "RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING" is always handled by +** this function. +** +** Pseudo-code corresponding to the VM code generated by this function +** for each type of window follows. +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** flush_partition: +** Once { +** OpenDup (iEphCsr -> csrLead) +** } +** Integer ctr 0 +** foreach row (csrLead){ +** if( new peer ){ +** AggFinal (xValue) +** for(i=0; i csrLead) +** } +** foreach row (csrLead) { +** AggStep (csrLead) +** } +** foreach row (iEphCsr) { +** Gosub addrGosub +** } +** +** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING +** +** flush_partition: +** Once { +** OpenDup (iEphCsr -> csrLead) +** } +** foreach row (csrLead){ +** AggStep (csrLead) +** } +** Rewind (csrLead) +** Integer ctr 0 +** foreach row (csrLead){ +** if( new peer ){ +** AggFinal (xValue) +** for(i=0; ipWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int k; + int addr; + ExprList *pPart = pMWin->pPartition; + ExprList *pOrderBy = pMWin->pOrderBy; + int nPeer = pOrderBy ? pOrderBy->nExpr : 0; + int regNewPeer; + + int addrGoto; /* Address of Goto used to jump flush_par.. */ + int addrNext; /* Jump here for next iteration of loop */ + int regFlushPart; + int lblFlushPart; + int csrLead; + int regCtr; + int regArg; /* Register array to martial function args */ + int regSize; + int lblEmpty; + int bReverse = pMWin->pOrderBy && pMWin->eStart==TK_CURRENT + && pMWin->eEnd==TK_UNBOUNDED; + + assert( (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT) + || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_UNBOUNDED) + || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_CURRENT) + || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED) + ); + + lblEmpty = sqlite3VdbeMakeLabel(v); + regNewPeer = pParse->nMem+1; + pParse->nMem += nPeer; + + /* Allocate register and label for the "flush_partition" sub-routine. */ + regFlushPart = ++pParse->nMem; + lblFlushPart = sqlite3VdbeMakeLabel(v); + + csrLead = pParse->nTab++; + regCtr = ++pParse->nMem; + + windowPartitionCache(pParse, p, pWInfo, regFlushPart, lblFlushPart, ®Size); + addrGoto = sqlite3VdbeAddOp0(v, OP_Goto); + + /* Start of "flush_partition" */ + sqlite3VdbeResolveLabel(v, lblFlushPart); + sqlite3VdbeAddOp2(v, OP_Once, 0, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_OpenDup, csrLead, pMWin->iEphCsr); + + /* Initialize the accumulator register for each window function to NULL */ + regArg = windowInitAccum(pParse, pMWin); + + sqlite3VdbeAddOp2(v, OP_Integer, 0, regCtr); + sqlite3VdbeAddOp2(v, OP_Rewind, csrLead, lblEmpty); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr, lblEmpty); + VdbeCoverageNeverTaken(v); + + if( bReverse ){ + int addr2 = sqlite3VdbeCurrentAddr(v); + windowAggStep(pParse, pMWin, csrLead, 0, regArg, regSize); + sqlite3VdbeAddOp2(v, OP_Next, csrLead, addr2); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Rewind, csrLead, lblEmpty); + VdbeCoverageNeverTaken(v); + } + addrNext = sqlite3VdbeCurrentAddr(v); + + if( pOrderBy && (pMWin->eEnd==TK_CURRENT || pMWin->eStart==TK_CURRENT) ){ + int bCurrent = (pMWin->eStart==TK_CURRENT); + int addrJump = 0; /* Address of OP_Jump below */ + if( pMWin->eType==TK_RANGE ){ + int iOff = pMWin->nBufferCol + (pPart ? pPart->nExpr : 0); + int regPeer = pMWin->regPart + (pPart ? pPart->nExpr : 0); + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOrderBy, 0, 0); + for(k=0; kiEphCsr); + sqlite3VdbeAddOp1(v, OP_Return, regFlushPart); + + /* Jump to here to skip over flush_partition */ + sqlite3VdbeJumpHere(v, addrGoto); +} + + +/* +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** ... +** if( new partition ){ +** AggFinal (xFinalize) +** Gosub addrGosub +** ResetSorter eph-table +** } +** else if( new peer ){ +** AggFinal (xValue) +** Gosub addrGosub +** ResetSorter eph-table +** } +** AggStep +** Insert (record into eph-table) +** sqlite3WhereEnd() +** AggFinal (xFinalize) +** Gosub addrGosub +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +** +** As above, except take no action for a "new peer". Invoke +** the sub-routine once only for each partition. +** +** RANGE BETWEEN CURRENT ROW AND CURRENT ROW +** +** As above, except that the "new peer" condition is handled in the +** same way as "new partition" (so there is no "else if" block). +** +** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** As above, except assume every row is a "new peer". +*/ +static void windowCodeDefaultStep( + Parse *pParse, + Select *p, + WhereInfo *pWInfo, + int regGosub, + int addrGosub +){ + Window *pMWin = p->pWin; + Vdbe *v = sqlite3GetVdbe(pParse); + int k; + int iSubCsr = p->pSrc->a[0].iCursor; + int nSub = p->pSrc->a[0].pTab->nCol; + int reg = pParse->nMem+1; + int regRecord = reg+nSub; + int regRowid = regRecord+1; + int addr; + ExprList *pPart = pMWin->pPartition; + ExprList *pOrderBy = pMWin->pOrderBy; + + assert( pMWin->eType==TK_RANGE + || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT) + ); + + assert( (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT) + || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_UNBOUNDED) + || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_CURRENT) + || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED && !pOrderBy) + ); + + if( pMWin->eEnd==TK_UNBOUNDED ){ + pOrderBy = 0; + } + + pParse->nMem += nSub + 2; + + /* Load the individual column values of the row returned by + ** the sub-select into an array of registers. */ + for(k=0; knExpr : 0); + int addrGoto = 0; + int addrJump = 0; + int nPeer = (pOrderBy ? pOrderBy->nExpr : 0); + + if( pPart ){ + int regNewPart = reg + pMWin->nBufferCol; + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pPart, 0, 0); + addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPart, pMWin->regPart,nPart); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + addrJump = sqlite3VdbeAddOp3(v, OP_Jump, addr+2, 0, addr+2); + VdbeCoverageEqNe(v); + windowAggFinal(pParse, pMWin, 1); + if( pOrderBy ){ + addrGoto = sqlite3VdbeAddOp0(v, OP_Goto); + } + } + + if( pOrderBy ){ + int regNewPeer = reg + pMWin->nBufferCol + nPart; + int regPeer = pMWin->regPart + nPart; + + if( addrJump ) sqlite3VdbeJumpHere(v, addrJump); + if( pMWin->eType==TK_RANGE ){ + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOrderBy, 0, 0); + addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPeer, regPeer, nPeer); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + addrJump = sqlite3VdbeAddOp3(v, OP_Jump, addr+2, 0, addr+2); + VdbeCoverage(v); + }else{ + addrJump = 0; + } + windowAggFinal(pParse, pMWin, pMWin->eStart==TK_CURRENT); + if( addrGoto ) sqlite3VdbeJumpHere(v, addrGoto); + } + + sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr,sqlite3VdbeCurrentAddr(v)+3); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub); + sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)-1); + VdbeCoverage(v); + + sqlite3VdbeAddOp1(v, OP_ResetSorter, pMWin->iEphCsr); + sqlite3VdbeAddOp3( + v, OP_Copy, reg+pMWin->nBufferCol, pMWin->regPart, nPart+nPeer-1 + ); + + if( addrJump ) sqlite3VdbeJumpHere(v, addrJump); + } + + /* Invoke step function for window functions */ + windowAggStep(pParse, pMWin, -1, 0, reg, 0); + + /* Buffer the current row in the ephemeral table. */ + if( pMWin->nBufferCol>0 ){ + sqlite3VdbeAddOp3(v, OP_MakeRecord, reg, pMWin->nBufferCol, regRecord); + }else{ + sqlite3VdbeAddOp2(v, OP_Blob, 0, regRecord); + sqlite3VdbeAppendP4(v, (void*)"", 0); + } + sqlite3VdbeAddOp2(v, OP_NewRowid, pMWin->iEphCsr, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, pMWin->iEphCsr, regRecord, regRowid); + + /* End the database scan loop. */ + sqlite3WhereEnd(pWInfo); + + windowAggFinal(pParse, pMWin, 1); + sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr,sqlite3VdbeCurrentAddr(v)+3); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub); + sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)-1); + VdbeCoverage(v); +} + +/* +** Allocate and return a duplicate of the Window object indicated by the +** third argument. Set the Window.pOwner field of the new object to +** pOwner. +*/ +SQLITE_PRIVATE Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p){ + Window *pNew = 0; + if( p ){ + pNew = sqlite3DbMallocZero(db, sizeof(Window)); + if( pNew ){ + pNew->zName = sqlite3DbStrDup(db, p->zName); + pNew->pFilter = sqlite3ExprDup(db, p->pFilter, 0); + pNew->pPartition = sqlite3ExprListDup(db, p->pPartition, 0); + pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, 0); + pNew->eType = p->eType; + pNew->eEnd = p->eEnd; + pNew->eStart = p->eStart; + pNew->pStart = sqlite3ExprDup(db, p->pStart, 0); + pNew->pEnd = sqlite3ExprDup(db, p->pEnd, 0); + pNew->pOwner = pOwner; + } + } + return pNew; +} + +/* +** Return a copy of the linked list of Window objects passed as the +** second argument. +*/ +SQLITE_PRIVATE Window *sqlite3WindowListDup(sqlite3 *db, Window *p){ + Window *pWin; + Window *pRet = 0; + Window **pp = &pRet; + + for(pWin=p; pWin; pWin=pWin->pNextWin){ + *pp = sqlite3WindowDup(db, 0, pWin); + if( *pp==0 ) break; + pp = &((*pp)->pNextWin); + } + + return pRet; +} + +/* +** sqlite3WhereBegin() has already been called for the SELECT statement +** passed as the second argument when this function is invoked. It generates +** code to populate the Window.regResult register for each window function and +** invoke the sub-routine at instruction addrGosub once for each row. +** This function calls sqlite3WhereEnd() before returning. +*/ +SQLITE_PRIVATE void sqlite3WindowCodeStep( + Parse *pParse, /* Parse context */ + Select *p, /* Rewritten SELECT statement */ + WhereInfo *pWInfo, /* Context returned by sqlite3WhereBegin() */ + int regGosub, /* Register for OP_Gosub */ + int addrGosub /* OP_Gosub here to return each row */ +){ + Window *pMWin = p->pWin; + + /* There are three different functions that may be used to do the work + ** of this one, depending on the window frame and the specific built-in + ** window functions used (if any). + ** + ** windowCodeRowExprStep() handles all "ROWS" window frames, except for: + ** + ** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ** + ** The exception is because windowCodeRowExprStep() implements all window + ** frame types by caching the entire partition in a temp table, and + ** "ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW" is easy enough to + ** implement without such a cache. + ** + ** windowCodeCacheStep() is used for: + ** + ** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ** + ** It is also used for anything not handled by windowCodeRowExprStep() + ** that invokes a built-in window function that requires the entire + ** partition to be cached in a temp table before any rows are returned + ** (e.g. nth_value() or percent_rank()). + ** + ** Finally, assuming there is no built-in window function that requires + ** the partition to be cached, windowCodeDefaultStep() is used for: + ** + ** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ** RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ** RANGE BETWEEN CURRENT ROW AND CURRENT ROW + ** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ** + ** windowCodeDefaultStep() is the only one of the three functions that + ** does not cache each partition in a temp table before beginning to + ** return rows. + */ + if( pMWin->eType==TK_ROWS + && (pMWin->eStart!=TK_UNBOUNDED||pMWin->eEnd!=TK_CURRENT||!pMWin->pOrderBy) + ){ + VdbeModuleComment((pParse->pVdbe, "Begin RowExprStep()")); + windowCodeRowExprStep(pParse, p, pWInfo, regGosub, addrGosub); + }else{ + Window *pWin; + int bCache = 0; /* True to use CacheStep() */ + + if( pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED ){ + bCache = 1; + }else{ + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pFunc; + if( (pFunc->funcFlags & SQLITE_FUNC_WINDOW_SIZE) + || (pFunc->zName==nth_valueName) + || (pFunc->zName==first_valueName) + || (pFunc->zName==leadName) + || (pFunc->zName==lagName) + ){ + bCache = 1; + break; + } + } + } + + /* Otherwise, call windowCodeDefaultStep(). */ + if( bCache ){ + VdbeModuleComment((pParse->pVdbe, "Begin CacheStep()")); + windowCodeCacheStep(pParse, p, pWInfo, regGosub, addrGosub); + }else{ + VdbeModuleComment((pParse->pVdbe, "Begin DefaultStep()")); + windowCodeDefaultStep(pParse, p, pWInfo, regGosub, addrGosub); + } + } +} + +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/************** End of window.c **********************************************/ +/************** Begin file parse.c *******************************************/ +/* +** 2000-05-29 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** Driver template for the LEMON parser generator. +** +** The "lemon" program processes an LALR(1) input grammar file, then uses +** this template to construct a parser. The "lemon" program inserts text +** at each "%%" line. Also, any "P-a-r-s-e" identifer prefix (without the +** interstitial "-" characters) contained in this template is changed into +** the value of the %name directive from the grammar. Otherwise, the content +** of this template is copied straight through into the generate parser +** source file. +** +** The following is the concatenation of all %include directives from the +** input grammar file: +*/ +/* #include */ +/************ Begin %include sections from the grammar ************************/ + +/* #include "sqliteInt.h" */ + +/* +** Disable all error recovery processing in the parser push-down +** automaton. +*/ +#define YYNOERRORRECOVERY 1 + +/* +** Make yytestcase() the same as testcase() +*/ +#define yytestcase(X) testcase(X) + +/* +** Indicate that sqlite3ParserFree() will never be called with a null ** pointer. */ #define YYPARSEFREENEVERNULL 1 @@ -141457,6 +145982,8 @@ */ struct TrigEvent { int a; IdList * b; }; +struct FrameBound { int eType; Expr *pExpr; }; + /* ** Disable lookaside memory allocation for objects that might be ** shared across database connections. @@ -141497,10 +146024,21 @@ static Expr *tokenExpr(Parse *pParse, int op, Token t){ Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1); if( p ){ - memset(p, 0, sizeof(Expr)); + /* memset(p, 0, sizeof(Expr)); */ p->op = (u8)op; + p->affinity = 0; p->flags = EP_Leaf; p->iAgg = -1; + p->pLeft = p->pRight = 0; + p->x.pList = 0; + p->pAggInfo = 0; + p->pTab = 0; + p->op2 = 0; + p->iTable = 0; + p->iColumn = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + p->pWin = 0; +#endif p->u.zToken = (char*)&p[1]; memcpy(p->u.zToken, t.z, t.n); p->u.zToken[t.n] = 0; @@ -141511,15 +146049,19 @@ #if SQLITE_MAX_EXPR_DEPTH>0 p->nHeight = 1; #endif + if( IN_RENAME_OBJECT ){ + return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t); + } } return p; } + /* A routine to convert a binary TK_IS or TK_ISNOT expression into a ** unary TK_ISNULL or TK_NOTNULL expression. */ static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){ sqlite3 *db = pParse->db; - if( pA && pY && pY->op==TK_NULL ){ + if( pA && pY && pY->op==TK_NULL && !IN_RENAME_OBJECT ){ pA->op = (u8)op; sqlite3ExprDelete(db, pA->pRight); pA->pRight = 0; @@ -141610,26 +146152,28 @@ # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ -#define YYCODETYPE unsigned char -#define YYNOCODE 255 +#define YYCODETYPE unsigned short int +#define YYNOCODE 277 #define YYACTIONTYPE unsigned short int -#define YYWILDCARD 84 +#define YYWILDCARD 91 #define sqlite3ParserTOKENTYPE Token typedef union { int yyinit; sqlite3ParserTOKENTYPE yy0; - const char* yy36; - TriggerStep* yy47; - With* yy91; - struct {int value; int mask;} yy107; - Expr* yy182; - Upsert* yy198; - ExprList* yy232; - struct TrigEvent yy300; - Select* yy399; - SrcList* yy427; - int yy502; - IdList* yy510; + Expr* yy18; + struct TrigEvent yy34; + IdList* yy48; + int yy70; + struct {int value; int mask;} yy111; + struct FrameBound yy119; + SrcList* yy135; + TriggerStep* yy207; + Window* yy327; + Upsert* yy340; + const char* yy392; + ExprList* yy420; + With* yy449; + Select* yy489; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -141645,18 +146189,19 @@ #define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse; #define sqlite3ParserCTX_STORE yypParser->pParse=pParse; #define YYFALLBACK 1 -#define YYNSTATE 490 -#define YYNRULE 341 -#define YYNTOKEN 145 -#define YY_MAX_SHIFT 489 -#define YY_MIN_SHIFTREDUCE 705 -#define YY_MAX_SHIFTREDUCE 1045 -#define YY_ERROR_ACTION 1046 -#define YY_ACCEPT_ACTION 1047 -#define YY_NO_ACTION 1048 -#define YY_MIN_REDUCE 1049 -#define YY_MAX_REDUCE 1389 +#define YYNSTATE 521 +#define YYNRULE 367 +#define YYNTOKEN 155 +#define YY_MAX_SHIFT 520 +#define YY_MIN_SHIFTREDUCE 756 +#define YY_MAX_SHIFTREDUCE 1122 +#define YY_ERROR_ACTION 1123 +#define YY_ACCEPT_ACTION 1124 +#define YY_NO_ACTION 1125 +#define YY_MIN_REDUCE 1126 +#define YY_MAX_REDUCE 1492 /************* End control #defines *******************************************/ +#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. @@ -141721,503 +146266,568 @@ ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (1657) +#define YY_ACTTAB_COUNT (2009) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 349, 99, 96, 185, 99, 96, 185, 233, 1047, 1, - /* 10 */ 1, 489, 2, 1051, 484, 477, 477, 477, 260, 351, - /* 20 */ 121, 1310, 1120, 1120, 1178, 1115, 1094, 1128, 380, 380, - /* 30 */ 380, 835, 454, 410, 1115, 59, 59, 1357, 425, 836, - /* 40 */ 710, 711, 712, 106, 107, 97, 1023, 1023, 900, 903, - /* 50 */ 892, 892, 104, 104, 105, 105, 105, 105, 346, 238, - /* 60 */ 238, 99, 96, 185, 238, 238, 889, 889, 901, 904, - /* 70 */ 460, 481, 351, 99, 96, 185, 481, 347, 1177, 82, - /* 80 */ 388, 214, 182, 23, 194, 103, 103, 103, 103, 102, - /* 90 */ 102, 101, 101, 101, 100, 381, 106, 107, 97, 1023, - /* 100 */ 1023, 900, 903, 892, 892, 104, 104, 105, 105, 105, - /* 110 */ 105, 10, 385, 484, 24, 484, 1333, 489, 2, 1051, - /* 120 */ 335, 1043, 108, 893, 260, 351, 121, 99, 96, 185, - /* 130 */ 100, 381, 386, 1128, 59, 59, 59, 59, 103, 103, - /* 140 */ 103, 103, 102, 102, 101, 101, 101, 100, 381, 106, - /* 150 */ 107, 97, 1023, 1023, 900, 903, 892, 892, 104, 104, - /* 160 */ 105, 105, 105, 105, 360, 238, 238, 170, 170, 467, - /* 170 */ 455, 467, 464, 67, 381, 329, 169, 481, 351, 343, - /* 180 */ 338, 400, 1044, 68, 101, 101, 101, 100, 381, 393, - /* 190 */ 194, 103, 103, 103, 103, 102, 102, 101, 101, 101, - /* 200 */ 100, 381, 106, 107, 97, 1023, 1023, 900, 903, 892, - /* 210 */ 892, 104, 104, 105, 105, 105, 105, 483, 385, 103, - /* 220 */ 103, 103, 103, 102, 102, 101, 101, 101, 100, 381, - /* 230 */ 268, 351, 946, 946, 422, 296, 102, 102, 101, 101, - /* 240 */ 101, 100, 381, 861, 103, 103, 103, 103, 102, 102, - /* 250 */ 101, 101, 101, 100, 381, 106, 107, 97, 1023, 1023, - /* 260 */ 900, 903, 892, 892, 104, 104, 105, 105, 105, 105, - /* 270 */ 484, 983, 1383, 206, 1353, 1383, 438, 435, 434, 281, - /* 280 */ 396, 269, 1089, 941, 351, 1002, 433, 861, 743, 401, - /* 290 */ 282, 57, 57, 482, 145, 791, 791, 103, 103, 103, - /* 300 */ 103, 102, 102, 101, 101, 101, 100, 381, 106, 107, - /* 310 */ 97, 1023, 1023, 900, 903, 892, 892, 104, 104, 105, - /* 320 */ 105, 105, 105, 281, 1002, 1003, 1004, 206, 879, 319, - /* 330 */ 438, 435, 434, 981, 259, 474, 360, 351, 1118, 1118, - /* 340 */ 433, 736, 379, 378, 872, 1002, 1356, 322, 871, 766, - /* 350 */ 103, 103, 103, 103, 102, 102, 101, 101, 101, 100, - /* 360 */ 381, 106, 107, 97, 1023, 1023, 900, 903, 892, 892, - /* 370 */ 104, 104, 105, 105, 105, 105, 484, 801, 484, 871, - /* 380 */ 871, 873, 401, 282, 1002, 1003, 1004, 1030, 360, 1030, - /* 390 */ 351, 983, 1384, 213, 880, 1384, 145, 59, 59, 59, - /* 400 */ 59, 1002, 244, 103, 103, 103, 103, 102, 102, 101, - /* 410 */ 101, 101, 100, 381, 106, 107, 97, 1023, 1023, 900, - /* 420 */ 903, 892, 892, 104, 104, 105, 105, 105, 105, 274, - /* 430 */ 484, 110, 467, 479, 467, 444, 259, 474, 232, 232, - /* 440 */ 1002, 1003, 1004, 351, 210, 335, 982, 866, 1385, 336, - /* 450 */ 481, 59, 59, 981, 245, 307, 103, 103, 103, 103, - /* 460 */ 102, 102, 101, 101, 101, 100, 381, 106, 107, 97, - /* 470 */ 1023, 1023, 900, 903, 892, 892, 104, 104, 105, 105, - /* 480 */ 105, 105, 453, 459, 484, 408, 377, 259, 474, 271, - /* 490 */ 183, 273, 209, 208, 207, 356, 351, 307, 178, 177, - /* 500 */ 127, 1006, 1098, 14, 14, 43, 43, 1044, 425, 103, - /* 510 */ 103, 103, 103, 102, 102, 101, 101, 101, 100, 381, - /* 520 */ 106, 107, 97, 1023, 1023, 900, 903, 892, 892, 104, - /* 530 */ 104, 105, 105, 105, 105, 294, 1132, 408, 160, 484, - /* 540 */ 408, 1006, 129, 962, 1209, 239, 239, 481, 307, 425, - /* 550 */ 1309, 1097, 351, 235, 243, 272, 820, 481, 963, 425, - /* 560 */ 11, 11, 103, 103, 103, 103, 102, 102, 101, 101, - /* 570 */ 101, 100, 381, 964, 362, 1002, 106, 107, 97, 1023, - /* 580 */ 1023, 900, 903, 892, 892, 104, 104, 105, 105, 105, - /* 590 */ 105, 1275, 161, 126, 777, 289, 1209, 292, 1072, 357, - /* 600 */ 1209, 1127, 476, 357, 778, 425, 247, 425, 351, 248, - /* 610 */ 414, 364, 414, 171, 1002, 1003, 1004, 84, 103, 103, - /* 620 */ 103, 103, 102, 102, 101, 101, 101, 100, 381, 1002, - /* 630 */ 184, 484, 106, 107, 97, 1023, 1023, 900, 903, 892, - /* 640 */ 892, 104, 104, 105, 105, 105, 105, 1123, 1209, 287, - /* 650 */ 484, 1209, 11, 11, 179, 820, 259, 474, 307, 237, - /* 660 */ 182, 351, 321, 365, 414, 308, 367, 366, 1002, 1003, - /* 670 */ 1004, 44, 44, 87, 103, 103, 103, 103, 102, 102, - /* 680 */ 101, 101, 101, 100, 381, 106, 107, 97, 1023, 1023, - /* 690 */ 900, 903, 892, 892, 104, 104, 105, 105, 105, 105, - /* 700 */ 246, 368, 280, 128, 10, 358, 146, 796, 835, 258, - /* 710 */ 1020, 88, 795, 86, 351, 421, 836, 943, 376, 348, - /* 720 */ 191, 943, 1318, 267, 308, 279, 456, 103, 103, 103, - /* 730 */ 103, 102, 102, 101, 101, 101, 100, 381, 106, 95, - /* 740 */ 97, 1023, 1023, 900, 903, 892, 892, 104, 104, 105, - /* 750 */ 105, 105, 105, 420, 249, 238, 238, 238, 238, 79, - /* 760 */ 375, 125, 305, 29, 262, 978, 351, 481, 337, 481, - /* 770 */ 756, 755, 304, 278, 415, 15, 81, 940, 1126, 940, - /* 780 */ 103, 103, 103, 103, 102, 102, 101, 101, 101, 100, - /* 790 */ 381, 107, 97, 1023, 1023, 900, 903, 892, 892, 104, - /* 800 */ 104, 105, 105, 105, 105, 457, 263, 484, 174, 484, - /* 810 */ 238, 238, 863, 407, 402, 216, 216, 351, 409, 193, - /* 820 */ 283, 216, 481, 81, 763, 764, 266, 5, 13, 13, - /* 830 */ 34, 34, 103, 103, 103, 103, 102, 102, 101, 101, - /* 840 */ 101, 100, 381, 97, 1023, 1023, 900, 903, 892, 892, - /* 850 */ 104, 104, 105, 105, 105, 105, 93, 475, 1002, 4, - /* 860 */ 403, 1002, 340, 431, 1002, 297, 212, 1277, 81, 746, - /* 870 */ 1163, 152, 926, 478, 166, 212, 757, 829, 930, 939, - /* 880 */ 216, 939, 858, 103, 103, 103, 103, 102, 102, 101, - /* 890 */ 101, 101, 100, 381, 238, 238, 382, 1002, 1003, 1004, - /* 900 */ 1002, 1003, 1004, 1002, 1003, 1004, 481, 439, 472, 746, - /* 910 */ 105, 105, 105, 105, 98, 758, 1162, 145, 930, 412, - /* 920 */ 879, 406, 793, 81, 395, 89, 90, 91, 105, 105, - /* 930 */ 105, 105, 1323, 92, 484, 382, 486, 485, 240, 275, - /* 940 */ 871, 103, 103, 103, 103, 102, 102, 101, 101, 101, - /* 950 */ 100, 381, 1096, 371, 355, 45, 45, 259, 474, 103, - /* 960 */ 103, 103, 103, 102, 102, 101, 101, 101, 100, 381, - /* 970 */ 1150, 871, 871, 873, 874, 21, 1332, 991, 384, 730, - /* 980 */ 722, 242, 123, 1298, 124, 875, 333, 333, 332, 227, - /* 990 */ 330, 991, 384, 719, 256, 242, 484, 391, 413, 1297, - /* 1000 */ 333, 333, 332, 227, 330, 748, 187, 719, 265, 470, - /* 1010 */ 1279, 1002, 484, 417, 391, 390, 264, 11, 11, 284, - /* 1020 */ 187, 732, 265, 93, 475, 875, 4, 1279, 1281, 419, - /* 1030 */ 264, 369, 416, 11, 11, 1159, 288, 484, 399, 1346, - /* 1040 */ 478, 379, 378, 291, 484, 293, 189, 250, 295, 1027, - /* 1050 */ 1002, 1003, 1004, 190, 1029, 1111, 140, 188, 11, 11, - /* 1060 */ 189, 732, 1028, 382, 923, 46, 46, 190, 1095, 230, - /* 1070 */ 140, 188, 462, 93, 475, 472, 4, 300, 309, 391, - /* 1080 */ 373, 6, 1069, 217, 739, 310, 1030, 879, 1030, 1171, - /* 1090 */ 478, 352, 1279, 90, 91, 800, 259, 474, 1208, 484, - /* 1100 */ 92, 1268, 382, 486, 485, 352, 1002, 871, 879, 426, - /* 1110 */ 259, 474, 172, 382, 238, 238, 1146, 170, 1021, 389, - /* 1120 */ 47, 47, 1157, 739, 872, 472, 481, 469, 871, 350, - /* 1130 */ 1214, 83, 475, 389, 4, 1078, 1071, 879, 871, 871, - /* 1140 */ 873, 874, 21, 90, 91, 1002, 1003, 1004, 478, 251, - /* 1150 */ 92, 251, 382, 486, 485, 443, 370, 871, 1021, 871, - /* 1160 */ 871, 873, 224, 241, 306, 441, 301, 440, 211, 1060, - /* 1170 */ 820, 382, 822, 447, 299, 1059, 484, 1061, 1143, 962, - /* 1180 */ 430, 796, 484, 472, 1340, 312, 795, 465, 871, 871, - /* 1190 */ 873, 874, 21, 314, 963, 879, 316, 59, 59, 1002, - /* 1200 */ 9, 90, 91, 48, 48, 238, 238, 210, 92, 964, - /* 1210 */ 382, 486, 485, 176, 334, 871, 242, 481, 1193, 238, - /* 1220 */ 238, 333, 333, 332, 227, 330, 394, 270, 719, 277, - /* 1230 */ 471, 481, 467, 466, 484, 145, 217, 1201, 1002, 1003, - /* 1240 */ 1004, 187, 3, 265, 184, 445, 871, 871, 873, 874, - /* 1250 */ 21, 264, 1337, 450, 1051, 39, 39, 392, 356, 260, - /* 1260 */ 342, 121, 468, 411, 436, 821, 180, 1094, 1128, 820, - /* 1270 */ 303, 1021, 1272, 1271, 299, 259, 474, 238, 238, 1002, - /* 1280 */ 473, 189, 484, 318, 327, 238, 238, 484, 190, 481, - /* 1290 */ 446, 140, 188, 1343, 238, 238, 1038, 481, 148, 175, - /* 1300 */ 238, 238, 484, 49, 49, 219, 481, 484, 35, 35, - /* 1310 */ 1317, 1021, 481, 484, 1035, 484, 1315, 484, 1002, 1003, - /* 1320 */ 1004, 484, 66, 36, 36, 194, 352, 484, 38, 38, - /* 1330 */ 484, 259, 474, 69, 50, 50, 51, 51, 52, 52, - /* 1340 */ 359, 484, 12, 12, 484, 1198, 484, 158, 53, 53, - /* 1350 */ 405, 112, 112, 385, 389, 484, 26, 484, 143, 484, - /* 1360 */ 150, 484, 54, 54, 397, 40, 40, 55, 55, 484, - /* 1370 */ 79, 484, 153, 1190, 484, 154, 56, 56, 41, 41, - /* 1380 */ 58, 58, 133, 133, 484, 398, 484, 429, 484, 155, - /* 1390 */ 134, 134, 135, 135, 484, 63, 63, 484, 341, 484, - /* 1400 */ 339, 484, 196, 484, 156, 42, 42, 113, 113, 60, - /* 1410 */ 60, 484, 404, 484, 27, 114, 114, 1204, 115, 115, - /* 1420 */ 111, 111, 132, 132, 131, 131, 1266, 418, 484, 162, - /* 1430 */ 484, 200, 119, 119, 118, 118, 484, 74, 424, 484, - /* 1440 */ 1286, 484, 231, 484, 202, 484, 167, 286, 427, 116, - /* 1450 */ 116, 117, 117, 290, 203, 442, 1062, 62, 62, 204, - /* 1460 */ 64, 64, 61, 61, 33, 33, 37, 37, 344, 372, - /* 1470 */ 1114, 1105, 748, 1113, 374, 1112, 254, 458, 1086, 255, - /* 1480 */ 345, 1085, 302, 1084, 1355, 78, 1154, 311, 1104, 449, - /* 1490 */ 452, 1155, 1153, 218, 7, 313, 315, 320, 1152, 85, - /* 1500 */ 1252, 317, 109, 80, 463, 225, 461, 1068, 25, 487, - /* 1510 */ 997, 323, 257, 226, 229, 228, 1136, 324, 325, 326, - /* 1520 */ 488, 136, 1057, 1052, 1302, 1303, 1301, 706, 1300, 137, - /* 1530 */ 122, 138, 383, 173, 1082, 261, 186, 252, 1081, 65, - /* 1540 */ 387, 120, 938, 936, 855, 353, 149, 1079, 139, 151, - /* 1550 */ 192, 780, 195, 276, 952, 157, 141, 361, 70, 363, - /* 1560 */ 859, 159, 71, 72, 142, 73, 955, 354, 147, 197, - /* 1570 */ 198, 951, 130, 16, 199, 285, 216, 1032, 201, 423, - /* 1580 */ 164, 944, 163, 28, 721, 428, 304, 165, 205, 759, - /* 1590 */ 75, 432, 298, 17, 18, 437, 76, 253, 878, 144, - /* 1600 */ 877, 906, 77, 986, 30, 448, 987, 31, 451, 181, - /* 1610 */ 234, 236, 168, 828, 823, 89, 910, 921, 81, 907, - /* 1620 */ 215, 905, 909, 961, 960, 19, 221, 20, 220, 22, - /* 1630 */ 32, 331, 876, 731, 94, 790, 794, 8, 992, 222, - /* 1640 */ 480, 328, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - /* 1650 */ 223, 1048, 1048, 1048, 1048, 1348, 1347, + /* 0 */ 368, 105, 102, 197, 105, 102, 197, 515, 1124, 1, + /* 10 */ 1, 520, 2, 1128, 515, 1192, 1171, 1456, 275, 370, + /* 20 */ 127, 1389, 1197, 1197, 1192, 1166, 178, 1205, 64, 64, + /* 30 */ 477, 887, 322, 428, 348, 37, 37, 808, 362, 888, + /* 40 */ 509, 509, 509, 112, 113, 103, 1100, 1100, 953, 956, + /* 50 */ 946, 946, 110, 110, 111, 111, 111, 111, 365, 252, + /* 60 */ 252, 515, 252, 252, 497, 515, 309, 515, 459, 515, + /* 70 */ 1079, 491, 512, 478, 6, 512, 809, 134, 498, 228, + /* 80 */ 194, 428, 37, 37, 515, 208, 64, 64, 64, 64, + /* 90 */ 13, 13, 109, 109, 109, 109, 108, 108, 107, 107, + /* 100 */ 107, 106, 401, 258, 381, 13, 13, 398, 397, 428, + /* 110 */ 252, 252, 370, 476, 405, 1104, 1079, 1080, 1081, 386, + /* 120 */ 1106, 390, 497, 512, 497, 1423, 1419, 304, 1105, 307, + /* 130 */ 1256, 496, 370, 499, 16, 16, 112, 113, 103, 1100, + /* 140 */ 1100, 953, 956, 946, 946, 110, 110, 111, 111, 111, + /* 150 */ 111, 262, 1107, 495, 1107, 401, 112, 113, 103, 1100, + /* 160 */ 1100, 953, 956, 946, 946, 110, 110, 111, 111, 111, + /* 170 */ 111, 129, 1425, 343, 1420, 339, 1059, 492, 1057, 263, + /* 180 */ 73, 105, 102, 197, 994, 109, 109, 109, 109, 108, + /* 190 */ 108, 107, 107, 107, 106, 401, 370, 111, 111, 111, + /* 200 */ 111, 104, 492, 89, 1432, 109, 109, 109, 109, 108, + /* 210 */ 108, 107, 107, 107, 106, 401, 111, 111, 111, 111, + /* 220 */ 112, 113, 103, 1100, 1100, 953, 956, 946, 946, 110, + /* 230 */ 110, 111, 111, 111, 111, 109, 109, 109, 109, 108, + /* 240 */ 108, 107, 107, 107, 106, 401, 114, 108, 108, 107, + /* 250 */ 107, 107, 106, 401, 109, 109, 109, 109, 108, 108, + /* 260 */ 107, 107, 107, 106, 401, 152, 399, 399, 399, 109, + /* 270 */ 109, 109, 109, 108, 108, 107, 107, 107, 106, 401, + /* 280 */ 178, 493, 1412, 434, 1037, 1486, 1079, 515, 1486, 370, + /* 290 */ 421, 297, 357, 412, 74, 1079, 109, 109, 109, 109, + /* 300 */ 108, 108, 107, 107, 107, 106, 401, 1413, 37, 37, + /* 310 */ 1431, 274, 506, 112, 113, 103, 1100, 1100, 953, 956, + /* 320 */ 946, 946, 110, 110, 111, 111, 111, 111, 1436, 520, + /* 330 */ 2, 1128, 1079, 1080, 1081, 430, 275, 1079, 127, 366, + /* 340 */ 933, 1079, 1080, 1081, 220, 1205, 913, 458, 455, 454, + /* 350 */ 392, 167, 515, 1035, 152, 445, 924, 453, 152, 874, + /* 360 */ 923, 289, 109, 109, 109, 109, 108, 108, 107, 107, + /* 370 */ 107, 106, 401, 13, 13, 261, 853, 252, 252, 227, + /* 380 */ 106, 401, 370, 1079, 1080, 1081, 311, 388, 1079, 296, + /* 390 */ 512, 923, 923, 925, 231, 323, 1255, 1388, 1423, 490, + /* 400 */ 274, 506, 12, 208, 274, 506, 112, 113, 103, 1100, + /* 410 */ 1100, 953, 956, 946, 946, 110, 110, 111, 111, 111, + /* 420 */ 111, 1440, 286, 1128, 288, 1079, 1097, 247, 275, 1098, + /* 430 */ 127, 387, 405, 389, 1079, 1080, 1081, 1205, 159, 238, + /* 440 */ 255, 321, 461, 316, 460, 225, 790, 105, 102, 197, + /* 450 */ 513, 314, 842, 842, 445, 109, 109, 109, 109, 108, + /* 460 */ 108, 107, 107, 107, 106, 401, 515, 514, 515, 252, + /* 470 */ 252, 1079, 1080, 1081, 435, 370, 1098, 933, 1460, 794, + /* 480 */ 274, 506, 512, 105, 102, 197, 336, 63, 63, 64, + /* 490 */ 64, 27, 790, 924, 287, 208, 1354, 923, 515, 112, + /* 500 */ 113, 103, 1100, 1100, 953, 956, 946, 946, 110, 110, + /* 510 */ 111, 111, 111, 111, 107, 107, 107, 106, 401, 49, + /* 520 */ 49, 515, 28, 1079, 405, 497, 421, 297, 923, 923, + /* 530 */ 925, 186, 468, 1079, 467, 999, 999, 442, 515, 1079, + /* 540 */ 334, 515, 45, 45, 1083, 342, 173, 168, 109, 109, + /* 550 */ 109, 109, 108, 108, 107, 107, 107, 106, 401, 13, + /* 560 */ 13, 205, 13, 13, 252, 252, 1195, 1195, 370, 1079, + /* 570 */ 1080, 1081, 787, 265, 5, 359, 494, 512, 469, 1079, + /* 580 */ 1080, 1081, 398, 397, 1079, 1079, 1080, 1081, 3, 282, + /* 590 */ 1079, 1083, 112, 113, 103, 1100, 1100, 953, 956, 946, + /* 600 */ 946, 110, 110, 111, 111, 111, 111, 252, 252, 1015, + /* 610 */ 220, 1079, 873, 458, 455, 454, 943, 943, 954, 957, + /* 620 */ 512, 252, 252, 453, 1016, 1079, 445, 1107, 1209, 1107, + /* 630 */ 1079, 1080, 1081, 515, 512, 426, 1079, 1080, 1081, 1017, + /* 640 */ 512, 109, 109, 109, 109, 108, 108, 107, 107, 107, + /* 650 */ 106, 401, 1052, 515, 50, 50, 515, 1079, 1080, 1081, + /* 660 */ 828, 370, 1051, 379, 411, 1064, 1358, 207, 408, 773, + /* 670 */ 829, 1079, 1080, 1081, 64, 64, 322, 64, 64, 1302, + /* 680 */ 947, 411, 410, 1358, 1360, 112, 113, 103, 1100, 1100, + /* 690 */ 953, 956, 946, 946, 110, 110, 111, 111, 111, 111, + /* 700 */ 294, 482, 515, 1037, 1487, 515, 434, 1487, 354, 1120, + /* 710 */ 483, 996, 913, 485, 466, 996, 132, 178, 33, 450, + /* 720 */ 1203, 136, 406, 64, 64, 479, 64, 64, 419, 369, + /* 730 */ 283, 1146, 252, 252, 109, 109, 109, 109, 108, 108, + /* 740 */ 107, 107, 107, 106, 401, 512, 224, 440, 411, 266, + /* 750 */ 1358, 266, 252, 252, 370, 296, 416, 284, 934, 396, + /* 760 */ 976, 470, 400, 252, 252, 512, 9, 473, 231, 500, + /* 770 */ 354, 1036, 1035, 1488, 355, 374, 512, 1121, 112, 113, + /* 780 */ 103, 1100, 1100, 953, 956, 946, 946, 110, 110, 111, + /* 790 */ 111, 111, 111, 252, 252, 1015, 515, 1347, 295, 252, + /* 800 */ 252, 252, 252, 1098, 375, 249, 512, 445, 872, 322, + /* 810 */ 1016, 480, 512, 195, 512, 434, 273, 15, 15, 515, + /* 820 */ 314, 515, 95, 515, 93, 1017, 367, 109, 109, 109, + /* 830 */ 109, 108, 108, 107, 107, 107, 106, 401, 515, 1121, + /* 840 */ 39, 39, 51, 51, 52, 52, 503, 370, 515, 1204, + /* 850 */ 1098, 918, 439, 341, 133, 436, 223, 222, 221, 53, + /* 860 */ 53, 322, 1400, 761, 762, 763, 515, 370, 88, 54, + /* 870 */ 54, 112, 113, 103, 1100, 1100, 953, 956, 946, 946, + /* 880 */ 110, 110, 111, 111, 111, 111, 407, 55, 55, 196, + /* 890 */ 515, 112, 113, 103, 1100, 1100, 953, 956, 946, 946, + /* 900 */ 110, 110, 111, 111, 111, 111, 135, 264, 1149, 376, + /* 910 */ 515, 40, 40, 515, 872, 515, 993, 515, 993, 116, + /* 920 */ 109, 109, 109, 109, 108, 108, 107, 107, 107, 106, + /* 930 */ 401, 41, 41, 515, 43, 43, 44, 44, 56, 56, + /* 940 */ 109, 109, 109, 109, 108, 108, 107, 107, 107, 106, + /* 950 */ 401, 515, 379, 515, 57, 57, 515, 799, 515, 379, + /* 960 */ 515, 445, 200, 515, 323, 515, 1397, 515, 1459, 515, + /* 970 */ 1287, 817, 58, 58, 14, 14, 515, 59, 59, 118, + /* 980 */ 118, 60, 60, 515, 46, 46, 61, 61, 62, 62, + /* 990 */ 47, 47, 515, 190, 189, 91, 515, 140, 140, 515, + /* 1000 */ 394, 515, 277, 1200, 141, 141, 515, 1115, 515, 992, + /* 1010 */ 515, 992, 515, 69, 69, 370, 278, 48, 48, 259, + /* 1020 */ 65, 65, 119, 119, 246, 246, 260, 66, 66, 120, + /* 1030 */ 120, 121, 121, 117, 117, 370, 515, 512, 383, 112, + /* 1040 */ 113, 103, 1100, 1100, 953, 956, 946, 946, 110, 110, + /* 1050 */ 111, 111, 111, 111, 515, 872, 515, 139, 139, 112, + /* 1060 */ 113, 103, 1100, 1100, 953, 956, 946, 946, 110, 110, + /* 1070 */ 111, 111, 111, 111, 1287, 138, 138, 125, 125, 515, + /* 1080 */ 12, 515, 281, 1287, 515, 445, 131, 1287, 109, 109, + /* 1090 */ 109, 109, 108, 108, 107, 107, 107, 106, 401, 515, + /* 1100 */ 124, 124, 122, 122, 515, 123, 123, 515, 109, 109, + /* 1110 */ 109, 109, 108, 108, 107, 107, 107, 106, 401, 515, + /* 1120 */ 68, 68, 463, 783, 515, 70, 70, 302, 67, 67, + /* 1130 */ 1032, 253, 253, 356, 1287, 191, 196, 1433, 465, 1301, + /* 1140 */ 38, 38, 384, 94, 512, 42, 42, 177, 848, 274, + /* 1150 */ 506, 385, 420, 847, 1356, 441, 508, 376, 377, 153, + /* 1160 */ 423, 872, 432, 370, 224, 251, 194, 887, 182, 293, + /* 1170 */ 783, 848, 88, 254, 466, 888, 847, 915, 807, 806, + /* 1180 */ 230, 1241, 910, 370, 17, 413, 797, 112, 113, 103, + /* 1190 */ 1100, 1100, 953, 956, 946, 946, 110, 110, 111, 111, + /* 1200 */ 111, 111, 395, 814, 815, 1175, 983, 112, 101, 103, + /* 1210 */ 1100, 1100, 953, 956, 946, 946, 110, 110, 111, 111, + /* 1220 */ 111, 111, 375, 422, 427, 429, 298, 230, 230, 88, + /* 1230 */ 1240, 451, 312, 797, 226, 88, 109, 109, 109, 109, + /* 1240 */ 108, 108, 107, 107, 107, 106, 401, 86, 433, 979, + /* 1250 */ 927, 881, 226, 983, 230, 415, 109, 109, 109, 109, + /* 1260 */ 108, 108, 107, 107, 107, 106, 401, 320, 845, 781, + /* 1270 */ 846, 100, 130, 100, 1403, 290, 370, 319, 1377, 1376, + /* 1280 */ 437, 1449, 299, 1237, 303, 306, 308, 310, 1188, 1174, + /* 1290 */ 1173, 1172, 315, 324, 325, 1228, 370, 927, 1249, 271, + /* 1300 */ 1286, 113, 103, 1100, 1100, 953, 956, 946, 946, 110, + /* 1310 */ 110, 111, 111, 111, 111, 1224, 1235, 502, 501, 1292, + /* 1320 */ 1221, 1155, 103, 1100, 1100, 953, 956, 946, 946, 110, + /* 1330 */ 110, 111, 111, 111, 111, 1148, 1137, 1136, 1138, 1443, + /* 1340 */ 446, 244, 184, 98, 507, 188, 4, 353, 327, 109, + /* 1350 */ 109, 109, 109, 108, 108, 107, 107, 107, 106, 401, + /* 1360 */ 510, 329, 331, 199, 414, 456, 292, 285, 318, 109, + /* 1370 */ 109, 109, 109, 108, 108, 107, 107, 107, 106, 401, + /* 1380 */ 11, 1271, 1279, 402, 361, 192, 1171, 1351, 431, 505, + /* 1390 */ 346, 1350, 333, 98, 507, 504, 4, 187, 1446, 1115, + /* 1400 */ 233, 1396, 155, 1394, 1112, 152, 72, 75, 378, 425, + /* 1410 */ 510, 165, 149, 157, 933, 1276, 86, 30, 1268, 417, + /* 1420 */ 96, 96, 8, 160, 161, 162, 163, 97, 418, 402, + /* 1430 */ 517, 516, 449, 402, 923, 210, 358, 424, 1282, 438, + /* 1440 */ 169, 214, 360, 1345, 80, 504, 31, 444, 1365, 301, + /* 1450 */ 245, 274, 506, 216, 174, 305, 488, 447, 217, 462, + /* 1460 */ 1139, 487, 218, 363, 933, 923, 923, 925, 926, 24, + /* 1470 */ 96, 96, 1191, 1190, 1189, 391, 1182, 97, 1163, 402, + /* 1480 */ 517, 516, 799, 364, 923, 1162, 317, 1161, 98, 507, + /* 1490 */ 1181, 4, 1458, 472, 393, 269, 270, 475, 481, 1232, + /* 1500 */ 85, 1233, 326, 328, 232, 510, 495, 1231, 330, 98, + /* 1510 */ 507, 1230, 4, 486, 335, 923, 923, 925, 926, 24, + /* 1520 */ 1435, 1068, 404, 181, 336, 256, 510, 115, 402, 332, + /* 1530 */ 352, 352, 351, 241, 349, 1214, 1414, 770, 338, 10, + /* 1540 */ 504, 340, 272, 92, 1331, 1213, 87, 183, 484, 402, + /* 1550 */ 201, 488, 280, 239, 344, 345, 489, 1145, 29, 933, + /* 1560 */ 279, 504, 1074, 518, 240, 96, 96, 242, 243, 519, + /* 1570 */ 1134, 1129, 97, 154, 402, 517, 516, 372, 373, 923, + /* 1580 */ 933, 142, 143, 128, 1381, 267, 96, 96, 852, 757, + /* 1590 */ 203, 144, 403, 97, 1382, 402, 517, 516, 204, 1380, + /* 1600 */ 923, 146, 1379, 1159, 1158, 71, 1156, 276, 202, 185, + /* 1610 */ 923, 923, 925, 926, 24, 198, 257, 126, 991, 989, + /* 1620 */ 907, 98, 507, 156, 4, 145, 158, 206, 831, 209, + /* 1630 */ 291, 923, 923, 925, 926, 24, 1005, 911, 510, 164, + /* 1640 */ 147, 380, 371, 382, 166, 76, 77, 274, 506, 148, + /* 1650 */ 78, 79, 1008, 211, 212, 1004, 137, 213, 18, 300, + /* 1660 */ 230, 402, 997, 1109, 443, 215, 32, 170, 171, 772, + /* 1670 */ 409, 448, 319, 504, 219, 172, 452, 81, 19, 457, + /* 1680 */ 313, 20, 82, 268, 488, 150, 810, 179, 83, 487, + /* 1690 */ 464, 151, 933, 180, 959, 84, 1040, 34, 96, 96, + /* 1700 */ 471, 1041, 35, 474, 193, 97, 248, 402, 517, 516, + /* 1710 */ 1068, 404, 923, 250, 256, 880, 229, 175, 875, 352, + /* 1720 */ 352, 351, 241, 349, 100, 21, 770, 22, 1054, 1056, + /* 1730 */ 7, 98, 507, 1045, 4, 337, 1058, 23, 974, 201, + /* 1740 */ 176, 280, 88, 923, 923, 925, 926, 24, 510, 279, + /* 1750 */ 960, 958, 962, 1014, 963, 1013, 235, 234, 25, 36, + /* 1760 */ 99, 90, 507, 928, 4, 511, 350, 782, 26, 841, + /* 1770 */ 236, 402, 347, 1069, 237, 1125, 1125, 1451, 510, 203, + /* 1780 */ 1450, 1125, 1125, 504, 1125, 1125, 1125, 204, 1125, 1125, + /* 1790 */ 146, 1125, 1125, 1125, 1125, 1125, 1125, 202, 1125, 1125, + /* 1800 */ 1125, 402, 933, 1125, 1125, 1125, 1125, 1125, 96, 96, + /* 1810 */ 1125, 1125, 1125, 504, 1125, 97, 1125, 402, 517, 516, + /* 1820 */ 1125, 1125, 923, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + /* 1830 */ 1125, 371, 933, 1125, 1125, 1125, 274, 506, 96, 96, + /* 1840 */ 1125, 1125, 1125, 1125, 1125, 97, 1125, 402, 517, 516, + /* 1850 */ 1125, 1125, 923, 923, 923, 925, 926, 24, 1125, 409, + /* 1860 */ 1125, 1125, 1125, 256, 1125, 1125, 1125, 1125, 352, 352, + /* 1870 */ 351, 241, 349, 1125, 1125, 770, 1125, 1125, 1125, 1125, + /* 1880 */ 1125, 1125, 1125, 923, 923, 925, 926, 24, 201, 1125, + /* 1890 */ 280, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 279, 1125, + /* 1900 */ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + /* 1910 */ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + /* 1920 */ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 203, 1125, + /* 1930 */ 1125, 1125, 1125, 1125, 1125, 1125, 204, 1125, 1125, 146, + /* 1940 */ 1125, 1125, 1125, 1125, 1125, 1125, 202, 1125, 1125, 1125, + /* 1950 */ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + /* 1960 */ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + /* 1970 */ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + /* 1980 */ 371, 1125, 1125, 1125, 1125, 274, 506, 1125, 1125, 1125, + /* 1990 */ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + /* 2000 */ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 409, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 174, 226, 227, 228, 226, 227, 228, 172, 145, 146, - /* 10 */ 147, 148, 149, 150, 153, 169, 170, 171, 155, 19, - /* 20 */ 157, 246, 192, 193, 177, 181, 182, 164, 169, 170, - /* 30 */ 171, 31, 164, 153, 190, 174, 175, 187, 153, 39, - /* 40 */ 7, 8, 9, 43, 44, 45, 46, 47, 48, 49, - /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 174, 196, - /* 60 */ 197, 226, 227, 228, 196, 197, 46, 47, 48, 49, - /* 70 */ 209, 208, 19, 226, 227, 228, 208, 174, 177, 26, - /* 80 */ 195, 213, 214, 22, 221, 85, 86, 87, 88, 89, - /* 90 */ 90, 91, 92, 93, 94, 95, 43, 44, 45, 46, - /* 100 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 110 */ 57, 172, 249, 153, 53, 153, 147, 148, 149, 150, - /* 120 */ 22, 23, 69, 103, 155, 19, 157, 226, 227, 228, - /* 130 */ 94, 95, 247, 164, 174, 175, 174, 175, 85, 86, - /* 140 */ 87, 88, 89, 90, 91, 92, 93, 94, 95, 43, - /* 150 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 160 */ 54, 55, 56, 57, 153, 196, 197, 153, 153, 209, - /* 170 */ 210, 209, 210, 67, 95, 161, 237, 208, 19, 165, - /* 180 */ 165, 242, 84, 24, 91, 92, 93, 94, 95, 223, - /* 190 */ 221, 85, 86, 87, 88, 89, 90, 91, 92, 93, - /* 200 */ 94, 95, 43, 44, 45, 46, 47, 48, 49, 50, - /* 210 */ 51, 52, 53, 54, 55, 56, 57, 153, 249, 85, - /* 220 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - /* 230 */ 219, 19, 109, 110, 111, 23, 89, 90, 91, 92, - /* 240 */ 93, 94, 95, 73, 85, 86, 87, 88, 89, 90, - /* 250 */ 91, 92, 93, 94, 95, 43, 44, 45, 46, 47, - /* 260 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 270 */ 153, 22, 23, 101, 173, 26, 104, 105, 106, 109, - /* 280 */ 110, 111, 181, 11, 19, 59, 114, 73, 23, 110, - /* 290 */ 111, 174, 175, 116, 80, 118, 119, 85, 86, 87, - /* 300 */ 88, 89, 90, 91, 92, 93, 94, 95, 43, 44, - /* 310 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - /* 320 */ 55, 56, 57, 109, 98, 99, 100, 101, 83, 153, - /* 330 */ 104, 105, 106, 84, 120, 121, 153, 19, 192, 193, - /* 340 */ 114, 23, 89, 90, 99, 59, 23, 230, 103, 26, - /* 350 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - /* 360 */ 95, 43, 44, 45, 46, 47, 48, 49, 50, 51, - /* 370 */ 52, 53, 54, 55, 56, 57, 153, 91, 153, 134, - /* 380 */ 135, 136, 110, 111, 98, 99, 100, 134, 153, 136, - /* 390 */ 19, 22, 23, 26, 23, 26, 80, 174, 175, 174, - /* 400 */ 175, 59, 219, 85, 86, 87, 88, 89, 90, 91, - /* 410 */ 92, 93, 94, 95, 43, 44, 45, 46, 47, 48, - /* 420 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 16, - /* 430 */ 153, 22, 209, 210, 209, 210, 120, 121, 196, 197, - /* 440 */ 98, 99, 100, 19, 46, 22, 23, 23, 252, 253, - /* 450 */ 208, 174, 175, 84, 219, 153, 85, 86, 87, 88, - /* 460 */ 89, 90, 91, 92, 93, 94, 95, 43, 44, 45, - /* 470 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - /* 480 */ 56, 57, 153, 153, 153, 153, 209, 120, 121, 76, - /* 490 */ 153, 78, 109, 110, 111, 97, 19, 153, 89, 90, - /* 500 */ 198, 59, 183, 174, 175, 174, 175, 84, 153, 85, - /* 510 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - /* 520 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 530 */ 53, 54, 55, 56, 57, 16, 197, 153, 22, 153, - /* 540 */ 153, 99, 198, 12, 153, 196, 197, 208, 153, 153, - /* 550 */ 195, 183, 19, 23, 222, 142, 26, 208, 27, 153, - /* 560 */ 174, 175, 85, 86, 87, 88, 89, 90, 91, 92, - /* 570 */ 93, 94, 95, 42, 188, 59, 43, 44, 45, 46, - /* 580 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 590 */ 57, 195, 22, 198, 63, 76, 153, 78, 167, 168, - /* 600 */ 153, 195, 167, 168, 73, 153, 222, 153, 19, 222, - /* 610 */ 153, 220, 153, 24, 98, 99, 100, 140, 85, 86, - /* 620 */ 87, 88, 89, 90, 91, 92, 93, 94, 95, 59, - /* 630 */ 100, 153, 43, 44, 45, 46, 47, 48, 49, 50, - /* 640 */ 51, 52, 53, 54, 55, 56, 57, 195, 153, 195, - /* 650 */ 153, 153, 174, 175, 26, 125, 120, 121, 153, 213, - /* 660 */ 214, 19, 153, 220, 153, 153, 188, 220, 98, 99, - /* 670 */ 100, 174, 175, 140, 85, 86, 87, 88, 89, 90, - /* 680 */ 91, 92, 93, 94, 95, 43, 44, 45, 46, 47, + /* 0 */ 184, 238, 239, 240, 238, 239, 240, 163, 155, 156, + /* 10 */ 157, 158, 159, 160, 163, 191, 192, 183, 165, 19, + /* 20 */ 167, 258, 202, 203, 200, 191, 163, 174, 184, 185, + /* 30 */ 174, 31, 163, 163, 171, 184, 185, 35, 175, 39, + /* 40 */ 179, 180, 181, 43, 44, 45, 46, 47, 48, 49, + /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 184, 206, + /* 60 */ 207, 163, 206, 207, 220, 163, 16, 163, 66, 163, + /* 70 */ 59, 270, 219, 229, 273, 219, 74, 208, 174, 223, + /* 80 */ 224, 163, 184, 185, 163, 232, 184, 185, 184, 185, + /* 90 */ 184, 185, 92, 93, 94, 95, 96, 97, 98, 99, + /* 100 */ 100, 101, 102, 233, 198, 184, 185, 96, 97, 163, + /* 110 */ 206, 207, 19, 163, 261, 104, 105, 106, 107, 198, + /* 120 */ 109, 119, 220, 219, 220, 274, 275, 77, 117, 79, + /* 130 */ 187, 229, 19, 229, 184, 185, 43, 44, 45, 46, + /* 140 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 150 */ 57, 233, 141, 134, 143, 102, 43, 44, 45, 46, + /* 160 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 170 */ 57, 152, 274, 216, 276, 218, 83, 163, 85, 233, + /* 180 */ 67, 238, 239, 240, 11, 92, 93, 94, 95, 96, + /* 190 */ 97, 98, 99, 100, 101, 102, 19, 54, 55, 56, + /* 200 */ 57, 58, 163, 26, 163, 92, 93, 94, 95, 96, + /* 210 */ 97, 98, 99, 100, 101, 102, 54, 55, 56, 57, + /* 220 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + /* 230 */ 53, 54, 55, 56, 57, 92, 93, 94, 95, 96, + /* 240 */ 97, 98, 99, 100, 101, 102, 69, 96, 97, 98, + /* 250 */ 99, 100, 101, 102, 92, 93, 94, 95, 96, 97, + /* 260 */ 98, 99, 100, 101, 102, 81, 179, 180, 181, 92, + /* 270 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + /* 280 */ 163, 267, 268, 163, 22, 23, 59, 163, 26, 19, + /* 290 */ 117, 118, 175, 109, 24, 59, 92, 93, 94, 95, + /* 300 */ 96, 97, 98, 99, 100, 101, 102, 268, 184, 185, + /* 310 */ 269, 127, 128, 43, 44, 45, 46, 47, 48, 49, + /* 320 */ 50, 51, 52, 53, 54, 55, 56, 57, 157, 158, + /* 330 */ 159, 160, 105, 106, 107, 163, 165, 59, 167, 184, + /* 340 */ 90, 105, 106, 107, 108, 174, 73, 111, 112, 113, + /* 350 */ 19, 22, 163, 91, 81, 163, 106, 121, 81, 132, + /* 360 */ 110, 16, 92, 93, 94, 95, 96, 97, 98, 99, + /* 370 */ 100, 101, 102, 184, 185, 255, 98, 206, 207, 26, + /* 380 */ 101, 102, 19, 105, 106, 107, 23, 198, 59, 116, + /* 390 */ 219, 141, 142, 143, 24, 163, 187, 205, 274, 275, + /* 400 */ 127, 128, 182, 232, 127, 128, 43, 44, 45, 46, + /* 410 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 420 */ 57, 158, 77, 160, 79, 59, 26, 182, 165, 59, + /* 430 */ 167, 199, 261, 102, 105, 106, 107, 174, 72, 108, + /* 440 */ 109, 110, 111, 112, 113, 114, 59, 238, 239, 240, + /* 450 */ 123, 120, 125, 126, 163, 92, 93, 94, 95, 96, + /* 460 */ 97, 98, 99, 100, 101, 102, 163, 163, 163, 206, + /* 470 */ 207, 105, 106, 107, 254, 19, 106, 90, 197, 23, + /* 480 */ 127, 128, 219, 238, 239, 240, 22, 184, 185, 184, + /* 490 */ 185, 22, 105, 106, 149, 232, 205, 110, 163, 43, + /* 500 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + /* 510 */ 54, 55, 56, 57, 98, 99, 100, 101, 102, 184, + /* 520 */ 185, 163, 53, 59, 261, 220, 117, 118, 141, 142, + /* 530 */ 143, 131, 174, 59, 229, 116, 117, 118, 163, 59, + /* 540 */ 163, 163, 184, 185, 59, 242, 72, 22, 92, 93, + /* 550 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 184, + /* 560 */ 185, 24, 184, 185, 206, 207, 202, 203, 19, 105, + /* 570 */ 106, 107, 23, 198, 22, 174, 198, 219, 220, 105, + /* 580 */ 106, 107, 96, 97, 59, 105, 106, 107, 22, 174, + /* 590 */ 59, 106, 43, 44, 45, 46, 47, 48, 49, 50, + /* 600 */ 51, 52, 53, 54, 55, 56, 57, 206, 207, 12, + /* 610 */ 108, 59, 132, 111, 112, 113, 46, 47, 48, 49, + /* 620 */ 219, 206, 207, 121, 27, 59, 163, 141, 207, 143, + /* 630 */ 105, 106, 107, 163, 219, 234, 105, 106, 107, 42, + /* 640 */ 219, 92, 93, 94, 95, 96, 97, 98, 99, 100, + /* 650 */ 101, 102, 76, 163, 184, 185, 163, 105, 106, 107, + /* 660 */ 63, 19, 86, 163, 163, 23, 163, 130, 205, 21, + /* 670 */ 73, 105, 106, 107, 184, 185, 163, 184, 185, 237, + /* 680 */ 110, 180, 181, 180, 181, 43, 44, 45, 46, 47, /* 690 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 700 */ 243, 189, 243, 198, 172, 250, 251, 117, 31, 201, - /* 710 */ 26, 139, 122, 141, 19, 220, 39, 29, 220, 211, - /* 720 */ 24, 33, 153, 164, 153, 164, 19, 85, 86, 87, - /* 730 */ 88, 89, 90, 91, 92, 93, 94, 95, 43, 44, - /* 740 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - /* 750 */ 55, 56, 57, 65, 243, 196, 197, 196, 197, 131, - /* 760 */ 189, 22, 103, 24, 153, 23, 19, 208, 26, 208, - /* 770 */ 102, 103, 113, 23, 242, 22, 26, 134, 164, 136, - /* 780 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - /* 790 */ 95, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 800 */ 53, 54, 55, 56, 57, 98, 153, 153, 124, 153, - /* 810 */ 196, 197, 23, 23, 61, 26, 26, 19, 23, 123, - /* 820 */ 23, 26, 208, 26, 7, 8, 153, 22, 174, 175, - /* 830 */ 174, 175, 85, 86, 87, 88, 89, 90, 91, 92, - /* 840 */ 93, 94, 95, 45, 46, 47, 48, 49, 50, 51, - /* 850 */ 52, 53, 54, 55, 56, 57, 19, 20, 59, 22, - /* 860 */ 111, 59, 164, 23, 59, 23, 26, 153, 26, 59, - /* 870 */ 153, 72, 23, 36, 72, 26, 35, 23, 59, 134, - /* 880 */ 26, 136, 133, 85, 86, 87, 88, 89, 90, 91, - /* 890 */ 92, 93, 94, 95, 196, 197, 59, 98, 99, 100, - /* 900 */ 98, 99, 100, 98, 99, 100, 208, 66, 71, 99, - /* 910 */ 54, 55, 56, 57, 58, 74, 153, 80, 99, 19, - /* 920 */ 83, 223, 23, 26, 153, 26, 89, 90, 54, 55, - /* 930 */ 56, 57, 153, 96, 153, 98, 99, 100, 22, 153, - /* 940 */ 103, 85, 86, 87, 88, 89, 90, 91, 92, 93, - /* 950 */ 94, 95, 183, 112, 158, 174, 175, 120, 121, 85, - /* 960 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - /* 970 */ 215, 134, 135, 136, 137, 138, 0, 1, 2, 23, - /* 980 */ 21, 5, 26, 153, 22, 59, 10, 11, 12, 13, - /* 990 */ 14, 1, 2, 17, 212, 5, 153, 153, 98, 153, - /* 1000 */ 10, 11, 12, 13, 14, 108, 30, 17, 32, 193, - /* 1010 */ 153, 59, 153, 153, 170, 171, 40, 174, 175, 153, - /* 1020 */ 30, 59, 32, 19, 20, 99, 22, 170, 171, 233, - /* 1030 */ 40, 188, 236, 174, 175, 153, 153, 153, 79, 123, - /* 1040 */ 36, 89, 90, 153, 153, 153, 70, 188, 153, 97, - /* 1050 */ 98, 99, 100, 77, 102, 153, 80, 81, 174, 175, - /* 1060 */ 70, 99, 110, 59, 105, 174, 175, 77, 153, 238, - /* 1070 */ 80, 81, 188, 19, 20, 71, 22, 153, 153, 235, - /* 1080 */ 19, 22, 164, 24, 59, 153, 134, 83, 136, 153, - /* 1090 */ 36, 115, 235, 89, 90, 91, 120, 121, 153, 153, - /* 1100 */ 96, 142, 98, 99, 100, 115, 59, 103, 83, 239, - /* 1110 */ 120, 121, 199, 59, 196, 197, 153, 153, 59, 143, - /* 1120 */ 174, 175, 153, 98, 99, 71, 208, 153, 103, 165, - /* 1130 */ 153, 19, 20, 143, 22, 153, 153, 83, 134, 135, - /* 1140 */ 136, 137, 138, 89, 90, 98, 99, 100, 36, 185, - /* 1150 */ 96, 187, 98, 99, 100, 91, 95, 103, 99, 134, - /* 1160 */ 135, 136, 101, 102, 103, 104, 105, 106, 107, 153, - /* 1170 */ 26, 59, 125, 164, 113, 153, 153, 153, 212, 12, - /* 1180 */ 19, 117, 153, 71, 153, 212, 122, 164, 134, 135, - /* 1190 */ 136, 137, 138, 212, 27, 83, 212, 174, 175, 59, - /* 1200 */ 200, 89, 90, 174, 175, 196, 197, 46, 96, 42, - /* 1210 */ 98, 99, 100, 172, 151, 103, 5, 208, 203, 196, - /* 1220 */ 197, 10, 11, 12, 13, 14, 216, 216, 17, 244, - /* 1230 */ 63, 208, 209, 210, 153, 80, 24, 203, 98, 99, - /* 1240 */ 100, 30, 22, 32, 100, 164, 134, 135, 136, 137, - /* 1250 */ 138, 40, 148, 164, 150, 174, 175, 102, 97, 155, - /* 1260 */ 203, 157, 164, 244, 178, 125, 186, 182, 164, 125, - /* 1270 */ 177, 59, 177, 177, 113, 120, 121, 196, 197, 59, - /* 1280 */ 232, 70, 153, 216, 202, 196, 197, 153, 77, 208, - /* 1290 */ 209, 80, 81, 156, 196, 197, 60, 208, 248, 200, - /* 1300 */ 196, 197, 153, 174, 175, 123, 208, 153, 174, 175, - /* 1310 */ 160, 99, 208, 153, 38, 153, 160, 153, 98, 99, - /* 1320 */ 100, 153, 245, 174, 175, 221, 115, 153, 174, 175, - /* 1330 */ 153, 120, 121, 245, 174, 175, 174, 175, 174, 175, - /* 1340 */ 160, 153, 174, 175, 153, 225, 153, 22, 174, 175, - /* 1350 */ 97, 174, 175, 249, 143, 153, 224, 153, 43, 153, - /* 1360 */ 191, 153, 174, 175, 18, 174, 175, 174, 175, 153, - /* 1370 */ 131, 153, 194, 203, 153, 194, 174, 175, 174, 175, - /* 1380 */ 174, 175, 174, 175, 153, 160, 153, 18, 153, 194, - /* 1390 */ 174, 175, 174, 175, 153, 174, 175, 153, 225, 153, - /* 1400 */ 203, 153, 159, 153, 194, 174, 175, 174, 175, 174, - /* 1410 */ 175, 153, 203, 153, 224, 174, 175, 191, 174, 175, - /* 1420 */ 174, 175, 174, 175, 174, 175, 203, 160, 153, 191, - /* 1430 */ 153, 159, 174, 175, 174, 175, 153, 139, 62, 153, - /* 1440 */ 241, 153, 160, 153, 159, 153, 22, 240, 179, 174, - /* 1450 */ 175, 174, 175, 160, 159, 97, 160, 174, 175, 159, - /* 1460 */ 174, 175, 174, 175, 174, 175, 174, 175, 179, 64, - /* 1470 */ 176, 184, 108, 176, 95, 176, 234, 126, 176, 234, - /* 1480 */ 179, 178, 176, 176, 176, 97, 218, 217, 184, 179, - /* 1490 */ 179, 218, 218, 160, 22, 217, 217, 160, 218, 139, - /* 1500 */ 229, 217, 130, 129, 127, 25, 128, 163, 26, 162, - /* 1510 */ 13, 206, 231, 154, 6, 154, 207, 205, 204, 203, - /* 1520 */ 152, 166, 152, 152, 172, 172, 172, 4, 172, 166, - /* 1530 */ 180, 166, 3, 22, 172, 144, 15, 180, 172, 172, - /* 1540 */ 82, 16, 23, 23, 121, 254, 132, 172, 112, 124, - /* 1550 */ 24, 20, 126, 16, 1, 124, 112, 61, 53, 37, - /* 1560 */ 133, 132, 53, 53, 112, 53, 98, 254, 251, 34, - /* 1570 */ 123, 1, 5, 22, 97, 142, 26, 75, 123, 41, - /* 1580 */ 97, 68, 68, 24, 20, 19, 113, 22, 107, 28, - /* 1590 */ 22, 67, 23, 22, 22, 67, 22, 67, 23, 37, - /* 1600 */ 23, 23, 26, 23, 22, 24, 23, 22, 24, 123, - /* 1610 */ 23, 23, 22, 98, 125, 26, 11, 23, 26, 23, - /* 1620 */ 34, 23, 23, 23, 23, 34, 22, 34, 26, 22, - /* 1630 */ 22, 15, 23, 23, 22, 117, 23, 22, 1, 123, - /* 1640 */ 26, 23, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1650 */ 123, 255, 255, 255, 255, 123, 123, 255, 255, 255, - /* 1660 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1670 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1680 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1690 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1700 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1710 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1720 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1730 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1740 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1750 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1760 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1770 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1780 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1790 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* 1800 */ 255, 255, + /* 700 */ 174, 163, 163, 22, 23, 163, 163, 26, 22, 23, + /* 710 */ 220, 29, 73, 220, 272, 33, 22, 163, 24, 19, + /* 720 */ 174, 208, 259, 184, 185, 19, 184, 185, 80, 175, + /* 730 */ 230, 174, 206, 207, 92, 93, 94, 95, 96, 97, + /* 740 */ 98, 99, 100, 101, 102, 219, 46, 65, 247, 195, + /* 750 */ 247, 197, 206, 207, 19, 116, 117, 118, 23, 220, + /* 760 */ 112, 174, 220, 206, 207, 219, 22, 174, 24, 174, + /* 770 */ 22, 23, 91, 264, 265, 168, 219, 91, 43, 44, + /* 780 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + /* 790 */ 55, 56, 57, 206, 207, 12, 163, 149, 255, 206, + /* 800 */ 207, 206, 207, 59, 104, 23, 219, 163, 26, 163, + /* 810 */ 27, 105, 219, 163, 219, 163, 211, 184, 185, 163, + /* 820 */ 120, 163, 146, 163, 148, 42, 221, 92, 93, 94, + /* 830 */ 95, 96, 97, 98, 99, 100, 101, 102, 163, 91, + /* 840 */ 184, 185, 184, 185, 184, 185, 63, 19, 163, 205, + /* 850 */ 106, 23, 245, 163, 208, 248, 116, 117, 118, 184, + /* 860 */ 185, 163, 163, 7, 8, 9, 163, 19, 26, 184, + /* 870 */ 185, 43, 44, 45, 46, 47, 48, 49, 50, 51, + /* 880 */ 52, 53, 54, 55, 56, 57, 163, 184, 185, 107, + /* 890 */ 163, 43, 44, 45, 46, 47, 48, 49, 50, 51, + /* 900 */ 52, 53, 54, 55, 56, 57, 208, 255, 177, 178, + /* 910 */ 163, 184, 185, 163, 132, 163, 141, 163, 143, 22, + /* 920 */ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + /* 930 */ 102, 184, 185, 163, 184, 185, 184, 185, 184, 185, + /* 940 */ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + /* 950 */ 102, 163, 163, 163, 184, 185, 163, 115, 163, 163, + /* 960 */ 163, 163, 15, 163, 163, 163, 163, 163, 23, 163, + /* 970 */ 163, 26, 184, 185, 184, 185, 163, 184, 185, 184, + /* 980 */ 185, 184, 185, 163, 184, 185, 184, 185, 184, 185, + /* 990 */ 184, 185, 163, 96, 97, 147, 163, 184, 185, 163, + /* 1000 */ 199, 163, 163, 205, 184, 185, 163, 60, 163, 141, + /* 1010 */ 163, 143, 163, 184, 185, 19, 163, 184, 185, 230, + /* 1020 */ 184, 185, 184, 185, 206, 207, 230, 184, 185, 184, + /* 1030 */ 185, 184, 185, 184, 185, 19, 163, 219, 231, 43, + /* 1040 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + /* 1050 */ 54, 55, 56, 57, 163, 26, 163, 184, 185, 43, + /* 1060 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + /* 1070 */ 54, 55, 56, 57, 163, 184, 185, 184, 185, 163, + /* 1080 */ 182, 163, 163, 163, 163, 163, 22, 163, 92, 93, + /* 1090 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 163, + /* 1100 */ 184, 185, 184, 185, 163, 184, 185, 163, 92, 93, + /* 1110 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 163, + /* 1120 */ 184, 185, 98, 59, 163, 184, 185, 205, 184, 185, + /* 1130 */ 23, 206, 207, 26, 163, 26, 107, 153, 154, 237, + /* 1140 */ 184, 185, 231, 147, 219, 184, 185, 249, 124, 127, + /* 1150 */ 128, 231, 254, 129, 163, 231, 177, 178, 262, 263, + /* 1160 */ 118, 132, 19, 19, 46, 223, 224, 31, 24, 23, + /* 1170 */ 106, 124, 26, 22, 272, 39, 129, 23, 109, 110, + /* 1180 */ 26, 163, 140, 19, 22, 234, 59, 43, 44, 45, + /* 1190 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + /* 1200 */ 56, 57, 231, 7, 8, 193, 59, 43, 44, 45, + /* 1210 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + /* 1220 */ 56, 57, 104, 61, 23, 23, 23, 26, 26, 26, + /* 1230 */ 163, 23, 23, 106, 26, 26, 92, 93, 94, 95, + /* 1240 */ 96, 97, 98, 99, 100, 101, 102, 138, 105, 23, + /* 1250 */ 59, 23, 26, 106, 26, 163, 92, 93, 94, 95, + /* 1260 */ 96, 97, 98, 99, 100, 101, 102, 110, 23, 23, + /* 1270 */ 23, 26, 26, 26, 163, 163, 19, 120, 163, 163, + /* 1280 */ 163, 130, 163, 163, 163, 163, 163, 163, 163, 193, + /* 1290 */ 193, 163, 163, 163, 163, 225, 19, 106, 163, 222, + /* 1300 */ 163, 44, 45, 46, 47, 48, 49, 50, 51, 52, + /* 1310 */ 53, 54, 55, 56, 57, 163, 163, 203, 163, 163, + /* 1320 */ 222, 163, 45, 46, 47, 48, 49, 50, 51, 52, + /* 1330 */ 53, 54, 55, 56, 57, 163, 163, 163, 163, 163, + /* 1340 */ 251, 250, 209, 19, 20, 182, 22, 161, 222, 92, + /* 1350 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + /* 1360 */ 36, 222, 222, 260, 226, 188, 256, 226, 187, 92, + /* 1370 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + /* 1380 */ 210, 213, 213, 59, 213, 196, 192, 187, 256, 244, + /* 1390 */ 212, 187, 226, 19, 20, 71, 22, 210, 166, 60, + /* 1400 */ 130, 170, 260, 170, 38, 81, 257, 257, 170, 104, + /* 1410 */ 36, 22, 43, 201, 90, 236, 138, 235, 213, 18, + /* 1420 */ 96, 97, 48, 204, 204, 204, 204, 103, 170, 105, + /* 1430 */ 106, 107, 18, 59, 110, 169, 213, 213, 201, 170, + /* 1440 */ 201, 169, 236, 213, 146, 71, 235, 62, 253, 252, + /* 1450 */ 170, 127, 128, 169, 22, 170, 82, 189, 169, 104, + /* 1460 */ 170, 87, 169, 189, 90, 141, 142, 143, 144, 145, + /* 1470 */ 96, 97, 186, 186, 186, 64, 194, 103, 186, 105, + /* 1480 */ 106, 107, 115, 189, 110, 188, 186, 186, 19, 20, + /* 1490 */ 194, 22, 186, 189, 102, 246, 246, 189, 133, 228, + /* 1500 */ 104, 228, 227, 227, 170, 36, 134, 228, 227, 19, + /* 1510 */ 20, 228, 22, 84, 271, 141, 142, 143, 144, 145, + /* 1520 */ 0, 1, 2, 216, 22, 5, 36, 137, 59, 227, + /* 1530 */ 10, 11, 12, 13, 14, 217, 269, 17, 216, 22, + /* 1540 */ 71, 170, 243, 146, 241, 217, 136, 215, 135, 59, + /* 1550 */ 30, 82, 32, 25, 214, 213, 87, 173, 26, 90, + /* 1560 */ 40, 71, 13, 172, 164, 96, 97, 164, 6, 162, + /* 1570 */ 162, 162, 103, 263, 105, 106, 107, 266, 266, 110, + /* 1580 */ 90, 176, 176, 190, 182, 190, 96, 97, 98, 4, + /* 1590 */ 70, 176, 3, 103, 182, 105, 106, 107, 78, 182, + /* 1600 */ 110, 81, 182, 182, 182, 182, 182, 151, 88, 22, + /* 1610 */ 141, 142, 143, 144, 145, 15, 89, 16, 23, 23, + /* 1620 */ 128, 19, 20, 139, 22, 119, 131, 24, 20, 133, + /* 1630 */ 16, 141, 142, 143, 144, 145, 1, 140, 36, 131, + /* 1640 */ 119, 61, 122, 37, 139, 53, 53, 127, 128, 119, + /* 1650 */ 53, 53, 105, 34, 130, 1, 5, 104, 22, 149, + /* 1660 */ 26, 59, 68, 75, 41, 130, 24, 68, 104, 20, + /* 1670 */ 150, 19, 120, 71, 114, 22, 67, 22, 22, 67, + /* 1680 */ 23, 22, 22, 67, 82, 37, 28, 23, 138, 87, + /* 1690 */ 22, 153, 90, 23, 23, 26, 23, 22, 96, 97, + /* 1700 */ 24, 23, 22, 24, 130, 103, 23, 105, 106, 107, + /* 1710 */ 1, 2, 110, 23, 5, 105, 34, 22, 132, 10, + /* 1720 */ 11, 12, 13, 14, 26, 34, 17, 34, 85, 83, + /* 1730 */ 44, 19, 20, 23, 22, 24, 75, 34, 23, 30, + /* 1740 */ 26, 32, 26, 141, 142, 143, 144, 145, 36, 40, + /* 1750 */ 23, 23, 23, 23, 11, 23, 22, 26, 22, 22, + /* 1760 */ 22, 19, 20, 23, 22, 26, 15, 23, 22, 124, + /* 1770 */ 130, 59, 23, 1, 130, 277, 277, 130, 36, 70, + /* 1780 */ 130, 277, 277, 71, 277, 277, 277, 78, 277, 277, + /* 1790 */ 81, 277, 277, 277, 277, 277, 277, 88, 277, 277, + /* 1800 */ 277, 59, 90, 277, 277, 277, 277, 277, 96, 97, + /* 1810 */ 277, 277, 277, 71, 277, 103, 277, 105, 106, 107, + /* 1820 */ 277, 277, 110, 277, 277, 277, 277, 277, 277, 277, + /* 1830 */ 277, 122, 90, 277, 277, 277, 127, 128, 96, 97, + /* 1840 */ 277, 277, 277, 277, 277, 103, 277, 105, 106, 107, + /* 1850 */ 277, 277, 110, 141, 142, 143, 144, 145, 277, 150, + /* 1860 */ 277, 277, 277, 5, 277, 277, 277, 277, 10, 11, + /* 1870 */ 12, 13, 14, 277, 277, 17, 277, 277, 277, 277, + /* 1880 */ 277, 277, 277, 141, 142, 143, 144, 145, 30, 277, + /* 1890 */ 32, 277, 277, 277, 277, 277, 277, 277, 40, 277, + /* 1900 */ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + /* 1910 */ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + /* 1920 */ 277, 277, 277, 277, 277, 277, 277, 277, 70, 277, + /* 1930 */ 277, 277, 277, 277, 277, 277, 78, 277, 277, 81, + /* 1940 */ 277, 277, 277, 277, 277, 277, 88, 277, 277, 277, + /* 1950 */ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + /* 1960 */ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + /* 1970 */ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + /* 1980 */ 122, 277, 277, 277, 277, 127, 128, 277, 277, 277, + /* 1990 */ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + /* 2000 */ 277, 277, 277, 277, 277, 277, 277, 277, 150, 277, + /* 2010 */ 277, 277, 277, 277, 277, 277, 277, 277, 277, }; -#define YY_SHIFT_COUNT (489) +#define YY_SHIFT_COUNT (520) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (1637) +#define YY_SHIFT_MAX (1858) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 990, 976, 1211, 837, 837, 316, 1054, 1054, 1054, 1054, - /* 10 */ 214, 0, 0, 106, 642, 1054, 1054, 1054, 1054, 1054, - /* 20 */ 1054, 1054, 1054, 952, 952, 226, 1155, 316, 316, 316, - /* 30 */ 316, 316, 316, 53, 159, 212, 265, 318, 371, 424, - /* 40 */ 477, 533, 589, 642, 642, 642, 642, 642, 642, 642, - /* 50 */ 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - /* 60 */ 695, 642, 747, 798, 798, 1004, 1054, 1054, 1054, 1054, - /* 70 */ 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, - /* 80 */ 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, - /* 90 */ 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1112, 1054, 1054, - /* 100 */ 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, - /* 110 */ 1054, 856, 874, 874, 874, 874, 874, 134, 147, 93, - /* 120 */ 342, 959, 1161, 253, 253, 342, 367, 367, 367, 367, - /* 130 */ 179, 36, 79, 1657, 1657, 1657, 1061, 1061, 1061, 516, - /* 140 */ 799, 516, 516, 531, 531, 802, 249, 369, 342, 342, - /* 150 */ 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, - /* 160 */ 342, 342, 342, 342, 342, 342, 342, 342, 342, 272, - /* 170 */ 442, 442, 536, 1657, 1657, 1657, 1025, 245, 245, 570, - /* 180 */ 172, 286, 805, 1047, 1140, 1220, 342, 342, 342, 342, - /* 190 */ 342, 342, 342, 342, 170, 342, 342, 342, 342, 342, - /* 200 */ 342, 342, 342, 342, 342, 342, 342, 841, 841, 841, - /* 210 */ 342, 342, 342, 342, 530, 342, 342, 342, 1059, 342, - /* 220 */ 342, 1167, 342, 342, 342, 342, 342, 342, 342, 342, - /* 230 */ 123, 688, 177, 1212, 1212, 1212, 1212, 1144, 177, 177, - /* 240 */ 1064, 409, 33, 628, 707, 707, 900, 628, 628, 900, - /* 250 */ 897, 323, 398, 677, 677, 677, 707, 572, 684, 590, - /* 260 */ 739, 1236, 1182, 1182, 1276, 1276, 1182, 1253, 1325, 1315, - /* 270 */ 1239, 1346, 1346, 1346, 1346, 1182, 1369, 1239, 1239, 1253, - /* 280 */ 1325, 1315, 1315, 1239, 1182, 1369, 1298, 1376, 1182, 1369, - /* 290 */ 1424, 1182, 1369, 1182, 1369, 1424, 1358, 1358, 1358, 1405, - /* 300 */ 1424, 1358, 1364, 1358, 1405, 1358, 1358, 1424, 1379, 1379, - /* 310 */ 1424, 1351, 1388, 1351, 1388, 1351, 1388, 1351, 1388, 1182, - /* 320 */ 1472, 1182, 1360, 1372, 1377, 1374, 1378, 1239, 1480, 1482, - /* 330 */ 1497, 1497, 1508, 1508, 1508, 1657, 1657, 1657, 1657, 1657, - /* 340 */ 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, - /* 350 */ 1657, 20, 413, 98, 423, 519, 383, 962, 742, 61, - /* 360 */ 696, 749, 750, 753, 789, 790, 795, 797, 840, 842, - /* 370 */ 810, 668, 817, 659, 819, 849, 854, 899, 643, 745, - /* 380 */ 956, 926, 916, 1523, 1529, 1511, 1391, 1521, 1458, 1525, - /* 390 */ 1519, 1520, 1423, 1414, 1436, 1526, 1425, 1531, 1426, 1537, - /* 400 */ 1553, 1431, 1427, 1444, 1496, 1522, 1429, 1505, 1509, 1510, - /* 410 */ 1512, 1452, 1468, 1535, 1447, 1570, 1567, 1551, 1477, 1433, - /* 420 */ 1513, 1550, 1514, 1502, 1538, 1455, 1483, 1559, 1564, 1566, - /* 430 */ 1473, 1481, 1565, 1524, 1568, 1571, 1569, 1572, 1528, 1561, - /* 440 */ 1574, 1530, 1562, 1575, 1577, 1578, 1576, 1580, 1582, 1581, - /* 450 */ 1583, 1585, 1584, 1486, 1587, 1588, 1515, 1586, 1590, 1489, - /* 460 */ 1589, 1591, 1592, 1593, 1594, 1596, 1598, 1589, 1599, 1600, - /* 470 */ 1602, 1601, 1604, 1605, 1607, 1608, 1609, 1610, 1612, 1613, - /* 480 */ 1615, 1614, 1518, 1516, 1527, 1532, 1533, 1618, 1616, 1637, -}; -#define YY_REDUCE_COUNT (350) -#define YY_REDUCE_MIN (-225) -#define YY_REDUCE_MAX (1375) + /* 0 */ 1709, 1520, 1858, 1324, 1324, 277, 1374, 1469, 1602, 1712, + /* 10 */ 1712, 1712, 273, 0, 0, 113, 1016, 1712, 1712, 1712, + /* 20 */ 1712, 1712, 1712, 1712, 1712, 1712, 1712, 11, 11, 236, + /* 30 */ 184, 277, 277, 277, 277, 277, 277, 93, 177, 270, + /* 40 */ 363, 456, 549, 642, 735, 828, 848, 996, 1144, 1016, + /* 50 */ 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, + /* 60 */ 1016, 1016, 1016, 1016, 1016, 1016, 1164, 1016, 1257, 1277, + /* 70 */ 1277, 1490, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + /* 80 */ 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + /* 90 */ 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + /* 100 */ 1712, 1712, 1712, 1742, 1712, 1712, 1712, 1712, 1712, 1712, + /* 110 */ 1712, 1712, 1712, 1712, 1712, 1712, 1712, 143, 162, 162, + /* 120 */ 162, 162, 162, 204, 151, 416, 531, 648, 700, 531, + /* 130 */ 486, 486, 531, 353, 353, 353, 353, 409, 279, 53, + /* 140 */ 2009, 2009, 331, 331, 331, 329, 366, 329, 329, 597, + /* 150 */ 597, 464, 474, 262, 681, 531, 531, 531, 531, 531, + /* 160 */ 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, + /* 170 */ 531, 531, 531, 531, 531, 531, 531, 173, 485, 984, + /* 180 */ 984, 576, 485, 19, 1022, 2009, 2009, 2009, 387, 250, + /* 190 */ 250, 525, 502, 278, 552, 227, 480, 566, 531, 531, + /* 200 */ 531, 531, 531, 531, 531, 531, 531, 531, 639, 531, + /* 210 */ 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, + /* 220 */ 531, 2, 2, 2, 531, 531, 531, 531, 782, 531, + /* 230 */ 531, 531, 744, 531, 531, 783, 531, 531, 531, 531, + /* 240 */ 531, 531, 531, 531, 419, 682, 327, 370, 370, 370, + /* 250 */ 370, 1029, 327, 327, 1024, 897, 856, 947, 1109, 706, + /* 260 */ 706, 1143, 1109, 1109, 1143, 842, 945, 1118, 1136, 1136, + /* 270 */ 1136, 706, 676, 400, 1047, 694, 1339, 1270, 1270, 1366, + /* 280 */ 1366, 1270, 1305, 1389, 1369, 1278, 1401, 1401, 1401, 1401, + /* 290 */ 1270, 1414, 1278, 1278, 1305, 1389, 1369, 1369, 1278, 1270, + /* 300 */ 1414, 1298, 1385, 1270, 1414, 1432, 1270, 1414, 1270, 1414, + /* 310 */ 1432, 1355, 1355, 1355, 1411, 1432, 1355, 1367, 1355, 1411, + /* 320 */ 1355, 1355, 1432, 1392, 1392, 1432, 1365, 1396, 1365, 1396, + /* 330 */ 1365, 1396, 1365, 1396, 1270, 1372, 1429, 1502, 1390, 1372, + /* 340 */ 1517, 1270, 1397, 1390, 1410, 1413, 1278, 1528, 1532, 1549, + /* 350 */ 1549, 1562, 1562, 1562, 2009, 2009, 2009, 2009, 2009, 2009, + /* 360 */ 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, + /* 370 */ 570, 345, 686, 748, 50, 740, 1064, 1107, 469, 537, + /* 380 */ 1042, 1146, 1162, 1154, 1201, 1202, 1203, 1208, 1209, 1127, + /* 390 */ 1069, 1196, 1157, 1147, 1226, 1228, 1245, 775, 868, 1246, + /* 400 */ 1247, 1191, 1151, 1585, 1589, 1587, 1456, 1600, 1527, 1601, + /* 410 */ 1595, 1596, 1492, 1484, 1506, 1603, 1495, 1608, 1496, 1614, + /* 420 */ 1635, 1508, 1497, 1521, 1580, 1606, 1505, 1592, 1593, 1597, + /* 430 */ 1598, 1530, 1547, 1619, 1524, 1654, 1651, 1636, 1553, 1510, + /* 440 */ 1594, 1634, 1599, 1588, 1623, 1535, 1564, 1642, 1649, 1652, + /* 450 */ 1552, 1560, 1653, 1609, 1655, 1656, 1657, 1659, 1612, 1658, + /* 460 */ 1660, 1616, 1648, 1664, 1550, 1668, 1538, 1670, 1671, 1669, + /* 470 */ 1673, 1675, 1676, 1678, 1680, 1679, 1574, 1683, 1690, 1610, + /* 480 */ 1682, 1695, 1586, 1698, 1691, 1698, 1693, 1643, 1661, 1646, + /* 490 */ 1686, 1710, 1711, 1714, 1716, 1703, 1715, 1698, 1727, 1728, + /* 500 */ 1729, 1730, 1731, 1732, 1734, 1743, 1736, 1737, 1740, 1744, + /* 510 */ 1738, 1746, 1739, 1645, 1640, 1644, 1647, 1650, 1749, 1751, + /* 520 */ 1772, +}; +#define YY_REDUCE_COUNT (369) +#define YY_REDUCE_MIN (-237) +#define YY_REDUCE_MAX (1424) static const short yy_reduce_ofst[] = { - /* 0 */ -137, -31, 1104, 1023, 1081, -132, -40, -38, 223, 225, - /* 10 */ 698, -153, -99, -225, -165, 386, 478, 843, 859, -139, - /* 20 */ 884, 117, 277, 844, 857, 964, 559, 561, 614, 918, - /* 30 */ 1009, 1089, 1098, -222, -222, -222, -222, -222, -222, -222, - /* 40 */ -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, - /* 50 */ -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, - /* 60 */ -222, -222, -222, -222, -222, 329, 331, 497, 654, 656, - /* 70 */ 781, 891, 946, 1029, 1129, 1134, 1149, 1154, 1160, 1162, - /* 80 */ 1164, 1168, 1174, 1177, 1188, 1191, 1193, 1202, 1204, 1206, - /* 90 */ 1208, 1216, 1218, 1221, 1231, 1233, 1235, 1241, 1244, 1246, - /* 100 */ 1248, 1250, 1258, 1260, 1275, 1277, 1283, 1286, 1288, 1290, - /* 110 */ 1292, -222, -222, -222, -222, -222, -222, -222, -222, -222, - /* 120 */ -115, 796, -156, -154, -141, 14, 242, 349, 242, 349, - /* 130 */ -61, -222, -222, -222, -222, -222, 101, 101, 101, 332, - /* 140 */ 302, 384, 387, -170, 146, 344, 196, 196, 15, 11, - /* 150 */ 183, 235, 395, 355, 396, 406, 452, 457, 391, 459, - /* 160 */ 443, 447, 511, 495, 454, 512, 505, 571, 498, 532, - /* 170 */ 431, 435, 339, 455, 446, 508, -174, -116, -97, -120, - /* 180 */ -150, 64, 176, 330, 337, 509, 569, 611, 653, 673, - /* 190 */ 714, 717, 763, 771, -34, 779, 786, 830, 846, 860, - /* 200 */ 866, 882, 883, 890, 892, 895, 902, 319, 368, 769, - /* 210 */ 915, 924, 925, 932, 755, 936, 945, 963, 782, 969, - /* 220 */ 974, 816, 977, 64, 982, 983, 1016, 1022, 1024, 1031, - /* 230 */ 870, 831, 913, 966, 973, 981, 984, 755, 913, 913, - /* 240 */ 1000, 1041, 1063, 1015, 1010, 1011, 985, 1034, 1057, 1019, - /* 250 */ 1086, 1080, 1085, 1093, 1095, 1096, 1067, 1048, 1082, 1099, - /* 260 */ 1137, 1050, 1150, 1156, 1077, 1088, 1180, 1120, 1132, 1169, - /* 270 */ 1170, 1178, 1181, 1195, 1210, 1225, 1243, 1197, 1209, 1173, - /* 280 */ 1190, 1226, 1238, 1223, 1267, 1272, 1199, 1207, 1282, 1285, - /* 290 */ 1269, 1293, 1295, 1296, 1300, 1289, 1294, 1297, 1299, 1287, - /* 300 */ 1301, 1302, 1303, 1306, 1304, 1307, 1308, 1310, 1242, 1245, - /* 310 */ 1311, 1268, 1270, 1273, 1278, 1274, 1279, 1280, 1284, 1333, - /* 320 */ 1271, 1337, 1281, 1309, 1305, 1312, 1314, 1316, 1344, 1347, - /* 330 */ 1359, 1361, 1368, 1370, 1371, 1291, 1313, 1317, 1355, 1352, - /* 340 */ 1353, 1354, 1356, 1363, 1350, 1357, 1362, 1366, 1367, 1375, - /* 350 */ 1365, + /* 0 */ -147, 171, 263, -96, 358, -144, -149, -102, 124, -156, + /* 10 */ -98, 305, 401, -57, 209, -237, 245, -94, -79, 189, + /* 20 */ 375, 490, 493, 378, 303, 539, 542, 501, 503, 554, + /* 30 */ 415, 526, 546, 557, 587, 593, 595, -234, -234, -234, + /* 40 */ -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + /* 50 */ -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + /* 60 */ -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + /* 70 */ -234, -50, 335, 470, 633, 656, 658, 660, 675, 685, + /* 80 */ 703, 727, 747, 750, 752, 754, 770, 788, 790, 793, + /* 90 */ 795, 797, 800, 802, 804, 806, 813, 820, 829, 833, + /* 100 */ 836, 838, 843, 845, 847, 849, 873, 891, 893, 916, + /* 110 */ 918, 921, 936, 941, 944, 956, 961, -234, -234, -234, + /* 120 */ -234, -234, -234, -234, -234, -234, 463, 607, -176, 14, + /* 130 */ -139, 87, -137, 818, 925, 818, 925, 898, -234, -234, + /* 140 */ -234, -234, -166, -166, -166, -130, -131, -82, -54, -180, + /* 150 */ 364, 41, 513, 509, 509, 117, 500, 789, 796, 646, + /* 160 */ 192, 291, 644, 798, 120, 807, 543, 911, 920, 652, + /* 170 */ 924, 922, 232, 698, 801, 971, 39, 220, 731, 442, + /* 180 */ 902, -199, 979, -43, 421, 896, 942, 605, -184, -126, + /* 190 */ 155, 172, 281, 304, 377, 538, 650, 690, 699, 723, + /* 200 */ 803, 839, 853, 919, 991, 1018, 1067, 1092, 951, 1111, + /* 210 */ 1112, 1115, 1116, 1117, 1119, 1120, 1121, 1122, 1123, 1124, + /* 220 */ 1125, 1012, 1096, 1097, 1128, 1129, 1130, 1131, 1070, 1135, + /* 230 */ 1137, 1152, 1077, 1153, 1155, 1114, 1156, 304, 1158, 1172, + /* 240 */ 1173, 1174, 1175, 1176, 1089, 1091, 1133, 1098, 1126, 1139, + /* 250 */ 1140, 1070, 1133, 1133, 1170, 1163, 1186, 1103, 1168, 1138, + /* 260 */ 1141, 1110, 1169, 1171, 1132, 1177, 1189, 1194, 1181, 1200, + /* 270 */ 1204, 1166, 1145, 1178, 1187, 1232, 1142, 1231, 1233, 1149, + /* 280 */ 1150, 1238, 1179, 1182, 1212, 1205, 1219, 1220, 1221, 1222, + /* 290 */ 1258, 1266, 1223, 1224, 1206, 1211, 1237, 1239, 1230, 1269, + /* 300 */ 1272, 1195, 1197, 1280, 1284, 1268, 1285, 1289, 1290, 1293, + /* 310 */ 1274, 1286, 1287, 1288, 1282, 1294, 1292, 1297, 1300, 1296, + /* 320 */ 1301, 1306, 1304, 1249, 1250, 1308, 1271, 1275, 1273, 1276, + /* 330 */ 1279, 1281, 1283, 1302, 1334, 1307, 1243, 1267, 1318, 1322, + /* 340 */ 1303, 1371, 1299, 1328, 1332, 1340, 1342, 1384, 1391, 1400, + /* 350 */ 1403, 1407, 1408, 1409, 1311, 1312, 1310, 1405, 1402, 1412, + /* 360 */ 1417, 1420, 1406, 1393, 1395, 1421, 1422, 1423, 1424, 1415, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1389, 1389, 1389, 1261, 1046, 1151, 1261, 1261, 1261, 1261, - /* 10 */ 1046, 1181, 1181, 1312, 1077, 1046, 1046, 1046, 1046, 1046, - /* 20 */ 1046, 1260, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 30 */ 1046, 1046, 1046, 1187, 1046, 1046, 1046, 1046, 1262, 1263, - /* 40 */ 1046, 1046, 1046, 1311, 1313, 1197, 1196, 1195, 1194, 1294, - /* 50 */ 1168, 1192, 1185, 1189, 1256, 1257, 1255, 1259, 1262, 1263, - /* 60 */ 1046, 1188, 1226, 1240, 1225, 1046, 1046, 1046, 1046, 1046, - /* 70 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 80 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 90 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 100 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 110 */ 1046, 1234, 1239, 1246, 1238, 1235, 1228, 1227, 1229, 1230, - /* 120 */ 1046, 1067, 1116, 1046, 1046, 1046, 1329, 1328, 1046, 1046, - /* 130 */ 1077, 1231, 1232, 1243, 1242, 1241, 1319, 1345, 1344, 1046, - /* 140 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 150 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 160 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1077, - /* 170 */ 1073, 1073, 1046, 1324, 1151, 1142, 1046, 1046, 1046, 1046, - /* 180 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1316, 1314, 1046, - /* 190 */ 1276, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 200 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 210 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1147, 1046, - /* 220 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1339, - /* 230 */ 1046, 1289, 1130, 1147, 1147, 1147, 1147, 1149, 1131, 1129, - /* 240 */ 1141, 1077, 1053, 1191, 1170, 1170, 1378, 1191, 1191, 1378, - /* 250 */ 1091, 1359, 1088, 1181, 1181, 1181, 1170, 1258, 1148, 1141, - /* 260 */ 1046, 1381, 1156, 1156, 1380, 1380, 1156, 1200, 1206, 1119, - /* 270 */ 1191, 1125, 1125, 1125, 1125, 1156, 1064, 1191, 1191, 1200, - /* 280 */ 1206, 1119, 1119, 1191, 1156, 1064, 1293, 1375, 1156, 1064, - /* 290 */ 1269, 1156, 1064, 1156, 1064, 1269, 1117, 1117, 1117, 1106, - /* 300 */ 1269, 1117, 1091, 1117, 1106, 1117, 1117, 1269, 1273, 1273, - /* 310 */ 1269, 1174, 1169, 1174, 1169, 1174, 1169, 1174, 1169, 1156, - /* 320 */ 1264, 1156, 1046, 1186, 1175, 1184, 1182, 1191, 1070, 1109, - /* 330 */ 1342, 1342, 1338, 1338, 1338, 1386, 1386, 1324, 1354, 1077, - /* 340 */ 1077, 1077, 1077, 1354, 1093, 1093, 1077, 1077, 1077, 1077, - /* 350 */ 1354, 1046, 1046, 1046, 1046, 1046, 1046, 1349, 1046, 1278, - /* 360 */ 1160, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 370 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 380 */ 1046, 1046, 1211, 1046, 1049, 1321, 1046, 1046, 1320, 1046, - /* 390 */ 1046, 1046, 1046, 1046, 1046, 1161, 1046, 1046, 1046, 1046, - /* 400 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 410 */ 1046, 1046, 1046, 1046, 1377, 1046, 1046, 1046, 1046, 1046, - /* 420 */ 1046, 1292, 1291, 1046, 1046, 1158, 1046, 1046, 1046, 1046, - /* 430 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 440 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 450 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 460 */ 1183, 1046, 1176, 1046, 1046, 1046, 1046, 1368, 1046, 1046, - /* 470 */ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - /* 480 */ 1046, 1363, 1133, 1213, 1046, 1212, 1216, 1046, 1058, 1046, + /* 0 */ 1492, 1492, 1492, 1340, 1123, 1229, 1123, 1123, 1123, 1340, + /* 10 */ 1340, 1340, 1123, 1259, 1259, 1391, 1154, 1123, 1123, 1123, + /* 20 */ 1123, 1123, 1123, 1123, 1339, 1123, 1123, 1123, 1123, 1123, + /* 30 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1265, 1123, + /* 40 */ 1123, 1123, 1123, 1123, 1341, 1342, 1123, 1123, 1123, 1390, + /* 50 */ 1392, 1275, 1274, 1273, 1272, 1373, 1246, 1270, 1263, 1267, + /* 60 */ 1335, 1336, 1334, 1338, 1342, 1341, 1123, 1266, 1306, 1320, + /* 70 */ 1305, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 80 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 90 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 100 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 110 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1314, 1319, 1325, + /* 120 */ 1318, 1315, 1308, 1307, 1309, 1310, 1123, 1144, 1193, 1123, + /* 130 */ 1123, 1123, 1123, 1409, 1408, 1123, 1123, 1154, 1311, 1312, + /* 140 */ 1322, 1321, 1398, 1448, 1447, 1123, 1123, 1123, 1123, 1123, + /* 150 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 160 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 170 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1154, 1150, 1300, + /* 180 */ 1299, 1418, 1150, 1253, 1123, 1404, 1229, 1220, 1123, 1123, + /* 190 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 200 */ 1123, 1395, 1393, 1123, 1355, 1123, 1123, 1123, 1123, 1123, + /* 210 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 220 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 230 */ 1123, 1123, 1225, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 240 */ 1123, 1123, 1123, 1442, 1123, 1368, 1207, 1225, 1225, 1225, + /* 250 */ 1225, 1227, 1208, 1206, 1219, 1154, 1130, 1484, 1269, 1248, + /* 260 */ 1248, 1481, 1269, 1269, 1481, 1168, 1462, 1165, 1259, 1259, + /* 270 */ 1259, 1248, 1337, 1226, 1219, 1123, 1484, 1234, 1234, 1483, + /* 280 */ 1483, 1234, 1278, 1284, 1196, 1269, 1202, 1202, 1202, 1202, + /* 290 */ 1234, 1141, 1269, 1269, 1278, 1284, 1196, 1196, 1269, 1234, + /* 300 */ 1141, 1372, 1478, 1234, 1141, 1348, 1234, 1141, 1234, 1141, + /* 310 */ 1348, 1194, 1194, 1194, 1183, 1348, 1194, 1168, 1194, 1183, + /* 320 */ 1194, 1194, 1348, 1352, 1352, 1348, 1252, 1247, 1252, 1247, + /* 330 */ 1252, 1247, 1252, 1247, 1234, 1253, 1417, 1123, 1264, 1253, + /* 340 */ 1343, 1234, 1123, 1264, 1262, 1260, 1269, 1147, 1186, 1445, + /* 350 */ 1445, 1441, 1441, 1441, 1489, 1489, 1404, 1457, 1154, 1154, + /* 360 */ 1154, 1154, 1457, 1170, 1170, 1154, 1154, 1154, 1154, 1457, + /* 370 */ 1123, 1123, 1123, 1123, 1123, 1123, 1452, 1123, 1357, 1238, + /* 380 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 390 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 400 */ 1123, 1123, 1289, 1123, 1126, 1401, 1123, 1123, 1399, 1123, + /* 410 */ 1123, 1123, 1123, 1123, 1123, 1239, 1123, 1123, 1123, 1123, + /* 420 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 430 */ 1123, 1123, 1123, 1123, 1480, 1123, 1123, 1123, 1123, 1123, + /* 440 */ 1123, 1371, 1370, 1123, 1123, 1236, 1123, 1123, 1123, 1123, + /* 450 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 460 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 470 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 480 */ 1123, 1123, 1123, 1261, 1123, 1416, 1123, 1123, 1123, 1123, + /* 490 */ 1123, 1123, 1123, 1430, 1254, 1123, 1123, 1471, 1123, 1123, + /* 500 */ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + /* 510 */ 1123, 1123, 1466, 1210, 1291, 1123, 1290, 1294, 1123, 1135, + /* 520 */ 1123, }; /********** End of lemon-generated parsing tables *****************************/ @@ -142313,11 +146923,18 @@ 59, /* REPLACE => ID */ 59, /* RESTRICT => ID */ 59, /* ROW => ID */ + 59, /* ROWS => ID */ 59, /* TRIGGER => ID */ 59, /* VACUUM => ID */ 59, /* VIEW => ID */ 59, /* VIRTUAL => ID */ 59, /* WITH => ID */ + 59, /* CURRENT => ID */ + 59, /* FOLLOWING => ID */ + 59, /* PARTITION => ID */ + 59, /* PRECEDING => ID */ + 59, /* RANGE => ID */ + 59, /* UNBOUNDED => ID */ 59, /* REINDEX => ID */ 59, /* RENAME => ID */ 59, /* CTIME_KW => ID */ @@ -142484,185 +147101,207 @@ /* 73 */ "REPLACE", /* 74 */ "RESTRICT", /* 75 */ "ROW", - /* 76 */ "TRIGGER", - /* 77 */ "VACUUM", - /* 78 */ "VIEW", - /* 79 */ "VIRTUAL", - /* 80 */ "WITH", - /* 81 */ "REINDEX", - /* 82 */ "RENAME", - /* 83 */ "CTIME_KW", - /* 84 */ "ANY", - /* 85 */ "BITAND", - /* 86 */ "BITOR", - /* 87 */ "LSHIFT", - /* 88 */ "RSHIFT", - /* 89 */ "PLUS", - /* 90 */ "MINUS", - /* 91 */ "STAR", - /* 92 */ "SLASH", - /* 93 */ "REM", - /* 94 */ "CONCAT", - /* 95 */ "COLLATE", - /* 96 */ "BITNOT", - /* 97 */ "ON", - /* 98 */ "INDEXED", - /* 99 */ "STRING", - /* 100 */ "JOIN_KW", - /* 101 */ "CONSTRAINT", - /* 102 */ "DEFAULT", - /* 103 */ "NULL", - /* 104 */ "PRIMARY", - /* 105 */ "UNIQUE", - /* 106 */ "CHECK", - /* 107 */ "REFERENCES", - /* 108 */ "AUTOINCR", - /* 109 */ "INSERT", - /* 110 */ "DELETE", - /* 111 */ "UPDATE", - /* 112 */ "SET", - /* 113 */ "DEFERRABLE", - /* 114 */ "FOREIGN", - /* 115 */ "DROP", - /* 116 */ "UNION", - /* 117 */ "ALL", - /* 118 */ "EXCEPT", - /* 119 */ "INTERSECT", - /* 120 */ "SELECT", - /* 121 */ "VALUES", - /* 122 */ "DISTINCT", - /* 123 */ "DOT", - /* 124 */ "FROM", - /* 125 */ "JOIN", - /* 126 */ "USING", - /* 127 */ "ORDER", - /* 128 */ "GROUP", - /* 129 */ "HAVING", - /* 130 */ "LIMIT", - /* 131 */ "WHERE", - /* 132 */ "INTO", - /* 133 */ "NOTHING", - /* 134 */ "FLOAT", - /* 135 */ "BLOB", - /* 136 */ "INTEGER", - /* 137 */ "VARIABLE", - /* 138 */ "CASE", - /* 139 */ "WHEN", - /* 140 */ "THEN", - /* 141 */ "ELSE", - /* 142 */ "INDEX", - /* 143 */ "ALTER", - /* 144 */ "ADD", - /* 145 */ "input", - /* 146 */ "cmdlist", - /* 147 */ "ecmd", - /* 148 */ "cmdx", - /* 149 */ "explain", - /* 150 */ "cmd", - /* 151 */ "transtype", - /* 152 */ "trans_opt", - /* 153 */ "nm", - /* 154 */ "savepoint_opt", - /* 155 */ "create_table", - /* 156 */ "create_table_args", - /* 157 */ "createkw", - /* 158 */ "temp", - /* 159 */ "ifnotexists", - /* 160 */ "dbnm", - /* 161 */ "columnlist", - /* 162 */ "conslist_opt", - /* 163 */ "table_options", - /* 164 */ "select", - /* 165 */ "columnname", - /* 166 */ "carglist", - /* 167 */ "typetoken", - /* 168 */ "typename", - /* 169 */ "signed", - /* 170 */ "plus_num", - /* 171 */ "minus_num", - /* 172 */ "scanpt", - /* 173 */ "ccons", - /* 174 */ "term", - /* 175 */ "expr", - /* 176 */ "onconf", - /* 177 */ "sortorder", - /* 178 */ "autoinc", - /* 179 */ "eidlist_opt", - /* 180 */ "refargs", - /* 181 */ "defer_subclause", - /* 182 */ "refarg", - /* 183 */ "refact", - /* 184 */ "init_deferred_pred_opt", - /* 185 */ "conslist", - /* 186 */ "tconscomma", - /* 187 */ "tcons", - /* 188 */ "sortlist", - /* 189 */ "eidlist", - /* 190 */ "defer_subclause_opt", - /* 191 */ "orconf", - /* 192 */ "resolvetype", - /* 193 */ "raisetype", - /* 194 */ "ifexists", - /* 195 */ "fullname", - /* 196 */ "selectnowith", - /* 197 */ "oneselect", - /* 198 */ "wqlist", - /* 199 */ "multiselect_op", - /* 200 */ "distinct", - /* 201 */ "selcollist", - /* 202 */ "from", - /* 203 */ "where_opt", - /* 204 */ "groupby_opt", - /* 205 */ "having_opt", - /* 206 */ "orderby_opt", - /* 207 */ "limit_opt", - /* 208 */ "values", - /* 209 */ "nexprlist", - /* 210 */ "exprlist", - /* 211 */ "sclp", - /* 212 */ "as", - /* 213 */ "seltablist", - /* 214 */ "stl_prefix", - /* 215 */ "joinop", - /* 216 */ "indexed_opt", - /* 217 */ "on_opt", - /* 218 */ "using_opt", - /* 219 */ "xfullname", - /* 220 */ "idlist", - /* 221 */ "with", - /* 222 */ "setlist", - /* 223 */ "insert_cmd", - /* 224 */ "idlist_opt", - /* 225 */ "upsert", - /* 226 */ "likeop", - /* 227 */ "between_op", - /* 228 */ "in_op", - /* 229 */ "paren_exprlist", - /* 230 */ "case_operand", - /* 231 */ "case_exprlist", - /* 232 */ "case_else", - /* 233 */ "uniqueflag", - /* 234 */ "collate", - /* 235 */ "nmnum", - /* 236 */ "trigger_decl", - /* 237 */ "trigger_cmd_list", - /* 238 */ "trigger_time", - /* 239 */ "trigger_event", - /* 240 */ "foreach_clause", - /* 241 */ "when_clause", - /* 242 */ "trigger_cmd", - /* 243 */ "trnm", - /* 244 */ "tridxby", - /* 245 */ "database_kw_opt", - /* 246 */ "key_opt", - /* 247 */ "add_column_fullname", - /* 248 */ "kwcolumn_opt", - /* 249 */ "create_vtab", - /* 250 */ "vtabarglist", - /* 251 */ "vtabarg", - /* 252 */ "vtabargtoken", - /* 253 */ "lp", - /* 254 */ "anylist", + /* 76 */ "ROWS", + /* 77 */ "TRIGGER", + /* 78 */ "VACUUM", + /* 79 */ "VIEW", + /* 80 */ "VIRTUAL", + /* 81 */ "WITH", + /* 82 */ "CURRENT", + /* 83 */ "FOLLOWING", + /* 84 */ "PARTITION", + /* 85 */ "PRECEDING", + /* 86 */ "RANGE", + /* 87 */ "UNBOUNDED", + /* 88 */ "REINDEX", + /* 89 */ "RENAME", + /* 90 */ "CTIME_KW", + /* 91 */ "ANY", + /* 92 */ "BITAND", + /* 93 */ "BITOR", + /* 94 */ "LSHIFT", + /* 95 */ "RSHIFT", + /* 96 */ "PLUS", + /* 97 */ "MINUS", + /* 98 */ "STAR", + /* 99 */ "SLASH", + /* 100 */ "REM", + /* 101 */ "CONCAT", + /* 102 */ "COLLATE", + /* 103 */ "BITNOT", + /* 104 */ "ON", + /* 105 */ "INDEXED", + /* 106 */ "STRING", + /* 107 */ "JOIN_KW", + /* 108 */ "CONSTRAINT", + /* 109 */ "DEFAULT", + /* 110 */ "NULL", + /* 111 */ "PRIMARY", + /* 112 */ "UNIQUE", + /* 113 */ "CHECK", + /* 114 */ "REFERENCES", + /* 115 */ "AUTOINCR", + /* 116 */ "INSERT", + /* 117 */ "DELETE", + /* 118 */ "UPDATE", + /* 119 */ "SET", + /* 120 */ "DEFERRABLE", + /* 121 */ "FOREIGN", + /* 122 */ "DROP", + /* 123 */ "UNION", + /* 124 */ "ALL", + /* 125 */ "EXCEPT", + /* 126 */ "INTERSECT", + /* 127 */ "SELECT", + /* 128 */ "VALUES", + /* 129 */ "DISTINCT", + /* 130 */ "DOT", + /* 131 */ "FROM", + /* 132 */ "JOIN", + /* 133 */ "USING", + /* 134 */ "ORDER", + /* 135 */ "GROUP", + /* 136 */ "HAVING", + /* 137 */ "LIMIT", + /* 138 */ "WHERE", + /* 139 */ "INTO", + /* 140 */ "NOTHING", + /* 141 */ "FLOAT", + /* 142 */ "BLOB", + /* 143 */ "INTEGER", + /* 144 */ "VARIABLE", + /* 145 */ "CASE", + /* 146 */ "WHEN", + /* 147 */ "THEN", + /* 148 */ "ELSE", + /* 149 */ "INDEX", + /* 150 */ "ALTER", + /* 151 */ "ADD", + /* 152 */ "WINDOW", + /* 153 */ "OVER", + /* 154 */ "FILTER", + /* 155 */ "input", + /* 156 */ "cmdlist", + /* 157 */ "ecmd", + /* 158 */ "cmdx", + /* 159 */ "explain", + /* 160 */ "cmd", + /* 161 */ "transtype", + /* 162 */ "trans_opt", + /* 163 */ "nm", + /* 164 */ "savepoint_opt", + /* 165 */ "create_table", + /* 166 */ "create_table_args", + /* 167 */ "createkw", + /* 168 */ "temp", + /* 169 */ "ifnotexists", + /* 170 */ "dbnm", + /* 171 */ "columnlist", + /* 172 */ "conslist_opt", + /* 173 */ "table_options", + /* 174 */ "select", + /* 175 */ "columnname", + /* 176 */ "carglist", + /* 177 */ "typetoken", + /* 178 */ "typename", + /* 179 */ "signed", + /* 180 */ "plus_num", + /* 181 */ "minus_num", + /* 182 */ "scanpt", + /* 183 */ "ccons", + /* 184 */ "term", + /* 185 */ "expr", + /* 186 */ "onconf", + /* 187 */ "sortorder", + /* 188 */ "autoinc", + /* 189 */ "eidlist_opt", + /* 190 */ "refargs", + /* 191 */ "defer_subclause", + /* 192 */ "refarg", + /* 193 */ "refact", + /* 194 */ "init_deferred_pred_opt", + /* 195 */ "conslist", + /* 196 */ "tconscomma", + /* 197 */ "tcons", + /* 198 */ "sortlist", + /* 199 */ "eidlist", + /* 200 */ "defer_subclause_opt", + /* 201 */ "orconf", + /* 202 */ "resolvetype", + /* 203 */ "raisetype", + /* 204 */ "ifexists", + /* 205 */ "fullname", + /* 206 */ "selectnowith", + /* 207 */ "oneselect", + /* 208 */ "wqlist", + /* 209 */ "multiselect_op", + /* 210 */ "distinct", + /* 211 */ "selcollist", + /* 212 */ "from", + /* 213 */ "where_opt", + /* 214 */ "groupby_opt", + /* 215 */ "having_opt", + /* 216 */ "orderby_opt", + /* 217 */ "limit_opt", + /* 218 */ "window_clause", + /* 219 */ "values", + /* 220 */ "nexprlist", + /* 221 */ "sclp", + /* 222 */ "as", + /* 223 */ "seltablist", + /* 224 */ "stl_prefix", + /* 225 */ "joinop", + /* 226 */ "indexed_opt", + /* 227 */ "on_opt", + /* 228 */ "using_opt", + /* 229 */ "exprlist", + /* 230 */ "xfullname", + /* 231 */ "idlist", + /* 232 */ "with", + /* 233 */ "setlist", + /* 234 */ "insert_cmd", + /* 235 */ "idlist_opt", + /* 236 */ "upsert", + /* 237 */ "over_clause", + /* 238 */ "likeop", + /* 239 */ "between_op", + /* 240 */ "in_op", + /* 241 */ "paren_exprlist", + /* 242 */ "case_operand", + /* 243 */ "case_exprlist", + /* 244 */ "case_else", + /* 245 */ "uniqueflag", + /* 246 */ "collate", + /* 247 */ "nmnum", + /* 248 */ "trigger_decl", + /* 249 */ "trigger_cmd_list", + /* 250 */ "trigger_time", + /* 251 */ "trigger_event", + /* 252 */ "foreach_clause", + /* 253 */ "when_clause", + /* 254 */ "trigger_cmd", + /* 255 */ "trnm", + /* 256 */ "tridxby", + /* 257 */ "database_kw_opt", + /* 258 */ "key_opt", + /* 259 */ "add_column_fullname", + /* 260 */ "kwcolumn_opt", + /* 261 */ "create_vtab", + /* 262 */ "vtabarglist", + /* 263 */ "vtabarg", + /* 264 */ "vtabargtoken", + /* 265 */ "lp", + /* 266 */ "anylist", + /* 267 */ "windowdefn_list", + /* 268 */ "windowdefn", + /* 269 */ "window", + /* 270 */ "frame_opt", + /* 271 */ "part_opt", + /* 272 */ "filter_opt", + /* 273 */ "range_or_rows", + /* 274 */ "frame_bound", + /* 275 */ "frame_bound_s", + /* 276 */ "frame_bound_e", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -142758,259 +147397,285 @@ /* 85 */ "multiselect_op ::= UNION ALL", /* 86 */ "multiselect_op ::= EXCEPT|INTERSECT", /* 87 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", - /* 88 */ "values ::= VALUES LP nexprlist RP", - /* 89 */ "values ::= values COMMA LP exprlist RP", - /* 90 */ "distinct ::= DISTINCT", - /* 91 */ "distinct ::= ALL", - /* 92 */ "distinct ::=", - /* 93 */ "sclp ::=", - /* 94 */ "selcollist ::= sclp scanpt expr scanpt as", - /* 95 */ "selcollist ::= sclp scanpt STAR", - /* 96 */ "selcollist ::= sclp scanpt nm DOT STAR", - /* 97 */ "as ::= AS nm", - /* 98 */ "as ::=", - /* 99 */ "from ::=", - /* 100 */ "from ::= FROM seltablist", - /* 101 */ "stl_prefix ::= seltablist joinop", - /* 102 */ "stl_prefix ::=", - /* 103 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", - /* 104 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt", - /* 105 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", - /* 106 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", - /* 107 */ "dbnm ::=", - /* 108 */ "dbnm ::= DOT nm", - /* 109 */ "fullname ::= nm", - /* 110 */ "fullname ::= nm DOT nm", - /* 111 */ "xfullname ::= nm", - /* 112 */ "xfullname ::= nm DOT nm", - /* 113 */ "xfullname ::= nm DOT nm AS nm", - /* 114 */ "xfullname ::= nm AS nm", - /* 115 */ "joinop ::= COMMA|JOIN", - /* 116 */ "joinop ::= JOIN_KW JOIN", - /* 117 */ "joinop ::= JOIN_KW nm JOIN", - /* 118 */ "joinop ::= JOIN_KW nm nm JOIN", - /* 119 */ "on_opt ::= ON expr", - /* 120 */ "on_opt ::=", - /* 121 */ "indexed_opt ::=", - /* 122 */ "indexed_opt ::= INDEXED BY nm", - /* 123 */ "indexed_opt ::= NOT INDEXED", - /* 124 */ "using_opt ::= USING LP idlist RP", - /* 125 */ "using_opt ::=", - /* 126 */ "orderby_opt ::=", - /* 127 */ "orderby_opt ::= ORDER BY sortlist", - /* 128 */ "sortlist ::= sortlist COMMA expr sortorder", - /* 129 */ "sortlist ::= expr sortorder", - /* 130 */ "sortorder ::= ASC", - /* 131 */ "sortorder ::= DESC", - /* 132 */ "sortorder ::=", - /* 133 */ "groupby_opt ::=", - /* 134 */ "groupby_opt ::= GROUP BY nexprlist", - /* 135 */ "having_opt ::=", - /* 136 */ "having_opt ::= HAVING expr", - /* 137 */ "limit_opt ::=", - /* 138 */ "limit_opt ::= LIMIT expr", - /* 139 */ "limit_opt ::= LIMIT expr OFFSET expr", - /* 140 */ "limit_opt ::= LIMIT expr COMMA expr", - /* 141 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt", - /* 142 */ "where_opt ::=", - /* 143 */ "where_opt ::= WHERE expr", - /* 144 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt", - /* 145 */ "setlist ::= setlist COMMA nm EQ expr", - /* 146 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", - /* 147 */ "setlist ::= nm EQ expr", - /* 148 */ "setlist ::= LP idlist RP EQ expr", - /* 149 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert", - /* 150 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES", - /* 151 */ "upsert ::=", - /* 152 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt", - /* 153 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING", - /* 154 */ "upsert ::= ON CONFLICT DO NOTHING", - /* 155 */ "insert_cmd ::= INSERT orconf", - /* 156 */ "insert_cmd ::= REPLACE", - /* 157 */ "idlist_opt ::=", - /* 158 */ "idlist_opt ::= LP idlist RP", - /* 159 */ "idlist ::= idlist COMMA nm", - /* 160 */ "idlist ::= nm", - /* 161 */ "expr ::= LP expr RP", - /* 162 */ "expr ::= ID|INDEXED", - /* 163 */ "expr ::= JOIN_KW", - /* 164 */ "expr ::= nm DOT nm", - /* 165 */ "expr ::= nm DOT nm DOT nm", - /* 166 */ "term ::= NULL|FLOAT|BLOB", - /* 167 */ "term ::= STRING", - /* 168 */ "term ::= INTEGER", - /* 169 */ "expr ::= VARIABLE", - /* 170 */ "expr ::= expr COLLATE ID|STRING", - /* 171 */ "expr ::= CAST LP expr AS typetoken RP", - /* 172 */ "expr ::= ID|INDEXED LP distinct exprlist RP", - /* 173 */ "expr ::= ID|INDEXED LP STAR RP", - /* 174 */ "term ::= CTIME_KW", - /* 175 */ "expr ::= LP nexprlist COMMA expr RP", - /* 176 */ "expr ::= expr AND expr", - /* 177 */ "expr ::= expr OR expr", - /* 178 */ "expr ::= expr LT|GT|GE|LE expr", - /* 179 */ "expr ::= expr EQ|NE expr", - /* 180 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", - /* 181 */ "expr ::= expr PLUS|MINUS expr", - /* 182 */ "expr ::= expr STAR|SLASH|REM expr", - /* 183 */ "expr ::= expr CONCAT expr", - /* 184 */ "likeop ::= NOT LIKE_KW|MATCH", - /* 185 */ "expr ::= expr likeop expr", - /* 186 */ "expr ::= expr likeop expr ESCAPE expr", - /* 187 */ "expr ::= expr ISNULL|NOTNULL", - /* 188 */ "expr ::= expr NOT NULL", - /* 189 */ "expr ::= expr IS expr", - /* 190 */ "expr ::= expr IS NOT expr", - /* 191 */ "expr ::= NOT expr", - /* 192 */ "expr ::= BITNOT expr", - /* 193 */ "expr ::= MINUS expr", - /* 194 */ "expr ::= PLUS expr", - /* 195 */ "between_op ::= BETWEEN", - /* 196 */ "between_op ::= NOT BETWEEN", - /* 197 */ "expr ::= expr between_op expr AND expr", - /* 198 */ "in_op ::= IN", - /* 199 */ "in_op ::= NOT IN", - /* 200 */ "expr ::= expr in_op LP exprlist RP", - /* 201 */ "expr ::= LP select RP", - /* 202 */ "expr ::= expr in_op LP select RP", - /* 203 */ "expr ::= expr in_op nm dbnm paren_exprlist", - /* 204 */ "expr ::= EXISTS LP select RP", - /* 205 */ "expr ::= CASE case_operand case_exprlist case_else END", - /* 206 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", - /* 207 */ "case_exprlist ::= WHEN expr THEN expr", - /* 208 */ "case_else ::= ELSE expr", - /* 209 */ "case_else ::=", - /* 210 */ "case_operand ::= expr", - /* 211 */ "case_operand ::=", - /* 212 */ "exprlist ::=", - /* 213 */ "nexprlist ::= nexprlist COMMA expr", - /* 214 */ "nexprlist ::= expr", - /* 215 */ "paren_exprlist ::=", - /* 216 */ "paren_exprlist ::= LP exprlist RP", - /* 217 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", - /* 218 */ "uniqueflag ::= UNIQUE", - /* 219 */ "uniqueflag ::=", - /* 220 */ "eidlist_opt ::=", - /* 221 */ "eidlist_opt ::= LP eidlist RP", - /* 222 */ "eidlist ::= eidlist COMMA nm collate sortorder", - /* 223 */ "eidlist ::= nm collate sortorder", - /* 224 */ "collate ::=", - /* 225 */ "collate ::= COLLATE ID|STRING", - /* 226 */ "cmd ::= DROP INDEX ifexists fullname", - /* 227 */ "cmd ::= VACUUM", - /* 228 */ "cmd ::= VACUUM nm", - /* 229 */ "cmd ::= PRAGMA nm dbnm", - /* 230 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", - /* 231 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", - /* 232 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", - /* 233 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", - /* 234 */ "plus_num ::= PLUS INTEGER|FLOAT", - /* 235 */ "minus_num ::= MINUS INTEGER|FLOAT", - /* 236 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", - /* 237 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", - /* 238 */ "trigger_time ::= BEFORE|AFTER", - /* 239 */ "trigger_time ::= INSTEAD OF", - /* 240 */ "trigger_time ::=", - /* 241 */ "trigger_event ::= DELETE|INSERT", - /* 242 */ "trigger_event ::= UPDATE", - /* 243 */ "trigger_event ::= UPDATE OF idlist", - /* 244 */ "when_clause ::=", - /* 245 */ "when_clause ::= WHEN expr", - /* 246 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", - /* 247 */ "trigger_cmd_list ::= trigger_cmd SEMI", - /* 248 */ "trnm ::= nm DOT nm", - /* 249 */ "tridxby ::= INDEXED BY nm", - /* 250 */ "tridxby ::= NOT INDEXED", - /* 251 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt", - /* 252 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt", - /* 253 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", - /* 254 */ "trigger_cmd ::= scanpt select scanpt", - /* 255 */ "expr ::= RAISE LP IGNORE RP", - /* 256 */ "expr ::= RAISE LP raisetype COMMA nm RP", - /* 257 */ "raisetype ::= ROLLBACK", - /* 258 */ "raisetype ::= ABORT", - /* 259 */ "raisetype ::= FAIL", - /* 260 */ "cmd ::= DROP TRIGGER ifexists fullname", - /* 261 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", - /* 262 */ "cmd ::= DETACH database_kw_opt expr", - /* 263 */ "key_opt ::=", - /* 264 */ "key_opt ::= KEY expr", - /* 265 */ "cmd ::= REINDEX", - /* 266 */ "cmd ::= REINDEX nm dbnm", - /* 267 */ "cmd ::= ANALYZE", - /* 268 */ "cmd ::= ANALYZE nm dbnm", - /* 269 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", - /* 270 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", - /* 271 */ "add_column_fullname ::= fullname", - /* 272 */ "cmd ::= create_vtab", - /* 273 */ "cmd ::= create_vtab LP vtabarglist RP", - /* 274 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", - /* 275 */ "vtabarg ::=", - /* 276 */ "vtabargtoken ::= ANY", - /* 277 */ "vtabargtoken ::= lp anylist RP", - /* 278 */ "lp ::= LP", - /* 279 */ "with ::= WITH wqlist", - /* 280 */ "with ::= WITH RECURSIVE wqlist", - /* 281 */ "wqlist ::= nm eidlist_opt AS LP select RP", - /* 282 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP", - /* 283 */ "input ::= cmdlist", - /* 284 */ "cmdlist ::= cmdlist ecmd", - /* 285 */ "cmdlist ::= ecmd", - /* 286 */ "ecmd ::= SEMI", - /* 287 */ "ecmd ::= cmdx SEMI", - /* 288 */ "ecmd ::= explain cmdx", - /* 289 */ "trans_opt ::=", - /* 290 */ "trans_opt ::= TRANSACTION", - /* 291 */ "trans_opt ::= TRANSACTION nm", - /* 292 */ "savepoint_opt ::= SAVEPOINT", - /* 293 */ "savepoint_opt ::=", - /* 294 */ "cmd ::= create_table create_table_args", - /* 295 */ "columnlist ::= columnlist COMMA columnname carglist", - /* 296 */ "columnlist ::= columnname carglist", - /* 297 */ "nm ::= ID|INDEXED", - /* 298 */ "nm ::= STRING", - /* 299 */ "nm ::= JOIN_KW", - /* 300 */ "typetoken ::= typename", - /* 301 */ "typename ::= ID|STRING", - /* 302 */ "signed ::= plus_num", - /* 303 */ "signed ::= minus_num", - /* 304 */ "carglist ::= carglist ccons", - /* 305 */ "carglist ::=", - /* 306 */ "ccons ::= NULL onconf", - /* 307 */ "conslist_opt ::= COMMA conslist", - /* 308 */ "conslist ::= conslist tconscomma tcons", - /* 309 */ "conslist ::= tcons", - /* 310 */ "tconscomma ::=", - /* 311 */ "defer_subclause_opt ::= defer_subclause", - /* 312 */ "resolvetype ::= raisetype", - /* 313 */ "selectnowith ::= oneselect", - /* 314 */ "oneselect ::= values", - /* 315 */ "sclp ::= selcollist COMMA", - /* 316 */ "as ::= ID|STRING", - /* 317 */ "expr ::= term", - /* 318 */ "likeop ::= LIKE_KW|MATCH", - /* 319 */ "exprlist ::= nexprlist", - /* 320 */ "nmnum ::= plus_num", - /* 321 */ "nmnum ::= nm", - /* 322 */ "nmnum ::= ON", - /* 323 */ "nmnum ::= DELETE", - /* 324 */ "nmnum ::= DEFAULT", - /* 325 */ "plus_num ::= INTEGER|FLOAT", - /* 326 */ "foreach_clause ::=", - /* 327 */ "foreach_clause ::= FOR EACH ROW", - /* 328 */ "trnm ::= nm", - /* 329 */ "tridxby ::=", - /* 330 */ "database_kw_opt ::= DATABASE", - /* 331 */ "database_kw_opt ::=", - /* 332 */ "kwcolumn_opt ::=", - /* 333 */ "kwcolumn_opt ::= COLUMNKW", - /* 334 */ "vtabarglist ::= vtabarg", - /* 335 */ "vtabarglist ::= vtabarglist COMMA vtabarg", - /* 336 */ "vtabarg ::= vtabarg vtabargtoken", - /* 337 */ "anylist ::=", - /* 338 */ "anylist ::= anylist LP anylist RP", - /* 339 */ "anylist ::= anylist ANY", - /* 340 */ "with ::=", + /* 88 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt", + /* 89 */ "values ::= VALUES LP nexprlist RP", + /* 90 */ "values ::= values COMMA LP nexprlist RP", + /* 91 */ "distinct ::= DISTINCT", + /* 92 */ "distinct ::= ALL", + /* 93 */ "distinct ::=", + /* 94 */ "sclp ::=", + /* 95 */ "selcollist ::= sclp scanpt expr scanpt as", + /* 96 */ "selcollist ::= sclp scanpt STAR", + /* 97 */ "selcollist ::= sclp scanpt nm DOT STAR", + /* 98 */ "as ::= AS nm", + /* 99 */ "as ::=", + /* 100 */ "from ::=", + /* 101 */ "from ::= FROM seltablist", + /* 102 */ "stl_prefix ::= seltablist joinop", + /* 103 */ "stl_prefix ::=", + /* 104 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", + /* 105 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt", + /* 106 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", + /* 107 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", + /* 108 */ "dbnm ::=", + /* 109 */ "dbnm ::= DOT nm", + /* 110 */ "fullname ::= nm", + /* 111 */ "fullname ::= nm DOT nm", + /* 112 */ "xfullname ::= nm", + /* 113 */ "xfullname ::= nm DOT nm", + /* 114 */ "xfullname ::= nm DOT nm AS nm", + /* 115 */ "xfullname ::= nm AS nm", + /* 116 */ "joinop ::= COMMA|JOIN", + /* 117 */ "joinop ::= JOIN_KW JOIN", + /* 118 */ "joinop ::= JOIN_KW nm JOIN", + /* 119 */ "joinop ::= JOIN_KW nm nm JOIN", + /* 120 */ "on_opt ::= ON expr", + /* 121 */ "on_opt ::=", + /* 122 */ "indexed_opt ::=", + /* 123 */ "indexed_opt ::= INDEXED BY nm", + /* 124 */ "indexed_opt ::= NOT INDEXED", + /* 125 */ "using_opt ::= USING LP idlist RP", + /* 126 */ "using_opt ::=", + /* 127 */ "orderby_opt ::=", + /* 128 */ "orderby_opt ::= ORDER BY sortlist", + /* 129 */ "sortlist ::= sortlist COMMA expr sortorder", + /* 130 */ "sortlist ::= expr sortorder", + /* 131 */ "sortorder ::= ASC", + /* 132 */ "sortorder ::= DESC", + /* 133 */ "sortorder ::=", + /* 134 */ "groupby_opt ::=", + /* 135 */ "groupby_opt ::= GROUP BY nexprlist", + /* 136 */ "having_opt ::=", + /* 137 */ "having_opt ::= HAVING expr", + /* 138 */ "limit_opt ::=", + /* 139 */ "limit_opt ::= LIMIT expr", + /* 140 */ "limit_opt ::= LIMIT expr OFFSET expr", + /* 141 */ "limit_opt ::= LIMIT expr COMMA expr", + /* 142 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt", + /* 143 */ "where_opt ::=", + /* 144 */ "where_opt ::= WHERE expr", + /* 145 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt", + /* 146 */ "setlist ::= setlist COMMA nm EQ expr", + /* 147 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", + /* 148 */ "setlist ::= nm EQ expr", + /* 149 */ "setlist ::= LP idlist RP EQ expr", + /* 150 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert", + /* 151 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES", + /* 152 */ "upsert ::=", + /* 153 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt", + /* 154 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING", + /* 155 */ "upsert ::= ON CONFLICT DO NOTHING", + /* 156 */ "insert_cmd ::= INSERT orconf", + /* 157 */ "insert_cmd ::= REPLACE", + /* 158 */ "idlist_opt ::=", + /* 159 */ "idlist_opt ::= LP idlist RP", + /* 160 */ "idlist ::= idlist COMMA nm", + /* 161 */ "idlist ::= nm", + /* 162 */ "expr ::= LP expr RP", + /* 163 */ "expr ::= ID|INDEXED", + /* 164 */ "expr ::= JOIN_KW", + /* 165 */ "expr ::= nm DOT nm", + /* 166 */ "expr ::= nm DOT nm DOT nm", + /* 167 */ "term ::= NULL|FLOAT|BLOB", + /* 168 */ "term ::= STRING", + /* 169 */ "term ::= INTEGER", + /* 170 */ "expr ::= VARIABLE", + /* 171 */ "expr ::= expr COLLATE ID|STRING", + /* 172 */ "expr ::= CAST LP expr AS typetoken RP", + /* 173 */ "expr ::= ID|INDEXED LP distinct exprlist RP", + /* 174 */ "expr ::= ID|INDEXED LP STAR RP", + /* 175 */ "expr ::= ID|INDEXED LP distinct exprlist RP over_clause", + /* 176 */ "expr ::= ID|INDEXED LP STAR RP over_clause", + /* 177 */ "term ::= CTIME_KW", + /* 178 */ "expr ::= LP nexprlist COMMA expr RP", + /* 179 */ "expr ::= expr AND expr", + /* 180 */ "expr ::= expr OR expr", + /* 181 */ "expr ::= expr LT|GT|GE|LE expr", + /* 182 */ "expr ::= expr EQ|NE expr", + /* 183 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", + /* 184 */ "expr ::= expr PLUS|MINUS expr", + /* 185 */ "expr ::= expr STAR|SLASH|REM expr", + /* 186 */ "expr ::= expr CONCAT expr", + /* 187 */ "likeop ::= NOT LIKE_KW|MATCH", + /* 188 */ "expr ::= expr likeop expr", + /* 189 */ "expr ::= expr likeop expr ESCAPE expr", + /* 190 */ "expr ::= expr ISNULL|NOTNULL", + /* 191 */ "expr ::= expr NOT NULL", + /* 192 */ "expr ::= expr IS expr", + /* 193 */ "expr ::= expr IS NOT expr", + /* 194 */ "expr ::= NOT expr", + /* 195 */ "expr ::= BITNOT expr", + /* 196 */ "expr ::= PLUS|MINUS expr", + /* 197 */ "between_op ::= BETWEEN", + /* 198 */ "between_op ::= NOT BETWEEN", + /* 199 */ "expr ::= expr between_op expr AND expr", + /* 200 */ "in_op ::= IN", + /* 201 */ "in_op ::= NOT IN", + /* 202 */ "expr ::= expr in_op LP exprlist RP", + /* 203 */ "expr ::= LP select RP", + /* 204 */ "expr ::= expr in_op LP select RP", + /* 205 */ "expr ::= expr in_op nm dbnm paren_exprlist", + /* 206 */ "expr ::= EXISTS LP select RP", + /* 207 */ "expr ::= CASE case_operand case_exprlist case_else END", + /* 208 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", + /* 209 */ "case_exprlist ::= WHEN expr THEN expr", + /* 210 */ "case_else ::= ELSE expr", + /* 211 */ "case_else ::=", + /* 212 */ "case_operand ::= expr", + /* 213 */ "case_operand ::=", + /* 214 */ "exprlist ::=", + /* 215 */ "nexprlist ::= nexprlist COMMA expr", + /* 216 */ "nexprlist ::= expr", + /* 217 */ "paren_exprlist ::=", + /* 218 */ "paren_exprlist ::= LP exprlist RP", + /* 219 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", + /* 220 */ "uniqueflag ::= UNIQUE", + /* 221 */ "uniqueflag ::=", + /* 222 */ "eidlist_opt ::=", + /* 223 */ "eidlist_opt ::= LP eidlist RP", + /* 224 */ "eidlist ::= eidlist COMMA nm collate sortorder", + /* 225 */ "eidlist ::= nm collate sortorder", + /* 226 */ "collate ::=", + /* 227 */ "collate ::= COLLATE ID|STRING", + /* 228 */ "cmd ::= DROP INDEX ifexists fullname", + /* 229 */ "cmd ::= VACUUM", + /* 230 */ "cmd ::= VACUUM nm", + /* 231 */ "cmd ::= PRAGMA nm dbnm", + /* 232 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", + /* 233 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", + /* 234 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", + /* 235 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", + /* 236 */ "plus_num ::= PLUS INTEGER|FLOAT", + /* 237 */ "minus_num ::= MINUS INTEGER|FLOAT", + /* 238 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", + /* 239 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", + /* 240 */ "trigger_time ::= BEFORE|AFTER", + /* 241 */ "trigger_time ::= INSTEAD OF", + /* 242 */ "trigger_time ::=", + /* 243 */ "trigger_event ::= DELETE|INSERT", + /* 244 */ "trigger_event ::= UPDATE", + /* 245 */ "trigger_event ::= UPDATE OF idlist", + /* 246 */ "when_clause ::=", + /* 247 */ "when_clause ::= WHEN expr", + /* 248 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", + /* 249 */ "trigger_cmd_list ::= trigger_cmd SEMI", + /* 250 */ "trnm ::= nm DOT nm", + /* 251 */ "tridxby ::= INDEXED BY nm", + /* 252 */ "tridxby ::= NOT INDEXED", + /* 253 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt", + /* 254 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt", + /* 255 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", + /* 256 */ "trigger_cmd ::= scanpt select scanpt", + /* 257 */ "expr ::= RAISE LP IGNORE RP", + /* 258 */ "expr ::= RAISE LP raisetype COMMA nm RP", + /* 259 */ "raisetype ::= ROLLBACK", + /* 260 */ "raisetype ::= ABORT", + /* 261 */ "raisetype ::= FAIL", + /* 262 */ "cmd ::= DROP TRIGGER ifexists fullname", + /* 263 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", + /* 264 */ "cmd ::= DETACH database_kw_opt expr", + /* 265 */ "key_opt ::=", + /* 266 */ "key_opt ::= KEY expr", + /* 267 */ "cmd ::= REINDEX", + /* 268 */ "cmd ::= REINDEX nm dbnm", + /* 269 */ "cmd ::= ANALYZE", + /* 270 */ "cmd ::= ANALYZE nm dbnm", + /* 271 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", + /* 272 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", + /* 273 */ "add_column_fullname ::= fullname", + /* 274 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm", + /* 275 */ "cmd ::= create_vtab", + /* 276 */ "cmd ::= create_vtab LP vtabarglist RP", + /* 277 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", + /* 278 */ "vtabarg ::=", + /* 279 */ "vtabargtoken ::= ANY", + /* 280 */ "vtabargtoken ::= lp anylist RP", + /* 281 */ "lp ::= LP", + /* 282 */ "with ::= WITH wqlist", + /* 283 */ "with ::= WITH RECURSIVE wqlist", + /* 284 */ "wqlist ::= nm eidlist_opt AS LP select RP", + /* 285 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP", + /* 286 */ "windowdefn_list ::= windowdefn", + /* 287 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn", + /* 288 */ "windowdefn ::= nm AS window", + /* 289 */ "window ::= LP part_opt orderby_opt frame_opt RP", + /* 290 */ "part_opt ::= PARTITION BY nexprlist", + /* 291 */ "part_opt ::=", + /* 292 */ "frame_opt ::=", + /* 293 */ "frame_opt ::= range_or_rows frame_bound_s", + /* 294 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e", + /* 295 */ "range_or_rows ::= RANGE", + /* 296 */ "range_or_rows ::= ROWS", + /* 297 */ "frame_bound_s ::= frame_bound", + /* 298 */ "frame_bound_s ::= UNBOUNDED PRECEDING", + /* 299 */ "frame_bound_e ::= frame_bound", + /* 300 */ "frame_bound_e ::= UNBOUNDED FOLLOWING", + /* 301 */ "frame_bound ::= expr PRECEDING", + /* 302 */ "frame_bound ::= CURRENT ROW", + /* 303 */ "frame_bound ::= expr FOLLOWING", + /* 304 */ "window_clause ::= WINDOW windowdefn_list", + /* 305 */ "over_clause ::= filter_opt OVER window", + /* 306 */ "over_clause ::= filter_opt OVER nm", + /* 307 */ "filter_opt ::=", + /* 308 */ "filter_opt ::= FILTER LP WHERE expr RP", + /* 309 */ "input ::= cmdlist", + /* 310 */ "cmdlist ::= cmdlist ecmd", + /* 311 */ "cmdlist ::= ecmd", + /* 312 */ "ecmd ::= SEMI", + /* 313 */ "ecmd ::= cmdx SEMI", + /* 314 */ "ecmd ::= explain cmdx", + /* 315 */ "trans_opt ::=", + /* 316 */ "trans_opt ::= TRANSACTION", + /* 317 */ "trans_opt ::= TRANSACTION nm", + /* 318 */ "savepoint_opt ::= SAVEPOINT", + /* 319 */ "savepoint_opt ::=", + /* 320 */ "cmd ::= create_table create_table_args", + /* 321 */ "columnlist ::= columnlist COMMA columnname carglist", + /* 322 */ "columnlist ::= columnname carglist", + /* 323 */ "nm ::= ID|INDEXED", + /* 324 */ "nm ::= STRING", + /* 325 */ "nm ::= JOIN_KW", + /* 326 */ "typetoken ::= typename", + /* 327 */ "typename ::= ID|STRING", + /* 328 */ "signed ::= plus_num", + /* 329 */ "signed ::= minus_num", + /* 330 */ "carglist ::= carglist ccons", + /* 331 */ "carglist ::=", + /* 332 */ "ccons ::= NULL onconf", + /* 333 */ "conslist_opt ::= COMMA conslist", + /* 334 */ "conslist ::= conslist tconscomma tcons", + /* 335 */ "conslist ::= tcons", + /* 336 */ "tconscomma ::=", + /* 337 */ "defer_subclause_opt ::= defer_subclause", + /* 338 */ "resolvetype ::= raisetype", + /* 339 */ "selectnowith ::= oneselect", + /* 340 */ "oneselect ::= values", + /* 341 */ "sclp ::= selcollist COMMA", + /* 342 */ "as ::= ID|STRING", + /* 343 */ "expr ::= term", + /* 344 */ "likeop ::= LIKE_KW|MATCH", + /* 345 */ "exprlist ::= nexprlist", + /* 346 */ "nmnum ::= plus_num", + /* 347 */ "nmnum ::= nm", + /* 348 */ "nmnum ::= ON", + /* 349 */ "nmnum ::= DELETE", + /* 350 */ "nmnum ::= DEFAULT", + /* 351 */ "plus_num ::= INTEGER|FLOAT", + /* 352 */ "foreach_clause ::=", + /* 353 */ "foreach_clause ::= FOR EACH ROW", + /* 354 */ "trnm ::= nm", + /* 355 */ "tridxby ::=", + /* 356 */ "database_kw_opt ::= DATABASE", + /* 357 */ "database_kw_opt ::=", + /* 358 */ "kwcolumn_opt ::=", + /* 359 */ "kwcolumn_opt ::= COLUMNKW", + /* 360 */ "vtabarglist ::= vtabarg", + /* 361 */ "vtabarglist ::= vtabarglist COMMA vtabarg", + /* 362 */ "vtabarg ::= vtabarg vtabargtoken", + /* 363 */ "anylist ::=", + /* 364 */ "anylist ::= anylist LP anylist RP", + /* 365 */ "anylist ::= anylist ANY", + /* 366 */ "with ::=", }; #endif /* NDEBUG */ @@ -143136,73 +147801,96 @@ ** inside the C code. */ /********* Begin destructor definitions ***************************************/ - case 164: /* select */ - case 196: /* selectnowith */ - case 197: /* oneselect */ - case 208: /* values */ + case 174: /* select */ + case 206: /* selectnowith */ + case 207: /* oneselect */ + case 219: /* values */ +{ +sqlite3SelectDelete(pParse->db, (yypminor->yy489)); +} + break; + case 184: /* term */ + case 185: /* expr */ + case 213: /* where_opt */ + case 215: /* having_opt */ + case 227: /* on_opt */ + case 242: /* case_operand */ + case 244: /* case_else */ + case 253: /* when_clause */ + case 258: /* key_opt */ + case 272: /* filter_opt */ +{ +sqlite3ExprDelete(pParse->db, (yypminor->yy18)); +} + break; + case 189: /* eidlist_opt */ + case 198: /* sortlist */ + case 199: /* eidlist */ + case 211: /* selcollist */ + case 214: /* groupby_opt */ + case 216: /* orderby_opt */ + case 220: /* nexprlist */ + case 221: /* sclp */ + case 229: /* exprlist */ + case 233: /* setlist */ + case 241: /* paren_exprlist */ + case 243: /* case_exprlist */ + case 271: /* part_opt */ +{ +sqlite3ExprListDelete(pParse->db, (yypminor->yy420)); +} + break; + case 205: /* fullname */ + case 212: /* from */ + case 223: /* seltablist */ + case 224: /* stl_prefix */ + case 230: /* xfullname */ { -sqlite3SelectDelete(pParse->db, (yypminor->yy399)); +sqlite3SrcListDelete(pParse->db, (yypminor->yy135)); } break; - case 174: /* term */ - case 175: /* expr */ - case 203: /* where_opt */ - case 205: /* having_opt */ - case 217: /* on_opt */ - case 230: /* case_operand */ - case 232: /* case_else */ - case 241: /* when_clause */ - case 246: /* key_opt */ + case 208: /* wqlist */ { -sqlite3ExprDelete(pParse->db, (yypminor->yy182)); +sqlite3WithDelete(pParse->db, (yypminor->yy449)); } break; - case 179: /* eidlist_opt */ - case 188: /* sortlist */ - case 189: /* eidlist */ - case 201: /* selcollist */ - case 204: /* groupby_opt */ - case 206: /* orderby_opt */ - case 209: /* nexprlist */ - case 210: /* exprlist */ - case 211: /* sclp */ - case 222: /* setlist */ - case 229: /* paren_exprlist */ - case 231: /* case_exprlist */ + case 218: /* window_clause */ + case 267: /* windowdefn_list */ { -sqlite3ExprListDelete(pParse->db, (yypminor->yy232)); +sqlite3WindowListDelete(pParse->db, (yypminor->yy327)); } break; - case 195: /* fullname */ - case 202: /* from */ - case 213: /* seltablist */ - case 214: /* stl_prefix */ - case 219: /* xfullname */ + case 228: /* using_opt */ + case 231: /* idlist */ + case 235: /* idlist_opt */ { -sqlite3SrcListDelete(pParse->db, (yypminor->yy427)); +sqlite3IdListDelete(pParse->db, (yypminor->yy48)); } break; - case 198: /* wqlist */ + case 237: /* over_clause */ + case 268: /* windowdefn */ + case 269: /* window */ + case 270: /* frame_opt */ { -sqlite3WithDelete(pParse->db, (yypminor->yy91)); +sqlite3WindowDelete(pParse->db, (yypminor->yy327)); } break; - case 218: /* using_opt */ - case 220: /* idlist */ - case 224: /* idlist_opt */ + case 249: /* trigger_cmd_list */ + case 254: /* trigger_cmd */ { -sqlite3IdListDelete(pParse->db, (yypminor->yy510)); +sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy207)); } break; - case 237: /* trigger_cmd_list */ - case 242: /* trigger_cmd */ + case 251: /* trigger_event */ { -sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy47)); +sqlite3IdListDelete(pParse->db, (yypminor->yy34).b); } break; - case 239: /* trigger_event */ + case 274: /* frame_bound */ + case 275: /* frame_bound_s */ + case 276: /* frame_bound_e */ { -sqlite3IdListDelete(pParse->db, (yypminor->yy300).b); +sqlite3ExprDelete(pParse->db, (yypminor->yy119).pExpr); } break; /********* End destructor definitions *****************************************/ @@ -143328,11 +148016,11 @@ do{ i = yy_shift_ofst[stateno]; assert( i>=0 ); - assert( i+YYNTOKEN<=(int)sizeof(yy_lookahead)/sizeof(yy_lookahead[0]) ); + /* assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD ); */ assert( iLookAhead!=YYNOCODE ); assert( iLookAhead < YYNTOKEN ); i += iLookAhead; - if( yy_lookahead[i]!=iLookAhead ){ + if( i>=YY_NLOOKAHEAD || yy_lookahead[i]!=iLookAhead ){ #ifdef YYFALLBACK YYCODETYPE iFallback; /* Fallback token */ if( iLookAhead=YY_ACTTAB_COUNT j0 ){ #ifndef NDEBUG @@ -143382,7 +148071,7 @@ ** Find the appropriate action for a parser given the non-terminal ** look-ahead token iLookAhead. */ -static int yy_find_reduce_action( +static YYACTIONTYPE yy_find_reduce_action( YYACTIONTYPE stateno, /* Current state number */ YYCODETYPE iLookAhead /* The look-ahead token */ ){ @@ -143500,347 +148189,373 @@ YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 149, -1 }, /* (0) explain ::= EXPLAIN */ - { 149, -3 }, /* (1) explain ::= EXPLAIN QUERY PLAN */ - { 148, -1 }, /* (2) cmdx ::= cmd */ - { 150, -3 }, /* (3) cmd ::= BEGIN transtype trans_opt */ - { 151, 0 }, /* (4) transtype ::= */ - { 151, -1 }, /* (5) transtype ::= DEFERRED */ - { 151, -1 }, /* (6) transtype ::= IMMEDIATE */ - { 151, -1 }, /* (7) transtype ::= EXCLUSIVE */ - { 150, -2 }, /* (8) cmd ::= COMMIT|END trans_opt */ - { 150, -2 }, /* (9) cmd ::= ROLLBACK trans_opt */ - { 150, -2 }, /* (10) cmd ::= SAVEPOINT nm */ - { 150, -3 }, /* (11) cmd ::= RELEASE savepoint_opt nm */ - { 150, -5 }, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ - { 155, -6 }, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ - { 157, -1 }, /* (14) createkw ::= CREATE */ - { 159, 0 }, /* (15) ifnotexists ::= */ - { 159, -3 }, /* (16) ifnotexists ::= IF NOT EXISTS */ - { 158, -1 }, /* (17) temp ::= TEMP */ - { 158, 0 }, /* (18) temp ::= */ - { 156, -5 }, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_options */ - { 156, -2 }, /* (20) create_table_args ::= AS select */ - { 163, 0 }, /* (21) table_options ::= */ - { 163, -2 }, /* (22) table_options ::= WITHOUT nm */ - { 165, -2 }, /* (23) columnname ::= nm typetoken */ - { 167, 0 }, /* (24) typetoken ::= */ - { 167, -4 }, /* (25) typetoken ::= typename LP signed RP */ - { 167, -6 }, /* (26) typetoken ::= typename LP signed COMMA signed RP */ - { 168, -2 }, /* (27) typename ::= typename ID|STRING */ - { 172, 0 }, /* (28) scanpt ::= */ - { 173, -2 }, /* (29) ccons ::= CONSTRAINT nm */ - { 173, -4 }, /* (30) ccons ::= DEFAULT scanpt term scanpt */ - { 173, -4 }, /* (31) ccons ::= DEFAULT LP expr RP */ - { 173, -4 }, /* (32) ccons ::= DEFAULT PLUS term scanpt */ - { 173, -4 }, /* (33) ccons ::= DEFAULT MINUS term scanpt */ - { 173, -3 }, /* (34) ccons ::= DEFAULT scanpt ID|INDEXED */ - { 173, -3 }, /* (35) ccons ::= NOT NULL onconf */ - { 173, -5 }, /* (36) ccons ::= PRIMARY KEY sortorder onconf autoinc */ - { 173, -2 }, /* (37) ccons ::= UNIQUE onconf */ - { 173, -4 }, /* (38) ccons ::= CHECK LP expr RP */ - { 173, -4 }, /* (39) ccons ::= REFERENCES nm eidlist_opt refargs */ - { 173, -1 }, /* (40) ccons ::= defer_subclause */ - { 173, -2 }, /* (41) ccons ::= COLLATE ID|STRING */ - { 178, 0 }, /* (42) autoinc ::= */ - { 178, -1 }, /* (43) autoinc ::= AUTOINCR */ - { 180, 0 }, /* (44) refargs ::= */ - { 180, -2 }, /* (45) refargs ::= refargs refarg */ - { 182, -2 }, /* (46) refarg ::= MATCH nm */ - { 182, -3 }, /* (47) refarg ::= ON INSERT refact */ - { 182, -3 }, /* (48) refarg ::= ON DELETE refact */ - { 182, -3 }, /* (49) refarg ::= ON UPDATE refact */ - { 183, -2 }, /* (50) refact ::= SET NULL */ - { 183, -2 }, /* (51) refact ::= SET DEFAULT */ - { 183, -1 }, /* (52) refact ::= CASCADE */ - { 183, -1 }, /* (53) refact ::= RESTRICT */ - { 183, -2 }, /* (54) refact ::= NO ACTION */ - { 181, -3 }, /* (55) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ - { 181, -2 }, /* (56) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ - { 184, 0 }, /* (57) init_deferred_pred_opt ::= */ - { 184, -2 }, /* (58) init_deferred_pred_opt ::= INITIALLY DEFERRED */ - { 184, -2 }, /* (59) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ - { 162, 0 }, /* (60) conslist_opt ::= */ - { 186, -1 }, /* (61) tconscomma ::= COMMA */ - { 187, -2 }, /* (62) tcons ::= CONSTRAINT nm */ - { 187, -7 }, /* (63) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ - { 187, -5 }, /* (64) tcons ::= UNIQUE LP sortlist RP onconf */ - { 187, -5 }, /* (65) tcons ::= CHECK LP expr RP onconf */ - { 187, -10 }, /* (66) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ - { 190, 0 }, /* (67) defer_subclause_opt ::= */ - { 176, 0 }, /* (68) onconf ::= */ - { 176, -3 }, /* (69) onconf ::= ON CONFLICT resolvetype */ - { 191, 0 }, /* (70) orconf ::= */ - { 191, -2 }, /* (71) orconf ::= OR resolvetype */ - { 192, -1 }, /* (72) resolvetype ::= IGNORE */ - { 192, -1 }, /* (73) resolvetype ::= REPLACE */ - { 150, -4 }, /* (74) cmd ::= DROP TABLE ifexists fullname */ - { 194, -2 }, /* (75) ifexists ::= IF EXISTS */ - { 194, 0 }, /* (76) ifexists ::= */ - { 150, -9 }, /* (77) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ - { 150, -4 }, /* (78) cmd ::= DROP VIEW ifexists fullname */ - { 150, -1 }, /* (79) cmd ::= select */ - { 164, -3 }, /* (80) select ::= WITH wqlist selectnowith */ - { 164, -4 }, /* (81) select ::= WITH RECURSIVE wqlist selectnowith */ - { 164, -1 }, /* (82) select ::= selectnowith */ - { 196, -3 }, /* (83) selectnowith ::= selectnowith multiselect_op oneselect */ - { 199, -1 }, /* (84) multiselect_op ::= UNION */ - { 199, -2 }, /* (85) multiselect_op ::= UNION ALL */ - { 199, -1 }, /* (86) multiselect_op ::= EXCEPT|INTERSECT */ - { 197, -9 }, /* (87) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ - { 208, -4 }, /* (88) values ::= VALUES LP nexprlist RP */ - { 208, -5 }, /* (89) values ::= values COMMA LP exprlist RP */ - { 200, -1 }, /* (90) distinct ::= DISTINCT */ - { 200, -1 }, /* (91) distinct ::= ALL */ - { 200, 0 }, /* (92) distinct ::= */ - { 211, 0 }, /* (93) sclp ::= */ - { 201, -5 }, /* (94) selcollist ::= sclp scanpt expr scanpt as */ - { 201, -3 }, /* (95) selcollist ::= sclp scanpt STAR */ - { 201, -5 }, /* (96) selcollist ::= sclp scanpt nm DOT STAR */ - { 212, -2 }, /* (97) as ::= AS nm */ - { 212, 0 }, /* (98) as ::= */ - { 202, 0 }, /* (99) from ::= */ - { 202, -2 }, /* (100) from ::= FROM seltablist */ - { 214, -2 }, /* (101) stl_prefix ::= seltablist joinop */ - { 214, 0 }, /* (102) stl_prefix ::= */ - { 213, -7 }, /* (103) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ - { 213, -9 }, /* (104) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ - { 213, -7 }, /* (105) seltablist ::= stl_prefix LP select RP as on_opt using_opt */ - { 213, -7 }, /* (106) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ - { 160, 0 }, /* (107) dbnm ::= */ - { 160, -2 }, /* (108) dbnm ::= DOT nm */ - { 195, -1 }, /* (109) fullname ::= nm */ - { 195, -3 }, /* (110) fullname ::= nm DOT nm */ - { 219, -1 }, /* (111) xfullname ::= nm */ - { 219, -3 }, /* (112) xfullname ::= nm DOT nm */ - { 219, -5 }, /* (113) xfullname ::= nm DOT nm AS nm */ - { 219, -3 }, /* (114) xfullname ::= nm AS nm */ - { 215, -1 }, /* (115) joinop ::= COMMA|JOIN */ - { 215, -2 }, /* (116) joinop ::= JOIN_KW JOIN */ - { 215, -3 }, /* (117) joinop ::= JOIN_KW nm JOIN */ - { 215, -4 }, /* (118) joinop ::= JOIN_KW nm nm JOIN */ - { 217, -2 }, /* (119) on_opt ::= ON expr */ - { 217, 0 }, /* (120) on_opt ::= */ - { 216, 0 }, /* (121) indexed_opt ::= */ - { 216, -3 }, /* (122) indexed_opt ::= INDEXED BY nm */ - { 216, -2 }, /* (123) indexed_opt ::= NOT INDEXED */ - { 218, -4 }, /* (124) using_opt ::= USING LP idlist RP */ - { 218, 0 }, /* (125) using_opt ::= */ - { 206, 0 }, /* (126) orderby_opt ::= */ - { 206, -3 }, /* (127) orderby_opt ::= ORDER BY sortlist */ - { 188, -4 }, /* (128) sortlist ::= sortlist COMMA expr sortorder */ - { 188, -2 }, /* (129) sortlist ::= expr sortorder */ - { 177, -1 }, /* (130) sortorder ::= ASC */ - { 177, -1 }, /* (131) sortorder ::= DESC */ - { 177, 0 }, /* (132) sortorder ::= */ - { 204, 0 }, /* (133) groupby_opt ::= */ - { 204, -3 }, /* (134) groupby_opt ::= GROUP BY nexprlist */ - { 205, 0 }, /* (135) having_opt ::= */ - { 205, -2 }, /* (136) having_opt ::= HAVING expr */ - { 207, 0 }, /* (137) limit_opt ::= */ - { 207, -2 }, /* (138) limit_opt ::= LIMIT expr */ - { 207, -4 }, /* (139) limit_opt ::= LIMIT expr OFFSET expr */ - { 207, -4 }, /* (140) limit_opt ::= LIMIT expr COMMA expr */ - { 150, -6 }, /* (141) cmd ::= with DELETE FROM xfullname indexed_opt where_opt */ - { 203, 0 }, /* (142) where_opt ::= */ - { 203, -2 }, /* (143) where_opt ::= WHERE expr */ - { 150, -8 }, /* (144) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */ - { 222, -5 }, /* (145) setlist ::= setlist COMMA nm EQ expr */ - { 222, -7 }, /* (146) setlist ::= setlist COMMA LP idlist RP EQ expr */ - { 222, -3 }, /* (147) setlist ::= nm EQ expr */ - { 222, -5 }, /* (148) setlist ::= LP idlist RP EQ expr */ - { 150, -7 }, /* (149) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ - { 150, -7 }, /* (150) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */ - { 225, 0 }, /* (151) upsert ::= */ - { 225, -11 }, /* (152) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */ - { 225, -8 }, /* (153) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */ - { 225, -4 }, /* (154) upsert ::= ON CONFLICT DO NOTHING */ - { 223, -2 }, /* (155) insert_cmd ::= INSERT orconf */ - { 223, -1 }, /* (156) insert_cmd ::= REPLACE */ - { 224, 0 }, /* (157) idlist_opt ::= */ - { 224, -3 }, /* (158) idlist_opt ::= LP idlist RP */ - { 220, -3 }, /* (159) idlist ::= idlist COMMA nm */ - { 220, -1 }, /* (160) idlist ::= nm */ - { 175, -3 }, /* (161) expr ::= LP expr RP */ - { 175, -1 }, /* (162) expr ::= ID|INDEXED */ - { 175, -1 }, /* (163) expr ::= JOIN_KW */ - { 175, -3 }, /* (164) expr ::= nm DOT nm */ - { 175, -5 }, /* (165) expr ::= nm DOT nm DOT nm */ - { 174, -1 }, /* (166) term ::= NULL|FLOAT|BLOB */ - { 174, -1 }, /* (167) term ::= STRING */ - { 174, -1 }, /* (168) term ::= INTEGER */ - { 175, -1 }, /* (169) expr ::= VARIABLE */ - { 175, -3 }, /* (170) expr ::= expr COLLATE ID|STRING */ - { 175, -6 }, /* (171) expr ::= CAST LP expr AS typetoken RP */ - { 175, -5 }, /* (172) expr ::= ID|INDEXED LP distinct exprlist RP */ - { 175, -4 }, /* (173) expr ::= ID|INDEXED LP STAR RP */ - { 174, -1 }, /* (174) term ::= CTIME_KW */ - { 175, -5 }, /* (175) expr ::= LP nexprlist COMMA expr RP */ - { 175, -3 }, /* (176) expr ::= expr AND expr */ - { 175, -3 }, /* (177) expr ::= expr OR expr */ - { 175, -3 }, /* (178) expr ::= expr LT|GT|GE|LE expr */ - { 175, -3 }, /* (179) expr ::= expr EQ|NE expr */ - { 175, -3 }, /* (180) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ - { 175, -3 }, /* (181) expr ::= expr PLUS|MINUS expr */ - { 175, -3 }, /* (182) expr ::= expr STAR|SLASH|REM expr */ - { 175, -3 }, /* (183) expr ::= expr CONCAT expr */ - { 226, -2 }, /* (184) likeop ::= NOT LIKE_KW|MATCH */ - { 175, -3 }, /* (185) expr ::= expr likeop expr */ - { 175, -5 }, /* (186) expr ::= expr likeop expr ESCAPE expr */ - { 175, -2 }, /* (187) expr ::= expr ISNULL|NOTNULL */ - { 175, -3 }, /* (188) expr ::= expr NOT NULL */ - { 175, -3 }, /* (189) expr ::= expr IS expr */ - { 175, -4 }, /* (190) expr ::= expr IS NOT expr */ - { 175, -2 }, /* (191) expr ::= NOT expr */ - { 175, -2 }, /* (192) expr ::= BITNOT expr */ - { 175, -2 }, /* (193) expr ::= MINUS expr */ - { 175, -2 }, /* (194) expr ::= PLUS expr */ - { 227, -1 }, /* (195) between_op ::= BETWEEN */ - { 227, -2 }, /* (196) between_op ::= NOT BETWEEN */ - { 175, -5 }, /* (197) expr ::= expr between_op expr AND expr */ - { 228, -1 }, /* (198) in_op ::= IN */ - { 228, -2 }, /* (199) in_op ::= NOT IN */ - { 175, -5 }, /* (200) expr ::= expr in_op LP exprlist RP */ - { 175, -3 }, /* (201) expr ::= LP select RP */ - { 175, -5 }, /* (202) expr ::= expr in_op LP select RP */ - { 175, -5 }, /* (203) expr ::= expr in_op nm dbnm paren_exprlist */ - { 175, -4 }, /* (204) expr ::= EXISTS LP select RP */ - { 175, -5 }, /* (205) expr ::= CASE case_operand case_exprlist case_else END */ - { 231, -5 }, /* (206) case_exprlist ::= case_exprlist WHEN expr THEN expr */ - { 231, -4 }, /* (207) case_exprlist ::= WHEN expr THEN expr */ - { 232, -2 }, /* (208) case_else ::= ELSE expr */ - { 232, 0 }, /* (209) case_else ::= */ - { 230, -1 }, /* (210) case_operand ::= expr */ - { 230, 0 }, /* (211) case_operand ::= */ - { 210, 0 }, /* (212) exprlist ::= */ - { 209, -3 }, /* (213) nexprlist ::= nexprlist COMMA expr */ - { 209, -1 }, /* (214) nexprlist ::= expr */ - { 229, 0 }, /* (215) paren_exprlist ::= */ - { 229, -3 }, /* (216) paren_exprlist ::= LP exprlist RP */ - { 150, -12 }, /* (217) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ - { 233, -1 }, /* (218) uniqueflag ::= UNIQUE */ - { 233, 0 }, /* (219) uniqueflag ::= */ - { 179, 0 }, /* (220) eidlist_opt ::= */ - { 179, -3 }, /* (221) eidlist_opt ::= LP eidlist RP */ - { 189, -5 }, /* (222) eidlist ::= eidlist COMMA nm collate sortorder */ - { 189, -3 }, /* (223) eidlist ::= nm collate sortorder */ - { 234, 0 }, /* (224) collate ::= */ - { 234, -2 }, /* (225) collate ::= COLLATE ID|STRING */ - { 150, -4 }, /* (226) cmd ::= DROP INDEX ifexists fullname */ - { 150, -1 }, /* (227) cmd ::= VACUUM */ - { 150, -2 }, /* (228) cmd ::= VACUUM nm */ - { 150, -3 }, /* (229) cmd ::= PRAGMA nm dbnm */ - { 150, -5 }, /* (230) cmd ::= PRAGMA nm dbnm EQ nmnum */ - { 150, -6 }, /* (231) cmd ::= PRAGMA nm dbnm LP nmnum RP */ - { 150, -5 }, /* (232) cmd ::= PRAGMA nm dbnm EQ minus_num */ - { 150, -6 }, /* (233) cmd ::= PRAGMA nm dbnm LP minus_num RP */ - { 170, -2 }, /* (234) plus_num ::= PLUS INTEGER|FLOAT */ - { 171, -2 }, /* (235) minus_num ::= MINUS INTEGER|FLOAT */ - { 150, -5 }, /* (236) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ - { 236, -11 }, /* (237) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ - { 238, -1 }, /* (238) trigger_time ::= BEFORE|AFTER */ - { 238, -2 }, /* (239) trigger_time ::= INSTEAD OF */ - { 238, 0 }, /* (240) trigger_time ::= */ - { 239, -1 }, /* (241) trigger_event ::= DELETE|INSERT */ - { 239, -1 }, /* (242) trigger_event ::= UPDATE */ - { 239, -3 }, /* (243) trigger_event ::= UPDATE OF idlist */ - { 241, 0 }, /* (244) when_clause ::= */ - { 241, -2 }, /* (245) when_clause ::= WHEN expr */ - { 237, -3 }, /* (246) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ - { 237, -2 }, /* (247) trigger_cmd_list ::= trigger_cmd SEMI */ - { 243, -3 }, /* (248) trnm ::= nm DOT nm */ - { 244, -3 }, /* (249) tridxby ::= INDEXED BY nm */ - { 244, -2 }, /* (250) tridxby ::= NOT INDEXED */ - { 242, -8 }, /* (251) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */ - { 242, -8 }, /* (252) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ - { 242, -6 }, /* (253) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ - { 242, -3 }, /* (254) trigger_cmd ::= scanpt select scanpt */ - { 175, -4 }, /* (255) expr ::= RAISE LP IGNORE RP */ - { 175, -6 }, /* (256) expr ::= RAISE LP raisetype COMMA nm RP */ - { 193, -1 }, /* (257) raisetype ::= ROLLBACK */ - { 193, -1 }, /* (258) raisetype ::= ABORT */ - { 193, -1 }, /* (259) raisetype ::= FAIL */ - { 150, -4 }, /* (260) cmd ::= DROP TRIGGER ifexists fullname */ - { 150, -6 }, /* (261) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ - { 150, -3 }, /* (262) cmd ::= DETACH database_kw_opt expr */ - { 246, 0 }, /* (263) key_opt ::= */ - { 246, -2 }, /* (264) key_opt ::= KEY expr */ - { 150, -1 }, /* (265) cmd ::= REINDEX */ - { 150, -3 }, /* (266) cmd ::= REINDEX nm dbnm */ - { 150, -1 }, /* (267) cmd ::= ANALYZE */ - { 150, -3 }, /* (268) cmd ::= ANALYZE nm dbnm */ - { 150, -6 }, /* (269) cmd ::= ALTER TABLE fullname RENAME TO nm */ - { 150, -7 }, /* (270) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ - { 247, -1 }, /* (271) add_column_fullname ::= fullname */ - { 150, -1 }, /* (272) cmd ::= create_vtab */ - { 150, -4 }, /* (273) cmd ::= create_vtab LP vtabarglist RP */ - { 249, -8 }, /* (274) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ - { 251, 0 }, /* (275) vtabarg ::= */ - { 252, -1 }, /* (276) vtabargtoken ::= ANY */ - { 252, -3 }, /* (277) vtabargtoken ::= lp anylist RP */ - { 253, -1 }, /* (278) lp ::= LP */ - { 221, -2 }, /* (279) with ::= WITH wqlist */ - { 221, -3 }, /* (280) with ::= WITH RECURSIVE wqlist */ - { 198, -6 }, /* (281) wqlist ::= nm eidlist_opt AS LP select RP */ - { 198, -8 }, /* (282) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ - { 145, -1 }, /* (283) input ::= cmdlist */ - { 146, -2 }, /* (284) cmdlist ::= cmdlist ecmd */ - { 146, -1 }, /* (285) cmdlist ::= ecmd */ - { 147, -1 }, /* (286) ecmd ::= SEMI */ - { 147, -2 }, /* (287) ecmd ::= cmdx SEMI */ - { 147, -2 }, /* (288) ecmd ::= explain cmdx */ - { 152, 0 }, /* (289) trans_opt ::= */ - { 152, -1 }, /* (290) trans_opt ::= TRANSACTION */ - { 152, -2 }, /* (291) trans_opt ::= TRANSACTION nm */ - { 154, -1 }, /* (292) savepoint_opt ::= SAVEPOINT */ - { 154, 0 }, /* (293) savepoint_opt ::= */ - { 150, -2 }, /* (294) cmd ::= create_table create_table_args */ - { 161, -4 }, /* (295) columnlist ::= columnlist COMMA columnname carglist */ - { 161, -2 }, /* (296) columnlist ::= columnname carglist */ - { 153, -1 }, /* (297) nm ::= ID|INDEXED */ - { 153, -1 }, /* (298) nm ::= STRING */ - { 153, -1 }, /* (299) nm ::= JOIN_KW */ - { 167, -1 }, /* (300) typetoken ::= typename */ - { 168, -1 }, /* (301) typename ::= ID|STRING */ - { 169, -1 }, /* (302) signed ::= plus_num */ - { 169, -1 }, /* (303) signed ::= minus_num */ - { 166, -2 }, /* (304) carglist ::= carglist ccons */ - { 166, 0 }, /* (305) carglist ::= */ - { 173, -2 }, /* (306) ccons ::= NULL onconf */ - { 162, -2 }, /* (307) conslist_opt ::= COMMA conslist */ - { 185, -3 }, /* (308) conslist ::= conslist tconscomma tcons */ - { 185, -1 }, /* (309) conslist ::= tcons */ - { 186, 0 }, /* (310) tconscomma ::= */ - { 190, -1 }, /* (311) defer_subclause_opt ::= defer_subclause */ - { 192, -1 }, /* (312) resolvetype ::= raisetype */ - { 196, -1 }, /* (313) selectnowith ::= oneselect */ - { 197, -1 }, /* (314) oneselect ::= values */ - { 211, -2 }, /* (315) sclp ::= selcollist COMMA */ - { 212, -1 }, /* (316) as ::= ID|STRING */ - { 175, -1 }, /* (317) expr ::= term */ - { 226, -1 }, /* (318) likeop ::= LIKE_KW|MATCH */ - { 210, -1 }, /* (319) exprlist ::= nexprlist */ - { 235, -1 }, /* (320) nmnum ::= plus_num */ - { 235, -1 }, /* (321) nmnum ::= nm */ - { 235, -1 }, /* (322) nmnum ::= ON */ - { 235, -1 }, /* (323) nmnum ::= DELETE */ - { 235, -1 }, /* (324) nmnum ::= DEFAULT */ - { 170, -1 }, /* (325) plus_num ::= INTEGER|FLOAT */ - { 240, 0 }, /* (326) foreach_clause ::= */ - { 240, -3 }, /* (327) foreach_clause ::= FOR EACH ROW */ - { 243, -1 }, /* (328) trnm ::= nm */ - { 244, 0 }, /* (329) tridxby ::= */ - { 245, -1 }, /* (330) database_kw_opt ::= DATABASE */ - { 245, 0 }, /* (331) database_kw_opt ::= */ - { 248, 0 }, /* (332) kwcolumn_opt ::= */ - { 248, -1 }, /* (333) kwcolumn_opt ::= COLUMNKW */ - { 250, -1 }, /* (334) vtabarglist ::= vtabarg */ - { 250, -3 }, /* (335) vtabarglist ::= vtabarglist COMMA vtabarg */ - { 251, -2 }, /* (336) vtabarg ::= vtabarg vtabargtoken */ - { 254, 0 }, /* (337) anylist ::= */ - { 254, -4 }, /* (338) anylist ::= anylist LP anylist RP */ - { 254, -2 }, /* (339) anylist ::= anylist ANY */ - { 221, 0 }, /* (340) with ::= */ + { 159, -1 }, /* (0) explain ::= EXPLAIN */ + { 159, -3 }, /* (1) explain ::= EXPLAIN QUERY PLAN */ + { 158, -1 }, /* (2) cmdx ::= cmd */ + { 160, -3 }, /* (3) cmd ::= BEGIN transtype trans_opt */ + { 161, 0 }, /* (4) transtype ::= */ + { 161, -1 }, /* (5) transtype ::= DEFERRED */ + { 161, -1 }, /* (6) transtype ::= IMMEDIATE */ + { 161, -1 }, /* (7) transtype ::= EXCLUSIVE */ + { 160, -2 }, /* (8) cmd ::= COMMIT|END trans_opt */ + { 160, -2 }, /* (9) cmd ::= ROLLBACK trans_opt */ + { 160, -2 }, /* (10) cmd ::= SAVEPOINT nm */ + { 160, -3 }, /* (11) cmd ::= RELEASE savepoint_opt nm */ + { 160, -5 }, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ + { 165, -6 }, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ + { 167, -1 }, /* (14) createkw ::= CREATE */ + { 169, 0 }, /* (15) ifnotexists ::= */ + { 169, -3 }, /* (16) ifnotexists ::= IF NOT EXISTS */ + { 168, -1 }, /* (17) temp ::= TEMP */ + { 168, 0 }, /* (18) temp ::= */ + { 166, -5 }, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_options */ + { 166, -2 }, /* (20) create_table_args ::= AS select */ + { 173, 0 }, /* (21) table_options ::= */ + { 173, -2 }, /* (22) table_options ::= WITHOUT nm */ + { 175, -2 }, /* (23) columnname ::= nm typetoken */ + { 177, 0 }, /* (24) typetoken ::= */ + { 177, -4 }, /* (25) typetoken ::= typename LP signed RP */ + { 177, -6 }, /* (26) typetoken ::= typename LP signed COMMA signed RP */ + { 178, -2 }, /* (27) typename ::= typename ID|STRING */ + { 182, 0 }, /* (28) scanpt ::= */ + { 183, -2 }, /* (29) ccons ::= CONSTRAINT nm */ + { 183, -4 }, /* (30) ccons ::= DEFAULT scanpt term scanpt */ + { 183, -4 }, /* (31) ccons ::= DEFAULT LP expr RP */ + { 183, -4 }, /* (32) ccons ::= DEFAULT PLUS term scanpt */ + { 183, -4 }, /* (33) ccons ::= DEFAULT MINUS term scanpt */ + { 183, -3 }, /* (34) ccons ::= DEFAULT scanpt ID|INDEXED */ + { 183, -3 }, /* (35) ccons ::= NOT NULL onconf */ + { 183, -5 }, /* (36) ccons ::= PRIMARY KEY sortorder onconf autoinc */ + { 183, -2 }, /* (37) ccons ::= UNIQUE onconf */ + { 183, -4 }, /* (38) ccons ::= CHECK LP expr RP */ + { 183, -4 }, /* (39) ccons ::= REFERENCES nm eidlist_opt refargs */ + { 183, -1 }, /* (40) ccons ::= defer_subclause */ + { 183, -2 }, /* (41) ccons ::= COLLATE ID|STRING */ + { 188, 0 }, /* (42) autoinc ::= */ + { 188, -1 }, /* (43) autoinc ::= AUTOINCR */ + { 190, 0 }, /* (44) refargs ::= */ + { 190, -2 }, /* (45) refargs ::= refargs refarg */ + { 192, -2 }, /* (46) refarg ::= MATCH nm */ + { 192, -3 }, /* (47) refarg ::= ON INSERT refact */ + { 192, -3 }, /* (48) refarg ::= ON DELETE refact */ + { 192, -3 }, /* (49) refarg ::= ON UPDATE refact */ + { 193, -2 }, /* (50) refact ::= SET NULL */ + { 193, -2 }, /* (51) refact ::= SET DEFAULT */ + { 193, -1 }, /* (52) refact ::= CASCADE */ + { 193, -1 }, /* (53) refact ::= RESTRICT */ + { 193, -2 }, /* (54) refact ::= NO ACTION */ + { 191, -3 }, /* (55) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ + { 191, -2 }, /* (56) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + { 194, 0 }, /* (57) init_deferred_pred_opt ::= */ + { 194, -2 }, /* (58) init_deferred_pred_opt ::= INITIALLY DEFERRED */ + { 194, -2 }, /* (59) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ + { 172, 0 }, /* (60) conslist_opt ::= */ + { 196, -1 }, /* (61) tconscomma ::= COMMA */ + { 197, -2 }, /* (62) tcons ::= CONSTRAINT nm */ + { 197, -7 }, /* (63) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ + { 197, -5 }, /* (64) tcons ::= UNIQUE LP sortlist RP onconf */ + { 197, -5 }, /* (65) tcons ::= CHECK LP expr RP onconf */ + { 197, -10 }, /* (66) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ + { 200, 0 }, /* (67) defer_subclause_opt ::= */ + { 186, 0 }, /* (68) onconf ::= */ + { 186, -3 }, /* (69) onconf ::= ON CONFLICT resolvetype */ + { 201, 0 }, /* (70) orconf ::= */ + { 201, -2 }, /* (71) orconf ::= OR resolvetype */ + { 202, -1 }, /* (72) resolvetype ::= IGNORE */ + { 202, -1 }, /* (73) resolvetype ::= REPLACE */ + { 160, -4 }, /* (74) cmd ::= DROP TABLE ifexists fullname */ + { 204, -2 }, /* (75) ifexists ::= IF EXISTS */ + { 204, 0 }, /* (76) ifexists ::= */ + { 160, -9 }, /* (77) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ + { 160, -4 }, /* (78) cmd ::= DROP VIEW ifexists fullname */ + { 160, -1 }, /* (79) cmd ::= select */ + { 174, -3 }, /* (80) select ::= WITH wqlist selectnowith */ + { 174, -4 }, /* (81) select ::= WITH RECURSIVE wqlist selectnowith */ + { 174, -1 }, /* (82) select ::= selectnowith */ + { 206, -3 }, /* (83) selectnowith ::= selectnowith multiselect_op oneselect */ + { 209, -1 }, /* (84) multiselect_op ::= UNION */ + { 209, -2 }, /* (85) multiselect_op ::= UNION ALL */ + { 209, -1 }, /* (86) multiselect_op ::= EXCEPT|INTERSECT */ + { 207, -9 }, /* (87) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ + { 207, -10 }, /* (88) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ + { 219, -4 }, /* (89) values ::= VALUES LP nexprlist RP */ + { 219, -5 }, /* (90) values ::= values COMMA LP nexprlist RP */ + { 210, -1 }, /* (91) distinct ::= DISTINCT */ + { 210, -1 }, /* (92) distinct ::= ALL */ + { 210, 0 }, /* (93) distinct ::= */ + { 221, 0 }, /* (94) sclp ::= */ + { 211, -5 }, /* (95) selcollist ::= sclp scanpt expr scanpt as */ + { 211, -3 }, /* (96) selcollist ::= sclp scanpt STAR */ + { 211, -5 }, /* (97) selcollist ::= sclp scanpt nm DOT STAR */ + { 222, -2 }, /* (98) as ::= AS nm */ + { 222, 0 }, /* (99) as ::= */ + { 212, 0 }, /* (100) from ::= */ + { 212, -2 }, /* (101) from ::= FROM seltablist */ + { 224, -2 }, /* (102) stl_prefix ::= seltablist joinop */ + { 224, 0 }, /* (103) stl_prefix ::= */ + { 223, -7 }, /* (104) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ + { 223, -9 }, /* (105) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ + { 223, -7 }, /* (106) seltablist ::= stl_prefix LP select RP as on_opt using_opt */ + { 223, -7 }, /* (107) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ + { 170, 0 }, /* (108) dbnm ::= */ + { 170, -2 }, /* (109) dbnm ::= DOT nm */ + { 205, -1 }, /* (110) fullname ::= nm */ + { 205, -3 }, /* (111) fullname ::= nm DOT nm */ + { 230, -1 }, /* (112) xfullname ::= nm */ + { 230, -3 }, /* (113) xfullname ::= nm DOT nm */ + { 230, -5 }, /* (114) xfullname ::= nm DOT nm AS nm */ + { 230, -3 }, /* (115) xfullname ::= nm AS nm */ + { 225, -1 }, /* (116) joinop ::= COMMA|JOIN */ + { 225, -2 }, /* (117) joinop ::= JOIN_KW JOIN */ + { 225, -3 }, /* (118) joinop ::= JOIN_KW nm JOIN */ + { 225, -4 }, /* (119) joinop ::= JOIN_KW nm nm JOIN */ + { 227, -2 }, /* (120) on_opt ::= ON expr */ + { 227, 0 }, /* (121) on_opt ::= */ + { 226, 0 }, /* (122) indexed_opt ::= */ + { 226, -3 }, /* (123) indexed_opt ::= INDEXED BY nm */ + { 226, -2 }, /* (124) indexed_opt ::= NOT INDEXED */ + { 228, -4 }, /* (125) using_opt ::= USING LP idlist RP */ + { 228, 0 }, /* (126) using_opt ::= */ + { 216, 0 }, /* (127) orderby_opt ::= */ + { 216, -3 }, /* (128) orderby_opt ::= ORDER BY sortlist */ + { 198, -4 }, /* (129) sortlist ::= sortlist COMMA expr sortorder */ + { 198, -2 }, /* (130) sortlist ::= expr sortorder */ + { 187, -1 }, /* (131) sortorder ::= ASC */ + { 187, -1 }, /* (132) sortorder ::= DESC */ + { 187, 0 }, /* (133) sortorder ::= */ + { 214, 0 }, /* (134) groupby_opt ::= */ + { 214, -3 }, /* (135) groupby_opt ::= GROUP BY nexprlist */ + { 215, 0 }, /* (136) having_opt ::= */ + { 215, -2 }, /* (137) having_opt ::= HAVING expr */ + { 217, 0 }, /* (138) limit_opt ::= */ + { 217, -2 }, /* (139) limit_opt ::= LIMIT expr */ + { 217, -4 }, /* (140) limit_opt ::= LIMIT expr OFFSET expr */ + { 217, -4 }, /* (141) limit_opt ::= LIMIT expr COMMA expr */ + { 160, -6 }, /* (142) cmd ::= with DELETE FROM xfullname indexed_opt where_opt */ + { 213, 0 }, /* (143) where_opt ::= */ + { 213, -2 }, /* (144) where_opt ::= WHERE expr */ + { 160, -8 }, /* (145) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */ + { 233, -5 }, /* (146) setlist ::= setlist COMMA nm EQ expr */ + { 233, -7 }, /* (147) setlist ::= setlist COMMA LP idlist RP EQ expr */ + { 233, -3 }, /* (148) setlist ::= nm EQ expr */ + { 233, -5 }, /* (149) setlist ::= LP idlist RP EQ expr */ + { 160, -7 }, /* (150) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ + { 160, -7 }, /* (151) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */ + { 236, 0 }, /* (152) upsert ::= */ + { 236, -11 }, /* (153) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */ + { 236, -8 }, /* (154) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */ + { 236, -4 }, /* (155) upsert ::= ON CONFLICT DO NOTHING */ + { 234, -2 }, /* (156) insert_cmd ::= INSERT orconf */ + { 234, -1 }, /* (157) insert_cmd ::= REPLACE */ + { 235, 0 }, /* (158) idlist_opt ::= */ + { 235, -3 }, /* (159) idlist_opt ::= LP idlist RP */ + { 231, -3 }, /* (160) idlist ::= idlist COMMA nm */ + { 231, -1 }, /* (161) idlist ::= nm */ + { 185, -3 }, /* (162) expr ::= LP expr RP */ + { 185, -1 }, /* (163) expr ::= ID|INDEXED */ + { 185, -1 }, /* (164) expr ::= JOIN_KW */ + { 185, -3 }, /* (165) expr ::= nm DOT nm */ + { 185, -5 }, /* (166) expr ::= nm DOT nm DOT nm */ + { 184, -1 }, /* (167) term ::= NULL|FLOAT|BLOB */ + { 184, -1 }, /* (168) term ::= STRING */ + { 184, -1 }, /* (169) term ::= INTEGER */ + { 185, -1 }, /* (170) expr ::= VARIABLE */ + { 185, -3 }, /* (171) expr ::= expr COLLATE ID|STRING */ + { 185, -6 }, /* (172) expr ::= CAST LP expr AS typetoken RP */ + { 185, -5 }, /* (173) expr ::= ID|INDEXED LP distinct exprlist RP */ + { 185, -4 }, /* (174) expr ::= ID|INDEXED LP STAR RP */ + { 185, -6 }, /* (175) expr ::= ID|INDEXED LP distinct exprlist RP over_clause */ + { 185, -5 }, /* (176) expr ::= ID|INDEXED LP STAR RP over_clause */ + { 184, -1 }, /* (177) term ::= CTIME_KW */ + { 185, -5 }, /* (178) expr ::= LP nexprlist COMMA expr RP */ + { 185, -3 }, /* (179) expr ::= expr AND expr */ + { 185, -3 }, /* (180) expr ::= expr OR expr */ + { 185, -3 }, /* (181) expr ::= expr LT|GT|GE|LE expr */ + { 185, -3 }, /* (182) expr ::= expr EQ|NE expr */ + { 185, -3 }, /* (183) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ + { 185, -3 }, /* (184) expr ::= expr PLUS|MINUS expr */ + { 185, -3 }, /* (185) expr ::= expr STAR|SLASH|REM expr */ + { 185, -3 }, /* (186) expr ::= expr CONCAT expr */ + { 238, -2 }, /* (187) likeop ::= NOT LIKE_KW|MATCH */ + { 185, -3 }, /* (188) expr ::= expr likeop expr */ + { 185, -5 }, /* (189) expr ::= expr likeop expr ESCAPE expr */ + { 185, -2 }, /* (190) expr ::= expr ISNULL|NOTNULL */ + { 185, -3 }, /* (191) expr ::= expr NOT NULL */ + { 185, -3 }, /* (192) expr ::= expr IS expr */ + { 185, -4 }, /* (193) expr ::= expr IS NOT expr */ + { 185, -2 }, /* (194) expr ::= NOT expr */ + { 185, -2 }, /* (195) expr ::= BITNOT expr */ + { 185, -2 }, /* (196) expr ::= PLUS|MINUS expr */ + { 239, -1 }, /* (197) between_op ::= BETWEEN */ + { 239, -2 }, /* (198) between_op ::= NOT BETWEEN */ + { 185, -5 }, /* (199) expr ::= expr between_op expr AND expr */ + { 240, -1 }, /* (200) in_op ::= IN */ + { 240, -2 }, /* (201) in_op ::= NOT IN */ + { 185, -5 }, /* (202) expr ::= expr in_op LP exprlist RP */ + { 185, -3 }, /* (203) expr ::= LP select RP */ + { 185, -5 }, /* (204) expr ::= expr in_op LP select RP */ + { 185, -5 }, /* (205) expr ::= expr in_op nm dbnm paren_exprlist */ + { 185, -4 }, /* (206) expr ::= EXISTS LP select RP */ + { 185, -5 }, /* (207) expr ::= CASE case_operand case_exprlist case_else END */ + { 243, -5 }, /* (208) case_exprlist ::= case_exprlist WHEN expr THEN expr */ + { 243, -4 }, /* (209) case_exprlist ::= WHEN expr THEN expr */ + { 244, -2 }, /* (210) case_else ::= ELSE expr */ + { 244, 0 }, /* (211) case_else ::= */ + { 242, -1 }, /* (212) case_operand ::= expr */ + { 242, 0 }, /* (213) case_operand ::= */ + { 229, 0 }, /* (214) exprlist ::= */ + { 220, -3 }, /* (215) nexprlist ::= nexprlist COMMA expr */ + { 220, -1 }, /* (216) nexprlist ::= expr */ + { 241, 0 }, /* (217) paren_exprlist ::= */ + { 241, -3 }, /* (218) paren_exprlist ::= LP exprlist RP */ + { 160, -12 }, /* (219) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + { 245, -1 }, /* (220) uniqueflag ::= UNIQUE */ + { 245, 0 }, /* (221) uniqueflag ::= */ + { 189, 0 }, /* (222) eidlist_opt ::= */ + { 189, -3 }, /* (223) eidlist_opt ::= LP eidlist RP */ + { 199, -5 }, /* (224) eidlist ::= eidlist COMMA nm collate sortorder */ + { 199, -3 }, /* (225) eidlist ::= nm collate sortorder */ + { 246, 0 }, /* (226) collate ::= */ + { 246, -2 }, /* (227) collate ::= COLLATE ID|STRING */ + { 160, -4 }, /* (228) cmd ::= DROP INDEX ifexists fullname */ + { 160, -1 }, /* (229) cmd ::= VACUUM */ + { 160, -2 }, /* (230) cmd ::= VACUUM nm */ + { 160, -3 }, /* (231) cmd ::= PRAGMA nm dbnm */ + { 160, -5 }, /* (232) cmd ::= PRAGMA nm dbnm EQ nmnum */ + { 160, -6 }, /* (233) cmd ::= PRAGMA nm dbnm LP nmnum RP */ + { 160, -5 }, /* (234) cmd ::= PRAGMA nm dbnm EQ minus_num */ + { 160, -6 }, /* (235) cmd ::= PRAGMA nm dbnm LP minus_num RP */ + { 180, -2 }, /* (236) plus_num ::= PLUS INTEGER|FLOAT */ + { 181, -2 }, /* (237) minus_num ::= MINUS INTEGER|FLOAT */ + { 160, -5 }, /* (238) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + { 248, -11 }, /* (239) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + { 250, -1 }, /* (240) trigger_time ::= BEFORE|AFTER */ + { 250, -2 }, /* (241) trigger_time ::= INSTEAD OF */ + { 250, 0 }, /* (242) trigger_time ::= */ + { 251, -1 }, /* (243) trigger_event ::= DELETE|INSERT */ + { 251, -1 }, /* (244) trigger_event ::= UPDATE */ + { 251, -3 }, /* (245) trigger_event ::= UPDATE OF idlist */ + { 253, 0 }, /* (246) when_clause ::= */ + { 253, -2 }, /* (247) when_clause ::= WHEN expr */ + { 249, -3 }, /* (248) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + { 249, -2 }, /* (249) trigger_cmd_list ::= trigger_cmd SEMI */ + { 255, -3 }, /* (250) trnm ::= nm DOT nm */ + { 256, -3 }, /* (251) tridxby ::= INDEXED BY nm */ + { 256, -2 }, /* (252) tridxby ::= NOT INDEXED */ + { 254, -8 }, /* (253) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */ + { 254, -8 }, /* (254) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + { 254, -6 }, /* (255) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + { 254, -3 }, /* (256) trigger_cmd ::= scanpt select scanpt */ + { 185, -4 }, /* (257) expr ::= RAISE LP IGNORE RP */ + { 185, -6 }, /* (258) expr ::= RAISE LP raisetype COMMA nm RP */ + { 203, -1 }, /* (259) raisetype ::= ROLLBACK */ + { 203, -1 }, /* (260) raisetype ::= ABORT */ + { 203, -1 }, /* (261) raisetype ::= FAIL */ + { 160, -4 }, /* (262) cmd ::= DROP TRIGGER ifexists fullname */ + { 160, -6 }, /* (263) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + { 160, -3 }, /* (264) cmd ::= DETACH database_kw_opt expr */ + { 258, 0 }, /* (265) key_opt ::= */ + { 258, -2 }, /* (266) key_opt ::= KEY expr */ + { 160, -1 }, /* (267) cmd ::= REINDEX */ + { 160, -3 }, /* (268) cmd ::= REINDEX nm dbnm */ + { 160, -1 }, /* (269) cmd ::= ANALYZE */ + { 160, -3 }, /* (270) cmd ::= ANALYZE nm dbnm */ + { 160, -6 }, /* (271) cmd ::= ALTER TABLE fullname RENAME TO nm */ + { 160, -7 }, /* (272) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + { 259, -1 }, /* (273) add_column_fullname ::= fullname */ + { 160, -8 }, /* (274) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + { 160, -1 }, /* (275) cmd ::= create_vtab */ + { 160, -4 }, /* (276) cmd ::= create_vtab LP vtabarglist RP */ + { 261, -8 }, /* (277) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + { 263, 0 }, /* (278) vtabarg ::= */ + { 264, -1 }, /* (279) vtabargtoken ::= ANY */ + { 264, -3 }, /* (280) vtabargtoken ::= lp anylist RP */ + { 265, -1 }, /* (281) lp ::= LP */ + { 232, -2 }, /* (282) with ::= WITH wqlist */ + { 232, -3 }, /* (283) with ::= WITH RECURSIVE wqlist */ + { 208, -6 }, /* (284) wqlist ::= nm eidlist_opt AS LP select RP */ + { 208, -8 }, /* (285) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ + { 267, -1 }, /* (286) windowdefn_list ::= windowdefn */ + { 267, -3 }, /* (287) windowdefn_list ::= windowdefn_list COMMA windowdefn */ + { 268, -3 }, /* (288) windowdefn ::= nm AS window */ + { 269, -5 }, /* (289) window ::= LP part_opt orderby_opt frame_opt RP */ + { 271, -3 }, /* (290) part_opt ::= PARTITION BY nexprlist */ + { 271, 0 }, /* (291) part_opt ::= */ + { 270, 0 }, /* (292) frame_opt ::= */ + { 270, -2 }, /* (293) frame_opt ::= range_or_rows frame_bound_s */ + { 270, -5 }, /* (294) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e */ + { 273, -1 }, /* (295) range_or_rows ::= RANGE */ + { 273, -1 }, /* (296) range_or_rows ::= ROWS */ + { 275, -1 }, /* (297) frame_bound_s ::= frame_bound */ + { 275, -2 }, /* (298) frame_bound_s ::= UNBOUNDED PRECEDING */ + { 276, -1 }, /* (299) frame_bound_e ::= frame_bound */ + { 276, -2 }, /* (300) frame_bound_e ::= UNBOUNDED FOLLOWING */ + { 274, -2 }, /* (301) frame_bound ::= expr PRECEDING */ + { 274, -2 }, /* (302) frame_bound ::= CURRENT ROW */ + { 274, -2 }, /* (303) frame_bound ::= expr FOLLOWING */ + { 218, -2 }, /* (304) window_clause ::= WINDOW windowdefn_list */ + { 237, -3 }, /* (305) over_clause ::= filter_opt OVER window */ + { 237, -3 }, /* (306) over_clause ::= filter_opt OVER nm */ + { 272, 0 }, /* (307) filter_opt ::= */ + { 272, -5 }, /* (308) filter_opt ::= FILTER LP WHERE expr RP */ + { 155, -1 }, /* (309) input ::= cmdlist */ + { 156, -2 }, /* (310) cmdlist ::= cmdlist ecmd */ + { 156, -1 }, /* (311) cmdlist ::= ecmd */ + { 157, -1 }, /* (312) ecmd ::= SEMI */ + { 157, -2 }, /* (313) ecmd ::= cmdx SEMI */ + { 157, -2 }, /* (314) ecmd ::= explain cmdx */ + { 162, 0 }, /* (315) trans_opt ::= */ + { 162, -1 }, /* (316) trans_opt ::= TRANSACTION */ + { 162, -2 }, /* (317) trans_opt ::= TRANSACTION nm */ + { 164, -1 }, /* (318) savepoint_opt ::= SAVEPOINT */ + { 164, 0 }, /* (319) savepoint_opt ::= */ + { 160, -2 }, /* (320) cmd ::= create_table create_table_args */ + { 171, -4 }, /* (321) columnlist ::= columnlist COMMA columnname carglist */ + { 171, -2 }, /* (322) columnlist ::= columnname carglist */ + { 163, -1 }, /* (323) nm ::= ID|INDEXED */ + { 163, -1 }, /* (324) nm ::= STRING */ + { 163, -1 }, /* (325) nm ::= JOIN_KW */ + { 177, -1 }, /* (326) typetoken ::= typename */ + { 178, -1 }, /* (327) typename ::= ID|STRING */ + { 179, -1 }, /* (328) signed ::= plus_num */ + { 179, -1 }, /* (329) signed ::= minus_num */ + { 176, -2 }, /* (330) carglist ::= carglist ccons */ + { 176, 0 }, /* (331) carglist ::= */ + { 183, -2 }, /* (332) ccons ::= NULL onconf */ + { 172, -2 }, /* (333) conslist_opt ::= COMMA conslist */ + { 195, -3 }, /* (334) conslist ::= conslist tconscomma tcons */ + { 195, -1 }, /* (335) conslist ::= tcons */ + { 196, 0 }, /* (336) tconscomma ::= */ + { 200, -1 }, /* (337) defer_subclause_opt ::= defer_subclause */ + { 202, -1 }, /* (338) resolvetype ::= raisetype */ + { 206, -1 }, /* (339) selectnowith ::= oneselect */ + { 207, -1 }, /* (340) oneselect ::= values */ + { 221, -2 }, /* (341) sclp ::= selcollist COMMA */ + { 222, -1 }, /* (342) as ::= ID|STRING */ + { 185, -1 }, /* (343) expr ::= term */ + { 238, -1 }, /* (344) likeop ::= LIKE_KW|MATCH */ + { 229, -1 }, /* (345) exprlist ::= nexprlist */ + { 247, -1 }, /* (346) nmnum ::= plus_num */ + { 247, -1 }, /* (347) nmnum ::= nm */ + { 247, -1 }, /* (348) nmnum ::= ON */ + { 247, -1 }, /* (349) nmnum ::= DELETE */ + { 247, -1 }, /* (350) nmnum ::= DEFAULT */ + { 180, -1 }, /* (351) plus_num ::= INTEGER|FLOAT */ + { 252, 0 }, /* (352) foreach_clause ::= */ + { 252, -3 }, /* (353) foreach_clause ::= FOR EACH ROW */ + { 255, -1 }, /* (354) trnm ::= nm */ + { 256, 0 }, /* (355) tridxby ::= */ + { 257, -1 }, /* (356) database_kw_opt ::= DATABASE */ + { 257, 0 }, /* (357) database_kw_opt ::= */ + { 260, 0 }, /* (358) kwcolumn_opt ::= */ + { 260, -1 }, /* (359) kwcolumn_opt ::= COLUMNKW */ + { 262, -1 }, /* (360) vtabarglist ::= vtabarg */ + { 262, -3 }, /* (361) vtabarglist ::= vtabarglist COMMA vtabarg */ + { 263, -2 }, /* (362) vtabarg ::= vtabarg vtabargtoken */ + { 266, 0 }, /* (363) anylist ::= */ + { 266, -4 }, /* (364) anylist ::= anylist LP anylist RP */ + { 266, -2 }, /* (365) anylist ::= anylist ANY */ + { 232, 0 }, /* (366) with ::= */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -143863,7 +148578,7 @@ sqlite3ParserCTX_PDECL /* %extra_context */ ){ int yygoto; /* The next state */ - int yyact; /* The next action */ + YYACTIONTYPE yyact; /* The next action */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ sqlite3ParserARG_FETCH @@ -143937,15 +148652,15 @@ { sqlite3FinishCoding(pParse); } break; case 3: /* cmd ::= BEGIN transtype trans_opt */ -{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy502);} +{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy70);} break; case 4: /* transtype ::= */ -{yymsp[1].minor.yy502 = TK_DEFERRED;} +{yymsp[1].minor.yy70 = TK_DEFERRED;} break; case 5: /* transtype ::= DEFERRED */ case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6); case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7); -{yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-X*/} +{yymsp[0].minor.yy70 = yymsp[0].major; /*A-overwrites-X*/} break; case 8: /* cmd ::= COMMIT|END trans_opt */ case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9); @@ -143968,7 +148683,7 @@ break; case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ { - sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy502,0,0,yymsp[-2].minor.yy502); + sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy70,0,0,yymsp[-2].minor.yy70); } break; case 14: /* createkw ::= CREATE */ @@ -143981,34 +148696,34 @@ case 57: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==57); case 67: /* defer_subclause_opt ::= */ yytestcase(yyruleno==67); case 76: /* ifexists ::= */ yytestcase(yyruleno==76); - case 92: /* distinct ::= */ yytestcase(yyruleno==92); - case 224: /* collate ::= */ yytestcase(yyruleno==224); -{yymsp[1].minor.yy502 = 0;} + case 93: /* distinct ::= */ yytestcase(yyruleno==93); + case 226: /* collate ::= */ yytestcase(yyruleno==226); +{yymsp[1].minor.yy70 = 0;} break; case 16: /* ifnotexists ::= IF NOT EXISTS */ -{yymsp[-2].minor.yy502 = 1;} +{yymsp[-2].minor.yy70 = 1;} break; case 17: /* temp ::= TEMP */ case 43: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==43); -{yymsp[0].minor.yy502 = 1;} +{yymsp[0].minor.yy70 = 1;} break; case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_options */ { - sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy502,0); + sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy70,0); } break; case 20: /* create_table_args ::= AS select */ { - sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy399); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy399); + sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy489); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy489); } break; case 22: /* table_options ::= WITHOUT nm */ { if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){ - yymsp[-1].minor.yy502 = TF_WithoutRowid | TF_NoVisibleRowid; + yymsp[-1].minor.yy70 = TF_WithoutRowid | TF_NoVisibleRowid; }else{ - yymsp[-1].minor.yy502 = 0; + yymsp[-1].minor.yy70 = 0; sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); } } @@ -144018,7 +148733,7 @@ break; case 24: /* typetoken ::= */ case 60: /* conslist_opt ::= */ yytestcase(yyruleno==60); - case 98: /* as ::= */ yytestcase(yyruleno==98); + case 99: /* as ::= */ yytestcase(yyruleno==99); {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;} break; case 25: /* typetoken ::= typename LP signed RP */ @@ -144037,7 +148752,7 @@ case 28: /* scanpt ::= */ { assert( yyLookahead!=YYNOCODE ); - yymsp[1].minor.yy36 = yyLookaheadToken.z; + yymsp[1].minor.yy392 = yyLookaheadToken.z; } break; case 29: /* ccons ::= CONSTRAINT nm */ @@ -144045,18 +148760,18 @@ {pParse->constraintName = yymsp[0].minor.yy0;} break; case 30: /* ccons ::= DEFAULT scanpt term scanpt */ -{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy182,yymsp[-2].minor.yy36,yymsp[0].minor.yy36);} +{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy18,yymsp[-2].minor.yy392,yymsp[0].minor.yy392);} break; case 31: /* ccons ::= DEFAULT LP expr RP */ -{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy182,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);} +{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy18,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);} break; case 32: /* ccons ::= DEFAULT PLUS term scanpt */ -{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy182,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy36);} +{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy18,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy392);} break; case 33: /* ccons ::= DEFAULT MINUS term scanpt */ { - Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[-1].minor.yy182, 0); - sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy36); + Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[-1].minor.yy18, 0); + sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy392); } break; case 34: /* ccons ::= DEFAULT scanpt ID|INDEXED */ @@ -144066,174 +148781,174 @@ sqlite3ExprIdToTrueFalse(p); testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) ); } - sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n); + sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n); } break; case 35: /* ccons ::= NOT NULL onconf */ -{sqlite3AddNotNull(pParse, yymsp[0].minor.yy502);} +{sqlite3AddNotNull(pParse, yymsp[0].minor.yy70);} break; case 36: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ -{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy502,yymsp[0].minor.yy502,yymsp[-2].minor.yy502);} +{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy70,yymsp[0].minor.yy70,yymsp[-2].minor.yy70);} break; case 37: /* ccons ::= UNIQUE onconf */ -{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy502,0,0,0,0, +{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy70,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; case 38: /* ccons ::= CHECK LP expr RP */ -{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy182);} +{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy18);} break; case 39: /* ccons ::= REFERENCES nm eidlist_opt refargs */ -{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy232,yymsp[0].minor.yy502);} +{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy420,yymsp[0].minor.yy70);} break; case 40: /* ccons ::= defer_subclause */ -{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy502);} +{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy70);} break; case 41: /* ccons ::= COLLATE ID|STRING */ {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} break; case 44: /* refargs ::= */ -{ yymsp[1].minor.yy502 = OE_None*0x0101; /* EV: R-19803-45884 */} +{ yymsp[1].minor.yy70 = OE_None*0x0101; /* EV: R-19803-45884 */} break; case 45: /* refargs ::= refargs refarg */ -{ yymsp[-1].minor.yy502 = (yymsp[-1].minor.yy502 & ~yymsp[0].minor.yy107.mask) | yymsp[0].minor.yy107.value; } +{ yymsp[-1].minor.yy70 = (yymsp[-1].minor.yy70 & ~yymsp[0].minor.yy111.mask) | yymsp[0].minor.yy111.value; } break; case 46: /* refarg ::= MATCH nm */ -{ yymsp[-1].minor.yy107.value = 0; yymsp[-1].minor.yy107.mask = 0x000000; } +{ yymsp[-1].minor.yy111.value = 0; yymsp[-1].minor.yy111.mask = 0x000000; } break; case 47: /* refarg ::= ON INSERT refact */ -{ yymsp[-2].minor.yy107.value = 0; yymsp[-2].minor.yy107.mask = 0x000000; } +{ yymsp[-2].minor.yy111.value = 0; yymsp[-2].minor.yy111.mask = 0x000000; } break; case 48: /* refarg ::= ON DELETE refact */ -{ yymsp[-2].minor.yy107.value = yymsp[0].minor.yy502; yymsp[-2].minor.yy107.mask = 0x0000ff; } +{ yymsp[-2].minor.yy111.value = yymsp[0].minor.yy70; yymsp[-2].minor.yy111.mask = 0x0000ff; } break; case 49: /* refarg ::= ON UPDATE refact */ -{ yymsp[-2].minor.yy107.value = yymsp[0].minor.yy502<<8; yymsp[-2].minor.yy107.mask = 0x00ff00; } +{ yymsp[-2].minor.yy111.value = yymsp[0].minor.yy70<<8; yymsp[-2].minor.yy111.mask = 0x00ff00; } break; case 50: /* refact ::= SET NULL */ -{ yymsp[-1].minor.yy502 = OE_SetNull; /* EV: R-33326-45252 */} +{ yymsp[-1].minor.yy70 = OE_SetNull; /* EV: R-33326-45252 */} break; case 51: /* refact ::= SET DEFAULT */ -{ yymsp[-1].minor.yy502 = OE_SetDflt; /* EV: R-33326-45252 */} +{ yymsp[-1].minor.yy70 = OE_SetDflt; /* EV: R-33326-45252 */} break; case 52: /* refact ::= CASCADE */ -{ yymsp[0].minor.yy502 = OE_Cascade; /* EV: R-33326-45252 */} +{ yymsp[0].minor.yy70 = OE_Cascade; /* EV: R-33326-45252 */} break; case 53: /* refact ::= RESTRICT */ -{ yymsp[0].minor.yy502 = OE_Restrict; /* EV: R-33326-45252 */} +{ yymsp[0].minor.yy70 = OE_Restrict; /* EV: R-33326-45252 */} break; case 54: /* refact ::= NO ACTION */ -{ yymsp[-1].minor.yy502 = OE_None; /* EV: R-33326-45252 */} +{ yymsp[-1].minor.yy70 = OE_None; /* EV: R-33326-45252 */} break; case 55: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ -{yymsp[-2].minor.yy502 = 0;} +{yymsp[-2].minor.yy70 = 0;} break; case 56: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ case 71: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==71); - case 155: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==155); -{yymsp[-1].minor.yy502 = yymsp[0].minor.yy502;} + case 156: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==156); +{yymsp[-1].minor.yy70 = yymsp[0].minor.yy70;} break; case 58: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ case 75: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==75); - case 196: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==196); - case 199: /* in_op ::= NOT IN */ yytestcase(yyruleno==199); - case 225: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==225); -{yymsp[-1].minor.yy502 = 1;} + case 198: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==198); + case 201: /* in_op ::= NOT IN */ yytestcase(yyruleno==201); + case 227: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==227); +{yymsp[-1].minor.yy70 = 1;} break; case 59: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ -{yymsp[-1].minor.yy502 = 0;} +{yymsp[-1].minor.yy70 = 0;} break; case 61: /* tconscomma ::= COMMA */ {pParse->constraintName.n = 0;} break; case 63: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ -{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy232,yymsp[0].minor.yy502,yymsp[-2].minor.yy502,0);} +{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy420,yymsp[0].minor.yy70,yymsp[-2].minor.yy70,0);} break; case 64: /* tcons ::= UNIQUE LP sortlist RP onconf */ -{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy232,yymsp[0].minor.yy502,0,0,0,0, +{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy420,yymsp[0].minor.yy70,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; case 65: /* tcons ::= CHECK LP expr RP onconf */ -{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy182);} +{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy18);} break; case 66: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ { - sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy232, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy232, yymsp[-1].minor.yy502); - sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy502); + sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy420, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy420, yymsp[-1].minor.yy70); + sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy70); } break; case 68: /* onconf ::= */ case 70: /* orconf ::= */ yytestcase(yyruleno==70); -{yymsp[1].minor.yy502 = OE_Default;} +{yymsp[1].minor.yy70 = OE_Default;} break; case 69: /* onconf ::= ON CONFLICT resolvetype */ -{yymsp[-2].minor.yy502 = yymsp[0].minor.yy502;} +{yymsp[-2].minor.yy70 = yymsp[0].minor.yy70;} break; case 72: /* resolvetype ::= IGNORE */ -{yymsp[0].minor.yy502 = OE_Ignore;} +{yymsp[0].minor.yy70 = OE_Ignore;} break; case 73: /* resolvetype ::= REPLACE */ - case 156: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==156); -{yymsp[0].minor.yy502 = OE_Replace;} + case 157: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==157); +{yymsp[0].minor.yy70 = OE_Replace;} break; case 74: /* cmd ::= DROP TABLE ifexists fullname */ { - sqlite3DropTable(pParse, yymsp[0].minor.yy427, 0, yymsp[-1].minor.yy502); + sqlite3DropTable(pParse, yymsp[0].minor.yy135, 0, yymsp[-1].minor.yy70); } break; case 77: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ { - sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy232, yymsp[0].minor.yy399, yymsp[-7].minor.yy502, yymsp[-5].minor.yy502); + sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy420, yymsp[0].minor.yy489, yymsp[-7].minor.yy70, yymsp[-5].minor.yy70); } break; case 78: /* cmd ::= DROP VIEW ifexists fullname */ { - sqlite3DropTable(pParse, yymsp[0].minor.yy427, 1, yymsp[-1].minor.yy502); + sqlite3DropTable(pParse, yymsp[0].minor.yy135, 1, yymsp[-1].minor.yy70); } break; case 79: /* cmd ::= select */ { SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0}; - sqlite3Select(pParse, yymsp[0].minor.yy399, &dest); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy399); + sqlite3Select(pParse, yymsp[0].minor.yy489, &dest); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy489); } break; case 80: /* select ::= WITH wqlist selectnowith */ { - Select *p = yymsp[0].minor.yy399; + Select *p = yymsp[0].minor.yy489; if( p ){ - p->pWith = yymsp[-1].minor.yy91; + p->pWith = yymsp[-1].minor.yy449; parserDoubleLinkSelect(pParse, p); }else{ - sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy91); + sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy449); } - yymsp[-2].minor.yy399 = p; + yymsp[-2].minor.yy489 = p; } break; case 81: /* select ::= WITH RECURSIVE wqlist selectnowith */ { - Select *p = yymsp[0].minor.yy399; + Select *p = yymsp[0].minor.yy489; if( p ){ - p->pWith = yymsp[-1].minor.yy91; + p->pWith = yymsp[-1].minor.yy449; parserDoubleLinkSelect(pParse, p); }else{ - sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy91); + sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy449); } - yymsp[-3].minor.yy399 = p; + yymsp[-3].minor.yy489 = p; } break; case 82: /* select ::= selectnowith */ { - Select *p = yymsp[0].minor.yy399; + Select *p = yymsp[0].minor.yy489; if( p ){ parserDoubleLinkSelect(pParse, p); } - yymsp[0].minor.yy399 = p; /*A-overwrites-X*/ + yymsp[0].minor.yy489 = p; /*A-overwrites-X*/ } break; case 83: /* selectnowith ::= selectnowith multiselect_op oneselect */ { - Select *pRhs = yymsp[0].minor.yy399; - Select *pLhs = yymsp[-2].minor.yy399; + Select *pRhs = yymsp[0].minor.yy489; + Select *pLhs = yymsp[-2].minor.yy489; if( pRhs && pRhs->pPrior ){ SrcList *pFrom; Token x; @@ -144243,378 +148958,382 @@ pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0); } if( pRhs ){ - pRhs->op = (u8)yymsp[-1].minor.yy502; + pRhs->op = (u8)yymsp[-1].minor.yy70; pRhs->pPrior = pLhs; if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue; pRhs->selFlags &= ~SF_MultiValue; - if( yymsp[-1].minor.yy502!=TK_ALL ) pParse->hasCompound = 1; + if( yymsp[-1].minor.yy70!=TK_ALL ) pParse->hasCompound = 1; }else{ sqlite3SelectDelete(pParse->db, pLhs); } - yymsp[-2].minor.yy399 = pRhs; + yymsp[-2].minor.yy489 = pRhs; } break; case 84: /* multiselect_op ::= UNION */ case 86: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==86); -{yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-OP*/} +{yymsp[0].minor.yy70 = yymsp[0].major; /*A-overwrites-OP*/} break; case 85: /* multiselect_op ::= UNION ALL */ -{yymsp[-1].minor.yy502 = TK_ALL;} +{yymsp[-1].minor.yy70 = TK_ALL;} break; case 87: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ { -#if SELECTTRACE_ENABLED - Token s = yymsp[-8].minor.yy0; /*A-overwrites-S*/ -#endif - yymsp[-8].minor.yy399 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy232,yymsp[-5].minor.yy427,yymsp[-4].minor.yy182,yymsp[-3].minor.yy232,yymsp[-2].minor.yy182,yymsp[-1].minor.yy232,yymsp[-7].minor.yy502,yymsp[0].minor.yy182); -#if SELECTTRACE_ENABLED - /* Populate the Select.zSelName[] string that is used to help with - ** query planner debugging, to differentiate between multiple Select - ** objects in a complex query. - ** - ** If the SELECT keyword is immediately followed by a C-style comment - ** then extract the first few alphanumeric characters from within that - ** comment to be the zSelName value. Otherwise, the label is #N where - ** is an integer that is incremented with each SELECT statement seen. - */ - if( yymsp[-8].minor.yy399!=0 ){ - const char *z = s.z+6; - int i; - sqlite3_snprintf(sizeof(yymsp[-8].minor.yy399->zSelName), yymsp[-8].minor.yy399->zSelName,"#%d",++pParse->nSelect); - while( z[0]==' ' ) z++; - if( z[0]=='/' && z[1]=='*' ){ - z += 2; - while( z[0]==' ' ) z++; - for(i=0; sqlite3Isalnum(z[i]); i++){} - sqlite3_snprintf(sizeof(yymsp[-8].minor.yy399->zSelName), yymsp[-8].minor.yy399->zSelName, "%.*s", i, z); - } + yymsp[-8].minor.yy489 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy420,yymsp[-5].minor.yy135,yymsp[-4].minor.yy18,yymsp[-3].minor.yy420,yymsp[-2].minor.yy18,yymsp[-1].minor.yy420,yymsp[-7].minor.yy70,yymsp[0].minor.yy18); +} + break; + case 88: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ +{ + yymsp[-9].minor.yy489 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy420,yymsp[-6].minor.yy135,yymsp[-5].minor.yy18,yymsp[-4].minor.yy420,yymsp[-3].minor.yy18,yymsp[-1].minor.yy420,yymsp[-8].minor.yy70,yymsp[0].minor.yy18); + if( yymsp[-9].minor.yy489 ){ + yymsp[-9].minor.yy489->pWinDefn = yymsp[-2].minor.yy327; + }else{ + sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy327); } -#endif /* SELECTRACE_ENABLED */ } break; - case 88: /* values ::= VALUES LP nexprlist RP */ + case 89: /* values ::= VALUES LP nexprlist RP */ { - yymsp[-3].minor.yy399 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy232,0,0,0,0,0,SF_Values,0); + yymsp[-3].minor.yy489 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy420,0,0,0,0,0,SF_Values,0); } break; - case 89: /* values ::= values COMMA LP exprlist RP */ + case 90: /* values ::= values COMMA LP nexprlist RP */ { - Select *pRight, *pLeft = yymsp[-4].minor.yy399; - pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy232,0,0,0,0,0,SF_Values|SF_MultiValue,0); + Select *pRight, *pLeft = yymsp[-4].minor.yy489; + pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy420,0,0,0,0,0,SF_Values|SF_MultiValue,0); if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue; if( pRight ){ pRight->op = TK_ALL; pRight->pPrior = pLeft; - yymsp[-4].minor.yy399 = pRight; + yymsp[-4].minor.yy489 = pRight; }else{ - yymsp[-4].minor.yy399 = pLeft; + yymsp[-4].minor.yy489 = pLeft; } } break; - case 90: /* distinct ::= DISTINCT */ -{yymsp[0].minor.yy502 = SF_Distinct;} + case 91: /* distinct ::= DISTINCT */ +{yymsp[0].minor.yy70 = SF_Distinct;} break; - case 91: /* distinct ::= ALL */ -{yymsp[0].minor.yy502 = SF_All;} + case 92: /* distinct ::= ALL */ +{yymsp[0].minor.yy70 = SF_All;} break; - case 93: /* sclp ::= */ - case 126: /* orderby_opt ::= */ yytestcase(yyruleno==126); - case 133: /* groupby_opt ::= */ yytestcase(yyruleno==133); - case 212: /* exprlist ::= */ yytestcase(yyruleno==212); - case 215: /* paren_exprlist ::= */ yytestcase(yyruleno==215); - case 220: /* eidlist_opt ::= */ yytestcase(yyruleno==220); -{yymsp[1].minor.yy232 = 0;} + case 94: /* sclp ::= */ + case 127: /* orderby_opt ::= */ yytestcase(yyruleno==127); + case 134: /* groupby_opt ::= */ yytestcase(yyruleno==134); + case 214: /* exprlist ::= */ yytestcase(yyruleno==214); + case 217: /* paren_exprlist ::= */ yytestcase(yyruleno==217); + case 222: /* eidlist_opt ::= */ yytestcase(yyruleno==222); +{yymsp[1].minor.yy420 = 0;} break; - case 94: /* selcollist ::= sclp scanpt expr scanpt as */ + case 95: /* selcollist ::= sclp scanpt expr scanpt as */ { - yymsp[-4].minor.yy232 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy232, yymsp[-2].minor.yy182); - if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy232, &yymsp[0].minor.yy0, 1); - sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy232,yymsp[-3].minor.yy36,yymsp[-1].minor.yy36); + yymsp[-4].minor.yy420 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy420, yymsp[-2].minor.yy18); + if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy420, &yymsp[0].minor.yy0, 1); + sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy420,yymsp[-3].minor.yy392,yymsp[-1].minor.yy392); } break; - case 95: /* selcollist ::= sclp scanpt STAR */ + case 96: /* selcollist ::= sclp scanpt STAR */ { Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); - yymsp[-2].minor.yy232 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy232, p); + yymsp[-2].minor.yy420 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy420, p); } break; - case 96: /* selcollist ::= sclp scanpt nm DOT STAR */ + case 97: /* selcollist ::= sclp scanpt nm DOT STAR */ { Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); - yymsp[-4].minor.yy232 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy232, pDot); + yymsp[-4].minor.yy420 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy420, pDot); } break; - case 97: /* as ::= AS nm */ - case 108: /* dbnm ::= DOT nm */ yytestcase(yyruleno==108); - case 234: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==234); - case 235: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==235); + case 98: /* as ::= AS nm */ + case 109: /* dbnm ::= DOT nm */ yytestcase(yyruleno==109); + case 236: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==236); + case 237: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==237); {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} break; - case 99: /* from ::= */ -{yymsp[1].minor.yy427 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy427));} + case 100: /* from ::= */ +{yymsp[1].minor.yy135 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy135));} break; - case 100: /* from ::= FROM seltablist */ + case 101: /* from ::= FROM seltablist */ { - yymsp[-1].minor.yy427 = yymsp[0].minor.yy427; - sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy427); + yymsp[-1].minor.yy135 = yymsp[0].minor.yy135; + sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy135); } break; - case 101: /* stl_prefix ::= seltablist joinop */ + case 102: /* stl_prefix ::= seltablist joinop */ { - if( ALWAYS(yymsp[-1].minor.yy427 && yymsp[-1].minor.yy427->nSrc>0) ) yymsp[-1].minor.yy427->a[yymsp[-1].minor.yy427->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy502; + if( ALWAYS(yymsp[-1].minor.yy135 && yymsp[-1].minor.yy135->nSrc>0) ) yymsp[-1].minor.yy135->a[yymsp[-1].minor.yy135->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy70; } break; - case 102: /* stl_prefix ::= */ -{yymsp[1].minor.yy427 = 0;} + case 103: /* stl_prefix ::= */ +{yymsp[1].minor.yy135 = 0;} break; - case 103: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ + case 104: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ { - yymsp[-6].minor.yy427 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy427,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy182,yymsp[0].minor.yy510); - sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy427, &yymsp[-2].minor.yy0); + yymsp[-6].minor.yy135 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy135,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy18,yymsp[0].minor.yy48); + sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy135, &yymsp[-2].minor.yy0); } break; - case 104: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ + case 105: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ { - yymsp[-8].minor.yy427 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy427,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy182,yymsp[0].minor.yy510); - sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy427, yymsp[-4].minor.yy232); + yymsp[-8].minor.yy135 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy135,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy18,yymsp[0].minor.yy48); + sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy135, yymsp[-4].minor.yy420); } break; - case 105: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ + case 106: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ { - yymsp[-6].minor.yy427 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy427,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy399,yymsp[-1].minor.yy182,yymsp[0].minor.yy510); + yymsp[-6].minor.yy135 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy135,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy489,yymsp[-1].minor.yy18,yymsp[0].minor.yy48); } break; - case 106: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ + case 107: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ { - if( yymsp[-6].minor.yy427==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy182==0 && yymsp[0].minor.yy510==0 ){ - yymsp[-6].minor.yy427 = yymsp[-4].minor.yy427; - }else if( yymsp[-4].minor.yy427->nSrc==1 ){ - yymsp[-6].minor.yy427 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy427,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy182,yymsp[0].minor.yy510); - if( yymsp[-6].minor.yy427 ){ - struct SrcList_item *pNew = &yymsp[-6].minor.yy427->a[yymsp[-6].minor.yy427->nSrc-1]; - struct SrcList_item *pOld = yymsp[-4].minor.yy427->a; + if( yymsp[-6].minor.yy135==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy18==0 && yymsp[0].minor.yy48==0 ){ + yymsp[-6].minor.yy135 = yymsp[-4].minor.yy135; + }else if( yymsp[-4].minor.yy135->nSrc==1 ){ + yymsp[-6].minor.yy135 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy135,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy18,yymsp[0].minor.yy48); + if( yymsp[-6].minor.yy135 ){ + struct SrcList_item *pNew = &yymsp[-6].minor.yy135->a[yymsp[-6].minor.yy135->nSrc-1]; + struct SrcList_item *pOld = yymsp[-4].minor.yy135->a; pNew->zName = pOld->zName; pNew->zDatabase = pOld->zDatabase; pNew->pSelect = pOld->pSelect; pOld->zName = pOld->zDatabase = 0; pOld->pSelect = 0; } - sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy427); + sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy135); }else{ Select *pSubquery; - sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy427); - pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy427,0,0,0,0,SF_NestedFrom,0); - yymsp[-6].minor.yy427 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy427,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy182,yymsp[0].minor.yy510); + sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy135); + pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy135,0,0,0,0,SF_NestedFrom,0); + yymsp[-6].minor.yy135 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy135,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy18,yymsp[0].minor.yy48); } } break; - case 107: /* dbnm ::= */ - case 121: /* indexed_opt ::= */ yytestcase(yyruleno==121); + case 108: /* dbnm ::= */ + case 122: /* indexed_opt ::= */ yytestcase(yyruleno==122); {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;} break; - case 109: /* fullname ::= nm */ - case 111: /* xfullname ::= nm */ yytestcase(yyruleno==111); -{yymsp[0].minor.yy427 = sqlite3SrcListAppend(pParse->db,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/} - break; - case 110: /* fullname ::= nm DOT nm */ - case 112: /* xfullname ::= nm DOT nm */ yytestcase(yyruleno==112); -{yymsp[-2].minor.yy427 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 110: /* fullname ::= nm */ +{ + yylhsminor.yy135 = sqlite3SrcListAppend(pParse->db,0,&yymsp[0].minor.yy0,0); + if( IN_RENAME_OBJECT && yylhsminor.yy135 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy135->a[0].zName, &yymsp[0].minor.yy0); +} + yymsp[0].minor.yy135 = yylhsminor.yy135; + break; + case 111: /* fullname ::= nm DOT nm */ +{ + yylhsminor.yy135 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); + if( IN_RENAME_OBJECT && yylhsminor.yy135 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy135->a[0].zName, &yymsp[0].minor.yy0); +} + yymsp[-2].minor.yy135 = yylhsminor.yy135; + break; + case 112: /* xfullname ::= nm */ +{yymsp[0].minor.yy135 = sqlite3SrcListAppend(pParse->db,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/} + break; + case 113: /* xfullname ::= nm DOT nm */ +{yymsp[-2].minor.yy135 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 113: /* xfullname ::= nm DOT nm AS nm */ + case 114: /* xfullname ::= nm DOT nm AS nm */ { - yymsp[-4].minor.yy427 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/ - if( yymsp[-4].minor.yy427 ) yymsp[-4].minor.yy427->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); + yymsp[-4].minor.yy135 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/ + if( yymsp[-4].minor.yy135 ) yymsp[-4].minor.yy135->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); } break; - case 114: /* xfullname ::= nm AS nm */ + case 115: /* xfullname ::= nm AS nm */ { - yymsp[-2].minor.yy427 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/ - if( yymsp[-2].minor.yy427 ) yymsp[-2].minor.yy427->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); + yymsp[-2].minor.yy135 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/ + if( yymsp[-2].minor.yy135 ) yymsp[-2].minor.yy135->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); } break; - case 115: /* joinop ::= COMMA|JOIN */ -{ yymsp[0].minor.yy502 = JT_INNER; } + case 116: /* joinop ::= COMMA|JOIN */ +{ yymsp[0].minor.yy70 = JT_INNER; } break; - case 116: /* joinop ::= JOIN_KW JOIN */ -{yymsp[-1].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} + case 117: /* joinop ::= JOIN_KW JOIN */ +{yymsp[-1].minor.yy70 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} break; - case 117: /* joinop ::= JOIN_KW nm JOIN */ -{yymsp[-2].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} + case 118: /* joinop ::= JOIN_KW nm JOIN */ +{yymsp[-2].minor.yy70 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} break; - case 118: /* joinop ::= JOIN_KW nm nm JOIN */ -{yymsp[-3].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} + case 119: /* joinop ::= JOIN_KW nm nm JOIN */ +{yymsp[-3].minor.yy70 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} break; - case 119: /* on_opt ::= ON expr */ - case 136: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==136); - case 143: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==143); - case 208: /* case_else ::= ELSE expr */ yytestcase(yyruleno==208); -{yymsp[-1].minor.yy182 = yymsp[0].minor.yy182;} + case 120: /* on_opt ::= ON expr */ + case 137: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==137); + case 144: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==144); + case 210: /* case_else ::= ELSE expr */ yytestcase(yyruleno==210); +{yymsp[-1].minor.yy18 = yymsp[0].minor.yy18;} break; - case 120: /* on_opt ::= */ - case 135: /* having_opt ::= */ yytestcase(yyruleno==135); - case 137: /* limit_opt ::= */ yytestcase(yyruleno==137); - case 142: /* where_opt ::= */ yytestcase(yyruleno==142); - case 209: /* case_else ::= */ yytestcase(yyruleno==209); - case 211: /* case_operand ::= */ yytestcase(yyruleno==211); -{yymsp[1].minor.yy182 = 0;} + case 121: /* on_opt ::= */ + case 136: /* having_opt ::= */ yytestcase(yyruleno==136); + case 138: /* limit_opt ::= */ yytestcase(yyruleno==138); + case 143: /* where_opt ::= */ yytestcase(yyruleno==143); + case 211: /* case_else ::= */ yytestcase(yyruleno==211); + case 213: /* case_operand ::= */ yytestcase(yyruleno==213); +{yymsp[1].minor.yy18 = 0;} break; - case 122: /* indexed_opt ::= INDEXED BY nm */ + case 123: /* indexed_opt ::= INDEXED BY nm */ {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;} break; - case 123: /* indexed_opt ::= NOT INDEXED */ + case 124: /* indexed_opt ::= NOT INDEXED */ {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;} break; - case 124: /* using_opt ::= USING LP idlist RP */ -{yymsp[-3].minor.yy510 = yymsp[-1].minor.yy510;} + case 125: /* using_opt ::= USING LP idlist RP */ +{yymsp[-3].minor.yy48 = yymsp[-1].minor.yy48;} break; - case 125: /* using_opt ::= */ - case 157: /* idlist_opt ::= */ yytestcase(yyruleno==157); -{yymsp[1].minor.yy510 = 0;} - break; - case 127: /* orderby_opt ::= ORDER BY sortlist */ - case 134: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==134); -{yymsp[-2].minor.yy232 = yymsp[0].minor.yy232;} + case 126: /* using_opt ::= */ + case 158: /* idlist_opt ::= */ yytestcase(yyruleno==158); +{yymsp[1].minor.yy48 = 0;} + break; + case 128: /* orderby_opt ::= ORDER BY sortlist */ + case 135: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==135); +{yymsp[-2].minor.yy420 = yymsp[0].minor.yy420;} break; - case 128: /* sortlist ::= sortlist COMMA expr sortorder */ + case 129: /* sortlist ::= sortlist COMMA expr sortorder */ { - yymsp[-3].minor.yy232 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy232,yymsp[-1].minor.yy182); - sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy232,yymsp[0].minor.yy502); + yymsp[-3].minor.yy420 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy420,yymsp[-1].minor.yy18); + sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy420,yymsp[0].minor.yy70); } break; - case 129: /* sortlist ::= expr sortorder */ + case 130: /* sortlist ::= expr sortorder */ { - yymsp[-1].minor.yy232 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy182); /*A-overwrites-Y*/ - sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy232,yymsp[0].minor.yy502); + yymsp[-1].minor.yy420 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy18); /*A-overwrites-Y*/ + sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy420,yymsp[0].minor.yy70); } break; - case 130: /* sortorder ::= ASC */ -{yymsp[0].minor.yy502 = SQLITE_SO_ASC;} + case 131: /* sortorder ::= ASC */ +{yymsp[0].minor.yy70 = SQLITE_SO_ASC;} break; - case 131: /* sortorder ::= DESC */ -{yymsp[0].minor.yy502 = SQLITE_SO_DESC;} + case 132: /* sortorder ::= DESC */ +{yymsp[0].minor.yy70 = SQLITE_SO_DESC;} break; - case 132: /* sortorder ::= */ -{yymsp[1].minor.yy502 = SQLITE_SO_UNDEFINED;} + case 133: /* sortorder ::= */ +{yymsp[1].minor.yy70 = SQLITE_SO_UNDEFINED;} break; - case 138: /* limit_opt ::= LIMIT expr */ -{yymsp[-1].minor.yy182 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy182,0);} + case 139: /* limit_opt ::= LIMIT expr */ +{yymsp[-1].minor.yy18 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy18,0);} break; - case 139: /* limit_opt ::= LIMIT expr OFFSET expr */ -{yymsp[-3].minor.yy182 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy182,yymsp[0].minor.yy182);} + case 140: /* limit_opt ::= LIMIT expr OFFSET expr */ +{yymsp[-3].minor.yy18 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy18,yymsp[0].minor.yy18);} break; - case 140: /* limit_opt ::= LIMIT expr COMMA expr */ -{yymsp[-3].minor.yy182 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy182,yymsp[-2].minor.yy182);} + case 141: /* limit_opt ::= LIMIT expr COMMA expr */ +{yymsp[-3].minor.yy18 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy18,yymsp[-2].minor.yy18);} break; - case 141: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt */ + case 142: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt */ { - sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy427, &yymsp[-1].minor.yy0); - sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy427,yymsp[0].minor.yy182,0,0); + sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy135, &yymsp[-1].minor.yy0); + sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy135,yymsp[0].minor.yy18,0,0); } break; - case 144: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */ + case 145: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */ { - sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy427, &yymsp[-3].minor.yy0); - sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy232,"set list"); - sqlite3Update(pParse,yymsp[-4].minor.yy427,yymsp[-1].minor.yy232,yymsp[0].minor.yy182,yymsp[-5].minor.yy502,0,0,0); + sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy135, &yymsp[-3].minor.yy0); + sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy420,"set list"); + sqlite3Update(pParse,yymsp[-4].minor.yy135,yymsp[-1].minor.yy420,yymsp[0].minor.yy18,yymsp[-5].minor.yy70,0,0,0); } break; - case 145: /* setlist ::= setlist COMMA nm EQ expr */ + case 146: /* setlist ::= setlist COMMA nm EQ expr */ { - yymsp[-4].minor.yy232 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy232, yymsp[0].minor.yy182); - sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy232, &yymsp[-2].minor.yy0, 1); + yymsp[-4].minor.yy420 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy420, yymsp[0].minor.yy18); + sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy420, &yymsp[-2].minor.yy0, 1); } break; - case 146: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ + case 147: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ { - yymsp[-6].minor.yy232 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy232, yymsp[-3].minor.yy510, yymsp[0].minor.yy182); + yymsp[-6].minor.yy420 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy420, yymsp[-3].minor.yy48, yymsp[0].minor.yy18); } break; - case 147: /* setlist ::= nm EQ expr */ + case 148: /* setlist ::= nm EQ expr */ { - yylhsminor.yy232 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy182); - sqlite3ExprListSetName(pParse, yylhsminor.yy232, &yymsp[-2].minor.yy0, 1); + yylhsminor.yy420 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy18); + sqlite3ExprListSetName(pParse, yylhsminor.yy420, &yymsp[-2].minor.yy0, 1); } - yymsp[-2].minor.yy232 = yylhsminor.yy232; + yymsp[-2].minor.yy420 = yylhsminor.yy420; break; - case 148: /* setlist ::= LP idlist RP EQ expr */ + case 149: /* setlist ::= LP idlist RP EQ expr */ { - yymsp[-4].minor.yy232 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy510, yymsp[0].minor.yy182); + yymsp[-4].minor.yy420 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy48, yymsp[0].minor.yy18); } break; - case 149: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ + case 150: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ { - sqlite3Insert(pParse, yymsp[-3].minor.yy427, yymsp[-1].minor.yy399, yymsp[-2].minor.yy510, yymsp[-5].minor.yy502, yymsp[0].minor.yy198); + sqlite3Insert(pParse, yymsp[-3].minor.yy135, yymsp[-1].minor.yy489, yymsp[-2].minor.yy48, yymsp[-5].minor.yy70, yymsp[0].minor.yy340); } break; - case 150: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */ + case 151: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */ { - sqlite3Insert(pParse, yymsp[-3].minor.yy427, 0, yymsp[-2].minor.yy510, yymsp[-5].minor.yy502, 0); + sqlite3Insert(pParse, yymsp[-3].minor.yy135, 0, yymsp[-2].minor.yy48, yymsp[-5].minor.yy70, 0); } break; - case 151: /* upsert ::= */ -{ yymsp[1].minor.yy198 = 0; } + case 152: /* upsert ::= */ +{ yymsp[1].minor.yy340 = 0; } break; - case 152: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */ -{ yymsp[-10].minor.yy198 = sqlite3UpsertNew(pParse->db,yymsp[-7].minor.yy232,yymsp[-5].minor.yy182,yymsp[-1].minor.yy232,yymsp[0].minor.yy182);} + case 153: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */ +{ yymsp[-10].minor.yy340 = sqlite3UpsertNew(pParse->db,yymsp[-7].minor.yy420,yymsp[-5].minor.yy18,yymsp[-1].minor.yy420,yymsp[0].minor.yy18);} break; - case 153: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */ -{ yymsp[-7].minor.yy198 = sqlite3UpsertNew(pParse->db,yymsp[-4].minor.yy232,yymsp[-2].minor.yy182,0,0); } + case 154: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */ +{ yymsp[-7].minor.yy340 = sqlite3UpsertNew(pParse->db,yymsp[-4].minor.yy420,yymsp[-2].minor.yy18,0,0); } break; - case 154: /* upsert ::= ON CONFLICT DO NOTHING */ -{ yymsp[-3].minor.yy198 = sqlite3UpsertNew(pParse->db,0,0,0,0); } + case 155: /* upsert ::= ON CONFLICT DO NOTHING */ +{ yymsp[-3].minor.yy340 = sqlite3UpsertNew(pParse->db,0,0,0,0); } break; - case 158: /* idlist_opt ::= LP idlist RP */ -{yymsp[-2].minor.yy510 = yymsp[-1].minor.yy510;} + case 159: /* idlist_opt ::= LP idlist RP */ +{yymsp[-2].minor.yy48 = yymsp[-1].minor.yy48;} break; - case 159: /* idlist ::= idlist COMMA nm */ -{yymsp[-2].minor.yy510 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy510,&yymsp[0].minor.yy0);} + case 160: /* idlist ::= idlist COMMA nm */ +{yymsp[-2].minor.yy48 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy48,&yymsp[0].minor.yy0);} break; - case 160: /* idlist ::= nm */ -{yymsp[0].minor.yy510 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} + case 161: /* idlist ::= nm */ +{yymsp[0].minor.yy48 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} break; - case 161: /* expr ::= LP expr RP */ -{yymsp[-2].minor.yy182 = yymsp[-1].minor.yy182;} + case 162: /* expr ::= LP expr RP */ +{yymsp[-2].minor.yy18 = yymsp[-1].minor.yy18;} break; - case 162: /* expr ::= ID|INDEXED */ - case 163: /* expr ::= JOIN_KW */ yytestcase(yyruleno==163); -{yymsp[0].minor.yy182=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 163: /* expr ::= ID|INDEXED */ + case 164: /* expr ::= JOIN_KW */ yytestcase(yyruleno==164); +{yymsp[0].minor.yy18=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 164: /* expr ::= nm DOT nm */ + case 165: /* expr ::= nm DOT nm */ { Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1); - yylhsminor.yy182 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)temp2, &yymsp[0].minor.yy0); + sqlite3RenameTokenMap(pParse, (void*)temp1, &yymsp[-2].minor.yy0); + } + yylhsminor.yy18 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); } - yymsp[-2].minor.yy182 = yylhsminor.yy182; + yymsp[-2].minor.yy18 = yylhsminor.yy18; break; - case 165: /* expr ::= nm DOT nm DOT nm */ + case 166: /* expr ::= nm DOT nm DOT nm */ { Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-4].minor.yy0, 1); Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1); Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3); - yylhsminor.yy182 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)temp3, &yymsp[0].minor.yy0); + sqlite3RenameTokenMap(pParse, (void*)temp2, &yymsp[-2].minor.yy0); + } + yylhsminor.yy18 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); } - yymsp[-4].minor.yy182 = yylhsminor.yy182; + yymsp[-4].minor.yy18 = yylhsminor.yy18; break; - case 166: /* term ::= NULL|FLOAT|BLOB */ - case 167: /* term ::= STRING */ yytestcase(yyruleno==167); -{yymsp[0].minor.yy182=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 167: /* term ::= NULL|FLOAT|BLOB */ + case 168: /* term ::= STRING */ yytestcase(yyruleno==168); +{yymsp[0].minor.yy18=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 168: /* term ::= INTEGER */ + case 169: /* term ::= INTEGER */ { - yylhsminor.yy182 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); + yylhsminor.yy18 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); } - yymsp[0].minor.yy182 = yylhsminor.yy182; + yymsp[0].minor.yy18 = yylhsminor.yy18; break; - case 169: /* expr ::= VARIABLE */ + case 170: /* expr ::= VARIABLE */ { if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){ u32 n = yymsp[0].minor.yy0.n; - yymsp[0].minor.yy182 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0); - sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy182, n); + yymsp[0].minor.yy18 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0); + sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy18, n); }else{ /* When doing a nested parse, one can include terms in an expression ** that look like this: #1 #2 ... These terms refer to registers @@ -144623,146 +149342,154 @@ assert( t.n>=2 ); if( pParse->nested==0 ){ sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t); - yymsp[0].minor.yy182 = 0; + yymsp[0].minor.yy18 = 0; }else{ - yymsp[0].minor.yy182 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); - if( yymsp[0].minor.yy182 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy182->iTable); + yymsp[0].minor.yy18 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); + if( yymsp[0].minor.yy18 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy18->iTable); } } } break; - case 170: /* expr ::= expr COLLATE ID|STRING */ + case 171: /* expr ::= expr COLLATE ID|STRING */ { - yymsp[-2].minor.yy182 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy182, &yymsp[0].minor.yy0, 1); + yymsp[-2].minor.yy18 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy18, &yymsp[0].minor.yy0, 1); } break; - case 171: /* expr ::= CAST LP expr AS typetoken RP */ + case 172: /* expr ::= CAST LP expr AS typetoken RP */ { - yymsp[-5].minor.yy182 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); - sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy182, yymsp[-3].minor.yy182, 0); + yymsp[-5].minor.yy18 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); + sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy18, yymsp[-3].minor.yy18, 0); } break; - case 172: /* expr ::= ID|INDEXED LP distinct exprlist RP */ + case 173: /* expr ::= ID|INDEXED LP distinct exprlist RP */ { - if( yymsp[-1].minor.yy232 && yymsp[-1].minor.yy232->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ - sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0); - } - yylhsminor.yy182 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy232, &yymsp[-4].minor.yy0); - if( yymsp[-2].minor.yy502==SF_Distinct && yylhsminor.yy182 ){ - yylhsminor.yy182->flags |= EP_Distinct; - } + yylhsminor.yy18 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy420, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy70); +} + yymsp[-4].minor.yy18 = yylhsminor.yy18; + break; + case 174: /* expr ::= ID|INDEXED LP STAR RP */ +{ + yylhsminor.yy18 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0); +} + yymsp[-3].minor.yy18 = yylhsminor.yy18; + break; + case 175: /* expr ::= ID|INDEXED LP distinct exprlist RP over_clause */ +{ + yylhsminor.yy18 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy420, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy70); + sqlite3WindowAttach(pParse, yylhsminor.yy18, yymsp[0].minor.yy327); } - yymsp[-4].minor.yy182 = yylhsminor.yy182; + yymsp[-5].minor.yy18 = yylhsminor.yy18; break; - case 173: /* expr ::= ID|INDEXED LP STAR RP */ + case 176: /* expr ::= ID|INDEXED LP STAR RP over_clause */ { - yylhsminor.yy182 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0); + yylhsminor.yy18 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0); + sqlite3WindowAttach(pParse, yylhsminor.yy18, yymsp[0].minor.yy327); } - yymsp[-3].minor.yy182 = yylhsminor.yy182; + yymsp[-4].minor.yy18 = yylhsminor.yy18; break; - case 174: /* term ::= CTIME_KW */ + case 177: /* term ::= CTIME_KW */ { - yylhsminor.yy182 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0); + yylhsminor.yy18 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0); } - yymsp[0].minor.yy182 = yylhsminor.yy182; + yymsp[0].minor.yy18 = yylhsminor.yy18; break; - case 175: /* expr ::= LP nexprlist COMMA expr RP */ + case 178: /* expr ::= LP nexprlist COMMA expr RP */ { - ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy232, yymsp[-1].minor.yy182); - yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); - if( yymsp[-4].minor.yy182 ){ - yymsp[-4].minor.yy182->x.pList = pList; + ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy420, yymsp[-1].minor.yy18); + yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); + if( yymsp[-4].minor.yy18 ){ + yymsp[-4].minor.yy18->x.pList = pList; }else{ sqlite3ExprListDelete(pParse->db, pList); } } break; - case 176: /* expr ::= expr AND expr */ - case 177: /* expr ::= expr OR expr */ yytestcase(yyruleno==177); - case 178: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==178); - case 179: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==179); - case 180: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==180); - case 181: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==181); - case 182: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==182); - case 183: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==183); -{yymsp[-2].minor.yy182=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy182,yymsp[0].minor.yy182);} + case 179: /* expr ::= expr AND expr */ + case 180: /* expr ::= expr OR expr */ yytestcase(yyruleno==180); + case 181: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==181); + case 182: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==182); + case 183: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==183); + case 184: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==184); + case 185: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==185); + case 186: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==186); +{yymsp[-2].minor.yy18=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy18,yymsp[0].minor.yy18);} break; - case 184: /* likeop ::= NOT LIKE_KW|MATCH */ + case 187: /* likeop ::= NOT LIKE_KW|MATCH */ {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/} break; - case 185: /* expr ::= expr likeop expr */ + case 188: /* expr ::= expr likeop expr */ { ExprList *pList; int bNot = yymsp[-1].minor.yy0.n & 0x80000000; yymsp[-1].minor.yy0.n &= 0x7fffffff; - pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy182); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy182); - yymsp[-2].minor.yy182 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0); - if( bNot ) yymsp[-2].minor.yy182 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy182, 0); - if( yymsp[-2].minor.yy182 ) yymsp[-2].minor.yy182->flags |= EP_InfixFunc; + pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy18); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy18); + yymsp[-2].minor.yy18 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); + if( bNot ) yymsp[-2].minor.yy18 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy18, 0); + if( yymsp[-2].minor.yy18 ) yymsp[-2].minor.yy18->flags |= EP_InfixFunc; } break; - case 186: /* expr ::= expr likeop expr ESCAPE expr */ + case 189: /* expr ::= expr likeop expr ESCAPE expr */ { ExprList *pList; int bNot = yymsp[-3].minor.yy0.n & 0x80000000; yymsp[-3].minor.yy0.n &= 0x7fffffff; - pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy182); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy182); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy182); - yymsp[-4].minor.yy182 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0); - if( bNot ) yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy182, 0); - if( yymsp[-4].minor.yy182 ) yymsp[-4].minor.yy182->flags |= EP_InfixFunc; + pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy18); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy18); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy18); + yymsp[-4].minor.yy18 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0); + if( bNot ) yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy18, 0); + if( yymsp[-4].minor.yy18 ) yymsp[-4].minor.yy18->flags |= EP_InfixFunc; } break; - case 187: /* expr ::= expr ISNULL|NOTNULL */ -{yymsp[-1].minor.yy182 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy182,0);} + case 190: /* expr ::= expr ISNULL|NOTNULL */ +{yymsp[-1].minor.yy18 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy18,0);} break; - case 188: /* expr ::= expr NOT NULL */ -{yymsp[-2].minor.yy182 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy182,0);} + case 191: /* expr ::= expr NOT NULL */ +{yymsp[-2].minor.yy18 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy18,0);} break; - case 189: /* expr ::= expr IS expr */ + case 192: /* expr ::= expr IS expr */ { - yymsp[-2].minor.yy182 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy182,yymsp[0].minor.yy182); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy182, yymsp[-2].minor.yy182, TK_ISNULL); + yymsp[-2].minor.yy18 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy18,yymsp[0].minor.yy18); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy18, yymsp[-2].minor.yy18, TK_ISNULL); } break; - case 190: /* expr ::= expr IS NOT expr */ + case 193: /* expr ::= expr IS NOT expr */ { - yymsp[-3].minor.yy182 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy182,yymsp[0].minor.yy182); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy182, yymsp[-3].minor.yy182, TK_NOTNULL); + yymsp[-3].minor.yy18 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy18,yymsp[0].minor.yy18); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy18, yymsp[-3].minor.yy18, TK_NOTNULL); } break; - case 191: /* expr ::= NOT expr */ - case 192: /* expr ::= BITNOT expr */ yytestcase(yyruleno==192); -{yymsp[-1].minor.yy182 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy182, 0);/*A-overwrites-B*/} + case 194: /* expr ::= NOT expr */ + case 195: /* expr ::= BITNOT expr */ yytestcase(yyruleno==195); +{yymsp[-1].minor.yy18 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy18, 0);/*A-overwrites-B*/} break; - case 193: /* expr ::= MINUS expr */ -{yymsp[-1].minor.yy182 = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy182, 0);} - break; - case 194: /* expr ::= PLUS expr */ -{yymsp[-1].minor.yy182 = sqlite3PExpr(pParse, TK_UPLUS, yymsp[0].minor.yy182, 0);} + case 196: /* expr ::= PLUS|MINUS expr */ +{ + yymsp[-1].minor.yy18 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy18, 0); + /*A-overwrites-B*/ +} break; - case 195: /* between_op ::= BETWEEN */ - case 198: /* in_op ::= IN */ yytestcase(yyruleno==198); -{yymsp[0].minor.yy502 = 0;} + case 197: /* between_op ::= BETWEEN */ + case 200: /* in_op ::= IN */ yytestcase(yyruleno==200); +{yymsp[0].minor.yy70 = 0;} break; - case 197: /* expr ::= expr between_op expr AND expr */ + case 199: /* expr ::= expr between_op expr AND expr */ { - ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy182); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy182); - yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy182, 0); - if( yymsp[-4].minor.yy182 ){ - yymsp[-4].minor.yy182->x.pList = pList; + ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy18); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy18); + yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy18, 0); + if( yymsp[-4].minor.yy18 ){ + yymsp[-4].minor.yy18->x.pList = pList; }else{ sqlite3ExprListDelete(pParse->db, pList); } - if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy182, 0); + if( yymsp[-3].minor.yy70 ) yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy18, 0); } break; - case 200: /* expr ::= expr in_op LP exprlist RP */ + case 202: /* expr ::= expr in_op LP exprlist RP */ { - if( yymsp[-1].minor.yy232==0 ){ + if( yymsp[-1].minor.yy420==0 ){ /* Expressions of the form ** ** expr1 IN () @@ -144771,9 +149498,9 @@ ** simplify to constants 0 (false) and 1 (true), respectively, ** regardless of the value of expr1. */ - sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy182); - yymsp[-4].minor.yy182 = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy502],1); - }else if( yymsp[-1].minor.yy232->nExpr==1 ){ + sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy18); + yymsp[-4].minor.yy18 = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy70],1); + }else if( yymsp[-1].minor.yy420->nExpr==1 ){ /* Expressions of the form: ** ** expr1 IN (?1) @@ -144790,195 +149517,199 @@ ** affinity or the collating sequence to use for comparison. Otherwise, ** the semantics would be subtly different from IN or NOT IN. */ - Expr *pRHS = yymsp[-1].minor.yy232->a[0].pExpr; - yymsp[-1].minor.yy232->a[0].pExpr = 0; - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy232); + Expr *pRHS = yymsp[-1].minor.yy420->a[0].pExpr; + yymsp[-1].minor.yy420->a[0].pExpr = 0; + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy420); /* pRHS cannot be NULL because a malloc error would have been detected ** before now and control would have never reached this point */ if( ALWAYS(pRHS) ){ pRHS->flags &= ~EP_Collate; pRHS->flags |= EP_Generic; } - yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, yymsp[-3].minor.yy502 ? TK_NE : TK_EQ, yymsp[-4].minor.yy182, pRHS); + yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, yymsp[-3].minor.yy70 ? TK_NE : TK_EQ, yymsp[-4].minor.yy18, pRHS); }else{ - yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy182, 0); - if( yymsp[-4].minor.yy182 ){ - yymsp[-4].minor.yy182->x.pList = yymsp[-1].minor.yy232; - sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy182); + yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy18, 0); + if( yymsp[-4].minor.yy18 ){ + yymsp[-4].minor.yy18->x.pList = yymsp[-1].minor.yy420; + sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy18); }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy232); + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy420); } - if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy182, 0); + if( yymsp[-3].minor.yy70 ) yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy18, 0); } } break; - case 201: /* expr ::= LP select RP */ + case 203: /* expr ::= LP select RP */ { - yymsp[-2].minor.yy182 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); - sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy182, yymsp[-1].minor.yy399); + yymsp[-2].minor.yy18 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); + sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy18, yymsp[-1].minor.yy489); } break; - case 202: /* expr ::= expr in_op LP select RP */ + case 204: /* expr ::= expr in_op LP select RP */ { - yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy182, 0); - sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy182, yymsp[-1].minor.yy399); - if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy182, 0); + yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy18, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy18, yymsp[-1].minor.yy489); + if( yymsp[-3].minor.yy70 ) yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy18, 0); } break; - case 203: /* expr ::= expr in_op nm dbnm paren_exprlist */ + case 205: /* expr ::= expr in_op nm dbnm paren_exprlist */ { SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); - if( yymsp[0].minor.yy232 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy232); - yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy182, 0); - sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy182, pSelect); - if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy182, 0); + if( yymsp[0].minor.yy420 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy420); + yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy18, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy18, pSelect); + if( yymsp[-3].minor.yy70 ) yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy18, 0); } break; - case 204: /* expr ::= EXISTS LP select RP */ + case 206: /* expr ::= EXISTS LP select RP */ { Expr *p; - p = yymsp[-3].minor.yy182 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); - sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy399); + p = yymsp[-3].minor.yy18 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); + sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy489); } break; - case 205: /* expr ::= CASE case_operand case_exprlist case_else END */ + case 207: /* expr ::= CASE case_operand case_exprlist case_else END */ { - yymsp[-4].minor.yy182 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy182, 0); - if( yymsp[-4].minor.yy182 ){ - yymsp[-4].minor.yy182->x.pList = yymsp[-1].minor.yy182 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy232,yymsp[-1].minor.yy182) : yymsp[-2].minor.yy232; - sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy182); + yymsp[-4].minor.yy18 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy18, 0); + if( yymsp[-4].minor.yy18 ){ + yymsp[-4].minor.yy18->x.pList = yymsp[-1].minor.yy18 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy420,yymsp[-1].minor.yy18) : yymsp[-2].minor.yy420; + sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy18); }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy232); - sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy182); + sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy420); + sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy18); } } break; - case 206: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ + case 208: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ { - yymsp[-4].minor.yy232 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy232, yymsp[-2].minor.yy182); - yymsp[-4].minor.yy232 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy232, yymsp[0].minor.yy182); + yymsp[-4].minor.yy420 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy420, yymsp[-2].minor.yy18); + yymsp[-4].minor.yy420 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy420, yymsp[0].minor.yy18); } break; - case 207: /* case_exprlist ::= WHEN expr THEN expr */ + case 209: /* case_exprlist ::= WHEN expr THEN expr */ { - yymsp[-3].minor.yy232 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy182); - yymsp[-3].minor.yy232 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy232, yymsp[0].minor.yy182); + yymsp[-3].minor.yy420 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy18); + yymsp[-3].minor.yy420 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy420, yymsp[0].minor.yy18); } break; - case 210: /* case_operand ::= expr */ -{yymsp[0].minor.yy182 = yymsp[0].minor.yy182; /*A-overwrites-X*/} + case 212: /* case_operand ::= expr */ +{yymsp[0].minor.yy18 = yymsp[0].minor.yy18; /*A-overwrites-X*/} break; - case 213: /* nexprlist ::= nexprlist COMMA expr */ -{yymsp[-2].minor.yy232 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy232,yymsp[0].minor.yy182);} + case 215: /* nexprlist ::= nexprlist COMMA expr */ +{yymsp[-2].minor.yy420 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy420,yymsp[0].minor.yy18);} break; - case 214: /* nexprlist ::= expr */ -{yymsp[0].minor.yy232 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy182); /*A-overwrites-Y*/} + case 216: /* nexprlist ::= expr */ +{yymsp[0].minor.yy420 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy18); /*A-overwrites-Y*/} break; - case 216: /* paren_exprlist ::= LP exprlist RP */ - case 221: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==221); -{yymsp[-2].minor.yy232 = yymsp[-1].minor.yy232;} + case 218: /* paren_exprlist ::= LP exprlist RP */ + case 223: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==223); +{yymsp[-2].minor.yy420 = yymsp[-1].minor.yy420;} break; - case 217: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + case 219: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ { sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, - sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy232, yymsp[-10].minor.yy502, - &yymsp[-11].minor.yy0, yymsp[0].minor.yy182, SQLITE_SO_ASC, yymsp[-8].minor.yy502, SQLITE_IDXTYPE_APPDEF); + sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy420, yymsp[-10].minor.yy70, + &yymsp[-11].minor.yy0, yymsp[0].minor.yy18, SQLITE_SO_ASC, yymsp[-8].minor.yy70, SQLITE_IDXTYPE_APPDEF); + if( IN_RENAME_OBJECT && pParse->pNewIndex ){ + sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0); + } } break; - case 218: /* uniqueflag ::= UNIQUE */ - case 258: /* raisetype ::= ABORT */ yytestcase(yyruleno==258); -{yymsp[0].minor.yy502 = OE_Abort;} + case 220: /* uniqueflag ::= UNIQUE */ + case 260: /* raisetype ::= ABORT */ yytestcase(yyruleno==260); +{yymsp[0].minor.yy70 = OE_Abort;} break; - case 219: /* uniqueflag ::= */ -{yymsp[1].minor.yy502 = OE_None;} + case 221: /* uniqueflag ::= */ +{yymsp[1].minor.yy70 = OE_None;} break; - case 222: /* eidlist ::= eidlist COMMA nm collate sortorder */ + case 224: /* eidlist ::= eidlist COMMA nm collate sortorder */ { - yymsp[-4].minor.yy232 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy232, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy502, yymsp[0].minor.yy502); + yymsp[-4].minor.yy420 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy420, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy70, yymsp[0].minor.yy70); } break; - case 223: /* eidlist ::= nm collate sortorder */ + case 225: /* eidlist ::= nm collate sortorder */ { - yymsp[-2].minor.yy232 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy502, yymsp[0].minor.yy502); /*A-overwrites-Y*/ + yymsp[-2].minor.yy420 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy70, yymsp[0].minor.yy70); /*A-overwrites-Y*/ } break; - case 226: /* cmd ::= DROP INDEX ifexists fullname */ -{sqlite3DropIndex(pParse, yymsp[0].minor.yy427, yymsp[-1].minor.yy502);} + case 228: /* cmd ::= DROP INDEX ifexists fullname */ +{sqlite3DropIndex(pParse, yymsp[0].minor.yy135, yymsp[-1].minor.yy70);} break; - case 227: /* cmd ::= VACUUM */ + case 229: /* cmd ::= VACUUM */ {sqlite3Vacuum(pParse,0);} break; - case 228: /* cmd ::= VACUUM nm */ + case 230: /* cmd ::= VACUUM nm */ {sqlite3Vacuum(pParse,&yymsp[0].minor.yy0);} break; - case 229: /* cmd ::= PRAGMA nm dbnm */ + case 231: /* cmd ::= PRAGMA nm dbnm */ {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} break; - case 230: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ + case 232: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} break; - case 231: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ + case 233: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} break; - case 232: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ + case 234: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} break; - case 233: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ + case 235: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} break; - case 236: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + case 238: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ { Token all; all.z = yymsp[-3].minor.yy0.z; all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n; - sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy47, &all); + sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy207, &all); } break; - case 237: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + case 239: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ { - sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy502, yymsp[-4].minor.yy300.a, yymsp[-4].minor.yy300.b, yymsp[-2].minor.yy427, yymsp[0].minor.yy182, yymsp[-10].minor.yy502, yymsp[-8].minor.yy502); + sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy70, yymsp[-4].minor.yy34.a, yymsp[-4].minor.yy34.b, yymsp[-2].minor.yy135, yymsp[0].minor.yy18, yymsp[-10].minor.yy70, yymsp[-8].minor.yy70); yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/ } break; - case 238: /* trigger_time ::= BEFORE|AFTER */ -{ yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-X*/ } + case 240: /* trigger_time ::= BEFORE|AFTER */ +{ yymsp[0].minor.yy70 = yymsp[0].major; /*A-overwrites-X*/ } break; - case 239: /* trigger_time ::= INSTEAD OF */ -{ yymsp[-1].minor.yy502 = TK_INSTEAD;} + case 241: /* trigger_time ::= INSTEAD OF */ +{ yymsp[-1].minor.yy70 = TK_INSTEAD;} break; - case 240: /* trigger_time ::= */ -{ yymsp[1].minor.yy502 = TK_BEFORE; } + case 242: /* trigger_time ::= */ +{ yymsp[1].minor.yy70 = TK_BEFORE; } break; - case 241: /* trigger_event ::= DELETE|INSERT */ - case 242: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==242); -{yymsp[0].minor.yy300.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy300.b = 0;} + case 243: /* trigger_event ::= DELETE|INSERT */ + case 244: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==244); +{yymsp[0].minor.yy34.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy34.b = 0;} break; - case 243: /* trigger_event ::= UPDATE OF idlist */ -{yymsp[-2].minor.yy300.a = TK_UPDATE; yymsp[-2].minor.yy300.b = yymsp[0].minor.yy510;} + case 245: /* trigger_event ::= UPDATE OF idlist */ +{yymsp[-2].minor.yy34.a = TK_UPDATE; yymsp[-2].minor.yy34.b = yymsp[0].minor.yy48;} break; - case 244: /* when_clause ::= */ - case 263: /* key_opt ::= */ yytestcase(yyruleno==263); -{ yymsp[1].minor.yy182 = 0; } + case 246: /* when_clause ::= */ + case 265: /* key_opt ::= */ yytestcase(yyruleno==265); + case 307: /* filter_opt ::= */ yytestcase(yyruleno==307); +{ yymsp[1].minor.yy18 = 0; } break; - case 245: /* when_clause ::= WHEN expr */ - case 264: /* key_opt ::= KEY expr */ yytestcase(yyruleno==264); -{ yymsp[-1].minor.yy182 = yymsp[0].minor.yy182; } + case 247: /* when_clause ::= WHEN expr */ + case 266: /* key_opt ::= KEY expr */ yytestcase(yyruleno==266); +{ yymsp[-1].minor.yy18 = yymsp[0].minor.yy18; } break; - case 246: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + case 248: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ { - assert( yymsp[-2].minor.yy47!=0 ); - yymsp[-2].minor.yy47->pLast->pNext = yymsp[-1].minor.yy47; - yymsp[-2].minor.yy47->pLast = yymsp[-1].minor.yy47; + assert( yymsp[-2].minor.yy207!=0 ); + yymsp[-2].minor.yy207->pLast->pNext = yymsp[-1].minor.yy207; + yymsp[-2].minor.yy207->pLast = yymsp[-1].minor.yy207; } break; - case 247: /* trigger_cmd_list ::= trigger_cmd SEMI */ + case 249: /* trigger_cmd_list ::= trigger_cmd SEMI */ { - assert( yymsp[-1].minor.yy47!=0 ); - yymsp[-1].minor.yy47->pLast = yymsp[-1].minor.yy47; + assert( yymsp[-1].minor.yy207!=0 ); + yymsp[-1].minor.yy207->pLast = yymsp[-1].minor.yy207; } break; - case 248: /* trnm ::= nm DOT nm */ + case 250: /* trnm ::= nm DOT nm */ { yymsp[-2].minor.yy0 = yymsp[0].minor.yy0; sqlite3ErrorMsg(pParse, @@ -144986,196 +149717,306 @@ "statements within triggers"); } break; - case 249: /* tridxby ::= INDEXED BY nm */ + case 251: /* tridxby ::= INDEXED BY nm */ { sqlite3ErrorMsg(pParse, "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 250: /* tridxby ::= NOT INDEXED */ + case 252: /* tridxby ::= NOT INDEXED */ { sqlite3ErrorMsg(pParse, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 251: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */ -{yylhsminor.yy47 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-5].minor.yy0, yymsp[-2].minor.yy232, yymsp[-1].minor.yy182, yymsp[-6].minor.yy502, yymsp[-7].minor.yy0.z, yymsp[0].minor.yy36);} - yymsp[-7].minor.yy47 = yylhsminor.yy47; + case 253: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */ +{yylhsminor.yy207 = sqlite3TriggerUpdateStep(pParse, &yymsp[-5].minor.yy0, yymsp[-2].minor.yy420, yymsp[-1].minor.yy18, yymsp[-6].minor.yy70, yymsp[-7].minor.yy0.z, yymsp[0].minor.yy392);} + yymsp[-7].minor.yy207 = yylhsminor.yy207; break; - case 252: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + case 254: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ { - yylhsminor.yy47 = sqlite3TriggerInsertStep(pParse->db,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy510,yymsp[-2].minor.yy399,yymsp[-6].minor.yy502,yymsp[-1].minor.yy198,yymsp[-7].minor.yy36,yymsp[0].minor.yy36);/*yylhsminor.yy47-overwrites-yymsp[-6].minor.yy502*/ + yylhsminor.yy207 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy48,yymsp[-2].minor.yy489,yymsp[-6].minor.yy70,yymsp[-1].minor.yy340,yymsp[-7].minor.yy392,yymsp[0].minor.yy392);/*yylhsminor.yy207-overwrites-yymsp[-6].minor.yy70*/ } - yymsp[-7].minor.yy47 = yylhsminor.yy47; + yymsp[-7].minor.yy207 = yylhsminor.yy207; break; - case 253: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ -{yylhsminor.yy47 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy182, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy36);} - yymsp[-5].minor.yy47 = yylhsminor.yy47; + case 255: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ +{yylhsminor.yy207 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy18, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy392);} + yymsp[-5].minor.yy207 = yylhsminor.yy207; break; - case 254: /* trigger_cmd ::= scanpt select scanpt */ -{yylhsminor.yy47 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy399, yymsp[-2].minor.yy36, yymsp[0].minor.yy36); /*yylhsminor.yy47-overwrites-yymsp[-1].minor.yy399*/} - yymsp[-2].minor.yy47 = yylhsminor.yy47; + case 256: /* trigger_cmd ::= scanpt select scanpt */ +{yylhsminor.yy207 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy489, yymsp[-2].minor.yy392, yymsp[0].minor.yy392); /*yylhsminor.yy207-overwrites-yymsp[-1].minor.yy489*/} + yymsp[-2].minor.yy207 = yylhsminor.yy207; break; - case 255: /* expr ::= RAISE LP IGNORE RP */ + case 257: /* expr ::= RAISE LP IGNORE RP */ { - yymsp[-3].minor.yy182 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); - if( yymsp[-3].minor.yy182 ){ - yymsp[-3].minor.yy182->affinity = OE_Ignore; + yymsp[-3].minor.yy18 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); + if( yymsp[-3].minor.yy18 ){ + yymsp[-3].minor.yy18->affinity = OE_Ignore; } } break; - case 256: /* expr ::= RAISE LP raisetype COMMA nm RP */ + case 258: /* expr ::= RAISE LP raisetype COMMA nm RP */ { - yymsp[-5].minor.yy182 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); - if( yymsp[-5].minor.yy182 ) { - yymsp[-5].minor.yy182->affinity = (char)yymsp[-3].minor.yy502; + yymsp[-5].minor.yy18 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); + if( yymsp[-5].minor.yy18 ) { + yymsp[-5].minor.yy18->affinity = (char)yymsp[-3].minor.yy70; } } break; - case 257: /* raisetype ::= ROLLBACK */ -{yymsp[0].minor.yy502 = OE_Rollback;} + case 259: /* raisetype ::= ROLLBACK */ +{yymsp[0].minor.yy70 = OE_Rollback;} break; - case 259: /* raisetype ::= FAIL */ -{yymsp[0].minor.yy502 = OE_Fail;} + case 261: /* raisetype ::= FAIL */ +{yymsp[0].minor.yy70 = OE_Fail;} break; - case 260: /* cmd ::= DROP TRIGGER ifexists fullname */ + case 262: /* cmd ::= DROP TRIGGER ifexists fullname */ { - sqlite3DropTrigger(pParse,yymsp[0].minor.yy427,yymsp[-1].minor.yy502); + sqlite3DropTrigger(pParse,yymsp[0].minor.yy135,yymsp[-1].minor.yy70); } break; - case 261: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + case 263: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ { - sqlite3Attach(pParse, yymsp[-3].minor.yy182, yymsp[-1].minor.yy182, yymsp[0].minor.yy182); + sqlite3Attach(pParse, yymsp[-3].minor.yy18, yymsp[-1].minor.yy18, yymsp[0].minor.yy18); } break; - case 262: /* cmd ::= DETACH database_kw_opt expr */ + case 264: /* cmd ::= DETACH database_kw_opt expr */ { - sqlite3Detach(pParse, yymsp[0].minor.yy182); + sqlite3Detach(pParse, yymsp[0].minor.yy18); } break; - case 265: /* cmd ::= REINDEX */ + case 267: /* cmd ::= REINDEX */ {sqlite3Reindex(pParse, 0, 0);} break; - case 266: /* cmd ::= REINDEX nm dbnm */ + case 268: /* cmd ::= REINDEX nm dbnm */ {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 267: /* cmd ::= ANALYZE */ + case 269: /* cmd ::= ANALYZE */ {sqlite3Analyze(pParse, 0, 0);} break; - case 268: /* cmd ::= ANALYZE nm dbnm */ + case 270: /* cmd ::= ANALYZE nm dbnm */ {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 269: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ + case 271: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ { - sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy427,&yymsp[0].minor.yy0); + sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy135,&yymsp[0].minor.yy0); } break; - case 270: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + case 272: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ { yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n; sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0); } break; - case 271: /* add_column_fullname ::= fullname */ + case 273: /* add_column_fullname ::= fullname */ { disableLookaside(pParse); - sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy427); + sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy135); } break; - case 272: /* cmd ::= create_vtab */ + case 274: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ +{ + sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy135, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); +} + break; + case 275: /* cmd ::= create_vtab */ {sqlite3VtabFinishParse(pParse,0);} break; - case 273: /* cmd ::= create_vtab LP vtabarglist RP */ + case 276: /* cmd ::= create_vtab LP vtabarglist RP */ {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} break; - case 274: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + case 277: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ { - sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy502); + sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy70); } break; - case 275: /* vtabarg ::= */ + case 278: /* vtabarg ::= */ {sqlite3VtabArgInit(pParse);} break; - case 276: /* vtabargtoken ::= ANY */ - case 277: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==277); - case 278: /* lp ::= LP */ yytestcase(yyruleno==278); + case 279: /* vtabargtoken ::= ANY */ + case 280: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==280); + case 281: /* lp ::= LP */ yytestcase(yyruleno==281); {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} break; - case 279: /* with ::= WITH wqlist */ - case 280: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==280); -{ sqlite3WithPush(pParse, yymsp[0].minor.yy91, 1); } + case 282: /* with ::= WITH wqlist */ + case 283: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==283); +{ sqlite3WithPush(pParse, yymsp[0].minor.yy449, 1); } + break; + case 284: /* wqlist ::= nm eidlist_opt AS LP select RP */ +{ + yymsp[-5].minor.yy449 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy420, yymsp[-1].minor.yy489); /*A-overwrites-X*/ +} + break; + case 285: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ +{ + yymsp[-7].minor.yy449 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy449, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy420, yymsp[-1].minor.yy489); +} + break; + case 286: /* windowdefn_list ::= windowdefn */ +{ yylhsminor.yy327 = yymsp[0].minor.yy327; } + yymsp[0].minor.yy327 = yylhsminor.yy327; + break; + case 287: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ +{ + assert( yymsp[0].minor.yy327!=0 ); + yymsp[0].minor.yy327->pNextWin = yymsp[-2].minor.yy327; + yylhsminor.yy327 = yymsp[0].minor.yy327; +} + yymsp[-2].minor.yy327 = yylhsminor.yy327; + break; + case 288: /* windowdefn ::= nm AS window */ +{ + if( ALWAYS(yymsp[0].minor.yy327) ){ + yymsp[0].minor.yy327->zName = sqlite3DbStrNDup(pParse->db, yymsp[-2].minor.yy0.z, yymsp[-2].minor.yy0.n); + } + yylhsminor.yy327 = yymsp[0].minor.yy327; +} + yymsp[-2].minor.yy327 = yylhsminor.yy327; + break; + case 289: /* window ::= LP part_opt orderby_opt frame_opt RP */ +{ + yymsp[-4].minor.yy327 = yymsp[-1].minor.yy327; + if( ALWAYS(yymsp[-4].minor.yy327) ){ + yymsp[-4].minor.yy327->pPartition = yymsp[-3].minor.yy420; + yymsp[-4].minor.yy327->pOrderBy = yymsp[-2].minor.yy420; + } +} + break; + case 290: /* part_opt ::= PARTITION BY nexprlist */ +{ yymsp[-2].minor.yy420 = yymsp[0].minor.yy420; } + break; + case 291: /* part_opt ::= */ +{ yymsp[1].minor.yy420 = 0; } + break; + case 292: /* frame_opt ::= */ +{ + yymsp[1].minor.yy327 = sqlite3WindowAlloc(pParse, TK_RANGE, TK_UNBOUNDED, 0, TK_CURRENT, 0); +} + break; + case 293: /* frame_opt ::= range_or_rows frame_bound_s */ +{ + yylhsminor.yy327 = sqlite3WindowAlloc(pParse, yymsp[-1].minor.yy70, yymsp[0].minor.yy119.eType, yymsp[0].minor.yy119.pExpr, TK_CURRENT, 0); +} + yymsp[-1].minor.yy327 = yylhsminor.yy327; + break; + case 294: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e */ +{ + yylhsminor.yy327 = sqlite3WindowAlloc(pParse, yymsp[-4].minor.yy70, yymsp[-2].minor.yy119.eType, yymsp[-2].minor.yy119.pExpr, yymsp[0].minor.yy119.eType, yymsp[0].minor.yy119.pExpr); +} + yymsp[-4].minor.yy327 = yylhsminor.yy327; + break; + case 295: /* range_or_rows ::= RANGE */ +{ yymsp[0].minor.yy70 = TK_RANGE; } + break; + case 296: /* range_or_rows ::= ROWS */ +{ yymsp[0].minor.yy70 = TK_ROWS; } + break; + case 297: /* frame_bound_s ::= frame_bound */ + case 299: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==299); +{ yylhsminor.yy119 = yymsp[0].minor.yy119; } + yymsp[0].minor.yy119 = yylhsminor.yy119; + break; + case 298: /* frame_bound_s ::= UNBOUNDED PRECEDING */ + case 300: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==300); +{yymsp[-1].minor.yy119.eType = TK_UNBOUNDED; yymsp[-1].minor.yy119.pExpr = 0;} + break; + case 301: /* frame_bound ::= expr PRECEDING */ +{ yylhsminor.yy119.eType = TK_PRECEDING; yylhsminor.yy119.pExpr = yymsp[-1].minor.yy18; } + yymsp[-1].minor.yy119 = yylhsminor.yy119; + break; + case 302: /* frame_bound ::= CURRENT ROW */ +{ yymsp[-1].minor.yy119.eType = TK_CURRENT ; yymsp[-1].minor.yy119.pExpr = 0; } + break; + case 303: /* frame_bound ::= expr FOLLOWING */ +{ yylhsminor.yy119.eType = TK_FOLLOWING; yylhsminor.yy119.pExpr = yymsp[-1].minor.yy18; } + yymsp[-1].minor.yy119 = yylhsminor.yy119; + break; + case 304: /* window_clause ::= WINDOW windowdefn_list */ +{ yymsp[-1].minor.yy327 = yymsp[0].minor.yy327; } break; - case 281: /* wqlist ::= nm eidlist_opt AS LP select RP */ + case 305: /* over_clause ::= filter_opt OVER window */ { - yymsp[-5].minor.yy91 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy232, yymsp[-1].minor.yy399); /*A-overwrites-X*/ + yylhsminor.yy327 = yymsp[0].minor.yy327; + assert( yylhsminor.yy327!=0 ); + yylhsminor.yy327->pFilter = yymsp[-2].minor.yy18; } + yymsp[-2].minor.yy327 = yylhsminor.yy327; break; - case 282: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ + case 306: /* over_clause ::= filter_opt OVER nm */ { - yymsp[-7].minor.yy91 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy91, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy232, yymsp[-1].minor.yy399); + yylhsminor.yy327 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( yylhsminor.yy327 ){ + yylhsminor.yy327->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n); + yylhsminor.yy327->pFilter = yymsp[-2].minor.yy18; + }else{ + sqlite3ExprDelete(pParse->db, yymsp[-2].minor.yy18); + } } + yymsp[-2].minor.yy327 = yylhsminor.yy327; + break; + case 308: /* filter_opt ::= FILTER LP WHERE expr RP */ +{ yymsp[-4].minor.yy18 = yymsp[-1].minor.yy18; } break; default: - /* (283) input ::= cmdlist */ yytestcase(yyruleno==283); - /* (284) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==284); - /* (285) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=285); - /* (286) ecmd ::= SEMI */ yytestcase(yyruleno==286); - /* (287) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==287); - /* (288) ecmd ::= explain cmdx */ yytestcase(yyruleno==288); - /* (289) trans_opt ::= */ yytestcase(yyruleno==289); - /* (290) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==290); - /* (291) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==291); - /* (292) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==292); - /* (293) savepoint_opt ::= */ yytestcase(yyruleno==293); - /* (294) cmd ::= create_table create_table_args */ yytestcase(yyruleno==294); - /* (295) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==295); - /* (296) columnlist ::= columnname carglist */ yytestcase(yyruleno==296); - /* (297) nm ::= ID|INDEXED */ yytestcase(yyruleno==297); - /* (298) nm ::= STRING */ yytestcase(yyruleno==298); - /* (299) nm ::= JOIN_KW */ yytestcase(yyruleno==299); - /* (300) typetoken ::= typename */ yytestcase(yyruleno==300); - /* (301) typename ::= ID|STRING */ yytestcase(yyruleno==301); - /* (302) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=302); - /* (303) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=303); - /* (304) carglist ::= carglist ccons */ yytestcase(yyruleno==304); - /* (305) carglist ::= */ yytestcase(yyruleno==305); - /* (306) ccons ::= NULL onconf */ yytestcase(yyruleno==306); - /* (307) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==307); - /* (308) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==308); - /* (309) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=309); - /* (310) tconscomma ::= */ yytestcase(yyruleno==310); - /* (311) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=311); - /* (312) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=312); - /* (313) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=313); - /* (314) oneselect ::= values */ yytestcase(yyruleno==314); - /* (315) sclp ::= selcollist COMMA */ yytestcase(yyruleno==315); - /* (316) as ::= ID|STRING */ yytestcase(yyruleno==316); - /* (317) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=317); - /* (318) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==318); - /* (319) exprlist ::= nexprlist */ yytestcase(yyruleno==319); - /* (320) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=320); - /* (321) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=321); - /* (322) nmnum ::= ON */ yytestcase(yyruleno==322); - /* (323) nmnum ::= DELETE */ yytestcase(yyruleno==323); - /* (324) nmnum ::= DEFAULT */ yytestcase(yyruleno==324); - /* (325) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==325); - /* (326) foreach_clause ::= */ yytestcase(yyruleno==326); - /* (327) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==327); - /* (328) trnm ::= nm */ yytestcase(yyruleno==328); - /* (329) tridxby ::= */ yytestcase(yyruleno==329); - /* (330) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==330); - /* (331) database_kw_opt ::= */ yytestcase(yyruleno==331); - /* (332) kwcolumn_opt ::= */ yytestcase(yyruleno==332); - /* (333) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==333); - /* (334) vtabarglist ::= vtabarg */ yytestcase(yyruleno==334); - /* (335) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==335); - /* (336) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==336); - /* (337) anylist ::= */ yytestcase(yyruleno==337); - /* (338) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==338); - /* (339) anylist ::= anylist ANY */ yytestcase(yyruleno==339); - /* (340) with ::= */ yytestcase(yyruleno==340); + /* (309) input ::= cmdlist */ yytestcase(yyruleno==309); + /* (310) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==310); + /* (311) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=311); + /* (312) ecmd ::= SEMI */ yytestcase(yyruleno==312); + /* (313) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==313); + /* (314) ecmd ::= explain cmdx */ yytestcase(yyruleno==314); + /* (315) trans_opt ::= */ yytestcase(yyruleno==315); + /* (316) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==316); + /* (317) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==317); + /* (318) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==318); + /* (319) savepoint_opt ::= */ yytestcase(yyruleno==319); + /* (320) cmd ::= create_table create_table_args */ yytestcase(yyruleno==320); + /* (321) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==321); + /* (322) columnlist ::= columnname carglist */ yytestcase(yyruleno==322); + /* (323) nm ::= ID|INDEXED */ yytestcase(yyruleno==323); + /* (324) nm ::= STRING */ yytestcase(yyruleno==324); + /* (325) nm ::= JOIN_KW */ yytestcase(yyruleno==325); + /* (326) typetoken ::= typename */ yytestcase(yyruleno==326); + /* (327) typename ::= ID|STRING */ yytestcase(yyruleno==327); + /* (328) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=328); + /* (329) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=329); + /* (330) carglist ::= carglist ccons */ yytestcase(yyruleno==330); + /* (331) carglist ::= */ yytestcase(yyruleno==331); + /* (332) ccons ::= NULL onconf */ yytestcase(yyruleno==332); + /* (333) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==333); + /* (334) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==334); + /* (335) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=335); + /* (336) tconscomma ::= */ yytestcase(yyruleno==336); + /* (337) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=337); + /* (338) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=338); + /* (339) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=339); + /* (340) oneselect ::= values */ yytestcase(yyruleno==340); + /* (341) sclp ::= selcollist COMMA */ yytestcase(yyruleno==341); + /* (342) as ::= ID|STRING */ yytestcase(yyruleno==342); + /* (343) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=343); + /* (344) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==344); + /* (345) exprlist ::= nexprlist */ yytestcase(yyruleno==345); + /* (346) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=346); + /* (347) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=347); + /* (348) nmnum ::= ON */ yytestcase(yyruleno==348); + /* (349) nmnum ::= DELETE */ yytestcase(yyruleno==349); + /* (350) nmnum ::= DEFAULT */ yytestcase(yyruleno==350); + /* (351) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==351); + /* (352) foreach_clause ::= */ yytestcase(yyruleno==352); + /* (353) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==353); + /* (354) trnm ::= nm */ yytestcase(yyruleno==354); + /* (355) tridxby ::= */ yytestcase(yyruleno==355); + /* (356) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==356); + /* (357) database_kw_opt ::= */ yytestcase(yyruleno==357); + /* (358) kwcolumn_opt ::= */ yytestcase(yyruleno==358); + /* (359) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==359); + /* (360) vtabarglist ::= vtabarg */ yytestcase(yyruleno==360); + /* (361) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==361); + /* (362) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==362); + /* (363) anylist ::= */ yytestcase(yyruleno==363); + /* (364) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==364); + /* (365) anylist ::= anylist ANY */ yytestcase(yyruleno==365); + /* (366) with ::= */ yytestcase(yyruleno==366); break; /********** End reduce actions ************************************************/ }; @@ -145329,12 +150170,12 @@ do{ assert( yyact==yypParser->yytos->stateno ); - yyact = yy_find_shift_action(yymajor,yyact); + yyact = yy_find_shift_action((YYCODETYPE)yymajor,yyact); if( yyact >= YY_MIN_REDUCE ){ yyact = yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor, yyminor sqlite3ParserCTX_PARAM); }else if( yyact <= YY_MAX_SHIFTREDUCE ){ - yy_shift(yypParser,yyact,yymajor,yyminor); + yy_shift(yypParser,yyact,(YYCODETYPE)yymajor,yyminor); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; #endif @@ -145462,6 +150303,21 @@ return; } +/* +** Return the fallback token corresponding to canonical token iToken, or +** 0 if iToken has no fallback. +*/ +SQLITE_PRIVATE int sqlite3ParserFallback(int iToken){ +#ifdef YYFALLBACK + if( iToken<(int)(sizeof(yyFallback)/sizeof(yyFallback[0])) ){ + return yyFallback[iToken]; + } +#else + (void)iToken; +#endif + return 0; +} + /************** End of parse.c ***********************************************/ /************** Begin file tokenize.c ****************************************/ /* @@ -145520,11 +150376,12 @@ #define CC_TILDA 25 /* '~' */ #define CC_DOT 26 /* '.' */ #define CC_ILLEGAL 27 /* Illegal character */ +#define CC_NUL 28 /* 0x00 */ static const unsigned char aiClass[] = { #ifdef SQLITE_ASCII /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ -/* 0x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 7, 7, 27, 7, 7, 27, 27, +/* 0x */ 28, 27, 27, 27, 27, 27, 27, 27, 27, 7, 7, 27, 7, 7, 27, 27, /* 1x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, /* 2x */ 7, 15, 8, 5, 4, 22, 24, 8, 17, 18, 21, 20, 23, 11, 26, 16, /* 3x */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 19, 12, 14, 13, 6, @@ -145623,19 +150480,20 @@ ** is substantially reduced. This is important for embedded applications ** on platforms with limited memory. */ -/* Hash score: 185 */ -/* zKWText[] encodes 845 bytes of keyword text in 561 bytes */ +/* Hash score: 208 */ +/* zKWText[] encodes 923 bytes of keyword text in 614 bytes */ /* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */ /* ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE */ /* XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY */ -/* UNIQUERYWITHOUTERELEASEATTACHAVINGROUPDATEBEGINNERECURSIVE */ -/* BETWEENOTHINGLOBYCASCADELETECASECOLLATECREATECURRENT_DATE */ -/* DETACHIMMEDIATEJOINSERTLIKEMATCHPLANALYZEPRAGMABORTVALUES */ -/* VIRTUALIMITWHENOTNULLWHERENAMEAFTEREPLACEANDEFAULT */ -/* AUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSSCURRENT_TIMESTAMP */ -/* RIMARYDEFERREDISTINCTDORDERESTRICTDROPFAILFROMFULLIFISNULL */ -/* RIGHTROLLBACKROWUNIONUSINGVACUUMVIEWINITIALLY */ -static const char zKWText[560] = { +/* UNIQUERYWITHOUTERELEASEATTACHAVINGROUPDATEBEGINNERANGEBETWEEN */ +/* OTHINGLOBYCASCADELETECASECOLLATECREATECURRENT_DATEDETACH */ +/* IMMEDIATEJOINSERTLIKEMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMIT */ +/* WHENOTNULLWHERECURSIVEAFTERENAMEANDEFAULTAUTOINCREMENTCAST */ +/* COLUMNCOMMITCONFLICTCROSSCURRENT_TIMESTAMPARTITIONDEFERRED */ +/* ISTINCTDROPRECEDINGFAILFILTEREPLACEFOLLOWINGFROMFULLIFISNULL */ +/* ORDERESTRICTOVERIGHTROLLBACKROWSUNBOUNDEDUNIONUSINGVACUUMVIEW */ +/* INDOWINITIALLYPRIMARY */ +static const char zKWText[613] = { 'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H', 'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G', 'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A', @@ -145648,84 +150506,90 @@ 'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q', 'U','E','R','Y','W','I','T','H','O','U','T','E','R','E','L','E','A','S', 'E','A','T','T','A','C','H','A','V','I','N','G','R','O','U','P','D','A', - 'T','E','B','E','G','I','N','N','E','R','E','C','U','R','S','I','V','E', - 'B','E','T','W','E','E','N','O','T','H','I','N','G','L','O','B','Y','C', - 'A','S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L', - 'A','T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D', - 'A','T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E', - 'J','O','I','N','S','E','R','T','L','I','K','E','M','A','T','C','H','P', - 'L','A','N','A','L','Y','Z','E','P','R','A','G','M','A','B','O','R','T', - 'V','A','L','U','E','S','V','I','R','T','U','A','L','I','M','I','T','W', - 'H','E','N','O','T','N','U','L','L','W','H','E','R','E','N','A','M','E', - 'A','F','T','E','R','E','P','L','A','C','E','A','N','D','E','F','A','U', - 'L','T','A','U','T','O','I','N','C','R','E','M','E','N','T','C','A','S', - 'T','C','O','L','U','M','N','C','O','M','M','I','T','C','O','N','F','L', - 'I','C','T','C','R','O','S','S','C','U','R','R','E','N','T','_','T','I', - 'M','E','S','T','A','M','P','R','I','M','A','R','Y','D','E','F','E','R', - 'R','E','D','I','S','T','I','N','C','T','D','O','R','D','E','R','E','S', - 'T','R','I','C','T','D','R','O','P','F','A','I','L','F','R','O','M','F', - 'U','L','L','I','F','I','S','N','U','L','L','R','I','G','H','T','R','O', - 'L','L','B','A','C','K','R','O','W','U','N','I','O','N','U','S','I','N', - 'G','V','A','C','U','U','M','V','I','E','W','I','N','I','T','I','A','L', - 'L','Y', + 'T','E','B','E','G','I','N','N','E','R','A','N','G','E','B','E','T','W', + 'E','E','N','O','T','H','I','N','G','L','O','B','Y','C','A','S','C','A', + 'D','E','L','E','T','E','C','A','S','E','C','O','L','L','A','T','E','C', + 'R','E','A','T','E','C','U','R','R','E','N','T','_','D','A','T','E','D', + 'E','T','A','C','H','I','M','M','E','D','I','A','T','E','J','O','I','N', + 'S','E','R','T','L','I','K','E','M','A','T','C','H','P','L','A','N','A', + 'L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U', + 'E','S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','O', + 'T','N','U','L','L','W','H','E','R','E','C','U','R','S','I','V','E','A', + 'F','T','E','R','E','N','A','M','E','A','N','D','E','F','A','U','L','T', + 'A','U','T','O','I','N','C','R','E','M','E','N','T','C','A','S','T','C', + 'O','L','U','M','N','C','O','M','M','I','T','C','O','N','F','L','I','C', + 'T','C','R','O','S','S','C','U','R','R','E','N','T','_','T','I','M','E', + 'S','T','A','M','P','A','R','T','I','T','I','O','N','D','E','F','E','R', + 'R','E','D','I','S','T','I','N','C','T','D','R','O','P','R','E','C','E', + 'D','I','N','G','F','A','I','L','F','I','L','T','E','R','E','P','L','A', + 'C','E','F','O','L','L','O','W','I','N','G','F','R','O','M','F','U','L', + 'L','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S','T','R', + 'I','C','T','O','V','E','R','I','G','H','T','R','O','L','L','B','A','C', + 'K','R','O','W','S','U','N','B','O','U','N','D','E','D','U','N','I','O', + 'N','U','S','I','N','G','V','A','C','U','U','M','V','I','E','W','I','N', + 'D','O','W','I','N','I','T','I','A','L','L','Y','P','R','I','M','A','R', + 'Y', }; /* aKWHash[i] is the hash value for the i-th keyword */ static const unsigned char aKWHash[127] = { - 74, 108, 119, 72, 0, 45, 0, 0, 81, 0, 76, 61, 0, - 42, 12, 77, 15, 0, 118, 84, 54, 116, 0, 19, 0, 0, - 123, 0, 121, 111, 0, 22, 96, 0, 9, 0, 0, 68, 69, - 0, 67, 6, 0, 48, 93, 105, 0, 120, 104, 0, 0, 44, - 0, 106, 24, 0, 17, 0, 124, 53, 23, 0, 5, 62, 25, - 99, 0, 0, 126, 112, 60, 125, 57, 28, 55, 0, 94, 0, - 103, 26, 0, 102, 0, 0, 0, 98, 95, 100, 91, 115, 14, - 39, 114, 0, 80, 0, 109, 92, 90, 32, 0, 122, 79, 117, - 86, 46, 83, 0, 0, 97, 40, 59, 110, 0, 36, 0, 0, - 29, 0, 89, 87, 88, 0, 20, 85, 0, 56, + 74, 109, 124, 72, 106, 45, 0, 0, 81, 0, 76, 61, 0, + 42, 12, 77, 15, 0, 123, 84, 54, 118, 125, 19, 0, 0, + 130, 0, 128, 121, 0, 22, 96, 0, 9, 0, 0, 115, 69, + 0, 67, 6, 0, 48, 93, 136, 0, 126, 104, 0, 0, 44, + 0, 107, 24, 0, 17, 0, 131, 53, 23, 0, 5, 62, 132, + 99, 0, 0, 135, 110, 60, 134, 57, 113, 55, 0, 94, 0, + 103, 26, 0, 102, 0, 0, 0, 98, 95, 100, 105, 117, 14, + 39, 116, 0, 80, 0, 133, 114, 92, 59, 0, 129, 79, 119, + 86, 46, 83, 0, 0, 97, 40, 122, 120, 0, 127, 0, 0, + 29, 0, 89, 87, 88, 0, 20, 85, 111, 56, }; /* aKWNext[] forms the hash collision chain. If aKWHash[i]==0 ** then the i-th keyword has no more hash collisions. Otherwise, ** the next keyword with the same hash is aKWHash[i]-1. */ -static const unsigned char aKWNext[126] = { +static const unsigned char aKWNext[136] = { 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 21, 0, 0, 0, 0, 0, 50, - 0, 43, 3, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 43, 3, 47, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 65, 0, 41, 0, 38, 0, 0, 0, - 0, 0, 49, 75, 0, 0, 30, 0, 58, 0, 0, 63, 31, - 52, 16, 34, 10, 0, 0, 0, 0, 0, 0, 0, 11, 70, - 78, 0, 8, 0, 18, 51, 0, 107, 101, 0, 113, 0, 73, - 27, 37, 71, 82, 0, 35, 66, 0, 0, + 0, 0, 49, 75, 0, 0, 30, 0, 58, 0, 0, 0, 31, + 63, 16, 34, 10, 0, 0, 0, 0, 0, 0, 0, 11, 70, + 91, 0, 0, 8, 0, 108, 0, 101, 28, 52, 68, 0, 112, + 0, 73, 51, 0, 90, 27, 37, 0, 71, 36, 82, 0, 35, + 66, 25, 18, 0, 0, 78, }; /* aKWLen[i] is the length (in bytes) of the i-th keyword */ -static const unsigned char aKWLen[126] = { +static const unsigned char aKWLen[136] = { 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6, 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 6, 11, 6, 2, 7, 5, 5, 9, 6, 9, 9, 7, 10, 10, 4, 6, 2, 3, 9, 4, 2, 6, 5, 7, 4, 5, 7, - 6, 6, 5, 6, 5, 5, 9, 7, 7, 4, 2, 7, 3, + 6, 6, 5, 6, 5, 5, 5, 7, 7, 4, 2, 7, 3, 6, 4, 7, 6, 12, 6, 9, 4, 6, 4, 5, 4, 7, - 6, 5, 6, 7, 5, 4, 7, 3, 2, 4, 5, 6, 5, - 7, 3, 7, 13, 2, 2, 4, 6, 6, 8, 5, 17, 12, - 7, 8, 8, 2, 2, 5, 8, 4, 4, 4, 4, 2, 6, - 5, 8, 3, 5, 5, 6, 4, 9, 3, + 6, 5, 6, 7, 5, 4, 7, 3, 2, 4, 5, 9, 5, + 6, 3, 7, 13, 2, 2, 4, 6, 6, 8, 5, 17, 12, + 7, 9, 8, 8, 2, 4, 9, 4, 6, 7, 9, 4, 4, + 2, 6, 5, 8, 4, 5, 8, 4, 3, 9, 5, 5, 6, + 4, 6, 2, 9, 3, 7, }; /* aKWOffset[i] is the index into zKWText[] of the start of ** the text for the i-th keyword. */ -static const unsigned short int aKWOffset[126] = { +static const unsigned short int aKWOffset[136] = { 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33, 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81, 86, 91, 95, 96, 101, 105, 109, 117, 122, 128, 136, 142, 152, 159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 184, 188, 192, - 199, 204, 209, 212, 218, 221, 225, 234, 240, 246, 249, 251, 252, - 256, 262, 266, 273, 279, 291, 297, 306, 308, 314, 318, 323, 325, - 332, 337, 342, 348, 354, 359, 362, 362, 362, 365, 369, 372, 378, - 382, 389, 391, 398, 400, 402, 411, 415, 421, 427, 435, 440, 440, - 456, 463, 470, 471, 478, 479, 483, 491, 495, 499, 503, 507, 509, - 515, 520, 528, 531, 536, 541, 547, 551, 556, + 199, 204, 209, 212, 218, 221, 225, 230, 236, 242, 245, 247, 248, + 252, 258, 262, 269, 275, 287, 293, 302, 304, 310, 314, 319, 321, + 328, 333, 338, 344, 350, 355, 358, 358, 358, 361, 365, 368, 377, + 381, 387, 389, 396, 398, 400, 409, 413, 419, 425, 433, 438, 438, + 438, 454, 463, 470, 471, 478, 481, 490, 494, 499, 506, 515, 519, + 523, 525, 531, 535, 543, 546, 551, 559, 559, 563, 572, 577, 582, + 588, 591, 594, 597, 602, 606, }; /* aKWCode[i] is the parser symbol code for the i-th keyword */ -static const unsigned char aKWCode[126] = { +static const unsigned char aKWCode[136] = { TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE, TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN, TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD, @@ -145737,21 +150601,23 @@ TK_OFFSET, TK_OF, TK_SET, TK_TEMP, TK_TEMP, TK_OR, TK_UNIQUE, TK_QUERY, TK_WITHOUT, TK_WITH, TK_JOIN_KW, TK_RELEASE, TK_ATTACH, TK_HAVING, TK_GROUP, - TK_UPDATE, TK_BEGIN, TK_JOIN_KW, TK_RECURSIVE, TK_BETWEEN, + TK_UPDATE, TK_BEGIN, TK_JOIN_KW, TK_RANGE, TK_BETWEEN, TK_NOTHING, TK_LIKE_KW, TK_BY, TK_CASCADE, TK_ASC, TK_DELETE, TK_CASE, TK_COLLATE, TK_CREATE, TK_CTIME_KW, TK_DETACH, TK_IMMEDIATE, TK_JOIN, TK_INSERT, TK_LIKE_KW, TK_MATCH, TK_PLAN, TK_ANALYZE, TK_PRAGMA, TK_ABORT, TK_VALUES, TK_VIRTUAL, TK_LIMIT, TK_WHEN, TK_NOTNULL, - TK_NOT, TK_NO, TK_NULL, TK_WHERE, TK_RENAME, - TK_AFTER, TK_REPLACE, TK_AND, TK_DEFAULT, TK_AUTOINCR, + TK_NOT, TK_NO, TK_NULL, TK_WHERE, TK_RECURSIVE, + TK_AFTER, TK_RENAME, TK_AND, TK_DEFAULT, TK_AUTOINCR, TK_TO, TK_IN, TK_CAST, TK_COLUMNKW, TK_COMMIT, - TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, TK_CTIME_KW, TK_PRIMARY, - TK_DEFERRED, TK_DISTINCT, TK_IS, TK_DO, TK_ORDER, - TK_RESTRICT, TK_DROP, TK_FAIL, TK_FROM, TK_JOIN_KW, - TK_IF, TK_ISNULL, TK_JOIN_KW, TK_ROLLBACK, TK_ROW, - TK_UNION, TK_USING, TK_VACUUM, TK_VIEW, TK_INITIALLY, - TK_ALL, + TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, TK_CTIME_KW, TK_CURRENT, + TK_PARTITION, TK_DEFERRED, TK_DISTINCT, TK_IS, TK_DROP, + TK_PRECEDING, TK_FAIL, TK_FILTER, TK_REPLACE, TK_FOLLOWING, + TK_FROM, TK_JOIN_KW, TK_IF, TK_ISNULL, TK_ORDER, + TK_RESTRICT, TK_OVER, TK_JOIN_KW, TK_ROLLBACK, TK_ROWS, + TK_ROW, TK_UNBOUNDED, TK_UNION, TK_USING, TK_VACUUM, + TK_VIEW, TK_WINDOW, TK_DO, TK_INITIALLY, TK_ALL, + TK_PRIMARY, }; /* Check to see if z[0..n-1] is a keyword. If it is, write the ** parser symbol code for that keyword into *pType. Always @@ -145830,7 +150696,7 @@ testcase( i==55 ); /* UPDATE */ testcase( i==56 ); /* BEGIN */ testcase( i==57 ); /* INNER */ - testcase( i==58 ); /* RECURSIVE */ + testcase( i==58 ); /* RANGE */ testcase( i==59 ); /* BETWEEN */ testcase( i==60 ); /* NOTHING */ testcase( i==61 ); /* GLOB */ @@ -145861,9 +150727,9 @@ testcase( i==86 ); /* NO */ testcase( i==87 ); /* NULL */ testcase( i==88 ); /* WHERE */ - testcase( i==89 ); /* RENAME */ + testcase( i==89 ); /* RECURSIVE */ testcase( i==90 ); /* AFTER */ - testcase( i==91 ); /* REPLACE */ + testcase( i==91 ); /* RENAME */ testcase( i==92 ); /* AND */ testcase( i==93 ); /* DEFAULT */ testcase( i==94 ); /* AUTOINCREMENT */ @@ -145876,28 +150742,38 @@ testcase( i==101 ); /* CROSS */ testcase( i==102 ); /* CURRENT_TIMESTAMP */ testcase( i==103 ); /* CURRENT_TIME */ - testcase( i==104 ); /* PRIMARY */ - testcase( i==105 ); /* DEFERRED */ - testcase( i==106 ); /* DISTINCT */ - testcase( i==107 ); /* IS */ - testcase( i==108 ); /* DO */ - testcase( i==109 ); /* ORDER */ - testcase( i==110 ); /* RESTRICT */ - testcase( i==111 ); /* DROP */ - testcase( i==112 ); /* FAIL */ - testcase( i==113 ); /* FROM */ - testcase( i==114 ); /* FULL */ - testcase( i==115 ); /* IF */ - testcase( i==116 ); /* ISNULL */ - testcase( i==117 ); /* RIGHT */ - testcase( i==118 ); /* ROLLBACK */ - testcase( i==119 ); /* ROW */ - testcase( i==120 ); /* UNION */ - testcase( i==121 ); /* USING */ - testcase( i==122 ); /* VACUUM */ - testcase( i==123 ); /* VIEW */ - testcase( i==124 ); /* INITIALLY */ - testcase( i==125 ); /* ALL */ + testcase( i==104 ); /* CURRENT */ + testcase( i==105 ); /* PARTITION */ + testcase( i==106 ); /* DEFERRED */ + testcase( i==107 ); /* DISTINCT */ + testcase( i==108 ); /* IS */ + testcase( i==109 ); /* DROP */ + testcase( i==110 ); /* PRECEDING */ + testcase( i==111 ); /* FAIL */ + testcase( i==112 ); /* FILTER */ + testcase( i==113 ); /* REPLACE */ + testcase( i==114 ); /* FOLLOWING */ + testcase( i==115 ); /* FROM */ + testcase( i==116 ); /* FULL */ + testcase( i==117 ); /* IF */ + testcase( i==118 ); /* ISNULL */ + testcase( i==119 ); /* ORDER */ + testcase( i==120 ); /* RESTRICT */ + testcase( i==121 ); /* OVER */ + testcase( i==122 ); /* RIGHT */ + testcase( i==123 ); /* ROLLBACK */ + testcase( i==124 ); /* ROWS */ + testcase( i==125 ); /* ROW */ + testcase( i==126 ); /* UNBOUNDED */ + testcase( i==127 ); /* UNION */ + testcase( i==128 ); /* USING */ + testcase( i==129 ); /* VACUUM */ + testcase( i==130 ); /* VIEW */ + testcase( i==131 ); /* WINDOW */ + testcase( i==132 ); /* DO */ + testcase( i==133 ); /* INITIALLY */ + testcase( i==134 ); /* ALL */ + testcase( i==135 ); /* PRIMARY */ *pType = aKWCode[i]; break; } @@ -145909,7 +150785,7 @@ keywordCode((char*)z, n, &id); return id; } -#define SQLITE_N_KEYWORD 126 +#define SQLITE_N_KEYWORD 136 SQLITE_API int sqlite3_keyword_name(int i,const char **pzName,int *pnName){ if( i<0 || i>=SQLITE_N_KEYWORD ) return SQLITE_ERROR; *pzName = zKWText + aKWOffset[i]; @@ -145963,11 +150839,85 @@ #define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) #endif -/* Make the IdChar function accessible from ctime.c */ -#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +/* Make the IdChar function accessible from ctime.c and alter.c */ SQLITE_PRIVATE int sqlite3IsIdChar(u8 c){ return IdChar(c); } -#endif +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Return the id of the next token in string (*pz). Before returning, set +** (*pz) to point to the byte following the parsed token. +*/ +static int getToken(const unsigned char **pz){ + const unsigned char *z = *pz; + int t; /* Token type to return */ + do { + z += sqlite3GetToken(z, &t); + }while( t==TK_SPACE ); + if( t==TK_ID + || t==TK_STRING + || t==TK_JOIN_KW + || t==TK_WINDOW + || t==TK_OVER + || sqlite3ParserFallback(t)==TK_ID + ){ + t = TK_ID; + } + *pz = z; + return t; +} + +/* +** The following three functions are called immediately after the tokenizer +** reads the keywords WINDOW, OVER and FILTER, respectively, to determine +** whether the token should be treated as a keyword or an SQL identifier. +** This cannot be handled by the usual lemon %fallback method, due to +** the ambiguity in some constructions. e.g. +** +** SELECT sum(x) OVER ... +** +** In the above, "OVER" might be a keyword, or it might be an alias for the +** sum(x) expression. If a "%fallback ID OVER" directive were added to +** grammar, then SQLite would always treat "OVER" as an alias, making it +** impossible to call a window-function without a FILTER clause. +** +** WINDOW is treated as a keyword if: +** +** * the following token is an identifier, or a keyword that can fallback +** to being an identifier, and +** * the token after than one is TK_AS. +** +** OVER is a keyword if: +** +** * the previous token was TK_RP, and +** * the next token is either TK_LP or an identifier. +** +** FILTER is a keyword if: +** +** * the previous token was TK_RP, and +** * the next token is TK_LP. +*/ +static int analyzeWindowKeyword(const unsigned char *z){ + int t; + t = getToken(&z); + if( t!=TK_ID ) return TK_ID; + t = getToken(&z); + if( t!=TK_AS ) return TK_ID; + return TK_WINDOW; +} +static int analyzeOverKeyword(const unsigned char *z, int lastToken){ + if( lastToken==TK_RP ){ + int t = getToken(&z); + if( t==TK_LP || t==TK_ID ) return TK_OVER; + } + return TK_ID; +} +static int analyzeFilterKeyword(const unsigned char *z, int lastToken){ + if( lastToken==TK_RP && getToken(&z)==TK_LP ){ + return TK_FILTER; + } + return TK_ID; +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ /* ** Return the length (in bytes) of the token that begins at z[0]. @@ -146236,6 +151186,10 @@ i = 1; break; } + case CC_NUL: { + *tokenType = TK_ILLEGAL; + return 0; + } default: { *tokenType = TK_ILLEGAL; return 1; @@ -146289,47 +151243,64 @@ assert( pParse->nVar==0 ); assert( pParse->pVList==0 ); while( 1 ){ - if( zSql[0]!=0 ){ - n = sqlite3GetToken((u8*)zSql, &tokenType); - mxSqlLen -= n; - if( mxSqlLen<0 ){ - pParse->rc = SQLITE_TOOBIG; - break; - } - }else{ - /* Upon reaching the end of input, call the parser two more times - ** with tokens TK_SEMI and 0, in that order. */ - if( lastTokenParsed==TK_SEMI ){ - tokenType = 0; - }else if( lastTokenParsed==0 ){ - break; - }else{ - tokenType = TK_SEMI; - } - n = 0; + n = sqlite3GetToken((u8*)zSql, &tokenType); + mxSqlLen -= n; + if( mxSqlLen<0 ){ + pParse->rc = SQLITE_TOOBIG; + break; } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( tokenType>=TK_WINDOW ){ + assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER + || tokenType==TK_ILLEGAL || tokenType==TK_WINDOW + ); +#else if( tokenType>=TK_SPACE ){ assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL ); +#endif /* SQLITE_OMIT_WINDOWFUNC */ if( db->u1.isInterrupted ){ pParse->rc = SQLITE_INTERRUPT; break; } - if( tokenType==TK_ILLEGAL ){ + if( tokenType==TK_SPACE ){ + zSql += n; + continue; + } + if( zSql[0]==0 ){ + /* Upon reaching the end of input, call the parser two more times + ** with tokens TK_SEMI and 0, in that order. */ + if( lastTokenParsed==TK_SEMI ){ + tokenType = 0; + }else if( lastTokenParsed==0 ){ + break; + }else{ + tokenType = TK_SEMI; + } + n = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + }else if( tokenType==TK_WINDOW ){ + assert( n==6 ); + tokenType = analyzeWindowKeyword((const u8*)&zSql[6]); + }else if( tokenType==TK_OVER ){ + assert( n==4 ); + tokenType = analyzeOverKeyword((const u8*)&zSql[4], lastTokenParsed); + }else if( tokenType==TK_FILTER ){ + assert( n==6 ); + tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed); +#endif /* SQLITE_OMIT_WINDOWFUNC */ + }else{ sqlite3ErrorMsg(pParse, "unrecognized token: \"%.*s\"", n, zSql); break; } - zSql += n; - }else{ - pParse->sLastToken.z = zSql; - pParse->sLastToken.n = n; - sqlite3Parser(pEngine, tokenType, pParse->sLastToken); - lastTokenParsed = tokenType; - zSql += n; - if( pParse->rc!=SQLITE_OK || db->mallocFailed ) break; } + pParse->sLastToken.z = zSql; + pParse->sLastToken.n = n; + sqlite3Parser(pEngine, tokenType, pParse->sLastToken); + lastTokenParsed = tokenType; + zSql += n; + if( pParse->rc!=SQLITE_OK || db->mallocFailed ) break; } assert( nErr==0 ); - pParse->zTail = zSql; #ifdef YYTRACKMAXSTACKDEPTH sqlite3_mutex_enter(sqlite3MallocMutex()); sqlite3StatusHighwater(SQLITE_STATUS_PARSER_STACK, @@ -146351,10 +151322,12 @@ assert( pzErrMsg!=0 ); if( pParse->zErrMsg ){ *pzErrMsg = pParse->zErrMsg; - sqlite3_log(pParse->rc, "%s", *pzErrMsg); + sqlite3_log(pParse->rc, "%s in \"%s\"", + *pzErrMsg, pParse->zTail); pParse->zErrMsg = 0; nErr++; } + pParse->zTail = zSql; if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){ sqlite3VdbeDelete(pParse->pVdbe); pParse->pVdbe = 0; @@ -146370,16 +151343,18 @@ sqlite3_free(pParse->apVtabLock); #endif - if( !IN_DECLARE_VTAB ){ + if( !IN_SPECIAL_PARSE ){ /* If the pParse->declareVtab flag is set, do not delete any table ** structure built up in pParse->pNewTable. The calling code (see vtab.c) ** will take responsibility for freeing the Table structure. */ sqlite3DeleteTable(db, pParse->pNewTable); } + if( !IN_RENAME_OBJECT ){ + sqlite3DeleteTrigger(db, pParse->pNewTrigger); + } if( pParse->pWithToFree ) sqlite3WithDelete(db, pParse->pWithToFree); - sqlite3DeleteTrigger(db, pParse->pNewTrigger); sqlite3DbFree(db, pParse->pVList); while( pParse->pAinc ){ AutoincInfo *p = pParse->pAinc; @@ -147636,7 +152611,7 @@ db->flags &= ~aFlagOp[i].mask; } if( oldFlags!=db->flags ){ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); } if( pRes ){ *pRes = (db->flags & aFlagOp[i].mask)!=0; @@ -147698,6 +152673,15 @@ } /* +** Return true if CollSeq is the default built-in BINARY. +*/ +SQLITE_PRIVATE int sqlite3IsBinary(const CollSeq *p){ + assert( p==0 || p->xCmp!=binCollFunc || p->pUser!=0 + || strcmp(p->zName,"BINARY")==0 ); + return p==0 || (p->xCmp==binCollFunc && p->pUser==0); +} + +/* ** Another built-in collating sequence: NOCASE. ** ** This collating sequence is intended to be used for "case independent @@ -147818,7 +152802,7 @@ sqlite3BtreeEnterAll(db); for(i=0; inDb; i++){ Schema *pSchema = db->aDb[i].pSchema; - if( db->aDb[i].pSchema ){ + if( pSchema ){ for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){ Table *pTab = (Table *)sqliteHashData(p); if( IsVirtual(pTab) ) sqlite3VtabDisconnect(db, pTab); @@ -148078,8 +153062,8 @@ sqlite3VtabRollback(db); sqlite3EndBenignMalloc(); - if( (db->mDbFlags&DBFLAG_SchemaChange)!=0 && db->init.busy==0 ){ - sqlite3ExpirePreparedStatements(db); + if( schemaChange ){ + sqlite3ExpirePreparedStatements(db, 0); sqlite3ResetAllSchemasOfConnection(db); } sqlite3BtreeLeaveAll(db); @@ -148107,6 +153091,7 @@ switch( rc ){ case SQLITE_OK: zName = "SQLITE_OK"; break; case SQLITE_ERROR: zName = "SQLITE_ERROR"; break; + case SQLITE_ERROR_SNAPSHOT: zName = "SQLITE_ERROR_SNAPSHOT"; break; case SQLITE_INTERNAL: zName = "SQLITE_INTERNAL"; break; case SQLITE_PERM: zName = "SQLITE_PERM"; break; case SQLITE_ABORT: zName = "SQLITE_ABORT"; break; @@ -148470,6 +153455,8 @@ void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), void (*xStep)(sqlite3_context*,int,sqlite3_value **), void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value **), FuncDestructor *pDestructor ){ FuncDef *p; @@ -148477,12 +153464,14 @@ int extraFlags; assert( sqlite3_mutex_held(db->mutex) ); - if( zFunctionName==0 || - (xSFunc && (xFinal || xStep)) || - (!xSFunc && (xFinal && !xStep)) || - (!xSFunc && (!xFinal && xStep)) || - (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) || - (255<(nName = sqlite3Strlen30( zFunctionName))) ){ + assert( xValue==0 || xSFunc==0 ); + if( zFunctionName==0 /* Must have a valid name */ + || (xSFunc!=0 && xFinal!=0) /* Not both xSFunc and xFinal */ + || ((xFinal==0)!=(xStep==0)) /* Both or neither of xFinal and xStep */ + || ((xValue==0)!=(xInverse==0)) /* Both or neither of xValue, xInverse */ + || (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) + || (255<(nName = sqlite3Strlen30( zFunctionName))) + ){ return SQLITE_MISUSE_BKPT; } @@ -148503,10 +153492,10 @@ }else if( enc==SQLITE_ANY ){ int rc; rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8|extraFlags, - pUserData, xSFunc, xStep, xFinal, pDestructor); + pUserData, xSFunc, xStep, xFinal, xValue, xInverse, pDestructor); if( rc==SQLITE_OK ){ rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE|extraFlags, - pUserData, xSFunc, xStep, xFinal, pDestructor); + pUserData, xSFunc, xStep, xFinal, xValue, xInverse, pDestructor); } if( rc!=SQLITE_OK ){ return rc; @@ -148523,14 +153512,14 @@ ** operation to continue but invalidate all precompiled statements. */ p = sqlite3FindFunction(db, zFunctionName, nArg, (u8)enc, 0); - if( p && (p->funcFlags & SQLITE_FUNC_ENCMASK)==enc && p->nArg==nArg ){ + if( p && (p->funcFlags & SQLITE_FUNC_ENCMASK)==(u32)enc && p->nArg==nArg ){ if( db->nVdbeActive ){ sqlite3ErrorWithMsg(db, SQLITE_BUSY, "unable to delete/modify user-function due to active statements"); assert( !db->mallocFailed ); return SQLITE_BUSY; }else{ - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); } } @@ -148552,38 +153541,32 @@ testcase( p->funcFlags & SQLITE_DETERMINISTIC ); p->xSFunc = xSFunc ? xSFunc : xStep; p->xFinalize = xFinal; + p->xValue = xValue; + p->xInverse = xInverse; p->pUserData = pUserData; p->nArg = (u16)nArg; return SQLITE_OK; } /* -** Create new user functions. +** Worker function used by utf-8 APIs that create new functions: +** +** sqlite3_create_function() +** sqlite3_create_function_v2() +** sqlite3_create_window_function() */ -SQLITE_API int sqlite3_create_function( - sqlite3 *db, - const char *zFunc, - int nArg, - int enc, - void *p, - void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), - void (*xStep)(sqlite3_context*,int,sqlite3_value **), - void (*xFinal)(sqlite3_context*) -){ - return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xSFunc, xStep, - xFinal, 0); -} - -SQLITE_API int sqlite3_create_function_v2( +static int createFunctionApi( sqlite3 *db, const char *zFunc, int nArg, int enc, void *p, - void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), - void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xSFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*), - void (*xDestroy)(void *) + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*) ){ int rc = SQLITE_ERROR; FuncDestructor *pArg = 0; @@ -148605,7 +153588,9 @@ pArg->xDestroy = xDestroy; pArg->pUserData = p; } - rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xSFunc, xStep, xFinal, pArg); + rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, + xSFunc, xStep, xFinal, xValue, xInverse, pArg + ); if( pArg && pArg->nRef==0 ){ assert( rc!=SQLITE_OK ); xDestroy(p); @@ -148618,6 +153603,52 @@ return rc; } +/* +** Create new user functions. +*/ +SQLITE_API int sqlite3_create_function( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, xSFunc, xStep, + xFinal, 0, 0, 0); +} +SQLITE_API int sqlite3_create_function_v2( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + void (*xDestroy)(void *) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, xSFunc, xStep, + xFinal, 0, 0, xDestroy); +} +SQLITE_API int sqlite3_create_window_function( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value **), + void (*xDestroy)(void *) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, 0, xStep, + xFinal, xValue, xInverse, xDestroy); +} + #ifndef SQLITE_OMIT_UTF16 SQLITE_API int sqlite3_create_function16( sqlite3 *db, @@ -148638,7 +153669,7 @@ sqlite3_mutex_enter(db->mutex); assert( !db->mallocFailed ); zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE); - rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xSFunc,xStep,xFinal,0); + rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xSFunc,xStep,xFinal,0,0,0); sqlite3DbFree(db, zFunc8); rc = sqlite3ApiExit(db, rc); sqlite3_mutex_leave(db->mutex); @@ -149263,7 +154294,7 @@ "unable to delete/modify collation sequence due to active statements"); return SQLITE_BUSY; } - sqlite3ExpirePreparedStatements(db); + sqlite3ExpirePreparedStatements(db, 0); /* If collation sequence pColl was created directly by a call to ** sqlite3_create_collation, and not generated by synthCollSeq(), @@ -149752,6 +154783,7 @@ db->nDb = 2; db->magic = SQLITE_MAGIC_BUSY; db->aDb = db->aDbStatic; + db->lookaside.bDisable = 1; assert( sizeof(db->aLimit)==sizeof(aHardLimit) ); memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit)); @@ -150452,6 +155484,9 @@ }else if( op==SQLITE_FCNTL_JOURNAL_POINTER ){ *(sqlite3_file**)pArg = sqlite3PagerJrnlFile(pPager); rc = SQLITE_OK; + }else if( op==SQLITE_FCNTL_DATA_VERSION ){ + *(unsigned int*)pArg = sqlite3PagerDataVersion(pPager); + rc = SQLITE_OK; }else{ rc = sqlite3OsFileControl(fd, op, pArg); } @@ -150715,7 +155750,8 @@ */ case SQLITE_TESTCTRL_VDBE_COVERAGE: { #ifdef SQLITE_VDBE_COVERAGE - typedef void (*branch_callback)(void*,int,u8,u8); + typedef void (*branch_callback)(void*,unsigned int, + unsigned char,unsigned char); sqlite3GlobalConfig.xVdbeBranch = va_arg(ap,branch_callback); sqlite3GlobalConfig.pVdbeBranchArg = va_arg(ap,void*); #endif @@ -150902,7 +155938,7 @@ if( iDb==0 || iDb>1 ){ Btree *pBt = db->aDb[iDb].pBt; if( 0==sqlite3BtreeIsInTrans(pBt) ){ - rc = sqlite3BtreeBeginTrans(pBt, 0); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); if( rc==SQLITE_OK ){ rc = sqlite3PagerSnapshotGet(sqlite3BtreePager(pBt), ppSnapshot); } @@ -150937,11 +155973,29 @@ iDb = sqlite3FindDbName(db, zDb); if( iDb==0 || iDb>1 ){ Btree *pBt = db->aDb[iDb].pBt; - if( 0==sqlite3BtreeIsInReadTrans(pBt) ){ - rc = sqlite3PagerSnapshotOpen(sqlite3BtreePager(pBt), pSnapshot); + if( sqlite3BtreeIsInTrans(pBt)==0 ){ + Pager *pPager = sqlite3BtreePager(pBt); + int bUnlock = 0; + if( sqlite3BtreeIsInReadTrans(pBt) ){ + if( db->nVdbeActive==0 ){ + rc = sqlite3PagerSnapshotCheck(pPager, pSnapshot); + if( rc==SQLITE_OK ){ + bUnlock = 1; + rc = sqlite3BtreeCommit(pBt); + } + } + }else{ + rc = SQLITE_OK; + } + if( rc==SQLITE_OK ){ + rc = sqlite3PagerSnapshotOpen(pPager, pSnapshot); + } if( rc==SQLITE_OK ){ - rc = sqlite3BtreeBeginTrans(pBt, 0); - sqlite3PagerSnapshotOpen(sqlite3BtreePager(pBt), 0); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); + sqlite3PagerSnapshotOpen(pPager, 0); + } + if( bUnlock ){ + sqlite3PagerSnapshotUnlock(pPager); } } } @@ -150972,7 +156026,7 @@ if( iDb==0 || iDb>1 ){ Btree *pBt = db->aDb[iDb].pBt; if( 0==sqlite3BtreeIsInReadTrans(pBt) ){ - rc = sqlite3BtreeBeginTrans(pBt, 0); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); if( rc==SQLITE_OK ){ rc = sqlite3PagerSnapshotRecover(sqlite3BtreePager(pBt)); sqlite3BtreeCommit(pBt); @@ -156095,7 +161149,7 @@ int rc = SQLITE_OK; UNUSED_PARAMETER(iSavepoint); assert( ((Fts3Table *)pVtab)->inTransaction ); - assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint ); + assert( ((Fts3Table *)pVtab)->mxSavepoint <= iSavepoint ); TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint ); if( ((Fts3Table *)pVtab)->bIgnoreSavepoint==0 ){ rc = fts3SyncMethod(pVtab); @@ -170518,9 +175572,9 @@ #endif /* !defined(SQLITE_DISABLE_FTS3_UNICODE) */ /************** End of fts3_unicode2.c ***************************************/ -/************** Begin file rtree.c *******************************************/ +/************** Begin file json1.c *******************************************/ /* -** 2001 September 15 +** 2015-08-12 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -170529,19641 +175583,21408 @@ ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** -************************************************************************* -** This file contains code for implementations of the r-tree and r*-tree -** algorithms packaged as an SQLite virtual table module. -*/ - -/* -** Database Format of R-Tree Tables -** -------------------------------- -** -** The data structure for a single virtual r-tree table is stored in three -** native SQLite tables declared as follows. In each case, the '%' character -** in the table name is replaced with the user-supplied name of the r-tree -** table. -** -** CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data BLOB) -** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER) -** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER, ...) -** -** The data for each node of the r-tree structure is stored in the %_node -** table. For each node that is not the root node of the r-tree, there is -** an entry in the %_parent table associating the node with its parent. -** And for each row of data in the table, there is an entry in the %_rowid -** table that maps from the entries rowid to the id of the node that it -** is stored on. If the r-tree contains auxiliary columns, those are stored -** on the end of the %_rowid table. -** -** The root node of an r-tree always exists, even if the r-tree table is -** empty. The nodeno of the root node is always 1. All other nodes in the -** table must be the same size as the root node. The content of each node -** is formatted as follows: +****************************************************************************** ** -** 1. If the node is the root node (node 1), then the first 2 bytes -** of the node contain the tree depth as a big-endian integer. -** For non-root nodes, the first 2 bytes are left unused. +** This SQLite extension implements JSON functions. The interface is +** modeled after MySQL JSON functions: ** -** 2. The next 2 bytes contain the number of entries currently -** stored in the node. +** https://dev.mysql.com/doc/refman/5.7/en/json.html ** -** 3. The remainder of the node contains the node entries. Each entry -** consists of a single 8-byte integer followed by an even number -** of 4-byte coordinates. For leaf nodes the integer is the rowid -** of a record. For internal nodes it is the node number of a -** child page. +** For the time being, all JSON is stored as pure text. (We might add +** a JSONB type in the future which stores a binary encoding of JSON in +** a BLOB, but there is no support for JSONB in the current implementation. +** This implementation parses JSON text at 250 MB/s, so it is hard to see +** how JSONB might improve on that.) */ - -#if !defined(SQLITE_CORE) \ - || (defined(SQLITE_ENABLE_RTREE) && !defined(SQLITE_OMIT_VIRTUALTABLE)) - -#ifndef SQLITE_CORE -/* #include "sqlite3ext.h" */ - SQLITE_EXTENSION_INIT1 -#else -/* #include "sqlite3.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_JSON1) +#if !defined(SQLITEINT_H) +/* #include "sqlite3ext.h" */ #endif - -/* #include */ +SQLITE_EXTENSION_INIT1 /* #include */ -/* #include */ +/* #include */ +/* #include */ +/* #include */ -#ifndef SQLITE_AMALGAMATION -#include "sqlite3rtree.h" -typedef sqlite3_int64 i64; -typedef sqlite3_uint64 u64; -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; +/* Mark a function parameter as unused, to suppress nuisance compiler +** warnings. */ +#ifndef UNUSED_PARAM +# define UNUSED_PARAM(X) (void)(X) #endif -/* The following macro is used to suppress compiler warnings. -*/ -#ifndef UNUSED_PARAMETER -# define UNUSED_PARAMETER(x) (void)(x) +#ifndef LARGEST_INT64 +# define LARGEST_INT64 (0xffffffff|(((sqlite3_int64)0x7fffffff)<<32)) +# define SMALLEST_INT64 (((sqlite3_int64)-1) - LARGEST_INT64) #endif -typedef struct Rtree Rtree; -typedef struct RtreeCursor RtreeCursor; -typedef struct RtreeNode RtreeNode; -typedef struct RtreeCell RtreeCell; -typedef struct RtreeConstraint RtreeConstraint; -typedef struct RtreeMatchArg RtreeMatchArg; -typedef struct RtreeGeomCallback RtreeGeomCallback; -typedef union RtreeCoord RtreeCoord; -typedef struct RtreeSearchPoint RtreeSearchPoint; - -/* The rtree may have between 1 and RTREE_MAX_DIMENSIONS dimensions. */ -#define RTREE_MAX_DIMENSIONS 5 - -/* Maximum number of auxiliary columns */ -#define RTREE_MAX_AUX_COLUMN 100 - -/* Size of hash table Rtree.aHash. This hash table is not expected to -** ever contain very many entries, so a fixed number of buckets is -** used. +/* +** Versions of isspace(), isalnum() and isdigit() to which it is safe +** to pass signed char values. */ -#define HASHSIZE 97 +#ifdef sqlite3Isdigit + /* Use the SQLite core versions if this routine is part of the + ** SQLite amalgamation */ +# define safe_isdigit(x) sqlite3Isdigit(x) +# define safe_isalnum(x) sqlite3Isalnum(x) +# define safe_isxdigit(x) sqlite3Isxdigit(x) +#else + /* Use the standard library for separate compilation */ +#include /* amalgamator: keep */ +# define safe_isdigit(x) isdigit((unsigned char)(x)) +# define safe_isalnum(x) isalnum((unsigned char)(x)) +# define safe_isxdigit(x) isxdigit((unsigned char)(x)) +#endif -/* The xBestIndex method of this virtual table requires an estimate of -** the number of rows in the virtual table to calculate the costs of -** various strategies. If possible, this estimate is loaded from the -** sqlite_stat1 table (with RTREE_MIN_ROWEST as a hard-coded minimum). -** Otherwise, if no sqlite_stat1 entry is available, use -** RTREE_DEFAULT_ROWEST. -*/ -#define RTREE_DEFAULT_ROWEST 1048576 -#define RTREE_MIN_ROWEST 100 - -/* -** An rtree virtual-table object. +/* +** Growing our own isspace() routine this way is twice as fast as +** the library isspace() function, resulting in a 7% overall performance +** increase for the parser. (Ubuntu14.10 gcc 4.8.4 x64 with -Os). */ -struct Rtree { - sqlite3_vtab base; /* Base class. Must be first */ - sqlite3 *db; /* Host database connection */ - int iNodeSize; /* Size in bytes of each node in the node table */ - u8 nDim; /* Number of dimensions */ - u8 nDim2; /* Twice the number of dimensions */ - u8 eCoordType; /* RTREE_COORD_REAL32 or RTREE_COORD_INT32 */ - u8 nBytesPerCell; /* Bytes consumed per cell */ - u8 inWrTrans; /* True if inside write transaction */ - u8 nAux; /* # of auxiliary columns in %_rowid */ - int iDepth; /* Current depth of the r-tree structure */ - char *zDb; /* Name of database containing r-tree table */ - char *zName; /* Name of r-tree table */ - u32 nBusy; /* Current number of users of this structure */ - i64 nRowEst; /* Estimated number of rows in this table */ - u32 nCursor; /* Number of open cursors */ - u32 nNodeRef; /* Number RtreeNodes with positive nRef */ - char *zReadAuxSql; /* SQL for statement to read aux data */ - - /* List of nodes removed during a CondenseTree operation. List is - ** linked together via the pointer normally used for hash chains - - ** RtreeNode.pNext. RtreeNode.iNode stores the depth of the sub-tree - ** headed by the node (leaf nodes have RtreeNode.iNode==0). - */ - RtreeNode *pDeleted; - int iReinsertHeight; /* Height of sub-trees Reinsert() has run on */ - - /* Blob I/O on xxx_node */ - sqlite3_blob *pNodeBlob; - - /* Statements to read/write/delete a record from xxx_node */ - sqlite3_stmt *pWriteNode; - sqlite3_stmt *pDeleteNode; - - /* Statements to read/write/delete a record from xxx_rowid */ - sqlite3_stmt *pReadRowid; - sqlite3_stmt *pWriteRowid; - sqlite3_stmt *pDeleteRowid; - - /* Statements to read/write/delete a record from xxx_parent */ - sqlite3_stmt *pReadParent; - sqlite3_stmt *pWriteParent; - sqlite3_stmt *pDeleteParent; - - /* Statement for writing to the "aux:" fields, if there are any */ - sqlite3_stmt *pWriteAux; - - RtreeNode *aHash[HASHSIZE]; /* Hash table of in-memory nodes. */ +static const char jsonIsSpace[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; +#define safe_isspace(x) (jsonIsSpace[(unsigned char)x]) -/* Possible values for Rtree.eCoordType: */ -#define RTREE_COORD_REAL32 0 -#define RTREE_COORD_INT32 1 - -/* -** If SQLITE_RTREE_INT_ONLY is defined, then this virtual table will -** only deal with integer coordinates. No floating point operations -** will be done. -*/ -#ifdef SQLITE_RTREE_INT_ONLY - typedef sqlite3_int64 RtreeDValue; /* High accuracy coordinate */ - typedef int RtreeValue; /* Low accuracy coordinate */ -# define RTREE_ZERO 0 -#else - typedef double RtreeDValue; /* High accuracy coordinate */ - typedef float RtreeValue; /* Low accuracy coordinate */ -# define RTREE_ZERO 0.0 +#ifndef SQLITE_AMALGAMATION + /* Unsigned integer types. These are already defined in the sqliteInt.h, + ** but the definitions need to be repeated for separate compilation. */ + typedef sqlite3_uint64 u64; + typedef unsigned int u32; + typedef unsigned short int u16; + typedef unsigned char u8; #endif -/* -** When doing a search of an r-tree, instances of the following structure -** record intermediate results from the tree walk. -** -** The id is always a node-id. For iLevel>=1 the id is the node-id of -** the node that the RtreeSearchPoint represents. When iLevel==0, however, -** the id is of the parent node and the cell that RtreeSearchPoint -** represents is the iCell-th entry in the parent node. -*/ -struct RtreeSearchPoint { - RtreeDValue rScore; /* The score for this node. Smallest goes first. */ - sqlite3_int64 id; /* Node ID */ - u8 iLevel; /* 0=entries. 1=leaf node. 2+ for higher */ - u8 eWithin; /* PARTLY_WITHIN or FULLY_WITHIN */ - u8 iCell; /* Cell index within the node */ -}; +/* Objects */ +typedef struct JsonString JsonString; +typedef struct JsonNode JsonNode; +typedef struct JsonParse JsonParse; -/* -** The minimum number of cells allowed for a node is a third of the -** maximum. In Gutman's notation: -** -** m = M/3 -** -** If an R*-tree "Reinsert" operation is required, the same number of -** cells are removed from the overfull node and reinserted into the tree. +/* An instance of this object represents a JSON string +** under construction. Really, this is a generic string accumulator +** that can be and is used to create strings other than JSON. */ -#define RTREE_MINCELLS(p) ((((p)->iNodeSize-4)/(p)->nBytesPerCell)/3) -#define RTREE_REINSERT(p) RTREE_MINCELLS(p) -#define RTREE_MAXCELLS 51 +struct JsonString { + sqlite3_context *pCtx; /* Function context - put error messages here */ + char *zBuf; /* Append JSON content here */ + u64 nAlloc; /* Bytes of storage available in zBuf[] */ + u64 nUsed; /* Bytes of zBuf[] currently used */ + u8 bStatic; /* True if zBuf is static space */ + u8 bErr; /* True if an error has been encountered */ + char zSpace[100]; /* Initial static space */ +}; -/* -** The smallest possible node-size is (512-64)==448 bytes. And the largest -** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates). -** Therefore all non-root nodes must contain at least 3 entries. Since -** 3^40 is greater than 2^64, an r-tree structure always has a depth of -** 40 or less. +/* JSON type values */ -#define RTREE_MAX_DEPTH 40 +#define JSON_NULL 0 +#define JSON_TRUE 1 +#define JSON_FALSE 2 +#define JSON_INT 3 +#define JSON_REAL 4 +#define JSON_STRING 5 +#define JSON_ARRAY 6 +#define JSON_OBJECT 7 +/* The "subtype" set for JSON values */ +#define JSON_SUBTYPE 74 /* Ascii for "J" */ /* -** Number of entries in the cursor RtreeNode cache. The first entry is -** used to cache the RtreeNode for RtreeCursor.sPoint. The remaining -** entries cache the RtreeNode for the first elements of the priority queue. -*/ -#define RTREE_CACHE_SZ 5 - -/* -** An rtree cursor object. +** Names of the various JSON types: */ -struct RtreeCursor { - sqlite3_vtab_cursor base; /* Base class. Must be first */ - u8 atEOF; /* True if at end of search */ - u8 bPoint; /* True if sPoint is valid */ - u8 bAuxValid; /* True if pReadAux is valid */ - int iStrategy; /* Copy of idxNum search parameter */ - int nConstraint; /* Number of entries in aConstraint */ - RtreeConstraint *aConstraint; /* Search constraints. */ - int nPointAlloc; /* Number of slots allocated for aPoint[] */ - int nPoint; /* Number of slots used in aPoint[] */ - int mxLevel; /* iLevel value for root of the tree */ - RtreeSearchPoint *aPoint; /* Priority queue for search points */ - sqlite3_stmt *pReadAux; /* Statement to read aux-data */ - RtreeSearchPoint sPoint; /* Cached next search point */ - RtreeNode *aNode[RTREE_CACHE_SZ]; /* Rtree node cache */ - u32 anQueue[RTREE_MAX_DEPTH+1]; /* Number of queued entries by iLevel */ +static const char * const jsonType[] = { + "null", "true", "false", "integer", "real", "text", "array", "object" }; -/* Return the Rtree of a RtreeCursor */ -#define RTREE_OF_CURSOR(X) ((Rtree*)((X)->base.pVtab)) - -/* -** A coordinate can be either a floating point number or a integer. All -** coordinates within a single R-Tree are always of the same time. +/* Bit values for the JsonNode.jnFlag field */ -union RtreeCoord { - RtreeValue f; /* Floating point value */ - int i; /* Integer value */ - u32 u; /* Unsigned for byte-order conversions */ -}; +#define JNODE_RAW 0x01 /* Content is raw, not JSON encoded */ +#define JNODE_ESCAPE 0x02 /* Content is text with \ escapes */ +#define JNODE_REMOVE 0x04 /* Do not output */ +#define JNODE_REPLACE 0x08 /* Replace with JsonNode.u.iReplace */ +#define JNODE_PATCH 0x10 /* Patch with JsonNode.u.pPatch */ +#define JNODE_APPEND 0x20 /* More ARRAY/OBJECT entries at u.iAppend */ +#define JNODE_LABEL 0x40 /* Is a label of an object */ -/* -** The argument is an RtreeCoord. Return the value stored within the RtreeCoord -** formatted as a RtreeDValue (double or int64). This macro assumes that local -** variable pRtree points to the Rtree structure associated with the -** RtreeCoord. -*/ -#ifdef SQLITE_RTREE_INT_ONLY -# define DCOORD(coord) ((RtreeDValue)coord.i) -#else -# define DCOORD(coord) ( \ - (pRtree->eCoordType==RTREE_COORD_REAL32) ? \ - ((double)coord.f) : \ - ((double)coord.i) \ - ) -#endif -/* -** A search constraint. +/* A single node of parsed JSON */ -struct RtreeConstraint { - int iCoord; /* Index of constrained coordinate */ - int op; /* Constraining operation */ +struct JsonNode { + u8 eType; /* One of the JSON_ type values */ + u8 jnFlags; /* JNODE flags */ + u32 n; /* Bytes of content, or number of sub-nodes */ union { - RtreeDValue rValue; /* Constraint value. */ - int (*xGeom)(sqlite3_rtree_geometry*,int,RtreeDValue*,int*); - int (*xQueryFunc)(sqlite3_rtree_query_info*); + const char *zJContent; /* Content for INT, REAL, and STRING */ + u32 iAppend; /* More terms for ARRAY and OBJECT */ + u32 iKey; /* Key for ARRAY objects in json_tree() */ + u32 iReplace; /* Replacement content for JNODE_REPLACE */ + JsonNode *pPatch; /* Node chain of patch for JNODE_PATCH */ } u; - sqlite3_rtree_query_info *pInfo; /* xGeom and xQueryFunc argument */ -}; - -/* Possible values for RtreeConstraint.op */ -#define RTREE_EQ 0x41 /* A */ -#define RTREE_LE 0x42 /* B */ -#define RTREE_LT 0x43 /* C */ -#define RTREE_GE 0x44 /* D */ -#define RTREE_GT 0x45 /* E */ -#define RTREE_MATCH 0x46 /* F: Old-style sqlite3_rtree_geometry_callback() */ -#define RTREE_QUERY 0x47 /* G: New-style sqlite3_rtree_query_callback() */ - - -/* -** An rtree structure node. -*/ -struct RtreeNode { - RtreeNode *pParent; /* Parent node */ - i64 iNode; /* The node number */ - int nRef; /* Number of references to this node */ - int isDirty; /* True if the node needs to be written to disk */ - u8 *zData; /* Content of the node, as should be on disk */ - RtreeNode *pNext; /* Next node in this hash collision chain */ -}; - -/* Return the number of cells in a node */ -#define NCELL(pNode) readInt16(&(pNode)->zData[2]) - -/* -** A single cell from a node, deserialized -*/ -struct RtreeCell { - i64 iRowid; /* Node or entry ID */ - RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2]; /* Bounding box coordinates */ -}; - - -/* -** This object becomes the sqlite3_user_data() for the SQL functions -** that are created by sqlite3_rtree_geometry_callback() and -** sqlite3_rtree_query_callback() and which appear on the right of MATCH -** operators in order to constrain a search. -** -** xGeom and xQueryFunc are the callback functions. Exactly one of -** xGeom and xQueryFunc fields is non-NULL, depending on whether the -** SQL function was created using sqlite3_rtree_geometry_callback() or -** sqlite3_rtree_query_callback(). -** -** This object is deleted automatically by the destructor mechanism in -** sqlite3_create_function_v2(). -*/ -struct RtreeGeomCallback { - int (*xGeom)(sqlite3_rtree_geometry*, int, RtreeDValue*, int*); - int (*xQueryFunc)(sqlite3_rtree_query_info*); - void (*xDestructor)(void*); - void *pContext; }; -/* -** An instance of this structure (in the form of a BLOB) is returned by -** the SQL functions that sqlite3_rtree_geometry_callback() and -** sqlite3_rtree_query_callback() create, and is read as the right-hand -** operand to the MATCH operator of an R-Tree. +/* A completely parsed JSON string */ -struct RtreeMatchArg { - u32 iSize; /* Size of this object */ - RtreeGeomCallback cb; /* Info about the callback functions */ - int nParam; /* Number of parameters to the SQL function */ - sqlite3_value **apSqlParam; /* Original SQL parameter values */ - RtreeDValue aParam[1]; /* Values for parameters to the SQL function */ +struct JsonParse { + u32 nNode; /* Number of slots of aNode[] used */ + u32 nAlloc; /* Number of slots of aNode[] allocated */ + JsonNode *aNode; /* Array of nodes containing the parse */ + const char *zJson; /* Original JSON string */ + u32 *aUp; /* Index of parent of each node */ + u8 oom; /* Set to true if out of memory */ + u8 nErr; /* Number of errors seen */ + u16 iDepth; /* Nesting depth */ + int nJson; /* Length of the zJson string in bytes */ + u32 iHold; /* Replace cache line with the lowest iHold value */ }; -#ifndef MAX -# define MAX(x,y) ((x) < (y) ? (y) : (x)) -#endif -#ifndef MIN -# define MIN(x,y) ((x) > (y) ? (y) : (x)) -#endif - -/* What version of GCC is being used. 0 means GCC is not being used . -** Note that the GCC_VERSION macro will also be set correctly when using -** clang, since clang works hard to be gcc compatible. So the gcc -** optimizations will also work when compiling with clang. -*/ -#ifndef GCC_VERSION -#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC) -# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) -#else -# define GCC_VERSION 0 -#endif -#endif - -/* The testcase() macro should already be defined in the amalgamation. If -** it is not, make it a no-op. -*/ -#ifndef SQLITE_AMALGAMATION -# define testcase(X) -#endif - /* -** Macros to determine whether the machine is big or little endian, -** and whether or not that determination is run-time or compile-time. +** Maximum nesting depth of JSON for this implementation. ** -** For best performance, an attempt is made to guess at the byte-order -** using C-preprocessor macros. If that is unsuccessful, or if -** -DSQLITE_RUNTIME_BYTEORDER=1 is set, then byte-order is determined -** at run-time. +** This limit is needed to avoid a stack overflow in the recursive +** descent parser. A depth of 2000 is far deeper than any sane JSON +** should go. */ -#ifndef SQLITE_BYTEORDER -#if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ - defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ - defined(__arm__) -# define SQLITE_BYTEORDER 1234 -#elif defined(sparc) || defined(__ppc__) -# define SQLITE_BYTEORDER 4321 -#else -# define SQLITE_BYTEORDER 0 /* 0 means "unknown at compile-time" */ -#endif -#endif - +#define JSON_MAX_DEPTH 2000 -/* What version of MSVC is being used. 0 means MSVC is not being used */ -#ifndef MSVC_VERSION -#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC) -# define MSVC_VERSION _MSC_VER -#else -# define MSVC_VERSION 0 -#endif -#endif +/************************************************************************** +** Utility routines for dealing with JsonString objects +**************************************************************************/ -/* -** Functions to deserialize a 16 bit integer, 32 bit real number and -** 64 bit integer. The deserialized value is returned. +/* Set the JsonString object to an empty string */ -static int readInt16(u8 *p){ - return (p[0]<<8) + p[1]; -} -static void readCoord(u8 *p, RtreeCoord *pCoord){ - assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */ -#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 - pCoord->u = _byteswap_ulong(*(u32*)p); -#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 - pCoord->u = __builtin_bswap32(*(u32*)p); -#elif SQLITE_BYTEORDER==4321 - pCoord->u = *(u32*)p; -#else - pCoord->u = ( - (((u32)p[0]) << 24) + - (((u32)p[1]) << 16) + - (((u32)p[2]) << 8) + - (((u32)p[3]) << 0) - ); -#endif -} -static i64 readInt64(u8 *p){ -#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 - u64 x; - memcpy(&x, p, 8); - return (i64)_byteswap_uint64(x); -#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 - u64 x; - memcpy(&x, p, 8); - return (i64)__builtin_bswap64(x); -#elif SQLITE_BYTEORDER==4321 - i64 x; - memcpy(&x, p, 8); - return x; -#else - return (i64)( - (((u64)p[0]) << 56) + - (((u64)p[1]) << 48) + - (((u64)p[2]) << 40) + - (((u64)p[3]) << 32) + - (((u64)p[4]) << 24) + - (((u64)p[5]) << 16) + - (((u64)p[6]) << 8) + - (((u64)p[7]) << 0) - ); -#endif +static void jsonZero(JsonString *p){ + p->zBuf = p->zSpace; + p->nAlloc = sizeof(p->zSpace); + p->nUsed = 0; + p->bStatic = 1; } -/* -** Functions to serialize a 16 bit integer, 32 bit real number and -** 64 bit integer. The value returned is the number of bytes written -** to the argument buffer (always 2, 4 and 8 respectively). +/* Initialize the JsonString object */ -static void writeInt16(u8 *p, int i){ - p[0] = (i>> 8)&0xFF; - p[1] = (i>> 0)&0xFF; -} -static int writeCoord(u8 *p, RtreeCoord *pCoord){ - u32 i; - assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */ - assert( sizeof(RtreeCoord)==4 ); - assert( sizeof(u32)==4 ); -#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 - i = __builtin_bswap32(pCoord->u); - memcpy(p, &i, 4); -#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 - i = _byteswap_ulong(pCoord->u); - memcpy(p, &i, 4); -#elif SQLITE_BYTEORDER==4321 - i = pCoord->u; - memcpy(p, &i, 4); -#else - i = pCoord->u; - p[0] = (i>>24)&0xFF; - p[1] = (i>>16)&0xFF; - p[2] = (i>> 8)&0xFF; - p[3] = (i>> 0)&0xFF; -#endif - return 4; -} -static int writeInt64(u8 *p, i64 i){ -#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 - i = (i64)__builtin_bswap64((u64)i); - memcpy(p, &i, 8); -#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 - i = (i64)_byteswap_uint64((u64)i); - memcpy(p, &i, 8); -#elif SQLITE_BYTEORDER==4321 - memcpy(p, &i, 8); -#else - p[0] = (i>>56)&0xFF; - p[1] = (i>>48)&0xFF; - p[2] = (i>>40)&0xFF; - p[3] = (i>>32)&0xFF; - p[4] = (i>>24)&0xFF; - p[5] = (i>>16)&0xFF; - p[6] = (i>> 8)&0xFF; - p[7] = (i>> 0)&0xFF; -#endif - return 8; +static void jsonInit(JsonString *p, sqlite3_context *pCtx){ + p->pCtx = pCtx; + p->bErr = 0; + jsonZero(p); } -/* -** Increment the reference count of node p. + +/* Free all allocated memory and reset the JsonString object back to its +** initial state. */ -static void nodeReference(RtreeNode *p){ - if( p ){ - assert( p->nRef>0 ); - p->nRef++; - } +static void jsonReset(JsonString *p){ + if( !p->bStatic ) sqlite3_free(p->zBuf); + jsonZero(p); } -/* -** Clear the content of node p (set all bytes to 0x00). + +/* Report an out-of-memory (OOM) condition */ -static void nodeZero(Rtree *pRtree, RtreeNode *p){ - memset(&p->zData[2], 0, pRtree->iNodeSize-2); - p->isDirty = 1; +static void jsonOom(JsonString *p){ + p->bErr = 1; + sqlite3_result_error_nomem(p->pCtx); + jsonReset(p); } -/* -** Given a node number iNode, return the corresponding key to use -** in the Rtree.aHash table. +/* Enlarge pJson->zBuf so that it can hold at least N more bytes. +** Return zero on success. Return non-zero on an OOM error */ -static int nodeHash(i64 iNode){ - return iNode % HASHSIZE; +static int jsonGrow(JsonString *p, u32 N){ + u64 nTotal = NnAlloc ? p->nAlloc*2 : p->nAlloc+N+10; + char *zNew; + if( p->bStatic ){ + if( p->bErr ) return 1; + zNew = sqlite3_malloc64(nTotal); + if( zNew==0 ){ + jsonOom(p); + return SQLITE_NOMEM; + } + memcpy(zNew, p->zBuf, (size_t)p->nUsed); + p->zBuf = zNew; + p->bStatic = 0; + }else{ + zNew = sqlite3_realloc64(p->zBuf, nTotal); + if( zNew==0 ){ + jsonOom(p); + return SQLITE_NOMEM; + } + p->zBuf = zNew; + } + p->nAlloc = nTotal; + return SQLITE_OK; } -/* -** Search the node hash table for node iNode. If found, return a pointer -** to it. Otherwise, return 0. +/* Append N bytes from zIn onto the end of the JsonString string. */ -static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){ - RtreeNode *p; - for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext); - return p; +static void jsonAppendRaw(JsonString *p, const char *zIn, u32 N){ + if( (N+p->nUsed >= p->nAlloc) && jsonGrow(p,N)!=0 ) return; + memcpy(p->zBuf+p->nUsed, zIn, N); + p->nUsed += N; } -/* -** Add node pNode to the node hash table. +/* Append formatted text (not to exceed N bytes) to the JsonString. */ -static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){ - int iHash; - assert( pNode->pNext==0 ); - iHash = nodeHash(pNode->iNode); - pNode->pNext = pRtree->aHash[iHash]; - pRtree->aHash[iHash] = pNode; +static void jsonPrintf(int N, JsonString *p, const char *zFormat, ...){ + va_list ap; + if( (p->nUsed + N >= p->nAlloc) && jsonGrow(p, N) ) return; + va_start(ap, zFormat); + sqlite3_vsnprintf(N, p->zBuf+p->nUsed, zFormat, ap); + va_end(ap); + p->nUsed += (int)strlen(p->zBuf+p->nUsed); } -/* -** Remove node pNode from the node hash table. +/* Append a single character */ -static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){ - RtreeNode **pp; - if( pNode->iNode!=0 ){ - pp = &pRtree->aHash[nodeHash(pNode->iNode)]; - for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); } - *pp = pNode->pNext; - pNode->pNext = 0; - } +static void jsonAppendChar(JsonString *p, char c){ + if( p->nUsed>=p->nAlloc && jsonGrow(p,1)!=0 ) return; + p->zBuf[p->nUsed++] = c; } -/* -** Allocate and return new r-tree node. Initially, (RtreeNode.iNode==0), -** indicating that node has not yet been assigned a node number. It is -** assigned a node number when nodeWrite() is called to write the -** node contents out to the database. +/* Append a comma separator to the output buffer, if the previous +** character is not '[' or '{'. */ -static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){ - RtreeNode *pNode; - pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize); - if( pNode ){ - memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize); - pNode->zData = (u8 *)&pNode[1]; - pNode->nRef = 1; - pRtree->nNodeRef++; - pNode->pParent = pParent; - pNode->isDirty = 1; - nodeReference(pParent); - } - return pNode; +static void jsonAppendSeparator(JsonString *p){ + char c; + if( p->nUsed==0 ) return; + c = p->zBuf[p->nUsed-1]; + if( c!='[' && c!='{' ) jsonAppendChar(p, ','); } -/* -** Clear the Rtree.pNodeBlob object +/* Append the N-byte string in zIn to the end of the JsonString string +** under construction. Enclose the string in "..." and escape +** any double-quotes or backslash characters contained within the +** string. */ -static void nodeBlobReset(Rtree *pRtree){ - if( pRtree->pNodeBlob && pRtree->inWrTrans==0 && pRtree->nCursor==0 ){ - sqlite3_blob *pBlob = pRtree->pNodeBlob; - pRtree->pNodeBlob = 0; - sqlite3_blob_close(pBlob); +static void jsonAppendString(JsonString *p, const char *zIn, u32 N){ + u32 i; + if( (N+p->nUsed+2 >= p->nAlloc) && jsonGrow(p,N+2)!=0 ) return; + p->zBuf[p->nUsed++] = '"'; + for(i=0; inUsed+N+3-i > p->nAlloc) && jsonGrow(p,N+3-i)!=0 ) return; + p->zBuf[p->nUsed++] = '\\'; + }else if( c<=0x1f ){ + static const char aSpecial[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + assert( sizeof(aSpecial)==32 ); + assert( aSpecial['\b']=='b' ); + assert( aSpecial['\f']=='f' ); + assert( aSpecial['\n']=='n' ); + assert( aSpecial['\r']=='r' ); + assert( aSpecial['\t']=='t' ); + if( aSpecial[c] ){ + c = aSpecial[c]; + goto json_simple_escape; + } + if( (p->nUsed+N+7+i > p->nAlloc) && jsonGrow(p,N+7-i)!=0 ) return; + p->zBuf[p->nUsed++] = '\\'; + p->zBuf[p->nUsed++] = 'u'; + p->zBuf[p->nUsed++] = '0'; + p->zBuf[p->nUsed++] = '0'; + p->zBuf[p->nUsed++] = '0' + (c>>4); + c = "0123456789abcdef"[c&0xf]; + } + p->zBuf[p->nUsed++] = c; } + p->zBuf[p->nUsed++] = '"'; + assert( p->nUsednAlloc ); } /* -** Obtain a reference to an r-tree node. +** Append a function parameter value to the JSON string under +** construction. */ -static int nodeAcquire( - Rtree *pRtree, /* R-tree structure */ - i64 iNode, /* Node number to load */ - RtreeNode *pParent, /* Either the parent node or NULL */ - RtreeNode **ppNode /* OUT: Acquired node */ +static void jsonAppendValue( + JsonString *p, /* Append to this JSON string */ + sqlite3_value *pValue /* Value to append */ ){ - int rc = SQLITE_OK; - RtreeNode *pNode = 0; - - /* Check if the requested node is already in the hash table. If so, - ** increase its reference count and return it. - */ - if( (pNode = nodeHashLookup(pRtree, iNode))!=0 ){ - assert( !pParent || !pNode->pParent || pNode->pParent==pParent ); - if( pParent && !pNode->pParent ){ - pParent->nRef++; - pNode->pParent = pParent; + switch( sqlite3_value_type(pValue) ){ + case SQLITE_NULL: { + jsonAppendRaw(p, "null", 4); + break; } - pNode->nRef++; - *ppNode = pNode; - return SQLITE_OK; - } - - if( pRtree->pNodeBlob ){ - sqlite3_blob *pBlob = pRtree->pNodeBlob; - pRtree->pNodeBlob = 0; - rc = sqlite3_blob_reopen(pBlob, iNode); - pRtree->pNodeBlob = pBlob; - if( rc ){ - nodeBlobReset(pRtree); - if( rc==SQLITE_NOMEM ) return SQLITE_NOMEM; + case SQLITE_INTEGER: + case SQLITE_FLOAT: { + const char *z = (const char*)sqlite3_value_text(pValue); + u32 n = (u32)sqlite3_value_bytes(pValue); + jsonAppendRaw(p, z, n); + break; } - } - if( pRtree->pNodeBlob==0 ){ - char *zTab = sqlite3_mprintf("%s_node", pRtree->zName); - if( zTab==0 ) return SQLITE_NOMEM; - rc = sqlite3_blob_open(pRtree->db, pRtree->zDb, zTab, "data", iNode, 0, - &pRtree->pNodeBlob); - sqlite3_free(zTab); - } - if( rc ){ - nodeBlobReset(pRtree); - *ppNode = 0; - /* If unable to open an sqlite3_blob on the desired row, that can only - ** be because the shadow tables hold erroneous data. */ - if( rc==SQLITE_ERROR ) rc = SQLITE_CORRUPT_VTAB; - }else if( pRtree->iNodeSize==sqlite3_blob_bytes(pRtree->pNodeBlob) ){ - pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize); - if( !pNode ){ - rc = SQLITE_NOMEM; - }else{ - pNode->pParent = pParent; - pNode->zData = (u8 *)&pNode[1]; - pNode->nRef = 1; - pRtree->nNodeRef++; - pNode->iNode = iNode; - pNode->isDirty = 0; - pNode->pNext = 0; - rc = sqlite3_blob_read(pRtree->pNodeBlob, pNode->zData, - pRtree->iNodeSize, 0); - nodeReference(pParent); + case SQLITE_TEXT: { + const char *z = (const char*)sqlite3_value_text(pValue); + u32 n = (u32)sqlite3_value_bytes(pValue); + if( sqlite3_value_subtype(pValue)==JSON_SUBTYPE ){ + jsonAppendRaw(p, z, n); + }else{ + jsonAppendString(p, z, n); + } + break; } - } - - /* If the root node was just loaded, set pRtree->iDepth to the height - ** of the r-tree structure. A height of zero means all data is stored on - ** the root node. A height of one means the children of the root node - ** are the leaves, and so on. If the depth as specified on the root node - ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt. - */ - if( pNode && iNode==1 ){ - pRtree->iDepth = readInt16(pNode->zData); - if( pRtree->iDepth>RTREE_MAX_DEPTH ){ - rc = SQLITE_CORRUPT_VTAB; + default: { + if( p->bErr==0 ){ + sqlite3_result_error(p->pCtx, "JSON cannot hold BLOB values", -1); + p->bErr = 2; + jsonReset(p); + } + break; } } +} - /* If no error has occurred so far, check if the "number of entries" - ** field on the node is too large. If so, set the return code to - ** SQLITE_CORRUPT_VTAB. - */ - if( pNode && rc==SQLITE_OK ){ - if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){ - rc = SQLITE_CORRUPT_VTAB; - } - } - if( rc==SQLITE_OK ){ - if( pNode!=0 ){ - nodeHashInsert(pRtree, pNode); - }else{ - rc = SQLITE_CORRUPT_VTAB; - } - *ppNode = pNode; - }else{ - if( pNode ){ - pRtree->nNodeRef--; - sqlite3_free(pNode); - } - *ppNode = 0; +/* Make the JSON in p the result of the SQL function. +*/ +static void jsonResult(JsonString *p){ + if( p->bErr==0 ){ + sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed, + p->bStatic ? SQLITE_TRANSIENT : sqlite3_free, + SQLITE_UTF8); + jsonZero(p); } - - return rc; + assert( p->bStatic ); } +/************************************************************************** +** Utility routines for dealing with JsonNode and JsonParse objects +**************************************************************************/ + /* -** Overwrite cell iCell of node pNode with the contents of pCell. +** Return the number of consecutive JsonNode slots need to represent +** the parsed JSON at pNode. The minimum answer is 1. For ARRAY and +** OBJECT types, the number might be larger. +** +** Appended elements are not counted. The value returned is the number +** by which the JsonNode counter should increment in order to go to the +** next peer value. */ -static void nodeOverwriteCell( - Rtree *pRtree, /* The overall R-Tree */ - RtreeNode *pNode, /* The node into which the cell is to be written */ - RtreeCell *pCell, /* The cell to write */ - int iCell /* Index into pNode into which pCell is written */ -){ - int ii; - u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; - p += writeInt64(p, pCell->iRowid); - for(ii=0; iinDim2; ii++){ - p += writeCoord(p, &pCell->aCoord[ii]); - } - pNode->isDirty = 1; +static u32 jsonNodeSize(JsonNode *pNode){ + return pNode->eType>=JSON_ARRAY ? pNode->n+1 : 1; } /* -** Remove the cell with index iCell from node pNode. +** Reclaim all memory allocated by a JsonParse object. But do not +** delete the JsonParse object itself. */ -static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){ - u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; - u8 *pSrc = &pDst[pRtree->nBytesPerCell]; - int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell; - memmove(pDst, pSrc, nByte); - writeInt16(&pNode->zData[2], NCELL(pNode)-1); - pNode->isDirty = 1; +static void jsonParseReset(JsonParse *pParse){ + sqlite3_free(pParse->aNode); + pParse->aNode = 0; + pParse->nNode = 0; + pParse->nAlloc = 0; + sqlite3_free(pParse->aUp); + pParse->aUp = 0; } /* -** Insert the contents of cell pCell into node pNode. If the insert -** is successful, return SQLITE_OK. -** -** If there is not enough free space in pNode, return SQLITE_FULL. +** Free a JsonParse object that was obtained from sqlite3_malloc(). */ -static int nodeInsertCell( - Rtree *pRtree, /* The overall R-Tree */ - RtreeNode *pNode, /* Write new cell into this node */ - RtreeCell *pCell /* The cell to be inserted */ -){ - int nCell; /* Current number of cells in pNode */ - int nMaxCell; /* Maximum number of cells for pNode */ - - nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell; - nCell = NCELL(pNode); - - assert( nCell<=nMaxCell ); - if( nCellzData[2], nCell+1); - pNode->isDirty = 1; - } - - return (nCell==nMaxCell); +static void jsonParseFree(JsonParse *pParse){ + jsonParseReset(pParse); + sqlite3_free(pParse); } /* -** If the node is dirty, write it out to the database. +** Convert the JsonNode pNode into a pure JSON string and +** append to pOut. Subsubstructure is also included. Return +** the number of JsonNode objects that are encoded. */ -static int nodeWrite(Rtree *pRtree, RtreeNode *pNode){ - int rc = SQLITE_OK; - if( pNode->isDirty ){ - sqlite3_stmt *p = pRtree->pWriteNode; - if( pNode->iNode ){ - sqlite3_bind_int64(p, 1, pNode->iNode); - }else{ - sqlite3_bind_null(p, 1); - } - sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC); - sqlite3_step(p); - pNode->isDirty = 0; - rc = sqlite3_reset(p); - sqlite3_bind_null(p, 2); - if( pNode->iNode==0 && rc==SQLITE_OK ){ - pNode->iNode = sqlite3_last_insert_rowid(pRtree->db); - nodeHashInsert(pRtree, pNode); +static void jsonRenderNode( + JsonNode *pNode, /* The node to render */ + JsonString *pOut, /* Write JSON here */ + sqlite3_value **aReplace /* Replacement values */ +){ + if( pNode->jnFlags & (JNODE_REPLACE|JNODE_PATCH) ){ + if( pNode->jnFlags & JNODE_REPLACE ){ + jsonAppendValue(pOut, aReplace[pNode->u.iReplace]); + return; } + pNode = pNode->u.pPatch; } - return rc; -} - -/* -** Release a reference to a node. If the node is dirty and the reference -** count drops to zero, the node data is written to the database. -*/ -static int nodeRelease(Rtree *pRtree, RtreeNode *pNode){ - int rc = SQLITE_OK; - if( pNode ){ - assert( pNode->nRef>0 ); - assert( pRtree->nNodeRef>0 ); - pNode->nRef--; - if( pNode->nRef==0 ){ - pRtree->nNodeRef--; - if( pNode->iNode==1 ){ - pRtree->iDepth = -1; + switch( pNode->eType ){ + default: { + assert( pNode->eType==JSON_NULL ); + jsonAppendRaw(pOut, "null", 4); + break; + } + case JSON_TRUE: { + jsonAppendRaw(pOut, "true", 4); + break; + } + case JSON_FALSE: { + jsonAppendRaw(pOut, "false", 5); + break; + } + case JSON_STRING: { + if( pNode->jnFlags & JNODE_RAW ){ + jsonAppendString(pOut, pNode->u.zJContent, pNode->n); + break; } - if( pNode->pParent ){ - rc = nodeRelease(pRtree, pNode->pParent); + /* Fall through into the next case */ + } + case JSON_REAL: + case JSON_INT: { + jsonAppendRaw(pOut, pNode->u.zJContent, pNode->n); + break; + } + case JSON_ARRAY: { + u32 j = 1; + jsonAppendChar(pOut, '['); + for(;;){ + while( j<=pNode->n ){ + if( (pNode[j].jnFlags & JNODE_REMOVE)==0 ){ + jsonAppendSeparator(pOut); + jsonRenderNode(&pNode[j], pOut, aReplace); + } + j += jsonNodeSize(&pNode[j]); + } + if( (pNode->jnFlags & JNODE_APPEND)==0 ) break; + pNode = &pNode[pNode->u.iAppend]; + j = 1; } - if( rc==SQLITE_OK ){ - rc = nodeWrite(pRtree, pNode); + jsonAppendChar(pOut, ']'); + break; + } + case JSON_OBJECT: { + u32 j = 1; + jsonAppendChar(pOut, '{'); + for(;;){ + while( j<=pNode->n ){ + if( (pNode[j+1].jnFlags & JNODE_REMOVE)==0 ){ + jsonAppendSeparator(pOut); + jsonRenderNode(&pNode[j], pOut, aReplace); + jsonAppendChar(pOut, ':'); + jsonRenderNode(&pNode[j+1], pOut, aReplace); + } + j += 1 + jsonNodeSize(&pNode[j+1]); + } + if( (pNode->jnFlags & JNODE_APPEND)==0 ) break; + pNode = &pNode[pNode->u.iAppend]; + j = 1; } - nodeHashDelete(pRtree, pNode); - sqlite3_free(pNode); + jsonAppendChar(pOut, '}'); + break; } } - return rc; } /* -** Return the 64-bit integer value associated with cell iCell of -** node pNode. If pNode is a leaf node, this is a rowid. If it is -** an internal node, then the 64-bit integer is a child page number. +** Return a JsonNode and all its descendents as a JSON string. */ -static i64 nodeGetRowid( - Rtree *pRtree, /* The overall R-Tree */ - RtreeNode *pNode, /* The node from which to extract the ID */ - int iCell /* The cell index from which to extract the ID */ +static void jsonReturnJson( + JsonNode *pNode, /* Node to return */ + sqlite3_context *pCtx, /* Return value for this function */ + sqlite3_value **aReplace /* Array of replacement values */ ){ - assert( iCellzData[4 + pRtree->nBytesPerCell*iCell]); + JsonString s; + jsonInit(&s, pCtx); + jsonRenderNode(pNode, &s, aReplace); + jsonResult(&s); + sqlite3_result_subtype(pCtx, JSON_SUBTYPE); } /* -** Return coordinate iCoord from cell iCell in node pNode. +** Make the JsonNode the return value of the function. */ -static void nodeGetCoord( - Rtree *pRtree, /* The overall R-Tree */ - RtreeNode *pNode, /* The node from which to extract a coordinate */ - int iCell, /* The index of the cell within the node */ - int iCoord, /* Which coordinate to extract */ - RtreeCoord *pCoord /* OUT: Space to write result to */ +static void jsonReturn( + JsonNode *pNode, /* Node to return */ + sqlite3_context *pCtx, /* Return value for this function */ + sqlite3_value **aReplace /* Array of replacement values */ ){ - readCoord(&pNode->zData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord); -} - -/* -** Deserialize cell iCell of node pNode. Populate the structure pointed -** to by pCell with the results. -*/ -static void nodeGetCell( - Rtree *pRtree, /* The overall R-Tree */ - RtreeNode *pNode, /* The node containing the cell to be read */ - int iCell, /* Index of the cell within the node */ - RtreeCell *pCell /* OUT: Write the cell contents here */ -){ - u8 *pData; - RtreeCoord *pCoord; - int ii = 0; - pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell); - pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell); - pCoord = pCell->aCoord; - do{ - readCoord(pData, &pCoord[ii]); - readCoord(pData+4, &pCoord[ii+1]); - pData += 8; - ii += 2; - }while( iinDim2 ); + switch( pNode->eType ){ + default: { + assert( pNode->eType==JSON_NULL ); + sqlite3_result_null(pCtx); + break; + } + case JSON_TRUE: { + sqlite3_result_int(pCtx, 1); + break; + } + case JSON_FALSE: { + sqlite3_result_int(pCtx, 0); + break; + } + case JSON_INT: { + sqlite3_int64 i = 0; + const char *z = pNode->u.zJContent; + if( z[0]=='-' ){ z++; } + while( z[0]>='0' && z[0]<='9' ){ + unsigned v = *(z++) - '0'; + if( i>=LARGEST_INT64/10 ){ + if( i>LARGEST_INT64/10 ) goto int_as_real; + if( z[0]>='0' && z[0]<='9' ) goto int_as_real; + if( v==9 ) goto int_as_real; + if( v==8 ){ + if( pNode->u.zJContent[0]=='-' ){ + sqlite3_result_int64(pCtx, SMALLEST_INT64); + goto int_done; + }else{ + goto int_as_real; + } + } + } + i = i*10 + v; + } + if( pNode->u.zJContent[0]=='-' ){ i = -i; } + sqlite3_result_int64(pCtx, i); + int_done: + break; + int_as_real: /* fall through to real */; + } + case JSON_REAL: { + double r; +#ifdef SQLITE_AMALGAMATION + const char *z = pNode->u.zJContent; + sqlite3AtoF(z, &r, sqlite3Strlen30(z), SQLITE_UTF8); +#else + r = strtod(pNode->u.zJContent, 0); +#endif + sqlite3_result_double(pCtx, r); + break; + } + case JSON_STRING: { +#if 0 /* Never happens because JNODE_RAW is only set by json_set(), + ** json_insert() and json_replace() and those routines do not + ** call jsonReturn() */ + if( pNode->jnFlags & JNODE_RAW ){ + sqlite3_result_text(pCtx, pNode->u.zJContent, pNode->n, + SQLITE_TRANSIENT); + }else +#endif + assert( (pNode->jnFlags & JNODE_RAW)==0 ); + if( (pNode->jnFlags & JNODE_ESCAPE)==0 ){ + /* JSON formatted without any backslash-escapes */ + sqlite3_result_text(pCtx, pNode->u.zJContent+1, pNode->n-2, + SQLITE_TRANSIENT); + }else{ + /* Translate JSON formatted string into raw text */ + u32 i; + u32 n = pNode->n; + const char *z = pNode->u.zJContent; + char *zOut; + u32 j; + zOut = sqlite3_malloc( n+1 ); + if( zOut==0 ){ + sqlite3_result_error_nomem(pCtx); + break; + } + for(i=1, j=0; i>6)); + zOut[j++] = 0x80 | (v&0x3f); + }else{ + zOut[j++] = (char)(0xe0 | (v>>12)); + zOut[j++] = 0x80 | ((v>>6)&0x3f); + zOut[j++] = 0x80 | (v&0x3f); + } + }else{ + if( c=='b' ){ + c = '\b'; + }else if( c=='f' ){ + c = '\f'; + }else if( c=='n' ){ + c = '\n'; + }else if( c=='r' ){ + c = '\r'; + }else if( c=='t' ){ + c = '\t'; + } + zOut[j++] = c; + } + } + } + zOut[j] = 0; + sqlite3_result_text(pCtx, zOut, j, sqlite3_free); + } + break; + } + case JSON_ARRAY: + case JSON_OBJECT: { + jsonReturnJson(pNode, pCtx, aReplace); + break; + } + } } +/* Forward reference */ +static int jsonParseAddNode(JsonParse*,u32,u32,const char*); -/* Forward declaration for the function that does the work of -** the virtual table module xCreate() and xConnect() methods. +/* +** A macro to hint to the compiler that a function should not be +** inlined. */ -static int rtreeInit( - sqlite3 *, void *, int, const char *const*, sqlite3_vtab **, char **, int -); +#if defined(__GNUC__) +# define JSON_NOINLINE __attribute__((noinline)) +#elif defined(_MSC_VER) && _MSC_VER>=1310 +# define JSON_NOINLINE __declspec(noinline) +#else +# define JSON_NOINLINE +#endif -/* -** Rtree virtual table module xCreate method. -*/ -static int rtreeCreate( - sqlite3 *db, - void *pAux, - int argc, const char *const*argv, - sqlite3_vtab **ppVtab, - char **pzErr -){ - return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 1); -} -/* -** Rtree virtual table module xConnect method. -*/ -static int rtreeConnect( - sqlite3 *db, - void *pAux, - int argc, const char *const*argv, - sqlite3_vtab **ppVtab, - char **pzErr +static JSON_NOINLINE int jsonParseAddNodeExpand( + JsonParse *pParse, /* Append the node to this object */ + u32 eType, /* Node type */ + u32 n, /* Content size or sub-node count */ + const char *zContent /* Content */ ){ - return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 0); -} - -/* -** Increment the r-tree reference count. -*/ -static void rtreeReference(Rtree *pRtree){ - pRtree->nBusy++; + u32 nNew; + JsonNode *pNew; + assert( pParse->nNode>=pParse->nAlloc ); + if( pParse->oom ) return -1; + nNew = pParse->nAlloc*2 + 10; + pNew = sqlite3_realloc(pParse->aNode, sizeof(JsonNode)*nNew); + if( pNew==0 ){ + pParse->oom = 1; + return -1; + } + pParse->nAlloc = nNew; + pParse->aNode = pNew; + assert( pParse->nNodenAlloc ); + return jsonParseAddNode(pParse, eType, n, zContent); } /* -** Decrement the r-tree reference count. When the reference count reaches -** zero the structure is deleted. +** Create a new JsonNode instance based on the arguments and append that +** instance to the JsonParse. Return the index in pParse->aNode[] of the +** new node, or -1 if a memory allocation fails. */ -static void rtreeRelease(Rtree *pRtree){ - pRtree->nBusy--; - if( pRtree->nBusy==0 ){ - pRtree->inWrTrans = 0; - assert( pRtree->nCursor==0 ); - nodeBlobReset(pRtree); - assert( pRtree->nNodeRef==0 ); - sqlite3_finalize(pRtree->pWriteNode); - sqlite3_finalize(pRtree->pDeleteNode); - sqlite3_finalize(pRtree->pReadRowid); - sqlite3_finalize(pRtree->pWriteRowid); - sqlite3_finalize(pRtree->pDeleteRowid); - sqlite3_finalize(pRtree->pReadParent); - sqlite3_finalize(pRtree->pWriteParent); - sqlite3_finalize(pRtree->pDeleteParent); - sqlite3_finalize(pRtree->pWriteAux); - sqlite3_free(pRtree->zReadAuxSql); - sqlite3_free(pRtree); +static int jsonParseAddNode( + JsonParse *pParse, /* Append the node to this object */ + u32 eType, /* Node type */ + u32 n, /* Content size or sub-node count */ + const char *zContent /* Content */ +){ + JsonNode *p; + if( pParse->nNode>=pParse->nAlloc ){ + return jsonParseAddNodeExpand(pParse, eType, n, zContent); } + p = &pParse->aNode[pParse->nNode]; + p->eType = (u8)eType; + p->jnFlags = 0; + p->n = n; + p->u.zJContent = zContent; + return pParse->nNode++; } -/* -** Rtree virtual table module xDisconnect method. +/* +** Return true if z[] begins with 4 (or more) hexadecimal digits */ -static int rtreeDisconnect(sqlite3_vtab *pVtab){ - rtreeRelease((Rtree *)pVtab); - return SQLITE_OK; +static int jsonIs4Hex(const char *z){ + int i; + for(i=0; i<4; i++) if( !safe_isxdigit(z[i]) ) return 0; + return 1; } -/* -** Rtree virtual table module xDestroy method. +/* +** Parse a single JSON value which begins at pParse->zJson[i]. Return the +** index of the first character past the end of the value parsed. +** +** Return negative for a syntax error. Special cases: return -2 if the +** first non-whitespace character is '}' and return -3 if the first +** non-whitespace character is ']'. */ -static int rtreeDestroy(sqlite3_vtab *pVtab){ - Rtree *pRtree = (Rtree *)pVtab; - int rc; - char *zCreate = sqlite3_mprintf( - "DROP TABLE '%q'.'%q_node';" - "DROP TABLE '%q'.'%q_rowid';" - "DROP TABLE '%q'.'%q_parent';", - pRtree->zDb, pRtree->zName, - pRtree->zDb, pRtree->zName, - pRtree->zDb, pRtree->zName - ); - if( !zCreate ){ - rc = SQLITE_NOMEM; +static int jsonParseValue(JsonParse *pParse, u32 i){ + char c; + u32 j; + int iThis; + int x; + JsonNode *pNode; + const char *z = pParse->zJson; + while( safe_isspace(z[i]) ){ i++; } + if( (c = z[i])=='{' ){ + /* Parse object */ + iThis = jsonParseAddNode(pParse, JSON_OBJECT, 0, 0); + if( iThis<0 ) return -1; + for(j=i+1;;j++){ + while( safe_isspace(z[j]) ){ j++; } + if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1; + x = jsonParseValue(pParse, j); + if( x<0 ){ + pParse->iDepth--; + if( x==(-2) && pParse->nNode==(u32)iThis+1 ) return j+1; + return -1; + } + if( pParse->oom ) return -1; + pNode = &pParse->aNode[pParse->nNode-1]; + if( pNode->eType!=JSON_STRING ) return -1; + pNode->jnFlags |= JNODE_LABEL; + j = x; + while( safe_isspace(z[j]) ){ j++; } + if( z[j]!=':' ) return -1; + j++; + x = jsonParseValue(pParse, j); + pParse->iDepth--; + if( x<0 ) return -1; + j = x; + while( safe_isspace(z[j]) ){ j++; } + c = z[j]; + if( c==',' ) continue; + if( c!='}' ) return -1; + break; + } + pParse->aNode[iThis].n = pParse->nNode - (u32)iThis - 1; + return j+1; + }else if( c=='[' ){ + /* Parse array */ + iThis = jsonParseAddNode(pParse, JSON_ARRAY, 0, 0); + if( iThis<0 ) return -1; + for(j=i+1;;j++){ + while( safe_isspace(z[j]) ){ j++; } + if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1; + x = jsonParseValue(pParse, j); + pParse->iDepth--; + if( x<0 ){ + if( x==(-3) && pParse->nNode==(u32)iThis+1 ) return j+1; + return -1; + } + j = x; + while( safe_isspace(z[j]) ){ j++; } + c = z[j]; + if( c==',' ) continue; + if( c!=']' ) return -1; + break; + } + pParse->aNode[iThis].n = pParse->nNode - (u32)iThis - 1; + return j+1; + }else if( c=='"' ){ + /* Parse string */ + u8 jnFlags = 0; + j = i+1; + for(;;){ + c = z[j]; + if( (c & ~0x1f)==0 ){ + /* Control characters are not allowed in strings */ + return -1; + } + if( c=='\\' ){ + c = z[++j]; + if( c=='"' || c=='\\' || c=='/' || c=='b' || c=='f' + || c=='n' || c=='r' || c=='t' + || (c=='u' && jsonIs4Hex(z+j+1)) ){ + jnFlags = JNODE_ESCAPE; + }else{ + return -1; + } + }else if( c=='"' ){ + break; + } + j++; + } + jsonParseAddNode(pParse, JSON_STRING, j+1-i, &z[i]); + if( !pParse->oom ) pParse->aNode[pParse->nNode-1].jnFlags = jnFlags; + return j+1; + }else if( c=='n' + && strncmp(z+i,"null",4)==0 + && !safe_isalnum(z[i+4]) ){ + jsonParseAddNode(pParse, JSON_NULL, 0, 0); + return i+4; + }else if( c=='t' + && strncmp(z+i,"true",4)==0 + && !safe_isalnum(z[i+4]) ){ + jsonParseAddNode(pParse, JSON_TRUE, 0, 0); + return i+4; + }else if( c=='f' + && strncmp(z+i,"false",5)==0 + && !safe_isalnum(z[i+5]) ){ + jsonParseAddNode(pParse, JSON_FALSE, 0, 0); + return i+5; + }else if( c=='-' || (c>='0' && c<='9') ){ + /* Parse number */ + u8 seenDP = 0; + u8 seenE = 0; + assert( '-' < '0' ); + if( c<='0' ){ + j = c=='-' ? i+1 : i; + if( z[j]=='0' && z[j+1]>='0' && z[j+1]<='9' ) return -1; + } + j = i+1; + for(;; j++){ + c = z[j]; + if( c>='0' && c<='9' ) continue; + if( c=='.' ){ + if( z[j-1]=='-' ) return -1; + if( seenDP ) return -1; + seenDP = 1; + continue; + } + if( c=='e' || c=='E' ){ + if( z[j-1]<'0' ) return -1; + if( seenE ) return -1; + seenDP = seenE = 1; + c = z[j+1]; + if( c=='+' || c=='-' ){ + j++; + c = z[j+1]; + } + if( c<'0' || c>'9' ) return -1; + continue; + } + break; + } + if( z[j-1]<'0' ) return -1; + jsonParseAddNode(pParse, seenDP ? JSON_REAL : JSON_INT, + j - i, &z[i]); + return j; + }else if( c=='}' ){ + return -2; /* End of {...} */ + }else if( c==']' ){ + return -3; /* End of [...] */ + }else if( c==0 ){ + return 0; /* End of file */ }else{ - nodeBlobReset(pRtree); - rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0); - sqlite3_free(zCreate); - } - if( rc==SQLITE_OK ){ - rtreeRelease(pRtree); - } - - return rc; -} - -/* -** Rtree virtual table module xOpen method. -*/ -static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ - int rc = SQLITE_NOMEM; - Rtree *pRtree = (Rtree *)pVTab; - RtreeCursor *pCsr; - - pCsr = (RtreeCursor *)sqlite3_malloc(sizeof(RtreeCursor)); - if( pCsr ){ - memset(pCsr, 0, sizeof(RtreeCursor)); - pCsr->base.pVtab = pVTab; - rc = SQLITE_OK; - pRtree->nCursor++; + return -1; /* Syntax error */ } - *ppCursor = (sqlite3_vtab_cursor *)pCsr; - - return rc; } - /* -** Free the RtreeCursor.aConstraint[] array and its contents. +** Parse a complete JSON string. Return 0 on success or non-zero if there +** are any errors. If an error occurs, free all memory associated with +** pParse. +** +** pParse is uninitialized when this routine is called. */ -static void freeCursorConstraints(RtreeCursor *pCsr){ - if( pCsr->aConstraint ){ - int i; /* Used to iterate through constraint array */ - for(i=0; inConstraint; i++){ - sqlite3_rtree_query_info *pInfo = pCsr->aConstraint[i].pInfo; - if( pInfo ){ - if( pInfo->xDelUser ) pInfo->xDelUser(pInfo->pUser); - sqlite3_free(pInfo); +static int jsonParse( + JsonParse *pParse, /* Initialize and fill this JsonParse object */ + sqlite3_context *pCtx, /* Report errors here */ + const char *zJson /* Input JSON text to be parsed */ +){ + int i; + memset(pParse, 0, sizeof(*pParse)); + if( zJson==0 ) return 1; + pParse->zJson = zJson; + i = jsonParseValue(pParse, 0); + if( pParse->oom ) i = -1; + if( i>0 ){ + assert( pParse->iDepth==0 ); + while( safe_isspace(zJson[i]) ) i++; + if( zJson[i] ) i = -1; + } + if( i<=0 ){ + if( pCtx!=0 ){ + if( pParse->oom ){ + sqlite3_result_error_nomem(pCtx); + }else{ + sqlite3_result_error(pCtx, "malformed JSON", -1); } } - sqlite3_free(pCsr->aConstraint); - pCsr->aConstraint = 0; + jsonParseReset(pParse); + return 1; } + return 0; } -/* -** Rtree virtual table module xClose method. +/* Mark node i of pParse as being a child of iParent. Call recursively +** to fill in all the descendants of node i. */ -static int rtreeClose(sqlite3_vtab_cursor *cur){ - Rtree *pRtree = (Rtree *)(cur->pVtab); - int ii; - RtreeCursor *pCsr = (RtreeCursor *)cur; - assert( pRtree->nCursor>0 ); - freeCursorConstraints(pCsr); - sqlite3_finalize(pCsr->pReadAux); - sqlite3_free(pCsr->aPoint); - for(ii=0; iiaNode[ii]); - sqlite3_free(pCsr); - pRtree->nCursor--; - nodeBlobReset(pRtree); - return SQLITE_OK; +static void jsonParseFillInParentage(JsonParse *pParse, u32 i, u32 iParent){ + JsonNode *pNode = &pParse->aNode[i]; + u32 j; + pParse->aUp[i] = iParent; + switch( pNode->eType ){ + case JSON_ARRAY: { + for(j=1; j<=pNode->n; j += jsonNodeSize(pNode+j)){ + jsonParseFillInParentage(pParse, i+j, i); + } + break; + } + case JSON_OBJECT: { + for(j=1; j<=pNode->n; j += jsonNodeSize(pNode+j+1)+1){ + pParse->aUp[i+j] = i; + jsonParseFillInParentage(pParse, i+j+1, i); + } + break; + } + default: { + break; + } + } } /* -** Rtree virtual table module xEof method. -** -** Return non-zero if the cursor does not currently point to a valid -** record (i.e if the scan has finished), or zero otherwise. +** Compute the parentage of all nodes in a completed parse. */ -static int rtreeEof(sqlite3_vtab_cursor *cur){ - RtreeCursor *pCsr = (RtreeCursor *)cur; - return pCsr->atEOF; +static int jsonParseFindParents(JsonParse *pParse){ + u32 *aUp; + assert( pParse->aUp==0 ); + aUp = pParse->aUp = sqlite3_malloc( sizeof(u32)*pParse->nNode ); + if( aUp==0 ){ + pParse->oom = 1; + return SQLITE_NOMEM; + } + jsonParseFillInParentage(pParse, 0, 0); + return SQLITE_OK; } /* -** Convert raw bits from the on-disk RTree record into a coordinate value. -** The on-disk format is big-endian and needs to be converted for little- -** endian platforms. The on-disk record stores integer coordinates if -** eInt is true and it stores 32-bit floating point records if eInt is -** false. a[] is the four bytes of the on-disk record to be decoded. -** Store the results in "r". -** -** There are five versions of this macro. The last one is generic. The -** other four are various architectures-specific optimizations. +** Magic number used for the JSON parse cache in sqlite3_get_auxdata() */ -#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 -#define RTREE_DECODE_COORD(eInt, a, r) { \ - RtreeCoord c; /* Coordinate decoded */ \ - c.u = _byteswap_ulong(*(u32*)a); \ - r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ -} -#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 -#define RTREE_DECODE_COORD(eInt, a, r) { \ - RtreeCoord c; /* Coordinate decoded */ \ - c.u = __builtin_bswap32(*(u32*)a); \ - r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ -} -#elif SQLITE_BYTEORDER==1234 -#define RTREE_DECODE_COORD(eInt, a, r) { \ - RtreeCoord c; /* Coordinate decoded */ \ - memcpy(&c.u,a,4); \ - c.u = ((c.u>>24)&0xff)|((c.u>>8)&0xff00)| \ - ((c.u&0xff)<<24)|((c.u&0xff00)<<8); \ - r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ -} -#elif SQLITE_BYTEORDER==4321 -#define RTREE_DECODE_COORD(eInt, a, r) { \ - RtreeCoord c; /* Coordinate decoded */ \ - memcpy(&c.u,a,4); \ - r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ -} -#else -#define RTREE_DECODE_COORD(eInt, a, r) { \ - RtreeCoord c; /* Coordinate decoded */ \ - c.u = ((u32)a[0]<<24) + ((u32)a[1]<<16) \ - +((u32)a[2]<<8) + a[3]; \ - r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ -} -#endif +#define JSON_CACHE_ID (-429938) /* First cache entry */ +#define JSON_CACHE_SZ 4 /* Max number of cache entries */ /* -** Check the RTree node or entry given by pCellData and p against the MATCH -** constraint pConstraint. +** Obtain a complete parse of the JSON found in the first argument +** of the argv array. Use the sqlite3_get_auxdata() cache for this +** parse if it is available. If the cache is not available or if it +** is no longer valid, parse the JSON again and return the new parse, +** and also register the new parse so that it will be available for +** future sqlite3_get_auxdata() calls. */ -static int rtreeCallbackConstraint( - RtreeConstraint *pConstraint, /* The constraint to test */ - int eInt, /* True if RTree holding integer coordinates */ - u8 *pCellData, /* Raw cell content */ - RtreeSearchPoint *pSearch, /* Container of this cell */ - sqlite3_rtree_dbl *prScore, /* OUT: score for the cell */ - int *peWithin /* OUT: visibility of the cell */ +static JsonParse *jsonParseCached( + sqlite3_context *pCtx, + sqlite3_value **argv, + sqlite3_context *pErrCtx ){ - sqlite3_rtree_query_info *pInfo = pConstraint->pInfo; /* Callback info */ - int nCoord = pInfo->nCoord; /* No. of coordinates */ - int rc; /* Callback return code */ - RtreeCoord c; /* Translator union */ - sqlite3_rtree_dbl aCoord[RTREE_MAX_DIMENSIONS*2]; /* Decoded coordinates */ - - assert( pConstraint->op==RTREE_MATCH || pConstraint->op==RTREE_QUERY ); - assert( nCoord==2 || nCoord==4 || nCoord==6 || nCoord==8 || nCoord==10 ); - - if( pConstraint->op==RTREE_QUERY && pSearch->iLevel==1 ){ - pInfo->iRowid = readInt64(pCellData); - } - pCellData += 8; -#ifndef SQLITE_RTREE_INT_ONLY - if( eInt==0 ){ - switch( nCoord ){ - case 10: readCoord(pCellData+36, &c); aCoord[9] = c.f; - readCoord(pCellData+32, &c); aCoord[8] = c.f; - case 8: readCoord(pCellData+28, &c); aCoord[7] = c.f; - readCoord(pCellData+24, &c); aCoord[6] = c.f; - case 6: readCoord(pCellData+20, &c); aCoord[5] = c.f; - readCoord(pCellData+16, &c); aCoord[4] = c.f; - case 4: readCoord(pCellData+12, &c); aCoord[3] = c.f; - readCoord(pCellData+8, &c); aCoord[2] = c.f; - default: readCoord(pCellData+4, &c); aCoord[1] = c.f; - readCoord(pCellData, &c); aCoord[0] = c.f; + const char *zJson = (const char*)sqlite3_value_text(argv[0]); + int nJson = sqlite3_value_bytes(argv[0]); + JsonParse *p; + JsonParse *pMatch = 0; + int iKey; + int iMinKey = 0; + u32 iMinHold = 0xffffffff; + u32 iMaxHold = 0; + if( zJson==0 ) return 0; + for(iKey=0; iKeynJson==nJson + && memcmp(p->zJson,zJson,nJson)==0 + ){ + p->nErr = 0; + pMatch = p; + }else if( p->iHoldiHold; + iMinKey = iKey; + } + if( p->iHold>iMaxHold ){ + iMaxHold = p->iHold; } } - if( pConstraint->op==RTREE_MATCH ){ - int eWithin = 0; - rc = pConstraint->u.xGeom((sqlite3_rtree_geometry*)pInfo, - nCoord, aCoord, &eWithin); - if( eWithin==0 ) *peWithin = NOT_WITHIN; - *prScore = RTREE_ZERO; - }else{ - pInfo->aCoord = aCoord; - pInfo->iLevel = pSearch->iLevel - 1; - pInfo->rScore = pInfo->rParentScore = pSearch->rScore; - pInfo->eWithin = pInfo->eParentWithin = pSearch->eWithin; - rc = pConstraint->u.xQueryFunc(pInfo); - if( pInfo->eWithin<*peWithin ) *peWithin = pInfo->eWithin; - if( pInfo->rScore<*prScore || *prScorerScore; - } + if( pMatch ){ + pMatch->nErr = 0; + pMatch->iHold = iMaxHold+1; + return pMatch; } - return rc; + p = sqlite3_malloc( sizeof(*p) + nJson + 1 ); + if( p==0 ){ + sqlite3_result_error_nomem(pCtx); + return 0; + } + memset(p, 0, sizeof(*p)); + p->zJson = (char*)&p[1]; + memcpy((char*)p->zJson, zJson, nJson+1); + if( jsonParse(p, pErrCtx, p->zJson) ){ + sqlite3_free(p); + return 0; + } + p->nJson = nJson; + p->iHold = iMaxHold+1; + sqlite3_set_auxdata(pCtx, JSON_CACHE_ID+iMinKey, p, + (void(*)(void*))jsonParseFree); + return (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID+iMinKey); } -/* -** Check the internal RTree node given by pCellData against constraint p. -** If this constraint cannot be satisfied by any child within the node, -** set *peWithin to NOT_WITHIN. +/* +** Compare the OBJECT label at pNode against zKey,nKey. Return true on +** a match. */ -static void rtreeNonleafConstraint( - RtreeConstraint *p, /* The constraint to test */ - int eInt, /* True if RTree holds integer coordinates */ - u8 *pCellData, /* Raw cell content as appears on disk */ - int *peWithin /* Adjust downward, as appropriate */ -){ - sqlite3_rtree_dbl val; /* Coordinate value convert to a double */ - - /* p->iCoord might point to either a lower or upper bound coordinate - ** in a coordinate pair. But make pCellData point to the lower bound. - */ - pCellData += 8 + 4*(p->iCoord&0xfe); - - assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE - || p->op==RTREE_GT || p->op==RTREE_EQ ); - assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ - switch( p->op ){ - case RTREE_LE: - case RTREE_LT: - case RTREE_EQ: - RTREE_DECODE_COORD(eInt, pCellData, val); - /* val now holds the lower bound of the coordinate pair */ - if( p->u.rValue>=val ) return; - if( p->op!=RTREE_EQ ) break; /* RTREE_LE and RTREE_LT end here */ - /* Fall through for the RTREE_EQ case */ - - default: /* RTREE_GT or RTREE_GE, or fallthrough of RTREE_EQ */ - pCellData += 4; - RTREE_DECODE_COORD(eInt, pCellData, val); - /* val now holds the upper bound of the coordinate pair */ - if( p->u.rValue<=val ) return; +static int jsonLabelCompare(JsonNode *pNode, const char *zKey, u32 nKey){ + if( pNode->jnFlags & JNODE_RAW ){ + if( pNode->n!=nKey ) return 0; + return strncmp(pNode->u.zJContent, zKey, nKey)==0; + }else{ + if( pNode->n!=nKey+2 ) return 0; + return strncmp(pNode->u.zJContent+1, zKey, nKey)==0; } - *peWithin = NOT_WITHIN; } +/* forward declaration */ +static JsonNode *jsonLookupAppend(JsonParse*,const char*,int*,const char**); + /* -** Check the leaf RTree cell given by pCellData against constraint p. -** If this constraint is not satisfied, set *peWithin to NOT_WITHIN. -** If the constraint is satisfied, leave *peWithin unchanged. -** -** The constraint is of the form: xN op $val +** Search along zPath to find the node specified. Return a pointer +** to that node, or NULL if zPath is malformed or if there is no such +** node. ** -** The op is given by p->op. The xN is p->iCoord-th coordinate in -** pCellData. $val is given by p->u.rValue. +** If pApnd!=0, then try to append new nodes to complete zPath if it is +** possible to do so and if no existing node corresponds to zPath. If +** new nodes are appended *pApnd is set to 1. */ -static void rtreeLeafConstraint( - RtreeConstraint *p, /* The constraint to test */ - int eInt, /* True if RTree holds integer coordinates */ - u8 *pCellData, /* Raw cell content as appears on disk */ - int *peWithin /* Adjust downward, as appropriate */ +static JsonNode *jsonLookupStep( + JsonParse *pParse, /* The JSON to search */ + u32 iRoot, /* Begin the search at this node */ + const char *zPath, /* The path to search */ + int *pApnd, /* Append nodes to complete path if not NULL */ + const char **pzErr /* Make *pzErr point to any syntax error in zPath */ ){ - RtreeDValue xN; /* Coordinate value converted to a double */ - - assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE - || p->op==RTREE_GT || p->op==RTREE_EQ ); - pCellData += 8 + p->iCoord*4; - assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ - RTREE_DECODE_COORD(eInt, pCellData, xN); - switch( p->op ){ - case RTREE_LE: if( xN <= p->u.rValue ) return; break; - case RTREE_LT: if( xN < p->u.rValue ) return; break; - case RTREE_GE: if( xN >= p->u.rValue ) return; break; - case RTREE_GT: if( xN > p->u.rValue ) return; break; - default: if( xN == p->u.rValue ) return; break; + u32 i, j, nKey; + const char *zKey; + JsonNode *pRoot = &pParse->aNode[iRoot]; + if( zPath[0]==0 ) return pRoot; + if( zPath[0]=='.' ){ + if( pRoot->eType!=JSON_OBJECT ) return 0; + zPath++; + if( zPath[0]=='"' ){ + zKey = zPath + 1; + for(i=1; zPath[i] && zPath[i]!='"'; i++){} + nKey = i-1; + if( zPath[i] ){ + i++; + }else{ + *pzErr = zPath; + return 0; + } + }else{ + zKey = zPath; + for(i=0; zPath[i] && zPath[i]!='.' && zPath[i]!='['; i++){} + nKey = i; + } + if( nKey==0 ){ + *pzErr = zPath; + return 0; + } + j = 1; + for(;;){ + while( j<=pRoot->n ){ + if( jsonLabelCompare(pRoot+j, zKey, nKey) ){ + return jsonLookupStep(pParse, iRoot+j+1, &zPath[i], pApnd, pzErr); + } + j++; + j += jsonNodeSize(&pRoot[j]); + } + if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break; + iRoot += pRoot->u.iAppend; + pRoot = &pParse->aNode[iRoot]; + j = 1; + } + if( pApnd ){ + u32 iStart, iLabel; + JsonNode *pNode; + iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0); + iLabel = jsonParseAddNode(pParse, JSON_STRING, i, zPath); + zPath += i; + pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr); + if( pParse->oom ) return 0; + if( pNode ){ + pRoot = &pParse->aNode[iRoot]; + pRoot->u.iAppend = iStart - iRoot; + pRoot->jnFlags |= JNODE_APPEND; + pParse->aNode[iLabel].jnFlags |= JNODE_RAW; + } + return pNode; + } + }else if( zPath[0]=='[' && safe_isdigit(zPath[1]) ){ + if( pRoot->eType!=JSON_ARRAY ) return 0; + i = 0; + j = 1; + while( safe_isdigit(zPath[j]) ){ + i = i*10 + zPath[j] - '0'; + j++; + } + if( zPath[j]!=']' ){ + *pzErr = zPath; + return 0; + } + zPath += j + 1; + j = 1; + for(;;){ + while( j<=pRoot->n && (i>0 || (pRoot[j].jnFlags & JNODE_REMOVE)!=0) ){ + if( (pRoot[j].jnFlags & JNODE_REMOVE)==0 ) i--; + j += jsonNodeSize(&pRoot[j]); + } + if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break; + iRoot += pRoot->u.iAppend; + pRoot = &pParse->aNode[iRoot]; + j = 1; + } + if( j<=pRoot->n ){ + return jsonLookupStep(pParse, iRoot+j, zPath, pApnd, pzErr); + } + if( i==0 && pApnd ){ + u32 iStart; + JsonNode *pNode; + iStart = jsonParseAddNode(pParse, JSON_ARRAY, 1, 0); + pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr); + if( pParse->oom ) return 0; + if( pNode ){ + pRoot = &pParse->aNode[iRoot]; + pRoot->u.iAppend = iStart - iRoot; + pRoot->jnFlags |= JNODE_APPEND; + } + return pNode; + } + }else{ + *pzErr = zPath; } - *peWithin = NOT_WITHIN; + return 0; } /* -** One of the cells in node pNode is guaranteed to have a 64-bit -** integer value equal to iRowid. Return the index of this cell. +** Append content to pParse that will complete zPath. Return a pointer +** to the inserted node, or return NULL if the append fails. */ -static int nodeRowidIndex( - Rtree *pRtree, - RtreeNode *pNode, - i64 iRowid, - int *piIndex +static JsonNode *jsonLookupAppend( + JsonParse *pParse, /* Append content to the JSON parse */ + const char *zPath, /* Description of content to append */ + int *pApnd, /* Set this flag to 1 */ + const char **pzErr /* Make this point to any syntax error */ ){ - int ii; - int nCell = NCELL(pNode); - assert( nCell<200 ); - for(ii=0; iioom ? 0 : &pParse->aNode[pParse->nNode-1]; } - return SQLITE_CORRUPT_VTAB; + if( zPath[0]=='.' ){ + jsonParseAddNode(pParse, JSON_OBJECT, 0, 0); + }else if( strncmp(zPath,"[0]",3)==0 ){ + jsonParseAddNode(pParse, JSON_ARRAY, 0, 0); + }else{ + return 0; + } + if( pParse->oom ) return 0; + return jsonLookupStep(pParse, pParse->nNode-1, zPath, pApnd, pzErr); } /* -** Return the index of the cell containing a pointer to node pNode -** in its parent. If pNode is the root node, return -1. +** Return the text of a syntax error message on a JSON path. Space is +** obtained from sqlite3_malloc(). */ -static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){ - RtreeNode *pParent = pNode->pParent; - if( pParent ){ - return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex); - } - *piIndex = -1; - return SQLITE_OK; +static char *jsonPathSyntaxError(const char *zErr){ + return sqlite3_mprintf("JSON path error near '%q'", zErr); } /* -** Compare two search points. Return negative, zero, or positive if the first -** is less than, equal to, or greater than the second. +** Do a node lookup using zPath. Return a pointer to the node on success. +** Return NULL if not found or if there is an error. ** -** The rScore is the primary key. Smaller rScore values come first. -** If the rScore is a tie, then use iLevel as the tie breaker with smaller -** iLevel values coming first. In this way, if rScore is the same for all -** SearchPoints, then iLevel becomes the deciding factor and the result -** is a depth-first search, which is the desired default behavior. +** On an error, write an error message into pCtx and increment the +** pParse->nErr counter. +** +** If pApnd!=NULL then try to append missing nodes and set *pApnd = 1 if +** nodes are appended. */ -static int rtreeSearchPointCompare( - const RtreeSearchPoint *pA, - const RtreeSearchPoint *pB +static JsonNode *jsonLookup( + JsonParse *pParse, /* The JSON to search */ + const char *zPath, /* The path to search */ + int *pApnd, /* Append nodes to complete path if not NULL */ + sqlite3_context *pCtx /* Report errors here, if not NULL */ ){ - if( pA->rScorerScore ) return -1; - if( pA->rScore>pB->rScore ) return +1; - if( pA->iLeveliLevel ) return -1; - if( pA->iLevel>pB->iLevel ) return +1; - return 0; -} + const char *zErr = 0; + JsonNode *pNode = 0; + char *zMsg; -/* -** Interchange two search points in a cursor. -*/ -static void rtreeSearchPointSwap(RtreeCursor *p, int i, int j){ - RtreeSearchPoint t = p->aPoint[i]; - assert( iaPoint[i] = p->aPoint[j]; - p->aPoint[j] = t; - i++; j++; - if( i=RTREE_CACHE_SZ ){ - nodeRelease(RTREE_OF_CURSOR(p), p->aNode[i]); - p->aNode[i] = 0; - }else{ - RtreeNode *pTemp = p->aNode[i]; - p->aNode[i] = p->aNode[j]; - p->aNode[j] = pTemp; - } + if( zPath==0 ) return 0; + if( zPath[0]!='$' ){ + zErr = zPath; + goto lookup_err; + } + zPath++; + pNode = jsonLookupStep(pParse, 0, zPath, pApnd, &zErr); + if( zErr==0 ) return pNode; + +lookup_err: + pParse->nErr++; + assert( zErr!=0 && pCtx!=0 ); + zMsg = jsonPathSyntaxError(zErr); + if( zMsg ){ + sqlite3_result_error(pCtx, zMsg, -1); + sqlite3_free(zMsg); + }else{ + sqlite3_result_error_nomem(pCtx); } + return 0; } + /* -** Return the search point with the lowest current score. +** Report the wrong number of arguments for json_insert(), json_replace() +** or json_set(). */ -static RtreeSearchPoint *rtreeSearchPointFirst(RtreeCursor *pCur){ - return pCur->bPoint ? &pCur->sPoint : pCur->nPoint ? pCur->aPoint : 0; +static void jsonWrongNumArgs( + sqlite3_context *pCtx, + const char *zFuncName +){ + char *zMsg = sqlite3_mprintf("json_%s() needs an odd number of arguments", + zFuncName); + sqlite3_result_error(pCtx, zMsg, -1); + sqlite3_free(zMsg); } /* -** Get the RtreeNode for the search point with the lowest score. +** Mark all NULL entries in the Object passed in as JNODE_REMOVE. */ -static RtreeNode *rtreeNodeOfFirstSearchPoint(RtreeCursor *pCur, int *pRC){ - sqlite3_int64 id; - int ii = 1 - pCur->bPoint; - assert( ii==0 || ii==1 ); - assert( pCur->bPoint || pCur->nPoint ); - if( pCur->aNode[ii]==0 ){ - assert( pRC!=0 ); - id = ii ? pCur->aPoint[0].id : pCur->sPoint.id; - *pRC = nodeAcquire(RTREE_OF_CURSOR(pCur), id, 0, &pCur->aNode[ii]); +static void jsonRemoveAllNulls(JsonNode *pNode){ + int i, n; + assert( pNode->eType==JSON_OBJECT ); + n = pNode->n; + for(i=2; i<=n; i += jsonNodeSize(&pNode[i])+1){ + switch( pNode[i].eType ){ + case JSON_NULL: + pNode[i].jnFlags |= JNODE_REMOVE; + break; + case JSON_OBJECT: + jsonRemoveAllNulls(&pNode[i]); + break; + } } - return pCur->aNode[ii]; } + +/**************************************************************************** +** SQL functions used for testing and debugging +****************************************************************************/ + +#ifdef SQLITE_DEBUG /* -** Push a new element onto the priority queue +** The json_parse(JSON) function returns a string which describes +** a parse of the JSON provided. Or it returns NULL if JSON is not +** well-formed. */ -static RtreeSearchPoint *rtreeEnqueue( - RtreeCursor *pCur, /* The cursor */ - RtreeDValue rScore, /* Score for the new search point */ - u8 iLevel /* Level for the new search point */ +static void jsonParseFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv ){ - int i, j; - RtreeSearchPoint *pNew; - if( pCur->nPoint>=pCur->nPointAlloc ){ - int nNew = pCur->nPointAlloc*2 + 8; - pNew = sqlite3_realloc(pCur->aPoint, nNew*sizeof(pCur->aPoint[0])); - if( pNew==0 ) return 0; - pCur->aPoint = pNew; - pCur->nPointAlloc = nNew; - } - i = pCur->nPoint++; - pNew = pCur->aPoint + i; - pNew->rScore = rScore; - pNew->iLevel = iLevel; - assert( iLevel<=RTREE_MAX_DEPTH ); - while( i>0 ){ - RtreeSearchPoint *pParent; - j = (i-1)/2; - pParent = pCur->aPoint + j; - if( rtreeSearchPointCompare(pNew, pParent)>=0 ) break; - rtreeSearchPointSwap(pCur, j, i); - i = j; - pNew = pParent; + JsonString s; /* Output string - not real JSON */ + JsonParse x; /* The parse */ + u32 i; + + assert( argc==1 ); + if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; + jsonParseFindParents(&x); + jsonInit(&s, ctx); + for(i=0; ianQueue[iLevel]++; - if( pFirst==0 - || pFirst->rScore>rScore - || (pFirst->rScore==rScore && pFirst->iLevel>iLevel) - ){ - if( pCur->bPoint ){ - int ii; - pNew = rtreeEnqueue(pCur, rScore, iLevel); - if( pNew==0 ) return 0; - ii = (int)(pNew - pCur->aPoint) + 1; - if( iiaNode[ii]==0 ); - pCur->aNode[ii] = pCur->aNode[0]; - }else{ - nodeRelease(RTREE_OF_CURSOR(pCur), pCur->aNode[0]); - } - pCur->aNode[0] = 0; - *pNew = pCur->sPoint; - } - pCur->sPoint.rScore = rScore; - pCur->sPoint.iLevel = iLevel; - pCur->bPoint = 1; - return &pCur->sPoint; - }else{ - return rtreeEnqueue(pCur, rScore, iLevel); + UNUSED_PARAM(argc); + sqlite3_result_int(ctx, sqlite3_value_subtype(argv[0])==JSON_SUBTYPE); +} +#endif /* SQLITE_DEBUG */ + +/**************************************************************************** +** Scalar SQL function implementations +****************************************************************************/ + +/* +** Implementation of the json_QUOTE(VALUE) function. Return a JSON value +** corresponding to the SQL value input. Mostly this means putting +** double-quotes around strings and returning the unquoted string "null" +** when given a NULL input. +*/ +static void jsonQuoteFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonString jx; + UNUSED_PARAM(argc); + + jsonInit(&jx, ctx); + jsonAppendValue(&jx, argv[0]); + jsonResult(&jx); + sqlite3_result_subtype(ctx, JSON_SUBTYPE); +} + +/* +** Implementation of the json_array(VALUE,...) function. Return a JSON +** array that contains all values given in arguments. Or if any argument +** is a BLOB, throw an error. +*/ +static void jsonArrayFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + int i; + JsonString jx; + + jsonInit(&jx, ctx); + jsonAppendChar(&jx, '['); + for(i=0; iiLevel, p->id, p->iCell, p->rScore, p->eWithin - ); - idx++; - if( idxaNode[idx]); + +/* +** json_array_length(JSON) +** json_array_length(JSON, PATH) +** +** Return the number of elements in the top-level JSON array. +** Return 0 if the input is not a well-formed JSON array. +*/ +static void jsonArrayLengthFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p; /* The parse */ + sqlite3_int64 n = 0; + u32 i; + JsonNode *pNode; + + p = jsonParseCached(ctx, argv, ctx); + if( p==0 ) return; + assert( p->nNode ); + if( argc==2 ){ + const char *zPath = (const char*)sqlite3_value_text(argv[1]); + pNode = jsonLookup(p, zPath, 0, ctx); }else{ - printf("\n"); + pNode = p->aNode; } -} -static void traceQueue(RtreeCursor *pCur, const char *zPrefix){ - int ii; - printf("=== %9s ", zPrefix); - if( pCur->bPoint ){ - tracePoint(&pCur->sPoint, -1, pCur); + if( pNode==0 ){ + return; } - for(ii=0; iinPoint; ii++){ - if( ii>0 || pCur->bPoint ) printf(" "); - tracePoint(&pCur->aPoint[ii], ii, pCur); + if( pNode->eType==JSON_ARRAY ){ + assert( (pNode->jnFlags & JNODE_APPEND)==0 ); + for(i=1; i<=pNode->n; n++){ + i += jsonNodeSize(&pNode[i]); + } } + sqlite3_result_int64(ctx, n); } -# define RTREE_QUEUE_TRACE(A,B) traceQueue(A,B) -#else -# define RTREE_QUEUE_TRACE(A,B) /* no-op */ -#endif -/* Remove the search point with the lowest current score. +/* +** json_extract(JSON, PATH, ...) +** +** Return the element described by PATH. Return NULL if there is no +** PATH element. If there are multiple PATHs, then return a JSON array +** with the result from each path. Throw an error if the JSON or any PATH +** is malformed. */ -static void rtreeSearchPointPop(RtreeCursor *p){ - int i, j, k, n; - i = 1 - p->bPoint; - assert( i==0 || i==1 ); - if( p->aNode[i] ){ - nodeRelease(RTREE_OF_CURSOR(p), p->aNode[i]); - p->aNode[i] = 0; - } - if( p->bPoint ){ - p->anQueue[p->sPoint.iLevel]--; - p->bPoint = 0; - }else if( p->nPoint ){ - p->anQueue[p->aPoint[0].iLevel]--; - n = --p->nPoint; - p->aPoint[0] = p->aPoint[n]; - if( naNode[1] = p->aNode[n+1]; - p->aNode[n+1] = 0; - } - i = 0; - while( (j = i*2+1)aPoint[k], &p->aPoint[j])<0 ){ - if( rtreeSearchPointCompare(&p->aPoint[k], &p->aPoint[i])<0 ){ - rtreeSearchPointSwap(p, i, k); - i = k; - }else{ - break; - } +static void jsonExtractFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p; /* The parse */ + JsonNode *pNode; + const char *zPath; + JsonString jx; + int i; + + if( argc<2 ) return; + p = jsonParseCached(ctx, argv, ctx); + if( p==0 ) return; + jsonInit(&jx, ctx); + jsonAppendChar(&jx, '['); + for(i=1; inErr ) break; + if( argc>2 ){ + jsonAppendSeparator(&jx); + if( pNode ){ + jsonRenderNode(pNode, &jx, 0); }else{ - if( rtreeSearchPointCompare(&p->aPoint[j], &p->aPoint[i])<0 ){ - rtreeSearchPointSwap(p, i, j); - i = j; - }else{ - break; - } + jsonAppendRaw(&jx, "null", 4); } + }else if( pNode ){ + jsonReturn(pNode, ctx, 0); } } + if( argc>2 && i==argc ){ + jsonAppendChar(&jx, ']'); + jsonResult(&jx); + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + } + jsonReset(&jx); } - -/* -** Continue the search on cursor pCur until the front of the queue -** contains an entry suitable for returning as a result-set row, -** or until the RtreeSearchPoint queue is empty, indicating that the -** query has completed. +/* This is the RFC 7396 MergePatch algorithm. */ -static int rtreeStepToLeaf(RtreeCursor *pCur){ - RtreeSearchPoint *p; - Rtree *pRtree = RTREE_OF_CURSOR(pCur); - RtreeNode *pNode; - int eWithin; - int rc = SQLITE_OK; - int nCell; - int nConstraint = pCur->nConstraint; - int ii; - int eInt; - RtreeSearchPoint x; - - eInt = pRtree->eCoordType==RTREE_COORD_INT32; - while( (p = rtreeSearchPointFirst(pCur))!=0 && p->iLevel>0 ){ - pNode = rtreeNodeOfFirstSearchPoint(pCur, &rc); - if( rc ) return rc; - nCell = NCELL(pNode); - assert( nCell<200 ); - while( p->iCellzData + (4+pRtree->nBytesPerCell*p->iCell); - eWithin = FULLY_WITHIN; - for(ii=0; iiaConstraint + ii; - if( pConstraint->op>=RTREE_MATCH ){ - rc = rtreeCallbackConstraint(pConstraint, eInt, pCellData, p, - &rScore, &eWithin); - if( rc ) return rc; - }else if( p->iLevel==1 ){ - rtreeLeafConstraint(pConstraint, eInt, pCellData, &eWithin); +static JsonNode *jsonMergePatch( + JsonParse *pParse, /* The JSON parser that contains the TARGET */ + u32 iTarget, /* Node of the TARGET in pParse */ + JsonNode *pPatch /* The PATCH */ +){ + u32 i, j; + u32 iRoot; + JsonNode *pTarget; + if( pPatch->eType!=JSON_OBJECT ){ + return pPatch; + } + assert( iTarget>=0 && iTargetnNode ); + pTarget = &pParse->aNode[iTarget]; + assert( (pPatch->jnFlags & JNODE_APPEND)==0 ); + if( pTarget->eType!=JSON_OBJECT ){ + jsonRemoveAllNulls(pPatch); + return pPatch; + } + iRoot = iTarget; + for(i=1; in; i += jsonNodeSize(&pPatch[i+1])+1){ + u32 nKey; + const char *zKey; + assert( pPatch[i].eType==JSON_STRING ); + assert( pPatch[i].jnFlags & JNODE_LABEL ); + nKey = pPatch[i].n; + zKey = pPatch[i].u.zJContent; + assert( (pPatch[i].jnFlags & JNODE_RAW)==0 ); + for(j=1; jn; j += jsonNodeSize(&pTarget[j+1])+1 ){ + assert( pTarget[j].eType==JSON_STRING ); + assert( pTarget[j].jnFlags & JNODE_LABEL ); + assert( (pPatch[i].jnFlags & JNODE_RAW)==0 ); + if( pTarget[j].n==nKey && strncmp(pTarget[j].u.zJContent,zKey,nKey)==0 ){ + if( pTarget[j+1].jnFlags & (JNODE_REMOVE|JNODE_PATCH) ) break; + if( pPatch[i+1].eType==JSON_NULL ){ + pTarget[j+1].jnFlags |= JNODE_REMOVE; }else{ - rtreeNonleafConstraint(pConstraint, eInt, pCellData, &eWithin); + JsonNode *pNew = jsonMergePatch(pParse, iTarget+j+1, &pPatch[i+1]); + if( pNew==0 ) return 0; + pTarget = &pParse->aNode[iTarget]; + if( pNew!=&pTarget[j+1] ){ + pTarget[j+1].u.pPatch = pNew; + pTarget[j+1].jnFlags |= JNODE_PATCH; + } } - if( eWithin==NOT_WITHIN ) break; - } - p->iCell++; - if( eWithin==NOT_WITHIN ) continue; - x.iLevel = p->iLevel - 1; - if( x.iLevel ){ - x.id = readInt64(pCellData); - x.iCell = 0; - }else{ - x.id = p->id; - x.iCell = p->iCell - 1; - } - if( p->iCell>=nCell ){ - RTREE_QUEUE_TRACE(pCur, "POP-S:"); - rtreeSearchPointPop(pCur); + break; } - if( rScoreeWithin = (u8)eWithin; - p->id = x.id; - p->iCell = x.iCell; - RTREE_QUEUE_TRACE(pCur, "PUSH-S:"); - break; } - if( p->iCell>=nCell ){ - RTREE_QUEUE_TRACE(pCur, "POP-Se:"); - rtreeSearchPointPop(pCur); + if( j>=pTarget->n && pPatch[i+1].eType!=JSON_NULL ){ + int iStart, iPatch; + iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0); + jsonParseAddNode(pParse, JSON_STRING, nKey, zKey); + iPatch = jsonParseAddNode(pParse, JSON_TRUE, 0, 0); + if( pParse->oom ) return 0; + jsonRemoveAllNulls(pPatch); + pTarget = &pParse->aNode[iTarget]; + pParse->aNode[iRoot].jnFlags |= JNODE_APPEND; + pParse->aNode[iRoot].u.iAppend = iStart - iRoot; + iRoot = iStart; + pParse->aNode[iPatch].jnFlags |= JNODE_PATCH; + pParse->aNode[iPatch].u.pPatch = &pPatch[i+1]; } } - pCur->atEOF = p==0; - return SQLITE_OK; + return pTarget; } -/* -** Rtree virtual table module xNext method. +/* +** Implementation of the json_mergepatch(JSON1,JSON2) function. Return a JSON +** object that is the result of running the RFC 7396 MergePatch() algorithm +** on the two arguments. */ -static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){ - RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; - int rc = SQLITE_OK; +static void jsonPatchFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse x; /* The JSON that is being patched */ + JsonParse y; /* The patch */ + JsonNode *pResult; /* The result of the merge */ - /* Move to the next entry that matches the configured constraints. */ - RTREE_QUEUE_TRACE(pCsr, "POP-Nx:"); - if( pCsr->bAuxValid ){ - pCsr->bAuxValid = 0; - sqlite3_reset(pCsr->pReadAux); + UNUSED_PARAM(argc); + if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; + if( jsonParse(&y, ctx, (const char*)sqlite3_value_text(argv[1])) ){ + jsonParseReset(&x); + return; } - rtreeSearchPointPop(pCsr); - rc = rtreeStepToLeaf(pCsr); - return rc; -} - -/* -** Rtree virtual table module xRowid method. -*/ -static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){ - RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; - RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); - int rc = SQLITE_OK; - RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); - if( rc==SQLITE_OK && p ){ - *pRowid = nodeGetRowid(RTREE_OF_CURSOR(pCsr), pNode, p->iCell); + pResult = jsonMergePatch(&x, 0, y.aNode); + assert( pResult!=0 || x.oom ); + if( pResult ){ + jsonReturnJson(pResult, ctx, 0); + }else{ + sqlite3_result_error_nomem(ctx); } - return rc; + jsonParseReset(&x); + jsonParseReset(&y); } -/* -** Rtree virtual table module xColumn method. -*/ -static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ - Rtree *pRtree = (Rtree *)cur->pVtab; - RtreeCursor *pCsr = (RtreeCursor *)cur; - RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); - RtreeCoord c; - int rc = SQLITE_OK; - RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); - - if( rc ) return rc; - if( p==0 ) return SQLITE_OK; - if( i==0 ){ - sqlite3_result_int64(ctx, nodeGetRowid(pRtree, pNode, p->iCell)); - }else if( i<=pRtree->nDim2 ){ - nodeGetCoord(pRtree, pNode, p->iCell, i-1, &c); -#ifndef SQLITE_RTREE_INT_ONLY - if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ - sqlite3_result_double(ctx, c.f); - }else -#endif - { - assert( pRtree->eCoordType==RTREE_COORD_INT32 ); - sqlite3_result_int(ctx, c.i); - } - }else{ - if( !pCsr->bAuxValid ){ - if( pCsr->pReadAux==0 ){ - rc = sqlite3_prepare_v3(pRtree->db, pRtree->zReadAuxSql, -1, 0, - &pCsr->pReadAux, 0); - if( rc ) return rc; - } - sqlite3_bind_int64(pCsr->pReadAux, 1, - nodeGetRowid(pRtree, pNode, p->iCell)); - rc = sqlite3_step(pCsr->pReadAux); - if( rc==SQLITE_ROW ){ - pCsr->bAuxValid = 1; - }else{ - sqlite3_reset(pCsr->pReadAux); - if( rc==SQLITE_DONE ) rc = SQLITE_OK; - return rc; - } - } - sqlite3_result_value(ctx, - sqlite3_column_value(pCsr->pReadAux, i - pRtree->nDim2 + 1)); - } - return SQLITE_OK; -} -/* -** Use nodeAcquire() to obtain the leaf node containing the record with -** rowid iRowid. If successful, set *ppLeaf to point to the node and -** return SQLITE_OK. If there is no such record in the table, set -** *ppLeaf to 0 and return SQLITE_OK. If an error occurs, set *ppLeaf -** to zero and return an SQLite error code. +/* +** Implementation of the json_object(NAME,VALUE,...) function. Return a JSON +** object that contains all name/value given in arguments. Or if any name +** is not a string or if any value is a BLOB, throw an error. */ -static int findLeafNode( - Rtree *pRtree, /* RTree to search */ - i64 iRowid, /* The rowid searching for */ - RtreeNode **ppLeaf, /* Write the node here */ - sqlite3_int64 *piNode /* Write the node-id here */ +static void jsonObjectFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv ){ - int rc; - *ppLeaf = 0; - sqlite3_bind_int64(pRtree->pReadRowid, 1, iRowid); - if( sqlite3_step(pRtree->pReadRowid)==SQLITE_ROW ){ - i64 iNode = sqlite3_column_int64(pRtree->pReadRowid, 0); - if( piNode ) *piNode = iNode; - rc = nodeAcquire(pRtree, iNode, 0, ppLeaf); - sqlite3_reset(pRtree->pReadRowid); - }else{ - rc = sqlite3_reset(pRtree->pReadRowid); + int i; + JsonString jx; + const char *z; + u32 n; + + if( argc&1 ){ + sqlite3_result_error(ctx, "json_object() requires an even number " + "of arguments", -1); + return; } - return rc; + jsonInit(&jx, ctx); + jsonAppendChar(&jx, '{'); + for(i=0; iiSize ); - if( !pInfo ) return SQLITE_NOMEM; - memset(pInfo, 0, sizeof(*pInfo)); - pBlob = (RtreeMatchArg*)&pInfo[1]; - memcpy(pBlob, pSrc, pSrc->iSize); - pInfo->pContext = pBlob->cb.pContext; - pInfo->nParam = pBlob->nParam; - pInfo->aParam = pBlob->aParam; - pInfo->apSqlParam = pBlob->apSqlParam; +static void jsonRemoveFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse x; /* The parse */ + JsonNode *pNode; + const char *zPath; + u32 i; - if( pBlob->cb.xGeom ){ - pCons->u.xGeom = pBlob->cb.xGeom; - }else{ - pCons->op = RTREE_QUERY; - pCons->u.xQueryFunc = pBlob->cb.xQueryFunc; + if( argc<1 ) return; + if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; + assert( x.nNode ); + for(i=1; i<(u32)argc; i++){ + zPath = (const char*)sqlite3_value_text(argv[i]); + if( zPath==0 ) goto remove_done; + pNode = jsonLookup(&x, zPath, 0, ctx); + if( x.nErr ) goto remove_done; + if( pNode ) pNode->jnFlags |= JNODE_REMOVE; } - pCons->pInfo = pInfo; - return SQLITE_OK; + if( (x.aNode[0].jnFlags & JNODE_REMOVE)==0 ){ + jsonReturnJson(x.aNode, ctx, 0); + } +remove_done: + jsonParseReset(&x); } -/* -** Rtree virtual table module xFilter method. +/* +** json_replace(JSON, PATH, VALUE, ...) +** +** Replace the value at PATH with VALUE. If PATH does not already exist, +** this routine is a no-op. If JSON or PATH is malformed, throw an error. */ -static int rtreeFilter( - sqlite3_vtab_cursor *pVtabCursor, - int idxNum, const char *idxStr, - int argc, sqlite3_value **argv +static void jsonReplaceFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv ){ - Rtree *pRtree = (Rtree *)pVtabCursor->pVtab; - RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; - RtreeNode *pRoot = 0; - int ii; - int rc = SQLITE_OK; - int iCell = 0; - sqlite3_stmt *pStmt; - - rtreeReference(pRtree); - - /* Reset the cursor to the same state as rtreeOpen() leaves it in. */ - freeCursorConstraints(pCsr); - sqlite3_free(pCsr->aPoint); - pStmt = pCsr->pReadAux; - memset(pCsr, 0, sizeof(RtreeCursor)); - pCsr->base.pVtab = (sqlite3_vtab*)pRtree; - pCsr->pReadAux = pStmt; + JsonParse x; /* The parse */ + JsonNode *pNode; + const char *zPath; + u32 i; - pCsr->iStrategy = idxNum; - if( idxNum==1 ){ - /* Special case - lookup by rowid. */ - RtreeNode *pLeaf; /* Leaf on which the required cell resides */ - RtreeSearchPoint *p; /* Search point for the leaf */ - i64 iRowid = sqlite3_value_int64(argv[0]); - i64 iNode = 0; - rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode); - if( rc==SQLITE_OK && pLeaf!=0 ){ - p = rtreeSearchPointNew(pCsr, RTREE_ZERO, 0); - assert( p!=0 ); /* Always returns pCsr->sPoint */ - pCsr->aNode[0] = pLeaf; - p->id = iNode; - p->eWithin = PARTLY_WITHIN; - rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &iCell); - p->iCell = (u8)iCell; - RTREE_QUEUE_TRACE(pCsr, "PUSH-F1:"); - }else{ - pCsr->atEOF = 1; + if( argc<1 ) return; + if( (argc&1)==0 ) { + jsonWrongNumArgs(ctx, "replace"); + return; + } + if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; + assert( x.nNode ); + for(i=1; i<(u32)argc; i+=2){ + zPath = (const char*)sqlite3_value_text(argv[i]); + pNode = jsonLookup(&x, zPath, 0, ctx); + if( x.nErr ) goto replace_err; + if( pNode ){ + pNode->jnFlags |= (u8)JNODE_REPLACE; + pNode->u.iReplace = i + 1; } + } + if( x.aNode[0].jnFlags & JNODE_REPLACE ){ + sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]); }else{ - /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array - ** with the configured constraints. - */ - rc = nodeAcquire(pRtree, 1, 0, &pRoot); - if( rc==SQLITE_OK && argc>0 ){ - pCsr->aConstraint = sqlite3_malloc(sizeof(RtreeConstraint)*argc); - pCsr->nConstraint = argc; - if( !pCsr->aConstraint ){ - rc = SQLITE_NOMEM; - }else{ - memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc); - memset(pCsr->anQueue, 0, sizeof(u32)*(pRtree->iDepth + 1)); - assert( (idxStr==0 && argc==0) - || (idxStr && (int)strlen(idxStr)==argc*2) ); - for(ii=0; iiaConstraint[ii]; - p->op = idxStr[ii*2]; - p->iCoord = idxStr[ii*2+1]-'0'; - if( p->op>=RTREE_MATCH ){ - /* A MATCH operator. The right-hand-side must be a blob that - ** can be cast into an RtreeMatchArg object. One created using - ** an sqlite3_rtree_geometry_callback() SQL user function. - */ - rc = deserializeGeometry(argv[ii], p); - if( rc!=SQLITE_OK ){ - break; - } - p->pInfo->nCoord = pRtree->nDim2; - p->pInfo->anQueue = pCsr->anQueue; - p->pInfo->mxLevel = pRtree->iDepth + 1; - }else{ -#ifdef SQLITE_RTREE_INT_ONLY - p->u.rValue = sqlite3_value_int64(argv[ii]); -#else - p->u.rValue = sqlite3_value_double(argv[ii]); -#endif - } - } - } - } - if( rc==SQLITE_OK ){ - RtreeSearchPoint *pNew; - pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, (u8)(pRtree->iDepth+1)); - if( pNew==0 ) return SQLITE_NOMEM; - pNew->id = 1; - pNew->iCell = 0; - pNew->eWithin = PARTLY_WITHIN; - assert( pCsr->bPoint==1 ); - pCsr->aNode[0] = pRoot; - pRoot = 0; - RTREE_QUEUE_TRACE(pCsr, "PUSH-Fm:"); - rc = rtreeStepToLeaf(pCsr); - } + jsonReturnJson(x.aNode, ctx, argv); } - - nodeRelease(pRtree, pRoot); - rtreeRelease(pRtree); - return rc; +replace_err: + jsonParseReset(&x); } /* -** Rtree virtual table module xBestIndex method. There are three -** table scan strategies to choose from (in order from most to -** least desirable): -** -** idxNum idxStr Strategy -** ------------------------------------------------ -** 1 Unused Direct lookup by rowid. -** 2 See below R-tree query or full-table scan. -** ------------------------------------------------ -** -** If strategy 1 is used, then idxStr is not meaningful. If strategy -** 2 is used, idxStr is formatted to contain 2 bytes for each -** constraint used. The first two bytes of idxStr correspond to -** the constraint in sqlite3_index_info.aConstraintUsage[] with -** (argvIndex==1) etc. +** json_set(JSON, PATH, VALUE, ...) ** -** The first of each pair of bytes in idxStr identifies the constraint -** operator as follows: +** Set the value at PATH to VALUE. Create the PATH if it does not already +** exist. Overwrite existing values that do exist. +** If JSON or PATH is malformed, throw an error. ** -** Operator Byte Value -** ---------------------- -** = 0x41 ('A') -** <= 0x42 ('B') -** < 0x43 ('C') -** >= 0x44 ('D') -** > 0x45 ('E') -** MATCH 0x46 ('F') -** ---------------------- +** json_insert(JSON, PATH, VALUE, ...) ** -** The second of each pair of bytes identifies the coordinate column -** to which the constraint applies. The leftmost coordinate column -** is 'a', the second from the left 'b' etc. +** Create PATH and initialize it to VALUE. If PATH already exists, this +** routine is a no-op. If JSON or PATH is malformed, throw an error. */ -static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ - Rtree *pRtree = (Rtree*)tab; - int rc = SQLITE_OK; - int ii; - int bMatch = 0; /* True if there exists a MATCH constraint */ - i64 nRow; /* Estimated rows returned by this scan */ - - int iIdx = 0; - char zIdxStr[RTREE_MAX_DIMENSIONS*8+1]; - memset(zIdxStr, 0, sizeof(zIdxStr)); +static void jsonSetFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse x; /* The parse */ + JsonNode *pNode; + const char *zPath; + u32 i; + int bApnd; + int bIsSet = *(int*)sqlite3_user_data(ctx); - /* Check if there exists a MATCH constraint - even an unusable one. If there - ** is, do not consider the lookup-by-rowid plan as using such a plan would - ** require the VDBE to evaluate the MATCH constraint, which is not currently - ** possible. */ - for(ii=0; iinConstraint; ii++){ - if( pIdxInfo->aConstraint[ii].op==SQLITE_INDEX_CONSTRAINT_MATCH ){ - bMatch = 1; - } + if( argc<1 ) return; + if( (argc&1)==0 ) { + jsonWrongNumArgs(ctx, bIsSet ? "set" : "insert"); + return; } - - assert( pIdxInfo->idxStr==0 ); - for(ii=0; iinConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){ - struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii]; - - if( bMatch==0 && p->usable - && p->iColumn==0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ - ){ - /* We have an equality constraint on the rowid. Use strategy 1. */ - int jj; - for(jj=0; jjaConstraintUsage[jj].argvIndex = 0; - pIdxInfo->aConstraintUsage[jj].omit = 0; - } - pIdxInfo->idxNum = 1; - pIdxInfo->aConstraintUsage[ii].argvIndex = 1; - pIdxInfo->aConstraintUsage[jj].omit = 1; - - /* This strategy involves a two rowid lookups on an B-Tree structures - ** and then a linear search of an R-Tree node. This should be - ** considered almost as quick as a direct rowid lookup (for which - ** sqlite uses an internal cost of 0.0). It is expected to return - ** a single row. - */ - pIdxInfo->estimatedCost = 30.0; - pIdxInfo->estimatedRows = 1; - pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE; - return SQLITE_OK; - } - - if( p->usable - && ((p->iColumn>0 && p->iColumn<=pRtree->nDim2) - || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) - ){ - u8 op; - switch( p->op ){ - case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break; - case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break; - case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break; - case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break; - case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break; - default: - assert( p->op==SQLITE_INDEX_CONSTRAINT_MATCH ); - op = RTREE_MATCH; - break; - } - zIdxStr[iIdx++] = op; - zIdxStr[iIdx++] = (char)(p->iColumn - 1 + '0'); - pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2); - pIdxInfo->aConstraintUsage[ii].omit = 1; + if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; + assert( x.nNode ); + for(i=1; i<(u32)argc; i+=2){ + zPath = (const char*)sqlite3_value_text(argv[i]); + bApnd = 0; + pNode = jsonLookup(&x, zPath, &bApnd, ctx); + if( x.oom ){ + sqlite3_result_error_nomem(ctx); + goto jsonSetDone; + }else if( x.nErr ){ + goto jsonSetDone; + }else if( pNode && (bApnd || bIsSet) ){ + pNode->jnFlags |= (u8)JNODE_REPLACE; + pNode->u.iReplace = i + 1; } } - - pIdxInfo->idxNum = 2; - pIdxInfo->needToFreeIdxStr = 1; - if( iIdx>0 && 0==(pIdxInfo->idxStr = sqlite3_mprintf("%s", zIdxStr)) ){ - return SQLITE_NOMEM; + if( x.aNode[0].jnFlags & JNODE_REPLACE ){ + sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]); + }else{ + jsonReturnJson(x.aNode, ctx, argv); } - - nRow = pRtree->nRowEst >> (iIdx/2); - pIdxInfo->estimatedCost = (double)6.0 * (double)nRow; - pIdxInfo->estimatedRows = nRow; - - return rc; +jsonSetDone: + jsonParseReset(&x); } /* -** Return the N-dimensional volumn of the cell stored in *p. +** json_type(JSON) +** json_type(JSON, PATH) +** +** Return the top-level "type" of a JSON string. Throw an error if +** either the JSON or PATH inputs are not well-formed. */ -static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){ - RtreeDValue area = (RtreeDValue)1; - assert( pRtree->nDim>=1 && pRtree->nDim<=5 ); -#ifndef SQLITE_RTREE_INT_ONLY - if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ - switch( pRtree->nDim ){ - case 5: area = p->aCoord[9].f - p->aCoord[8].f; - case 4: area *= p->aCoord[7].f - p->aCoord[6].f; - case 3: area *= p->aCoord[5].f - p->aCoord[4].f; - case 2: area *= p->aCoord[3].f - p->aCoord[2].f; - default: area *= p->aCoord[1].f - p->aCoord[0].f; - } - }else -#endif - { - switch( pRtree->nDim ){ - case 5: area = p->aCoord[9].i - p->aCoord[8].i; - case 4: area *= p->aCoord[7].i - p->aCoord[6].i; - case 3: area *= p->aCoord[5].i - p->aCoord[4].i; - case 2: area *= p->aCoord[3].i - p->aCoord[2].i; - default: area *= p->aCoord[1].i - p->aCoord[0].i; - } +static void jsonTypeFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p; /* The parse */ + const char *zPath; + JsonNode *pNode; + + p = jsonParseCached(ctx, argv, ctx); + if( p==0 ) return; + if( argc==2 ){ + zPath = (const char*)sqlite3_value_text(argv[1]); + pNode = jsonLookup(p, zPath, 0, ctx); + }else{ + pNode = p->aNode; + } + if( pNode ){ + sqlite3_result_text(ctx, jsonType[pNode->eType], -1, SQLITE_STATIC); } - return area; } /* -** Return the margin length of cell p. The margin length is the sum -** of the objects size in each dimension. +** json_valid(JSON) +** +** Return 1 if JSON is a well-formed JSON string according to RFC-7159. +** Return 0 otherwise. */ -static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){ - RtreeDValue margin = 0; - int ii = pRtree->nDim2 - 2; - do{ - margin += (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])); - ii -= 2; - }while( ii>=0 ); - return margin; +static void jsonValidFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p; /* The parse */ + UNUSED_PARAM(argc); + p = jsonParseCached(ctx, argv, 0); + sqlite3_result_int(ctx, p!=0); } -/* -** Store the union of cells p1 and p2 in p1. -*/ -static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ - int ii = 0; - if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ - do{ - p1->aCoord[ii].f = MIN(p1->aCoord[ii].f, p2->aCoord[ii].f); - p1->aCoord[ii+1].f = MAX(p1->aCoord[ii+1].f, p2->aCoord[ii+1].f); - ii += 2; - }while( iinDim2 ); - }else{ - do{ - p1->aCoord[ii].i = MIN(p1->aCoord[ii].i, p2->aCoord[ii].i); - p1->aCoord[ii+1].i = MAX(p1->aCoord[ii+1].i, p2->aCoord[ii+1].i); - ii += 2; - }while( iinDim2 ); - } -} +/**************************************************************************** +** Aggregate SQL function implementations +****************************************************************************/ /* -** Return true if the area covered by p2 is a subset of the area covered -** by p1. False otherwise. +** json_group_array(VALUE) +** +** Return a JSON array composed of all values in the aggregate. */ -static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ - int ii; - int isInt = (pRtree->eCoordType==RTREE_COORD_INT32); - for(ii=0; iinDim2; ii+=2){ - RtreeCoord *a1 = &p1->aCoord[ii]; - RtreeCoord *a2 = &p2->aCoord[ii]; - if( (!isInt && (a2[0].fa1[1].f)) - || ( isInt && (a2[0].ia1[1].i)) - ){ - return 0; +static void jsonArrayStep( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonString *pStr; + UNUSED_PARAM(argc); + pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr)); + if( pStr ){ + if( pStr->zBuf==0 ){ + jsonInit(pStr, ctx); + jsonAppendChar(pStr, '['); + }else{ + jsonAppendChar(pStr, ','); + pStr->pCtx = ctx; } + jsonAppendValue(pStr, argv[0]); } - return 1; +} +static void jsonArrayCompute(sqlite3_context *ctx, int isFinal){ + JsonString *pStr; + pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); + if( pStr ){ + pStr->pCtx = ctx; + jsonAppendChar(pStr, ']'); + if( pStr->bErr ){ + if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx); + assert( pStr->bStatic ); + }else if( isFinal ){ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, + pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free); + pStr->bStatic = 1; + }else{ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); + pStr->nUsed--; + } + }else{ + sqlite3_result_text(ctx, "[]", 2, SQLITE_STATIC); + } + sqlite3_result_subtype(ctx, JSON_SUBTYPE); +} +static void jsonArrayValue(sqlite3_context *ctx){ + jsonArrayCompute(ctx, 0); +} +static void jsonArrayFinal(sqlite3_context *ctx){ + jsonArrayCompute(ctx, 1); } +#ifndef SQLITE_OMIT_WINDOWFUNC /* -** Return the amount cell p would grow by if it were unioned with pCell. +** This method works for both json_group_array() and json_group_object(). +** It works by removing the first element of the group by searching forward +** to the first comma (",") that is not within a string and deleting all +** text through that comma. */ -static RtreeDValue cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){ - RtreeDValue area; - RtreeCell cell; - memcpy(&cell, p, sizeof(RtreeCell)); - area = cellArea(pRtree, &cell); - cellUnion(pRtree, &cell, pCell); - return (cellArea(pRtree, &cell)-area); -} - -static RtreeDValue cellOverlap( - Rtree *pRtree, - RtreeCell *p, - RtreeCell *aCell, - int nCell +static void jsonGroupInverse( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv ){ - int ii; - RtreeDValue overlap = RTREE_ZERO; - for(ii=0; iinDim2; jj+=2){ - RtreeDValue x1, x2; - x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj])); - x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1])); - if( x2zBuf; + for(i=1; z[i]!=',' || inStr; i++){ + assert( inUsed ); + if( z[i]=='"' ){ + inStr = !inStr; + }else if( z[i]=='\\' ){ + i++; } - overlap += o; } - return overlap; + pStr->nUsed -= i; + memmove(&z[1], &z[i+1], (size_t)pStr->nUsed-1); } +#else +# define jsonGroupInverse 0 +#endif /* -** This function implements the ChooseLeaf algorithm from Gutman[84]. -** ChooseSubTree in r*tree terminology. +** json_group_obj(NAME,VALUE) +** +** Return a JSON object composed of all names and values in the aggregate. */ -static int ChooseLeaf( - Rtree *pRtree, /* Rtree table */ - RtreeCell *pCell, /* Cell to insert into rtree */ - int iHeight, /* Height of sub-tree rooted at pCell */ - RtreeNode **ppLeaf /* OUT: Selected leaf page */ +static void jsonObjectStep( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv ){ - int rc; - int ii; - RtreeNode *pNode = 0; - rc = nodeAcquire(pRtree, 1, 0, &pNode); + JsonString *pStr; + const char *z; + u32 n; + UNUSED_PARAM(argc); + pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr)); + if( pStr ){ + if( pStr->zBuf==0 ){ + jsonInit(pStr, ctx); + jsonAppendChar(pStr, '{'); + }else{ + jsonAppendChar(pStr, ','); + pStr->pCtx = ctx; + } + z = (const char*)sqlite3_value_text(argv[0]); + n = (u32)sqlite3_value_bytes(argv[0]); + jsonAppendString(pStr, z, n); + jsonAppendChar(pStr, ':'); + jsonAppendValue(pStr, argv[1]); + } +} +static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){ + JsonString *pStr; + pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); + if( pStr ){ + jsonAppendChar(pStr, '}'); + if( pStr->bErr ){ + if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx); + assert( pStr->bStatic ); + }else if( isFinal ){ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, + pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free); + pStr->bStatic = 1; + }else{ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); + pStr->nUsed--; + } + }else{ + sqlite3_result_text(ctx, "{}", 2, SQLITE_STATIC); + } + sqlite3_result_subtype(ctx, JSON_SUBTYPE); +} +static void jsonObjectValue(sqlite3_context *ctx){ + jsonObjectCompute(ctx, 0); +} +static void jsonObjectFinal(sqlite3_context *ctx){ + jsonObjectCompute(ctx, 1); +} - for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){ - int iCell; - sqlite3_int64 iBest = 0; - RtreeDValue fMinGrowth = RTREE_ZERO; - RtreeDValue fMinArea = RTREE_ZERO; - int nCell = NCELL(pNode); - RtreeCell cell; - RtreeNode *pChild; +#ifndef SQLITE_OMIT_VIRTUALTABLE +/**************************************************************************** +** The json_each virtual table +****************************************************************************/ +typedef struct JsonEachCursor JsonEachCursor; +struct JsonEachCursor { + sqlite3_vtab_cursor base; /* Base class - must be first */ + u32 iRowid; /* The rowid */ + u32 iBegin; /* The first node of the scan */ + u32 i; /* Index in sParse.aNode[] of current row */ + u32 iEnd; /* EOF when i equals or exceeds this value */ + u8 eType; /* Type of top-level element */ + u8 bRecursive; /* True for json_tree(). False for json_each() */ + char *zJson; /* Input JSON */ + char *zRoot; /* Path by which to filter zJson */ + JsonParse sParse; /* Parse of the input JSON */ +}; - RtreeCell *aCell = 0; +/* Constructor for the json_each virtual table */ +static int jsonEachConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + sqlite3_vtab *pNew; + int rc; - /* Select the child node which will be enlarged the least if pCell - ** is inserted into it. Resolve ties by choosing the entry with - ** the smallest area. - */ - for(iCell=0; iCellpParent ){ - RtreeNode *pParent = p->pParent; - RtreeCell cell; - int iCell; +/* destructor for json_each virtual table */ +static int jsonEachDisconnect(sqlite3_vtab *pVtab){ + sqlite3_free(pVtab); + return SQLITE_OK; +} - if( nodeParentIndex(pRtree, p, &iCell) ){ - return SQLITE_CORRUPT_VTAB; - } +/* constructor for a JsonEachCursor object for json_each(). */ +static int jsonEachOpenEach(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ + JsonEachCursor *pCur; - nodeGetCell(pRtree, pParent, iCell, &cell); - if( !cellContains(pRtree, &cell, pCell) ){ - cellUnion(pRtree, &cell, pCell); - nodeOverwriteCell(pRtree, pParent, &cell, iCell); - } - - p = pParent; - } + UNUSED_PARAM(p); + pCur = sqlite3_malloc( sizeof(*pCur) ); + if( pCur==0 ) return SQLITE_NOMEM; + memset(pCur, 0, sizeof(*pCur)); + *ppCursor = &pCur->base; return SQLITE_OK; } -/* -** Write mapping (iRowid->iNode) to the _rowid table. -*/ -static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64 iNode){ - sqlite3_bind_int64(pRtree->pWriteRowid, 1, iRowid); - sqlite3_bind_int64(pRtree->pWriteRowid, 2, iNode); - sqlite3_step(pRtree->pWriteRowid); - return sqlite3_reset(pRtree->pWriteRowid); +/* constructor for a JsonEachCursor object for json_tree(). */ +static int jsonEachOpenTree(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ + int rc = jsonEachOpenEach(p, ppCursor); + if( rc==SQLITE_OK ){ + JsonEachCursor *pCur = (JsonEachCursor*)*ppCursor; + pCur->bRecursive = 1; + } + return rc; } -/* -** Write mapping (iNode->iPar) to the _parent table. -*/ -static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64 iPar){ - sqlite3_bind_int64(pRtree->pWriteParent, 1, iNode); - sqlite3_bind_int64(pRtree->pWriteParent, 2, iPar); - sqlite3_step(pRtree->pWriteParent); - return sqlite3_reset(pRtree->pWriteParent); +/* Reset a JsonEachCursor back to its original state. Free any memory +** held. */ +static void jsonEachCursorReset(JsonEachCursor *p){ + sqlite3_free(p->zJson); + sqlite3_free(p->zRoot); + jsonParseReset(&p->sParse); + p->iRowid = 0; + p->i = 0; + p->iEnd = 0; + p->eType = 0; + p->zJson = 0; + p->zRoot = 0; } -static int rtreeInsertCell(Rtree *, RtreeNode *, RtreeCell *, int); - - -/* -** Arguments aIdx, aDistance and aSpare all point to arrays of size -** nIdx. The aIdx array contains the set of integers from 0 to -** (nIdx-1) in no particular order. This function sorts the values -** in aIdx according to the indexed values in aDistance. For -** example, assuming the inputs: -** -** aIdx = { 0, 1, 2, 3 } -** aDistance = { 5.0, 2.0, 7.0, 6.0 } -** -** this function sets the aIdx array to contain: -** -** aIdx = { 0, 1, 2, 3 } -** -** The aSpare array is used as temporary working space by the -** sorting algorithm. -*/ -static void SortByDistance( - int *aIdx, - int nIdx, - RtreeDValue *aDistance, - int *aSpare -){ - if( nIdx>1 ){ - int iLeft = 0; - int iRight = 0; - - int nLeft = nIdx/2; - int nRight = nIdx-nLeft; - int *aLeft = aIdx; - int *aRight = &aIdx[nLeft]; - - SortByDistance(aLeft, nLeft, aDistance, aSpare); - SortByDistance(aRight, nRight, aDistance, aSpare); +/* Destructor for a jsonEachCursor object */ +static int jsonEachClose(sqlite3_vtab_cursor *cur){ + JsonEachCursor *p = (JsonEachCursor*)cur; + jsonEachCursorReset(p); + sqlite3_free(cur); + return SQLITE_OK; +} - memcpy(aSpare, aLeft, sizeof(int)*nLeft); - aLeft = aSpare; +/* Return TRUE if the jsonEachCursor object has been advanced off the end +** of the JSON object */ +static int jsonEachEof(sqlite3_vtab_cursor *cur){ + JsonEachCursor *p = (JsonEachCursor*)cur; + return p->i >= p->iEnd; +} - while( iLeftbRecursive ){ + if( p->sParse.aNode[p->i].jnFlags & JNODE_LABEL ) p->i++; + p->i++; + p->iRowid++; + if( p->iiEnd ){ + u32 iUp = p->sParse.aUp[p->i]; + JsonNode *pUp = &p->sParse.aNode[iUp]; + p->eType = pUp->eType; + if( pUp->eType==JSON_ARRAY ){ + if( iUp==p->i-1 ){ + pUp->u.iKey = 0; }else{ - aIdx[iLeft+iRight] = aRight[iRight]; - iRight++; + pUp->u.iKey++; } } } - -#if 0 - /* Check that the sort worked */ - { - int jj; - for(jj=1; jjeType ){ + case JSON_ARRAY: { + p->i += jsonNodeSize(&p->sParse.aNode[p->i]); + p->iRowid++; + break; } - } -#endif - } -} - -/* -** Arguments aIdx, aCell and aSpare all point to arrays of size -** nIdx. The aIdx array contains the set of integers from 0 to -** (nIdx-1) in no particular order. This function sorts the values -** in aIdx according to dimension iDim of the cells in aCell. The -** minimum value of dimension iDim is considered first, the -** maximum used to break ties. -** -** The aSpare array is used as temporary working space by the -** sorting algorithm. -*/ -static void SortByDimension( - Rtree *pRtree, - int *aIdx, - int nIdx, - int iDim, - RtreeCell *aCell, - int *aSpare -){ - if( nIdx>1 ){ - - int iLeft = 0; - int iRight = 0; - - int nLeft = nIdx/2; - int nRight = nIdx-nLeft; - int *aLeft = aIdx; - int *aRight = &aIdx[nLeft]; - - SortByDimension(pRtree, aLeft, nLeft, iDim, aCell, aSpare); - SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare); - - memcpy(aSpare, aLeft, sizeof(int)*nLeft); - aLeft = aSpare; - while( iLefti += 1 + jsonNodeSize(&p->sParse.aNode[p->i+1]); + p->iRowid++; + break; } - } - -#if 0 - /* Check that the sort worked */ - { - int jj; - for(jj=1; jji = p->iEnd; + break; } } -#endif } + return SQLITE_OK; } -/* -** Implementation of the R*-tree variant of SplitNode from Beckman[1990]. +/* Append the name of the path for element i to pStr */ -static int splitNodeStartree( - Rtree *pRtree, - RtreeCell *aCell, - int nCell, - RtreeNode *pLeft, - RtreeNode *pRight, - RtreeCell *pBboxLeft, - RtreeCell *pBboxRight +static void jsonEachComputePath( + JsonEachCursor *p, /* The cursor */ + JsonString *pStr, /* Write the path here */ + u32 i /* Path to this element */ ){ - int **aaSorted; - int *aSpare; - int ii; - - int iBestDim = 0; - int iBestSplit = 0; - RtreeDValue fBestMargin = RTREE_ZERO; - - int nByte = (pRtree->nDim+1)*(sizeof(int*)+nCell*sizeof(int)); - - aaSorted = (int **)sqlite3_malloc(nByte); - if( !aaSorted ){ - return SQLITE_NOMEM; + JsonNode *pNode, *pUp; + u32 iUp; + if( i==0 ){ + jsonAppendChar(pStr, '$'); + return; } - - aSpare = &((int *)&aaSorted[pRtree->nDim])[pRtree->nDim*nCell]; - memset(aaSorted, 0, nByte); - for(ii=0; iinDim; ii++){ - int jj; - aaSorted[ii] = &((int *)&aaSorted[pRtree->nDim])[ii*nCell]; - for(jj=0; jjsParse.aUp[i]; + jsonEachComputePath(p, pStr, iUp); + pNode = &p->sParse.aNode[i]; + pUp = &p->sParse.aNode[iUp]; + if( pUp->eType==JSON_ARRAY ){ + jsonPrintf(30, pStr, "[%d]", pUp->u.iKey); + }else{ + assert( pUp->eType==JSON_OBJECT ); + if( (pNode->jnFlags & JNODE_LABEL)==0 ) pNode--; + assert( pNode->eType==JSON_STRING ); + assert( pNode->jnFlags & JNODE_LABEL ); + jsonPrintf(pNode->n+1, pStr, ".%.*s", pNode->n-2, pNode->u.zJContent+1); } +} - for(ii=0; iinDim; ii++){ - RtreeDValue margin = RTREE_ZERO; - RtreeDValue fBestOverlap = RTREE_ZERO; - RtreeDValue fBestArea = RTREE_ZERO; - int iBestLeft = 0; - int nLeft; - - for( - nLeft=RTREE_MINCELLS(pRtree); - nLeft<=(nCell-RTREE_MINCELLS(pRtree)); - nLeft++ - ){ - RtreeCell left; - RtreeCell right; - int kk; - RtreeDValue overlap; - RtreeDValue area; - - memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell)); - memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell)); - for(kk=1; kk<(nCell-1); kk++){ - if( kksParse.aNode[p->i]; + switch( i ){ + case JEACH_KEY: { + if( p->i==0 ) break; + if( p->eType==JSON_OBJECT ){ + jsonReturn(pThis, ctx, 0); + }else if( p->eType==JSON_ARRAY ){ + u32 iKey; + if( p->bRecursive ){ + if( p->iRowid==0 ) break; + iKey = p->sParse.aNode[p->sParse.aUp[p->i]].u.iKey; }else{ - cellUnion(pRtree, &right, &aCell[aaSorted[ii][kk]]); + iKey = p->iRowid; } + sqlite3_result_int64(ctx, (sqlite3_int64)iKey); } - margin += cellMargin(pRtree, &left); - margin += cellMargin(pRtree, &right); - overlap = cellOverlap(pRtree, &left, &right, 1); - area = cellArea(pRtree, &left) + cellArea(pRtree, &right); - if( (nLeft==RTREE_MINCELLS(pRtree)) - || (overlapjnFlags & JNODE_LABEL ) pThis++; + jsonReturn(pThis, ctx, 0); + break; + } + case JEACH_TYPE: { + if( pThis->jnFlags & JNODE_LABEL ) pThis++; + sqlite3_result_text(ctx, jsonType[pThis->eType], -1, SQLITE_STATIC); + break; + } + case JEACH_ATOM: { + if( pThis->jnFlags & JNODE_LABEL ) pThis++; + if( pThis->eType>=JSON_ARRAY ) break; + jsonReturn(pThis, ctx, 0); + break; + } + case JEACH_ID: { + sqlite3_result_int64(ctx, + (sqlite3_int64)p->i + ((pThis->jnFlags & JNODE_LABEL)!=0)); + break; + } + case JEACH_PARENT: { + if( p->i>p->iBegin && p->bRecursive ){ + sqlite3_result_int64(ctx, (sqlite3_int64)p->sParse.aUp[p->i]); } + break; } - - if( ii==0 || marginbRecursive ){ + jsonEachComputePath(p, &x, p->i); + }else{ + if( p->zRoot ){ + jsonAppendRaw(&x, p->zRoot, (int)strlen(p->zRoot)); + }else{ + jsonAppendChar(&x, '$'); + } + if( p->eType==JSON_ARRAY ){ + jsonPrintf(30, &x, "[%d]", p->iRowid); + }else if( p->eType==JSON_OBJECT ){ + jsonPrintf(pThis->n, &x, ".%.*s", pThis->n-2, pThis->u.zJContent+1); + } + } + jsonResult(&x); + break; + } + case JEACH_PATH: { + if( p->bRecursive ){ + JsonString x; + jsonInit(&x, ctx); + jsonEachComputePath(p, &x, p->sParse.aUp[p->i]); + jsonResult(&x); + break; + } + /* For json_each() path and root are the same so fall through + ** into the root case */ + } + default: { + const char *zRoot = p->zRoot; + if( zRoot==0 ) zRoot = "$"; + sqlite3_result_text(ctx, zRoot, -1, SQLITE_STATIC); + break; + } + case JEACH_JSON: { + assert( i==JEACH_JSON ); + sqlite3_result_text(ctx, p->sParse.zJson, -1, SQLITE_STATIC); + break; } } - - memcpy(pBboxLeft, &aCell[aaSorted[iBestDim][0]], sizeof(RtreeCell)); - memcpy(pBboxRight, &aCell[aaSorted[iBestDim][iBestSplit]], sizeof(RtreeCell)); - for(ii=0; ii0 ){ - RtreeNode *pChild = nodeHashLookup(pRtree, iRowid); - if( pChild ){ - nodeRelease(pRtree, pChild->pParent); - nodeReference(pNode); - pChild->pParent = pNode; - } - } - return xSetMapping(pRtree, iRowid, pNode->iNode); +/* Return the current rowid value */ +static int jsonEachRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ + JsonEachCursor *p = (JsonEachCursor*)cur; + *pRowid = p->iRowid; + return SQLITE_OK; } -static int SplitNode( - Rtree *pRtree, - RtreeNode *pNode, - RtreeCell *pCell, - int iHeight +/* The query strategy is to look for an equality constraint on the json +** column. Without such a constraint, the table cannot operate. idxNum is +** 1 if the constraint is found, 3 if the constraint and zRoot are found, +** and 0 otherwise. +*/ +static int jsonEachBestIndex( + sqlite3_vtab *tab, + sqlite3_index_info *pIdxInfo ){ int i; - int newCellIsRight = 0; - - int rc = SQLITE_OK; - int nCell = NCELL(pNode); - RtreeCell *aCell; - int *aiUsed; - - RtreeNode *pLeft = 0; - RtreeNode *pRight = 0; - - RtreeCell leftbbox; - RtreeCell rightbbox; + int jsonIdx = -1; + int rootIdx = -1; + const struct sqlite3_index_constraint *pConstraint; - /* Allocate an array and populate it with a copy of pCell and - ** all cells from node pLeft. Then zero the original node. - */ - aCell = sqlite3_malloc((sizeof(RtreeCell)+sizeof(int))*(nCell+1)); - if( !aCell ){ - rc = SQLITE_NOMEM; - goto splitnode_out; - } - aiUsed = (int *)&aCell[nCell+1]; - memset(aiUsed, 0, sizeof(int)*(nCell+1)); - for(i=0; iaConstraint; + for(i=0; inConstraint; i++, pConstraint++){ + if( pConstraint->usable==0 ) continue; + if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; + switch( pConstraint->iColumn ){ + case JEACH_JSON: jsonIdx = i; break; + case JEACH_ROOT: rootIdx = i; break; + default: /* no-op */ break; + } } - nodeZero(pRtree, pNode); - memcpy(&aCell[nCell], pCell, sizeof(RtreeCell)); - nCell++; - - if( pNode->iNode==1 ){ - pRight = nodeNew(pRtree, pNode); - pLeft = nodeNew(pRtree, pNode); - pRtree->iDepth++; - pNode->isDirty = 1; - writeInt16(pNode->zData, pRtree->iDepth); + if( jsonIdx<0 ){ + pIdxInfo->idxNum = 0; + pIdxInfo->estimatedCost = 1e99; }else{ - pLeft = pNode; - pRight = nodeNew(pRtree, pLeft->pParent); - pLeft->nRef++; - } - - if( !pLeft || !pRight ){ - rc = SQLITE_NOMEM; - goto splitnode_out; - } - - memset(pLeft->zData, 0, pRtree->iNodeSize); - memset(pRight->zData, 0, pRtree->iNodeSize); - - rc = splitNodeStartree(pRtree, aCell, nCell, pLeft, pRight, - &leftbbox, &rightbbox); - if( rc!=SQLITE_OK ){ - goto splitnode_out; - } - - /* Ensure both child nodes have node numbers assigned to them by calling - ** nodeWrite(). Node pRight always needs a node number, as it was created - ** by nodeNew() above. But node pLeft sometimes already has a node number. - ** In this case avoid the all to nodeWrite(). - */ - if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight)) - || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft))) - ){ - goto splitnode_out; + pIdxInfo->estimatedCost = 1.0; + pIdxInfo->aConstraintUsage[jsonIdx].argvIndex = 1; + pIdxInfo->aConstraintUsage[jsonIdx].omit = 1; + if( rootIdx<0 ){ + pIdxInfo->idxNum = 1; + }else{ + pIdxInfo->aConstraintUsage[rootIdx].argvIndex = 2; + pIdxInfo->aConstraintUsage[rootIdx].omit = 1; + pIdxInfo->idxNum = 3; + } } + return SQLITE_OK; +} - rightbbox.iRowid = pRight->iNode; - leftbbox.iRowid = pLeft->iNode; +/* Start a search on a new JSON string */ +static int jsonEachFilter( + sqlite3_vtab_cursor *cur, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + JsonEachCursor *p = (JsonEachCursor*)cur; + const char *z; + const char *zRoot = 0; + sqlite3_int64 n; - if( pNode->iNode==1 ){ - rc = rtreeInsertCell(pRtree, pLeft->pParent, &leftbbox, iHeight+1); - if( rc!=SQLITE_OK ){ - goto splitnode_out; + UNUSED_PARAM(idxStr); + UNUSED_PARAM(argc); + jsonEachCursorReset(p); + if( idxNum==0 ) return SQLITE_OK; + z = (const char*)sqlite3_value_text(argv[0]); + if( z==0 ) return SQLITE_OK; + n = sqlite3_value_bytes(argv[0]); + p->zJson = sqlite3_malloc64( n+1 ); + if( p->zJson==0 ) return SQLITE_NOMEM; + memcpy(p->zJson, z, (size_t)n+1); + if( jsonParse(&p->sParse, 0, p->zJson) ){ + int rc = SQLITE_NOMEM; + if( p->sParse.oom==0 ){ + sqlite3_free(cur->pVtab->zErrMsg); + cur->pVtab->zErrMsg = sqlite3_mprintf("malformed JSON"); + if( cur->pVtab->zErrMsg ) rc = SQLITE_ERROR; } + jsonEachCursorReset(p); + return rc; + }else if( p->bRecursive && jsonParseFindParents(&p->sParse) ){ + jsonEachCursorReset(p); + return SQLITE_NOMEM; }else{ - RtreeNode *pParent = pLeft->pParent; - int iCell; - rc = nodeParentIndex(pRtree, pLeft, &iCell); - if( rc==SQLITE_OK ){ - nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell); - rc = AdjustTree(pRtree, pParent, &leftbbox); - } - if( rc!=SQLITE_OK ){ - goto splitnode_out; - } - } - if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){ - goto splitnode_out; - } - - for(i=0; iiRowid ){ - newCellIsRight = 1; - } - if( rc!=SQLITE_OK ){ - goto splitnode_out; - } - } - if( pNode->iNode==1 ){ - for(i=0; izRoot = sqlite3_malloc64( n+1 ); + if( p->zRoot==0 ) return SQLITE_NOMEM; + memcpy(p->zRoot, zRoot, (size_t)n+1); + if( zRoot[0]!='$' ){ + zErr = zRoot; + }else{ + pNode = jsonLookupStep(&p->sParse, 0, p->zRoot+1, 0, &zErr); + } + if( zErr ){ + sqlite3_free(cur->pVtab->zErrMsg); + cur->pVtab->zErrMsg = jsonPathSyntaxError(zErr); + jsonEachCursorReset(p); + return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM; + }else if( pNode==0 ){ + return SQLITE_OK; } + }else{ + pNode = p->sParse.aNode; } - }else if( newCellIsRight==0 ){ - rc = updateMapping(pRtree, pCell->iRowid, pLeft, iHeight); - } - - if( rc==SQLITE_OK ){ - rc = nodeRelease(pRtree, pRight); - pRight = 0; - } - if( rc==SQLITE_OK ){ - rc = nodeRelease(pRtree, pLeft); - pLeft = 0; - } - -splitnode_out: - nodeRelease(pRtree, pRight); - nodeRelease(pRtree, pLeft); - sqlite3_free(aCell); - return rc; -} - -/* -** If node pLeaf is not the root of the r-tree and its pParent pointer is -** still NULL, load all ancestor nodes of pLeaf into memory and populate -** the pLeaf->pParent chain all the way up to the root node. -** -** This operation is required when a row is deleted (or updated - an update -** is implemented as a delete followed by an insert). SQLite provides the -** rowid of the row to delete, which can be used to find the leaf on which -** the entry resides (argument pLeaf). Once the leaf is located, this -** function is called to determine its ancestry. -*/ -static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){ - int rc = SQLITE_OK; - RtreeNode *pChild = pLeaf; - while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){ - int rc2 = SQLITE_OK; /* sqlite3_reset() return code */ - sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode); - rc = sqlite3_step(pRtree->pReadParent); - if( rc==SQLITE_ROW ){ - RtreeNode *pTest; /* Used to test for reference loops */ - i64 iNode; /* Node number of parent node */ - - /* Before setting pChild->pParent, test that we are not creating a - ** loop of references (as we would if, say, pChild==pParent). We don't - ** want to do this as it leads to a memory leak when trying to delete - ** the referenced counted node structures. - */ - iNode = sqlite3_column_int64(pRtree->pReadParent, 0); - for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent); - if( !pTest ){ - rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent); + p->iBegin = p->i = (int)(pNode - p->sParse.aNode); + p->eType = pNode->eType; + if( p->eType>=JSON_ARRAY ){ + pNode->u.iKey = 0; + p->iEnd = p->i + pNode->n + 1; + if( p->bRecursive ){ + p->eType = p->sParse.aNode[p->sParse.aUp[p->i]].eType; + if( p->i>0 && (p->sParse.aNode[p->i-1].jnFlags & JNODE_LABEL)!=0 ){ + p->i--; + } + }else{ + p->i++; } + }else{ + p->iEnd = p->i+1; } - rc = sqlite3_reset(pRtree->pReadParent); - if( rc==SQLITE_OK ) rc = rc2; - if( rc==SQLITE_OK && !pChild->pParent ) rc = SQLITE_CORRUPT_VTAB; - pChild = pChild->pParent; } - return rc; + return SQLITE_OK; } -static int deleteCell(Rtree *, RtreeNode *, int, int); +/* The methods of the json_each virtual table */ +static sqlite3_module jsonEachModule = { + 0, /* iVersion */ + 0, /* xCreate */ + jsonEachConnect, /* xConnect */ + jsonEachBestIndex, /* xBestIndex */ + jsonEachDisconnect, /* xDisconnect */ + 0, /* xDestroy */ + jsonEachOpenEach, /* xOpen - open a cursor */ + jsonEachClose, /* xClose - close a cursor */ + jsonEachFilter, /* xFilter - configure scan constraints */ + jsonEachNext, /* xNext - advance a cursor */ + jsonEachEof, /* xEof - check for end of scan */ + jsonEachColumn, /* xColumn - read data */ + jsonEachRowid, /* xRowid - read data */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindMethod */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0 /* xRollbackTo */ +}; -static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){ - int rc; - int rc2; - RtreeNode *pParent = 0; - int iCell; +/* The methods of the json_tree virtual table. */ +static sqlite3_module jsonTreeModule = { + 0, /* iVersion */ + 0, /* xCreate */ + jsonEachConnect, /* xConnect */ + jsonEachBestIndex, /* xBestIndex */ + jsonEachDisconnect, /* xDisconnect */ + 0, /* xDestroy */ + jsonEachOpenTree, /* xOpen - open a cursor */ + jsonEachClose, /* xClose - close a cursor */ + jsonEachFilter, /* xFilter - configure scan constraints */ + jsonEachNext, /* xNext - advance a cursor */ + jsonEachEof, /* xEof - check for end of scan */ + jsonEachColumn, /* xColumn - read data */ + jsonEachRowid, /* xRowid - read data */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindMethod */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0 /* xRollbackTo */ +}; +#endif /* SQLITE_OMIT_VIRTUALTABLE */ - assert( pNode->nRef==1 ); +/**************************************************************************** +** The following routines are the only publically visible identifiers in this +** file. Call the following routines in order to register the various SQL +** functions and the virtual table implemented by this file. +****************************************************************************/ - /* Remove the entry in the parent cell. */ - rc = nodeParentIndex(pRtree, pNode, &iCell); - if( rc==SQLITE_OK ){ - pParent = pNode->pParent; - pNode->pParent = 0; - rc = deleteCell(pRtree, pParent, iCell, iHeight+1); - } - rc2 = nodeRelease(pRtree, pParent); - if( rc==SQLITE_OK ){ - rc = rc2; - } - if( rc!=SQLITE_OK ){ - return rc; - } +SQLITE_PRIVATE int sqlite3Json1Init(sqlite3 *db){ + int rc = SQLITE_OK; + unsigned int i; + static const struct { + const char *zName; + int nArg; + int flag; + void (*xFunc)(sqlite3_context*,int,sqlite3_value**); + } aFunc[] = { + { "json", 1, 0, jsonRemoveFunc }, + { "json_array", -1, 0, jsonArrayFunc }, + { "json_array_length", 1, 0, jsonArrayLengthFunc }, + { "json_array_length", 2, 0, jsonArrayLengthFunc }, + { "json_extract", -1, 0, jsonExtractFunc }, + { "json_insert", -1, 0, jsonSetFunc }, + { "json_object", -1, 0, jsonObjectFunc }, + { "json_patch", 2, 0, jsonPatchFunc }, + { "json_quote", 1, 0, jsonQuoteFunc }, + { "json_remove", -1, 0, jsonRemoveFunc }, + { "json_replace", -1, 0, jsonReplaceFunc }, + { "json_set", -1, 1, jsonSetFunc }, + { "json_type", 1, 0, jsonTypeFunc }, + { "json_type", 2, 0, jsonTypeFunc }, + { "json_valid", 1, 0, jsonValidFunc }, - /* Remove the xxx_node entry. */ - sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode); - sqlite3_step(pRtree->pDeleteNode); - if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteNode)) ){ - return rc; +#if SQLITE_DEBUG + /* DEBUG and TESTING functions */ + { "json_parse", 1, 0, jsonParseFunc }, + { "json_test1", 1, 0, jsonTest1Func }, +#endif + }; + static const struct { + const char *zName; + int nArg; + void (*xStep)(sqlite3_context*,int,sqlite3_value**); + void (*xFinal)(sqlite3_context*); + void (*xValue)(sqlite3_context*); + } aAgg[] = { + { "json_group_array", 1, + jsonArrayStep, jsonArrayFinal, jsonArrayValue }, + { "json_group_object", 2, + jsonObjectStep, jsonObjectFinal, jsonObjectValue }, + }; +#ifndef SQLITE_OMIT_VIRTUALTABLE + static const struct { + const char *zName; + sqlite3_module *pModule; + } aMod[] = { + { "json_each", &jsonEachModule }, + { "json_tree", &jsonTreeModule }, + }; +#endif + for(i=0; ipDeleteParent, 1, pNode->iNode); - sqlite3_step(pRtree->pDeleteParent); - if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteParent)) ){ - return rc; +#ifndef SQLITE_OMIT_WINDOWFUNC + for(i=0; iiNode = iHeight; - pNode->pNext = pRtree->pDeleted; - pNode->nRef++; - pRtree->pDeleted = pNode; - - return SQLITE_OK; -} - -static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){ - RtreeNode *pParent = pNode->pParent; - int rc = SQLITE_OK; - if( pParent ){ - int ii; - int nCell = NCELL(pNode); - RtreeCell box; /* Bounding box for pNode */ - nodeGetCell(pRtree, pNode, 0, &box); - for(ii=1; iiiNode; - rc = nodeParentIndex(pRtree, pNode, &ii); - if( rc==SQLITE_OK ){ - nodeOverwriteCell(pRtree, pParent, &box, ii); - rc = fixBoundingBox(pRtree, pParent); - } +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + for(i=0; ipParent; - assert( pParent || pNode->iNode==1 ); - if( pParent ){ - if( NCELL(pNode)nDim; iDim++){ - aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2]); - aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2+1]); - } - } - for(iDim=0; iDimnDim; iDim++){ - aCenterCoord[iDim] = (aCenterCoord[iDim]/(nCell*(RtreeDValue)2)); - } +/* +** Database Format of R-Tree Tables +** -------------------------------- +** +** The data structure for a single virtual r-tree table is stored in three +** native SQLite tables declared as follows. In each case, the '%' character +** in the table name is replaced with the user-supplied name of the r-tree +** table. +** +** CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data BLOB) +** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER) +** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER, ...) +** +** The data for each node of the r-tree structure is stored in the %_node +** table. For each node that is not the root node of the r-tree, there is +** an entry in the %_parent table associating the node with its parent. +** And for each row of data in the table, there is an entry in the %_rowid +** table that maps from the entries rowid to the id of the node that it +** is stored on. If the r-tree contains auxiliary columns, those are stored +** on the end of the %_rowid table. +** +** The root node of an r-tree always exists, even if the r-tree table is +** empty. The nodeno of the root node is always 1. All other nodes in the +** table must be the same size as the root node. The content of each node +** is formatted as follows: +** +** 1. If the node is the root node (node 1), then the first 2 bytes +** of the node contain the tree depth as a big-endian integer. +** For non-root nodes, the first 2 bytes are left unused. +** +** 2. The next 2 bytes contain the number of entries currently +** stored in the node. +** +** 3. The remainder of the node contains the node entries. Each entry +** consists of a single 8-byte integer followed by an even number +** of 4-byte coordinates. For leaf nodes the integer is the rowid +** of a record. For internal nodes it is the node number of a +** child page. +*/ - for(ii=0; iinDim; iDim++){ - RtreeDValue coord = (DCOORD(aCell[ii].aCoord[iDim*2+1]) - - DCOORD(aCell[ii].aCoord[iDim*2])); - aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]); - } - } +#if !defined(SQLITE_CORE) \ + || (defined(SQLITE_ENABLE_RTREE) && !defined(SQLITE_OMIT_VIRTUALTABLE)) - SortByDistance(aOrder, nCell, aDistance, aSpare); - nodeZero(pRtree, pNode); +#ifndef SQLITE_CORE +/* #include "sqlite3ext.h" */ + SQLITE_EXTENSION_INIT1 +#else +/* #include "sqlite3.h" */ +#endif - for(ii=0; rc==SQLITE_OK && ii<(nCell-(RTREE_MINCELLS(pRtree)+1)); ii++){ - RtreeCell *p = &aCell[aOrder[ii]]; - nodeInsertCell(pRtree, pNode, p); - if( p->iRowid==pCell->iRowid ){ - if( iHeight==0 ){ - rc = rowidWrite(pRtree, p->iRowid, pNode->iNode); - }else{ - rc = parentWrite(pRtree, p->iRowid, pNode->iNode); - } - } - } - if( rc==SQLITE_OK ){ - rc = fixBoundingBox(pRtree, pNode); - } - for(; rc==SQLITE_OK && iiiNode currently contains - ** the height of the sub-tree headed by the cell. - */ - RtreeNode *pInsert; - RtreeCell *p = &aCell[aOrder[ii]]; - rc = ChooseLeaf(pRtree, p, iHeight, &pInsert); - if( rc==SQLITE_OK ){ - int rc2; - rc = rtreeInsertCell(pRtree, pInsert, p, iHeight); - rc2 = nodeRelease(pRtree, pInsert); - if( rc==SQLITE_OK ){ - rc = rc2; - } - } - } +/* #include */ +/* #include */ +/* #include */ - sqlite3_free(aCell); - return rc; -} +#ifndef SQLITE_AMALGAMATION +#include "sqlite3rtree.h" +typedef sqlite3_int64 i64; +typedef sqlite3_uint64 u64; +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +#endif -/* -** Insert cell pCell into node pNode. Node pNode is the head of a -** subtree iHeight high (leaf nodes have iHeight==0). +/* The following macro is used to suppress compiler warnings. */ -static int rtreeInsertCell( - Rtree *pRtree, - RtreeNode *pNode, - RtreeCell *pCell, - int iHeight -){ - int rc = SQLITE_OK; - if( iHeight>0 ){ - RtreeNode *pChild = nodeHashLookup(pRtree, pCell->iRowid); - if( pChild ){ - nodeRelease(pRtree, pChild->pParent); - nodeReference(pNode); - pChild->pParent = pNode; - } - } - if( nodeInsertCell(pRtree, pNode, pCell) ){ - if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){ - rc = SplitNode(pRtree, pNode, pCell, iHeight); - }else{ - pRtree->iReinsertHeight = iHeight; - rc = Reinsert(pRtree, pNode, pCell, iHeight); - } - }else{ - rc = AdjustTree(pRtree, pNode, pCell); - if( rc==SQLITE_OK ){ - if( iHeight==0 ){ - rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode); - }else{ - rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode); - } - } - } - return rc; -} +#ifndef UNUSED_PARAMETER +# define UNUSED_PARAMETER(x) (void)(x) +#endif -static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){ - int ii; - int rc = SQLITE_OK; - int nCell = NCELL(pNode); +typedef struct Rtree Rtree; +typedef struct RtreeCursor RtreeCursor; +typedef struct RtreeNode RtreeNode; +typedef struct RtreeCell RtreeCell; +typedef struct RtreeConstraint RtreeConstraint; +typedef struct RtreeMatchArg RtreeMatchArg; +typedef struct RtreeGeomCallback RtreeGeomCallback; +typedef union RtreeCoord RtreeCoord; +typedef struct RtreeSearchPoint RtreeSearchPoint; - for(ii=0; rc==SQLITE_OK && iiiNode currently contains - ** the height of the sub-tree headed by the cell. - */ - rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert); - if( rc==SQLITE_OK ){ - int rc2; - rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode); - rc2 = nodeRelease(pRtree, pInsert); - if( rc==SQLITE_OK ){ - rc = rc2; - } - } - } - return rc; -} +/* Maximum number of auxiliary columns */ +#define RTREE_MAX_AUX_COLUMN 100 -/* -** Select a currently unused rowid for a new r-tree record. +/* Size of hash table Rtree.aHash. This hash table is not expected to +** ever contain very many entries, so a fixed number of buckets is +** used. */ -static int newRowid(Rtree *pRtree, i64 *piRowid){ - int rc; - sqlite3_bind_null(pRtree->pWriteRowid, 1); - sqlite3_bind_null(pRtree->pWriteRowid, 2); - sqlite3_step(pRtree->pWriteRowid); - rc = sqlite3_reset(pRtree->pWriteRowid); - *piRowid = sqlite3_last_insert_rowid(pRtree->db); - return rc; -} +#define HASHSIZE 97 -/* -** Remove the entry with rowid=iDelete from the r-tree structure. +/* The xBestIndex method of this virtual table requires an estimate of +** the number of rows in the virtual table to calculate the costs of +** various strategies. If possible, this estimate is loaded from the +** sqlite_stat1 table (with RTREE_MIN_ROWEST as a hard-coded minimum). +** Otherwise, if no sqlite_stat1 entry is available, use +** RTREE_DEFAULT_ROWEST. */ -static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){ - int rc; /* Return code */ - RtreeNode *pLeaf = 0; /* Leaf node containing record iDelete */ - int iCell; /* Index of iDelete cell in pLeaf */ - RtreeNode *pRoot = 0; /* Root node of rtree structure */ - +#define RTREE_DEFAULT_ROWEST 1048576 +#define RTREE_MIN_ROWEST 100 - /* Obtain a reference to the root node to initialize Rtree.iDepth */ - rc = nodeAcquire(pRtree, 1, 0, &pRoot); +/* +** An rtree virtual-table object. +*/ +struct Rtree { + sqlite3_vtab base; /* Base class. Must be first */ + sqlite3 *db; /* Host database connection */ + int iNodeSize; /* Size in bytes of each node in the node table */ + u8 nDim; /* Number of dimensions */ + u8 nDim2; /* Twice the number of dimensions */ + u8 eCoordType; /* RTREE_COORD_REAL32 or RTREE_COORD_INT32 */ + u8 nBytesPerCell; /* Bytes consumed per cell */ + u8 inWrTrans; /* True if inside write transaction */ + u8 nAux; /* # of auxiliary columns in %_rowid */ + u8 nAuxNotNull; /* Number of initial not-null aux columns */ + int iDepth; /* Current depth of the r-tree structure */ + char *zDb; /* Name of database containing r-tree table */ + char *zName; /* Name of r-tree table */ + u32 nBusy; /* Current number of users of this structure */ + i64 nRowEst; /* Estimated number of rows in this table */ + u32 nCursor; /* Number of open cursors */ + u32 nNodeRef; /* Number RtreeNodes with positive nRef */ + char *zReadAuxSql; /* SQL for statement to read aux data */ - /* Obtain a reference to the leaf node that contains the entry - ** about to be deleted. + /* List of nodes removed during a CondenseTree operation. List is + ** linked together via the pointer normally used for hash chains - + ** RtreeNode.pNext. RtreeNode.iNode stores the depth of the sub-tree + ** headed by the node (leaf nodes have RtreeNode.iNode==0). */ - if( rc==SQLITE_OK ){ - rc = findLeafNode(pRtree, iDelete, &pLeaf, 0); - } + RtreeNode *pDeleted; + int iReinsertHeight; /* Height of sub-trees Reinsert() has run on */ - /* Delete the cell in question from the leaf node. */ - if( rc==SQLITE_OK ){ - int rc2; - rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell); - if( rc==SQLITE_OK ){ - rc = deleteCell(pRtree, pLeaf, iCell, 0); - } - rc2 = nodeRelease(pRtree, pLeaf); - if( rc==SQLITE_OK ){ - rc = rc2; - } - } + /* Blob I/O on xxx_node */ + sqlite3_blob *pNodeBlob; - /* Delete the corresponding entry in the _rowid table. */ - if( rc==SQLITE_OK ){ - sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete); - sqlite3_step(pRtree->pDeleteRowid); - rc = sqlite3_reset(pRtree->pDeleteRowid); - } + /* Statements to read/write/delete a record from xxx_node */ + sqlite3_stmt *pWriteNode; + sqlite3_stmt *pDeleteNode; - /* Check if the root node now has exactly one child. If so, remove - ** it, schedule the contents of the child for reinsertion and - ** reduce the tree height by one. - ** - ** This is equivalent to copying the contents of the child into - ** the root node (the operation that Gutman's paper says to perform - ** in this scenario). - */ - if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){ - int rc2; - RtreeNode *pChild = 0; - i64 iChild = nodeGetRowid(pRtree, pRoot, 0); - rc = nodeAcquire(pRtree, iChild, pRoot, &pChild); - if( rc==SQLITE_OK ){ - rc = removeNode(pRtree, pChild, pRtree->iDepth-1); - } - rc2 = nodeRelease(pRtree, pChild); - if( rc==SQLITE_OK ) rc = rc2; - if( rc==SQLITE_OK ){ - pRtree->iDepth--; - writeInt16(pRoot->zData, pRtree->iDepth); - pRoot->isDirty = 1; - } - } + /* Statements to read/write/delete a record from xxx_rowid */ + sqlite3_stmt *pReadRowid; + sqlite3_stmt *pWriteRowid; + sqlite3_stmt *pDeleteRowid; - /* Re-insert the contents of any underfull nodes removed from the tree. */ - for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){ - if( rc==SQLITE_OK ){ - rc = reinsertNodeContent(pRtree, pLeaf); - } - pRtree->pDeleted = pLeaf->pNext; - pRtree->nNodeRef--; - sqlite3_free(pLeaf); - } + /* Statements to read/write/delete a record from xxx_parent */ + sqlite3_stmt *pReadParent; + sqlite3_stmt *pWriteParent; + sqlite3_stmt *pDeleteParent; - /* Release the reference to the root node. */ - if( rc==SQLITE_OK ){ - rc = nodeRelease(pRtree, pRoot); - }else{ - nodeRelease(pRtree, pRoot); - } + /* Statement for writing to the "aux:" fields, if there are any */ + sqlite3_stmt *pWriteAux; - return rc; -} + RtreeNode *aHash[HASHSIZE]; /* Hash table of in-memory nodes. */ +}; + +/* Possible values for Rtree.eCoordType: */ +#define RTREE_COORD_REAL32 0 +#define RTREE_COORD_INT32 1 /* -** Rounding constants for float->double conversion. +** If SQLITE_RTREE_INT_ONLY is defined, then this virtual table will +** only deal with integer coordinates. No floating point operations +** will be done. */ -#define RNDTOWARDS (1.0 - 1.0/8388608.0) /* Round towards zero */ -#define RNDAWAY (1.0 + 1.0/8388608.0) /* Round away from zero */ +#ifdef SQLITE_RTREE_INT_ONLY + typedef sqlite3_int64 RtreeDValue; /* High accuracy coordinate */ + typedef int RtreeValue; /* Low accuracy coordinate */ +# define RTREE_ZERO 0 +#else + typedef double RtreeDValue; /* High accuracy coordinate */ + typedef float RtreeValue; /* Low accuracy coordinate */ +# define RTREE_ZERO 0.0 +#endif -#if !defined(SQLITE_RTREE_INT_ONLY) /* -** Convert an sqlite3_value into an RtreeValue (presumably a float) -** while taking care to round toward negative or positive, respectively. +** When doing a search of an r-tree, instances of the following structure +** record intermediate results from the tree walk. +** +** The id is always a node-id. For iLevel>=1 the id is the node-id of +** the node that the RtreeSearchPoint represents. When iLevel==0, however, +** the id is of the parent node and the cell that RtreeSearchPoint +** represents is the iCell-th entry in the parent node. */ -static RtreeValue rtreeValueDown(sqlite3_value *v){ - double d = sqlite3_value_double(v); - float f = (float)d; - if( f>d ){ - f = (float)(d*(d<0 ? RNDAWAY : RNDTOWARDS)); - } - return f; -} -static RtreeValue rtreeValueUp(sqlite3_value *v){ - double d = sqlite3_value_double(v); - float f = (float)d; - if( fbase.zErrMsg) to an appropriate value and returns -** SQLITE_CONSTRAINT. +** The minimum number of cells allowed for a node is a third of the +** maximum. In Gutman's notation: ** -** Parameter iCol is the index of the leftmost column involved in the -** constraint failure. If it is 0, then the constraint that failed is -** the unique constraint on the id column. Otherwise, it is the rtree -** (c1<=c2) constraint on columns iCol and iCol+1 that has failed. +** m = M/3 ** -** If an OOM occurs, SQLITE_NOMEM is returned instead of SQLITE_CONSTRAINT. +** If an R*-tree "Reinsert" operation is required, the same number of +** cells are removed from the overfull node and reinserted into the tree. */ -static int rtreeConstraintError(Rtree *pRtree, int iCol){ - sqlite3_stmt *pStmt = 0; - char *zSql; - int rc; - - assert( iCol==0 || iCol%2 ); - zSql = sqlite3_mprintf("SELECT * FROM %Q.%Q", pRtree->zDb, pRtree->zName); - if( zSql ){ - rc = sqlite3_prepare_v2(pRtree->db, zSql, -1, &pStmt, 0); - }else{ - rc = SQLITE_NOMEM; - } - sqlite3_free(zSql); - - if( rc==SQLITE_OK ){ - if( iCol==0 ){ - const char *zCol = sqlite3_column_name(pStmt, 0); - pRtree->base.zErrMsg = sqlite3_mprintf( - "UNIQUE constraint failed: %s.%s", pRtree->zName, zCol - ); - }else{ - const char *zCol1 = sqlite3_column_name(pStmt, iCol); - const char *zCol2 = sqlite3_column_name(pStmt, iCol+1); - pRtree->base.zErrMsg = sqlite3_mprintf( - "rtree constraint failed: %s.(%s<=%s)", pRtree->zName, zCol1, zCol2 - ); - } - } - - sqlite3_finalize(pStmt); - return (rc==SQLITE_OK ? SQLITE_CONSTRAINT : rc); -} +#define RTREE_MINCELLS(p) ((((p)->iNodeSize-4)/(p)->nBytesPerCell)/3) +#define RTREE_REINSERT(p) RTREE_MINCELLS(p) +#define RTREE_MAXCELLS 51 +/* +** The smallest possible node-size is (512-64)==448 bytes. And the largest +** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates). +** Therefore all non-root nodes must contain at least 3 entries. Since +** 3^40 is greater than 2^64, an r-tree structure always has a depth of +** 40 or less. +*/ +#define RTREE_MAX_DEPTH 40 /* -** The xUpdate method for rtree module virtual tables. +** Number of entries in the cursor RtreeNode cache. The first entry is +** used to cache the RtreeNode for RtreeCursor.sPoint. The remaining +** entries cache the RtreeNode for the first elements of the priority queue. */ -static int rtreeUpdate( - sqlite3_vtab *pVtab, - int nData, - sqlite3_value **aData, - sqlite_int64 *pRowid -){ - Rtree *pRtree = (Rtree *)pVtab; - int rc = SQLITE_OK; - RtreeCell cell; /* New cell to insert if nData>1 */ - int bHaveRowid = 0; /* Set to 1 after new rowid is determined */ - - if( pRtree->nNodeRef ){ - /* Unable to write to the btree while another cursor is reading from it, - ** since the write might do a rebalance which would disrupt the read - ** cursor. */ - return SQLITE_LOCKED_VTAB; - } - rtreeReference(pRtree); - assert(nData>=1); +#define RTREE_CACHE_SZ 5 - cell.iRowid = 0; /* Used only to suppress a compiler warning */ +/* +** An rtree cursor object. +*/ +struct RtreeCursor { + sqlite3_vtab_cursor base; /* Base class. Must be first */ + u8 atEOF; /* True if at end of search */ + u8 bPoint; /* True if sPoint is valid */ + u8 bAuxValid; /* True if pReadAux is valid */ + int iStrategy; /* Copy of idxNum search parameter */ + int nConstraint; /* Number of entries in aConstraint */ + RtreeConstraint *aConstraint; /* Search constraints. */ + int nPointAlloc; /* Number of slots allocated for aPoint[] */ + int nPoint; /* Number of slots used in aPoint[] */ + int mxLevel; /* iLevel value for root of the tree */ + RtreeSearchPoint *aPoint; /* Priority queue for search points */ + sqlite3_stmt *pReadAux; /* Statement to read aux-data */ + RtreeSearchPoint sPoint; /* Cached next search point */ + RtreeNode *aNode[RTREE_CACHE_SZ]; /* Rtree node cache */ + u32 anQueue[RTREE_MAX_DEPTH+1]; /* Number of queued entries by iLevel */ +}; - /* Constraint handling. A write operation on an r-tree table may return - ** SQLITE_CONSTRAINT for two reasons: - ** - ** 1. A duplicate rowid value, or - ** 2. The supplied data violates the "x2>=x1" constraint. - ** - ** In the first case, if the conflict-handling mode is REPLACE, then - ** the conflicting row can be removed before proceeding. In the second - ** case, SQLITE_CONSTRAINT must be returned regardless of the - ** conflict-handling mode specified by the user. - */ - if( nData>1 ){ - int ii; - int nn = nData - 4; +/* Return the Rtree of a RtreeCursor */ +#define RTREE_OF_CURSOR(X) ((Rtree*)((X)->base.pVtab)) - if( nn > pRtree->nDim2 ) nn = pRtree->nDim2; - /* Populate the cell.aCoord[] array. The first coordinate is aData[3]. - ** - ** NB: nData can only be less than nDim*2+3 if the rtree is mis-declared - ** with "column" that are interpreted as table constraints. - ** Example: CREATE VIRTUAL TABLE bad USING rtree(x,y,CHECK(y>5)); - ** This problem was discovered after years of use, so we silently ignore - ** these kinds of misdeclared tables to avoid breaking any legacy. - */ +/* +** A coordinate can be either a floating point number or a integer. All +** coordinates within a single R-Tree are always of the same time. +*/ +union RtreeCoord { + RtreeValue f; /* Floating point value */ + int i; /* Integer value */ + u32 u; /* Unsigned for byte-order conversions */ +}; -#ifndef SQLITE_RTREE_INT_ONLY - if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ - for(ii=0; iicell.aCoord[ii+1].f ){ - rc = rtreeConstraintError(pRtree, ii+1); - goto constraint; - } - } - }else +/* +** The argument is an RtreeCoord. Return the value stored within the RtreeCoord +** formatted as a RtreeDValue (double or int64). This macro assumes that local +** variable pRtree points to the Rtree structure associated with the +** RtreeCoord. +*/ +#ifdef SQLITE_RTREE_INT_ONLY +# define DCOORD(coord) ((RtreeDValue)coord.i) +#else +# define DCOORD(coord) ( \ + (pRtree->eCoordType==RTREE_COORD_REAL32) ? \ + ((double)coord.f) : \ + ((double)coord.i) \ + ) #endif - { - for(ii=0; iicell.aCoord[ii+1].i ){ - rc = rtreeConstraintError(pRtree, ii+1); - goto constraint; - } - } - } - /* If a rowid value was supplied, check if it is already present in - ** the table. If so, the constraint has failed. */ - if( sqlite3_value_type(aData[2])!=SQLITE_NULL ){ - cell.iRowid = sqlite3_value_int64(aData[2]); - if( sqlite3_value_type(aData[0])==SQLITE_NULL - || sqlite3_value_int64(aData[0])!=cell.iRowid - ){ - int steprc; - sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); - steprc = sqlite3_step(pRtree->pReadRowid); - rc = sqlite3_reset(pRtree->pReadRowid); - if( SQLITE_ROW==steprc ){ - if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){ - rc = rtreeDeleteRowid(pRtree, cell.iRowid); - }else{ - rc = rtreeConstraintError(pRtree, 0); - goto constraint; - } - } - } - bHaveRowid = 1; - } - } +/* +** A search constraint. +*/ +struct RtreeConstraint { + int iCoord; /* Index of constrained coordinate */ + int op; /* Constraining operation */ + union { + RtreeDValue rValue; /* Constraint value. */ + int (*xGeom)(sqlite3_rtree_geometry*,int,RtreeDValue*,int*); + int (*xQueryFunc)(sqlite3_rtree_query_info*); + } u; + sqlite3_rtree_query_info *pInfo; /* xGeom and xQueryFunc argument */ +}; - /* If aData[0] is not an SQL NULL value, it is the rowid of a - ** record to delete from the r-tree table. The following block does - ** just that. - */ - if( sqlite3_value_type(aData[0])!=SQLITE_NULL ){ - rc = rtreeDeleteRowid(pRtree, sqlite3_value_int64(aData[0])); - } +/* Possible values for RtreeConstraint.op */ +#define RTREE_EQ 0x41 /* A */ +#define RTREE_LE 0x42 /* B */ +#define RTREE_LT 0x43 /* C */ +#define RTREE_GE 0x44 /* D */ +#define RTREE_GT 0x45 /* E */ +#define RTREE_MATCH 0x46 /* F: Old-style sqlite3_rtree_geometry_callback() */ +#define RTREE_QUERY 0x47 /* G: New-style sqlite3_rtree_query_callback() */ - /* If the aData[] array contains more than one element, elements - ** (aData[2]..aData[argc-1]) contain a new record to insert into - ** the r-tree structure. - */ - if( rc==SQLITE_OK && nData>1 ){ - /* Insert the new record into the r-tree */ - RtreeNode *pLeaf = 0; - /* Figure out the rowid of the new row. */ - if( bHaveRowid==0 ){ - rc = newRowid(pRtree, &cell.iRowid); - } - *pRowid = cell.iRowid; +/* +** An rtree structure node. +*/ +struct RtreeNode { + RtreeNode *pParent; /* Parent node */ + i64 iNode; /* The node number */ + int nRef; /* Number of references to this node */ + int isDirty; /* True if the node needs to be written to disk */ + u8 *zData; /* Content of the node, as should be on disk */ + RtreeNode *pNext; /* Next node in this hash collision chain */ +}; - if( rc==SQLITE_OK ){ - rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf); - } - if( rc==SQLITE_OK ){ - int rc2; - pRtree->iReinsertHeight = -1; - rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); - rc2 = nodeRelease(pRtree, pLeaf); - if( rc==SQLITE_OK ){ - rc = rc2; - } - } - if( pRtree->nAux ){ - sqlite3_stmt *pUp = pRtree->pWriteAux; - int jj; - sqlite3_bind_int64(pUp, 1, *pRowid); - for(jj=0; jjnAux; jj++){ - sqlite3_bind_value(pUp, jj+2, aData[pRtree->nDim2+3+jj]); - } - sqlite3_step(pUp); - rc = sqlite3_reset(pUp); - } - } +/* Return the number of cells in a node */ +#define NCELL(pNode) readInt16(&(pNode)->zData[2]) + +/* +** A single cell from a node, deserialized +*/ +struct RtreeCell { + i64 iRowid; /* Node or entry ID */ + RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2]; /* Bounding box coordinates */ +}; -constraint: - rtreeRelease(pRtree); - return rc; -} /* -** Called when a transaction starts. +** This object becomes the sqlite3_user_data() for the SQL functions +** that are created by sqlite3_rtree_geometry_callback() and +** sqlite3_rtree_query_callback() and which appear on the right of MATCH +** operators in order to constrain a search. +** +** xGeom and xQueryFunc are the callback functions. Exactly one of +** xGeom and xQueryFunc fields is non-NULL, depending on whether the +** SQL function was created using sqlite3_rtree_geometry_callback() or +** sqlite3_rtree_query_callback(). +** +** This object is deleted automatically by the destructor mechanism in +** sqlite3_create_function_v2(). */ -static int rtreeBeginTransaction(sqlite3_vtab *pVtab){ - Rtree *pRtree = (Rtree *)pVtab; - assert( pRtree->inWrTrans==0 ); - pRtree->inWrTrans++; - return SQLITE_OK; -} +struct RtreeGeomCallback { + int (*xGeom)(sqlite3_rtree_geometry*, int, RtreeDValue*, int*); + int (*xQueryFunc)(sqlite3_rtree_query_info*); + void (*xDestructor)(void*); + void *pContext; +}; /* -** Called when a transaction completes (either by COMMIT or ROLLBACK). -** The sqlite3_blob object should be released at this point. +** An instance of this structure (in the form of a BLOB) is returned by +** the SQL functions that sqlite3_rtree_geometry_callback() and +** sqlite3_rtree_query_callback() create, and is read as the right-hand +** operand to the MATCH operator of an R-Tree. */ -static int rtreeEndTransaction(sqlite3_vtab *pVtab){ - Rtree *pRtree = (Rtree *)pVtab; - pRtree->inWrTrans = 0; - nodeBlobReset(pRtree); - return SQLITE_OK; -} +struct RtreeMatchArg { + u32 iSize; /* Size of this object */ + RtreeGeomCallback cb; /* Info about the callback functions */ + int nParam; /* Number of parameters to the SQL function */ + sqlite3_value **apSqlParam; /* Original SQL parameter values */ + RtreeDValue aParam[1]; /* Values for parameters to the SQL function */ +}; -/* -** The xRename method for rtree module virtual tables. +#ifndef MAX +# define MAX(x,y) ((x) < (y) ? (y) : (x)) +#endif +#ifndef MIN +# define MIN(x,y) ((x) > (y) ? (y) : (x)) +#endif + +/* What version of GCC is being used. 0 means GCC is not being used . +** Note that the GCC_VERSION macro will also be set correctly when using +** clang, since clang works hard to be gcc compatible. So the gcc +** optimizations will also work when compiling with clang. */ -static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){ - Rtree *pRtree = (Rtree *)pVtab; - int rc = SQLITE_NOMEM; - char *zSql = sqlite3_mprintf( - "ALTER TABLE %Q.'%q_node' RENAME TO \"%w_node\";" - "ALTER TABLE %Q.'%q_parent' RENAME TO \"%w_parent\";" - "ALTER TABLE %Q.'%q_rowid' RENAME TO \"%w_rowid\";" - , pRtree->zDb, pRtree->zName, zNewName - , pRtree->zDb, pRtree->zName, zNewName - , pRtree->zDb, pRtree->zName, zNewName - ); - if( zSql ){ - nodeBlobReset(pRtree); - rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0); - sqlite3_free(zSql); - } - return rc; -} +#ifndef GCC_VERSION +#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC) +# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) +#else +# define GCC_VERSION 0 +#endif +#endif + +/* The testcase() macro should already be defined in the amalgamation. If +** it is not, make it a no-op. +*/ +#ifndef SQLITE_AMALGAMATION +# define testcase(X) +#endif /* -** The xSavepoint method. -** -** This module does not need to do anything to support savepoints. However, -** it uses this hook to close any open blob handle. This is done because a -** DROP TABLE command - which fortunately always opens a savepoint - cannot -** succeed if there are any open blob handles. i.e. if the blob handle were -** not closed here, the following would fail: +** Macros to determine whether the machine is big or little endian, +** and whether or not that determination is run-time or compile-time. ** -** BEGIN; -** INSERT INTO rtree... -** DROP TABLE ; -- Would fail with SQLITE_LOCKED -** COMMIT; +** For best performance, an attempt is made to guess at the byte-order +** using C-preprocessor macros. If that is unsuccessful, or if +** -DSQLITE_RUNTIME_BYTEORDER=1 is set, then byte-order is determined +** at run-time. */ -static int rtreeSavepoint(sqlite3_vtab *pVtab, int iSavepoint){ - Rtree *pRtree = (Rtree *)pVtab; - int iwt = pRtree->inWrTrans; - UNUSED_PARAMETER(iSavepoint); - pRtree->inWrTrans = 0; - nodeBlobReset(pRtree); - pRtree->inWrTrans = iwt; - return SQLITE_OK; -} +#ifndef SQLITE_BYTEORDER +#if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ + defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ + defined(__arm__) +# define SQLITE_BYTEORDER 1234 +#elif defined(sparc) || defined(__ppc__) +# define SQLITE_BYTEORDER 4321 +#else +# define SQLITE_BYTEORDER 0 /* 0 means "unknown at compile-time" */ +#endif +#endif + + +/* What version of MSVC is being used. 0 means MSVC is not being used */ +#ifndef MSVC_VERSION +#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC) +# define MSVC_VERSION _MSC_VER +#else +# define MSVC_VERSION 0 +#endif +#endif /* -** This function populates the pRtree->nRowEst variable with an estimate -** of the number of rows in the virtual table. If possible, this is based -** on sqlite_stat1 data. Otherwise, use RTREE_DEFAULT_ROWEST. +** Functions to deserialize a 16 bit integer, 32 bit real number and +** 64 bit integer. The deserialized value is returned. */ -static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){ - const char *zFmt = "SELECT stat FROM %Q.sqlite_stat1 WHERE tbl = '%q_rowid'"; - char *zSql; - sqlite3_stmt *p; - int rc; - i64 nRow = 0; - - rc = sqlite3_table_column_metadata( - db, pRtree->zDb, "sqlite_stat1",0,0,0,0,0,0 +static int readInt16(u8 *p){ + return (p[0]<<8) + p[1]; +} +static void readCoord(u8 *p, RtreeCoord *pCoord){ + assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */ +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + pCoord->u = _byteswap_ulong(*(u32*)p); +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + pCoord->u = __builtin_bswap32(*(u32*)p); +#elif SQLITE_BYTEORDER==4321 + pCoord->u = *(u32*)p; +#else + pCoord->u = ( + (((u32)p[0]) << 24) + + (((u32)p[1]) << 16) + + (((u32)p[2]) << 8) + + (((u32)p[3]) << 0) ); - if( rc!=SQLITE_OK ){ - pRtree->nRowEst = RTREE_DEFAULT_ROWEST; - return rc==SQLITE_ERROR ? SQLITE_OK : rc; - } - zSql = sqlite3_mprintf(zFmt, pRtree->zDb, pRtree->zName); - if( zSql==0 ){ - rc = SQLITE_NOMEM; - }else{ - rc = sqlite3_prepare_v2(db, zSql, -1, &p, 0); - if( rc==SQLITE_OK ){ - if( sqlite3_step(p)==SQLITE_ROW ) nRow = sqlite3_column_int64(p, 0); - rc = sqlite3_finalize(p); - }else if( rc!=SQLITE_NOMEM ){ - rc = SQLITE_OK; - } - - if( rc==SQLITE_OK ){ - if( nRow==0 ){ - pRtree->nRowEst = RTREE_DEFAULT_ROWEST; - }else{ - pRtree->nRowEst = MAX(nRow, RTREE_MIN_ROWEST); - } - } - sqlite3_free(zSql); - } - - return rc; +#endif +} +static i64 readInt64(u8 *p){ +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + u64 x; + memcpy(&x, p, 8); + return (i64)_byteswap_uint64(x); +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + u64 x; + memcpy(&x, p, 8); + return (i64)__builtin_bswap64(x); +#elif SQLITE_BYTEORDER==4321 + i64 x; + memcpy(&x, p, 8); + return x; +#else + return (i64)( + (((u64)p[0]) << 56) + + (((u64)p[1]) << 48) + + (((u64)p[2]) << 40) + + (((u64)p[3]) << 32) + + (((u64)p[4]) << 24) + + (((u64)p[5]) << 16) + + (((u64)p[6]) << 8) + + (((u64)p[7]) << 0) + ); +#endif } -static sqlite3_module rtreeModule = { - 2, /* iVersion */ - rtreeCreate, /* xCreate - create a table */ - rtreeConnect, /* xConnect - connect to an existing table */ - rtreeBestIndex, /* xBestIndex - Determine search strategy */ - rtreeDisconnect, /* xDisconnect - Disconnect from a table */ - rtreeDestroy, /* xDestroy - Drop a table */ - rtreeOpen, /* xOpen - open a cursor */ - rtreeClose, /* xClose - close a cursor */ - rtreeFilter, /* xFilter - configure scan constraints */ - rtreeNext, /* xNext - advance a cursor */ - rtreeEof, /* xEof */ - rtreeColumn, /* xColumn - read data */ - rtreeRowid, /* xRowid - read data */ - rtreeUpdate, /* xUpdate - write data */ - rtreeBeginTransaction, /* xBegin - begin transaction */ - rtreeEndTransaction, /* xSync - sync transaction */ - rtreeEndTransaction, /* xCommit - commit transaction */ - rtreeEndTransaction, /* xRollback - rollback transaction */ - 0, /* xFindFunction - function overloading */ - rtreeRename, /* xRename - rename the table */ - rtreeSavepoint, /* xSavepoint */ - 0, /* xRelease */ - 0, /* xRollbackTo */ -}; - -static int rtreeSqlInit( - Rtree *pRtree, - sqlite3 *db, - const char *zDb, - const char *zPrefix, - int isCreate -){ - int rc = SQLITE_OK; - - #define N_STATEMENT 8 - static const char *azSql[N_STATEMENT] = { - /* Write the xxx_node table */ - "INSERT OR REPLACE INTO '%q'.'%q_node' VALUES(?1, ?2)", - "DELETE FROM '%q'.'%q_node' WHERE nodeno = ?1", +/* +** Functions to serialize a 16 bit integer, 32 bit real number and +** 64 bit integer. The value returned is the number of bytes written +** to the argument buffer (always 2, 4 and 8 respectively). +*/ +static void writeInt16(u8 *p, int i){ + p[0] = (i>> 8)&0xFF; + p[1] = (i>> 0)&0xFF; +} +static int writeCoord(u8 *p, RtreeCoord *pCoord){ + u32 i; + assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */ + assert( sizeof(RtreeCoord)==4 ); + assert( sizeof(u32)==4 ); +#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + i = __builtin_bswap32(pCoord->u); + memcpy(p, &i, 4); +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + i = _byteswap_ulong(pCoord->u); + memcpy(p, &i, 4); +#elif SQLITE_BYTEORDER==4321 + i = pCoord->u; + memcpy(p, &i, 4); +#else + i = pCoord->u; + p[0] = (i>>24)&0xFF; + p[1] = (i>>16)&0xFF; + p[2] = (i>> 8)&0xFF; + p[3] = (i>> 0)&0xFF; +#endif + return 4; +} +static int writeInt64(u8 *p, i64 i){ +#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + i = (i64)__builtin_bswap64((u64)i); + memcpy(p, &i, 8); +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + i = (i64)_byteswap_uint64((u64)i); + memcpy(p, &i, 8); +#elif SQLITE_BYTEORDER==4321 + memcpy(p, &i, 8); +#else + p[0] = (i>>56)&0xFF; + p[1] = (i>>48)&0xFF; + p[2] = (i>>40)&0xFF; + p[3] = (i>>32)&0xFF; + p[4] = (i>>24)&0xFF; + p[5] = (i>>16)&0xFF; + p[6] = (i>> 8)&0xFF; + p[7] = (i>> 0)&0xFF; +#endif + return 8; +} - /* Read and write the xxx_rowid table */ - "SELECT nodeno FROM '%q'.'%q_rowid' WHERE rowid = ?1", - "INSERT OR REPLACE INTO '%q'.'%q_rowid' VALUES(?1, ?2)", - "DELETE FROM '%q'.'%q_rowid' WHERE rowid = ?1", +/* +** Increment the reference count of node p. +*/ +static void nodeReference(RtreeNode *p){ + if( p ){ + assert( p->nRef>0 ); + p->nRef++; + } +} - /* Read and write the xxx_parent table */ - "SELECT parentnode FROM '%q'.'%q_parent' WHERE nodeno = ?1", - "INSERT OR REPLACE INTO '%q'.'%q_parent' VALUES(?1, ?2)", - "DELETE FROM '%q'.'%q_parent' WHERE nodeno = ?1" - }; - sqlite3_stmt **appStmt[N_STATEMENT]; - int i; +/* +** Clear the content of node p (set all bytes to 0x00). +*/ +static void nodeZero(Rtree *pRtree, RtreeNode *p){ + memset(&p->zData[2], 0, pRtree->iNodeSize-2); + p->isDirty = 1; +} - pRtree->db = db; +/* +** Given a node number iNode, return the corresponding key to use +** in the Rtree.aHash table. +*/ +static int nodeHash(i64 iNode){ + return iNode % HASHSIZE; +} - if( isCreate ){ - char *zCreate; - sqlite3_str *p = sqlite3_str_new(db); - int ii; - sqlite3_str_appendf(p, - "CREATE TABLE \"%w\".\"%w_rowid\"(rowid INTEGER PRIMARY KEY,nodeno", - zDb, zPrefix); - for(ii=0; iinAux; ii++){ - sqlite3_str_appendf(p,",a%d",ii); - } - sqlite3_str_appendf(p, - ");CREATE TABLE \"%w\".\"%w_node\"(nodeno INTEGER PRIMARY KEY,data);", - zDb, zPrefix); - sqlite3_str_appendf(p, - "CREATE TABLE \"%w\".\"%w_parent\"(nodeno INTEGER PRIMARY KEY,parentnode);", - zDb, zPrefix); - sqlite3_str_appendf(p, - "INSERT INTO \"%w\".\"%w_node\"VALUES(1,zeroblob(%d))", - zDb, zPrefix, pRtree->iNodeSize); - zCreate = sqlite3_str_finish(p); - if( !zCreate ){ - return SQLITE_NOMEM; - } - rc = sqlite3_exec(db, zCreate, 0, 0, 0); - sqlite3_free(zCreate); - if( rc!=SQLITE_OK ){ - return rc; - } - } +/* +** Search the node hash table for node iNode. If found, return a pointer +** to it. Otherwise, return 0. +*/ +static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){ + RtreeNode *p; + for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext); + return p; +} - appStmt[0] = &pRtree->pWriteNode; - appStmt[1] = &pRtree->pDeleteNode; - appStmt[2] = &pRtree->pReadRowid; - appStmt[3] = &pRtree->pWriteRowid; - appStmt[4] = &pRtree->pDeleteRowid; - appStmt[5] = &pRtree->pReadParent; - appStmt[6] = &pRtree->pWriteParent; - appStmt[7] = &pRtree->pDeleteParent; +/* +** Add node pNode to the node hash table. +*/ +static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){ + int iHash; + assert( pNode->pNext==0 ); + iHash = nodeHash(pNode->iNode); + pNode->pNext = pRtree->aHash[iHash]; + pRtree->aHash[iHash] = pNode; +} - rc = rtreeQueryStat1(db, pRtree); - for(i=0; inAux==0 ){ - zFormat = azSql[i]; - }else { - /* An UPSERT is very slightly slower than REPLACE, but it is needed - ** if there are auxiliary columns */ - zFormat = "INSERT INTO\"%w\".\"%w_rowid\"(rowid,nodeno)VALUES(?1,?2)" - "ON CONFLICT(rowid)DO UPDATE SET nodeno=excluded.nodeno"; - } - zSql = sqlite3_mprintf(zFormat, zDb, zPrefix); - if( zSql ){ - rc = sqlite3_prepare_v3(db, zSql, -1, SQLITE_PREPARE_PERSISTENT, - appStmt[i], 0); - }else{ - rc = SQLITE_NOMEM; - } - sqlite3_free(zSql); - } - if( pRtree->nAux ){ - pRtree->zReadAuxSql = sqlite3_mprintf( - "SELECT * FROM \"%w\".\"%w_rowid\" WHERE rowid=?1", - zDb, zPrefix); - if( pRtree->zReadAuxSql==0 ){ - rc = SQLITE_NOMEM; - }else{ - sqlite3_str *p = sqlite3_str_new(db); - int ii; - char *zSql; - sqlite3_str_appendf(p, "UPDATE \"%w\".\"%w_rowid\"SET ", zDb, zPrefix); - for(ii=0; iinAux; ii++){ - if( ii ) sqlite3_str_append(p, ",", 1); - sqlite3_str_appendf(p,"a%d=?%d",ii,ii+2); - } - sqlite3_str_appendf(p, " WHERE rowid=?1"); - zSql = sqlite3_str_finish(p); - if( zSql==0 ){ - rc = SQLITE_NOMEM; - }else{ - rc = sqlite3_prepare_v3(db, zSql, -1, SQLITE_PREPARE_PERSISTENT, - &pRtree->pWriteAux, 0); - sqlite3_free(zSql); - } - } +/* +** Remove node pNode from the node hash table. +*/ +static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){ + RtreeNode **pp; + if( pNode->iNode!=0 ){ + pp = &pRtree->aHash[nodeHash(pNode->iNode)]; + for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); } + *pp = pNode->pNext; + pNode->pNext = 0; } - - return rc; } /* -** The second argument to this function contains the text of an SQL statement -** that returns a single integer value. The statement is compiled and executed -** using database connection db. If successful, the integer value returned -** is written to *piVal and SQLITE_OK returned. Otherwise, an SQLite error -** code is returned and the value of *piVal after returning is not defined. +** Allocate and return new r-tree node. Initially, (RtreeNode.iNode==0), +** indicating that node has not yet been assigned a node number. It is +** assigned a node number when nodeWrite() is called to write the +** node contents out to the database. */ -static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){ - int rc = SQLITE_NOMEM; - if( zSql ){ - sqlite3_stmt *pStmt = 0; - rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); - if( rc==SQLITE_OK ){ - if( SQLITE_ROW==sqlite3_step(pStmt) ){ - *piVal = sqlite3_column_int(pStmt, 0); - } - rc = sqlite3_finalize(pStmt); - } +static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){ + RtreeNode *pNode; + pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize); + if( pNode ){ + memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize); + pNode->zData = (u8 *)&pNode[1]; + pNode->nRef = 1; + pRtree->nNodeRef++; + pNode->pParent = pParent; + pNode->isDirty = 1; + nodeReference(pParent); } - return rc; + return pNode; } /* -** This function is called from within the xConnect() or xCreate() method to -** determine the node-size used by the rtree table being created or connected -** to. If successful, pRtree->iNodeSize is populated and SQLITE_OK returned. -** Otherwise, an SQLite error code is returned. -** -** If this function is being called as part of an xConnect(), then the rtree -** table already exists. In this case the node-size is determined by inspecting -** the root node of the tree. -** -** Otherwise, for an xCreate(), use 64 bytes less than the database page-size. -** This ensures that each node is stored on a single database page. If the -** database page-size is so large that more than RTREE_MAXCELLS entries -** would fit in a single node, use a smaller node-size. +** Clear the Rtree.pNodeBlob object */ -static int getNodeSize( - sqlite3 *db, /* Database handle */ - Rtree *pRtree, /* Rtree handle */ - int isCreate, /* True for xCreate, false for xConnect */ - char **pzErr /* OUT: Error message, if any */ -){ - int rc; - char *zSql; - if( isCreate ){ - int iPageSize = 0; - zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb); - rc = getIntFromStmt(db, zSql, &iPageSize); - if( rc==SQLITE_OK ){ - pRtree->iNodeSize = iPageSize-64; - if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)iNodeSize ){ - pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS; - } - }else{ - *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); - } - }else{ - zSql = sqlite3_mprintf( - "SELECT length(data) FROM '%q'.'%q_node' WHERE nodeno = 1", - pRtree->zDb, pRtree->zName - ); - rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize); - if( rc!=SQLITE_OK ){ - *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); - }else if( pRtree->iNodeSize<(512-64) ){ - rc = SQLITE_CORRUPT_VTAB; - *pzErr = sqlite3_mprintf("undersize RTree blobs in \"%q_node\"", - pRtree->zName); - } +static void nodeBlobReset(Rtree *pRtree){ + if( pRtree->pNodeBlob && pRtree->inWrTrans==0 && pRtree->nCursor==0 ){ + sqlite3_blob *pBlob = pRtree->pNodeBlob; + pRtree->pNodeBlob = 0; + sqlite3_blob_close(pBlob); } - - sqlite3_free(zSql); - return rc; } -/* -** This function is the implementation of both the xConnect and xCreate -** methods of the r-tree virtual table. -** -** argv[0] -> module name -** argv[1] -> database name -** argv[2] -> table name -** argv[...] -> column names... +/* +** Obtain a reference to an r-tree node. */ -static int rtreeInit( - sqlite3 *db, /* Database connection */ - void *pAux, /* One of the RTREE_COORD_* constants */ - int argc, const char *const*argv, /* Parameters to CREATE TABLE statement */ - sqlite3_vtab **ppVtab, /* OUT: New virtual table */ - char **pzErr, /* OUT: Error message, if any */ - int isCreate /* True for xCreate, false for xConnect */ +static int nodeAcquire( + Rtree *pRtree, /* R-tree structure */ + i64 iNode, /* Node number to load */ + RtreeNode *pParent, /* Either the parent node or NULL */ + RtreeNode **ppNode /* OUT: Acquired node */ ){ int rc = SQLITE_OK; - Rtree *pRtree; - int nDb; /* Length of string argv[1] */ - int nName; /* Length of string argv[2] */ - int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32); - sqlite3_str *pSql; - char *zSql; - int ii = 4; - int iErr; - - const char *aErrMsg[] = { - 0, /* 0 */ - "Wrong number of columns for an rtree table", /* 1 */ - "Too few columns for an rtree table", /* 2 */ - "Too many columns for an rtree table", /* 3 */ - "Auxiliary rtree columns must be last" /* 4 */ - }; - - assert( RTREE_MAX_AUX_COLUMN<256 ); /* Aux columns counted by a u8 */ - if( argc>RTREE_MAX_AUX_COLUMN+3 ){ - *pzErr = sqlite3_mprintf("%s", aErrMsg[3]); - return SQLITE_ERROR; - } - - sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); - - /* Allocate the sqlite3_vtab structure */ - nDb = (int)strlen(argv[1]); - nName = (int)strlen(argv[2]); - pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2); - if( !pRtree ){ - return SQLITE_NOMEM; - } - memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2); - pRtree->nBusy = 1; - pRtree->base.pModule = &rtreeModule; - pRtree->zDb = (char *)&pRtree[1]; - pRtree->zName = &pRtree->zDb[nDb+1]; - pRtree->eCoordType = (u8)eCoordType; - memcpy(pRtree->zDb, argv[1], nDb); - memcpy(pRtree->zName, argv[2], nName); - + RtreeNode *pNode = 0; - /* Create/Connect to the underlying relational database schema. If - ** that is successful, call sqlite3_declare_vtab() to configure - ** the r-tree table schema. + /* Check if the requested node is already in the hash table. If so, + ** increase its reference count and return it. */ - pSql = sqlite3_str_new(db); - sqlite3_str_appendf(pSql, "CREATE TABLE x(%s", argv[3]); - for(ii=4; iinAux++; - sqlite3_str_appendf(pSql, ",%s", argv[ii]+1); - }else if( pRtree->nAux>0 ){ - break; - }else{ - pRtree->nDim2++; - sqlite3_str_appendf(pSql, ",%s", argv[ii]); + if( (pNode = nodeHashLookup(pRtree, iNode))!=0 ){ + assert( !pParent || !pNode->pParent || pNode->pParent==pParent ); + if( pParent && !pNode->pParent ){ + pParent->nRef++; + pNode->pParent = pParent; } + pNode->nRef++; + *ppNode = pNode; + return SQLITE_OK; } - sqlite3_str_appendf(pSql, ");"); - zSql = sqlite3_str_finish(pSql); - if( !zSql ){ - rc = SQLITE_NOMEM; - }else if( iinDim = pRtree->nDim2/2; - if( pRtree->nDim<1 ){ - iErr = 2; - }else if( pRtree->nDim2>RTREE_MAX_DIMENSIONS*2 ){ - iErr = 3; - }else if( pRtree->nDim2 % 2 ){ - iErr = 1; - }else{ - iErr = 0; + + if( pRtree->pNodeBlob ){ + sqlite3_blob *pBlob = pRtree->pNodeBlob; + pRtree->pNodeBlob = 0; + rc = sqlite3_blob_reopen(pBlob, iNode); + pRtree->pNodeBlob = pBlob; + if( rc ){ + nodeBlobReset(pRtree); + if( rc==SQLITE_NOMEM ) return SQLITE_NOMEM; + } } - if( iErr ){ - *pzErr = sqlite3_mprintf("%s", aErrMsg[iErr]); - goto rtreeInit_fail; + if( pRtree->pNodeBlob==0 ){ + char *zTab = sqlite3_mprintf("%s_node", pRtree->zName); + if( zTab==0 ) return SQLITE_NOMEM; + rc = sqlite3_blob_open(pRtree->db, pRtree->zDb, zTab, "data", iNode, 0, + &pRtree->pNodeBlob); + sqlite3_free(zTab); } - pRtree->nBytesPerCell = 8 + pRtree->nDim2*4; - - /* Figure out the node size to use. */ - rc = getNodeSize(db, pRtree, isCreate, pzErr); - if( rc ) goto rtreeInit_fail; - rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate); if( rc ){ - *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); - goto rtreeInit_fail; + nodeBlobReset(pRtree); + *ppNode = 0; + /* If unable to open an sqlite3_blob on the desired row, that can only + ** be because the shadow tables hold erroneous data. */ + if( rc==SQLITE_ERROR ) rc = SQLITE_CORRUPT_VTAB; + }else if( pRtree->iNodeSize==sqlite3_blob_bytes(pRtree->pNodeBlob) ){ + pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize); + if( !pNode ){ + rc = SQLITE_NOMEM; + }else{ + pNode->pParent = pParent; + pNode->zData = (u8 *)&pNode[1]; + pNode->nRef = 1; + pRtree->nNodeRef++; + pNode->iNode = iNode; + pNode->isDirty = 0; + pNode->pNext = 0; + rc = sqlite3_blob_read(pRtree->pNodeBlob, pNode->zData, + pRtree->iNodeSize, 0); + nodeReference(pParent); + } } - *ppVtab = (sqlite3_vtab *)pRtree; - return SQLITE_OK; - -rtreeInit_fail: - if( rc==SQLITE_OK ) rc = SQLITE_ERROR; - assert( *ppVtab==0 ); - assert( pRtree->nBusy==1 ); - rtreeRelease(pRtree); - return rc; -} - - -/* -** Implementation of a scalar function that decodes r-tree nodes to -** human readable strings. This can be used for debugging and analysis. -** -** The scalar function takes two arguments: (1) the number of dimensions -** to the rtree (between 1 and 5, inclusive) and (2) a blob of data containing -** an r-tree node. For a two-dimensional r-tree structure called "rt", to -** deserialize all nodes, a statement like: -** -** SELECT rtreenode(2, data) FROM rt_node; -** -** The human readable string takes the form of a Tcl list with one -** entry for each cell in the r-tree node. Each entry is itself a -** list, containing the 8-byte rowid/pageno followed by the -** *2 coordinates. -*/ -static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){ - char *zText = 0; - RtreeNode node; - Rtree tree; - int ii; - - UNUSED_PARAMETER(nArg); - memset(&node, 0, sizeof(RtreeNode)); - memset(&tree, 0, sizeof(Rtree)); - tree.nDim = (u8)sqlite3_value_int(apArg[0]); - tree.nDim2 = tree.nDim*2; - tree.nBytesPerCell = 8 + 8 * tree.nDim; - node.zData = (u8 *)sqlite3_value_blob(apArg[1]); - - for(ii=0; iiiDepth to the height + ** of the r-tree structure. A height of zero means all data is stored on + ** the root node. A height of one means the children of the root node + ** are the leaves, and so on. If the depth as specified on the root node + ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt. + */ + if( pNode && iNode==1 ){ + pRtree->iDepth = readInt16(pNode->zData); + if( pRtree->iDepth>RTREE_MAX_DEPTH ){ + rc = SQLITE_CORRUPT_VTAB; } + } - if( zText ){ - char *zTextNew = sqlite3_mprintf("%s {%s}", zText, zCell); - sqlite3_free(zText); - zText = zTextNew; - }else{ - zText = sqlite3_mprintf("{%s}", zCell); + /* If no error has occurred so far, check if the "number of entries" + ** field on the node is too large. If so, set the return code to + ** SQLITE_CORRUPT_VTAB. + */ + if( pNode && rc==SQLITE_OK ){ + if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){ + rc = SQLITE_CORRUPT_VTAB; } } - - sqlite3_result_text(ctx, zText, -1, sqlite3_free); -} -/* This routine implements an SQL function that returns the "depth" parameter -** from the front of a blob that is an r-tree node. For example: -** -** SELECT rtreedepth(data) FROM rt_node WHERE nodeno=1; -** -** The depth value is 0 for all nodes other than the root node, and the root -** node always has nodeno=1, so the example above is the primary use for this -** routine. This routine is intended for testing and analysis only. -*/ -static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){ - UNUSED_PARAMETER(nArg); - if( sqlite3_value_type(apArg[0])!=SQLITE_BLOB - || sqlite3_value_bytes(apArg[0])<2 - ){ - sqlite3_result_error(ctx, "Invalid argument to rtreedepth()", -1); + if( rc==SQLITE_OK ){ + if( pNode!=0 ){ + nodeHashInsert(pRtree, pNode); + }else{ + rc = SQLITE_CORRUPT_VTAB; + } + *ppNode = pNode; }else{ - u8 *zBlob = (u8 *)sqlite3_value_blob(apArg[0]); - sqlite3_result_int(ctx, readInt16(zBlob)); + if( pNode ){ + pRtree->nNodeRef--; + sqlite3_free(pNode); + } + *ppNode = 0; } + + return rc; } /* -** Context object passed between the various routines that make up the -** implementation of integrity-check function rtreecheck(). +** Overwrite cell iCell of node pNode with the contents of pCell. */ -typedef struct RtreeCheck RtreeCheck; -struct RtreeCheck { - sqlite3 *db; /* Database handle */ - const char *zDb; /* Database containing rtree table */ - const char *zTab; /* Name of rtree table */ - int bInt; /* True for rtree_i32 table */ - int nDim; /* Number of dimensions for this rtree tbl */ - sqlite3_stmt *pGetNode; /* Statement used to retrieve nodes */ - sqlite3_stmt *aCheckMapping[2]; /* Statements to query %_parent/%_rowid */ - int nLeaf; /* Number of leaf cells in table */ - int nNonLeaf; /* Number of non-leaf cells in table */ - int rc; /* Return code */ - char *zReport; /* Message to report */ - int nErr; /* Number of lines in zReport */ -}; - -#define RTREE_CHECK_MAX_ERROR 100 +static void nodeOverwriteCell( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* The node into which the cell is to be written */ + RtreeCell *pCell, /* The cell to write */ + int iCell /* Index into pNode into which pCell is written */ +){ + int ii; + u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; + p += writeInt64(p, pCell->iRowid); + for(ii=0; iinDim2; ii++){ + p += writeCoord(p, &pCell->aCoord[ii]); + } + pNode->isDirty = 1; +} /* -** Reset SQL statement pStmt. If the sqlite3_reset() call returns an error, -** and RtreeCheck.rc==SQLITE_OK, set RtreeCheck.rc to the error code. +** Remove the cell with index iCell from node pNode. */ -static void rtreeCheckReset(RtreeCheck *pCheck, sqlite3_stmt *pStmt){ - int rc = sqlite3_reset(pStmt); - if( pCheck->rc==SQLITE_OK ) pCheck->rc = rc; +static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){ + u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; + u8 *pSrc = &pDst[pRtree->nBytesPerCell]; + int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell; + memmove(pDst, pSrc, nByte); + writeInt16(&pNode->zData[2], NCELL(pNode)-1); + pNode->isDirty = 1; } /* -** The second and subsequent arguments to this function are a format string -** and printf style arguments. This function formats the string and attempts -** to compile it as an SQL statement. +** Insert the contents of cell pCell into node pNode. If the insert +** is successful, return SQLITE_OK. ** -** If successful, a pointer to the new SQL statement is returned. Otherwise, -** NULL is returned and an error code left in RtreeCheck.rc. +** If there is not enough free space in pNode, return SQLITE_FULL. */ -static sqlite3_stmt *rtreeCheckPrepare( - RtreeCheck *pCheck, /* RtreeCheck object */ - const char *zFmt, ... /* Format string and trailing args */ +static int nodeInsertCell( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* Write new cell into this node */ + RtreeCell *pCell /* The cell to be inserted */ ){ - va_list ap; - char *z; - sqlite3_stmt *pRet = 0; + int nCell; /* Current number of cells in pNode */ + int nMaxCell; /* Maximum number of cells for pNode */ - va_start(ap, zFmt); - z = sqlite3_vmprintf(zFmt, ap); + nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell; + nCell = NCELL(pNode); - if( pCheck->rc==SQLITE_OK ){ - if( z==0 ){ - pCheck->rc = SQLITE_NOMEM; - }else{ - pCheck->rc = sqlite3_prepare_v2(pCheck->db, z, -1, &pRet, 0); - } + assert( nCell<=nMaxCell ); + if( nCellzData[2], nCell+1); + pNode->isDirty = 1; } - sqlite3_free(z); - va_end(ap); - return pRet; + return (nCell==nMaxCell); } /* -** The second and subsequent arguments to this function are a printf() -** style format string and arguments. This function formats the string and -** appends it to the report being accumuated in pCheck. +** If the node is dirty, write it out to the database. */ -static void rtreeCheckAppendMsg(RtreeCheck *pCheck, const char *zFmt, ...){ - va_list ap; - va_start(ap, zFmt); - if( pCheck->rc==SQLITE_OK && pCheck->nErrrc = SQLITE_NOMEM; +static int nodeWrite(Rtree *pRtree, RtreeNode *pNode){ + int rc = SQLITE_OK; + if( pNode->isDirty ){ + sqlite3_stmt *p = pRtree->pWriteNode; + if( pNode->iNode ){ + sqlite3_bind_int64(p, 1, pNode->iNode); }else{ - pCheck->zReport = sqlite3_mprintf("%z%s%z", - pCheck->zReport, (pCheck->zReport ? "\n" : ""), z - ); - if( pCheck->zReport==0 ){ - pCheck->rc = SQLITE_NOMEM; - } + sqlite3_bind_null(p, 1); + } + sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC); + sqlite3_step(p); + pNode->isDirty = 0; + rc = sqlite3_reset(p); + sqlite3_bind_null(p, 2); + if( pNode->iNode==0 && rc==SQLITE_OK ){ + pNode->iNode = sqlite3_last_insert_rowid(pRtree->db); + nodeHashInsert(pRtree, pNode); } - pCheck->nErr++; } - va_end(ap); + return rc; } /* -** This function is a no-op if there is already an error code stored -** in the RtreeCheck object indicated by the first argument. NULL is -** returned in this case. -** -** Otherwise, the contents of rtree table node iNode are loaded from -** the database and copied into a buffer obtained from sqlite3_malloc(). -** If no error occurs, a pointer to the buffer is returned and (*pnNode) -** is set to the size of the buffer in bytes. -** -** Or, if an error does occur, NULL is returned and an error code left -** in the RtreeCheck object. The final value of *pnNode is undefined in -** this case. +** Release a reference to a node. If the node is dirty and the reference +** count drops to zero, the node data is written to the database. */ -static u8 *rtreeCheckGetNode(RtreeCheck *pCheck, i64 iNode, int *pnNode){ - u8 *pRet = 0; /* Return value */ - - assert( pCheck->rc==SQLITE_OK ); - if( pCheck->pGetNode==0 ){ - pCheck->pGetNode = rtreeCheckPrepare(pCheck, - "SELECT data FROM %Q.'%q_node' WHERE nodeno=?", - pCheck->zDb, pCheck->zTab - ); - } - - if( pCheck->rc==SQLITE_OK ){ - sqlite3_bind_int64(pCheck->pGetNode, 1, iNode); - if( sqlite3_step(pCheck->pGetNode)==SQLITE_ROW ){ - int nNode = sqlite3_column_bytes(pCheck->pGetNode, 0); - const u8 *pNode = (const u8*)sqlite3_column_blob(pCheck->pGetNode, 0); - pRet = sqlite3_malloc(nNode); - if( pRet==0 ){ - pCheck->rc = SQLITE_NOMEM; - }else{ - memcpy(pRet, pNode, nNode); - *pnNode = nNode; +static int nodeRelease(Rtree *pRtree, RtreeNode *pNode){ + int rc = SQLITE_OK; + if( pNode ){ + assert( pNode->nRef>0 ); + assert( pRtree->nNodeRef>0 ); + pNode->nRef--; + if( pNode->nRef==0 ){ + pRtree->nNodeRef--; + if( pNode->iNode==1 ){ + pRtree->iDepth = -1; } - } - rtreeCheckReset(pCheck, pCheck->pGetNode); - if( pCheck->rc==SQLITE_OK && pRet==0 ){ - rtreeCheckAppendMsg(pCheck, "Node %lld missing from database", iNode); + if( pNode->pParent ){ + rc = nodeRelease(pRtree, pNode->pParent); + } + if( rc==SQLITE_OK ){ + rc = nodeWrite(pRtree, pNode); + } + nodeHashDelete(pRtree, pNode); + sqlite3_free(pNode); } } - - return pRet; + return rc; } /* -** This function is used to check that the %_parent (if bLeaf==0) or %_rowid -** (if bLeaf==1) table contains a specified entry. The schemas of the -** two tables are: -** -** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER) -** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER, ...) -** -** In both cases, this function checks that there exists an entry with -** IPK value iKey and the second column set to iVal. -** +** Return the 64-bit integer value associated with cell iCell of +** node pNode. If pNode is a leaf node, this is a rowid. If it is +** an internal node, then the 64-bit integer is a child page number. */ -static void rtreeCheckMapping( - RtreeCheck *pCheck, /* RtreeCheck object */ - int bLeaf, /* True for a leaf cell, false for interior */ - i64 iKey, /* Key for mapping */ - i64 iVal /* Expected value for mapping */ +static i64 nodeGetRowid( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* The node from which to extract the ID */ + int iCell /* The cell index from which to extract the ID */ ){ - int rc; - sqlite3_stmt *pStmt; - const char *azSql[2] = { - "SELECT parentnode FROM %Q.'%q_parent' WHERE nodeno=?1", - "SELECT nodeno FROM %Q.'%q_rowid' WHERE rowid=?1" - }; - - assert( bLeaf==0 || bLeaf==1 ); - if( pCheck->aCheckMapping[bLeaf]==0 ){ - pCheck->aCheckMapping[bLeaf] = rtreeCheckPrepare(pCheck, - azSql[bLeaf], pCheck->zDb, pCheck->zTab - ); - } - if( pCheck->rc!=SQLITE_OK ) return; + assert( iCellzData[4 + pRtree->nBytesPerCell*iCell]); +} - pStmt = pCheck->aCheckMapping[bLeaf]; - sqlite3_bind_int64(pStmt, 1, iKey); - rc = sqlite3_step(pStmt); - if( rc==SQLITE_DONE ){ - rtreeCheckAppendMsg(pCheck, "Mapping (%lld -> %lld) missing from %s table", - iKey, iVal, (bLeaf ? "%_rowid" : "%_parent") - ); - }else if( rc==SQLITE_ROW ){ - i64 ii = sqlite3_column_int64(pStmt, 0); - if( ii!=iVal ){ - rtreeCheckAppendMsg(pCheck, - "Found (%lld -> %lld) in %s table, expected (%lld -> %lld)", - iKey, ii, (bLeaf ? "%_rowid" : "%_parent"), iKey, iVal - ); - } - } - rtreeCheckReset(pCheck, pStmt); +/* +** Return coordinate iCoord from cell iCell in node pNode. +*/ +static void nodeGetCoord( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* The node from which to extract a coordinate */ + int iCell, /* The index of the cell within the node */ + int iCoord, /* Which coordinate to extract */ + RtreeCoord *pCoord /* OUT: Space to write result to */ +){ + readCoord(&pNode->zData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord); } /* -** Argument pCell points to an array of coordinates stored on an rtree page. -** This function checks that the coordinates are internally consistent (no -** x1>x2 conditions) and adds an error message to the RtreeCheck object -** if they are not. -** -** Additionally, if pParent is not NULL, then it is assumed to point to -** the array of coordinates on the parent page that bound the page -** containing pCell. In this case it is also verified that the two -** sets of coordinates are mutually consistent and an error message added -** to the RtreeCheck object if they are not. +** Deserialize cell iCell of node pNode. Populate the structure pointed +** to by pCell with the results. */ -static void rtreeCheckCellCoord( - RtreeCheck *pCheck, - i64 iNode, /* Node id to use in error messages */ - int iCell, /* Cell number to use in error messages */ - u8 *pCell, /* Pointer to cell coordinates */ - u8 *pParent /* Pointer to parent coordinates */ +static void nodeGetCell( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* The node containing the cell to be read */ + int iCell, /* Index of the cell within the node */ + RtreeCell *pCell /* OUT: Write the cell contents here */ ){ - RtreeCoord c1, c2; - RtreeCoord p1, p2; - int i; + u8 *pData; + RtreeCoord *pCoord; + int ii = 0; + pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell); + pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell); + pCoord = pCell->aCoord; + do{ + readCoord(pData, &pCoord[ii]); + readCoord(pData+4, &pCoord[ii+1]); + pData += 8; + ii += 2; + }while( iinDim2 ); +} - for(i=0; inDim; i++){ - readCoord(&pCell[4*2*i], &c1); - readCoord(&pCell[4*(2*i + 1)], &c2); - /* printf("%e, %e\n", c1.u.f, c2.u.f); */ - if( pCheck->bInt ? c1.i>c2.i : c1.f>c2.f ){ - rtreeCheckAppendMsg(pCheck, - "Dimension %d of cell %d on node %lld is corrupt", i, iCell, iNode - ); - } +/* Forward declaration for the function that does the work of +** the virtual table module xCreate() and xConnect() methods. +*/ +static int rtreeInit( + sqlite3 *, void *, int, const char *const*, sqlite3_vtab **, char **, int +); - if( pParent ){ - readCoord(&pParent[4*2*i], &p1); - readCoord(&pParent[4*(2*i + 1)], &p2); +/* +** Rtree virtual table module xCreate method. +*/ +static int rtreeCreate( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 1); +} - if( (pCheck->bInt ? c1.ibInt ? c2.i>p2.i : c2.f>p2.f) - ){ - rtreeCheckAppendMsg(pCheck, - "Dimension %d of cell %d on node %lld is corrupt relative to parent" - , i, iCell, iNode - ); - } - } - } +/* +** Rtree virtual table module xConnect method. +*/ +static int rtreeConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 0); } /* -** Run rtreecheck() checks on node iNode, which is at depth iDepth within -** the r-tree structure. Argument aParent points to the array of coordinates -** that bound node iNode on the parent node. -** -** If any problems are discovered, an error message is appended to the -** report accumulated in the RtreeCheck object. +** Increment the r-tree reference count. */ -static void rtreeCheckNode( - RtreeCheck *pCheck, - int iDepth, /* Depth of iNode (0==leaf) */ - u8 *aParent, /* Buffer containing parent coords */ - i64 iNode /* Node to check */ -){ - u8 *aNode = 0; - int nNode = 0; - - assert( iNode==1 || aParent!=0 ); - assert( pCheck->nDim>0 ); - - aNode = rtreeCheckGetNode(pCheck, iNode, &nNode); - if( aNode ){ - if( nNode<4 ){ - rtreeCheckAppendMsg(pCheck, - "Node %lld is too small (%d bytes)", iNode, nNode - ); - }else{ - int nCell; /* Number of cells on page */ - int i; /* Used to iterate through cells */ - if( aParent==0 ){ - iDepth = readInt16(aNode); - if( iDepth>RTREE_MAX_DEPTH ){ - rtreeCheckAppendMsg(pCheck, "Rtree depth out of range (%d)", iDepth); - sqlite3_free(aNode); - return; - } - } - nCell = readInt16(&aNode[2]); - if( (4 + nCell*(8 + pCheck->nDim*2*4))>nNode ){ - rtreeCheckAppendMsg(pCheck, - "Node %lld is too small for cell count of %d (%d bytes)", - iNode, nCell, nNode - ); - }else{ - for(i=0; inDim*2*4)]; - i64 iVal = readInt64(pCell); - rtreeCheckCellCoord(pCheck, iNode, i, &pCell[8], aParent); - - if( iDepth>0 ){ - rtreeCheckMapping(pCheck, 0, iVal, iNode); - rtreeCheckNode(pCheck, iDepth-1, &pCell[8], iVal); - pCheck->nNonLeaf++; - }else{ - rtreeCheckMapping(pCheck, 1, iVal, iNode); - pCheck->nLeaf++; - } - } - } - } - sqlite3_free(aNode); - } +static void rtreeReference(Rtree *pRtree){ + pRtree->nBusy++; } /* -** The second argument to this function must be either "_rowid" or -** "_parent". This function checks that the number of entries in the -** %_rowid or %_parent table is exactly nExpect. If not, it adds -** an error message to the report in the RtreeCheck object indicated -** by the first argument. +** Decrement the r-tree reference count. When the reference count reaches +** zero the structure is deleted. */ -static void rtreeCheckCount(RtreeCheck *pCheck, const char *zTbl, i64 nExpect){ - if( pCheck->rc==SQLITE_OK ){ - sqlite3_stmt *pCount; - pCount = rtreeCheckPrepare(pCheck, "SELECT count(*) FROM %Q.'%q%s'", - pCheck->zDb, pCheck->zTab, zTbl - ); - if( pCount ){ - if( sqlite3_step(pCount)==SQLITE_ROW ){ - i64 nActual = sqlite3_column_int64(pCount, 0); - if( nActual!=nExpect ){ - rtreeCheckAppendMsg(pCheck, "Wrong number of entries in %%%s table" - " - expected %lld, actual %lld" , zTbl, nExpect, nActual - ); - } - } - pCheck->rc = sqlite3_finalize(pCount); - } +static void rtreeRelease(Rtree *pRtree){ + pRtree->nBusy--; + if( pRtree->nBusy==0 ){ + pRtree->inWrTrans = 0; + assert( pRtree->nCursor==0 ); + nodeBlobReset(pRtree); + assert( pRtree->nNodeRef==0 ); + sqlite3_finalize(pRtree->pWriteNode); + sqlite3_finalize(pRtree->pDeleteNode); + sqlite3_finalize(pRtree->pReadRowid); + sqlite3_finalize(pRtree->pWriteRowid); + sqlite3_finalize(pRtree->pDeleteRowid); + sqlite3_finalize(pRtree->pReadParent); + sqlite3_finalize(pRtree->pWriteParent); + sqlite3_finalize(pRtree->pDeleteParent); + sqlite3_finalize(pRtree->pWriteAux); + sqlite3_free(pRtree->zReadAuxSql); + sqlite3_free(pRtree); } } -/* -** This function does the bulk of the work for the rtree integrity-check. -** It is called by rtreecheck(), which is the SQL function implementation. +/* +** Rtree virtual table module xDisconnect method. */ -static int rtreeCheckTable( - sqlite3 *db, /* Database handle to access db through */ - const char *zDb, /* Name of db ("main", "temp" etc.) */ - const char *zTab, /* Name of rtree table to check */ - char **pzReport /* OUT: sqlite3_malloc'd report text */ -){ - RtreeCheck check; /* Common context for various routines */ - sqlite3_stmt *pStmt = 0; /* Used to find column count of rtree table */ - int bEnd = 0; /* True if transaction should be closed */ - int nAux = 0; /* Number of extra columns. */ - - /* Initialize the context object */ - memset(&check, 0, sizeof(check)); - check.db = db; - check.zDb = zDb; - check.zTab = zTab; - - /* If there is not already an open transaction, open one now. This is - ** to ensure that the queries run as part of this integrity-check operate - ** on a consistent snapshot. */ - if( sqlite3_get_autocommit(db) ){ - check.rc = sqlite3_exec(db, "BEGIN", 0, 0, 0); - bEnd = 1; - } +static int rtreeDisconnect(sqlite3_vtab *pVtab){ + rtreeRelease((Rtree *)pVtab); + return SQLITE_OK; +} - /* Find the number of auxiliary columns */ - if( check.rc==SQLITE_OK ){ - pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.'%q_rowid'", zDb, zTab); - if( pStmt ){ - nAux = sqlite3_column_count(pStmt) - 2; - sqlite3_finalize(pStmt); - } - check.rc = SQLITE_OK; +/* +** Rtree virtual table module xDestroy method. +*/ +static int rtreeDestroy(sqlite3_vtab *pVtab){ + Rtree *pRtree = (Rtree *)pVtab; + int rc; + char *zCreate = sqlite3_mprintf( + "DROP TABLE '%q'.'%q_node';" + "DROP TABLE '%q'.'%q_rowid';" + "DROP TABLE '%q'.'%q_parent';", + pRtree->zDb, pRtree->zName, + pRtree->zDb, pRtree->zName, + pRtree->zDb, pRtree->zName + ); + if( !zCreate ){ + rc = SQLITE_NOMEM; + }else{ + nodeBlobReset(pRtree); + rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0); + sqlite3_free(zCreate); } - - /* Find number of dimensions in the rtree table. */ - pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.%Q", zDb, zTab); - if( pStmt ){ - int rc; - check.nDim = (sqlite3_column_count(pStmt) - 1 - nAux) / 2; - if( check.nDim<1 ){ - rtreeCheckAppendMsg(&check, "Schema corrupt or not an rtree"); - }else if( SQLITE_ROW==sqlite3_step(pStmt) ){ - check.bInt = (sqlite3_column_type(pStmt, 1)==SQLITE_INTEGER); - } - rc = sqlite3_finalize(pStmt); - if( rc!=SQLITE_CORRUPT ) check.rc = rc; + if( rc==SQLITE_OK ){ + rtreeRelease(pRtree); } - /* Do the actual integrity-check */ - if( check.nDim>=1 ){ - if( check.rc==SQLITE_OK ){ - rtreeCheckNode(&check, 0, 0, 1); - } - rtreeCheckCount(&check, "_rowid", check.nLeaf); - rtreeCheckCount(&check, "_parent", check.nNonLeaf); - } + return rc; +} - /* Finalize SQL statements used by the integrity-check */ - sqlite3_finalize(check.pGetNode); - sqlite3_finalize(check.aCheckMapping[0]); - sqlite3_finalize(check.aCheckMapping[1]); +/* +** Rtree virtual table module xOpen method. +*/ +static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ + int rc = SQLITE_NOMEM; + Rtree *pRtree = (Rtree *)pVTab; + RtreeCursor *pCsr; - /* If one was opened, close the transaction */ - if( bEnd ){ - int rc = sqlite3_exec(db, "END", 0, 0, 0); - if( check.rc==SQLITE_OK ) check.rc = rc; + pCsr = (RtreeCursor *)sqlite3_malloc(sizeof(RtreeCursor)); + if( pCsr ){ + memset(pCsr, 0, sizeof(RtreeCursor)); + pCsr->base.pVtab = pVTab; + rc = SQLITE_OK; + pRtree->nCursor++; } - *pzReport = check.zReport; - return check.rc; + *ppCursor = (sqlite3_vtab_cursor *)pCsr; + + return rc; } + /* -** Usage: -** -** rtreecheck(); -** rtreecheck(, ); -** -** Invoking this SQL function runs an integrity-check on the named rtree -** table. The integrity-check verifies the following: -** -** 1. For each cell in the r-tree structure (%_node table), that: -** -** a) for each dimension, (coord1 <= coord2). -** -** b) unless the cell is on the root node, that the cell is bounded -** by the parent cell on the parent node. -** -** c) for leaf nodes, that there is an entry in the %_rowid -** table corresponding to the cell's rowid value that -** points to the correct node. -** -** d) for cells on non-leaf nodes, that there is an entry in the -** %_parent table mapping from the cell's child node to the -** node that it resides on. -** -** 2. That there are the same number of entries in the %_rowid table -** as there are leaf cells in the r-tree structure, and that there -** is a leaf cell that corresponds to each entry in the %_rowid table. -** -** 3. That there are the same number of entries in the %_parent table -** as there are non-leaf cells in the r-tree structure, and that -** there is a non-leaf cell that corresponds to each entry in the -** %_parent table. +** Free the RtreeCursor.aConstraint[] array and its contents. */ -static void rtreecheck( - sqlite3_context *ctx, - int nArg, - sqlite3_value **apArg -){ - if( nArg!=1 && nArg!=2 ){ - sqlite3_result_error(ctx, - "wrong number of arguments to function rtreecheck()", -1 - ); - }else{ - int rc; - char *zReport = 0; - const char *zDb = (const char*)sqlite3_value_text(apArg[0]); - const char *zTab; - if( nArg==1 ){ - zTab = zDb; - zDb = "main"; - }else{ - zTab = (const char*)sqlite3_value_text(apArg[1]); - } - rc = rtreeCheckTable(sqlite3_context_db_handle(ctx), zDb, zTab, &zReport); - if( rc==SQLITE_OK ){ - sqlite3_result_text(ctx, zReport ? zReport : "ok", -1, SQLITE_TRANSIENT); - }else{ - sqlite3_result_error_code(ctx, rc); +static void freeCursorConstraints(RtreeCursor *pCsr){ + if( pCsr->aConstraint ){ + int i; /* Used to iterate through constraint array */ + for(i=0; inConstraint; i++){ + sqlite3_rtree_query_info *pInfo = pCsr->aConstraint[i].pInfo; + if( pInfo ){ + if( pInfo->xDelUser ) pInfo->xDelUser(pInfo->pUser); + sqlite3_free(pInfo); + } } - sqlite3_free(zReport); + sqlite3_free(pCsr->aConstraint); + pCsr->aConstraint = 0; } } - -/* -** Register the r-tree module with database handle db. This creates the -** virtual table module "rtree" and the debugging/analysis scalar -** function "rtreenode". +/* +** Rtree virtual table module xClose method. */ -SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){ - const int utf8 = SQLITE_UTF8; - int rc; - - rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0); - if( rc==SQLITE_OK ){ - rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0); - } - if( rc==SQLITE_OK ){ - rc = sqlite3_create_function(db, "rtreecheck", -1, utf8, 0,rtreecheck, 0,0); - } - if( rc==SQLITE_OK ){ -#ifdef SQLITE_RTREE_INT_ONLY - void *c = (void *)RTREE_COORD_INT32; -#else - void *c = (void *)RTREE_COORD_REAL32; -#endif - rc = sqlite3_create_module_v2(db, "rtree", &rtreeModule, c, 0); - } - if( rc==SQLITE_OK ){ - void *c = (void *)RTREE_COORD_INT32; - rc = sqlite3_create_module_v2(db, "rtree_i32", &rtreeModule, c, 0); - } - - return rc; +static int rtreeClose(sqlite3_vtab_cursor *cur){ + Rtree *pRtree = (Rtree *)(cur->pVtab); + int ii; + RtreeCursor *pCsr = (RtreeCursor *)cur; + assert( pRtree->nCursor>0 ); + freeCursorConstraints(pCsr); + sqlite3_finalize(pCsr->pReadAux); + sqlite3_free(pCsr->aPoint); + for(ii=0; iiaNode[ii]); + sqlite3_free(pCsr); + pRtree->nCursor--; + nodeBlobReset(pRtree); + return SQLITE_OK; } /* -** This routine deletes the RtreeGeomCallback object that was attached -** one of the SQL functions create by sqlite3_rtree_geometry_callback() -** or sqlite3_rtree_query_callback(). In other words, this routine is the -** destructor for an RtreeGeomCallback objecct. This routine is called when -** the corresponding SQL function is deleted. +** Rtree virtual table module xEof method. +** +** Return non-zero if the cursor does not currently point to a valid +** record (i.e if the scan has finished), or zero otherwise. */ -static void rtreeFreeCallback(void *p){ - RtreeGeomCallback *pInfo = (RtreeGeomCallback*)p; - if( pInfo->xDestructor ) pInfo->xDestructor(pInfo->pContext); - sqlite3_free(p); +static int rtreeEof(sqlite3_vtab_cursor *cur){ + RtreeCursor *pCsr = (RtreeCursor *)cur; + return pCsr->atEOF; } /* -** This routine frees the BLOB that is returned by geomCallback(). +** Convert raw bits from the on-disk RTree record into a coordinate value. +** The on-disk format is big-endian and needs to be converted for little- +** endian platforms. The on-disk record stores integer coordinates if +** eInt is true and it stores 32-bit floating point records if eInt is +** false. a[] is the four bytes of the on-disk record to be decoded. +** Store the results in "r". +** +** There are five versions of this macro. The last one is generic. The +** other four are various architectures-specific optimizations. */ -static void rtreeMatchArgFree(void *pArg){ - int i; - RtreeMatchArg *p = (RtreeMatchArg*)pArg; - for(i=0; inParam; i++){ - sqlite3_value_free(p->apSqlParam[i]); - } - sqlite3_free(p); +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + c.u = _byteswap_ulong(*(u32*)a); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + c.u = __builtin_bswap32(*(u32*)a); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#elif SQLITE_BYTEORDER==1234 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + memcpy(&c.u,a,4); \ + c.u = ((c.u>>24)&0xff)|((c.u>>8)&0xff00)| \ + ((c.u&0xff)<<24)|((c.u&0xff00)<<8); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#elif SQLITE_BYTEORDER==4321 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + memcpy(&c.u,a,4); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ } +#else +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + c.u = ((u32)a[0]<<24) + ((u32)a[1]<<16) \ + +((u32)a[2]<<8) + a[3]; \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#endif /* -** Each call to sqlite3_rtree_geometry_callback() or -** sqlite3_rtree_query_callback() creates an ordinary SQLite -** scalar function that is implemented by this routine. -** -** All this function does is construct an RtreeMatchArg object that -** contains the geometry-checking callback routines and a list of -** parameters to this function, then return that RtreeMatchArg object -** as a BLOB. -** -** The R-Tree MATCH operator will read the returned BLOB, deserialize -** the RtreeMatchArg object, and use the RtreeMatchArg object to figure -** out which elements of the R-Tree should be returned by the query. +** Check the RTree node or entry given by pCellData and p against the MATCH +** constraint pConstraint. */ -static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){ - RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx); - RtreeMatchArg *pBlob; - int nBlob; - int memErr = 0; +static int rtreeCallbackConstraint( + RtreeConstraint *pConstraint, /* The constraint to test */ + int eInt, /* True if RTree holding integer coordinates */ + u8 *pCellData, /* Raw cell content */ + RtreeSearchPoint *pSearch, /* Container of this cell */ + sqlite3_rtree_dbl *prScore, /* OUT: score for the cell */ + int *peWithin /* OUT: visibility of the cell */ +){ + sqlite3_rtree_query_info *pInfo = pConstraint->pInfo; /* Callback info */ + int nCoord = pInfo->nCoord; /* No. of coordinates */ + int rc; /* Callback return code */ + RtreeCoord c; /* Translator union */ + sqlite3_rtree_dbl aCoord[RTREE_MAX_DIMENSIONS*2]; /* Decoded coordinates */ - nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(RtreeDValue) - + nArg*sizeof(sqlite3_value*); - pBlob = (RtreeMatchArg *)sqlite3_malloc(nBlob); - if( !pBlob ){ - sqlite3_result_error_nomem(ctx); - }else{ - int i; - pBlob->iSize = nBlob; - pBlob->cb = pGeomCtx[0]; - pBlob->apSqlParam = (sqlite3_value**)&pBlob->aParam[nArg]; - pBlob->nParam = nArg; - for(i=0; iapSqlParam[i] = sqlite3_value_dup(aArg[i]); - if( pBlob->apSqlParam[i]==0 ) memErr = 1; -#ifdef SQLITE_RTREE_INT_ONLY - pBlob->aParam[i] = sqlite3_value_int64(aArg[i]); -#else - pBlob->aParam[i] = sqlite3_value_double(aArg[i]); + assert( pConstraint->op==RTREE_MATCH || pConstraint->op==RTREE_QUERY ); + assert( nCoord==2 || nCoord==4 || nCoord==6 || nCoord==8 || nCoord==10 ); + + if( pConstraint->op==RTREE_QUERY && pSearch->iLevel==1 ){ + pInfo->iRowid = readInt64(pCellData); + } + pCellData += 8; +#ifndef SQLITE_RTREE_INT_ONLY + if( eInt==0 ){ + switch( nCoord ){ + case 10: readCoord(pCellData+36, &c); aCoord[9] = c.f; + readCoord(pCellData+32, &c); aCoord[8] = c.f; + case 8: readCoord(pCellData+28, &c); aCoord[7] = c.f; + readCoord(pCellData+24, &c); aCoord[6] = c.f; + case 6: readCoord(pCellData+20, &c); aCoord[5] = c.f; + readCoord(pCellData+16, &c); aCoord[4] = c.f; + case 4: readCoord(pCellData+12, &c); aCoord[3] = c.f; + readCoord(pCellData+8, &c); aCoord[2] = c.f; + default: readCoord(pCellData+4, &c); aCoord[1] = c.f; + readCoord(pCellData, &c); aCoord[0] = c.f; + } + }else #endif + { + switch( nCoord ){ + case 10: readCoord(pCellData+36, &c); aCoord[9] = c.i; + readCoord(pCellData+32, &c); aCoord[8] = c.i; + case 8: readCoord(pCellData+28, &c); aCoord[7] = c.i; + readCoord(pCellData+24, &c); aCoord[6] = c.i; + case 6: readCoord(pCellData+20, &c); aCoord[5] = c.i; + readCoord(pCellData+16, &c); aCoord[4] = c.i; + case 4: readCoord(pCellData+12, &c); aCoord[3] = c.i; + readCoord(pCellData+8, &c); aCoord[2] = c.i; + default: readCoord(pCellData+4, &c); aCoord[1] = c.i; + readCoord(pCellData, &c); aCoord[0] = c.i; } - if( memErr ){ - sqlite3_result_error_nomem(ctx); - rtreeMatchArgFree(pBlob); - }else{ - sqlite3_result_pointer(ctx, pBlob, "RtreeMatchArg", rtreeMatchArgFree); + } + if( pConstraint->op==RTREE_MATCH ){ + int eWithin = 0; + rc = pConstraint->u.xGeom((sqlite3_rtree_geometry*)pInfo, + nCoord, aCoord, &eWithin); + if( eWithin==0 ) *peWithin = NOT_WITHIN; + *prScore = RTREE_ZERO; + }else{ + pInfo->aCoord = aCoord; + pInfo->iLevel = pSearch->iLevel - 1; + pInfo->rScore = pInfo->rParentScore = pSearch->rScore; + pInfo->eWithin = pInfo->eParentWithin = pSearch->eWithin; + rc = pConstraint->u.xQueryFunc(pInfo); + if( pInfo->eWithin<*peWithin ) *peWithin = pInfo->eWithin; + if( pInfo->rScore<*prScore || *prScorerScore; } } + return rc; } -/* -** Register a new geometry function for use with the r-tree MATCH operator. +/* +** Check the internal RTree node given by pCellData against constraint p. +** If this constraint cannot be satisfied by any child within the node, +** set *peWithin to NOT_WITHIN. */ -SQLITE_API int sqlite3_rtree_geometry_callback( - sqlite3 *db, /* Register SQL function on this connection */ - const char *zGeom, /* Name of the new SQL function */ - int (*xGeom)(sqlite3_rtree_geometry*,int,RtreeDValue*,int*), /* Callback */ - void *pContext /* Extra data associated with the callback */ +static void rtreeNonleafConstraint( + RtreeConstraint *p, /* The constraint to test */ + int eInt, /* True if RTree holds integer coordinates */ + u8 *pCellData, /* Raw cell content as appears on disk */ + int *peWithin /* Adjust downward, as appropriate */ ){ - RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */ + sqlite3_rtree_dbl val; /* Coordinate value convert to a double */ - /* Allocate and populate the context object. */ - pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback)); - if( !pGeomCtx ) return SQLITE_NOMEM; - pGeomCtx->xGeom = xGeom; - pGeomCtx->xQueryFunc = 0; - pGeomCtx->xDestructor = 0; - pGeomCtx->pContext = pContext; - return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY, - (void *)pGeomCtx, geomCallback, 0, 0, rtreeFreeCallback - ); + /* p->iCoord might point to either a lower or upper bound coordinate + ** in a coordinate pair. But make pCellData point to the lower bound. + */ + pCellData += 8 + 4*(p->iCoord&0xfe); + + assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE + || p->op==RTREE_GT || p->op==RTREE_EQ ); + assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ + switch( p->op ){ + case RTREE_LE: + case RTREE_LT: + case RTREE_EQ: + RTREE_DECODE_COORD(eInt, pCellData, val); + /* val now holds the lower bound of the coordinate pair */ + if( p->u.rValue>=val ) return; + if( p->op!=RTREE_EQ ) break; /* RTREE_LE and RTREE_LT end here */ + /* Fall through for the RTREE_EQ case */ + + default: /* RTREE_GT or RTREE_GE, or fallthrough of RTREE_EQ */ + pCellData += 4; + RTREE_DECODE_COORD(eInt, pCellData, val); + /* val now holds the upper bound of the coordinate pair */ + if( p->u.rValue<=val ) return; + } + *peWithin = NOT_WITHIN; } /* -** Register a new 2nd-generation geometry function for use with the -** r-tree MATCH operator. +** Check the leaf RTree cell given by pCellData against constraint p. +** If this constraint is not satisfied, set *peWithin to NOT_WITHIN. +** If the constraint is satisfied, leave *peWithin unchanged. +** +** The constraint is of the form: xN op $val +** +** The op is given by p->op. The xN is p->iCoord-th coordinate in +** pCellData. $val is given by p->u.rValue. */ -SQLITE_API int sqlite3_rtree_query_callback( - sqlite3 *db, /* Register SQL function on this connection */ - const char *zQueryFunc, /* Name of new SQL function */ - int (*xQueryFunc)(sqlite3_rtree_query_info*), /* Callback */ - void *pContext, /* Extra data passed into the callback */ - void (*xDestructor)(void*) /* Destructor for the extra data */ +static void rtreeLeafConstraint( + RtreeConstraint *p, /* The constraint to test */ + int eInt, /* True if RTree holds integer coordinates */ + u8 *pCellData, /* Raw cell content as appears on disk */ + int *peWithin /* Adjust downward, as appropriate */ ){ - RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */ + RtreeDValue xN; /* Coordinate value converted to a double */ - /* Allocate and populate the context object. */ - pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback)); - if( !pGeomCtx ) return SQLITE_NOMEM; - pGeomCtx->xGeom = 0; - pGeomCtx->xQueryFunc = xQueryFunc; - pGeomCtx->xDestructor = xDestructor; - pGeomCtx->pContext = pContext; - return sqlite3_create_function_v2(db, zQueryFunc, -1, SQLITE_ANY, - (void *)pGeomCtx, geomCallback, 0, 0, rtreeFreeCallback - ); + assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE + || p->op==RTREE_GT || p->op==RTREE_EQ ); + pCellData += 8 + p->iCoord*4; + assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ + RTREE_DECODE_COORD(eInt, pCellData, xN); + switch( p->op ){ + case RTREE_LE: if( xN <= p->u.rValue ) return; break; + case RTREE_LT: if( xN < p->u.rValue ) return; break; + case RTREE_GE: if( xN >= p->u.rValue ) return; break; + case RTREE_GT: if( xN > p->u.rValue ) return; break; + default: if( xN == p->u.rValue ) return; break; + } + *peWithin = NOT_WITHIN; } -#if !SQLITE_CORE -#ifdef _WIN32 -__declspec(dllexport) -#endif -SQLITE_API int sqlite3_rtree_init( - sqlite3 *db, - char **pzErrMsg, - const sqlite3_api_routines *pApi +/* +** One of the cells in node pNode is guaranteed to have a 64-bit +** integer value equal to iRowid. Return the index of this cell. +*/ +static int nodeRowidIndex( + Rtree *pRtree, + RtreeNode *pNode, + i64 iRowid, + int *piIndex ){ - SQLITE_EXTENSION_INIT2(pApi) - return sqlite3RtreeInit(db); + int ii; + int nCell = NCELL(pNode); + assert( nCell<200 ); + for(ii=0; ii -#include -#include -#include - -/* #include */ - -#ifndef SQLITE_CORE -/* #include "sqlite3ext.h" */ - SQLITE_EXTENSION_INIT1 -#else -/* #include "sqlite3.h" */ -#endif +static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){ + RtreeNode *pParent = pNode->pParent; + if( pParent ){ + return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex); + } + *piIndex = -1; + return SQLITE_OK; +} /* -** This function is called when an ICU function called from within -** the implementation of an SQL scalar function returns an error. +** Compare two search points. Return negative, zero, or positive if the first +** is less than, equal to, or greater than the second. ** -** The scalar function context passed as the first argument is -** loaded with an error message based on the following two args. +** The rScore is the primary key. Smaller rScore values come first. +** If the rScore is a tie, then use iLevel as the tie breaker with smaller +** iLevel values coming first. In this way, if rScore is the same for all +** SearchPoints, then iLevel becomes the deciding factor and the result +** is a depth-first search, which is the desired default behavior. */ -static void icuFunctionError( - sqlite3_context *pCtx, /* SQLite scalar function context */ - const char *zName, /* Name of ICU function that failed */ - UErrorCode e /* Error code returned by ICU function */ +static int rtreeSearchPointCompare( + const RtreeSearchPoint *pA, + const RtreeSearchPoint *pB ){ - char zBuf[128]; - sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e)); - zBuf[127] = '\0'; - sqlite3_result_error(pCtx, zBuf, -1); + if( pA->rScorerScore ) return -1; + if( pA->rScore>pB->rScore ) return +1; + if( pA->iLeveliLevel ) return -1; + if( pA->iLevel>pB->iLevel ) return +1; + return 0; } -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) - /* -** Maximum length (in bytes) of the pattern in a LIKE or GLOB -** operator. +** Interchange two search points in a cursor. */ -#ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH -# define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000 -#endif +static void rtreeSearchPointSwap(RtreeCursor *p, int i, int j){ + RtreeSearchPoint t = p->aPoint[i]; + assert( iaPoint[i] = p->aPoint[j]; + p->aPoint[j] = t; + i++; j++; + if( i=RTREE_CACHE_SZ ){ + nodeRelease(RTREE_OF_CURSOR(p), p->aNode[i]); + p->aNode[i] = 0; + }else{ + RtreeNode *pTemp = p->aNode[i]; + p->aNode[i] = p->aNode[j]; + p->aNode[j] = pTemp; + } + } +} /* -** Version of sqlite3_free() that is always a function, never a macro. +** Return the search point with the lowest current score. */ -static void xFree(void *p){ - sqlite3_free(p); +static RtreeSearchPoint *rtreeSearchPointFirst(RtreeCursor *pCur){ + return pCur->bPoint ? &pCur->sPoint : pCur->nPoint ? pCur->aPoint : 0; } /* -** This lookup table is used to help decode the first byte of -** a multi-byte UTF8 character. It is copied here from SQLite source -** code file utf8.c. +** Get the RtreeNode for the search point with the lowest score. */ -static const unsigned char icuUtf8Trans1[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, -}; - -#define SQLITE_ICU_READ_UTF8(zIn, c) \ - c = *(zIn++); \ - if( c>=0xc0 ){ \ - c = icuUtf8Trans1[c-0xc0]; \ - while( (*zIn & 0xc0)==0x80 ){ \ - c = (c<<6) + (0x3f & *(zIn++)); \ - } \ - } - -#define SQLITE_ICU_SKIP_UTF8(zIn) \ - assert( *zIn ); \ - if( *(zIn++)>=0xc0 ){ \ - while( (*zIn & 0xc0)==0x80 ){zIn++;} \ +static RtreeNode *rtreeNodeOfFirstSearchPoint(RtreeCursor *pCur, int *pRC){ + sqlite3_int64 id; + int ii = 1 - pCur->bPoint; + assert( ii==0 || ii==1 ); + assert( pCur->bPoint || pCur->nPoint ); + if( pCur->aNode[ii]==0 ){ + assert( pRC!=0 ); + id = ii ? pCur->aPoint[0].id : pCur->sPoint.id; + *pRC = nodeAcquire(RTREE_OF_CURSOR(pCur), id, 0, &pCur->aNode[ii]); } - + return pCur->aNode[ii]; +} /* -** Compare two UTF-8 strings for equality where the first string is -** a "LIKE" expression. Return true (1) if they are the same and -** false (0) if they are different. +** Push a new element onto the priority queue */ -static int icuLikeCompare( - const uint8_t *zPattern, /* LIKE pattern */ - const uint8_t *zString, /* The UTF-8 string to compare against */ - const UChar32 uEsc /* The escape character */ +static RtreeSearchPoint *rtreeEnqueue( + RtreeCursor *pCur, /* The cursor */ + RtreeDValue rScore, /* Score for the new search point */ + u8 iLevel /* Level for the new search point */ ){ - static const uint32_t MATCH_ONE = (uint32_t)'_'; - static const uint32_t MATCH_ALL = (uint32_t)'%'; - - int prevEscape = 0; /* True if the previous character was uEsc */ - - while( 1 ){ - - /* Read (and consume) the next character from the input pattern. */ - uint32_t uPattern; - SQLITE_ICU_READ_UTF8(zPattern, uPattern); - if( uPattern==0 ) break; - - /* There are now 4 possibilities: - ** - ** 1. uPattern is an unescaped match-all character "%", - ** 2. uPattern is an unescaped match-one character "_", - ** 3. uPattern is an unescaped escape character, or - ** 4. uPattern is to be handled as an ordinary character - */ - if( !prevEscape && uPattern==MATCH_ALL ){ - /* Case 1. */ - uint8_t c; - - /* Skip any MATCH_ALL or MATCH_ONE characters that follow a - ** MATCH_ALL. For each MATCH_ONE, skip one character in the - ** test string. - */ - while( (c=*zPattern) == MATCH_ALL || c == MATCH_ONE ){ - if( c==MATCH_ONE ){ - if( *zString==0 ) return 0; - SQLITE_ICU_SKIP_UTF8(zString); - } - zPattern++; - } - - if( *zPattern==0 ) return 1; - - while( *zString ){ - if( icuLikeCompare(zPattern, zString, uEsc) ){ - return 1; - } - SQLITE_ICU_SKIP_UTF8(zString); - } - return 0; - - }else if( !prevEscape && uPattern==MATCH_ONE ){ - /* Case 2. */ - if( *zString==0 ) return 0; - SQLITE_ICU_SKIP_UTF8(zString); - - }else if( !prevEscape && uPattern==(uint32_t)uEsc){ - /* Case 3. */ - prevEscape = 1; - - }else{ - /* Case 4. */ - uint32_t uString; - SQLITE_ICU_READ_UTF8(zString, uString); - uString = (uint32_t)u_foldCase((UChar32)uString, U_FOLD_CASE_DEFAULT); - uPattern = (uint32_t)u_foldCase((UChar32)uPattern, U_FOLD_CASE_DEFAULT); - if( uString!=uPattern ){ - return 0; - } - prevEscape = 0; - } + int i, j; + RtreeSearchPoint *pNew; + if( pCur->nPoint>=pCur->nPointAlloc ){ + int nNew = pCur->nPointAlloc*2 + 8; + pNew = sqlite3_realloc(pCur->aPoint, nNew*sizeof(pCur->aPoint[0])); + if( pNew==0 ) return 0; + pCur->aPoint = pNew; + pCur->nPointAlloc = nNew; } - - return *zString==0; + i = pCur->nPoint++; + pNew = pCur->aPoint + i; + pNew->rScore = rScore; + pNew->iLevel = iLevel; + assert( iLevel<=RTREE_MAX_DEPTH ); + while( i>0 ){ + RtreeSearchPoint *pParent; + j = (i-1)/2; + pParent = pCur->aPoint + j; + if( rtreeSearchPointCompare(pNew, pParent)>=0 ) break; + rtreeSearchPointSwap(pCur, j, i); + i = j; + pNew = pParent; + } + return pNew; } /* -** Implementation of the like() SQL function. This function implements -** the build-in LIKE operator. The first argument to the function is the -** pattern and the second argument is the string. So, the SQL statements: -** -** A LIKE B -** -** is implemented as like(B, A). If there is an escape character E, -** -** A LIKE B ESCAPE E -** -** is mapped to like(B, A, E). +** Allocate a new RtreeSearchPoint and return a pointer to it. Return +** NULL if malloc fails. */ -static void icuLikeFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv +static RtreeSearchPoint *rtreeSearchPointNew( + RtreeCursor *pCur, /* The cursor */ + RtreeDValue rScore, /* Score for the new search point */ + u8 iLevel /* Level for the new search point */ ){ - const unsigned char *zA = sqlite3_value_text(argv[0]); - const unsigned char *zB = sqlite3_value_text(argv[1]); - UChar32 uEsc = 0; - - /* Limit the length of the LIKE or GLOB pattern to avoid problems - ** of deep recursion and N*N behavior in patternCompare(). - */ - if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){ - sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1); - return; - } - - - if( argc==3 ){ - /* The escape character string must consist of a single UTF-8 character. - ** Otherwise, return an error. - */ - int nE= sqlite3_value_bytes(argv[2]); - const unsigned char *zE = sqlite3_value_text(argv[2]); - int i = 0; - if( zE==0 ) return; - U8_NEXT(zE, i, nE, uEsc); - if( i!=nE){ - sqlite3_result_error(context, - "ESCAPE expression must be a single character", -1); - return; + RtreeSearchPoint *pNew, *pFirst; + pFirst = rtreeSearchPointFirst(pCur); + pCur->anQueue[iLevel]++; + if( pFirst==0 + || pFirst->rScore>rScore + || (pFirst->rScore==rScore && pFirst->iLevel>iLevel) + ){ + if( pCur->bPoint ){ + int ii; + pNew = rtreeEnqueue(pCur, rScore, iLevel); + if( pNew==0 ) return 0; + ii = (int)(pNew - pCur->aPoint) + 1; + if( iiaNode[ii]==0 ); + pCur->aNode[ii] = pCur->aNode[0]; + }else{ + nodeRelease(RTREE_OF_CURSOR(pCur), pCur->aNode[0]); + } + pCur->aNode[0] = 0; + *pNew = pCur->sPoint; } + pCur->sPoint.rScore = rScore; + pCur->sPoint.iLevel = iLevel; + pCur->bPoint = 1; + return &pCur->sPoint; + }else{ + return rtreeEnqueue(pCur, rScore, iLevel); } +} - if( zA && zB ){ - sqlite3_result_int(context, icuLikeCompare(zA, zB, uEsc)); +#if 0 +/* Tracing routines for the RtreeSearchPoint queue */ +static void tracePoint(RtreeSearchPoint *p, int idx, RtreeCursor *pCur){ + if( idx<0 ){ printf(" s"); }else{ printf("%2d", idx); } + printf(" %d.%05lld.%02d %g %d", + p->iLevel, p->id, p->iCell, p->rScore, p->eWithin + ); + idx++; + if( idxaNode[idx]); + }else{ + printf("\n"); } } - -/* -** Function to delete compiled regexp objects. Registered as -** a destructor function with sqlite3_set_auxdata(). -*/ -static void icuRegexpDelete(void *p){ - URegularExpression *pExpr = (URegularExpression *)p; - uregex_close(pExpr); +static void traceQueue(RtreeCursor *pCur, const char *zPrefix){ + int ii; + printf("=== %9s ", zPrefix); + if( pCur->bPoint ){ + tracePoint(&pCur->sPoint, -1, pCur); + } + for(ii=0; iinPoint; ii++){ + if( ii>0 || pCur->bPoint ) printf(" "); + tracePoint(&pCur->aPoint[ii], ii, pCur); + } } +# define RTREE_QUEUE_TRACE(A,B) traceQueue(A,B) +#else +# define RTREE_QUEUE_TRACE(A,B) /* no-op */ +#endif -/* -** Implementation of SQLite REGEXP operator. This scalar function takes -** two arguments. The first is a regular expression pattern to compile -** the second is a string to match against that pattern. If either -** argument is an SQL NULL, then NULL Is returned. Otherwise, the result -** is 1 if the string matches the pattern, or 0 otherwise. -** -** SQLite maps the regexp() function to the regexp() operator such -** that the following two are equivalent: -** -** zString REGEXP zPattern -** regexp(zPattern, zString) -** -** Uses the following ICU regexp APIs: -** -** uregex_open() -** uregex_matches() -** uregex_close() +/* Remove the search point with the lowest current score. */ -static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg){ - UErrorCode status = U_ZERO_ERROR; - URegularExpression *pExpr; - UBool res; - const UChar *zString = sqlite3_value_text16(apArg[1]); - - (void)nArg; /* Unused parameter */ - - /* If the left hand side of the regexp operator is NULL, - ** then the result is also NULL. - */ - if( !zString ){ - return; +static void rtreeSearchPointPop(RtreeCursor *p){ + int i, j, k, n; + i = 1 - p->bPoint; + assert( i==0 || i==1 ); + if( p->aNode[i] ){ + nodeRelease(RTREE_OF_CURSOR(p), p->aNode[i]); + p->aNode[i] = 0; } - - pExpr = sqlite3_get_auxdata(p, 0); - if( !pExpr ){ - const UChar *zPattern = sqlite3_value_text16(apArg[0]); - if( !zPattern ){ - return; + if( p->bPoint ){ + p->anQueue[p->sPoint.iLevel]--; + p->bPoint = 0; + }else if( p->nPoint ){ + p->anQueue[p->aPoint[0].iLevel]--; + n = --p->nPoint; + p->aPoint[0] = p->aPoint[n]; + if( naNode[1] = p->aNode[n+1]; + p->aNode[n+1] = 0; } - pExpr = uregex_open(zPattern, -1, 0, 0, &status); - - if( U_SUCCESS(status) ){ - sqlite3_set_auxdata(p, 0, pExpr, icuRegexpDelete); - }else{ - assert(!pExpr); - icuFunctionError(p, "uregex_open", status); - return; + i = 0; + while( (j = i*2+1)aPoint[k], &p->aPoint[j])<0 ){ + if( rtreeSearchPointCompare(&p->aPoint[k], &p->aPoint[i])<0 ){ + rtreeSearchPointSwap(p, i, k); + i = k; + }else{ + break; + } + }else{ + if( rtreeSearchPointCompare(&p->aPoint[j], &p->aPoint[i])<0 ){ + rtreeSearchPointSwap(p, i, j); + i = j; + }else{ + break; + } + } } } - - /* Configure the text that the regular expression operates on. */ - uregex_setText(pExpr, zString, -1, &status); - if( !U_SUCCESS(status) ){ - icuFunctionError(p, "uregex_setText", status); - return; - } - - /* Attempt the match */ - res = uregex_matches(pExpr, 0, &status); - if( !U_SUCCESS(status) ){ - icuFunctionError(p, "uregex_matches", status); - return; - } - - /* Set the text that the regular expression operates on to a NULL - ** pointer. This is not really necessary, but it is tidier than - ** leaving the regular expression object configured with an invalid - ** pointer after this function returns. - */ - uregex_setText(pExpr, 0, 0, &status); - - /* Return 1 or 0. */ - sqlite3_result_int(p, res ? 1 : 0); } + /* -** Implementations of scalar functions for case mapping - upper() and -** lower(). Function upper() converts its input to upper-case (ABC). -** Function lower() converts to lower-case (abc). -** -** ICU provides two types of case mapping, "general" case mapping and -** "language specific". Refer to ICU documentation for the differences -** between the two. -** -** To utilise "general" case mapping, the upper() or lower() scalar -** functions are invoked with one argument: -** -** upper('ABC') -> 'abc' -** lower('abc') -> 'ABC' -** -** To access ICU "language specific" case mapping, upper() or lower() -** should be invoked with two arguments. The second argument is the name -** of the locale to use. Passing an empty string ("") or SQL NULL value -** as the second argument is the same as invoking the 1 argument version -** of upper() or lower(). -** -** lower('I', 'en_us') -> 'i' -** lower('I', 'tr_tr') -> '\u131' (small dotless i) -** -** http://www.icu-project.org/userguide/posix.html#case_mappings +** Continue the search on cursor pCur until the front of the queue +** contains an entry suitable for returning as a result-set row, +** or until the RtreeSearchPoint queue is empty, indicating that the +** query has completed. */ -static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){ - const UChar *zInput; /* Pointer to input string */ - UChar *zOutput = 0; /* Pointer to output buffer */ - int nInput; /* Size of utf-16 input string in bytes */ - int nOut; /* Size of output buffer in bytes */ - int cnt; - int bToUpper; /* True for toupper(), false for tolower() */ - UErrorCode status; - const char *zLocale = 0; - - assert(nArg==1 || nArg==2); - bToUpper = (sqlite3_user_data(p)!=0); - if( nArg==2 ){ - zLocale = (const char *)sqlite3_value_text(apArg[1]); - } - - zInput = sqlite3_value_text16(apArg[0]); - if( !zInput ){ - return; - } - nOut = nInput = sqlite3_value_bytes16(apArg[0]); - if( nOut==0 ){ - sqlite3_result_text16(p, "", 0, SQLITE_STATIC); - return; - } +static int rtreeStepToLeaf(RtreeCursor *pCur){ + RtreeSearchPoint *p; + Rtree *pRtree = RTREE_OF_CURSOR(pCur); + RtreeNode *pNode; + int eWithin; + int rc = SQLITE_OK; + int nCell; + int nConstraint = pCur->nConstraint; + int ii; + int eInt; + RtreeSearchPoint x; - for(cnt=0; cnt<2; cnt++){ - UChar *zNew = sqlite3_realloc(zOutput, nOut); - if( zNew==0 ){ - sqlite3_free(zOutput); - sqlite3_result_error_nomem(p); - return; + eInt = pRtree->eCoordType==RTREE_COORD_INT32; + while( (p = rtreeSearchPointFirst(pCur))!=0 && p->iLevel>0 ){ + pNode = rtreeNodeOfFirstSearchPoint(pCur, &rc); + if( rc ) return rc; + nCell = NCELL(pNode); + assert( nCell<200 ); + while( p->iCellzData + (4+pRtree->nBytesPerCell*p->iCell); + eWithin = FULLY_WITHIN; + for(ii=0; iiaConstraint + ii; + if( pConstraint->op>=RTREE_MATCH ){ + rc = rtreeCallbackConstraint(pConstraint, eInt, pCellData, p, + &rScore, &eWithin); + if( rc ) return rc; + }else if( p->iLevel==1 ){ + rtreeLeafConstraint(pConstraint, eInt, pCellData, &eWithin); + }else{ + rtreeNonleafConstraint(pConstraint, eInt, pCellData, &eWithin); + } + if( eWithin==NOT_WITHIN ) break; + } + p->iCell++; + if( eWithin==NOT_WITHIN ) continue; + x.iLevel = p->iLevel - 1; + if( x.iLevel ){ + x.id = readInt64(pCellData); + x.iCell = 0; + }else{ + x.id = p->id; + x.iCell = p->iCell - 1; + } + if( p->iCell>=nCell ){ + RTREE_QUEUE_TRACE(pCur, "POP-S:"); + rtreeSearchPointPop(pCur); + } + if( rScoreeWithin = (u8)eWithin; + p->id = x.id; + p->iCell = x.iCell; + RTREE_QUEUE_TRACE(pCur, "PUSH-S:"); + break; } - zOutput = zNew; - status = U_ZERO_ERROR; - if( bToUpper ){ - nOut = 2*u_strToUpper(zOutput,nOut/2,zInput,nInput/2,zLocale,&status); - }else{ - nOut = 2*u_strToLower(zOutput,nOut/2,zInput,nInput/2,zLocale,&status); + if( p->iCell>=nCell ){ + RTREE_QUEUE_TRACE(pCur, "POP-Se:"); + rtreeSearchPointPop(pCur); } + } + pCur->atEOF = p==0; + return SQLITE_OK; +} - if( U_SUCCESS(status) ){ - sqlite3_result_text16(p, zOutput, nOut, xFree); - }else if( status==U_BUFFER_OVERFLOW_ERROR ){ - assert( cnt==0 ); - continue; - }else{ - icuFunctionError(p, bToUpper ? "u_strToUpper" : "u_strToLower", status); - } - return; +/* +** Rtree virtual table module xNext method. +*/ +static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){ + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + int rc = SQLITE_OK; + + /* Move to the next entry that matches the configured constraints. */ + RTREE_QUEUE_TRACE(pCsr, "POP-Nx:"); + if( pCsr->bAuxValid ){ + pCsr->bAuxValid = 0; + sqlite3_reset(pCsr->pReadAux); } - assert( 0 ); /* Unreachable */ + rtreeSearchPointPop(pCsr); + rc = rtreeStepToLeaf(pCsr); + return rc; } -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */ +/* +** Rtree virtual table module xRowid method. +*/ +static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){ + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); + int rc = SQLITE_OK; + RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); + if( rc==SQLITE_OK && p ){ + *pRowid = nodeGetRowid(RTREE_OF_CURSOR(pCsr), pNode, p->iCell); + } + return rc; +} -/* -** Collation sequence destructor function. The pCtx argument points to -** a UCollator structure previously allocated using ucol_open(). +/* +** Rtree virtual table module xColumn method. */ -static void icuCollationDel(void *pCtx){ - UCollator *p = (UCollator *)pCtx; - ucol_close(p); +static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ + Rtree *pRtree = (Rtree *)cur->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)cur; + RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); + RtreeCoord c; + int rc = SQLITE_OK; + RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); + + if( rc ) return rc; + if( p==0 ) return SQLITE_OK; + if( i==0 ){ + sqlite3_result_int64(ctx, nodeGetRowid(pRtree, pNode, p->iCell)); + }else if( i<=pRtree->nDim2 ){ + nodeGetCoord(pRtree, pNode, p->iCell, i-1, &c); +#ifndef SQLITE_RTREE_INT_ONLY + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + sqlite3_result_double(ctx, c.f); + }else +#endif + { + assert( pRtree->eCoordType==RTREE_COORD_INT32 ); + sqlite3_result_int(ctx, c.i); + } + }else{ + if( !pCsr->bAuxValid ){ + if( pCsr->pReadAux==0 ){ + rc = sqlite3_prepare_v3(pRtree->db, pRtree->zReadAuxSql, -1, 0, + &pCsr->pReadAux, 0); + if( rc ) return rc; + } + sqlite3_bind_int64(pCsr->pReadAux, 1, + nodeGetRowid(pRtree, pNode, p->iCell)); + rc = sqlite3_step(pCsr->pReadAux); + if( rc==SQLITE_ROW ){ + pCsr->bAuxValid = 1; + }else{ + sqlite3_reset(pCsr->pReadAux); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + return rc; + } + } + sqlite3_result_value(ctx, + sqlite3_column_value(pCsr->pReadAux, i - pRtree->nDim2 + 1)); + } + return SQLITE_OK; } -/* -** Collation sequence comparison function. The pCtx argument points to -** a UCollator structure previously allocated using ucol_open(). +/* +** Use nodeAcquire() to obtain the leaf node containing the record with +** rowid iRowid. If successful, set *ppLeaf to point to the node and +** return SQLITE_OK. If there is no such record in the table, set +** *ppLeaf to 0 and return SQLITE_OK. If an error occurs, set *ppLeaf +** to zero and return an SQLite error code. */ -static int icuCollationColl( - void *pCtx, - int nLeft, - const void *zLeft, - int nRight, - const void *zRight +static int findLeafNode( + Rtree *pRtree, /* RTree to search */ + i64 iRowid, /* The rowid searching for */ + RtreeNode **ppLeaf, /* Write the node here */ + sqlite3_int64 *piNode /* Write the node-id here */ ){ - UCollationResult res; - UCollator *p = (UCollator *)pCtx; - res = ucol_strcoll(p, (UChar *)zLeft, nLeft/2, (UChar *)zRight, nRight/2); - switch( res ){ - case UCOL_LESS: return -1; - case UCOL_GREATER: return +1; - case UCOL_EQUAL: return 0; + int rc; + *ppLeaf = 0; + sqlite3_bind_int64(pRtree->pReadRowid, 1, iRowid); + if( sqlite3_step(pRtree->pReadRowid)==SQLITE_ROW ){ + i64 iNode = sqlite3_column_int64(pRtree->pReadRowid, 0); + if( piNode ) *piNode = iNode; + rc = nodeAcquire(pRtree, iNode, 0, ppLeaf); + sqlite3_reset(pRtree->pReadRowid); + }else{ + rc = sqlite3_reset(pRtree->pReadRowid); } - assert(!"Unexpected return value from ucol_strcoll()"); - return 0; + return rc; } /* -** Implementation of the scalar function icu_load_collation(). -** -** This scalar function is used to add ICU collation based collation -** types to an SQLite database connection. It is intended to be called -** as follows: -** -** SELECT icu_load_collation(, ); -** -** Where is a string containing an ICU locale identifier (i.e. -** "en_AU", "tr_TR" etc.) and is the name of the -** collation sequence to create. +** This function is called to configure the RtreeConstraint object passed +** as the second argument for a MATCH constraint. The value passed as the +** first argument to this function is the right-hand operand to the MATCH +** operator. */ -static void icuLoadCollation( - sqlite3_context *p, - int nArg, - sqlite3_value **apArg -){ - sqlite3 *db = (sqlite3 *)sqlite3_user_data(p); - UErrorCode status = U_ZERO_ERROR; - const char *zLocale; /* Locale identifier - (eg. "jp_JP") */ - const char *zName; /* SQL Collation sequence name (eg. "japanese") */ - UCollator *pUCollator; /* ICU library collation object */ - int rc; /* Return code from sqlite3_create_collation_x() */ - - assert(nArg==2); - (void)nArg; /* Unused parameter */ - zLocale = (const char *)sqlite3_value_text(apArg[0]); - zName = (const char *)sqlite3_value_text(apArg[1]); - - if( !zLocale || !zName ){ - return; - } +static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){ + RtreeMatchArg *pBlob, *pSrc; /* BLOB returned by geometry function */ + sqlite3_rtree_query_info *pInfo; /* Callback information */ - pUCollator = ucol_open(zLocale, &status); - if( !U_SUCCESS(status) ){ - icuFunctionError(p, "ucol_open", status); - return; - } - assert(p); + pSrc = sqlite3_value_pointer(pValue, "RtreeMatchArg"); + if( pSrc==0 ) return SQLITE_ERROR; + pInfo = (sqlite3_rtree_query_info*) + sqlite3_malloc64( sizeof(*pInfo)+pSrc->iSize ); + if( !pInfo ) return SQLITE_NOMEM; + memset(pInfo, 0, sizeof(*pInfo)); + pBlob = (RtreeMatchArg*)&pInfo[1]; + memcpy(pBlob, pSrc, pSrc->iSize); + pInfo->pContext = pBlob->cb.pContext; + pInfo->nParam = pBlob->nParam; + pInfo->aParam = pBlob->aParam; + pInfo->apSqlParam = pBlob->apSqlParam; - rc = sqlite3_create_collation_v2(db, zName, SQLITE_UTF16, (void *)pUCollator, - icuCollationColl, icuCollationDel - ); - if( rc!=SQLITE_OK ){ - ucol_close(pUCollator); - sqlite3_result_error(p, "Error registering collation function", -1); + if( pBlob->cb.xGeom ){ + pCons->u.xGeom = pBlob->cb.xGeom; + }else{ + pCons->op = RTREE_QUERY; + pCons->u.xQueryFunc = pBlob->cb.xQueryFunc; } + pCons->pInfo = pInfo; + return SQLITE_OK; } -/* -** Register the ICU extension functions with database db. +/* +** Rtree virtual table module xFilter method. */ -SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){ - static const struct IcuScalar { - const char *zName; /* Function name */ - unsigned char nArg; /* Number of arguments */ - unsigned short enc; /* Optimal text encoding */ - unsigned char iContext; /* sqlite3_user_data() context */ - void (*xFunc)(sqlite3_context*,int,sqlite3_value**); - } scalars[] = { - {"icu_load_collation", 2, SQLITE_UTF8, 1, icuLoadCollation}, -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) - {"regexp", 2, SQLITE_ANY|SQLITE_DETERMINISTIC, 0, icuRegexpFunc}, - {"lower", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, - {"lower", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, - {"upper", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, - {"upper", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, - {"lower", 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, - {"lower", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, - {"upper", 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, - {"upper", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, - {"like", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, - {"like", 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */ - }; +static int rtreeFilter( + sqlite3_vtab_cursor *pVtabCursor, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + Rtree *pRtree = (Rtree *)pVtabCursor->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + RtreeNode *pRoot = 0; + int ii; int rc = SQLITE_OK; - int i; - - for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){ - const struct IcuScalar *p = &scalars[i]; - rc = sqlite3_create_function( - db, p->zName, p->nArg, p->enc, - p->iContext ? (void*)db : (void*)0, - p->xFunc, 0, 0 - ); - } + int iCell = 0; + sqlite3_stmt *pStmt; - return rc; -} + rtreeReference(pRtree); -#if !SQLITE_CORE -#ifdef _WIN32 -__declspec(dllexport) -#endif -SQLITE_API int sqlite3_icu_init( - sqlite3 *db, - char **pzErrMsg, - const sqlite3_api_routines *pApi -){ - SQLITE_EXTENSION_INIT2(pApi) - return sqlite3IcuInit(db); -} -#endif + /* Reset the cursor to the same state as rtreeOpen() leaves it in. */ + freeCursorConstraints(pCsr); + sqlite3_free(pCsr->aPoint); + pStmt = pCsr->pReadAux; + memset(pCsr, 0, sizeof(RtreeCursor)); + pCsr->base.pVtab = (sqlite3_vtab*)pRtree; + pCsr->pReadAux = pStmt; + pCsr->iStrategy = idxNum; + if( idxNum==1 ){ + /* Special case - lookup by rowid. */ + RtreeNode *pLeaf; /* Leaf on which the required cell resides */ + RtreeSearchPoint *p; /* Search point for the leaf */ + i64 iRowid = sqlite3_value_int64(argv[0]); + i64 iNode = 0; + rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode); + if( rc==SQLITE_OK && pLeaf!=0 ){ + p = rtreeSearchPointNew(pCsr, RTREE_ZERO, 0); + assert( p!=0 ); /* Always returns pCsr->sPoint */ + pCsr->aNode[0] = pLeaf; + p->id = iNode; + p->eWithin = PARTLY_WITHIN; + rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &iCell); + p->iCell = (u8)iCell; + RTREE_QUEUE_TRACE(pCsr, "PUSH-F1:"); + }else{ + pCsr->atEOF = 1; + } + }else{ + /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array + ** with the configured constraints. + */ + rc = nodeAcquire(pRtree, 1, 0, &pRoot); + if( rc==SQLITE_OK && argc>0 ){ + pCsr->aConstraint = sqlite3_malloc(sizeof(RtreeConstraint)*argc); + pCsr->nConstraint = argc; + if( !pCsr->aConstraint ){ + rc = SQLITE_NOMEM; + }else{ + memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc); + memset(pCsr->anQueue, 0, sizeof(u32)*(pRtree->iDepth + 1)); + assert( (idxStr==0 && argc==0) + || (idxStr && (int)strlen(idxStr)==argc*2) ); + for(ii=0; iiaConstraint[ii]; + p->op = idxStr[ii*2]; + p->iCoord = idxStr[ii*2+1]-'0'; + if( p->op>=RTREE_MATCH ){ + /* A MATCH operator. The right-hand-side must be a blob that + ** can be cast into an RtreeMatchArg object. One created using + ** an sqlite3_rtree_geometry_callback() SQL user function. + */ + rc = deserializeGeometry(argv[ii], p); + if( rc!=SQLITE_OK ){ + break; + } + p->pInfo->nCoord = pRtree->nDim2; + p->pInfo->anQueue = pCsr->anQueue; + p->pInfo->mxLevel = pRtree->iDepth + 1; + }else{ +#ifdef SQLITE_RTREE_INT_ONLY + p->u.rValue = sqlite3_value_int64(argv[ii]); +#else + p->u.rValue = sqlite3_value_double(argv[ii]); #endif + } + } + } + } + if( rc==SQLITE_OK ){ + RtreeSearchPoint *pNew; + pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, (u8)(pRtree->iDepth+1)); + if( pNew==0 ) return SQLITE_NOMEM; + pNew->id = 1; + pNew->iCell = 0; + pNew->eWithin = PARTLY_WITHIN; + assert( pCsr->bPoint==1 ); + pCsr->aNode[0] = pRoot; + pRoot = 0; + RTREE_QUEUE_TRACE(pCsr, "PUSH-Fm:"); + rc = rtreeStepToLeaf(pCsr); + } + } + + nodeRelease(pRtree, pRoot); + rtreeRelease(pRtree); + return rc; +} -/************** End of icu.c *************************************************/ -/************** Begin file fts3_icu.c ****************************************/ /* -** 2007 June 22 +** Rtree virtual table module xBestIndex method. There are three +** table scan strategies to choose from (in order from most to +** least desirable): ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** idxNum idxStr Strategy +** ------------------------------------------------ +** 1 Unused Direct lookup by rowid. +** 2 See below R-tree query or full-table scan. +** ------------------------------------------------ ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** If strategy 1 is used, then idxStr is not meaningful. If strategy +** 2 is used, idxStr is formatted to contain 2 bytes for each +** constraint used. The first two bytes of idxStr correspond to +** the constraint in sqlite3_index_info.aConstraintUsage[] with +** (argvIndex==1) etc. ** -************************************************************************* -** This file implements a tokenizer for fts3 based on the ICU library. +** The first of each pair of bytes in idxStr identifies the constraint +** operator as follows: +** +** Operator Byte Value +** ---------------------- +** = 0x41 ('A') +** <= 0x42 ('B') +** < 0x43 ('C') +** >= 0x44 ('D') +** > 0x45 ('E') +** MATCH 0x46 ('F') +** ---------------------- +** +** The second of each pair of bytes identifies the coordinate column +** to which the constraint applies. The leftmost coordinate column +** is 'a', the second from the left 'b' etc. */ -/* #include "fts3Int.h" */ -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) -#ifdef SQLITE_ENABLE_ICU - -/* #include */ -/* #include */ -/* #include "fts3_tokenizer.h" */ - -#include -/* #include */ -/* #include */ -#include - -typedef struct IcuTokenizer IcuTokenizer; -typedef struct IcuCursor IcuCursor; - -struct IcuTokenizer { - sqlite3_tokenizer base; - char *zLocale; -}; +static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ + Rtree *pRtree = (Rtree*)tab; + int rc = SQLITE_OK; + int ii; + int bMatch = 0; /* True if there exists a MATCH constraint */ + i64 nRow; /* Estimated rows returned by this scan */ -struct IcuCursor { - sqlite3_tokenizer_cursor base; + int iIdx = 0; + char zIdxStr[RTREE_MAX_DIMENSIONS*8+1]; + memset(zIdxStr, 0, sizeof(zIdxStr)); - UBreakIterator *pIter; /* ICU break-iterator object */ - int nChar; /* Number of UChar elements in pInput */ - UChar *aChar; /* Copy of input using utf-16 encoding */ - int *aOffset; /* Offsets of each character in utf-8 input */ + /* Check if there exists a MATCH constraint - even an unusable one. If there + ** is, do not consider the lookup-by-rowid plan as using such a plan would + ** require the VDBE to evaluate the MATCH constraint, which is not currently + ** possible. */ + for(ii=0; iinConstraint; ii++){ + if( pIdxInfo->aConstraint[ii].op==SQLITE_INDEX_CONSTRAINT_MATCH ){ + bMatch = 1; + } + } - int nBuffer; - char *zBuffer; + assert( pIdxInfo->idxStr==0 ); + for(ii=0; iinConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){ + struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii]; - int iToken; -}; + if( bMatch==0 && p->usable + && p->iColumn==0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ + ){ + /* We have an equality constraint on the rowid. Use strategy 1. */ + int jj; + for(jj=0; jjaConstraintUsage[jj].argvIndex = 0; + pIdxInfo->aConstraintUsage[jj].omit = 0; + } + pIdxInfo->idxNum = 1; + pIdxInfo->aConstraintUsage[ii].argvIndex = 1; + pIdxInfo->aConstraintUsage[jj].omit = 1; -/* -** Create a new tokenizer instance. -*/ -static int icuCreate( - int argc, /* Number of entries in argv[] */ - const char * const *argv, /* Tokenizer creation arguments */ - sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */ -){ - IcuTokenizer *p; - int n = 0; + /* This strategy involves a two rowid lookups on an B-Tree structures + ** and then a linear search of an R-Tree node. This should be + ** considered almost as quick as a direct rowid lookup (for which + ** sqlite uses an internal cost of 0.0). It is expected to return + ** a single row. + */ + pIdxInfo->estimatedCost = 30.0; + pIdxInfo->estimatedRows = 1; + pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE; + return SQLITE_OK; + } - if( argc>0 ){ - n = strlen(argv[0])+1; - } - p = (IcuTokenizer *)sqlite3_malloc(sizeof(IcuTokenizer)+n); - if( !p ){ - return SQLITE_NOMEM; + if( p->usable + && ((p->iColumn>0 && p->iColumn<=pRtree->nDim2) + || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) + ){ + u8 op; + switch( p->op ){ + case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break; + case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break; + case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break; + case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break; + case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break; + default: + assert( p->op==SQLITE_INDEX_CONSTRAINT_MATCH ); + op = RTREE_MATCH; + break; + } + zIdxStr[iIdx++] = op; + zIdxStr[iIdx++] = (char)(p->iColumn - 1 + '0'); + pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2); + pIdxInfo->aConstraintUsage[ii].omit = 1; + } } - memset(p, 0, sizeof(IcuTokenizer)); - if( n ){ - p->zLocale = (char *)&p[1]; - memcpy(p->zLocale, argv[0], n); + pIdxInfo->idxNum = 2; + pIdxInfo->needToFreeIdxStr = 1; + if( iIdx>0 && 0==(pIdxInfo->idxStr = sqlite3_mprintf("%s", zIdxStr)) ){ + return SQLITE_NOMEM; } - *ppTokenizer = (sqlite3_tokenizer *)p; + nRow = pRtree->nRowEst >> (iIdx/2); + pIdxInfo->estimatedCost = (double)6.0 * (double)nRow; + pIdxInfo->estimatedRows = nRow; - return SQLITE_OK; + return rc; } /* -** Destroy a tokenizer +** Return the N-dimensional volumn of the cell stored in *p. */ -static int icuDestroy(sqlite3_tokenizer *pTokenizer){ - IcuTokenizer *p = (IcuTokenizer *)pTokenizer; - sqlite3_free(p); - return SQLITE_OK; +static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){ + RtreeDValue area = (RtreeDValue)1; + assert( pRtree->nDim>=1 && pRtree->nDim<=5 ); +#ifndef SQLITE_RTREE_INT_ONLY + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + switch( pRtree->nDim ){ + case 5: area = p->aCoord[9].f - p->aCoord[8].f; + case 4: area *= p->aCoord[7].f - p->aCoord[6].f; + case 3: area *= p->aCoord[5].f - p->aCoord[4].f; + case 2: area *= p->aCoord[3].f - p->aCoord[2].f; + default: area *= p->aCoord[1].f - p->aCoord[0].f; + } + }else +#endif + { + switch( pRtree->nDim ){ + case 5: area = p->aCoord[9].i - p->aCoord[8].i; + case 4: area *= p->aCoord[7].i - p->aCoord[6].i; + case 3: area *= p->aCoord[5].i - p->aCoord[4].i; + case 2: area *= p->aCoord[3].i - p->aCoord[2].i; + default: area *= p->aCoord[1].i - p->aCoord[0].i; + } + } + return area; } /* -** Prepare to begin tokenizing a particular string. The input -** string to be tokenized is pInput[0..nBytes-1]. A cursor -** used to incrementally tokenize this string is returned in -** *ppCursor. +** Return the margin length of cell p. The margin length is the sum +** of the objects size in each dimension. */ -static int icuOpen( - sqlite3_tokenizer *pTokenizer, /* The tokenizer */ - const char *zInput, /* Input string */ - int nInput, /* Length of zInput in bytes */ - sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ -){ - IcuTokenizer *p = (IcuTokenizer *)pTokenizer; - IcuCursor *pCsr; - - const int32_t opt = U_FOLD_CASE_DEFAULT; - UErrorCode status = U_ZERO_ERROR; - int nChar; - - UChar32 c; - int iInput = 0; - int iOut = 0; - - *ppCursor = 0; +static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){ + RtreeDValue margin = 0; + int ii = pRtree->nDim2 - 2; + do{ + margin += (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])); + ii -= 2; + }while( ii>=0 ); + return margin; +} - if( zInput==0 ){ - nInput = 0; - zInput = ""; - }else if( nInput<0 ){ - nInput = strlen(zInput); - } - nChar = nInput+1; - pCsr = (IcuCursor *)sqlite3_malloc( - sizeof(IcuCursor) + /* IcuCursor */ - ((nChar+3)&~3) * sizeof(UChar) + /* IcuCursor.aChar[] */ - (nChar+1) * sizeof(int) /* IcuCursor.aOffset[] */ - ); - if( !pCsr ){ - return SQLITE_NOMEM; +/* +** Store the union of cells p1 and p2 in p1. +*/ +static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ + int ii = 0; + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + do{ + p1->aCoord[ii].f = MIN(p1->aCoord[ii].f, p2->aCoord[ii].f); + p1->aCoord[ii+1].f = MAX(p1->aCoord[ii+1].f, p2->aCoord[ii+1].f); + ii += 2; + }while( iinDim2 ); + }else{ + do{ + p1->aCoord[ii].i = MIN(p1->aCoord[ii].i, p2->aCoord[ii].i); + p1->aCoord[ii+1].i = MAX(p1->aCoord[ii+1].i, p2->aCoord[ii+1].i); + ii += 2; + }while( iinDim2 ); } - memset(pCsr, 0, sizeof(IcuCursor)); - pCsr->aChar = (UChar *)&pCsr[1]; - pCsr->aOffset = (int *)&pCsr->aChar[(nChar+3)&~3]; - - pCsr->aOffset[iOut] = iInput; - U8_NEXT(zInput, iInput, nInput, c); - while( c>0 ){ - int isError = 0; - c = u_foldCase(c, opt); - U16_APPEND(pCsr->aChar, iOut, nChar, c, isError); - if( isError ){ - sqlite3_free(pCsr); - return SQLITE_ERROR; - } - pCsr->aOffset[iOut] = iInput; +} - if( iInputeCoordType==RTREE_COORD_INT32); + for(ii=0; iinDim2; ii+=2){ + RtreeCoord *a1 = &p1->aCoord[ii]; + RtreeCoord *a2 = &p2->aCoord[ii]; + if( (!isInt && (a2[0].fa1[1].f)) + || ( isInt && (a2[0].ia1[1].i)) + ){ + return 0; } } - - pCsr->pIter = ubrk_open(UBRK_WORD, p->zLocale, pCsr->aChar, iOut, &status); - if( !U_SUCCESS(status) ){ - sqlite3_free(pCsr); - return SQLITE_ERROR; - } - pCsr->nChar = iOut; - - ubrk_first(pCsr->pIter); - *ppCursor = (sqlite3_tokenizer_cursor *)pCsr; - return SQLITE_OK; + return 1; } /* -** Close a tokenization cursor previously opened by a call to icuOpen(). +** Return the amount cell p would grow by if it were unioned with pCell. */ -static int icuClose(sqlite3_tokenizer_cursor *pCursor){ - IcuCursor *pCsr = (IcuCursor *)pCursor; - ubrk_close(pCsr->pIter); - sqlite3_free(pCsr->zBuffer); - sqlite3_free(pCsr); - return SQLITE_OK; +static RtreeDValue cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){ + RtreeDValue area; + RtreeCell cell; + memcpy(&cell, p, sizeof(RtreeCell)); + area = cellArea(pRtree, &cell); + cellUnion(pRtree, &cell, pCell); + return (cellArea(pRtree, &cell)-area); +} + +static RtreeDValue cellOverlap( + Rtree *pRtree, + RtreeCell *p, + RtreeCell *aCell, + int nCell +){ + int ii; + RtreeDValue overlap = RTREE_ZERO; + for(ii=0; iinDim2; jj+=2){ + RtreeDValue x1, x2; + x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj])); + x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1])); + if( x2iDepth-iHeight); ii++){ + int iCell; + sqlite3_int64 iBest = 0; - while( iStart==iEnd ){ - UChar32 c; + RtreeDValue fMinGrowth = RTREE_ZERO; + RtreeDValue fMinArea = RTREE_ZERO; - iStart = ubrk_current(pCsr->pIter); - iEnd = ubrk_next(pCsr->pIter); - if( iEnd==UBRK_DONE ){ - return SQLITE_DONE; - } + int nCell = NCELL(pNode); + RtreeCell cell; + RtreeNode *pChild; - while( iStartaChar, iWhite, pCsr->nChar, c); - if( u_isspace(c) ){ - iStart = iWhite; - }else{ - break; - } - } - assert(iStart<=iEnd); - } + RtreeCell *aCell = 0; - do { - UErrorCode status = U_ZERO_ERROR; - if( nByte ){ - char *zNew = sqlite3_realloc(pCsr->zBuffer, nByte); - if( !zNew ){ - return SQLITE_NOMEM; + /* Select the child node which will be enlarged the least if pCell + ** is inserted into it. Resolve ties by choosing the entry with + ** the smallest area. + */ + for(iCell=0; iCellzBuffer = zNew; - pCsr->nBuffer = nByte; } - u_strToUTF8( - pCsr->zBuffer, pCsr->nBuffer, &nByte, /* Output vars */ - &pCsr->aChar[iStart], iEnd-iStart, /* Input vars */ - &status /* Output success/failure */ - ); - } while( nByte>pCsr->nBuffer ); - - *ppToken = pCsr->zBuffer; - *pnBytes = nByte; - *piStartOffset = pCsr->aOffset[iStart]; - *piEndOffset = pCsr->aOffset[iEnd]; - *piPosition = pCsr->iToken++; + sqlite3_free(aCell); + rc = nodeAcquire(pRtree, iBest, pNode, &pChild); + nodeRelease(pRtree, pNode); + pNode = pChild; + } - return SQLITE_OK; + *ppLeaf = pNode; + return rc; } /* -** The set of routines that implement the simple tokenizer -*/ -static const sqlite3_tokenizer_module icuTokenizerModule = { - 0, /* iVersion */ - icuCreate, /* xCreate */ - icuDestroy, /* xCreate */ - icuOpen, /* xOpen */ - icuClose, /* xClose */ - icuNext, /* xNext */ - 0, /* xLanguageid */ -}; - -/* -** Set *ppModule to point at the implementation of the ICU tokenizer. +** A cell with the same content as pCell has just been inserted into +** the node pNode. This function updates the bounding box cells in +** all ancestor elements. */ -SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule( - sqlite3_tokenizer_module const**ppModule +static int AdjustTree( + Rtree *pRtree, /* Rtree table */ + RtreeNode *pNode, /* Adjust ancestry of this node. */ + RtreeCell *pCell /* This cell was just inserted */ ){ - *ppModule = &icuTokenizerModule; + RtreeNode *p = pNode; + while( p->pParent ){ + RtreeNode *pParent = p->pParent; + RtreeCell cell; + int iCell; + + if( nodeParentIndex(pRtree, p, &iCell) ){ + return SQLITE_CORRUPT_VTAB; + } + + nodeGetCell(pRtree, pParent, iCell, &cell); + if( !cellContains(pRtree, &cell, pCell) ){ + cellUnion(pRtree, &cell, pCell); + nodeOverwriteCell(pRtree, pParent, &cell, iCell); + } + + p = pParent; + } + return SQLITE_OK; } -#endif /* defined(SQLITE_ENABLE_ICU) */ -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ +/* +** Write mapping (iRowid->iNode) to the _rowid table. +*/ +static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64 iNode){ + sqlite3_bind_int64(pRtree->pWriteRowid, 1, iRowid); + sqlite3_bind_int64(pRtree->pWriteRowid, 2, iNode); + sqlite3_step(pRtree->pWriteRowid); + return sqlite3_reset(pRtree->pWriteRowid); +} -/************** End of fts3_icu.c ********************************************/ -/************** Begin file sqlite3rbu.c **************************************/ /* -** 2014 August 30 +** Write mapping (iNode->iPar) to the _parent table. +*/ +static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64 iPar){ + sqlite3_bind_int64(pRtree->pWriteParent, 1, iNode); + sqlite3_bind_int64(pRtree->pWriteParent, 2, iPar); + sqlite3_step(pRtree->pWriteParent); + return sqlite3_reset(pRtree->pWriteParent); +} + +static int rtreeInsertCell(Rtree *, RtreeNode *, RtreeCell *, int); + + +/* +** Arguments aIdx, aDistance and aSpare all point to arrays of size +** nIdx. The aIdx array contains the set of integers from 0 to +** (nIdx-1) in no particular order. This function sorts the values +** in aIdx according to the indexed values in aDistance. For +** example, assuming the inputs: ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** aIdx = { 0, 1, 2, 3 } +** aDistance = { 5.0, 2.0, 7.0, 6.0 } ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** this function sets the aIdx array to contain: ** -************************************************************************* +** aIdx = { 0, 1, 2, 3 } ** +** The aSpare array is used as temporary working space by the +** sorting algorithm. +*/ +static void SortByDistance( + int *aIdx, + int nIdx, + RtreeDValue *aDistance, + int *aSpare +){ + if( nIdx>1 ){ + int iLeft = 0; + int iRight = 0; + + int nLeft = nIdx/2; + int nRight = nIdx-nLeft; + int *aLeft = aIdx; + int *aRight = &aIdx[nLeft]; + + SortByDistance(aLeft, nLeft, aDistance, aSpare); + SortByDistance(aRight, nRight, aDistance, aSpare); + + memcpy(aSpare, aLeft, sizeof(int)*nLeft); + aLeft = aSpare; + + while( iLeft1 ){ + + int iLeft = 0; + int iRight = 0; + + int nLeft = nIdx/2; + int nRight = nIdx-nLeft; + int *aLeft = aIdx; + int *aRight = &aIdx[nLeft]; + + SortByDimension(pRtree, aLeft, nLeft, iDim, aCell, aSpare); + SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare); + + memcpy(aSpare, aLeft, sizeof(int)*nLeft); + aLeft = aSpare; + while( iLeftnDim+1)*(sizeof(int*)+nCell*sizeof(int)); + + aaSorted = (int **)sqlite3_malloc(nByte); + if( !aaSorted ){ + return SQLITE_NOMEM; + } + + aSpare = &((int *)&aaSorted[pRtree->nDim])[pRtree->nDim*nCell]; + memset(aaSorted, 0, nByte); + for(ii=0; iinDim; ii++){ + int jj; + aaSorted[ii] = &((int *)&aaSorted[pRtree->nDim])[ii*nCell]; + for(jj=0; jjnDim; ii++){ + RtreeDValue margin = RTREE_ZERO; + RtreeDValue fBestOverlap = RTREE_ZERO; + RtreeDValue fBestArea = RTREE_ZERO; + int iBestLeft = 0; + int nLeft; + + for( + nLeft=RTREE_MINCELLS(pRtree); + nLeft<=(nCell-RTREE_MINCELLS(pRtree)); + nLeft++ + ){ + RtreeCell left; + RtreeCell right; + int kk; + RtreeDValue overlap; + RtreeDValue area; + + memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell)); + memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell)); + for(kk=1; kk<(nCell-1); kk++){ + if( kk0 ){ + RtreeNode *pChild = nodeHashLookup(pRtree, iRowid); + if( pChild ){ + nodeRelease(pRtree, pChild->pParent); + nodeReference(pNode); + pChild->pParent = pNode; + } + } + return xSetMapping(pRtree, iRowid, pNode->iNode); +} + +static int SplitNode( + Rtree *pRtree, + RtreeNode *pNode, + RtreeCell *pCell, + int iHeight +){ + int i; + int newCellIsRight = 0; + + int rc = SQLITE_OK; + int nCell = NCELL(pNode); + RtreeCell *aCell; + int *aiUsed; + + RtreeNode *pLeft = 0; + RtreeNode *pRight = 0; + + RtreeCell leftbbox; + RtreeCell rightbbox; + + /* Allocate an array and populate it with a copy of pCell and + ** all cells from node pLeft. Then zero the original node. + */ + aCell = sqlite3_malloc((sizeof(RtreeCell)+sizeof(int))*(nCell+1)); + if( !aCell ){ + rc = SQLITE_NOMEM; + goto splitnode_out; + } + aiUsed = (int *)&aCell[nCell+1]; + memset(aiUsed, 0, sizeof(int)*(nCell+1)); + for(i=0; iiNode==1 ){ + pRight = nodeNew(pRtree, pNode); + pLeft = nodeNew(pRtree, pNode); + pRtree->iDepth++; + pNode->isDirty = 1; + writeInt16(pNode->zData, pRtree->iDepth); + }else{ + pLeft = pNode; + pRight = nodeNew(pRtree, pLeft->pParent); + pLeft->nRef++; + } + + if( !pLeft || !pRight ){ + rc = SQLITE_NOMEM; + goto splitnode_out; + } + + memset(pLeft->zData, 0, pRtree->iNodeSize); + memset(pRight->zData, 0, pRtree->iNodeSize); + + rc = splitNodeStartree(pRtree, aCell, nCell, pLeft, pRight, + &leftbbox, &rightbbox); + if( rc!=SQLITE_OK ){ + goto splitnode_out; + } + + /* Ensure both child nodes have node numbers assigned to them by calling + ** nodeWrite(). Node pRight always needs a node number, as it was created + ** by nodeNew() above. But node pLeft sometimes already has a node number. + ** In this case avoid the all to nodeWrite(). + */ + if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight)) + || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft))) + ){ + goto splitnode_out; + } + + rightbbox.iRowid = pRight->iNode; + leftbbox.iRowid = pLeft->iNode; + + if( pNode->iNode==1 ){ + rc = rtreeInsertCell(pRtree, pLeft->pParent, &leftbbox, iHeight+1); + if( rc!=SQLITE_OK ){ + goto splitnode_out; + } + }else{ + RtreeNode *pParent = pLeft->pParent; + int iCell; + rc = nodeParentIndex(pRtree, pLeft, &iCell); + if( rc==SQLITE_OK ){ + nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell); + rc = AdjustTree(pRtree, pParent, &leftbbox); + } + if( rc!=SQLITE_OK ){ + goto splitnode_out; + } + } + if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){ + goto splitnode_out; + } + + for(i=0; iiRowid ){ + newCellIsRight = 1; + } + if( rc!=SQLITE_OK ){ + goto splitnode_out; + } + } + if( pNode->iNode==1 ){ + for(i=0; iiRowid, pLeft, iHeight); + } + + if( rc==SQLITE_OK ){ + rc = nodeRelease(pRtree, pRight); + pRight = 0; + } + if( rc==SQLITE_OK ){ + rc = nodeRelease(pRtree, pLeft); + pLeft = 0; + } + +splitnode_out: + nodeRelease(pRtree, pRight); + nodeRelease(pRtree, pLeft); + sqlite3_free(aCell); + return rc; +} + +/* +** If node pLeaf is not the root of the r-tree and its pParent pointer is +** still NULL, load all ancestor nodes of pLeaf into memory and populate +** the pLeaf->pParent chain all the way up to the root node. ** -** The RBU extension requires that the RBU update be packaged as an -** SQLite database. The tables it expects to find are described in -** sqlite3rbu.h. Essentially, for each table xyz in the target database -** that the user wishes to write to, a corresponding data_xyz table is -** created in the RBU database and populated with one row for each row to -** update, insert or delete from the target table. -** -** The update proceeds in three stages: -** -** 1) The database is updated. The modified database pages are written -** to a *-oal file. A *-oal file is just like a *-wal file, except -** that it is named "-oal" instead of "-wal". -** Because regular SQLite clients do not look for file named -** "-oal", they go on using the original database in -** rollback mode while the *-oal file is being generated. -** -** During this stage RBU does not update the database by writing -** directly to the target tables. Instead it creates "imposter" -** tables using the SQLITE_TESTCTRL_IMPOSTER interface that it uses -** to update each b-tree individually. All updates required by each -** b-tree are completed before moving on to the next, and all -** updates are done in sorted key order. -** -** 2) The "-oal" file is moved to the equivalent "-wal" -** location using a call to rename(2). Before doing this the RBU -** module takes an EXCLUSIVE lock on the database file, ensuring -** that there are no other active readers. -** -** Once the EXCLUSIVE lock is released, any other database readers -** detect the new *-wal file and read the database in wal mode. At -** this point they see the new version of the database - including -** the updates made as part of the RBU update. -** -** 3) The new *-wal file is checkpointed. This proceeds in the same way -** as a regular database checkpoint, except that a single frame is -** checkpointed each time sqlite3rbu_step() is called. If the RBU -** handle is closed before the entire *-wal file is checkpointed, -** the checkpoint progress is saved in the RBU database and the -** checkpoint can be resumed by another RBU client at some point in -** the future. +** This operation is required when a row is deleted (or updated - an update +** is implemented as a delete followed by an insert). SQLite provides the +** rowid of the row to delete, which can be used to find the leaf on which +** the entry resides (argument pLeaf). Once the leaf is located, this +** function is called to determine its ancestry. +*/ +static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){ + int rc = SQLITE_OK; + RtreeNode *pChild = pLeaf; + while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){ + int rc2 = SQLITE_OK; /* sqlite3_reset() return code */ + sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode); + rc = sqlite3_step(pRtree->pReadParent); + if( rc==SQLITE_ROW ){ + RtreeNode *pTest; /* Used to test for reference loops */ + i64 iNode; /* Node number of parent node */ + + /* Before setting pChild->pParent, test that we are not creating a + ** loop of references (as we would if, say, pChild==pParent). We don't + ** want to do this as it leads to a memory leak when trying to delete + ** the referenced counted node structures. + */ + iNode = sqlite3_column_int64(pRtree->pReadParent, 0); + for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent); + if( !pTest ){ + rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent); + } + } + rc = sqlite3_reset(pRtree->pReadParent); + if( rc==SQLITE_OK ) rc = rc2; + if( rc==SQLITE_OK && !pChild->pParent ) rc = SQLITE_CORRUPT_VTAB; + pChild = pChild->pParent; + } + return rc; +} + +static int deleteCell(Rtree *, RtreeNode *, int, int); + +static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){ + int rc; + int rc2; + RtreeNode *pParent = 0; + int iCell; + + assert( pNode->nRef==1 ); + + /* Remove the entry in the parent cell. */ + rc = nodeParentIndex(pRtree, pNode, &iCell); + if( rc==SQLITE_OK ){ + pParent = pNode->pParent; + pNode->pParent = 0; + rc = deleteCell(pRtree, pParent, iCell, iHeight+1); + } + rc2 = nodeRelease(pRtree, pParent); + if( rc==SQLITE_OK ){ + rc = rc2; + } + if( rc!=SQLITE_OK ){ + return rc; + } + + /* Remove the xxx_node entry. */ + sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode); + sqlite3_step(pRtree->pDeleteNode); + if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteNode)) ){ + return rc; + } + + /* Remove the xxx_parent entry. */ + sqlite3_bind_int64(pRtree->pDeleteParent, 1, pNode->iNode); + sqlite3_step(pRtree->pDeleteParent); + if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteParent)) ){ + return rc; + } + + /* Remove the node from the in-memory hash table and link it into + ** the Rtree.pDeleted list. Its contents will be re-inserted later on. + */ + nodeHashDelete(pRtree, pNode); + pNode->iNode = iHeight; + pNode->pNext = pRtree->pDeleted; + pNode->nRef++; + pRtree->pDeleted = pNode; + + return SQLITE_OK; +} + +static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){ + RtreeNode *pParent = pNode->pParent; + int rc = SQLITE_OK; + if( pParent ){ + int ii; + int nCell = NCELL(pNode); + RtreeCell box; /* Bounding box for pNode */ + nodeGetCell(pRtree, pNode, 0, &box); + for(ii=1; iiiNode; + rc = nodeParentIndex(pRtree, pNode, &ii); + if( rc==SQLITE_OK ){ + nodeOverwriteCell(pRtree, pParent, &box, ii); + rc = fixBoundingBox(pRtree, pParent); + } + } + return rc; +} + +/* +** Delete the cell at index iCell of node pNode. After removing the +** cell, adjust the r-tree data structure if required. +*/ +static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){ + RtreeNode *pParent; + int rc; + + if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){ + return rc; + } + + /* Remove the cell from the node. This call just moves bytes around + ** the in-memory node image, so it cannot fail. + */ + nodeDeleteCell(pRtree, pNode, iCell); + + /* If the node is not the tree root and now has less than the minimum + ** number of cells, remove it from the tree. Otherwise, update the + ** cell in the parent node so that it tightly contains the updated + ** node. + */ + pParent = pNode->pParent; + assert( pParent || pNode->iNode==1 ); + if( pParent ){ + if( NCELL(pNode)nDim; iDim++){ + aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2]); + aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2+1]); + } + } + for(iDim=0; iDimnDim; iDim++){ + aCenterCoord[iDim] = (aCenterCoord[iDim]/(nCell*(RtreeDValue)2)); + } + + for(ii=0; iinDim; iDim++){ + RtreeDValue coord = (DCOORD(aCell[ii].aCoord[iDim*2+1]) - + DCOORD(aCell[ii].aCoord[iDim*2])); + aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]); + } + } + + SortByDistance(aOrder, nCell, aDistance, aSpare); + nodeZero(pRtree, pNode); + + for(ii=0; rc==SQLITE_OK && ii<(nCell-(RTREE_MINCELLS(pRtree)+1)); ii++){ + RtreeCell *p = &aCell[aOrder[ii]]; + nodeInsertCell(pRtree, pNode, p); + if( p->iRowid==pCell->iRowid ){ + if( iHeight==0 ){ + rc = rowidWrite(pRtree, p->iRowid, pNode->iNode); + }else{ + rc = parentWrite(pRtree, p->iRowid, pNode->iNode); + } + } + } + if( rc==SQLITE_OK ){ + rc = fixBoundingBox(pRtree, pNode); + } + for(; rc==SQLITE_OK && iiiNode currently contains + ** the height of the sub-tree headed by the cell. + */ + RtreeNode *pInsert; + RtreeCell *p = &aCell[aOrder[ii]]; + rc = ChooseLeaf(pRtree, p, iHeight, &pInsert); + if( rc==SQLITE_OK ){ + int rc2; + rc = rtreeInsertCell(pRtree, pInsert, p, iHeight); + rc2 = nodeRelease(pRtree, pInsert); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + } + + sqlite3_free(aCell); + return rc; +} + +/* +** Insert cell pCell into node pNode. Node pNode is the head of a +** subtree iHeight high (leaf nodes have iHeight==0). +*/ +static int rtreeInsertCell( + Rtree *pRtree, + RtreeNode *pNode, + RtreeCell *pCell, + int iHeight +){ + int rc = SQLITE_OK; + if( iHeight>0 ){ + RtreeNode *pChild = nodeHashLookup(pRtree, pCell->iRowid); + if( pChild ){ + nodeRelease(pRtree, pChild->pParent); + nodeReference(pNode); + pChild->pParent = pNode; + } + } + if( nodeInsertCell(pRtree, pNode, pCell) ){ + if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){ + rc = SplitNode(pRtree, pNode, pCell, iHeight); + }else{ + pRtree->iReinsertHeight = iHeight; + rc = Reinsert(pRtree, pNode, pCell, iHeight); + } + }else{ + rc = AdjustTree(pRtree, pNode, pCell); + if( rc==SQLITE_OK ){ + if( iHeight==0 ){ + rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode); + }else{ + rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode); + } + } + } + return rc; +} + +static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){ + int ii; + int rc = SQLITE_OK; + int nCell = NCELL(pNode); + + for(ii=0; rc==SQLITE_OK && iiiNode currently contains + ** the height of the sub-tree headed by the cell. + */ + rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert); + if( rc==SQLITE_OK ){ + int rc2; + rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode); + rc2 = nodeRelease(pRtree, pInsert); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + } + return rc; +} + +/* +** Select a currently unused rowid for a new r-tree record. +*/ +static int rtreeNewRowid(Rtree *pRtree, i64 *piRowid){ + int rc; + sqlite3_bind_null(pRtree->pWriteRowid, 1); + sqlite3_bind_null(pRtree->pWriteRowid, 2); + sqlite3_step(pRtree->pWriteRowid); + rc = sqlite3_reset(pRtree->pWriteRowid); + *piRowid = sqlite3_last_insert_rowid(pRtree->db); + return rc; +} + +/* +** Remove the entry with rowid=iDelete from the r-tree structure. +*/ +static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){ + int rc; /* Return code */ + RtreeNode *pLeaf = 0; /* Leaf node containing record iDelete */ + int iCell; /* Index of iDelete cell in pLeaf */ + RtreeNode *pRoot = 0; /* Root node of rtree structure */ + + + /* Obtain a reference to the root node to initialize Rtree.iDepth */ + rc = nodeAcquire(pRtree, 1, 0, &pRoot); + + /* Obtain a reference to the leaf node that contains the entry + ** about to be deleted. + */ + if( rc==SQLITE_OK ){ + rc = findLeafNode(pRtree, iDelete, &pLeaf, 0); + } + + /* Delete the cell in question from the leaf node. */ + if( rc==SQLITE_OK ){ + int rc2; + rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell); + if( rc==SQLITE_OK ){ + rc = deleteCell(pRtree, pLeaf, iCell, 0); + } + rc2 = nodeRelease(pRtree, pLeaf); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + + /* Delete the corresponding entry in the _rowid table. */ + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete); + sqlite3_step(pRtree->pDeleteRowid); + rc = sqlite3_reset(pRtree->pDeleteRowid); + } + + /* Check if the root node now has exactly one child. If so, remove + ** it, schedule the contents of the child for reinsertion and + ** reduce the tree height by one. + ** + ** This is equivalent to copying the contents of the child into + ** the root node (the operation that Gutman's paper says to perform + ** in this scenario). + */ + if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){ + int rc2; + RtreeNode *pChild = 0; + i64 iChild = nodeGetRowid(pRtree, pRoot, 0); + rc = nodeAcquire(pRtree, iChild, pRoot, &pChild); + if( rc==SQLITE_OK ){ + rc = removeNode(pRtree, pChild, pRtree->iDepth-1); + } + rc2 = nodeRelease(pRtree, pChild); + if( rc==SQLITE_OK ) rc = rc2; + if( rc==SQLITE_OK ){ + pRtree->iDepth--; + writeInt16(pRoot->zData, pRtree->iDepth); + pRoot->isDirty = 1; + } + } + + /* Re-insert the contents of any underfull nodes removed from the tree. */ + for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){ + if( rc==SQLITE_OK ){ + rc = reinsertNodeContent(pRtree, pLeaf); + } + pRtree->pDeleted = pLeaf->pNext; + pRtree->nNodeRef--; + sqlite3_free(pLeaf); + } + + /* Release the reference to the root node. */ + if( rc==SQLITE_OK ){ + rc = nodeRelease(pRtree, pRoot); + }else{ + nodeRelease(pRtree, pRoot); + } + + return rc; +} + +/* +** Rounding constants for float->double conversion. +*/ +#define RNDTOWARDS (1.0 - 1.0/8388608.0) /* Round towards zero */ +#define RNDAWAY (1.0 + 1.0/8388608.0) /* Round away from zero */ + +#if !defined(SQLITE_RTREE_INT_ONLY) +/* +** Convert an sqlite3_value into an RtreeValue (presumably a float) +** while taking care to round toward negative or positive, respectively. +*/ +static RtreeValue rtreeValueDown(sqlite3_value *v){ + double d = sqlite3_value_double(v); + float f = (float)d; + if( f>d ){ + f = (float)(d*(d<0 ? RNDAWAY : RNDTOWARDS)); + } + return f; +} +static RtreeValue rtreeValueUp(sqlite3_value *v){ + double d = sqlite3_value_double(v); + float f = (float)d; + if( fbase.zErrMsg) to an appropriate value and returns +** SQLITE_CONSTRAINT. ** -** POTENTIAL PROBLEMS -** -** The rename() call might not be portable. And RBU is not currently -** syncing the directory after renaming the file. +** Parameter iCol is the index of the leftmost column involved in the +** constraint failure. If it is 0, then the constraint that failed is +** the unique constraint on the id column. Otherwise, it is the rtree +** (c1<=c2) constraint on columns iCol and iCol+1 that has failed. ** -** When state is saved, any commit to the *-oal file and the commit to -** the RBU update database are not atomic. So if the power fails at the -** wrong moment they might get out of sync. As the main database will be -** committed before the RBU update database this will likely either just -** pass unnoticed, or result in SQLITE_CONSTRAINT errors (due to UNIQUE -** constraint violations). +** If an OOM occurs, SQLITE_NOMEM is returned instead of SQLITE_CONSTRAINT. +*/ +static int rtreeConstraintError(Rtree *pRtree, int iCol){ + sqlite3_stmt *pStmt = 0; + char *zSql; + int rc; + + assert( iCol==0 || iCol%2 ); + zSql = sqlite3_mprintf("SELECT * FROM %Q.%Q", pRtree->zDb, pRtree->zName); + if( zSql ){ + rc = sqlite3_prepare_v2(pRtree->db, zSql, -1, &pStmt, 0); + }else{ + rc = SQLITE_NOMEM; + } + sqlite3_free(zSql); + + if( rc==SQLITE_OK ){ + if( iCol==0 ){ + const char *zCol = sqlite3_column_name(pStmt, 0); + pRtree->base.zErrMsg = sqlite3_mprintf( + "UNIQUE constraint failed: %s.%s", pRtree->zName, zCol + ); + }else{ + const char *zCol1 = sqlite3_column_name(pStmt, iCol); + const char *zCol2 = sqlite3_column_name(pStmt, iCol+1); + pRtree->base.zErrMsg = sqlite3_mprintf( + "rtree constraint failed: %s.(%s<=%s)", pRtree->zName, zCol1, zCol2 + ); + } + } + + sqlite3_finalize(pStmt); + return (rc==SQLITE_OK ? SQLITE_CONSTRAINT : rc); +} + + + +/* +** The xUpdate method for rtree module virtual tables. +*/ +static int rtreeUpdate( + sqlite3_vtab *pVtab, + int nData, + sqlite3_value **aData, + sqlite_int64 *pRowid +){ + Rtree *pRtree = (Rtree *)pVtab; + int rc = SQLITE_OK; + RtreeCell cell; /* New cell to insert if nData>1 */ + int bHaveRowid = 0; /* Set to 1 after new rowid is determined */ + + if( pRtree->nNodeRef ){ + /* Unable to write to the btree while another cursor is reading from it, + ** since the write might do a rebalance which would disrupt the read + ** cursor. */ + return SQLITE_LOCKED_VTAB; + } + rtreeReference(pRtree); + assert(nData>=1); + + cell.iRowid = 0; /* Used only to suppress a compiler warning */ + + /* Constraint handling. A write operation on an r-tree table may return + ** SQLITE_CONSTRAINT for two reasons: + ** + ** 1. A duplicate rowid value, or + ** 2. The supplied data violates the "x2>=x1" constraint. + ** + ** In the first case, if the conflict-handling mode is REPLACE, then + ** the conflicting row can be removed before proceeding. In the second + ** case, SQLITE_CONSTRAINT must be returned regardless of the + ** conflict-handling mode specified by the user. + */ + if( nData>1 ){ + int ii; + int nn = nData - 4; + + if( nn > pRtree->nDim2 ) nn = pRtree->nDim2; + /* Populate the cell.aCoord[] array. The first coordinate is aData[3]. + ** + ** NB: nData can only be less than nDim*2+3 if the rtree is mis-declared + ** with "column" that are interpreted as table constraints. + ** Example: CREATE VIRTUAL TABLE bad USING rtree(x,y,CHECK(y>5)); + ** This problem was discovered after years of use, so we silently ignore + ** these kinds of misdeclared tables to avoid breaking any legacy. + */ + +#ifndef SQLITE_RTREE_INT_ONLY + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + for(ii=0; iicell.aCoord[ii+1].f ){ + rc = rtreeConstraintError(pRtree, ii+1); + goto constraint; + } + } + }else +#endif + { + for(ii=0; iicell.aCoord[ii+1].i ){ + rc = rtreeConstraintError(pRtree, ii+1); + goto constraint; + } + } + } + + /* If a rowid value was supplied, check if it is already present in + ** the table. If so, the constraint has failed. */ + if( sqlite3_value_type(aData[2])!=SQLITE_NULL ){ + cell.iRowid = sqlite3_value_int64(aData[2]); + if( sqlite3_value_type(aData[0])==SQLITE_NULL + || sqlite3_value_int64(aData[0])!=cell.iRowid + ){ + int steprc; + sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); + steprc = sqlite3_step(pRtree->pReadRowid); + rc = sqlite3_reset(pRtree->pReadRowid); + if( SQLITE_ROW==steprc ){ + if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){ + rc = rtreeDeleteRowid(pRtree, cell.iRowid); + }else{ + rc = rtreeConstraintError(pRtree, 0); + goto constraint; + } + } + } + bHaveRowid = 1; + } + } + + /* If aData[0] is not an SQL NULL value, it is the rowid of a + ** record to delete from the r-tree table. The following block does + ** just that. + */ + if( sqlite3_value_type(aData[0])!=SQLITE_NULL ){ + rc = rtreeDeleteRowid(pRtree, sqlite3_value_int64(aData[0])); + } + + /* If the aData[] array contains more than one element, elements + ** (aData[2]..aData[argc-1]) contain a new record to insert into + ** the r-tree structure. + */ + if( rc==SQLITE_OK && nData>1 ){ + /* Insert the new record into the r-tree */ + RtreeNode *pLeaf = 0; + + /* Figure out the rowid of the new row. */ + if( bHaveRowid==0 ){ + rc = rtreeNewRowid(pRtree, &cell.iRowid); + } + *pRowid = cell.iRowid; + + if( rc==SQLITE_OK ){ + rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf); + } + if( rc==SQLITE_OK ){ + int rc2; + pRtree->iReinsertHeight = -1; + rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); + rc2 = nodeRelease(pRtree, pLeaf); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + if( pRtree->nAux ){ + sqlite3_stmt *pUp = pRtree->pWriteAux; + int jj; + sqlite3_bind_int64(pUp, 1, *pRowid); + for(jj=0; jjnAux; jj++){ + sqlite3_bind_value(pUp, jj+2, aData[pRtree->nDim2+3+jj]); + } + sqlite3_step(pUp); + rc = sqlite3_reset(pUp); + } + } + +constraint: + rtreeRelease(pRtree); + return rc; +} + +/* +** Called when a transaction starts. +*/ +static int rtreeBeginTransaction(sqlite3_vtab *pVtab){ + Rtree *pRtree = (Rtree *)pVtab; + assert( pRtree->inWrTrans==0 ); + pRtree->inWrTrans++; + return SQLITE_OK; +} + +/* +** Called when a transaction completes (either by COMMIT or ROLLBACK). +** The sqlite3_blob object should be released at this point. +*/ +static int rtreeEndTransaction(sqlite3_vtab *pVtab){ + Rtree *pRtree = (Rtree *)pVtab; + pRtree->inWrTrans = 0; + nodeBlobReset(pRtree); + return SQLITE_OK; +} + +/* +** The xRename method for rtree module virtual tables. +*/ +static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){ + Rtree *pRtree = (Rtree *)pVtab; + int rc = SQLITE_NOMEM; + char *zSql = sqlite3_mprintf( + "ALTER TABLE %Q.'%q_node' RENAME TO \"%w_node\";" + "ALTER TABLE %Q.'%q_parent' RENAME TO \"%w_parent\";" + "ALTER TABLE %Q.'%q_rowid' RENAME TO \"%w_rowid\";" + , pRtree->zDb, pRtree->zName, zNewName + , pRtree->zDb, pRtree->zName, zNewName + , pRtree->zDb, pRtree->zName, zNewName + ); + if( zSql ){ + nodeBlobReset(pRtree); + rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0); + sqlite3_free(zSql); + } + return rc; +} + +/* +** The xSavepoint method. ** -** If some client does modify the target database mid RBU update, or some -** other error occurs, the RBU extension will keep throwing errors. It's -** not really clear how to get out of this state. The system could just -** by delete the RBU update database and *-oal file and have the device -** download the update again and start over. +** This module does not need to do anything to support savepoints. However, +** it uses this hook to close any open blob handle. This is done because a +** DROP TABLE command - which fortunately always opens a savepoint - cannot +** succeed if there are any open blob handles. i.e. if the blob handle were +** not closed here, the following would fail: ** -** At present, for an UPDATE, both the new.* and old.* records are -** collected in the rbu_xyz table. And for both UPDATEs and DELETEs all -** fields are collected. This means we're probably writing a lot more -** data to disk when saving the state of an ongoing update to the RBU -** update database than is strictly necessary. -** +** BEGIN; +** INSERT INTO rtree... +** DROP TABLE ; -- Would fail with SQLITE_LOCKED +** COMMIT; */ +static int rtreeSavepoint(sqlite3_vtab *pVtab, int iSavepoint){ + Rtree *pRtree = (Rtree *)pVtab; + u8 iwt = pRtree->inWrTrans; + UNUSED_PARAMETER(iSavepoint); + pRtree->inWrTrans = 0; + nodeBlobReset(pRtree); + pRtree->inWrTrans = iwt; + return SQLITE_OK; +} -/* #include */ -/* #include */ -/* #include */ +/* +** This function populates the pRtree->nRowEst variable with an estimate +** of the number of rows in the virtual table. If possible, this is based +** on sqlite_stat1 data. Otherwise, use RTREE_DEFAULT_ROWEST. +*/ +static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){ + const char *zFmt = "SELECT stat FROM %Q.sqlite_stat1 WHERE tbl = '%q_rowid'"; + char *zSql; + sqlite3_stmt *p; + int rc; + i64 nRow = 0; + + rc = sqlite3_table_column_metadata( + db, pRtree->zDb, "sqlite_stat1",0,0,0,0,0,0 + ); + if( rc!=SQLITE_OK ){ + pRtree->nRowEst = RTREE_DEFAULT_ROWEST; + return rc==SQLITE_ERROR ? SQLITE_OK : rc; + } + zSql = sqlite3_mprintf(zFmt, pRtree->zDb, pRtree->zName); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(db, zSql, -1, &p, 0); + if( rc==SQLITE_OK ){ + if( sqlite3_step(p)==SQLITE_ROW ) nRow = sqlite3_column_int64(p, 0); + rc = sqlite3_finalize(p); + }else if( rc!=SQLITE_NOMEM ){ + rc = SQLITE_OK; + } + + if( rc==SQLITE_OK ){ + if( nRow==0 ){ + pRtree->nRowEst = RTREE_DEFAULT_ROWEST; + }else{ + pRtree->nRowEst = MAX(nRow, RTREE_MIN_ROWEST); + } + } + sqlite3_free(zSql); + } + + return rc; +} + +static sqlite3_module rtreeModule = { + 2, /* iVersion */ + rtreeCreate, /* xCreate - create a table */ + rtreeConnect, /* xConnect - connect to an existing table */ + rtreeBestIndex, /* xBestIndex - Determine search strategy */ + rtreeDisconnect, /* xDisconnect - Disconnect from a table */ + rtreeDestroy, /* xDestroy - Drop a table */ + rtreeOpen, /* xOpen - open a cursor */ + rtreeClose, /* xClose - close a cursor */ + rtreeFilter, /* xFilter - configure scan constraints */ + rtreeNext, /* xNext - advance a cursor */ + rtreeEof, /* xEof */ + rtreeColumn, /* xColumn - read data */ + rtreeRowid, /* xRowid - read data */ + rtreeUpdate, /* xUpdate - write data */ + rtreeBeginTransaction, /* xBegin - begin transaction */ + rtreeEndTransaction, /* xSync - sync transaction */ + rtreeEndTransaction, /* xCommit - commit transaction */ + rtreeEndTransaction, /* xRollback - rollback transaction */ + 0, /* xFindFunction - function overloading */ + rtreeRename, /* xRename - rename the table */ + rtreeSavepoint, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ +}; + +static int rtreeSqlInit( + Rtree *pRtree, + sqlite3 *db, + const char *zDb, + const char *zPrefix, + int isCreate +){ + int rc = SQLITE_OK; + + #define N_STATEMENT 8 + static const char *azSql[N_STATEMENT] = { + /* Write the xxx_node table */ + "INSERT OR REPLACE INTO '%q'.'%q_node' VALUES(?1, ?2)", + "DELETE FROM '%q'.'%q_node' WHERE nodeno = ?1", + + /* Read and write the xxx_rowid table */ + "SELECT nodeno FROM '%q'.'%q_rowid' WHERE rowid = ?1", + "INSERT OR REPLACE INTO '%q'.'%q_rowid' VALUES(?1, ?2)", + "DELETE FROM '%q'.'%q_rowid' WHERE rowid = ?1", + + /* Read and write the xxx_parent table */ + "SELECT parentnode FROM '%q'.'%q_parent' WHERE nodeno = ?1", + "INSERT OR REPLACE INTO '%q'.'%q_parent' VALUES(?1, ?2)", + "DELETE FROM '%q'.'%q_parent' WHERE nodeno = ?1" + }; + sqlite3_stmt **appStmt[N_STATEMENT]; + int i; + + pRtree->db = db; + + if( isCreate ){ + char *zCreate; + sqlite3_str *p = sqlite3_str_new(db); + int ii; + sqlite3_str_appendf(p, + "CREATE TABLE \"%w\".\"%w_rowid\"(rowid INTEGER PRIMARY KEY,nodeno", + zDb, zPrefix); + for(ii=0; iinAux; ii++){ + sqlite3_str_appendf(p,",a%d",ii); + } + sqlite3_str_appendf(p, + ");CREATE TABLE \"%w\".\"%w_node\"(nodeno INTEGER PRIMARY KEY,data);", + zDb, zPrefix); + sqlite3_str_appendf(p, + "CREATE TABLE \"%w\".\"%w_parent\"(nodeno INTEGER PRIMARY KEY,parentnode);", + zDb, zPrefix); + sqlite3_str_appendf(p, + "INSERT INTO \"%w\".\"%w_node\"VALUES(1,zeroblob(%d))", + zDb, zPrefix, pRtree->iNodeSize); + zCreate = sqlite3_str_finish(p); + if( !zCreate ){ + return SQLITE_NOMEM; + } + rc = sqlite3_exec(db, zCreate, 0, 0, 0); + sqlite3_free(zCreate); + if( rc!=SQLITE_OK ){ + return rc; + } + } + + appStmt[0] = &pRtree->pWriteNode; + appStmt[1] = &pRtree->pDeleteNode; + appStmt[2] = &pRtree->pReadRowid; + appStmt[3] = &pRtree->pWriteRowid; + appStmt[4] = &pRtree->pDeleteRowid; + appStmt[5] = &pRtree->pReadParent; + appStmt[6] = &pRtree->pWriteParent; + appStmt[7] = &pRtree->pDeleteParent; + + rc = rtreeQueryStat1(db, pRtree); + for(i=0; inAux==0 ){ + zFormat = azSql[i]; + }else { + /* An UPSERT is very slightly slower than REPLACE, but it is needed + ** if there are auxiliary columns */ + zFormat = "INSERT INTO\"%w\".\"%w_rowid\"(rowid,nodeno)VALUES(?1,?2)" + "ON CONFLICT(rowid)DO UPDATE SET nodeno=excluded.nodeno"; + } + zSql = sqlite3_mprintf(zFormat, zDb, zPrefix); + if( zSql ){ + rc = sqlite3_prepare_v3(db, zSql, -1, SQLITE_PREPARE_PERSISTENT, + appStmt[i], 0); + }else{ + rc = SQLITE_NOMEM; + } + sqlite3_free(zSql); + } + if( pRtree->nAux ){ + pRtree->zReadAuxSql = sqlite3_mprintf( + "SELECT * FROM \"%w\".\"%w_rowid\" WHERE rowid=?1", + zDb, zPrefix); + if( pRtree->zReadAuxSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + sqlite3_str *p = sqlite3_str_new(db); + int ii; + char *zSql; + sqlite3_str_appendf(p, "UPDATE \"%w\".\"%w_rowid\"SET ", zDb, zPrefix); + for(ii=0; iinAux; ii++){ + if( ii ) sqlite3_str_append(p, ",", 1); + if( iinAuxNotNull ){ + sqlite3_str_appendf(p,"a%d=coalesce(?%d,a%d)",ii,ii+2,ii); + }else{ + sqlite3_str_appendf(p,"a%d=?%d",ii,ii+2); + } + } + sqlite3_str_appendf(p, " WHERE rowid=?1"); + zSql = sqlite3_str_finish(p); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v3(db, zSql, -1, SQLITE_PREPARE_PERSISTENT, + &pRtree->pWriteAux, 0); + sqlite3_free(zSql); + } + } + } -/* #include "sqlite3.h" */ + return rc; +} -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RBU) -/************** Include sqlite3rbu.h in the middle of sqlite3rbu.c ***********/ -/************** Begin file sqlite3rbu.h **************************************/ /* -** 2014 August 30 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** -** This file contains the public interface for the RBU extension. +** The second argument to this function contains the text of an SQL statement +** that returns a single integer value. The statement is compiled and executed +** using database connection db. If successful, the integer value returned +** is written to *piVal and SQLITE_OK returned. Otherwise, an SQLite error +** code is returned and the value of *piVal after returning is not defined. */ +static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){ + int rc = SQLITE_NOMEM; + if( zSql ){ + sqlite3_stmt *pStmt = 0; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + *piVal = sqlite3_column_int(pStmt, 0); + } + rc = sqlite3_finalize(pStmt); + } + } + return rc; +} /* -** SUMMARY -** -** Writing a transaction containing a large number of operations on -** b-tree indexes that are collectively larger than the available cache -** memory can be very inefficient. -** -** The problem is that in order to update a b-tree, the leaf page (at least) -** containing the entry being inserted or deleted must be modified. If the -** working set of leaves is larger than the available cache memory, then a -** single leaf that is modified more than once as part of the transaction -** may be loaded from or written to the persistent media multiple times. -** Additionally, because the index updates are likely to be applied in -** random order, access to pages within the database is also likely to be in -** random order, which is itself quite inefficient. -** -** One way to improve the situation is to sort the operations on each index -** by index key before applying them to the b-tree. This leads to an IO -** pattern that resembles a single linear scan through the index b-tree, -** and all but guarantees each modified leaf page is loaded and stored -** exactly once. SQLite uses this trick to improve the performance of -** CREATE INDEX commands. This extension allows it to be used to improve -** the performance of large transactions on existing databases. -** -** Additionally, this extension allows the work involved in writing the -** large transaction to be broken down into sub-transactions performed -** sequentially by separate processes. This is useful if the system cannot -** guarantee that a single update process will run for long enough to apply -** the entire update, for example because the update is being applied on a -** mobile device that is frequently rebooted. Even after the writer process -** has committed one or more sub-transactions, other database clients continue -** to read from the original database snapshot. In other words, partially -** applied transactions are not visible to other clients. -** -** "RBU" stands for "Resumable Bulk Update". As in a large database update -** transmitted via a wireless network to a mobile device. A transaction -** applied using this extension is hence refered to as an "RBU update". -** -** -** LIMITATIONS -** -** An "RBU update" transaction is subject to the following limitations: -** -** * The transaction must consist of INSERT, UPDATE and DELETE operations -** only. -** -** * INSERT statements may not use any default values. -** -** * UPDATE and DELETE statements must identify their target rows by -** non-NULL PRIMARY KEY values. Rows with NULL values stored in PRIMARY -** KEY fields may not be updated or deleted. If the table being written -** has no PRIMARY KEY, affected rows must be identified by rowid. -** -** * UPDATE statements may not modify PRIMARY KEY columns. -** -** * No triggers will be fired. -** -** * No foreign key violations are detected or reported. -** -** * CHECK constraints are not enforced. -** -** * No constraint handling mode except for "OR ROLLBACK" is supported. -** -** -** PREPARATION -** -** An "RBU update" is stored as a separate SQLite database. A database -** containing an RBU update is an "RBU database". For each table in the -** target database to be updated, the RBU database should contain a table -** named "data_" containing the same set of columns as the -** target table, and one more - "rbu_control". The data_% table should -** have no PRIMARY KEY or UNIQUE constraints, but each column should have -** the same type as the corresponding column in the target database. -** The "rbu_control" column should have no type at all. For example, if -** the target database contains: -** -** CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c UNIQUE); -** -** Then the RBU database should contain: -** -** CREATE TABLE data_t1(a INTEGER, b TEXT, c, rbu_control); -** -** The order of the columns in the data_% table does not matter. -** -** Instead of a regular table, the RBU database may also contain virtual -** tables or view named using the data_ naming scheme. -** -** Instead of the plain data_ naming scheme, RBU database tables -** may also be named data_, where is any sequence -** of zero or more numeric characters (0-9). This can be significant because -** tables within the RBU database are always processed in order sorted by -** name. By judicious selection of the portion of the names -** of the RBU tables the user can therefore control the order in which they -** are processed. This can be useful, for example, to ensure that "external -** content" FTS4 tables are updated before their underlying content tables. -** -** If the target database table is a virtual table or a table that has no -** PRIMARY KEY declaration, the data_% table must also contain a column -** named "rbu_rowid". This column is mapped to the tables implicit primary -** key column - "rowid". Virtual tables for which the "rowid" column does -** not function like a primary key value cannot be updated using RBU. For -** example, if the target db contains either of the following: -** -** CREATE VIRTUAL TABLE x1 USING fts3(a, b); -** CREATE TABLE x1(a, b) -** -** then the RBU database should contain: -** -** CREATE TABLE data_x1(a, b, rbu_rowid, rbu_control); -** -** All non-hidden columns (i.e. all columns matched by "SELECT *") of the -** target table must be present in the input table. For virtual tables, -** hidden columns are optional - they are updated by RBU if present in -** the input table, or not otherwise. For example, to write to an fts4 -** table with a hidden languageid column such as: -** -** CREATE VIRTUAL TABLE ft1 USING fts4(a, b, languageid='langid'); -** -** Either of the following input table schemas may be used: -** -** CREATE TABLE data_ft1(a, b, langid, rbu_rowid, rbu_control); -** CREATE TABLE data_ft1(a, b, rbu_rowid, rbu_control); -** -** For each row to INSERT into the target database as part of the RBU -** update, the corresponding data_% table should contain a single record -** with the "rbu_control" column set to contain integer value 0. The -** other columns should be set to the values that make up the new record -** to insert. -** -** If the target database table has an INTEGER PRIMARY KEY, it is not -** possible to insert a NULL value into the IPK column. Attempting to -** do so results in an SQLITE_MISMATCH error. -** -** For each row to DELETE from the target database as part of the RBU -** update, the corresponding data_% table should contain a single record -** with the "rbu_control" column set to contain integer value 1. The -** real primary key values of the row to delete should be stored in the -** corresponding columns of the data_% table. The values stored in the -** other columns are not used. -** -** For each row to UPDATE from the target database as part of the RBU -** update, the corresponding data_% table should contain a single record -** with the "rbu_control" column set to contain a value of type text. -** The real primary key values identifying the row to update should be -** stored in the corresponding columns of the data_% table row, as should -** the new values of all columns being update. The text value in the -** "rbu_control" column must contain the same number of characters as -** there are columns in the target database table, and must consist entirely -** of 'x' and '.' characters (or in some special cases 'd' - see below). For -** each column that is being updated, the corresponding character is set to -** 'x'. For those that remain as they are, the corresponding character of the -** rbu_control value should be set to '.'. For example, given the tables -** above, the update statement: -** -** UPDATE t1 SET c = 'usa' WHERE a = 4; -** -** is represented by the data_t1 row created by: -** -** INSERT INTO data_t1(a, b, c, rbu_control) VALUES(4, NULL, 'usa', '..x'); -** -** Instead of an 'x' character, characters of the rbu_control value specified -** for UPDATEs may also be set to 'd'. In this case, instead of updating the -** target table with the value stored in the corresponding data_% column, the -** user-defined SQL function "rbu_delta()" is invoked and the result stored in -** the target table column. rbu_delta() is invoked with two arguments - the -** original value currently stored in the target table column and the -** value specified in the data_xxx table. -** -** For example, this row: -** -** INSERT INTO data_t1(a, b, c, rbu_control) VALUES(4, NULL, 'usa', '..d'); -** -** is similar to an UPDATE statement such as: -** -** UPDATE t1 SET c = rbu_delta(c, 'usa') WHERE a = 4; -** -** Finally, if an 'f' character appears in place of a 'd' or 's' in an -** ota_control string, the contents of the data_xxx table column is assumed -** to be a "fossil delta" - a patch to be applied to a blob value in the -** format used by the fossil source-code management system. In this case -** the existing value within the target database table must be of type BLOB. -** It is replaced by the result of applying the specified fossil delta to -** itself. -** -** If the target database table is a virtual table or a table with no PRIMARY -** KEY, the rbu_control value should not include a character corresponding -** to the rbu_rowid value. For example, this: -** -** INSERT INTO data_ft1(a, b, rbu_rowid, rbu_control) -** VALUES(NULL, 'usa', 12, '.x'); -** -** causes a result similar to: -** -** UPDATE ft1 SET b = 'usa' WHERE rowid = 12; -** -** The data_xxx tables themselves should have no PRIMARY KEY declarations. -** However, RBU is more efficient if reading the rows in from each data_xxx -** table in "rowid" order is roughly the same as reading them sorted by -** the PRIMARY KEY of the corresponding target database table. In other -** words, rows should be sorted using the destination table PRIMARY KEY -** fields before they are inserted into the data_xxx tables. -** -** USAGE -** -** The API declared below allows an application to apply an RBU update -** stored on disk to an existing target database. Essentially, the -** application: -** -** 1) Opens an RBU handle using the sqlite3rbu_open() function. -** -** 2) Registers any required virtual table modules with the database -** handle returned by sqlite3rbu_db(). Also, if required, register -** the rbu_delta() implementation. -** -** 3) Calls the sqlite3rbu_step() function one or more times on -** the new handle. Each call to sqlite3rbu_step() performs a single -** b-tree operation, so thousands of calls may be required to apply -** a complete update. -** -** 4) Calls sqlite3rbu_close() to close the RBU update handle. If -** sqlite3rbu_step() has been called enough times to completely -** apply the update to the target database, then the RBU database -** is marked as fully applied. Otherwise, the state of the RBU -** update application is saved in the RBU database for later -** resumption. -** -** See comments below for more detail on APIs. -** -** If an update is only partially applied to the target database by the -** time sqlite3rbu_close() is called, various state information is saved -** within the RBU database. This allows subsequent processes to automatically -** resume the RBU update from where it left off. -** -** To remove all RBU extension state information, returning an RBU database -** to its original contents, it is sufficient to drop all tables that begin -** with the prefix "rbu_" -** -** DATABASE LOCKING +** This function is called from within the xConnect() or xCreate() method to +** determine the node-size used by the rtree table being created or connected +** to. If successful, pRtree->iNodeSize is populated and SQLITE_OK returned. +** Otherwise, an SQLite error code is returned. ** -** An RBU update may not be applied to a database in WAL mode. Attempting -** to do so is an error (SQLITE_ERROR). +** If this function is being called as part of an xConnect(), then the rtree +** table already exists. In this case the node-size is determined by inspecting +** the root node of the tree. ** -** While an RBU handle is open, a SHARED lock may be held on the target -** database file. This means it is possible for other clients to read the -** database, but not to write it. +** Otherwise, for an xCreate(), use 64 bytes less than the database page-size. +** This ensures that each node is stored on a single database page. If the +** database page-size is so large that more than RTREE_MAXCELLS entries +** would fit in a single node, use a smaller node-size. +*/ +static int getNodeSize( + sqlite3 *db, /* Database handle */ + Rtree *pRtree, /* Rtree handle */ + int isCreate, /* True for xCreate, false for xConnect */ + char **pzErr /* OUT: Error message, if any */ +){ + int rc; + char *zSql; + if( isCreate ){ + int iPageSize = 0; + zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb); + rc = getIntFromStmt(db, zSql, &iPageSize); + if( rc==SQLITE_OK ){ + pRtree->iNodeSize = iPageSize-64; + if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)iNodeSize ){ + pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS; + } + }else{ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + } + }else{ + zSql = sqlite3_mprintf( + "SELECT length(data) FROM '%q'.'%q_node' WHERE nodeno = 1", + pRtree->zDb, pRtree->zName + ); + rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize); + if( rc!=SQLITE_OK ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + }else if( pRtree->iNodeSize<(512-64) ){ + rc = SQLITE_CORRUPT_VTAB; + *pzErr = sqlite3_mprintf("undersize RTree blobs in \"%q_node\"", + pRtree->zName); + } + } + + sqlite3_free(zSql); + return rc; +} + +/* +** This function is the implementation of both the xConnect and xCreate +** methods of the r-tree virtual table. ** -** If an RBU update is started and then suspended before it is completed, -** then an external client writes to the database, then attempting to resume -** the suspended RBU update is also an error (SQLITE_BUSY). +** argv[0] -> module name +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> column names... */ +static int rtreeInit( + sqlite3 *db, /* Database connection */ + void *pAux, /* One of the RTREE_COORD_* constants */ + int argc, const char *const*argv, /* Parameters to CREATE TABLE statement */ + sqlite3_vtab **ppVtab, /* OUT: New virtual table */ + char **pzErr, /* OUT: Error message, if any */ + int isCreate /* True for xCreate, false for xConnect */ +){ + int rc = SQLITE_OK; + Rtree *pRtree; + int nDb; /* Length of string argv[1] */ + int nName; /* Length of string argv[2] */ + int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32); + sqlite3_str *pSql; + char *zSql; + int ii = 4; + int iErr; -#ifndef _SQLITE3RBU_H -#define _SQLITE3RBU_H + const char *aErrMsg[] = { + 0, /* 0 */ + "Wrong number of columns for an rtree table", /* 1 */ + "Too few columns for an rtree table", /* 2 */ + "Too many columns for an rtree table", /* 3 */ + "Auxiliary rtree columns must be last" /* 4 */ + }; -/* #include "sqlite3.h" ** Required for error code definitions ** */ + assert( RTREE_MAX_AUX_COLUMN<256 ); /* Aux columns counted by a u8 */ + if( argc>RTREE_MAX_AUX_COLUMN+3 ){ + *pzErr = sqlite3_mprintf("%s", aErrMsg[3]); + return SQLITE_ERROR; + } -#if 0 -extern "C" { -#endif + sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + + /* Allocate the sqlite3_vtab structure */ + nDb = (int)strlen(argv[1]); + nName = (int)strlen(argv[2]); + pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2); + if( !pRtree ){ + return SQLITE_NOMEM; + } + memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2); + pRtree->nBusy = 1; + pRtree->base.pModule = &rtreeModule; + pRtree->zDb = (char *)&pRtree[1]; + pRtree->zName = &pRtree->zDb[nDb+1]; + pRtree->eCoordType = (u8)eCoordType; + memcpy(pRtree->zDb, argv[1], nDb); + memcpy(pRtree->zName, argv[2], nName); + + + /* Create/Connect to the underlying relational database schema. If + ** that is successful, call sqlite3_declare_vtab() to configure + ** the r-tree table schema. + */ + pSql = sqlite3_str_new(db); + sqlite3_str_appendf(pSql, "CREATE TABLE x(%s", argv[3]); + for(ii=4; iinAux++; + sqlite3_str_appendf(pSql, ",%s", argv[ii]+1); + }else if( pRtree->nAux>0 ){ + break; + }else{ + pRtree->nDim2++; + sqlite3_str_appendf(pSql, ",%s", argv[ii]); + } + } + sqlite3_str_appendf(pSql, ");"); + zSql = sqlite3_str_finish(pSql); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else if( iinDim = pRtree->nDim2/2; + if( pRtree->nDim<1 ){ + iErr = 2; + }else if( pRtree->nDim2>RTREE_MAX_DIMENSIONS*2 ){ + iErr = 3; + }else if( pRtree->nDim2 % 2 ){ + iErr = 1; + }else{ + iErr = 0; + } + if( iErr ){ + *pzErr = sqlite3_mprintf("%s", aErrMsg[iErr]); + goto rtreeInit_fail; + } + pRtree->nBytesPerCell = 8 + pRtree->nDim2*4; + + /* Figure out the node size to use. */ + rc = getNodeSize(db, pRtree, isCreate, pzErr); + if( rc ) goto rtreeInit_fail; + rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate); + if( rc ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + goto rtreeInit_fail; + } + + *ppVtab = (sqlite3_vtab *)pRtree; + return SQLITE_OK; + +rtreeInit_fail: + if( rc==SQLITE_OK ) rc = SQLITE_ERROR; + assert( *ppVtab==0 ); + assert( pRtree->nBusy==1 ); + rtreeRelease(pRtree); + return rc; +} -typedef struct sqlite3rbu sqlite3rbu; /* -** Open an RBU handle. -** -** Argument zTarget is the path to the target database. Argument zRbu is -** the path to the RBU database. Each call to this function must be matched -** by a call to sqlite3rbu_close(). When opening the databases, RBU passes -** the SQLITE_CONFIG_URI flag to sqlite3_open_v2(). So if either zTarget -** or zRbu begin with "file:", it will be interpreted as an SQLite -** database URI, not a regular file name. +** Implementation of a scalar function that decodes r-tree nodes to +** human readable strings. This can be used for debugging and analysis. ** -** If the zState argument is passed a NULL value, the RBU extension stores -** the current state of the update (how many rows have been updated, which -** indexes are yet to be updated etc.) within the RBU database itself. This -** can be convenient, as it means that the RBU application does not need to -** organize removing a separate state file after the update is concluded. -** Or, if zState is non-NULL, it must be a path to a database file in which -** the RBU extension can store the state of the update. +** The scalar function takes two arguments: (1) the number of dimensions +** to the rtree (between 1 and 5, inclusive) and (2) a blob of data containing +** an r-tree node. For a two-dimensional r-tree structure called "rt", to +** deserialize all nodes, a statement like: ** -** When resuming an RBU update, the zState argument must be passed the same -** value as when the RBU update was started. +** SELECT rtreenode(2, data) FROM rt_node; ** -** Once the RBU update is finished, the RBU extension does not -** automatically remove any zState database file, even if it created it. +** The human readable string takes the form of a Tcl list with one +** entry for each cell in the r-tree node. Each entry is itself a +** list, containing the 8-byte rowid/pageno followed by the +** *2 coordinates. +*/ +static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){ + char *zText = 0; + RtreeNode node; + Rtree tree; + int ii; + + UNUSED_PARAMETER(nArg); + memset(&node, 0, sizeof(RtreeNode)); + memset(&tree, 0, sizeof(Rtree)); + tree.nDim = (u8)sqlite3_value_int(apArg[0]); + tree.nDim2 = tree.nDim*2; + tree.nBytesPerCell = 8 + 8 * tree.nDim; + node.zData = (u8 *)sqlite3_value_blob(apArg[1]); + + for(ii=0; ii-vacuum", where -** is the name of the target database file. In this case, on UNIX, if the -** state database is not already present in the file-system, it is created -** with the same permissions as the target db is made. -** -** This function does not delete the state database after an RBU vacuum -** is completed, even if it created it. However, if the call to -** sqlite3rbu_close() returns any value other than SQLITE_OK, the contents -** of the state tables within the state database are zeroed. This way, -** the next call to sqlite3rbu_vacuum() opens a handle that starts a -** new RBU vacuum operation. -** -** As with sqlite3rbu_open(), Zipvfs users should rever to the comment -** describing the sqlite3rbu_create_vfs() API function below for -** a description of the complications associated with using RBU with -** zipvfs databases. +** Context object passed between the various routines that make up the +** implementation of integrity-check function rtreecheck(). */ -SQLITE_API sqlite3rbu *sqlite3rbu_vacuum( - const char *zTarget, - const char *zState -); +typedef struct RtreeCheck RtreeCheck; +struct RtreeCheck { + sqlite3 *db; /* Database handle */ + const char *zDb; /* Database containing rtree table */ + const char *zTab; /* Name of rtree table */ + int bInt; /* True for rtree_i32 table */ + int nDim; /* Number of dimensions for this rtree tbl */ + sqlite3_stmt *pGetNode; /* Statement used to retrieve nodes */ + sqlite3_stmt *aCheckMapping[2]; /* Statements to query %_parent/%_rowid */ + int nLeaf; /* Number of leaf cells in table */ + int nNonLeaf; /* Number of non-leaf cells in table */ + int rc; /* Return code */ + char *zReport; /* Message to report */ + int nErr; /* Number of lines in zReport */ +}; + +#define RTREE_CHECK_MAX_ERROR 100 /* -** Configure a limit for the amount of temp space that may be used by -** the RBU handle passed as the first argument. The new limit is specified -** in bytes by the second parameter. If it is positive, the limit is updated. -** If the second parameter to this function is passed zero, then the limit -** is removed entirely. If the second parameter is negative, the limit is -** not modified (this is useful for querying the current limit). -** -** In all cases the returned value is the current limit in bytes (zero -** indicates unlimited). +** Reset SQL statement pStmt. If the sqlite3_reset() call returns an error, +** and RtreeCheck.rc==SQLITE_OK, set RtreeCheck.rc to the error code. +*/ +static void rtreeCheckReset(RtreeCheck *pCheck, sqlite3_stmt *pStmt){ + int rc = sqlite3_reset(pStmt); + if( pCheck->rc==SQLITE_OK ) pCheck->rc = rc; +} + +/* +** The second and subsequent arguments to this function are a format string +** and printf style arguments. This function formats the string and attempts +** to compile it as an SQL statement. ** -** If the temp space limit is exceeded during operation, an SQLITE_FULL -** error is returned. +** If successful, a pointer to the new SQL statement is returned. Otherwise, +** NULL is returned and an error code left in RtreeCheck.rc. */ -SQLITE_API sqlite3_int64 sqlite3rbu_temp_size_limit(sqlite3rbu*, sqlite3_int64); +static sqlite3_stmt *rtreeCheckPrepare( + RtreeCheck *pCheck, /* RtreeCheck object */ + const char *zFmt, ... /* Format string and trailing args */ +){ + va_list ap; + char *z; + sqlite3_stmt *pRet = 0; + + va_start(ap, zFmt); + z = sqlite3_vmprintf(zFmt, ap); + + if( pCheck->rc==SQLITE_OK ){ + if( z==0 ){ + pCheck->rc = SQLITE_NOMEM; + }else{ + pCheck->rc = sqlite3_prepare_v2(pCheck->db, z, -1, &pRet, 0); + } + } + + sqlite3_free(z); + va_end(ap); + return pRet; +} /* -** Return the current amount of temp file space, in bytes, currently used by -** the RBU handle passed as the only argument. +** The second and subsequent arguments to this function are a printf() +** style format string and arguments. This function formats the string and +** appends it to the report being accumuated in pCheck. */ -SQLITE_API sqlite3_int64 sqlite3rbu_temp_size(sqlite3rbu*); +static void rtreeCheckAppendMsg(RtreeCheck *pCheck, const char *zFmt, ...){ + va_list ap; + va_start(ap, zFmt); + if( pCheck->rc==SQLITE_OK && pCheck->nErrrc = SQLITE_NOMEM; + }else{ + pCheck->zReport = sqlite3_mprintf("%z%s%z", + pCheck->zReport, (pCheck->zReport ? "\n" : ""), z + ); + if( pCheck->zReport==0 ){ + pCheck->rc = SQLITE_NOMEM; + } + } + pCheck->nErr++; + } + va_end(ap); +} /* -** Internally, each RBU connection uses a separate SQLite database -** connection to access the target and rbu update databases. This -** API allows the application direct access to these database handles. -** -** The first argument passed to this function must be a valid, open, RBU -** handle. The second argument should be passed zero to access the target -** database handle, or non-zero to access the rbu update database handle. -** Accessing the underlying database handles may be useful in the -** following scenarios: +** This function is a no-op if there is already an error code stored +** in the RtreeCheck object indicated by the first argument. NULL is +** returned in this case. ** -** * If any target tables are virtual tables, it may be necessary to -** call sqlite3_create_module() on the target database handle to -** register the required virtual table implementations. +** Otherwise, the contents of rtree table node iNode are loaded from +** the database and copied into a buffer obtained from sqlite3_malloc(). +** If no error occurs, a pointer to the buffer is returned and (*pnNode) +** is set to the size of the buffer in bytes. ** -** * If the data_xxx tables in the RBU source database are virtual -** tables, the application may need to call sqlite3_create_module() on -** the rbu update db handle to any required virtual table -** implementations. +** Or, if an error does occur, NULL is returned and an error code left +** in the RtreeCheck object. The final value of *pnNode is undefined in +** this case. +*/ +static u8 *rtreeCheckGetNode(RtreeCheck *pCheck, i64 iNode, int *pnNode){ + u8 *pRet = 0; /* Return value */ + + assert( pCheck->rc==SQLITE_OK ); + if( pCheck->pGetNode==0 ){ + pCheck->pGetNode = rtreeCheckPrepare(pCheck, + "SELECT data FROM %Q.'%q_node' WHERE nodeno=?", + pCheck->zDb, pCheck->zTab + ); + } + + if( pCheck->rc==SQLITE_OK ){ + sqlite3_bind_int64(pCheck->pGetNode, 1, iNode); + if( sqlite3_step(pCheck->pGetNode)==SQLITE_ROW ){ + int nNode = sqlite3_column_bytes(pCheck->pGetNode, 0); + const u8 *pNode = (const u8*)sqlite3_column_blob(pCheck->pGetNode, 0); + pRet = sqlite3_malloc(nNode); + if( pRet==0 ){ + pCheck->rc = SQLITE_NOMEM; + }else{ + memcpy(pRet, pNode, nNode); + *pnNode = nNode; + } + } + rtreeCheckReset(pCheck, pCheck->pGetNode); + if( pCheck->rc==SQLITE_OK && pRet==0 ){ + rtreeCheckAppendMsg(pCheck, "Node %lld missing from database", iNode); + } + } + + return pRet; +} + +/* +** This function is used to check that the %_parent (if bLeaf==0) or %_rowid +** (if bLeaf==1) table contains a specified entry. The schemas of the +** two tables are: ** -** * If the application uses the "rbu_delta()" feature described above, -** it must use sqlite3_create_function() or similar to register the -** rbu_delta() implementation with the target database handle. +** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER) +** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER, ...) ** -** If an error has occurred, either while opening or stepping the RBU object, -** this function may return NULL. The error code and message may be collected -** when sqlite3rbu_close() is called. +** In both cases, this function checks that there exists an entry with +** IPK value iKey and the second column set to iVal. ** -** Database handles returned by this function remain valid until the next -** call to any sqlite3rbu_xxx() function other than sqlite3rbu_db(). */ -SQLITE_API sqlite3 *sqlite3rbu_db(sqlite3rbu*, int bRbu); +static void rtreeCheckMapping( + RtreeCheck *pCheck, /* RtreeCheck object */ + int bLeaf, /* True for a leaf cell, false for interior */ + i64 iKey, /* Key for mapping */ + i64 iVal /* Expected value for mapping */ +){ + int rc; + sqlite3_stmt *pStmt; + const char *azSql[2] = { + "SELECT parentnode FROM %Q.'%q_parent' WHERE nodeno=?1", + "SELECT nodeno FROM %Q.'%q_rowid' WHERE rowid=?1" + }; + + assert( bLeaf==0 || bLeaf==1 ); + if( pCheck->aCheckMapping[bLeaf]==0 ){ + pCheck->aCheckMapping[bLeaf] = rtreeCheckPrepare(pCheck, + azSql[bLeaf], pCheck->zDb, pCheck->zTab + ); + } + if( pCheck->rc!=SQLITE_OK ) return; + + pStmt = pCheck->aCheckMapping[bLeaf]; + sqlite3_bind_int64(pStmt, 1, iKey); + rc = sqlite3_step(pStmt); + if( rc==SQLITE_DONE ){ + rtreeCheckAppendMsg(pCheck, "Mapping (%lld -> %lld) missing from %s table", + iKey, iVal, (bLeaf ? "%_rowid" : "%_parent") + ); + }else if( rc==SQLITE_ROW ){ + i64 ii = sqlite3_column_int64(pStmt, 0); + if( ii!=iVal ){ + rtreeCheckAppendMsg(pCheck, + "Found (%lld -> %lld) in %s table, expected (%lld -> %lld)", + iKey, ii, (bLeaf ? "%_rowid" : "%_parent"), iKey, iVal + ); + } + } + rtreeCheckReset(pCheck, pStmt); +} /* -** Do some work towards applying the RBU update to the target db. -** -** Return SQLITE_DONE if the update has been completely applied, or -** SQLITE_OK if no error occurs but there remains work to do to apply -** the RBU update. If an error does occur, some other error code is -** returned. +** Argument pCell points to an array of coordinates stored on an rtree page. +** This function checks that the coordinates are internally consistent (no +** x1>x2 conditions) and adds an error message to the RtreeCheck object +** if they are not. ** -** Once a call to sqlite3rbu_step() has returned a value other than -** SQLITE_OK, all subsequent calls on the same RBU handle are no-ops -** that immediately return the same value. +** Additionally, if pParent is not NULL, then it is assumed to point to +** the array of coordinates on the parent page that bound the page +** containing pCell. In this case it is also verified that the two +** sets of coordinates are mutually consistent and an error message added +** to the RtreeCheck object if they are not. */ -SQLITE_API int sqlite3rbu_step(sqlite3rbu *pRbu); +static void rtreeCheckCellCoord( + RtreeCheck *pCheck, + i64 iNode, /* Node id to use in error messages */ + int iCell, /* Cell number to use in error messages */ + u8 *pCell, /* Pointer to cell coordinates */ + u8 *pParent /* Pointer to parent coordinates */ +){ + RtreeCoord c1, c2; + RtreeCoord p1, p2; + int i; + + for(i=0; inDim; i++){ + readCoord(&pCell[4*2*i], &c1); + readCoord(&pCell[4*(2*i + 1)], &c2); + + /* printf("%e, %e\n", c1.u.f, c2.u.f); */ + if( pCheck->bInt ? c1.i>c2.i : c1.f>c2.f ){ + rtreeCheckAppendMsg(pCheck, + "Dimension %d of cell %d on node %lld is corrupt", i, iCell, iNode + ); + } + + if( pParent ){ + readCoord(&pParent[4*2*i], &p1); + readCoord(&pParent[4*(2*i + 1)], &p2); + + if( (pCheck->bInt ? c1.ibInt ? c2.i>p2.i : c2.f>p2.f) + ){ + rtreeCheckAppendMsg(pCheck, + "Dimension %d of cell %d on node %lld is corrupt relative to parent" + , i, iCell, iNode + ); + } + } + } +} /* -** Force RBU to save its state to disk. -** -** If a power failure or application crash occurs during an update, following -** system recovery RBU may resume the update from the point at which the state -** was last saved. In other words, from the most recent successful call to -** sqlite3rbu_close() or this function. +** Run rtreecheck() checks on node iNode, which is at depth iDepth within +** the r-tree structure. Argument aParent points to the array of coordinates +** that bound node iNode on the parent node. ** -** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +** If any problems are discovered, an error message is appended to the +** report accumulated in the RtreeCheck object. */ -SQLITE_API int sqlite3rbu_savestate(sqlite3rbu *pRbu); +static void rtreeCheckNode( + RtreeCheck *pCheck, + int iDepth, /* Depth of iNode (0==leaf) */ + u8 *aParent, /* Buffer containing parent coords */ + i64 iNode /* Node to check */ +){ + u8 *aNode = 0; + int nNode = 0; + + assert( iNode==1 || aParent!=0 ); + assert( pCheck->nDim>0 ); + + aNode = rtreeCheckGetNode(pCheck, iNode, &nNode); + if( aNode ){ + if( nNode<4 ){ + rtreeCheckAppendMsg(pCheck, + "Node %lld is too small (%d bytes)", iNode, nNode + ); + }else{ + int nCell; /* Number of cells on page */ + int i; /* Used to iterate through cells */ + if( aParent==0 ){ + iDepth = readInt16(aNode); + if( iDepth>RTREE_MAX_DEPTH ){ + rtreeCheckAppendMsg(pCheck, "Rtree depth out of range (%d)", iDepth); + sqlite3_free(aNode); + return; + } + } + nCell = readInt16(&aNode[2]); + if( (4 + nCell*(8 + pCheck->nDim*2*4))>nNode ){ + rtreeCheckAppendMsg(pCheck, + "Node %lld is too small for cell count of %d (%d bytes)", + iNode, nCell, nNode + ); + }else{ + for(i=0; inDim*2*4)]; + i64 iVal = readInt64(pCell); + rtreeCheckCellCoord(pCheck, iNode, i, &pCell[8], aParent); + + if( iDepth>0 ){ + rtreeCheckMapping(pCheck, 0, iVal, iNode); + rtreeCheckNode(pCheck, iDepth-1, &pCell[8], iVal); + pCheck->nNonLeaf++; + }else{ + rtreeCheckMapping(pCheck, 1, iVal, iNode); + pCheck->nLeaf++; + } + } + } + } + sqlite3_free(aNode); + } +} /* -** Close an RBU handle. -** -** If the RBU update has been completely applied, mark the RBU database -** as fully applied. Otherwise, assuming no error has occurred, save the -** current state of the RBU update appliation to the RBU database. -** -** If an error has already occurred as part of an sqlite3rbu_step() -** or sqlite3rbu_open() call, or if one occurs within this function, an -** SQLite error code is returned. Additionally, if pzErrmsg is not NULL, -** *pzErrmsg may be set to point to a buffer containing a utf-8 formatted -** English language error message. It is the responsibility of the caller to -** eventually free any such buffer using sqlite3_free(). -** -** Otherwise, if no error occurs, this function returns SQLITE_OK if the -** update has been partially applied, or SQLITE_DONE if it has been -** completely applied. +** The second argument to this function must be either "_rowid" or +** "_parent". This function checks that the number of entries in the +** %_rowid or %_parent table is exactly nExpect. If not, it adds +** an error message to the report in the RtreeCheck object indicated +** by the first argument. */ -SQLITE_API int sqlite3rbu_close(sqlite3rbu *pRbu, char **pzErrmsg); +static void rtreeCheckCount(RtreeCheck *pCheck, const char *zTbl, i64 nExpect){ + if( pCheck->rc==SQLITE_OK ){ + sqlite3_stmt *pCount; + pCount = rtreeCheckPrepare(pCheck, "SELECT count(*) FROM %Q.'%q%s'", + pCheck->zDb, pCheck->zTab, zTbl + ); + if( pCount ){ + if( sqlite3_step(pCount)==SQLITE_ROW ){ + i64 nActual = sqlite3_column_int64(pCount, 0); + if( nActual!=nExpect ){ + rtreeCheckAppendMsg(pCheck, "Wrong number of entries in %%%s table" + " - expected %lld, actual %lld" , zTbl, nExpect, nActual + ); + } + } + pCheck->rc = sqlite3_finalize(pCount); + } + } +} + +/* +** This function does the bulk of the work for the rtree integrity-check. +** It is called by rtreecheck(), which is the SQL function implementation. +*/ +static int rtreeCheckTable( + sqlite3 *db, /* Database handle to access db through */ + const char *zDb, /* Name of db ("main", "temp" etc.) */ + const char *zTab, /* Name of rtree table to check */ + char **pzReport /* OUT: sqlite3_malloc'd report text */ +){ + RtreeCheck check; /* Common context for various routines */ + sqlite3_stmt *pStmt = 0; /* Used to find column count of rtree table */ + int bEnd = 0; /* True if transaction should be closed */ + int nAux = 0; /* Number of extra columns. */ + + /* Initialize the context object */ + memset(&check, 0, sizeof(check)); + check.db = db; + check.zDb = zDb; + check.zTab = zTab; + + /* If there is not already an open transaction, open one now. This is + ** to ensure that the queries run as part of this integrity-check operate + ** on a consistent snapshot. */ + if( sqlite3_get_autocommit(db) ){ + check.rc = sqlite3_exec(db, "BEGIN", 0, 0, 0); + bEnd = 1; + } + + /* Find the number of auxiliary columns */ + if( check.rc==SQLITE_OK ){ + pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.'%q_rowid'", zDb, zTab); + if( pStmt ){ + nAux = sqlite3_column_count(pStmt) - 2; + sqlite3_finalize(pStmt); + } + check.rc = SQLITE_OK; + } + + /* Find number of dimensions in the rtree table. */ + pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.%Q", zDb, zTab); + if( pStmt ){ + int rc; + check.nDim = (sqlite3_column_count(pStmt) - 1 - nAux) / 2; + if( check.nDim<1 ){ + rtreeCheckAppendMsg(&check, "Schema corrupt or not an rtree"); + }else if( SQLITE_ROW==sqlite3_step(pStmt) ){ + check.bInt = (sqlite3_column_type(pStmt, 1)==SQLITE_INTEGER); + } + rc = sqlite3_finalize(pStmt); + if( rc!=SQLITE_CORRUPT ) check.rc = rc; + } -/* -** Return the total number of key-value operations (inserts, deletes or -** updates) that have been performed on the target database since the -** current RBU update was started. -*/ -SQLITE_API sqlite3_int64 sqlite3rbu_progress(sqlite3rbu *pRbu); + /* Do the actual integrity-check */ + if( check.nDim>=1 ){ + if( check.rc==SQLITE_OK ){ + rtreeCheckNode(&check, 0, 0, 1); + } + rtreeCheckCount(&check, "_rowid", check.nLeaf); + rtreeCheckCount(&check, "_parent", check.nNonLeaf); + } + + /* Finalize SQL statements used by the integrity-check */ + sqlite3_finalize(check.pGetNode); + sqlite3_finalize(check.aCheckMapping[0]); + sqlite3_finalize(check.aCheckMapping[1]); + + /* If one was opened, close the transaction */ + if( bEnd ){ + int rc = sqlite3_exec(db, "END", 0, 0, 0); + if( check.rc==SQLITE_OK ) check.rc = rc; + } + *pzReport = check.zReport; + return check.rc; +} /* -** Obtain permyriadage (permyriadage is to 10000 as percentage is to 100) -** progress indications for the two stages of an RBU update. This API may -** be useful for driving GUI progress indicators and similar. +** Usage: ** -** An RBU update is divided into two stages: +** rtreecheck(); +** rtreecheck(, ); ** -** * Stage 1, in which changes are accumulated in an oal/wal file, and -** * Stage 2, in which the contents of the wal file are copied into the -** main database. +** Invoking this SQL function runs an integrity-check on the named rtree +** table. The integrity-check verifies the following: ** -** The update is visible to non-RBU clients during stage 2. During stage 1 -** non-RBU reader clients may see the original database. +** 1. For each cell in the r-tree structure (%_node table), that: ** -** If this API is called during stage 2 of the update, output variable -** (*pnOne) is set to 10000 to indicate that stage 1 has finished and (*pnTwo) -** to a value between 0 and 10000 to indicate the permyriadage progress of -** stage 2. A value of 5000 indicates that stage 2 is half finished, -** 9000 indicates that it is 90% finished, and so on. +** a) for each dimension, (coord1 <= coord2). ** -** If this API is called during stage 1 of the update, output variable -** (*pnTwo) is set to 0 to indicate that stage 2 has not yet started. The -** value to which (*pnOne) is set depends on whether or not the RBU -** database contains an "rbu_count" table. The rbu_count table, if it -** exists, must contain the same columns as the following: +** b) unless the cell is on the root node, that the cell is bounded +** by the parent cell on the parent node. ** -** CREATE TABLE rbu_count(tbl TEXT PRIMARY KEY, cnt INTEGER) WITHOUT ROWID; +** c) for leaf nodes, that there is an entry in the %_rowid +** table corresponding to the cell's rowid value that +** points to the correct node. ** -** There must be one row in the table for each source (data_xxx) table within -** the RBU database. The 'tbl' column should contain the name of the source -** table. The 'cnt' column should contain the number of rows within the -** source table. +** d) for cells on non-leaf nodes, that there is an entry in the +** %_parent table mapping from the cell's child node to the +** node that it resides on. ** -** If the rbu_count table is present and populated correctly and this -** API is called during stage 1, the *pnOne output variable is set to the -** permyriadage progress of the same stage. If the rbu_count table does -** not exist, then (*pnOne) is set to -1 during stage 1. If the rbu_count -** table exists but is not correctly populated, the value of the *pnOne -** output variable during stage 1 is undefined. +** 2. That there are the same number of entries in the %_rowid table +** as there are leaf cells in the r-tree structure, and that there +** is a leaf cell that corresponds to each entry in the %_rowid table. +** +** 3. That there are the same number of entries in the %_parent table +** as there are non-leaf cells in the r-tree structure, and that +** there is a non-leaf cell that corresponds to each entry in the +** %_parent table. */ -SQLITE_API void sqlite3rbu_bp_progress(sqlite3rbu *pRbu, int *pnOne, int*pnTwo); +static void rtreecheck( + sqlite3_context *ctx, + int nArg, + sqlite3_value **apArg +){ + if( nArg!=1 && nArg!=2 ){ + sqlite3_result_error(ctx, + "wrong number of arguments to function rtreecheck()", -1 + ); + }else{ + int rc; + char *zReport = 0; + const char *zDb = (const char*)sqlite3_value_text(apArg[0]); + const char *zTab; + if( nArg==1 ){ + zTab = zDb; + zDb = "main"; + }else{ + zTab = (const char*)sqlite3_value_text(apArg[1]); + } + rc = rtreeCheckTable(sqlite3_context_db_handle(ctx), zDb, zTab, &zReport); + if( rc==SQLITE_OK ){ + sqlite3_result_text(ctx, zReport ? zReport : "ok", -1, SQLITE_TRANSIENT); + }else{ + sqlite3_result_error_code(ctx, rc); + } + sqlite3_free(zReport); + } +} +/* Conditionally include the geopoly code */ +#ifdef SQLITE_ENABLE_GEOPOLY +/************** Include geopoly.c in the middle of rtree.c *******************/ +/************** Begin file geopoly.c *****************************************/ /* -** Obtain an indication as to the current stage of an RBU update or vacuum. -** This function always returns one of the SQLITE_RBU_STATE_XXX constants -** defined in this file. Return values should be interpreted as follows: +** 2018-05-25 ** -** SQLITE_RBU_STATE_OAL: -** RBU is currently building a *-oal file. The next call to sqlite3rbu_step() -** may either add further data to the *-oal file, or compute data that will -** be added by a subsequent call. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** SQLITE_RBU_STATE_MOVE: -** RBU has finished building the *-oal file. The next call to sqlite3rbu_step() -** will move the *-oal file to the equivalent *-wal path. If the current -** operation is an RBU update, then the updated version of the database -** file will become visible to ordinary SQLite clients following the next -** call to sqlite3rbu_step(). +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** SQLITE_RBU_STATE_CHECKPOINT: -** RBU is currently performing an incremental checkpoint. The next call to -** sqlite3rbu_step() will copy a page of data from the *-wal file into -** the target database file. +****************************************************************************** ** -** SQLITE_RBU_STATE_DONE: -** The RBU operation has finished. Any subsequent calls to sqlite3rbu_step() -** will immediately return SQLITE_DONE. +** This file implements an alternative R-Tree virtual table that +** uses polygons to express the boundaries of 2-dimensional objects. ** -** SQLITE_RBU_STATE_ERROR: -** An error has occurred. Any subsequent calls to sqlite3rbu_step() will -** immediately return the SQLite error code associated with the error. +** This file is #include-ed onto the end of "rtree.c" so that it has +** access to all of the R-Tree internals. */ -#define SQLITE_RBU_STATE_OAL 1 -#define SQLITE_RBU_STATE_MOVE 2 -#define SQLITE_RBU_STATE_CHECKPOINT 3 -#define SQLITE_RBU_STATE_DONE 4 -#define SQLITE_RBU_STATE_ERROR 5 +/* #include */ -SQLITE_API int sqlite3rbu_state(sqlite3rbu *pRbu); +/* Enable -DGEOPOLY_ENABLE_DEBUG for debugging facilities */ +#ifdef GEOPOLY_ENABLE_DEBUG + static int geo_debug = 0; +# define GEODEBUG(X) if(geo_debug)printf X +#else +# define GEODEBUG(X) +#endif +#ifndef JSON_NULL /* The following stuff repeats things found in json1 */ /* -** Create an RBU VFS named zName that accesses the underlying file-system -** via existing VFS zParent. Or, if the zParent parameter is passed NULL, -** then the new RBU VFS uses the default system VFS to access the file-system. -** The new object is registered as a non-default VFS with SQLite before -** returning. -** -** Part of the RBU implementation uses a custom VFS object. Usually, this -** object is created and deleted automatically by RBU. -** -** The exception is for applications that also use zipvfs. In this case, -** the custom VFS must be explicitly created by the user before the RBU -** handle is opened. The RBU VFS should be installed so that the zipvfs -** VFS uses the RBU VFS, which in turn uses any other VFS layers in use -** (for example multiplexor) to access the file-system. For example, -** to assemble an RBU enabled VFS stack that uses both zipvfs and -** multiplexor (error checking omitted): -** -** // Create a VFS named "multiplex" (not the default). -** sqlite3_multiplex_initialize(0, 0); -** -** // Create an rbu VFS named "rbu" that uses multiplexor. If the -** // second argument were replaced with NULL, the "rbu" VFS would -** // access the file-system via the system default VFS, bypassing the -** // multiplexor. -** sqlite3rbu_create_vfs("rbu", "multiplex"); +** Versions of isspace(), isalnum() and isdigit() to which it is safe +** to pass signed char values. +*/ +#ifdef sqlite3Isdigit + /* Use the SQLite core versions if this routine is part of the + ** SQLite amalgamation */ +# define safe_isdigit(x) sqlite3Isdigit(x) +# define safe_isalnum(x) sqlite3Isalnum(x) +# define safe_isxdigit(x) sqlite3Isxdigit(x) +#else + /* Use the standard library for separate compilation */ +#include /* amalgamator: keep */ +# define safe_isdigit(x) isdigit((unsigned char)(x)) +# define safe_isalnum(x) isalnum((unsigned char)(x)) +# define safe_isxdigit(x) isxdigit((unsigned char)(x)) +#endif + +/* +** Growing our own isspace() routine this way is twice as fast as +** the library isspace() function. +*/ +static const char geopolyIsSpace[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; +#define safe_isspace(x) (geopolyIsSpace[(unsigned char)x]) +#endif /* JSON NULL - back to original code */ + +/* Compiler and version */ +#ifndef GCC_VERSION +#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC) +# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) +#else +# define GCC_VERSION 0 +#endif +#endif +#ifndef MSVC_VERSION +#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC) +# define MSVC_VERSION _MSC_VER +#else +# define MSVC_VERSION 0 +#endif +#endif + +/* Datatype for coordinates +*/ +typedef float GeoCoord; + +/* +** Internal representation of a polygon. ** -** // Create a zipvfs VFS named "zipvfs" that uses rbu. -** zipvfs_create_vfs_v3("zipvfs", "rbu", 0, xCompressorAlgorithmDetector); +** The polygon consists of a sequence of vertexes. There is a line +** segment between each pair of vertexes, and one final segment from +** the last vertex back to the first. (This differs from the GeoJSON +** standard in which the final vertex is a repeat of the first.) ** -** // Make zipvfs the default VFS. -** sqlite3_vfs_register(sqlite3_vfs_find("zipvfs"), 1); +** The polygon follows the right-hand rule. The area to the right of +** each segment is "outside" and the area to the left is "inside". ** -** Because the default VFS created above includes a RBU functionality, it -** may be used by RBU clients. Attempting to use RBU with a zipvfs VFS stack -** that does not include the RBU layer results in an error. +** The on-disk representation consists of a 4-byte header followed by +** the values. The 4-byte header is: ** -** The overhead of adding the "rbu" VFS to the system is negligible for -** non-RBU users. There is no harm in an application accessing the -** file-system via "rbu" all the time, even if it only uses RBU functionality -** occasionally. +** encoding (1 byte) 0=big-endian, 1=little-endian +** nvertex (3 bytes) Number of vertexes as a big-endian integer */ -SQLITE_API int sqlite3rbu_create_vfs(const char *zName, const char *zParent); +typedef struct GeoPoly GeoPoly; +struct GeoPoly { + int nVertex; /* Number of vertexes */ + unsigned char hdr[4]; /* Header for on-disk representation */ + GeoCoord a[2]; /* 2*nVertex values. X (longitude) first, then Y */ +}; /* -** Deregister and destroy an RBU vfs created by an earlier call to -** sqlite3rbu_create_vfs(). -** -** VFS objects are not reference counted. If a VFS object is destroyed -** before all database handles that use it have been closed, the results -** are undefined. +** State of a parse of a GeoJSON input. */ -SQLITE_API void sqlite3rbu_destroy_vfs(const char *zName); +typedef struct GeoParse GeoParse; +struct GeoParse { + const unsigned char *z; /* Unparsed input */ + int nVertex; /* Number of vertexes in a[] */ + int nAlloc; /* Space allocated to a[] */ + int nErr; /* Number of errors encountered */ + GeoCoord *a; /* Array of vertexes. From sqlite3_malloc64() */ +}; -#if 0 -} /* end of the 'extern "C"' block */ -#endif +/* Do a 4-byte byte swap */ +static void geopolySwab32(unsigned char *a){ + unsigned char t = a[0]; + a[0] = a[3]; + a[3] = t; + t = a[1]; + a[1] = a[2]; + a[2] = t; +} -#endif /* _SQLITE3RBU_H */ +/* Skip whitespace. Return the next non-whitespace character. */ +static char geopolySkipSpace(GeoParse *p){ + while( p->z[0] && safe_isspace(p->z[0]) ) p->z++; + return p->z[0]; +} -/************** End of sqlite3rbu.h ******************************************/ -/************** Continuing where we left off in sqlite3rbu.c *****************/ +/* Parse out a number. Write the value into *pVal if pVal!=0. +** return non-zero on success and zero if the next token is not a number. +*/ +static int geopolyParseNumber(GeoParse *p, GeoCoord *pVal){ + char c = geopolySkipSpace(p); + const unsigned char *z = p->z; + int j = 0; + int seenDP = 0; + int seenE = 0; + if( c=='-' ){ + j = 1; + c = z[j]; + } + if( c=='0' && z[j+1]>='0' && z[j+1]<='9' ) return 0; + for(;; j++){ + c = z[j]; + if( c>='0' && c<='9' ) continue; + if( c=='.' ){ + if( z[j-1]=='-' ) return 0; + if( seenDP ) return 0; + seenDP = 1; + continue; + } + if( c=='e' || c=='E' ){ + if( z[j-1]<'0' ) return 0; + if( seenE ) return -1; + seenDP = seenE = 1; + c = z[j+1]; + if( c=='+' || c=='-' ){ + j++; + c = z[j+1]; + } + if( c<'0' || c>'9' ) return 0; + continue; + } + break; + } + if( z[j-1]<'0' ) return 0; + if( pVal ) *pVal = (GeoCoord)atof((const char*)p->z); + p->z += j; + return 1; +} -#if defined(_WIN32_WCE) -/* #include "windows.h" */ -#endif +/* +** If the input is a well-formed JSON array of coordinates with at least +** four coordinates and where each coordinate is itself a two-value array, +** then convert the JSON into a GeoPoly object and return a pointer to +** that object. +** +** If any error occurs, return NULL. +*/ +static GeoPoly *geopolyParseJson(const unsigned char *z, int *pRc){ + GeoParse s; + int rc = SQLITE_OK; + memset(&s, 0, sizeof(s)); + s.z = z; + if( geopolySkipSpace(&s)=='[' ){ + s.z++; + while( geopolySkipSpace(&s)=='[' ){ + int ii = 0; + char c; + s.z++; + if( s.nVertex>=s.nAlloc ){ + GeoCoord *aNew; + s.nAlloc = s.nAlloc*2 + 16; + aNew = sqlite3_realloc64(s.a, s.nAlloc*sizeof(GeoCoord)*2 ); + if( aNew==0 ){ + rc = SQLITE_NOMEM; + s.nErr++; + break; + } + s.a = aNew; + } + while( geopolyParseNumber(&s, ii<=1 ? &s.a[s.nVertex*2+ii] : 0) ){ + ii++; + if( ii==2 ) s.nVertex++; + c = geopolySkipSpace(&s); + s.z++; + if( c==',' ) continue; + if( c==']' && ii>=2 ) break; + s.nErr++; + rc = SQLITE_ERROR; + goto parse_json_err; + } + if( geopolySkipSpace(&s)==',' ){ + s.z++; + continue; + } + break; + } + if( geopolySkipSpace(&s)==']' + && s.nVertex>=4 + && s.a[0]==s.a[s.nVertex*2-2] + && s.a[1]==s.a[s.nVertex*2-1] + && (s.z++, geopolySkipSpace(&s)==0) + ){ + int nByte; + GeoPoly *pOut; + int x = 1; + s.nVertex--; /* Remove the redundant vertex at the end */ + nByte = sizeof(GeoPoly) * s.nVertex*2*sizeof(GeoCoord); + pOut = sqlite3_malloc64( nByte ); + x = 1; + if( pOut==0 ) goto parse_json_err; + pOut->nVertex = s.nVertex; + memcpy(pOut->a, s.a, s.nVertex*2*sizeof(GeoCoord)); + pOut->hdr[0] = *(unsigned char*)&x; + pOut->hdr[1] = (s.nVertex>>16)&0xff; + pOut->hdr[2] = (s.nVertex>>8)&0xff; + pOut->hdr[3] = s.nVertex&0xff; + sqlite3_free(s.a); + if( pRc ) *pRc = SQLITE_OK; + return pOut; + }else{ + s.nErr++; + rc = SQLITE_ERROR; + } + } +parse_json_err: + if( pRc ) *pRc = rc; + sqlite3_free(s.a); + return 0; +} -/* Maximum number of prepared UPDATE statements held by this module */ -#define SQLITE_RBU_UPDATE_CACHESIZE 16 +/* +** Given a function parameter, try to interpret it as a polygon, either +** in the binary format or JSON text. Compute a GeoPoly object and +** return a pointer to that object. Or if the input is not a well-formed +** polygon, put an error message in sqlite3_context and return NULL. +*/ +static GeoPoly *geopolyFuncParam( + sqlite3_context *pCtx, /* Context for error messages */ + sqlite3_value *pVal, /* The value to decode */ + int *pRc /* Write error here */ +){ + GeoPoly *p = 0; + int nByte; + if( sqlite3_value_type(pVal)==SQLITE_BLOB + && (nByte = sqlite3_value_bytes(pVal))>=(4+6*sizeof(GeoCoord)) + ){ + const unsigned char *a = sqlite3_value_blob(pVal); + int nVertex; + nVertex = (a[1]<<16) + (a[2]<<8) + a[3]; + if( (a[0]==0 || a[0]==1) + && (nVertex*2*sizeof(GeoCoord) + 4)==(unsigned int)nByte + ){ + p = sqlite3_malloc64( sizeof(*p) + (nVertex-1)*2*sizeof(GeoCoord) ); + if( p==0 ){ + if( pRc ) *pRc = SQLITE_NOMEM; + if( pCtx ) sqlite3_result_error_nomem(pCtx); + }else{ + int x = 1; + p->nVertex = nVertex; + memcpy(p->hdr, a, nByte); + if( a[0] != *(unsigned char*)&x ){ + int ii; + for(ii=0; iia[ii]); + } + p->hdr[0] ^= 1; + } + } + } + if( pRc ) *pRc = SQLITE_OK; + return p; + }else if( sqlite3_value_type(pVal)==SQLITE_TEXT ){ + const unsigned char *zJson = sqlite3_value_text(pVal); + if( zJson==0 ){ + if( pRc ) *pRc = SQLITE_NOMEM; + return 0; + } + return geopolyParseJson(zJson, pRc); + }else{ + if( pRc ) *pRc = SQLITE_ERROR; + return 0; + } +} -/* Delta checksums disabled by default. Compile with -DRBU_ENABLE_DELTA_CKSUM -** to enable checksum verification. +/* +** Implementation of the geopoly_blob(X) function. +** +** If the input is a well-formed Geopoly BLOB or JSON string +** then return the BLOB representation of the polygon. Otherwise +** return NULL. */ -#ifndef RBU_ENABLE_DELTA_CKSUM -# define RBU_ENABLE_DELTA_CKSUM 0 -#endif +static void geopolyBlobFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} /* -** Swap two objects of type TYPE. +** SQL function: geopoly_json(X) +** +** Interpret X as a polygon and render it as a JSON array +** of coordinates. Or, if X is not a valid polygon, return NULL. */ -#if !defined(SQLITE_AMALGAMATION) -# define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} -#endif +static void geopolyJsonFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + sqlite3 *db = sqlite3_context_db_handle(context); + sqlite3_str *x = sqlite3_str_new(db); + int i; + sqlite3_str_append(x, "[", 1); + for(i=0; inVertex; i++){ + sqlite3_str_appendf(x, "[%!g,%!g],", p->a[i*2], p->a[i*2+1]); + } + sqlite3_str_appendf(x, "[%!g,%!g]]", p->a[0], p->a[1]); + sqlite3_result_text(context, sqlite3_str_finish(x), -1, sqlite3_free); + sqlite3_free(p); + } +} /* -** The rbu_state table is used to save the state of a partially applied -** update so that it can be resumed later. The table consists of integer -** keys mapped to values as follows: -** -** RBU_STATE_STAGE: -** May be set to integer values 1, 2, 4 or 5. As follows: -** 1: the *-rbu file is currently under construction. -** 2: the *-rbu file has been constructed, but not yet moved -** to the *-wal path. -** 4: the checkpoint is underway. -** 5: the rbu update has been checkpointed. -** -** RBU_STATE_TBL: -** Only valid if STAGE==1. The target database name of the table -** currently being written. +** SQL function: geopoly_svg(X, ....) ** -** RBU_STATE_IDX: -** Only valid if STAGE==1. The target database name of the index -** currently being written, or NULL if the main table is currently being -** updated. +** Interpret X as a polygon and render it as a SVG . +** Additional arguments are added as attributes to the . +*/ +static void geopolySvgFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + sqlite3 *db = sqlite3_context_db_handle(context); + sqlite3_str *x = sqlite3_str_new(db); + int i; + char cSep = '\''; + sqlite3_str_appendf(x, "a[i*2], p->a[i*2+1]); + cSep = ' '; + } + sqlite3_str_appendf(x, " %g,%g'", p->a[0], p->a[1]); + for(i=1; i"); + sqlite3_result_text(context, sqlite3_str_finish(x), -1, sqlite3_free); + sqlite3_free(p); + } +} + +/* +** SQL Function: geopoly_xform(poly, A, B, C, D, E, F) ** -** RBU_STATE_ROW: -** Only valid if STAGE==1. Number of rows already processed for the current -** table/index. +** Transform and/or translate a polygon as follows: ** -** RBU_STATE_PROGRESS: -** Trbul number of sqlite3rbu_step() calls made so far as part of this -** rbu update. +** x1 = A*x0 + B*y0 + E +** y1 = C*x0 + D*y0 + F ** -** RBU_STATE_CKPT: -** Valid if STAGE==4. The 64-bit checksum associated with the wal-index -** header created by recovering the *-wal file. This is used to detect -** cases when another client appends frames to the *-wal file in the -** middle of an incremental checkpoint (an incremental checkpoint cannot -** be continued if this happens). +** For a translation: ** -** RBU_STATE_COOKIE: -** Valid if STAGE==1. The current change-counter cookie value in the -** target db file. +** geopoly_xform(poly, 1, 0, 0, 1, x-offset, y-offset) ** -** RBU_STATE_OALSZ: -** Valid if STAGE==1. The size in bytes of the *-oal file. +** Rotate by R around the point (0,0): ** -** RBU_STATE_DATATBL: -** Only valid if STAGE==1. The RBU database name of the table -** currently being read. +** geopoly_xform(poly, cos(R), sin(R), -sin(R), cos(R), 0, 0) */ -#define RBU_STATE_STAGE 1 -#define RBU_STATE_TBL 2 -#define RBU_STATE_IDX 3 -#define RBU_STATE_ROW 4 -#define RBU_STATE_PROGRESS 5 -#define RBU_STATE_CKPT 6 -#define RBU_STATE_COOKIE 7 -#define RBU_STATE_OALSZ 8 -#define RBU_STATE_PHASEONESTEP 9 -#define RBU_STATE_DATATBL 10 +static void geopolyXformFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + double A = sqlite3_value_double(argv[1]); + double B = sqlite3_value_double(argv[2]); + double C = sqlite3_value_double(argv[3]); + double D = sqlite3_value_double(argv[4]); + double E = sqlite3_value_double(argv[5]); + double F = sqlite3_value_double(argv[6]); + GeoCoord x1, y1, x0, y0; + int ii; + if( p ){ + for(ii=0; iinVertex; ii++){ + x0 = p->a[ii*2]; + y0 = p->a[ii*2+1]; + x1 = (GeoCoord)(A*x0 + B*y0 + E); + y1 = (GeoCoord)(C*x0 + D*y0 + F); + p->a[ii*2] = x1; + p->a[ii*2+1] = y1; + } + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} -#define RBU_STAGE_OAL 1 -#define RBU_STAGE_MOVE 2 -#define RBU_STAGE_CAPTURE 3 -#define RBU_STAGE_CKPT 4 -#define RBU_STAGE_DONE 5 +/* +** Implementation of the geopoly_area(X) function. +** +** If the input is a well-formed Geopoly BLOB then return the area +** enclosed by the polygon. If the polygon circulates clockwise instead +** of counterclockwise (as it should) then return the negative of the +** enclosed area. Otherwise return NULL. +*/ +static void geopolyAreaFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + double rArea = 0.0; + int ii; + for(ii=0; iinVertex-1; ii++){ + rArea += (p->a[ii*2] - p->a[ii*2+2]) /* (x0 - x1) */ + * (p->a[ii*2+1] + p->a[ii*2+3]) /* (y0 + y1) */ + * 0.5; + } + rArea += (p->a[ii*2] - p->a[0]) /* (xN - x0) */ + * (p->a[ii*2+1] + p->a[1]) /* (yN + y0) */ + * 0.5; + sqlite3_result_double(context, rArea); + sqlite3_free(p); + } +} +/* +** If pPoly is a polygon, compute its bounding box. Then: +** +** (1) if aCoord!=0 store the bounding box in aCoord, returning NULL +** (2) otherwise, compute a GeoPoly for the bounding box and return the +** new GeoPoly +** +** If pPoly is NULL but aCoord is not NULL, then compute a new GeoPoly from +** the bounding box in aCoord and return a pointer to that GeoPoly. +*/ +static GeoPoly *geopolyBBox( + sqlite3_context *context, /* For recording the error */ + sqlite3_value *pPoly, /* The polygon */ + RtreeCoord *aCoord, /* Results here */ + int *pRc /* Error code here */ +){ + GeoPoly *pOut = 0; + GeoPoly *p; + float mnX, mxX, mnY, mxY; + if( pPoly==0 && aCoord!=0 ){ + p = 0; + mnX = aCoord[0].f; + mxX = aCoord[1].f; + mnY = aCoord[2].f; + mxY = aCoord[3].f; + goto geopolyBboxFill; + }else{ + p = geopolyFuncParam(context, pPoly, pRc); + } + if( p ){ + int ii; + mnX = mxX = p->a[0]; + mnY = mxY = p->a[1]; + for(ii=1; iinVertex; ii++){ + double r = p->a[ii*2]; + if( rmxX ) mxX = (float)r; + r = p->a[ii*2+1]; + if( rmxY ) mxY = (float)r; + } + if( pRc ) *pRc = SQLITE_OK; + if( aCoord==0 ){ + geopolyBboxFill: + pOut = sqlite3_realloc(p, sizeof(GeoPoly)+sizeof(GeoCoord)*6); + if( pOut==0 ){ + sqlite3_free(p); + if( context ) sqlite3_result_error_nomem(context); + if( pRc ) *pRc = SQLITE_NOMEM; + return 0; + } + pOut->nVertex = 4; + ii = 1; + pOut->hdr[0] = *(unsigned char*)ⅈ + pOut->hdr[1] = 0; + pOut->hdr[2] = 0; + pOut->hdr[3] = 4; + pOut->a[0] = mnX; + pOut->a[1] = mnY; + pOut->a[2] = mxX; + pOut->a[3] = mnY; + pOut->a[4] = mxX; + pOut->a[5] = mxY; + pOut->a[6] = mnX; + pOut->a[7] = mxY; + }else{ + sqlite3_free(p); + aCoord[0].f = mnX; + aCoord[1].f = mxX; + aCoord[2].f = mnY; + aCoord[3].f = mxY; + } + } + return pOut; +} -#define RBU_CREATE_STATE \ - "CREATE TABLE IF NOT EXISTS %s.rbu_state(k INTEGER PRIMARY KEY, v)" +/* +** Implementation of the geopoly_bbox(X) SQL function. +*/ +static void geopolyBBoxFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyBBox(context, argv[0], 0, 0); + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} -typedef struct RbuFrame RbuFrame; -typedef struct RbuObjIter RbuObjIter; -typedef struct RbuState RbuState; -typedef struct rbu_vfs rbu_vfs; -typedef struct rbu_file rbu_file; -typedef struct RbuUpdateStmt RbuUpdateStmt; +/* +** State vector for the geopoly_group_bbox() aggregate function. +*/ +typedef struct GeoBBox GeoBBox; +struct GeoBBox { + int isInit; + RtreeCoord a[4]; +}; -#if !defined(SQLITE_AMALGAMATION) -typedef unsigned int u32; -typedef unsigned short u16; -typedef unsigned char u8; -typedef sqlite3_int64 i64; -#endif /* -** These values must match the values defined in wal.c for the equivalent -** locks. These are not magic numbers as they are part of the SQLite file -** format. +** Implementation of the geopoly_group_bbox(X) aggregate SQL function. */ -#define WAL_LOCK_WRITE 0 -#define WAL_LOCK_CKPT 1 -#define WAL_LOCK_READ0 3 +static void geopolyBBoxStep( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + RtreeCoord a[4]; + int rc = SQLITE_OK; + (void)geopolyBBox(context, argv[0], a, &rc); + if( rc==SQLITE_OK ){ + GeoBBox *pBBox; + pBBox = (GeoBBox*)sqlite3_aggregate_context(context, sizeof(*pBBox)); + if( pBBox==0 ) return; + if( pBBox->isInit==0 ){ + pBBox->isInit = 1; + memcpy(pBBox->a, a, sizeof(RtreeCoord)*4); + }else{ + if( a[0].f < pBBox->a[0].f ) pBBox->a[0] = a[0]; + if( a[1].f > pBBox->a[1].f ) pBBox->a[1] = a[1]; + if( a[2].f < pBBox->a[2].f ) pBBox->a[2] = a[2]; + if( a[3].f > pBBox->a[3].f ) pBBox->a[3] = a[3]; + } + } +} +static void geopolyBBoxFinal( + sqlite3_context *context +){ + GeoPoly *p; + GeoBBox *pBBox; + pBBox = (GeoBBox*)sqlite3_aggregate_context(context, 0); + if( pBBox==0 ) return; + p = geopolyBBox(context, 0, pBBox->a, 0); + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} -#define SQLITE_FCNTL_RBUCNT 5149216 /* -** A structure to store values read from the rbu_state table in memory. +** Determine if point (x0,y0) is beneath line segment (x1,y1)->(x2,y2). +** Returns: +** +** +2 x0,y0 is on the line segement +** +** +1 x0,y0 is beneath line segment +** +** 0 x0,y0 is not on or beneath the line segment or the line segment +** is vertical and x0,y0 is not on the line segment +** +** The left-most coordinate min(x1,x2) is not considered to be part of +** the line segment for the purposes of this analysis. +*/ +static int pointBeneathLine( + double x0, double y0, + double x1, double y1, + double x2, double y2 +){ + double y; + if( x0==x1 && y0==y1 ) return 2; + if( x1x2 ) return 0; + }else if( x1>x2 ){ + if( x0<=x2 || x0>x1 ) return 0; + }else{ + /* Vertical line segment */ + if( x0!=x1 ) return 0; + if( y0y1 && y0>y2 ) return 0; + return 2; + } + y = y1 + (y2-y1)*(x0-x1)/(x2-x1); + if( y0==y ) return 2; + if( y0nVertex-1; ii++){ + v = pointBeneathLine(x0,y0,p1->a[ii*2],p1->a[ii*2+1], + p1->a[ii*2+2],p1->a[ii*2+3]); + if( v==2 ) break; + cnt += v; + } + if( v!=2 ){ + v = pointBeneathLine(x0,y0,p1->a[ii*2],p1->a[ii*2+1], + p1->a[0],p1->a[1]); + } + if( v==2 ){ + sqlite3_result_int(context, 1); + }else if( ((v+cnt)&1)==0 ){ + sqlite3_result_int(context, 0); + }else{ + sqlite3_result_int(context, 2); + } + sqlite3_free(p1); +} -struct RbuUpdateStmt { - char *zMask; /* Copy of update mask used with pUpdate */ - sqlite3_stmt *pUpdate; /* Last update statement (or NULL) */ - RbuUpdateStmt *pNext; -}; +/* Forward declaration */ +static int geopolyOverlap(GeoPoly *p1, GeoPoly *p2); /* -** An iterator of this type is used to iterate through all objects in -** the target database that require updating. For each such table, the -** iterator visits, in order: +** SQL function: geopoly_within(P1,P2) ** -** * the table itself, -** * each index of the table (zero or more points to visit), and -** * a special "cleanup table" state. +** Return +2 if P1 and P2 are the same polygon +** Return +1 if P2 is contained within P1 +** Return 0 if any part of P2 is on the outside of P1 ** -** abIndexed: -** If the table has no indexes on it, abIndexed is set to NULL. Otherwise, -** it points to an array of flags nTblCol elements in size. The flag is -** set for each column that is either a part of the PK or a part of an -** index. Or clear otherwise. -** */ -struct RbuObjIter { - sqlite3_stmt *pTblIter; /* Iterate through tables */ - sqlite3_stmt *pIdxIter; /* Index iterator */ - int nTblCol; /* Size of azTblCol[] array */ - char **azTblCol; /* Array of unquoted target column names */ - char **azTblType; /* Array of target column types */ - int *aiSrcOrder; /* src table col -> target table col */ - u8 *abTblPk; /* Array of flags, set on target PK columns */ - u8 *abNotNull; /* Array of flags, set on NOT NULL columns */ - u8 *abIndexed; /* Array of flags, set on indexed & PK cols */ - int eType; /* Table type - an RBU_PK_XXX value */ +static void geopolyWithinFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0); + GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0); + if( p1 && p2 ){ + int x = geopolyOverlap(p1, p2); + if( x<0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_int(context, x==2 ? 1 : x==4 ? 2 : 0); + } + } + sqlite3_free(p1); + sqlite3_free(p2); +} - /* Output variables. zTbl==0 implies EOF. */ - int bCleanup; /* True in "cleanup" state */ - const char *zTbl; /* Name of target db table */ - const char *zDataTbl; /* Name of rbu db table (or null) */ - const char *zIdx; /* Name of target db index (or null) */ - int iTnum; /* Root page of current object */ - int iPkTnum; /* If eType==EXTERNAL, root of PK index */ - int bUnique; /* Current index is unique */ - int nIndex; /* Number of aux. indexes on table zTbl */ +/* Objects used by the overlap algorihm. */ +typedef struct GeoEvent GeoEvent; +typedef struct GeoSegment GeoSegment; +typedef struct GeoOverlap GeoOverlap; +struct GeoEvent { + double x; /* X coordinate at which event occurs */ + int eType; /* 0 for ADD, 1 for REMOVE */ + GeoSegment *pSeg; /* The segment to be added or removed */ + GeoEvent *pNext; /* Next event in the sorted list */ +}; +struct GeoSegment { + double C, B; /* y = C*x + B */ + double y; /* Current y value */ + float y0; /* Initial y value */ + unsigned char side; /* 1 for p1, 2 for p2 */ + unsigned int idx; /* Which segment within the side */ + GeoSegment *pNext; /* Next segment in a list sorted by y */ +}; +struct GeoOverlap { + GeoEvent *aEvent; /* Array of all events */ + GeoSegment *aSegment; /* Array of all segments */ + int nEvent; /* Number of events */ + int nSegment; /* Number of segments */ +}; + +/* +** Add a single segment and its associated events. +*/ +static void geopolyAddOneSegment( + GeoOverlap *p, + GeoCoord x0, + GeoCoord y0, + GeoCoord x1, + GeoCoord y1, + unsigned char side, + unsigned int idx +){ + GeoSegment *pSeg; + GeoEvent *pEvent; + if( x0==x1 ) return; /* Ignore vertical segments */ + if( x0>x1 ){ + GeoCoord t = x0; + x0 = x1; + x1 = t; + t = y0; + y0 = y1; + y1 = t; + } + pSeg = p->aSegment + p->nSegment; + p->nSegment++; + pSeg->C = (y1-y0)/(x1-x0); + pSeg->B = y1 - x1*pSeg->C; + pSeg->y0 = y0; + pSeg->side = side; + pSeg->idx = idx; + pEvent = p->aEvent + p->nEvent; + p->nEvent++; + pEvent->x = x0; + pEvent->eType = 0; + pEvent->pSeg = pSeg; + pEvent = p->aEvent + p->nEvent; + p->nEvent++; + pEvent->x = x1; + pEvent->eType = 1; + pEvent->pSeg = pSeg; +} + - /* Statements created by rbuObjIterPrepareAll() */ - int nCol; /* Number of columns in current object */ - sqlite3_stmt *pSelect; /* Source data */ - sqlite3_stmt *pInsert; /* Statement for INSERT operations */ - sqlite3_stmt *pDelete; /* Statement for DELETE ops */ - sqlite3_stmt *pTmpInsert; /* Insert into rbu_tmp_$zDataTbl */ - /* Last UPDATE used (for PK b-tree updates only), or NULL. */ - RbuUpdateStmt *pRbuUpdate; -}; +/* +** Insert all segments and events for polygon pPoly. +*/ +static void geopolyAddSegments( + GeoOverlap *p, /* Add segments to this Overlap object */ + GeoPoly *pPoly, /* Take all segments from this polygon */ + unsigned char side /* The side of pPoly */ +){ + unsigned int i; + GeoCoord *x; + for(i=0; i<(unsigned)pPoly->nVertex-1; i++){ + x = pPoly->a + (i*2); + geopolyAddOneSegment(p, x[0], x[1], x[2], x[3], side, i); + } + x = pPoly->a + (i*2); + geopolyAddOneSegment(p, x[0], x[1], pPoly->a[0], pPoly->a[1], side, i); +} /* -** Values for RbuObjIter.eType -** -** 0: Table does not exist (error) -** 1: Table has an implicit rowid. -** 2: Table has an explicit IPK column. -** 3: Table has an external PK index. -** 4: Table is WITHOUT ROWID. -** 5: Table is a virtual table. +** Merge two lists of sorted events by X coordinate */ -#define RBU_PK_NOTABLE 0 -#define RBU_PK_NONE 1 -#define RBU_PK_IPK 2 -#define RBU_PK_EXTERNAL 3 -#define RBU_PK_WITHOUT_ROWID 4 -#define RBU_PK_VTAB 5 - +static GeoEvent *geopolyEventMerge(GeoEvent *pLeft, GeoEvent *pRight){ + GeoEvent head, *pLast; + head.pNext = 0; + pLast = &head; + while( pRight && pLeft ){ + if( pRight->x <= pLeft->x ){ + pLast->pNext = pRight; + pLast = pRight; + pRight = pRight->pNext; + }else{ + pLast->pNext = pLeft; + pLast = pLeft; + pLeft = pLeft->pNext; + } + } + pLast->pNext = pRight ? pRight : pLeft; + return head.pNext; +} /* -** Within the RBU_STAGE_OAL stage, each call to sqlite3rbu_step() performs -** one of the following operations. +** Sort an array of nEvent event objects into a list. */ -#define RBU_INSERT 1 /* Insert on a main table b-tree */ -#define RBU_DELETE 2 /* Delete a row from a main table b-tree */ -#define RBU_REPLACE 3 /* Delete and then insert a row */ -#define RBU_IDX_DELETE 4 /* Delete a row from an aux. index b-tree */ -#define RBU_IDX_INSERT 5 /* Insert on an aux. index b-tree */ - -#define RBU_UPDATE 6 /* Update a row in a main table b-tree */ +static GeoEvent *geopolySortEventsByX(GeoEvent *aEvent, int nEvent){ + int mx = 0; + int i, j; + GeoEvent *p; + GeoEvent *a[50]; + for(i=0; ipNext = 0; + for(j=0; j=mx ) mx = j+1; + } + p = 0; + for(i=0; iy - pLeft->y; + if( r==0.0 ) r = pRight->C - pLeft->C; + if( r<0.0 ){ + pLast->pNext = pRight; + pLast = pRight; + pRight = pRight->pNext; + }else{ + pLast->pNext = pLeft; + pLast = pLeft; + pLeft = pLeft->pNext; + } + } + pLast->pNext = pRight ? pRight : pLeft; + return head.pNext; +} /* -** RBU handle. -** -** nPhaseOneStep: -** If the RBU database contains an rbu_count table, this value is set to -** a running estimate of the number of b-tree operations required to -** finish populating the *-oal file. This allows the sqlite3_bp_progress() -** API to calculate the permyriadage progress of populating the *-oal file -** using the formula: -** -** permyriadage = (10000 * nProgress) / nPhaseOneStep -** -** nPhaseOneStep is initialized to the sum of: -** -** nRow * (nIndex + 1) -** -** for all source tables in the RBU database, where nRow is the number -** of rows in the source table and nIndex the number of indexes on the -** corresponding target database table. -** -** This estimate is accurate if the RBU update consists entirely of -** INSERT operations. However, it is inaccurate if: -** -** * the RBU update contains any UPDATE operations. If the PK specified -** for an UPDATE operation does not exist in the target table, then -** no b-tree operations are required on index b-trees. Or if the -** specified PK does exist, then (nIndex*2) such operations are -** required (one delete and one insert on each index b-tree). -** -** * the RBU update contains any DELETE operations for which the specified -** PK does not exist. In this case no operations are required on index -** b-trees. -** -** * the RBU update contains REPLACE operations. These are similar to -** UPDATE operations. -** -** nPhaseOneStep is updated to account for the conditions above during the -** first pass of each source table. The updated nPhaseOneStep value is -** stored in the rbu_state table if the RBU update is suspended. +** Sort a list of GeoSegments in order of increasing Y and in the event of +** a tie, increasing C (slope). */ -struct sqlite3rbu { - int eStage; /* Value of RBU_STATE_STAGE field */ - sqlite3 *dbMain; /* target database handle */ - sqlite3 *dbRbu; /* rbu database handle */ - char *zTarget; /* Path to target db */ - char *zRbu; /* Path to rbu db */ - char *zState; /* Path to state db (or NULL if zRbu) */ - char zStateDb[5]; /* Db name for state ("stat" or "main") */ - int rc; /* Value returned by last rbu_step() call */ - char *zErrmsg; /* Error message if rc!=SQLITE_OK */ - int nStep; /* Rows processed for current object */ - int nProgress; /* Rows processed for all objects */ - RbuObjIter objiter; /* Iterator for skipping through tbl/idx */ - const char *zVfsName; /* Name of automatically created rbu vfs */ - rbu_file *pTargetFd; /* File handle open on target db */ - int nPagePerSector; /* Pages per sector for pTargetFd */ - i64 iOalSz; - i64 nPhaseOneStep; +static GeoSegment *geopolySortSegmentsByYAndC(GeoSegment *pList){ + int mx = 0; + int i; + GeoSegment *p; + GeoSegment *a[50]; + while( pList ){ + p = pList; + pList = pList->pNext; + p->pNext = 0; + for(i=0; i=mx ) mx = i+1; + } + p = 0; + for(i=0; inVertex + p2->nVertex + 2; + GeoOverlap *p; + int nByte; + GeoEvent *pThisEvent; + double rX; + int rc = 0; + int needSort = 0; + GeoSegment *pActive = 0; + GeoSegment *pSeg; + unsigned char aOverlap[4]; + + nByte = sizeof(GeoEvent)*nVertex*2 + + sizeof(GeoSegment)*nVertex + + sizeof(GeoOverlap); + p = sqlite3_malloc( nByte ); + if( p==0 ) return -1; + p->aEvent = (GeoEvent*)&p[1]; + p->aSegment = (GeoSegment*)&p->aEvent[nVertex*2]; + p->nEvent = p->nSegment = 0; + geopolyAddSegments(p, p1, 1); + geopolyAddSegments(p, p2, 2); + pThisEvent = geopolySortEventsByX(p->aEvent, p->nEvent); + rX = pThisEvent->x==0.0 ? -1.0 : 0.0; + memset(aOverlap, 0, sizeof(aOverlap)); + while( pThisEvent ){ + if( pThisEvent->x!=rX ){ + GeoSegment *pPrev = 0; + int iMask = 0; + GEODEBUG(("Distinct X: %g\n", pThisEvent->x)); + rX = pThisEvent->x; + if( needSort ){ + GEODEBUG(("SORT\n")); + pActive = geopolySortSegmentsByYAndC(pActive); + needSort = 0; + } + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + if( pPrev ){ + if( pPrev->y!=pSeg->y ){ + GEODEBUG(("MASK: %d\n", iMask)); + aOverlap[iMask] = 1; + } + } + iMask ^= pSeg->side; + pPrev = pSeg; + } + pPrev = 0; + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + double y = pSeg->C*rX + pSeg->B; + GEODEBUG(("Segment %d.%d %g->%g\n", pSeg->side, pSeg->idx, pSeg->y, y)); + pSeg->y = y; + if( pPrev ){ + if( pPrev->y>pSeg->y && pPrev->side!=pSeg->side ){ + rc = 1; + GEODEBUG(("Crossing: %d.%d and %d.%d\n", + pPrev->side, pPrev->idx, + pSeg->side, pSeg->idx)); + goto geopolyOverlapDone; + }else if( pPrev->y!=pSeg->y ){ + GEODEBUG(("MASK: %d\n", iMask)); + aOverlap[iMask] = 1; + } + } + iMask ^= pSeg->side; + pPrev = pSeg; + } + } + GEODEBUG(("%s %d.%d C=%g B=%g\n", + pThisEvent->eType ? "RM " : "ADD", + pThisEvent->pSeg->side, pThisEvent->pSeg->idx, + pThisEvent->pSeg->C, + pThisEvent->pSeg->B)); + if( pThisEvent->eType==0 ){ + /* Add a segment */ + pSeg = pThisEvent->pSeg; + pSeg->y = pSeg->y0; + pSeg->pNext = pActive; + pActive = pSeg; + needSort = 1; + }else{ + /* Remove a segment */ + if( pActive==pThisEvent->pSeg ){ + pActive = pActive->pNext; + }else{ + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + if( pSeg->pNext==pThisEvent->pSeg ){ + pSeg->pNext = pSeg->pNext->pNext; + break; + } + } + } + } + pThisEvent = pThisEvent->pNext; + } + if( aOverlap[3]==0 ){ + rc = 0; + }else if( aOverlap[1]!=0 && aOverlap[2]==0 ){ + rc = 3; + }else if( aOverlap[1]==0 && aOverlap[2]!=0 ){ + rc = 2; + }else if( aOverlap[1]==0 && aOverlap[2]==0 ){ + rc = 4; + }else{ + rc = 1; + } - /* Used in RBU vacuum mode only */ - int nRbu; /* Number of RBU VFS in the stack */ - rbu_file *pRbuFd; /* Fd for main db of dbRbu */ -}; +geopolyOverlapDone: + sqlite3_free(p); + return rc; +} /* -** An rbu VFS is implemented using an instance of this structure. +** SQL function: geopoly_overlap(P1,P2) ** -** Variable pRbu is only non-NULL for automatically created RBU VFS objects. -** It is NULL for RBU VFS objects created explicitly using -** sqlite3rbu_create_vfs(). It is used to track the total amount of temp -** space used by the RBU handle. +** Determine whether or not P1 and P2 overlap. Return value: +** +** 0 The two polygons are disjoint +** 1 They overlap +** 2 P1 is completely contained within P2 +** 3 P2 is completely contained within P1 +** 4 P1 and P2 are the same polygon +** NULL Either P1 or P2 or both are not valid polygons */ -struct rbu_vfs { - sqlite3_vfs base; /* rbu VFS shim methods */ - sqlite3_vfs *pRealVfs; /* Underlying VFS */ - sqlite3_mutex *mutex; /* Mutex to protect pMain */ - sqlite3rbu *pRbu; /* Owner RBU object */ - rbu_file *pMain; /* Linked list of main db files */ -}; +static void geopolyOverlapFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0); + GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0); + if( p1 && p2 ){ + int x = geopolyOverlap(p1, p2); + if( x<0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_int(context, x); + } + } + sqlite3_free(p1); + sqlite3_free(p2); +} /* -** Each file opened by an rbu VFS is represented by an instance of -** the following structure. +** Enable or disable debugging output +*/ +static void geopolyDebugFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ +#ifdef GEOPOLY_ENABLE_DEBUG + geo_debug = sqlite3_value_int(argv[0]); +#endif +} + +/* +** This function is the implementation of both the xConnect and xCreate +** methods of the geopoly virtual table. ** -** If this is a temporary file (pRbu!=0 && flags&DELETE_ON_CLOSE), variable -** "sz" is set to the current size of the database file. +** argv[0] -> module name +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> column names... */ -struct rbu_file { - sqlite3_file base; /* sqlite3_file methods */ - sqlite3_file *pReal; /* Underlying file handle */ - rbu_vfs *pRbuVfs; /* Pointer to the rbu_vfs object */ - sqlite3rbu *pRbu; /* Pointer to rbu object (rbu target only) */ - i64 sz; /* Size of file in bytes (temp only) */ +static int geopolyInit( + sqlite3 *db, /* Database connection */ + void *pAux, /* One of the RTREE_COORD_* constants */ + int argc, const char *const*argv, /* Parameters to CREATE TABLE statement */ + sqlite3_vtab **ppVtab, /* OUT: New virtual table */ + char **pzErr, /* OUT: Error message, if any */ + int isCreate /* True for xCreate, false for xConnect */ +){ + int rc = SQLITE_OK; + Rtree *pRtree; + int nDb; /* Length of string argv[1] */ + int nName; /* Length of string argv[2] */ + sqlite3_str *pSql; + char *zSql; + int ii; - int openFlags; /* Flags this file was opened with */ - u32 iCookie; /* Cookie value for main db files */ - u8 iWriteVer; /* "write-version" value for main db files */ - u8 bNolock; /* True to fail EXCLUSIVE locks */ + sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); - int nShm; /* Number of entries in apShm[] array */ - char **apShm; /* Array of mmap'd *-shm regions */ - char *zDel; /* Delete this when closing file */ + /* Allocate the sqlite3_vtab structure */ + nDb = (int)strlen(argv[1]); + nName = (int)strlen(argv[2]); + pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2); + if( !pRtree ){ + return SQLITE_NOMEM; + } + memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2); + pRtree->nBusy = 1; + pRtree->base.pModule = &rtreeModule; + pRtree->zDb = (char *)&pRtree[1]; + pRtree->zName = &pRtree->zDb[nDb+1]; + pRtree->eCoordType = RTREE_COORD_REAL32; + pRtree->nDim = 2; + pRtree->nDim2 = 4; + memcpy(pRtree->zDb, argv[1], nDb); + memcpy(pRtree->zName, argv[2], nName); - const char *zWal; /* Wal filename for this main db file */ - rbu_file *pWalFd; /* Wal file descriptor for this main db */ - rbu_file *pMainNext; /* Next MAIN_DB file */ -}; -/* -** True for an RBU vacuum handle, or false otherwise. + /* Create/Connect to the underlying relational database schema. If + ** that is successful, call sqlite3_declare_vtab() to configure + ** the r-tree table schema. + */ + pSql = sqlite3_str_new(db); + sqlite3_str_appendf(pSql, "CREATE TABLE x(_shape"); + pRtree->nAux = 1; /* Add one for _shape */ + pRtree->nAuxNotNull = 1; /* The _shape column is always not-null */ + for(ii=3; iinAux++; + sqlite3_str_appendf(pSql, ",%s", argv[ii]); + } + sqlite3_str_appendf(pSql, ");"); + zSql = sqlite3_str_finish(pSql); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else if( SQLITE_OK!=(rc = sqlite3_declare_vtab(db, zSql)) ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + } + sqlite3_free(zSql); + if( rc ) goto geopolyInit_fail; + pRtree->nBytesPerCell = 8 + pRtree->nDim2*4; + + /* Figure out the node size to use. */ + rc = getNodeSize(db, pRtree, isCreate, pzErr); + if( rc ) goto geopolyInit_fail; + rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate); + if( rc ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + goto geopolyInit_fail; + } + + *ppVtab = (sqlite3_vtab *)pRtree; + return SQLITE_OK; + +geopolyInit_fail: + if( rc==SQLITE_OK ) rc = SQLITE_ERROR; + assert( *ppVtab==0 ); + assert( pRtree->nBusy==1 ); + rtreeRelease(pRtree); + return rc; +} + + +/* +** GEOPOLY virtual table module xCreate method. */ -#define rbuIsVacuum(p) ((p)->zTarget==0) +static int geopolyCreate( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return geopolyInit(db, pAux, argc, argv, ppVtab, pzErr, 1); +} + +/* +** GEOPOLY virtual table module xConnect method. +*/ +static int geopolyConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return geopolyInit(db, pAux, argc, argv, ppVtab, pzErr, 0); +} -/************************************************************************* -** The following three functions, found below: +/* +** GEOPOLY virtual table module xFilter method. ** -** rbuDeltaGetInt() -** rbuDeltaChecksum() -** rbuDeltaApply() +** Query plans: ** -** are lifted from the fossil source code (http://fossil-scm.org). They -** are used to implement the scalar SQL function rbu_fossil_delta(). -*/ +** 1 rowid lookup +** 2 search for objects overlapping the same bounding box +** that contains polygon argv[0] +** 3 search for objects overlapping the same bounding box +** that contains polygon argv[0] +** 4 full table scan +*/ +static int geopolyFilter( + sqlite3_vtab_cursor *pVtabCursor, /* The cursor to initialize */ + int idxNum, /* Query plan */ + const char *idxStr, /* Not Used */ + int argc, sqlite3_value **argv /* Parameters to the query plan */ +){ + Rtree *pRtree = (Rtree *)pVtabCursor->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + RtreeNode *pRoot = 0; + int rc = SQLITE_OK; + int iCell = 0; + sqlite3_stmt *pStmt; + + rtreeReference(pRtree); + + /* Reset the cursor to the same state as rtreeOpen() leaves it in. */ + freeCursorConstraints(pCsr); + sqlite3_free(pCsr->aPoint); + pStmt = pCsr->pReadAux; + memset(pCsr, 0, sizeof(RtreeCursor)); + pCsr->base.pVtab = (sqlite3_vtab*)pRtree; + pCsr->pReadAux = pStmt; + + pCsr->iStrategy = idxNum; + if( idxNum==1 ){ + /* Special case - lookup by rowid. */ + RtreeNode *pLeaf; /* Leaf on which the required cell resides */ + RtreeSearchPoint *p; /* Search point for the leaf */ + i64 iRowid = sqlite3_value_int64(argv[0]); + i64 iNode = 0; + rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode); + if( rc==SQLITE_OK && pLeaf!=0 ){ + p = rtreeSearchPointNew(pCsr, RTREE_ZERO, 0); + assert( p!=0 ); /* Always returns pCsr->sPoint */ + pCsr->aNode[0] = pLeaf; + p->id = iNode; + p->eWithin = PARTLY_WITHIN; + rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &iCell); + p->iCell = (u8)iCell; + RTREE_QUEUE_TRACE(pCsr, "PUSH-F1:"); + }else{ + pCsr->atEOF = 1; + } + }else{ + /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array + ** with the configured constraints. + */ + rc = nodeAcquire(pRtree, 1, 0, &pRoot); + if( rc==SQLITE_OK && idxNum<=3 ){ + RtreeCoord bbox[4]; + RtreeConstraint *p; + assert( argc==1 ); + geopolyBBox(0, argv[0], bbox, &rc); + if( rc ){ + goto geopoly_filter_end; + } + pCsr->aConstraint = p = sqlite3_malloc(sizeof(RtreeConstraint)*4); + pCsr->nConstraint = 4; + if( p==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*4); + memset(pCsr->anQueue, 0, sizeof(u32)*(pRtree->iDepth + 1)); + if( idxNum==2 ){ + /* Overlap query */ + p->op = 'B'; + p->iCoord = 0; + p->u.rValue = bbox[1].f; + p++; + p->op = 'D'; + p->iCoord = 1; + p->u.rValue = bbox[0].f; + p++; + p->op = 'B'; + p->iCoord = 2; + p->u.rValue = bbox[3].f; + p++; + p->op = 'D'; + p->iCoord = 3; + p->u.rValue = bbox[2].f; + }else{ + /* Within query */ + p->op = 'D'; + p->iCoord = 0; + p->u.rValue = bbox[0].f; + p++; + p->op = 'B'; + p->iCoord = 1; + p->u.rValue = bbox[1].f; + p++; + p->op = 'D'; + p->iCoord = 2; + p->u.rValue = bbox[2].f; + p++; + p->op = 'B'; + p->iCoord = 3; + p->u.rValue = bbox[3].f; + } + } + } + if( rc==SQLITE_OK ){ + RtreeSearchPoint *pNew; + pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, (u8)(pRtree->iDepth+1)); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + goto geopoly_filter_end; + } + pNew->id = 1; + pNew->iCell = 0; + pNew->eWithin = PARTLY_WITHIN; + assert( pCsr->bPoint==1 ); + pCsr->aNode[0] = pRoot; + pRoot = 0; + RTREE_QUEUE_TRACE(pCsr, "PUSH-Fm:"); + rc = rtreeStepToLeaf(pCsr); + } + } + +geopoly_filter_end: + nodeRelease(pRtree, pRoot); + rtreeRelease(pRtree); + return rc; +} /* -** Read bytes from *pz and convert them into a positive integer. When -** finished, leave *pz pointing to the first character past the end of -** the integer. The *pLen parameter holds the length of the string -** in *pz and is decremented once for each character in the integer. +** Rtree virtual table module xBestIndex method. There are three +** table scan strategies to choose from (in order from most to +** least desirable): +** +** idxNum idxStr Strategy +** ------------------------------------------------ +** 1 "rowid" Direct lookup by rowid. +** 2 "rtree" R-tree overlap query using geopoly_overlap() +** 3 "rtree" R-tree within query using geopoly_within() +** 4 "fullscan" full-table scan. +** ------------------------------------------------ */ -static unsigned int rbuDeltaGetInt(const char **pz, int *pLen){ - static const signed char zValue[] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, - -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, 36, - -1, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, 63, -1, - }; - unsigned int v = 0; - int c; - unsigned char *z = (unsigned char*)*pz; - unsigned char *zStart = z; - while( (c = zValue[0x7f&*(z++)])>=0 ){ - v = (v<<6) + c; +static int geopolyBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ + int ii; + int iRowidTerm = -1; + int iFuncTerm = -1; + int idxNum = 0; + + for(ii=0; iinConstraint; ii++){ + struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii]; + if( !p->usable ) continue; + if( p->iColumn<0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){ + iRowidTerm = ii; + break; + } + if( p->iColumn==0 && p->op>=SQLITE_INDEX_CONSTRAINT_FUNCTION ){ + /* p->op==SQLITE_INDEX_CONSTRAINT_FUNCTION for geopoly_overlap() + ** p->op==(SQLITE_INDEX_CONTRAINT_FUNCTION+1) for geopoly_within(). + ** See geopolyFindFunction() */ + iFuncTerm = ii; + idxNum = p->op - SQLITE_INDEX_CONSTRAINT_FUNCTION + 2; + } } - z--; - *pLen -= z - zStart; - *pz = (char*)z; - return v; -} -#if RBU_ENABLE_DELTA_CKSUM -/* -** Compute a 32-bit checksum on the N-byte buffer. Return the result. -*/ -static unsigned int rbuDeltaChecksum(const char *zIn, size_t N){ - const unsigned char *z = (const unsigned char *)zIn; - unsigned sum0 = 0; - unsigned sum1 = 0; - unsigned sum2 = 0; - unsigned sum3 = 0; - while(N >= 16){ - sum0 += ((unsigned)z[0] + z[4] + z[8] + z[12]); - sum1 += ((unsigned)z[1] + z[5] + z[9] + z[13]); - sum2 += ((unsigned)z[2] + z[6] + z[10]+ z[14]); - sum3 += ((unsigned)z[3] + z[7] + z[11]+ z[15]); - z += 16; - N -= 16; + if( iRowidTerm>=0 ){ + pIdxInfo->idxNum = 1; + pIdxInfo->idxStr = "rowid"; + pIdxInfo->aConstraintUsage[iRowidTerm].argvIndex = 1; + pIdxInfo->aConstraintUsage[iRowidTerm].omit = 1; + pIdxInfo->estimatedCost = 30.0; + pIdxInfo->estimatedRows = 1; + pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE; + return SQLITE_OK; } - while(N >= 4){ - sum0 += z[0]; - sum1 += z[1]; - sum2 += z[2]; - sum3 += z[3]; - z += 4; - N -= 4; + if( iFuncTerm>=0 ){ + pIdxInfo->idxNum = idxNum; + pIdxInfo->idxStr = "rtree"; + pIdxInfo->aConstraintUsage[iFuncTerm].argvIndex = 1; + pIdxInfo->aConstraintUsage[iFuncTerm].omit = 0; + pIdxInfo->estimatedCost = 300.0; + pIdxInfo->estimatedRows = 10; + return SQLITE_OK; } - sum3 += (sum2 << 8) + (sum1 << 16) + (sum0 << 24); - switch(N){ - case 3: sum3 += (z[2] << 8); - case 2: sum3 += (z[1] << 16); - case 1: sum3 += (z[0] << 24); - default: ; + pIdxInfo->idxNum = 4; + pIdxInfo->idxStr = "fullscan"; + pIdxInfo->estimatedCost = 3000000.0; + pIdxInfo->estimatedRows = 100000; + return SQLITE_OK; +} + + +/* +** GEOPOLY virtual table module xColumn method. +*/ +static int geopolyColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ + Rtree *pRtree = (Rtree *)cur->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)cur; + RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); + int rc = SQLITE_OK; + RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); + + if( rc ) return rc; + if( p==0 ) return SQLITE_OK; + if( i==0 && sqlite3_vtab_nochange(ctx) ) return SQLITE_OK; + if( i<=pRtree->nAux ){ + if( !pCsr->bAuxValid ){ + if( pCsr->pReadAux==0 ){ + rc = sqlite3_prepare_v3(pRtree->db, pRtree->zReadAuxSql, -1, 0, + &pCsr->pReadAux, 0); + if( rc ) return rc; + } + sqlite3_bind_int64(pCsr->pReadAux, 1, + nodeGetRowid(pRtree, pNode, p->iCell)); + rc = sqlite3_step(pCsr->pReadAux); + if( rc==SQLITE_ROW ){ + pCsr->bAuxValid = 1; + }else{ + sqlite3_reset(pCsr->pReadAux); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + return rc; + } + } + sqlite3_result_value(ctx, sqlite3_column_value(pCsr->pReadAux, i+2)); } - return sum3; + return SQLITE_OK; } -#endif + /* -** Apply a delta. +** The xUpdate method for GEOPOLY module virtual tables. ** -** The output buffer should be big enough to hold the whole output -** file and a NUL terminator at the end. The delta_output_size() -** routine will determine this size for you. +** For DELETE: ** -** The delta string should be null-terminated. But the delta string -** may contain embedded NUL characters (if the input and output are -** binary files) so we also have to pass in the length of the delta in -** the lenDelta parameter. +** argv[0] = the rowid to be deleted ** -** This function returns the size of the output file in bytes (excluding -** the final NUL terminator character). Except, if the delta string is -** malformed or intended for use with a source file other than zSrc, -** then this routine returns -1. +** For INSERT: ** -** Refer to the delta_create() documentation above for a description -** of the delta file format. +** argv[0] = SQL NULL +** argv[1] = rowid to insert, or an SQL NULL to select automatically +** argv[2] = _shape column +** argv[3] = first application-defined column.... +** +** For UPDATE: +** +** argv[0] = rowid to modify. Never NULL +** argv[1] = rowid after the change. Never NULL +** argv[2] = new value for _shape +** argv[3] = new value for first application-defined column.... */ -static int rbuDeltaApply( - const char *zSrc, /* The source or pattern file */ - int lenSrc, /* Length of the source file */ - const char *zDelta, /* Delta to apply to the pattern */ - int lenDelta, /* Length of the delta */ - char *zOut /* Write the output into this preallocated buffer */ +static int geopolyUpdate( + sqlite3_vtab *pVtab, + int nData, + sqlite3_value **aData, + sqlite_int64 *pRowid ){ - unsigned int limit; - unsigned int total = 0; -#if RBU_ENABLE_DELTA_CKSUM - char *zOrigOut = zOut; -#endif + Rtree *pRtree = (Rtree *)pVtab; + int rc = SQLITE_OK; + RtreeCell cell; /* New cell to insert if nData>1 */ + i64 oldRowid; /* The old rowid */ + int oldRowidValid; /* True if oldRowid is valid */ + i64 newRowid; /* The new rowid */ + int newRowidValid; /* True if newRowid is valid */ + int coordChange = 0; /* Change in coordinates */ - limit = rbuDeltaGetInt(&zDelta, &lenDelta); - if( *zDelta!='\n' ){ - /* ERROR: size integer not terminated by "\n" */ - return -1; + if( pRtree->nNodeRef ){ + /* Unable to write to the btree while another cursor is reading from it, + ** since the write might do a rebalance which would disrupt the read + ** cursor. */ + return SQLITE_LOCKED_VTAB; } - zDelta++; lenDelta--; - while( *zDelta && lenDelta>0 ){ - unsigned int cnt, ofst; - cnt = rbuDeltaGetInt(&zDelta, &lenDelta); - switch( zDelta[0] ){ - case '@': { - zDelta++; lenDelta--; - ofst = rbuDeltaGetInt(&zDelta, &lenDelta); - if( lenDelta>0 && zDelta[0]!=',' ){ - /* ERROR: copy command not terminated by ',' */ - return -1; - } - zDelta++; lenDelta--; - total += cnt; - if( total>limit ){ - /* ERROR: copy exceeds output file size */ - return -1; - } - if( (int)(ofst+cnt) > lenSrc ){ - /* ERROR: copy extends past end of input */ - return -1; - } - memcpy(zOut, &zSrc[ofst], cnt); - zOut += cnt; - break; - } - case ':': { - zDelta++; lenDelta--; - total += cnt; - if( total>limit ){ - /* ERROR: insert command gives an output larger than predicted */ - return -1; - } - if( (int)cnt>lenDelta ){ - /* ERROR: insert count exceeds size of delta */ - return -1; - } - memcpy(zOut, zDelta, cnt); - zOut += cnt; - zDelta += cnt; - lenDelta -= cnt; - break; + rtreeReference(pRtree); + assert(nData>=1); + + oldRowidValid = sqlite3_value_type(aData[0])!=SQLITE_NULL;; + oldRowid = oldRowidValid ? sqlite3_value_int64(aData[0]) : 0; + newRowidValid = nData>1 && sqlite3_value_type(aData[1])!=SQLITE_NULL; + newRowid = newRowidValid ? sqlite3_value_int64(aData[1]) : 0; + cell.iRowid = newRowid; + + if( nData>1 /* not a DELETE */ + && (!oldRowidValid /* INSERT */ + || !sqlite3_value_nochange(aData[2]) /* UPDATE _shape */ + || oldRowid!=newRowid) /* Rowid change */ + ){ + geopolyBBox(0, aData[2], cell.aCoord, &rc); + if( rc ){ + if( rc==SQLITE_ERROR ){ + pVtab->zErrMsg = + sqlite3_mprintf("_shape does not contain a valid polygon"); } - case ';': { - zDelta++; lenDelta--; - zOut[0] = 0; -#if RBU_ENABLE_DELTA_CKSUM - if( cnt!=rbuDeltaChecksum(zOrigOut, total) ){ - /* ERROR: bad checksum */ - return -1; - } -#endif - if( total!=limit ){ - /* ERROR: generated size does not match predicted size */ - return -1; + goto geopoly_update_end; + } + coordChange = 1; + + /* If a rowid value was supplied, check if it is already present in + ** the table. If so, the constraint has failed. */ + if( newRowidValid && (!oldRowidValid || oldRowid!=newRowid) ){ + int steprc; + sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); + steprc = sqlite3_step(pRtree->pReadRowid); + rc = sqlite3_reset(pRtree->pReadRowid); + if( SQLITE_ROW==steprc ){ + if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){ + rc = rtreeDeleteRowid(pRtree, cell.iRowid); + }else{ + rc = rtreeConstraintError(pRtree, 0); } - return total; } - default: { - /* ERROR: unknown delta operator */ - return -1; + } + } + + /* If aData[0] is not an SQL NULL value, it is the rowid of a + ** record to delete from the r-tree table. The following block does + ** just that. + */ + if( rc==SQLITE_OK && (nData==1 || (coordChange && oldRowidValid)) ){ + rc = rtreeDeleteRowid(pRtree, oldRowid); + } + + /* If the aData[] array contains more than one element, elements + ** (aData[2]..aData[argc-1]) contain a new record to insert into + ** the r-tree structure. + */ + if( rc==SQLITE_OK && nData>1 && coordChange ){ + /* Insert the new record into the r-tree */ + RtreeNode *pLeaf = 0; + if( !newRowidValid ){ + rc = rtreeNewRowid(pRtree, &cell.iRowid); + } + *pRowid = cell.iRowid; + if( rc==SQLITE_OK ){ + rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf); + } + if( rc==SQLITE_OK ){ + int rc2; + pRtree->iReinsertHeight = -1; + rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); + rc2 = nodeRelease(pRtree, pLeaf); + if( rc==SQLITE_OK ){ + rc = rc2; } } } - /* ERROR: unterminated delta */ - return -1; -} -static int rbuDeltaOutputSize(const char *zDelta, int lenDelta){ - int size; - size = rbuDeltaGetInt(&zDelta, &lenDelta); - if( *zDelta!='\n' ){ - /* ERROR: size integer not terminated by "\n" */ - return -1; + /* Change the data */ + if( rc==SQLITE_OK && nData>1 ){ + sqlite3_stmt *pUp = pRtree->pWriteAux; + int jj; + int nChange = 0; + sqlite3_bind_int64(pUp, 1, cell.iRowid); + assert( pRtree->nAux>=1 ); + if( sqlite3_value_nochange(aData[2]) ){ + sqlite3_bind_null(pUp, 2); + }else{ + sqlite3_bind_value(pUp, 2, aData[2]); + nChange = 1; + } + for(jj=1; jjnAux; jj++){ + nChange++; + sqlite3_bind_value(pUp, jj+2, aData[jj+2]); + } + if( nChange ){ + sqlite3_step(pUp); + rc = sqlite3_reset(pUp); + } } - return size; -} -/* -** End of code taken from fossil. -*************************************************************************/ +geopoly_update_end: + rtreeRelease(pRtree); + return rc; +} /* -** Implementation of SQL scalar function rbu_fossil_delta(). -** -** This function applies a fossil delta patch to a blob. Exactly two -** arguments must be passed to this function. The first is the blob to -** patch and the second the patch to apply. If no error occurs, this -** function returns the patched blob. +** Report that geopoly_overlap() is an overloaded function suitable +** for use in xBestIndex. */ -static void rbuFossilDeltaFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv +static int geopolyFindFunction( + sqlite3_vtab *pVtab, + int nArg, + const char *zName, + void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), + void **ppArg ){ - const char *aDelta; - int nDelta; - const char *aOrig; - int nOrig; - - int nOut; - int nOut2; - char *aOut; + if( sqlite3_stricmp(zName, "geopoly_overlap")==0 ){ + *pxFunc = geopolyOverlapFunc; + *ppArg = 0; + return SQLITE_INDEX_CONSTRAINT_FUNCTION; + } + if( sqlite3_stricmp(zName, "geopoly_within")==0 ){ + *pxFunc = geopolyWithinFunc; + *ppArg = 0; + return SQLITE_INDEX_CONSTRAINT_FUNCTION+1; + } + return 0; +} - assert( argc==2 ); - nOrig = sqlite3_value_bytes(argv[0]); - aOrig = (const char*)sqlite3_value_blob(argv[0]); - nDelta = sqlite3_value_bytes(argv[1]); - aDelta = (const char*)sqlite3_value_blob(argv[1]); +static sqlite3_module geopolyModule = { + 2, /* iVersion */ + geopolyCreate, /* xCreate - create a table */ + geopolyConnect, /* xConnect - connect to an existing table */ + geopolyBestIndex, /* xBestIndex - Determine search strategy */ + rtreeDisconnect, /* xDisconnect - Disconnect from a table */ + rtreeDestroy, /* xDestroy - Drop a table */ + rtreeOpen, /* xOpen - open a cursor */ + rtreeClose, /* xClose - close a cursor */ + geopolyFilter, /* xFilter - configure scan constraints */ + rtreeNext, /* xNext - advance a cursor */ + rtreeEof, /* xEof */ + geopolyColumn, /* xColumn - read data */ + rtreeRowid, /* xRowid - read data */ + geopolyUpdate, /* xUpdate - write data */ + rtreeBeginTransaction, /* xBegin - begin transaction */ + rtreeEndTransaction, /* xSync - sync transaction */ + rtreeEndTransaction, /* xCommit - commit transaction */ + rtreeEndTransaction, /* xRollback - rollback transaction */ + geopolyFindFunction, /* xFindFunction - function overloading */ + rtreeRename, /* xRename - rename the table */ + rtreeSavepoint, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ +}; - /* Figure out the size of the output */ - nOut = rbuDeltaOutputSize(aDelta, nDelta); - if( nOut<0 ){ - sqlite3_result_error(context, "corrupt fossil delta", -1); - return; +static int sqlite3_geopoly_init(sqlite3 *db){ + int rc = SQLITE_OK; + static const struct { + void (*xFunc)(sqlite3_context*,int,sqlite3_value**); + int nArg; + const char *zName; + } aFunc[] = { + { geopolyAreaFunc, 1, "geopoly_area" }, + { geopolyBlobFunc, 1, "geopoly_blob" }, + { geopolyJsonFunc, 1, "geopoly_json" }, + { geopolySvgFunc, -1, "geopoly_svg" }, + { geopolyWithinFunc, 2, "geopoly_within" }, + { geopolyContainsPointFunc, 3, "geopoly_contains_point" }, + { geopolyOverlapFunc, 2, "geopoly_overlap" }, + { geopolyDebugFunc, 1, "geopoly_debug" }, + { geopolyBBoxFunc, 1, "geopoly_bbox" }, + { geopolyXformFunc, 7, "geopoly_xform" }, + }; + static const struct { + void (*xStep)(sqlite3_context*,int,sqlite3_value**); + void (*xFinal)(sqlite3_context*); + const char *zName; + } aAgg[] = { + { geopolyBBoxStep, geopolyBBoxFinal, "geopoly_group_bbox" }, + }; + int i; + for(i=0; ixDestructor ) pInfo->xDestructor(pInfo->pContext); + sqlite3_free(p); +} + +/* +** This routine frees the BLOB that is returned by geomCallback(). +*/ +static void rtreeMatchArgFree(void *pArg){ + int i; + RtreeMatchArg *p = (RtreeMatchArg*)pArg; + for(i=0; inParam; i++){ + sqlite3_value_free(p->apSqlParam[i]); } - return rc; + sqlite3_free(p); } /* -** Unless it is NULL, argument zSql points to a buffer allocated using -** sqlite3_malloc containing an SQL statement. This function prepares the SQL -** statement against database db and frees the buffer. If statement -** compilation is successful, *ppStmt is set to point to the new statement -** handle and SQLITE_OK is returned. +** Each call to sqlite3_rtree_geometry_callback() or +** sqlite3_rtree_query_callback() creates an ordinary SQLite +** scalar function that is implemented by this routine. ** -** Otherwise, if an error occurs, *ppStmt is set to NULL and an error code -** returned. In this case, *pzErrmsg may also be set to point to an error -** message. It is the responsibility of the caller to free this error message -** buffer using sqlite3_free(). +** All this function does is construct an RtreeMatchArg object that +** contains the geometry-checking callback routines and a list of +** parameters to this function, then return that RtreeMatchArg object +** as a BLOB. ** -** If argument zSql is NULL, this function assumes that an OOM has occurred. -** In this case SQLITE_NOMEM is returned and *ppStmt set to NULL. +** The R-Tree MATCH operator will read the returned BLOB, deserialize +** the RtreeMatchArg object, and use the RtreeMatchArg object to figure +** out which elements of the R-Tree should be returned by the query. */ -static int prepareFreeAndCollectError( - sqlite3 *db, - sqlite3_stmt **ppStmt, - char **pzErrmsg, - char *zSql -){ - int rc; - assert( *pzErrmsg==0 ); - if( zSql==0 ){ - rc = SQLITE_NOMEM; - *ppStmt = 0; +static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){ + RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx); + RtreeMatchArg *pBlob; + int nBlob; + int memErr = 0; + + nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(RtreeDValue) + + nArg*sizeof(sqlite3_value*); + pBlob = (RtreeMatchArg *)sqlite3_malloc(nBlob); + if( !pBlob ){ + sqlite3_result_error_nomem(ctx); }else{ - rc = prepareAndCollectError(db, ppStmt, pzErrmsg, zSql); - sqlite3_free(zSql); + int i; + pBlob->iSize = nBlob; + pBlob->cb = pGeomCtx[0]; + pBlob->apSqlParam = (sqlite3_value**)&pBlob->aParam[nArg]; + pBlob->nParam = nArg; + for(i=0; iapSqlParam[i] = sqlite3_value_dup(aArg[i]); + if( pBlob->apSqlParam[i]==0 ) memErr = 1; +#ifdef SQLITE_RTREE_INT_ONLY + pBlob->aParam[i] = sqlite3_value_int64(aArg[i]); +#else + pBlob->aParam[i] = sqlite3_value_double(aArg[i]); +#endif + } + if( memErr ){ + sqlite3_result_error_nomem(ctx); + rtreeMatchArgFree(pBlob); + }else{ + sqlite3_result_pointer(ctx, pBlob, "RtreeMatchArg", rtreeMatchArgFree); + } } - return rc; } /* -** Free the RbuObjIter.azTblCol[] and RbuObjIter.abTblPk[] arrays allocated -** by an earlier call to rbuObjIterCacheTableInfo(). +** Register a new geometry function for use with the r-tree MATCH operator. */ -static void rbuObjIterFreeCols(RbuObjIter *pIter){ - int i; - for(i=0; inTblCol; i++){ - sqlite3_free(pIter->azTblCol[i]); - sqlite3_free(pIter->azTblType[i]); - } - sqlite3_free(pIter->azTblCol); - pIter->azTblCol = 0; - pIter->azTblType = 0; - pIter->aiSrcOrder = 0; - pIter->abTblPk = 0; - pIter->abNotNull = 0; - pIter->nTblCol = 0; - pIter->eType = 0; /* Invalid value */ +SQLITE_API int sqlite3_rtree_geometry_callback( + sqlite3 *db, /* Register SQL function on this connection */ + const char *zGeom, /* Name of the new SQL function */ + int (*xGeom)(sqlite3_rtree_geometry*,int,RtreeDValue*,int*), /* Callback */ + void *pContext /* Extra data associated with the callback */ +){ + RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */ + + /* Allocate and populate the context object. */ + pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback)); + if( !pGeomCtx ) return SQLITE_NOMEM; + pGeomCtx->xGeom = xGeom; + pGeomCtx->xQueryFunc = 0; + pGeomCtx->xDestructor = 0; + pGeomCtx->pContext = pContext; + return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY, + (void *)pGeomCtx, geomCallback, 0, 0, rtreeFreeCallback + ); } /* -** Finalize all statements and free all allocations that are specific to -** the current object (table/index pair). +** Register a new 2nd-generation geometry function for use with the +** r-tree MATCH operator. */ -static void rbuObjIterClearStatements(RbuObjIter *pIter){ - RbuUpdateStmt *pUp; +SQLITE_API int sqlite3_rtree_query_callback( + sqlite3 *db, /* Register SQL function on this connection */ + const char *zQueryFunc, /* Name of new SQL function */ + int (*xQueryFunc)(sqlite3_rtree_query_info*), /* Callback */ + void *pContext, /* Extra data passed into the callback */ + void (*xDestructor)(void*) /* Destructor for the extra data */ +){ + RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */ - sqlite3_finalize(pIter->pSelect); - sqlite3_finalize(pIter->pInsert); - sqlite3_finalize(pIter->pDelete); - sqlite3_finalize(pIter->pTmpInsert); - pUp = pIter->pRbuUpdate; - while( pUp ){ - RbuUpdateStmt *pTmp = pUp->pNext; - sqlite3_finalize(pUp->pUpdate); - sqlite3_free(pUp); - pUp = pTmp; - } - - pIter->pSelect = 0; - pIter->pInsert = 0; - pIter->pDelete = 0; - pIter->pRbuUpdate = 0; - pIter->pTmpInsert = 0; - pIter->nCol = 0; + /* Allocate and populate the context object. */ + pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback)); + if( !pGeomCtx ) return SQLITE_NOMEM; + pGeomCtx->xGeom = 0; + pGeomCtx->xQueryFunc = xQueryFunc; + pGeomCtx->xDestructor = xDestructor; + pGeomCtx->pContext = pContext; + return sqlite3_create_function_v2(db, zQueryFunc, -1, SQLITE_ANY, + (void *)pGeomCtx, geomCallback, 0, 0, rtreeFreeCallback + ); +} + +#if !SQLITE_CORE +#ifdef _WIN32 +__declspec(dllexport) +#endif +SQLITE_API int sqlite3_rtree_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + SQLITE_EXTENSION_INIT2(pApi) + return sqlite3RtreeInit(db); } +#endif +#endif + +/************** End of rtree.c ***********************************************/ +/************** Begin file icu.c *********************************************/ /* -** Clean up any resources allocated as part of the iterator object passed -** as the only argument. +** 2007 May 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** $Id: icu.c,v 1.7 2007/12/13 21:54:11 drh Exp $ +** +** This file implements an integration between the ICU library +** ("International Components for Unicode", an open-source library +** for handling unicode data) and SQLite. The integration uses +** ICU to provide the following to SQLite: +** +** * An implementation of the SQL regexp() function (and hence REGEXP +** operator) using the ICU uregex_XX() APIs. +** +** * Implementations of the SQL scalar upper() and lower() functions +** for case mapping. +** +** * Integration of ICU and SQLite collation sequences. +** +** * An implementation of the LIKE operator that uses ICU to +** provide case-independent matching. */ -static void rbuObjIterFinalize(RbuObjIter *pIter){ - rbuObjIterClearStatements(pIter); - sqlite3_finalize(pIter->pTblIter); - sqlite3_finalize(pIter->pIdxIter); - rbuObjIterFreeCols(pIter); - memset(pIter, 0, sizeof(RbuObjIter)); -} + +#if !defined(SQLITE_CORE) \ + || defined(SQLITE_ENABLE_ICU) \ + || defined(SQLITE_ENABLE_ICU_COLLATIONS) + +/* Include ICU headers */ +#include +#include +#include +#include + +/* #include */ + +#ifndef SQLITE_CORE +/* #include "sqlite3ext.h" */ + SQLITE_EXTENSION_INIT1 +#else +/* #include "sqlite3.h" */ +#endif /* -** Advance the iterator to the next position. +** This function is called when an ICU function called from within +** the implementation of an SQL scalar function returns an error. ** -** If no error occurs, SQLITE_OK is returned and the iterator is left -** pointing to the next entry. Otherwise, an error code and message is -** left in the RBU handle passed as the first argument. A copy of the -** error code is returned. +** The scalar function context passed as the first argument is +** loaded with an error message based on the following two args. */ -static int rbuObjIterNext(sqlite3rbu *p, RbuObjIter *pIter){ - int rc = p->rc; - if( rc==SQLITE_OK ){ +static void icuFunctionError( + sqlite3_context *pCtx, /* SQLite scalar function context */ + const char *zName, /* Name of ICU function that failed */ + UErrorCode e /* Error code returned by ICU function */ +){ + char zBuf[128]; + sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e)); + zBuf[127] = '\0'; + sqlite3_result_error(pCtx, zBuf, -1); +} - /* Free any SQLite statements used while processing the previous object */ - rbuObjIterClearStatements(pIter); - if( pIter->zIdx==0 ){ - rc = sqlite3_exec(p->dbMain, - "DROP TRIGGER IF EXISTS temp.rbu_insert_tr;" - "DROP TRIGGER IF EXISTS temp.rbu_update1_tr;" - "DROP TRIGGER IF EXISTS temp.rbu_update2_tr;" - "DROP TRIGGER IF EXISTS temp.rbu_delete_tr;" - , 0, 0, &p->zErrmsg - ); - } +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) - if( rc==SQLITE_OK ){ - if( pIter->bCleanup ){ - rbuObjIterFreeCols(pIter); - pIter->bCleanup = 0; - rc = sqlite3_step(pIter->pTblIter); - if( rc!=SQLITE_ROW ){ - rc = resetAndCollectError(pIter->pTblIter, &p->zErrmsg); - pIter->zTbl = 0; - }else{ - pIter->zTbl = (const char*)sqlite3_column_text(pIter->pTblIter, 0); - pIter->zDataTbl = (const char*)sqlite3_column_text(pIter->pTblIter,1); - rc = (pIter->zDataTbl && pIter->zTbl) ? SQLITE_OK : SQLITE_NOMEM; - } - }else{ - if( pIter->zIdx==0 ){ - sqlite3_stmt *pIdx = pIter->pIdxIter; - rc = sqlite3_bind_text(pIdx, 1, pIter->zTbl, -1, SQLITE_STATIC); +/* +** Maximum length (in bytes) of the pattern in a LIKE or GLOB +** operator. +*/ +#ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH +# define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000 +#endif + +/* +** Version of sqlite3_free() that is always a function, never a macro. +*/ +static void xFree(void *p){ + sqlite3_free(p); +} + +/* +** This lookup table is used to help decode the first byte of +** a multi-byte UTF8 character. It is copied here from SQLite source +** code file utf8.c. +*/ +static const unsigned char icuUtf8Trans1[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, +}; + +#define SQLITE_ICU_READ_UTF8(zIn, c) \ + c = *(zIn++); \ + if( c>=0xc0 ){ \ + c = icuUtf8Trans1[c-0xc0]; \ + while( (*zIn & 0xc0)==0x80 ){ \ + c = (c<<6) + (0x3f & *(zIn++)); \ + } \ + } + +#define SQLITE_ICU_SKIP_UTF8(zIn) \ + assert( *zIn ); \ + if( *(zIn++)>=0xc0 ){ \ + while( (*zIn & 0xc0)==0x80 ){zIn++;} \ + } + + +/* +** Compare two UTF-8 strings for equality where the first string is +** a "LIKE" expression. Return true (1) if they are the same and +** false (0) if they are different. +*/ +static int icuLikeCompare( + const uint8_t *zPattern, /* LIKE pattern */ + const uint8_t *zString, /* The UTF-8 string to compare against */ + const UChar32 uEsc /* The escape character */ +){ + static const uint32_t MATCH_ONE = (uint32_t)'_'; + static const uint32_t MATCH_ALL = (uint32_t)'%'; + + int prevEscape = 0; /* True if the previous character was uEsc */ + + while( 1 ){ + + /* Read (and consume) the next character from the input pattern. */ + uint32_t uPattern; + SQLITE_ICU_READ_UTF8(zPattern, uPattern); + if( uPattern==0 ) break; + + /* There are now 4 possibilities: + ** + ** 1. uPattern is an unescaped match-all character "%", + ** 2. uPattern is an unescaped match-one character "_", + ** 3. uPattern is an unescaped escape character, or + ** 4. uPattern is to be handled as an ordinary character + */ + if( !prevEscape && uPattern==MATCH_ALL ){ + /* Case 1. */ + uint8_t c; + + /* Skip any MATCH_ALL or MATCH_ONE characters that follow a + ** MATCH_ALL. For each MATCH_ONE, skip one character in the + ** test string. + */ + while( (c=*zPattern) == MATCH_ALL || c == MATCH_ONE ){ + if( c==MATCH_ONE ){ + if( *zString==0 ) return 0; + SQLITE_ICU_SKIP_UTF8(zString); } - if( rc==SQLITE_OK ){ - rc = sqlite3_step(pIter->pIdxIter); - if( rc!=SQLITE_ROW ){ - rc = resetAndCollectError(pIter->pIdxIter, &p->zErrmsg); - pIter->bCleanup = 1; - pIter->zIdx = 0; - }else{ - pIter->zIdx = (const char*)sqlite3_column_text(pIter->pIdxIter, 0); - pIter->iTnum = sqlite3_column_int(pIter->pIdxIter, 1); - pIter->bUnique = sqlite3_column_int(pIter->pIdxIter, 2); - rc = pIter->zIdx ? SQLITE_OK : SQLITE_NOMEM; - } + zPattern++; + } + + if( *zPattern==0 ) return 1; + + while( *zString ){ + if( icuLikeCompare(zPattern, zString, uEsc) ){ + return 1; } + SQLITE_ICU_SKIP_UTF8(zString); + } + return 0; + + }else if( !prevEscape && uPattern==MATCH_ONE ){ + /* Case 2. */ + if( *zString==0 ) return 0; + SQLITE_ICU_SKIP_UTF8(zString); + + }else if( !prevEscape && uPattern==(uint32_t)uEsc){ + /* Case 3. */ + prevEscape = 1; + + }else{ + /* Case 4. */ + uint32_t uString; + SQLITE_ICU_READ_UTF8(zString, uString); + uString = (uint32_t)u_foldCase((UChar32)uString, U_FOLD_CASE_DEFAULT); + uPattern = (uint32_t)u_foldCase((UChar32)uPattern, U_FOLD_CASE_DEFAULT); + if( uString!=uPattern ){ + return 0; } + prevEscape = 0; } } - if( rc!=SQLITE_OK ){ - rbuObjIterFinalize(pIter); - p->rc = rc; - } - return rc; + return *zString==0; } - /* -** The implementation of the rbu_target_name() SQL function. This function -** accepts one or two arguments. The first argument is the name of a table - -** the name of a table in the RBU database. The second, if it is present, is 1 -** for a view or 0 for a table. -** -** For a non-vacuum RBU handle, if the table name matches the pattern: +** Implementation of the like() SQL function. This function implements +** the build-in LIKE operator. The first argument to the function is the +** pattern and the second argument is the string. So, the SQL statements: ** -** data[0-9]_ +** A LIKE B ** -** where is any sequence of 1 or more characters, is returned. -** Otherwise, if the only argument does not match the above pattern, an SQL -** NULL is returned. +** is implemented as like(B, A). If there is an escape character E, ** -** "data_t1" -> "t1" -** "data0123_t2" -> "t2" -** "dataAB_t3" -> NULL +** A LIKE B ESCAPE E ** -** For an rbu vacuum handle, a copy of the first argument is returned if -** the second argument is either missing or 0 (not a view). +** is mapped to like(B, A, E). */ -static void rbuTargetNameFunc( - sqlite3_context *pCtx, - int argc, +static void icuLikeFunc( + sqlite3_context *context, + int argc, sqlite3_value **argv ){ - sqlite3rbu *p = sqlite3_user_data(pCtx); - const char *zIn; - assert( argc==1 || argc==2 ); + const unsigned char *zA = sqlite3_value_text(argv[0]); + const unsigned char *zB = sqlite3_value_text(argv[1]); + UChar32 uEsc = 0; - zIn = (const char*)sqlite3_value_text(argv[0]); - if( zIn ){ - if( rbuIsVacuum(p) ){ - if( argc==1 || 0==sqlite3_value_int(argv[1]) ){ - sqlite3_result_text(pCtx, zIn, -1, SQLITE_STATIC); - } - }else{ - if( strlen(zIn)>4 && memcmp("data", zIn, 4)==0 ){ - int i; - for(i=4; zIn[i]>='0' && zIn[i]<='9'; i++); - if( zIn[i]=='_' && zIn[i+1] ){ - sqlite3_result_text(pCtx, &zIn[i+1], -1, SQLITE_STATIC); - } - } + /* Limit the length of the LIKE or GLOB pattern to avoid problems + ** of deep recursion and N*N behavior in patternCompare(). + */ + if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){ + sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1); + return; + } + + + if( argc==3 ){ + /* The escape character string must consist of a single UTF-8 character. + ** Otherwise, return an error. + */ + int nE= sqlite3_value_bytes(argv[2]); + const unsigned char *zE = sqlite3_value_text(argv[2]); + int i = 0; + if( zE==0 ) return; + U8_NEXT(zE, i, nE, uEsc); + if( i!=nE){ + sqlite3_result_error(context, + "ESCAPE expression must be a single character", -1); + return; } } + + if( zA && zB ){ + sqlite3_result_int(context, icuLikeCompare(zA, zB, uEsc)); + } } /* -** Initialize the iterator structure passed as the second argument. +** Function to delete compiled regexp objects. Registered as +** a destructor function with sqlite3_set_auxdata(). +*/ +static void icuRegexpDelete(void *p){ + URegularExpression *pExpr = (URegularExpression *)p; + uregex_close(pExpr); +} + +/* +** Implementation of SQLite REGEXP operator. This scalar function takes +** two arguments. The first is a regular expression pattern to compile +** the second is a string to match against that pattern. If either +** argument is an SQL NULL, then NULL Is returned. Otherwise, the result +** is 1 if the string matches the pattern, or 0 otherwise. ** -** If no error occurs, SQLITE_OK is returned and the iterator is left -** pointing to the first entry. Otherwise, an error code and message is -** left in the RBU handle passed as the first argument. A copy of the -** error code is returned. +** SQLite maps the regexp() function to the regexp() operator such +** that the following two are equivalent: +** +** zString REGEXP zPattern +** regexp(zPattern, zString) +** +** Uses the following ICU regexp APIs: +** +** uregex_open() +** uregex_matches() +** uregex_close() */ -static int rbuObjIterFirst(sqlite3rbu *p, RbuObjIter *pIter){ - int rc; - memset(pIter, 0, sizeof(RbuObjIter)); +static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg){ + UErrorCode status = U_ZERO_ERROR; + URegularExpression *pExpr; + UBool res; + const UChar *zString = sqlite3_value_text16(apArg[1]); - rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pTblIter, &p->zErrmsg, - sqlite3_mprintf( - "SELECT rbu_target_name(name, type='view') AS target, name " - "FROM sqlite_master " - "WHERE type IN ('table', 'view') AND target IS NOT NULL " - " %s " - "ORDER BY name" - , rbuIsVacuum(p) ? "AND rootpage!=0 AND rootpage IS NOT NULL" : "")); + (void)nArg; /* Unused parameter */ - if( rc==SQLITE_OK ){ - rc = prepareAndCollectError(p->dbMain, &pIter->pIdxIter, &p->zErrmsg, - "SELECT name, rootpage, sql IS NULL OR substr(8, 6)=='UNIQUE' " - " FROM main.sqlite_master " - " WHERE type='index' AND tbl_name = ?" - ); + /* If the left hand side of the regexp operator is NULL, + ** then the result is also NULL. + */ + if( !zString ){ + return; } - pIter->bCleanup = 1; - p->rc = rc; - return rbuObjIterNext(p, pIter); + pExpr = sqlite3_get_auxdata(p, 0); + if( !pExpr ){ + const UChar *zPattern = sqlite3_value_text16(apArg[0]); + if( !zPattern ){ + return; + } + pExpr = uregex_open(zPattern, -1, 0, 0, &status); + + if( U_SUCCESS(status) ){ + sqlite3_set_auxdata(p, 0, pExpr, icuRegexpDelete); + }else{ + assert(!pExpr); + icuFunctionError(p, "uregex_open", status); + return; + } + } + + /* Configure the text that the regular expression operates on. */ + uregex_setText(pExpr, zString, -1, &status); + if( !U_SUCCESS(status) ){ + icuFunctionError(p, "uregex_setText", status); + return; + } + + /* Attempt the match */ + res = uregex_matches(pExpr, 0, &status); + if( !U_SUCCESS(status) ){ + icuFunctionError(p, "uregex_matches", status); + return; + } + + /* Set the text that the regular expression operates on to a NULL + ** pointer. This is not really necessary, but it is tidier than + ** leaving the regular expression object configured with an invalid + ** pointer after this function returns. + */ + uregex_setText(pExpr, 0, 0, &status); + + /* Return 1 or 0. */ + sqlite3_result_int(p, res ? 1 : 0); } /* -** This is a wrapper around "sqlite3_mprintf(zFmt, ...)". If an OOM occurs, -** an error code is stored in the RBU handle passed as the first argument. +** Implementations of scalar functions for case mapping - upper() and +** lower(). Function upper() converts its input to upper-case (ABC). +** Function lower() converts to lower-case (abc). ** -** If an error has already occurred (p->rc is already set to something other -** than SQLITE_OK), then this function returns NULL without modifying the -** stored error code. In this case it still calls sqlite3_free() on any -** printf() parameters associated with %z conversions. +** ICU provides two types of case mapping, "general" case mapping and +** "language specific". Refer to ICU documentation for the differences +** between the two. +** +** To utilise "general" case mapping, the upper() or lower() scalar +** functions are invoked with one argument: +** +** upper('ABC') -> 'abc' +** lower('abc') -> 'ABC' +** +** To access ICU "language specific" case mapping, upper() or lower() +** should be invoked with two arguments. The second argument is the name +** of the locale to use. Passing an empty string ("") or SQL NULL value +** as the second argument is the same as invoking the 1 argument version +** of upper() or lower(). +** +** lower('I', 'en_us') -> 'i' +** lower('I', 'tr_tr') -> '\u131' (small dotless i) +** +** http://www.icu-project.org/userguide/posix.html#case_mappings */ -static char *rbuMPrintf(sqlite3rbu *p, const char *zFmt, ...){ - char *zSql = 0; - va_list ap; - va_start(ap, zFmt); - zSql = sqlite3_vmprintf(zFmt, ap); - if( p->rc==SQLITE_OK ){ - if( zSql==0 ) p->rc = SQLITE_NOMEM; - }else{ - sqlite3_free(zSql); - zSql = 0; +static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){ + const UChar *zInput; /* Pointer to input string */ + UChar *zOutput = 0; /* Pointer to output buffer */ + int nInput; /* Size of utf-16 input string in bytes */ + int nOut; /* Size of output buffer in bytes */ + int cnt; + int bToUpper; /* True for toupper(), false for tolower() */ + UErrorCode status; + const char *zLocale = 0; + + assert(nArg==1 || nArg==2); + bToUpper = (sqlite3_user_data(p)!=0); + if( nArg==2 ){ + zLocale = (const char *)sqlite3_value_text(apArg[1]); } - va_end(ap); - return zSql; -} -/* -** Argument zFmt is a sqlite3_mprintf() style format string. The trailing -** arguments are the usual subsitution values. This function performs -** the printf() style substitutions and executes the result as an SQL -** statement on the RBU handles database. -** -** If an error occurs, an error code and error message is stored in the -** RBU handle. If an error has already occurred when this function is -** called, it is a no-op. -*/ -static int rbuMPrintfExec(sqlite3rbu *p, sqlite3 *db, const char *zFmt, ...){ - va_list ap; - char *zSql; - va_start(ap, zFmt); - zSql = sqlite3_vmprintf(zFmt, ap); - if( p->rc==SQLITE_OK ){ - if( zSql==0 ){ - p->rc = SQLITE_NOMEM; + zInput = sqlite3_value_text16(apArg[0]); + if( !zInput ){ + return; + } + nOut = nInput = sqlite3_value_bytes16(apArg[0]); + if( nOut==0 ){ + sqlite3_result_text16(p, "", 0, SQLITE_STATIC); + return; + } + + for(cnt=0; cnt<2; cnt++){ + UChar *zNew = sqlite3_realloc(zOutput, nOut); + if( zNew==0 ){ + sqlite3_free(zOutput); + sqlite3_result_error_nomem(p); + return; + } + zOutput = zNew; + status = U_ZERO_ERROR; + if( bToUpper ){ + nOut = 2*u_strToUpper(zOutput,nOut/2,zInput,nInput/2,zLocale,&status); }else{ - p->rc = sqlite3_exec(db, zSql, 0, 0, &p->zErrmsg); + nOut = 2*u_strToLower(zOutput,nOut/2,zInput,nInput/2,zLocale,&status); } - } - sqlite3_free(zSql); - va_end(ap); - return p->rc; -} -/* -** Attempt to allocate and return a pointer to a zeroed block of nByte -** bytes. -** -** If an error (i.e. an OOM condition) occurs, return NULL and leave an -** error code in the rbu handle passed as the first argument. Or, if an -** error has already occurred when this function is called, return NULL -** immediately without attempting the allocation or modifying the stored -** error code. -*/ -static void *rbuMalloc(sqlite3rbu *p, int nByte){ - void *pRet = 0; - if( p->rc==SQLITE_OK ){ - assert( nByte>0 ); - pRet = sqlite3_malloc64(nByte); - if( pRet==0 ){ - p->rc = SQLITE_NOMEM; + if( U_SUCCESS(status) ){ + sqlite3_result_text16(p, zOutput, nOut, xFree); + }else if( status==U_BUFFER_OVERFLOW_ERROR ){ + assert( cnt==0 ); + continue; }else{ - memset(pRet, 0, nByte); + icuFunctionError(p, bToUpper ? "u_strToUpper" : "u_strToLower", status); } + return; } - return pRet; + assert( 0 ); /* Unreachable */ } +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */ /* -** Allocate and zero the pIter->azTblCol[] and abTblPk[] arrays so that -** there is room for at least nCol elements. If an OOM occurs, store an -** error code in the RBU handle passed as the first argument. +** Collation sequence destructor function. The pCtx argument points to +** a UCollator structure previously allocated using ucol_open(). */ -static void rbuAllocateIterArrays(sqlite3rbu *p, RbuObjIter *pIter, int nCol){ - int nByte = (2*sizeof(char*) + sizeof(int) + 3*sizeof(u8)) * nCol; - char **azNew; +static void icuCollationDel(void *pCtx){ + UCollator *p = (UCollator *)pCtx; + ucol_close(p); +} - azNew = (char**)rbuMalloc(p, nByte); - if( azNew ){ - pIter->azTblCol = azNew; - pIter->azTblType = &azNew[nCol]; - pIter->aiSrcOrder = (int*)&pIter->azTblType[nCol]; - pIter->abTblPk = (u8*)&pIter->aiSrcOrder[nCol]; - pIter->abNotNull = (u8*)&pIter->abTblPk[nCol]; - pIter->abIndexed = (u8*)&pIter->abNotNull[nCol]; +/* +** Collation sequence comparison function. The pCtx argument points to +** a UCollator structure previously allocated using ucol_open(). +*/ +static int icuCollationColl( + void *pCtx, + int nLeft, + const void *zLeft, + int nRight, + const void *zRight +){ + UCollationResult res; + UCollator *p = (UCollator *)pCtx; + res = ucol_strcoll(p, (UChar *)zLeft, nLeft/2, (UChar *)zRight, nRight/2); + switch( res ){ + case UCOL_LESS: return -1; + case UCOL_GREATER: return +1; + case UCOL_EQUAL: return 0; } + assert(!"Unexpected return value from ucol_strcoll()"); + return 0; } /* -** The first argument must be a nul-terminated string. This function -** returns a copy of the string in memory obtained from sqlite3_malloc(). -** It is the responsibility of the caller to eventually free this memory -** using sqlite3_free(). +** Implementation of the scalar function icu_load_collation(). ** -** If an OOM condition is encountered when attempting to allocate memory, -** output variable (*pRc) is set to SQLITE_NOMEM before returning. Otherwise, -** if the allocation succeeds, (*pRc) is left unchanged. +** This scalar function is used to add ICU collation based collation +** types to an SQLite database connection. It is intended to be called +** as follows: +** +** SELECT icu_load_collation(, ); +** +** Where is a string containing an ICU locale identifier (i.e. +** "en_AU", "tr_TR" etc.) and is the name of the +** collation sequence to create. */ -static char *rbuStrndup(const char *zStr, int *pRc){ - char *zRet = 0; +static void icuLoadCollation( + sqlite3_context *p, + int nArg, + sqlite3_value **apArg +){ + sqlite3 *db = (sqlite3 *)sqlite3_user_data(p); + UErrorCode status = U_ZERO_ERROR; + const char *zLocale; /* Locale identifier - (eg. "jp_JP") */ + const char *zName; /* SQL Collation sequence name (eg. "japanese") */ + UCollator *pUCollator; /* ICU library collation object */ + int rc; /* Return code from sqlite3_create_collation_x() */ - assert( *pRc==SQLITE_OK ); - if( zStr ){ - size_t nCopy = strlen(zStr) + 1; - zRet = (char*)sqlite3_malloc64(nCopy); - if( zRet ){ - memcpy(zRet, zStr, nCopy); - }else{ - *pRc = SQLITE_NOMEM; - } + assert(nArg==2); + (void)nArg; /* Unused parameter */ + zLocale = (const char *)sqlite3_value_text(apArg[0]); + zName = (const char *)sqlite3_value_text(apArg[1]); + + if( !zLocale || !zName ){ + return; } - return zRet; + pUCollator = ucol_open(zLocale, &status); + if( !U_SUCCESS(status) ){ + icuFunctionError(p, "ucol_open", status); + return; + } + assert(p); + + rc = sqlite3_create_collation_v2(db, zName, SQLITE_UTF16, (void *)pUCollator, + icuCollationColl, icuCollationDel + ); + if( rc!=SQLITE_OK ){ + ucol_close(pUCollator); + sqlite3_result_error(p, "Error registering collation function", -1); + } } /* -** Finalize the statement passed as the second argument. -** -** If the sqlite3_finalize() call indicates that an error occurs, and the -** rbu handle error code is not already set, set the error code and error -** message accordingly. +** Register the ICU extension functions with database db. */ -static void rbuFinalize(sqlite3rbu *p, sqlite3_stmt *pStmt){ - sqlite3 *db = sqlite3_db_handle(pStmt); - int rc = sqlite3_finalize(pStmt); - if( p->rc==SQLITE_OK && rc!=SQLITE_OK ){ - p->rc = rc; - p->zErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); +SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){ + static const struct IcuScalar { + const char *zName; /* Function name */ + unsigned char nArg; /* Number of arguments */ + unsigned short enc; /* Optimal text encoding */ + unsigned char iContext; /* sqlite3_user_data() context */ + void (*xFunc)(sqlite3_context*,int,sqlite3_value**); + } scalars[] = { + {"icu_load_collation", 2, SQLITE_UTF8, 1, icuLoadCollation}, +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) + {"regexp", 2, SQLITE_ANY|SQLITE_DETERMINISTIC, 0, icuRegexpFunc}, + {"lower", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, + {"lower", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, + {"upper", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, + {"upper", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, + {"lower", 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, + {"lower", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, + {"upper", 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, + {"upper", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, + {"like", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, + {"like", 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */ + }; + int rc = SQLITE_OK; + int i; + + for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){ + const struct IcuScalar *p = &scalars[i]; + rc = sqlite3_create_function( + db, p->zName, p->nArg, p->enc, + p->iContext ? (void*)db : (void*)0, + p->xFunc, 0, 0 + ); } + + return rc; } -/* Determine the type of a table. -** -** peType is of type (int*), a pointer to an output parameter of type -** (int). This call sets the output parameter as follows, depending -** on the type of the table specified by parameters dbName and zTbl. -** -** RBU_PK_NOTABLE: No such table. -** RBU_PK_NONE: Table has an implicit rowid. -** RBU_PK_IPK: Table has an explicit IPK column. -** RBU_PK_EXTERNAL: Table has an external PK index. -** RBU_PK_WITHOUT_ROWID: Table is WITHOUT ROWID. -** RBU_PK_VTAB: Table is a virtual table. +#if !SQLITE_CORE +#ifdef _WIN32 +__declspec(dllexport) +#endif +SQLITE_API int sqlite3_icu_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + SQLITE_EXTENSION_INIT2(pApi) + return sqlite3IcuInit(db); +} +#endif + +#endif + +/************** End of icu.c *************************************************/ +/************** Begin file fts3_icu.c ****************************************/ +/* +** 2007 June 22 ** -** Argument *piPk is also of type (int*), and also points to an output -** parameter. Unless the table has an external primary key index -** (i.e. unless *peType is set to 3), then *piPk is set to zero. Or, -** if the table does have an external primary key index, then *piPk -** is set to the root page number of the primary key index before -** returning. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** ALGORITHM: +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** if( no entry exists in sqlite_master ){ -** return RBU_PK_NOTABLE -** }else if( sql for the entry starts with "CREATE VIRTUAL" ){ -** return RBU_PK_VTAB -** }else if( "PRAGMA index_list()" for the table contains a "pk" index ){ -** if( the index that is the pk exists in sqlite_master ){ -** *piPK = rootpage of that index. -** return RBU_PK_EXTERNAL -** }else{ -** return RBU_PK_WITHOUT_ROWID -** } -** }else if( "PRAGMA table_info()" lists one or more "pk" columns ){ -** return RBU_PK_IPK -** }else{ -** return RBU_PK_NONE -** } +************************************************************************* +** This file implements a tokenizer for fts3 based on the ICU library. */ -static void rbuTableType( - sqlite3rbu *p, - const char *zTab, - int *peType, - int *piTnum, - int *piPk -){ - /* - ** 0) SELECT count(*) FROM sqlite_master where name=%Q AND IsVirtual(%Q) - ** 1) PRAGMA index_list = ? - ** 2) SELECT count(*) FROM sqlite_master where name=%Q - ** 3) PRAGMA table_info = ? - */ - sqlite3_stmt *aStmt[4] = {0, 0, 0, 0}; +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) +#ifdef SQLITE_ENABLE_ICU - *peType = RBU_PK_NOTABLE; - *piPk = 0; +/* #include */ +/* #include */ +/* #include "fts3_tokenizer.h" */ - assert( p->rc==SQLITE_OK ); - p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[0], &p->zErrmsg, - sqlite3_mprintf( - "SELECT (sql LIKE 'create virtual%%'), rootpage" - " FROM sqlite_master" - " WHERE name=%Q", zTab - )); - if( p->rc!=SQLITE_OK || sqlite3_step(aStmt[0])!=SQLITE_ROW ){ - /* Either an error, or no such table. */ - goto rbuTableType_end; +#include +/* #include */ +/* #include */ +#include + +typedef struct IcuTokenizer IcuTokenizer; +typedef struct IcuCursor IcuCursor; + +struct IcuTokenizer { + sqlite3_tokenizer base; + char *zLocale; +}; + +struct IcuCursor { + sqlite3_tokenizer_cursor base; + + UBreakIterator *pIter; /* ICU break-iterator object */ + int nChar; /* Number of UChar elements in pInput */ + UChar *aChar; /* Copy of input using utf-16 encoding */ + int *aOffset; /* Offsets of each character in utf-8 input */ + + int nBuffer; + char *zBuffer; + + int iToken; +}; + +/* +** Create a new tokenizer instance. +*/ +static int icuCreate( + int argc, /* Number of entries in argv[] */ + const char * const *argv, /* Tokenizer creation arguments */ + sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */ +){ + IcuTokenizer *p; + int n = 0; + + if( argc>0 ){ + n = strlen(argv[0])+1; } - if( sqlite3_column_int(aStmt[0], 0) ){ - *peType = RBU_PK_VTAB; /* virtual table */ - goto rbuTableType_end; + p = (IcuTokenizer *)sqlite3_malloc(sizeof(IcuTokenizer)+n); + if( !p ){ + return SQLITE_NOMEM; } - *piTnum = sqlite3_column_int(aStmt[0], 1); + memset(p, 0, sizeof(IcuTokenizer)); - p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[1], &p->zErrmsg, - sqlite3_mprintf("PRAGMA index_list=%Q",zTab) - ); - if( p->rc ) goto rbuTableType_end; - while( sqlite3_step(aStmt[1])==SQLITE_ROW ){ - const u8 *zOrig = sqlite3_column_text(aStmt[1], 3); - const u8 *zIdx = sqlite3_column_text(aStmt[1], 1); - if( zOrig && zIdx && zOrig[0]=='p' ){ - p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[2], &p->zErrmsg, - sqlite3_mprintf( - "SELECT rootpage FROM sqlite_master WHERE name = %Q", zIdx - )); - if( p->rc==SQLITE_OK ){ - if( sqlite3_step(aStmt[2])==SQLITE_ROW ){ - *piPk = sqlite3_column_int(aStmt[2], 0); - *peType = RBU_PK_EXTERNAL; - }else{ - *peType = RBU_PK_WITHOUT_ROWID; - } - } - goto rbuTableType_end; - } + if( n ){ + p->zLocale = (char *)&p[1]; + memcpy(p->zLocale, argv[0], n); } - p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[3], &p->zErrmsg, - sqlite3_mprintf("PRAGMA table_info=%Q",zTab) - ); - if( p->rc==SQLITE_OK ){ - while( sqlite3_step(aStmt[3])==SQLITE_ROW ){ - if( sqlite3_column_int(aStmt[3],5)>0 ){ - *peType = RBU_PK_IPK; /* explicit IPK column */ - goto rbuTableType_end; - } - } - *peType = RBU_PK_NONE; - } + *ppTokenizer = (sqlite3_tokenizer *)p; -rbuTableType_end: { - unsigned int i; - for(i=0; iabIndexed[] array. +** Destroy a tokenizer */ -static void rbuObjIterCacheIndexedCols(sqlite3rbu *p, RbuObjIter *pIter){ - sqlite3_stmt *pList = 0; - int bIndex = 0; +static int icuDestroy(sqlite3_tokenizer *pTokenizer){ + IcuTokenizer *p = (IcuTokenizer *)pTokenizer; + sqlite3_free(p); + return SQLITE_OK; +} - if( p->rc==SQLITE_OK ){ - memcpy(pIter->abIndexed, pIter->abTblPk, sizeof(u8)*pIter->nTblCol); - p->rc = prepareFreeAndCollectError(p->dbMain, &pList, &p->zErrmsg, - sqlite3_mprintf("PRAGMA main.index_list = %Q", pIter->zTbl) - ); +/* +** Prepare to begin tokenizing a particular string. The input +** string to be tokenized is pInput[0..nBytes-1]. A cursor +** used to incrementally tokenize this string is returned in +** *ppCursor. +*/ +static int icuOpen( + sqlite3_tokenizer *pTokenizer, /* The tokenizer */ + const char *zInput, /* Input string */ + int nInput, /* Length of zInput in bytes */ + sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ +){ + IcuTokenizer *p = (IcuTokenizer *)pTokenizer; + IcuCursor *pCsr; + + const int32_t opt = U_FOLD_CASE_DEFAULT; + UErrorCode status = U_ZERO_ERROR; + int nChar; + + UChar32 c; + int iInput = 0; + int iOut = 0; + + *ppCursor = 0; + + if( zInput==0 ){ + nInput = 0; + zInput = ""; + }else if( nInput<0 ){ + nInput = strlen(zInput); + } + nChar = nInput+1; + pCsr = (IcuCursor *)sqlite3_malloc( + sizeof(IcuCursor) + /* IcuCursor */ + ((nChar+3)&~3) * sizeof(UChar) + /* IcuCursor.aChar[] */ + (nChar+1) * sizeof(int) /* IcuCursor.aOffset[] */ + ); + if( !pCsr ){ + return SQLITE_NOMEM; } + memset(pCsr, 0, sizeof(IcuCursor)); + pCsr->aChar = (UChar *)&pCsr[1]; + pCsr->aOffset = (int *)&pCsr->aChar[(nChar+3)&~3]; - pIter->nIndex = 0; - while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pList) ){ - const char *zIdx = (const char*)sqlite3_column_text(pList, 1); - sqlite3_stmt *pXInfo = 0; - if( zIdx==0 ) break; - p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, - sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", zIdx) - ); - while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ - int iCid = sqlite3_column_int(pXInfo, 1); - if( iCid>=0 ) pIter->abIndexed[iCid] = 1; + pCsr->aOffset[iOut] = iInput; + U8_NEXT(zInput, iInput, nInput, c); + while( c>0 ){ + int isError = 0; + c = u_foldCase(c, opt); + U16_APPEND(pCsr->aChar, iOut, nChar, c, isError); + if( isError ){ + sqlite3_free(pCsr); + return SQLITE_ERROR; + } + pCsr->aOffset[iOut] = iInput; + + if( iInputnIndex++; } - if( pIter->eType==RBU_PK_WITHOUT_ROWID ){ - /* "PRAGMA index_list" includes the main PK b-tree */ - pIter->nIndex--; + pCsr->pIter = ubrk_open(UBRK_WORD, p->zLocale, pCsr->aChar, iOut, &status); + if( !U_SUCCESS(status) ){ + sqlite3_free(pCsr); + return SQLITE_ERROR; } + pCsr->nChar = iOut; - rbuFinalize(p, pList); - if( bIndex==0 ) pIter->abIndexed = 0; + ubrk_first(pCsr->pIter); + *ppCursor = (sqlite3_tokenizer_cursor *)pCsr; + return SQLITE_OK; } - /* -** If they are not already populated, populate the pIter->azTblCol[], -** pIter->abTblPk[], pIter->nTblCol and pIter->bRowid variables according to -** the table (not index) that the iterator currently points to. -** -** Return SQLITE_OK if successful, or an SQLite error code otherwise. If -** an error does occur, an error code and error message are also left in -** the RBU handle. +** Close a tokenization cursor previously opened by a call to icuOpen(). */ -static int rbuObjIterCacheTableInfo(sqlite3rbu *p, RbuObjIter *pIter){ - if( pIter->azTblCol==0 ){ - sqlite3_stmt *pStmt = 0; - int nCol = 0; - int i; /* for() loop iterator variable */ - int bRbuRowid = 0; /* If input table has column "rbu_rowid" */ - int iOrder = 0; - int iTnum = 0; +static int icuClose(sqlite3_tokenizer_cursor *pCursor){ + IcuCursor *pCsr = (IcuCursor *)pCursor; + ubrk_close(pCsr->pIter); + sqlite3_free(pCsr->zBuffer); + sqlite3_free(pCsr); + return SQLITE_OK; +} - /* Figure out the type of table this step will deal with. */ - assert( pIter->eType==0 ); - rbuTableType(p, pIter->zTbl, &pIter->eType, &iTnum, &pIter->iPkTnum); - if( p->rc==SQLITE_OK && pIter->eType==RBU_PK_NOTABLE ){ - p->rc = SQLITE_ERROR; - p->zErrmsg = sqlite3_mprintf("no such table: %s", pIter->zTbl); - } - if( p->rc ) return p->rc; - if( pIter->zIdx==0 ) pIter->iTnum = iTnum; +/* +** Extract the next token from a tokenization cursor. +*/ +static int icuNext( + sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by simpleOpen */ + const char **ppToken, /* OUT: *ppToken is the token text */ + int *pnBytes, /* OUT: Number of bytes in token */ + int *piStartOffset, /* OUT: Starting offset of token */ + int *piEndOffset, /* OUT: Ending offset of token */ + int *piPosition /* OUT: Position integer of token */ +){ + IcuCursor *pCsr = (IcuCursor *)pCursor; - assert( pIter->eType==RBU_PK_NONE || pIter->eType==RBU_PK_IPK - || pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_WITHOUT_ROWID - || pIter->eType==RBU_PK_VTAB - ); + int iStart = 0; + int iEnd = 0; + int nByte = 0; - /* Populate the azTblCol[] and nTblCol variables based on the columns - ** of the input table. Ignore any input table columns that begin with - ** "rbu_". */ - p->rc = prepareFreeAndCollectError(p->dbRbu, &pStmt, &p->zErrmsg, - sqlite3_mprintf("SELECT * FROM '%q'", pIter->zDataTbl) - ); - if( p->rc==SQLITE_OK ){ - nCol = sqlite3_column_count(pStmt); - rbuAllocateIterArrays(p, pIter, nCol); - } - for(i=0; p->rc==SQLITE_OK && irc); - pIter->aiSrcOrder[pIter->nTblCol] = pIter->nTblCol; - pIter->azTblCol[pIter->nTblCol++] = zCopy; - } - else if( 0==sqlite3_stricmp("rbu_rowid", zName) ){ - bRbuRowid = 1; - } - } - sqlite3_finalize(pStmt); - pStmt = 0; + while( iStart==iEnd ){ + UChar32 c; - if( p->rc==SQLITE_OK - && rbuIsVacuum(p)==0 - && bRbuRowid!=(pIter->eType==RBU_PK_VTAB || pIter->eType==RBU_PK_NONE) - ){ - p->rc = SQLITE_ERROR; - p->zErrmsg = sqlite3_mprintf( - "table %q %s rbu_rowid column", pIter->zDataTbl, - (bRbuRowid ? "may not have" : "requires") - ); + iStart = ubrk_current(pCsr->pIter); + iEnd = ubrk_next(pCsr->pIter); + if( iEnd==UBRK_DONE ){ + return SQLITE_DONE; } - /* Check that all non-HIDDEN columns in the destination table are also - ** present in the input table. Populate the abTblPk[], azTblType[] and - ** aiTblOrder[] arrays at the same time. */ - if( p->rc==SQLITE_OK ){ - p->rc = prepareFreeAndCollectError(p->dbMain, &pStmt, &p->zErrmsg, - sqlite3_mprintf("PRAGMA table_info(%Q)", pIter->zTbl) - ); - } - while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ - const char *zName = (const char*)sqlite3_column_text(pStmt, 1); - if( zName==0 ) break; /* An OOM - finalize() below returns S_NOMEM */ - for(i=iOrder; inTblCol; i++){ - if( 0==strcmp(zName, pIter->azTblCol[i]) ) break; - } - if( i==pIter->nTblCol ){ - p->rc = SQLITE_ERROR; - p->zErrmsg = sqlite3_mprintf("column missing from %q: %s", - pIter->zDataTbl, zName - ); + while( iStartaChar, iWhite, pCsr->nChar, c); + if( u_isspace(c) ){ + iStart = iWhite; }else{ - int iPk = sqlite3_column_int(pStmt, 5); - int bNotNull = sqlite3_column_int(pStmt, 3); - const char *zType = (const char*)sqlite3_column_text(pStmt, 2); - - if( i!=iOrder ){ - SWAP(int, pIter->aiSrcOrder[i], pIter->aiSrcOrder[iOrder]); - SWAP(char*, pIter->azTblCol[i], pIter->azTblCol[iOrder]); - } + break; + } + } + assert(iStart<=iEnd); + } - pIter->azTblType[iOrder] = rbuStrndup(zType, &p->rc); - pIter->abTblPk[iOrder] = (iPk!=0); - pIter->abNotNull[iOrder] = (u8)bNotNull || (iPk!=0); - iOrder++; + do { + UErrorCode status = U_ZERO_ERROR; + if( nByte ){ + char *zNew = sqlite3_realloc(pCsr->zBuffer, nByte); + if( !zNew ){ + return SQLITE_NOMEM; } + pCsr->zBuffer = zNew; + pCsr->nBuffer = nByte; } - rbuFinalize(p, pStmt); - rbuObjIterCacheIndexedCols(p, pIter); - assert( pIter->eType!=RBU_PK_VTAB || pIter->abIndexed==0 ); - assert( pIter->eType!=RBU_PK_VTAB || pIter->nIndex==0 ); - } + u_strToUTF8( + pCsr->zBuffer, pCsr->nBuffer, &nByte, /* Output vars */ + &pCsr->aChar[iStart], iEnd-iStart, /* Input vars */ + &status /* Output success/failure */ + ); + } while( nByte>pCsr->nBuffer ); - return p->rc; + *ppToken = pCsr->zBuffer; + *pnBytes = nByte; + *piStartOffset = pCsr->aOffset[iStart]; + *piEndOffset = pCsr->aOffset[iEnd]; + *piPosition = pCsr->iToken++; + + return SQLITE_OK; } /* -** This function constructs and returns a pointer to a nul-terminated -** string containing some SQL clause or list based on one or more of the -** column names currently stored in the pIter->azTblCol[] array. +** The set of routines that implement the simple tokenizer */ -static char *rbuObjIterGetCollist( - sqlite3rbu *p, /* RBU object */ - RbuObjIter *pIter /* Object iterator for column names */ +static const sqlite3_tokenizer_module icuTokenizerModule = { + 0, /* iVersion */ + icuCreate, /* xCreate */ + icuDestroy, /* xCreate */ + icuOpen, /* xOpen */ + icuClose, /* xClose */ + icuNext, /* xNext */ + 0, /* xLanguageid */ +}; + +/* +** Set *ppModule to point at the implementation of the ICU tokenizer. +*/ +SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule( + sqlite3_tokenizer_module const**ppModule ){ - char *zList = 0; - const char *zSep = ""; - int i; - for(i=0; inTblCol; i++){ - const char *z = pIter->azTblCol[i]; - zList = rbuMPrintf(p, "%z%s\"%w\"", zList, zSep, z); - zSep = ", "; - } - return zList; + *ppModule = &icuTokenizerModule; } +#endif /* defined(SQLITE_ENABLE_ICU) */ +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_icu.c ********************************************/ +/************** Begin file sqlite3rbu.c **************************************/ /* -** This function is used to create a SELECT list (the list of SQL -** expressions that follows a SELECT keyword) for a SELECT statement -** used to read from an data_xxx or rbu_tmp_xxx table while updating the -** index object currently indicated by the iterator object passed as the -** second argument. A "PRAGMA index_xinfo = " statement is used -** to obtain the required information. +** 2014 August 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** +** OVERVIEW +** +** The RBU extension requires that the RBU update be packaged as an +** SQLite database. The tables it expects to find are described in +** sqlite3rbu.h. Essentially, for each table xyz in the target database +** that the user wishes to write to, a corresponding data_xyz table is +** created in the RBU database and populated with one row for each row to +** update, insert or delete from the target table. +** +** The update proceeds in three stages: +** +** 1) The database is updated. The modified database pages are written +** to a *-oal file. A *-oal file is just like a *-wal file, except +** that it is named "-oal" instead of "-wal". +** Because regular SQLite clients do not look for file named +** "-oal", they go on using the original database in +** rollback mode while the *-oal file is being generated. +** +** During this stage RBU does not update the database by writing +** directly to the target tables. Instead it creates "imposter" +** tables using the SQLITE_TESTCTRL_IMPOSTER interface that it uses +** to update each b-tree individually. All updates required by each +** b-tree are completed before moving on to the next, and all +** updates are done in sorted key order. +** +** 2) The "-oal" file is moved to the equivalent "-wal" +** location using a call to rename(2). Before doing this the RBU +** module takes an EXCLUSIVE lock on the database file, ensuring +** that there are no other active readers. +** +** Once the EXCLUSIVE lock is released, any other database readers +** detect the new *-wal file and read the database in wal mode. At +** this point they see the new version of the database - including +** the updates made as part of the RBU update. +** +** 3) The new *-wal file is checkpointed. This proceeds in the same way +** as a regular database checkpoint, except that a single frame is +** checkpointed each time sqlite3rbu_step() is called. If the RBU +** handle is closed before the entire *-wal file is checkpointed, +** the checkpoint progress is saved in the RBU database and the +** checkpoint can be resumed by another RBU client at some point in +** the future. +** +** POTENTIAL PROBLEMS +** +** The rename() call might not be portable. And RBU is not currently +** syncing the directory after renaming the file. +** +** When state is saved, any commit to the *-oal file and the commit to +** the RBU update database are not atomic. So if the power fails at the +** wrong moment they might get out of sync. As the main database will be +** committed before the RBU update database this will likely either just +** pass unnoticed, or result in SQLITE_CONSTRAINT errors (due to UNIQUE +** constraint violations). +** +** If some client does modify the target database mid RBU update, or some +** other error occurs, the RBU extension will keep throwing errors. It's +** not really clear how to get out of this state. The system could just +** by delete the RBU update database and *-oal file and have the device +** download the update again and start over. +** +** At present, for an UPDATE, both the new.* and old.* records are +** collected in the rbu_xyz table. And for both UPDATEs and DELETEs all +** fields are collected. This means we're probably writing a lot more +** data to disk when saving the state of an ongoing update to the RBU +** update database than is strictly necessary. +** +*/ + +/* #include */ +/* #include */ +/* #include */ + +/* #include "sqlite3.h" */ + +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RBU) +/************** Include sqlite3rbu.h in the middle of sqlite3rbu.c ***********/ +/************** Begin file sqlite3rbu.h **************************************/ +/* +** 2014 August 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains the public interface for the RBU extension. +*/ + +/* +** SUMMARY +** +** Writing a transaction containing a large number of operations on +** b-tree indexes that are collectively larger than the available cache +** memory can be very inefficient. +** +** The problem is that in order to update a b-tree, the leaf page (at least) +** containing the entry being inserted or deleted must be modified. If the +** working set of leaves is larger than the available cache memory, then a +** single leaf that is modified more than once as part of the transaction +** may be loaded from or written to the persistent media multiple times. +** Additionally, because the index updates are likely to be applied in +** random order, access to pages within the database is also likely to be in +** random order, which is itself quite inefficient. +** +** One way to improve the situation is to sort the operations on each index +** by index key before applying them to the b-tree. This leads to an IO +** pattern that resembles a single linear scan through the index b-tree, +** and all but guarantees each modified leaf page is loaded and stored +** exactly once. SQLite uses this trick to improve the performance of +** CREATE INDEX commands. This extension allows it to be used to improve +** the performance of large transactions on existing databases. +** +** Additionally, this extension allows the work involved in writing the +** large transaction to be broken down into sub-transactions performed +** sequentially by separate processes. This is useful if the system cannot +** guarantee that a single update process will run for long enough to apply +** the entire update, for example because the update is being applied on a +** mobile device that is frequently rebooted. Even after the writer process +** has committed one or more sub-transactions, other database clients continue +** to read from the original database snapshot. In other words, partially +** applied transactions are not visible to other clients. +** +** "RBU" stands for "Resumable Bulk Update". As in a large database update +** transmitted via a wireless network to a mobile device. A transaction +** applied using this extension is hence refered to as an "RBU update". +** +** +** LIMITATIONS +** +** An "RBU update" transaction is subject to the following limitations: +** +** * The transaction must consist of INSERT, UPDATE and DELETE operations +** only. +** +** * INSERT statements may not use any default values. +** +** * UPDATE and DELETE statements must identify their target rows by +** non-NULL PRIMARY KEY values. Rows with NULL values stored in PRIMARY +** KEY fields may not be updated or deleted. If the table being written +** has no PRIMARY KEY, affected rows must be identified by rowid. +** +** * UPDATE statements may not modify PRIMARY KEY columns. +** +** * No triggers will be fired. +** +** * No foreign key violations are detected or reported. +** +** * CHECK constraints are not enforced. +** +** * No constraint handling mode except for "OR ROLLBACK" is supported. +** +** +** PREPARATION +** +** An "RBU update" is stored as a separate SQLite database. A database +** containing an RBU update is an "RBU database". For each table in the +** target database to be updated, the RBU database should contain a table +** named "data_" containing the same set of columns as the +** target table, and one more - "rbu_control". The data_% table should +** have no PRIMARY KEY or UNIQUE constraints, but each column should have +** the same type as the corresponding column in the target database. +** The "rbu_control" column should have no type at all. For example, if +** the target database contains: +** +** CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c UNIQUE); +** +** Then the RBU database should contain: +** +** CREATE TABLE data_t1(a INTEGER, b TEXT, c, rbu_control); +** +** The order of the columns in the data_% table does not matter. +** +** Instead of a regular table, the RBU database may also contain virtual +** tables or view named using the data_ naming scheme. +** +** Instead of the plain data_ naming scheme, RBU database tables +** may also be named data_, where is any sequence +** of zero or more numeric characters (0-9). This can be significant because +** tables within the RBU database are always processed in order sorted by +** name. By judicious selection of the portion of the names +** of the RBU tables the user can therefore control the order in which they +** are processed. This can be useful, for example, to ensure that "external +** content" FTS4 tables are updated before their underlying content tables. +** +** If the target database table is a virtual table or a table that has no +** PRIMARY KEY declaration, the data_% table must also contain a column +** named "rbu_rowid". This column is mapped to the tables implicit primary +** key column - "rowid". Virtual tables for which the "rowid" column does +** not function like a primary key value cannot be updated using RBU. For +** example, if the target db contains either of the following: +** +** CREATE VIRTUAL TABLE x1 USING fts3(a, b); +** CREATE TABLE x1(a, b) +** +** then the RBU database should contain: +** +** CREATE TABLE data_x1(a, b, rbu_rowid, rbu_control); +** +** All non-hidden columns (i.e. all columns matched by "SELECT *") of the +** target table must be present in the input table. For virtual tables, +** hidden columns are optional - they are updated by RBU if present in +** the input table, or not otherwise. For example, to write to an fts4 +** table with a hidden languageid column such as: +** +** CREATE VIRTUAL TABLE ft1 USING fts4(a, b, languageid='langid'); +** +** Either of the following input table schemas may be used: +** +** CREATE TABLE data_ft1(a, b, langid, rbu_rowid, rbu_control); +** CREATE TABLE data_ft1(a, b, rbu_rowid, rbu_control); +** +** For each row to INSERT into the target database as part of the RBU +** update, the corresponding data_% table should contain a single record +** with the "rbu_control" column set to contain integer value 0. The +** other columns should be set to the values that make up the new record +** to insert. +** +** If the target database table has an INTEGER PRIMARY KEY, it is not +** possible to insert a NULL value into the IPK column. Attempting to +** do so results in an SQLITE_MISMATCH error. +** +** For each row to DELETE from the target database as part of the RBU +** update, the corresponding data_% table should contain a single record +** with the "rbu_control" column set to contain integer value 1. The +** real primary key values of the row to delete should be stored in the +** corresponding columns of the data_% table. The values stored in the +** other columns are not used. +** +** For each row to UPDATE from the target database as part of the RBU +** update, the corresponding data_% table should contain a single record +** with the "rbu_control" column set to contain a value of type text. +** The real primary key values identifying the row to update should be +** stored in the corresponding columns of the data_% table row, as should +** the new values of all columns being update. The text value in the +** "rbu_control" column must contain the same number of characters as +** there are columns in the target database table, and must consist entirely +** of 'x' and '.' characters (or in some special cases 'd' - see below). For +** each column that is being updated, the corresponding character is set to +** 'x'. For those that remain as they are, the corresponding character of the +** rbu_control value should be set to '.'. For example, given the tables +** above, the update statement: +** +** UPDATE t1 SET c = 'usa' WHERE a = 4; +** +** is represented by the data_t1 row created by: +** +** INSERT INTO data_t1(a, b, c, rbu_control) VALUES(4, NULL, 'usa', '..x'); +** +** Instead of an 'x' character, characters of the rbu_control value specified +** for UPDATEs may also be set to 'd'. In this case, instead of updating the +** target table with the value stored in the corresponding data_% column, the +** user-defined SQL function "rbu_delta()" is invoked and the result stored in +** the target table column. rbu_delta() is invoked with two arguments - the +** original value currently stored in the target table column and the +** value specified in the data_xxx table. +** +** For example, this row: +** +** INSERT INTO data_t1(a, b, c, rbu_control) VALUES(4, NULL, 'usa', '..d'); +** +** is similar to an UPDATE statement such as: +** +** UPDATE t1 SET c = rbu_delta(c, 'usa') WHERE a = 4; +** +** Finally, if an 'f' character appears in place of a 'd' or 's' in an +** ota_control string, the contents of the data_xxx table column is assumed +** to be a "fossil delta" - a patch to be applied to a blob value in the +** format used by the fossil source-code management system. In this case +** the existing value within the target database table must be of type BLOB. +** It is replaced by the result of applying the specified fossil delta to +** itself. +** +** If the target database table is a virtual table or a table with no PRIMARY +** KEY, the rbu_control value should not include a character corresponding +** to the rbu_rowid value. For example, this: +** +** INSERT INTO data_ft1(a, b, rbu_rowid, rbu_control) +** VALUES(NULL, 'usa', 12, '.x'); +** +** causes a result similar to: +** +** UPDATE ft1 SET b = 'usa' WHERE rowid = 12; +** +** The data_xxx tables themselves should have no PRIMARY KEY declarations. +** However, RBU is more efficient if reading the rows in from each data_xxx +** table in "rowid" order is roughly the same as reading them sorted by +** the PRIMARY KEY of the corresponding target database table. In other +** words, rows should be sorted using the destination table PRIMARY KEY +** fields before they are inserted into the data_xxx tables. +** +** USAGE ** -** If the index is of the following form: +** The API declared below allows an application to apply an RBU update +** stored on disk to an existing target database. Essentially, the +** application: ** -** CREATE INDEX i1 ON t1(c, b COLLATE nocase); +** 1) Opens an RBU handle using the sqlite3rbu_open() function. ** -** and "t1" is a table with an explicit INTEGER PRIMARY KEY column -** "ipk", the returned string is: +** 2) Registers any required virtual table modules with the database +** handle returned by sqlite3rbu_db(). Also, if required, register +** the rbu_delta() implementation. ** -** "`c` COLLATE 'BINARY', `b` COLLATE 'NOCASE', `ipk` COLLATE 'BINARY'" +** 3) Calls the sqlite3rbu_step() function one or more times on +** the new handle. Each call to sqlite3rbu_step() performs a single +** b-tree operation, so thousands of calls may be required to apply +** a complete update. ** -** As well as the returned string, three other malloc'd strings are -** returned via output parameters. As follows: +** 4) Calls sqlite3rbu_close() to close the RBU update handle. If +** sqlite3rbu_step() has been called enough times to completely +** apply the update to the target database, then the RBU database +** is marked as fully applied. Otherwise, the state of the RBU +** update application is saved in the RBU database for later +** resumption. ** -** pzImposterCols: ... -** pzImposterPk: ... -** pzWhere: ... +** See comments below for more detail on APIs. +** +** If an update is only partially applied to the target database by the +** time sqlite3rbu_close() is called, various state information is saved +** within the RBU database. This allows subsequent processes to automatically +** resume the RBU update from where it left off. +** +** To remove all RBU extension state information, returning an RBU database +** to its original contents, it is sufficient to drop all tables that begin +** with the prefix "rbu_" +** +** DATABASE LOCKING +** +** An RBU update may not be applied to a database in WAL mode. Attempting +** to do so is an error (SQLITE_ERROR). +** +** While an RBU handle is open, a SHARED lock may be held on the target +** database file. This means it is possible for other clients to read the +** database, but not to write it. +** +** If an RBU update is started and then suspended before it is completed, +** then an external client writes to the database, then attempting to resume +** the suspended RBU update is also an error (SQLITE_BUSY). */ -static char *rbuObjIterGetIndexCols( - sqlite3rbu *p, /* RBU object */ - RbuObjIter *pIter, /* Object iterator for column names */ - char **pzImposterCols, /* OUT: Columns for imposter table */ - char **pzImposterPk, /* OUT: Imposter PK clause */ - char **pzWhere, /* OUT: WHERE clause */ - int *pnBind /* OUT: Trbul number of columns */ -){ - int rc = p->rc; /* Error code */ - int rc2; /* sqlite3_finalize() return code */ - char *zRet = 0; /* String to return */ - char *zImpCols = 0; /* String to return via *pzImposterCols */ - char *zImpPK = 0; /* String to return via *pzImposterPK */ - char *zWhere = 0; /* String to return via *pzWhere */ - int nBind = 0; /* Value to return via *pnBind */ - const char *zCom = ""; /* Set to ", " later on */ - const char *zAnd = ""; /* Set to " AND " later on */ - sqlite3_stmt *pXInfo = 0; /* PRAGMA index_xinfo = ? */ - - if( rc==SQLITE_OK ){ - assert( p->zErrmsg==0 ); - rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, - sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", pIter->zIdx) - ); - } - - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ - int iCid = sqlite3_column_int(pXInfo, 1); - int bDesc = sqlite3_column_int(pXInfo, 3); - const char *zCollate = (const char*)sqlite3_column_text(pXInfo, 4); - const char *zCol; - const char *zType; - - if( iCid<0 ){ - /* An integer primary key. If the table has an explicit IPK, use - ** its name. Otherwise, use "rbu_rowid". */ - if( pIter->eType==RBU_PK_IPK ){ - int i; - for(i=0; pIter->abTblPk[i]==0; i++); - assert( inTblCol ); - zCol = pIter->azTblCol[i]; - }else if( rbuIsVacuum(p) ){ - zCol = "_rowid_"; - }else{ - zCol = "rbu_rowid"; - } - zType = "INTEGER"; - }else{ - zCol = pIter->azTblCol[iCid]; - zType = pIter->azTblType[iCid]; - } - zRet = sqlite3_mprintf("%z%s\"%w\" COLLATE %Q", zRet, zCom, zCol, zCollate); - if( pIter->bUnique==0 || sqlite3_column_int(pXInfo, 5) ){ - const char *zOrder = (bDesc ? " DESC" : ""); - zImpPK = sqlite3_mprintf("%z%s\"rbu_imp_%d%w\"%s", - zImpPK, zCom, nBind, zCol, zOrder - ); - } - zImpCols = sqlite3_mprintf("%z%s\"rbu_imp_%d%w\" %s COLLATE %Q", - zImpCols, zCom, nBind, zCol, zType, zCollate - ); - zWhere = sqlite3_mprintf( - "%z%s\"rbu_imp_%d%w\" IS ?", zWhere, zAnd, nBind, zCol - ); - if( zRet==0 || zImpPK==0 || zImpCols==0 || zWhere==0 ) rc = SQLITE_NOMEM; - zCom = ", "; - zAnd = " AND "; - nBind++; - } +#ifndef _SQLITE3RBU_H +#define _SQLITE3RBU_H - rc2 = sqlite3_finalize(pXInfo); - if( rc==SQLITE_OK ) rc = rc2; +/* #include "sqlite3.h" ** Required for error code definitions ** */ - if( rc!=SQLITE_OK ){ - sqlite3_free(zRet); - sqlite3_free(zImpCols); - sqlite3_free(zImpPK); - sqlite3_free(zWhere); - zRet = 0; - zImpCols = 0; - zImpPK = 0; - zWhere = 0; - p->rc = rc; - } +#if 0 +extern "C" { +#endif - *pzImposterCols = zImpCols; - *pzImposterPk = zImpPK; - *pzWhere = zWhere; - *pnBind = nBind; - return zRet; -} +typedef struct sqlite3rbu sqlite3rbu; /* -** Assuming the current table columns are "a", "b" and "c", and the zObj -** paramter is passed "old", return a string of the form: +** Open an RBU handle. ** -** "old.a, old.b, old.b" +** Argument zTarget is the path to the target database. Argument zRbu is +** the path to the RBU database. Each call to this function must be matched +** by a call to sqlite3rbu_close(). When opening the databases, RBU passes +** the SQLITE_CONFIG_URI flag to sqlite3_open_v2(). So if either zTarget +** or zRbu begin with "file:", it will be interpreted as an SQLite +** database URI, not a regular file name. ** -** With the column names escaped. +** If the zState argument is passed a NULL value, the RBU extension stores +** the current state of the update (how many rows have been updated, which +** indexes are yet to be updated etc.) within the RBU database itself. This +** can be convenient, as it means that the RBU application does not need to +** organize removing a separate state file after the update is concluded. +** Or, if zState is non-NULL, it must be a path to a database file in which +** the RBU extension can store the state of the update. ** -** For tables with implicit rowids - RBU_PK_EXTERNAL and RBU_PK_NONE, append -** the text ", old._rowid_" to the returned value. -*/ -static char *rbuObjIterGetOldlist( - sqlite3rbu *p, - RbuObjIter *pIter, - const char *zObj -){ - char *zList = 0; - if( p->rc==SQLITE_OK && pIter->abIndexed ){ - const char *zS = ""; - int i; - for(i=0; inTblCol; i++){ - if( pIter->abIndexed[i] ){ - const char *zCol = pIter->azTblCol[i]; - zList = sqlite3_mprintf("%z%s%s.\"%w\"", zList, zS, zObj, zCol); - }else{ - zList = sqlite3_mprintf("%z%sNULL", zList, zS); - } - zS = ", "; - if( zList==0 ){ - p->rc = SQLITE_NOMEM; - break; - } - } - - /* For a table with implicit rowids, append "old._rowid_" to the list. */ - if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){ - zList = rbuMPrintf(p, "%z, %s._rowid_", zList, zObj); - } - } - return zList; -} - -/* -** Return an expression that can be used in a WHERE clause to match the -** primary key of the current table. For example, if the table is: +** When resuming an RBU update, the zState argument must be passed the same +** value as when the RBU update was started. ** -** CREATE TABLE t1(a, b, c, PRIMARY KEY(b, c)); +** Once the RBU update is finished, the RBU extension does not +** automatically remove any zState database file, even if it created it. ** -** Return the string: +** By default, RBU uses the default VFS to access the files on disk. To +** use a VFS other than the default, an SQLite "file:" URI containing a +** "vfs=..." option may be passed as the zTarget option. ** -** "b = ?1 AND c = ?2" -*/ -static char *rbuObjIterGetWhere( - sqlite3rbu *p, - RbuObjIter *pIter -){ - char *zList = 0; - if( pIter->eType==RBU_PK_VTAB || pIter->eType==RBU_PK_NONE ){ - zList = rbuMPrintf(p, "_rowid_ = ?%d", pIter->nTblCol+1); - }else if( pIter->eType==RBU_PK_EXTERNAL ){ - const char *zSep = ""; - int i; - for(i=0; inTblCol; i++){ - if( pIter->abTblPk[i] ){ - zList = rbuMPrintf(p, "%z%sc%d=?%d", zList, zSep, i, i+1); - zSep = " AND "; - } - } - zList = rbuMPrintf(p, - "_rowid_ = (SELECT id FROM rbu_imposter2 WHERE %z)", zList - ); - - }else{ - const char *zSep = ""; - int i; - for(i=0; inTblCol; i++){ - if( pIter->abTblPk[i] ){ - const char *zCol = pIter->azTblCol[i]; - zList = rbuMPrintf(p, "%z%s\"%w\"=?%d", zList, zSep, zCol, i+1); - zSep = " AND "; - } - } - } - return zList; -} - -/* -** The SELECT statement iterating through the keys for the current object -** (p->objiter.pSelect) currently points to a valid row. However, there -** is something wrong with the rbu_control value in the rbu_control value -** stored in the (p->nCol+1)'th column. Set the error code and error message -** of the RBU handle to something reflecting this. +** IMPORTANT NOTE FOR ZIPVFS USERS: The RBU extension works with all of +** SQLite's built-in VFSs, including the multiplexor VFS. However it does +** not work out of the box with zipvfs. Refer to the comment describing +** the zipvfs_create_vfs() API below for details on using RBU with zipvfs. */ -static void rbuBadControlError(sqlite3rbu *p){ - p->rc = SQLITE_ERROR; - p->zErrmsg = sqlite3_mprintf("invalid rbu_control value"); -} - +SQLITE_API sqlite3rbu *sqlite3rbu_open( + const char *zTarget, + const char *zRbu, + const char *zState +); /* -** Return a nul-terminated string containing the comma separated list of -** assignments that should be included following the "SET" keyword of -** an UPDATE statement used to update the table object that the iterator -** passed as the second argument currently points to if the rbu_control -** column of the data_xxx table entry is set to zMask. +** Open an RBU handle to perform an RBU vacuum on database file zTarget. +** An RBU vacuum is similar to SQLite's built-in VACUUM command, except +** that it can be suspended and resumed like an RBU update. ** -** The memory for the returned string is obtained from sqlite3_malloc(). -** It is the responsibility of the caller to eventually free it using -** sqlite3_free(). +** The second argument to this function identifies a database in which +** to store the state of the RBU vacuum operation if it is suspended. The +** first time sqlite3rbu_vacuum() is called, to start an RBU vacuum +** operation, the state database should either not exist or be empty +** (contain no tables). If an RBU vacuum is suspended by calling +** sqlite3rbu_close() on the RBU handle before sqlite3rbu_step() has +** returned SQLITE_DONE, the vacuum state is stored in the state database. +** The vacuum can be resumed by calling this function to open a new RBU +** handle specifying the same target and state databases. ** -** If an OOM error is encountered when allocating space for the new -** string, an error code is left in the rbu handle passed as the first -** argument and NULL is returned. Or, if an error has already occurred -** when this function is called, NULL is returned immediately, without -** attempting the allocation or modifying the stored error code. -*/ -static char *rbuObjIterGetSetlist( - sqlite3rbu *p, - RbuObjIter *pIter, - const char *zMask -){ - char *zList = 0; - if( p->rc==SQLITE_OK ){ - int i; - - if( (int)strlen(zMask)!=pIter->nTblCol ){ - rbuBadControlError(p); - }else{ - const char *zSep = ""; - for(i=0; inTblCol; i++){ - char c = zMask[pIter->aiSrcOrder[i]]; - if( c=='x' ){ - zList = rbuMPrintf(p, "%z%s\"%w\"=?%d", - zList, zSep, pIter->azTblCol[i], i+1 - ); - zSep = ", "; - } - else if( c=='d' ){ - zList = rbuMPrintf(p, "%z%s\"%w\"=rbu_delta(\"%w\", ?%d)", - zList, zSep, pIter->azTblCol[i], pIter->azTblCol[i], i+1 - ); - zSep = ", "; - } - else if( c=='f' ){ - zList = rbuMPrintf(p, "%z%s\"%w\"=rbu_fossil_delta(\"%w\", ?%d)", - zList, zSep, pIter->azTblCol[i], pIter->azTblCol[i], i+1 - ); - zSep = ", "; - } - } - } - } - return zList; -} - -/* -** Return a nul-terminated string consisting of nByte comma separated -** "?" expressions. For example, if nByte is 3, return a pointer to -** a buffer containing the string "?,?,?". +** If the second argument passed to this function is NULL, then the +** name of the state database is "-vacuum", where +** is the name of the target database file. In this case, on UNIX, if the +** state database is not already present in the file-system, it is created +** with the same permissions as the target db is made. ** -** The memory for the returned string is obtained from sqlite3_malloc(). -** It is the responsibility of the caller to eventually free it using -** sqlite3_free(). +** This function does not delete the state database after an RBU vacuum +** is completed, even if it created it. However, if the call to +** sqlite3rbu_close() returns any value other than SQLITE_OK, the contents +** of the state tables within the state database are zeroed. This way, +** the next call to sqlite3rbu_vacuum() opens a handle that starts a +** new RBU vacuum operation. ** -** If an OOM error is encountered when allocating space for the new -** string, an error code is left in the rbu handle passed as the first -** argument and NULL is returned. Or, if an error has already occurred -** when this function is called, NULL is returned immediately, without -** attempting the allocation or modifying the stored error code. +** As with sqlite3rbu_open(), Zipvfs users should rever to the comment +** describing the sqlite3rbu_create_vfs() API function below for +** a description of the complications associated with using RBU with +** zipvfs databases. */ -static char *rbuObjIterGetBindlist(sqlite3rbu *p, int nBind){ - char *zRet = 0; - int nByte = nBind*2 + 1; - - zRet = (char*)rbuMalloc(p, nByte); - if( zRet ){ - int i; - for(i=0; izIdx==0 ); - if( p->rc==SQLITE_OK ){ - const char *zSep = "PRIMARY KEY("; - sqlite3_stmt *pXList = 0; /* PRAGMA index_list = (pIter->zTbl) */ - sqlite3_stmt *pXInfo = 0; /* PRAGMA index_xinfo = */ - - p->rc = prepareFreeAndCollectError(p->dbMain, &pXList, &p->zErrmsg, - sqlite3_mprintf("PRAGMA main.index_list = %Q", pIter->zTbl) - ); - while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXList) ){ - const char *zOrig = (const char*)sqlite3_column_text(pXList,3); - if( zOrig && strcmp(zOrig, "pk")==0 ){ - const char *zIdx = (const char*)sqlite3_column_text(pXList,1); - if( zIdx ){ - p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, - sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", zIdx) - ); - } - break; - } - } - rbuFinalize(p, pXList); +SQLITE_API sqlite3_int64 sqlite3rbu_temp_size_limit(sqlite3rbu*, sqlite3_int64); - while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ - if( sqlite3_column_int(pXInfo, 5) ){ - /* int iCid = sqlite3_column_int(pXInfo, 0); */ - const char *zCol = (const char*)sqlite3_column_text(pXInfo, 2); - const char *zDesc = sqlite3_column_int(pXInfo, 3) ? " DESC" : ""; - z = rbuMPrintf(p, "%z%s\"%w\"%s", z, zSep, zCol, zDesc); - zSep = ", "; - } - } - z = rbuMPrintf(p, "%z)", z); - rbuFinalize(p, pXInfo); - } - return z; -} +/* +** Return the current amount of temp file space, in bytes, currently used by +** the RBU handle passed as the only argument. +*/ +SQLITE_API sqlite3_int64 sqlite3rbu_temp_size(sqlite3rbu*); /* -** This function creates the second imposter table used when writing to -** a table b-tree where the table has an external primary key. If the -** iterator passed as the second argument does not currently point to -** a table (not index) with an external primary key, this function is a -** no-op. +** Internally, each RBU connection uses a separate SQLite database +** connection to access the target and rbu update databases. This +** API allows the application direct access to these database handles. ** -** Assuming the iterator does point to a table with an external PK, this -** function creates a WITHOUT ROWID imposter table named "rbu_imposter2" -** used to access that PK index. For example, if the target table is -** declared as follows: +** The first argument passed to this function must be a valid, open, RBU +** handle. The second argument should be passed zero to access the target +** database handle, or non-zero to access the rbu update database handle. +** Accessing the underlying database handles may be useful in the +** following scenarios: ** -** CREATE TABLE t1(a, b TEXT, c REAL, PRIMARY KEY(b, c)); +** * If any target tables are virtual tables, it may be necessary to +** call sqlite3_create_module() on the target database handle to +** register the required virtual table implementations. ** -** then the imposter table schema is: +** * If the data_xxx tables in the RBU source database are virtual +** tables, the application may need to call sqlite3_create_module() on +** the rbu update db handle to any required virtual table +** implementations. ** -** CREATE TABLE rbu_imposter2(c1 TEXT, c2 REAL, id INTEGER) WITHOUT ROWID; +** * If the application uses the "rbu_delta()" feature described above, +** it must use sqlite3_create_function() or similar to register the +** rbu_delta() implementation with the target database handle. +** +** If an error has occurred, either while opening or stepping the RBU object, +** this function may return NULL. The error code and message may be collected +** when sqlite3rbu_close() is called. ** +** Database handles returned by this function remain valid until the next +** call to any sqlite3rbu_xxx() function other than sqlite3rbu_db(). */ -static void rbuCreateImposterTable2(sqlite3rbu *p, RbuObjIter *pIter){ - if( p->rc==SQLITE_OK && pIter->eType==RBU_PK_EXTERNAL ){ - int tnum = pIter->iPkTnum; /* Root page of PK index */ - sqlite3_stmt *pQuery = 0; /* SELECT name ... WHERE rootpage = $tnum */ - const char *zIdx = 0; /* Name of PK index */ - sqlite3_stmt *pXInfo = 0; /* PRAGMA main.index_xinfo = $zIdx */ - const char *zComma = ""; - char *zCols = 0; /* Used to build up list of table cols */ - char *zPk = 0; /* Used to build up table PK declaration */ - - /* Figure out the name of the primary key index for the current table. - ** This is needed for the argument to "PRAGMA index_xinfo". Set - ** zIdx to point to a nul-terminated string containing this name. */ - p->rc = prepareAndCollectError(p->dbMain, &pQuery, &p->zErrmsg, - "SELECT name FROM sqlite_master WHERE rootpage = ?" - ); - if( p->rc==SQLITE_OK ){ - sqlite3_bind_int(pQuery, 1, tnum); - if( SQLITE_ROW==sqlite3_step(pQuery) ){ - zIdx = (const char*)sqlite3_column_text(pQuery, 0); - } - } - if( zIdx ){ - p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, - sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", zIdx) - ); - } - rbuFinalize(p, pQuery); - - while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ - int bKey = sqlite3_column_int(pXInfo, 5); - if( bKey ){ - int iCid = sqlite3_column_int(pXInfo, 1); - int bDesc = sqlite3_column_int(pXInfo, 3); - const char *zCollate = (const char*)sqlite3_column_text(pXInfo, 4); - zCols = rbuMPrintf(p, "%z%sc%d %s COLLATE %Q", zCols, zComma, - iCid, pIter->azTblType[iCid], zCollate - ); - zPk = rbuMPrintf(p, "%z%sc%d%s", zPk, zComma, iCid, bDesc?" DESC":""); - zComma = ", "; - } - } - zCols = rbuMPrintf(p, "%z, id INTEGER", zCols); - rbuFinalize(p, pXInfo); - - sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 1, tnum); - rbuMPrintfExec(p, p->dbMain, - "CREATE TABLE rbu_imposter2(%z, PRIMARY KEY(%z)) WITHOUT ROWID", - zCols, zPk - ); - sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 0); - } -} +SQLITE_API sqlite3 *sqlite3rbu_db(sqlite3rbu*, int bRbu); /* -** If an error has already occurred when this function is called, it -** immediately returns zero (without doing any work). Or, if an error -** occurs during the execution of this function, it sets the error code -** in the sqlite3rbu object indicated by the first argument and returns -** zero. +** Do some work towards applying the RBU update to the target db. ** -** The iterator passed as the second argument is guaranteed to point to -** a table (not an index) when this function is called. This function -** attempts to create any imposter table required to write to the main -** table b-tree of the table before returning. Non-zero is returned if -** an imposter table are created, or zero otherwise. +** Return SQLITE_DONE if the update has been completely applied, or +** SQLITE_OK if no error occurs but there remains work to do to apply +** the RBU update. If an error does occur, some other error code is +** returned. ** -** An imposter table is required in all cases except RBU_PK_VTAB. Only -** virtual tables are written to directly. The imposter table has the -** same schema as the actual target table (less any UNIQUE constraints). -** More precisely, the "same schema" means the same columns, types, -** collation sequences. For tables that do not have an external PRIMARY -** KEY, it also means the same PRIMARY KEY declaration. +** Once a call to sqlite3rbu_step() has returned a value other than +** SQLITE_OK, all subsequent calls on the same RBU handle are no-ops +** that immediately return the same value. */ -static void rbuCreateImposterTable(sqlite3rbu *p, RbuObjIter *pIter){ - if( p->rc==SQLITE_OK && pIter->eType!=RBU_PK_VTAB ){ - int tnum = pIter->iTnum; - const char *zComma = ""; - char *zSql = 0; - int iCol; - sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 1); - - for(iCol=0; p->rc==SQLITE_OK && iColnTblCol; iCol++){ - const char *zPk = ""; - const char *zCol = pIter->azTblCol[iCol]; - const char *zColl = 0; - - p->rc = sqlite3_table_column_metadata( - p->dbMain, "main", pIter->zTbl, zCol, 0, &zColl, 0, 0, 0 - ); - - if( pIter->eType==RBU_PK_IPK && pIter->abTblPk[iCol] ){ - /* If the target table column is an "INTEGER PRIMARY KEY", add - ** "PRIMARY KEY" to the imposter table column declaration. */ - zPk = "PRIMARY KEY "; - } - zSql = rbuMPrintf(p, "%z%s\"%w\" %s %sCOLLATE %Q%s", - zSql, zComma, zCol, pIter->azTblType[iCol], zPk, zColl, - (pIter->abNotNull[iCol] ? " NOT NULL" : "") - ); - zComma = ", "; - } - - if( pIter->eType==RBU_PK_WITHOUT_ROWID ){ - char *zPk = rbuWithoutRowidPK(p, pIter); - if( zPk ){ - zSql = rbuMPrintf(p, "%z, %z", zSql, zPk); - } - } - - sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 1, tnum); - rbuMPrintfExec(p, p->dbMain, "CREATE TABLE \"rbu_imp_%w\"(%z)%s", - pIter->zTbl, zSql, - (pIter->eType==RBU_PK_WITHOUT_ROWID ? " WITHOUT ROWID" : "") - ); - sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 0); - } -} +SQLITE_API int sqlite3rbu_step(sqlite3rbu *pRbu); /* -** Prepare a statement used to insert rows into the "rbu_tmp_xxx" table. -** Specifically a statement of the form: +** Force RBU to save its state to disk. ** -** INSERT INTO rbu_tmp_xxx VALUES(?, ?, ? ...); +** If a power failure or application crash occurs during an update, following +** system recovery RBU may resume the update from the point at which the state +** was last saved. In other words, from the most recent successful call to +** sqlite3rbu_close() or this function. ** -** The number of bound variables is equal to the number of columns in -** the target table, plus one (for the rbu_control column), plus one more -** (for the rbu_rowid column) if the target table is an implicit IPK or -** virtual table. +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. */ -static void rbuObjIterPrepareTmpInsert( - sqlite3rbu *p, - RbuObjIter *pIter, - const char *zCollist, - const char *zRbuRowid -){ - int bRbuRowid = (pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE); - char *zBind = rbuObjIterGetBindlist(p, pIter->nTblCol + 1 + bRbuRowid); - if( zBind ){ - assert( pIter->pTmpInsert==0 ); - p->rc = prepareFreeAndCollectError( - p->dbRbu, &pIter->pTmpInsert, &p->zErrmsg, sqlite3_mprintf( - "INSERT INTO %s.'rbu_tmp_%q'(rbu_control,%s%s) VALUES(%z)", - p->zStateDb, pIter->zDataTbl, zCollist, zRbuRowid, zBind - )); - } -} - -static void rbuTmpInsertFunc( - sqlite3_context *pCtx, - int nVal, - sqlite3_value **apVal -){ - sqlite3rbu *p = sqlite3_user_data(pCtx); - int rc = SQLITE_OK; - int i; - - assert( sqlite3_value_int(apVal[0])!=0 - || p->objiter.eType==RBU_PK_EXTERNAL - || p->objiter.eType==RBU_PK_NONE - ); - if( sqlite3_value_int(apVal[0])!=0 ){ - p->nPhaseOneStep += p->objiter.nIndex; - } - - for(i=0; rc==SQLITE_OK && iobjiter.pTmpInsert, i+1, apVal[i]); - } - if( rc==SQLITE_OK ){ - sqlite3_step(p->objiter.pTmpInsert); - rc = sqlite3_reset(p->objiter.pTmpInsert); - } - - if( rc!=SQLITE_OK ){ - sqlite3_result_error_code(pCtx, rc); - } -} +SQLITE_API int sqlite3rbu_savestate(sqlite3rbu *pRbu); /* -** Ensure that the SQLite statement handles required to update the -** target database object currently indicated by the iterator passed -** as the second argument are available. +** Close an RBU handle. +** +** If the RBU update has been completely applied, mark the RBU database +** as fully applied. Otherwise, assuming no error has occurred, save the +** current state of the RBU update appliation to the RBU database. +** +** If an error has already occurred as part of an sqlite3rbu_step() +** or sqlite3rbu_open() call, or if one occurs within this function, an +** SQLite error code is returned. Additionally, if pzErrmsg is not NULL, +** *pzErrmsg may be set to point to a buffer containing a utf-8 formatted +** English language error message. It is the responsibility of the caller to +** eventually free any such buffer using sqlite3_free(). +** +** Otherwise, if no error occurs, this function returns SQLITE_OK if the +** update has been partially applied, or SQLITE_DONE if it has been +** completely applied. */ -static int rbuObjIterPrepareAll( - sqlite3rbu *p, - RbuObjIter *pIter, - int nOffset /* Add "LIMIT -1 OFFSET $nOffset" to SELECT */ -){ - assert( pIter->bCleanup==0 ); - if( pIter->pSelect==0 && rbuObjIterCacheTableInfo(p, pIter)==SQLITE_OK ){ - const int tnum = pIter->iTnum; - char *zCollist = 0; /* List of indexed columns */ - char **pz = &p->zErrmsg; - const char *zIdx = pIter->zIdx; - char *zLimit = 0; - - if( nOffset ){ - zLimit = sqlite3_mprintf(" LIMIT -1 OFFSET %d", nOffset); - if( !zLimit ) p->rc = SQLITE_NOMEM; - } - - if( zIdx ){ - const char *zTbl = pIter->zTbl; - char *zImposterCols = 0; /* Columns for imposter table */ - char *zImposterPK = 0; /* Primary key declaration for imposter */ - char *zWhere = 0; /* WHERE clause on PK columns */ - char *zBind = 0; - int nBind = 0; - - assert( pIter->eType!=RBU_PK_VTAB ); - zCollist = rbuObjIterGetIndexCols( - p, pIter, &zImposterCols, &zImposterPK, &zWhere, &nBind - ); - zBind = rbuObjIterGetBindlist(p, nBind); - - /* Create the imposter table used to write to this index. */ - sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 1); - sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 1,tnum); - rbuMPrintfExec(p, p->dbMain, - "CREATE TABLE \"rbu_imp_%w\"( %s, PRIMARY KEY( %s ) ) WITHOUT ROWID", - zTbl, zImposterCols, zImposterPK - ); - sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 0); - - /* Create the statement to insert index entries */ - pIter->nCol = nBind; - if( p->rc==SQLITE_OK ){ - p->rc = prepareFreeAndCollectError( - p->dbMain, &pIter->pInsert, &p->zErrmsg, - sqlite3_mprintf("INSERT INTO \"rbu_imp_%w\" VALUES(%s)", zTbl, zBind) - ); - } - - /* And to delete index entries */ - if( rbuIsVacuum(p)==0 && p->rc==SQLITE_OK ){ - p->rc = prepareFreeAndCollectError( - p->dbMain, &pIter->pDelete, &p->zErrmsg, - sqlite3_mprintf("DELETE FROM \"rbu_imp_%w\" WHERE %s", zTbl, zWhere) - ); - } - - /* Create the SELECT statement to read keys in sorted order */ - if( p->rc==SQLITE_OK ){ - char *zSql; - if( rbuIsVacuum(p) ){ - zSql = sqlite3_mprintf( - "SELECT %s, 0 AS rbu_control FROM '%q' ORDER BY %s%s", - zCollist, - pIter->zDataTbl, - zCollist, zLimit - ); - }else - - if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){ - zSql = sqlite3_mprintf( - "SELECT %s, rbu_control FROM %s.'rbu_tmp_%q' ORDER BY %s%s", - zCollist, p->zStateDb, pIter->zDataTbl, - zCollist, zLimit - ); - }else{ - zSql = sqlite3_mprintf( - "SELECT %s, rbu_control FROM %s.'rbu_tmp_%q' " - "UNION ALL " - "SELECT %s, rbu_control FROM '%q' " - "WHERE typeof(rbu_control)='integer' AND rbu_control!=1 " - "ORDER BY %s%s", - zCollist, p->zStateDb, pIter->zDataTbl, - zCollist, pIter->zDataTbl, - zCollist, zLimit - ); - } - p->rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pSelect, pz, zSql); - } - - sqlite3_free(zImposterCols); - sqlite3_free(zImposterPK); - sqlite3_free(zWhere); - sqlite3_free(zBind); - }else{ - int bRbuRowid = (pIter->eType==RBU_PK_VTAB) - ||(pIter->eType==RBU_PK_NONE) - ||(pIter->eType==RBU_PK_EXTERNAL && rbuIsVacuum(p)); - const char *zTbl = pIter->zTbl; /* Table this step applies to */ - const char *zWrite; /* Imposter table name */ - - char *zBindings = rbuObjIterGetBindlist(p, pIter->nTblCol + bRbuRowid); - char *zWhere = rbuObjIterGetWhere(p, pIter); - char *zOldlist = rbuObjIterGetOldlist(p, pIter, "old"); - char *zNewlist = rbuObjIterGetOldlist(p, pIter, "new"); - - zCollist = rbuObjIterGetCollist(p, pIter); - pIter->nCol = pIter->nTblCol; - - /* Create the imposter table or tables (if required). */ - rbuCreateImposterTable(p, pIter); - rbuCreateImposterTable2(p, pIter); - zWrite = (pIter->eType==RBU_PK_VTAB ? "" : "rbu_imp_"); - - /* Create the INSERT statement to write to the target PK b-tree */ - if( p->rc==SQLITE_OK ){ - p->rc = prepareFreeAndCollectError(p->dbMain, &pIter->pInsert, pz, - sqlite3_mprintf( - "INSERT INTO \"%s%w\"(%s%s) VALUES(%s)", - zWrite, zTbl, zCollist, (bRbuRowid ? ", _rowid_" : ""), zBindings - ) - ); - } - - /* Create the DELETE statement to write to the target PK b-tree. - ** Because it only performs INSERT operations, this is not required for - ** an rbu vacuum handle. */ - if( rbuIsVacuum(p)==0 && p->rc==SQLITE_OK ){ - p->rc = prepareFreeAndCollectError(p->dbMain, &pIter->pDelete, pz, - sqlite3_mprintf( - "DELETE FROM \"%s%w\" WHERE %s", zWrite, zTbl, zWhere - ) - ); - } - - if( rbuIsVacuum(p)==0 && pIter->abIndexed ){ - const char *zRbuRowid = ""; - if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){ - zRbuRowid = ", rbu_rowid"; - } - - /* Create the rbu_tmp_xxx table and the triggers to populate it. */ - rbuMPrintfExec(p, p->dbRbu, - "CREATE TABLE IF NOT EXISTS %s.'rbu_tmp_%q' AS " - "SELECT *%s FROM '%q' WHERE 0;" - , p->zStateDb, pIter->zDataTbl - , (pIter->eType==RBU_PK_EXTERNAL ? ", 0 AS rbu_rowid" : "") - , pIter->zDataTbl - ); - - rbuMPrintfExec(p, p->dbMain, - "CREATE TEMP TRIGGER rbu_delete_tr BEFORE DELETE ON \"%s%w\" " - "BEGIN " - " SELECT rbu_tmp_insert(3, %s);" - "END;" - - "CREATE TEMP TRIGGER rbu_update1_tr BEFORE UPDATE ON \"%s%w\" " - "BEGIN " - " SELECT rbu_tmp_insert(3, %s);" - "END;" - - "CREATE TEMP TRIGGER rbu_update2_tr AFTER UPDATE ON \"%s%w\" " - "BEGIN " - " SELECT rbu_tmp_insert(4, %s);" - "END;", - zWrite, zTbl, zOldlist, - zWrite, zTbl, zOldlist, - zWrite, zTbl, zNewlist - ); - - if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){ - rbuMPrintfExec(p, p->dbMain, - "CREATE TEMP TRIGGER rbu_insert_tr AFTER INSERT ON \"%s%w\" " - "BEGIN " - " SELECT rbu_tmp_insert(0, %s);" - "END;", - zWrite, zTbl, zNewlist - ); - } - - rbuObjIterPrepareTmpInsert(p, pIter, zCollist, zRbuRowid); - } - - /* Create the SELECT statement to read keys from data_xxx */ - if( p->rc==SQLITE_OK ){ - const char *zRbuRowid = ""; - if( bRbuRowid ){ - zRbuRowid = rbuIsVacuum(p) ? ",_rowid_ " : ",rbu_rowid"; - } - p->rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pSelect, pz, - sqlite3_mprintf( - "SELECT %s,%s rbu_control%s FROM '%q'%s", - zCollist, - (rbuIsVacuum(p) ? "0 AS " : ""), - zRbuRowid, - pIter->zDataTbl, zLimit - ) - ); - } - - sqlite3_free(zWhere); - sqlite3_free(zOldlist); - sqlite3_free(zNewlist); - sqlite3_free(zBindings); - } - sqlite3_free(zCollist); - sqlite3_free(zLimit); - } - - return p->rc; -} +SQLITE_API int sqlite3rbu_close(sqlite3rbu *pRbu, char **pzErrmsg); /* -** Set output variable *ppStmt to point to an UPDATE statement that may -** be used to update the imposter table for the main table b-tree of the -** table object that pIter currently points to, assuming that the -** rbu_control column of the data_xyz table contains zMask. -** -** If the zMask string does not specify any columns to update, then this -** is not an error. Output variable *ppStmt is set to NULL in this case. +** Return the total number of key-value operations (inserts, deletes or +** updates) that have been performed on the target database since the +** current RBU update was started. */ -static int rbuGetUpdateStmt( - sqlite3rbu *p, /* RBU handle */ - RbuObjIter *pIter, /* Object iterator */ - const char *zMask, /* rbu_control value ('x.x.') */ - sqlite3_stmt **ppStmt /* OUT: UPDATE statement handle */ -){ - RbuUpdateStmt **pp; - RbuUpdateStmt *pUp = 0; - int nUp = 0; - - /* In case an error occurs */ - *ppStmt = 0; - - /* Search for an existing statement. If one is found, shift it to the front - ** of the LRU queue and return immediately. Otherwise, leave nUp pointing - ** to the number of statements currently in the cache and pUp to the - ** last object in the list. */ - for(pp=&pIter->pRbuUpdate; *pp; pp=&((*pp)->pNext)){ - pUp = *pp; - if( strcmp(pUp->zMask, zMask)==0 ){ - *pp = pUp->pNext; - pUp->pNext = pIter->pRbuUpdate; - pIter->pRbuUpdate = pUp; - *ppStmt = pUp->pUpdate; - return SQLITE_OK; - } - nUp++; - } - assert( pUp==0 || pUp->pNext==0 ); - - if( nUp>=SQLITE_RBU_UPDATE_CACHESIZE ){ - for(pp=&pIter->pRbuUpdate; *pp!=pUp; pp=&((*pp)->pNext)); - *pp = 0; - sqlite3_finalize(pUp->pUpdate); - pUp->pUpdate = 0; - }else{ - pUp = (RbuUpdateStmt*)rbuMalloc(p, sizeof(RbuUpdateStmt)+pIter->nTblCol+1); - } - - if( pUp ){ - char *zWhere = rbuObjIterGetWhere(p, pIter); - char *zSet = rbuObjIterGetSetlist(p, pIter, zMask); - char *zUpdate = 0; - - pUp->zMask = (char*)&pUp[1]; - memcpy(pUp->zMask, zMask, pIter->nTblCol); - pUp->pNext = pIter->pRbuUpdate; - pIter->pRbuUpdate = pUp; - - if( zSet ){ - const char *zPrefix = ""; - - if( pIter->eType!=RBU_PK_VTAB ) zPrefix = "rbu_imp_"; - zUpdate = sqlite3_mprintf("UPDATE \"%s%w\" SET %s WHERE %s", - zPrefix, pIter->zTbl, zSet, zWhere - ); - p->rc = prepareFreeAndCollectError( - p->dbMain, &pUp->pUpdate, &p->zErrmsg, zUpdate - ); - *ppStmt = pUp->pUpdate; - } - sqlite3_free(zWhere); - sqlite3_free(zSet); - } - - return p->rc; -} - -static sqlite3 *rbuOpenDbhandle( - sqlite3rbu *p, - const char *zName, - int bUseVfs -){ - sqlite3 *db = 0; - if( p->rc==SQLITE_OK ){ - const int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_URI; - p->rc = sqlite3_open_v2(zName, &db, flags, bUseVfs ? p->zVfsName : 0); - if( p->rc ){ - p->zErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); - sqlite3_close(db); - db = 0; - } - } - return db; -} +SQLITE_API sqlite3_int64 sqlite3rbu_progress(sqlite3rbu *pRbu); /* -** Free an RbuState object allocated by rbuLoadState(). +** Obtain permyriadage (permyriadage is to 10000 as percentage is to 100) +** progress indications for the two stages of an RBU update. This API may +** be useful for driving GUI progress indicators and similar. +** +** An RBU update is divided into two stages: +** +** * Stage 1, in which changes are accumulated in an oal/wal file, and +** * Stage 2, in which the contents of the wal file are copied into the +** main database. +** +** The update is visible to non-RBU clients during stage 2. During stage 1 +** non-RBU reader clients may see the original database. +** +** If this API is called during stage 2 of the update, output variable +** (*pnOne) is set to 10000 to indicate that stage 1 has finished and (*pnTwo) +** to a value between 0 and 10000 to indicate the permyriadage progress of +** stage 2. A value of 5000 indicates that stage 2 is half finished, +** 9000 indicates that it is 90% finished, and so on. +** +** If this API is called during stage 1 of the update, output variable +** (*pnTwo) is set to 0 to indicate that stage 2 has not yet started. The +** value to which (*pnOne) is set depends on whether or not the RBU +** database contains an "rbu_count" table. The rbu_count table, if it +** exists, must contain the same columns as the following: +** +** CREATE TABLE rbu_count(tbl TEXT PRIMARY KEY, cnt INTEGER) WITHOUT ROWID; +** +** There must be one row in the table for each source (data_xxx) table within +** the RBU database. The 'tbl' column should contain the name of the source +** table. The 'cnt' column should contain the number of rows within the +** source table. +** +** If the rbu_count table is present and populated correctly and this +** API is called during stage 1, the *pnOne output variable is set to the +** permyriadage progress of the same stage. If the rbu_count table does +** not exist, then (*pnOne) is set to -1 during stage 1. If the rbu_count +** table exists but is not correctly populated, the value of the *pnOne +** output variable during stage 1 is undefined. */ -static void rbuFreeState(RbuState *p){ - if( p ){ - sqlite3_free(p->zTbl); - sqlite3_free(p->zDataTbl); - sqlite3_free(p->zIdx); - sqlite3_free(p); - } -} +SQLITE_API void sqlite3rbu_bp_progress(sqlite3rbu *pRbu, int *pnOne, int*pnTwo); /* -** Allocate an RbuState object and load the contents of the rbu_state -** table into it. Return a pointer to the new object. It is the -** responsibility of the caller to eventually free the object using -** sqlite3_free(). +** Obtain an indication as to the current stage of an RBU update or vacuum. +** This function always returns one of the SQLITE_RBU_STATE_XXX constants +** defined in this file. Return values should be interpreted as follows: ** -** If an error occurs, leave an error code and message in the rbu handle -** and return NULL. +** SQLITE_RBU_STATE_OAL: +** RBU is currently building a *-oal file. The next call to sqlite3rbu_step() +** may either add further data to the *-oal file, or compute data that will +** be added by a subsequent call. +** +** SQLITE_RBU_STATE_MOVE: +** RBU has finished building the *-oal file. The next call to sqlite3rbu_step() +** will move the *-oal file to the equivalent *-wal path. If the current +** operation is an RBU update, then the updated version of the database +** file will become visible to ordinary SQLite clients following the next +** call to sqlite3rbu_step(). +** +** SQLITE_RBU_STATE_CHECKPOINT: +** RBU is currently performing an incremental checkpoint. The next call to +** sqlite3rbu_step() will copy a page of data from the *-wal file into +** the target database file. +** +** SQLITE_RBU_STATE_DONE: +** The RBU operation has finished. Any subsequent calls to sqlite3rbu_step() +** will immediately return SQLITE_DONE. +** +** SQLITE_RBU_STATE_ERROR: +** An error has occurred. Any subsequent calls to sqlite3rbu_step() will +** immediately return the SQLite error code associated with the error. */ -static RbuState *rbuLoadState(sqlite3rbu *p){ - RbuState *pRet = 0; - sqlite3_stmt *pStmt = 0; - int rc; - int rc2; - - pRet = (RbuState*)rbuMalloc(p, sizeof(RbuState)); - if( pRet==0 ) return 0; - - rc = prepareFreeAndCollectError(p->dbRbu, &pStmt, &p->zErrmsg, - sqlite3_mprintf("SELECT k, v FROM %s.rbu_state", p->zStateDb) - ); - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ - switch( sqlite3_column_int(pStmt, 0) ){ - case RBU_STATE_STAGE: - pRet->eStage = sqlite3_column_int(pStmt, 1); - if( pRet->eStage!=RBU_STAGE_OAL - && pRet->eStage!=RBU_STAGE_MOVE - && pRet->eStage!=RBU_STAGE_CKPT - ){ - p->rc = SQLITE_CORRUPT; - } - break; - - case RBU_STATE_TBL: - pRet->zTbl = rbuStrndup((char*)sqlite3_column_text(pStmt, 1), &rc); - break; - - case RBU_STATE_IDX: - pRet->zIdx = rbuStrndup((char*)sqlite3_column_text(pStmt, 1), &rc); - break; +#define SQLITE_RBU_STATE_OAL 1 +#define SQLITE_RBU_STATE_MOVE 2 +#define SQLITE_RBU_STATE_CHECKPOINT 3 +#define SQLITE_RBU_STATE_DONE 4 +#define SQLITE_RBU_STATE_ERROR 5 - case RBU_STATE_ROW: - pRet->nRow = sqlite3_column_int(pStmt, 1); - break; +SQLITE_API int sqlite3rbu_state(sqlite3rbu *pRbu); - case RBU_STATE_PROGRESS: - pRet->nProgress = sqlite3_column_int64(pStmt, 1); - break; +/* +** Create an RBU VFS named zName that accesses the underlying file-system +** via existing VFS zParent. Or, if the zParent parameter is passed NULL, +** then the new RBU VFS uses the default system VFS to access the file-system. +** The new object is registered as a non-default VFS with SQLite before +** returning. +** +** Part of the RBU implementation uses a custom VFS object. Usually, this +** object is created and deleted automatically by RBU. +** +** The exception is for applications that also use zipvfs. In this case, +** the custom VFS must be explicitly created by the user before the RBU +** handle is opened. The RBU VFS should be installed so that the zipvfs +** VFS uses the RBU VFS, which in turn uses any other VFS layers in use +** (for example multiplexor) to access the file-system. For example, +** to assemble an RBU enabled VFS stack that uses both zipvfs and +** multiplexor (error checking omitted): +** +** // Create a VFS named "multiplex" (not the default). +** sqlite3_multiplex_initialize(0, 0); +** +** // Create an rbu VFS named "rbu" that uses multiplexor. If the +** // second argument were replaced with NULL, the "rbu" VFS would +** // access the file-system via the system default VFS, bypassing the +** // multiplexor. +** sqlite3rbu_create_vfs("rbu", "multiplex"); +** +** // Create a zipvfs VFS named "zipvfs" that uses rbu. +** zipvfs_create_vfs_v3("zipvfs", "rbu", 0, xCompressorAlgorithmDetector); +** +** // Make zipvfs the default VFS. +** sqlite3_vfs_register(sqlite3_vfs_find("zipvfs"), 1); +** +** Because the default VFS created above includes a RBU functionality, it +** may be used by RBU clients. Attempting to use RBU with a zipvfs VFS stack +** that does not include the RBU layer results in an error. +** +** The overhead of adding the "rbu" VFS to the system is negligible for +** non-RBU users. There is no harm in an application accessing the +** file-system via "rbu" all the time, even if it only uses RBU functionality +** occasionally. +*/ +SQLITE_API int sqlite3rbu_create_vfs(const char *zName, const char *zParent); - case RBU_STATE_CKPT: - pRet->iWalCksum = sqlite3_column_int64(pStmt, 1); - break; +/* +** Deregister and destroy an RBU vfs created by an earlier call to +** sqlite3rbu_create_vfs(). +** +** VFS objects are not reference counted. If a VFS object is destroyed +** before all database handles that use it have been closed, the results +** are undefined. +*/ +SQLITE_API void sqlite3rbu_destroy_vfs(const char *zName); - case RBU_STATE_COOKIE: - pRet->iCookie = (u32)sqlite3_column_int64(pStmt, 1); - break; +#if 0 +} /* end of the 'extern "C"' block */ +#endif - case RBU_STATE_OALSZ: - pRet->iOalSz = (u32)sqlite3_column_int64(pStmt, 1); - break; +#endif /* _SQLITE3RBU_H */ - case RBU_STATE_PHASEONESTEP: - pRet->nPhaseOneStep = sqlite3_column_int64(pStmt, 1); - break; +/************** End of sqlite3rbu.h ******************************************/ +/************** Continuing where we left off in sqlite3rbu.c *****************/ - case RBU_STATE_DATATBL: - pRet->zDataTbl = rbuStrndup((char*)sqlite3_column_text(pStmt, 1), &rc); - break; +#if defined(_WIN32_WCE) +/* #include "windows.h" */ +#endif - default: - rc = SQLITE_CORRUPT; - break; - } - } - rc2 = sqlite3_finalize(pStmt); - if( rc==SQLITE_OK ) rc = rc2; +/* Maximum number of prepared UPDATE statements held by this module */ +#define SQLITE_RBU_UPDATE_CACHESIZE 16 - p->rc = rc; - return pRet; -} +/* Delta checksums disabled by default. Compile with -DRBU_ENABLE_DELTA_CKSUM +** to enable checksum verification. +*/ +#ifndef RBU_ENABLE_DELTA_CKSUM +# define RBU_ENABLE_DELTA_CKSUM 0 +#endif +/* +** Swap two objects of type TYPE. +*/ +#if !defined(SQLITE_AMALGAMATION) +# define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} +#endif /* -** Open the database handle and attach the RBU database as "rbu". If an -** error occurs, leave an error code and message in the RBU handle. +** The rbu_state table is used to save the state of a partially applied +** update so that it can be resumed later. The table consists of integer +** keys mapped to values as follows: +** +** RBU_STATE_STAGE: +** May be set to integer values 1, 2, 4 or 5. As follows: +** 1: the *-rbu file is currently under construction. +** 2: the *-rbu file has been constructed, but not yet moved +** to the *-wal path. +** 4: the checkpoint is underway. +** 5: the rbu update has been checkpointed. +** +** RBU_STATE_TBL: +** Only valid if STAGE==1. The target database name of the table +** currently being written. +** +** RBU_STATE_IDX: +** Only valid if STAGE==1. The target database name of the index +** currently being written, or NULL if the main table is currently being +** updated. +** +** RBU_STATE_ROW: +** Only valid if STAGE==1. Number of rows already processed for the current +** table/index. +** +** RBU_STATE_PROGRESS: +** Trbul number of sqlite3rbu_step() calls made so far as part of this +** rbu update. +** +** RBU_STATE_CKPT: +** Valid if STAGE==4. The 64-bit checksum associated with the wal-index +** header created by recovering the *-wal file. This is used to detect +** cases when another client appends frames to the *-wal file in the +** middle of an incremental checkpoint (an incremental checkpoint cannot +** be continued if this happens). +** +** RBU_STATE_COOKIE: +** Valid if STAGE==1. The current change-counter cookie value in the +** target db file. +** +** RBU_STATE_OALSZ: +** Valid if STAGE==1. The size in bytes of the *-oal file. +** +** RBU_STATE_DATATBL: +** Only valid if STAGE==1. The RBU database name of the table +** currently being read. */ -static void rbuOpenDatabase(sqlite3rbu *p, int *pbRetry){ - assert( p->rc || (p->dbMain==0 && p->dbRbu==0) ); - assert( p->rc || rbuIsVacuum(p) || p->zTarget!=0 ); +#define RBU_STATE_STAGE 1 +#define RBU_STATE_TBL 2 +#define RBU_STATE_IDX 3 +#define RBU_STATE_ROW 4 +#define RBU_STATE_PROGRESS 5 +#define RBU_STATE_CKPT 6 +#define RBU_STATE_COOKIE 7 +#define RBU_STATE_OALSZ 8 +#define RBU_STATE_PHASEONESTEP 9 +#define RBU_STATE_DATATBL 10 - /* Open the RBU database */ - p->dbRbu = rbuOpenDbhandle(p, p->zRbu, 1); +#define RBU_STAGE_OAL 1 +#define RBU_STAGE_MOVE 2 +#define RBU_STAGE_CAPTURE 3 +#define RBU_STAGE_CKPT 4 +#define RBU_STAGE_DONE 5 - if( p->rc==SQLITE_OK && rbuIsVacuum(p) ){ - sqlite3_file_control(p->dbRbu, "main", SQLITE_FCNTL_RBUCNT, (void*)p); - if( p->zState==0 ){ - const char *zFile = sqlite3_db_filename(p->dbRbu, "main"); - p->zState = rbuMPrintf(p, "file://%s-vacuum?modeof=%s", zFile, zFile); - } - } - /* If using separate RBU and state databases, attach the state database to - ** the RBU db handle now. */ - if( p->zState ){ - rbuMPrintfExec(p, p->dbRbu, "ATTACH %Q AS stat", p->zState); - memcpy(p->zStateDb, "stat", 4); - }else{ - memcpy(p->zStateDb, "main", 4); - } +#define RBU_CREATE_STATE \ + "CREATE TABLE IF NOT EXISTS %s.rbu_state(k INTEGER PRIMARY KEY, v)" -#if 0 - if( p->rc==SQLITE_OK && rbuIsVacuum(p) ){ - p->rc = sqlite3_exec(p->dbRbu, "BEGIN", 0, 0, 0); - } +typedef struct RbuFrame RbuFrame; +typedef struct RbuObjIter RbuObjIter; +typedef struct RbuState RbuState; +typedef struct rbu_vfs rbu_vfs; +typedef struct rbu_file rbu_file; +typedef struct RbuUpdateStmt RbuUpdateStmt; + +#if !defined(SQLITE_AMALGAMATION) +typedef unsigned int u32; +typedef unsigned short u16; +typedef unsigned char u8; +typedef sqlite3_int64 i64; #endif - /* If it has not already been created, create the rbu_state table */ - rbuMPrintfExec(p, p->dbRbu, RBU_CREATE_STATE, p->zStateDb); +/* +** These values must match the values defined in wal.c for the equivalent +** locks. These are not magic numbers as they are part of the SQLite file +** format. +*/ +#define WAL_LOCK_WRITE 0 +#define WAL_LOCK_CKPT 1 +#define WAL_LOCK_READ0 3 -#if 0 - if( rbuIsVacuum(p) ){ - if( p->rc==SQLITE_OK ){ - int rc2; - int bOk = 0; - sqlite3_stmt *pCnt = 0; - p->rc = prepareAndCollectError(p->dbRbu, &pCnt, &p->zErrmsg, - "SELECT count(*) FROM stat.sqlite_master" - ); - if( p->rc==SQLITE_OK - && sqlite3_step(pCnt)==SQLITE_ROW - && 1==sqlite3_column_int(pCnt, 0) - ){ - bOk = 1; - } - rc2 = sqlite3_finalize(pCnt); - if( p->rc==SQLITE_OK ) p->rc = rc2; +#define SQLITE_FCNTL_RBUCNT 5149216 - if( p->rc==SQLITE_OK && bOk==0 ){ - p->rc = SQLITE_ERROR; - p->zErrmsg = sqlite3_mprintf("invalid state database"); - } - - if( p->rc==SQLITE_OK ){ - p->rc = sqlite3_exec(p->dbRbu, "COMMIT", 0, 0, 0); - } - } - } -#endif +/* +** A structure to store values read from the rbu_state table in memory. +*/ +struct RbuState { + int eStage; + char *zTbl; + char *zDataTbl; + char *zIdx; + i64 iWalCksum; + int nRow; + i64 nProgress; + u32 iCookie; + i64 iOalSz; + i64 nPhaseOneStep; +}; - if( p->rc==SQLITE_OK && rbuIsVacuum(p) ){ - int bOpen = 0; - int rc; - p->nRbu = 0; - p->pRbuFd = 0; - rc = sqlite3_file_control(p->dbRbu, "main", SQLITE_FCNTL_RBUCNT, (void*)p); - if( rc!=SQLITE_NOTFOUND ) p->rc = rc; - if( p->eStage>=RBU_STAGE_MOVE ){ - bOpen = 1; - }else{ - RbuState *pState = rbuLoadState(p); - if( pState ){ - bOpen = (pState->eStage>=RBU_STAGE_MOVE); - rbuFreeState(pState); - } - } - if( bOpen ) p->dbMain = rbuOpenDbhandle(p, p->zRbu, p->nRbu<=1); - } +struct RbuUpdateStmt { + char *zMask; /* Copy of update mask used with pUpdate */ + sqlite3_stmt *pUpdate; /* Last update statement (or NULL) */ + RbuUpdateStmt *pNext; +}; - p->eStage = 0; - if( p->rc==SQLITE_OK && p->dbMain==0 ){ - if( !rbuIsVacuum(p) ){ - p->dbMain = rbuOpenDbhandle(p, p->zTarget, 1); - }else if( p->pRbuFd->pWalFd ){ - if( pbRetry ){ - p->pRbuFd->bNolock = 0; - sqlite3_close(p->dbRbu); - sqlite3_close(p->dbMain); - p->dbMain = 0; - p->dbRbu = 0; - *pbRetry = 1; - return; - } - p->rc = SQLITE_ERROR; - p->zErrmsg = sqlite3_mprintf("cannot vacuum wal mode database"); - }else{ - char *zTarget; - char *zExtra = 0; - if( strlen(p->zRbu)>=5 && 0==memcmp("file:", p->zRbu, 5) ){ - zExtra = &p->zRbu[5]; - while( *zExtra ){ - if( *zExtra++=='?' ) break; - } - if( *zExtra=='\0' ) zExtra = 0; - } +/* +** An iterator of this type is used to iterate through all objects in +** the target database that require updating. For each such table, the +** iterator visits, in order: +** +** * the table itself, +** * each index of the table (zero or more points to visit), and +** * a special "cleanup table" state. +** +** abIndexed: +** If the table has no indexes on it, abIndexed is set to NULL. Otherwise, +** it points to an array of flags nTblCol elements in size. The flag is +** set for each column that is either a part of the PK or a part of an +** index. Or clear otherwise. +** +*/ +struct RbuObjIter { + sqlite3_stmt *pTblIter; /* Iterate through tables */ + sqlite3_stmt *pIdxIter; /* Index iterator */ + int nTblCol; /* Size of azTblCol[] array */ + char **azTblCol; /* Array of unquoted target column names */ + char **azTblType; /* Array of target column types */ + int *aiSrcOrder; /* src table col -> target table col */ + u8 *abTblPk; /* Array of flags, set on target PK columns */ + u8 *abNotNull; /* Array of flags, set on NOT NULL columns */ + u8 *abIndexed; /* Array of flags, set on indexed & PK cols */ + int eType; /* Table type - an RBU_PK_XXX value */ - zTarget = sqlite3_mprintf("file:%s-vacuum?rbu_memory=1%s%s", - sqlite3_db_filename(p->dbRbu, "main"), - (zExtra==0 ? "" : "&"), (zExtra==0 ? "" : zExtra) - ); + /* Output variables. zTbl==0 implies EOF. */ + int bCleanup; /* True in "cleanup" state */ + const char *zTbl; /* Name of target db table */ + const char *zDataTbl; /* Name of rbu db table (or null) */ + const char *zIdx; /* Name of target db index (or null) */ + int iTnum; /* Root page of current object */ + int iPkTnum; /* If eType==EXTERNAL, root of PK index */ + int bUnique; /* Current index is unique */ + int nIndex; /* Number of aux. indexes on table zTbl */ - if( zTarget==0 ){ - p->rc = SQLITE_NOMEM; - return; - } - p->dbMain = rbuOpenDbhandle(p, zTarget, p->nRbu<=1); - sqlite3_free(zTarget); - } - } + /* Statements created by rbuObjIterPrepareAll() */ + int nCol; /* Number of columns in current object */ + sqlite3_stmt *pSelect; /* Source data */ + sqlite3_stmt *pInsert; /* Statement for INSERT operations */ + sqlite3_stmt *pDelete; /* Statement for DELETE ops */ + sqlite3_stmt *pTmpInsert; /* Insert into rbu_tmp_$zDataTbl */ - if( p->rc==SQLITE_OK ){ - p->rc = sqlite3_create_function(p->dbMain, - "rbu_tmp_insert", -1, SQLITE_UTF8, (void*)p, rbuTmpInsertFunc, 0, 0 - ); - } + /* Last UPDATE used (for PK b-tree updates only), or NULL. */ + RbuUpdateStmt *pRbuUpdate; +}; - if( p->rc==SQLITE_OK ){ - p->rc = sqlite3_create_function(p->dbMain, - "rbu_fossil_delta", 2, SQLITE_UTF8, 0, rbuFossilDeltaFunc, 0, 0 - ); - } +/* +** Values for RbuObjIter.eType +** +** 0: Table does not exist (error) +** 1: Table has an implicit rowid. +** 2: Table has an explicit IPK column. +** 3: Table has an external PK index. +** 4: Table is WITHOUT ROWID. +** 5: Table is a virtual table. +*/ +#define RBU_PK_NOTABLE 0 +#define RBU_PK_NONE 1 +#define RBU_PK_IPK 2 +#define RBU_PK_EXTERNAL 3 +#define RBU_PK_WITHOUT_ROWID 4 +#define RBU_PK_VTAB 5 - if( p->rc==SQLITE_OK ){ - p->rc = sqlite3_create_function(p->dbRbu, - "rbu_target_name", -1, SQLITE_UTF8, (void*)p, rbuTargetNameFunc, 0, 0 - ); - } - if( p->rc==SQLITE_OK ){ - p->rc = sqlite3_file_control(p->dbMain, "main", SQLITE_FCNTL_RBU, (void*)p); - } - rbuMPrintfExec(p, p->dbMain, "SELECT * FROM sqlite_master"); +/* +** Within the RBU_STAGE_OAL stage, each call to sqlite3rbu_step() performs +** one of the following operations. +*/ +#define RBU_INSERT 1 /* Insert on a main table b-tree */ +#define RBU_DELETE 2 /* Delete a row from a main table b-tree */ +#define RBU_REPLACE 3 /* Delete and then insert a row */ +#define RBU_IDX_DELETE 4 /* Delete a row from an aux. index b-tree */ +#define RBU_IDX_INSERT 5 /* Insert on an aux. index b-tree */ - /* Mark the database file just opened as an RBU target database. If - ** this call returns SQLITE_NOTFOUND, then the RBU vfs is not in use. - ** This is an error. */ - if( p->rc==SQLITE_OK ){ - p->rc = sqlite3_file_control(p->dbMain, "main", SQLITE_FCNTL_RBU, (void*)p); - } +#define RBU_UPDATE 6 /* Update a row in a main table b-tree */ - if( p->rc==SQLITE_NOTFOUND ){ - p->rc = SQLITE_ERROR; - p->zErrmsg = sqlite3_mprintf("rbu vfs not found"); - } -} +/* +** A single step of an incremental checkpoint - frame iWalFrame of the wal +** file should be copied to page iDbPage of the database file. +*/ +struct RbuFrame { + u32 iDbPage; + u32 iWalFrame; +}; /* -** This routine is a copy of the sqlite3FileSuffix3() routine from the core. -** It is a no-op unless SQLITE_ENABLE_8_3_NAMES is defined. +** RBU handle. ** -** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database -** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and -** if filename in z[] has a suffix (a.k.a. "extension") that is longer than -** three characters, then shorten the suffix on z[] to be the last three -** characters of the original suffix. +** nPhaseOneStep: +** If the RBU database contains an rbu_count table, this value is set to +** a running estimate of the number of b-tree operations required to +** finish populating the *-oal file. This allows the sqlite3_bp_progress() +** API to calculate the permyriadage progress of populating the *-oal file +** using the formula: ** -** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always -** do the suffix shortening regardless of URI parameter. +** permyriadage = (10000 * nProgress) / nPhaseOneStep ** -** Examples: +** nPhaseOneStep is initialized to the sum of: ** -** test.db-journal => test.nal -** test.db-wal => test.wal -** test.db-shm => test.shm -** test.db-mj7f3319fa => test.9fa +** nRow * (nIndex + 1) +** +** for all source tables in the RBU database, where nRow is the number +** of rows in the source table and nIndex the number of indexes on the +** corresponding target database table. +** +** This estimate is accurate if the RBU update consists entirely of +** INSERT operations. However, it is inaccurate if: +** +** * the RBU update contains any UPDATE operations. If the PK specified +** for an UPDATE operation does not exist in the target table, then +** no b-tree operations are required on index b-trees. Or if the +** specified PK does exist, then (nIndex*2) such operations are +** required (one delete and one insert on each index b-tree). +** +** * the RBU update contains any DELETE operations for which the specified +** PK does not exist. In this case no operations are required on index +** b-trees. +** +** * the RBU update contains REPLACE operations. These are similar to +** UPDATE operations. +** +** nPhaseOneStep is updated to account for the conditions above during the +** first pass of each source table. The updated nPhaseOneStep value is +** stored in the rbu_state table if the RBU update is suspended. */ -static void rbuFileSuffix3(const char *zBase, char *z){ -#ifdef SQLITE_ENABLE_8_3_NAMES -#if SQLITE_ENABLE_8_3_NAMES<2 - if( sqlite3_uri_boolean(zBase, "8_3_names", 0) ) -#endif - { - int i, sz; - sz = (int)strlen(z)&0xffffff; - for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){} - if( z[i]=='.' && sz>i+4 ) memmove(&z[i+1], &z[sz-3], 4); - } -#endif -} +struct sqlite3rbu { + int eStage; /* Value of RBU_STATE_STAGE field */ + sqlite3 *dbMain; /* target database handle */ + sqlite3 *dbRbu; /* rbu database handle */ + char *zTarget; /* Path to target db */ + char *zRbu; /* Path to rbu db */ + char *zState; /* Path to state db (or NULL if zRbu) */ + char zStateDb[5]; /* Db name for state ("stat" or "main") */ + int rc; /* Value returned by last rbu_step() call */ + char *zErrmsg; /* Error message if rc!=SQLITE_OK */ + int nStep; /* Rows processed for current object */ + int nProgress; /* Rows processed for all objects */ + RbuObjIter objiter; /* Iterator for skipping through tbl/idx */ + const char *zVfsName; /* Name of automatically created rbu vfs */ + rbu_file *pTargetFd; /* File handle open on target db */ + int nPagePerSector; /* Pages per sector for pTargetFd */ + i64 iOalSz; + i64 nPhaseOneStep; + + /* The following state variables are used as part of the incremental + ** checkpoint stage (eStage==RBU_STAGE_CKPT). See comments surrounding + ** function rbuSetupCheckpoint() for details. */ + u32 iMaxFrame; /* Largest iWalFrame value in aFrame[] */ + u32 mLock; + int nFrame; /* Entries in aFrame[] array */ + int nFrameAlloc; /* Allocated size of aFrame[] array */ + RbuFrame *aFrame; + int pgsz; + u8 *aBuf; + i64 iWalCksum; + i64 szTemp; /* Current size of all temp files in use */ + i64 szTempLimit; /* Total size limit for temp files */ + + /* Used in RBU vacuum mode only */ + int nRbu; /* Number of RBU VFS in the stack */ + rbu_file *pRbuFd; /* Fd for main db of dbRbu */ +}; /* -** Return the current wal-index header checksum for the target database -** as a 64-bit integer. +** An rbu VFS is implemented using an instance of this structure. ** -** The checksum is store in the first page of xShmMap memory as an 8-byte -** blob starting at byte offset 40. +** Variable pRbu is only non-NULL for automatically created RBU VFS objects. +** It is NULL for RBU VFS objects created explicitly using +** sqlite3rbu_create_vfs(). It is used to track the total amount of temp +** space used by the RBU handle. */ -static i64 rbuShmChecksum(sqlite3rbu *p){ - i64 iRet = 0; - if( p->rc==SQLITE_OK ){ - sqlite3_file *pDb = p->pTargetFd->pReal; - u32 volatile *ptr; - p->rc = pDb->pMethods->xShmMap(pDb, 0, 32*1024, 0, (void volatile**)&ptr); - if( p->rc==SQLITE_OK ){ - iRet = ((i64)ptr[10] << 32) + ptr[11]; - } - } - return iRet; -} +struct rbu_vfs { + sqlite3_vfs base; /* rbu VFS shim methods */ + sqlite3_vfs *pRealVfs; /* Underlying VFS */ + sqlite3_mutex *mutex; /* Mutex to protect pMain */ + sqlite3rbu *pRbu; /* Owner RBU object */ + rbu_file *pMain; /* Linked list of main db files */ +}; /* -** This function is called as part of initializing or reinitializing an -** incremental checkpoint. -** -** It populates the sqlite3rbu.aFrame[] array with the set of -** (wal frame -> db page) copy operations required to checkpoint the -** current wal file, and obtains the set of shm locks required to safely -** perform the copy operations directly on the file-system. +** Each file opened by an rbu VFS is represented by an instance of +** the following structure. ** -** If argument pState is not NULL, then the incremental checkpoint is -** being resumed. In this case, if the checksum of the wal-index-header -** following recovery is not the same as the checksum saved in the RbuState -** object, then the rbu handle is set to DONE state. This occurs if some -** other client appends a transaction to the wal file in the middle of -** an incremental checkpoint. +** If this is a temporary file (pRbu!=0 && flags&DELETE_ON_CLOSE), variable +** "sz" is set to the current size of the database file. */ -static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){ - - /* If pState is NULL, then the wal file may not have been opened and - ** recovered. Running a read-statement here to ensure that doing so - ** does not interfere with the "capture" process below. */ - if( pState==0 ){ - p->eStage = 0; - if( p->rc==SQLITE_OK ){ - p->rc = sqlite3_exec(p->dbMain, "SELECT * FROM sqlite_master", 0, 0, 0); - } - } - - /* Assuming no error has occurred, run a "restart" checkpoint with the - ** sqlite3rbu.eStage variable set to CAPTURE. This turns on the following - ** special behaviour in the rbu VFS: - ** - ** * If the exclusive shm WRITER or READ0 lock cannot be obtained, - ** the checkpoint fails with SQLITE_BUSY (normally SQLite would - ** proceed with running a passive checkpoint instead of failing). - ** - ** * Attempts to read from the *-wal file or write to the database file - ** do not perform any IO. Instead, the frame/page combinations that - ** would be read/written are recorded in the sqlite3rbu.aFrame[] - ** array. - ** - ** * Calls to xShmLock(UNLOCK) to release the exclusive shm WRITER, - ** READ0 and CHECKPOINT locks taken as part of the checkpoint are - ** no-ops. These locks will not be released until the connection - ** is closed. - ** - ** * Attempting to xSync() the database file causes an SQLITE_INTERNAL - ** error. - ** - ** As a result, unless an error (i.e. OOM or SQLITE_BUSY) occurs, the - ** checkpoint below fails with SQLITE_INTERNAL, and leaves the aFrame[] - ** array populated with a set of (frame -> page) mappings. Because the - ** WRITER, CHECKPOINT and READ0 locks are still held, it is safe to copy - ** data from the wal file into the database file according to the - ** contents of aFrame[]. - */ - if( p->rc==SQLITE_OK ){ - int rc2; - p->eStage = RBU_STAGE_CAPTURE; - rc2 = sqlite3_exec(p->dbMain, "PRAGMA main.wal_checkpoint=restart", 0, 0,0); - if( rc2!=SQLITE_INTERNAL ) p->rc = rc2; - } +struct rbu_file { + sqlite3_file base; /* sqlite3_file methods */ + sqlite3_file *pReal; /* Underlying file handle */ + rbu_vfs *pRbuVfs; /* Pointer to the rbu_vfs object */ + sqlite3rbu *pRbu; /* Pointer to rbu object (rbu target only) */ + i64 sz; /* Size of file in bytes (temp only) */ - if( p->rc==SQLITE_OK && p->nFrame>0 ){ - p->eStage = RBU_STAGE_CKPT; - p->nStep = (pState ? pState->nRow : 0); - p->aBuf = rbuMalloc(p, p->pgsz); - p->iWalCksum = rbuShmChecksum(p); - } + int openFlags; /* Flags this file was opened with */ + u32 iCookie; /* Cookie value for main db files */ + u8 iWriteVer; /* "write-version" value for main db files */ + u8 bNolock; /* True to fail EXCLUSIVE locks */ - if( p->rc==SQLITE_OK ){ - if( p->nFrame==0 || (pState && pState->iWalCksum!=p->iWalCksum) ){ - p->rc = SQLITE_DONE; - p->eStage = RBU_STAGE_DONE; - }else{ - int nSectorSize; - sqlite3_file *pDb = p->pTargetFd->pReal; - sqlite3_file *pWal = p->pTargetFd->pWalFd->pReal; - assert( p->nPagePerSector==0 ); - nSectorSize = pDb->pMethods->xSectorSize(pDb); - if( nSectorSize>p->pgsz ){ - p->nPagePerSector = nSectorSize / p->pgsz; - }else{ - p->nPagePerSector = 1; - } + int nShm; /* Number of entries in apShm[] array */ + char **apShm; /* Array of mmap'd *-shm regions */ + char *zDel; /* Delete this when closing file */ - /* Call xSync() on the wal file. This causes SQLite to sync the - ** directory in which the target database and the wal file reside, in - ** case it has not been synced since the rename() call in - ** rbuMoveOalFile(). */ - p->rc = pWal->pMethods->xSync(pWal, SQLITE_SYNC_NORMAL); - } - } -} + const char *zWal; /* Wal filename for this main db file */ + rbu_file *pWalFd; /* Wal file descriptor for this main db */ + rbu_file *pMainNext; /* Next MAIN_DB file */ +}; /* -** Called when iAmt bytes are read from offset iOff of the wal file while -** the rbu object is in capture mode. Record the frame number of the frame -** being read in the aFrame[] array. +** True for an RBU vacuum handle, or false otherwise. */ -static int rbuCaptureWalRead(sqlite3rbu *pRbu, i64 iOff, int iAmt){ - const u32 mReq = (1<mLock!=mReq ){ - pRbu->rc = SQLITE_BUSY; - return SQLITE_INTERNAL; - } - - pRbu->pgsz = iAmt; - if( pRbu->nFrame==pRbu->nFrameAlloc ){ - int nNew = (pRbu->nFrameAlloc ? pRbu->nFrameAlloc : 64) * 2; - RbuFrame *aNew; - aNew = (RbuFrame*)sqlite3_realloc64(pRbu->aFrame, nNew * sizeof(RbuFrame)); - if( aNew==0 ) return SQLITE_NOMEM; - pRbu->aFrame = aNew; - pRbu->nFrameAlloc = nNew; - } +#define rbuIsVacuum(p) ((p)->zTarget==0) - iFrame = (u32)((iOff-32) / (i64)(iAmt+24)) + 1; - if( pRbu->iMaxFrame